<?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>104360</bug_id>
          
          <creation_ts>2012-12-07 03:19:16 -0800</creation_ts>
          <short_desc>Coordinated Graphics: Separate LayerTreeCoordinator into LayerTreeCoordinator and CompositingCoordinator</short_desc>
          <delta_ts>2013-06-28 12:10:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>111919</dependson>
    
    <dependson>118137</dependson>
          <blocked>102994</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Gwang Yoon Hwang">yoon</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abecsi</cc>
    
    <cc>andersca</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>d.nomiyama</cc>
    
    <cc>dongseong.hwang</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jaepark</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kadam</cc>
    
    <cc>kalyan.kondapally</cc>
    
    <cc>luiz</cc>
    
    <cc>menard</cc>
    
    <cc>noam</cc>
    
    <cc>rakuco</cc>
    
    <cc>skyul</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>785784</commentid>
    <comment_count>0</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2012-12-07 03:19:16 -0800</bug_when>
    <thetext>The LayerTreeCoordinator has too many responsibilities. It implements
LayerTreeHost, GraphicsLayerClient, CoordinatedGraphicsLayerClient,
CoordinatedImageBacking::Coordinator, UpdateAtlasClient,
GraphicsLayerFactory and WebCustomFilterProgramProxyClient.

This refactoring reduces the responsibilities of LayerTreeCoordinator.

By creates a new class called CompositingCoordinator, which takes the 
responsibility of scheduling compositing task in WebProcess,
LayerTreeCoordinator acts like simple LayerTreeHost.

By extracting interfaces dealing with LayerTreeCoordinatorProxy to
CompositingCoordinatorMessageClient, CompositingCoordinator is decoupled
from IPC handling.

WebCompositingCoordinatorMessageClient implements IPC handling for 
CompositingCoordinator and LayerTreeCoordinator.
WebCustomFilterProgramProxyClient is stands for IPC handling, so
WebCompositingCoordiantorMessageClient implements this interface, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785793</commentid>
    <comment_count>1</comment_count>
      <attachid>178194</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2012-12-07 03:59:42 -0800</bug_when>
    <thetext>Created attachment 178194
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786394</commentid>
    <comment_count>2</comment_count>
      <attachid>178194</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-12-07 20:08:19 -0800</bug_when>
    <thetext>Comment on attachment 178194
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=178194&amp;action=review
great work! some nits.

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinatorClient.h:84
&gt; +class CompositingCoordinatorClient {

CompositingCoordinator already has a Page instance. I think CompositingCoordinator can do some works by itself.
Perhaps this client is not necessary.

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:57
&gt; +    m_compositingCoordinator = CompositingCoordinator::create(m_webPage-&gt;corePage(), this, m_compositingCoordinatorMessageClient.get());

I think LayerTreeCoordinator should delegate ownership of WebCompositingCoordinatorMessageClient to CompositingCoordinator.
LayerTreeCoordinator sometimes uses m_compositingCoordinatorMessageClient directly, but it means WebCompositingCoordinatorMessageClient plays a role of LayerTreeCoordinator.
I think you want to get together all communication mechanism of CompositingCoordinator into WebCompositingCoordinatorMessageClient, not them of LayerTreeCoordinator.

I mean LayerTreeCoordinator should communicate its own message by itself, not via WebCompositingCoordinatorMessageClient, and LayerTreeCoordinator does not need to own WebCompositingCoordinatorMessageClient after passing it to CompositingCoordinator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786395</commentid>
    <comment_count>3</comment_count>
      <attachid>178194</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-12-07 20:12:30 -0800</bug_when>
    <thetext>Comment on attachment 178194
Patch

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

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/WebCompositingCoordinatorMessageClient.cpp:70
&gt; +    m_webPage-&gt;send(Messages::LayerTreeCoordinatorProxy::SetRootCompositingLayer(id));

WebCompositingCoordinatorMessageClient sends messages to LayerTreeCoordinatorProxy, not WebCompositingCoordinatorMessageClientProxy(?).
And LayerTreeCoordinatorProxy sends messages to LayerTreeCoordinator and LayerTreeCoordinator redirects to CompositingCoordinator.
It means refactoring is not complete.
Do you make it in next bugs?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786421</commentid>
    <comment_count>4</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2012-12-07 21:37:22 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 178194 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=178194&amp;action=review
&gt; great work! some nits.
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinatorClient.h:84
&gt; &gt; +class CompositingCoordinatorClient {
&gt; 
&gt; CompositingCoordinator already has a Page instance. I think CompositingCoordinator can do some works by itself.
&gt; Perhaps this client is not necessary.

Page is not enough to remove CompositingCoordinatorClient.

For example : CompositingCoordinatorClient::layoutIfNeeded.

In the WebKit1 case, page-&gt;mainFrame()-&gt;view()-&gt;updateLayoutAndStyleIfNeededRecursive() is sufficient.
But in the WebKit2 case, we need to consider m_underlayPage in WebKit::WebPage.
That&apos;s why I delegate this to Client.

Other methods in this Client has dependencies to WebKit::WebPage, not only WebCore::Page.

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:57
&gt; &gt; +    m_compositingCoordinator = CompositingCoordinator::create(m_webPage-&gt;corePage(), this, m_compositingCoordinatorMessageClient.get());
&gt; 
&gt; I think LayerTreeCoordinator should delegate ownership of WebCompositingCoordinatorMessageClient to CompositingCoordinator.
&gt; LayerTreeCoordinator sometimes uses m_compositingCoordinatorMessageClient directly, but it means WebCompositingCoordinatorMessageClient plays a role of LayerTreeCoordinator.
&gt; I think you want to get together all communication mechanism of CompositingCoordinator into WebCompositingCoordinatorMessageClient, not them of LayerTreeCoordinator.
&gt; 
&gt; I mean LayerTreeCoordinator should communicate its own message by itself, not via WebCompositingCoordinatorMessageClient, and LayerTreeCoordinator does not need to own WebCompositingCoordinatorMessageClient after passing it to CompositingCoordinator.

CompositingCoordinatorMessageClient is made for interface to send messages to renderer.

And WebCompositingCoordinatorMessageClient implements interface from above, and extra messages from LayerTreeCoordinator. WebCompositingCoordinatorMessageClient has a duty to send IPC message, and manage data types just for IPC communication. So I think it is natural.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786422</commentid>
    <comment_count>5</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2012-12-07 21:46:53 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 178194 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=178194&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/WebCompositingCoordinatorMessageClient.cpp:70
&gt; &gt; +    m_webPage-&gt;send(Messages::LayerTreeCoordinatorProxy::SetRootCompositingLayer(id));
&gt; 
&gt; WebCompositingCoordinatorMessageClient sends messages to LayerTreeCoordinatorProxy, not WebCompositingCoordinatorMessageClientProxy(?).
&gt; And LayerTreeCoordinatorProxy sends messages to LayerTreeCoordinator and LayerTreeCoordinator redirects to CompositingCoordinator.
&gt; It means refactoring is not complete.
&gt; Do you make it in next bugs?

Relationships between LayerTreeCoordinator &lt;-&gt; LayerTreeCoordinatorProxy is maintained. LayerTreeCoordinator just uses CompositingCooridnator and its clients to manage resources and send messages. WebCompositingCoordinatorMessageClient is not replacement of LayerTreeCoordinator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786436</commentid>
    <comment_count>6</comment_count>
      <attachid>178339</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2012-12-07 22:57:41 -0800</bug_when>
    <thetext>Created attachment 178339
Patch

rebase after r136976</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787186</commentid>
    <comment_count>7</comment_count>
      <attachid>178512</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2012-12-10 04:10:12 -0800</bug_when>
    <thetext>Created attachment 178512
Patch

Fix typos, rebase after r137128</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788720</commentid>
    <comment_count>8</comment_count>
      <attachid>178512</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-11 13:23:21 -0800</bug_when>
    <thetext>Comment on attachment 178512
Patch

This is quite messy... 
I&apos;d rather if we divided to 2 classes:
1. common with threaded
2. WebKit2 only. This would include the non-composited layer, messaging, WebPage access etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788730</commentid>
    <comment_count>9</comment_count>
      <attachid>178863</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2012-12-11 13:29:07 -0800</bug_when>
    <thetext>Created attachment 178863
Rebase after r137293

To remove ambiguity, rename CompositingCoordinatorMessageClient to CompositingCoordinatorCommands</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788735</commentid>
    <comment_count>10</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2012-12-11 13:34:45 -0800</bug_when>
    <thetext>After a discussion in IRC, I update the patch.

CoordinatedLayerTreeHost: It has a responsibility to mediate between LayerTreeHost and CompositingCoordinator. It uses CompositingCoordiator to fulfill LayerTreeHost&apos;s requirements, and manage states dedicated on WebKit2 (forceRepaint and notifyAfterScheduledLayerFlush).
It also provides a way for CompositingCoordinator to use WebKit::WebPage via implementing CompositingCoordinatorClient, because there are unremoveable dependencies between CompositingCoordinator and WebKit::WebPage (eg. m_underlayPage in WebKit::WebPage). We can remove this dependencies afterwards.

CompositingCoordinatorCommands: This interface defines several methods used by CompositingCoordinator to send commands to renderer. Methods of this interface are gathered from CoordiantedLayerTreeHostProxyMessages.

WebCompositingCoordinatorCommands: It is a concrete implemention of CompositingCoordinatorCommands. WebCompositingCoordinatorCommands manages the lifecycle of IPC specific datatypes and sends IPC message.

1. I think it is natual to create WebCompositingCoordinatorCommands in this refactoring

2. By introducing WebCompositingCoordinatorCommands, we can separate the IPC specific commands from the CoordinatedLayerTreeHost. Without WebCompositingCoordinatorCommands, 

3. It is ambiguous if we insert CompositingCoordinatorCommands::setRootCompositingLayer into CoordinatedLayerTreeHost.
Because of LayerTreeHost::setRootCompositingLayer, we need to rename CompositingCoordinatorCommands::setRootCompositingLayer. But methods of CompositingCommands are matched with CoordinatedLayerTreeHostProxyMessages, it is a little bit hard to change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788751</commentid>
    <comment_count>11</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2012-12-11 13:48:57 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 178512 [details])
&gt; This is quite messy... 
&gt; I&apos;d rather if we divided to 2 classes:
&gt; 1. common with threaded
&gt; 2. WebKit2 only. This would include the non-composited layer, messaging, WebPage access etc.

It think WebCompositingCoordinatorCommands helps to make more understandable code. On CompositingCoordinator side of view, It uses CompositingCoordinatorClient to access the non-composited layer and WebPage. And to send commands to renderer, It uses CompositingCoordinatorCommands.

If we implement CompositingCoordinatorCommands inside of CoordinatedLayerTreeHost, the call sequence of LayerTreeHost can make several ping/pongs between CompositingCoordinator and CoordinatedLayerTreeHost in a single method call. I think it makes hard to read code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788986</commentid>
    <comment_count>12</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-12-11 16:52:02 -0800</bug_when>
    <thetext>I read IRC discussion with noamr and ryumiel. your opinions are very reasonable. I want to stack a bit idea on your opinions.

I prefer keeping three class: CoordinatedLayerTreeHost, CompositingCoordinator and WebCompositingCoordinatorOperations (extends CompositingCoordinatorOperations)

The role description is
CoordinatedLayerTreeHost : LayerTreeHost for Coordinated Graphics
CompositingCoordinator : Managing the lifecycle, root layer and etc. It will be reused in both WK1 and WK2.
CompositingCoordinatorOperations : Operations to communicate with LayerTreeRenderer.
WebCompositingCoordinatorOperations : IPC-based CompositingCoordinatorOperations implementaion.

CoordinatedLayerTreeHost can extend CompositingCoordinatorOperations, but it makes CoordinatedLayerTreeHost play many roles. I prefer that CoordinatedLayerTreeHost has a minimal role: LayerTreeHost.

If ryumiel choose this suggestion, ryumiel need to move some code from WebCompositingCoordinatorOperations to CoordinatedLayerTreeHost. CoordinatedLayerTreeHost should send messages to UI Process by itself. I think CoordinatedLayerTreeHost does not need to have a WebCompositingCoordinatorOperations member. After setting WebCompositingCoordinatorOperations to CompositingCoordinator, CoordinatedLayerTreeHost should not use WebCompositingCoordinatorOperations anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789207</commentid>
    <comment_count>13</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-11 22:23:30 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; I read IRC discussion with noamr and ryumiel. your opinions are very reasonable. I want to stack a bit idea on your opinions.
&gt; 
&gt; I prefer keeping three class: CoordinatedLayerTreeHost, CompositingCoordinator and WebCompositingCoordinatorOperations (extends CompositingCoordinatorOperations)
&gt; 
&gt; The role description is
&gt; CoordinatedLayerTreeHost : LayerTreeHost for Coordinated Graphics
&gt; CompositingCoordinator : Managing the lifecycle, root layer and etc. It will be reused in both WK1 and WK2.
&gt; CompositingCoordinatorOperations : Operations to communicate with LayerTreeRenderer.
&gt; WebCompositingCoordinatorOperations : IPC-based CompositingCoordinatorOperations implementaion.

My issue is mainly with CompositingCoordinatorOperations. I don&apos;t like that it&apos;s a bunch of virtual functions; instead it should be a list of operations, with a type and parameters, that we encode/decode in WebKit2.
So, CoordinatedLayerTreeHost and CompositingCoordinator are pretty clear,
but I would have CoordinatedLayerTreeHost deal with e.g. converting a CoordinatedSurface inside CompositingCoordinatorOperations and converting it to a handle, rather than have an additional WebCompositingCoordinatorOperations class for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789241</commentid>
    <comment_count>14</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-12-11 23:24:54 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; I read IRC discussion with noamr and ryumiel. your opinions are very reasonable. I want to stack a bit idea on your opinions.
&gt; &gt; 
&gt; &gt; I prefer keeping three class: CoordinatedLayerTreeHost, CompositingCoordinator and WebCompositingCoordinatorOperations (extends CompositingCoordinatorOperations)
&gt; &gt; 
&gt; &gt; The role description is
&gt; &gt; CoordinatedLayerTreeHost : LayerTreeHost for Coordinated Graphics
&gt; &gt; CompositingCoordinator : Managing the lifecycle, root layer and etc. It will be reused in both WK1 and WK2.
&gt; &gt; CompositingCoordinatorOperations : Operations to communicate with LayerTreeRenderer.
&gt; &gt; WebCompositingCoordinatorOperations : IPC-based CompositingCoordinatorOperations implementaion.
&gt; 
&gt; My issue is mainly with CompositingCoordinatorOperations. I don&apos;t like that it&apos;s a bunch of virtual functions; instead it should be a list of operations, with a type and parameters, that we encode/decode in WebKit2.
&gt; So, CoordinatedLayerTreeHost and CompositingCoordinator are pretty clear,
&gt; but I would have CoordinatedLayerTreeHost deal with e.g. converting a CoordinatedSurface inside CompositingCoordinatorOperations and converting it to a handle, rather than have an additional WebCompositingCoordinatorOperations class for that.

do you mean that you want template polymorphism instead of class polymorphism. When it comes to how to implement, I does not have concrete idea yet.

However, if we find a solution, we cannot use template polymorphism, because we need to switch WK1&apos;s CompositingCoordinatorOperations and WK2&apos;s CompositingCoordinatorOperations in runtime, not compile time.
It is because we must compile both implementation together: WK1 will use WebCore&apos;s CompositingCoordinatorOperations while WK2 will use WebCompositingCoordinatorOperations.
I think virtual causes some overhead, but I cannot find more feasible solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790598</commentid>
    <comment_count>15</comment_count>
      <attachid>178863</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-13 07:25:36 -0800</bug_when>
    <thetext>Comment on attachment 178863
Rebase after r137293

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

This change takes the code in a direction I don&apos;t agree with.
r- until we reach a concensus.

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinatorCommands.h:82
&gt; +class CompositingCoordinatorCommands {
&gt; +public:
&gt; +    virtual void setRootCompositingLayer(CoordinatedLayerID) = 0;
&gt; +    virtual void setCompositingLayerState(CoordinatedLayerID, const CoordinatedLayerInfo&amp;) = 0;
&gt; +    virtual void setCompositingLayerChildren(CoordinatedLayerID, const Vector&lt;CoordinatedLayerID&gt;&amp;) = 0;
&gt; +#if ENABLE(CSS_FILTERS)
&gt; +    virtual void setCompositingLayerFilters(CoordinatedLayerID, const WebCore::FilterOperations&amp;) = 0;
&gt; +#endif
&gt; +    virtual void deleteCompositingLayer(CoordinatedLayerID) = 0;
&gt; +
&gt; +    virtual void createTileForLayer(CoordinatedLayerID, uint32_t tileID, const WebCore::IntRect&amp;, const SurfaceUpdateInfo&amp;) = 0;
&gt; +    virtual void updateTileForLayer(CoordinatedLayerID, uint32_t tileID, const WebCore::IntRect&amp;, const SurfaceUpdateInfo&amp;) = 0;
&gt; +    virtual void removeTileForLayer(CoordinatedLayerID, uint32_t tileID) = 0;
&gt; +
&gt; +    virtual void createUpdateAtlas(uint32_t atlasID, const WebCoordinatedSurface::Handle&amp;) = 0;
&gt; +    virtual void removeUpdateAtlas(uint32_t atlasID) = 0;
&gt; +
&gt; +    virtual void createImageBacking(CoordinatedImageBackingID) = 0;
&gt; +    virtual void updateImageBacking(CoordinatedImageBackingID, const WebCoordinatedSurface::Handle&amp;) = 0;
&gt; +    virtual void clearImageBackingContents(CoordinatedImageBackingID) = 0;
&gt; +    virtual void removeImageBacking(CoordinatedImageBackingID) = 0;
&gt; +
&gt; +    virtual void didRenderFrame(const WebCore::IntSize&amp; contentsSize, const WebCore::IntRect&amp; coveredRect) = 0;
&gt; +    virtual void didChangeScrollPosition(const WebCore::FloatPoint&amp; position) = 0;
&gt; +
&gt; +#if USE(GRAPHICS_SURFACE)
&gt; +    virtual void createCanvas(CoordinatedLayerID, const WebCore::IntSize&amp;, const WebCore::GraphicsSurfaceToken&amp;) = 0;
&gt; +    virtual void syncCanvas(CoordinatedLayerID, uint32_t frontBuffer) = 0;
&gt; +    virtual void destroyCanvas(CoordinatedLayerID) = 0;
&gt; +#endif
&gt; +
&gt; +    virtual void setLayerAnimations(CoordinatedLayerID, const WebCore::GraphicsLayerAnimations&amp;) = 0;
&gt; +    virtual void setAnimationsLocked(bool) = 0;
&gt; +};

I&apos;d rather have these as operations; e.g.
CompositingOperations::RemoveTileForLayer::create(CoordinatedLayerID, uint32_t)
with a deepCopy function for threading.

and then 
WebCompositingOperations::encode/decode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805108</commentid>
    <comment_count>16</comment_count>
      <attachid>182305</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-01-11 02:44:55 -0800</bug_when>
    <thetext>Created attachment 182305
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805111</commentid>
    <comment_count>17</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-01-11 02:50:16 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; I&apos;d rather have these as operations; e.g.
&gt; CompositingOperations::RemoveTileForLayer::create(CoordinatedLayerID, uint32_t)
&gt; with a deepCopy function for threading.
&gt; 
&gt; and then 
&gt; WebCompositingOperations::encode/decode

I modified CoordinatedLayerTreeHost to inherit CompositingCoordinator and made some changes for namings.

But I could not apply your suggestion about CompositingOperations. Could you elaborate your idea on #15?

Thanks in advance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805974</commentid>
    <comment_count>18</comment_count>
      <attachid>182305</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-01-13 07:45:32 -0800</bug_when>
    <thetext>Comment on attachment 182305
Patch

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

This is not really what I meant...
If you don&apos;t mind, I can take charge of this patch as it&apos;s quite a major refactor that I feel I need to be more involved in.

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:234
&gt; +void CoordinatedLayerTreeHost::purgeBackingStores()
&gt; +{
&gt; +    CompositingCoordinator::purgeBackingStores();

Spaghetti code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806919</commentid>
    <comment_count>19</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-01-14 19:59:52 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 182305 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=182305&amp;action=review
&gt; 
&gt; This is not really what I meant...
&gt; If you don&apos;t mind, I can take charge of this patch as it&apos;s quite a major refactor that I feel I need to be more involved in.

I posted prototype actor model of TextureMapperLayer in Bug 103854.
I wish the patch would help you make complete actor model! feel free to use the patch :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851746</commentid>
    <comment_count>20</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-03-09 00:56:46 -0800</bug_when>
    <thetext>After #108294 and #111919, we almost complete to make a actor-model, I&apos;ll update this bug to match with current design.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854238</commentid>
    <comment_count>21</comment_count>
      <attachid>192909</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-03-13 06:01:04 -0700</bug_when>
    <thetext>Created attachment 192909
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854249</commentid>
    <comment_count>22</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-03-13 06:20:13 -0700</bug_when>
    <thetext>Now we can have unified messages after this bug, https://bugs.webkit.org/show_bug.cgi?id=111919, I think we can go forward with this bug.

So, I updated CompositingCoordinator / CoordinatedLayerTreeHost pair.

Changes are:

1. Now CompositingCoordinator manages the &quot;resources&quot; for CoordinatedGraphics. Such as layers, updateAtlases, and coordinated surfaces.

2. CoordinatedLayerTreeHost, which inherits CompositingCoordinator, implements scheduling.


I think it becomes much cleaner, but I need your opinion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855030</commentid>
    <comment_count>23</comment_count>
      <attachid>193083</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-03-14 01:01:32 -0700</bug_when>
    <thetext>Created attachment 193083
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855034</commentid>
    <comment_count>24</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-03-14 01:07:57 -0700</bug_when>
    <thetext>After discussion in IRC, I creates CompositingCoordinator::Client and modified CoordinatedLayerTree to inherit Client instead of CompositingCoordinator, to avoid multiple inheritance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897277</commentid>
    <comment_count>25</comment_count>
      <attachid>203804</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-06-05 04:41:13 -0700</bug_when>
    <thetext>Created attachment 203804
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897713</commentid>
    <comment_count>26</comment_count>
      <attachid>203920</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-06-06 03:51:48 -0700</bug_when>
    <thetext>Created attachment 203920
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897765</commentid>
    <comment_count>27</comment_count>
      <attachid>203920</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-06-06 07:04:54 -0700</bug_when>
    <thetext>Comment on attachment 203920
Patch

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

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:100
&gt; +    m_client-&gt;flushCompositingStatePeripheralLayers();

This should be called something like didFlushRootLayer(); The peripheral layers stuff should be known only to CoordinatedLTH.

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:176
&gt; +    m_client-&gt;prepareCustomFilterProxiesIfNeeded(state);

This should be called didSyncLayerState. The client can decide whether this is about custom filters or something else.

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CompositingCoordinator.h:70
&gt; +    class Client {
&gt; +    public:
&gt; +        virtual void flushCompositingStatePeripheralLayers() = 0;
&gt; +        virtual void scheduleLayerFlushRequired() = 0;
&gt; +        virtual void commitCoordinatedGraphicsState(CoordinatedGraphicsState&amp;) = 0;
&gt; +        virtual void paintContents(const GraphicsLayer*, GraphicsContext&amp;, const IntRect&amp; clipRect) = 0;
&gt; +#if ENABLE(CSS_SHADERS)
&gt; +        virtual void prepareCustomFilterProxiesIfNeeded(CoordinatedGraphicsLayerState&amp;) = 0;
&gt; +#endif
&gt; +    };

This client is too specific.
The CompositingCoordinator::Client class should respond to events that compositing coordinator knows about, otherwise it looks like an artificial separation of classes...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898058</commentid>
    <comment_count>28</comment_count>
      <attachid>204012</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-06-07 01:01:18 -0700</bug_when>
    <thetext>Created attachment 204012
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898059</commentid>
    <comment_count>29</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-06-07 01:07:29 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 203920 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=203920&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:100
&gt; &gt; +    m_client-&gt;flushCompositingStatePeripheralLayers();
&gt; 
&gt; This should be called something like didFlushRootLayer(); The peripheral layers stuff should be known only to CoordinatedLTH.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:176
&gt; &gt; +    m_client-&gt;prepareCustomFilterProxiesIfNeeded(state);
&gt; 
&gt; This should be called didSyncLayerState. The client can decide whether this is about custom filters or something else.
&gt; 

Yes, I love the way you suggests.

&gt; 
&gt; This client is too specific.
&gt; The CompositingCoordinator::Client class should respond to events that compositing coordinator knows about, otherwise it looks like an artificial separation of classes...

 I made didFlushRootLayer and didSyncLayerState, and a Client(CoordinatedLTH) do what it need. 
I think that makes CompositingCoordinator::Client more generic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898077</commentid>
    <comment_count>30</comment_count>
      <attachid>204012</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-06-07 02:46:13 -0700</bug_when>
    <thetext>Comment on attachment 204012
Patch

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

Sorry for the naming nitpicks... :)

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:175
&gt; +    m_client-&gt;didSyncLayerState(state);

Actually maybe this should be called willSyncLayerState. Otherwise it&apos;s a bit puzzling when it changes the state...

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CompositingCoordinator.h:64
&gt; +        virtual void didSyncLayerState(CoordinatedGraphicsLayerState&amp;) = 0;

willSyncLayerState. It&apos;s a bit puzzling to have &quot;did&quot; that modifies something...

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CompositingCoordinator.h:65
&gt; +        virtual void scheduleLayerFlushRequired() = 0;

notifyFlushRequired()

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CompositingCoordinator.h:66
&gt; +        virtual void commitCoordinatedGraphicsState(CoordinatedGraphicsState&amp;) = 0;

commitSceneState()

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CompositingCoordinator.h:67
&gt; +        virtual void paintContents(const GraphicsLayer*, GraphicsContext&amp;, const IntRect&amp; clipRect) = 0;

paintLayerContents</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898111</commentid>
    <comment_count>31</comment_count>
      <attachid>204024</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-06-07 04:59:31 -0700</bug_when>
    <thetext>Created attachment 204024
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898114</commentid>
    <comment_count>32</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-06-07 05:02:21 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (From update of attachment 204012 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=204012&amp;action=review
&gt; 
&gt; Sorry for the naming nitpicks... :)
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:175
&gt; &gt; +    m_client-&gt;didSyncLayerState(state);
&gt; 
&gt; Actually maybe this should be called willSyncLayerState. Otherwise it&apos;s a bit puzzling when it changes the state...
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CompositingCoordinator.h:64
&gt; &gt; +        virtual void didSyncLayerState(CoordinatedGraphicsLayerState&amp;) = 0;
&gt; 
&gt; willSyncLayerState. It&apos;s a bit puzzling to have &quot;did&quot; that modifies something...

Yes, I agree. Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CompositingCoordinator.h:65
&gt; &gt; +        virtual void scheduleLayerFlushRequired() = 0;
&gt; 
&gt; notifyFlushRequired()
&gt;

Ditto.
 
&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CompositingCoordinator.h:66
&gt; &gt; +        virtual void commitCoordinatedGraphicsState(CoordinatedGraphicsState&amp;) = 0;
&gt; 
&gt; commitSceneState()
&gt;

Ditto. 
&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CompositingCoordinator.h:67
&gt; &gt; +        virtual void paintContents(const GraphicsLayer*, GraphicsContext&amp;, const IntRect&amp; clipRect) = 0;
&gt; 
&gt; paintLayerContents
Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898118</commentid>
    <comment_count>33</comment_count>
      <attachid>204024</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-06-07 05:11:30 -0700</bug_when>
    <thetext>Comment on attachment 204024
Patch

Attachment 204024 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/715558</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898123</commentid>
    <comment_count>34</comment_count>
      <attachid>204029</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-06-07 05:23:47 -0700</bug_when>
    <thetext>Created attachment 204029
Fixed typo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898128</commentid>
    <comment_count>35</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-06-07 05:34:49 -0700</bug_when>
    <thetext>I&apos;m ok with this, but I would also like Jocelyn to take a look.
Furthermore, it requires a WK2 owner review because of the change to LayerTreeHost.h (though the change is rather trivial).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898602</commentid>
    <comment_count>36</comment_count>
      <attachid>204029</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2013-06-10 03:35:03 -0700</bug_when>
    <thetext>Comment on attachment 204029
Fixed typo

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

I can&apos;t see anything wrong with the patch, here are just a couple of picky comments.

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:122
&gt; +        m_client-&gt;commitSceneState(m_state);
&gt; +
&gt; +        clearPendingStateChanges();
&gt; +        m_isWaitingForRenderer = true;

It feels to me that m_isWaitingForRenderer is part of the &quot;async state management&quot; responsibility and would fit better to CoordinatedLayerTreeHost, so I would keep it outside. But you probably know better what feature you&apos;ll need in CompositingCoordinator, so just use this as food for thoughts.

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:83
&gt; +    m_coordinator = CompositingCoordinator::create(webPage-&gt;corePage(), this);
&gt;  
&gt; -    CoordinatedSurface::setFactory(createCoordinatedSurface);
&gt; +    m_coordinator-&gt;createRootLayer(m_webPage-&gt;size());

Please consistently use either webPage or m_webPage (webPage would be easier to follow here).

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:84
&gt; +    m_layerTreeContext.coordinatedLayerID = toCoordinatedGraphicsLayer(rootLayer())-&gt;id();

Directly using m_coordinator-&gt;rootLayer() would give more context here.
Actually, unless I&apos;m missing the point, I think that CoordinatedLayerTreeHost::rootLayer() is more harmful than helpful everywhere I see it used, I would avoid it.

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:325
&gt;  void CoordinatedLayerTreeHost::syncDisplayState()

syncDisplayState deals with WebCore stuff, essential steps like layouting and servicing scripted animations. I think it fits more into CompositingCoordinator&apos;s responsibility.
You&apos;ll need this kind of logic later on in WebKit1 anyway and it shouldn&apos;t be dupplicated if possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903229</commentid>
    <comment_count>37</comment_count>
      <attachid>204029</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-06-25 00:29:48 -0700</bug_when>
    <thetext>Comment on attachment 204029
Fixed typo

r- based on Jocelyn&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903638</commentid>
    <comment_count>38</comment_count>
      <attachid>205472</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-06-26 05:03:00 -0700</bug_when>
    <thetext>Created attachment 205472
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903643</commentid>
    <comment_count>39</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-06-26 05:14:21 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; (From update of attachment 204029 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=204029&amp;action=review
&gt; 
&gt; I can&apos;t see anything wrong with the patch, here are just a couple of picky comments.
&gt; 

Sorry for late.

&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:122
&gt; &gt; +        m_client-&gt;commitSceneState(m_state);
&gt; &gt; +
&gt; &gt; +        clearPendingStateChanges();
&gt; &gt; +        m_isWaitingForRenderer = true;
&gt; 
&gt; It feels to me that m_isWaitingForRenderer is part of the &quot;async state management&quot; responsibility and would fit better to CoordinatedLayerTreeHost, so I would keep it outside. But you probably know better what feature you&apos;ll need in CompositingCoordinator, so just use this as food for thoughts.
&gt; 
I agreed your comment about m_isWaitingForRenderer. By moving it to CoordinatedLayerTreeHost, I could remove some redundant codes.


&gt; &gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:83
&gt; &gt; +    m_coordinator = CompositingCoordinator::create(webPage-&gt;corePage(), this);
&gt; &gt;  
&gt; &gt; -    CoordinatedSurface::setFactory(createCoordinatedSurface);
&gt; &gt; +    m_coordinator-&gt;createRootLayer(m_webPage-&gt;size());
&gt; 
&gt; Please consistently use either webPage or m_webPage (webPage would be easier to follow here).
&gt; 
Fixed. :)

&gt; &gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:84
&gt; &gt; +    m_layerTreeContext.coordinatedLayerID = toCoordinatedGraphicsLayer(rootLayer())-&gt;id();
&gt; 
&gt; Directly using m_coordinator-&gt;rootLayer() would give more context here.
&gt; Actually, unless I&apos;m missing the point, I think that CoordinatedLayerTreeHost::rootLayer() is more harmful than helpful everywhere I see it used, I would avoid it.
&gt; 
Modified to use m_coordinator-&gt;rootLayer().

&gt; &gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:325
&gt; &gt;  void CoordinatedLayerTreeHost::syncDisplayState()
&gt; 
&gt; syncDisplayState deals with WebCore stuff, essential steps like layouting and servicing scripted animations. I think it fits more into CompositingCoordinator&apos;s responsibility.
&gt; You&apos;ll need this kind of logic later on in WebKit1 anyway and it shouldn&apos;t be dupplicated if possible.

I placed syncDisplayState to CompositingCoordinator since it deals with WebKit2::WebPage::layoutIfNeeded. It relayouts not only main frame, but also main frame of underlayPage which is a specific to WebKit2.

If Qt, EFL, and Gtk do not cares about underlayPage now, this can be CompositingCoordinator. 

Anyway, I posted the patch that moves syncDisplayState to CompositingCoordinator, and It seems much cleaner. After this patch we can get another idea to handle underlayPage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903761</commentid>
    <comment_count>40</comment_count>
      <attachid>205472</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-06-26 09:22:35 -0700</bug_when>
    <thetext>Comment on attachment 205472
Patch

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

&gt; Source/WebCore/ChangeLog:21
&gt; +        CoordinatedLayerTreeHost now takes a part for scheduling and IPC
&gt; +        specific parts.

CoordinatedLayerTreeHost is responsible only for the scheduling and IPC-specific stuff, which are relevant only for WebKit2.

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:196
&gt; +

Remove line

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:198
&gt; +

Remove line</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904010</commentid>
    <comment_count>41</comment_count>
      <attachid>205548</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-06-26 17:49:49 -0700</bug_when>
    <thetext>Created attachment 205548
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904011</commentid>
    <comment_count>42</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-06-26 17:54:06 -0700</bug_when>
    <thetext>(In reply to comment #40)
&gt; (From update of attachment 205472 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=205472&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:21
&gt; &gt; +        CoordinatedLayerTreeHost now takes a part for scheduling and IPC
&gt; &gt; +        specific parts.
&gt; 
&gt; CoordinatedLayerTreeHost is responsible only for the scheduling and IPC-specific stuff, which are relevant only for WebKit2.

Thanks for suggestion. Fixed.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:196
&gt; &gt; +
&gt; 
&gt; Remove line
&gt; 
Removed

&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:198
&gt; &gt; +
&gt; 
&gt; Remove line

Removed.


I think I&apos;ve reset review flag by accidentally. ;(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904019</commentid>
    <comment_count>43</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-06-26 18:17:31 -0700</bug_when>
    <thetext>WK2 changes look good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904039</commentid>
    <comment_count>44</comment_count>
      <attachid>205548</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-06-26 19:50:46 -0700</bug_when>
    <thetext>Comment on attachment 205548
Patch

Clearing flags on attachment: 205548

Committed r152074: &lt;http://trac.webkit.org/changeset/152074&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904040</commentid>
    <comment_count>45</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-06-26 19:50:52 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904221</commentid>
    <comment_count>46</comment_count>
    <who name="Ádám Kallai">kadam</who>
    <bug_when>2013-06-27 07:06:39 -0700</bug_when>
    <thetext>This patch caused lots of crash on Qt Wk2 bots:

http://build.webkit.sed.hu/results/x86-32%20Linux%20Qt%20Release%20WebKit2/r152093%20(36414)/results.html

and API tests are failing with crash too:

http://build.webkit.sed.hu/builders/x86-64%20Linux%20Qt%20Release%20-%20Qt5.1%20-%20WebKit2/builds/238/steps/API%20tests/logs/stdio

Lots of layout tests became flaky on Qt 5.1 Wk2 bot after it:

http://build.webkit.sed.hu/results/x86-64%20Linux%20Qt%20Release%20-%20Qt5.1%20-%20WebKit2/r152075%20(238)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904223</commentid>
    <comment_count>47</comment_count>
    <who name="Ádám Kallai">kadam</who>
    <bug_when>2013-06-27 07:07:46 -0700</bug_when>
    <thetext>Could you check it, please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904227</commentid>
    <comment_count>48</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-06-27 07:28:38 -0700</bug_when>
    <thetext>(In reply to comment #47)
&gt; Could you check it, please?

Currently, I didn&apos;t bring my laptop ;(

I didn&apos;t check api test but layout test was passed in my pc.
 I don&apos;t have idea about it right now. 

I can start investgate about it 7 hours later.
If you want, plz revert it for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904245</commentid>
    <comment_count>49</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-06-27 08:06:13 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 118137</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904632</commentid>
    <comment_count>50</comment_count>
      <attachid>205715</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-06-28 08:08:43 -0700</bug_when>
    <thetext>Created attachment 205715
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904633</commentid>
    <comment_count>51</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-06-28 08:11:05 -0700</bug_when>
    <thetext>(In reply to comment #50)
&gt; Created an attachment (id=205715) [details]
&gt; Patch

I&apos;ve omitted synchronization check in CoordinatedLayerTreeHost::forceRepaint. That causes crashes in API test of WebKitQt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904720</commentid>
    <comment_count>52</comment_count>
      <attachid>205715</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-06-28 11:48:59 -0700</bug_when>
    <thetext>Comment on attachment 205715
Patch

OK, hopefully this time the bots don&apos;t barf.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904723</commentid>
    <comment_count>53</comment_count>
      <attachid>205715</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-06-28 12:10:29 -0700</bug_when>
    <thetext>Comment on attachment 205715
Patch

Clearing flags on attachment: 205715

Committed r152183: &lt;http://trac.webkit.org/changeset/152183&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904724</commentid>
    <comment_count>54</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-06-28 12:10:39 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178194</attachid>
            <date>2012-12-07 03:59:42 -0800</date>
            <delta_ts>2012-12-07 22:57:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104360-20121207205705.patch</filename>
            <type>text/plain</type>
            <size>110765</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2OTM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMWYzMzgwYmRhYmE2YjFm
N2Q3NjNkNzc1MzU1YzkzYWFlMjlkMjYyOS4uMWJhOWY3N2M4NTc0MGE0ODhhMDIwMmViZGJjZGE2
M2NiZjJmMGYzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3OCBAQAorMjAxMi0xMi0wNyAgR3dh
bmcgWW9vbiBId2FuZyAgPHJ5dW1pZWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgQ29vcmRp
bmF0ZWQgR3JhcGhpY3M6IFNlcGFyZWF0ZSBMYXllclRyZWVDb29yZGluYXRvciBpbnRvIExheWVy
VHJlZUNvb3JkaW5hdG9yIGFuZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQzNjAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgTGF5ZXJUcmVlQ29vcmRpbmF0
b3IgaGFzIHRvbyBtYW55IHJlc3BvbnNpYmlsaXRpZXMuIEl0IGltcGxlbWVudHMKKyAgICAgICAg
TGF5ZXJUcmVlSG9zdCwgR3JhcGhpY3NMYXllckNsaWVudCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyQ2xpZW50LAorICAgICAgICBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0b3Is
IFVwZGF0ZUF0bGFzQ2xpZW50LAorICAgICAgICBHcmFwaGljc0xheWVyRmFjdG9yeSBhbmQgV2Vi
Q3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5Q2xpZW50LgorCisgICAgICAgIFRoaXMgcmVmYWN0b3Jp
bmcgcmVkdWNlcyB0aGUgcmVzcG9uc2liaWxpdGllcyBvZiBMYXllclRyZWVDb29yZGluYXRvci4K
KworICAgICAgICBCeSBjcmVhdGVzIGEgbmV3IGNsYXNzIGNhbGxlZCBDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yLCB3aGljaCB0YWtlcyB0aGUKKyAgICAgICAgcmVzcG9uc2liaWxpdHkgb2Ygc2NoZWR1
bGluZyBjb21wb3NpdGluZyB0YXNrIGluIFdlYlByb2Nlc3MsCisgICAgICAgIExheWVyVHJlZUNv
b3JkaW5hdG9yIGFjdHMgbGlrZSBzaW1wbGUgTGF5ZXJUcmVlSG9zdC4KKworICAgICAgICBCeSBl
eHRyYWN0aW5nIGludGVyZmFjZXMgZGVhbGluZyB3aXRoIExheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHkgdG8KKyAgICAgICAgQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQsIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3IgaXMgZGVjb3VwbGVkCisgICAgICAgIGZyb20gSVBDIGhhbmRsaW5n
LgorCisgICAgICAgIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50IGltcGxl
bWVudHMgSVBDIGhhbmRsaW5nIGZvcgorICAgICAgICBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yIGFu
ZCBMYXllclRyZWVDb29yZGluYXRvci4KKyAgICAgICAgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVBy
b3h5Q2xpZW50IGlzIHN0YW5kcyBmb3IgSVBDIGhhbmRsaW5nLCBzbworICAgICAgICBXZWJDb21w
b3NpdGluZ0Nvb3JkaWFudG9yTWVzc2FnZUNsaWVudCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNl
LCB0b28uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gY2hhbmdlIGluIGJlaGF2
aW9yLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVGFyZ2V0LnByaToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3Np
dGluZ0Nvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgQWRkZWQuIEl0IHRha2VzIHJlc3BvbnNpYmls
aXkgZm9yIHNjaGVkdWxpbmcgY29tcG9zaXRpbmcgdGFza3MgYW5kCisgICAgICAgIG1hbmFnaW5n
IHJlc291cmNlcy4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0
aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6On5Db21wb3NpdGluZ0Nvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYktpdDo6Q29t
cG9zaXRpbmdDb29yZGluYXRvcjo6Q29tcG9zaXRpbmdDb29yZGluYXRvcik6CisgICAgICAgIChX
ZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5h
YmxlZCk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNjaGVkdWxl
TGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNh
bmNlbFBlbmRpbmdMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29y
ZGluYXRvcjo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9z
aXRpbmdDb29yZGluYXRvcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KToKKyAgICAgICAgKFdlYktp
dDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Zm9yY2VSZXBhaW50KToKKyAgICAgICAgKFdlYktp
dDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2l6ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJL
aXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcyk6Cisg
ICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnN5bmNMYXllclN0YXRlKToK
KyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c3luY0xheWVyQ2hpbGRy
ZW4pOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVDYW52
YXMpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzeW5jQ2FudmFz
KToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6ZGVzdHJveUNhbnZh
cyk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnN5bmNMYXllckZp
bHRlcnMpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hM
YXllcik6CisgICAgICAgIChXZWJLaXQ6OnVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvclNlbGYp
OgorICAgICAgICAoV2ViS2l0Ojp1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcik6Cisg
ICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnN5bmNGaXhlZExheWVycyk6
CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmxvY2tBbmltYXRpb25z
KToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6dW5sb2NrQW5pbWF0
aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnBlcmZvcm1T
Y2hlZHVsZWRMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGlu
YXRvcjo6c3luY0Rpc3BsYXlTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OmxheWVyRmx1c2hUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9z
aXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlUGFnZU92ZXJsYXlMYXllcik6CisgICAgICAgIChXZWJL
aXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKToKKyAg
ICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0UGFnZU92ZXJsYXlOZWVk
c0Rpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzZXRQ
YWdlT3ZlcmxheU9wYWNpdHkpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJLaXQ6
OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnVwZGF0ZUltYWdlQmFja2luZyk6CisgICAgICAgIChX
ZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMp
OgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZW1vdmVJbWFnZUJh
Y2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpmbHVzaFBl
bmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdD
b29yZGluYXRvcjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6CisgICAgICAgIChXZWJLaXQ6OkNv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6Om5vdGlmeUZsdXNoUmVxdWlyZWQpOgorICAgICAgICAoV2Vi
S2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdl
YktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlR3JhcGhpY3NMYXllcik6CisgICAg
ICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZVRpbGUpOgorICAgICAg
ICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVUaWxlKToKKyAgICAgICAg
KFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVtb3ZlVGlsZSk6CisgICAgICAgIChX
ZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZVVwZGF0ZUF0bGFzKToKKyAgICAg
ICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVtb3ZlVXBkYXRlQXRsYXMpOgor
ICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp2aXNpYmxlQ29udGVudHNS
ZWN0KToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJB
bmltYXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0
VmlzaWJsZUNvbnRlbnRzUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OmxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCk6CisgICAgICAgIChXZWJLaXQ6
OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnB1cmdlQmFja2luZ1N0b3Jlcyk6CisgICAgICAgIChX
ZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmJlZ2luQ29udGVudFVwZGF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNjaGVkdWxlUmVsZWFzZUluYWN0
aXZlQXRsYXNlcyk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJl
bGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmg6CisgICAg
ICAgIEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAoQ29tcG9zaXRpbmdDb29yZGluYXRvcik6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OnBhdXNlUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRp
bmdDb29yZGluYXRvcjo6cmVzdW1lUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9z
aXRpbmdDb29yZGluYXRvcjo6cm9vdEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3JDbGll
bnQuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoQ29tcG9zaXRpbmdDb29y
ZGluYXRvck1lc3NhZ2VDbGllbnQpOgorICAgICAgICBUaGlzIGludGVyZmFjZSBwcm92aWRlcyBh
IHdheSB0byBzZW5kIG1lc3NhZ2VzIHRvIHJlbmRlcmVyLgorICAgICAgICAoQ29tcG9zaXRpbmdD
b29yZGluYXRvckNsaWVudCk6CisgICAgICAgIFRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIGEgd2F5
IHRvIHVzZSBMYXllclRyZWVDb29yZGluYXRvciBmcm9tCisgICAgICAgIENvbXBvc2l0aW5nIENv
b3JkaW5hdG9yLgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yQ2xpZW50
Ojp+Q29tcG9zaXRpbmdDb29yZGluYXRvckNsaWVudCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6fkxheWVyVHJlZUNvb3JkaW5hdG9y
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldExheWVy
Rmx1c2hTY2hlZHVsaW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yOjpzY2hlZHVsZUxheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVD
b29yZGluYXRvcjo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVDb29yZGluYXRvcjo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUNvb3JkaW5hdG9yOjpzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheSk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpmb3JjZVJlcGFpbnQpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6c2l6ZURpZENoYW5nZSk6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpkaWRJbnN0YWxsUGFnZU92ZXJsYXkp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6ZGlkVW5pbnN0YWxsUGFn
ZU92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6c2V0UGFn
ZU92ZXJsYXlOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGlu
YXRvcjo6c2V0UGFnZU92ZXJsYXlPcGFjaXR5KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OnBhdXNlUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OnJlc3VtZVJlbmRlcmluZyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUNvb3JkaW5hdG9yOjp2aWV3U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yOjpsYXlvdXRJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yOjppc09wYXF1ZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OmRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVDb29yZGluYXRvcjo6cGFpbnRPdmVybGF5Q29udGVudHMpOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpncmFwaGljc0xheWVyRmFjdG9y
eSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpzY2hlZHVsZUFuaW1h
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW5kZXJOZXh0
RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6cHVyZ2VCYWNr
aW5nU3RvcmVzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldEJh
Y2tncm91bmRDb2xvcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoTGF5ZXJUcmVlQ29vcmRpbmF0b3IpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xp
ZW50LmNwcDoKKyAgICAgICAgQWRkZWQuIE1hbmFnZXMgc2VuZHMgYWN0dWFsIElQQyBtZXNzYWdl
cyBhbmQgbWFuYWdlcworICAgICAgICBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtCisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2Fn
ZUNsaWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpbmdDb29yZGlu
YXRvck1lc3NhZ2VDbGllbnQ6On5XZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVu
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xp
ZW50OjpXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpzZXRSb290Q29t
cG9zaXRpbmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0
b3JNZXNzYWdlQ2xpZW50OjpzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6c2V0Q29tcG9zaXRp
bmdMYXllckNoaWxkcmVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpbmdDb29yZGlu
YXRvck1lc3NhZ2VDbGllbnQ6OnNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OmRlbGV0ZUNv
bXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yTWVzc2FnZUNsaWVudDo6Y3JlYXRlVGlsZUZvckxheWVyKToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OnVwZGF0ZVRpbGVGb3JMYXll
cik6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xp
ZW50OjpyZW1vdmVUaWxlRm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6Y3JlYXRlVXBkYXRlQXRsYXMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6cmVtb3ZlVXBk
YXRlQXRsYXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVz
c2FnZUNsaWVudDo6Y3JlYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29t
cG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OnVwZGF0ZUltYWdlQmFja2luZyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50Ojpj
bGVhckltYWdlQmFja2luZ0NvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRp
bmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OnJlbW92ZUltYWdlQmFja2luZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpkaWRSZW5k
ZXJGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNz
YWdlQ2xpZW50OjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpjcmVhdGVDYW52YXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6c3lu
Y0NhbnZhcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNz
YWdlQ2xpZW50OjpkZXN0cm95Q2FudmFzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRp
bmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OnNldExheWVyQW5pbWF0aW9ucyk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpzZXRBbmlt
YXRpb25zTG9ja2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpbmdDb29yZGluYXRv
ck1lc3NhZ2VDbGllbnQ6OnNldEJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpyZXF1ZXN0QW5pbWF0aW9uRnJh
bWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNs
aWVudDo6aW52b2tlRm9yY2VSZXBhaW50QXN5bmNDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6
OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpjaGVja0N1c3RvbUZpbHRl
clByb2dyYW1Qcm94aWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpbmdDb29yZGlu
YXRvck1lc3NhZ2VDbGllbnQ6OnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpkaXNj
b25uZWN0Q3VzdG9tRmlsdGVyUHJvZ3JhbXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xp
ZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50KToKKwogMjAxMi0xMi0wNiAgUmljayBCeWVycyAgPHJi
eWVyc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQ1NTIGN1cnNvciBwcm9wZXJ0eSBzaG91bGQg
c3VwcG9ydCB3ZWJraXQtaW1hZ2Utc2V0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DTWFr
ZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CmluZGV4IDhmM2I2Zjkz
YzBkODdkMWJkNWM0MTA0NDJkNmQzZTE2MWRjODMwZTAuLmJhZTg5YmI2OTZmOWI5ZTZiOGY4NGQ2
ZmZhZDc1NjBlMzNkZjM4NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMu
dHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC00OTUsMTEgKzQ5NSwx
MyBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVuZG9T
dGVwLmNwcAogCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJl
YUFsbG9jYXRvci5jcHAKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcAogICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5j
cHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZFRpbGUuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5
ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvVXBkYXRlQXRsYXMuY3BwCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQuY3BwCiAp
CiAKIHNldChXZWJLaXQyX01FU1NBR0VTX0lOX0ZJTEVTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCAxMjYwYjNj
MWFhNDZiYjVjYjI0NjM0YWJjYzFiMTJmNGQ5NDMxNDczLi4zZWZhYmYzNjA2ODM2MWNmZGVkYjlj
ZDZkOTU4ZGY1NGZjMGExNGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJp
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTM2OSwxMSArMzY5LDE0IEBAIEhF
QURFUlMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuaCBcCiAg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmggXAogICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxvY2F0b3IuaCBcCisgICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5o
IFwKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGlu
Z0Nvb3JkaW5hdG9yQ2xpZW50LmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIFwKICAgICBXZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5oIFwKICAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUu
aCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvVXBkYXRlQXRsYXMuaCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQuaCBcCiAgICAgV2Vi
UHJvY2Vzcy9XZWJQYWdlL1RhcEhpZ2hsaWdodENvbnRyb2xsZXIuaCBcCiAgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL1BhZ2VPdmVybGF5LmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250
ZXh0TWVudS5oIFwKQEAgLTc1MywxMSArNzU2LDEzIEBAIFNPVVJDRVMgKz0gXAogICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvRmluZENvbnRyb2xsZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9BcmVhQWxsb2NhdG9yLmNwcCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAgXAogICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwIFwKICAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5jcHAgXAorICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3JNZXNzYWdlQ2xpZW50LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RhcEhp
Z2hsaWdodENvbnRyb2xsZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVl
SG9zdC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hY2I5OTgyOGI2NzU2NDE2NWUyMTY0ZDE3ZTJjZjBiMTZhNzYwMmU3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAKQEAgLTAsMCArMSw2Nzcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpLgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yLmgiCisKKyNpbmNsdWRlICJDb29yZGluYXRlZExheWVySW5mby5oIgorI2luY2x1
ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1N1
cmZhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jl
bmRlckxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckJhY2tpbmcuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyQ29tcG9zaXRvci5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvUmVuZGVyVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmg+CisjaW5jbHVkZSA8d3RmL1Rl
bXBvcmFyeUNoYW5nZS5oPgorCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorI2luY2x1ZGUgIkN1
c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uaCIKKyNpbmNsdWRlICJWYWxpZGF0ZWRDdXN0b21G
aWx0ZXJPcGVyYXRpb24uaCIKKyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NPd25QdHI8Q29tcG9zaXRpbmdDb29yZGluYXRvcj4g
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlKFBhZ2UqIHBhZ2UsIENvbXBvc2l0aW5nQ29v
cmRpbmF0b3JDbGllbnQqIGNsaWVudCwgQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGll
bnQqIG1lc3NhZ2VDbGllbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yKHBhZ2UsIGNsaWVudCwgbWVzc2FnZUNsaWVudCkpOworfQorCitDb21wb3Np
dGluZ0Nvb3JkaW5hdG9yOjp+Q29tcG9zaXRpbmdDb29yZGluYXRvcigpCit7CisgICAgLy8gUHJl
dmVudCBzZXRDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQoMCkgLT4gZGV0YWNoTGF5ZXIo
KSBmcm9tIG1vZGlmeWluZyB0aGUgc2V0IHdoaWxlIHdlIGl0ZXJhdGUgaXQuCisgICAgSGFzaFNl
dDxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiByZWdpc3RlcmVkTGF5ZXJzOworICAgIHJlZ2lz
dGVyZWRMYXllcnMuc3dhcChtX3JlZ2lzdGVyZWRMYXllcnMpOworCisgICAgSGFzaFNldDxDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0gcmVnaXN0ZXJlZExheWVycy5l
bmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0ZXJh
dG9yIGl0ID0gcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAg
ICAgICgqaXQpLT5zZXRDb29yZGluYXRvcigwKTsKK30KKworQ29tcG9zaXRpbmdDb29yZGluYXRv
cjo6Q29tcG9zaXRpbmdDb29yZGluYXRvcihQYWdlKiBwYWdlLCBDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yQ2xpZW50KiBjbGllbnQsIENvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50KiBt
ZXNzYWdlQ2xpZW50KQorICAgIDogbV9wYWdlKHBhZ2UpCisgICAgLCBtX2NsaWVudChjbGllbnQp
CisgICAgLCBtX21lc3NhZ2VDbGllbnQobWVzc2FnZUNsaWVudCkKKyAgICAsIG1faXNWYWxpZCh0
cnVlKQorICAgICwgbV9pc1B1cmdpbmcoZmFsc2UpCisgICAgLCBtX3dhaXRpbmdGb3JSZW5kZXJl
cih0cnVlKQorICAgICwgbV9pc1N1c3BlbmRlZChmYWxzZSkKKyAgICAsIG1fY29udGVudHNTY2Fs
ZSgxKQorICAgICwgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUodHJ1ZSkKKyAgICAs
IG1fc2hvdWxkU3luY0ZyYW1lKGZhbHNlKQorICAgICwgbV9zaG91bGRTeW5jUm9vdExheWVyKHRy
dWUpCisgICAgLCBtX2xheWVyRmx1c2hUaW1lcih0aGlzLCAmQ29tcG9zaXRpbmdDb29yZGluYXRv
cjo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQpCisgICAgLCBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNU
aW1lcih0aGlzLCAmQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVsZWFzZUluYWN0aXZlQXRsYXNl
c1RpbWVyRmlyZWQpCisgICAgLCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCh0cnVlKQor
ICAgICwgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQoMCkKKyAgICAsIG1fYW5pbWF0aW9u
c0xvY2tlZChmYWxzZSkKK3sKKyAgICAvLyBDcmVhdGUgYSByb290IGxheWVyLgorICAgIG1fcm9v
dExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMsIHRoaXMpOworICAgIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllciogY29vcmRpbmF0ZWRSb290TGF5ZXIgPSB0b0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSk7CisgICAgY29vcmRpbmF0ZWRSb290TGF5ZXIt
PnNldFJvb3RMYXllcih0cnVlKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9yb290TGF5ZXItPnNl
dE5hbWUoIkNvbXBvc2l0aW5nQ29vcmRpbmF0b3Igcm9vdCBsYXllciIpOworI2VuZGlmCisgICAg
bV9yb290TGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7CisKKyAgICBJbnRTaXplIHZpZXdT
aXplKG1fY2xpZW50LT52aWV3U2l6ZSgpKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZSh2aWV3
U2l6ZSk7CisKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIgPSBHcmFwaGljc0xheWVy
OjpjcmVhdGUodGhpcywgdGhpcyk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllci0+c2V0TmFtZSgiQ29tcG9zaXRpbmdDb29yZGluYXRvciBub24tY29tcG9z
aXRlZCBjb250ZW50Iik7CisjZW5kaWYKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIt
PnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIt
PnNldFNpemUodmlld1NpemUpOworCisgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSk7CisKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsK
K30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllckZsdXNoU2NoZWR1bGlu
Z0VuYWJsZWQoYm9vbCBsYXllckZsdXNoaW5nRW5hYmxlZCkKK3sKKyAgICBpZiAobV9sYXllckZs
dXNoU2NoZWR1bGluZ0VuYWJsZWQgPT0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID0gbGF5ZXJGbHVzaGlu
Z0VuYWJsZWQ7CisKKyAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpIHsKKyAg
ICAgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OnNjaGVkdWxlTGF5ZXJGbHVzaCgpCit7CisgICAgaWYgKCFtX2xheWVyRmx1c2hTY2hl
ZHVsaW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2xheWVyRmx1c2hU
aW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2xheWVyRmx1c2hUaW1lci5zdGFydE9uZVNob3Qo
MCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y2FuY2VsUGVuZGluZ0xheWVy
Rmx1c2goKQoreworICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihHcmFwaGljc0xheWVy
KiBncmFwaGljc0xheWVyKQoreworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+cmVt
b3ZlQWxsQ2hpbGRyZW4oKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldENv
bnRlbnRzT3BhcXVlKG1fY2xpZW50LT5pc09wYXF1ZUNvbnRlbnRzKCkpOworCisgICAgLy8gQWRk
IHRoZSBhY2NlbGVyYXRlZCBsYXllciB0cmVlIGhpZXJhcmNoeS4KKyAgICBpZiAoZ3JhcGhpY3NM
YXllcikKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5hZGRDaGlsZChncmFw
aGljc0xheWVyKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjppbnZhbGlkYXRl
KCkKK3sKKyAgICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworCisgICAgQVNTRVJUKG1faXNW
YWxpZCk7CisgICAgbV9yb290TGF5ZXIgPSBudWxscHRyOworICAgIG1faXNWYWxpZCA9IGZhbHNl
OworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNldE5lZWRzRGlzcGxheUluUmVj
dChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXll
ci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworCisgICAgaWYgKG1fcGFnZU92ZXJsYXlM
YXllcikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3Qo
cmVjdCk7CisKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpmb3JjZVJlcGFpbnQoKQoreworICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5
IGZvciBydW5uaW5nIGxheW91dCB0ZXN0cy4gU2luY2UgaW4gdGhpcyBjYXNlIHdlIGFyZSBub3Qg
d2FpdGluZyBmb3IgYSByZW5kZXJlciB0byByZXBseSBuaWNlbHkuCisgICAgLy8gSW5zdGVhZCB3
ZSBhcmUganVzdCB0cmlnZ2VyaW5nIGZvcmNlUmVwYWludC4gQnV0IHdlIHN0aWxsIHdhbnQgdG8g
aGF2ZSB0aGUgc2NyaXB0ZWQgYW5pbWF0aW9uIGNhbGxiYWNrcyBiZWluZyBleGVjdXRlZC4KKyAg
ICBzeW5jRGlzcGxheVN0YXRlKCk7CisKKyAgICAvLyBXZSBuZWVkIHRvIHNjaGVkdWxlIGFub3Ro
ZXIgZmx1c2gsIG90aGVyd2lzZSB0aGUgZm9yY2VkIHBhaW50IG1pZ2h0IGNhbmNlbCBhIGxhdGVy
IGV4cGVjdGVkIGZsdXNoLgorICAgIC8vIFRoaXMgaXMgYWxpZ25lZCB3aXRoIExheWVyVHJlZUhv
c3RDQS4KKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICBmbHVzaFBlbmRpbmdMYXllckNo
YW5nZXMoKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzaXplRGlkQ2hhbmdl
KGNvbnN0IEludFNpemUmIG5ld1NpemUpCit7CisgICAgaWYgKG1fcm9vdExheWVyLT5zaXplKCkg
PT0gbmV3U2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yb290TGF5ZXItPnNldFNpemUo
bmV3U2l6ZSk7CisKKyAgICAvLyBJZiB0aGUgbmV3U2l6ZSBleHBvc2VzIG5ldyBhcmVhcyBvZiB0
aGUgbm9uLWNvbXBvc2l0ZWQgY29udGVudCBhIHNldE5lZWRzRGlzcGxheSBpcyBuZWVkZWQKKyAg
ICAvLyBmb3IgdGhvc2UgbmV3bHkgZXhwb3NlZCBhcmVhcy4KKyAgICBGbG9hdFNpemUgb2xkU2l6
ZSA9IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2l6ZSgpOworICAgIG1fbm9uQ29tcG9z
aXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKKworICAgIGlmIChuZXdTaXplLndp
ZHRoKCkgPiBvbGRTaXplLndpZHRoKCkpIHsKKyAgICAgICAgZmxvYXQgaGVpZ2h0ID0gc3RkOjpt
aW4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5ld1NpemUuaGVpZ2h0KCkpLCBvbGRTaXplLmhlaWdodCgp
KTsKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJ
blJlY3QoRmxvYXRSZWN0KG9sZFNpemUud2lkdGgoKSwgMCwgbmV3U2l6ZS53aWR0aCgpIC0gb2xk
U2l6ZS53aWR0aCgpLCBoZWlnaHQpKTsKKyAgICB9CisKKyAgICBpZiAobmV3U2l6ZS5oZWlnaHQo
KSA+IG9sZFNpemUuaGVpZ2h0KCkpCisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXll
ci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdCgwLCBvbGRTaXplLmhlaWdodCgpLCBu
ZXdTaXplLndpZHRoKCksIG5ld1NpemUuaGVpZ2h0KCkgLSBvbGRTaXplLmhlaWdodCgpKSk7CisK
KyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQorICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXIt
PnNldFNpemUobmV3U2l6ZSk7CisKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKworYm9v
bCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKQorewor
ICAgIGlmIChtX3dhaXRpbmdGb3JSZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2RldGFjaGVkTGF5ZXJzLnNpemUoKTsgKytpKQor
ICAgICAgICBtX21lc3NhZ2VDbGllbnQtPmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIobV9kZXRhY2hl
ZExheWVyc1tpXSk7CisgICAgbV9kZXRhY2hlZExheWVycy5jbGVhcigpOworCisgICAgbV9yb290
TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXll
ck9ubHkoKTsKKworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCisgICAgICAgIG1fcGFnZU92
ZXJsYXlMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworCisg
ICAgYm9vbCBkaWRTeW5jID0gbV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT5mbHVzaENvbXBv
c2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsKKworICAgIGZsdXNoUGVuZGluZ0ltYWdl
QmFja2luZ0NoYW5nZXMoKTsKKworICAgIGlmIChtX3Nob3VsZFN5bmNSb290TGF5ZXIpIHsKKyAg
ICAgICAgbV9tZXNzYWdlQ2xpZW50LT5zZXRSb290Q29tcG9zaXRpbmdMYXllcih0b0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmlkKCkpOworICAgICAgICBtX3No
b3VsZFN5bmNSb290TGF5ZXIgPSBmYWxzZTsKKyAgICAgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0
cnVlOworICAgIH0KKworICAgIGlmIChtX3Nob3VsZFN5bmNGcmFtZSkgeworICAgICAgICBkaWRT
eW5jID0gdHJ1ZTsKKworICAgICAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IHJvdW5kZWRJbnRT
aXplKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2l6ZSgpKTsKKyAgICAgICAgSW50UmVj
dCBjb3ZlcmVkUmVjdCA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllci5nZXQoKSktPmNvdmVyUmVjdCgpOworICAgICAgICBtX21lc3NhZ2VDbGll
bnQtPmRpZFJlbmRlckZyYW1lKGNvbnRlbnRzU2l6ZSwgY292ZXJlZFJlY3QpOworICAgICAgICBt
X3dhaXRpbmdGb3JSZW5kZXJlciA9IHRydWU7CisgICAgICAgIG1fc2hvdWxkU3luY0ZyYW1lID0g
ZmFsc2U7CisgICAgfSBlbHNlCisgICAgICAgIHVubG9ja0FuaW1hdGlvbnMoKTsKKworICAgIHJl
dHVybiBkaWRTeW5jOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnN5bmNMYXll
clN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8m
IGluZm8pCit7CisgICAgaWYgKG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlKSB7Cisg
ICAgICAgIG1fbWVzc2FnZUNsaWVudC0+ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24obV92aXNpYmxl
Q29udGVudHNSZWN0LmxvY2F0aW9uKCkpOworICAgICAgICBtX3Nob3VsZFNlbmRTY3JvbGxQb3Np
dGlvblVwZGF0ZSA9IGZhbHNlOworICAgIH0KKworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1
ZTsKKyAgICBtX21lc3NhZ2VDbGllbnQtPnNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShpZCwgaW5m
byk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c3luY0xheWVyQ2hpbGRyZW4o
Q29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYg
Y2hpbGRyZW4pCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fbWVzc2Fn
ZUNsaWVudC0+c2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKGlkLCBjaGlsZHJlbik7Cit9CisK
KyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6
Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgUGxhdGZvcm1MYXllciogY2FudmFz
UGxhdGZvcm1MYXllcikKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgR3Jh
cGhpY3NTdXJmYWNlVG9rZW4gdG9rZW4gPSBjYW52YXNQbGF0Zm9ybUxheWVyLT5ncmFwaGljc1N1
cmZhY2VUb2tlbigpOworICAgIEludFNpemUgY2FudmFzU2l6ZSA9IGNhbnZhc1BsYXRmb3JtTGF5
ZXItPnBsYXRmb3JtTGF5ZXJTaXplKCk7CisgICAgbV9tZXNzYWdlQ2xpZW50LT5jcmVhdGVDYW52
YXMoaWQsIGNhbnZhc1NpemUsIHRva2VuKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgUGxhdGZvcm1MYXllciogY2Fu
dmFzUGxhdGZvcm1MYXllcikKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAg
dWludDMyX3QgZnJvbnRCdWZmZXIgPSBjYW52YXNQbGF0Zm9ybUxheWVyLT5jb3B5VG9HcmFwaGlj
c1N1cmZhY2UoKTsKKyAgICBtX21lc3NhZ2VDbGllbnQtPnN5bmNDYW52YXMoaWQsIGZyb250QnVm
ZmVyKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXN0cm95Q2FudmFzKENv
b3JkaW5hdGVkTGF5ZXJJRCBpZCkKK3sKKyAgICBpZiAobV9pc1B1cmdpbmcpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX21lc3NhZ2VDbGll
bnQtPmRlc3Ryb3lDYW52YXMoaWQpOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnN5bmNMYXllckZpbHRlcnMoQ29vcmRp
bmF0ZWRMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQoreworICAg
IG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX21lc3NhZ2VDbGllbnQtPnNldENvbXBv
c2l0aW5nTGF5ZXJGaWx0ZXJzKGlkLCBmaWx0ZXJzKTsKK30KKyNlbmRpZgorCit2b2lkIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OmRldGFjaExheWVyKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciog
bGF5ZXIpCit7CisgICAgbV9yZWdpc3RlcmVkTGF5ZXJzLnJlbW92ZShsYXllcik7CisgICAgbV9z
aG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fZGV0YWNoZWRMYXllcnMuYXBwZW5kKGxheWVy
LT5pZCgpKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKworc3RhdGljIHZvaWQgdXBk
YXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yU2VsZihSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIpCit7
CisgICAgLy8gVGhlc2UgY29uZGl0aW9ucyBtdXN0IG1hdGNoIHRoZSBjb25kaXRpb25zIGluIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uLgorICAg
IFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IHJlbmRlckxheWVyLT5iYWNraW5nKCk7Cisg
ICAgaWYgKCFiYWNraW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKKyAgICBpZiAoIXN0eWxlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5pc091
dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+
cG9zaXRpb24oKSAhPSBGaXhlZFBvc2l0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IXJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5jb250YWluZXIoKS0+aXNSZW5kZXJWaWV3KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghcmVuZGVyTGF5ZXItPmlzU3RhY2tpbmdDb250ZXh0
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogZ3Jh
cGhpY3NMYXllciA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGJhY2tpbmctPmdyYXBoaWNz
TGF5ZXIoKSk7CisgICAgZ3JhcGhpY3NMYXllci0+c2V0Rml4ZWRUb1ZpZXdwb3J0KHRydWUpOwor
fQorCitzdGF0aWMgdm9pZCB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihSZW5kZXJM
YXllciogcmVuZGVyTGF5ZXIpCit7CisgICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yU2Vs
ZihyZW5kZXJMYXllcik7CisKKyAgICBpZiAocmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSkKKyAg
ICAgICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIocmVuZGVyTGF5ZXItPmZpcnN0
Q2hpbGQoKSk7CisgICAgaWYgKHJlbmRlckxheWVyLT5uZXh0U2libGluZygpKQorICAgICAgICB1
cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyZW5kZXJMYXllci0+bmV4dFNpYmxpbmco
KSk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c3luY0ZpeGVkTGF5ZXJzKCkK
K3sKKyAgICBpZiAoIW1fcGFnZS0+c2V0dGluZ3MoKSB8fCAhbV9wYWdlLT5zZXR0aW5ncygpLT5h
Y2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPmhhc1ZpZXdw
b3J0Q29uc3RyYWluZWRPYmplY3RzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlckxh
eWVyKiByb290UmVuZGVyTGF5ZXIgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT5jb250ZW50UmVuZGVy
ZXIoKS0+Y29tcG9zaXRvcigpLT5yb290UmVuZGVyTGF5ZXIoKTsKKyAgICBBU1NFUlQocm9vdFJl
bmRlckxheWVyKTsKKyAgICBpZiAocm9vdFJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpCisgICAg
ICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJvb3RSZW5kZXJMYXllci0+Zmly
c3RDaGlsZCgpKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpsb2NrQW5pbWF0
aW9ucygpCit7CisgICAgbV9hbmltYXRpb25zTG9ja2VkID0gdHJ1ZTsKKyAgICBtX21lc3NhZ2VD
bGllbnQtPnNldEFuaW1hdGlvbnNMb2NrZWQodHJ1ZSk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdD
b29yZGluYXRvcjo6dW5sb2NrQW5pbWF0aW9ucygpCit7CisgICAgaWYgKCFtX2FuaW1hdGlvbnNM
b2NrZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fYW5pbWF0aW9uc0xvY2tlZCA9IGZhbHNl
OworICAgIG1fbWVzc2FnZUNsaWVudC0+c2V0QW5pbWF0aW9uc0xvY2tlZChmYWxzZSk7Cit9CisK
K3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2go
KQoreworICAgIGlmIChtX2lzU3VzcGVuZGVkIHx8IG1fd2FpdGluZ0ZvclJlbmRlcmVyKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBXZSBsb2NrIHRoZSBhbmltYXRpb25zIHdoaWxlIHBlcmZv
cm1pbmcgbGF5b3V0LCB0byBhdm9pZCBmbGlja2VycyBjYXVzZWQgYnkgYW5pbWF0aW9ucyBjb250
aW51aW5nIGluIHRoZSByZW5kZXJlciB3aGlsZQorICAgIC8vIHRoZSB3ZWIgcHJvY2VzcyBsYXlv
dXQgd2FudHMgdG8gY2FuY2VsIHRoZW0uCisgICAgbG9ja0FuaW1hdGlvbnMoKTsKKyAgICBzeW5j
RGlzcGxheVN0YXRlKCk7CisKKyAgICAvLyBXZSBjYW4gdW5sb2NrIHRoZSBhbmltYXRpb25zIGJl
Zm9yZSBmbHVzaGluZyBpZiB0aGVyZSBhcmUgbm8gdmlzaWJsZSBjaGFuZ2VzLCBmb3IgZXhhbXBs
ZSBpZiB0aGVyZSBhcmUgY29udGVudCB1cGRhdGVzCisgICAgLy8gaW4gYSBsYXllciB3aXRoIG9w
YWNpdHkgMC4KKyAgICBib29sIGNhblVubG9ja0JlZm9yZUZsdXNoID0gIW1faXNWYWxpZCB8fCAh
dG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5oYXNQZW5kaW5n
VmlzaWJsZUNoYW5nZXMoKTsKKyAgICBpZiAoY2FuVW5sb2NrQmVmb3JlRmx1c2gpCisgICAgICAg
IHVubG9ja0FuaW1hdGlvbnMoKTsKKworICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1
cm47CisKKyAgICBib29sIGRpZFN5bmMgPSBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKKyAg
ICBtX2NsaWVudC0+ZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goZGlkU3luYyk7Cit9CisK
K3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c3luY0Rpc3BsYXlTdGF0ZSgpCit7CisjaWYg
RU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAmJiAhVVNFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FX1RJTUVSKSAmJiAhVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9O
SVRPUikKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbnkgcHJldmlvdXNseSByZWdpc3RlcmVkIGFu
aW1hdGlvbiBjYWxsYmFja3MgYXJlIGJlaW5nIGV4ZWN1dGVkIGJlZm9yZSB3ZSBmbHVzaCB0aGUg
bGF5ZXJzLgorICAgIG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c2VydmljZVNjcmlwdGVk
QW5pbWF0aW9ucyhjb252ZXJ0U2Vjb25kc1RvRE9NVGltZVN0YW1wKGN1cnJlbnRUaW1lKCkpKTsK
KyNlbmRpZgorCisgICAgbV9jbGllbnQtPmxheW91dElmTmVlZGVkKCk7Cit9CisKK3ZvaWQgQ29t
cG9zaXRpbmdDb29yZGluYXRvcjo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoVGltZXI8Q29tcG9zaXRp
bmdDb29yZGluYXRvcj4qKQoreworICAgIHBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7Cit9
CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlUGFnZU92ZXJsYXlMYXllcigp
Cit7CisgICAgQVNTRVJUKCFtX3BhZ2VPdmVybGF5TGF5ZXIpOworCisgICAgbV9wYWdlT3Zlcmxh
eUxheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMsIHRoaXMpOworI2lmbmRlZiBOREVC
VUcKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5hbWUoIkNvbXBvc2l0aW5nQ29vcmRpbmF0
b3IgcGFnZSBvdmVybGF5IGNvbnRlbnQiKTsKKyNlbmRpZgorCisgICAgbV9wYWdlT3ZlcmxheUxh
eWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRT
aXplKG1fY2xpZW50LT52aWV3U2l6ZSgpKTsKKworICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZCht
X3BhZ2VPdmVybGF5TGF5ZXIuZ2V0KCkpOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9
CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIo
KQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOworICAgIG1fcGFnZU92ZXJsYXlM
YXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IG51bGxw
dHI7CisKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiByZWN0KQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOworICAgIG1fcGFn
ZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgIHNjaGVkdWxl
TGF5ZXJGbHVzaCgpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNldFBhZ2VP
dmVybGF5T3BhY2l0eShmbG9hdCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxh
eWVyKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE9wYWNpdHkodmFsdWUpOworICAgIHNj
aGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCitQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nPiBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChJ
bWFnZSogaW1hZ2UpCit7CisgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEID0g
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmdldENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQoaW1h
Z2UpOworICAgIEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlQmFja2luZ3Mu
ZmluZChpbWFnZUlEKTsKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGltYWdl
QmFja2luZzsKKyAgICBpZiAoaXQgPT0gbV9pbWFnZUJhY2tpbmdzLmVuZCgpKSB7CisgICAgICAg
IGltYWdlQmFja2luZyA9IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjcmVhdGUodGhpcywgaW1h
Z2UpOworICAgICAgICBtX2ltYWdlQmFja2luZ3MuYWRkKGltYWdlSUQsIGltYWdlQmFja2luZyk7
CisgICAgfSBlbHNlCisgICAgICAgIGltYWdlQmFja2luZyA9IGl0LT52YWx1ZTsKKworICAgIHJl
dHVybiBpbWFnZUJhY2tpbmc7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3Jl
YXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAg
ICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV9tZXNzYWdlQ2xpZW50LT5jcmVhdGVJ
bWFnZUJhY2tpbmcoaW1hZ2VJRCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6
dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwgY29u
c3QgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCit7CisgICAgbV9zaG91bGRTeW5j
RnJhbWUgPSB0cnVlOworICAgIG1fbWVzc2FnZUNsaWVudC0+dXBkYXRlSW1hZ2VCYWNraW5nKGlt
YWdlSUQsIGhhbmRsZSk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y2xlYXJJ
bWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7
CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fbWVzc2FnZUNsaWVudC0+Y2xl
YXJJbWFnZUJhY2tpbmdDb250ZW50cyhpbWFnZUlEKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBp
bWFnZUlEKQoreworICAgIGlmIChtX2lzUHVyZ2luZykKKyAgICAgICAgcmV0dXJuOworCisgICAg
QVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFnZUlEKSk7CisgICAgbV9zaG91bGRT
eW5jRnJhbWUgPSB0cnVlOworICAgIG1faW1hZ2VCYWNraW5ncy5yZW1vdmUoaW1hZ2VJRCk7Cisg
ICAgbV9tZXNzYWdlQ2xpZW50LT5yZW1vdmVJbWFnZUJhY2tpbmcoaW1hZ2VJRCk7Cit9CisKK3Zv
aWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdl
cygpCit7CisgICAgSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBlbmQgPSBtX2ltYWdlQmFja2lu
Z3MuZW5kKCk7CisgICAgZm9yIChJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lt
YWdlQmFja2luZ3MuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgaXRlci0+
dmFsdWUtPnVwZGF0ZSgpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6Om5vdGlm
eUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRvdWJsZSAvKiB0aW1lICov
KQoreworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6Om5vdGlmeUZsdXNoUmVxdWly
ZWQoY29uc3QgR3JhcGhpY3NMYXllciopCit7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGlu
YXRvcjo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBH
cmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhh
c2UgcGhhc2UsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQoreworICAgIGJvb2wgaXNOb25Db21w
b3NpdGluZ0NvbnRlbnQgPSAoZ3JhcGhpY3NMYXllciA9PSBtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXIpOworICAgIGJvb2wgaXNQYWdlT3ZlcmxheSA9IChncmFwaGljc0xheWVyID09IG1fcGFn
ZU92ZXJsYXlMYXllcik7CisKKyAgICBpZiAoaXNOb25Db21wb3NpdGluZ0NvbnRlbnQpCisgICAg
ICAgIG1fY2xpZW50LT5wYWludENvbnRlbnRzKGdyYXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOwor
ICAgIGVsc2UgaWYgKGlzUGFnZU92ZXJsYXkpCisgICAgICAgIG1fY2xpZW50LT5wYWludE92ZXJs
YXlDb250ZW50cyhncmFwaGljc0NvbnRleHQsIGNsaXBSZWN0KTsKK30KKworUGFzc093blB0cjxH
cmFwaGljc0xheWVyPiBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVHcmFwaGljc0xheWVy
KEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIqIGxheWVyID0gbmV3IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihjbGllbnQpOworICAg
IGxheWVyLT5zZXRDb29yZGluYXRvcih0aGlzKTsKKyAgICBtX3JlZ2lzdGVyZWRMYXllcnMuYWRk
KGxheWVyKTsKKyAgICBsYXllci0+c2V0Q29udGVudHNTY2FsZShtX2NvbnRlbnRzU2NhbGUpOwor
ICAgIGxheWVyLT5hZGp1c3RWaXNpYmxlUmVjdCgpOworICAgIHJldHVybiBhZG9wdFB0cihsYXll
cik7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlVGlsZShDb29yZGlu
YXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRl
SW5mbyYgdXBkYXRlSW5mbywgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QpCit7CisgICAgbV9zaG91
bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fbWVzc2FnZUNsaWVudC0+Y3JlYXRlVGlsZUZvckxh
eWVyKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pOworfQorCit2b2lkIENv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OnVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVy
SUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8s
IGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1
ZTsKKyAgICBtX21lc3NhZ2VDbGllbnQtPnVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxl
SUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpyZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxl
SUQpCit7CisgICAgaWYgKG1faXNQdXJnaW5nKQorICAgICAgICByZXR1cm47CisgICAgbV9zaG91
bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fbWVzc2FnZUNsaWVudC0+cmVtb3ZlVGlsZUZvckxh
eWVyKGxheWVySUQsIHRpbGVJRCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6
Y3JlYXRlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQsIGNvbnN0IFNoYXJlYWJsZVN1cmZhY2U6Okhh
bmRsZSYgaGFuZGxlKQoreworICAgIG1fbWVzc2FnZUNsaWVudC0+Y3JlYXRlVXBkYXRlQXRsYXMo
YXRsYXNJRCwgaGFuZGxlKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZW1v
dmVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCkKK3sKKyAgICBpZiAobV9pc1B1cmdpbmcpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX21lc3NhZ2VDbGllbnQtPnJlbW92ZVVwZGF0ZUF0bGFzKGF0bGFz
SUQpOworfQorCitJbnRSZWN0IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnZpc2libGVDb250ZW50
c1JlY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX3Zpc2libGVDb250ZW50c1JlY3Q7Cit9CisK
K3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5h
dGVkTGF5ZXJJRCBsYXllcklELCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0
aW9ucykKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgR3JhcGhpY3NMYXll
ckFuaW1hdGlvbnMgYWN0aXZlQW5pbWF0aW9ucyA9IGFuaW1hdGlvbnMuZ2V0QWN0aXZlQW5pbWF0
aW9ucygpOworICAgIG1fbWVzc2FnZUNsaWVudC0+c2V0TGF5ZXJBbmltYXRpb25zKGxheWVySUQs
IGFjdGl2ZUFuaW1hdGlvbnMpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNl
dFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNv
bnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAgYm9vbCBjb250ZW50c1Jl
Y3REaWRDaGFuZ2UgPSByZWN0ICE9IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICBib29sIGNv
bnRlbnRzU2NhbGVEaWRDaGFuZ2UgPSBzY2FsZSAhPSBtX2NvbnRlbnRzU2NhbGU7CisKKyAgICAv
LyBBIHplcm8gdHJhamVjdG9yeVZlY3RvciBpbmRpY2F0ZXMgdGhhdCB0aWxlcyBhbGwgYXJvdW5k
IHRoZSB2aWV3cG9ydCBhcmUgcmVxdWVzdGVkLgorICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSktPnNldFZpc2libGVDb250ZW50
UmVjdFRyYWplY3RvcnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7CisKKyAgICBpZiAoY29udGVu
dHNSZWN0RGlkQ2hhbmdlIHx8IGNvbnRlbnRzU2NhbGVEaWRDaGFuZ2UpIHsKKyAgICAgICAgbV92
aXNpYmxlQ29udGVudHNSZWN0ID0gcmVjdDsKKyAgICAgICAgbV9jb250ZW50c1NjYWxlID0gc2Nh
bGU7CisKKyAgICAgICAgSGFzaFNldDxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0
b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOworICAgICAgICBmb3IgKEhhc2hTZXQ8
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5
ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgaWYgKGNvbnRlbnRz
U2NhbGVEaWRDaGFuZ2UpCisgICAgICAgICAgICAgICAgKCppdCktPnNldENvbnRlbnRzU2NhbGUo
c2NhbGUpOworICAgICAgICAgICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSkKKyAgICAgICAg
ICAgICAgICAoKml0KS0+YWRqdXN0VmlzaWJsZVJlY3QoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFuZ2UpCisgICAgICAgIG1fc2hvdWxkU2VuZFNjcm9s
bFBvc2l0aW9uVXBkYXRlID0gdHJ1ZTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQor
Cit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJlbmRlck5leHRGcmFtZSgpCit7CisgICAg
bV93YWl0aW5nRm9yUmVuZGVyZXIgPSBmYWxzZTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV91cGRhdGVBdGxhc2VzLnNpemUoKTsgKytp
KQorICAgICAgICBtX3VwZGF0ZUF0bGFzZXNbaV0tPmRpZFN3YXBCdWZmZXJzKCk7Cit9CisKK2Jv
b2wgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gIW1faXNTdXNwZW5kZWQgJiYgIW1fd2FpdGluZ0ZvclJlbmRl
cmVyOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnB1cmdlQmFja2luZ1N0b3Jl
cygpCit7CisgICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IHB1cmdpbmdUb2dnbGUobV9pc1B1cmdp
bmcsIHRydWUpOworCisgICAgSGFzaFNldDxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRl
cmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXll
cnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAoKml0KS0+cHVyZ2VCYWNraW5n
U3RvcmVzKCk7CisKKyAgICBtX2ltYWdlQmFja2luZ3MuY2xlYXIoKTsKKyAgICBtX3VwZGF0ZUF0
bGFzZXMuY2xlYXIoKTsKK30KKworUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IENvbXBvc2l0
aW5nQ29vcmRpbmF0b3I6OmJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBzaXplLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzLCBpbnQmIGF0bGFzSUQsIFdlYkNv
cmU6OkludFBvaW50JiBvZmZzZXQpCit7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3Jh
cGhpY3NDb250ZXh0OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFz
ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVXBkYXRlQXRsYXMqIGF0bGFzID0gbV91cGRhdGVB
dGxhc2VzW2ldLmdldCgpOworICAgICAgICBpZiAoYXRsYXMtPmZsYWdzKCkgPT0gZmxhZ3MpIHsK
KyAgICAgICAgICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGVyZSBpcyBubyBhdmFp
bGFibGUgYnVmZmVyIHNwYWNlLgorICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0ID0gYXRsYXMt
PmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihhdGxhc0lELCBzaXplLCBvZmZzZXQpOwor
ICAgICAgICAgICAgaWYgKGdyYXBoaWNzQ29udGV4dCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z3JhcGhpY3NDb250ZXh0LnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRp
YyBjb25zdCBpbnQgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiA9IDEwMjQ7IC8vIFNob3VsZCBiZSBh
IHBvd2VyIG9mIHR3by4KKyAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKGFkb3B0UHRyKG5ldyBV
cGRhdGVBdGxhcyh0aGlzLCBTY3JhdGNoQnVmZmVyRGltZW5zaW9uLCBmbGFncykpKTsKKyAgICBz
Y2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMoKTsKKyAgICByZXR1cm4gbV91cGRhdGVBdGxh
c2VzLmxhc3QoKS0+YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGF0bGFzSUQsIHNpemUs
IG9mZnNldCk7Cit9CisKK2NvbnN0IGRvdWJsZSBSZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJJ
bnRlcnZhbCA9IDAuNTsKKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzY2hlZHVsZVJl
bGVhc2VJbmFjdGl2ZUF0bGFzZXMoKQoreworICAgIGlmICghbV9yZWxlYXNlSW5hY3RpdmVBdGxh
c2VzVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGlt
ZXIuc3RhcnRSZXBlYXRpbmcoUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2YWwpOwor
fQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNU
aW1lckZpcmVkKFRpbWVyPENvbXBvc2l0aW5nQ29vcmRpbmF0b3I+KikKK3sKKyAgICAvLyBXZSBh
bHdheXMgd2FudCB0byBrZWVwIG9uZSBhdGxhcyBmb3Igbm9uLWNvbXBvc2l0ZWQgY29udGVudC4K
KyAgICBPd25QdHI8VXBkYXRlQXRsYXM+IGF0bGFzVG9LZWVwQW55d2F5OworICAgIGJvb2wgZm91
bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ID0gZmFsc2U7CisgICAgZm9yIChp
bnQgaSA9IG1fdXBkYXRlQXRsYXNlcy5zaXplKCkgLSAxOyAgaSA+PSAwOyAtLWkpIHsKKyAgICAg
ICAgVXBkYXRlQXRsYXMqIGF0bGFzID0gbV91cGRhdGVBdGxhc2VzW2ldLmdldCgpOworICAgICAg
ICBpZiAoIWF0bGFzLT5pc0luVXNlKCkpCisgICAgICAgICAgICBhdGxhcy0+YWRkVGltZUluYWN0
aXZlKFJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckludGVydmFsKTsKKyAgICAgICAgYm9vbCB1
c2FibGVGb3JOb25Db21wb3NpdGVkQ29udGVudCA9IGF0bGFzLT5mbGFncygpID09IFNoYXJlYWJs
ZUJpdG1hcDo6Tm9GbGFnczsKKyAgICAgICAgaWYgKGF0bGFzLT5pc0luYWN0aXZlKCkpIHsKKyAg
ICAgICAgICAgIGlmICghZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ICYm
ICFhdGxhc1RvS2VlcEFueXdheSAmJiB1c2FibGVGb3JOb25Db21wb3NpdGVkQ29udGVudCkKKyAg
ICAgICAgICAgICAgICBhdGxhc1RvS2VlcEFueXdheSA9IG1fdXBkYXRlQXRsYXNlc1tpXS5yZWxl
YXNlKCk7CisgICAgICAgICAgICBtX3VwZGF0ZUF0bGFzZXMucmVtb3ZlKGkpOworICAgICAgICB9
IGVsc2UgaWYgKHVzYWJsZUZvck5vbkNvbXBvc2l0ZWRDb250ZW50KQorICAgICAgICAgICAgZm91
bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ID0gdHJ1ZTsKKyAgICB9CisKKyAg
ICBpZiAoIWZvdW5kQWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVudCAmJiBhdGxhc1Rv
S2VlcEFueXdheSkKKyAgICAgICAgbV91cGRhdGVBdGxhc2VzLmFwcGVuZChhdGxhc1RvS2VlcEFu
eXdheS5yZWxlYXNlKCkpOworCisgICAgaWYgKG1fdXBkYXRlQXRsYXNlcy5zaXplKCkgPD0gMSkK
KyAgICAgICAgbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIuc3RvcCgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3Iu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jNDcwOWE1MWM1MjIwYWEwMWY0MGY1MjMwZmIzYTIzM2U4ZmZmYzAxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oCkBAIC0wLDAgKzEsMTkyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29tcG9zaXRpbmdDb29y
ZGluYXRvcl9oCisjZGVmaW5lIENvbXBvc2l0aW5nQ29vcmRpbmF0b3JfaAorCisjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAiQ29tcG9zaXRpbmdDb29yZGluYXRvckNs
aWVudC5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUg
IkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgiCisjaW5jbHVkZSAiVXBkYXRlQXRsYXMuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNz
TGF5ZXJDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJGYWN0b3J5Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5o
PgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyNp
bmNsdWRlIDxXZWJDb3JlL0ZpbHRlck9wZXJhdGlvbnMuaD4KKyNlbmRpZgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CitjbGFzcyBQYWdlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
Q29tcG9zaXRpbmdDb29yZGluYXRvciA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xp
ZW50CisgICAgLCBwdWJsaWMgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50CisgICAgLCBw
dWJsaWMgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5hdG9yCisgICAgLCBwdWJsaWMg
VXBkYXRlQXRsYXNDbGllbnQKKyAgICAsIHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFj
dG9yeSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tcG9zaXRpbmdDb29yZGluYXRvcik7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRy
PENvbXBvc2l0aW5nQ29vcmRpbmF0b3I+IGNyZWF0ZShXZWJDb3JlOjpQYWdlKiwgQ29tcG9zaXRp
bmdDb29yZGluYXRvckNsaWVudCosIENvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50
Kik7CisgICAgdmlydHVhbCB+Q29tcG9zaXRpbmdDb29yZGluYXRvcigpOworCisgICAgdmlydHVh
bCB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckZs
dXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldFJvb3RDb21w
b3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
aW52YWxpZGF0ZSgpOworCisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChj
b25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENoYW5n
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKTsKKworICAgIHZvaWQgY3JlYXRlUGFn
ZU92ZXJsYXlMYXllcigpOworICAgIHZvaWQgZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAg
ICB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KTsKKyAgICB2b2lkIHNldFBhZ2VPdmVybGF5T3BhY2l0eShmbG9hdCk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgcGF1c2VSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSB0cnVlOyB9CisgICAgdmly
dHVhbCB2b2lkIHJlc3VtZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOyBzY2hl
ZHVsZUxheWVyRmx1c2goKTsgfQorCisgICAgdmlydHVhbCB2b2lkIGZvcmNlUmVwYWludCgpOwor
CisgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYsIGZsb2F0IHNjYWxlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CisKKyAg
ICAvLyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQgOjogQ29vcmRpbmF0ZWRUaWxlQ2xp
ZW50CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50
MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwg
dWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShDb29yZGluYXRlZExheWVy
SUQsIHVpbnQzMl90IHRpbGVJRCk7CisKKyAgICAvLyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJD
bGllbnQKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNy
ZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKFdlYkNvcmU6OkltYWdlKikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgQ29v
cmRpbmF0ZWRMYXllckluZm8mKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyQ2hpbGRyZW4o
Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOwor
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmlsdGVy
cyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsK
KyNlbmRpZgorI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIHZpcnR1YWwgdm9pZCBjcmVh
dGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBX
ZWJDb3JlOjpQbGF0Zm9ybUxheWVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRlc3Ry
b3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEKSBPVkVSUklERTsKKyNlbmRpZgorICAgIHZpcnR1
YWwgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOworCisgICAgdmlydHVhbCB2b2lkIGRldGFj
aExheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopOworICAgIHZpcnR1YWwg
dm9pZCBzeW5jRml4ZWRMYXllcnMoKTsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MsIGludCYgYXRsYXNJRCwgV2ViQ29yZTo6SW50UG9p
bnQmKTsKKworICAgIC8vIFVwZGF0ZUF0bGFzQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIGNyZWF0
ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lELCBjb25zdCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQpOworCisg
ICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKKyAgICB2b2lkIHB1cmdlQmFja2luZ1N0b3Jlcygp
OworCisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogcm9vdEdyYXBoaWNzTGF5ZXIoKSBjb25z
dCB7IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIENvbXBvc2l0
aW5nQ29vcmRpbmF0b3IoV2ViQ29yZTo6UGFnZSosIENvbXBvc2l0aW5nQ29vcmRpbmF0b3JDbGll
bnQqLCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudCopOworCisgICAgLy8gR3Jh
cGhpY3NMYXllckNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVk
KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSk7CisgICAgdmlydHVh
bCB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciop
OworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
UGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOworCisgICAg
Ly8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5hdG9yCisgICAgdmlydHVhbCB2b2lk
IGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQsIGNvbnN0IFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7CisKKyAgICB2b2lkIGZsdXNoUGVuZGlu
Z0ltYWdlQmFja2luZ0NoYW5nZXMoKTsKKworICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5Cisg
ICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdyYXBo
aWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCopIE9WRVJSSURFOworCisgICAg
Ly8gQ29tcG9zaXRpbmdDb29yZGluYXRvcgorICAgIGJvb2wgZmx1c2hQZW5kaW5nTGF5ZXJDaGFu
Z2VzKCk7CisgICAgdm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworICAgIHZvaWQgcGVy
Zm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKKyAgICB2b2lkIHN5bmNEaXNwbGF5U3RhdGUoKTsK
KyAgICB2b2lkIGxvY2tBbmltYXRpb25zKCk7CisgICAgdm9pZCB1bmxvY2tBbmltYXRpb25zKCk7
CisKKyAgICB2b2lkIGxheWVyRmx1c2hUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPENvbXBvc2l0
aW5nQ29vcmRpbmF0b3I+Kik7CisKKyAgICB2b2lkIHNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRs
YXNlcygpOworCisgICAgdm9pZCByZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJGaXJlZChXZWJD
b3JlOjpUaW1lcjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiopOworCisgICAgV2ViQ29yZTo6UGFn
ZSogbV9wYWdlOworICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3JDbGllbnQqIG1fY2xpZW50Owor
ICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50KiBtX21lc3NhZ2VDbGllbnQ7
CisKKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CisKKyAg
ICAvLyBUaGUgbGF5ZXIgd2hpY2ggY29udGFpbnMgYWxsIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQu
CisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllcjsKKworICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUgbnVsbCBp
ZiB0aGVyZSdzIG5vIHBhZ2Ugb3ZlcmxheS4KKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NM
YXllcj4gbV9wYWdlT3ZlcmxheUxheWVyOworCisgICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIqPiBtX3JlZ2lzdGVyZWRMYXllcnM7CisgICAgVmVjdG9yPENvb3Jk
aW5hdGVkTGF5ZXJJRD4gbV9kZXRhY2hlZExheWVyczsKKyAgICB0eXBlZGVmIEhhc2hNYXA8Q29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiA+
IEltYWdlQmFja2luZ01hcDsKKyAgICBJbWFnZUJhY2tpbmdNYXAgbV9pbWFnZUJhY2tpbmdzOwor
ICAgIFZlY3RvcjxPd25QdHI8VXBkYXRlQXRsYXM+ID4gbV91cGRhdGVBdGxhc2VzOworCisgICAg
Ym9vbCBtX2lzVmFsaWQ7CisgICAgLy8gV2UgZG9uJ3Qgc2VuZCB0aGUgbWVzc2FnZXMgcmVsYXRl
ZCB0byByZWxlYXNpbmcgcmVzb3VyY2VzIHRvIHJlbmRlcmVyIGR1cmluZyBwdXJnaW5nLCBiZWNh
dXNlIHJlbmRlcmVyIGFscmVhZHkgaGFkIHJlbW92ZWQgYWxsIHJlc291cmNlcy4KKyAgICBib29s
IG1faXNQdXJnaW5nOworCisgICAgYm9vbCBtX3dhaXRpbmdGb3JSZW5kZXJlcjsKKyAgICBib29s
IG1faXNTdXNwZW5kZWQ7CisgICAgV2ViQ29yZTo6SW50UmVjdCBtX3Zpc2libGVDb250ZW50c1Jl
Y3Q7CisgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOworICAgIGJvb2wgbV9zaG91bGRTZW5kU2Ny
b2xsUG9zaXRpb25VcGRhdGU7CisKKyAgICBib29sIG1fc2hvdWxkU3luY0ZyYW1lOworICAgIGJv
b2wgbV9zaG91bGRTeW5jUm9vdExheWVyOworICAgIFdlYkNvcmU6OlRpbWVyPENvbXBvc2l0aW5n
Q29vcmRpbmF0b3I+IG1fbGF5ZXJGbHVzaFRpbWVyOworICAgIFdlYkNvcmU6OlRpbWVyPENvbXBv
c2l0aW5nQ29vcmRpbmF0b3I+IG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyOworICAgIGJv
b2wgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQ7CisgICAgdWludDY0X3QgbV9mb3JjZVJl
cGFpbnRBc3luY0NhbGxiYWNrSUQ7CisgICAgYm9vbCBtX2FuaW1hdGlvbnNMb2NrZWQ7Cit9Owor
Cit9CisKKyNlbmRpZgorCisjZW5kaWYgLy8gQ29tcG9zaXRpbmdDb29yZGluYXRvcl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9y
Q2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTUwYjAyZGFiY2JkMDIxYmI0ZWE4OGVkOWQ2MDIyMjdkZmVj
NTEyYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3JDbGllbnQuaApAQCAt
MCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvbXBvc2l0aW5nQ29v
cmRpbmF0b3JDbGllbnRfaAorI2RlZmluZSBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yQ2xpZW50X2gK
KworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIkNvb3JkaW5hdGVk
TGF5ZXJJbmZvLmgiCisjaW5jbHVkZSAiU2hhcmVhYmxlU3VyZmFjZS5oIgorI2luY2x1ZGUgIlN1
cmZhY2VVcGRhdGVJbmZvLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQW5pbWF0
aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9J
bnRTaXplLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworI2lmIFVTRShHUkFQSElD
U19TVVJGQUNFKQorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlVG9rZW4uaD4KKyNl
bmRpZgorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorI2luY2x1ZGUgPFdlYkNvcmUvRmlsdGVy
T3BlcmF0aW9uLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQs
IGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRD
b21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8
Q29vcmRpbmF0ZWRMYXllcklEPiYpID0gMDsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAg
dmlydHVhbCB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJ
RCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpID0gMDsKKyNlbmRpZgorICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCkgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVy
SUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFN1cmZh
Y2VVcGRhdGVJbmZvJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIo
Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKSA9IDA7
CisKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQsIGNvbnN0
IFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
VXBkYXRlQXRsYXMoaW50IGF0bGFzSUQpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJ
bWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgY29uc3Qg
U2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhcklt
YWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQp
ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBwb3NpdGlvbikgPSAwOworCisjaWYgVVNFKEdSQVBISUNTX1NVUkZB
Q0UpCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQsIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tl
biYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQs
IHVpbnQzMl90IGZyb250QnVmZmVyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lDYW52
YXMoQ29vcmRpbmF0ZWRMYXllcklEKSA9IDA7CisjZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCBz
ZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyQW5pbWF0aW9ucyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QW5pbWF0aW9u
c0xvY2tlZChib29sKSA9IDA7Cit9OworCitjbGFzcyBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yQ2xp
ZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHZpZXdT
aXplKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGRpZFBlcmZvcm1TY2hlZHVsZWRM
YXllckZsdXNoKGJvb2wgZGlkU3luYykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRJZk5l
ZWRlZCgpID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpc09wYXF1ZUNvbnRlbnRzKCkgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRPdmVybGF5Q29udGVudHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpID0gMDsKK307CisKK30KKyNlbmRpZgorCisjZW5k
aWYgLy8gQ29tcG9zaXRpbmdDb29yZGluYXRvckNsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVD
b29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAKaW5kZXggYzk4NWQxMWIzYTZl
MDA2YzNmZjI2MDBhZDIzZDBiYzkwOWE3MDQyNi4uMGVmYTliYmNkM2ZiNDUwZTRhZDJmYmU1YWMy
ODVmNTQzNzBkZWIwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVy
VHJlZUNvb3JkaW5hdG9yLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqIENv
cHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwzMiArMzAsMTAgQEAKICNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3Iu
aCIKIAotI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oIgogI2lu
Y2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVh
SW1wbC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkxheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgotI2lu
Y2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3Nh
Z2VzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJh
bWVWaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1N1cmZhY2UuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL1BhZ2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckJhY2tpbmcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyLmg+Ci0jaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgot
Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotI2luY2x1ZGUgIkN1c3RvbUZpbHRlclZhbGlkYXRl
ZFByb2dyYW0uaCIKLSNpbmNsdWRlICJWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCIK
LSNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNjcsODkgKzQ2LDMzIEBA
IFBhc3NSZWZQdHI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+IExheWVyVHJlZUNvb3JkaW5hdG9yOjpj
cmVhdGUoV2ViUGFnZSogd2ViUGFnZSkKIAogTGF5ZXJUcmVlQ29vcmRpbmF0b3I6On5MYXllclRy
ZWVDb29yZGluYXRvcigpCiB7Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIGRpc2Nvbm5l
Y3RDdXN0b21GaWx0ZXJQcm9ncmFtcygpOwotI2VuZGlmCi0KLSAgICAvLyBQcmV2ZW50IHNldENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCgwKSAtPiBkZXRhY2hMYXllcigpIGZyb20gbW9k
aWZ5aW5nIHRoZSBzZXQgd2hpbGUgd2UgaXRlcmF0ZSBpdC4KLSAgICBIYXNoU2V0PFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+IHJlZ2lzdGVyZWRMYXllcnM7Ci0gICAgcmVnaXN0
ZXJlZExheWVycy5zd2FwKG1fcmVnaXN0ZXJlZExheWVycyk7Ci0KLSAgICBIYXNoU2V0PFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBlbmQgPSByZWdpc3RlcmVk
TGF5ZXJzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSByZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPnNldENvb3JkaW5hdG9yKDApOwogfQogCiBMYXll
clRyZWVDb29yZGluYXRvcjo6TGF5ZXJUcmVlQ29vcmRpbmF0b3IoV2ViUGFnZSogd2ViUGFnZSkK
ICAgICA6IExheWVyVHJlZUhvc3Qod2ViUGFnZSkKICAgICAsIG1fbm90aWZ5QWZ0ZXJTY2hlZHVs
ZWRMYXllckZsdXNoKGZhbHNlKQotICAgICwgbV9pc1ZhbGlkKHRydWUpCi0gICAgLCBtX2lzUHVy
Z2luZyhmYWxzZSkKLSAgICAsIG1fd2FpdGluZ0ZvclVJUHJvY2Vzcyh0cnVlKQotICAgICwgbV9p
c1N1c3BlbmRlZChmYWxzZSkKLSAgICAsIG1fY29udGVudHNTY2FsZSgxKQotICAgICwgbV9zaG91
bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUodHJ1ZSkKLSAgICAsIG1fc2hvdWxkU3luY0ZyYW1l
KGZhbHNlKQotICAgICwgbV9zaG91bGRTeW5jUm9vdExheWVyKHRydWUpCi0gICAgLCBtX2xheWVy
Rmx1c2hUaW1lcih0aGlzLCAmTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmxheWVyRmx1c2hUaW1lckZp
cmVkKQotICAgICwgbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIodGhpcywgJkxheWVyVHJl
ZUNvb3JkaW5hdG9yOjpyZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJGaXJlZCkKLSAgICAsIG1f
bGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKHRydWUpCiAgICAgLCBtX2ZvcmNlUmVwYWludEFz
eW5jQ2FsbGJhY2tJRCgwKQotICAgICwgbV9hbmltYXRpb25zTG9ja2VkKGZhbHNlKQotewotICAg
IC8vIENyZWF0ZSBhIHJvb3QgbGF5ZXIuCi0gICAgbV9yb290TGF5ZXIgPSBHcmFwaGljc0xheWVy
OjpjcmVhdGUodGhpcywgdGhpcyk7Ci0gICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBjb29y
ZGluYXRlZFJvb3RMYXllciA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVy
LmdldCgpKTsKLSAgICBjb29yZGluYXRlZFJvb3RMYXllci0+c2V0Um9vdExheWVyKHRydWUpOwot
I2lmbmRlZiBOREVCVUcKLSAgICBtX3Jvb3RMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVlQ29vcmRp
bmF0b3Igcm9vdCBsYXllciIpOwotI2VuZGlmCi0gICAgbV9yb290TGF5ZXItPnNldERyYXdzQ29u
dGVudChmYWxzZSk7Ci0gICAgbV9yb290TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkp
OwotICAgIG1fbGF5ZXJUcmVlQ29udGV4dC5jb29yZGluYXRlZExheWVySUQgPSB0b0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcihjb29yZGluYXRlZFJvb3RMYXllciktPmlkKCk7Ci0KLSAgICBtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcywgdGhp
cyk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0
TmFtZSgiTGF5ZXJUcmVlQ29vcmRpbmF0b3Igbm9uLWNvbXBvc2l0ZWQgY29udGVudCIpOwotI2Vu
ZGlmCi0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1
ZSk7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+
c2l6ZSgpKTsKK3sKKyAgICBtX2NvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50ID0g
V2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OmNyZWF0ZShtX3dlYlBhZ2Up
OworICAgIG1fY29tcG9zaXRpbmdDb29yZGluYXRvciA9IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6
OmNyZWF0ZShtX3dlYlBhZ2UtPmNvcmVQYWdlKCksIHRoaXMsIG1fY29tcG9zaXRpbmdDb29yZGlu
YXRvck1lc3NhZ2VDbGllbnQuZ2V0KCkpOwogCi0gICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSk7CisgICAgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyKiByb290TGF5ZXIgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX2NvbXBvc2l0
aW5nQ29vcmRpbmF0b3ItPnJvb3RHcmFwaGljc0xheWVyKCkpOworICAgIG1fbGF5ZXJUcmVlQ29u
dGV4dC5jb29yZGluYXRlZExheWVySUQgPSByb290TGF5ZXItPmlkKCk7CiAKICAgICBpZiAobV93
ZWJQYWdlLT5oYXNQYWdlT3ZlcmxheSgpKQotICAgICAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVy
KCk7CisgICAgICAgIG1fY29tcG9zaXRpbmdDb29yZGluYXRvci0+Y3JlYXRlUGFnZU92ZXJsYXlM
YXllcigpOwogCiAgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OnNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sIGxheWVyRmx1
c2hpbmdFbmFibGVkKQogewotICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9
PSBsYXllckZsdXNoaW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9sYXllckZs
dXNoU2NoZWR1bGluZ0VuYWJsZWQgPSBsYXllckZsdXNoaW5nRW5hYmxlZDsKLQotICAgIGlmICht
X2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkgewotICAgICAgICBzY2hlZHVsZUxheWVyRmx1
c2goKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhbmNlbFBlbmRpbmdMYXllckZs
dXNoKCk7CisgICAgbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yLT5zZXRMYXllckZsdXNoU2NoZWR1
bGluZ0VuYWJsZWQobGF5ZXJGbHVzaGluZ0VuYWJsZWQpOwogfQogCiB2b2lkIExheWVyVHJlZUNv
b3JkaW5hdG9yOjpzY2hlZHVsZUxheWVyRmx1c2goKQogewotICAgIGlmICghbV9sYXllckZsdXNo
U2NoZWR1bGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9sYXllckZs
dXNoVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9sYXllckZsdXNoVGltZXIuc3RhcnRPbmVT
aG90KDApOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpjYW5jZWxQZW5kaW5nTGF5
ZXJGbHVzaCgpCi17Ci0gICAgbV9sYXllckZsdXNoVGltZXIuc3RvcCgpOworICAgIG1fY29tcG9z
aXRpbmdDb29yZGluYXRvci0+c2NoZWR1bGVMYXllckZsdXNoKCk7CiB9CiAKIHZvaWQgTGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1
c2goYm9vbCBub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gpCkBAIC0xNTksMzAgKzgyLDE3
IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNj
aGVkdWxlZExheWVyRmx1c2goYm9vbCBub3RpCiAKIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNz
TGF5ZXIpCiB7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5yZW1vdmVBbGxDaGls
ZHJlbigpOwotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0Q29udGVudHNPcGFx
dWUobV93ZWJQYWdlLT5kcmF3c0JhY2tncm91bmQoKSAmJiAhbV93ZWJQYWdlLT5kcmF3c1RyYW5z
cGFyZW50QmFja2dyb3VuZCgpKTsKLQotICAgIC8vIEFkZCB0aGUgYWNjZWxlcmF0ZWQgbGF5ZXIg
dHJlZSBoaWVyYXJjaHkuCi0gICAgaWYgKGdyYXBoaWNzTGF5ZXIpCi0gICAgICAgIG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci0+YWRkQ2hpbGQoZ3JhcGhpY3NMYXllcik7CisgICAgbV9jb21w
b3NpdGluZ0Nvb3JkaW5hdG9yLT5zZXRSb290Q29tcG9zaXRpbmdMYXllcihncmFwaGljc0xheWVy
KTsKIH0KIAogdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6aW52YWxpZGF0ZSgpCiB7Ci0gICAg
Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKLQotICAgIEFTU0VSVChtX2lzVmFsaWQpOwotICAg
IG1fcm9vdExheWVyID0gbnVsbHB0cjsKLSAgICBtX2lzVmFsaWQgPSBmYWxzZTsKKyAgICBtX2Nv
bXBvc2l0aW5nQ29vcmRpbmF0b3ItPmludmFsaWRhdGUoKTsKIH0KIAogdm9pZCBMYXllclRyZWVD
b29yZGluYXRvcjo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgcmVjdCkKIHsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIt
PnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVy
KQotICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0
KTsKLQotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIG1fY29tcG9zaXRpbmdDb29yZGlu
YXRvci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwogfQogCiB2b2lkIExheWVyVHJlZUNv
b3JkaW5hdG9yOjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgLyogc2Nyb2xsT2Zmc2V0
ICovKQpAQCAtMTkyLDE0ICsxMDIsNyBAQCB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzY3Jv
bGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcwogCiB2b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yOjpmb3JjZVJlcGFpbnQoKQogewotICAgIC8vIFRoaXMgaXMg
bmVjZXNzYXJ5IGZvciBydW5uaW5nIGxheW91dCB0ZXN0cy4gU2luY2UgaW4gdGhpcyBjYXNlIHdl
IGFyZSBub3Qgd2FpdGluZyBmb3IgYSBVSVByb2Nlc3MgdG8gcmVwbHkgbmljZWx5LgotICAgIC8v
IEluc3RlYWQgd2UgYXJlIGp1c3QgdHJpZ2dlcmluZyBmb3JjZVJlcGFpbnQuIEJ1dCB3ZSBzdGls
bCB3YW50IHRvIGhhdmUgdGhlIHNjcmlwdGVkIGFuaW1hdGlvbiBjYWxsYmFja3MgYmVpbmcgZXhl
Y3V0ZWQuCi0gICAgc3luY0Rpc3BsYXlTdGF0ZSgpOwotCi0gICAgLy8gV2UgbmVlZCB0byBzY2hl
ZHVsZSBhbm90aGVyIGZsdXNoLCBvdGhlcndpc2UgdGhlIGZvcmNlZCBwYWludCBtaWdodCBjYW5j
ZWwgYSBsYXRlciBleHBlY3RlZCBmbHVzaC4KLSAgICAvLyBUaGlzIGlzIGFsaWduZWQgd2l0aCBM
YXllclRyZWVIb3N0Q0EuCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgZmx1c2hQZW5k
aW5nTGF5ZXJDaGFuZ2VzKCk7CisgICAgbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yLT5mb3JjZVJl
cGFpbnQoKTsKIH0KIAogYm9vbCBMYXllclRyZWVDb29yZGluYXRvcjo6Zm9yY2VSZXBhaW50QXN5
bmModWludDY0X3QgY2FsbGJhY2tJRCkKQEAgLTIxMyw0MjUgKzExNiw3NyBAQCBib29sIExheWVy
VHJlZUNvb3JkaW5hdG9yOjpmb3JjZVJlcGFpbnRBc3luYyh1aW50NjRfdCBjYWxsYmFja0lEKQog
CiB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIG5ld1NpemUpCiB7Ci0gICAgaWYgKG1fcm9vdExheWVyLT5zaXplKCkgPT0gbmV3
U2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9yb290TGF5ZXItPnNldFNpemUobmV3U2l6
ZSk7Ci0KLSAgICAvLyBJZiB0aGUgbmV3U2l6ZSBleHBvc2VzIG5ldyBhcmVhcyBvZiB0aGUgbm9u
LWNvbXBvc2l0ZWQgY29udGVudCBhIHNldE5lZWRzRGlzcGxheSBpcyBuZWVkZWQKLSAgICAvLyBm
b3IgdGhvc2UgbmV3bHkgZXhwb3NlZCBhcmVhcy4KLSAgICBGbG9hdFNpemUgb2xkU2l6ZSA9IG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2l6ZSgpOwotICAgIG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKLQotICAgIGlmIChuZXdTaXplLndpZHRoKCkg
PiBvbGRTaXplLndpZHRoKCkpIHsKLSAgICAgICAgZmxvYXQgaGVpZ2h0ID0gc3RkOjptaW4oc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG5ld1NpemUuaGVpZ2h0KCkpLCBvbGRTaXplLmhlaWdodCgpKTsKLSAg
ICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3Qo
RmxvYXRSZWN0KG9sZFNpemUud2lkdGgoKSwgMCwgbmV3U2l6ZS53aWR0aCgpIC0gb2xkU2l6ZS53
aWR0aCgpLCBoZWlnaHQpKTsKLSAgICB9Ci0KLSAgICBpZiAobmV3U2l6ZS5oZWlnaHQoKSA+IG9s
ZFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdCgwLCBvbGRTaXplLmhlaWdodCgpLCBuZXdTaXpl
LndpZHRoKCksIG5ld1NpemUuaGVpZ2h0KCkgLSBvbGRTaXplLmhlaWdodCgpKSk7Ci0KLSAgICBp
ZiAobV9wYWdlT3ZlcmxheUxheWVyKQotICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNp
emUobmV3U2l6ZSk7Ci0KLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICBtX2NvbXBvc2l0
aW5nQ29vcmRpbmF0b3ItPnNpemVEaWRDaGFuZ2UobmV3U2l6ZSk7CiB9CiAKIHZvaWQgTGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OmRpZEluc3RhbGxQYWdlT3ZlcmxheSgpCiB7Ci0gICAgY3JlYXRlUGFn
ZU92ZXJsYXlMYXllcigpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIG1fY29tcG9z
aXRpbmdDb29yZGluYXRvci0+Y3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOwogfQogCiB2b2lkIExh
eWVyVHJlZUNvb3JkaW5hdG9yOjpkaWRVbmluc3RhbGxQYWdlT3ZlcmxheSgpCiB7Ci0gICAgZGVz
dHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICBt
X2NvbXBvc2l0aW5nQ29vcmRpbmF0b3ItPmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7CiB9CiAK
IHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCiB7Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlM
YXllcik7Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVj
dCk7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgbV9jb21wb3NpdGluZ0Nvb3JkaW5h
dG9yLT5zZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShyZWN0KTsKIH0KIAogdm9pZCBMYXllclRy
ZWVDb29yZGluYXRvcjo6c2V0UGFnZU92ZXJsYXlPcGFjaXR5KGZsb2F0IHZhbHVlKQogewotICAg
IEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOwotICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0
T3BhY2l0eSh2YWx1ZSk7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgbV9jb21wb3Np
dGluZ0Nvb3JkaW5hdG9yLT5zZXRQYWdlT3ZlcmxheU9wYWNpdHkodmFsdWUpOwogfQogCi1ib29s
IExheWVyVHJlZUNvb3JkaW5hdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKQordm9pZCBM
YXllclRyZWVDb29yZGluYXRvcjo6cGF1c2VSZW5kZXJpbmcoKQogewotICAgIGlmIChtX3dhaXRp
bmdGb3JVSVByb2Nlc3MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fcm9vdExheWVy
LT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0gICAgbV9ub25Db21w
b3NpdGVkQ29udGVudExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5
KCk7Ci0gICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKLSAgICAgICAgbV9wYWdlT3ZlcmxheUxh
eWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0KLSAgICBib29s
IGRpZFN5bmMgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPmZs
dXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOwotCi0gICAgZmx1c2hQZW5k
aW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpOwotCi0gICAgaWYgKG1fc2hvdWxkU3luY1Jvb3RMYXll
cikgewotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OlNldFJvb3RDb21wb3NpdGluZ0xheWVyKHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyKG1fcm9vdExheWVyLmdldCgpKS0+aWQoKSkpOwotICAgICAgICBtX3Nob3VsZFN5bmNSb290
TGF5ZXIgPSBmYWxzZTsKLSAgICAgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIH0K
LQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kZXRhY2hlZExheWVycy5zaXplKCk7ICsr
aSkKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRv
clByb3h5OjpEZWxldGVDb21wb3NpdGluZ0xheWVyKG1fZGV0YWNoZWRMYXllcnNbaV0pKTsKLSAg
ICBtX2RldGFjaGVkTGF5ZXJzLmNsZWFyKCk7Ci0KLSAgICBpZiAobV9zaG91bGRTeW5jRnJhbWUp
IHsKLSAgICAgICAgZGlkU3luYyA9IHRydWU7Ci0KLSAgICAgICAgSW50U2l6ZSBjb250ZW50c1Np
emUgPSByb3VuZGVkSW50U2l6ZShtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKSk7
Ci0gICAgICAgIEludFJlY3QgY292ZXJlZFJlY3QgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cihtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpLT5jb3ZlclJlY3QoKTsKLSAgICAg
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpE
aWRSZW5kZXJGcmFtZShjb250ZW50c1NpemUsIGNvdmVyZWRSZWN0KSk7Ci0gICAgICAgIG1fd2Fp
dGluZ0ZvclVJUHJvY2VzcyA9IHRydWU7Ci0gICAgICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gZmFs
c2U7Ci0gICAgfSBlbHNlCi0gICAgICAgIHVubG9ja0FuaW1hdGlvbnMoKTsKLQotICAgIGlmICht
X2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJRCkgewotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNrKG1fZm9yY2VSZXBhaW50QXN5bmND
YWxsYmFja0lEKSk7Ci0gICAgICAgIG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEID0gMDsK
LSAgICB9Ci0KLSAgICByZXR1cm4gZGlkU3luYzsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGlu
YXRvcjo6c3luY0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBDb29yZGlu
YXRlZExheWVySW5mbyYgaW5mbykKLXsKLSAgICBpZiAobV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRp
b25VcGRhdGUpIHsKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVD
b29yZGluYXRvclByb3h5OjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihtX3Zpc2libGVDb250ZW50
c1JlY3QubG9jYXRpb24oKSkpOwotICAgICAgICBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVw
ZGF0ZSA9IGZhbHNlOwotICAgIH0KLQotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNl
dENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShpZCwgaW5mbykpOworICAgIG1fY29tcG9zaXRpbmdDb29y
ZGluYXRvci0+cGF1c2VSZW5kZXJpbmcoKTsKIH0KIAotdm9pZCBMYXllclRyZWVDb29yZGluYXRv
cjo6c3luY0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8
Q29vcmRpbmF0ZWRMYXllcklEPiYgY2hpbGRyZW4pCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9y
OjpyZXN1bWVSZW5kZXJpbmcoKQogewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNl
dENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihpZCwgY2hpbGRyZW4pKTsKKyAgICBtX2NvbXBvc2l0
aW5nQ29vcmRpbmF0b3ItPnJlc3VtZVJlbmRlcmluZygpOwogfQogCi0jaWYgVVNFKEdSQVBISUNT
X1NVUkZBQ0UpCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGVDYW52YXMoQ29vcmRp
bmF0ZWRMYXllcklEIGlkLCBQbGF0Zm9ybUxheWVyKiBjYW52YXNQbGF0Zm9ybUxheWVyKQorY29u
c3QgSW50U2l6ZSYgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnZpZXdTaXplKCkgY29uc3QKIHsKLSAg
ICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4gdG9r
ZW4gPSBjYW52YXNQbGF0Zm9ybUxheWVyLT5ncmFwaGljc1N1cmZhY2VUb2tlbigpOwotICAgIElu
dFNpemUgY2FudmFzU2l6ZSA9IGNhbnZhc1BsYXRmb3JtTGF5ZXItPnBsYXRmb3JtTGF5ZXJTaXpl
KCk7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclBy
b3h5OjpDcmVhdGVDYW52YXMoaWQsIGNhbnZhc1NpemUsIHRva2VuKSk7CisgICAgcmV0dXJuIG1f
d2ViUGFnZS0+c2l6ZSgpOwogfQogCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5jQ2Fu
dmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgUGxhdGZvcm1MYXllciogY2FudmFzUGxhdGZvcm1M
YXllcikKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmxheW91dElmTmVlZGVkKCkKIHsKLSAg
ICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgdWludDMyX3QgZnJvbnRCdWZmZXIgPSBj
YW52YXNQbGF0Zm9ybUxheWVyLT5jb3B5VG9HcmFwaGljc1N1cmZhY2UoKTsKLSAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlN5bmNDYW52YXMo
aWQsIGZyb250QnVmZmVyKSk7CisgICAgbV93ZWJQYWdlLT5sYXlvdXRJZk5lZWRlZCgpOwogfQog
Ci12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5
ZXJJRCBpZCkKK2Jvb2wgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmlzT3BhcXVlQ29udGVudHMoKQog
ewotICAgIGlmIChtX2lzUHVyZ2luZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaG91bGRT
eW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eTo6RGVzdHJveUNhbnZhcyhpZCkpOworICAgIHJldHVybiBtX3dlYlBh
Z2UtPmRyYXdzQmFja2dyb3VuZCgpICYmICFtX3dlYlBhZ2UtPmRyYXdzVHJhbnNwYXJlbnRCYWNr
Z3JvdW5kKCk7CiB9Ci0jZW5kaWYKIAotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLXZvaWQgTGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklEIGlk
LCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQordm9pZCBMYXllclRyZWVDb29yZGlu
YXRvcjo6ZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goYm9vbCBkaWRTeW5jKQogewotICAg
IG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAg
Y2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhmaWx0ZXJzKTsKLSNlbmRpZgotICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0Q29t
cG9zaXRpbmdMYXllckZpbHRlcnMoaWQsIGZpbHRlcnMpKTsKLX0KLSNlbmRpZgotCi0jaWYgRU5B
QkxFKENTU19TSEFERVJTKQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6Y2hlY2tDdXN0b21G
aWx0ZXJQcm9ncmFtUHJveGllcyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQotewot
ICAgIC8vIFdlIG5lZWQgdG8gY3JlYXRlIHRoZSBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkg
b2JqZWN0cyBiZWZvcmUgd2UgZ2V0IHRvIHNlcmlhbGl6ZSB0aGUKLSAgICAvLyBjdXN0b20gZmls
dGVycyB0byB0aGUgb3RoZXIgcHJvY2Vzcy4gVGhhdCdzIGJlY2F1c2UgV2ViQ3VzdG9tRmlsdGVy
UHJvZ3JhbVByb3h5IG5lZWRzCi0gICAgLy8gdG8gbGluayBiYWNrIHRvIHRoZSBjb29yZGluYXRv
ciwgc28gdGhhdCB3ZSBjYW4gc2VuZCBhIG1lc3NhZ2UgdG8gdGhlIFVJIHByb2Nlc3Mgd2hlbiAK
LSAgICAvLyB0aGUgcHJvZ3JhbSBpcyBub3QgbmVlZGVkIGFueW1vcmUuCi0gICAgLy8gTm90ZSB0
aGF0IHRoZSBzZXJpYWxpemF0aW9uIHdpbGwgb25seSBoYXBwZW4gYXQgYSBsYXRlciB0aW1lIGlu
IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucz46OmVuY29kZS4KLSAgICAv
LyBBdCB0aGF0IHBvaW50IHRoZSBwcm9ncmFtIHdpbGwgb25seSBiZSBzZXJpYWxpemVkIG9uY2Uu
IEFsbCB0aGUgb3RoZXIgdGltZXMgaXQgd2lsbCBvbmx5IHVzZSB0aGUgSUQgb2YgdGhlIHByb2dy
YW0uCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbiogb3BlcmF0aW9uID0gZmlsdGVycy5hdChpKTsK
LSAgICAgICAgaWYgKG9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpICE9IEZpbHRlck9wZXJh
dGlvbjo6VkFMSURBVEVEX0NVU1RPTSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBj
b25zdCBWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24qIGN1c3RvbU9wZXJhdGlvbiA9IHN0
YXRpY19jYXN0PGNvbnN0IFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbio+KG9wZXJhdGlv
bik7Ci0gICAgICAgIEFTU0VSVChjdXN0b21PcGVyYXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKS0+
aXNJbml0aWFsaXplZCgpKTsKLSAgICAgICAgVGV4dHVyZU1hcHBlclBsYXRmb3JtQ29tcGlsZWRQ
cm9ncmFtKiBwcm9ncmFtID0gY3VzdG9tT3BlcmF0aW9uLT52YWxpZGF0ZWRQcm9ncmFtKCktPnBs
YXRmb3JtQ29tcGlsZWRQcm9ncmFtKCk7Ci0gICAgICAgIAotICAgICAgICBSZWZQdHI8V2ViQ3Vz
dG9tRmlsdGVyUHJvZ3JhbVByb3h5PiBjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHk7Ci0gICAgICAg
IGlmIChwcm9ncmFtLT5jbGllbnQoKSkKLSAgICAgICAgICAgIGN1c3RvbUZpbHRlclByb2dyYW1Q
cm94eSA9IHN0YXRpY19jYXN0PFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSo+KHByb2dyYW0t
PmNsaWVudCgpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjdXN0b21GaWx0ZXJQcm9n
cmFtUHJveHkgPSBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHk6OmNyZWF0ZSgpOwotICAgICAg
ICAgICAgcHJvZ3JhbS0+c2V0Q2xpZW50KGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5j
bGllbnQoKSkgewotICAgICAgICAgICAgY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5zZXRDbGll
bnQodGhpcyk7Ci0gICAgICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHk6OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oY3VzdG9tRmlsdGVy
UHJvZ3JhbVByb3h5LT5pZCgpLCBjdXN0b21PcGVyYXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKS0+
dmFsaWRhdGVkUHJvZ3JhbUluZm8oKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Ly8gSWYgdGhlIGNsaWVudCB3YXMgbm90IGRpc2Nvbm5lY3RlZCB0aGVuIHRoaXMgY29vcmRpbmF0
b3IgbXVzdCBiZSB0aGUgY2xpZW50IGZvciBpdC4KLSAgICAgICAgICAgIEFTU0VSVChjdXN0b21G
aWx0ZXJQcm9ncmFtUHJveHktPmNsaWVudCgpID09IHRoaXMpOwotICAgICAgICB9CisgICAgaWYg
KG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEKSB7CisgICAgICAgIG1fY29tcG9zaXRpbmdD
b29yZGluYXRvck1lc3NhZ2VDbGllbnQtPmludm9rZUZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2so
bV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQpOworICAgICAgICBtX2ZvcmNlUmVwYWludEFz
eW5jQ2FsbGJhY2tJRCA9IDA7CiAgICAgfQotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9y
OjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkoV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVBy
b3h5KiBjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkpCi17Ci0gICAgLy8gQXQgdGhpcyB0aW1lIHRo
ZSBzaGFkZXIgaXMgbm90IG5lZWRlZCBhbnltb3JlLCBzbyB3ZSByZW1vdmUgaXQgZnJvbSBvdXIg
c2V0IGFuZCAKLSAgICAvLyBzZW5kIGEgbWVzc2FnZSB0byB0aGUgb3RoZXIgcHJvY2VzcyB0byBk
ZWxldGUgaXQuCi0gICAgbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5yZW1vdmUoY3VzdG9tRmlsdGVy
UHJvZ3JhbVByb3h5KTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk6OlJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oY3VzdG9tRmlsdGVyUHJv
Z3JhbVByb3h5LT5pZCgpKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRpc2Nv
bm5lY3RDdXN0b21GaWx0ZXJQcm9ncmFtcygpCi17Ci0gICAgLy8gTWFrZSBzdXJlIHRoYXQgV2Vi
Q29yZSB3aWxsIG5vdCBjYWxsIGludG8gdGhpcyBjb29yZGluYXRvciBhbnltb3JlLgotICAgIEhh
c2hTZXQ8V2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5Kj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2N1
c3RvbUZpbHRlclByb2dyYW1zLmJlZ2luKCk7Ci0gICAgZm9yICg7IGl0ZXIgIT0gbV9jdXN0b21G
aWx0ZXJQcm9ncmFtcy5lbmQoKTsgKytpdGVyKQotICAgICAgICAoKml0ZXIpLT5zZXRDbGllbnQo
MCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGV0YWNoTGF5ZXIo
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAgICBtX3JlZ2lzdGVyZWRMYXll
cnMucmVtb3ZlKGxheWVyKTsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV9k
ZXRhY2hlZExheWVycy5hcHBlbmQobGF5ZXItPmlkKCkpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVz
aCgpOwotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKFJl
bmRlckxheWVyKiByZW5kZXJMYXllcikKLXsKLSAgICAvLyBUaGVzZSBjb25kaXRpb25zIG11c3Qg
bWF0Y2ggdGhlIGNvbmRpdGlvbnMgaW4gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0Nv
bXBvc2l0aW5nRm9yUG9zaXRpb24uCi0gICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0g
cmVuZGVyTGF5ZXItPmJhY2tpbmcoKTsKLSAgICBpZiAoIWJhY2tpbmcpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5z
dHlsZSgpOwotICAgIGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVu
ZGVyTGF5ZXItPnJlbmRlcmVyKCktPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8IHJlbmRlckxh
eWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5wb3NpdGlvbigpICE9IEZpeGVkUG9zaXRpb24pCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPmNvbnRh
aW5lcigpLT5pc1JlbmRlclZpZXcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFyZW5k
ZXJMYXllci0+aXNTdGFja2luZ0NvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyID0gdG9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIoYmFja2luZy0+Z3JhcGhpY3NMYXllcigpKTsKLSAgICBncmFwaGljc0xheWVyLT5z
ZXRGaXhlZFRvVmlld3BvcnQodHJ1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZU9mZnNldEZy
b21WaWV3cG9ydEZvckxheWVyKFJlbmRlckxheWVyKiByZW5kZXJMYXllcikKLXsKLSAgICB1cGRh
dGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKHJlbmRlckxheWVyKTsKLQotICAgIGlmIChyZW5k
ZXJMYXllci0+Zmlyc3RDaGlsZCgpKQotICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRG
b3JMYXllcihyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKTsKLSAgICBpZiAocmVuZGVyTGF5ZXIt
Pm5leHRTaWJsaW5nKCkpCi0gICAgICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVy
KHJlbmRlckxheWVyLT5uZXh0U2libGluZygpKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGlu
YXRvcjo6c3luY0ZpeGVkTGF5ZXJzKCkKLXsKLSAgICBpZiAoIW1fd2ViUGFnZS0+Y29yZVBhZ2Uo
KS0+c2V0dGluZ3MoKSB8fCAhbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5hY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKCFtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPmhhc1ZpZXdw
b3J0Q29uc3RyYWluZWRPYmplY3RzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlckxh
eWVyKiByb290UmVuZGVyTGF5ZXIgPSBtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT5jb250ZW50UmVu
ZGVyZXIoKS0+Y29tcG9zaXRvcigpLT5yb290UmVuZGVyTGF5ZXIoKTsKLSAgICBBU1NFUlQocm9v
dFJlbmRlckxheWVyKTsKLSAgICBpZiAocm9vdFJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpCi0g
ICAgICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJvb3RSZW5kZXJMYXllci0+
Zmlyc3RDaGlsZCgpKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6bG9ja0FuaW1h
dGlvbnMoKQotewotICAgIG1fYW5pbWF0aW9uc0xvY2tlZCA9IHRydWU7Ci0gICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRBbmltYXRpb25z
TG9ja2VkKHRydWUpKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6dW5sb2NrQW5p
bWF0aW9ucygpCi17Ci0gICAgaWYgKCFtX2FuaW1hdGlvbnNMb2NrZWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fYW5pbWF0aW9uc0xvY2tlZCA9IGZhbHNlOwotICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0QW5pbWF0aW9uc0xvY2tl
ZChmYWxzZSkpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpwZXJmb3JtU2NoZWR1
bGVkTGF5ZXJGbHVzaCgpCi17Ci0gICAgaWYgKG1faXNTdXNwZW5kZWQgfHwgbV93YWl0aW5nRm9y
VUlQcm9jZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSBsb2NrIHRoZSBhbmltYXRp
b25zIHdoaWxlIHBlcmZvcm1pbmcgbGF5b3V0LCB0byBhdm9pZCBmbGlja2VycyBjYXVzZWQgYnkg
YW5pbWF0aW9ucyBjb250aW51aW5nIGluIHRoZSBVSSBwcm9jZXNzIHdoaWxlCi0gICAgLy8gdGhl
IHdlYiBwcm9jZXNzIGxheW91dCB3YW50cyB0byBjYW5jZWwgdGhlbS4KLSAgICBsb2NrQW5pbWF0
aW9ucygpOwotICAgIHN5bmNEaXNwbGF5U3RhdGUoKTsKLQotICAgIC8vIFdlIGNhbiB1bmxvY2sg
dGhlIGFuaW1hdGlvbnMgYmVmb3JlIGZsdXNoaW5nIGlmIHRoZXJlIGFyZSBubyB2aXNpYmxlIGNo
YW5nZXMsIGZvciBleGFtcGxlIGlmIHRoZXJlIGFyZSBjb250ZW50IHVwZGF0ZXMKLSAgICAvLyBp
biBhIGxheWVyIHdpdGggb3BhY2l0eSAwLgotICAgIGJvb2wgY2FuVW5sb2NrQmVmb3JlRmx1c2gg
PSAhbV9pc1ZhbGlkIHx8ICF0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5n
ZXQoKSktPmhhc1BlbmRpbmdWaXNpYmxlQ2hhbmdlcygpOwotICAgIGlmIChjYW5VbmxvY2tCZWZv
cmVGbHVzaCkKLSAgICAgICAgdW5sb2NrQW5pbWF0aW9ucygpOwotCi0gICAgaWYgKCFtX2lzVmFs
aWQpCi0gICAgICAgIHJldHVybjsKIAotICAgIGlmIChmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMo
KSkKLSAgICAgICAgZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKLX0KLQotdm9pZCBM
YXllclRyZWVDb29yZGluYXRvcjo6c3luY0Rpc3BsYXlTdGF0ZSgpCi17Ci0jaWYgRU5BQkxFKFJF
UVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAmJiAhVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJ
TUVSKSAmJiAhVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLSAg
ICAvLyBNYWtlIHN1cmUgdGhhdCBhbnkgcHJldmlvdXNseSByZWdpc3RlcmVkIGFuaW1hdGlvbiBj
YWxsYmFja3MgYXJlIGJlaW5nIGV4ZWN1dGVkIGJlZm9yZSB3ZSBmbHVzaCB0aGUgbGF5ZXJzLgot
ICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c2VydmljZVNj
cmlwdGVkQW5pbWF0aW9ucyhjb252ZXJ0U2Vjb25kc1RvRE9NVGltZVN0YW1wKGN1cnJlbnRUaW1l
KCkpKTsKLSNlbmRpZgotCi0gICAgbV93ZWJQYWdlLT5sYXlvdXRJZk5lZWRlZCgpOwotfQotCi12
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpkaWRQZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgp
Ci17Ci0gICAgaWYgKG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKSB7CisgICAgaWYg
KGRpZFN5bmMgJiYgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gpIHsKICAgICAgICAg
c3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWFJbXBsKj4obV93ZWJQYWdlLT5kcmF3aW5nQXJlYSgpKS0+
bGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKTsKICAgICAgICAgbV9ub3RpZnlBZnRlclNjaGVkdWxl
ZExheWVyRmx1c2ggPSBmYWxzZTsKICAgICB9CiB9CiAKLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OmxheWVyRmx1c2hUaW1lckZpcmVkKFRpbWVyPExheWVyVHJlZUNvb3JkaW5hdG9yPiopCi17
Ci0gICAgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRyZWVD
b29yZGluYXRvcjo6Y3JlYXRlUGFnZU92ZXJsYXlMYXllcigpCi17Ci0gICAgQVNTRVJUKCFtX3Bh
Z2VPdmVybGF5TGF5ZXIpOwotCi0gICAgbV9wYWdlT3ZlcmxheUxheWVyID0gR3JhcGhpY3NMYXll
cjo6Y3JlYXRlKHRoaXMsIHRoaXMpOwotI2lmbmRlZiBOREVCVUcKLSAgICBtX3BhZ2VPdmVybGF5
TGF5ZXItPnNldE5hbWUoIkxheWVyVHJlZUNvb3JkaW5hdG9yIHBhZ2Ugb3ZlcmxheSBjb250ZW50
Iik7Ci0jZW5kaWYKLQotICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0RHJhd3NDb250ZW50KHRy
dWUpOwotICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7
Ci0KLSAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobV9wYWdlT3ZlcmxheUxheWVyLmdldCgpKTsK
LX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIo
KQotewotICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOwotICAgIG1fcGFnZU92ZXJsYXlM
YXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IG51bGxw
dHI7Ci19Ci0KLVBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IExheWVyVHJlZUNv
b3JkaW5hdG9yOjpjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChJbWFnZSogaW1hZ2UpCi17Ci0g
ICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEID0gQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmc6OmdldENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQoaW1hZ2UpOwotICAgIEltYWdlQmFj
a2luZ01hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlQmFja2luZ3MuZmluZChpbWFnZUlEKTsKLSAg
ICBSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGltYWdlQmFja2luZzsKLSAgICBpZiAo
aXQgPT0gbV9pbWFnZUJhY2tpbmdzLmVuZCgpKSB7Ci0gICAgICAgIGltYWdlQmFja2luZyA9IENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjcmVhdGUodGhpcywgaW1hZ2UpOwotICAgICAgICBtX2lt
YWdlQmFja2luZ3MuYWRkKGltYWdlSUQsIGltYWdlQmFja2luZyk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIGltYWdlQmFja2luZyA9IGl0LT52YWx1ZTsKLQotICAgIHJldHVybiBpbWFnZUJhY2tpbmc7
Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZUltYWdlQmFja2luZyhDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9y
OjpwYWludENvbnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0
LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKIHsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRy
dWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclBy
b3h5OjpDcmVhdGVJbWFnZUJhY2tpbmcoaW1hZ2VJRCkpOwotfQotCi12b2lkIExheWVyVHJlZUNv
b3JkaW5hdG9yOjp1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBp
bWFnZUlELCBjb25zdCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkKLXsKLSAgICBt
X3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpM
YXllclRyZWVDb29yZGluYXRvclByb3h5OjpVcGRhdGVJbWFnZUJhY2tpbmcoaW1hZ2VJRCwgaGFu
ZGxlKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNsZWFySW1hZ2VCYWNraW5n
Q29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIG1fc2hv
dWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk6OkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoaW1hZ2VJRCkp
OwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIGlmIChtX2lzUHVyZ2luZykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhp
bWFnZUlEKSk7Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1faW1hZ2VCYWNr
aW5ncy5yZW1vdmUoaW1hZ2VJRCk7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXll
clRyZWVDb29yZGluYXRvclByb3h5OjpSZW1vdmVJbWFnZUJhY2tpbmcoaW1hZ2VJRCkpOwotfQot
Ci12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpmbHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFu
Z2VzKCkKLXsKLSAgICBJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faW1hZ2VCYWNr
aW5ncy5lbmQoKTsKLSAgICBmb3IgKEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgaXRlciA9IG1f
aW1hZ2VCYWNraW5ncy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICBpdGVy
LT52YWx1ZS0+dXBkYXRlKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6Om5vdGlm
eUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSAv
KiB0aW1lICovKQotewotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpub3RpZnlGbHVz
aFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKQotewotfQotCi12b2lkIExh
eWVyVHJlZUNvb3JkaW5hdG9yOjpwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3ND
b250ZXh0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgY2xpcFJlY3QpCi17Ci0gICAgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyKSB7Ci0gICAgICAgIG1fd2ViUGFnZS0+ZHJhd1JlY3QoZ3Jh
cGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoZ3JhcGhpY3NMYXllciA9PSBtX3BhZ2VPdmVybGF5TGF5ZXIpIHsKLSAgICAgICAgLy8gT3Zl
cmxheXMgY29udGFpbiB0cmFuc3BhcmVudCBjb250ZW50cyBhbmQgd29uJ3QgY2xlYXIgdGhlIGNv
bnRleHQgYXMgcGFydCBvZiB0aGVpciByZW5kZXJpbmcsIHNvIHdlIGRvIGl0IGhlcmUuCi0gICAg
ICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclJlY3QoY2xpcFJlY3QpOwotICAgICAgICBtX3dlYlBh
Z2UtPmRyYXdQYWdlT3ZlcmxheShncmFwaGljc0NvbnRleHQsIGNsaXBSZWN0KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBtX3dlYlBhZ2UtPmRyYXdSZWN0KGdyYXBoaWNzQ29udGV4dCwg
Y2xpcFJlY3QpOwogfQogCi1QYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IExheWVyVHJlZUNvb3Jk
aW5hdG9yOjpjcmVhdGVHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkK
K3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnBhaW50T3ZlcmxheUNvbnRlbnRzKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVj
dCkKIHsKLSAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbmV3IENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcihjbGllbnQpOwotICAgIGxheWVyLT5zZXRDb29yZGluYXRvcih0aGlz
KTsKLSAgICBtX3JlZ2lzdGVyZWRMYXllcnMuYWRkKGxheWVyKTsKLSAgICBsYXllci0+c2V0Q29u
dGVudHNTY2FsZShtX2NvbnRlbnRzU2NhbGUpOwotICAgIGxheWVyLT5hZGp1c3RWaXNpYmxlUmVj
dCgpOwotICAgIHJldHVybiBhZG9wdFB0cihsYXllcik7CisgICAgLy8gT3ZlcmxheXMgY29udGFp
biB0cmFuc3BhcmVudCBjb250ZW50cyBhbmQgd29uJ3QgY2xlYXIgdGhlIGNvbnRleHQgYXMgcGFy
dCBvZiB0aGVpciByZW5kZXJpbmcsIHNvIHdlIGRvIGl0IGhlcmUuCisgICAgZ3JhcGhpY3NDb250
ZXh0LmNsZWFyUmVjdChjbGlwUmVjdCk7CisgICAgbV93ZWJQYWdlLT5kcmF3UGFnZU92ZXJsYXko
Z3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7CiB9CiAKIGJvb2wgTGF5ZXJUcmVlSG9zdDo6c3Vw
cG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKQEAgLTYzOSw5OSArMTk0LDIzIEBAIGJvb2wg
TGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6Y3JlYXRlVGlsZShDb29y
ZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBk
YXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGlsZVJlY3QpCi17
Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Q3JlYXRlVGlsZUZvckxheWVyKGxheWVy
SUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKLX0KLQotdm9pZCBMYXllclRyZWVD
b29yZGluYXRvcjo6dXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMy
X3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgdGlsZVJlY3QpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVl
OwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eTo6VXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUlu
Zm8pKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVtb3ZlVGlsZShDb29yZGlu
YXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQotewotICAgIGlmIChtX2lzUHVy
Z2luZykKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlJl
bW92ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQpKTsKLX0KLQotdm9pZCBMYXllclRyZWVD
b29yZGluYXRvcjo6Y3JlYXRlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQsIGNvbnN0IFNoYXJlYWJs
ZVN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlKQotewotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Q3JlYXRlVXBkYXRlQXRsYXMoYXRsYXNJRCwg
aGFuZGxlKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbW92ZVVwZGF0ZUF0
bGFzKGludCBhdGxhc0lEKQotewotICAgIGlmIChtX2lzUHVyZ2luZykKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eTo6UmVtb3ZlVXBkYXRlQXRsYXMoYXRsYXNJRCkpOwotfQotCi1XZWJDb3JlOjpJbnRSZWN0IExh
eWVyVHJlZUNvb3JkaW5hdG9yOjp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV92aXNpYmxlQ29udGVudHNSZWN0OwotfQotCi0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRp
bmF0b3I6OnNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgY29u
c3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMpCi17Ci0gICAgbV9zaG91bGRT
eW5jRnJhbWUgPSB0cnVlOwotICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGFjdGl2ZUFuaW1h
dGlvbnMgPSBhbmltYXRpb25zLmdldEFjdGl2ZUFuaW1hdGlvbnMoKTsKLSNpZiBFTkFCTEUoQ1NT
X1NIQURFUlMpCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhY3RpdmVBbmltYXRpb25zLmFu
aW1hdGlvbnMoKS5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVlTGlz
dCYga2V5ZnJhbWVzID0gYW5pbWF0aW9ucy5hbmltYXRpb25zKCkuYXQoaSkua2V5ZnJhbWVzKCk7
Ci0gICAgICAgIGlmIChrZXlmcmFtZXMucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5V2Vi
a2l0RmlsdGVyKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZvciAoc2l6ZV90IGog
PSAwOyBqIDwga2V5ZnJhbWVzLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICBjb25zdCBGaWx0
ZXJBbmltYXRpb25WYWx1ZSogZmlsdGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJB
bmltYXRpb25WYWx1ZSo+KGtleWZyYW1lcy5hdChpKSk7Ci0gICAgICAgICAgICBjaGVja0N1c3Rv
bUZpbHRlclByb2dyYW1Qcm94aWVzKCpmaWx0ZXJWYWx1ZS0+dmFsdWUoKSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0jZW5kaWYKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk6OlNldExheWVyQW5pbWF0aW9ucyhsYXllcklELCBhY3RpdmVBbmltYXRp
b25zKSk7Ci19Ci0KIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFZpc2libGVDb250ZW50
c1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQm
IHRyYWplY3RvcnlWZWN0b3IpCiB7Ci0gICAgYm9vbCBjb250ZW50c1JlY3REaWRDaGFuZ2UgPSBy
ZWN0ICE9IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKLSAgICBib29sIGNvbnRlbnRzU2NhbGVEaWRD
aGFuZ2UgPSBzY2FsZSAhPSBtX2NvbnRlbnRzU2NhbGU7Ci0KLSAgICAvLyBBIHplcm8gdHJhamVj
dG9yeVZlY3RvciBpbmRpY2F0ZXMgdGhhdCB0aWxlcyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9ydCBh
cmUgcmVxdWVzdGVkLgotICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fbm9uQ29tcG9z
aXRlZENvbnRlbnRMYXllci5nZXQoKSktPnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlW
ZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7CisgICAgbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yLT5z
ZXRWaXNpYmxlQ29udGVudHNSZWN0KHJlY3QsIHNjYWxlLCB0cmFqZWN0b3J5VmVjdG9yKTsKIAot
ICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFuZ2UgfHwgY29udGVudHNTY2FsZURpZENoYW5nZSkg
ewotICAgICAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0OwotICAgICAgICBtX2NvbnRl
bnRzU2NhbGUgPSBzY2FsZTsKLQotICAgICAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7
Ci0gICAgICAgIGZvciAoSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIq
Pjo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgICAgICBpZiAoY29udGVudHNTY2FsZURpZENoYW5nZSkKLSAgICAgICAg
ICAgICAgICAoKml0KS0+c2V0Q29udGVudHNTY2FsZShzY2FsZSk7Ci0gICAgICAgICAgICBpZiAo
Y29udGVudHNSZWN0RGlkQ2hhbmdlKQotICAgICAgICAgICAgICAgICgqaXQpLT5hZGp1c3RWaXNp
YmxlUmVjdCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7
CiAgICAgaWYgKG1fd2ViUGFnZS0+dXNlRml4ZWRMYXlvdXQoKSkKICAgICAgICAgbV93ZWJQYWdl
LT5zZXRGaXhlZFZpc2libGVDb250ZW50UmVjdChyZWN0KTsKLSAgICBpZiAoY29udGVudHNSZWN0
RGlkQ2hhbmdlKQotICAgICAgICBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSA9IHRy
dWU7CiB9CiAKIEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBMYXllclRyZWVDb29yZGluYXRvcjo6Z3Jh
cGhpY3NMYXllckZhY3RvcnkoKQogewotICAgIHJldHVybiB0aGlzOworICAgIHJldHVybiBtX2Nv
bXBvc2l0aW5nQ29vcmRpbmF0b3IuZ2V0KCk7CiB9CiAKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklN
QVRJT05fRlJBTUUpCiB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzY2hlZHVsZUFuaW1hdGlv
bigpCiB7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRv
clByb3h5OjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSk7CisgICAgbV9jb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yTWVzc2FnZUNsaWVudC0+cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk7CiB9CiAKIHZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmFuaW1hdGlvbkZyYW1lUmVhZHkoKQpAQCAtNzQyLDg0ICsy
MjEsMTcgQEAgdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6YW5pbWF0aW9uRnJhbWVSZWFkeSgp
CiAKIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbmRlck5leHRGcmFtZSgpCiB7Ci0gICAg
bV93YWl0aW5nRm9yVUlQcm9jZXNzID0gZmFsc2U7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsr
aSkKLSAgICAgICAgbV91cGRhdGVBdGxhc2VzW2ldLT5kaWRTd2FwQnVmZmVycygpOwotfQotCi1i
b29sIExheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBj
b25zdAotewotICAgIHJldHVybiAhbV9pc1N1c3BlbmRlZCAmJiAhbV93YWl0aW5nRm9yVUlQcm9j
ZXNzOworICAgIG1fY29tcG9zaXRpbmdDb29yZGluYXRvci0+cmVuZGVyTmV4dEZyYW1lKCk7CiB9
CiAKIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnB1cmdlQmFja2luZ1N0b3JlcygpCiB7Ci0g
ICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IHB1cmdpbmdUb2dnbGUobV9pc1B1cmdpbmcsIHRydWUp
OwotCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRl
cmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lz
dGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+cHVy
Z2VCYWNraW5nU3RvcmVzKCk7Ci0KLSAgICBtX2ltYWdlQmFja2luZ3MuY2xlYXIoKTsKLSAgICBt
X3VwZGF0ZUF0bGFzZXMuY2xlYXIoKTsKLX0KLQotUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ+IExheWVyVHJlZUNvb3JkaW5hdG9yOjpiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBmbGFncywgaW50
JiBhdGxhc0lELCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KQotewotICAgIE93blB0cjxXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dDsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV91cGRhdGVBdGxhc2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFVwZGF0
ZUF0bGFzKiBhdGxhcyA9IG1fdXBkYXRlQXRsYXNlc1tpXS5nZXQoKTsKLSAgICAgICAgaWYgKGF0
bGFzLT5mbGFncygpID09IGZsYWdzKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIHdpbGwgcmV0dXJu
IG51bGwgaWYgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIGJ1ZmZlciBzcGFjZS4KLSAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dCA9IGF0bGFzLT5iZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIo
YXRsYXNJRCwgc2l6ZSwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChncmFwaGljc0NvbnRleHQp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4dC5yZWxlYXNlKCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50IFNjcmF0Y2hCdWZmZXJEaW1lbnNp
b24gPSAxMDI0OyAvLyBTaG91bGQgYmUgYSBwb3dlciBvZiB0d28uCi0gICAgbV91cGRhdGVBdGxh
c2VzLmFwcGVuZChhZG9wdFB0cihuZXcgVXBkYXRlQXRsYXModGhpcywgU2NyYXRjaEJ1ZmZlckRp
bWVuc2lvbiwgZmxhZ3MpKSk7Ci0gICAgc2NoZWR1bGVSZWxlYXNlSW5hY3RpdmVBdGxhc2VzKCk7
Ci0gICAgcmV0dXJuIG1fdXBkYXRlQXRsYXNlcy5sYXN0KCktPmJlZ2luUGFpbnRpbmdPbkF2YWls
YWJsZUJ1ZmZlcihhdGxhc0lELCBzaXplLCBvZmZzZXQpOwotfQotCi1jb25zdCBkb3VibGUgUmVs
ZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2YWwgPSAwLjU7Ci0KLXZvaWQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OnNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpCi17Ci0gICAgaWYg
KCFtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3Jl
bGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5zdGFydFJlcGVhdGluZyhSZWxlYXNlSW5hY3RpdmVB
dGxhc2VzVGltZXJJbnRlcnZhbCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJl
bGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKFRpbWVyPExheWVyVHJlZUNvb3JkaW5hdG9y
PiopCi17Ci0gICAgLy8gV2UgYWx3YXlzIHdhbnQgdG8ga2VlcCBvbmUgYXRsYXMgZm9yIG5vbi1j
b21wb3NpdGVkIGNvbnRlbnQuCi0gICAgT3duUHRyPFVwZGF0ZUF0bGFzPiBhdGxhc1RvS2VlcEFu
eXdheTsKLSAgICBib29sIGZvdW5kQWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVudCA9
IGZhbHNlOwotICAgIGZvciAoaW50IGkgPSBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpIC0gMTsgIGkg
Pj0gMDsgLS1pKSB7Ci0gICAgICAgIFVwZGF0ZUF0bGFzKiBhdGxhcyA9IG1fdXBkYXRlQXRsYXNl
c1tpXS5nZXQoKTsKLSAgICAgICAgaWYgKCFhdGxhcy0+aXNJblVzZSgpKQotICAgICAgICAgICAg
YXRsYXMtPmFkZFRpbWVJbmFjdGl2ZShSZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJJbnRlcnZh
bCk7Ci0gICAgICAgIGJvb2wgdXNhYmxlRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgPSBhdGxhcy0+
ZmxhZ3MoKSA9PSBTaGFyZWFibGVCaXRtYXA6Ok5vRmxhZ3M7Ci0gICAgICAgIGlmIChhdGxhcy0+
aXNJbmFjdGl2ZSgpKSB7Ci0gICAgICAgICAgICBpZiAoIWZvdW5kQWN0aXZlQXRsYXNGb3JOb25D
b21wb3NpdGVkQ29udGVudCAmJiAhYXRsYXNUb0tlZXBBbnl3YXkgJiYgdXNhYmxlRm9yTm9uQ29t
cG9zaXRlZENvbnRlbnQpCi0gICAgICAgICAgICAgICAgYXRsYXNUb0tlZXBBbnl3YXkgPSBtX3Vw
ZGF0ZUF0bGFzZXNbaV0ucmVsZWFzZSgpOwotICAgICAgICAgICAgbV91cGRhdGVBdGxhc2VzLnJl
bW92ZShpKTsKLSAgICAgICAgfSBlbHNlIGlmICh1c2FibGVGb3JOb25Db21wb3NpdGVkQ29udGVu
dCkKLSAgICAgICAgICAgIGZvdW5kQWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVudCA9
IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRl
ZENvbnRlbnQgJiYgYXRsYXNUb0tlZXBBbnl3YXkpCi0gICAgICAgIG1fdXBkYXRlQXRsYXNlcy5h
cHBlbmQoYXRsYXNUb0tlZXBBbnl3YXkucmVsZWFzZSgpKTsKLQotICAgIGlmIChtX3VwZGF0ZUF0
bGFzZXMuc2l6ZSgpIDw9IDEpCi0gICAgICAgIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVy
LnN0b3AoKTsKKyAgICBtX2NvbXBvc2l0aW5nQ29vcmRpbmF0b3ItPnB1cmdlQmFja2luZ1N0b3Jl
cygpOwogfQogCiB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRCYWNrZ3JvdW5kQ29sb3Io
Y29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQogewotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0QmFja2dyb3VuZENvbG9yKGNvbG9y
KSk7CisgICAgbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudC0+c2V0QmFja2dy
b3VuZENvbG9yKGNvbG9yKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVDb29yZGluYXRvci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaAppbmRleCAyNjhhOGE5
MWMyNGQyNmYzYzJlOWU5NzJkOGI1ZTc0ZTkyN2Y0ODVmLi5lODg0YzAyNzk1ZDFmMTZiMzY3ZWEw
OTE0MmI1ZGI3ZTlmOTdiN2VhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAo
QykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMzggKzIzLDI4IEBACiAKICNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCiAKLSNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
aCIKLSNpbmNsdWRlICJDb29yZGluYXRlZEltYWdlQmFja2luZy5oIgorI2luY2x1ZGUgIkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCiAjaW5j
bHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAiVXBk
YXRlQXRsYXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJGYWN0b3J5Lmg+CisjaW5jbHVkZSAiV2ViQ29t
cG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQot
I2luY2x1ZGUgIldlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS5oIgotI2VuZGlmCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CitjbGFzcyBHcmFwaGljc0xheWVyRmFjdG9yeTsKK30KIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKIGNsYXNzIFVwZGF0ZUluZm87CiBjbGFzcyBXZWJQYWdlOwogCi1jbGFzcyBM
YXllclRyZWVDb29yZGluYXRvciA6IHB1YmxpYyBMYXllclRyZWVIb3N0LCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ2xpZW50Ci0gICAgLCBwdWJsaWMgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xp
ZW50Ci0gICAgLCBwdWJsaWMgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5hdG9yCi0g
ICAgLCBwdWJsaWMgVXBkYXRlQXRsYXNDbGllbnQKLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpHcmFw
aGljc0xheWVyRmFjdG9yeQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICAsIFdlYkN1c3Rv
bUZpbHRlclByb2dyYW1Qcm94eUNsaWVudAotI2VuZGlmCi17CitjbGFzcyBMYXllclRyZWVDb29y
ZGluYXRvciA6IHB1YmxpYyBMYXllclRyZWVIb3N0LCBwdWJsaWMgQ29tcG9zaXRpbmdDb29yZGlu
YXRvckNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJUcmVlQ29v
cmRpbmF0b3I+IGNyZWF0ZShXZWJQYWdlKik7CiAgICAgdmlydHVhbCB+TGF5ZXJUcmVlQ29vcmRp
bmF0b3IoKTsKIAorICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gTGF5ZXJUcmVlSG9zdAog
ICAgIHZpcnR1YWwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCgpIHsg
cmV0dXJuIG1fbGF5ZXJUcmVlQ29udGV4dDsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckZs
dXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlTGF5
ZXJGbHVzaCgpOwpAQCAtNzMsMTMyICs2NCw0MyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHNldFBhZ2VPdmVybGF5T3BhY2l0eShmbG9hdCk7CiAgICAgdmlydHVhbCBib29sIHBhZ2VPdmVy
bGF5U2hvdWxkQXBwbHlGYWRlV2hlblBhaW50aW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
IAotICAgIHZpcnR1YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IHRy
dWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVk
ID0gZmFsc2U7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHBhdXNl
UmVuZGVyaW5nKCk7CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZVJlbmRlcmluZygpOwogICAgIHZp
cnR1YWwgdm9pZCBkZXZpY2VTY2FsZUZhY3RvckRpZENoYW5nZSgpIHsgfQotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZO
ZWVkZWQoV2ViQ29yZTo6SW1hZ2UqKSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgdm9pZCBjcmVh
dGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNl
VXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3Vy
ZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2
b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQpOwotICAg
IHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7CiAg
ICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpOwogICAgIHZpcnR1YWwgdm9pZCBwdXJn
ZUJhY2tpbmdTdG9yZXMoKTsKLSAgICB2aXJ0dWFsIGJvb2wgbGF5ZXJUcmVlVGlsZVVwZGF0ZXNB
bGxvd2VkKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3Qo
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGZsb2F0IHNjYWxlLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRv
ck1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQ
Qzo6TWVzc2FnZURlY29kZXImKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJG
YWN0b3J5KiBncmFwaGljc0xheWVyRmFjdG9yeSgpIE9WRVJSSURFOwotCi0gICAgdmlydHVhbCB2
b2lkIHN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRM
YXllckluZm8mKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0
ZWRMYXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykK
LSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmlsdGVycyhDb29yZGluYXRlZExheWVySUQsIGNv
bnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKLSNlbmRpZgotI2lmIFVTRShHUkFQSElD
U19TVVJGQUNFKQotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXll
cklELCBXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lk
IHN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKikg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXll
cklEKSBPVkVSUklERTsKLSNlbmRpZgotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0Zp
eGVkTGF5ZXJzKCk7Ci0KLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNoYXJl
YWJsZUJpdG1hcDo6RmxhZ3MsIGludCYgYXRsYXNJRCwgV2ViQ29yZTo6SW50UG9pbnQmKTsKLQot
ICAgIC8vIFVwZGF0ZUF0bGFzQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVVwZGF0ZUF0
bGFzKGludCBhdGxhc0lELCBjb25zdCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQpOwotCiAjaWYgRU5BQkxF
KFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1h
dGlvbigpIE9WRVJSSURFOwogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRD
b2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYpIE9WRVJSSURFOwogCisgICAgLy8gUmVpbXBsZW1l
bnRhdGlvbnMgZnJvbSBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yQ2xpZW50CisgICAgdmlydHVhbCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiB2aWV3U2l6ZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBkaWRQZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaChib29sIGRpZFN5bmMpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBpc09wYXF1ZUNvbnRlbnRzKCkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIGxheW91dElmTmVlZGVkKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHBhaW50Q29udGVudHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgY2xpcFJlY3QpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwYWludE92
ZXJsYXlDb250ZW50cyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBjbGlwUmVjdCkgT1ZFUlJJREU7CisKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBM
YXllclRyZWVDb29yZGluYXRvcihXZWJQYWdlKik7CiAKIHByaXZhdGU6Ci0gICAgLy8gR3JhcGhp
Y3NMYXllckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSk7Ci0gICAgdmlydHVhbCB2
b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwot
ICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFp
bnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOwotCi0gICAgLy8g
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5hdG9yCi0gICAgdmlydHVhbCB2b2lkIGNy
ZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQsIGNvbnN0IFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYpIE9WRVJSSURFOwotICAgIHZpcnR1
YWwgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7Ci0KLSAgICB2b2lkIGZsdXNoUGVuZGluZ0lt
YWdlQmFja2luZ0NoYW5nZXMoKTsKLQotICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5Ci0gICAg
dmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdyYXBoaWNz
TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCopIE9WRVJSSURFOwotCi0gICAgLy8g
TGF5ZXJUcmVlQ29vcmRpbmF0b3IKLSAgICB2b2lkIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsK
LSAgICB2b2lkIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7Ci0gICAgYm9vbCBmbHVzaFBlbmRp
bmdMYXllckNoYW5nZXMoKTsKLSAgICB2b2lkIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7Ci0g
ICAgdm9pZCBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOwotICAgIHZvaWQgZGlkUGVyZm9y
bVNjaGVkdWxlZExheWVyRmx1c2goKTsKLSAgICB2b2lkIHN5bmNEaXNwbGF5U3RhdGUoKTsKLSAg
ICB2b2lkIGxvY2tBbmltYXRpb25zKCk7Ci0gICAgdm9pZCB1bmxvY2tBbmltYXRpb25zKCk7Ci0K
LSAgICB2b2lkIGxheWVyRmx1c2hUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPExheWVyVHJlZUNv
b3JkaW5hdG9yPiopOwotCi0gICAgdm9pZCBzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMo
KTsKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiAgICAgdm9pZCBhbmltYXRp
b25GcmFtZVJlYWR5KCk7CiAjZW5kaWYKIAotICAgIHZvaWQgcmVsZWFzZUluYWN0aXZlQXRsYXNl
c1RpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+Kik7Ci0KLSNp
ZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgLy8gV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5
Q2xpZW50Ci0gICAgdm9pZCByZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkoV2ViQ3VzdG9t
RmlsdGVyUHJvZ3JhbVByb3h5Kik7Ci0KLSAgICB2b2lkIGNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3Jh
bVByb3hpZXMoY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpOwotICAgIHZvaWQgZGlz
Y29ubmVjdEN1c3RvbUZpbHRlclByb2dyYW1zKCk7Ci0jZW5kaWYKLQotICAgIE93blB0cjxXZWJD
b3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKLQotICAgIC8vIFRoZSBsYXllciB3aGlj
aCBjb250YWlucyBhbGwgbm9uLWNvbXBvc2l0ZWQgY29udGVudC4KLSAgICBPd25QdHI8V2ViQ29y
ZTo6R3JhcGhpY3NMYXllcj4gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyOwotCi0gICAgLy8g
VGhlIHBhZ2Ugb3ZlcmxheSBsYXllci4gV2lsbCBiZSBudWxsIGlmIHRoZXJlJ3Mgbm8gcGFnZSBv
dmVybGF5LgotICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3BhZ2VPdmVybGF5
TGF5ZXI7Ci0KLSAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+
IG1fcmVnaXN0ZXJlZExheWVyczsKLSAgICBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiBtX2Rl
dGFjaGVkTGF5ZXJzOwotICAgIHR5cGVkZWYgSGFzaE1hcDxDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lELCBSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+ID4gSW1hZ2VCYWNraW5nTWFwOwot
ICAgIEltYWdlQmFja2luZ01hcCBtX2ltYWdlQmFja2luZ3M7Ci0gICAgVmVjdG9yPE93blB0cjxV
cGRhdGVBdGxhcz4gPiBtX3VwZGF0ZUF0bGFzZXM7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMp
Ci0gICAgSGFzaFNldDxXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkqPiBtX2N1c3RvbUZpbHRl
clByb2dyYW1zOwotI2VuZGlmCisgICAgUmVmUHRyPFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JN
ZXNzYWdlQ2xpZW50PiBtX2NvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OworICAg
IE93blB0cjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiBtX2NvbXBvc2l0aW5nQ29vcmRpbmF0b3I7
CiAKICAgICBib29sIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOwotICAgIGJvb2wg
bV9pc1ZhbGlkOwotICAgIC8vIFdlIGRvbid0IHNlbmQgdGhlIG1lc3NhZ2VzIHJlbGF0ZWQgdG8g
cmVsZWFzaW5nIHJlc291cmNlcyB0byBVSSBQcm9jZXNzIGR1cmluZyBwdXJnaW5nLCBiZWNhdXNl
IFVJIFByb2Nlc3MgYWxyZWFkeSBoYWQgcmVtb3ZlZCBhbGwgcmVzb3VyY2VzLgotICAgIGJvb2wg
bV9pc1B1cmdpbmc7Ci0KLSAgICBib29sIG1fd2FpdGluZ0ZvclVJUHJvY2VzczsKLSAgICBib29s
IG1faXNTdXNwZW5kZWQ7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBtX3Zpc2libGVDb250ZW50c1Jl
Y3Q7Ci0gICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOwotICAgIGJvb2wgbV9zaG91bGRTZW5kU2Ny
b2xsUG9zaXRpb25VcGRhdGU7CiAKICAgICBMYXllclRyZWVDb250ZXh0IG1fbGF5ZXJUcmVlQ29u
dGV4dDsKLSAgICBib29sIG1fc2hvdWxkU3luY0ZyYW1lOwotICAgIGJvb2wgbV9zaG91bGRTeW5j
Um9vdExheWVyOwotICAgIFdlYkNvcmU6OlRpbWVyPExheWVyVHJlZUNvb3JkaW5hdG9yPiBtX2xh
eWVyRmx1c2hUaW1lcjsKLSAgICBXZWJDb3JlOjpUaW1lcjxMYXllclRyZWVDb29yZGluYXRvcj4g
bV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXI7Ci0gICAgYm9vbCBtX2xheWVyRmx1c2hTY2hl
ZHVsaW5nRW5hYmxlZDsKICAgICB1aW50NjRfdCBtX2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJ
RDsKLSAgICBib29sIG1fYW5pbWF0aW9uc0xvY2tlZDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNv
bXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3JNZXNzYWdlQ2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZjljY2FlYmFiYTBlNWRiMjM5YjFk
MzA1YmQxNzQyNTg5N2IzNDhiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29tcG9zaXRpbmdDb29yZGlu
YXRvck1lc3NhZ2VDbGllbnQuY3BwCkBAIC0wLDAgKzEsMjYzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4K
KyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2Fn
ZUNsaWVudC5oIgorCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJz
LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2VzLmgiCisjaW5j
bHVkZSAiTWVzc2FnZUlELmgiCisjaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKKyNpbmNs
dWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5j
bHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykK
KyNpbmNsdWRlICJDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmgiCisjaW5jbHVkZSAiVmFs
aWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgiCisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzUmVmUHRyPFdlYkNvbXBvc2l0
aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50PiBXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVz
c2FnZUNsaWVudDo6Y3JlYXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudCh3ZWJQYWdlKSk7
Cit9CisKK1dlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50Ojp+V2ViQ29tcG9z
aXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQoKQoreworI2lmIEVOQUJMRShDU1NfU0hBREVS
UykKKyAgICBkaXNjb25uZWN0Q3VzdG9tRmlsdGVyUHJvZ3JhbXMoKTsKKyNlbmRpZgorfQorCitX
ZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6V2ViQ29tcG9zaXRpbmdDb29y
ZGluYXRvck1lc3NhZ2VDbGllbnQoV2ViUGFnZSogd2ViUGFnZSkKKyAgICA6IG1fd2ViUGFnZSh3
ZWJQYWdlKQoreworCit9CisKK3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VD
bGllbnQ6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKK3sK
KyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6
OlNldFJvb3RDb21wb3NpdGluZ0xheWVyKGlkKSk7Cit9CisKK3ZvaWQgV2ViQ29tcG9zaXRpbmdD
b29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OnNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShDb29yZGlu
YXRlZExheWVySUQgaWQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBpbmZvKQoreworICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0
Q29tcG9zaXRpbmdMYXllclN0YXRlKGlkLCBpbmZvKSk7Cit9CisKK3ZvaWQgV2ViQ29tcG9zaXRp
bmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OnNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihD
b29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBj
aGlsZHJlbikKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihpZCwgY2hpbGRyZW4pKTsK
K30KKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29yZGlu
YXRvck1lc3NhZ2VDbGllbnQ6OnNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVk
TGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3sKKyNpZiBFTkFC
TEUoQ1NTX1NIQURFUlMpCisgICAgY2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhmaWx0
ZXJzKTsKKyNlbmRpZgorICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoaWQsIGZpbHRlcnMpKTsK
K30KKyNlbmRpZgorCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50
OjpkZWxldGVDb21wb3NpdGluZ0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKK3sKKyAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkRlbGV0
ZUNvbXBvc2l0aW5nTGF5ZXIoaWQpKTsKK30KKwordm9pZCBXZWJDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yTWVzc2FnZUNsaWVudDo6Y3JlYXRlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBs
YXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBT
dXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVz
c2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkNyZWF0ZVRpbGVGb3JMYXllcihsYXll
cklELCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKSk7Cit9CisKK3ZvaWQgV2ViQ29tcG9z
aXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OnVwZGF0ZVRpbGVGb3JMYXllcihDb29yZGlu
YXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpVcGRhdGVUaWxl
Rm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbykpOworfQorCit2
b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpyZW1vdmVUaWxlRm9y
TGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCkKK3sKKyAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlJl
bW92ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQpKTsKK30KKwordm9pZCBXZWJDb21wb3Np
dGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6Y3JlYXRlVXBkYXRlQXRsYXMoaW50IGF0bGFz
SUQsIGNvbnN0IFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlKQoreworICAgIG1fd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Q3JlYXRlVXBk
YXRlQXRsYXMoYXRsYXNJRCwgaGFuZGxlKSk7Cit9CisKK3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29y
ZGluYXRvck1lc3NhZ2VDbGllbnQ6OnJlbW92ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lEKQorewor
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
UmVtb3ZlVXBkYXRlQXRsYXMoYXRsYXNJRCkpOworfQorCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCBpbWFnZUlEKQoreworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Q3JlYXRlSW1hZ2VCYWNraW5nKGltYWdlSUQpKTsKK30K
Kwordm9pZCBXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6dXBkYXRlSW1h
Z2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwgY29uc3QgU2hhcmVh
YmxlU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpVcGRhdGVJbWFnZUJhY2tpbmcoaW1hZ2VJ
RCwgaGFuZGxlKSk7Cit9CisKK3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VD
bGllbnQ6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCBpbWFnZUlEKQoreworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eTo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhpbWFnZUlEKSk7Cit9CisK
K3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OnJlbW92ZUltYWdl
QmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpSZW1vdmVJbWFn
ZUJhY2tpbmcoaW1hZ2VJRCkpOworfQorCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JN
ZXNzYWdlQ2xpZW50OjpkaWRSZW5kZXJGcmFtZShjb25zdCBJbnRTaXplJiBjb250ZW50c1NpemUs
IGNvbnN0IEludFJlY3QmIGNvdmVyZWRSZWN0KQoreworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6RGlkUmVuZGVyRnJhbWUoY29udGVudHNT
aXplLCBjb3ZlcmVkUmVjdCkpOworfQorCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JN
ZXNzYWdlQ2xpZW50OjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgcG9z
aXRpb24pCit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGlu
YXRvclByb3h5OjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihwb3NpdGlvbikpOworfQorCisjaWYg
VVNFKEdSQVBISUNTX1NVUkZBQ0UpCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNz
YWdlQ2xpZW50OjpjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBJbnRT
aXplJiBjYW52YXNTaXplLCBjb25zdCBHcmFwaGljc1N1cmZhY2VUb2tlbiYgdG9rZW4pCit7Cisg
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpD
cmVhdGVDYW52YXMoaWQsIGNhbnZhc1NpemUsIHRva2VuKSk7Cit9CisKK3ZvaWQgV2ViQ29tcG9z
aXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OnN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXll
cklEIGlkLCB1aW50MzJfdCBmcm9udEJ1ZmZlcikKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVz
c2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlN5bmNDYW52YXMoaWQsIGZyb250QnVm
ZmVyKSk7Cit9CisKK3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6
OmRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQoreworICAgIG1fd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6RGVzdHJveUNhbnZhcyhp
ZCkpOworfQorI2VuZGlmCisKK3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VD
bGllbnQ6OnNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgY29u
c3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFjdGl2ZUFuaW1hdGlvbnMpCit7CisjaWYgRU5B
QkxFKENTU19TSEFERVJTKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWN0aXZlQW5pbWF0
aW9ucy5hbmltYXRpb25zKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgS2V5ZnJhbWVW
YWx1ZUxpc3QmIGtleWZyYW1lcyA9IGFjdGl2ZUFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLmF0KGkp
LmtleWZyYW1lcygpOworICAgICAgICBpZiAoa2V5ZnJhbWVzLnByb3BlcnR5KCkgIT0gQW5pbWF0
ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBm
b3IgKHNpemVfdCBqID0gMDsgaiA8IGtleWZyYW1lcy5zaXplKCk7ICsraikgeworICAgICAgICAg
ICAgY29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUqIGZpbHRlclZhbHVlID0gc3RhdGljX2Nhc3Q8
Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUqPihrZXlmcmFtZXMuYXQoaSkpOworICAgICAgICAg
ICAgY2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcygqZmlsdGVyVmFsdWUtPnZhbHVlKCkp
OworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldExheWVyQW5pbWF0aW9ucyhsYXllcklE
LCBhY3RpdmVBbmltYXRpb25zKSk7Cit9CisKK3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRv
ck1lc3NhZ2VDbGllbnQ6OnNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCBpc0xvY2tlZCkKK3sKKyAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNl
dEFuaW1hdGlvbnNMb2NrZWQoaXNMb2NrZWQpKTsKK30KKwordm9pZCBXZWJDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6
OkNvbG9yJiBjb2xvcikKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHk6OlNldEJhY2tncm91bmRDb2xvcihjb2xvcikpOworfQorCisjaWYg
RU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQordm9pZCBXZWJDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yTWVzc2FnZUNsaWVudDo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkKK3sKKyAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlJlcXVlc3RB
bmltYXRpb25GcmFtZSgpKTsKK30KKyNlbmRpZgorCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3JNZXNzYWdlQ2xpZW50OjppbnZva2VGb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrKHVpbnQ2
NF90IGNhbGxiYWNrSUQpCit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlZvaWRDYWxsYmFjayhjYWxsYmFja0lEKSk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX1NI
QURFUlMpCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpjaGVj
a0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRl
cnMpCit7CisgICAgLy8gV2UgbmVlZCB0byBjcmVhdGUgdGhlIFdlYkN1c3RvbUZpbHRlclByb2dy
YW1Qcm94eSBvYmplY3RzIGJlZm9yZSB3ZSBnZXQgdG8gc2VyaWFsaXplIHRoZQorICAgIC8vIGN1
c3RvbSBmaWx0ZXJzIHRvIHRoZSBvdGhlciBwcm9jZXNzLiBUaGF0J3MgYmVjYXVzZSBXZWJDdXN0
b21GaWx0ZXJQcm9ncmFtUHJveHkgbmVlZHMKKyAgICAvLyB0byBsaW5rIGJhY2sgdG8gdGhlIGNv
b3JkaW5hdG9yLCBzbyB0aGF0IHdlIGNhbiBzZW5kIGEgbWVzc2FnZSB0byB0aGUgVUkgcHJvY2Vz
cyB3aGVuCisgICAgLy8gdGhlIHByb2dyYW0gaXMgbm90IG5lZWRlZCBhbnltb3JlLgorICAgIC8v
IE5vdGUgdGhhdCB0aGUgc2VyaWFsaXphdGlvbiB3aWxsIG9ubHkgaGFwcGVuIGF0IGEgbGF0ZXIg
dGltZSBpbiBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM+OjplbmNvZGUu
CisgICAgLy8gQXQgdGhhdCBwb2ludCB0aGUgcHJvZ3JhbSB3aWxsIG9ubHkgYmUgc2VyaWFsaXpl
ZCBvbmNlLiBBbGwgdGhlIG90aGVyIHRpbWVzIGl0IHdpbGwgb25seSB1c2UgdGhlIElEIG9mIHRo
ZSBwcm9ncmFtLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsdGVycy5zaXplKCk7ICsr
aSkgeworICAgICAgICBjb25zdCBGaWx0ZXJPcGVyYXRpb24qIG9wZXJhdGlvbiA9IGZpbHRlcnMu
YXQoaSk7CisgICAgICAgIGlmIChvcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSAhPSBGaWx0
ZXJPcGVyYXRpb246OlZBTElEQVRFRF9DVVNUT00pCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgY29uc3QgVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKiBjdXN0b21PcGVyYXRp
b24gPSBzdGF0aWNfY2FzdDxjb25zdCBWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24qPihv
cGVyYXRpb24pOworICAgICAgICBBU1NFUlQoY3VzdG9tT3BlcmF0aW9uLT52YWxpZGF0ZWRQcm9n
cmFtKCktPmlzSW5pdGlhbGl6ZWQoKSk7CisgICAgICAgIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUNv
bXBpbGVkUHJvZ3JhbSogcHJvZ3JhbSA9IGN1c3RvbU9wZXJhdGlvbi0+dmFsaWRhdGVkUHJvZ3Jh
bSgpLT5wbGF0Zm9ybUNvbXBpbGVkUHJvZ3JhbSgpOworCisgICAgICAgIFJlZlB0cjxXZWJDdXN0
b21GaWx0ZXJQcm9ncmFtUHJveHk+IGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eTsKKyAgICAgICAg
aWYgKHByb2dyYW0tPmNsaWVudCgpKQorICAgICAgICAgICAgY3VzdG9tRmlsdGVyUHJvZ3JhbVBy
b3h5ID0gc3RhdGljX2Nhc3Q8V2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5Kj4ocHJvZ3JhbS0+
Y2xpZW50KCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGN1c3RvbUZpbHRlclByb2dy
YW1Qcm94eSA9IFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eTo6Y3JlYXRlKCk7CisgICAgICAg
ICAgICBwcm9ncmFtLT5zZXRDbGllbnQoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICghY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5jbGllbnQoKSkg
eworICAgICAgICAgICAgY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5zZXRDbGllbnQodGhpcyk7
CisgICAgICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oY3VzdG9tRmlsdGVyUHJvZ3JhbVBy
b3h5LT5pZCgpLCBjdXN0b21PcGVyYXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKS0+dmFsaWRhdGVk
UHJvZ3JhbUluZm8oKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gSWYgdGhl
IGNsaWVudCB3YXMgbm90IGRpc2Nvbm5lY3RlZCB0aGVuIHRoaXMgY29vcmRpbmF0b3IgbXVzdCBi
ZSB0aGUgY2xpZW50IGZvciBpdC4KKyAgICAgICAgICAgIEFTU0VSVChjdXN0b21GaWx0ZXJQcm9n
cmFtUHJveHktPmNsaWVudCgpID09IHRoaXMpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lk
IFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpyZW1vdmVDdXN0b21GaWx0
ZXJQcm9ncmFtUHJveHkoV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KiBjdXN0b21GaWx0ZXJQ
cm9ncmFtUHJveHkpCit7CisgICAgLy8gQXQgdGhpcyB0aW1lIHRoZSBzaGFkZXIgaXMgbm90IG5l
ZWRlZCBhbnltb3JlLCBzbyB3ZSByZW1vdmUgaXQgZnJvbSBvdXIgc2V0IGFuZAorICAgIC8vIHNl
bmQgYSBtZXNzYWdlIHRvIHRoZSBvdGhlciBwcm9jZXNzIHRvIGRlbGV0ZSBpdC4KKyAgICBtX2N1
c3RvbUZpbHRlclByb2dyYW1zLnJlbW92ZShjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkpOworICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6UmVt
b3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmlkKCkpKTsK
K30KKwordm9pZCBXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6ZGlzY29u
bmVjdEN1c3RvbUZpbHRlclByb2dyYW1zKCkKK3sKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCBXZWJD
b3JlIHdpbGwgbm90IGNhbGwgaW50byB0aGlzIGNvb3JkaW5hdG9yIGFueW1vcmUuCisgICAgSGFz
aFNldDxXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkqPjo6aXRlcmF0b3IgaXRlciA9IG1fY3Vz
dG9tRmlsdGVyUHJvZ3JhbXMuYmVnaW4oKTsKKyAgICBmb3IgKDsgaXRlciAhPSBtX2N1c3RvbUZp
bHRlclByb2dyYW1zLmVuZCgpOyArK2l0ZXIpCisgICAgICAgICgqaXRlciktPnNldENsaWVudCgw
KTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JN
ZXNzYWdlQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9XZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmJlMjE1MzNjZjE0MWU4MjQ5MzUxNmZhMjViM2FjOGJhYTIyY2NjOTAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9XZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudC5oCkBAIC0w
LDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21w
YW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdl
YkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50X2gKKyNkZWZpbmUgV2ViQ29tcG9z
aXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnRfaAorCisjaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQorCisjaW5jbHVkZSAiQ29tcG9zaXRpbmdDb29yZGluYXRvckNsaWVudC5oIgorCisj
aWYgRU5BQkxFKENTU19TSEFERVJTKQorI2luY2x1ZGUgIldlYkN1c3RvbUZpbHRlclByb2dyYW1Q
cm94eS5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlOwor
CitjbGFzcyBXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudCA6IHB1YmxpYyBS
ZWZDb3VudGVkPFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50PgorICAgICwg
cHVibGljIENvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50CisjaWYgRU5BQkxFKENT
U19TSEFERVJTKQorICAgICwgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5Q2xpZW50CisjZW5k
aWYKK3sKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
TWVzc2FnZUNsaWVudCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50PiBj
cmVhdGUoV2ViUGFnZSopOworCisgICAgfldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdl
Q2xpZW50KCk7CisKKyAgICAvLyBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudAor
ICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihDb29yZGluYXRlZExheWVy
SUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUo
Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0
ZWRMYXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpIE9WRVJSSURFOwor
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29tcG9zaXRpbmdM
YXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVy
YXRpb25zJikgT1ZFUlJJREU7CisjZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQ29tcG9z
aXRpbmdMYXllcihDb29yZGluYXRlZExheWVySUQpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2
b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJ
RCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExh
eWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFN1
cmZhY2VVcGRhdGVJbmZvJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGVG
b3JMYXllcihDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCkgT1ZFUlJJREU7CisK
KyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQsIGNvbnN0IFNo
YXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCwgY29uc3QgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9u
KSBPVkVSUklERTsKKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4mKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgc3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IGZyb250
QnVmZmVyKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGlu
YXRlZExheWVySUQpIE9WRVJSSURFOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5
ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NM
YXllckFuaW1hdGlvbnMmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QW5pbWF0aW9u
c0xvY2tlZChib29sKSBPVkVSUklERTsKKworICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNv
bnN0IFdlYkNvcmU6OkNvbG9yJik7CisKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJB
TUUpCisgICAgdm9pZCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTsKKyNlbmRpZgorICAgIHZvaWQg
aW52b2tlRm9yY2VSZXBhaW50QXN5bmNDYWxsYmFjayh1aW50NjRfdCBjYWxsYmFja0lEKTsKKwor
cHJpdmF0ZToKKyAgICBleHBsaWNpdCBXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNs
aWVudChXZWJQYWdlKik7CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgLy8gV2ViQ3Vz
dG9tRmlsdGVyUHJvZ3JhbVByb3h5Q2xpZW50CisgICAgdm9pZCByZW1vdmVDdXN0b21GaWx0ZXJQ
cm9ncmFtUHJveHkoV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5Kik7CisKKyAgICB2b2lkIGNo
ZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0
aW9ucyYgZmlsdGVycykgT1ZFUlJJREU7CisgICAgdm9pZCBkaXNjb25uZWN0Q3VzdG9tRmlsdGVy
UHJvZ3JhbXMoKTsKKyNlbmRpZgorCisgICAgV2ViUGFnZSogbV93ZWJQYWdlOworCisjaWYgRU5B
QkxFKENTU19TSEFERVJTKQorICAgIEhhc2hTZXQ8V2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5
Kj4gbV9jdXN0b21GaWx0ZXJQcm9ncmFtczsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZgorCisjZW5kaWYgLy8gV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1l
c3NhZ2VDbGllbnRfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178339</attachid>
            <date>2012-12-07 22:57:41 -0800</date>
            <delta_ts>2012-12-10 04:10:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104360-20121208155504.patch</filename>
            <type>text/plain</type>
            <size>111021</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3MDE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYzZhNDVhZjg4ODk4OGUz
NzMwYzkwODQxZTg5YjJlZTNmYWNiODU5My4uMTVjM2U5Nzk0ZjQyMWNjMzEzYjRiN2ExYjgzZjY3
YjRkNjNlNWY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3OCBAQAorMjAxMi0xMi0wNyAgR3dh
bmcgWW9vbiBId2FuZyAgPHJ5dW1pZWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgQ29vcmRp
bmF0ZWQgR3JhcGhpY3M6IFNlcGFyZWF0ZSBMYXllclRyZWVDb29yZGluYXRvciBpbnRvIExheWVy
VHJlZUNvb3JkaW5hdG9yIGFuZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQzNjAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgTGF5ZXJUcmVlQ29vcmRpbmF0
b3IgaGFzIHRvbyBtYW55IHJlc3BvbnNpYmlsaXRpZXMuIEl0IGltcGxlbWVudHMKKyAgICAgICAg
TGF5ZXJUcmVlSG9zdCwgR3JhcGhpY3NMYXllckNsaWVudCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyQ2xpZW50LAorICAgICAgICBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0b3Is
IFVwZGF0ZUF0bGFzQ2xpZW50LAorICAgICAgICBHcmFwaGljc0xheWVyRmFjdG9yeSBhbmQgV2Vi
Q3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5Q2xpZW50LgorCisgICAgICAgIFRoaXMgcmVmYWN0b3Jp
bmcgcmVkdWNlcyB0aGUgcmVzcG9uc2liaWxpdGllcyBvZiBMYXllclRyZWVDb29yZGluYXRvci4K
KworICAgICAgICBCeSBjcmVhdGVzIGEgbmV3IGNsYXNzIGNhbGxlZCBDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yLCB3aGljaCB0YWtlcyB0aGUKKyAgICAgICAgcmVzcG9uc2liaWxpdHkgb2Ygc2NoZWR1
bGluZyBjb21wb3NpdGluZyB0YXNrIGluIFdlYlByb2Nlc3MsCisgICAgICAgIExheWVyVHJlZUNv
b3JkaW5hdG9yIGFjdHMgbGlrZSBzaW1wbGUgTGF5ZXJUcmVlSG9zdC4KKworICAgICAgICBCeSBl
eHRyYWN0aW5nIGludGVyZmFjZXMgZGVhbGluZyB3aXRoIExheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHkgdG8KKyAgICAgICAgQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQsIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3IgaXMgZGVjb3VwbGVkCisgICAgICAgIGZyb20gSVBDIGhhbmRsaW5n
LgorCisgICAgICAgIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50IGltcGxl
bWVudHMgSVBDIGhhbmRsaW5nIGZvcgorICAgICAgICBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yIGFu
ZCBMYXllclRyZWVDb29yZGluYXRvci4KKyAgICAgICAgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVBy
b3h5Q2xpZW50IGlzIHN0YW5kcyBmb3IgSVBDIGhhbmRsaW5nLCBzbworICAgICAgICBXZWJDb21w
b3NpdGluZ0Nvb3JkaWFudG9yTWVzc2FnZUNsaWVudCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNl
LCB0b28uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gY2hhbmdlIGluIGJlaGF2
aW9yLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVGFyZ2V0LnByaToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3Np
dGluZ0Nvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgQWRkZWQuIEl0IHRha2VzIHJlc3BvbnNpYmls
aXkgZm9yIHNjaGVkdWxpbmcgY29tcG9zaXRpbmcgdGFza3MgYW5kCisgICAgICAgIG1hbmFnaW5n
IHJlc291cmNlcy4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0
aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6On5Db21wb3NpdGluZ0Nvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYktpdDo6Q29t
cG9zaXRpbmdDb29yZGluYXRvcjo6Q29tcG9zaXRpbmdDb29yZGluYXRvcik6CisgICAgICAgIChX
ZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5h
YmxlZCk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNjaGVkdWxl
TGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNh
bmNlbFBlbmRpbmdMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29y
ZGluYXRvcjo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9z
aXRpbmdDb29yZGluYXRvcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KToKKyAgICAgICAgKFdlYktp
dDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Zm9yY2VSZXBhaW50KToKKyAgICAgICAgKFdlYktp
dDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2l6ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJL
aXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcyk6Cisg
ICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnN5bmNMYXllclN0YXRlKToK
KyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c3luY0xheWVyQ2hpbGRy
ZW4pOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVDYW52
YXMpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzeW5jQ2FudmFz
KToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6ZGVzdHJveUNhbnZh
cyk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnN5bmNMYXllckZp
bHRlcnMpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hM
YXllcik6CisgICAgICAgIChXZWJLaXQ6OnVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvclNlbGYp
OgorICAgICAgICAoV2ViS2l0Ojp1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcik6Cisg
ICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnN5bmNGaXhlZExheWVycyk6
CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmxvY2tBbmltYXRpb25z
KToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6dW5sb2NrQW5pbWF0
aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnBlcmZvcm1T
Y2hlZHVsZWRMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGlu
YXRvcjo6c3luY0Rpc3BsYXlTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OmxheWVyRmx1c2hUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9z
aXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlUGFnZU92ZXJsYXlMYXllcik6CisgICAgICAgIChXZWJL
aXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKToKKyAg
ICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0UGFnZU92ZXJsYXlOZWVk
c0Rpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzZXRQ
YWdlT3ZlcmxheU9wYWNpdHkpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJLaXQ6
OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnVwZGF0ZUltYWdlQmFja2luZyk6CisgICAgICAgIChX
ZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMp
OgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZW1vdmVJbWFnZUJh
Y2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpmbHVzaFBl
bmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdD
b29yZGluYXRvcjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6CisgICAgICAgIChXZWJLaXQ6OkNv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6Om5vdGlmeUZsdXNoUmVxdWlyZWQpOgorICAgICAgICAoV2Vi
S2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdl
YktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlR3JhcGhpY3NMYXllcik6CisgICAg
ICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZVRpbGUpOgorICAgICAg
ICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVUaWxlKToKKyAgICAgICAg
KFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVtb3ZlVGlsZSk6CisgICAgICAgIChX
ZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZVVwZGF0ZUF0bGFzKToKKyAgICAg
ICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVtb3ZlVXBkYXRlQXRsYXMpOgor
ICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp2aXNpYmxlQ29udGVudHNS
ZWN0KToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJB
bmltYXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0
VmlzaWJsZUNvbnRlbnRzUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OmxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCk6CisgICAgICAgIChXZWJLaXQ6
OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnB1cmdlQmFja2luZ1N0b3Jlcyk6CisgICAgICAgIChX
ZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmJlZ2luQ29udGVudFVwZGF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNjaGVkdWxlUmVsZWFzZUluYWN0
aXZlQXRsYXNlcyk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJl
bGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmg6CisgICAg
ICAgIEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAoQ29tcG9zaXRpbmdDb29yZGluYXRvcik6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OnBhdXNlUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRp
bmdDb29yZGluYXRvcjo6cmVzdW1lUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9z
aXRpbmdDb29yZGluYXRvcjo6cm9vdEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3JDbGll
bnQuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoQ29tcG9zaXRpbmdDb29y
ZGluYXRvck1lc3NhZ2VDbGllbnQpOgorICAgICAgICBUaGlzIGludGVyZmFjZSBwcm92aWRlcyBh
IHdheSB0byBzZW5kIG1lc3NhZ2VzIHRvIHJlbmRlcmVyLgorICAgICAgICAoQ29tcG9zaXRpbmdD
b29yZGluYXRvckNsaWVudCk6CisgICAgICAgIFRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIGEgd2F5
IHRvIHVzZSBMYXllclRyZWVDb29yZGluYXRvciBmcm9tCisgICAgICAgIENvbXBvc2l0aW5nIENv
b3JkaW5hdG9yLgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yQ2xpZW50
Ojp+Q29tcG9zaXRpbmdDb29yZGluYXRvckNsaWVudCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6fkxheWVyVHJlZUNvb3JkaW5hdG9y
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldExheWVy
Rmx1c2hTY2hlZHVsaW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yOjpzY2hlZHVsZUxheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVD
b29yZGluYXRvcjo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVDb29yZGluYXRvcjo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUNvb3JkaW5hdG9yOjpzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheSk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpmb3JjZVJlcGFpbnQpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6c2l6ZURpZENoYW5nZSk6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpkaWRJbnN0YWxsUGFnZU92ZXJsYXkp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6ZGlkVW5pbnN0YWxsUGFn
ZU92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6c2V0UGFn
ZU92ZXJsYXlOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGlu
YXRvcjo6c2V0UGFnZU92ZXJsYXlPcGFjaXR5KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OnBhdXNlUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OnJlc3VtZVJlbmRlcmluZyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUNvb3JkaW5hdG9yOjp2aWV3U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yOjpsYXlvdXRJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yOjppc09wYXF1ZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OmRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVDb29yZGluYXRvcjo6cGFpbnRPdmVybGF5Q29udGVudHMpOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpncmFwaGljc0xheWVyRmFjdG9y
eSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpzY2hlZHVsZUFuaW1h
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW5kZXJOZXh0
RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6cHVyZ2VCYWNr
aW5nU3RvcmVzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldEJh
Y2tncm91bmRDb2xvcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoTGF5ZXJUcmVlQ29vcmRpbmF0b3IpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xp
ZW50LmNwcDoKKyAgICAgICAgQWRkZWQuIE1hbmFnZXMgc2VuZHMgYWN0dWFsIElQQyBtZXNzYWdl
cyBhbmQgbWFuYWdlcworICAgICAgICBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtCisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2Fn
ZUNsaWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpbmdDb29yZGlu
YXRvck1lc3NhZ2VDbGllbnQ6On5XZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVu
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xp
ZW50OjpXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpzZXRSb290Q29t
cG9zaXRpbmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0
b3JNZXNzYWdlQ2xpZW50OjpzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6c2V0Q29tcG9zaXRp
bmdMYXllckNoaWxkcmVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpbmdDb29yZGlu
YXRvck1lc3NhZ2VDbGllbnQ6OnNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OmRlbGV0ZUNv
bXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yTWVzc2FnZUNsaWVudDo6Y3JlYXRlVGlsZUZvckxheWVyKToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OnVwZGF0ZVRpbGVGb3JMYXll
cik6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xp
ZW50OjpyZW1vdmVUaWxlRm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6Y3JlYXRlVXBkYXRlQXRsYXMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6cmVtb3ZlVXBk
YXRlQXRsYXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVz
c2FnZUNsaWVudDo6Y3JlYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29t
cG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OnVwZGF0ZUltYWdlQmFja2luZyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50Ojpj
bGVhckltYWdlQmFja2luZ0NvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRp
bmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OnJlbW92ZUltYWdlQmFja2luZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpkaWRSZW5k
ZXJGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNz
YWdlQ2xpZW50OjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpjcmVhdGVDYW52YXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6c3lu
Y0NhbnZhcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNz
YWdlQ2xpZW50OjpkZXN0cm95Q2FudmFzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRp
bmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OnNldExheWVyQW5pbWF0aW9ucyk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpzZXRBbmlt
YXRpb25zTG9ja2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpbmdDb29yZGluYXRv
ck1lc3NhZ2VDbGllbnQ6OnNldEJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpyZXF1ZXN0QW5pbWF0aW9uRnJh
bWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNs
aWVudDo6aW52b2tlRm9yY2VSZXBhaW50QXN5bmNDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6
OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpjaGVja0N1c3RvbUZpbHRl
clByb2dyYW1Qcm94aWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpbmdDb29yZGlu
YXRvck1lc3NhZ2VDbGllbnQ6OnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpkaXNj
b25uZWN0Q3VzdG9tRmlsdGVyUHJvZ3JhbXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xp
ZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50KToKKwogMjAxMi0xMi0wNyAgSmVyIE5vYmxlICA8amVy
Lm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBBbGxvdyB0aGUgV2ViUHJvY2VzcyBhY2Nlc3Mg
dG8gdGhlIENvcmVNZWRpYSBwcmVmZXJlbmNlcyBmaWxlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAppbmRl
eCA4ZjNiNmY5M2MwZDg3ZDFiZDVjNDEwNDQyZDZkM2UxNjFkYzgzMGUwLi5iYWU4OWJiNjk2Zjli
OWU2YjhmODRkNmZmYWQ3NTYwZTMzZGYzODQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9D
TWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dApAQCAtNDk1
LDExICs0OTUsMTMgQEAgc2V0KFdlYktpdDJfU09VUkNFUwogICAgIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJVbmRvU3RlcC5jcHAKIAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0FyZWFBbGxvY2F0b3IuY3BwCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAKICAgICBXZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAKICAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRUaWxlLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL1VwZGF0ZUF0bGFzLmNwcAorICAgIFdlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xp
ZW50LmNwcAogKQogCiBzZXQoV2ViS2l0Ml9NRVNTQUdFU19JTl9GSUxFUwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKaW5k
ZXggMTI2MGIzYzFhYTQ2YmI1Y2IyNDYzNGFiY2MxYjEyZjRkOTQzMTQ3My4uM2VmYWJmMzYwNjgz
NjFjZmRlZGI5Y2Q2ZDk1OGRmNTRmYzBhMTRkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCkBAIC0zNjksMTEgKzM2
OSwxNCBAQCBIRUFERVJTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRj
aGVyLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oIFwKICAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9BcmVhQWxsb2NhdG9yLmggXAor
ICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29v
cmRpbmF0b3IuaCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29tcG9zaXRpbmdDb29yZGluYXRvckNsaWVudC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBcCiAgICAgV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmcuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRUaWxlLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0xheWVyVHJlZUNvb3JkaW5hdG9yLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL1VwZGF0ZUF0bGFzLmggXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL1dlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50Lmgg
XAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9UYXBIaWdobGlnaHRDb250cm9sbGVyLmggXAogICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViQ29udGV4dE1lbnUuaCBcCkBAIC03NTMsMTEgKzc1NiwxMyBAQCBTT1VSQ0VTICs9IFwK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcCBcCiAgICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5jcHAgXAorICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwIFwK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHAgXAogICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcCBc
CiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMu
Y3BwIFwKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9UYXBIaWdobGlnaHRDb250cm9sbGVyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L0xheWVyVHJlZUhvc3QuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXku
Y3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29y
ZGluYXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmI1ZmJhYTU5NjBmMWIyMmVhYTExMGZkMTA0N2M0Y2Y5
MGJlYzAyZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCkBAIC0w
LDAgKzEsNjc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21w
YW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiQ29t
cG9zaXRpbmdDb29yZGluYXRvci5oIgorCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8u
aCIKKyNpbmNsdWRlICJTdXJmYWNlVXBkYXRlSW5mby5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRnJh
bWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
R3JhcGhpY3NTdXJmYWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNr
aW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oPgorI2luY2x1
ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyNp
bmNsdWRlICJDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmgiCisjaW5jbHVkZSAiVmFsaWRh
dGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgiCisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzT3duUHRyPENvbXBvc2l0aW5nQ29v
cmRpbmF0b3I+IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZShQYWdlKiBwYWdlLCBDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yQ2xpZW50KiBjbGllbnQsIENvbXBvc2l0aW5nQ29vcmRpbmF0b3JN
ZXNzYWdlQ2xpZW50KiBtZXNzYWdlQ2xpZW50KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcg
Q29tcG9zaXRpbmdDb29yZGluYXRvcihwYWdlLCBjbGllbnQsIG1lc3NhZ2VDbGllbnQpKTsKK30K
KworQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6fkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IoKQorewor
ICAgIC8vIFByZXZlbnQgc2V0Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KDApIC0+IGRl
dGFjaExheWVyKCkgZnJvbSBtb2RpZnlpbmcgdGhlIHNldCB3aGlsZSB3ZSBpdGVyYXRlIGl0Lgor
ICAgIEhhc2hTZXQ8Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj4gcmVnaXN0ZXJlZExheWVyczsK
KyAgICByZWdpc3RlcmVkTGF5ZXJzLnN3YXAobV9yZWdpc3RlcmVkTGF5ZXJzKTsKKworICAgIEhh
c2hTZXQ8Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGVuZCA9IHJlZ2lzdGVy
ZWRMYXllcnMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cio+OjppdGVyYXRvciBpdCA9IHJlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQorICAgICAgICAoKml0KS0+c2V0Q29vcmRpbmF0b3IoMCk7Cit9CisKK0NvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IoUGFnZSogcGFnZSwgQ29tcG9zaXRp
bmdDb29yZGluYXRvckNsaWVudCogY2xpZW50LCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2Fn
ZUNsaWVudCogbWVzc2FnZUNsaWVudCkKKyAgICA6IG1fcGFnZShwYWdlKQorICAgICwgbV9jbGll
bnQoY2xpZW50KQorICAgICwgbV9tZXNzYWdlQ2xpZW50KG1lc3NhZ2VDbGllbnQpCisgICAgLCBt
X2lzVmFsaWQodHJ1ZSkKKyAgICAsIG1faXNQdXJnaW5nKGZhbHNlKQorICAgICwgbV93YWl0aW5n
Rm9yUmVuZGVyZXIodHJ1ZSkKKyAgICAsIG1faXNTdXNwZW5kZWQoZmFsc2UpCisgICAgLCBtX2Nv
bnRlbnRzU2NhbGUoMSkKKyAgICAsIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlKHRy
dWUpCisgICAgLCBtX3Nob3VsZFN5bmNGcmFtZShmYWxzZSkKKyAgICAsIG1fc2hvdWxkU3luY1Jv
b3RMYXllcih0cnVlKQorICAgICwgbV9sYXllckZsdXNoVGltZXIodGhpcywgJkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OmxheWVyRmx1c2hUaW1lckZpcmVkKQorICAgICwgbV9yZWxlYXNlSW5hY3Rp
dmVBdGxhc2VzVGltZXIodGhpcywgJkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJlbGVhc2VJbmFj
dGl2ZUF0bGFzZXNUaW1lckZpcmVkKQorICAgICwgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJs
ZWQodHJ1ZSkKKyAgICAsIG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEKDApCisgICAgLCBt
X2FuaW1hdGlvbnNMb2NrZWQoZmFsc2UpCit7CisgICAgLy8gQ3JlYXRlIGEgcm9vdCBsYXllci4K
KyAgICBtX3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzLCB0aGlzKTsKKyAg
ICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGNvb3JkaW5hdGVkUm9vdExheWVyID0gdG9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpOworICAgIGNvb3JkaW5hdGVk
Um9vdExheWVyLT5zZXRSb290TGF5ZXIodHJ1ZSk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fcm9v
dExheWVyLT5zZXROYW1lKCJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yIHJvb3QgbGF5ZXIiKTsKKyNl
bmRpZgorICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworCisgICAgSW50
U2l6ZSB2aWV3U2l6ZShtX2NsaWVudC0+dmlld1NpemUoKSk7CisgICAgbV9yb290TGF5ZXItPnNl
dFNpemUodmlld1NpemUpOworCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyID0gR3Jh
cGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMsIHRoaXMpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5hbWUoIkNvbXBvc2l0aW5nQ29vcmRpbmF0b3Ig
bm9uLWNvbXBvc2l0ZWQgY29udGVudCIpOworI2VuZGlmCisgICAgbV9ub25Db21wb3NpdGVkQ29u
dGVudExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29u
dGVudExheWVyLT5zZXRTaXplKHZpZXdTaXplKTsKKworICAgIG1fcm9vdExheWVyLT5hZGRDaGls
ZChtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpOworCisgICAgc2NoZWR1bGVMYXll
ckZsdXNoKCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJGbHVz
aFNjaGVkdWxpbmdFbmFibGVkKGJvb2wgbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCit7CisgICAgaWYg
KG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID09IGxheWVyRmx1c2hpbmdFbmFibGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9IGxh
eWVyRmx1c2hpbmdFbmFibGVkOworCisgICAgaWYgKG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFi
bGVkKSB7CisgICAgICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKK30KKwordm9pZCBDb21wb3Np
dGluZ0Nvb3JkaW5hdG9yOjpzY2hlZHVsZUxheWVyRmx1c2goKQoreworICAgIGlmICghbV9sYXll
ckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9s
YXllckZsdXNoVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9sYXllckZsdXNoVGltZXIuc3Rh
cnRPbmVTaG90KDApOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNhbmNlbFBl
bmRpbmdMYXllckZsdXNoKCkKK3sKKyAgICBtX2xheWVyRmx1c2hUaW1lci5zdG9wKCk7Cit9CisK
K3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3Jh
cGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKK3sKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLT5zZXRDb250ZW50c09wYXF1ZShtX2NsaWVudC0+aXNPcGFxdWVDb250ZW50cygpKTsKKwor
ICAgIC8vIEFkZCB0aGUgYWNjZWxlcmF0ZWQgbGF5ZXIgdHJlZSBoaWVyYXJjaHkuCisgICAgaWYg
KGdyYXBoaWNzTGF5ZXIpCisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+YWRk
Q2hpbGQoZ3JhcGhpY3NMYXllcik7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6
aW52YWxpZGF0ZSgpCit7CisgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKKworICAgIEFT
U0VSVChtX2lzVmFsaWQpOworICAgIG1fcm9vdExheWVyID0gbnVsbHB0cjsKKyAgICBtX2lzVmFs
aWQgPSBmYWxzZTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzZXROZWVkc0Rp
c3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKworICAgIGlmIChtX3Bh
Z2VPdmVybGF5TGF5ZXIpCisgICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNw
bGF5SW5SZWN0KHJlY3QpOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQg
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Zm9yY2VSZXBhaW50KCkKK3sKKyAgICAvLyBUaGlzIGlz
IG5lY2Vzc2FyeSBmb3IgcnVubmluZyBsYXlvdXQgdGVzdHMuIFNpbmNlIGluIHRoaXMgY2FzZSB3
ZSBhcmUgbm90IHdhaXRpbmcgZm9yIGEgcmVuZGVyZXIgdG8gcmVwbHkgbmljZWx5LgorICAgIC8v
IEluc3RlYWQgd2UgYXJlIGp1c3QgdHJpZ2dlcmluZyBmb3JjZVJlcGFpbnQuIEJ1dCB3ZSBzdGls
bCB3YW50IHRvIGhhdmUgdGhlIHNjcmlwdGVkIGFuaW1hdGlvbiBjYWxsYmFja3MgYmVpbmcgZXhl
Y3V0ZWQuCisgICAgc3luY0Rpc3BsYXlTdGF0ZSgpOworCisgICAgLy8gV2UgbmVlZCB0byBzY2hl
ZHVsZSBhbm90aGVyIGZsdXNoLCBvdGhlcndpc2UgdGhlIGZvcmNlZCBwYWludCBtaWdodCBjYW5j
ZWwgYSBsYXRlciBleHBlY3RlZCBmbHVzaC4KKyAgICAvLyBUaGlzIGlzIGFsaWduZWQgd2l0aCBM
YXllclRyZWVIb3N0Q0EuCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgZmx1c2hQZW5k
aW5nTGF5ZXJDaGFuZ2VzKCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2l6
ZURpZENoYW5nZShjb25zdCBJbnRTaXplJiBuZXdTaXplKQoreworICAgIGlmIChtX3Jvb3RMYXll
ci0+c2l6ZSgpID09IG5ld1NpemUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcm9vdExheWVy
LT5zZXRTaXplKG5ld1NpemUpOworCisgICAgLy8gSWYgdGhlIG5ld1NpemUgZXhwb3NlcyBuZXcg
YXJlYXMgb2YgdGhlIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQgYSBzZXROZWVkc0Rpc3BsYXkgaXMg
bmVlZGVkCisgICAgLy8gZm9yIHRob3NlIG5ld2x5IGV4cG9zZWQgYXJlYXMuCisgICAgRmxvYXRT
aXplIG9sZFNpemUgPSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKTsKKyAgICBt
X25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAgICBpZiAo
bmV3U2l6ZS53aWR0aCgpID4gb2xkU2l6ZS53aWR0aCgpKSB7CisgICAgICAgIGZsb2F0IGhlaWdo
dCA9IHN0ZDo6bWluKHN0YXRpY19jYXN0PGZsb2F0PihuZXdTaXplLmhlaWdodCgpKSwgb2xkU2l6
ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdChvbGRTaXplLndpZHRoKCksIDAsIG5ld1NpemUud2lk
dGgoKSAtIG9sZFNpemUud2lkdGgoKSwgaGVpZ2h0KSk7CisgICAgfQorCisgICAgaWYgKG5ld1Np
emUuaGVpZ2h0KCkgPiBvbGRTaXplLmhlaWdodCgpKQorICAgICAgICBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3QoMCwgb2xkU2l6ZS5o
ZWlnaHQoKSwgbmV3U2l6ZS53aWR0aCgpLCBuZXdTaXplLmhlaWdodCgpIC0gb2xkU2l6ZS5oZWln
aHQoKSkpOworCisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdlT3Zl
cmxheUxheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7
Cit9CisKK2Jvb2wgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFu
Z2VzKCkKK3sKKyAgICBpZiAobV93YWl0aW5nRm9yUmVuZGVyZXIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kZXRhY2hlZExheWVycy5zaXpl
KCk7ICsraSkKKyAgICAgICAgbV9tZXNzYWdlQ2xpZW50LT5kZWxldGVDb21wb3NpdGluZ0xheWVy
KG1fZGV0YWNoZWRMYXllcnNbaV0pOworICAgIG1fZGV0YWNoZWRMYXllcnMuY2xlYXIoKTsKKwor
ICAgIG1fcm9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7
CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVG
b3JUaGlzTGF5ZXJPbmx5KCk7CisKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQorICAgICAg
ICBtX3BhZ2VPdmVybGF5TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9u
bHkoKTsKKworICAgIGJvb2wgZGlkU3luYyA9IG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+
Zmx1c2hDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CisKKyAgICBmbHVzaFBl
bmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7CisKKyAgICBpZiAobV9zaG91bGRTeW5jUm9vdExh
eWVyKSB7CisgICAgICAgIG1fbWVzc2FnZUNsaWVudC0+c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIo
dG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5pZCgpKTsKKyAg
ICAgICAgbV9zaG91bGRTeW5jUm9vdExheWVyID0gZmFsc2U7CisgICAgICAgIG1fc2hvdWxkU3lu
Y0ZyYW1lID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV9zaG91bGRTeW5jRnJhbWUpIHsKKyAg
ICAgICAgZGlkU3luYyA9IHRydWU7CisKKyAgICAgICAgSW50U2l6ZSBjb250ZW50c1NpemUgPSBy
b3VuZGVkSW50U2l6ZShtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKSk7CisgICAg
ICAgIEludFJlY3QgY292ZXJlZFJlY3QgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpLT5jb3ZlclJlY3QoKTsKKyAgICAgICAgbV9t
ZXNzYWdlQ2xpZW50LT5kaWRSZW5kZXJGcmFtZShjb250ZW50c1NpemUsIGNvdmVyZWRSZWN0KTsK
KyAgICAgICAgbV93YWl0aW5nRm9yUmVuZGVyZXIgPSB0cnVlOworICAgICAgICBtX3Nob3VsZFN5
bmNGcmFtZSA9IGZhbHNlOworICAgIH0gZWxzZQorICAgICAgICB1bmxvY2tBbmltYXRpb25zKCk7
CisKKyAgICByZXR1cm4gZGlkU3luYzsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
OjpzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3JkaW5hdGVk
TGF5ZXJJbmZvJiBpbmZvKQoreworICAgIGlmIChtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVw
ZGF0ZSkgeworICAgICAgICBtX21lc3NhZ2VDbGllbnQtPmRpZENoYW5nZVNjcm9sbFBvc2l0aW9u
KG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpKTsKKyAgICAgICAgbV9zaG91bGRTZW5k
U2Nyb2xsUG9zaXRpb25VcGRhdGUgPSBmYWxzZTsKKyAgICB9CisKKyAgICBtX3Nob3VsZFN5bmNG
cmFtZSA9IHRydWU7CisgICAgbV9tZXNzYWdlQ2xpZW50LT5zZXRDb21wb3NpdGluZ0xheWVyU3Rh
dGUoaWQsIGluZm8pOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnN5bmNMYXll
ckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVk
TGF5ZXJJRD4mIGNoaWxkcmVuKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAg
ICBtX21lc3NhZ2VDbGllbnQtPnNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihpZCwgY2hpbGRy
ZW4pOworfQorCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCit2b2lkIENvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OmNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIFBsYXRmb3JtTGF5
ZXIqIGNhbnZhc1BsYXRmb3JtTGF5ZXIpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVl
OworICAgIEdyYXBoaWNzU3VyZmFjZVRva2VuIHRva2VuID0gY2FudmFzUGxhdGZvcm1MYXllci0+
Z3JhcGhpY3NTdXJmYWNlVG9rZW4oKTsKKyAgICBJbnRTaXplIGNhbnZhc1NpemUgPSBjYW52YXNQ
bGF0Zm9ybUxheWVyLT5wbGF0Zm9ybUxheWVyU2l6ZSgpOworICAgIG1fbWVzc2FnZUNsaWVudC0+
Y3JlYXRlQ2FudmFzKGlkLCBjYW52YXNTaXplLCB0b2tlbik7Cit9CisKK3ZvaWQgQ29tcG9zaXRp
bmdDb29yZGluYXRvcjo6c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIFBsYXRmb3Jt
TGF5ZXIqIGNhbnZhc1BsYXRmb3JtTGF5ZXIpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0
cnVlOworICAgIHVpbnQzMl90IGZyb250QnVmZmVyID0gY2FudmFzUGxhdGZvcm1MYXllci0+Y29w
eVRvR3JhcGhpY3NTdXJmYWNlKCk7CisgICAgbV9tZXNzYWdlQ2xpZW50LT5zeW5jQ2FudmFzKGlk
LCBmcm9udEJ1ZmZlcik7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6ZGVzdHJv
eUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQpCit7CisgICAgaWYgKG1faXNQdXJnaW5nKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV9t
ZXNzYWdlQ2xpZW50LT5kZXN0cm95Q2FudmFzKGlkKTsKK30KKyNlbmRpZgorCisjaWYgRU5BQkxF
KENTU19GSUxURVJTKQordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzeW5jTGF5ZXJGaWx0
ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVy
cykKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV9tZXNzYWdlQ2xpZW50
LT5zZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhpZCwgZmlsdGVycyk7Cit9CisjZW5kaWYKKwor
dm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hMYXllcihDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIqIGxheWVyKQoreworICAgIG1fcmVnaXN0ZXJlZExheWVycy5yZW1vdmUobGF5ZXIp
OworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX2RldGFjaGVkTGF5ZXJzLmFw
cGVuZChsYXllci0+aWQoKSk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3N0YXRp
YyB2b2lkIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvclNlbGYoUmVuZGVyTGF5ZXIqIHJlbmRl
ckxheWVyKQoreworICAgIC8vIFRoZXNlIGNvbmRpdGlvbnMgbXVzdCBtYXRjaCB0aGUgY29uZGl0
aW9ucyBpbiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQb3Np
dGlvbi4KKyAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSByZW5kZXJMYXllci0+YmFj
a2luZygpOworICAgIGlmICghYmFja2luZykKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVy
U3R5bGUqIHN0eWxlID0gcmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCk7CisgICAgaWYg
KCFzdHlsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFyZW5kZXJMYXllci0+cmVuZGVy
ZXIoKS0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgcmVuZGVyTGF5ZXItPnJlbmRlcmVyKCkt
PnN0eWxlKCktPnBvc2l0aW9uKCkgIT0gRml4ZWRQb3NpdGlvbikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFyZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+Y29udGFpbmVyKCktPmlzUmVuZGVy
VmlldygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXJlbmRlckxheWVyLT5pc1N0YWNr
aW5nQ29udGV4dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIqIGdyYXBoaWNzTGF5ZXIgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihiYWNraW5n
LT5ncmFwaGljc0xheWVyKCkpOworICAgIGdyYXBoaWNzTGF5ZXItPnNldEZpeGVkVG9WaWV3cG9y
dCh0cnVlKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5
ZXIoUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyKQoreworICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3
cG9ydEZvclNlbGYocmVuZGVyTGF5ZXIpOworCisgICAgaWYgKHJlbmRlckxheWVyLT5maXJzdENo
aWxkKCkpCisgICAgICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJlbmRlckxh
eWVyLT5maXJzdENoaWxkKCkpOworICAgIGlmIChyZW5kZXJMYXllci0+bmV4dFNpYmxpbmcoKSkK
KyAgICAgICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIocmVuZGVyTGF5ZXItPm5l
eHRTaWJsaW5nKCkpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnN5bmNGaXhl
ZExheWVycygpCit7CisgICAgaWYgKCFtX3BhZ2UtPnNldHRpbmdzKCkgfHwgIW1fcGFnZS0+c2V0
dGluZ3MoKS0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygp
LT5oYXNWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cygpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBSZW5kZXJMYXllciogcm9vdFJlbmRlckxheWVyID0gbV9wYWdlLT5tYWluRnJhbWUoKS0+Y29u
dGVudFJlbmRlcmVyKCktPmNvbXBvc2l0b3IoKS0+cm9vdFJlbmRlckxheWVyKCk7CisgICAgQVNT
RVJUKHJvb3RSZW5kZXJMYXllcik7CisgICAgaWYgKHJvb3RSZW5kZXJMYXllci0+Zmlyc3RDaGls
ZCgpKQorICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyb290UmVuZGVy
TGF5ZXItPmZpcnN0Q2hpbGQoKSk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6
bG9ja0FuaW1hdGlvbnMoKQoreworICAgIG1fYW5pbWF0aW9uc0xvY2tlZCA9IHRydWU7CisgICAg
bV9tZXNzYWdlQ2xpZW50LT5zZXRBbmltYXRpb25zTG9ja2VkKHRydWUpOworfQorCit2b2lkIENv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OnVubG9ja0FuaW1hdGlvbnMoKQoreworICAgIGlmICghbV9h
bmltYXRpb25zTG9ja2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2FuaW1hdGlvbnNMb2Nr
ZWQgPSBmYWxzZTsKKyAgICBtX21lc3NhZ2VDbGllbnQtPnNldEFuaW1hdGlvbnNMb2NrZWQoZmFs
c2UpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnBlcmZvcm1TY2hlZHVsZWRM
YXllckZsdXNoKCkKK3sKKyAgICBpZiAobV9pc1N1c3BlbmRlZCB8fCBtX3dhaXRpbmdGb3JSZW5k
ZXJlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgbG9jayB0aGUgYW5pbWF0aW9ucyB3
aGlsZSBwZXJmb3JtaW5nIGxheW91dCwgdG8gYXZvaWQgZmxpY2tlcnMgY2F1c2VkIGJ5IGFuaW1h
dGlvbnMgY29udGludWluZyBpbiB0aGUgcmVuZGVyZXIgd2hpbGUKKyAgICAvLyB0aGUgd2ViIHBy
b2Nlc3MgbGF5b3V0IHdhbnRzIHRvIGNhbmNlbCB0aGVtLgorICAgIGxvY2tBbmltYXRpb25zKCk7
CisgICAgc3luY0Rpc3BsYXlTdGF0ZSgpOworCisgICAgLy8gV2UgY2FuIHVubG9jayB0aGUgYW5p
bWF0aW9ucyBiZWZvcmUgZmx1c2hpbmcgaWYgdGhlcmUgYXJlIG5vIHZpc2libGUgY2hhbmdlcywg
Zm9yIGV4YW1wbGUgaWYgdGhlcmUgYXJlIGNvbnRlbnQgdXBkYXRlcworICAgIC8vIGluIGEgbGF5
ZXIgd2l0aCBvcGFjaXR5IDAuCisgICAgYm9vbCBjYW5VbmxvY2tCZWZvcmVGbHVzaCA9ICFtX2lz
VmFsaWQgfHwgIXRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+
aGFzUGVuZGluZ1Zpc2libGVDaGFuZ2VzKCk7CisgICAgaWYgKGNhblVubG9ja0JlZm9yZUZsdXNo
KQorICAgICAgICB1bmxvY2tBbmltYXRpb25zKCk7CisKKyAgICBpZiAoIW1faXNWYWxpZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYm9vbCBkaWRTeW5jID0gZmx1c2hQZW5kaW5nTGF5ZXJDaGFu
Z2VzKCk7CisgICAgbV9jbGllbnQtPmRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKGRpZFN5
bmMpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnN5bmNEaXNwbGF5U3RhdGUo
KQoreworI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkgJiYgIVVTRShSRVFVRVNU
X0FOSU1BVElPTl9GUkFNRV9USU1FUikgJiYgIVVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9E
SVNQTEFZX01PTklUT1IpCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgYW55IHByZXZpb3VzbHkgcmVn
aXN0ZXJlZCBhbmltYXRpb24gY2FsbGJhY2tzIGFyZSBiZWluZyBleGVjdXRlZCBiZWZvcmUgd2Ug
Zmx1c2ggdGhlIGxheWVycy4KKyAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPnNlcnZp
Y2VTY3JpcHRlZEFuaW1hdGlvbnMoY29udmVydFNlY29uZHNUb0RPTVRpbWVTdGFtcChjdXJyZW50
VGltZSgpKSk7CisjZW5kaWYKKworICAgIG1fY2xpZW50LT5sYXlvdXRJZk5lZWRlZCgpOworfQor
Cit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmxheWVyRmx1c2hUaW1lckZpcmVkKFRpbWVy
PENvbXBvc2l0aW5nQ29vcmRpbmF0b3I+KikKK3sKKyAgICBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJG
bHVzaCgpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZVBhZ2VPdmVy
bGF5TGF5ZXIoKQoreworICAgIEFTU0VSVCghbV9wYWdlT3ZlcmxheUxheWVyKTsKKworICAgIG1f
cGFnZU92ZXJsYXlMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzLCB0aGlzKTsKKyNp
Zm5kZWYgTkRFQlVHCisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROYW1lKCJDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yIHBhZ2Ugb3ZlcmxheSBjb250ZW50Iik7CisjZW5kaWYKKworICAgIG1fcGFn
ZU92ZXJsYXlMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIG1fcGFnZU92ZXJsYXlM
YXllci0+c2V0U2l6ZShtX2NsaWVudC0+dmlld1NpemUoKSk7CisKKyAgICBtX3Jvb3RMYXllci0+
YWRkQ2hpbGQobV9wYWdlT3ZlcmxheUxheWVyLmdldCgpKTsKKworICAgIHNjaGVkdWxlTGF5ZXJG
bHVzaCgpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRlc3Ryb3lQYWdlT3Zl
cmxheUxheWVyKCkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKKyAgICBtX3Bh
Z2VPdmVybGF5TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5
ZXIgPSBudWxscHRyOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgQ29t
cG9zaXRpbmdDb29yZGluYXRvcjo6c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsK
KyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAg
ICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
OjpzZXRQYWdlT3ZlcmxheU9wYWNpdHkoZmxvYXQgdmFsdWUpCit7CisgICAgQVNTRVJUKG1fcGFn
ZU92ZXJsYXlMYXllcik7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRPcGFjaXR5KHZhbHVl
KTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKworUGFzc1JlZlB0cjxDb29yZGluYXRl
ZEltYWdlQmFja2luZz4gQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlSW1hZ2VCYWNraW5n
SWZOZWVkZWQoSW1hZ2UqIGltYWdlKQoreworICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQg
aW1hZ2VJRCA9IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpnZXRDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEKGltYWdlKTsKKyAgICBJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFn
ZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7CisgICAgUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nPiBpbWFnZUJhY2tpbmc7CisgICAgaWYgKGl0ID09IG1faW1hZ2VCYWNraW5ncy5lbmQoKSkg
eworICAgICAgICBpbWFnZUJhY2tpbmcgPSBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y3JlYXRl
KHRoaXMsIGltYWdlKTsKKyAgICAgICAgbV9pbWFnZUJhY2tpbmdzLmFkZChpbWFnZUlELCBpbWFn
ZUJhY2tpbmcpOworICAgIH0gZWxzZQorICAgICAgICBpbWFnZUJhY2tpbmcgPSBpdC0+dmFsdWU7
CisKKyAgICByZXR1cm4gaW1hZ2VCYWNraW5nOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OmNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdl
SUQpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fbWVzc2FnZUNsaWVu
dC0+Y3JlYXRlSW1hZ2VCYWNraW5nKGltYWdlSUQpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlt
YWdlSUQsIGNvbnN0IFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlKQoreworICAgIG1f
c2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX21lc3NhZ2VDbGllbnQtPnVwZGF0ZUltYWdl
QmFja2luZyhpbWFnZUlELCBoYW5kbGUpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0
b3I6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBp
bWFnZUlEKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX21lc3NhZ2VD
bGllbnQtPmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoaW1hZ2VJRCk7Cit9CisKK3ZvaWQgQ29t
cG9zaXRpbmdDb29yZGluYXRvcjo6cmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBpZiAobV9pc1B1cmdpbmcpCisgICAgICAgIHJldHVy
bjsKKworICAgIEFTU0VSVChtX2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkpOworICAg
IG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX2ltYWdlQmFja2luZ3MucmVtb3ZlKGlt
YWdlSUQpOworICAgIG1fbWVzc2FnZUNsaWVudC0+cmVtb3ZlSW1hZ2VCYWNraW5nKGltYWdlSUQp
OworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0ltYWdlQmFj
a2luZ0NoYW5nZXMoKQoreworICAgIEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgZW5kID0gbV9p
bWFnZUJhY2tpbmdzLmVuZCgpOworICAgIGZvciAoSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBp
dGVyID0gbV9pbWFnZUJhY2tpbmdzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAg
ICAgIGl0ZXItPnZhbHVlLT51cGRhdGUoKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBkb3VibGUg
LyogdGltZSAqLykKK3sKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpub3RpZnlG
bHVzaFJlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKQoreworfQorCit2b2lkIENvbXBvc2l0
aW5nQ29vcmRpbmF0b3I6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhp
Y3NMYXllciwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIEdyYXBoaWNzTGF5ZXJQ
YWludGluZ1BoYXNlIHBoYXNlLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKK3sKKyAgICBib29s
IGlzTm9uQ29tcG9zaXRpbmdDb250ZW50ID0gKGdyYXBoaWNzTGF5ZXIgPT0gbV9ub25Db21wb3Np
dGVkQ29udGVudExheWVyKTsKKyAgICBib29sIGlzUGFnZU92ZXJsYXkgPSAoZ3JhcGhpY3NMYXll
ciA9PSBtX3BhZ2VPdmVybGF5TGF5ZXIpOworCisgICAgaWYgKGlzTm9uQ29tcG9zaXRpbmdDb250
ZW50KQorICAgICAgICBtX2NsaWVudC0+cGFpbnRDb250ZW50cyhncmFwaGljc0NvbnRleHQsIGNs
aXBSZWN0KTsKKyAgICBlbHNlIGlmIChpc1BhZ2VPdmVybGF5KQorICAgICAgICBtX2NsaWVudC0+
cGFpbnRPdmVybGF5Q29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7Cit9CisKK1Bh
c3NPd25QdHI8R3JhcGhpY3NMYXllcj4gQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlR3Jh
cGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyKiBsYXllciA9IG5ldyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoY2xp
ZW50KTsKKyAgICBsYXllci0+c2V0Q29vcmRpbmF0b3IodGhpcyk7CisgICAgbV9yZWdpc3RlcmVk
TGF5ZXJzLmFkZChsYXllcik7CisgICAgbGF5ZXItPnNldENvbnRlbnRzU2NhbGUobV9jb250ZW50
c1NjYWxlKTsKKyAgICBsYXllci0+YWRqdXN0VmlzaWJsZVJlY3QoKTsKKyAgICByZXR1cm4gYWRv
cHRQdHIobGF5ZXIpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZVRp
bGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3Vy
ZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQorewor
ICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX21lc3NhZ2VDbGllbnQtPmNyZWF0
ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKTsKK30K
Kwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5
ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1
cGRhdGVJbmZvLCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCkKK3sKKyAgICBtX3Nob3VsZFN5bmNG
cmFtZSA9IHRydWU7CisgICAgbV9tZXNzYWdlQ2xpZW50LT51cGRhdGVUaWxlRm9yTGF5ZXIobGF5
ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbyk7Cit9CisKK3ZvaWQgQ29tcG9zaXRp
bmdDb29yZGluYXRvcjo6cmVtb3ZlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWlu
dDMyX3QgdGlsZUlEKQoreworICAgIGlmIChtX2lzUHVyZ2luZykKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX21lc3NhZ2VDbGllbnQtPnJlbW92
ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OmNyZWF0ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lELCBjb25zdCBTaGFyZWFibGVT
dXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBtX21lc3NhZ2VDbGllbnQtPmNyZWF0ZVVw
ZGF0ZUF0bGFzKGF0bGFzSUQsIGhhbmRsZSk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGlu
YXRvcjo6cmVtb3ZlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQpCit7CisgICAgaWYgKG1faXNQdXJn
aW5nKQorICAgICAgICByZXR1cm47CisgICAgbV9tZXNzYWdlQ2xpZW50LT5yZW1vdmVVcGRhdGVB
dGxhcyhhdGxhc0lEKTsKK30KKworRmxvYXRSZWN0IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnZp
c2libGVDb250ZW50c1JlY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX3Zpc2libGVDb250ZW50
c1JlY3Q7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJBbmltYXRp
b25zKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0
aW9ucyYgYW5pbWF0aW9ucykKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAg
R3JhcGhpY3NMYXllckFuaW1hdGlvbnMgYWN0aXZlQW5pbWF0aW9ucyA9IGFuaW1hdGlvbnMuZ2V0
QWN0aXZlQW5pbWF0aW9ucygpOworICAgIG1fbWVzc2FnZUNsaWVudC0+c2V0TGF5ZXJBbmltYXRp
b25zKGxheWVySUQsIGFjdGl2ZUFuaW1hdGlvbnMpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCBzY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKK3sKKyAgICBi
b29sIGNvbnRlbnRzUmVjdERpZENoYW5nZSA9IHJlY3QgIT0gbV92aXNpYmxlQ29udGVudHNSZWN0
OworICAgIGJvb2wgY29udGVudHNTY2FsZURpZENoYW5nZSA9IHNjYWxlICE9IG1fY29udGVudHNT
Y2FsZTsKKworICAgIC8vIEEgemVybyB0cmFqZWN0b3J5VmVjdG9yIGluZGljYXRlcyB0aGF0IHRp
bGVzIGFsbCBhcm91bmQgdGhlIHZpZXdwb3J0IGFyZSByZXF1ZXN0ZWQuCisgICAgdG9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKS0+c2V0
VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKTsKKwor
ICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFuZ2UgfHwgY29udGVudHNTY2FsZURpZENoYW5nZSkg
eworICAgICAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0OworICAgICAgICBtX2NvbnRl
bnRzU2NhbGUgPSBzY2FsZTsKKworICAgICAgICBIYXNoU2V0PENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcio+OjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7CisgICAgICAg
IGZvciAoSGFzaFNldDxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSBt
X3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAg
ICBpZiAoY29udGVudHNTY2FsZURpZENoYW5nZSkKKyAgICAgICAgICAgICAgICAoKml0KS0+c2V0
Q29udGVudHNTY2FsZShzY2FsZSk7CisgICAgICAgICAgICBpZiAoY29udGVudHNSZWN0RGlkQ2hh
bmdlKQorICAgICAgICAgICAgICAgICgqaXQpLT5hZGp1c3RWaXNpYmxlUmVjdCgpOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSkKKyAgICAgICAgbV9z
aG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUgPSB0cnVlOworCisgICAgc2NoZWR1bGVMYXll
ckZsdXNoKCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVuZGVyTmV4dEZy
YW1lKCkKK3sKKyAgICBtX3dhaXRpbmdGb3JSZW5kZXJlciA9IGZhbHNlOworICAgIHNjaGVkdWxl
TGF5ZXJGbHVzaCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFz
ZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fdXBkYXRlQXRsYXNlc1tpXS0+ZGlkU3dhcEJ1ZmZl
cnMoKTsKK30KKworYm9vbCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpsYXllclRyZWVUaWxlVXBk
YXRlc0FsbG93ZWQoKSBjb25zdAoreworICAgIHJldHVybiAhbV9pc1N1c3BlbmRlZCAmJiAhbV93
YWl0aW5nRm9yUmVuZGVyZXI7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cHVy
Z2VCYWNraW5nU3RvcmVzKCkKK3sKKyAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gcHVyZ2luZ1Rv
Z2dsZShtX2lzUHVyZ2luZywgdHJ1ZSk7CisKKyAgICBIYXNoU2V0PENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcio+OjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7CisgICAg
Zm9yIChIYXNoU2V0PENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IG1f
cmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICgqaXQp
LT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsKKworICAgIG1faW1hZ2VCYWNraW5ncy5jbGVhcigpOwor
ICAgIG1fdXBkYXRlQXRsYXNlcy5jbGVhcigpOworfQorCitQYXNzT3duUHRyPEdyYXBoaWNzQ29u
dGV4dD4gQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIHNpemUsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3MsIGludCYg
YXRsYXNJRCwgV2ViQ29yZTo6SW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBPd25QdHI8R3JhcGhp
Y3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQ7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkgeworICAgICAgICBVcGRhdGVBdGxhcyogYXRs
YXMgPSBtX3VwZGF0ZUF0bGFzZXNbaV0uZ2V0KCk7CisgICAgICAgIGlmIChhdGxhcy0+ZmxhZ3Mo
KSA9PSBmbGFncykgeworICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHJldHVybiBudWxsIGlmIHRo
ZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIgc3BhY2UuCisgICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQgPSBhdGxhcy0+YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGF0bGFzSUQsIHNp
emUsIG9mZnNldCk7CisgICAgICAgICAgICBpZiAoZ3JhcGhpY3NDb250ZXh0KQorICAgICAgICAg
ICAgICAgIHJldHVybiBncmFwaGljc0NvbnRleHQucmVsZWFzZSgpOworICAgICAgICB9CisgICAg
fQorCisgICAgc3RhdGljIGNvbnN0IGludCBTY3JhdGNoQnVmZmVyRGltZW5zaW9uID0gMTAyNDsg
Ly8gU2hvdWxkIGJlIGEgcG93ZXIgb2YgdHdvLgorICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBlbmQo
YWRvcHRQdHIobmV3IFVwZGF0ZUF0bGFzKHRoaXMsIFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24sIGZs
YWdzKSkpOworICAgIHNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpOworICAgIHJldHVy
biBtX3VwZGF0ZUF0bGFzZXMubGFzdCgpLT5iZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIo
YXRsYXNJRCwgc2l6ZSwgb2Zmc2V0KTsKK30KKworY29uc3QgZG91YmxlIFJlbGVhc2VJbmFjdGl2
ZUF0bGFzZXNUaW1lckludGVydmFsID0gMC41OworCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0
b3I6OnNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpCit7CisgICAgaWYgKCFtX3JlbGVh
c2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3JlbGVhc2VJbmFj
dGl2ZUF0bGFzZXNUaW1lci5zdGFydFJlcGVhdGluZyhSZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGlt
ZXJJbnRlcnZhbCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVsZWFzZUlu
YWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQoVGltZXI8Q29tcG9zaXRpbmdDb29yZGluYXRvcj4qKQor
eworICAgIC8vIFdlIGFsd2F5cyB3YW50IHRvIGtlZXAgb25lIGF0bGFzIGZvciBub24tY29tcG9z
aXRlZCBjb250ZW50LgorICAgIE93blB0cjxVcGRhdGVBdGxhcz4gYXRsYXNUb0tlZXBBbnl3YXk7
CisgICAgYm9vbCBmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgPSBmYWxz
ZTsKKyAgICBmb3IgKGludCBpID0gbV91cGRhdGVBdGxhc2VzLnNpemUoKSAtIDE7ICBpID49IDA7
IC0taSkgeworICAgICAgICBVcGRhdGVBdGxhcyogYXRsYXMgPSBtX3VwZGF0ZUF0bGFzZXNbaV0u
Z2V0KCk7CisgICAgICAgIGlmICghYXRsYXMtPmlzSW5Vc2UoKSkKKyAgICAgICAgICAgIGF0bGFz
LT5hZGRUaW1lSW5hY3RpdmUoUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2YWwpOwor
ICAgICAgICBib29sIHVzYWJsZUZvck5vbkNvbXBvc2l0ZWRDb250ZW50ID0gYXRsYXMtPmZsYWdz
KCkgPT0gU2hhcmVhYmxlQml0bWFwOjpOb0ZsYWdzOworICAgICAgICBpZiAoYXRsYXMtPmlzSW5h
Y3RpdmUoKSkgeworICAgICAgICAgICAgaWYgKCFmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9z
aXRlZENvbnRlbnQgJiYgIWF0bGFzVG9LZWVwQW55d2F5ICYmIHVzYWJsZUZvck5vbkNvbXBvc2l0
ZWRDb250ZW50KQorICAgICAgICAgICAgICAgIGF0bGFzVG9LZWVwQW55d2F5ID0gbV91cGRhdGVB
dGxhc2VzW2ldLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1fdXBkYXRlQXRsYXNlcy5yZW1vdmUo
aSk7CisgICAgICAgIH0gZWxzZSBpZiAodXNhYmxlRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQpCisg
ICAgICAgICAgICBmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgPSB0cnVl
OworICAgIH0KKworICAgIGlmICghZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250
ZW50ICYmIGF0bGFzVG9LZWVwQW55d2F5KQorICAgICAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5k
KGF0bGFzVG9LZWVwQW55d2F5LnJlbGVhc2UoKSk7CisKKyAgICBpZiAobV91cGRhdGVBdGxhc2Vz
LnNpemUoKSA8PSAxKQorICAgICAgICBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5zdG9w
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRp
bmdDb29yZGluYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI4MGM2NzJjZDQ2YjE1ZDFmZTVkZWExYmI1YjVh
Yzg1YjdmZTE1NGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmgKQEAg
LTAsMCArMSwxOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29t
cGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yX2gKKyNkZWZpbmUgQ29tcG9zaXRpbmdDb29yZGluYXRvcl9o
CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
LmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCIKKyNpbmNsdWRlICJVcGRh
dGVBdGxhcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NM
YXllckZhY3RvcnkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1RpbWVyLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCisjaWYgRU5BQkxFKENT
U19TSEFERVJTKQorI2luY2x1ZGUgPFdlYkNvcmUvRmlsdGVyT3BlcmF0aW9ucy5oPgorI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFBhZ2U7Cit9CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yIDogcHVibGljIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJDbGllbnQKKyAgICAsIHB1YmxpYyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJD
bGllbnQKKyAgICAsIHB1YmxpYyBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0b3IK
KyAgICAsIHB1YmxpYyBVcGRhdGVBdGxhc0NsaWVudAorICAgICwgcHVibGljIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJGYWN0b3J5IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8Q29tcG9zaXRpbmdDb29yZGluYXRvcj4gY3JlYXRlKFdlYkNvcmU6OlBh
Z2UqLCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yQ2xpZW50KiwgQ29tcG9zaXRpbmdDb29yZGluYXRv
ck1lc3NhZ2VDbGllbnQqKTsKKyAgICB2aXJ0dWFsIH5Db21wb3NpdGluZ0Nvb3JkaW5hdG9yKCk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgdmlydHVhbCB2
b2lkIHNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOworICAg
IHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNE
aXNwbGF5SW5SZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpOworCisgICAg
dm9pZCBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CisgICAgdm9pZCBkZXN0cm95UGFnZU92ZXJs
YXlMYXllcigpOworICAgIHZvaWQgc2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgc2V0UGFnZU92ZXJsYXlPcGFjaXR5KGZsb2F0KTsK
KworICAgIHZpcnR1YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IHRy
dWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVk
ID0gZmFsc2U7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZm9y
Y2VSZXBhaW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCBzY2FsZSwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRQb2ludCYpOworCisgICAgLy8gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50IDo6IENv
b3JkaW5hdGVkVGlsZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKENvb3JkaW5h
dGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShDb29y
ZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8m
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUo
Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQpOworCisgICAgLy8gQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyQ2xpZW50CisgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3Qgdmlz
aWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBsYXllclRyZWVUaWxl
VXBkYXRlc0FsbG93ZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKFdlYkNvcmU6OkltYWdl
KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVk
TGF5ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c3luY0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRp
bmF0ZWRMYXllcklEPiYpOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB2aXJ0dWFsIHZv
aWQgc3luY0xheWVyRmlsdGVycyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZp
bHRlck9wZXJhdGlvbnMmKTsKKyNlbmRpZgorI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpQ
bGF0Zm9ybUxheWVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN5bmNDYW52YXMoQ29v
cmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIGRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEKSBPVkVSUklERTsK
KyNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRM
YXllcklELCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOworCisgICAg
dmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ciopOworICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKTsKKyAgICB2aXJ0dWFsIFBh
c3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MsIGludCYgYXRsYXNJ
RCwgV2ViQ29yZTo6SW50UG9pbnQmKTsKKworICAgIC8vIFVwZGF0ZUF0bGFzQ2xpZW50CisgICAg
dmlydHVhbCB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lELCBjb25zdCBTaGFyZWFi
bGVTdXJmYWNlOjpIYW5kbGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXMo
aW50IGF0bGFzSUQpOworCisgICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKKyAgICB2b2lkIHB1
cmdlQmFja2luZ1N0b3JlcygpOworCisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogcm9vdEdy
YXBoaWNzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQorCitwcml2
YXRlOgorICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3IoV2ViQ29yZTo6UGFnZSosIENvbXBvc2l0
aW5nQ29vcmRpbmF0b3JDbGllbnQqLCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVu
dCopOworCisgICAgLy8gR3JhcGhpY3NMYXllckNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUg
dGltZSk7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciopOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
Y2xpcFJlY3QpOworCisgICAgLy8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5hdG9y
CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIGNvbnN0IFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7CisKKyAg
ICB2b2lkIGZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKTsKKworICAgIC8vIEdyYXBo
aWNzTGF5ZXJGYWN0b3J5CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI+IGNyZWF0ZUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCop
IE9WRVJSSURFOworCisgICAgLy8gQ29tcG9zaXRpbmdDb29yZGluYXRvcgorICAgIGJvb2wgZmx1
c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7CisgICAgdm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVz
aCgpOworICAgIHZvaWQgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKKyAgICB2b2lkIHN5
bmNEaXNwbGF5U3RhdGUoKTsKKyAgICB2b2lkIGxvY2tBbmltYXRpb25zKCk7CisgICAgdm9pZCB1
bmxvY2tBbmltYXRpb25zKCk7CisKKyAgICB2b2lkIGxheWVyRmx1c2hUaW1lckZpcmVkKFdlYkNv
cmU6OlRpbWVyPENvbXBvc2l0aW5nQ29vcmRpbmF0b3I+Kik7CisKKyAgICB2b2lkIHNjaGVkdWxl
UmVsZWFzZUluYWN0aXZlQXRsYXNlcygpOworCisgICAgdm9pZCByZWxlYXNlSW5hY3RpdmVBdGxh
c2VzVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiopOwor
CisgICAgV2ViQ29yZTo6UGFnZSogbV9wYWdlOworICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3JD
bGllbnQqIG1fY2xpZW50OworICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50
KiBtX21lc3NhZ2VDbGllbnQ7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4g
bV9yb290TGF5ZXI7CisKKyAgICAvLyBUaGUgbGF5ZXIgd2hpY2ggY29udGFpbnMgYWxsIG5vbi1j
b21wb3NpdGVkIGNvbnRlbnQuCisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcjsKKworICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgbGF5
ZXIuIFdpbGwgYmUgbnVsbCBpZiB0aGVyZSdzIG5vIHBhZ2Ugb3ZlcmxheS4KKyAgICBPd25QdHI8
V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9wYWdlT3ZlcmxheUxheWVyOworCisgICAgSGFzaFNl
dDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiBtX3JlZ2lzdGVyZWRMYXllcnM7
CisgICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4gbV9kZXRhY2hlZExheWVyczsKKyAgICB0
eXBlZGVmIEhhc2hNYXA8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUmVmUHRyPENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nPiA+IEltYWdlQmFja2luZ01hcDsKKyAgICBJbWFnZUJhY2tpbmdNYXAg
bV9pbWFnZUJhY2tpbmdzOworICAgIFZlY3RvcjxPd25QdHI8VXBkYXRlQXRsYXM+ID4gbV91cGRh
dGVBdGxhc2VzOworCisgICAgYm9vbCBtX2lzVmFsaWQ7CisgICAgLy8gV2UgZG9uJ3Qgc2VuZCB0
aGUgbWVzc2FnZXMgcmVsYXRlZCB0byByZWxlYXNpbmcgcmVzb3VyY2VzIHRvIHJlbmRlcmVyIGR1
cmluZyBwdXJnaW5nLCBiZWNhdXNlIHJlbmRlcmVyIGFscmVhZHkgaGFkIHJlbW92ZWQgYWxsIHJl
c291cmNlcy4KKyAgICBib29sIG1faXNQdXJnaW5nOworCisgICAgYm9vbCBtX3dhaXRpbmdGb3JS
ZW5kZXJlcjsKKyAgICBib29sIG1faXNTdXNwZW5kZWQ7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0
IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7CisgICAg
Ym9vbCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZTsKKworICAgIGJvb2wgbV9zaG91
bGRTeW5jRnJhbWU7CisgICAgYm9vbCBtX3Nob3VsZFN5bmNSb290TGF5ZXI7CisgICAgV2ViQ29y
ZTo6VGltZXI8Q29tcG9zaXRpbmdDb29yZGluYXRvcj4gbV9sYXllckZsdXNoVGltZXI7CisgICAg
V2ViQ29yZTo6VGltZXI8Q29tcG9zaXRpbmdDb29yZGluYXRvcj4gbV9yZWxlYXNlSW5hY3RpdmVB
dGxhc2VzVGltZXI7CisgICAgYm9vbCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZDsKKyAg
ICB1aW50NjRfdCBtX2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJRDsKKyAgICBib29sIG1fYW5p
bWF0aW9uc0xvY2tlZDsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZiAvLyBDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3JDbGllbnQuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
bXBvc2l0aW5nQ29vcmRpbmF0b3JDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ODVmYWI0OGI0YjEwMjRj
YzZjZTUzMjIzYzA2MzVkNmY3ZjdiMDVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29y
ZGluYXRvckNsaWVudC5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgQ29tcG9zaXRpbmdDb29yZGluYXRvckNsaWVudF9oCisjZGVmaW5lIENvbXBvc2l0aW5n
Q29vcmRpbmF0b3JDbGllbnRfaAorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisj
aW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIKKyNpbmNsdWRlICJTaGFyZWFibGVTdXJm
YWNlLmgiCisjaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24u
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFNp
emUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCisjaWYgVVNFKEdSQVBISUNTX1NV
UkZBQ0UpCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1N1cmZhY2VUb2tlbi5oPgorI2VuZGlm
CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisjaW5jbHVkZSA8V2ViQ29yZS9GaWx0ZXJPcGVy
YXRpb24uaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgQ29tcG9zaXRp
bmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBz
ZXRSb290Q29tcG9zaXRpbmdMYXllcihDb29yZGluYXRlZExheWVySUQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29u
c3QgQ29vcmRpbmF0ZWRMYXllckluZm8mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldENvbXBv
c2l0aW5nTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxDb29y
ZGluYXRlZExheWVySUQ+JikgPSAwOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBj
b25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJikgPSAwOworI2VuZGlmCisgICAgdmlydHVh
bCB2b2lkIGRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEKSA9IDA7CisK
KyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCwg
dWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgU3VyZmFjZVVw
ZGF0ZUluZm8mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGVGb3JMYXllcihDb29y
ZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYs
IGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVU
aWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQpID0gMDsKKwor
ICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCwgY29uc3QgU2hh
cmVhYmxlU3VyZmFjZTo6SGFuZGxlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRh
dGVBdGxhcyhpbnQgYXRsYXNJRCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUltYWdl
QmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBjb25zdCBTaGFy
ZWFibGVTdXJmYWNlOjpIYW5kbGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFySW1hZ2VC
YWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIGRpZFJlbmRlckZyYW1lKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIGNvbnRlbnRzU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY292ZXJlZFJlY3QpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludCYgcG9zaXRpb24pID0gMDsKKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNF
KQorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4m
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCB1
aW50MzJfdCBmcm9udEJ1ZmZlcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95Q2FudmFz
KENvb3JkaW5hdGVkTGF5ZXJJRCkgPSAwOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckFuaW1hdGlvbnMmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEFuaW1hdGlvbnNM
b2NrZWQoYm9vbCkgPSAwOworfTsKKworY2xhc3MgQ29tcG9zaXRpbmdDb29yZGluYXRvckNsaWVu
dCB7CitwdWJsaWM6CisgICAgdmlydHVhbCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiB2aWV3U2l6
ZSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRQZXJmb3JtU2NoZWR1bGVkTGF5
ZXJGbHVzaChib29sIGRpZFN5bmMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0SWZOZWVk
ZWQoKSA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNPcGFxdWVDb250ZW50cygpID0gMDsKKwor
ICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHBhaW50T3ZlcmxheUNvbnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KSA9IDA7Cit9OworCit9CisjZW5kaWYKKworI2VuZGlm
IC8vIENvbXBvc2l0aW5nQ29vcmRpbmF0b3JDbGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29v
cmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCmluZGV4IGJmNjdlYWRmZDhjNGI5
YWE5MzIyY2E3MmY3MTQxNDA5NGNmOTlmOTguLjA1M2UzNGNmYWQ1MjcxOTdhOTdlZjcwMWZmZWIx
MjY2NGQxNjJhZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVDb29yZGluYXRvci5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAx
MSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMzIgKzMwLDEwIEBACiAjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQogI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yLmgi
CiAKLSNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCIKICNpbmNs
dWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYUlt
cGwuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJMYXllclRyZWVD
b29yZGluYXRvclByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJNZXNzYWdlSUQuaCIKLSNpbmNs
dWRlICJTdXJmYWNlVXBkYXRlSW5mby5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVy
cy5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdl
cy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1l
Vmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9QYWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNraW5nLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5k
ZXJMYXllckNvbXBvc2l0b3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllci5oPgotI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KLQot
I2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQ
cm9ncmFtLmgiCi0jaW5jbHVkZSAiVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgiCi0j
ZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTY3LDg5ICs0NiwzMyBAQCBQ
YXNzUmVmUHRyPExheWVyVHJlZUNvb3JkaW5hdG9yPiBMYXllclRyZWVDb29yZGluYXRvcjo6Y3Jl
YXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCiAKIExheWVyVHJlZUNvb3JkaW5hdG9yOjp+TGF5ZXJUcmVl
Q29vcmRpbmF0b3IoKQogewotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBkaXNjb25uZWN0
Q3VzdG9tRmlsdGVyUHJvZ3JhbXMoKTsKLSNlbmRpZgotCi0gICAgLy8gUHJldmVudCBzZXRDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQoMCkgLT4gZGV0YWNoTGF5ZXIoKSBmcm9tIG1vZGlm
eWluZyB0aGUgc2V0IHdoaWxlIHdlIGl0ZXJhdGUgaXQuCi0gICAgSGFzaFNldDxXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiByZWdpc3RlcmVkTGF5ZXJzOwotICAgIHJlZ2lzdGVy
ZWRMYXllcnMuc3dhcChtX3JlZ2lzdGVyZWRMYXllcnMpOwotCi0gICAgSGFzaFNldDxXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0gcmVnaXN0ZXJlZExh
eWVycy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5zZXRDb29yZGluYXRvcigwKTsKIH0KIAogTGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OkxheWVyVHJlZUNvb3JkaW5hdG9yKFdlYlBhZ2UqIHdlYlBhZ2UpCiAg
ICAgOiBMYXllclRyZWVIb3N0KHdlYlBhZ2UpCiAgICAgLCBtX25vdGlmeUFmdGVyU2NoZWR1bGVk
TGF5ZXJGbHVzaChmYWxzZSkKLSAgICAsIG1faXNWYWxpZCh0cnVlKQotICAgICwgbV9pc1B1cmdp
bmcoZmFsc2UpCi0gICAgLCBtX3dhaXRpbmdGb3JVSVByb2Nlc3ModHJ1ZSkKLSAgICAsIG1faXNT
dXNwZW5kZWQoZmFsc2UpCi0gICAgLCBtX2NvbnRlbnRzU2NhbGUoMSkKLSAgICAsIG1fc2hvdWxk
U2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlKHRydWUpCi0gICAgLCBtX3Nob3VsZFN5bmNGcmFtZShm
YWxzZSkKLSAgICAsIG1fc2hvdWxkU3luY1Jvb3RMYXllcih0cnVlKQotICAgICwgbV9sYXllckZs
dXNoVGltZXIodGhpcywgJkxheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllckZsdXNoVGltZXJGaXJl
ZCkKLSAgICAsIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyKHRoaXMsICZMYXllclRyZWVD
b29yZGluYXRvcjo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQpCi0gICAgLCBtX2xh
eWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCh0cnVlKQogICAgICwgbV9mb3JjZVJlcGFpbnRBc3lu
Y0NhbGxiYWNrSUQoMCkKLSAgICAsIG1fYW5pbWF0aW9uc0xvY2tlZChmYWxzZSkKLXsKLSAgICAv
LyBDcmVhdGUgYSByb290IGxheWVyLgotICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6
Y3JlYXRlKHRoaXMsIHRoaXMpOwotICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogY29vcmRp
bmF0ZWRSb290TGF5ZXIgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5n
ZXQoKSk7Ci0gICAgY29vcmRpbmF0ZWRSb290TGF5ZXItPnNldFJvb3RMYXllcih0cnVlKTsKLSNp
Zm5kZWYgTkRFQlVHCi0gICAgbV9yb290TGF5ZXItPnNldE5hbWUoIkxheWVyVHJlZUNvb3JkaW5h
dG9yIHJvb3QgbGF5ZXIiKTsKLSNlbmRpZgotICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRl
bnQoZmFsc2UpOwotICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsK
LSAgICBtX2xheWVyVHJlZUNvbnRleHQuY29vcmRpbmF0ZWRMYXllcklEID0gdG9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIoY29vcmRpbmF0ZWRSb290TGF5ZXIpLT5pZCgpOwotCi0gICAgbV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMsIHRoaXMp
OwotI2lmbmRlZiBOREVCVUcKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5h
bWUoIkxheWVyVHJlZUNvb3JkaW5hdG9yIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQiKTsKLSNlbmRp
ZgotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUp
OwotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNp
emUoKSk7Cit7CisgICAgbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudCA9IFdl
YkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpjcmVhdGUobV93ZWJQYWdlKTsK
KyAgICBtX2NvbXBvc2l0aW5nQ29vcmRpbmF0b3IgPSBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpj
cmVhdGUobV93ZWJQYWdlLT5jb3JlUGFnZSgpLCB0aGlzLCBtX2NvbXBvc2l0aW5nQ29vcmRpbmF0
b3JNZXNzYWdlQ2xpZW50LmdldCgpKTsKIAotICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpOworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllciogcm9vdExheWVyID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9jb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yLT5yb290R3JhcGhpY3NMYXllcigpKTsKKyAgICBtX2xheWVyVHJlZUNvbnRl
eHQuY29vcmRpbmF0ZWRMYXllcklEID0gcm9vdExheWVyLT5pZCgpOwogCiAgICAgaWYgKG1fd2Vi
UGFnZS0+aGFzUGFnZU92ZXJsYXkoKSkKLSAgICAgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigp
OworICAgICAgICBtX2NvbXBvc2l0aW5nQ29vcmRpbmF0b3ItPmNyZWF0ZVBhZ2VPdmVybGF5TGF5
ZXIoKTsKIAogICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwogfQogCiB2b2lkIExheWVyVHJlZUNv
b3JkaW5hdG9yOjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCBsYXllckZsdXNo
aW5nRW5hYmxlZCkKIHsKLSAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPT0g
bGF5ZXJGbHVzaGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbGF5ZXJGbHVz
aFNjaGVkdWxpbmdFbmFibGVkID0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQ7Ci0KLSAgICBpZiAobV9s
YXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpIHsKLSAgICAgICAgc2NoZWR1bGVMYXllckZsdXNo
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVz
aCgpOworICAgIG1fY29tcG9zaXRpbmdDb29yZGluYXRvci0+c2V0TGF5ZXJGbHVzaFNjaGVkdWxp
bmdFbmFibGVkKGxheWVyRmx1c2hpbmdFbmFibGVkKTsKIH0KIAogdm9pZCBMYXllclRyZWVDb29y
ZGluYXRvcjo6c2NoZWR1bGVMYXllckZsdXNoKCkKIHsKLSAgICBpZiAoIW1fbGF5ZXJGbHVzaFNj
aGVkdWxpbmdFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fbGF5ZXJGbHVz
aFRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hv
dCgwKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6Y2FuY2VsUGVuZGluZ0xheWVy
Rmx1c2goKQotewotICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0b3AoKTsKKyAgICBtX2NvbXBvc2l0
aW5nQ29vcmRpbmF0b3ItPnNjaGVkdWxlTGF5ZXJGbHVzaCgpOwogfQogCiB2b2lkIExheWVyVHJl
ZUNvb3JkaW5hdG9yOjpzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNo
KGJvb2wgbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKQpAQCAtMTU5LDMwICs4MiwxNyBA
QCB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hl
ZHVsZWRMYXllckZsdXNoKGJvb2wgbm90aQogCiB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpz
ZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xh
eWVyKQogewotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+cmVtb3ZlQWxsQ2hpbGRy
ZW4oKTsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldENvbnRlbnRzT3BhcXVl
KG1fd2ViUGFnZS0+ZHJhd3NCYWNrZ3JvdW5kKCkgJiYgIW1fd2ViUGFnZS0+ZHJhd3NUcmFuc3Bh
cmVudEJhY2tncm91bmQoKSk7Ci0KLSAgICAvLyBBZGQgdGhlIGFjY2VsZXJhdGVkIGxheWVyIHRy
ZWUgaGllcmFyY2h5LgotICAgIGlmIChncmFwaGljc0xheWVyKQotICAgICAgICBtX25vbkNvbXBv
c2l0ZWRDb250ZW50TGF5ZXItPmFkZENoaWxkKGdyYXBoaWNzTGF5ZXIpOworICAgIG1fY29tcG9z
aXRpbmdDb29yZGluYXRvci0+c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoZ3JhcGhpY3NMYXllcik7
CiB9CiAKIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmludmFsaWRhdGUoKQogewotICAgIGNh
bmNlbFBlbmRpbmdMYXllckZsdXNoKCk7Ci0KLSAgICBBU1NFUlQobV9pc1ZhbGlkKTsKLSAgICBt
X3Jvb3RMYXllciA9IG51bGxwdHI7Ci0gICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgbV9jb21w
b3NpdGluZ0Nvb3JkaW5hdG9yLT5pbnZhbGlkYXRlKCk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OnNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHJlY3QpCiB7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5z
ZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikK
LSAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7
Ci0KLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICBtX2NvbXBvc2l0aW5nQ29vcmRpbmF0
b3ItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKIH0KIAogdm9pZCBMYXllclRyZWVDb29y
ZGluYXRvcjo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIC8qIHNjcm9sbE9mZnNldCAq
LykKQEAgLTE5MiwxNCArMTAyLDcgQEAgdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2Nyb2xs
Tm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHMKIAogdm9pZCBM
YXllclRyZWVDb29yZGluYXRvcjo6Zm9yY2VSZXBhaW50KCkKIHsKLSAgICAvLyBUaGlzIGlzIG5l
Y2Vzc2FyeSBmb3IgcnVubmluZyBsYXlvdXQgdGVzdHMuIFNpbmNlIGluIHRoaXMgY2FzZSB3ZSBh
cmUgbm90IHdhaXRpbmcgZm9yIGEgVUlQcm9jZXNzIHRvIHJlcGx5IG5pY2VseS4KLSAgICAvLyBJ
bnN0ZWFkIHdlIGFyZSBqdXN0IHRyaWdnZXJpbmcgZm9yY2VSZXBhaW50LiBCdXQgd2Ugc3RpbGwg
d2FudCB0byBoYXZlIHRoZSBzY3JpcHRlZCBhbmltYXRpb24gY2FsbGJhY2tzIGJlaW5nIGV4ZWN1
dGVkLgotICAgIHN5bmNEaXNwbGF5U3RhdGUoKTsKLQotICAgIC8vIFdlIG5lZWQgdG8gc2NoZWR1
bGUgYW5vdGhlciBmbHVzaCwgb3RoZXJ3aXNlIHRoZSBmb3JjZWQgcGFpbnQgbWlnaHQgY2FuY2Vs
IGEgbGF0ZXIgZXhwZWN0ZWQgZmx1c2guCi0gICAgLy8gVGhpcyBpcyBhbGlnbmVkIHdpdGggTGF5
ZXJUcmVlSG9zdENBLgotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgIGZsdXNoUGVuZGlu
Z0xheWVyQ2hhbmdlcygpOworICAgIG1fY29tcG9zaXRpbmdDb29yZGluYXRvci0+Zm9yY2VSZXBh
aW50KCk7CiB9CiAKIGJvb2wgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmZvcmNlUmVwYWludEFzeW5j
KHVpbnQ2NF90IGNhbGxiYWNrSUQpCkBAIC0yMTMsNDI1ICsxMTYsNzcgQEAgYm9vbCBMYXllclRy
ZWVDb29yZGluYXRvcjo6Zm9yY2VSZXBhaW50QXN5bmModWludDY0X3QgY2FsbGJhY2tJRCkKIAog
dm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBuZXdTaXplKQogewotICAgIGlmIChtX3Jvb3RMYXllci0+c2l6ZSgpID09IG5ld1Np
emUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG5ld1NpemUp
OwotCi0gICAgLy8gSWYgdGhlIG5ld1NpemUgZXhwb3NlcyBuZXcgYXJlYXMgb2YgdGhlIG5vbi1j
b21wb3NpdGVkIGNvbnRlbnQgYSBzZXROZWVkc0Rpc3BsYXkgaXMgbmVlZGVkCi0gICAgLy8gZm9y
IHRob3NlIG5ld2x5IGV4cG9zZWQgYXJlYXMuCi0gICAgRmxvYXRTaXplIG9sZFNpemUgPSBtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKTsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250
ZW50TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7Ci0KLSAgICBpZiAobmV3U2l6ZS53aWR0aCgpID4g
b2xkU2l6ZS53aWR0aCgpKSB7Ci0gICAgICAgIGZsb2F0IGhlaWdodCA9IHN0ZDo6bWluKHN0YXRp
Y19jYXN0PGZsb2F0PihuZXdTaXplLmhlaWdodCgpKSwgb2xkU2l6ZS5oZWlnaHQoKSk7Ci0gICAg
ICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZs
b2F0UmVjdChvbGRTaXplLndpZHRoKCksIDAsIG5ld1NpemUud2lkdGgoKSAtIG9sZFNpemUud2lk
dGgoKSwgaGVpZ2h0KSk7Ci0gICAgfQotCi0gICAgaWYgKG5ld1NpemUuaGVpZ2h0KCkgPiBvbGRT
aXplLmhlaWdodCgpKQotICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5l
ZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3QoMCwgb2xkU2l6ZS5oZWlnaHQoKSwgbmV3U2l6ZS53
aWR0aCgpLCBuZXdTaXplLmhlaWdodCgpIC0gb2xkU2l6ZS5oZWlnaHQoKSkpOwotCi0gICAgaWYg
KG1fcGFnZU92ZXJsYXlMYXllcikKLSAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRTaXpl
KG5ld1NpemUpOwotCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgbV9jb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yLT5zaXplRGlkQ2hhbmdlKG5ld1NpemUpOwogfQogCiB2b2lkIExheWVyVHJl
ZUNvb3JkaW5hdG9yOjpkaWRJbnN0YWxsUGFnZU92ZXJsYXkoKQogewotICAgIGNyZWF0ZVBhZ2VP
dmVybGF5TGF5ZXIoKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICBtX2NvbXBvc2l0
aW5nQ29vcmRpbmF0b3ItPmNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKIH0KIAogdm9pZCBMYXll
clRyZWVDb29yZGluYXRvcjo6ZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkoKQogewotICAgIGRlc3Ry
b3lQYWdlT3ZlcmxheUxheWVyKCk7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgbV9j
b21wb3NpdGluZ0Nvb3JkaW5hdG9yLT5kZXN0cm95UGFnZU92ZXJsYXlMYXllcigpOwogfQogCiB2
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQogewotICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5
ZXIpOwotICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3Qp
OwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIG1fY29tcG9zaXRpbmdDb29yZGluYXRv
ci0+c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkocmVjdCk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OnNldFBhZ2VPdmVybGF5T3BhY2l0eShmbG9hdCB2YWx1ZSkKIHsKLSAgICBB
U1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE9w
YWNpdHkodmFsdWUpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIG1fY29tcG9zaXRp
bmdDb29yZGluYXRvci0+c2V0UGFnZU92ZXJsYXlPcGFjaXR5KHZhbHVlKTsKIH0KIAotYm9vbCBM
YXllclRyZWVDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKK3ZvaWQgTGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OnBhdXNlUmVuZGVyaW5nKCkKIHsKLSAgICBpZiAobV93YWl0aW5n
Rm9yVUlQcm9jZXNzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3Jvb3RMYXllci0+
Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotICAgIG1fbm9uQ29tcG9z
aXRlZENvbnRlbnRMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgp
OwotICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCi0gICAgICAgIG1fcGFnZU92ZXJsYXlMYXll
ci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotCi0gICAgYm9vbCBk
aWRTeW5jID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5mbHVz
aENvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsKLQotICAgIGZsdXNoUGVuZGlu
Z0ltYWdlQmFja2luZ0NoYW5nZXMoKTsKLQotICAgIGlmIChtX3Nob3VsZFN5bmNSb290TGF5ZXIp
IHsKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRv
clByb3h5OjpTZXRSb290Q29tcG9zaXRpbmdMYXllcih0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cihtX3Jvb3RMYXllci5nZXQoKSktPmlkKCkpKTsKLSAgICAgICAgbV9zaG91bGRTeW5jUm9vdExh
eWVyID0gZmFsc2U7Ci0gICAgICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGV0YWNoZWRMYXllcnMuc2l6ZSgpOyArK2kp
Ci0gICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eTo6RGVsZXRlQ29tcG9zaXRpbmdMYXllcihtX2RldGFjaGVkTGF5ZXJzW2ldKSk7Ci0gICAg
bV9kZXRhY2hlZExheWVycy5jbGVhcigpOwotCi0gICAgaWYgKG1fc2hvdWxkU3luY0ZyYW1lKSB7
Ci0gICAgICAgIGRpZFN5bmMgPSB0cnVlOwotCi0gICAgICAgIEludFNpemUgY29udGVudHNTaXpl
ID0gcm91bmRlZEludFNpemUobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCkpOwot
ICAgICAgICBJbnRSZWN0IGNvdmVyZWRSZWN0ID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIo
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKS0+Y292ZXJSZWN0KCk7Ci0gICAgICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6RGlk
UmVuZGVyRnJhbWUoY29udGVudHNTaXplLCBjb3ZlcmVkUmVjdCkpOwotICAgICAgICBtX3dhaXRp
bmdGb3JVSVByb2Nlc3MgPSB0cnVlOwotICAgICAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IGZhbHNl
OwotICAgIH0gZWxzZQotICAgICAgICB1bmxvY2tBbmltYXRpb25zKCk7Ci0KLSAgICBpZiAobV9m
b3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQpIHsKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFjayhtX2ZvcmNlUmVwYWludEFzeW5jQ2Fs
bGJhY2tJRCkpOwotICAgICAgICBtX2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJRCA9IDA7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGRpZFN5bmM7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OnN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29vcmRpbmF0
ZWRMYXllckluZm8mIGluZm8pCi17Ci0gICAgaWYgKG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9u
VXBkYXRlKSB7Ci0gICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eTo6RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24obV92aXNpYmxlQ29udGVudHNS
ZWN0LmxvY2F0aW9uKCkpKTsKLSAgICAgICAgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRh
dGUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRD
b21wb3NpdGluZ0xheWVyU3RhdGUoaWQsIGluZm8pKTsKKyAgICBtX2NvbXBvc2l0aW5nQ29vcmRp
bmF0b3ItPnBhdXNlUmVuZGVyaW5nKCk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OnN5bmNMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9yPENv
b3JkaW5hdGVkTGF5ZXJJRD4mIGNoaWxkcmVuKQordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6
cmVzdW1lUmVuZGVyaW5nKCkKIHsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRD
b21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oaWQsIGNoaWxkcmVuKSk7CisgICAgbV9jb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yLT5yZXN1bWVSZW5kZXJpbmcoKTsKIH0KIAotI2lmIFVTRShHUkFQSElDU19T
VVJGQUNFKQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6Y3JlYXRlQ2FudmFzKENvb3JkaW5h
dGVkTGF5ZXJJRCBpZCwgUGxhdGZvcm1MYXllciogY2FudmFzUGxhdGZvcm1MYXllcikKK2NvbnN0
IEludFNpemUmIExheWVyVHJlZUNvb3JkaW5hdG9yOjp2aWV3U2l6ZSgpIGNvbnN0CiB7Ci0gICAg
bV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIEdyYXBoaWNzU3VyZmFjZVRva2VuIHRva2Vu
ID0gY2FudmFzUGxhdGZvcm1MYXllci0+Z3JhcGhpY3NTdXJmYWNlVG9rZW4oKTsKLSAgICBJbnRT
aXplIGNhbnZhc1NpemUgPSBjYW52YXNQbGF0Zm9ybUxheWVyLT5wbGF0Zm9ybUxheWVyU2l6ZSgp
OwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eTo6Q3JlYXRlQ2FudmFzKGlkLCBjYW52YXNTaXplLCB0b2tlbikpOworICAgIHJldHVybiBtX3dl
YlBhZ2UtPnNpemUoKTsKIH0KIAotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0NhbnZh
cyhDb29yZGluYXRlZExheWVySUQgaWQsIFBsYXRmb3JtTGF5ZXIqIGNhbnZhc1BsYXRmb3JtTGF5
ZXIpCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXlvdXRJZk5lZWRlZCgpCiB7Ci0gICAg
bV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIHVpbnQzMl90IGZyb250QnVmZmVyID0gY2Fu
dmFzUGxhdGZvcm1MYXllci0+Y29weVRvR3JhcGhpY3NTdXJmYWNlKCk7Ci0gICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTeW5jQ2FudmFzKGlk
LCBmcm9udEJ1ZmZlcikpOworICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKIH0KIAot
dm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVy
SUQgaWQpCitib29sIExheWVyVHJlZUNvb3JkaW5hdG9yOjppc09wYXF1ZUNvbnRlbnRzKCkKIHsK
LSAgICBpZiAobV9pc1B1cmdpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2hvdWxkU3lu
Y0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk6OkRlc3Ryb3lDYW52YXMoaWQpKTsKKyAgICByZXR1cm4gbV93ZWJQYWdl
LT5kcmF3c0JhY2tncm91bmQoKSAmJiAhbV93ZWJQYWdlLT5kcmF3c1RyYW5zcGFyZW50QmFja2dy
b3VuZCgpOwogfQotI2VuZGlmCiAKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi12b2lkIExheWVy
VHJlZUNvb3JkaW5hdG9yOjpzeW5jTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwg
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OmRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKGJvb2wgZGlkU3luYykKIHsKLSAgICBt
X3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIGNo
ZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoZmlsdGVycyk7Ci0jZW5kaWYKLSAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldENvbXBv
c2l0aW5nTGF5ZXJGaWx0ZXJzKGlkLCBmaWx0ZXJzKSk7Ci19Ci0jZW5kaWYKLQotI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNoZWNrQ3VzdG9tRmls
dGVyUHJvZ3JhbVByb3hpZXMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKLXsKLSAg
ICAvLyBXZSBuZWVkIHRvIGNyZWF0ZSB0aGUgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5IG9i
amVjdHMgYmVmb3JlIHdlIGdldCB0byBzZXJpYWxpemUgdGhlCi0gICAgLy8gY3VzdG9tIGZpbHRl
cnMgdG8gdGhlIG90aGVyIHByb2Nlc3MuIFRoYXQncyBiZWNhdXNlIFdlYkN1c3RvbUZpbHRlclBy
b2dyYW1Qcm94eSBuZWVkcwotICAgIC8vIHRvIGxpbmsgYmFjayB0byB0aGUgY29vcmRpbmF0b3Is
IHNvIHRoYXQgd2UgY2FuIHNlbmQgYSBtZXNzYWdlIHRvIHRoZSBVSSBwcm9jZXNzIHdoZW4gCi0g
ICAgLy8gdGhlIHByb2dyYW0gaXMgbm90IG5lZWRlZCBhbnltb3JlLgotICAgIC8vIE5vdGUgdGhh
dCB0aGUgc2VyaWFsaXphdGlvbiB3aWxsIG9ubHkgaGFwcGVuIGF0IGEgbGF0ZXIgdGltZSBpbiBB
cmd1bWVudENvZGVyPFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM+OjplbmNvZGUuCi0gICAgLy8g
QXQgdGhhdCBwb2ludCB0aGUgcHJvZ3JhbSB3aWxsIG9ubHkgYmUgc2VyaWFsaXplZCBvbmNlLiBB
bGwgdGhlIG90aGVyIHRpbWVzIGl0IHdpbGwgb25seSB1c2UgdGhlIElEIG9mIHRoZSBwcm9ncmFt
LgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsdGVycy5zaXplKCk7ICsraSkgewotICAg
ICAgICBjb25zdCBGaWx0ZXJPcGVyYXRpb24qIG9wZXJhdGlvbiA9IGZpbHRlcnMuYXQoaSk7Ci0g
ICAgICAgIGlmIChvcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSAhPSBGaWx0ZXJPcGVyYXRp
b246OlZBTElEQVRFRF9DVVNUT00pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY29u
c3QgVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKiBjdXN0b21PcGVyYXRpb24gPSBzdGF0
aWNfY2FzdDxjb25zdCBWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24qPihvcGVyYXRpb24p
OwotICAgICAgICBBU1NFUlQoY3VzdG9tT3BlcmF0aW9uLT52YWxpZGF0ZWRQcm9ncmFtKCktPmlz
SW5pdGlhbGl6ZWQoKSk7Ci0gICAgICAgIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUNvbXBpbGVkUHJv
Z3JhbSogcHJvZ3JhbSA9IGN1c3RvbU9wZXJhdGlvbi0+dmFsaWRhdGVkUHJvZ3JhbSgpLT5wbGF0
Zm9ybUNvbXBpbGVkUHJvZ3JhbSgpOwotICAgICAgICAKLSAgICAgICAgUmVmUHRyPFdlYkN1c3Rv
bUZpbHRlclByb2dyYW1Qcm94eT4gY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5OwotICAgICAgICBp
ZiAocHJvZ3JhbS0+Y2xpZW50KCkpCi0gICAgICAgICAgICBjdXN0b21GaWx0ZXJQcm9ncmFtUHJv
eHkgPSBzdGF0aWNfY2FzdDxXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkqPihwcm9ncmFtLT5j
bGllbnQoKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgY3VzdG9tRmlsdGVyUHJvZ3Jh
bVByb3h5ID0gV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5OjpjcmVhdGUoKTsKLSAgICAgICAg
ICAgIHByb2dyYW0tPnNldENsaWVudChjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIWN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+Y2xp
ZW50KCkpIHsKLSAgICAgICAgICAgIGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+c2V0Q2xpZW50
KHRoaXMpOwotICAgICAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVD
b29yZGluYXRvclByb3h5OjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGN1c3RvbUZpbHRlclBy
b2dyYW1Qcm94eS0+aWQoKSwgY3VzdG9tT3BlcmF0aW9uLT52YWxpZGF0ZWRQcm9ncmFtKCktPnZh
bGlkYXRlZFByb2dyYW1JbmZvKCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8v
IElmIHRoZSBjbGllbnQgd2FzIG5vdCBkaXNjb25uZWN0ZWQgdGhlbiB0aGlzIGNvb3JkaW5hdG9y
IG11c3QgYmUgdGhlIGNsaWVudCBmb3IgaXQuCi0gICAgICAgICAgICBBU1NFUlQoY3VzdG9tRmls
dGVyUHJvZ3JhbVByb3h5LT5jbGllbnQoKSA9PSB0aGlzKTsKLSAgICAgICAgfQorICAgIGlmICht
X2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJRCkgeworICAgICAgICBtX2NvbXBvc2l0aW5nQ29v
cmRpbmF0b3JNZXNzYWdlQ2xpZW50LT5pbnZva2VGb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrKG1f
Zm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEKTsKKyAgICAgICAgbV9mb3JjZVJlcGFpbnRBc3lu
Y0NhbGxiYWNrSUQgPSAwOwogICAgIH0KLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6
cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94
eSogY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KQotewotICAgIC8vIEF0IHRoaXMgdGltZSB0aGUg
c2hhZGVyIGlzIG5vdCBuZWVkZWQgYW55bW9yZSwgc28gd2UgcmVtb3ZlIGl0IGZyb20gb3VyIHNl
dCBhbmQgCi0gICAgLy8gc2VuZCBhIG1lc3NhZ2UgdG8gdGhlIG90aGVyIHByb2Nlc3MgdG8gZGVs
ZXRlIGl0LgotICAgIG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMucmVtb3ZlKGN1c3RvbUZpbHRlclBy
b2dyYW1Qcm94eSk7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29y
ZGluYXRvclByb3h5OjpSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGN1c3RvbUZpbHRlclByb2dy
YW1Qcm94eS0+aWQoKSkpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpkaXNjb25u
ZWN0Q3VzdG9tRmlsdGVyUHJvZ3JhbXMoKQotewotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IFdlYkNv
cmUgd2lsbCBub3QgY2FsbCBpbnRvIHRoaXMgY29vcmRpbmF0b3IgYW55bW9yZS4KLSAgICBIYXNo
U2V0PFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSo+OjppdGVyYXRvciBpdGVyID0gbV9jdXN0
b21GaWx0ZXJQcm9ncmFtcy5iZWdpbigpOwotICAgIGZvciAoOyBpdGVyICE9IG1fY3VzdG9tRmls
dGVyUHJvZ3JhbXMuZW5kKCk7ICsraXRlcikKLSAgICAgICAgKCppdGVyKS0+c2V0Q2xpZW50KDAp
OwotfQotI2VuZGlmCi0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRldGFjaExheWVyKENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgbV9yZWdpc3RlcmVkTGF5ZXJz
LnJlbW92ZShsYXllcik7Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fZGV0
YWNoZWRMYXllcnMuYXBwZW5kKGxheWVyLT5pZCgpKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2go
KTsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yU2VsZihSZW5k
ZXJMYXllciogcmVuZGVyTGF5ZXIpCi17Ci0gICAgLy8gVGhlc2UgY29uZGl0aW9ucyBtdXN0IG1h
dGNoIHRoZSBjb25kaXRpb25zIGluIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21w
b3NpdGluZ0ZvclBvc2l0aW9uLgotICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IHJl
bmRlckxheWVyLT5iYWNraW5nKCk7Ci0gICAgaWYgKCFiYWNraW5nKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5
bGUoKTsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRl
ckxheWVyLT5yZW5kZXJlcigpLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCByZW5kZXJMYXll
ci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+cG9zaXRpb24oKSAhPSBGaXhlZFBvc2l0aW9uKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5jb250YWlu
ZXIoKS0+aXNSZW5kZXJWaWV3KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVuZGVy
TGF5ZXItPmlzU3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciA9IHRvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyKGJhY2tpbmctPmdyYXBoaWNzTGF5ZXIoKSk7Ci0gICAgZ3JhcGhpY3NMYXllci0+c2V0
Rml4ZWRUb1ZpZXdwb3J0KHRydWUpOwotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVPZmZzZXRGcm9t
Vmlld3BvcnRGb3JMYXllcihSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIpCi17Ci0gICAgdXBkYXRl
T2Zmc2V0RnJvbVZpZXdwb3J0Rm9yU2VsZihyZW5kZXJMYXllcik7Ci0KLSAgICBpZiAocmVuZGVy
TGF5ZXItPmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9y
TGF5ZXIocmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSk7Ci0gICAgaWYgKHJlbmRlckxheWVyLT5u
ZXh0U2libGluZygpKQotICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihy
ZW5kZXJMYXllci0+bmV4dFNpYmxpbmcoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OnN5bmNGaXhlZExheWVycygpCi17Ci0gICAgaWYgKCFtX3dlYlBhZ2UtPmNvcmVQYWdlKCkt
PnNldHRpbmdzKCkgfHwgIW1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICghbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT5oYXNWaWV3cG9y
dENvbnN0cmFpbmVkT2JqZWN0cygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5kZXJMYXll
ciogcm9vdFJlbmRlckxheWVyID0gbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+Y29udGVudFJlbmRl
cmVyKCktPmNvbXBvc2l0b3IoKS0+cm9vdFJlbmRlckxheWVyKCk7Ci0gICAgQVNTRVJUKHJvb3RS
ZW5kZXJMYXllcik7Ci0gICAgaWYgKHJvb3RSZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKQotICAg
ICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyb290UmVuZGVyTGF5ZXItPmZp
cnN0Q2hpbGQoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmxvY2tBbmltYXRp
b25zKCkKLXsKLSAgICBtX2FuaW1hdGlvbnNMb2NrZWQgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0QW5pbWF0aW9uc0xv
Y2tlZCh0cnVlKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnVubG9ja0FuaW1h
dGlvbnMoKQotewotICAgIGlmICghbV9hbmltYXRpb25zTG9ja2VkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2FuaW1hdGlvbnNMb2NrZWQgPSBmYWxzZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldEFuaW1hdGlvbnNMb2NrZWQo
ZmFsc2UpKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cGVyZm9ybVNjaGVkdWxl
ZExheWVyRmx1c2goKQotewotICAgIGlmIChtX2lzU3VzcGVuZGVkIHx8IG1fd2FpdGluZ0ZvclVJ
UHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UgbG9jayB0aGUgYW5pbWF0aW9u
cyB3aGlsZSBwZXJmb3JtaW5nIGxheW91dCwgdG8gYXZvaWQgZmxpY2tlcnMgY2F1c2VkIGJ5IGFu
aW1hdGlvbnMgY29udGludWluZyBpbiB0aGUgVUkgcHJvY2VzcyB3aGlsZQotICAgIC8vIHRoZSB3
ZWIgcHJvY2VzcyBsYXlvdXQgd2FudHMgdG8gY2FuY2VsIHRoZW0uCi0gICAgbG9ja0FuaW1hdGlv
bnMoKTsKLSAgICBzeW5jRGlzcGxheVN0YXRlKCk7Ci0KLSAgICAvLyBXZSBjYW4gdW5sb2NrIHRo
ZSBhbmltYXRpb25zIGJlZm9yZSBmbHVzaGluZyBpZiB0aGVyZSBhcmUgbm8gdmlzaWJsZSBjaGFu
Z2VzLCBmb3IgZXhhbXBsZSBpZiB0aGVyZSBhcmUgY29udGVudCB1cGRhdGVzCi0gICAgLy8gaW4g
YSBsYXllciB3aXRoIG9wYWNpdHkgMC4KLSAgICBib29sIGNhblVubG9ja0JlZm9yZUZsdXNoID0g
IW1faXNWYWxpZCB8fCAhdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0
KCkpLT5oYXNQZW5kaW5nVmlzaWJsZUNoYW5nZXMoKTsKLSAgICBpZiAoY2FuVW5sb2NrQmVmb3Jl
Rmx1c2gpCi0gICAgICAgIHVubG9ja0FuaW1hdGlvbnMoKTsKLQotICAgIGlmICghbV9pc1ZhbGlk
KQotICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkp
Ci0gICAgICAgIGRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNEaXNwbGF5U3RhdGUoKQotewotI2lmIEVOQUJMRShSRVFV
RVNUX0FOSU1BVElPTl9GUkFNRSkgJiYgIVVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1F
UikgJiYgIVVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0gICAg
Ly8gTWFrZSBzdXJlIHRoYXQgYW55IHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBhbmltYXRpb24gY2Fs
bGJhY2tzIGFyZSBiZWluZyBleGVjdXRlZCBiZWZvcmUgd2UgZmx1c2ggdGhlIGxheWVycy4KLSAg
ICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPnNlcnZpY2VTY3Jp
cHRlZEFuaW1hdGlvbnMoY29udmVydFNlY29uZHNUb0RPTVRpbWVTdGFtcChjdXJyZW50VGltZSgp
KSk7Ci0jZW5kaWYKLQotICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKLX0KLQotdm9p
ZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQot
ewotICAgIGlmIChtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCkgeworICAgIGlmIChk
aWRTeW5jICYmIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKSB7CiAgICAgICAgIHN0
YXRpY19jYXN0PERyYXdpbmdBcmVhSW1wbCo+KG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKSktPmxh
eWVySG9zdERpZEZsdXNoTGF5ZXJzKCk7CiAgICAgICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRM
YXllckZsdXNoID0gZmFsc2U7CiAgICAgfQogfQogCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9y
OjpsYXllckZsdXNoVGltZXJGaXJlZChUaW1lcjxMYXllclRyZWVDb29yZGluYXRvcj4qKQotewot
ICAgIHBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OmNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKQotewotICAgIEFTU0VSVCghbV9wYWdl
T3ZlcmxheUxheWVyKTsKLQotICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IEdyYXBoaWNzTGF5ZXI6
OmNyZWF0ZSh0aGlzLCB0aGlzKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9wYWdlT3ZlcmxheUxh
eWVyLT5zZXROYW1lKCJMYXllclRyZWVDb29yZGluYXRvciBwYWdlIG92ZXJsYXkgY29udGVudCIp
OwotI2VuZGlmCi0KLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVl
KTsKLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOwot
Ci0gICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fcGFnZU92ZXJsYXlMYXllci5nZXQoKSk7Ci19
Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCkK
LXsKLSAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKLSAgICBtX3BhZ2VPdmVybGF5TGF5
ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBudWxscHRy
OwotfQotCi1QYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBMYXllclRyZWVDb29y
ZGluYXRvcjo6Y3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoSW1hZ2UqIGltYWdlKQotewotICAg
IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCA9IENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nOjpnZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKGltYWdlKTsKLSAgICBJbWFnZUJhY2tp
bmdNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7Ci0gICAg
UmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBpbWFnZUJhY2tpbmc7Ci0gICAgaWYgKGl0
ID09IG1faW1hZ2VCYWNraW5ncy5lbmQoKSkgewotICAgICAgICBpbWFnZUJhY2tpbmcgPSBDb29y
ZGluYXRlZEltYWdlQmFja2luZzo6Y3JlYXRlKHRoaXMsIGltYWdlKTsKLSAgICAgICAgbV9pbWFn
ZUJhY2tpbmdzLmFkZChpbWFnZUlELCBpbWFnZUJhY2tpbmcpOwotICAgIH0gZWxzZQotICAgICAg
ICBpbWFnZUJhY2tpbmcgPSBpdC0+dmFsdWU7Ci0KLSAgICByZXR1cm4gaW1hZ2VCYWNraW5nOwot
fQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6
cGFpbnRDb250ZW50cyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwg
Y29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCiB7Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVl
OwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eTo6Q3JlYXRlSW1hZ2VCYWNraW5nKGltYWdlSUQpKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29y
ZGluYXRvcjo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1h
Z2VJRCwgY29uc3QgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCi17Ci0gICAgbV9z
aG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6VXBkYXRlSW1hZ2VCYWNraW5nKGltYWdlSUQsIGhhbmRs
ZSkpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpjbGVhckltYWdlQmFja2luZ0Nv
bnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBtX3Nob3Vs
ZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRy
ZWVDb29yZGluYXRvclByb3h5OjpDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKGltYWdlSUQpKTsK
LX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVtb3ZlSW1hZ2VCYWNraW5nKENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBpZiAobV9pc1B1cmdpbmcpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1h
Z2VJRCkpOwotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX2ltYWdlQmFja2lu
Z3MucmVtb3ZlKGltYWdlSUQpOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eTo6UmVtb3ZlSW1hZ2VCYWNraW5nKGltYWdlSUQpKTsKLX0KLQot
dm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdl
cygpCi17Ci0gICAgSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBlbmQgPSBtX2ltYWdlQmFja2lu
Z3MuZW5kKCk7Ci0gICAgZm9yIChJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lt
YWdlQmFja2luZ3MuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgaXRlci0+
dmFsdWUtPnVwZGF0ZSgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpub3RpZnlB
bmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgLyog
dGltZSAqLykKLXsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6bm90aWZ5Rmx1c2hS
ZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKLXsKLX0KLQotdm9pZCBMYXll
clRyZWVDb29yZGluYXRvcjo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKiBncmFwaGljc0xheWVyLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29u
dGV4dCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIGNsaXBSZWN0KQotewotICAgIGlmIChncmFwaGljc0xheWVyID09IG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllcikgewotICAgICAgICBtX3dlYlBhZ2UtPmRyYXdSZWN0KGdyYXBo
aWNzQ29udGV4dCwgY2xpcFJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KGdyYXBoaWNzTGF5ZXIgPT0gbV9wYWdlT3ZlcmxheUxheWVyKSB7Ci0gICAgICAgIC8vIE92ZXJs
YXlzIGNvbnRhaW4gdHJhbnNwYXJlbnQgY29udGVudHMgYW5kIHdvbid0IGNsZWFyIHRoZSBjb250
ZXh0IGFzIHBhcnQgb2YgdGhlaXIgcmVuZGVyaW5nLCBzbyB3ZSBkbyBpdCBoZXJlLgotICAgICAg
ICBncmFwaGljc0NvbnRleHQuY2xlYXJSZWN0KGNsaXBSZWN0KTsKLSAgICAgICAgbV93ZWJQYWdl
LT5kcmF3UGFnZU92ZXJsYXkoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgbV93ZWJQYWdlLT5kcmF3UmVjdChncmFwaGljc0NvbnRleHQsIGNs
aXBSZWN0KTsKIH0KIAotUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBMYXllclRyZWVDb29yZGlu
YXRvcjo6Y3JlYXRlR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCit2
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpwYWludE92ZXJsYXlDb250ZW50cyhXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3Qp
CiB7Ci0gICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBsYXllciA9IG5ldyBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIoY2xpZW50KTsKLSAgICBsYXllci0+c2V0Q29vcmRpbmF0b3IodGhpcyk7
Ci0gICAgbV9yZWdpc3RlcmVkTGF5ZXJzLmFkZChsYXllcik7Ci0gICAgbGF5ZXItPnNldENvbnRl
bnRzU2NhbGUobV9jb250ZW50c1NjYWxlKTsKLSAgICBsYXllci0+YWRqdXN0VmlzaWJsZVJlY3Qo
KTsKLSAgICByZXR1cm4gYWRvcHRQdHIobGF5ZXIpOworICAgIC8vIE92ZXJsYXlzIGNvbnRhaW4g
dHJhbnNwYXJlbnQgY29udGVudHMgYW5kIHdvbid0IGNsZWFyIHRoZSBjb250ZXh0IGFzIHBhcnQg
b2YgdGhlaXIgcmVuZGVyaW5nLCBzbyB3ZSBkbyBpdCBoZXJlLgorICAgIGdyYXBoaWNzQ29udGV4
dC5jbGVhclJlY3QoY2xpcFJlY3QpOworICAgIG1fd2ViUGFnZS0+ZHJhd1BhZ2VPdmVybGF5KGdy
YXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOwogfQogCiBib29sIExheWVyVHJlZUhvc3Q6OnN1cHBv
cnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCkBAIC02MzksMTAzICsxOTQsMjYgQEAgYm9vbCBM
YXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKQogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGVUaWxlKENvb3Jk
aW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRh
dGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKLXsK
LSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpDcmVhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJ
RCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbykpOwotfQotCi12b2lkIExheWVyVHJlZUNv
b3JkaW5hdG9yOjp1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJf
dCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7
Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5
OjpVcGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5m
bykpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW1vdmVUaWxlKENvb3JkaW5h
dGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQpCi17Ci0gICAgaWYgKG1faXNQdXJn
aW5nKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6UmVt
b3ZlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCkpOwotfQotCi12b2lkIExheWVyVHJlZUNv
b3JkaW5hdG9yOjpjcmVhdGVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCwgY29uc3QgU2hhcmVhYmxl
U3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCi17Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpDcmVhdGVVcGRhdGVBdGxhcyhhdGxhc0lELCBo
YW5kbGUpKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVtb3ZlVXBkYXRlQXRs
YXMoaW50IGF0bGFzSUQpCi17Ci0gICAgaWYgKG1faXNQdXJnaW5nKQotICAgICAgICByZXR1cm47
Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5
OjpSZW1vdmVVcGRhdGVBdGxhcyhhdGxhc0lEKSk7Ci19Ci0KLVdlYkNvcmU6OkZsb2F0UmVjdCBM
YXllclRyZWVDb29yZGluYXRvcjo6dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKLX0KLQotCi12b2lkIExheWVyVHJlZUNvb3Jk
aW5hdG9yOjpzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIGNv
bnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25zKQotewotICAgIG1fc2hvdWxk
U3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBhY3RpdmVBbmlt
YXRpb25zID0gYW5pbWF0aW9ucy5nZXRBY3RpdmVBbmltYXRpb25zKCk7Ci0jaWYgRU5BQkxFKENT
U19TSEFERVJTKQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWN0aXZlQW5pbWF0aW9ucy5h
bmltYXRpb25zKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgS2V5ZnJhbWVWYWx1ZUxp
c3QmIGtleWZyYW1lcyA9IGFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLmF0KGkpLmtleWZyYW1lcygp
OwotICAgICAgICBpZiAoa2V5ZnJhbWVzLnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdl
YmtpdEZpbHRlcikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmb3IgKHNpemVfdCBq
ID0gMDsgaiA8IGtleWZyYW1lcy5zaXplKCk7ICsraikgewotICAgICAgICAgICAgY29uc3QgRmls
dGVyQW5pbWF0aW9uVmFsdWUqIGZpbHRlclZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgRmlsdGVy
QW5pbWF0aW9uVmFsdWUqPihrZXlmcmFtZXMuYXQoaSkpOwotICAgICAgICAgICAgY2hlY2tDdXN0
b21GaWx0ZXJQcm9ncmFtUHJveGllcygqZmlsdGVyVmFsdWUtPnZhbHVlKCkpOwotICAgICAgICB9
Ci0gICAgfQotI2VuZGlmCi0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVD
b29yZGluYXRvclByb3h5OjpTZXRMYXllckFuaW1hdGlvbnMobGF5ZXJJRCwgYWN0aXZlQW5pbWF0
aW9ucykpOwotfQotCiB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRWaXNpYmxlQ29udGVu
dHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9p
bnQmIHRyYWplY3RvcnlWZWN0b3IpCiB7Ci0gICAgYm9vbCBjb250ZW50c1JlY3REaWRDaGFuZ2Ug
PSByZWN0ICE9IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKLSAgICBib29sIGNvbnRlbnRzU2NhbGVE
aWRDaGFuZ2UgPSBzY2FsZSAhPSBtX2NvbnRlbnRzU2NhbGU7Ci0KLSAgICAvLyBBIHplcm8gdHJh
amVjdG9yeVZlY3RvciBpbmRpY2F0ZXMgdGhhdCB0aWxlcyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9y
dCBhcmUgcmVxdWVzdGVkLgotICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSktPnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3Rv
cnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7Ci0KLSAgICBpZiAoY29udGVudHNSZWN0RGlkQ2hh
bmdlIHx8IGNvbnRlbnRzU2NhbGVEaWRDaGFuZ2UpIHsKLSAgICAgICAgbV92aXNpYmxlQ29udGVu
dHNSZWN0ID0gcmVjdDsKLSAgICAgICAgbV9jb250ZW50c1NjYWxlID0gc2NhbGU7CisgICAgbV9j
b21wb3NpdGluZ0Nvb3JkaW5hdG9yLT5zZXRWaXNpYmxlQ29udGVudHNSZWN0KHJlY3QsIHNjYWxl
LCB0cmFqZWN0b3J5VmVjdG9yKTsKIAotICAgICAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5k
KCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIqPjo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoY29udGVudHNTY2FsZURpZENoYW5nZSkKLSAgICAg
ICAgICAgICAgICAoKml0KS0+c2V0Q29udGVudHNTY2FsZShzY2FsZSk7Ci0gICAgICAgICAgICBp
ZiAoY29udGVudHNSZWN0RGlkQ2hhbmdlKQotICAgICAgICAgICAgICAgICgqaXQpLT5hZGp1c3RW
aXNpYmxlUmVjdCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc2NoZWR1bGVMYXllckZsdXNo
KCk7CiAgICAgaWYgKG1fd2ViUGFnZS0+dXNlRml4ZWRMYXlvdXQoKSkgewogICAgICAgICAvLyBS
b3VuZCB0aGUgcmVjdCBpbnN0ZWFkIG9mIGVuY2xvc2luZyBpdCB0byBtYWtlIHN1cmUgdGhhdCBp
dHMgc2l6ZSBzdGF5cwogICAgICAgICAvLyB0aGUgc2FtZSB3aGlsZSBwYW5uaW5nLiBUaGlzIGNh
biBoYXZlIG5hc3R5IGVmZmVjdHMgb24gbGF5b3V0LgogICAgICAgICBtX3dlYlBhZ2UtPnNldEZp
eGVkVmlzaWJsZUNvbnRlbnRSZWN0KHJvdW5kZWRJbnRSZWN0KHJlY3QpKTsKICAgICB9Ci0KLSAg
ICBpZiAoY29udGVudHNSZWN0RGlkQ2hhbmdlKQotICAgICAgICBtX3Nob3VsZFNlbmRTY3JvbGxQ
b3NpdGlvblVwZGF0ZSA9IHRydWU7CiB9CiAKIEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBMYXllclRy
ZWVDb29yZGluYXRvcjo6Z3JhcGhpY3NMYXllckZhY3RvcnkoKQogewotICAgIHJldHVybiB0aGlz
OworICAgIHJldHVybiBtX2NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuZ2V0KCk7CiB9CiAKICNpZiBF
TkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9y
OjpzY2hlZHVsZUFuaW1hdGlvbigpCiB7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpM
YXllclRyZWVDb29yZGluYXRvclByb3h5OjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSk7CisgICAg
bV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudC0+cmVxdWVzdEFuaW1hdGlvbkZy
YW1lKCk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmFuaW1hdGlvbkZyYW1lUmVh
ZHkoKQpAQCAtNzQ2LDg0ICsyMjQsMTcgQEAgdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6YW5p
bWF0aW9uRnJhbWVSZWFkeSgpCiAKIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbmRlck5l
eHRGcmFtZSgpCiB7Ci0gICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0gZmFsc2U7Ci0gICAgc2No
ZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdXBkYXRl
QXRsYXNlcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV91cGRhdGVBdGxhc2VzW2ldLT5kaWRTd2Fw
QnVmZmVycygpOwotfQotCi1ib29sIExheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllclRyZWVUaWxl
VXBkYXRlc0FsbG93ZWQoKSBjb25zdAotewotICAgIHJldHVybiAhbV9pc1N1c3BlbmRlZCAmJiAh
bV93YWl0aW5nRm9yVUlQcm9jZXNzOworICAgIG1fY29tcG9zaXRpbmdDb29yZGluYXRvci0+cmVu
ZGVyTmV4dEZyYW1lKCk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnB1cmdlQmFj
a2luZ1N0b3JlcygpCiB7Ci0gICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IHB1cmdpbmdUb2dnbGUo
bV9pc1B1cmdpbmcsIHRydWUpOwotCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOwot
ICAgIGZvciAoSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRl
cmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICAoKml0KS0+cHVyZ2VCYWNraW5nU3RvcmVzKCk7Ci0KLSAgICBtX2ltYWdlQmFja2lu
Z3MuY2xlYXIoKTsKLSAgICBtX3VwZGF0ZUF0bGFzZXMuY2xlYXIoKTsKLX0KLQotUGFzc093blB0
cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IExheWVyVHJlZUNvb3JkaW5hdG9yOjpiZWdpbkNv
bnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgU2hhcmVhYmxlQml0bWFw
OjpGbGFncyBmbGFncywgaW50JiBhdGxhc0lELCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KQot
ewotICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dDsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV91cGRhdGVBdGxhc2VzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIFVwZGF0ZUF0bGFzKiBhdGxhcyA9IG1fdXBkYXRlQXRsYXNlc1tpXS5nZXQo
KTsKLSAgICAgICAgaWYgKGF0bGFzLT5mbGFncygpID09IGZsYWdzKSB7Ci0gICAgICAgICAgICAv
LyBUaGlzIHdpbGwgcmV0dXJuIG51bGwgaWYgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIGJ1ZmZlciBz
cGFjZS4KLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dCA9IGF0bGFzLT5iZWdpblBhaW50aW5n
T25BdmFpbGFibGVCdWZmZXIoYXRsYXNJRCwgc2l6ZSwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlm
IChncmFwaGljc0NvbnRleHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4
dC5yZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50IFNj
cmF0Y2hCdWZmZXJEaW1lbnNpb24gPSAxMDI0OyAvLyBTaG91bGQgYmUgYSBwb3dlciBvZiB0d28u
Ci0gICAgbV91cGRhdGVBdGxhc2VzLmFwcGVuZChhZG9wdFB0cihuZXcgVXBkYXRlQXRsYXModGhp
cywgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiwgZmxhZ3MpKSk7Ci0gICAgc2NoZWR1bGVSZWxlYXNl
SW5hY3RpdmVBdGxhc2VzKCk7Ci0gICAgcmV0dXJuIG1fdXBkYXRlQXRsYXNlcy5sYXN0KCktPmJl
Z2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihhdGxhc0lELCBzaXplLCBvZmZzZXQpOwotfQot
Ci1jb25zdCBkb3VibGUgUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2YWwgPSAwLjU7
Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRs
YXNlcygpCi17Ci0gICAgaWYgKCFtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5pc0FjdGl2
ZSgpKQotICAgICAgICBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5zdGFydFJlcGVhdGlu
ZyhSZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJJbnRlcnZhbCk7Ci19Ci0KLXZvaWQgTGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OnJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKFRpbWVyPExh
eWVyVHJlZUNvb3JkaW5hdG9yPiopCi17Ci0gICAgLy8gV2UgYWx3YXlzIHdhbnQgdG8ga2VlcCBv
bmUgYXRsYXMgZm9yIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQuCi0gICAgT3duUHRyPFVwZGF0ZUF0
bGFzPiBhdGxhc1RvS2VlcEFueXdheTsKLSAgICBib29sIGZvdW5kQWN0aXZlQXRsYXNGb3JOb25D
b21wb3NpdGVkQ29udGVudCA9IGZhbHNlOwotICAgIGZvciAoaW50IGkgPSBtX3VwZGF0ZUF0bGFz
ZXMuc2l6ZSgpIC0gMTsgIGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIFVwZGF0ZUF0bGFzKiBhdGxh
cyA9IG1fdXBkYXRlQXRsYXNlc1tpXS5nZXQoKTsKLSAgICAgICAgaWYgKCFhdGxhcy0+aXNJblVz
ZSgpKQotICAgICAgICAgICAgYXRsYXMtPmFkZFRpbWVJbmFjdGl2ZShSZWxlYXNlSW5hY3RpdmVB
dGxhc2VzVGltZXJJbnRlcnZhbCk7Ci0gICAgICAgIGJvb2wgdXNhYmxlRm9yTm9uQ29tcG9zaXRl
ZENvbnRlbnQgPSBhdGxhcy0+ZmxhZ3MoKSA9PSBTaGFyZWFibGVCaXRtYXA6Ok5vRmxhZ3M7Ci0g
ICAgICAgIGlmIChhdGxhcy0+aXNJbmFjdGl2ZSgpKSB7Ci0gICAgICAgICAgICBpZiAoIWZvdW5k
QWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVudCAmJiAhYXRsYXNUb0tlZXBBbnl3YXkg
JiYgdXNhYmxlRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQpCi0gICAgICAgICAgICAgICAgYXRsYXNU
b0tlZXBBbnl3YXkgPSBtX3VwZGF0ZUF0bGFzZXNbaV0ucmVsZWFzZSgpOwotICAgICAgICAgICAg
bV91cGRhdGVBdGxhc2VzLnJlbW92ZShpKTsKLSAgICAgICAgfSBlbHNlIGlmICh1c2FibGVGb3JO
b25Db21wb3NpdGVkQ29udGVudCkKLSAgICAgICAgICAgIGZvdW5kQWN0aXZlQXRsYXNGb3JOb25D
b21wb3NpdGVkQ29udGVudCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFmb3VuZEFjdGl2ZUF0
bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgJiYgYXRsYXNUb0tlZXBBbnl3YXkpCi0gICAgICAg
IG1fdXBkYXRlQXRsYXNlcy5hcHBlbmQoYXRsYXNUb0tlZXBBbnl3YXkucmVsZWFzZSgpKTsKLQot
ICAgIGlmIChtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpIDw9IDEpCi0gICAgICAgIG1fcmVsZWFzZUlu
YWN0aXZlQXRsYXNlc1RpbWVyLnN0b3AoKTsKKyAgICBtX2NvbXBvc2l0aW5nQ29vcmRpbmF0b3It
PnB1cmdlQmFja2luZ1N0b3JlcygpOwogfQogCiB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpz
ZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQogewotICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0QmFj
a2dyb3VuZENvbG9yKGNvbG9yKSk7CisgICAgbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2Fn
ZUNsaWVudC0+c2V0QmFja2dyb3VuZENvbG9yKGNvbG9yKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0
b3IuaAppbmRleCA3YmI2OGI4Yzc3M2I4MzIzMTY1YTdhYTE5NDI4OWQxNDY4MWY1YTUxLi40ZTM2
NzQ2M2ZkZTYwNTA1YzU1YjBlNjkyMGI5MzBhMmM2YzhiYWNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVD
b29yZGluYXRvci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmgKQEAgLTEsNSArMSw2IEBACiAv
KgogICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMzggKzIzLDI4
IEBACiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAKLSNpbmNsdWRlICJDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZEltYWdlQmFja2luZy5o
IgorI2luY2x1ZGUgIkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJMYXllclRy
ZWVDb250ZXh0LmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgotI2luY2x1ZGUgIlRpbWVy
LmgiCi0jaW5jbHVkZSAiVXBkYXRlQXRsYXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNz
TGF5ZXJDbGllbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJGYWN0b3J5Lmg+
CisjaW5jbHVkZSAiV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQuaCIKICNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCi0jaWYgRU5B
QkxFKENTU19TSEFERVJTKQotI2luY2x1ZGUgIldlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS5o
IgotI2VuZGlmCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHcmFwaGljc0xheWVyRmFjdG9y
eTsKK30KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFVwZGF0ZUluZm87CiBjbGFzcyBX
ZWJQYWdlOwogCi1jbGFzcyBMYXllclRyZWVDb29yZGluYXRvciA6IHB1YmxpYyBMYXllclRyZWVI
b3N0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgLCBwdWJsaWMgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgLCBwdWJsaWMgQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmc6OkNvb3JkaW5hdG9yCi0gICAgLCBwdWJsaWMgVXBkYXRlQXRsYXNDbGllbnQKLSAgICAsIHB1
YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeQotI2lmIEVOQUJMRShDU1NfU0hBREVS
UykKLSAgICAsIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudAotI2VuZGlmCi17Citj
bGFzcyBMYXllclRyZWVDb29yZGluYXRvciA6IHB1YmxpYyBMYXllclRyZWVIb3N0LCBwdWJsaWMg
Q29tcG9zaXRpbmdDb29yZGluYXRvckNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+IGNyZWF0ZShXZWJQYWdlKik7CiAgICAgdmlydHVh
bCB+TGF5ZXJUcmVlQ29vcmRpbmF0b3IoKTsKIAorICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZy
b20gTGF5ZXJUcmVlSG9zdAogICAgIHZpcnR1YWwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5
ZXJUcmVlQ29udGV4dCgpIHsgcmV0dXJuIG1fbGF5ZXJUcmVlQ29udGV4dDsgfQogICAgIHZpcnR1
YWwgdm9pZCBzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCk7CiAgICAgdmlydHVh
bCB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwpAQCAtNzMsMTMyICs2NCw0MyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5T3BhY2l0eShmbG9hdCk7CiAgICAgdmly
dHVhbCBib29sIHBhZ2VPdmVybGF5U2hvdWxkQXBwbHlGYWRlV2hlblBhaW50aW5nKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIHsg
bV9pc1N1c3BlbmRlZCA9IHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5n
KCkgeyBtX2lzU3VzcGVuZGVkID0gZmFsc2U7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9CisgICAg
dmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCk7CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZVJl
bmRlcmluZygpOwogICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VTY2FsZUZhY3RvckRpZENoYW5nZSgp
IHsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gY3Jl
YXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoV2ViQ29yZTo6SW1hZ2UqKSBPVkVSUklERTsKIAotICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGls
ZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90
IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50
MzJfdCB0aWxlSUQpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVDb250
ZW50c1JlY3QoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7CiAg
ICAgdmlydHVhbCB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOwotICAgIHZpcnR1YWwgYm9vbCBs
YXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCBzY2Fs
ZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3Jl
SVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJik7CiAgICAgdmlydHVhbCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogZ3JhcGhpY3NMYXllckZhY3RvcnkoKSBPVkVS
UklERTsKLQotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVy
SUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNM
YXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVk
TGF5ZXJJRD4mKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5h
dGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKLSNp
ZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckZpbHRlcnMo
Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7Ci0j
ZW5kaWYKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRl
Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgV2Vi
Q29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95
Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCkgT1ZFUlJJREU7Ci0jZW5kaWYKLSAgICB2aXJ0dWFs
IHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKik7Ci0g
ICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygpOwotCi0gICAgdmlydHVhbCBQYXNzT3du
UHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzLCBpbnQmIGF0bGFzSUQsIFdl
YkNvcmU6OkludFBvaW50Jik7Ci0KLSAgICAvLyBVcGRhdGVBdGxhc0NsaWVudAotICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCwgY29uc3QgU2hhcmVhYmxlU3Vy
ZmFjZTo6SGFuZGxlJik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKGludCBh
dGxhc0lEKTsKLQogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKICAgICB2aXJ0
dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSBPVkVSUklERTsKICNlbmRpZgogICAgIHZpcnR1
YWwgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBPVkVSUklE
RTsKIAorICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gQ29tcG9zaXRpbmdDb29yZGluYXRv
ckNsaWVudAorICAgIHZpcnR1YWwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgdmlld1NpemUoKSBj
b25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybVNjaGVkdWxlZExheWVy
Rmx1c2goYm9vbCBkaWRTeW5jKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNPcGFxdWVD
b250ZW50cygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRJZk5lZWRlZCgpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRPdmVybGF5Q29udGVudHMoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpIE9WRVJSSURFOworCiBwcm90
ZWN0ZWQ6CiAgICAgZXhwbGljaXQgTGF5ZXJUcmVlQ29vcmRpbmF0b3IoV2ViUGFnZSopOwogCiBw
cml2YXRlOgotICAgIC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91Ymxl
IHRpbWUpOwotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25z
dCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IGNsaXBSZWN0KTsKLQotICAgIC8vIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRv
cgotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmdJRCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhD
b29yZGluYXRlZEltYWdlQmFja2luZ0lELCBjb25zdCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUm
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOwotCi0g
ICAgdm9pZCBmbHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7Ci0KLSAgICAvLyBHcmFw
aGljc0xheWVyRmFjdG9yeQotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGlj
c0xheWVyPiBjcmVhdGVHcmFwaGljc0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQq
KSBPVkVSUklERTsKLQotICAgIC8vIExheWVyVHJlZUNvb3JkaW5hdG9yCi0gICAgdm9pZCBjcmVh
dGVQYWdlT3ZlcmxheUxheWVyKCk7Ci0gICAgdm9pZCBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigp
OwotICAgIGJvb2wgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7Ci0gICAgdm9pZCBjYW5jZWxQ
ZW5kaW5nTGF5ZXJGbHVzaCgpOwotICAgIHZvaWQgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2go
KTsKLSAgICB2b2lkIGRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7Ci0gICAgdm9pZCBz
eW5jRGlzcGxheVN0YXRlKCk7Ci0gICAgdm9pZCBsb2NrQW5pbWF0aW9ucygpOwotICAgIHZvaWQg
dW5sb2NrQW5pbWF0aW9ucygpOwotCi0gICAgdm9pZCBsYXllckZsdXNoVGltZXJGaXJlZChXZWJD
b3JlOjpUaW1lcjxMYXllclRyZWVDb29yZGluYXRvcj4qKTsKLQotICAgIHZvaWQgc2NoZWR1bGVS
ZWxlYXNlSW5hY3RpdmVBdGxhc2VzKCk7CiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZS
QU1FKQogICAgIHZvaWQgYW5pbWF0aW9uRnJhbWVSZWFkeSgpOwogI2VuZGlmCiAKLSAgICB2b2lk
IHJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPExheWVyVHJl
ZUNvb3JkaW5hdG9yPiopOwotCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIC8vIFdlYkN1
c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudAotICAgIHZvaWQgcmVtb3ZlQ3VzdG9tRmlsdGVy
UHJvZ3JhbVByb3h5KFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSopOwotCi0gICAgdm9pZCBj
aGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJh
dGlvbnMmKTsKLSAgICB2b2lkIGRpc2Nvbm5lY3RDdXN0b21GaWx0ZXJQcm9ncmFtcygpOwotI2Vu
ZGlmCi0KLSAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7Ci0K
LSAgICAvLyBUaGUgbGF5ZXIgd2hpY2ggY29udGFpbnMgYWxsIG5vbi1jb21wb3NpdGVkIGNvbnRl
bnQuCi0gICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRMYXllcjsKLQotICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUgbnVs
bCBpZiB0aGVyZSdzIG5vIHBhZ2Ugb3ZlcmxheS4KLSAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhp
Y3NMYXllcj4gbV9wYWdlT3ZlcmxheUxheWVyOwotCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiBtX3JlZ2lzdGVyZWRMYXllcnM7Ci0gICAgVmVjdG9yPENv
b3JkaW5hdGVkTGF5ZXJJRD4gbV9kZXRhY2hlZExheWVyczsKLSAgICB0eXBlZGVmIEhhc2hNYXA8
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
PiA+IEltYWdlQmFja2luZ01hcDsKLSAgICBJbWFnZUJhY2tpbmdNYXAgbV9pbWFnZUJhY2tpbmdz
OwotICAgIFZlY3RvcjxPd25QdHI8VXBkYXRlQXRsYXM+ID4gbV91cGRhdGVBdGxhc2VzOwotCi0j
aWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIEhhc2hTZXQ8V2ViQ3VzdG9tRmlsdGVyUHJvZ3Jh
bVByb3h5Kj4gbV9jdXN0b21GaWx0ZXJQcm9ncmFtczsKLSNlbmRpZgorICAgIFJlZlB0cjxXZWJD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudD4gbV9jb21wb3NpdGluZ0Nvb3JkaW5h
dG9yTWVzc2FnZUNsaWVudDsKKyAgICBPd25QdHI8Q29tcG9zaXRpbmdDb29yZGluYXRvcj4gbV9j
b21wb3NpdGluZ0Nvb3JkaW5hdG9yOwogCiAgICAgYm9vbCBtX25vdGlmeUFmdGVyU2NoZWR1bGVk
TGF5ZXJGbHVzaDsKLSAgICBib29sIG1faXNWYWxpZDsKLSAgICAvLyBXZSBkb24ndCBzZW5kIHRo
ZSBtZXNzYWdlcyByZWxhdGVkIHRvIHJlbGVhc2luZyByZXNvdXJjZXMgdG8gVUkgUHJvY2VzcyBk
dXJpbmcgcHVyZ2luZywgYmVjYXVzZSBVSSBQcm9jZXNzIGFscmVhZHkgaGFkIHJlbW92ZWQgYWxs
IHJlc291cmNlcy4KLSAgICBib29sIG1faXNQdXJnaW5nOwotCi0gICAgYm9vbCBtX3dhaXRpbmdG
b3JVSVByb2Nlc3M7Ci0gICAgYm9vbCBtX2lzU3VzcGVuZGVkOwotICAgIFdlYkNvcmU6OkZsb2F0
UmVjdCBtX3Zpc2libGVDb250ZW50c1JlY3Q7Ci0gICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOwot
ICAgIGJvb2wgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGU7CiAKICAgICBMYXllclRy
ZWVDb250ZXh0IG1fbGF5ZXJUcmVlQ29udGV4dDsKLSAgICBib29sIG1fc2hvdWxkU3luY0ZyYW1l
OwotICAgIGJvb2wgbV9zaG91bGRTeW5jUm9vdExheWVyOwotICAgIFdlYkNvcmU6OlRpbWVyPExh
eWVyVHJlZUNvb3JkaW5hdG9yPiBtX2xheWVyRmx1c2hUaW1lcjsKLSAgICBXZWJDb3JlOjpUaW1l
cjxMYXllclRyZWVDb29yZGluYXRvcj4gbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXI7Ci0g
ICAgYm9vbCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZDsKICAgICB1aW50NjRfdCBtX2Zv
cmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJRDsKLSAgICBib29sIG1fYW5pbWF0aW9uc0xvY2tlZDsK
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL1dlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL1dlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40NzZhZTZkMGNlNDZhMWUwMTM3NWNjM2Y0Y2NkNzgxMzljNWUwZTExCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQuY3BwCkBAIC0wLDAgKzEs
MjYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEw
MCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJXZWJDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudC5oIgorCisjaW5jbHVkZSAiQ29vcmRpbmF0
ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTWVzc2FnZUlELmgiCisjaW5jbHVkZSAiU3Vy
ZmFjZVVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNp
bmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKKwor
I2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQ
cm9ncmFtLmgiCisjaW5jbHVkZSAiVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgiCisj
ZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitQYXNzUmVmUHRyPFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50PiBXZWJD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6Y3JlYXRlKFdlYlBhZ2UqIHdlYlBh
Z2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
TWVzc2FnZUNsaWVudCh3ZWJQYWdlKSk7Cit9CisKK1dlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JN
ZXNzYWdlQ2xpZW50Ojp+V2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQoKQor
eworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICBkaXNjb25uZWN0Q3VzdG9tRmlsdGVyUHJv
Z3JhbXMoKTsKKyNlbmRpZgorfQorCitXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNs
aWVudDo6V2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQoV2ViUGFnZSogd2Vi
UGFnZSkKKyAgICA6IG1fd2ViUGFnZSh3ZWJQYWdlKQoreworCit9CisKK3ZvaWQgV2ViQ29tcG9z
aXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKENv
b3JkaW5hdGVkTGF5ZXJJRCBpZCkKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6Okxh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldFJvb3RDb21wb3NpdGluZ0xheWVyKGlkKSk7Cit9
CisKK3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OnNldENvbXBv
c2l0aW5nTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3JkaW5hdGVk
TGF5ZXJJbmZvJiBpbmZvKQoreworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKGlkLCBpbmZvKSk7
Cit9CisKK3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OnNldENv
bXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IFZlY3Rv
cjxDb29yZGluYXRlZExheWVySUQ+JiBjaGlsZHJlbikKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJD
aGlsZHJlbihpZCwgY2hpbGRyZW4pKTsKK30KKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK3Zv
aWQgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OnNldENvbXBvc2l0aW5n
TGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9u
cyYgZmlsdGVycykKK3sKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgY2hlY2tDdXN0b21G
aWx0ZXJQcm9ncmFtUHJveGllcyhmaWx0ZXJzKTsKKyNlbmRpZgorICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXll
ckZpbHRlcnMoaWQsIGZpbHRlcnMpKTsKK30KKyNlbmRpZgorCit2b2lkIFdlYkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpkZWxldGVDb21wb3NpdGluZ0xheWVyKENvb3JkaW5h
dGVkTGF5ZXJJRCBpZCkKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHk6OkRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIoaWQpKTsKK30KKwordm9p
ZCBXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6Y3JlYXRlVGlsZUZvckxh
eWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IElu
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3sK
KyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6
OkNyZWF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZv
KSk7Cit9CisKK3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OnVw
ZGF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGls
ZUlELCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVw
ZGF0ZUluZm8pCit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29y
ZGluYXRvclByb3h5OjpVcGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVj
dCwgdXBkYXRlSW5mbykpOworfQorCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNz
YWdlQ2xpZW50OjpyZW1vdmVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQs
IHVpbnQzMl90IHRpbGVJRCkKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk6OlJlbW92ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQp
KTsKK30KKwordm9pZCBXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6Y3Jl
YXRlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQsIGNvbnN0IFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRs
ZSYgaGFuZGxlKQoreworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eTo6Q3JlYXRlVXBkYXRlQXRsYXMoYXRsYXNJRCwgaGFuZGxlKSk7Cit9CisK
K3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OnJlbW92ZVVwZGF0
ZUF0bGFzKGludCBhdGxhc0lEKQoreworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6UmVtb3ZlVXBkYXRlQXRsYXMoYXRsYXNJRCkpOworfQor
Cit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpjcmVhdGVJbWFn
ZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQoreworICAgIG1fd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Q3JlYXRlSW1h
Z2VCYWNraW5nKGltYWdlSUQpKTsKK30KKwordm9pZCBXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
TWVzc2FnZUNsaWVudDo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQgaW1hZ2VJRCwgY29uc3QgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCit7Cisg
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpV
cGRhdGVJbWFnZUJhY2tpbmcoaW1hZ2VJRCwgaGFuZGxlKSk7Cit9CisKK3ZvaWQgV2ViQ29tcG9z
aXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMo
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQoreworICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Q2xlYXJJbWFnZUJhY2tpbmdD
b250ZW50cyhpbWFnZUlEKSk7Cit9CisKK3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1l
c3NhZ2VDbGllbnQ6OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
IGltYWdlSUQpCit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29y
ZGluYXRvclByb3h5OjpSZW1vdmVJbWFnZUJhY2tpbmcoaW1hZ2VJRCkpOworfQorCit2b2lkIFdl
YkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpkaWRSZW5kZXJGcmFtZShjb25z
dCBJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IEludFJlY3QmIGNvdmVyZWRSZWN0KQorewor
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
RGlkUmVuZGVyRnJhbWUoY29udGVudHNTaXplLCBjb3ZlcmVkUmVjdCkpOworfQorCit2b2lkIFdl
YkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpkaWRDaGFuZ2VTY3JvbGxQb3Np
dGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkRpZENoYW5nZVNjcm9sbFBvc2l0
aW9uKHBvc2l0aW9uKSk7Cit9CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKK3ZvaWQgV2Vi
Q29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OmNyZWF0ZUNhbnZhcyhDb29yZGlu
YXRlZExheWVySUQgaWQsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIGNvbnN0IEdyYXBoaWNz
U3VyZmFjZVRva2VuJiB0b2tlbikKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6Okxh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkNyZWF0ZUNhbnZhcyhpZCwgY2FudmFzU2l6ZSwgdG9r
ZW4pKTsKK30KKwordm9pZCBXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6
c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIHVpbnQzMl90IGZyb250QnVmZmVyKQor
eworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eTo6U3luY0NhbnZhcyhpZCwgZnJvbnRCdWZmZXIpKTsKK30KKwordm9pZCBXZWJDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6ZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVy
SUQgaWQpCit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGlu
YXRvclByb3h5OjpEZXN0cm95Q2FudmFzKGlkKSk7Cit9CisjZW5kaWYKKwordm9pZCBXZWJDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6c2V0TGF5ZXJBbmltYXRpb25zKENvb3Jk
aW5hdGVkTGF5ZXJJRCBsYXllcklELCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYWN0
aXZlQW5pbWF0aW9ucykKK3sKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBhY3RpdmVBbmltYXRpb25zLmFuaW1hdGlvbnMoKS5zaXplKCk7ICsraSkg
eworICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzID0gYWN0aXZlQW5p
bWF0aW9ucy5hbmltYXRpb25zKCkuYXQoaSkua2V5ZnJhbWVzKCk7CisgICAgICAgIGlmIChrZXlm
cmFtZXMucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5V2Via2l0RmlsdGVyKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwga2V5ZnJhbWVz
LnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICBjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSog
ZmlsdGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSo+KGtl
eWZyYW1lcy5hdChpKSk7CisgICAgICAgICAgICBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94
aWVzKCpmaWx0ZXJWYWx1ZS0+dmFsdWUoKSk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKwor
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
U2V0TGF5ZXJBbmltYXRpb25zKGxheWVySUQsIGFjdGl2ZUFuaW1hdGlvbnMpKTsKK30KKwordm9p
ZCBXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6c2V0QW5pbWF0aW9uc0xv
Y2tlZChib29sIGlzTG9ja2VkKQoreworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0QW5pbWF0aW9uc0xvY2tlZChpc0xvY2tlZCkpOwor
fQorCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpzZXRCYWNr
Z3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQoreworICAgIG1fd2ViUGFn
ZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0QmFja2dyb3Vu
ZENvbG9yKGNvbG9yKSk7Cit9CisKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUp
Cit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpyZXF1ZXN0QW5p
bWF0aW9uRnJhbWUoKQoreworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eTo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkpOworfQorI2VuZGlmCisK
K3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6Omludm9rZUZvcmNl
UmVwYWludEFzeW5jQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJRCkKK3sKKyAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNrKGNhbGxiYWNrSUQp
KTsKK30KKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKK3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29y
ZGluYXRvck1lc3NhZ2VDbGllbnQ6OmNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3sKKyAgICAvLyBXZSBuZWVkIHRvIGNyZWF0
ZSB0aGUgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5IG9iamVjdHMgYmVmb3JlIHdlIGdldCB0
byBzZXJpYWxpemUgdGhlCisgICAgLy8gY3VzdG9tIGZpbHRlcnMgdG8gdGhlIG90aGVyIHByb2Nl
c3MuIFRoYXQncyBiZWNhdXNlIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSBuZWVkcworICAg
IC8vIHRvIGxpbmsgYmFjayB0byB0aGUgY29vcmRpbmF0b3IsIHNvIHRoYXQgd2UgY2FuIHNlbmQg
YSBtZXNzYWdlIHRvIHRoZSBVSSBwcm9jZXNzIHdoZW4KKyAgICAvLyB0aGUgcHJvZ3JhbSBpcyBu
b3QgbmVlZGVkIGFueW1vcmUuCisgICAgLy8gTm90ZSB0aGF0IHRoZSBzZXJpYWxpemF0aW9uIHdp
bGwgb25seSBoYXBwZW4gYXQgYSBsYXRlciB0aW1lIGluIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6
RmlsdGVyT3BlcmF0aW9ucz46OmVuY29kZS4KKyAgICAvLyBBdCB0aGF0IHBvaW50IHRoZSBwcm9n
cmFtIHdpbGwgb25seSBiZSBzZXJpYWxpemVkIG9uY2UuIEFsbCB0aGUgb3RoZXIgdGltZXMgaXQg
d2lsbCBvbmx5IHVzZSB0aGUgSUQgb2YgdGhlIHByb2dyYW0uCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEZpbHRlck9wZXJh
dGlvbiogb3BlcmF0aW9uID0gZmlsdGVycy5hdChpKTsKKyAgICAgICAgaWYgKG9wZXJhdGlvbi0+
Z2V0T3BlcmF0aW9uVHlwZSgpICE9IEZpbHRlck9wZXJhdGlvbjo6VkFMSURBVEVEX0NVU1RPTSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjb25zdCBWYWxpZGF0ZWRDdXN0b21GaWx0
ZXJPcGVyYXRpb24qIGN1c3RvbU9wZXJhdGlvbiA9IHN0YXRpY19jYXN0PGNvbnN0IFZhbGlkYXRl
ZEN1c3RvbUZpbHRlck9wZXJhdGlvbio+KG9wZXJhdGlvbik7CisgICAgICAgIEFTU0VSVChjdXN0
b21PcGVyYXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKS0+aXNJbml0aWFsaXplZCgpKTsKKyAgICAg
ICAgVGV4dHVyZU1hcHBlclBsYXRmb3JtQ29tcGlsZWRQcm9ncmFtKiBwcm9ncmFtID0gY3VzdG9t
T3BlcmF0aW9uLT52YWxpZGF0ZWRQcm9ncmFtKCktPnBsYXRmb3JtQ29tcGlsZWRQcm9ncmFtKCk7
CisKKyAgICAgICAgUmVmUHRyPFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eT4gY3VzdG9tRmls
dGVyUHJvZ3JhbVByb3h5OworICAgICAgICBpZiAocHJvZ3JhbS0+Y2xpZW50KCkpCisgICAgICAg
ICAgICBjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkgPSBzdGF0aWNfY2FzdDxXZWJDdXN0b21GaWx0
ZXJQcm9ncmFtUHJveHkqPihwcm9ncmFtLT5jbGllbnQoKSk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5ID0gV2ViQ3VzdG9tRmlsdGVyUHJvZ3Jh
bVByb3h5OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIHByb2dyYW0tPnNldENsaWVudChjdXN0b21G
aWx0ZXJQcm9ncmFtUHJveHkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFjdXN0b21GaWx0
ZXJQcm9ncmFtUHJveHktPmNsaWVudCgpKSB7CisgICAgICAgICAgICBjdXN0b21GaWx0ZXJQcm9n
cmFtUHJveHktPnNldENsaWVudCh0aGlzKTsKKyAgICAgICAgICAgIG1fd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Q3JlYXRlQ3VzdG9tRmlsdGVyUHJv
Z3JhbShjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmlkKCksIGN1c3RvbU9wZXJhdGlvbi0+dmFs
aWRhdGVkUHJvZ3JhbSgpLT52YWxpZGF0ZWRQcm9ncmFtSW5mbygpKSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgY2xpZW50IHdhcyBub3QgZGlzY29ubmVjdGVkIHRo
ZW4gdGhpcyBjb29yZGluYXRvciBtdXN0IGJlIHRoZSBjbGllbnQgZm9yIGl0LgorICAgICAgICAg
ICAgQVNTRVJUKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+Y2xpZW50KCkgPT0gdGhpcyk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3Nh
Z2VDbGllbnQ6OnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW1Qcm94eShXZWJDdXN0b21GaWx0ZXJQ
cm9ncmFtUHJveHkqIGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSkKK3sKKyAgICAvLyBBdCB0aGlz
IHRpbWUgdGhlIHNoYWRlciBpcyBub3QgbmVlZGVkIGFueW1vcmUsIHNvIHdlIHJlbW92ZSBpdCBm
cm9tIG91ciBzZXQgYW5kCisgICAgLy8gc2VuZCBhIG1lc3NhZ2UgdG8gdGhlIG90aGVyIHByb2Nl
c3MgdG8gZGVsZXRlIGl0LgorICAgIG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMucmVtb3ZlKGN1c3Rv
bUZpbHRlclByb2dyYW1Qcm94eSk7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXll
clRyZWVDb29yZGluYXRvclByb3h5OjpSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGN1c3RvbUZp
bHRlclByb2dyYW1Qcm94eS0+aWQoKSkpOworfQorCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3JNZXNzYWdlQ2xpZW50OjpkaXNjb25uZWN0Q3VzdG9tRmlsdGVyUHJvZ3JhbXMoKQorewor
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IFdlYkNvcmUgd2lsbCBub3QgY2FsbCBpbnRvIHRoaXMgY29v
cmRpbmF0b3IgYW55bW9yZS4KKyAgICBIYXNoU2V0PFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94
eSo+OjppdGVyYXRvciBpdGVyID0gbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5iZWdpbigpOworICAg
IGZvciAoOyBpdGVyICE9IG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMuZW5kKCk7ICsraXRlcikKKyAg
ICAgICAgKCppdGVyKS0+c2V0Q2xpZW50KDApOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
V2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3JNZXNzYWdlQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTA4YWQyZmE2Yjk2Zjc2MjRjZTFl
YjVjYThkMDlmYWU3N2E2ZTg5ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3JNZXNzYWdlQ2xpZW50LmgKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VD
bGllbnRfaAorI2RlZmluZSBXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudF9o
CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yQ2xpZW50LmgiCisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisjaW5jbHVk
ZSAiV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2NsYXNzIFdlYlBhZ2U7CisKK2NsYXNzIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0
b3JNZXNzYWdlQ2xpZW50IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViQ29tcG9zaXRpbmdDb29yZGlu
YXRvck1lc3NhZ2VDbGllbnQ+CisgICAgLCBwdWJsaWMgQ29tcG9zaXRpbmdDb29yZGluYXRvck1l
c3NhZ2VDbGllbnQKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgLCBXZWJDdXN0b21GaWx0
ZXJQcm9ncmFtUHJveHlDbGllbnQKKyNlbmRpZgoreworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50KTsgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViQ29tcG9zaXRpbmdD
b29yZGluYXRvck1lc3NhZ2VDbGllbnQ+IGNyZWF0ZShXZWJQYWdlKik7CisKKyAgICB+V2ViQ29t
cG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQoKTsKKworICAgIC8vIENvbXBvc2l0aW5n
Q29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIHNldFJvb3RDb21wb3Np
dGluZ0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IHNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENvb3Jk
aW5hdGVkTGF5ZXJJbmZvJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldENvbXBvc2l0
aW5nTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGlu
YXRlZExheWVySUQ+JikgT1ZFUlJJREU7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZp
cnR1YWwgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhDb29yZGluYXRlZExheWVySUQs
IGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKSBPVkVSUklERTsKKyNlbmRpZgorICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCkg
T1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZUZvckxheWVyKENvb3JkaW5h
dGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29u
c3QgU3VyZmFjZVVwZGF0ZUluZm8mKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
VGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWlu
dDMyX3QgdGlsZUlEKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVVcGRhdGVB
dGxhcyhpbnQgYXRsYXNJRCwgY29uc3QgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lEKSBPVkVS
UklERTsKKworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUltYWdlQmFj
a2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBjb25zdCBTaGFyZWFibGVTdXJmYWNlOjpI
YW5kbGUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250
ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURF
OworCisgICAgdmlydHVhbCB2b2lkIGRpZFJlbmRlckZyYW1lKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIGNvbnRlbnRzU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY292ZXJlZFJlY3QpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBX
ZWJDb3JlOjpGbG9hdFBvaW50JiBwb3NpdGlvbikgT1ZFUlJJREU7CisKKyNpZiBVU0UoR1JBUEhJ
Q1NfU1VSRkFDRSkKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5
ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzU3Vy
ZmFjZVRva2VuJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN5bmNDYW52YXMoQ29vcmRp
bmF0ZWRMYXllcklELCB1aW50MzJfdCBmcm9udEJ1ZmZlcikgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIGRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEKSBPVkVSUklERTsKKyNlbmRp
ZgorCisgICAgdmlydHVhbCB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVy
SUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJikgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIHNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCkgT1ZFUlJJREU7CisKKyAg
ICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYpOworCisjaWYg
RU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgIHZvaWQgcmVxdWVzdEFuaW1hdGlv
bkZyYW1lKCk7CisjZW5kaWYKKyAgICB2b2lkIGludm9rZUZvcmNlUmVwYWludEFzeW5jQ2FsbGJh
Y2sodWludDY0X3QgY2FsbGJhY2tJRCk7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgV2ViQ29t
cG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQoV2ViUGFnZSopOworCisjaWYgRU5BQkxF
KENTU19TSEFERVJTKQorICAgIC8vIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudAor
ICAgIHZvaWQgcmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KFdlYkN1c3RvbUZpbHRlclBy
b2dyYW1Qcm94eSopOworCisgICAgdm9pZCBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVz
KGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpIE9WRVJSSURFOworICAg
IHZvaWQgZGlzY29ubmVjdEN1c3RvbUZpbHRlclByb2dyYW1zKCk7CisjZW5kaWYKKworICAgIFdl
YlBhZ2UqIG1fd2ViUGFnZTsKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICBIYXNoU2V0
PFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSo+IG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXM7Cisj
ZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKKworI2VuZGlmIC8v
IFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50X2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178512</attachid>
            <date>2012-12-10 04:10:12 -0800</date>
            <delta_ts>2012-12-11 13:29:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104360-20121210210735.patch</filename>
            <type>text/plain</type>
            <size>111513</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3MTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNGUzNzBkNjMzOTY1NmU4
M2ExMjNlYmJmMjNiOGU4OGE0ZThlMjEwMi4uN2QxMTM4OGJjMGE1YTY1M2NkN2I4OTYyZmRlZDlk
Zjc2Yjg1YjE3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4MCBAQAorMjAxMi0xMi0wNyAgR3dh
bmcgWW9vbiBId2FuZyAgPHJ5dW1pZWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgQ29vcmRp
bmF0ZWQgR3JhcGhpY3M6IFNlcGFyYXRlIExheWVyVHJlZUNvb3JkaW5hdG9yIGludG8gTGF5ZXJU
cmVlQ29vcmRpbmF0b3IgYW5kIENvbXBvc2l0aW5nQ29vcmRpbmF0b3IKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDM2MAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludGVybmFsIFJldmlldyBieSBIdWFu
ZyBEb25nc3VuZyBhbmQgSmFlIEh5dW4gUGFyay4KKworICAgICAgICBUaGUgTGF5ZXJUcmVlQ29v
cmRpbmF0b3IgaGFzIHRvbyBtYW55IHJlc3BvbnNpYmlsaXRpZXMuIEl0IGltcGxlbWVudHMKKyAg
ICAgICAgTGF5ZXJUcmVlSG9zdCwgR3JhcGhpY3NMYXllckNsaWVudCwgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyQ2xpZW50LAorICAgICAgICBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRp
bmF0b3IsIFVwZGF0ZUF0bGFzQ2xpZW50LCBHcmFwaGljc0xheWVyRmFjdG9yeQorICAgICAgICBh
bmQgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5Q2xpZW50LgorCisgICAgICAgIFRoaXMgcmVm
YWN0b3JpbmcgcmVkdWNlcyB0aGUgcmVzcG9uc2liaWxpdGllcyBvZiBMYXllclRyZWVDb29yZGlu
YXRvci4KKworICAgICAgICBCeSBjcmVhdGluZyBhIG5ldyBjbGFzcyBjYWxsZWQgQ29tcG9zaXRp
bmdDb29yZGluYXRvciwgd2hpY2ggdGFrZXMgdGhlCisgICAgICAgIHJlc3BvbnNpYmlsaXR5IG9m
IHNjaGVkdWxpbmcgY29tcG9zaXRpbmcgdGFza3MgaW4gV2ViUHJvY2VzcywKKyAgICAgICAgTGF5
ZXJUcmVlQ29vcmRpbmF0b3IgYWN0cyBsaWtlIGEgc2ltcGxlIExheWVyVHJlZUhvc3QuCisKKyAg
ICAgICAgQnkgZXh0cmFjdGluZyBpbnRlcmZhY2VzIGRlYWxpbmcgd2l0aCBMYXllclRyZWVDb29y
ZGluYXRvclByb3h5IHRvCisgICAgICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xp
ZW50LCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yIGlzIGRlY291cGxlZCBmcm9tCisgICAgICAgIElQ
QyBoYW5kbGluZy4KKworICAgICAgICBXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNs
aWVudCBpbXBsZW1lbnRzIElQQyBoYW5kbGluZyBmb3IKKyAgICAgICAgQ29tcG9zaXRpbmdDb29y
ZGluYXRvciBhbmQgTGF5ZXJUcmVlQ29vcmRpbmF0b3IuCisgICAgICAgIFdlYkN1c3RvbUZpbHRl
clByb2dyYW1Qcm94eUNsaWVudCBpcyByZXNwb25zaWJsZSBmb3IgSVBDIGhhbmRsaW5nLCBzbwor
ICAgICAgICBXZWJDb21wb3NpdGluZ0Nvb3JkaWFudG9yTWVzc2FnZUNsaWVudCBpbXBsZW1lbnRz
IHRoaXMgaW50ZXJmYWNlLCB0b28uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8g
Y2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgQWRkZWQuIEl0IHRh
a2VzIHJlc3BvbnNpYmlsaXkgZm9yIHNjaGVkdWxpbmcgY29tcG9zaXRpbmcgdGFza3MgYW5kCisg
ICAgICAgIG1hbmFnaW5nIHJlc291cmNlcy4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChX
ZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6On5Db21wb3NpdGluZ0Nvb3JkaW5hdG9yKToKKyAgICAg
ICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q29tcG9zaXRpbmdDb29yZGluYXRv
cik6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNldExheWVyRmx1
c2hTY2hlZHVsaW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAg
ICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjppbnZhbGlkYXRlKToKKyAgICAgICAg
KFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KToK
KyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Zm9yY2VSZXBhaW50KToK
KyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2l6ZURpZENoYW5nZSk6
CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0xh
eWVyQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnN5
bmNMYXllclN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6
c3luY0xheWVyQ2hpbGRyZW4pOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpjcmVhdGVDYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpzeW5jQ2FudmFzKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRv
cjo6ZGVzdHJveUNhbnZhcyk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0
b3I6OnN5bmNMYXllckZpbHRlcnMpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yOjpkZXRhY2hMYXllcik6CisgICAgICAgIChXZWJLaXQ6OnVwZGF0ZU9mZnNldEZyb21W
aWV3cG9ydEZvclNlbGYpOgorICAgICAgICAoV2ViS2l0Ojp1cGRhdGVPZmZzZXRGcm9tVmlld3Bv
cnRGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnN5
bmNGaXhlZExheWVycyk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6
OmxvY2tBbmltYXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRv
cjo6dW5sb2NrQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OnBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6Q29t
cG9zaXRpbmdDb29yZGluYXRvcjo6c3luY0Rpc3BsYXlTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmxheWVyRmx1c2hUaW1lckZpcmVkKToKKyAgICAgICAg
KFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlUGFnZU92ZXJsYXlMYXllcik6
CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRlc3Ryb3lQYWdlT3Zl
cmxheUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0
UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOjpzZXRQYWdlT3ZlcmxheU9wYWNpdHkpOgorICAgICAgICAoV2ViS2l0OjpDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZCk6CisgICAgICAg
IChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZUltYWdlQmFja2luZyk6Cisg
ICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnVwZGF0ZUltYWdlQmFja2lu
Zyk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNsZWFySW1hZ2VC
YWNraW5nQ29udGVudHMpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
OjpyZW1vdmVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yOjpmbHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKToKKyAgICAgICAgKFdlYktp
dDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6CisgICAg
ICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6Om5vdGlmeUZsdXNoUmVxdWlyZWQp
OgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpwYWludENvbnRlbnRz
KToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlR3JhcGhp
Y3NMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0
ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVU
aWxlKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVtb3ZlVGls
ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZVVwZGF0
ZUF0bGFzKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVtb3Zl
VXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp2
aXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGlu
YXRvcjo6c2V0TGF5ZXJBbmltYXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdD
b29yZGluYXRvcjo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OkNv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6
OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnB1cmdlQmFja2luZ1N0b3Jl
cyk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmJlZ2luQ29udGVu
dFVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNjaGVk
dWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcyk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OnJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3Jk
aW5hdG9yLmg6CisgICAgICAgIEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAoQ29tcG9zaXRpbmdDb29yZGluYXRvcik6CisgICAgICAgIChXZWJL
aXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnBhdXNlUmVuZGVyaW5nKToKKyAgICAgICAgKFdl
YktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVzdW1lUmVuZGVyaW5nKToKKyAgICAgICAg
KFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cm9vdEdyYXBoaWNzTGF5ZXIpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5n
Q29vcmRpbmF0b3JDbGllbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAo
Q29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQpOgorICAgICAgICBUaGlzIGludGVy
ZmFjZSBwcm92aWRlcyBhIHdheSB0byBzZW5kIG1lc3NhZ2VzIHRvIHJlbmRlcmVyLgorICAgICAg
ICAoQ29tcG9zaXRpbmdDb29yZGluYXRvckNsaWVudCk6CisgICAgICAgIFRoaXMgaW50ZXJmYWNl
IHByb3ZpZGVzIGEgd2F5IHRvIHVzZSBMYXllclRyZWVDb29yZGluYXRvciBmcm9tCisgICAgICAg
IENvbXBvc2l0aW5nIENvb3JkaW5hdG9yLgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yQ2xpZW50Ojp+Q29tcG9zaXRpbmdDb29yZGluYXRvckNsaWVudCk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRp
bmF0b3IuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6fkxheWVy
VHJlZUNvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OkxheWVyVHJlZUNvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRp
bmF0b3I6OnNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpzY2hlZHVsZUxheWVyRmx1c2gpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6aW52YWxpZGF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXROb25Db21wb3NpdGVkQ29udGVudHNO
ZWVkRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpmb3Jj
ZVJlcGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6c2l6ZURp
ZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpkaWRJbnN0
YWxsUGFnZU92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6
ZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29y
ZGluYXRvcjo6c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVDb29yZGluYXRvcjo6c2V0UGFnZU92ZXJsYXlPcGFjaXR5KToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnBhdXNlUmVuZGVyaW5nKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlc3VtZVJlbmRlcmluZyk6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjp2aWV3U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXlvdXRJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUNvb3JkaW5hdG9yOjppc09wYXF1ZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnBhaW50Q29udGVudHMpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6cGFpbnRPdmVybGF5Q29udGVu
dHMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6c2V0VmlzaWJsZUNv
bnRlbnRzUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpncmFw
aGljc0xheWVyRmFjdG9yeSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9y
OjpzY2hlZHVsZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5h
dG9yOjpyZW5kZXJOZXh0RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGlu
YXRvcjo6cHVyZ2VCYWNraW5nU3RvcmVzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OnNldEJhY2tncm91bmRDb2xvcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoTGF5ZXJUcmVlQ29vcmRpbmF0b3IpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3JNZXNzYWdlQ2xpZW50LmNwcDoKKyAgICAgICAgQWRkZWQuIE1hbmFnZXMgc2VuZHMgYWN0
dWFsIElQQyBtZXNzYWdlcyBhbmQgbWFuYWdlcworICAgICAgICBXZWJDdXN0b21GaWx0ZXJQcm9n
cmFtCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29t
cG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6On5XZWJDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yTWVzc2FnZUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3JNZXNzYWdlQ2xpZW50OjpXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVu
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xp
ZW50OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVu
dDo6c2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29t
cG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OnNldENvbXBvc2l0aW5nTGF5ZXJGaWx0
ZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VD
bGllbnQ6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6Y3JlYXRlVGlsZUZvckxheWVyKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OnVw
ZGF0ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3JNZXNzYWdlQ2xpZW50OjpyZW1vdmVUaWxlRm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0
OjpXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6Y3JlYXRlVXBkYXRlQXRs
YXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNs
aWVudDo6cmVtb3ZlVXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6Y3JlYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OnVwZGF0ZUlt
YWdlQmFja2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JN
ZXNzYWdlQ2xpZW50OjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OnJlbW92ZUltYWdlQmFj
a2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdl
Q2xpZW50OjpkaWRSZW5kZXJGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpjcmVh
dGVDYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVz
c2FnZUNsaWVudDo6c3luY0NhbnZhcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpkZXN0cm95Q2FudmFzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OnNldExheWVyQW5pbWF0
aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdl
Q2xpZW50OjpzZXRBbmltYXRpb25zTG9ja2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9z
aXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OnNldEJhY2tncm91bmRDb2xvcik6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpyZXF1
ZXN0QW5pbWF0aW9uRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yTWVzc2FnZUNsaWVudDo6aW52b2tlRm9yY2VSZXBhaW50QXN5bmNDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50Ojpj
aGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29t
cG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OnJlbW92ZUN1c3RvbUZpbHRlclByb2dy
YW1Qcm94eSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNz
YWdlQ2xpZW50OjpkaXNjb25uZWN0Q3VzdG9tRmlsdGVyUHJvZ3JhbXMpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3JNZXNzYWdlQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50KToKKwogMjAxMi0xMi0xMCAg
SHVhbmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KIAogICAgICAgICBDb29y
ZGluYXRlZCBHcmFwaGljczogUmVtb3ZlIHRoZSBkZXBlbmRlbmN5IG9mIFNoYXJlYWJsZVN1cmZh
Y2UgZnJvbSBDb29yZGluYXRlZCBHcmFwaGljcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKaW5kZXggNDdm
NWJkZDlmN2RjZWJiZjc0YTJhN2YxMDVjMmU5OTg1YjU4ZDdiYy4uNTNiNDMxYTk3MzkwNmI1ZjQz
NjVlMTQ1MDIyNTFkODBhZDdiM2M5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ01ha2VM
aXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKQEAgLTQ5NywxMSAr
NDk3LDEzIEBAIHNldChXZWJLaXQyX1NPVVJDRVMKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
VW5kb1N0ZXAuY3BwCiAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9BcmVhQWxsb2NhdG9yLmNwcAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwCiAgICAgV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkVGlsZS5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9MYXllclRyZWVDb29yZGluYXRvci5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5jcHAKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9XZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudC5j
cHAKICkKIAogc2V0KFdlYktpdDJfTUVTU0FHRVNfSU5fRklMRVMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IDIy
MWIwMzE0MGE0MmY5MTRkODdhNjkyNjZjMmIzZTAzYmFlZDNiZDMuLmIxMTA4OGMzYmI4Mzk1ZjU2
ZTVhYjIyMTUyZGRhYTU4YjFjY2ZkMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1Rhcmdl
dC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtMzcwLDExICszNzAsMTQg
QEAgSEVBREVSUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5o
IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaCBcCiAgICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5oIFwKKyAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5h
dG9yLmggXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBv
c2l0aW5nQ29vcmRpbmF0b3JDbGllbnQuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmggXAogICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgg
XAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
VGlsZS5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVDb29yZGluYXRvci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9VcGRhdGVBdGxhcy5oIFwKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9XZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudC5oIFwKICAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvVGFwSGlnaGxpZ2h0Q29udHJvbGxlci5oIFwKICAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YkNvbnRleHRNZW51LmggXApAQCAtNzU0LDExICs3NTcsMTMgQEAgU09VUkNFUyArPSBcCiAgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAgXAogICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxvY2F0b3IuY3BwIFwKKyAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcCBcCiAgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAgXAogICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1VwZGF0ZUF0bGFzLmNwcCBc
CisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29tcG9zaXRp
bmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
VGFwSGlnaGxpZ2h0Q29udHJvbGxlci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXll
clRyZWVIb3N0LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmNwcCBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0
b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmY3NjY5NWY5M2U4MWRlZTlhMTNhZDg5NGU4NGEwMDExN2QzMDk3
N2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcApAQCAtMCwwICsx
LDY4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAx
MDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIkNvbXBvc2l0
aW5nQ29vcmRpbmF0b3IuaCIKKworI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgiCisj
aW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBo
aWNzU3VyZmFjZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvUmVuZGVyTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyQmFja2luZy5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaD4KKyNpbmNsdWRlIDx3
dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisjaW5jbHVk
ZSAiQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5oIgorI2luY2x1ZGUgIlZhbGlkYXRlZEN1
c3RvbUZpbHRlck9wZXJhdGlvbi5oIgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFzc093blB0cjxDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yPiBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGUoUGFnZSogcGFnZSwgQ29tcG9zaXRp
bmdDb29yZGluYXRvckNsaWVudCogY2xpZW50LCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2Fn
ZUNsaWVudCogbWVzc2FnZUNsaWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENvbXBv
c2l0aW5nQ29vcmRpbmF0b3IocGFnZSwgY2xpZW50LCBtZXNzYWdlQ2xpZW50KSk7Cit9CisKK0Nv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6On5Db21wb3NpdGluZ0Nvb3JkaW5hdG9yKCkKK3sKKyAgICAv
LyBQcmV2ZW50IHNldENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCgwKSAtPiBkZXRhY2hM
YXllcigpIGZyb20gbW9kaWZ5aW5nIHRoZSBzZXQgd2hpbGUgd2UgaXRlcmF0ZSBpdC4KKyAgICBI
YXNoU2V0PENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+IHJlZ2lzdGVyZWRMYXllcnM7CisgICAg
cmVnaXN0ZXJlZExheWVycy5zd2FwKG1fcmVnaXN0ZXJlZExheWVycyk7CisKKyAgICBIYXNoU2V0
PENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBlbmQgPSByZWdpc3RlcmVkTGF5
ZXJzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6
aXRlcmF0b3IgaXQgPSByZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
KyAgICAgICAgKCppdCktPnNldENvb3JkaW5hdG9yKDApOworfQorCitDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yKFBhZ2UqIHBhZ2UsIENvbXBvc2l0aW5nQ29v
cmRpbmF0b3JDbGllbnQqIGNsaWVudCwgQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGll
bnQqIG1lc3NhZ2VDbGllbnQpCisgICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1fY2xpZW50KGNs
aWVudCkKKyAgICAsIG1fbWVzc2FnZUNsaWVudChtZXNzYWdlQ2xpZW50KQorICAgICwgbV9pc1Zh
bGlkKHRydWUpCisgICAgLCBtX2lzUHVyZ2luZyhmYWxzZSkKKyAgICAsIG1fd2FpdGluZ0ZvclJl
bmRlcmVyKHRydWUpCisgICAgLCBtX2lzU3VzcGVuZGVkKGZhbHNlKQorICAgICwgbV9jb250ZW50
c1NjYWxlKDEpCisgICAgLCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSh0cnVlKQor
ICAgICwgbV9zaG91bGRTeW5jRnJhbWUoZmFsc2UpCisgICAgLCBtX2RpZEluaXRpYWxpemVSb290
Q29tcG9zaXRpbmdMYXllcih0cnVlKQorICAgICwgbV9sYXllckZsdXNoVGltZXIodGhpcywgJkNv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OmxheWVyRmx1c2hUaW1lckZpcmVkKQorICAgICwgbV9yZWxl
YXNlSW5hY3RpdmVBdGxhc2VzVGltZXIodGhpcywgJkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJl
bGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKQorICAgICwgbV9sYXllckZsdXNoU2NoZWR1
bGluZ0VuYWJsZWQodHJ1ZSkKKyAgICAsIG1fYW5pbWF0aW9uc0xvY2tlZChmYWxzZSkKK3sKKyAg
ICAvLyBDcmVhdGUgYSByb290IGxheWVyLgorICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NMYXll
cjo6Y3JlYXRlKHRoaXMsIHRoaXMpOworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogY29v
cmRpbmF0ZWRSb290TGF5ZXIgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXll
ci5nZXQoKSk7CisgICAgY29vcmRpbmF0ZWRSb290TGF5ZXItPnNldFJvb3RMYXllcih0cnVlKTsK
KyNpZm5kZWYgTkRFQlVHCisgICAgbV9yb290TGF5ZXItPnNldE5hbWUoIkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3Igcm9vdCBsYXllciIpOworI2VuZGlmCisgICAgbV9yb290TGF5ZXItPnNldERyYXdz
Q29udGVudChmYWxzZSk7CisKKyAgICBJbnRTaXplIHZpZXdTaXplKG1fY2xpZW50LT52aWV3U2l6
ZSgpKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZSh2aWV3U2l6ZSk7CisKKyAgICBtX25vbkNv
bXBvc2l0ZWRDb250ZW50TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcywgdGhpcyk7
CisjaWZuZGVmIE5ERUJVRworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmFt
ZSgiQ29tcG9zaXRpbmdDb29yZGluYXRvciBub24tY29tcG9zaXRlZCBjb250ZW50Iik7CisjZW5k
aWYKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVl
KTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNpemUodmlld1NpemUpOwor
CisgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5n
ZXQoKSk7CisKKyAgICBpZiAobV9jbGllbnQtPmhhc1BhZ2VPdmVybGF5KCkpCisgICAgICAgIGNy
ZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQor
Cit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5h
YmxlZChib29sIGxheWVyRmx1c2hpbmdFbmFibGVkKQoreworICAgIGlmIChtX2xheWVyRmx1c2hT
Y2hlZHVsaW5nRW5hYmxlZCA9PSBsYXllckZsdXNoaW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPSBsYXllckZsdXNoaW5nRW5h
YmxlZDsKKworICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkgeworICAgICAg
ICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNh
bmNlbFBlbmRpbmdMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRv
cjo6c2NoZWR1bGVMYXllckZsdXNoKCkKK3sKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFNjaGVkdWxp
bmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVy
LmlzQWN0aXZlKCkpCisgICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsK
K30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjYW5jZWxQZW5kaW5nTGF5ZXJGbHVz
aCgpCit7CisgICAgbV9sYXllckZsdXNoVGltZXIuc3RvcCgpOworfQorCit2b2lkIENvbXBvc2l0
aW5nQ29vcmRpbmF0b3I6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIGdy
YXBoaWNzTGF5ZXIpCit7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5yZW1vdmVB
bGxDaGlsZHJlbigpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0Q29udGVu
dHNPcGFxdWUobV9jbGllbnQtPmlzT3BhcXVlQ29udGVudHMoKSk7CisKKyAgICAvLyBBZGQgdGhl
IGFjY2VsZXJhdGVkIGxheWVyIHRyZWUgaGllcmFyY2h5LgorICAgIGlmIChncmFwaGljc0xheWVy
KQorICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPmFkZENoaWxkKGdyYXBoaWNz
TGF5ZXIpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmludmFsaWRhdGUoKQor
eworICAgIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7CisKKyAgICBBU1NFUlQobV9pc1ZhbGlk
KTsKKyAgICBtX3Jvb3RMYXllciA9IG51bGxwdHI7CisgICAgbV9pc1ZhbGlkID0gZmFsc2U7Cit9
CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5z
ZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVy
KQorICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0
KTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OmZvcmNlUmVwYWludCgpCit7CisgICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgZm9y
IHJ1bm5pbmcgbGF5b3V0IHRlc3RzLiBTaW5jZSBpbiB0aGlzIGNhc2Ugd2UgYXJlIG5vdCB3YWl0
aW5nIGZvciBhIHJlbmRlcmVyIHRvIHJlcGx5IG5pY2VseS4KKyAgICAvLyBJbnN0ZWFkIHdlIGFy
ZSBqdXN0IHRyaWdnZXJpbmcgZm9yY2VSZXBhaW50LiBCdXQgd2Ugc3RpbGwgd2FudCB0byBoYXZl
IHRoZSBzY3JpcHRlZCBhbmltYXRpb24gY2FsbGJhY2tzIGJlaW5nIGV4ZWN1dGVkLgorICAgIHN5
bmNEaXNwbGF5U3RhdGUoKTsKKworICAgIC8vIFdlIG5lZWQgdG8gc2NoZWR1bGUgYW5vdGhlciBm
bHVzaCwgb3RoZXJ3aXNlIHRoZSBmb3JjZWQgcGFpbnQgbWlnaHQgY2FuY2VsIGEgbGF0ZXIgZXhw
ZWN0ZWQgZmx1c2guCisgICAgLy8gVGhpcyBpcyBhbGlnbmVkIHdpdGggTGF5ZXJUcmVlSG9zdENB
LgorICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdl
cygpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNpemVEaWRDaGFuZ2UoY29u
c3QgSW50U2l6ZSYgbmV3U2l6ZSkKK3sKKyAgICBpZiAobV9yb290TGF5ZXItPnNpemUoKSA9PSBu
ZXdTaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShuZXdT
aXplKTsKKworICAgIC8vIElmIHRoZSBuZXdTaXplIGV4cG9zZXMgbmV3IGFyZWFzIG9mIHRoZSBu
b24tY29tcG9zaXRlZCBjb250ZW50IGEgc2V0TmVlZHNEaXNwbGF5IGlzIG5lZWRlZAorICAgIC8v
IGZvciB0aG9zZSBuZXdseSBleHBvc2VkIGFyZWFzLgorICAgIEZsb2F0U2l6ZSBvbGRTaXplID0g
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCk7CisgICAgbV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgaWYgKG5ld1NpemUud2lkdGgo
KSA+IG9sZFNpemUud2lkdGgoKSkgeworICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGQ6Om1pbihz
dGF0aWNfY2FzdDxmbG9hdD4obmV3U2l6ZS5oZWlnaHQoKSksIG9sZFNpemUuaGVpZ2h0KCkpOwor
ICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVj
dChGbG9hdFJlY3Qob2xkU2l6ZS53aWR0aCgpLCAwLCBuZXdTaXplLndpZHRoKCkgLSBvbGRTaXpl
LndpZHRoKCksIGhlaWdodCkpOworICAgIH0KKworICAgIGlmIChuZXdTaXplLmhlaWdodCgpID4g
b2xkU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5z
ZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KDAsIG9sZFNpemUuaGVpZ2h0KCksIG5ld1Np
emUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSAtIG9sZFNpemUuaGVpZ2h0KCkpKTsKKworICAg
IGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCisgICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0
U2l6ZShuZXdTaXplKTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCitib29sIENv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpCit7CisgICAg
aWYgKG1fd2FpdGluZ0ZvclJlbmRlcmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
bml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCgpOworCisgICAgbV9yb290TGF5
ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBtX25vbkNv
bXBvc2l0ZWRDb250ZW50TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9u
bHkoKTsKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQorICAgICAgICBtX3BhZ2VPdmVybGF5
TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIGJv
b2wgZGlkU3luYyA9IG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+Zmx1c2hDb21wb3NpdGlu
Z1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CisKKyAgICBmbHVzaFBlbmRpbmdJbWFnZUJhY2tp
bmdDaGFuZ2VzKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGV0YWNoZWRMYXll
cnMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fbWVzc2FnZUNsaWVudC0+ZGVsZXRlQ29tcG9zaXRp
bmdMYXllcihtX2RldGFjaGVkTGF5ZXJzW2ldKTsKKyAgICBtX2RldGFjaGVkTGF5ZXJzLmNsZWFy
KCk7CisKKyAgICBpZiAobV9zaG91bGRTeW5jRnJhbWUpIHsKKyAgICAgICAgZGlkU3luYyA9IHRy
dWU7CisKKyAgICAgICAgSW50U2l6ZSBjb250ZW50c1NpemUgPSByb3VuZGVkSW50U2l6ZShtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKSk7CisgICAgICAgIEludFJlY3QgY292ZXJl
ZFJlY3QgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXIuZ2V0KCkpLT5jb3ZlclJlY3QoKTsKKyAgICAgICAgbV9tZXNzYWdlQ2xpZW50LT5kaWRS
ZW5kZXJGcmFtZShjb250ZW50c1NpemUsIGNvdmVyZWRSZWN0KTsKKyAgICAgICAgbV93YWl0aW5n
Rm9yUmVuZGVyZXIgPSB0cnVlOworICAgICAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IGZhbHNlOwor
ICAgIH0gZWxzZQorICAgICAgICB1bmxvY2tBbmltYXRpb25zKCk7CisKKyAgICByZXR1cm4gZGlk
U3luYzsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjppbml0aWFsaXplUm9vdENv
bXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCgpCit7CisgICAgaWYgKG1fZGlkSW5pdGlhbGl6ZVJvb3RD
b21wb3NpdGluZ0xheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX21lc3NhZ2VDbGllbnQt
PnNldFJvb3RDb21wb3NpdGluZ0xheWVyKHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9v
dExheWVyLmdldCgpKS0+aWQoKSk7CisgICAgbV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5n
TGF5ZXIgPSB0cnVlOworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKK30KKwordm9pZCBD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQg
aWQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBpbmZvKQoreworICAgIGlmIChtX3Nob3Vs
ZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSkgeworICAgICAgICBtX21lc3NhZ2VDbGllbnQtPmRp
ZENoYW5nZVNjcm9sbFBvc2l0aW9uKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpKTsK
KyAgICAgICAgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUgPSBmYWxzZTsKKyAgICB9
CisKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV9tZXNzYWdlQ2xpZW50LT5z
ZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoaWQsIGluZm8pOworfQorCit2b2lkIENvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OnN5bmNMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29u
c3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGNoaWxkcmVuKQoreworICAgIG1fc2hvdWxk
U3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX21lc3NhZ2VDbGllbnQtPnNldENvbXBvc2l0aW5nTGF5
ZXJDaGlsZHJlbihpZCwgY2hpbGRyZW4pOworfQorCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
Cit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExh
eWVySUQgaWQsIFBsYXRmb3JtTGF5ZXIqIGNhbnZhc1BsYXRmb3JtTGF5ZXIpCit7CisgICAgbV9z
aG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIEdyYXBoaWNzU3VyZmFjZVRva2VuIHRva2VuID0g
Y2FudmFzUGxhdGZvcm1MYXllci0+Z3JhcGhpY3NTdXJmYWNlVG9rZW4oKTsKKyAgICBJbnRTaXpl
IGNhbnZhc1NpemUgPSBjYW52YXNQbGF0Zm9ybUxheWVyLT5wbGF0Zm9ybUxheWVyU2l6ZSgpOwor
ICAgIG1fbWVzc2FnZUNsaWVudC0+Y3JlYXRlQ2FudmFzKGlkLCBjYW52YXNTaXplLCB0b2tlbik7
Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c3luY0NhbnZhcyhDb29yZGluYXRl
ZExheWVySUQgaWQsIFBsYXRmb3JtTGF5ZXIqIGNhbnZhc1BsYXRmb3JtTGF5ZXIpCit7CisgICAg
bV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIHVpbnQzMl90IGZyb250QnVmZmVyID0gY2Fu
dmFzUGxhdGZvcm1MYXllci0+Y29weVRvR3JhcGhpY3NTdXJmYWNlKCk7CisgICAgbV9tZXNzYWdl
Q2xpZW50LT5zeW5jQ2FudmFzKGlkLCBmcm9udEJ1ZmZlcik7Cit9CisKK3ZvaWQgQ29tcG9zaXRp
bmdDb29yZGluYXRvcjo6ZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQpCit7Cisg
ICAgaWYgKG1faXNQdXJnaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Nob3VsZFN5bmNG
cmFtZSA9IHRydWU7CisgICAgbV9tZXNzYWdlQ2xpZW50LT5kZXN0cm95Q2FudmFzKGlkKTsKK30K
KyNlbmRpZgorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQordm9pZCBDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yOjpzeW5jTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7
CisgICAgbV9tZXNzYWdlQ2xpZW50LT5zZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhpZCwgZmls
dGVycyk7Cit9CisjZW5kaWYKKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hM
YXllcihDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIG1fcmVnaXN0ZXJl
ZExheWVycy5yZW1vdmUobGF5ZXIpOworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAg
ICBtX2RldGFjaGVkTGF5ZXJzLmFwcGVuZChsYXllci0+aWQoKSk7CisgICAgc2NoZWR1bGVMYXll
ckZsdXNoKCk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvclNl
bGYoUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyKQoreworICAgIC8vIFRoZXNlIGNvbmRpdGlvbnMg
bXVzdCBtYXRjaCB0aGUgY29uZGl0aW9ucyBpbiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVp
cmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbi4KKyAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tp
bmcgPSByZW5kZXJMYXllci0+YmFja2luZygpOworICAgIGlmICghYmFja2luZykKKyAgICAgICAg
cmV0dXJuOworCisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyTGF5ZXItPnJlbmRlcmVy
KCktPnN0eWxlKCk7CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFyZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgcmVu
ZGVyTGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPnBvc2l0aW9uKCkgIT0gRml4ZWRQb3NpdGlv
bikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFyZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+
Y29udGFpbmVyKCktPmlzUmVuZGVyVmlldygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IXJlbmRlckxheWVyLT5pc1N0YWNraW5nQ29udGV4dCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIgPSB0b0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcihiYWNraW5nLT5ncmFwaGljc0xheWVyKCkpOworICAgIGdyYXBoaWNzTGF5
ZXItPnNldEZpeGVkVG9WaWV3cG9ydCh0cnVlKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlT2Zm
c2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIoUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyKQoreworICAg
IHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvclNlbGYocmVuZGVyTGF5ZXIpOworCisgICAgaWYg
KHJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpCisgICAgICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3
cG9ydEZvckxheWVyKHJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpOworICAgIGlmIChyZW5kZXJM
YXllci0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9y
TGF5ZXIocmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpOworfQorCit2b2lkIENvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OnN5bmNGaXhlZExheWVycygpCit7CisgICAgaWYgKCFtX3BhZ2UtPnNldHRp
bmdzKCkgfHwgIW1fcGFnZS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZp
eGVkUG9zaXRpb25FbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9wYWdl
LT5tYWluRnJhbWUoKS0+dmlldygpLT5oYXNWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cygpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJMYXllciogcm9vdFJlbmRlckxheWVyID0gbV9w
YWdlLT5tYWluRnJhbWUoKS0+Y29udGVudFJlbmRlcmVyKCktPmNvbXBvc2l0b3IoKS0+cm9vdFJl
bmRlckxheWVyKCk7CisgICAgQVNTRVJUKHJvb3RSZW5kZXJMYXllcik7CisgICAgaWYgKHJvb3RS
ZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKQorICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3Bv
cnRGb3JMYXllcihyb290UmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSk7Cit9CisKK3ZvaWQgQ29t
cG9zaXRpbmdDb29yZGluYXRvcjo6bG9ja0FuaW1hdGlvbnMoKQoreworICAgIG1fYW5pbWF0aW9u
c0xvY2tlZCA9IHRydWU7CisgICAgbV9tZXNzYWdlQ2xpZW50LT5zZXRBbmltYXRpb25zTG9ja2Vk
KHRydWUpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnVubG9ja0FuaW1hdGlv
bnMoKQoreworICAgIGlmICghbV9hbmltYXRpb25zTG9ja2VkKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2FuaW1hdGlvbnNMb2NrZWQgPSBmYWxzZTsKKyAgICBtX21lc3NhZ2VDbGllbnQtPnNl
dEFuaW1hdGlvbnNMb2NrZWQoZmFsc2UpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0
b3I6OnBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCkKK3sKKyAgICBpZiAobV9pc1N1c3BlbmRl
ZCB8fCBtX3dhaXRpbmdGb3JSZW5kZXJlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2Ug
bG9jayB0aGUgYW5pbWF0aW9ucyB3aGlsZSBwZXJmb3JtaW5nIGxheW91dCwgdG8gYXZvaWQgZmxp
Y2tlcnMgY2F1c2VkIGJ5IGFuaW1hdGlvbnMgY29udGludWluZyBpbiB0aGUgcmVuZGVyZXIgd2hp
bGUKKyAgICAvLyB0aGUgd2ViIHByb2Nlc3MgbGF5b3V0IHdhbnRzIHRvIGNhbmNlbCB0aGVtLgor
ICAgIGxvY2tBbmltYXRpb25zKCk7CisgICAgc3luY0Rpc3BsYXlTdGF0ZSgpOworCisgICAgLy8g
V2UgY2FuIHVubG9jayB0aGUgYW5pbWF0aW9ucyBiZWZvcmUgZmx1c2hpbmcgaWYgdGhlcmUgYXJl
IG5vIHZpc2libGUgY2hhbmdlcywgZm9yIGV4YW1wbGUgaWYgdGhlcmUgYXJlIGNvbnRlbnQgdXBk
YXRlcworICAgIC8vIGluIGEgbGF5ZXIgd2l0aCBvcGFjaXR5IDAuCisgICAgYm9vbCBjYW5Vbmxv
Y2tCZWZvcmVGbHVzaCA9ICFtX2lzVmFsaWQgfHwgIXRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
KG1fcm9vdExheWVyLmdldCgpKS0+aGFzUGVuZGluZ1Zpc2libGVDaGFuZ2VzKCk7CisgICAgaWYg
KGNhblVubG9ja0JlZm9yZUZsdXNoKQorICAgICAgICB1bmxvY2tBbmltYXRpb25zKCk7CisKKyAg
ICBpZiAoIW1faXNWYWxpZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBkaWRTeW5jID0g
Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7CisgICAgbV9jbGllbnQtPmRpZFBlcmZvcm1TY2hl
ZHVsZWRMYXllckZsdXNoKGRpZFN5bmMpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0
b3I6OnN5bmNEaXNwbGF5U3RhdGUoKQoreworI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9G
UkFNRSkgJiYgIVVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikgJiYgIVVTRShSRVFV
RVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCisgICAgLy8gTWFrZSBzdXJlIHRo
YXQgYW55IHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBhbmltYXRpb24gY2FsbGJhY2tzIGFyZSBiZWlu
ZyBleGVjdXRlZCBiZWZvcmUgd2UgZmx1c2ggdGhlIGxheWVycy4KKyAgICBtX3BhZ2UtPm1haW5G
cmFtZSgpLT52aWV3KCktPnNlcnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMoY29udmVydFNlY29uZHNU
b0RPTVRpbWVTdGFtcChjdXJyZW50VGltZSgpKSk7CisjZW5kaWYKKworICAgIG1fY2xpZW50LT5s
YXlvdXRJZk5lZWRlZCgpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmxheWVy
Rmx1c2hUaW1lckZpcmVkKFRpbWVyPENvbXBvc2l0aW5nQ29vcmRpbmF0b3I+KikKK3sKKyAgICBw
ZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OmNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKQoreworICAgIEFTU0VSVCghbV9wYWdlT3Zl
cmxheUxheWVyKTsKKworICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNy
ZWF0ZSh0aGlzLCB0aGlzKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9wYWdlT3ZlcmxheUxheWVy
LT5zZXROYW1lKCJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yIHBhZ2Ugb3ZlcmxheSBjb250ZW50Iik7
CisjZW5kaWYKKworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUp
OworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZShtX2NsaWVudC0+dmlld1NpemUoKSk7
CisKKyAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobV9wYWdlT3ZlcmxheUxheWVyLmdldCgpKTsK
KworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3Zl
cmxheUxheWVyKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsK
KyAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBudWxscHRyOworCisgICAgc2NoZWR1bGVMYXllckZs
dXNoKCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0UGFnZU92ZXJsYXlO
ZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBBU1NFUlQo
bV9wYWdlT3ZlcmxheUxheWVyKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5lZWRzRGlz
cGxheUluUmVjdChyZWN0KTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzZXRQYWdlT3ZlcmxheU9wYWNpdHkoZmxvYXQgdmFsdWUp
Cit7CisgICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7CisgICAgbV9wYWdlT3ZlcmxheUxh
eWVyLT5zZXRPcGFjaXR5KHZhbHVlKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwor
UGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gQ29tcG9zaXRpbmdDb29yZGluYXRv
cjo6Y3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoSW1hZ2UqIGltYWdlKQoreworICAgIENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCA9IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpn
ZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKGltYWdlKTsKKyAgICBJbWFnZUJhY2tpbmdNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7CisgICAgUmVmUHRy
PENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBpbWFnZUJhY2tpbmc7CisgICAgaWYgKGl0ID09IG1f
aW1hZ2VCYWNraW5ncy5lbmQoKSkgeworICAgICAgICBpbWFnZUJhY2tpbmcgPSBDb29yZGluYXRl
ZEltYWdlQmFja2luZzo6Y3JlYXRlKHRoaXMsIGltYWdlKTsKKyAgICAgICAgbV9pbWFnZUJhY2tp
bmdzLmFkZChpbWFnZUlELCBpbWFnZUJhY2tpbmcpOworICAgIH0gZWxzZQorICAgICAgICBpbWFn
ZUJhY2tpbmcgPSBpdC0+dmFsdWU7CisKKyAgICByZXR1cm4gaW1hZ2VCYWNraW5nOworfQorCit2
b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVl
OworICAgIG1fbWVzc2FnZUNsaWVudC0+Y3JlYXRlSW1hZ2VCYWNraW5nKGltYWdlSUQpOworfQor
Cit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6
SGFuZGxlJiBoYW5kbGUpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1f
bWVzc2FnZUNsaWVudC0+dXBkYXRlSW1hZ2VCYWNraW5nKGltYWdlSUQsIGhhbmRsZSk7Cit9CisK
K3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAgbV9zaG91bGRTeW5jRnJh
bWUgPSB0cnVlOworICAgIG1fbWVzc2FnZUNsaWVudC0+Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50
cyhpbWFnZUlEKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZW1vdmVJbWFn
ZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQoreworICAgIGlmICht
X2lzUHVyZ2luZykKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1faW1hZ2VCYWNraW5n
cy5jb250YWlucyhpbWFnZUlEKSk7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAg
IG1faW1hZ2VCYWNraW5ncy5yZW1vdmUoaW1hZ2VJRCk7CisgICAgbV9tZXNzYWdlQ2xpZW50LT5y
ZW1vdmVJbWFnZUJhY2tpbmcoaW1hZ2VJRCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGlu
YXRvcjo6Zmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpCit7CisgICAgSW1hZ2VCYWNr
aW5nTWFwOjppdGVyYXRvciBlbmQgPSBtX2ltYWdlQmFja2luZ3MuZW5kKCk7CisgICAgZm9yIChJ
bWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2ltYWdlQmFja2luZ3MuYmVnaW4oKTsg
aXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgaXRlci0+dmFsdWUtPnVwZGF0ZSgpOworfQor
Cit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29u
c3QgR3JhcGhpY3NMYXllciosIGRvdWJsZSAvKiB0aW1lICovKQoreworfQorCit2b2lkIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6Om5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXll
ciopCit7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cGFpbnRDb250ZW50cyhj
b25zdCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBHcmFwaGljc0NvbnRleHQmIGdyYXBo
aWNzQ29udGV4dCwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UgcGhhc2UsIGNvbnN0IEludFJl
Y3QmIGNsaXBSZWN0KQoreworICAgIGJvb2wgaXNOb25Db21wb3NpdGluZ0NvbnRlbnQgPSAoZ3Jh
cGhpY3NMYXllciA9PSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIpOworICAgIGJvb2wgaXNQ
YWdlT3ZlcmxheSA9IChncmFwaGljc0xheWVyID09IG1fcGFnZU92ZXJsYXlMYXllcik7CisKKyAg
ICBpZiAoaXNOb25Db21wb3NpdGluZ0NvbnRlbnQpCisgICAgICAgIG1fY2xpZW50LT5wYWludENv
bnRlbnRzKGdyYXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOworICAgIGVsc2UgaWYgKGlzUGFnZU92
ZXJsYXkpCisgICAgICAgIG1fY2xpZW50LT5wYWludE92ZXJsYXlDb250ZW50cyhncmFwaGljc0Nv
bnRleHQsIGNsaXBSZWN0KTsKK30KKworUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBDb21wb3Np
dGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQq
IGNsaWVudCkKK3sKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbmV3IENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcihjbGllbnQpOworICAgIGxheWVyLT5zZXRDb29yZGluYXRv
cih0aGlzKTsKKyAgICBtX3JlZ2lzdGVyZWRMYXllcnMuYWRkKGxheWVyKTsKKyAgICBsYXllci0+
c2V0Q29udGVudHNTY2FsZShtX2NvbnRlbnRzU2NhbGUpOworICAgIGxheWVyLT5hZGp1c3RWaXNp
YmxlUmVjdCgpOworICAgIHJldHVybiBhZG9wdFB0cihsYXllcik7Cit9CisKK3ZvaWQgQ29tcG9z
aXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwg
dWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29u
c3QgSW50UmVjdCYgdGlsZVJlY3QpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwor
ICAgIG1fbWVzc2FnZUNsaWVudC0+Y3JlYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwg
dGlsZVJlY3QsIHVwZGF0ZUluZm8pOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6
OnVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwg
Y29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IEludFJlY3QmIHRpbGVS
ZWN0KQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX21lc3NhZ2VDbGll
bnQtPnVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJ
bmZvKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZW1vdmVUaWxlKENvb3Jk
aW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQpCit7CisgICAgaWYgKG1faXNQ
dXJnaW5nKQorICAgICAgICByZXR1cm47CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwor
ICAgIG1fbWVzc2FnZUNsaWVudC0+cmVtb3ZlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCk7
Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlVXBkYXRlQXRsYXMoaW50
IGF0bGFzSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCit7
CisgICAgbV9tZXNzYWdlQ2xpZW50LT5jcmVhdGVVcGRhdGVBdGxhcyhhdGxhc0lELCBoYW5kbGUp
OworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJlbW92ZVVwZGF0ZUF0bGFzKGlu
dCBhdGxhc0lEKQoreworICAgIGlmIChtX2lzUHVyZ2luZykKKyAgICAgICAgcmV0dXJuOworICAg
IG1fbWVzc2FnZUNsaWVudC0+cmVtb3ZlVXBkYXRlQXRsYXMoYXRsYXNJRCk7Cit9CisKK0Zsb2F0
UmVjdCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV92aXNpYmxlQ29udGVudHNSZWN0OworfQorCit2b2lkIENvbXBvc2l0
aW5nQ29vcmRpbmF0b3I6OnNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQgbGF5
ZXJJRCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMpCit7CisgICAg
bV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGFj
dGl2ZUFuaW1hdGlvbnMgPSBhbmltYXRpb25zLmdldEFjdGl2ZUFuaW1hdGlvbnMoKTsKKyAgICBt
X21lc3NhZ2VDbGllbnQtPnNldExheWVyQW5pbWF0aW9ucyhsYXllcklELCBhY3RpdmVBbmltYXRp
b25zKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzZXRWaXNpYmxlQ29udGVu
dHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9p
bnQmIHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAgYm9vbCBjb250ZW50c1JlY3REaWRDaGFuZ2Ug
PSByZWN0ICE9IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICBib29sIGNvbnRlbnRzU2NhbGVE
aWRDaGFuZ2UgPSBzY2FsZSAhPSBtX2NvbnRlbnRzU2NhbGU7CisKKyAgICAvLyBBIHplcm8gdHJh
amVjdG9yeVZlY3RvciBpbmRpY2F0ZXMgdGhhdCB0aWxlcyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9y
dCBhcmUgcmVxdWVzdGVkLgorICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSktPnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3Rv
cnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7CisKKyAgICBpZiAoY29udGVudHNSZWN0RGlkQ2hh
bmdlIHx8IGNvbnRlbnRzU2NhbGVEaWRDaGFuZ2UpIHsKKyAgICAgICAgbV92aXNpYmxlQ29udGVu
dHNSZWN0ID0gcmVjdDsKKyAgICAgICAgbV9jb250ZW50c1NjYWxlID0gc2NhbGU7CisKKyAgICAg
ICAgSGFzaFNldDxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0gbV9y
ZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOworICAgICAgICBmb3IgKEhhc2hTZXQ8Q29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgaWYgKGNvbnRlbnRzU2NhbGVEaWRDaGFu
Z2UpCisgICAgICAgICAgICAgICAgKCppdCktPnNldENvbnRlbnRzU2NhbGUoc2NhbGUpOworICAg
ICAgICAgICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSkKKyAgICAgICAgICAgICAgICAoKml0
KS0+YWRqdXN0VmlzaWJsZVJlY3QoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjb250
ZW50c1JlY3REaWRDaGFuZ2UpCisgICAgICAgIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBk
YXRlID0gdHJ1ZTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OnJlbmRlck5leHRGcmFtZSgpCit7CisgICAgbV93YWl0aW5nRm9y
UmVuZGVyZXIgPSBmYWxzZTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV91cGRhdGVBdGxhc2VzLnNpemUoKTsgKytpKQorICAgICAgICBt
X3VwZGF0ZUF0bGFzZXNbaV0tPmRpZFN3YXBCdWZmZXJzKCk7Cit9CisKK2Jvb2wgQ29tcG9zaXRp
bmdDb29yZGluYXRvcjo6bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gIW1faXNTdXNwZW5kZWQgJiYgIW1fd2FpdGluZ0ZvclJlbmRlcmVyOworfQorCit2
b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnB1cmdlQmFja2luZ1N0b3JlcygpCit7CisgICAg
VGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IHB1cmdpbmdUb2dnbGUobV9pc1B1cmdpbmcsIHRydWUpOwor
CisgICAgSGFzaFNldDxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0g
bV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQorICAgICAgICAoKml0KS0+cHVyZ2VCYWNraW5nU3RvcmVzKCk7CisK
KyAgICBtX2ltYWdlQmFja2luZ3MuY2xlYXIoKTsKKyAgICBtX3VwZGF0ZUF0bGFzZXMuY2xlYXIo
KTsKK30KKworUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IENvbXBvc2l0aW5nQ29vcmRpbmF0
b3I6OmJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBDb29yZGluYXRlZFN1
cmZhY2U6OkZsYWdzIGZsYWdzLCBpbnQmIGF0bGFzSUQsIEludFBvaW50JiBvZmZzZXQpCit7Cisg
ICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0OworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
VXBkYXRlQXRsYXMqIGF0bGFzID0gbV91cGRhdGVBdGxhc2VzW2ldLmdldCgpOworICAgICAgICBp
ZiAoYXRsYXMtPnN1cHBvcnRzQWxwaGEoKSA9PSAoZmxhZ3MgJiBDb29yZGluYXRlZFN1cmZhY2U6
OlN1cHBvcnRzQWxwaGEpKSB7CisgICAgICAgICAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIG51bGwg
aWYgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIGJ1ZmZlciBzcGFjZS4KKyAgICAgICAgICAgIGdyYXBo
aWNzQ29udGV4dCA9IGF0bGFzLT5iZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoYXRsYXNJ
RCwgc2l6ZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGlmIChncmFwaGljc0NvbnRleHQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4dC5yZWxlYXNlKCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgaW50IFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24gPSAx
MDI0OyAvLyBTaG91bGQgYmUgYSBwb3dlciBvZiB0d28uCisgICAgbV91cGRhdGVBdGxhc2VzLmFw
cGVuZChhZG9wdFB0cihuZXcgVXBkYXRlQXRsYXModGhpcywgU2NyYXRjaEJ1ZmZlckRpbWVuc2lv
biwgZmxhZ3MpKSk7CisgICAgc2NoZWR1bGVSZWxlYXNlSW5hY3RpdmVBdGxhc2VzKCk7CisgICAg
cmV0dXJuIG1fdXBkYXRlQXRsYXNlcy5sYXN0KCktPmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1
ZmZlcihhdGxhc0lELCBzaXplLCBvZmZzZXQpOworfQorCitjb25zdCBkb3VibGUgUmVsZWFzZUlu
YWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2YWwgPSAwLjU7CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29y
ZGluYXRvcjo6c2NoZWR1bGVSZWxlYXNlSW5hY3RpdmVBdGxhc2VzKCkKK3sKKyAgICBpZiAoIW1f
cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fcmVsZWFz
ZUluYWN0aXZlQXRsYXNlc1RpbWVyLnN0YXJ0UmVwZWF0aW5nKFJlbGVhc2VJbmFjdGl2ZUF0bGFz
ZXNUaW1lckludGVydmFsKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZWxl
YXNlSW5hY3RpdmVBdGxhc2VzVGltZXJGaXJlZChUaW1lcjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
PiopCit7CisgICAgLy8gV2UgYWx3YXlzIHdhbnQgdG8ga2VlcCBvbmUgYXRsYXMgZm9yIG5vbi1j
b21wb3NpdGVkIGNvbnRlbnQuCisgICAgT3duUHRyPFVwZGF0ZUF0bGFzPiBhdGxhc1RvS2VlcEFu
eXdheTsKKyAgICBib29sIGZvdW5kQWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVudCA9
IGZhbHNlOworICAgIGZvciAoaW50IGkgPSBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpIC0gMTsgIGkg
Pj0gMDsgLS1pKSB7CisgICAgICAgIFVwZGF0ZUF0bGFzKiBhdGxhcyA9IG1fdXBkYXRlQXRsYXNl
c1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKCFhdGxhcy0+aXNJblVzZSgpKQorICAgICAgICAgICAg
YXRsYXMtPmFkZFRpbWVJbmFjdGl2ZShSZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJJbnRlcnZh
bCk7CisgICAgICAgIGJvb2wgdXNhYmxlRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgPSAhYXRsYXMt
PnN1cHBvcnRzQWxwaGEoKTsKKyAgICAgICAgaWYgKGF0bGFzLT5pc0luYWN0aXZlKCkpIHsKKyAg
ICAgICAgICAgIGlmICghZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ICYm
ICFhdGxhc1RvS2VlcEFueXdheSAmJiB1c2FibGVGb3JOb25Db21wb3NpdGVkQ29udGVudCkKKyAg
ICAgICAgICAgICAgICBhdGxhc1RvS2VlcEFueXdheSA9IG1fdXBkYXRlQXRsYXNlc1tpXS5yZWxl
YXNlKCk7CisgICAgICAgICAgICBtX3VwZGF0ZUF0bGFzZXMucmVtb3ZlKGkpOworICAgICAgICB9
IGVsc2UgaWYgKHVzYWJsZUZvck5vbkNvbXBvc2l0ZWRDb250ZW50KQorICAgICAgICAgICAgZm91
bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ID0gdHJ1ZTsKKyAgICB9CisKKyAg
ICBpZiAoIWZvdW5kQWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVudCAmJiBhdGxhc1Rv
S2VlcEFueXdheSkKKyAgICAgICAgbV91cGRhdGVBdGxhc2VzLmFwcGVuZChhdGxhc1RvS2VlcEFu
eXdheS5yZWxlYXNlKCkpOworCisgICAgaWYgKG1fdXBkYXRlQXRsYXNlcy5zaXplKCkgPD0gMSkK
KyAgICAgICAgbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIuc3RvcCgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3Iu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kZTY3MDE0MTA3ODQzMWY5MDI2ZjI5MTlmODY2NGJlOTA3ZjZhM2Q4Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oCkBAIC0wLDAgKzEsMTkzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29tcG9zaXRpbmdDb29y
ZGluYXRvcl9oCisjZGVmaW5lIENvbXBvc2l0aW5nQ29vcmRpbmF0b3JfaAorCisjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAiQ29tcG9zaXRpbmdDb29yZGluYXRvckNs
aWVudC5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUg
IkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgiCisjaW5jbHVkZSAiVXBkYXRlQXRsYXMuaCIKKyNp
bmNsdWRlICJXZWJDb29yZGluYXRlZFN1cmZhY2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0
UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJGYWN0b3J5Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9J
bnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgorI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbHRl
ck9wZXJhdGlvbnMuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBQYWdl
OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgQ29tcG9zaXRpbmdDb29yZGluYXRv
ciA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50CisgICAgLCBwdWJsaWMgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50CisgICAgLCBwdWJsaWMgQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmc6OkNvb3JkaW5hdG9yCisgICAgLCBwdWJsaWMgVXBkYXRlQXRsYXNDbGllbnQKKyAg
ICAsIHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQ29tcG9zaXRpbmdDb29yZGluYXRvcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENvbXBvc2l0aW5nQ29vcmRpbmF0
b3I+IGNyZWF0ZShXZWJDb3JlOjpQYWdlKiwgQ29tcG9zaXRpbmdDb29yZGluYXRvckNsaWVudCos
IENvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50Kik7CisgICAgdmlydHVhbCB+Q29t
cG9zaXRpbmdDb29yZGluYXRvcigpOworCisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlTGF5ZXJG
bHVzaCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQo
Ym9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAg
dmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBuZXdTaXplKTsKKworICAgIHZvaWQgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOworICAg
IHZvaWQgZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICB2b2lkIHNldFBhZ2VPdmVybGF5
TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIHNldFBhZ2VP
dmVybGF5T3BhY2l0eShmbG9hdCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGF1c2VSZW5kZXJpbmco
KSB7IG1faXNTdXNwZW5kZWQgPSB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZVJlbmRl
cmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOyBzY2hlZHVsZUxheWVyRmx1c2goKTsgfQor
CisgICAgdmlydHVhbCB2b2lkIGZvcmNlUmVwYWludCgpOworCisgICAgdmlydHVhbCB2b2lkIHNl
dFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQgc2Nh
bGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKworICAgIC8vIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllckNsaWVudCA6OiBDb29yZGluYXRlZFRpbGVDbGllbnQKKyAgICB2aXJ0dWFsIHZv
aWQgY3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3Qg
U3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNv
bnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlE
KTsKKworICAgIC8vIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudAorICAgIHZpcnR1YWwg
V2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgbGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3Q7CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJ
Zk5lZWRlZChXZWJDb3JlOjpJbWFnZSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzeW5j
TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZv
Jik7CisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJ
RCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXll
cklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7CisjZW5kaWYKKyNpZiBVU0Uo
R1JBUEhJQ1NfU1VSRkFDRSkKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQ2FudmFzKENvb3JkaW5h
dGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1M
YXllciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95Q2FudmFzKENvb3JkaW5h
dGVkTGF5ZXJJRCkgT1ZFUlJJREU7CisjZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJB
bmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckFuaW1hdGlvbnMmKTsKKworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0ZpeGVkTGF5
ZXJzKCk7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4g
YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBDb29yZGluYXRlZFN1
cmZhY2U6OkZsYWdzLCBpbnQmIGF0bGFzSUQsIFdlYkNvcmU6OkludFBvaW50Jik7CisKKyAgICAv
LyBVcGRhdGVBdGxhc0NsaWVudAorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyhp
bnQgYXRsYXNJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQpOworCisgICAgdm9pZCBy
ZW5kZXJOZXh0RnJhbWUoKTsKKyAgICB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOworCisgICAg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciogcm9vdEdyYXBoaWNzTGF5ZXIoKSBjb25zdCB7IHJldHVy
biBtX3Jvb3RMYXllci5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIENvbXBvc2l0aW5nQ29vcmRp
bmF0b3IoV2ViQ29yZTo6UGFnZSosIENvbXBvc2l0aW5nQ29vcmRpbmF0b3JDbGllbnQqLCBDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudCopOworCisgICAgLy8gR3JhcGhpY3NMYXll
ckNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSk7CisgICAgdmlydHVhbCB2b2lkIG5v
dGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOworICAgIHZp
cnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQ
aGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOworCisgICAgLy8gQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5hdG9yCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUlt
YWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIGNv
bnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJikgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKKworICAgIHZvaWQgZmx1c2hQZW5kaW5nSW1h
Z2VCYWNraW5nQ2hhbmdlcygpOworCisgICAgLy8gR3JhcGhpY3NMYXllckZhY3RvcnkKKyAgICB2
aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gY3JlYXRlR3JhcGhpY3NM
YXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50KikgT1ZFUlJJREU7CisKKyAgICAvLyBD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yCisgICAgdm9pZCBpbml0aWFsaXplUm9vdENvbXBvc2l0aW5n
TGF5ZXJJZk5lZWRlZCgpOworICAgIGJvb2wgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7Cisg
ICAgdm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworICAgIHZvaWQgcGVyZm9ybVNjaGVk
dWxlZExheWVyRmx1c2goKTsKKyAgICB2b2lkIHN5bmNEaXNwbGF5U3RhdGUoKTsKKyAgICB2b2lk
IGxvY2tBbmltYXRpb25zKCk7CisgICAgdm9pZCB1bmxvY2tBbmltYXRpb25zKCk7CisKKyAgICB2
b2lkIGxheWVyRmx1c2hUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPENvbXBvc2l0aW5nQ29vcmRp
bmF0b3I+Kik7CisKKyAgICB2b2lkIHNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpOwor
CisgICAgdm9pZCByZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJGaXJlZChXZWJDb3JlOjpUaW1l
cjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiopOworCisgICAgV2ViQ29yZTo6UGFnZSogbV9wYWdl
OworICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3JDbGllbnQqIG1fY2xpZW50OworICAgIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50KiBtX21lc3NhZ2VDbGllbnQ7CisKKyAgICBP
d25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CisKKyAgICAvLyBUaGUg
bGF5ZXIgd2hpY2ggY29udGFpbnMgYWxsIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQuCisgICAgT3du
UHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcjsK
KworICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUgbnVsbCBpZiB0aGVyZSdz
IG5vIHBhZ2Ugb3ZlcmxheS4KKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9w
YWdlT3ZlcmxheUxheWVyOworCisgICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIqPiBtX3JlZ2lzdGVyZWRMYXllcnM7CisgICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5
ZXJJRD4gbV9kZXRhY2hlZExheWVyczsKKyAgICB0eXBlZGVmIEhhc2hNYXA8Q29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRCwgUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiA+IEltYWdlQmFj
a2luZ01hcDsKKyAgICBJbWFnZUJhY2tpbmdNYXAgbV9pbWFnZUJhY2tpbmdzOworICAgIFZlY3Rv
cjxPd25QdHI8VXBkYXRlQXRsYXM+ID4gbV91cGRhdGVBdGxhc2VzOworCisgICAgYm9vbCBtX2lz
VmFsaWQ7CisgICAgLy8gV2UgZG9uJ3Qgc2VuZCB0aGUgbWVzc2FnZXMgcmVsYXRlZCB0byByZWxl
YXNpbmcgcmVzb3VyY2VzIHRvIHJlbmRlcmVyIGR1cmluZyBwdXJnaW5nLCBiZWNhdXNlIHJlbmRl
cmVyIGFscmVhZHkgaGFkIHJlbW92ZWQgYWxsIHJlc291cmNlcy4KKyAgICBib29sIG1faXNQdXJn
aW5nOworCisgICAgYm9vbCBtX3dhaXRpbmdGb3JSZW5kZXJlcjsKKyAgICBib29sIG1faXNTdXNw
ZW5kZWQ7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAg
ICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7CisgICAgYm9vbCBtX3Nob3VsZFNlbmRTY3JvbGxQb3Np
dGlvblVwZGF0ZTsKKworICAgIGJvb2wgbV9zaG91bGRTeW5jRnJhbWU7CisgICAgYm9vbCBtX2Rp
ZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcjsKKyAgICBXZWJDb3JlOjpUaW1lcjxDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yPiBtX2xheWVyRmx1c2hUaW1lcjsKKyAgICBXZWJDb3JlOjpUaW1l
cjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lcjsK
KyAgICBib29sIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkOworICAgIGJvb2wgbV9hbmlt
YXRpb25zTG9ja2VkOworfTsKKworfQorCisjZW5kaWYKKworI2VuZGlmIC8vIENvbXBvc2l0aW5n
Q29vcmRpbmF0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvckNsaWVudC5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29t
cG9zaXRpbmdDb29yZGluYXRvckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFkYmMyZDE5NTEyZTJmMjA2
YzQ1YThhMDJiMmMxMjI3ODUyMmJhMzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3Jk
aW5hdG9yQ2xpZW50LmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yQ2xpZW50X2gKKyNkZWZpbmUgQ29tcG9zaXRpbmdD
b29yZGluYXRvckNsaWVudF9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNp
bmNsdWRlICJDb29yZGluYXRlZExheWVySW5mby5oIgorI2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJ
bmZvLmgiCisjaW5jbHVkZSAiV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9GbG9hdFBvaW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQW5pbWF0
aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9J
bnRTaXplLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworI2lmIFVTRShHUkFQSElD
U19TVVJGQUNFKQorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlVG9rZW4uaD4KKyNl
bmRpZgorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorI2luY2x1ZGUgPFdlYkNvcmUvRmlsdGVy
T3BlcmF0aW9uLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQs
IGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRD
b21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8
Q29vcmRpbmF0ZWRMYXllcklEPiYpID0gMDsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAg
dmlydHVhbCB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJ
RCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpID0gMDsKKyNlbmRpZgorICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCkgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVy
SUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFN1cmZh
Y2VVcGRhdGVJbmZvJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIo
Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKSA9IDA7
CisKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQsIGNvbnN0
IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGNy
ZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBj
b25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVuZGVyRnJhbWUoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBj
b3ZlcmVkUmVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VTY3JvbGxQb3NpdGlv
bihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb3NpdGlvbikgPSAwOworCisjaWYgVVNFKEdS
QVBISUNTX1NVUkZBQ0UpCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUNhbnZhcyhDb29yZGluYXRl
ZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c1N1cmZhY2VUb2tlbiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NhbnZhcyhDb29yZGlu
YXRlZExheWVySUQsIHVpbnQzMl90IGZyb250QnVmZmVyKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEKSA9IDA7CisjZW5kaWYKKworICAgIHZp
cnR1YWwgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0QW5pbWF0aW9uc0xvY2tlZChib29sKSA9IDA7Cit9OworCitjbGFzcyBDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHZpZXdTaXplKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGRpZFBlcmZv
cm1TY2hlZHVsZWRMYXllckZsdXNoKGJvb2wgZGlkU3luYykgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBsYXlvdXRJZk5lZWRlZCgpID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpc09wYXF1ZUNvbnRl
bnRzKCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRPdmVybGF5Q29udGVudHMoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpID0gMDsKKworICAgIHZpcnR1
YWwgYm9vbCBoYXNQYWdlT3ZlcmxheSgpIGNvbnN0ID0gMDsKK307CisKK30KKyNlbmRpZgorCisj
ZW5kaWYgLy8gQ29tcG9zaXRpbmdDb29yZGluYXRvckNsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAKaW5kZXggMTE3Y2RiYWE2
NTA1NWE5YzU4N2ViOTAxOWQ2ZmNmNTRjMGQ2ZjUxNy4uZmZlZDllNmI3OGE4OTdhM2JlNmFmYmU3
Y2RlMjQ4NzczOWY3OTZjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yLmNwcApAQCAtMzAsMzIgKzMwLDEwIEBACiAjaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQogI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yLmgiCiAKLSNp
bmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYUltcGwuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJMYXllclRyZWVDb29yZGlu
YXRvclByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJNZXNzYWdlSUQuaCIKLSNpbmNsdWRlICJT
dXJmYWNlVXBkYXRlSW5mby5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgog
I2luY2x1ZGUgIldlYlBhZ2UuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgot
I2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9QYWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvUmVuZGVyTGF5ZXJCYWNraW5nLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllci5oPgotI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KLQotI2lmIEVO
QUJMRShDU1NfU0hBREVSUykKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFt
LmgiCi0jaW5jbHVkZSAiVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgiCi0jZW5kaWYK
IAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTY4LDg5ICs0NiwyOCBAQCBQYXNzUmVm
UHRyPExheWVyVHJlZUNvb3JkaW5hdG9yPiBMYXllclRyZWVDb29yZGluYXRvcjo6Y3JlYXRlKFdl
YlBhZ2UqIHdlYlBhZ2UpCiAKIExheWVyVHJlZUNvb3JkaW5hdG9yOjp+TGF5ZXJUcmVlQ29vcmRp
bmF0b3IoKQogewotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBkaXNjb25uZWN0Q3VzdG9t
RmlsdGVyUHJvZ3JhbXMoKTsKLSNlbmRpZgotCi0gICAgLy8gUHJldmVudCBzZXRDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXJDbGllbnQoMCkgLT4gZGV0YWNoTGF5ZXIoKSBmcm9tIG1vZGlmeWluZyB0
aGUgc2V0IHdoaWxlIHdlIGl0ZXJhdGUgaXQuCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIqPiByZWdpc3RlcmVkTGF5ZXJzOwotICAgIHJlZ2lzdGVyZWRMYXll
cnMuc3dhcChtX3JlZ2lzdGVyZWRMYXllcnMpOwotCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0gcmVnaXN0ZXJlZExheWVycy5l
bmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Kj46Oml0ZXJhdG9yIGl0ID0gcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgICgqaXQpLT5zZXRDb29yZGluYXRvcigwKTsKIH0KIAogTGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OkxheWVyVHJlZUNvb3JkaW5hdG9yKFdlYlBhZ2UqIHdlYlBhZ2UpCiAgICAgOiBM
YXllclRyZWVIb3N0KHdlYlBhZ2UpCiAgICAgLCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJG
bHVzaChmYWxzZSkKLSAgICAsIG1faXNWYWxpZCh0cnVlKQotICAgICwgbV9pc1B1cmdpbmcoZmFs
c2UpCi0gICAgLCBtX3dhaXRpbmdGb3JVSVByb2Nlc3ModHJ1ZSkKLSAgICAsIG1faXNTdXNwZW5k
ZWQoZmFsc2UpCi0gICAgLCBtX2NvbnRlbnRzU2NhbGUoMSkKLSAgICAsIG1fc2hvdWxkU2VuZFNj
cm9sbFBvc2l0aW9uVXBkYXRlKHRydWUpCi0gICAgLCBtX3Nob3VsZFN5bmNGcmFtZShmYWxzZSkK
LSAgICAsIG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyKGZhbHNlKQotICAgICwg
bV9sYXllckZsdXNoVGltZXIodGhpcywgJkxheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllckZsdXNo
VGltZXJGaXJlZCkKLSAgICAsIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyKHRoaXMsICZM
YXllclRyZWVDb29yZGluYXRvcjo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQpCi0g
ICAgLCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCh0cnVlKQogICAgICwgbV9mb3JjZVJl
cGFpbnRBc3luY0NhbGxiYWNrSUQoMCkKLSAgICAsIG1fYW5pbWF0aW9uc0xvY2tlZChmYWxzZSkK
LXsKLSAgICAvLyBDcmVhdGUgYSByb290IGxheWVyLgotICAgIG1fcm9vdExheWVyID0gR3JhcGhp
Y3NMYXllcjo6Y3JlYXRlKHRoaXMsIHRoaXMpOwotICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ciogY29vcmRpbmF0ZWRSb290TGF5ZXIgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jv
b3RMYXllci5nZXQoKSk7Ci0gICAgY29vcmRpbmF0ZWRSb290TGF5ZXItPnNldFJvb3RMYXllcih0
cnVlKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9yb290TGF5ZXItPnNldE5hbWUoIkxheWVyVHJl
ZUNvb3JkaW5hdG9yIHJvb3QgbGF5ZXIiKTsKLSNlbmRpZgotICAgIG1fcm9vdExheWVyLT5zZXRE
cmF3c0NvbnRlbnQoZmFsc2UpOwotICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+
c2l6ZSgpKTsKLSAgICBtX2xheWVyVHJlZUNvbnRleHQuY29vcmRpbmF0ZWRMYXllcklEID0gdG9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoY29vcmRpbmF0ZWRSb290TGF5ZXIpLT5pZCgpOwotCi0g
ICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRo
aXMsIHRoaXMpOwotI2lmbmRlZiBOREVCVUcKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5
ZXItPnNldE5hbWUoIkxheWVyVHJlZUNvb3JkaW5hdG9yIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQi
KTsKLSNlbmRpZgotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0RHJhd3NDb250
ZW50KHRydWUpOwotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShtX3dl
YlBhZ2UtPnNpemUoKSk7Ci0KLSAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobV9ub25Db21wb3Np
dGVkQ29udGVudExheWVyLmdldCgpKTsKLQotICAgIGlmIChtX3dlYlBhZ2UtPmhhc1BhZ2VPdmVy
bGF5KCkpCi0gICAgICAgIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKK3sKKyAgICBtX2NvbXBv
c2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50ID0gV2ViQ29tcG9zaXRpbmdDb29yZGluYXRv
ck1lc3NhZ2VDbGllbnQ6OmNyZWF0ZShtX3dlYlBhZ2UpOworICAgIG1fY29tcG9zaXRpbmdDb29y
ZGluYXRvciA9IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZShtX3dlYlBhZ2UtPmNvcmVQ
YWdlKCksIHRoaXMsIG1fY29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQuZ2V0KCkp
OwogCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyKiByb290TGF5ZXIgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX2NvbXBvc2l0aW5n
Q29vcmRpbmF0b3ItPnJvb3RHcmFwaGljc0xheWVyKCkpOworICAgIG1fbGF5ZXJUcmVlQ29udGV4
dC5jb29yZGluYXRlZExheWVySUQgPSByb290TGF5ZXItPmlkKCk7CiB9CiAKIHZvaWQgTGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OnNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sIGxheWVy
Rmx1c2hpbmdFbmFibGVkKQogewotICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxl
ZCA9PSBsYXllckZsdXNoaW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9sYXll
ckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPSBsYXllckZsdXNoaW5nRW5hYmxlZDsKLQotICAgIGlm
IChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkgewotICAgICAgICBzY2hlZHVsZUxheWVy
Rmx1c2goKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhbmNlbFBlbmRpbmdMYXll
ckZsdXNoKCk7CisgICAgbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yLT5zZXRMYXllckZsdXNoU2No
ZWR1bGluZ0VuYWJsZWQobGF5ZXJGbHVzaGluZ0VuYWJsZWQpOwogfQogCiB2b2lkIExheWVyVHJl
ZUNvb3JkaW5hdG9yOjpzY2hlZHVsZUxheWVyRmx1c2goKQogewotICAgIGlmICghbV9sYXllckZs
dXNoU2NoZWR1bGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9sYXll
ckZsdXNoVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9sYXllckZsdXNoVGltZXIuc3RhcnRP
bmVTaG90KDApOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpjYW5jZWxQZW5kaW5n
TGF5ZXJGbHVzaCgpCi17Ci0gICAgbV9sYXllckZsdXNoVGltZXIuc3RvcCgpOworICAgIG1fY29t
cG9zaXRpbmdDb29yZGluYXRvci0+c2NoZWR1bGVMYXllckZsdXNoKCk7CiB9CiAKIHZvaWQgTGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVy
Rmx1c2goYm9vbCBub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gpCkBAIC0xNjAsMzAgKzc3
LDE3IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFNob3VsZE5vdGlmeUFmdGVyTmV4
dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCBub3RpCiAKIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBo
aWNzTGF5ZXIpCiB7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5yZW1vdmVBbGxD
aGlsZHJlbigpOwotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0Q29udGVudHNP
cGFxdWUobV93ZWJQYWdlLT5kcmF3c0JhY2tncm91bmQoKSAmJiAhbV93ZWJQYWdlLT5kcmF3c1Ry
YW5zcGFyZW50QmFja2dyb3VuZCgpKTsKLQotICAgIC8vIEFkZCB0aGUgYWNjZWxlcmF0ZWQgbGF5
ZXIgdHJlZSBoaWVyYXJjaHkuCi0gICAgaWYgKGdyYXBoaWNzTGF5ZXIpCi0gICAgICAgIG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRMYXllci0+YWRkQ2hpbGQoZ3JhcGhpY3NMYXllcik7CisgICAgbV9j
b21wb3NpdGluZ0Nvb3JkaW5hdG9yLT5zZXRSb290Q29tcG9zaXRpbmdMYXllcihncmFwaGljc0xh
eWVyKTsKIH0KIAogdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6aW52YWxpZGF0ZSgpCiB7Ci0g
ICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKLQotICAgIEFTU0VSVChtX2lzVmFsaWQpOwot
ICAgIG1fcm9vdExheWVyID0gbnVsbHB0cjsKLSAgICBtX2lzVmFsaWQgPSBmYWxzZTsKKyAgICBt
X2NvbXBvc2l0aW5nQ29vcmRpbmF0b3ItPmludmFsaWRhdGUoKTsKIH0KIAogdm9pZCBMYXllclRy
ZWVDb29yZGluYXRvcjo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKIHsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5
ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICBpZiAobV9wYWdlT3ZlcmxheUxh
eWVyKQotICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChy
ZWN0KTsKLQotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIG1fY29tcG9zaXRpbmdDb29y
ZGluYXRvci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwogfQogCiB2b2lkIExheWVyVHJl
ZUNvb3JkaW5hdG9yOjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgLyogc2Nyb2xsT2Zm
c2V0ICovKQpAQCAtMTkzLDE0ICs5Nyw3IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNj
cm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzCiAKIHZv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmZvcmNlUmVwYWludCgpCiB7Ci0gICAgLy8gVGhpcyBp
cyBuZWNlc3NhcnkgZm9yIHJ1bm5pbmcgbGF5b3V0IHRlc3RzLiBTaW5jZSBpbiB0aGlzIGNhc2Ug
d2UgYXJlIG5vdCB3YWl0aW5nIGZvciBhIFVJUHJvY2VzcyB0byByZXBseSBuaWNlbHkuCi0gICAg
Ly8gSW5zdGVhZCB3ZSBhcmUganVzdCB0cmlnZ2VyaW5nIGZvcmNlUmVwYWludC4gQnV0IHdlIHN0
aWxsIHdhbnQgdG8gaGF2ZSB0aGUgc2NyaXB0ZWQgYW5pbWF0aW9uIGNhbGxiYWNrcyBiZWluZyBl
eGVjdXRlZC4KLSAgICBzeW5jRGlzcGxheVN0YXRlKCk7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIHNj
aGVkdWxlIGFub3RoZXIgZmx1c2gsIG90aGVyd2lzZSB0aGUgZm9yY2VkIHBhaW50IG1pZ2h0IGNh
bmNlbCBhIGxhdGVyIGV4cGVjdGVkIGZsdXNoLgotICAgIC8vIFRoaXMgaXMgYWxpZ25lZCB3aXRo
IExheWVyVHJlZUhvc3RDQS4KLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLSAgICBmbHVzaFBl
bmRpbmdMYXllckNoYW5nZXMoKTsKKyAgICBtX2NvbXBvc2l0aW5nQ29vcmRpbmF0b3ItPmZvcmNl
UmVwYWludCgpOwogfQogCiBib29sIExheWVyVHJlZUNvb3JkaW5hdG9yOjpmb3JjZVJlcGFpbnRB
c3luYyh1aW50NjRfdCBjYWxsYmFja0lEKQpAQCAtMjE0LDQzMSArMTExLDgyIEBAIGJvb2wgTGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OmZvcmNlUmVwYWludEFzeW5jKHVpbnQ2NF90IGNhbGxiYWNrSUQp
CiAKIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgbmV3U2l6ZSkKIHsKLSAgICBpZiAobV9yb290TGF5ZXItPnNpemUoKSA9PSBu
ZXdTaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShuZXdT
aXplKTsKLQotICAgIC8vIElmIHRoZSBuZXdTaXplIGV4cG9zZXMgbmV3IGFyZWFzIG9mIHRoZSBu
b24tY29tcG9zaXRlZCBjb250ZW50IGEgc2V0TmVlZHNEaXNwbGF5IGlzIG5lZWRlZAotICAgIC8v
IGZvciB0aG9zZSBuZXdseSBleHBvc2VkIGFyZWFzLgotICAgIEZsb2F0U2l6ZSBvbGRTaXplID0g
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCk7Ci0gICAgbV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyLT5zZXRTaXplKG5ld1NpemUpOwotCi0gICAgaWYgKG5ld1NpemUud2lkdGgo
KSA+IG9sZFNpemUud2lkdGgoKSkgewotICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGQ6Om1pbihz
dGF0aWNfY2FzdDxmbG9hdD4obmV3U2l6ZS5oZWlnaHQoKSksIG9sZFNpemUuaGVpZ2h0KCkpOwot
ICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVj
dChGbG9hdFJlY3Qob2xkU2l6ZS53aWR0aCgpLCAwLCBuZXdTaXplLndpZHRoKCkgLSBvbGRTaXpl
LndpZHRoKCksIGhlaWdodCkpOwotICAgIH0KLQotICAgIGlmIChuZXdTaXplLmhlaWdodCgpID4g
b2xkU2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5z
ZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KDAsIG9sZFNpemUuaGVpZ2h0KCksIG5ld1Np
emUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSAtIG9sZFNpemUuaGVpZ2h0KCkpKTsKLQotICAg
IGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCi0gICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0
U2l6ZShuZXdTaXplKTsKLQotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIG1fY29tcG9z
aXRpbmdDb29yZGluYXRvci0+c2l6ZURpZENoYW5nZShuZXdTaXplKTsKIH0KIAogdm9pZCBMYXll
clRyZWVDb29yZGluYXRvcjo6ZGlkSW5zdGFsbFBhZ2VPdmVybGF5KCkKIHsKLSAgICBjcmVhdGVQ
YWdlT3ZlcmxheUxheWVyKCk7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgbV9jb21w
b3NpdGluZ0Nvb3JkaW5hdG9yLT5jcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CiB9CiAKIHZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCkKIHsKLSAgICBk
ZXN0cm95UGFnZU92ZXJsYXlMYXllcigpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAg
IG1fY29tcG9zaXRpbmdDb29yZGluYXRvci0+ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsKIH0K
IAogdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXko
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKIHsKLSAgICBBU1NFUlQobV9wYWdlT3Zlcmxh
eUxheWVyKTsKLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChy
ZWN0KTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICBtX2NvbXBvc2l0aW5nQ29vcmRp
bmF0b3ItPnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KHJlY3QpOwogfQogCiB2b2lkIExheWVy
VHJlZUNvb3JkaW5hdG9yOjpzZXRQYWdlT3ZlcmxheU9wYWNpdHkoZmxvYXQgdmFsdWUpCiB7Ci0g
ICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5z
ZXRPcGFjaXR5KHZhbHVlKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotYm9vbCBM
YXllclRyZWVDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKLXsKLSAgICBp
ZiAobV93YWl0aW5nRm9yVUlQcm9jZXNzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
bml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCgpOwotCi0gICAgbV9yb290TGF5
ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLSAgICBtX25vbkNv
bXBvc2l0ZWRDb250ZW50TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9u
bHkoKTsKLSAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQotICAgICAgICBtX3BhZ2VPdmVybGF5
TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLQotICAgIGJv
b2wgZGlkU3luYyA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+
Zmx1c2hDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7Ci0KLSAgICBmbHVzaFBl
bmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fZGV0YWNoZWRMYXllcnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6RGVsZXRlQ29tcG9zaXRpbmdMYXll
cihtX2RldGFjaGVkTGF5ZXJzW2ldKSk7Ci0gICAgbV9kZXRhY2hlZExheWVycy5jbGVhcigpOwot
Ci0gICAgaWYgKG1fc2hvdWxkU3luY0ZyYW1lKSB7Ci0gICAgICAgIGRpZFN5bmMgPSB0cnVlOwot
Ci0gICAgICAgIEludFNpemUgY29udGVudHNTaXplID0gcm91bmRlZEludFNpemUobV9ub25Db21w
b3NpdGVkQ29udGVudExheWVyLT5zaXplKCkpOwotICAgICAgICBJbnRSZWN0IGNvdmVyZWRSZWN0
ID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9ub25Db21wb3NpdGVkQ29udGVudExheWVy
LmdldCgpKS0+Y292ZXJSZWN0KCk7Ci0gICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6RGlkUmVuZGVyRnJhbWUoY29udGVudHNTaXplLCBj
b3ZlcmVkUmVjdCkpOwotICAgICAgICBtX3dhaXRpbmdGb3JVSVByb2Nlc3MgPSB0cnVlOwotICAg
ICAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IGZhbHNlOwotICAgIH0gZWxzZQotICAgICAgICB1bmxv
Y2tBbmltYXRpb25zKCk7Ci0KLSAgICBpZiAobV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQp
IHsKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRD
YWxsYmFjayhtX2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJRCkpOwotICAgICAgICBtX2ZvcmNl
UmVwYWludEFzeW5jQ2FsbGJhY2tJRCA9IDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRpZFN5bmM7
Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmluaXRpYWxpemVSb290Q29tcG9zaXRp
bmdMYXllcklmTmVlZGVkKCkKLXsKLSAgICBpZiAobV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0
aW5nTGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodG9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5pZCgpKSk7Ci0gICAg
bV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXIgPSB0cnVlOwotICAgIG1fc2hvdWxk
U3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX2NvbXBvc2l0aW5nQ29vcmRpbmF0b3ItPnNldFBhZ2VP
dmVybGF5T3BhY2l0eSh2YWx1ZSk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5
bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29vcmRpbmF0ZWRMYXll
ckluZm8mIGluZm8pCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpwYXVzZVJlbmRlcmluZygp
CiB7Ci0gICAgaWYgKG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlKSB7Ci0gICAgICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6RGlk
Q2hhbmdlU2Nyb2xsUG9zaXRpb24obV92aXNpYmxlQ29udGVudHNSZWN0LmxvY2F0aW9uKCkpKTsK
LSAgICAgICAgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUgPSBmYWxzZTsKLSAgICB9
Ci0KLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRDb21wb3NpdGluZ0xheWVyU3Rh
dGUoaWQsIGluZm8pKTsKKyAgICBtX2NvbXBvc2l0aW5nQ29vcmRpbmF0b3ItPnBhdXNlUmVuZGVy
aW5nKCk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNMYXllckNoaWxkcmVu
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4m
IGNoaWxkcmVuKQordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVzdW1lUmVuZGVyaW5nKCkK
IHsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRDb21wb3NpdGluZ0xheWVyQ2hp
bGRyZW4oaWQsIGNoaWxkcmVuKSk7CisgICAgbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yLT5yZXN1
bWVSZW5kZXJpbmcoKTsKIH0KIAotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotdm9pZCBMYXll
clRyZWVDb29yZGluYXRvcjo6Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgUGxh
dGZvcm1MYXllciogY2FudmFzUGxhdGZvcm1MYXllcikKK2NvbnN0IEludFNpemUmIExheWVyVHJl
ZUNvb3JkaW5hdG9yOjp2aWV3U2l6ZSgpIGNvbnN0CiB7Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUg
PSB0cnVlOwotICAgIEdyYXBoaWNzU3VyZmFjZVRva2VuIHRva2VuID0gY2FudmFzUGxhdGZvcm1M
YXllci0+Z3JhcGhpY3NTdXJmYWNlVG9rZW4oKTsKLSAgICBJbnRTaXplIGNhbnZhc1NpemUgPSBj
YW52YXNQbGF0Zm9ybUxheWVyLT5wbGF0Zm9ybUxheWVyU2l6ZSgpOwotICAgIG1fd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Q3JlYXRlQ2FudmFzKGlk
LCBjYW52YXNTaXplLCB0b2tlbikpOworICAgIHJldHVybiBtX3dlYlBhZ2UtPnNpemUoKTsKIH0K
IAotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVy
SUQgaWQsIFBsYXRmb3JtTGF5ZXIqIGNhbnZhc1BsYXRmb3JtTGF5ZXIpCit2b2lkIExheWVyVHJl
ZUNvb3JkaW5hdG9yOjpsYXlvdXRJZk5lZWRlZCgpCiB7Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUg
PSB0cnVlOwotICAgIHVpbnQzMl90IGZyb250QnVmZmVyID0gY2FudmFzUGxhdGZvcm1MYXllci0+
Y29weVRvR3JhcGhpY3NTdXJmYWNlKCk7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpM
YXllclRyZWVDb29yZGluYXRvclByb3h5OjpTeW5jQ2FudmFzKGlkLCBmcm9udEJ1ZmZlcikpOwor
ICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKIH0KIAotdm9pZCBMYXllclRyZWVDb29y
ZGluYXRvcjo6ZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQpCitib29sIExheWVy
VHJlZUNvb3JkaW5hdG9yOjppc09wYXF1ZUNvbnRlbnRzKCkKIHsKLSAgICBpZiAobV9pc1B1cmdp
bmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkRl
c3Ryb3lDYW52YXMoaWQpKTsKKyAgICByZXR1cm4gbV93ZWJQYWdlLT5kcmF3c0JhY2tncm91bmQo
KSAmJiAhbV93ZWJQYWdlLT5kcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZCgpOwogfQotI2VuZGlm
CiAKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpz
eW5jTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyYgZmlsdGVycykKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRpZFBlcmZvcm1TY2hl
ZHVsZWRMYXllckZsdXNoKGJvb2wgZGlkU3luYykKIHsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9
IHRydWU7Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJv
Z3JhbVByb3hpZXMoZmlsdGVycyk7Ci0jZW5kaWYKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJz
KGlkLCBmaWx0ZXJzKSk7Ci19Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLXZv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMo
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKLXsKLSAgICAvLyBXZSBuZWVkIHRvIGNy
ZWF0ZSB0aGUgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5IG9iamVjdHMgYmVmb3JlIHdlIGdl
dCB0byBzZXJpYWxpemUgdGhlCi0gICAgLy8gY3VzdG9tIGZpbHRlcnMgdG8gdGhlIG90aGVyIHBy
b2Nlc3MuIFRoYXQncyBiZWNhdXNlIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSBuZWVkcwot
ICAgIC8vIHRvIGxpbmsgYmFjayB0byB0aGUgY29vcmRpbmF0b3IsIHNvIHRoYXQgd2UgY2FuIHNl
bmQgYSBtZXNzYWdlIHRvIHRoZSBVSSBwcm9jZXNzIHdoZW4gCi0gICAgLy8gdGhlIHByb2dyYW0g
aXMgbm90IG5lZWRlZCBhbnltb3JlLgotICAgIC8vIE5vdGUgdGhhdCB0aGUgc2VyaWFsaXphdGlv
biB3aWxsIG9ubHkgaGFwcGVuIGF0IGEgbGF0ZXIgdGltZSBpbiBBcmd1bWVudENvZGVyPFdlYkNv
cmU6OkZpbHRlck9wZXJhdGlvbnM+OjplbmNvZGUuCi0gICAgLy8gQXQgdGhhdCBwb2ludCB0aGUg
cHJvZ3JhbSB3aWxsIG9ubHkgYmUgc2VyaWFsaXplZCBvbmNlLiBBbGwgdGhlIG90aGVyIHRpbWVz
IGl0IHdpbGwgb25seSB1c2UgdGhlIElEIG9mIHRoZSBwcm9ncmFtLgotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZmlsdGVycy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBGaWx0ZXJP
cGVyYXRpb24qIG9wZXJhdGlvbiA9IGZpbHRlcnMuYXQoaSk7Ci0gICAgICAgIGlmIChvcGVyYXRp
b24tPmdldE9wZXJhdGlvblR5cGUoKSAhPSBGaWx0ZXJPcGVyYXRpb246OlZBTElEQVRFRF9DVVNU
T00pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY29uc3QgVmFsaWRhdGVkQ3VzdG9t
RmlsdGVyT3BlcmF0aW9uKiBjdXN0b21PcGVyYXRpb24gPSBzdGF0aWNfY2FzdDxjb25zdCBWYWxp
ZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24qPihvcGVyYXRpb24pOwotICAgICAgICBBU1NFUlQo
Y3VzdG9tT3BlcmF0aW9uLT52YWxpZGF0ZWRQcm9ncmFtKCktPmlzSW5pdGlhbGl6ZWQoKSk7Ci0g
ICAgICAgIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUNvbXBpbGVkUHJvZ3JhbSogcHJvZ3JhbSA9IGN1
c3RvbU9wZXJhdGlvbi0+dmFsaWRhdGVkUHJvZ3JhbSgpLT5wbGF0Zm9ybUNvbXBpbGVkUHJvZ3Jh
bSgpOwotICAgICAgICAKLSAgICAgICAgUmVmUHRyPFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94
eT4gY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5OwotICAgICAgICBpZiAocHJvZ3JhbS0+Y2xpZW50
KCkpCi0gICAgICAgICAgICBjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkgPSBzdGF0aWNfY2FzdDxX
ZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkqPihwcm9ncmFtLT5jbGllbnQoKSk7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5ID0gV2ViQ3VzdG9t
RmlsdGVyUHJvZ3JhbVByb3h5OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIHByb2dyYW0tPnNldENs
aWVudChjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBpZiAoIWN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+Y2xpZW50KCkpIHsKLSAgICAgICAg
ICAgIGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+c2V0Q2xpZW50KHRoaXMpOwotICAgICAgICAg
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpD
cmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+aWQoKSwg
Y3VzdG9tT3BlcmF0aW9uLT52YWxpZGF0ZWRQcm9ncmFtKCktPnZhbGlkYXRlZFByb2dyYW1JbmZv
KCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBjbGllbnQgd2Fz
IG5vdCBkaXNjb25uZWN0ZWQgdGhlbiB0aGlzIGNvb3JkaW5hdG9yIG11c3QgYmUgdGhlIGNsaWVu
dCBmb3IgaXQuCi0gICAgICAgICAgICBBU1NFUlQoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5j
bGllbnQoKSA9PSB0aGlzKTsKLSAgICAgICAgfQorICAgIGlmIChtX2ZvcmNlUmVwYWludEFzeW5j
Q2FsbGJhY2tJRCkgeworICAgICAgICBtX2NvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xp
ZW50LT5pbnZva2VGb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrKG1fZm9yY2VSZXBhaW50QXN5bmND
YWxsYmFja0lEKTsKKyAgICAgICAgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQgPSAwOwog
ICAgIH0KLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVtb3ZlQ3VzdG9tRmlsdGVy
UHJvZ3JhbVByb3h5KFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSogY3VzdG9tRmlsdGVyUHJv
Z3JhbVByb3h5KQotewotICAgIC8vIEF0IHRoaXMgdGltZSB0aGUgc2hhZGVyIGlzIG5vdCBuZWVk
ZWQgYW55bW9yZSwgc28gd2UgcmVtb3ZlIGl0IGZyb20gb3VyIHNldCBhbmQgCi0gICAgLy8gc2Vu
ZCBhIG1lc3NhZ2UgdG8gdGhlIG90aGVyIHByb2Nlc3MgdG8gZGVsZXRlIGl0LgotICAgIG1fY3Vz
dG9tRmlsdGVyUHJvZ3JhbXMucmVtb3ZlKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSk7Ci0gICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpSZW1v
dmVDdXN0b21GaWx0ZXJQcm9ncmFtKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+aWQoKSkpOwot
fQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpkaXNjb25uZWN0Q3VzdG9tRmlsdGVyUHJv
Z3JhbXMoKQotewotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IFdlYkNvcmUgd2lsbCBub3QgY2FsbCBp
bnRvIHRoaXMgY29vcmRpbmF0b3IgYW55bW9yZS4KLSAgICBIYXNoU2V0PFdlYkN1c3RvbUZpbHRl
clByb2dyYW1Qcm94eSo+OjppdGVyYXRvciBpdGVyID0gbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5i
ZWdpbigpOwotICAgIGZvciAoOyBpdGVyICE9IG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMuZW5kKCk7
ICsraXRlcikKLSAgICAgICAgKCppdGVyKS0+c2V0Q2xpZW50KDApOwotfQotI2VuZGlmCi0KLXZv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRldGFjaExheWVyKENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllciogbGF5ZXIpCi17Ci0gICAgbV9yZWdpc3RlcmVkTGF5ZXJzLnJlbW92ZShsYXllcik7Ci0g
ICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fZGV0YWNoZWRMYXllcnMuYXBwZW5k
KGxheWVyLT5pZCgpKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotc3RhdGljIHZv
aWQgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yU2VsZihSZW5kZXJMYXllciogcmVuZGVyTGF5
ZXIpCi17Ci0gICAgLy8gVGhlc2UgY29uZGl0aW9ucyBtdXN0IG1hdGNoIHRoZSBjb25kaXRpb25z
IGluIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9u
LgotICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IHJlbmRlckxheWVyLT5iYWNraW5n
KCk7Ci0gICAgaWYgKCFiYWNraW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5kZXJTdHls
ZSogc3R5bGUgPSByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKLSAgICBpZiAoIXN0
eWxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlckxheWVyLT5yZW5kZXJlcigp
LT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5
bGUoKS0+cG9zaXRpb24oKSAhPSBGaXhlZFBvc2l0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoIXJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5jb250YWluZXIoKS0+aXNSZW5kZXJWaWV3
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVuZGVyTGF5ZXItPmlzU3RhY2tpbmdD
b250ZXh0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ciogZ3JhcGhpY3NMYXllciA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGJhY2tpbmctPmdy
YXBoaWNzTGF5ZXIoKSk7Ci0gICAgZ3JhcGhpY3NMYXllci0+c2V0Rml4ZWRUb1ZpZXdwb3J0KHRy
dWUpOwotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihS
ZW5kZXJMYXllciogcmVuZGVyTGF5ZXIpCi17Ci0gICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0
Rm9yU2VsZihyZW5kZXJMYXllcik7Ci0KLSAgICBpZiAocmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQo
KSkKLSAgICAgICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIocmVuZGVyTGF5ZXIt
PmZpcnN0Q2hpbGQoKSk7Ci0gICAgaWYgKHJlbmRlckxheWVyLT5uZXh0U2libGluZygpKQotICAg
ICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyZW5kZXJMYXllci0+bmV4dFNp
YmxpbmcoKSk7Ci19CiAKLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNGaXhlZExheWVy
cygpCi17Ci0gICAgaWYgKCFtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCkgfHwgIW1f
d2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zv
ckZpeGVkUG9zaXRpb25FbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV93
ZWJQYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT5oYXNWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0
cygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5kZXJMYXllciogcm9vdFJlbmRlckxheWVy
ID0gbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+Y29udGVudFJlbmRlcmVyKCktPmNvbXBvc2l0b3Io
KS0+cm9vdFJlbmRlckxheWVyKCk7Ci0gICAgQVNTRVJUKHJvb3RSZW5kZXJMYXllcik7Ci0gICAg
aWYgKHJvb3RSZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKQotICAgICAgICB1cGRhdGVPZmZzZXRG
cm9tVmlld3BvcnRGb3JMYXllcihyb290UmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSk7Ci19Ci0K
LXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmxvY2tBbmltYXRpb25zKCkKLXsKLSAgICBtX2Fu
aW1hdGlvbnNMb2NrZWQgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0QW5pbWF0aW9uc0xvY2tlZCh0cnVlKSk7Ci19Ci0K
LXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnVubG9ja0FuaW1hdGlvbnMoKQotewotICAgIGlm
ICghbV9hbmltYXRpb25zTG9ja2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2FuaW1hdGlv
bnNMb2NrZWQgPSBmYWxzZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHk6OlNldEFuaW1hdGlvbnNMb2NrZWQoZmFsc2UpKTsKLX0KLQotdm9p
ZCBMYXllclRyZWVDb29yZGluYXRvcjo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQotewot
ICAgIGlmIChtX2lzU3VzcGVuZGVkIHx8IG1fd2FpdGluZ0ZvclVJUHJvY2VzcykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gV2UgbG9jayB0aGUgYW5pbWF0aW9ucyB3aGlsZSBwZXJmb3JtaW5n
IGxheW91dCwgdG8gYXZvaWQgZmxpY2tlcnMgY2F1c2VkIGJ5IGFuaW1hdGlvbnMgY29udGludWlu
ZyBpbiB0aGUgVUkgcHJvY2VzcyB3aGlsZQotICAgIC8vIHRoZSB3ZWIgcHJvY2VzcyBsYXlvdXQg
d2FudHMgdG8gY2FuY2VsIHRoZW0uCi0gICAgbG9ja0FuaW1hdGlvbnMoKTsKLSAgICBzeW5jRGlz
cGxheVN0YXRlKCk7Ci0KLSAgICAvLyBXZSBjYW4gdW5sb2NrIHRoZSBhbmltYXRpb25zIGJlZm9y
ZSBmbHVzaGluZyBpZiB0aGVyZSBhcmUgbm8gdmlzaWJsZSBjaGFuZ2VzLCBmb3IgZXhhbXBsZSBp
ZiB0aGVyZSBhcmUgY29udGVudCB1cGRhdGVzCi0gICAgLy8gaW4gYSBsYXllciB3aXRoIG9wYWNp
dHkgMC4KLSAgICBib29sIGNhblVubG9ja0JlZm9yZUZsdXNoID0gIW1faXNWYWxpZCB8fCAhdG9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5oYXNQZW5kaW5nVmlz
aWJsZUNoYW5nZXMoKTsKLSAgICBpZiAoY2FuVW5sb2NrQmVmb3JlRmx1c2gpCi0gICAgICAgIHVu
bG9ja0FuaW1hdGlvbnMoKTsKLQotICAgIGlmICghbV9pc1ZhbGlkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkpCi0gICAgICAgIGRpZFBlcmZv
cm1TY2hlZHVsZWRMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OnN5bmNEaXNwbGF5U3RhdGUoKQotewotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFN
RSkgJiYgIVVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikgJiYgIVVTRShSRVFVRVNU
X0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQg
YW55IHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBhbmltYXRpb24gY2FsbGJhY2tzIGFyZSBiZWluZyBl
eGVjdXRlZCBiZWZvcmUgd2UgZmx1c2ggdGhlIGxheWVycy4KLSAgICBtX3dlYlBhZ2UtPmNvcmVQ
YWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPnNlcnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMoY29u
dmVydFNlY29uZHNUb0RPTVRpbWVTdGFtcChjdXJyZW50VGltZSgpKSk7Ci0jZW5kaWYKLQotICAg
IG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGlu
YXRvcjo6ZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQotewotICAgIGlmIChtX25vdGlm
eUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCkgeworICAgIGlmIChkaWRTeW5jICYmIG1fbm90aWZ5
QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKSB7CiAgICAgICAgIHN0YXRpY19jYXN0PERyYXdpbmdB
cmVhSW1wbCo+KG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKSktPmxheWVySG9zdERpZEZsdXNoTGF5
ZXJzKCk7CiAgICAgICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gZmFsc2U7
CiAgICAgfQogfQogCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllckZsdXNoVGltZXJG
aXJlZChUaW1lcjxMYXllclRyZWVDb29yZGluYXRvcj4qKQotewotICAgIHBlcmZvcm1TY2hlZHVs
ZWRMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZVBh
Z2VPdmVybGF5TGF5ZXIoKQotewotICAgIEFTU0VSVCghbV9wYWdlT3ZlcmxheUxheWVyKTsKLQot
ICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzLCB0aGlz
KTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROYW1lKCJMYXll
clRyZWVDb29yZGluYXRvciBwYWdlIG92ZXJsYXkgY29udGVudCIpOwotI2VuZGlmCi0KLSAgICBt
X3BhZ2VPdmVybGF5TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAgICBtX3BhZ2VPdmVy
bGF5TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOwotCi0gICAgbV9yb290TGF5ZXIt
PmFkZENoaWxkKG1fcGFnZU92ZXJsYXlMYXllci5nZXQoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCkKLXsKLSAgICBBU1NFUlQobV9w
YWdlT3ZlcmxheUxheWVyKTsKLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnJlbW92ZUZyb21QYXJl
bnQoKTsKLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBudWxscHRyOwotfQotCi1QYXNzUmVmUHRy
PENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBMYXllclRyZWVDb29yZGluYXRvcjo6Y3JlYXRlSW1h
Z2VCYWNraW5nSWZOZWVkZWQoSW1hZ2UqIGltYWdlKQotewotICAgIENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQgaW1hZ2VJRCA9IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpnZXRDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEKGltYWdlKTsKLSAgICBJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nPiBpbWFnZUJhY2tpbmc7Ci0gICAgaWYgKGl0ID09IG1faW1hZ2VCYWNraW5n
cy5lbmQoKSkgewotICAgICAgICBpbWFnZUJhY2tpbmcgPSBDb29yZGluYXRlZEltYWdlQmFja2lu
Zzo6Y3JlYXRlKHRoaXMsIGltYWdlKTsKLSAgICAgICAgbV9pbWFnZUJhY2tpbmdzLmFkZChpbWFn
ZUlELCBpbWFnZUJhY2tpbmcpOwotICAgIH0gZWxzZQotICAgICAgICBpbWFnZUJhY2tpbmcgPSBp
dC0+dmFsdWU7Ci0KLSAgICByZXR1cm4gaW1hZ2VCYWNraW5nOwotfQotCi12b2lkIExheWVyVHJl
ZUNvb3JkaW5hdG9yOjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCBpbWFnZUlEKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkNyZWF0ZUltYWdl
QmFja2luZyhpbWFnZUlEKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnVwZGF0
ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQsIGNvbnN0IFdl
YkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCi17Ci0gICAgbV9zaG91bGRTeW5j
RnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eTo6VXBkYXRlSW1hZ2VCYWNraW5nKGltYWdlSUQsIGhhbmRsZSkpOwotfQot
Ci12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFt
ZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGlu
YXRvclByb3h5OjpDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKGltYWdlSUQpKTsKLX0KLQotdm9p
ZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBpZiAobV9pc1B1cmdpbmcpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEFTU0VSVChtX2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkpOwot
ICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX2ltYWdlQmFja2luZ3MucmVtb3Zl
KGltYWdlSUQpOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eTo6UmVtb3ZlSW1hZ2VCYWNraW5nKGltYWdlSUQpKTsKLX0KLQotdm9pZCBMYXll
clRyZWVDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpCi17Ci0g
ICAgSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBlbmQgPSBtX2ltYWdlQmFja2luZ3MuZW5kKCk7
Ci0gICAgZm9yIChJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2ltYWdlQmFja2lu
Z3MuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgaXRlci0+dmFsdWUtPnVw
ZGF0ZSgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpub3RpZnlBbmltYXRpb25T
dGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgLyogdGltZSAqLykK
K3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnBhaW50Q29udGVudHMoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQogewor
ICAgIG1fd2ViUGFnZS0+ZHJhd1JlY3QoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7CiB9CiAK
LXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6Om5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciopCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpwYWludE92
ZXJsYXlDb250ZW50cyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwg
Y29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCiB7CisgICAgLy8gT3ZlcmxheXMgY29udGFpbiB0cmFu
c3BhcmVudCBjb250ZW50cyBhbmQgd29uJ3QgY2xlYXIgdGhlIGNvbnRleHQgYXMgcGFydCBvZiB0
aGVpciByZW5kZXJpbmcsIHNvIHdlIGRvIGl0IGhlcmUuCisgICAgZ3JhcGhpY3NDb250ZXh0LmNs
ZWFyUmVjdChjbGlwUmVjdCk7CisgICAgbV93ZWJQYWdlLT5kcmF3UGFnZU92ZXJsYXkoZ3JhcGhp
Y3NDb250ZXh0LCBjbGlwUmVjdCk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnBh
aW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCkK
LXsKLSAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIp
IHsKLSAgICAgICAgbV93ZWJQYWdlLT5kcmF3UmVjdChncmFwaGljc0NvbnRleHQsIGNsaXBSZWN0
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChncmFwaGljc0xheWVyID09IG1f
cGFnZU92ZXJsYXlMYXllcikgewotICAgICAgICAvLyBPdmVybGF5cyBjb250YWluIHRyYW5zcGFy
ZW50IGNvbnRlbnRzIGFuZCB3b24ndCBjbGVhciB0aGUgY29udGV4dCBhcyBwYXJ0IG9mIHRoZWly
IHJlbmRlcmluZywgc28gd2UgZG8gaXQgaGVyZS4KLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNs
ZWFyUmVjdChjbGlwUmVjdCk7Ci0gICAgICAgIG1fd2ViUGFnZS0+ZHJhd1BhZ2VPdmVybGF5KGdy
YXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi1Q
YXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGVHcmFw
aGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKK2Jvb2wgTGF5ZXJUcmVlQ29v
cmRpbmF0b3I6Omhhc1BhZ2VPdmVybGF5KCkgY29uc3QKIHsKLSAgICBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIqIGxheWVyID0gbmV3IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihjbGllbnQpOwot
ICAgIGxheWVyLT5zZXRDb29yZGluYXRvcih0aGlzKTsKLSAgICBtX3JlZ2lzdGVyZWRMYXllcnMu
YWRkKGxheWVyKTsKLSAgICBsYXllci0+c2V0Q29udGVudHNTY2FsZShtX2NvbnRlbnRzU2NhbGUp
OwotICAgIGxheWVyLT5hZGp1c3RWaXNpYmxlUmVjdCgpOwotICAgIHJldHVybiBhZG9wdFB0cihs
YXllcik7CisgICAgcmV0dXJuIG1fd2ViUGFnZS0+aGFzUGFnZU92ZXJsYXkoKTsKIH0KIAogYm9v
bCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKQpAQCAtNjQ2
LDEwMyArMTk0LDI2IEBAIGJvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENv
bXBvc2l0aW5nKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBMYXllclRyZWVDb29yZGlu
YXRvcjo6Y3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGls
ZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgdGlsZVJlY3QpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Q3Jl
YXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsK
LX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6dXBkYXRlVGlsZShDb29yZGluYXRlZExh
eWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYg
dXBkYXRlSW5mbywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGlsZVJlY3QpCi17Ci0gICAgbV9z
aG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6VXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJ
RCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRv
cjo6cmVtb3ZlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlE
KQotewotICAgIGlmIChtX2lzUHVyZ2luZykKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc2hvdWxk
U3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHk6OlJlbW92ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQpKTsK
LX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6Y3JlYXRlVXBkYXRlQXRsYXMoaW50IGF0
bGFzSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCi17Ci0g
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpD
cmVhdGVVcGRhdGVBdGxhcyhhdGxhc0lELCBoYW5kbGUpKTsKLX0KLQotdm9pZCBMYXllclRyZWVD
b29yZGluYXRvcjo6cmVtb3ZlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQpCi17Ci0gICAgaWYgKG1f
aXNQdXJnaW5nKQotICAgICAgICByZXR1cm47Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpSZW1vdmVVcGRhdGVBdGxhcyhhdGxhc0lEKSk7
Ci19Ci0KLVdlYkNvcmU6OkZsb2F0UmVjdCBMYXllclRyZWVDb29yZGluYXRvcjo6dmlzaWJsZUNv
bnRlbnRzUmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsK
LX0KLQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRMYXllckFuaW1hdGlvbnMoQ29v
cmRpbmF0ZWRMYXllcklEIGxheWVySUQsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBh
bmltYXRpb25zKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBHcmFwaGlj
c0xheWVyQW5pbWF0aW9ucyBhY3RpdmVBbmltYXRpb25zID0gYW5pbWF0aW9ucy5nZXRBY3RpdmVB
bmltYXRpb25zKCk7Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYWN0aXZlQW5pbWF0aW9ucy5hbmltYXRpb25zKCkuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcyA9IGFuaW1hdGlvbnMuYW5p
bWF0aW9ucygpLmF0KGkpLmtleWZyYW1lcygpOwotICAgICAgICBpZiAoa2V5ZnJhbWVzLnByb3Bl
cnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcikKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGtleWZyYW1lcy5zaXplKCk7ICsr
aikgewotICAgICAgICAgICAgY29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUqIGZpbHRlclZhbHVl
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUqPihrZXlmcmFtZXMuYXQo
aSkpOwotICAgICAgICAgICAgY2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcygqZmlsdGVy
VmFsdWUtPnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0gICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRMYXllckFuaW1h
dGlvbnMobGF5ZXJJRCwgYWN0aXZlQW5pbWF0aW9ucykpOwotfQotCiB2b2lkIExheWVyVHJlZUNv
b3JkaW5hdG9yOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
ZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCiB7Ci0gICAg
Ym9vbCBjb250ZW50c1JlY3REaWRDaGFuZ2UgPSByZWN0ICE9IG1fdmlzaWJsZUNvbnRlbnRzUmVj
dDsKLSAgICBib29sIGNvbnRlbnRzU2NhbGVEaWRDaGFuZ2UgPSBzY2FsZSAhPSBtX2NvbnRlbnRz
U2NhbGU7Ci0KLSAgICAvLyBBIHplcm8gdHJhamVjdG9yeVZlY3RvciBpbmRpY2F0ZXMgdGhhdCB0
aWxlcyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9ydCBhcmUgcmVxdWVzdGVkLgotICAgIHRvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSktPnNl
dFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7Ci0K
LSAgICBpZiAoY29udGVudHNSZWN0RGlkQ2hhbmdlIHx8IGNvbnRlbnRzU2NhbGVEaWRDaGFuZ2Up
IHsKLSAgICAgICAgbV92aXNpYmxlQ29udGVudHNSZWN0ID0gcmVjdDsKLSAgICAgICAgbV9jb250
ZW50c1NjYWxlID0gc2NhbGU7CisgICAgbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yLT5zZXRWaXNp
YmxlQ29udGVudHNSZWN0KHJlY3QsIHNjYWxlLCB0cmFqZWN0b3J5VmVjdG9yKTsKIAotICAgICAg
ICBIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBl
bmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDxXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVy
ZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoY29u
dGVudHNTY2FsZURpZENoYW5nZSkKLSAgICAgICAgICAgICAgICAoKml0KS0+c2V0Q29udGVudHNT
Y2FsZShzY2FsZSk7Ci0gICAgICAgICAgICBpZiAoY29udGVudHNSZWN0RGlkQ2hhbmdlKQotICAg
ICAgICAgICAgICAgICgqaXQpLT5hZGp1c3RWaXNpYmxlUmVjdCgpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CiAgICAgaWYgKG1fd2ViUGFnZS0+dXNlRml4
ZWRMYXlvdXQoKSkgewogICAgICAgICAvLyBSb3VuZCB0aGUgcmVjdCBpbnN0ZWFkIG9mIGVuY2xv
c2luZyBpdCB0byBtYWtlIHN1cmUgdGhhdCBpdHMgc2l6ZSBzdGF5cwogICAgICAgICAvLyB0aGUg
c2FtZSB3aGlsZSBwYW5uaW5nLiBUaGlzIGNhbiBoYXZlIG5hc3R5IGVmZmVjdHMgb24gbGF5b3V0
LgogICAgICAgICBtX3dlYlBhZ2UtPnNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KHJvdW5kZWRJ
bnRSZWN0KHJlY3QpKTsKICAgICB9Ci0KLSAgICBpZiAoY29udGVudHNSZWN0RGlkQ2hhbmdlKQot
ICAgICAgICBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSA9IHRydWU7CiB9CiAKIEdy
YXBoaWNzTGF5ZXJGYWN0b3J5KiBMYXllclRyZWVDb29yZGluYXRvcjo6Z3JhcGhpY3NMYXllckZh
Y3RvcnkoKQogewotICAgIHJldHVybiB0aGlzOworICAgIHJldHVybiBtX2NvbXBvc2l0aW5nQ29v
cmRpbmF0b3IuZ2V0KCk7CiB9CiAKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUp
CiB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzY2hlZHVsZUFuaW1hdGlvbigpCiB7Ci0gICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpSZXF1
ZXN0QW5pbWF0aW9uRnJhbWUoKSk7CisgICAgbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2Fn
ZUNsaWVudC0+cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OmFuaW1hdGlvbkZyYW1lUmVhZHkoKQpAQCAtNzUzLDg0ICsyMjQsMTcgQEAgdm9p
ZCBMYXllclRyZWVDb29yZGluYXRvcjo6YW5pbWF0aW9uRnJhbWVSZWFkeSgpCiAKIHZvaWQgTGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbmRlck5leHRGcmFtZSgpCiB7Ci0gICAgbV93YWl0aW5nRm9y
VUlQcm9jZXNzID0gZmFsc2U7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkKLSAgICAgICAg
bV91cGRhdGVBdGxhc2VzW2ldLT5kaWRTd2FwQnVmZmVycygpOwotfQotCi1ib29sIExheWVyVHJl
ZUNvb3JkaW5hdG9yOjpsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdAotewotICAg
IHJldHVybiAhbV9pc1N1c3BlbmRlZCAmJiAhbV93YWl0aW5nRm9yVUlQcm9jZXNzOworICAgIG1f
Y29tcG9zaXRpbmdDb29yZGluYXRvci0+cmVuZGVyTmV4dEZyYW1lKCk7CiB9CiAKIHZvaWQgTGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OnB1cmdlQmFja2luZ1N0b3JlcygpCiB7Ci0gICAgVGVtcG9yYXJ5
Q2hhbmdlPGJvb2w+IHB1cmdpbmdUb2dnbGUobV9pc1B1cmdpbmcsIHRydWUpOwotCi0gICAgSGFz
aFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0g
bV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+cHVyZ2VCYWNraW5nU3Rv
cmVzKCk7Ci0KLSAgICBtX2ltYWdlQmFja2luZ3MuY2xlYXIoKTsKLSAgICBtX3VwZGF0ZUF0bGFz
ZXMuY2xlYXIoKTsKLX0KLQotUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IExheWVyVHJlZUNv
b3JkaW5hdG9yOjpiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29vcmRp
bmF0ZWRTdXJmYWNlOjpGbGFncyBmbGFncywgaW50JiBhdGxhc0lELCBJbnRQb2ludCYgb2Zmc2V0
KQotewotICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dDsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV91cGRhdGVBdGxhc2VzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIFVwZGF0ZUF0bGFzKiBhdGxhcyA9IG1fdXBkYXRlQXRsYXNlc1tpXS5nZXQoKTsKLSAg
ICAgICAgaWYgKGF0bGFzLT5zdXBwb3J0c0FscGhhKCkgPT0gKGZsYWdzICYgQ29vcmRpbmF0ZWRT
dXJmYWNlOjpTdXBwb3J0c0FscGhhKSkgewotICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHJldHVy
biBudWxsIGlmIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIgc3BhY2UuCi0gICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQgPSBhdGxhcy0+YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVy
KGF0bGFzSUQsIHNpemUsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoZ3JhcGhpY3NDb250ZXh0
KQotICAgICAgICAgICAgICAgIHJldHVybiBncmFwaGljc0NvbnRleHQucmVsZWFzZSgpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IGludCBTY3JhdGNoQnVmZmVyRGltZW5z
aW9uID0gMTAyNDsgLy8gU2hvdWxkIGJlIGEgcG93ZXIgb2YgdHdvLgotICAgIG1fdXBkYXRlQXRs
YXNlcy5hcHBlbmQoYWRvcHRQdHIobmV3IFVwZGF0ZUF0bGFzKHRoaXMsIFNjcmF0Y2hCdWZmZXJE
aW1lbnNpb24sIGZsYWdzKSkpOwotICAgIHNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygp
OwotICAgIHJldHVybiBtX3VwZGF0ZUF0bGFzZXMubGFzdCgpLT5iZWdpblBhaW50aW5nT25BdmFp
bGFibGVCdWZmZXIoYXRsYXNJRCwgc2l6ZSwgb2Zmc2V0KTsKLX0KLQotY29uc3QgZG91YmxlIFJl
bGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckludGVydmFsID0gMC41OwotCi12b2lkIExheWVyVHJl
ZUNvb3JkaW5hdG9yOjpzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMoKQotewotICAgIGlm
ICghbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9y
ZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIuc3RhcnRSZXBlYXRpbmcoUmVsZWFzZUluYWN0aXZl
QXRsYXNlc1RpbWVySW50ZXJ2YWwpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpy
ZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJGaXJlZChUaW1lcjxMYXllclRyZWVDb29yZGluYXRv
cj4qKQotewotICAgIC8vIFdlIGFsd2F5cyB3YW50IHRvIGtlZXAgb25lIGF0bGFzIGZvciBub24t
Y29tcG9zaXRlZCBjb250ZW50LgotICAgIE93blB0cjxVcGRhdGVBdGxhcz4gYXRsYXNUb0tlZXBB
bnl3YXk7Ci0gICAgYm9vbCBmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQg
PSBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gbV91cGRhdGVBdGxhc2VzLnNpemUoKSAtIDE7ICBp
ID49IDA7IC0taSkgewotICAgICAgICBVcGRhdGVBdGxhcyogYXRsYXMgPSBtX3VwZGF0ZUF0bGFz
ZXNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICghYXRsYXMtPmlzSW5Vc2UoKSkKLSAgICAgICAgICAg
IGF0bGFzLT5hZGRUaW1lSW5hY3RpdmUoUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2
YWwpOwotICAgICAgICBib29sIHVzYWJsZUZvck5vbkNvbXBvc2l0ZWRDb250ZW50ID0gIWF0bGFz
LT5zdXBwb3J0c0FscGhhKCk7Ci0gICAgICAgIGlmIChhdGxhcy0+aXNJbmFjdGl2ZSgpKSB7Ci0g
ICAgICAgICAgICBpZiAoIWZvdW5kQWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVudCAm
JiAhYXRsYXNUb0tlZXBBbnl3YXkgJiYgdXNhYmxlRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQpCi0g
ICAgICAgICAgICAgICAgYXRsYXNUb0tlZXBBbnl3YXkgPSBtX3VwZGF0ZUF0bGFzZXNbaV0ucmVs
ZWFzZSgpOwotICAgICAgICAgICAgbV91cGRhdGVBdGxhc2VzLnJlbW92ZShpKTsKLSAgICAgICAg
fSBlbHNlIGlmICh1c2FibGVGb3JOb25Db21wb3NpdGVkQ29udGVudCkKLSAgICAgICAgICAgIGZv
dW5kQWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVudCA9IHRydWU7Ci0gICAgfQotCi0g
ICAgaWYgKCFmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgJiYgYXRsYXNU
b0tlZXBBbnl3YXkpCi0gICAgICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBlbmQoYXRsYXNUb0tlZXBB
bnl3YXkucmVsZWFzZSgpKTsKLQotICAgIGlmIChtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpIDw9IDEp
Ci0gICAgICAgIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyLnN0b3AoKTsKKyAgICBtX2Nv
bXBvc2l0aW5nQ29vcmRpbmF0b3ItPnB1cmdlQmFja2luZ1N0b3JlcygpOwogfQogCiB2b2lkIExh
eWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29s
b3ImIGNvbG9yKQogewotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eTo6U2V0QmFja2dyb3VuZENvbG9yKGNvbG9yKSk7CisgICAgbV9jb21wb3Np
dGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudC0+c2V0QmFja2dyb3VuZENvbG9yKGNvbG9yKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRv
ci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaAppbmRleCA3MDU3OGU1NWMzYjNjN2E0MGE2MGIxZGI2
MzdhMmFmZDQxMzc0YmJkLi5jNDU5NTA2YjUwYzdmNDExNTdhM2ZjYzMxNmZlYTUzMjliYmJjMjg4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9y
LmgKQEAgLTEsNSArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjIsMzkgKzIzLDI3IEBACiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CiAKLSNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJDb29y
ZGluYXRlZEltYWdlQmFja2luZy5oIgorI2luY2x1ZGUgIkNvbXBvc2l0aW5nQ29vcmRpbmF0b3Iu
aCIKICNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlSG9z
dC5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAiVXBkYXRlQXRsYXMuaCIKLSNpbmNs
dWRlICJXZWJDb29yZGluYXRlZFN1cmZhY2UuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNz
TGF5ZXJDbGllbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJGYWN0b3J5Lmg+
CisjaW5jbHVkZSAiV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQuaCIKICNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCi0jaWYgRU5B
QkxFKENTU19TSEFERVJTKQotI2luY2x1ZGUgIldlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS5o
IgotI2VuZGlmCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHcmFwaGljc0xheWVyRmFjdG9y
eTsKK30KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFVwZGF0ZUluZm87CiBjbGFzcyBX
ZWJQYWdlOwogCi1jbGFzcyBMYXllclRyZWVDb29yZGluYXRvciA6IHB1YmxpYyBMYXllclRyZWVI
b3N0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgLCBwdWJsaWMgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgLCBwdWJsaWMgQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmc6OkNvb3JkaW5hdG9yCi0gICAgLCBwdWJsaWMgVXBkYXRlQXRsYXNDbGllbnQKLSAgICAsIHB1
YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeQotI2lmIEVOQUJMRShDU1NfU0hBREVS
UykKLSAgICAsIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudAotI2VuZGlmCi17Citj
bGFzcyBMYXllclRyZWVDb29yZGluYXRvciA6IHB1YmxpYyBMYXllclRyZWVIb3N0LCBwdWJsaWMg
Q29tcG9zaXRpbmdDb29yZGluYXRvckNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+IGNyZWF0ZShXZWJQYWdlKik7CiAgICAgdmlydHVh
bCB+TGF5ZXJUcmVlQ29vcmRpbmF0b3IoKTsKIAorICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZy
b20gTGF5ZXJUcmVlSG9zdAogICAgIHZpcnR1YWwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5
ZXJUcmVlQ29udGV4dCgpIHsgcmV0dXJuIG1fbGF5ZXJUcmVlQ29udGV4dDsgfQogICAgIHZpcnR1
YWwgdm9pZCBzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCk7CiAgICAgdmlydHVh
bCB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwpAQCAtNzQsMTMzICs2Myw0NCBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5T3BhY2l0eShmbG9hdCk7CiAgICAgdmly
dHVhbCBib29sIHBhZ2VPdmVybGF5U2hvdWxkQXBwbHlGYWRlV2hlblBhaW50aW5nKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIHsg
bV9pc1N1c3BlbmRlZCA9IHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5n
KCkgeyBtX2lzU3VzcGVuZGVkID0gZmFsc2U7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9CisgICAg
dmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCk7CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZVJl
bmRlcmluZygpOwogICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VTY2FsZUZhY3RvckRpZENoYW5nZSgp
IHsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gY3Jl
YXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoV2ViQ29yZTo6SW1hZ2UqKSBPVkVSUklERTsKIAotICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGls
ZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90
IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50
MzJfdCB0aWxlSUQpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVDb250
ZW50c1JlY3QoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7CiAg
ICAgdmlydHVhbCB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOwotICAgIHZpcnR1YWwgYm9vbCBs
YXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCBzY2Fs
ZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3Jl
SVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJik7CiAgICAgdmlydHVhbCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogZ3JhcGhpY3NMYXllckZhY3RvcnkoKSBPVkVS
UklERTsKLQotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVy
SUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNM
YXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVk
TGF5ZXJJRD4mKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5h
dGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKLSNp
ZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckZpbHRlcnMo
Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7Ci0j
ZW5kaWYKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRl
Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgV2Vi
Q29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95
Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCkgT1ZFUlJJREU7Ci0jZW5kaWYKLSAgICB2aXJ0dWFs
IHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKik7Ci0g
ICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygpOwotCi0gICAgdmlydHVhbCBQYXNzT3du
UHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzLCBpbnQmIGF0bGFzSUQs
IFdlYkNvcmU6OkludFBvaW50Jik7Ci0KLSAgICAvLyBVcGRhdGVBdGxhc0NsaWVudAotICAgIHZp
cnR1YWwgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCwgY29uc3QgV2ViQ29vcmRp
bmF0ZWRTdXJmYWNlOjpIYW5kbGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVXBkYXRlQXRs
YXMoaW50IGF0bGFzSUQpOwotCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQog
ICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIE9WRVJSSURFOwogI2VuZGlmCiAg
ICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYp
IE9WRVJSSURFOwogCisgICAgLy8gUmVpbXBsZW1lbnRhdGlvbnMgZnJvbSBDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yQ2xpZW50CisgICAgdmlydHVhbCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiB2aWV3
U2l6ZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRQZXJmb3JtU2NoZWR1
bGVkTGF5ZXJGbHVzaChib29sIGRpZFN5bmMpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBp
c09wYXF1ZUNvbnRlbnRzKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGxheW91dElmTmVl
ZGVkKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBwYWludE92ZXJsYXlDb250ZW50cyhXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBib29sIGhhc1BhZ2VPdmVybGF5KCkgY29uc3QgT1ZFUlJJREU7CisKIHBy
b3RlY3RlZDoKICAgICBleHBsaWNpdCBMYXllclRyZWVDb29yZGluYXRvcihXZWJQYWdlKik7CiAK
IHByaXZhdGU6Ci0gICAgLy8gR3JhcGhpY3NMYXllckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBu
b3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3Vi
bGUgdGltZSk7Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciopOwotICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgY2xpcFJlY3QpOwotCi0gICAgLy8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5h
dG9yCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5n
KENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6
SGFuZGxlJikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29u
dGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2
b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklE
RTsKLQotICAgIHZvaWQgZmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpOwotCi0gICAg
Ly8gR3JhcGhpY3NMYXllckZhY3RvcnkKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6
R3JhcGhpY3NMYXllcj4gY3JlYXRlR3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q2xpZW50KikgT1ZFUlJJREU7Ci0KLSAgICAvLyBMYXllclRyZWVDb29yZGluYXRvcgotICAgIHZv
aWQgaW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQoKTsKLSAgICB2b2lkIGNy
ZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKLSAgICB2b2lkIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVy
KCk7Ci0gICAgYm9vbCBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKLSAgICB2b2lkIGNhbmNl
bFBlbmRpbmdMYXllckZsdXNoKCk7Ci0gICAgdm9pZCBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVz
aCgpOwotICAgIHZvaWQgZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKLSAgICB2b2lk
IHN5bmNEaXNwbGF5U3RhdGUoKTsKLSAgICB2b2lkIGxvY2tBbmltYXRpb25zKCk7Ci0gICAgdm9p
ZCB1bmxvY2tBbmltYXRpb25zKCk7Ci0KLSAgICB2b2lkIGxheWVyRmx1c2hUaW1lckZpcmVkKFdl
YkNvcmU6OlRpbWVyPExheWVyVHJlZUNvb3JkaW5hdG9yPiopOwotCi0gICAgdm9pZCBzY2hlZHVs
ZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMoKTsKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05f
RlJBTUUpCiAgICAgdm9pZCBhbmltYXRpb25GcmFtZVJlYWR5KCk7CiAjZW5kaWYKIAotICAgIHZv
aWQgcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8TGF5ZXJU
cmVlQ29vcmRpbmF0b3I+Kik7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgLy8gV2Vi
Q3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5Q2xpZW50Ci0gICAgdm9pZCByZW1vdmVDdXN0b21GaWx0
ZXJQcm9ncmFtUHJveHkoV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5Kik7Ci0KLSAgICB2b2lk
IGNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoY29uc3QgV2ViQ29yZTo6RmlsdGVyT3Bl
cmF0aW9ucyYpOwotICAgIHZvaWQgZGlzY29ubmVjdEN1c3RvbUZpbHRlclByb2dyYW1zKCk7Ci0j
ZW5kaWYKLQotICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsK
LQotICAgIC8vIFRoZSBsYXllciB3aGljaCBjb250YWlucyBhbGwgbm9uLWNvbXBvc2l0ZWQgY29u
dGVudC4KLSAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyOwotCi0gICAgLy8gVGhlIHBhZ2Ugb3ZlcmxheSBsYXllci4gV2lsbCBiZSBu
dWxsIGlmIHRoZXJlJ3Mgbm8gcGFnZSBvdmVybGF5LgotICAgIE93blB0cjxXZWJDb3JlOjpHcmFw
aGljc0xheWVyPiBtX3BhZ2VPdmVybGF5TGF5ZXI7Ci0KLSAgICBIYXNoU2V0PFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcio+IG1fcmVnaXN0ZXJlZExheWVyczsKLSAgICBWZWN0b3I8
Q29vcmRpbmF0ZWRMYXllcklEPiBtX2RldGFjaGVkTGF5ZXJzOwotICAgIHR5cGVkZWYgSGFzaE1h
cDxDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmc+ID4gSW1hZ2VCYWNraW5nTWFwOwotICAgIEltYWdlQmFja2luZ01hcCBtX2ltYWdlQmFja2lu
Z3M7Ci0gICAgVmVjdG9yPE93blB0cjxVcGRhdGVBdGxhcz4gPiBtX3VwZGF0ZUF0bGFzZXM7Ci0K
LSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgSGFzaFNldDxXZWJDdXN0b21GaWx0ZXJQcm9n
cmFtUHJveHkqPiBtX2N1c3RvbUZpbHRlclByb2dyYW1zOwotI2VuZGlmCisgICAgUmVmUHRyPFdl
YkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50PiBtX2NvbXBvc2l0aW5nQ29vcmRp
bmF0b3JNZXNzYWdlQ2xpZW50OworICAgIE93blB0cjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiBt
X2NvbXBvc2l0aW5nQ29vcmRpbmF0b3I7CiAKICAgICBib29sIG1fbm90aWZ5QWZ0ZXJTY2hlZHVs
ZWRMYXllckZsdXNoOwotICAgIGJvb2wgbV9pc1ZhbGlkOwotICAgIC8vIFdlIGRvbid0IHNlbmQg
dGhlIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gcmVsZWFzaW5nIHJlc291cmNlcyB0byBVSSBQcm9jZXNz
IGR1cmluZyBwdXJnaW5nLCBiZWNhdXNlIFVJIFByb2Nlc3MgYWxyZWFkeSBoYWQgcmVtb3ZlZCBh
bGwgcmVzb3VyY2VzLgotICAgIGJvb2wgbV9pc1B1cmdpbmc7Ci0KLSAgICBib29sIG1fd2FpdGlu
Z0ZvclVJUHJvY2VzczsKLSAgICBib29sIG1faXNTdXNwZW5kZWQ7Ci0gICAgV2ViQ29yZTo6Rmxv
YXRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKLSAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7
Ci0gICAgYm9vbCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZTsKIAogICAgIExheWVy
VHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0OwotICAgIGJvb2wgbV9zaG91bGRTeW5jRnJh
bWU7Ci0gICAgYm9vbCBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcjsKLSAgICBX
ZWJDb3JlOjpUaW1lcjxMYXllclRyZWVDb29yZGluYXRvcj4gbV9sYXllckZsdXNoVGltZXI7Ci0g
ICAgV2ViQ29yZTo6VGltZXI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+IG1fcmVsZWFzZUluYWN0aXZl
QXRsYXNlc1RpbWVyOwotICAgIGJvb2wgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQ7CiAg
ICAgdWludDY0X3QgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQ7Ci0gICAgYm9vbCBtX2Fu
aW1hdGlvbnNMb2NrZWQ7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yTWVzc2FnZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVu
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNDk0ZDVkYTQ5OGEyZjFkZTgwZjU5MTEwMWFjNTZiZmFlZWU4YzY0
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL1dlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50
LmNwcApAQCAtMCwwICsxLDI2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisj
aW5jbHVkZSAiV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQuaCIKKworI2lu
Y2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgIkxh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIk1lc3NhZ2VJRC5o
IgorI2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94
eU1lc3NhZ2VzLmgiCisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisjaW5jbHVkZSAiQ3VzdG9t
RmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5oIgorI2luY2x1ZGUgIlZhbGlkYXRlZEN1c3RvbUZpbHRl
ck9wZXJhdGlvbi5oIgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKworUGFzc1JlZlB0cjxXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVz
c2FnZUNsaWVudD4gV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OmNyZWF0
ZShXZWJQYWdlKiB3ZWJQYWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViQ29tcG9z
aXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQod2ViUGFnZSkpOworfQorCitXZWJDb21wb3Np
dGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6fldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JN
ZXNzYWdlQ2xpZW50KCkKK3sKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgZGlzY29ubmVj
dEN1c3RvbUZpbHRlclByb2dyYW1zKCk7CisjZW5kaWYKK30KKworV2ViQ29tcG9zaXRpbmdDb29y
ZGluYXRvck1lc3NhZ2VDbGllbnQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xp
ZW50KFdlYlBhZ2UqIHdlYlBhZ2UpCisgICAgOiBtX3dlYlBhZ2Uod2ViUGFnZSkKK3sKKworfQor
Cit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpzZXRSb290Q29t
cG9zaXRpbmdMYXllcihDb29yZGluYXRlZExheWVySUQgaWQpCit7CisgICAgbV93ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRSb290Q29tcG9zaXRp
bmdMYXllcihpZCkpOworfQorCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdl
Q2xpZW50OjpzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBj
b25zdCBDb29yZGluYXRlZExheWVySW5mbyYgaW5mbykKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJT
dGF0ZShpZCwgaW5mbykpOworfQorCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNz
YWdlQ2xpZW50OjpzZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklE
IGlkLCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgY2hpbGRyZW4pCit7CisgICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRD
b21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oaWQsIGNoaWxkcmVuKSk7Cit9CisKKyNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50
OjpzZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0
IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCit7CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQor
ICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoZmlsdGVycyk7CisjZW5kaWYKKyAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNl
dENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKGlkLCBmaWx0ZXJzKSk7Cit9CisjZW5kaWYKKwordm9p
ZCBXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6ZGVsZXRlQ29tcG9zaXRp
bmdMYXllcihDb29yZGluYXRlZExheWVySUQgaWQpCit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpEZWxldGVDb21wb3NpdGluZ0xheWVy
KGlkKSk7Cit9CisKK3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6
OmNyZWF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3Qg
dGlsZUlELCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8m
IHVwZGF0ZUluZm8pCit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVD
b29yZGluYXRvclByb3h5OjpDcmVhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxl
UmVjdCwgdXBkYXRlSW5mbykpOworfQorCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JN
ZXNzYWdlQ2xpZW50Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVy
SUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFN1cmZh
Y2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6VXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQs
IHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKK30KKwordm9pZCBXZWJDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6cmVtb3ZlVGlsZUZvckxheWVyKENvb3JkaW5hdGVk
TGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQpCit7CisgICAgbV93ZWJQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpSZW1vdmVUaWxlRm9yTGF5ZXIo
bGF5ZXJJRCwgdGlsZUlEKSk7Cit9CisKK3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1l
c3NhZ2VDbGllbnQ6OmNyZWF0ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lELCBjb25zdCBXZWJDb29y
ZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlKQoreworICAgIG1fd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Q3JlYXRlVXBkYXRlQXRsYXMoYXRs
YXNJRCwgaGFuZGxlKSk7Cit9CisKK3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3Nh
Z2VDbGllbnQ6OnJlbW92ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lEKQoreworICAgIG1fd2ViUGFn
ZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6UmVtb3ZlVXBkYXRl
QXRsYXMoYXRsYXNJRCkpOworfQorCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNz
YWdlQ2xpZW50OjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBp
bWFnZUlEKQoreworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eTo6Q3JlYXRlSW1hZ2VCYWNraW5nKGltYWdlSUQpKTsKK30KKwordm9pZCBXZWJD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6dXBkYXRlSW1hZ2VCYWNraW5nKENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJm
YWNlOjpIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6Okxh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlVwZGF0ZUltYWdlQmFja2luZyhpbWFnZUlELCBoYW5k
bGUpKTsKK30KKwordm9pZCBXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6
Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdl
SUQpCit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRv
clByb3h5OjpDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKGltYWdlSUQpKTsKK30KKwordm9pZCBX
ZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6cmVtb3ZlSW1hZ2VCYWNraW5n
KENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBtX3dlYlBhZ2UtPnNl
bmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlJlbW92ZUltYWdlQmFja2lu
ZyhpbWFnZUlEKSk7Cit9CisKK3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VD
bGllbnQ6OmRpZFJlbmRlckZyYW1lKGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSwgY29uc3Qg
SW50UmVjdCYgY292ZXJlZFJlY3QpCit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpM
YXllclRyZWVDb29yZGluYXRvclByb3h5OjpEaWRSZW5kZXJGcmFtZShjb250ZW50c1NpemUsIGNv
dmVyZWRSZWN0KSk7Cit9CisKK3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VD
bGllbnQ6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9u
KQoreworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eTo6RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24ocG9zaXRpb24pKTsKK30KKworI2lmIFVTRShH
UkFQSElDU19TVVJGQUNFKQordm9pZCBXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNs
aWVudDo6Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgSW50U2l6ZSYg
Y2FudmFzU2l6ZSwgY29uc3QgR3JhcGhpY3NTdXJmYWNlVG9rZW4mIHRva2VuKQoreworICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Q3JlYXRl
Q2FudmFzKGlkLCBjYW52YXNTaXplLCB0b2tlbikpOworfQorCit2b2lkIFdlYkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBp
ZCwgdWludDMyX3QgZnJvbnRCdWZmZXIpCit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTeW5jQ2FudmFzKGlkLCBmcm9udEJ1ZmZlcikp
OworfQorCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50OjpkZXN0
cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkRlc3Ryb3lDYW52YXMoaWQpKTsK
K30KKyNlbmRpZgorCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50
OjpzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIGNvbnN0IEdy
YXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhY3RpdmVBbmltYXRpb25zKQoreworI2lmIEVOQUJMRShD
U1NfU0hBREVSUykKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFjdGl2ZUFuaW1hdGlvbnMu
YW5pbWF0aW9ucygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWVM
aXN0JiBrZXlmcmFtZXMgPSBhY3RpdmVBbmltYXRpb25zLmFuaW1hdGlvbnMoKS5hdChpKS5rZXlm
cmFtZXMoKTsKKyAgICAgICAgaWYgKGtleWZyYW1lcy5wcm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJv
cGVydHlXZWJraXRGaWx0ZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm9yIChz
aXplX3QgaiA9IDA7IGogPCBrZXlmcmFtZXMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgIGNv
bnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKiBmaWx0ZXJWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0
IEZpbHRlckFuaW1hdGlvblZhbHVlKj4oa2V5ZnJhbWVzLmF0KGkpKTsKKyAgICAgICAgICAgIGNo
ZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoKmZpbHRlclZhbHVlLT52YWx1ZSgpKTsKKyAg
ICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpM
YXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRMYXllckFuaW1hdGlvbnMobGF5ZXJJRCwgYWN0
aXZlQW5pbWF0aW9ucykpOworfQorCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JNZXNz
YWdlQ2xpZW50OjpzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wgaXNMb2NrZWQpCit7CisgICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRBbmlt
YXRpb25zTG9ja2VkKGlzTG9ja2VkKSk7Cit9CisKK3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29yZGlu
YXRvck1lc3NhZ2VDbGllbnQ6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xv
ciYgY29sb3IpCit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29y
ZGluYXRvclByb3h5OjpTZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IpKTsKK30KKworI2lmIEVOQUJM
RShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKK3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRv
ck1lc3NhZ2VDbGllbnQ6OnJlcXVlc3RBbmltYXRpb25GcmFtZSgpCit7CisgICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpSZXF1ZXN0QW5pbWF0
aW9uRnJhbWUoKSk7Cit9CisjZW5kaWYKKwordm9pZCBXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
TWVzc2FnZUNsaWVudDo6aW52b2tlRm9yY2VSZXBhaW50QXN5bmNDYWxsYmFjayh1aW50NjRfdCBj
YWxsYmFja0lEKQoreworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpWb2lkQ2FsbGJhY2soY2FsbGJhY2tJRCkpOworfQorCisjaWYgRU5BQkxFKENTU19TSEFERVJT
KQordm9pZCBXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6Y2hlY2tDdXN0
b21GaWx0ZXJQcm9ncmFtUHJveGllcyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQor
eworICAgIC8vIFdlIG5lZWQgdG8gY3JlYXRlIHRoZSBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJv
eHkgb2JqZWN0cyBiZWZvcmUgd2UgZ2V0IHRvIHNlcmlhbGl6ZSB0aGUKKyAgICAvLyBjdXN0b20g
ZmlsdGVycyB0byB0aGUgb3RoZXIgcHJvY2Vzcy4gVGhhdCdzIGJlY2F1c2UgV2ViQ3VzdG9tRmls
dGVyUHJvZ3JhbVByb3h5IG5lZWRzCisgICAgLy8gdG8gbGluayBiYWNrIHRvIHRoZSBjb29yZGlu
YXRvciwgc28gdGhhdCB3ZSBjYW4gc2VuZCBhIG1lc3NhZ2UgdG8gdGhlIFVJIHByb2Nlc3Mgd2hl
bgorICAgIC8vIHRoZSBwcm9ncmFtIGlzIG5vdCBuZWVkZWQgYW55bW9yZS4KKyAgICAvLyBOb3Rl
IHRoYXQgdGhlIHNlcmlhbGl6YXRpb24gd2lsbCBvbmx5IGhhcHBlbiBhdCBhIGxhdGVyIHRpbWUg
aW4gQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zPjo6ZW5jb2RlLgorICAg
IC8vIEF0IHRoYXQgcG9pbnQgdGhlIHByb2dyYW0gd2lsbCBvbmx5IGJlIHNlcmlhbGl6ZWQgb25j
ZS4gQWxsIHRoZSBvdGhlciB0aW1lcyBpdCB3aWxsIG9ubHkgdXNlIHRoZSBJRCBvZiB0aGUgcHJv
Z3JhbS4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbHRlcnMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBvcGVyYXRpb24gPSBmaWx0ZXJzLmF0KGkp
OworICAgICAgICBpZiAob3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkgIT0gRmlsdGVyT3Bl
cmF0aW9uOjpWQUxJREFURURfQ1VTVE9NKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGNvbnN0IFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbiogY3VzdG9tT3BlcmF0aW9uID0g
c3RhdGljX2Nhc3Q8Y29uc3QgVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKj4ob3BlcmF0
aW9uKTsKKyAgICAgICAgQVNTRVJUKGN1c3RvbU9wZXJhdGlvbi0+dmFsaWRhdGVkUHJvZ3JhbSgp
LT5pc0luaXRpYWxpemVkKCkpOworICAgICAgICBUZXh0dXJlTWFwcGVyUGxhdGZvcm1Db21waWxl
ZFByb2dyYW0qIHByb2dyYW0gPSBjdXN0b21PcGVyYXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKS0+
cGxhdGZvcm1Db21waWxlZFByb2dyYW0oKTsKKworICAgICAgICBSZWZQdHI8V2ViQ3VzdG9tRmls
dGVyUHJvZ3JhbVByb3h5PiBjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHk7CisgICAgICAgIGlmIChw
cm9ncmFtLT5jbGllbnQoKSkKKyAgICAgICAgICAgIGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSA9
IHN0YXRpY19jYXN0PFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSo+KHByb2dyYW0tPmNsaWVu
dCgpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjdXN0b21GaWx0ZXJQcm9ncmFtUHJv
eHkgPSBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHk6OmNyZWF0ZSgpOworICAgICAgICAgICAg
cHJvZ3JhbS0+c2V0Q2xpZW50KGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoIWN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+Y2xpZW50KCkpIHsKKyAg
ICAgICAgICAgIGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+c2V0Q2xpZW50KHRoaXMpOworICAg
ICAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclBy
b3h5OjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+
aWQoKSwgY3VzdG9tT3BlcmF0aW9uLT52YWxpZGF0ZWRQcm9ncmFtKCktPnZhbGlkYXRlZFByb2dy
YW1JbmZvKCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBjbGll
bnQgd2FzIG5vdCBkaXNjb25uZWN0ZWQgdGhlbiB0aGlzIGNvb3JkaW5hdG9yIG11c3QgYmUgdGhl
IGNsaWVudCBmb3IgaXQuCisgICAgICAgICAgICBBU1NFUlQoY3VzdG9tRmlsdGVyUHJvZ3JhbVBy
b3h5LT5jbGllbnQoKSA9PSB0aGlzKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBXZWJD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudDo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJv
Z3JhbVByb3h5KFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSogY3VzdG9tRmlsdGVyUHJvZ3Jh
bVByb3h5KQoreworICAgIC8vIEF0IHRoaXMgdGltZSB0aGUgc2hhZGVyIGlzIG5vdCBuZWVkZWQg
YW55bW9yZSwgc28gd2UgcmVtb3ZlIGl0IGZyb20gb3VyIHNldCBhbmQKKyAgICAvLyBzZW5kIGEg
bWVzc2FnZSB0byB0aGUgb3RoZXIgcHJvY2VzcyB0byBkZWxldGUgaXQuCisgICAgbV9jdXN0b21G
aWx0ZXJQcm9ncmFtcy5yZW1vdmUoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KTsKKyAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlJlbW92ZUN1
c3RvbUZpbHRlclByb2dyYW0oY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpKSk7Cit9CisK
K3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQ6OmRpc2Nvbm5lY3RD
dXN0b21GaWx0ZXJQcm9ncmFtcygpCit7CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgV2ViQ29yZSB3
aWxsIG5vdCBjYWxsIGludG8gdGhpcyBjb29yZGluYXRvciBhbnltb3JlLgorICAgIEhhc2hTZXQ8
V2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5Kj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2N1c3RvbUZp
bHRlclByb2dyYW1zLmJlZ2luKCk7CisgICAgZm9yICg7IGl0ZXIgIT0gbV9jdXN0b21GaWx0ZXJQ
cm9ncmFtcy5lbmQoKTsgKytpdGVyKQorICAgICAgICAoKml0ZXIpLT5zZXRDbGllbnQoMCk7Cit9
CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2Fn
ZUNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kOTFmYWJhMDdkNDc4OTc2ZDk3Y2NjYzMxMGM1ZDMwNzE5NjNkYjhmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQuaApAQCAtMCwwICsx
LDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAx
MDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudF9oCisjZGVmaW5lIFdlYkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3JNZXNzYWdlQ2xpZW50X2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKKworI2luY2x1ZGUgIkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDbGllbnQuaCIKKworI2lmIEVO
QUJMRShDU1NfU0hBREVSUykKKyNpbmNsdWRlICJXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHku
aCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZTsKKworY2xh
c3MgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQgOiBwdWJsaWMgUmVmQ291
bnRlZDxXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudD4KKyAgICAsIHB1Ymxp
YyBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudAorI2lmIEVOQUJMRShDU1NfU0hB
REVSUykKKyAgICAsIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudAorI2VuZGlmCit7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3Nh
Z2VDbGllbnQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVudD4gY3JlYXRl
KFdlYlBhZ2UqKTsKKworICAgIH5XZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yTWVzc2FnZUNsaWVu
dCgpOworCisgICAgLy8gQ29tcG9zaXRpbmdDb29yZGluYXRvck1lc3NhZ2VDbGllbnQKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKENvb3Jk
aW5hdGVkTGF5ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5
ZXJJRCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKSBPVkVSUklERTsKKyNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdmlydHVhbCB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJG
aWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9u
cyYpIE9WRVJSSURFOworI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUNvbXBvc2l0aW5n
TGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBj
cmVhdGVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklE
LCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBTdXJmYWNl
VXBkYXRlSW5mbyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlRm9yTGF5
ZXIoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQpIE9WRVJSSURFOworCisgICAg
dmlydHVhbCB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lELCBjb25zdCBXZWJDb29y
ZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5n
KENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lk
IGRpZFJlbmRlckZyYW1lKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRzU2l6ZSwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgY292ZXJlZFJlY3QpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBw
b3NpdGlvbikgT1ZFUlJJREU7CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuJikgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIHN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJf
dCBmcm9udEJ1ZmZlcikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lDYW52YXMo
Q29vcmRpbmF0ZWRMYXllcklEKSBPVkVSUklERTsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lk
IHNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJBbmltYXRpb25zJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldEFu
aW1hdGlvbnNMb2NrZWQoYm9vbCkgT1ZFUlJJREU7CisKKyAgICB2b2lkIHNldEJhY2tncm91bmRD
b2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYpOworCisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFU
SU9OX0ZSQU1FKQorICAgIHZvaWQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk7CisjZW5kaWYKKyAg
ICB2b2lkIGludm9rZUZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJ
RCk7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvck1l
c3NhZ2VDbGllbnQoV2ViUGFnZSopOworCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgIC8v
IFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudAorICAgIHZvaWQgcmVtb3ZlQ3VzdG9t
RmlsdGVyUHJvZ3JhbVByb3h5KFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSopOworCisgICAg
dm9pZCBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKGNvbnN0IFdlYkNvcmU6OkZpbHRl
ck9wZXJhdGlvbnMmIGZpbHRlcnMpIE9WRVJSSURFOworICAgIHZvaWQgZGlzY29ubmVjdEN1c3Rv
bUZpbHRlclByb2dyYW1zKCk7CisjZW5kaWYKKworICAgIFdlYlBhZ2UqIG1fd2ViUGFnZTsKKwor
I2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICBIYXNoU2V0PFdlYkN1c3RvbUZpbHRlclByb2dy
YW1Qcm94eSo+IG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXM7CisjZW5kaWYKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYKKworI2VuZGlmIC8vIFdlYkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3JNZXNzYWdlQ2xpZW50X2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178863</attachid>
            <date>2012-12-11 13:29:07 -0800</date>
            <delta_ts>2013-01-11 02:44:47 -0800</delta_ts>
            <desc>Rebase after r137293</desc>
            <filename>bug-104360-20121212062631.patch</filename>
            <type>text/plain</type>
            <size>114121</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3MzQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNjIzMjg0YmExNGZhNWZl
MzhjYzQyY2ZhNmJiNTZkOWEyZjNjNDM2MC4uZTdjMjM5NzA0MTMyMTkxMmY1Yzg2YWQzNTFiZWM5
MWE4NThjODhmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4MyBAQAorMjAxMi0xMi0wNyAgR3dh
bmcgWW9vbiBId2FuZyAgPHJ5dW1pZWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgQ29vcmRp
bmF0ZWQgR3JhcGhpY3M6IFNlcGFyYXRlIExheWVyVHJlZUNvb3JkaW5hdG9yIGludG8gTGF5ZXJU
cmVlQ29vcmRpbmF0b3IgYW5kIENvbXBvc2l0aW5nQ29vcmRpbmF0b3IKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDM2MAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludGVybmFsIFJldmlldyBieSBIdWFu
ZyBEb25nc3VuZyBhbmQgSmFlIEh5dW4gUGFyay4KKworICAgICAgICBUaGUgTGF5ZXJUcmVlQ29v
cmRpbmF0b3IgaGFzIHRvbyBtYW55IHJlc3BvbnNpYmlsaXRpZXMuIEl0IGltcGxlbWVudHMKKyAg
ICAgICAgTGF5ZXJUcmVlSG9zdCwgR3JhcGhpY3NMYXllckNsaWVudCwgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyQ2xpZW50LAorICAgICAgICBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRp
bmF0b3IsIFVwZGF0ZUF0bGFzQ2xpZW50LCBHcmFwaGljc0xheWVyRmFjdG9yeQorICAgICAgICBh
bmQgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5Q2xpZW50LgorCisgICAgICAgIFRoaXMgcmVm
YWN0b3JpbmcgcmVkdWNlcyB0aGUgcmVzcG9uc2liaWxpdGllcyBvZiBMYXllclRyZWVDb29yZGlu
YXRvci4KKworICAgICAgICBCeSBjcmVhdGluZyBhIG5ldyBjbGFzcyBjYWxsZWQgQ29tcG9zaXRp
bmdDb29yZGluYXRvciwgd2hpY2ggdGFrZXMgdGhlCisgICAgICAgIHJlc3BvbnNpYmlsaXR5IG9m
IHNjaGVkdWxpbmcgY29tcG9zaXRpbmcgdGFza3MgaW4gV2ViUHJvY2VzcywKKyAgICAgICAgTGF5
ZXJUcmVlQ29vcmRpbmF0b3IgYWN0cyBsaWtlIGEgc2ltcGxlIExheWVyVHJlZUhvc3QuCisKKyAg
ICAgICAgQnkgZXh0cmFjdGluZyBpbnRlcmZhY2VzIGRlYWxpbmcgd2l0aCBMYXllclRyZWVDb29y
ZGluYXRvclByb3h5IHRvCisgICAgICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kcywg
Q29tcG9zaXRpbmdDb29yZGluYXRvciBpcyBkZWNvdXBsZWQgZnJvbQorICAgICAgICBJUEMgaGFu
ZGxpbmcuCisKKyAgICAgICAgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvckNvbW1hbmRzIGltcGxl
bWVudHMgSVBDIGhhbmRsaW5nIGZvcgorICAgICAgICBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yIGFu
ZCBMYXllclRyZWVDb29yZGluYXRvci4KKyAgICAgICAgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVBy
b3h5Q2xpZW50IGlzIHJlc3BvbnNpYmxlIGZvciBJUEMgaGFuZGxpbmcsIHNvCisgICAgICAgIFdl
YkNvbXBvc2l0aW5nQ29vcmRpYW50b3JNZXNzYWdlQ2xpZW50IGltcGxlbWVudHMgdGhpcyBpbnRl
cmZhY2UsIHRvby4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBubyBjaGFuZ2UgaW4g
YmVoYXZpb3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBUYXJnZXQu
cHJpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
bXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICBBZGRlZC4gSXQgdGFrZXMgcmVzcG9u
c2liaWxpeSBmb3Igc2NoZWR1bGluZyBjb21wb3NpdGluZyB0YXNrcyBhbmQKKyAgICAgICAgbWFu
YWdpbmcgcmVzb3VyY2VzLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6Q29t
cG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRp
bmdDb29yZGluYXRvcjo6fkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IpOgorICAgICAgICAoV2ViS2l0
OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yKToKKyAgICAg
ICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxp
bmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2No
ZWR1bGVMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRv
cjo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6
OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QpOgorICAgICAgICAo
V2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpmb3JjZVJlcGFpbnQpOgorICAgICAgICAo
V2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzaXplRGlkQ2hhbmdlKToKKyAgICAgICAg
KFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2Vz
KToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6aW5pdGlhbGl6ZVJv
b3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpzeW5jTGF5ZXJTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0
aW5nQ29vcmRpbmF0b3I6OnN5bmNMYXllckNoaWxkcmVuKToKKyAgICAgICAgKFdlYktpdDo6Q29t
cG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlQ2FudmFzKToKKyAgICAgICAgKFdlYktpdDo6Q29t
cG9zaXRpbmdDb29yZGluYXRvcjo6c3luY0NhbnZhcyk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OmRlc3Ryb3lDYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yOjpzeW5jTGF5ZXJGaWx0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6ZGV0YWNoTGF5ZXIpOgorICAgICAgICAoV2ViS2l0Ojp1
cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKToKKyAgICAgICAgKFdlYktpdDo6dXBkYXRl
T2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpzeW5jRml4ZWRMYXllcnMpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3Np
dGluZ0Nvb3JkaW5hdG9yOjpsb2NrQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OnVubG9ja0FuaW1hdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCk6CisgICAg
ICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnN5bmNEaXNwbGF5U3RhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpsYXllckZsdXNoVGltZXJG
aXJlZCk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZVBh
Z2VPdmVybGF5TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
OjpkZXN0cm95UGFnZU92ZXJsYXlMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktp
dDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0UGFnZU92ZXJsYXlPcGFjaXR5KToKKyAgICAg
ICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlSW1hZ2VCYWNraW5nSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVJ
bWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp1
cGRhdGVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9z
aXRpbmdDb29yZGluYXRvcjo6cmVtb3ZlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYktpdDo6
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcyk6
CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6Om5vdGlmeUFuaW1hdGlv
blN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpub3Rp
ZnlGbHVzaFJlcXVpcmVkKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRv
cjo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0
b3I6OmNyZWF0ZUdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29y
ZGluYXRvcjo6dXBkYXRlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OnJlbW92ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpjcmVhdGVVcGRhdGVBdGxhcyk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OnJlbW92ZVVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRp
bmdDb29yZGluYXRvcjo6dmlzaWJsZUNvbnRlbnRzUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OkNv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNldExheWVyQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJL
aXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNldFZpc2libGVDb250ZW50c1JlY3QpOgorICAg
ICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZW5kZXJOZXh0RnJhbWUpOgor
ICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpsYXllclRyZWVUaWxlVXBk
YXRlc0FsbG93ZWQpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpw
dXJnZUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpiZWdpbkNvbnRlbnRVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOjpzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMpOgorICAgICAgICAoV2Vi
S2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJG
aXJlZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29tcG9zaXRpbmdDb29yZGluYXRvci5oOgorICAgICAgICBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKENvbXBvc2l0aW5nQ29vcmRpbmF0b3Ip
OgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpwYXVzZVJlbmRlcmlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJlc3VtZVJlbmRl
cmluZyk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJvb3RHcmFw
aGljc0xheWVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKENvbXBvc2l0aW5nQ29vcmRpbmF0b3JDbGllbnQpOgorICAgICAgICBU
aGlzIGludGVyZmFjZSBwcm92aWRlcyBhIHdheSB0byB1c2UgTGF5ZXJUcmVlQ29vcmRpbmF0b3Ig
ZnJvbQorICAgICAgICBDb21wb3NpdGluZyBDb29yZGluYXRvci4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yQ29t
bWFuZHMuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoQ29tcG9zaXRpbmdD
b29yZGluYXRvckNvbW1hbmRzKToKKyAgICAgICAgVGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMgYSB3
YXkgdG8gc2VuZCBtZXNzYWdlcyB0byByZW5kZXJlci4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6On5Db29yZGluYXRlZExh
eWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKToKKyAgICAgICAg
KFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZUxheWVyRmx1c2gpOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFJvb3RDb21wb3Np
dGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpp
bnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpz
ZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50KToKKyAgICAgICAgKFdlYktpdDo6
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzaXplRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktp
dDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaWRJbnN0YWxsUGFnZU92ZXJsYXkpOgorICAg
ICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZFVuaW5zdGFsbFBhZ2VP
dmVybGF5KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRQ
YWdlT3ZlcmxheU5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6c2V0UGFnZU92ZXJsYXlPcGFjaXR5KToKKyAgICAgICAgKFdlYktpdDo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwYXVzZVJlbmRlcmluZyk6CisgICAgICAgIChXZWJLaXQ6
OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVzdW1lUmVuZGVyaW5nKToKKyAgICAgICAgKFdl
YktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp2aWV3U2l6ZSk6CisgICAgICAgIChXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bGF5b3V0SWZOZWVkZWQpOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmlzT3BhcXVlQ29udGVudHMpOgorICAg
ICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZFBlcmZvcm1TY2hlZHVs
ZWRMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpwYWludE92ZXJsYXlDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6aGFzUGFnZU92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OnNldFZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2Vi
S2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KToKKyAg
ICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZUFuaW1hdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVuZGVyTmV4
dEZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwdXJn
ZUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OnNldEJhY2tncm91bmRDb2xvcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Lmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29tcG9zaXRpbmdDb29y
ZGluYXRvckNvbW1hbmRzLmNwcDoKKyAgICAgICAgQWRkZWQuIE1hbmFnZXMgc2VuZHMgYWN0dWFs
IElQQyBtZXNzYWdlcyBhbmQgbWFuYWdlcworICAgICAgICBXZWJDdXN0b21GaWx0ZXJQcm9ncmFt
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yQ29tbWFuZHM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3JDb21tYW5kczo6fldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kczo6V2Vi
Q29tcG9zaXRpbmdDb29yZGluYXRvckNvbW1hbmRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29t
cG9zaXRpbmdDb29yZGluYXRvckNvbW1hbmRzOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kczo6c2V0Q29t
cG9zaXRpbmdMYXllclN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpbmdDb29y
ZGluYXRvckNvbW1hbmRzOjpzZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4pOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yQ29tbWFuZHM6OnNldENvbXBvc2l0aW5n
TGF5ZXJGaWx0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpbmdDb29yZGluYXRv
ckNvbW1hbmRzOjpkZWxldGVDb21wb3NpdGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29tcG9zaXRpbmdDb29yZGluYXRvckNvbW1hbmRzOjpjcmVhdGVUaWxlRm9yTGF5ZXIpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yQ29tbWFuZHM6OnVwZGF0ZVRp
bGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JD
b21tYW5kczo6cmVtb3ZlVGlsZUZvckxheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9z
aXRpbmdDb29yZGluYXRvckNvbW1hbmRzOjpjcmVhdGVVcGRhdGVBdGxhcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kczo6cmVtb3ZlVXBkYXRlQXRs
YXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yQ29tbWFuZHM6
OmNyZWF0ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3JDb21tYW5kczo6dXBkYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29tcG9zaXRpbmdDb29yZGluYXRvckNvbW1hbmRzOjpjbGVhckltYWdlQmFja2luZ0NvbnRl
bnRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpbmdDb29yZGluYXRvckNvbW1hbmRz
OjpyZW1vdmVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yQ29tbWFuZHM6OmRpZFJlbmRlckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29tcG9zaXRpbmdDb29yZGluYXRvckNvbW1hbmRzOjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kczo6Y3Jl
YXRlQ2FudmFzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpbmdDb29yZGluYXRvckNv
bW1hbmRzOjpzeW5jQ2FudmFzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpbmdDb29y
ZGluYXRvckNvbW1hbmRzOjpkZXN0cm95Q2FudmFzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29t
cG9zaXRpbmdDb29yZGluYXRvckNvbW1hbmRzOjpzZXRMYXllckFuaW1hdGlvbnMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yQ29tbWFuZHM6OnNldEFuaW1hdGlv
bnNMb2NrZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yQ29t
bWFuZHM6OnNldEJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0
aW5nQ29vcmRpbmF0b3JDb21tYW5kczo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29tcG9zaXRpbmdDb29yZGluYXRvckNvbW1hbmRzOjppbnZva2VGb3JjZVJl
cGFpbnRBc3luY0NhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpbmdDb29y
ZGluYXRvckNvbW1hbmRzOjpjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpbmdDb29yZGluYXRvckNvbW1hbmRzOjpyZW1vdmVDdXN0
b21GaWx0ZXJQcm9ncmFtUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yQ29tbWFuZHM6OmRpc2Nvbm5lY3RDdXN0b21GaWx0ZXJQcm9ncmFtcyk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29tcG9zaXRp
bmdDb29yZGluYXRvckNvbW1hbmRzLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kcyk6CisKIDIwMTItMTItMTEgIEd3
YW5nIFlvb24gSHdhbmcgIDxyeXVtaWVsQGNvbXBhbnkxMDAubmV0PgogCiAgICAgICAgIENvb3Jk
aW5hdGVkIEdyYXBoaWNzOiBSZW5hbWUgTGF5ZXJUcmVlQ29vcmRpbmF0b3IgdG8gQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4
dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CmluZGV4IDI0M2Q5MGM1ZWYyNDU3ZWRk
YjU0NzU0ZTVjYTljOTM4NTA3NWU5ZDkuLjE1NjFkMmE4MWI0MTg1NjAzOGM3YTIzMDk5OWNkZWU1
ODk5Y2NlMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKyBi
L1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC00OTksMTEgKzQ5OSwxMyBAQCBzZXQo
V2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVuZG9TdGVwLmNwcAog
CiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRv
ci5jcHAKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3Np
dGluZ0Nvb3JkaW5hdG9yLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKICAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuY3Bw
CiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL1VwZGF0ZUF0bGFzLmNwcAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL1dlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kcy5jcHAKICkKIAogc2V0KFdl
YktpdDJfTUVTU0FHRVNfSU5fRklMRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1Rhcmdl
dC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IDU4MzM4OTZhODExMDBkYzQ0
YWI4MTAxYTAxMzc0YWM0OTRlY2ZlNTIuLmU1YmYyYjc0ZjgyMmJhOWFkNTU1NDNkMDAzMWE4NzE2
MzM4ZDFkNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291
cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtMzcyLDExICszNzIsMTUgQEAgSEVBREVSUyArPSBc
CiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5oIFwKICAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5oIFwKKyAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmggXAorICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0
b3JDbGllbnQuaCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29tcG9zaXRpbmdDb29yZGluYXRvckNvbW1hbmRzLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIFwKICAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFj
a2luZy5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZExheWVyVHJlZUhvc3QuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL1VwZGF0ZUF0bGFzLmggXAorICAgIFdlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kcy5o
IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVGFwSGlnaGxpZ2h0Q29udHJvbGxlci5oIFwKICAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYkNvbnRleHRNZW51LmggXApAQCAtNzU4LDExICs3NjIsMTMgQEAgU09VUkNFUyArPSBc
CiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAgXAogICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxvY2F0b3IuY3BwIFwKKyAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcCBc
CiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwIFwKICAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUu
Y3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVB
dGxhcy5jcHAgXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1dl
YkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kcy5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9UYXBIaWdobGlnaHRDb250cm9sbGVyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L0xheWVyVHJlZUhvc3QuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXku
Y3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29y
ZGluYXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTQzMTA2MWUxNjBiNTcxYTU4MGRhMDM1NDFjMzBiNjNk
OTY4YjA1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCkBAIC0w
LDAgKzEsNjg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21w
YW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiQ29t
cG9zaXRpbmdDb29yZGluYXRvci5oIgorCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8u
aCIKKyNpbmNsdWRlICJTdXJmYWNlVXBkYXRlSW5mby5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRnJh
bWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
R3JhcGhpY3NTdXJmYWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNr
aW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oPgorI2luY2x1
ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyNp
bmNsdWRlICJDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmgiCisjaW5jbHVkZSAiVmFsaWRh
dGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgiCisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzT3duUHRyPENvbXBvc2l0aW5nQ29v
cmRpbmF0b3I+IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZShQYWdlKiBwYWdlLCBDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yQ2xpZW50KiBjbGllbnQsIENvbXBvc2l0aW5nQ29vcmRpbmF0b3JD
b21tYW5kcyogY29tbWFuZHMpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yKHBhZ2UsIGNsaWVudCwgY29tbWFuZHMpKTsKK30KKworQ29tcG9zaXRpbmdD
b29yZGluYXRvcjo6fkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IoKQoreworICAgIC8vIFByZXZlbnQg
c2V0Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KDApIC0+IGRldGFjaExheWVyKCkgZnJv
bSBtb2RpZnlpbmcgdGhlIHNldCB3aGlsZSB3ZSBpdGVyYXRlIGl0LgorICAgIEhhc2hTZXQ8Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyKj4gcmVnaXN0ZXJlZExheWVyczsKKyAgICByZWdpc3RlcmVk
TGF5ZXJzLnN3YXAobV9yZWdpc3RlcmVkTGF5ZXJzKTsKKworICAgIEhhc2hTZXQ8Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGVuZCA9IHJlZ2lzdGVyZWRMYXllcnMuZW5kKCk7
CisgICAgZm9yIChIYXNoU2V0PENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBp
dCA9IHJlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAo
Kml0KS0+c2V0Q29vcmRpbmF0b3IoMCk7Cit9CisKK0NvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNv
bXBvc2l0aW5nQ29vcmRpbmF0b3IoUGFnZSogcGFnZSwgQ29tcG9zaXRpbmdDb29yZGluYXRvckNs
aWVudCogY2xpZW50LCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yQ29tbWFuZHMqIGNvbW1hbmRzKQor
ICAgIDogbV9wYWdlKHBhZ2UpCisgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX2NvbW1h
bmRzKGNvbW1hbmRzKQorICAgICwgbV9pc1ZhbGlkKHRydWUpCisgICAgLCBtX2lzUHVyZ2luZyhm
YWxzZSkKKyAgICAsIG1fd2FpdGluZ0ZvclJlbmRlcmVyKHRydWUpCisgICAgLCBtX2lzU3VzcGVu
ZGVkKGZhbHNlKQorICAgICwgbV9jb250ZW50c1NjYWxlKDEpCisgICAgLCBtX3Nob3VsZFNlbmRT
Y3JvbGxQb3NpdGlvblVwZGF0ZSh0cnVlKQorICAgICwgbV9zaG91bGRTeW5jRnJhbWUoZmFsc2Up
CisgICAgLCBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcihmYWxzZSkKKyAgICAs
IG1fbGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpsYXllckZs
dXNoVGltZXJGaXJlZCkKKyAgICAsIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyKHRoaXMs
ICZDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJGaXJl
ZCkKKyAgICAsIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKHRydWUpCisgICAgLCBtX2Fu
aW1hdGlvbnNMb2NrZWQoZmFsc2UpCit7CisgICAgLy8gQ3JlYXRlIGEgcm9vdCBsYXllci4KKyAg
ICBtX3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzLCB0aGlzKTsKKyAgICBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGNvb3JkaW5hdGVkUm9vdExheWVyID0gdG9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpOworICAgIGNvb3JkaW5hdGVkUm9v
dExheWVyLT5zZXRSb290TGF5ZXIodHJ1ZSk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fcm9vdExh
eWVyLT5zZXROYW1lKCJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yIHJvb3QgbGF5ZXIiKTsKKyNlbmRp
ZgorICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworCisgICAgSW50U2l6
ZSB2aWV3U2l6ZShtX2NsaWVudC0+dmlld1NpemUoKSk7CisgICAgbV9yb290TGF5ZXItPnNldFNp
emUodmlld1NpemUpOworCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyID0gR3JhcGhp
Y3NMYXllcjo6Y3JlYXRlKHRoaXMsIHRoaXMpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX25vbkNv
bXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5hbWUoIkNvbXBvc2l0aW5nQ29vcmRpbmF0b3Igbm9u
LWNvbXBvc2l0ZWQgY29udGVudCIpOworI2VuZGlmCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyLT5zZXRTaXplKHZpZXdTaXplKTsKKworICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZCht
X25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpOworCisgICAgaWYgKG1fY2xpZW50LT5o
YXNQYWdlT3ZlcmxheSgpKQorICAgICAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CisKKyAg
ICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCBsYXllckZsdXNoaW5nRW5hYmxl
ZCkKK3sKKyAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPT0gbGF5ZXJGbHVz
aGluZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGF5ZXJGbHVzaFNjaGVkdWxp
bmdFbmFibGVkID0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQ7CisKKyAgICBpZiAobV9sYXllckZsdXNo
U2NoZWR1bGluZ0VuYWJsZWQpIHsKKyAgICAgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworfQor
Cit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNjaGVkdWxlTGF5ZXJGbHVzaCgpCit7Cisg
ICAgaWYgKCFtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFtX2xheWVyRmx1c2hUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2xheWVy
Rmx1c2hUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGlu
YXRvcjo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKQoreworICAgIG1fbGF5ZXJGbHVzaFRpbWVy
LnN0b3AoKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzZXRSb290Q29tcG9z
aXRpbmdMYXllcihHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQoreworICAgIG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKyAgICBtX25vbkNvbXBv
c2l0ZWRDb250ZW50TGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKG1fY2xpZW50LT5pc09wYXF1ZUNv
bnRlbnRzKCkpOworCisgICAgLy8gQWRkIHRoZSBhY2NlbGVyYXRlZCBsYXllciB0cmVlIGhpZXJh
cmNoeS4KKyAgICBpZiAoZ3JhcGhpY3NMYXllcikKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29u
dGVudExheWVyLT5hZGRDaGlsZChncmFwaGljc0xheWVyKTsKK30KKwordm9pZCBDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjppbnZhbGlkYXRlKCkKK3sKKyAgICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVz
aCgpOworCisgICAgQVNTRVJUKG1faXNWYWxpZCk7CisgICAgbV9yb290TGF5ZXIgPSBudWxscHRy
OworICAgIG1faXNWYWxpZCA9IGZhbHNlOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0
b3I6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwor
CisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVy
LT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisKKyAgICBzY2hlZHVsZUxheWVyRmx1c2go
KTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpmb3JjZVJlcGFpbnQoKQorewor
ICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBydW5uaW5nIGxheW91dCB0ZXN0cy4gU2luY2Ug
aW4gdGhpcyBjYXNlIHdlIGFyZSBub3Qgd2FpdGluZyBmb3IgYSByZW5kZXJlciB0byByZXBseSBu
aWNlbHkuCisgICAgLy8gSW5zdGVhZCB3ZSBhcmUganVzdCB0cmlnZ2VyaW5nIGZvcmNlUmVwYWlu
dC4gQnV0IHdlIHN0aWxsIHdhbnQgdG8gaGF2ZSB0aGUgc2NyaXB0ZWQgYW5pbWF0aW9uIGNhbGxi
YWNrcyBiZWluZyBleGVjdXRlZC4KKyAgICBzeW5jRGlzcGxheVN0YXRlKCk7CisKKyAgICAvLyBX
ZSBuZWVkIHRvIHNjaGVkdWxlIGFub3RoZXIgZmx1c2gsIG90aGVyd2lzZSB0aGUgZm9yY2VkIHBh
aW50IG1pZ2h0IGNhbmNlbCBhIGxhdGVyIGV4cGVjdGVkIGZsdXNoLgorICAgIC8vIFRoaXMgaXMg
YWxpZ25lZCB3aXRoIExheWVyVHJlZUhvc3RDQS4KKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsK
KyAgICBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOjpzaXplRGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIG5ld1NpemUpCit7CisgICAg
aWYgKG1fcm9vdExheWVyLT5zaXplKCkgPT0gbmV3U2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9yb290TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAgICAvLyBJZiB0aGUgbmV3U2l6
ZSBleHBvc2VzIG5ldyBhcmVhcyBvZiB0aGUgbm9uLWNvbXBvc2l0ZWQgY29udGVudCBhIHNldE5l
ZWRzRGlzcGxheSBpcyBuZWVkZWQKKyAgICAvLyBmb3IgdGhvc2UgbmV3bHkgZXhwb3NlZCBhcmVh
cy4KKyAgICBGbG9hdFNpemUgb2xkU2l6ZSA9IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+
c2l6ZSgpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShuZXdTaXpl
KTsKKworICAgIGlmIChuZXdTaXplLndpZHRoKCkgPiBvbGRTaXplLndpZHRoKCkpIHsKKyAgICAg
ICAgZmxvYXQgaGVpZ2h0ID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5ld1NpemUuaGVp
Z2h0KCkpLCBvbGRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KG9sZFNpemUud2lkdGgoKSwg
MCwgbmV3U2l6ZS53aWR0aCgpIC0gb2xkU2l6ZS53aWR0aCgpLCBoZWlnaHQpKTsKKyAgICB9CisK
KyAgICBpZiAobmV3U2l6ZS5oZWlnaHQoKSA+IG9sZFNpemUuaGVpZ2h0KCkpCisgICAgICAgIG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVj
dCgwLCBvbGRTaXplLmhlaWdodCgpLCBuZXdTaXplLndpZHRoKCksIG5ld1NpemUuaGVpZ2h0KCkg
LSBvbGRTaXplLmhlaWdodCgpKSk7CisKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQorICAg
ICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAgICBzY2hlZHVs
ZUxheWVyRmx1c2goKTsKK30KKworYm9vbCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpmbHVzaFBl
bmRpbmdMYXllckNoYW5nZXMoKQoreworICAgIGlmIChtX3dhaXRpbmdGb3JSZW5kZXJlcikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVy
SWZOZWVkZWQoKTsKKworICAgIG1fcm9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5mbHVzaENv
bXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgaWYgKG1fcGFnZU92ZXJsYXlM
YXllcikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVG
b3JUaGlzTGF5ZXJPbmx5KCk7CisKKyAgICBib29sIGRpZFN5bmMgPSBtX3BhZ2UtPm1haW5GcmFt
ZSgpLT52aWV3KCktPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOwor
CisgICAgZmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2RldGFjaGVkTGF5ZXJzLnNpemUoKTsgKytpKQorICAgICAgICBtX2Nv
bW1hbmRzLT5kZWxldGVDb21wb3NpdGluZ0xheWVyKG1fZGV0YWNoZWRMYXllcnNbaV0pOworICAg
IG1fZGV0YWNoZWRMYXllcnMuY2xlYXIoKTsKKworICAgIGlmIChtX3Nob3VsZFN5bmNGcmFtZSkg
eworICAgICAgICBkaWRTeW5jID0gdHJ1ZTsKKworICAgICAgICBJbnRTaXplIGNvbnRlbnRzU2l6
ZSA9IHJvdW5kZWRJbnRTaXplKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2l6ZSgpKTsK
KyAgICAgICAgSW50UmVjdCBjb3ZlcmVkUmVjdCA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
KG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSktPmNvdmVyUmVjdCgpOworICAgICAg
ICBtX2NvbW1hbmRzLT5kaWRSZW5kZXJGcmFtZShjb250ZW50c1NpemUsIGNvdmVyZWRSZWN0KTsK
KyAgICAgICAgbV93YWl0aW5nRm9yUmVuZGVyZXIgPSB0cnVlOworICAgICAgICBtX3Nob3VsZFN5
bmNGcmFtZSA9IGZhbHNlOworICAgIH0gZWxzZQorICAgICAgICB1bmxvY2tBbmltYXRpb25zKCk7
CisKKyAgICByZXR1cm4gZGlkU3luYzsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
Ojppbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCgpCit7CisgICAgaWYgKG1f
ZGlkSW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2NvbW1hbmRzLT5zZXRSb290Q29tcG9zaXRpbmdMYXllcih0b0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmlkKCkpOworICAgIG1fZGlkSW5pdGlhbGl6ZVJv
b3RDb21wb3NpdGluZ0xheWVyID0gdHJ1ZTsKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7
Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c3luY0xheWVyU3RhdGUoQ29vcmRp
bmF0ZWRMYXllcklEIGlkLCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYgaW5mbykKK3sKKyAg
ICBpZiAobV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUpIHsKKyAgICAgICAgbV9jb21t
YW5kcy0+ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24obV92aXNpYmxlQ29udGVudHNSZWN0LmxvY2F0
aW9uKCkpOworICAgICAgICBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSA9IGZhbHNl
OworICAgIH0KKworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX2NvbW1hbmRz
LT5zZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoaWQsIGluZm8pOworfQorCit2b2lkIENvbXBvc2l0
aW5nQ29vcmRpbmF0b3I6OnN5bmNMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwg
Y29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGNoaWxkcmVuKQoreworICAgIG1fc2hv
dWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX2NvbW1hbmRzLT5zZXRDb21wb3NpdGluZ0xheWVy
Q2hpbGRyZW4oaWQsIGNoaWxkcmVuKTsKK30KKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQor
dm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXll
cklEIGlkLCBQbGF0Zm9ybUxheWVyKiBjYW52YXNQbGF0Zm9ybUxheWVyKQoreworICAgIG1fc2hv
dWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBHcmFwaGljc1N1cmZhY2VUb2tlbiB0b2tlbiA9IGNh
bnZhc1BsYXRmb3JtTGF5ZXItPmdyYXBoaWNzU3VyZmFjZVRva2VuKCk7CisgICAgSW50U2l6ZSBj
YW52YXNTaXplID0gY2FudmFzUGxhdGZvcm1MYXllci0+cGxhdGZvcm1MYXllclNpemUoKTsKKyAg
ICBtX2NvbW1hbmRzLT5jcmVhdGVDYW52YXMoaWQsIGNhbnZhc1NpemUsIHRva2VuKTsKK30KKwor
dm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJ
RCBpZCwgUGxhdGZvcm1MYXllciogY2FudmFzUGxhdGZvcm1MYXllcikKK3sKKyAgICBtX3Nob3Vs
ZFN5bmNGcmFtZSA9IHRydWU7CisgICAgdWludDMyX3QgZnJvbnRCdWZmZXIgPSBjYW52YXNQbGF0
Zm9ybUxheWVyLT5jb3B5VG9HcmFwaGljc1N1cmZhY2UoKTsKKyAgICBtX2NvbW1hbmRzLT5zeW5j
Q2FudmFzKGlkLCBmcm9udEJ1ZmZlcik7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRv
cjo6ZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQpCit7CisgICAgaWYgKG1faXNQ
dXJnaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7
CisgICAgbV9jb21tYW5kcy0+ZGVzdHJveUNhbnZhcyhpZCk7Cit9CisjZW5kaWYKKworI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c3luY0xheWVy
RmlsdGVycyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZp
bHRlcnMpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fY29tbWFuZHMt
PnNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKGlkLCBmaWx0ZXJzKTsKK30KKyNlbmRpZgorCit2
b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRldGFjaExheWVyKENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllciogbGF5ZXIpCit7CisgICAgbV9yZWdpc3RlcmVkTGF5ZXJzLnJlbW92ZShsYXllcik7
CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fZGV0YWNoZWRMYXllcnMuYXBw
ZW5kKGxheWVyLT5pZCgpKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKworc3RhdGlj
IHZvaWQgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yU2VsZihSZW5kZXJMYXllciogcmVuZGVy
TGF5ZXIpCit7CisgICAgLy8gVGhlc2UgY29uZGl0aW9ucyBtdXN0IG1hdGNoIHRoZSBjb25kaXRp
b25zIGluIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0
aW9uLgorICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IHJlbmRlckxheWVyLT5iYWNr
aW5nKCk7CisgICAgaWYgKCFiYWNraW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKKyAgICBpZiAo
IXN0eWxlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXJlbmRlckxheWVyLT5yZW5kZXJl
cigpLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+
c3R5bGUoKS0+cG9zaXRpb24oKSAhPSBGaXhlZFBvc2l0aW9uKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIXJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5jb250YWluZXIoKS0+aXNSZW5kZXJW
aWV3KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcmVuZGVyTGF5ZXItPmlzU3RhY2tp
bmdDb250ZXh0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllciogZ3JhcGhpY3NMYXllciA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGJhY2tpbmct
PmdyYXBoaWNzTGF5ZXIoKSk7CisgICAgZ3JhcGhpY3NMYXllci0+c2V0Rml4ZWRUb1ZpZXdwb3J0
KHRydWUpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXll
cihSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIpCit7CisgICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdw
b3J0Rm9yU2VsZihyZW5kZXJMYXllcik7CisKKyAgICBpZiAocmVuZGVyTGF5ZXItPmZpcnN0Q2hp
bGQoKSkKKyAgICAgICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIocmVuZGVyTGF5
ZXItPmZpcnN0Q2hpbGQoKSk7CisgICAgaWYgKHJlbmRlckxheWVyLT5uZXh0U2libGluZygpKQor
ICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyZW5kZXJMYXllci0+bmV4
dFNpYmxpbmcoKSk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c3luY0ZpeGVk
TGF5ZXJzKCkKK3sKKyAgICBpZiAoIW1fcGFnZS0+c2V0dGluZ3MoKSB8fCAhbV9wYWdlLT5zZXR0
aW5ncygpLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkt
Pmhhc1ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFJlbmRlckxheWVyKiByb290UmVuZGVyTGF5ZXIgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT5jb250
ZW50UmVuZGVyZXIoKS0+Y29tcG9zaXRvcigpLT5yb290UmVuZGVyTGF5ZXIoKTsKKyAgICBBU1NF
UlQocm9vdFJlbmRlckxheWVyKTsKKyAgICBpZiAocm9vdFJlbmRlckxheWVyLT5maXJzdENoaWxk
KCkpCisgICAgICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJvb3RSZW5kZXJM
YXllci0+Zmlyc3RDaGlsZCgpKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjps
b2NrQW5pbWF0aW9ucygpCit7CisgICAgbV9hbmltYXRpb25zTG9ja2VkID0gdHJ1ZTsKKyAgICBt
X2NvbW1hbmRzLT5zZXRBbmltYXRpb25zTG9ja2VkKHRydWUpOworfQorCit2b2lkIENvbXBvc2l0
aW5nQ29vcmRpbmF0b3I6OnVubG9ja0FuaW1hdGlvbnMoKQoreworICAgIGlmICghbV9hbmltYXRp
b25zTG9ja2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2FuaW1hdGlvbnNMb2NrZWQgPSBm
YWxzZTsKKyAgICBtX2NvbW1hbmRzLT5zZXRBbmltYXRpb25zTG9ja2VkKGZhbHNlKTsKK30KKwor
dm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgp
Cit7CisgICAgaWYgKG1faXNTdXNwZW5kZWQgfHwgbV93YWl0aW5nRm9yUmVuZGVyZXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIFdlIGxvY2sgdGhlIGFuaW1hdGlvbnMgd2hpbGUgcGVyZm9y
bWluZyBsYXlvdXQsIHRvIGF2b2lkIGZsaWNrZXJzIGNhdXNlZCBieSBhbmltYXRpb25zIGNvbnRp
bnVpbmcgaW4gdGhlIHJlbmRlcmVyIHdoaWxlCisgICAgLy8gdGhlIHdlYiBwcm9jZXNzIGxheW91
dCB3YW50cyB0byBjYW5jZWwgdGhlbS4KKyAgICBsb2NrQW5pbWF0aW9ucygpOworICAgIHN5bmNE
aXNwbGF5U3RhdGUoKTsKKworICAgIC8vIFdlIGNhbiB1bmxvY2sgdGhlIGFuaW1hdGlvbnMgYmVm
b3JlIGZsdXNoaW5nIGlmIHRoZXJlIGFyZSBubyB2aXNpYmxlIGNoYW5nZXMsIGZvciBleGFtcGxl
IGlmIHRoZXJlIGFyZSBjb250ZW50IHVwZGF0ZXMKKyAgICAvLyBpbiBhIGxheWVyIHdpdGggb3Bh
Y2l0eSAwLgorICAgIGJvb2wgY2FuVW5sb2NrQmVmb3JlRmx1c2ggPSAhbV9pc1ZhbGlkIHx8ICF0
b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmhhc1BlbmRpbmdW
aXNpYmxlQ2hhbmdlcygpOworICAgIGlmIChjYW5VbmxvY2tCZWZvcmVGbHVzaCkKKyAgICAgICAg
dW5sb2NrQW5pbWF0aW9ucygpOworCisgICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIGJvb2wgZGlkU3luYyA9IGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOworICAg
IG1fY2xpZW50LT5kaWRQZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaChkaWRTeW5jKTsKK30KKwor
dm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzeW5jRGlzcGxheVN0YXRlKCkKK3sKKyNpZiBF
TkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpICYmICFVU0UoUkVRVUVTVF9BTklNQVRJT05f
RlJBTUVfVElNRVIpICYmICFVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05J
VE9SKQorICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFueSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgYW5p
bWF0aW9uIGNhbGxiYWNrcyBhcmUgYmVpbmcgZXhlY3V0ZWQgYmVmb3JlIHdlIGZsdXNoIHRoZSBs
YXllcnMuCisgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT5zZXJ2aWNlU2NyaXB0ZWRB
bmltYXRpb25zKGNvbnZlcnRTZWNvbmRzVG9ET01UaW1lU3RhbXAoY3VycmVudFRpbWUoKSkpOwor
I2VuZGlmCisKKyAgICBtX2NsaWVudC0+bGF5b3V0SWZOZWVkZWQoKTsKK30KKwordm9pZCBDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yOjpsYXllckZsdXNoVGltZXJGaXJlZChUaW1lcjxDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yPiopCit7CisgICAgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKK30K
Kwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCkK
K3sKKyAgICBBU1NFUlQoIW1fcGFnZU92ZXJsYXlMYXllcik7CisKKyAgICBtX3BhZ2VPdmVybGF5
TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcywgdGhpcyk7CisjaWZuZGVmIE5ERUJV
RworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmFtZSgiQ29tcG9zaXRpbmdDb29yZGluYXRv
ciBwYWdlIG92ZXJsYXkgY29udGVudCIpOworI2VuZGlmCisKKyAgICBtX3BhZ2VPdmVybGF5TGF5
ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNp
emUobV9jbGllbnQtPnZpZXdTaXplKCkpOworCisgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1f
cGFnZU92ZXJsYXlMYXllci5nZXQoKSk7CisKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30K
Kwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXN0cm95UGFnZU92ZXJsYXlMYXllcigp
Cit7CisgICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7CisgICAgbV9wYWdlT3ZlcmxheUxh
eWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyID0gbnVsbHB0
cjsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHJlY3QpCit7CisgICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7CisgICAgbV9wYWdl
T3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgc2NoZWR1bGVM
YXllckZsdXNoKCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0UGFnZU92
ZXJsYXlPcGFjaXR5KGZsb2F0IHZhbHVlKQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5
ZXIpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0T3BhY2l0eSh2YWx1ZSk7CisgICAgc2No
ZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK1Bhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmc+IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKElt
YWdlKiBpbWFnZSkKK3sKKyAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQgPSBD
b29yZGluYXRlZEltYWdlQmFja2luZzo6Z2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRChpbWFn
ZSk7CisgICAgSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VCYWNraW5ncy5m
aW5kKGltYWdlSUQpOworICAgIFJlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gaW1hZ2VC
YWNraW5nOworICAgIGlmIChpdCA9PSBtX2ltYWdlQmFja2luZ3MuZW5kKCkpIHsKKyAgICAgICAg
aW1hZ2VCYWNraW5nID0gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNyZWF0ZSh0aGlzLCBpbWFn
ZSk7CisgICAgICAgIG1faW1hZ2VCYWNraW5ncy5hZGQoaW1hZ2VJRCwgaW1hZ2VCYWNraW5nKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgaW1hZ2VCYWNraW5nID0gaXQtPnZhbHVlOworCisgICAgcmV0
dXJuIGltYWdlQmFja2luZzsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVh
dGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQoreworICAg
IG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX2NvbW1hbmRzLT5jcmVhdGVJbWFnZUJh
Y2tpbmcoaW1hZ2VJRCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6dXBkYXRl
SW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwgY29uc3QgV2Vi
Q29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBtX3Nob3VsZFN5bmNG
cmFtZSA9IHRydWU7CisgICAgbV9jb21tYW5kcy0+dXBkYXRlSW1hZ2VCYWNraW5nKGltYWdlSUQs
IGhhbmRsZSk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y2xlYXJJbWFnZUJh
Y2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAg
bV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fY29tbWFuZHMtPmNsZWFySW1hZ2VCYWNr
aW5nQ29udGVudHMoaW1hZ2VJRCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6
cmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sK
KyAgICBpZiAobV9pc1B1cmdpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX2lt
YWdlQmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkpOworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0g
dHJ1ZTsKKyAgICBtX2ltYWdlQmFja2luZ3MucmVtb3ZlKGltYWdlSUQpOworICAgIG1fY29tbWFu
ZHMtPnJlbW92ZUltYWdlQmFja2luZyhpbWFnZUlEKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOjpmbHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCkKK3sKKyAgICBJbWFn
ZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faW1hZ2VCYWNraW5ncy5lbmQoKTsKKyAgICBm
b3IgKEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgaXRlciA9IG1faW1hZ2VCYWNraW5ncy5iZWdp
bigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICBpdGVyLT52YWx1ZS0+dXBkYXRlKCk7
Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRl
ZChjb25zdCBHcmFwaGljc0xheWVyKiwgZG91YmxlIC8qIHRpbWUgKi8pCit7Cit9CisKK3ZvaWQg
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6bm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBHcmFwaGlj
c0xheWVyKikKK3sKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpwYWludENvbnRl
bnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXBoaWNzQ29udGV4dCYg
Z3JhcGhpY3NDb250ZXh0LCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSBwaGFzZSwgY29uc3Qg
SW50UmVjdCYgY2xpcFJlY3QpCit7CisgICAgYm9vbCBpc05vbkNvbXBvc2l0aW5nQ29udGVudCA9
IChncmFwaGljc0xheWVyID09IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcik7CisgICAgYm9v
bCBpc1BhZ2VPdmVybGF5ID0gKGdyYXBoaWNzTGF5ZXIgPT0gbV9wYWdlT3ZlcmxheUxheWVyKTsK
KworICAgIGlmIChpc05vbkNvbXBvc2l0aW5nQ29udGVudCkKKyAgICAgICAgbV9jbGllbnQtPnBh
aW50Q29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7CisgICAgZWxzZSBpZiAoaXNQ
YWdlT3ZlcmxheSkKKyAgICAgICAgbV9jbGllbnQtPnBhaW50T3ZlcmxheUNvbnRlbnRzKGdyYXBo
aWNzQ29udGV4dCwgY2xpcFJlY3QpOworfQorCitQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IENv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZUdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNs
aWVudCogY2xpZW50KQoreworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbGF5ZXIgPSBu
ZXcgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGNsaWVudCk7CisgICAgbGF5ZXItPnNldENvb3Jk
aW5hdG9yKHRoaXMpOworICAgIG1fcmVnaXN0ZXJlZExheWVycy5hZGQobGF5ZXIpOworICAgIGxh
eWVyLT5zZXRDb250ZW50c1NjYWxlKG1fY29udGVudHNTY2FsZSk7CisgICAgbGF5ZXItPmFkanVz
dFZpc2libGVSZWN0KCk7CisgICAgcmV0dXJuIGFkb3B0UHRyKGxheWVyKTsKK30KKwordm9pZCBD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXll
cklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZv
LCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCkKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRy
dWU7CisgICAgbV9jb21tYW5kcy0+Y3JlYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwg
dGlsZVJlY3QsIHVwZGF0ZUluZm8pOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6
OnVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwg
Y29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IEludFJlY3QmIHRpbGVS
ZWN0KQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX2NvbW1hbmRzLT51
cGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbyk7
Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVtb3ZlVGlsZShDb29yZGluYXRl
ZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQoreworICAgIGlmIChtX2lzUHVyZ2lu
ZykKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBt
X2NvbW1hbmRzLT5yZW1vdmVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlEKTsKK30KKwordm9p
ZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxh
c0lELCBjb25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlKQoreworICAg
IG1fY29tbWFuZHMtPmNyZWF0ZVVwZGF0ZUF0bGFzKGF0bGFzSUQsIGhhbmRsZSk7Cit9CisKK3Zv
aWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRs
YXNJRCkKK3sKKyAgICBpZiAobV9pc1B1cmdpbmcpCisgICAgICAgIHJldHVybjsKKyAgICBtX2Nv
bW1hbmRzLT5yZW1vdmVVcGRhdGVBdGxhcyhhdGxhc0lEKTsKK30KKworRmxvYXRSZWN0IENvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OnZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3Zpc2libGVDb250ZW50c1JlY3Q7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGlu
YXRvcjo6c2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCBjb25z
dCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKK3sKKyAgICBtX3Nob3VsZFN5
bmNGcmFtZSA9IHRydWU7CisgICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMgYWN0aXZlQW5pbWF0
aW9ucyA9IGFuaW1hdGlvbnMuZ2V0QWN0aXZlQW5pbWF0aW9ucygpOworICAgIG1fY29tbWFuZHMt
PnNldExheWVyQW5pbWF0aW9ucyhsYXllcklELCBhY3RpdmVBbmltYXRpb25zKTsKK30KKwordm9p
ZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlW
ZWN0b3IpCit7CisgICAgYm9vbCBjb250ZW50c1JlY3REaWRDaGFuZ2UgPSByZWN0ICE9IG1fdmlz
aWJsZUNvbnRlbnRzUmVjdDsKKyAgICBib29sIGNvbnRlbnRzU2NhbGVEaWRDaGFuZ2UgPSBzY2Fs
ZSAhPSBtX2NvbnRlbnRzU2NhbGU7CisKKyAgICAvLyBBIHplcm8gdHJhamVjdG9yeVZlY3RvciBp
bmRpY2F0ZXMgdGhhdCB0aWxlcyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9ydCBhcmUgcmVxdWVzdGVk
LgorICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRM
YXllci5nZXQoKSktPnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IodHJhamVj
dG9yeVZlY3Rvcik7CisKKyAgICBpZiAoY29udGVudHNSZWN0RGlkQ2hhbmdlIHx8IGNvbnRlbnRz
U2NhbGVEaWRDaGFuZ2UpIHsKKyAgICAgICAgbV92aXNpYmxlQ29udGVudHNSZWN0ID0gcmVjdDsK
KyAgICAgICAgbV9jb250ZW50c1NjYWxlID0gc2NhbGU7CisKKyAgICAgICAgSGFzaFNldDxDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJz
LmVuZCgpOworICAgICAgICBmb3IgKEhhc2hTZXQ8Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46
Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICAgICAgaWYgKGNvbnRlbnRzU2NhbGVEaWRDaGFuZ2UpCisgICAgICAgICAg
ICAgICAgKCppdCktPnNldENvbnRlbnRzU2NhbGUoc2NhbGUpOworICAgICAgICAgICAgaWYgKGNv
bnRlbnRzUmVjdERpZENoYW5nZSkKKyAgICAgICAgICAgICAgICAoKml0KS0+YWRqdXN0VmlzaWJs
ZVJlY3QoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFu
Z2UpCisgICAgICAgIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlID0gdHJ1ZTsKKwor
ICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0
b3I6OnJlbmRlck5leHRGcmFtZSgpCit7CisgICAgbV93YWl0aW5nRm9yUmVuZGVyZXIgPSBmYWxz
ZTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV91cGRhdGVBdGxhc2VzLnNpemUoKTsgKytpKQorICAgICAgICBtX3VwZGF0ZUF0bGFzZXNb
aV0tPmRpZFN3YXBCdWZmZXJzKCk7Cit9CisKK2Jvb2wgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6
bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1faXNT
dXNwZW5kZWQgJiYgIW1fd2FpdGluZ0ZvclJlbmRlcmVyOworfQorCit2b2lkIENvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OnB1cmdlQmFja2luZ1N0b3JlcygpCit7CisgICAgVGVtcG9yYXJ5Q2hhbmdl
PGJvb2w+IHB1cmdpbmdUb2dnbGUobV9pc1B1cmdpbmcsIHRydWUpOworCisgICAgSGFzaFNldDxD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5
ZXJzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6
aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQorICAgICAgICAoKml0KS0+cHVyZ2VCYWNraW5nU3RvcmVzKCk7CisKKyAgICBtX2ltYWdlQmFj
a2luZ3MuY2xlYXIoKTsKKyAgICBtX3VwZGF0ZUF0bGFzZXMuY2xlYXIoKTsKK30KKworUGFzc093
blB0cjxHcmFwaGljc0NvbnRleHQ+IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmJlZ2luQ29udGVu
dFVwZGF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzIGZs
YWdzLCB1aW50MzJfdCYgYXRsYXNJRCwgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBPd25QdHI8
R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQ7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkgeworICAgICAgICBVcGRhdGVBdGxh
cyogYXRsYXMgPSBtX3VwZGF0ZUF0bGFzZXNbaV0uZ2V0KCk7CisgICAgICAgIGlmIChhdGxhcy0+
c3VwcG9ydHNBbHBoYSgpID09IChmbGFncyAmIENvb3JkaW5hdGVkU3VyZmFjZTo6U3VwcG9ydHNB
bHBoYSkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGVyZSBp
cyBubyBhdmFpbGFibGUgYnVmZmVyIHNwYWNlLgorICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0
ID0gYXRsYXMtPmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihhdGxhc0lELCBzaXplLCBv
ZmZzZXQpOworICAgICAgICAgICAgaWYgKGdyYXBoaWNzQ29udGV4dCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ3JhcGhpY3NDb250ZXh0LnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHN0YXRpYyBjb25zdCBpbnQgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiA9IDEwMjQ7IC8vIFNo
b3VsZCBiZSBhIHBvd2VyIG9mIHR3by4KKyAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKGFkb3B0
UHRyKG5ldyBVcGRhdGVBdGxhcyh0aGlzLCBTY3JhdGNoQnVmZmVyRGltZW5zaW9uLCBmbGFncykp
KTsKKyAgICBzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMoKTsKKyAgICByZXR1cm4gbV91
cGRhdGVBdGxhc2VzLmxhc3QoKS0+YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGF0bGFz
SUQsIHNpemUsIG9mZnNldCk7Cit9CisKK2NvbnN0IGRvdWJsZSBSZWxlYXNlSW5hY3RpdmVBdGxh
c2VzVGltZXJJbnRlcnZhbCA9IDAuNTsKKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpz
Y2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMoKQoreworICAgIGlmICghbV9yZWxlYXNlSW5h
Y3RpdmVBdGxhc2VzVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9yZWxlYXNlSW5hY3RpdmVB
dGxhc2VzVGltZXIuc3RhcnRSZXBlYXRpbmcoUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50
ZXJ2YWwpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJlbGVhc2VJbmFjdGl2
ZUF0bGFzZXNUaW1lckZpcmVkKFRpbWVyPENvbXBvc2l0aW5nQ29vcmRpbmF0b3I+KikKK3sKKyAg
ICAvLyBXZSBhbHdheXMgd2FudCB0byBrZWVwIG9uZSBhdGxhcyBmb3Igbm9uLWNvbXBvc2l0ZWQg
Y29udGVudC4KKyAgICBPd25QdHI8VXBkYXRlQXRsYXM+IGF0bGFzVG9LZWVwQW55d2F5OworICAg
IGJvb2wgZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ID0gZmFsc2U7Cisg
ICAgZm9yIChpbnQgaSA9IG1fdXBkYXRlQXRsYXNlcy5zaXplKCkgLSAxOyAgaSA+PSAwOyAtLWkp
IHsKKyAgICAgICAgVXBkYXRlQXRsYXMqIGF0bGFzID0gbV91cGRhdGVBdGxhc2VzW2ldLmdldCgp
OworICAgICAgICBpZiAoIWF0bGFzLT5pc0luVXNlKCkpCisgICAgICAgICAgICBhdGxhcy0+YWRk
VGltZUluYWN0aXZlKFJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckludGVydmFsKTsKKyAgICAg
ICAgYm9vbCB1c2FibGVGb3JOb25Db21wb3NpdGVkQ29udGVudCA9ICFhdGxhcy0+c3VwcG9ydHNB
bHBoYSgpOworICAgICAgICBpZiAoYXRsYXMtPmlzSW5hY3RpdmUoKSkgeworICAgICAgICAgICAg
aWYgKCFmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgJiYgIWF0bGFzVG9L
ZWVwQW55d2F5ICYmIHVzYWJsZUZvck5vbkNvbXBvc2l0ZWRDb250ZW50KQorICAgICAgICAgICAg
ICAgIGF0bGFzVG9LZWVwQW55d2F5ID0gbV91cGRhdGVBdGxhc2VzW2ldLnJlbGVhc2UoKTsKKyAg
ICAgICAgICAgIG1fdXBkYXRlQXRsYXNlcy5yZW1vdmUoaSk7CisgICAgICAgIH0gZWxzZSBpZiAo
dXNhYmxlRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQpCisgICAgICAgICAgICBmb3VuZEFjdGl2ZUF0
bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgPSB0cnVlOworICAgIH0KKworICAgIGlmICghZm91
bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ICYmIGF0bGFzVG9LZWVwQW55d2F5
KQorICAgICAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKGF0bGFzVG9LZWVwQW55d2F5LnJlbGVh
c2UoKSk7CisKKyAgICBpZiAobV91cGRhdGVBdGxhc2VzLnNpemUoKSA8PSAxKQorICAgICAgICBt
X3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5zdG9wKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29tcG9zaXRpbmdDb29yZGluYXRvci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjczODFiN2QyODNmNGIxYThkODAxNTRiMTNkMDMyZmNiMDVjZTMxNjUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmgKQEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yX2gK
KyNkZWZpbmUgQ29tcG9zaXRpbmdDb29yZGluYXRvcl9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisKKyNpbmNsdWRlICJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yQ2xpZW50LmgiCisj
aW5jbHVkZSAiQ29tcG9zaXRpbmdDb29yZGluYXRvckNvbW1hbmRzLmgiCisjaW5jbHVkZSAiQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmcuaCIKKyNpbmNsdWRlICJVcGRhdGVBdGxhcy5oIgorI2luY2x1ZGUgIldlYkNvb3JkaW5hdGVk
U3VyZmFjZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NM
YXllckZhY3RvcnkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1RpbWVyLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCisjaWYgRU5BQkxFKENT
U19TSEFERVJTKQorI2luY2x1ZGUgPFdlYkNvcmUvRmlsdGVyT3BlcmF0aW9ucy5oPgorI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFBhZ2U7Cit9CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yIDogcHVibGljIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJDbGllbnQKKyAgICAsIHB1YmxpYyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJD
bGllbnQKKyAgICAsIHB1YmxpYyBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0b3IK
KyAgICAsIHB1YmxpYyBVcGRhdGVBdGxhc0NsaWVudAorICAgICwgcHVibGljIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJGYWN0b3J5IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8Q29tcG9zaXRpbmdDb29yZGluYXRvcj4gY3JlYXRlKFdlYkNvcmU6OlBh
Z2UqLCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yQ2xpZW50KiwgQ29tcG9zaXRpbmdDb29yZGluYXRv
ckNvbW1hbmRzKik7CisgICAgdmlydHVhbCB+Q29tcG9zaXRpbmdDb29yZGluYXRvcigpOworCisg
ICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNl
dFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxh
eUluUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2l6
ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKTsKKworICAgIHZvaWQg
Y3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOworICAgIHZvaWQgZGVzdHJveVBhZ2VPdmVybGF5TGF5
ZXIoKTsKKyAgICB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKTsKKyAgICB2b2lkIHNldFBhZ2VPdmVybGF5T3BhY2l0eShmbG9hdCk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgcGF1c2VSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSB0cnVlOyB9
CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IGZh
bHNlOyBzY2hlZHVsZUxheWVyRmx1c2goKTsgfQorCisgICAgdmlydHVhbCB2b2lkIGZvcmNlUmVw
YWludCgpOworCisgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQgc2NhbGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmKTsKKworICAgIC8vIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCA6OiBDb29yZGlu
YXRlZFRpbGVDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShDb29yZGluYXRlZExh
eWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoQ29vcmRpbmF0
ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKENvb3Jk
aW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKTsKKworICAgIC8vIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllckNsaWVudAorICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVD
b250ZW50c1JlY3QoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgbGF5ZXJUcmVlVGlsZVVwZGF0
ZXNBbGxvd2VkKCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChXZWJDb3JlOjpJbWFnZSopIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVy
SUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJik7CisgICAgdmlydHVhbCB2b2lkIHN5bmNM
YXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVk
TGF5ZXJJRD4mKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdmlydHVhbCB2b2lkIHN5
bmNMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJP
cGVyYXRpb25zJik7CisjZW5kaWYKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZv
cm1MYXllciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKENvb3JkaW5h
dGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCkgT1ZFUlJJREU7CisjZW5k
aWYKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJ
RCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKKworICAgIHZpcnR1
YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc3luY0ZpeGVkTGF5ZXJzKCk7CisgICAgdmlydHVhbCBQYXNzT3du
UHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50MzJfdCYgYXRs
YXNJRCwgV2ViQ29yZTo6SW50UG9pbnQmKTsKKworICAgIC8vIFVwZGF0ZUF0bGFzQ2xpZW50Cisg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIGNvbnN0
IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJik7CisgICAgdmlydHVhbCB2b2lkIHJlbW92
ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpOworCisgICAgdm9pZCByZW5kZXJOZXh0RnJh
bWUoKTsKKyAgICB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOworCisgICAgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciogcm9vdEdyYXBoaWNzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RMYXll
ci5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3IoV2ViQ29y
ZTo6UGFnZSosIENvbXBvc2l0aW5nQ29vcmRpbmF0b3JDbGllbnQqLCBDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yQ29tbWFuZHMqKTsKKworICAgIC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQKKyAgICB2aXJ0
dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKiwgZG91YmxlIHRpbWUpOworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVk
KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRD
b250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIGNsaXBSZWN0KTsKKworICAgIC8vIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
OjpDb29yZGluYXRvcgorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUlt
YWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBjb25zdCBXZWJDb29yZGluYXRl
ZFN1cmZhY2U6OkhhbmRsZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckltYWdl
QmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCkgT1ZFUlJJREU7CisKKyAgICB2b2lkIGZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMo
KTsKKworICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5CisgICAgdmlydHVhbCBQYXNzT3duUHRy
PFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNsaWVudCopIE9WRVJSSURFOworCisgICAgLy8gQ29tcG9zaXRpbmdDb29yZGlu
YXRvcgorICAgIHZvaWQgaW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQoKTsK
KyAgICBib29sIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOworICAgIHZvaWQgY2FuY2VsUGVu
ZGluZ0xheWVyRmx1c2goKTsKKyAgICB2b2lkIHBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7
CisgICAgdm9pZCBzeW5jRGlzcGxheVN0YXRlKCk7CisgICAgdm9pZCBsb2NrQW5pbWF0aW9ucygp
OworICAgIHZvaWQgdW5sb2NrQW5pbWF0aW9ucygpOworCisgICAgdm9pZCBsYXllckZsdXNoVGlt
ZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiopOworCisgICAg
dm9pZCBzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMoKTsKKworICAgIHZvaWQgcmVsZWFz
ZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8Q29tcG9zaXRpbmdDb29y
ZGluYXRvcj4qKTsKKworICAgIFdlYkNvcmU6OlBhZ2UqIG1fcGFnZTsKKyAgICBDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yQ2xpZW50KiBtX2NsaWVudDsKKyAgICBDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
Q29tbWFuZHMqIG1fY29tbWFuZHM7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXll
cj4gbV9yb290TGF5ZXI7CisKKyAgICAvLyBUaGUgbGF5ZXIgd2hpY2ggY29udGFpbnMgYWxsIG5v
bi1jb21wb3NpdGVkIGNvbnRlbnQuCisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcjsKKworICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkg
bGF5ZXIuIFdpbGwgYmUgbnVsbCBpZiB0aGVyZSdzIG5vIHBhZ2Ugb3ZlcmxheS4KKyAgICBPd25Q
dHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9wYWdlT3ZlcmxheUxheWVyOworCisgICAgSGFz
aFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiBtX3JlZ2lzdGVyZWRMYXll
cnM7CisgICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4gbV9kZXRhY2hlZExheWVyczsKKyAg
ICB0eXBlZGVmIEhhc2hNYXA8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUmVmUHRyPENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nPiA+IEltYWdlQmFja2luZ01hcDsKKyAgICBJbWFnZUJhY2tpbmdN
YXAgbV9pbWFnZUJhY2tpbmdzOworICAgIFZlY3RvcjxPd25QdHI8VXBkYXRlQXRsYXM+ID4gbV91
cGRhdGVBdGxhc2VzOworCisgICAgYm9vbCBtX2lzVmFsaWQ7CisgICAgLy8gV2UgZG9uJ3Qgc2Vu
ZCB0aGUgbWVzc2FnZXMgcmVsYXRlZCB0byByZWxlYXNpbmcgcmVzb3VyY2VzIHRvIHJlbmRlcmVy
IGR1cmluZyBwdXJnaW5nLCBiZWNhdXNlIHJlbmRlcmVyIGFscmVhZHkgaGFkIHJlbW92ZWQgYWxs
IHJlc291cmNlcy4KKyAgICBib29sIG1faXNQdXJnaW5nOworCisgICAgYm9vbCBtX3dhaXRpbmdG
b3JSZW5kZXJlcjsKKyAgICBib29sIG1faXNTdXNwZW5kZWQ7CisgICAgV2ViQ29yZTo6RmxvYXRS
ZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7Cisg
ICAgYm9vbCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZTsKKworICAgIGJvb2wgbV9z
aG91bGRTeW5jRnJhbWU7CisgICAgYm9vbCBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdM
YXllcjsKKyAgICBXZWJDb3JlOjpUaW1lcjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiBtX2xheWVy
Rmx1c2hUaW1lcjsKKyAgICBXZWJDb3JlOjpUaW1lcjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiBt
X3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lcjsKKyAgICBib29sIG1fbGF5ZXJGbHVzaFNjaGVk
dWxpbmdFbmFibGVkOworICAgIGJvb2wgbV9hbmltYXRpb25zTG9ja2VkOworfTsKKworfQorCisj
ZW5kaWYKKworI2VuZGlmIC8vIENvbXBvc2l0aW5nQ29vcmRpbmF0b3JfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29t
cG9zaXRpbmdDb29yZGluYXRvckNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvckNsaWVudC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmQwNmZjNTAzNDY4ZTdiYWZjMzc4MWJlMWNmYWU5NTI5Y2U5MzcyOGUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yQ2xpZW50LmgKQEAgLTAsMCArMSw1
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvbXBvc2l0aW5nQ29vcmRpbmF0b3JD
bGllbnRfaAorI2RlZmluZSBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yQ2xpZW50X2gKKworI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250
ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyNpbmNsdWRlIDxXZWJDb3JlL0Zp
bHRlck9wZXJhdGlvbi5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGNvbnN0
IFdlYkNvcmU6OkludFNpemUmIHZpZXdTaXplKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIGRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKGJvb2wgZGlkU3luYykgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBsYXlvdXRJZk5lZWRlZCgpID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBp
c09wYXF1ZUNvbnRlbnRzKCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJl
Y3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPdmVybGF5Q29udGVudHMoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpID0gMDsK
KworICAgIHZpcnR1YWwgYm9vbCBoYXNQYWdlT3ZlcmxheSgpIGNvbnN0ID0gMDsKK307CisKK30K
KyNlbmRpZgorCisjZW5kaWYgLy8gQ29tcG9zaXRpbmdDb29yZGluYXRvckNsaWVudF9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yQ29tbWFuZHMuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0
b3JDb21tYW5kcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMyYjk4NzJjODMzZTc1ZDc1NTZhMjY5NTE0Mjk5Y2Zh
ZTY1ZDE2MzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yQ29tbWFuZHMu
aApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAw
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29tcG9zaXRp
bmdDb29yZGluYXRvckNvbW1hbmRzX2gKKyNkZWZpbmUgQ29tcG9zaXRpbmdDb29yZGluYXRvckNv
bW1hbmRzX2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIkNv
b3JkaW5hdGVkTGF5ZXJJbmZvLmgiCisjaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKKyNp
bmNsdWRlICJXZWJDb29yZGluYXRlZFN1cmZhY2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0
UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4K
KworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NT
dXJmYWNlVG9rZW4uaD4KKyNlbmRpZgorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorI2luY2x1
ZGUgPFdlYkNvcmUvRmlsdGVyT3BlcmF0aW9uLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIENvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kcyB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJ
RCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoQ29vcmRp
bmF0ZWRMYXllcklELCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCwg
Y29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKSA9IDA7CisjaWYgRU5BQkxFKENTU19G
SUxURVJTKQorICAgIHZpcnR1YWwgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhDb29y
ZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKSA9IDA7Cisj
ZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQ29tcG9zaXRpbmdMYXllcihDb29yZGluYXRl
ZExheWVySUQpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIoQ29v
cmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
VGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHJlbW92ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90
IHRpbGVJRCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQz
Ml90IGF0bGFzSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKSA9IDA7
CisKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxl
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW1hZ2VC
YWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpID0gMDsKKworICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvc2l0
aW9uKSA9IDA7CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYs
IGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuJikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgZnJvbnRCdWZmZXIp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQp
ID0gMDsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhDb29y
ZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wpID0gMDsKK307
CisKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gQ29tcG9zaXRpbmdDb29yZGluYXRvckNvbW1hbmRz
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVy
VHJlZUhvc3QuY3BwCmluZGV4IDlmNDRlYmZjMTBjYmE5ZjdjNzZmODYxODE3YWVjMmY3Y2Q3OGQ1
NGIuLjcxOGY4MjRkODI0NzMyODk4NmYyOTI3MjY1ZmY4YjM5ODY2MWFlMDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNw
cApAQCAtMzAsMzIgKzMwLDEwIEBACiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogI2lu
Y2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oIgogCi0jaW5jbHVkZSAiQ29vcmRpbmF0
ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmgiCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHlNZXNzYWdl
cy5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhSW1wbC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgotI2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJ
bmZvLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2Vi
UGFnZS5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9GcmFtZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9HcmFwaGljc1N1cmZhY2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJM
YXllckJhY2tpbmcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyQ29tcG9zaXRvci5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2V0
dGluZ3MuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmg+
Ci0jaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgotCi0jaWYgRU5BQkxFKENTU19TSEFE
RVJTKQotI2luY2x1ZGUgIkN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uaCIKLSNpbmNsdWRl
ICJWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCIKLSNlbmRpZgogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIApAQCAtNjgsODkgKzQ2LDI4IEBAIFBhc3NSZWZQdHI8Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0PiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZShXZWJQYWdl
KiB3CiAKIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6fkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dCgpCiB7Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIGRpc2Nvbm5lY3RDdXN0b21GaWx0
ZXJQcm9ncmFtcygpOwotI2VuZGlmCi0KLSAgICAvLyBQcmV2ZW50IHNldENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllckNsaWVudCgwKSAtPiBkZXRhY2hMYXllcigpIGZyb20gbW9kaWZ5aW5nIHRoZSBz
ZXQgd2hpbGUgd2UgaXRlcmF0ZSBpdC4KLSAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcio+IHJlZ2lzdGVyZWRMYXllcnM7Ci0gICAgcmVnaXN0ZXJlZExheWVycy5z
d2FwKG1fcmVnaXN0ZXJlZExheWVycyk7Ci0KLSAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBlbmQgPSByZWdpc3RlcmVkTGF5ZXJzLmVuZCgp
OwotICAgIGZvciAoSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6
aXRlcmF0b3IgaXQgPSByZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgKCppdCktPnNldENvb3JkaW5hdG9yKDApOwogfQogCiBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdChXZWJQYWdlKiB3ZWJQYWdlKQogICAg
IDogTGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKQogICAgICwgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExh
eWVyRmx1c2goZmFsc2UpCi0gICAgLCBtX2lzVmFsaWQodHJ1ZSkKLSAgICAsIG1faXNQdXJnaW5n
KGZhbHNlKQotICAgICwgbV93YWl0aW5nRm9yVUlQcm9jZXNzKHRydWUpCi0gICAgLCBtX2lzU3Vz
cGVuZGVkKGZhbHNlKQotICAgICwgbV9jb250ZW50c1NjYWxlKDEpCi0gICAgLCBtX3Nob3VsZFNl
bmRTY3JvbGxQb3NpdGlvblVwZGF0ZSh0cnVlKQotICAgICwgbV9zaG91bGRTeW5jRnJhbWUoZmFs
c2UpCi0gICAgLCBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcihmYWxzZSkKLSAg
ICAsIG1fbGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6Omxh
eWVyRmx1c2hUaW1lckZpcmVkKQotICAgICwgbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIo
dGhpcywgJkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1Rp
bWVyRmlyZWQpCi0gICAgLCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCh0cnVlKQogICAg
ICwgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQoMCkKLSAgICAsIG1fYW5pbWF0aW9uc0xv
Y2tlZChmYWxzZSkKLXsKLSAgICAvLyBDcmVhdGUgYSByb290IGxheWVyLgotICAgIG1fcm9vdExh
eWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMsIHRoaXMpOwotICAgIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllciogY29vcmRpbmF0ZWRSb290TGF5ZXIgPSB0b0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSk7Ci0gICAgY29vcmRpbmF0ZWRSb290TGF5ZXItPnNl
dFJvb3RMYXllcih0cnVlKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9yb290TGF5ZXItPnNldE5h
bWUoIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCByb290IGxheWVyIik7Ci0jZW5kaWYKLSAgICBt
X3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0
U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7Ci0gICAgbV9sYXllclRyZWVDb250ZXh0LmNvb3JkaW5h
dGVkTGF5ZXJJRCA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGNvb3JkaW5hdGVkUm9vdExh
eWVyKS0+aWQoKTsKLQotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllciA9IEdyYXBoaWNz
TGF5ZXI6OmNyZWF0ZSh0aGlzLCB0aGlzKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9ub25Db21w
b3NpdGVkQ29udGVudExheWVyLT5zZXROYW1lKCJDb29yZGluYXRlZExheWVyVHJlZUhvc3Qgbm9u
LWNvbXBvc2l0ZWQgY29udGVudCIpOwotI2VuZGlmCi0gICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKLQotICAgIG1fcm9vdExheWVyLT5h
ZGRDaGlsZChtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpOwotCi0gICAgaWYgKG1f
d2ViUGFnZS0+aGFzUGFnZU92ZXJsYXkoKSkKLSAgICAgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXll
cigpOworeworICAgIG1fY29tcG9zaXRpbmdDb29yZGluYXRvckNvbW1hbmRzID0gV2ViQ29tcG9z
aXRpbmdDb29yZGluYXRvckNvbW1hbmRzOjpjcmVhdGUobV93ZWJQYWdlKTsKKyAgICBtX2NvbXBv
c2l0aW5nQ29vcmRpbmF0b3IgPSBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGUobV93ZWJQ
YWdlLT5jb3JlUGFnZSgpLCB0aGlzLCBtX2NvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kcy5n
ZXQoKSk7CiAKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIqIHJvb3RMYXllciA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fY29tcG9z
aXRpbmdDb29yZGluYXRvci0+cm9vdEdyYXBoaWNzTGF5ZXIoKSk7CisgICAgbV9sYXllclRyZWVD
b250ZXh0LmNvb3JkaW5hdGVkTGF5ZXJJRCA9IHJvb3RMYXllci0+aWQoKTsKIH0KIAogdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChi
b29sIGxheWVyRmx1c2hpbmdFbmFibGVkKQogewotICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVs
aW5nRW5hYmxlZCA9PSBsYXllckZsdXNoaW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPSBsYXllckZsdXNoaW5nRW5hYmxlZDsK
LQotICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkgewotICAgICAgICBzY2hl
ZHVsZUxheWVyRmx1c2goKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhbmNlbFBl
bmRpbmdMYXllckZsdXNoKCk7CisgICAgbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yLT5zZXRMYXll
ckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQobGF5ZXJGbHVzaGluZ0VuYWJsZWQpOwogfQogCiB2b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVMYXllckZsdXNoKCkKIHsKLSAgICBp
ZiAoIW1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fbGF5ZXJGbHVz
aFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCkKLXsKLSAgICBtX2xheWVyRmx1c2hUaW1lci5z
dG9wKCk7CisgICAgbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yLT5zY2hlZHVsZUxheWVyRmx1c2go
KTsKIH0KIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFNob3VsZE5vdGlmeUFm
dGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCBub3RpZnlBZnRlclNjaGVkdWxlZExheWVy
Rmx1c2gpCkBAIC0xNjAsMzAgKzc3LDE3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wKIAogdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCiB7Ci0gICAgbV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOwotICAgIG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRMYXllci0+c2V0Q29udGVudHNPcGFxdWUobV93ZWJQYWdlLT5kcmF3c0JhY2tncm91bmQo
KSAmJiAhbV93ZWJQYWdlLT5kcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZCgpKTsKLQotICAgIC8v
IEFkZCB0aGUgYWNjZWxlcmF0ZWQgbGF5ZXIgdHJlZSBoaWVyYXJjaHkuCi0gICAgaWYgKGdyYXBo
aWNzTGF5ZXIpCi0gICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+YWRkQ2hpbGQo
Z3JhcGhpY3NMYXllcik7CisgICAgbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yLT5zZXRSb290Q29t
cG9zaXRpbmdMYXllcihncmFwaGljc0xheWVyKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmludmFsaWRhdGUoKQogewotICAgIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7
Ci0KLSAgICBBU1NFUlQobV9pc1ZhbGlkKTsKLSAgICBtX3Jvb3RMYXllciA9IG51bGxwdHI7Ci0g
ICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yLT5pbnZh
bGlkYXRlKCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXROb25Db21w
b3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQog
ewotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0
KHJlY3QpOwotICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCi0gICAgICAgIG1fcGFnZU92ZXJs
YXlMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotCi0gICAgc2NoZWR1bGVMYXll
ckZsdXNoKCk7CisgICAgbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yLT5zZXROZWVkc0Rpc3BsYXlJ
blJlY3QocmVjdCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY3JvbGxO
b25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwg
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgLyogc2Nyb2xsT2Zmc2V0ICovKQpAQCAtMTkzLDE0ICs5
Nyw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY3JvbGxOb25Db21wb3NpdGVk
Q29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjCiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0Ojpmb3JjZVJlcGFpbnQoKQogewotICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBy
dW5uaW5nIGxheW91dCB0ZXN0cy4gU2luY2UgaW4gdGhpcyBjYXNlIHdlIGFyZSBub3Qgd2FpdGlu
ZyBmb3IgYSBVSVByb2Nlc3MgdG8gcmVwbHkgbmljZWx5LgotICAgIC8vIEluc3RlYWQgd2UgYXJl
IGp1c3QgdHJpZ2dlcmluZyBmb3JjZVJlcGFpbnQuIEJ1dCB3ZSBzdGlsbCB3YW50IHRvIGhhdmUg
dGhlIHNjcmlwdGVkIGFuaW1hdGlvbiBjYWxsYmFja3MgYmVpbmcgZXhlY3V0ZWQuCi0gICAgc3lu
Y0Rpc3BsYXlTdGF0ZSgpOwotCi0gICAgLy8gV2UgbmVlZCB0byBzY2hlZHVsZSBhbm90aGVyIGZs
dXNoLCBvdGhlcndpc2UgdGhlIGZvcmNlZCBwYWludCBtaWdodCBjYW5jZWwgYSBsYXRlciBleHBl
Y3RlZCBmbHVzaC4KLSAgICAvLyBUaGlzIGlzIGFsaWduZWQgd2l0aCBMYXllclRyZWVIb3N0Q0Eu
Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2Vz
KCk7CisgICAgbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yLT5mb3JjZVJlcGFpbnQoKTsKIH0KIAog
Ym9vbCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZvcmNlUmVwYWludEFzeW5jKHVpbnQ2NF90
IGNhbGxiYWNrSUQpCkBAIC0yMTQsNDMxICsxMTEsODIgQEAgYm9vbCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmZvcmNlUmVwYWludEFzeW5jKHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAKIHZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIG5ld1NpemUpCiB7Ci0gICAgaWYgKG1fcm9vdExheWVyLT5zaXplKCkgPT0gbmV3U2l6
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9yb290TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7
Ci0KLSAgICAvLyBJZiB0aGUgbmV3U2l6ZSBleHBvc2VzIG5ldyBhcmVhcyBvZiB0aGUgbm9uLWNv
bXBvc2l0ZWQgY29udGVudCBhIHNldE5lZWRzRGlzcGxheSBpcyBuZWVkZWQKLSAgICAvLyBmb3Ig
dGhvc2UgbmV3bHkgZXhwb3NlZCBhcmVhcy4KLSAgICBGbG9hdFNpemUgb2xkU2l6ZSA9IG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRMYXllci0+c2l6ZSgpOwotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKLQotICAgIGlmIChuZXdTaXplLndpZHRoKCkgPiBv
bGRTaXplLndpZHRoKCkpIHsKLSAgICAgICAgZmxvYXQgaGVpZ2h0ID0gc3RkOjptaW4oc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG5ld1NpemUuaGVpZ2h0KCkpLCBvbGRTaXplLmhlaWdodCgpKTsKLSAgICAg
ICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxv
YXRSZWN0KG9sZFNpemUud2lkdGgoKSwgMCwgbmV3U2l6ZS53aWR0aCgpIC0gb2xkU2l6ZS53aWR0
aCgpLCBoZWlnaHQpKTsKLSAgICB9Ci0KLSAgICBpZiAobmV3U2l6ZS5oZWlnaHQoKSA+IG9sZFNp
emUuaGVpZ2h0KCkpCi0gICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdCgwLCBvbGRTaXplLmhlaWdodCgpLCBuZXdTaXplLndp
ZHRoKCksIG5ld1NpemUuaGVpZ2h0KCkgLSBvbGRTaXplLmhlaWdodCgpKSk7Ci0KLSAgICBpZiAo
bV9wYWdlT3ZlcmxheUxheWVyKQotICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUo
bmV3U2l6ZSk7Ci0KLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICBtX2NvbXBvc2l0aW5n
Q29vcmRpbmF0b3ItPnNpemVEaWRDaGFuZ2UobmV3U2l6ZSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpkaWRJbnN0YWxsUGFnZU92ZXJsYXkoKQogewotICAgIGNyZWF0ZVBh
Z2VPdmVybGF5TGF5ZXIoKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICBtX2NvbXBv
c2l0aW5nQ29vcmRpbmF0b3ItPmNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKIH0KIAogdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCkKIHsKLSAg
ICBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwor
ICAgIG1fY29tcG9zaXRpbmdDb29yZGluYXRvci0+ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsK
IH0KIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFBhZ2VPdmVybGF5TmVlZHNE
aXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCiB7Ci0gICAgQVNTRVJUKG1fcGFn
ZU92ZXJsYXlMYXllcik7Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJ
blJlY3QocmVjdCk7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgbV9jb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yLT5zZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShyZWN0KTsKIH0KIAogdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFBhZ2VPdmVybGF5T3BhY2l0eShmbG9hdCB2
YWx1ZSkKIHsKLSAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKLSAgICBtX3BhZ2VPdmVy
bGF5TGF5ZXItPnNldE9wYWNpdHkodmFsdWUpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwot
fQotCi1ib29sIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFu
Z2VzKCkKLXsKLSAgICBpZiAobV93YWl0aW5nRm9yVUlQcm9jZXNzKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCgpOwot
Ci0gICAgbV9yb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHko
KTsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0
ZUZvclRoaXNMYXllck9ubHkoKTsKLSAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQotICAgICAg
ICBtX3BhZ2VPdmVybGF5TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9u
bHkoKTsKLQotICAgIGJvb2wgZGlkU3luYyA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZy
YW1lKCktPnZpZXcoKS0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7
Ci0KLSAgICBmbHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7Ci0KLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fZGV0YWNoZWRMYXllcnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkRl
bGV0ZUNvbXBvc2l0aW5nTGF5ZXIobV9kZXRhY2hlZExheWVyc1tpXSkpOwotICAgIG1fZGV0YWNo
ZWRMYXllcnMuY2xlYXIoKTsKLQotICAgIGlmIChtX3Nob3VsZFN5bmNGcmFtZSkgewotICAgICAg
ICBkaWRTeW5jID0gdHJ1ZTsKLQotICAgICAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IHJvdW5k
ZWRJbnRTaXplKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2l6ZSgpKTsKLSAgICAgICAg
SW50UmVjdCBjb3ZlcmVkUmVjdCA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSktPmNvdmVyUmVjdCgpOwotICAgICAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpEaWRSZW5k
ZXJGcmFtZShjb250ZW50c1NpemUsIGNvdmVyZWRSZWN0KSk7Ci0gICAgICAgIG1fd2FpdGluZ0Zv
clVJUHJvY2VzcyA9IHRydWU7Ci0gICAgICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIHVubG9ja0FuaW1hdGlvbnMoKTsKLQotICAgIGlmIChtX2ZvcmNl
UmVwYWludEFzeW5jQ2FsbGJhY2tJRCkgewotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNrKG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFj
a0lEKSk7Ci0gICAgICAgIG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEID0gMDsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZGlkU3luYzsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKCkKLXsKLSAgICBpZiAo
bV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OlNldFJvb3RDb21wb3NpdGluZ0xheWVyKHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1f
cm9vdExheWVyLmdldCgpKS0+aWQoKSkpOwotICAgIG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21wb3Np
dGluZ0xheWVyID0gdHJ1ZTsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV9j
b21wb3NpdGluZ0Nvb3JkaW5hdG9yLT5zZXRQYWdlT3ZlcmxheU9wYWNpdHkodmFsdWUpOwogfQog
Ci12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0xheWVyU3RhdGUoQ29vcmRpbmF0
ZWRMYXllcklEIGlkLCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYgaW5mbykKK3ZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwYXVzZVJlbmRlcmluZygpCiB7Ci0gICAgaWYgKG1fc2hv
dWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlKSB7Ci0gICAgICAgIG1fd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkRpZENoYW5nZVNjcm9sbFBv
c2l0aW9uKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpKSk7Ci0gICAgICAgIG1fc2hv
dWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgbV9zaG91
bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShpZCwgaW5m
bykpOworICAgIG1fY29tcG9zaXRpbmdDb29yZGluYXRvci0+cGF1c2VSZW5kZXJpbmcoKTsKIH0K
IAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNMYXllckNoaWxkcmVuKENvb3Jk
aW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGNoaWxk
cmVuKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlc3VtZVJlbmRlcmluZygpCiB7
Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJD
aGlsZHJlbihpZCwgY2hpbGRyZW4pKTsKKyAgICBtX2NvbXBvc2l0aW5nQ29vcmRpbmF0b3ItPnJl
c3VtZVJlbmRlcmluZygpOwogfQogCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi12b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBp
ZCwgUGxhdGZvcm1MYXllciogY2FudmFzUGxhdGZvcm1MYXllcikKK2NvbnN0IEludFNpemUmIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dmlld1NpemUoKSBjb25zdAogewotICAgIG1fc2hvdWxk
U3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBHcmFwaGljc1N1cmZhY2VUb2tlbiB0b2tlbiA9IGNhbnZh
c1BsYXRmb3JtTGF5ZXItPmdyYXBoaWNzU3VyZmFjZVRva2VuKCk7Ci0gICAgSW50U2l6ZSBjYW52
YXNTaXplID0gY2FudmFzUGxhdGZvcm1MYXllci0+cGxhdGZvcm1MYXllclNpemUoKTsKLSAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpD
cmVhdGVDYW52YXMoaWQsIGNhbnZhc1NpemUsIHRva2VuKSk7CisgICAgcmV0dXJuIG1fd2ViUGFn
ZS0+c2l6ZSgpOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0NhbnZh
cyhDb29yZGluYXRlZExheWVySUQgaWQsIFBsYXRmb3JtTGF5ZXIqIGNhbnZhc1BsYXRmb3JtTGF5
ZXIpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bGF5b3V0SWZOZWVkZWQoKQogewot
ICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICB1aW50MzJfdCBmcm9udEJ1ZmZlciA9
IGNhbnZhc1BsYXRmb3JtTGF5ZXItPmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpOwotICAgIG1fd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlN5bmND
YW52YXMoaWQsIGZyb250QnVmZmVyKSk7CisgICAgbV93ZWJQYWdlLT5sYXlvdXRJZk5lZWRlZCgp
OwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGVzdHJveUNhbnZhcyhDb29y
ZGluYXRlZExheWVySUQgaWQpCitib29sIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6aXNPcGFx
dWVDb250ZW50cygpCiB7Ci0gICAgaWYgKG1faXNQdXJnaW5nKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6RGVzdHJveUNhbnZhcyhpZCkpOwor
ICAgIHJldHVybiBtX3dlYlBhZ2UtPmRyYXdzQmFja2dyb3VuZCgpICYmICFtX3dlYlBhZ2UtPmRy
YXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCk7CiB9Ci0jZW5kaWYKIAotI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jTGF5ZXJGaWx0ZXJz
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykK
K3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaWRQZXJmb3JtU2NoZWR1bGVkTGF5ZXJG
bHVzaChib29sIGRpZFN5bmMpCiB7Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotI2lm
IEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVz
KGZpbHRlcnMpOwotI2VuZGlmCi0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoaWQsIGZp
bHRlcnMpKTsKLX0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OmNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKLXsKLSAgICAvLyBXZSBuZWVkIHRvIGNyZWF0
ZSB0aGUgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5IG9iamVjdHMgYmVmb3JlIHdlIGdldCB0
byBzZXJpYWxpemUgdGhlCi0gICAgLy8gY3VzdG9tIGZpbHRlcnMgdG8gdGhlIG90aGVyIHByb2Nl
c3MuIFRoYXQncyBiZWNhdXNlIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSBuZWVkcwotICAg
IC8vIHRvIGxpbmsgYmFjayB0byB0aGUgY29vcmRpbmF0b3IsIHNvIHRoYXQgd2UgY2FuIHNlbmQg
YSBtZXNzYWdlIHRvIHRoZSBVSSBwcm9jZXNzIHdoZW4KLSAgICAvLyB0aGUgcHJvZ3JhbSBpcyBu
b3QgbmVlZGVkIGFueW1vcmUuCi0gICAgLy8gTm90ZSB0aGF0IHRoZSBzZXJpYWxpemF0aW9uIHdp
bGwgb25seSBoYXBwZW4gYXQgYSBsYXRlciB0aW1lIGluIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6
RmlsdGVyT3BlcmF0aW9ucz46OmVuY29kZS4KLSAgICAvLyBBdCB0aGF0IHBvaW50IHRoZSBwcm9n
cmFtIHdpbGwgb25seSBiZSBzZXJpYWxpemVkIG9uY2UuIEFsbCB0aGUgb3RoZXIgdGltZXMgaXQg
d2lsbCBvbmx5IHVzZSB0aGUgSUQgb2YgdGhlIHByb2dyYW0uCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZpbHRlck9wZXJh
dGlvbiogb3BlcmF0aW9uID0gZmlsdGVycy5hdChpKTsKLSAgICAgICAgaWYgKG9wZXJhdGlvbi0+
Z2V0T3BlcmF0aW9uVHlwZSgpICE9IEZpbHRlck9wZXJhdGlvbjo6VkFMSURBVEVEX0NVU1RPTSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjb25zdCBWYWxpZGF0ZWRDdXN0b21GaWx0
ZXJPcGVyYXRpb24qIGN1c3RvbU9wZXJhdGlvbiA9IHN0YXRpY19jYXN0PGNvbnN0IFZhbGlkYXRl
ZEN1c3RvbUZpbHRlck9wZXJhdGlvbio+KG9wZXJhdGlvbik7Ci0gICAgICAgIEFTU0VSVChjdXN0
b21PcGVyYXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKS0+aXNJbml0aWFsaXplZCgpKTsKLSAgICAg
ICAgVGV4dHVyZU1hcHBlclBsYXRmb3JtQ29tcGlsZWRQcm9ncmFtKiBwcm9ncmFtID0gY3VzdG9t
T3BlcmF0aW9uLT52YWxpZGF0ZWRQcm9ncmFtKCktPnBsYXRmb3JtQ29tcGlsZWRQcm9ncmFtKCk7
Ci0KLSAgICAgICAgUmVmUHRyPFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eT4gY3VzdG9tRmls
dGVyUHJvZ3JhbVByb3h5OwotICAgICAgICBpZiAocHJvZ3JhbS0+Y2xpZW50KCkpCi0gICAgICAg
ICAgICBjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkgPSBzdGF0aWNfY2FzdDxXZWJDdXN0b21GaWx0
ZXJQcm9ncmFtUHJveHkqPihwcm9ncmFtLT5jbGllbnQoKSk7Ci0gICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5ID0gV2ViQ3VzdG9tRmlsdGVyUHJvZ3Jh
bVByb3h5OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIHByb2dyYW0tPnNldENsaWVudChjdXN0b21G
aWx0ZXJQcm9ncmFtUHJveHkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFjdXN0b21GaWx0
ZXJQcm9ncmFtUHJveHktPmNsaWVudCgpKSB7Ci0gICAgICAgICAgICBjdXN0b21GaWx0ZXJQcm9n
cmFtUHJveHktPnNldENsaWVudCh0aGlzKTsKLSAgICAgICAgICAgIG1fd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZUN1c3RvbUZpbHRl
clByb2dyYW0oY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpLCBjdXN0b21PcGVyYXRpb24t
PnZhbGlkYXRlZFByb2dyYW0oKS0+dmFsaWRhdGVkUHJvZ3JhbUluZm8oKSkpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgLy8gSWYgdGhlIGNsaWVudCB3YXMgbm90IGRpc2Nvbm5lY3Rl
ZCB0aGVuIHRoaXMgY29vcmRpbmF0b3IgbXVzdCBiZSB0aGUgY2xpZW50IGZvciBpdC4KLSAgICAg
ICAgICAgIEFTU0VSVChjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmNsaWVudCgpID09IHRoaXMp
OwotICAgICAgICB9CisgICAgaWYgKG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEKSB7Cisg
ICAgICAgIG1fY29tcG9zaXRpbmdDb29yZGluYXRvckNvbW1hbmRzLT5pbnZva2VGb3JjZVJlcGFp
bnRBc3luY0NhbGxiYWNrKG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEKTsKKyAgICAgICAg
bV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQgPSAwOwogICAgIH0KLX0KLQotdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW1Qcm94eShXZWJD
dXN0b21GaWx0ZXJQcm9ncmFtUHJveHkqIGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSkKLXsKLSAg
ICAvLyBBdCB0aGlzIHRpbWUgdGhlIHNoYWRlciBpcyBub3QgbmVlZGVkIGFueW1vcmUsIHNvIHdl
IHJlbW92ZSBpdCBmcm9tIG91ciBzZXQgYW5kCi0gICAgLy8gc2VuZCBhIG1lc3NhZ2UgdG8gdGhl
IG90aGVyIHByb2Nlc3MgdG8gZGVsZXRlIGl0LgotICAgIG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMu
cmVtb3ZlKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSk7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6UmVtb3ZlQ3VzdG9tRmlsdGVy
UHJvZ3JhbShjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmlkKCkpKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpc2Nvbm5lY3RDdXN0b21GaWx0ZXJQcm9ncmFtcygpCi17
Ci0gICAgLy8gTWFrZSBzdXJlIHRoYXQgV2ViQ29yZSB3aWxsIG5vdCBjYWxsIGludG8gdGhpcyBj
b29yZGluYXRvciBhbnltb3JlLgotICAgIEhhc2hTZXQ8V2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVBy
b3h5Kj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2N1c3RvbUZpbHRlclByb2dyYW1zLmJlZ2luKCk7Ci0g
ICAgZm9yICg7IGl0ZXIgIT0gbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5lbmQoKTsgKytpdGVyKQot
ICAgICAgICAoKml0ZXIpLT5zZXRDbGllbnQoMCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmRldGFjaExheWVyKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciog
bGF5ZXIpCi17Ci0gICAgbV9yZWdpc3RlcmVkTGF5ZXJzLnJlbW92ZShsYXllcik7Ci0gICAgbV9z
aG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fZGV0YWNoZWRMYXllcnMuYXBwZW5kKGxheWVy
LT5pZCgpKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotc3RhdGljIHZvaWQgdXBk
YXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yU2VsZihSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIpCi17
Ci0gICAgLy8gVGhlc2UgY29uZGl0aW9ucyBtdXN0IG1hdGNoIHRoZSBjb25kaXRpb25zIGluIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uLgotICAg
IFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IHJlbmRlckxheWVyLT5iYWNraW5nKCk7Ci0g
ICAgaWYgKCFiYWNraW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKLSAgICBpZiAoIXN0eWxlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5pc091
dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+
cG9zaXRpb24oKSAhPSBGaXhlZFBvc2l0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
IXJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5jb250YWluZXIoKS0+aXNSZW5kZXJWaWV3KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVuZGVyTGF5ZXItPmlzU3RhY2tpbmdDb250ZXh0
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogZ3Jh
cGhpY3NMYXllciA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGJhY2tpbmctPmdyYXBoaWNz
TGF5ZXIoKSk7Ci0gICAgZ3JhcGhpY3NMYXllci0+c2V0Rml4ZWRUb1ZpZXdwb3J0KHRydWUpOwot
fQotCi1zdGF0aWMgdm9pZCB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihSZW5kZXJM
YXllciogcmVuZGVyTGF5ZXIpCi17Ci0gICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yU2Vs
ZihyZW5kZXJMYXllcik7Ci0KLSAgICBpZiAocmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSkKLSAg
ICAgICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIocmVuZGVyTGF5ZXItPmZpcnN0
Q2hpbGQoKSk7Ci0gICAgaWYgKHJlbmRlckxheWVyLT5uZXh0U2libGluZygpKQotICAgICAgICB1
cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyZW5kZXJMYXllci0+bmV4dFNpYmxpbmco
KSk7Ci19CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jRml4ZWRMYXllcnMo
KQotewotICAgIGlmICghbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpIHx8ICFtX3dl
YlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JG
aXhlZFBvc2l0aW9uRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fd2Vi
UGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+aGFzVmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVyTGF5ZXIqIHJvb3RSZW5kZXJMYXllciA9
IG1fd2ViUGFnZS0+bWFpbkZyYW1lKCktPmNvbnRlbnRSZW5kZXJlcigpLT5jb21wb3NpdG9yKCkt
PnJvb3RSZW5kZXJMYXllcigpOwotICAgIEFTU0VSVChyb290UmVuZGVyTGF5ZXIpOwotICAgIGlm
IChyb290UmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgdXBkYXRlT2Zmc2V0RnJv
bVZpZXdwb3J0Rm9yTGF5ZXIocm9vdFJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpOwotfQotCi12
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bG9ja0FuaW1hdGlvbnMoKQotewotICAgIG1f
YW5pbWF0aW9uc0xvY2tlZCA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0QW5pbWF0aW9uc0xvY2tlZCh0cnVlKSk7
Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp1bmxvY2tBbmltYXRpb25zKCkK
LXsKLSAgICBpZiAoIW1fYW5pbWF0aW9uc0xvY2tlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9hbmltYXRpb25zTG9ja2VkID0gZmFsc2U7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0QW5pbWF0aW9uc0xvY2tlZChmYWxz
ZSkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGVyZm9ybVNjaGVkdWxl
ZExheWVyRmx1c2goKQotewotICAgIGlmIChtX2lzU3VzcGVuZGVkIHx8IG1fd2FpdGluZ0ZvclVJ
UHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UgbG9jayB0aGUgYW5pbWF0aW9u
cyB3aGlsZSBwZXJmb3JtaW5nIGxheW91dCwgdG8gYXZvaWQgZmxpY2tlcnMgY2F1c2VkIGJ5IGFu
aW1hdGlvbnMgY29udGludWluZyBpbiB0aGUgVUkgcHJvY2VzcyB3aGlsZQotICAgIC8vIHRoZSB3
ZWIgcHJvY2VzcyBsYXlvdXQgd2FudHMgdG8gY2FuY2VsIHRoZW0uCi0gICAgbG9ja0FuaW1hdGlv
bnMoKTsKLSAgICBzeW5jRGlzcGxheVN0YXRlKCk7Ci0KLSAgICAvLyBXZSBjYW4gdW5sb2NrIHRo
ZSBhbmltYXRpb25zIGJlZm9yZSBmbHVzaGluZyBpZiB0aGVyZSBhcmUgbm8gdmlzaWJsZSBjaGFu
Z2VzLCBmb3IgZXhhbXBsZSBpZiB0aGVyZSBhcmUgY29udGVudCB1cGRhdGVzCi0gICAgLy8gaW4g
YSBsYXllciB3aXRoIG9wYWNpdHkgMC4KLSAgICBib29sIGNhblVubG9ja0JlZm9yZUZsdXNoID0g
IW1faXNWYWxpZCB8fCAhdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0
KCkpLT5oYXNQZW5kaW5nVmlzaWJsZUNoYW5nZXMoKTsKLSAgICBpZiAoY2FuVW5sb2NrQmVmb3Jl
Rmx1c2gpCi0gICAgICAgIHVubG9ja0FuaW1hdGlvbnMoKTsKLQotICAgIGlmICghbV9pc1ZhbGlk
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkp
Ci0gICAgICAgIGRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jRGlzcGxheVN0YXRlKCkKLXsKLSNpZiBFTkFCTEUo
UkVRVUVTVF9BTklNQVRJT05fRlJBTUUpICYmICFVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVf
VElNRVIpICYmICFVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQot
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFueSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgYW5pbWF0aW9u
IGNhbGxiYWNrcyBhcmUgYmVpbmcgZXhlY3V0ZWQgYmVmb3JlIHdlIGZsdXNoIHRoZSBsYXllcnMu
Ci0gICAgbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5zZXJ2aWNl
U2NyaXB0ZWRBbmltYXRpb25zKGNvbnZlcnRTZWNvbmRzVG9ET01UaW1lU3RhbXAoY3VycmVudFRp
bWUoKSkpOwotI2VuZGlmCi0KLSAgICBtX3dlYlBhZ2UtPmxheW91dElmTmVlZGVkKCk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaWRQZXJmb3JtU2NoZWR1bGVkTGF5ZXJG
bHVzaCgpCi17Ci0gICAgaWYgKG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKSB7Cisg
ICAgaWYgKGRpZFN5bmMgJiYgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gpIHsKICAg
ICAgICAgc3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWFJbXBsKj4obV93ZWJQYWdlLT5kcmF3aW5nQXJl
YSgpKS0+bGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKTsKICAgICAgICAgbV9ub3RpZnlBZnRlclNj
aGVkdWxlZExheWVyRmx1c2ggPSBmYWxzZTsKICAgICB9CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpsYXllckZsdXNoVGltZXJGaXJlZChUaW1lcjxDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q+KikKLXsKLSAgICBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOwotfQotCi12
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlUGFnZU92ZXJsYXlMYXllcigpCi17
Ci0gICAgQVNTRVJUKCFtX3BhZ2VPdmVybGF5TGF5ZXIpOwotCi0gICAgbV9wYWdlT3ZlcmxheUxh
eWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMsIHRoaXMpOwotI2lmbmRlZiBOREVCVUcK
LSAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5hbWUoIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dCBwYWdlIG92ZXJsYXkgY29udGVudCIpOwotI2VuZGlmCi0KLSAgICBtX3BhZ2VPdmVybGF5TGF5
ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNp
emUobV93ZWJQYWdlLT5zaXplKCkpOwotCi0gICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fcGFn
ZU92ZXJsYXlMYXllci5nZXQoKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlM
YXllcik7Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAg
bV9wYWdlT3ZlcmxheUxheWVyID0gbnVsbHB0cjsKLX0KLQotUGFzc1JlZlB0cjxDb29yZGluYXRl
ZEltYWdlQmFja2luZz4gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVJbWFnZUJhY2tp
bmdJZk5lZWRlZChJbWFnZSogaW1hZ2UpCi17Ci0gICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCBpbWFnZUlEID0gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmdldENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQoaW1hZ2UpOwotICAgIEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgaXQgPSBtX2lt
YWdlQmFja2luZ3MuZmluZChpbWFnZUlEKTsKLSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmc+IGltYWdlQmFja2luZzsKLSAgICBpZiAoaXQgPT0gbV9pbWFnZUJhY2tpbmdzLmVuZCgp
KSB7Ci0gICAgICAgIGltYWdlQmFja2luZyA9IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjcmVh
dGUodGhpcywgaW1hZ2UpOwotICAgICAgICBtX2ltYWdlQmFja2luZ3MuYWRkKGltYWdlSUQsIGlt
YWdlQmFja2luZyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGltYWdlQmFja2luZyA9IGl0LT52YWx1
ZTsKLQotICAgIHJldHVybiBpbWFnZUJhY2tpbmc7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBp
bWFnZUlEKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVJbWFn
ZUJhY2tpbmcoaW1hZ2VJRCkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwgY29u
c3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkKLXsKLSAgICBtX3Nob3Vs
ZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6VXBkYXRlSW1hZ2VCYWNraW5nKGltYWdlSUQsIGhhbmRs
ZSkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y2xlYXJJbWFnZUJhY2tp
bmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCi17Ci0gICAgbV9z
aG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoaW1h
Z2VJRCkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlSW1hZ2VC
YWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBpZiAobV9p
c1B1cmdpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2ltYWdlQmFja2luZ3Mu
Y29udGFpbnMoaW1hZ2VJRCkpOwotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBt
X2ltYWdlQmFja2luZ3MucmVtb3ZlKGltYWdlSUQpOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlJlbW92ZUltYWdlQmFja2luZyhp
bWFnZUlEKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpmbHVzaFBlbmRp
bmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCkKLXsKLSAgICBJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9y
IGVuZCA9IG1faW1hZ2VCYWNraW5ncy5lbmQoKTsKLSAgICBmb3IgKEltYWdlQmFja2luZ01hcDo6
aXRlcmF0b3IgaXRlciA9IG1faW1hZ2VCYWNraW5ncy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytp
dGVyKQotICAgICAgICBpdGVyLT52YWx1ZS0+dXBkYXRlKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0Ojpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqLCBkb3VibGUgLyogdGltZSAqLykKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpwYWludENvbnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3ND
b250ZXh0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKIHsKKyAgICBtX3dlYlBhZ2UtPmRyYXdS
ZWN0KGdyYXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6bm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKikKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwYWludE92ZXJsYXlDb250ZW50
cyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVj
dCYgY2xpcFJlY3QpCiB7CisgICAgLy8gT3ZlcmxheXMgY29udGFpbiB0cmFuc3BhcmVudCBjb250
ZW50cyBhbmQgd29uJ3QgY2xlYXIgdGhlIGNvbnRleHQgYXMgcGFydCBvZiB0aGVpciByZW5kZXJp
bmcsIHNvIHdlIGRvIGl0IGhlcmUuCisgICAgZ3JhcGhpY3NDb250ZXh0LmNsZWFyUmVjdChjbGlw
UmVjdCk7CisgICAgbV93ZWJQYWdlLT5kcmF3UGFnZU92ZXJsYXkoZ3JhcGhpY3NDb250ZXh0LCBj
bGlwUmVjdCk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwYWludENvbnRl
bnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
UGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpCi17Ci0gICAg
aWYgKGdyYXBoaWNzTGF5ZXIgPT0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyKSB7Ci0gICAg
ICAgIG1fd2ViUGFnZS0+ZHJhd1JlY3QoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX3BhZ2VPdmVy
bGF5TGF5ZXIpIHsKLSAgICAgICAgLy8gT3ZlcmxheXMgY29udGFpbiB0cmFuc3BhcmVudCBjb250
ZW50cyBhbmQgd29uJ3QgY2xlYXIgdGhlIGNvbnRleHQgYXMgcGFydCBvZiB0aGVpciByZW5kZXJp
bmcsIHNvIHdlIGRvIGl0IGhlcmUuCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclJlY3Qo
Y2xpcFJlY3QpOwotICAgICAgICBtX3dlYlBhZ2UtPmRyYXdQYWdlT3ZlcmxheShncmFwaGljc0Nv
bnRleHQsIGNsaXBSZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotUGFzc093blB0
cjxHcmFwaGljc0xheWVyPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUdyYXBoaWNz
TGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQorYm9vbCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6Omhhc1BhZ2VPdmVybGF5KCkgY29uc3QKIHsKLSAgICBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIqIGxheWVyID0gbmV3IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihjbGllbnQpOwot
ICAgIGxheWVyLT5zZXRDb29yZGluYXRvcih0aGlzKTsKLSAgICBtX3JlZ2lzdGVyZWRMYXllcnMu
YWRkKGxheWVyKTsKLSAgICBsYXllci0+c2V0Q29udGVudHNTY2FsZShtX2NvbnRlbnRzU2NhbGUp
OwotICAgIGxheWVyLT5hZGp1c3RWaXNpYmxlUmVjdCgpOwotICAgIHJldHVybiBhZG9wdFB0cihs
YXllcik7CisgICAgcmV0dXJuIG1fd2ViUGFnZS0+aGFzUGFnZU92ZXJsYXkoKTsKIH0KIAogYm9v
bCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKQpAQCAtNjQ2
LDEwMyArMTk0LDI2IEBAIGJvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENv
bXBvc2l0aW5nKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmNyZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90
IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHRpbGVSZWN0KQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsK
LSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpDcmVhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRl
SW5mbykpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dXBkYXRlVGlsZShD
b29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNl
VXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGlsZVJlY3Qp
Ci17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlVwZGF0ZVRpbGVGb3JMYXll
cihsYXllcklELCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKSk7Ci19Ci0KLXZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXll
cklELCB1aW50MzJfdCB0aWxlSUQpCi17Ci0gICAgaWYgKG1faXNQdXJnaW5nKQotICAgICAgICBy
ZXR1cm47Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlJlbW92ZVRpbGVGb3JM
YXllcihsYXllcklELCB0aWxlSUQpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIGNvbnN0IFdlYkNvb3JkaW5h
dGVkU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCi17Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlVXBkYXRlQXRsYXMoYXRs
YXNJRCwgaGFuZGxlKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW1v
dmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKQotewotICAgIGlmIChtX2lzUHVyZ2luZykK
LSAgICAgICAgcmV0dXJuOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OlJlbW92ZVVwZGF0ZUF0bGFzKGF0bGFzSUQpKTsKLX0KLQot
V2ViQ29yZTo6RmxvYXRSZWN0IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dmlzaWJsZUNvbnRl
bnRzUmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKLX0K
LQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0TGF5ZXJBbmltYXRpb25zKENv
b3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYg
YW5pbWF0aW9ucykKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgR3JhcGhp
Y3NMYXllckFuaW1hdGlvbnMgYWN0aXZlQW5pbWF0aW9ucyA9IGFuaW1hdGlvbnMuZ2V0QWN0aXZl
QW5pbWF0aW9ucygpOwotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGFjdGl2ZUFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMgPSBhbmltYXRpb25zLmFu
aW1hdGlvbnMoKS5hdChpKS5rZXlmcmFtZXMoKTsKLSAgICAgICAgaWYgKGtleWZyYW1lcy5wcm9w
ZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0ZXIpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBrZXlmcmFtZXMuc2l6ZSgpOyAr
K2opIHsKLSAgICAgICAgICAgIGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKiBmaWx0ZXJWYWx1
ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKj4oa2V5ZnJhbWVzLmF0
KGkpKTsKLSAgICAgICAgICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoKmZpbHRl
clZhbHVlLT52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotICAgIG1fd2ViUGFn
ZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldExheWVy
QW5pbWF0aW9ucyhsYXllcklELCBhY3RpdmVBbmltYXRpb25zKSk7Ci19Ci0KIHZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3Ip
CiB7Ci0gICAgYm9vbCBjb250ZW50c1JlY3REaWRDaGFuZ2UgPSByZWN0ICE9IG1fdmlzaWJsZUNv
bnRlbnRzUmVjdDsKLSAgICBib29sIGNvbnRlbnRzU2NhbGVEaWRDaGFuZ2UgPSBzY2FsZSAhPSBt
X2NvbnRlbnRzU2NhbGU7Ci0KLSAgICAvLyBBIHplcm8gdHJhamVjdG9yeVZlY3RvciBpbmRpY2F0
ZXMgdGhhdCB0aWxlcyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9ydCBhcmUgcmVxdWVzdGVkLgotICAg
IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5n
ZXQoKSktPnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IodHJhamVjdG9yeVZl
Y3Rvcik7Ci0KLSAgICBpZiAoY29udGVudHNSZWN0RGlkQ2hhbmdlIHx8IGNvbnRlbnRzU2NhbGVE
aWRDaGFuZ2UpIHsKLSAgICAgICAgbV92aXNpYmxlQ29udGVudHNSZWN0ID0gcmVjdDsKLSAgICAg
ICAgbV9jb250ZW50c1NjYWxlID0gc2NhbGU7CisgICAgbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9y
LT5zZXRWaXNpYmxlQ29udGVudHNSZWN0KHJlY3QsIHNjYWxlLCB0cmFqZWN0b3J5VmVjdG9yKTsK
IAotICAgICAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+Ojpp
dGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFz
aFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSBt
X3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAg
ICBpZiAoY29udGVudHNTY2FsZURpZENoYW5nZSkKLSAgICAgICAgICAgICAgICAoKml0KS0+c2V0
Q29udGVudHNTY2FsZShzY2FsZSk7Ci0gICAgICAgICAgICBpZiAoY29udGVudHNSZWN0RGlkQ2hh
bmdlKQotICAgICAgICAgICAgICAgICgqaXQpLT5hZGp1c3RWaXNpYmxlUmVjdCgpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CiAgICAgaWYgKG1fd2ViUGFn
ZS0+dXNlRml4ZWRMYXlvdXQoKSkgewogICAgICAgICAvLyBSb3VuZCB0aGUgcmVjdCBpbnN0ZWFk
IG9mIGVuY2xvc2luZyBpdCB0byBtYWtlIHN1cmUgdGhhdCBpdHMgc2l6ZSBzdGF5cwogICAgICAg
ICAvLyB0aGUgc2FtZSB3aGlsZSBwYW5uaW5nLiBUaGlzIGNhbiBoYXZlIG5hc3R5IGVmZmVjdHMg
b24gbGF5b3V0LgogICAgICAgICBtX3dlYlBhZ2UtPnNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0
KHJvdW5kZWRJbnRSZWN0KHJlY3QpKTsKICAgICB9Ci0KLSAgICBpZiAoY29udGVudHNSZWN0RGlk
Q2hhbmdlKQotICAgICAgICBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSA9IHRydWU7
CiB9CiAKIEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6Omdy
YXBoaWNzTGF5ZXJGYWN0b3J5KCkKIHsKLSAgICByZXR1cm4gdGhpczsKKyAgICByZXR1cm4gbV9j
b21wb3NpdGluZ0Nvb3JkaW5hdG9yLmdldCgpOwogfQogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FKQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlQW5p
bWF0aW9uKCkKIHsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSk7CisgICAgbV9jb21wb3Np
dGluZ0Nvb3JkaW5hdG9yQ29tbWFuZHMtPnJlcXVlc3RBbmltYXRpb25GcmFtZSgpOwogfQogCiB2
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6YW5pbWF0aW9uRnJhbWVSZWFkeSgpCkBAIC03
NTMsODQgKzIyNCwxNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6YW5pbWF0aW9u
RnJhbWVSZWFkeSgpCiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW5kZXJOZXh0
RnJhbWUoKQogewotICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9IGZhbHNlOwotICAgIHNjaGVk
dWxlTGF5ZXJGbHVzaCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0
bGFzZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fdXBkYXRlQXRsYXNlc1tpXS0+ZGlkU3dhcEJ1
ZmZlcnMoKTsKLX0KLQotYm9vbCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmxheWVyVHJlZVRp
bGVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFtX2lzU3VzcGVuZGVkICYm
ICFtX3dhaXRpbmdGb3JVSVByb2Nlc3M7CisgICAgbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yLT5y
ZW5kZXJOZXh0RnJhbWUoKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnB1
cmdlQmFja2luZ1N0b3JlcygpCiB7Ci0gICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IHB1cmdpbmdU
b2dnbGUobV9pc1B1cmdpbmcsIHRydWUpOwotCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVu
ZCgpOwotICAgIGZvciAoSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIq
Pjo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICAoKml0KS0+cHVyZ2VCYWNraW5nU3RvcmVzKCk7Ci0KLSAgICBtX2ltYWdl
QmFja2luZ3MuY2xlYXIoKTsKLSAgICBtX3VwZGF0ZUF0bGFzZXMuY2xlYXIoKTsKLX0KLQotUGFz
c093blB0cjxHcmFwaGljc0NvbnRleHQ+IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6YmVnaW5D
b250ZW50VXBkYXRlKGNvbnN0IEludFNpemUmIHNpemUsIENvb3JkaW5hdGVkU3VyZmFjZTo6Rmxh
Z3MgZmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBJbnRQb2ludCYgb2Zmc2V0KQotewotICAgIE93
blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dDsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV91cGRhdGVBdGxhc2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFVwZGF0
ZUF0bGFzKiBhdGxhcyA9IG1fdXBkYXRlQXRsYXNlc1tpXS5nZXQoKTsKLSAgICAgICAgaWYgKGF0
bGFzLT5zdXBwb3J0c0FscGhhKCkgPT0gKGZsYWdzICYgQ29vcmRpbmF0ZWRTdXJmYWNlOjpTdXBw
b3J0c0FscGhhKSkgewotICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHJldHVybiBudWxsIGlmIHRo
ZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIgc3BhY2UuCi0gICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQgPSBhdGxhcy0+YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGF0bGFzSUQsIHNp
emUsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoZ3JhcGhpY3NDb250ZXh0KQotICAgICAgICAg
ICAgICAgIHJldHVybiBncmFwaGljc0NvbnRleHQucmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgc3RhdGljIGNvbnN0IGludCBTY3JhdGNoQnVmZmVyRGltZW5zaW9uID0gMTAyNDsg
Ly8gU2hvdWxkIGJlIGEgcG93ZXIgb2YgdHdvLgotICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBlbmQo
YWRvcHRQdHIobmV3IFVwZGF0ZUF0bGFzKHRoaXMsIFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24sIGZs
YWdzKSkpOwotICAgIHNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpOwotICAgIHJldHVy
biBtX3VwZGF0ZUF0bGFzZXMubGFzdCgpLT5iZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIo
YXRsYXNJRCwgc2l6ZSwgb2Zmc2V0KTsKLX0KLQotY29uc3QgZG91YmxlIFJlbGVhc2VJbmFjdGl2
ZUF0bGFzZXNUaW1lckludGVydmFsID0gMC41OwotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6c2NoZWR1bGVSZWxlYXNlSW5hY3RpdmVBdGxhc2VzKCkKLXsKLSAgICBpZiAoIW1fcmVs
ZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fcmVsZWFzZUlu
YWN0aXZlQXRsYXNlc1RpbWVyLnN0YXJ0UmVwZWF0aW5nKFJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNU
aW1lckludGVydmFsKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbGVh
c2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKFRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dD4qKQotewotICAgIC8vIFdlIGFsd2F5cyB3YW50IHRvIGtlZXAgb25lIGF0bGFzIGZvciBub24t
Y29tcG9zaXRlZCBjb250ZW50LgotICAgIE93blB0cjxVcGRhdGVBdGxhcz4gYXRsYXNUb0tlZXBB
bnl3YXk7Ci0gICAgYm9vbCBmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQg
PSBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gbV91cGRhdGVBdGxhc2VzLnNpemUoKSAtIDE7ICBp
ID49IDA7IC0taSkgewotICAgICAgICBVcGRhdGVBdGxhcyogYXRsYXMgPSBtX3VwZGF0ZUF0bGFz
ZXNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICghYXRsYXMtPmlzSW5Vc2UoKSkKLSAgICAgICAgICAg
IGF0bGFzLT5hZGRUaW1lSW5hY3RpdmUoUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2
YWwpOwotICAgICAgICBib29sIHVzYWJsZUZvck5vbkNvbXBvc2l0ZWRDb250ZW50ID0gIWF0bGFz
LT5zdXBwb3J0c0FscGhhKCk7Ci0gICAgICAgIGlmIChhdGxhcy0+aXNJbmFjdGl2ZSgpKSB7Ci0g
ICAgICAgICAgICBpZiAoIWZvdW5kQWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVudCAm
JiAhYXRsYXNUb0tlZXBBbnl3YXkgJiYgdXNhYmxlRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQpCi0g
ICAgICAgICAgICAgICAgYXRsYXNUb0tlZXBBbnl3YXkgPSBtX3VwZGF0ZUF0bGFzZXNbaV0ucmVs
ZWFzZSgpOwotICAgICAgICAgICAgbV91cGRhdGVBdGxhc2VzLnJlbW92ZShpKTsKLSAgICAgICAg
fSBlbHNlIGlmICh1c2FibGVGb3JOb25Db21wb3NpdGVkQ29udGVudCkKLSAgICAgICAgICAgIGZv
dW5kQWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVudCA9IHRydWU7Ci0gICAgfQotCi0g
ICAgaWYgKCFmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgJiYgYXRsYXNU
b0tlZXBBbnl3YXkpCi0gICAgICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBlbmQoYXRsYXNUb0tlZXBB
bnl3YXkucmVsZWFzZSgpKTsKLQotICAgIGlmIChtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpIDw9IDEp
Ci0gICAgICAgIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyLnN0b3AoKTsKKyAgICBtX2Nv
bXBvc2l0aW5nQ29vcmRpbmF0b3ItPnB1cmdlQmFja2luZ1N0b3JlcygpOwogfQogCiB2b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6
OkNvbG9yJiBjb2xvcikKIHsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IpKTsKKyAgICBt
X2NvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kcy0+c2V0QmFja2dyb3VuZENvbG9yKGNvbG9y
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVy
VHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDBjNjhiYjUxZTE3ZjRi
MzgwMTlkNGQ3ODk2YjYwZGU0NTA1MzhlYWEuLmFmZjlhZjk1NTViMTRkMDFiOGIwNjFmYWNjZmQ4
OWQ0OGI1NjY1NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdC5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQg
KEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisg
ICAgQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDM5ICsyMywyNyBAQAogCiAjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQogCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
LmgiCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCIKKyNpbmNsdWRlICJDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgIlVw
ZGF0ZUF0bGFzLmgiCi0jaW5jbHVkZSAiV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0xheWVyRmFjdG9yeS5oPgorI2luY2x1ZGUgIldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JD
b21tYW5kcy5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0jaW5jbHVkZSAiV2ViQ3VzdG9tRmlsdGVy
UHJvZ3JhbVByb3h5LmgiCi0jZW5kaWYKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdyYXBo
aWNzTGF5ZXJGYWN0b3J5OworfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgVXBkYXRl
SW5mbzsKIGNsYXNzIFdlYlBhZ2U7CiAKLWNsYXNzIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCA6
IHB1YmxpYyBMYXllclRyZWVIb3N0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAg
LCBwdWJsaWMgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgLCBwdWJsaWMgQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5hdG9yCi0gICAgLCBwdWJsaWMgVXBkYXRlQXRs
YXNDbGllbnQKLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeQotI2lm
IEVOQUJMRShDU1NfU0hBREVSUykKLSAgICAsIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNs
aWVudAotI2VuZGlmCi17CitjbGFzcyBDb29yZGluYXRlZExheWVyVHJlZUhvc3QgOiBwdWJsaWMg
TGF5ZXJUcmVlSG9zdCwgcHVibGljIENvbXBvc2l0aW5nQ29vcmRpbmF0b3JDbGllbnQgewogcHVi
bGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4gY3Jl
YXRlKFdlYlBhZ2UqKTsKICAgICB2aXJ0dWFsIH5Db29yZGluYXRlZExheWVyVHJlZUhvc3QoKTsK
IAorICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gTGF5ZXJUcmVlSG9zdAogICAgIHZpcnR1
YWwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCgpIHsgcmV0dXJuIG1f
bGF5ZXJUcmVlQ29udGV4dDsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckZsdXNoU2NoZWR1
bGluZ0VuYWJsZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaCgp
OwpAQCAtNzQsMTMzICs2Myw0NCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFBhZ2VP
dmVybGF5T3BhY2l0eShmbG9hdCk7CiAgICAgdmlydHVhbCBib29sIHBhZ2VPdmVybGF5U2hvdWxk
QXBwbHlGYWRlV2hlblBhaW50aW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZp
cnR1YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IHRydWU7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gZmFsc2U7
IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5n
KCk7CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZVJlbmRlcmluZygpOwogICAgIHZpcnR1YWwgdm9p
ZCBkZXZpY2VTY2FsZUZhY3RvckRpZENoYW5nZSgpIHsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoV2Vi
Q29yZTo6SW1hZ2UqKSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKENv
b3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5m
byYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGls
ZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0
ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92
ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQpOwotICAgIHZpcnR1YWwg
V2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdDsKICAgICB2aXJ0
dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7CiAgICAgdmlydHVhbCB2b2lkIHB1cmdlQmFja2lu
Z1N0b3JlcygpOwotICAgIHZpcnR1YWwgYm9vbCBsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQo
KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCBzY2FsZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2lu
dCYpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBD
OjpNZXNzYWdlRGVjb2RlciYpOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZh
Y3RvcnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgT1ZFUlJJREU7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgc3luY0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBDb29yZGluYXRlZExh
eWVySW5mbyYpOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJDaGlsZHJlbihDb29yZGluYXRl
ZExheWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdmlydHVh
bCB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJik7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQot
ICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29u
c3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpOwotI2VuZGlmCi0jaWYgVVNFKEdSQVBISUNT
X1NVUkZBQ0UpCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVy
SUQsIFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQg
c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQsIFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqKSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVy
SUQpIE9WRVJSSURFOwotI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4
ZWRMYXllcnMoKTsKLQotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgQ29vcmRp
bmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMyX3QmIGF0bGFzSUQsIFdlYkNvcmU6OkludFBvaW50
Jik7Ci0KLSAgICAvLyBVcGRhdGVBdGxhc0NsaWVudAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVV
cGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBjb25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6
OkhhbmRsZSYpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBh
dGxhc0lEKTsKLQogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKICAgICB2aXJ0
dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSBPVkVSUklERTsKICNlbmRpZgogICAgIHZpcnR1
YWwgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBPVkVSUklE
RTsKIAorICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gQ29tcG9zaXRpbmdDb29yZGluYXRv
ckNsaWVudAorICAgIHZpcnR1YWwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgdmlld1NpemUoKSBj
b25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybVNjaGVkdWxlZExheWVy
Rmx1c2goYm9vbCBkaWRTeW5jKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNPcGFxdWVD
b250ZW50cygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRJZk5lZWRlZCgpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRPdmVybGF5Q29udGVudHMoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgYm9vbCBoYXNQYWdlT3ZlcmxheSgpIGNvbnN0IE9WRVJSSURFOworCiBwcm90ZWN0ZWQ6
CiAgICAgZXhwbGljaXQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KFdlYlBhZ2UqKTsKIAogcHJp
dmF0ZToKLSAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlm
eUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSB0
aW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBj
bGlwUmVjdCk7Ci0KLSAgICAvLyBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0b3IK
LSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVJbWFnZUJhY2tpbmcoQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5k
bGUmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50
cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOwot
Ci0gICAgdm9pZCBmbHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7Ci0KLSAgICAvLyBH
cmFwaGljc0xheWVyRmFjdG9yeQotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFw
aGljc0xheWVyPiBjcmVhdGVHcmFwaGljc0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGll
bnQqKSBPVkVSUklERTsKLQotICAgIC8vIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdAotICAgIHZv
aWQgaW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQoKTsKLSAgICB2b2lkIGNy
ZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKLSAgICB2b2lkIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVy
KCk7Ci0gICAgYm9vbCBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKLSAgICB2b2lkIGNhbmNl
bFBlbmRpbmdMYXllckZsdXNoKCk7Ci0gICAgdm9pZCBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVz
aCgpOwotICAgIHZvaWQgZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKLSAgICB2b2lk
IHN5bmNEaXNwbGF5U3RhdGUoKTsKLSAgICB2b2lkIGxvY2tBbmltYXRpb25zKCk7Ci0gICAgdm9p
ZCB1bmxvY2tBbmltYXRpb25zKCk7Ci0KLSAgICB2b2lkIGxheWVyRmx1c2hUaW1lckZpcmVkKFdl
YkNvcmU6OlRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4qKTsKLQotICAgIHZvaWQgc2No
ZWR1bGVSZWxlYXNlSW5hY3RpdmVBdGxhc2VzKCk7CiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFU
SU9OX0ZSQU1FKQogICAgIHZvaWQgYW5pbWF0aW9uRnJhbWVSZWFkeSgpOwogI2VuZGlmCiAKLSAg
ICB2b2lkIHJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4qKTsKLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAg
ICAvLyBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHlDbGllbnQKLSAgICB2b2lkIHJlbW92ZUN1
c3RvbUZpbHRlclByb2dyYW1Qcm94eShXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkqKTsKLQot
ICAgIHZvaWQgY2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhjb25zdCBXZWJDb3JlOjpG
aWx0ZXJPcGVyYXRpb25zJik7Ci0gICAgdm9pZCBkaXNjb25uZWN0Q3VzdG9tRmlsdGVyUHJvZ3Jh
bXMoKTsKLSNlbmRpZgotCi0gICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9v
dExheWVyOwotCi0gICAgLy8gVGhlIGxheWVyIHdoaWNoIGNvbnRhaW5zIGFsbCBub24tY29tcG9z
aXRlZCBjb250ZW50LgotICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX25vbkNv
bXBvc2l0ZWRDb250ZW50TGF5ZXI7Ci0KLSAgICAvLyBUaGUgcGFnZSBvdmVybGF5IGxheWVyLiBX
aWxsIGJlIG51bGwgaWYgdGhlcmUncyBubyBwYWdlIG92ZXJsYXkuCi0gICAgT3duUHRyPFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI+IG1fcGFnZU92ZXJsYXlMYXllcjsKLQotICAgIEhhc2hTZXQ8V2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj4gbV9yZWdpc3RlcmVkTGF5ZXJzOwotICAg
IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+IG1fZGV0YWNoZWRMYXllcnM7Ci0gICAgdHlwZWRl
ZiBIYXNoTWFwPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxDb29yZGluYXRlZElt
YWdlQmFja2luZz4gPiBJbWFnZUJhY2tpbmdNYXA7Ci0gICAgSW1hZ2VCYWNraW5nTWFwIG1faW1h
Z2VCYWNraW5nczsKLSAgICBWZWN0b3I8T3duUHRyPFVwZGF0ZUF0bGFzPiA+IG1fdXBkYXRlQXRs
YXNlczsKLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBIYXNoU2V0PFdlYkN1c3RvbUZp
bHRlclByb2dyYW1Qcm94eSo+IG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXM7Ci0jZW5kaWYKKyAgICBS
ZWZQdHI8V2ViQ29tcG9zaXRpbmdDb29yZGluYXRvckNvbW1hbmRzPiBtX2NvbXBvc2l0aW5nQ29v
cmRpbmF0b3JDb21tYW5kczsKKyAgICBPd25QdHI8Q29tcG9zaXRpbmdDb29yZGluYXRvcj4gbV9j
b21wb3NpdGluZ0Nvb3JkaW5hdG9yOwogCiAgICAgYm9vbCBtX25vdGlmeUFmdGVyU2NoZWR1bGVk
TGF5ZXJGbHVzaDsKLSAgICBib29sIG1faXNWYWxpZDsKLSAgICAvLyBXZSBkb24ndCBzZW5kIHRo
ZSBtZXNzYWdlcyByZWxhdGVkIHRvIHJlbGVhc2luZyByZXNvdXJjZXMgdG8gVUkgUHJvY2VzcyBk
dXJpbmcgcHVyZ2luZywgYmVjYXVzZSBVSSBQcm9jZXNzIGFscmVhZHkgaGFkIHJlbW92ZWQgYWxs
IHJlc291cmNlcy4KLSAgICBib29sIG1faXNQdXJnaW5nOwotCi0gICAgYm9vbCBtX3dhaXRpbmdG
b3JVSVByb2Nlc3M7Ci0gICAgYm9vbCBtX2lzU3VzcGVuZGVkOwotICAgIFdlYkNvcmU6OkZsb2F0
UmVjdCBtX3Zpc2libGVDb250ZW50c1JlY3Q7Ci0gICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOwot
ICAgIGJvb2wgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGU7CiAKICAgICBMYXllclRy
ZWVDb250ZXh0IG1fbGF5ZXJUcmVlQ29udGV4dDsKLSAgICBib29sIG1fc2hvdWxkU3luY0ZyYW1l
OwotICAgIGJvb2wgbV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXI7Ci0gICAgV2Vi
Q29yZTo6VGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiBtX2xheWVyRmx1c2hUaW1lcjsK
LSAgICBXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IG1fcmVsZWFzZUlu
YWN0aXZlQXRsYXNlc1RpbWVyOwotICAgIGJvb2wgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJs
ZWQ7CiAgICAgdWludDY0X3QgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQ7Ci0gICAgYm9v
bCBtX2FuaW1hdGlvbnNMb2NrZWQ7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yQ29tbWFuZHMuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvckNvbW1hbmRzLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iMzE0MTc2MzgyYWViYTMxZjU0OTRiNmMwMzBlYmU2NWFiM2MyM2FkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvckNvbW1hbmRzLmNwcApAQCAt
MCwwICsxLDI2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29t
cGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAi
V2ViQ29tcG9zaXRpbmdDb29yZGluYXRvckNvbW1hbmRzLmgiCisKKyNpbmNsdWRlICJDb29yZGlu
YXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTWVzc2FnZUlELmgiCisjaW5jbHVk
ZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMu
aCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMu
aCIKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJWYWxp
ZGF0ZWRQcm9ncmFtLmgiCisjaW5jbHVkZSAiVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9u
LmgiCisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitQYXNzUmVmUHRyPFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kcz4gV2Vi
Q29tcG9zaXRpbmdDb29yZGluYXRvckNvbW1hbmRzOjpjcmVhdGUoV2ViUGFnZSogd2ViUGFnZSkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21t
YW5kcyh3ZWJQYWdlKSk7Cit9CisKK1dlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kczo6
fldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kcygpCit7CisjaWYgRU5BQkxFKENTU19T
SEFERVJTKQorICAgIGRpc2Nvbm5lY3RDdXN0b21GaWx0ZXJQcm9ncmFtcygpOworI2VuZGlmCit9
CisKK1dlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kczo6V2ViQ29tcG9zaXRpbmdDb29y
ZGluYXRvckNvbW1hbmRzKFdlYlBhZ2UqIHdlYlBhZ2UpCisgICAgOiBtX3dlYlBhZ2Uod2ViUGFn
ZSkKK3sKKworfQorCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kczo6c2V0
Um9vdENvbXBvc2l0aW5nTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQoreworICAgIG1fd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldFJv
b3RDb21wb3NpdGluZ0xheWVyKGlkKSk7Cit9CisKK3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29yZGlu
YXRvckNvbW1hbmRzOjpzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklE
IGlkLCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYgaW5mbykKK3sKKyAgICBtX3dlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRDb21wb3Np
dGluZ0xheWVyU3RhdGUoaWQsIGluZm8pKTsKK30KKwordm9pZCBXZWJDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yQ29tbWFuZHM6OnNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExh
eWVySUQgaWQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBjaGlsZHJlbikKK3sK
KyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpTZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oaWQsIGNoaWxkcmVuKSk7Cit9CisKKyNp
ZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21t
YW5kczo6c2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQoreworI2lmIEVOQUJMRShDU1NfU0hBREVS
UykKKyAgICBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKGZpbHRlcnMpOworI2VuZGlm
CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoaWQsIGZpbHRlcnMpKTsKK30KKyNlbmRp
ZgorCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kczo6ZGVsZXRlQ29tcG9z
aXRpbmdMYXllcihDb29yZGluYXRlZExheWVySUQgaWQpCit7CisgICAgbV93ZWJQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6RGVsZXRlQ29tcG9zaXRp
bmdMYXllcihpZCkpOworfQorCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5k
czo6Y3JlYXRlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJf
dCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5m
byYgdXBkYXRlSW5mbykKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlE
LCB0aWxlUmVjdCwgdXBkYXRlSW5mbykpOworfQorCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3JDb21tYW5kczo6dXBkYXRlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXll
cklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBTdXJm
YWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpVcGRhdGVUaWxlRm9yTGF5ZXIobGF5
ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbykpOworfQorCit2b2lkIFdlYkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kczo6cmVtb3ZlVGlsZUZvckxheWVyKENvb3JkaW5hdGVk
TGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQpCit7CisgICAgbV93ZWJQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6UmVtb3ZlVGlsZUZvckxh
eWVyKGxheWVySUQsIHRpbGVJRCkpOworfQorCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0
b3JDb21tYW5kczo6Y3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgY29uc3QgV2Vi
Q29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBtX3dlYlBhZ2UtPnNl
bmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVVcGRhdGVB
dGxhcyhhdGxhc0lELCBoYW5kbGUpKTsKK30KKwordm9pZCBXZWJDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yQ29tbWFuZHM6OnJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCit7CisgICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
UmVtb3ZlVXBkYXRlQXRsYXMoYXRsYXNJRCkpOworfQorCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3JDb21tYW5kczo6Y3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVJbWFnZUJhY2tpbmcoaW1hZ2VJRCkpOworfQor
Cit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kczo6dXBkYXRlSW1hZ2VCYWNr
aW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwgY29uc3QgV2ViQ29vcmRpbmF0
ZWRTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpVcGRhdGVJbWFnZUJhY2tpbmcoaW1h
Z2VJRCwgaGFuZGxlKSk7Cit9CisKK3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvckNvbW1h
bmRzOjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQg
aW1hZ2VJRCkKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKGltYWdlSUQpKTsKK30K
Kwordm9pZCBXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yQ29tbWFuZHM6OnJlbW92ZUltYWdlQmFj
a2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6UmVtb3ZlSW1h
Z2VCYWNraW5nKGltYWdlSUQpKTsKK30KKwordm9pZCBXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
Q29tbWFuZHM6OmRpZFJlbmRlckZyYW1lKGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSwgY29u
c3QgSW50UmVjdCYgY292ZXJlZFJlY3QpCit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6RGlkUmVuZGVyRnJhbWUoY29udGVudHNT
aXplLCBjb3ZlcmVkUmVjdCkpOworfQorCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JD
b21tYW5kczo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRp
b24pCit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24ocG9zaXRpb24pKTsKK30KKworI2lm
IFVTRShHUkFQSElDU19TVVJGQUNFKQordm9pZCBXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yQ29t
bWFuZHM6OmNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEludFNpemUm
IGNhbnZhc1NpemUsIGNvbnN0IEdyYXBoaWNzU3VyZmFjZVRva2VuJiB0b2tlbikKK3sKKyAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpD
cmVhdGVDYW52YXMoaWQsIGNhbnZhc1NpemUsIHRva2VuKSk7Cit9CisKK3ZvaWQgV2ViQ29tcG9z
aXRpbmdDb29yZGluYXRvckNvbW1hbmRzOjpzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBp
ZCwgdWludDMyX3QgZnJvbnRCdWZmZXIpCit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U3luY0NhbnZhcyhpZCwgZnJvbnRCdWZm
ZXIpKTsKK30KKwordm9pZCBXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yQ29tbWFuZHM6OmRlc3Ry
b3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQoreworICAgIG1fd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkRlc3Ryb3lDYW52YXMoaWQp
KTsKK30KKyNlbmRpZgorCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kczo6
c2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCBjb25zdCBHcmFw
aGljc0xheWVyQW5pbWF0aW9ucyYgYWN0aXZlQW5pbWF0aW9ucykKK3sKKyNpZiBFTkFCTEUoQ1NT
X1NIQURFUlMpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhY3RpdmVBbmltYXRpb25zLmFu
aW1hdGlvbnMoKS5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVlTGlz
dCYga2V5ZnJhbWVzID0gYWN0aXZlQW5pbWF0aW9ucy5hbmltYXRpb25zKCkuYXQoaSkua2V5ZnJh
bWVzKCk7CisgICAgICAgIGlmIChrZXlmcmFtZXMucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3Bl
cnR5V2Via2l0RmlsdGVyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGZvciAoc2l6
ZV90IGogPSAwOyBqIDwga2V5ZnJhbWVzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICBjb25z
dCBGaWx0ZXJBbmltYXRpb25WYWx1ZSogZmlsdGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBG
aWx0ZXJBbmltYXRpb25WYWx1ZSo+KGtleWZyYW1lcy5hdChpKSk7CisgICAgICAgICAgICBjaGVj
a0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKCpmaWx0ZXJWYWx1ZS0+dmFsdWUoKSk7CisgICAg
ICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldExheWVyQW5pbWF0aW9ucyhsYXllcklELCBh
Y3RpdmVBbmltYXRpb25zKSk7Cit9CisKK3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvckNv
bW1hbmRzOjpzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wgaXNMb2NrZWQpCit7CisgICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0QW5p
bWF0aW9uc0xvY2tlZChpc0xvY2tlZCkpOworfQorCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3JDb21tYW5kczo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBj
b2xvcikKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpTZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IpKTsKK30KKworI2lmIEVOQUJM
RShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKK3ZvaWQgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRv
ckNvbW1hbmRzOjpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKQoreworICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlJlcXVlc3RBbmltYXRp
b25GcmFtZSgpKTsKK30KKyNlbmRpZgorCit2b2lkIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JD
b21tYW5kczo6aW52b2tlRm9yY2VSZXBhaW50QXN5bmNDYWxsYmFjayh1aW50NjRfdCBjYWxsYmFj
a0lEKQoreworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpWb2lk
Q2FsbGJhY2soY2FsbGJhY2tJRCkpOworfQorCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQordm9p
ZCBXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yQ29tbWFuZHM6OmNoZWNrQ3VzdG9tRmlsdGVyUHJv
Z3JhbVByb3hpZXMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3sKKyAgICAvLyBX
ZSBuZWVkIHRvIGNyZWF0ZSB0aGUgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5IG9iamVjdHMg
YmVmb3JlIHdlIGdldCB0byBzZXJpYWxpemUgdGhlCisgICAgLy8gY3VzdG9tIGZpbHRlcnMgdG8g
dGhlIG90aGVyIHByb2Nlc3MuIFRoYXQncyBiZWNhdXNlIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Q
cm94eSBuZWVkcworICAgIC8vIHRvIGxpbmsgYmFjayB0byB0aGUgY29vcmRpbmF0b3IsIHNvIHRo
YXQgd2UgY2FuIHNlbmQgYSBtZXNzYWdlIHRvIHRoZSBVSSBwcm9jZXNzIHdoZW4KKyAgICAvLyB0
aGUgcHJvZ3JhbSBpcyBub3QgbmVlZGVkIGFueW1vcmUuCisgICAgLy8gTm90ZSB0aGF0IHRoZSBz
ZXJpYWxpemF0aW9uIHdpbGwgb25seSBoYXBwZW4gYXQgYSBsYXRlciB0aW1lIGluIEFyZ3VtZW50
Q29kZXI8V2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucz46OmVuY29kZS4KKyAgICAvLyBBdCB0aGF0
IHBvaW50IHRoZSBwcm9ncmFtIHdpbGwgb25seSBiZSBzZXJpYWxpemVkIG9uY2UuIEFsbCB0aGUg
b3RoZXIgdGltZXMgaXQgd2lsbCBvbmx5IHVzZSB0aGUgSUQgb2YgdGhlIHByb2dyYW0uCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNv
bnN0IEZpbHRlck9wZXJhdGlvbiogb3BlcmF0aW9uID0gZmlsdGVycy5hdChpKTsKKyAgICAgICAg
aWYgKG9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpICE9IEZpbHRlck9wZXJhdGlvbjo6VkFM
SURBVEVEX0NVU1RPTSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjb25zdCBWYWxp
ZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24qIGN1c3RvbU9wZXJhdGlvbiA9IHN0YXRpY19jYXN0
PGNvbnN0IFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbio+KG9wZXJhdGlvbik7CisgICAg
ICAgIEFTU0VSVChjdXN0b21PcGVyYXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKS0+aXNJbml0aWFs
aXplZCgpKTsKKyAgICAgICAgVGV4dHVyZU1hcHBlclBsYXRmb3JtQ29tcGlsZWRQcm9ncmFtKiBw
cm9ncmFtID0gY3VzdG9tT3BlcmF0aW9uLT52YWxpZGF0ZWRQcm9ncmFtKCktPnBsYXRmb3JtQ29t
cGlsZWRQcm9ncmFtKCk7CisKKyAgICAgICAgUmVmUHRyPFdlYkN1c3RvbUZpbHRlclByb2dyYW1Q
cm94eT4gY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5OworICAgICAgICBpZiAocHJvZ3JhbS0+Y2xp
ZW50KCkpCisgICAgICAgICAgICBjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkgPSBzdGF0aWNfY2Fz
dDxXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkqPihwcm9ncmFtLT5jbGllbnQoKSk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5ID0gV2ViQ3Vz
dG9tRmlsdGVyUHJvZ3JhbVByb3h5OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIHByb2dyYW0tPnNl
dENsaWVudChjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKCFjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmNsaWVudCgpKSB7CisgICAgICAgICAgICBj
dXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPnNldENsaWVudCh0aGlzKTsKKyAgICAgICAgICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNy
ZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpLCBj
dXN0b21PcGVyYXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKS0+dmFsaWRhdGVkUHJvZ3JhbUluZm8o
KSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gSWYgdGhlIGNsaWVudCB3YXMg
bm90IGRpc2Nvbm5lY3RlZCB0aGVuIHRoaXMgY29vcmRpbmF0b3IgbXVzdCBiZSB0aGUgY2xpZW50
IGZvciBpdC4KKyAgICAgICAgICAgIEFTU0VSVChjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmNs
aWVudCgpID09IHRoaXMpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFdlYkNvbXBvc2l0
aW5nQ29vcmRpbmF0b3JDb21tYW5kczo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KFdl
YkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSogY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KQorewor
ICAgIC8vIEF0IHRoaXMgdGltZSB0aGUgc2hhZGVyIGlzIG5vdCBuZWVkZWQgYW55bW9yZSwgc28g
d2UgcmVtb3ZlIGl0IGZyb20gb3VyIHNldCBhbmQKKyAgICAvLyBzZW5kIGEgbWVzc2FnZSB0byB0
aGUgb3RoZXIgcHJvY2VzcyB0byBkZWxldGUgaXQuCisgICAgbV9jdXN0b21GaWx0ZXJQcm9ncmFt
cy5yZW1vdmUoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpSZW1vdmVDdXN0b21GaWx0
ZXJQcm9ncmFtKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+aWQoKSkpOworfQorCit2b2lkIFdl
YkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kczo6ZGlzY29ubmVjdEN1c3RvbUZpbHRlclBy
b2dyYW1zKCkKK3sKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCBXZWJDb3JlIHdpbGwgbm90IGNhbGwg
aW50byB0aGlzIGNvb3JkaW5hdG9yIGFueW1vcmUuCisgICAgSGFzaFNldDxXZWJDdXN0b21GaWx0
ZXJQcm9ncmFtUHJveHkqPjo6aXRlcmF0b3IgaXRlciA9IG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMu
YmVnaW4oKTsKKyAgICBmb3IgKDsgaXRlciAhPSBtX2N1c3RvbUZpbHRlclByb2dyYW1zLmVuZCgp
OyArK2l0ZXIpCisgICAgICAgICgqaXRlciktPnNldENsaWVudCgwKTsKK30KKyNlbmRpZgorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL1dlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kcy5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29tcG9z
aXRpbmdDb29yZGluYXRvckNvbW1hbmRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjY0OTlkYTA4MmE1ZTFhZmE0
NTY0NWE3NTFlOGFlYTE2ZGU4ZGNjNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3JDb21tYW5kcy5oCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAq
IENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kc19o
CisjZGVmaW5lIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kc19oCisKKyNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
Q29tbWFuZHMuaCIKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyNpbmNsdWRlICJXZWJDdXN0
b21GaWx0ZXJQcm9ncmFtUHJveHkuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y2xhc3MgV2ViUGFnZTsKKworY2xhc3MgV2ViQ29tcG9zaXRpbmdDb29yZGluYXRvckNvbW1hbmRz
IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViQ29tcG9zaXRpbmdDb29yZGluYXRvckNvbW1hbmRzPgor
ICAgICwgcHVibGljIENvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kcworI2lmIEVOQUJMRShD
U1NfU0hBREVSUykKKyAgICAsIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudAorI2Vu
ZGlmCit7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViQ29tcG9zaXRpbmdDb29yZGluYXRv
ckNvbW1hbmRzKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8V2ViQ29tcG9zaXRpbmdDb29yZGluYXRvckNvbW1hbmRzPiBjcmVhdGUoV2Vi
UGFnZSopOworCisgICAgfldlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21tYW5kcygpOworCisg
ICAgLy8gQ29tcG9zaXRpbmdDb29yZGluYXRvckNvbW1hbmRzCisgICAgdmlydHVhbCB2b2lkIHNl
dFJvb3RDb21wb3NpdGluZ0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCkgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQs
IGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IHNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZl
Y3RvcjxDb29yZGluYXRlZExheWVySUQ+JikgT1ZFUlJJREU7CisjaWYgRU5BQkxFKENTU19GSUxU
RVJTKQorICAgIHZpcnR1YWwgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhDb29yZGlu
YXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKSBPVkVSUklERTsK
KyNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVyKENvb3JkaW5h
dGVkTGF5ZXJJRCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZUZvckxh
eWVyKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGls
ZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZUZvckxheWVyKENvb3JkaW5hdGVk
TGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBj
cmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBjb25zdCBXZWJDb29yZGluYXRlZFN1
cmZhY2U6OkhhbmRsZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRhdGVB
dGxhcyh1aW50MzJfdCBhdGxhc0lEKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBjcmVh
dGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
LCBjb25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVuZGVyRnJhbWUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IGRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvc2l0
aW9uKSBPVkVSUklERTsKKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4mKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IGZy
b250QnVmZmVyKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveUNhbnZhcyhDb29y
ZGluYXRlZExheWVySUQpIE9WRVJSSURFOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckFuaW1hdGlvbnMmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QW5pbWF0
aW9uc0xvY2tlZChib29sKSBPVkVSUklERTsKKworICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9y
KGNvbnN0IFdlYkNvcmU6OkNvbG9yJik7CisKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05f
RlJBTUUpCisgICAgdm9pZCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTsKKyNlbmRpZgorICAgIHZv
aWQgaW52b2tlRm9yY2VSZXBhaW50QXN5bmNDYWxsYmFjayh1aW50NjRfdCBjYWxsYmFja0lEKTsK
KworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBXZWJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yQ29tbWFu
ZHMoV2ViUGFnZSopOworCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgIC8vIFdlYkN1c3Rv
bUZpbHRlclByb2dyYW1Qcm94eUNsaWVudAorICAgIHZvaWQgcmVtb3ZlQ3VzdG9tRmlsdGVyUHJv
Z3JhbVByb3h5KFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSopOworCisgICAgdm9pZCBjaGVj
a0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlv
bnMmIGZpbHRlcnMpIE9WRVJSSURFOworICAgIHZvaWQgZGlzY29ubmVjdEN1c3RvbUZpbHRlclBy
b2dyYW1zKCk7CisjZW5kaWYKKworICAgIFdlYlBhZ2UqIG1fd2ViUGFnZTsKKworI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKKyAgICBIYXNoU2V0PFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSo+
IG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXM7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYKKworI2VuZGlmIC8vIFdlYkNvbXBvc2l0aW5nQ29vcmRpbmF0b3JDb21t
YW5kc19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182305</attachid>
            <date>2013-01-11 02:44:55 -0800</date>
            <delta_ts>2013-03-13 06:00:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104360-20130111194157.patch</filename>
            <type>text/plain</type>
            <size>105365</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5NDIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZDI1YTJmNjFmNjcxZDg1
YTQ4ZTg0NGUxMTE1YWNmMTZkYzIwYWRkMC4uMTQ4NDJjOWRlZWNiYzA5MzI3NWFlNTczMmJlODU0
YWNkN2NlOGY0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3MCBAQAorMjAxMi0xMi0wNyAgR3dh
bmcgWW9vbiBId2FuZyAgPHJ5dW1pZWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgQ29vcmRp
bmF0ZWQgR3JhcGhpY3M6IFNlcGFyYXRlIExheWVyVHJlZUNvb3JkaW5hdG9yIGludG8gTGF5ZXJU
cmVlQ29vcmRpbmF0b3IgYW5kIENvbXBvc2l0aW5nQ29vcmRpbmF0b3IKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDM2MAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludGVybmFsIFJldmlldyBieSBIdWFu
ZyBEb25nc3VuZyBhbmQgSmFlIEh5dW4gUGFyay4KKworICAgICAgICBUaGUgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0IGhhcyB0b28gbWFueSByZXNwb25zaWJpbGl0aWVzLiBJdAorICAgICAgICBp
bXBsZW1lbnRzIExheWVyVHJlZUhvc3QsIEdyYXBoaWNzTGF5ZXJDbGllbnQsCisgICAgICAgIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNv
b3JkaW5hdG9yLAorICAgICAgICBVcGRhdGVBdGxhc0NsaWVudCwgR3JhcGhpY3NMYXllckZhY3Rv
cnkgYW5kCisgICAgICAgIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudC4KKworICAg
ICAgICBUaGlzIHJlZmFjdG9yaW5nIHJlZHVjZXMgdGhlIHJlc3BvbnNpYmlsaXRpZXMgb2YgTGF5
ZXJUcmVlQ29vcmRpbmF0b3IuCisKKyAgICAgICAgQnkgY3JlYXRpbmcgYSBuZXcgY2xhc3MgY2Fs
bGVkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3IsIHdoaWNoIHRha2VzIHRoZQorICAgICAgICByZXNw
b25zaWJpbGl0eSBvZiBzY2hlZHVsaW5nIGNvbXBvc2l0aW5nIHRhc2tzIGluIFdlYlByb2Nlc3Ms
CisgICAgICAgIExheWVyVHJlZUNvb3JkaW5hdG9yIGFjdHMgbGlrZSBhIHNpbXBsZSBMYXllclRy
ZWVIb3N0LgorCisgICAgICAgIEJ5IGV4dHJhY3RpbmcgaW50ZXJmYWNlcyBkZWFsaW5nIHdpdGgg
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSB0bworICAgICAgICBDb21wb3NpdGluZ09wZXJhdGlv
biwgQ29tcG9zaXRpbmdDb29yZGluYXRvciBpcyBkZWNvdXBsZWQgZnJvbSBJUEMKKyAgICAgICAg
aGFuZGxpbmcuIFdlYkNvbXBvc2l0aW5nT3BlcmF0aW9uIGltcGxlbWVudHMgSVBDIGhhbmRsaW5n
IGZvcgorICAgICAgICBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yIGFuZCBMYXllclRyZWVDb29yZGlu
YXRvci4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBubyBjaGFuZ2UgaW4gYmVoYXZp
b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBUYXJnZXQucHJpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0
aW5nQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICBBZGRlZC4gSXQgdGFrZXMgcmVzcG9uc2liaWxp
eSBmb3Igc2NoZWR1bGluZyBjb21wb3NpdGluZyB0YXNrcyBhbmQKKyAgICAgICAgbWFuYWdpbmcg
cmVzb3VyY2VzLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRp
bmdDb29yZGluYXRvcjo6fkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IpOgorICAgICAgICAoV2ViS2l0
OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yKToKKyAgICAg
ICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxp
bmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2No
ZWR1bGVMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRv
cjo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6
OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QpOgorICAgICAgICAo
V2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpmb3JjZVJlcGFpbnQpOgorICAgICAgICAo
V2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzaXplRGlkQ2hhbmdlKToKKyAgICAgICAg
KFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2Vz
KToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlQ29tcG9z
aXRpbmdMYXllcnMpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpk
ZWxldGVDb21wb3NpdGluZ0xheWVycyk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OmluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKToKKyAgICAg
ICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c3luY0xheWVyU3RhdGUpOgorICAg
ICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzeW5jTGF5ZXJDaGlsZHJlbik6
CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZUNhbnZhcyk6
CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnN5bmNDYW52YXMpOgor
ICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXN0cm95Q2FudmFzKToK
KyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c3luY0xheWVyRmlsdGVy
cyk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRldGFjaExheWVy
KToKKyAgICAgICAgKFdlYktpdDo6dXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yU2VsZik6Cisg
ICAgICAgIChXZWJLaXQ6OnVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKToKKyAgICAg
ICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c3luY0ZpeGVkTGF5ZXJzKToKKyAg
ICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6bG9ja0FuaW1hdGlvbnMpOgor
ICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp1bmxvY2tBbmltYXRpb25z
KToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cGVyZm9ybVNjaGVk
dWxlZExheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
OjpzeW5jRGlzcGxheVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGlu
YXRvcjo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpjcmVhdGVQYWdlT3ZlcmxheUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIpOgorICAgICAg
ICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlz
cGxheSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNldFBhZ2VP
dmVybGF5T3BhY2l0eSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6
OmNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRp
bmdDb29yZGluYXRvcjo6Y3JlYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYktpdDo6Q29t
cG9zaXRpbmdDb29yZGluYXRvcjo6dXBkYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYktp
dDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyk6Cisg
ICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJlbW92ZUltYWdlQmFja2lu
Zyk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGlu
Z0ltYWdlQmFja2luZ0NoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yOjpub3RpZnlBbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9z
aXRpbmdDb29yZGluYXRvcjo6bm90aWZ5Rmx1c2hSZXF1aXJlZCk6CisgICAgICAgIChXZWJLaXQ6
OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViS2l0
OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVHcmFwaGljc0xheWVyKToKKyAgICAgICAg
KFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChX
ZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnVwZGF0ZVRpbGUpOgorICAgICAgICAoV2Vi
S2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZW1vdmVUaWxlKToKKyAgICAgICAgKFdlYktp
dDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlVXBkYXRlQXRsYXMpOgorICAgICAgICAo
V2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZW1vdmVVcGRhdGVBdGxhcyk6CisgICAg
ICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnZpc2libGVDb250ZW50c1JlY3Qp
OgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllckFuaW1h
dGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzZXRWaXNp
YmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRv
cjo6cmVuZGVyTmV4dEZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGlu
YXRvcjo6cHVyZ2VCYWNraW5nU3RvcmVzKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdD
b29yZGluYXRvcjo6YmVnaW5Db250ZW50VXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9z
aXRpbmdDb29yZGluYXRvcjo6c2NoZWR1bGVSZWxlYXNlSW5hY3RpdmVBdGxhc2VzKToKKyAgICAg
ICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVsZWFzZUluYWN0aXZlQXRsYXNl
c1RpbWVyRmlyZWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaDoKKyAgICAgICAgQWRkZWQuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cGF1c2VS
ZW5kZXJpbmcpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZXN1
bWVSZW5kZXJpbmcpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpy
b290R3JhcGhpY3NMYXllcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdPcGVyYXRpb25zLmg6IEFkZGVkLgorICAgICAgICBUaGlz
IGludGVyZmFjZSBwcm92aWRlcyBhIHdheSB0byBzZW5kIG1lc3NhZ2VzIHRvIHJlbmRlcmVyLgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKENvbXBvc2l0aW5nT3BlcmF0aW9ucyk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0Ojp+Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3QpOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldExheWVyRmx1c2hTY2hlZHVsaW5n
RW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2No
ZWR1bGVMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkpOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZvcmNlUmVwYWludCk6
CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENoYW5n
ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGlkSW5zdGFs
bFBhZ2VPdmVybGF5KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpkaWRVbmluc3RhbGxQYWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2Vi
S2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFBhZ2VPdmVybGF5T3BhY2l0eSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGF1c2VSZW5kZXJpbmcp
OgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlc3VtZVJlbmRl
cmluZyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bGF5b3V0
SWZOZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6Omlz
T3BhcXVlQ29udGVudHMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwYWludFBhZ2VDb250ZW50cyk6CisgICAgICAgIChXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGFpbnRPdmVybGF5Q29udGVudHMpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmcpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFZpc2li
bGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVBbmltYXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmFuaW1hdGlvbkZyYW1lUmVh
ZHkpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbmRlck5l
eHRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cHVy
Z2VCYWNraW5nU3RvcmVzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpzZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChDb29yZGluYXRlZExheWVyVHJlZUhvc3QpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvbXBvc2l0aW5nT3Bl
cmF0aW9ucy5jcHA6CisgICAgICAgIEFkZGVkLiBTZW5kcyBhY3R1YWwgSVBDIG1lc3NhZ2VzCisg
ICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGluZ09wZXJhdGlv
bnM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nT3BlcmF0aW9uczo6
fldlYkNvbXBvc2l0aW5nT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0
aW5nT3BlcmF0aW9uczo6V2ViQ29tcG9zaXRpbmdPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29tcG9zaXRpbmdPcGVyYXRpb25zOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nT3BlcmF0aW9uczo6c2V0Q29tcG9zaXRpbmdM
YXllclN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpbmdPcGVyYXRpb25zOjpz
ZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3Np
dGluZ09wZXJhdGlvbnM6OnNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29tcG9zaXRpbmdPcGVyYXRpb25zOjpjcmVhdGVDb21wb3NpdGluZ0xheWVyKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpbmdPcGVyYXRpb25zOjpkZWxldGVDb21wb3Np
dGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpbmdPcGVyYXRpb25zOjpj
cmVhdGVUaWxlRm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGluZ09wZXJh
dGlvbnM6OnVwZGF0ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0
aW5nT3BlcmF0aW9uczo6cmVtb3ZlVGlsZUZvckxheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29tcG9zaXRpbmdPcGVyYXRpb25zOjpjcmVhdGVVcGRhdGVBdGxhcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvbXBvc2l0aW5nT3BlcmF0aW9uczo6cmVtb3ZlVXBkYXRlQXRsYXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb21wb3NpdGluZ09wZXJhdGlvbnM6OmNyZWF0ZUltYWdlQmFja2luZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nT3BlcmF0aW9uczo6dXBkYXRlSW1hZ2VC
YWNraW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpbmdPcGVyYXRpb25zOjpjbGVh
ckltYWdlQmFja2luZ0NvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpbmdP
cGVyYXRpb25zOjpyZW1vdmVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21w
b3NpdGluZ09wZXJhdGlvbnM6OmRpZFJlbmRlckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29tcG9zaXRpbmdPcGVyYXRpb25zOjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbik6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvbXBvc2l0aW5nT3BlcmF0aW9uczo6Y3JlYXRlQ2FudmFzKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpbmdPcGVyYXRpb25zOjpzeW5jQ2FudmFzKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpbmdPcGVyYXRpb25zOjpkZXN0cm95Q2FudmFzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpbmdPcGVyYXRpb25zOjpzZXRMYXllckFuaW1hdGlv
bnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGluZ09wZXJhdGlvbnM6OnNldEFuaW1h
dGlvbnNMb2NrZWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL1dlYkNvbXBvc2l0aW5nT3BlcmF0aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgIChXZWJDb21wb3NpdGluZ09wZXJhdGlvbnMpOgorCiAyMDEzLTAxLTExICBL
d2FuZ1lvbmcgQ2hvaSAgPGt5MC5jaG9pQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIEZp
eCB1bnVzZWQgcGFyYW1ldGVyIGJ1aWxkIGVycm9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CmluZGV4IGI5
NjRiNGI4NzM5ZDYwMDEzMDdiM2ZjNzQxODlkYjM4MDlhZDdjMDAuLjI1ODMzMDA2MjM5MDMzZjY2
ODI0NzMzZWE1YWIxMTRiYmE2MTY4YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC01MDcsMTEg
KzUwNywxMyBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlVuZG9TdGVwLmNwcAogCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQXJlYUFsbG9jYXRvci5jcHAKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcAogICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllci5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZFRpbGUuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL1VwZGF0ZUF0bGFzLmNwcAorICAgIFdlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvbXBvc2l0aW5nT3BlcmF0aW9ucy5jcHAKICkKIAog
c2V0KFdlYktpdDJfTUVTU0FHRVNfSU5fRklMRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IDlmM2MwZDAyOTk1
MTlmYzg2MGRhODVhNGJkMDQ3MWY4MDczNWEyMjcuLmZkYTFkMzliNDMyMDQwMmU1YWM1MDFiNjg5
ZWRjNmQ0NTY3YmU5YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysr
IGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtMzc1LDExICszNzUsMTQgQEAgSEVBREVS
UyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5oIFwKICAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5oIFwKKyAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmggXAor
ICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nT3Bl
cmF0aW9ucy5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCBcCiAgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Lmgg
XAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
VGlsZS5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRh
dGVBdGxhcy5oIFwKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9X
ZWJDb21wb3NpdGluZ09wZXJhdGlvbnMuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RhcEhp
Z2hsaWdodENvbnRyb2xsZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5
LmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5oIFwKQEAgLTc2Nywx
MSArNzcwLDEzIEBAIFNPVVJDRVMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERp
c3BhdGNoZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3Bw
IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9BcmVhQWxsb2Nh
dG9yLmNwcCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29t
cG9zaXRpbmdDb29yZGluYXRvci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgXAogICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNw
cCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuY3BwIFwKKyAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb21wb3NpdGluZ09wZXJhdGlvbnMuY3BwIFwKICAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvVGFwSGlnaGxpZ2h0Q29udHJvbGxlci5jcHAgXAogICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQ
YWdlL1BhZ2VPdmVybGF5LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg1ZjdjMzg5ZWJhMjMxYTRi
ZjdlNDM0ZWU2MTAxNWQxYjYwZDRmN2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3Jk
aW5hdG9yLmNwcApAQCAtMCwwICsxLDcyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorI2luY2x1ZGUgIkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaCIKKworI2luY2x1ZGUgIkNvb3Jk
aW5hdGVkTGF5ZXJJbmZvLmgiCisjaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzU3VyZmFjZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFn
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1JlbmRlckxheWVyQmFja2luZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9TZXR0aW5ncy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXIuaD4KKyNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CisKKyNpZiBFTkFCTEUo
Q1NTX1NIQURFUlMpCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5oIgor
I2luY2x1ZGUgIlZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5oIgorI2VuZGlmCisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworQ29tcG9zaXRp
bmdDb29yZGluYXRvcjo6fkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IoKQoreworICAgIHB1cmdlQmFj
a2luZ1N0b3JlcygpOworCisgICAgSGFzaFNldDxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6
aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOworICAgIGZvciAoSGFzaFNl
dDxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRM
YXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAoKml0KS0+c2V0Q29vcmRp
bmF0b3IoMCk7Cit9CisKK0NvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3IoUGFnZSogcGFnZSwgY29uc3QgSW50U2l6ZSYgdmlld1NpemUsIGNvbnN0IGJvb2wgaGFz
UGFnZU92ZXJsYXksIFBhc3NPd25QdHI8Q29tcG9zaXRpbmdPcGVyYXRpb25zPiBvcGVyYXRpb25z
KQorICAgIDogbV9wYWdlKHBhZ2UpCisgICAgLCBtX29wZXJhdGlvbnMob3BlcmF0aW9ucykKKyAg
ICAsIG1faXNWYWxpZCh0cnVlKQorICAgICwgbV9pc1B1cmdpbmcoZmFsc2UpCisgICAgLCBtX2lz
Rmx1c2hpbmdMYXllckNoYW5nZXMoZmFsc2UpCisgICAgLCBtX2lzV2FpdGluZ0ZvclJlbmRlcmVy
KHRydWUpCisgICAgLCBtX2lzU3VzcGVuZGVkKGZhbHNlKQorICAgICwgbV9jb250ZW50c1NjYWxl
KDEpCisgICAgLCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSh0cnVlKQorICAgICwg
bV9zaG91bGRTeW5jRnJhbWUoZmFsc2UpCisgICAgLCBtX2RpZEluaXRpYWxpemVSb290Q29tcG9z
aXRpbmdMYXllcihmYWxzZSkKKyAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZDb21wb3Np
dGluZ0Nvb3JkaW5hdG9yOjpsYXllckZsdXNoVGltZXJGaXJlZCkKKyAgICAsIG1fcmVsZWFzZUlu
YWN0aXZlQXRsYXNlc1RpbWVyKHRoaXMsICZDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZWxlYXNl
SW5hY3RpdmVBdGxhc2VzVGltZXJGaXJlZCkKKyAgICAsIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdF
bmFibGVkKHRydWUpCisgICAgLCBtX2FuaW1hdGlvbnNMb2NrZWQoZmFsc2UpCit7CisgICAgLy8g
Q3JlYXRlIGEgcm9vdCBsYXllci4KKyAgICBtX3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNy
ZWF0ZSh0aGlzLCB0aGlzKTsKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGNvb3JkaW5h
dGVkUm9vdExheWVyID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0
KCkpOworICAgIGNvb3JkaW5hdGVkUm9vdExheWVyLT5zZXRSb290TGF5ZXIodHJ1ZSk7CisjaWZu
ZGVmIE5ERUJVRworICAgIG1fcm9vdExheWVyLT5zZXROYW1lKCJDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yIHJvb3QgbGF5ZXIiKTsKKyNlbmRpZgorICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRl
bnQoZmFsc2UpOworCisgICAgbV9yb290TGF5ZXItPnNldFNpemUodmlld1NpemUpOworCisgICAg
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMs
IHRoaXMpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIt
PnNldE5hbWUoIkNvbXBvc2l0aW5nQ29vcmRpbmF0b3Igbm9uLWNvbXBvc2l0ZWQgY29udGVudCIp
OworI2VuZGlmCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXREcmF3c0NvbnRl
bnQodHJ1ZSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKHZpZXdT
aXplKTsKKworICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXIuZ2V0KCkpOworCisgICAgaWYgKGhhc1BhZ2VPdmVybGF5KQorICAgICAgICBjcmVhdGVQ
YWdlT3ZlcmxheUxheWVyKCk7CisKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9p
ZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQo
Ym9vbCBsYXllckZsdXNoaW5nRW5hYmxlZCkKK3sKKyAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1
bGluZ0VuYWJsZWQgPT0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQ7
CisKKyAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpIHsKKyAgICAgICAgc2No
ZWR1bGVMYXllckZsdXNoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYW5jZWxQ
ZW5kaW5nTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNj
aGVkdWxlTGF5ZXJGbHVzaCgpCit7CisgICAgaWYgKCFtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5h
YmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2xheWVyRmx1c2hUaW1lci5pc0Fj
dGl2ZSgpKQorICAgICAgICBtX2xheWVyRmx1c2hUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisK
K3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKQor
eworICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihHcmFwaGljc0xheWVyKiBncmFwaGlj
c0xheWVyKQoreworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+cmVtb3ZlQWxsQ2hp
bGRyZW4oKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldENvbnRlbnRzT3Bh
cXVlKGlzT3BhcXVlQ29udGVudHMoKSk7CisKKyAgICAvLyBBZGQgdGhlIGFjY2VsZXJhdGVkIGxh
eWVyIHRyZWUgaGllcmFyY2h5LgorICAgIGlmIChncmFwaGljc0xheWVyKQorICAgICAgICBtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPmFkZENoaWxkKGdyYXBoaWNzTGF5ZXIpOworfQorCit2
b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmludmFsaWRhdGUoKQoreworICAgIGNhbmNlbFBl
bmRpbmdMYXllckZsdXNoKCk7CisKKyAgICBBU1NFUlQobV9pc1ZhbGlkKTsKKyAgICBtX3Jvb3RM
YXllciA9IG51bGxwdHI7CisgICAgbV9pc1ZhbGlkID0gZmFsc2U7Cit9CisKK3ZvaWQgQ29tcG9z
aXRpbmdDb29yZGluYXRvcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIHJl
Y3QpCit7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJ
blJlY3QocmVjdCk7CisKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQorICAgICAgICBtX3Bh
Z2VPdmVybGF5TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKworICAgIHNjaGVk
dWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmZvcmNl
UmVwYWludCgpCit7CisgICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgZm9yIHJ1bm5pbmcgbGF5b3V0
IHRlc3RzLiBTaW5jZSBpbiB0aGlzIGNhc2Ugd2UgYXJlIG5vdCB3YWl0aW5nIGZvciBhIHJlbmRl
cmVyIHRvIHJlcGx5IG5pY2VseS4KKyAgICAvLyBJbnN0ZWFkIHdlIGFyZSBqdXN0IHRyaWdnZXJp
bmcgZm9yY2VSZXBhaW50LiBCdXQgd2Ugc3RpbGwgd2FudCB0byBoYXZlIHRoZSBzY3JpcHRlZCBh
bmltYXRpb24gY2FsbGJhY2tzIGJlaW5nIGV4ZWN1dGVkLgorICAgIHN5bmNEaXNwbGF5U3RhdGUo
KTsKKworICAgIC8vIFdlIG5lZWQgdG8gc2NoZWR1bGUgYW5vdGhlciBmbHVzaCwgb3RoZXJ3aXNl
IHRoZSBmb3JjZWQgcGFpbnQgbWlnaHQgY2FuY2VsIGEgbGF0ZXIgZXhwZWN0ZWQgZmx1c2guCisg
ICAgLy8gVGhpcyBpcyBhbGlnbmVkIHdpdGggTGF5ZXJUcmVlSG9zdENBLgorICAgIHNjaGVkdWxl
TGF5ZXJGbHVzaCgpOworICAgIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOworfQorCit2b2lk
IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNpemVEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgbmV3
U2l6ZSkKK3sKKyAgICBpZiAobV9yb290TGF5ZXItPnNpemUoKSA9PSBuZXdTaXplKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKKworICAgIC8v
IElmIHRoZSBuZXdTaXplIGV4cG9zZXMgbmV3IGFyZWFzIG9mIHRoZSBub24tY29tcG9zaXRlZCBj
b250ZW50IGEgc2V0TmVlZHNEaXNwbGF5IGlzIG5lZWRlZAorICAgIC8vIGZvciB0aG9zZSBuZXds
eSBleHBvc2VkIGFyZWFzLgorICAgIEZsb2F0U2l6ZSBvbGRTaXplID0gbV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyLT5zaXplKCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5z
ZXRTaXplKG5ld1NpemUpOworCisgICAgaWYgKG5ld1NpemUud2lkdGgoKSA+IG9sZFNpemUud2lk
dGgoKSkgeworICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGQ6Om1pbihzdGF0aWNfY2FzdDxmbG9h
dD4obmV3U2l6ZS5oZWlnaHQoKSksIG9sZFNpemUuaGVpZ2h0KCkpOworICAgICAgICBtX25vbkNv
bXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3Qob2xk
U2l6ZS53aWR0aCgpLCAwLCBuZXdTaXplLndpZHRoKCkgLSBvbGRTaXplLndpZHRoKCksIGhlaWdo
dCkpOworICAgIH0KKworICAgIGlmIChuZXdTaXplLmhlaWdodCgpID4gb2xkU2l6ZS5oZWlnaHQo
KSkKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJ
blJlY3QoRmxvYXRSZWN0KDAsIG9sZFNpemUuaGVpZ2h0KCksIG5ld1NpemUud2lkdGgoKSwgbmV3
U2l6ZS5oZWlnaHQoKSAtIG9sZFNpemUuaGVpZ2h0KCkpKTsKKworICAgIGlmIChtX3BhZ2VPdmVy
bGF5TGF5ZXIpCisgICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZShuZXdTaXplKTsK
KworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCitib29sIENvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpCit7CisgICAgaWYgKG1faXNXYWl0aW5n
Rm9yUmVuZGVyZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFRlbXBvcmFyeUNoYW5n
ZTxib29sPiBwcm90ZWN0b3IobV9pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzLCB0cnVlKTsKKworICAg
IGNyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKCk7CisKKyAgICBpbml0aWFsaXplUm9vdENvbXBvc2l0
aW5nTGF5ZXJJZk5lZWRlZCgpOworCisgICAgbV9yb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdT
dGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIt
PmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBpZiAobV9wYWdl
T3ZlcmxheUxheWVyKQorICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPmZsdXNoQ29tcG9zaXRp
bmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIGJvb2wgZGlkU3luYyA9IG1fcGFnZS0+
bWFpbkZyYW1lKCktPnZpZXcoKS0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJh
bWVzKCk7CisKKyAgICBmbHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7CisKKyAgICBk
ZWxldGVDb21wb3NpdGluZ0xheWVycygpOworCisgICAgaWYgKG1fc2hvdWxkU3luY0ZyYW1lKSB7
CisgICAgICAgIGRpZFN5bmMgPSB0cnVlOworCisgICAgICAgIEludFNpemUgY29udGVudHNTaXpl
ID0gcm91bmRlZEludFNpemUobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCkpOwor
ICAgICAgICBJbnRSZWN0IGNvdmVyZWRSZWN0ID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIo
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKS0+Y292ZXJSZWN0KCk7CisgICAgICAg
IG1fb3BlcmF0aW9ucy0+ZGlkUmVuZGVyRnJhbWUoY29udGVudHNTaXplLCBjb3ZlcmVkUmVjdCk7
CisgICAgICAgIG1faXNXYWl0aW5nRm9yUmVuZGVyZXIgPSB0cnVlOworICAgICAgICBtX3Nob3Vs
ZFN5bmNGcmFtZSA9IGZhbHNlOworICAgIH0gZWxzZQorICAgICAgICB1bmxvY2tBbmltYXRpb25z
KCk7CisKKyAgICByZXR1cm4gZGlkU3luYzsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpjcmVhdGVDb21wb3NpdGluZ0xheWVycygpCit7CisgICAgaWYgKG1fbGF5ZXJzVG9DcmVh
dGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiBhIGxheWVyIGdldHMg
Y3JlYXRlZCBhbmQgZGVsZXRlZCBpbiB0aGUgc2FtZSBjeWNsZSwgd2UgY2FuIHNpbXBseSByZW1v
dmUgaXQgZnJvbSBtX2xheWVyc1RvQ3JlYXRlIGFuZCBtX2xheWVyc1RvRGVsZXRlLgorICAgIGZv
ciAoaW50IGkgPSBtX2xheWVyc1RvQ3JlYXRlLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Cisg
ICAgICAgIHNpemVfdCBpbmRleCA9IG1fbGF5ZXJzVG9EZWxldGUuZmluZChtX2xheWVyc1RvQ3Jl
YXRlW2ldKTsKKyAgICAgICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKSB7CisgICAgICAgICAgICBt
X2xheWVyc1RvQ3JlYXRlLnJlbW92ZShpKTsKKyAgICAgICAgICAgIG1fbGF5ZXJzVG9EZWxldGUu
cmVtb3ZlKGluZGV4KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9sYXllcnNUb0NyZWF0ZS5zaXplKCk7ICsraSkKKyAgICAgICAgbV9vcGVyYXRpb25z
LT5jcmVhdGVDb21wb3NpdGluZ0xheWVyKG1fbGF5ZXJzVG9DcmVhdGVbaV0pOworICAgIG1fbGF5
ZXJzVG9DcmVhdGUuY2xlYXIoKTsKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Cit9CisK
K3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6ZGVsZXRlQ29tcG9zaXRpbmdMYXllcnMoKQor
eworICAgIGlmIChtX2xheWVyc1RvRGVsZXRlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKG1faXNQdXJnaW5nKSB7CisgICAgICAgIG1fbGF5ZXJzVG9EZWxldGUuY2xlYXIo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9sYXllcnNUb0RlbGV0ZS5zaXplKCk7ICsraSkKKyAgICAgICAgbV9vcGVyYXRpb25zLT5kZWxl
dGVDb21wb3NpdGluZ0xheWVyKG1fbGF5ZXJzVG9EZWxldGVbaV0pOworICAgIG1fbGF5ZXJzVG9E
ZWxldGUuY2xlYXIoKTsKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Cit9CisKKwordm9p
ZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjppbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJ
Zk5lZWRlZCgpCit7CisgICAgaWYgKG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVy
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX29wZXJhdGlvbnMtPnNldFJvb3RDb21wb3NpdGlu
Z0xheWVyKHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+aWQo
KSk7CisgICAgbV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXIgPSB0cnVlOworICAg
IG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3JkaW5h
dGVkTGF5ZXJJbmZvJiBpbmZvKQoreworICAgIGlmIChtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlv
blVwZGF0ZSkgeworICAgICAgICBtX29wZXJhdGlvbnMtPmRpZENoYW5nZVNjcm9sbFBvc2l0aW9u
KG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpKTsKKyAgICAgICAgbV9zaG91bGRTZW5k
U2Nyb2xsUG9zaXRpb25VcGRhdGUgPSBmYWxzZTsKKyAgICB9CisKKyAgICBtX3Nob3VsZFN5bmNG
cmFtZSA9IHRydWU7CisgICAgbV9vcGVyYXRpb25zLT5zZXRDb21wb3NpdGluZ0xheWVyU3RhdGUo
aWQsIGluZm8pOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnN5bmNMYXllckNo
aWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5
ZXJJRD4mIGNoaWxkcmVuKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBt
X29wZXJhdGlvbnMtPnNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihpZCwgY2hpbGRyZW4pOwor
fQorCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0
b3I6OmNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIFBsYXRmb3JtTGF5ZXIqIGNh
bnZhc1BsYXRmb3JtTGF5ZXIpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAg
IEdyYXBoaWNzU3VyZmFjZVRva2VuIHRva2VuID0gY2FudmFzUGxhdGZvcm1MYXllci0+Z3JhcGhp
Y3NTdXJmYWNlVG9rZW4oKTsKKyAgICBJbnRTaXplIGNhbnZhc1NpemUgPSBjYW52YXNQbGF0Zm9y
bUxheWVyLT5wbGF0Zm9ybUxheWVyU2l6ZSgpOworICAgIG1fb3BlcmF0aW9ucy0+Y3JlYXRlQ2Fu
dmFzKGlkLCBjYW52YXNTaXplLCB0b2tlbik7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGlu
YXRvcjo6c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIFBsYXRmb3JtTGF5ZXIqIGNh
bnZhc1BsYXRmb3JtTGF5ZXIpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAg
IHVpbnQzMl90IGZyb250QnVmZmVyID0gY2FudmFzUGxhdGZvcm1MYXllci0+Y29weVRvR3JhcGhp
Y3NTdXJmYWNlKCk7CisgICAgbV9vcGVyYXRpb25zLT5zeW5jQ2FudmFzKGlkLCBmcm9udEJ1ZmZl
cik7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6ZGVzdHJveUNhbnZhcyhDb29y
ZGluYXRlZExheWVySUQgaWQpCit7CisgICAgaWYgKG1faXNQdXJnaW5nKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV9vcGVyYXRpb25zLT5k
ZXN0cm95Q2FudmFzKGlkKTsKK30KKyNlbmRpZgorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQor
dm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzeW5jTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVk
TGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3sKKyAgICBtX3No
b3VsZFN5bmNGcmFtZSA9IHRydWU7CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgIGNoZWNr
Q3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoZmlsdGVycyk7CisjZW5kaWYKKyAgICBtX29wZXJh
dGlvbnMtPnNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKGlkLCBmaWx0ZXJzKTsKK30KKyNlbmRp
ZgorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRldGFjaExheWVyKENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgbV9yZWdpc3RlcmVkTGF5ZXJzLnJlbW92ZShs
YXllcik7CisgICAgbV9sYXllcnNUb0RlbGV0ZS5hcHBlbmQobGF5ZXItPmlkKCkpOworICAgIHNj
aGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVPZmZzZXRGcm9tVmll
d3BvcnRGb3JTZWxmKFJlbmRlckxheWVyKiByZW5kZXJMYXllcikKK3sKKyAgICAvLyBUaGVzZSBj
b25kaXRpb25zIG11c3QgbWF0Y2ggdGhlIGNvbmRpdGlvbnMgaW4gUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yUG9zaXRpb24uCisgICAgUmVuZGVyTGF5ZXJCYWNr
aW5nKiBiYWNraW5nID0gcmVuZGVyTGF5ZXItPmJhY2tpbmcoKTsKKyAgICBpZiAoIWJhY2tpbmcp
CisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlckxheWVy
LT5yZW5kZXJlcigpLT5zdHlsZSgpOworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICghcmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPmlzT3V0T2ZGbG93UG9zaXRpb25l
ZCgpIHx8IHJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5wb3NpdGlvbigpICE9IEZp
eGVkUG9zaXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcmVuZGVyTGF5ZXItPnJl
bmRlcmVyKCktPmNvbnRhaW5lcigpLT5pc1JlbmRlclZpZXcoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFyZW5kZXJMYXllci0+aXNTdGFja2luZ0NvbnRleHQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyID0gdG9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoYmFja2luZy0+Z3JhcGhpY3NMYXllcigpKTsKKyAgICBn
cmFwaGljc0xheWVyLT5zZXRGaXhlZFRvVmlld3BvcnQodHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lk
IHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKFJlbmRlckxheWVyKiByZW5kZXJMYXll
cikKK3sKKyAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKHJlbmRlckxheWVyKTsK
KworICAgIGlmIChyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKQorICAgICAgICB1cGRhdGVPZmZz
ZXRGcm9tVmlld3BvcnRGb3JMYXllcihyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKTsKKyAgICBp
ZiAocmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpCisgICAgICAgIHVwZGF0ZU9mZnNldEZyb21W
aWV3cG9ydEZvckxheWVyKHJlbmRlckxheWVyLT5uZXh0U2libGluZygpKTsKK30KKwordm9pZCBD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzeW5jRml4ZWRMYXllcnMoKQoreworICAgIGlmICghbV9w
YWdlLT5zZXR0aW5ncygpIHx8ICFtX3BhZ2UtPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoIW1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+aGFzVmlld3BvcnRDb25zdHJhaW5lZE9i
amVjdHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyTGF5ZXIqIHJvb3RSZW5kZXJM
YXllciA9IG1fcGFnZS0+bWFpbkZyYW1lKCktPmNvbnRlbnRSZW5kZXJlcigpLT5jb21wb3NpdG9y
KCktPnJvb3RSZW5kZXJMYXllcigpOworICAgIEFTU0VSVChyb290UmVuZGVyTGF5ZXIpOworICAg
IGlmIChyb290UmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgdXBkYXRlT2Zmc2V0
RnJvbVZpZXdwb3J0Rm9yTGF5ZXIocm9vdFJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpOworfQor
Cit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmxvY2tBbmltYXRpb25zKCkKK3sKKyAgICBt
X2FuaW1hdGlvbnNMb2NrZWQgPSB0cnVlOworICAgIG1fb3BlcmF0aW9ucy0+c2V0QW5pbWF0aW9u
c0xvY2tlZCh0cnVlKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp1bmxvY2tB
bmltYXRpb25zKCkKK3sKKyAgICBpZiAoIW1fYW5pbWF0aW9uc0xvY2tlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9hbmltYXRpb25zTG9ja2VkID0gZmFsc2U7CisgICAgbV9vcGVyYXRpb25z
LT5zZXRBbmltYXRpb25zTG9ja2VkKGZhbHNlKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yOjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpCit7CisgICAgaWYgKG1faXNTdXNw
ZW5kZWQgfHwgbV9pc1dhaXRpbmdGb3JSZW5kZXJlcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gV2UgbG9jayB0aGUgYW5pbWF0aW9ucyB3aGlsZSBwZXJmb3JtaW5nIGxheW91dCwgdG8gYXZv
aWQgZmxpY2tlcnMgY2F1c2VkIGJ5IGFuaW1hdGlvbnMgY29udGludWluZyBpbiB0aGUgcmVuZGVy
ZXIgd2hpbGUKKyAgICAvLyB0aGUgd2ViIHByb2Nlc3MgbGF5b3V0IHdhbnRzIHRvIGNhbmNlbCB0
aGVtLgorICAgIGxvY2tBbmltYXRpb25zKCk7CisgICAgc3luY0Rpc3BsYXlTdGF0ZSgpOworCisg
ICAgLy8gV2UgY2FuIHVubG9jayB0aGUgYW5pbWF0aW9ucyBiZWZvcmUgZmx1c2hpbmcgaWYgdGhl
cmUgYXJlIG5vIHZpc2libGUgY2hhbmdlcywgZm9yIGV4YW1wbGUgaWYgdGhlcmUgYXJlIGNvbnRl
bnQgdXBkYXRlcworICAgIC8vIGluIGEgbGF5ZXIgd2l0aCBvcGFjaXR5IDAuCisgICAgYm9vbCBj
YW5VbmxvY2tCZWZvcmVGbHVzaCA9ICFtX2lzVmFsaWQgfHwgIXRvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+aGFzUGVuZGluZ1Zpc2libGVDaGFuZ2VzKCk7Cisg
ICAgaWYgKGNhblVubG9ja0JlZm9yZUZsdXNoKQorICAgICAgICB1bmxvY2tBbmltYXRpb25zKCk7
CisKKyAgICBpZiAoIW1faXNWYWxpZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBkaWRT
eW5jID0gZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7CisgICAgZGlkUGVyZm9ybVNjaGVkdWxl
ZExheWVyRmx1c2goZGlkU3luYyk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6
c3luY0Rpc3BsYXlTdGF0ZSgpCit7CisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1F
KSAmJiAhVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKSAmJiAhVVNFKFJFUVVFU1Rf
QU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCBh
bnkgcHJldmlvdXNseSByZWdpc3RlcmVkIGFuaW1hdGlvbiBjYWxsYmFja3MgYXJlIGJlaW5nIGV4
ZWN1dGVkIGJlZm9yZSB3ZSBmbHVzaCB0aGUgbGF5ZXJzLgorICAgIG1fcGFnZS0+bWFpbkZyYW1l
KCktPnZpZXcoKS0+c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyhjb252ZXJ0U2Vjb25kc1RvRE9N
VGltZVN0YW1wKGN1cnJlbnRUaW1lKCkpKTsKKyNlbmRpZgorCisgICAgbGF5b3V0SWZOZWVkZWQo
KTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpsYXllckZsdXNoVGltZXJGaXJl
ZChUaW1lcjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiopCit7CisgICAgcGVyZm9ybVNjaGVkdWxl
ZExheWVyRmx1c2goKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVQ
YWdlT3ZlcmxheUxheWVyKCkKK3sKKyAgICBBU1NFUlQoIW1fcGFnZU92ZXJsYXlMYXllcik7CisK
KyAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcywgdGhp
cyk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmFtZSgiQ29t
cG9zaXRpbmdDb29yZGluYXRvciBwYWdlIG92ZXJsYXkgY29udGVudCIpOworI2VuZGlmCisKKyAg
ICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBtX3BhZ2VP
dmVybGF5TGF5ZXItPnNldFNpemUobV9yb290TGF5ZXItPnNpemUoKSk7CisKKyAgICBtX3Jvb3RM
YXllci0+YWRkQ2hpbGQobV9wYWdlT3ZlcmxheUxheWVyLmdldCgpKTsKKworICAgIHNjaGVkdWxl
TGF5ZXJGbHVzaCgpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRlc3Ryb3lQ
YWdlT3ZlcmxheUxheWVyKCkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKKyAg
ICBtX3BhZ2VPdmVybGF5TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBtX3BhZ2VPdmVy
bGF5TGF5ZXIgPSBudWxscHRyOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3Zv
aWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxh
eWVyKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0
KTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yOjpzZXRQYWdlT3ZlcmxheU9wYWNpdHkoZmxvYXQgdmFsdWUpCit7CisgICAgQVNTRVJU
KG1fcGFnZU92ZXJsYXlMYXllcik7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRPcGFjaXR5
KHZhbHVlKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKworUGFzc1JlZlB0cjxDb29y
ZGluYXRlZEltYWdlQmFja2luZz4gQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlSW1hZ2VC
YWNraW5nSWZOZWVkZWQoSW1hZ2UqIGltYWdlKQoreworICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQgaW1hZ2VJRCA9IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpnZXRDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEKGltYWdlKTsKKyAgICBJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7CisgICAgUmVmUHRyPENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nPiBpbWFnZUJhY2tpbmc7CisgICAgaWYgKGl0ID09IG1faW1hZ2VCYWNraW5ncy5l
bmQoKSkgeworICAgICAgICBpbWFnZUJhY2tpbmcgPSBDb29yZGluYXRlZEltYWdlQmFja2luZzo6
Y3JlYXRlKHRoaXMsIGltYWdlKTsKKyAgICAgICAgbV9pbWFnZUJhY2tpbmdzLmFkZChpbWFnZUlE
LCBpbWFnZUJhY2tpbmcpOworICAgIH0gZWxzZQorICAgICAgICBpbWFnZUJhY2tpbmcgPSBpdC0+
dmFsdWU7CisKKyAgICByZXR1cm4gaW1hZ2VCYWNraW5nOworfQorCit2b2lkIENvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OmNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
IGltYWdlSUQpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fb3BlcmF0
aW9ucy0+Y3JlYXRlSW1hZ2VCYWNraW5nKGltYWdlSUQpOworfQorCit2b2lkIENvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
IGltYWdlSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCit7
CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fb3BlcmF0aW9ucy0+dXBkYXRl
SW1hZ2VCYWNraW5nKGltYWdlSUQsIGhhbmRsZSk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29y
ZGluYXRvcjo6Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEIGltYWdlSUQpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fb3Bl
cmF0aW9ucy0+Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhpbWFnZUlEKTsKK30KKwordm9pZCBD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCBpbWFnZUlEKQoreworICAgIGlmIChtX2lzUHVyZ2luZykKKyAgICAgICAgcmV0
dXJuOworCisgICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFnZUlEKSk7Cisg
ICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1faW1hZ2VCYWNraW5ncy5yZW1vdmUo
aW1hZ2VJRCk7CisgICAgbV9vcGVyYXRpb25zLT5yZW1vdmVJbWFnZUJhY2tpbmcoaW1hZ2VJRCk7
Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nSW1hZ2VCYWNr
aW5nQ2hhbmdlcygpCit7CisgICAgSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBlbmQgPSBtX2lt
YWdlQmFja2luZ3MuZW5kKCk7CisgICAgZm9yIChJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0
ZXIgPSBtX2ltYWdlQmFja2luZ3MuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAg
ICAgaXRlci0+dmFsdWUtPnVwZGF0ZSgpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0
b3I6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRvdWJsZSAv
KiB0aW1lICovKQoreworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6Om5vdGlmeUZs
dXNoUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopCit7CisgICAgc2NoZWR1bGVMYXllckZs
dXNoKCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cGFpbnRDb250ZW50cyhj
b25zdCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBHcmFwaGljc0NvbnRleHQmIGdyYXBo
aWNzQ29udGV4dCwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UgcGhhc2UsIGNvbnN0IEludFJl
Y3QmIGNsaXBSZWN0KQoreworICAgIGJvb2wgaXNOb25Db21wb3NpdGluZ0NvbnRlbnQgPSAoZ3Jh
cGhpY3NMYXllciA9PSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIpOworICAgIGJvb2wgaXNQ
YWdlT3ZlcmxheSA9IChncmFwaGljc0xheWVyID09IG1fcGFnZU92ZXJsYXlMYXllcik7CisKKyAg
ICBpZiAoaXNOb25Db21wb3NpdGluZ0NvbnRlbnQpCisgICAgICAgIHBhaW50UGFnZUNvbnRlbnRz
KGdyYXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOworICAgIGVsc2UgaWYgKGlzUGFnZU92ZXJsYXkp
CisgICAgICAgIHBhaW50T3ZlcmxheUNvbnRlbnRzKGdyYXBoaWNzQ29udGV4dCwgY2xpcFJlY3Qp
OworfQorCitQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6
OmNyZWF0ZUdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQoreworICAg
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbGF5ZXIgPSBuZXcgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyKGNsaWVudCk7CisgICAgbGF5ZXItPnNldENvb3JkaW5hdG9yKHRoaXMpOworICAgIG1f
cmVnaXN0ZXJlZExheWVycy5hZGQobGF5ZXIpOworICAgIG1fbGF5ZXJzVG9DcmVhdGUuYXBwZW5k
KGxheWVyLT5pZCgpKTsKKyAgICBsYXllci0+c2V0Q29udGVudHNTY2FsZShtX2NvbnRlbnRzU2Nh
bGUpOworICAgIGxheWVyLT5zZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOworICAgIHNj
aGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIHJldHVybiBhZG9wdFB0cihsYXllcik7Cit9CisKK3Zv
aWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQg
bGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRl
SW5mbywgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUg
PSB0cnVlOworICAgIG1fb3BlcmF0aW9ucy0+Y3JlYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRp
bGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OnVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRp
bGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IEludFJlY3Qm
IHRpbGVSZWN0KQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX29wZXJh
dGlvbnMtPnVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRh
dGVJbmZvKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZW1vdmVUaWxlKENv
b3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQpCit7CisgICAgaWYgKG1f
aXNQdXJnaW5nKQorICAgICAgICByZXR1cm47CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVl
OworICAgIG1fb3BlcmF0aW9ucy0+cmVtb3ZlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCk7
Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlVXBkYXRlQXRsYXModWlu
dDMyX3QgYXRsYXNJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmIGhhbmRs
ZSkKK3sKKyAgICBtX29wZXJhdGlvbnMtPmNyZWF0ZVVwZGF0ZUF0bGFzKGF0bGFzSUQsIGhhbmRs
ZSk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVtb3ZlVXBkYXRlQXRsYXMo
dWludDMyX3QgYXRsYXNJRCkKK3sKKyAgICBpZiAobV9pc1B1cmdpbmcpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX29wZXJhdGlvbnMtPnJlbW92ZVVwZGF0ZUF0bGFzKGF0bGFzSUQpOworfQorCitG
bG9hdFJlY3QgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKK30KKwordm9pZCBDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklE
IGxheWVySUQsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25zKQorewor
ICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9u
cyBhY3RpdmVBbmltYXRpb25zID0gYW5pbWF0aW9ucy5nZXRBY3RpdmVBbmltYXRpb25zKCk7CisK
KyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhY3Rp
dmVBbmltYXRpb25zLmFuaW1hdGlvbnMoKS5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBL
ZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzID0gYWN0aXZlQW5pbWF0aW9ucy5hbmltYXRpb25z
KCkuYXQoaSkua2V5ZnJhbWVzKCk7CisgICAgICAgIGlmIChrZXlmcmFtZXMucHJvcGVydHkoKSAh
PSBBbmltYXRlZFByb3BlcnR5V2Via2l0RmlsdGVyKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwga2V5ZnJhbWVzLnNpemUoKTsgKytqKSB7Cisg
ICAgICAgICAgICBjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSogZmlsdGVyVmFsdWUgPSBzdGF0
aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSo+KGtleWZyYW1lcy5hdChpKSk7Cisg
ICAgICAgICAgICBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKCpmaWx0ZXJWYWx1ZS0+
dmFsdWUoKSk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIG1fb3BlcmF0aW9ucy0+
c2V0TGF5ZXJBbmltYXRpb25zKGxheWVySUQsIGFjdGl2ZUFuaW1hdGlvbnMpOworfQorCit2b2lk
IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBmbG9hdCBzY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZl
Y3RvcikKK3sKKyAgICBib29sIGNvbnRlbnRzUmVjdERpZENoYW5nZSA9IHJlY3QgIT0gbV92aXNp
YmxlQ29udGVudHNSZWN0OworICAgIGJvb2wgY29udGVudHNTY2FsZURpZENoYW5nZSA9IHNjYWxl
ICE9IG1fY29udGVudHNTY2FsZTsKKworICAgIC8vIEEgemVybyB0cmFqZWN0b3J5VmVjdG9yIGlu
ZGljYXRlcyB0aGF0IHRpbGVzIGFsbCBhcm91bmQgdGhlIHZpZXdwb3J0IGFyZSByZXF1ZXN0ZWQu
CisgICAgdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLmdldCgpKS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0
b3J5VmVjdG9yKTsKKworICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFuZ2UgfHwgY29udGVudHNT
Y2FsZURpZENoYW5nZSkgeworICAgICAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0Owor
ICAgICAgICBtX2NvbnRlbnRzU2NhbGUgPSBzY2FsZTsKKworICAgICAgICBIYXNoU2V0PENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMu
ZW5kKCk7CisgICAgICAgIGZvciAoSGFzaFNldDxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6
aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgICAgICBpZiAoY29udGVudHNTY2FsZURpZENoYW5nZSkKKyAgICAgICAgICAg
ICAgICAoKml0KS0+c2V0Q29udGVudHNTY2FsZShzY2FsZSk7CisgICAgICAgICAgICBpZiAoY29u
dGVudHNSZWN0RGlkQ2hhbmdlKQorICAgICAgICAgICAgICAgICgqaXQpLT5zZXROZWVkc1Zpc2li
bGVSZWN0QWRqdXN0bWVudCgpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNvbnRlbnRz
UmVjdERpZENoYW5nZSkKKyAgICAgICAgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUg
PSB0cnVlOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRp
bmdDb29yZGluYXRvcjo6cmVuZGVyTmV4dEZyYW1lKCkKK3sKKyAgICBtX2lzV2FpdGluZ0ZvclJl
bmRlcmVyID0gZmFsc2U7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV91
cGRhdGVBdGxhc2VzW2ldLT5kaWRTd2FwQnVmZmVycygpOworfQorCit2b2lkIENvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OnB1cmdlQmFja2luZ1N0b3JlcygpCit7CisgICAgVGVtcG9yYXJ5Q2hhbmdl
PGJvb2w+IHB1cmdpbmdUb2dnbGUobV9pc1B1cmdpbmcsIHRydWUpOworCisgICAgSGFzaFNldDxD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5
ZXJzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6
aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQorICAgICAgICAoKml0KS0+cHVyZ2VCYWNraW5nU3RvcmVzKCk7CisKKyAgICBtX2ltYWdlQmFj
a2luZ3MuY2xlYXIoKTsKKyAgICBtX3VwZGF0ZUF0bGFzZXMuY2xlYXIoKTsKK30KKworUGFzc093
blB0cjxHcmFwaGljc0NvbnRleHQ+IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmJlZ2luQ29udGVu
dFVwZGF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzIGZs
YWdzLCB1aW50MzJfdCYgYXRsYXNJRCwgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBPd25QdHI8
R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQ7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkgeworICAgICAgICBVcGRhdGVBdGxh
cyogYXRsYXMgPSBtX3VwZGF0ZUF0bGFzZXNbaV0uZ2V0KCk7CisgICAgICAgIGlmIChhdGxhcy0+
c3VwcG9ydHNBbHBoYSgpID09IChmbGFncyAmIENvb3JkaW5hdGVkU3VyZmFjZTo6U3VwcG9ydHNB
bHBoYSkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGVyZSBp
cyBubyBhdmFpbGFibGUgYnVmZmVyIHNwYWNlLgorICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0
ID0gYXRsYXMtPmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihhdGxhc0lELCBzaXplLCBv
ZmZzZXQpOworICAgICAgICAgICAgaWYgKGdyYXBoaWNzQ29udGV4dCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ3JhcGhpY3NDb250ZXh0LnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHN0YXRpYyBjb25zdCBpbnQgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiA9IDEwMjQ7IC8vIFNo
b3VsZCBiZSBhIHBvd2VyIG9mIHR3by4KKyAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKGFkb3B0
UHRyKG5ldyBVcGRhdGVBdGxhcyh0aGlzLCBTY3JhdGNoQnVmZmVyRGltZW5zaW9uLCBmbGFncykp
KTsKKyAgICBzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMoKTsKKyAgICByZXR1cm4gbV91
cGRhdGVBdGxhc2VzLmxhc3QoKS0+YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGF0bGFz
SUQsIHNpemUsIG9mZnNldCk7Cit9CisKK2NvbnN0IGRvdWJsZSBSZWxlYXNlSW5hY3RpdmVBdGxh
c2VzVGltZXJJbnRlcnZhbCA9IDAuNTsKKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpz
Y2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMoKQoreworICAgIGlmICghbV9yZWxlYXNlSW5h
Y3RpdmVBdGxhc2VzVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9yZWxlYXNlSW5hY3RpdmVB
dGxhc2VzVGltZXIuc3RhcnRSZXBlYXRpbmcoUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50
ZXJ2YWwpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJlbGVhc2VJbmFjdGl2
ZUF0bGFzZXNUaW1lckZpcmVkKFRpbWVyPENvbXBvc2l0aW5nQ29vcmRpbmF0b3I+KikKK3sKKyAg
ICAvLyBXZSBhbHdheXMgd2FudCB0byBrZWVwIG9uZSBhdGxhcyBmb3Igbm9uLWNvbXBvc2l0ZWQg
Y29udGVudC4KKyAgICBPd25QdHI8VXBkYXRlQXRsYXM+IGF0bGFzVG9LZWVwQW55d2F5OworICAg
IGJvb2wgZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ID0gZmFsc2U7Cisg
ICAgZm9yIChpbnQgaSA9IG1fdXBkYXRlQXRsYXNlcy5zaXplKCkgLSAxOyAgaSA+PSAwOyAtLWkp
IHsKKyAgICAgICAgVXBkYXRlQXRsYXMqIGF0bGFzID0gbV91cGRhdGVBdGxhc2VzW2ldLmdldCgp
OworICAgICAgICBpZiAoIWF0bGFzLT5pc0luVXNlKCkpCisgICAgICAgICAgICBhdGxhcy0+YWRk
VGltZUluYWN0aXZlKFJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckludGVydmFsKTsKKyAgICAg
ICAgYm9vbCB1c2FibGVGb3JOb25Db21wb3NpdGVkQ29udGVudCA9ICFhdGxhcy0+c3VwcG9ydHNB
bHBoYSgpOworICAgICAgICBpZiAoYXRsYXMtPmlzSW5hY3RpdmUoKSkgeworICAgICAgICAgICAg
aWYgKCFmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgJiYgIWF0bGFzVG9L
ZWVwQW55d2F5ICYmIHVzYWJsZUZvck5vbkNvbXBvc2l0ZWRDb250ZW50KQorICAgICAgICAgICAg
ICAgIGF0bGFzVG9LZWVwQW55d2F5ID0gbV91cGRhdGVBdGxhc2VzW2ldLnJlbGVhc2UoKTsKKyAg
ICAgICAgICAgIG1fdXBkYXRlQXRsYXNlcy5yZW1vdmUoaSk7CisgICAgICAgIH0gZWxzZSBpZiAo
dXNhYmxlRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQpCisgICAgICAgICAgICBmb3VuZEFjdGl2ZUF0
bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgPSB0cnVlOworICAgIH0KKworICAgIGlmICghZm91
bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ICYmIGF0bGFzVG9LZWVwQW55d2F5
KQorICAgICAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKGF0bGFzVG9LZWVwQW55d2F5LnJlbGVh
c2UoKSk7CisKKyAgICBpZiAobV91cGRhdGVBdGxhc2VzLnNpemUoKSA8PSAxKQorICAgICAgICBt
X3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5zdG9wKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29tcG9zaXRpbmdDb29yZGluYXRvci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmE5YThmYzFhYjc2NTFhNTM5MzNkOTY3Y2YxYTZlNzQxZjA5ZTlhM2YKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmgKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yX2gK
KyNkZWZpbmUgQ29tcG9zaXRpbmdDb29yZGluYXRvcl9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisKKyNpbmNsdWRlICJDb21wb3NpdGluZ09wZXJhdGlvbnMuaCIKKyNpbmNsdWRl
ICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZEltYWdl
QmFja2luZy5oIgorI2luY2x1ZGUgIlVwZGF0ZUF0bGFzLmgiCisjaW5jbHVkZSAiV2ViQ29vcmRp
bmF0ZWRTdXJmYWNlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0xheWVyRmFjdG9yeS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvVGltZXIuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKKyNpZiBFTkFC
TEUoQ1NTX1NIQURFUlMpCisjaW5jbHVkZSA8V2ViQ29yZS9GaWx0ZXJPcGVyYXRpb25zLmg+Cisj
ZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgUGFnZTsKK30KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIENvbXBvc2l0aW5nQ29vcmRpbmF0b3IgOiBwdWJsaWMgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNsaWVudAorICAgICwgcHVibGljIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllckNsaWVudAorICAgICwgcHVibGljIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGlu
YXRvcgorICAgICwgcHVibGljIFVwZGF0ZUF0bGFzQ2xpZW50CisgICAgLCBwdWJsaWMgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckZhY3RvcnkgeworcHVibGljOgorICAgIHZpcnR1YWwgfkNvbXBvc2l0
aW5nQ29vcmRpbmF0b3IoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2go
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFw
aGljc0xheWVyKik7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKKworICAgIHZpcnR1
YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwor
CisgICAgdmlydHVhbCB2b2lkIHNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
bmV3U2l6ZSk7CisKKyAgICB2b2lkIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICB2b2lk
IGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7CisgICAgdm9pZCBzZXRQYWdlT3ZlcmxheU5lZWRz
RGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCBzZXRQYWdlT3Zlcmxh
eU9wYWNpdHkoZmxvYXQpOworCisgICAgdmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCkgeyBt
X2lzU3VzcGVuZGVkID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmco
KSB7IG1faXNTdXNwZW5kZWQgPSBmYWxzZTsgc2NoZWR1bGVMYXllckZsdXNoKCk7IH0KKworICAg
IHZpcnR1YWwgdm9pZCBmb3JjZVJlcGFpbnQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNp
YmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0IHNjYWxlLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CisKKyAgICAvLyBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXJDbGllbnQgOjogQ29vcmRpbmF0ZWRUaWxlQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIGNy
ZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZh
Y2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBT
dXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCk7CisK
KyAgICAvLyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFsIGJvb2wg
aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faXNGbHVz
aGluZ0xheWVyQ2hhbmdlczsgfQorICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2li
bGVDb250ZW50c1JlY3QoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKFdlYkNvcmU6OkltYWdl
KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVk
TGF5ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c3luY0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRp
bmF0ZWRMYXllcklEPiYpOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB2aXJ0dWFsIHZv
aWQgc3luY0xheWVyRmlsdGVycyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZp
bHRlck9wZXJhdGlvbnMmKTsKKyNlbmRpZgorI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpQ
bGF0Zm9ybUxheWVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN5bmNDYW52YXMoQ29v
cmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIGRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEKSBPVkVSUklERTsK
KyNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRM
YXllcklELCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOworCisgICAg
dmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ciopOworICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKTsKKyAgICB2aXJ0dWFsIFBh
c3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYsIENvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90
JiBhdGxhc0lELCBXZWJDb3JlOjpJbnRQb2ludCYpOworCisgICAgLy8gVXBkYXRlQXRsYXNDbGll
bnQKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwg
Y29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCk7CisKKyAgICB2b2lkIHJlbmRlck5l
eHRGcmFtZSgpOworICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisKKyAgICBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKiByb290R3JhcGhpY3NMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcm9v
dExheWVyLmdldCgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
KFdlYkNvcmU6OlBhZ2UqLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiB2aWV3U2l6ZSwgY29uc3Qg
Ym9vbCBoYXNQYWdlT3ZlcmxheSwgUGFzc093blB0cjxDb21wb3NpdGluZ09wZXJhdGlvbnM+KTsK
KworICAgIHZpcnR1YWwgdm9pZCBkaWRQZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaChib29sIGRp
ZFN5bmMpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNPcGFxdWVDb250ZW50cygpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgbGF5b3V0SWZOZWVkZWQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBh
aW50UGFnZUNvbnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIGNsaXBSZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50T3ZlcmxheUNv
bnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IGNsaXBSZWN0KSA9IDA7CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgIHZpcnR1YWwgdm9p
ZCBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKGNvbnN0IFdlYkNvcmU6OkZpbHRlck9w
ZXJhdGlvbnMmIGZpbHRlcnMpID0gMDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIC8vIEdyYXBo
aWNzTGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChj
b25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpOworICAgIHZpcnR1YWwg
dm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBh
aW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKKworICAgIC8v
IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRvcgorICAgIHZpcnR1YWwgdm9pZCBj
cmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lELCBjb25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmco
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7CisKKyAgICB2b2lkIGZsdXNoUGVu
ZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKTsKKworICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5
CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdy
YXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCopIE9WRVJSSURFOworCisg
ICAgLy8gQ29tcG9zaXRpbmdDb29yZGluYXRvcgorICAgIHZvaWQgaW5pdGlhbGl6ZVJvb3RDb21w
b3NpdGluZ0xheWVySWZOZWVkZWQoKTsKKyAgICBib29sIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdl
cygpOworICAgIHZvaWQgY3JlYXRlQ29tcG9zaXRpbmdMYXllcnMoKTsKKyAgICB2b2lkIGRlbGV0
ZUNvbXBvc2l0aW5nTGF5ZXJzKCk7CisgICAgdm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgp
OworICAgIHZvaWQgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKKyAgICB2b2lkIHN5bmNE
aXNwbGF5U3RhdGUoKTsKKyAgICB2b2lkIGxvY2tBbmltYXRpb25zKCk7CisgICAgdm9pZCB1bmxv
Y2tBbmltYXRpb25zKCk7CisKKyAgICB2b2lkIGxheWVyRmx1c2hUaW1lckZpcmVkKFdlYkNvcmU6
OlRpbWVyPENvbXBvc2l0aW5nQ29vcmRpbmF0b3I+Kik7CisKKyAgICB2b2lkIHNjaGVkdWxlUmVs
ZWFzZUluYWN0aXZlQXRsYXNlcygpOworCisgICAgdm9pZCByZWxlYXNlSW5hY3RpdmVBdGxhc2Vz
VGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiopOworCisg
ICAgV2ViQ29yZTo6UGFnZSogbV9wYWdlOworICAgIE93blB0cjxDb21wb3NpdGluZ09wZXJhdGlv
bnM+IG1fb3BlcmF0aW9uczsKKworICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBt
X3Jvb3RMYXllcjsKKworICAgIC8vIFRoZSBsYXllciB3aGljaCBjb250YWlucyBhbGwgbm9uLWNv
bXBvc2l0ZWQgY29udGVudC4KKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyOworCisgICAgLy8gVGhlIHBhZ2Ugb3ZlcmxheSBsYXll
ci4gV2lsbCBiZSBudWxsIGlmIHRoZXJlJ3Mgbm8gcGFnZSBvdmVybGF5LgorICAgIE93blB0cjxX
ZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3BhZ2VPdmVybGF5TGF5ZXI7CisKKyAgICBIYXNoU2V0
PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+IG1fcmVnaXN0ZXJlZExheWVyczsK
KyAgICBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiBtX2xheWVyc1RvQ3JlYXRlOworICAgIFZl
Y3RvcjxDb29yZGluYXRlZExheWVySUQ+IG1fbGF5ZXJzVG9EZWxldGU7CisgICAgdHlwZWRlZiBI
YXNoTWFwPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxDb29yZGluYXRlZEltYWdl
QmFja2luZz4gPiBJbWFnZUJhY2tpbmdNYXA7CisgICAgSW1hZ2VCYWNraW5nTWFwIG1faW1hZ2VC
YWNraW5nczsKKyAgICBWZWN0b3I8T3duUHRyPFVwZGF0ZUF0bGFzPiA+IG1fdXBkYXRlQXRsYXNl
czsKKworICAgIGJvb2wgbV9pc1ZhbGlkOworICAgIC8vIFdlIGRvbid0IHNlbmQgdGhlIG1lc3Nh
Z2VzIHJlbGF0ZWQgdG8gcmVsZWFzaW5nIHJlc291cmNlcyB0byByZW5kZXJlciBkdXJpbmcgcHVy
Z2luZywgYmVjYXVzZSByZW5kZXJlciBhbHJlYWR5IGhhZCByZW1vdmVkIGFsbCByZXNvdXJjZXMu
CisgICAgYm9vbCBtX2lzUHVyZ2luZzsKKyAgICBib29sIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdl
czsKKworICAgIGJvb2wgbV9pc1dhaXRpbmdGb3JSZW5kZXJlcjsKKyAgICBib29sIG1faXNTdXNw
ZW5kZWQ7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAg
ICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7CisgICAgYm9vbCBtX3Nob3VsZFNlbmRTY3JvbGxQb3Np
dGlvblVwZGF0ZTsKKworICAgIGJvb2wgbV9zaG91bGRTeW5jRnJhbWU7CisgICAgYm9vbCBtX2Rp
ZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcjsKKyAgICBXZWJDb3JlOjpUaW1lcjxDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yPiBtX2xheWVyRmx1c2hUaW1lcjsKKyAgICBXZWJDb3JlOjpUaW1l
cjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lcjsK
KyAgICBib29sIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkOworICAgIGJvb2wgbV9hbmlt
YXRpb25zTG9ja2VkOworfTsKKworfQorCisjZW5kaWYKKworI2VuZGlmIC8vIENvbXBvc2l0aW5n
Q29vcmRpbmF0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdPcGVyYXRpb25zLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGlu
Z09wZXJhdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44Zjg2MmQ0N2NlMTE3OTJlNjZiZDA2MmQ4ZGI3Njc3
NWFmOWFlZWQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdPcGVyYXRpb25zLmgKQEAgLTAs
MCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvbXBvc2l0aW5nT3BlcmF0
aW9uc19oCisjZGVmaW5lIENvbXBvc2l0aW5nT3BlcmF0aW9uc19oCisKKyNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJDb29yZGluYXRlZExheWVySW5mby5oIgorI2lu
Y2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCisjaW5jbHVkZSAiV2ViQ29vcmRpbmF0ZWRTdXJm
YWNlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzU3VyZmFjZVRva2VuLmg+CisjZW5kaWYKKwor
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbHRlck9wZXJhdGlv
bi5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBDb21wb3NpdGluZ09w
ZXJhdGlvbnMgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdM
YXllcihDb29yZGluYXRlZExheWVySUQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29tcG9z
aXRpbmdMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRMYXll
ckluZm8mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJl
bihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jikg
PSAwOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29tcG9z
aXRpbmdMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0
ZXJPcGVyYXRpb25zJikgPSAwOworI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUNvbXBv
c2l0aW5nTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRl
bGV0ZUNvbXBvc2l0aW5nTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEKSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3Qg
dGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8m
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExh
eWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFN1
cmZhY2VVcGRhdGVJbmZvJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlRm9yTGF5
ZXIoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQpID0gMDsKKworICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBjb25zdCBXZWJDb29y
ZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVXBk
YXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGNyZWF0
ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBjb25z
dCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVuZGVyRnJhbWUoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3Zl
cmVkUmVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihj
b25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb3NpdGlvbikgPSAwOworCisjaWYgVVNFKEdSQVBI
SUNTX1NVUkZBQ0UpCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExh
eWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1N1
cmZhY2VUb2tlbiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NhbnZhcyhDb29yZGluYXRl
ZExheWVySUQsIHVpbnQzMl90IGZyb250QnVmZmVyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRl
c3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEKSA9IDA7CisjZW5kaWYKKworICAgIHZpcnR1
YWwgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
QW5pbWF0aW9uc0xvY2tlZChib29sKSA9IDA7Cit9OworCit9CisjZW5kaWYKKworI2VuZGlmIC8v
IENvbXBvc2l0aW5nT3BlcmF0aW9uc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhv
c3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAppbmRleCBiYjk5NTVlZDgwYmQ0MzUz
MTQyMWJkZDE1NGVmOGMyMWI2YzdiZmNjLi5iNTM2NWIwZjI2MTI3ZDVhNTE1NjJiNWRiZTZhZDNh
MTY3MWExOWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTM0LDIzICszNCwxMiBAQAogI2luY2x1ZGUgIkNv
b3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYUltcGwuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJNZXNzYWdlSUQuaCIKLSNpbmNsdWRl
ICJTdXJmYWNlVXBkYXRlSW5mby5oIgorI2luY2x1ZGUgIldlYkNvbXBvc2l0aW5nT3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYlBh
Z2UuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgPFdlYkNv
cmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NTdXJmYWNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5
ZXJCYWNraW5nLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBvc2l0b3IuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NldHRp
bmdzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oPgot
I2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBo
aWNzQ29udGV4dC5oPgogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogI2luY2x1ZGUgIkN1c3Rv
bUZpbHRlclZhbGlkYXRlZFByb2dyYW0uaCIKQEAgLTcxLDg0ICs2MCwyNiBAQCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6On5Db29yZGluYXRlZExheWVyVHJlZUhvc3QoKQogI2lmIEVOQUJMRShD
U1NfU0hBREVSUykKICAgICBkaXNjb25uZWN0Q3VzdG9tRmlsdGVyUHJvZ3JhbXMoKTsKICNlbmRp
ZgotICAgIHB1cmdlQmFja2luZ1N0b3JlcygpOwotCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJz
LmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIqPjo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICAoKml0KS0+c2V0Q29vcmRpbmF0b3IoMCk7CiB9CiAKIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KFdlYlBhZ2UqIHdlYlBh
Z2UpCiAgICAgOiBMYXllclRyZWVIb3N0KHdlYlBhZ2UpCisgICAgLCBDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yKHdlYlBhZ2UtPmNvcmVQYWdlKCksIHdlYlBhZ2UtPnNpemUoKSwgbV93ZWJQYWdlLT5o
YXNQYWdlT3ZlcmxheSgpLCBXZWJDb21wb3NpdGluZ09wZXJhdGlvbnM6OmNyZWF0ZShtX3dlYlBh
Z2UpKQogICAgICwgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2goZmFsc2UpCi0gICAg
LCBtX2lzVmFsaWQodHJ1ZSkKLSAgICAsIG1faXNQdXJnaW5nKGZhbHNlKQotICAgICwgbV9pc0Zs
dXNoaW5nTGF5ZXJDaGFuZ2VzKGZhbHNlKQotICAgICwgbV93YWl0aW5nRm9yVUlQcm9jZXNzKHRy
dWUpCi0gICAgLCBtX2lzU3VzcGVuZGVkKGZhbHNlKQotICAgICwgbV9jb250ZW50c1NjYWxlKDEp
Ci0gICAgLCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSh0cnVlKQotICAgICwgbV9z
aG91bGRTeW5jRnJhbWUoZmFsc2UpCi0gICAgLCBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRp
bmdMYXllcihmYWxzZSkKLSAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmxheWVyRmx1c2hUaW1lckZpcmVkKQotICAgICwgbV9yZWxlYXNlSW5h
Y3RpdmVBdGxhc2VzVGltZXIodGhpcywgJkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVsZWFz
ZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQpCi0gICAgLCBtX2xheWVyRmx1c2hTY2hlZHVsaW5n
RW5hYmxlZCh0cnVlKQogICAgICwgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQoMCkKLSAg
ICAsIG1fYW5pbWF0aW9uc0xvY2tlZChmYWxzZSkKLXsKLSAgICAvLyBDcmVhdGUgYSByb290IGxh
eWVyLgotICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMsIHRoaXMp
OwotICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogY29vcmRpbmF0ZWRSb290TGF5ZXIgPSB0
b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSk7Ci0gICAgY29vcmRp
bmF0ZWRSb290TGF5ZXItPnNldFJvb3RMYXllcih0cnVlKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAg
bV9yb290TGF5ZXItPnNldE5hbWUoIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCByb290IGxheWVy
Iik7Ci0jZW5kaWYKLSAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKLSAg
ICBtX3Jvb3RMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7Ci0gICAgbV9sYXllclRy
ZWVDb250ZXh0LmNvb3JkaW5hdGVkTGF5ZXJJRCA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
KGNvb3JkaW5hdGVkUm9vdExheWVyKS0+aWQoKTsKLQotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzLCB0aGlzKTsKLSNpZm5kZWYgTkRF
QlVHCi0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROYW1lKCJDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Qgbm9uLWNvbXBvc2l0ZWQgY29udGVudCIpOwotI2VuZGlmCi0gICAgbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0gICAgbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKLQot
ICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0
KCkpOwotCi0gICAgaWYgKG1fd2ViUGFnZS0+aGFzUGFnZU92ZXJsYXkoKSkKLSAgICAgICAgY3Jl
YXRlUGFnZU92ZXJsYXlMYXllcigpOwotCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit7Cisg
ICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiByb290TGF5ZXIgPSB0b0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcihDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyb290R3JhcGhpY3NMYXllcigpKTsK
KyAgICBtX2xheWVyVHJlZUNvbnRleHQuY29vcmRpbmF0ZWRMYXllcklEID0gcm9vdExheWVyLT5p
ZCgpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0TGF5ZXJGbHVzaFNj
aGVkdWxpbmdFbmFibGVkKGJvb2wgbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCiB7Ci0gICAgaWYgKG1f
bGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID09IGxheWVyRmx1c2hpbmdFbmFibGVkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9IGxheWVy
Rmx1c2hpbmdFbmFibGVkOwotCi0gICAgaWYgKG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVk
KSB7Ci0gICAgICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKKyAgICBDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yOjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQobGF5ZXJGbHVzaGluZ0VuYWJs
ZWQpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVMYXllckZs
dXNoKCkKIHsKLSAgICBpZiAoIW1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCi0gICAg
ICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCkKLXsKLSAgICBtX2xh
eWVyRmx1c2hUaW1lci5zdG9wKCk7CisgICAgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2NoZWR1
bGVMYXllckZsdXNoKCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRT
aG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wgbm90aWZ5QWZ0ZXJT
Y2hlZHVsZWRMYXllckZsdXNoKQpAQCAtMTU4LDMwICs4OSwxNyBAQCB2b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVz
aChib29sCiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRSb290Q29tcG9zaXRp
bmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQogewotICAgIG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKLSAgICBtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKG1fd2ViUGFnZS0+ZHJh
d3NCYWNrZ3JvdW5kKCkgJiYgIW1fd2ViUGFnZS0+ZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQo
KSk7Ci0KLSAgICAvLyBBZGQgdGhlIGFjY2VsZXJhdGVkIGxheWVyIHRyZWUgaGllcmFyY2h5Lgot
ICAgIGlmIChncmFwaGljc0xheWVyKQotICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5
ZXItPmFkZENoaWxkKGdyYXBoaWNzTGF5ZXIpOworICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6
OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKGdyYXBoaWNzTGF5ZXIpOwogfQogCiB2b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgY2FuY2VsUGVuZGluZ0xh
eWVyRmx1c2goKTsKLQotICAgIEFTU0VSVChtX2lzVmFsaWQpOwotICAgIG1fcm9vdExheWVyID0g
bnVsbHB0cjsKLSAgICBtX2lzVmFsaWQgPSBmYWxzZTsKKyAgICBDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjppbnZhbGlkYXRlKCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpz
ZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiByZWN0KQogewotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNw
bGF5SW5SZWN0KHJlY3QpOwotICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCi0gICAgICAgIG1f
cGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotCi0gICAgc2No
ZWR1bGVMYXllckZsdXNoKCk7CisgICAgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KHJlY3QpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9s
bFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIC8qIHNjcm9sbE9mZnNldCAqLykKQEAgLTE5
MSwxNCArMTA5LDcgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjcm9sbE5vbkNv
bXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWMKIAogdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmZvcmNlUmVwYWludCgpCiB7Ci0gICAgLy8gVGhpcyBpcyBuZWNlc3Nh
cnkgZm9yIHJ1bm5pbmcgbGF5b3V0IHRlc3RzLiBTaW5jZSBpbiB0aGlzIGNhc2Ugd2UgYXJlIG5v
dCB3YWl0aW5nIGZvciBhIFVJUHJvY2VzcyB0byByZXBseSBuaWNlbHkuCi0gICAgLy8gSW5zdGVh
ZCB3ZSBhcmUganVzdCB0cmlnZ2VyaW5nIGZvcmNlUmVwYWludC4gQnV0IHdlIHN0aWxsIHdhbnQg
dG8gaGF2ZSB0aGUgc2NyaXB0ZWQgYW5pbWF0aW9uIGNhbGxiYWNrcyBiZWluZyBleGVjdXRlZC4K
LSAgICBzeW5jRGlzcGxheVN0YXRlKCk7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIHNjaGVkdWxlIGFu
b3RoZXIgZmx1c2gsIG90aGVyd2lzZSB0aGUgZm9yY2VkIHBhaW50IG1pZ2h0IGNhbmNlbCBhIGxh
dGVyIGV4cGVjdGVkIGZsdXNoLgotICAgIC8vIFRoaXMgaXMgYWxpZ25lZCB3aXRoIExheWVyVHJl
ZUhvc3RDQS4KLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLSAgICBmbHVzaFBlbmRpbmdMYXll
ckNoYW5nZXMoKTsKKyAgICBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpmb3JjZVJlcGFpbnQoKTsK
IH0KIAogYm9vbCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZvcmNlUmVwYWludEFzeW5jKHVp
bnQ2NF90IGNhbGxiYWNrSUQpCkBAIC0yMTIsMTk2ICsxMjMsMTIxIEBAIGJvb2wgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnRBc3luYyh1aW50NjRfdCBjYWxsYmFja0lEKQog
CiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENoYW5nZShjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiBuZXdTaXplKQogewotICAgIGlmIChtX3Jvb3RMYXllci0+c2l6ZSgpID09
IG5ld1NpemUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG5l
d1NpemUpOwotCi0gICAgLy8gSWYgdGhlIG5ld1NpemUgZXhwb3NlcyBuZXcgYXJlYXMgb2YgdGhl
IG5vbi1jb21wb3NpdGVkIGNvbnRlbnQgYSBzZXROZWVkc0Rpc3BsYXkgaXMgbmVlZGVkCi0gICAg
Ly8gZm9yIHRob3NlIG5ld2x5IGV4cG9zZWQgYXJlYXMuCi0gICAgRmxvYXRTaXplIG9sZFNpemUg
PSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKTsKLSAgICBtX25vbkNvbXBvc2l0
ZWRDb250ZW50TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7Ci0KLSAgICBpZiAobmV3U2l6ZS53aWR0
aCgpID4gb2xkU2l6ZS53aWR0aCgpKSB7Ci0gICAgICAgIGZsb2F0IGhlaWdodCA9IHN0ZDo6bWlu
KHN0YXRpY19jYXN0PGZsb2F0PihuZXdTaXplLmhlaWdodCgpKSwgb2xkU2l6ZS5oZWlnaHQoKSk7
Ci0gICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KEZsb2F0UmVjdChvbGRTaXplLndpZHRoKCksIDAsIG5ld1NpemUud2lkdGgoKSAtIG9sZFNp
emUud2lkdGgoKSwgaGVpZ2h0KSk7Ci0gICAgfQotCi0gICAgaWYgKG5ld1NpemUuaGVpZ2h0KCkg
PiBvbGRTaXplLmhlaWdodCgpKQotICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIt
PnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3QoMCwgb2xkU2l6ZS5oZWlnaHQoKSwgbmV3
U2l6ZS53aWR0aCgpLCBuZXdTaXplLmhlaWdodCgpIC0gb2xkU2l6ZS5oZWlnaHQoKSkpOwotCi0g
ICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKLSAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5z
ZXRTaXplKG5ld1NpemUpOwotCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgQ29tcG9z
aXRpbmdDb29yZGluYXRvcjo6c2l6ZURpZENoYW5nZShuZXdTaXplKTsKIH0KIAogdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZEluc3RhbGxQYWdlT3ZlcmxheSgpCiB7Ci0gICAgY3Jl
YXRlUGFnZU92ZXJsYXlMYXllcigpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIENv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKIH0KIAogdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCkKIHsK
LSAgICBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgp
OworICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7
CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRQYWdlT3ZlcmxheU5lZWRz
RGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQogewotICAgIEFTU0VSVChtX3Bh
Z2VPdmVybGF5TGF5ZXIpOwotICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNwbGF5
SW5SZWN0KHJlY3QpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIENvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KHJlY3QpOwogfQogCiB2b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0UGFnZU92ZXJsYXlPcGFjaXR5KGZsb2F0IHZh
bHVlKQogewotICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOwotICAgIG1fcGFnZU92ZXJs
YXlMYXllci0+c2V0T3BhY2l0eSh2YWx1ZSk7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cisg
ICAgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0UGFnZU92ZXJsYXlPcGFjaXR5KHZhbHVlKTsK
IH0KIAotYm9vbCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0xheWVyQ2hh
bmdlcygpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGF1c2VSZW5kZXJpbmcoKQog
ewotICAgIGlmIChtX3dhaXRpbmdGb3JVSVByb2Nlc3MpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiBwcm90ZWN0b3IobV9pc0ZsdXNoaW5nTGF5ZXJD
aGFuZ2VzLCB0cnVlKTsKLQotICAgIGNyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKCk7Ci0KLSAgICBp
bml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCgpOwotCi0gICAgbV9yb290TGF5
ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLSAgICBtX25vbkNv
bXBvc2l0ZWRDb250ZW50TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9u
bHkoKTsKLSAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQotICAgICAgICBtX3BhZ2VPdmVybGF5
TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLQotICAgIGJv
b2wgZGlkU3luYyA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+
Zmx1c2hDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7Ci0KLSAgICBmbHVzaFBl
bmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7CisgICAgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6
cGF1c2VSZW5kZXJpbmcoKTsKK30KIAotICAgIGRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKCk7Cit2
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVzdW1lUmVuZGVyaW5nKCkKK3sKKyAgICBD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZXN1bWVSZW5kZXJpbmcoKTsKK30KIAotICAgIGlmICht
X3Nob3VsZFN5bmNGcmFtZSkgewotICAgICAgICBkaWRTeW5jID0gdHJ1ZTsKK3ZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpsYXlvdXRJZk5lZWRlZCgpCit7CisgICAgbV93ZWJQYWdlLT5s
YXlvdXRJZk5lZWRlZCgpOworfQogCi0gICAgICAgIEludFNpemUgY29udGVudHNTaXplID0gcm91
bmRlZEludFNpemUobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCkpOwotICAgICAg
ICBJbnRSZWN0IGNvdmVyZWRSZWN0ID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKS0+Y292ZXJSZWN0KCk7Ci0gICAgICAgIG1fd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkRpZFJl
bmRlckZyYW1lKGNvbnRlbnRzU2l6ZSwgY292ZXJlZFJlY3QpKTsKLSAgICAgICAgbV93YWl0aW5n
Rm9yVUlQcm9jZXNzID0gdHJ1ZTsKLSAgICAgICAgbV9zaG91bGRTeW5jRnJhbWUgPSBmYWxzZTsK
LSAgICB9IGVsc2UKLSAgICAgICAgdW5sb2NrQW5pbWF0aW9ucygpOworYm9vbCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmlzT3BhcXVlQ29udGVudHMoKQoreworICAgIHJldHVybiBtX3dlYlBh
Z2UtPmRyYXdzQmFja2dyb3VuZCgpICYmICFtX3dlYlBhZ2UtPmRyYXdzVHJhbnNwYXJlbnRCYWNr
Z3JvdW5kKCk7Cit9CiAKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaWRQZXJmb3Jt
U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sIGRpZFN5bmMpCit7CiAgICAgaWYgKG1fZm9yY2VSZXBh
aW50QXN5bmNDYWxsYmFja0lEKSB7CiAgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpWb2lkQ2FsbGJhY2sobV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQp
KTsKICAgICAgICAgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQgPSAwOwogICAgIH0KIAot
ICAgIHJldHVybiBkaWRTeW5jOworICAgIGlmIChkaWRTeW5jICYmIG1fbm90aWZ5QWZ0ZXJTY2hl
ZHVsZWRMYXllckZsdXNoKSB7CisgICAgICAgIHN0YXRpY19jYXN0PERyYXdpbmdBcmVhSW1wbCo+
KG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKSktPmxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCk7Cisg
ICAgICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gZmFsc2U7CisgICAgfQog
fQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlQ29tcG9zaXRpbmdMYXll
cnMoKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnBhaW50UGFnZUNvbnRlbnRzKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBj
bGlwUmVjdCkKIHsKLSAgICBpZiAobV9sYXllcnNUb0NyZWF0ZS5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIElmIGEgbGF5ZXIgZ2V0cyBjcmVhdGVkIGFuZCBkZWxldGVkIGlu
IHRoZSBzYW1lIGN5Y2xlLCB3ZSBjYW4gc2ltcGx5IHJlbW92ZSBpdCBmcm9tIG1fbGF5ZXJzVG9D
cmVhdGUgYW5kIG1fbGF5ZXJzVG9EZWxldGUuCi0gICAgZm9yIChpbnQgaSA9IG1fbGF5ZXJzVG9D
cmVhdGUuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgc2l6ZV90IGluZGV4ID0g
bV9sYXllcnNUb0RlbGV0ZS5maW5kKG1fbGF5ZXJzVG9DcmVhdGVbaV0pOwotICAgICAgICBpZiAo
aW5kZXggIT0gbm90Rm91bmQpIHsKLSAgICAgICAgICAgIG1fbGF5ZXJzVG9DcmVhdGUucmVtb3Zl
KGkpOwotICAgICAgICAgICAgbV9sYXllcnNUb0RlbGV0ZS5yZW1vdmUoaW5kZXgpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xheWVyc1RvQ3JlYXRl
LnNpemUoKTsgKytpKQotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVDb21wb3NpdGluZ0xheWVyKG1fbGF5ZXJzVG9D
cmVhdGVbaV0pKTsKLSAgICBtX2xheWVyc1RvQ3JlYXRlLmNsZWFyKCk7Ci0gICAgbV9zaG91bGRT
eW5jRnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+ZHJhd1JlY3QoZ3JhcGhpY3NDb250ZXh0
LCBjbGlwUmVjdCk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZWxldGVD
b21wb3NpdGluZ0xheWVycygpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGFpbnRP
dmVybGF5Q29udGVudHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQs
IGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQogewotICAgIGlmIChtX2xheWVyc1RvRGVsZXRlLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faXNQdXJnaW5nKSB7Ci0gICAg
ICAgIG1fbGF5ZXJzVG9EZWxldGUuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9sYXllcnNUb0RlbGV0ZS5zaXplKCk7ICsraSkK
LSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6RGVsZXRlQ29tcG9zaXRpbmdMYXllcihtX2xheWVyc1RvRGVsZXRlW2ldKSk7Ci0g
ICAgbV9sYXllcnNUb0RlbGV0ZS5jbGVhcigpOwotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1
ZTsKKyAgICAvLyBPdmVybGF5cyBjb250YWluIHRyYW5zcGFyZW50IGNvbnRlbnRzIGFuZCB3b24n
dCBjbGVhciB0aGUgY29udGV4dCBhcyBwYXJ0IG9mIHRoZWlyIHJlbmRlcmluZywgc28gd2UgZG8g
aXQgaGVyZS4KKyAgICBncmFwaGljc0NvbnRleHQuY2xlYXJSZWN0KGNsaXBSZWN0KTsKKyAgICBt
X3dlYlBhZ2UtPmRyYXdQYWdlT3ZlcmxheShncmFwaGljc0NvbnRleHQsIGNsaXBSZWN0KTsKIH0K
IAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmluaXRpYWxpemVSb290Q29tcG9zaXRp
bmdMYXllcklmTmVlZGVkKCkKK2Jvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nKCkKIHsKLSAgICBpZiAobV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5n
TGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldFJvb3RDb21wb3NpdGluZ0xheWVyKHRv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+aWQoKSkpOwotICAg
IG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyID0gdHJ1ZTsKLSAgICBtX3Nob3Vs
ZFN5bmNGcmFtZSA9IHRydWU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNv
bnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBpbmZvKQordm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9h
dCBzY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKIHsKLSAgICBpZiAo
bV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUpIHsKLSAgICAgICAgbV93ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6RGlkQ2hhbmdlU2Ny
b2xsUG9zaXRpb24obV92aXNpYmxlQ29udGVudHNSZWN0LmxvY2F0aW9uKCkpKTsKLSAgICAgICAg
bV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUgPSBmYWxzZTsKLSAgICB9CisgICAgQ29t
cG9zaXRpbmdDb29yZGluYXRvcjo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChyZWN0LCBzY2FsZSwg
dHJhamVjdG9yeVZlY3Rvcik7CiAKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
U2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKGlkLCBpbmZvKSk7CisgICAgaWYgKG1fd2ViUGFnZS0+
dXNlRml4ZWRMYXlvdXQoKSkgeworICAgICAgICAvLyBSb3VuZCB0aGUgcmVjdCBpbnN0ZWFkIG9m
IGVuY2xvc2luZyBpdCB0byBtYWtlIHN1cmUgdGhhdCBpdHMgc2l6ZSBzdGF5cworICAgICAgICAv
LyB0aGUgc2FtZSB3aGlsZSBwYW5uaW5nLiBUaGlzIGNhbiBoYXZlIG5hc3R5IGVmZmVjdHMgb24g
bGF5b3V0LgorICAgICAgICBtX3dlYlBhZ2UtPnNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KHJv
dW5kZWRJbnRSZWN0KHJlY3QpKTsKKyAgICB9CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpzeW5jTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IFZl
Y3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBjaGlsZHJlbikKK0dyYXBoaWNzTGF5ZXJGYWN0b3J5
KiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkKIHsKLSAg
ICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckNoaWxk
cmVuKGlkLCBjaGlsZHJlbikpOworICAgIHJldHVybiB0aGlzOwogfQogCi0jaWYgVVNFKEdSQVBI
SUNTX1NVUkZBQ0UpCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlQ2FudmFz
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgUGxhdGZvcm1MYXllciogY2FudmFzUGxhdGZvcm1MYXll
cikKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCit2b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVBbmltYXRpb24oKQogewotICAgIG1fc2hvdWxkU3luY0Zy
YW1lID0gdHJ1ZTsKLSAgICBHcmFwaGljc1N1cmZhY2VUb2tlbiB0b2tlbiA9IGNhbnZhc1BsYXRm
b3JtTGF5ZXItPmdyYXBoaWNzU3VyZmFjZVRva2VuKCk7Ci0gICAgSW50U2l6ZSBjYW52YXNTaXpl
ID0gY2FudmFzUGxhdGZvcm1MYXllci0+cGxhdGZvcm1MYXllclNpemUoKTsKLSAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVD
YW52YXMoaWQsIGNhbnZhc1NpemUsIHRva2VuKSk7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6UmVxdWVzdEFuaW1hdGlvbkZyYW1l
KCkpOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0NhbnZhcyhDb29y
ZGluYXRlZExheWVySUQgaWQsIFBsYXRmb3JtTGF5ZXIqIGNhbnZhc1BsYXRmb3JtTGF5ZXIpCit2
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6YW5pbWF0aW9uRnJhbWVSZWFkeSgpCiB7Ci0g
ICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIHVpbnQzMl90IGZyb250QnVmZmVyID0g
Y2FudmFzUGxhdGZvcm1MYXllci0+Y29weVRvR3JhcGhpY3NTdXJmYWNlKCk7Ci0gICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U3luY0Nh
bnZhcyhpZCwgZnJvbnRCdWZmZXIpKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKIH0KKyNl
bmRpZgogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGVzdHJveUNhbnZhcyhDb29y
ZGluYXRlZExheWVySUQgaWQpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVuZGVy
TmV4dEZyYW1lKCkKIHsKLSAgICBpZiAobV9pc1B1cmdpbmcpCi0gICAgICAgIHJldHVybjsKKyAg
ICBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZW5kZXJOZXh0RnJhbWUoKTsKK30KIAotICAgIG1f
c2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpEZXN0cm95Q2FudmFzKGlkKSk7Cit2b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKK3sKKyAgICBDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yOjpwdXJnZUJhY2tpbmdTdG9yZXMoKTsKIH0KLSNlbmRpZgogCi0j
aWYgRU5BQkxFKENTU19GSUxURVJTKQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5
bmNMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiBmaWx0ZXJzKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldEJhY2tncm91
bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYgY29sb3IpCiB7Ci0gICAgbV9zaG91bGRTeW5j
RnJhbWUgPSB0cnVlOwotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBjaGVja0N1c3RvbUZp
bHRlclByb2dyYW1Qcm94aWVzKGZpbHRlcnMpOwotI2VuZGlmCi0gICAgbV93ZWJQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9zaXRpbmdM
YXllckZpbHRlcnMoaWQsIGZpbHRlcnMpKTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6
OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3Ip
KTsKIH0KLSNlbmRpZgogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYgZmlsdGVycykKQEAgLTQ1NSw0MTYgKzI5MSw1IEBAIHZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpkaXNjb25uZWN0Q3VzdG9tRmlsdGVyUHJvZ3JhbXMoKQogfQog
I2VuZGlmCiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXRhY2hMYXllcihDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGxheWVyKQotewotICAgIG1fcmVnaXN0ZXJlZExheWVycy5y
ZW1vdmUobGF5ZXIpOwotICAgIG1fbGF5ZXJzVG9EZWxldGUuYXBwZW5kKGxheWVyLT5pZCgpKTsK
LSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlT2Zmc2V0
RnJvbVZpZXdwb3J0Rm9yU2VsZihSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIpCi17Ci0gICAgLy8g
VGhlc2UgY29uZGl0aW9ucyBtdXN0IG1hdGNoIHRoZSBjb25kaXRpb25zIGluIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uLgotICAgIFJlbmRlckxh
eWVyQmFja2luZyogYmFja2luZyA9IHJlbmRlckxheWVyLT5iYWNraW5nKCk7Ci0gICAgaWYgKCFi
YWNraW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5k
ZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5pc091dE9mRmxvd1Bv
c2l0aW9uZWQoKSB8fCByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+cG9zaXRpb24o
KSAhPSBGaXhlZFBvc2l0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlckxh
eWVyLT5yZW5kZXJlcigpLT5jb250YWluZXIoKS0+aXNSZW5kZXJWaWV3KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghcmVuZGVyTGF5ZXItPmlzU3RhY2tpbmdDb250ZXh0KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXll
ciA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGJhY2tpbmctPmdyYXBoaWNzTGF5ZXIoKSk7
Ci0gICAgZ3JhcGhpY3NMYXllci0+c2V0Rml4ZWRUb1ZpZXdwb3J0KHRydWUpOwotfQotCi1zdGF0
aWMgdm9pZCB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihSZW5kZXJMYXllciogcmVu
ZGVyTGF5ZXIpCi17Ci0gICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yU2VsZihyZW5kZXJM
YXllcik7Ci0KLSAgICBpZiAocmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgdXBk
YXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIocmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSk7
Ci0gICAgaWYgKHJlbmRlckxheWVyLT5uZXh0U2libGluZygpKQotICAgICAgICB1cGRhdGVPZmZz
ZXRGcm9tVmlld3BvcnRGb3JMYXllcihyZW5kZXJMYXllci0+bmV4dFNpYmxpbmcoKSk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jRml4ZWRMYXllcnMoKQotewotICAg
IGlmICghbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpIHx8ICFtX3dlYlBhZ2UtPmNv
cmVQYWdlKCktPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0
aW9uRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fd2ViUGFnZS0+bWFp
bkZyYW1lKCktPnZpZXcoKS0+aGFzVmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgUmVuZGVyTGF5ZXIqIHJvb3RSZW5kZXJMYXllciA9IG1fd2ViUGFn
ZS0+bWFpbkZyYW1lKCktPmNvbnRlbnRSZW5kZXJlcigpLT5jb21wb3NpdG9yKCktPnJvb3RSZW5k
ZXJMYXllcigpOwotICAgIEFTU0VSVChyb290UmVuZGVyTGF5ZXIpOwotICAgIGlmIChyb290UmVu
ZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0
Rm9yTGF5ZXIocm9vdFJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpOwotfQotCi12b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6bG9ja0FuaW1hdGlvbnMoKQotewotICAgIG1fYW5pbWF0aW9u
c0xvY2tlZCA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6U2V0QW5pbWF0aW9uc0xvY2tlZCh0cnVlKSk7Ci19Ci0KLXZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp1bmxvY2tBbmltYXRpb25zKCkKLXsKLSAgICBp
ZiAoIW1fYW5pbWF0aW9uc0xvY2tlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9hbmltYXRp
b25zTG9ja2VkID0gZmFsc2U7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0QW5pbWF0aW9uc0xvY2tlZChmYWxzZSkpOwotfQot
Ci12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1
c2goKQotewotICAgIGlmIChtX2lzU3VzcGVuZGVkIHx8IG1fd2FpdGluZ0ZvclVJUHJvY2VzcykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UgbG9jayB0aGUgYW5pbWF0aW9ucyB3aGlsZSBw
ZXJmb3JtaW5nIGxheW91dCwgdG8gYXZvaWQgZmxpY2tlcnMgY2F1c2VkIGJ5IGFuaW1hdGlvbnMg
Y29udGludWluZyBpbiB0aGUgVUkgcHJvY2VzcyB3aGlsZQotICAgIC8vIHRoZSB3ZWIgcHJvY2Vz
cyBsYXlvdXQgd2FudHMgdG8gY2FuY2VsIHRoZW0uCi0gICAgbG9ja0FuaW1hdGlvbnMoKTsKLSAg
ICBzeW5jRGlzcGxheVN0YXRlKCk7Ci0KLSAgICAvLyBXZSBjYW4gdW5sb2NrIHRoZSBhbmltYXRp
b25zIGJlZm9yZSBmbHVzaGluZyBpZiB0aGVyZSBhcmUgbm8gdmlzaWJsZSBjaGFuZ2VzLCBmb3Ig
ZXhhbXBsZSBpZiB0aGVyZSBhcmUgY29udGVudCB1cGRhdGVzCi0gICAgLy8gaW4gYSBsYXllciB3
aXRoIG9wYWNpdHkgMC4KLSAgICBib29sIGNhblVubG9ja0JlZm9yZUZsdXNoID0gIW1faXNWYWxp
ZCB8fCAhdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5oYXNQ
ZW5kaW5nVmlzaWJsZUNoYW5nZXMoKTsKLSAgICBpZiAoY2FuVW5sb2NrQmVmb3JlRmx1c2gpCi0g
ICAgICAgIHVubG9ja0FuaW1hdGlvbnMoKTsKLQotICAgIGlmICghbV9pc1ZhbGlkKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkpCi0gICAgICAg
IGRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpzeW5jRGlzcGxheVN0YXRlKCkKLXsKLSNpZiBFTkFCTEUoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUUpICYmICFVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIpICYm
ICFVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IGFueSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgYW5pbWF0aW9uIGNhbGxiYWNr
cyBhcmUgYmVpbmcgZXhlY3V0ZWQgYmVmb3JlIHdlIGZsdXNoIHRoZSBsYXllcnMuCi0gICAgbV93
ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5zZXJ2aWNlU2NyaXB0ZWRB
bmltYXRpb25zKGNvbnZlcnRTZWNvbmRzVG9ET01UaW1lU3RhbXAoY3VycmVudFRpbWUoKSkpOwot
I2VuZGlmCi0KLSAgICBtX3dlYlBhZ2UtPmxheW91dElmTmVlZGVkKCk7Ci19Ci0KLXZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaWRQZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpCi17
Ci0gICAgaWYgKG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKSB7Ci0gICAgICAgIHN0
YXRpY19jYXN0PERyYXdpbmdBcmVhSW1wbCo+KG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKSktPmxh
eWVySG9zdERpZEZsdXNoTGF5ZXJzKCk7Ci0gICAgICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRM
YXllckZsdXNoID0gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoVGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
PiopCi17Ci0gICAgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKQotewotICAgIEFT
U0VSVCghbV9wYWdlT3ZlcmxheUxheWVyKTsKLQotICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IEdy
YXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzLCB0aGlzKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9w
YWdlT3ZlcmxheUxheWVyLT5zZXROYW1lKCJDb29yZGluYXRlZExheWVyVHJlZUhvc3QgcGFnZSBv
dmVybGF5IGNvbnRlbnQiKTsKLSNlbmRpZgotCi0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRE
cmF3c0NvbnRlbnQodHJ1ZSk7Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRTaXplKG1fd2Vi
UGFnZS0+c2l6ZSgpKTsKLQotICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX3BhZ2VPdmVybGF5
TGF5ZXIuZ2V0KCkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGVzdHJv
eVBhZ2VPdmVybGF5TGF5ZXIoKQotewotICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOwot
ICAgIG1fcGFnZU92ZXJsYXlMYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIG1fcGFnZU92
ZXJsYXlMYXllciA9IG51bGxwdHI7Ci19Ci0KLVBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmc+IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVk
ZWQoSW1hZ2UqIGltYWdlKQotewotICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJ
RCA9IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpnZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
KGltYWdlKTsKLSAgICBJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tp
bmdzLmZpbmQoaW1hZ2VJRCk7Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBp
bWFnZUJhY2tpbmc7Ci0gICAgaWYgKGl0ID09IG1faW1hZ2VCYWNraW5ncy5lbmQoKSkgewotICAg
ICAgICBpbWFnZUJhY2tpbmcgPSBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y3JlYXRlKHRoaXMs
IGltYWdlKTsKLSAgICAgICAgbV9pbWFnZUJhY2tpbmdzLmFkZChpbWFnZUlELCBpbWFnZUJhY2tp
bmcpOwotICAgIH0gZWxzZQotICAgICAgICBpbWFnZUJhY2tpbmcgPSBpdC0+dmFsdWU7Ci0KLSAg
ICByZXR1cm4gaW1hZ2VCYWNraW5nOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6Y3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkK
LXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlSW1hZ2VCYWNraW5n
KGltYWdlSUQpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnVwZGF0ZUlt
YWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQsIGNvbnN0IFdlYkNv
b3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJh
bWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OlVwZGF0ZUltYWdlQmFja2luZyhpbWFnZUlELCBoYW5kbGUpKTsKLX0K
LQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVu
dHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIG1fc2hvdWxkU3lu
Y0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5OjpDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKGltYWdlSUQpKTsK
LX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZUltYWdlQmFja2luZyhD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCi17Ci0gICAgaWYgKG1faXNQdXJnaW5n
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5z
KGltYWdlSUQpKTsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV9pbWFnZUJh
Y2tpbmdzLnJlbW92ZShpbWFnZUlEKTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpSZW1vdmVJbWFnZUJhY2tpbmcoaW1hZ2VJRCkp
OwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zmx1c2hQZW5kaW5nSW1hZ2VC
YWNraW5nQ2hhbmdlcygpCi17Ci0gICAgSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBlbmQgPSBt
X2ltYWdlQmFja2luZ3MuZW5kKCk7Ci0gICAgZm9yIChJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtX2ltYWdlQmFja2luZ3MuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAg
ICAgICAgaXRlci0+dmFsdWUtPnVwZGF0ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKiwgZG91YmxlIC8qIHRpbWUgKi8pCi17Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0Ojpub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
KQotewotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBn
cmFwaGljc0xheWVyLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwg
V2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIGNsaXBSZWN0KQotewotICAgIGlmIChncmFwaGljc0xheWVyID09IG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllcikgewotICAgICAgICBtX3dlYlBhZ2UtPmRyYXdSZWN0KGdyYXBoaWNzQ29u
dGV4dCwgY2xpcFJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGdyYXBo
aWNzTGF5ZXIgPT0gbV9wYWdlT3ZlcmxheUxheWVyKSB7Ci0gICAgICAgIC8vIE92ZXJsYXlzIGNv
bnRhaW4gdHJhbnNwYXJlbnQgY29udGVudHMgYW5kIHdvbid0IGNsZWFyIHRoZSBjb250ZXh0IGFz
IHBhcnQgb2YgdGhlaXIgcmVuZGVyaW5nLCBzbyB3ZSBkbyBpdCBoZXJlLgotICAgICAgICBncmFw
aGljc0NvbnRleHQuY2xlYXJSZWN0KGNsaXBSZWN0KTsKLSAgICAgICAgbV93ZWJQYWdlLT5kcmF3
UGFnZU92ZXJsYXkoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci19Ci0KLVBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpjcmVhdGVHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkK
LXsKLSAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbmV3IENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcihjbGllbnQpOwotICAgIGxheWVyLT5zZXRDb29yZGluYXRvcih0aGlzKTsK
LSAgICBtX3JlZ2lzdGVyZWRMYXllcnMuYWRkKGxheWVyKTsKLSAgICBtX2xheWVyc1RvQ3JlYXRl
LmFwcGVuZChsYXllci0+aWQoKSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzU2NhbGUobV9jb250
ZW50c1NjYWxlKTsKLSAgICBsYXllci0+c2V0TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1lbnQoKTsK
LSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobGF5ZXIpOwot
fQotCi1ib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygp
Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQs
IGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiB0aWxlUmVjdCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3Jl
YXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsK
LX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnVwZGF0ZVRpbGUoQ29vcmRpbmF0
ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUlu
Zm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHRpbGVSZWN0KQotewotICAg
IG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6
OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpVcGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJ
RCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbykpOwotfQotCi12b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6cmVtb3ZlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWlu
dDMyX3QgdGlsZUlEKQotewotICAgIGlmIChtX2lzUHVyZ2luZykKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpSZW1vdmVUaWxlRm9yTGF5ZXIobGF5
ZXJJRCwgdGlsZUlEKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVh
dGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBjb25zdCBXZWJDb29yZGluYXRlZFN1cmZh
Y2U6OkhhbmRsZSYgaGFuZGxlKQotewotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZVVwZGF0ZUF0bGFzKGF0bGFzSUQsIGhh
bmRsZSkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlVXBkYXRl
QXRsYXModWludDMyX3QgYXRsYXNJRCkKLXsKLSAgICBpZiAobV9pc1B1cmdpbmcpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpSZW1vdmVVcGRhdGVBdGxhcyhhdGxhc0lEKSk7Ci19Ci0KLVdlYkNvcmU6
OkZsb2F0UmVjdCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnZpc2libGVDb250ZW50c1JlY3Qo
KSBjb25zdAotewotICAgIHJldHVybiBtX3Zpc2libGVDb250ZW50c1JlY3Q7Ci19Ci0KLQotdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRl
ZExheWVySUQgbGF5ZXJJRCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1hdGlv
bnMpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIEdyYXBoaWNzTGF5ZXJB
bmltYXRpb25zIGFjdGl2ZUFuaW1hdGlvbnMgPSBhbmltYXRpb25zLmdldEFjdGl2ZUFuaW1hdGlv
bnMoKTsKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBhY3RpdmVBbmltYXRpb25zLmFuaW1hdGlvbnMoKS5zaXplKCk7ICsraSkgewotICAgICAgICBj
b25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzID0gYW5pbWF0aW9ucy5hbmltYXRpb25z
KCkuYXQoaSkua2V5ZnJhbWVzKCk7Ci0gICAgICAgIGlmIChrZXlmcmFtZXMucHJvcGVydHkoKSAh
PSBBbmltYXRlZFByb3BlcnR5V2Via2l0RmlsdGVyKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwga2V5ZnJhbWVzLnNpemUoKTsgKytqKSB7Ci0g
ICAgICAgICAgICBjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSogZmlsdGVyVmFsdWUgPSBzdGF0
aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSo+KGtleWZyYW1lcy5hdChpKSk7Ci0g
ICAgICAgICAgICBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKCpmaWx0ZXJWYWx1ZS0+
dmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLSAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRMYXllckFuaW1hdGlv
bnMobGF5ZXJJRCwgYWN0aXZlQW5pbWF0aW9ucykpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGZsb2F0IHNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQotewotICAg
IGJvb2wgY29udGVudHNSZWN0RGlkQ2hhbmdlID0gcmVjdCAhPSBtX3Zpc2libGVDb250ZW50c1Jl
Y3Q7Ci0gICAgYm9vbCBjb250ZW50c1NjYWxlRGlkQ2hhbmdlID0gc2NhbGUgIT0gbV9jb250ZW50
c1NjYWxlOwotCi0gICAgLy8gQSB6ZXJvIHRyYWplY3RvcnlWZWN0b3IgaW5kaWNhdGVzIHRoYXQg
dGlsZXMgYWxsIGFyb3VuZCB0aGUgdmlld3BvcnQgYXJlIHJlcXVlc3RlZC4KLSAgICB0b0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcihtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpLT5z
ZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKHRyYWplY3RvcnlWZWN0b3IpOwot
Ci0gICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSB8fCBjb250ZW50c1NjYWxlRGlkQ2hhbmdl
KSB7Ci0gICAgICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7Ci0gICAgICAgIG1fY29u
dGVudHNTY2FsZSA9IHNjYWxlOwotCi0gICAgICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGVuZCA9IG1fcmVnaXN0ZXJlZExheWVycy5lbmQo
KTsKLSAgICAgICAgZm9yIChIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cio+OjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChjb250ZW50c1NjYWxlRGlkQ2hhbmdlKQotICAgICAg
ICAgICAgICAgICgqaXQpLT5zZXRDb250ZW50c1NjYWxlKHNjYWxlKTsKLSAgICAgICAgICAgIGlm
IChjb250ZW50c1JlY3REaWRDaGFuZ2UpCi0gICAgICAgICAgICAgICAgKCppdCktPnNldE5lZWRz
VmlzaWJsZVJlY3RBZGp1c3RtZW50KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzY2hlZHVs
ZUxheWVyRmx1c2goKTsKLSAgICBpZiAobV93ZWJQYWdlLT51c2VGaXhlZExheW91dCgpKSB7Ci0g
ICAgICAgIC8vIFJvdW5kIHRoZSByZWN0IGluc3RlYWQgb2YgZW5jbG9zaW5nIGl0IHRvIG1ha2Ug
c3VyZSB0aGF0IGl0cyBzaXplIHN0YXlzCi0gICAgICAgIC8vIHRoZSBzYW1lIHdoaWxlIHBhbm5p
bmcuIFRoaXMgY2FuIGhhdmUgbmFzdHkgZWZmZWN0cyBvbiBsYXlvdXQuCi0gICAgICAgIG1fd2Vi
UGFnZS0+c2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlY3Qocm91bmRlZEludFJlY3QocmVjdCkpOwot
ICAgIH0KLQotICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFuZ2UpCi0gICAgICAgIG1fc2hvdWxk
U2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlID0gdHJ1ZTsKLX0KLQotR3JhcGhpY3NMYXllckZhY3Rv
cnkqIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Z3JhcGhpY3NMYXllckZhY3RvcnkoKQotewot
ICAgIHJldHVybiB0aGlzOwotfQotCi0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1F
KQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlQW5pbWF0aW9uKCkKLXsK
LSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjphbmltYXRpb25GcmFtZVJlYWR5KCkKLXsKLSAgICBzY2hlZHVsZUxheWVyRmx1
c2goKTsKLX0KLSNlbmRpZgotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVuZGVy
TmV4dEZyYW1lKCkKLXsKLSAgICBtX3dhaXRpbmdGb3JVSVByb2Nlc3MgPSBmYWxzZTsKLSAgICBz
Y2hlZHVsZUxheWVyRmx1c2goKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV91cGRh
dGVBdGxhc2VzLnNpemUoKTsgKytpKQotICAgICAgICBtX3VwZGF0ZUF0bGFzZXNbaV0tPmRpZFN3
YXBCdWZmZXJzKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwdXJnZUJh
Y2tpbmdTdG9yZXMoKQotewotICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiBwdXJnaW5nVG9nZ2xl
KG1faXNQdXJnaW5nLCB0cnVlKTsKLQotICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGVuZCA9IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKTsK
LSAgICBmb3IgKEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0
ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgKCppdCktPnB1cmdlQmFja2luZ1N0b3JlcygpOwotCi0gICAgbV9pbWFnZUJhY2tp
bmdzLmNsZWFyKCk7Ci0gICAgbV91cGRhdGVBdGxhc2VzLmNsZWFyKCk7Ci19Ci0KLVBhc3NPd25Q
dHI8R3JhcGhpY3NDb250ZXh0PiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmJlZ2luQ29udGVu
dFVwZGF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzIGZs
YWdzLCB1aW50MzJfdCYgYXRsYXNJRCwgSW50UG9pbnQmIG9mZnNldCkKLXsKLSAgICBPd25QdHI8
R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQ7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkgewotICAgICAgICBVcGRhdGVBdGxh
cyogYXRsYXMgPSBtX3VwZGF0ZUF0bGFzZXNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmIChhdGxhcy0+
c3VwcG9ydHNBbHBoYSgpID09IChmbGFncyAmIENvb3JkaW5hdGVkU3VyZmFjZTo6U3VwcG9ydHNB
bHBoYSkpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGVyZSBp
cyBubyBhdmFpbGFibGUgYnVmZmVyIHNwYWNlLgotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0
ID0gYXRsYXMtPmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihhdGxhc0lELCBzaXplLCBv
ZmZzZXQpOwotICAgICAgICAgICAgaWYgKGdyYXBoaWNzQ29udGV4dCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZ3JhcGhpY3NDb250ZXh0LnJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHN0YXRpYyBjb25zdCBpbnQgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiA9IDEwMjQ7IC8vIFNo
b3VsZCBiZSBhIHBvd2VyIG9mIHR3by4KLSAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKGFkb3B0
UHRyKG5ldyBVcGRhdGVBdGxhcyh0aGlzLCBTY3JhdGNoQnVmZmVyRGltZW5zaW9uLCBmbGFncykp
KTsKLSAgICBzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMoKTsKLSAgICByZXR1cm4gbV91
cGRhdGVBdGxhc2VzLmxhc3QoKS0+YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGF0bGFz
SUQsIHNpemUsIG9mZnNldCk7Ci19Ci0KLWNvbnN0IGRvdWJsZSBSZWxlYXNlSW5hY3RpdmVBdGxh
c2VzVGltZXJJbnRlcnZhbCA9IDAuNTsKLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpCi17Ci0gICAgaWYgKCFtX3JlbGVhc2VJ
bmFjdGl2ZUF0bGFzZXNUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3JlbGVhc2VJbmFjdGl2
ZUF0bGFzZXNUaW1lci5zdGFydFJlcGVhdGluZyhSZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJJ
bnRlcnZhbCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZWxlYXNlSW5h
Y3RpdmVBdGxhc2VzVGltZXJGaXJlZChUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+KikK
LXsKLSAgICAvLyBXZSBhbHdheXMgd2FudCB0byBrZWVwIG9uZSBhdGxhcyBmb3Igbm9uLWNvbXBv
c2l0ZWQgY29udGVudC4KLSAgICBPd25QdHI8VXBkYXRlQXRsYXM+IGF0bGFzVG9LZWVwQW55d2F5
OwotICAgIGJvb2wgZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ID0gZmFs
c2U7Ci0gICAgZm9yIChpbnQgaSA9IG1fdXBkYXRlQXRsYXNlcy5zaXplKCkgLSAxOyAgaSA+PSAw
OyAtLWkpIHsKLSAgICAgICAgVXBkYXRlQXRsYXMqIGF0bGFzID0gbV91cGRhdGVBdGxhc2VzW2ld
LmdldCgpOwotICAgICAgICBpZiAoIWF0bGFzLT5pc0luVXNlKCkpCi0gICAgICAgICAgICBhdGxh
cy0+YWRkVGltZUluYWN0aXZlKFJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckludGVydmFsKTsK
LSAgICAgICAgYm9vbCB1c2FibGVGb3JOb25Db21wb3NpdGVkQ29udGVudCA9ICFhdGxhcy0+c3Vw
cG9ydHNBbHBoYSgpOwotICAgICAgICBpZiAoYXRsYXMtPmlzSW5hY3RpdmUoKSkgewotICAgICAg
ICAgICAgaWYgKCFmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgJiYgIWF0
bGFzVG9LZWVwQW55d2F5ICYmIHVzYWJsZUZvck5vbkNvbXBvc2l0ZWRDb250ZW50KQotICAgICAg
ICAgICAgICAgIGF0bGFzVG9LZWVwQW55d2F5ID0gbV91cGRhdGVBdGxhc2VzW2ldLnJlbGVhc2Uo
KTsKLSAgICAgICAgICAgIG1fdXBkYXRlQXRsYXNlcy5yZW1vdmUoaSk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAodXNhYmxlRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQpCi0gICAgICAgICAgICBmb3VuZEFj
dGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgPSB0cnVlOwotICAgIH0KLQotICAgIGlm
ICghZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ICYmIGF0bGFzVG9LZWVw
QW55d2F5KQotICAgICAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKGF0bGFzVG9LZWVwQW55d2F5
LnJlbGVhc2UoKSk7Ci0KLSAgICBpZiAobV91cGRhdGVBdGxhc2VzLnNpemUoKSA8PSAxKQotICAg
ICAgICBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5zdG9wKCk7Ci19Ci0KLXZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6
Q29sb3ImIGNvbG9yKQotewotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldEJhY2tncm91bmRDb2xvcihjb2xvcikpOwotfQotCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKICNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdC5oCmluZGV4IDQ4MThlZDlmMDAwZjliODQ4ZGVhZjZhMjYzMWI5ZTc2MjA4YTZiZjcuLmZl
MDgyZDc0ODIwMjUxMDEyMDk3OGQ3Mjg5NTU3ZjczY2Y5OGJiOTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkg
MTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIy
LDMxICsyMywyNSBAQAogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogCi0jaW5jbHVk
ZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmcuaCIKKyNpbmNsdWRlICJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yLmgiCiAjaW5jbHVk
ZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKLSNpbmNs
dWRlICJUaW1lci5oIgotI2luY2x1ZGUgIlVwZGF0ZUF0bGFzLmgiCi0jaW5jbHVkZSAiV2ViQ29v
cmRpbmF0ZWRTdXJmYWNlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyRmFjdG9yeS5oPgogI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKICNpZiBFTkFCTEUoQ1NT
X1NIQURFUlMpCiAjaW5jbHVkZSAiV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LmgiCiAjZW5k
aWYKIAorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3JhcGhpY3NMYXllckZhY3Rvcnk7Cit9
CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBVcGRhdGVJbmZvOwogY2xhc3MgV2ViUGFn
ZTsKIAotY2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IDogcHVibGljIExheWVyVHJlZUhv
c3QsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQKLSAgICAsIHB1YmxpYyBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXJDbGllbnQKLSAgICAsIHB1YmxpYyBDb29yZGluYXRlZEltYWdlQmFja2lu
Zzo6Q29vcmRpbmF0b3IKLSAgICAsIHB1YmxpYyBVcGRhdGVBdGxhc0NsaWVudAotICAgICwgcHVi
bGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5CitjbGFzcyBDb29yZGluYXRlZExheWVy
VHJlZUhvc3QgOiBwdWJsaWMgTGF5ZXJUcmVlSG9zdCwgQ29tcG9zaXRpbmdDb29yZGluYXRvcgog
I2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICAsIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94
eUNsaWVudAogI2VuZGlmCkBAIC01NSw2ICs1MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IGNyZWF0ZShXZWJQYWdlKik7CiAgICAg
dmlydHVhbCB+Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KCk7CiAKKyAgICAvLyBSZWltcGxlbWVu
dGF0aW9ucyBmcm9tIExheWVyVHJlZUhvc3QKICAgICB2aXJ0dWFsIGNvbnN0IExheWVyVHJlZUNv
bnRleHQmIGxheWVyVHJlZUNvbnRleHQoKSB7IHJldHVybiBtX2xheWVyVHJlZUNvbnRleHQ7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wpOwog
ICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2goKTsKQEAgLTc0LDEzNyArNzAsNTIg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3ZlcmxheU9wYWNpdHkoZmxvYXQp
OwogICAgIHZpcnR1YWwgYm9vbCBwYWdlT3ZlcmxheVNob3VsZEFwcGx5RmFkZVdoZW5QYWludGlu
ZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGF1c2VSZW5k
ZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHJlc3Vt
ZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOyBzY2hlZHVsZUxheWVyRmx1c2go
KTsgfQorICAgIHZpcnR1YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpOworICAgIHZpcnR1YWwgdm9p
ZCByZXN1bWVSZW5kZXJpbmcoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JE
aWRDaGFuZ2UoKSB7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKFdlYkNvcmU6OkltYWdlKikgT1ZFUlJJ
REU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpIGNvbnN0IE9W
RVJSSURFIHsgcmV0dXJuIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlczsgfQotICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25z
dCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwg
Y29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAg
dmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxl
SUQpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVDb250ZW50c1JlY3Qo
KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7CiAgICAgdmlydHVh
bCB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxl
Q29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0IHNjYWxlLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBD
OjpNZXNzYWdlSUQsIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJik7CiAgICAgdmlydHVhbCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogZ3JhcGhpY3NMYXllckZhY3RvcnkoKSBPVkVSUklE
RTsKLQotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQs
IGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXll
ckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5
ZXJJRD4mKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVk
TGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKLSNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckZpbHRlcnMoQ29v
cmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7Ci0jZW5k
aWYKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQ2Fu
dmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJSSURF
OwotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29y
ZTo6UGxhdGZvcm1MYXllciopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95Q2Fu
dmFzKENvb3JkaW5hdGVkTGF5ZXJJRCkgT1ZFUlJJREU7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZv
aWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKik7Ci0gICAg
dmlydHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygpOwotCi0gICAgdmlydHVhbCBQYXNzT3duUHRy
PFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNv
cmU6OkludFNpemUmLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50MzJfdCYgYXRsYXNJ
RCwgV2ViQ29yZTo6SW50UG9pbnQmKTsKLQotICAgIC8vIFVwZGF0ZUF0bGFzQ2xpZW50Ci0gICAg
dmlydHVhbCB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIGNvbnN0IFdl
YkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVVw
ZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpOwotCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFU
SU9OX0ZSQU1FKQogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIE9WRVJSSURF
OwogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJD
b3JlOjpDb2xvciYpIE9WRVJSSURFOwogCi1wcm90ZWN0ZWQ6Citwcml2YXRlOgogICAgIGV4cGxp
Y2l0IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdChXZWJQYWdlKik7CiAKLXByaXZhdGU6Ci0gICAg
Ly8gR3JhcGhpY3NMYXllckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25T
dGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSk7Ci0gICAg
dmlydHVhbCB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NM
YXllciopOwotICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOwot
Ci0gICAgLy8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5hdG9yCi0gICAgdmlydHVh
bCB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJikgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUltYWdl
QmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKLQotICAgIHZvaWQg
Zmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpOwotCi0gICAgLy8gR3JhcGhpY3NMYXll
ckZhY3RvcnkKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4g
Y3JlYXRlR3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50KikgT1ZFUlJJ
REU7Ci0KLSAgICAvLyBDb29yZGluYXRlZExheWVyVHJlZUhvc3QKLSAgICB2b2lkIGluaXRpYWxp
emVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKCk7Ci0gICAgdm9pZCBjcmVhdGVQYWdlT3Zl
cmxheUxheWVyKCk7Ci0gICAgdm9pZCBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpOwotICAgIGJv
b2wgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7Ci0gICAgdm9pZCBjcmVhdGVDb21wb3NpdGlu
Z0xheWVycygpOwotICAgIHZvaWQgZGVsZXRlQ29tcG9zaXRpbmdMYXllcnMoKTsKLSAgICB2b2lk
IGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7Ci0gICAgdm9pZCBwZXJmb3JtU2NoZWR1bGVkTGF5
ZXJGbHVzaCgpOwotICAgIHZvaWQgZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKLSAg
ICB2b2lkIHN5bmNEaXNwbGF5U3RhdGUoKTsKLSAgICB2b2lkIGxvY2tBbmltYXRpb25zKCk7Ci0g
ICAgdm9pZCB1bmxvY2tBbmltYXRpb25zKCk7Ci0KLSAgICB2b2lkIGxheWVyRmx1c2hUaW1lckZp
cmVkKFdlYkNvcmU6OlRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4qKTsKLQotICAgIHZv
aWQgc2NoZWR1bGVSZWxlYXNlSW5hY3RpdmVBdGxhc2VzKCk7CisgICAgLy8gUmVpbXBsZW1lbnRh
dGlvbnMgZnJvbSBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yCisgICAgdmlydHVhbCB2b2lkIGRpZFBl
cmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKGJvb2wgZGlkU3luYykgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBib29sIGlzT3BhcXVlQ29udGVudHMoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
bGF5b3V0SWZOZWVkZWQoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRQYWdlQ29u
dGVudHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
Y2xpcFJlY3QpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwYWludE92ZXJsYXlDb250ZW50
cyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlw
UmVjdCkgT1ZFUlJJREU7CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgIHZpcnR1YWwgdm9p
ZCBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKGNvbnN0IFdlYkNvcmU6OkZpbHRlck9w
ZXJhdGlvbnMmIGZpbHRlcnMpIE9WRVJSSURFOworI2VuZGlmCisKICNpZiBFTkFCTEUoUkVRVUVT
VF9BTklNQVRJT05fRlJBTUUpCiAgICAgdm9pZCBhbmltYXRpb25GcmFtZVJlYWR5KCk7CiAjZW5k
aWYKIAotICAgIHZvaWQgcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQoV2ViQ29yZTo6
VGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiopOwotCiAjaWYgRU5BQkxFKENTU19TSEFE
RVJTKQogICAgIC8vIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudAotICAgIHZvaWQg
cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94
eSopOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkoV2Vi
Q3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KikgT1ZFUlJJREU7CiAKLSAgICB2b2lkIGNoZWNrQ3Vz
dG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYp
OwogICAgIHZvaWQgZGlzY29ubmVjdEN1c3RvbUZpbHRlclByb2dyYW1zKCk7CiAjZW5kaWYKIAot
ICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKLQotICAgIC8v
IFRoZSBsYXllciB3aGljaCBjb250YWlucyBhbGwgbm9uLWNvbXBvc2l0ZWQgY29udGVudC4KLSAg
ICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyOwotCi0gICAgLy8gVGhlIHBhZ2Ugb3ZlcmxheSBsYXllci4gV2lsbCBiZSBudWxsIGlmIHRo
ZXJlJ3Mgbm8gcGFnZSBvdmVybGF5LgotICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVy
PiBtX3BhZ2VPdmVybGF5TGF5ZXI7CisgICAgYm9vbCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5
ZXJGbHVzaDsKKyAgICB1aW50NjRfdCBtX2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJRDsKIAot
ICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj4gbV9yZWdpc3Rl
cmVkTGF5ZXJzOwotICAgIFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+IG1fbGF5ZXJzVG9DcmVh
dGU7Ci0gICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4gbV9sYXllcnNUb0RlbGV0ZTsKLSAg
ICB0eXBlZGVmIEhhc2hNYXA8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUmVmUHRyPENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nPiA+IEltYWdlQmFja2luZ01hcDsKLSAgICBJbWFnZUJhY2tpbmdN
YXAgbV9pbWFnZUJhY2tpbmdzOwotICAgIFZlY3RvcjxPd25QdHI8VXBkYXRlQXRsYXM+ID4gbV91
cGRhdGVBdGxhc2VzOworICAgIExheWVyVHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0Owog
CiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogICAgIEhhc2hTZXQ8V2ViQ3VzdG9tRmlsdGVyUHJv
Z3JhbVByb3h5Kj4gbV9jdXN0b21GaWx0ZXJQcm9ncmFtczsKICNlbmRpZgotCi0gICAgYm9vbCBt
X25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaDsKLSAgICBib29sIG1faXNWYWxpZDsKLSAg
ICAvLyBXZSBkb24ndCBzZW5kIHRoZSBtZXNzYWdlcyByZWxhdGVkIHRvIHJlbGVhc2luZyByZXNv
dXJjZXMgdG8gVUkgUHJvY2VzcyBkdXJpbmcgcHVyZ2luZywgYmVjYXVzZSBVSSBQcm9jZXNzIGFs
cmVhZHkgaGFkIHJlbW92ZWQgYWxsIHJlc291cmNlcy4KLSAgICBib29sIG1faXNQdXJnaW5nOwot
ICAgIGJvb2wgbV9pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzOwotCi0gICAgYm9vbCBtX3dhaXRpbmdG
b3JVSVByb2Nlc3M7Ci0gICAgYm9vbCBtX2lzU3VzcGVuZGVkOwotICAgIFdlYkNvcmU6OkZsb2F0
UmVjdCBtX3Zpc2libGVDb250ZW50c1JlY3Q7Ci0gICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOwot
ICAgIGJvb2wgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGU7Ci0KLSAgICBMYXllclRy
ZWVDb250ZXh0IG1fbGF5ZXJUcmVlQ29udGV4dDsKLSAgICBib29sIG1fc2hvdWxkU3luY0ZyYW1l
OwotICAgIGJvb2wgbV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXI7Ci0gICAgV2Vi
Q29yZTo6VGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiBtX2xheWVyRmx1c2hUaW1lcjsK
LSAgICBXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IG1fcmVsZWFzZUlu
YWN0aXZlQXRsYXNlc1RpbWVyOwotICAgIGJvb2wgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJs
ZWQ7Ci0gICAgdWludDY0X3QgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQ7Ci0gICAgYm9v
bCBtX2FuaW1hdGlvbnNMb2NrZWQ7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb21wb3NpdGluZ09w
ZXJhdGlvbnMuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvV2ViQ29tcG9zaXRpbmdPcGVyYXRpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMzlm
MTZjMTI5ODI3YTBkNGM4NjA1YjU3NDA2MDkyMzI2MjEzYzcwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2Vi
Q29tcG9zaXRpbmdPcGVyYXRpb25zLmNwcApAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAiV2ViQ29tcG9zaXRpbmdPcGVyYXRpb25zLmgi
CisKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNs
dWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAi
TWVzc2FnZUlELmgiCisjaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlICJX
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSAi
V2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitQYXNzT3duUHRyPENvbXBvc2l0aW5nT3BlcmF0aW9ucz4gV2Vi
Q29tcG9zaXRpbmdPcGVyYXRpb25zOjpjcmVhdGUoV2ViUGFnZSogd2ViUGFnZSkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IFdlYkNvbXBvc2l0aW5nT3BlcmF0aW9ucyh3ZWJQYWdlKSk7Cit9
CisKK1dlYkNvbXBvc2l0aW5nT3BlcmF0aW9uczo6fldlYkNvbXBvc2l0aW5nT3BlcmF0aW9ucygp
Cit7Cit9CisKK1dlYkNvbXBvc2l0aW5nT3BlcmF0aW9uczo6V2ViQ29tcG9zaXRpbmdPcGVyYXRp
b25zKFdlYlBhZ2UqIHdlYlBhZ2UpCisgICAgOiBtX3dlYlBhZ2Uod2ViUGFnZSkKK3sKKworfQor
Cit2b2lkIFdlYkNvbXBvc2l0aW5nT3BlcmF0aW9uczo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIo
Q29vcmRpbmF0ZWRMYXllcklEIGlkKQoreworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldFJvb3RDb21wb3NpdGluZ0xheWVyKGlk
KSk7Cit9CisKK3ZvaWQgV2ViQ29tcG9zaXRpbmdPcGVyYXRpb25zOjpzZXRDb21wb3NpdGluZ0xh
eWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBDb29yZGluYXRlZExheWVySW5m
byYgaW5mbykKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpTZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoaWQsIGluZm8pKTsKK30K
Kwordm9pZCBXZWJDb21wb3NpdGluZ09wZXJhdGlvbnM6OnNldENvbXBvc2l0aW5nTGF5ZXJDaGls
ZHJlbihDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVy
SUQ+JiBjaGlsZHJlbikKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oaWQsIGNo
aWxkcmVuKSk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCit2b2lkIFdlYkNvbXBvc2l0
aW5nT3BlcmF0aW9uczo6c2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXll
cklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQoreworICAgIG1fd2ViUGFn
ZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldENvbXBv
c2l0aW5nTGF5ZXJGaWx0ZXJzKGlkLCBmaWx0ZXJzKSk7Cit9CisjZW5kaWYKKwordm9pZCBXZWJD
b21wb3NpdGluZ09wZXJhdGlvbnM6OmNyZWF0ZUNvbXBvc2l0aW5nTGF5ZXIoQ29vcmRpbmF0ZWRM
YXllcklEIGlkKQoreworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZUNvbXBvc2l0aW5nTGF5ZXIoaWQpKTsKK30KKwordm9p
ZCBXZWJDb21wb3NpdGluZ09wZXJhdGlvbnM6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIoQ29vcmRp
bmF0ZWRMYXllcklEIGlkKQoreworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIoaWQpKTsKK30K
Kwordm9pZCBXZWJDb21wb3NpdGluZ09wZXJhdGlvbnM6OmNyZWF0ZVRpbGVGb3JMYXllcihDb29y
ZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0
aWxlUmVjdCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3Jl
YXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsK
K30KKwordm9pZCBXZWJDb21wb3NpdGluZ09wZXJhdGlvbnM6OnVwZGF0ZVRpbGVGb3JMYXllcihD
b29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBJbnRSZWN0
JiB0aWxlUmVjdCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
VXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8p
KTsKK30KKwordm9pZCBXZWJDb21wb3NpdGluZ09wZXJhdGlvbnM6OnJlbW92ZVRpbGVGb3JMYXll
cihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQoreworICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlJl
bW92ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQpKTsKK30KKwordm9pZCBXZWJDb21wb3Np
dGluZ09wZXJhdGlvbnM6OmNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIGNvbnN0
IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCit7CisgICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlVXBk
YXRlQXRsYXMoYXRsYXNJRCwgaGFuZGxlKSk7Cit9CisKK3ZvaWQgV2ViQ29tcG9zaXRpbmdPcGVy
YXRpb25zOjpyZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKQoreworICAgIG1fd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlJlbW92
ZVVwZGF0ZUF0bGFzKGF0bGFzSUQpKTsKK30KKwordm9pZCBXZWJDb21wb3NpdGluZ09wZXJhdGlv
bnM6OmNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQp
Cit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6Q3JlYXRlSW1hZ2VCYWNraW5nKGltYWdlSUQpKTsKK30KKwordm9pZCBXZWJDb21w
b3NpdGluZ09wZXJhdGlvbnM6OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEIGltYWdlSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJiBoYW5k
bGUpCit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6VXBkYXRlSW1hZ2VCYWNraW5nKGltYWdlSUQsIGhhbmRsZSkpOworfQorCit2
b2lkIFdlYkNvbXBvc2l0aW5nT3BlcmF0aW9uczo6Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAgbV93ZWJQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q2xlYXJJbWFnZUJhY2tp
bmdDb250ZW50cyhpbWFnZUlEKSk7Cit9CisKK3ZvaWQgV2ViQ29tcG9zaXRpbmdPcGVyYXRpb25z
OjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQor
eworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OlJlbW92ZUltYWdlQmFja2luZyhpbWFnZUlEKSk7Cit9CisKK3ZvaWQgV2ViQ29tcG9z
aXRpbmdPcGVyYXRpb25zOjpkaWRSZW5kZXJGcmFtZShjb25zdCBJbnRTaXplJiBjb250ZW50c1Np
emUsIGNvbnN0IEludFJlY3QmIGNvdmVyZWRSZWN0KQoreworICAgIG1fd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkRpZFJlbmRlckZyYW1lKGNv
bnRlbnRzU2l6ZSwgY292ZXJlZFJlY3QpKTsKK30KKwordm9pZCBXZWJDb21wb3NpdGluZ09wZXJh
dGlvbnM6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9u
KQoreworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uKSk7Cit9CisKKyNpZiBV
U0UoR1JBUEhJQ1NfU1VSRkFDRSkKK3ZvaWQgV2ViQ29tcG9zaXRpbmdPcGVyYXRpb25zOjpjcmVh
dGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXpl
LCBjb25zdCBHcmFwaGljc1N1cmZhY2VUb2tlbiYgdG9rZW4pCit7CisgICAgbV93ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlQ2FudmFz
KGlkLCBjYW52YXNTaXplLCB0b2tlbikpOworfQorCit2b2lkIFdlYkNvbXBvc2l0aW5nT3BlcmF0
aW9uczo6c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIHVpbnQzMl90IGZyb250QnVm
ZmVyKQoreworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OlN5bmNDYW52YXMoaWQsIGZyb250QnVmZmVyKSk7Cit9CisKK3ZvaWQgV2Vi
Q29tcG9zaXRpbmdPcGVyYXRpb25zOjpkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBp
ZCkKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5OjpEZXN0cm95Q2FudmFzKGlkKSk7Cit9CisjZW5kaWYKKwordm9pZCBXZWJDb21w
b3NpdGluZ09wZXJhdGlvbnM6OnNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQg
bGF5ZXJJRCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFjdGl2ZUFuaW1hdGlvbnMp
Cit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6U2V0TGF5ZXJBbmltYXRpb25zKGxheWVySUQsIGFjdGl2ZUFuaW1hdGlvbnMpKTsK
K30KKwordm9pZCBXZWJDb21wb3NpdGluZ09wZXJhdGlvbnM6OnNldEFuaW1hdGlvbnNMb2NrZWQo
Ym9vbCBpc0xvY2tlZCkKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRBbmltYXRpb25zTG9ja2VkKGlzTG9ja2VkKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29tcG9zaXRpbmdPcGVyYXRpb25zLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb21wb3NpdGlu
Z09wZXJhdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NjdhYjJkODU1MDY1ZTViMWEwODNhZTMxNjRjYzc3
YWIyODljNzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29tcG9zaXRpbmdPcGVyYXRpb25zLmgKQEAg
LTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29t
cGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBX
ZWJDb21wb3NpdGluZ09wZXJhdGlvbnNfaAorI2RlZmluZSBXZWJDb21wb3NpdGluZ09wZXJhdGlv
bnNfaAorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAiQ29tcG9z
aXRpbmdPcGVyYXRpb25zLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZTsKKworY2xhc3MgV2ViQ29tcG9zaXRpbmdPcGVyYXRp
b25zIDogcHVibGljIENvbXBvc2l0aW5nT3BlcmF0aW9ucyB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoV2ViQ29tcG9zaXRpbmdPcGVyYXRpb25zKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q29tcG9zaXRpbmdPcGVyYXRpb25zPiBj
cmVhdGUoV2ViUGFnZSopOworCisgICAgfldlYkNvbXBvc2l0aW5nT3BlcmF0aW9ucygpOworCisg
ICAgLy8gQ29tcG9zaXRpbmdPcGVyYXRpb25zCisgICAgdmlydHVhbCB2b2lkIHNldFJvb3RDb21w
b3NpdGluZ0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENv
b3JkaW5hdGVkTGF5ZXJJbmZvJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldENvbXBv
c2l0aW5nTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxDb29y
ZGluYXRlZExheWVySUQ+JikgT1ZFUlJJREU7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAg
IHZpcnR1YWwgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhDb29yZGluYXRlZExheWVy
SUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKSBPVkVSUklERTsKKyNlbmRpZgor
ICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVDb21wb3NpdGluZ0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJ
RCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIoQ29v
cmRpbmF0ZWRMYXllcklEKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxl
Rm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJf
dCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5m
byYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlRm9yTGF5ZXIoQ29vcmRp
bmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2
b2lkIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIGNvbnN0IFdlYkNvb3JkaW5h
dGVkU3VyZmFjZTo6SGFuZGxlJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVVw
ZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lk
IGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJikgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUltYWdlQmFja2lu
ZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYg
cG9zaXRpb24pIE9WRVJSSURFOworCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgdmly
dHVhbCB2b2lkIGNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6
OkludFNpemUmLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbiYpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMy
X3QgZnJvbnRCdWZmZXIpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95Q2FudmFz
KENvb3JkaW5hdGVkTGF5ZXJJRCkgT1ZFUlJJREU7CisjZW5kaWYKKworICAgIHZpcnR1YWwgdm9p
ZCBzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyQW5pbWF0aW9ucyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRB
bmltYXRpb25zTG9ja2VkKGJvb2wpIE9WRVJSSURFOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0
IFdlYkNvbXBvc2l0aW5nT3BlcmF0aW9ucyhXZWJQYWdlKik7CisKKyAgICBXZWJQYWdlKiBtX3dl
YlBhZ2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCisKKyNlbmRpZiAv
LyBXZWJDb21wb3NpdGluZ09wZXJhdGlvbnNfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192909</attachid>
            <date>2013-03-13 06:01:04 -0700</date>
            <delta_ts>2013-03-14 01:01:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104360-20130313215702.patch</filename>
            <type>text/plain</type>
            <size>64623</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1NjgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTYxMTk3ZTZmY2UyYWYw
M2IyOWMxMmJiNmNhMmI0YTY5YmY5MTczYS4uNTVmMThhMzgzOWU3ZjFmMTIwOGQxMWMwNWM5Mjk1
ZDRmNmI1OGU5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDEzLTAzLTEzICBHd2Fu
ZyBZb29uIEh3YW5nICA8cnl1bWllbEBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGlu
YXRlZCBHcmFwaGljczogU2VwYXJhdGUgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGludG8gQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0IGFuZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQzNjAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0IGhhcyB0b28gbWFueSByZXNwb25zaWJpbGl0aWVzLiBJdAorICAgICAgICBp
bXBsZW1lbnRzIExheWVyVHJlZUhvc3QsIEdyYXBoaWNzTGF5ZXJDbGllbnQsCisgICAgICAgIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNs
aWVudCwKKyAgICAgICAgVXBkYXRlQXRsYXM6OkNsaWVudCwgR3JhcGhpY3NMYXllckZhY3Rvcnkg
YW5kCisgICAgICAgIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudC4KKworICAgICAg
ICBUaGlzIHJlZmFjdG9yaW5nIHJlZHVjZXMgdGhlIHJlc3BvbnNpYmlsaXRpZXMgb2YgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0LgorCisgICAgICAgIEJ5IGNyZWF0aW5nIGEgbmV3IGNsYXNzIGNh
bGxlZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yLCB3aGljaCB0YWtlcyB0aGUKKyAgICAgICAgcmVz
cG9uc2liaWxpdHkgb2YgbWFuYWdpbmcgY29tcG9zaXRpbmcgcmVzb3VyY2VzIGluIFdlYlByb2Nl
c3MsCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCB0YWtlcyBhIHBhcnQgZm9yIHNj
aGVkdWxpbmcgYW5kIElQQyBzcGVjaWZpYyBwYXJ0cy4KKworICAgICAgICBObyBuZXcgdGVzdHMs
IGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6On5D
b21wb3NpdGluZ0Nvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29t
cG9zaXRpbmdDb29yZGluYXRvcjo6c2l6ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JOb25GcmFtZUxh
eWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpmbHVzaFBl
bmRpbmdMYXllckNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGlu
YXRvcjo6Y2xlYXJQZW5kaW5nU3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZVJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzeW5jTGF5ZXJTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVJbWFnZUJhY2tp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6dXBkYXRlSW1h
Z2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNs
ZWFySW1hZ2VCYWNraW5nQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdD
b29yZGluYXRvcjo6cmVtb3ZlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6bm90aWZ5QW5pbWF0aW9uU3Rh
cnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpub3RpZnlG
bHVzaFJlcXVpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6
OmNyZWF0ZUdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29y
ZGluYXRvcjo6ZGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRp
bmdDb29yZGluYXRvcjo6cGFnZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZVVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJlbW92ZVVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnZpc2libGVDb250ZW50c1JlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0VmlzaWJsZUNvbnRlbnRz
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXZpY2VP
clBhZ2VTY2FsZUZhY3RvckNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdD
b29yZGluYXRvcjo6ZGV0YWNoTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdD
b29yZGluYXRvcjo6c2V0QmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OmNvbW1pdFNjcm9sbE9mZnNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjphbmltYXRpb25GcmFtZVJlYWR5KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJlbmRlck5leHRGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpwdXJnZUJhY2tpbmdTdG9yZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6YmVnaW5Db250ZW50
VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNjaGVk
dWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpyZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJGaXJlZCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRp
bmF0b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENvbXBvc2l0aW5n
Q29vcmRpbmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6
Y2xlYXJSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRv
cjo6cm9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6
Om5vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRp
bmdDb29yZGluYXRvcjo6c3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29y
ZGluYXRvcjo6aXNXYWl0aW5nRm9yUmVuZGVyZXIpOgorCiAyMDEzLTAzLTEwICBHd2FuZyBZb29u
IEh3YW5nICA8cnl1bWllbEBjb21wYW55MTAwLm5ldD4KIAogICAgICAgICBDb29yZGluYXRlZCBH
cmFwaGljczogUmVuYW1lIGNsaWVudCBjbGFzc2VzIGZvciBDb29yZGluYXRlZEltYWdlQmFja2lu
ZyBhbmQgVXBkYXRlQXRsYXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNGRlZTc0M2EwZGE4ODlhYWEyNGY4MTFi
OTcwYTJkOTBhM2U2MTI3OC4uYzAyYjYwZjliMzVhNTU1YjY2NjY2NjZhMjVjZDkxN2FmODI2OTBh
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEzLTAzLTEzICBHd2FuZyBZb29uIEh3
YW5nICA8cnl1bWllbEBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGluYXRlZCBHcmFw
aGljczogU2VwYXJhdGUgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGludG8gQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0IGFuZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQzNjAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0IGhhcyB0b28gbWFueSByZXNwb25zaWJpbGl0aWVzLiBJdAorICAgICAgICBpbXBsZW1lbnRz
IExheWVyVHJlZUhvc3QsIEdyYXBoaWNzTGF5ZXJDbGllbnQsCisgICAgICAgIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllckNsaWVudCwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNsaWVudCwKKyAg
ICAgICAgVXBkYXRlQXRsYXM6OkNsaWVudCwgR3JhcGhpY3NMYXllckZhY3RvcnkgYW5kCisgICAg
ICAgIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudC4KKworICAgICAgICBUaGlzIHJl
ZmFjdG9yaW5nIHJlZHVjZXMgdGhlIHJlc3BvbnNpYmlsaXRpZXMgb2YgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0LgorCisgICAgICAgIEJ5IGNyZWF0aW5nIGEgbmV3IGNsYXNzIGNhbGxlZCBDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yLCB3aGljaCB0YWtlcyB0aGUKKyAgICAgICAgcmVzcG9uc2liaWxp
dHkgb2YgbWFuYWdpbmcgY29tcG9zaXRpbmcgcmVzb3VyY2VzIGluIFdlYlByb2Nlc3MsCisgICAg
ICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCB0YWtlcyBhIHBhcnQgZm9yIHNjaGVkdWxpbmcg
YW5kIElQQyBzcGVjaWZpYyBwYXJ0cy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGNvdmVyZWQg
YnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6On5Db29yZGluYXRlZExheWVyVHJlZUhvc3Qp
OgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OnNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KToKKyAg
ICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXROb25Db21wb3NpdGVk
Q29udGVudHNOZWVkRGlzcGxheUluUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6Y2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyk6CisgICAg
ICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlQ3VzdG9tRmlsdGVy
UHJvZ3JhbVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JOb25GcmFtZUxheWVycyk6CisgICAgICAgIChXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2gp
OgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZVBhZ2VP
dmVybGF5TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKToK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZUFuaW1h
dGlvbik6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OnNldEJhY2tncm91bmRDb2xvcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Lmg6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKExh
eWVyVHJlZUhvc3QpOgorCiAyMDEzLTAzLTEwICBHd2FuZyBZb29uIEh3YW5nICA8cnl1bWllbEBj
b21wYW55MTAwLm5ldD4KIAogICAgICAgICBDb29yZGluYXRlZCBHcmFwaGljczogUmVuYW1lIGNs
aWVudCBjbGFzc2VzIGZvciBDb29yZGluYXRlZEltYWdlQmFja2luZyBhbmQgVXBkYXRlQXRsYXMu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDRhMDUxZTdmZDdhOTcwZTIyZTc1YWNjNjhlMWFkOTc0
YzViZGZlZTkuLmMxZGMzYWY4OGRjM2ZjNjU3MWIwMTgwYzM3MGM0NjdkMDZjMDk0OGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CkBAIC0yMDA3LDYgKzIwMDcsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCiAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29y
ZGluYXRvci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1Rhcmdl
dC5wcmkKaW5kZXggYmZiODdhY2IyZmZkYTJiYjg3MzViMmQxYzg4NjJjYzY0ZTBhMmNjNy4uMjM3
YmJmZmFkMzEwNzc5ZWRhNmY3MzM3MjhkYTdmZTc1MDNlYjAwNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC00
MTIxLDYgKzQxMjEsNyBAQCB1c2U/KDNEX0dSQVBISUNTKSB7CiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5oIFwKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuaCBcCisgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5h
dG9yLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmUuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5oIFwKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQ3VzdG9t
RmlsdGVyUHJvZ3JhbS5oIFwKQEAgLTQxNDcsNiArNDE0OCw3IEBAIHVzZT8oM0RfR1JBUEhJQ1Mp
IHsKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAg
XAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0FyZWFBbGxvY2F0b3IuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwIFwKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcCBc
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAgXApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0NvbXBvc2l0
aW5nQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNh
NTc4ZTUwNmMzZDdmNTMwOTUxMWFiNzdhMTU2YjhlM2Y1ZTIzMTMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29t
cG9zaXRpbmdDb29yZGluYXRvci5jcHAKQEAgLTAsMCArMSw0MDcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
LgorICogQ29weXJpZ2h0IChDKSAyMDEzIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yLmgiCisKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2Uu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp+Q29t
cG9zaXRpbmdDb29yZGluYXRvcigpCit7CisgICAgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisKKyAg
ICBMYXllck1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOworICAg
IGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnZhbHVlLT5zZXRDb29yZGluYXRvcigwKTsK
K30KKworQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q29tcG9zaXRpbmdDb29yZGluYXRvcihQYWdl
KiBwYWdlKQorICAgIDogbV9wYWdlKHBhZ2UpCisgICAgLCBtX2lzUHVyZ2luZyhmYWxzZSkKKyAg
ICAsIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlcyhmYWxzZSkKKyAgICAsIG1faXNXYWl0aW5nRm9y
UmVuZGVyZXIodHJ1ZSkKKyAgICAsIG1fc2hvdWxkU3luY0ZyYW1lKGZhbHNlKQorICAgICwgbV9y
ZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIodGhpcywgJkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6
OnJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKQoreworICAgIG1fcGFnZS0+c2V0dGlu
Z3MoKS0+c2V0U2Nyb2xsaW5nQ29vcmRpbmF0b3JFbmFibGVkKHRydWUpOworICAgIG1fcGFnZS0+
c2V0dGluZ3MoKS0+c2V0QXBwbHlEZXZpY2VTY2FsZUZhY3RvckluQ29tcG9zaXRvcih0cnVlKTsK
K30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzaXplRGlkQ2hhbmdlKGNvbnN0IElu
dFNpemUmIG5ld1NpemUpCit7CisgICAgaWYgKG1fcm9vdExheWVyLT5zaXplKCkgPT0gbmV3U2l6
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yb290TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7
CisKKyAgICAvLyBJZiB0aGUgbmV3U2l6ZSBleHBvc2VzIG5ldyBhcmVhcyBvZiB0aGUgbm9uLWNv
bXBvc2l0ZWQgY29udGVudCBhIHNldE5lZWRzRGlzcGxheSBpcyBuZWVkZWQKKyAgICAvLyBmb3Ig
dGhvc2UgbmV3bHkgZXhwb3NlZCBhcmVhcy4KKyAgICBGbG9hdFNpemUgb2xkU2l6ZSA9IG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRMYXllci0+c2l6ZSgpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKKworICAgIGlmIChuZXdTaXplLndpZHRoKCkgPiBv
bGRTaXplLndpZHRoKCkpIHsKKyAgICAgICAgZmxvYXQgaGVpZ2h0ID0gc3RkOjptaW4oc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG5ld1NpemUuaGVpZ2h0KCkpLCBvbGRTaXplLmhlaWdodCgpKTsKKyAgICAg
ICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxv
YXRSZWN0KG9sZFNpemUud2lkdGgoKSwgMCwgbmV3U2l6ZS53aWR0aCgpIC0gb2xkU2l6ZS53aWR0
aCgpLCBoZWlnaHQpKTsKKyAgICB9CisKKyAgICBpZiAobmV3U2l6ZS5oZWlnaHQoKSA+IG9sZFNp
emUuaGVpZ2h0KCkpCisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdCgwLCBvbGRTaXplLmhlaWdodCgpLCBuZXdTaXplLndp
ZHRoKCksIG5ld1NpemUuaGVpZ2h0KCkgLSBvbGRTaXplLmhlaWdodCgpKSk7Cit9CisKKwordm9p
ZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JOb25GcmFt
ZUxheWVycygpCit7CisgICAgbV9yb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRo
aXNMYXllck9ubHkoKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPmZsdXNoQ29t
cG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKK30KKworYm9vbCBDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKQoreworICAgIGlmIChtX2lzV2Fp
dGluZ0ZvclJlbmRlcmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBUZW1wb3JhcnlD
aGFuZ2U8Ym9vbD4gcHJvdGVjdG9yKG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlcywgdHJ1ZSk7CisK
KyAgICBmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JOb25GcmFtZUxheWVycygpOworCisgICAgYm9v
bCBkaWRTeW5jID0gbV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT5mbHVzaENvbXBvc2l0aW5n
U3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsKKworICAgIGZsdXNoUGVuZGluZ0ltYWdlQmFja2lu
Z0NoYW5nZXMoKTsKKworICAgIGlmIChtX3Nob3VsZFN5bmNGcmFtZSkgeworICAgICAgICBkaWRT
eW5jID0gdHJ1ZTsKKworICAgICAgICBtX3N0YXRlLmNvbnRlbnRzU2l6ZSA9IHJvdW5kZWRJbnRT
aXplKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2l6ZSgpKTsKKyAgICAgICAgbV9zdGF0
ZS5jb3ZlcmVkUmVjdCA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllci5nZXQoKSktPmNvdmVyUmVjdCgpOworICAgICAgICBtX3N0YXRlLnNjcm9s
bFBvc2l0aW9uID0gbV92aXNpYmxlQ29udGVudHNSZWN0LmxvY2F0aW9uKCk7CisKKyAgICAgICAg
Y29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlKG1fc3RhdGUpOworCisgICAgICAgIGNsZWFy
UGVuZGluZ1N0YXRlQ2hhbmdlcygpOworICAgICAgICBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyID0g
dHJ1ZTsKKyAgICAgICAgbV9zaG91bGRTeW5jRnJhbWUgPSBmYWxzZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZGlkU3luYzsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjbGVhclBl
bmRpbmdTdGF0ZUNoYW5nZXMoKQoreworICAgIG1fc3RhdGUubGF5ZXJzVG9DcmVhdGUuY2xlYXIo
KTsKKyAgICBtX3N0YXRlLmxheWVyc1RvVXBkYXRlLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5sYXll
cnNUb1JlbW92ZS5jbGVhcigpOworCisgICAgbV9zdGF0ZS5pbWFnZXNUb0NyZWF0ZS5jbGVhcigp
OworICAgIG1fc3RhdGUuaW1hZ2VzVG9SZW1vdmUuY2xlYXIoKTsKKyAgICBtX3N0YXRlLmltYWdl
c1RvVXBkYXRlLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5pbWFnZXNUb0NsZWFyLmNsZWFyKCk7CisK
KyAgICBtX3N0YXRlLnVwZGF0ZUF0bGFzZXNUb0NyZWF0ZS5jbGVhcigpOworICAgIG1fc3RhdGUu
dXBkYXRlQXRsYXNlc1RvUmVtb3ZlLmNsZWFyKCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMp
CisgICAgbV9zdGF0ZS5jdXN0b21GaWx0ZXJzVG9DcmVhdGUuY2xlYXIoKTsKKyAgICBtX3N0YXRl
LmN1c3RvbUZpbHRlcnNUb1JlbW92ZS5jbGVhcigpOworI2VuZGlmCit9CisKK3ZvaWQgQ29tcG9z
aXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlUm9vdExheWVyKGNvbnN0IEludFNpemUmIHNpemUpCit7
CisgICAgQVNTRVJUKCFtX3Jvb3RMYXllcik7CisgICAgLy8gQ3JlYXRlIGEgcm9vdCBsYXllci4K
KyAgICBtX3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzLCB0aGlzKTsKKyNp
Zm5kZWYgTkRFQlVHCisgICAgbV9yb290TGF5ZXItPnNldE5hbWUoIkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3Igcm9vdCBsYXllciIpOworI2VuZGlmCisgICAgbV9yb290TGF5ZXItPnNldERyYXdzQ29u
dGVudChmYWxzZSk7CisgICAgbV9yb290TGF5ZXItPnNldFNpemUoc2l6ZSk7CisKKyAgICBtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcywgdGhp
cyk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0
TmFtZSgiQ29tcG9zaXRpbmdDb29yZGluYXRvciBub24tY29tcG9zaXRlZCBjb250ZW50Iik7Cisj
ZW5kaWYKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldERyYXdzQ29udGVudCh0
cnVlKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNpemUoc2l6ZSk7CisK
KyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNob3dEZWJ1Z0JvcmRlcihtX3Bh
Z2UtPnNldHRpbmdzKCktPnNob3dEZWJ1Z0JvcmRlcnMoKSk7CisgICAgbV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyLT5zZXRTaG93UmVwYWludENvdW50ZXIobV9wYWdlLT5zZXR0aW5ncygpLT5z
aG93UmVwYWludENvdW50ZXIoKSk7CisKKyAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKTsKKworICAgIG1fc3RhdGUucm9vdENvbXBvc2l0
aW5nTGF5ZXIgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSkt
PmlkKCk7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworfQorCit2b2lkIENvbXBvc2l0
aW5nQ29vcmRpbmF0b3I6OnN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQoreworICAgIG1fc2hvdWxkU3luY0Zy
YW1lID0gdHJ1ZTsKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICBwcmVwYXJlQ3VzdG9t
RmlsdGVyUHJveGllc0lmTmVlZGVkKHN0YXRlKTsKKyNlbmRpZgorCisgICAgbV9zdGF0ZS5sYXll
cnNUb1VwZGF0ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoaWQsIHN0YXRlKSk7Cit9CisKK1Bhc3NS
ZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNy
ZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKEltYWdlKiBpbWFnZSkKK3sKKyAgICBDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEIGltYWdlSUQgPSBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Z2V0Q29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRChpbWFnZSk7CisgICAgSW1hZ2VCYWNraW5nTWFwOjppdGVy
YXRvciBpdCA9IG1faW1hZ2VCYWNraW5ncy5maW5kKGltYWdlSUQpOworICAgIFJlZlB0cjxDb29y
ZGluYXRlZEltYWdlQmFja2luZz4gaW1hZ2VCYWNraW5nOworICAgIGlmIChpdCA9PSBtX2ltYWdl
QmFja2luZ3MuZW5kKCkpIHsKKyAgICAgICAgaW1hZ2VCYWNraW5nID0gQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmc6OmNyZWF0ZSh0aGlzLCBpbWFnZSk7CisgICAgICAgIG1faW1hZ2VCYWNraW5ncy5h
ZGQoaW1hZ2VJRCwgaW1hZ2VCYWNraW5nKTsKKyAgICB9IGVsc2UKKyAgICAgICAgaW1hZ2VCYWNr
aW5nID0gaXQtPnZhbHVlOworCisgICAgcmV0dXJuIGltYWdlQmFja2luZzsKK30KKwordm9pZCBD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCBpbWFnZUlEKQoreworICAgIG1fc3RhdGUuaW1hZ2VzVG9DcmVhdGUuYXBwZW5k
KGltYWdlSUQpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnVwZGF0ZUltYWdl
QmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQsIFBhc3NSZWZQdHI8Q29v
cmRpbmF0ZWRTdXJmYWNlPiBjb29yZGluYXRlZFN1cmZhY2UpCit7CisgICAgbV9zdGF0ZS5pbWFn
ZXNUb1VwZGF0ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoaW1hZ2VJRCwgY29vcmRpbmF0ZWRTdXJm
YWNlKSk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y2xlYXJJbWFnZUJhY2tp
bmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAgbV9z
dGF0ZS5pbWFnZXNUb0NsZWFyLmFwcGVuZChpbWFnZUlEKTsKK30KKwordm9pZCBDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCBpbWFnZUlEKQoreworICAgIGlmIChtX2lzUHVyZ2luZykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFnZUlEKSk7CisgICAgbV9pbWFn
ZUJhY2tpbmdzLnJlbW92ZShpbWFnZUlEKTsKKworICAgIG1fc3RhdGUuaW1hZ2VzVG9SZW1vdmUu
YXBwZW5kKGltYWdlSUQpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmZsdXNo
UGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKQoreworICAgIEltYWdlQmFja2luZ01hcDo6aXRl
cmF0b3IgZW5kID0gbV9pbWFnZUJhY2tpbmdzLmVuZCgpOworICAgIGZvciAoSW1hZ2VCYWNraW5n
TWFwOjppdGVyYXRvciBpdGVyID0gbV9pbWFnZUJhY2tpbmdzLmJlZ2luKCk7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpCisgICAgICAgIGl0ZXItPnZhbHVlLT51cGRhdGUoKTsKK30KKwordm9pZCBDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yOjpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNz
TGF5ZXIqLCBkb3VibGUgLyogdGltZSAqLykKK3sKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yOjpub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKQoreworICAg
IHNjaGVkdWxlTGF5ZXJGbHVzaFJlcXVpcmVkKCk7Cit9CisKK1Bhc3NPd25QdHI8R3JhcGhpY3NM
YXllcj4gQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlR3JhcGhpY3NMYXllcihHcmFwaGlj
c0xheWVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBs
YXllciA9IG5ldyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoY2xpZW50KTsKKyAgICBsYXllci0+
c2V0Q29vcmRpbmF0b3IodGhpcyk7CisgICAgbV9yZWdpc3RlcmVkTGF5ZXJzLmFkZChsYXllci0+
aWQoKSwgbGF5ZXIpOworICAgIG1fc3RhdGUubGF5ZXJzVG9DcmVhdGUuYXBwZW5kKGxheWVyLT5p
ZCgpKTsKKyAgICBsYXllci0+c2V0TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1lbnQoKTsKKyAgICBz
Y2hlZHVsZUxheWVyRmx1c2hSZXF1aXJlZCgpOworICAgIHJldHVybiBhZG9wdFB0cihsYXllcik7
Cit9CisKK2Zsb2F0IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRldmljZVNjYWxlRmFjdG9yKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOworfQorCitm
bG9hdCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpwYWdlU2NhbGVGYWN0b3IoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3BhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpOworfQorCit2b2lkIENvbXBvc2l0
aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NS
ZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBjb29yZGluYXRlZFN1cmZhY2UpCit7CisgICAgbV9z
dGF0ZS51cGRhdGVBdGxhc2VzVG9DcmVhdGUuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGF0bGFzSUQs
IGNvb3JkaW5hdGVkU3VyZmFjZSkpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6
OnJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCit7CisgICAgaWYgKG1faXNQdXJn
aW5nKQorICAgICAgICByZXR1cm47CisgICAgbV9zdGF0ZS51cGRhdGVBdGxhc2VzVG9SZW1vdmUu
YXBwZW5kKGF0bGFzSUQpOworfQorCitGbG9hdFJlY3QgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6
dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmlzaWJsZUNvbnRl
bnRzUmVjdDsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzZXRWaXNpYmxlQ29u
dGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVj
dG9yeVZlY3RvcikKK3sKKyAgICAvLyBBIHplcm8gdHJhamVjdG9yeVZlY3RvciBpbmRpY2F0ZXMg
dGhhdCB0aWxlcyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9ydCBhcmUgcmVxdWVzdGVkLgorICAgIHRv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQo
KSktPnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IodHJhamVjdG9yeVZlY3Rv
cik7CisKKyAgICBib29sIGNvbnRlbnRzUmVjdERpZENoYW5nZSA9IHJlY3QgIT0gbV92aXNpYmxl
Q29udGVudHNSZWN0OworICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFuZ2UpIHsKKyAgICAgICAg
bV92aXNpYmxlQ29udGVudHNSZWN0ID0gcmVjdDsKKworICAgICAgICBMYXllck1hcDo6aXRlcmF0
b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOworICAgICAgICBmb3IgKExheWVyTWFw
OjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50
KCk7CisgICAgfQorCisgICAgc2NoZWR1bGVMYXllckZsdXNoUmVxdWlyZWQoKTsKK30KKwordm9p
ZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQo
KQoreworICAgIG1fcm9vdExheWVyLT5kZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsK
KyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPmRldmljZU9yUGFnZVNjYWxlRmFjdG9y
Q2hhbmdlZCgpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRldGFjaExheWVy
KENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgaWYgKG1faXNQdXJnaW5n
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3JlZ2lzdGVyZWRMYXllcnMucmVtb3ZlKGxheWVy
LT5pZCgpKTsKKworICAgIHNpemVfdCBpbmRleCA9IG1fc3RhdGUubGF5ZXJzVG9DcmVhdGUuZmlu
ZChsYXllci0+aWQoKSk7CisgICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKSB7CisgICAgICAgIG1f
c3RhdGUubGF5ZXJzVG9DcmVhdGUucmVtb3ZlKGluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fc3RhdGUubGF5ZXJzVG9SZW1vdmUuYXBwZW5kKGxheWVyLT5pZCgpKTsKKyAg
ICBzY2hlZHVsZUxheWVyRmx1c2hSZXF1aXJlZCgpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYgY29sb3Ip
Cit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fc3RhdGUuYmFja2dyb3Vu
ZENvbG9yID0gY29sb3I7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y29tbWl0
U2Nyb2xsT2Zmc2V0KHVpbnQzMl90IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG9m
ZnNldCkKK3sKKyAgICBMYXllck1hcDo6aXRlcmF0b3IgaSA9IG1fcmVnaXN0ZXJlZExheWVycy5m
aW5kKGxheWVySUQpOworICAgIGlmIChpID09IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaS0+dmFsdWUtPmNvbW1pdFNjcm9sbE9mZnNldChvZmZzZXQp
OworfQorCisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQordm9pZCBDb21wb3Np
dGluZ0Nvb3JkaW5hdG9yOjphbmltYXRpb25GcmFtZVJlYWR5KCkKK3sKKyAgICBzY2hlZHVsZUxh
eWVyRmx1c2hSZXF1aXJlZCgpOworfQorI2VuZGlmCisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGlu
YXRvcjo6cmVuZGVyTmV4dEZyYW1lKCkKK3sKKyAgICBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyID0g
ZmFsc2U7CisgICAgc2NoZWR1bGVMYXllckZsdXNoUmVxdWlyZWQoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV91cGRhdGVBdGxhc2VzLnNpemUoKTsgKytpKQorICAgICAgICBtX3Vw
ZGF0ZUF0bGFzZXNbaV0tPmRpZFN3YXBCdWZmZXJzKCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdD
b29yZGluYXRvcjo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKK3sKKyAgICBUZW1wb3JhcnlDaGFuZ2U8
Ym9vbD4gcHVyZ2luZ1RvZ2dsZShtX2lzUHVyZ2luZywgdHJ1ZSk7CisKKyAgICBMYXllck1hcDo6
aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOworICAgIGZvciAoTGF5ZXJN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKKyAgICAgICAgaXQtPnZhbHVlLT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsKKworICAgIG1f
aW1hZ2VCYWNraW5ncy5jbGVhcigpOworICAgIG1fdXBkYXRlQXRsYXNlcy5jbGVhcigpOworfQor
CitQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6YmVn
aW5Db250ZW50VXBkYXRlKGNvbnN0IEludFNpemUmIHNpemUsIENvb3JkaW5hdGVkU3VyZmFjZTo6
RmxhZ3MgZmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAg
IE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dDsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV91cGRhdGVBdGxhc2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFVw
ZGF0ZUF0bGFzKiBhdGxhcyA9IG1fdXBkYXRlQXRsYXNlc1tpXS5nZXQoKTsKKyAgICAgICAgaWYg
KGF0bGFzLT5zdXBwb3J0c0FscGhhKCkgPT0gKGZsYWdzICYgQ29vcmRpbmF0ZWRTdXJmYWNlOjpT
dXBwb3J0c0FscGhhKSkgeworICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHJldHVybiBudWxsIGlm
IHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIgc3BhY2UuCisgICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQgPSBhdGxhcy0+YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGF0bGFzSUQs
IHNpemUsIG9mZnNldCk7CisgICAgICAgICAgICBpZiAoZ3JhcGhpY3NDb250ZXh0KQorICAgICAg
ICAgICAgICAgIHJldHVybiBncmFwaGljc0NvbnRleHQucmVsZWFzZSgpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgc3RhdGljIGNvbnN0IGludCBTY3JhdGNoQnVmZmVyRGltZW5zaW9uID0gMTAy
NDsgLy8gU2hvdWxkIGJlIGEgcG93ZXIgb2YgdHdvLgorICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBl
bmQoYWRvcHRQdHIobmV3IFVwZGF0ZUF0bGFzKHRoaXMsIFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24s
IGZsYWdzKSkpOworICAgIHNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpOworICAgIHJl
dHVybiBtX3VwZGF0ZUF0bGFzZXMubGFzdCgpLT5iZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZm
ZXIoYXRsYXNJRCwgc2l6ZSwgb2Zmc2V0KTsKK30KKworY29uc3QgZG91YmxlIFJlbGVhc2VJbmFj
dGl2ZUF0bGFzZXNUaW1lckludGVydmFsID0gMC41OworCit2b2lkIENvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OnNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpCit7CisgICAgaWYgKCFtX3Jl
bGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3JlbGVhc2VJ
bmFjdGl2ZUF0bGFzZXNUaW1lci5zdGFydFJlcGVhdGluZyhSZWxlYXNlSW5hY3RpdmVBdGxhc2Vz
VGltZXJJbnRlcnZhbCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVsZWFz
ZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQoVGltZXI8Q29tcG9zaXRpbmdDb29yZGluYXRvcj4q
KQoreworICAgIC8vIFdlIGFsd2F5cyB3YW50IHRvIGtlZXAgb25lIGF0bGFzIGZvciBub24tY29t
cG9zaXRlZCBjb250ZW50LgorICAgIE93blB0cjxVcGRhdGVBdGxhcz4gYXRsYXNUb0tlZXBBbnl3
YXk7CisgICAgYm9vbCBmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgPSBm
YWxzZTsKKyAgICBmb3IgKGludCBpID0gbV91cGRhdGVBdGxhc2VzLnNpemUoKSAtIDE7ICBpID49
IDA7IC0taSkgeworICAgICAgICBVcGRhdGVBdGxhcyogYXRsYXMgPSBtX3VwZGF0ZUF0bGFzZXNb
aV0uZ2V0KCk7CisgICAgICAgIGlmICghYXRsYXMtPmlzSW5Vc2UoKSkKKyAgICAgICAgICAgIGF0
bGFzLT5hZGRUaW1lSW5hY3RpdmUoUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2YWwp
OworICAgICAgICBib29sIHVzYWJsZUZvck5vbkNvbXBvc2l0ZWRDb250ZW50ID0gIWF0bGFzLT5z
dXBwb3J0c0FscGhhKCk7CisgICAgICAgIGlmIChhdGxhcy0+aXNJbmFjdGl2ZSgpKSB7CisgICAg
ICAgICAgICBpZiAoIWZvdW5kQWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVudCAmJiAh
YXRsYXNUb0tlZXBBbnl3YXkgJiYgdXNhYmxlRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQpCisgICAg
ICAgICAgICAgICAgYXRsYXNUb0tlZXBBbnl3YXkgPSBtX3VwZGF0ZUF0bGFzZXNbaV0ucmVsZWFz
ZSgpOworICAgICAgICAgICAgbV91cGRhdGVBdGxhc2VzLnJlbW92ZShpKTsKKyAgICAgICAgfSBl
bHNlIGlmICh1c2FibGVGb3JOb25Db21wb3NpdGVkQ29udGVudCkKKyAgICAgICAgICAgIGZvdW5k
QWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVudCA9IHRydWU7CisgICAgfQorCisgICAg
aWYgKCFmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgJiYgYXRsYXNUb0tl
ZXBBbnl3YXkpCisgICAgICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBlbmQoYXRsYXNUb0tlZXBBbnl3
YXkucmVsZWFzZSgpKTsKKworICAgIGlmIChtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpIDw9IDEpCisg
ICAgICAgIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyLnN0b3AoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOTZiMWExYWMzMTY3NGRjY2RkZDVkNmJiMTBhNGU0NTYzOGUyZDAwMQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmgKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
X2gKKyNkZWZpbmUgQ29tcG9zaXRpbmdDb29yZGluYXRvcl9oCisKKyNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCIKKyNp
bmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaCIKKyNpbmNsdWRlICJDb29yZGluYXRl
ZEltYWdlQmFja2luZy5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0xheWVyQ2xpZW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckZhY3RvcnkuaCIKKyNp
bmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJVcGRhdGVB
dGxhcy5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworI2lmIEVOQUJMRShDU1NfU0hBREVS
UykKKyNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBQYWdlOworY2xhc3MgR3JhcGhpY3NMYXllcjsKK2NsYXNzIENvb3Jk
aW5hdGVkU3VyZmFjZTsKKworY2xhc3MgQ29tcG9zaXRpbmdDb29yZGluYXRvciA6IHB1YmxpYyBH
cmFwaGljc0xheWVyQ2xpZW50CisgICAgLCBwdWJsaWMgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Q2xpZW50CisgICAgLCBwdWJsaWMgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNsaWVudAorICAg
ICwgcHVibGljIFVwZGF0ZUF0bGFzOjpDbGllbnQKKyAgICAsIHB1YmxpYyBHcmFwaGljc0xheWVy
RmFjdG9yeSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q29tcG9zaXRpbmdDb29yZGluYXRvcigp
OworCitwcm90ZWN0ZWQ6CisgICAgQ29tcG9zaXRpbmdDb29yZGluYXRvcihQYWdlKik7CisKKyAg
ICB2b2lkIHNpemVEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSk7CisgICAgdm9pZCBk
ZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKKyAgICB2b2lkIHNldEJhY2tncm91bmRD
b2xvcihjb25zdCBDb2xvciYpOworCisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIHJlbmRlck5leHRG
cmFtZSgpOworICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisgICAgdm9pZCBjb21taXRT
Y3JvbGxPZmZzZXQodWludDMyX3QgbGF5ZXJJRCwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0KTsKKyNp
ZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAgdm9pZCBhbmltYXRpb25GcmFt
ZVJlYWR5KCk7CisjZW5kaWYKKworICAgIHZvaWQgY3JlYXRlUm9vdExheWVyKGNvbnN0IEludFNp
emUmKTsKKyAgICB2b2lkIGNsZWFyUm9vdExheWVyKCkgeyBtX3Jvb3RMYXllciA9IG51bGxwdHI7
IH0KKyAgICBHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RM
YXllci5nZXQoKTsgfQorICAgIEdyYXBoaWNzTGF5ZXIqIG5vbkNvbXBvc2l0ZWRDb250ZW50TGF5
ZXIoKSBjb25zdCB7IHJldHVybiBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCk7IH0K
KworICAgIGJvb2wgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7CisgICAgQ29vcmRpbmF0ZWRH
cmFwaGljc1N0YXRlJiBzdGF0ZSgpIHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICBib29sIGlzV2Fp
dGluZ0ZvclJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9pc1dhaXRpbmdGb3JSZW5kZXJlcjsg
fQorCisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvck5vbkZyYW1lTGF5
ZXJzKCk7CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaFJlcXVpcmVkKCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUoQ29vcmRp
bmF0ZWRHcmFwaGljc1N0YXRlJikgPSAwOworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICB2
aXJ0dWFsIHZvaWQgcHJlcGFyZUN1c3RvbUZpbHRlclByb3hpZXNJZk5lZWRlZChDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpID0gMDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIC8vIEdy
YXBoaWNzTGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRl
ZChjb25zdCBHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwg
R3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJl
Y3QmIGNsaXBSZWN0KSA9IDA7CisgICAgdmlydHVhbCBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rvcigp
IGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yKCkgY29u
c3QgT1ZFUlJJREU7CisKKyAgICAvLyBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q2xpZW50Cisg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUlt
YWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKKworICAgIC8v
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudAorICAgIHZpcnR1YWwgYm9vbCBpc0ZsdXNo
aW5nTGF5ZXJDaGFuZ2VzKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pc0ZsdXNoaW5nTGF5
ZXJDaGFuZ2VzOyB9CisgICAgdmlydHVhbCBGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgp
IGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdl
QmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoSW1hZ2UqKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250
ZW50VXBkYXRlKGNvbnN0IEludFNpemUmLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50
MzJfdCYgYXRsYXNJRCwgSW50UG9pbnQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3lu
Y0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklELCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJT
dGF0ZSYpIE9WRVJSSURFOworCisgICAgLy8gVXBkYXRlQXRsYXM6OkNsaWVudAorICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPENv
b3JkaW5hdGVkU3VyZmFjZT4pIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRh
dGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKSBPVkVSUklERTsKKworICAgIC8vIEdyYXBoaWNzTGF5
ZXJGYWN0b3J5CisgICAgdmlydHVhbCBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdy
YXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCopIE9WRVJSSURFOworCisgICAgdm9pZCBm
bHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7CisgICAgdm9pZCBjbGVhclBlbmRpbmdT
dGF0ZUNoYW5nZXMoKTsKKworICAgIHZvaWQgc2NoZWR1bGVSZWxlYXNlSW5hY3RpdmVBdGxhc2Vz
KCk7CisKKyAgICB2b2lkIHJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKFRpbWVyPENv
bXBvc2l0aW5nQ29vcmRpbmF0b3I+Kik7CisKKyAgICBQYWdlKiBtX3BhZ2U7CisKKyAgICBPd25Q
dHI8R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CisKKyAgICAvLyBUaGUgbGF5ZXIgd2hpY2gg
Y29udGFpbnMgYWxsIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQuCisgICAgT3duUHRyPEdyYXBoaWNz
TGF5ZXI+IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcjsKKworICAgIENvb3JkaW5hdGVkR3Jh
cGhpY3NTdGF0ZSBtX3N0YXRlOworCisgICAgdHlwZWRlZiBIYXNoTWFwPENvb3JkaW5hdGVkTGF5
ZXJJRCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj4gTGF5ZXJNYXA7CisgICAgTGF5ZXJNYXAg
bV9yZWdpc3RlcmVkTGF5ZXJzOworICAgIHR5cGVkZWYgSGFzaE1hcDxDb29yZGluYXRlZEltYWdl
QmFja2luZ0lELCBSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+ID4gSW1hZ2VCYWNraW5n
TWFwOworICAgIEltYWdlQmFja2luZ01hcCBtX2ltYWdlQmFja2luZ3M7CisgICAgVmVjdG9yPE93
blB0cjxVcGRhdGVBdGxhcz4gPiBtX3VwZGF0ZUF0bGFzZXM7CisKKyAgICAvLyBXZSBkb24ndCBz
ZW5kIHRoZSBtZXNzYWdlcyByZWxhdGVkIHRvIHJlbGVhc2luZyByZXNvdXJjZXMgdG8gcmVuZGVy
ZXIgZHVyaW5nIHB1cmdpbmcsIGJlY2F1c2UgcmVuZGVyZXIgYWxyZWFkeSBoYWQgcmVtb3ZlZCBh
bGwgcmVzb3VyY2VzLgorICAgIGJvb2wgbV9pc1B1cmdpbmc7CisgICAgYm9vbCBtX2lzRmx1c2hp
bmdMYXllckNoYW5nZXM7CisKKyAgICBib29sIG1faXNXYWl0aW5nRm9yUmVuZGVyZXI7CisgICAg
RmxvYXRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKworICAgIGJvb2wgbV9zaG91bGRTeW5j
RnJhbWU7CisgICAgYm9vbCBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcjsKKyAg
ICBUaW1lcjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNU
aW1lcjsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZiAvLyBDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExh
eWVyVHJlZUhvc3QuY3BwCmluZGV4IGM2Mzk0NTNkNDM3YTFkY2ZlZjNlYTAxYzA4N2Y0MTcyNzI3
ZWUxMjcuLjE0MWVlOWM0Y2ZhZTFjZTkyZDZiY2M2YTAwNGE2YTA3NmFmNTJkMWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
LmNwcApAQCAtMzgsMTggKzM4LDYgQEAKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMu
aCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMu
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZp
ZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzU3VyZmFjZS5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvUGFnZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL1JlbmRlckxheWVyQmFja2luZy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU3VyZmFjZVVwZGF0
ZUluZm8uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmg+
Ci0jaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgogCiAjaWYgRU5BQkxFKENTU19TSEFE
RVJTKQogI2luY2x1ZGUgIkN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uaCIKQEAgLTcwLDUz
ICs1OCwyMSBAQCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6On5Db29yZGluYXRlZExheWVyVHJl
ZUhvc3QoKQogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICBkaXNjb25uZWN0Q3VzdG9tRmls
dGVyUHJvZ3JhbXMoKTsKICNlbmRpZgotICAgIHB1cmdlQmFja2luZ1N0b3JlcygpOwotCi0gICAg
TGF5ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKLSAgICBm
b3IgKExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT52YWx1ZS0+c2V0Q29vcmRpbmF0b3IoMCk7CiB9
CiAKIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KFdl
YlBhZ2UqIHdlYlBhZ2UpCiAgICAgOiBMYXllclRyZWVIb3N0KHdlYlBhZ2UpCisgICAgLCBDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yKHdlYlBhZ2UtPmNvcmVQYWdlKCkpCiAgICAgLCBtX25vdGlmeUFm
dGVyU2NoZWR1bGVkTGF5ZXJGbHVzaChmYWxzZSkKICAgICAsIG1faXNWYWxpZCh0cnVlKQotICAg
ICwgbV9pc1B1cmdpbmcoZmFsc2UpCi0gICAgLCBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXMoZmFs
c2UpCi0gICAgLCBtX3dhaXRpbmdGb3JVSVByb2Nlc3ModHJ1ZSkKICAgICAsIG1faXNTdXNwZW5k
ZWQoZmFsc2UpCi0gICAgLCBtX3Nob3VsZFN5bmNGcmFtZShmYWxzZSkKLSAgICAsIG1fZGlkSW5p
dGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyKGZhbHNlKQogICAgICwgbV9sYXllckZsdXNoVGlt
ZXIodGhpcywgJkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQp
Ci0gICAgLCBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lcih0aGlzLCAmQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpyZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJGaXJlZCkKICAgICAsIG1f
bGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKHRydWUpCiAgICAgLCBtX2ZvcmNlUmVwYWludEFz
eW5jQ2FsbGJhY2tJRCgwKQogICAgICwgbV9hbmltYXRpb25zTG9ja2VkKGZhbHNlKQogewotICAg
IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0U2Nyb2xsaW5nQ29vcmRpbmF0
b3JFbmFibGVkKHRydWUpOwotICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+
c2V0QXBwbHlEZXZpY2VTY2FsZUZhY3RvckluQ29tcG9zaXRvcih0cnVlKTsKLQotICAgIC8vIENy
ZWF0ZSBhIHJvb3QgbGF5ZXIuCi0gICAgbV9yb290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVh
dGUodGhpcywgdGhpcyk7Ci0gICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBjb29yZGluYXRl
ZFJvb3RMYXllciA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgp
KTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9yb290TGF5ZXItPnNldE5hbWUoIkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdCByb290IGxheWVyIik7Ci0jZW5kaWYKLSAgICBtX3Jvb3RMYXllci0+c2V0
RHJhd3NDb250ZW50KGZhbHNlKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2Ut
PnNpemUoKSk7Ci0gICAgbV9sYXllclRyZWVDb250ZXh0LmNvb3JkaW5hdGVkTGF5ZXJJRCA9IHRv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGNvb3JkaW5hdGVkUm9vdExheWVyKS0+aWQoKTsKLQot
ICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0
aGlzLCB0aGlzKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLT5zZXROYW1lKCJDb29yZGluYXRlZExheWVyVHJlZUhvc3Qgbm9uLWNvbXBvc2l0ZWQgY29u
dGVudCIpOwotI2VuZGlmCi0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXREcmF3
c0NvbnRlbnQodHJ1ZSk7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXpl
KG1fd2ViUGFnZS0+c2l6ZSgpKTsKLQotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+
c2V0U2hvd0RlYnVnQm9yZGVyKG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hv
d0RlYnVnQm9yZGVycygpKTsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNo
b3dSZXBhaW50Q291bnRlcihtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCktPnNob3dS
ZXBhaW50Q291bnRlcigpKTsKLQotICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX25vbkNvbXBv
c2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpOworICAgIGNyZWF0ZVJvb3RMYXllcihtX3dlYlBhZ2Ut
PnNpemUoKSk7CisgICAgbV9sYXllclRyZWVDb250ZXh0LmNvb3JkaW5hdGVkTGF5ZXJJRCA9IHRv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJvb3RMYXll
cigpKS0+aWQoKTsKIAogICAgIENvb3JkaW5hdGVkU3VyZmFjZTo6c2V0RmFjdG9yeShjcmVhdGVD
b29yZGluYXRlZFN1cmZhY2UpOwogCkBAIC0xNjIsMTIgKzExOCwxMiBAQCB2b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJG
bHVzaChib29sCiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRSb290Q29tcG9z
aXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQogewotICAg
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKLSAgICBt
X25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKG1fd2ViUGFnZS0+
ZHJhd3NCYWNrZ3JvdW5kKCkgJiYgIW1fd2ViUGFnZS0+ZHJhd3NUcmFuc3BhcmVudEJhY2tncm91
bmQoKSk7CisgICAgbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcigpLT5yZW1vdmVBbGxDaGlsZHJl
bigpOworICAgIG5vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIoKS0+c2V0Q29udGVudHNPcGFxdWUo
bV93ZWJQYWdlLT5kcmF3c0JhY2tncm91bmQoKSAmJiAhbV93ZWJQYWdlLT5kcmF3c1RyYW5zcGFy
ZW50QmFja2dyb3VuZCgpKTsKIAogICAgIC8vIEFkZCB0aGUgYWNjZWxlcmF0ZWQgbGF5ZXIgdHJl
ZSBoaWVyYXJjaHkuCiAgICAgaWYgKGdyYXBoaWNzTGF5ZXIpCi0gICAgICAgIG1fbm9uQ29tcG9z
aXRlZENvbnRlbnRMYXllci0+YWRkQ2hpbGQoZ3JhcGhpY3NMYXllcik7CisgICAgICAgIG5vbkNv
bXBvc2l0ZWRDb250ZW50TGF5ZXIoKS0+YWRkQ2hpbGQoZ3JhcGhpY3NMYXllcik7CiB9CiAKIHZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKCkKQEAgLTE3NSwxMyArMTMx
LDE0IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKCkKICAgICBj
YW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOwogCiAgICAgQVNTRVJUKG1faXNWYWxpZCk7Ci0gICAg
bV9yb290TGF5ZXIgPSBudWxscHRyOworICAgIGNsZWFyUm9vdExheWVyKCk7CiAgICAgbV9pc1Zh
bGlkID0gZmFsc2U7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXROb25D
b21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheSgpCiB7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29u
dGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBub25Db21wb3NpdGVkQ29udGVudExh
eWVyKCktPnNldE5lZWRzRGlzcGxheSgpOworCiAgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikK
ICAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKIApAQCAtMTkw
LDcgKzE0Nyw4IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXROb25Db21wb3Np
dGVkQ29udGVudHNOZWVkRGlzcGxheSgpCiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheUluUmVjdChjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiByZWN0KQogewotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgIG5vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIo
KS0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworCiAgICAgaWYgKG1fcGFnZU92ZXJsYXlM
YXllcikKICAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3Qo
cmVjdCk7CiAKQEAgLTIyOCwyMyArMTg2LDcgQEAgYm9vbCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmZvcmNlUmVwYWludEFzeW5jKHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAKIHZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IG5ld1NpemUpCiB7Ci0gICAgaWYgKG1fcm9vdExheWVyLT5zaXplKCkgPT0gbmV3U2l6ZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9yb290TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7Ci0KLSAg
ICAvLyBJZiB0aGUgbmV3U2l6ZSBleHBvc2VzIG5ldyBhcmVhcyBvZiB0aGUgbm9uLWNvbXBvc2l0
ZWQgY29udGVudCBhIHNldE5lZWRzRGlzcGxheSBpcyBuZWVkZWQKLSAgICAvLyBmb3IgdGhvc2Ug
bmV3bHkgZXhwb3NlZCBhcmVhcy4KLSAgICBGbG9hdFNpemUgb2xkU2l6ZSA9IG1fbm9uQ29tcG9z
aXRlZENvbnRlbnRMYXllci0+c2l6ZSgpOwotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXll
ci0+c2V0U2l6ZShuZXdTaXplKTsKLQotICAgIGlmIChuZXdTaXplLndpZHRoKCkgPiBvbGRTaXpl
LndpZHRoKCkpIHsKLSAgICAgICAgZmxvYXQgaGVpZ2h0ID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG5ld1NpemUuaGVpZ2h0KCkpLCBvbGRTaXplLmhlaWdodCgpKTsKLSAgICAgICAgbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0
KG9sZFNpemUud2lkdGgoKSwgMCwgbmV3U2l6ZS53aWR0aCgpIC0gb2xkU2l6ZS53aWR0aCgpLCBo
ZWlnaHQpKTsKLSAgICB9Ci0KLSAgICBpZiAobmV3U2l6ZS5oZWlnaHQoKSA+IG9sZFNpemUuaGVp
Z2h0KCkpCi0gICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNw
bGF5SW5SZWN0KEZsb2F0UmVjdCgwLCBvbGRTaXplLmhlaWdodCgpLCBuZXdTaXplLndpZHRoKCks
IG5ld1NpemUuaGVpZ2h0KCkgLSBvbGRTaXplLmhlaWdodCgpKSk7CisgICAgQ29tcG9zaXRpbmdD
b29yZGluYXRvcjo6c2l6ZURpZENoYW5nZShuZXdTaXplKTsKIAogICAgIGlmIChtX3BhZ2VPdmVy
bGF5TGF5ZXIpCiAgICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZShuZXdTaXplKTsK
QEAgLTI3OCw4OCArMjIwLDYgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFBh
Z2VPdmVybGF5T3BhY2l0eShmbG9hdCB2YWx1ZSkKICAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsK
IH0KIAotYm9vbCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0xheWVyQ2hh
bmdlcygpCi17Ci0gICAgaWYgKG1fd2FpdGluZ0ZvclVJUHJvY2VzcykKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IHByb3RlY3RvcihtX2lzRmx1c2hp
bmdMYXllckNoYW5nZXMsIHRydWUpOwotCi0gICAgaW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xh
eWVySWZOZWVkZWQoKTsKLQotICAgIG1fcm9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVG
b3JUaGlzTGF5ZXJPbmx5KCk7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5mbHVz
aENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0gICAgaWYgKG1fcGFnZU92ZXJs
YXlMYXllcikKLSAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5mbHVzaENvbXBvc2l0aW5nU3Rh
dGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0KLSAgICBib29sIGRpZFN5bmMgPSBtX3dlYlBhZ2UtPmNv
cmVQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1
ZGluZ1N1YmZyYW1lcygpOwotCi0gICAgZmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygp
OwotCi0gICAgaWYgKG1fc2hvdWxkU3luY0ZyYW1lKSB7Ci0gICAgICAgIGRpZFN5bmMgPSB0cnVl
OwotCi0gICAgICAgIG1fc3RhdGUuY29udGVudHNTaXplID0gcm91bmRlZEludFNpemUobV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCkpOwotICAgICAgICBtX3N0YXRlLmNvdmVyZWRS
ZWN0ID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLmdldCgpKS0+Y292ZXJSZWN0KCk7Ci0gICAgICAgIG1fc3RhdGUuc2Nyb2xsUG9zaXRpb24g
PSBtX3Zpc2libGVDb250ZW50c1JlY3QubG9jYXRpb24oKTsKLQotICAgICAgICBtX3dlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDb21taXRDb29y
ZGluYXRlZEdyYXBoaWNzU3RhdGUobV9zdGF0ZSkpOwotCi0gICAgICAgIGNsZWFyUGVuZGluZ1N0
YXRlQ2hhbmdlcygpOwotICAgICAgICBtX3dhaXRpbmdGb3JVSVByb2Nlc3MgPSB0cnVlOwotICAg
ICAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IGZhbHNlOwotICAgIH0gZWxzZQotICAgICAgICB1bmxv
Y2tBbmltYXRpb25zKCk7Ci0KLSAgICBpZiAobV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQp
IHsKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRD
YWxsYmFjayhtX2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJRCkpOwotICAgICAgICBtX2ZvcmNl
UmVwYWludEFzeW5jQ2FsbGJhY2tJRCA9IDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRpZFN5bmM7
Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjbGVhclBlbmRpbmdTdGF0ZUNo
YW5nZXMoKQotewotICAgIG1fc3RhdGUubGF5ZXJzVG9DcmVhdGUuY2xlYXIoKTsKLSAgICBtX3N0
YXRlLmxheWVyc1RvVXBkYXRlLmNsZWFyKCk7Ci0gICAgbV9zdGF0ZS5sYXllcnNUb1JlbW92ZS5j
bGVhcigpOwotCi0gICAgbV9zdGF0ZS5pbWFnZXNUb0NyZWF0ZS5jbGVhcigpOwotICAgIG1fc3Rh
dGUuaW1hZ2VzVG9SZW1vdmUuY2xlYXIoKTsKLSAgICBtX3N0YXRlLmltYWdlc1RvVXBkYXRlLmNs
ZWFyKCk7Ci0gICAgbV9zdGF0ZS5pbWFnZXNUb0NsZWFyLmNsZWFyKCk7Ci0KLSAgICBtX3N0YXRl
LnVwZGF0ZUF0bGFzZXNUb0NyZWF0ZS5jbGVhcigpOwotICAgIG1fc3RhdGUudXBkYXRlQXRsYXNl
c1RvUmVtb3ZlLmNsZWFyKCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgbV9zdGF0
ZS5jdXN0b21GaWx0ZXJzVG9DcmVhdGUuY2xlYXIoKTsKLSAgICBtX3N0YXRlLmN1c3RvbUZpbHRl
cnNUb1JlbW92ZS5jbGVhcigpOwotI2VuZGlmCi19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0Ojppbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCgpCi17Ci0gICAg
aWYgKG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3N0YXRlLnJvb3RDb21wb3NpdGluZ0xheWVyID0gdG9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5pZCgpOwotICAgIG1fZGlkSW5pdGlhbGl6ZVJv
b3RDb21wb3NpdGluZ0xheWVyID0gdHJ1ZTsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7
Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jTGF5ZXJTdGF0ZShDb29y
ZGluYXRlZExheWVySUQgaWQsIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkK
LXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpCi0gICAgcHJlcGFyZUN1c3RvbUZpbHRlclByb3hpZXNJZk5lZWRlZChzdGF0ZSk7Ci0jZW5k
aWYKLQotICAgIG1fc3RhdGUubGF5ZXJzVG9VcGRhdGUuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGlk
LCBzdGF0ZSkpOwotfQotCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OnByZXBhcmVDdXN0b21GaWx0ZXJQcm94aWVzSWZOZWVkZWQoQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQogewpAQCAtNDA3LDcgKzI2Nyw3IEBAIHZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94
aWVzKGNvbnN0IEZpbHRlck9wZXJhCiAgICAgICAgIGlmICghY3VzdG9tRmlsdGVyUHJvZ3JhbVBy
b3h5LT5jbGllbnQoKSkgewogICAgICAgICAgICAgY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5z
ZXRDbGllbnQodGhpcyk7CiAgICAgICAgICAgICBtX2N1c3RvbUZpbHRlclByb2dyYW1zLmFkZChj
dXN0b21GaWx0ZXJQcm9ncmFtUHJveHkuZ2V0KCkpOwotICAgICAgICAgICAgbV9zdGF0ZS5jdXN0
b21GaWx0ZXJzVG9DcmVhdGUuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGN1c3RvbUZpbHRlclByb2dy
YW1Qcm94eS0+aWQoKSwgY3VzdG9tT3BlcmF0aW9uLT52YWxpZGF0ZWRQcm9ncmFtKCktPnZhbGlk
YXRlZFByb2dyYW1JbmZvKCkpKTsKKyAgICAgICAgICAgIHN0YXRlKCkuY3VzdG9tRmlsdGVyc1Rv
Q3JlYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmlk
KCksIGN1c3RvbU9wZXJhdGlvbi0+dmFsaWRhdGVkUHJvZ3JhbSgpLT52YWxpZGF0ZWRQcm9ncmFt
SW5mbygpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgY2xpZW50
IHdhcyBub3QgZGlzY29ubmVjdGVkIHRoZW4gdGhpcyBjb29yZGluYXRvciBtdXN0IGJlIHRoZSBj
bGllbnQgZm9yIGl0LgogICAgICAgICAgICAgQVNTRVJUKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94
eS0+Y2xpZW50KCkgPT0gdGhpcyk7CkBAIC00MjAsNyArMjgwLDcgQEAgdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW1Qcm94eShXZWJDdXN0b21G
aWx0ZXJQcm8KICAgICAvLyBBdCB0aGlzIHRpbWUgdGhlIHNoYWRlciBpcyBub3QgbmVlZGVkIGFu
eW1vcmUsIHNvIHdlIHJlbW92ZSBpdCBmcm9tIG91ciBzZXQgYW5kCiAgICAgLy8gc2VuZCBhIG1l
c3NhZ2UgdG8gdGhlIG90aGVyIHByb2Nlc3MgdG8gZGVsZXRlIGl0LgogICAgIG1fY3VzdG9tRmls
dGVyUHJvZ3JhbXMucmVtb3ZlKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSk7Ci0gICAgbV9zdGF0
ZS5jdXN0b21GaWx0ZXJzVG9SZW1vdmUuYXBwZW5kKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+
aWQoKSk7CisgICAgc3RhdGUoKS5jdXN0b21GaWx0ZXJzVG9SZW1vdmUuYXBwZW5kKGN1c3RvbUZp
bHRlclByb2dyYW1Qcm94eS0+aWQoKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpkaXNjb25uZWN0Q3VzdG9tRmlsdGVyUHJvZ3JhbXMoKQpAQCAtNDMyLDIxICsyOTIsMTEg
QEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpc2Nvbm5lY3RDdXN0b21GaWx0ZXJQ
cm9ncmFtcygpCiB9CiAjZW5kaWYgLy8gRU5BQkxFKENTU19TSEFERVJTKQogCi12b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGV0YWNoTGF5ZXIoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
KiBsYXllcikKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpmbHVzaENvbXBvc2l0aW5n
U3RhdGVGb3JOb25GcmFtZUxheWVycygpCiB7Ci0gICAgaWYgKG1faXNQdXJnaW5nKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3JlZ2lzdGVyZWRMYXllcnMucmVtb3ZlKGxheWVyLT5pZCgpKTsK
LQotICAgIHNpemVfdCBpbmRleCA9IG1fc3RhdGUubGF5ZXJzVG9DcmVhdGUuZmluZChsYXllci0+
aWQoKSk7Ci0gICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgIG1fc3RhdGUubGF5
ZXJzVG9DcmVhdGUucmVtb3ZlKGluZGV4KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IG1fc3RhdGUubGF5ZXJzVG9SZW1vdmUuYXBwZW5kKGxheWVyLT5pZCgpKTsKLSAgICBzY2hlZHVs
ZUxheWVyRmx1c2goKTsKKyAgICBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpmbHVzaENvbXBvc2l0
aW5nU3RhdGVGb3JOb25GcmFtZUxheWVycygpOworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIp
CisgICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhp
c0xheWVyT25seSgpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bG9ja0Fu
aW1hdGlvbnMoKQpAQCAtNDY2LDcgKzMxNiw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0Ojp1bmxvY2tBbmltYXRpb25zKCkKIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCkKIHsKLSAgICBpZiAobV9pc1N1c3BlbmRlZCB8
fCBtX3dhaXRpbmdGb3JVSVByb2Nlc3MpCisgICAgaWYgKCFtX2lzVmFsaWQgfHwgbV9pc1N1c3Bl
bmRlZCB8fCBpc1dhaXRpbmdGb3JSZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBXZSBsb2NrIHRoZSBhbmltYXRpb25zIHdoaWxlIHBlcmZvcm1pbmcgbGF5b3V0LCB0byBhdm9p
ZCBmbGlja2VycyBjYXVzZWQgYnkgYW5pbWF0aW9ucyBjb250aW51aW5nIGluIHRoZSBVSSBwcm9j
ZXNzIHdoaWxlCkBAIC00NzYsMTUgKzMyNiwyMSBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQogCiAgICAgLy8gV2UgY2FuIHVubG9j
ayB0aGUgYW5pbWF0aW9ucyBiZWZvcmUgZmx1c2hpbmcgaWYgdGhlcmUgYXJlIG5vIHZpc2libGUg
Y2hhbmdlcywgZm9yIGV4YW1wbGUgaWYgdGhlcmUgYXJlIGNvbnRlbnQgdXBkYXRlcwogICAgIC8v
IGluIGEgbGF5ZXIgd2l0aCBvcGFjaXR5IDAuCi0gICAgYm9vbCBjYW5VbmxvY2tCZWZvcmVGbHVz
aCA9ICFtX2lzVmFsaWQgfHwgIXRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVy
LmdldCgpKS0+aGFzUGVuZGluZ1Zpc2libGVDaGFuZ2VzKCk7CisgICAgYm9vbCBjYW5VbmxvY2tC
ZWZvcmVGbHVzaCA9ICFtX2lzVmFsaWQgfHwgIXRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKHJv
b3RMYXllcigpKS0+aGFzUGVuZGluZ1Zpc2libGVDaGFuZ2VzKCk7CiAgICAgaWYgKGNhblVubG9j
a0JlZm9yZUZsdXNoKQogICAgICAgICB1bmxvY2tBbmltYXRpb25zKCk7CiAKLSAgICBpZiAoIW1f
aXNWYWxpZCkKLSAgICAgICAgcmV0dXJuOworICAgIGJvb2wgZGlkU3luYyA9IGZsdXNoUGVuZGlu
Z0xheWVyQ2hhbmdlcygpOwogCi0gICAgaWYgKGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpKQot
ICAgICAgICBkaWRQZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOworICAgIGlmIChtX2ZvcmNl
UmVwYWludEFzeW5jQ2FsbGJhY2tJRCkgeworICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNrKG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFj
a0lEKSk7CisgICAgICAgIG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEID0gMDsKKyAgICB9
CisKKyAgICBpZiAobV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2ggJiYgZGlkU3luYykg
eworICAgICAgICBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYUltcGwqPihtX3dlYlBhZ2UtPmRyYXdp
bmdBcmVhKCkpLT5sYXllckhvc3REaWRGbHVzaExheWVycygpOworICAgICAgICBtX25vdGlmeUFm
dGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOworICAgIH0KIH0KIAogdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OnN5bmNEaXNwbGF5U3RhdGUoKQpAQCAtNDk3LDE0ICszNTMsNiBA
QCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0Rpc3BsYXlTdGF0ZSgpCiAgICAg
bV93ZWJQYWdlLT5sYXlvdXRJZk5lZWRlZCgpOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6ZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQotewotICAgIGlmIChtX25v
dGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCkgewotICAgICAgICBzdGF0aWNfY2FzdDxEcmF3
aW5nQXJlYUltcGwqPihtX3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCkpLT5sYXllckhvc3REaWRGbHVz
aExheWVycygpOwotICAgICAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZh
bHNlOwotICAgIH0KLX0KLQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmxheWVyRmx1
c2hUaW1lckZpcmVkKFRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4qKQogewogICAgIHBl
cmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7CkBAIC01MTYsMTMgKzM2NCwxMyBAQCB2b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlUGFnZU92ZXJsYXlMYXllcigpCiAKICAgICBt
X3BhZ2VPdmVybGF5TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcywgdGhpcyk7CiAj
aWZuZGVmIE5ERUJVRwotICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmFtZSgiQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0IHBhZ2Ugb3ZlcmxheSBjb250ZW50Iik7CisgICAgbV9wYWdlT3Zlcmxh
eUxheWVyLT5zZXROYW1lKCJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yIHBhZ2Ugb3ZlcmxheSBjb250
ZW50Iik7CiAjZW5kaWYKIAogICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0RHJhd3NDb250ZW50
KHRydWUpOwotICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUo
KSk7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRTaXplKHJvb3RMYXllcigpLT5zaXplKCkp
OwogCi0gICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fcGFnZU92ZXJsYXlMYXllci5nZXQoKSk7
CisgICAgcm9vdExheWVyKCktPmFkZENoaWxkKG1fcGFnZU92ZXJsYXlMYXllci5nZXQoKSk7CiB9
CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXN0cm95UGFnZU92ZXJsYXlMYXll
cigpCkBAIC01MzIsNjUgKzM4MCw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpk
ZXN0cm95UGFnZU92ZXJsYXlMYXllcigpCiAgICAgbV9wYWdlT3ZlcmxheUxheWVyID0gbnVsbHB0
cjsKIH0KIAotUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChJbWFnZSogaW1hZ2UpCit2
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGlj
c0xheWVyKiBncmFwaGljc0xheWVyLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwg
R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQogewot
ICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCA9IENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nOjpnZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKGltYWdlKTsKLSAgICBJbWFnZUJh
Y2tpbmdNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7Ci0g
ICAgUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBpbWFnZUJhY2tpbmc7Ci0gICAgaWYg
KGl0ID09IG1faW1hZ2VCYWNraW5ncy5lbmQoKSkgewotICAgICAgICBpbWFnZUJhY2tpbmcgPSBD
b29yZGluYXRlZEltYWdlQmFja2luZzo6Y3JlYXRlKHRoaXMsIGltYWdlKTsKLSAgICAgICAgbV9p
bWFnZUJhY2tpbmdzLmFkZChpbWFnZUlELCBpbWFnZUJhY2tpbmcpOwotICAgIH0gZWxzZQotICAg
ICAgICBpbWFnZUJhY2tpbmcgPSBpdC0+dmFsdWU7Ci0KLSAgICByZXR1cm4gaW1hZ2VCYWNraW5n
OwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlSW1hZ2VCYWNraW5n
KENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBtX3N0YXRlLmltYWdl
c1RvQ3JlYXRlLmFwcGVuZChpbWFnZUlEKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdl
SUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBjb29yZGluYXRlZFN1cmZhY2UpCi17
Ci0gICAgbV9zdGF0ZS5pbWFnZXNUb1VwZGF0ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoaW1hZ2VJ
RCwgY29vcmRpbmF0ZWRTdXJmYWNlKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQg
aW1hZ2VJRCkKLXsKLSAgICBtX3N0YXRlLmltYWdlc1RvQ2xlYXIuYXBwZW5kKGltYWdlSUQpOwot
fQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlSW1hZ2VCYWNraW5nKENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBpZiAobV9pc1B1cmdpbmcp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2ltYWdlQmFja2luZ3MuY29udGFpbnMo
aW1hZ2VJRCkpOwotICAgIG1faW1hZ2VCYWNraW5ncy5yZW1vdmUoaW1hZ2VJRCk7Ci0KLSAgICBt
X3N0YXRlLmltYWdlc1RvUmVtb3ZlLmFwcGVuZChpbWFnZUlEKTsKLX0KLQotdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKQotewot
ICAgIEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgZW5kID0gbV9pbWFnZUJhY2tpbmdzLmVuZCgp
OwotICAgIGZvciAoSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdGVyID0gbV9pbWFnZUJhY2tp
bmdzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGl0ZXItPnZhbHVlLT51
cGRhdGUoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6Om5vdGlmeUFuaW1h
dGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSAvKiB0aW1l
ICovKQotewotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bm90aWZ5Rmx1c2hS
ZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKLXsKLSAgICBzY2hlZHVsZUxh
eWVyRmx1c2goKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnBhaW50Q29u
dGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCkKLXsKLSAg
ICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIpIHsKKyAg
ICBpZiAoZ3JhcGhpY3NMYXllciA9PSBub25Db21wb3NpdGVkQ29udGVudExheWVyKCkpIHsKICAg
ICAgICAgbV93ZWJQYWdlLT5kcmF3UmVjdChncmFwaGljc0NvbnRleHQsIGNsaXBSZWN0KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTYwMywxNSArMzk1LDkgQEAgdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OnBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciogZ3JhcGgKICAgICB9CiB9CiAKLVBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQq
IGNsaWVudCkKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpjb21taXRDb29yZGluYXRl
ZEdyYXBoaWNzU3RhdGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJiBzdGF0ZSkK
IHsKLSAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbmV3IENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcihjbGllbnQpOwotICAgIGxheWVyLT5zZXRDb29yZGluYXRvcih0aGlzKTsK
LSAgICBtX3JlZ2lzdGVyZWRMYXllcnMuYWRkKGxheWVyLT5pZCgpLCBsYXllcik7Ci0gICAgbV9z
dGF0ZS5sYXllcnNUb0NyZWF0ZS5hcHBlbmQobGF5ZXItPmlkKCkpOwotICAgIGxheWVyLT5zZXRO
ZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwot
ICAgIHJldHVybiBhZG9wdFB0cihsYXllcik7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q29tbWl0Q29vcmRpbmF0ZWRHcmFwaGlj
c1N0YXRlKHN0YXRlKSk7CiB9CiAKIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUNvb3JkaW5hdGVkU3VyZmFjZShjb25zdCBJbnRT
aXplJiBzaXplLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzIGZsYWdzKQpAQCAtNjE5LDY1ICs0
MDUsMTQgQEAgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6Y3JlYXRlQ29vcmRpbmF0ZWRTdXJmYWMKICAgICByZXR1cm4gV2ViQ29vcmRpbmF0
ZWRTdXJmYWNlOjpjcmVhdGUoc2l6ZSwgZmxhZ3MpOwogfQogCi1mbG9hdCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV93
ZWJQYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotfQotCi1mbG9hdCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fd2ViUGFn
ZS0+cGFnZVNjYWxlRmFjdG9yKCk7Ci19Ci0KIGJvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFz
SUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBjb29yZGluYXRlZFN1cmZhY2UpCi17
Ci0gICAgbV9zdGF0ZS51cGRhdGVBdGxhc2VzVG9DcmVhdGUuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KGF0bGFzSUQsIGNvb3JkaW5hdGVkU3VyZmFjZSkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6cmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkKLXsKLSAgICBp
ZiAobV9pc1B1cmdpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3N0YXRlLnVwZGF0ZUF0bGFz
ZXNUb1JlbW92ZS5hcHBlbmQoYXRsYXNJRCk7Ci19Ci0KLVdlYkNvcmU6OkZsb2F0UmVjdCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdAotewotICAg
IHJldHVybiBtX3Zpc2libGVDb250ZW50c1JlY3Q7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKLXsKLSAgICAvLyBBIHplcm8gdHJh
amVjdG9yeVZlY3RvciBpbmRpY2F0ZXMgdGhhdCB0aWxlcyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9y
dCBhcmUgcmVxdWVzdGVkLgotICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSktPnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3Rv
cnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7Ci0KLSAgICBib29sIGNvbnRlbnRzUmVjdERpZENo
YW5nZSA9IHJlY3QgIT0gbV92aXNpYmxlQ29udGVudHNSZWN0OwotICAgIGlmIChjb250ZW50c1Jl
Y3REaWRDaGFuZ2UpIHsKLSAgICAgICAgbV92aXNpYmxlQ29udGVudHNSZWN0ID0gcmVjdDsKLQot
ICAgICAgICBMYXllck1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgp
OwotICAgICAgICBmb3IgKExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVy
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0
TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1lbnQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHNj
aGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgIGlmIChtX3dlYlBhZ2UtPnVzZUZpeGVkTGF5b3V0KCkp
IHsKLSAgICAgICAgLy8gUm91bmQgdGhlIHJlY3QgaW5zdGVhZCBvZiBlbmNsb3NpbmcgaXQgdG8g
bWFrZSBzdXJlIHRoYXQgaXRzIHNpemUgc3RheXMKLSAgICAgICAgLy8gdGhlIHNhbWUgd2hpbGUg
cGFubmluZy4gVGhpcyBjYW4gaGF2ZSBuYXN0eSBlZmZlY3RzIG9uIGxheW91dC4KLSAgICAgICAg
bV93ZWJQYWdlLT5zZXRGaXhlZFZpc2libGVDb250ZW50UmVjdChyb3VuZGVkSW50UmVjdChyZWN0
KSk7Ci0gICAgfQotfQotCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGV2aWNlT3JQ
YWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkKIHsKLSAgICBtX3Jvb3RMYXllci0+ZGV2aWNlT3JQYWdl
U2NhbGVGYWN0b3JDaGFuZ2VkKCk7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5k
ZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKKyAgICBDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKICAgICBpZiAobV9wYWdlT3Zl
cmxheUxheWVyKQogICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPmRldmljZU9yUGFnZVNjYWxl
RmFjdG9yQ2hhbmdlZCgpOwogfQpAQCAtNjkyLDk4ICs0MjcsMTIgQEAgdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlQW5pbWF0aW9uKCkKIHsKICAgICBtX3dlYlBhZ2UtPnNl
bmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpSZXF1ZXN0QW5pbWF0
aW9uRnJhbWUoKSk7CiB9Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjphbmltYXRp
b25GcmFtZVJlYWR5KCkKLXsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KICNlbmRpZgog
Ci12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVuZGVyTmV4dEZyYW1lKCkKLXsKLSAg
ICBtX3dhaXRpbmdGb3JVSVByb2Nlc3MgPSBmYWxzZTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2go
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV91cGRhdGVBdGxhc2VzLnNpemUoKTsg
KytpKQotICAgICAgICBtX3VwZGF0ZUF0bGFzZXNbaV0tPmRpZFN3YXBCdWZmZXJzKCk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwdXJnZUJhY2tpbmdTdG9yZXMoKQotewot
ICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiBwdXJnaW5nVG9nZ2xlKG1faXNQdXJnaW5nLCB0cnVl
KTsKLQotICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5k
KCk7Ci0gICAgZm9yIChMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+dmFsdWUtPnB1cmdlQmFja2lu
Z1N0b3JlcygpOwotCi0gICAgbV9pbWFnZUJhY2tpbmdzLmNsZWFyKCk7Ci0gICAgbV91cGRhdGVB
dGxhc2VzLmNsZWFyKCk7Ci19Ci0KLVBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBJbnRTaXplJiBzaXpl
LCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzIGZsYWdzLCB1aW50MzJfdCYgYXRsYXNJRCwgSW50
UG9pbnQmIG9mZnNldCkKLXsKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0Nv
bnRleHQ7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXpl
KCk7ICsraSkgewotICAgICAgICBVcGRhdGVBdGxhcyogYXRsYXMgPSBtX3VwZGF0ZUF0bGFzZXNb
aV0uZ2V0KCk7Ci0gICAgICAgIGlmIChhdGxhcy0+c3VwcG9ydHNBbHBoYSgpID09IChmbGFncyAm
IENvb3JkaW5hdGVkU3VyZmFjZTo6U3VwcG9ydHNBbHBoYSkpIHsKLSAgICAgICAgICAgIC8vIFRo
aXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGVyZSBpcyBubyBhdmFpbGFibGUgYnVmZmVyIHNwYWNl
LgotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0ID0gYXRsYXMtPmJlZ2luUGFpbnRpbmdPbkF2
YWlsYWJsZUJ1ZmZlcihhdGxhc0lELCBzaXplLCBvZmZzZXQpOwotICAgICAgICAgICAgaWYgKGdy
YXBoaWNzQ29udGV4dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZ3JhcGhpY3NDb250ZXh0LnJl
bGVhc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBpbnQgU2NyYXRj
aEJ1ZmZlckRpbWVuc2lvbiA9IDEwMjQ7IC8vIFNob3VsZCBiZSBhIHBvd2VyIG9mIHR3by4KLSAg
ICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKGFkb3B0UHRyKG5ldyBVcGRhdGVBdGxhcyh0aGlzLCBT
Y3JhdGNoQnVmZmVyRGltZW5zaW9uLCBmbGFncykpKTsKLSAgICBzY2hlZHVsZVJlbGVhc2VJbmFj
dGl2ZUF0bGFzZXMoKTsKLSAgICByZXR1cm4gbV91cGRhdGVBdGxhc2VzLmxhc3QoKS0+YmVnaW5Q
YWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGF0bGFzSUQsIHNpemUsIG9mZnNldCk7Ci19Ci0KLWNv
bnN0IGRvdWJsZSBSZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJJbnRlcnZhbCA9IDAuNTsKLQot
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRs
YXNlcygpCi17Ci0gICAgaWYgKCFtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5pc0FjdGl2
ZSgpKQotICAgICAgICBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5zdGFydFJlcGVhdGlu
ZyhSZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJJbnRlcnZhbCk7Ci19Ci0KLXZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpyZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJGaXJlZChUaW1l
cjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+KikKLXsKLSAgICAvLyBXZSBhbHdheXMgd2FudCB0
byBrZWVwIG9uZSBhdGxhcyBmb3Igbm9uLWNvbXBvc2l0ZWQgY29udGVudC4KLSAgICBPd25QdHI8
VXBkYXRlQXRsYXM+IGF0bGFzVG9LZWVwQW55d2F5OwotICAgIGJvb2wgZm91bmRBY3RpdmVBdGxh
c0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ID0gZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9IG1fdXBk
YXRlQXRsYXNlcy5zaXplKCkgLSAxOyAgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgVXBkYXRlQXRs
YXMqIGF0bGFzID0gbV91cGRhdGVBdGxhc2VzW2ldLmdldCgpOwotICAgICAgICBpZiAoIWF0bGFz
LT5pc0luVXNlKCkpCi0gICAgICAgICAgICBhdGxhcy0+YWRkVGltZUluYWN0aXZlKFJlbGVhc2VJ
bmFjdGl2ZUF0bGFzZXNUaW1lckludGVydmFsKTsKLSAgICAgICAgYm9vbCB1c2FibGVGb3JOb25D
b21wb3NpdGVkQ29udGVudCA9ICFhdGxhcy0+c3VwcG9ydHNBbHBoYSgpOwotICAgICAgICBpZiAo
YXRsYXMtPmlzSW5hY3RpdmUoKSkgewotICAgICAgICAgICAgaWYgKCFmb3VuZEFjdGl2ZUF0bGFz
Rm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgJiYgIWF0bGFzVG9LZWVwQW55d2F5ICYmIHVzYWJsZUZv
ck5vbkNvbXBvc2l0ZWRDb250ZW50KQotICAgICAgICAgICAgICAgIGF0bGFzVG9LZWVwQW55d2F5
ID0gbV91cGRhdGVBdGxhc2VzW2ldLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1fdXBkYXRlQXRs
YXNlcy5yZW1vdmUoaSk7Ci0gICAgICAgIH0gZWxzZSBpZiAodXNhYmxlRm9yTm9uQ29tcG9zaXRl
ZENvbnRlbnQpCi0gICAgICAgICAgICBmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENv
bnRlbnQgPSB0cnVlOwotICAgIH0KLQotICAgIGlmICghZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNv
bXBvc2l0ZWRDb250ZW50ICYmIGF0bGFzVG9LZWVwQW55d2F5KQotICAgICAgICBtX3VwZGF0ZUF0
bGFzZXMuYXBwZW5kKGF0bGFzVG9LZWVwQW55d2F5LnJlbGVhc2UoKSk7Ci0KLSAgICBpZiAobV91
cGRhdGVBdGxhc2VzLnNpemUoKSA8PSAxKQotICAgICAgICBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFz
ZXNUaW1lci5zdG9wKCk7Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRC
YWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQogewotICAgIG1fc2hv
dWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3N0YXRlLmJhY2tncm91bmRDb2xvciA9IGNvbG9y
OwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y29tbWl0U2Nyb2xsT2Zmc2V0
KHVpbnQzMl90IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG9mZnNldCkKLXsKLSAg
ICBMYXllck1hcDo6aXRlcmF0b3IgaSA9IG1fcmVnaXN0ZXJlZExheWVycy5maW5kKGxheWVySUQp
OwotICAgIGlmIChpID09IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaS0+dmFsdWUtPmNvbW1pdFNjcm9sbE9mZnNldChvZmZzZXQpOworICAgIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OnNldEJhY2tncm91bmRDb2xvcihjb2xvcik7CisgICAgc2NoZWR1
bGVMYXllckZsdXNoKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaAppbmRleCBi
N2M4OWUyYmVmYzE3NTlkMTI2NmM1ZWQxMzI3NjFmOTQxNjJhNTcyLi44MWZjYmZmNjAyMTM4Mzcz
ODdjNmQ5ZGFkODQ2NTRjMDA4ODNmNzNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhv
c3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaApAQCAtMjUsMTMgKzI1LDggQEAKIAog
I2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKICNpbmNsdWRlICJMYXllclRyZWVIb3N0Lmgi
Ci0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEltYWdlQmFja2luZy5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29tcG9z
aXRpbmdDb29yZGluYXRvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckZhY3Rv
cnkuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1VwZGF0ZUF0bGFzLmg+CiAjaW5jbHVkZSA8d3RmL093
blB0ci5oPgogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQpAQCAtNDYsMTEgKzQxLDcgQEAgbmFt
ZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2U7CiAKLWNsYXNzIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdCA6IHB1YmxpYyBMYXllclRyZWVIb3N0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q2xpZW50Ci0gICAgLCBwdWJsaWMgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xp
ZW50Ci0gICAgLCBwdWJsaWMgV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNsaWVu
dAotICAgICwgcHVibGljIFdlYkNvcmU6OlVwZGF0ZUF0bGFzOjpDbGllbnQKLSAgICAsIHB1Ymxp
YyBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeQorY2xhc3MgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0IDogcHVibGljIExheWVyVHJlZUhvc3QsIHB1YmxpYyBXZWJDb3JlOjpDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogICAgICwgV2ViQ3VzdG9tRmls
dGVyUHJvZ3JhbVByb3h5Q2xpZW50CiAjZW5kaWYKQEAgLTU5LDM0ICs1MCwzMSBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiBjcmVhdGUo
V2ViUGFnZSopOwogICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCgpOwogCi0g
ICAgdmlydHVhbCBjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KCkgeyBy
ZXR1cm4gbV9sYXllclRyZWVDb250ZXh0OyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldExheWVyRmx1
c2hTY2hlZHVsaW5nRW5hYmxlZChib29sKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVMYXll
ckZsdXNoKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVk
dWxlZExheWVyRmx1c2goYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFJvb3RDb21wb3NpdGlu
Z0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxp
ZGF0ZSgpOworICAgIHZpcnR1YWwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29u
dGV4dCgpIE9WRVJSSURFIHsgcmV0dXJuIG1fbGF5ZXJUcmVlQ29udGV4dDsgfQorICAgIHZpcnR1
YWwgdm9pZCBzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaCgpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJD
b3JlOjpHcmFwaGljc0xheWVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRh
dGUoKSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXROb25Db21wb3NpdGVkQ29udGVu
dHNOZWVkRGlzcGxheSgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBzZXROb25Db21wb3Np
dGVkQ29udGVudHNOZWVkRGlzcGxheUluUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGZvcmNlUmVw
YWludCgpOwogICAgIHZpcnR1YWwgYm9vbCBmb3JjZVJlcGFpbnRBc3luYyh1aW50NjRfdCBjYWxs
YmFja0lEKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBuZXdTaXplKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENoYW5nZShjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgdm9pZCBk
aWRJbnN0YWxsUGFnZU92ZXJsYXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkVW5pbnN0YWxsUGFn
ZU92ZXJsYXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXko
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3Zlcmxh
eU9wYWNpdHkoZmxvYXQpOwotICAgIHZpcnR1YWwgYm9vbCBwYWdlT3ZlcmxheVNob3VsZEFwcGx5
RmFkZVdoZW5QYWludGluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2
b2lkIGRpZEluc3RhbGxQYWdlT3ZlcmxheSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBk
aWRVbmluc3RhbGxQYWdlT3ZlcmxheSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRQ
YWdlT3ZlcmxheU5lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5T3BhY2l0eShmbG9hdCkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBib29sIHBhZ2VPdmVybGF5U2hvdWxkQXBwbHlGYWRlV2hlblBhaW50aW5n
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBw
YXVzZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IHRydWU7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgcmVzdW1lUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gZmFsc2U7IHNjaGVkdWxlTGF5
ZXJGbHVzaCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCkgT1ZFUlJJREUg
eyBtX2lzU3VzcGVuZGVkID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJp
bmcoKSBPVkVSUklERSB7IG1faXNTdXNwZW5kZWQgPSBmYWxzZTsgc2NoZWR1bGVMYXllckZsdXNo
KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkg
T1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7Ci0gICAgdmly
dHVhbCB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNp
YmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VE
ZWNvZGVyJik7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlRGVjb2Rl
ciYpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3Rvcnkq
IGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgT1ZFUlJJREU7CiAKICNpZiBFTkFCTEUoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUUpCkBAIC05Niw2NiArODQsMjkgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlPiBjcmVhdGVDb29yZGluYXRl
ZFN1cmZhY2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYkNvcmU6OkNvb3JkaW5hdGVkU3Vy
ZmFjZTo6RmxhZ3MpOwogCi0gICAgdm9pZCBjb21taXRTY3JvbGxPZmZzZXQodWludDMyX3QgbGF5
ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgb2Zmc2V0KTsKLQogcHJvdGVjdGVkOgogICAg
IGV4cGxpY2l0IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdChXZWJQYWdlKik7CiAKIHByaXZhdGU6
Ci0gICAgLy8gR3JhcGhpY3NMYXllckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmlt
YXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSk7
Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciopOwotICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJl
Y3QpOwotICAgIHZpcnR1YWwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdCBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0IE9WRVJSSURFOwot
Ci0gICAgLy8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNsaWVudAotICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhXZWJDb3JlOjpD
b29yZGluYXRlZEltYWdlQmFja2luZ0lELCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVk
U3VyZmFjZT4pIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhckltYWdlQmFja2luZ0Nv
bnRlbnRzKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCkgT1ZFUlJJREU7Ci0KLSAgICB2b2lkIGZsdXNoUGVuZGluZ0ltYWdlQmFja2lu
Z0NoYW5nZXMoKTsKLQotICAgIC8vIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudAotICAg
IHZpcnR1YWwgYm9vbCBpc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gbV9pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzOyB9Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpG
bG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5n
SWZOZWVkZWQoV2ViQ29yZTo6SW1hZ2UqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0
YWNoTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKik7Ci0gICAgdmlydHVh
bCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRl
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U6OkZs
YWdzLCB1aW50MzJfdCYgYXRsYXNJRCwgV2ViQ29yZTo6SW50UG9pbnQmKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc3luY0xheWVyU3RhdGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOwotCi0gICAgLy8gVXBkYXRlQXRsYXM6
OkNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxh
c0lELCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZT4pIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKSBPVkVS
UklERTsKLQotICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5Ci0gICAgdmlydHVhbCBQYXNzT3du
UHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNsaWVudCopIE9WRVJSSURFOwotCiAgICAgLy8gQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0Ci0gICAgdm9pZCBpbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRl
ZCgpOwogICAgIHZvaWQgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOwogICAgIHZvaWQgZGVzdHJv
eVBhZ2VPdmVybGF5TGF5ZXIoKTsKLSAgICBib29sIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygp
OwotICAgIHZvaWQgY2xlYXJQZW5kaW5nU3RhdGVDaGFuZ2VzKCk7CiAgICAgdm9pZCBjYW5jZWxQ
ZW5kaW5nTGF5ZXJGbHVzaCgpOwogICAgIHZvaWQgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2go
KTsKLSAgICB2b2lkIGRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7CiAgICAgdm9pZCBz
eW5jRGlzcGxheVN0YXRlKCk7CiAgICAgdm9pZCBsb2NrQW5pbWF0aW9ucygpOwogICAgIHZvaWQg
dW5sb2NrQW5pbWF0aW9ucygpOwogCiAgICAgdm9pZCBsYXllckZsdXNoVGltZXJGaXJlZChXZWJD
b3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+Kik7CiAKLSAgICB2b2lkIHNjaGVk
dWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpOwotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElP
Tl9GUkFNRSkKLSAgICB2b2lkIGFuaW1hdGlvbkZyYW1lUmVhZHkoKTsKLSNlbmRpZgotCi0gICAg
dm9pZCByZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q+Kik7CisgICAgLy8gQ29tcG9zaXRpbmdDb29yZGluYXRvcgor
ICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JOb25GcmFtZUxheWVycygp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2hSZXF1aXJlZCgp
IE9WRVJSSURFIHsgc2NoZWR1bGVMYXllckZsdXNoKCk7IH07CisgICAgdmlydHVhbCB2b2lkIHBh
aW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNv
bW1pdENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZShXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
U3RhdGUmKSBPVkVSUklERTsKIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICB2b2lkIHBy
ZXBhcmVDdXN0b21GaWx0ZXJQcm94aWVzSWZOZWVkZWQoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyU3RhdGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUN1c3RvbUZpbHRlclBy
b3hpZXNJZk5lZWRlZChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpIE9W
RVJSSURFOwogCiAgICAgLy8gV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5Q2xpZW50CiAgICAg
dm9pZCByZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkoV2ViQ3VzdG9tRmlsdGVyUHJvZ3Jh
bVByb3h5Kik7CkBAIC0xNjQsNDEgKzExNSwyMCBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlzY29u
bmVjdEN1c3RvbUZpbHRlclByb2dyYW1zKCk7CiAjZW5kaWYKIAotICAgIE93blB0cjxXZWJDb3Jl
OjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKLQotICAgIC8vIFRoZSBsYXllciB3aGljaCBj
b250YWlucyBhbGwgbm9uLWNvbXBvc2l0ZWQgY29udGVudC4KLSAgICBPd25QdHI8V2ViQ29yZTo6
R3JhcGhpY3NMYXllcj4gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyOwotCiAgICAgLy8gVGhl
IHBhZ2Ugb3ZlcmxheSBsYXllci4gV2lsbCBiZSBudWxsIGlmIHRoZXJlJ3Mgbm8gcGFnZSBvdmVy
bGF5LgogICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3BhZ2VPdmVybGF5TGF5
ZXI7CiAKLSAgICBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUgbV9zdGF0ZTsKLQot
ICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+IExheWVyTWFwOwotICAgIExheWVyTWFwIG1fcmVn
aXN0ZXJlZExheWVyczsKLSAgICB0eXBlZGVmIEhhc2hNYXA8V2ViQ29yZTo6Q29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRCwgUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiA+
IEltYWdlQmFja2luZ01hcDsKLSAgICBJbWFnZUJhY2tpbmdNYXAgbV9pbWFnZUJhY2tpbmdzOwot
ICAgIFZlY3RvcjxPd25QdHI8V2ViQ29yZTo6VXBkYXRlQXRsYXM+ID4gbV91cGRhdGVBdGxhc2Vz
OwotCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogICAgIEhhc2hTZXQ8V2ViQ3VzdG9tRmlsdGVy
UHJvZ3JhbVByb3h5Kj4gbV9jdXN0b21GaWx0ZXJQcm9ncmFtczsKICNlbmRpZgogCiAgICAgYm9v
bCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaDsKICAgICBib29sIG1faXNWYWxpZDsK
LSAgICAvLyBXZSBkb24ndCBzZW5kIHRoZSBtZXNzYWdlcyByZWxhdGVkIHRvIHJlbGVhc2luZyBy
ZXNvdXJjZXMgdG8gVUkgUHJvY2VzcyBkdXJpbmcgcHVyZ2luZywgYmVjYXVzZSBVSSBQcm9jZXNz
IGFscmVhZHkgaGFkIHJlbW92ZWQgYWxsIHJlc291cmNlcy4KLSAgICBib29sIG1faXNQdXJnaW5n
OwotICAgIGJvb2wgbV9pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzOwotCi0gICAgYm9vbCBtX3dhaXRp
bmdGb3JVSVByb2Nlc3M7CiAgICAgYm9vbCBtX2lzU3VzcGVuZGVkOwotICAgIFdlYkNvcmU6OkZs
b2F0UmVjdCBtX3Zpc2libGVDb250ZW50c1JlY3Q7CiAKICAgICBMYXllclRyZWVDb250ZXh0IG1f
bGF5ZXJUcmVlQ29udGV4dDsKLSAgICBib29sIG1fc2hvdWxkU3luY0ZyYW1lOwotICAgIGJvb2wg
bV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXI7CisKICAgICBXZWJDb3JlOjpUaW1l
cjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IG1fbGF5ZXJGbHVzaFRpbWVyOwotICAgIFdlYkNv
cmU6OlRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4gbV9yZWxlYXNlSW5hY3RpdmVBdGxh
c2VzVGltZXI7CiAgICAgYm9vbCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZDsKICAgICB1
aW50NjRfdCBtX2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJRDsKICAgICBib29sIG1fYW5pbWF0
aW9uc0xvY2tlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9MYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5
ZXJUcmVlSG9zdC5oCmluZGV4IDM5ZmVmODI0ZmEyOTRhNWI1ZmU2YTEzYTE1Njc1OTM1ZmU3MzVh
YzkuLjFjNTZhZTU1NTVkM2FhMDY3MzljOWM3NmQ3ZWZjNmY2MTE4YmFjNWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaApAQCAtODUs
OSArODUsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRDb2xvcihj
b25zdCBXZWJDb3JlOjpDb2xvciYpIHsgfQogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQotICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYsIGZsb2F0IC8qIHNjYWxlICovLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
JikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpIHsgfQotICAgIHZpcnR1
YWwgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbios
IENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJikgPSAwOwogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193083</attachid>
            <date>2013-03-14 01:01:32 -0700</date>
            <delta_ts>2013-06-05 04:41:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104360-20130314165728.patch</filename>
            <type>text/plain</type>
            <size>67639</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1Nzg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjc2ZTU2MzRkZWRmODdh
ZDgyZGMwOWExYWQ2Y2VmMzk0ZTE3MjkyZC4uNThiMDIzNzMzMzFjZjIwMjFhNDk5MjMwNWIyNGQw
OTg5MmUwYTBlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDEzLTAzLTEzICBHd2Fu
ZyBZb29uIEh3YW5nICA8cnl1bWllbEBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGlu
YXRlZCBHcmFwaGljczogU2VwYXJhdGUgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGludG8gQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0IGFuZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQzNjAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0IGhhcyB0b28gbWFueSByZXNwb25zaWJpbGl0aWVzLiBJdAorICAgICAgICBp
bXBsZW1lbnRzIExheWVyVHJlZUhvc3QsIEdyYXBoaWNzTGF5ZXJDbGllbnQsCisgICAgICAgIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNs
aWVudCwKKyAgICAgICAgVXBkYXRlQXRsYXM6OkNsaWVudCwgR3JhcGhpY3NMYXllckZhY3Rvcnkg
YW5kCisgICAgICAgIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudC4KKworICAgICAg
ICBUaGlzIHJlZmFjdG9yaW5nIHJlZHVjZXMgdGhlIHJlc3BvbnNpYmlsaXRpZXMgb2YgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0LgorCisgICAgICAgIEJ5IGNyZWF0aW5nIGEgbmV3IGNsYXNzIGNh
bGxlZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yLCB3aGljaCB0YWtlcyB0aGUKKyAgICAgICAgcmVz
cG9uc2liaWxpdHkgb2YgbWFuYWdpbmcgY29tcG9zaXRpbmcgcmVzb3VyY2VzIGluIFdlYlByb2Nl
c3MsCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCB0YWtlcyBhIHBhcnQgZm9yIHNj
aGVkdWxpbmcgYW5kIElQQyBzcGVjaWZpYyBwYXJ0cy4KKworICAgICAgICBObyBuZXcgdGVzdHMs
IGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp+Q29tcG9z
aXRpbmdDb29yZGluYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
aW5nQ29vcmRpbmF0b3I6OnNpemVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRpbmdDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNsZWFyUGVuZGluZ1N0YXRlQ2hhbmdlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVSb290TGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c3luY0xheWVy
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRl
SW1hZ2VCYWNraW5nSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29y
ZGluYXRvcjo6Y3JlYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
aW5nQ29vcmRpbmF0b3I6OnVwZGF0ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJlbW92ZUltYWdlQmFja2luZyk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpmbHVzaFBlbmRpbmdJ
bWFnZUJhY2tpbmdDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRpbmdDb29yZGluYXRvcjo6bm90aWZ5Rmx1c2hSZXF1aXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZUdyYXBoaWNzTGF5ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6ZGV2aWNlU2NhbGVGYWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cGFnZVNjYWxlRmFjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZVVwZGF0
ZUF0bGFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJlbW92
ZVVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6
OnZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29y
ZGluYXRvcjo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6ZGV0YWNoTGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0QmFja2dyb3VuZENvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNvbW1pdFNjcm9s
bE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZW5k
ZXJOZXh0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6
cHVyZ2VCYWNraW5nU3RvcmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OmJlZ2luQ29udGVudFVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1Rp
bWVyRmlyZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChDb21wb3NpdGluZ0Nvb3JkaW5hdG9yKToKKyAgICAgICAgKENsaWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjbGVhclJvb3RMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyb290TGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6bm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjppc1dhaXRpbmdG
b3JSZW5kZXJlcik6CisKIDIwMTMtMDMtMTAgIEd3YW5nIFlvb24gSHdhbmcgIDxyeXVtaWVsQGNv
bXBhbnkxMDAubmV0PgogCiAgICAgICAgIENvb3JkaW5hdGVkIEdyYXBoaWNzOiBSZW5hbWUgY2xp
ZW50IGNsYXNzZXMgZm9yIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nIGFuZCBVcGRhdGVBdGxhcy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBiMWI1ZmQ4YjIyMWY3NmRmMjQ5MzZjODhiZmI4OGEzYjQyOGQ3NGVkLi5k
MmMwZGUwZWM1NzQyNjdiYzNmNjM2OGMxMWU1NmE5ODc0MjA1YjgxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNTcgQEAKKzIwMTMtMDMtMTMgIEd3YW5nIFlvb24gSHdhbmcgIDxyeXVtaWVsQGNvbXBh
bnkxMDAubmV0PgorCisgICAgICAgIENvb3JkaW5hdGVkIEdyYXBoaWNzOiBTZXBhcmF0ZSBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3QgaW50byBDb29yZGluYXRlZExheWVyVHJlZUhvc3QgYW5kIENv
bXBvc2l0aW5nQ29vcmRpbmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwNDM2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoZSBDb29yZGluYXRlZExheWVyVHJlZUhvc3QgaGFzIHRvbyBtYW55IHJl
c3BvbnNpYmlsaXRpZXMuIEl0CisgICAgICAgIGltcGxlbWVudHMgTGF5ZXJUcmVlSG9zdCwgR3Jh
cGhpY3NMYXllckNsaWVudCwKKyAgICAgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50
LCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q2xpZW50LAorICAgICAgICBVcGRhdGVBdGxhczo6
Q2xpZW50LCBHcmFwaGljc0xheWVyRmFjdG9yeSBhbmQKKyAgICAgICAgV2ViQ3VzdG9tRmlsdGVy
UHJvZ3JhbVByb3h5Q2xpZW50LgorCisgICAgICAgIFRoaXMgcmVmYWN0b3JpbmcgcmVkdWNlcyB0
aGUgcmVzcG9uc2liaWxpdGllcyBvZiBDb29yZGluYXRlZExheWVyVHJlZUhvc3QuCisKKyAgICAg
ICAgQnkgY3JlYXRpbmcgYSBuZXcgY2xhc3MgY2FsbGVkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3Is
IHdoaWNoIHRha2VzIHRoZQorICAgICAgICByZXNwb25zaWJpbGl0eSBvZiBtYW5hZ2luZyBjb21w
b3NpdGluZyByZXNvdXJjZXMgaW4gV2ViUHJvY2VzcywKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0IHRha2VzIGEgcGFydCBmb3Igc2NoZWR1bGluZyBhbmQgSVBDIHNwZWNpZmljIHBh
cnRzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6fkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJLaXQ6
OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KToKKyAg
ICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRSb290Q29tcG9zaXRp
bmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6aW52
YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0
Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5
SW5SZWN0KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpmb3Jj
ZVJlcGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNp
emVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnNldFZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdl
YktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjphbmltYXRpb25GcmFtZVJlYWR5KToKKyAg
ICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW5kZXJOZXh0RnJhbWUp
OgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnB1cmdlQmFja2lu
Z1N0b3Jlcyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y29t
bWl0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKToKKyAgICAgICAgKFdlYktpdDo6
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZsdXNoQ29tcG9z
aXRpbmdTdGF0ZVBlcmlwaGVyYWxMYXllcnMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OnBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKToKKyAgICAgICAgKFdl
YktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVQYWdlT3ZlcmxheUxheWVyKToK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwYWludENvbnRlbnRz
KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpjb21taXRDb29y
ZGluYXRlZEdyYXBoaWNzU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCk6CisgICAgICAgIChXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Z3JhcGhpY3NMYXllckZhY3RvcnkpOgorICAg
ICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlQW5pbWF0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRCYWNrZ3Jv
dW5kQ29sb3IpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OnJvb3RMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6bm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcik6CisgICAgICAgIChD
b29yZGluYXRlZExheWVyVHJlZUhvc3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9M
YXllclRyZWVIb3N0Lmg6CisgICAgICAgIChMYXllclRyZWVIb3N0KToKKwogMjAxMy0wMy0xMCAg
R3dhbmcgWW9vbiBId2FuZyAgPHJ5dW1pZWxAY29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAgQ29v
cmRpbmF0ZWQgR3JhcGhpY3M6IFJlbmFtZSBjbGllbnQgY2xhc3NlcyBmb3IgQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmcgYW5kIFVwZGF0ZUF0bGFzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA5NmM5
NDNkODNiYmQ1MmU4OGFmY2UzN2FhMTJjMDMyMjY4ZjAyNjZjLi5mNzgyMmE1ODU5NGUxMjZjYjNl
ODdiZDk0Y2M4MjU0NTZhOTcwMWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjAwMiw2ICsy
MDAyLDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU3BvdExpZ2h0U291cmNlLmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Rhcmdl
dC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDNhNzk5NWVmNWY2ZDhlZDAy
YTk1NzdiZTUzNzcyNWY3YzRkZDg0YzguLjlmMDU4ZDNiOGM5OTUzMmMzYmYyZDY1MWZkNWE1Yzcy
MDJjY2YyMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtNDEzMSw2ICs0MTMxLDcgQEAgdXNlPygzRF9HUkFQ
SElDUykgewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdM
LmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0uaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9BcmVhQWxsb2NhdG9yLmggXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmggXAogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRDdXN0
b21GaWx0ZXJPcGVyYXRpb24uaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9Db29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW0uaCBcCkBAIC00MTU3LDYg
KzQxNTgsNyBAQCB1c2U/KDNEX0dSQVBISUNTKSB7CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmNwcCBcCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmNwcCBcCisgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5h
dG9yLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9D
b29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBcCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNz
U2NlbmUuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nv
b3JkaW5hdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZTMzY2IzMjRmNjY2Yzc3ZmUxZTJmNmM4MTJkOTBm
ZjVjZTE0N2ZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCkBAIC0w
LDAgKzEsNDA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBDb21w
YW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiQ29t
cG9zaXRpbmdDb29yZGluYXRvci5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNp
bmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
CitQYXNzT3duUHRyPENvbXBvc2l0aW5nQ29vcmRpbmF0b3I+IENvbXBvc2l0aW5nQ29vcmRpbmF0
b3I6OmNyZWF0ZShQYWdlKiBwYWdlLCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpDbGllbnQqIGNs
aWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENvbXBvc2l0aW5nQ29vcmRpbmF0b3Io
cGFnZSwgY2xpZW50KSk7Cit9CisKK0NvbXBvc2l0aW5nQ29vcmRpbmF0b3I6On5Db21wb3NpdGlu
Z0Nvb3JkaW5hdG9yKCkKK3sKKyAgICBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKKworICAgIExheWVy
TWFwOjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7CisgICAgZm9yIChM
YXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQorICAgICAgICBpdC0+dmFsdWUtPnNldENvb3JkaW5hdG9yKDApOworfQorCitD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yKFBhZ2UqIHBhZ2Us
IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudCogY2xpZW50KQorICAgIDogbV9wYWdlKHBh
Z2UpCisgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX2lzUHVyZ2luZyhmYWxzZSkKKyAg
ICAsIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlcyhmYWxzZSkKKyAgICAsIG1faXNXYWl0aW5nRm9y
UmVuZGVyZXIodHJ1ZSkKKyAgICAsIG1fc2hvdWxkU3luY0ZyYW1lKGZhbHNlKQorICAgICwgbV9y
ZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIodGhpcywgJkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6
OnJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKQoreworICAgIG1fcGFnZS0+c2V0dGlu
Z3MoKS0+c2V0U2Nyb2xsaW5nQ29vcmRpbmF0b3JFbmFibGVkKHRydWUpOworICAgIG1fcGFnZS0+
c2V0dGluZ3MoKS0+c2V0QXBwbHlEZXZpY2VTY2FsZUZhY3RvckluQ29tcG9zaXRvcih0cnVlKTsK
K30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzaXplRGlkQ2hhbmdlKGNvbnN0IElu
dFNpemUmIG5ld1NpemUpCit7CisgICAgaWYgKG1fcm9vdExheWVyLT5zaXplKCkgPT0gbmV3U2l6
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yb290TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7
CisKKyAgICAvLyBJZiB0aGUgbmV3U2l6ZSBleHBvc2VzIG5ldyBhcmVhcyBvZiB0aGUgbm9uLWNv
bXBvc2l0ZWQgY29udGVudCBhIHNldE5lZWRzRGlzcGxheSBpcyBuZWVkZWQKKyAgICAvLyBmb3Ig
dGhvc2UgbmV3bHkgZXhwb3NlZCBhcmVhcy4KKyAgICBGbG9hdFNpemUgb2xkU2l6ZSA9IG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRMYXllci0+c2l6ZSgpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKKworICAgIGlmIChuZXdTaXplLndpZHRoKCkgPiBv
bGRTaXplLndpZHRoKCkpIHsKKyAgICAgICAgZmxvYXQgaGVpZ2h0ID0gc3RkOjptaW4oc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG5ld1NpemUuaGVpZ2h0KCkpLCBvbGRTaXplLmhlaWdodCgpKTsKKyAgICAg
ICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxv
YXRSZWN0KG9sZFNpemUud2lkdGgoKSwgMCwgbmV3U2l6ZS53aWR0aCgpIC0gb2xkU2l6ZS53aWR0
aCgpLCBoZWlnaHQpKTsKKyAgICB9CisKKyAgICBpZiAobmV3U2l6ZS5oZWlnaHQoKSA+IG9sZFNp
emUuaGVpZ2h0KCkpCisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdCgwLCBvbGRTaXplLmhlaWdodCgpLCBuZXdTaXplLndp
ZHRoKCksIG5ld1NpemUuaGVpZ2h0KCkgLSBvbGRTaXplLmhlaWdodCgpKSk7Cit9CisKK2Jvb2wg
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKK3sKKyAg
ICBpZiAobV9pc1dhaXRpbmdGb3JSZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IHByb3RlY3RvcihtX2lzRmx1c2hpbmdMYXllckNoYW5n
ZXMsIHRydWUpOworCisgICAgbV9yb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRo
aXNMYXllck9ubHkoKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPmZsdXNoQ29t
cG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBtX2NsaWVudC0+Zmx1c2hDb21w
b3NpdGluZ1N0YXRlUGVyaXBoZXJhbExheWVycygpOworCisgICAgYm9vbCBkaWRTeW5jID0gbV9w
YWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdT
dWJmcmFtZXMoKTsKKworICAgIGZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKTsKKwor
ICAgIGlmIChtX3Nob3VsZFN5bmNGcmFtZSkgeworICAgICAgICBkaWRTeW5jID0gdHJ1ZTsKKwor
ICAgICAgICBtX3N0YXRlLmNvbnRlbnRzU2l6ZSA9IHJvdW5kZWRJbnRTaXplKG1fbm9uQ29tcG9z
aXRlZENvbnRlbnRMYXllci0+c2l6ZSgpKTsKKyAgICAgICAgbV9zdGF0ZS5jb3ZlcmVkUmVjdCA9
IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5n
ZXQoKSktPmNvdmVyUmVjdCgpOworICAgICAgICBtX3N0YXRlLnNjcm9sbFBvc2l0aW9uID0gbV92
aXNpYmxlQ29udGVudHNSZWN0LmxvY2F0aW9uKCk7CisKKyAgICAgICAgbV9jbGllbnQtPmNvbW1p
dENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZShtX3N0YXRlKTsKKworICAgICAgICBjbGVhclBlbmRp
bmdTdGF0ZUNoYW5nZXMoKTsKKyAgICAgICAgbV9pc1dhaXRpbmdGb3JSZW5kZXJlciA9IHRydWU7
CisgICAgICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJu
IGRpZFN5bmM7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y2xlYXJQZW5kaW5n
U3RhdGVDaGFuZ2VzKCkKK3sKKyAgICBtX3N0YXRlLmxheWVyc1RvQ3JlYXRlLmNsZWFyKCk7Cisg
ICAgbV9zdGF0ZS5sYXllcnNUb1VwZGF0ZS5jbGVhcigpOworICAgIG1fc3RhdGUubGF5ZXJzVG9S
ZW1vdmUuY2xlYXIoKTsKKworICAgIG1fc3RhdGUuaW1hZ2VzVG9DcmVhdGUuY2xlYXIoKTsKKyAg
ICBtX3N0YXRlLmltYWdlc1RvUmVtb3ZlLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5pbWFnZXNUb1Vw
ZGF0ZS5jbGVhcigpOworICAgIG1fc3RhdGUuaW1hZ2VzVG9DbGVhci5jbGVhcigpOworCisgICAg
bV9zdGF0ZS51cGRhdGVBdGxhc2VzVG9DcmVhdGUuY2xlYXIoKTsKKyAgICBtX3N0YXRlLnVwZGF0
ZUF0bGFzZXNUb1JlbW92ZS5jbGVhcigpOworCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAg
IG1fc3RhdGUuY3VzdG9tRmlsdGVyc1RvQ3JlYXRlLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5jdXN0
b21GaWx0ZXJzVG9SZW1vdmUuY2xlYXIoKTsKKyNlbmRpZgorfQorCit2b2lkIENvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OmNyZWF0ZVJvb3RMYXllcihjb25zdCBJbnRTaXplJiBzaXplKQoreworICAg
IEFTU0VSVCghbV9yb290TGF5ZXIpOworICAgIC8vIENyZWF0ZSBhIHJvb3QgbGF5ZXIuCisgICAg
bV9yb290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcywgdGhpcyk7CisjaWZuZGVm
IE5ERUJVRworICAgIG1fcm9vdExheWVyLT5zZXROYW1lKCJDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
IHJvb3QgbGF5ZXIiKTsKKyNlbmRpZgorICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQo
ZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKHNpemUpOworCisgICAgbV9ub25Db21w
b3NpdGVkQ29udGVudExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMsIHRoaXMpOwor
I2lmbmRlZiBOREVCVUcKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5hbWUo
IkNvbXBvc2l0aW5nQ29vcmRpbmF0b3Igbm9uLWNvbXBvc2l0ZWQgY29udGVudCIpOworI2VuZGlm
CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7
CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKHNpemUpOworCisgICAg
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaG93RGVidWdCb3JkZXIobV9wYWdlLT5z
ZXR0aW5ncygpLT5zaG93RGVidWdCb3JkZXJzKCkpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci0+c2V0U2hvd1JlcGFpbnRDb3VudGVyKG1fcGFnZS0+c2V0dGluZ3MoKS0+c2hvd1Jl
cGFpbnRDb3VudGVyKCkpOworCisgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fbm9uQ29tcG9z
aXRlZENvbnRlbnRMYXllci5nZXQoKSk7CisKKyAgICBtX3N0YXRlLnJvb3RDb21wb3NpdGluZ0xh
eWVyID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5pZCgp
OworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOjpzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9
IHRydWU7CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgbV9jbGllbnQtPnByZXBhcmVD
dXN0b21GaWx0ZXJQcm94aWVzSWZOZWVkZWQoc3RhdGUpOworI2VuZGlmCisKKyAgICBtX3N0YXRl
LmxheWVyc1RvVXBkYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihpZCwgc3RhdGUpKTsKK30KKwor
UGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gQ29tcG9zaXRpbmdDb29yZGluYXRv
cjo6Y3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoSW1hZ2UqIGltYWdlKQoreworICAgIENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCA9IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpn
ZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKGltYWdlKTsKKyAgICBJbWFnZUJhY2tpbmdNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7CisgICAgUmVmUHRy
PENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBpbWFnZUJhY2tpbmc7CisgICAgaWYgKGl0ID09IG1f
aW1hZ2VCYWNraW5ncy5lbmQoKSkgeworICAgICAgICBpbWFnZUJhY2tpbmcgPSBDb29yZGluYXRl
ZEltYWdlQmFja2luZzo6Y3JlYXRlKHRoaXMsIGltYWdlKTsKKyAgICAgICAgbV9pbWFnZUJhY2tp
bmdzLmFkZChpbWFnZUlELCBpbWFnZUJhY2tpbmcpOworICAgIH0gZWxzZQorICAgICAgICBpbWFn
ZUJhY2tpbmcgPSBpdC0+dmFsdWU7CisKKyAgICByZXR1cm4gaW1hZ2VCYWNraW5nOworfQorCit2
b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAgbV9zdGF0ZS5pbWFnZXNUb0NyZWF0ZS5h
cHBlbmQoaW1hZ2VJRCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6dXBkYXRl
SW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwgUGFzc1JlZlB0
cjxDb29yZGluYXRlZFN1cmZhY2U+IGNvb3JkaW5hdGVkU3VyZmFjZSkKK3sKKyAgICBtX3N0YXRl
LmltYWdlc1RvVXBkYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihpbWFnZUlELCBjb29yZGluYXRl
ZFN1cmZhY2UpKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjbGVhckltYWdl
QmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAg
ICBtX3N0YXRlLmltYWdlc1RvQ2xlYXIuYXBwZW5kKGltYWdlSUQpOworfQorCit2b2lkIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEIGltYWdlSUQpCit7CisgICAgaWYgKG1faXNQdXJnaW5nKQorICAgICAgICByZXR1cm47
CisKKyAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKKyAgICBt
X2ltYWdlQmFja2luZ3MucmVtb3ZlKGltYWdlSUQpOworCisgICAgbV9zdGF0ZS5pbWFnZXNUb1Jl
bW92ZS5hcHBlbmQoaW1hZ2VJRCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6
Zmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpCit7CisgICAgSW1hZ2VCYWNraW5nTWFw
OjppdGVyYXRvciBlbmQgPSBtX2ltYWdlQmFja2luZ3MuZW5kKCk7CisgICAgZm9yIChJbWFnZUJh
Y2tpbmdNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2ltYWdlQmFja2luZ3MuYmVnaW4oKTsgaXRlciAh
PSBlbmQ7ICsraXRlcikKKyAgICAgICAgaXRlci0+dmFsdWUtPnVwZGF0ZSgpOworfQorCit2b2lk
IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3Jh
cGhpY3NMYXllciosIGRvdWJsZSAvKiB0aW1lICovKQoreworfQorCit2b2lkIENvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6Om5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopCit7
CisgICAgbV9jbGllbnQtPnNjaGVkdWxlTGF5ZXJGbHVzaFJlcXVpcmVkKCk7Cit9CisKKwordm9p
ZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5
ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBHcmFw
aGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCit7CisgICAg
bV9jbGllbnQtPnBhaW50Q29udGVudHMoZ3JhcGhpY3NMYXllciwgZ3JhcGhpY3NDb250ZXh0LCBj
bGlwUmVjdCk7Cit9CisKK1Bhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gQ29tcG9zaXRpbmdDb29y
ZGluYXRvcjo6Y3JlYXRlR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQp
Cit7CisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBsYXllciA9IG5ldyBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIoY2xpZW50KTsKKyAgICBsYXllci0+c2V0Q29vcmRpbmF0b3IodGhpcyk7
CisgICAgbV9yZWdpc3RlcmVkTGF5ZXJzLmFkZChsYXllci0+aWQoKSwgbGF5ZXIpOworICAgIG1f
c3RhdGUubGF5ZXJzVG9DcmVhdGUuYXBwZW5kKGxheWVyLT5pZCgpKTsKKyAgICBsYXllci0+c2V0
TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1lbnQoKTsKKyAgICBtX2NsaWVudC0+c2NoZWR1bGVMYXll
ckZsdXNoUmVxdWlyZWQoKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobGF5ZXIpOworfQorCitmbG9h
dCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKK30KKworZmxvYXQgQ29tcG9z
aXRpbmdDb29yZGluYXRvcjo6cGFnZVNjYWxlRmFjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wYWdlLT5wYWdlU2NhbGVGYWN0b3IoKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPENvb3Jk
aW5hdGVkU3VyZmFjZT4gY29vcmRpbmF0ZWRTdXJmYWNlKQoreworICAgIG1fc3RhdGUudXBkYXRl
QXRsYXNlc1RvQ3JlYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihhdGxhc0lELCBjb29yZGluYXRl
ZFN1cmZhY2UpKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZW1vdmVVcGRh
dGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKQoreworICAgIGlmIChtX2lzUHVyZ2luZykKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fc3RhdGUudXBkYXRlQXRsYXNlc1RvUmVtb3ZlLmFwcGVuZChhdGxh
c0lEKTsKK30KKworRmxvYXRSZWN0IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnZpc2libGVDb250
ZW50c1JlY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX3Zpc2libGVDb250ZW50c1JlY3Q7Cit9
CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3Ip
Cit7CisgICAgLy8gQSB6ZXJvIHRyYWplY3RvcnlWZWN0b3IgaW5kaWNhdGVzIHRoYXQgdGlsZXMg
YWxsIGFyb3VuZCB0aGUgdmlld3BvcnQgYXJlIHJlcXVlc3RlZC4KKyAgICB0b0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcihtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpLT5zZXRWaXNp
YmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKHRyYWplY3RvcnlWZWN0b3IpOworCisgICAg
Ym9vbCBjb250ZW50c1JlY3REaWRDaGFuZ2UgPSByZWN0ICE9IG1fdmlzaWJsZUNvbnRlbnRzUmVj
dDsKKyAgICBpZiAoY29udGVudHNSZWN0RGlkQ2hhbmdlKSB7CisgICAgICAgIG1fdmlzaWJsZUNv
bnRlbnRzUmVjdCA9IHJlY3Q7CisKKyAgICAgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1f
cmVnaXN0ZXJlZExheWVycy5lbmQoKTsKKyAgICAgICAgZm9yIChMYXllck1hcDo6aXRlcmF0b3Ig
aXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAg
ICAgICAgaXQtPnZhbHVlLT5zZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOworICAgIH0K
K30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXZpY2VPclBhZ2VTY2FsZUZhY3Rv
ckNoYW5nZWQoKQoreworICAgIG1fcm9vdExheWVyLT5kZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNo
YW5nZWQoKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPmRldmljZU9yUGFnZVNj
YWxlRmFjdG9yQ2hhbmdlZCgpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRl
dGFjaExheWVyKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgaWYgKG1f
aXNQdXJnaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3JlZ2lzdGVyZWRMYXllcnMucmVt
b3ZlKGxheWVyLT5pZCgpKTsKKworICAgIHNpemVfdCBpbmRleCA9IG1fc3RhdGUubGF5ZXJzVG9D
cmVhdGUuZmluZChsYXllci0+aWQoKSk7CisgICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKSB7Cisg
ICAgICAgIG1fc3RhdGUubGF5ZXJzVG9DcmVhdGUucmVtb3ZlKGluZGV4KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIG1fc3RhdGUubGF5ZXJzVG9SZW1vdmUuYXBwZW5kKGxheWVyLT5p
ZCgpKTsKKyAgICBtX2NsaWVudC0+c2NoZWR1bGVMYXllckZsdXNoUmVxdWlyZWQoKTsKK30KKwor
dm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2Vi
Q29yZTo6Q29sb3ImIGNvbG9yKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAg
ICBtX3N0YXRlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yOworfQorCit2b2lkIENvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OmNvbW1pdFNjcm9sbE9mZnNldCh1aW50MzJfdCBsYXllcklELCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBvZmZzZXQpCit7CisgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGkgPSBt
X3JlZ2lzdGVyZWRMYXllcnMuZmluZChsYXllcklEKTsKKyAgICBpZiAoaSA9PSBtX3JlZ2lzdGVy
ZWRMYXllcnMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGktPnZhbHVlLT5jb21taXRT
Y3JvbGxPZmZzZXQob2Zmc2V0KTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpy
ZW5kZXJOZXh0RnJhbWUoKQoreworICAgIG1faXNXYWl0aW5nRm9yUmVuZGVyZXIgPSBmYWxzZTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV91cGRhdGVBdGxhc2VzLnNpemUoKTsgKytp
KQorICAgICAgICBtX3VwZGF0ZUF0bGFzZXNbaV0tPmRpZFN3YXBCdWZmZXJzKCk7Cit9CisKK3Zv
aWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKK3sKKyAgICBU
ZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gcHVyZ2luZ1RvZ2dsZShtX2lzUHVyZ2luZywgdHJ1ZSk7CisK
KyAgICBMYXllck1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOwor
ICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnZhbHVlLT5wdXJnZUJhY2tpbmdTdG9y
ZXMoKTsKKworICAgIG1faW1hZ2VCYWNraW5ncy5jbGVhcigpOworICAgIG1fdXBkYXRlQXRsYXNl
cy5jbGVhcigpOworfQorCitQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gQ29tcG9zaXRpbmdD
b29yZGluYXRvcjo6YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IEludFNpemUmIHNpemUsIENvb3Jk
aW5hdGVkU3VyZmFjZTo6RmxhZ3MgZmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBJbnRQb2ludCYg
b2Zmc2V0KQoreworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dDsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV91cGRhdGVBdGxhc2VzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIFVwZGF0ZUF0bGFzKiBhdGxhcyA9IG1fdXBkYXRlQXRsYXNlc1tpXS5nZXQo
KTsKKyAgICAgICAgaWYgKGF0bGFzLT5zdXBwb3J0c0FscGhhKCkgPT0gKGZsYWdzICYgQ29vcmRp
bmF0ZWRTdXJmYWNlOjpTdXBwb3J0c0FscGhhKSkgeworICAgICAgICAgICAgLy8gVGhpcyB3aWxs
IHJldHVybiBudWxsIGlmIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIgc3BhY2UuCisgICAg
ICAgICAgICBncmFwaGljc0NvbnRleHQgPSBhdGxhcy0+YmVnaW5QYWludGluZ09uQXZhaWxhYmxl
QnVmZmVyKGF0bGFzSUQsIHNpemUsIG9mZnNldCk7CisgICAgICAgICAgICBpZiAoZ3JhcGhpY3ND
b250ZXh0KQorICAgICAgICAgICAgICAgIHJldHVybiBncmFwaGljc0NvbnRleHQucmVsZWFzZSgp
OworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IGludCBTY3JhdGNoQnVmZmVy
RGltZW5zaW9uID0gMTAyNDsgLy8gU2hvdWxkIGJlIGEgcG93ZXIgb2YgdHdvLgorICAgIG1fdXBk
YXRlQXRsYXNlcy5hcHBlbmQoYWRvcHRQdHIobmV3IFVwZGF0ZUF0bGFzKHRoaXMsIFNjcmF0Y2hC
dWZmZXJEaW1lbnNpb24sIGZsYWdzKSkpOworICAgIHNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRs
YXNlcygpOworICAgIHJldHVybiBtX3VwZGF0ZUF0bGFzZXMubGFzdCgpLT5iZWdpblBhaW50aW5n
T25BdmFpbGFibGVCdWZmZXIoYXRsYXNJRCwgc2l6ZSwgb2Zmc2V0KTsKK30KKworY29uc3QgZG91
YmxlIFJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckludGVydmFsID0gMC41OworCit2b2lkIENv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpCit7
CisgICAgaWYgKCFtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5pc0FjdGl2ZSgpKQorICAg
ICAgICBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5zdGFydFJlcGVhdGluZyhSZWxlYXNl
SW5hY3RpdmVBdGxhc2VzVGltZXJJbnRlcnZhbCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29y
ZGluYXRvcjo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQoVGltZXI8Q29tcG9zaXRp
bmdDb29yZGluYXRvcj4qKQoreworICAgIC8vIFdlIGFsd2F5cyB3YW50IHRvIGtlZXAgb25lIGF0
bGFzIGZvciBub24tY29tcG9zaXRlZCBjb250ZW50LgorICAgIE93blB0cjxVcGRhdGVBdGxhcz4g
YXRsYXNUb0tlZXBBbnl3YXk7CisgICAgYm9vbCBmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9z
aXRlZENvbnRlbnQgPSBmYWxzZTsKKyAgICBmb3IgKGludCBpID0gbV91cGRhdGVBdGxhc2VzLnNp
emUoKSAtIDE7ICBpID49IDA7IC0taSkgeworICAgICAgICBVcGRhdGVBdGxhcyogYXRsYXMgPSBt
X3VwZGF0ZUF0bGFzZXNbaV0uZ2V0KCk7CisgICAgICAgIGlmICghYXRsYXMtPmlzSW5Vc2UoKSkK
KyAgICAgICAgICAgIGF0bGFzLT5hZGRUaW1lSW5hY3RpdmUoUmVsZWFzZUluYWN0aXZlQXRsYXNl
c1RpbWVySW50ZXJ2YWwpOworICAgICAgICBib29sIHVzYWJsZUZvck5vbkNvbXBvc2l0ZWRDb250
ZW50ID0gIWF0bGFzLT5zdXBwb3J0c0FscGhhKCk7CisgICAgICAgIGlmIChhdGxhcy0+aXNJbmFj
dGl2ZSgpKSB7CisgICAgICAgICAgICBpZiAoIWZvdW5kQWN0aXZlQXRsYXNGb3JOb25Db21wb3Np
dGVkQ29udGVudCAmJiAhYXRsYXNUb0tlZXBBbnl3YXkgJiYgdXNhYmxlRm9yTm9uQ29tcG9zaXRl
ZENvbnRlbnQpCisgICAgICAgICAgICAgICAgYXRsYXNUb0tlZXBBbnl3YXkgPSBtX3VwZGF0ZUF0
bGFzZXNbaV0ucmVsZWFzZSgpOworICAgICAgICAgICAgbV91cGRhdGVBdGxhc2VzLnJlbW92ZShp
KTsKKyAgICAgICAgfSBlbHNlIGlmICh1c2FibGVGb3JOb25Db21wb3NpdGVkQ29udGVudCkKKyAg
ICAgICAgICAgIGZvdW5kQWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVudCA9IHRydWU7
CisgICAgfQorCisgICAgaWYgKCFmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRl
bnQgJiYgYXRsYXNUb0tlZXBBbnl3YXkpCisgICAgICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBlbmQo
YXRsYXNUb0tlZXBBbnl3YXkucmVsZWFzZSgpKTsKKworICAgIGlmIChtX3VwZGF0ZUF0bGFzZXMu
c2l6ZSgpIDw9IDEpCisgICAgICAgIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyLnN0b3Ao
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nv
b3JkaW5hdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzRlMmRmNTFkZDRiMjhlZDRmMjk1NmZhZTc4MDM1OTY0
M2Q4ZjY4ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmgKQEAgLTAsMCAr
MSwxNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAx
MDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb21wb3Np
dGluZ0Nvb3JkaW5hdG9yX2gKKyNkZWZpbmUgQ29tcG9zaXRpbmdDb29yZGluYXRvcl9oCisKKyNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaCIKKyNpbmNs
dWRlICJDb29yZGluYXRlZEltYWdlQmFja2luZy5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXll
ckZhY3RvcnkuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNp
bmNsdWRlICJVcGRhdGVBdGxhcy5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworI2lmIEVO
QUJMRShDU1NfU0hBREVSUykKKyNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCisjZW5kaWYK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQYWdlOworY2xhc3MgR3JhcGhpY3NMYXll
cjsKK2NsYXNzIENvb3JkaW5hdGVkU3VyZmFjZTsKKworY2xhc3MgQ29tcG9zaXRpbmdDb29yZGlu
YXRvciA6IHB1YmxpYyBHcmFwaGljc0xheWVyQ2xpZW50CisgICAgLCBwdWJsaWMgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyQ2xpZW50CisgICAgLCBwdWJsaWMgQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmc6OkNsaWVudAorICAgICwgcHVibGljIFVwZGF0ZUF0bGFzOjpDbGllbnQKKyAgICAsIHB1Ymxp
YyBHcmFwaGljc0xheWVyRmFjdG9yeSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tcG9z
aXRpbmdDb29yZGluYXRvcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IGNsYXNzIENsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZvaWQgZmx1c2hD
b21wb3NpdGluZ1N0YXRlUGVyaXBoZXJhbExheWVycygpID0gMDsKKyAgICAgICAgdmlydHVhbCB2
b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaFJlcXVpcmVkKCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZv
aWQgY29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0
ZSYpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgR3JhcGhp
Y3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSA9IDA7
CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUN1
c3RvbUZpbHRlclByb3hpZXNJZk5lZWRlZChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYp
ID0gMDsKKyNlbmRpZgorICAgIH07CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yPiBjcmVhdGUoUGFnZSosIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVu
dCopOworICAgIHZpcnR1YWwgfkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IoKTsKKworICAgIHZvaWQg
c2l6ZURpZENoYW5nZShjb25zdCBJbnRTaXplJiBuZXdTaXplKTsKKyAgICB2b2lkIGRldmljZU9y
UGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOworICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNv
bnN0IENvbG9yJik7CisKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7
CisgICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKKyAgICB2b2lkIGNvbW1pdFNjcm9sbE9m
ZnNldCh1aW50MzJfdCBsYXllcklELCBjb25zdCBJbnRTaXplJiBvZmZzZXQpOworCisgICAgdm9p
ZCBjcmVhdGVSb290TGF5ZXIoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgY2xlYXJSb290TGF5
ZXIoKSB7IG1fcm9vdExheWVyID0gbnVsbHB0cjsgfQorICAgIEdyYXBoaWNzTGF5ZXIqIHJvb3RM
YXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CisgICAgR3JhcGhpY3NM
YXllciogbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci5nZXQoKTsgfQorCisgICAgYm9vbCBmbHVzaFBlbmRpbmdMYXll
ckNoYW5nZXMoKTsKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmIHN0YXRlKCkgeyByZXR1
cm4gbV9zdGF0ZTsgfQorICAgIGJvb2wgaXNXYWl0aW5nRm9yUmVuZGVyZXIoKSBjb25zdCB7IHJl
dHVybiBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyOyB9CisKK3ByaXZhdGU6CisgICAgQ29tcG9zaXRp
bmdDb29yZGluYXRvcihQYWdlKiwgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q2xpZW50Kik7CisK
KyAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1h
dGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVy
KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgR3JhcGhp
Y3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBj
b25zdCBJbnRSZWN0JiBjbGlwUmVjdCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBmbG9hdCBkZXZp
Y2VTY2FsZUZhY3RvcigpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgZmxvYXQgcGFnZVNj
YWxlRmFjdG9yKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICAvLyBDb29yZGluYXRlZEltYWdlQmFj
a2luZzo6Q2xpZW50CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSW1h
Z2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0
ZWRTdXJmYWNlPikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNsZWFySW1hZ2VCYWNraW5n
Q29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVS
UklERTsKKworICAgIC8vIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudAorICAgIHZpcnR1
YWwgYm9vbCBpc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
bV9pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzOyB9CisgICAgdmlydHVhbCBGbG9hdFJlY3QgdmlzaWJs
ZUNvbnRlbnRzUmVjdCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxD
b29yZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoSW1hZ2Uq
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPEdyYXBoaWNzQ29u
dGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IEludFNpemUmLCBDb29yZGluYXRlZFN1cmZh
Y2U6OkZsYWdzLCB1aW50MzJfdCYgYXRsYXNJRCwgSW50UG9pbnQmKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklELCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpIE9WRVJSSURFOworCisgICAgLy8gVXBkYXRlQXRsYXM6OkNs
aWVudAorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lE
LCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKSBPVkVSUklERTsKKworICAg
IC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5CisgICAgdmlydHVhbCBQYXNzT3duUHRyPEdyYXBoaWNz
TGF5ZXI+IGNyZWF0ZUdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCopIE9WRVJSSURF
OworCisgICAgdm9pZCBmbHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7CisgICAgdm9p
ZCBjbGVhclBlbmRpbmdTdGF0ZUNoYW5nZXMoKTsKKworICAgIHZvaWQgc2NoZWR1bGVSZWxlYXNl
SW5hY3RpdmVBdGxhc2VzKCk7CisKKyAgICB2b2lkIHJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1l
ckZpcmVkKFRpbWVyPENvbXBvc2l0aW5nQ29vcmRpbmF0b3I+Kik7CisKKyAgICBQYWdlKiBtX3Bh
Z2U7CisgICAgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q2xpZW50KiBtX2NsaWVudDsKKworICAg
IE93blB0cjxHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKKworICAgIC8vIFRoZSBsYXllciB3
aGljaCBjb250YWlucyBhbGwgbm9uLWNvbXBvc2l0ZWQgY29udGVudC4KKyAgICBPd25QdHI8R3Jh
cGhpY3NMYXllcj4gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyOworCisgICAgQ29vcmRpbmF0
ZWRHcmFwaGljc1N0YXRlIG1fc3RhdGU7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8Q29vcmRpbmF0
ZWRMYXllcklELCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiBMYXllck1hcDsKKyAgICBMYXll
ck1hcCBtX3JlZ2lzdGVyZWRMYXllcnM7CisgICAgdHlwZWRlZiBIYXNoTWFwPENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gPiBJbWFnZUJh
Y2tpbmdNYXA7CisgICAgSW1hZ2VCYWNraW5nTWFwIG1faW1hZ2VCYWNraW5nczsKKyAgICBWZWN0
b3I8T3duUHRyPFVwZGF0ZUF0bGFzPiA+IG1fdXBkYXRlQXRsYXNlczsKKworICAgIC8vIFdlIGRv
bid0IHNlbmQgdGhlIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gcmVsZWFzaW5nIHJlc291cmNlcyB0byBy
ZW5kZXJlciBkdXJpbmcgcHVyZ2luZywgYmVjYXVzZSByZW5kZXJlciBhbHJlYWR5IGhhZCByZW1v
dmVkIGFsbCByZXNvdXJjZXMuCisgICAgYm9vbCBtX2lzUHVyZ2luZzsKKyAgICBib29sIG1faXNG
bHVzaGluZ0xheWVyQ2hhbmdlczsKKworICAgIGJvb2wgbV9pc1dhaXRpbmdGb3JSZW5kZXJlcjsK
KyAgICBGbG9hdFJlY3QgbV92aXNpYmxlQ29udGVudHNSZWN0OworCisgICAgYm9vbCBtX3Nob3Vs
ZFN5bmNGcmFtZTsKKyAgICBib29sIG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVy
OworICAgIFRpbWVyPENvbXBvc2l0aW5nQ29vcmRpbmF0b3I+IG1fcmVsZWFzZUluYWN0aXZlQXRs
YXNlc1RpbWVyOworfTsKKworfQorCisjZW5kaWYKKworI2VuZGlmIC8vIENvbXBvc2l0aW5nQ29v
cmRpbmF0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggYzYzOTQ1M2Q0MzdhMWRjZmVmM2VhMDFjMDg3ZjQx
NzI3MjdlZTEyNy4uYTljMjllMDY3NDg5MzJjNDk5OWIxODliZGQ3YTcxNWM2NjMwYjA2OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJl
ZUhvc3QuY3BwCkBAIC0zOCwxOCArMzgsNiBAQAogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENv
ZGVycy5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNz
YWdlcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zy
YW1lVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9QYWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNraW5nLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9S
ZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TdXJmYWNl
VXBkYXRlSW5mby5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CiAKICNpZiBFTkFCTEUoQ1NT
X1NIQURFUlMpCiAjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5oIgpAQCAt
NzAsNTMgKzU4LDIyIEBAIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6fkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdCgpCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogICAgIGRpc2Nvbm5lY3RDdXN0
b21GaWx0ZXJQcm9ncmFtcygpOwogI2VuZGlmCi0gICAgcHVyZ2VCYWNraW5nU3RvcmVzKCk7Ci0K
LSAgICBMYXllck1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOwot
ICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnZhbHVlLT5zZXRDb29yZGluYXRvcigw
KTsKIH0KIAogQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3QoV2ViUGFnZSogd2ViUGFnZSkKICAgICA6IExheWVyVHJlZUhvc3Qod2ViUGFnZSkKICAgICAs
IG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKGZhbHNlKQogICAgICwgbV9pc1ZhbGlk
KHRydWUpCi0gICAgLCBtX2lzUHVyZ2luZyhmYWxzZSkKLSAgICAsIG1faXNGbHVzaGluZ0xheWVy
Q2hhbmdlcyhmYWxzZSkKLSAgICAsIG1fd2FpdGluZ0ZvclVJUHJvY2Vzcyh0cnVlKQogICAgICwg
bV9pc1N1c3BlbmRlZChmYWxzZSkKLSAgICAsIG1fc2hvdWxkU3luY0ZyYW1lKGZhbHNlKQotICAg
ICwgbV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXIoZmFsc2UpCiAgICAgLCBtX2xh
eWVyRmx1c2hUaW1lcih0aGlzLCAmQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpsYXllckZsdXNo
VGltZXJGaXJlZCkKLSAgICAsIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyKHRoaXMsICZD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVk
KQogICAgICwgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQodHJ1ZSkKICAgICAsIG1fZm9y
Y2VSZXBhaW50QXN5bmNDYWxsYmFja0lEKDApCiAgICAgLCBtX2FuaW1hdGlvbnNMb2NrZWQoZmFs
c2UpCiB7Ci0gICAgbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5zZXRTY3JvbGxp
bmdDb29yZGluYXRvckVuYWJsZWQodHJ1ZSk7Ci0gICAgbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5z
ZXR0aW5ncygpLT5zZXRBcHBseURldmljZVNjYWxlRmFjdG9ySW5Db21wb3NpdG9yKHRydWUpOwot
Ci0gICAgLy8gQ3JlYXRlIGEgcm9vdCBsYXllci4KLSAgICBtX3Jvb3RMYXllciA9IEdyYXBoaWNz
TGF5ZXI6OmNyZWF0ZSh0aGlzLCB0aGlzKTsKLSAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIq
IGNvb3JkaW5hdGVkUm9vdExheWVyID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290
TGF5ZXIuZ2V0KCkpOwotI2lmbmRlZiBOREVCVUcKLSAgICBtX3Jvb3RMYXllci0+c2V0TmFtZSgi
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IHJvb3QgbGF5ZXIiKTsKLSNlbmRpZgotICAgIG1fcm9v
dExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOwotICAgIG1fcm9vdExheWVyLT5zZXRTaXpl
KG1fd2ViUGFnZS0+c2l6ZSgpKTsKLSAgICBtX2xheWVyVHJlZUNvbnRleHQuY29vcmRpbmF0ZWRM
YXllcklEID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoY29vcmRpbmF0ZWRSb290TGF5ZXIp
LT5pZCgpOworICAgIG1fY29vcmRpbmF0b3IgPSBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVh
dGUod2ViUGFnZS0+Y29yZVBhZ2UoKSwgdGhpcyk7CiAKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250
ZW50TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcywgdGhpcyk7Ci0jaWZuZGVmIE5E
RUJVRwotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmFtZSgiQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0IG5vbi1jb21wb3NpdGVkIGNvbnRlbnQiKTsKLSNlbmRpZgotICAgIG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOwotICAgIG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7Ci0K
LSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNob3dEZWJ1Z0JvcmRlcihtX3dl
YlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCktPnNob3dEZWJ1Z0JvcmRlcnMoKSk7Ci0gICAg
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaG93UmVwYWludENvdW50ZXIobV93ZWJQ
YWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5zaG93UmVwYWludENvdW50ZXIoKSk7Ci0KLSAg
ICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdldCgp
KTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5jcmVhdGVSb290TGF5ZXIobV93ZWJQYWdlLT5zaXplKCkp
OworICAgIG1fbGF5ZXJUcmVlQ29udGV4dC5jb29yZGluYXRlZExheWVySUQgPSB0b0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcihyb290TGF5ZXIoKSktPmlkKCk7CiAKICAgICBDb29yZGluYXRlZFN1
cmZhY2U6OnNldEZhY3RvcnkoY3JlYXRlQ29vcmRpbmF0ZWRTdXJmYWNlKTsKIApAQCAtMTYyLDEy
ICsxMTksMTIgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFNob3VsZE5vdGlm
eUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbAogCiB2b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciogZ3JhcGhpY3NMYXllcikKIHsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnJl
bW92ZUFsbENoaWxkcmVuKCk7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRD
b250ZW50c09wYXF1ZShtX3dlYlBhZ2UtPmRyYXdzQmFja2dyb3VuZCgpICYmICFtX3dlYlBhZ2Ut
PmRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkpOworICAgIG5vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXIoKS0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKyAgICBub25Db21wb3NpdGVkQ29udGVudExh
eWVyKCktPnNldENvbnRlbnRzT3BhcXVlKG1fd2ViUGFnZS0+ZHJhd3NCYWNrZ3JvdW5kKCkgJiYg
IW1fd2ViUGFnZS0+ZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoKSk7CiAKICAgICAvLyBBZGQg
dGhlIGFjY2VsZXJhdGVkIGxheWVyIHRyZWUgaGllcmFyY2h5LgogICAgIGlmIChncmFwaGljc0xh
eWVyKQotICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPmFkZENoaWxkKGdyYXBo
aWNzTGF5ZXIpOworICAgICAgICBub25Db21wb3NpdGVkQ29udGVudExheWVyKCktPmFkZENoaWxk
KGdyYXBoaWNzTGF5ZXIpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6aW52
YWxpZGF0ZSgpCkBAIC0xNzUsMTMgKzEzMiwxNCBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6aW52YWxpZGF0ZSgpCiAgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKIAogICAg
IEFTU0VSVChtX2lzVmFsaWQpOwotICAgIG1fcm9vdExheWVyID0gbnVsbHB0cjsKKyAgICBtX2Nv
b3JkaW5hdG9yLT5jbGVhclJvb3RMYXllcigpOwogICAgIG1faXNWYWxpZCA9IGZhbHNlOwogfQog
CiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRz
TmVlZERpc3BsYXkoKQogewotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVl
ZHNEaXNwbGF5KCk7CisgICAgbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcigpLT5zZXROZWVkc0Rp
c3BsYXkoKTsKKwogICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCiAgICAgICAgIG1fcGFnZU92
ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAKQEAgLTE5MCw3ICsxNDgsOCBAQCB2b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERp
c3BsYXkoKQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0Tm9uQ29tcG9zaXRl
ZENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkK
IHsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVj
dChyZWN0KTsKKyAgICBub25Db21wb3NpdGVkQ29udGVudExheWVyKCktPnNldE5lZWRzRGlzcGxh
eUluUmVjdChyZWN0KTsKKwogICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCiAgICAgICAgIG1f
cGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwogCkBAIC0yMTQs
NyArMTczLDcgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZvcmNlUmVwYWludCgp
CiAgICAgLy8gV2UgbmVlZCB0byBzY2hlZHVsZSBhbm90aGVyIGZsdXNoLCBvdGhlcndpc2UgdGhl
IGZvcmNlZCBwYWludCBtaWdodCBjYW5jZWwgYSBsYXRlciBleHBlY3RlZCBmbHVzaC4KICAgICAv
LyBUaGlzIGlzIGFsaWduZWQgd2l0aCBMYXllclRyZWVIb3N0Q0EuCiAgICAgc2NoZWR1bGVMYXll
ckZsdXNoKCk7Ci0gICAgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7CisgICAgbV9jb29yZGlu
YXRvci0+Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7CiB9CiAKIGJvb2wgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnRBc3luYyh1aW50NjRfdCBjYWxsYmFja0lEKQpAQCAt
MjI4LDIzICsxODcsNyBAQCBib29sIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBh
aW50QXN5bmModWludDY0X3QgY2FsbGJhY2tJRCkKIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OnNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSkKIHsK
LSAgICBpZiAobV9yb290TGF5ZXItPnNpemUoKSA9PSBuZXdTaXplKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKLQotICAgIC8vIElmIHRoZSBu
ZXdTaXplIGV4cG9zZXMgbmV3IGFyZWFzIG9mIHRoZSBub24tY29tcG9zaXRlZCBjb250ZW50IGEg
c2V0TmVlZHNEaXNwbGF5IGlzIG5lZWRlZAotICAgIC8vIGZvciB0aG9zZSBuZXdseSBleHBvc2Vk
IGFyZWFzLgotICAgIEZsb2F0U2l6ZSBvbGRTaXplID0gbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLT5zaXplKCk7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG5l
d1NpemUpOwotCi0gICAgaWYgKG5ld1NpemUud2lkdGgoKSA+IG9sZFNpemUud2lkdGgoKSkgewot
ICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGQ6Om1pbihzdGF0aWNfY2FzdDxmbG9hdD4obmV3U2l6
ZS5oZWlnaHQoKSksIG9sZFNpemUuaGVpZ2h0KCkpOwotICAgICAgICBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3Qob2xkU2l6ZS53aWR0
aCgpLCAwLCBuZXdTaXplLndpZHRoKCkgLSBvbGRTaXplLndpZHRoKCksIGhlaWdodCkpOwotICAg
IH0KLQotICAgIGlmIChuZXdTaXplLmhlaWdodCgpID4gb2xkU2l6ZS5oZWlnaHQoKSkKLSAgICAg
ICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxv
YXRSZWN0KDAsIG9sZFNpemUuaGVpZ2h0KCksIG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWln
aHQoKSAtIG9sZFNpemUuaGVpZ2h0KCkpKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5zaXplRGlkQ2hh
bmdlKG5ld1NpemUpOwogCiAgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKICAgICAgICAgbV9w
YWdlT3ZlcmxheUxheWVyLT5zZXRTaXplKG5ld1NpemUpOwpAQCAtMjc4LDg2ICsyMjEsMzMgQEAg
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFBhZ2VPdmVybGF5T3BhY2l0eShmbG9h
dCB2YWx1ZSkKICAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKIH0KIAotYm9vbCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpCit2b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCiB7Ci0gICAgaWYgKG1f
d2FpdGluZ0ZvclVJUHJvY2VzcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVGVtcG9y
YXJ5Q2hhbmdlPGJvb2w+IHByb3RlY3RvcihtX2lzRmx1c2hpbmdMYXllckNoYW5nZXMsIHRydWUp
OwotCi0gICAgaW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQoKTsKLQotICAg
IG1fcm9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0g
ICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KCk7Ci0gICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKLSAgICAgICAgbV9w
YWdlT3ZlcmxheUxheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7
Ci0KLSAgICBib29sIGRpZFN5bmMgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgp
LT52aWV3KCktPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOwotCi0g
ICAgZmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpOwotCi0gICAgaWYgKG1fc2hvdWxk
U3luY0ZyYW1lKSB7Ci0gICAgICAgIGRpZFN5bmMgPSB0cnVlOwotCi0gICAgICAgIG1fc3RhdGUu
Y29udGVudHNTaXplID0gcm91bmRlZEludFNpemUobV9ub25Db21wb3NpdGVkQ29udGVudExheWVy
LT5zaXplKCkpOwotICAgICAgICBtX3N0YXRlLmNvdmVyZWRSZWN0ID0gdG9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKS0+Y292ZXJSZWN0
KCk7Ci0gICAgICAgIG1fc3RhdGUuc2Nyb2xsUG9zaXRpb24gPSBtX3Zpc2libGVDb250ZW50c1Jl
Y3QubG9jYXRpb24oKTsKLQotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDb21taXRDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUo
bV9zdGF0ZSkpOwotCi0gICAgICAgIGNsZWFyUGVuZGluZ1N0YXRlQ2hhbmdlcygpOwotICAgICAg
ICBtX3dhaXRpbmdGb3JVSVByb2Nlc3MgPSB0cnVlOwotICAgICAgICBtX3Nob3VsZFN5bmNGcmFt
ZSA9IGZhbHNlOwotICAgIH0gZWxzZQotICAgICAgICB1bmxvY2tBbmltYXRpb25zKCk7Ci0KLSAg
ICBpZiAobV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQpIHsKLSAgICAgICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFjayhtX2ZvcmNlUmVwYWlu
dEFzeW5jQ2FsbGJhY2tJRCkpOwotICAgICAgICBtX2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJ
RCA9IDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRpZFN5bmM7CisgICAgbV9jb29yZGluYXRvci0+
c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChyZWN0LCB0cmFqZWN0b3J5VmVjdG9yKTsKKyAgICBzY2hl
ZHVsZUxheWVyRmx1c2goKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNs
ZWFyUGVuZGluZ1N0YXRlQ2hhbmdlcygpCisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZS
QU1FKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmFuaW1hdGlvbkZyYW1lUmVhZHko
KQogewotICAgIG1fc3RhdGUubGF5ZXJzVG9DcmVhdGUuY2xlYXIoKTsKLSAgICBtX3N0YXRlLmxh
eWVyc1RvVXBkYXRlLmNsZWFyKCk7Ci0gICAgbV9zdGF0ZS5sYXllcnNUb1JlbW92ZS5jbGVhcigp
OwotCi0gICAgbV9zdGF0ZS5pbWFnZXNUb0NyZWF0ZS5jbGVhcigpOwotICAgIG1fc3RhdGUuaW1h
Z2VzVG9SZW1vdmUuY2xlYXIoKTsKLSAgICBtX3N0YXRlLmltYWdlc1RvVXBkYXRlLmNsZWFyKCk7
Ci0gICAgbV9zdGF0ZS5pbWFnZXNUb0NsZWFyLmNsZWFyKCk7Ci0KLSAgICBtX3N0YXRlLnVwZGF0
ZUF0bGFzZXNUb0NyZWF0ZS5jbGVhcigpOwotICAgIG1fc3RhdGUudXBkYXRlQXRsYXNlc1RvUmVt
b3ZlLmNsZWFyKCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgbV9zdGF0ZS5jdXN0
b21GaWx0ZXJzVG9DcmVhdGUuY2xlYXIoKTsKLSAgICBtX3N0YXRlLmN1c3RvbUZpbHRlcnNUb1Jl
bW92ZS5jbGVhcigpOwotI2VuZGlmCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CiB9CisjZW5k
aWYKIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmluaXRpYWxpemVSb290Q29tcG9z
aXRpbmdMYXllcklmTmVlZGVkKCkKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW5k
ZXJOZXh0RnJhbWUoKQogewotICAgIGlmIChtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdM
YXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdGF0ZS5yb290Q29tcG9zaXRpbmdMYXll
ciA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+aWQoKTsK
LSAgICBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllciA9IHRydWU7Ci0gICAgbV9z
aG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fY29vcmRpbmF0b3ItPnJlbmRlck5leHRGcmFt
ZSgpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6c3luY0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKIHsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRy
dWU7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgcHJlcGFyZUN1c3RvbUZpbHRlclBy
b3hpZXNJZk5lZWRlZChzdGF0ZSk7Ci0jZW5kaWYKKyAgICBtX2Nvb3JkaW5hdG9yLT5wdXJnZUJh
Y2tpbmdTdG9yZXMoKTsKK30KIAotICAgIG1fc3RhdGUubGF5ZXJzVG9VcGRhdGUuYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKGlkLCBzdGF0ZSkpOwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OmNvbW1pdFNjcm9sbE9mZnNldCh1aW50MzJfdCBsYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBvZmZzZXQpCit7CisgICAgbV9jb29yZGluYXRvci0+Y29tbWl0U2Nyb2xsT2Zmc2V0KGxh
eWVySUQsIG9mZnNldCk7CiB9CiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCkBAIC00MDcsNyAr
Mjk3LDcgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNoZWNrQ3VzdG9tRmlsdGVy
UHJvZ3JhbVByb3hpZXMoY29uc3QgRmlsdGVyT3BlcmEKICAgICAgICAgaWYgKCFjdXN0b21GaWx0
ZXJQcm9ncmFtUHJveHktPmNsaWVudCgpKSB7CiAgICAgICAgICAgICBjdXN0b21GaWx0ZXJQcm9n
cmFtUHJveHktPnNldENsaWVudCh0aGlzKTsKICAgICAgICAgICAgIG1fY3VzdG9tRmlsdGVyUHJv
Z3JhbXMuYWRkKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS5nZXQoKSk7Ci0gICAgICAgICAgICBt
X3N0YXRlLmN1c3RvbUZpbHRlcnNUb0NyZWF0ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY3VzdG9t
RmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpLCBjdXN0b21PcGVyYXRpb24tPnZhbGlkYXRlZFByb2dy
YW0oKS0+dmFsaWRhdGVkUHJvZ3JhbUluZm8oKSkpOworICAgICAgICAgICAgbV9jb29yZGluYXRv
ci0+c3RhdGUoKS5jdXN0b21GaWx0ZXJzVG9DcmVhdGUuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGN1
c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+aWQoKSwgY3VzdG9tT3BlcmF0aW9uLT52YWxpZGF0ZWRQ
cm9ncmFtKCktPnZhbGlkYXRlZFByb2dyYW1JbmZvKCkpKTsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIC8vIElmIHRoZSBjbGllbnQgd2FzIG5vdCBkaXNjb25uZWN0ZWQgdGhlbiB0aGlz
IGNvb3JkaW5hdG9yIG11c3QgYmUgdGhlIGNsaWVudCBmb3IgaXQuCiAgICAgICAgICAgICBBU1NF
UlQoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5jbGllbnQoKSA9PSB0aGlzKTsKQEAgLTQyMCw3
ICszMTAsNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlQ3VzdG9tRmls
dGVyUHJvZ3JhbVByb3h5KFdlYkN1c3RvbUZpbHRlclBybwogICAgIC8vIEF0IHRoaXMgdGltZSB0
aGUgc2hhZGVyIGlzIG5vdCBuZWVkZWQgYW55bW9yZSwgc28gd2UgcmVtb3ZlIGl0IGZyb20gb3Vy
IHNldCBhbmQKICAgICAvLyBzZW5kIGEgbWVzc2FnZSB0byB0aGUgb3RoZXIgcHJvY2VzcyB0byBk
ZWxldGUgaXQuCiAgICAgbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5yZW1vdmUoY3VzdG9tRmlsdGVy
UHJvZ3JhbVByb3h5KTsKLSAgICBtX3N0YXRlLmN1c3RvbUZpbHRlcnNUb1JlbW92ZS5hcHBlbmQo
Y3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5zdGF0
ZSgpLmN1c3RvbUZpbHRlcnNUb1JlbW92ZS5hcHBlbmQoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5
LT5pZCgpKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpc2Nvbm5lY3RD
dXN0b21GaWx0ZXJQcm9ncmFtcygpCkBAIC00MzIsMjEgKzMyMiwxMCBAQCB2b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6ZGlzY29ubmVjdEN1c3RvbUZpbHRlclByb2dyYW1zKCkKIH0KICNl
bmRpZiAvLyBFTkFCTEUoQ1NTX1NIQURFUlMpCiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpkZXRhY2hMYXllcihDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGxheWVyKQordm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZVBlcmlwaGVyYWxM
YXllcnMoKQogewotICAgIGlmIChtX2lzUHVyZ2luZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9yZWdpc3RlcmVkTGF5ZXJzLnJlbW92ZShsYXllci0+aWQoKSk7Ci0KLSAgICBzaXplX3QgaW5k
ZXggPSBtX3N0YXRlLmxheWVyc1RvQ3JlYXRlLmZpbmQobGF5ZXItPmlkKCkpOwotICAgIGlmIChp
bmRleCAhPSBub3RGb3VuZCkgewotICAgICAgICBtX3N0YXRlLmxheWVyc1RvQ3JlYXRlLnJlbW92
ZShpbmRleCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3N0YXRlLmxheWVyc1Rv
UmVtb3ZlLmFwcGVuZChsYXllci0+aWQoKSk7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cisg
ICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5m
bHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiB9CiAKIHZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0Ojpsb2NrQW5pbWF0aW9ucygpCkBAIC00NjYsNyArMzQ1LDcgQEAg
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnVubG9ja0FuaW1hdGlvbnMoKQogCiB2b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQog
ewotICAgIGlmIChtX2lzU3VzcGVuZGVkIHx8IG1fd2FpdGluZ0ZvclVJUHJvY2VzcykKKyAgICBp
ZiAoIW1faXNWYWxpZCB8fCBtX2lzU3VzcGVuZGVkIHx8IG1fY29vcmRpbmF0b3ItPmlzV2FpdGlu
Z0ZvclJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlIGxvY2sgdGhlIGFu
aW1hdGlvbnMgd2hpbGUgcGVyZm9ybWluZyBsYXlvdXQsIHRvIGF2b2lkIGZsaWNrZXJzIGNhdXNl
ZCBieSBhbmltYXRpb25zIGNvbnRpbnVpbmcgaW4gdGhlIFVJIHByb2Nlc3Mgd2hpbGUKQEAgLTQ3
NiwxNSArMzU1LDIxIEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwZXJmb3JtU2No
ZWR1bGVkTGF5ZXJGbHVzaCgpCiAKICAgICAvLyBXZSBjYW4gdW5sb2NrIHRoZSBhbmltYXRpb25z
IGJlZm9yZSBmbHVzaGluZyBpZiB0aGVyZSBhcmUgbm8gdmlzaWJsZSBjaGFuZ2VzLCBmb3IgZXhh
bXBsZSBpZiB0aGVyZSBhcmUgY29udGVudCB1cGRhdGVzCiAgICAgLy8gaW4gYSBsYXllciB3aXRo
IG9wYWNpdHkgMC4KLSAgICBib29sIGNhblVubG9ja0JlZm9yZUZsdXNoID0gIW1faXNWYWxpZCB8
fCAhdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5oYXNQZW5k
aW5nVmlzaWJsZUNoYW5nZXMoKTsKKyAgICBib29sIGNhblVubG9ja0JlZm9yZUZsdXNoID0gIW1f
aXNWYWxpZCB8fCAhdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIocm9vdExheWVyKCkpLT5oYXNQ
ZW5kaW5nVmlzaWJsZUNoYW5nZXMoKTsKICAgICBpZiAoY2FuVW5sb2NrQmVmb3JlRmx1c2gpCiAg
ICAgICAgIHVubG9ja0FuaW1hdGlvbnMoKTsKIAotICAgIGlmICghbV9pc1ZhbGlkKQotICAgICAg
ICByZXR1cm47CisgICAgYm9vbCBkaWRTeW5jID0gbV9jb29yZGluYXRvci0+Zmx1c2hQZW5kaW5n
TGF5ZXJDaGFuZ2VzKCk7CiAKLSAgICBpZiAoZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkpCi0g
ICAgICAgIGRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7CisgICAgaWYgKG1fZm9yY2VS
ZXBhaW50QXN5bmNDYWxsYmFja0lEKSB7CisgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpWb2lkQ2FsbGJhY2sobV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNr
SUQpKTsKKyAgICAgICAgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQgPSAwOworICAgIH0K
KworICAgIGlmIChtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCAmJiBkaWRTeW5jKSB7
CisgICAgICAgIHN0YXRpY19jYXN0PERyYXdpbmdBcmVhSW1wbCo+KG1fd2ViUGFnZS0+ZHJhd2lu
Z0FyZWEoKSktPmxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCk7CisgICAgICAgIG1fbm90aWZ5QWZ0
ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gZmFsc2U7CisgICAgfQogfQogCiB2b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6c3luY0Rpc3BsYXlTdGF0ZSgpCkBAIC00OTcsMTQgKzM4Miw2IEBA
IHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jRGlzcGxheVN0YXRlKCkKICAgICBt
X3dlYlBhZ2UtPmxheW91dElmTmVlZGVkKCk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpkaWRQZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpCi17Ci0gICAgaWYgKG1fbm90
aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PERyYXdp
bmdBcmVhSW1wbCo+KG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKSktPmxheWVySG9zdERpZEZsdXNo
TGF5ZXJzKCk7Ci0gICAgICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gZmFs
c2U7Ci0gICAgfQotfQotCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bGF5ZXJGbHVz
aFRpbWVyRmlyZWQoVGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiopCiB7CiAgICAgcGVy
Zm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKQEAgLTUxNCwxNSArMzkxLDE1IEBAIHZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCkKIHsKICAgICBB
U1NFUlQoIW1fcGFnZU92ZXJsYXlMYXllcik7CiAKLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBH
cmFwaGljc0xheWVyOjpjcmVhdGUodGhpcywgdGhpcyk7CisgICAgbV9wYWdlT3ZlcmxheUxheWVy
ID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksIG1fY29vcmRp
bmF0b3IuZ2V0KCkpOwogI2lmbmRlZiBOREVCVUcKLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNl
dE5hbWUoIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBwYWdlIG92ZXJsYXkgY29udGVudCIpOwor
ICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmFtZSgiQ29tcG9zaXRpbmdDb29yZGluYXRvciBw
YWdlIG92ZXJsYXkgY29udGVudCIpOwogI2VuZGlmCiAKICAgICBtX3BhZ2VPdmVybGF5TGF5ZXIt
PnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUo
bV93ZWJQYWdlLT5zaXplKCkpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZShyb290
TGF5ZXIoKS0+c2l6ZSgpKTsKIAotICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX3BhZ2VPdmVy
bGF5TGF5ZXIuZ2V0KCkpOworICAgIHJvb3RMYXllcigpLT5hZGRDaGlsZChtX3BhZ2VPdmVybGF5
TGF5ZXIuZ2V0KCkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGVzdHJv
eVBhZ2VPdmVybGF5TGF5ZXIoKQpAQCAtNTMyLDY1ICs0MDksOSBAQCB2b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKQogICAgIG1fcGFnZU92ZXJs
YXlMYXllciA9IG51bGxwdHI7CiB9CiAKLVBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmc+IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQo
SW1hZ2UqIGltYWdlKQotewotICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCA9
IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpnZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKGlt
YWdlKTsKLSAgICBJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdz
LmZpbmQoaW1hZ2VJRCk7Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBpbWFn
ZUJhY2tpbmc7Ci0gICAgaWYgKGl0ID09IG1faW1hZ2VCYWNraW5ncy5lbmQoKSkgewotICAgICAg
ICBpbWFnZUJhY2tpbmcgPSBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y3JlYXRlKHRoaXMsIGlt
YWdlKTsKLSAgICAgICAgbV9pbWFnZUJhY2tpbmdzLmFkZChpbWFnZUlELCBpbWFnZUJhY2tpbmcp
OwotICAgIH0gZWxzZQotICAgICAgICBpbWFnZUJhY2tpbmcgPSBpdC0+dmFsdWU7Ci0KLSAgICBy
ZXR1cm4gaW1hZ2VCYWNraW5nOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
Y3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsK
LSAgICBtX3N0YXRlLmltYWdlc1RvQ3JlYXRlLmFwcGVuZChpbWFnZUlEKTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEIGltYWdlSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBjb29y
ZGluYXRlZFN1cmZhY2UpCi17Ci0gICAgbV9zdGF0ZS5pbWFnZXNUb1VwZGF0ZS5hcHBlbmQoc3Rk
OjptYWtlX3BhaXIoaW1hZ2VJRCwgY29vcmRpbmF0ZWRTdXJmYWNlKSk7Ci19Ci0KLXZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBtX3N0YXRlLmltYWdlc1RvQ2xlYXIu
YXBwZW5kKGltYWdlSUQpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVt
b3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAg
ICBpZiAobV9pc1B1cmdpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2ltYWdl
QmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkpOwotICAgIG1faW1hZ2VCYWNraW5ncy5yZW1vdmUo
aW1hZ2VJRCk7Ci0KLSAgICBtX3N0YXRlLmltYWdlc1RvUmVtb3ZlLmFwcGVuZChpbWFnZUlEKTsK
LX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0ltYWdlQmFj
a2luZ0NoYW5nZXMoKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnBhaW50Q29udGVu
dHMoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcGhpY3NDb250ZXh0JiBn
cmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQogewotICAgIEltYWdlQmFj
a2luZ01hcDo6aXRlcmF0b3IgZW5kID0gbV9pbWFnZUJhY2tpbmdzLmVuZCgpOwotICAgIGZvciAo
SW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdGVyID0gbV9pbWFnZUJhY2tpbmdzLmJlZ2luKCk7
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGl0ZXItPnZhbHVlLT51cGRhdGUoKTsKLX0K
LQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQo
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSAvKiB0aW1lICovKQotewotfQot
Ci12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bm90aWZ5Rmx1c2hSZXF1aXJlZChjb25z
dCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKLXsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsK
LX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnBhaW50Q29udGVudHMoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0JiBncmFwaGljc0NvbnRleHQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1Bo
YXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCkKLXsKLSAgICBpZiAoZ3JhcGhp
Y3NMYXllciA9PSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIpIHsKKyAgICBpZiAoZ3JhcGhp
Y3NMYXllciA9PSBub25Db21wb3NpdGVkQ29udGVudExheWVyKCkpIHsKICAgICAgICAgbV93ZWJQ
YWdlLT5kcmF3UmVjdChncmFwaGljc0NvbnRleHQsIGNsaXBSZWN0KTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTYwMywxNSArNDI0LDkgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OnBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGgKICAg
ICB9CiB9CiAKLVBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpjcmVhdGVHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKK3Zv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpjb21taXRDb29yZGluYXRlZEdyYXBoaWNzU3Rh
dGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbmV3IENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cihjbGllbnQpOwotICAgIGxheWVyLT5zZXRDb29yZGluYXRvcih0aGlzKTsKLSAgICBtX3JlZ2lz
dGVyZWRMYXllcnMuYWRkKGxheWVyLT5pZCgpLCBsYXllcik7Ci0gICAgbV9zdGF0ZS5sYXllcnNU
b0NyZWF0ZS5hcHBlbmQobGF5ZXItPmlkKCkpOwotICAgIGxheWVyLT5zZXROZWVkc1Zpc2libGVS
ZWN0QWRqdXN0bWVudCgpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgIHJldHVybiBh
ZG9wdFB0cihsYXllcik7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6Q29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlKHN0YXRl
KSk7CiB9CiAKIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmNyZWF0ZUNvb3JkaW5hdGVkU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplLCBD
b29yZGluYXRlZFN1cmZhY2U6OkZsYWdzIGZsYWdzKQpAQCAtNjE5LDcyICs0MzQsMjEgQEAgUGFz
c1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3Jl
YXRlQ29vcmRpbmF0ZWRTdXJmYWMKICAgICByZXR1cm4gV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpj
cmVhdGUoc2l6ZSwgZmxhZ3MpOwogfQogCi1mbG9hdCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV93ZWJQYWdlLT5kZXZp
Y2VTY2FsZUZhY3RvcigpOwotfQotCi1mbG9hdCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnBh
Z2VTY2FsZUZhY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS0+cGFnZVNjYWxl
RmFjdG9yKCk7Ci19Ci0KIGJvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENv
bXBvc2l0aW5nKCkKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQ
dHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBjb29yZGluYXRlZFN1cmZhY2UpCi17Ci0gICAgbV9zdGF0
ZS51cGRhdGVBdGxhc2VzVG9DcmVhdGUuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGF0bGFzSUQsIGNv
b3JkaW5hdGVkU3VyZmFjZSkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
cmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkKLXsKLSAgICBpZiAobV9pc1B1cmdp
bmcpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3N0YXRlLnVwZGF0ZUF0bGFzZXNUb1JlbW92ZS5h
cHBlbmQoYXRsYXNJRCk7Ci19Ci0KLVdlYkNvcmU6OkZsb2F0UmVjdCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdAotewotICAgIHJldHVybiBtX3Zp
c2libGVDb250ZW50c1JlY3Q7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpz
ZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRQ
b2ludCYgdHJhamVjdG9yeVZlY3RvcikKLXsKLSAgICAvLyBBIHplcm8gdHJhamVjdG9yeVZlY3Rv
ciBpbmRpY2F0ZXMgdGhhdCB0aWxlcyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9ydCBhcmUgcmVxdWVz
dGVkLgotICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci5nZXQoKSktPnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IodHJh
amVjdG9yeVZlY3Rvcik7Ci0KLSAgICBib29sIGNvbnRlbnRzUmVjdERpZENoYW5nZSA9IHJlY3Qg
IT0gbV92aXNpYmxlQ29udGVudHNSZWN0OwotICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFuZ2Up
IHsKLSAgICAgICAgbV92aXNpYmxlQ29udGVudHNSZWN0ID0gcmVjdDsKLQotICAgICAgICBMYXll
ck1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOwotICAgICAgICBm
b3IgKExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0TmVlZHNWaXNpYmxl
UmVjdEFkanVzdG1lbnQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHNjaGVkdWxlTGF5ZXJG
bHVzaCgpOwotICAgIGlmIChtX3dlYlBhZ2UtPnVzZUZpeGVkTGF5b3V0KCkpIHsKLSAgICAgICAg
Ly8gUm91bmQgdGhlIHJlY3QgaW5zdGVhZCBvZiBlbmNsb3NpbmcgaXQgdG8gbWFrZSBzdXJlIHRo
YXQgaXRzIHNpemUgc3RheXMKLSAgICAgICAgLy8gdGhlIHNhbWUgd2hpbGUgcGFubmluZy4gVGhp
cyBjYW4gaGF2ZSBuYXN0eSBlZmZlY3RzIG9uIGxheW91dC4KLSAgICAgICAgbV93ZWJQYWdlLT5z
ZXRGaXhlZFZpc2libGVDb250ZW50UmVjdChyb3VuZGVkSW50UmVjdChyZWN0KSk7Ci0gICAgfQot
fQotCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0
b3JDaGFuZ2VkKCkKIHsKLSAgICBtX3Jvb3RMYXllci0+ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JD
aGFuZ2VkKCk7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5kZXZpY2VPclBhZ2VT
Y2FsZUZhY3RvckNoYW5nZWQoKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5kZXZpY2VPclBhZ2VTY2Fs
ZUZhY3RvckNoYW5nZWQoKTsKICAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQogICAgICAgICBt
X3BhZ2VPdmVybGF5TGF5ZXItPmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwogfQog
CiBHcmFwaGljc0xheWVyRmFjdG9yeSogQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpncmFwaGlj
c0xheWVyRmFjdG9yeSgpCiB7Ci0gICAgcmV0dXJuIHRoaXM7CisgICAgcmV0dXJuIG1fY29vcmRp
bmF0b3IuZ2V0KCk7CiB9CiAKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCkBA
IC02OTIsOTggKzQ1NiwxMiBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2NoZWR1
bGVBbmltYXRpb24oKQogewogICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OlJlcXVlc3RBbmltYXRpb25GcmFtZSgpKTsKIH0KLQotdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmFuaW1hdGlvbkZyYW1lUmVhZHkoKQotewotICAg
IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQogI2VuZGlmCiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpyZW5kZXJOZXh0RnJhbWUoKQotewotICAgIG1fd2FpdGluZ0ZvclVJUHJvY2Vz
cyA9IGZhbHNlOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fdXBkYXRl
QXRsYXNlc1tpXS0+ZGlkU3dhcEJ1ZmZlcnMoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnB1cmdlQmFja2luZ1N0b3JlcygpCi17Ci0gICAgVGVtcG9yYXJ5Q2hhbmdlPGJv
b2w+IHB1cmdpbmdUb2dnbGUobV9pc1B1cmdpbmcsIHRydWUpOwotCi0gICAgTGF5ZXJNYXA6Oml0
ZXJhdG9yIGVuZCA9IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKLSAgICBmb3IgKExheWVyTWFw
OjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgIGl0LT52YWx1ZS0+cHVyZ2VCYWNraW5nU3RvcmVzKCk7Ci0KLSAgICBtX2lt
YWdlQmFja2luZ3MuY2xlYXIoKTsKLSAgICBtX3VwZGF0ZUF0bGFzZXMuY2xlYXIoKTsKLX0KLQot
UGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6YmVn
aW5Db250ZW50VXBkYXRlKGNvbnN0IEludFNpemUmIHNpemUsIENvb3JkaW5hdGVkU3VyZmFjZTo6
RmxhZ3MgZmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBJbnRQb2ludCYgb2Zmc2V0KQotewotICAg
IE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dDsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV91cGRhdGVBdGxhc2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFVw
ZGF0ZUF0bGFzKiBhdGxhcyA9IG1fdXBkYXRlQXRsYXNlc1tpXS5nZXQoKTsKLSAgICAgICAgaWYg
KGF0bGFzLT5zdXBwb3J0c0FscGhhKCkgPT0gKGZsYWdzICYgQ29vcmRpbmF0ZWRTdXJmYWNlOjpT
dXBwb3J0c0FscGhhKSkgewotICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHJldHVybiBudWxsIGlm
IHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIgc3BhY2UuCi0gICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQgPSBhdGxhcy0+YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGF0bGFzSUQs
IHNpemUsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoZ3JhcGhpY3NDb250ZXh0KQotICAgICAg
ICAgICAgICAgIHJldHVybiBncmFwaGljc0NvbnRleHQucmVsZWFzZSgpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgc3RhdGljIGNvbnN0IGludCBTY3JhdGNoQnVmZmVyRGltZW5zaW9uID0gMTAy
NDsgLy8gU2hvdWxkIGJlIGEgcG93ZXIgb2YgdHdvLgotICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBl
bmQoYWRvcHRQdHIobmV3IFVwZGF0ZUF0bGFzKHRoaXMsIFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24s
IGZsYWdzKSkpOwotICAgIHNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpOwotICAgIHJl
dHVybiBtX3VwZGF0ZUF0bGFzZXMubGFzdCgpLT5iZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZm
ZXIoYXRsYXNJRCwgc2l6ZSwgb2Zmc2V0KTsKLX0KLQotY29uc3QgZG91YmxlIFJlbGVhc2VJbmFj
dGl2ZUF0bGFzZXNUaW1lckludGVydmFsID0gMC41OwotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6c2NoZWR1bGVSZWxlYXNlSW5hY3RpdmVBdGxhc2VzKCkKLXsKLSAgICBpZiAoIW1f
cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fcmVsZWFz
ZUluYWN0aXZlQXRsYXNlc1RpbWVyLnN0YXJ0UmVwZWF0aW5nKFJlbGVhc2VJbmFjdGl2ZUF0bGFz
ZXNUaW1lckludGVydmFsKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJl
bGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKFRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdD4qKQotewotICAgIC8vIFdlIGFsd2F5cyB3YW50IHRvIGtlZXAgb25lIGF0bGFzIGZvciBu
b24tY29tcG9zaXRlZCBjb250ZW50LgotICAgIE93blB0cjxVcGRhdGVBdGxhcz4gYXRsYXNUb0tl
ZXBBbnl3YXk7Ci0gICAgYm9vbCBmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRl
bnQgPSBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gbV91cGRhdGVBdGxhc2VzLnNpemUoKSAtIDE7
ICBpID49IDA7IC0taSkgewotICAgICAgICBVcGRhdGVBdGxhcyogYXRsYXMgPSBtX3VwZGF0ZUF0
bGFzZXNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICghYXRsYXMtPmlzSW5Vc2UoKSkKLSAgICAgICAg
ICAgIGF0bGFzLT5hZGRUaW1lSW5hY3RpdmUoUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50
ZXJ2YWwpOwotICAgICAgICBib29sIHVzYWJsZUZvck5vbkNvbXBvc2l0ZWRDb250ZW50ID0gIWF0
bGFzLT5zdXBwb3J0c0FscGhhKCk7Ci0gICAgICAgIGlmIChhdGxhcy0+aXNJbmFjdGl2ZSgpKSB7
Ci0gICAgICAgICAgICBpZiAoIWZvdW5kQWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVu
dCAmJiAhYXRsYXNUb0tlZXBBbnl3YXkgJiYgdXNhYmxlRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQp
Ci0gICAgICAgICAgICAgICAgYXRsYXNUb0tlZXBBbnl3YXkgPSBtX3VwZGF0ZUF0bGFzZXNbaV0u
cmVsZWFzZSgpOwotICAgICAgICAgICAgbV91cGRhdGVBdGxhc2VzLnJlbW92ZShpKTsKLSAgICAg
ICAgfSBlbHNlIGlmICh1c2FibGVGb3JOb25Db21wb3NpdGVkQ29udGVudCkKLSAgICAgICAgICAg
IGZvdW5kQWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVudCA9IHRydWU7Ci0gICAgfQot
Ci0gICAgaWYgKCFmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgJiYgYXRs
YXNUb0tlZXBBbnl3YXkpCi0gICAgICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBlbmQoYXRsYXNUb0tl
ZXBBbnl3YXkucmVsZWFzZSgpKTsKLQotICAgIGlmIChtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpIDw9
IDEpCi0gICAgICAgIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyLnN0b3AoKTsKLX0KLQog
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBX
ZWJDb3JlOjpDb2xvciYgY29sb3IpCiB7Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwot
ICAgIG1fc3RhdGUuYmFja2dyb3VuZENvbG9yID0gY29sb3I7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0Ojpjb21taXRTY3JvbGxPZmZzZXQodWludDMyX3QgbGF5ZXJJRCwgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgb2Zmc2V0KQotewotICAgIExheWVyTWFwOjppdGVyYXRvciBp
ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmZpbmQobGF5ZXJJRCk7Ci0gICAgaWYgKGkgPT0gbV9yZWdp
c3RlcmVkTGF5ZXJzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpLT52YWx1ZS0+Y29t
bWl0U2Nyb2xsT2Zmc2V0KG9mZnNldCk7CisgICAgbV9jb29yZGluYXRvci0+c2V0QmFja2dyb3Vu
ZENvbG9yKGNvbG9yKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdC5oCmluZGV4IGI3Yzg5ZTJiZWZjMTc1OWQxMjY2YzVlZDEzMjc2MWY5
NDE2MmE1NzIuLmVhNTg2ZTEyNjg5ZTZkOGQ2YTRjZmRjNDI1NzE0YTJkMWM4NDYzMzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dC5oCkBAIC0yNSwxMyArMjUsOCBAQAogCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgog
I2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUg
PFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9D
b29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9HcmFwaGljc0xheWVyRmFjdG9yeS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVXBkYXRl
QXRsYXMuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKICNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpCkBAIC00NiwxMSArNDEsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViUGFn
ZTsKIAotY2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IDogcHVibGljIExheWVyVHJlZUhv
c3QsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQKLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpDb29y
ZGluYXRlZEltYWdlQmFja2luZzo6Q2xpZW50Ci0gICAgLCBwdWJsaWMgV2ViQ29yZTo6VXBkYXRl
QXRsYXM6OkNsaWVudAotICAgICwgcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5
CitjbGFzcyBDb29yZGluYXRlZExheWVyVHJlZUhvc3QgOiBwdWJsaWMgTGF5ZXJUcmVlSG9zdCwg
cHVibGljIFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudAogI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKICAgICAsIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudAog
I2VuZGlmCkBAIC01OSwzNCArNTAsMzEgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4gY3JlYXRlKFdlYlBhZ2UqKTsKICAgICB2aXJ0dWFs
IH5Db29yZGluYXRlZExheWVyVHJlZUhvc3QoKTsKIAotICAgIHZpcnR1YWwgY29uc3QgTGF5ZXJU
cmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCgpIHsgcmV0dXJuIG1fbGF5ZXJUcmVlQ29udGV4
dDsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9v
bCk7Ci0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgIHZpcnR1YWwg
dm9pZCBzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wpOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKKyAgICB2aXJ0dWFsIGNv
bnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQoKSBPVkVSUklERSB7IHJldHVy
biBtX2xheWVyVHJlZUNvbnRleHQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJGbHVzaFNj
aGVkdWxpbmdFbmFibGVkKGJvb2wpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVs
ZUxheWVyRmx1c2goKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxkTm90aWZ5
QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCkgT1ZFUlJJREU7CiAKICAgICB2
aXJ0dWFsIHZvaWQgc2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoKSBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXlJ
blJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9p
ZCBzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9W
RVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBmb3JjZVJlcGFpbnQoKTsKICAgICB2aXJ0dWFsIGJv
b2wgZm9yY2VSZXBhaW50QXN5bmModWludDY0X3QgY2FsbGJhY2tJRCk7Ci0gICAgdmlydHVhbCB2
b2lkIHNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSk7CisgICAg
dmlydHVhbCB2b2lkIHNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6
ZSkgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkSW5zdGFsbFBhZ2VPdmVybGF5KCk7
Ci0gICAgdmlydHVhbCB2b2lkIGRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCk7Ci0gICAgdmlydHVh
bCB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlPcGFjaXR5KGZsb2F0KTsKLSAgICB2
aXJ0dWFsIGJvb2wgcGFnZU92ZXJsYXlTaG91bGRBcHBseUZhZGVXaGVuUGFpbnRpbmcoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRJbnN0YWxsUGFnZU92ZXJs
YXkoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXko
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXko
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRQ
YWdlT3ZlcmxheU9wYWNpdHkoZmxvYXQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBwYWdl
T3ZlcmxheVNob3VsZEFwcGx5RmFkZVdoZW5QYWludGluZygpIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGF1c2VSZW5kZXJpbmcoKSB7IG1faXNT
dXNwZW5kZWQgPSB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHJlc3VtZVJlbmRlcmluZygpIHsg
bV9pc1N1c3BlbmRlZCA9IGZhbHNlOyBzY2hlZHVsZUxheWVyRmx1c2goKTsgfQorICAgIHZpcnR1
YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIE9WRVJSSURFIHsgbV9pc1N1c3BlbmRlZCA9IHRydWU7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkgT1ZFUlJJREUgeyBtX2lzU3Vz
cGVuZGVkID0gZmFsc2U7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9CiAgICAgdmlydHVhbCB2b2lk
IGRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpIE9WRVJSSURFOwogCi0gICAgdmlydHVh
bCB2b2lkIHJlbmRlck5leHRGcmFtZSgpOwotICAgIHZpcnR1YWwgdm9pZCBwdXJnZUJhY2tpbmdT
dG9yZXMoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7Ci0gICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJ
UEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpOworICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpD
b25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKSBPVkVSUklERTsKICAgICB2aXJ0
dWFsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFwaGljc0xheWVyRmFjdG9yeSgp
IE9WRVJSSURFOwogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQpAQCAtOTYs
NjYgKzg0LDQwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNvcmU6OkNv
b3JkaW5hdGVkU3VyZmFjZT4gY3JlYXRlQ29vcmRpbmF0ZWRTdXJmYWNlKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmLCBXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzKTsKIAotICAgIHZv
aWQgY29tbWl0U2Nyb2xsT2Zmc2V0KHVpbnQzMl90IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIG9mZnNldCk7Ci0KIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3QoV2ViUGFnZSopOwogCiBwcml2YXRlOgotICAgIC8vIEdyYXBoaWNzTGF5ZXJD
bGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpOwotICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhh
c2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKLSAgICB2aXJ0dWFsIGZsb2F0
IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBmbG9hdCBw
YWdlU2NhbGVGYWN0b3IoKSBjb25zdCBPVkVSUklERTsKLQotICAgIC8vIENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nOjpDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKFdl
YkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U+KSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhXZWJDb3JlOjpDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW1h
Z2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOwot
Ci0gICAgdm9pZCBmbHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7Ci0KLSAgICAvLyBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKLSAgICB2aXJ0dWFsIGJvb2wgaXNGbHVzaGlu
Z0xheWVyQ2hhbmdlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faXNGbHVzaGluZ0xheWVy
Q2hhbmdlczsgfQotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVDb250ZW50
c1JlY3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKFdlYkNvcmU6OkltYWdl
KikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllciopOwotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMyX3QmIGF0bGFzSUQs
IFdlYkNvcmU6OkludFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKFdl
YkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyU3RhdGUmKTsKLQotICAgIC8vIFVwZGF0ZUF0bGFzOjpDbGllbnQKLSAgICB2aXJ0dWFsIHZv
aWQgY3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpDb29yZGluYXRlZFN1cmZhY2U+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
VXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkgT1ZFUlJJREU7Ci0KLSAgICAvLyBHcmFwaGlj
c0xheWVyRmFjdG9yeQotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0xh
eWVyPiBjcmVhdGVHcmFwaGljc0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQqKSBP
VkVSUklERTsKLQogICAgIC8vIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdAotICAgIHZvaWQgaW5p
dGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQoKTsKICAgICB2b2lkIGNyZWF0ZVBh
Z2VPdmVybGF5TGF5ZXIoKTsKICAgICB2b2lkIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7Ci0g
ICAgYm9vbCBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKLSAgICB2b2lkIGNsZWFyUGVuZGlu
Z1N0YXRlQ2hhbmdlcygpOwogICAgIHZvaWQgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKICAg
ICB2b2lkIHBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7Ci0gICAgdm9pZCBkaWRQZXJmb3Jt
U2NoZWR1bGVkTGF5ZXJGbHVzaCgpOwogICAgIHZvaWQgc3luY0Rpc3BsYXlTdGF0ZSgpOwogICAg
IHZvaWQgbG9ja0FuaW1hdGlvbnMoKTsKICAgICB2b2lkIHVubG9ja0FuaW1hdGlvbnMoKTsKIAot
ICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8Q29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0PiopOwotCi0gICAgdm9pZCBzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFz
ZXMoKTsKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOworICAgIHZvaWQgcmVuZGVyTmV4
dEZyYW1lKCk7CisgICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKKyAgICB2b2lkIGNvbW1p
dFNjcm9sbE9mZnNldCh1aW50MzJfdCBsYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBv
ZmZzZXQpOwogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKICAgICB2b2lkIGFu
aW1hdGlvbkZyYW1lUmVhZHkoKTsKICNlbmRpZgogCi0gICAgdm9pZCByZWxlYXNlSW5hY3RpdmVB
dGxhc2VzVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+
Kik7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9j
b29yZGluYXRvci0+cm9vdExheWVyKCk7IH0KKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBu
b25Db21wb3NpdGVkQ29udGVudExheWVyKCkgeyByZXR1cm4gbV9jb29yZGluYXRvci0+bm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllcigpOyB9CisKKyAgICB2b2lkIGxheWVyRmx1c2hUaW1lckZpcmVk
KFdlYkNvcmU6OlRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4qKTsKKworICAgIC8vIENv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbXBv
c2l0aW5nU3RhdGVQZXJpcGhlcmFsTGF5ZXJzKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IHNjaGVkdWxlTGF5ZXJGbHVzaFJlcXVpcmVkKCkgT1ZFUlJJREUgeyBzY2hlZHVsZUxheWVyRmx1
c2goKTsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgY2xpcFJlY3QpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb29y
ZGluYXRlZEdyYXBoaWNzU3RhdGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJikg
T1ZFUlJJREU7CiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgdm9pZCBwcmVwYXJlQ3Vz
dG9tRmlsdGVyUHJveGllc0lmTmVlZGVkKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
clN0YXRlJik7CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVDdXN0b21GaWx0ZXJQcm94aWVzSWZO
ZWVkZWQoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKSBPVkVSUklERTsK
IAogICAgIC8vIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudAogICAgIHZvaWQgcmVt
b3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSop
OwpAQCAtMTY0LDQxICsxMjYsMjIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpc2Nvbm5lY3RDdXN0
b21GaWx0ZXJQcm9ncmFtcygpOwogI2VuZGlmCiAKLSAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhp
Y3NMYXllcj4gbV9yb290TGF5ZXI7Ci0KLSAgICAvLyBUaGUgbGF5ZXIgd2hpY2ggY29udGFpbnMg
YWxsIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQuCi0gICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI+IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcjsKKyAgICBPd25QdHI8V2ViQ29yZTo6
Q29tcG9zaXRpbmdDb29yZGluYXRvcj4gbV9jb29yZGluYXRvcjsKIAogICAgIC8vIFRoZSBwYWdl
IG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUgbnVsbCBpZiB0aGVyZSdzIG5vIHBhZ2Ugb3ZlcmxheS4K
ICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9wYWdlT3ZlcmxheUxheWVyOwog
Ci0gICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlIG1fc3RhdGU7Ci0KLSAgICB0
eXBlZGVmIEhhc2hNYXA8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiBMYXllck1hcDsKLSAgICBMYXllck1hcCBtX3JlZ2lzdGVy
ZWRMYXllcnM7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQsIFJlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZz4gPiBJbWFn
ZUJhY2tpbmdNYXA7Ci0gICAgSW1hZ2VCYWNraW5nTWFwIG1faW1hZ2VCYWNraW5nczsKLSAgICBW
ZWN0b3I8T3duUHRyPFdlYkNvcmU6OlVwZGF0ZUF0bGFzPiA+IG1fdXBkYXRlQXRsYXNlczsKLQog
I2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICBIYXNoU2V0PFdlYkN1c3RvbUZpbHRlclByb2dy
YW1Qcm94eSo+IG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXM7CiAjZW5kaWYKIAogICAgIGJvb2wgbV9u
b3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7CiAgICAgYm9vbCBtX2lzVmFsaWQ7Ci0gICAg
Ly8gV2UgZG9uJ3Qgc2VuZCB0aGUgbWVzc2FnZXMgcmVsYXRlZCB0byByZWxlYXNpbmcgcmVzb3Vy
Y2VzIHRvIFVJIFByb2Nlc3MgZHVyaW5nIHB1cmdpbmcsIGJlY2F1c2UgVUkgUHJvY2VzcyBhbHJl
YWR5IGhhZCByZW1vdmVkIGFsbCByZXNvdXJjZXMuCi0gICAgYm9vbCBtX2lzUHVyZ2luZzsKLSAg
ICBib29sIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlczsKLQotICAgIGJvb2wgbV93YWl0aW5nRm9y
VUlQcm9jZXNzOwogICAgIGJvb2wgbV9pc1N1c3BlbmRlZDsKLSAgICBXZWJDb3JlOjpGbG9hdFJl
Y3QgbV92aXNpYmxlQ29udGVudHNSZWN0OwogCiAgICAgTGF5ZXJUcmVlQ29udGV4dCBtX2xheWVy
VHJlZUNvbnRleHQ7Ci0gICAgYm9vbCBtX3Nob3VsZFN5bmNGcmFtZTsKLSAgICBib29sIG1fZGlk
SW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyOworCiAgICAgV2ViQ29yZTo6VGltZXI8Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0PiBtX2xheWVyRmx1c2hUaW1lcjsKLSAgICBXZWJDb3JlOjpU
aW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1Rp
bWVyOwogICAgIGJvb2wgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQ7CiAgICAgdWludDY0
X3QgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQ7CiAgICAgYm9vbCBtX2FuaW1hdGlvbnNM
b2NrZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5
ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJl
ZUhvc3QuaAppbmRleCAzOWZlZjgyNGZhMjk0YTViNWZlNmExM2ExNTY3NTkzNWZlNzM1YWM5Li4x
YzU2YWU1NTU1ZDNhYTA2NzM5YzljNzZkN2VmYzZmNjExOGJhYzVkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgKQEAgLTg1LDkgKzg1
LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3Qg
V2ViQ29yZTo6Q29sb3ImKSB7IH0KIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmLCBmbG9hdCAvKiBzY2FsZSAqLywgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJhbWUoKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgcHVyZ2VCYWNraW5nU3RvcmVzKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVD
b29yZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3Jl
SVBDOjpNZXNzYWdlRGVjb2RlciYpID0gMDsKICNlbmRpZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203804</attachid>
            <date>2013-06-05 04:41:13 -0700</date>
            <delta_ts>2013-06-06 03:51:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104360-20130605203940.patch</filename>
            <type>text/plain</type>
            <size>63083</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxMTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWE2NGRmNWViMTA5YjUw
MmQ3Yjc2MGI4MjJmOGJjY2QxZWUzZWM2Yy4uZTU3ZTAwYzBhY2Q4NmE3MGQ4MTlmNmJhYTQ3NTdk
MmQ1ZWYzM2YyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDEzLTAzLTEzICBHd2Fu
ZyBZb29uIEh3YW5nICA8cnl1bWllbEBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGlu
YXRlZCBHcmFwaGljczogU2VwYXJhdGUgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGludG8gQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0IGFuZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQzNjAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0IGhhcyB0b28gbWFueSByZXNwb25zaWJpbGl0aWVzLiBJdAorICAgICAgICBp
bXBsZW1lbnRzIExheWVyVHJlZUhvc3QsIEdyYXBoaWNzTGF5ZXJDbGllbnQsCisgICAgICAgIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNs
aWVudCwKKyAgICAgICAgVXBkYXRlQXRsYXM6OkNsaWVudCwgR3JhcGhpY3NMYXllckZhY3Rvcnkg
YW5kCisgICAgICAgIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudC4KKworICAgICAg
ICBUaGlzIHJlZmFjdG9yaW5nIHJlZHVjZXMgdGhlIHJlc3BvbnNpYmlsaXRpZXMgb2YgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5l
dyBjbGFzcyBjYWxsZWQgQ29tcG9zaXRpbmdDb29yZGluYXRvciwgd2hpY2gKKyAgICAgICAgdGFr
ZXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIG1hbmFnaW5nIGNvbXBvc2l0aW5nIHJlc291cmNlcyBp
bgorICAgICAgICBXZWJQcm9jZXNzLgorCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dCBub3cgdGFrZXMgYSBwYXJ0IGZvciBzY2hlZHVsaW5nIGFuZCBJUEMKKyAgICAgICAgc3BlY2lm
aWMgcGFydHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRl
c3RzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVGFyZ2V0LnByaToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRp
bmdDb29yZGluYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdD
b29yZGluYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6On5Db21wb3NpdGluZ0Nvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2l6ZURpZENoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpmbHVzaFBlbmRpbmdM
YXllckNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6
Y2xlYXJQZW5kaW5nU3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OmluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZVJvb3RMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzeW5jTGF5ZXJTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVJbWFn
ZUJhY2tpbmdJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpjcmVhdGVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdD
b29yZGluYXRvcjo6dXBkYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVtb3ZlSW1hZ2VCYWNraW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0ltYWdl
QmFja2luZ0NoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRv
cjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpub3RpZnlGbHVzaFJlcXVpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OnBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlR3JhcGhpY3NMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXZpY2VTY2FsZUZhY3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpwYWdlU2NhbGVGYWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlVXBkYXRlQXRs
YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVtb3ZlVXBk
YXRlQXRsYXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6dmlz
aWJsZUNvbnRlbnRzUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjptYWluQ29udGVudHNMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjb21taXRTY3JvbGxPZmZz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVuZGVyTmV4
dEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnB1cmdl
QmFja2luZ1N0b3Jlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
OjpiZWdpbkNvbnRlbnRVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29y
ZGluYXRvcjo6ZW5kQ29udGVudFVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1Rp
bWVyRmlyZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29t
cG9zaXRpbmdDb29yZGluYXRvcjo6Y2xlYXJSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cm9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OnN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
aW5nQ29vcmRpbmF0b3I6OmlzV2FpdGluZ0ZvclJlbmRlcmVyKToKKwogMjAxMy0wNi0wNCAgSmFl
IEh5dW4gUGFyayAgPGphZS5wYXJrQGNvbXBhbnkxMDAubmV0PgogCiAgICAgICAgIFtDb29yZGlu
YXRlZCBHcmFwaGljc10gSW1wbGVtZW50IFRocmVhZFNhZmVDb29yZGluYXRlZFN1cmZhY2UKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwppbmRleCBmZjUxZGI4NDc1M2NjOTNhOTc1MzExYTM1YzFkNmFhYTg3YmExMDM1Li42OWE1
NjNkYzM3MDNlZWMwMzkzMWFhNTYxZjgwOWRjNzhiMTA0ZGNkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNTEgQEAKKzIwMTMtMDMtMTMgIEd3YW5nIFlvb24gSHdhbmcgIDxyeXVtaWVsQGNvbXBhbnkx
MDAubmV0PgorCisgICAgICAgIENvb3JkaW5hdGVkIEdyYXBoaWNzOiBTZXBhcmF0ZSBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3QgaW50byBDb29yZGluYXRlZExheWVyVHJlZUhvc3QgYW5kIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwNDM2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoZSBDb29yZGluYXRlZExheWVyVHJlZUhvc3QgaGFzIHRvbyBtYW55IHJlc3Bv
bnNpYmlsaXRpZXMuIEl0CisgICAgICAgIGltcGxlbWVudHMgTGF5ZXJUcmVlSG9zdCwgR3JhcGhp
Y3NMYXllckNsaWVudCwKKyAgICAgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LCBD
b29yZGluYXRlZEltYWdlQmFja2luZzo6Q2xpZW50LAorICAgICAgICBVcGRhdGVBdGxhczo6Q2xp
ZW50LCBHcmFwaGljc0xheWVyRmFjdG9yeSBhbmQKKyAgICAgICAgV2ViQ3VzdG9tRmlsdGVyUHJv
Z3JhbVByb3h5Q2xpZW50LgorCisgICAgICAgIFRoaXMgcmVmYWN0b3JpbmcgcmVkdWNlcyB0aGUg
cmVzcG9uc2liaWxpdGllcyBvZiBDb29yZGluYXRlZExheWVyVHJlZUhvc3QuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNsYXNzIGNhbGxlZCBDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yLCB3aGljaAorICAgICAgICB0YWtlcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgbWFuYWdp
bmcgY29tcG9zaXRpbmcgcmVzb3VyY2VzIGluCisgICAgICAgIFdlYlByb2Nlc3MuCisKKyAgICAg
ICAgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IG5vdyB0YWtlcyBhIHBhcnQgZm9yIHNjaGVkdWxp
bmcgYW5kIElQQworICAgICAgICBzcGVjaWZpYyBwYXJ0cy4KKworICAgICAgICBObyBuZXcgdGVz
dHMsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6On5Db29yZGluYXRlZExh
eWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZvcmNlUmVwYWludCk6CisgICAgICAgIChXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENoYW5nZSk6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCk6
CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVuZGVyTmV4dEZy
YW1lKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwdXJnZUJh
Y2tpbmdTdG9yZXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OmNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMpOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zmx1c2hDb21wb3NpdGlu
Z1N0YXRlUGVyaXBoZXJhbExheWVycyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIpOgorICAg
ICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnBhaW50Q29udGVudHMpOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNvbW1pdENvb3JkaW5h
dGVkR3JhcGhpY3NTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpncmFwaGljc0xheWVyRmFjdG9yeSk6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y29tbWl0U2Nyb2xsT2Zmc2V0KToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZExheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0Ojpyb290TGF5ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRy
ZWVIb3N0Lmg6CisKIDIwMTMtMDYtMDQgIEphZSBIeXVuIFBhcmsgIDxqYWUucGFya0Bjb21wYW55
MTAwLm5ldD4KIAogICAgICAgICBbQ29vcmRpbmF0ZWQgR3JhcGhpY3NdIE1hbmFnZSB0aGUgbGlm
ZWN5Y2xlIG9mIEdyYXBoaWNzQ29udGV4dCBleHBsaWNpdGx5LgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApp
bmRleCA1ZmVkMGI5ZWYzZmU4MTY0Mzc1NDMxZDIzNmQxZDEzNjJhYTM4NTkxLi42MmY0MTVhY2Qy
Mjg5ZDYyMGY2N2ExZjYxYmFmYjgxZTI2NGZlNzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAt
MTk2OSw2ICsxOTY5LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGRiZGQ0YTQw
ZWY1ZjhlZDE5NzY4MGViMjY1MDkwNzE3Y2NkYzU0NzMuLmZjMjM1NjU1MzI2MDZmZjczYzcxYTYw
ZTg4MzQwNDcyZDc2NTM0NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkK
KysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtNDE0MSw2ICs0MTQxLDcgQEAgdXNl
PygzRF9HUkFQSElDUykgewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0uaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmggXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oIFwKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
LmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW0uaCBcCkBA
IC00MTc3LDYgKzQxNzgsNyBAQCB1c2U/KDNEX0dSQVBISUNTKSB7CiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwIFwKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmNwcCBcCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmNwcCBc
CisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGlu
Z0Nvb3JkaW5hdG9yLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBc
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21w
b3NpdGluZ0Nvb3JkaW5hdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMDJiOTMxNzI4NGFlZmE4ZTYxMzlk
MTI0NTEyOTMzMjMzZmYzNTk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3Iu
Y3BwCkBAIC0wLDAgKzEsNDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAoQykg
MjAxMyBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5j
bHVkZSAiQ29tcG9zaXRpbmdDb29yZGluYXRvci5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVu
dFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworUGFzc093blB0cjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiBDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpjcmVhdGUoUGFnZSogcGFnZSwgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6
Q2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yKHBhZ2UsIGNsaWVudCkpOworfQorCitDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp+
Q29tcG9zaXRpbmdDb29yZGluYXRvcigpCit7CisgICAgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisK
KyAgICBMYXllck1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOwor
ICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnZhbHVlLT5zZXRDb29yZGluYXRvcigw
KTsKK30KKworQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q29tcG9zaXRpbmdDb29yZGluYXRvcihQ
YWdlKiBwYWdlLCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpDbGllbnQqIGNsaWVudCkKKyAgICA6
IG1fcGFnZShwYWdlKQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9yb290Q29tcG9z
aXRpbmdMYXllcigwKQorICAgICwgbV9pc1B1cmdpbmcoZmFsc2UpCisgICAgLCBtX2lzRmx1c2hp
bmdMYXllckNoYW5nZXMoZmFsc2UpCisgICAgLCBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyKHRydWUp
CisgICAgLCBtX3Nob3VsZFN5bmNGcmFtZShmYWxzZSkKKyAgICAsIG1fZGlkSW5pdGlhbGl6ZVJv
b3RDb21wb3NpdGluZ0xheWVyKGZhbHNlKQorICAgICwgbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2Vz
VGltZXIodGhpcywgJkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJlbGVhc2VJbmFjdGl2ZUF0bGFz
ZXNUaW1lckZpcmVkKQoreworICAgIG1fcGFnZS0+c2V0dGluZ3MoKS0+c2V0QXBwbHlEZXZpY2VT
Y2FsZUZhY3RvckluQ29tcG9zaXRvcih0cnVlKTsKKworICAgIC8vIFRoaXMgaXMgYSB0ZW1wb3Jh
cnkgd2F5IHRvIGVuYWJsZSB0aGlzIG9ubHkgaW4gdGhlIEdMIGNhc2UsIHVudGlsIFRleHR1cmVN
YXBwZXJJbWFnZUJ1ZmZlciBpcyByZW1vdmVkLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0ODY5CisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpzZXRTaG91bGRTdXBwb3J0Q29udGVudHNUaWxpbmcodHJ1ZSk7Cit9CisKK3ZvaWQgQ29t
cG9zaXRpbmdDb29yZGluYXRvcjo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXll
ciogbGF5ZXIpCit7CisgICAgaWYgKG1fcm9vdENvbXBvc2l0aW5nTGF5ZXIpCisgICAgICAgIG1f
cm9vdENvbXBvc2l0aW5nTGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKworICAgIG1fcm9vdENv
bXBvc2l0aW5nTGF5ZXIgPSBsYXllcjsKKyAgICBpZiAobV9yb290Q29tcG9zaXRpbmdMYXllcikK
KyAgICAgICAgbV9yb290TGF5ZXItPmFkZENoaWxkQXRJbmRleChtX3Jvb3RDb21wb3NpdGluZ0xh
eWVyLCAwKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzaXplRGlkQ2hhbmdl
KGNvbnN0IEludFNpemUmIG5ld1NpemUpCit7CisgICAgbV9yb290TGF5ZXItPnNldFNpemUobmV3
U2l6ZSk7CisgICAgbV9jbGllbnQtPnNjaGVkdWxlTGF5ZXJGbHVzaFJlcXVpcmVkKCk7Cit9CisK
K2Jvb2wgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkK
K3sKKyAgICBpZiAobV9pc1dhaXRpbmdGb3JSZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IHByb3RlY3RvcihtX2lzRmx1c2hpbmdMYXll
ckNoYW5nZXMsIHRydWUpOworCisgICAgaW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZO
ZWVkZWQoKTsKKworICAgIG1fcm9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlz
TGF5ZXJPbmx5KCk7CisgICAgbV9jbGllbnQtPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZVBlcmlwaGVy
YWxMYXllcnMoKTsKKworICAgIGJvb2wgZGlkU3luYyA9IG1fcGFnZS0+bWFpbkZyYW1lKCktPnZp
ZXcoKS0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CisKKyAgICB0
b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnVwZGF0ZUNvbnRl
bnRCdWZmZXJzSW5jbHVkaW5nU3ViTGF5ZXJlcygpOworICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+c3luY1BlbmRpbmdTdGF0ZUNoYW5nZXNJbmNsdWRp
bmdTdWJMYXllcnMoKTsKKworICAgIGZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKTsK
KworICAgIGlmIChtX3Nob3VsZFN5bmNGcmFtZSkgeworICAgICAgICBkaWRTeW5jID0gdHJ1ZTsK
KworICAgICAgICBpZiAobV9yb290Q29tcG9zaXRpbmdMYXllcikgeworICAgICAgICAgICAgbV9z
dGF0ZS5jb250ZW50c1NpemUgPSByb3VuZGVkSW50U2l6ZShtX3Jvb3RDb21wb3NpdGluZ0xheWVy
LT5zaXplKCkpOworICAgICAgICAgICAgaWYgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogY29u
dGVudHNMYXllciA9IG1haW5Db250ZW50c0xheWVyKCkpCisgICAgICAgICAgICAgICAgbV9zdGF0
ZS5jb3ZlcmVkUmVjdCA9IGNvbnRlbnRzTGF5ZXItPmNvdmVyUmVjdCgpOworICAgICAgICB9Cisg
ICAgICAgIG1fc3RhdGUuc2Nyb2xsUG9zaXRpb24gPSBtX3Zpc2libGVDb250ZW50c1JlY3QubG9j
YXRpb24oKTsKKworICAgICAgICBtX2NsaWVudC0+Y29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc1N0
YXRlKG1fc3RhdGUpOworCisgICAgICAgIGNsZWFyUGVuZGluZ1N0YXRlQ2hhbmdlcygpOworICAg
ICAgICBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyID0gdHJ1ZTsKKyAgICAgICAgbV9zaG91bGRTeW5j
RnJhbWUgPSBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gZGlkU3luYzsKK30KKwordm9pZCBD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjbGVhclBlbmRpbmdTdGF0ZUNoYW5nZXMoKQoreworICAg
IG1fc3RhdGUubGF5ZXJzVG9DcmVhdGUuY2xlYXIoKTsKKyAgICBtX3N0YXRlLmxheWVyc1RvVXBk
YXRlLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5sYXllcnNUb1JlbW92ZS5jbGVhcigpOworCisgICAg
bV9zdGF0ZS5pbWFnZXNUb0NyZWF0ZS5jbGVhcigpOworICAgIG1fc3RhdGUuaW1hZ2VzVG9SZW1v
dmUuY2xlYXIoKTsKKyAgICBtX3N0YXRlLmltYWdlc1RvVXBkYXRlLmNsZWFyKCk7CisgICAgbV9z
dGF0ZS5pbWFnZXNUb0NsZWFyLmNsZWFyKCk7CisKKyAgICBtX3N0YXRlLnVwZGF0ZUF0bGFzZXNU
b0NyZWF0ZS5jbGVhcigpOworICAgIG1fc3RhdGUudXBkYXRlQXRsYXNlc1RvUmVtb3ZlLmNsZWFy
KCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgbV9zdGF0ZS5jdXN0b21GaWx0ZXJz
VG9DcmVhdGUuY2xlYXIoKTsKKyAgICBtX3N0YXRlLmN1c3RvbUZpbHRlcnNUb1JlbW92ZS5jbGVh
cigpOworI2VuZGlmCit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6aW5pdGlhbGl6
ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQoKQoreworICAgIGlmIChtX2RpZEluaXRpYWxp
emVSb290Q29tcG9zaXRpbmdMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZS5y
b290Q29tcG9zaXRpbmdMYXllciA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExh
eWVyLmdldCgpKS0+aWQoKTsKKyAgICBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXll
ciA9IHRydWU7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworfQorCit2b2lkIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZVJvb3RMYXllcihjb25zdCBJbnRTaXplJiBzaXplKQor
eworICAgIEFTU0VSVCghbV9yb290TGF5ZXIpOworICAgIC8vIENyZWF0ZSBhIHJvb3QgbGF5ZXIu
CisgICAgbV9yb290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcywgdGhpcyk7Cisj
aWZuZGVmIE5ERUJVRworICAgIG1fcm9vdExheWVyLT5zZXROYW1lKCJDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yIHJvb3QgbGF5ZXIiKTsKKyNlbmRpZgorICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0Nv
bnRlbnQoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKHNpemUpOworfQorCit2b2lk
IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJ
RCBpZCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQoreworICAgIG1fc2hv
dWxkU3luY0ZyYW1lID0gdHJ1ZTsKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICBtX2Ns
aWVudC0+cHJlcGFyZUN1c3RvbUZpbHRlclByb3hpZXNJZk5lZWRlZChzdGF0ZSk7CisjZW5kaWYK
KworICAgIG1fc3RhdGUubGF5ZXJzVG9VcGRhdGUuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGlkLCBz
dGF0ZSkpOworfQorCitQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBDb21wb3Np
dGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChJbWFnZSogaW1hZ2Up
Cit7CisgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEID0gQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmc6OmdldENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQoaW1hZ2UpOworICAgIElt
YWdlQmFja2luZ01hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlQmFja2luZ3MuZmluZChpbWFnZUlE
KTsKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGltYWdlQmFja2luZzsKKyAg
ICBpZiAoaXQgPT0gbV9pbWFnZUJhY2tpbmdzLmVuZCgpKSB7CisgICAgICAgIGltYWdlQmFja2lu
ZyA9IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjcmVhdGUodGhpcywgaW1hZ2UpOworICAgICAg
ICBtX2ltYWdlQmFja2luZ3MuYWRkKGltYWdlSUQsIGltYWdlQmFja2luZyk7CisgICAgfSBlbHNl
CisgICAgICAgIGltYWdlQmFja2luZyA9IGl0LT52YWx1ZTsKKworICAgIHJldHVybiBpbWFnZUJh
Y2tpbmc7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlSW1hZ2VCYWNr
aW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBtX3N0YXRlLmlt
YWdlc1RvQ3JlYXRlLmFwcGVuZChpbWFnZUlEKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yOjp1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFn
ZUlELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gY29vcmRpbmF0ZWRTdXJmYWNlKQor
eworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3N0YXRlLmltYWdlc1RvVXBk
YXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihpbWFnZUlELCBjb29yZGluYXRlZFN1cmZhY2UpKTsK
K30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjbGVhckltYWdlQmFja2luZ0NvbnRl
bnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBtX3Nob3VsZFN5
bmNGcmFtZSA9IHRydWU7CisgICAgbV9zdGF0ZS5pbWFnZXNUb0NsZWFyLmFwcGVuZChpbWFnZUlE
KTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZW1vdmVJbWFnZUJhY2tpbmco
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQoreworICAgIGlmIChtX2lzUHVyZ2lu
ZykKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlu
cyhpbWFnZUlEKSk7CisgICAgbV9pbWFnZUJhY2tpbmdzLnJlbW92ZShpbWFnZUlEKTsKKworICAg
IG1fc3RhdGUuaW1hZ2VzVG9SZW1vdmUuYXBwZW5kKGltYWdlSUQpOworfQorCit2b2lkIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKQorewor
ICAgIEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgZW5kID0gbV9pbWFnZUJhY2tpbmdzLmVuZCgp
OworICAgIGZvciAoSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdGVyID0gbV9pbWFnZUJhY2tp
bmdzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgIGl0ZXItPnZhbHVlLT51
cGRhdGUoKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpub3RpZnlBbmltYXRp
b25TdGFydGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgLyogdGltZSAqLykKK3sKK30K
Kwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0
IEdyYXBoaWNzTGF5ZXIqKQoreworICAgIG1fY2xpZW50LT5zY2hlZHVsZUxheWVyRmx1c2hSZXF1
aXJlZCgpOworfQorCisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cGFpbnRDb250ZW50
cyhjb25zdCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBHcmFwaGljc0NvbnRleHQmIGdy
YXBoaWNzQ29udGV4dCwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3Qm
IGNsaXBSZWN0KQoreworICAgIG1fY2xpZW50LT5wYWludENvbnRlbnRzKGdyYXBoaWNzTGF5ZXIs
IGdyYXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOworfQorCitQYXNzT3duUHRyPEdyYXBoaWNzTGF5
ZXI+IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZUdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NM
YXllckNsaWVudCogY2xpZW50KQoreworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbGF5
ZXIgPSBuZXcgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGNsaWVudCk7CisgICAgbGF5ZXItPnNl
dENvb3JkaW5hdG9yKHRoaXMpOworICAgIG1fcmVnaXN0ZXJlZExheWVycy5hZGQobGF5ZXItPmlk
KCksIGxheWVyKTsKKyAgICBtX3N0YXRlLmxheWVyc1RvQ3JlYXRlLmFwcGVuZChsYXllci0+aWQo
KSk7CisgICAgbGF5ZXItPnNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50KCk7CisgICAgbV9j
bGllbnQtPnNjaGVkdWxlTGF5ZXJGbHVzaFJlcXVpcmVkKCk7CisgICAgcmV0dXJuIGFkb3B0UHRy
KGxheWVyKTsKK30KKworZmxvYXQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6ZGV2aWNlU2NhbGVG
YWN0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCk7
Cit9CisKK2Zsb2F0IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnBhZ2VTY2FsZUZhY3RvcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZS0+cGFnZVNjYWxlRmFjdG9yKCk7Cit9CisKK3ZvaWQg
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJ
RCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IGNvb3JkaW5hdGVkU3VyZmFjZSkKK3sK
KyAgICBtX3N0YXRlLnVwZGF0ZUF0bGFzZXNUb0NyZWF0ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIo
YXRsYXNJRCwgY29vcmRpbmF0ZWRTdXJmYWNlKSk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29y
ZGluYXRvcjo6cmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkKK3sKKyAgICBpZiAo
bV9pc1B1cmdpbmcpCisgICAgICAgIHJldHVybjsKKyAgICBtX3N0YXRlLnVwZGF0ZUF0bGFzZXNU
b1JlbW92ZS5hcHBlbmQoYXRsYXNJRCk7Cit9CisKK0Zsb2F0UmVjdCBDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yOjp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92aXNp
YmxlQ29udGVudHNSZWN0OworfQorCitDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIENvbXBvc2l0
aW5nQ29vcmRpbmF0b3I6Om1haW5Db250ZW50c0xheWVyKCkKK3sKKyAgICBpZiAoIW1fcm9vdENv
bXBvc2l0aW5nTGF5ZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHRvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdENvbXBvc2l0aW5nTGF5ZXIpLT5maW5kRmlyc3REZXNj
ZW5kYW50V2l0aENvbnRlbnRzUmVjdXJzaXZlbHkoKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKK3sKKyAgICAvLyBBIHplcm8gdHJh
amVjdG9yeVZlY3RvciBpbmRpY2F0ZXMgdGhhdCB0aWxlcyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9y
dCBhcmUgcmVxdWVzdGVkLgorICAgIGlmIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGNvbnRl
bnRzTGF5ZXIgPSBtYWluQ29udGVudHNMYXllcigpKQorICAgICAgICBjb250ZW50c0xheWVyLT5z
ZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKHRyYWplY3RvcnlWZWN0b3IpOwor
CisgICAgYm9vbCBjb250ZW50c1JlY3REaWRDaGFuZ2UgPSByZWN0ICE9IG1fdmlzaWJsZUNvbnRl
bnRzUmVjdDsKKyAgICBpZiAoY29udGVudHNSZWN0RGlkQ2hhbmdlKSB7CisgICAgICAgIG1fdmlz
aWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7CisKKyAgICAgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKKyAgICAgICAgZm9yIChMYXllck1hcDo6aXRl
cmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQor
ICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOwor
ICAgIH0KKworICAgIEZyYW1lVmlldyogdmlldyA9IG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXco
KTsKKyAgICBpZiAodmlldy0+dXNlRml4ZWRMYXlvdXQoKSkgeworICAgICAgICAvLyBSb3VuZCB0
aGUgcmVjdCBpbnN0ZWFkIG9mIGVuY2xvc2luZyBpdCB0byBtYWtlIHN1cmUgdGhhdCBpdHMgc2l6
ZSBzdGF5cworICAgICAgICAvLyB0aGUgc2FtZSB3aGlsZSBwYW5uaW5nLiBUaGlzIGNhbiBoYXZl
IG5hc3R5IGVmZmVjdHMgb24gbGF5b3V0LgorICAgICAgICB2aWV3LT5zZXRGaXhlZFZpc2libGVD
b250ZW50UmVjdChyb3VuZGVkSW50UmVjdChyZWN0KSk7CisgICAgfQorfQorCit2b2lkIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpCit7Cisg
ICAgbV9yb290TGF5ZXItPmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOworfQorCit2
b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRldGFjaExheWVyKENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllciogbGF5ZXIpCit7CisgICAgaWYgKG1faXNQdXJnaW5nKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX3JlZ2lzdGVyZWRMYXllcnMucmVtb3ZlKGxheWVyLT5pZCgpKTsKKworICAgIHNp
emVfdCBpbmRleCA9IG1fc3RhdGUubGF5ZXJzVG9DcmVhdGUuZmluZChsYXllci0+aWQoKSk7Cisg
ICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKSB7CisgICAgICAgIG1fc3RhdGUubGF5ZXJzVG9DcmVh
dGUucmVtb3ZlKGluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc3RhdGUu
bGF5ZXJzVG9SZW1vdmUuYXBwZW5kKGxheWVyLT5pZCgpKTsKKyAgICBtX2NsaWVudC0+c2NoZWR1
bGVMYXllckZsdXNoUmVxdWlyZWQoKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
Ojpjb21taXRTY3JvbGxPZmZzZXQodWludDMyX3QgbGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgb2Zmc2V0KQoreworICAgIExheWVyTWFwOjppdGVyYXRvciBpID0gbV9yZWdpc3RlcmVk
TGF5ZXJzLmZpbmQobGF5ZXJJRCk7CisgICAgaWYgKGkgPT0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVu
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpLT52YWx1ZS0+Y29tbWl0U2Nyb2xsT2Zmc2V0
KG9mZnNldCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVuZGVyTmV4dEZy
YW1lKCkKK3sKKyAgICBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyID0gZmFsc2U7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkKKyAgICAgICAg
bV91cGRhdGVBdGxhc2VzW2ldLT5kaWRTd2FwQnVmZmVycygpOworfQorCit2b2lkIENvbXBvc2l0
aW5nQ29vcmRpbmF0b3I6OnB1cmdlQmFja2luZ1N0b3JlcygpCit7CisgICAgVGVtcG9yYXJ5Q2hh
bmdlPGJvb2w+IHB1cmdpbmdUb2dnbGUobV9pc1B1cmdpbmcsIHRydWUpOworCisgICAgTGF5ZXJN
YXA6Oml0ZXJhdG9yIGVuZCA9IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKKyAgICBmb3IgKExh
eWVyTWFwOjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCisgICAgICAgIGl0LT52YWx1ZS0+cHVyZ2VCYWNraW5nU3RvcmVzKCk7CisKKyAg
ICBtX2ltYWdlQmFja2luZ3MuY2xlYXIoKTsKKyAgICBtX3VwZGF0ZUF0bGFzZXMuY2xlYXIoKTsK
K30KKworR3JhcGhpY3NDb250ZXh0KiBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpiZWdpbkNvbnRl
bnRVcGRhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyBm
bGFncywgdWludDMyX3QmIGF0bGFzSUQsIEludFBvaW50JiBvZmZzZXQpCit7CisgICAgR3JhcGhp
Y3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQ7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkgeworICAgICAgICBVcGRhdGVBdGxhcyogYXRs
YXMgPSBtX3VwZGF0ZUF0bGFzZXNbaV0uZ2V0KCk7CisgICAgICAgIGlmIChhdGxhcy0+c3VwcG9y
dHNBbHBoYSgpID09IChmbGFncyAmIENvb3JkaW5hdGVkU3VyZmFjZTo6U3VwcG9ydHNBbHBoYSkp
IHsKKyAgICAgICAgICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGVyZSBpcyBubyBh
dmFpbGFibGUgYnVmZmVyIHNwYWNlLgorICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0ID0gYXRs
YXMtPmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihhdGxhc0lELCBzaXplLCBvZmZzZXQp
OworICAgICAgICAgICAgaWYgKGdyYXBoaWNzQ29udGV4dCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ3JhcGhpY3NDb250ZXh0OworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0
IGludCBTY3JhdGNoQnVmZmVyRGltZW5zaW9uID0gMTAyNDsgLy8gU2hvdWxkIGJlIGEgcG93ZXIg
b2YgdHdvLgorICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBlbmQoYWRvcHRQdHIobmV3IFVwZGF0ZUF0
bGFzKHRoaXMsIFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24sIGZsYWdzKSkpOworICAgIHNjaGVkdWxl
UmVsZWFzZUluYWN0aXZlQXRsYXNlcygpOworICAgIHJldHVybiBtX3VwZGF0ZUF0bGFzZXMubGFz
dCgpLT5iZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoYXRsYXNJRCwgc2l6ZSwgb2Zmc2V0
KTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjplbmRDb250ZW50VXBkYXRlKHVp
bnQzMl90IGF0bGFzSUQpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdXBkYXRl
QXRsYXNlcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV91cGRhdGVBdGxhc2VzW2ldLT5p
ZCgpID09IGF0bGFzSUQpIHsKKyAgICAgICAgICAgIG1fdXBkYXRlQXRsYXNlc1tpXS0+ZW5kUGFp
bnRpbmcoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworY29u
c3QgZG91YmxlIFJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckludGVydmFsID0gMC41OworCit2
b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNl
cygpCit7CisgICAgaWYgKCFtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5pc0FjdGl2ZSgp
KQorICAgICAgICBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5zdGFydFJlcGVhdGluZyhS
ZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJJbnRlcnZhbCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRp
bmdDb29yZGluYXRvcjo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQoVGltZXI8Q29t
cG9zaXRpbmdDb29yZGluYXRvcj4qKQoreworICAgIC8vIFdlIGFsd2F5cyB3YW50IHRvIGtlZXAg
b25lIGF0bGFzIGZvciBub24tY29tcG9zaXRlZCBjb250ZW50LgorICAgIE93blB0cjxVcGRhdGVB
dGxhcz4gYXRsYXNUb0tlZXBBbnl3YXk7CisgICAgYm9vbCBmb3VuZEFjdGl2ZUF0bGFzRm9yTm9u
Q29tcG9zaXRlZENvbnRlbnQgPSBmYWxzZTsKKyAgICBmb3IgKGludCBpID0gbV91cGRhdGVBdGxh
c2VzLnNpemUoKSAtIDE7ICBpID49IDA7IC0taSkgeworICAgICAgICBVcGRhdGVBdGxhcyogYXRs
YXMgPSBtX3VwZGF0ZUF0bGFzZXNbaV0uZ2V0KCk7CisgICAgICAgIGlmICghYXRsYXMtPmlzSW5V
c2UoKSkKKyAgICAgICAgICAgIGF0bGFzLT5hZGRUaW1lSW5hY3RpdmUoUmVsZWFzZUluYWN0aXZl
QXRsYXNlc1RpbWVySW50ZXJ2YWwpOworICAgICAgICBib29sIHVzYWJsZUZvck5vbkNvbXBvc2l0
ZWRDb250ZW50ID0gIWF0bGFzLT5zdXBwb3J0c0FscGhhKCk7CisgICAgICAgIGlmIChhdGxhcy0+
aXNJbmFjdGl2ZSgpKSB7CisgICAgICAgICAgICBpZiAoIWZvdW5kQWN0aXZlQXRsYXNGb3JOb25D
b21wb3NpdGVkQ29udGVudCAmJiAhYXRsYXNUb0tlZXBBbnl3YXkgJiYgdXNhYmxlRm9yTm9uQ29t
cG9zaXRlZENvbnRlbnQpCisgICAgICAgICAgICAgICAgYXRsYXNUb0tlZXBBbnl3YXkgPSBtX3Vw
ZGF0ZUF0bGFzZXNbaV0ucmVsZWFzZSgpOworICAgICAgICAgICAgbV91cGRhdGVBdGxhc2VzLnJl
bW92ZShpKTsKKyAgICAgICAgfSBlbHNlIGlmICh1c2FibGVGb3JOb25Db21wb3NpdGVkQ29udGVu
dCkKKyAgICAgICAgICAgIGZvdW5kQWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVudCA9
IHRydWU7CisgICAgfQorCisgICAgaWYgKCFmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRl
ZENvbnRlbnQgJiYgYXRsYXNUb0tlZXBBbnl3YXkpCisgICAgICAgIG1fdXBkYXRlQXRsYXNlcy5h
cHBlbmQoYXRsYXNUb0tlZXBBbnl3YXkucmVsZWFzZSgpKTsKKworICAgIGlmIChtX3VwZGF0ZUF0
bGFzZXMuc2l6ZSgpIDw9IDEpCisgICAgICAgIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVy
LnN0b3AoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3Np
dGluZ0Nvb3JkaW5hdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzJlNjlhZThjZGE1MmRhZjlhYTJlZmUzZWM4
NzQxMWJjYzc4YjE5OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmgKQEAg
LTAsMCArMSwxNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29t
cGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yX2gKKyNkZWZpbmUgQ29tcG9zaXRpbmdDb29yZGluYXRvcl9o
CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaCIK
KyNpbmNsdWRlICJDb29yZGluYXRlZEltYWdlQmFja2luZy5oIgorI2luY2x1ZGUgIkZsb2F0UG9p
bnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NMYXllckZhY3RvcnkuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiVGltZXIu
aCIKKyNpbmNsdWRlICJVcGRhdGVBdGxhcy5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKwor
I2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCisj
ZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQYWdlOworY2xhc3MgR3JhcGhp
Y3NDb250ZXh0OworY2xhc3MgR3JhcGhpY3NMYXllcjsKK2NsYXNzIENvb3JkaW5hdGVkU3VyZmFj
ZTsKKworY2xhc3MgQ29tcG9zaXRpbmdDb29yZGluYXRvciA6IHB1YmxpYyBHcmFwaGljc0xheWVy
Q2xpZW50CisgICAgLCBwdWJsaWMgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50CisgICAg
LCBwdWJsaWMgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNsaWVudAorICAgICwgcHVibGljIFVw
ZGF0ZUF0bGFzOjpDbGllbnQKKyAgICAsIHB1YmxpYyBHcmFwaGljc0xheWVyRmFjdG9yeSB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tcG9zaXRpbmdDb29yZGluYXRvcik7IFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGNsYXNzIENsaWVudCB7CisgICAgcHVibGlj
OgorICAgICAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb21wb3NpdGluZ1N0YXRlUGVyaXBoZXJhbExh
eWVycygpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaFJlcXVp
cmVkKCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29vcmRpbmF0ZWRHcmFwaGlj
c1N0YXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpID0gMDsKKyAgICAgICAgdmlydHVhbCB2
b2lkIHBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSA9IDA7CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUN1c3RvbUZpbHRlclByb3hpZXNJZk5lZWRlZChD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpID0gMDsKKyNlbmRpZgorICAgIH07CisKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiBjcmVhdGUoUGFnZSos
IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudCopOworICAgIHZpcnR1YWwgfkNvbXBvc2l0
aW5nQ29vcmRpbmF0b3IoKTsKKworICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3Jh
cGhpY3NMYXllciopOworICAgIHZvaWQgc2l6ZURpZENoYW5nZShjb25zdCBJbnRTaXplJiBuZXdT
aXplKTsKKyAgICB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOworCisgICAg
dm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
UG9pbnQmKTsKKyAgICB2b2lkIHJlbmRlck5leHRGcmFtZSgpOworICAgIHZvaWQgcHVyZ2VCYWNr
aW5nU3RvcmVzKCk7CisgICAgdm9pZCBjb21taXRTY3JvbGxPZmZzZXQodWludDMyX3QgbGF5ZXJJ
RCwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0KTsKKworICAgIHZvaWQgY3JlYXRlUm9vdExheWVyKGNv
bnN0IEludFNpemUmKTsKKyAgICB2b2lkIGNsZWFyUm9vdExheWVyKCkgeyBtX3Jvb3RMYXllciA9
IG51bGxwdHI7IH0KKyAgICBHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSBjb25zdCB7IHJldHVy
biBtX3Jvb3RMYXllci5nZXQoKTsgfQorICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbWFp
bkNvbnRlbnRzTGF5ZXIoKTsKKworICAgIGJvb2wgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7
CisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJiBzdGF0ZSgpIHsgcmV0dXJuIG1fc3RhdGU7
IH0KKyAgICBib29sIGlzV2FpdGluZ0ZvclJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9pc1dh
aXRpbmdGb3JSZW5kZXJlcjsgfQorCitwcml2YXRlOgorICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0
b3IoUGFnZSosIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudCopOworCisgICAgLy8gR3Jh
cGhpY3NMYXllckNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVk
KGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBH
cmFwaGljc0NvbnRleHQmLCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVj
dCYgY2xpcFJlY3QpIE9WRVJSSURFOworICAgIHZpcnR1YWwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0
b3IoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGZsb2F0IHBhZ2VTY2FsZUZhY3Rvcigp
IGNvbnN0IE9WRVJSSURFOworCisgICAgLy8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNsaWVu
dAorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmdJRCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhD
b29yZGluYXRlZEltYWdlQmFja2luZ0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4p
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7CisKKyAg
ICAvLyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFsIGJvb2wgaXNG
bHVzaGluZ0xheWVyQ2hhbmdlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faXNGbHVzaGlu
Z0xheWVyQ2hhbmdlczsgfQorICAgIHZpcnR1YWwgRmxvYXRSZWN0IHZpc2libGVDb250ZW50c1Jl
Y3QoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKEltYWdlKikgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciop
IE9WRVJSSURFOworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0KiBiZWdpbkNvbnRlbnRVcGRh
dGUoY29uc3QgSW50U2l6ZSYsIENvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiBh
dGxhc0lELCBJbnRQb2ludCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBlbmRDb250ZW50
VXBkYXRlKHVpbnQzMl90IGF0bGFzSUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzeW5j
TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0
YXRlJikgT1ZFUlJJREU7CisKKyAgICAvLyBVcGRhdGVBdGxhczo6Q2xpZW50CisgICAgdmlydHVh
bCB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8Q29v
cmRpbmF0ZWRTdXJmYWNlPikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVVwZGF0
ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpIE9WRVJSSURFOworCisgICAgLy8gR3JhcGhpY3NMYXll
ckZhY3RvcnkKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gY3JlYXRlR3Jh
cGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50KikgT1ZFUlJJREU7CisKKyAgICB2b2lkIGlu
aXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKCk7CisgICAgdm9pZCBmbHVzaFBl
bmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7CisgICAgdm9pZCBjbGVhclBlbmRpbmdTdGF0ZUNo
YW5nZXMoKTsKKworICAgIHZvaWQgc2NoZWR1bGVSZWxlYXNlSW5hY3RpdmVBdGxhc2VzKCk7CisK
KyAgICB2b2lkIHJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKFRpbWVyPENvbXBvc2l0
aW5nQ29vcmRpbmF0b3I+Kik7CisKKyAgICBQYWdlKiBtX3BhZ2U7CisgICAgQ29tcG9zaXRpbmdD
b29yZGluYXRvcjo6Q2xpZW50KiBtX2NsaWVudDsKKworICAgIE93blB0cjxHcmFwaGljc0xheWVy
PiBtX3Jvb3RMYXllcjsKKyAgICBHcmFwaGljc0xheWVyKiBtX3Jvb3RDb21wb3NpdGluZ0xheWVy
OworCisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlIG1fc3RhdGU7CisKKyAgICB0eXBlZGVm
IEhhc2hNYXA8Q29vcmRpbmF0ZWRMYXllcklELCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiBM
YXllck1hcDsKKyAgICBMYXllck1hcCBtX3JlZ2lzdGVyZWRMYXllcnM7CisgICAgdHlwZWRlZiBI
YXNoTWFwPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxDb29yZGluYXRlZEltYWdl
QmFja2luZz4gPiBJbWFnZUJhY2tpbmdNYXA7CisgICAgSW1hZ2VCYWNraW5nTWFwIG1faW1hZ2VC
YWNraW5nczsKKyAgICBWZWN0b3I8T3duUHRyPFVwZGF0ZUF0bGFzPiA+IG1fdXBkYXRlQXRsYXNl
czsKKworICAgIC8vIFdlIGRvbid0IHNlbmQgdGhlIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gcmVsZWFz
aW5nIHJlc291cmNlcyB0byByZW5kZXJlciBkdXJpbmcgcHVyZ2luZywgYmVjYXVzZSByZW5kZXJl
ciBhbHJlYWR5IGhhZCByZW1vdmVkIGFsbCByZXNvdXJjZXMuCisgICAgYm9vbCBtX2lzUHVyZ2lu
ZzsKKyAgICBib29sIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlczsKKworICAgIGJvb2wgbV9pc1dh
aXRpbmdGb3JSZW5kZXJlcjsKKyAgICBGbG9hdFJlY3QgbV92aXNpYmxlQ29udGVudHNSZWN0Owor
CisgICAgYm9vbCBtX3Nob3VsZFN5bmNGcmFtZTsKKyAgICBib29sIG1fZGlkSW5pdGlhbGl6ZVJv
b3RDb21wb3NpdGluZ0xheWVyOworICAgIFRpbWVyPENvbXBvc2l0aW5nQ29vcmRpbmF0b3I+IG1f
cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyOworfTsKKworfQorCisjZW5kaWYKKworI2VuZGlm
IC8vIENvbXBvc2l0aW5nQ29vcmRpbmF0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggZGE2MmRjZDgwZWQw
OThmYmU1MDJlZjlkZWI5ZjlkZmNjYTQ0ZjVkNS4uNDEyNzVmZWVmYmY5YjE3OTZmMjc5YTk0OGY1
YTM5NWFiZDgyMWYwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCkBAIC00MCwxOCArNDAsOSBAQAogI2luY2x1ZGUg
IldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1N1
cmZhY2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1BhZ2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckJhY2tpbmcuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1JlbmRlckxheWVyQ29tcG9zaXRvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1N1cmZh
Y2VVcGRhdGVJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllci5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotI2luY2x1ZGUgPHd0Zi9UZW1w
b3JhcnlDaGFuZ2UuaD4KIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICNpbmNsdWRlICJDdXN0
b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmgiCkBAIC03Miw0OSArNjMsMjcgQEAgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0Ojp+Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KCkKICNpZiBFTkFCTEUo
Q1NTX1NIQURFUlMpCiAgICAgZGlzY29ubmVjdEN1c3RvbUZpbHRlclByb2dyYW1zKCk7CiAjZW5k
aWYKLSAgICBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKLQotICAgIExheWVyTWFwOjppdGVyYXRvciBl
bmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7Ci0gICAgZm9yIChMYXllck1hcDo6aXRlcmF0
b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBpdC0+dmFsdWUtPnNldENvb3JkaW5hdG9yKDApOwogfQogCiBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdChXZWJQYWdlKiB3ZWJQYWdlKQogICAg
IDogTGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKQotICAgICwgbV9yb290Q29tcG9zaXRpbmdMYXllcigw
KQogICAgICwgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2goZmFsc2UpCiAgICAgLCBt
X2lzVmFsaWQodHJ1ZSkKLSAgICAsIG1faXNQdXJnaW5nKGZhbHNlKQotICAgICwgbV9pc0ZsdXNo
aW5nTGF5ZXJDaGFuZ2VzKGZhbHNlKQotICAgICwgbV93YWl0aW5nRm9yVUlQcm9jZXNzKHRydWUp
CiAgICAgLCBtX2lzU3VzcGVuZGVkKGZhbHNlKQotICAgICwgbV9zaG91bGRTeW5jRnJhbWUoZmFs
c2UpCi0gICAgLCBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcihmYWxzZSkKICAg
ICAsIG1fbGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6Omxh
eWVyRmx1c2hUaW1lckZpcmVkKQotICAgICwgbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIo
dGhpcywgJkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1Rp
bWVyRmlyZWQpCiAgICAgLCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCh0cnVlKQogICAg
ICwgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQoMCkKLSAgICAsIG1fYW5pbWF0aW9uc0xv
Y2tlZChmYWxzZSkKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiAgICAgLCBt
X2xhc3RBbmltYXRpb25TZXJ2aWNlVGltZSgwKQogI2VuZGlmCiB7Ci0gICAgbV93ZWJQYWdlLT5j
b3JlUGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBcHBseURldmljZVNjYWxlRmFjdG9ySW5Db21wb3Np
dG9yKHRydWUpOwogCi0gICAgLy8gQ3JlYXRlIGEgcm9vdCBsYXllci4KLSAgICBtX3Jvb3RMYXll
ciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzLCB0aGlzKTsKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgbV9yb290TGF5ZXItPnNldE5hbWUoIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCByb290IGxh
eWVyIik7Ci0jZW5kaWYKLSAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsK
LSAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7Ci0gICAgbV9sYXll
clRyZWVDb250ZXh0LmNvb3JkaW5hdGVkTGF5ZXJJRCA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyKG1fcm9vdExheWVyLmdldCgpKS0+aWQoKTsKKyAgICBtX2Nvb3JkaW5hdG9yID0gQ29tcG9z
aXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlKHdlYlBhZ2UtPmNvcmVQYWdlKCksIHRoaXMpOwogCi0g
ICAgQ29vcmRpbmF0ZWRTdXJmYWNlOjpzZXRGYWN0b3J5KGNyZWF0ZUNvb3JkaW5hdGVkU3VyZmFj
ZSk7CisgICAgbV9jb29yZGluYXRvci0+Y3JlYXRlUm9vdExheWVyKG1fd2ViUGFnZS0+c2l6ZSgp
KTsKKyAgICBtX2xheWVyVHJlZUNvbnRleHQuY29vcmRpbmF0ZWRMYXllcklEID0gdG9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIocm9vdExheWVyKCkpLT5pZCgpOwogCi0gICAgLy8gVGhpcyBpcyBh
IHRlbXBvcmFyeSB3YXkgdG8gZW5hYmxlIHRoaXMgb25seSBpbiB0aGUgR0wgY2FzZSwgdW50aWwg
VGV4dHVyZU1hcHBlckltYWdlQnVmZmVyIGlzIHJlbW92ZWQuCi0gICAgLy8gU2VlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ4NjkKLSAgICBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnNldFNob3VsZFN1cHBvcnRDb250ZW50c1RpbGluZyh0cnVlKTsKKyAgICBD
b29yZGluYXRlZFN1cmZhY2U6OnNldEZhY3RvcnkoY3JlYXRlQ29vcmRpbmF0ZWRTdXJmYWNlKTsK
IAogICAgIGlmIChtX3dlYlBhZ2UtPmhhc1BhZ2VPdmVybGF5KCkpCiAgICAgICAgIGNyZWF0ZVBh
Z2VPdmVybGF5TGF5ZXIoKTsKQEAgLTE1OCwxMiArMTI3LDcgQEAgdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2go
Ym9vbAogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdENvbXBvc2l0aW5n
TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKIHsKLSAgICBpZiAo
bV9yb290Q29tcG9zaXRpbmdMYXllcikKLSAgICAgICAgbV9yb290Q29tcG9zaXRpbmdMYXllci0+
cmVtb3ZlRnJvbVBhcmVudCgpOwotCi0gICAgbV9yb290Q29tcG9zaXRpbmdMYXllciA9IGdyYXBo
aWNzTGF5ZXI7Ci0gICAgaWYgKG1fcm9vdENvbXBvc2l0aW5nTGF5ZXIpCi0gICAgICAgIG1fcm9v
dExheWVyLT5hZGRDaGlsZEF0SW5kZXgobV9yb290Q29tcG9zaXRpbmdMYXllciwgMCk7CisgICAg
bV9jb29yZGluYXRvci0+c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoZ3JhcGhpY3NMYXllcik7CiB9
CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKCkKQEAgLTE3MSw3
ICsxMzUsNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6aW52YWxpZGF0ZSgpCiAg
ICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKIAogICAgIEFTU0VSVChtX2lzVmFsaWQpOwot
ICAgIG1fcm9vdExheWVyID0gbnVsbHB0cjsKKyAgICBtX2Nvb3JkaW5hdG9yLT5jbGVhclJvb3RM
YXllcigpOwogICAgIG1faXNWYWxpZCA9IGZhbHNlOwogfQogCkBAIC0xODQsNyArMTQ4LDcgQEAg
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZvcmNlUmVwYWludCgpCiAgICAgLy8gV2Ug
bmVlZCB0byBzY2hlZHVsZSBhbm90aGVyIGZsdXNoLCBvdGhlcndpc2UgdGhlIGZvcmNlZCBwYWlu
dCBtaWdodCBjYW5jZWwgYSBsYXRlciBleHBlY3RlZCBmbHVzaC4KICAgICAvLyBUaGlzIGlzIGFs
aWduZWQgd2l0aCBMYXllclRyZWVIb3N0Q0EuCiAgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0g
ICAgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7CisgICAgbV9jb29yZGluYXRvci0+Zmx1c2hQ
ZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7CiB9CiAKIGJvb2wgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
Ojpmb3JjZVJlcGFpbnRBc3luYyh1aW50NjRfdCBjYWxsYmFja0lEKQpAQCAtMTk4LDcgKzE2Miw3
IEBAIGJvb2wgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnRBc3luYyh1aW50
NjRfdCBjYWxsYmFja0lEKQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2l6ZURp
ZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKQogewotICAgIG1fcm9vdExh
eWVyLT5zZXRTaXplKG5ld1NpemUpOworICAgIG1fY29vcmRpbmF0b3ItPnNpemVEaWRDaGFuZ2Uo
bmV3U2l6ZSk7CiAgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CiB9CiAKQEAgLTIzMyw5MSArMTk3
LDIxIEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRQYWdlT3ZlcmxheU9wYWNp
dHkoUGFnZU92ZXJsYXkqLCBmbG9hdCB2YWx1ZSkKICAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsK
IH0KIAotYm9vbCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0xheWVyQ2hh
bmdlcygpCi17Ci0gICAgaWYgKG1fd2FpdGluZ0ZvclVJUHJvY2VzcykKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IHByb3RlY3RvcihtX2lzRmx1c2hp
bmdMYXllckNoYW5nZXMsIHRydWUpOwotCi0gICAgaW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xh
eWVySWZOZWVkZWQoKTsKLQotICAgIG1fcm9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVG
b3JUaGlzTGF5ZXJPbmx5KCk7Ci0gICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKLSAgICAgICAg
bV9wYWdlT3ZlcmxheUxheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5
KCk7Ci0KLSAgICBib29sIGRpZFN5bmMgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFt
ZSgpLT52aWV3KCktPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOwot
Ci0gICAgdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT51cGRh
dGVDb250ZW50QnVmZmVyc0luY2x1ZGluZ1N1YkxheWVyZXMoKTsKLSAgICB0b0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnN5bmNQZW5kaW5nU3RhdGVDaGFuZ2Vz
SW5jbHVkaW5nU3ViTGF5ZXJzKCk7Ci0KLSAgICBmbHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFu
Z2VzKCk7Ci0KLSAgICBpZiAobV9zaG91bGRTeW5jRnJhbWUpIHsKLSAgICAgICAgZGlkU3luYyA9
IHRydWU7Ci0KLSAgICAgICAgaWYgKG1fcm9vdENvbXBvc2l0aW5nTGF5ZXIpIHsKLSAgICAgICAg
ICAgIG1fc3RhdGUuY29udGVudHNTaXplID0gcm91bmRlZEludFNpemUobV9yb290Q29tcG9zaXRp
bmdMYXllci0+c2l6ZSgpKTsKLSAgICAgICAgICAgIGlmIChDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIqIGNvbnRlbnRzTGF5ZXIgPSBtYWluQ29udGVudHNMYXllcigpKQotICAgICAgICAgICAgICAg
IG1fc3RhdGUuY292ZXJlZFJlY3QgPSBjb250ZW50c0xheWVyLT5jb3ZlclJlY3QoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIG1fc3RhdGUuc2Nyb2xsUG9zaXRpb24gPSBtX3Zpc2libGVDb250ZW50
c1JlY3QubG9jYXRpb24oKTsKLQotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDb21taXRDb29yZGluYXRlZEdyYXBoaWNzU3Rh
dGUobV9zdGF0ZSkpOwotCi0gICAgICAgIGNsZWFyUGVuZGluZ1N0YXRlQ2hhbmdlcygpOwotICAg
ICAgICBtX3dhaXRpbmdGb3JVSVByb2Nlc3MgPSB0cnVlOwotICAgICAgICBtX3Nob3VsZFN5bmNG
cmFtZSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtX2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJh
Y2tJRCkgewotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
Vm9pZENhbGxiYWNrKG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEKSk7Ci0gICAgICAgIG1f
Zm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEID0gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGlk
U3luYzsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNsZWFyUGVuZGluZ1N0
YXRlQ2hhbmdlcygpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZUNv
bnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWpl
Y3RvcnlWZWN0b3IpCiB7Ci0gICAgbV9zdGF0ZS5sYXllcnNUb0NyZWF0ZS5jbGVhcigpOwotICAg
IG1fc3RhdGUubGF5ZXJzVG9VcGRhdGUuY2xlYXIoKTsKLSAgICBtX3N0YXRlLmxheWVyc1RvUmVt
b3ZlLmNsZWFyKCk7Ci0KLSAgICBtX3N0YXRlLmltYWdlc1RvQ3JlYXRlLmNsZWFyKCk7Ci0gICAg
bV9zdGF0ZS5pbWFnZXNUb1JlbW92ZS5jbGVhcigpOwotICAgIG1fc3RhdGUuaW1hZ2VzVG9VcGRh
dGUuY2xlYXIoKTsKLSAgICBtX3N0YXRlLmltYWdlc1RvQ2xlYXIuY2xlYXIoKTsKLQotICAgIG1f
c3RhdGUudXBkYXRlQXRsYXNlc1RvQ3JlYXRlLmNsZWFyKCk7Ci0gICAgbV9zdGF0ZS51cGRhdGVB
dGxhc2VzVG9SZW1vdmUuY2xlYXIoKTsKLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBt
X3N0YXRlLmN1c3RvbUZpbHRlcnNUb0NyZWF0ZS5jbGVhcigpOwotICAgIG1fc3RhdGUuY3VzdG9t
RmlsdGVyc1RvUmVtb3ZlLmNsZWFyKCk7Ci0jZW5kaWYKKyAgICBtX2Nvb3JkaW5hdG9yLT5zZXRW
aXNpYmxlQ29udGVudHNSZWN0KHJlY3QsIHRyYWplY3RvcnlWZWN0b3IpOworICAgIHNjaGVkdWxl
TGF5ZXJGbHVzaCgpOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6aW5pdGlh
bGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQoKQordm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZSgpCiB7Ci0gICAgaWYgKG1fZGlkSW5pdGlhbGl6ZVJv
b3RDb21wb3NpdGluZ0xheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0YXRlLnJvb3RD
b21wb3NpdGluZ0xheWVyID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIu
Z2V0KCkpLT5pZCgpOwotICAgIG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyID0g
dHJ1ZTsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV9jb29yZGluYXRvci0+
cmVuZGVyTmV4dEZyYW1lKCk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CiB9CiAKLXZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVy
SUQgaWQsIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKK3ZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpwdXJnZUJhY2tpbmdTdG9yZXMoKQogewotICAgIG1fc2hvdWxk
U3luY0ZyYW1lID0gdHJ1ZTsKLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBwcmVwYXJl
Q3VzdG9tRmlsdGVyUHJveGllc0lmTmVlZGVkKHN0YXRlKTsKLSNlbmRpZgotCi0gICAgbV9zdGF0
ZS5sYXllcnNUb1VwZGF0ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoaWQsIHN0YXRlKSk7CisgICAg
bV9jb29yZGluYXRvci0+cHVyZ2VCYWNraW5nU3RvcmVzKCk7CiB9CiAKICNpZiBFTkFCTEUoQ1NT
X1NIQURFUlMpCkBAIC0zNjcsNyArMjYxLDcgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoY29uc3QgRmlsdGVyT3BlcmEKICAg
ICAgICAgaWYgKCFjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmNsaWVudCgpKSB7CiAgICAgICAg
ICAgICBjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPnNldENsaWVudCh0aGlzKTsKICAgICAgICAg
ICAgIG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMuYWRkKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS5n
ZXQoKSk7Ci0gICAgICAgICAgICBtX3N0YXRlLmN1c3RvbUZpbHRlcnNUb0NyZWF0ZS5hcHBlbmQo
c3RkOjptYWtlX3BhaXIoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpLCBjdXN0b21PcGVy
YXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKS0+dmFsaWRhdGVkUHJvZ3JhbUluZm8oKSkpOworICAg
ICAgICAgICAgbV9jb29yZGluYXRvci0+c3RhdGUoKS5jdXN0b21GaWx0ZXJzVG9DcmVhdGUuYXBw
ZW5kKHN0ZDo6bWFrZV9wYWlyKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+aWQoKSwgY3VzdG9t
T3BlcmF0aW9uLT52YWxpZGF0ZWRQcm9ncmFtKCktPnZhbGlkYXRlZFByb2dyYW1JbmZvKCkpKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBjbGllbnQgd2FzIG5vdCBk
aXNjb25uZWN0ZWQgdGhlbiB0aGlzIGNvb3JkaW5hdG9yIG11c3QgYmUgdGhlIGNsaWVudCBmb3Ig
aXQuCiAgICAgICAgICAgICBBU1NFUlQoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5jbGllbnQo
KSA9PSB0aGlzKTsKQEAgLTM4MCw3ICsyNzQsNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KFdlYkN1c3RvbUZpbHRlclBybwog
ICAgIC8vIEF0IHRoaXMgdGltZSB0aGUgc2hhZGVyIGlzIG5vdCBuZWVkZWQgYW55bW9yZSwgc28g
d2UgcmVtb3ZlIGl0IGZyb20gb3VyIHNldCBhbmQKICAgICAvLyBzZW5kIGEgbWVzc2FnZSB0byB0
aGUgb3RoZXIgcHJvY2VzcyB0byBkZWxldGUgaXQuCiAgICAgbV9jdXN0b21GaWx0ZXJQcm9ncmFt
cy5yZW1vdmUoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KTsKLSAgICBtX3N0YXRlLmN1c3RvbUZp
bHRlcnNUb1JlbW92ZS5hcHBlbmQoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpKTsKKyAg
ICBtX2Nvb3JkaW5hdG9yLT5zdGF0ZSgpLmN1c3RvbUZpbHRlcnNUb1JlbW92ZS5hcHBlbmQoY3Vz
dG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmRpc2Nvbm5lY3RDdXN0b21GaWx0ZXJQcm9ncmFtcygpCkBAIC0zOTIsMjMgKzI4
NiwxNSBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGlzY29ubmVjdEN1c3RvbUZp
bHRlclByb2dyYW1zKCkKIH0KICNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NIQURFUlMpCiAKLXZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXRhY2hMYXllcihDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIqIGxheWVyKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZsdXNoQ29tcG9z
aXRpbmdTdGF0ZVBlcmlwaGVyYWxMYXllcnMoKQogewotICAgIG1fcmVnaXN0ZXJlZExheWVycy5y
ZW1vdmUobGF5ZXItPmlkKCkpOwotCi0gICAgc2l6ZV90IGluZGV4ID0gbV9zdGF0ZS5sYXllcnNU
b0NyZWF0ZS5maW5kKGxheWVyLT5pZCgpKTsKLSAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpIHsK
LSAgICAgICAgbV9zdGF0ZS5sYXllcnNUb0NyZWF0ZS5yZW1vdmUoaW5kZXgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgbV9zdGF0ZS5sYXllcnNUb1JlbW92ZS5hcHBlbmQobGF5ZXIt
PmlkKCkpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIGlmIChtX3BhZ2VPdmVybGF5
TGF5ZXIpCisgICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRl
Rm9yVGhpc0xheWVyT25seSgpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQogewotICAgIGlmIChtX2lzU3VzcGVuZGVkIHx8
IG1fd2FpdGluZ0ZvclVJUHJvY2VzcykKKyAgICBpZiAobV9pc1N1c3BlbmRlZCB8fCBtX2Nvb3Jk
aW5hdG9yLT5pc1dhaXRpbmdGb3JSZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAKICAgICBz
eW5jRGlzcGxheVN0YXRlKCk7CkBAIC00MTYsOCArMzAyLDE3IEBAIHZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpCiAgICAgaWYgKCFtX2lz
VmFsaWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChmbHVzaFBlbmRpbmdMYXllckNoYW5n
ZXMoKSkKLSAgICAgICAgZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKKyAgICBib29s
IGRpZFN5bmMgPSBtX2Nvb3JkaW5hdG9yLT5mbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKKwor
ICAgIGlmIChtX2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJRCkgeworICAgICAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNrKG1fZm9yY2VSZXBh
aW50QXN5bmNDYWxsYmFja0lEKSk7CisgICAgICAgIG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFj
a0lEID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1
c2ggJiYgZGlkU3luYykgeworICAgICAgICBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYUltcGwqPiht
X3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCkpLT5sYXllckhvc3REaWRGbHVzaExheWVycygpOworICAg
ICAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOworICAgIH0KIH0K
IAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNEaXNwbGF5U3RhdGUoKQpAQCAt
NDM1LDE0ICszMzAsNiBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0Rpc3Bs
YXlTdGF0ZSgpCiAgICAgbV93ZWJQYWdlLT5sYXlvdXRJZk5lZWRlZCgpOwogfQogCi12b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQot
ewotICAgIGlmIChtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCkgewotICAgICAgICBz
dGF0aWNfY2FzdDxEcmF3aW5nQXJlYUltcGwqPihtX3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCkpLT5s
YXllckhvc3REaWRGbHVzaExheWVycygpOwotICAgICAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVk
TGF5ZXJGbHVzaCA9IGZhbHNlOwotICAgIH0KLX0KLQogdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OmxheWVyRmx1c2hUaW1lckZpcmVkKFRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dD4qKQogewogICAgIHBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7CkBAIC00NTIsMTUgKzMz
OSwxNSBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlUGFnZU92ZXJsYXlM
YXllcigpCiB7CiAgICAgQVNTRVJUKCFtX3BhZ2VPdmVybGF5TGF5ZXIpOwogCi0gICAgbV9wYWdl
T3ZlcmxheUxheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMsIHRoaXMpOworICAgIG1f
cGFnZU92ZXJsYXlMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShncmFwaGljc0xheWVyRmFj
dG9yeSgpLCBtX2Nvb3JkaW5hdG9yLmdldCgpKTsKICNpZm5kZWYgTkRFQlVHCi0gICAgbV9wYWdl
T3ZlcmxheUxheWVyLT5zZXROYW1lKCJDb29yZGluYXRlZExheWVyVHJlZUhvc3QgcGFnZSBvdmVy
bGF5IGNvbnRlbnQiKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5hbWUoIkNvbXBvc2l0
aW5nQ29vcmRpbmF0b3IgcGFnZSBvdmVybGF5IGNvbnRlbnQiKTsKICNlbmRpZgogCiAgICAgbV9w
YWdlT3ZlcmxheUxheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0gICAgbV9wYWdlT3Zlcmxh
eUxheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5
ZXItPnNldFNpemUocm9vdExheWVyKCktPnNpemUoKSk7CiAKLSAgICBtX3Jvb3RMYXllci0+YWRk
Q2hpbGQobV9wYWdlT3ZlcmxheUxheWVyLmdldCgpKTsKKyAgICByb290TGF5ZXIoKS0+YWRkQ2hp
bGQobV9wYWdlT3ZlcmxheUxheWVyLmdldCgpKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCkKQEAgLTQ3MCw2NSArMzU3LDcgQEAg
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCkK
ICAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBudWxscHRyOwogfQogCi1QYXNzUmVmUHRyPENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUltYWdl
QmFja2luZ0lmTmVlZGVkKEltYWdlKiBpbWFnZSkKLXsKLSAgICBDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEIGltYWdlSUQgPSBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Z2V0Q29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRChpbWFnZSk7Ci0gICAgSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdCA9
IG1faW1hZ2VCYWNraW5ncy5maW5kKGltYWdlSUQpOwotICAgIFJlZlB0cjxDb29yZGluYXRlZElt
YWdlQmFja2luZz4gaW1hZ2VCYWNraW5nOwotICAgIGlmIChpdCA9PSBtX2ltYWdlQmFja2luZ3Mu
ZW5kKCkpIHsKLSAgICAgICAgaW1hZ2VCYWNraW5nID0gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6
OmNyZWF0ZSh0aGlzLCBpbWFnZSk7Ci0gICAgICAgIG1faW1hZ2VCYWNraW5ncy5hZGQoaW1hZ2VJ
RCwgaW1hZ2VCYWNraW5nKTsKLSAgICB9IGVsc2UKLSAgICAgICAgaW1hZ2VCYWNraW5nID0gaXQt
PnZhbHVlOwotCi0gICAgcmV0dXJuIGltYWdlQmFja2luZzsKLX0KLQotdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEIGltYWdlSUQpCi17Ci0gICAgbV9zdGF0ZS5pbWFnZXNUb0NyZWF0ZS5hcHBlbmQoaW1hZ2VJ
RCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp1cGRhdGVJbWFnZUJhY2tp
bmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlELCBQYXNzUmVmUHRyPENvb3JkaW5h
dGVkU3VyZmFjZT4gY29vcmRpbmF0ZWRTdXJmYWNlKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1l
ID0gdHJ1ZTsKLSAgICBtX3N0YXRlLmltYWdlc1RvVXBkYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFp
cihpbWFnZUlELCBjb29yZGluYXRlZFN1cmZhY2UpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmdJRCBpbWFnZUlEKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBt
X3N0YXRlLmltYWdlc1RvQ2xlYXIuYXBwZW5kKGltYWdlSUQpOwotfQotCi12b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBpZiAobV9pc1B1cmdpbmcpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChtX2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkpOwotICAgIG1f
aW1hZ2VCYWNraW5ncy5yZW1vdmUoaW1hZ2VJRCk7Ci0KLSAgICBtX3N0YXRlLmltYWdlc1RvUmVt
b3ZlLmFwcGVuZChpbWFnZUlEKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OmZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKQotewotICAgIEltYWdlQmFja2luZ01h
cDo6aXRlcmF0b3IgZW5kID0gbV9pbWFnZUJhY2tpbmdzLmVuZCgpOwotICAgIGZvciAoSW1hZ2VC
YWNraW5nTWFwOjppdGVyYXRvciBpdGVyID0gbV9pbWFnZUJhY2tpbmdzLmJlZ2luKCk7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGl0ZXItPnZhbHVlLT51cGRhdGUoKTsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSAvKiB0aW1lICovKQotewotfQotCi12b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKikKLXsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQot
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnBhaW50Q29udGVudHMoY29uc3QgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
JiBncmFwaGljc0NvbnRleHQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCkKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIs
IEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVj
dCkKIHsKICAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX3BhZ2VPdmVybGF5TGF5ZXIpIHsKICAg
ICAgICAgLy8gT3ZlcmxheXMgY29udGFpbiB0cmFuc3BhcmVudCBjb250ZW50cyBhbmQgd29uJ3Qg
Y2xlYXIgdGhlIGNvbnRleHQgYXMgcGFydCBvZiB0aGVpciByZW5kZXJpbmcsIHNvIHdlIGRvIGl0
IGhlcmUuCkBAIC01MzgsMTUgKzM2Nyw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoCiAgICAg
fQogfQogCi1QYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6Y3JlYXRlR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCit2b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRl
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKiBsYXllciA9IG5ldyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIo
Y2xpZW50KTsKLSAgICBsYXllci0+c2V0Q29vcmRpbmF0b3IodGhpcyk7Ci0gICAgbV9yZWdpc3Rl
cmVkTGF5ZXJzLmFkZChsYXllci0+aWQoKSwgbGF5ZXIpOwotICAgIG1fc3RhdGUubGF5ZXJzVG9D
cmVhdGUuYXBwZW5kKGxheWVyLT5pZCgpKTsKLSAgICBsYXllci0+c2V0TmVlZHNWaXNpYmxlUmVj
dEFkanVzdG1lbnQoKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLSAgICByZXR1cm4gYWRv
cHRQdHIobGF5ZXIpOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OkNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZShzdGF0ZSkp
OwogfQogCiBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpjcmVhdGVDb29yZGluYXRlZFN1cmZhY2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29v
cmRpbmF0ZWRTdXJmYWNlOjpGbGFncyBmbGFncykKQEAgLTU1NCw3MyArMzc3LDE0IEBAIFBhc3NS
ZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0
ZUNvb3JkaW5hdGVkU3VyZmFjCiAgICAgcmV0dXJuIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3Jl
YXRlKHNpemUsIGZsYWdzKTsKIH0KIAotZmxvYXQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpk
ZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS0+ZGV2aWNl
U2NhbGVGYWN0b3IoKTsKLX0KLQotZmxvYXQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwYWdl
U2NhbGVGYWN0b3IoKSBjb25zdAotewotICAgIHJldHVybiBtX3dlYlBhZ2UtPnBhZ2VTY2FsZUZh
Y3RvcigpOwotfQotCiBib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZygpCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRy
PENvb3JkaW5hdGVkU3VyZmFjZT4gY29vcmRpbmF0ZWRTdXJmYWNlKQotewotICAgIG1fc3RhdGUu
dXBkYXRlQXRsYXNlc1RvQ3JlYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihhdGxhc0lELCBjb29y
ZGluYXRlZFN1cmZhY2UpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJl
bW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCi17Ci0gICAgaWYgKG1faXNQdXJnaW5n
KQotICAgICAgICByZXR1cm47Ci0gICAgbV9zdGF0ZS51cGRhdGVBdGxhc2VzVG9SZW1vdmUuYXBw
ZW5kKGF0bGFzSUQpOwotfQotCi1XZWJDb3JlOjpGbG9hdFJlY3QgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0Ojp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV92aXNp
YmxlQ29udGVudHNSZWN0OwotfQotCi1Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6bWFpbkNvbnRlbnRzTGF5ZXIoKQotewotICAgIGlmICghbV9yb290
Q29tcG9zaXRpbmdMYXllcikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gdG9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290Q29tcG9zaXRpbmdMYXllciktPmZpbmRGaXJzdERl
c2NlbmRhbnRXaXRoQ29udGVudHNSZWN1cnNpdmVseSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCi17Ci0gICAgLy8gQSB6ZXJv
IHRyYWplY3RvcnlWZWN0b3IgaW5kaWNhdGVzIHRoYXQgdGlsZXMgYWxsIGFyb3VuZCB0aGUgdmll
d3BvcnQgYXJlIHJlcXVlc3RlZC4KLSAgICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBj
b250ZW50c0xheWVyID0gbWFpbkNvbnRlbnRzTGF5ZXIoKSkKLSAgICAgICAgY29udGVudHNMYXll
ci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9y
KTsKLQotICAgIGJvb2wgY29udGVudHNSZWN0RGlkQ2hhbmdlID0gcmVjdCAhPSBtX3Zpc2libGVD
b250ZW50c1JlY3Q7Ci0gICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSkgewotICAgICAgICBt
X3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0OwotCi0gICAgICAgIExheWVyTWFwOjppdGVyYXRv
ciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7Ci0gICAgICAgIGZvciAoTGF5ZXJNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVu
dCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAg
aWYgKG1fd2ViUGFnZS0+dXNlRml4ZWRMYXlvdXQoKSkgewotICAgICAgICAvLyBSb3VuZCB0aGUg
cmVjdCBpbnN0ZWFkIG9mIGVuY2xvc2luZyBpdCB0byBtYWtlIHN1cmUgdGhhdCBpdHMgc2l6ZSBz
dGF5cwotICAgICAgICAvLyB0aGUgc2FtZSB3aGlsZSBwYW5uaW5nLiBUaGlzIGNhbiBoYXZlIG5h
c3R5IGVmZmVjdHMgb24gbGF5b3V0LgotICAgICAgICBtX3dlYlBhZ2UtPnNldEZpeGVkVmlzaWJs
ZUNvbnRlbnRSZWN0KHJvdW5kZWRJbnRSZWN0KHJlY3QpKTsKLSAgICB9Ci19Ci0KIHZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKQog
ewotICAgIG1fcm9vdExheWVyLT5kZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKKyAg
ICBtX2Nvb3JkaW5hdG9yLT5kZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKICAgICBp
ZiAobV9wYWdlT3ZlcmxheUxheWVyKQogICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPmRldmlj
ZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwogfQpAQCAtNjMxLDEzICszOTUsMTMgQEAgdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnBhZ2VCYWNrZ3JvdW5kVHJhbnNwYXJlbmN5Q2hh
bmdlZCgpCiAKIEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkKIHsKLSAgICByZXR1cm4gdGhpczsKKyAgICByZXR1cm4g
bV9jb29yZGluYXRvci5nZXQoKTsKIH0KIAogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9G
UkFNRSkKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZUFuaW1hdGlvbigp
CiB7Ci0gICAgaWYgKG1fd2FpdGluZ0ZvclVJUHJvY2VzcykKKyAgICBpZiAobV9jb29yZGluYXRv
ci0+aXNXYWl0aW5nRm9yUmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1f
bGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCkBAIC02NTAsODggKzQxNCw2IEBAIHZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZUFuaW1hdGlvbigpCiB9CiAjZW5kaWYKIAot
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZSgpCi17Ci0gICAg
bV93YWl0aW5nRm9yVUlQcm9jZXNzID0gZmFsc2U7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsr
aSkKLSAgICAgICAgbV91cGRhdGVBdGxhc2VzW2ldLT5kaWRTd2FwQnVmZmVycygpOwotfQotCi12
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKLXsKLSAg
ICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gcHVyZ2luZ1RvZ2dsZShtX2lzUHVyZ2luZywgdHJ1ZSk7
Ci0KLSAgICBMYXllck1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgp
OwotICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnZhbHVlLT5wdXJnZUJhY2tpbmdT
dG9yZXMoKTsKLQotICAgIG1faW1hZ2VCYWNraW5ncy5jbGVhcigpOwotICAgIG1fdXBkYXRlQXRs
YXNlcy5jbGVhcigpOwotfQotCi1HcmFwaGljc0NvbnRleHQqIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IEludFNpemUmIHNpemUsIENvb3JkaW5hdGVk
U3VyZmFjZTo6RmxhZ3MgZmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBJbnRQb2ludCYgb2Zmc2V0
KQotewotICAgIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0OwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
VXBkYXRlQXRsYXMqIGF0bGFzID0gbV91cGRhdGVBdGxhc2VzW2ldLmdldCgpOwotICAgICAgICBp
ZiAoYXRsYXMtPnN1cHBvcnRzQWxwaGEoKSA9PSAoZmxhZ3MgJiBDb29yZGluYXRlZFN1cmZhY2U6
OlN1cHBvcnRzQWxwaGEpKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIG51bGwg
aWYgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIGJ1ZmZlciBzcGFjZS4KLSAgICAgICAgICAgIGdyYXBo
aWNzQ29udGV4dCA9IGF0bGFzLT5iZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoYXRsYXNJ
RCwgc2l6ZSwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChncmFwaGljc0NvbnRleHQpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4dDsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHN0YXRpYyBjb25zdCBpbnQgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiA9IDEwMjQ7IC8vIFNo
b3VsZCBiZSBhIHBvd2VyIG9mIHR3by4KLSAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKGFkb3B0
UHRyKG5ldyBVcGRhdGVBdGxhcyh0aGlzLCBTY3JhdGNoQnVmZmVyRGltZW5zaW9uLCBmbGFncykp
KTsKLSAgICBzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMoKTsKLSAgICByZXR1cm4gbV91
cGRhdGVBdGxhc2VzLmxhc3QoKS0+YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGF0bGFz
SUQsIHNpemUsIG9mZnNldCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpl
bmRDb250ZW50VXBkYXRlKHVpbnQzMl90IGF0bGFzSUQpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV91
cGRhdGVBdGxhc2VzW2ldLT5pZCgpID09IGF0bGFzSUQpIHsKLSAgICAgICAgICAgIG1fdXBkYXRl
QXRsYXNlc1tpXS0+ZW5kUGFpbnRpbmcoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotY29uc3QgZG91YmxlIFJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lcklu
dGVydmFsID0gMC41OwotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVS
ZWxlYXNlSW5hY3RpdmVBdGxhc2VzKCkKLXsKLSAgICBpZiAoIW1fcmVsZWFzZUluYWN0aXZlQXRs
YXNlc1RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1Rp
bWVyLnN0YXJ0UmVwZWF0aW5nKFJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckludGVydmFsKTsK
LX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbGVhc2VJbmFjdGl2ZUF0bGFz
ZXNUaW1lckZpcmVkKFRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4qKQotewotICAgIC8v
IFdlIGFsd2F5cyB3YW50IHRvIGtlZXAgb25lIGF0bGFzIGZvciBub24tY29tcG9zaXRlZCBjb250
ZW50LgotICAgIE93blB0cjxVcGRhdGVBdGxhcz4gYXRsYXNUb0tlZXBBbnl3YXk7Ci0gICAgYm9v
bCBmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgPSBmYWxzZTsKLSAgICBm
b3IgKGludCBpID0gbV91cGRhdGVBdGxhc2VzLnNpemUoKSAtIDE7ICBpID49IDA7IC0taSkgewot
ICAgICAgICBVcGRhdGVBdGxhcyogYXRsYXMgPSBtX3VwZGF0ZUF0bGFzZXNbaV0uZ2V0KCk7Ci0g
ICAgICAgIGlmICghYXRsYXMtPmlzSW5Vc2UoKSkKLSAgICAgICAgICAgIGF0bGFzLT5hZGRUaW1l
SW5hY3RpdmUoUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2YWwpOwotICAgICAgICBi
b29sIHVzYWJsZUZvck5vbkNvbXBvc2l0ZWRDb250ZW50ID0gIWF0bGFzLT5zdXBwb3J0c0FscGhh
KCk7Ci0gICAgICAgIGlmIChhdGxhcy0+aXNJbmFjdGl2ZSgpKSB7Ci0gICAgICAgICAgICBpZiAo
IWZvdW5kQWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVudCAmJiAhYXRsYXNUb0tlZXBB
bnl3YXkgJiYgdXNhYmxlRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQpCi0gICAgICAgICAgICAgICAg
YXRsYXNUb0tlZXBBbnl3YXkgPSBtX3VwZGF0ZUF0bGFzZXNbaV0ucmVsZWFzZSgpOwotICAgICAg
ICAgICAgbV91cGRhdGVBdGxhc2VzLnJlbW92ZShpKTsKLSAgICAgICAgfSBlbHNlIGlmICh1c2Fi
bGVGb3JOb25Db21wb3NpdGVkQ29udGVudCkKLSAgICAgICAgICAgIGZvdW5kQWN0aXZlQXRsYXNG
b3JOb25Db21wb3NpdGVkQ29udGVudCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFmb3VuZEFj
dGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgJiYgYXRsYXNUb0tlZXBBbnl3YXkpCi0g
ICAgICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBlbmQoYXRsYXNUb0tlZXBBbnl3YXkucmVsZWFzZSgp
KTsKLQotICAgIGlmIChtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpIDw9IDEpCi0gICAgICAgIG1fcmVs
ZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyLnN0b3AoKTsKLX0KLQogdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYgY29s
b3IpCiB7CiAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6U2V0QmFja2dyb3VuZENvbG9yKGNvbG9yKSk7CkBAIC03MzksMTEgKzQyMSw3
IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29u
c3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6Y29tbWl0U2Nyb2xsT2Zmc2V0KHVpbnQzMl90IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIG9mZnNldCkKIHsKLSAgICBMYXllck1hcDo6aXRlcmF0b3IgaSA9IG1fcmVnaXN0ZXJl
ZExheWVycy5maW5kKGxheWVySUQpOwotICAgIGlmIChpID09IG1fcmVnaXN0ZXJlZExheWVycy5l
bmQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaS0+dmFsdWUtPmNvbW1pdFNjcm9sbE9mZnNl
dChvZmZzZXQpOworICAgIG1fY29vcmRpbmF0b3ItPmNvbW1pdFNjcm9sbE9mZnNldChsYXllcklE
LCBvZmZzZXQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKaW5kZXggNmI4ZmVk
ZjAzYjk1YmUyNjI5MGU3NTM1MDQyMzVhNGYzN2E4MDE2Yy4uZjAwN2RmOWM1ODY3MDAyODBjNzVm
ZWNjNDQ4NTdiMWU3OGY3MGMyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKQEAgLTI1LDEzICsyNSw4IEBACiAKICNpbmNs
dWRlICJMYXllclRyZWVDb250ZXh0LmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgotI2lu
Y2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZS5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NvbXBvc2l0aW5n
Q29vcmRpbmF0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJGYWN0b3J5Lmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9VcGRhdGVBdGxhcy5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKQEAgLTQ2LDExICs0MSw3IEBAIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiBjbGFzcyBXZWJQYWdlOwogCi1jbGFzcyBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3QgOiBwdWJsaWMgTGF5ZXJUcmVlSG9zdCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVu
dAotICAgICwgcHVibGljIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudAot
ICAgICwgcHVibGljIFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDbGllbnQKLSAg
ICAsIHB1YmxpYyBXZWJDb3JlOjpVcGRhdGVBdGxhczo6Q2xpZW50Ci0gICAgLCBwdWJsaWMgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkKK2NsYXNzIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dCA6IHB1YmxpYyBMYXllclRyZWVIb3N0LCBwdWJsaWMgV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29y
ZGluYXRvcjo6Q2xpZW50CiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogICAgICwgV2ViQ3VzdG9t
RmlsdGVyUHJvZ3JhbVByb3h5Q2xpZW50CiAjZW5kaWYKQEAgLTg0LDE2ICs3NSwxMCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpIE9W
RVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBwYWdlQmFja2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5n
ZWQoKSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVz
c2FnZURlY29kZXImKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5
KiBncmFwaGljc0xheWVyRmFjdG9yeSgpIE9WRVJSSURFOwogICAgIFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllciogbWFpbkNvbnRlbnRzTGF5ZXIoKTsKIAotICAgIHZpcnR1YWwgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0KiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYsIFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiBh
dGxhc0lELCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KSBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IHZvaWQgZW5kQ29udGVudFVwZGF0ZSh1aW50MzJfdCBhdGxhc0lEKSBPVkVSUklERTsKLQogI2lm
IEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1
bGVBbmltYXRpb24oKSBPVkVSUklERTsKICNlbmRpZgpAQCAtMTAxLDU5ICs4NiwzMyBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U+
IGNyZWF0ZUNvb3JkaW5hdGVkU3VyZmFjZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyk7CiAKLSAgICB2b2lkIGNvbW1pdFNjcm9sbE9m
ZnNldCh1aW50MzJfdCBsYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBvZmZzZXQpOwot
CiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KFdlYlBh
Z2UqKTsKIAogcHJpdmF0ZToKLSAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgdmlydHVh
bCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciosIGRvdWJsZSB0aW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZChj
b25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29u
dGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dCYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBjbGlwUmVjdCk7Ci0gICAgdmlydHVhbCBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rv
cigpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yKCkg
Y29uc3QgT1ZFUlJJREU7Ci0KLSAgICAvLyBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q2xpZW50
Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhXZWJDb3JlOjpDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSW1hZ2VC
YWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlPikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNs
ZWFySW1hZ2VCYWNraW5nQ29udGVudHMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhXZWJDb3Jl
OjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKLQotICAgIHZvaWQgZmx1c2hQ
ZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpOwotCi0gICAgLy8gQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyQ2xpZW50Ci0gICAgdmlydHVhbCBib29sIGlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSBj
b25zdCBPVkVSUklERSB7IHJldHVybiBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXM7IH0KLSAgICB2
aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBj
cmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChXZWJDb3JlOjpJbWFnZSopIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRMYXllcklELCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOwotCi0g
ICAgLy8gVXBkYXRlQXRsYXM6OkNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVVcGRhdGVB
dGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkU3Vy
ZmFjZT4pIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50
MzJfdCBhdGxhc0lEKSBPVkVSUklERTsKLQotICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5Ci0g
ICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdyYXBo
aWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCopIE9WRVJSSURFOwotCiAgICAg
Ly8gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ci0gICAgdm9pZCBpbml0aWFsaXplUm9vdENvbXBv
c2l0aW5nTGF5ZXJJZk5lZWRlZCgpOwogICAgIHZvaWQgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigp
OwogICAgIHZvaWQgZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsKLSAgICBib29sIGZsdXNoUGVu
ZGluZ0xheWVyQ2hhbmdlcygpOwotICAgIHZvaWQgY2xlYXJQZW5kaW5nU3RhdGVDaGFuZ2VzKCk7
CiAgICAgdm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOwogICAgIHZvaWQgcGVyZm9ybVNj
aGVkdWxlZExheWVyRmx1c2goKTsKLSAgICB2b2lkIGRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZs
dXNoKCk7CiAgICAgdm9pZCBzeW5jRGlzcGxheVN0YXRlKCk7Ci0gICAgdm9pZCBsYXllckZsdXNo
VGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+Kik7Cisg
ICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIHJlbmRlck5leHRGcmFtZSgp
OworICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisgICAgdm9pZCBjb21taXRTY3JvbGxP
ZmZzZXQodWludDMyX3QgbGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgb2Zmc2V0KTsK
IAotICAgIHZvaWQgc2NoZWR1bGVSZWxlYXNlSW5hY3RpdmVBdGxhc2VzKCk7CisgICAgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9jb29yZGluYXRvci0+cm9v
dExheWVyKCk7IH0KIAotICAgIHZvaWQgcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQo
V2ViQ29yZTo6VGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiopOworICAgIHZvaWQgbGF5
ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
PiopOworCisgICAgLy8gQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q2xpZW50CisgICAgdmlydHVh
bCB2b2lkIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZVBlcmlwaGVyYWxMYXllcnMoKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoUmVxdWlyZWQoKSBPVkVSUklERSB7
IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9OworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRz
KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIGNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZShXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzU3RhdGUmKSBPVkVSUklERTsKIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAg
ICB2b2lkIHByZXBhcmVDdXN0b21GaWx0ZXJQcm94aWVzSWZOZWVkZWQoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUN1c3Rv
bUZpbHRlclByb3hpZXNJZk5lZWRlZChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJT
dGF0ZSYpIE9WRVJSSURFOwogCiAgICAgLy8gV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5Q2xp
ZW50CiAgICAgdm9pZCByZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkoV2ViQ3VzdG9tRmls
dGVyUHJvZ3JhbVByb3h5Kik7CkBAIC0xNjIsNDMgKzEyMSwyNSBAQCBwcml2YXRlOgogICAgIHZv
aWQgZGlzY29ubmVjdEN1c3RvbUZpbHRlclByb2dyYW1zKCk7CiAjZW5kaWYKIAotICAgIE93blB0
cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKLSAgICBXZWJDb3JlOjpHcmFw
aGljc0xheWVyKiBtX3Jvb3RDb21wb3NpdGluZ0xheWVyOworICAgIE93blB0cjxXZWJDb3JlOjpD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yPiBtX2Nvb3JkaW5hdG9yOwogCiAgICAgLy8gVGhlIHBhZ2Ug
b3ZlcmxheSBsYXllci4gV2lsbCBiZSBudWxsIGlmIHRoZXJlJ3Mgbm8gcGFnZSBvdmVybGF5Lgog
ICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3BhZ2VPdmVybGF5TGF5ZXI7CiAg
ICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBtX3BhZ2VPdmVybGF5OwogCi0gICAgV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc1N0YXRlIG1fc3RhdGU7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8V2Vi
Q29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIqPiBMYXllck1hcDsKLSAgICBMYXllck1hcCBtX3JlZ2lzdGVyZWRMYXllcnM7Ci0gICAgdHlw
ZWRlZiBIYXNoTWFwPFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxX
ZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZz4gPiBJbWFnZUJhY2tpbmdNYXA7Ci0gICAg
SW1hZ2VCYWNraW5nTWFwIG1faW1hZ2VCYWNraW5nczsKLSAgICBWZWN0b3I8T3duUHRyPFdlYkNv
cmU6OlVwZGF0ZUF0bGFzPiA+IG1fdXBkYXRlQXRsYXNlczsKLQogI2lmIEVOQUJMRShDU1NfU0hB
REVSUykKICAgICBIYXNoU2V0PFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSo+IG1fY3VzdG9t
RmlsdGVyUHJvZ3JhbXM7CiAjZW5kaWYKIAogICAgIGJvb2wgbV9ub3RpZnlBZnRlclNjaGVkdWxl
ZExheWVyRmx1c2g7CiAgICAgYm9vbCBtX2lzVmFsaWQ7Ci0gICAgLy8gV2UgZG9uJ3Qgc2VuZCB0
aGUgbWVzc2FnZXMgcmVsYXRlZCB0byByZWxlYXNpbmcgcmVzb3VyY2VzIHRvIFVJIFByb2Nlc3Mg
ZHVyaW5nIHB1cmdpbmcsIGJlY2F1c2UgVUkgUHJvY2VzcyBhbHJlYWR5IGhhZCByZW1vdmVkIGFs
bCByZXNvdXJjZXMuCi0gICAgYm9vbCBtX2lzUHVyZ2luZzsKLSAgICBib29sIG1faXNGbHVzaGlu
Z0xheWVyQ2hhbmdlczsKLQotICAgIGJvb2wgbV93YWl0aW5nRm9yVUlQcm9jZXNzOwogICAgIGJv
b2wgbV9pc1N1c3BlbmRlZDsKLSAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbV92aXNpYmxlQ29udGVu
dHNSZWN0OwogCiAgICAgTGF5ZXJUcmVlQ29udGV4dCBtX2xheWVyVHJlZUNvbnRleHQ7Ci0gICAg
Ym9vbCBtX3Nob3VsZFN5bmNGcmFtZTsKLSAgICBib29sIG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21w
b3NpdGluZ0xheWVyOworCiAgICAgV2ViQ29yZTo6VGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0PiBtX2xheWVyRmx1c2hUaW1lcjsKLSAgICBXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q+IG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyOwogICAgIGJvb2wgbV9s
YXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQ7CiAgICAgdWludDY0X3QgbV9mb3JjZVJlcGFpbnRB
c3luY0NhbGxiYWNrSUQ7Ci0gICAgYm9vbCBtX2FuaW1hdGlvbnNMb2NrZWQ7CiAKICNpZiBFTkFC
TEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiAgICAgZG91YmxlIG1fbGFzdEFuaW1hdGlvblNl
cnZpY2VUaW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXll
clRyZWVIb3N0LmgKaW5kZXggOTBiYmI5NDFkMWFiMDU2ODFmOTZhMjE0MDJjZjkzNDgxYjMyNzc3
ZC4uMmZhZDJkMTNjZjI1ZDgzNmVjZmFiYTNhYmZlNmFmODk4MDI0MGEyNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCkBAIC04Nyw5
ICs4Nyw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNv
bnN0IFdlYkNvcmU6OkNvbG9yJikgeyB9CiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
Ci0gICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiwgZmxvYXQgLyogc2NhbGUgKi8sIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQm
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCkgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwg
Q29yZUlQQzo6TWVzc2FnZURlY29kZXImKSA9IDA7CiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203920</attachid>
            <date>2013-06-06 03:51:48 -0700</date>
            <delta_ts>2013-06-07 01:01:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104360-20130606195012.patch</filename>
            <type>text/plain</type>
            <size>62258</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxMjYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGM5YTY0MjEwYmRiMzQw
ZTU1YjQ1OTlkMzYzMGVmZWM3ZGM2YzAxMy4uZmQ1OTAyMmMyN2Q2NWVkNzhiYWYwYTljZGMyZDZm
ZmRmZjg2MzA5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDEzLTAzLTEzICBHd2Fu
ZyBZb29uIEh3YW5nICA8cnl1bWllbEBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGlu
YXRlZCBHcmFwaGljczogU2VwYXJhdGUgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGludG8gQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0IGFuZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQzNjAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0IGhhcyB0b28gbWFueSByZXNwb25zaWJpbGl0aWVzLiBJdAorICAgICAgICBp
bXBsZW1lbnRzIExheWVyVHJlZUhvc3QsIEdyYXBoaWNzTGF5ZXJDbGllbnQsCisgICAgICAgIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNs
aWVudCwKKyAgICAgICAgVXBkYXRlQXRsYXM6OkNsaWVudCwgR3JhcGhpY3NMYXllckZhY3Rvcnkg
YW5kCisgICAgICAgIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudC4KKworICAgICAg
ICBUaGlzIHJlZmFjdG9yaW5nIHJlZHVjZXMgdGhlIHJlc3BvbnNpYmlsaXRpZXMgb2YgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5l
dyBjbGFzcyBjYWxsZWQgQ29tcG9zaXRpbmdDb29yZGluYXRvciwgd2hpY2gKKyAgICAgICAgdGFr
ZXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIG1hbmFnaW5nIGNvbXBvc2l0aW5nIHJlc291cmNlcyBp
bgorICAgICAgICBXZWJQcm9jZXNzLgorCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dCBub3cgdGFrZXMgYSBwYXJ0IGZvciBzY2hlZHVsaW5nIGFuZCBJUEMKKyAgICAgICAgc3BlY2lm
aWMgcGFydHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRl
c3RzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVGFyZ2V0LnByaToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRp
bmdDb29yZGluYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdD
b29yZGluYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6On5Db21wb3NpdGluZ0Nvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2l6ZURpZENoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpmbHVzaFBlbmRpbmdM
YXllckNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6
Y2xlYXJQZW5kaW5nU3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OmluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZVJvb3RMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzeW5jTGF5ZXJTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVJbWFn
ZUJhY2tpbmdJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpjcmVhdGVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdD
b29yZGluYXRvcjo6dXBkYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVtb3ZlSW1hZ2VCYWNraW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0ltYWdl
QmFja2luZ0NoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRv
cjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpub3RpZnlGbHVzaFJlcXVpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OnBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlR3JhcGhpY3NMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXZpY2VTY2FsZUZhY3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpwYWdlU2NhbGVGYWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlVXBkYXRlQXRs
YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVtb3ZlVXBk
YXRlQXRsYXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6dmlz
aWJsZUNvbnRlbnRzUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjptYWluQ29udGVudHNMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjb21taXRTY3JvbGxPZmZz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVuZGVyTmV4
dEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnB1cmdl
QmFja2luZ1N0b3Jlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
OjpwYWludFRvU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3Np
dGluZ0Nvb3JkaW5hdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdD
b29yZGluYXRvcjo6Y2xlYXJSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRp
bmdDb29yZGluYXRvcjo6cm9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OnN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OmlzV2FpdGluZ0ZvclJlbmRlcmVyKToKKwogMjAxMy0wNi0wNiAgSmFlIEh5dW4gUGFy
ayAgPGphZS5wYXJrQGNvbXBhbnkxMDAubmV0PgogCiAgICAgICAgIENvb3JkaW5hdGVkIEdyYXBo
aWNzIDogUmVmYWN0b3IgQ29vcmRpbmF0ZWRTdXJmYWNlIHRvIG1hbmFnZSB0aGUgbGlmZWN5Y2xl
IG9mIEdyYXBoaWNzQ29udGV4dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGZmNjUyMTgxMTYwOWMyN2NmMjU5OWJl
NDBjNDQ2NTYwOWQ4ZmE3OGYuLjViZThjOTUzZTJlOTMzMjliOTMyMTgyZTM1MGFhNjg4MjY2NGMy
N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAxMy0wMy0xMyAgR3dhbmcgWW9vbiBI
d2FuZyAgPHJ5dW1pZWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgQ29vcmRpbmF0ZWQgR3Jh
cGhpY3M6IFNlcGFyYXRlIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBpbnRvIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdCBhbmQgQ29tcG9zaXRpbmdDb29yZGluYXRvcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0MzYwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdCBoYXMgdG9vIG1hbnkgcmVzcG9uc2liaWxpdGllcy4gSXQKKyAgICAgICAgaW1wbGVtZW50
cyBMYXllclRyZWVIb3N0LCBHcmFwaGljc0xheWVyQ2xpZW50LAorICAgICAgICBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXJDbGllbnQsIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDbGllbnQsCisg
ICAgICAgIFVwZGF0ZUF0bGFzOjpDbGllbnQsIEdyYXBoaWNzTGF5ZXJGYWN0b3J5IGFuZAorICAg
ICAgICBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHlDbGllbnQuCisKKyAgICAgICAgVGhpcyBy
ZWZhY3RvcmluZyByZWR1Y2VzIHRoZSByZXNwb25zaWJpbGl0aWVzIG9mIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdC4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY2xhc3Mg
Y2FsbGVkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3IsIHdoaWNoCisgICAgICAgIHRha2VzIHRoZSBy
ZXNwb25zaWJpbGl0eSBvZiBtYW5hZ2luZyBjb21wb3NpdGluZyByZXNvdXJjZXMgaW4KKyAgICAg
ICAgV2ViUHJvY2Vzcy4KKworICAgICAgICBDb29yZGluYXRlZExheWVyVHJlZUhvc3Qgbm93IHRh
a2VzIGEgcGFydCBmb3Igc2NoZWR1bGluZyBhbmQgSVBDCisgICAgICAgIHNwZWNpZmljIHBhcnRz
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKwor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6fkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJLaXQ6OkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KToKKyAgICAg
ICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRSb290Q29tcG9zaXRpbmdM
YXllcik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6aW52YWxp
ZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zm9yY2VS
ZXBhaW50KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzaXpl
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpz
ZXRWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpyZW5kZXJOZXh0RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OnB1cmdlQmFja2luZ1N0b3Jlcyk6CisgICAgICAgIChXZWJLaXQ6OkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyk6
CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlQ3VzdG9t
RmlsdGVyUHJvZ3JhbVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpmbHVzaENvbXBvc2l0aW5nU3RhdGVQZXJpcGhlcmFsTGF5ZXJzKToKKyAgICAgICAg
KFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJG
bHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRl
UGFnZU92ZXJsYXlMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6Y29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlKToKKyAgICAgICAgKFdlYktp
dDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5n
ZWQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmdyYXBoaWNz
TGF5ZXJGYWN0b3J5KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpzY2hlZHVsZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6Y29tbWl0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaDoKKyAgICAg
ICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpyb290TGF5ZXIpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0Lmg6CisKIDIwMTMtMDYtMDYgIEph
ZSBIeXVuIFBhcmsgIDxqYWUucGFya0Bjb21wYW55MTAwLm5ldD4KIAogICAgICAgICBDb29yZGlu
YXRlZCBHcmFwaGljcyA6IFJlZmFjdG9yIENvb3JkaW5hdGVkU3VyZmFjZSB0byBtYW5hZ2UgdGhl
IGxpZmVjeWNsZSBvZiBHcmFwaGljc0NvbnRleHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOGU4
MzczNTljOTM1NjZkYzU1NmE0ZTNmMjg3OWNjNmI3OTcyMWVmZC4uNWY2ZmNhZDgzNWQxMWNmOTA3
NzFlMDNiYWNiMGI1N2I5M2U2YWRkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE5NjYsNiAr
MTk2Niw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29y
ZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCAwYjRhNGZkOWQwNmRkZDg1
M2YyMDZjMTUyYjA3ZGMwMmMyZjJhNjc5Li44MzU0ZWYzNDg4ZTYzZmI1OWZiMWEyYzRlMWViYzQw
NjA1MDg1ZjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTQxNDAsNiArNDE0MCw3IEBAIHVzZT8oM0RfR1JB
UEhJQ1MpIHsKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJH
TC5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQXJlYUFsbG9jYXRvci5oIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5oIFwKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Y29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJQcm9ncmFtLmggXApAQCAtNDE3NSw2
ICs0MTc2LDcgQEAgdXNlPygzRF9HUkFQSElDUykgewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHAgXAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5jcHAgXAorICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGlu
YXRvci5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgXAogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdD
b29yZGluYXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTI0NzU4MGIxZGVlMzQ2MjBkZWY5NzU3MDY4MDUy
OTg1YjUwYWQ3MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcApAQCAt
MCwwICsxLDQxNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29t
cGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIkNv
bXBvc2l0aW5nQ29vcmRpbmF0b3IuaCIKKworI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUGFn
ZS5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+
CisjaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1Bhc3NPd25QdHI8Q29tcG9zaXRpbmdDb29yZGluYXRvcj4gQ29tcG9zaXRpbmdDb29yZGlu
YXRvcjo6Y3JlYXRlKFBhZ2UqIHBhZ2UsIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudCog
Y2xpZW50KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ29tcG9zaXRpbmdDb29yZGluYXRv
cihwYWdlLCBjbGllbnQpKTsKK30KKworQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6fkNvbXBvc2l0
aW5nQ29vcmRpbmF0b3IoKQoreworICAgIHB1cmdlQmFja2luZ1N0b3JlcygpOworCisgICAgTGF5
ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKKyAgICBmb3Ig
KExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCisgICAgICAgIGl0LT52YWx1ZS0+c2V0Q29vcmRpbmF0b3IoMCk7Cit9CisK
K0NvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IoUGFnZSogcGFn
ZSwgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q2xpZW50KiBjbGllbnQpCisgICAgOiBtX3BhZ2Uo
cGFnZSkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fcm9vdENvbXBvc2l0aW5nTGF5
ZXIoMCkKKyAgICAsIG1faXNQdXJnaW5nKGZhbHNlKQorICAgICwgbV9pc0ZsdXNoaW5nTGF5ZXJD
aGFuZ2VzKGZhbHNlKQorICAgICwgbV9pc1dhaXRpbmdGb3JSZW5kZXJlcih0cnVlKQorICAgICwg
bV9zaG91bGRTeW5jRnJhbWUoZmFsc2UpCisgICAgLCBtX2RpZEluaXRpYWxpemVSb290Q29tcG9z
aXRpbmdMYXllcihmYWxzZSkKKyAgICAsIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyKHRo
aXMsICZDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJG
aXJlZCkKK3sKKyAgICBtX3BhZ2UtPnNldHRpbmdzKCktPnNldEFwcGx5RGV2aWNlU2NhbGVGYWN0
b3JJbkNvbXBvc2l0b3IodHJ1ZSk7CisKKyAgICAvLyBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdheSB0
byBlbmFibGUgdGhpcyBvbmx5IGluIHRoZSBHTCBjYXNlLCB1bnRpbCBUZXh0dXJlTWFwcGVySW1h
Z2VCdWZmZXIgaXMgcmVtb3ZlZC4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExNDg2OQorICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0
U2hvdWxkU3VwcG9ydENvbnRlbnRzVGlsaW5nKHRydWUpOworfQorCit2b2lkIENvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVy
KQoreworICAgIGlmIChtX3Jvb3RDb21wb3NpdGluZ0xheWVyKQorICAgICAgICBtX3Jvb3RDb21w
b3NpdGluZ0xheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisKKyAgICBtX3Jvb3RDb21wb3NpdGlu
Z0xheWVyID0gbGF5ZXI7CisgICAgaWYgKG1fcm9vdENvbXBvc2l0aW5nTGF5ZXIpCisgICAgICAg
IG1fcm9vdExheWVyLT5hZGRDaGlsZEF0SW5kZXgobV9yb290Q29tcG9zaXRpbmdMYXllciwgMCk7
Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2l6ZURpZENoYW5nZShjb25zdCBJ
bnRTaXplJiBuZXdTaXplKQoreworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG5ld1NpemUpOwor
ICAgIG1fY2xpZW50LT5zY2hlZHVsZUxheWVyRmx1c2hSZXF1aXJlZCgpOworfQorCitib29sIENv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpCit7CisgICAg
aWYgKG1faXNXYWl0aW5nRm9yUmVuZGVyZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IFRlbXBvcmFyeUNoYW5nZTxib29sPiBwcm90ZWN0b3IobV9pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2Vz
LCB0cnVlKTsKKworICAgIGluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKCk7
CisKKyAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25s
eSgpOworICAgIG1fY2xpZW50LT5mbHVzaENvbXBvc2l0aW5nU3RhdGVQZXJpcGhlcmFsTGF5ZXJz
KCk7CisKKyAgICBib29sIGRpZFN5bmMgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPmZs
dXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworCisgICAgdG9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT51cGRhdGVDb250ZW50QnVmZmVy
c0luY2x1ZGluZ1N1YkxheWVycygpOworICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1f
cm9vdExheWVyLmdldCgpKS0+c3luY1BlbmRpbmdTdGF0ZUNoYW5nZXNJbmNsdWRpbmdTdWJMYXll
cnMoKTsKKworICAgIGZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKTsKKworICAgIGlm
IChtX3Nob3VsZFN5bmNGcmFtZSkgeworICAgICAgICBkaWRTeW5jID0gdHJ1ZTsKKworICAgICAg
ICBpZiAobV9yb290Q29tcG9zaXRpbmdMYXllcikgeworICAgICAgICAgICAgbV9zdGF0ZS5jb250
ZW50c1NpemUgPSByb3VuZGVkSW50U2l6ZShtX3Jvb3RDb21wb3NpdGluZ0xheWVyLT5zaXplKCkp
OworICAgICAgICAgICAgaWYgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogY29udGVudHNMYXll
ciA9IG1haW5Db250ZW50c0xheWVyKCkpCisgICAgICAgICAgICAgICAgbV9zdGF0ZS5jb3ZlcmVk
UmVjdCA9IGNvbnRlbnRzTGF5ZXItPmNvdmVyUmVjdCgpOworICAgICAgICB9CisgICAgICAgIG1f
c3RhdGUuc2Nyb2xsUG9zaXRpb24gPSBtX3Zpc2libGVDb250ZW50c1JlY3QubG9jYXRpb24oKTsK
KworICAgICAgICBtX2NsaWVudC0+Y29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlKG1fc3Rh
dGUpOworCisgICAgICAgIGNsZWFyUGVuZGluZ1N0YXRlQ2hhbmdlcygpOworICAgICAgICBtX2lz
V2FpdGluZ0ZvclJlbmRlcmVyID0gdHJ1ZTsKKyAgICAgICAgbV9zaG91bGRTeW5jRnJhbWUgPSBm
YWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gZGlkU3luYzsKK30KKwordm9pZCBDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpjbGVhclBlbmRpbmdTdGF0ZUNoYW5nZXMoKQoreworICAgIG1fc3RhdGUu
bGF5ZXJzVG9DcmVhdGUuY2xlYXIoKTsKKyAgICBtX3N0YXRlLmxheWVyc1RvVXBkYXRlLmNsZWFy
KCk7CisgICAgbV9zdGF0ZS5sYXllcnNUb1JlbW92ZS5jbGVhcigpOworCisgICAgbV9zdGF0ZS5p
bWFnZXNUb0NyZWF0ZS5jbGVhcigpOworICAgIG1fc3RhdGUuaW1hZ2VzVG9SZW1vdmUuY2xlYXIo
KTsKKyAgICBtX3N0YXRlLmltYWdlc1RvVXBkYXRlLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5pbWFn
ZXNUb0NsZWFyLmNsZWFyKCk7CisKKyAgICBtX3N0YXRlLnVwZGF0ZUF0bGFzZXNUb0NyZWF0ZS5j
bGVhcigpOworICAgIG1fc3RhdGUudXBkYXRlQXRsYXNlc1RvUmVtb3ZlLmNsZWFyKCk7CisKKyNp
ZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgbV9zdGF0ZS5jdXN0b21GaWx0ZXJzVG9DcmVhdGUu
Y2xlYXIoKTsKKyAgICBtX3N0YXRlLmN1c3RvbUZpbHRlcnNUb1JlbW92ZS5jbGVhcigpOworI2Vu
ZGlmCit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6aW5pdGlhbGl6ZVJvb3RDb21w
b3NpdGluZ0xheWVySWZOZWVkZWQoKQoreworICAgIGlmIChtX2RpZEluaXRpYWxpemVSb290Q29t
cG9zaXRpbmdMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZS5yb290Q29tcG9z
aXRpbmdMYXllciA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgp
KS0+aWQoKTsKKyAgICBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllciA9IHRydWU7
CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OmNyZWF0ZVJvb3RMYXllcihjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIEFT
U0VSVCghbV9yb290TGF5ZXIpOworICAgIC8vIENyZWF0ZSBhIHJvb3QgbGF5ZXIuCisgICAgbV9y
b290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcywgdGhpcyk7CisjaWZuZGVmIE5E
RUJVRworICAgIG1fcm9vdExheWVyLT5zZXROYW1lKCJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yIHJv
b3QgbGF5ZXIiKTsKKyNlbmRpZgorICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFs
c2UpOworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKHNpemUpOworfQorCit2b2lkIENvbXBvc2l0
aW5nQ29vcmRpbmF0b3I6OnN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQoreworICAgIG1fc2hvdWxkU3luY0Zy
YW1lID0gdHJ1ZTsKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICBtX2NsaWVudC0+cHJl
cGFyZUN1c3RvbUZpbHRlclByb3hpZXNJZk5lZWRlZChzdGF0ZSk7CisjZW5kaWYKKworICAgIG1f
c3RhdGUubGF5ZXJzVG9VcGRhdGUuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGlkLCBzdGF0ZSkpOwor
fQorCitQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yOjpjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChJbWFnZSogaW1hZ2UpCit7CisgICAg
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEID0gQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmc6OmdldENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQoaW1hZ2UpOworICAgIEltYWdlQmFja2lu
Z01hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlQmFja2luZ3MuZmluZChpbWFnZUlEKTsKKyAgICBS
ZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGltYWdlQmFja2luZzsKKyAgICBpZiAoaXQg
PT0gbV9pbWFnZUJhY2tpbmdzLmVuZCgpKSB7CisgICAgICAgIGltYWdlQmFja2luZyA9IENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nOjpjcmVhdGUodGhpcywgaW1hZ2UpOworICAgICAgICBtX2ltYWdl
QmFja2luZ3MuYWRkKGltYWdlSUQsIGltYWdlQmFja2luZyk7CisgICAgfSBlbHNlCisgICAgICAg
IGltYWdlQmFja2luZyA9IGl0LT52YWx1ZTsKKworICAgIHJldHVybiBpbWFnZUJhY2tpbmc7Cit9
CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlSW1hZ2VCYWNraW5nKENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBtX3N0YXRlLmltYWdlc1RvQ3Jl
YXRlLmFwcGVuZChpbWFnZUlEKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp1
cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlELCBQYXNz
UmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gY29vcmRpbmF0ZWRTdXJmYWNlKQoreworICAgIG1f
c2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3N0YXRlLmltYWdlc1RvVXBkYXRlLmFwcGVu
ZChzdGQ6Om1ha2VfcGFpcihpbWFnZUlELCBjb29yZGluYXRlZFN1cmZhY2UpKTsKK30KKwordm9p
ZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9
IHRydWU7CisgICAgbV9zdGF0ZS5pbWFnZXNUb0NsZWFyLmFwcGVuZChpbWFnZUlEKTsKK30KKwor
dm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQoreworICAgIGlmIChtX2lzUHVyZ2luZykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFnZUlE
KSk7CisgICAgbV9pbWFnZUJhY2tpbmdzLnJlbW92ZShpbWFnZUlEKTsKKworICAgIG1fc3RhdGUu
aW1hZ2VzVG9SZW1vdmUuYXBwZW5kKGltYWdlSUQpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OmZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKQoreworICAgIEltYWdl
QmFja2luZ01hcDo6aXRlcmF0b3IgZW5kID0gbV9pbWFnZUJhY2tpbmdzLmVuZCgpOworICAgIGZv
ciAoSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdGVyID0gbV9pbWFnZUJhY2tpbmdzLmJlZ2lu
KCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgIGl0ZXItPnZhbHVlLT51cGRhdGUoKTsK
K30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpub3RpZnlBbmltYXRpb25TdGFydGVk
KGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgLyogdGltZSAqLykKK3sKK30KKwordm9pZCBD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IEdyYXBoaWNz
TGF5ZXIqKQoreworICAgIG1fY2xpZW50LT5zY2hlZHVsZUxheWVyRmx1c2hSZXF1aXJlZCgpOwor
fQorCisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cGFpbnRDb250ZW50cyhjb25zdCBH
cmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29u
dGV4dCwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0
KQoreworICAgIG1fY2xpZW50LT5wYWludENvbnRlbnRzKGdyYXBoaWNzTGF5ZXIsIGdyYXBoaWNz
Q29udGV4dCwgY2xpcFJlY3QpOworfQorCitQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IENvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZUdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVu
dCogY2xpZW50KQoreworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbGF5ZXIgPSBuZXcg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGNsaWVudCk7CisgICAgbGF5ZXItPnNldENvb3JkaW5h
dG9yKHRoaXMpOworICAgIG1fcmVnaXN0ZXJlZExheWVycy5hZGQobGF5ZXItPmlkKCksIGxheWVy
KTsKKyAgICBtX3N0YXRlLmxheWVyc1RvQ3JlYXRlLmFwcGVuZChsYXllci0+aWQoKSk7CisgICAg
bGF5ZXItPnNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50KCk7CisgICAgbV9jbGllbnQtPnNj
aGVkdWxlTGF5ZXJGbHVzaFJlcXVpcmVkKCk7CisgICAgcmV0dXJuIGFkb3B0UHRyKGxheWVyKTsK
K30KKworZmxvYXQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6ZGV2aWNlU2NhbGVGYWN0b3IoKSBj
b25zdAoreworICAgIHJldHVybiBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCk7Cit9CisKK2Zs
b2F0IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcGFnZS0+cGFnZVNjYWxlRmFjdG9yKCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRp
bmdDb29yZGluYXRvcjo6Y3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1Jl
ZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IGNvb3JkaW5hdGVkU3VyZmFjZSkKK3sKKyAgICBtX3N0
YXRlLnVwZGF0ZUF0bGFzZXNUb0NyZWF0ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoYXRsYXNJRCwg
Y29vcmRpbmF0ZWRTdXJmYWNlKSk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6
cmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkKK3sKKyAgICBpZiAobV9pc1B1cmdp
bmcpCisgICAgICAgIHJldHVybjsKKyAgICBtX3N0YXRlLnVwZGF0ZUF0bGFzZXNUb1JlbW92ZS5h
cHBlbmQoYXRsYXNJRCk7Cit9CisKK0Zsb2F0UmVjdCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp2
aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92aXNpYmxlQ29udGVu
dHNSZWN0OworfQorCitDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIENvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6Om1haW5Db250ZW50c0xheWVyKCkKK3sKKyAgICBpZiAoIW1fcm9vdENvbXBvc2l0aW5n
TGF5ZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHRvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyKG1fcm9vdENvbXBvc2l0aW5nTGF5ZXIpLT5maW5kRmlyc3REZXNjZW5kYW50V2l0
aENvbnRlbnRzUmVjdXJzaXZlbHkoKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxv
YXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKK3sKKyAgICAvLyBBIHplcm8gdHJhamVjdG9yeVZl
Y3RvciBpbmRpY2F0ZXMgdGhhdCB0aWxlcyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9ydCBhcmUgcmVx
dWVzdGVkLgorICAgIGlmIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGNvbnRlbnRzTGF5ZXIg
PSBtYWluQ29udGVudHNMYXllcigpKQorICAgICAgICBjb250ZW50c0xheWVyLT5zZXRWaXNpYmxl
Q29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKHRyYWplY3RvcnlWZWN0b3IpOworCisgICAgYm9v
bCBjb250ZW50c1JlY3REaWRDaGFuZ2UgPSByZWN0ICE9IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsK
KyAgICBpZiAoY29udGVudHNSZWN0RGlkQ2hhbmdlKSB7CisgICAgICAgIG1fdmlzaWJsZUNvbnRl
bnRzUmVjdCA9IHJlY3Q7CisKKyAgICAgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcmVn
aXN0ZXJlZExheWVycy5lbmQoKTsKKyAgICAgICAgZm9yIChMYXllck1hcDo6aXRlcmF0b3IgaXQg
PSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAg
ICAgaXQtPnZhbHVlLT5zZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOworICAgIH0KKwor
ICAgIEZyYW1lVmlldyogdmlldyA9IG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKyAgICBp
ZiAodmlldy0+dXNlRml4ZWRMYXlvdXQoKSkgeworICAgICAgICAvLyBSb3VuZCB0aGUgcmVjdCBp
bnN0ZWFkIG9mIGVuY2xvc2luZyBpdCB0byBtYWtlIHN1cmUgdGhhdCBpdHMgc2l6ZSBzdGF5cwor
ICAgICAgICAvLyB0aGUgc2FtZSB3aGlsZSBwYW5uaW5nLiBUaGlzIGNhbiBoYXZlIG5hc3R5IGVm
ZmVjdHMgb24gbGF5b3V0LgorICAgICAgICB2aWV3LT5zZXRGaXhlZFZpc2libGVDb250ZW50UmVj
dChyb3VuZGVkSW50UmVjdChyZWN0KSk7CisgICAgfQorfQorCit2b2lkIENvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpCit7CisgICAgbV9yb290
TGF5ZXItPmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOworfQorCit2b2lkIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OmRldGFjaExheWVyKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciog
bGF5ZXIpCit7CisgICAgaWYgKG1faXNQdXJnaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X3JlZ2lzdGVyZWRMYXllcnMucmVtb3ZlKGxheWVyLT5pZCgpKTsKKworICAgIHNpemVfdCBpbmRl
eCA9IG1fc3RhdGUubGF5ZXJzVG9DcmVhdGUuZmluZChsYXllci0+aWQoKSk7CisgICAgaWYgKGlu
ZGV4ICE9IG5vdEZvdW5kKSB7CisgICAgICAgIG1fc3RhdGUubGF5ZXJzVG9DcmVhdGUucmVtb3Zl
KGluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc3RhdGUubGF5ZXJzVG9S
ZW1vdmUuYXBwZW5kKGxheWVyLT5pZCgpKTsKKyAgICBtX2NsaWVudC0+c2NoZWR1bGVMYXllckZs
dXNoUmVxdWlyZWQoKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjb21taXRT
Y3JvbGxPZmZzZXQodWludDMyX3QgbGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgb2Zm
c2V0KQoreworICAgIExheWVyTWFwOjppdGVyYXRvciBpID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmZp
bmQobGF5ZXJJRCk7CisgICAgaWYgKGkgPT0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpLT52YWx1ZS0+Y29tbWl0U2Nyb2xsT2Zmc2V0KG9mZnNldCk7
Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVuZGVyTmV4dEZyYW1lKCkKK3sK
KyAgICBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyID0gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV91cGRhdGVB
dGxhc2VzW2ldLT5kaWRTd2FwQnVmZmVycygpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OnB1cmdlQmFja2luZ1N0b3JlcygpCit7CisgICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+
IHB1cmdpbmdUb2dnbGUobV9pc1B1cmdpbmcsIHRydWUpOworCisgICAgTGF5ZXJNYXA6Oml0ZXJh
dG9yIGVuZCA9IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKKyAgICBmb3IgKExheWVyTWFwOjpp
dGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
CisgICAgICAgIGl0LT52YWx1ZS0+cHVyZ2VCYWNraW5nU3RvcmVzKCk7CisKKyAgICBtX2ltYWdl
QmFja2luZ3MuY2xlYXIoKTsKKyAgICBtX3VwZGF0ZUF0bGFzZXMuY2xlYXIoKTsKK30KKworYm9v
bCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpwYWludFRvU3VyZmFjZShjb25zdCBJbnRTaXplJiBz
aXplLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzIGZsYWdzLCB1aW50MzJfdCYgYXRsYXNJRCwg
SW50UG9pbnQmIG9mZnNldCwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpDbGllbnQqIGNsaWVudCkKK3sK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV91cGRhdGVBdGxhc2VzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIFVwZGF0ZUF0bGFzKiBhdGxhcyA9IG1fdXBkYXRlQXRsYXNlc1tpXS5nZXQo
KTsKKyAgICAgICAgaWYgKGF0bGFzLT5zdXBwb3J0c0FscGhhKCkgPT0gKGZsYWdzICYgQ29vcmRp
bmF0ZWRTdXJmYWNlOjpTdXBwb3J0c0FscGhhKSkgeworICAgICAgICAgICAgLy8gVGhpcyB3aWxs
IGJlIGZhbHNlIGlmIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIgc3BhY2UuCisgICAgICAg
ICAgICBpZiAoYXRsYXMtPnBhaW50T25BdmFpbGFibGVCdWZmZXIoc2l6ZSwgYXRsYXNJRCwgb2Zm
c2V0LCBjbGllbnQpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgc3RhdGljIGNvbnN0IGludCBTY3JhdGNoQnVmZmVyRGltZW5zaW9uID0gMTAy
NDsgLy8gU2hvdWxkIGJlIGEgcG93ZXIgb2YgdHdvLgorICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBl
bmQoYWRvcHRQdHIobmV3IFVwZGF0ZUF0bGFzKHRoaXMsIFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24s
IGZsYWdzKSkpOworICAgIHNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpOworICAgIHJl
dHVybiBtX3VwZGF0ZUF0bGFzZXMubGFzdCgpLT5wYWludE9uQXZhaWxhYmxlQnVmZmVyKHNpemUs
IGF0bGFzSUQsIG9mZnNldCwgY2xpZW50KTsKK30KKworY29uc3QgZG91YmxlIFJlbGVhc2VJbmFj
dGl2ZUF0bGFzZXNUaW1lckludGVydmFsID0gMC41OworCit2b2lkIENvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OnNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpCit7CisgICAgaWYgKCFtX3Jl
bGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3JlbGVhc2VJ
bmFjdGl2ZUF0bGFzZXNUaW1lci5zdGFydFJlcGVhdGluZyhSZWxlYXNlSW5hY3RpdmVBdGxhc2Vz
VGltZXJJbnRlcnZhbCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVsZWFz
ZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQoVGltZXI8Q29tcG9zaXRpbmdDb29yZGluYXRvcj4q
KQoreworICAgIC8vIFdlIGFsd2F5cyB3YW50IHRvIGtlZXAgb25lIGF0bGFzIGZvciBub24tY29t
cG9zaXRlZCBjb250ZW50LgorICAgIE93blB0cjxVcGRhdGVBdGxhcz4gYXRsYXNUb0tlZXBBbnl3
YXk7CisgICAgYm9vbCBmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgPSBm
YWxzZTsKKyAgICBmb3IgKGludCBpID0gbV91cGRhdGVBdGxhc2VzLnNpemUoKSAtIDE7ICBpID49
IDA7IC0taSkgeworICAgICAgICBVcGRhdGVBdGxhcyogYXRsYXMgPSBtX3VwZGF0ZUF0bGFzZXNb
aV0uZ2V0KCk7CisgICAgICAgIGlmICghYXRsYXMtPmlzSW5Vc2UoKSkKKyAgICAgICAgICAgIGF0
bGFzLT5hZGRUaW1lSW5hY3RpdmUoUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2YWwp
OworICAgICAgICBib29sIHVzYWJsZUZvck5vbkNvbXBvc2l0ZWRDb250ZW50ID0gIWF0bGFzLT5z
dXBwb3J0c0FscGhhKCk7CisgICAgICAgIGlmIChhdGxhcy0+aXNJbmFjdGl2ZSgpKSB7CisgICAg
ICAgICAgICBpZiAoIWZvdW5kQWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVudCAmJiAh
YXRsYXNUb0tlZXBBbnl3YXkgJiYgdXNhYmxlRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQpCisgICAg
ICAgICAgICAgICAgYXRsYXNUb0tlZXBBbnl3YXkgPSBtX3VwZGF0ZUF0bGFzZXNbaV0ucmVsZWFz
ZSgpOworICAgICAgICAgICAgbV91cGRhdGVBdGxhc2VzLnJlbW92ZShpKTsKKyAgICAgICAgfSBl
bHNlIGlmICh1c2FibGVGb3JOb25Db21wb3NpdGVkQ29udGVudCkKKyAgICAgICAgICAgIGZvdW5k
QWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVudCA9IHRydWU7CisgICAgfQorCisgICAg
aWYgKCFmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgJiYgYXRsYXNUb0tl
ZXBBbnl3YXkpCisgICAgICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBlbmQoYXRsYXNUb0tlZXBBbnl3
YXkucmVsZWFzZSgpKTsKKworICAgIGlmIChtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpIDw9IDEpCisg
ICAgICAgIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyLnN0b3AoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZDZlZWM0M2Y0M2Q2NDhkYTdmMzAxNWYwN2QwNzE2YTE1YWM0NjBlZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
X2gKKyNkZWZpbmUgQ29tcG9zaXRpbmdDb29yZGluYXRvcl9oCisKKyNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCIKKyNp
bmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaCIKKyNpbmNsdWRlICJDb29yZGluYXRl
ZEltYWdlQmFja2luZy5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0xheWVyQ2xpZW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckZhY3RvcnkuaCIKKyNp
bmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJVcGRhdGVB
dGxhcy5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworI2lmIEVOQUJMRShDU1NfU0hBREVS
UykKKyNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBQYWdlOworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgR3Jh
cGhpY3NMYXllcjsKK2NsYXNzIENvb3JkaW5hdGVkU3VyZmFjZTsKKworY2xhc3MgQ29tcG9zaXRp
bmdDb29yZGluYXRvciA6IHB1YmxpYyBHcmFwaGljc0xheWVyQ2xpZW50CisgICAgLCBwdWJsaWMg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50CisgICAgLCBwdWJsaWMgQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmc6OkNsaWVudAorICAgICwgcHVibGljIFVwZGF0ZUF0bGFzOjpDbGllbnQKKyAg
ICAsIHB1YmxpYyBHcmFwaGljc0xheWVyRmFjdG9yeSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQ29tcG9zaXRpbmdDb29yZGluYXRvcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIGNsYXNzIENsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZv
aWQgZmx1c2hDb21wb3NpdGluZ1N0YXRlUGVyaXBoZXJhbExheWVycygpID0gMDsKKyAgICAgICAg
dmlydHVhbCB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaFJlcXVpcmVkKCkgPSAwOworICAgICAgICB2
aXJ0dWFsIHZvaWQgY29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlKENvb3JkaW5hdGVkR3Jh
cGhpY3NTdGF0ZSYpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29u
c3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXBS
ZWN0KSA9IDA7CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAgICB2aXJ0dWFsIHZvaWQg
cHJlcGFyZUN1c3RvbUZpbHRlclByb3hpZXNJZk5lZWRlZChDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJTdGF0ZSYpID0gMDsKKyNlbmRpZgorICAgIH07CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yPiBjcmVhdGUoUGFnZSosIENvbXBvc2l0aW5nQ29vcmRpbmF0
b3I6OkNsaWVudCopOworICAgIHZpcnR1YWwgfkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IoKTsKKwor
ICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXllciopOworICAgIHZv
aWQgc2l6ZURpZENoYW5nZShjb25zdCBJbnRTaXplJiBuZXdTaXplKTsKKyAgICB2b2lkIGRldmlj
ZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOworCisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVu
dHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIHJl
bmRlck5leHRGcmFtZSgpOworICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisgICAgdm9p
ZCBjb21taXRTY3JvbGxPZmZzZXQodWludDMyX3QgbGF5ZXJJRCwgY29uc3QgSW50U2l6ZSYgb2Zm
c2V0KTsKKworICAgIHZvaWQgY3JlYXRlUm9vdExheWVyKGNvbnN0IEludFNpemUmKTsKKyAgICB2
b2lkIGNsZWFyUm9vdExheWVyKCkgeyBtX3Jvb3RMYXllciA9IG51bGxwdHI7IH0KKyAgICBHcmFw
aGljc0xheWVyKiByb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsg
fQorICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbWFpbkNvbnRlbnRzTGF5ZXIoKTsKKwor
ICAgIGJvb2wgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7CisgICAgQ29vcmRpbmF0ZWRHcmFw
aGljc1N0YXRlJiBzdGF0ZSgpIHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICBib29sIGlzV2FpdGlu
Z0ZvclJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9pc1dhaXRpbmdGb3JSZW5kZXJlcjsgfQor
Citwcml2YXRlOgorICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3IoUGFnZSosIENvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OkNsaWVudCopOworCisgICAgLy8gR3JhcGhpY3NMYXllckNsaWVudAorICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIq
LCBkb3VibGUgdGltZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNoUmVx
dWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBw
YWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBHcmFw
aGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdCBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0IE9WRVJSSURFOworCisg
ICAgLy8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBj
cmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7CisKKyAgICAvLyBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFsIGJvb2wgaXNGbHVzaGluZ0xheWVyQ2hhbmdlcygp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlczsgfQorICAg
IHZpcnR1YWwgRmxvYXRSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdCBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZUlt
YWdlQmFja2luZ0lmTmVlZGVkKEltYWdlKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRl
dGFjaExheWVyKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopIE9WRVJSSURFOworICAgIHZpcnR1
YWwgYm9vbCBwYWludFRvU3VyZmFjZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViQ29yZTo6
Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMyX3QmIC8qIGF0bGFzSUQgKi8sIFdlYkNv
cmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpDbGllbnQqKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklE
LCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpIE9WRVJSSURFOworCisgICAgLy8gVXBk
YXRlQXRsYXM6OkNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50
MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKSBPVkVS
UklERTsKKworICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5CisgICAgdmlydHVhbCBQYXNzT3du
UHRyPEdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVu
dCopIE9WRVJSSURFOworCisgICAgdm9pZCBpbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJ
Zk5lZWRlZCgpOworICAgIHZvaWQgZmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpOwor
ICAgIHZvaWQgY2xlYXJQZW5kaW5nU3RhdGVDaGFuZ2VzKCk7CisKKyAgICB2b2lkIHNjaGVkdWxl
UmVsZWFzZUluYWN0aXZlQXRsYXNlcygpOworCisgICAgdm9pZCByZWxlYXNlSW5hY3RpdmVBdGxh
c2VzVGltZXJGaXJlZChUaW1lcjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiopOworCisgICAgUGFn
ZSogbV9wYWdlOworICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudCogbV9jbGllbnQ7
CisKKyAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CisgICAgR3JhcGhpY3NM
YXllciogbV9yb290Q29tcG9zaXRpbmdMYXllcjsKKworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NT
dGF0ZSBtX3N0YXRlOworCisgICAgdHlwZWRlZiBIYXNoTWFwPENvb3JkaW5hdGVkTGF5ZXJJRCwg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj4gTGF5ZXJNYXA7CisgICAgTGF5ZXJNYXAgbV9yZWdp
c3RlcmVkTGF5ZXJzOworICAgIHR5cGVkZWYgSGFzaE1hcDxDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lELCBSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+ID4gSW1hZ2VCYWNraW5nTWFwOwor
ICAgIEltYWdlQmFja2luZ01hcCBtX2ltYWdlQmFja2luZ3M7CisgICAgVmVjdG9yPE93blB0cjxV
cGRhdGVBdGxhcz4gPiBtX3VwZGF0ZUF0bGFzZXM7CisKKyAgICAvLyBXZSBkb24ndCBzZW5kIHRo
ZSBtZXNzYWdlcyByZWxhdGVkIHRvIHJlbGVhc2luZyByZXNvdXJjZXMgdG8gcmVuZGVyZXIgZHVy
aW5nIHB1cmdpbmcsIGJlY2F1c2UgcmVuZGVyZXIgYWxyZWFkeSBoYWQgcmVtb3ZlZCBhbGwgcmVz
b3VyY2VzLgorICAgIGJvb2wgbV9pc1B1cmdpbmc7CisgICAgYm9vbCBtX2lzRmx1c2hpbmdMYXll
ckNoYW5nZXM7CisKKyAgICBib29sIG1faXNXYWl0aW5nRm9yUmVuZGVyZXI7CisgICAgRmxvYXRS
ZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKworICAgIGJvb2wgbV9zaG91bGRTeW5jRnJhbWU7
CisgICAgYm9vbCBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcjsKKyAgICBUaW1l
cjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lcjsK
K307CisKK30KKworI2VuZGlmCisKKyNlbmRpZiAvLyBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJl
ZUhvc3QuY3BwCmluZGV4IDAzNWZjN2Y1MmI5OWFmZWE2MDM3ZDI4NGQ4NjJkY2Q2ZDA0YTM4ZjAu
LjQxMjc1ZmVlZmJmOWIxNzk2ZjI3OWE5NDhmNWEzOTVhYmQ4MjFmMDcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcApA
QCAtNDAsMTggKzQwLDkgQEAKICNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9J
bnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJC
YWNraW5nLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdz
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TdXJmYWNlVXBkYXRlSW5mby5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVu
dFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CiAKICNpZiBFTkFCTEUo
Q1NTX1NIQURFUlMpCiAjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5oIgpA
QCAtNzIsNDkgKzYzLDI3IEBAIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6fkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdCgpCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogICAgIGRpc2Nvbm5lY3RD
dXN0b21GaWx0ZXJQcm9ncmFtcygpOwogI2VuZGlmCi0gICAgcHVyZ2VCYWNraW5nU3RvcmVzKCk7
Ci0KLSAgICBMYXllck1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgp
OwotICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnZhbHVlLT5zZXRDb29yZGluYXRv
cigwKTsKIH0KIAogQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3QoV2ViUGFnZSogd2ViUGFnZSkKICAgICA6IExheWVyVHJlZUhvc3Qod2ViUGFnZSkKLSAg
ICAsIG1fcm9vdENvbXBvc2l0aW5nTGF5ZXIoMCkKICAgICAsIG1fbm90aWZ5QWZ0ZXJTY2hlZHVs
ZWRMYXllckZsdXNoKGZhbHNlKQogICAgICwgbV9pc1ZhbGlkKHRydWUpCi0gICAgLCBtX2lzUHVy
Z2luZyhmYWxzZSkKLSAgICAsIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlcyhmYWxzZSkKLSAgICAs
IG1fd2FpdGluZ0ZvclVJUHJvY2Vzcyh0cnVlKQogICAgICwgbV9pc1N1c3BlbmRlZChmYWxzZSkK
LSAgICAsIG1fc2hvdWxkU3luY0ZyYW1lKGZhbHNlKQotICAgICwgbV9kaWRJbml0aWFsaXplUm9v
dENvbXBvc2l0aW5nTGF5ZXIoZmFsc2UpCiAgICAgLCBtX2xheWVyRmx1c2hUaW1lcih0aGlzLCAm
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpsYXllckZsdXNoVGltZXJGaXJlZCkKLSAgICAsIG1f
cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyKHRoaXMsICZDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OnJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKQogICAgICwgbV9sYXllckZsdXNo
U2NoZWR1bGluZ0VuYWJsZWQodHJ1ZSkKICAgICAsIG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFj
a0lEKDApCi0gICAgLCBtX2FuaW1hdGlvbnNMb2NrZWQoZmFsc2UpCiAjaWYgRU5BQkxFKFJFUVVF
U1RfQU5JTUFUSU9OX0ZSQU1FKQogICAgICwgbV9sYXN0QW5pbWF0aW9uU2VydmljZVRpbWUoMCkK
ICNlbmRpZgogewotICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXBw
bHlEZXZpY2VTY2FsZUZhY3RvckluQ29tcG9zaXRvcih0cnVlKTsKIAotICAgIC8vIENyZWF0ZSBh
IHJvb3QgbGF5ZXIuCi0gICAgbV9yb290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhp
cywgdGhpcyk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1fcm9vdExheWVyLT5zZXROYW1lKCJDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Qgcm9vdCBsYXllciIpOwotI2VuZGlmCi0gICAgbV9yb290TGF5
ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7Ci0gICAgbV9yb290TGF5ZXItPnNldFNpemUobV93
ZWJQYWdlLT5zaXplKCkpOwotICAgIG1fbGF5ZXJUcmVlQ29udGV4dC5jb29yZGluYXRlZExheWVy
SUQgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmlkKCk7
CisgICAgbV9jb29yZGluYXRvciA9IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZSh3ZWJQ
YWdlLT5jb3JlUGFnZSgpLCB0aGlzKTsKIAotICAgIENvb3JkaW5hdGVkU3VyZmFjZTo6c2V0RmFj
dG9yeShjcmVhdGVDb29yZGluYXRlZFN1cmZhY2UpOworICAgIG1fY29vcmRpbmF0b3ItPmNyZWF0
ZVJvb3RMYXllcihtX3dlYlBhZ2UtPnNpemUoKSk7CisgICAgbV9sYXllclRyZWVDb250ZXh0LmNv
b3JkaW5hdGVkTGF5ZXJJRCA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKHJvb3RMYXllcigp
KS0+aWQoKTsKIAotICAgIC8vIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd2F5IHRvIGVuYWJsZSB0aGlz
IG9ubHkgaW4gdGhlIEdMIGNhc2UsIHVudGlsIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlciBpcyBy
ZW1vdmVkLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTE0ODY5Ci0gICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRTaG91bGRTdXBwb3J0
Q29udGVudHNUaWxpbmcodHJ1ZSk7CisgICAgQ29vcmRpbmF0ZWRTdXJmYWNlOjpzZXRGYWN0b3J5
KGNyZWF0ZUNvb3JkaW5hdGVkU3VyZmFjZSk7CiAKICAgICBpZiAobV93ZWJQYWdlLT5oYXNQYWdl
T3ZlcmxheSgpKQogICAgICAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CkBAIC0xNTgsMTIg
KzEyNyw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRTaG91bGROb3RpZnlB
ZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wKIAogdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
IGdyYXBoaWNzTGF5ZXIpCiB7Ci0gICAgaWYgKG1fcm9vdENvbXBvc2l0aW5nTGF5ZXIpCi0gICAg
ICAgIG1fcm9vdENvbXBvc2l0aW5nTGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKLQotICAgIG1f
cm9vdENvbXBvc2l0aW5nTGF5ZXIgPSBncmFwaGljc0xheWVyOwotICAgIGlmIChtX3Jvb3RDb21w
b3NpdGluZ0xheWVyKQotICAgICAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGRBdEluZGV4KG1fcm9v
dENvbXBvc2l0aW5nTGF5ZXIsIDApOworICAgIG1fY29vcmRpbmF0b3ItPnNldFJvb3RDb21wb3Np
dGluZ0xheWVyKGdyYXBoaWNzTGF5ZXIpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6aW52YWxpZGF0ZSgpCkBAIC0xNzEsNyArMTM1LDcgQEAgdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmludmFsaWRhdGUoKQogICAgIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7
CiAKICAgICBBU1NFUlQobV9pc1ZhbGlkKTsKLSAgICBtX3Jvb3RMYXllciA9IG51bGxwdHI7Cisg
ICAgbV9jb29yZGluYXRvci0+Y2xlYXJSb290TGF5ZXIoKTsKICAgICBtX2lzVmFsaWQgPSBmYWxz
ZTsKIH0KIApAQCAtMTg0LDcgKzE0OCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
Ojpmb3JjZVJlcGFpbnQoKQogICAgIC8vIFdlIG5lZWQgdG8gc2NoZWR1bGUgYW5vdGhlciBmbHVz
aCwgb3RoZXJ3aXNlIHRoZSBmb3JjZWQgcGFpbnQgbWlnaHQgY2FuY2VsIGEgbGF0ZXIgZXhwZWN0
ZWQgZmx1c2guCiAgICAgLy8gVGhpcyBpcyBhbGlnbmVkIHdpdGggTGF5ZXJUcmVlSG9zdENBLgog
ICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygp
OworICAgIG1fY29vcmRpbmF0b3ItPmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOwogfQogCiBi
b29sIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50QXN5bmModWludDY0X3Qg
Y2FsbGJhY2tJRCkKQEAgLTE5OCw3ICsxNjIsNyBAQCBib29sIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6Zm9yY2VSZXBhaW50QXN5bmModWludDY0X3QgY2FsbGJhY2tJRCkKIAogdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgbmV3U2l6ZSkKIHsKLSAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKKyAgICBt
X2Nvb3JkaW5hdG9yLT5zaXplRGlkQ2hhbmdlKG5ld1NpemUpOwogICAgIHNjaGVkdWxlTGF5ZXJG
bHVzaCgpOwogfQogCkBAIC0yMzMsOTEgKzE5NywyMSBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6c2V0UGFnZU92ZXJsYXlPcGFjaXR5KFBhZ2VPdmVybGF5KiwgZmxvYXQgdmFsdWUp
CiAgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CiB9CiAKLWJvb2wgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKQotewotICAgIGlmIChtX3dhaXRpbmdG
b3JVSVByb2Nlc3MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFRlbXBvcmFyeUNoYW5n
ZTxib29sPiBwcm90ZWN0b3IobV9pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzLCB0cnVlKTsKLQotICAg
IGluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKCk7Ci0KLSAgICBtX3Jvb3RM
YXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotICAgIGlmICht
X3BhZ2VPdmVybGF5TGF5ZXIpCi0gICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+Zmx1c2hDb21w
b3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotCi0gICAgYm9vbCBkaWRTeW5jID0gbV93
ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5mbHVzaENvbXBvc2l0aW5n
U3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsKLQotICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyKG1fcm9vdExheWVyLmdldCgpKS0+dXBkYXRlQ29udGVudEJ1ZmZlcnNJbmNsdWRpbmdTdWJM
YXllcnMoKTsKLSAgICB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQo
KSktPnN5bmNQZW5kaW5nU3RhdGVDaGFuZ2VzSW5jbHVkaW5nU3ViTGF5ZXJzKCk7Ci0KLSAgICBm
bHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7Ci0KLSAgICBpZiAobV9zaG91bGRTeW5j
RnJhbWUpIHsKLSAgICAgICAgZGlkU3luYyA9IHRydWU7Ci0KLSAgICAgICAgaWYgKG1fcm9vdENv
bXBvc2l0aW5nTGF5ZXIpIHsKLSAgICAgICAgICAgIG1fc3RhdGUuY29udGVudHNTaXplID0gcm91
bmRlZEludFNpemUobV9yb290Q29tcG9zaXRpbmdMYXllci0+c2l6ZSgpKTsKLSAgICAgICAgICAg
IGlmIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGNvbnRlbnRzTGF5ZXIgPSBtYWluQ29udGVu
dHNMYXllcigpKQotICAgICAgICAgICAgICAgIG1fc3RhdGUuY292ZXJlZFJlY3QgPSBjb250ZW50
c0xheWVyLT5jb3ZlclJlY3QoKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fc3RhdGUuc2Nyb2xs
UG9zaXRpb24gPSBtX3Zpc2libGVDb250ZW50c1JlY3QubG9jYXRpb24oKTsKLQotICAgICAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpD
b21taXRDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUobV9zdGF0ZSkpOwotCi0gICAgICAgIGNsZWFy
UGVuZGluZ1N0YXRlQ2hhbmdlcygpOwotICAgICAgICBtX3dhaXRpbmdGb3JVSVByb2Nlc3MgPSB0
cnVlOwotICAgICAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlm
IChtX2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJRCkgewotICAgICAgICBtX3dlYlBhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNrKG1fZm9yY2VSZXBhaW50QXN5
bmNDYWxsYmFja0lEKSk7Ci0gICAgICAgIG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEID0g
MDsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGlkU3luYzsKLX0KLQotdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmNsZWFyUGVuZGluZ1N0YXRlQ2hhbmdlcygpCit2b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCiB7Ci0gICAgbV9zdGF0ZS5s
YXllcnNUb0NyZWF0ZS5jbGVhcigpOwotICAgIG1fc3RhdGUubGF5ZXJzVG9VcGRhdGUuY2xlYXIo
KTsKLSAgICBtX3N0YXRlLmxheWVyc1RvUmVtb3ZlLmNsZWFyKCk7Ci0KLSAgICBtX3N0YXRlLmlt
YWdlc1RvQ3JlYXRlLmNsZWFyKCk7Ci0gICAgbV9zdGF0ZS5pbWFnZXNUb1JlbW92ZS5jbGVhcigp
OwotICAgIG1fc3RhdGUuaW1hZ2VzVG9VcGRhdGUuY2xlYXIoKTsKLSAgICBtX3N0YXRlLmltYWdl
c1RvQ2xlYXIuY2xlYXIoKTsKLQotICAgIG1fc3RhdGUudXBkYXRlQXRsYXNlc1RvQ3JlYXRlLmNs
ZWFyKCk7Ci0gICAgbV9zdGF0ZS51cGRhdGVBdGxhc2VzVG9SZW1vdmUuY2xlYXIoKTsKLQotI2lm
IEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBtX3N0YXRlLmN1c3RvbUZpbHRlcnNUb0NyZWF0ZS5j
bGVhcigpOwotICAgIG1fc3RhdGUuY3VzdG9tRmlsdGVyc1RvUmVtb3ZlLmNsZWFyKCk7Ci0jZW5k
aWYKKyAgICBtX2Nvb3JkaW5hdG9yLT5zZXRWaXNpYmxlQ29udGVudHNSZWN0KHJlY3QsIHRyYWpl
Y3RvcnlWZWN0b3IpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwogfQogCi12b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVk
ZWQoKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZSgpCiB7
Ci0gICAgaWYgKG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX3N0YXRlLnJvb3RDb21wb3NpdGluZ0xheWVyID0gdG9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5pZCgpOwotICAgIG1fZGlkSW5pdGlh
bGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyID0gdHJ1ZTsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9
IHRydWU7CisgICAgbV9jb29yZGluYXRvci0+cmVuZGVyTmV4dEZyYW1lKCk7CisgICAgc2NoZWR1
bGVMYXllckZsdXNoKCk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzeW5j
TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
clN0YXRlJiBzdGF0ZSkKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwdXJnZUJhY2tp
bmdTdG9yZXMoKQogewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLQotI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKLSAgICBwcmVwYXJlQ3VzdG9tRmlsdGVyUHJveGllc0lmTmVlZGVkKHN0
YXRlKTsKLSNlbmRpZgotCi0gICAgbV9zdGF0ZS5sYXllcnNUb1VwZGF0ZS5hcHBlbmQoc3RkOjpt
YWtlX3BhaXIoaWQsIHN0YXRlKSk7CisgICAgbV9jb29yZGluYXRvci0+cHVyZ2VCYWNraW5nU3Rv
cmVzKCk7CiB9CiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCkBAIC0zNjcsNyArMjYxLDcgQEAg
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVBy
b3hpZXMoY29uc3QgRmlsdGVyT3BlcmEKICAgICAgICAgaWYgKCFjdXN0b21GaWx0ZXJQcm9ncmFt
UHJveHktPmNsaWVudCgpKSB7CiAgICAgICAgICAgICBjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkt
PnNldENsaWVudCh0aGlzKTsKICAgICAgICAgICAgIG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMuYWRk
KGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS5nZXQoKSk7Ci0gICAgICAgICAgICBtX3N0YXRlLmN1
c3RvbUZpbHRlcnNUb0NyZWF0ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY3VzdG9tRmlsdGVyUHJv
Z3JhbVByb3h5LT5pZCgpLCBjdXN0b21PcGVyYXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKS0+dmFs
aWRhdGVkUHJvZ3JhbUluZm8oKSkpOworICAgICAgICAgICAgbV9jb29yZGluYXRvci0+c3RhdGUo
KS5jdXN0b21GaWx0ZXJzVG9DcmVhdGUuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGN1c3RvbUZpbHRl
clByb2dyYW1Qcm94eS0+aWQoKSwgY3VzdG9tT3BlcmF0aW9uLT52YWxpZGF0ZWRQcm9ncmFtKCkt
PnZhbGlkYXRlZFByb2dyYW1JbmZvKCkpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IC8vIElmIHRoZSBjbGllbnQgd2FzIG5vdCBkaXNjb25uZWN0ZWQgdGhlbiB0aGlzIGNvb3JkaW5h
dG9yIG11c3QgYmUgdGhlIGNsaWVudCBmb3IgaXQuCiAgICAgICAgICAgICBBU1NFUlQoY3VzdG9t
RmlsdGVyUHJvZ3JhbVByb3h5LT5jbGllbnQoKSA9PSB0aGlzKTsKQEAgLTM4MCw3ICsyNzQsNyBA
QCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3Jh
bVByb3h5KFdlYkN1c3RvbUZpbHRlclBybwogICAgIC8vIEF0IHRoaXMgdGltZSB0aGUgc2hhZGVy
IGlzIG5vdCBuZWVkZWQgYW55bW9yZSwgc28gd2UgcmVtb3ZlIGl0IGZyb20gb3VyIHNldCBhbmQK
ICAgICAvLyBzZW5kIGEgbWVzc2FnZSB0byB0aGUgb3RoZXIgcHJvY2VzcyB0byBkZWxldGUgaXQu
CiAgICAgbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5yZW1vdmUoY3VzdG9tRmlsdGVyUHJvZ3JhbVBy
b3h5KTsKLSAgICBtX3N0YXRlLmN1c3RvbUZpbHRlcnNUb1JlbW92ZS5hcHBlbmQoY3VzdG9tRmls
dGVyUHJvZ3JhbVByb3h5LT5pZCgpKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5zdGF0ZSgpLmN1c3Rv
bUZpbHRlcnNUb1JlbW92ZS5hcHBlbmQoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpKTsK
IH0KIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpc2Nvbm5lY3RDdXN0b21GaWx0
ZXJQcm9ncmFtcygpCkBAIC0zOTIsMjMgKzI4NiwxNSBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6ZGlzY29ubmVjdEN1c3RvbUZpbHRlclByb2dyYW1zKCkKIH0KICNlbmRpZiAvLyBF
TkFCTEUoQ1NTX1NIQURFUlMpCiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXRh
Y2hMYXllcihDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGxheWVyKQordm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZVBlcmlwaGVyYWxMYXllcnMoKQog
ewotICAgIG1fcmVnaXN0ZXJlZExheWVycy5yZW1vdmUobGF5ZXItPmlkKCkpOwotCi0gICAgc2l6
ZV90IGluZGV4ID0gbV9zdGF0ZS5sYXllcnNUb0NyZWF0ZS5maW5kKGxheWVyLT5pZCgpKTsKLSAg
ICBpZiAoaW5kZXggIT0gbm90Rm91bmQpIHsKLSAgICAgICAgbV9zdGF0ZS5sYXllcnNUb0NyZWF0
ZS5yZW1vdmUoaW5kZXgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9zdGF0ZS5s
YXllcnNUb1JlbW92ZS5hcHBlbmQobGF5ZXItPmlkKCkpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVz
aCgpOworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCisgICAgICAgIG1fcGFnZU92ZXJsYXlM
YXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwogfQogCiB2b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQog
ewotICAgIGlmIChtX2lzU3VzcGVuZGVkIHx8IG1fd2FpdGluZ0ZvclVJUHJvY2VzcykKKyAgICBp
ZiAobV9pc1N1c3BlbmRlZCB8fCBtX2Nvb3JkaW5hdG9yLT5pc1dhaXRpbmdGb3JSZW5kZXJlcigp
KQogICAgICAgICByZXR1cm47CiAKICAgICBzeW5jRGlzcGxheVN0YXRlKCk7CkBAIC00MTYsOCAr
MzAyLDE3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwZXJmb3JtU2NoZWR1bGVk
TGF5ZXJGbHVzaCgpCiAgICAgaWYgKCFtX2lzVmFsaWQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKSkKLSAgICAgICAgZGlkUGVyZm9ybVNjaGVk
dWxlZExheWVyRmx1c2goKTsKKyAgICBib29sIGRpZFN5bmMgPSBtX2Nvb3JkaW5hdG9yLT5mbHVz
aFBlbmRpbmdMYXllckNoYW5nZXMoKTsKKworICAgIGlmIChtX2ZvcmNlUmVwYWludEFzeW5jQ2Fs
bGJhY2tJRCkgeworICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6Vm9pZENhbGxiYWNrKG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEKSk7CisgICAgICAg
IG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9u
b3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2ggJiYgZGlkU3luYykgeworICAgICAgICBzdGF0
aWNfY2FzdDxEcmF3aW5nQXJlYUltcGwqPihtX3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCkpLT5sYXll
ckhvc3REaWRGbHVzaExheWVycygpOworICAgICAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5
ZXJGbHVzaCA9IGZhbHNlOworICAgIH0KIH0KIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OnN5bmNEaXNwbGF5U3RhdGUoKQpAQCAtNDM1LDE0ICszMzAsNiBAQCB2b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6c3luY0Rpc3BsYXlTdGF0ZSgpCiAgICAgbV93ZWJQYWdlLT5sYXlv
dXRJZk5lZWRlZCgpOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGlkUGVy
Zm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQotewotICAgIGlmIChtX25vdGlmeUFmdGVyU2NoZWR1
bGVkTGF5ZXJGbHVzaCkgewotICAgICAgICBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYUltcGwqPiht
X3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCkpLT5sYXllckhvc3REaWRGbHVzaExheWVycygpOwotICAg
ICAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOwotICAgIH0KLX0K
LQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmxheWVyRmx1c2hUaW1lckZpcmVkKFRp
bWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4qKQogewogICAgIHBlcmZvcm1TY2hlZHVsZWRM
YXllckZsdXNoKCk7CkBAIC00NTIsMTUgKzMzOSwxNSBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6Y3JlYXRlUGFnZU92ZXJsYXlMYXllcigpCiB7CiAgICAgQVNTRVJUKCFtX3BhZ2VP
dmVybGF5TGF5ZXIpOwogCi0gICAgbV9wYWdlT3ZlcmxheUxheWVyID0gR3JhcGhpY3NMYXllcjo6
Y3JlYXRlKHRoaXMsIHRoaXMpOworICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IEdyYXBoaWNzTGF5
ZXI6OmNyZWF0ZShncmFwaGljc0xheWVyRmFjdG9yeSgpLCBtX2Nvb3JkaW5hdG9yLmdldCgpKTsK
ICNpZm5kZWYgTkRFQlVHCi0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROYW1lKCJDb29yZGlu
YXRlZExheWVyVHJlZUhvc3QgcGFnZSBvdmVybGF5IGNvbnRlbnQiKTsKKyAgICBtX3BhZ2VPdmVy
bGF5TGF5ZXItPnNldE5hbWUoIkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IgcGFnZSBvdmVybGF5IGNv
bnRlbnQiKTsKICNlbmRpZgogCiAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXREcmF3c0NvbnRl
bnQodHJ1ZSk7Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6
ZSgpKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUocm9vdExheWVyKCktPnNpemUo
KSk7CiAKLSAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobV9wYWdlT3ZlcmxheUxheWVyLmdldCgp
KTsKKyAgICByb290TGF5ZXIoKS0+YWRkQ2hpbGQobV9wYWdlT3ZlcmxheUxheWVyLmdldCgpKTsK
IH0KIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRlc3Ryb3lQYWdlT3ZlcmxheUxh
eWVyKCkKQEAgLTQ3MCw2NSArMzU3LDcgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCkKICAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBudWxs
cHRyOwogfQogCi1QYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKEltYWdlKiBpbWFnZSkK
LXsKLSAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQgPSBDb29yZGluYXRlZElt
YWdlQmFja2luZzo6Z2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRChpbWFnZSk7Ci0gICAgSW1h
Z2VCYWNraW5nTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VCYWNraW5ncy5maW5kKGltYWdlSUQp
OwotICAgIFJlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gaW1hZ2VCYWNraW5nOwotICAg
IGlmIChpdCA9PSBtX2ltYWdlQmFja2luZ3MuZW5kKCkpIHsKLSAgICAgICAgaW1hZ2VCYWNraW5n
ID0gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNyZWF0ZSh0aGlzLCBpbWFnZSk7Ci0gICAgICAg
IG1faW1hZ2VCYWNraW5ncy5hZGQoaW1hZ2VJRCwgaW1hZ2VCYWNraW5nKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgaW1hZ2VCYWNraW5nID0gaXQtPnZhbHVlOwotCi0gICAgcmV0dXJuIGltYWdlQmFj
a2luZzsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUltYWdlQmFj
a2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCi17Ci0gICAgbV9zdGF0ZS5p
bWFnZXNUb0NyZWF0ZS5hcHBlbmQoaW1hZ2VJRCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0Ojp1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBp
bWFnZUlELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gY29vcmRpbmF0ZWRTdXJmYWNl
KQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3N0YXRlLmltYWdlc1Rv
VXBkYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihpbWFnZUlELCBjb29yZGluYXRlZFN1cmZhY2Up
KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNsZWFySW1hZ2VCYWNraW5n
Q29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIG1fc2hv
dWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3N0YXRlLmltYWdlc1RvQ2xlYXIuYXBwZW5kKGlt
YWdlSUQpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlSW1hZ2VC
YWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBpZiAobV9p
c1B1cmdpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2ltYWdlQmFja2luZ3Mu
Y29udGFpbnMoaW1hZ2VJRCkpOwotICAgIG1faW1hZ2VCYWNraW5ncy5yZW1vdmUoaW1hZ2VJRCk7
Ci0KLSAgICBtX3N0YXRlLmltYWdlc1RvUmVtb3ZlLmFwcGVuZChpbWFnZUlEKTsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5n
ZXMoKQotewotICAgIEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgZW5kID0gbV9pbWFnZUJhY2tp
bmdzLmVuZCgpOwotICAgIGZvciAoSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdGVyID0gbV9p
bWFnZUJhY2tpbmdzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGl0ZXIt
PnZhbHVlLT51cGRhdGUoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6Om5v
dGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJs
ZSAvKiB0aW1lICovKQotewotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bm90
aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKLXsKLSAgICBz
Y2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXll
ciwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVj
dCkKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwYWludENvbnRlbnRzKGNvbnN0IEdy
YXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250
ZXh0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKIHsKICAgICBpZiAoZ3JhcGhpY3NMYXllciA9
PSBtX3BhZ2VPdmVybGF5TGF5ZXIpIHsKICAgICAgICAgLy8gT3ZlcmxheXMgY29udGFpbiB0cmFu
c3BhcmVudCBjb250ZW50cyBhbmQgd29uJ3QgY2xlYXIgdGhlIGNvbnRleHQgYXMgcGFydCBvZiB0
aGVpciByZW5kZXJpbmcsIHNvIHdlIGRvIGl0IGhlcmUuCkBAIC01MzgsMTUgKzM2Nyw5IEBAIHZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqIGdyYXBoCiAgICAgfQogfQogCi1QYXNzT3duUHRyPEdyYXBoaWNzTGF5
ZXI+IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlR3JhcGhpY3NMYXllcihHcmFwaGlj
c0xheWVyQ2xpZW50KiBjbGllbnQpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y29t
bWl0Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NT
dGF0ZSYgc3RhdGUpCiB7Ci0gICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBsYXllciA9IG5l
dyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoY2xpZW50KTsKLSAgICBsYXllci0+c2V0Q29vcmRp
bmF0b3IodGhpcyk7Ci0gICAgbV9yZWdpc3RlcmVkTGF5ZXJzLmFkZChsYXllci0+aWQoKSwgbGF5
ZXIpOwotICAgIG1fc3RhdGUubGF5ZXJzVG9DcmVhdGUuYXBwZW5kKGxheWVyLT5pZCgpKTsKLSAg
ICBsYXllci0+c2V0TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1lbnQoKTsKLSAgICBzY2hlZHVsZUxh
eWVyRmx1c2goKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobGF5ZXIpOworICAgIG1fd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNvbW1pdENvb3Jk
aW5hdGVkR3JhcGhpY3NTdGF0ZShzdGF0ZSkpOwogfQogCiBQYXNzUmVmUHRyPENvb3JkaW5hdGVk
U3VyZmFjZT4gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVDb29yZGluYXRlZFN1cmZh
Y2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyBmbGFncykK
QEAgLTU1NCw3MyArMzc3LDE0IEBAIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUNvb3JkaW5hdGVkU3VyZmFjCiAgICAgcmV0dXJu
IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKHNpemUsIGZsYWdzKTsKIH0KIAotZmxvYXQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fd2ViUGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKLX0KLQotZmxvYXQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwYWdlU2NhbGVGYWN0b3IoKSBjb25zdAotewotICAgIHJl
dHVybiBtX3dlYlBhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpOwotfQotCiBib29sIExheWVyVHJlZUhv
c3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCiB7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVVcGRhdGVBdGxhcyh1
aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gY29vcmRpbmF0
ZWRTdXJmYWNlKQotewotICAgIG1fc3RhdGUudXBkYXRlQXRsYXNlc1RvQ3JlYXRlLmFwcGVuZChz
dGQ6Om1ha2VfcGFpcihhdGxhc0lELCBjb29yZGluYXRlZFN1cmZhY2UpKTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFz
SUQpCi17Ci0gICAgaWYgKG1faXNQdXJnaW5nKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zdGF0
ZS51cGRhdGVBdGxhc2VzVG9SZW1vdmUuYXBwZW5kKGF0bGFzSUQpOwotfQotCi1XZWJDb3JlOjpG
bG9hdFJlY3QgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp2aXNpYmxlQ29udGVudHNSZWN0KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV92aXNpYmxlQ29udGVudHNSZWN0OwotfQotCi1Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIqIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bWFpbkNvbnRlbnRz
TGF5ZXIoKQotewotICAgIGlmICghbV9yb290Q29tcG9zaXRpbmdMYXllcikKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICByZXR1cm4gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290Q29t
cG9zaXRpbmdMYXllciktPmZpbmRGaXJzdERlc2NlbmRhbnRXaXRoQ29udGVudHNSZWN1cnNpdmVs
eSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZUNvbnRl
bnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3Rv
cnlWZWN0b3IpCi17Ci0gICAgLy8gQSB6ZXJvIHRyYWplY3RvcnlWZWN0b3IgaW5kaWNhdGVzIHRo
YXQgdGlsZXMgYWxsIGFyb3VuZCB0aGUgdmlld3BvcnQgYXJlIHJlcXVlc3RlZC4KLSAgICBpZiAo
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBjb250ZW50c0xheWVyID0gbWFpbkNvbnRlbnRzTGF5
ZXIoKSkKLSAgICAgICAgY29udGVudHNMYXllci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVj
dG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKTsKLQotICAgIGJvb2wgY29udGVudHNSZWN0RGlk
Q2hhbmdlID0gcmVjdCAhPSBtX3Zpc2libGVDb250ZW50c1JlY3Q7Ci0gICAgaWYgKGNvbnRlbnRz
UmVjdERpZENoYW5nZSkgewotICAgICAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0Owot
Ci0gICAgICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5k
KCk7Ci0gICAgICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5
ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaXQtPnZhbHVlLT5z
ZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
c2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgaWYgKG1fd2ViUGFnZS0+dXNlRml4ZWRMYXlvdXQo
KSkgewotICAgICAgICAvLyBSb3VuZCB0aGUgcmVjdCBpbnN0ZWFkIG9mIGVuY2xvc2luZyBpdCB0
byBtYWtlIHN1cmUgdGhhdCBpdHMgc2l6ZSBzdGF5cwotICAgICAgICAvLyB0aGUgc2FtZSB3aGls
ZSBwYW5uaW5nLiBUaGlzIGNhbiBoYXZlIG5hc3R5IGVmZmVjdHMgb24gbGF5b3V0LgotICAgICAg
ICBtX3dlYlBhZ2UtPnNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KHJvdW5kZWRJbnRSZWN0KHJl
Y3QpKTsKLSAgICB9Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXZpY2VP
clBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKQogewotICAgIG1fcm9vdExheWVyLT5kZXZpY2VPclBh
Z2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5kZXZpY2VPclBhZ2VT
Y2FsZUZhY3RvckNoYW5nZWQoKTsKICAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQogICAgICAg
ICBtX3BhZ2VPdmVybGF5TGF5ZXItPmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwog
fQpAQCAtNjMxLDEzICszOTUsMTMgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnBh
Z2VCYWNrZ3JvdW5kVHJhbnNwYXJlbmN5Q2hhbmdlZCgpCiAKIEdyYXBoaWNzTGF5ZXJGYWN0b3J5
KiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkKIHsKLSAg
ICByZXR1cm4gdGhpczsKKyAgICByZXR1cm4gbV9jb29yZGluYXRvci5nZXQoKTsKIH0KIAogI2lm
IEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpzY2hlZHVsZUFuaW1hdGlvbigpCiB7Ci0gICAgaWYgKG1fd2FpdGluZ0ZvclVJUHJv
Y2VzcykKKyAgICBpZiAobV9jb29yZGluYXRvci0+aXNXYWl0aW5nRm9yUmVuZGVyZXIoKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCkBA
IC02NTAsNzYgKzQxNCw2IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVs
ZUFuaW1hdGlvbigpCiB9CiAjZW5kaWYKIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnJlbmRlck5leHRGcmFtZSgpCi17Ci0gICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0gZmFsc2U7
Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV91cGRhdGVBdGxhc2VzW2ld
LT5kaWRTd2FwQnVmZmVycygpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
cHVyZ2VCYWNraW5nU3RvcmVzKCkKLXsKLSAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gcHVyZ2lu
Z1RvZ2dsZShtX2lzUHVyZ2luZywgdHJ1ZSk7Ci0KLSAgICBMYXllck1hcDo6aXRlcmF0b3IgZW5k
ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOwotICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgaXQtPnZhbHVlLT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsKLQotICAgIG1faW1hZ2VCYWNraW5n
cy5jbGVhcigpOwotICAgIG1fdXBkYXRlQXRsYXNlcy5jbGVhcigpOwotfQotCi1ib29sIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGFpbnRUb1N1cmZhY2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwg
Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyBmbGFncywgdWludDMyX3QmIGF0bGFzSUQsIEludFBv
aW50JiBvZmZzZXQsIENvb3JkaW5hdGVkU3VyZmFjZTo6Q2xpZW50KiBjbGllbnQpCi17Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkgewot
ICAgICAgICBVcGRhdGVBdGxhcyogYXRsYXMgPSBtX3VwZGF0ZUF0bGFzZXNbaV0uZ2V0KCk7Ci0g
ICAgICAgIGlmIChhdGxhcy0+c3VwcG9ydHNBbHBoYSgpID09IChmbGFncyAmIENvb3JkaW5hdGVk
U3VyZmFjZTo6U3VwcG9ydHNBbHBoYSkpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBmYWxz
ZSBpZiB0aGVyZSBpcyBubyBhdmFpbGFibGUgYnVmZmVyIHNwYWNlLgotICAgICAgICAgICAgaWYg
KGF0bGFzLT5wYWludE9uQXZhaWxhYmxlQnVmZmVyKHNpemUsIGF0bGFzSUQsIG9mZnNldCwgY2xp
ZW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHN0YXRpYyBjb25zdCBpbnQgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiA9IDEwMjQ7IC8vIFNo
b3VsZCBiZSBhIHBvd2VyIG9mIHR3by4KLSAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKGFkb3B0
UHRyKG5ldyBVcGRhdGVBdGxhcyh0aGlzLCBTY3JhdGNoQnVmZmVyRGltZW5zaW9uLCBmbGFncykp
KTsKLSAgICBzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMoKTsKLSAgICByZXR1cm4gbV91
cGRhdGVBdGxhc2VzLmxhc3QoKS0+cGFpbnRPbkF2YWlsYWJsZUJ1ZmZlcihzaXplLCBhdGxhc0lE
LCBvZmZzZXQsIGNsaWVudCk7Ci19Ci0KLWNvbnN0IGRvdWJsZSBSZWxlYXNlSW5hY3RpdmVBdGxh
c2VzVGltZXJJbnRlcnZhbCA9IDAuNTsKLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpCi17Ci0gICAgaWYgKCFtX3JlbGVhc2VJ
bmFjdGl2ZUF0bGFzZXNUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3JlbGVhc2VJbmFjdGl2
ZUF0bGFzZXNUaW1lci5zdGFydFJlcGVhdGluZyhSZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJJ
bnRlcnZhbCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZWxlYXNlSW5h
Y3RpdmVBdGxhc2VzVGltZXJGaXJlZChUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+KikK
LXsKLSAgICAvLyBXZSBhbHdheXMgd2FudCB0byBrZWVwIG9uZSBhdGxhcyBmb3Igbm9uLWNvbXBv
c2l0ZWQgY29udGVudC4KLSAgICBPd25QdHI8VXBkYXRlQXRsYXM+IGF0bGFzVG9LZWVwQW55d2F5
OwotICAgIGJvb2wgZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ID0gZmFs
c2U7Ci0gICAgZm9yIChpbnQgaSA9IG1fdXBkYXRlQXRsYXNlcy5zaXplKCkgLSAxOyAgaSA+PSAw
OyAtLWkpIHsKLSAgICAgICAgVXBkYXRlQXRsYXMqIGF0bGFzID0gbV91cGRhdGVBdGxhc2VzW2ld
LmdldCgpOwotICAgICAgICBpZiAoIWF0bGFzLT5pc0luVXNlKCkpCi0gICAgICAgICAgICBhdGxh
cy0+YWRkVGltZUluYWN0aXZlKFJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckludGVydmFsKTsK
LSAgICAgICAgYm9vbCB1c2FibGVGb3JOb25Db21wb3NpdGVkQ29udGVudCA9ICFhdGxhcy0+c3Vw
cG9ydHNBbHBoYSgpOwotICAgICAgICBpZiAoYXRsYXMtPmlzSW5hY3RpdmUoKSkgewotICAgICAg
ICAgICAgaWYgKCFmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgJiYgIWF0
bGFzVG9LZWVwQW55d2F5ICYmIHVzYWJsZUZvck5vbkNvbXBvc2l0ZWRDb250ZW50KQotICAgICAg
ICAgICAgICAgIGF0bGFzVG9LZWVwQW55d2F5ID0gbV91cGRhdGVBdGxhc2VzW2ldLnJlbGVhc2Uo
KTsKLSAgICAgICAgICAgIG1fdXBkYXRlQXRsYXNlcy5yZW1vdmUoaSk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAodXNhYmxlRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQpCi0gICAgICAgICAgICBmb3VuZEFj
dGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgPSB0cnVlOwotICAgIH0KLQotICAgIGlm
ICghZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ICYmIGF0bGFzVG9LZWVw
QW55d2F5KQotICAgICAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKGF0bGFzVG9LZWVwQW55d2F5
LnJlbGVhc2UoKSk7Ci0KLSAgICBpZiAobV91cGRhdGVBdGxhc2VzLnNpemUoKSA8PSAxKQotICAg
ICAgICBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5zdG9wKCk7Ci19Ci0KIHZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6
Q29sb3ImIGNvbG9yKQogewogICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldEJhY2tncm91bmRDb2xvcihjb2xvcikpOwpAQCAtNzI3
LDExICs0MjEsNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0QmFja2dyb3Vu
ZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikKIAogdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmNvbW1pdFNjcm9sbE9mZnNldCh1aW50MzJfdCBsYXllcklELCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBvZmZzZXQpCiB7Ci0gICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGkgPSBt
X3JlZ2lzdGVyZWRMYXllcnMuZmluZChsYXllcklEKTsKLSAgICBpZiAoaSA9PSBtX3JlZ2lzdGVy
ZWRMYXllcnMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGktPnZhbHVlLT5jb21taXRT
Y3JvbGxPZmZzZXQob2Zmc2V0KTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5jb21taXRTY3JvbGxPZmZz
ZXQobGF5ZXJJRCwgb2Zmc2V0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCmlu
ZGV4IDE0MTRmNDNlOGZiNjc1MmFhNzllOTBkZDM0MmZmYjEyY2M3ZjNmZTIuLmYwMDdkZjljNTg2
NzAwMjgwYzc1ZmVjYzQ0ODU3YjFlNzhmNzBjMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCkBAIC0yNSwxMyArMjUsOCBA
QAogCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUhv
c3QuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNzU3Rh
dGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9D
b21wb3NpdGluZ0Nvb3JkaW5hdG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVy
RmFjdG9yeS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVXBkYXRlQXRsYXMuaD4KICNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCkBAIC00NiwxMSArNDEsNyBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViUGFnZTsKIAotY2xhc3MgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0IDogcHVibGljIExheWVyVHJlZUhvc3QsIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDbGllbnQKLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJDbGllbnQKLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6
Q2xpZW50Ci0gICAgLCBwdWJsaWMgV2ViQ29yZTo6VXBkYXRlQXRsYXM6OkNsaWVudAotICAgICwg
cHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5CitjbGFzcyBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3QgOiBwdWJsaWMgTGF5ZXJUcmVlSG9zdCwgcHVibGljIFdlYkNvcmU6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICAs
IFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudAogI2VuZGlmCkBAIC04NCw5ICs3NSw2
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFu
Z2VkKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHBhZ2VCYWNrZ3JvdW5kVHJhbnNwYXJl
bmN5Q2hhbmdlZCgpIE9WRVJSSURFOwogCi0gICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFt
ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVD
b29yZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3Jl
SVBDOjpNZXNzYWdlRGVjb2RlciYpOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckZhY3RvcnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgT1ZFUlJJREU7CiAgICAgV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBtYWluQ29udGVudHNMYXllcigpOwpAQCAtOTgsNjAg
Kzg2LDMzIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3Jk
aW5hdGVkU3VyZmFjZT4gY3JlYXRlQ29vcmRpbmF0ZWRTdXJmYWNlKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmLCBXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzKTsKIAotICAgIHZvaWQg
Y29tbWl0U2Nyb2xsT2Zmc2V0KHVpbnQzMl90IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIG9mZnNldCk7Ci0KIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3QoV2ViUGFnZSopOwogCiBwcml2YXRlOgotICAgIC8vIEdyYXBoaWNzTGF5ZXJDbGll
bnQKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpOwotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlG
bHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2Us
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKLSAgICB2aXJ0dWFsIGZsb2F0IGRl
dmljZVNjYWxlRmFjdG9yKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBmbG9hdCBwYWdl
U2NhbGVGYWN0b3IoKSBjb25zdCBPVkVSUklERTsKLQotICAgIC8vIENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nOjpDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKFdlYkNv
cmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwg
UGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U+KSBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhXZWJDb3JlOjpDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW1hZ2VC
YWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOwotCi0g
ICAgdm9pZCBmbHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7Ci0KLSAgICAvLyBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKLSAgICB2aXJ0dWFsIGJvb2wgaXNGbHVzaGluZ0xh
eWVyQ2hhbmdlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faXNGbHVzaGluZ0xheWVyQ2hh
bmdlczsgfQotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVDb250ZW50c1Jl
Y3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKFdlYkNvcmU6OkltYWdlKikg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllciopOwotICAgIHZpcnR1YWwgYm9vbCBwYWludFRvU3VyZmFjZShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywg
dWludDMyX3QmIC8qIGF0bGFzSUQgKi8sIFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q29v
cmRpbmF0ZWRTdXJmYWNlOjpDbGllbnQqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc3lu
Y0xheWVyU3RhdGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOwotCi0gICAgLy8gVXBkYXRlQXRsYXM6OkNsaWVudAot
ICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNz
UmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZT4pIE9WRVJSSURFOwotICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKSBPVkVSUklERTsKLQot
ICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNsaWVudCopIE9WRVJSSURFOwotCiAgICAgLy8gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
Ci0gICAgdm9pZCBpbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCgpOwogICAg
IHZvaWQgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOwogICAgIHZvaWQgZGVzdHJveVBhZ2VPdmVy
bGF5TGF5ZXIoKTsKLSAgICBib29sIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOwotICAgIHZv
aWQgY2xlYXJQZW5kaW5nU3RhdGVDaGFuZ2VzKCk7CiAgICAgdm9pZCBjYW5jZWxQZW5kaW5nTGF5
ZXJGbHVzaCgpOwogICAgIHZvaWQgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKLSAgICB2
b2lkIGRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7CiAgICAgdm9pZCBzeW5jRGlzcGxh
eVN0YXRlKCk7Ci0gICAgdm9pZCBsYXllckZsdXNoVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q+Kik7CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNS
ZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQm
KTsKKyAgICB2b2lkIHJlbmRlck5leHRGcmFtZSgpOworICAgIHZvaWQgcHVyZ2VCYWNraW5nU3Rv
cmVzKCk7CisgICAgdm9pZCBjb21taXRTY3JvbGxPZmZzZXQodWludDMyX3QgbGF5ZXJJRCwgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgb2Zmc2V0KTsKIAotICAgIHZvaWQgc2NoZWR1bGVSZWxlYXNl
SW5hY3RpdmVBdGxhc2VzKCk7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogcm9vdExheWVy
KCkgeyByZXR1cm4gbV9jb29yZGluYXRvci0+cm9vdExheWVyKCk7IH0KIAotICAgIHZvaWQgcmVs
ZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8Q29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0PiopOworICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6
VGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiopOworCisgICAgLy8gQ29tcG9zaXRpbmdD
b29yZGluYXRvcjo6Q2xpZW50CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29tcG9zaXRpbmdTdGF0
ZVBlcmlwaGVyYWxMYXllcnMoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVM
YXllckZsdXNoUmVxdWlyZWQoKSBPVkVSUklERSB7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9Owor
ICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBj
bGlwUmVjdCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENvb3JkaW5hdGVkR3Jh
cGhpY3NTdGF0ZShXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKSBPVkVSUklERTsK
IAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICB2b2lkIHByZXBhcmVDdXN0b21GaWx0ZXJQ
cm94aWVzSWZOZWVkZWQoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUN1c3RvbUZpbHRlclByb3hpZXNJZk5lZWRlZChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpIE9WRVJSSURFOwogCiAgICAgLy8g
V2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5Q2xpZW50CiAgICAgdm9pZCByZW1vdmVDdXN0b21G
aWx0ZXJQcm9ncmFtUHJveHkoV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5Kik7CkBAIC0xNjAs
NDMgKzEyMSwyNSBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlzY29ubmVjdEN1c3RvbUZpbHRlclBy
b2dyYW1zKCk7CiAjZW5kaWYKIAotICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBt
X3Jvb3RMYXllcjsKLSAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBtX3Jvb3RDb21wb3NpdGlu
Z0xheWVyOworICAgIE93blB0cjxXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiBtX2Nv
b3JkaW5hdG9yOwogCiAgICAgLy8gVGhlIHBhZ2Ugb3ZlcmxheSBsYXllci4gV2lsbCBiZSBudWxs
IGlmIHRoZXJlJ3Mgbm8gcGFnZSBvdmVybGF5LgogICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGlj
c0xheWVyPiBtX3BhZ2VPdmVybGF5TGF5ZXI7CiAgICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBtX3Bh
Z2VPdmVybGF5OwogCi0gICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlIG1fc3Rh
dGU7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiBMYXllck1hcDsKLSAgICBMYXllck1h
cCBtX3JlZ2lzdGVyZWRMYXllcnM7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OkNvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFj
a2luZz4gPiBJbWFnZUJhY2tpbmdNYXA7Ci0gICAgSW1hZ2VCYWNraW5nTWFwIG1faW1hZ2VCYWNr
aW5nczsKLSAgICBWZWN0b3I8T3duUHRyPFdlYkNvcmU6OlVwZGF0ZUF0bGFzPiA+IG1fdXBkYXRl
QXRsYXNlczsKLQogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICBIYXNoU2V0PFdlYkN1c3Rv
bUZpbHRlclByb2dyYW1Qcm94eSo+IG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXM7CiAjZW5kaWYKIAog
ICAgIGJvb2wgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7CiAgICAgYm9vbCBtX2lz
VmFsaWQ7Ci0gICAgLy8gV2UgZG9uJ3Qgc2VuZCB0aGUgbWVzc2FnZXMgcmVsYXRlZCB0byByZWxl
YXNpbmcgcmVzb3VyY2VzIHRvIFVJIFByb2Nlc3MgZHVyaW5nIHB1cmdpbmcsIGJlY2F1c2UgVUkg
UHJvY2VzcyBhbHJlYWR5IGhhZCByZW1vdmVkIGFsbCByZXNvdXJjZXMuCi0gICAgYm9vbCBtX2lz
UHVyZ2luZzsKLSAgICBib29sIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlczsKLQotICAgIGJvb2wg
bV93YWl0aW5nRm9yVUlQcm9jZXNzOwogICAgIGJvb2wgbV9pc1N1c3BlbmRlZDsKLSAgICBXZWJD
b3JlOjpGbG9hdFJlY3QgbV92aXNpYmxlQ29udGVudHNSZWN0OwogCiAgICAgTGF5ZXJUcmVlQ29u
dGV4dCBtX2xheWVyVHJlZUNvbnRleHQ7Ci0gICAgYm9vbCBtX3Nob3VsZFN5bmNGcmFtZTsKLSAg
ICBib29sIG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyOworCiAgICAgV2ViQ29y
ZTo6VGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiBtX2xheWVyRmx1c2hUaW1lcjsKLSAg
ICBXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IG1fcmVsZWFzZUluYWN0
aXZlQXRsYXNlc1RpbWVyOwogICAgIGJvb2wgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQ7
CiAgICAgdWludDY0X3QgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQ7Ci0gICAgYm9vbCBt
X2FuaW1hdGlvbnNMb2NrZWQ7CiAKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUp
CiAgICAgZG91YmxlIG1fbGFzdEFuaW1hdGlvblNlcnZpY2VUaW1lOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgKaW5kZXggOTBiYmI5NDFk
MWFiMDU2ODFmOTZhMjE0MDJjZjkzNDgxYjMyNzc3ZC4uMmZhZDJkMTNjZjI1ZDgzNmVjZmFiYTNh
YmZlNmFmODk4MDI0MGEyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCkBAIC04Nyw5ICs4Nyw2IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgeyB9CiAK
ICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgdmlydHVhbCB2b2lkIHNldFZpc2li
bGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQgLyogc2NhbGUg
Ki8sIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVu
ZGVyTmV4dEZyYW1lKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHB1cmdlQmFja2luZ1N0b3Jlcygp
IHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKSA9
IDA7CiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204012</attachid>
            <date>2013-06-07 01:01:18 -0700</date>
            <delta_ts>2013-06-07 04:59:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104360-20130607165944.patch</filename>
            <type>text/plain</type>
            <size>64044</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxMzA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDI0MjRkMmY2YzA3MjNm
YzA5YTQzZDdjOTNhNjdkYjI2YTc0ZGVlOS4uYmM0NmI5MzY2YzJjYjkwZjQzMDUyMzk3ZmRiZmIy
NDdkMDRkNmRmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDEzLTAzLTEzICBHd2Fu
ZyBZb29uIEh3YW5nICA8cnl1bWllbEBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGlu
YXRlZCBHcmFwaGljczogU2VwYXJhdGUgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGludG8gQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0IGFuZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQzNjAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0IGhhcyB0b28gbWFueSByZXNwb25zaWJpbGl0aWVzLiBJdAorICAgICAgICBp
bXBsZW1lbnRzIExheWVyVHJlZUhvc3QsIEdyYXBoaWNzTGF5ZXJDbGllbnQsCisgICAgICAgIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNs
aWVudCwKKyAgICAgICAgVXBkYXRlQXRsYXM6OkNsaWVudCwgR3JhcGhpY3NMYXllckZhY3Rvcnkg
YW5kCisgICAgICAgIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudC4KKworICAgICAg
ICBUaGlzIHJlZmFjdG9yaW5nIHJlZHVjZXMgdGhlIHJlc3BvbnNpYmlsaXRpZXMgb2YgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5l
dyBjbGFzcyBjYWxsZWQgQ29tcG9zaXRpbmdDb29yZGluYXRvciwgd2hpY2gKKyAgICAgICAgdGFr
ZXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIG1hbmFnaW5nIGNvbXBvc2l0aW5nIHJlc291cmNlcyBp
bgorICAgICAgICBXZWJQcm9jZXNzLgorCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dCBub3cgdGFrZXMgYSBwYXJ0IGZvciBzY2hlZHVsaW5nIGFuZCBJUEMKKyAgICAgICAgc3BlY2lm
aWMgcGFydHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRl
c3RzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVGFyZ2V0LnByaToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRp
bmdDb29yZGluYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdD
b29yZGluYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6On5Db21wb3NpdGluZ0Nvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2l6ZURpZENoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpmbHVzaFBlbmRpbmdM
YXllckNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6
Y2xlYXJQZW5kaW5nU3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OmluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZVJvb3RMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzeW5jTGF5ZXJTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVJbWFn
ZUJhY2tpbmdJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpjcmVhdGVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdD
b29yZGluYXRvcjo6dXBkYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVtb3ZlSW1hZ2VCYWNraW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0ltYWdl
QmFja2luZ0NoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRv
cjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpub3RpZnlGbHVzaFJlcXVpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OnBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlR3JhcGhpY3NMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXZpY2VTY2FsZUZhY3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpwYWdlU2NhbGVGYWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlVXBkYXRlQXRs
YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVtb3ZlVXBk
YXRlQXRsYXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6dmlz
aWJsZUNvbnRlbnRzUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjptYWluQ29udGVudHNMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjb21taXRTY3JvbGxPZmZz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVuZGVyTmV4
dEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnB1cmdl
QmFja2luZ1N0b3Jlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
OjpwYWludFRvU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3Np
dGluZ0Nvb3JkaW5hdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdD
b29yZGluYXRvcjo6Y2xlYXJSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRp
bmdDb29yZGluYXRvcjo6cm9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OnN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OmlzV2FpdGluZ0ZvclJlbmRlcmVyKToKKwogMjAxMy0wNi0wNiAgSmVyIE5vYmxlICA8
amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXN0cmljdCBXZWJBdWRpbyBmcm9tIHBs
YXlpbmcgd2hlbiBkaXNhbGxvd2VkIGJ5IHBhZ2UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMDlhOGY4NjJkOWQ0
MDc3OTEyNjRjODYyMTllOTYwZDgyNzlkODI2NC4uMjMxM2YzODgxNjY4YTI0MjM4YmIzZmM2OWY4
NGQyYWI5NjYyNDM2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDEzLTAzLTEzICBH
d2FuZyBZb29uIEh3YW5nICA8cnl1bWllbEBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29y
ZGluYXRlZCBHcmFwaGljczogU2VwYXJhdGUgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGludG8g
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGFuZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQzNjAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0IGhhcyB0b28gbWFueSByZXNwb25zaWJpbGl0aWVzLiBJdAorICAgICAg
ICBpbXBsZW1lbnRzIExheWVyVHJlZUhvc3QsIEdyYXBoaWNzTGF5ZXJDbGllbnQsCisgICAgICAg
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6
OkNsaWVudCwKKyAgICAgICAgVXBkYXRlQXRsYXM6OkNsaWVudCwgR3JhcGhpY3NMYXllckZhY3Rv
cnkgYW5kCisgICAgICAgIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudC4KKworICAg
ICAgICBUaGlzIHJlZmFjdG9yaW5nIHJlZHVjZXMgdGhlIHJlc3BvbnNpYmlsaXRpZXMgb2YgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBh
IG5ldyBjbGFzcyBjYWxsZWQgQ29tcG9zaXRpbmdDb29yZGluYXRvciwgd2hpY2gKKyAgICAgICAg
dGFrZXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIG1hbmFnaW5nIGNvbXBvc2l0aW5nIHJlc291cmNl
cyBpbgorICAgICAgICBXZWJQcm9jZXNzLgorCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdCBub3cgdGFrZXMgYSBwYXJ0IGZvciBzY2hlZHVsaW5nIGFuZCBJUEMKKyAgICAgICAgc3Bl
Y2lmaWMgcGFydHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBjb3ZlcmVkIGJ5IGV4aXN0aW5n
IHRlc3RzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0Ojp+Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KToKKyAgICAgICAg
KFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3QpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFJvb3RD
b21wb3NpdGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0Ojpmb3JjZVJlcGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OnNpemVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnNldFZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6
OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cHVyZ2VCYWNraW5nU3RvcmVzKToKKyAgICAgICAg
KFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaWRTeW5jTGF5ZXJTdGF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cHJlcGFyZUN1c3RvbUZp
bHRlclByb3hpZXNGb3JBbmltYXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKToKKyAgICAgICAg
KFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9n
cmFtUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRp
ZEZsdXNoUm9vdExheWVyKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlUGFnZU92ZXJsYXlMYXllcik6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGFpbnRDb250ZW50cyk6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Q29vcmRpbmF0ZWRHcmFw
aGljc1N0YXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpk
ZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KToKKyAgICAgICAgKFdlYktp
dDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZUFuaW1hdGlvbik6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y29tbWl0U2Nyb2xsT2Zmc2V0KToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZExheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0Ojpyb290TGF5ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRy
ZWVIb3N0Lmg6CisKIDIwMTMtMDYtMDYgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4K
IAogICAgICAgICBDb21wbGV0ZWx5IGluaXRpYWxpemUgQ2hpbGRQcm9jZXNzIHN0YXRlIG9uIGxh
dW5jaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA4ZTgzNzM1OWM5MzU2NmRjNTU2YTRlM2YyODc5
Y2M2Yjc5NzIxZWZkLi41ZjZmY2FkODM1ZDExY2Y5MDc3MWUwM2JhY2IwYjU3YjkzZTZhZGQzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTk2Niw2ICsxOTY2LDcgQEAgc2V0KFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAog
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3Iu
Y3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0NvbXBvc2l0aW5n
Q29vcmRpbmF0b3IuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9U
YXJnZXQucHJpCmluZGV4IDBiNGE0ZmQ5ZDA2ZGRkODUzZjIwNmMxNTJiMDdkYzAyYzJmMmE2Nzku
LjgzNTRlZjM0ODhlNjNmYjU5ZmIxYTJjNGUxZWJjNDA2MDUwODVmNmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpA
QCAtNDE0MCw2ICs0MTQwLDcgQEAgdXNlPygzRF9HUkFQSElDUykgewogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmggXAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uaCBcCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmggXAorICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29y
ZGluYXRvci5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCBcCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEN1
c3RvbUZpbHRlclByb2dyYW0uaCBcCkBAIC00MTc1LDYgKzQxNzYsNyBAQCB1c2U/KDNEX0dSQVBI
SUNTKSB7CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wu
Y3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9BcmVhQWxsb2NhdG9yLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcCBcCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5j
cHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21w
b3NpdGluZ0Nvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40MDA5NjUyYjg4ZGQ0YTA5OGE3ZjI0ZGRiNTI4MWYzNjU1MmMxZDNmCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCkBAIC0wLDAgKzEsNDE1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKS4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiQ29tcG9zaXRpbmdDb29yZGluYXRvci5oIgor
CisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5
Q2hhbmdlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yPiBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGUoUGFnZSogcGFnZSwg
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yKHBhZ2UsIGNsaWVudCkpOworfQorCitD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp+Q29tcG9zaXRpbmdDb29yZGluYXRvcigpCit7CisgICAg
cHVyZ2VCYWNraW5nU3RvcmVzKCk7CisKKyAgICBMYXllck1hcDo6aXRlcmF0b3IgZW5kID0gbV9y
ZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOworICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQt
PnZhbHVlLT5zZXRDb29yZGluYXRvcigwKTsKK30KKworQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6
Q29tcG9zaXRpbmdDb29yZGluYXRvcihQYWdlKiBwYWdlLCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
OjpDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fcGFnZShwYWdlKQorICAgICwgbV9jbGllbnQoY2xp
ZW50KQorICAgICwgbV9yb290Q29tcG9zaXRpbmdMYXllcigwKQorICAgICwgbV9pc1B1cmdpbmco
ZmFsc2UpCisgICAgLCBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXMoZmFsc2UpCisgICAgLCBtX2lz
V2FpdGluZ0ZvclJlbmRlcmVyKHRydWUpCisgICAgLCBtX3Nob3VsZFN5bmNGcmFtZShmYWxzZSkK
KyAgICAsIG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyKGZhbHNlKQorICAgICwg
bV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIodGhpcywgJkNvbXBvc2l0aW5nQ29vcmRpbmF0
b3I6OnJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKQoreworICAgIG1fcGFnZS0+c2V0
dGluZ3MoKS0+c2V0QXBwbHlEZXZpY2VTY2FsZUZhY3RvckluQ29tcG9zaXRvcih0cnVlKTsKKwor
ICAgIC8vIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd2F5IHRvIGVuYWJsZSB0aGlzIG9ubHkgaW4gdGhl
IEdMIGNhc2UsIHVudGlsIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlciBpcyByZW1vdmVkLgorICAg
IC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0ODY5Cisg
ICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRTaG91bGRTdXBwb3J0Q29udGVudHNUaWxp
bmcodHJ1ZSk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0Um9vdENvbXBv
c2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgaWYgKG1fcm9vdENvbXBv
c2l0aW5nTGF5ZXIpCisgICAgICAgIG1fcm9vdENvbXBvc2l0aW5nTGF5ZXItPnJlbW92ZUZyb21Q
YXJlbnQoKTsKKworICAgIG1fcm9vdENvbXBvc2l0aW5nTGF5ZXIgPSBsYXllcjsKKyAgICBpZiAo
bV9yb290Q29tcG9zaXRpbmdMYXllcikKKyAgICAgICAgbV9yb290TGF5ZXItPmFkZENoaWxkQXRJ
bmRleChtX3Jvb3RDb21wb3NpdGluZ0xheWVyLCAwKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOjpzaXplRGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIG5ld1NpemUpCit7CisgICAg
bV9yb290TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisgICAgbV9jbGllbnQtPnNjaGVkdWxlTGF5
ZXJGbHVzaFJlcXVpcmVkKCk7Cit9CisKK2Jvb2wgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Zmx1
c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKK3sKKyAgICBpZiAobV9pc1dhaXRpbmdGb3JSZW5kZXJl
cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IHBy
b3RlY3RvcihtX2lzRmx1c2hpbmdMYXllckNoYW5nZXMsIHRydWUpOworCisgICAgaW5pdGlhbGl6
ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQoKTsKKworICAgIG1fcm9vdExheWVyLT5mbHVz
aENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgbV9jbGllbnQtPmRpZEZs
dXNoUm9vdExheWVyKCk7CisKKyAgICBib29sIGRpZFN5bmMgPSBtX3BhZ2UtPm1haW5GcmFtZSgp
LT52aWV3KCktPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworCisg
ICAgdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT51cGRhdGVD
b250ZW50QnVmZmVyc0luY2x1ZGluZ1N1YkxheWVycygpOworICAgIHRvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+c3luY1BlbmRpbmdTdGF0ZUNoYW5nZXNJbmNs
dWRpbmdTdWJMYXllcnMoKTsKKworICAgIGZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMo
KTsKKworICAgIGlmIChtX3Nob3VsZFN5bmNGcmFtZSkgeworICAgICAgICBkaWRTeW5jID0gdHJ1
ZTsKKworICAgICAgICBpZiAobV9yb290Q29tcG9zaXRpbmdMYXllcikgeworICAgICAgICAgICAg
bV9zdGF0ZS5jb250ZW50c1NpemUgPSByb3VuZGVkSW50U2l6ZShtX3Jvb3RDb21wb3NpdGluZ0xh
eWVyLT5zaXplKCkpOworICAgICAgICAgICAgaWYgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciog
Y29udGVudHNMYXllciA9IG1haW5Db250ZW50c0xheWVyKCkpCisgICAgICAgICAgICAgICAgbV9z
dGF0ZS5jb3ZlcmVkUmVjdCA9IGNvbnRlbnRzTGF5ZXItPmNvdmVyUmVjdCgpOworICAgICAgICB9
CisgICAgICAgIG1fc3RhdGUuc2Nyb2xsUG9zaXRpb24gPSBtX3Zpc2libGVDb250ZW50c1JlY3Qu
bG9jYXRpb24oKTsKKworICAgICAgICBtX2NsaWVudC0+Y29tbWl0Q29vcmRpbmF0ZWRHcmFwaGlj
c1N0YXRlKG1fc3RhdGUpOworCisgICAgICAgIGNsZWFyUGVuZGluZ1N0YXRlQ2hhbmdlcygpOwor
ICAgICAgICBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyID0gdHJ1ZTsKKyAgICAgICAgbV9zaG91bGRT
eW5jRnJhbWUgPSBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gZGlkU3luYzsKK30KKwordm9p
ZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjbGVhclBlbmRpbmdTdGF0ZUNoYW5nZXMoKQorewor
ICAgIG1fc3RhdGUubGF5ZXJzVG9DcmVhdGUuY2xlYXIoKTsKKyAgICBtX3N0YXRlLmxheWVyc1Rv
VXBkYXRlLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5sYXllcnNUb1JlbW92ZS5jbGVhcigpOworCisg
ICAgbV9zdGF0ZS5pbWFnZXNUb0NyZWF0ZS5jbGVhcigpOworICAgIG1fc3RhdGUuaW1hZ2VzVG9S
ZW1vdmUuY2xlYXIoKTsKKyAgICBtX3N0YXRlLmltYWdlc1RvVXBkYXRlLmNsZWFyKCk7CisgICAg
bV9zdGF0ZS5pbWFnZXNUb0NsZWFyLmNsZWFyKCk7CisKKyAgICBtX3N0YXRlLnVwZGF0ZUF0bGFz
ZXNUb0NyZWF0ZS5jbGVhcigpOworICAgIG1fc3RhdGUudXBkYXRlQXRsYXNlc1RvUmVtb3ZlLmNs
ZWFyKCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgbV9zdGF0ZS5jdXN0b21GaWx0
ZXJzVG9DcmVhdGUuY2xlYXIoKTsKKyAgICBtX3N0YXRlLmN1c3RvbUZpbHRlcnNUb1JlbW92ZS5j
bGVhcigpOworI2VuZGlmCit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6aW5pdGlh
bGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQoKQoreworICAgIGlmIChtX2RpZEluaXRp
YWxpemVSb290Q29tcG9zaXRpbmdMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0
ZS5yb290Q29tcG9zaXRpbmdMYXllciA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9v
dExheWVyLmdldCgpKS0+aWQoKTsKKyAgICBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdM
YXllciA9IHRydWU7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworfQorCit2b2lkIENv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZVJvb3RMYXllcihjb25zdCBJbnRTaXplJiBzaXpl
KQoreworICAgIEFTU0VSVCghbV9yb290TGF5ZXIpOworICAgIC8vIENyZWF0ZSBhIHJvb3QgbGF5
ZXIuCisgICAgbV9yb290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcywgdGhpcyk7
CisjaWZuZGVmIE5ERUJVRworICAgIG1fcm9vdExheWVyLT5zZXROYW1lKCJDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yIHJvb3QgbGF5ZXIiKTsKKyNlbmRpZgorICAgIG1fcm9vdExheWVyLT5zZXREcmF3
c0NvbnRlbnQoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKHNpemUpOworfQorCit2
b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5
ZXJJRCBpZCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQoreworICAgIG1f
c2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKworICAgIG1fY2xpZW50LT5kaWRTeW5jTGF5ZXJTdGF0
ZShzdGF0ZSk7CisKKyAgICBtX3N0YXRlLmxheWVyc1RvVXBkYXRlLmFwcGVuZChzdGQ6Om1ha2Vf
cGFpcihpZCwgc3RhdGUpKTsKK30KKworUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2lu
Zz4gQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoSW1h
Z2UqIGltYWdlKQoreworICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCA9IENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpnZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKGltYWdl
KTsKKyAgICBJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZp
bmQoaW1hZ2VJRCk7CisgICAgUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBpbWFnZUJh
Y2tpbmc7CisgICAgaWYgKGl0ID09IG1faW1hZ2VCYWNraW5ncy5lbmQoKSkgeworICAgICAgICBp
bWFnZUJhY2tpbmcgPSBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y3JlYXRlKHRoaXMsIGltYWdl
KTsKKyAgICAgICAgbV9pbWFnZUJhY2tpbmdzLmFkZChpbWFnZUlELCBpbWFnZUJhY2tpbmcpOwor
ICAgIH0gZWxzZQorICAgICAgICBpbWFnZUJhY2tpbmcgPSBpdC0+dmFsdWU7CisKKyAgICByZXR1
cm4gaW1hZ2VCYWNraW5nOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0
ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAg
bV9zdGF0ZS5pbWFnZXNUb0NyZWF0ZS5hcHBlbmQoaW1hZ2VJRCk7Cit9CisKK3ZvaWQgQ29tcG9z
aXRpbmdDb29yZGluYXRvcjo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQgaW1hZ2VJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IGNvb3JkaW5hdGVk
U3VyZmFjZSkKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV9zdGF0ZS5p
bWFnZXNUb1VwZGF0ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoaW1hZ2VJRCwgY29vcmRpbmF0ZWRT
dXJmYWNlKSk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y2xlYXJJbWFnZUJh
Y2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAg
bV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fc3RhdGUuaW1hZ2VzVG9DbGVhci5hcHBl
bmQoaW1hZ2VJRCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVtb3ZlSW1h
Z2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBpZiAo
bV9pc1B1cmdpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX2ltYWdlQmFja2lu
Z3MuY29udGFpbnMoaW1hZ2VJRCkpOworICAgIG1faW1hZ2VCYWNraW5ncy5yZW1vdmUoaW1hZ2VJ
RCk7CisKKyAgICBtX3N0YXRlLmltYWdlc1RvUmVtb3ZlLmFwcGVuZChpbWFnZUlEKTsKK30KKwor
dm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpmbHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFu
Z2VzKCkKK3sKKyAgICBJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faW1hZ2VCYWNr
aW5ncy5lbmQoKTsKKyAgICBmb3IgKEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgaXRlciA9IG1f
aW1hZ2VCYWNraW5ncy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICBpdGVy
LT52YWx1ZS0+dXBkYXRlKCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6bm90
aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBHcmFwaGljc0xheWVyKiwgZG91YmxlIC8qIHRpbWUg
Ki8pCit7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6bm90aWZ5Rmx1c2hSZXF1
aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikKK3sKKyAgICBtX2NsaWVudC0+c2NoZWR1bGVMYXll
ckZsdXNoUmVxdWlyZWQoKTsKK30KKworCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnBh
aW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcGhpY3ND
b250ZXh0JiBncmFwaGljc0NvbnRleHQsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25z
dCBJbnRSZWN0JiBjbGlwUmVjdCkKK3sKKyAgICBtX2NsaWVudC0+cGFpbnRDb250ZW50cyhncmFw
aGljc0xheWVyLCBncmFwaGljc0NvbnRleHQsIGNsaXBSZWN0KTsKK30KKworUGFzc093blB0cjxH
cmFwaGljc0xheWVyPiBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVHcmFwaGljc0xheWVy
KEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIqIGxheWVyID0gbmV3IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihjbGllbnQpOworICAg
IGxheWVyLT5zZXRDb29yZGluYXRvcih0aGlzKTsKKyAgICBtX3JlZ2lzdGVyZWRMYXllcnMuYWRk
KGxheWVyLT5pZCgpLCBsYXllcik7CisgICAgbV9zdGF0ZS5sYXllcnNUb0NyZWF0ZS5hcHBlbmQo
bGF5ZXItPmlkKCkpOworICAgIGxheWVyLT5zZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgp
OworICAgIG1fY2xpZW50LT5zY2hlZHVsZUxheWVyRmx1c2hSZXF1aXJlZCgpOworICAgIHJldHVy
biBhZG9wdFB0cihsYXllcik7Cit9CisKK2Zsb2F0IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRl
dmljZVNjYWxlRmFjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYWdlLT5kZXZpY2VTY2Fs
ZUZhY3RvcigpOworfQorCitmbG9hdCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpwYWdlU2NhbGVG
YWN0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpOwor
fQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQz
Ml90IGF0bGFzSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBjb29yZGluYXRlZFN1
cmZhY2UpCit7CisgICAgbV9zdGF0ZS51cGRhdGVBdGxhc2VzVG9DcmVhdGUuYXBwZW5kKHN0ZDo6
bWFrZV9wYWlyKGF0bGFzSUQsIGNvb3JkaW5hdGVkU3VyZmFjZSkpOworfQorCit2b2lkIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OnJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCit7
CisgICAgaWYgKG1faXNQdXJnaW5nKQorICAgICAgICByZXR1cm47CisgICAgbV9zdGF0ZS51cGRh
dGVBdGxhc2VzVG9SZW1vdmUuYXBwZW5kKGF0bGFzSUQpOworfQorCitGbG9hdFJlY3QgQ29tcG9z
aXRpbmdDb29yZGluYXRvcjo6dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKK30KKworQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
KiBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjptYWluQ29udGVudHNMYXllcigpCit7CisgICAgaWYg
KCFtX3Jvb3RDb21wb3NpdGluZ0xheWVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVy
biB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RDb21wb3NpdGluZ0xheWVyKS0+Zmlu
ZEZpcnN0RGVzY2VuZGFudFdpdGhDb250ZW50c1JlY3Vyc2l2ZWx5KCk7Cit9CisKK3ZvaWQgQ29t
cG9zaXRpbmdDb29yZGluYXRvcjo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAgLy8g
QSB6ZXJvIHRyYWplY3RvcnlWZWN0b3IgaW5kaWNhdGVzIHRoYXQgdGlsZXMgYWxsIGFyb3VuZCB0
aGUgdmlld3BvcnQgYXJlIHJlcXVlc3RlZC4KKyAgICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyKiBjb250ZW50c0xheWVyID0gbWFpbkNvbnRlbnRzTGF5ZXIoKSkKKyAgICAgICAgY29udGVu
dHNMYXllci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5
VmVjdG9yKTsKKworICAgIGJvb2wgY29udGVudHNSZWN0RGlkQ2hhbmdlID0gcmVjdCAhPSBtX3Zp
c2libGVDb250ZW50c1JlY3Q7CisgICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSkgeworICAg
ICAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0OworCisgICAgICAgIExheWVyTWFwOjpp
dGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7CisgICAgICAgIGZvciAoTGF5
ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0TmVlZHNWaXNpYmxlUmVjdEFkanVz
dG1lbnQoKTsKKyAgICB9CisKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX3BhZ2UtPm1haW5GcmFt
ZSgpLT52aWV3KCk7CisgICAgaWYgKHZpZXctPnVzZUZpeGVkTGF5b3V0KCkpIHsKKyAgICAgICAg
Ly8gUm91bmQgdGhlIHJlY3QgaW5zdGVhZCBvZiBlbmNsb3NpbmcgaXQgdG8gbWFrZSBzdXJlIHRo
YXQgaXRzIHNpemUgc3RheXMKKyAgICAgICAgLy8gdGhlIHNhbWUgd2hpbGUgcGFubmluZy4gVGhp
cyBjYW4gaGF2ZSBuYXN0eSBlZmZlY3RzIG9uIGxheW91dC4KKyAgICAgICAgdmlldy0+c2V0Rml4
ZWRWaXNpYmxlQ29udGVudFJlY3Qocm91bmRlZEludFJlY3QocmVjdCkpOworICAgIH0KK30KKwor
dm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5n
ZWQoKQoreworICAgIG1fcm9vdExheWVyLT5kZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQo
KTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hMYXllcihDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIGlmIChtX2lzUHVyZ2luZykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9yZWdpc3RlcmVkTGF5ZXJzLnJlbW92ZShsYXllci0+aWQoKSk7
CisKKyAgICBzaXplX3QgaW5kZXggPSBtX3N0YXRlLmxheWVyc1RvQ3JlYXRlLmZpbmQobGF5ZXIt
PmlkKCkpOworICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkgeworICAgICAgICBtX3N0YXRlLmxh
eWVyc1RvQ3JlYXRlLnJlbW92ZShpbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX3N0YXRlLmxheWVyc1RvUmVtb3ZlLmFwcGVuZChsYXllci0+aWQoKSk7CisgICAgbV9jbGll
bnQtPnNjaGVkdWxlTGF5ZXJGbHVzaFJlcXVpcmVkKCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdD
b29yZGluYXRvcjo6Y29tbWl0U2Nyb2xsT2Zmc2V0KHVpbnQzMl90IGxheWVySUQsIGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIG9mZnNldCkKK3sKKyAgICBMYXllck1hcDo6aXRlcmF0b3IgaSA9IG1f
cmVnaXN0ZXJlZExheWVycy5maW5kKGxheWVySUQpOworICAgIGlmIChpID09IG1fcmVnaXN0ZXJl
ZExheWVycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaS0+dmFsdWUtPmNvbW1pdFNj
cm9sbE9mZnNldChvZmZzZXQpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJl
bmRlck5leHRGcmFtZSgpCit7CisgICAgbV9pc1dhaXRpbmdGb3JSZW5kZXJlciA9IGZhbHNlOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kp
CisgICAgICAgIG1fdXBkYXRlQXRsYXNlc1tpXS0+ZGlkU3dhcEJ1ZmZlcnMoKTsKK30KKwordm9p
ZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpwdXJnZUJhY2tpbmdTdG9yZXMoKQoreworICAgIFRl
bXBvcmFyeUNoYW5nZTxib29sPiBwdXJnaW5nVG9nZ2xlKG1faXNQdXJnaW5nLCB0cnVlKTsKKwor
ICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7Cisg
ICAgZm9yIChMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpdC0+dmFsdWUtPnB1cmdlQmFja2luZ1N0b3Jl
cygpOworCisgICAgbV9pbWFnZUJhY2tpbmdzLmNsZWFyKCk7CisgICAgbV91cGRhdGVBdGxhc2Vz
LmNsZWFyKCk7Cit9CisKK2Jvb2wgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cGFpbnRUb1N1cmZh
Y2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyBmbGFncywg
dWludDMyX3QmIGF0bGFzSUQsIEludFBvaW50JiBvZmZzZXQsIENvb3JkaW5hdGVkU3VyZmFjZTo6
Q2xpZW50KiBjbGllbnQpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdXBkYXRl
QXRsYXNlcy5zaXplKCk7ICsraSkgeworICAgICAgICBVcGRhdGVBdGxhcyogYXRsYXMgPSBtX3Vw
ZGF0ZUF0bGFzZXNbaV0uZ2V0KCk7CisgICAgICAgIGlmIChhdGxhcy0+c3VwcG9ydHNBbHBoYSgp
ID09IChmbGFncyAmIENvb3JkaW5hdGVkU3VyZmFjZTo6U3VwcG9ydHNBbHBoYSkpIHsKKyAgICAg
ICAgICAgIC8vIFRoaXMgd2lsbCBiZSBmYWxzZSBpZiB0aGVyZSBpcyBubyBhdmFpbGFibGUgYnVm
ZmVyIHNwYWNlLgorICAgICAgICAgICAgaWYgKGF0bGFzLT5wYWludE9uQXZhaWxhYmxlQnVmZmVy
KHNpemUsIGF0bGFzSUQsIG9mZnNldCwgY2xpZW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBpbnQgU2NyYXRjaEJ1
ZmZlckRpbWVuc2lvbiA9IDEwMjQ7IC8vIFNob3VsZCBiZSBhIHBvd2VyIG9mIHR3by4KKyAgICBt
X3VwZGF0ZUF0bGFzZXMuYXBwZW5kKGFkb3B0UHRyKG5ldyBVcGRhdGVBdGxhcyh0aGlzLCBTY3Jh
dGNoQnVmZmVyRGltZW5zaW9uLCBmbGFncykpKTsKKyAgICBzY2hlZHVsZVJlbGVhc2VJbmFjdGl2
ZUF0bGFzZXMoKTsKKyAgICByZXR1cm4gbV91cGRhdGVBdGxhc2VzLmxhc3QoKS0+cGFpbnRPbkF2
YWlsYWJsZUJ1ZmZlcihzaXplLCBhdGxhc0lELCBvZmZzZXQsIGNsaWVudCk7Cit9CisKK2NvbnN0
IGRvdWJsZSBSZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJJbnRlcnZhbCA9IDAuNTsKKwordm9p
ZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMo
KQoreworICAgIGlmICghbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIuaXNBY3RpdmUoKSkK
KyAgICAgICAgbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIuc3RhcnRSZXBlYXRpbmcoUmVs
ZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2YWwpOworfQorCit2b2lkIENvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OnJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKFRpbWVyPENvbXBv
c2l0aW5nQ29vcmRpbmF0b3I+KikKK3sKKyAgICAvLyBXZSBhbHdheXMgd2FudCB0byBrZWVwIG9u
ZSBhdGxhcyBmb3Igbm9uLWNvbXBvc2l0ZWQgY29udGVudC4KKyAgICBPd25QdHI8VXBkYXRlQXRs
YXM+IGF0bGFzVG9LZWVwQW55d2F5OworICAgIGJvb2wgZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNv
bXBvc2l0ZWRDb250ZW50ID0gZmFsc2U7CisgICAgZm9yIChpbnQgaSA9IG1fdXBkYXRlQXRsYXNl
cy5zaXplKCkgLSAxOyAgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgVXBkYXRlQXRsYXMqIGF0bGFz
ID0gbV91cGRhdGVBdGxhc2VzW2ldLmdldCgpOworICAgICAgICBpZiAoIWF0bGFzLT5pc0luVXNl
KCkpCisgICAgICAgICAgICBhdGxhcy0+YWRkVGltZUluYWN0aXZlKFJlbGVhc2VJbmFjdGl2ZUF0
bGFzZXNUaW1lckludGVydmFsKTsKKyAgICAgICAgYm9vbCB1c2FibGVGb3JOb25Db21wb3NpdGVk
Q29udGVudCA9ICFhdGxhcy0+c3VwcG9ydHNBbHBoYSgpOworICAgICAgICBpZiAoYXRsYXMtPmlz
SW5hY3RpdmUoKSkgeworICAgICAgICAgICAgaWYgKCFmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29t
cG9zaXRlZENvbnRlbnQgJiYgIWF0bGFzVG9LZWVwQW55d2F5ICYmIHVzYWJsZUZvck5vbkNvbXBv
c2l0ZWRDb250ZW50KQorICAgICAgICAgICAgICAgIGF0bGFzVG9LZWVwQW55d2F5ID0gbV91cGRh
dGVBdGxhc2VzW2ldLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1fdXBkYXRlQXRsYXNlcy5yZW1v
dmUoaSk7CisgICAgICAgIH0gZWxzZSBpZiAodXNhYmxlRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQp
CisgICAgICAgICAgICBmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgPSB0
cnVlOworICAgIH0KKworICAgIGlmICghZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRD
b250ZW50ICYmIGF0bGFzVG9LZWVwQW55d2F5KQorICAgICAgICBtX3VwZGF0ZUF0bGFzZXMuYXBw
ZW5kKGF0bGFzVG9LZWVwQW55d2F5LnJlbGVhc2UoKSk7CisKKyAgICBpZiAobV91cGRhdGVBdGxh
c2VzLnNpemUoKSA8PSAxKQorICAgICAgICBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5z
dG9wKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRp
bmdDb29yZGluYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyNDNkNGNjYmNiYWI5NWFiMWU1YmMxNDFiMjYw
MGM0MTc2NGQ2NDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oCkBAIC0w
LDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDEzIENvbXBh
bnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29t
cG9zaXRpbmdDb29yZGluYXRvcl9oCisjZGVmaW5lIENvbXBvc2l0aW5nQ29vcmRpbmF0b3JfaAor
CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmgiCisj
aW5jbHVkZSAiQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNsaWVudC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
TGF5ZXJGYWN0b3J5LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlRpbWVyLmgi
CisjaW5jbHVkZSAiVXBkYXRlQXRsYXMuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKKyNp
ZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGFnZTsKK2NsYXNzIEdyYXBoaWNz
Q29udGV4dDsKK2NsYXNzIEdyYXBoaWNzTGF5ZXI7CitjbGFzcyBDb29yZGluYXRlZFN1cmZhY2U7
CisKK2NsYXNzIENvbXBvc2l0aW5nQ29vcmRpbmF0b3IgOiBwdWJsaWMgR3JhcGhpY3NMYXllckNs
aWVudAorICAgICwgcHVibGljIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudAorICAgICwg
cHVibGljIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDbGllbnQKKyAgICAsIHB1YmxpYyBVcGRh
dGVBdGxhczo6Q2xpZW50CisgICAgLCBwdWJsaWMgR3JhcGhpY3NMYXllckZhY3RvcnkgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKENvbXBvc2l0aW5nQ29vcmRpbmF0b3IpOyBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBjbGFzcyBDbGllbnQgeworICAgIHB1YmxpYzoK
KyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZsdXNoUm9vdExheWVyKCkgPSAwOworICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkU3luY0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3Rh
dGUmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2hSZXF1aXJl
ZCgpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NT
dGF0ZShDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBJbnRSZWN0JiBjbGlwUmVjdCkgPSAwOworICAgIH07CisKKyAgICBzdGF0aWMgUGFzc093
blB0cjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiBjcmVhdGUoUGFnZSosIENvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OkNsaWVudCopOworICAgIHZpcnR1YWwgfkNvbXBvc2l0aW5nQ29vcmRpbmF0b3Io
KTsKKworICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXllciopOwor
ICAgIHZvaWQgc2l6ZURpZENoYW5nZShjb25zdCBJbnRTaXplJiBuZXdTaXplKTsKKyAgICB2b2lk
IGRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOworCisgICAgdm9pZCBzZXRWaXNpYmxl
Q29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2
b2lkIHJlbmRlck5leHRGcmFtZSgpOworICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7Cisg
ICAgdm9pZCBjb21taXRTY3JvbGxPZmZzZXQodWludDMyX3QgbGF5ZXJJRCwgY29uc3QgSW50U2l6
ZSYgb2Zmc2V0KTsKKworICAgIHZvaWQgY3JlYXRlUm9vdExheWVyKGNvbnN0IEludFNpemUmKTsK
KyAgICB2b2lkIGNsZWFyUm9vdExheWVyKCkgeyBtX3Jvb3RMYXllciA9IG51bGxwdHI7IH0KKyAg
ICBHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RMYXllci5n
ZXQoKTsgfQorICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbWFpbkNvbnRlbnRzTGF5ZXIo
KTsKKworICAgIGJvb2wgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7CisgICAgQ29vcmRpbmF0
ZWRHcmFwaGljc1N0YXRlJiBzdGF0ZSgpIHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICBib29sIGlz
V2FpdGluZ0ZvclJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9pc1dhaXRpbmdGb3JSZW5kZXJl
cjsgfQorCitwcml2YXRlOgorICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3IoUGFnZSosIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudCopOworCisgICAgLy8gR3JhcGhpY3NMYXllckNsaWVu
dAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNz
TGF5ZXIqLCBkb3VibGUgdGltZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZs
dXNoUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQm
LCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdCBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0IE9WRVJSSURF
OworCisgICAgLy8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNsaWVudAorICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdl
QmFja2luZ0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmco
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7CisKKyAgICAvLyBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFsIGJvb2wgaXNGbHVzaGluZ0xheWVyQ2hh
bmdlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlczsg
fQorICAgIHZpcnR1YWwgRmxvYXRSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdCBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNy
ZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKEltYWdlKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIGRldGFjaExheWVyKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopIE9WRVJSSURFOworICAg
IHZpcnR1YWwgYm9vbCBwYWludFRvU3VyZmFjZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMyX3QmIC8qIGF0bGFzSUQgKi8s
IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpDbGllbnQq
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRM
YXllcklELCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpIE9WRVJSSURFOworCisgICAg
Ly8gVXBkYXRlQXRsYXM6OkNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVVcGRhdGVBdGxh
cyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lE
KSBPVkVSUklERTsKKworICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5CisgICAgdmlydHVhbCBQ
YXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXll
ckNsaWVudCopIE9WRVJSSURFOworCisgICAgdm9pZCBpbml0aWFsaXplUm9vdENvbXBvc2l0aW5n
TGF5ZXJJZk5lZWRlZCgpOworICAgIHZvaWQgZmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdl
cygpOworICAgIHZvaWQgY2xlYXJQZW5kaW5nU3RhdGVDaGFuZ2VzKCk7CisKKyAgICB2b2lkIHNj
aGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpOworCisgICAgdm9pZCByZWxlYXNlSW5hY3Rp
dmVBdGxhc2VzVGltZXJGaXJlZChUaW1lcjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiopOworCisg
ICAgUGFnZSogbV9wYWdlOworICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudCogbV9j
bGllbnQ7CisKKyAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CisgICAgR3Jh
cGhpY3NMYXllciogbV9yb290Q29tcG9zaXRpbmdMYXllcjsKKworICAgIENvb3JkaW5hdGVkR3Jh
cGhpY3NTdGF0ZSBtX3N0YXRlOworCisgICAgdHlwZWRlZiBIYXNoTWFwPENvb3JkaW5hdGVkTGF5
ZXJJRCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj4gTGF5ZXJNYXA7CisgICAgTGF5ZXJNYXAg
bV9yZWdpc3RlcmVkTGF5ZXJzOworICAgIHR5cGVkZWYgSGFzaE1hcDxDb29yZGluYXRlZEltYWdl
QmFja2luZ0lELCBSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+ID4gSW1hZ2VCYWNraW5n
TWFwOworICAgIEltYWdlQmFja2luZ01hcCBtX2ltYWdlQmFja2luZ3M7CisgICAgVmVjdG9yPE93
blB0cjxVcGRhdGVBdGxhcz4gPiBtX3VwZGF0ZUF0bGFzZXM7CisKKyAgICAvLyBXZSBkb24ndCBz
ZW5kIHRoZSBtZXNzYWdlcyByZWxhdGVkIHRvIHJlbGVhc2luZyByZXNvdXJjZXMgdG8gcmVuZGVy
ZXIgZHVyaW5nIHB1cmdpbmcsIGJlY2F1c2UgcmVuZGVyZXIgYWxyZWFkeSBoYWQgcmVtb3ZlZCBh
bGwgcmVzb3VyY2VzLgorICAgIGJvb2wgbV9pc1B1cmdpbmc7CisgICAgYm9vbCBtX2lzRmx1c2hp
bmdMYXllckNoYW5nZXM7CisKKyAgICBib29sIG1faXNXYWl0aW5nRm9yUmVuZGVyZXI7CisgICAg
RmxvYXRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKworICAgIGJvb2wgbV9zaG91bGRTeW5j
RnJhbWU7CisgICAgYm9vbCBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcjsKKyAg
ICBUaW1lcjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNU
aW1lcjsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZiAvLyBDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExh
eWVyVHJlZUhvc3QuY3BwCmluZGV4IDAzNWZjN2Y1MmI5OWFmZWE2MDM3ZDI4NGQ4NjJkY2Q2ZDA0
YTM4ZjAuLjkyYzU2MzkzNDQwYWExZWU3YWJlMzk4OTAzMjY5ZTU3ZGM4YmVlOGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
LmNwcApAQCAtNDAsMTggKzQwLDkgQEAKICNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5o
IgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmll
dy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVy
TGF5ZXJCYWNraW5nLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBvc2l0b3Iu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Nl
dHRpbmdzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TdXJmYWNlVXBkYXRlSW5mby5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaD4KICNpbmNsdWRlIDx3dGYv
Q3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CiAKICNpZiBF
TkFCTEUoQ1NTX1NIQURFUlMpCiAjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3Jh
bS5oIgpAQCAtNzIsNDkgKzYzLDI3IEBAIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6fkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdCgpCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogICAgIGRpc2Nv
bm5lY3RDdXN0b21GaWx0ZXJQcm9ncmFtcygpOwogI2VuZGlmCi0gICAgcHVyZ2VCYWNraW5nU3Rv
cmVzKCk7Ci0KLSAgICBMYXllck1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJz
LmVuZCgpOwotICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5
ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnZhbHVlLT5zZXRDb29y
ZGluYXRvcigwKTsKIH0KIAogQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpDb29yZGluYXRlZExh
eWVyVHJlZUhvc3QoV2ViUGFnZSogd2ViUGFnZSkKICAgICA6IExheWVyVHJlZUhvc3Qod2ViUGFn
ZSkKLSAgICAsIG1fcm9vdENvbXBvc2l0aW5nTGF5ZXIoMCkKICAgICAsIG1fbm90aWZ5QWZ0ZXJT
Y2hlZHVsZWRMYXllckZsdXNoKGZhbHNlKQogICAgICwgbV9pc1ZhbGlkKHRydWUpCi0gICAgLCBt
X2lzUHVyZ2luZyhmYWxzZSkKLSAgICAsIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlcyhmYWxzZSkK
LSAgICAsIG1fd2FpdGluZ0ZvclVJUHJvY2Vzcyh0cnVlKQogICAgICwgbV9pc1N1c3BlbmRlZChm
YWxzZSkKLSAgICAsIG1fc2hvdWxkU3luY0ZyYW1lKGZhbHNlKQotICAgICwgbV9kaWRJbml0aWFs
aXplUm9vdENvbXBvc2l0aW5nTGF5ZXIoZmFsc2UpCiAgICAgLCBtX2xheWVyRmx1c2hUaW1lcih0
aGlzLCAmQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpsYXllckZsdXNoVGltZXJGaXJlZCkKLSAg
ICAsIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyKHRoaXMsICZDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKQogICAgICwgbV9sYXll
ckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQodHJ1ZSkKICAgICAsIG1fZm9yY2VSZXBhaW50QXN5bmND
YWxsYmFja0lEKDApCi0gICAgLCBtX2FuaW1hdGlvbnNMb2NrZWQoZmFsc2UpCiAjaWYgRU5BQkxF
KFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogICAgICwgbV9sYXN0QW5pbWF0aW9uU2VydmljZVRp
bWUoMCkKICNlbmRpZgogewotICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+
c2V0QXBwbHlEZXZpY2VTY2FsZUZhY3RvckluQ29tcG9zaXRvcih0cnVlKTsKIAotICAgIC8vIENy
ZWF0ZSBhIHJvb3QgbGF5ZXIuCi0gICAgbV9yb290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVh
dGUodGhpcywgdGhpcyk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1fcm9vdExheWVyLT5zZXROYW1l
KCJDb29yZGluYXRlZExheWVyVHJlZUhvc3Qgcm9vdCBsYXllciIpOwotI2VuZGlmCi0gICAgbV9y
b290TGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7Ci0gICAgbV9yb290TGF5ZXItPnNldFNp
emUobV93ZWJQYWdlLT5zaXplKCkpOwotICAgIG1fbGF5ZXJUcmVlQ29udGV4dC5jb29yZGluYXRl
ZExheWVySUQgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSkt
PmlkKCk7CisgICAgbV9jb29yZGluYXRvciA9IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0
ZSh3ZWJQYWdlLT5jb3JlUGFnZSgpLCB0aGlzKTsKIAotICAgIENvb3JkaW5hdGVkU3VyZmFjZTo6
c2V0RmFjdG9yeShjcmVhdGVDb29yZGluYXRlZFN1cmZhY2UpOworICAgIG1fY29vcmRpbmF0b3It
PmNyZWF0ZVJvb3RMYXllcihtX3dlYlBhZ2UtPnNpemUoKSk7CisgICAgbV9sYXllclRyZWVDb250
ZXh0LmNvb3JkaW5hdGVkTGF5ZXJJRCA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKHJvb3RM
YXllcigpKS0+aWQoKTsKIAotICAgIC8vIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd2F5IHRvIGVuYWJs
ZSB0aGlzIG9ubHkgaW4gdGhlIEdMIGNhc2UsIHVudGlsIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZl
ciBpcyByZW1vdmVkLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTE0ODY5Ci0gICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRTaG91bGRT
dXBwb3J0Q29udGVudHNUaWxpbmcodHJ1ZSk7CisgICAgQ29vcmRpbmF0ZWRTdXJmYWNlOjpzZXRG
YWN0b3J5KGNyZWF0ZUNvb3JkaW5hdGVkU3VyZmFjZSk7CiAKICAgICBpZiAobV93ZWJQYWdlLT5o
YXNQYWdlT3ZlcmxheSgpKQogICAgICAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CkBAIC0x
NTgsMTIgKzEyNyw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRTaG91bGRO
b3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wKIAogdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCiB7Ci0gICAgaWYgKG1fcm9vdENvbXBvc2l0aW5nTGF5ZXIp
Ci0gICAgICAgIG1fcm9vdENvbXBvc2l0aW5nTGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKLQot
ICAgIG1fcm9vdENvbXBvc2l0aW5nTGF5ZXIgPSBncmFwaGljc0xheWVyOwotICAgIGlmIChtX3Jv
b3RDb21wb3NpdGluZ0xheWVyKQotICAgICAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGRBdEluZGV4
KG1fcm9vdENvbXBvc2l0aW5nTGF5ZXIsIDApOworICAgIG1fY29vcmRpbmF0b3ItPnNldFJvb3RD
b21wb3NpdGluZ0xheWVyKGdyYXBoaWNzTGF5ZXIpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6aW52YWxpZGF0ZSgpCkBAIC0xNzEsNyArMTM1LDcgQEAgdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmludmFsaWRhdGUoKQogICAgIGNhbmNlbFBlbmRpbmdMYXllckZs
dXNoKCk7CiAKICAgICBBU1NFUlQobV9pc1ZhbGlkKTsKLSAgICBtX3Jvb3RMYXllciA9IG51bGxw
dHI7CisgICAgbV9jb29yZGluYXRvci0+Y2xlYXJSb290TGF5ZXIoKTsKICAgICBtX2lzVmFsaWQg
PSBmYWxzZTsKIH0KIApAQCAtMTg0LDcgKzE0OCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0Ojpmb3JjZVJlcGFpbnQoKQogICAgIC8vIFdlIG5lZWQgdG8gc2NoZWR1bGUgYW5vdGhl
ciBmbHVzaCwgb3RoZXJ3aXNlIHRoZSBmb3JjZWQgcGFpbnQgbWlnaHQgY2FuY2VsIGEgbGF0ZXIg
ZXhwZWN0ZWQgZmx1c2guCiAgICAgLy8gVGhpcyBpcyBhbGlnbmVkIHdpdGggTGF5ZXJUcmVlSG9z
dENBLgogICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgIGZsdXNoUGVuZGluZ0xheWVyQ2hh
bmdlcygpOworICAgIG1fY29vcmRpbmF0b3ItPmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOwog
fQogCiBib29sIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50QXN5bmModWlu
dDY0X3QgY2FsbGJhY2tJRCkKQEAgLTE5OCw3ICsxNjIsNyBAQCBib29sIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50QXN5bmModWludDY0X3QgY2FsbGJhY2tJRCkKIAogdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgbmV3U2l6ZSkKIHsKLSAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShuZXdTaXplKTsK
KyAgICBtX2Nvb3JkaW5hdG9yLT5zaXplRGlkQ2hhbmdlKG5ld1NpemUpOwogICAgIHNjaGVkdWxl
TGF5ZXJGbHVzaCgpOwogfQogCkBAIC0yMzMsMTExICsxOTcsNDYgQEAgdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OnNldFBhZ2VPdmVybGF5T3BhY2l0eShQYWdlT3ZlcmxheSosIGZsb2F0
IHZhbHVlKQogICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwogfQogCi1ib29sIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKK3ZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKIHsKLSAgICBpZiAobV93
YWl0aW5nRm9yVUlQcm9jZXNzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBUZW1wb3Jh
cnlDaGFuZ2U8Ym9vbD4gcHJvdGVjdG9yKG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlcywgdHJ1ZSk7
Ci0KLSAgICBpbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCgpOwotCi0gICAg
bV9yb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLSAg
ICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQotICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPmZs
dXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLQotICAgIGJvb2wgZGlkU3lu
YyA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+Zmx1c2hDb21w
b3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7Ci0KLSAgICB0b0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnVwZGF0ZUNvbnRlbnRCdWZmZXJzSW5jbHVk
aW5nU3ViTGF5ZXJzKCk7Ci0gICAgdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5
ZXIuZ2V0KCkpLT5zeW5jUGVuZGluZ1N0YXRlQ2hhbmdlc0luY2x1ZGluZ1N1YkxheWVycygpOwot
Ci0gICAgZmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpOwotCi0gICAgaWYgKG1fc2hv
dWxkU3luY0ZyYW1lKSB7Ci0gICAgICAgIGRpZFN5bmMgPSB0cnVlOwotCi0gICAgICAgIGlmICht
X3Jvb3RDb21wb3NpdGluZ0xheWVyKSB7Ci0gICAgICAgICAgICBtX3N0YXRlLmNvbnRlbnRzU2l6
ZSA9IHJvdW5kZWRJbnRTaXplKG1fcm9vdENvbXBvc2l0aW5nTGF5ZXItPnNpemUoKSk7Ci0gICAg
ICAgICAgICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBjb250ZW50c0xheWVyID0gbWFp
bkNvbnRlbnRzTGF5ZXIoKSkKLSAgICAgICAgICAgICAgICBtX3N0YXRlLmNvdmVyZWRSZWN0ID0g
Y29udGVudHNMYXllci0+Y292ZXJSZWN0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtX3N0YXRl
LnNjcm9sbFBvc2l0aW9uID0gbV92aXNpYmxlQ29udGVudHNSZWN0LmxvY2F0aW9uKCk7Ci0KLSAg
ICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6Q29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlKG1fc3RhdGUpKTsKLQotICAgICAg
ICBjbGVhclBlbmRpbmdTdGF0ZUNoYW5nZXMoKTsKLSAgICAgICAgbV93YWl0aW5nRm9yVUlQcm9j
ZXNzID0gdHJ1ZTsKLSAgICAgICAgbV9zaG91bGRTeW5jRnJhbWUgPSBmYWxzZTsKLSAgICB9Ci0K
LSAgICBpZiAobV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQpIHsKLSAgICAgICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFjayhtX2ZvcmNlUmVw
YWludEFzeW5jQ2FsbGJhY2tJRCkpOwotICAgICAgICBtX2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJh
Y2tJRCA9IDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRpZFN5bmM7CisgICAgbV9jb29yZGluYXRv
ci0+c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChyZWN0LCB0cmFqZWN0b3J5VmVjdG9yKTsKKyAgICBz
Y2hlZHVsZUxheWVyRmx1c2goKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OmNsZWFyUGVuZGluZ1N0YXRlQ2hhbmdlcygpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6cmVuZGVyTmV4dEZyYW1lKCkKIHsKLSAgICBtX3N0YXRlLmxheWVyc1RvQ3JlYXRlLmNsZWFy
KCk7Ci0gICAgbV9zdGF0ZS5sYXllcnNUb1VwZGF0ZS5jbGVhcigpOwotICAgIG1fc3RhdGUubGF5
ZXJzVG9SZW1vdmUuY2xlYXIoKTsKLQotICAgIG1fc3RhdGUuaW1hZ2VzVG9DcmVhdGUuY2xlYXIo
KTsKLSAgICBtX3N0YXRlLmltYWdlc1RvUmVtb3ZlLmNsZWFyKCk7Ci0gICAgbV9zdGF0ZS5pbWFn
ZXNUb1VwZGF0ZS5jbGVhcigpOwotICAgIG1fc3RhdGUuaW1hZ2VzVG9DbGVhci5jbGVhcigpOwot
Ci0gICAgbV9zdGF0ZS51cGRhdGVBdGxhc2VzVG9DcmVhdGUuY2xlYXIoKTsKLSAgICBtX3N0YXRl
LnVwZGF0ZUF0bGFzZXNUb1JlbW92ZS5jbGVhcigpOwotCi0jaWYgRU5BQkxFKENTU19TSEFERVJT
KQotICAgIG1fc3RhdGUuY3VzdG9tRmlsdGVyc1RvQ3JlYXRlLmNsZWFyKCk7Ci0gICAgbV9zdGF0
ZS5jdXN0b21GaWx0ZXJzVG9SZW1vdmUuY2xlYXIoKTsKLSNlbmRpZgorICAgIG1fY29vcmRpbmF0
b3ItPnJlbmRlck5leHRGcmFtZSgpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwogfQogCi12
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xh
eWVySWZOZWVkZWQoKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnB1cmdlQmFja2lu
Z1N0b3JlcygpCiB7Ci0gICAgaWYgKG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0YXRlLnJvb3RDb21wb3NpdGluZ0xheWVyID0g
dG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5pZCgpOwotICAg
IG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyID0gdHJ1ZTsKLSAgICBtX3Nob3Vs
ZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV9jb29yZGluYXRvci0+cHVyZ2VCYWNraW5nU3RvcmVz
KCk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jTGF5ZXJTdGF0ZShD
b29yZGluYXRlZExheWVySUQgaWQsIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0
ZSkKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaWRTeW5jTGF5ZXJTdGF0ZShDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgbV9zaG91bGRTeW5jRnJh
bWUgPSB0cnVlOwotCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIHByZXBhcmVDdXN0b21G
aWx0ZXJQcm94aWVzSWZOZWVkZWQoc3RhdGUpOwotI2VuZGlmCisgICAgaWYgKHN0YXRlLmFuaW1h
dGlvbnNDaGFuZ2VkKQorICAgICAgICBwcmVwYXJlQ3VzdG9tRmlsdGVyUHJveGllc0ZvckFuaW1h
dGlvbnMoc3RhdGUuYW5pbWF0aW9ucyk7CiAKLSAgICBtX3N0YXRlLmxheWVyc1RvVXBkYXRlLmFw
cGVuZChzdGQ6Om1ha2VfcGFpcihpZCwgc3RhdGUpKTsKKyAgICBpZiAoc3RhdGUuZmlsdGVyc0No
YW5nZWQpCisgICAgICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoc3RhdGUuZmls
dGVycyk7CisjZW5kaWYKIH0KIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLXZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpwcmVwYXJlQ3VzdG9tRmlsdGVyUHJveGllc0lmTmVlZGVkKENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKLXsKLSAgICBpZiAoc3RhdGUuYW5p
bWF0aW9uc0NoYW5nZWQpIHsKLSAgICAgICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFjdGl2
ZUFuaW1hdGlvbnMgPSBzdGF0ZS5hbmltYXRpb25zOwotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGFjdGl2ZUFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzID0gYWN0aXZlQW5pbWF0
aW9ucy5hbmltYXRpb25zKCkuYXQoaSkua2V5ZnJhbWVzKCk7Ci0gICAgICAgICAgICBpZiAoa2V5
ZnJhbWVzLnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcikKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwg
a2V5ZnJhbWVzLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgRmlsdGVyQW5p
bWF0aW9uVmFsdWUmIGZpbHRlclZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0
aW9uVmFsdWUmPihrZXlmcmFtZXMuYXQoaSkpOwotICAgICAgICAgICAgICAgIGNoZWNrQ3VzdG9t
RmlsdGVyUHJvZ3JhbVByb3hpZXMoZmlsdGVyVmFsdWUudmFsdWUoKSk7Ci0gICAgICAgICAgICB9
Cit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cHJlcGFyZUN1c3RvbUZpbHRlclByb3hp
ZXNGb3JBbmltYXRpb25zKEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhY3RpdmVBbmltYXRpb25z
KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWN0aXZlQW5pbWF0aW9ucy5hbmltYXRp
b25zKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtl
eWZyYW1lcyA9IGFjdGl2ZUFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLmF0KGkpLmtleWZyYW1lcygp
OworICAgICAgICBpZiAoa2V5ZnJhbWVzLnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdl
YmtpdEZpbHRlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3IgKHNpemVfdCBq
ID0gMDsgaiA8IGtleWZyYW1lcy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgY29uc3QgRmls
dGVyQW5pbWF0aW9uVmFsdWUmIGZpbHRlclZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgRmlsdGVy
QW5pbWF0aW9uVmFsdWUmPihrZXlmcmFtZXMuYXQoaSkpOworICAgICAgICAgICAgY2hlY2tDdXN0
b21GaWx0ZXJQcm9ncmFtUHJveGllcyhmaWx0ZXJWYWx1ZS52YWx1ZSgpKTsKICAgICAgICAgfQog
ICAgIH0KLQotICAgIGlmIChzdGF0ZS5maWx0ZXJzQ2hhbmdlZCkKLSAgICAgICAgY2hlY2tDdXN0
b21GaWx0ZXJQcm9ncmFtUHJveGllcyhzdGF0ZS5maWx0ZXJzKTsKIH0KIAogdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoY29uc3Qg
RmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKQEAgLTM2Nyw3ICsyNjYsNyBAQCB2b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhjb25z
dCBGaWx0ZXJPcGVyYQogICAgICAgICBpZiAoIWN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+Y2xp
ZW50KCkpIHsKICAgICAgICAgICAgIGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+c2V0Q2xpZW50
KHRoaXMpOwogICAgICAgICAgICAgbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5hZGQoY3VzdG9tRmls
dGVyUHJvZ3JhbVByb3h5LmdldCgpKTsKLSAgICAgICAgICAgIG1fc3RhdGUuY3VzdG9tRmlsdGVy
c1RvQ3JlYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkt
PmlkKCksIGN1c3RvbU9wZXJhdGlvbi0+dmFsaWRhdGVkUHJvZ3JhbSgpLT52YWxpZGF0ZWRQcm9n
cmFtSW5mbygpKSk7CisgICAgICAgICAgICBtX2Nvb3JkaW5hdG9yLT5zdGF0ZSgpLmN1c3RvbUZp
bHRlcnNUb0NyZWF0ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY3VzdG9tRmlsdGVyUHJvZ3JhbVBy
b3h5LT5pZCgpLCBjdXN0b21PcGVyYXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKS0+dmFsaWRhdGVk
UHJvZ3JhbUluZm8oKSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gSWYgdGhl
IGNsaWVudCB3YXMgbm90IGRpc2Nvbm5lY3RlZCB0aGVuIHRoaXMgY29vcmRpbmF0b3IgbXVzdCBi
ZSB0aGUgY2xpZW50IGZvciBpdC4KICAgICAgICAgICAgIEFTU0VSVChjdXN0b21GaWx0ZXJQcm9n
cmFtUHJveHktPmNsaWVudCgpID09IHRoaXMpOwpAQCAtMzgwLDcgKzI3OSw3IEBAIHZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkoV2Vi
Q3VzdG9tRmlsdGVyUHJvCiAgICAgLy8gQXQgdGhpcyB0aW1lIHRoZSBzaGFkZXIgaXMgbm90IG5l
ZWRlZCBhbnltb3JlLCBzbyB3ZSByZW1vdmUgaXQgZnJvbSBvdXIgc2V0IGFuZAogICAgIC8vIHNl
bmQgYSBtZXNzYWdlIHRvIHRoZSBvdGhlciBwcm9jZXNzIHRvIGRlbGV0ZSBpdC4KICAgICBtX2N1
c3RvbUZpbHRlclByb2dyYW1zLnJlbW92ZShjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkpOwotICAg
IG1fc3RhdGUuY3VzdG9tRmlsdGVyc1RvUmVtb3ZlLmFwcGVuZChjdXN0b21GaWx0ZXJQcm9ncmFt
UHJveHktPmlkKCkpOworICAgIG1fY29vcmRpbmF0b3ItPnN0YXRlKCkuY3VzdG9tRmlsdGVyc1Rv
UmVtb3ZlLmFwcGVuZChjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmlkKCkpOwogfQogCiB2b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGlzY29ubmVjdEN1c3RvbUZpbHRlclByb2dyYW1z
KCkKQEAgLTM5MiwyMyArMjkxLDE1IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpk
aXNjb25uZWN0Q3VzdG9tRmlsdGVyUHJvZ3JhbXMoKQogfQogI2VuZGlmIC8vIEVOQUJMRShDU1Nf
U0hBREVSUykKIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRldGFjaExheWVyKENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllciogbGF5ZXIpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6ZGlkRmx1c2hSb290TGF5ZXIoKQogewotICAgIG1fcmVnaXN0ZXJlZExheWVycy5yZW1v
dmUobGF5ZXItPmlkKCkpOwotCi0gICAgc2l6ZV90IGluZGV4ID0gbV9zdGF0ZS5sYXllcnNUb0Ny
ZWF0ZS5maW5kKGxheWVyLT5pZCgpKTsKLSAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpIHsKLSAg
ICAgICAgbV9zdGF0ZS5sYXllcnNUb0NyZWF0ZS5yZW1vdmUoaW5kZXgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgbV9zdGF0ZS5sYXllcnNUb1JlbW92ZS5hcHBlbmQobGF5ZXItPmlk
KCkpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5
ZXIpCisgICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9y
VGhpc0xheWVyT25seSgpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGVy
Zm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQogewotICAgIGlmIChtX2lzU3VzcGVuZGVkIHx8IG1f
d2FpdGluZ0ZvclVJUHJvY2VzcykKKyAgICBpZiAobV9pc1N1c3BlbmRlZCB8fCBtX2Nvb3JkaW5h
dG9yLT5pc1dhaXRpbmdGb3JSZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAKICAgICBzeW5j
RGlzcGxheVN0YXRlKCk7CkBAIC00MTYsOCArMzA3LDE3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpCiAgICAgaWYgKCFtX2lzVmFs
aWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMo
KSkKLSAgICAgICAgZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKKyAgICBib29sIGRp
ZFN5bmMgPSBtX2Nvb3JkaW5hdG9yLT5mbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKKworICAg
IGlmIChtX2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJRCkgeworICAgICAgICBtX3dlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNrKG1fZm9yY2VSZXBhaW50
QXN5bmNDYWxsYmFja0lEKSk7CisgICAgICAgIG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lE
ID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gg
JiYgZGlkU3luYykgeworICAgICAgICBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYUltcGwqPihtX3dl
YlBhZ2UtPmRyYXdpbmdBcmVhKCkpLT5sYXllckhvc3REaWRGbHVzaExheWVycygpOworICAgICAg
ICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOworICAgIH0KIH0KIAog
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNEaXNwbGF5U3RhdGUoKQpAQCAtNDM1
LDE0ICszMzUsNiBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0Rpc3BsYXlT
dGF0ZSgpCiAgICAgbV93ZWJQYWdlLT5sYXlvdXRJZk5lZWRlZCgpOwogfQogCi12b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQotewot
ICAgIGlmIChtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCkgewotICAgICAgICBzdGF0
aWNfY2FzdDxEcmF3aW5nQXJlYUltcGwqPihtX3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCkpLT5sYXll
ckhvc3REaWRGbHVzaExheWVycygpOwotICAgICAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5
ZXJGbHVzaCA9IGZhbHNlOwotICAgIH0KLX0KLQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmxheWVyRmx1c2hUaW1lckZpcmVkKFRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4q
KQogewogICAgIHBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7CkBAIC00NTIsMTUgKzM0NCwx
NSBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlUGFnZU92ZXJsYXlMYXll
cigpCiB7CiAgICAgQVNTRVJUKCFtX3BhZ2VPdmVybGF5TGF5ZXIpOwogCi0gICAgbV9wYWdlT3Zl
cmxheUxheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMsIHRoaXMpOworICAgIG1fcGFn
ZU92ZXJsYXlMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShncmFwaGljc0xheWVyRmFjdG9y
eSgpLCBtX2Nvb3JkaW5hdG9yLmdldCgpKTsKICNpZm5kZWYgTkRFQlVHCi0gICAgbV9wYWdlT3Zl
cmxheUxheWVyLT5zZXROYW1lKCJDb29yZGluYXRlZExheWVyVHJlZUhvc3QgcGFnZSBvdmVybGF5
IGNvbnRlbnQiKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5hbWUoIkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3IgcGFnZSBvdmVybGF5IGNvbnRlbnQiKTsKICNlbmRpZgogCiAgICAgbV9wYWdl
T3ZlcmxheUxheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0gICAgbV9wYWdlT3ZlcmxheUxh
eWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXIt
PnNldFNpemUocm9vdExheWVyKCktPnNpemUoKSk7CiAKLSAgICBtX3Jvb3RMYXllci0+YWRkQ2hp
bGQobV9wYWdlT3ZlcmxheUxheWVyLmdldCgpKTsKKyAgICByb290TGF5ZXIoKS0+YWRkQ2hpbGQo
bV9wYWdlT3ZlcmxheUxheWVyLmdldCgpKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCkKQEAgLTQ3MCw2NSArMzYyLDcgQEAgdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCkKICAg
ICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBudWxscHRyOwogfQogCi1QYXNzUmVmUHRyPENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUltYWdlQmFj
a2luZ0lmTmVlZGVkKEltYWdlKiBpbWFnZSkKLXsKLSAgICBDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEIGltYWdlSUQgPSBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Z2V0Q29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRChpbWFnZSk7Ci0gICAgSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdCA9IG1f
aW1hZ2VCYWNraW5ncy5maW5kKGltYWdlSUQpOwotICAgIFJlZlB0cjxDb29yZGluYXRlZEltYWdl
QmFja2luZz4gaW1hZ2VCYWNraW5nOwotICAgIGlmIChpdCA9PSBtX2ltYWdlQmFja2luZ3MuZW5k
KCkpIHsKLSAgICAgICAgaW1hZ2VCYWNraW5nID0gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNy
ZWF0ZSh0aGlzLCBpbWFnZSk7Ci0gICAgICAgIG1faW1hZ2VCYWNraW5ncy5hZGQoaW1hZ2VJRCwg
aW1hZ2VCYWNraW5nKTsKLSAgICB9IGVsc2UKLSAgICAgICAgaW1hZ2VCYWNraW5nID0gaXQtPnZh
bHVlOwotCi0gICAgcmV0dXJuIGltYWdlQmFja2luZzsKLX0KLQotdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
IGltYWdlSUQpCi17Ci0gICAgbV9zdGF0ZS5pbWFnZXNUb0NyZWF0ZS5hcHBlbmQoaW1hZ2VJRCk7
Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp1cGRhdGVJbWFnZUJhY2tpbmco
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVk
U3VyZmFjZT4gY29vcmRpbmF0ZWRTdXJmYWNlKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0g
dHJ1ZTsKLSAgICBtX3N0YXRlLmltYWdlc1RvVXBkYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihp
bWFnZUlELCBjb29yZGluYXRlZFN1cmZhY2UpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCBpbWFnZUlEKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3N0
YXRlLmltYWdlc1RvQ2xlYXIuYXBwZW5kKGltYWdlSUQpOwotfQotCi12b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6cmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQgaW1hZ2VJRCkKLXsKLSAgICBpZiAobV9pc1B1cmdpbmcpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEFTU0VSVChtX2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkpOwotICAgIG1faW1h
Z2VCYWNraW5ncy5yZW1vdmUoaW1hZ2VJRCk7Ci0KLSAgICBtX3N0YXRlLmltYWdlc1RvUmVtb3Zl
LmFwcGVuZChpbWFnZUlEKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZs
dXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKQotewotICAgIEltYWdlQmFja2luZ01hcDo6
aXRlcmF0b3IgZW5kID0gbV9pbWFnZUJhY2tpbmdzLmVuZCgpOwotICAgIGZvciAoSW1hZ2VCYWNr
aW5nTWFwOjppdGVyYXRvciBpdGVyID0gbV9pbWFnZUJhY2tpbmdzLmJlZ2luKCk7IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIpCi0gICAgICAgIGl0ZXItPnZhbHVlLT51cGRhdGUoKTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSAvKiB0aW1lICovKQotewotfQotCi12b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKikKLXsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6
R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBn
cmFwaGljc0NvbnRleHQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCkKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdy
YXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkK
IHsKICAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX3BhZ2VPdmVybGF5TGF5ZXIpIHsKICAgICAg
ICAgLy8gT3ZlcmxheXMgY29udGFpbiB0cmFuc3BhcmVudCBjb250ZW50cyBhbmQgd29uJ3QgY2xl
YXIgdGhlIGNvbnRleHQgYXMgcGFydCBvZiB0aGVpciByZW5kZXJpbmcsIHNvIHdlIGRvIGl0IGhl
cmUuCkBAIC01MzgsMTUgKzM3Miw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpw
YWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoCiAgICAgfQog
fQogCi1QYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
Y3JlYXRlR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCit2b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyKiBsYXllciA9IG5ldyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoY2xp
ZW50KTsKLSAgICBsYXllci0+c2V0Q29vcmRpbmF0b3IodGhpcyk7Ci0gICAgbV9yZWdpc3RlcmVk
TGF5ZXJzLmFkZChsYXllci0+aWQoKSwgbGF5ZXIpOwotICAgIG1fc3RhdGUubGF5ZXJzVG9DcmVh
dGUuYXBwZW5kKGxheWVyLT5pZCgpKTsKLSAgICBsYXllci0+c2V0TmVlZHNWaXNpYmxlUmVjdEFk
anVzdG1lbnQoKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLSAgICByZXR1cm4gYWRvcHRQ
dHIobGF5ZXIpOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OkNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZShzdGF0ZSkpOwog
fQogCiBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpjcmVhdGVDb29yZGluYXRlZFN1cmZhY2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29vcmRp
bmF0ZWRTdXJmYWNlOjpGbGFncyBmbGFncykKQEAgLTU1NCw3MyArMzgyLDE0IEBAIFBhc3NSZWZQ
dHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUNv
b3JkaW5hdGVkU3VyZmFjCiAgICAgcmV0dXJuIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRl
KHNpemUsIGZsYWdzKTsKIH0KIAotZmxvYXQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXZp
Y2VTY2FsZUZhY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS0+ZGV2aWNlU2Nh
bGVGYWN0b3IoKTsKLX0KLQotZmxvYXQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwYWdlU2Nh
bGVGYWN0b3IoKSBjb25zdAotewotICAgIHJldHVybiBtX3dlYlBhZ2UtPnBhZ2VTY2FsZUZhY3Rv
cigpOwotfQotCiBib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZygpCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPENv
b3JkaW5hdGVkU3VyZmFjZT4gY29vcmRpbmF0ZWRTdXJmYWNlKQotewotICAgIG1fc3RhdGUudXBk
YXRlQXRsYXNlc1RvQ3JlYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihhdGxhc0lELCBjb29yZGlu
YXRlZFN1cmZhY2UpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92
ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCi17Ci0gICAgaWYgKG1faXNQdXJnaW5nKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9zdGF0ZS51cGRhdGVBdGxhc2VzVG9SZW1vdmUuYXBwZW5k
KGF0bGFzSUQpOwotfQotCi1XZWJDb3JlOjpGbG9hdFJlY3QgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0Ojp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV92aXNpYmxl
Q29udGVudHNSZWN0OwotfQotCi1Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6bWFpbkNvbnRlbnRzTGF5ZXIoKQotewotICAgIGlmICghbV9yb290Q29t
cG9zaXRpbmdMYXllcikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gdG9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIobV9yb290Q29tcG9zaXRpbmdMYXllciktPmZpbmRGaXJzdERlc2Nl
bmRhbnRXaXRoQ29udGVudHNSZWN1cnNpdmVseSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCi17Ci0gICAgLy8gQSB6ZXJvIHRy
YWplY3RvcnlWZWN0b3IgaW5kaWNhdGVzIHRoYXQgdGlsZXMgYWxsIGFyb3VuZCB0aGUgdmlld3Bv
cnQgYXJlIHJlcXVlc3RlZC4KLSAgICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBjb250
ZW50c0xheWVyID0gbWFpbkNvbnRlbnRzTGF5ZXIoKSkKLSAgICAgICAgY29udGVudHNMYXllci0+
c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKTsK
LQotICAgIGJvb2wgY29udGVudHNSZWN0RGlkQ2hhbmdlID0gcmVjdCAhPSBtX3Zpc2libGVDb250
ZW50c1JlY3Q7Ci0gICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSkgewotICAgICAgICBtX3Zp
c2libGVDb250ZW50c1JlY3QgPSByZWN0OwotCi0gICAgICAgIExheWVyTWFwOjppdGVyYXRvciBl
bmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7Ci0gICAgICAgIGZvciAoTGF5ZXJNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgaWYg
KG1fd2ViUGFnZS0+dXNlRml4ZWRMYXlvdXQoKSkgewotICAgICAgICAvLyBSb3VuZCB0aGUgcmVj
dCBpbnN0ZWFkIG9mIGVuY2xvc2luZyBpdCB0byBtYWtlIHN1cmUgdGhhdCBpdHMgc2l6ZSBzdGF5
cwotICAgICAgICAvLyB0aGUgc2FtZSB3aGlsZSBwYW5uaW5nLiBUaGlzIGNhbiBoYXZlIG5hc3R5
IGVmZmVjdHMgb24gbGF5b3V0LgotICAgICAgICBtX3dlYlBhZ2UtPnNldEZpeGVkVmlzaWJsZUNv
bnRlbnRSZWN0KHJvdW5kZWRJbnRSZWN0KHJlY3QpKTsKLSAgICB9Ci19Ci0KIHZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKQogewot
ICAgIG1fcm9vdExheWVyLT5kZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKKyAgICBt
X2Nvb3JkaW5hdG9yLT5kZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKICAgICBpZiAo
bV9wYWdlT3ZlcmxheUxheWVyKQogICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPmRldmljZU9y
UGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwogfQpAQCAtNjMxLDEzICs0MDAsMTMgQEAgdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnBhZ2VCYWNrZ3JvdW5kVHJhbnNwYXJlbmN5Q2hhbmdl
ZCgpCiAKIEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6Omdy
YXBoaWNzTGF5ZXJGYWN0b3J5KCkKIHsKLSAgICByZXR1cm4gdGhpczsKKyAgICByZXR1cm4gbV9j
b29yZGluYXRvci5nZXQoKTsKIH0KIAogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFN
RSkKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZUFuaW1hdGlvbigpCiB7
Ci0gICAgaWYgKG1fd2FpdGluZ0ZvclVJUHJvY2VzcykKKyAgICBpZiAobV9jb29yZGluYXRvci0+
aXNXYWl0aW5nRm9yUmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fbGF5
ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCkBAIC02NTAsNzYgKzQxOSw2IEBAIHZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZUFuaW1hdGlvbigpCiB9CiAjZW5kaWYKIAotdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZSgpCi17Ci0gICAgbV93
YWl0aW5nRm9yVUlQcm9jZXNzID0gZmFsc2U7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkK
LSAgICAgICAgbV91cGRhdGVBdGxhc2VzW2ldLT5kaWRTd2FwQnVmZmVycygpOwotfQotCi12b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKLXsKLSAgICBU
ZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gcHVyZ2luZ1RvZ2dsZShtX2lzUHVyZ2luZywgdHJ1ZSk7Ci0K
LSAgICBMYXllck1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOwot
ICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnZhbHVlLT5wdXJnZUJhY2tpbmdTdG9y
ZXMoKTsKLQotICAgIG1faW1hZ2VCYWNraW5ncy5jbGVhcigpOwotICAgIG1fdXBkYXRlQXRsYXNl
cy5jbGVhcigpOwotfQotCi1ib29sIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGFpbnRUb1N1
cmZhY2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyBmbGFn
cywgdWludDMyX3QmIGF0bGFzSUQsIEludFBvaW50JiBvZmZzZXQsIENvb3JkaW5hdGVkU3VyZmFj
ZTo6Q2xpZW50KiBjbGllbnQpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdXBk
YXRlQXRsYXNlcy5zaXplKCk7ICsraSkgewotICAgICAgICBVcGRhdGVBdGxhcyogYXRsYXMgPSBt
X3VwZGF0ZUF0bGFzZXNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmIChhdGxhcy0+c3VwcG9ydHNBbHBo
YSgpID09IChmbGFncyAmIENvb3JkaW5hdGVkU3VyZmFjZTo6U3VwcG9ydHNBbHBoYSkpIHsKLSAg
ICAgICAgICAgIC8vIFRoaXMgd2lsbCBmYWxzZSBpZiB0aGVyZSBpcyBubyBhdmFpbGFibGUgYnVm
ZmVyIHNwYWNlLgotICAgICAgICAgICAgaWYgKGF0bGFzLT5wYWludE9uQXZhaWxhYmxlQnVmZmVy
KHNpemUsIGF0bGFzSUQsIG9mZnNldCwgY2xpZW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBpbnQgU2NyYXRjaEJ1
ZmZlckRpbWVuc2lvbiA9IDEwMjQ7IC8vIFNob3VsZCBiZSBhIHBvd2VyIG9mIHR3by4KLSAgICBt
X3VwZGF0ZUF0bGFzZXMuYXBwZW5kKGFkb3B0UHRyKG5ldyBVcGRhdGVBdGxhcyh0aGlzLCBTY3Jh
dGNoQnVmZmVyRGltZW5zaW9uLCBmbGFncykpKTsKLSAgICBzY2hlZHVsZVJlbGVhc2VJbmFjdGl2
ZUF0bGFzZXMoKTsKLSAgICByZXR1cm4gbV91cGRhdGVBdGxhc2VzLmxhc3QoKS0+cGFpbnRPbkF2
YWlsYWJsZUJ1ZmZlcihzaXplLCBhdGxhc0lELCBvZmZzZXQsIGNsaWVudCk7Ci19Ci0KLWNvbnN0
IGRvdWJsZSBSZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJJbnRlcnZhbCA9IDAuNTsKLQotdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNl
cygpCi17Ci0gICAgaWYgKCFtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5pc0FjdGl2ZSgp
KQotICAgICAgICBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5zdGFydFJlcGVhdGluZyhS
ZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJJbnRlcnZhbCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpyZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJGaXJlZChUaW1lcjxD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q+KikKLXsKLSAgICAvLyBXZSBhbHdheXMgd2FudCB0byBr
ZWVwIG9uZSBhdGxhcyBmb3Igbm9uLWNvbXBvc2l0ZWQgY29udGVudC4KLSAgICBPd25QdHI8VXBk
YXRlQXRsYXM+IGF0bGFzVG9LZWVwQW55d2F5OwotICAgIGJvb2wgZm91bmRBY3RpdmVBdGxhc0Zv
ck5vbkNvbXBvc2l0ZWRDb250ZW50ID0gZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9IG1fdXBkYXRl
QXRsYXNlcy5zaXplKCkgLSAxOyAgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgVXBkYXRlQXRsYXMq
IGF0bGFzID0gbV91cGRhdGVBdGxhc2VzW2ldLmdldCgpOwotICAgICAgICBpZiAoIWF0bGFzLT5p
c0luVXNlKCkpCi0gICAgICAgICAgICBhdGxhcy0+YWRkVGltZUluYWN0aXZlKFJlbGVhc2VJbmFj
dGl2ZUF0bGFzZXNUaW1lckludGVydmFsKTsKLSAgICAgICAgYm9vbCB1c2FibGVGb3JOb25Db21w
b3NpdGVkQ29udGVudCA9ICFhdGxhcy0+c3VwcG9ydHNBbHBoYSgpOwotICAgICAgICBpZiAoYXRs
YXMtPmlzSW5hY3RpdmUoKSkgewotICAgICAgICAgICAgaWYgKCFmb3VuZEFjdGl2ZUF0bGFzRm9y
Tm9uQ29tcG9zaXRlZENvbnRlbnQgJiYgIWF0bGFzVG9LZWVwQW55d2F5ICYmIHVzYWJsZUZvck5v
bkNvbXBvc2l0ZWRDb250ZW50KQotICAgICAgICAgICAgICAgIGF0bGFzVG9LZWVwQW55d2F5ID0g
bV91cGRhdGVBdGxhc2VzW2ldLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1fdXBkYXRlQXRsYXNl
cy5yZW1vdmUoaSk7Ci0gICAgICAgIH0gZWxzZSBpZiAodXNhYmxlRm9yTm9uQ29tcG9zaXRlZENv
bnRlbnQpCi0gICAgICAgICAgICBmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRl
bnQgPSB0cnVlOwotICAgIH0KLQotICAgIGlmICghZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBv
c2l0ZWRDb250ZW50ICYmIGF0bGFzVG9LZWVwQW55d2F5KQotICAgICAgICBtX3VwZGF0ZUF0bGFz
ZXMuYXBwZW5kKGF0bGFzVG9LZWVwQW55d2F5LnJlbGVhc2UoKSk7Ci0KLSAgICBpZiAobV91cGRh
dGVBdGxhc2VzLnNpemUoKSA8PSAxKQotICAgICAgICBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNU
aW1lci5zdG9wKCk7Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRCYWNr
Z3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQogewogICAgIG1fd2ViUGFn
ZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldEJhY2tn
cm91bmRDb2xvcihjb2xvcikpOwpAQCAtNzI3LDExICs0MjYsNyBAQCB2b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBj
b2xvcikKIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNvbW1pdFNjcm9sbE9mZnNl
dCh1aW50MzJfdCBsYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBvZmZzZXQpCiB7Ci0g
ICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGkgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZmluZChsYXllcklE
KTsKLSAgICBpZiAoaSA9PSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5kKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGktPnZhbHVlLT5jb21taXRTY3JvbGxPZmZzZXQob2Zmc2V0KTsKKyAgICBtX2Nv
b3JkaW5hdG9yLT5jb21taXRTY3JvbGxPZmZzZXQobGF5ZXJJRCwgb2Zmc2V0KTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDE0MTRmNDNlOGZiNjc1MmFhNzllOTBkZDM0
MmZmYjEyY2M3ZjNmZTIuLjJhNzQ2NWRjODI5YWNlZmExYjMwYzliY2E3NDc4MWIyNmYyMDZiZTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdC5oCkBAIC0yNSwxMyArMjUsOCBAQAogCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4
dC5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2lu
Y2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9Db29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Nvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xp
ZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyRmFjdG9yeS5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
VXBkYXRlQXRsYXMuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKICNpZiBFTkFCTEUoQ1NT
X1NIQURFUlMpCkBAIC00NiwxMSArNDEsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3Mg
V2ViUGFnZTsKIAotY2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IDogcHVibGljIExheWVy
VHJlZUhvc3QsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQKLSAgICAsIHB1YmxpYyBXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKLSAgICAsIHB1YmxpYyBXZWJDb3Jl
OjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q2xpZW50Ci0gICAgLCBwdWJsaWMgV2ViQ29yZTo6
VXBkYXRlQXRsYXM6OkNsaWVudAotICAgICwgcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJG
YWN0b3J5CitjbGFzcyBDb29yZGluYXRlZExheWVyVHJlZUhvc3QgOiBwdWJsaWMgTGF5ZXJUcmVl
SG9zdCwgcHVibGljIFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudAogI2lm
IEVOQUJMRShDU1NfU0hBREVSUykKICAgICAsIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNs
aWVudAogI2VuZGlmCkBAIC04NCw5ICs3NSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2
b2lkIHBhZ2VCYWNrZ3JvdW5kVHJhbnNwYXJlbmN5Q2hhbmdlZCgpIE9WRVJSSURFOwogCi0gICAg
dmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpOwotICAgIHZpcnR1YWwgdm9pZCBwdXJnZUJh
Y2tpbmdTdG9yZXMoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CiAg
ICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdl
KENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpOwogICAgIHZp
cnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5
KCkgT1ZFUlJJREU7CiAgICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBtYWlu
Q29udGVudHNMYXllcigpOwpAQCAtOTgsNjAgKzg2LDM0IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZT4gY3JlYXRlQ29vcmRpbmF0
ZWRTdXJmYWNlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpDb29yZGluYXRlZFN1
cmZhY2U6OkZsYWdzKTsKIAotICAgIHZvaWQgY29tbWl0U2Nyb2xsT2Zmc2V0KHVpbnQzMl90IGxh
eWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG9mZnNldCk7Ci0KIHByb3RlY3RlZDoKICAg
ICBleHBsaWNpdCBDb29yZGluYXRlZExheWVyVHJlZUhvc3QoV2ViUGFnZSopOwogCiBwcml2YXRl
OgotICAgIC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5p
bWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUp
OwotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6
R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBS
ZWN0KTsKLSAgICB2aXJ0dWFsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IoKSBjb25zdCBPVkVSUklERTsK
LQotICAgIC8vIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDbGllbnQKLSAgICB2aXJ0dWFsIHZv
aWQgY3JlYXRlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQp
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRl
ZFN1cmZhY2U+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdD
b250ZW50cyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQpIE9WRVJSSURFOwotCi0gICAgdm9pZCBmbHVzaFBlbmRpbmdJbWFnZUJhY2tp
bmdDaGFuZ2VzKCk7Ci0KLSAgICAvLyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKLSAg
ICB2aXJ0dWFsIGJvb2wgaXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlczsgfQotICAgIHZpcnR1YWwgV2ViQ29yZTo6
RmxvYXRSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2lu
Z0lmTmVlZGVkKFdlYkNvcmU6OkltYWdlKikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRl
dGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopOwotICAgIHZpcnR1
YWwgYm9vbCBwYWludFRvU3VyZmFjZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViQ29yZTo6
Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMyX3QmIC8qIGF0bGFzSUQgKi8sIFdlYkNv
cmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpDbGllbnQqKSBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRMYXllcklELCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOwotCi0g
ICAgLy8gVXBkYXRlQXRsYXM6OkNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVVcGRhdGVB
dGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkU3Vy
ZmFjZT4pIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50
MzJfdCBhdGxhc0lEKSBPVkVSUklERTsKLQotICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5Ci0g
ICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdyYXBo
aWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCopIE9WRVJSSURFOwotCiAgICAg
Ly8gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ci0gICAgdm9pZCBpbml0aWFsaXplUm9vdENvbXBv
c2l0aW5nTGF5ZXJJZk5lZWRlZCgpOwogICAgIHZvaWQgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigp
OwogICAgIHZvaWQgZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsKLSAgICBib29sIGZsdXNoUGVu
ZGluZ0xheWVyQ2hhbmdlcygpOwotICAgIHZvaWQgY2xlYXJQZW5kaW5nU3RhdGVDaGFuZ2VzKCk7
CiAgICAgdm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOwogICAgIHZvaWQgcGVyZm9ybVNj
aGVkdWxlZExheWVyRmx1c2goKTsKLSAgICB2b2lkIGRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZs
dXNoKCk7CiAgICAgdm9pZCBzeW5jRGlzcGxheVN0YXRlKCk7Ci0gICAgdm9pZCBsYXllckZsdXNo
VGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+Kik7Cisg
ICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIHJlbmRlck5leHRGcmFtZSgp
OworICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisgICAgdm9pZCBjb21taXRTY3JvbGxP
ZmZzZXQodWludDMyX3QgbGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgb2Zmc2V0KTsK
IAotICAgIHZvaWQgc2NoZWR1bGVSZWxlYXNlSW5hY3RpdmVBdGxhc2VzKCk7CisgICAgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9jb29yZGluYXRvci0+cm9v
dExheWVyKCk7IH0KIAotICAgIHZvaWQgcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQo
V2ViQ29yZTo6VGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiopOworICAgIHZvaWQgbGF5
ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
PiopOworCisgICAgLy8gQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q2xpZW50CisgICAgdmlydHVh
bCB2b2lkIGRpZEZsdXNoUm9vdExheWVyKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRp
ZFN5bmNMYXllclN0YXRlKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJikg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaFJlcXVpcmVkKCkg
T1ZFUlJJREUgeyBzY2hlZHVsZUxheWVyRmx1c2goKTsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJikgT1ZFUlJJREU7CiAKICNpZiBFTkFCTEUoQ1NTX1NI
QURFUlMpCi0gICAgdm9pZCBwcmVwYXJlQ3VzdG9tRmlsdGVyUHJveGllc0lmTmVlZGVkKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7CisgICAgdm9pZCBwcmVwYXJlQ3Vz
dG9tRmlsdGVyUHJveGllc0ZvckFuaW1hdGlvbnMoV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1h
dGlvbnMmKTsKIAogICAgIC8vIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudAogICAg
IHZvaWQgcmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KFdlYkN1c3RvbUZpbHRlclByb2dy
YW1Qcm94eSopOwpAQCAtMTYwLDQzICsxMjIsMjUgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpc2Nv
bm5lY3RDdXN0b21GaWx0ZXJQcm9ncmFtcygpOwogI2VuZGlmCiAKLSAgICBPd25QdHI8V2ViQ29y
ZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7Ci0gICAgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciogbV9yb290Q29tcG9zaXRpbmdMYXllcjsKKyAgICBPd25QdHI8V2ViQ29yZTo6Q29tcG9zaXRp
bmdDb29yZGluYXRvcj4gbV9jb29yZGluYXRvcjsKIAogICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkg
bGF5ZXIuIFdpbGwgYmUgbnVsbCBpZiB0aGVyZSdzIG5vIHBhZ2Ugb3ZlcmxheS4KICAgICBPd25Q
dHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9wYWdlT3ZlcmxheUxheWVyOwogICAgIFJlZlB0
cjxQYWdlT3ZlcmxheT4gbV9wYWdlT3ZlcmxheTsKIAotICAgIFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NTdGF0ZSBtX3N0YXRlOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OkNv
b3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj4gTGF5
ZXJNYXA7Ci0gICAgTGF5ZXJNYXAgbV9yZWdpc3RlcmVkTGF5ZXJzOwotICAgIHR5cGVkZWYgSGFz
aE1hcDxXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBSZWZQdHI8V2ViQ29yZTo6
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+ID4gSW1hZ2VCYWNraW5nTWFwOwotICAgIEltYWdlQmFj
a2luZ01hcCBtX2ltYWdlQmFja2luZ3M7Ci0gICAgVmVjdG9yPE93blB0cjxXZWJDb3JlOjpVcGRh
dGVBdGxhcz4gPiBtX3VwZGF0ZUF0bGFzZXM7Ci0KICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAg
ICAgSGFzaFNldDxXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkqPiBtX2N1c3RvbUZpbHRlclBy
b2dyYW1zOwogI2VuZGlmCiAKICAgICBib29sIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZs
dXNoOwogICAgIGJvb2wgbV9pc1ZhbGlkOwotICAgIC8vIFdlIGRvbid0IHNlbmQgdGhlIG1lc3Nh
Z2VzIHJlbGF0ZWQgdG8gcmVsZWFzaW5nIHJlc291cmNlcyB0byBVSSBQcm9jZXNzIGR1cmluZyBw
dXJnaW5nLCBiZWNhdXNlIFVJIFByb2Nlc3MgYWxyZWFkeSBoYWQgcmVtb3ZlZCBhbGwgcmVzb3Vy
Y2VzLgotICAgIGJvb2wgbV9pc1B1cmdpbmc7Ci0gICAgYm9vbCBtX2lzRmx1c2hpbmdMYXllckNo
YW5nZXM7Ci0KLSAgICBib29sIG1fd2FpdGluZ0ZvclVJUHJvY2VzczsKICAgICBib29sIG1faXNT
dXNwZW5kZWQ7Ci0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsK
IAogICAgIExheWVyVHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0OwotICAgIGJvb2wgbV9z
aG91bGRTeW5jRnJhbWU7Ci0gICAgYm9vbCBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdM
YXllcjsKKwogICAgIFdlYkNvcmU6OlRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4gbV9s
YXllckZsdXNoVGltZXI7Ci0gICAgV2ViQ29yZTo6VGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0PiBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lcjsKICAgICBib29sIG1fbGF5ZXJGbHVz
aFNjaGVkdWxpbmdFbmFibGVkOwogICAgIHVpbnQ2NF90IG1fZm9yY2VSZXBhaW50QXN5bmNDYWxs
YmFja0lEOwotICAgIGJvb2wgbV9hbmltYXRpb25zTG9ja2VkOwogCiAjaWYgRU5BQkxFKFJFUVVF
U1RfQU5JTUFUSU9OX0ZSQU1FKQogICAgIGRvdWJsZSBtX2xhc3RBbmltYXRpb25TZXJ2aWNlVGlt
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRy
ZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9z
dC5oCmluZGV4IDkwYmJiOTQxZDFhYjA1NjgxZjk2YTIxNDAyY2Y5MzQ4MWIzMjc3N2QuLjJmYWQy
ZDEzY2YyNWQ4MzZlY2ZhYmEzYWJmZTZhZjg5ODAyNDBhMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaApAQCAtODcsOSArODcsNiBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJD
b3JlOjpDb2xvciYpIHsgfQogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIHZp
cnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYsIGZsb2F0IC8qIHNjYWxlICovLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JikgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBw
dXJnZUJhY2tpbmdTdG9yZXMoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6
Ok1lc3NhZ2VEZWNvZGVyJikgPSAwOwogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204024</attachid>
            <date>2013-06-07 04:59:31 -0700</date>
            <delta_ts>2013-06-07 05:13:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104360-20130607205756.patch</filename>
            <type>text/plain</type>
            <size>64023</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxMzA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDI0MjRkMmY2YzA3MjNm
YzA5YTQzZDdjOTNhNjdkYjI2YTc0ZGVlOS4uYmM0NmI5MzY2YzJjYjkwZjQzMDUyMzk3ZmRiZmIy
NDdkMDRkNmRmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDEzLTAzLTEzICBHd2Fu
ZyBZb29uIEh3YW5nICA8cnl1bWllbEBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGlu
YXRlZCBHcmFwaGljczogU2VwYXJhdGUgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGludG8gQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0IGFuZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQzNjAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0IGhhcyB0b28gbWFueSByZXNwb25zaWJpbGl0aWVzLiBJdAorICAgICAgICBp
bXBsZW1lbnRzIExheWVyVHJlZUhvc3QsIEdyYXBoaWNzTGF5ZXJDbGllbnQsCisgICAgICAgIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNs
aWVudCwKKyAgICAgICAgVXBkYXRlQXRsYXM6OkNsaWVudCwgR3JhcGhpY3NMYXllckZhY3Rvcnkg
YW5kCisgICAgICAgIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudC4KKworICAgICAg
ICBUaGlzIHJlZmFjdG9yaW5nIHJlZHVjZXMgdGhlIHJlc3BvbnNpYmlsaXRpZXMgb2YgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5l
dyBjbGFzcyBjYWxsZWQgQ29tcG9zaXRpbmdDb29yZGluYXRvciwgd2hpY2gKKyAgICAgICAgdGFr
ZXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIG1hbmFnaW5nIGNvbXBvc2l0aW5nIHJlc291cmNlcyBp
bgorICAgICAgICBXZWJQcm9jZXNzLgorCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dCBub3cgdGFrZXMgYSBwYXJ0IGZvciBzY2hlZHVsaW5nIGFuZCBJUEMKKyAgICAgICAgc3BlY2lm
aWMgcGFydHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRl
c3RzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVGFyZ2V0LnByaToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRp
bmdDb29yZGluYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdD
b29yZGluYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6On5Db21wb3NpdGluZ0Nvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2l6ZURpZENoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpmbHVzaFBlbmRpbmdM
YXllckNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6
Y2xlYXJQZW5kaW5nU3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OmluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZVJvb3RMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzeW5jTGF5ZXJTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVJbWFn
ZUJhY2tpbmdJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpjcmVhdGVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdD
b29yZGluYXRvcjo6dXBkYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVtb3ZlSW1hZ2VCYWNraW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0ltYWdl
QmFja2luZ0NoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRv
cjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpub3RpZnlGbHVzaFJlcXVpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OnBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlR3JhcGhpY3NMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXZpY2VTY2FsZUZhY3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpwYWdlU2NhbGVGYWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlVXBkYXRlQXRs
YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVtb3ZlVXBk
YXRlQXRsYXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6dmlz
aWJsZUNvbnRlbnRzUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjptYWluQ29udGVudHNMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjb21taXRTY3JvbGxPZmZz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVuZGVyTmV4
dEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnB1cmdl
QmFja2luZ1N0b3Jlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
OjpwYWludFRvU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3Np
dGluZ0Nvb3JkaW5hdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdD
b29yZGluYXRvcjo6Y2xlYXJSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRp
bmdDb29yZGluYXRvcjo6cm9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OnN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OmlzV2FpdGluZ0ZvclJlbmRlcmVyKToKKwogMjAxMy0wNi0wNiAgSmVyIE5vYmxlICA8
amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXN0cmljdCBXZWJBdWRpbyBmcm9tIHBs
YXlpbmcgd2hlbiBkaXNhbGxvd2VkIGJ5IHBhZ2UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMDlhOGY4NjJkOWQ0
MDc3OTEyNjRjODYyMTllOTYwZDgyNzlkODI2NC4uMGMxNTE0Zjg1M2E4YzE3YzU1ODUwYWY5ZmZj
NDczZTgwMmY2MTk1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDEzLTAzLTEzICBH
d2FuZyBZb29uIEh3YW5nICA8cnl1bWllbEBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29y
ZGluYXRlZCBHcmFwaGljczogU2VwYXJhdGUgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGludG8g
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGFuZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQzNjAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0IGhhcyB0b28gbWFueSByZXNwb25zaWJpbGl0aWVzLiBJdAorICAgICAg
ICBpbXBsZW1lbnRzIExheWVyVHJlZUhvc3QsIEdyYXBoaWNzTGF5ZXJDbGllbnQsCisgICAgICAg
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6
OkNsaWVudCwKKyAgICAgICAgVXBkYXRlQXRsYXM6OkNsaWVudCwgR3JhcGhpY3NMYXllckZhY3Rv
cnkgYW5kCisgICAgICAgIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudC4KKworICAg
ICAgICBUaGlzIHJlZmFjdG9yaW5nIHJlZHVjZXMgdGhlIHJlc3BvbnNpYmlsaXRpZXMgb2YgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBh
IG5ldyBjbGFzcyBjYWxsZWQgQ29tcG9zaXRpbmdDb29yZGluYXRvciwgd2hpY2gKKyAgICAgICAg
dGFrZXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIG1hbmFnaW5nIGNvbXBvc2l0aW5nIHJlc291cmNl
cyBpbgorICAgICAgICBXZWJQcm9jZXNzLgorCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdCBub3cgdGFrZXMgYSBwYXJ0IGZvciBzY2hlZHVsaW5nIGFuZCBJUEMKKyAgICAgICAgc3Bl
Y2lmaWMgcGFydHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBjb3ZlcmVkIGJ5IGV4aXN0aW5n
IHRlc3RzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0Ojp+Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KToKKyAgICAgICAg
KFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3QpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFJvb3RD
b21wb3NpdGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0Ojpmb3JjZVJlcGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OnNpemVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnNldFZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6
OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cHVyZ2VCYWNraW5nU3RvcmVzKToKKyAgICAgICAg
KFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp3aWxsU3luY0xheWVyU3RhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnByZXBhcmVDdXN0b21G
aWx0ZXJQcm94aWVzRm9yQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6Y2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyk6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJv
Z3JhbVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpk
aWRGbHVzaFJvb3RMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIpOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyk6Cisg
ICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Q29vcmRpbmF0
ZWRHcmFwaGljc1N0YXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KToKKyAgICAgICAg
KFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZUFuaW1hdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y29tbWl0U2Nyb2xsT2Zm
c2V0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZExheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0Ojpyb290TGF5ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9M
YXllclRyZWVIb3N0Lmg6CisKIDIwMTMtMDYtMDYgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxl
LmNvbT4KIAogICAgICAgICBDb21wbGV0ZWx5IGluaXRpYWxpemUgQ2hpbGRQcm9jZXNzIHN0YXRl
IG9uIGxhdW5jaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA4ZTgzNzM1OWM5MzU2NmRjNTU2YTRl
M2YyODc5Y2M2Yjc5NzIxZWZkLi41ZjZmY2FkODM1ZDExY2Y5MDc3MWUwM2JhY2IwYjU3YjkzZTZh
ZGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTk2Niw2ICsxOTY2LDcgQEAgc2V0KFdlYkNv
cmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNl
LmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxv
Y2F0b3IuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0NvbXBv
c2l0aW5nQ29vcmRpbmF0b3IuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCmluZGV4IDBiNGE0ZmQ5ZDA2ZGRkODUzZjIwNmMxNTJiMDdkYzAyYzJm
MmE2NzkuLjgzNTRlZjM0ODhlNjNmYjU5ZmIxYTJjNGUxZWJjNDA2MDUwODVmNmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQpAQCAtNDE0MCw2ICs0MTQwLDcgQEAgdXNlPygzRF9HUkFQSElDUykgewogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmggXAogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uaCBcCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmgg
XAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRp
bmdDb29yZGluYXRvci5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24u
aCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEN1c3RvbUZpbHRlclByb2dyYW0uaCBcCkBAIC00MTc1LDYgKzQxNzYsNyBAQCB1c2U/KDNE
X0dSQVBISUNTKSB7CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyR0wuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcCBcCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEJhY2tpbmdT
dG9yZS5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mNzk1YjIxNjdlODk5OGZkZGY4ZGI1ZTFmODJkZjg4NDk4MjQ2MDllCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCkBAIC0wLDAgKzEsNDE1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBDb21wYW55IDEwMCwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiQ29tcG9zaXRpbmdDb29yZGluYXRv
ci5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvVGVt
cG9yYXJ5Q2hhbmdlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yPiBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGUoUGFnZSog
cGFnZSwgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yKHBhZ2UsIGNsaWVudCkpOwor
fQorCitDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp+Q29tcG9zaXRpbmdDb29yZGluYXRvcigpCit7
CisgICAgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisKKyAgICBMYXllck1hcDo6aXRlcmF0b3IgZW5k
ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOworICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAg
ICAgaXQtPnZhbHVlLT5zZXRDb29yZGluYXRvcigwKTsKK30KKworQ29tcG9zaXRpbmdDb29yZGlu
YXRvcjo6Q29tcG9zaXRpbmdDb29yZGluYXRvcihQYWdlKiBwYWdlLCBDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yOjpDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fcGFnZShwYWdlKQorICAgICwgbV9jbGll
bnQoY2xpZW50KQorICAgICwgbV9yb290Q29tcG9zaXRpbmdMYXllcigwKQorICAgICwgbV9pc1B1
cmdpbmcoZmFsc2UpCisgICAgLCBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXMoZmFsc2UpCisgICAg
LCBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyKHRydWUpCisgICAgLCBtX3Nob3VsZFN5bmNGcmFtZShm
YWxzZSkKKyAgICAsIG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyKGZhbHNlKQor
ICAgICwgbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIodGhpcywgJkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OnJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKQoreworICAgIG1fcGFn
ZS0+c2V0dGluZ3MoKS0+c2V0QXBwbHlEZXZpY2VTY2FsZUZhY3RvckluQ29tcG9zaXRvcih0cnVl
KTsKKworICAgIC8vIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd2F5IHRvIGVuYWJsZSB0aGlzIG9ubHkg
aW4gdGhlIEdMIGNhc2UsIHVudGlsIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlciBpcyByZW1vdmVk
LgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0
ODY5CisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRTaG91bGRTdXBwb3J0Q29udGVu
dHNUaWxpbmcodHJ1ZSk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0Um9v
dENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgaWYgKG1fcm9v
dENvbXBvc2l0aW5nTGF5ZXIpCisgICAgICAgIG1fcm9vdENvbXBvc2l0aW5nTGF5ZXItPnJlbW92
ZUZyb21QYXJlbnQoKTsKKworICAgIG1fcm9vdENvbXBvc2l0aW5nTGF5ZXIgPSBsYXllcjsKKyAg
ICBpZiAobV9yb290Q29tcG9zaXRpbmdMYXllcikKKyAgICAgICAgbV9yb290TGF5ZXItPmFkZENo
aWxkQXRJbmRleChtX3Jvb3RDb21wb3NpdGluZ0xheWVyLCAwKTsKK30KKwordm9pZCBDb21wb3Np
dGluZ0Nvb3JkaW5hdG9yOjpzaXplRGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIG5ld1NpemUpCit7
CisgICAgbV9yb290TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisgICAgbV9jbGllbnQtPm5vdGlm
eUZsdXNoUmVxdWlyZWQoKTsKK30KKworYm9vbCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpmbHVz
aFBlbmRpbmdMYXllckNoYW5nZXMoKQoreworICAgIGlmIChtX2lzV2FpdGluZ0ZvclJlbmRlcmVy
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gcHJv
dGVjdG9yKG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlcywgdHJ1ZSk7CisKKyAgICBpbml0aWFsaXpl
Um9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCgpOworCisgICAgbV9yb290TGF5ZXItPmZsdXNo
Q29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBtX2NsaWVudC0+ZGlkRmx1
c2hSb290TGF5ZXIoKTsKKworICAgIGJvb2wgZGlkU3luYyA9IG1fcGFnZS0+bWFpbkZyYW1lKCkt
PnZpZXcoKS0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CisKKyAg
ICB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnVwZGF0ZUNv
bnRlbnRCdWZmZXJzSW5jbHVkaW5nU3ViTGF5ZXJzKCk7CisgICAgdG9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5zeW5jUGVuZGluZ1N0YXRlQ2hhbmdlc0luY2x1
ZGluZ1N1YkxheWVycygpOworCisgICAgZmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygp
OworCisgICAgaWYgKG1fc2hvdWxkU3luY0ZyYW1lKSB7CisgICAgICAgIGRpZFN5bmMgPSB0cnVl
OworCisgICAgICAgIGlmIChtX3Jvb3RDb21wb3NpdGluZ0xheWVyKSB7CisgICAgICAgICAgICBt
X3N0YXRlLmNvbnRlbnRzU2l6ZSA9IHJvdW5kZWRJbnRTaXplKG1fcm9vdENvbXBvc2l0aW5nTGF5
ZXItPnNpemUoKSk7CisgICAgICAgICAgICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBj
b250ZW50c0xheWVyID0gbWFpbkNvbnRlbnRzTGF5ZXIoKSkKKyAgICAgICAgICAgICAgICBtX3N0
YXRlLmNvdmVyZWRSZWN0ID0gY29udGVudHNMYXllci0+Y292ZXJSZWN0KCk7CisgICAgICAgIH0K
KyAgICAgICAgbV9zdGF0ZS5zY3JvbGxQb3NpdGlvbiA9IG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5s
b2NhdGlvbigpOworCisgICAgICAgIG1fY2xpZW50LT5jb21taXRTY2VuZVN0YXRlKG1fc3RhdGUp
OworCisgICAgICAgIGNsZWFyUGVuZGluZ1N0YXRlQ2hhbmdlcygpOworICAgICAgICBtX2lzV2Fp
dGluZ0ZvclJlbmRlcmVyID0gdHJ1ZTsKKyAgICAgICAgbV9zaG91bGRTeW5jRnJhbWUgPSBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZGlkU3luYzsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOjpjbGVhclBlbmRpbmdTdGF0ZUNoYW5nZXMoKQoreworICAgIG1fc3RhdGUubGF5
ZXJzVG9DcmVhdGUuY2xlYXIoKTsKKyAgICBtX3N0YXRlLmxheWVyc1RvVXBkYXRlLmNsZWFyKCk7
CisgICAgbV9zdGF0ZS5sYXllcnNUb1JlbW92ZS5jbGVhcigpOworCisgICAgbV9zdGF0ZS5pbWFn
ZXNUb0NyZWF0ZS5jbGVhcigpOworICAgIG1fc3RhdGUuaW1hZ2VzVG9SZW1vdmUuY2xlYXIoKTsK
KyAgICBtX3N0YXRlLmltYWdlc1RvVXBkYXRlLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5pbWFnZXNU
b0NsZWFyLmNsZWFyKCk7CisKKyAgICBtX3N0YXRlLnVwZGF0ZUF0bGFzZXNUb0NyZWF0ZS5jbGVh
cigpOworICAgIG1fc3RhdGUudXBkYXRlQXRsYXNlc1RvUmVtb3ZlLmNsZWFyKCk7CisKKyNpZiBF
TkFCTEUoQ1NTX1NIQURFUlMpCisgICAgbV9zdGF0ZS5jdXN0b21GaWx0ZXJzVG9DcmVhdGUuY2xl
YXIoKTsKKyAgICBtX3N0YXRlLmN1c3RvbUZpbHRlcnNUb1JlbW92ZS5jbGVhcigpOworI2VuZGlm
Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6aW5pdGlhbGl6ZVJvb3RDb21wb3Np
dGluZ0xheWVySWZOZWVkZWQoKQoreworICAgIGlmIChtX2RpZEluaXRpYWxpemVSb290Q29tcG9z
aXRpbmdMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZS5yb290Q29tcG9zaXRp
bmdMYXllciA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+
aWQoKTsKKyAgICBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllciA9IHRydWU7Cisg
ICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OmNyZWF0ZVJvb3RMYXllcihjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIEFTU0VS
VCghbV9yb290TGF5ZXIpOworICAgIC8vIENyZWF0ZSBhIHJvb3QgbGF5ZXIuCisgICAgbV9yb290
TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcywgdGhpcyk7CisjaWZuZGVmIE5ERUJV
RworICAgIG1fcm9vdExheWVyLT5zZXROYW1lKCJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yIHJvb3Qg
bGF5ZXIiKTsKKyNlbmRpZgorICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2Up
OworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKHNpemUpOworfQorCit2b2lkIENvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OnN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1l
ID0gdHJ1ZTsKKworICAgIG1fY2xpZW50LT53aWxsU3luY0xheWVyU3RhdGUoc3RhdGUpOworCisg
ICAgbV9zdGF0ZS5sYXllcnNUb1VwZGF0ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoaWQsIHN0YXRl
KSk7Cit9CisKK1Bhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IENvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OmNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKEltYWdlKiBpbWFnZSkKK3sK
KyAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQgPSBDb29yZGluYXRlZEltYWdl
QmFja2luZzo6Z2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRChpbWFnZSk7CisgICAgSW1hZ2VC
YWNraW5nTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VCYWNraW5ncy5maW5kKGltYWdlSUQpOwor
ICAgIFJlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gaW1hZ2VCYWNraW5nOworICAgIGlm
IChpdCA9PSBtX2ltYWdlQmFja2luZ3MuZW5kKCkpIHsKKyAgICAgICAgaW1hZ2VCYWNraW5nID0g
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNyZWF0ZSh0aGlzLCBpbWFnZSk7CisgICAgICAgIG1f
aW1hZ2VCYWNraW5ncy5hZGQoaW1hZ2VJRCwgaW1hZ2VCYWNraW5nKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgaW1hZ2VCYWNraW5nID0gaXQtPnZhbHVlOworCisgICAgcmV0dXJuIGltYWdlQmFja2lu
ZzsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVJbWFnZUJhY2tpbmco
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQoreworICAgIG1fc3RhdGUuaW1hZ2Vz
VG9DcmVhdGUuYXBwZW5kKGltYWdlSUQpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0
b3I6OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQs
IFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBjb29yZGluYXRlZFN1cmZhY2UpCit7Cisg
ICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fc3RhdGUuaW1hZ2VzVG9VcGRhdGUu
YXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGltYWdlSUQsIGNvb3JkaW5hdGVkU3VyZmFjZSkpOworfQor
Cit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMo
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQoreworICAgIG1fc2hvdWxkU3luY0Zy
YW1lID0gdHJ1ZTsKKyAgICBtX3N0YXRlLmltYWdlc1RvQ2xlYXIuYXBwZW5kKGltYWdlSUQpOwor
fQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJlbW92ZUltYWdlQmFja2luZyhDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAgaWYgKG1faXNQdXJnaW5nKQor
ICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGlt
YWdlSUQpKTsKKyAgICBtX2ltYWdlQmFja2luZ3MucmVtb3ZlKGltYWdlSUQpOworCisgICAgbV9z
dGF0ZS5pbWFnZXNUb1JlbW92ZS5hcHBlbmQoaW1hZ2VJRCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRp
bmdDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpCit7CisgICAg
SW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBlbmQgPSBtX2ltYWdlQmFja2luZ3MuZW5kKCk7Cisg
ICAgZm9yIChJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2ltYWdlQmFja2luZ3Mu
YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgaXRlci0+dmFsdWUtPnVwZGF0
ZSgpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6Om5vdGlmeUFuaW1hdGlvblN0
YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRvdWJsZSAvKiB0aW1lICovKQoreworfQorCit2
b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6Om5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgR3Jh
cGhpY3NMYXllciopCit7CisgICAgbV9jbGllbnQtPm5vdGlmeUZsdXNoUmVxdWlyZWQoKTsKK30K
KworCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnBhaW50Q29udGVudHMoY29uc3QgR3Jh
cGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRl
eHQsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkK
K3sKKyAgICBtX2NsaWVudC0+cGFpbnRMYXllckNvbnRlbnRzKGdyYXBoaWNzTGF5ZXIsIGdyYXBo
aWNzQ29udGV4dCwgY2xpcFJlY3QpOworfQorCitQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IENv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZUdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNs
aWVudCogY2xpZW50KQoreworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbGF5ZXIgPSBu
ZXcgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGNsaWVudCk7CisgICAgbGF5ZXItPnNldENvb3Jk
aW5hdG9yKHRoaXMpOworICAgIG1fcmVnaXN0ZXJlZExheWVycy5hZGQobGF5ZXItPmlkKCksIGxh
eWVyKTsKKyAgICBtX3N0YXRlLmxheWVyc1RvQ3JlYXRlLmFwcGVuZChsYXllci0+aWQoKSk7Cisg
ICAgbGF5ZXItPnNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50KCk7CisgICAgbV9jbGllbnQt
Pm5vdGlmeUZsdXNoUmVxdWlyZWQoKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobGF5ZXIpOworfQor
CitmbG9hdCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKK30KKworZmxvYXQg
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cGFnZVNjYWxlRmFjdG9yKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9wYWdlLT5wYWdlU2NhbGVGYWN0b3IoKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOjpjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRy
PENvb3JkaW5hdGVkU3VyZmFjZT4gY29vcmRpbmF0ZWRTdXJmYWNlKQoreworICAgIG1fc3RhdGUu
dXBkYXRlQXRsYXNlc1RvQ3JlYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihhdGxhc0lELCBjb29y
ZGluYXRlZFN1cmZhY2UpKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZW1v
dmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKQoreworICAgIGlmIChtX2lzUHVyZ2luZykK
KyAgICAgICAgcmV0dXJuOworICAgIG1fc3RhdGUudXBkYXRlQXRsYXNlc1RvUmVtb3ZlLmFwcGVu
ZChhdGxhc0lEKTsKK30KKworRmxvYXRSZWN0IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnZpc2li
bGVDb250ZW50c1JlY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX3Zpc2libGVDb250ZW50c1Jl
Y3Q7Cit9CisKK0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogQ29tcG9zaXRpbmdDb29yZGluYXRv
cjo6bWFpbkNvbnRlbnRzTGF5ZXIoKQoreworICAgIGlmICghbV9yb290Q29tcG9zaXRpbmdMYXll
cikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gdG9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIobV9yb290Q29tcG9zaXRpbmdMYXllciktPmZpbmRGaXJzdERlc2NlbmRhbnRXaXRoQ29u
dGVudHNSZWN1cnNpdmVseSgpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNl
dFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFBv
aW50JiB0cmFqZWN0b3J5VmVjdG9yKQoreworICAgIC8vIEEgemVybyB0cmFqZWN0b3J5VmVjdG9y
IGluZGljYXRlcyB0aGF0IHRpbGVzIGFsbCBhcm91bmQgdGhlIHZpZXdwb3J0IGFyZSByZXF1ZXN0
ZWQuCisgICAgaWYgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogY29udGVudHNMYXllciA9IG1h
aW5Db250ZW50c0xheWVyKCkpCisgICAgICAgIGNvbnRlbnRzTGF5ZXItPnNldFZpc2libGVDb250
ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7CisKKyAgICBib29sIGNv
bnRlbnRzUmVjdERpZENoYW5nZSA9IHJlY3QgIT0gbV92aXNpYmxlQ29udGVudHNSZWN0OworICAg
IGlmIChjb250ZW50c1JlY3REaWRDaGFuZ2UpIHsKKyAgICAgICAgbV92aXNpYmxlQ29udGVudHNS
ZWN0ID0gcmVjdDsKKworICAgICAgICBMYXllck1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3Rl
cmVkTGF5ZXJzLmVuZCgpOworICAgICAgICBmb3IgKExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1f
cmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBp
dC0+dmFsdWUtPnNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50KCk7CisgICAgfQorCisgICAg
RnJhbWVWaWV3KiB2aWV3ID0gbV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpOworICAgIGlmICh2
aWV3LT51c2VGaXhlZExheW91dCgpKSB7CisgICAgICAgIC8vIFJvdW5kIHRoZSByZWN0IGluc3Rl
YWQgb2YgZW5jbG9zaW5nIGl0IHRvIG1ha2Ugc3VyZSB0aGF0IGl0cyBzaXplIHN0YXlzCisgICAg
ICAgIC8vIHRoZSBzYW1lIHdoaWxlIHBhbm5pbmcuIFRoaXMgY2FuIGhhdmUgbmFzdHkgZWZmZWN0
cyBvbiBsYXlvdXQuCisgICAgICAgIHZpZXctPnNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KHJv
dW5kZWRJbnRSZWN0KHJlY3QpKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGlu
YXRvcjo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkKK3sKKyAgICBtX3Jvb3RMYXll
ci0+ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRp
bmdDb29yZGluYXRvcjo6ZGV0YWNoTGF5ZXIoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBsYXll
cikKK3sKKyAgICBpZiAobV9pc1B1cmdpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcmVn
aXN0ZXJlZExheWVycy5yZW1vdmUobGF5ZXItPmlkKCkpOworCisgICAgc2l6ZV90IGluZGV4ID0g
bV9zdGF0ZS5sYXllcnNUb0NyZWF0ZS5maW5kKGxheWVyLT5pZCgpKTsKKyAgICBpZiAoaW5kZXgg
IT0gbm90Rm91bmQpIHsKKyAgICAgICAgbV9zdGF0ZS5sYXllcnNUb0NyZWF0ZS5yZW1vdmUoaW5k
ZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zdGF0ZS5sYXllcnNUb1JlbW92
ZS5hcHBlbmQobGF5ZXItPmlkKCkpOworICAgIG1fY2xpZW50LT5ub3RpZnlGbHVzaFJlcXVpcmVk
KCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y29tbWl0U2Nyb2xsT2Zmc2V0
KHVpbnQzMl90IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG9mZnNldCkKK3sKKyAg
ICBMYXllck1hcDo6aXRlcmF0b3IgaSA9IG1fcmVnaXN0ZXJlZExheWVycy5maW5kKGxheWVySUQp
OworICAgIGlmIChpID09IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaS0+dmFsdWUtPmNvbW1pdFNjcm9sbE9mZnNldChvZmZzZXQpOworfQorCit2b2lk
IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJlbmRlck5leHRGcmFtZSgpCit7CisgICAgbV9pc1dh
aXRpbmdGb3JSZW5kZXJlciA9IGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fdXBkYXRlQXRsYXNlc1tpXS0+
ZGlkU3dhcEJ1ZmZlcnMoKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpwdXJn
ZUJhY2tpbmdTdG9yZXMoKQoreworICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiBwdXJnaW5nVG9n
Z2xlKG1faXNQdXJnaW5nLCB0cnVlKTsKKworICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBt
X3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7CisgICAgZm9yIChMYXllck1hcDo6aXRlcmF0b3IgaXQg
PSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBp
dC0+dmFsdWUtPnB1cmdlQmFja2luZ1N0b3JlcygpOworCisgICAgbV9pbWFnZUJhY2tpbmdzLmNs
ZWFyKCk7CisgICAgbV91cGRhdGVBdGxhc2VzLmNsZWFyKCk7Cit9CisKK2Jvb2wgQ29tcG9zaXRp
bmdDb29yZGluYXRvcjo6cGFpbnRUb1N1cmZhY2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29vcmRp
bmF0ZWRTdXJmYWNlOjpGbGFncyBmbGFncywgdWludDMyX3QmIGF0bGFzSUQsIEludFBvaW50JiBv
ZmZzZXQsIENvb3JkaW5hdGVkU3VyZmFjZTo6Q2xpZW50KiBjbGllbnQpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkgeworICAgICAg
ICBVcGRhdGVBdGxhcyogYXRsYXMgPSBtX3VwZGF0ZUF0bGFzZXNbaV0uZ2V0KCk7CisgICAgICAg
IGlmIChhdGxhcy0+c3VwcG9ydHNBbHBoYSgpID09IChmbGFncyAmIENvb3JkaW5hdGVkU3VyZmFj
ZTo6U3VwcG9ydHNBbHBoYSkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBiZSBmYWxzZSBp
ZiB0aGVyZSBpcyBubyBhdmFpbGFibGUgYnVmZmVyIHNwYWNlLgorICAgICAgICAgICAgaWYgKGF0
bGFzLT5wYWludE9uQXZhaWxhYmxlQnVmZmVyKHNpemUsIGF0bGFzSUQsIG9mZnNldCwgY2xpZW50
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHN0YXRpYyBjb25zdCBpbnQgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiA9IDEwMjQ7IC8vIFNob3Vs
ZCBiZSBhIHBvd2VyIG9mIHR3by4KKyAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKGFkb3B0UHRy
KG5ldyBVcGRhdGVBdGxhcyh0aGlzLCBTY3JhdGNoQnVmZmVyRGltZW5zaW9uLCBmbGFncykpKTsK
KyAgICBzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMoKTsKKyAgICByZXR1cm4gbV91cGRh
dGVBdGxhc2VzLmxhc3QoKS0+cGFpbnRPbkF2YWlsYWJsZUJ1ZmZlcihzaXplLCBhdGxhc0lELCBv
ZmZzZXQsIGNsaWVudCk7Cit9CisKK2NvbnN0IGRvdWJsZSBSZWxlYXNlSW5hY3RpdmVBdGxhc2Vz
VGltZXJJbnRlcnZhbCA9IDAuNTsKKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzY2hl
ZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMoKQoreworICAgIGlmICghbV9yZWxlYXNlSW5hY3Rp
dmVBdGxhc2VzVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9yZWxlYXNlSW5hY3RpdmVBdGxh
c2VzVGltZXIuc3RhcnRSZXBlYXRpbmcoUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2
YWwpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJlbGVhc2VJbmFjdGl2ZUF0
bGFzZXNUaW1lckZpcmVkKFRpbWVyPENvbXBvc2l0aW5nQ29vcmRpbmF0b3I+KikKK3sKKyAgICAv
LyBXZSBhbHdheXMgd2FudCB0byBrZWVwIG9uZSBhdGxhcyBmb3Igbm9uLWNvbXBvc2l0ZWQgY29u
dGVudC4KKyAgICBPd25QdHI8VXBkYXRlQXRsYXM+IGF0bGFzVG9LZWVwQW55d2F5OworICAgIGJv
b2wgZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ID0gZmFsc2U7CisgICAg
Zm9yIChpbnQgaSA9IG1fdXBkYXRlQXRsYXNlcy5zaXplKCkgLSAxOyAgaSA+PSAwOyAtLWkpIHsK
KyAgICAgICAgVXBkYXRlQXRsYXMqIGF0bGFzID0gbV91cGRhdGVBdGxhc2VzW2ldLmdldCgpOwor
ICAgICAgICBpZiAoIWF0bGFzLT5pc0luVXNlKCkpCisgICAgICAgICAgICBhdGxhcy0+YWRkVGlt
ZUluYWN0aXZlKFJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckludGVydmFsKTsKKyAgICAgICAg
Ym9vbCB1c2FibGVGb3JOb25Db21wb3NpdGVkQ29udGVudCA9ICFhdGxhcy0+c3VwcG9ydHNBbHBo
YSgpOworICAgICAgICBpZiAoYXRsYXMtPmlzSW5hY3RpdmUoKSkgeworICAgICAgICAgICAgaWYg
KCFmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgJiYgIWF0bGFzVG9LZWVw
QW55d2F5ICYmIHVzYWJsZUZvck5vbkNvbXBvc2l0ZWRDb250ZW50KQorICAgICAgICAgICAgICAg
IGF0bGFzVG9LZWVwQW55d2F5ID0gbV91cGRhdGVBdGxhc2VzW2ldLnJlbGVhc2UoKTsKKyAgICAg
ICAgICAgIG1fdXBkYXRlQXRsYXNlcy5yZW1vdmUoaSk7CisgICAgICAgIH0gZWxzZSBpZiAodXNh
YmxlRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQpCisgICAgICAgICAgICBmb3VuZEFjdGl2ZUF0bGFz
Rm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgPSB0cnVlOworICAgIH0KKworICAgIGlmICghZm91bmRB
Y3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ICYmIGF0bGFzVG9LZWVwQW55d2F5KQor
ICAgICAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKGF0bGFzVG9LZWVwQW55d2F5LnJlbGVhc2Uo
KSk7CisKKyAgICBpZiAobV91cGRhdGVBdGxhc2VzLnNpemUoKSA8PSAxKQorICAgICAgICBtX3Jl
bGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5zdG9wKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21w
b3NpdGluZ0Nvb3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYz
OWFlZTY5NDYwZGEyYWEyYzUzOTkxNTI2ZjU1Y2FlNjZiYjllZjEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29t
cG9zaXRpbmdDb29yZGluYXRvci5oCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
ICogQ29weXJpZ2h0IChDKSAyMDEzIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgQ29tcG9zaXRpbmdDb29yZGluYXRvcl9oCisjZGVmaW5l
IENvbXBvc2l0aW5nQ29vcmRpbmF0b3JfaAorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiQ29v
cmRpbmF0ZWRHcmFwaGljc1N0YXRlLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmcuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNs
aWVudC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJGYWN0b3J5LmgiCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiVXBkYXRlQXRsYXMuaCIKKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisjaW5jbHVk
ZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgUGFnZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEdyYXBoaWNzTGF5ZXI7
CitjbGFzcyBDb29yZGluYXRlZFN1cmZhY2U7CisKK2NsYXNzIENvbXBvc2l0aW5nQ29vcmRpbmF0
b3IgOiBwdWJsaWMgR3JhcGhpY3NMYXllckNsaWVudAorICAgICwgcHVibGljIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllckNsaWVudAorICAgICwgcHVibGljIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
OjpDbGllbnQKKyAgICAsIHB1YmxpYyBVcGRhdGVBdGxhczo6Q2xpZW50CisgICAgLCBwdWJsaWMg
R3JhcGhpY3NMYXllckZhY3RvcnkgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbXBvc2l0
aW5nQ29vcmRpbmF0b3IpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBj
bGFzcyBDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZsdXNo
Um9vdExheWVyKCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFN5bmNMYXllclN0YXRl
KENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJikgPSAwOworICAgICAgICB2aXJ0dWFsIHZv
aWQgbm90aWZ5Rmx1c2hSZXF1aXJlZCgpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNvbW1p
dFNjZW5lU3RhdGUoQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJikgPSAwOworICAgICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkgPSAwOworICAgIH07CisKKyAgICBz
dGF0aWMgUGFzc093blB0cjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiBjcmVhdGUoUGFnZSosIENv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudCopOworICAgIHZpcnR1YWwgfkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3IoKTsKKworICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhp
Y3NMYXllciopOworICAgIHZvaWQgc2l6ZURpZENoYW5nZShjb25zdCBJbnRTaXplJiBuZXdTaXpl
KTsKKyAgICB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOworCisgICAgdm9p
ZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9p
bnQmKTsKKyAgICB2b2lkIHJlbmRlck5leHRGcmFtZSgpOworICAgIHZvaWQgcHVyZ2VCYWNraW5n
U3RvcmVzKCk7CisgICAgdm9pZCBjb21taXRTY3JvbGxPZmZzZXQodWludDMyX3QgbGF5ZXJJRCwg
Y29uc3QgSW50U2l6ZSYgb2Zmc2V0KTsKKworICAgIHZvaWQgY3JlYXRlUm9vdExheWVyKGNvbnN0
IEludFNpemUmKTsKKyAgICB2b2lkIGNsZWFyUm9vdExheWVyKCkgeyBtX3Jvb3RMYXllciA9IG51
bGxwdHI7IH0KKyAgICBHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBt
X3Jvb3RMYXllci5nZXQoKTsgfQorICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbWFpbkNv
bnRlbnRzTGF5ZXIoKTsKKworICAgIGJvb2wgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7Cisg
ICAgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJiBzdGF0ZSgpIHsgcmV0dXJuIG1fc3RhdGU7IH0K
KyAgICBib29sIGlzV2FpdGluZ0ZvclJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9pc1dhaXRp
bmdGb3JSZW5kZXJlcjsgfQorCitwcml2YXRlOgorICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3Io
UGFnZSosIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudCopOworCisgICAgLy8gR3JhcGhp
Y3NMYXllckNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNv
bnN0IEdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFw
aGljc0NvbnRleHQmLCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVjdCYg
Y2xpcFJlY3QpIE9WRVJSSURFOworICAgIHZpcnR1YWwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3Io
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvcigpIGNv
bnN0IE9WRVJSSURFOworCisgICAgLy8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNsaWVudAor
ICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJ
bWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7CisKKyAgICAv
LyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFsIGJvb2wgaXNGbHVz
aGluZ0xheWVyQ2hhbmdlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faXNGbHVzaGluZ0xh
eWVyQ2hhbmdlczsgfQorICAgIHZpcnR1YWwgRmxvYXRSZWN0IHZpc2libGVDb250ZW50c1JlY3Qo
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKEltYWdlKikgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopIE9W
RVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBwYWludFRvU3VyZmFjZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMyX3QmIC8q
IGF0bGFzSUQgKi8sIFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJm
YWNlOjpDbGllbnQqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUo
Q29vcmRpbmF0ZWRMYXllcklELCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpIE9WRVJS
SURFOworCisgICAgLy8gVXBkYXRlQXRsYXM6OkNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBjcmVh
dGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3Vy
ZmFjZT4pIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50
MzJfdCBhdGxhc0lEKSBPVkVSUklERTsKKworICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5Cisg
ICAgdmlydHVhbCBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdyYXBoaWNzTGF5ZXIo
R3JhcGhpY3NMYXllckNsaWVudCopIE9WRVJSSURFOworCisgICAgdm9pZCBpbml0aWFsaXplUm9v
dENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCgpOworICAgIHZvaWQgZmx1c2hQZW5kaW5nSW1hZ2VC
YWNraW5nQ2hhbmdlcygpOworICAgIHZvaWQgY2xlYXJQZW5kaW5nU3RhdGVDaGFuZ2VzKCk7CisK
KyAgICB2b2lkIHNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpOworCisgICAgdm9pZCBy
ZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJGaXJlZChUaW1lcjxDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yPiopOworCisgICAgUGFnZSogbV9wYWdlOworICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6
OkNsaWVudCogbV9jbGllbnQ7CisKKyAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9yb290TGF5
ZXI7CisgICAgR3JhcGhpY3NMYXllciogbV9yb290Q29tcG9zaXRpbmdMYXllcjsKKworICAgIENv
b3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSBtX3N0YXRlOworCisgICAgdHlwZWRlZiBIYXNoTWFwPENv
b3JkaW5hdGVkTGF5ZXJJRCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj4gTGF5ZXJNYXA7Cisg
ICAgTGF5ZXJNYXAgbV9yZWdpc3RlcmVkTGF5ZXJzOworICAgIHR5cGVkZWYgSGFzaE1hcDxDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lELCBSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+ID4g
SW1hZ2VCYWNraW5nTWFwOworICAgIEltYWdlQmFja2luZ01hcCBtX2ltYWdlQmFja2luZ3M7Cisg
ICAgVmVjdG9yPE93blB0cjxVcGRhdGVBdGxhcz4gPiBtX3VwZGF0ZUF0bGFzZXM7CisKKyAgICAv
LyBXZSBkb24ndCBzZW5kIHRoZSBtZXNzYWdlcyByZWxhdGVkIHRvIHJlbGVhc2luZyByZXNvdXJj
ZXMgdG8gcmVuZGVyZXIgZHVyaW5nIHB1cmdpbmcsIGJlY2F1c2UgcmVuZGVyZXIgYWxyZWFkeSBo
YWQgcmVtb3ZlZCBhbGwgcmVzb3VyY2VzLgorICAgIGJvb2wgbV9pc1B1cmdpbmc7CisgICAgYm9v
bCBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXM7CisKKyAgICBib29sIG1faXNXYWl0aW5nRm9yUmVu
ZGVyZXI7CisgICAgRmxvYXRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKworICAgIGJvb2wg
bV9zaG91bGRTeW5jRnJhbWU7CisgICAgYm9vbCBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRp
bmdMYXllcjsKKyAgICBUaW1lcjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiBtX3JlbGVhc2VJbmFj
dGl2ZUF0bGFzZXNUaW1lcjsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZiAvLyBDb21wb3Np
dGluZ0Nvb3JkaW5hdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCmluZGV4IDAzNWZjN2Y1MmI5OWFmZWE2MDM3ZDI4
NGQ4NjJkY2Q2ZDA0YTM4ZjAuLjI2MTc3NWRjOTZhMDIyODE2Yzk1ODE0ZjBiZGUzM2E4Y2ZiZWVi
MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0LmNwcApAQCAtNDAsMTggKzQwLDkgQEAKICNpbmNsdWRlICJXZWJQYWdlUHJv
eHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0ZyYW1lVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9QYWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvUmVuZGVyTGF5ZXJCYWNraW5nLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TdXJmYWNlVXBkYXRlSW5m
by5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaD4KICNp
bmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdl
Lmg+CiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyVmFs
aWRhdGVkUHJvZ3JhbS5oIgpAQCAtNzIsNDkgKzYzLDI3IEBAIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6fkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCgpCiAjaWYgRU5BQkxFKENTU19TSEFERVJT
KQogICAgIGRpc2Nvbm5lY3RDdXN0b21GaWx0ZXJQcm9ncmFtcygpOwogI2VuZGlmCi0gICAgcHVy
Z2VCYWNraW5nU3RvcmVzKCk7Ci0KLSAgICBMYXllck1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZWdp
c3RlcmVkTGF5ZXJzLmVuZCgpOwotICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9y
ZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnZh
bHVlLT5zZXRDb29yZGluYXRvcigwKTsKIH0KIAogQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpD
b29yZGluYXRlZExheWVyVHJlZUhvc3QoV2ViUGFnZSogd2ViUGFnZSkKICAgICA6IExheWVyVHJl
ZUhvc3Qod2ViUGFnZSkKLSAgICAsIG1fcm9vdENvbXBvc2l0aW5nTGF5ZXIoMCkKICAgICAsIG1f
bm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKGZhbHNlKQogICAgICwgbV9pc1ZhbGlkKHRy
dWUpCi0gICAgLCBtX2lzUHVyZ2luZyhmYWxzZSkKLSAgICAsIG1faXNGbHVzaGluZ0xheWVyQ2hh
bmdlcyhmYWxzZSkKLSAgICAsIG1fd2FpdGluZ0ZvclVJUHJvY2Vzcyh0cnVlKQogICAgICwgbV9p
c1N1c3BlbmRlZChmYWxzZSkKLSAgICAsIG1fc2hvdWxkU3luY0ZyYW1lKGZhbHNlKQotICAgICwg
bV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXIoZmFsc2UpCiAgICAgLCBtX2xheWVy
Rmx1c2hUaW1lcih0aGlzLCAmQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpsYXllckZsdXNoVGlt
ZXJGaXJlZCkKLSAgICAsIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyKHRoaXMsICZDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKQog
ICAgICwgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQodHJ1ZSkKICAgICAsIG1fZm9yY2VS
ZXBhaW50QXN5bmNDYWxsYmFja0lEKDApCi0gICAgLCBtX2FuaW1hdGlvbnNMb2NrZWQoZmFsc2Up
CiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogICAgICwgbV9sYXN0QW5pbWF0
aW9uU2VydmljZVRpbWUoMCkKICNlbmRpZgogewotICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+
c2V0dGluZ3MoKS0+c2V0QXBwbHlEZXZpY2VTY2FsZUZhY3RvckluQ29tcG9zaXRvcih0cnVlKTsK
IAotICAgIC8vIENyZWF0ZSBhIHJvb3QgbGF5ZXIuCi0gICAgbV9yb290TGF5ZXIgPSBHcmFwaGlj
c0xheWVyOjpjcmVhdGUodGhpcywgdGhpcyk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1fcm9vdExh
eWVyLT5zZXROYW1lKCJDb29yZGluYXRlZExheWVyVHJlZUhvc3Qgcm9vdCBsYXllciIpOwotI2Vu
ZGlmCi0gICAgbV9yb290TGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7Ci0gICAgbV9yb290
TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOwotICAgIG1fbGF5ZXJUcmVlQ29udGV4
dC5jb29yZGluYXRlZExheWVySUQgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RM
YXllci5nZXQoKSktPmlkKCk7CisgICAgbV9jb29yZGluYXRvciA9IENvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OmNyZWF0ZSh3ZWJQYWdlLT5jb3JlUGFnZSgpLCB0aGlzKTsKIAotICAgIENvb3JkaW5h
dGVkU3VyZmFjZTo6c2V0RmFjdG9yeShjcmVhdGVDb29yZGluYXRlZFN1cmZhY2UpOworICAgIG1f
Y29vcmRpbmF0b3ItPmNyZWF0ZVJvb3RMYXllcihtX3dlYlBhZ2UtPnNpemUoKSk7CisgICAgbV9s
YXllclRyZWVDb250ZXh0LmNvb3JkaW5hdGVkTGF5ZXJJRCA9IHRvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyKHJvb3RMYXllcigpKS0+aWQoKTsKIAotICAgIC8vIFRoaXMgaXMgYSB0ZW1wb3Jhcnkg
d2F5IHRvIGVuYWJsZSB0aGlzIG9ubHkgaW4gdGhlIEdMIGNhc2UsIHVudGlsIFRleHR1cmVNYXBw
ZXJJbWFnZUJ1ZmZlciBpcyByZW1vdmVkLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0ODY5Ci0gICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpzZXRTaG91bGRTdXBwb3J0Q29udGVudHNUaWxpbmcodHJ1ZSk7CisgICAgQ29vcmRpbmF0ZWRT
dXJmYWNlOjpzZXRGYWN0b3J5KGNyZWF0ZUNvb3JkaW5hdGVkU3VyZmFjZSk7CiAKICAgICBpZiAo
bV93ZWJQYWdlLT5oYXNQYWdlT3ZlcmxheSgpKQogICAgICAgICBjcmVhdGVQYWdlT3ZlcmxheUxh
eWVyKCk7CkBAIC0xNTgsMTIgKzEyNyw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wKIAogdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCiB7Ci0gICAgaWYgKG1fcm9vdENvbXBv
c2l0aW5nTGF5ZXIpCi0gICAgICAgIG1fcm9vdENvbXBvc2l0aW5nTGF5ZXItPnJlbW92ZUZyb21Q
YXJlbnQoKTsKLQotICAgIG1fcm9vdENvbXBvc2l0aW5nTGF5ZXIgPSBncmFwaGljc0xheWVyOwot
ICAgIGlmIChtX3Jvb3RDb21wb3NpdGluZ0xheWVyKQotICAgICAgICBtX3Jvb3RMYXllci0+YWRk
Q2hpbGRBdEluZGV4KG1fcm9vdENvbXBvc2l0aW5nTGF5ZXIsIDApOworICAgIG1fY29vcmRpbmF0
b3ItPnNldFJvb3RDb21wb3NpdGluZ0xheWVyKGdyYXBoaWNzTGF5ZXIpOwogfQogCiB2b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6aW52YWxpZGF0ZSgpCkBAIC0xNzEsNyArMTM1LDcgQEAg
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmludmFsaWRhdGUoKQogICAgIGNhbmNlbFBl
bmRpbmdMYXllckZsdXNoKCk7CiAKICAgICBBU1NFUlQobV9pc1ZhbGlkKTsKLSAgICBtX3Jvb3RM
YXllciA9IG51bGxwdHI7CisgICAgbV9jb29yZGluYXRvci0+Y2xlYXJSb290TGF5ZXIoKTsKICAg
ICBtX2lzVmFsaWQgPSBmYWxzZTsKIH0KIApAQCAtMTg0LDcgKzE0OCw3IEBAIHZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnQoKQogICAgIC8vIFdlIG5lZWQgdG8gc2No
ZWR1bGUgYW5vdGhlciBmbHVzaCwgb3RoZXJ3aXNlIHRoZSBmb3JjZWQgcGFpbnQgbWlnaHQgY2Fu
Y2VsIGEgbGF0ZXIgZXhwZWN0ZWQgZmx1c2guCiAgICAgLy8gVGhpcyBpcyBhbGlnbmVkIHdpdGgg
TGF5ZXJUcmVlSG9zdENBLgogICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgIGZsdXNoUGVu
ZGluZ0xheWVyQ2hhbmdlcygpOworICAgIG1fY29vcmRpbmF0b3ItPmZsdXNoUGVuZGluZ0xheWVy
Q2hhbmdlcygpOwogfQogCiBib29sIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBh
aW50QXN5bmModWludDY0X3QgY2FsbGJhY2tJRCkKQEAgLTE5OCw3ICsxNjIsNyBAQCBib29sIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50QXN5bmModWludDY0X3QgY2FsbGJh
Y2tJRCkKIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNpemVEaWRDaGFuZ2UoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSkKIHsKLSAgICBtX3Jvb3RMYXllci0+c2V0U2l6
ZShuZXdTaXplKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5zaXplRGlkQ2hhbmdlKG5ld1NpemUpOwog
ICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwogfQogCkBAIC0yMzMsMTExICsxOTcsNDggQEAgdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFBhZ2VPdmVybGF5T3BhY2l0eShQYWdlT3Zl
cmxheSosIGZsb2F0IHZhbHVlKQogICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwogfQogCi1ib29s
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKK3Zv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKIHsK
LSAgICBpZiAobV93YWl0aW5nRm9yVUlQcm9jZXNzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gcHJvdGVjdG9yKG1faXNGbHVzaGluZ0xheWVyQ2hh
bmdlcywgdHJ1ZSk7Ci0KLSAgICBpbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRl
ZCgpOwotCi0gICAgbV9yb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXll
ck9ubHkoKTsKLSAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQotICAgICAgICBtX3BhZ2VPdmVy
bGF5TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLQotICAg
IGJvb2wgZGlkU3luYyA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXco
KS0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7Ci0KLSAgICB0b0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnVwZGF0ZUNvbnRlbnRC
dWZmZXJzSW5jbHVkaW5nU3ViTGF5ZXJzKCk7Ci0gICAgdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5zeW5jUGVuZGluZ1N0YXRlQ2hhbmdlc0luY2x1ZGluZ1N1
YkxheWVycygpOwotCi0gICAgZmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpOwotCi0g
ICAgaWYgKG1fc2hvdWxkU3luY0ZyYW1lKSB7Ci0gICAgICAgIGRpZFN5bmMgPSB0cnVlOwotCi0g
ICAgICAgIGlmIChtX3Jvb3RDb21wb3NpdGluZ0xheWVyKSB7Ci0gICAgICAgICAgICBtX3N0YXRl
LmNvbnRlbnRzU2l6ZSA9IHJvdW5kZWRJbnRTaXplKG1fcm9vdENvbXBvc2l0aW5nTGF5ZXItPnNp
emUoKSk7Ci0gICAgICAgICAgICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBjb250ZW50
c0xheWVyID0gbWFpbkNvbnRlbnRzTGF5ZXIoKSkKLSAgICAgICAgICAgICAgICBtX3N0YXRlLmNv
dmVyZWRSZWN0ID0gY29udGVudHNMYXllci0+Y292ZXJSZWN0KCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtX3N0YXRlLnNjcm9sbFBvc2l0aW9uID0gbV92aXNpYmxlQ29udGVudHNSZWN0LmxvY2F0
aW9uKCk7Ci0KLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eTo6Q29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlKG1fc3RhdGUp
KTsKLQotICAgICAgICBjbGVhclBlbmRpbmdTdGF0ZUNoYW5nZXMoKTsKLSAgICAgICAgbV93YWl0
aW5nRm9yVUlQcm9jZXNzID0gdHJ1ZTsKLSAgICAgICAgbV9zaG91bGRTeW5jRnJhbWUgPSBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBpZiAobV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQpIHsKLSAg
ICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFj
ayhtX2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJRCkpOwotICAgICAgICBtX2ZvcmNlUmVwYWlu
dEFzeW5jQ2FsbGJhY2tJRCA9IDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRpZFN5bmM7CisgICAg
bV9jb29yZGluYXRvci0+c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChyZWN0LCB0cmFqZWN0b3J5VmVj
dG9yKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmNsZWFyUGVuZGluZ1N0YXRlQ2hhbmdlcygpCit2b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6cmVuZGVyTmV4dEZyYW1lKCkKIHsKLSAgICBtX3N0YXRlLmxheWVyc1Rv
Q3JlYXRlLmNsZWFyKCk7Ci0gICAgbV9zdGF0ZS5sYXllcnNUb1VwZGF0ZS5jbGVhcigpOwotICAg
IG1fc3RhdGUubGF5ZXJzVG9SZW1vdmUuY2xlYXIoKTsKLQotICAgIG1fc3RhdGUuaW1hZ2VzVG9D
cmVhdGUuY2xlYXIoKTsKLSAgICBtX3N0YXRlLmltYWdlc1RvUmVtb3ZlLmNsZWFyKCk7Ci0gICAg
bV9zdGF0ZS5pbWFnZXNUb1VwZGF0ZS5jbGVhcigpOwotICAgIG1fc3RhdGUuaW1hZ2VzVG9DbGVh
ci5jbGVhcigpOwotCi0gICAgbV9zdGF0ZS51cGRhdGVBdGxhc2VzVG9DcmVhdGUuY2xlYXIoKTsK
LSAgICBtX3N0YXRlLnVwZGF0ZUF0bGFzZXNUb1JlbW92ZS5jbGVhcigpOwotCi0jaWYgRU5BQkxF
KENTU19TSEFERVJTKQotICAgIG1fc3RhdGUuY3VzdG9tRmlsdGVyc1RvQ3JlYXRlLmNsZWFyKCk7
Ci0gICAgbV9zdGF0ZS5jdXN0b21GaWx0ZXJzVG9SZW1vdmUuY2xlYXIoKTsKLSNlbmRpZgorICAg
IG1fY29vcmRpbmF0b3ItPnJlbmRlck5leHRGcmFtZSgpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVz
aCgpOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZVJvb3RD
b21wb3NpdGluZ0xheWVySWZOZWVkZWQoKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnB1cmdlQmFja2luZ1N0b3JlcygpCiB7Ci0gICAgaWYgKG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21w
b3NpdGluZ0xheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0YXRlLnJvb3RDb21wb3Np
dGluZ0xheWVyID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkp
LT5pZCgpOwotICAgIG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyID0gdHJ1ZTsK
LSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV9jb29yZGluYXRvci0+cHVyZ2VC
YWNraW5nU3RvcmVzKCk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzeW5j
TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
clN0YXRlJiBzdGF0ZSkKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp3aWxsU3luY0xh
eWVyU3RhdGUoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQogewotICAgIG1f
c2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLQogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBw
cmVwYXJlQ3VzdG9tRmlsdGVyUHJveGllc0lmTmVlZGVkKHN0YXRlKTsKLSNlbmRpZgorICAgIGlm
IChzdGF0ZS5hbmltYXRpb25zQ2hhbmdlZCkKKyAgICAgICAgcHJlcGFyZUN1c3RvbUZpbHRlclBy
b3hpZXNGb3JBbmltYXRpb25zKHN0YXRlLmFuaW1hdGlvbnMpOwogCi0gICAgbV9zdGF0ZS5sYXll
cnNUb1VwZGF0ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoaWQsIHN0YXRlKSk7CisgICAgaWYgKHN0
YXRlLmZpbHRlcnNDaGFuZ2VkKQorICAgICAgICBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94
aWVzKHN0YXRlLmZpbHRlcnMpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworI2Vu
ZGlmCiB9CiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6cHJlcGFyZUN1c3RvbUZpbHRlclByb3hpZXNJZk5lZWRlZChDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCi17Ci0gICAgaWYgKHN0YXRlLmFuaW1hdGlvbnNDaGFu
Z2VkKSB7Ci0gICAgICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhY3RpdmVBbmltYXRpb25z
ID0gc3RhdGUuYW5pbWF0aW9uczsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhY3Rp
dmVBbmltYXRpb25zLmFuaW1hdGlvbnMoKS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgY29u
c3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcyA9IGFjdGl2ZUFuaW1hdGlvbnMuYW5pbWF0
aW9ucygpLmF0KGkpLmtleWZyYW1lcygpOwotICAgICAgICAgICAgaWYgKGtleWZyYW1lcy5wcm9w
ZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0ZXIpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGtleWZyYW1lcy5z
aXplKCk7ICsraikgewotICAgICAgICAgICAgICAgIGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVl
JiBmaWx0ZXJWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlJj4o
a2V5ZnJhbWVzLmF0KGkpKTsKLSAgICAgICAgICAgICAgICBjaGVja0N1c3RvbUZpbHRlclByb2dy
YW1Qcm94aWVzKGZpbHRlclZhbHVlLnZhbHVlKCkpOwotICAgICAgICAgICAgfQordm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnByZXBhcmVDdXN0b21GaWx0ZXJQcm94aWVzRm9yQW5pbWF0
aW9ucyhHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYWN0aXZlQW5pbWF0aW9ucykKK3sKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGFjdGl2ZUFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMgPSBh
Y3RpdmVBbmltYXRpb25zLmFuaW1hdGlvbnMoKS5hdChpKS5rZXlmcmFtZXMoKTsKKyAgICAgICAg
aWYgKGtleWZyYW1lcy5wcm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0ZXIp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBr
ZXlmcmFtZXMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgIGNvbnN0IEZpbHRlckFuaW1hdGlv
blZhbHVlJiBmaWx0ZXJWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZh
bHVlJj4oa2V5ZnJhbWVzLmF0KGkpKTsKKyAgICAgICAgICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJv
Z3JhbVByb3hpZXMoZmlsdGVyVmFsdWUudmFsdWUoKSk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAg
ICBpZiAoc3RhdGUuZmlsdGVyc0NoYW5nZWQpCi0gICAgICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJv
Z3JhbVByb3hpZXMoc3RhdGUuZmlsdGVycyk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIGZpbHRlcnMpCkBAIC0zNjcsNyArMjY4LDcgQEAgdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoY29uc3QgRmlsdGVyT3Bl
cmEKICAgICAgICAgaWYgKCFjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmNsaWVudCgpKSB7CiAg
ICAgICAgICAgICBjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPnNldENsaWVudCh0aGlzKTsKICAg
ICAgICAgICAgIG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMuYWRkKGN1c3RvbUZpbHRlclByb2dyYW1Q
cm94eS5nZXQoKSk7Ci0gICAgICAgICAgICBtX3N0YXRlLmN1c3RvbUZpbHRlcnNUb0NyZWF0ZS5h
cHBlbmQoc3RkOjptYWtlX3BhaXIoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpLCBjdXN0
b21PcGVyYXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKS0+dmFsaWRhdGVkUHJvZ3JhbUluZm8oKSkp
OworICAgICAgICAgICAgbV9jb29yZGluYXRvci0+c3RhdGUoKS5jdXN0b21GaWx0ZXJzVG9DcmVh
dGUuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+aWQoKSwg
Y3VzdG9tT3BlcmF0aW9uLT52YWxpZGF0ZWRQcm9ncmFtKCktPnZhbGlkYXRlZFByb2dyYW1JbmZv
KCkpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBjbGllbnQgd2Fz
IG5vdCBkaXNjb25uZWN0ZWQgdGhlbiB0aGlzIGNvb3JkaW5hdG9yIG11c3QgYmUgdGhlIGNsaWVu
dCBmb3IgaXQuCiAgICAgICAgICAgICBBU1NFUlQoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5j
bGllbnQoKSA9PSB0aGlzKTsKQEAgLTM4MCw3ICsyODEsNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KFdlYkN1c3RvbUZpbHRl
clBybwogICAgIC8vIEF0IHRoaXMgdGltZSB0aGUgc2hhZGVyIGlzIG5vdCBuZWVkZWQgYW55bW9y
ZSwgc28gd2UgcmVtb3ZlIGl0IGZyb20gb3VyIHNldCBhbmQKICAgICAvLyBzZW5kIGEgbWVzc2Fn
ZSB0byB0aGUgb3RoZXIgcHJvY2VzcyB0byBkZWxldGUgaXQuCiAgICAgbV9jdXN0b21GaWx0ZXJQ
cm9ncmFtcy5yZW1vdmUoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KTsKLSAgICBtX3N0YXRlLmN1
c3RvbUZpbHRlcnNUb1JlbW92ZS5hcHBlbmQoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgp
KTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5zdGF0ZSgpLmN1c3RvbUZpbHRlcnNUb1JlbW92ZS5hcHBl
bmQoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpKTsKIH0KIAogdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmRpc2Nvbm5lY3RDdXN0b21GaWx0ZXJQcm9ncmFtcygpCkBAIC0zOTIs
MjMgKzI5MywxNSBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGlzY29ubmVjdEN1
c3RvbUZpbHRlclByb2dyYW1zKCkKIH0KICNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NIQURFUlMpCiAK
LXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXRhY2hMYXllcihDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIqIGxheWVyKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZEZs
dXNoUm9vdExheWVyKCkKIHsKLSAgICBtX3JlZ2lzdGVyZWRMYXllcnMucmVtb3ZlKGxheWVyLT5p
ZCgpKTsKLQotICAgIHNpemVfdCBpbmRleCA9IG1fc3RhdGUubGF5ZXJzVG9DcmVhdGUuZmluZChs
YXllci0+aWQoKSk7Ci0gICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgIG1fc3Rh
dGUubGF5ZXJzVG9DcmVhdGUucmVtb3ZlKGluZGV4KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIG1fc3RhdGUubGF5ZXJzVG9SZW1vdmUuYXBwZW5kKGxheWVyLT5pZCgpKTsKLSAgICBz
Y2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQorICAgICAg
ICBtX3BhZ2VPdmVybGF5TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9u
bHkoKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnBlcmZvcm1TY2hlZHVs
ZWRMYXllckZsdXNoKCkKIHsKLSAgICBpZiAobV9pc1N1c3BlbmRlZCB8fCBtX3dhaXRpbmdGb3JV
SVByb2Nlc3MpCisgICAgaWYgKG1faXNTdXNwZW5kZWQgfHwgbV9jb29yZGluYXRvci0+aXNXYWl0
aW5nRm9yUmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3luY0Rpc3BsYXlTdGF0
ZSgpOwpAQCAtNDE2LDggKzMwOSwxNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQogICAgIGlmICghbV9pc1ZhbGlkKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkpCi0gICAgICAg
IGRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7CisgICAgYm9vbCBkaWRTeW5jID0gbV9j
b29yZGluYXRvci0+Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7CisKKyAgICBpZiAobV9mb3Jj
ZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQpIHsKKyAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFjayhtX2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJh
Y2tJRCkpOworICAgICAgICBtX2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJRCA9IDA7CisgICAg
fQorCisgICAgaWYgKG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoICYmIGRpZFN5bmMp
IHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWFJbXBsKj4obV93ZWJQYWdlLT5kcmF3
aW5nQXJlYSgpKS0+bGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKTsKKyAgICAgICAgbV9ub3RpZnlB
ZnRlclNjaGVkdWxlZExheWVyRmx1c2ggPSBmYWxzZTsKKyAgICB9CiB9CiAKIHZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jRGlzcGxheVN0YXRlKCkKQEAgLTQzNSwxNCArMzM3LDYg
QEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNEaXNwbGF5U3RhdGUoKQogICAg
IG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCkKLXsKLSAgICBpZiAobV9u
b3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gpIHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8RHJh
d2luZ0FyZWFJbXBsKj4obV93ZWJQYWdlLT5kcmF3aW5nQXJlYSgpKS0+bGF5ZXJIb3N0RGlkRmx1
c2hMYXllcnMoKTsKLSAgICAgICAgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2ggPSBm
YWxzZTsKLSAgICB9Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpsYXllckZs
dXNoVGltZXJGaXJlZChUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+KikKIHsKICAgICBw
ZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOwpAQCAtNDUyLDE1ICszNDYsMTUgQEAgdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKQogewogICAg
IEFTU0VSVCghbV9wYWdlT3ZlcmxheUxheWVyKTsKIAotICAgIG1fcGFnZU92ZXJsYXlMYXllciA9
IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzLCB0aGlzKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5
ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUoZ3JhcGhpY3NMYXllckZhY3RvcnkoKSwgbV9jb29y
ZGluYXRvci5nZXQoKSk7CiAjaWZuZGVmIE5ERUJVRwotICAgIG1fcGFnZU92ZXJsYXlMYXllci0+
c2V0TmFtZSgiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IHBhZ2Ugb3ZlcmxheSBjb250ZW50Iik7
CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROYW1lKCJDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
IHBhZ2Ugb3ZlcmxheSBjb250ZW50Iik7CiAjZW5kaWYKIAogICAgIG1fcGFnZU92ZXJsYXlMYXll
ci0+c2V0RHJhd3NDb250ZW50KHRydWUpOwotICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0U2l6
ZShtX3dlYlBhZ2UtPnNpemUoKSk7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRTaXplKHJv
b3RMYXllcigpLT5zaXplKCkpOwogCi0gICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fcGFnZU92
ZXJsYXlMYXllci5nZXQoKSk7CisgICAgcm9vdExheWVyKCktPmFkZENoaWxkKG1fcGFnZU92ZXJs
YXlMYXllci5nZXQoKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXN0
cm95UGFnZU92ZXJsYXlMYXllcigpCkBAIC00NzAsNjUgKzM2NCw3IEBAIHZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpCiAgICAgbV9wYWdlT3Zl
cmxheUxheWVyID0gbnVsbHB0cjsKIH0KIAotUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFj
a2luZz4gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRl
ZChJbWFnZSogaW1hZ2UpCi17Ci0gICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlE
ID0gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmdldENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQo
aW1hZ2UpOwotICAgIEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlQmFja2lu
Z3MuZmluZChpbWFnZUlEKTsKLSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGlt
YWdlQmFja2luZzsKLSAgICBpZiAoaXQgPT0gbV9pbWFnZUJhY2tpbmdzLmVuZCgpKSB7Ci0gICAg
ICAgIGltYWdlQmFja2luZyA9IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjcmVhdGUodGhpcywg
aW1hZ2UpOwotICAgICAgICBtX2ltYWdlQmFja2luZ3MuYWRkKGltYWdlSUQsIGltYWdlQmFja2lu
Zyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGltYWdlQmFja2luZyA9IGl0LT52YWx1ZTsKLQotICAg
IHJldHVybiBpbWFnZUJhY2tpbmc7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQot
ewotICAgIG1fc3RhdGUuaW1hZ2VzVG9DcmVhdGUuYXBwZW5kKGltYWdlSUQpOwotfQotCi12b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IGNv
b3JkaW5hdGVkU3VyZmFjZSkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAg
bV9zdGF0ZS5pbWFnZXNUb1VwZGF0ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoaW1hZ2VJRCwgY29v
cmRpbmF0ZWRTdXJmYWNlKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpj
bGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJ
RCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV9zdGF0ZS5pbWFnZXNU
b0NsZWFyLmFwcGVuZChpbWFnZUlEKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQp
Ci17Ci0gICAgaWYgKG1faXNQdXJnaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQo
bV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKLSAgICBtX2ltYWdlQmFja2luZ3Mu
cmVtb3ZlKGltYWdlSUQpOwotCi0gICAgbV9zdGF0ZS5pbWFnZXNUb1JlbW92ZS5hcHBlbmQoaW1h
Z2VJRCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpmbHVzaFBlbmRpbmdJ
bWFnZUJhY2tpbmdDaGFuZ2VzKCkKLXsKLSAgICBJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1faW1hZ2VCYWNraW5ncy5lbmQoKTsKLSAgICBmb3IgKEltYWdlQmFja2luZ01hcDo6aXRl
cmF0b3IgaXRlciA9IG1faW1hZ2VCYWNraW5ncy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVy
KQotICAgICAgICBpdGVyLT52YWx1ZS0+dXBkYXRlKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0Ojpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqLCBkb3VibGUgLyogdGltZSAqLykKLXsKLX0KLQotdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6Om5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NM
YXllciopCi17Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqIGdyYXBoaWNzTGF5ZXIsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250
ZXh0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgY2xpcFJlY3QpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGFpbnRM
YXllckNvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXBoaWNz
Q29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKIHsKICAg
ICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX3BhZ2VPdmVybGF5TGF5ZXIpIHsKICAgICAgICAgLy8g
T3ZlcmxheXMgY29udGFpbiB0cmFuc3BhcmVudCBjb250ZW50cyBhbmQgd29uJ3QgY2xlYXIgdGhl
IGNvbnRleHQgYXMgcGFydCBvZiB0aGVpciByZW5kZXJpbmcsIHNvIHdlIGRvIGl0IGhlcmUuCkBA
IC01MzgsMTUgKzM3NCw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwYWludENv
bnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoCiAgICAgfQogfQogCi1Q
YXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRl
R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCit2b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyKiBsYXllciA9IG5ldyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoY2xpZW50KTsK
LSAgICBsYXllci0+c2V0Q29vcmRpbmF0b3IodGhpcyk7Ci0gICAgbV9yZWdpc3RlcmVkTGF5ZXJz
LmFkZChsYXllci0+aWQoKSwgbGF5ZXIpOwotICAgIG1fc3RhdGUubGF5ZXJzVG9DcmVhdGUuYXBw
ZW5kKGxheWVyLT5pZCgpKTsKLSAgICBsYXllci0+c2V0TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1l
bnQoKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobGF5
ZXIpOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OkNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZShzdGF0ZSkpOwogfQogCiBQ
YXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpj
cmVhdGVDb29yZGluYXRlZFN1cmZhY2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29vcmRpbmF0ZWRT
dXJmYWNlOjpGbGFncyBmbGFncykKQEAgLTU1NCw3MyArMzg0LDE0IEBAIFBhc3NSZWZQdHI8Q29v
cmRpbmF0ZWRTdXJmYWNlPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUNvb3JkaW5h
dGVkU3VyZmFjCiAgICAgcmV0dXJuIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKHNpemUs
IGZsYWdzKTsKIH0KIAotZmxvYXQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXZpY2VTY2Fs
ZUZhY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS0+ZGV2aWNlU2NhbGVGYWN0
b3IoKTsKLX0KLQotZmxvYXQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwYWdlU2NhbGVGYWN0
b3IoKSBjb25zdAotewotICAgIHJldHVybiBtX3dlYlBhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpOwot
fQotCiBib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygp
CiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5h
dGVkU3VyZmFjZT4gY29vcmRpbmF0ZWRTdXJmYWNlKQotewotICAgIG1fc3RhdGUudXBkYXRlQXRs
YXNlc1RvQ3JlYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihhdGxhc0lELCBjb29yZGluYXRlZFN1
cmZhY2UpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZVVwZGF0
ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCi17Ci0gICAgaWYgKG1faXNQdXJnaW5nKQotICAgICAg
ICByZXR1cm47Ci0gICAgbV9zdGF0ZS51cGRhdGVBdGxhc2VzVG9SZW1vdmUuYXBwZW5kKGF0bGFz
SUQpOwotfQotCi1XZWJDb3JlOjpGbG9hdFJlY3QgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp2
aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV92aXNpYmxlQ29udGVu
dHNSZWN0OwotfQotCi1Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6bWFpbkNvbnRlbnRzTGF5ZXIoKQotewotICAgIGlmICghbV9yb290Q29tcG9zaXRp
bmdMYXllcikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gdG9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIobV9yb290Q29tcG9zaXRpbmdMYXllciktPmZpbmRGaXJzdERlc2NlbmRhbnRX
aXRoQ29udGVudHNSZWN1cnNpdmVseSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCi17Ci0gICAgLy8gQSB6ZXJvIHRyYWplY3Rv
cnlWZWN0b3IgaW5kaWNhdGVzIHRoYXQgdGlsZXMgYWxsIGFyb3VuZCB0aGUgdmlld3BvcnQgYXJl
IHJlcXVlc3RlZC4KLSAgICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBjb250ZW50c0xh
eWVyID0gbWFpbkNvbnRlbnRzTGF5ZXIoKSkKLSAgICAgICAgY29udGVudHNMYXllci0+c2V0Vmlz
aWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKTsKLQotICAg
IGJvb2wgY29udGVudHNSZWN0RGlkQ2hhbmdlID0gcmVjdCAhPSBtX3Zpc2libGVDb250ZW50c1Jl
Y3Q7Ci0gICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSkgewotICAgICAgICBtX3Zpc2libGVD
b250ZW50c1JlY3QgPSByZWN0OwotCi0gICAgICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBt
X3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7Ci0gICAgICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAgICAgaXQtPnZhbHVlLT5zZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgaWYgKG1fd2Vi
UGFnZS0+dXNlRml4ZWRMYXlvdXQoKSkgewotICAgICAgICAvLyBSb3VuZCB0aGUgcmVjdCBpbnN0
ZWFkIG9mIGVuY2xvc2luZyBpdCB0byBtYWtlIHN1cmUgdGhhdCBpdHMgc2l6ZSBzdGF5cwotICAg
ICAgICAvLyB0aGUgc2FtZSB3aGlsZSBwYW5uaW5nLiBUaGlzIGNhbiBoYXZlIG5hc3R5IGVmZmVj
dHMgb24gbGF5b3V0LgotICAgICAgICBtX3dlYlBhZ2UtPnNldEZpeGVkVmlzaWJsZUNvbnRlbnRS
ZWN0KHJvdW5kZWRJbnRSZWN0KHJlY3QpKTsKLSAgICB9Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKQogewotICAgIG1f
cm9vdExheWVyLT5kZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKKyAgICBtX2Nvb3Jk
aW5hdG9yLT5kZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKICAgICBpZiAobV9wYWdl
T3ZlcmxheUxheWVyKQogICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPmRldmljZU9yUGFnZVNj
YWxlRmFjdG9yQ2hhbmdlZCgpOwogfQpAQCAtNjMxLDEzICs0MDIsMTMgQEAgdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OnBhZ2VCYWNrZ3JvdW5kVHJhbnNwYXJlbmN5Q2hhbmdlZCgpCiAK
IEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmdyYXBoaWNz
TGF5ZXJGYWN0b3J5KCkKIHsKLSAgICByZXR1cm4gdGhpczsKKyAgICByZXR1cm4gbV9jb29yZGlu
YXRvci5nZXQoKTsKIH0KIAogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKIHZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZUFuaW1hdGlvbigpCiB7Ci0gICAg
aWYgKG1fd2FpdGluZ0ZvclVJUHJvY2VzcykKKyAgICBpZiAobV9jb29yZGluYXRvci0+aXNXYWl0
aW5nRm9yUmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fbGF5ZXJGbHVz
aFRpbWVyLmlzQWN0aXZlKCkpCkBAIC02NTAsNzYgKzQyMSw2IEBAIHZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpzY2hlZHVsZUFuaW1hdGlvbigpCiB9CiAjZW5kaWYKIAotdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZSgpCi17Ci0gICAgbV93YWl0aW5n
Rm9yVUlQcm9jZXNzID0gZmFsc2U7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkKLSAgICAg
ICAgbV91cGRhdGVBdGxhc2VzW2ldLT5kaWRTd2FwQnVmZmVycygpOwotfQotCi12b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKLXsKLSAgICBUZW1wb3Jh
cnlDaGFuZ2U8Ym9vbD4gcHVyZ2luZ1RvZ2dsZShtX2lzUHVyZ2luZywgdHJ1ZSk7Ci0KLSAgICBM
YXllck1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOwotICAgIGZv
ciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnZhbHVlLT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsK
LQotICAgIG1faW1hZ2VCYWNraW5ncy5jbGVhcigpOwotICAgIG1fdXBkYXRlQXRsYXNlcy5jbGVh
cigpOwotfQotCi1ib29sIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGFpbnRUb1N1cmZhY2Uo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyBmbGFncywgdWlu
dDMyX3QmIGF0bGFzSUQsIEludFBvaW50JiBvZmZzZXQsIENvb3JkaW5hdGVkU3VyZmFjZTo6Q2xp
ZW50KiBjbGllbnQpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdXBkYXRlQXRs
YXNlcy5zaXplKCk7ICsraSkgewotICAgICAgICBVcGRhdGVBdGxhcyogYXRsYXMgPSBtX3VwZGF0
ZUF0bGFzZXNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmIChhdGxhcy0+c3VwcG9ydHNBbHBoYSgpID09
IChmbGFncyAmIENvb3JkaW5hdGVkU3VyZmFjZTo6U3VwcG9ydHNBbHBoYSkpIHsKLSAgICAgICAg
ICAgIC8vIFRoaXMgd2lsbCBmYWxzZSBpZiB0aGVyZSBpcyBubyBhdmFpbGFibGUgYnVmZmVyIHNw
YWNlLgotICAgICAgICAgICAgaWYgKGF0bGFzLT5wYWludE9uQXZhaWxhYmxlQnVmZmVyKHNpemUs
IGF0bGFzSUQsIG9mZnNldCwgY2xpZW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBpbnQgU2NyYXRjaEJ1ZmZlckRp
bWVuc2lvbiA9IDEwMjQ7IC8vIFNob3VsZCBiZSBhIHBvd2VyIG9mIHR3by4KLSAgICBtX3VwZGF0
ZUF0bGFzZXMuYXBwZW5kKGFkb3B0UHRyKG5ldyBVcGRhdGVBdGxhcyh0aGlzLCBTY3JhdGNoQnVm
ZmVyRGltZW5zaW9uLCBmbGFncykpKTsKLSAgICBzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFz
ZXMoKTsKLSAgICByZXR1cm4gbV91cGRhdGVBdGxhc2VzLmxhc3QoKS0+cGFpbnRPbkF2YWlsYWJs
ZUJ1ZmZlcihzaXplLCBhdGxhc0lELCBvZmZzZXQsIGNsaWVudCk7Ci19Ci0KLWNvbnN0IGRvdWJs
ZSBSZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJJbnRlcnZhbCA9IDAuNTsKLQotdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpCi17
Ci0gICAgaWYgKCFtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5pc0FjdGl2ZSgpKQotICAg
ICAgICBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5zdGFydFJlcGVhdGluZyhSZWxlYXNl
SW5hY3RpdmVBdGxhc2VzVGltZXJJbnRlcnZhbCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpyZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJGaXJlZChUaW1lcjxDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q+KikKLXsKLSAgICAvLyBXZSBhbHdheXMgd2FudCB0byBrZWVwIG9u
ZSBhdGxhcyBmb3Igbm9uLWNvbXBvc2l0ZWQgY29udGVudC4KLSAgICBPd25QdHI8VXBkYXRlQXRs
YXM+IGF0bGFzVG9LZWVwQW55d2F5OwotICAgIGJvb2wgZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNv
bXBvc2l0ZWRDb250ZW50ID0gZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9IG1fdXBkYXRlQXRsYXNl
cy5zaXplKCkgLSAxOyAgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgVXBkYXRlQXRsYXMqIGF0bGFz
ID0gbV91cGRhdGVBdGxhc2VzW2ldLmdldCgpOwotICAgICAgICBpZiAoIWF0bGFzLT5pc0luVXNl
KCkpCi0gICAgICAgICAgICBhdGxhcy0+YWRkVGltZUluYWN0aXZlKFJlbGVhc2VJbmFjdGl2ZUF0
bGFzZXNUaW1lckludGVydmFsKTsKLSAgICAgICAgYm9vbCB1c2FibGVGb3JOb25Db21wb3NpdGVk
Q29udGVudCA9ICFhdGxhcy0+c3VwcG9ydHNBbHBoYSgpOwotICAgICAgICBpZiAoYXRsYXMtPmlz
SW5hY3RpdmUoKSkgewotICAgICAgICAgICAgaWYgKCFmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29t
cG9zaXRlZENvbnRlbnQgJiYgIWF0bGFzVG9LZWVwQW55d2F5ICYmIHVzYWJsZUZvck5vbkNvbXBv
c2l0ZWRDb250ZW50KQotICAgICAgICAgICAgICAgIGF0bGFzVG9LZWVwQW55d2F5ID0gbV91cGRh
dGVBdGxhc2VzW2ldLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1fdXBkYXRlQXRsYXNlcy5yZW1v
dmUoaSk7Ci0gICAgICAgIH0gZWxzZSBpZiAodXNhYmxlRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQp
Ci0gICAgICAgICAgICBmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgPSB0
cnVlOwotICAgIH0KLQotICAgIGlmICghZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRD
b250ZW50ICYmIGF0bGFzVG9LZWVwQW55d2F5KQotICAgICAgICBtX3VwZGF0ZUF0bGFzZXMuYXBw
ZW5kKGF0bGFzVG9LZWVwQW55d2F5LnJlbGVhc2UoKSk7Ci0KLSAgICBpZiAobV91cGRhdGVBdGxh
c2VzLnNpemUoKSA8PSAxKQotICAgICAgICBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5z
dG9wKCk7Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRCYWNrZ3JvdW5k
Q29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQogewogICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldEJhY2tncm91bmRD
b2xvcihjb2xvcikpOwpAQCAtNzI3LDExICs0MjgsNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikK
IAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNvbW1pdFNjcm9sbE9mZnNldCh1aW50
MzJfdCBsYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBvZmZzZXQpCiB7Ci0gICAgTGF5
ZXJNYXA6Oml0ZXJhdG9yIGkgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZmluZChsYXllcklEKTsKLSAg
ICBpZiAoaSA9PSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGktPnZhbHVlLT5jb21taXRTY3JvbGxPZmZzZXQob2Zmc2V0KTsKKyAgICBtX2Nvb3JkaW5h
dG9yLT5jb21taXRTY3JvbGxPZmZzZXQobGF5ZXJJRCwgb2Zmc2V0KTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDE0MTRmNDNlOGZiNjc1MmFhNzllOTBkZDM0MmZmYjEy
Y2M3ZjNmZTIuLmZkOTU2NGUwOWU5YTI2ODBiMTFiNjdhMDQ3MmE2Yjc4NjA1NTk3YWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dC5oCkBAIC0yNSwxMyArMjUsOCBAQAogCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgog
I2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUg
PFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9D
b29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9HcmFwaGljc0xheWVyRmFjdG9yeS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVXBkYXRl
QXRsYXMuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKICNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpCkBAIC00NiwxMSArNDEsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViUGFn
ZTsKIAotY2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IDogcHVibGljIExheWVyVHJlZUhv
c3QsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQKLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpDb29y
ZGluYXRlZEltYWdlQmFja2luZzo6Q2xpZW50Ci0gICAgLCBwdWJsaWMgV2ViQ29yZTo6VXBkYXRl
QXRsYXM6OkNsaWVudAotICAgICwgcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5
CitjbGFzcyBDb29yZGluYXRlZExheWVyVHJlZUhvc3QgOiBwdWJsaWMgTGF5ZXJUcmVlSG9zdCwg
cHVibGljIFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudAogI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKICAgICAsIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudAog
I2VuZGlmCkBAIC04NCw5ICs3NSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGV2aWNl
T3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHBh
Z2VCYWNrZ3JvdW5kVHJhbnNwYXJlbmN5Q2hhbmdlZCgpIE9WRVJSSURFOwogCi0gICAgdmlydHVh
bCB2b2lkIHJlbmRlck5leHRGcmFtZSgpOwotICAgIHZpcnR1YWwgdm9pZCBwdXJnZUJhY2tpbmdT
dG9yZXMoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CiAgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJ
UEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpOwogICAgIHZpcnR1YWwg
V2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgT1ZF
UlJJREU7CiAgICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBtYWluQ29udGVu
dHNMYXllcigpOwpAQCAtOTgsNjAgKzg2LDM0IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZT4gY3JlYXRlQ29vcmRpbmF0ZWRTdXJm
YWNlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U6
OkZsYWdzKTsKIAotICAgIHZvaWQgY29tbWl0U2Nyb2xsT2Zmc2V0KHVpbnQzMl90IGxheWVySUQs
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG9mZnNldCk7Ci0KIHByb3RlY3RlZDoKICAgICBleHBs
aWNpdCBDb29yZGluYXRlZExheWVyVHJlZUhvc3QoV2ViUGFnZSopOwogCiBwcml2YXRlOgotICAg
IC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9u
U3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpOwotICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsK
LSAgICB2aXJ0dWFsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IoKSBjb25zdCBPVkVSUklERTsKLQotICAg
IC8vIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgY3Jl
YXRlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZh
Y2U+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50
cyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQpIE9WRVJSSURFOwotCi0gICAgdm9pZCBmbHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFu
Z2VzKCk7Ci0KLSAgICAvLyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKLSAgICB2aXJ0
dWFsIGJvb2wgaXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJu
IG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlczsgfQotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRS
ZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
V2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVl
ZGVkKFdlYkNvcmU6OkltYWdlKikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaExh
eWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopOwotICAgIHZpcnR1YWwgYm9v
bCBwYWludFRvU3VyZmFjZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViQ29yZTo6Q29vcmRp
bmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMyX3QmIC8qIGF0bGFzSUQgKi8sIFdlYkNvcmU6Oklu
dFBvaW50JiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpDbGllbnQqKSBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXll
cklELCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOwotCi0gICAgLy8g
VXBkYXRlQXRsYXM6OkNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1
aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZT4p
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBh
dGxhc0lEKSBPVkVSUklERTsKLQotICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5Ci0gICAgdmly
dHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdyYXBoaWNzTGF5
ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCopIE9WRVJSSURFOwotCiAgICAgLy8gQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0Ci0gICAgdm9pZCBpbml0aWFsaXplUm9vdENvbXBvc2l0aW5n
TGF5ZXJJZk5lZWRlZCgpOwogICAgIHZvaWQgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOwogICAg
IHZvaWQgZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsKLSAgICBib29sIGZsdXNoUGVuZGluZ0xh
eWVyQ2hhbmdlcygpOwotICAgIHZvaWQgY2xlYXJQZW5kaW5nU3RhdGVDaGFuZ2VzKCk7CiAgICAg
dm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOwogICAgIHZvaWQgcGVyZm9ybVNjaGVkdWxl
ZExheWVyRmx1c2goKTsKLSAgICB2b2lkIGRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7
CiAgICAgdm9pZCBzeW5jRGlzcGxheVN0YXRlKCk7Ci0gICAgdm9pZCBsYXllckZsdXNoVGltZXJG
aXJlZChXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+Kik7CisgICAgdm9p
ZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIHJlbmRlck5leHRGcmFtZSgpOworICAg
IHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisgICAgdm9pZCBjb21taXRTY3JvbGxPZmZzZXQo
dWludDMyX3QgbGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgb2Zmc2V0KTsKIAotICAg
IHZvaWQgc2NoZWR1bGVSZWxlYXNlSW5hY3RpdmVBdGxhc2VzKCk7CisgICAgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9jb29yZGluYXRvci0+cm9vdExheWVy
KCk7IH0KIAotICAgIHZvaWQgcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQoV2ViQ29y
ZTo6VGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiopOworICAgIHZvaWQgbGF5ZXJGbHVz
aFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiopOwor
CisgICAgLy8gQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q2xpZW50CisgICAgdmlydHVhbCB2b2lk
IGRpZEZsdXNoUm9vdExheWVyKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHdpbGxTeW5j
TGF5ZXJTdGF0ZShXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKCkgT1ZFUlJJREUgeyBz
Y2hlZHVsZUxheWVyRmx1c2goKTsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0U2NlbmVTdGF0
ZShXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
LCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlw
UmVjdCkgT1ZFUlJJREU7CiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgdm9pZCBwcmVw
YXJlQ3VzdG9tRmlsdGVyUHJveGllc0lmTmVlZGVkKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllclN0YXRlJik7CisgICAgdm9pZCBwcmVwYXJlQ3VzdG9tRmlsdGVyUHJveGllc0ZvckFu
aW1hdGlvbnMoV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKIAogICAgIC8vIFdl
YkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudAogICAgIHZvaWQgcmVtb3ZlQ3VzdG9tRmls
dGVyUHJvZ3JhbVByb3h5KFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSopOwpAQCAtMTYwLDQz
ICsxMjIsMjUgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpc2Nvbm5lY3RDdXN0b21GaWx0ZXJQcm9n
cmFtcygpOwogI2VuZGlmCiAKLSAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9y
b290TGF5ZXI7Ci0gICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbV9yb290Q29tcG9zaXRpbmdM
YXllcjsKKyAgICBPd25QdHI8V2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcj4gbV9jb29y
ZGluYXRvcjsKIAogICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUgbnVsbCBp
ZiB0aGVyZSdzIG5vIHBhZ2Ugb3ZlcmxheS4KICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NM
YXllcj4gbV9wYWdlT3ZlcmxheUxheWVyOwogICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gbV9wYWdl
T3ZlcmxheTsKIAotICAgIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSBtX3N0YXRl
OwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj4gTGF5ZXJNYXA7Ci0gICAgTGF5ZXJNYXAg
bV9yZWdpc3RlcmVkTGF5ZXJzOwotICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJDb3JlOjpDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lELCBSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmc+ID4gSW1hZ2VCYWNraW5nTWFwOwotICAgIEltYWdlQmFja2luZ01hcCBtX2ltYWdlQmFja2lu
Z3M7Ci0gICAgVmVjdG9yPE93blB0cjxXZWJDb3JlOjpVcGRhdGVBdGxhcz4gPiBtX3VwZGF0ZUF0
bGFzZXM7Ci0KICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAgICAgSGFzaFNldDxXZWJDdXN0b21G
aWx0ZXJQcm9ncmFtUHJveHkqPiBtX2N1c3RvbUZpbHRlclByb2dyYW1zOwogI2VuZGlmCiAKICAg
ICBib29sIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOwogICAgIGJvb2wgbV9pc1Zh
bGlkOwotICAgIC8vIFdlIGRvbid0IHNlbmQgdGhlIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gcmVsZWFz
aW5nIHJlc291cmNlcyB0byBVSSBQcm9jZXNzIGR1cmluZyBwdXJnaW5nLCBiZWNhdXNlIFVJIFBy
b2Nlc3MgYWxyZWFkeSBoYWQgcmVtb3ZlZCBhbGwgcmVzb3VyY2VzLgotICAgIGJvb2wgbV9pc1B1
cmdpbmc7Ci0gICAgYm9vbCBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXM7Ci0KLSAgICBib29sIG1f
d2FpdGluZ0ZvclVJUHJvY2VzczsKICAgICBib29sIG1faXNTdXNwZW5kZWQ7Ci0gICAgV2ViQ29y
ZTo6RmxvYXRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKIAogICAgIExheWVyVHJlZUNvbnRl
eHQgbV9sYXllclRyZWVDb250ZXh0OwotICAgIGJvb2wgbV9zaG91bGRTeW5jRnJhbWU7Ci0gICAg
Ym9vbCBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcjsKKwogICAgIFdlYkNvcmU6
OlRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4gbV9sYXllckZsdXNoVGltZXI7Ci0gICAg
V2ViQ29yZTo6VGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiBtX3JlbGVhc2VJbmFjdGl2
ZUF0bGFzZXNUaW1lcjsKICAgICBib29sIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkOwog
ICAgIHVpbnQ2NF90IG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEOwotICAgIGJvb2wgbV9h
bmltYXRpb25zTG9ja2VkOwogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQog
ICAgIGRvdWJsZSBtX2xhc3RBbmltYXRpb25TZXJ2aWNlVGltZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDkwYmJiOTQxZDFh
YjA1NjgxZjk2YTIxNDAyY2Y5MzQ4MWIzMjc3N2QuLjJmYWQyZDEzY2YyNWQ4MzZlY2ZhYmEzYWJm
ZTZhZjg5ODAyNDBhMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9MYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0xheWVyVHJlZUhvc3QuaApAQCAtODcsOSArODcsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYpIHsgfQogCiAj
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxl
Q29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0IC8qIHNjYWxlICov
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHJlbmRl
ck5leHRGcmFtZSgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdE1l
c3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJikgPSAw
OwogI2VuZGlmCiAK
</data>
<flag name="commit-queue"
          id="225530"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204029</attachid>
            <date>2013-06-07 05:23:47 -0700</date>
            <delta_ts>2013-06-26 05:02:48 -0700</delta_ts>
            <desc>Fixed typo</desc>
            <filename>bug-104360-20130607212213.patch</filename>
            <type>text/plain</type>
            <size>63995</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxMzA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDI0MjRkMmY2YzA3MjNm
YzA5YTQzZDdjOTNhNjdkYjI2YTc0ZGVlOS4uYmM0NmI5MzY2YzJjYjkwZjQzMDUyMzk3ZmRiZmIy
NDdkMDRkNmRmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDEzLTAzLTEzICBHd2Fu
ZyBZb29uIEh3YW5nICA8cnl1bWllbEBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGlu
YXRlZCBHcmFwaGljczogU2VwYXJhdGUgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGludG8gQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0IGFuZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQzNjAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0IGhhcyB0b28gbWFueSByZXNwb25zaWJpbGl0aWVzLiBJdAorICAgICAgICBp
bXBsZW1lbnRzIExheWVyVHJlZUhvc3QsIEdyYXBoaWNzTGF5ZXJDbGllbnQsCisgICAgICAgIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNs
aWVudCwKKyAgICAgICAgVXBkYXRlQXRsYXM6OkNsaWVudCwgR3JhcGhpY3NMYXllckZhY3Rvcnkg
YW5kCisgICAgICAgIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudC4KKworICAgICAg
ICBUaGlzIHJlZmFjdG9yaW5nIHJlZHVjZXMgdGhlIHJlc3BvbnNpYmlsaXRpZXMgb2YgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5l
dyBjbGFzcyBjYWxsZWQgQ29tcG9zaXRpbmdDb29yZGluYXRvciwgd2hpY2gKKyAgICAgICAgdGFr
ZXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIG1hbmFnaW5nIGNvbXBvc2l0aW5nIHJlc291cmNlcyBp
bgorICAgICAgICBXZWJQcm9jZXNzLgorCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dCBub3cgdGFrZXMgYSBwYXJ0IGZvciBzY2hlZHVsaW5nIGFuZCBJUEMKKyAgICAgICAgc3BlY2lm
aWMgcGFydHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRl
c3RzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVGFyZ2V0LnByaToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRp
bmdDb29yZGluYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdD
b29yZGluYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6On5Db21wb3NpdGluZ0Nvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2l6ZURpZENoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpmbHVzaFBlbmRpbmdM
YXllckNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6
Y2xlYXJQZW5kaW5nU3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OmluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZVJvb3RMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzeW5jTGF5ZXJTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVJbWFn
ZUJhY2tpbmdJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpjcmVhdGVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdD
b29yZGluYXRvcjo6dXBkYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVtb3ZlSW1hZ2VCYWNraW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0ltYWdl
QmFja2luZ0NoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRv
cjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpub3RpZnlGbHVzaFJlcXVpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OnBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlR3JhcGhpY3NMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXZpY2VTY2FsZUZhY3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpwYWdlU2NhbGVGYWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlVXBkYXRlQXRs
YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVtb3ZlVXBk
YXRlQXRsYXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6dmlz
aWJsZUNvbnRlbnRzUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjptYWluQ29udGVudHNMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjb21taXRTY3JvbGxPZmZz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVuZGVyTmV4
dEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnB1cmdl
QmFja2luZ1N0b3Jlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
OjpwYWludFRvU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3Np
dGluZ0Nvb3JkaW5hdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdD
b29yZGluYXRvcjo6Y2xlYXJSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRp
bmdDb29yZGluYXRvcjo6cm9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OnN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OmlzV2FpdGluZ0ZvclJlbmRlcmVyKToKKwogMjAxMy0wNi0wNiAgSmVyIE5vYmxlICA8
amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXN0cmljdCBXZWJBdWRpbyBmcm9tIHBs
YXlpbmcgd2hlbiBkaXNhbGxvd2VkIGJ5IHBhZ2UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMDlhOGY4NjJkOWQ0
MDc3OTEyNjRjODYyMTllOTYwZDgyNzlkODI2NC4uN2ZlZTlmMGRhNzVkZTY4MGRjM2Q1YTQxZGMx
ZTIwZGVlYzM2OTRlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDEzLTAzLTEzICBH
d2FuZyBZb29uIEh3YW5nICA8cnl1bWllbEBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29y
ZGluYXRlZCBHcmFwaGljczogU2VwYXJhdGUgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGludG8g
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGFuZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQzNjAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0IGhhcyB0b28gbWFueSByZXNwb25zaWJpbGl0aWVzLiBJdAorICAgICAg
ICBpbXBsZW1lbnRzIExheWVyVHJlZUhvc3QsIEdyYXBoaWNzTGF5ZXJDbGllbnQsCisgICAgICAg
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6
OkNsaWVudCwKKyAgICAgICAgVXBkYXRlQXRsYXM6OkNsaWVudCwgR3JhcGhpY3NMYXllckZhY3Rv
cnkgYW5kCisgICAgICAgIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudC4KKworICAg
ICAgICBUaGlzIHJlZmFjdG9yaW5nIHJlZHVjZXMgdGhlIHJlc3BvbnNpYmlsaXRpZXMgb2YgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBh
IG5ldyBjbGFzcyBjYWxsZWQgQ29tcG9zaXRpbmdDb29yZGluYXRvciwgd2hpY2gKKyAgICAgICAg
dGFrZXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIG1hbmFnaW5nIGNvbXBvc2l0aW5nIHJlc291cmNl
cyBpbgorICAgICAgICBXZWJQcm9jZXNzLgorCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdCBub3cgdGFrZXMgYSBwYXJ0IGZvciBzY2hlZHVsaW5nIGFuZCBJUEMKKyAgICAgICAgc3Bl
Y2lmaWMgcGFydHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBjb3ZlcmVkIGJ5IGV4aXN0aW5n
IHRlc3RzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0Ojp+Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KToKKyAgICAgICAg
KFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3QpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFJvb3RD
b21wb3NpdGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0Ojpmb3JjZVJlcGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OnNpemVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnNldFZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6
OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cHVyZ2VCYWNraW5nU3RvcmVzKToKKyAgICAgICAg
KFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp3aWxsU3luY0xheWVyU3RhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnByZXBhcmVDdXN0b21G
aWx0ZXJQcm94aWVzRm9yQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6Y2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyk6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJv
Z3JhbVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpk
aWRGbHVzaFJvb3RMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIpOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyk6Cisg
ICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y29tbWl0U2NlbmVTdGF0
ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGV2aWNlT3JQ
YWdlU2NhbGVGYWN0b3JDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpncmFwaGljc0xheWVyRmFjdG9yeSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVBbmltYXRpb24pOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNvbW1pdFNjcm9sbE9mZnNldCk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0Lmg6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
cm9vdExheWVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5o
OgorCiAyMDEzLTA2LTA2ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAg
ICAgQ29tcGxldGVseSBpbml0aWFsaXplIENoaWxkUHJvY2VzcyBzdGF0ZSBvbiBsYXVuY2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKaW5kZXggOGU4MzczNTljOTM1NjZkYzU1NmE0ZTNmMjg3OWNjNmI3OTcy
MWVmZC4uNWY2ZmNhZDgzNWQxMWNmOTA3NzFlMDNiYWNiMGI1N2I5M2U2YWRkMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKQEAgLTE5NjYsNiArMTk2Niw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKIAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmNwcAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5h
dG9yLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEJhY2tpbmdTdG9yZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aQppbmRleCAwYjRhNGZkOWQwNmRkZDg1M2YyMDZjMTUyYjA3ZGMwMmMyZjJhNjc5Li44MzU0ZWYz
NDg4ZTYzZmI1OWZiMWEyYzRlMWViYzQwNjA1MDg1ZjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTQxNDAs
NiArNDE0MCw3IEBAIHVzZT8oM0RfR1JBUEhJQ1MpIHsKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmggXAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5oIFwKKyAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3Iu
aCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEJhY2tpbmdTdG9yZS5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmggXAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRDdXN0b21GaWx0
ZXJQcm9ncmFtLmggXApAQCAtNDE3NSw2ICs0MTc2LDcgQEAgdXNlPygzRF9HUkFQSElDUykgewog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBcCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bS5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJl
YUFsbG9jYXRvci5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwIFwKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllci5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdD
b29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Y29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjc5NWIy
MTY3ZTg5OThmZGRmOGRiNWUxZjgyZGY4ODQ5ODI0NjA5ZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3Np
dGluZ0Nvb3JkaW5hdG9yLmNwcApAQCAtMCwwICsxLDQxNSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQorI2luY2x1ZGUgIkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaCIKKworI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8Q29tcG9zaXRpbmdDb29yZGlu
YXRvcj4gQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlKFBhZ2UqIHBhZ2UsIENvbXBvc2l0
aW5nQ29vcmRpbmF0b3I6OkNsaWVudCogY2xpZW50KQoreworICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgQ29tcG9zaXRpbmdDb29yZGluYXRvcihwYWdlLCBjbGllbnQpKTsKK30KKworQ29tcG9zaXRp
bmdDb29yZGluYXRvcjo6fkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IoKQoreworICAgIHB1cmdlQmFj
a2luZ1N0b3JlcygpOworCisgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcmVnaXN0ZXJl
ZExheWVycy5lbmQoKTsKKyAgICBmb3IgKExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fcmVnaXN0
ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGl0LT52YWx1ZS0+
c2V0Q29vcmRpbmF0b3IoMCk7Cit9CisKK0NvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNvbXBvc2l0
aW5nQ29vcmRpbmF0b3IoUGFnZSogcGFnZSwgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q2xpZW50
KiBjbGllbnQpCisgICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAg
ICAsIG1fcm9vdENvbXBvc2l0aW5nTGF5ZXIoMCkKKyAgICAsIG1faXNQdXJnaW5nKGZhbHNlKQor
ICAgICwgbV9pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKGZhbHNlKQorICAgICwgbV9pc1dhaXRpbmdG
b3JSZW5kZXJlcih0cnVlKQorICAgICwgbV9zaG91bGRTeW5jRnJhbWUoZmFsc2UpCisgICAgLCBt
X2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcihmYWxzZSkKKyAgICAsIG1fcmVsZWFz
ZUluYWN0aXZlQXRsYXNlc1RpbWVyKHRoaXMsICZDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZWxl
YXNlSW5hY3RpdmVBdGxhc2VzVGltZXJGaXJlZCkKK3sKKyAgICBtX3BhZ2UtPnNldHRpbmdzKCkt
PnNldEFwcGx5RGV2aWNlU2NhbGVGYWN0b3JJbkNvbXBvc2l0b3IodHJ1ZSk7CisKKyAgICAvLyBU
aGlzIGlzIGEgdGVtcG9yYXJ5IHdheSB0byBlbmFibGUgdGhpcyBvbmx5IGluIHRoZSBHTCBjYXNl
LCB1bnRpbCBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIgaXMgcmVtb3ZlZC4KKyAgICAvLyBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDg2OQorICAgIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0U2hvdWxkU3VwcG9ydENvbnRlbnRzVGlsaW5nKHRydWUp
OworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNldFJvb3RDb21wb3NpdGluZ0xh
eWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIGlmIChtX3Jvb3RDb21wb3NpdGluZ0xh
eWVyKQorICAgICAgICBtX3Jvb3RDb21wb3NpdGluZ0xheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7
CisKKyAgICBtX3Jvb3RDb21wb3NpdGluZ0xheWVyID0gbGF5ZXI7CisgICAgaWYgKG1fcm9vdENv
bXBvc2l0aW5nTGF5ZXIpCisgICAgICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZEF0SW5kZXgobV9y
b290Q29tcG9zaXRpbmdMYXllciwgMCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRv
cjo6c2l6ZURpZENoYW5nZShjb25zdCBJbnRTaXplJiBuZXdTaXplKQoreworICAgIG1fcm9vdExh
eWVyLT5zZXRTaXplKG5ld1NpemUpOworICAgIG1fY2xpZW50LT5ub3RpZnlGbHVzaFJlcXVpcmVk
KCk7Cit9CisKK2Jvb2wgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJD
aGFuZ2VzKCkKK3sKKyAgICBpZiAobV9pc1dhaXRpbmdGb3JSZW5kZXJlcikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IHByb3RlY3RvcihtX2lzRmx1
c2hpbmdMYXllckNoYW5nZXMsIHRydWUpOworCisgICAgaW5pdGlhbGl6ZVJvb3RDb21wb3NpdGlu
Z0xheWVySWZOZWVkZWQoKTsKKworICAgIG1fcm9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3Rh
dGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgbV9jbGllbnQtPmRpZEZsdXNoUm9vdExheWVyKCk7
CisKKyAgICBib29sIGRpZFN5bmMgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPmZsdXNo
Q29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworCisgICAgdG9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT51cGRhdGVDb250ZW50QnVmZmVyc0lu
Y2x1ZGluZ1N1YkxheWVycygpOworICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9v
dExheWVyLmdldCgpKS0+c3luY1BlbmRpbmdTdGF0ZUNoYW5nZXNJbmNsdWRpbmdTdWJMYXllcnMo
KTsKKworICAgIGZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKTsKKworICAgIGlmICht
X3Nob3VsZFN5bmNGcmFtZSkgeworICAgICAgICBkaWRTeW5jID0gdHJ1ZTsKKworICAgICAgICBp
ZiAobV9yb290Q29tcG9zaXRpbmdMYXllcikgeworICAgICAgICAgICAgbV9zdGF0ZS5jb250ZW50
c1NpemUgPSByb3VuZGVkSW50U2l6ZShtX3Jvb3RDb21wb3NpdGluZ0xheWVyLT5zaXplKCkpOwor
ICAgICAgICAgICAgaWYgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogY29udGVudHNMYXllciA9
IG1haW5Db250ZW50c0xheWVyKCkpCisgICAgICAgICAgICAgICAgbV9zdGF0ZS5jb3ZlcmVkUmVj
dCA9IGNvbnRlbnRzTGF5ZXItPmNvdmVyUmVjdCgpOworICAgICAgICB9CisgICAgICAgIG1fc3Rh
dGUuc2Nyb2xsUG9zaXRpb24gPSBtX3Zpc2libGVDb250ZW50c1JlY3QubG9jYXRpb24oKTsKKwor
ICAgICAgICBtX2NsaWVudC0+Y29tbWl0U2NlbmVTdGF0ZShtX3N0YXRlKTsKKworICAgICAgICBj
bGVhclBlbmRpbmdTdGF0ZUNoYW5nZXMoKTsKKyAgICAgICAgbV9pc1dhaXRpbmdGb3JSZW5kZXJl
ciA9IHRydWU7CisgICAgICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7CisgICAgfQorCisg
ICAgcmV0dXJuIGRpZFN5bmM7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y2xl
YXJQZW5kaW5nU3RhdGVDaGFuZ2VzKCkKK3sKKyAgICBtX3N0YXRlLmxheWVyc1RvQ3JlYXRlLmNs
ZWFyKCk7CisgICAgbV9zdGF0ZS5sYXllcnNUb1VwZGF0ZS5jbGVhcigpOworICAgIG1fc3RhdGUu
bGF5ZXJzVG9SZW1vdmUuY2xlYXIoKTsKKworICAgIG1fc3RhdGUuaW1hZ2VzVG9DcmVhdGUuY2xl
YXIoKTsKKyAgICBtX3N0YXRlLmltYWdlc1RvUmVtb3ZlLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5p
bWFnZXNUb1VwZGF0ZS5jbGVhcigpOworICAgIG1fc3RhdGUuaW1hZ2VzVG9DbGVhci5jbGVhcigp
OworCisgICAgbV9zdGF0ZS51cGRhdGVBdGxhc2VzVG9DcmVhdGUuY2xlYXIoKTsKKyAgICBtX3N0
YXRlLnVwZGF0ZUF0bGFzZXNUb1JlbW92ZS5jbGVhcigpOworCisjaWYgRU5BQkxFKENTU19TSEFE
RVJTKQorICAgIG1fc3RhdGUuY3VzdG9tRmlsdGVyc1RvQ3JlYXRlLmNsZWFyKCk7CisgICAgbV9z
dGF0ZS5jdXN0b21GaWx0ZXJzVG9SZW1vdmUuY2xlYXIoKTsKKyNlbmRpZgorfQorCit2b2lkIENv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OmluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVl
ZGVkKCkKK3sKKyAgICBpZiAobV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXIpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fc3RhdGUucm9vdENvbXBvc2l0aW5nTGF5ZXIgPSB0b0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmlkKCk7CisgICAgbV9k
aWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXIgPSB0cnVlOworICAgIG1fc2hvdWxkU3lu
Y0ZyYW1lID0gdHJ1ZTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVS
b290TGF5ZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBBU1NFUlQoIW1fcm9vdExheWVy
KTsKKyAgICAvLyBDcmVhdGUgYSByb290IGxheWVyLgorICAgIG1fcm9vdExheWVyID0gR3JhcGhp
Y3NMYXllcjo6Y3JlYXRlKHRoaXMsIHRoaXMpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX3Jvb3RM
YXllci0+c2V0TmFtZSgiQ29tcG9zaXRpbmdDb29yZGluYXRvciByb290IGxheWVyIik7CisjZW5k
aWYKKyAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKKyAgICBtX3Jvb3RM
YXllci0+c2V0U2l6ZShzaXplKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpz
eW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllclN0YXRlJiBzdGF0ZSkKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisKKyAg
ICBtX2NsaWVudC0+d2lsbFN5bmNMYXllclN0YXRlKHN0YXRlKTsKKworICAgIG1fc3RhdGUubGF5
ZXJzVG9VcGRhdGUuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGlkLCBzdGF0ZSkpOworfQorCitQYXNz
UmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpj
cmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChJbWFnZSogaW1hZ2UpCit7CisgICAgQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEID0gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmdldENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQoaW1hZ2UpOworICAgIEltYWdlQmFja2luZ01hcDo6aXRl
cmF0b3IgaXQgPSBtX2ltYWdlQmFja2luZ3MuZmluZChpbWFnZUlEKTsKKyAgICBSZWZQdHI8Q29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGltYWdlQmFja2luZzsKKyAgICBpZiAoaXQgPT0gbV9pbWFn
ZUJhY2tpbmdzLmVuZCgpKSB7CisgICAgICAgIGltYWdlQmFja2luZyA9IENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nOjpjcmVhdGUodGhpcywgaW1hZ2UpOworICAgICAgICBtX2ltYWdlQmFja2luZ3Mu
YWRkKGltYWdlSUQsIGltYWdlQmFja2luZyk7CisgICAgfSBlbHNlCisgICAgICAgIGltYWdlQmFj
a2luZyA9IGl0LT52YWx1ZTsKKworICAgIHJldHVybiBpbWFnZUJhY2tpbmc7Cit9CisKK3ZvaWQg
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBtX3N0YXRlLmltYWdlc1RvQ3JlYXRlLmFwcGVu
ZChpbWFnZUlEKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVJbWFn
ZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlELCBQYXNzUmVmUHRyPENv
b3JkaW5hdGVkU3VyZmFjZT4gY29vcmRpbmF0ZWRTdXJmYWNlKQoreworICAgIG1fc2hvdWxkU3lu
Y0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3N0YXRlLmltYWdlc1RvVXBkYXRlLmFwcGVuZChzdGQ6Om1h
a2VfcGFpcihpbWFnZUlELCBjb29yZGluYXRlZFN1cmZhY2UpKTsKK30KKwordm9pZCBDb21wb3Np
dGluZ0Nvb3JkaW5hdG9yOjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Cisg
ICAgbV9zdGF0ZS5pbWFnZXNUb0NsZWFyLmFwcGVuZChpbWFnZUlEKTsKK30KKwordm9pZCBDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yOjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmdJRCBpbWFnZUlEKQoreworICAgIGlmIChtX2lzUHVyZ2luZykKKyAgICAgICAgcmV0dXJu
OworCisgICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFnZUlEKSk7CisgICAg
bV9pbWFnZUJhY2tpbmdzLnJlbW92ZShpbWFnZUlEKTsKKworICAgIG1fc3RhdGUuaW1hZ2VzVG9S
ZW1vdmUuYXBwZW5kKGltYWdlSUQpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6
OmZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKQoreworICAgIEltYWdlQmFja2luZ01h
cDo6aXRlcmF0b3IgZW5kID0gbV9pbWFnZUJhY2tpbmdzLmVuZCgpOworICAgIGZvciAoSW1hZ2VC
YWNraW5nTWFwOjppdGVyYXRvciBpdGVyID0gbV9pbWFnZUJhY2tpbmdzLmJlZ2luKCk7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpCisgICAgICAgIGl0ZXItPnZhbHVlLT51cGRhdGUoKTsKK30KKwordm9p
ZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdy
YXBoaWNzTGF5ZXIqLCBkb3VibGUgLyogdGltZSAqLykKK3sKK30KKwordm9pZCBDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKQor
eworICAgIG1fY2xpZW50LT5ub3RpZnlGbHVzaFJlcXVpcmVkKCk7Cit9CisKKwordm9pZCBDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yOjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdy
YXBoaWNzTGF5ZXIsIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBHcmFwaGljc0xh
eWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCit7CisgICAgbV9jbGll
bnQtPnBhaW50TGF5ZXJDb250ZW50cyhncmFwaGljc0xheWVyLCBncmFwaGljc0NvbnRleHQsIGNs
aXBSZWN0KTsKK30KKworUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yOjpjcmVhdGVHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkK
K3sKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbmV3IENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcihjbGllbnQpOworICAgIGxheWVyLT5zZXRDb29yZGluYXRvcih0aGlzKTsK
KyAgICBtX3JlZ2lzdGVyZWRMYXllcnMuYWRkKGxheWVyLT5pZCgpLCBsYXllcik7CisgICAgbV9z
dGF0ZS5sYXllcnNUb0NyZWF0ZS5hcHBlbmQobGF5ZXItPmlkKCkpOworICAgIGxheWVyLT5zZXRO
ZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOworICAgIG1fY2xpZW50LT5ub3RpZnlGbHVzaFJl
cXVpcmVkKCk7CisgICAgcmV0dXJuIGFkb3B0UHRyKGxheWVyKTsKK30KKworZmxvYXQgQ29tcG9z
aXRpbmdDb29yZGluYXRvcjo6ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdAoreworICAgIHJldHVy
biBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCk7Cit9CisKK2Zsb2F0IENvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OnBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZS0+
cGFnZVNjYWxlRmFjdG9yKCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3Jl
YXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1
cmZhY2U+IGNvb3JkaW5hdGVkU3VyZmFjZSkKK3sKKyAgICBtX3N0YXRlLnVwZGF0ZUF0bGFzZXNU
b0NyZWF0ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoYXRsYXNJRCwgY29vcmRpbmF0ZWRTdXJmYWNl
KSk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVtb3ZlVXBkYXRlQXRsYXMo
dWludDMyX3QgYXRsYXNJRCkKK3sKKyAgICBpZiAobV9pc1B1cmdpbmcpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX3N0YXRlLnVwZGF0ZUF0bGFzZXNUb1JlbW92ZS5hcHBlbmQoYXRsYXNJRCk7Cit9
CisKK0Zsb2F0UmVjdCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp2aXNpYmxlQ29udGVudHNSZWN0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92aXNpYmxlQ29udGVudHNSZWN0OworfQorCitDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIqIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6Om1haW5Db250ZW50
c0xheWVyKCkKK3sKKyAgICBpZiAoIW1fcm9vdENvbXBvc2l0aW5nTGF5ZXIpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgcmV0dXJuIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdENv
bXBvc2l0aW5nTGF5ZXIpLT5maW5kRmlyc3REZXNjZW5kYW50V2l0aENvbnRlbnRzUmVjdXJzaXZl
bHkoKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzZXRWaXNpYmxlQ29udGVu
dHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9y
eVZlY3RvcikKK3sKKyAgICAvLyBBIHplcm8gdHJhamVjdG9yeVZlY3RvciBpbmRpY2F0ZXMgdGhh
dCB0aWxlcyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9ydCBhcmUgcmVxdWVzdGVkLgorICAgIGlmIChD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGNvbnRlbnRzTGF5ZXIgPSBtYWluQ29udGVudHNMYXll
cigpKQorICAgICAgICBjb250ZW50c0xheWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0
b3J5VmVjdG9yKHRyYWplY3RvcnlWZWN0b3IpOworCisgICAgYm9vbCBjb250ZW50c1JlY3REaWRD
aGFuZ2UgPSByZWN0ICE9IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICBpZiAoY29udGVudHNS
ZWN0RGlkQ2hhbmdlKSB7CisgICAgICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7CisK
KyAgICAgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcmVnaXN0ZXJlZExheWVycy5lbmQo
KTsKKyAgICAgICAgZm9yIChMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXll
cnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRO
ZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOworICAgIH0KKworICAgIEZyYW1lVmlldyogdmll
dyA9IG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKyAgICBpZiAodmlldy0+dXNlRml4ZWRM
YXlvdXQoKSkgeworICAgICAgICAvLyBSb3VuZCB0aGUgcmVjdCBpbnN0ZWFkIG9mIGVuY2xvc2lu
ZyBpdCB0byBtYWtlIHN1cmUgdGhhdCBpdHMgc2l6ZSBzdGF5cworICAgICAgICAvLyB0aGUgc2Ft
ZSB3aGlsZSBwYW5uaW5nLiBUaGlzIGNhbiBoYXZlIG5hc3R5IGVmZmVjdHMgb24gbGF5b3V0Lgor
ICAgICAgICB2aWV3LT5zZXRGaXhlZFZpc2libGVDb250ZW50UmVjdChyb3VuZGVkSW50UmVjdChy
ZWN0KSk7CisgICAgfQorfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRldmljZU9y
UGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpCit7CisgICAgbV9yb290TGF5ZXItPmRldmljZU9yUGFn
ZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6
OmRldGFjaExheWVyKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgaWYg
KG1faXNQdXJnaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3JlZ2lzdGVyZWRMYXllcnMu
cmVtb3ZlKGxheWVyLT5pZCgpKTsKKworICAgIHNpemVfdCBpbmRleCA9IG1fc3RhdGUubGF5ZXJz
VG9DcmVhdGUuZmluZChsYXllci0+aWQoKSk7CisgICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKSB7
CisgICAgICAgIG1fc3RhdGUubGF5ZXJzVG9DcmVhdGUucmVtb3ZlKGluZGV4KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG1fc3RhdGUubGF5ZXJzVG9SZW1vdmUuYXBwZW5kKGxheWVy
LT5pZCgpKTsKKyAgICBtX2NsaWVudC0+bm90aWZ5Rmx1c2hSZXF1aXJlZCgpOworfQorCit2b2lk
IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNvbW1pdFNjcm9sbE9mZnNldCh1aW50MzJfdCBsYXll
cklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBvZmZzZXQpCit7CisgICAgTGF5ZXJNYXA6Oml0
ZXJhdG9yIGkgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZmluZChsYXllcklEKTsKKyAgICBpZiAoaSA9
PSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGktPnZh
bHVlLT5jb21taXRTY3JvbGxPZmZzZXQob2Zmc2V0KTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOjpyZW5kZXJOZXh0RnJhbWUoKQoreworICAgIG1faXNXYWl0aW5nRm9yUmVuZGVy
ZXIgPSBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV91cGRhdGVBdGxhc2Vz
LnNpemUoKTsgKytpKQorICAgICAgICBtX3VwZGF0ZUF0bGFzZXNbaV0tPmRpZFN3YXBCdWZmZXJz
KCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cHVyZ2VCYWNraW5nU3RvcmVz
KCkKK3sKKyAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gcHVyZ2luZ1RvZ2dsZShtX2lzUHVyZ2lu
ZywgdHJ1ZSk7CisKKyAgICBMYXllck1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5
ZXJzLmVuZCgpOworICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVk
TGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnZhbHVlLT5wdXJn
ZUJhY2tpbmdTdG9yZXMoKTsKKworICAgIG1faW1hZ2VCYWNraW5ncy5jbGVhcigpOworICAgIG1f
dXBkYXRlQXRsYXNlcy5jbGVhcigpOworfQorCitib29sIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6
OnBhaW50VG9TdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUsIENvb3JkaW5hdGVkU3VyZmFjZTo6
RmxhZ3MgZmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBJbnRQb2ludCYgb2Zmc2V0LCBDb29yZGlu
YXRlZFN1cmZhY2U6OkNsaWVudCogY2xpZW50KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVXBkYXRlQXRsYXMq
IGF0bGFzID0gbV91cGRhdGVBdGxhc2VzW2ldLmdldCgpOworICAgICAgICBpZiAoYXRsYXMtPnN1
cHBvcnRzQWxwaGEoKSA9PSAoZmxhZ3MgJiBDb29yZGluYXRlZFN1cmZhY2U6OlN1cHBvcnRzQWxw
aGEpKSB7CisgICAgICAgICAgICAvLyBUaGlzIHdpbGwgYmUgZmFsc2UgaWYgdGhlcmUgaXMgbm8g
YXZhaWxhYmxlIGJ1ZmZlciBzcGFjZS4KKyAgICAgICAgICAgIGlmIChhdGxhcy0+cGFpbnRPbkF2
YWlsYWJsZUJ1ZmZlcihzaXplLCBhdGxhc0lELCBvZmZzZXQsIGNsaWVudCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3Qg
aW50IFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24gPSAxMDI0OyAvLyBTaG91bGQgYmUgYSBwb3dlciBv
ZiB0d28uCisgICAgbV91cGRhdGVBdGxhc2VzLmFwcGVuZChhZG9wdFB0cihuZXcgVXBkYXRlQXRs
YXModGhpcywgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiwgZmxhZ3MpKSk7CisgICAgc2NoZWR1bGVS
ZWxlYXNlSW5hY3RpdmVBdGxhc2VzKCk7CisgICAgcmV0dXJuIG1fdXBkYXRlQXRsYXNlcy5sYXN0
KCktPnBhaW50T25BdmFpbGFibGVCdWZmZXIoc2l6ZSwgYXRsYXNJRCwgb2Zmc2V0LCBjbGllbnQp
OworfQorCitjb25zdCBkb3VibGUgUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2YWwg
PSAwLjU7CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2NoZWR1bGVSZWxlYXNlSW5h
Y3RpdmVBdGxhc2VzKCkKK3sKKyAgICBpZiAoIW1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVy
LmlzQWN0aXZlKCkpCisgICAgICAgIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyLnN0YXJ0
UmVwZWF0aW5nKFJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckludGVydmFsKTsKK30KKwordm9p
ZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJGaXJl
ZChUaW1lcjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiopCit7CisgICAgLy8gV2UgYWx3YXlzIHdh
bnQgdG8ga2VlcCBvbmUgYXRsYXMgZm9yIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQuCisgICAgT3du
UHRyPFVwZGF0ZUF0bGFzPiBhdGxhc1RvS2VlcEFueXdheTsKKyAgICBib29sIGZvdW5kQWN0aXZl
QXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVudCA9IGZhbHNlOworICAgIGZvciAoaW50IGkgPSBt
X3VwZGF0ZUF0bGFzZXMuc2l6ZSgpIC0gMTsgIGkgPj0gMDsgLS1pKSB7CisgICAgICAgIFVwZGF0
ZUF0bGFzKiBhdGxhcyA9IG1fdXBkYXRlQXRsYXNlc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKCFh
dGxhcy0+aXNJblVzZSgpKQorICAgICAgICAgICAgYXRsYXMtPmFkZFRpbWVJbmFjdGl2ZShSZWxl
YXNlSW5hY3RpdmVBdGxhc2VzVGltZXJJbnRlcnZhbCk7CisgICAgICAgIGJvb2wgdXNhYmxlRm9y
Tm9uQ29tcG9zaXRlZENvbnRlbnQgPSAhYXRsYXMtPnN1cHBvcnRzQWxwaGEoKTsKKyAgICAgICAg
aWYgKGF0bGFzLT5pc0luYWN0aXZlKCkpIHsKKyAgICAgICAgICAgIGlmICghZm91bmRBY3RpdmVB
dGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ICYmICFhdGxhc1RvS2VlcEFueXdheSAmJiB1c2Fi
bGVGb3JOb25Db21wb3NpdGVkQ29udGVudCkKKyAgICAgICAgICAgICAgICBhdGxhc1RvS2VlcEFu
eXdheSA9IG1fdXBkYXRlQXRsYXNlc1tpXS5yZWxlYXNlKCk7CisgICAgICAgICAgICBtX3VwZGF0
ZUF0bGFzZXMucmVtb3ZlKGkpOworICAgICAgICB9IGVsc2UgaWYgKHVzYWJsZUZvck5vbkNvbXBv
c2l0ZWRDb250ZW50KQorICAgICAgICAgICAgZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0
ZWRDb250ZW50ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIWZvdW5kQWN0aXZlQXRsYXNGb3JO
b25Db21wb3NpdGVkQ29udGVudCAmJiBhdGxhc1RvS2VlcEFueXdheSkKKyAgICAgICAgbV91cGRh
dGVBdGxhc2VzLmFwcGVuZChhdGxhc1RvS2VlcEFueXdheS5yZWxlYXNlKCkpOworCisgICAgaWYg
KG1fdXBkYXRlQXRsYXNlcy5zaXplKCkgPD0gMSkKKyAgICAgICAgbV9yZWxlYXNlSW5hY3RpdmVB
dGxhc2VzVGltZXIuc3RvcCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGlu
YXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MzlhZWU2OTQ2MGRhMmFh
MmM1Mzk5MTUyNmY1NWNhZTY2YmI5ZWYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRp
bmF0b3IuaApAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIENvbXBvc2l0aW5nQ29vcmRpbmF0b3JfaAorI2RlZmluZSBDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yX2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUg
IkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhp
Y3NTdGF0ZS5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgiCisjaW5jbHVk
ZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDbGllbnQuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0xheWVyRmFjdG9yeS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNs
dWRlICJUaW1lci5oIgorI2luY2x1ZGUgIlVwZGF0ZUF0bGFzLmgiCisjaW5jbHVkZSA8d3RmL093
blB0ci5oPgorCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorI2luY2x1ZGUgIkZpbHRlck9wZXJh
dGlvbnMuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBhZ2U7Citj
bGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBHcmFwaGljc0xheWVyOworY2xhc3MgQ29vcmRp
bmF0ZWRTdXJmYWNlOworCitjbGFzcyBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yIDogcHVibGljIEdy
YXBoaWNzTGF5ZXJDbGllbnQKKyAgICAsIHB1YmxpYyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJD
bGllbnQKKyAgICAsIHB1YmxpYyBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q2xpZW50CisgICAg
LCBwdWJsaWMgVXBkYXRlQXRsYXM6OkNsaWVudAorICAgICwgcHVibGljIEdyYXBoaWNzTGF5ZXJG
YWN0b3J5IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgY2xhc3MgQ2xpZW50IHsK
KyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGbHVzaFJvb3RMYXllcigpID0g
MDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxTeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXJTdGF0ZSYpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNo
UmVxdWlyZWQoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjb21taXRTY2VuZVN0YXRlKENv
b3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50
TGF5ZXJDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgSW50UmVjdCYgY2xpcFJlY3QpID0gMDsKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NPd25Q
dHI8Q29tcG9zaXRpbmdDb29yZGluYXRvcj4gY3JlYXRlKFBhZ2UqLCBDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yOjpDbGllbnQqKTsKKyAgICB2aXJ0dWFsIH5Db21wb3NpdGluZ0Nvb3JkaW5hdG9yKCk7
CisKKyAgICB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqKTsKKyAg
ICB2b2lkIHNpemVEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSk7CisgICAgdm9pZCBk
ZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKKworICAgIHZvaWQgc2V0VmlzaWJsZUNv
bnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdm9p
ZCByZW5kZXJOZXh0RnJhbWUoKTsKKyAgICB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOworICAg
IHZvaWQgY29tbWl0U2Nyb2xsT2Zmc2V0KHVpbnQzMl90IGxheWVySUQsIGNvbnN0IEludFNpemUm
IG9mZnNldCk7CisKKyAgICB2b2lkIGNyZWF0ZVJvb3RMYXllcihjb25zdCBJbnRTaXplJik7Cisg
ICAgdm9pZCBjbGVhclJvb3RMYXllcigpIHsgbV9yb290TGF5ZXIgPSBudWxscHRyOyB9CisgICAg
R3JhcGhpY3NMYXllciogcm9vdExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0
KCk7IH0KKyAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIG1haW5Db250ZW50c0xheWVyKCk7
CisKKyAgICBib29sIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOworICAgIENvb3JkaW5hdGVk
R3JhcGhpY3NTdGF0ZSYgc3RhdGUoKSB7IHJldHVybiBtX3N0YXRlOyB9CisgICAgYm9vbCBpc1dh
aXRpbmdGb3JSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1faXNXYWl0aW5nRm9yUmVuZGVyZXI7
IH0KKworcHJpdmF0ZToKKyAgICBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yKFBhZ2UqLCBDb21wb3Np
dGluZ0Nvb3JkaW5hdG9yOjpDbGllbnQqKTsKKworICAgIC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQK
KyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBHcmFwaGljc0xh
eWVyKiwgZG91YmxlIHRpbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVz
aFJlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0Jiwg
R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IoKSBjb25zdCBPVkVSUklERTsK
KworICAgIC8vIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDbGllbnQKKyAgICB2aXJ0dWFsIHZv
aWQgY3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmdJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOworCisgICAgLy8gQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyQ2xpZW50CisgICAgdmlydHVhbCBib29sIGlzRmx1c2hpbmdMYXllckNoYW5n
ZXMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXM7IH0K
KyAgICB2aXJ0dWFsIEZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVh
dGVJbWFnZUJhY2tpbmdJZk5lZWRlZChJbWFnZSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBkZXRhY2hMYXllcihDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRUb1N1cmZhY2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYkNv
cmU6OkNvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiAvKiBhdGxhc0lEICovLCBX
ZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZTo6Q2xpZW50Kikg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5
ZXJJRCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKSBPVkVSUklERTsKKworICAgIC8v
IFVwZGF0ZUF0bGFzOjpDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXMo
dWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkg
T1ZFUlJJREU7CisKKyAgICAvLyBHcmFwaGljc0xheWVyRmFjdG9yeQorICAgIHZpcnR1YWwgUGFz
c093blB0cjxHcmFwaGljc0xheWVyPiBjcmVhdGVHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJD
bGllbnQqKSBPVkVSUklERTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xh
eWVySWZOZWVkZWQoKTsKKyAgICB2b2lkIGZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMo
KTsKKyAgICB2b2lkIGNsZWFyUGVuZGluZ1N0YXRlQ2hhbmdlcygpOworCisgICAgdm9pZCBzY2hl
ZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMoKTsKKworICAgIHZvaWQgcmVsZWFzZUluYWN0aXZl
QXRsYXNlc1RpbWVyRmlyZWQoVGltZXI8Q29tcG9zaXRpbmdDb29yZGluYXRvcj4qKTsKKworICAg
IFBhZ2UqIG1fcGFnZTsKKyAgICBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpDbGllbnQqIG1fY2xp
ZW50OworCisgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOworICAgIEdyYXBo
aWNzTGF5ZXIqIG1fcm9vdENvbXBvc2l0aW5nTGF5ZXI7CisKKyAgICBDb29yZGluYXRlZEdyYXBo
aWNzU3RhdGUgbV9zdGF0ZTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxDb29yZGluYXRlZExheWVy
SUQsIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+IExheWVyTWFwOworICAgIExheWVyTWFwIG1f
cmVnaXN0ZXJlZExheWVyczsKKyAgICB0eXBlZGVmIEhhc2hNYXA8Q29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmdJRCwgUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiA+IEltYWdlQmFja2luZ01h
cDsKKyAgICBJbWFnZUJhY2tpbmdNYXAgbV9pbWFnZUJhY2tpbmdzOworICAgIFZlY3RvcjxPd25Q
dHI8VXBkYXRlQXRsYXM+ID4gbV91cGRhdGVBdGxhc2VzOworCisgICAgLy8gV2UgZG9uJ3Qgc2Vu
ZCB0aGUgbWVzc2FnZXMgcmVsYXRlZCB0byByZWxlYXNpbmcgcmVzb3VyY2VzIHRvIHJlbmRlcmVy
IGR1cmluZyBwdXJnaW5nLCBiZWNhdXNlIHJlbmRlcmVyIGFscmVhZHkgaGFkIHJlbW92ZWQgYWxs
IHJlc291cmNlcy4KKyAgICBib29sIG1faXNQdXJnaW5nOworICAgIGJvb2wgbV9pc0ZsdXNoaW5n
TGF5ZXJDaGFuZ2VzOworCisgICAgYm9vbCBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyOworICAgIEZs
b2F0UmVjdCBtX3Zpc2libGVDb250ZW50c1JlY3Q7CisKKyAgICBib29sIG1fc2hvdWxkU3luY0Zy
YW1lOworICAgIGJvb2wgbV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXI7CisgICAg
VGltZXI8Q29tcG9zaXRpbmdDb29yZGluYXRvcj4gbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGlt
ZXI7Cit9OworCit9CisKKyNlbmRpZgorCisjZW5kaWYgLy8gQ29tcG9zaXRpbmdDb29yZGluYXRv
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0LmNwcAppbmRleCAwMzVmYzdmNTJiOTlhZmVhNjAzN2QyODRkODYyZGNkNmQwNGEz
OGYwLi5lOGNiOWQ2NmE4Y2U1N2RkYjNhYWI2NTkwMmY1NzgwOThlZWZhODc2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5j
cHAKQEAgLTQwLDE4ICs0MCw5IEBACiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIK
ICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzU3VyZmFjZS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxh
eWVyQmFja2luZy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0
aW5ncy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU3VyZmFjZVVwZGF0ZUluZm8uaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmg+CiAjaW5jbHVkZSA8d3RmL0N1
cnJlbnRUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgogCiAjaWYgRU5B
QkxFKENTU19TSEFERVJTKQogI2luY2x1ZGUgIkN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0u
aCIKQEAgLTcyLDQ5ICs2MywyNyBAQCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6On5Db29yZGlu
YXRlZExheWVyVHJlZUhvc3QoKQogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICBkaXNjb25u
ZWN0Q3VzdG9tRmlsdGVyUHJvZ3JhbXMoKTsKICNlbmRpZgotICAgIHB1cmdlQmFja2luZ1N0b3Jl
cygpOwotCi0gICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcmVnaXN0ZXJlZExheWVycy5l
bmQoKTsKLSAgICBmb3IgKExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVy
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT52YWx1ZS0+c2V0Q29vcmRp
bmF0b3IoMCk7CiB9CiAKIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0KFdlYlBhZ2UqIHdlYlBhZ2UpCiAgICAgOiBMYXllclRyZWVIb3N0KHdlYlBhZ2Up
Ci0gICAgLCBtX3Jvb3RDb21wb3NpdGluZ0xheWVyKDApCiAgICAgLCBtX25vdGlmeUFmdGVyU2No
ZWR1bGVkTGF5ZXJGbHVzaChmYWxzZSkKICAgICAsIG1faXNWYWxpZCh0cnVlKQotICAgICwgbV9p
c1B1cmdpbmcoZmFsc2UpCi0gICAgLCBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXMoZmFsc2UpCi0g
ICAgLCBtX3dhaXRpbmdGb3JVSVByb2Nlc3ModHJ1ZSkKICAgICAsIG1faXNTdXNwZW5kZWQoZmFs
c2UpCi0gICAgLCBtX3Nob3VsZFN5bmNGcmFtZShmYWxzZSkKLSAgICAsIG1fZGlkSW5pdGlhbGl6
ZVJvb3RDb21wb3NpdGluZ0xheWVyKGZhbHNlKQogICAgICwgbV9sYXllckZsdXNoVGltZXIodGhp
cywgJkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQpCi0gICAg
LCBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lcih0aGlzLCAmQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpyZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJGaXJlZCkKICAgICAsIG1fbGF5ZXJG
bHVzaFNjaGVkdWxpbmdFbmFibGVkKHRydWUpCiAgICAgLCBtX2ZvcmNlUmVwYWludEFzeW5jQ2Fs
bGJhY2tJRCgwKQotICAgICwgbV9hbmltYXRpb25zTG9ja2VkKGZhbHNlKQogI2lmIEVOQUJMRShS
RVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKICAgICAsIG1fbGFzdEFuaW1hdGlvblNlcnZpY2VUaW1l
KDApCiAjZW5kaWYKIHsKLSAgICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCktPnNl
dEFwcGx5RGV2aWNlU2NhbGVGYWN0b3JJbkNvbXBvc2l0b3IodHJ1ZSk7CiAKLSAgICAvLyBDcmVh
dGUgYSByb290IGxheWVyLgotICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRl
KHRoaXMsIHRoaXMpOwotI2lmbmRlZiBOREVCVUcKLSAgICBtX3Jvb3RMYXllci0+c2V0TmFtZSgi
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IHJvb3QgbGF5ZXIiKTsKLSNlbmRpZgotICAgIG1fcm9v
dExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOwotICAgIG1fcm9vdExheWVyLT5zZXRTaXpl
KG1fd2ViUGFnZS0+c2l6ZSgpKTsKLSAgICBtX2xheWVyVHJlZUNvbnRleHQuY29vcmRpbmF0ZWRM
YXllcklEID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5p
ZCgpOworICAgIG1fY29vcmRpbmF0b3IgPSBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGUo
d2ViUGFnZS0+Y29yZVBhZ2UoKSwgdGhpcyk7CiAKLSAgICBDb29yZGluYXRlZFN1cmZhY2U6OnNl
dEZhY3RvcnkoY3JlYXRlQ29vcmRpbmF0ZWRTdXJmYWNlKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5j
cmVhdGVSb290TGF5ZXIobV93ZWJQYWdlLT5zaXplKCkpOworICAgIG1fbGF5ZXJUcmVlQ29udGV4
dC5jb29yZGluYXRlZExheWVySUQgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihyb290TGF5
ZXIoKSktPmlkKCk7CiAKLSAgICAvLyBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdheSB0byBlbmFibGUg
dGhpcyBvbmx5IGluIHRoZSBHTCBjYXNlLCB1bnRpbCBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIg
aXMgcmVtb3ZlZC4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExNDg2OQotICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0U2hvdWxkU3Vw
cG9ydENvbnRlbnRzVGlsaW5nKHRydWUpOworICAgIENvb3JkaW5hdGVkU3VyZmFjZTo6c2V0RmFj
dG9yeShjcmVhdGVDb29yZGluYXRlZFN1cmZhY2UpOwogCiAgICAgaWYgKG1fd2ViUGFnZS0+aGFz
UGFnZU92ZXJsYXkoKSkKICAgICAgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOwpAQCAtMTU4
LDEyICsxMjcsNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0U2hvdWxkTm90
aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sCiAKIHZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKiBncmFwaGljc0xheWVyKQogewotICAgIGlmIChtX3Jvb3RDb21wb3NpdGluZ0xheWVyKQot
ICAgICAgICBtX3Jvb3RDb21wb3NpdGluZ0xheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0KLSAg
ICBtX3Jvb3RDb21wb3NpdGluZ0xheWVyID0gZ3JhcGhpY3NMYXllcjsKLSAgICBpZiAobV9yb290
Q29tcG9zaXRpbmdMYXllcikKLSAgICAgICAgbV9yb290TGF5ZXItPmFkZENoaWxkQXRJbmRleCht
X3Jvb3RDb21wb3NpdGluZ0xheWVyLCAwKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5zZXRSb290Q29t
cG9zaXRpbmdMYXllcihncmFwaGljc0xheWVyKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmludmFsaWRhdGUoKQpAQCAtMTcxLDcgKzEzNSw3IEBAIHZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKCkKICAgICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVz
aCgpOwogCiAgICAgQVNTRVJUKG1faXNWYWxpZCk7Ci0gICAgbV9yb290TGF5ZXIgPSBudWxscHRy
OworICAgIG1fY29vcmRpbmF0b3ItPmNsZWFyUm9vdExheWVyKCk7CiAgICAgbV9pc1ZhbGlkID0g
ZmFsc2U7CiB9CiAKQEAgLTE4NCw3ICsxNDgsNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6Zm9yY2VSZXBhaW50KCkKICAgICAvLyBXZSBuZWVkIHRvIHNjaGVkdWxlIGFub3RoZXIg
Zmx1c2gsIG90aGVyd2lzZSB0aGUgZm9yY2VkIHBhaW50IG1pZ2h0IGNhbmNlbCBhIGxhdGVyIGV4
cGVjdGVkIGZsdXNoLgogICAgIC8vIFRoaXMgaXMgYWxpZ25lZCB3aXRoIExheWVyVHJlZUhvc3RD
QS4KICAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLSAgICBmbHVzaFBlbmRpbmdMYXllckNoYW5n
ZXMoKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5mbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKIH0K
IAogYm9vbCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZvcmNlUmVwYWludEFzeW5jKHVpbnQ2
NF90IGNhbGxiYWNrSUQpCkBAIC0xOTgsNyArMTYyLDcgQEAgYm9vbCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmZvcmNlUmVwYWludEFzeW5jKHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAKIHZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIG5ld1NpemUpCiB7Ci0gICAgbV9yb290TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7Cisg
ICAgbV9jb29yZGluYXRvci0+c2l6ZURpZENoYW5nZShuZXdTaXplKTsKICAgICBzY2hlZHVsZUxh
eWVyRmx1c2goKTsKIH0KIApAQCAtMjMzLDExMSArMTk3LDQ4IEBAIHZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpzZXRQYWdlT3ZlcmxheU9wYWNpdHkoUGFnZU92ZXJsYXkqLCBmbG9hdCB2
YWx1ZSkKICAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKIH0KIAotYm9vbCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpCit2b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCiB7Ci0gICAgaWYgKG1fd2Fp
dGluZ0ZvclVJUHJvY2VzcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVGVtcG9yYXJ5
Q2hhbmdlPGJvb2w+IHByb3RlY3RvcihtX2lzRmx1c2hpbmdMYXllckNoYW5nZXMsIHRydWUpOwot
Ci0gICAgaW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQoKTsKLQotICAgIG1f
cm9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0gICAg
aWYgKG1fcGFnZU92ZXJsYXlMYXllcikKLSAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5mbHVz
aENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0KLSAgICBib29sIGRpZFN5bmMg
PSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPmZsdXNoQ29tcG9z
aXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOwotCi0gICAgdG9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT51cGRhdGVDb250ZW50QnVmZmVyc0luY2x1ZGlu
Z1N1YkxheWVycygpOwotICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVy
LmdldCgpKS0+c3luY1BlbmRpbmdTdGF0ZUNoYW5nZXNJbmNsdWRpbmdTdWJMYXllcnMoKTsKLQot
ICAgIGZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKTsKLQotICAgIGlmIChtX3Nob3Vs
ZFN5bmNGcmFtZSkgewotICAgICAgICBkaWRTeW5jID0gdHJ1ZTsKLQotICAgICAgICBpZiAobV9y
b290Q29tcG9zaXRpbmdMYXllcikgewotICAgICAgICAgICAgbV9zdGF0ZS5jb250ZW50c1NpemUg
PSByb3VuZGVkSW50U2l6ZShtX3Jvb3RDb21wb3NpdGluZ0xheWVyLT5zaXplKCkpOwotICAgICAg
ICAgICAgaWYgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogY29udGVudHNMYXllciA9IG1haW5D
b250ZW50c0xheWVyKCkpCi0gICAgICAgICAgICAgICAgbV9zdGF0ZS5jb3ZlcmVkUmVjdCA9IGNv
bnRlbnRzTGF5ZXItPmNvdmVyUmVjdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9zdGF0ZS5z
Y3JvbGxQb3NpdGlvbiA9IG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpOwotCi0gICAg
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OkNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZShtX3N0YXRlKSk7Ci0KLSAgICAgICAg
Y2xlYXJQZW5kaW5nU3RhdGVDaGFuZ2VzKCk7Ci0gICAgICAgIG1fd2FpdGluZ0ZvclVJUHJvY2Vz
cyA9IHRydWU7Ci0gICAgICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7Ci0gICAgfQotCi0g
ICAgaWYgKG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEKSB7Ci0gICAgICAgIG1fd2ViUGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpWb2lkQ2FsbGJhY2sobV9mb3JjZVJlcGFp
bnRBc3luY0NhbGxiYWNrSUQpKTsKLSAgICAgICAgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNr
SUQgPSAwOwotICAgIH0KLQotICAgIHJldHVybiBkaWRTeW5jOworICAgIG1fY29vcmRpbmF0b3It
PnNldFZpc2libGVDb250ZW50c1JlY3QocmVjdCwgdHJhamVjdG9yeVZlY3Rvcik7CisgICAgc2No
ZWR1bGVMYXllckZsdXNoKCk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpj
bGVhclBlbmRpbmdTdGF0ZUNoYW5nZXMoKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnJlbmRlck5leHRGcmFtZSgpCiB7Ci0gICAgbV9zdGF0ZS5sYXllcnNUb0NyZWF0ZS5jbGVhcigp
OwotICAgIG1fc3RhdGUubGF5ZXJzVG9VcGRhdGUuY2xlYXIoKTsKLSAgICBtX3N0YXRlLmxheWVy
c1RvUmVtb3ZlLmNsZWFyKCk7Ci0KLSAgICBtX3N0YXRlLmltYWdlc1RvQ3JlYXRlLmNsZWFyKCk7
Ci0gICAgbV9zdGF0ZS5pbWFnZXNUb1JlbW92ZS5jbGVhcigpOwotICAgIG1fc3RhdGUuaW1hZ2Vz
VG9VcGRhdGUuY2xlYXIoKTsKLSAgICBtX3N0YXRlLmltYWdlc1RvQ2xlYXIuY2xlYXIoKTsKLQot
ICAgIG1fc3RhdGUudXBkYXRlQXRsYXNlc1RvQ3JlYXRlLmNsZWFyKCk7Ci0gICAgbV9zdGF0ZS51
cGRhdGVBdGxhc2VzVG9SZW1vdmUuY2xlYXIoKTsKLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykK
LSAgICBtX3N0YXRlLmN1c3RvbUZpbHRlcnNUb0NyZWF0ZS5jbGVhcigpOwotICAgIG1fc3RhdGUu
Y3VzdG9tRmlsdGVyc1RvUmVtb3ZlLmNsZWFyKCk7Ci0jZW5kaWYKKyAgICBtX2Nvb3JkaW5hdG9y
LT5yZW5kZXJOZXh0RnJhbWUoKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKIH0KIAotdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXll
cklmTmVlZGVkKCkKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwdXJnZUJhY2tpbmdT
dG9yZXMoKQogewotICAgIGlmIChtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdGF0ZS5yb290Q29tcG9zaXRpbmdMYXllciA9IHRv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+aWQoKTsKLSAgICBt
X2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllciA9IHRydWU7Ci0gICAgbV9zaG91bGRT
eW5jRnJhbWUgPSB0cnVlOworICAgIG1fY29vcmRpbmF0b3ItPnB1cmdlQmFja2luZ1N0b3Jlcygp
OwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0xheWVyU3RhdGUoQ29v
cmRpbmF0ZWRMYXllcklEIGlkLCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUp
Cit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6d2lsbFN5bmNMYXllclN0YXRlKENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKIHsKLSAgICBtX3Nob3VsZFN5bmNGcmFt
ZSA9IHRydWU7Ci0KICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgcHJlcGFyZUN1c3RvbUZp
bHRlclByb3hpZXNJZk5lZWRlZChzdGF0ZSk7Ci0jZW5kaWYKKyAgICBpZiAoc3RhdGUuYW5pbWF0
aW9uc0NoYW5nZWQpCisgICAgICAgIHByZXBhcmVDdXN0b21GaWx0ZXJQcm94aWVzRm9yQW5pbWF0
aW9ucyhzdGF0ZS5hbmltYXRpb25zKTsKIAotICAgIG1fc3RhdGUubGF5ZXJzVG9VcGRhdGUuYXBw
ZW5kKHN0ZDo6bWFrZV9wYWlyKGlkLCBzdGF0ZSkpOworICAgIGlmIChzdGF0ZS5maWx0ZXJzQ2hh
bmdlZCkKKyAgICAgICAgY2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhzdGF0ZS5maWx0
ZXJzKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyNlbmRpZgogfQogCiAjaWYg
RU5BQkxFKENTU19TSEFERVJTKQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnByZXBh
cmVDdXN0b21GaWx0ZXJQcm94aWVzSWZOZWVkZWQoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3Rh
dGUmIHN0YXRlKQotewotICAgIGlmIChzdGF0ZS5hbmltYXRpb25zQ2hhbmdlZCkgewotICAgICAg
ICBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYWN0aXZlQW5pbWF0aW9ucyA9IHN0YXRlLmFuaW1h
dGlvbnM7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWN0aXZlQW5pbWF0aW9ucy5h
bmltYXRpb25zKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IEtleWZyYW1lVmFs
dWVMaXN0JiBrZXlmcmFtZXMgPSBhY3RpdmVBbmltYXRpb25zLmFuaW1hdGlvbnMoKS5hdChpKS5r
ZXlmcmFtZXMoKTsKLSAgICAgICAgICAgIGlmIChrZXlmcmFtZXMucHJvcGVydHkoKSAhPSBBbmlt
YXRlZFByb3BlcnR5V2Via2l0RmlsdGVyKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBrZXlmcmFtZXMuc2l6ZSgpOyArK2opIHsK
LSAgICAgICAgICAgICAgICBjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSYgZmlsdGVyVmFsdWUg
PSBzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSY+KGtleWZyYW1lcy5hdChp
KSk7Ci0gICAgICAgICAgICAgICAgY2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhmaWx0
ZXJWYWx1ZS52YWx1ZSgpKTsKLSAgICAgICAgICAgIH0KK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpwcmVwYXJlQ3VzdG9tRmlsdGVyUHJveGllc0ZvckFuaW1hdGlvbnMoR3JhcGhpY3NM
YXllckFuaW1hdGlvbnMmIGFjdGl2ZUFuaW1hdGlvbnMpCit7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhY3RpdmVBbmltYXRpb25zLmFuaW1hdGlvbnMoKS5zaXplKCk7ICsraSkgeworICAg
ICAgICBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzID0gYWN0aXZlQW5pbWF0aW9u
cy5hbmltYXRpb25zKCkuYXQoaSkua2V5ZnJhbWVzKCk7CisgICAgICAgIGlmIChrZXlmcmFtZXMu
cHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5V2Via2l0RmlsdGVyKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwga2V5ZnJhbWVzLnNpemUo
KTsgKytqKSB7CisgICAgICAgICAgICBjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSYgZmlsdGVy
VmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSY+KGtleWZyYW1l
cy5hdChpKSk7CisgICAgICAgICAgICBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKGZp
bHRlclZhbHVlLnZhbHVlKCkpOwogICAgICAgICB9CiAgICAgfQotCi0gICAgaWYgKHN0YXRlLmZp
bHRlcnNDaGFuZ2VkKQotICAgICAgICBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKHN0
YXRlLmZpbHRlcnMpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y2hlY2tD
dXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJz
KQpAQCAtMzY3LDcgKzI2OCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjaGVj
a0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKGNvbnN0IEZpbHRlck9wZXJhCiAgICAgICAgIGlm
ICghY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5jbGllbnQoKSkgewogICAgICAgICAgICAgY3Vz
dG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5zZXRDbGllbnQodGhpcyk7CiAgICAgICAgICAgICBtX2N1
c3RvbUZpbHRlclByb2dyYW1zLmFkZChjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkuZ2V0KCkpOwot
ICAgICAgICAgICAgbV9zdGF0ZS5jdXN0b21GaWx0ZXJzVG9DcmVhdGUuYXBwZW5kKHN0ZDo6bWFr
ZV9wYWlyKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+aWQoKSwgY3VzdG9tT3BlcmF0aW9uLT52
YWxpZGF0ZWRQcm9ncmFtKCktPnZhbGlkYXRlZFByb2dyYW1JbmZvKCkpKTsKKyAgICAgICAgICAg
IG1fY29vcmRpbmF0b3ItPnN0YXRlKCkuY3VzdG9tRmlsdGVyc1RvQ3JlYXRlLmFwcGVuZChzdGQ6
Om1ha2VfcGFpcihjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmlkKCksIGN1c3RvbU9wZXJhdGlv
bi0+dmFsaWRhdGVkUHJvZ3JhbSgpLT52YWxpZGF0ZWRQcm9ncmFtSW5mbygpKSk7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgY2xpZW50IHdhcyBub3QgZGlzY29ubmVj
dGVkIHRoZW4gdGhpcyBjb29yZGluYXRvciBtdXN0IGJlIHRoZSBjbGllbnQgZm9yIGl0LgogICAg
ICAgICAgICAgQVNTRVJUKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+Y2xpZW50KCkgPT0gdGhp
cyk7CkBAIC0zODAsNyArMjgxLDcgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJl
bW92ZUN1c3RvbUZpbHRlclByb2dyYW1Qcm94eShXZWJDdXN0b21GaWx0ZXJQcm8KICAgICAvLyBB
dCB0aGlzIHRpbWUgdGhlIHNoYWRlciBpcyBub3QgbmVlZGVkIGFueW1vcmUsIHNvIHdlIHJlbW92
ZSBpdCBmcm9tIG91ciBzZXQgYW5kCiAgICAgLy8gc2VuZCBhIG1lc3NhZ2UgdG8gdGhlIG90aGVy
IHByb2Nlc3MgdG8gZGVsZXRlIGl0LgogICAgIG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMucmVtb3Zl
KGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSk7Ci0gICAgbV9zdGF0ZS5jdXN0b21GaWx0ZXJzVG9S
ZW1vdmUuYXBwZW5kKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+aWQoKSk7CisgICAgbV9jb29y
ZGluYXRvci0+c3RhdGUoKS5jdXN0b21GaWx0ZXJzVG9SZW1vdmUuYXBwZW5kKGN1c3RvbUZpbHRl
clByb2dyYW1Qcm94eS0+aWQoKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpkaXNjb25uZWN0Q3VzdG9tRmlsdGVyUHJvZ3JhbXMoKQpAQCAtMzkyLDIzICsyOTMsMTUgQEAg
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpc2Nvbm5lY3RDdXN0b21GaWx0ZXJQcm9n
cmFtcygpCiB9CiAjZW5kaWYgLy8gRU5BQkxFKENTU19TSEFERVJTKQogCi12b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6ZGV0YWNoTGF5ZXIoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBs
YXllcikKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaWRGbHVzaFJvb3RMYXllcigp
CiB7Ci0gICAgbV9yZWdpc3RlcmVkTGF5ZXJzLnJlbW92ZShsYXllci0+aWQoKSk7Ci0KLSAgICBz
aXplX3QgaW5kZXggPSBtX3N0YXRlLmxheWVyc1RvQ3JlYXRlLmZpbmQobGF5ZXItPmlkKCkpOwot
ICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkgewotICAgICAgICBtX3N0YXRlLmxheWVyc1RvQ3Jl
YXRlLnJlbW92ZShpbmRleCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3N0YXRl
LmxheWVyc1RvUmVtb3ZlLmFwcGVuZChsYXllci0+aWQoKSk7Ci0gICAgc2NoZWR1bGVMYXllckZs
dXNoKCk7CisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdlT3Zlcmxh
eUxheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiB9CiAKIHZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgp
CiB7Ci0gICAgaWYgKG1faXNTdXNwZW5kZWQgfHwgbV93YWl0aW5nRm9yVUlQcm9jZXNzKQorICAg
IGlmIChtX2lzU3VzcGVuZGVkIHx8IG1fY29vcmRpbmF0b3ItPmlzV2FpdGluZ0ZvclJlbmRlcmVy
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHN5bmNEaXNwbGF5U3RhdGUoKTsKQEAgLTQxNiw4
ICszMDksMTcgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnBlcmZvcm1TY2hlZHVs
ZWRMYXllckZsdXNoKCkKICAgICBpZiAoIW1faXNWYWxpZCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpKQotICAgICAgICBkaWRQZXJmb3JtU2No
ZWR1bGVkTGF5ZXJGbHVzaCgpOworICAgIGJvb2wgZGlkU3luYyA9IG1fY29vcmRpbmF0b3ItPmZs
dXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOworCisgICAgaWYgKG1fZm9yY2VSZXBhaW50QXN5bmND
YWxsYmFja0lEKSB7CisgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpWb2lkQ2FsbGJhY2sobV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQpKTsKKyAgICAg
ICAgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQgPSAwOworICAgIH0KKworICAgIGlmICht
X25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCAmJiBkaWRTeW5jKSB7CisgICAgICAgIHN0
YXRpY19jYXN0PERyYXdpbmdBcmVhSW1wbCo+KG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKSktPmxh
eWVySG9zdERpZEZsdXNoTGF5ZXJzKCk7CisgICAgICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRM
YXllckZsdXNoID0gZmFsc2U7CisgICAgfQogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6c3luY0Rpc3BsYXlTdGF0ZSgpCkBAIC00MzUsMTQgKzMzNyw2IEBAIHZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jRGlzcGxheVN0YXRlKCkKICAgICBtX3dlYlBhZ2UtPmxh
eW91dElmTmVlZGVkKCk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaWRQ
ZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpCi17Ci0gICAgaWYgKG1fbm90aWZ5QWZ0ZXJTY2hl
ZHVsZWRMYXllckZsdXNoKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PERyYXdpbmdBcmVhSW1wbCo+
KG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKSktPmxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCk7Ci0g
ICAgICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gZmFsc2U7Ci0gICAgfQot
fQotCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQo
VGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiopCiB7CiAgICAgcGVyZm9ybVNjaGVkdWxl
ZExheWVyRmx1c2goKTsKQEAgLTQ1MiwxNSArMzQ2LDE1IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCkKIHsKICAgICBBU1NFUlQoIW1fcGFn
ZU92ZXJsYXlMYXllcik7CiAKLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBHcmFwaGljc0xheWVy
OjpjcmVhdGUodGhpcywgdGhpcyk7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyID0gR3JhcGhpY3NM
YXllcjo6Y3JlYXRlKGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksIG1fY29vcmRpbmF0b3IuZ2V0KCkp
OwogI2lmbmRlZiBOREVCVUcKLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5hbWUoIkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdCBwYWdlIG92ZXJsYXkgY29udGVudCIpOworICAgIG1fcGFnZU92
ZXJsYXlMYXllci0+c2V0TmFtZSgiQ29tcG9zaXRpbmdDb29yZGluYXRvciBwYWdlIG92ZXJsYXkg
Y29udGVudCIpOwogI2VuZGlmCiAKICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldERyYXdzQ29u
dGVudCh0cnVlKTsKLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5z
aXplKCkpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZShyb290TGF5ZXIoKS0+c2l6
ZSgpKTsKIAotICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX3BhZ2VPdmVybGF5TGF5ZXIuZ2V0
KCkpOworICAgIHJvb3RMYXllcigpLT5hZGRDaGlsZChtX3BhZ2VPdmVybGF5TGF5ZXIuZ2V0KCkp
OwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGVzdHJveVBhZ2VPdmVybGF5
TGF5ZXIoKQpAQCAtNDcwLDY1ICszNjQsNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKQogICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IG51
bGxwdHI7CiB9CiAKLVBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoSW1hZ2UqIGltYWdl
KQotewotICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCA9IENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nOjpnZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKGltYWdlKTsKLSAgICBJ
bWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJ
RCk7Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBpbWFnZUJhY2tpbmc7Ci0g
ICAgaWYgKGl0ID09IG1faW1hZ2VCYWNraW5ncy5lbmQoKSkgewotICAgICAgICBpbWFnZUJhY2tp
bmcgPSBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y3JlYXRlKHRoaXMsIGltYWdlKTsKLSAgICAg
ICAgbV9pbWFnZUJhY2tpbmdzLmFkZChpbWFnZUlELCBpbWFnZUJhY2tpbmcpOwotICAgIH0gZWxz
ZQotICAgICAgICBpbWFnZUJhY2tpbmcgPSBpdC0+dmFsdWU7Ci0KLSAgICByZXR1cm4gaW1hZ2VC
YWNraW5nOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlSW1hZ2VC
YWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBtX3N0YXRl
LmltYWdlc1RvQ3JlYXRlLmFwcGVuZChpbWFnZUlEKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
IGltYWdlSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBjb29yZGluYXRlZFN1cmZh
Y2UpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fc3RhdGUuaW1hZ2Vz
VG9VcGRhdGUuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGltYWdlSUQsIGNvb3JkaW5hdGVkU3VyZmFj
ZSkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y2xlYXJJbWFnZUJhY2tp
bmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCi17Ci0gICAgbV9z
aG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fc3RhdGUuaW1hZ2VzVG9DbGVhci5hcHBlbmQo
aW1hZ2VJRCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW1vdmVJbWFn
ZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIGlmICht
X2lzUHVyZ2luZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1faW1hZ2VCYWNraW5n
cy5jb250YWlucyhpbWFnZUlEKSk7Ci0gICAgbV9pbWFnZUJhY2tpbmdzLnJlbW92ZShpbWFnZUlE
KTsKLQotICAgIG1fc3RhdGUuaW1hZ2VzVG9SZW1vdmUuYXBwZW5kKGltYWdlSUQpOwotfQotCi12
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hh
bmdlcygpCi17Ci0gICAgSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBlbmQgPSBtX2ltYWdlQmFj
a2luZ3MuZW5kKCk7Ci0gICAgZm9yIChJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X2ltYWdlQmFja2luZ3MuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgaXRl
ci0+dmFsdWUtPnVwZGF0ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91
YmxlIC8qIHRpbWUgKi8pCi17Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpu
b3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKQotewotICAg
IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xh
eWVyLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgV2ViQ29yZTo6
R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBS
ZWN0KQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhj
b25zdCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBHcmFwaGljc0NvbnRleHQmIGdyYXBo
aWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCiB7CiAgICAgaWYgKGdyYXBoaWNz
TGF5ZXIgPT0gbV9wYWdlT3ZlcmxheUxheWVyKSB7CiAgICAgICAgIC8vIE92ZXJsYXlzIGNvbnRh
aW4gdHJhbnNwYXJlbnQgY29udGVudHMgYW5kIHdvbid0IGNsZWFyIHRoZSBjb250ZXh0IGFzIHBh
cnQgb2YgdGhlaXIgcmVuZGVyaW5nLCBzbyB3ZSBkbyBpdCBoZXJlLgpAQCAtNTM4LDE1ICszNzQs
OSBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGFpbnRDb250ZW50cyhjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKiBncmFwaAogICAgIH0KIH0KIAotUGFzc093blB0cjxHcmFw
aGljc0xheWVyPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUdyYXBoaWNzTGF5ZXIo
R3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmNvbW1pdFNjZW5lU3RhdGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJiBz
dGF0ZSkKIHsKLSAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbmV3IENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcihjbGllbnQpOwotICAgIGxheWVyLT5zZXRDb29yZGluYXRvcih0
aGlzKTsKLSAgICBtX3JlZ2lzdGVyZWRMYXllcnMuYWRkKGxheWVyLT5pZCgpLCBsYXllcik7Ci0g
ICAgbV9zdGF0ZS5sYXllcnNUb0NyZWF0ZS5hcHBlbmQobGF5ZXItPmlkKCkpOwotICAgIGxheWVy
LT5zZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVz
aCgpOwotICAgIHJldHVybiBhZG9wdFB0cihsYXllcik7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q29tbWl0Q29vcmRpbmF0ZWRH
cmFwaGljc1N0YXRlKHN0YXRlKSk7CiB9CiAKIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNl
PiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUNvb3JkaW5hdGVkU3VyZmFjZShjb25z
dCBJbnRTaXplJiBzaXplLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzIGZsYWdzKQpAQCAtNTU0
LDczICszODQsMTQgQEAgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlQ29vcmRpbmF0ZWRTdXJmYWMKICAgICByZXR1cm4gV2ViQ29v
cmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUoc2l6ZSwgZmxhZ3MpOwogfQogCi1mbG9hdCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV93ZWJQYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotfQotCi1mbG9hdCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OnBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
d2ViUGFnZS0+cGFnZVNjYWxlRmFjdG9yKCk7Ci19Ci0KIGJvb2wgTGF5ZXJUcmVlSG9zdDo6c3Vw
cG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90
IGF0bGFzSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBjb29yZGluYXRlZFN1cmZh
Y2UpCi17Ci0gICAgbV9zdGF0ZS51cGRhdGVBdGxhc2VzVG9DcmVhdGUuYXBwZW5kKHN0ZDo6bWFr
ZV9wYWlyKGF0bGFzSUQsIGNvb3JkaW5hdGVkU3VyZmFjZSkpOwotfQotCi12b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkKLXsK
LSAgICBpZiAobV9pc1B1cmdpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3N0YXRlLnVwZGF0
ZUF0bGFzZXNUb1JlbW92ZS5hcHBlbmQoYXRsYXNJRCk7Ci19Ci0KLVdlYkNvcmU6OkZsb2F0UmVj
dCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdAot
ewotICAgIHJldHVybiBtX3Zpc2libGVDb250ZW50c1JlY3Q7Ci19Ci0KLUNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllciogQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjptYWluQ29udGVudHNMYXllcigp
Ci17Ci0gICAgaWYgKCFtX3Jvb3RDb21wb3NpdGluZ0xheWVyKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIHJldHVybiB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RDb21wb3NpdGlu
Z0xheWVyKS0+ZmluZEZpcnN0RGVzY2VuZGFudFdpdGhDb250ZW50c1JlY3Vyc2l2ZWx5KCk7Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3Rv
cikKLXsKLSAgICAvLyBBIHplcm8gdHJhamVjdG9yeVZlY3RvciBpbmRpY2F0ZXMgdGhhdCB0aWxl
cyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9ydCBhcmUgcmVxdWVzdGVkLgotICAgIGlmIChDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIqIGNvbnRlbnRzTGF5ZXIgPSBtYWluQ29udGVudHNMYXllcigpKQot
ICAgICAgICBjb250ZW50c0xheWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVj
dG9yKHRyYWplY3RvcnlWZWN0b3IpOwotCi0gICAgYm9vbCBjb250ZW50c1JlY3REaWRDaGFuZ2Ug
PSByZWN0ICE9IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKLSAgICBpZiAoY29udGVudHNSZWN0RGlk
Q2hhbmdlKSB7Ci0gICAgICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7Ci0KLSAgICAg
ICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKLSAg
ICAgICAgZm9yIChMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpdC0+dmFsdWUtPnNldE5lZWRz
VmlzaWJsZVJlY3RBZGp1c3RtZW50KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzY2hlZHVs
ZUxheWVyRmx1c2goKTsKLSAgICBpZiAobV93ZWJQYWdlLT51c2VGaXhlZExheW91dCgpKSB7Ci0g
ICAgICAgIC8vIFJvdW5kIHRoZSByZWN0IGluc3RlYWQgb2YgZW5jbG9zaW5nIGl0IHRvIG1ha2Ug
c3VyZSB0aGF0IGl0cyBzaXplIHN0YXlzCi0gICAgICAgIC8vIHRoZSBzYW1lIHdoaWxlIHBhbm5p
bmcuIFRoaXMgY2FuIGhhdmUgbmFzdHkgZWZmZWN0cyBvbiBsYXlvdXQuCi0gICAgICAgIG1fd2Vi
UGFnZS0+c2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlY3Qocm91bmRlZEludFJlY3QocmVjdCkpOwot
ICAgIH0KLX0KLQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRldmljZU9yUGFnZVNj
YWxlRmFjdG9yQ2hhbmdlZCgpCiB7Ci0gICAgbV9yb290TGF5ZXItPmRldmljZU9yUGFnZVNjYWxl
RmFjdG9yQ2hhbmdlZCgpOworICAgIG1fY29vcmRpbmF0b3ItPmRldmljZU9yUGFnZVNjYWxlRmFj
dG9yQ2hhbmdlZCgpOwogICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCiAgICAgICAgIG1fcGFn
ZU92ZXJsYXlMYXllci0+ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CiB9CkBAIC02
MzEsMTMgKzQwMiwxMyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGFnZUJhY2tn
cm91bmRUcmFuc3BhcmVuY3lDaGFuZ2VkKCkKIAogR3JhcGhpY3NMYXllckZhY3RvcnkqIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6Z3JhcGhpY3NMYXllckZhY3RvcnkoKQogewotICAgIHJldHVy
biB0aGlzOworICAgIHJldHVybiBtX2Nvb3JkaW5hdG9yLmdldCgpOwogfQogCiAjaWYgRU5BQkxF
KFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnNjaGVkdWxlQW5pbWF0aW9uKCkKIHsKLSAgICBpZiAobV93YWl0aW5nRm9yVUlQcm9jZXNzKQor
ICAgIGlmIChtX2Nvb3JkaW5hdG9yLT5pc1dhaXRpbmdGb3JSZW5kZXJlcigpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAobV9sYXllckZsdXNoVGltZXIuaXNBY3RpdmUoKSkKQEAgLTY1MCw3
NiArNDIxLDYgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlQW5pbWF0
aW9uKCkKIH0KICNlbmRpZgogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVuZGVy
TmV4dEZyYW1lKCkKLXsKLSAgICBtX3dhaXRpbmdGb3JVSVByb2Nlc3MgPSBmYWxzZTsKLSAgICBz
Y2hlZHVsZUxheWVyRmx1c2goKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV91cGRh
dGVBdGxhc2VzLnNpemUoKTsgKytpKQotICAgICAgICBtX3VwZGF0ZUF0bGFzZXNbaV0tPmRpZFN3
YXBCdWZmZXJzKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwdXJnZUJh
Y2tpbmdTdG9yZXMoKQotewotICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiBwdXJnaW5nVG9nZ2xl
KG1faXNQdXJnaW5nLCB0cnVlKTsKLQotICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBtX3Jl
Z2lzdGVyZWRMYXllcnMuZW5kKCk7Ci0gICAgZm9yIChMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBt
X3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+
dmFsdWUtPnB1cmdlQmFja2luZ1N0b3JlcygpOwotCi0gICAgbV9pbWFnZUJhY2tpbmdzLmNsZWFy
KCk7Ci0gICAgbV91cGRhdGVBdGxhc2VzLmNsZWFyKCk7Ci19Ci0KLWJvb2wgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpwYWludFRvU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplLCBDb29yZGlu
YXRlZFN1cmZhY2U6OkZsYWdzIGZsYWdzLCB1aW50MzJfdCYgYXRsYXNJRCwgSW50UG9pbnQmIG9m
ZnNldCwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpDbGllbnQqIGNsaWVudCkKLXsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV91cGRhdGVBdGxhc2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IFVwZGF0ZUF0bGFzKiBhdGxhcyA9IG1fdXBkYXRlQXRsYXNlc1tpXS5nZXQoKTsKLSAgICAgICAg
aWYgKGF0bGFzLT5zdXBwb3J0c0FscGhhKCkgPT0gKGZsYWdzICYgQ29vcmRpbmF0ZWRTdXJmYWNl
OjpTdXBwb3J0c0FscGhhKSkgewotICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGZhbHNlIGlmIHRo
ZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIgc3BhY2UuCi0gICAgICAgICAgICBpZiAoYXRsYXMt
PnBhaW50T25BdmFpbGFibGVCdWZmZXIoc2l6ZSwgYXRsYXNJRCwgb2Zmc2V0LCBjbGllbnQpKQot
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3Rh
dGljIGNvbnN0IGludCBTY3JhdGNoQnVmZmVyRGltZW5zaW9uID0gMTAyNDsgLy8gU2hvdWxkIGJl
IGEgcG93ZXIgb2YgdHdvLgotICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBlbmQoYWRvcHRQdHIobmV3
IFVwZGF0ZUF0bGFzKHRoaXMsIFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24sIGZsYWdzKSkpOwotICAg
IHNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpOwotICAgIHJldHVybiBtX3VwZGF0ZUF0
bGFzZXMubGFzdCgpLT5wYWludE9uQXZhaWxhYmxlQnVmZmVyKHNpemUsIGF0bGFzSUQsIG9mZnNl
dCwgY2xpZW50KTsKLX0KLQotY29uc3QgZG91YmxlIFJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1l
ckludGVydmFsID0gMC41OwotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2NoZWR1
bGVSZWxlYXNlSW5hY3RpdmVBdGxhc2VzKCkKLXsKLSAgICBpZiAoIW1fcmVsZWFzZUluYWN0aXZl
QXRsYXNlc1RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNl
c1RpbWVyLnN0YXJ0UmVwZWF0aW5nKFJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckludGVydmFs
KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbGVhc2VJbmFjdGl2ZUF0
bGFzZXNUaW1lckZpcmVkKFRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4qKQotewotICAg
IC8vIFdlIGFsd2F5cyB3YW50IHRvIGtlZXAgb25lIGF0bGFzIGZvciBub24tY29tcG9zaXRlZCBj
b250ZW50LgotICAgIE93blB0cjxVcGRhdGVBdGxhcz4gYXRsYXNUb0tlZXBBbnl3YXk7Ci0gICAg
Ym9vbCBmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgPSBmYWxzZTsKLSAg
ICBmb3IgKGludCBpID0gbV91cGRhdGVBdGxhc2VzLnNpemUoKSAtIDE7ICBpID49IDA7IC0taSkg
ewotICAgICAgICBVcGRhdGVBdGxhcyogYXRsYXMgPSBtX3VwZGF0ZUF0bGFzZXNbaV0uZ2V0KCk7
Ci0gICAgICAgIGlmICghYXRsYXMtPmlzSW5Vc2UoKSkKLSAgICAgICAgICAgIGF0bGFzLT5hZGRU
aW1lSW5hY3RpdmUoUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2YWwpOwotICAgICAg
ICBib29sIHVzYWJsZUZvck5vbkNvbXBvc2l0ZWRDb250ZW50ID0gIWF0bGFzLT5zdXBwb3J0c0Fs
cGhhKCk7Ci0gICAgICAgIGlmIChhdGxhcy0+aXNJbmFjdGl2ZSgpKSB7Ci0gICAgICAgICAgICBp
ZiAoIWZvdW5kQWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVudCAmJiAhYXRsYXNUb0tl
ZXBBbnl3YXkgJiYgdXNhYmxlRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQpCi0gICAgICAgICAgICAg
ICAgYXRsYXNUb0tlZXBBbnl3YXkgPSBtX3VwZGF0ZUF0bGFzZXNbaV0ucmVsZWFzZSgpOwotICAg
ICAgICAgICAgbV91cGRhdGVBdGxhc2VzLnJlbW92ZShpKTsKLSAgICAgICAgfSBlbHNlIGlmICh1
c2FibGVGb3JOb25Db21wb3NpdGVkQ29udGVudCkKLSAgICAgICAgICAgIGZvdW5kQWN0aXZlQXRs
YXNGb3JOb25Db21wb3NpdGVkQ29udGVudCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFmb3Vu
ZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgJiYgYXRsYXNUb0tlZXBBbnl3YXkp
Ci0gICAgICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBlbmQoYXRsYXNUb0tlZXBBbnl3YXkucmVsZWFz
ZSgpKTsKLQotICAgIGlmIChtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpIDw9IDEpCi0gICAgICAgIG1f
cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyLnN0b3AoKTsKLX0KLQogdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYg
Y29sb3IpCiB7CiAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6U2V0QmFja2dyb3VuZENvbG9yKGNvbG9yKSk7CkBAIC03MjcsMTEgKzQy
OCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRCYWNrZ3JvdW5kQ29sb3Io
Y29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6Y29tbWl0U2Nyb2xsT2Zmc2V0KHVpbnQzMl90IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIG9mZnNldCkKIHsKLSAgICBMYXllck1hcDo6aXRlcmF0b3IgaSA9IG1fcmVnaXN0
ZXJlZExheWVycy5maW5kKGxheWVySUQpOwotICAgIGlmIChpID09IG1fcmVnaXN0ZXJlZExheWVy
cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaS0+dmFsdWUtPmNvbW1pdFNjcm9sbE9m
ZnNldChvZmZzZXQpOworICAgIG1fY29vcmRpbmF0b3ItPmNvbW1pdFNjcm9sbE9mZnNldChsYXll
cklELCBvZmZzZXQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKaW5kZXggMTQx
NGY0M2U4ZmI2NzUyYWE3OWU5MGRkMzQyZmZiMTJjYzdmM2ZlMi4uZmQ5NTY0ZTA5ZTlhMjY4MGIx
MWI2N2EwNDcyYTZiNzg2MDU1OTdhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKQEAgLTI1LDEzICsyNSw4IEBACiAKICNp
bmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgot
I2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZS5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NvbXBvc2l0
aW5nQ29vcmRpbmF0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJGYWN0b3J5
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9VcGRhdGVBdGxhcy5oPgogI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKQEAgLTQ2LDExICs0MSw3IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJQYWdlOwogCi1jbGFzcyBDb29yZGluYXRlZExheWVy
VHJlZUhvc3QgOiBwdWJsaWMgTGF5ZXJUcmVlSG9zdCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNs
aWVudAotICAgICwgcHVibGljIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVu
dAotICAgICwgcHVibGljIFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDbGllbnQK
LSAgICAsIHB1YmxpYyBXZWJDb3JlOjpVcGRhdGVBdGxhczo6Q2xpZW50Ci0gICAgLCBwdWJsaWMg
V2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkKK2NsYXNzIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdCA6IHB1YmxpYyBMYXllclRyZWVIb3N0LCBwdWJsaWMgV2ViQ29yZTo6Q29tcG9zaXRpbmdD
b29yZGluYXRvcjo6Q2xpZW50CiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogICAgICwgV2ViQ3Vz
dG9tRmlsdGVyUHJvZ3JhbVByb3h5Q2xpZW50CiAjZW5kaWYKQEAgLTg0LDkgKzc1LDYgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKSBP
VkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgcGFnZUJhY2tncm91bmRUcmFuc3BhcmVuY3lDaGFu
Z2VkKCkgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1l
c3NhZ2VEZWNvZGVyJik7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9y
eSogZ3JhcGhpY3NMYXllckZhY3RvcnkoKSBPVkVSUklERTsKICAgICBXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIqIG1haW5Db250ZW50c0xheWVyKCk7CkBAIC05OCw2MCArODYsMzQg
QEAgcHVibGljOgogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRT
dXJmYWNlPiBjcmVhdGVDb29yZGluYXRlZFN1cmZhY2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYs
IFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MpOwogCi0gICAgdm9pZCBjb21taXRT
Y3JvbGxPZmZzZXQodWludDMyX3QgbGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgb2Zm
c2V0KTsKLQogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dChXZWJQYWdlKik7CiAKIHByaXZhdGU6Ci0gICAgLy8gR3JhcGhpY3NMYXllckNsaWVudAotICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqLCBkb3VibGUgdGltZSk7Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNoUmVx
dWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwotICAgIHZpcnR1YWwgdm9pZCBw
YWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOwotICAgIHZpcnR1YWwgZmxvYXQgZGV2aWNlU2Nh
bGVGYWN0b3IoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGZsb2F0IHBhZ2VTY2FsZUZh
Y3RvcigpIGNvbnN0IE9WRVJSSURFOwotCi0gICAgLy8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6
OkNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUltYWdlQmFja2luZyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBQYXNzUmVm
UHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZT4pIE9WRVJSSURFOwotICAgIHZpcnR1YWwg
dm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmco
V2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7Ci0KLSAgICB2b2lk
IGZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKTsKLQotICAgIC8vIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllckNsaWVudAotICAgIHZpcnR1YWwgYm9vbCBpc0ZsdXNoaW5nTGF5ZXJDaGFu
Z2VzKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzOyB9
Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFj
a2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoV2ViQ29yZTo6SW1hZ2UqKSBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyKik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50VG9TdXJmYWNlKGNvbnN0IFdlYkNv
cmU6OkludFNpemUmLCBXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50MzJf
dCYgLyogYXRsYXNJRCAqLywgV2ViQ29yZTo6SW50UG9pbnQmLCBXZWJDb3JlOjpDb29yZGluYXRl
ZFN1cmZhY2U6OkNsaWVudCopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJT
dGF0ZShXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllclN0YXRlJik7Ci0KLSAgICAvLyBVcGRhdGVBdGxhczo6Q2xpZW50Ci0gICAgdmly
dHVhbCB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8
V2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlPikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lk
IHJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpIE9WRVJSSURFOwotCi0gICAgLy8g
R3JhcGhpY3NMYXllckZhY3RvcnkKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3Jh
cGhpY3NMYXllcj4gY3JlYXRlR3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xp
ZW50KikgT1ZFUlJJREU7Ci0KICAgICAvLyBDb29yZGluYXRlZExheWVyVHJlZUhvc3QKLSAgICB2
b2lkIGluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKCk7CiAgICAgdm9pZCBj
cmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CiAgICAgdm9pZCBkZXN0cm95UGFnZU92ZXJsYXlMYXll
cigpOwotICAgIGJvb2wgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7Ci0gICAgdm9pZCBjbGVh
clBlbmRpbmdTdGF0ZUNoYW5nZXMoKTsKICAgICB2b2lkIGNhbmNlbFBlbmRpbmdMYXllckZsdXNo
KCk7CiAgICAgdm9pZCBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOwotICAgIHZvaWQgZGlk
UGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKICAgICB2b2lkIHN5bmNEaXNwbGF5U3RhdGUo
KTsKLSAgICB2b2lkIGxheWVyRmx1c2hUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdD4qKTsKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOworICAg
IHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7CisgICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsK
KyAgICB2b2lkIGNvbW1pdFNjcm9sbE9mZnNldCh1aW50MzJfdCBsYXllcklELCBjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiBvZmZzZXQpOwogCi0gICAgdm9pZCBzY2hlZHVsZVJlbGVhc2VJbmFjdGl2
ZUF0bGFzZXMoKTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSB7IHJl
dHVybiBtX2Nvb3JkaW5hdG9yLT5yb290TGF5ZXIoKTsgfQogCi0gICAgdm9pZCByZWxlYXNlSW5h
Y3RpdmVBdGxhc2VzVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q+Kik7CisgICAgdm9pZCBsYXllckZsdXNoVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q+Kik7CisKKyAgICAvLyBDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmx1c2hSb290TGF5ZXIoKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFN5bmNMYXllclN0YXRlKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllclN0YXRlJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIG5vdGlm
eUZsdXNoUmVxdWlyZWQoKSBPVkVSUklERSB7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9OworICAg
IHZpcnR1YWwgdm9pZCBjb21taXRTY2VuZVN0YXRlKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NTdGF0ZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwYWludExheWVyQ29udGVudHMo
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KSBPVkVSUklERTsKIAogI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKLSAgICB2b2lkIHByZXBhcmVDdXN0b21GaWx0ZXJQcm94aWVzSWZOZWVk
ZWQoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyAgICB2b2lkIHBy
ZXBhcmVDdXN0b21GaWx0ZXJQcm94aWVzRm9yQW5pbWF0aW9ucyhXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQW5pbWF0aW9ucyYpOwogCiAgICAgLy8gV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5Q2xp
ZW50CiAgICAgdm9pZCByZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkoV2ViQ3VzdG9tRmls
dGVyUHJvZ3JhbVByb3h5Kik7CkBAIC0xNjAsNDMgKzEyMiwyNSBAQCBwcml2YXRlOgogICAgIHZv
aWQgZGlzY29ubmVjdEN1c3RvbUZpbHRlclByb2dyYW1zKCk7CiAjZW5kaWYKIAotICAgIE93blB0
cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKLSAgICBXZWJDb3JlOjpHcmFw
aGljc0xheWVyKiBtX3Jvb3RDb21wb3NpdGluZ0xheWVyOworICAgIE93blB0cjxXZWJDb3JlOjpD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yPiBtX2Nvb3JkaW5hdG9yOwogCiAgICAgLy8gVGhlIHBhZ2Ug
b3ZlcmxheSBsYXllci4gV2lsbCBiZSBudWxsIGlmIHRoZXJlJ3Mgbm8gcGFnZSBvdmVybGF5Lgog
ICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3BhZ2VPdmVybGF5TGF5ZXI7CiAg
ICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBtX3BhZ2VPdmVybGF5OwogCi0gICAgV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc1N0YXRlIG1fc3RhdGU7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8V2Vi
Q29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIqPiBMYXllck1hcDsKLSAgICBMYXllck1hcCBtX3JlZ2lzdGVyZWRMYXllcnM7Ci0gICAgdHlw
ZWRlZiBIYXNoTWFwPFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxX
ZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZz4gPiBJbWFnZUJhY2tpbmdNYXA7Ci0gICAg
SW1hZ2VCYWNraW5nTWFwIG1faW1hZ2VCYWNraW5nczsKLSAgICBWZWN0b3I8T3duUHRyPFdlYkNv
cmU6OlVwZGF0ZUF0bGFzPiA+IG1fdXBkYXRlQXRsYXNlczsKLQogI2lmIEVOQUJMRShDU1NfU0hB
REVSUykKICAgICBIYXNoU2V0PFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSo+IG1fY3VzdG9t
RmlsdGVyUHJvZ3JhbXM7CiAjZW5kaWYKIAogICAgIGJvb2wgbV9ub3RpZnlBZnRlclNjaGVkdWxl
ZExheWVyRmx1c2g7CiAgICAgYm9vbCBtX2lzVmFsaWQ7Ci0gICAgLy8gV2UgZG9uJ3Qgc2VuZCB0
aGUgbWVzc2FnZXMgcmVsYXRlZCB0byByZWxlYXNpbmcgcmVzb3VyY2VzIHRvIFVJIFByb2Nlc3Mg
ZHVyaW5nIHB1cmdpbmcsIGJlY2F1c2UgVUkgUHJvY2VzcyBhbHJlYWR5IGhhZCByZW1vdmVkIGFs
bCByZXNvdXJjZXMuCi0gICAgYm9vbCBtX2lzUHVyZ2luZzsKLSAgICBib29sIG1faXNGbHVzaGlu
Z0xheWVyQ2hhbmdlczsKLQotICAgIGJvb2wgbV93YWl0aW5nRm9yVUlQcm9jZXNzOwogICAgIGJv
b2wgbV9pc1N1c3BlbmRlZDsKLSAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbV92aXNpYmxlQ29udGVu
dHNSZWN0OwogCiAgICAgTGF5ZXJUcmVlQ29udGV4dCBtX2xheWVyVHJlZUNvbnRleHQ7Ci0gICAg
Ym9vbCBtX3Nob3VsZFN5bmNGcmFtZTsKLSAgICBib29sIG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21w
b3NpdGluZ0xheWVyOworCiAgICAgV2ViQ29yZTo6VGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0PiBtX2xheWVyRmx1c2hUaW1lcjsKLSAgICBXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q+IG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyOwogICAgIGJvb2wgbV9s
YXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQ7CiAgICAgdWludDY0X3QgbV9mb3JjZVJlcGFpbnRB
c3luY0NhbGxiYWNrSUQ7Ci0gICAgYm9vbCBtX2FuaW1hdGlvbnNMb2NrZWQ7CiAKICNpZiBFTkFC
TEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiAgICAgZG91YmxlIG1fbGFzdEFuaW1hdGlvblNl
cnZpY2VUaW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXll
clRyZWVIb3N0LmgKaW5kZXggOTBiYmI5NDFkMWFiMDU2ODFmOTZhMjE0MDJjZjkzNDgxYjMyNzc3
ZC4uMmZhZDJkMTNjZjI1ZDgzNmVjZmFiYTNhYmZlNmFmODk4MDI0MGEyNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCkBAIC04Nyw5
ICs4Nyw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNv
bnN0IFdlYkNvcmU6OkNvbG9yJikgeyB9CiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
Ci0gICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiwgZmxvYXQgLyogc2NhbGUgKi8sIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQm
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCkgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwg
Q29yZUlQQzo6TWVzc2FnZURlY29kZXImKSA9IDA7CiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>205472</attachid>
            <date>2013-06-26 05:03:00 -0700</date>
            <delta_ts>2013-06-26 17:49:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104360-20130626210059.patch</filename>
            <type>text/plain</type>
            <size>66026</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxOTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2M1MzUyNzU1OTI3MmQy
NGJhN2ZhMmVlZTEzNjE4MjVjZWQzMjQ3NS4uOTE1ZWM1YmIwYTAyMDZmNDEzZmYzNDg2YTNiZjdm
NjQwNjhjNGU5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDEzLTAzLTEzICBHd2Fu
ZyBZb29uIEh3YW5nICA8cnl1bWllbEBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGlu
YXRlZCBHcmFwaGljczogU2VwYXJhdGUgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGludG8gQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0IGFuZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQzNjAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0IGhhcyB0b28gbWFueSByZXNwb25zaWJpbGl0aWVzLiBJdAorICAgICAgICBp
bXBsZW1lbnRzIExheWVyVHJlZUhvc3QsIEdyYXBoaWNzTGF5ZXJDbGllbnQsCisgICAgICAgIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNs
aWVudCwKKyAgICAgICAgVXBkYXRlQXRsYXM6OkNsaWVudCwgR3JhcGhpY3NMYXllckZhY3Rvcnkg
YW5kCisgICAgICAgIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudC4KKworICAgICAg
ICBUaGlzIHJlZmFjdG9yaW5nIHJlZHVjZXMgdGhlIHJlc3BvbnNpYmlsaXRpZXMgb2YgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5l
dyBjbGFzcyBjYWxsZWQgQ29tcG9zaXRpbmdDb29yZGluYXRvciwgd2hpY2gKKyAgICAgICAgdGFr
ZXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIG1hbmFnaW5nIGNvbXBvc2l0aW5nIHJlc291cmNlcyBp
bgorICAgICAgICBXZWJQcm9jZXNzLgorCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dCBub3cgdGFrZXMgYSBwYXJ0IGZvciBzY2hlZHVsaW5nIGFuZCBJUEMKKyAgICAgICAgc3BlY2lm
aWMgcGFydHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRl
c3RzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVGFyZ2V0LnByaToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRp
bmdDb29yZGluYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdD
b29yZGluYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6On5Db21wb3NpdGluZ0Nvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2l6ZURpZENoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpmbHVzaFBlbmRpbmdM
YXllckNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6
c3luY0Rpc3BsYXlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpuZXh0QW5pbWF0aW9uU2VydmljZVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRpbmdDb29yZGluYXRvcjo6Y2xlYXJQZW5kaW5nU3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmluaXRpYWxpemVSb290Q29tcG9zaXRpbmdM
YXllcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6
OmNyZWF0ZVJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpzeW5jTGF5ZXJTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yOjpjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6dXBkYXRlSW1hZ2VCYWNraW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNsZWFySW1hZ2VCYWNraW5nQ29u
dGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVtb3Zl
SW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6
OmZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29t
cG9zaXRpbmdDb29yZGluYXRvcjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpub3RpZnlGbHVzaFJlcXVpcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnBhaW50Q29udGVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlR3JhcGhpY3NM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXZpY2VT
Y2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpw
YWdlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRv
cjo6Y3JlYXRlVXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29y
ZGluYXRvcjo6cmVtb3ZlVXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRp
bmdDb29yZGluYXRvcjo6dmlzaWJsZUNvbnRlbnRzUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yOjptYWluQ29udGVudHNMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRldmljZU9yUGFnZVNjYWxl
RmFjdG9yQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
OjpkZXRhY2hMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
Ojpjb21taXRTY3JvbGxPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29y
ZGluYXRvcjo6cmVuZGVyTmV4dEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OnB1cmdlQmFja2luZ1N0b3Jlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yOjpwYWludFRvU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVsZWFzZUluYWN0aXZl
QXRsYXNlc1RpbWVyRmlyZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y2xlYXJSb290TGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cm9vdExheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnN0YXRlKToKKwogMjAxMy0wNi0yNCAgS2Fu
Z2lsIEhhbiAgPGthbmdpbC5oYW5Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgQWRvcHQgaXMvdG9I
VE1MRm9ybUVsZW1lbnQgZm9yIGNvZGUgY2xlYW51cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDlkODFmNGY1YWMw
YWZiNTA2MmIzNWNmMWM2MmJiOWQ2YTMxNWRlOTEuLmE4NjE5MTRkYTVjMjhjNzU1OTYwMjdiODUy
MWFiOGE3N2JmMDBlY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAxMy0wMy0xMyAg
R3dhbmcgWW9vbiBId2FuZyAgPHJ5dW1pZWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgQ29v
cmRpbmF0ZWQgR3JhcGhpY3M6IFNlcGFyYXRlIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBpbnRv
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBhbmQgQ29tcG9zaXRpbmdDb29yZGluYXRvcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0MzYwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdCBoYXMgdG9vIG1hbnkgcmVzcG9uc2liaWxpdGllcy4gSXQKKyAgICAg
ICAgaW1wbGVtZW50cyBMYXllclRyZWVIb3N0LCBHcmFwaGljc0xheWVyQ2xpZW50LAorICAgICAg
ICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQsIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
OjpDbGllbnQsCisgICAgICAgIFVwZGF0ZUF0bGFzOjpDbGllbnQsIEdyYXBoaWNzTGF5ZXJGYWN0
b3J5IGFuZAorICAgICAgICBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHlDbGllbnQuCisKKyAg
ICAgICAgVGhpcyByZWZhY3RvcmluZyByZWR1Y2VzIHRoZSByZXNwb25zaWJpbGl0aWVzIG9mIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMg
YSBuZXcgY2xhc3MgY2FsbGVkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3IsIHdoaWNoCisgICAgICAg
IHRha2VzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBtYW5hZ2luZyBjb21wb3NpdGluZyByZXNvdXJj
ZXMgaW4KKyAgICAgICAgV2ViUHJvY2Vzcy4KKworICAgICAgICBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Qgbm93IHRha2VzIGEgcGFydCBmb3Igc2NoZWR1bGluZyBhbmQgSVBDCisgICAgICAgIHNw
ZWNpZmljIHBhcnRzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBleGlzdGlu
ZyB0ZXN0cy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6fkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCk6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRSb290
Q29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6Zm9yY2VSZXBhaW50KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpzaXplRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYktpdDo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW5kZXJOZXh0RnJhbWUpOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnB1cmdlQmFja2luZ1N0b3Jlcyk6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6d2lsbFN5bmNMYXllclN0YXRlKToK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwcmVwYXJlQ3VzdG9t
RmlsdGVyUHJveGllc0ZvckFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMpOgorICAgICAg
ICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZUN1c3RvbUZpbHRlclBy
b2dyYW1Qcm94eSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
ZGlkRmx1c2hSb290TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OnBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVQYWdlT3ZlcmxheUxheWVyKToKKyAgICAgICAg
KFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMpOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNvbW1pdFNjZW5lU3Rh
dGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRldmljZU9y
UGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6Z3JhcGhpY3NMYXllckZhY3RvcnkpOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpjb21taXRTY3JvbGxPZmZzZXQpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0
Lmg6CisKIDIwMTMtMDYtMjQgIEthbmdpbCBIYW4gIDxrYW5naWwuaGFuQHNhbXN1bmcuY29tPgog
CiAgICAgICAgIEFkb3B0IGlzL3RvSFRNTEZvcm1FbGVtZW50IGZvciBjb2RlIGNsZWFudXAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKaW5kZXggYzFhY2U1ZTMwYzVlMWYxYWVlNWMxZjJhY2U3OGU1Njc5MzJk
Yzk2Yi4uNjU3MzhmNGFhMjY4YTFmNTZkMDRlODJmNTE2MTJkOGZiMDNlYzk1NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKQEAgLTE5NzYsNiArMTk3Niw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKIAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmNwcAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5h
dG9yLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEJhY2tpbmdTdG9yZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aQppbmRleCBlZTllZGRmNDZlN2IwMGI1NmI1MWU4ZGJlYTQ1OTNiYjFjMzA4OGJkLi5mODlhNGU4
YjI4ZDI4MDk4MGU2MTE5M2YzNDRlY2ZlNWJmMjk4YWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTQwODks
NiArNDA4OSw3IEBAIHVzZT8oM0RfR1JBUEhJQ1MpIHsKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmggXAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5oIFwKKyAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3Iu
aCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEJhY2tpbmdTdG9yZS5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmggXAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRDdXN0b21GaWx0
ZXJQcm9ncmFtLmggXApAQCAtNDEyNCw2ICs0MTI1LDcgQEAgdXNlPygzRF9HUkFQSElDUykgewog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBcCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bS5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJl
YUFsbG9jYXRvci5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwIFwKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllci5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdD
b29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Y29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjVhYWYx
ZTNiZWU2ODAwYjMwNGM0Y2ZlMGJlYzNmYzdlMWVkODdlMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3Np
dGluZ0Nvb3JkaW5hdG9yLmNwcApAQCAtMCwwICsxLDQzNiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQorI2luY2x1ZGUgIkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaCIKKworI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIlBh
Z2UuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5o
PgorI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitQYXNzT3duUHRyPENvbXBvc2l0aW5nQ29vcmRpbmF0b3I+IENvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OmNyZWF0ZShQYWdlKiBwYWdlLCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpDbGllbnQq
IGNsaWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENvbXBvc2l0aW5nQ29vcmRpbmF0
b3IocGFnZSwgY2xpZW50KSk7Cit9CisKK0NvbXBvc2l0aW5nQ29vcmRpbmF0b3I6On5Db21wb3Np
dGluZ0Nvb3JkaW5hdG9yKCkKK3sKKyAgICBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKKworICAgIExh
eWVyTWFwOjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7CisgICAgZm9y
IChMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQorICAgICAgICBpdC0+dmFsdWUtPnNldENvb3JkaW5hdG9yKDApOworfQor
CitDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yKFBhZ2UqIHBh
Z2UsIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudCogY2xpZW50KQorICAgIDogbV9wYWdl
KHBhZ2UpCisgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX3Jvb3RDb21wb3NpdGluZ0xh
eWVyKDApCisgICAgLCBtX2lzUHVyZ2luZyhmYWxzZSkKKyAgICAsIG1faXNGbHVzaGluZ0xheWVy
Q2hhbmdlcyhmYWxzZSkKKyAgICAsIG1fc2hvdWxkU3luY0ZyYW1lKGZhbHNlKQorICAgICwgbV9k
aWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXIoZmFsc2UpCisgICAgLCBtX3JlbGVhc2VJ
bmFjdGl2ZUF0bGFzZXNUaW1lcih0aGlzLCAmQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVsZWFz
ZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQpCisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FKQorICAgICwgbV9sYXN0QW5pbWF0aW9uU2VydmljZVRpbWUoMCkKKyNlbmRpZgorewor
ICAgIG1fcGFnZS0+c2V0dGluZ3MoKS0+c2V0QXBwbHlEZXZpY2VTY2FsZUZhY3RvckluQ29tcG9z
aXRvcih0cnVlKTsKKworICAgIC8vIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd2F5IHRvIGVuYWJsZSB0
aGlzIG9ubHkgaW4gdGhlIEdMIGNhc2UsIHVudGlsIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlciBp
cyByZW1vdmVkLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTE0ODY5CisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRTaG91bGRTdXBw
b3J0Q29udGVudHNUaWxpbmcodHJ1ZSk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRv
cjo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAg
aWYgKG1fcm9vdENvbXBvc2l0aW5nTGF5ZXIpCisgICAgICAgIG1fcm9vdENvbXBvc2l0aW5nTGF5
ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKworICAgIG1fcm9vdENvbXBvc2l0aW5nTGF5ZXIgPSBs
YXllcjsKKyAgICBpZiAobV9yb290Q29tcG9zaXRpbmdMYXllcikKKyAgICAgICAgbV9yb290TGF5
ZXItPmFkZENoaWxkQXRJbmRleChtX3Jvb3RDb21wb3NpdGluZ0xheWVyLCAwKTsKK30KKwordm9p
ZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzaXplRGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIG5l
d1NpemUpCit7CisgICAgbV9yb290TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisgICAgbV9jbGll
bnQtPm5vdGlmeUZsdXNoUmVxdWlyZWQoKTsKK30KKworYm9vbCBDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKQoreworICAgIFRlbXBvcmFyeUNoYW5nZTxi
b29sPiBwcm90ZWN0b3IobV9pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzLCB0cnVlKTsKKworICAgIGlu
aXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKCk7CisKKyAgICBtX3Jvb3RMYXll
ci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIG1fY2xpZW50
LT5kaWRGbHVzaFJvb3RMYXllcigpOworCisgICAgYm9vbCBkaWRTeW5jID0gbV9wYWdlLT5tYWlu
RnJhbWUoKS0+dmlldygpLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMo
KTsKKworICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+
dXBkYXRlQ29udGVudEJ1ZmZlcnNJbmNsdWRpbmdTdWJMYXllcnMoKTsKKyAgICB0b0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnN5bmNQZW5kaW5nU3RhdGVDaGFu
Z2VzSW5jbHVkaW5nU3ViTGF5ZXJzKCk7CisKKyAgICBmbHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdD
aGFuZ2VzKCk7CisKKyAgICBpZiAobV9zaG91bGRTeW5jRnJhbWUpIHsKKyAgICAgICAgZGlkU3lu
YyA9IHRydWU7CisKKyAgICAgICAgaWYgKG1fcm9vdENvbXBvc2l0aW5nTGF5ZXIpIHsKKyAgICAg
ICAgICAgIG1fc3RhdGUuY29udGVudHNTaXplID0gcm91bmRlZEludFNpemUobV9yb290Q29tcG9z
aXRpbmdMYXllci0+c2l6ZSgpKTsKKyAgICAgICAgICAgIGlmIChDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIqIGNvbnRlbnRzTGF5ZXIgPSBtYWluQ29udGVudHNMYXllcigpKQorICAgICAgICAgICAg
ICAgIG1fc3RhdGUuY292ZXJlZFJlY3QgPSBjb250ZW50c0xheWVyLT5jb3ZlclJlY3QoKTsKKyAg
ICAgICAgfQorICAgICAgICBtX3N0YXRlLnNjcm9sbFBvc2l0aW9uID0gbV92aXNpYmxlQ29udGVu
dHNSZWN0LmxvY2F0aW9uKCk7CisKKyAgICAgICAgbV9jbGllbnQtPmNvbW1pdFNjZW5lU3RhdGUo
bV9zdGF0ZSk7CisKKyAgICAgICAgY2xlYXJQZW5kaW5nU3RhdGVDaGFuZ2VzKCk7CisgICAgICAg
IG1fc2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIGRpZFN5bmM7
Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c3luY0Rpc3BsYXlTdGF0ZSgpCit7
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBtX3BhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIo
KS0+ZGlkQmVnaW5GcmFtZSgpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJ
T05fRlJBTUUpICYmICFVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIpICYmICFVU0Uo
UkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQorICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IGFueSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgYW5pbWF0aW9uIGNhbGxiYWNrcyBhcmUg
YmVpbmcgZXhlY3V0ZWQgYmVmb3JlIHdlIGZsdXNoIHRoZSBsYXllcnMuCisgICAgbV9sYXN0QW5p
bWF0aW9uU2VydmljZVRpbWUgPSBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwor
ICAgIG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c2VydmljZVNjcmlwdGVkQW5pbWF0aW9u
cyhtX2xhc3RBbmltYXRpb25TZXJ2aWNlVGltZSk7CisjZW5kaWYKKyAgICBtX3BhZ2UtPm1haW5G
cmFtZSgpLT52aWV3KCktPnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUoKTsK
K30KKworI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKK2RvdWJsZSBDb21wb3Np
dGluZ0Nvb3JkaW5hdG9yOjpuZXh0QW5pbWF0aW9uU2VydmljZVRpbWUoKSBjb25zdAoreworICAg
IC8vIEFjY29yZGluZyB0byB0aGUgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHNwZWMsIHJBRiBjYWxs
YmFja3Mgc2hvdWxkIG5vdCBiZSBmYXN0ZXIgdGhhbiA2MEZQUy4KKyAgICBzdGF0aWMgY29uc3Qg
ZG91YmxlIE1pbmltYWxUaW1lb3V0Rm9yQW5pbWF0aW9ucyA9IDEuIC8gNjAuOworICAgIHJldHVy
biBzdGQ6Om1heDxkb3VibGU+KDAuLCBNaW5pbWFsVGltZW91dEZvckFuaW1hdGlvbnMgLSBXVEY6
Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpICsgbV9sYXN0QW5pbWF0aW9uU2VydmljZVRp
bWUpOworfQorI2VuZGlmCisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y2xlYXJQZW5k
aW5nU3RhdGVDaGFuZ2VzKCkKK3sKKyAgICBtX3N0YXRlLmxheWVyc1RvQ3JlYXRlLmNsZWFyKCk7
CisgICAgbV9zdGF0ZS5sYXllcnNUb1VwZGF0ZS5jbGVhcigpOworICAgIG1fc3RhdGUubGF5ZXJz
VG9SZW1vdmUuY2xlYXIoKTsKKworICAgIG1fc3RhdGUuaW1hZ2VzVG9DcmVhdGUuY2xlYXIoKTsK
KyAgICBtX3N0YXRlLmltYWdlc1RvUmVtb3ZlLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5pbWFnZXNU
b1VwZGF0ZS5jbGVhcigpOworICAgIG1fc3RhdGUuaW1hZ2VzVG9DbGVhci5jbGVhcigpOworCisg
ICAgbV9zdGF0ZS51cGRhdGVBdGxhc2VzVG9DcmVhdGUuY2xlYXIoKTsKKyAgICBtX3N0YXRlLnVw
ZGF0ZUF0bGFzZXNUb1JlbW92ZS5jbGVhcigpOworCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQor
ICAgIG1fc3RhdGUuY3VzdG9tRmlsdGVyc1RvQ3JlYXRlLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5j
dXN0b21GaWx0ZXJzVG9SZW1vdmUuY2xlYXIoKTsKKyNlbmRpZgorfQorCit2b2lkIENvbXBvc2l0
aW5nQ29vcmRpbmF0b3I6OmluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKCkK
K3sKKyAgICBpZiAobV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fc3RhdGUucm9vdENvbXBvc2l0aW5nTGF5ZXIgPSB0b0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmlkKCk7CisgICAgbV9kaWRJbml0
aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXIgPSB0cnVlOworICAgIG1fc2hvdWxkU3luY0ZyYW1l
ID0gdHJ1ZTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVSb290TGF5
ZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBBU1NFUlQoIW1fcm9vdExheWVyKTsKKyAg
ICAvLyBDcmVhdGUgYSByb290IGxheWVyLgorICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NMYXll
cjo6Y3JlYXRlKHRoaXMsIHRoaXMpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX3Jvb3RMYXllci0+
c2V0TmFtZSgiQ29tcG9zaXRpbmdDb29yZGluYXRvciByb290IGxheWVyIik7CisjZW5kaWYKKyAg
ICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKKyAgICBtX3Jvb3RMYXllci0+
c2V0U2l6ZShzaXplKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzeW5jTGF5
ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0
YXRlJiBzdGF0ZSkKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisKKyAgICBtX2Ns
aWVudC0+d2lsbFN5bmNMYXllclN0YXRlKHN0YXRlKTsKKworICAgIG1fc3RhdGUubGF5ZXJzVG9V
cGRhdGUuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGlkLCBzdGF0ZSkpOworfQorCitQYXNzUmVmUHRy
PENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVJ
bWFnZUJhY2tpbmdJZk5lZWRlZChJbWFnZSogaW1hZ2UpCit7CisgICAgQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCBpbWFnZUlEID0gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmdldENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQoaW1hZ2UpOworICAgIEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3Ig
aXQgPSBtX2ltYWdlQmFja2luZ3MuZmluZChpbWFnZUlEKTsKKyAgICBSZWZQdHI8Q29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmc+IGltYWdlQmFja2luZzsKKyAgICBpZiAoaXQgPT0gbV9pbWFnZUJhY2tp
bmdzLmVuZCgpKSB7CisgICAgICAgIGltYWdlQmFja2luZyA9IENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nOjpjcmVhdGUodGhpcywgaW1hZ2UpOworICAgICAgICBtX2ltYWdlQmFja2luZ3MuYWRkKGlt
YWdlSUQsIGltYWdlQmFja2luZyk7CisgICAgfSBlbHNlCisgICAgICAgIGltYWdlQmFja2luZyA9
IGl0LT52YWx1ZTsKKworICAgIHJldHVybiBpbWFnZUJhY2tpbmc7Cit9CisKK3ZvaWQgQ29tcG9z
aXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBtX3N0YXRlLmltYWdlc1RvQ3JlYXRlLmFwcGVuZChpbWFn
ZUlEKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVJbWFnZUJhY2tp
bmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlELCBQYXNzUmVmUHRyPENvb3JkaW5h
dGVkU3VyZmFjZT4gY29vcmRpbmF0ZWRTdXJmYWNlKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1l
ID0gdHJ1ZTsKKyAgICBtX3N0YXRlLmltYWdlc1RvVXBkYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFp
cihpbWFnZUlELCBjb29yZGluYXRlZFN1cmZhY2UpKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV9z
dGF0ZS5pbWFnZXNUb0NsZWFyLmFwcGVuZChpbWFnZUlEKTsKK30KKwordm9pZCBDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCBpbWFnZUlEKQoreworICAgIGlmIChtX2lzUHVyZ2luZykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFnZUlEKSk7CisgICAgbV9pbWFn
ZUJhY2tpbmdzLnJlbW92ZShpbWFnZUlEKTsKKworICAgIG1fc3RhdGUuaW1hZ2VzVG9SZW1vdmUu
YXBwZW5kKGltYWdlSUQpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmZsdXNo
UGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKQoreworICAgIEltYWdlQmFja2luZ01hcDo6aXRl
cmF0b3IgZW5kID0gbV9pbWFnZUJhY2tpbmdzLmVuZCgpOworICAgIGZvciAoSW1hZ2VCYWNraW5n
TWFwOjppdGVyYXRvciBpdGVyID0gbV9pbWFnZUJhY2tpbmdzLmJlZ2luKCk7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpCisgICAgICAgIGl0ZXItPnZhbHVlLT51cGRhdGUoKTsKK30KKwordm9pZCBDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yOjpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNz
TGF5ZXIqLCBkb3VibGUgLyogdGltZSAqLykKK3sKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yOjpub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKQoreworICAg
IG1fY2xpZW50LT5ub3RpZnlGbHVzaFJlcXVpcmVkKCk7Cit9CisKKwordm9pZCBDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNz
TGF5ZXIsIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBHcmFwaGljc0xheWVyUGFp
bnRpbmdQaGFzZSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCit7CisgICAgbV9jbGllbnQtPnBh
aW50TGF5ZXJDb250ZW50cyhncmFwaGljc0xheWVyLCBncmFwaGljc0NvbnRleHQsIGNsaXBSZWN0
KTsKK30KKworUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
OjpjcmVhdGVHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKK3sKKyAg
ICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbmV3IENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcihjbGllbnQpOworICAgIGxheWVyLT5zZXRDb29yZGluYXRvcih0aGlzKTsKKyAgICBt
X3JlZ2lzdGVyZWRMYXllcnMuYWRkKGxheWVyLT5pZCgpLCBsYXllcik7CisgICAgbV9zdGF0ZS5s
YXllcnNUb0NyZWF0ZS5hcHBlbmQobGF5ZXItPmlkKCkpOworICAgIGxheWVyLT5zZXROZWVkc1Zp
c2libGVSZWN0QWRqdXN0bWVudCgpOworICAgIG1fY2xpZW50LT5ub3RpZnlGbHVzaFJlcXVpcmVk
KCk7CisgICAgcmV0dXJuIGFkb3B0UHRyKGxheWVyKTsKK30KKworZmxvYXQgQ29tcG9zaXRpbmdD
b29yZGluYXRvcjo6ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX3Bh
Z2UtPmRldmljZVNjYWxlRmFjdG9yKCk7Cit9CisKK2Zsb2F0IENvbXBvc2l0aW5nQ29vcmRpbmF0
b3I6OnBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZS0+cGFnZVNj
YWxlRmFjdG9yKCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlVXBk
YXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+
IGNvb3JkaW5hdGVkU3VyZmFjZSkKK3sKKyAgICBtX3N0YXRlLnVwZGF0ZUF0bGFzZXNUb0NyZWF0
ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoYXRsYXNJRCwgY29vcmRpbmF0ZWRTdXJmYWNlKSk7Cit9
CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVtb3ZlVXBkYXRlQXRsYXModWludDMy
X3QgYXRsYXNJRCkKK3sKKyAgICBpZiAobV9pc1B1cmdpbmcpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX3N0YXRlLnVwZGF0ZUF0bGFzZXNUb1JlbW92ZS5hcHBlbmQoYXRsYXNJRCk7Cit9CisKK0Zs
b2F0UmVjdCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV92aXNpYmxlQ29udGVudHNSZWN0OworfQorCitDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIqIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6Om1haW5Db250ZW50c0xheWVy
KCkKK3sKKyAgICBpZiAoIW1fcm9vdENvbXBvc2l0aW5nTGF5ZXIpCisgICAgICAgIHJldHVybiAw
OworCisgICAgcmV0dXJuIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdENvbXBvc2l0
aW5nTGF5ZXIpLT5maW5kRmlyc3REZXNjZW5kYW50V2l0aENvbnRlbnRzUmVjdXJzaXZlbHkoKTsK
K30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3Rv
cikKK3sKKyAgICAvLyBBIHplcm8gdHJhamVjdG9yeVZlY3RvciBpbmRpY2F0ZXMgdGhhdCB0aWxl
cyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9ydCBhcmUgcmVxdWVzdGVkLgorICAgIGlmIChDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIqIGNvbnRlbnRzTGF5ZXIgPSBtYWluQ29udGVudHNMYXllcigpKQor
ICAgICAgICBjb250ZW50c0xheWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVj
dG9yKHRyYWplY3RvcnlWZWN0b3IpOworCisgICAgYm9vbCBjb250ZW50c1JlY3REaWRDaGFuZ2Ug
PSByZWN0ICE9IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICBpZiAoY29udGVudHNSZWN0RGlk
Q2hhbmdlKSB7CisgICAgICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7CisKKyAgICAg
ICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKKyAg
ICAgICAgZm9yIChMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXROZWVkc1Zp
c2libGVSZWN0QWRqdXN0bWVudCgpOworICAgIH0KKworICAgIEZyYW1lVmlldyogdmlldyA9IG1f
cGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKyAgICBpZiAodmlldy0+dXNlRml4ZWRMYXlvdXQo
KSkgeworICAgICAgICAvLyBSb3VuZCB0aGUgcmVjdCBpbnN0ZWFkIG9mIGVuY2xvc2luZyBpdCB0
byBtYWtlIHN1cmUgdGhhdCBpdHMgc2l6ZSBzdGF5cworICAgICAgICAvLyB0aGUgc2FtZSB3aGls
ZSBwYW5uaW5nLiBUaGlzIGNhbiBoYXZlIG5hc3R5IGVmZmVjdHMgb24gbGF5b3V0LgorICAgICAg
ICB2aWV3LT5zZXRGaXhlZFZpc2libGVDb250ZW50UmVjdChyb3VuZGVkSW50UmVjdChyZWN0KSk7
CisgICAgfQorfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRldmljZU9yUGFnZVNj
YWxlRmFjdG9yQ2hhbmdlZCgpCit7CisgICAgbV9yb290TGF5ZXItPmRldmljZU9yUGFnZVNjYWxl
RmFjdG9yQ2hhbmdlZCgpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRldGFj
aExheWVyKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgaWYgKG1faXNQ
dXJnaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3JlZ2lzdGVyZWRMYXllcnMucmVtb3Zl
KGxheWVyLT5pZCgpKTsKKworICAgIHNpemVfdCBpbmRleCA9IG1fc3RhdGUubGF5ZXJzVG9DcmVh
dGUuZmluZChsYXllci0+aWQoKSk7CisgICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKSB7CisgICAg
ICAgIG1fc3RhdGUubGF5ZXJzVG9DcmVhdGUucmVtb3ZlKGluZGV4KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG1fc3RhdGUubGF5ZXJzVG9SZW1vdmUuYXBwZW5kKGxheWVyLT5pZCgp
KTsKKyAgICBtX2NsaWVudC0+bm90aWZ5Rmx1c2hSZXF1aXJlZCgpOworfQorCit2b2lkIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OmNvbW1pdFNjcm9sbE9mZnNldCh1aW50MzJfdCBsYXllcklELCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBvZmZzZXQpCit7CisgICAgTGF5ZXJNYXA6Oml0ZXJhdG9y
IGkgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZmluZChsYXllcklEKTsKKyAgICBpZiAoaSA9PSBtX3Jl
Z2lzdGVyZWRMYXllcnMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGktPnZhbHVlLT5j
b21taXRTY3JvbGxPZmZzZXQob2Zmc2V0KTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpyZW5kZXJOZXh0RnJhbWUoKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fdXBkYXRlQXRsYXNlc1tpXS0+
ZGlkU3dhcEJ1ZmZlcnMoKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpwdXJn
ZUJhY2tpbmdTdG9yZXMoKQoreworICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiBwdXJnaW5nVG9n
Z2xlKG1faXNQdXJnaW5nLCB0cnVlKTsKKworICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBt
X3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7CisgICAgZm9yIChMYXllck1hcDo6aXRlcmF0b3IgaXQg
PSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBp
dC0+dmFsdWUtPnB1cmdlQmFja2luZ1N0b3JlcygpOworCisgICAgbV9pbWFnZUJhY2tpbmdzLmNs
ZWFyKCk7CisgICAgbV91cGRhdGVBdGxhc2VzLmNsZWFyKCk7Cit9CisKK2Jvb2wgQ29tcG9zaXRp
bmdDb29yZGluYXRvcjo6cGFpbnRUb1N1cmZhY2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29vcmRp
bmF0ZWRTdXJmYWNlOjpGbGFncyBmbGFncywgdWludDMyX3QmIGF0bGFzSUQsIEludFBvaW50JiBv
ZmZzZXQsIENvb3JkaW5hdGVkU3VyZmFjZTo6Q2xpZW50KiBjbGllbnQpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkgeworICAgICAg
ICBVcGRhdGVBdGxhcyogYXRsYXMgPSBtX3VwZGF0ZUF0bGFzZXNbaV0uZ2V0KCk7CisgICAgICAg
IGlmIChhdGxhcy0+c3VwcG9ydHNBbHBoYSgpID09IChmbGFncyAmIENvb3JkaW5hdGVkU3VyZmFj
ZTo6U3VwcG9ydHNBbHBoYSkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBiZSBmYWxzZSBp
ZiB0aGVyZSBpcyBubyBhdmFpbGFibGUgYnVmZmVyIHNwYWNlLgorICAgICAgICAgICAgaWYgKGF0
bGFzLT5wYWludE9uQXZhaWxhYmxlQnVmZmVyKHNpemUsIGF0bGFzSUQsIG9mZnNldCwgY2xpZW50
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHN0YXRpYyBjb25zdCBpbnQgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiA9IDEwMjQ7IC8vIFNob3Vs
ZCBiZSBhIHBvd2VyIG9mIHR3by4KKyAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKGFkb3B0UHRy
KG5ldyBVcGRhdGVBdGxhcyh0aGlzLCBTY3JhdGNoQnVmZmVyRGltZW5zaW9uLCBmbGFncykpKTsK
KyAgICBzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMoKTsKKyAgICByZXR1cm4gbV91cGRh
dGVBdGxhc2VzLmxhc3QoKS0+cGFpbnRPbkF2YWlsYWJsZUJ1ZmZlcihzaXplLCBhdGxhc0lELCBv
ZmZzZXQsIGNsaWVudCk7Cit9CisKK2NvbnN0IGRvdWJsZSBSZWxlYXNlSW5hY3RpdmVBdGxhc2Vz
VGltZXJJbnRlcnZhbCA9IDAuNTsKKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzY2hl
ZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMoKQoreworICAgIGlmICghbV9yZWxlYXNlSW5hY3Rp
dmVBdGxhc2VzVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9yZWxlYXNlSW5hY3RpdmVBdGxh
c2VzVGltZXIuc3RhcnRSZXBlYXRpbmcoUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2
YWwpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJlbGVhc2VJbmFjdGl2ZUF0
bGFzZXNUaW1lckZpcmVkKFRpbWVyPENvbXBvc2l0aW5nQ29vcmRpbmF0b3I+KikKK3sKKyAgICAv
LyBXZSBhbHdheXMgd2FudCB0byBrZWVwIG9uZSBhdGxhcyBmb3Igbm9uLWNvbXBvc2l0ZWQgY29u
dGVudC4KKyAgICBPd25QdHI8VXBkYXRlQXRsYXM+IGF0bGFzVG9LZWVwQW55d2F5OworICAgIGJv
b2wgZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ID0gZmFsc2U7CisgICAg
Zm9yIChpbnQgaSA9IG1fdXBkYXRlQXRsYXNlcy5zaXplKCkgLSAxOyAgaSA+PSAwOyAtLWkpIHsK
KyAgICAgICAgVXBkYXRlQXRsYXMqIGF0bGFzID0gbV91cGRhdGVBdGxhc2VzW2ldLmdldCgpOwor
ICAgICAgICBpZiAoIWF0bGFzLT5pc0luVXNlKCkpCisgICAgICAgICAgICBhdGxhcy0+YWRkVGlt
ZUluYWN0aXZlKFJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckludGVydmFsKTsKKyAgICAgICAg
Ym9vbCB1c2FibGVGb3JOb25Db21wb3NpdGVkQ29udGVudCA9ICFhdGxhcy0+c3VwcG9ydHNBbHBo
YSgpOworICAgICAgICBpZiAoYXRsYXMtPmlzSW5hY3RpdmUoKSkgeworICAgICAgICAgICAgaWYg
KCFmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgJiYgIWF0bGFzVG9LZWVw
QW55d2F5ICYmIHVzYWJsZUZvck5vbkNvbXBvc2l0ZWRDb250ZW50KQorICAgICAgICAgICAgICAg
IGF0bGFzVG9LZWVwQW55d2F5ID0gbV91cGRhdGVBdGxhc2VzW2ldLnJlbGVhc2UoKTsKKyAgICAg
ICAgICAgIG1fdXBkYXRlQXRsYXNlcy5yZW1vdmUoaSk7CisgICAgICAgIH0gZWxzZSBpZiAodXNh
YmxlRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQpCisgICAgICAgICAgICBmb3VuZEFjdGl2ZUF0bGFz
Rm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgPSB0cnVlOworICAgIH0KKworICAgIGlmICghZm91bmRB
Y3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ICYmIGF0bGFzVG9LZWVwQW55d2F5KQor
ICAgICAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKGF0bGFzVG9LZWVwQW55d2F5LnJlbGVhc2Uo
KSk7CisKKyAgICBpZiAobV91cGRhdGVBdGxhc2VzLnNpemUoKSA8PSAxKQorICAgICAgICBtX3Jl
bGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5zdG9wKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21w
b3NpdGluZ0Nvb3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4
MGZkODNhZmExOWJmODlkMDQ0MGJlMjljZmVlYzVkNDI1YzI5OGYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29t
cG9zaXRpbmdDb29yZGluYXRvci5oCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
ICogQ29weXJpZ2h0IChDKSAyMDEzIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgQ29tcG9zaXRpbmdDb29yZGluYXRvcl9oCisjZGVmaW5l
IENvbXBvc2l0aW5nQ29vcmRpbmF0b3JfaAorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiQ29v
cmRpbmF0ZWRHcmFwaGljc1N0YXRlLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmcuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNs
aWVudC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJGYWN0b3J5LmgiCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiVXBkYXRlQXRsYXMuaCIKKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisjaW5jbHVk
ZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgUGFnZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEdyYXBoaWNzTGF5ZXI7
CitjbGFzcyBDb29yZGluYXRlZFN1cmZhY2U7CisKK2NsYXNzIENvbXBvc2l0aW5nQ29vcmRpbmF0
b3IgOiBwdWJsaWMgR3JhcGhpY3NMYXllckNsaWVudAorICAgICwgcHVibGljIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllckNsaWVudAorICAgICwgcHVibGljIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
OjpDbGllbnQKKyAgICAsIHB1YmxpYyBVcGRhdGVBdGxhczo6Q2xpZW50CisgICAgLCBwdWJsaWMg
R3JhcGhpY3NMYXllckZhY3RvcnkgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbXBvc2l0
aW5nQ29vcmRpbmF0b3IpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBj
bGFzcyBDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZsdXNo
Um9vdExheWVyKCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFN5bmNMYXllclN0YXRl
KENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJikgPSAwOworICAgICAgICB2aXJ0dWFsIHZv
aWQgbm90aWZ5Rmx1c2hSZXF1aXJlZCgpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNvbW1p
dFNjZW5lU3RhdGUoQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJikgPSAwOworICAgICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkgPSAwOworICAgIH07CisKKyAgICBz
dGF0aWMgUGFzc093blB0cjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiBjcmVhdGUoUGFnZSosIENv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudCopOworICAgIHZpcnR1YWwgfkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3IoKTsKKworICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhp
Y3NMYXllciopOworICAgIHZvaWQgc2l6ZURpZENoYW5nZShjb25zdCBJbnRTaXplJiBuZXdTaXpl
KTsKKyAgICB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOworCisgICAgdm9p
ZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9p
bnQmKTsKKyAgICB2b2lkIHJlbmRlck5leHRGcmFtZSgpOworICAgIHZvaWQgcHVyZ2VCYWNraW5n
U3RvcmVzKCk7CisgICAgdm9pZCBjb21taXRTY3JvbGxPZmZzZXQodWludDMyX3QgbGF5ZXJJRCwg
Y29uc3QgSW50U2l6ZSYgb2Zmc2V0KTsKKworICAgIHZvaWQgY3JlYXRlUm9vdExheWVyKGNvbnN0
IEludFNpemUmKTsKKyAgICB2b2lkIGNsZWFyUm9vdExheWVyKCkgeyBtX3Jvb3RMYXllciA9IG51
bGxwdHI7IH0KKyAgICBHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBt
X3Jvb3RMYXllci5nZXQoKTsgfQorICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbWFpbkNv
bnRlbnRzTGF5ZXIoKTsKKworICAgIGJvb2wgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7Cisg
ICAgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJiBzdGF0ZSgpIHsgcmV0dXJuIG1fc3RhdGU7IH0K
KworICAgIHZvaWQgc3luY0Rpc3BsYXlTdGF0ZSgpOworCisjaWYgRU5BQkxFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FKQorICAgIGRvdWJsZSBuZXh0QW5pbWF0aW9uU2VydmljZVRpbWUoKSBjb25z
dDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3IoUGFnZSos
IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudCopOworCisgICAgLy8gR3JhcGhpY3NMYXll
ckNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdy
YXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIG5v
dGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0Nv
bnRleHQmLCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVjdCYgY2xpcFJl
Y3QpIE9WRVJSSURFOworICAgIHZpcnR1YWwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0IE9W
RVJSSURFOworCisgICAgLy8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNsaWVudAorICAgIHZp
cnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbWFnZUJh
Y2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7CisKKyAgICAvLyBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFsIGJvb2wgaXNGbHVzaGluZ0xh
eWVyQ2hhbmdlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faXNGbHVzaGluZ0xheWVyQ2hh
bmdlczsgfQorICAgIHZpcnR1YWwgRmxvYXRSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKEltYWdlKikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIGRldGFjaExheWVyKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopIE9WRVJSSURF
OworICAgIHZpcnR1YWwgYm9vbCBwYWludFRvU3VyZmFjZShjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMyX3QmIC8qIGF0bGFz
SUQgKi8sIFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpD
bGllbnQqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoQ29vcmRp
bmF0ZWRMYXllcklELCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpIE9WRVJSSURFOwor
CisgICAgLy8gVXBkYXRlQXRsYXM6OkNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVVcGRh
dGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4p
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBh
dGxhc0lEKSBPVkVSUklERTsKKworICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5CisgICAgdmly
dHVhbCBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdyYXBoaWNzTGF5ZXIoR3JhcGhp
Y3NMYXllckNsaWVudCopIE9WRVJSSURFOworCisgICAgdm9pZCBpbml0aWFsaXplUm9vdENvbXBv
c2l0aW5nTGF5ZXJJZk5lZWRlZCgpOworICAgIHZvaWQgZmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5n
Q2hhbmdlcygpOworICAgIHZvaWQgY2xlYXJQZW5kaW5nU3RhdGVDaGFuZ2VzKCk7CisKKyAgICB2
b2lkIHNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpOworCisgICAgdm9pZCByZWxlYXNl
SW5hY3RpdmVBdGxhc2VzVGltZXJGaXJlZChUaW1lcjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiop
OworCisgICAgUGFnZSogbV9wYWdlOworICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVu
dCogbV9jbGllbnQ7CisKKyAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7Cisg
ICAgR3JhcGhpY3NMYXllciogbV9yb290Q29tcG9zaXRpbmdMYXllcjsKKworICAgIENvb3JkaW5h
dGVkR3JhcGhpY3NTdGF0ZSBtX3N0YXRlOworCisgICAgdHlwZWRlZiBIYXNoTWFwPENvb3JkaW5h
dGVkTGF5ZXJJRCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj4gTGF5ZXJNYXA7CisgICAgTGF5
ZXJNYXAgbV9yZWdpc3RlcmVkTGF5ZXJzOworICAgIHR5cGVkZWYgSGFzaE1hcDxDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lELCBSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+ID4gSW1hZ2VC
YWNraW5nTWFwOworICAgIEltYWdlQmFja2luZ01hcCBtX2ltYWdlQmFja2luZ3M7CisgICAgVmVj
dG9yPE93blB0cjxVcGRhdGVBdGxhcz4gPiBtX3VwZGF0ZUF0bGFzZXM7CisKKyAgICAvLyBXZSBk
b24ndCBzZW5kIHRoZSBtZXNzYWdlcyByZWxhdGVkIHRvIHJlbGVhc2luZyByZXNvdXJjZXMgdG8g
cmVuZGVyZXIgZHVyaW5nIHB1cmdpbmcsIGJlY2F1c2UgcmVuZGVyZXIgYWxyZWFkeSBoYWQgcmVt
b3ZlZCBhbGwgcmVzb3VyY2VzLgorICAgIGJvb2wgbV9pc1B1cmdpbmc7CisgICAgYm9vbCBtX2lz
Rmx1c2hpbmdMYXllckNoYW5nZXM7CisKKyAgICBGbG9hdFJlY3QgbV92aXNpYmxlQ29udGVudHNS
ZWN0OworCisgICAgYm9vbCBtX3Nob3VsZFN5bmNGcmFtZTsKKyAgICBib29sIG1fZGlkSW5pdGlh
bGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyOworICAgIFRpbWVyPENvbXBvc2l0aW5nQ29vcmRpbmF0
b3I+IG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyOworCisjaWYgRU5BQkxFKFJFUVVFU1Rf
QU5JTUFUSU9OX0ZSQU1FKQorICAgIGRvdWJsZSBtX2xhc3RBbmltYXRpb25TZXJ2aWNlVGltZTsK
KyNlbmRpZgorfTsKKworfQorCisjZW5kaWYKKworI2VuZGlmIC8vIENvbXBvc2l0aW5nQ29vcmRp
bmF0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMTg2YjJlYjY2NGUxOGRmOWE4OTVjMDVjOTA0NGY4NjUw
NjU1NmZlMy4uNTkwYjc0YzA3ODlkNWQ1NjkzMGMwYzkzYWUxZGIyNzA0NDQwYzZhNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhv
c3QuY3BwCkBAIC00MCwxOCArNDAsOCBAQAogI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2Vz
LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVW
aWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1N1cmZhY2UuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0luc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5k
ZXJMYXllckJhY2tpbmcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
U2V0dGluZ3MuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1N1cmZhY2VVcGRhdGVJbmZvLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oPgogI2luY2x1ZGUgPHd0
Zi9DdXJyZW50VGltZS5oPgotI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KIAogI2lm
IEVOQUJMRShDU1NfU0hBREVSUykKICNpbmNsdWRlICJDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9n
cmFtLmgiCkBAIC03Miw1MSArNjIsMjYgQEAgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp+Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0KCkKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAgICAgZGlz
Y29ubmVjdEN1c3RvbUZpbHRlclByb2dyYW1zKCk7CiAjZW5kaWYKLSAgICBwdXJnZUJhY2tpbmdT
dG9yZXMoKTsKLQotICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXll
cnMuZW5kKCk7Ci0gICAgZm9yIChMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRM
YXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+dmFsdWUtPnNldENv
b3JkaW5hdG9yKDApOwogfQogCiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdChXZWJQYWdlKiB3ZWJQYWdlKQogICAgIDogTGF5ZXJUcmVlSG9zdCh3ZWJQ
YWdlKQotICAgICwgbV9yb290Q29tcG9zaXRpbmdMYXllcigwKQogICAgICwgbV9ub3RpZnlBZnRl
clNjaGVkdWxlZExheWVyRmx1c2goZmFsc2UpCiAgICAgLCBtX2lzVmFsaWQodHJ1ZSkKLSAgICAs
IG1faXNQdXJnaW5nKGZhbHNlKQotICAgICwgbV9pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKGZhbHNl
KQotICAgICwgbV93YWl0aW5nRm9yVUlQcm9jZXNzKHRydWUpCiAgICAgLCBtX2lzU3VzcGVuZGVk
KGZhbHNlKQotICAgICwgbV9zaG91bGRTeW5jRnJhbWUoZmFsc2UpCi0gICAgLCBtX2RpZEluaXRp
YWxpemVSb290Q29tcG9zaXRpbmdMYXllcihmYWxzZSkKKyAgICAsIG1faXNXYWl0aW5nRm9yUmVu
ZGVyZXIodHJ1ZSkKICAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmxheWVyRmx1c2hUaW1lckZpcmVkKQotICAgICwgbV9yZWxlYXNlSW5hY3Rp
dmVBdGxhc2VzVGltZXIodGhpcywgJkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVsZWFzZUlu
YWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQpCiAgICAgLCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5h
YmxlZCh0cnVlKQogICAgICwgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQoMCkKLSAgICAs
IG1fYW5pbWF0aW9uc0xvY2tlZChmYWxzZSkKLSNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05f
RlJBTUUpCi0gICAgLCBtX2xhc3RBbmltYXRpb25TZXJ2aWNlVGltZSgwKQotI2VuZGlmCiB7Ci0g
ICAgbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBcHBseURldmljZVNjYWxl
RmFjdG9ySW5Db21wb3NpdG9yKHRydWUpOworICAgIG1fY29vcmRpbmF0b3IgPSBDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpjcmVhdGUod2ViUGFnZS0+Y29yZVBhZ2UoKSwgdGhpcyk7CiAKLSAgICAv
LyBDcmVhdGUgYSByb290IGxheWVyLgotICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6
Y3JlYXRlKHRoaXMsIHRoaXMpOwotI2lmbmRlZiBOREVCVUcKLSAgICBtX3Jvb3RMYXllci0+c2V0
TmFtZSgiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IHJvb3QgbGF5ZXIiKTsKLSNlbmRpZgotICAg
IG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOwotICAgIG1fcm9vdExheWVyLT5z
ZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKLSAgICBtX2xheWVyVHJlZUNvbnRleHQuY29vcmRp
bmF0ZWRMYXllcklEID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0
KCkpLT5pZCgpOworICAgIG1fY29vcmRpbmF0b3ItPmNyZWF0ZVJvb3RMYXllcih3ZWJQYWdlLT5z
aXplKCkpOworICAgIG1fbGF5ZXJUcmVlQ29udGV4dC5jb29yZGluYXRlZExheWVySUQgPSB0b0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX2Nvb3JkaW5hdG9yLT5yb290TGF5ZXIoKSktPmlkKCk7
CiAKICAgICBDb29yZGluYXRlZFN1cmZhY2U6OnNldEZhY3RvcnkoY3JlYXRlQ29vcmRpbmF0ZWRT
dXJmYWNlKTsKIAotICAgIC8vIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd2F5IHRvIGVuYWJsZSB0aGlz
IG9ubHkgaW4gdGhlIEdMIGNhc2UsIHVudGlsIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlciBpcyBy
ZW1vdmVkLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTE0ODY5Ci0gICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRTaG91bGRTdXBwb3J0
Q29udGVudHNUaWxpbmcodHJ1ZSk7Ci0KLSAgICBpZiAobV93ZWJQYWdlLT5oYXNQYWdlT3Zlcmxh
eSgpKQorICAgIGlmICh3ZWJQYWdlLT5oYXNQYWdlT3ZlcmxheSgpKQogICAgICAgICBjcmVhdGVQ
YWdlT3ZlcmxheUxheWVyKCk7CiAKICAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKQEAgLTE1OCwx
MiArMTIzLDcgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFNob3VsZE5vdGlm
eUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbAogCiB2b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciogZ3JhcGhpY3NMYXllcikKIHsKLSAgICBpZiAobV9yb290Q29tcG9zaXRpbmdMYXllcikKLSAg
ICAgICAgbV9yb290Q29tcG9zaXRpbmdMYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotCi0gICAg
bV9yb290Q29tcG9zaXRpbmdMYXllciA9IGdyYXBoaWNzTGF5ZXI7Ci0gICAgaWYgKG1fcm9vdENv
bXBvc2l0aW5nTGF5ZXIpCi0gICAgICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZEF0SW5kZXgobV9y
b290Q29tcG9zaXRpbmdMYXllciwgMCk7CisgICAgbV9jb29yZGluYXRvci0+c2V0Um9vdENvbXBv
c2l0aW5nTGF5ZXIoZ3JhcGhpY3NMYXllcik7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjppbnZhbGlkYXRlKCkKQEAgLTE3MSw3ICsxMzEsNyBAQCB2b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6aW52YWxpZGF0ZSgpCiAgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2go
KTsKIAogICAgIEFTU0VSVChtX2lzVmFsaWQpOwotICAgIG1fcm9vdExheWVyID0gbnVsbHB0cjsK
KyAgICBtX2Nvb3JkaW5hdG9yLT5jbGVhclJvb3RMYXllcigpOwogICAgIG1faXNWYWxpZCA9IGZh
bHNlOwogfQogCkBAIC0xNzksMTIgKzEzOSwxMiBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6Zm9yY2VSZXBhaW50KCkKIHsKICAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgcnVu
bmluZyBsYXlvdXQgdGVzdHMuIFNpbmNlIGluIHRoaXMgY2FzZSB3ZSBhcmUgbm90IHdhaXRpbmcg
Zm9yIGEgVUlQcm9jZXNzIHRvIHJlcGx5IG5pY2VseS4KICAgICAvLyBJbnN0ZWFkIHdlIGFyZSBq
dXN0IHRyaWdnZXJpbmcgZm9yY2VSZXBhaW50LiBCdXQgd2Ugc3RpbGwgd2FudCB0byBoYXZlIHRo
ZSBzY3JpcHRlZCBhbmltYXRpb24gY2FsbGJhY2tzIGJlaW5nIGV4ZWN1dGVkLgotICAgIHN5bmNE
aXNwbGF5U3RhdGUoKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5zeW5jRGlzcGxheVN0YXRlKCk7CiAK
ICAgICAvLyBXZSBuZWVkIHRvIHNjaGVkdWxlIGFub3RoZXIgZmx1c2gsIG90aGVyd2lzZSB0aGUg
Zm9yY2VkIHBhaW50IG1pZ2h0IGNhbmNlbCBhIGxhdGVyIGV4cGVjdGVkIGZsdXNoLgogICAgIC8v
IFRoaXMgaXMgYWxpZ25lZCB3aXRoIExheWVyVHJlZUhvc3RDQS4KICAgICBzY2hlZHVsZUxheWVy
Rmx1c2goKTsKLSAgICBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKKyAgICBtX2Nvb3JkaW5h
dG9yLT5mbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKIH0KIAogYm9vbCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmZvcmNlUmVwYWludEFzeW5jKHVpbnQ2NF90IGNhbGxiYWNrSUQpCkBAIC0x
OTgsNyArMTU4LDcgQEAgYm9vbCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZvcmNlUmVwYWlu
dEFzeW5jKHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpCiB7Ci0g
ICAgbV9yb290TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisgICAgbV9jb29yZGluYXRvci0+c2l6
ZURpZENoYW5nZShuZXdTaXplKTsKICAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKIH0KIApAQCAt
MjMzLDExMSArMTkzLDQ5IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRQYWdl
T3ZlcmxheU9wYWNpdHkoUGFnZU92ZXJsYXkqLCBmbG9hdCB2YWx1ZSkKICAgICBzY2hlZHVsZUxh
eWVyRmx1c2goKTsKIH0KIAotYm9vbCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZsdXNoUGVu
ZGluZ0xheWVyQ2hhbmdlcygpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0Vmlz
aWJsZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0UG9pbnQm
IHRyYWplY3RvcnlWZWN0b3IpCiB7Ci0gICAgaWYgKG1fd2FpdGluZ0ZvclVJUHJvY2VzcykKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IHByb3RlY3Rv
cihtX2lzRmx1c2hpbmdMYXllckNoYW5nZXMsIHRydWUpOwotCi0gICAgaW5pdGlhbGl6ZVJvb3RD
b21wb3NpdGluZ0xheWVySWZOZWVkZWQoKTsKLQotICAgIG1fcm9vdExheWVyLT5mbHVzaENvbXBv
c2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0gICAgaWYgKG1fcGFnZU92ZXJsYXlMYXll
cikKLSAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KCk7Ci0KLSAgICBib29sIGRpZFN5bmMgPSBtX3dlYlBhZ2UtPmNvcmVQYWdl
KCktPm1haW5GcmFtZSgpLT52aWV3KCktPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1
YmZyYW1lcygpOwotCi0gICAgdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIu
Z2V0KCkpLT51cGRhdGVDb250ZW50QnVmZmVyc0luY2x1ZGluZ1N1YkxheWVycygpOwotICAgIHRv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+c3luY1BlbmRpbmdT
dGF0ZUNoYW5nZXNJbmNsdWRpbmdTdWJMYXllcnMoKTsKLQotICAgIGZsdXNoUGVuZGluZ0ltYWdl
QmFja2luZ0NoYW5nZXMoKTsKLQotICAgIGlmIChtX3Nob3VsZFN5bmNGcmFtZSkgewotICAgICAg
ICBkaWRTeW5jID0gdHJ1ZTsKLQotICAgICAgICBpZiAobV9yb290Q29tcG9zaXRpbmdMYXllcikg
ewotICAgICAgICAgICAgbV9zdGF0ZS5jb250ZW50c1NpemUgPSByb3VuZGVkSW50U2l6ZShtX3Jv
b3RDb21wb3NpdGluZ0xheWVyLT5zaXplKCkpOwotICAgICAgICAgICAgaWYgKENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllciogY29udGVudHNMYXllciA9IG1haW5Db250ZW50c0xheWVyKCkpCi0gICAg
ICAgICAgICAgICAgbV9zdGF0ZS5jb3ZlcmVkUmVjdCA9IGNvbnRlbnRzTGF5ZXItPmNvdmVyUmVj
dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9zdGF0ZS5zY3JvbGxQb3NpdGlvbiA9IG1fdmlz
aWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpOwotCi0gICAgICAgIG1fd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNvbW1pdENvb3JkaW5hdGVk
R3JhcGhpY3NTdGF0ZShtX3N0YXRlKSk7Ci0KLSAgICAgICAgY2xlYXJQZW5kaW5nU3RhdGVDaGFu
Z2VzKCk7Ci0gICAgICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9IHRydWU7Ci0gICAgICAgIG1f
c2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1fZm9yY2VSZXBhaW50
QXN5bmNDYWxsYmFja0lEKSB7Ci0gICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpWb2lkQ2FsbGJhY2sobV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQpKTsK
LSAgICAgICAgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQgPSAwOwotICAgIH0KLQotICAg
IHJldHVybiBkaWRTeW5jOworICAgIG1fY29vcmRpbmF0b3ItPnNldFZpc2libGVDb250ZW50c1Jl
Y3QocmVjdCwgdHJhamVjdG9yeVZlY3Rvcik7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CiB9
CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjbGVhclBlbmRpbmdTdGF0ZUNoYW5n
ZXMoKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZSgpCiB7
Ci0gICAgbV9zdGF0ZS5sYXllcnNUb0NyZWF0ZS5jbGVhcigpOwotICAgIG1fc3RhdGUubGF5ZXJz
VG9VcGRhdGUuY2xlYXIoKTsKLSAgICBtX3N0YXRlLmxheWVyc1RvUmVtb3ZlLmNsZWFyKCk7Ci0K
LSAgICBtX3N0YXRlLmltYWdlc1RvQ3JlYXRlLmNsZWFyKCk7Ci0gICAgbV9zdGF0ZS5pbWFnZXNU
b1JlbW92ZS5jbGVhcigpOwotICAgIG1fc3RhdGUuaW1hZ2VzVG9VcGRhdGUuY2xlYXIoKTsKLSAg
ICBtX3N0YXRlLmltYWdlc1RvQ2xlYXIuY2xlYXIoKTsKLQotICAgIG1fc3RhdGUudXBkYXRlQXRs
YXNlc1RvQ3JlYXRlLmNsZWFyKCk7Ci0gICAgbV9zdGF0ZS51cGRhdGVBdGxhc2VzVG9SZW1vdmUu
Y2xlYXIoKTsKLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBtX3N0YXRlLmN1c3RvbUZp
bHRlcnNUb0NyZWF0ZS5jbGVhcigpOwotICAgIG1fc3RhdGUuY3VzdG9tRmlsdGVyc1RvUmVtb3Zl
LmNsZWFyKCk7Ci0jZW5kaWYKKyAgICBtX2Nvb3JkaW5hdG9yLT5yZW5kZXJOZXh0RnJhbWUoKTsK
KyAgICBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyID0gZmFsc2U7CisgICAgc2NoZWR1bGVMYXllckZs
dXNoKCk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojppbml0aWFsaXplUm9v
dENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCgpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKIHsKLSAgICBpZiAobV9kaWRJbml0aWFsaXplUm9vdENv
bXBvc2l0aW5nTGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RhdGUucm9vdENvbXBv
c2l0aW5nTGF5ZXIgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQo
KSktPmlkKCk7Ci0gICAgbV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXIgPSB0cnVl
OwotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5wdXJn
ZUJhY2tpbmdTdG9yZXMoKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5
bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyU3RhdGUmIHN0YXRlKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OndpbGxTeW5j
TGF5ZXJTdGF0ZShDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCiB7Ci0gICAg
bV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAg
IHByZXBhcmVDdXN0b21GaWx0ZXJQcm94aWVzSWZOZWVkZWQoc3RhdGUpOwotI2VuZGlmCisgICAg
aWYgKHN0YXRlLmFuaW1hdGlvbnNDaGFuZ2VkKQorICAgICAgICBwcmVwYXJlQ3VzdG9tRmlsdGVy
UHJveGllc0ZvckFuaW1hdGlvbnMoc3RhdGUuYW5pbWF0aW9ucyk7CiAKLSAgICBtX3N0YXRlLmxh
eWVyc1RvVXBkYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihpZCwgc3RhdGUpKTsKKyAgICBpZiAo
c3RhdGUuZmlsdGVyc0NoYW5nZWQpCisgICAgICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVBy
b3hpZXMoc3RhdGUuZmlsdGVycyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisj
ZW5kaWYKIH0KIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLXZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpwcmVwYXJlQ3VzdG9tRmlsdGVyUHJveGllc0lmTmVlZGVkKENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKLXsKLSAgICBpZiAoc3RhdGUuYW5pbWF0aW9uc0No
YW5nZWQpIHsKLSAgICAgICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFjdGl2ZUFuaW1hdGlv
bnMgPSBzdGF0ZS5hbmltYXRpb25zOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFj
dGl2ZUFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBj
b25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzID0gYWN0aXZlQW5pbWF0aW9ucy5hbmlt
YXRpb25zKCkuYXQoaSkua2V5ZnJhbWVzKCk7Ci0gICAgICAgICAgICBpZiAoa2V5ZnJhbWVzLnBy
b3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcikKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwga2V5ZnJhbWVz
LnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgRmlsdGVyQW5pbWF0aW9uVmFs
dWUmIGZpbHRlclZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUm
PihrZXlmcmFtZXMuYXQoaikpOwotICAgICAgICAgICAgICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJv
Z3JhbVByb3hpZXMoZmlsdGVyVmFsdWUudmFsdWUoKSk7Ci0gICAgICAgICAgICB9Cit2b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cHJlcGFyZUN1c3RvbUZpbHRlclByb3hpZXNGb3JBbmlt
YXRpb25zKEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhY3RpdmVBbmltYXRpb25zKQoreworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWN0aXZlQW5pbWF0aW9ucy5hbmltYXRpb25zKCkuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcyA9
IGFjdGl2ZUFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLmF0KGkpLmtleWZyYW1lcygpOworICAgICAg
ICBpZiAoa2V5ZnJhbWVzLnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRl
cikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8
IGtleWZyYW1lcy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgY29uc3QgRmlsdGVyQW5pbWF0
aW9uVmFsdWUmIGZpbHRlclZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9u
VmFsdWUmPihrZXlmcmFtZXMuYXQoaikpOworICAgICAgICAgICAgY2hlY2tDdXN0b21GaWx0ZXJQ
cm9ncmFtUHJveGllcyhmaWx0ZXJWYWx1ZS52YWx1ZSgpKTsKICAgICAgICAgfQogICAgIH0KLQot
ICAgIGlmIChzdGF0ZS5maWx0ZXJzQ2hhbmdlZCkKLSAgICAgICAgY2hlY2tDdXN0b21GaWx0ZXJQ
cm9ncmFtUHJveGllcyhzdGF0ZS5maWx0ZXJzKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoY29uc3QgRmlsdGVyT3Bl
cmF0aW9ucyYgZmlsdGVycykKQEAgLTM2Nyw3ICsyNjUsNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6Y2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhjb25zdCBGaWx0ZXJP
cGVyYQogICAgICAgICBpZiAoIWN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+Y2xpZW50KCkpIHsK
ICAgICAgICAgICAgIGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+c2V0Q2xpZW50KHRoaXMpOwog
ICAgICAgICAgICAgbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5hZGQoY3VzdG9tRmlsdGVyUHJvZ3Jh
bVByb3h5LmdldCgpKTsKLSAgICAgICAgICAgIG1fc3RhdGUuY3VzdG9tRmlsdGVyc1RvQ3JlYXRl
LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmlkKCksIGN1
c3RvbU9wZXJhdGlvbi0+dmFsaWRhdGVkUHJvZ3JhbSgpLT52YWxpZGF0ZWRQcm9ncmFtSW5mbygp
KSk7CisgICAgICAgICAgICBtX2Nvb3JkaW5hdG9yLT5zdGF0ZSgpLmN1c3RvbUZpbHRlcnNUb0Ny
ZWF0ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgp
LCBjdXN0b21PcGVyYXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKS0+dmFsaWRhdGVkUHJvZ3JhbUlu
Zm8oKSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gSWYgdGhlIGNsaWVudCB3
YXMgbm90IGRpc2Nvbm5lY3RlZCB0aGVuIHRoaXMgY29vcmRpbmF0b3IgbXVzdCBiZSB0aGUgY2xp
ZW50IGZvciBpdC4KICAgICAgICAgICAgIEFTU0VSVChjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkt
PmNsaWVudCgpID09IHRoaXMpOwpAQCAtMzgwLDcgKzI3OCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkoV2ViQ3VzdG9tRmls
dGVyUHJvCiAgICAgLy8gQXQgdGhpcyB0aW1lIHRoZSBzaGFkZXIgaXMgbm90IG5lZWRlZCBhbnlt
b3JlLCBzbyB3ZSByZW1vdmUgaXQgZnJvbSBvdXIgc2V0IGFuZAogICAgIC8vIHNlbmQgYSBtZXNz
YWdlIHRvIHRoZSBvdGhlciBwcm9jZXNzIHRvIGRlbGV0ZSBpdC4KICAgICBtX2N1c3RvbUZpbHRl
clByb2dyYW1zLnJlbW92ZShjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkpOwotICAgIG1fc3RhdGUu
Y3VzdG9tRmlsdGVyc1RvUmVtb3ZlLmFwcGVuZChjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmlk
KCkpOworICAgIG1fY29vcmRpbmF0b3ItPnN0YXRlKCkuY3VzdG9tRmlsdGVyc1RvUmVtb3ZlLmFw
cGVuZChjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmlkKCkpOwogfQogCiB2b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6ZGlzY29ubmVjdEN1c3RvbUZpbHRlclByb2dyYW1zKCkKQEAgLTM5
Miw1MiArMjkwLDMwIEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaXNjb25uZWN0
Q3VzdG9tRmlsdGVyUHJvZ3JhbXMoKQogfQogI2VuZGlmIC8vIEVOQUJMRShDU1NfU0hBREVSUykK
IAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRldGFjaExheWVyKENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllciogbGF5ZXIpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGlk
Rmx1c2hSb290TGF5ZXIoKQogewotICAgIG1fcmVnaXN0ZXJlZExheWVycy5yZW1vdmUobGF5ZXIt
PmlkKCkpOwotCi0gICAgc2l6ZV90IGluZGV4ID0gbV9zdGF0ZS5sYXllcnNUb0NyZWF0ZS5maW5k
KGxheWVyLT5pZCgpKTsKLSAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpIHsKLSAgICAgICAgbV9z
dGF0ZS5sYXllcnNUb0NyZWF0ZS5yZW1vdmUoaW5kZXgpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgbV9zdGF0ZS5sYXllcnNUb1JlbW92ZS5hcHBlbmQobGF5ZXItPmlkKCkpOwotICAg
IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCisgICAg
ICAgIG1fcGFnZU92ZXJsYXlMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVy
T25seSgpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGVyZm9ybVNjaGVk
dWxlZExheWVyRmx1c2goKQogewotICAgIGlmIChtX2lzU3VzcGVuZGVkIHx8IG1fd2FpdGluZ0Zv
clVJUHJvY2VzcykKKyAgICBpZiAobV9pc1N1c3BlbmRlZCB8fCBtX2lzV2FpdGluZ0ZvclJlbmRl
cmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBzeW5jRGlzcGxheVN0YXRlKCk7CisgICAgbV9j
b29yZGluYXRvci0+c3luY0Rpc3BsYXlTdGF0ZSgpOwogCiAgICAgaWYgKCFtX2lzVmFsaWQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKSkKLSAg
ICAgICAgZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKLX0KLQotdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OnN5bmNEaXNwbGF5U3RhdGUoKQotewotI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCi0gICAgbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkt
PmRpZEJlZ2luRnJhbWUoKTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FKSAmJiAhVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKSAmJiAhVVNFKFJF
UVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLSAgICAvLyBNYWtlIHN1cmUg
dGhhdCBhbnkgcHJldmlvdXNseSByZWdpc3RlcmVkIGFuaW1hdGlvbiBjYWxsYmFja3MgYXJlIGJl
aW5nIGV4ZWN1dGVkIGJlZm9yZSB3ZSBmbHVzaCB0aGUgbGF5ZXJzLgotICAgIG1fbGFzdEFuaW1h
dGlvblNlcnZpY2VUaW1lID0gV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKLSAg
ICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPnNlcnZpY2VTY3Jp
cHRlZEFuaW1hdGlvbnMobV9sYXN0QW5pbWF0aW9uU2VydmljZVRpbWUpOwotI2VuZGlmCisgICAg
Ym9vbCBkaWRTeW5jID0gbV9jb29yZGluYXRvci0+Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7
CiAKLSAgICBtX3dlYlBhZ2UtPmxheW91dElmTmVlZGVkKCk7Ci19CisgICAgaWYgKG1fZm9yY2VS
ZXBhaW50QXN5bmNDYWxsYmFja0lEKSB7CisgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpWb2lkQ2FsbGJhY2sobV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNr
SUQpKTsKKyAgICAgICAgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQgPSAwOworICAgIH0K
IAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZFBlcmZvcm1TY2hlZHVsZWRMYXll
ckZsdXNoKCkKLXsKLSAgICBpZiAobV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gpIHsK
KyAgICBpZiAobV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2ggJiYgZGlkU3luYykgewog
ICAgICAgICBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYUltcGwqPihtX3dlYlBhZ2UtPmRyYXdpbmdB
cmVhKCkpLT5sYXllckhvc3REaWRGbHVzaExheWVycygpOwogICAgICAgICBtX25vdGlmeUFmdGVy
U2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOwogICAgIH0KQEAgLTQ1MiwxNSArMzI4LDE1IEBA
IHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCkK
IHsKICAgICBBU1NFUlQoIW1fcGFnZU92ZXJsYXlMYXllcik7CiAKLSAgICBtX3BhZ2VPdmVybGF5
TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcywgdGhpcyk7CisgICAgbV9wYWdlT3Zl
cmxheUxheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCks
IG1fY29vcmRpbmF0b3IuZ2V0KCkpOwogI2lmbmRlZiBOREVCVUcKLSAgICBtX3BhZ2VPdmVybGF5
TGF5ZXItPnNldE5hbWUoIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBwYWdlIG92ZXJsYXkgY29u
dGVudCIpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmFtZSgiQ29tcG9zaXRpbmdDb29y
ZGluYXRvciBwYWdlIG92ZXJsYXkgY29udGVudCIpOwogI2VuZGlmCiAKICAgICBtX3BhZ2VPdmVy
bGF5TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXIt
PnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0
U2l6ZShtX2Nvb3JkaW5hdG9yLT5yb290TGF5ZXIoKS0+c2l6ZSgpKTsKIAotICAgIG1fcm9vdExh
eWVyLT5hZGRDaGlsZChtX3BhZ2VPdmVybGF5TGF5ZXIuZ2V0KCkpOworICAgIG1fY29vcmRpbmF0
b3ItPnJvb3RMYXllcigpLT5hZGRDaGlsZChtX3BhZ2VPdmVybGF5TGF5ZXIuZ2V0KCkpOwogfQog
CiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIo
KQpAQCAtNDcwLDY1ICszNDYsNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGVz
dHJveVBhZ2VPdmVybGF5TGF5ZXIoKQogICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IG51bGxwdHI7
CiB9CiAKLVBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6Y3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoSW1hZ2UqIGltYWdlKQotewot
ICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCA9IENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nOjpnZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKGltYWdlKTsKLSAgICBJbWFnZUJh
Y2tpbmdNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7Ci0g
ICAgUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBpbWFnZUJhY2tpbmc7Ci0gICAgaWYg
KGl0ID09IG1faW1hZ2VCYWNraW5ncy5lbmQoKSkgewotICAgICAgICBpbWFnZUJhY2tpbmcgPSBD
b29yZGluYXRlZEltYWdlQmFja2luZzo6Y3JlYXRlKHRoaXMsIGltYWdlKTsKLSAgICAgICAgbV9p
bWFnZUJhY2tpbmdzLmFkZChpbWFnZUlELCBpbWFnZUJhY2tpbmcpOwotICAgIH0gZWxzZQotICAg
ICAgICBpbWFnZUJhY2tpbmcgPSBpdC0+dmFsdWU7Ci0KLSAgICByZXR1cm4gaW1hZ2VCYWNraW5n
OwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlSW1hZ2VCYWNraW5n
KENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBtX3N0YXRlLmltYWdl
c1RvQ3JlYXRlLmFwcGVuZChpbWFnZUlEKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdl
SUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBjb29yZGluYXRlZFN1cmZhY2UpCi17
Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fc3RhdGUuaW1hZ2VzVG9VcGRh
dGUuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGltYWdlSUQsIGNvb3JkaW5hdGVkU3VyZmFjZSkpOwot
fQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y2xlYXJJbWFnZUJhY2tpbmdDb250
ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCi17Ci0gICAgbV9zaG91bGRT
eW5jRnJhbWUgPSB0cnVlOwotICAgIG1fc3RhdGUuaW1hZ2VzVG9DbGVhci5hcHBlbmQoaW1hZ2VJ
RCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW1vdmVJbWFnZUJhY2tp
bmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIGlmIChtX2lzUHVy
Z2luZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250
YWlucyhpbWFnZUlEKSk7Ci0gICAgbV9pbWFnZUJhY2tpbmdzLnJlbW92ZShpbWFnZUlEKTsKLQot
ICAgIG1fc3RhdGUuaW1hZ2VzVG9SZW1vdmUuYXBwZW5kKGltYWdlSUQpOwotfQotCi12b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygp
Ci17Ci0gICAgSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBlbmQgPSBtX2ltYWdlQmFja2luZ3Mu
ZW5kKCk7Ci0gICAgZm9yIChJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2ltYWdl
QmFja2luZ3MuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgaXRlci0+dmFs
dWUtPnVwZGF0ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bm90aWZ5
QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIC8q
IHRpbWUgKi8pCi17Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpub3RpZnlG
bHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKQotewotICAgIHNjaGVk
dWxlTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGFp
bnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KQor
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBH
cmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29u
dGV4dCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCiB7CiAgICAgaWYgKGdyYXBoaWNzTGF5ZXIg
PT0gbV9wYWdlT3ZlcmxheUxheWVyKSB7CiAgICAgICAgIC8vIE92ZXJsYXlzIGNvbnRhaW4gdHJh
bnNwYXJlbnQgY29udGVudHMgYW5kIHdvbid0IGNsZWFyIHRoZSBjb250ZXh0IGFzIHBhcnQgb2Yg
dGhlaXIgcmVuZGVyaW5nLCBzbyB3ZSBkbyBpdCBoZXJlLgpAQCAtNTM4LDE1ICszNTYsMTAgQEAg
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnBhaW50Q29udGVudHMoY29uc3QgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciogZ3JhcGgKICAgICB9CiB9CiAKLVBhc3NPd25QdHI8R3JhcGhpY3NM
YXllcj4gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVHcmFwaGljc0xheWVyKEdyYXBo
aWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpj
b21taXRTY2VuZVN0YXRlKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYgc3RhdGUp
CiB7Ci0gICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBsYXllciA9IG5ldyBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIoY2xpZW50KTsKLSAgICBsYXllci0+c2V0Q29vcmRpbmF0b3IodGhpcyk7
Ci0gICAgbV9yZWdpc3RlcmVkTGF5ZXJzLmFkZChsYXllci0+aWQoKSwgbGF5ZXIpOwotICAgIG1f
c3RhdGUubGF5ZXJzVG9DcmVhdGUuYXBwZW5kKGxheWVyLT5pZCgpKTsKLSAgICBsYXllci0+c2V0
TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1lbnQoKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsK
LSAgICByZXR1cm4gYWRvcHRQdHIobGF5ZXIpOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNvbW1pdENvb3JkaW5hdGVkR3JhcGhp
Y3NTdGF0ZShzdGF0ZSkpOworICAgIG1faXNXYWl0aW5nRm9yUmVuZGVyZXIgPSB0cnVlOwogfQog
CiBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpjcmVhdGVDb29yZGluYXRlZFN1cmZhY2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29vcmRpbmF0
ZWRTdXJmYWNlOjpGbGFncyBmbGFncykKQEAgLTU1NCw3MyArMzY3LDE0IEBAIFBhc3NSZWZQdHI8
Q29vcmRpbmF0ZWRTdXJmYWNlPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUNvb3Jk
aW5hdGVkU3VyZmFjCiAgICAgcmV0dXJuIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKHNp
emUsIGZsYWdzKTsKIH0KIAotZmxvYXQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXZpY2VT
Y2FsZUZhY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS0+ZGV2aWNlU2NhbGVG
YWN0b3IoKTsKLX0KLQotZmxvYXQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwYWdlU2NhbGVG
YWN0b3IoKSBjb25zdAotewotICAgIHJldHVybiBtX3dlYlBhZ2UtPnBhZ2VTY2FsZUZhY3Rvcigp
OwotfQotCiBib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
ZygpCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPENvb3Jk
aW5hdGVkU3VyZmFjZT4gY29vcmRpbmF0ZWRTdXJmYWNlKQotewotICAgIG1fc3RhdGUudXBkYXRl
QXRsYXNlc1RvQ3JlYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihhdGxhc0lELCBjb29yZGluYXRl
ZFN1cmZhY2UpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZVVw
ZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCi17Ci0gICAgaWYgKG1faXNQdXJnaW5nKQotICAg
ICAgICByZXR1cm47Ci0gICAgbV9zdGF0ZS51cGRhdGVBdGxhc2VzVG9SZW1vdmUuYXBwZW5kKGF0
bGFzSUQpOwotfQotCi1XZWJDb3JlOjpGbG9hdFJlY3QgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
Ojp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV92aXNpYmxlQ29u
dGVudHNSZWN0OwotfQotCi1Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6bWFpbkNvbnRlbnRzTGF5ZXIoKQotewotICAgIGlmICghbV9yb290Q29tcG9z
aXRpbmdMYXllcikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gdG9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIobV9yb290Q29tcG9zaXRpbmdMYXllciktPmZpbmRGaXJzdERlc2NlbmRh
bnRXaXRoQ29udGVudHNSZWN1cnNpdmVseSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCi17Ci0gICAgLy8gQSB6ZXJvIHRyYWpl
Y3RvcnlWZWN0b3IgaW5kaWNhdGVzIHRoYXQgdGlsZXMgYWxsIGFyb3VuZCB0aGUgdmlld3BvcnQg
YXJlIHJlcXVlc3RlZC4KLSAgICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBjb250ZW50
c0xheWVyID0gbWFpbkNvbnRlbnRzTGF5ZXIoKSkKLSAgICAgICAgY29udGVudHNMYXllci0+c2V0
VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKTsKLQot
ICAgIGJvb2wgY29udGVudHNSZWN0RGlkQ2hhbmdlID0gcmVjdCAhPSBtX3Zpc2libGVDb250ZW50
c1JlY3Q7Ci0gICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSkgewotICAgICAgICBtX3Zpc2li
bGVDb250ZW50c1JlY3QgPSByZWN0OwotCi0gICAgICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQg
PSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7Ci0gICAgICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgaWYgKG1f
d2ViUGFnZS0+dXNlRml4ZWRMYXlvdXQoKSkgewotICAgICAgICAvLyBSb3VuZCB0aGUgcmVjdCBp
bnN0ZWFkIG9mIGVuY2xvc2luZyBpdCB0byBtYWtlIHN1cmUgdGhhdCBpdHMgc2l6ZSBzdGF5cwot
ICAgICAgICAvLyB0aGUgc2FtZSB3aGlsZSBwYW5uaW5nLiBUaGlzIGNhbiBoYXZlIG5hc3R5IGVm
ZmVjdHMgb24gbGF5b3V0LgotICAgICAgICBtX3dlYlBhZ2UtPnNldEZpeGVkVmlzaWJsZUNvbnRl
bnRSZWN0KHJvdW5kZWRJbnRSZWN0KHJlY3QpKTsKLSAgICB9Ci19Ci0KIHZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKQogewotICAg
IG1fcm9vdExheWVyLT5kZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKKyAgICBtX2Nv
b3JkaW5hdG9yLT5kZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKICAgICBpZiAobV9w
YWdlT3ZlcmxheUxheWVyKQogICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPmRldmljZU9yUGFn
ZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwogfQpAQCAtNjMxLDk1ICszODUsMjMgQEAgdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnBhZ2VCYWNrZ3JvdW5kVHJhbnNwYXJlbmN5Q2hhbmdlZCgp
CiAKIEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmdyYXBo
aWNzTGF5ZXJGYWN0b3J5KCkKIHsKLSAgICByZXR1cm4gdGhpczsKKyAgICByZXR1cm4gbV9jb29y
ZGluYXRvci5nZXQoKTsKIH0KIAogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkK
IHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZUFuaW1hdGlvbigpCiB7Ci0g
ICAgaWYgKG1fd2FpdGluZ0ZvclVJUHJvY2VzcykKKyAgICBpZiAobV9pc1dhaXRpbmdGb3JSZW5k
ZXJlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0
aXZlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEFjY29yZGluZyB0byB0aGUgcmVxdWVz
dEFuaW1hdGlvbkZyYW1lIHNwZWMsIHJBRiBjYWxsYmFja3Mgc2hvdWxkIG5vdCBiZSBmYXN0ZXIg
dGhhbiA2MEZQUy4KLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIE1pbmltYWxUaW1lb3V0Rm9yQW5p
bWF0aW9ucyA9IDEuIC8gNjAuOwotICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdChz
dGQ6Om1heDxkb3VibGU+KDAuLCBNaW5pbWFsVGltZW91dEZvckFuaW1hdGlvbnMgLSBXVEY6Om1v
bm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpICsgbV9sYXN0QW5pbWF0aW9uU2VydmljZVRpbWUp
KTsKKyAgICBtX2xheWVyRmx1c2hUaW1lci5zdGFydE9uZVNob3QobV9jb29yZGluYXRvci0+bmV4
dEFuaW1hdGlvblNlcnZpY2VUaW1lKCkpOwogICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwogfQog
I2VuZGlmCiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW5kZXJOZXh0RnJhbWUo
KQotewotICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9IGZhbHNlOwotICAgIHNjaGVkdWxlTGF5
ZXJGbHVzaCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMu
c2l6ZSgpOyArK2kpCi0gICAgICAgIG1fdXBkYXRlQXRsYXNlc1tpXS0+ZGlkU3dhcEJ1ZmZlcnMo
KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnB1cmdlQmFja2luZ1N0b3Jl
cygpCi17Ci0gICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IHB1cmdpbmdUb2dnbGUobV9pc1B1cmdp
bmcsIHRydWUpOwotCi0gICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcmVnaXN0ZXJlZExh
eWVycy5lbmQoKTsKLSAgICBmb3IgKExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJl
ZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT52YWx1ZS0+cHVy
Z2VCYWNraW5nU3RvcmVzKCk7Ci0KLSAgICBtX2ltYWdlQmFja2luZ3MuY2xlYXIoKTsKLSAgICBt
X3VwZGF0ZUF0bGFzZXMuY2xlYXIoKTsKLX0KLQotYm9vbCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OnBhaW50VG9TdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUsIENvb3JkaW5hdGVkU3VyZmFj
ZTo6RmxhZ3MgZmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBJbnRQb2ludCYgb2Zmc2V0LCBDb29y
ZGluYXRlZFN1cmZhY2U6OkNsaWVudCogY2xpZW50KQotewotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVXBkYXRlQXRs
YXMqIGF0bGFzID0gbV91cGRhdGVBdGxhc2VzW2ldLmdldCgpOwotICAgICAgICBpZiAoYXRsYXMt
PnN1cHBvcnRzQWxwaGEoKSA9PSAoZmxhZ3MgJiBDb29yZGluYXRlZFN1cmZhY2U6OlN1cHBvcnRz
QWxwaGEpKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIHdpbGwgZmFsc2UgaWYgdGhlcmUgaXMgbm8g
YXZhaWxhYmxlIGJ1ZmZlciBzcGFjZS4KLSAgICAgICAgICAgIGlmIChhdGxhcy0+cGFpbnRPbkF2
YWlsYWJsZUJ1ZmZlcihzaXplLCBhdGxhc0lELCBvZmZzZXQsIGNsaWVudCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3Qg
aW50IFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24gPSAxMDI0OyAvLyBTaG91bGQgYmUgYSBwb3dlciBv
ZiB0d28uCi0gICAgbV91cGRhdGVBdGxhc2VzLmFwcGVuZChhZG9wdFB0cihuZXcgVXBkYXRlQXRs
YXModGhpcywgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiwgZmxhZ3MpKSk7Ci0gICAgc2NoZWR1bGVS
ZWxlYXNlSW5hY3RpdmVBdGxhc2VzKCk7Ci0gICAgcmV0dXJuIG1fdXBkYXRlQXRsYXNlcy5sYXN0
KCktPnBhaW50T25BdmFpbGFibGVCdWZmZXIoc2l6ZSwgYXRsYXNJRCwgb2Zmc2V0LCBjbGllbnQp
OwotfQotCi1jb25zdCBkb3VibGUgUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2YWwg
PSAwLjU7Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZVJlbGVhc2VJ
bmFjdGl2ZUF0bGFzZXMoKQotewotICAgIGlmICghbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGlt
ZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIuc3Rh
cnRSZXBlYXRpbmcoUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2YWwpOwotfQotCi12
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVy
RmlyZWQoVGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiopCi17Ci0gICAgLy8gV2UgYWx3
YXlzIHdhbnQgdG8ga2VlcCBvbmUgYXRsYXMgZm9yIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQuCi0g
ICAgT3duUHRyPFVwZGF0ZUF0bGFzPiBhdGxhc1RvS2VlcEFueXdheTsKLSAgICBib29sIGZvdW5k
QWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVudCA9IGZhbHNlOwotICAgIGZvciAoaW50
IGkgPSBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpIC0gMTsgIGkgPj0gMDsgLS1pKSB7Ci0gICAgICAg
IFVwZGF0ZUF0bGFzKiBhdGxhcyA9IG1fdXBkYXRlQXRsYXNlc1tpXS5nZXQoKTsKLSAgICAgICAg
aWYgKCFhdGxhcy0+aXNJblVzZSgpKQotICAgICAgICAgICAgYXRsYXMtPmFkZFRpbWVJbmFjdGl2
ZShSZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJJbnRlcnZhbCk7Ci0gICAgICAgIGJvb2wgdXNh
YmxlRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgPSAhYXRsYXMtPnN1cHBvcnRzQWxwaGEoKTsKLSAg
ICAgICAgaWYgKGF0bGFzLT5pc0luYWN0aXZlKCkpIHsKLSAgICAgICAgICAgIGlmICghZm91bmRB
Y3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ICYmICFhdGxhc1RvS2VlcEFueXdheSAm
JiB1c2FibGVGb3JOb25Db21wb3NpdGVkQ29udGVudCkKLSAgICAgICAgICAgICAgICBhdGxhc1Rv
S2VlcEFueXdheSA9IG1fdXBkYXRlQXRsYXNlc1tpXS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBt
X3VwZGF0ZUF0bGFzZXMucmVtb3ZlKGkpOwotICAgICAgICB9IGVsc2UgaWYgKHVzYWJsZUZvck5v
bkNvbXBvc2l0ZWRDb250ZW50KQotICAgICAgICAgICAgZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNv
bXBvc2l0ZWRDb250ZW50ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIWZvdW5kQWN0aXZlQXRs
YXNGb3JOb25Db21wb3NpdGVkQ29udGVudCAmJiBhdGxhc1RvS2VlcEFueXdheSkKLSAgICAgICAg
bV91cGRhdGVBdGxhc2VzLmFwcGVuZChhdGxhc1RvS2VlcEFueXdheS5yZWxlYXNlKCkpOwotCi0g
ICAgaWYgKG1fdXBkYXRlQXRsYXNlcy5zaXplKCkgPD0gMSkKLSAgICAgICAgbV9yZWxlYXNlSW5h
Y3RpdmVBdGxhc2VzVGltZXIuc3RvcCgpOwotfQotCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikKIHsK
ICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpTZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IpKTsKQEAgLTcyNywxMSArNDA5LDcgQEAgdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJD
b3JlOjpDb2xvciYgY29sb3IpCiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpjb21t
aXRTY3JvbGxPZmZzZXQodWludDMyX3QgbGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
b2Zmc2V0KQogewotICAgIExheWVyTWFwOjppdGVyYXRvciBpID0gbV9yZWdpc3RlcmVkTGF5ZXJz
LmZpbmQobGF5ZXJJRCk7Ci0gICAgaWYgKGkgPT0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpLT52YWx1ZS0+Y29tbWl0U2Nyb2xsT2Zmc2V0KG9mZnNl
dCk7CisgICAgbV9jb29yZGluYXRvci0+Y29tbWl0U2Nyb2xsT2Zmc2V0KGxheWVySUQsIG9mZnNl
dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaAppbmRleCAxNDE0ZjQzZThmYjY3
NTJhYTc5ZTkwZGQzNDJmZmIxMmNjN2YzZmUyLi5lOGU1NjQ4ZTYzYTMxM2M2MGZiMDRhY2Q0NDYw
NTgzZWM5NTNlNDNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZExheWVyVHJlZUhvc3QuaApAQCAtMjUsMTMgKzI1LDggQEAKIAogI2luY2x1ZGUgIkxh
eWVyVHJlZUNvbnRleHQuaCIKICNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCi0jaW5jbHVkZSAi
VGltZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9Db29yZGluYXRlZEltYWdlQmFja2luZy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NMYXllckNsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29tcG9zaXRpbmdDb29yZGlu
YXRvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckZhY3RvcnkuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1VwZGF0ZUF0bGFzLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiAj
aWYgRU5BQkxFKENTU19TSEFERVJTKQpAQCAtNDYsMTEgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYktp
dCB7CiAKIGNsYXNzIFdlYlBhZ2U7CiAKLWNsYXNzIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCA6
IHB1YmxpYyBMYXllclRyZWVIb3N0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAg
LCBwdWJsaWMgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgLCBw
dWJsaWMgV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNsaWVudAotICAgICwgcHVi
bGljIFdlYkNvcmU6OlVwZGF0ZUF0bGFzOjpDbGllbnQKLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpH
cmFwaGljc0xheWVyRmFjdG9yeQorY2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IDogcHVi
bGljIExheWVyVHJlZUhvc3QsIHB1YmxpYyBXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
OjpDbGllbnQKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAgICAgLCBXZWJDdXN0b21GaWx0ZXJQ
cm9ncmFtUHJveHlDbGllbnQKICNlbmRpZgpAQCAtODQsOSArNzUsNiBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpIE9WRVJSSURFOwog
ICAgIHZpcnR1YWwgdm9pZCBwYWdlQmFja2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5nZWQoKSBPVkVS
UklERTsKIAotICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKLSAgICB2aXJ0dWFs
IHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVD
b250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZURlY29k
ZXImKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFwaGlj
c0xheWVyRmFjdG9yeSgpIE9WRVJSSURFOwogICAgIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllciogbWFpbkNvbnRlbnRzTGF5ZXIoKTsKQEAgLTk4LDYwICs4NiwzMSBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U+IGNy
ZWF0ZUNvb3JkaW5hdGVkU3VyZmFjZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViQ29yZTo6
Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyk7CiAKLSAgICB2b2lkIGNvbW1pdFNjcm9sbE9mZnNl
dCh1aW50MzJfdCBsYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBvZmZzZXQpOwotCiBw
cm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KFdlYlBhZ2Uq
KTsKIAogcHJpdmF0ZToKLSAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgdmlydHVhbCB2
b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllcios
IGRvdWJsZSB0aW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZChjb25z
dCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVu
dHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBjbGlwUmVjdCk7Ci0gICAgdmlydHVhbCBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rvcigp
IGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yKCkgY29u
c3QgT1ZFUlJJREU7Ci0KLSAgICAvLyBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q2xpZW50Ci0g
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhXZWJDb3JlOjpDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSW1hZ2VCYWNr
aW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6Q29vcmRpbmF0ZWRTdXJmYWNlPikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFy
SW1hZ2VCYWNraW5nQ29udGVudHMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhXZWJDb3JlOjpD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKLQotICAgIHZvaWQgZmx1c2hQZW5k
aW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpOwotCi0gICAgLy8gQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyQ2xpZW50Ci0gICAgdmlydHVhbCBib29sIGlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXM7IH0KLSAgICB2aXJ0
dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVh
dGVJbWFnZUJhY2tpbmdJZk5lZWRlZChXZWJDb3JlOjpJbWFnZSopIE9WRVJSSURFOwotICAgIHZp
cnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIq
KTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUb1N1cmZhY2UoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYsIFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiAvKiBhdGxh
c0lEICovLCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZTo6
Q2xpZW50KikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKFdlYkNv
cmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
U3RhdGUmKTsKLQotICAgIC8vIFVwZGF0ZUF0bGFzOjpDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpD
b29yZGluYXRlZFN1cmZhY2U+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVXBk
YXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkgT1ZFUlJJREU7Ci0KLSAgICAvLyBHcmFwaGljc0xh
eWVyRmFjdG9yeQotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVy
PiBjcmVhdGVHcmFwaGljc0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQqKSBPVkVS
UklERTsKLQogICAgIC8vIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdAotICAgIHZvaWQgaW5pdGlh
bGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQoKTsKICAgICB2b2lkIGNyZWF0ZVBhZ2VP
dmVybGF5TGF5ZXIoKTsKICAgICB2b2lkIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7Ci0gICAg
Ym9vbCBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKLSAgICB2b2lkIGNsZWFyUGVuZGluZ1N0
YXRlQ2hhbmdlcygpOwogICAgIHZvaWQgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKICAgICB2
b2lkIHBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7Ci0gICAgdm9pZCBkaWRQZXJmb3JtU2No
ZWR1bGVkTGF5ZXJGbHVzaCgpOwotICAgIHZvaWQgc3luY0Rpc3BsYXlTdGF0ZSgpOwotICAgIHZv
aWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0PiopOworICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CisgICAgdm9pZCByZW5k
ZXJOZXh0RnJhbWUoKTsKKyAgICB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOworICAgIHZvaWQg
Y29tbWl0U2Nyb2xsT2Zmc2V0KHVpbnQzMl90IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIG9mZnNldCk7CiAKLSAgICB2b2lkIHNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygp
OworICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0PiopOwogCi0gICAgdm9pZCByZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGlt
ZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+Kik7CisgICAg
Ly8gQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q2xpZW50CisgICAgdmlydHVhbCB2b2lkIGRpZEZs
dXNoUm9vdExheWVyKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHdpbGxTeW5jTGF5ZXJT
dGF0ZShXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKCkgT1ZFUlJJREUgeyBzY2hlZHVs
ZUxheWVyRmx1c2goKTsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0U2NlbmVTdGF0ZShXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCkg
T1ZFUlJJREU7CiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgdm9pZCBwcmVwYXJlQ3Vz
dG9tRmlsdGVyUHJveGllc0lmTmVlZGVkKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
clN0YXRlJik7CisgICAgdm9pZCBwcmVwYXJlQ3VzdG9tRmlsdGVyUHJveGllc0ZvckFuaW1hdGlv
bnMoV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKIAogICAgIC8vIFdlYkN1c3Rv
bUZpbHRlclByb2dyYW1Qcm94eUNsaWVudAogICAgIHZvaWQgcmVtb3ZlQ3VzdG9tRmlsdGVyUHJv
Z3JhbVByb3h5KFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSopOwpAQCAtMTYwLDQ3ICsxMTks
MjYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpc2Nvbm5lY3RDdXN0b21GaWx0ZXJQcm9ncmFtcygp
OwogI2VuZGlmCiAKLSAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5
ZXI7Ci0gICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbV9yb290Q29tcG9zaXRpbmdMYXllcjsK
KyAgICBPd25QdHI8V2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcj4gbV9jb29yZGluYXRv
cjsKIAogICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUgbnVsbCBpZiB0aGVy
ZSdzIG5vIHBhZ2Ugb3ZlcmxheS4KICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4g
bV9wYWdlT3ZlcmxheUxheWVyOwogICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gbV9wYWdlT3Zlcmxh
eTsKIAotICAgIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSBtX3N0YXRlOwotCi0g
ICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj4gTGF5ZXJNYXA7Ci0gICAgTGF5ZXJNYXAgbV9yZWdp
c3RlcmVkTGF5ZXJzOwotICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJDb3JlOjpDb29yZGluYXRlZElt
YWdlQmFja2luZ0lELCBSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+ID4g
SW1hZ2VCYWNraW5nTWFwOwotICAgIEltYWdlQmFja2luZ01hcCBtX2ltYWdlQmFja2luZ3M7Ci0g
ICAgVmVjdG9yPE93blB0cjxXZWJDb3JlOjpVcGRhdGVBdGxhcz4gPiBtX3VwZGF0ZUF0bGFzZXM7
Ci0KICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAgICAgSGFzaFNldDxXZWJDdXN0b21GaWx0ZXJQ
cm9ncmFtUHJveHkqPiBtX2N1c3RvbUZpbHRlclByb2dyYW1zOwogI2VuZGlmCiAKICAgICBib29s
IG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOwogICAgIGJvb2wgbV9pc1ZhbGlkOwot
ICAgIC8vIFdlIGRvbid0IHNlbmQgdGhlIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gcmVsZWFzaW5nIHJl
c291cmNlcyB0byBVSSBQcm9jZXNzIGR1cmluZyBwdXJnaW5nLCBiZWNhdXNlIFVJIFByb2Nlc3Mg
YWxyZWFkeSBoYWQgcmVtb3ZlZCBhbGwgcmVzb3VyY2VzLgotICAgIGJvb2wgbV9pc1B1cmdpbmc7
Ci0gICAgYm9vbCBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXM7Ci0KLSAgICBib29sIG1fd2FpdGlu
Z0ZvclVJUHJvY2VzczsKICAgICBib29sIG1faXNTdXNwZW5kZWQ7Ci0gICAgV2ViQ29yZTo6Rmxv
YXRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICBib29sIG1faXNXYWl0aW5nRm9yUmVu
ZGVyZXI7CiAKICAgICBMYXllclRyZWVDb250ZXh0IG1fbGF5ZXJUcmVlQ29udGV4dDsKLSAgICBi
b29sIG1fc2hvdWxkU3luY0ZyYW1lOwotICAgIGJvb2wgbV9kaWRJbml0aWFsaXplUm9vdENvbXBv
c2l0aW5nTGF5ZXI7CisKICAgICBXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q+IG1fbGF5ZXJGbHVzaFRpbWVyOwotICAgIFdlYkNvcmU6OlRpbWVyPENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdD4gbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXI7CiAgICAgYm9vbCBtX2xh
eWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZDsKICAgICB1aW50NjRfdCBtX2ZvcmNlUmVwYWludEFz
eW5jQ2FsbGJhY2tJRDsKLSAgICBib29sIG1fYW5pbWF0aW9uc0xvY2tlZDsKLQotI2lmIEVOQUJM
RShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICBkb3VibGUgbV9sYXN0QW5pbWF0aW9uU2Vy
dmljZVRpbWU7Ci0jZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgKaW5kZXggOTBi
YmI5NDFkMWFiMDU2ODFmOTZhMjE0MDJjZjkzNDgxYjMyNzc3ZC4uMmZhZDJkMTNjZjI1ZDgzNmVj
ZmFiYTNhYmZlNmFmODk4MDI0MGEyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCkBAIC04Nyw5ICs4Nyw2IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJikg
eyB9CiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgdmlydHVhbCB2b2lkIHNl
dFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQgLyog
c2NhbGUgKi8sIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgcmVuZGVyTmV4dEZyYW1lKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHB1cmdlQmFja2luZ1N0
b3JlcygpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZURlY29k
ZXImKSA9IDA7CiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>205548</attachid>
            <date>2013-06-26 17:49:49 -0700</date>
            <delta_ts>2013-06-28 08:08:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104360-20130627094747.patch</filename>
            <type>text/plain</type>
            <size>66157</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUyMDY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2UwYjE3ZjczZjc0OWU1
MTYwMjQ3NTVkZjIwMWRiY2E0OThhZmY5ZC4uMTA5NWE5MDI5YWU4NWJlYWRjYWE0MDBjYjAwNDJi
YWU1ODk0MGFlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDEzLTAzLTEzICBHd2Fu
ZyBZb29uIEh3YW5nICA8cnl1bWllbEBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGlu
YXRlZCBHcmFwaGljczogU2VwYXJhdGUgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGludG8gQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0IGFuZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQzNjAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOb2FtIFJvc2VudGhhbC4KKworICAgICAgICBUaGUgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0IGhhcyB0b28gbWFueSByZXNwb25zaWJpbGl0aWVzLiBJdAorICAgICAgICBp
bXBsZW1lbnRzIExheWVyVHJlZUhvc3QsIEdyYXBoaWNzTGF5ZXJDbGllbnQsCisgICAgICAgIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNs
aWVudCwKKyAgICAgICAgVXBkYXRlQXRsYXM6OkNsaWVudCwgR3JhcGhpY3NMYXllckZhY3Rvcnkg
YW5kCisgICAgICAgIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudC4KKworICAgICAg
ICBUaGlzIHJlZmFjdG9yaW5nIHJlZHVjZXMgdGhlIHJlc3BvbnNpYmlsaXRpZXMgb2YgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5l
dyBjbGFzcyBjYWxsZWQgQ29tcG9zaXRpbmdDb29yZGluYXRvciwgd2hpY2gKKyAgICAgICAgdGFr
ZXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIG1hbmFnaW5nIGNvbXBvc2l0aW5nIHJlc291cmNlcyBp
bgorICAgICAgICBXZWJQcm9jZXNzLgorCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dCBpcyByZXNwb25zaWJsZSBvbmx5IGZvciB0aGUgc2NoZWR1bGluZyBhbmQKKyAgICAgICAgSVBD
LXNwZWNpZmljIHN0dWZmLCB3aGljaCBhcmUgcmVsZXZhbnQgb25seSBmb3IgV2ViS2l0Mi4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9y
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6fkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGlu
YXRvcjo6Q29tcG9zaXRpbmdDb29yZGluYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3Np
dGluZ0Nvb3JkaW5hdG9yOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzaXplRGlkQ2hhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzeW5jRGlzcGxheVN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6Om5leHRBbmlt
YXRpb25TZXJ2aWNlVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpjbGVhclBlbmRpbmdTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRpbmdDb29yZGluYXRvcjo6aW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlUm9vdExh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnN5bmNMYXll
clN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0
ZUltYWdlQmFja2luZ0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OmNyZWF0ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3Np
dGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZW1vdmVJbWFnZUJhY2tpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5n
SW1hZ2VCYWNraW5nQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yOjpub3RpZnlBbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6Om5vdGlmeUZsdXNoUmVxdWlyZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVHcmFwaGljc0xheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRldmljZVNjYWxlRmFjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnBhZ2VTY2FsZUZhY3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVVcGRh
dGVBdGxhcyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZW1v
dmVVcGRhdGVBdGxhcyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
Ojp2aXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6Om1haW5Db250ZW50c0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
aW5nQ29vcmRpbmF0b3I6OnNldFZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRldGFjaExheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNvbW1pdFNjcm9s
bE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZW5k
ZXJOZXh0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6
cHVyZ2VCYWNraW5nU3RvcmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OnBhaW50VG9TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OnNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcyk6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJG
aXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
bXBvc2l0aW5nQ29vcmRpbmF0b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb21wb3Np
dGluZ0Nvb3JkaW5hdG9yOjpjbGVhclJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yOjpyb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRpbmdDb29yZGluYXRvcjo6c3RhdGUpOgorCiAyMDEzLTA2LTI2ICBSb2dlciBGb25nICA8cm9n
ZXJfZm9uZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGFuIGFjY2Vzc2liaWxpdHkgZGVsZWdh
dGUgaW50ZXJmYWNlIHRvIEFwcGxlV2luIHBvcnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNWZkZTg2MDAxZGU2
YmIxZDAwMzI0N2U4ZmNmZmU2Y2VjOWEzM2Y1OS4uZTA4OWNiMWRhNjExNmYxMjExOGIxYTM3YWE0
MGRkOGY4OTE2MGQxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEzLTAzLTEzICBH
d2FuZyBZb29uIEh3YW5nICA8cnl1bWllbEBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29y
ZGluYXRlZCBHcmFwaGljczogU2VwYXJhdGUgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGludG8g
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGFuZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQzNjAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOb2FtIFJvc2VudGhhbC4KKworICAgICAgICBUaGUgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0IGhhcyB0b28gbWFueSByZXNwb25zaWJpbGl0aWVzLiBJdAorICAgICAg
ICBpbXBsZW1lbnRzIExheWVyVHJlZUhvc3QsIEdyYXBoaWNzTGF5ZXJDbGllbnQsCisgICAgICAg
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6
OkNsaWVudCwKKyAgICAgICAgVXBkYXRlQXRsYXM6OkNsaWVudCwgR3JhcGhpY3NMYXllckZhY3Rv
cnkgYW5kCisgICAgICAgIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudC4KKworICAg
ICAgICBUaGlzIHJlZmFjdG9yaW5nIHJlZHVjZXMgdGhlIHJlc3BvbnNpYmlsaXRpZXMgb2YgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBh
IG5ldyBjbGFzcyBjYWxsZWQgQ29tcG9zaXRpbmdDb29yZGluYXRvciwgd2hpY2gKKyAgICAgICAg
dGFrZXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIG1hbmFnaW5nIGNvbXBvc2l0aW5nIHJlc291cmNl
cyBpbgorICAgICAgICBXZWJQcm9jZXNzLgorCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdCBpcyByZXNwb25zaWJsZSBvbmx5IGZvciB0aGUgc2NoZWR1bGluZyBhbmQKKyAgICAgICAg
SVBDLXNwZWNpZmljIHN0dWZmLCB3aGljaCBhcmUgcmVsZXZhbnQgb25seSBmb3IgV2ViS2l0Mi4K
KworICAgICAgICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZExheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6On5Db29yZGluYXRlZExheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCk6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5
ZXIpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmludmFsaWRh
dGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZvcmNlUmVw
YWludCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2l6ZURp
ZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0
VmlzaWJsZUNvbnRlbnRzUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6cmVuZGVyTmV4dEZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpwdXJnZUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OndpbGxTeW5jTGF5ZXJTdGF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cHJlcGFyZUN1c3RvbUZpbHRlclByb3hpZXNG
b3JBbmltYXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKToKKyAgICAgICAgKFdlYktpdDo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkpOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZEZsdXNoUm9vdExh
eWVyKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwZXJmb3Jt
U2NoZWR1bGVkTGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6Y3JlYXRlUGFnZU92ZXJsYXlMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYktp
dDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpjb21taXRTY2VuZVN0YXRlKToKKyAgICAgICAg
KFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3Rv
ckNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6Omdy
YXBoaWNzTGF5ZXJGYWN0b3J5KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpzY2hlZHVsZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6Y29tbWl0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaDoK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oOgorCiAyMDEzLTA2
LTI2ICBTaW1vbiBDb29wZXIgIDxzY29vcGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBRdWlja1Rp
bWUgcGx1Zy1pbiBjYW5ub3QgdXBkYXRlIGNvbS5hcHBsZS5xdWlja3RpbWUucGx1Z2luLnByZWZl
cmVuY2VzLnBsaXN0IGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZDdlNzFjY2IxNjVjMzk4
NTI3NzE1Y2ExYzQ1MDM3MjMxZmZhYzQ1Ni4uNjI4OWJkMTM1YmQzMjk0ZWMwMTEyNTZhNzE2OWI5
M2M0OGRmZGRjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE5NzgsNiArMTk3OCw3IEBAIHNl
dChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdo
dFNvdXJjZS5jcHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9B
cmVhQWxsb2NhdG9yLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBo
aWNzU2NlbmUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCBlZTllZGRmNDZlN2IwMGI1NmI1MWU4ZGJlYTQ1
OTNiYjFjMzA4OGJkLi5mODlhNGU4YjI4ZDI4MDk4MGU2MTE5M2YzNDRlY2ZlNWJmMjk4YWVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkKQEAgLTQwODksNiArNDA4OSw3IEBAIHVzZT8oM0RfR1JBUEhJQ1MpIHsKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oIFwKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmgg
XAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9j
YXRvci5oIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
bXBvc2l0aW5nQ29vcmRpbmF0b3IuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5oIFwKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJQcm9ncmFtLmggXApAQCAtNDEyNCw2ICs0MTI1LDcgQEAg
dXNlPygzRF9HUkFQSElDUykgewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAgXAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRC
YWNraW5nU3RvcmUuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcCBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uM2JmOTdlZTBiNjM0OGJlOTRkOTE4ZGE3YTc1NzE4NjQwMjhmMDc5ZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcApAQCAtMCwwICsxLDQzNCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3IuaCIKKworI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJv
bGxlci5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1
ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3duUHRyPENvbXBvc2l0aW5nQ29vcmRpbmF0
b3I+IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZShQYWdlKiBwYWdlLCBDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpDbGllbnQqIGNsaWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3
IENvbXBvc2l0aW5nQ29vcmRpbmF0b3IocGFnZSwgY2xpZW50KSk7Cit9CisKK0NvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6On5Db21wb3NpdGluZ0Nvb3JkaW5hdG9yKCkKK3sKKyAgICBwdXJnZUJhY2tp
bmdTdG9yZXMoKTsKKworICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRM
YXllcnMuZW5kKCk7CisgICAgZm9yIChMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVy
ZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpdC0+dmFsdWUtPnNl
dENvb3JkaW5hdG9yKDApOworfQorCitDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yKFBhZ2UqIHBhZ2UsIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudCog
Y2xpZW50KQorICAgIDogbV9wYWdlKHBhZ2UpCisgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAg
LCBtX3Jvb3RDb21wb3NpdGluZ0xheWVyKDApCisgICAgLCBtX2lzUHVyZ2luZyhmYWxzZSkKKyAg
ICAsIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlcyhmYWxzZSkKKyAgICAsIG1fc2hvdWxkU3luY0Zy
YW1lKGZhbHNlKQorICAgICwgbV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXIoZmFs
c2UpCisgICAgLCBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lcih0aGlzLCAmQ29tcG9zaXRp
bmdDb29yZGluYXRvcjo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQpCisjaWYgRU5B
QkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgICwgbV9sYXN0QW5pbWF0aW9uU2Vydmlj
ZVRpbWUoMCkKKyNlbmRpZgoreworICAgIG1fcGFnZS0+c2V0dGluZ3MoKS0+c2V0QXBwbHlEZXZp
Y2VTY2FsZUZhY3RvckluQ29tcG9zaXRvcih0cnVlKTsKKworICAgIC8vIFRoaXMgaXMgYSB0ZW1w
b3Jhcnkgd2F5IHRvIGVuYWJsZSB0aGlzIG9ubHkgaW4gdGhlIEdMIGNhc2UsIHVudGlsIFRleHR1
cmVNYXBwZXJJbWFnZUJ1ZmZlciBpcyByZW1vdmVkLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0ODY5CisgICAgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzZXRTaG91bGRTdXBwb3J0Q29udGVudHNUaWxpbmcodHJ1ZSk7Cit9CisKK3ZvaWQg
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NM
YXllciogbGF5ZXIpCit7CisgICAgaWYgKG1fcm9vdENvbXBvc2l0aW5nTGF5ZXIpCisgICAgICAg
IG1fcm9vdENvbXBvc2l0aW5nTGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKworICAgIG1fcm9v
dENvbXBvc2l0aW5nTGF5ZXIgPSBsYXllcjsKKyAgICBpZiAobV9yb290Q29tcG9zaXRpbmdMYXll
cikKKyAgICAgICAgbV9yb290TGF5ZXItPmFkZENoaWxkQXRJbmRleChtX3Jvb3RDb21wb3NpdGlu
Z0xheWVyLCAwKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzaXplRGlkQ2hh
bmdlKGNvbnN0IEludFNpemUmIG5ld1NpemUpCit7CisgICAgbV9yb290TGF5ZXItPnNldFNpemUo
bmV3U2l6ZSk7CisgICAgbV9jbGllbnQtPm5vdGlmeUZsdXNoUmVxdWlyZWQoKTsKK30KKworYm9v
bCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKQorewor
ICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiBwcm90ZWN0b3IobV9pc0ZsdXNoaW5nTGF5ZXJDaGFu
Z2VzLCB0cnVlKTsKKworICAgIGluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVk
KCk7CisKKyAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVy
T25seSgpOworICAgIG1fY2xpZW50LT5kaWRGbHVzaFJvb3RMYXllcigpOworCisgICAgYm9vbCBk
aWRTeW5jID0gbV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT5mbHVzaENvbXBvc2l0aW5nU3Rh
dGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsKKworICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
KG1fcm9vdExheWVyLmdldCgpKS0+dXBkYXRlQ29udGVudEJ1ZmZlcnNJbmNsdWRpbmdTdWJMYXll
cnMoKTsKKyAgICB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSkt
PnN5bmNQZW5kaW5nU3RhdGVDaGFuZ2VzSW5jbHVkaW5nU3ViTGF5ZXJzKCk7CisKKyAgICBmbHVz
aFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7CisKKyAgICBpZiAobV9zaG91bGRTeW5jRnJh
bWUpIHsKKyAgICAgICAgZGlkU3luYyA9IHRydWU7CisKKyAgICAgICAgaWYgKG1fcm9vdENvbXBv
c2l0aW5nTGF5ZXIpIHsKKyAgICAgICAgICAgIG1fc3RhdGUuY29udGVudHNTaXplID0gcm91bmRl
ZEludFNpemUobV9yb290Q29tcG9zaXRpbmdMYXllci0+c2l6ZSgpKTsKKyAgICAgICAgICAgIGlm
IChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGNvbnRlbnRzTGF5ZXIgPSBtYWluQ29udGVudHNM
YXllcigpKQorICAgICAgICAgICAgICAgIG1fc3RhdGUuY292ZXJlZFJlY3QgPSBjb250ZW50c0xh
eWVyLT5jb3ZlclJlY3QoKTsKKyAgICAgICAgfQorICAgICAgICBtX3N0YXRlLnNjcm9sbFBvc2l0
aW9uID0gbV92aXNpYmxlQ29udGVudHNSZWN0LmxvY2F0aW9uKCk7CisKKyAgICAgICAgbV9jbGll
bnQtPmNvbW1pdFNjZW5lU3RhdGUobV9zdGF0ZSk7CisKKyAgICAgICAgY2xlYXJQZW5kaW5nU3Rh
dGVDaGFuZ2VzKCk7CisgICAgICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIGRpZFN5bmM7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6
c3luY0Rpc3BsYXlTdGF0ZSgpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBtX3BhZ2Ut
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS0+ZGlkQmVnaW5GcmFtZSgpOworI2VuZGlmCisKKyNpZiBF
TkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpICYmICFVU0UoUkVRVUVTVF9BTklNQVRJT05f
RlJBTUVfVElNRVIpICYmICFVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05J
VE9SKQorICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFueSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgYW5p
bWF0aW9uIGNhbGxiYWNrcyBhcmUgYmVpbmcgZXhlY3V0ZWQgYmVmb3JlIHdlIGZsdXNoIHRoZSBs
YXllcnMuCisgICAgbV9sYXN0QW5pbWF0aW9uU2VydmljZVRpbWUgPSBXVEY6Om1vbm90b25pY2Fs
bHlJbmNyZWFzaW5nVGltZSgpOworICAgIG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c2Vy
dmljZVNjcmlwdGVkQW5pbWF0aW9ucyhtX2xhc3RBbmltYXRpb25TZXJ2aWNlVGltZSk7CisjZW5k
aWYKKyAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPnVwZGF0ZUxheW91dEFuZFN0eWxl
SWZOZWVkZWRSZWN1cnNpdmUoKTsKK30KKworI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9G
UkFNRSkKK2RvdWJsZSBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpuZXh0QW5pbWF0aW9uU2Vydmlj
ZVRpbWUoKSBjb25zdAoreworICAgIC8vIEFjY29yZGluZyB0byB0aGUgcmVxdWVzdEFuaW1hdGlv
bkZyYW1lIHNwZWMsIHJBRiBjYWxsYmFja3Mgc2hvdWxkIG5vdCBiZSBmYXN0ZXIgdGhhbiA2MEZQ
Uy4KKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIE1pbmltYWxUaW1lb3V0Rm9yQW5pbWF0aW9ucyA9
IDEuIC8gNjAuOworICAgIHJldHVybiBzdGQ6Om1heDxkb3VibGU+KDAuLCBNaW5pbWFsVGltZW91
dEZvckFuaW1hdGlvbnMgLSBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpICsgbV9s
YXN0QW5pbWF0aW9uU2VydmljZVRpbWUpOworfQorI2VuZGlmCisKK3ZvaWQgQ29tcG9zaXRpbmdD
b29yZGluYXRvcjo6Y2xlYXJQZW5kaW5nU3RhdGVDaGFuZ2VzKCkKK3sKKyAgICBtX3N0YXRlLmxh
eWVyc1RvQ3JlYXRlLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5sYXllcnNUb1VwZGF0ZS5jbGVhcigp
OworICAgIG1fc3RhdGUubGF5ZXJzVG9SZW1vdmUuY2xlYXIoKTsKKworICAgIG1fc3RhdGUuaW1h
Z2VzVG9DcmVhdGUuY2xlYXIoKTsKKyAgICBtX3N0YXRlLmltYWdlc1RvUmVtb3ZlLmNsZWFyKCk7
CisgICAgbV9zdGF0ZS5pbWFnZXNUb1VwZGF0ZS5jbGVhcigpOworICAgIG1fc3RhdGUuaW1hZ2Vz
VG9DbGVhci5jbGVhcigpOworCisgICAgbV9zdGF0ZS51cGRhdGVBdGxhc2VzVG9DcmVhdGUuY2xl
YXIoKTsKKyAgICBtX3N0YXRlLnVwZGF0ZUF0bGFzZXNUb1JlbW92ZS5jbGVhcigpOworCisjaWYg
RU5BQkxFKENTU19TSEFERVJTKQorICAgIG1fc3RhdGUuY3VzdG9tRmlsdGVyc1RvQ3JlYXRlLmNs
ZWFyKCk7CisgICAgbV9zdGF0ZS5jdXN0b21GaWx0ZXJzVG9SZW1vdmUuY2xlYXIoKTsKKyNlbmRp
ZgorfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmluaXRpYWxpemVSb290Q29tcG9z
aXRpbmdMYXllcklmTmVlZGVkKCkKK3sKKyAgICBpZiAobV9kaWRJbml0aWFsaXplUm9vdENvbXBv
c2l0aW5nTGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3RhdGUucm9vdENvbXBvc2l0
aW5nTGF5ZXIgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSkt
PmlkKCk7CisgICAgbV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXIgPSB0cnVlOwor
ICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yOjpjcmVhdGVSb290TGF5ZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBBU1NF
UlQoIW1fcm9vdExheWVyKTsKKyAgICAvLyBDcmVhdGUgYSByb290IGxheWVyLgorICAgIG1fcm9v
dExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMsIHRoaXMpOworI2lmbmRlZiBOREVC
VUcKKyAgICBtX3Jvb3RMYXllci0+c2V0TmFtZSgiQ29tcG9zaXRpbmdDb29yZGluYXRvciByb290
IGxheWVyIik7CisjZW5kaWYKKyAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNl
KTsKKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShzaXplKTsKK30KKwordm9pZCBDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFt
ZSA9IHRydWU7CisgICAgbV9jbGllbnQtPndpbGxTeW5jTGF5ZXJTdGF0ZShzdGF0ZSk7CisgICAg
bV9zdGF0ZS5sYXllcnNUb1VwZGF0ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoaWQsIHN0YXRlKSk7
Cit9CisKK1Bhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IENvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OmNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKEltYWdlKiBpbWFnZSkKK3sKKyAg
ICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQgPSBDb29yZGluYXRlZEltYWdlQmFj
a2luZzo6Z2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRChpbWFnZSk7CisgICAgSW1hZ2VCYWNr
aW5nTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VCYWNraW5ncy5maW5kKGltYWdlSUQpOworICAg
IFJlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gaW1hZ2VCYWNraW5nOworICAgIGlmIChp
dCA9PSBtX2ltYWdlQmFja2luZ3MuZW5kKCkpIHsKKyAgICAgICAgaW1hZ2VCYWNraW5nID0gQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNyZWF0ZSh0aGlzLCBpbWFnZSk7CisgICAgICAgIG1faW1h
Z2VCYWNraW5ncy5hZGQoaW1hZ2VJRCwgaW1hZ2VCYWNraW5nKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgaW1hZ2VCYWNraW5nID0gaXQtPnZhbHVlOworCisgICAgcmV0dXJuIGltYWdlQmFja2luZzsK
K30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQoreworICAgIG1fc3RhdGUuaW1hZ2VzVG9D
cmVhdGUuYXBwZW5kKGltYWdlSUQpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6
OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQsIFBh
c3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBjb29yZGluYXRlZFN1cmZhY2UpCit7CisgICAg
bV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fc3RhdGUuaW1hZ2VzVG9VcGRhdGUuYXBw
ZW5kKHN0ZDo6bWFrZV9wYWlyKGltYWdlSUQsIGNvb3JkaW5hdGVkU3VyZmFjZSkpOworfQorCit2
b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1l
ID0gdHJ1ZTsKKyAgICBtX3N0YXRlLmltYWdlc1RvQ2xlYXIuYXBwZW5kKGltYWdlSUQpOworfQor
Cit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAgaWYgKG1faXNQdXJnaW5nKQorICAg
ICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdl
SUQpKTsKKyAgICBtX2ltYWdlQmFja2luZ3MucmVtb3ZlKGltYWdlSUQpOworCisgICAgbV9zdGF0
ZS5pbWFnZXNUb1JlbW92ZS5hcHBlbmQoaW1hZ2VJRCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdD
b29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpCit7CisgICAgSW1h
Z2VCYWNraW5nTWFwOjppdGVyYXRvciBlbmQgPSBtX2ltYWdlQmFja2luZ3MuZW5kKCk7CisgICAg
Zm9yIChJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2ltYWdlQmFja2luZ3MuYmVn
aW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgaXRlci0+dmFsdWUtPnVwZGF0ZSgp
OworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6Om5vdGlmeUFuaW1hdGlvblN0YXJ0
ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRvdWJsZSAvKiB0aW1lICovKQoreworfQorCit2b2lk
IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6Om5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgR3JhcGhp
Y3NMYXllciopCit7CisgICAgbV9jbGllbnQtPm5vdGlmeUZsdXNoUmVxdWlyZWQoKTsKK30KKwor
Cit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhp
Y3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQs
IEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKK3sK
KyAgICBtX2NsaWVudC0+cGFpbnRMYXllckNvbnRlbnRzKGdyYXBoaWNzTGF5ZXIsIGdyYXBoaWNz
Q29udGV4dCwgY2xpcFJlY3QpOworfQorCitQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IENvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZUdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVu
dCogY2xpZW50KQoreworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbGF5ZXIgPSBuZXcg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGNsaWVudCk7CisgICAgbGF5ZXItPnNldENvb3JkaW5h
dG9yKHRoaXMpOworICAgIG1fcmVnaXN0ZXJlZExheWVycy5hZGQobGF5ZXItPmlkKCksIGxheWVy
KTsKKyAgICBtX3N0YXRlLmxheWVyc1RvQ3JlYXRlLmFwcGVuZChsYXllci0+aWQoKSk7CisgICAg
bGF5ZXItPnNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50KCk7CisgICAgbV9jbGllbnQtPm5v
dGlmeUZsdXNoUmVxdWlyZWQoKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobGF5ZXIpOworfQorCitm
bG9hdCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKK30KKworZmxvYXQgQ29t
cG9zaXRpbmdDb29yZGluYXRvcjo6cGFnZVNjYWxlRmFjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wYWdlLT5wYWdlU2NhbGVGYWN0b3IoKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yOjpjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPENv
b3JkaW5hdGVkU3VyZmFjZT4gY29vcmRpbmF0ZWRTdXJmYWNlKQoreworICAgIG1fc3RhdGUudXBk
YXRlQXRsYXNlc1RvQ3JlYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihhdGxhc0lELCBjb29yZGlu
YXRlZFN1cmZhY2UpKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZW1vdmVV
cGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKQoreworICAgIGlmIChtX2lzUHVyZ2luZykKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fc3RhdGUudXBkYXRlQXRsYXNlc1RvUmVtb3ZlLmFwcGVuZChh
dGxhc0lEKTsKK30KKworRmxvYXRSZWN0IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnZpc2libGVD
b250ZW50c1JlY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX3Zpc2libGVDb250ZW50c1JlY3Q7
Cit9CisKK0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6
bWFpbkNvbnRlbnRzTGF5ZXIoKQoreworICAgIGlmICghbV9yb290Q29tcG9zaXRpbmdMYXllcikK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIobV9yb290Q29tcG9zaXRpbmdMYXllciktPmZpbmRGaXJzdERlc2NlbmRhbnRXaXRoQ29udGVu
dHNSZWN1cnNpdmVseSgpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNldFZp
c2libGVDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFBvaW50
JiB0cmFqZWN0b3J5VmVjdG9yKQoreworICAgIC8vIEEgemVybyB0cmFqZWN0b3J5VmVjdG9yIGlu
ZGljYXRlcyB0aGF0IHRpbGVzIGFsbCBhcm91bmQgdGhlIHZpZXdwb3J0IGFyZSByZXF1ZXN0ZWQu
CisgICAgaWYgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogY29udGVudHNMYXllciA9IG1haW5D
b250ZW50c0xheWVyKCkpCisgICAgICAgIGNvbnRlbnRzTGF5ZXItPnNldFZpc2libGVDb250ZW50
UmVjdFRyYWplY3RvcnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7CisKKyAgICBib29sIGNvbnRl
bnRzUmVjdERpZENoYW5nZSA9IHJlY3QgIT0gbV92aXNpYmxlQ29udGVudHNSZWN0OworICAgIGlm
IChjb250ZW50c1JlY3REaWRDaGFuZ2UpIHsKKyAgICAgICAgbV92aXNpYmxlQ29udGVudHNSZWN0
ID0gcmVjdDsKKworICAgICAgICBMYXllck1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVk
TGF5ZXJzLmVuZCgpOworICAgICAgICBmb3IgKExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fcmVn
aXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBpdC0+
dmFsdWUtPnNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50KCk7CisgICAgfQorCisgICAgRnJh
bWVWaWV3KiB2aWV3ID0gbV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpOworICAgIGlmICh2aWV3
LT51c2VGaXhlZExheW91dCgpKSB7CisgICAgICAgIC8vIFJvdW5kIHRoZSByZWN0IGluc3RlYWQg
b2YgZW5jbG9zaW5nIGl0IHRvIG1ha2Ugc3VyZSB0aGF0IGl0cyBzaXplIHN0YXlzCisgICAgICAg
IC8vIHRoZSBzYW1lIHdoaWxlIHBhbm5pbmcuIFRoaXMgY2FuIGhhdmUgbmFzdHkgZWZmZWN0cyBv
biBsYXlvdXQuCisgICAgICAgIHZpZXctPnNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KHJvdW5k
ZWRJbnRSZWN0KHJlY3QpKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRv
cjo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkKK3sKKyAgICBtX3Jvb3RMYXllci0+
ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdD
b29yZGluYXRvcjo6ZGV0YWNoTGF5ZXIoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBsYXllcikK
K3sKKyAgICBpZiAobV9pc1B1cmdpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcmVnaXN0
ZXJlZExheWVycy5yZW1vdmUobGF5ZXItPmlkKCkpOworCisgICAgc2l6ZV90IGluZGV4ID0gbV9z
dGF0ZS5sYXllcnNUb0NyZWF0ZS5maW5kKGxheWVyLT5pZCgpKTsKKyAgICBpZiAoaW5kZXggIT0g
bm90Rm91bmQpIHsKKyAgICAgICAgbV9zdGF0ZS5sYXllcnNUb0NyZWF0ZS5yZW1vdmUoaW5kZXgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zdGF0ZS5sYXllcnNUb1JlbW92ZS5h
cHBlbmQobGF5ZXItPmlkKCkpOworICAgIG1fY2xpZW50LT5ub3RpZnlGbHVzaFJlcXVpcmVkKCk7
Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y29tbWl0U2Nyb2xsT2Zmc2V0KHVp
bnQzMl90IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG9mZnNldCkKK3sKKyAgICBM
YXllck1hcDo6aXRlcmF0b3IgaSA9IG1fcmVnaXN0ZXJlZExheWVycy5maW5kKGxheWVySUQpOwor
ICAgIGlmIChpID09IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaS0+dmFsdWUtPmNvbW1pdFNjcm9sbE9mZnNldChvZmZzZXQpOworfQorCit2b2lkIENv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJlbmRlck5leHRGcmFtZSgpCit7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV91
cGRhdGVBdGxhc2VzW2ldLT5kaWRTd2FwQnVmZmVycygpOworfQorCit2b2lkIENvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OnB1cmdlQmFja2luZ1N0b3JlcygpCit7CisgICAgVGVtcG9yYXJ5Q2hhbmdl
PGJvb2w+IHB1cmdpbmdUb2dnbGUobV9pc1B1cmdpbmcsIHRydWUpOworCisgICAgTGF5ZXJNYXA6
Oml0ZXJhdG9yIGVuZCA9IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKKyAgICBmb3IgKExheWVy
TWFwOjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCisgICAgICAgIGl0LT52YWx1ZS0+cHVyZ2VCYWNraW5nU3RvcmVzKCk7CisKKyAgICBt
X2ltYWdlQmFja2luZ3MuY2xlYXIoKTsKKyAgICBtX3VwZGF0ZUF0bGFzZXMuY2xlYXIoKTsKK30K
KworYm9vbCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpwYWludFRvU3VyZmFjZShjb25zdCBJbnRT
aXplJiBzaXplLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzIGZsYWdzLCB1aW50MzJfdCYgYXRs
YXNJRCwgSW50UG9pbnQmIG9mZnNldCwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpDbGllbnQqIGNsaWVu
dCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV91cGRhdGVBdGxhc2VzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIFVwZGF0ZUF0bGFzKiBhdGxhcyA9IG1fdXBkYXRlQXRsYXNlc1tp
XS5nZXQoKTsKKyAgICAgICAgaWYgKGF0bGFzLT5zdXBwb3J0c0FscGhhKCkgPT0gKGZsYWdzICYg
Q29vcmRpbmF0ZWRTdXJmYWNlOjpTdXBwb3J0c0FscGhhKSkgeworICAgICAgICAgICAgLy8gVGhp
cyB3aWxsIGJlIGZhbHNlIGlmIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIgc3BhY2UuCisg
ICAgICAgICAgICBpZiAoYXRsYXMtPnBhaW50T25BdmFpbGFibGVCdWZmZXIoc2l6ZSwgYXRsYXNJ
RCwgb2Zmc2V0LCBjbGllbnQpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IGludCBTY3JhdGNoQnVmZmVyRGltZW5zaW9u
ID0gMTAyNDsgLy8gU2hvdWxkIGJlIGEgcG93ZXIgb2YgdHdvLgorICAgIG1fdXBkYXRlQXRsYXNl
cy5hcHBlbmQoYWRvcHRQdHIobmV3IFVwZGF0ZUF0bGFzKHRoaXMsIFNjcmF0Y2hCdWZmZXJEaW1l
bnNpb24sIGZsYWdzKSkpOworICAgIHNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpOwor
ICAgIHJldHVybiBtX3VwZGF0ZUF0bGFzZXMubGFzdCgpLT5wYWludE9uQXZhaWxhYmxlQnVmZmVy
KHNpemUsIGF0bGFzSUQsIG9mZnNldCwgY2xpZW50KTsKK30KKworY29uc3QgZG91YmxlIFJlbGVh
c2VJbmFjdGl2ZUF0bGFzZXNUaW1lckludGVydmFsID0gMC41OworCit2b2lkIENvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OnNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpCit7CisgICAgaWYg
KCFtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3Jl
bGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5zdGFydFJlcGVhdGluZyhSZWxlYXNlSW5hY3RpdmVB
dGxhc2VzVGltZXJJbnRlcnZhbCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6
cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQoVGltZXI8Q29tcG9zaXRpbmdDb29yZGlu
YXRvcj4qKQoreworICAgIC8vIFdlIGFsd2F5cyB3YW50IHRvIGtlZXAgb25lIGF0bGFzIGZvciBu
b24tY29tcG9zaXRlZCBjb250ZW50LgorICAgIE93blB0cjxVcGRhdGVBdGxhcz4gYXRsYXNUb0tl
ZXBBbnl3YXk7CisgICAgYm9vbCBmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRl
bnQgPSBmYWxzZTsKKyAgICBmb3IgKGludCBpID0gbV91cGRhdGVBdGxhc2VzLnNpemUoKSAtIDE7
ICBpID49IDA7IC0taSkgeworICAgICAgICBVcGRhdGVBdGxhcyogYXRsYXMgPSBtX3VwZGF0ZUF0
bGFzZXNbaV0uZ2V0KCk7CisgICAgICAgIGlmICghYXRsYXMtPmlzSW5Vc2UoKSkKKyAgICAgICAg
ICAgIGF0bGFzLT5hZGRUaW1lSW5hY3RpdmUoUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50
ZXJ2YWwpOworICAgICAgICBib29sIHVzYWJsZUZvck5vbkNvbXBvc2l0ZWRDb250ZW50ID0gIWF0
bGFzLT5zdXBwb3J0c0FscGhhKCk7CisgICAgICAgIGlmIChhdGxhcy0+aXNJbmFjdGl2ZSgpKSB7
CisgICAgICAgICAgICBpZiAoIWZvdW5kQWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVu
dCAmJiAhYXRsYXNUb0tlZXBBbnl3YXkgJiYgdXNhYmxlRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQp
CisgICAgICAgICAgICAgICAgYXRsYXNUb0tlZXBBbnl3YXkgPSBtX3VwZGF0ZUF0bGFzZXNbaV0u
cmVsZWFzZSgpOworICAgICAgICAgICAgbV91cGRhdGVBdGxhc2VzLnJlbW92ZShpKTsKKyAgICAg
ICAgfSBlbHNlIGlmICh1c2FibGVGb3JOb25Db21wb3NpdGVkQ29udGVudCkKKyAgICAgICAgICAg
IGZvdW5kQWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVudCA9IHRydWU7CisgICAgfQor
CisgICAgaWYgKCFmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgJiYgYXRs
YXNUb0tlZXBBbnl3YXkpCisgICAgICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBlbmQoYXRsYXNUb0tl
ZXBBbnl3YXkucmVsZWFzZSgpKTsKKworICAgIGlmIChtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpIDw9
IDEpCisgICAgICAgIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyLnN0b3AoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9y
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZjgwZmQ4M2FmYTE5YmY4OWQwNDQwYmUyOWNmZWVjNWQ0MjVjMjk4Zgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmgKQEAgLTAsMCArMSwxNjggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yX2gKKyNkZWZpbmUgQ29tcG9zaXRpbmdDb29yZGluYXRvcl9oCisKKyNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
aCIKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaCIKKyNpbmNsdWRlICJDb29y
ZGluYXRlZEltYWdlQmFja2luZy5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckZhY3Rvcnku
aCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJV
cGRhdGVBdGxhcy5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworI2lmIEVOQUJMRShDU1Nf
U0hBREVSUykKKyNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCisjZW5kaWYKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBQYWdlOworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xh
c3MgR3JhcGhpY3NMYXllcjsKK2NsYXNzIENvb3JkaW5hdGVkU3VyZmFjZTsKKworY2xhc3MgQ29t
cG9zaXRpbmdDb29yZGluYXRvciA6IHB1YmxpYyBHcmFwaGljc0xheWVyQ2xpZW50CisgICAgLCBw
dWJsaWMgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50CisgICAgLCBwdWJsaWMgQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmc6OkNsaWVudAorICAgICwgcHVibGljIFVwZGF0ZUF0bGFzOjpDbGll
bnQKKyAgICAsIHB1YmxpYyBHcmFwaGljc0xheWVyRmFjdG9yeSB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQ29tcG9zaXRpbmdDb29yZGluYXRvcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIGNsYXNzIENsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkRmx1c2hSb290TGF5ZXIoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCB3
aWxsU3luY0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKSA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKCkgPSAwOworICAgICAgICB2
aXJ0dWFsIHZvaWQgY29tbWl0U2NlbmVTdGF0ZShDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKSA9
IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludExheWVyQ29udGVudHMoY29uc3QgR3JhcGhp
Y3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSA9IDA7
CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPENvbXBvc2l0aW5nQ29vcmRpbmF0b3I+
IGNyZWF0ZShQYWdlKiwgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q2xpZW50Kik7CisgICAgdmly
dHVhbCB+Q29tcG9zaXRpbmdDb29yZGluYXRvcigpOworCisgICAgdm9pZCBzZXRSb290Q29tcG9z
aXRpbmdMYXllcihHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBzaXplRGlkQ2hhbmdlKGNvbnN0
IEludFNpemUmIG5ld1NpemUpOworICAgIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFu
Z2VkKCk7CisKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7CisgICAg
dm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKKyAgICB2b2lkIGNvbW1pdFNjcm9sbE9mZnNldCh1
aW50MzJfdCBsYXllcklELCBjb25zdCBJbnRTaXplJiBvZmZzZXQpOworCisgICAgdm9pZCBjcmVh
dGVSb290TGF5ZXIoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgY2xlYXJSb290TGF5ZXIoKSB7
IG1fcm9vdExheWVyID0gbnVsbHB0cjsgfQorICAgIEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcigp
IGNvbnN0IHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CisgICAgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyKiBtYWluQ29udGVudHNMYXllcigpOworCisgICAgYm9vbCBmbHVzaFBlbmRpbmdM
YXllckNoYW5nZXMoKTsKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmIHN0YXRlKCkgeyBy
ZXR1cm4gbV9zdGF0ZTsgfQorCisgICAgdm9pZCBzeW5jRGlzcGxheVN0YXRlKCk7CisKKyNpZiBF
TkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAgZG91YmxlIG5leHRBbmltYXRpb25T
ZXJ2aWNlVGltZSgpIGNvbnN0OworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgQ29tcG9zaXRpbmdD
b29yZGluYXRvcihQYWdlKiwgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q2xpZW50Kik7CisKKyAg
ICAvLyBHcmFwaGljc0xheWVyQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlv
blN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NM
YXllciosIEdyYXBoaWNzQ29udGV4dCYsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25z
dCBJbnRSZWN0JiBjbGlwUmVjdCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBmbG9hdCBkZXZpY2VT
Y2FsZUZhY3RvcigpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgZmxvYXQgcGFnZVNjYWxl
RmFjdG9yKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICAvLyBDb29yZGluYXRlZEltYWdlQmFja2lu
Zzo6Q2xpZW50CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSW1hZ2VC
YWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRT
dXJmYWNlPikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29u
dGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklE
RTsKKworICAgIC8vIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudAorICAgIHZpcnR1YWwg
Ym9vbCBpc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9p
c0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzOyB9CisgICAgdmlydHVhbCBGbG9hdFJlY3QgdmlzaWJsZUNv
bnRlbnRzUmVjdCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDb29y
ZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoSW1hZ2UqKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHBhaW50VG9TdXJmYWNlKGNvbnN0
IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzLCB1
aW50MzJfdCYgLyogYXRsYXNJRCAqLywgV2ViQ29yZTo6SW50UG9pbnQmLCBXZWJDb3JlOjpDb29y
ZGluYXRlZFN1cmZhY2U6OkNsaWVudCopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzeW5j
TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0
YXRlJikgT1ZFUlJJREU7CisKKyAgICAvLyBVcGRhdGVBdGxhczo6Q2xpZW50CisgICAgdmlydHVh
bCB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8Q29v
cmRpbmF0ZWRTdXJmYWNlPikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVVwZGF0
ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpIE9WRVJSSURFOworCisgICAgLy8gR3JhcGhpY3NMYXll
ckZhY3RvcnkKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gY3JlYXRlR3Jh
cGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50KikgT1ZFUlJJREU7CisKKyAgICB2b2lkIGlu
aXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKCk7CisgICAgdm9pZCBmbHVzaFBl
bmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7CisgICAgdm9pZCBjbGVhclBlbmRpbmdTdGF0ZUNo
YW5nZXMoKTsKKworICAgIHZvaWQgc2NoZWR1bGVSZWxlYXNlSW5hY3RpdmVBdGxhc2VzKCk7CisK
KyAgICB2b2lkIHJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKFRpbWVyPENvbXBvc2l0
aW5nQ29vcmRpbmF0b3I+Kik7CisKKyAgICBQYWdlKiBtX3BhZ2U7CisgICAgQ29tcG9zaXRpbmdD
b29yZGluYXRvcjo6Q2xpZW50KiBtX2NsaWVudDsKKworICAgIE93blB0cjxHcmFwaGljc0xheWVy
PiBtX3Jvb3RMYXllcjsKKyAgICBHcmFwaGljc0xheWVyKiBtX3Jvb3RDb21wb3NpdGluZ0xheWVy
OworCisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlIG1fc3RhdGU7CisKKyAgICB0eXBlZGVm
IEhhc2hNYXA8Q29vcmRpbmF0ZWRMYXllcklELCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiBM
YXllck1hcDsKKyAgICBMYXllck1hcCBtX3JlZ2lzdGVyZWRMYXllcnM7CisgICAgdHlwZWRlZiBI
YXNoTWFwPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxDb29yZGluYXRlZEltYWdl
QmFja2luZz4gPiBJbWFnZUJhY2tpbmdNYXA7CisgICAgSW1hZ2VCYWNraW5nTWFwIG1faW1hZ2VC
YWNraW5nczsKKyAgICBWZWN0b3I8T3duUHRyPFVwZGF0ZUF0bGFzPiA+IG1fdXBkYXRlQXRsYXNl
czsKKworICAgIC8vIFdlIGRvbid0IHNlbmQgdGhlIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gcmVsZWFz
aW5nIHJlc291cmNlcyB0byByZW5kZXJlciBkdXJpbmcgcHVyZ2luZywgYmVjYXVzZSByZW5kZXJl
ciBhbHJlYWR5IGhhZCByZW1vdmVkIGFsbCByZXNvdXJjZXMuCisgICAgYm9vbCBtX2lzUHVyZ2lu
ZzsKKyAgICBib29sIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlczsKKworICAgIEZsb2F0UmVjdCBt
X3Zpc2libGVDb250ZW50c1JlY3Q7CisKKyAgICBib29sIG1fc2hvdWxkU3luY0ZyYW1lOworICAg
IGJvb2wgbV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXI7CisgICAgVGltZXI8Q29t
cG9zaXRpbmdDb29yZGluYXRvcj4gbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXI7CisKKyNp
ZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAgZG91YmxlIG1fbGFzdEFuaW1h
dGlvblNlcnZpY2VUaW1lOworI2VuZGlmCit9OworCit9CisKKyNlbmRpZgorCisjZW5kaWYgLy8g
Q29tcG9zaXRpbmdDb29yZGluYXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhv
c3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAppbmRleCAxODZiMmViNjY0ZTE4ZGY5
YTg5NWMwNWM5MDQ0Zjg2NTA2NTU2ZmUzLi41OTBiNzRjMDc4OWQ1ZDU2OTMwYzBjOTNhZTFkYjI3
MDQ0NDBjNmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTQwLDE4ICs0MCw4IEBACiAjaW5jbHVkZSAiV2Vi
UGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzU3VyZmFj
ZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvUGFnZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1JlbmRlckxheWVyQmFja2luZy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU3VyZmFjZVVw
ZGF0ZUluZm8uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
Lmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL1RlbXBvcmFy
eUNoYW5nZS5oPgogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogI2luY2x1ZGUgIkN1c3RvbUZp
bHRlclZhbGlkYXRlZFByb2dyYW0uaCIKQEAgLTcyLDUxICs2MiwyNiBAQCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6On5Db29yZGluYXRlZExheWVyVHJlZUhvc3QoKQogI2lmIEVOQUJMRShDU1Nf
U0hBREVSUykKICAgICBkaXNjb25uZWN0Q3VzdG9tRmlsdGVyUHJvZ3JhbXMoKTsKICNlbmRpZgot
ICAgIHB1cmdlQmFja2luZ1N0b3JlcygpOwotCi0gICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9
IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKLSAgICBmb3IgKExheWVyTWFwOjppdGVyYXRvciBp
dCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
IGl0LT52YWx1ZS0+c2V0Q29vcmRpbmF0b3IoMCk7CiB9CiAKIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KFdlYlBhZ2UqIHdlYlBhZ2UpCiAgICAgOiBM
YXllclRyZWVIb3N0KHdlYlBhZ2UpCi0gICAgLCBtX3Jvb3RDb21wb3NpdGluZ0xheWVyKDApCiAg
ICAgLCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaChmYWxzZSkKICAgICAsIG1faXNW
YWxpZCh0cnVlKQotICAgICwgbV9pc1B1cmdpbmcoZmFsc2UpCi0gICAgLCBtX2lzRmx1c2hpbmdM
YXllckNoYW5nZXMoZmFsc2UpCi0gICAgLCBtX3dhaXRpbmdGb3JVSVByb2Nlc3ModHJ1ZSkKICAg
ICAsIG1faXNTdXNwZW5kZWQoZmFsc2UpCi0gICAgLCBtX3Nob3VsZFN5bmNGcmFtZShmYWxzZSkK
LSAgICAsIG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyKGZhbHNlKQorICAgICwg
bV9pc1dhaXRpbmdGb3JSZW5kZXJlcih0cnVlKQogICAgICwgbV9sYXllckZsdXNoVGltZXIodGhp
cywgJkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQpCi0gICAg
LCBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lcih0aGlzLCAmQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpyZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJGaXJlZCkKICAgICAsIG1fbGF5ZXJG
bHVzaFNjaGVkdWxpbmdFbmFibGVkKHRydWUpCiAgICAgLCBtX2ZvcmNlUmVwYWludEFzeW5jQ2Fs
bGJhY2tJRCgwKQotICAgICwgbV9hbmltYXRpb25zTG9ja2VkKGZhbHNlKQotI2lmIEVOQUJMRShS
RVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICAsIG1fbGFzdEFuaW1hdGlvblNlcnZpY2VUaW1l
KDApCi0jZW5kaWYKIHsKLSAgICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCktPnNl
dEFwcGx5RGV2aWNlU2NhbGVGYWN0b3JJbkNvbXBvc2l0b3IodHJ1ZSk7CisgICAgbV9jb29yZGlu
YXRvciA9IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZSh3ZWJQYWdlLT5jb3JlUGFnZSgp
LCB0aGlzKTsKIAotICAgIC8vIENyZWF0ZSBhIHJvb3QgbGF5ZXIuCi0gICAgbV9yb290TGF5ZXIg
PSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcywgdGhpcyk7Ci0jaWZuZGVmIE5ERUJVRwotICAg
IG1fcm9vdExheWVyLT5zZXROYW1lKCJDb29yZGluYXRlZExheWVyVHJlZUhvc3Qgcm9vdCBsYXll
ciIpOwotI2VuZGlmCi0gICAgbV9yb290TGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7Ci0g
ICAgbV9yb290TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOwotICAgIG1fbGF5ZXJU
cmVlQ29udGV4dC5jb29yZGluYXRlZExheWVySUQgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cihtX3Jvb3RMYXllci5nZXQoKSktPmlkKCk7CisgICAgbV9jb29yZGluYXRvci0+Y3JlYXRlUm9v
dExheWVyKHdlYlBhZ2UtPnNpemUoKSk7CisgICAgbV9sYXllclRyZWVDb250ZXh0LmNvb3JkaW5h
dGVkTGF5ZXJJRCA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fY29vcmRpbmF0b3ItPnJv
b3RMYXllcigpKS0+aWQoKTsKIAogICAgIENvb3JkaW5hdGVkU3VyZmFjZTo6c2V0RmFjdG9yeShj
cmVhdGVDb29yZGluYXRlZFN1cmZhY2UpOwogCi0gICAgLy8gVGhpcyBpcyBhIHRlbXBvcmFyeSB3
YXkgdG8gZW5hYmxlIHRoaXMgb25seSBpbiB0aGUgR0wgY2FzZSwgdW50aWwgVGV4dHVyZU1hcHBl
ckltYWdlQnVmZmVyIGlzIHJlbW92ZWQuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ4NjkKLSAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnNldFNob3VsZFN1cHBvcnRDb250ZW50c1RpbGluZyh0cnVlKTsKLQotICAgIGlmIChtX3dlYlBh
Z2UtPmhhc1BhZ2VPdmVybGF5KCkpCisgICAgaWYgKHdlYlBhZ2UtPmhhc1BhZ2VPdmVybGF5KCkp
CiAgICAgICAgIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKIAogICAgIHNjaGVkdWxlTGF5ZXJG
bHVzaCgpOwpAQCAtMTU4LDEyICsxMjMsNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sCiAKIHZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJD
b3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQogewotICAgIGlmIChtX3Jvb3RDb21w
b3NpdGluZ0xheWVyKQotICAgICAgICBtX3Jvb3RDb21wb3NpdGluZ0xheWVyLT5yZW1vdmVGcm9t
UGFyZW50KCk7Ci0KLSAgICBtX3Jvb3RDb21wb3NpdGluZ0xheWVyID0gZ3JhcGhpY3NMYXllcjsK
LSAgICBpZiAobV9yb290Q29tcG9zaXRpbmdMYXllcikKLSAgICAgICAgbV9yb290TGF5ZXItPmFk
ZENoaWxkQXRJbmRleChtX3Jvb3RDb21wb3NpdGluZ0xheWVyLCAwKTsKKyAgICBtX2Nvb3JkaW5h
dG9yLT5zZXRSb290Q29tcG9zaXRpbmdMYXllcihncmFwaGljc0xheWVyKTsKIH0KIAogdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmludmFsaWRhdGUoKQpAQCAtMTcxLDcgKzEzMSw3IEBA
IHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKCkKICAgICBjYW5jZWxQ
ZW5kaW5nTGF5ZXJGbHVzaCgpOwogCiAgICAgQVNTRVJUKG1faXNWYWxpZCk7Ci0gICAgbV9yb290
TGF5ZXIgPSBudWxscHRyOworICAgIG1fY29vcmRpbmF0b3ItPmNsZWFyUm9vdExheWVyKCk7CiAg
ICAgbV9pc1ZhbGlkID0gZmFsc2U7CiB9CiAKQEAgLTE3OSwxMiArMTM5LDEyIEBAIHZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnQoKQogewogICAgIC8vIFRoaXMgaXMg
bmVjZXNzYXJ5IGZvciBydW5uaW5nIGxheW91dCB0ZXN0cy4gU2luY2UgaW4gdGhpcyBjYXNlIHdl
IGFyZSBub3Qgd2FpdGluZyBmb3IgYSBVSVByb2Nlc3MgdG8gcmVwbHkgbmljZWx5LgogICAgIC8v
IEluc3RlYWQgd2UgYXJlIGp1c3QgdHJpZ2dlcmluZyBmb3JjZVJlcGFpbnQuIEJ1dCB3ZSBzdGls
bCB3YW50IHRvIGhhdmUgdGhlIHNjcmlwdGVkIGFuaW1hdGlvbiBjYWxsYmFja3MgYmVpbmcgZXhl
Y3V0ZWQuCi0gICAgc3luY0Rpc3BsYXlTdGF0ZSgpOworICAgIG1fY29vcmRpbmF0b3ItPnN5bmNE
aXNwbGF5U3RhdGUoKTsKIAogICAgIC8vIFdlIG5lZWQgdG8gc2NoZWR1bGUgYW5vdGhlciBmbHVz
aCwgb3RoZXJ3aXNlIHRoZSBmb3JjZWQgcGFpbnQgbWlnaHQgY2FuY2VsIGEgbGF0ZXIgZXhwZWN0
ZWQgZmx1c2guCiAgICAgLy8gVGhpcyBpcyBhbGlnbmVkIHdpdGggTGF5ZXJUcmVlSG9zdENBLgog
ICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygp
OworICAgIG1fY29vcmRpbmF0b3ItPmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOwogfQogCiBi
b29sIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50QXN5bmModWludDY0X3Qg
Y2FsbGJhY2tJRCkKQEAgLTE5OCw3ICsxNTgsNyBAQCBib29sIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6Zm9yY2VSZXBhaW50QXN5bmModWludDY0X3QgY2FsbGJhY2tJRCkKIAogdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgbmV3U2l6ZSkKIHsKLSAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKKyAgICBt
X2Nvb3JkaW5hdG9yLT5zaXplRGlkQ2hhbmdlKG5ld1NpemUpOwogICAgIHNjaGVkdWxlTGF5ZXJG
bHVzaCgpOwogfQogCkBAIC0yMzMsMTExICsxOTMsNDkgQEAgdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnNldFBhZ2VPdmVybGF5T3BhY2l0eShQYWdlT3ZlcmxheSosIGZsb2F0IHZhbHVl
KQogICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwogfQogCi1ib29sIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKK3ZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKIHsKLSAgICBpZiAobV93YWl0aW5n
Rm9yVUlQcm9jZXNzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBUZW1wb3JhcnlDaGFu
Z2U8Ym9vbD4gcHJvdGVjdG9yKG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlcywgdHJ1ZSk7Ci0KLSAg
ICBpbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCgpOwotCi0gICAgbV9yb290
TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLSAgICBpZiAo
bV9wYWdlT3ZlcmxheUxheWVyKQotICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPmZsdXNoQ29t
cG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLQotICAgIGJvb2wgZGlkU3luYyA9IG1f
d2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+Zmx1c2hDb21wb3NpdGlu
Z1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7Ci0KLSAgICB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcihtX3Jvb3RMYXllci5nZXQoKSktPnVwZGF0ZUNvbnRlbnRCdWZmZXJzSW5jbHVkaW5nU3Vi
TGF5ZXJzKCk7Ci0gICAgdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0
KCkpLT5zeW5jUGVuZGluZ1N0YXRlQ2hhbmdlc0luY2x1ZGluZ1N1YkxheWVycygpOwotCi0gICAg
Zmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpOwotCi0gICAgaWYgKG1fc2hvdWxkU3lu
Y0ZyYW1lKSB7Ci0gICAgICAgIGRpZFN5bmMgPSB0cnVlOwotCi0gICAgICAgIGlmIChtX3Jvb3RD
b21wb3NpdGluZ0xheWVyKSB7Ci0gICAgICAgICAgICBtX3N0YXRlLmNvbnRlbnRzU2l6ZSA9IHJv
dW5kZWRJbnRTaXplKG1fcm9vdENvbXBvc2l0aW5nTGF5ZXItPnNpemUoKSk7Ci0gICAgICAgICAg
ICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBjb250ZW50c0xheWVyID0gbWFpbkNvbnRl
bnRzTGF5ZXIoKSkKLSAgICAgICAgICAgICAgICBtX3N0YXRlLmNvdmVyZWRSZWN0ID0gY29udGVu
dHNMYXllci0+Y292ZXJSZWN0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtX3N0YXRlLnNjcm9s
bFBvc2l0aW9uID0gbV92aXNpYmxlQ29udGVudHNSZWN0LmxvY2F0aW9uKCk7Ci0KLSAgICAgICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
Q29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlKG1fc3RhdGUpKTsKLQotICAgICAgICBjbGVh
clBlbmRpbmdTdGF0ZUNoYW5nZXMoKTsKLSAgICAgICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0g
dHJ1ZTsKLSAgICAgICAgbV9zaG91bGRTeW5jRnJhbWUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBp
ZiAobV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQpIHsKLSAgICAgICAgbV93ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFjayhtX2ZvcmNlUmVwYWludEFz
eW5jQ2FsbGJhY2tJRCkpOwotICAgICAgICBtX2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJRCA9
IDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRpZFN5bmM7CisgICAgbV9jb29yZGluYXRvci0+c2V0
VmlzaWJsZUNvbnRlbnRzUmVjdChyZWN0LCB0cmFqZWN0b3J5VmVjdG9yKTsKKyAgICBzY2hlZHVs
ZUxheWVyRmx1c2goKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNsZWFy
UGVuZGluZ1N0YXRlQ2hhbmdlcygpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVu
ZGVyTmV4dEZyYW1lKCkKIHsKLSAgICBtX3N0YXRlLmxheWVyc1RvQ3JlYXRlLmNsZWFyKCk7Ci0g
ICAgbV9zdGF0ZS5sYXllcnNUb1VwZGF0ZS5jbGVhcigpOwotICAgIG1fc3RhdGUubGF5ZXJzVG9S
ZW1vdmUuY2xlYXIoKTsKLQotICAgIG1fc3RhdGUuaW1hZ2VzVG9DcmVhdGUuY2xlYXIoKTsKLSAg
ICBtX3N0YXRlLmltYWdlc1RvUmVtb3ZlLmNsZWFyKCk7Ci0gICAgbV9zdGF0ZS5pbWFnZXNUb1Vw
ZGF0ZS5jbGVhcigpOwotICAgIG1fc3RhdGUuaW1hZ2VzVG9DbGVhci5jbGVhcigpOwotCi0gICAg
bV9zdGF0ZS51cGRhdGVBdGxhc2VzVG9DcmVhdGUuY2xlYXIoKTsKLSAgICBtX3N0YXRlLnVwZGF0
ZUF0bGFzZXNUb1JlbW92ZS5jbGVhcigpOwotCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAg
IG1fc3RhdGUuY3VzdG9tRmlsdGVyc1RvQ3JlYXRlLmNsZWFyKCk7Ci0gICAgbV9zdGF0ZS5jdXN0
b21GaWx0ZXJzVG9SZW1vdmUuY2xlYXIoKTsKLSNlbmRpZgorICAgIG1fY29vcmRpbmF0b3ItPnJl
bmRlck5leHRGcmFtZSgpOworICAgIG1faXNXYWl0aW5nRm9yUmVuZGVyZXIgPSBmYWxzZTsKKyAg
ICBzY2hlZHVsZUxheWVyRmx1c2goKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKCkKK3ZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpwdXJnZUJhY2tpbmdTdG9yZXMoKQogewotICAgIGlmIChtX2Rp
ZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9zdGF0ZS5yb290Q29tcG9zaXRpbmdMYXllciA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
KG1fcm9vdExheWVyLmdldCgpKS0+aWQoKTsKLSAgICBtX2RpZEluaXRpYWxpemVSb290Q29tcG9z
aXRpbmdMYXllciA9IHRydWU7Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1f
Y29vcmRpbmF0b3ItPnB1cmdlQmFja2luZ1N0b3JlcygpOwogfQogCi12b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6c3luY0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6d2lsbFN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRl
JiBzdGF0ZSkKIHsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0KICNpZiBFTkFCTEUo
Q1NTX1NIQURFUlMpCi0gICAgcHJlcGFyZUN1c3RvbUZpbHRlclByb3hpZXNJZk5lZWRlZChzdGF0
ZSk7Ci0jZW5kaWYKKyAgICBpZiAoc3RhdGUuYW5pbWF0aW9uc0NoYW5nZWQpCisgICAgICAgIHBy
ZXBhcmVDdXN0b21GaWx0ZXJQcm94aWVzRm9yQW5pbWF0aW9ucyhzdGF0ZS5hbmltYXRpb25zKTsK
IAotICAgIG1fc3RhdGUubGF5ZXJzVG9VcGRhdGUuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGlkLCBz
dGF0ZSkpOworICAgIGlmIChzdGF0ZS5maWx0ZXJzQ2hhbmdlZCkKKyAgICAgICAgY2hlY2tDdXN0
b21GaWx0ZXJQcm9ncmFtUHJveGllcyhzdGF0ZS5maWx0ZXJzKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyNlbmRpZgogfQogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQotdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnByZXBhcmVDdXN0b21GaWx0ZXJQcm94aWVzSWZO
ZWVkZWQoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQotewotICAgIGlmIChz
dGF0ZS5hbmltYXRpb25zQ2hhbmdlZCkgewotICAgICAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9u
cyYgYWN0aXZlQW5pbWF0aW9ucyA9IHN0YXRlLmFuaW1hdGlvbnM7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYWN0aXZlQW5pbWF0aW9ucy5hbmltYXRpb25zKCkuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMgPSBhY3Rp
dmVBbmltYXRpb25zLmFuaW1hdGlvbnMoKS5hdChpKS5rZXlmcmFtZXMoKTsKLSAgICAgICAgICAg
IGlmIChrZXlmcmFtZXMucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5V2Via2l0RmlsdGVy
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9
IDA7IGogPCBrZXlmcmFtZXMuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICBjb25zdCBG
aWx0ZXJBbmltYXRpb25WYWx1ZSYgZmlsdGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBGaWx0
ZXJBbmltYXRpb25WYWx1ZSY+KGtleWZyYW1lcy5hdChqKSk7Ci0gICAgICAgICAgICAgICAgY2hl
Y2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhmaWx0ZXJWYWx1ZS52YWx1ZSgpKTsKLSAgICAg
ICAgICAgIH0KK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwcmVwYXJlQ3VzdG9tRmls
dGVyUHJveGllc0ZvckFuaW1hdGlvbnMoR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFjdGl2ZUFu
aW1hdGlvbnMpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhY3RpdmVBbmltYXRpb25z
LmFuaW1hdGlvbnMoKS5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVl
TGlzdCYga2V5ZnJhbWVzID0gYWN0aXZlQW5pbWF0aW9ucy5hbmltYXRpb25zKCkuYXQoaSkua2V5
ZnJhbWVzKCk7CisgICAgICAgIGlmIChrZXlmcmFtZXMucHJvcGVydHkoKSAhPSBBbmltYXRlZFBy
b3BlcnR5V2Via2l0RmlsdGVyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGZvciAo
c2l6ZV90IGogPSAwOyBqIDwga2V5ZnJhbWVzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICBj
b25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSYgZmlsdGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25z
dCBGaWx0ZXJBbmltYXRpb25WYWx1ZSY+KGtleWZyYW1lcy5hdChqKSk7CisgICAgICAgICAgICBj
aGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKGZpbHRlclZhbHVlLnZhbHVlKCkpOwogICAg
ICAgICB9CiAgICAgfQotCi0gICAgaWYgKHN0YXRlLmZpbHRlcnNDaGFuZ2VkKQotICAgICAgICBj
aGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKHN0YXRlLmZpbHRlcnMpOwogfQogCiB2b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGll
cyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQpAQCAtMzY3LDcgKzI2NSw3IEBAIHZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94
aWVzKGNvbnN0IEZpbHRlck9wZXJhCiAgICAgICAgIGlmICghY3VzdG9tRmlsdGVyUHJvZ3JhbVBy
b3h5LT5jbGllbnQoKSkgewogICAgICAgICAgICAgY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5z
ZXRDbGllbnQodGhpcyk7CiAgICAgICAgICAgICBtX2N1c3RvbUZpbHRlclByb2dyYW1zLmFkZChj
dXN0b21GaWx0ZXJQcm9ncmFtUHJveHkuZ2V0KCkpOwotICAgICAgICAgICAgbV9zdGF0ZS5jdXN0
b21GaWx0ZXJzVG9DcmVhdGUuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGN1c3RvbUZpbHRlclByb2dy
YW1Qcm94eS0+aWQoKSwgY3VzdG9tT3BlcmF0aW9uLT52YWxpZGF0ZWRQcm9ncmFtKCktPnZhbGlk
YXRlZFByb2dyYW1JbmZvKCkpKTsKKyAgICAgICAgICAgIG1fY29vcmRpbmF0b3ItPnN0YXRlKCku
Y3VzdG9tRmlsdGVyc1RvQ3JlYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihjdXN0b21GaWx0ZXJQ
cm9ncmFtUHJveHktPmlkKCksIGN1c3RvbU9wZXJhdGlvbi0+dmFsaWRhdGVkUHJvZ3JhbSgpLT52
YWxpZGF0ZWRQcm9ncmFtSW5mbygpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAv
LyBJZiB0aGUgY2xpZW50IHdhcyBub3QgZGlzY29ubmVjdGVkIHRoZW4gdGhpcyBjb29yZGluYXRv
ciBtdXN0IGJlIHRoZSBjbGllbnQgZm9yIGl0LgogICAgICAgICAgICAgQVNTRVJUKGN1c3RvbUZp
bHRlclByb2dyYW1Qcm94eS0+Y2xpZW50KCkgPT0gdGhpcyk7CkBAIC0zODAsNyArMjc4LDcgQEAg
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW1Q
cm94eShXZWJDdXN0b21GaWx0ZXJQcm8KICAgICAvLyBBdCB0aGlzIHRpbWUgdGhlIHNoYWRlciBp
cyBub3QgbmVlZGVkIGFueW1vcmUsIHNvIHdlIHJlbW92ZSBpdCBmcm9tIG91ciBzZXQgYW5kCiAg
ICAgLy8gc2VuZCBhIG1lc3NhZ2UgdG8gdGhlIG90aGVyIHByb2Nlc3MgdG8gZGVsZXRlIGl0Lgog
ICAgIG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMucmVtb3ZlKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94
eSk7Ci0gICAgbV9zdGF0ZS5jdXN0b21GaWx0ZXJzVG9SZW1vdmUuYXBwZW5kKGN1c3RvbUZpbHRl
clByb2dyYW1Qcm94eS0+aWQoKSk7CisgICAgbV9jb29yZGluYXRvci0+c3RhdGUoKS5jdXN0b21G
aWx0ZXJzVG9SZW1vdmUuYXBwZW5kKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+aWQoKSk7CiB9
CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaXNjb25uZWN0Q3VzdG9tRmlsdGVy
UHJvZ3JhbXMoKQpAQCAtMzkyLDUyICsyOTAsMzAgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OmRpc2Nvbm5lY3RDdXN0b21GaWx0ZXJQcm9ncmFtcygpCiB9CiAjZW5kaWYgLy8gRU5B
QkxFKENTU19TSEFERVJTKQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGV0YWNo
TGF5ZXIoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBsYXllcikKK3ZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpkaWRGbHVzaFJvb3RMYXllcigpCiB7Ci0gICAgbV9yZWdpc3RlcmVkTGF5
ZXJzLnJlbW92ZShsYXllci0+aWQoKSk7Ci0KLSAgICBzaXplX3QgaW5kZXggPSBtX3N0YXRlLmxh
eWVyc1RvQ3JlYXRlLmZpbmQobGF5ZXItPmlkKCkpOwotICAgIGlmIChpbmRleCAhPSBub3RGb3Vu
ZCkgewotICAgICAgICBtX3N0YXRlLmxheWVyc1RvQ3JlYXRlLnJlbW92ZShpbmRleCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3N0YXRlLmxheWVyc1RvUmVtb3ZlLmFwcGVuZChs
YXllci0+aWQoKSk7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgaWYgKG1fcGFnZU92
ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5mbHVzaENvbXBvc2l0aW5n
U3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpCiB7Ci0gICAgaWYgKG1faXNTdXNwZW5k
ZWQgfHwgbV93YWl0aW5nRm9yVUlQcm9jZXNzKQorICAgIGlmIChtX2lzU3VzcGVuZGVkIHx8IG1f
aXNXYWl0aW5nRm9yUmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIHN5bmNEaXNwbGF5
U3RhdGUoKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5zeW5jRGlzcGxheVN0YXRlKCk7CiAKICAgICBp
ZiAoIW1faXNWYWxpZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGZsdXNoUGVuZGluZ0xh
eWVyQ2hhbmdlcygpKQotICAgICAgICBkaWRQZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOwot
fQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0Rpc3BsYXlTdGF0ZSgpCi17
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS0+ZGlkQmVnaW5GcmFtZSgpOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUo
UkVRVUVTVF9BTklNQVRJT05fRlJBTUUpICYmICFVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVf
VElNRVIpICYmICFVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQot
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFueSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgYW5pbWF0aW9u
IGNhbGxiYWNrcyBhcmUgYmVpbmcgZXhlY3V0ZWQgYmVmb3JlIHdlIGZsdXNoIHRoZSBsYXllcnMu
Ci0gICAgbV9sYXN0QW5pbWF0aW9uU2VydmljZVRpbWUgPSBXVEY6Om1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSgpOwotICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCktPnZp
ZXcoKS0+c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyhtX2xhc3RBbmltYXRpb25TZXJ2aWNlVGlt
ZSk7Ci0jZW5kaWYKKyAgICBib29sIGRpZFN5bmMgPSBtX2Nvb3JkaW5hdG9yLT5mbHVzaFBlbmRp
bmdMYXllckNoYW5nZXMoKTsKIAotICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKLX0K
KyAgICBpZiAobV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQpIHsKKyAgICAgICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFjayhtX2ZvcmNlUmVw
YWludEFzeW5jQ2FsbGJhY2tJRCkpOworICAgICAgICBtX2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJh
Y2tJRCA9IDA7CisgICAgfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGlkUGVy
Zm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQotewotICAgIGlmIChtX25vdGlmeUFmdGVyU2NoZWR1
bGVkTGF5ZXJGbHVzaCkgeworICAgIGlmIChtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVz
aCAmJiBkaWRTeW5jKSB7CiAgICAgICAgIHN0YXRpY19jYXN0PERyYXdpbmdBcmVhSW1wbCo+KG1f
d2ViUGFnZS0+ZHJhd2luZ0FyZWEoKSktPmxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCk7CiAgICAg
ICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gZmFsc2U7CiAgICAgfQpAQCAt
NDUyLDE1ICszMjgsMTUgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZVBh
Z2VPdmVybGF5TGF5ZXIoKQogewogICAgIEFTU0VSVCghbV9wYWdlT3ZlcmxheUxheWVyKTsKIAot
ICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzLCB0aGlz
KTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUoZ3JhcGhp
Y3NMYXllckZhY3RvcnkoKSwgbV9jb29yZGluYXRvci5nZXQoKSk7CiAjaWZuZGVmIE5ERUJVRwot
ICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmFtZSgiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
IHBhZ2Ugb3ZlcmxheSBjb250ZW50Iik7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROYW1l
KCJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yIHBhZ2Ugb3ZlcmxheSBjb250ZW50Iik7CiAjZW5kaWYK
IAogICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOwotICAgIG1f
cGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7CisgICAgbV9wYWdl
T3ZlcmxheUxheWVyLT5zZXRTaXplKG1fY29vcmRpbmF0b3ItPnJvb3RMYXllcigpLT5zaXplKCkp
OwogCi0gICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fcGFnZU92ZXJsYXlMYXllci5nZXQoKSk7
CisgICAgbV9jb29yZGluYXRvci0+cm9vdExheWVyKCktPmFkZENoaWxkKG1fcGFnZU92ZXJsYXlM
YXllci5nZXQoKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXN0cm95
UGFnZU92ZXJsYXlMYXllcigpCkBAIC00NzAsNjUgKzM0Niw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpCiAgICAgbV9wYWdlT3Zlcmxh
eUxheWVyID0gbnVsbHB0cjsKIH0KIAotUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2lu
Zz4gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChJ
bWFnZSogaW1hZ2UpCi17Ci0gICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEID0g
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmdldENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQoaW1h
Z2UpOwotICAgIEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlQmFja2luZ3Mu
ZmluZChpbWFnZUlEKTsKLSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGltYWdl
QmFja2luZzsKLSAgICBpZiAoaXQgPT0gbV9pbWFnZUJhY2tpbmdzLmVuZCgpKSB7Ci0gICAgICAg
IGltYWdlQmFja2luZyA9IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjcmVhdGUodGhpcywgaW1h
Z2UpOwotICAgICAgICBtX2ltYWdlQmFja2luZ3MuYWRkKGltYWdlSUQsIGltYWdlQmFja2luZyk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGltYWdlQmFja2luZyA9IGl0LT52YWx1ZTsKLQotICAgIHJl
dHVybiBpbWFnZUJhY2tpbmc7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpj
cmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewot
ICAgIG1fc3RhdGUuaW1hZ2VzVG9DcmVhdGUuYXBwZW5kKGltYWdlSUQpOwotfQotCi12b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQgaW1hZ2VJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IGNvb3Jk
aW5hdGVkU3VyZmFjZSkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV9z
dGF0ZS5pbWFnZXNUb1VwZGF0ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoaW1hZ2VJRCwgY29vcmRp
bmF0ZWRTdXJmYWNlKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjbGVh
ckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkK
LXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV9zdGF0ZS5pbWFnZXNUb0Ns
ZWFyLmFwcGVuZChpbWFnZUlEKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCi17
Ci0gICAgaWYgKG1faXNQdXJnaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9p
bWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKLSAgICBtX2ltYWdlQmFja2luZ3MucmVt
b3ZlKGltYWdlSUQpOwotCi0gICAgbV9zdGF0ZS5pbWFnZXNUb1JlbW92ZS5hcHBlbmQoaW1hZ2VJ
RCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpmbHVzaFBlbmRpbmdJbWFn
ZUJhY2tpbmdDaGFuZ2VzKCkKLXsKLSAgICBJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGVuZCA9
IG1faW1hZ2VCYWNraW5ncy5lbmQoKTsKLSAgICBmb3IgKEltYWdlQmFja2luZ01hcDo6aXRlcmF0
b3IgaXRlciA9IG1faW1hZ2VCYWNraW5ncy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQot
ICAgICAgICBpdGVyLT52YWx1ZS0+dXBkYXRlKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0Ojpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqLCBkb3VibGUgLyogdGltZSAqLykKLXsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6Om5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciopCi17Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
IGdyYXBoaWNzTGF5ZXIsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0
LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgY2xpcFJlY3QpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXll
ckNvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXBoaWNzQ29u
dGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKIHsKICAgICBp
ZiAoZ3JhcGhpY3NMYXllciA9PSBtX3BhZ2VPdmVybGF5TGF5ZXIpIHsKICAgICAgICAgLy8gT3Zl
cmxheXMgY29udGFpbiB0cmFuc3BhcmVudCBjb250ZW50cyBhbmQgd29uJ3QgY2xlYXIgdGhlIGNv
bnRleHQgYXMgcGFydCBvZiB0aGVpciByZW5kZXJpbmcsIHNvIHdlIGRvIGl0IGhlcmUuCkBAIC01
MzgsMTUgKzM1NiwxMCBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGFpbnRDb250
ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBncmFwaAogICAgIH0KIH0KIAotUGFz
c093blB0cjxHcmFwaGljc0xheWVyPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUdy
YXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQordm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmNvbW1pdFNjZW5lU3RhdGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGxheWVy
ID0gbmV3IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihjbGllbnQpOwotICAgIGxheWVyLT5zZXRD
b29yZGluYXRvcih0aGlzKTsKLSAgICBtX3JlZ2lzdGVyZWRMYXllcnMuYWRkKGxheWVyLT5pZCgp
LCBsYXllcik7Ci0gICAgbV9zdGF0ZS5sYXllcnNUb0NyZWF0ZS5hcHBlbmQobGF5ZXItPmlkKCkp
OwotICAgIGxheWVyLT5zZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOwotICAgIHNjaGVk
dWxlTGF5ZXJGbHVzaCgpOwotICAgIHJldHVybiBhZG9wdFB0cihsYXllcik7CisgICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q29tbWl0
Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlKHN0YXRlKSk7CisgICAgbV9pc1dhaXRpbmdGb3JSZW5k
ZXJlciA9IHRydWU7CiB9CiAKIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUNvb3JkaW5hdGVkU3VyZmFjZShjb25zdCBJbnRTaXpl
JiBzaXplLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzIGZsYWdzKQpAQCAtNTU0LDczICszNjcs
MTQgQEAgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6Y3JlYXRlQ29vcmRpbmF0ZWRTdXJmYWMKICAgICByZXR1cm4gV2ViQ29vcmRpbmF0ZWRT
dXJmYWNlOjpjcmVhdGUoc2l6ZSwgZmxhZ3MpOwogfQogCi1mbG9hdCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV93ZWJQ
YWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotfQotCi1mbG9hdCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OnBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS0+
cGFnZVNjYWxlRmFjdG9yKCk7Ci19Ci0KIGJvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nKCkKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQs
IFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBjb29yZGluYXRlZFN1cmZhY2UpCi17Ci0g
ICAgbV9zdGF0ZS51cGRhdGVBdGxhc2VzVG9DcmVhdGUuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGF0
bGFzSUQsIGNvb3JkaW5hdGVkU3VyZmFjZSkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6cmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkKLXsKLSAgICBpZiAo
bV9pc1B1cmdpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3N0YXRlLnVwZGF0ZUF0bGFzZXNU
b1JlbW92ZS5hcHBlbmQoYXRsYXNJRCk7Ci19Ci0KLVdlYkNvcmU6OkZsb2F0UmVjdCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OnZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdAotewotICAgIHJl
dHVybiBtX3Zpc2libGVDb250ZW50c1JlY3Q7Ci19Ci0KLUNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ciogQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjptYWluQ29udGVudHNMYXllcigpCi17Ci0gICAg
aWYgKCFtX3Jvb3RDb21wb3NpdGluZ0xheWVyKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJl
dHVybiB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RDb21wb3NpdGluZ0xheWVyKS0+
ZmluZEZpcnN0RGVzY2VuZGFudFdpdGhDb250ZW50c1JlY3Vyc2l2ZWx5KCk7Ci19Ci0KLXZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKLXsKLSAg
ICAvLyBBIHplcm8gdHJhamVjdG9yeVZlY3RvciBpbmRpY2F0ZXMgdGhhdCB0aWxlcyBhbGwgYXJv
dW5kIHRoZSB2aWV3cG9ydCBhcmUgcmVxdWVzdGVkLgotICAgIGlmIChDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIqIGNvbnRlbnRzTGF5ZXIgPSBtYWluQ29udGVudHNMYXllcigpKQotICAgICAgICBj
b250ZW50c0xheWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKHRyYWpl
Y3RvcnlWZWN0b3IpOwotCi0gICAgYm9vbCBjb250ZW50c1JlY3REaWRDaGFuZ2UgPSByZWN0ICE9
IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKLSAgICBpZiAoY29udGVudHNSZWN0RGlkQ2hhbmdlKSB7
Ci0gICAgICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7Ci0KLSAgICAgICAgTGF5ZXJN
YXA6Oml0ZXJhdG9yIGVuZCA9IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKLSAgICAgICAgZm9y
IChMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpdC0+dmFsdWUtPnNldE5lZWRzVmlzaWJsZVJl
Y3RBZGp1c3RtZW50KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzY2hlZHVsZUxheWVyRmx1
c2goKTsKLSAgICBpZiAobV93ZWJQYWdlLT51c2VGaXhlZExheW91dCgpKSB7Ci0gICAgICAgIC8v
IFJvdW5kIHRoZSByZWN0IGluc3RlYWQgb2YgZW5jbG9zaW5nIGl0IHRvIG1ha2Ugc3VyZSB0aGF0
IGl0cyBzaXplIHN0YXlzCi0gICAgICAgIC8vIHRoZSBzYW1lIHdoaWxlIHBhbm5pbmcuIFRoaXMg
Y2FuIGhhdmUgbmFzdHkgZWZmZWN0cyBvbiBsYXlvdXQuCi0gICAgICAgIG1fd2ViUGFnZS0+c2V0
Rml4ZWRWaXNpYmxlQ29udGVudFJlY3Qocm91bmRlZEludFJlY3QocmVjdCkpOwotICAgIH0KLX0K
LQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9y
Q2hhbmdlZCgpCiB7Ci0gICAgbV9yb290TGF5ZXItPmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hh
bmdlZCgpOworICAgIG1fY29vcmRpbmF0b3ItPmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdl
ZCgpOwogICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCiAgICAgICAgIG1fcGFnZU92ZXJsYXlM
YXllci0+ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CiB9CkBAIC02MzEsOTUgKzM4
NSwyMyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGFnZUJhY2tncm91bmRUcmFu
c3BhcmVuY3lDaGFuZ2VkKCkKIAogR3JhcGhpY3NMYXllckZhY3RvcnkqIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6Z3JhcGhpY3NMYXllckZhY3RvcnkoKQogewotICAgIHJldHVybiB0aGlzOwor
ICAgIHJldHVybiBtX2Nvb3JkaW5hdG9yLmdldCgpOwogfQogCiAjaWYgRU5BQkxFKFJFUVVFU1Rf
QU5JTUFUSU9OX0ZSQU1FKQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxl
QW5pbWF0aW9uKCkKIHsKLSAgICBpZiAobV93YWl0aW5nRm9yVUlQcm9jZXNzKQorICAgIGlmICht
X2lzV2FpdGluZ0ZvclJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9sYXll
ckZsdXNoVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gQWNjb3Jk
aW5nIHRvIHRoZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgc3BlYywgckFGIGNhbGxiYWNrcyBzaG91
bGQgbm90IGJlIGZhc3RlciB0aGFuIDYwRlBTLgotICAgIHN0YXRpYyBjb25zdCBkb3VibGUgTWlu
aW1hbFRpbWVvdXRGb3JBbmltYXRpb25zID0gMS4gLyA2MC47Ci0gICAgbV9sYXllckZsdXNoVGlt
ZXIuc3RhcnRPbmVTaG90KHN0ZDo6bWF4PGRvdWJsZT4oMC4sIE1pbmltYWxUaW1lb3V0Rm9yQW5p
bWF0aW9ucyAtIFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgKyBtX2xhc3RBbmlt
YXRpb25TZXJ2aWNlVGltZSkpOworICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCht
X2Nvb3JkaW5hdG9yLT5uZXh0QW5pbWF0aW9uU2VydmljZVRpbWUoKSk7CiAgICAgc2NoZWR1bGVM
YXllckZsdXNoKCk7CiB9CiAjZW5kaWYKIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnJlbmRlck5leHRGcmFtZSgpCi17Ci0gICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0gZmFsc2U7
Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV91cGRhdGVBdGxhc2VzW2ld
LT5kaWRTd2FwQnVmZmVycygpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
cHVyZ2VCYWNraW5nU3RvcmVzKCkKLXsKLSAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gcHVyZ2lu
Z1RvZ2dsZShtX2lzUHVyZ2luZywgdHJ1ZSk7Ci0KLSAgICBMYXllck1hcDo6aXRlcmF0b3IgZW5k
ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOwotICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgaXQtPnZhbHVlLT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsKLQotICAgIG1faW1hZ2VCYWNraW5n
cy5jbGVhcigpOwotICAgIG1fdXBkYXRlQXRsYXNlcy5jbGVhcigpOwotfQotCi1ib29sIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGFpbnRUb1N1cmZhY2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwg
Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyBmbGFncywgdWludDMyX3QmIGF0bGFzSUQsIEludFBv
aW50JiBvZmZzZXQsIENvb3JkaW5hdGVkU3VyZmFjZTo6Q2xpZW50KiBjbGllbnQpCi17Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkgewot
ICAgICAgICBVcGRhdGVBdGxhcyogYXRsYXMgPSBtX3VwZGF0ZUF0bGFzZXNbaV0uZ2V0KCk7Ci0g
ICAgICAgIGlmIChhdGxhcy0+c3VwcG9ydHNBbHBoYSgpID09IChmbGFncyAmIENvb3JkaW5hdGVk
U3VyZmFjZTo6U3VwcG9ydHNBbHBoYSkpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBmYWxz
ZSBpZiB0aGVyZSBpcyBubyBhdmFpbGFibGUgYnVmZmVyIHNwYWNlLgotICAgICAgICAgICAgaWYg
KGF0bGFzLT5wYWludE9uQXZhaWxhYmxlQnVmZmVyKHNpemUsIGF0bGFzSUQsIG9mZnNldCwgY2xp
ZW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHN0YXRpYyBjb25zdCBpbnQgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiA9IDEwMjQ7IC8vIFNo
b3VsZCBiZSBhIHBvd2VyIG9mIHR3by4KLSAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKGFkb3B0
UHRyKG5ldyBVcGRhdGVBdGxhcyh0aGlzLCBTY3JhdGNoQnVmZmVyRGltZW5zaW9uLCBmbGFncykp
KTsKLSAgICBzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMoKTsKLSAgICByZXR1cm4gbV91
cGRhdGVBdGxhc2VzLmxhc3QoKS0+cGFpbnRPbkF2YWlsYWJsZUJ1ZmZlcihzaXplLCBhdGxhc0lE
LCBvZmZzZXQsIGNsaWVudCk7Ci19Ci0KLWNvbnN0IGRvdWJsZSBSZWxlYXNlSW5hY3RpdmVBdGxh
c2VzVGltZXJJbnRlcnZhbCA9IDAuNTsKLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpCi17Ci0gICAgaWYgKCFtX3JlbGVhc2VJ
bmFjdGl2ZUF0bGFzZXNUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3JlbGVhc2VJbmFjdGl2
ZUF0bGFzZXNUaW1lci5zdGFydFJlcGVhdGluZyhSZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJJ
bnRlcnZhbCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZWxlYXNlSW5h
Y3RpdmVBdGxhc2VzVGltZXJGaXJlZChUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+KikK
LXsKLSAgICAvLyBXZSBhbHdheXMgd2FudCB0byBrZWVwIG9uZSBhdGxhcyBmb3Igbm9uLWNvbXBv
c2l0ZWQgY29udGVudC4KLSAgICBPd25QdHI8VXBkYXRlQXRsYXM+IGF0bGFzVG9LZWVwQW55d2F5
OwotICAgIGJvb2wgZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ID0gZmFs
c2U7Ci0gICAgZm9yIChpbnQgaSA9IG1fdXBkYXRlQXRsYXNlcy5zaXplKCkgLSAxOyAgaSA+PSAw
OyAtLWkpIHsKLSAgICAgICAgVXBkYXRlQXRsYXMqIGF0bGFzID0gbV91cGRhdGVBdGxhc2VzW2ld
LmdldCgpOwotICAgICAgICBpZiAoIWF0bGFzLT5pc0luVXNlKCkpCi0gICAgICAgICAgICBhdGxh
cy0+YWRkVGltZUluYWN0aXZlKFJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckludGVydmFsKTsK
LSAgICAgICAgYm9vbCB1c2FibGVGb3JOb25Db21wb3NpdGVkQ29udGVudCA9ICFhdGxhcy0+c3Vw
cG9ydHNBbHBoYSgpOwotICAgICAgICBpZiAoYXRsYXMtPmlzSW5hY3RpdmUoKSkgewotICAgICAg
ICAgICAgaWYgKCFmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgJiYgIWF0
bGFzVG9LZWVwQW55d2F5ICYmIHVzYWJsZUZvck5vbkNvbXBvc2l0ZWRDb250ZW50KQotICAgICAg
ICAgICAgICAgIGF0bGFzVG9LZWVwQW55d2F5ID0gbV91cGRhdGVBdGxhc2VzW2ldLnJlbGVhc2Uo
KTsKLSAgICAgICAgICAgIG1fdXBkYXRlQXRsYXNlcy5yZW1vdmUoaSk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAodXNhYmxlRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQpCi0gICAgICAgICAgICBmb3VuZEFj
dGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgPSB0cnVlOwotICAgIH0KLQotICAgIGlm
ICghZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ICYmIGF0bGFzVG9LZWVw
QW55d2F5KQotICAgICAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKGF0bGFzVG9LZWVwQW55d2F5
LnJlbGVhc2UoKSk7Ci0KLSAgICBpZiAobV91cGRhdGVBdGxhc2VzLnNpemUoKSA8PSAxKQotICAg
ICAgICBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5zdG9wKCk7Ci19Ci0KIHZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6
Q29sb3ImIGNvbG9yKQogewogICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldEJhY2tncm91bmRDb2xvcihjb2xvcikpOwpAQCAtNzI3
LDExICs0MDksNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0QmFja2dyb3Vu
ZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikKIAogdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmNvbW1pdFNjcm9sbE9mZnNldCh1aW50MzJfdCBsYXllcklELCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBvZmZzZXQpCiB7Ci0gICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGkgPSBt
X3JlZ2lzdGVyZWRMYXllcnMuZmluZChsYXllcklEKTsKLSAgICBpZiAoaSA9PSBtX3JlZ2lzdGVy
ZWRMYXllcnMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGktPnZhbHVlLT5jb21taXRT
Y3JvbGxPZmZzZXQob2Zmc2V0KTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5jb21taXRTY3JvbGxPZmZz
ZXQobGF5ZXJJRCwgb2Zmc2V0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCmlu
ZGV4IDE0MTRmNDNlOGZiNjc1MmFhNzllOTBkZDM0MmZmYjEyY2M3ZjNmZTIuLmU4ZTU2NDhlNjNh
MzEzYzYwZmIwNGFjZDQ0NjA1ODNlYzk1M2U0M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCkBAIC0yNSwxMyArMjUsOCBA
QAogCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUhv
c3QuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNzU3Rh
dGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9D
b21wb3NpdGluZ0Nvb3JkaW5hdG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVy
RmFjdG9yeS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVXBkYXRlQXRsYXMuaD4KICNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCkBAIC00NiwxMSArNDEsNyBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViUGFnZTsKIAotY2xhc3MgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0IDogcHVibGljIExheWVyVHJlZUhvc3QsIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDbGllbnQKLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJDbGllbnQKLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6
Q2xpZW50Ci0gICAgLCBwdWJsaWMgV2ViQ29yZTo6VXBkYXRlQXRsYXM6OkNsaWVudAotICAgICwg
cHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5CitjbGFzcyBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3QgOiBwdWJsaWMgTGF5ZXJUcmVlSG9zdCwgcHVibGljIFdlYkNvcmU6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICAs
IFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudAogI2VuZGlmCkBAIC04NCw5ICs3NSw2
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFu
Z2VkKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHBhZ2VCYWNrZ3JvdW5kVHJhbnNwYXJl
bmN5Q2hhbmdlZCgpIE9WRVJSSURFOwogCi0gICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFt
ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVD
b29yZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3Jl
SVBDOjpNZXNzYWdlRGVjb2RlciYpOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckZhY3RvcnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgT1ZFUlJJREU7CiAgICAgV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBtYWluQ29udGVudHNMYXllcigpOwpAQCAtOTgsNjAg
Kzg2LDMxIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3Jk
aW5hdGVkU3VyZmFjZT4gY3JlYXRlQ29vcmRpbmF0ZWRTdXJmYWNlKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmLCBXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzKTsKIAotICAgIHZvaWQg
Y29tbWl0U2Nyb2xsT2Zmc2V0KHVpbnQzMl90IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIG9mZnNldCk7Ci0KIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3QoV2ViUGFnZSopOwogCiBwcml2YXRlOgotICAgIC8vIEdyYXBoaWNzTGF5ZXJDbGll
bnQKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpOwotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlG
bHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2Us
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKLSAgICB2aXJ0dWFsIGZsb2F0IGRl
dmljZVNjYWxlRmFjdG9yKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBmbG9hdCBwYWdl
U2NhbGVGYWN0b3IoKSBjb25zdCBPVkVSUklERTsKLQotICAgIC8vIENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nOjpDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKFdlYkNv
cmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwg
UGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U+KSBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhXZWJDb3JlOjpDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW1hZ2VC
YWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOwotCi0g
ICAgdm9pZCBmbHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7Ci0KLSAgICAvLyBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKLSAgICB2aXJ0dWFsIGJvb2wgaXNGbHVzaGluZ0xh
eWVyQ2hhbmdlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faXNGbHVzaGluZ0xheWVyQ2hh
bmdlczsgfQotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVDb250ZW50c1Jl
Y3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKFdlYkNvcmU6OkltYWdlKikg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllciopOwotICAgIHZpcnR1YWwgYm9vbCBwYWludFRvU3VyZmFjZShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywg
dWludDMyX3QmIC8qIGF0bGFzSUQgKi8sIFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q29v
cmRpbmF0ZWRTdXJmYWNlOjpDbGllbnQqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc3lu
Y0xheWVyU3RhdGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOwotCi0gICAgLy8gVXBkYXRlQXRsYXM6OkNsaWVudAot
ICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNz
UmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZT4pIE9WRVJSSURFOwotICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKSBPVkVSUklERTsKLQot
ICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNsaWVudCopIE9WRVJSSURFOwotCiAgICAgLy8gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
Ci0gICAgdm9pZCBpbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCgpOwogICAg
IHZvaWQgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOwogICAgIHZvaWQgZGVzdHJveVBhZ2VPdmVy
bGF5TGF5ZXIoKTsKLSAgICBib29sIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOwotICAgIHZv
aWQgY2xlYXJQZW5kaW5nU3RhdGVDaGFuZ2VzKCk7CiAgICAgdm9pZCBjYW5jZWxQZW5kaW5nTGF5
ZXJGbHVzaCgpOwogICAgIHZvaWQgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKLSAgICB2
b2lkIGRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7Ci0gICAgdm9pZCBzeW5jRGlzcGxh
eVN0YXRlKCk7Ci0gICAgdm9pZCBsYXllckZsdXNoVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q+Kik7CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNS
ZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQm
KTsKKyAgICB2b2lkIHJlbmRlck5leHRGcmFtZSgpOworICAgIHZvaWQgcHVyZ2VCYWNraW5nU3Rv
cmVzKCk7CisgICAgdm9pZCBjb21taXRTY3JvbGxPZmZzZXQodWludDMyX3QgbGF5ZXJJRCwgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgb2Zmc2V0KTsKIAotICAgIHZvaWQgc2NoZWR1bGVSZWxlYXNl
SW5hY3RpdmVBdGxhc2VzKCk7CisgICAgdm9pZCBsYXllckZsdXNoVGltZXJGaXJlZChXZWJDb3Jl
OjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+Kik7CiAKLSAgICB2b2lkIHJlbGVhc2VJ
bmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdD4qKTsKKyAgICAvLyBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpDbGllbnQKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkRmx1c2hSb290TGF5ZXIoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgd2lsbFN5bmNMYXllclN0YXRlKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0
YXRlJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoKSBP
VkVSUklERSB7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9OworICAgIHZpcnR1YWwgdm9pZCBjb21t
aXRTY2VuZVN0YXRlKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBwYWludExheWVyQ29udGVudHMoY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIGNsaXBSZWN0KSBPVkVSUklERTsKIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAg
ICB2b2lkIHByZXBhcmVDdXN0b21GaWx0ZXJQcm94aWVzSWZOZWVkZWQoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyAgICB2b2lkIHByZXBhcmVDdXN0b21GaWx0ZXJQ
cm94aWVzRm9yQW5pbWF0aW9ucyhXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOwog
CiAgICAgLy8gV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5Q2xpZW50CiAgICAgdm9pZCByZW1v
dmVDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkoV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5Kik7
CkBAIC0xNjAsNDcgKzExOSwyNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlzY29ubmVjdEN1c3Rv
bUZpbHRlclByb2dyYW1zKCk7CiAjZW5kaWYKIAotICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGlj
c0xheWVyPiBtX3Jvb3RMYXllcjsKLSAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBtX3Jvb3RD
b21wb3NpdGluZ0xheWVyOworICAgIE93blB0cjxXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yPiBtX2Nvb3JkaW5hdG9yOwogCiAgICAgLy8gVGhlIHBhZ2Ugb3ZlcmxheSBsYXllci4gV2ls
bCBiZSBudWxsIGlmIHRoZXJlJ3Mgbm8gcGFnZSBvdmVybGF5LgogICAgIE93blB0cjxXZWJDb3Jl
OjpHcmFwaGljc0xheWVyPiBtX3BhZ2VPdmVybGF5TGF5ZXI7CiAgICAgUmVmUHRyPFBhZ2VPdmVy
bGF5PiBtX3BhZ2VPdmVybGF5OwogCi0gICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0
YXRlIG1fc3RhdGU7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8V2ViQ29yZTo6Q29vcmRpbmF0ZWRM
YXllcklELCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiBMYXllck1hcDsKLSAg
ICBMYXllck1hcCBtX3JlZ2lzdGVyZWRMYXllcnM7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNv
cmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRl
ZEltYWdlQmFja2luZz4gPiBJbWFnZUJhY2tpbmdNYXA7Ci0gICAgSW1hZ2VCYWNraW5nTWFwIG1f
aW1hZ2VCYWNraW5nczsKLSAgICBWZWN0b3I8T3duUHRyPFdlYkNvcmU6OlVwZGF0ZUF0bGFzPiA+
IG1fdXBkYXRlQXRsYXNlczsKLQogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICBIYXNoU2V0
PFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSo+IG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXM7CiAj
ZW5kaWYKIAogICAgIGJvb2wgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7CiAgICAg
Ym9vbCBtX2lzVmFsaWQ7Ci0gICAgLy8gV2UgZG9uJ3Qgc2VuZCB0aGUgbWVzc2FnZXMgcmVsYXRl
ZCB0byByZWxlYXNpbmcgcmVzb3VyY2VzIHRvIFVJIFByb2Nlc3MgZHVyaW5nIHB1cmdpbmcsIGJl
Y2F1c2UgVUkgUHJvY2VzcyBhbHJlYWR5IGhhZCByZW1vdmVkIGFsbCByZXNvdXJjZXMuCi0gICAg
Ym9vbCBtX2lzUHVyZ2luZzsKLSAgICBib29sIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlczsKLQot
ICAgIGJvb2wgbV93YWl0aW5nRm9yVUlQcm9jZXNzOwogICAgIGJvb2wgbV9pc1N1c3BlbmRlZDsK
LSAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbV92aXNpYmxlQ29udGVudHNSZWN0OworICAgIGJvb2wg
bV9pc1dhaXRpbmdGb3JSZW5kZXJlcjsKIAogICAgIExheWVyVHJlZUNvbnRleHQgbV9sYXllclRy
ZWVDb250ZXh0OwotICAgIGJvb2wgbV9zaG91bGRTeW5jRnJhbWU7Ci0gICAgYm9vbCBtX2RpZElu
aXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcjsKKwogICAgIFdlYkNvcmU6OlRpbWVyPENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdD4gbV9sYXllckZsdXNoVGltZXI7Ci0gICAgV2ViQ29yZTo6VGlt
ZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1l
cjsKICAgICBib29sIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkOwogICAgIHVpbnQ2NF90
IG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEOwotICAgIGJvb2wgbV9hbmltYXRpb25zTG9j
a2VkOwotCi0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQotICAgIGRvdWJsZSBt
X2xhc3RBbmltYXRpb25TZXJ2aWNlVGltZTsKLSNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5
ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJl
ZUhvc3QuaAppbmRleCA5MGJiYjk0MWQxYWIwNTY4MWY5NmEyMTQwMmNmOTM0ODFiMzI3NzdkLi4y
ZmFkMmQxM2NmMjVkODM2ZWNmYWJhM2FiZmU2YWY4OTgwMjQwYTI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgKQEAgLTg3LDkgKzg3
LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3Qg
V2ViQ29yZTo6Q29sb3ImKSB7IH0KIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmLCBmbG9hdCAvKiBzY2FsZSAqLywgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJhbWUoKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgcHVyZ2VCYWNraW5nU3RvcmVzKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVD
b29yZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3Jl
SVBDOjpNZXNzYWdlRGVjb2RlciYpID0gMDsKICNlbmRpZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>205715</attachid>
            <date>2013-06-28 08:08:43 -0700</date>
            <delta_ts>2013-06-28 12:10:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104360-20130629000637.patch</filename>
            <type>text/plain</type>
            <size>66194</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUyMDc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjc0OGJmMWM0MDY2NDM2
YzhmZjU2YjY4MjE3NTI4MWY4NmYzYjQxMi4uMGRkNzUwNmZiMjA0ODY0Y2FjZDc2ZDQ5ZDRlMGM5
OWNiYjQyODZmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDEzLTA2LTI2ICBHd2Fu
ZyBZb29uIEh3YW5nICA8cnl1bWllbEBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGlu
YXRlZCBHcmFwaGljczogU2VwYXJhdGUgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGludG8gQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0IGFuZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQzNjAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0IGhhcyB0b28gbWFueSByZXNwb25zaWJpbGl0aWVzLiBJdAorICAgICAgICBp
bXBsZW1lbnRzIExheWVyVHJlZUhvc3QsIEdyYXBoaWNzTGF5ZXJDbGllbnQsCisgICAgICAgIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNs
aWVudCwKKyAgICAgICAgVXBkYXRlQXRsYXM6OkNsaWVudCwgR3JhcGhpY3NMYXllckZhY3Rvcnkg
YW5kCisgICAgICAgIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudC4KKworICAgICAg
ICBUaGlzIHJlZmFjdG9yaW5nIHJlZHVjZXMgdGhlIHJlc3BvbnNpYmlsaXRpZXMgb2YgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5l
dyBjbGFzcyBjYWxsZWQgQ29tcG9zaXRpbmdDb29yZGluYXRvciwgd2hpY2gKKyAgICAgICAgdGFr
ZXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIG1hbmFnaW5nIGNvbXBvc2l0aW5nIHJlc291cmNlcyBp
bgorICAgICAgICBXZWJQcm9jZXNzLgorCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dCBpcyByZXNwb25zaWJsZSBvbmx5IGZvciB0aGUgc2NoZWR1bGluZyBhbmQKKyAgICAgICAgSVBD
LXNwZWNpZmljIHN0dWZmLCB3aGljaCBhcmUgcmVsZXZhbnQgb25seSBmb3IgV2ViS2l0Mi4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9y
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6fkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGlu
YXRvcjo6Q29tcG9zaXRpbmdDb29yZGluYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3Np
dGluZ0Nvb3JkaW5hdG9yOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzaXplRGlkQ2hhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzeW5jRGlzcGxheVN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6Om5leHRBbmlt
YXRpb25TZXJ2aWNlVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpjbGVhclBlbmRpbmdTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRpbmdDb29yZGluYXRvcjo6aW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlUm9vdExh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnN5bmNMYXll
clN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0
ZUltYWdlQmFja2luZ0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OmNyZWF0ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3Np
dGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZW1vdmVJbWFnZUJhY2tpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5n
SW1hZ2VCYWNraW5nQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yOjpub3RpZnlBbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6Om5vdGlmeUZsdXNoUmVxdWlyZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVHcmFwaGljc0xheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRldmljZVNjYWxlRmFjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnBhZ2VTY2FsZUZhY3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVVcGRh
dGVBdGxhcyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZW1v
dmVVcGRhdGVBdGxhcyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
Ojp2aXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6Om1haW5Db250ZW50c0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
aW5nQ29vcmRpbmF0b3I6OnNldFZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRldGFjaExheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNvbW1pdFNjcm9s
bE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZW5k
ZXJOZXh0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6
cHVyZ2VCYWNraW5nU3RvcmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OnBhaW50VG9TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OnNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcyk6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJG
aXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
bXBvc2l0aW5nQ29vcmRpbmF0b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb21wb3Np
dGluZ0Nvb3JkaW5hdG9yOjpjbGVhclJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yOjpyb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRpbmdDb29yZGluYXRvcjo6c3RhdGUpOgorCiAyMDEzLTA2LTI4ICBHeXV5b3VuZyBLaW0gIDxn
eXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgQWRkIG5ldyBzY2hlbWVzIHRvIGNv
bnRlbnQgdXRpbHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNWI2YTY3OTQwNzRjMzZhNmNiMzk0NjNiNWNjYjA1
N2Q3MTk0YmVhZS4uMTZkYjQ4NzQyYmEwM2JmNDBkOWIzNzA0MzZmNjNiOGIwYWZhZjkxYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEzLTA2LTI2ICBHd2FuZyBZb29uIEh3YW5nICA8
cnl1bWllbEBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGluYXRlZCBHcmFwaGljczog
U2VwYXJhdGUgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGludG8gQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0IGFuZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQzNjAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGhh
cyB0b28gbWFueSByZXNwb25zaWJpbGl0aWVzLiBJdAorICAgICAgICBpbXBsZW1lbnRzIExheWVy
VHJlZUhvc3QsIEdyYXBoaWNzTGF5ZXJDbGllbnQsCisgICAgICAgIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllckNsaWVudCwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNsaWVudCwKKyAgICAgICAg
VXBkYXRlQXRsYXM6OkNsaWVudCwgR3JhcGhpY3NMYXllckZhY3RvcnkgYW5kCisgICAgICAgIFdl
YkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudC4KKworICAgICAgICBUaGlzIHJlZmFjdG9y
aW5nIHJlZHVjZXMgdGhlIHJlc3BvbnNpYmlsaXRpZXMgb2YgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjbGFzcyBjYWxsZWQg
Q29tcG9zaXRpbmdDb29yZGluYXRvciwgd2hpY2gKKyAgICAgICAgdGFrZXMgdGhlIHJlc3BvbnNp
YmlsaXR5IG9mIG1hbmFnaW5nIGNvbXBvc2l0aW5nIHJlc291cmNlcyBpbgorICAgICAgICBXZWJQ
cm9jZXNzLgorCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBpcyByZXNwb25zaWJs
ZSBvbmx5IGZvciB0aGUgc2NoZWR1bGluZyBhbmQKKyAgICAgICAgSVBDLXNwZWNpZmljIHN0dWZm
LCB3aGljaCBhcmUgcmVsZXZhbnQgb25seSBmb3IgV2ViS2l0Mi4KKworICAgICAgICBObyBuZXcg
dGVzdHMsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6On5Db29yZGluYXRl
ZExheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAoV2Vi
S2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmludmFsaWRhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZvcmNlUmVwYWludCk6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENoYW5nZSk6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVj
dCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVuZGVyTmV4
dEZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwdXJn
ZUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OndpbGxTeW5jTGF5ZXJTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6cHJlcGFyZUN1c3RvbUZpbHRlclByb3hpZXNGb3JBbmltYXRpb25zKToKKyAg
ICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjaGVja0N1c3RvbUZpbHRl
clByb2dyYW1Qcm94aWVzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZEZsdXNoUm9vdExheWVyKToKKyAgICAgICAgKFdl
YktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVz
aCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlUGFn
ZU92ZXJsYXlMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0Ojpjb21taXRTY2VuZVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQpOgorICAgICAg
ICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5
KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZUFu
aW1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y29t
bWl0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oOgorCiAyMDEzLTA2LTI4ICBBbmRyZXMgR29tZXog
IDxhZ29tZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBNaW5pQnJvd3NlciBkb2Vzbid0
IHNvbHZlIHRoZSBzYXZpbmcgbG9jYXRpb24gd2hlbiB0aGVyZSBhcmUgbm8gWERHIHNldHRpbmdz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDg0YzE5MDA0NTI1Y2ExMDMwMjk2YWU5ZmI3MGY0OTkx
N2E5YmE2MTIuLmViOGFhMDA4ZTczY2IyZTQ5MzkyYWEwODFmZTM0YzU5NTA0ZDhlZmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CkBAIC0xOTgwLDYgKzE5ODAsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCiAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29y
ZGluYXRvci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1Rhcmdl
dC5wcmkKaW5kZXggYWIyMmYwNzBmYWRkNzJhMmIwZGRhYjM5ZjFjNDdkMzNkZWNmNDU3NS4uZjQx
N2RkZTUyY2ZhN2JhOTgyZjRhMTA0NTY0ZGI0YTNmMjg2ODdhMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC00
MDg5LDYgKzQwODksNyBAQCB1c2U/KDNEX0dSQVBISUNTKSB7CiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5oIFwKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuaCBcCisgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5h
dG9yLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmUuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5oIFwKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQ3VzdG9t
RmlsdGVyUHJvZ3JhbS5oIFwKQEAgLTQxMjQsNiArNDEyNSw3IEBAIHVzZT8oM0RfR1JBUEhJQ1Mp
IHsKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAg
XAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0FyZWFBbGxvY2F0b3IuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwIFwKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcCBc
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAgXApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0NvbXBvc2l0
aW5nQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNi
Zjk3ZWUwYjYzNDhiZTk0ZDkxOGRhN2E3NTcxODY0MDI4ZjA3OWUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29t
cG9zaXRpbmdDb29yZGluYXRvci5jcHAKQEAgLTAsMCArMSw0MzQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
LgorICogQ29weXJpZ2h0IChDKSAyMDEzIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yLmgiCisKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRl
ICJQYWdlLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KKyNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworUGFzc093blB0cjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiBDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOjpjcmVhdGUoUGFnZSogcGFnZSwgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q2xp
ZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yKHBhZ2UsIGNsaWVudCkpOworfQorCitDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp+Q29t
cG9zaXRpbmdDb29yZGluYXRvcigpCit7CisgICAgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisKKyAg
ICBMYXllck1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOworICAg
IGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnZhbHVlLT5zZXRDb29yZGluYXRvcigwKTsK
K30KKworQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q29tcG9zaXRpbmdDb29yZGluYXRvcihQYWdl
KiBwYWdlLCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpDbGllbnQqIGNsaWVudCkKKyAgICA6IG1f
cGFnZShwYWdlKQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9yb290Q29tcG9zaXRp
bmdMYXllcigwKQorICAgICwgbV9pc1B1cmdpbmcoZmFsc2UpCisgICAgLCBtX2lzRmx1c2hpbmdM
YXllckNoYW5nZXMoZmFsc2UpCisgICAgLCBtX3Nob3VsZFN5bmNGcmFtZShmYWxzZSkKKyAgICAs
IG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyKGZhbHNlKQorICAgICwgbV9yZWxl
YXNlSW5hY3RpdmVBdGxhc2VzVGltZXIodGhpcywgJkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJl
bGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKQorI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1B
VElPTl9GUkFNRSkKKyAgICAsIG1fbGFzdEFuaW1hdGlvblNlcnZpY2VUaW1lKDApCisjZW5kaWYK
K3sKKyAgICBtX3BhZ2UtPnNldHRpbmdzKCktPnNldEFwcGx5RGV2aWNlU2NhbGVGYWN0b3JJbkNv
bXBvc2l0b3IodHJ1ZSk7CisKKyAgICAvLyBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdheSB0byBlbmFi
bGUgdGhpcyBvbmx5IGluIHRoZSBHTCBjYXNlLCB1bnRpbCBUZXh0dXJlTWFwcGVySW1hZ2VCdWZm
ZXIgaXMgcmVtb3ZlZC4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExNDg2OQorICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0U2hvdWxk
U3VwcG9ydENvbnRlbnRzVGlsaW5nKHRydWUpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQorewor
ICAgIGlmIChtX3Jvb3RDb21wb3NpdGluZ0xheWVyKQorICAgICAgICBtX3Jvb3RDb21wb3NpdGlu
Z0xheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisKKyAgICBtX3Jvb3RDb21wb3NpdGluZ0xheWVy
ID0gbGF5ZXI7CisgICAgaWYgKG1fcm9vdENvbXBvc2l0aW5nTGF5ZXIpCisgICAgICAgIG1fcm9v
dExheWVyLT5hZGRDaGlsZEF0SW5kZXgobV9yb290Q29tcG9zaXRpbmdMYXllciwgMCk7Cit9CisK
K3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2l6ZURpZENoYW5nZShjb25zdCBJbnRTaXpl
JiBuZXdTaXplKQoreworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG5ld1NpemUpOworICAgIG1f
Y2xpZW50LT5ub3RpZnlGbHVzaFJlcXVpcmVkKCk7Cit9CisKK2Jvb2wgQ29tcG9zaXRpbmdDb29y
ZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKK3sKKyAgICBUZW1wb3JhcnlDaGFu
Z2U8Ym9vbD4gcHJvdGVjdG9yKG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlcywgdHJ1ZSk7CisKKyAg
ICBpbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCgpOworCisgICAgbV9yb290
TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBtX2Ns
aWVudC0+ZGlkRmx1c2hSb290TGF5ZXIoKTsKKworICAgIGJvb2wgZGlkU3luYyA9IG1fcGFnZS0+
bWFpbkZyYW1lKCktPnZpZXcoKS0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJh
bWVzKCk7CisKKyAgICB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQo
KSktPnVwZGF0ZUNvbnRlbnRCdWZmZXJzSW5jbHVkaW5nU3ViTGF5ZXJzKCk7CisgICAgdG9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5zeW5jUGVuZGluZ1N0YXRl
Q2hhbmdlc0luY2x1ZGluZ1N1YkxheWVycygpOworCisgICAgZmx1c2hQZW5kaW5nSW1hZ2VCYWNr
aW5nQ2hhbmdlcygpOworCisgICAgaWYgKG1fc2hvdWxkU3luY0ZyYW1lKSB7CisgICAgICAgIGRp
ZFN5bmMgPSB0cnVlOworCisgICAgICAgIGlmIChtX3Jvb3RDb21wb3NpdGluZ0xheWVyKSB7Cisg
ICAgICAgICAgICBtX3N0YXRlLmNvbnRlbnRzU2l6ZSA9IHJvdW5kZWRJbnRTaXplKG1fcm9vdENv
bXBvc2l0aW5nTGF5ZXItPnNpemUoKSk7CisgICAgICAgICAgICBpZiAoQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyKiBjb250ZW50c0xheWVyID0gbWFpbkNvbnRlbnRzTGF5ZXIoKSkKKyAgICAgICAg
ICAgICAgICBtX3N0YXRlLmNvdmVyZWRSZWN0ID0gY29udGVudHNMYXllci0+Y292ZXJSZWN0KCk7
CisgICAgICAgIH0KKyAgICAgICAgbV9zdGF0ZS5zY3JvbGxQb3NpdGlvbiA9IG1fdmlzaWJsZUNv
bnRlbnRzUmVjdC5sb2NhdGlvbigpOworCisgICAgICAgIG1fY2xpZW50LT5jb21taXRTY2VuZVN0
YXRlKG1fc3RhdGUpOworCisgICAgICAgIGNsZWFyUGVuZGluZ1N0YXRlQ2hhbmdlcygpOworICAg
ICAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBkaWRT
eW5jOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnN5bmNEaXNwbGF5U3RhdGUo
KQoreworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgbV9wYWdlLT5pbnNwZWN0b3JDb250cm9s
bGVyKCktPmRpZEJlZ2luRnJhbWUoKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FKSAmJiAhVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKSAmJiAh
VVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKKyAgICAvLyBNYWtl
IHN1cmUgdGhhdCBhbnkgcHJldmlvdXNseSByZWdpc3RlcmVkIGFuaW1hdGlvbiBjYWxsYmFja3Mg
YXJlIGJlaW5nIGV4ZWN1dGVkIGJlZm9yZSB3ZSBmbHVzaCB0aGUgbGF5ZXJzLgorICAgIG1fbGFz
dEFuaW1hdGlvblNlcnZpY2VUaW1lID0gV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUo
KTsKKyAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPnNlcnZpY2VTY3JpcHRlZEFuaW1h
dGlvbnMobV9sYXN0QW5pbWF0aW9uU2VydmljZVRpbWUpOworI2VuZGlmCisgICAgbV9wYWdlLT5t
YWluRnJhbWUoKS0+dmlldygpLT51cGRhdGVMYXlvdXRBbmRTdHlsZUlmTmVlZGVkUmVjdXJzaXZl
KCk7Cit9CisKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCitkb3VibGUgQ29t
cG9zaXRpbmdDb29yZGluYXRvcjo6bmV4dEFuaW1hdGlvblNlcnZpY2VUaW1lKCkgY29uc3QKK3sK
KyAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIHJlcXVlc3RBbmltYXRpb25GcmFtZSBzcGVjLCByQUYg
Y2FsbGJhY2tzIHNob3VsZCBub3QgYmUgZmFzdGVyIHRoYW4gNjBGUFMuCisgICAgc3RhdGljIGNv
bnN0IGRvdWJsZSBNaW5pbWFsVGltZW91dEZvckFuaW1hdGlvbnMgPSAxLiAvIDYwLjsKKyAgICBy
ZXR1cm4gc3RkOjptYXg8ZG91YmxlPigwLiwgTWluaW1hbFRpbWVvdXRGb3JBbmltYXRpb25zIC0g
V1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSArIG1fbGFzdEFuaW1hdGlvblNlcnZp
Y2VUaW1lKTsKK30KKyNlbmRpZgorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNsZWFy
UGVuZGluZ1N0YXRlQ2hhbmdlcygpCit7CisgICAgbV9zdGF0ZS5sYXllcnNUb0NyZWF0ZS5jbGVh
cigpOworICAgIG1fc3RhdGUubGF5ZXJzVG9VcGRhdGUuY2xlYXIoKTsKKyAgICBtX3N0YXRlLmxh
eWVyc1RvUmVtb3ZlLmNsZWFyKCk7CisKKyAgICBtX3N0YXRlLmltYWdlc1RvQ3JlYXRlLmNsZWFy
KCk7CisgICAgbV9zdGF0ZS5pbWFnZXNUb1JlbW92ZS5jbGVhcigpOworICAgIG1fc3RhdGUuaW1h
Z2VzVG9VcGRhdGUuY2xlYXIoKTsKKyAgICBtX3N0YXRlLmltYWdlc1RvQ2xlYXIuY2xlYXIoKTsK
KworICAgIG1fc3RhdGUudXBkYXRlQXRsYXNlc1RvQ3JlYXRlLmNsZWFyKCk7CisgICAgbV9zdGF0
ZS51cGRhdGVBdGxhc2VzVG9SZW1vdmUuY2xlYXIoKTsKKworI2lmIEVOQUJMRShDU1NfU0hBREVS
UykKKyAgICBtX3N0YXRlLmN1c3RvbUZpbHRlcnNUb0NyZWF0ZS5jbGVhcigpOworICAgIG1fc3Rh
dGUuY3VzdG9tRmlsdGVyc1RvUmVtb3ZlLmNsZWFyKCk7CisjZW5kaWYKK30KKwordm9pZCBDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yOjppbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRl
ZCgpCit7CisgICAgaWYgKG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3N0YXRlLnJvb3RDb21wb3NpdGluZ0xheWVyID0gdG9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5pZCgpOworICAgIG1fZGlk
SW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyID0gdHJ1ZTsKKyAgICBtX3Nob3VsZFN5bmNG
cmFtZSA9IHRydWU7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlUm9v
dExheWVyKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgQVNTRVJUKCFtX3Jvb3RMYXllcik7
CisgICAgLy8gQ3JlYXRlIGEgcm9vdCBsYXllci4KKyAgICBtX3Jvb3RMYXllciA9IEdyYXBoaWNz
TGF5ZXI6OmNyZWF0ZSh0aGlzLCB0aGlzKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9yb290TGF5
ZXItPnNldE5hbWUoIkNvbXBvc2l0aW5nQ29vcmRpbmF0b3Igcm9vdCBsYXllciIpOworI2VuZGlm
CisgICAgbV9yb290TGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7CisgICAgbV9yb290TGF5
ZXItPnNldFNpemUoc2l6ZSk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c3lu
Y0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJTdGF0ZSYgc3RhdGUpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1f
Y2xpZW50LT53aWxsU3luY0xheWVyU3RhdGUoc3RhdGUpOworICAgIG1fc3RhdGUubGF5ZXJzVG9V
cGRhdGUuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGlkLCBzdGF0ZSkpOworfQorCitQYXNzUmVmUHRy
PENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVJ
bWFnZUJhY2tpbmdJZk5lZWRlZChJbWFnZSogaW1hZ2UpCit7CisgICAgQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCBpbWFnZUlEID0gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmdldENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQoaW1hZ2UpOworICAgIEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3Ig
aXQgPSBtX2ltYWdlQmFja2luZ3MuZmluZChpbWFnZUlEKTsKKyAgICBSZWZQdHI8Q29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmc+IGltYWdlQmFja2luZzsKKyAgICBpZiAoaXQgPT0gbV9pbWFnZUJhY2tp
bmdzLmVuZCgpKSB7CisgICAgICAgIGltYWdlQmFja2luZyA9IENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nOjpjcmVhdGUodGhpcywgaW1hZ2UpOworICAgICAgICBtX2ltYWdlQmFja2luZ3MuYWRkKGlt
YWdlSUQsIGltYWdlQmFja2luZyk7CisgICAgfSBlbHNlCisgICAgICAgIGltYWdlQmFja2luZyA9
IGl0LT52YWx1ZTsKKworICAgIHJldHVybiBpbWFnZUJhY2tpbmc7Cit9CisKK3ZvaWQgQ29tcG9z
aXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBtX3N0YXRlLmltYWdlc1RvQ3JlYXRlLmFwcGVuZChpbWFn
ZUlEKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVJbWFnZUJhY2tp
bmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlELCBQYXNzUmVmUHRyPENvb3JkaW5h
dGVkU3VyZmFjZT4gY29vcmRpbmF0ZWRTdXJmYWNlKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1l
ID0gdHJ1ZTsKKyAgICBtX3N0YXRlLmltYWdlc1RvVXBkYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFp
cihpbWFnZUlELCBjb29yZGluYXRlZFN1cmZhY2UpKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV9z
dGF0ZS5pbWFnZXNUb0NsZWFyLmFwcGVuZChpbWFnZUlEKTsKK30KKwordm9pZCBDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCBpbWFnZUlEKQoreworICAgIGlmIChtX2lzUHVyZ2luZykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFnZUlEKSk7CisgICAgbV9pbWFn
ZUJhY2tpbmdzLnJlbW92ZShpbWFnZUlEKTsKKworICAgIG1fc3RhdGUuaW1hZ2VzVG9SZW1vdmUu
YXBwZW5kKGltYWdlSUQpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmZsdXNo
UGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKQoreworICAgIEltYWdlQmFja2luZ01hcDo6aXRl
cmF0b3IgZW5kID0gbV9pbWFnZUJhY2tpbmdzLmVuZCgpOworICAgIGZvciAoSW1hZ2VCYWNraW5n
TWFwOjppdGVyYXRvciBpdGVyID0gbV9pbWFnZUJhY2tpbmdzLmJlZ2luKCk7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpCisgICAgICAgIGl0ZXItPnZhbHVlLT51cGRhdGUoKTsKK30KKwordm9pZCBDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yOjpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNz
TGF5ZXIqLCBkb3VibGUgLyogdGltZSAqLykKK3sKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yOjpub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKQoreworICAg
IG1fY2xpZW50LT5ub3RpZnlGbHVzaFJlcXVpcmVkKCk7Cit9CisKKwordm9pZCBDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNz
TGF5ZXIsIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBHcmFwaGljc0xheWVyUGFp
bnRpbmdQaGFzZSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCit7CisgICAgbV9jbGllbnQtPnBh
aW50TGF5ZXJDb250ZW50cyhncmFwaGljc0xheWVyLCBncmFwaGljc0NvbnRleHQsIGNsaXBSZWN0
KTsKK30KKworUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
OjpjcmVhdGVHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKK3sKKyAg
ICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbmV3IENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcihjbGllbnQpOworICAgIGxheWVyLT5zZXRDb29yZGluYXRvcih0aGlzKTsKKyAgICBt
X3JlZ2lzdGVyZWRMYXllcnMuYWRkKGxheWVyLT5pZCgpLCBsYXllcik7CisgICAgbV9zdGF0ZS5s
YXllcnNUb0NyZWF0ZS5hcHBlbmQobGF5ZXItPmlkKCkpOworICAgIGxheWVyLT5zZXROZWVkc1Zp
c2libGVSZWN0QWRqdXN0bWVudCgpOworICAgIG1fY2xpZW50LT5ub3RpZnlGbHVzaFJlcXVpcmVk
KCk7CisgICAgcmV0dXJuIGFkb3B0UHRyKGxheWVyKTsKK30KKworZmxvYXQgQ29tcG9zaXRpbmdD
b29yZGluYXRvcjo6ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX3Bh
Z2UtPmRldmljZVNjYWxlRmFjdG9yKCk7Cit9CisKK2Zsb2F0IENvbXBvc2l0aW5nQ29vcmRpbmF0
b3I6OnBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZS0+cGFnZVNj
YWxlRmFjdG9yKCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlVXBk
YXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+
IGNvb3JkaW5hdGVkU3VyZmFjZSkKK3sKKyAgICBtX3N0YXRlLnVwZGF0ZUF0bGFzZXNUb0NyZWF0
ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoYXRsYXNJRCwgY29vcmRpbmF0ZWRTdXJmYWNlKSk7Cit9
CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVtb3ZlVXBkYXRlQXRsYXModWludDMy
X3QgYXRsYXNJRCkKK3sKKyAgICBpZiAobV9pc1B1cmdpbmcpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX3N0YXRlLnVwZGF0ZUF0bGFzZXNUb1JlbW92ZS5hcHBlbmQoYXRsYXNJRCk7Cit9CisKK0Zs
b2F0UmVjdCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV92aXNpYmxlQ29udGVudHNSZWN0OworfQorCitDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIqIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6Om1haW5Db250ZW50c0xheWVy
KCkKK3sKKyAgICBpZiAoIW1fcm9vdENvbXBvc2l0aW5nTGF5ZXIpCisgICAgICAgIHJldHVybiAw
OworCisgICAgcmV0dXJuIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdENvbXBvc2l0
aW5nTGF5ZXIpLT5maW5kRmlyc3REZXNjZW5kYW50V2l0aENvbnRlbnRzUmVjdXJzaXZlbHkoKTsK
K30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3Rv
cikKK3sKKyAgICAvLyBBIHplcm8gdHJhamVjdG9yeVZlY3RvciBpbmRpY2F0ZXMgdGhhdCB0aWxl
cyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9ydCBhcmUgcmVxdWVzdGVkLgorICAgIGlmIChDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIqIGNvbnRlbnRzTGF5ZXIgPSBtYWluQ29udGVudHNMYXllcigpKQor
ICAgICAgICBjb250ZW50c0xheWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVj
dG9yKHRyYWplY3RvcnlWZWN0b3IpOworCisgICAgYm9vbCBjb250ZW50c1JlY3REaWRDaGFuZ2Ug
PSByZWN0ICE9IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICBpZiAoY29udGVudHNSZWN0RGlk
Q2hhbmdlKSB7CisgICAgICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7CisKKyAgICAg
ICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKKyAg
ICAgICAgZm9yIChMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXROZWVkc1Zp
c2libGVSZWN0QWRqdXN0bWVudCgpOworICAgIH0KKworICAgIEZyYW1lVmlldyogdmlldyA9IG1f
cGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKyAgICBpZiAodmlldy0+dXNlRml4ZWRMYXlvdXQo
KSkgeworICAgICAgICAvLyBSb3VuZCB0aGUgcmVjdCBpbnN0ZWFkIG9mIGVuY2xvc2luZyBpdCB0
byBtYWtlIHN1cmUgdGhhdCBpdHMgc2l6ZSBzdGF5cworICAgICAgICAvLyB0aGUgc2FtZSB3aGls
ZSBwYW5uaW5nLiBUaGlzIGNhbiBoYXZlIG5hc3R5IGVmZmVjdHMgb24gbGF5b3V0LgorICAgICAg
ICB2aWV3LT5zZXRGaXhlZFZpc2libGVDb250ZW50UmVjdChyb3VuZGVkSW50UmVjdChyZWN0KSk7
CisgICAgfQorfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRldmljZU9yUGFnZVNj
YWxlRmFjdG9yQ2hhbmdlZCgpCit7CisgICAgbV9yb290TGF5ZXItPmRldmljZU9yUGFnZVNjYWxl
RmFjdG9yQ2hhbmdlZCgpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRldGFj
aExheWVyKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgaWYgKG1faXNQ
dXJnaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3JlZ2lzdGVyZWRMYXllcnMucmVtb3Zl
KGxheWVyLT5pZCgpKTsKKworICAgIHNpemVfdCBpbmRleCA9IG1fc3RhdGUubGF5ZXJzVG9DcmVh
dGUuZmluZChsYXllci0+aWQoKSk7CisgICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKSB7CisgICAg
ICAgIG1fc3RhdGUubGF5ZXJzVG9DcmVhdGUucmVtb3ZlKGluZGV4KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG1fc3RhdGUubGF5ZXJzVG9SZW1vdmUuYXBwZW5kKGxheWVyLT5pZCgp
KTsKKyAgICBtX2NsaWVudC0+bm90aWZ5Rmx1c2hSZXF1aXJlZCgpOworfQorCit2b2lkIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OmNvbW1pdFNjcm9sbE9mZnNldCh1aW50MzJfdCBsYXllcklELCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBvZmZzZXQpCit7CisgICAgTGF5ZXJNYXA6Oml0ZXJhdG9y
IGkgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZmluZChsYXllcklEKTsKKyAgICBpZiAoaSA9PSBtX3Jl
Z2lzdGVyZWRMYXllcnMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGktPnZhbHVlLT5j
b21taXRTY3JvbGxPZmZzZXQob2Zmc2V0KTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpyZW5kZXJOZXh0RnJhbWUoKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fdXBkYXRlQXRsYXNlc1tpXS0+
ZGlkU3dhcEJ1ZmZlcnMoKTsKK30KKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpwdXJn
ZUJhY2tpbmdTdG9yZXMoKQoreworICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiBwdXJnaW5nVG9n
Z2xlKG1faXNQdXJnaW5nLCB0cnVlKTsKKworICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBt
X3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7CisgICAgZm9yIChMYXllck1hcDo6aXRlcmF0b3IgaXQg
PSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBp
dC0+dmFsdWUtPnB1cmdlQmFja2luZ1N0b3JlcygpOworCisgICAgbV9pbWFnZUJhY2tpbmdzLmNs
ZWFyKCk7CisgICAgbV91cGRhdGVBdGxhc2VzLmNsZWFyKCk7Cit9CisKK2Jvb2wgQ29tcG9zaXRp
bmdDb29yZGluYXRvcjo6cGFpbnRUb1N1cmZhY2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29vcmRp
bmF0ZWRTdXJmYWNlOjpGbGFncyBmbGFncywgdWludDMyX3QmIGF0bGFzSUQsIEludFBvaW50JiBv
ZmZzZXQsIENvb3JkaW5hdGVkU3VyZmFjZTo6Q2xpZW50KiBjbGllbnQpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkgeworICAgICAg
ICBVcGRhdGVBdGxhcyogYXRsYXMgPSBtX3VwZGF0ZUF0bGFzZXNbaV0uZ2V0KCk7CisgICAgICAg
IGlmIChhdGxhcy0+c3VwcG9ydHNBbHBoYSgpID09IChmbGFncyAmIENvb3JkaW5hdGVkU3VyZmFj
ZTo6U3VwcG9ydHNBbHBoYSkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBiZSBmYWxzZSBp
ZiB0aGVyZSBpcyBubyBhdmFpbGFibGUgYnVmZmVyIHNwYWNlLgorICAgICAgICAgICAgaWYgKGF0
bGFzLT5wYWludE9uQXZhaWxhYmxlQnVmZmVyKHNpemUsIGF0bGFzSUQsIG9mZnNldCwgY2xpZW50
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHN0YXRpYyBjb25zdCBpbnQgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiA9IDEwMjQ7IC8vIFNob3Vs
ZCBiZSBhIHBvd2VyIG9mIHR3by4KKyAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKGFkb3B0UHRy
KG5ldyBVcGRhdGVBdGxhcyh0aGlzLCBTY3JhdGNoQnVmZmVyRGltZW5zaW9uLCBmbGFncykpKTsK
KyAgICBzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMoKTsKKyAgICByZXR1cm4gbV91cGRh
dGVBdGxhc2VzLmxhc3QoKS0+cGFpbnRPbkF2YWlsYWJsZUJ1ZmZlcihzaXplLCBhdGxhc0lELCBv
ZmZzZXQsIGNsaWVudCk7Cit9CisKK2NvbnN0IGRvdWJsZSBSZWxlYXNlSW5hY3RpdmVBdGxhc2Vz
VGltZXJJbnRlcnZhbCA9IDAuNTsKKwordm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzY2hl
ZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMoKQoreworICAgIGlmICghbV9yZWxlYXNlSW5hY3Rp
dmVBdGxhc2VzVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9yZWxlYXNlSW5hY3RpdmVBdGxh
c2VzVGltZXIuc3RhcnRSZXBlYXRpbmcoUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2
YWwpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJlbGVhc2VJbmFjdGl2ZUF0
bGFzZXNUaW1lckZpcmVkKFRpbWVyPENvbXBvc2l0aW5nQ29vcmRpbmF0b3I+KikKK3sKKyAgICAv
LyBXZSBhbHdheXMgd2FudCB0byBrZWVwIG9uZSBhdGxhcyBmb3Igbm9uLWNvbXBvc2l0ZWQgY29u
dGVudC4KKyAgICBPd25QdHI8VXBkYXRlQXRsYXM+IGF0bGFzVG9LZWVwQW55d2F5OworICAgIGJv
b2wgZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ID0gZmFsc2U7CisgICAg
Zm9yIChpbnQgaSA9IG1fdXBkYXRlQXRsYXNlcy5zaXplKCkgLSAxOyAgaSA+PSAwOyAtLWkpIHsK
KyAgICAgICAgVXBkYXRlQXRsYXMqIGF0bGFzID0gbV91cGRhdGVBdGxhc2VzW2ldLmdldCgpOwor
ICAgICAgICBpZiAoIWF0bGFzLT5pc0luVXNlKCkpCisgICAgICAgICAgICBhdGxhcy0+YWRkVGlt
ZUluYWN0aXZlKFJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckludGVydmFsKTsKKyAgICAgICAg
Ym9vbCB1c2FibGVGb3JOb25Db21wb3NpdGVkQ29udGVudCA9ICFhdGxhcy0+c3VwcG9ydHNBbHBo
YSgpOworICAgICAgICBpZiAoYXRsYXMtPmlzSW5hY3RpdmUoKSkgeworICAgICAgICAgICAgaWYg
KCFmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgJiYgIWF0bGFzVG9LZWVw
QW55d2F5ICYmIHVzYWJsZUZvck5vbkNvbXBvc2l0ZWRDb250ZW50KQorICAgICAgICAgICAgICAg
IGF0bGFzVG9LZWVwQW55d2F5ID0gbV91cGRhdGVBdGxhc2VzW2ldLnJlbGVhc2UoKTsKKyAgICAg
ICAgICAgIG1fdXBkYXRlQXRsYXNlcy5yZW1vdmUoaSk7CisgICAgICAgIH0gZWxzZSBpZiAodXNh
YmxlRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQpCisgICAgICAgICAgICBmb3VuZEFjdGl2ZUF0bGFz
Rm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgPSB0cnVlOworICAgIH0KKworICAgIGlmICghZm91bmRB
Y3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ICYmIGF0bGFzVG9LZWVwQW55d2F5KQor
ICAgICAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKGF0bGFzVG9LZWVwQW55d2F5LnJlbGVhc2Uo
KSk7CisKKyAgICBpZiAobV91cGRhdGVBdGxhc2VzLnNpemUoKSA8PSAxKQorICAgICAgICBtX3Jl
bGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5zdG9wKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21w
b3NpdGluZ0Nvb3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4
MGZkODNhZmExOWJmODlkMDQ0MGJlMjljZmVlYzVkNDI1YzI5OGYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29t
cG9zaXRpbmdDb29yZGluYXRvci5oCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
ICogQ29weXJpZ2h0IChDKSAyMDEzIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgQ29tcG9zaXRpbmdDb29yZGluYXRvcl9oCisjZGVmaW5l
IENvbXBvc2l0aW5nQ29vcmRpbmF0b3JfaAorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiQ29v
cmRpbmF0ZWRHcmFwaGljc1N0YXRlLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmcuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNs
aWVudC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJGYWN0b3J5LmgiCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiVXBkYXRlQXRsYXMuaCIKKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisjaW5jbHVk
ZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgUGFnZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEdyYXBoaWNzTGF5ZXI7
CitjbGFzcyBDb29yZGluYXRlZFN1cmZhY2U7CisKK2NsYXNzIENvbXBvc2l0aW5nQ29vcmRpbmF0
b3IgOiBwdWJsaWMgR3JhcGhpY3NMYXllckNsaWVudAorICAgICwgcHVibGljIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllckNsaWVudAorICAgICwgcHVibGljIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
OjpDbGllbnQKKyAgICAsIHB1YmxpYyBVcGRhdGVBdGxhczo6Q2xpZW50CisgICAgLCBwdWJsaWMg
R3JhcGhpY3NMYXllckZhY3RvcnkgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbXBvc2l0
aW5nQ29vcmRpbmF0b3IpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBj
bGFzcyBDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZsdXNo
Um9vdExheWVyKCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFN5bmNMYXllclN0YXRl
KENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJikgPSAwOworICAgICAgICB2aXJ0dWFsIHZv
aWQgbm90aWZ5Rmx1c2hSZXF1aXJlZCgpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNvbW1p
dFNjZW5lU3RhdGUoQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJikgPSAwOworICAgICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkgPSAwOworICAgIH07CisKKyAgICBz
dGF0aWMgUGFzc093blB0cjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiBjcmVhdGUoUGFnZSosIENv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudCopOworICAgIHZpcnR1YWwgfkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3IoKTsKKworICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhp
Y3NMYXllciopOworICAgIHZvaWQgc2l6ZURpZENoYW5nZShjb25zdCBJbnRTaXplJiBuZXdTaXpl
KTsKKyAgICB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOworCisgICAgdm9p
ZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9p
bnQmKTsKKyAgICB2b2lkIHJlbmRlck5leHRGcmFtZSgpOworICAgIHZvaWQgcHVyZ2VCYWNraW5n
U3RvcmVzKCk7CisgICAgdm9pZCBjb21taXRTY3JvbGxPZmZzZXQodWludDMyX3QgbGF5ZXJJRCwg
Y29uc3QgSW50U2l6ZSYgb2Zmc2V0KTsKKworICAgIHZvaWQgY3JlYXRlUm9vdExheWVyKGNvbnN0
IEludFNpemUmKTsKKyAgICB2b2lkIGNsZWFyUm9vdExheWVyKCkgeyBtX3Jvb3RMYXllciA9IG51
bGxwdHI7IH0KKyAgICBHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBt
X3Jvb3RMYXllci5nZXQoKTsgfQorICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbWFpbkNv
bnRlbnRzTGF5ZXIoKTsKKworICAgIGJvb2wgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7Cisg
ICAgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJiBzdGF0ZSgpIHsgcmV0dXJuIG1fc3RhdGU7IH0K
KworICAgIHZvaWQgc3luY0Rpc3BsYXlTdGF0ZSgpOworCisjaWYgRU5BQkxFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FKQorICAgIGRvdWJsZSBuZXh0QW5pbWF0aW9uU2VydmljZVRpbWUoKSBjb25z
dDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3IoUGFnZSos
IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudCopOworCisgICAgLy8gR3JhcGhpY3NMYXll
ckNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdy
YXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIG5v
dGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0Nv
bnRleHQmLCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVjdCYgY2xpcFJl
Y3QpIE9WRVJSSURFOworICAgIHZpcnR1YWwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0IE9W
RVJSSURFOworCisgICAgLy8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNsaWVudAorICAgIHZp
cnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbWFnZUJh
Y2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7CisKKyAgICAvLyBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFsIGJvb2wgaXNGbHVzaGluZ0xh
eWVyQ2hhbmdlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faXNGbHVzaGluZ0xheWVyQ2hh
bmdlczsgfQorICAgIHZpcnR1YWwgRmxvYXRSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKEltYWdlKikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIGRldGFjaExheWVyKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopIE9WRVJSSURF
OworICAgIHZpcnR1YWwgYm9vbCBwYWludFRvU3VyZmFjZShjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMyX3QmIC8qIGF0bGFz
SUQgKi8sIFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpD
bGllbnQqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoQ29vcmRp
bmF0ZWRMYXllcklELCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpIE9WRVJSSURFOwor
CisgICAgLy8gVXBkYXRlQXRsYXM6OkNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVVcGRh
dGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4p
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBh
dGxhc0lEKSBPVkVSUklERTsKKworICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5CisgICAgdmly
dHVhbCBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdyYXBoaWNzTGF5ZXIoR3JhcGhp
Y3NMYXllckNsaWVudCopIE9WRVJSSURFOworCisgICAgdm9pZCBpbml0aWFsaXplUm9vdENvbXBv
c2l0aW5nTGF5ZXJJZk5lZWRlZCgpOworICAgIHZvaWQgZmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5n
Q2hhbmdlcygpOworICAgIHZvaWQgY2xlYXJQZW5kaW5nU3RhdGVDaGFuZ2VzKCk7CisKKyAgICB2
b2lkIHNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpOworCisgICAgdm9pZCByZWxlYXNl
SW5hY3RpdmVBdGxhc2VzVGltZXJGaXJlZChUaW1lcjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiop
OworCisgICAgUGFnZSogbV9wYWdlOworICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVu
dCogbV9jbGllbnQ7CisKKyAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7Cisg
ICAgR3JhcGhpY3NMYXllciogbV9yb290Q29tcG9zaXRpbmdMYXllcjsKKworICAgIENvb3JkaW5h
dGVkR3JhcGhpY3NTdGF0ZSBtX3N0YXRlOworCisgICAgdHlwZWRlZiBIYXNoTWFwPENvb3JkaW5h
dGVkTGF5ZXJJRCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj4gTGF5ZXJNYXA7CisgICAgTGF5
ZXJNYXAgbV9yZWdpc3RlcmVkTGF5ZXJzOworICAgIHR5cGVkZWYgSGFzaE1hcDxDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lELCBSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+ID4gSW1hZ2VC
YWNraW5nTWFwOworICAgIEltYWdlQmFja2luZ01hcCBtX2ltYWdlQmFja2luZ3M7CisgICAgVmVj
dG9yPE93blB0cjxVcGRhdGVBdGxhcz4gPiBtX3VwZGF0ZUF0bGFzZXM7CisKKyAgICAvLyBXZSBk
b24ndCBzZW5kIHRoZSBtZXNzYWdlcyByZWxhdGVkIHRvIHJlbGVhc2luZyByZXNvdXJjZXMgdG8g
cmVuZGVyZXIgZHVyaW5nIHB1cmdpbmcsIGJlY2F1c2UgcmVuZGVyZXIgYWxyZWFkeSBoYWQgcmVt
b3ZlZCBhbGwgcmVzb3VyY2VzLgorICAgIGJvb2wgbV9pc1B1cmdpbmc7CisgICAgYm9vbCBtX2lz
Rmx1c2hpbmdMYXllckNoYW5nZXM7CisKKyAgICBGbG9hdFJlY3QgbV92aXNpYmxlQ29udGVudHNS
ZWN0OworCisgICAgYm9vbCBtX3Nob3VsZFN5bmNGcmFtZTsKKyAgICBib29sIG1fZGlkSW5pdGlh
bGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyOworICAgIFRpbWVyPENvbXBvc2l0aW5nQ29vcmRpbmF0
b3I+IG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyOworCisjaWYgRU5BQkxFKFJFUVVFU1Rf
QU5JTUFUSU9OX0ZSQU1FKQorICAgIGRvdWJsZSBtX2xhc3RBbmltYXRpb25TZXJ2aWNlVGltZTsK
KyNlbmRpZgorfTsKKworfQorCisjZW5kaWYKKworI2VuZGlmIC8vIENvbXBvc2l0aW5nQ29vcmRp
bmF0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMTg2YjJlYjY2NGUxOGRmOWE4OTVjMDVjOTA0NGY4NjUw
NjU1NmZlMy4uNmVjZDkxNDRkZGU4YzVlYmIxNzliOTNkZTYyN2I1Mzc0YmFkZTVmYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhv
c3QuY3BwCkBAIC00MCwxOCArNDAsOCBAQAogI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2Vz
LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVW
aWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1N1cmZhY2UuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0luc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5k
ZXJMYXllckJhY2tpbmcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
U2V0dGluZ3MuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1N1cmZhY2VVcGRhdGVJbmZvLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oPgogI2luY2x1ZGUgPHd0
Zi9DdXJyZW50VGltZS5oPgotI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KIAogI2lm
IEVOQUJMRShDU1NfU0hBREVSUykKICNpbmNsdWRlICJDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9n
cmFtLmgiCkBAIC03Miw1MSArNjIsMjYgQEAgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp+Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0KCkKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAgICAgZGlz
Y29ubmVjdEN1c3RvbUZpbHRlclByb2dyYW1zKCk7CiAjZW5kaWYKLSAgICBwdXJnZUJhY2tpbmdT
dG9yZXMoKTsKLQotICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXll
cnMuZW5kKCk7Ci0gICAgZm9yIChMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRM
YXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+dmFsdWUtPnNldENv
b3JkaW5hdG9yKDApOwogfQogCiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdChXZWJQYWdlKiB3ZWJQYWdlKQogICAgIDogTGF5ZXJUcmVlSG9zdCh3ZWJQ
YWdlKQotICAgICwgbV9yb290Q29tcG9zaXRpbmdMYXllcigwKQogICAgICwgbV9ub3RpZnlBZnRl
clNjaGVkdWxlZExheWVyRmx1c2goZmFsc2UpCiAgICAgLCBtX2lzVmFsaWQodHJ1ZSkKLSAgICAs
IG1faXNQdXJnaW5nKGZhbHNlKQotICAgICwgbV9pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKGZhbHNl
KQotICAgICwgbV93YWl0aW5nRm9yVUlQcm9jZXNzKHRydWUpCiAgICAgLCBtX2lzU3VzcGVuZGVk
KGZhbHNlKQotICAgICwgbV9zaG91bGRTeW5jRnJhbWUoZmFsc2UpCi0gICAgLCBtX2RpZEluaXRp
YWxpemVSb290Q29tcG9zaXRpbmdMYXllcihmYWxzZSkKKyAgICAsIG1faXNXYWl0aW5nRm9yUmVu
ZGVyZXIodHJ1ZSkKICAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmxheWVyRmx1c2hUaW1lckZpcmVkKQotICAgICwgbV9yZWxlYXNlSW5hY3Rp
dmVBdGxhc2VzVGltZXIodGhpcywgJkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVsZWFzZUlu
YWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQpCiAgICAgLCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5h
YmxlZCh0cnVlKQogICAgICwgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQoMCkKLSAgICAs
IG1fYW5pbWF0aW9uc0xvY2tlZChmYWxzZSkKLSNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05f
RlJBTUUpCi0gICAgLCBtX2xhc3RBbmltYXRpb25TZXJ2aWNlVGltZSgwKQotI2VuZGlmCiB7Ci0g
ICAgbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBcHBseURldmljZVNjYWxl
RmFjdG9ySW5Db21wb3NpdG9yKHRydWUpOworICAgIG1fY29vcmRpbmF0b3IgPSBDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpjcmVhdGUod2ViUGFnZS0+Y29yZVBhZ2UoKSwgdGhpcyk7CiAKLSAgICAv
LyBDcmVhdGUgYSByb290IGxheWVyLgotICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6
Y3JlYXRlKHRoaXMsIHRoaXMpOwotI2lmbmRlZiBOREVCVUcKLSAgICBtX3Jvb3RMYXllci0+c2V0
TmFtZSgiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IHJvb3QgbGF5ZXIiKTsKLSNlbmRpZgotICAg
IG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOwotICAgIG1fcm9vdExheWVyLT5z
ZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKLSAgICBtX2xheWVyVHJlZUNvbnRleHQuY29vcmRp
bmF0ZWRMYXllcklEID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0
KCkpLT5pZCgpOworICAgIG1fY29vcmRpbmF0b3ItPmNyZWF0ZVJvb3RMYXllcih3ZWJQYWdlLT5z
aXplKCkpOworICAgIG1fbGF5ZXJUcmVlQ29udGV4dC5jb29yZGluYXRlZExheWVySUQgPSB0b0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX2Nvb3JkaW5hdG9yLT5yb290TGF5ZXIoKSktPmlkKCk7
CiAKICAgICBDb29yZGluYXRlZFN1cmZhY2U6OnNldEZhY3RvcnkoY3JlYXRlQ29vcmRpbmF0ZWRT
dXJmYWNlKTsKIAotICAgIC8vIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd2F5IHRvIGVuYWJsZSB0aGlz
IG9ubHkgaW4gdGhlIEdMIGNhc2UsIHVudGlsIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlciBpcyBy
ZW1vdmVkLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTE0ODY5Ci0gICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRTaG91bGRTdXBwb3J0
Q29udGVudHNUaWxpbmcodHJ1ZSk7Ci0KLSAgICBpZiAobV93ZWJQYWdlLT5oYXNQYWdlT3Zlcmxh
eSgpKQorICAgIGlmICh3ZWJQYWdlLT5oYXNQYWdlT3ZlcmxheSgpKQogICAgICAgICBjcmVhdGVQ
YWdlT3ZlcmxheUxheWVyKCk7CiAKICAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKQEAgLTE1OCwx
MiArMTIzLDcgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFNob3VsZE5vdGlm
eUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbAogCiB2b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciogZ3JhcGhpY3NMYXllcikKIHsKLSAgICBpZiAobV9yb290Q29tcG9zaXRpbmdMYXllcikKLSAg
ICAgICAgbV9yb290Q29tcG9zaXRpbmdMYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotCi0gICAg
bV9yb290Q29tcG9zaXRpbmdMYXllciA9IGdyYXBoaWNzTGF5ZXI7Ci0gICAgaWYgKG1fcm9vdENv
bXBvc2l0aW5nTGF5ZXIpCi0gICAgICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZEF0SW5kZXgobV9y
b290Q29tcG9zaXRpbmdMYXllciwgMCk7CisgICAgbV9jb29yZGluYXRvci0+c2V0Um9vdENvbXBv
c2l0aW5nTGF5ZXIoZ3JhcGhpY3NMYXllcik7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjppbnZhbGlkYXRlKCkKQEAgLTE3MSw3ICsxMzEsNyBAQCB2b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6aW52YWxpZGF0ZSgpCiAgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2go
KTsKIAogICAgIEFTU0VSVChtX2lzVmFsaWQpOwotICAgIG1fcm9vdExheWVyID0gbnVsbHB0cjsK
KyAgICBtX2Nvb3JkaW5hdG9yLT5jbGVhclJvb3RMYXllcigpOwogICAgIG1faXNWYWxpZCA9IGZh
bHNlOwogfQogCkBAIC0xNzksMTIgKzEzOSwxNiBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6Zm9yY2VSZXBhaW50KCkKIHsKICAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgcnVu
bmluZyBsYXlvdXQgdGVzdHMuIFNpbmNlIGluIHRoaXMgY2FzZSB3ZSBhcmUgbm90IHdhaXRpbmcg
Zm9yIGEgVUlQcm9jZXNzIHRvIHJlcGx5IG5pY2VseS4KICAgICAvLyBJbnN0ZWFkIHdlIGFyZSBq
dXN0IHRyaWdnZXJpbmcgZm9yY2VSZXBhaW50LiBCdXQgd2Ugc3RpbGwgd2FudCB0byBoYXZlIHRo
ZSBzY3JpcHRlZCBhbmltYXRpb24gY2FsbGJhY2tzIGJlaW5nIGV4ZWN1dGVkLgotICAgIHN5bmNE
aXNwbGF5U3RhdGUoKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5zeW5jRGlzcGxheVN0YXRlKCk7CiAK
ICAgICAvLyBXZSBuZWVkIHRvIHNjaGVkdWxlIGFub3RoZXIgZmx1c2gsIG90aGVyd2lzZSB0aGUg
Zm9yY2VkIHBhaW50IG1pZ2h0IGNhbmNlbCBhIGxhdGVyIGV4cGVjdGVkIGZsdXNoLgogICAgIC8v
IFRoaXMgaXMgYWxpZ25lZCB3aXRoIExheWVyVHJlZUhvc3RDQS4KICAgICBzY2hlZHVsZUxheWVy
Rmx1c2goKTsKLSAgICBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKKworICAgIGlmIChtX2lz
V2FpdGluZ0ZvclJlbmRlcmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Nvb3JkaW5hdG9y
LT5mbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKIH0KIAogYm9vbCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmZvcmNlUmVwYWludEFzeW5jKHVpbnQ2NF90IGNhbGxiYWNrSUQpCkBAIC0xOTgs
NyArMTYyLDcgQEAgYm9vbCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZvcmNlUmVwYWludEFz
eW5jKHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpCiB7Ci0gICAg
bV9yb290TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisgICAgbV9jb29yZGluYXRvci0+c2l6ZURp
ZENoYW5nZShuZXdTaXplKTsKICAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKIH0KIApAQCAtMjMz
LDExMSArMTk3LDQ5IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRQYWdlT3Zl
cmxheU9wYWNpdHkoUGFnZU92ZXJsYXkqLCBmbG9hdCB2YWx1ZSkKICAgICBzY2hlZHVsZUxheWVy
Rmx1c2goKTsKIH0KIAotYm9vbCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGlu
Z0xheWVyQ2hhbmdlcygpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJs
ZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRy
YWplY3RvcnlWZWN0b3IpCiB7Ci0gICAgaWYgKG1fd2FpdGluZ0ZvclVJUHJvY2VzcykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IHByb3RlY3Rvciht
X2lzRmx1c2hpbmdMYXllckNoYW5nZXMsIHRydWUpOwotCi0gICAgaW5pdGlhbGl6ZVJvb3RDb21w
b3NpdGluZ0xheWVySWZOZWVkZWQoKTsKLQotICAgIG1fcm9vdExheWVyLT5mbHVzaENvbXBvc2l0
aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0gICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikK
LSAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlz
TGF5ZXJPbmx5KCk7Ci0KLSAgICBib29sIGRpZFN5bmMgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCkt
Pm1haW5GcmFtZSgpLT52aWV3KCktPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZy
YW1lcygpOwotCi0gICAgdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0
KCkpLT51cGRhdGVDb250ZW50QnVmZmVyc0luY2x1ZGluZ1N1YkxheWVycygpOwotICAgIHRvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+c3luY1BlbmRpbmdTdGF0
ZUNoYW5nZXNJbmNsdWRpbmdTdWJMYXllcnMoKTsKLQotICAgIGZsdXNoUGVuZGluZ0ltYWdlQmFj
a2luZ0NoYW5nZXMoKTsKLQotICAgIGlmIChtX3Nob3VsZFN5bmNGcmFtZSkgewotICAgICAgICBk
aWRTeW5jID0gdHJ1ZTsKLQotICAgICAgICBpZiAobV9yb290Q29tcG9zaXRpbmdMYXllcikgewot
ICAgICAgICAgICAgbV9zdGF0ZS5jb250ZW50c1NpemUgPSByb3VuZGVkSW50U2l6ZShtX3Jvb3RD
b21wb3NpdGluZ0xheWVyLT5zaXplKCkpOwotICAgICAgICAgICAgaWYgKENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllciogY29udGVudHNMYXllciA9IG1haW5Db250ZW50c0xheWVyKCkpCi0gICAgICAg
ICAgICAgICAgbV9zdGF0ZS5jb3ZlcmVkUmVjdCA9IGNvbnRlbnRzTGF5ZXItPmNvdmVyUmVjdCgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgbV9zdGF0ZS5zY3JvbGxQb3NpdGlvbiA9IG1fdmlzaWJs
ZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpOwotCi0gICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNvbW1pdENvb3JkaW5hdGVkR3Jh
cGhpY3NTdGF0ZShtX3N0YXRlKSk7Ci0KLSAgICAgICAgY2xlYXJQZW5kaW5nU3RhdGVDaGFuZ2Vz
KCk7Ci0gICAgICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9IHRydWU7Ci0gICAgICAgIG1fc2hv
dWxkU3luY0ZyYW1lID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1fZm9yY2VSZXBhaW50QXN5
bmNDYWxsYmFja0lEKSB7Ci0gICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpWb2lkQ2FsbGJhY2sobV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQpKTsKLSAg
ICAgICAgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQgPSAwOwotICAgIH0KLQotICAgIHJl
dHVybiBkaWRTeW5jOworICAgIG1fY29vcmRpbmF0b3ItPnNldFZpc2libGVDb250ZW50c1JlY3Qo
cmVjdCwgdHJhamVjdG9yeVZlY3Rvcik7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CiB9CiAK
LXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjbGVhclBlbmRpbmdTdGF0ZUNoYW5nZXMo
KQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZSgpCiB7Ci0g
ICAgbV9zdGF0ZS5sYXllcnNUb0NyZWF0ZS5jbGVhcigpOwotICAgIG1fc3RhdGUubGF5ZXJzVG9V
cGRhdGUuY2xlYXIoKTsKLSAgICBtX3N0YXRlLmxheWVyc1RvUmVtb3ZlLmNsZWFyKCk7Ci0KLSAg
ICBtX3N0YXRlLmltYWdlc1RvQ3JlYXRlLmNsZWFyKCk7Ci0gICAgbV9zdGF0ZS5pbWFnZXNUb1Jl
bW92ZS5jbGVhcigpOwotICAgIG1fc3RhdGUuaW1hZ2VzVG9VcGRhdGUuY2xlYXIoKTsKLSAgICBt
X3N0YXRlLmltYWdlc1RvQ2xlYXIuY2xlYXIoKTsKLQotICAgIG1fc3RhdGUudXBkYXRlQXRsYXNl
c1RvQ3JlYXRlLmNsZWFyKCk7Ci0gICAgbV9zdGF0ZS51cGRhdGVBdGxhc2VzVG9SZW1vdmUuY2xl
YXIoKTsKLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBtX3N0YXRlLmN1c3RvbUZpbHRl
cnNUb0NyZWF0ZS5jbGVhcigpOwotICAgIG1fc3RhdGUuY3VzdG9tRmlsdGVyc1RvUmVtb3ZlLmNs
ZWFyKCk7Ci0jZW5kaWYKKyAgICBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyID0gZmFsc2U7CisgICAg
c2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgbV9jb29yZGluYXRvci0+cmVuZGVyTmV4dEZyYW1l
KCk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojppbml0aWFsaXplUm9vdENv
bXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCgpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
cHVyZ2VCYWNraW5nU3RvcmVzKCkKIHsKLSAgICBpZiAobV9kaWRJbml0aWFsaXplUm9vdENvbXBv
c2l0aW5nTGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RhdGUucm9vdENvbXBvc2l0
aW5nTGF5ZXIgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSkt
PmlkKCk7Ci0gICAgbV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXIgPSB0cnVlOwot
ICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5wdXJnZUJh
Y2tpbmdTdG9yZXMoKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNM
YXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
U3RhdGUmIHN0YXRlKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OndpbGxTeW5jTGF5
ZXJTdGF0ZShDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgbV9z
aG91bGRTeW5jRnJhbWUgPSB0cnVlOwotCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIHBy
ZXBhcmVDdXN0b21GaWx0ZXJQcm94aWVzSWZOZWVkZWQoc3RhdGUpOwotI2VuZGlmCisgICAgaWYg
KHN0YXRlLmFuaW1hdGlvbnNDaGFuZ2VkKQorICAgICAgICBwcmVwYXJlQ3VzdG9tRmlsdGVyUHJv
eGllc0ZvckFuaW1hdGlvbnMoc3RhdGUuYW5pbWF0aW9ucyk7CiAKLSAgICBtX3N0YXRlLmxheWVy
c1RvVXBkYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihpZCwgc3RhdGUpKTsKKyAgICBpZiAoc3Rh
dGUuZmlsdGVyc0NoYW5nZWQpCisgICAgICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hp
ZXMoc3RhdGUuZmlsdGVycyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisjZW5k
aWYKIH0KIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpwcmVwYXJlQ3VzdG9tRmlsdGVyUHJveGllc0lmTmVlZGVkKENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKLXsKLSAgICBpZiAoc3RhdGUuYW5pbWF0aW9uc0NoYW5n
ZWQpIHsKLSAgICAgICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFjdGl2ZUFuaW1hdGlvbnMg
PSBzdGF0ZS5hbmltYXRpb25zOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFjdGl2
ZUFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25z
dCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzID0gYWN0aXZlQW5pbWF0aW9ucy5hbmltYXRp
b25zKCkuYXQoaSkua2V5ZnJhbWVzKCk7Ci0gICAgICAgICAgICBpZiAoa2V5ZnJhbWVzLnByb3Bl
cnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcikKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwga2V5ZnJhbWVzLnNp
emUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUm
IGZpbHRlclZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUmPihr
ZXlmcmFtZXMuYXQoaikpOwotICAgICAgICAgICAgICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3Jh
bVByb3hpZXMoZmlsdGVyVmFsdWUudmFsdWUoKSk7Ci0gICAgICAgICAgICB9Cit2b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6cHJlcGFyZUN1c3RvbUZpbHRlclByb3hpZXNGb3JBbmltYXRp
b25zKEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhY3RpdmVBbmltYXRpb25zKQoreworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYWN0aXZlQW5pbWF0aW9ucy5hbmltYXRpb25zKCkuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcyA9IGFj
dGl2ZUFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLmF0KGkpLmtleWZyYW1lcygpOworICAgICAgICBp
ZiAoa2V5ZnJhbWVzLnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcikK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGtl
eWZyYW1lcy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgY29uc3QgRmlsdGVyQW5pbWF0aW9u
VmFsdWUmIGZpbHRlclZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFs
dWUmPihrZXlmcmFtZXMuYXQoaikpOworICAgICAgICAgICAgY2hlY2tDdXN0b21GaWx0ZXJQcm9n
cmFtUHJveGllcyhmaWx0ZXJWYWx1ZS52YWx1ZSgpKTsKICAgICAgICAgfQogICAgIH0KLQotICAg
IGlmIChzdGF0ZS5maWx0ZXJzQ2hhbmdlZCkKLSAgICAgICAgY2hlY2tDdXN0b21GaWx0ZXJQcm9n
cmFtUHJveGllcyhzdGF0ZS5maWx0ZXJzKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OmNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyYgZmlsdGVycykKQEAgLTM2Nyw3ICsyNjksNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6Y2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhjb25zdCBGaWx0ZXJPcGVy
YQogICAgICAgICBpZiAoIWN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+Y2xpZW50KCkpIHsKICAg
ICAgICAgICAgIGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+c2V0Q2xpZW50KHRoaXMpOwogICAg
ICAgICAgICAgbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5hZGQoY3VzdG9tRmlsdGVyUHJvZ3JhbVBy
b3h5LmdldCgpKTsKLSAgICAgICAgICAgIG1fc3RhdGUuY3VzdG9tRmlsdGVyc1RvQ3JlYXRlLmFw
cGVuZChzdGQ6Om1ha2VfcGFpcihjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmlkKCksIGN1c3Rv
bU9wZXJhdGlvbi0+dmFsaWRhdGVkUHJvZ3JhbSgpLT52YWxpZGF0ZWRQcm9ncmFtSW5mbygpKSk7
CisgICAgICAgICAgICBtX2Nvb3JkaW5hdG9yLT5zdGF0ZSgpLmN1c3RvbUZpbHRlcnNUb0NyZWF0
ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpLCBj
dXN0b21PcGVyYXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKS0+dmFsaWRhdGVkUHJvZ3JhbUluZm8o
KSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gSWYgdGhlIGNsaWVudCB3YXMg
bm90IGRpc2Nvbm5lY3RlZCB0aGVuIHRoaXMgY29vcmRpbmF0b3IgbXVzdCBiZSB0aGUgY2xpZW50
IGZvciBpdC4KICAgICAgICAgICAgIEFTU0VSVChjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmNs
aWVudCgpID09IHRoaXMpOwpAQCAtMzgwLDcgKzI4Miw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkoV2ViQ3VzdG9tRmlsdGVy
UHJvCiAgICAgLy8gQXQgdGhpcyB0aW1lIHRoZSBzaGFkZXIgaXMgbm90IG5lZWRlZCBhbnltb3Jl
LCBzbyB3ZSByZW1vdmUgaXQgZnJvbSBvdXIgc2V0IGFuZAogICAgIC8vIHNlbmQgYSBtZXNzYWdl
IHRvIHRoZSBvdGhlciBwcm9jZXNzIHRvIGRlbGV0ZSBpdC4KICAgICBtX2N1c3RvbUZpbHRlclBy
b2dyYW1zLnJlbW92ZShjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkpOwotICAgIG1fc3RhdGUuY3Vz
dG9tRmlsdGVyc1RvUmVtb3ZlLmFwcGVuZChjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmlkKCkp
OworICAgIG1fY29vcmRpbmF0b3ItPnN0YXRlKCkuY3VzdG9tRmlsdGVyc1RvUmVtb3ZlLmFwcGVu
ZChjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmlkKCkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6ZGlzY29ubmVjdEN1c3RvbUZpbHRlclByb2dyYW1zKCkKQEAgLTM5Miw1
MiArMjk0LDMwIEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaXNjb25uZWN0Q3Vz
dG9tRmlsdGVyUHJvZ3JhbXMoKQogfQogI2VuZGlmIC8vIEVOQUJMRShDU1NfU0hBREVSUykKIAot
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRldGFjaExheWVyKENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllciogbGF5ZXIpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGlkRmx1
c2hSb290TGF5ZXIoKQogewotICAgIG1fcmVnaXN0ZXJlZExheWVycy5yZW1vdmUobGF5ZXItPmlk
KCkpOwotCi0gICAgc2l6ZV90IGluZGV4ID0gbV9zdGF0ZS5sYXllcnNUb0NyZWF0ZS5maW5kKGxh
eWVyLT5pZCgpKTsKLSAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpIHsKLSAgICAgICAgbV9zdGF0
ZS5sYXllcnNUb0NyZWF0ZS5yZW1vdmUoaW5kZXgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgbV9zdGF0ZS5sYXllcnNUb1JlbW92ZS5hcHBlbmQobGF5ZXItPmlkKCkpOwotICAgIHNj
aGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCisgICAgICAg
IG1fcGFnZU92ZXJsYXlMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25s
eSgpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGVyZm9ybVNjaGVkdWxl
ZExheWVyRmx1c2goKQogewotICAgIGlmIChtX2lzU3VzcGVuZGVkIHx8IG1fd2FpdGluZ0ZvclVJ
UHJvY2VzcykKKyAgICBpZiAobV9pc1N1c3BlbmRlZCB8fCBtX2lzV2FpdGluZ0ZvclJlbmRlcmVy
KQogICAgICAgICByZXR1cm47CiAKLSAgICBzeW5jRGlzcGxheVN0YXRlKCk7CisgICAgbV9jb29y
ZGluYXRvci0+c3luY0Rpc3BsYXlTdGF0ZSgpOwogCiAgICAgaWYgKCFtX2lzVmFsaWQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKSkKLSAgICAg
ICAgZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKLX0KLQotdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OnN5bmNEaXNwbGF5U3RhdGUoKQotewotI2lmIEVOQUJMRShJTlNQRUNU
T1IpCi0gICAgbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmRp
ZEJlZ2luRnJhbWUoKTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZS
QU1FKSAmJiAhVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKSAmJiAhVVNFKFJFUVVF
U1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLSAgICAvLyBNYWtlIHN1cmUgdGhh
dCBhbnkgcHJldmlvdXNseSByZWdpc3RlcmVkIGFuaW1hdGlvbiBjYWxsYmFja3MgYXJlIGJlaW5n
IGV4ZWN1dGVkIGJlZm9yZSB3ZSBmbHVzaCB0aGUgbGF5ZXJzLgotICAgIG1fbGFzdEFuaW1hdGlv
blNlcnZpY2VUaW1lID0gV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKLSAgICBt
X3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPnNlcnZpY2VTY3JpcHRl
ZEFuaW1hdGlvbnMobV9sYXN0QW5pbWF0aW9uU2VydmljZVRpbWUpOwotI2VuZGlmCisgICAgYm9v
bCBkaWRTeW5jID0gbV9jb29yZGluYXRvci0+Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7CiAK
LSAgICBtX3dlYlBhZ2UtPmxheW91dElmTmVlZGVkKCk7Ci19CisgICAgaWYgKG1fZm9yY2VSZXBh
aW50QXN5bmNDYWxsYmFja0lEKSB7CisgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpWb2lkQ2FsbGJhY2sobV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQp
KTsKKyAgICAgICAgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQgPSAwOworICAgIH0KIAot
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZs
dXNoKCkKLXsKLSAgICBpZiAobV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gpIHsKKyAg
ICBpZiAobV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2ggJiYgZGlkU3luYykgewogICAg
ICAgICBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYUltcGwqPihtX3dlYlBhZ2UtPmRyYXdpbmdBcmVh
KCkpLT5sYXllckhvc3REaWRGbHVzaExheWVycygpOwogICAgICAgICBtX25vdGlmeUFmdGVyU2No
ZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOwogICAgIH0KQEAgLTQ1MiwxNSArMzMyLDE1IEBAIHZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCkKIHsK
ICAgICBBU1NFUlQoIW1fcGFnZU92ZXJsYXlMYXllcik7CiAKLSAgICBtX3BhZ2VPdmVybGF5TGF5
ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcywgdGhpcyk7CisgICAgbV9wYWdlT3Zlcmxh
eUxheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksIG1f
Y29vcmRpbmF0b3IuZ2V0KCkpOwogI2lmbmRlZiBOREVCVUcKLSAgICBtX3BhZ2VPdmVybGF5TGF5
ZXItPnNldE5hbWUoIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBwYWdlIG92ZXJsYXkgY29udGVu
dCIpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmFtZSgiQ29tcG9zaXRpbmdDb29yZGlu
YXRvciBwYWdlIG92ZXJsYXkgY29udGVudCIpOwogI2VuZGlmCiAKICAgICBtX3BhZ2VPdmVybGF5
TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNl
dFNpemUobV93ZWJQYWdlLT5zaXplKCkpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0U2l6
ZShtX2Nvb3JkaW5hdG9yLT5yb290TGF5ZXIoKS0+c2l6ZSgpKTsKIAotICAgIG1fcm9vdExheWVy
LT5hZGRDaGlsZChtX3BhZ2VPdmVybGF5TGF5ZXIuZ2V0KCkpOworICAgIG1fY29vcmRpbmF0b3It
PnJvb3RMYXllcigpLT5hZGRDaGlsZChtX3BhZ2VPdmVybGF5TGF5ZXIuZ2V0KCkpOwogfQogCiB2
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKQpA
QCAtNDcwLDY1ICszNTAsNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGVzdHJv
eVBhZ2VPdmVybGF5TGF5ZXIoKQogICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IG51bGxwdHI7CiB9
CiAKLVBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6Y3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoSW1hZ2UqIGltYWdlKQotewotICAg
IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCA9IENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nOjpnZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKGltYWdlKTsKLSAgICBJbWFnZUJhY2tp
bmdNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7Ci0gICAg
UmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBpbWFnZUJhY2tpbmc7Ci0gICAgaWYgKGl0
ID09IG1faW1hZ2VCYWNraW5ncy5lbmQoKSkgewotICAgICAgICBpbWFnZUJhY2tpbmcgPSBDb29y
ZGluYXRlZEltYWdlQmFja2luZzo6Y3JlYXRlKHRoaXMsIGltYWdlKTsKLSAgICAgICAgbV9pbWFn
ZUJhY2tpbmdzLmFkZChpbWFnZUlELCBpbWFnZUJhY2tpbmcpOwotICAgIH0gZWxzZQotICAgICAg
ICBpbWFnZUJhY2tpbmcgPSBpdC0+dmFsdWU7Ci0KLSAgICByZXR1cm4gaW1hZ2VCYWNraW5nOwot
fQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlSW1hZ2VCYWNraW5nKENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBtX3N0YXRlLmltYWdlc1Rv
Q3JlYXRlLmFwcGVuZChpbWFnZUlEKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQs
IFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBjb29yZGluYXRlZFN1cmZhY2UpCi17Ci0g
ICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fc3RhdGUuaW1hZ2VzVG9VcGRhdGUu
YXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGltYWdlSUQsIGNvb3JkaW5hdGVkU3VyZmFjZSkpOwotfQot
Ci12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50
cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCi17Ci0gICAgbV9zaG91bGRTeW5j
RnJhbWUgPSB0cnVlOwotICAgIG1fc3RhdGUuaW1hZ2VzVG9DbGVhci5hcHBlbmQoaW1hZ2VJRCk7
Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW1vdmVJbWFnZUJhY2tpbmco
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIGlmIChtX2lzUHVyZ2lu
ZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlu
cyhpbWFnZUlEKSk7Ci0gICAgbV9pbWFnZUJhY2tpbmdzLnJlbW92ZShpbWFnZUlEKTsKLQotICAg
IG1fc3RhdGUuaW1hZ2VzVG9SZW1vdmUuYXBwZW5kKGltYWdlSUQpOwotfQotCi12b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpCi17
Ci0gICAgSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBlbmQgPSBtX2ltYWdlQmFja2luZ3MuZW5k
KCk7Ci0gICAgZm9yIChJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2ltYWdlQmFj
a2luZ3MuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgaXRlci0+dmFsdWUt
PnVwZGF0ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bm90aWZ5QW5p
bWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIC8qIHRp
bWUgKi8pCi17Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpub3RpZnlGbHVz
aFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKQotewotICAgIHNjaGVkdWxl
TGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGFpbnRD
b250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgV2ViQ29yZTo6R3JhcGhpY3NM
YXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KQordm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBHcmFw
aGljc0xheWVyKiBncmFwaGljc0xheWVyLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4
dCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCiB7CiAgICAgaWYgKGdyYXBoaWNzTGF5ZXIgPT0g
bV9wYWdlT3ZlcmxheUxheWVyKSB7CiAgICAgICAgIC8vIE92ZXJsYXlzIGNvbnRhaW4gdHJhbnNw
YXJlbnQgY29udGVudHMgYW5kIHdvbid0IGNsZWFyIHRoZSBjb250ZXh0IGFzIHBhcnQgb2YgdGhl
aXIgcmVuZGVyaW5nLCBzbyB3ZSBkbyBpdCBoZXJlLgpAQCAtNTM4LDE1ICszNjAsMTAgQEAgdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6
R3JhcGhpY3NMYXllciogZ3JhcGgKICAgICB9CiB9CiAKLVBhc3NPd25QdHI8R3JhcGhpY3NMYXll
cj4gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVHcmFwaGljc0xheWVyKEdyYXBoaWNz
TGF5ZXJDbGllbnQqIGNsaWVudCkKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpjb21t
aXRTY2VuZVN0YXRlKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYgc3RhdGUpCiB7
Ci0gICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBsYXllciA9IG5ldyBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIoY2xpZW50KTsKLSAgICBsYXllci0+c2V0Q29vcmRpbmF0b3IodGhpcyk7Ci0g
ICAgbV9yZWdpc3RlcmVkTGF5ZXJzLmFkZChsYXllci0+aWQoKSwgbGF5ZXIpOwotICAgIG1fc3Rh
dGUubGF5ZXJzVG9DcmVhdGUuYXBwZW5kKGxheWVyLT5pZCgpKTsKLSAgICBsYXllci0+c2V0TmVl
ZHNWaXNpYmxlUmVjdEFkanVzdG1lbnQoKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLSAg
ICByZXR1cm4gYWRvcHRQdHIobGF5ZXIpOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NT
dGF0ZShzdGF0ZSkpOworICAgIG1faXNXYWl0aW5nRm9yUmVuZGVyZXIgPSB0cnVlOwogfQogCiBQ
YXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpj
cmVhdGVDb29yZGluYXRlZFN1cmZhY2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29vcmRpbmF0ZWRT
dXJmYWNlOjpGbGFncyBmbGFncykKQEAgLTU1NCw3MyArMzcxLDE0IEBAIFBhc3NSZWZQdHI8Q29v
cmRpbmF0ZWRTdXJmYWNlPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUNvb3JkaW5h
dGVkU3VyZmFjCiAgICAgcmV0dXJuIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKHNpemUs
IGZsYWdzKTsKIH0KIAotZmxvYXQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXZpY2VTY2Fs
ZUZhY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS0+ZGV2aWNlU2NhbGVGYWN0
b3IoKTsKLX0KLQotZmxvYXQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwYWdlU2NhbGVGYWN0
b3IoKSBjb25zdAotewotICAgIHJldHVybiBtX3dlYlBhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpOwot
fQotCiBib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygp
CiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5h
dGVkU3VyZmFjZT4gY29vcmRpbmF0ZWRTdXJmYWNlKQotewotICAgIG1fc3RhdGUudXBkYXRlQXRs
YXNlc1RvQ3JlYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihhdGxhc0lELCBjb29yZGluYXRlZFN1
cmZhY2UpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZVVwZGF0
ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCi17Ci0gICAgaWYgKG1faXNQdXJnaW5nKQotICAgICAg
ICByZXR1cm47Ci0gICAgbV9zdGF0ZS51cGRhdGVBdGxhc2VzVG9SZW1vdmUuYXBwZW5kKGF0bGFz
SUQpOwotfQotCi1XZWJDb3JlOjpGbG9hdFJlY3QgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp2
aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV92aXNpYmxlQ29udGVu
dHNSZWN0OwotfQotCi1Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6bWFpbkNvbnRlbnRzTGF5ZXIoKQotewotICAgIGlmICghbV9yb290Q29tcG9zaXRp
bmdMYXllcikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gdG9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIobV9yb290Q29tcG9zaXRpbmdMYXllciktPmZpbmRGaXJzdERlc2NlbmRhbnRX
aXRoQ29udGVudHNSZWN1cnNpdmVseSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCi17Ci0gICAgLy8gQSB6ZXJvIHRyYWplY3Rv
cnlWZWN0b3IgaW5kaWNhdGVzIHRoYXQgdGlsZXMgYWxsIGFyb3VuZCB0aGUgdmlld3BvcnQgYXJl
IHJlcXVlc3RlZC4KLSAgICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBjb250ZW50c0xh
eWVyID0gbWFpbkNvbnRlbnRzTGF5ZXIoKSkKLSAgICAgICAgY29udGVudHNMYXllci0+c2V0Vmlz
aWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKTsKLQotICAg
IGJvb2wgY29udGVudHNSZWN0RGlkQ2hhbmdlID0gcmVjdCAhPSBtX3Zpc2libGVDb250ZW50c1Jl
Y3Q7Ci0gICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSkgewotICAgICAgICBtX3Zpc2libGVD
b250ZW50c1JlY3QgPSByZWN0OwotCi0gICAgICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBt
X3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7Ci0gICAgICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAgICAgaXQtPnZhbHVlLT5zZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgaWYgKG1fd2Vi
UGFnZS0+dXNlRml4ZWRMYXlvdXQoKSkgewotICAgICAgICAvLyBSb3VuZCB0aGUgcmVjdCBpbnN0
ZWFkIG9mIGVuY2xvc2luZyBpdCB0byBtYWtlIHN1cmUgdGhhdCBpdHMgc2l6ZSBzdGF5cwotICAg
ICAgICAvLyB0aGUgc2FtZSB3aGlsZSBwYW5uaW5nLiBUaGlzIGNhbiBoYXZlIG5hc3R5IGVmZmVj
dHMgb24gbGF5b3V0LgotICAgICAgICBtX3dlYlBhZ2UtPnNldEZpeGVkVmlzaWJsZUNvbnRlbnRS
ZWN0KHJvdW5kZWRJbnRSZWN0KHJlY3QpKTsKLSAgICB9Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKQogewotICAgIG1f
cm9vdExheWVyLT5kZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKKyAgICBtX2Nvb3Jk
aW5hdG9yLT5kZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKICAgICBpZiAobV9wYWdl
T3ZlcmxheUxheWVyKQogICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPmRldmljZU9yUGFnZVNj
YWxlRmFjdG9yQ2hhbmdlZCgpOwogfQpAQCAtNjMxLDk1ICszODksMjMgQEAgdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OnBhZ2VCYWNrZ3JvdW5kVHJhbnNwYXJlbmN5Q2hhbmdlZCgpCiAK
IEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmdyYXBoaWNz
TGF5ZXJGYWN0b3J5KCkKIHsKLSAgICByZXR1cm4gdGhpczsKKyAgICByZXR1cm4gbV9jb29yZGlu
YXRvci5nZXQoKTsKIH0KIAogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKIHZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZUFuaW1hdGlvbigpCiB7Ci0gICAg
aWYgKG1fd2FpdGluZ0ZvclVJUHJvY2VzcykKKyAgICBpZiAobV9pc1dhaXRpbmdGb3JSZW5kZXJl
cikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZl
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEFjY29yZGluZyB0byB0aGUgcmVxdWVzdEFu
aW1hdGlvbkZyYW1lIHNwZWMsIHJBRiBjYWxsYmFja3Mgc2hvdWxkIG5vdCBiZSBmYXN0ZXIgdGhh
biA2MEZQUy4KLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIE1pbmltYWxUaW1lb3V0Rm9yQW5pbWF0
aW9ucyA9IDEuIC8gNjAuOwotICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdChzdGQ6
Om1heDxkb3VibGU+KDAuLCBNaW5pbWFsVGltZW91dEZvckFuaW1hdGlvbnMgLSBXVEY6Om1vbm90
b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpICsgbV9sYXN0QW5pbWF0aW9uU2VydmljZVRpbWUpKTsK
KyAgICBtX2xheWVyRmx1c2hUaW1lci5zdGFydE9uZVNob3QobV9jb29yZGluYXRvci0+bmV4dEFu
aW1hdGlvblNlcnZpY2VUaW1lKCkpOwogICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwogfQogI2Vu
ZGlmCiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW5kZXJOZXh0RnJhbWUoKQot
ewotICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9IGZhbHNlOwotICAgIHNjaGVkdWxlTGF5ZXJG
bHVzaCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6
ZSgpOyArK2kpCi0gICAgICAgIG1fdXBkYXRlQXRsYXNlc1tpXS0+ZGlkU3dhcEJ1ZmZlcnMoKTsK
LX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnB1cmdlQmFja2luZ1N0b3Jlcygp
Ci17Ci0gICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IHB1cmdpbmdUb2dnbGUobV9pc1B1cmdpbmcs
IHRydWUpOwotCi0gICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcmVnaXN0ZXJlZExheWVy
cy5lbmQoKTsKLSAgICBmb3IgKExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExh
eWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT52YWx1ZS0+cHVyZ2VC
YWNraW5nU3RvcmVzKCk7Ci0KLSAgICBtX2ltYWdlQmFja2luZ3MuY2xlYXIoKTsKLSAgICBtX3Vw
ZGF0ZUF0bGFzZXMuY2xlYXIoKTsKLX0KLQotYm9vbCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnBhaW50VG9TdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUsIENvb3JkaW5hdGVkU3VyZmFjZTo6
RmxhZ3MgZmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBJbnRQb2ludCYgb2Zmc2V0LCBDb29yZGlu
YXRlZFN1cmZhY2U6OkNsaWVudCogY2xpZW50KQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVXBkYXRlQXRsYXMq
IGF0bGFzID0gbV91cGRhdGVBdGxhc2VzW2ldLmdldCgpOwotICAgICAgICBpZiAoYXRsYXMtPnN1
cHBvcnRzQWxwaGEoKSA9PSAoZmxhZ3MgJiBDb29yZGluYXRlZFN1cmZhY2U6OlN1cHBvcnRzQWxw
aGEpKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIHdpbGwgZmFsc2UgaWYgdGhlcmUgaXMgbm8gYXZh
aWxhYmxlIGJ1ZmZlciBzcGFjZS4KLSAgICAgICAgICAgIGlmIChhdGxhcy0+cGFpbnRPbkF2YWls
YWJsZUJ1ZmZlcihzaXplLCBhdGxhc0lELCBvZmZzZXQsIGNsaWVudCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50
IFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24gPSAxMDI0OyAvLyBTaG91bGQgYmUgYSBwb3dlciBvZiB0
d28uCi0gICAgbV91cGRhdGVBdGxhc2VzLmFwcGVuZChhZG9wdFB0cihuZXcgVXBkYXRlQXRsYXMo
dGhpcywgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiwgZmxhZ3MpKSk7Ci0gICAgc2NoZWR1bGVSZWxl
YXNlSW5hY3RpdmVBdGxhc2VzKCk7Ci0gICAgcmV0dXJuIG1fdXBkYXRlQXRsYXNlcy5sYXN0KCkt
PnBhaW50T25BdmFpbGFibGVCdWZmZXIoc2l6ZSwgYXRsYXNJRCwgb2Zmc2V0LCBjbGllbnQpOwot
fQotCi1jb25zdCBkb3VibGUgUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2YWwgPSAw
LjU7Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZVJlbGVhc2VJbmFj
dGl2ZUF0bGFzZXMoKQotewotICAgIGlmICghbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIu
aXNBY3RpdmUoKSkKLSAgICAgICAgbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIuc3RhcnRS
ZXBlYXRpbmcoUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2YWwpOwotfQotCi12b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmly
ZWQoVGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiopCi17Ci0gICAgLy8gV2UgYWx3YXlz
IHdhbnQgdG8ga2VlcCBvbmUgYXRsYXMgZm9yIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQuCi0gICAg
T3duUHRyPFVwZGF0ZUF0bGFzPiBhdGxhc1RvS2VlcEFueXdheTsKLSAgICBib29sIGZvdW5kQWN0
aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVudCA9IGZhbHNlOwotICAgIGZvciAoaW50IGkg
PSBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpIC0gMTsgIGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIFVw
ZGF0ZUF0bGFzKiBhdGxhcyA9IG1fdXBkYXRlQXRsYXNlc1tpXS5nZXQoKTsKLSAgICAgICAgaWYg
KCFhdGxhcy0+aXNJblVzZSgpKQotICAgICAgICAgICAgYXRsYXMtPmFkZFRpbWVJbmFjdGl2ZShS
ZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJJbnRlcnZhbCk7Ci0gICAgICAgIGJvb2wgdXNhYmxl
Rm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgPSAhYXRsYXMtPnN1cHBvcnRzQWxwaGEoKTsKLSAgICAg
ICAgaWYgKGF0bGFzLT5pc0luYWN0aXZlKCkpIHsKLSAgICAgICAgICAgIGlmICghZm91bmRBY3Rp
dmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ICYmICFhdGxhc1RvS2VlcEFueXdheSAmJiB1
c2FibGVGb3JOb25Db21wb3NpdGVkQ29udGVudCkKLSAgICAgICAgICAgICAgICBhdGxhc1RvS2Vl
cEFueXdheSA9IG1fdXBkYXRlQXRsYXNlc1tpXS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBtX3Vw
ZGF0ZUF0bGFzZXMucmVtb3ZlKGkpOwotICAgICAgICB9IGVsc2UgaWYgKHVzYWJsZUZvck5vbkNv
bXBvc2l0ZWRDb250ZW50KQotICAgICAgICAgICAgZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBv
c2l0ZWRDb250ZW50ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIWZvdW5kQWN0aXZlQXRsYXNG
b3JOb25Db21wb3NpdGVkQ29udGVudCAmJiBhdGxhc1RvS2VlcEFueXdheSkKLSAgICAgICAgbV91
cGRhdGVBdGxhc2VzLmFwcGVuZChhdGxhc1RvS2VlcEFueXdheS5yZWxlYXNlKCkpOwotCi0gICAg
aWYgKG1fdXBkYXRlQXRsYXNlcy5zaXplKCkgPD0gMSkKLSAgICAgICAgbV9yZWxlYXNlSW5hY3Rp
dmVBdGxhc2VzVGltZXIuc3RvcCgpOwotfQotCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikKIHsKICAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
OjpTZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IpKTsKQEAgLTcyNywxMSArNDEzLDcgQEAgdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3Jl
OjpDb2xvciYgY29sb3IpCiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpjb21taXRT
Y3JvbGxPZmZzZXQodWludDMyX3QgbGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgb2Zm
c2V0KQogewotICAgIExheWVyTWFwOjppdGVyYXRvciBpID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmZp
bmQobGF5ZXJJRCk7Ci0gICAgaWYgKGkgPT0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpLT52YWx1ZS0+Y29tbWl0U2Nyb2xsT2Zmc2V0KG9mZnNldCk7
CisgICAgbV9jb29yZGluYXRvci0+Y29tbWl0U2Nyb2xsT2Zmc2V0KGxheWVySUQsIG9mZnNldCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaAppbmRleCAxNDE0ZjQzZThmYjY3NTJh
YTc5ZTkwZGQzNDJmZmIxMmNjN2YzZmUyLi5lOGU1NjQ4ZTYzYTMxM2M2MGZiMDRhY2Q0NDYwNTgz
ZWM5NTNlNDNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZExheWVyVHJlZUhvc3QuaApAQCAtMjUsMTMgKzI1LDggQEAKIAogI2luY2x1ZGUgIkxheWVy
VHJlZUNvbnRleHQuaCIKICNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCi0jaW5jbHVkZSAiVGlt
ZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9Db29yZGluYXRlZEltYWdlQmFja2luZy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NMYXllckNsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29tcG9zaXRpbmdDb29yZGluYXRv
ci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckZhY3RvcnkuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL1VwZGF0ZUF0bGFzLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiAjaWYg
RU5BQkxFKENTU19TSEFERVJTKQpAQCAtNDYsMTEgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7
CiAKIGNsYXNzIFdlYlBhZ2U7CiAKLWNsYXNzIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCA6IHB1
YmxpYyBMYXllclRyZWVIb3N0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgLCBw
dWJsaWMgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgLCBwdWJs
aWMgV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNsaWVudAotICAgICwgcHVibGlj
IFdlYkNvcmU6OlVwZGF0ZUF0bGFzOjpDbGllbnQKLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpHcmFw
aGljc0xheWVyRmFjdG9yeQorY2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IDogcHVibGlj
IExheWVyVHJlZUhvc3QsIHB1YmxpYyBXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpD
bGllbnQKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAgICAgLCBXZWJDdXN0b21GaWx0ZXJQcm9n
cmFtUHJveHlDbGllbnQKICNlbmRpZgpAQCAtODQsOSArNzUsNiBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpIE9WRVJSSURFOwogICAg
IHZpcnR1YWwgdm9pZCBwYWdlQmFja2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5nZWQoKSBPVkVSUklE
RTsKIAotICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250
ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXIm
KTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFwaGljc0xh
eWVyRmFjdG9yeSgpIE9WRVJSSURFOwogICAgIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllciogbWFpbkNvbnRlbnRzTGF5ZXIoKTsKQEAgLTk4LDYwICs4NiwzMSBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U+IGNyZWF0
ZUNvb3JkaW5hdGVkU3VyZmFjZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViQ29yZTo6Q29v
cmRpbmF0ZWRTdXJmYWNlOjpGbGFncyk7CiAKLSAgICB2b2lkIGNvbW1pdFNjcm9sbE9mZnNldCh1
aW50MzJfdCBsYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBvZmZzZXQpOwotCiBwcm90
ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KFdlYlBhZ2UqKTsK
IAogcHJpdmF0ZToKLSAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lk
IG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRv
dWJsZSB0aW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMo
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYs
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBjbGlwUmVjdCk7Ci0gICAgdmlydHVhbCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNv
bnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yKCkgY29uc3Qg
T1ZFUlJJREU7Ci0KLSAgICAvLyBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q2xpZW50Ci0gICAg
dmlydHVhbCB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5n
KFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6
Q29vcmRpbmF0ZWRTdXJmYWNlPikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFySW1h
Z2VCYWNraW5nQ29udGVudHMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhXZWJDb3JlOjpDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKLQotICAgIHZvaWQgZmx1c2hQZW5kaW5n
SW1hZ2VCYWNraW5nQ2hhbmdlcygpOwotCi0gICAgLy8gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Q2xpZW50Ci0gICAgdmlydHVhbCBib29sIGlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXM7IH0KLSAgICB2aXJ0dWFs
IFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGVJ
bWFnZUJhY2tpbmdJZk5lZWRlZChXZWJDb3JlOjpJbWFnZSopIE9WRVJSSURFOwotICAgIHZpcnR1
YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKTsK
LSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUb1N1cmZhY2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYs
IFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiAvKiBhdGxhc0lE
ICovLCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZTo6Q2xp
ZW50KikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKFdlYkNvcmU6
OkNvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3Rh
dGUmKTsKLQotICAgIC8vIFVwZGF0ZUF0bGFzOjpDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgY3Jl
YXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29y
ZGluYXRlZFN1cmZhY2U+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVXBkYXRl
QXRsYXModWludDMyX3QgYXRsYXNJRCkgT1ZFUlJJREU7Ci0KLSAgICAvLyBHcmFwaGljc0xheWVy
RmFjdG9yeQotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBj
cmVhdGVHcmFwaGljc0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQqKSBPVkVSUklE
RTsKLQogICAgIC8vIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdAotICAgIHZvaWQgaW5pdGlhbGl6
ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQoKTsKICAgICB2b2lkIGNyZWF0ZVBhZ2VPdmVy
bGF5TGF5ZXIoKTsKICAgICB2b2lkIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7Ci0gICAgYm9v
bCBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKLSAgICB2b2lkIGNsZWFyUGVuZGluZ1N0YXRl
Q2hhbmdlcygpOwogICAgIHZvaWQgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKICAgICB2b2lk
IHBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7Ci0gICAgdm9pZCBkaWRQZXJmb3JtU2NoZWR1
bGVkTGF5ZXJGbHVzaCgpOwotICAgIHZvaWQgc3luY0Rpc3BsYXlTdGF0ZSgpOwotICAgIHZvaWQg
bGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0PiopOworICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CisgICAgdm9pZCByZW5kZXJO
ZXh0RnJhbWUoKTsKKyAgICB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOworICAgIHZvaWQgY29t
bWl0U2Nyb2xsT2Zmc2V0KHVpbnQzMl90IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IG9mZnNldCk7CiAKLSAgICB2b2lkIHNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpOwor
ICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8Q29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0PiopOwogCi0gICAgdm9pZCByZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJG
aXJlZChXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+Kik7CisgICAgLy8g
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q2xpZW50CisgICAgdmlydHVhbCB2b2lkIGRpZEZsdXNo
Um9vdExheWVyKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHdpbGxTeW5jTGF5ZXJTdGF0
ZShXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKCkgT1ZFUlJJREUgeyBzY2hlZHVsZUxh
eWVyRmx1c2goKTsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0U2NlbmVTdGF0ZShXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCkgT1ZF
UlJJREU7CiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgdm9pZCBwcmVwYXJlQ3VzdG9t
RmlsdGVyUHJveGllc0lmTmVlZGVkKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0
YXRlJik7CisgICAgdm9pZCBwcmVwYXJlQ3VzdG9tRmlsdGVyUHJveGllc0ZvckFuaW1hdGlvbnMo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKIAogICAgIC8vIFdlYkN1c3RvbUZp
bHRlclByb2dyYW1Qcm94eUNsaWVudAogICAgIHZvaWQgcmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3Jh
bVByb3h5KFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSopOwpAQCAtMTYwLDQ3ICsxMTksMjYg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGRpc2Nvbm5lY3RDdXN0b21GaWx0ZXJQcm9ncmFtcygpOwog
I2VuZGlmCiAKLSAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7
Ci0gICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbV9yb290Q29tcG9zaXRpbmdMYXllcjsKKyAg
ICBPd25QdHI8V2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGluYXRvcj4gbV9jb29yZGluYXRvcjsK
IAogICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUgbnVsbCBpZiB0aGVyZSdz
IG5vIHBhZ2Ugb3ZlcmxheS4KICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9w
YWdlT3ZlcmxheUxheWVyOwogICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gbV9wYWdlT3ZlcmxheTsK
IAotICAgIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSBtX3N0YXRlOwotCi0gICAg
dHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyKj4gTGF5ZXJNYXA7Ci0gICAgTGF5ZXJNYXAgbV9yZWdpc3Rl
cmVkTGF5ZXJzOwotICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJDb3JlOjpDb29yZGluYXRlZEltYWdl
QmFja2luZ0lELCBSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+ID4gSW1h
Z2VCYWNraW5nTWFwOwotICAgIEltYWdlQmFja2luZ01hcCBtX2ltYWdlQmFja2luZ3M7Ci0gICAg
VmVjdG9yPE93blB0cjxXZWJDb3JlOjpVcGRhdGVBdGxhcz4gPiBtX3VwZGF0ZUF0bGFzZXM7Ci0K
ICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAgICAgSGFzaFNldDxXZWJDdXN0b21GaWx0ZXJQcm9n
cmFtUHJveHkqPiBtX2N1c3RvbUZpbHRlclByb2dyYW1zOwogI2VuZGlmCiAKICAgICBib29sIG1f
bm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOwogICAgIGJvb2wgbV9pc1ZhbGlkOwotICAg
IC8vIFdlIGRvbid0IHNlbmQgdGhlIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gcmVsZWFzaW5nIHJlc291
cmNlcyB0byBVSSBQcm9jZXNzIGR1cmluZyBwdXJnaW5nLCBiZWNhdXNlIFVJIFByb2Nlc3MgYWxy
ZWFkeSBoYWQgcmVtb3ZlZCBhbGwgcmVzb3VyY2VzLgotICAgIGJvb2wgbV9pc1B1cmdpbmc7Ci0g
ICAgYm9vbCBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXM7Ci0KLSAgICBib29sIG1fd2FpdGluZ0Zv
clVJUHJvY2VzczsKICAgICBib29sIG1faXNTdXNwZW5kZWQ7Ci0gICAgV2ViQ29yZTo6RmxvYXRS
ZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICBib29sIG1faXNXYWl0aW5nRm9yUmVuZGVy
ZXI7CiAKICAgICBMYXllclRyZWVDb250ZXh0IG1fbGF5ZXJUcmVlQ29udGV4dDsKLSAgICBib29s
IG1fc2hvdWxkU3luY0ZyYW1lOwotICAgIGJvb2wgbV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0
aW5nTGF5ZXI7CisKICAgICBXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+
IG1fbGF5ZXJGbHVzaFRpbWVyOwotICAgIFdlYkNvcmU6OlRpbWVyPENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdD4gbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXI7CiAgICAgYm9vbCBtX2xheWVy
Rmx1c2hTY2hlZHVsaW5nRW5hYmxlZDsKICAgICB1aW50NjRfdCBtX2ZvcmNlUmVwYWludEFzeW5j
Q2FsbGJhY2tJRDsKLSAgICBib29sIG1fYW5pbWF0aW9uc0xvY2tlZDsKLQotI2lmIEVOQUJMRShS
RVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICBkb3VibGUgbV9sYXN0QW5pbWF0aW9uU2Vydmlj
ZVRpbWU7Ci0jZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgKaW5kZXggOTBiYmI5
NDFkMWFiMDU2ODFmOTZhMjE0MDJjZjkzNDgxYjMyNzc3ZC4uMmZhZDJkMTNjZjI1ZDgzNmVjZmFi
YTNhYmZlNmFmODk4MDI0MGEyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCkBAIC04Nyw5ICs4Nyw2IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgeyB9
CiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgdmlydHVhbCB2b2lkIHNldFZp
c2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQgLyogc2Nh
bGUgKi8sIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
cmVuZGVyTmV4dEZyYW1lKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHB1cmdlQmFja2luZ1N0b3Jl
cygpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXIm
KSA9IDA7CiAjZW5kaWYKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>