<?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>58683</bug_id>
          
          <creation_ts>2011-04-15 12:55:23 -0700</creation_ts>
          <short_desc>[Chromium] Expose skia gpu canvas rendering as a runtime flag</short_desc>
          <delta_ts>2011-04-26 22:30:54 -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>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Justin Novosad">junov</reporter>
          <assigned_to name="Justin Novosad">junov</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>kbr</cc>
    
    <cc>reed</cc>
    
    <cc>senorblanco</cc>
    
    <cc>vangelis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>386847</commentid>
    <comment_count>0</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2011-04-15 12:55:23 -0700</bug_when>
    <thetext>Instead of the SKIA_GPU build time flag, we should use the acceleratedDrawinEnabled setting to control whether the 2D canvas is rendered using the skia GPU accelerated path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388814</commentid>
    <comment_count>1</comment_count>
      <attachid>90259</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2011-04-19 14:51:58 -0700</bug_when>
    <thetext>Created attachment 90259
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388815</commentid>
    <comment_count>2</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2011-04-19 14:54:50 -0700</bug_when>
    <thetext>To the reviewer: this patch will break the chromium canary build on mac if it is submitted before skia rev 1151 is rolled-in to Chromium.  So do not put this in the commit queue right away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388892</commentid>
    <comment_count>3</comment_count>
      <attachid>90259</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-04-19 16:23:13 -0700</bug_when>
    <thetext>Comment on attachment 90259
Patch

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

It&apos;s unfortunate that the early warning system bots can&apos;t test the Chromium Mac build, but you need to test your patch there manually. I can guarantee that it won&apos;t currently compile.

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp:542
&gt; +    if (isAccelerated() &amp;&amp; op != CompositeSourceOver &amp;&amp; !(m_context3D.get() &amp;&amp; m_context3D-&gt;grContext())) {

The test of SharedGraphicsContext3D::grContext() doesn&apos;t belong in the platform-independent code; or, if it is here, it needs to be guarded with a platform guard like USE(SKIA).

&gt; Source/WebCore/platform/graphics/gpu/SharedGraphicsContext3D.cpp:45
&gt; +#include &quot;GrContext.h&quot;

You can&apos;t uniformly include this header on all platforms. Any port using this class but not Skia won&apos;t compile any more.

&gt; Source/WebCore/platform/graphics/gpu/SharedGraphicsContext3D.cpp:65
&gt; +PassRefPtr&lt;SharedGraphicsContext3D&gt; SharedGraphicsContext3D::create(Page* page)

I am pretty sure that this change introduces an abstraction violation that is not allowed. The rule in WebKit is that the DOM and HTML layers can refer to classes in platform/, but not vice versa. I am 99% sure that page/Page, though it isn&apos;t strictly a DOM element, is considered part of the higher level layers. I think you&apos;ll need to figure out a different way to pass down the acceleratedDrawingEnabled() setting on the Page.

&gt; Source/WebCore/platform/graphics/gpu/SharedGraphicsContext3D.cpp:124
&gt; -#if ENABLE(SKIA_GPU)
&gt; +#if ENABLE(ACCELERATED_2D_CANVAS)

This code needs to still be guarded with e.g. #if USE(SKIA).

&gt; Source/WebCore/platform/graphics/gpu/SharedGraphicsContext3D.cpp:471
&gt; -#if ENABLE(SKIA_GPU)
&gt; +#if ENABLE(ACCELERATED_2D_CANVAS)

Same here.

&gt; Source/WebCore/platform/graphics/gpu/SharedGraphicsContext3D.h:46
&gt; -#if ENABLE(SKIA_GPU)
&gt; +#if ENABLE(ACCELERATED_2D_CANVAS)

I think this should be guarded with #if USE(SKIA).

&gt; Source/WebCore/platform/graphics/gpu/SharedGraphicsContext3D.h:143
&gt; -#if ENABLE(SKIA_GPU)
&gt; +#if ENABLE(ACCELERATED_2D_CANVAS)

Same here.

&gt; Source/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp:247
&gt; +    if (platformContext()-&gt;accelerationMode() == PlatformContextSkia::GPU)

This boilerplate copy/paste seems fragile to me. I think adding a helper method would improve maintainability.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389222</commentid>
    <comment_count>4</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2011-04-20 07:46:32 -0700</bug_when>
    <thetext>
&gt; It&apos;s unfortunate that the early warning system bots can&apos;t test the Chromium Mac build, but you need to test your patch there manually. I can guarantee that it won&apos;t currently compile.
&gt; 

I&apos;m not sure I understand.  Test what manually? I ran the chromium mac and mac_layout_rel try bots with this change and they came back clean. Is there something that would break a manual build that would not break a tryserver build?I used the sub_rep flag to also pick-up the skia change that is required for this to link on mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389236</commentid>
    <comment_count>5</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2011-04-20 08:20:50 -0700</bug_when>
    <thetext>&gt; The test of SharedGraphicsContext3D::grContext() doesn&apos;t belong in the platform-independent code; or, if it is here, it needs to be guarded with a platform guard like USE(SKIA).

My intent was to guard the Ganesh code with ENABLE(ACCELERATED_2D_CANVAS) as a platform guard, based on the assumption that Ganesh is available on all platforms that support the accelerated canvas.  Even though the mac builds of chromium do not use skia for rendering, they still link against skia (not sure why, but they do), so Ganesh is available.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389253</commentid>
    <comment_count>6</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-04-20 08:45:47 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; The test of SharedGraphicsContext3D::grContext() doesn&apos;t belong in the platform-independent code; or, if it is here, it needs to be guarded with a platform guard like USE(SKIA).
&gt; 
&gt; My intent was to guard the Ganesh code with ENABLE(ACCELERATED_2D_CANVAS) as a platform guard, based on the assumption that Ganesh is available on all platforms that support the accelerated canvas.  Even though the mac builds of chromium do not use skia for rendering, they still link against skia (not sure why, but they do), so Ganesh is available.

I think Ken&apos;s right:  if you&apos;re making ganesh-specific calls, USE(SKIA) is the correct guard.  This means we&apos;re compiling and linking against Skia, which now implies Ganesh.  There&apos;s nothing specific to accelerated canvas about this code, so it would be misleading to use that as a guard.

OTOH, if you want to avoid making Ganesh-specific call here, perhaps we could have a &quot;supportsCompositingOperation(op)&quot; check to SharedGraphicsContext3D, and return true always for Ganesh.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389258</commentid>
    <comment_count>7</comment_count>
      <attachid>90259</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-04-20 08:55:08 -0700</bug_when>
    <thetext>Comment on attachment 90259
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp:39
&gt; +#if ENABLE(ACCELERATED_2D_CANVAS)

These should also probably be USE(SKIA).  There&apos;s nothing accelerated-canvas-specific about this code, but it is skia-specific.

&gt; Source/WebCore/platform/graphics/gpu/SharedGraphicsContext3D.cpp:48
&gt; +#include &quot;Page.h&quot;

This is definitely a layering violation.  We&apos;ll have to find some other way of doing this.

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:60
&gt; +#include &quot;GrContext.h&quot;

This, and SkGpu* below, should probably be broken out into their own #if USE(SKIA) clause.

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.h:187
&gt; +    bool accelerationMode() { return m_accelerationMode; }

Should this still be a bool?  Looks like it should be an AccelerationMode.

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.h:230
&gt; +    unsigned m_accelerationMode;

Is it a bool, is it an unsigned?  No, it&apos;s a SuperAccelerationMode!  ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390030</commentid>
    <comment_count>8</comment_count>
      <attachid>90533</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2011-04-21 08:07:51 -0700</bug_when>
    <thetext>Created attachment 90533
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390147</commentid>
    <comment_count>9</comment_count>
      <attachid>90533</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-04-21 10:45:49 -0700</bug_when>
    <thetext>Comment on attachment 90533
Patch

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

Stephen, could you do the unofficial review of this patch? One comment.

&gt; Source/WebCore/platform/graphics/gpu/SharedGraphicsContext3D.cpp:65
&gt; +PassRefPtr&lt;SharedGraphicsContext3D&gt; SharedGraphicsContext3D::create(HostWindow* hostWindow, bool useSkiaGpu)

It&apos;s generally frowned upon in WebKit to add various bool arguments to methods and constructors, because it makes the call sites less descriptive. Also, conditionalizing the signature of this method is really gross. Would it be possible to reuse the AccelerationMode enum from below, and make the decision at the call site which value to pass?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390160</commentid>
    <comment_count>10</comment_count>
      <attachid>90533</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-04-21 10:57:37 -0700</bug_when>
    <thetext>Comment on attachment 90533
Patch

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

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp:544
&gt; +        &amp;&amp; !(m_context3D.get() &amp;&amp; m_context3D-&gt;grContext())

Sorry to be a pain, but I think I would prefer the other option I suggested here:  make a supportsCompositeOperation() on SharedGraphicsContext3D, and return true always for Ganesh, and op == CompositeSourceOver for the current path.  Then we don&apos;t have to have anything Ganesh-specific in this file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390163</commentid>
    <comment_count>11</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2011-04-21 11:01:07 -0700</bug_when>
    <thetext>&gt;  Would it be possible to reuse the AccelerationMode enum from below, and make the decision at the call site which value to pass?

That would mean adding this to Page.cpp:
#if USE(SKIA)
#include &quot;PlatformContextSkia.h&quot;
#endif

I think the cleaner option is to a have a separate, dedicated enum in SGC3D, for creation flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390167</commentid>
    <comment_count>12</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-04-21 11:11:22 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt;  Would it be possible to reuse the AccelerationMode enum from below, and make the decision at the call site which value to pass?
&gt; 
&gt; That would mean adding this to Page.cpp:
&gt; #if USE(SKIA)
&gt; #include &quot;PlatformContextSkia.h&quot;
&gt; #endif
&gt; 
&gt; I think the cleaner option is to a have a separate, dedicated enum in SGC3D, for creation flags.

My thought would be to move the AccelerationMode enum into SGC3D.h and reference it from wherever necessary, reusing it in PlatformContextSkia.h (which already seems to have a dependency on SGC3D.h).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390286</commentid>
    <comment_count>13</comment_count>
      <attachid>90588</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2011-04-21 13:31:47 -0700</bug_when>
    <thetext>Created attachment 90588
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390290</commentid>
    <comment_count>14</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2011-04-21 13:36:25 -0700</bug_when>
    <thetext>
&gt; My thought would be to move the AccelerationMode enum into SGC3D.h and reference it from wherever necessary, reusing it in PlatformContextSkia.h (which already seems to have a dependency on SGC3D.h).

D&apos;Oh! I just read that right after uploading the latest patch. I promise I am not being stubborn on purpose. :-))</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390310</commentid>
    <comment_count>15</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-04-21 13:49:20 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; &gt;  Would it be possible to reuse the AccelerationMode enum from below, and make the decision at the call site which value to pass?
&gt; &gt; 
&gt; &gt; That would mean adding this to Page.cpp:
&gt; &gt; #if USE(SKIA)
&gt; &gt; #include &quot;PlatformContextSkia.h&quot;
&gt; &gt; #endif
&gt; &gt; 
&gt; &gt; I think the cleaner option is to a have a separate, dedicated enum in SGC3D, for creation flags.
&gt; 
&gt; My thought would be to move the AccelerationMode enum into SGC3D.h and reference it from wherever necessary, reusing it in PlatformContextSkia.h (which already seems to have a dependency on SGC3D.h).

We discussed this, and my thought was that:

1)  we only really need a boolean, since the &quot;None&quot; state doesn&apos;t really mean anything here (it&apos;s always accelerated)
2)  we might want to add other SGC3D creation flags later, so we need or-able flags, not a 3-way</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390359</commentid>
    <comment_count>16</comment_count>
      <attachid>90588</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-04-21 14:53:06 -0700</bug_when>
    <thetext>Comment on attachment 90588
Patch

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

&gt; Source/WebCore/platform/graphics/gpu/SharedGraphicsContext3D.h:72
&gt; +#endif

Is it possible to name this enum, have a Skia-specific bit as its only value, and reference that type instead of &quot;unsigned&quot; in the constructor?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390549</commentid>
    <comment_count>17</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2011-04-21 19:26:09 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 90588 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=90588&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gpu/SharedGraphicsContext3D.h:72
&gt; &gt; +#endif
&gt; 
&gt; Is it possible to name this enum, have a Skia-specific bit as its only value, and reference that type instead of &quot;unsigned&quot; in the constructor?

That is technically possible, but it is not clean IMHO.  Two bit flags OR-ed together gives an integer that does not necessarily map to a member of the flag enum. You can still force the flags into the enum type, but you have to violate type safety by using a C-style cast or a static_cast.  Is that how we do it in WebKit?  Nothing in the coding guidelines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390560</commentid>
    <comment_count>18</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-04-21 19:56:13 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; (From update of attachment 90588 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=90588&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/gpu/SharedGraphicsContext3D.h:72
&gt; &gt; &gt; +#endif
&gt; &gt; 
&gt; &gt; Is it possible to name this enum, have a Skia-specific bit as its only value, and reference that type instead of &quot;unsigned&quot; in the constructor?
&gt; 
&gt; That is technically possible, but it is not clean IMHO.  Two bit flags OR-ed together gives an integer that does not necessarily map to a member of the flag enum. You can still force the flags into the enum type, but you have to violate type safety by using a C-style cast or a static_cast.  Is that how we do it in WebKit?  Nothing in the coding guidelines.

I wasn&apos;t sure, but a search through the code base turned up GraphicsContext::TextDrawingMode and the typedef of TextDrawingModeFlags as one way to handle it. You&apos;re right, it needs to bottom out as an integer type, but we can at least add a typedef to distinguish it from a random int.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392609</commentid>
    <comment_count>19</comment_count>
      <attachid>91135</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2011-04-26 11:54:15 -0700</bug_when>
    <thetext>Created attachment 91135
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392790</commentid>
    <comment_count>20</comment_count>
      <attachid>91171</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2011-04-26 15:12:09 -0700</bug_when>
    <thetext>Created attachment 91171
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392977</commentid>
    <comment_count>21</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-04-26 16:20:34 -0700</bug_when>
    <thetext>I&apos;ll re-review this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393133</commentid>
    <comment_count>22</comment_count>
      <attachid>91171</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-04-26 17:05:11 -0700</bug_when>
    <thetext>Comment on attachment 91171
Patch

Looks good. Thanks for that final cleanup and bearing with the long review process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393356</commentid>
    <comment_count>23</comment_count>
      <attachid>91171</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-26 22:30:47 -0700</bug_when>
    <thetext>Comment on attachment 91171
Patch

Clearing flags on attachment: 91171

Committed r85017: &lt;http://trac.webkit.org/changeset/85017&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393357</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-26 22:30:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90259</attachid>
            <date>2011-04-19 14:51:58 -0700</date>
            <delta_ts>2011-04-21 08:07:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58683-20110419175157.patch</filename>
            <type>text/plain</type>
            <size>32409</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0Mjg1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzAgQEAKKzIwMTEtMDQtMTkgIEp1c3RpbiBO
b3Zvc2FkICA8anVub3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtDaHJvbWl1bV0gRXhwb3NlIHNraWEgZ3B1IGNhbnZhcyBy
ZW5kZXJpbmcgYXMgYSBydW50aW1lIGZsYWcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU4NjgzCisgICAgICAgIHJlcGxhY2UgdGhlIFNLSUFfR1BVIGNv
bXBpbGUgZmxhZyBieSB0aGUgcHJlLWV4aXN0aW5nCisgICAgICAgIGFjY2VsZXJhdGVkRHJhd2lu
Z0VuYWJsZWQgZmxhZy4gTW9zdCBjb2RlIGNoYW5nZXMgYXJlIHRyaXZpYWw6CisgICAgICAgIGNv
bXBpbGUtdGltZSBjb25kaXRpb25hbHMgb24gU0tJQV9HUFUgd2VyZSBlaXRoZXIgcmVwbGFjZWQg
d2l0aAorICAgICAgICBhIHJ1bi10aW1lIGNoZWNrLCBvciBhIGNoZWNrIG9uIEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUyAKKworICAgICAgICBObyBuZXcgdGVzdHMuIENvdmVyZWQgYnkgZXhpc3Rpbmcg
bGF5b3V0IHRlc3RzCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlOjpzaGFyZWRHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAg
IE1ldGhvZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlIG5vIHJlY2VpdmVzIGEgcGFn
ZQorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnB1Ymxpc2hUb1BsYXRmb3JtTGF5
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUpOgor
ICAgICAgICBtZXRob2QgYXJndW1lbnQgaXMgbm93IGEgV2ViQ29yZTo6UGFnZSByYXRoZXIgdGhh
biBhIEhvc3RXaW5kb3cuCisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQz
RDo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICBDb25zdHJ1Y3RvciBub3cgcmVj
ZWl2ZXMgYSBwYWdlIGFyZ3VtZW50LCBhbGxvd2luZyBpdCB0byBxdWVyeQorICAgICAgICBmbGFn
cyBzdG9yZWQgaW4gdGhlIHNldHRpbmdzLiBUaGUgYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCBm
bGFnCisgICAgICAgIGlzIHJlYWQuCisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0Nv
bnRleHQzRDo6flNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZEdyYXBoaWNzQ29udGV4dDNEOjpnckNvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpjYW52YXNDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNj
YWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0QWxwaGEpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmls
bENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1T
aGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0ltYWdlU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6ZHJhdyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29udGV4dFNraWEp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6flBsYXRmb3JtQ29udGV4
dFNraWEpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6aXNOYXRpdmVG
b250UmVuZGVyaW5nQWxsb3dlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRT
a2lhOjpzZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUNvbnRleHRTa2lhOjpwcmVwYXJlRm9yU29mdHdhcmVEcmF3KToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnByZXBhcmVGb3JIYXJkd2FyZURyYXcpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6c3luY1NvZnR3YXJlQ2FudmFzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6Om1hcmtEaXJ0eVJlY3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6YWNjZWxlcmF0aW9uTW9kZSk6CisK
IDIwMTEtMDQtMTkgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAg
ICA8aHR0cDovL3dlYmtpdC5vcmcvYi81Nzg2Nz4gUmUtb3JkZXIgZW51bSBSZXNvdXJjZUxvYWRQ
cmlvcml0eSB0byBtYWtlIFVucmVzb2x2ZWQgdmFsdWUgbGVzcyBpbXBvcnRhbnQKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcAkocmV2aXNpb24gODQyODMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzgsOCAr
NTM4LDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEdsb2JhbAogICAgIGlm
ICghYykKICAgICAgICAgcmV0dXJuOwogICAgIGMtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCk7
Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgIUVOQUJMRShTS0lBX0dQVSkK
LSAgICBpZiAoaXNBY2NlbGVyYXRlZCgpICYmIG9wICE9IENvbXBvc2l0ZVNvdXJjZU92ZXIpIHsK
KyNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorICAgIGlmIChpc0FjY2VsZXJhdGVk
KCkgJiYgb3AgIT0gQ29tcG9zaXRlU291cmNlT3ZlciAmJiAhKG1fY29udGV4dDNELmdldCgpICYm
IG1fY29udGV4dDNELT5nckNvbnRleHQoKSkpIHsKICAgICAgICAgYy0+c2V0U2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0QoMCwgMCwgSW50U2l6ZSgpKTsKICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLmNs
ZWFyKCk7CiAgICAgICAgIG1fY29udGV4dDNELmNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5j
cHAJKHJldmlzaW9uIDg0MDMzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzUzLDcgKzc1Myw3IEBAIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBQ
YWdlOjpzaGFyZWRHcmEKIHsKICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAg
IGlmICghbV9zaGFyZWRHcmFwaGljc0NvbnRleHQzRCkKLSAgICAgICAgbV9zaGFyZWRHcmFwaGlj
c0NvbnRleHQzRCA9IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoY2hyb21lKCkpOwor
ICAgICAgICBtX3NoYXJlZEdyYXBoaWNzQ29udGV4dDNEID0gU2hhcmVkR3JhcGhpY3NDb250ZXh0
M0Q6OmNyZWF0ZSh0aGlzKTsKIAogICAgIHJldHVybiBtX3NoYXJlZEdyYXBoaWNzQ29udGV4dDNE
LmdldCgpOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNw
cAkocmV2aXNpb24gODQyODMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3
ICszNiw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRC5oIgogCi0jaWYgRU5BQkxFKFNLSUFfR1BVKQorI2lmIEVOQUJM
RShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAjaW5jbHVkZSAiR3JDb250ZXh0LmgiCiAjZW5kaWYK
IApAQCAtODcsNyArODcsNyBAQCBEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKEdyYXBoaWNz
Q29uCiAgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxlQ29sb3JC
dWZmZXIoMCkKICAgICAsIG1faW50ZXJuYWwobmV3IERyYXdpbmdCdWZmZXJJbnRlcm5hbCkKLSNp
ZiBFTkFCTEUoU0tJQV9HUFUpCisjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAg
ICAsIG1fZ3JDb250ZXh0KDApCiAjZW5kaWYKIHsKQEAgLTEzNSw3ICsxMzUsNyBAQCB2b2lkIERy
YXdpbmdCdWZmZXI6OnB1Ymxpc2hUb1BsYXRmb3JtTGF5CiAgICAgLy8gaGFwcGVucyBiZWZvcmUg
dGhlIGNvbXBvc2l0b3IgZHJhd3MuICBUaGlzIG1lYW5zIHdlIG1pZ2h0IGRyYXcgc3RhbGUgZnJh
bWVzIHNvbWV0aW1lcy4gIElkZWFsbHkgdGhpcwogICAgIC8vIHdvdWxkIGluc2VydCBhIGZlbmNl
IGludG8gdGhlIGNoaWxkIGNvbW1hbmQgc3RyZWFtIHRoYXQgdGhlIGNvbXBvc2l0b3IgY291bGQg
d2FpdCBmb3IuCiAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNpZiBFTkFC
TEUoU0tJQV9HUFUpCisjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBpZiAo
bV9nckNvbnRleHQpCiAgICAgICAgIG1fZ3JDb250ZXh0LT5mbHVzaCgwKTsKICNlbmRpZgpAQCAt
MTY2LDcgKzE2Niw3IEBAIFBsYXRmb3JtM0RPYmplY3QgRHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm0K
ICAgICByZXR1cm4gbV9jb2xvckJ1ZmZlcjsKIH0KIAotI2lmIEVOQUJMRShTS0lBX0dQVSkKKyNp
ZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogdm9pZCBEcmF3aW5nQnVmZmVyOjpzZXRH
ckNvbnRleHQoR3JDb250ZXh0KiBjb250ZXh0KQogewogICAgIC8vIFdlIGp1c3QgdGFrZSBhIHB0
ciB3aXRob3V0IHJlZmVyZW5jaW5nIGl0LCBhcyB3ZSByZXF1aXJlIHRoYXQgd2UgbmV2ZXIgb3V0
bGl2ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdC
dWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvRHJhd2luZ0J1ZmZlci5oCShyZXZpc2lvbiA4NDI4MykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDcgKzQyLDcgQEAKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjZW5kaWYKIAotI2lmIEVO
QUJMRShTS0lBX0dQVSkKKyNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogY2xhc3Mg
R3JDb250ZXh0Owogc3RydWN0IEdyUGxhdGZvcm1TdXJmYWNlRGVzYzsKICNlbmRpZgpAQCAtMTAz
LDcgKzEwMyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFdpbGxQdWJsaXNoQ2FsbGJhY2soUGFz
c093blB0cjxXaWxsUHVibGlzaENhbGxiYWNrPiBjYWxsYmFjaykgeyBtX2NhbGxiYWNrID0gY2Fs
bGJhY2s7IH0KICNlbmRpZgogCi0jaWYgRU5BQkxFKFNLSUFfR1BVKQorI2lmIEVOQUJMRShBQ0NF
TEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgdm9pZCBzZXRHckNvbnRleHQoR3JDb250ZXh0KiBjdHgp
OwogICAgIHZvaWQgZ2V0R3JQbGF0Zm9ybVN1cmZhY2VEZXNjKEdyUGxhdGZvcm1TdXJmYWNlRGVz
YyopOwogI2VuZGlmCkBAIC0xNDUsNyArMTQ1LDcgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8
V2ViR0xMYXllcj4gbV9wbGF0Zm9ybUxheWVyOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoU0tJQV9H
UFUpCisjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBHckNvbnRleHQqIG1f
Z3JDb250ZXh0OwogI2VuZGlmCiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Qu
Y3BwCShyZXZpc2lvbiA4NDAzMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDIz
ICszNiwyNCBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQmlj
dWJpY1NoYWRlci5oIgorI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAj
aW5jbHVkZSAiQ29udm9sdXRpb25TaGFkZXIuaCIKICNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgi
CiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSAiR3JDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIkxvb3BC
bGlublNvbGlkRmlsbFNoYWRlci5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTZXR0
aW5ncy5oIgogI2luY2x1ZGUgIlNvbGlkRmlsbFNoYWRlci5oIgogI2luY2x1ZGUgIlRleFNoYWRl
ci5oIgogCi0jaWYgRU5BQkxFKFNLSUFfR1BVKQotI2luY2x1ZGUgIkdyQ29udGV4dC5oIgogLy8g
TGltaXQgdGhlIG51bWJlciBvZiB0ZXh0dXJlcyB3ZSBob2xkIGluIHRoZSBiaXRtYXAtPnRleHR1
cmUgY2FjaGUuCiBzdGF0aWMgY29uc3QgaW50IG1heFRleHR1cmVDYWNoZUNvdW50ID0gNTEyOwog
Ly8gTGltaXQgdGhlIGJ5dGVzIGFsbG9jYXRlZCB0b3dhcmQgdGV4dHVyZXMgaW4gdGhlIGJpdG1h
cC0+dGV4dHVyZSBjYWNoZS4KIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4VGV4dHVyZUNhY2hlQnl0
ZXMgPSA1MCAqIDEwMjQgKiAxMDI0OwotI2VuZGlmCiAKICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC02MSwxMyArNjIsMTQgQEAg
c3RhdGljIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlQ2FjaGVCeXRlcwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAvLyBzdGF0aWMKLVBhc3NSZWZQdHI8U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q+IFNo
YXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK1Bh
c3NSZWZQdHI8U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q+IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGUoUGFnZSogcGFnZSkKIHsKICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cyBhdHRyOwogICAgIGF0dHIuZGVwdGggPSBmYWxzZTsKICAgICBhdHRyLnN0ZW5jaWwgPSB0cnVl
OwogICAgIGF0dHIuYW50aWFsaWFzID0gdXNlTG9vcEJsaW5uRm9yUGF0aFJlbmRlcmluZygpOwog
ICAgIGF0dHIuY2FuUmVjb3ZlckZyb21Db250ZXh0TG9zcyA9IGZhbHNlOyAvLyBDYW52YXMgY29u
dGV4dHMgY2FuIG5vdCBoYW5kbGUgbG9zdCBjb250ZXh0cy4KKyAgICBIb3N0V2luZG93KiBob3N0
V2luZG93ID0gcGFnZS0+Y2hyb21lKCk7CiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBj
b250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShhdHRyLCBob3N0V2luZG93KTsKICAg
ICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiAwOwpAQCAtODYsMTAgKzg4LDEwIEBAIFBh
c3NSZWZQdHI8U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q+IFNoYXIKICAgICAgICAgaWYgKCFjb252
b2x1dGlvblNoYWRlcnNbaV0pCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRChjb250ZXh0LnJlbGVhc2Uo
KSwgc29saWRGaWxsU2hhZGVyLnJlbGVhc2UoKSwgdGV4U2hhZGVyLnJlbGVhc2UoKSwgYmljdWJp
Y1NoYWRlci5yZWxlYXNlKCksIGNvbnZvbHV0aW9uU2hhZGVycy5yZWxlYXNlKCkpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKGNvbnRleHQucmVsZWFz
ZSgpLCBzb2xpZEZpbGxTaGFkZXIucmVsZWFzZSgpLCB0ZXhTaGFkZXIucmVsZWFzZSgpLCBiaWN1
YmljU2hhZGVyLnJlbGVhc2UoKSwgY29udm9sdXRpb25TaGFkZXJzLnJlbGVhc2UoKSwgcGFnZSkp
OwogfQogCi1TaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Qo
UGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwgUGFzc093blB0cjxTb2xpZEZp
bGxTaGFkZXI+IHNvbGlkRmlsbFNoYWRlciwgUGFzc093blB0cjxUZXhTaGFkZXI+IHRleFNoYWRl
ciwgUGFzc093blB0cjxCaWN1YmljU2hhZGVyPiBiaWN1YmljU2hhZGVyLCBQYXNzT3duQXJyYXlQ
dHI8T3duUHRyPENvbnZvbHV0aW9uU2hhZGVyPiA+IGNvbnZvbHV0aW9uU2hhZGVycykKK1NoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRChQYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LCBQYXNzT3duUHRyPFNvbGlkRmlsbFNoYWRlcj4gc29s
aWRGaWxsU2hhZGVyLCBQYXNzT3duUHRyPFRleFNoYWRlcj4gdGV4U2hhZGVyLCBQYXNzT3duUHRy
PEJpY3ViaWNTaGFkZXI+IGJpY3ViaWNTaGFkZXIsIFBhc3NPd25BcnJheVB0cjxPd25QdHI8Q29u
dm9sdXRpb25TaGFkZXI+ID4gY29udm9sdXRpb25TaGFkZXJzLCBQYWdlKiBwYWdlKQogICAgIDog
bV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX2JncmFTdXBwb3J0ZWQoZmFsc2UpCiAgICAgLCBt
X3F1YWRWZXJ0aWNlcygwKQpAQCAtOTgsOCArMTAwLDkgQEAgU2hhcmVkR3JhcGhpY3NDb250ZXh0
M0Q6OlNoYXJlZEdyYXBoaWNzQwogICAgICwgbV9iaWN1YmljU2hhZGVyKGJpY3ViaWNTaGFkZXIp
CiAgICAgLCBtX2NvbnZvbHV0aW9uU2hhZGVycyhjb252b2x1dGlvblNoYWRlcnMpCiAgICAgLCBt
X29lc1N0YW5kYXJkRGVyaXZhdGl2ZXNTdXBwb3J0ZWQoZmFsc2UpCi0jaWYgRU5BQkxFKFNLSUFf
R1BVKQorI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgLCBtX2dyQ29udGV4
dCgwKQorICAgICwgbV91c2VTa2lhR1BVKHBhZ2UtPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkRHJh
d2luZ0VuYWJsZWQoKSkKICNlbmRpZgogewogICAgIGFsbENvbnRleHRzKCktPmFkZCh0aGlzKTsK
QEAgLTExOCw3ICsxMjEsNyBAQCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6flNoYXJlZEdyYXBo
aWNzCiB7CiAgICAgbV9jb250ZXh0LT5kZWxldGVCdWZmZXIobV9xdWFkVmVydGljZXMpOwogICAg
IGFsbENvbnRleHRzKCktPnJlbW92ZSh0aGlzKTsKLSNpZiBFTkFCTEUoU0tJQV9HUFUpCisjaWYg
RU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBHclNhZmVVbnJlZihtX2dyQ29udGV4
dCk7CiAjZW5kaWYKIH0KQEAgLTQ2NSw5ICs0NjgsMTEgQEAgRHJhd2luZ0J1ZmZlciogU2hhcmVk
R3JhcGhpY3NDb250ZXh0M0Q6OgogICAgIHJldHVybiBtX29mZnNjcmVlbkJ1ZmZlcnNbaW5kZXhd
LmdldCgpOwogfQogCi0jaWYgRU5BQkxFKFNLSUFfR1BVKQorI2lmIEVOQUJMRShBQ0NFTEVSQVRF
RF8yRF9DQU5WQVMpCiBHckNvbnRleHQqIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpnckNvbnRl
eHQoKQogeworICAgIGlmICghbV91c2VTa2lhR1BVKQorICAgICAgICByZXR1cm4gMDsKICAgICBp
ZiAoIW1fZ3JDb250ZXh0KSB7CiAgICAgICAgIG1fZ3JDb250ZXh0ID0gR3JDb250ZXh0OjpDcmVh
dGVHTFNoYWRlckNvbnRleHQoKTsKICAgICAgICAgbV9nckNvbnRleHQtPnNldFRleHR1cmVDYWNo
ZUxpbWl0cyhtYXhUZXh0dXJlQ2FjaGVDb3VudCwgbWF4VGV4dHVyZUNhY2hlQnl0ZXMpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29u
dGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDg0MDMzKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAotI2lmIEVOQUJMRShTS0lBX0dQVSkKKyNp
ZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogY2xhc3MgR3JDb250ZXh0OwogI2VuZGlm
CiAKQEAgLTU4LDYgKzU4LDcgQEAgY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgSG9zdFdpbmRvdzsK
IGNsYXNzIEludFNpemU7CiBjbGFzcyBMb29wQmxpbm5Tb2xpZEZpbGxTaGFkZXI7CitjbGFzcyBQ
YWdlOwogY2xhc3MgU29saWRGaWxsU2hhZGVyOwogY2xhc3MgVGV4U2hhZGVyOwogCkBAIC02NSw3
ICs2Niw3IEBAIHR5cGVkZWYgSGFzaE1hcDxOYXRpdmVJbWFnZVB0ciwgUmVmUHRyPFQKIAogY2xh
c3MgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QgOiBwdWJsaWMgUmVmQ291bnRlZDxTaGFyZWRHcmFw
aGljc0NvbnRleHQzRD4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEPiBjcmVhdGUoSG9zdFdpbmRvdyopOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGUoUGFnZSopOwogICAgIH5TaGFyZWRH
cmFwaGljc0NvbnRleHQzRCgpOwogCiAgICAgLy8gRnVuY3Rpb25zIHRoYXQgZGVsZWdhdGUgZGly
ZWN0bHkgdG8gR3JhcGhpY3NDb250ZXh0M0QsIHdpdGggY2FjaGluZwpAQCAtMTM5LDEyICsxNDAs
MTIgQEAgcHVibGljOgogICAgIHZvaWQgdXNlTG9vcEJsaW5uRXh0ZXJpb3JQcm9ncmFtKHVuc2ln
bmVkIHZlcnRleE9mZnNldCwgdW5zaWduZWQga2xtT2Zmc2V0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mLCBjb25zdCBDb2xvciYpOwogICAgIERyYXdpbmdCdWZmZXIqIGdldE9mZnNjcmVlbkJ1ZmZl
cih1bnNpZ25lZCBpbmRleCwgY29uc3QgSW50U2l6ZSYpOwogCi0jaWYgRU5BQkxFKFNLSUFfR1BV
KQorI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgR3JDb250ZXh0KiBnckNv
bnRleHQoKTsKICNlbmRpZgogCiBwcml2YXRlOgotICAgIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNE
KFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQYXNzT3duUHRyPFNvbGlkRmlsbFNoYWRl
cj4sIFBhc3NPd25QdHI8VGV4U2hhZGVyPiwgUGFzc093blB0cjxCaWN1YmljU2hhZGVyPiwgUGFz
c093bkFycmF5UHRyPE93blB0cjxDb252b2x1dGlvblNoYWRlcj4gPik7CisgICAgU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0QoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIFBhc3NPd25QdHI8
U29saWRGaWxsU2hhZGVyPiwgUGFzc093blB0cjxUZXhTaGFkZXI+LCBQYXNzT3duUHRyPEJpY3Vi
aWNTaGFkZXI+LCBQYXNzT3duQXJyYXlQdHI8T3duUHRyPENvbnZvbHV0aW9uU2hhZGVyPiA+LCBQ
YWdlKik7CiAKICAgICAvLyBVc2VkIHRvIGltcGxlbWVudCByZW1vdmVUZXh0dXJlc0ZvcigpLCBz
ZWUgdGhlIGNvbW1lbnQgYWJvdmUuCiAgICAgc3RhdGljIEhhc2hTZXQ8U2hhcmVkR3JhcGhpY3ND
b250ZXh0M0QqPiogYWxsQ29udGV4dHMoKTsKQEAgLTE3MCw4ICsxNzEsOSBAQCBwcml2YXRlOgog
CiAgICAgV1RGOjpWZWN0b3I8UmVmUHRyPERyYXdpbmdCdWZmZXI+ID4gbV9vZmZzY3JlZW5CdWZm
ZXJzOwogCi0jaWYgRU5BQkxFKFNLSUFfR1BVKQorI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpCiAgICAgR3JDb250ZXh0KiBtX2dyQ29udGV4dDsKKyAgICBib29sIG1fdXNlU2tpYUdQ
VTsKICNlbmRpZgogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCShyZXZpc2lv
biA4NDAzMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhp
Y3NDb250ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NCw3ICsyNDQsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoCiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT51
c2VHUFUoKSkKKyAgICBpZiAocGxhdGZvcm1Db250ZXh0KCktPmFjY2VsZXJhdGlvbk1vZGUoKSA9
PSBQbGF0Zm9ybUNvbnRleHRTa2lhOjpHUFUpCiAgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5n
cHVDYW52YXMoKS0+c2F2ZSgpOwogCiAgICAgLy8gU2F2ZSBvdXIgcHJpdmF0ZSBTdGF0ZS4KQEAg
LTI1Niw3ICsyNTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3Rh
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KHBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSkKKyAgICBpZiAocGxhdGZvcm1Db250ZXh0KCkt
PmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBQbGF0Zm9ybUNvbnRleHRTa2lhOjpHUFUpCiAgICAgICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5ncHVDYW52YXMoKS0+cmVzdG9yZSgpOwogCiAgICAgLy8gUmVz
dG9yZSBvdXIgcHJpdmF0ZSBTdGF0ZS4KQEAgLTMyMyw3ICszMjMsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSAm
JiAhcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhc0NsaXBBcHBsaWVkKCkpIHsKKyAgICBpZiAocGxh
dGZvcm1Db250ZXh0KCktPmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBQbGF0Zm9ybUNvbnRleHRTa2lh
OjpHUFUgJiYgIXBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXNDbGlwQXBwbGllZCgpKSB7CiAgICAg
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9ySGFyZHdhcmVEcmF3KCk7CiAgICAgICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5ncHVDYW52YXMoKS0+Y2xlYXJSZWN0KHJlY3QpOwogICAgICAg
ICByZXR1cm47CkBAIC0zNzQsNyArMzc0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZh
c0NsaXAoY29uc3QgUAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpCisgICAgaWYgKHBsYXRm
b3JtQ29udGV4dCgpLT5hY2NlbGVyYXRpb25Nb2RlKCkgPT0gUGxhdGZvcm1Db250ZXh0U2tpYTo6
R1BVKQogICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2FudmFzKCktPmNsaXBQYXRoKHBh
dGgpOwogCiAgICAgY29uc3QgU2tQYXRoJiBwID0gKnBhdGgucGxhdGZvcm1QYXRoKCk7CkBAIC00
MDEsNyArNDAxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aAog
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChw
bGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpCisgICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT5h
Y2NlbGVyYXRpb25Nb2RlKCkgPT0gUGxhdGZvcm1Db250ZXh0U2tpYTo6R1BVKQogICAgICAgICBw
bGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2FudmFzKCktPmNsaXBPdXQocCk7CiAKICAgICBjb25zdCBT
a1BhdGgmIHBhdGggPSAqcC5wbGF0Zm9ybVBhdGgoKTsKQEAgLTQxNiw3ICs0MTYsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0CiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT51
c2VHUFUoKSkKKyAgICBpZiAocGxhdGZvcm1Db250ZXh0KCktPmFjY2VsZXJhdGlvbk1vZGUoKSA9
PSBQbGF0Zm9ybUNvbnRleHRTa2lhOjpHUFUpCiAgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5n
cHVDYW52YXMoKS0+Y2xpcFBhdGgocGF0aFRvQ2xpcCk7CiAKICAgICBTa1BhdGggcGF0aCA9ICpw
YXRoVG9DbGlwLnBsYXRmb3JtUGF0aCgpOwpAQCAtNDMyLDcgKzQzMiw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWYKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocGxhdGZvcm1Db250ZXh0KCktPnVzZUdQVSgp
KQorICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+YWNjZWxlcmF0aW9uTW9kZSgpID09IFBsYXRm
b3JtQ29udGV4dFNraWE6OkdQVSkKICAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmdwdUNhbnZh
cygpLT5jb25jYXRDVE0oYWZmaW5lKTsKIAogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMo
KS0+Y29uY2F0KGFmZmluZSk7CkBAIC00NDMsNyArNDQzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldENUTShjb25zdCBBZmZpbgogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpCisgICAg
aWYgKHBsYXRmb3JtQ29udGV4dCgpLT5hY2NlbGVyYXRpb25Nb2RlKCkgPT0gUGxhdGZvcm1Db250
ZXh0U2tpYTo6R1BVKQogICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2FudmFzKCktPnNl
dENUTShhZmZpbmUpOwogCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5zZXRNYXRy
aXgoYWZmaW5lKTsKQEAgLTczNCw3ICs3MzQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFBhdGgoY29uc3QgUGF0CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBhZGQgc3Vw
cG9ydCB0byBHTEVTMkNhbnZhcyBmb3IgbW9yZSB0aGFuIGp1c3Qgc29saWQgZmlsbHMuCi0gICAg
aWYgKHBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSAmJiBwbGF0Zm9ybUNvbnRleHQoKS0+Y2Fu
QWNjZWxlcmF0ZSgpKSB7CisgICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT5hY2NlbGVyYXRpb25N
b2RlKCkgPT0gUGxhdGZvcm1Db250ZXh0U2tpYTo6R1BVICYmIHBsYXRmb3JtQ29udGV4dCgpLT5j
YW5BY2NlbGVyYXRlKCkpIHsKICAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JI
YXJkd2FyZURyYXcoKTsKICAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmdwdUNhbnZhcygpLT5m
aWxsUGF0aChwYXRoVG9GaWxsKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNzY3LDcgKzc2Nyw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICAgICAgQ2xpcFJl
Y3RUb0NhbnZhcygqcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCByLCAmcik7CiAgICAgfQog
Ci0gICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSAmJiBwbGF0Zm9ybUNvbnRleHQo
KS0+Y2FuQWNjZWxlcmF0ZSgpKSB7CisgICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT5hY2NlbGVy
YXRpb25Nb2RlKCkgPT0gUGxhdGZvcm1Db250ZXh0U2tpYTo6R1BVICYmIHBsYXRmb3JtQ29udGV4
dCgpLT5jYW5BY2NlbGVyYXRlKCkpIHsKICAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnByZXBh
cmVGb3JIYXJkd2FyZURyYXcoKTsKICAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmdwdUNhbnZh
cygpLT5maWxsUmVjdChyZWN0KTsKICAgICAgICAgcmV0dXJuOwpAQCAtNzg5LDcgKzc4OSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocGxhdGZvcm1Db250ZXh0
KCktPnVzZUdQVSgpICYmIHBsYXRmb3JtQ29udGV4dCgpLT5jYW5BY2NlbGVyYXRlKCkpIHsKKyAg
ICBpZiAocGxhdGZvcm1Db250ZXh0KCktPmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBQbGF0Zm9ybUNv
bnRleHRTa2lhOjpHUFUgJiYgcGxhdGZvcm1Db250ZXh0KCktPmNhbkFjY2VsZXJhdGUoKSkgewog
ICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvckhhcmR3YXJlRHJhdygpOwogICAg
ICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2FudmFzKCktPmZpbGxSZWN0KHJlY3QsIGNvbG9y
LCBjb2xvclNwYWNlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtODgwLDcgKzg4MCw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFMKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocGxhdGZvcm1Db250ZXh0KCktPnVz
ZUdQVSgpKQorICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+YWNjZWxlcmF0aW9uTW9kZSgpID09
IFBsYXRmb3JtQ29udGV4dFNraWE6OkdQVSkKICAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmdw
dUNhbnZhcygpLT5zY2FsZShzaXplKTsKIAogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMo
KS0+c2NhbGUoV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihzaXplLndpZHRoKCkpLApAQCAtODkyLDcg
Kzg5Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYShmbG9hdCBhbHAKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocGxhdGZv
cm1Db250ZXh0KCktPnVzZUdQVSgpKQorICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+YWNjZWxl
cmF0aW9uTW9kZSgpID09IFBsYXRmb3JtQ29udGV4dFNraWE6OkdQVSkKICAgICAgICAgcGxhdGZv
cm1Db250ZXh0KCktPmdwdUNhbnZhcygpLT5zZXRBbHBoYShhbHBoYSk7CiAKICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+c2V0QWxwaGEoYWxwaGEpOwpAQCAtOTAzLDcgKzkwMyw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUNvbXBvc2kKICAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocGxhdGZvcm1Db250ZXh0KCktPnVzZUdQ
VSgpKQorICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+YWNjZWxlcmF0aW9uTW9kZSgpID09IFBs
YXRmb3JtQ29udGV4dFNraWE6OkdQVSkKICAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmdwdUNh
bnZhcygpLT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3ApOwogCiAgICAgcGxhdGZvcm1Db250ZXh0
KCktPnNldFhmZXJtb2RlTW9kZShXZWJDb3JlQ29tcG9zaXRlVG9Ta2lhQ29tcG9zaXRlKG9wKSk7
CkBAIC05OTgsNyArOTk4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmls
bENvbAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpCisgICAgaWYgKHBsYXRmb3JtQ29udGV4
dCgpLT5hY2NlbGVyYXRpb25Nb2RlKCkgPT0gUGxhdGZvcm1Db250ZXh0U2tpYTo6R1BVKQogICAg
ICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2FudmFzKCktPnNldEZpbGxDb2xvcihjb2xvciwg
Y29sb3JTcGFjZSk7CiAKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0RmlsbENvbG9yKGNvbG9y
LnJnYigpKTsKQEAgLTEwMjgsNyArMTAyOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybVNoYWRvdygKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAocGxhdGZvcm1Db250ZXh0KCktPnVzZUdQVSgpKSB7CisgICAgaWYgKHBs
YXRmb3JtQ29udGV4dCgpLT5hY2NlbGVyYXRpb25Nb2RlKCkgPT0gUGxhdGZvcm1Db250ZXh0U2tp
YTo6R1BVKSB7CiAgICAgICAgIEdMRVMyQ2FudmFzKiBjYW52YXMgPSBwbGF0Zm9ybUNvbnRleHQo
KS0+Z3B1Q2FudmFzKCk7CiAgICAgICAgIGNhbnZhcy0+c2V0U2hhZG93T2Zmc2V0KHNpemUpOwog
ICAgICAgICBjYW52YXMtPnNldFNoYWRvd0JsdXIoYmx1ckZsb2F0KTsKQEAgLTEyMjQsNyArMTIy
NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgYW5nbGUKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocGxhdGZvcm1D
b250ZXh0KCktPnVzZUdQVSgpKQorICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+YWNjZWxlcmF0
aW9uTW9kZSgpID09IFBsYXRmb3JtQ29udGV4dFNraWE6OkdQVSkKICAgICAgICAgcGxhdGZvcm1D
b250ZXh0KCktPmdwdUNhbnZhcygpLT5yb3RhdGUoYW5nbGVJblJhZGlhbnMpOwogCiAgICAgcGxh
dGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5yb3RhdGUoV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcigK
QEAgLTEyMzYsNyArMTIzNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxv
YXQgdywKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAocGxhdGZvcm1Db250ZXh0KCktPnVzZUdQVSgpKQorICAgIGlmIChwbGF0Zm9ybUNvbnRl
eHQoKS0+YWNjZWxlcmF0aW9uTW9kZSgpID09IFBsYXRmb3JtQ29udGV4dFNraWE6OkdQVSkKICAg
ICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmdwdUNhbnZhcygpLT50cmFuc2xhdGUodywgaCk7CiAK
ICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPnRyYW5zbGF0ZShXZWJDb3JlRmxvYXRU
b1NrU2NhbGFyKHcpLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9JbWFnZUJ1ZmZlclNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkocmV2aXNpb24gODQwMzMpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIEltYWdlQnVmZmVyOjpj
bGlwKEdyYXBoaWNzQ29udGV4dCoKIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LAogICAgICAgICAgICAgICAgICAg
ICAgICBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7Ci0g
ICAgaWYgKG1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dC51c2VHUFUoKSAmJiBjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpIHsKKyAgICBpZiAobV9kYXRhLm1fcGxhdGZvcm1Db250
ZXh0LmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBQbGF0Zm9ybUNvbnRleHRTa2lhOjpHUFUgJiYgY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBQbGF0Zm9ybUNv
bnRleHRTa2lhOjpHUFUpIHsKICAgICAgICAgaWYgKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LT5jYW5BY2NlbGVyYXRlKCkpIHsKICAgICAgICAgICAgIG1fZGF0YS5tX3BsYXRmb3JtQ29udGV4
dC5wcmVwYXJlRm9ySGFyZHdhcmVEcmF3KCk7CiAgICAgICAgICAgICBEcmF3aW5nQnVmZmVyKiBz
b3VyY2VEcmF3aW5nQnVmZmVyID0gbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0LmdwdUNhbnZhcygp
LT5kcmF3aW5nQnVmZmVyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ltYWdlU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCShyZXZpc2lvbiA4NDAzMykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjYsNyArNjYsNiBAQCBlbnVtIFJlc2FtcGxpbmdNb2RlIHsKICAgICBSRVNBTVBM
RV9BV0VTT01FLAogfTsKIAotI2lmICFFTkFCTEUoU0tJQV9HUFUpCiBzdGF0aWMgUmVzYW1wbGlu
Z01vZGUgY29tcHV0ZVJlc2FtcGxpbmdNb2RlKFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3Jt
Q29udGV4dCwgY29uc3QgTmF0aXZlSW1hZ2VTa2lhJiBiaXRtYXAsIGludCBzcmNXaWR0aCwgaW50
IHNyY0hlaWdodCwgZmxvYXQgZGVzdFdpZHRoLCBmbG9hdCBkZXN0SGVpZ2h0KQogewogICAgIGlm
IChwbGF0Zm9ybUNvbnRleHQtPmhhc0ltYWdlUmVzYW1wbGluZ0hpbnQoKSkgewpAQCAtMTUxLDcg
KzE1MCw2IEBAIHN0YXRpYyBSZXNhbXBsaW5nTW9kZSBjb21wdXRlUmVzYW1wbGluZ00KICAgICAK
ICAgICByZXR1cm4gUkVTQU1QTEVfTElORUFSOwogfQotI2VuZGlmCiAKIC8vIERyYXdzIHRoZSBn
aXZlbiBiaXRtYXAgdG8gdGhlIGdpdmVuIGNhbnZhcy4gVGhlIHN1YnNldCBvZiB0aGUgc291cmNl
IGJpdG1hcAogLy8gaWRlbnRpZmllZCBieSBzcmNfcmVjdCBpcyBkcmF3biB0byB0aGUgZ2l2ZW4g
ZGVzdGluYXRpb24gcmVjdC4gVGhlIGJpdG1hcApAQCAtMjY3LDE0ICsyNjUsMTEgQEAgc3RhdGlj
IHZvaWQgcGFpbnRTa0JpdG1hcChQbGF0Zm9ybUNvbnRleAogICAgIFNrQ2FudmFzKiBjYW52YXMg
PSBwbGF0Zm9ybUNvbnRleHQtPmNhbnZhcygpOwogCiAgICAgUmVzYW1wbGluZ01vZGUgcmVzYW1w
bGluZzsKLSNpZiBFTkFCTEUoU0tJQV9HUFUpCi0gICAgcmVzYW1wbGluZyA9IFJFU0FNUExFX0xJ
TkVBUjsKLSNlbHNlCi0gICAgcmVzYW1wbGluZyA9IHBsYXRmb3JtQ29udGV4dC0+cHJpbnRpbmco
KSA/IFJFU0FNUExFX05PTkUgOgotICAgICAgICBjb21wdXRlUmVzYW1wbGluZ01vZGUocGxhdGZv
cm1Db250ZXh0LCBiaXRtYXAsIHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyVG9GbG9hdChkZXN0UmVjdC53aWR0
aCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyVG9GbG9hdChkZXN0
UmVjdC5oZWlnaHQoKSkpOwotI2VuZGlmCisgICAgaWYgKHBsYXRmb3JtQ29udGV4dC0+YWNjZWxl
cmF0aW9uTW9kZSgpID09IFBsYXRmb3JtQ29udGV4dFNraWE6OlNraWFHUFUpCisgICAgICAgIHJl
c2FtcGxpbmcgPSBSRVNBTVBMRV9MSU5FQVI7CisgICAgZWxzZQorICAgICAgICByZXNhbXBsaW5n
ID0gcGxhdGZvcm1Db250ZXh0LT5wcmludGluZygpID8gUkVTQU1QTEVfTk9ORSA6CisgICAgICAg
ICAgICBjb21wdXRlUmVzYW1wbGluZ01vZGUocGxhdGZvcm1Db250ZXh0LCBiaXRtYXAsIHNyY1Jl
Y3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSwgU2tTY2FsYXJUb0Zsb2F0KGRlc3RSZWN0Lndp
ZHRoKCkpLCBTa1NjYWxhclRvRmxvYXQoZGVzdFJlY3QuaGVpZ2h0KCkpKTsKICAgICBpZiAocmVz
YW1wbGluZyA9PSBSRVNBTVBMRV9BV0VTT01FKSB7CiAgICAgICAgIGRyYXdSZXNhbXBsZWRCaXRt
YXAoKmNhbnZhcywgcGFpbnQsIGJpdG1hcCwgc3JjUmVjdCwgZGVzdFJlY3QpOwogICAgIH0gZWxz
ZSB7CkBAIC0zNzAsMTcgKzM2NSwxNCBAQCB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQqCiAKICAgICAvLyBDb21wdXRlIHRoZSByZXNhbXBsaW5nIG1vZGUuCiAgICAgUmVz
YW1wbGluZ01vZGUgcmVzYW1wbGluZzsKLSNpZiBFTkFCTEUoU0tJQV9HUFUpCi0gICAgcmVzYW1w
bGluZyA9IFJFU0FNUExFX0xJTkVBUjsKLSNlbHNlCi0gICAgaWYgKGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5wcmludGluZygpKQotICAgICAgcmVzYW1wbGluZyA9IFJFU0FNUExFX0xJTkVB
UjsKKyAgICBpZiAoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmFjY2VsZXJhdGlvbk1vZGUo
KSA9PSBQbGF0Zm9ybUNvbnRleHRTa2lhOjpTa2lhR1BVKQorICAgICAgICByZXNhbXBsaW5nID0g
UkVTQU1QTEVfTElORUFSOwogICAgIGVsc2UgewotICAgICAgcmVzYW1wbGluZyA9IGNvbXB1dGVS
ZXNhbXBsaW5nTW9kZShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgKmJpdG1hcCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUmVjdC53aWR0aCgpLCBzcmNS
ZWN0LmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0Qml0bWFwV2lkdGgsIGRlc3RCaXRtYXBIZWlnaHQpOworICAgICAgICBpZiAoY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCktPnByaW50aW5nKCkpCisgICAgICAgICAgICByZXNhbXBsaW5nID0g
UkVTQU1QTEVfTElORUFSOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXNhbXBsaW5nID0g
Y29tcHV0ZVJlc2FtcGxpbmdNb2RlKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCAqYml0bWFw
LCBzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCksIGRlc3RCaXRtYXBXaWR0aCwgZGVz
dEJpdG1hcEhlaWdodCk7CiAgICAgfQotI2VuZGlmCiAKICAgICAvLyBMb2FkIHRoZSB0cmFuc2Zv
cm0gV2ViS2l0IHJlcXVlc3RlZC4KICAgICBTa01hdHJpeCBtYXRyaXgocGF0dGVyblRyYW5zZm9y
bSk7CkBAIC00OTIsNyArNDg0LDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0Nv
bnRleHQqCiAgICAgaWYgKG5vcm1TcmNSZWN0LmlzRW1wdHkoKSB8fCBub3JtRHN0UmVjdC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsgIC8vIE5vdGhpbmcgdG8gZHJhdy4KIAotICAgIGlmIChj
dHh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkgJiYgY3R4dC0+cGxhdGZvcm1Db250ZXh0
KCktPmNhbkFjY2VsZXJhdGUoKSkgeworICAgIGlmIChjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
YWNjZWxlcmF0aW9uTW9kZSgpID09IFBsYXRmb3JtQ29udGV4dFNraWE6OkdQVSAmJiBjdHh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+Y2FuQWNjZWxlcmF0ZSgpKSB7CiAgICAgICAgIGRyYXdCaXRtYXBH
TEVTMihjdHh0LCBibSwgbm9ybVNyY1JlY3QsIG5vcm1Ec3RSZWN0LCBjb2xvclNwYWNlLCBjb21w
b3NpdGVPcCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC01MjAsNyArNTEyLDcgQEAgdm9p
ZCBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6ZHJhdyhHcgogICAgIGlmIChub3JtU3JjUmVj
dC5pc0VtcHR5KCkgfHwgbm9ybURzdFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47ICAv
LyBOb3RoaW5nIHRvIGRyYXcuCiAKLSAgICBpZiAoY3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPnVz
ZUdQVSgpICYmIGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW5BY2NlbGVyYXRlKCkpIHsKKyAg
ICBpZiAoY3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBQbGF0
Zm9ybUNvbnRleHRTa2lhOjpHUFUgJiYgY3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbkFjY2Vs
ZXJhdGUoKSkgewogICAgICAgICBkcmF3Qml0bWFwR0xFUzIoY3R4dCwgJm1fbmF0aXZlSW1hZ2Us
IHNyY1JlY3QsIGRzdFJlY3QsIHN0eWxlQ29sb3JTcGFjZSwgY29tcG9zaXRlT3ApOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCShyZXZpc2lv
biA4NDI4MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZv
cm1Db250ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDE5ICs1MSwxNiBAQAogI2lu
Y2x1ZGUgIlNrRGFzaFBhdGhFZmZlY3QuaCIKICNpbmNsdWRlICJTa1NoYWRlci5oIgogCi0jaWYg
RU5BQkxFKFNLSUFfR1BVKQotI2luY2x1ZGUgIkdyQ29udGV4dC5oIgotI2luY2x1ZGUgIlNrR3B1
RGV2aWNlLmgiCi0jaW5jbHVkZSAiU2tHcHVEZXZpY2VGYWN0b3J5LmgiCi0jZW5kaWYKLQogI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZB
UykKICNpbmNsdWRlICJHTEVTMkNhbnZhcy5oIgorI2luY2x1ZGUgIkdyQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiU2tHcHVEZXZpY2Uu
aCIKKyNpbmNsdWRlICJTa0dwdURldmljZUZhY3RvcnkuaCIKICNlbmRpZgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC0yMTcsNyArMjE0LDcgQEAgUGxhdGZvcm1Db250ZXh0U2tpYTo6UGxhdGZv
cm1Db250ZXh0U2tpYQogICAgIDogbV9jYW52YXMoY2FudmFzKQogICAgICwgbV9wcmludGluZyhm
YWxzZSkKICAgICAsIG1fZHJhd2luZ1RvSW1hZ2VCdWZmZXIoZmFsc2UpCi0gICAgLCBtX3VzZUdQ
VShmYWxzZSkKKyAgICAsIG1fYWNjZWxlcmF0aW9uTW9kZShOb0FjY2VsZXJhdGlvbikKICNpZiBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgICwgbV9ncHVDYW52YXMoMCkKICNlbmRp
ZgpAQCAtMjMxLDE0ICsyMjgsMTIgQEAgUGxhdGZvcm1Db250ZXh0U2tpYTo6flBsYXRmb3JtQ29u
dGV4dFNraQogewogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgaWYgKG1f
Z3B1Q2FudmFzKSB7Ci0jaWYgRU5BQkxFKFNLSUFfR1BVKQogICAgICAgICAvLyBtYWtlIHN1cmUg
ZXZlcnl0aGluZyByZWxhdGVkIHRvIHRoaXMgcGxhdGZvcm0gY29udGV4dCBoYXMgYmVlbiBmbHVz
aGVkCi0gICAgICAgIGlmICghbV91c2VHUFUpIHsKKyAgICAgICAgaWYgKG1fYWNjZWxlcmF0aW9u
TW9kZSA9PSBTa2lhR1BVKSB7CiAgICAgICAgICAgICBTaGFyZWRHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCA9IG1fZ3B1Q2FudmFzLT5jb250ZXh0KCk7CiAgICAgICAgICAgICBjb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICAgICAgICAgIGNvbnRleHQtPmdyQ29udGV4dCgpLT5m
bHVzaCgwKTsKICAgICAgICAgfQotI2VuZGlmCiAgICAgICAgIG1fZ3B1Q2FudmFzLT5kcmF3aW5n
QnVmZmVyKCktPnNldFdpbGxQdWJsaXNoQ2FsbGJhY2soMCk7CiAgICAgfQogI2VuZGlmCkBAIC02
MTUsMTEgKzYxMCw5IEBAIGNvbnN0IFNrQml0bWFwKiBQbGF0Zm9ybUNvbnRleHRTa2lhOjpiaXQK
IAogYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjppc05hdGl2ZUZvbnRSZW5kZXJpbmdBbGxvd2Vk
KCkKIHsKLSNpZiBFTkFCTEUoU0tJQV9HUFUpCi0gICAgcmV0dXJuIGZhbHNlOwotI2Vsc2UKKyAg
ICBpZiAobV9hY2NlbGVyYXRpb25Nb2RlID09IFNraWFHUFUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICByZXR1cm4gc2tpYTo6U3VwcG9ydHNQbGF0Zm9ybVBhaW50KG1fY2FudmFzKTsKLSNl
bmRpZgogfQogCiB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmdldEltYWdlUmVzYW1wbGluZ0hp
bnQoSW50U2l6ZSogc3JjU2l6ZSwgRmxvYXRTaXplKiBkc3RTaXplKSBjb25zdApAQCAtNzI2LDQ1
ICs3MTksNDcgQEAgcHJpdmF0ZToKIAogdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRChTaGFyZWRHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRHJh
d2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlciwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkK
IHsKKyAgICBtX2FjY2VsZXJhdGlvbk1vZGUgPSBOb0FjY2VsZXJhdGlvbjsKICNpZiBFTkFCTEUo
QUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIGlmIChjb250ZXh0ICYmIGRyYXdpbmdCdWZmZXIp
IHsKLSAgICAgICAgbV91c2VHUFUgPSB0cnVlOwogICAgICAgICBtX2dwdUNhbnZhcyA9IG5ldyBH
TEVTMkNhbnZhcyhjb250ZXh0LCBkcmF3aW5nQnVmZmVyLCBzaXplKTsKICAgICAgICAgbV91cGxv
YWRUZXh0dXJlLmNsZWFyKCk7CiAgICAgICAgIGRyYXdpbmdCdWZmZXItPnNldFdpbGxQdWJsaXNo
Q2FsbGJhY2soV2lsbFB1Ymxpc2hDYWxsYmFja0ltcGw6OmNyZWF0ZSh0aGlzKSk7CiAKLSNpZiBF
TkFCTEUoU0tJQV9HUFUpCi0gICAgICAgIG1fdXNlR1BVID0gZmFsc2U7Ci0gICAgICAgIGNvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgICAgICBtX2dwdUNhbnZhcy0+YmluZEZyYW1l
YnVmZmVyKCk7Ci0KKyAgICAgICAgLy8gdXNlIHNraWEgZ3B1IHJlbmRlcmluZyBpZiBhdmFpbGFi
bGUKICAgICAgICAgR3JDb250ZXh0KiBnciA9IGNvbnRleHQtPmdyQ29udGV4dCgpOwotICAgICAg
ICBnci0+cmVzZXRDb250ZXh0KCk7Ci0gICAgICAgIGRyYXdpbmdCdWZmZXItPnNldEdyQ29udGV4
dChncik7CisgICAgICAgIGlmIChncikgeworICAgICAgICAgICAgbV9hY2NlbGVyYXRpb25Nb2Rl
ID0gU2tpYUdQVTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgICAgICAgICBtX2dwdUNhbnZhcy0+YmluZEZyYW1lYnVmZmVyKCk7
CiAKLSAgICAgICAgR3JQbGF0Zm9ybVN1cmZhY2VEZXNjIGRyYXdCdWZEZXNjOwotICAgICAgICBk
cmF3aW5nQnVmZmVyLT5nZXRHclBsYXRmb3JtU3VyZmFjZURlc2MoJmRyYXdCdWZEZXNjKTsKLSAg
ICAgICAgR3JUZXh0dXJlKiBkcmF3QnVmVGV4ID0gc3RhdGljX2Nhc3Q8R3JUZXh0dXJlKj4oZ3It
PmNyZWF0ZVBsYXRmb3JtU3VyZmFjZShkcmF3QnVmRGVzYykpOwotICAgICAgICBTa0RldmljZUZh
Y3RvcnkqIGZhY3RvcnkgPSBuZXcgU2tHcHVEZXZpY2VGYWN0b3J5KGdyLCBkcmF3QnVmVGV4KTsK
LSAgICAgICAgZHJhd0J1ZlRleC0+dW5yZWYoKTsKLQotICAgICAgICBTa0RldmljZSogZGV2aWNl
ID0gZmFjdG9yeS0+bmV3RGV2aWNlKG1fY2FudmFzLCBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25m
aWcsIGRyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgpLCBkcmF3aW5nQnVmZmVyLT5zaXplKCku
aGVpZ2h0KCksIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgIG1fY2FudmFzLT5zZXREZXZpY2UoZGV2
aWNlKS0+dW5yZWYoKTsKLSAgICAgICAgbV9jYW52YXMtPnNldERldmljZUZhY3RvcnkoZmFjdG9y
eSk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGdyLT5yZXNldENvbnRleHQoKTsKKyAgICAgICAgICAg
IGRyYXdpbmdCdWZmZXItPnNldEdyQ29udGV4dChncik7CisKKyAgICAgICAgICAgIEdyUGxhdGZv
cm1TdXJmYWNlRGVzYyBkcmF3QnVmRGVzYzsKKyAgICAgICAgICAgIGRyYXdpbmdCdWZmZXItPmdl
dEdyUGxhdGZvcm1TdXJmYWNlRGVzYygmZHJhd0J1ZkRlc2MpOworICAgICAgICAgICAgR3JUZXh0
dXJlKiBkcmF3QnVmVGV4ID0gc3RhdGljX2Nhc3Q8R3JUZXh0dXJlKj4oZ3ItPmNyZWF0ZVBsYXRm
b3JtU3VyZmFjZShkcmF3QnVmRGVzYykpOworICAgICAgICAgICAgU2tEZXZpY2VGYWN0b3J5KiBm
YWN0b3J5ID0gbmV3IFNrR3B1RGV2aWNlRmFjdG9yeShnciwgZHJhd0J1ZlRleCk7CisgICAgICAg
ICAgICBkcmF3QnVmVGV4LT51bnJlZigpOworCisgICAgICAgICAgICBTa0RldmljZSogZGV2aWNl
ID0gZmFjdG9yeS0+bmV3RGV2aWNlKG1fY2FudmFzLCBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25m
aWcsIGRyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgpLCBkcmF3aW5nQnVmZmVyLT5zaXplKCku
aGVpZ2h0KCksIGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICBtX2NhbnZhcy0+c2V0RGV2aWNl
KGRldmljZSktPnVucmVmKCk7CisgICAgICAgICAgICBtX2NhbnZhcy0+c2V0RGV2aWNlRmFjdG9y
eShmYWN0b3J5KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2FjY2VsZXJhdGlvbk1v
ZGUgPSBHUFU7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc3luY1NvZnR3YXJlQ2FudmFzKCk7CiAg
ICAgICAgIG1fdXBsb2FkVGV4dHVyZS5jbGVhcigpOwogICAgICAgICBtX2dwdUNhbnZhcy5jbGVh
cigpOwotICAgICAgICBtX3VzZUdQVSA9IGZhbHNlOwogICAgIH0KICNlbmRpZgogfQogCiB2b2lk
IFBsYXRmb3JtQ29udGV4dFNraWE6OnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKSBjb25zdAogewot
ICAgIGlmICghbV91c2VHUFUpIHsKLSNpZiBFTkFCTEUoU0tJQV9HUFUpCisgICAgaWYgKG1fYWNj
ZWxlcmF0aW9uTW9kZSA9PSBTa2lhR1BVKSB7CisjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykKICAgICAgICAgaWYgKG1fZ3B1Q2FudmFzKQogICAgICAgICAgICAgbV9ncHVDYW52YXMt
PmNvbnRleHQoKS0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAjZW5kaWYKQEAgLTgwNiw3ICs4MDEs
NyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnByZXBhcmVGb3JTb2Z0CiAKIHZvaWQgUGxh
dGZvcm1Db250ZXh0U2tpYTo6cHJlcGFyZUZvckhhcmR3YXJlRHJhdygpIGNvbnN0CiB7Ci0gICAg
aWYgKCFtX3VzZUdQVSkKKyAgICBpZiAoIShtX2FjY2VsZXJhdGlvbk1vZGUgPT0gR1BVKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fYmFja2luZ1N0b3JlU3RhdGUgPT0gU29mdHdhcmUp
IHsKQEAgLTgyMiw4ICs4MTcsOCBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnByZXBhcmVG
b3JIYXJkCiAKIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c3luY1NvZnR3YXJlQ2FudmFzKCkg
Y29uc3QKIHsKLSAgICBpZiAoIW1fdXNlR1BVKSB7Ci0jaWYgRU5BQkxFKFNLSUFfR1BVKQorICAg
IGlmIChtX2FjY2VsZXJhdGlvbk1vZGUgPT0gU2tpYUdQVSkgeworI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCiAgICAgICAgIGlmIChtX2dwdUNhbnZhcykKICAgICAgICAgICAgIG1f
Z3B1Q2FudmFzLT5jb250ZXh0KCktPm1ha2VDb250ZXh0Q3VycmVudCgpOwogI2VuZGlmCkBAIC04
NDQsNyArODM5LDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzeW5jU29mdHdhcmVDYQog
CiB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6Om1hcmtEaXJ0eVJlY3QoY29uc3QgSW50UmVjdCYg
cmVjdCkKIHsKLSAgICBpZiAoIW1fdXNlR1BVKQorICAgIGlmICghKG1fYWNjZWxlcmF0aW9uTW9k
ZSA9PSBHUFUpKQogICAgICAgICByZXR1cm47CiAKICAgICBzd2l0Y2ggKG1fYmFja2luZ1N0b3Jl
U3RhdGUpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxh
dGZvcm1Db250ZXh0U2tpYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCShyZXZpc2lvbiA4NDAzMykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tp
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCwxMiBAQCBjbGFzcyBUZXh0dXJlOwogY2xh
c3MgUGxhdGZvcm1Db250ZXh0U2tpYSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGxhdGZv
cm1Db250ZXh0U2tpYSk7CiBwdWJsaWM6CisgICAgZW51bSBBY2NlbGVyYXRpb25Nb2RlIHsKKyAg
ICAgICAgTm9BY2NlbGVyYXRpb24sCisgICAgICAgIEdQVSwKKyAgICAgICAgU2tpYUdQVQorICAg
IH07CisKICAgICAvLyBGb3IgcHJpbnRpbmcsIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgY2FudmFz
LiBjYW52YXMgY2FuIGJlIE5VTEwuIElmIHlvdQogICAgIC8vIHN1cHBseSBhIE5VTEwgY2FudmFz
LCB5b3UgY2FuIGFsc28gY2FsbCBzZXRDYW52YXMgbGF0ZXIuCiAgICAgUGxhdGZvcm1Db250ZXh0
U2tpYShTa0NhbnZhcyopOwpAQCAtMTc4LDcgKzE4NCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
Y2FuQWNjZWxlcmF0ZSgpIGNvbnN0OwogICAgIGJvb2wgY2FudmFzQ2xpcEFwcGxpZWQoKSBjb25z
dDsKLSAgICBib29sIHVzZUdQVSgpIHsgcmV0dXJuIG1fdXNlR1BVOyB9CisgICAgYm9vbCBhY2Nl
bGVyYXRpb25Nb2RlKCkgeyByZXR1cm4gbV9hY2NlbGVyYXRpb25Nb2RlOyB9CiAgICAgdm9pZCBz
ZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRChTaGFyZWRHcmFwaGljc0NvbnRleHQzRCosIERyYXdp
bmdCdWZmZXIqLCBjb25zdCBJbnRTaXplJik7CiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykKICAgICBHTEVTMkNhbnZhcyogZ3B1Q2FudmFzKCkgY29uc3QgeyByZXR1cm4gbV9ncHVD
YW52YXMuZ2V0KCk7IH0KQEAgLTIyMSw3ICsyMjcsNyBAQCBwcml2YXRlOgogICAgIEZsb2F0U2l6
ZSBtX2ltYWdlUmVzYW1wbGluZ0hpbnREc3RTaXplOwogICAgIGJvb2wgbV9wcmludGluZzsKICAg
ICBib29sIG1fZHJhd2luZ1RvSW1hZ2VCdWZmZXI7Ci0gICAgYm9vbCBtX3VzZUdQVTsKKyAgICB1
bnNpZ25lZCBtX2FjY2VsZXJhdGlvbk1vZGU7CiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykKICAgICBPd25QdHI8R0xFUzJDYW52YXM+IG1fZ3B1Q2FudmFzOwogICAgIG11dGFibGUg
UmVmUHRyPFRleHR1cmU+IG1fdXBsb2FkVGV4dHVyZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90533</attachid>
            <date>2011-04-21 08:07:51 -0700</date>
            <delta_ts>2011-04-21 13:31:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58683-20110421110750.patch</filename>
            <type>text/plain</type>
            <size>21693</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0NDk4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTEtMDQtMjEgIEp1c3RpbiBO
b3Zvc2FkICA8anVub3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtDaHJvbWl1bV0gRXhwb3NlIHNraWEgZ3B1IGNhbnZhcyBy
ZW5kZXJpbmcgYXMgYSBydW50aW1lIGZsYWcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU4NjgzCisgICAgICAgIHJlcGxhY2UgdGhlIFNLSUFfR1BVIGNv
bXBpbGUgZmxhZyBieSB0aGUgcHJlLWV4aXN0aW5nCisgICAgICAgIGFjY2VsZXJhdGVkRHJhd2lu
Z0VuYWJsZWQgZmxhZy4gTW9zdCBjb2RlIGNoYW5nZXMgYXJlIHRyaXZpYWw6CisgICAgICAgIGNv
bXBpbGUtdGltZSBjb25kaXRpb25hbHMgb24gU0tJQV9HUFUgd2VyZSBlaXRoZXIgcmVwbGFjZWQg
d2l0aAorICAgICAgICBhIHJ1bi10aW1lIGNoZWNrLCBvciBhIGNvbXBpbGUgdGltZSBjaGVjayBv
biBVU0UoU0tJQSkgCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBDb3ZlcmVkIGJ5IGV4aXN0aW5n
IHRlc3RzLgorCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0R2xv
YmFsQ29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UGFnZTo6c2hhcmVkR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICBBZGRl
ZCBjaGVjayBmb3IgdGhlIGFjY2VsZXJhdGVkRHJhd2luZyBmbGFnLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRyYXdpbmdCdWZmZXI6OnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICBPbiBTa2lhIGJ1
aWxkcywgdGhpcyBtZXRob3Mgbm93IHJlY2VpdmVzIGEgYm9vbCBhcmcgdG8gdHVybiBvbgorICAg
ICAgICBHUFUtYWNjZWxlcmF0ZWQgc2tpYSByZW5kZXJpbmcKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZEdyYXBoaWNzQ29udGV4dDNEOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6flNoYXJlZEdyYXBoaWNzQ29udGV4
dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpnckNvbnRl
eHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRl
eHQzRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVSZXNhbXBsaW5nTW9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpwYWludFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpkcmF3UGF0dGVy
bik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29u
dGV4dFNraWEpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6flBsYXRm
b3JtQ29udGV4dFNraWEpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6
aXNOYXRpdmVGb250UmVuZGVyaW5nQWxsb3dlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUNvbnRleHRTa2lhOjpzZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpwcmVwYXJlRm9yU29mdHdhcmVEcmF3KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnByZXBhcmVGb3JIYXJkd2FyZURyYXcp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6c3luY1NvZnR3YXJlQ2Fu
dmFzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6Om1hcmtEaXJ0eVJl
Y3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tp
YS5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6YWNjZWxlcmF0aW9u
TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjp1c2VHUFUpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6dXNlU2tpYUdQVSk6CisKIDIw
MTEtMDQtMjEgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGlyayBTY2h1bHplLgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZp
c2lvbiA4NDQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzOCw4ICs1MzgsMTIgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEdsb2JhbAogICAgIGlmICghYykKICAgICAgICAg
cmV0dXJuOwogICAgIGMtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCk7Ci0jaWYgRU5BQkxFKEFD
Q0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgIUVOQUJMRShTS0lBX0dQVSkKLSAgICBpZiAoaXNBY2Nl
bGVyYXRlZCgpICYmIG9wICE9IENvbXBvc2l0ZVNvdXJjZU92ZXIpIHsKKyNpZiBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQorICAgIGlmIChpc0FjY2VsZXJhdGVkKCkgJiYgb3AgIT0gQ29t
cG9zaXRlU291cmNlT3ZlciAKKyNpZiBVU0UoU0tJQSkKKyAgICAgICAgJiYgIShtX2NvbnRleHQz
RC5nZXQoKSAmJiBtX2NvbnRleHQzRC0+Z3JDb250ZXh0KCkpCisjZW5kaWYKKyAgICAgICAgKSB7
CiAgICAgICAgIGMtPnNldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKDAsIDAsIEludFNpemUoKSk7
CiAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci5jbGVhcigpOwogICAgICAgICBtX2NvbnRleHQzRC5j
bGVhcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCShyZXZpc2lvbiA4NDQ4OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1MiwxMCArNzUyLDEz
IEBAIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBQYWdlOjpzaGFyZWRHcmEKIHsKICNpZiBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIGlmICghbV9zaGFyZWRHcmFwaGljc0NvbnRl
eHQzRCkKKyNpZiBVU0UoU0tJQSkKKyAgICAgICAgbV9zaGFyZWRHcmFwaGljc0NvbnRleHQzRCA9
IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoY2hyb21lKCksIHNldHRpbmdzKCktPmFj
Y2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSk7CisjZWxzZQogICAgICAgICBtX3NoYXJlZEdyYXBo
aWNzQ29udGV4dDNEID0gU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShjaHJvbWUoKSk7
Ci0KKyNlbmRpZgogICAgIHJldHVybiBtX3NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmdldCgpOwot
I2Vsc2UKKyNlbHNlIC8vICFFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIHJldHVy
biAwOwogI2VuZGlmCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5j
cHAJKHJldmlzaW9uIDg0NDg4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYs
NyArMzYsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiU2hh
cmVkR3JhcGhpY3NDb250ZXh0M0QuaCIKIAotI2lmIEVOQUJMRShTS0lBX0dQVSkKKyNpZiBVU0Uo
U0tJQSkKICNpbmNsdWRlICJHckNvbnRleHQuaCIKICNlbmRpZgogCkBAIC04Nyw3ICs4Nyw3IEBA
IERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb24KICAgICAsIG1fbXVsdGlz
YW1wbGVGQk8oMCkKICAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQogICAgICwgbV9p
bnRlcm5hbChuZXcgRHJhd2luZ0J1ZmZlckludGVybmFsKQotI2lmIEVOQUJMRShTS0lBX0dQVSkK
KyNpZiBVU0UoU0tJQSkKICAgICAsIG1fZ3JDb250ZXh0KDApCiAjZW5kaWYKIHsKQEAgLTEzNSw3
ICsxMzUsNyBAQCB2b2lkIERyYXdpbmdCdWZmZXI6OnB1Ymxpc2hUb1BsYXRmb3JtTGF5CiAgICAg
Ly8gaGFwcGVucyBiZWZvcmUgdGhlIGNvbXBvc2l0b3IgZHJhd3MuICBUaGlzIG1lYW5zIHdlIG1p
Z2h0IGRyYXcgc3RhbGUgZnJhbWVzIHNvbWV0aW1lcy4gIElkZWFsbHkgdGhpcwogICAgIC8vIHdv
dWxkIGluc2VydCBhIGZlbmNlIGludG8gdGhlIGNoaWxkIGNvbW1hbmQgc3RyZWFtIHRoYXQgdGhl
IGNvbXBvc2l0b3IgY291bGQgd2FpdCBmb3IuCiAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSNpZiBFTkFCTEUoU0tJQV9HUFUpCisjaWYgVVNFKFNLSUEpCiAgICAgaWYgKG1f
Z3JDb250ZXh0KQogICAgICAgICBtX2dyQ29udGV4dC0+Zmx1c2goMCk7CiAjZW5kaWYKQEAgLTE2
Niw3ICsxNjYsNyBAQCBQbGF0Zm9ybTNET2JqZWN0IERyYXdpbmdCdWZmZXI6OnBsYXRmb3JtCiAg
ICAgcmV0dXJuIG1fY29sb3JCdWZmZXI7CiB9CiAKLSNpZiBFTkFCTEUoU0tJQV9HUFUpCisjaWYg
VVNFKFNLSUEpCiB2b2lkIERyYXdpbmdCdWZmZXI6OnNldEdyQ29udGV4dChHckNvbnRleHQqIGNv
bnRleHQpCiB7CiAgICAgLy8gV2UganVzdCB0YWtlIGEgcHRyIHdpdGhvdXQgcmVmZXJlbmNpbmcg
aXQsIGFzIHdlIHJlcXVpcmUgdGhhdCB3ZSBuZXZlciBvdXRsaXZlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgJKHJl
dmlzaW9uIDg0NDg4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0Ry
YXdpbmdCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQAogI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KICNlbmRpZgogCi0jaWYgRU5BQkxFKFNLSUFfR1BVKQorI2lmIFVT
RShTS0lBKQogY2xhc3MgR3JDb250ZXh0Owogc3RydWN0IEdyUGxhdGZvcm1TdXJmYWNlRGVzYzsK
ICNlbmRpZgpAQCAtMTAzLDcgKzEwMyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFdpbGxQdWJs
aXNoQ2FsbGJhY2soUGFzc093blB0cjxXaWxsUHVibGlzaENhbGxiYWNrPiBjYWxsYmFjaykgeyBt
X2NhbGxiYWNrID0gY2FsbGJhY2s7IH0KICNlbmRpZgogCi0jaWYgRU5BQkxFKFNLSUFfR1BVKQor
I2lmIFVTRShTS0lBKQogICAgIHZvaWQgc2V0R3JDb250ZXh0KEdyQ29udGV4dCogY3R4KTsKICAg
ICB2b2lkIGdldEdyUGxhdGZvcm1TdXJmYWNlRGVzYyhHclBsYXRmb3JtU3VyZmFjZURlc2MqKTsK
ICNlbmRpZgpAQCAtMTQ1LDcgKzE0NSw3IEBAIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPFdlYkdM
TGF5ZXI+IG1fcGxhdGZvcm1MYXllcjsKICNlbmRpZgogCi0jaWYgRU5BQkxFKFNLSUFfR1BVKQor
I2lmIFVTRShTS0lBKQogICAgIEdyQ29udGV4dCogbV9nckNvbnRleHQ7CiAjZW5kaWYKIH07Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3ND
b250ZXh0M0QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDg0NDg4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4
dDNELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLQogI2luY2x1ZGUgIlNo
YXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIK
QEAgLTQ2LDEzICs0NSwxNCBAQAogI2luY2x1ZGUgIlNvbGlkRmlsbFNoYWRlci5oIgogI2luY2x1
ZGUgIlRleFNoYWRlci5oIgogCi0jaWYgRU5BQkxFKFNLSUFfR1BVKQorI2lmIFVTRShTS0lBKQog
I2luY2x1ZGUgIkdyQ29udGV4dC5oIgorI2VuZGlmCisKIC8vIExpbWl0IHRoZSBudW1iZXIgb2Yg
dGV4dHVyZXMgd2UgaG9sZCBpbiB0aGUgYml0bWFwLT50ZXh0dXJlIGNhY2hlLgogc3RhdGljIGNv
bnN0IGludCBtYXhUZXh0dXJlQ2FjaGVDb3VudCA9IDUxMjsKIC8vIExpbWl0IHRoZSBieXRlcyBh
bGxvY2F0ZWQgdG93YXJkIHRleHR1cmVzIGluIHRoZSBiaXRtYXAtPnRleHR1cmUgY2FjaGUuCiBz
dGF0aWMgY29uc3Qgc2l6ZV90IG1heFRleHR1cmVDYWNoZUJ5dGVzID0gNTAgKiAxMDI0ICogMTAy
NDsKLSNlbmRpZgogCiAjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgpAQCAtNjEsNyArNjEsMTEgQEAgc3RhdGljIGNvbnN0IHNpemVfdCBt
YXhUZXh0dXJlQ2FjaGVCeXRlcwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBzdGF0aWMKKyNp
ZiBVU0UoU0tJQSkKK1Bhc3NSZWZQdHI8U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q+IFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCB1c2VT
a2lhR3B1KQorI2Vsc2UKIFBhc3NSZWZQdHI8U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q+IFNoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKKyNlbmRp
ZgogewogICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHI7CiAgICAgYXR0ci5k
ZXB0aCA9IGZhbHNlOwpAQCAtODYsMTAgKzkwLDE4IEBAIFBhc3NSZWZQdHI8U2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0Q+IFNoYXIKICAgICAgICAgaWYgKCFjb252b2x1dGlvblNoYWRlcnNbaV0pCiAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CisjaWYgVVNFKFNLSUEpCisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRChjb250ZXh0LnJlbGVhc2UoKSwgc29s
aWRGaWxsU2hhZGVyLnJlbGVhc2UoKSwgdGV4U2hhZGVyLnJlbGVhc2UoKSwgYmljdWJpY1NoYWRl
ci5yZWxlYXNlKCksIGNvbnZvbHV0aW9uU2hhZGVycy5yZWxlYXNlKCksIHVzZVNraWFHcHUpKTsK
KyNlbHNlCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRChj
b250ZXh0LnJlbGVhc2UoKSwgc29saWRGaWxsU2hhZGVyLnJlbGVhc2UoKSwgdGV4U2hhZGVyLnJl
bGVhc2UoKSwgYmljdWJpY1NoYWRlci5yZWxlYXNlKCksIGNvbnZvbHV0aW9uU2hhZGVycy5yZWxl
YXNlKCkpKTsKKyNlbmRpZgogfQogCisjaWYgVVNFKFNLSUEpCitTaGFyZWRHcmFwaGljc0NvbnRl
eHQzRDo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gY29udGV4dCwgUGFzc093blB0cjxTb2xpZEZpbGxTaGFkZXI+IHNvbGlkRmlsbFNoYWRlciwg
UGFzc093blB0cjxUZXhTaGFkZXI+IHRleFNoYWRlciwgUGFzc093blB0cjxCaWN1YmljU2hhZGVy
PiBiaWN1YmljU2hhZGVyLCBQYXNzT3duQXJyYXlQdHI8T3duUHRyPENvbnZvbHV0aW9uU2hhZGVy
PiA+IGNvbnZvbHV0aW9uU2hhZGVycywgYm9vbCB1c2VTa2lhR1BVKQorI2Vsc2UKIFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRChQYXNzUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBjb250ZXh0LCBQYXNzT3duUHRyPFNvbGlkRmlsbFNoYWRlcj4gc29saWRG
aWxsU2hhZGVyLCBQYXNzT3duUHRyPFRleFNoYWRlcj4gdGV4U2hhZGVyLCBQYXNzT3duUHRyPEJp
Y3ViaWNTaGFkZXI+IGJpY3ViaWNTaGFkZXIsIFBhc3NPd25BcnJheVB0cjxPd25QdHI8Q29udm9s
dXRpb25TaGFkZXI+ID4gY29udm9sdXRpb25TaGFkZXJzKQorI2VuZGlmCiAgICAgOiBtX2NvbnRl
eHQoY29udGV4dCkKICAgICAsIG1fYmdyYVN1cHBvcnRlZChmYWxzZSkKICAgICAsIG1fcXVhZFZl
cnRpY2VzKDApCkBAIC05OCw4ICsxMTAsOSBAQCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6U2hh
cmVkR3JhcGhpY3NDCiAgICAgLCBtX2JpY3ViaWNTaGFkZXIoYmljdWJpY1NoYWRlcikKICAgICAs
IG1fY29udm9sdXRpb25TaGFkZXJzKGNvbnZvbHV0aW9uU2hhZGVycykKICAgICAsIG1fb2VzU3Rh
bmRhcmREZXJpdmF0aXZlc1N1cHBvcnRlZChmYWxzZSkKLSNpZiBFTkFCTEUoU0tJQV9HUFUpCisj
aWYgVVNFKFNLSUEpCiAgICAgLCBtX2dyQ29udGV4dCgwKQorICAgICwgbV91c2VTa2lhR1BVKHVz
ZVNraWFHUFUpCiAjZW5kaWYKIHsKICAgICBhbGxDb250ZXh0cygpLT5hZGQodGhpcyk7CkBAIC0x
MTgsNyArMTMxLDcgQEAgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6On5TaGFyZWRHcmFwaGljcwog
ewogICAgIG1fY29udGV4dC0+ZGVsZXRlQnVmZmVyKG1fcXVhZFZlcnRpY2VzKTsKICAgICBhbGxD
b250ZXh0cygpLT5yZW1vdmUodGhpcyk7Ci0jaWYgRU5BQkxFKFNLSUFfR1BVKQorI2lmIFVTRShT
S0lBKQogICAgIEdyU2FmZVVucmVmKG1fZ3JDb250ZXh0KTsKICNlbmRpZgogfQpAQCAtNDY1LDkg
KzQ3OCwxMSBAQCBEcmF3aW5nQnVmZmVyKiBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6CiAgICAg
cmV0dXJuIG1fb2Zmc2NyZWVuQnVmZmVyc1tpbmRleF0uZ2V0KCk7CiB9CiAKLSNpZiBFTkFCTEUo
U0tJQV9HUFUpCisjaWYgVVNFKFNLSUEpCiBHckNvbnRleHQqIFNoYXJlZEdyYXBoaWNzQ29udGV4
dDNEOjpnckNvbnRleHQoKQogeworICAgIGlmICghbV91c2VTa2lhR1BVKQorICAgICAgICByZXR1
cm4gMDsKICAgICBpZiAoIW1fZ3JDb250ZXh0KSB7CiAgICAgICAgIG1fZ3JDb250ZXh0ID0gR3JD
b250ZXh0OjpDcmVhdGVHTFNoYWRlckNvbnRleHQoKTsKICAgICAgICAgbV9nckNvbnRleHQtPnNl
dFRleHR1cmVDYWNoZUxpbWl0cyhtYXhUZXh0dXJlQ2FjaGVDb3VudCwgbWF4VGV4dHVyZUNhY2hl
Qnl0ZXMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJl
ZEdyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDg0NDg4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNz
Q29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAKICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAotI2lmIEVOQUJMRShT
S0lBX0dQVSkKKyNpZiBVU0UoU0tJQSkKIGNsYXNzIEdyQ29udGV4dDsKICNlbmRpZgogCkBAIC02
NSw3ICs2NSwxMSBAQCB0eXBlZGVmIEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIsIFJlZlB0cjxUCiAK
IGNsYXNzIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEIDogcHVibGljIFJlZkNvdW50ZWQ8U2hhcmVk
R3JhcGhpY3NDb250ZXh0M0Q+IHsKIHB1YmxpYzoKKyNpZiBVU0UoU0tJQSkKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTaGFyZWRHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlKEhvc3RXaW5kb3cqLCBi
b29sIHVzZVNraWFHUFUpOworI2Vsc2UKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRHcmFw
aGljc0NvbnRleHQzRD4gY3JlYXRlKEhvc3RXaW5kb3cqKTsKKyNlbmRpZgogICAgIH5TaGFyZWRH
cmFwaGljc0NvbnRleHQzRCgpOwogCiAgICAgLy8gRnVuY3Rpb25zIHRoYXQgZGVsZWdhdGUgZGly
ZWN0bHkgdG8gR3JhcGhpY3NDb250ZXh0M0QsIHdpdGggY2FjaGluZwpAQCAtMTM5LDEyICsxNDMs
MTYgQEAgcHVibGljOgogICAgIHZvaWQgdXNlTG9vcEJsaW5uRXh0ZXJpb3JQcm9ncmFtKHVuc2ln
bmVkIHZlcnRleE9mZnNldCwgdW5zaWduZWQga2xtT2Zmc2V0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mLCBjb25zdCBDb2xvciYpOwogICAgIERyYXdpbmdCdWZmZXIqIGdldE9mZnNjcmVlbkJ1ZmZl
cih1bnNpZ25lZCBpbmRleCwgY29uc3QgSW50U2l6ZSYpOwogCi0jaWYgRU5BQkxFKFNLSUFfR1BV
KQorI2lmIFVTRShTS0lBKQogICAgIEdyQ29udGV4dCogZ3JDb250ZXh0KCk7CiAjZW5kaWYKIAog
cHJpdmF0ZToKKyNpZiBVU0UoU0tJQSkKKyAgICBTaGFyZWRHcmFwaGljc0NvbnRleHQzRChQYXNz
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0cjxTb2xpZEZpbGxTaGFkZXI+LCBQ
YXNzT3duUHRyPFRleFNoYWRlcj4sIFBhc3NPd25QdHI8QmljdWJpY1NoYWRlcj4sIFBhc3NPd25B
cnJheVB0cjxPd25QdHI8Q29udm9sdXRpb25TaGFkZXI+ID4sIGJvb2wgdXNlU2tpYUdQVSk7Cisj
ZWxzZQogICAgIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+LCBQYXNzT3duUHRyPFNvbGlkRmlsbFNoYWRlcj4sIFBhc3NPd25QdHI8VGV4U2hhZGVy
PiwgUGFzc093blB0cjxCaWN1YmljU2hhZGVyPiwgUGFzc093bkFycmF5UHRyPE93blB0cjxDb252
b2x1dGlvblNoYWRlcj4gPik7CisjZW5kaWYKIAogICAgIC8vIFVzZWQgdG8gaW1wbGVtZW50IHJl
bW92ZVRleHR1cmVzRm9yKCksIHNlZSB0aGUgY29tbWVudCBhYm92ZS4KICAgICBzdGF0aWMgSGFz
aFNldDxTaGFyZWRHcmFwaGljc0NvbnRleHQzRCo+KiBhbGxDb250ZXh0cygpOwpAQCAtMTcwLDgg
KzE3OCw5IEBAIHByaXZhdGU6CiAKICAgICBXVEY6OlZlY3RvcjxSZWZQdHI8RHJhd2luZ0J1ZmZl
cj4gPiBtX29mZnNjcmVlbkJ1ZmZlcnM7CiAKLSNpZiBFTkFCTEUoU0tJQV9HUFUpCisjaWYgVVNF
KFNLSUEpCiAgICAgR3JDb250ZXh0KiBtX2dyQ29udGV4dDsKKyAgICBib29sIG1fdXNlU2tpYUdQ
VTsKICNlbmRpZgogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9JbWFnZVNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAkocmV2aXNpb24gODQ0ODgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY2LDcgKzY2LDYgQEAgZW51bSBSZXNhbXBsaW5nTW9kZSB7CiAgICAgUkVTQU1QTEVf
QVdFU09NRSwKIH07CiAKLSNpZiAhRU5BQkxFKFNLSUFfR1BVKQogc3RhdGljIFJlc2FtcGxpbmdN
b2RlIGNvbXB1dGVSZXNhbXBsaW5nTW9kZShQbGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNv
bnRleHQsIGNvbnN0IE5hdGl2ZUltYWdlU2tpYSYgYml0bWFwLCBpbnQgc3JjV2lkdGgsIGludCBz
cmNIZWlnaHQsIGZsb2F0IGRlc3RXaWR0aCwgZmxvYXQgZGVzdEhlaWdodCkKIHsKICAgICBpZiAo
cGxhdGZvcm1Db250ZXh0LT5oYXNJbWFnZVJlc2FtcGxpbmdIaW50KCkpIHsKQEAgLTE1MSw3ICsx
NTAsNiBAQCBzdGF0aWMgUmVzYW1wbGluZ01vZGUgY29tcHV0ZVJlc2FtcGxpbmdNCiAgICAgCiAg
ICAgcmV0dXJuIFJFU0FNUExFX0xJTkVBUjsKIH0KLSNlbmRpZgogCiAvLyBEcmF3cyB0aGUgZ2l2
ZW4gYml0bWFwIHRvIHRoZSBnaXZlbiBjYW52YXMuIFRoZSBzdWJzZXQgb2YgdGhlIHNvdXJjZSBi
aXRtYXAKIC8vIGlkZW50aWZpZWQgYnkgc3JjX3JlY3QgaXMgZHJhd24gdG8gdGhlIGdpdmVuIGRl
c3RpbmF0aW9uIHJlY3QuIFRoZSBiaXRtYXAKQEAgLTI2NywxNCArMjY1LDExIEBAIHN0YXRpYyB2
b2lkIHBhaW50U2tCaXRtYXAoUGxhdGZvcm1Db250ZXgKICAgICBTa0NhbnZhcyogY2FudmFzID0g
cGxhdGZvcm1Db250ZXh0LT5jYW52YXMoKTsKIAogICAgIFJlc2FtcGxpbmdNb2RlIHJlc2FtcGxp
bmc7Ci0jaWYgRU5BQkxFKFNLSUFfR1BVKQotICAgIHJlc2FtcGxpbmcgPSBSRVNBTVBMRV9MSU5F
QVI7Ci0jZWxzZQotICAgIHJlc2FtcGxpbmcgPSBwbGF0Zm9ybUNvbnRleHQtPnByaW50aW5nKCkg
PyBSRVNBTVBMRV9OT05FIDoKLSAgICAgICAgY29tcHV0ZVJlc2FtcGxpbmdNb2RlKHBsYXRmb3Jt
Q29udGV4dCwgYml0bWFwLCBzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTa1NjYWxhclRvRmxvYXQoZGVzdFJlY3Qud2lkdGgo
KSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1NjYWxhclRvRmxvYXQoZGVzdFJl
Y3QuaGVpZ2h0KCkpKTsKLSNlbmRpZgorICAgIGlmIChwbGF0Zm9ybUNvbnRleHQtPnVzZVNraWFH
UFUoKSkKKyAgICAgICAgcmVzYW1wbGluZyA9IFJFU0FNUExFX0xJTkVBUjsKKyAgICBlbHNlCisg
ICAgICAgIHJlc2FtcGxpbmcgPSBwbGF0Zm9ybUNvbnRleHQtPnByaW50aW5nKCkgPyBSRVNBTVBM
RV9OT05FIDoKKyAgICAgICAgICAgIGNvbXB1dGVSZXNhbXBsaW5nTW9kZShwbGF0Zm9ybUNvbnRl
eHQsIGJpdG1hcCwgc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgpLCBTa1NjYWxhclRv
RmxvYXQoZGVzdFJlY3Qud2lkdGgoKSksIFNrU2NhbGFyVG9GbG9hdChkZXN0UmVjdC5oZWlnaHQo
KSkpOwogICAgIGlmIChyZXNhbXBsaW5nID09IFJFU0FNUExFX0FXRVNPTUUpIHsKICAgICAgICAg
ZHJhd1Jlc2FtcGxlZEJpdG1hcCgqY2FudmFzLCBwYWludCwgYml0bWFwLCBzcmNSZWN0LCBkZXN0
UmVjdCk7CiAgICAgfSBlbHNlIHsKQEAgLTM3MCwxNyArMzY1LDE0IEBAIHZvaWQgSW1hZ2U6OmRy
YXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCoKIAogICAgIC8vIENvbXB1dGUgdGhlIHJlc2FtcGxp
bmcgbW9kZS4KICAgICBSZXNhbXBsaW5nTW9kZSByZXNhbXBsaW5nOwotI2lmIEVOQUJMRShTS0lB
X0dQVSkKLSAgICByZXNhbXBsaW5nID0gUkVTQU1QTEVfTElORUFSOwotI2Vsc2UKLSAgICBpZiAo
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnByaW50aW5nKCkpCi0gICAgICByZXNhbXBsaW5n
ID0gUkVTQU1QTEVfTElORUFSOworICAgIGlmIChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
dXNlU2tpYUdQVSgpKQorICAgICAgICByZXNhbXBsaW5nID0gUkVTQU1QTEVfTElORUFSOwogICAg
IGVsc2UgewotICAgICAgcmVzYW1wbGluZyA9IGNvbXB1dGVSZXNhbXBsaW5nTW9kZShjb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKSwgKmJpdG1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Qml0bWFwV2lkdGgsIGRlc3RC
aXRtYXBIZWlnaHQpOworICAgICAgICBpZiAoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnBy
aW50aW5nKCkpCisgICAgICAgICAgICByZXNhbXBsaW5nID0gUkVTQU1QTEVfTElORUFSOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICByZXNhbXBsaW5nID0gY29tcHV0ZVJlc2FtcGxpbmdNb2Rl
KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCAqYml0bWFwLCBzcmNSZWN0LndpZHRoKCksIHNy
Y1JlY3QuaGVpZ2h0KCksIGRlc3RCaXRtYXBXaWR0aCwgZGVzdEJpdG1hcEhlaWdodCk7CiAgICAg
fQotI2VuZGlmCiAKICAgICAvLyBMb2FkIHRoZSB0cmFuc2Zvcm0gV2ViS2l0IHJlcXVlc3RlZC4K
ICAgICBTa01hdHJpeCBtYXRyaXgocGF0dGVyblRyYW5zZm9ybSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1D
b250ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDg0NDg4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTEsMTEgKzUxLDkgQEAKICNpbmNsdWRlICJTa0Rhc2hQYXRoRWZmZWN0LmgiCiAjaW5jbHVk
ZSAiU2tTaGFkZXIuaCIKIAotI2lmIEVOQUJMRShTS0lBX0dQVSkKICNpbmNsdWRlICJHckNvbnRl
eHQuaCIKICNpbmNsdWRlICJTa0dwdURldmljZS5oIgogI2luY2x1ZGUgIlNrR3B1RGV2aWNlRmFj
dG9yeS5oIgotI2VuZGlmCiAKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUg
PHd0Zi9Pd25BcnJheVB0ci5oPgpAQCAtMjE3LDcgKzIxNSw3IEBAIFBsYXRmb3JtQ29udGV4dFNr
aWE6OlBsYXRmb3JtQ29udGV4dFNraWEKICAgICA6IG1fY2FudmFzKGNhbnZhcykKICAgICAsIG1f
cHJpbnRpbmcoZmFsc2UpCiAgICAgLCBtX2RyYXdpbmdUb0ltYWdlQnVmZmVyKGZhbHNlKQotICAg
ICwgbV91c2VHUFUoZmFsc2UpCisgICAgLCBtX2FjY2VsZXJhdGlvbk1vZGUoTm9BY2NlbGVyYXRp
b24pCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICAsIG1fZ3B1Q2FudmFz
KDApCiAjZW5kaWYKQEAgLTIzMSwxNCArMjI5LDEyIEBAIFBsYXRmb3JtQ29udGV4dFNraWE6On5Q
bGF0Zm9ybUNvbnRleHRTa2kKIHsKICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQog
ICAgIGlmIChtX2dwdUNhbnZhcykgewotI2lmIEVOQUJMRShTS0lBX0dQVSkKICAgICAgICAgLy8g
bWFrZSBzdXJlIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byB0aGlzIHBsYXRmb3JtIGNvbnRleHQgaGFz
IGJlZW4gZmx1c2hlZAotICAgICAgICBpZiAoIW1fdXNlR1BVKSB7CisgICAgICAgIGlmICh1c2VT
a2lhR1BVKCkpIHsKICAgICAgICAgICAgIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
ID0gbV9ncHVDYW52YXMtPmNvbnRleHQoKTsKICAgICAgICAgICAgIGNvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOwogICAgICAgICAgICAgY29udGV4dC0+Z3JDb250ZXh0KCktPmZsdXNoKDAp
OwogICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAgbV9ncHVDYW52YXMtPmRyYXdpbmdCdWZmZXIo
KS0+c2V0V2lsbFB1Ymxpc2hDYWxsYmFjaygwKTsKICAgICB9CiAjZW5kaWYKQEAgLTYxNSwxMSAr
NjExLDkgQEAgY29uc3QgU2tCaXRtYXAqIFBsYXRmb3JtQ29udGV4dFNraWE6OmJpdAogCiBib29s
IFBsYXRmb3JtQ29udGV4dFNraWE6OmlzTmF0aXZlRm9udFJlbmRlcmluZ0FsbG93ZWQoKQogewot
I2lmIEVOQUJMRShTS0lBX0dQVSkKLSAgICByZXR1cm4gZmFsc2U7Ci0jZWxzZQorICAgIGlmICht
X2FjY2VsZXJhdGlvbk1vZGUgPT0gU2tpYUdQVSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IHJldHVybiBza2lhOjpTdXBwb3J0c1BsYXRmb3JtUGFpbnQobV9jYW52YXMpOwotI2VuZGlmCiB9
CiAKIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6Z2V0SW1hZ2VSZXNhbXBsaW5nSGludChJbnRT
aXplKiBzcmNTaXplLCBGbG9hdFNpemUqIGRzdFNpemUpIGNvbnN0CkBAIC03MjYsNDUgKzcyMCw0
NyBAQCBwcml2YXRlOgogCiB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldFNoYXJlZEdyYXBo
aWNzQ29udGV4dDNEKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBEcmF3aW5nQnVm
ZmVyKiBkcmF3aW5nQnVmZmVyLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQogeworICAg
IG1fYWNjZWxlcmF0aW9uTW9kZSA9IE5vQWNjZWxlcmF0aW9uOwogI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCiAgICAgaWYgKGNvbnRleHQgJiYgZHJhd2luZ0J1ZmZlcikgewotICAg
ICAgICBtX3VzZUdQVSA9IHRydWU7CiAgICAgICAgIG1fZ3B1Q2FudmFzID0gbmV3IEdyYXBoaWNz
Q29udGV4dEdQVShjb250ZXh0LCBkcmF3aW5nQnVmZmVyLCBzaXplKTsKICAgICAgICAgbV91cGxv
YWRUZXh0dXJlLmNsZWFyKCk7CiAgICAgICAgIGRyYXdpbmdCdWZmZXItPnNldFdpbGxQdWJsaXNo
Q2FsbGJhY2soV2lsbFB1Ymxpc2hDYWxsYmFja0ltcGw6OmNyZWF0ZSh0aGlzKSk7CiAKLSNpZiBF
TkFCTEUoU0tJQV9HUFUpCi0gICAgICAgIG1fdXNlR1BVID0gZmFsc2U7Ci0gICAgICAgIGNvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgICAgICBtX2dwdUNhbnZhcy0+YmluZEZyYW1l
YnVmZmVyKCk7Ci0KKyAgICAgICAgLy8gdXNlIHNraWEgZ3B1IHJlbmRlcmluZyBpZiBhdmFpbGFi
bGUKICAgICAgICAgR3JDb250ZXh0KiBnciA9IGNvbnRleHQtPmdyQ29udGV4dCgpOwotICAgICAg
ICBnci0+cmVzZXRDb250ZXh0KCk7Ci0gICAgICAgIGRyYXdpbmdCdWZmZXItPnNldEdyQ29udGV4
dChncik7CisgICAgICAgIGlmIChncikgeworICAgICAgICAgICAgbV9hY2NlbGVyYXRpb25Nb2Rl
ID0gU2tpYUdQVTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgICAgICAgICBtX2dwdUNhbnZhcy0+YmluZEZyYW1lYnVmZmVyKCk7
CiAKLSAgICAgICAgR3JQbGF0Zm9ybVN1cmZhY2VEZXNjIGRyYXdCdWZEZXNjOwotICAgICAgICBk
cmF3aW5nQnVmZmVyLT5nZXRHclBsYXRmb3JtU3VyZmFjZURlc2MoJmRyYXdCdWZEZXNjKTsKLSAg
ICAgICAgR3JUZXh0dXJlKiBkcmF3QnVmVGV4ID0gc3RhdGljX2Nhc3Q8R3JUZXh0dXJlKj4oZ3It
PmNyZWF0ZVBsYXRmb3JtU3VyZmFjZShkcmF3QnVmRGVzYykpOwotICAgICAgICBTa0RldmljZUZh
Y3RvcnkqIGZhY3RvcnkgPSBuZXcgU2tHcHVEZXZpY2VGYWN0b3J5KGdyLCBkcmF3QnVmVGV4KTsK
LSAgICAgICAgZHJhd0J1ZlRleC0+dW5yZWYoKTsKLQotICAgICAgICBTa0RldmljZSogZGV2aWNl
ID0gZmFjdG9yeS0+bmV3RGV2aWNlKG1fY2FudmFzLCBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25m
aWcsIGRyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgpLCBkcmF3aW5nQnVmZmVyLT5zaXplKCku
aGVpZ2h0KCksIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgIG1fY2FudmFzLT5zZXREZXZpY2UoZGV2
aWNlKS0+dW5yZWYoKTsKLSAgICAgICAgbV9jYW52YXMtPnNldERldmljZUZhY3RvcnkoZmFjdG9y
eSk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGdyLT5yZXNldENvbnRleHQoKTsKKyAgICAgICAgICAg
IGRyYXdpbmdCdWZmZXItPnNldEdyQ29udGV4dChncik7CisKKyAgICAgICAgICAgIEdyUGxhdGZv
cm1TdXJmYWNlRGVzYyBkcmF3QnVmRGVzYzsKKyAgICAgICAgICAgIGRyYXdpbmdCdWZmZXItPmdl
dEdyUGxhdGZvcm1TdXJmYWNlRGVzYygmZHJhd0J1ZkRlc2MpOworICAgICAgICAgICAgR3JUZXh0
dXJlKiBkcmF3QnVmVGV4ID0gc3RhdGljX2Nhc3Q8R3JUZXh0dXJlKj4oZ3ItPmNyZWF0ZVBsYXRm
b3JtU3VyZmFjZShkcmF3QnVmRGVzYykpOworICAgICAgICAgICAgU2tEZXZpY2VGYWN0b3J5KiBm
YWN0b3J5ID0gbmV3IFNrR3B1RGV2aWNlRmFjdG9yeShnciwgZHJhd0J1ZlRleCk7CisgICAgICAg
ICAgICBkcmF3QnVmVGV4LT51bnJlZigpOworCisgICAgICAgICAgICBTa0RldmljZSogZGV2aWNl
ID0gZmFjdG9yeS0+bmV3RGV2aWNlKG1fY2FudmFzLCBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25m
aWcsIGRyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgpLCBkcmF3aW5nQnVmZmVyLT5zaXplKCku
aGVpZ2h0KCksIGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICBtX2NhbnZhcy0+c2V0RGV2aWNl
KGRldmljZSktPnVucmVmKCk7CisgICAgICAgICAgICBtX2NhbnZhcy0+c2V0RGV2aWNlRmFjdG9y
eShmYWN0b3J5KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2FjY2VsZXJhdGlvbk1v
ZGUgPSBHUFU7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc3luY1NvZnR3YXJlQ2FudmFzKCk7CiAg
ICAgICAgIG1fdXBsb2FkVGV4dHVyZS5jbGVhcigpOwogICAgICAgICBtX2dwdUNhbnZhcy5jbGVh
cigpOwotICAgICAgICBtX3VzZUdQVSA9IGZhbHNlOwogICAgIH0KICNlbmRpZgogfQogCiB2b2lk
IFBsYXRmb3JtQ29udGV4dFNraWE6OnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKSBjb25zdAogewot
ICAgIGlmICghbV91c2VHUFUpIHsKLSNpZiBFTkFCTEUoU0tJQV9HUFUpCisgICAgaWYgKG1fYWNj
ZWxlcmF0aW9uTW9kZSA9PSBTa2lhR1BVKSB7CisjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykKICAgICAgICAgaWYgKG1fZ3B1Q2FudmFzKQogICAgICAgICAgICAgbV9ncHVDYW52YXMt
PmNvbnRleHQoKS0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAjZW5kaWYKQEAgLTgwNiw3ICs4MDIs
NyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnByZXBhcmVGb3JTb2Z0CiAKIHZvaWQgUGxh
dGZvcm1Db250ZXh0U2tpYTo6cHJlcGFyZUZvckhhcmR3YXJlRHJhdygpIGNvbnN0CiB7Ci0gICAg
aWYgKCFtX3VzZUdQVSkKKyAgICBpZiAoIShtX2FjY2VsZXJhdGlvbk1vZGUgPT0gR1BVKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fYmFja2luZ1N0b3JlU3RhdGUgPT0gU29mdHdhcmUp
IHsKQEAgLTgyMiw4ICs4MTgsOCBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnByZXBhcmVG
b3JIYXJkCiAKIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c3luY1NvZnR3YXJlQ2FudmFzKCkg
Y29uc3QKIHsKLSAgICBpZiAoIW1fdXNlR1BVKSB7Ci0jaWYgRU5BQkxFKFNLSUFfR1BVKQorICAg
IGlmIChtX2FjY2VsZXJhdGlvbk1vZGUgPT0gU2tpYUdQVSkgeworI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCiAgICAgICAgIGlmIChtX2dwdUNhbnZhcykKICAgICAgICAgICAgIG1f
Z3B1Q2FudmFzLT5jb250ZXh0KCktPm1ha2VDb250ZXh0Q3VycmVudCgpOwogI2VuZGlmCkBAIC04
NDQsNyArODQwLDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzeW5jU29mdHdhcmVDYQog
CiB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6Om1hcmtEaXJ0eVJlY3QoY29uc3QgSW50UmVjdCYg
cmVjdCkKIHsKLSAgICBpZiAoIW1fdXNlR1BVKQorICAgIGlmIChtX2FjY2VsZXJhdGlvbk1vZGUg
IT0gR1BVKQogICAgICAgICByZXR1cm47CiAKICAgICBzd2l0Y2ggKG1fYmFja2luZ1N0b3JlU3Rh
dGUpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZv
cm1Db250ZXh0U2tpYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCShyZXZpc2lvbiA4NDQ4OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCwxMiBAQCBjbGFzcyBUZXh0dXJlOwogY2xhc3Mg
UGxhdGZvcm1Db250ZXh0U2tpYSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGxhdGZvcm1D
b250ZXh0U2tpYSk7CiBwdWJsaWM6CisgICAgZW51bSBBY2NlbGVyYXRpb25Nb2RlIHsKKyAgICAg
ICAgTm9BY2NlbGVyYXRpb24sCisgICAgICAgIEdQVSwKKyAgICAgICAgU2tpYUdQVQorICAgIH07
CisKICAgICAvLyBGb3IgcHJpbnRpbmcsIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgY2FudmFzLiBj
YW52YXMgY2FuIGJlIE5VTEwuIElmIHlvdQogICAgIC8vIHN1cHBseSBhIE5VTEwgY2FudmFzLCB5
b3UgY2FuIGFsc28gY2FsbCBzZXRDYW52YXMgbGF0ZXIuCiAgICAgUGxhdGZvcm1Db250ZXh0U2tp
YShTa0NhbnZhcyopOwpAQCAtMTc4LDcgKzE4NCw5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY2Fu
QWNjZWxlcmF0ZSgpIGNvbnN0OwogICAgIGJvb2wgY2FudmFzQ2xpcEFwcGxpZWQoKSBjb25zdDsK
LSAgICBib29sIHVzZUdQVSgpIHsgcmV0dXJuIG1fdXNlR1BVOyB9CisgICAgQWNjZWxlcmF0aW9u
TW9kZSBhY2NlbGVyYXRpb25Nb2RlKCkgY29uc3QgeyByZXR1cm4gbV9hY2NlbGVyYXRpb25Nb2Rl
OyB9CisgICAgYm9vbCB1c2VHUFUoKSBjb25zdCB7IHJldHVybiBtX2FjY2VsZXJhdGlvbk1vZGUg
PT0gR1BVOyB9CisgICAgYm9vbCB1c2VTa2lhR1BVKCkgY29uc3QgeyByZXR1cm4gbV9hY2NlbGVy
YXRpb25Nb2RlID09IFNraWFHUFU7IH0KICAgICB2b2lkIHNldFNoYXJlZEdyYXBoaWNzQ29udGV4
dDNEKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiwgRHJhd2luZ0J1ZmZlciosIGNvbnN0IEludFNp
emUmKTsKICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIEdyYXBoaWNzQ29u
dGV4dEdQVSogZ3B1Q2FudmFzKCkgY29uc3QgeyByZXR1cm4gbV9ncHVDYW52YXMuZ2V0KCk7IH0K
QEAgLTIyMSw3ICsyMjksNyBAQCBwcml2YXRlOgogICAgIEZsb2F0U2l6ZSBtX2ltYWdlUmVzYW1w
bGluZ0hpbnREc3RTaXplOwogICAgIGJvb2wgbV9wcmludGluZzsKICAgICBib29sIG1fZHJhd2lu
Z1RvSW1hZ2VCdWZmZXI7Ci0gICAgYm9vbCBtX3VzZUdQVTsKKyAgICBBY2NlbGVyYXRpb25Nb2Rl
IG1fYWNjZWxlcmF0aW9uTW9kZTsKICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQog
ICAgIE93blB0cjxHcmFwaGljc0NvbnRleHRHUFU+IG1fZ3B1Q2FudmFzOwogICAgIG11dGFibGUg
UmVmUHRyPFRleHR1cmU+IG1fdXBsb2FkVGV4dHVyZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90588</attachid>
            <date>2011-04-21 13:31:47 -0700</date>
            <delta_ts>2011-04-26 11:54:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58683-20110421163147.patch</filename>
            <type>text/plain</type>
            <size>22428</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0NDk4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTEtMDQtMjEgIEp1c3RpbiBO
b3Zvc2FkICA8anVub3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtDaHJvbWl1bV0gRXhwb3NlIHNraWEgZ3B1IGNhbnZhcyBy
ZW5kZXJpbmcgYXMgYSBydW50aW1lIGZsYWcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU4NjgzCisgICAgICAgIHJlcGxhY2UgdGhlIFNLSUFfR1BVIGNv
bXBpbGUgZmxhZyBieSB0aGUgcHJlLWV4aXN0aW5nCisgICAgICAgIGFjY2VsZXJhdGVkRHJhd2lu
Z0VuYWJsZWQgZmxhZy4gTW9zdCBjb2RlIGNoYW5nZXMgYXJlIHRyaXZpYWw6CisgICAgICAgIGNv
bXBpbGUtdGltZSBjb25kaXRpb25hbHMgb24gU0tJQV9HUFUgd2VyZSBlaXRoZXIgcmVwbGFjZWQg
d2l0aAorICAgICAgICBhIHJ1bi10aW1lIGNoZWNrLCBvciBhIGNvbXBpbGUgdGltZSBjaGVjayBv
biBVU0UoU0tJQSkgCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBDb3ZlcmVkIGJ5IGV4aXN0aW5n
IHRlc3RzLgorCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0R2xv
YmFsQ29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UGFnZTo6c2hhcmVkR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICBBZGRl
ZCBjaGVjayBmb3IgdGhlIGFjY2VsZXJhdGVkRHJhd2luZyBmbGFnLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRyYXdpbmdCdWZmZXI6OnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICBPbiBTa2lhIGJ1
aWxkcywgdGhpcyBtZXRob3Mgbm93IHJlY2VpdmVzIGEgYm9vbCBhcmcgdG8gdHVybiBvbgorICAg
ICAgICBHUFUtYWNjZWxlcmF0ZWQgc2tpYSByZW5kZXJpbmcKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZEdyYXBoaWNzQ29udGV4dDNEOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6flNoYXJlZEdyYXBoaWNzQ29udGV4
dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpnckNvbnRl
eHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRl
eHQzRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVSZXNhbXBsaW5nTW9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpwYWludFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpkcmF3UGF0dGVy
bik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29u
dGV4dFNraWEpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6flBsYXRm
b3JtQ29udGV4dFNraWEpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6
aXNOYXRpdmVGb250UmVuZGVyaW5nQWxsb3dlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUNvbnRleHRTa2lhOjpzZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpwcmVwYXJlRm9yU29mdHdhcmVEcmF3KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnByZXBhcmVGb3JIYXJkd2FyZURyYXcp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6c3luY1NvZnR3YXJlQ2Fu
dmFzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6Om1hcmtEaXJ0eVJl
Y3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tp
YS5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6YWNjZWxlcmF0aW9u
TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjp1c2VHUFUpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6dXNlU2tpYUdQVSk6CisKIDIw
MTEtMDQtMjEgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGlyayBTY2h1bHplLgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZp
c2lvbiA4NDQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzOCw4ICs1MzgsOCBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0R2xvYmFsCiAgICAgaWYgKCFjKQogICAgICAgICBy
ZXR1cm47CiAgICAgYy0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wKTsKLSNpZiBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKSAmJiAhRU5BQkxFKFNLSUFfR1BVKQotICAgIGlmIChpc0FjY2Vs
ZXJhdGVkKCkgJiYgb3AgIT0gQ29tcG9zaXRlU291cmNlT3ZlcikgeworI2lmIEVOQUJMRShBQ0NF
TEVSQVRFRF8yRF9DQU5WQVMpCisgICAgaWYgKGlzQWNjZWxlcmF0ZWQoKSAmJiAhbV9jb250ZXh0
M0QtPnN1cHBvcnRzQ29tcG9zaXRlT3Aob3ApKSB7CiAgICAgICAgIGMtPnNldFNoYXJlZEdyYXBo
aWNzQ29udGV4dDNEKDAsIDAsIEludFNpemUoKSk7CiAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci5j
bGVhcigpOwogICAgICAgICBtX2NvbnRleHQzRC5jbGVhcigpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwCShyZXZpc2lvbiA4NDQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc1MiwxMCArNzUyLDEzIEBAIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNE
KiBQYWdlOjpzaGFyZWRHcmEKIHsKICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQog
ICAgIGlmICghbV9zaGFyZWRHcmFwaGljc0NvbnRleHQzRCkKLSAgICAgICAgbV9zaGFyZWRHcmFw
aGljc0NvbnRleHQzRCA9IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoY2hyb21lKCkp
OwotCi0gICAgcmV0dXJuIG1fc2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuZ2V0KCk7CisjaWYgVVNF
KFNLSUEpCisgICAgICAgIG1fc2hhcmVkR3JhcGhpY3NDb250ZXh0M0QgPSBTaGFyZWRHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlKGNocm9tZSgpLCBzZXR0aW5ncygpLT5hY2NlbGVyYXRlZERyYXdp
bmdFbmFibGVkKCkgPyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6VXNlU2tpYUdQVSA6IDApOwog
I2Vsc2UKKyAgICAgICAgbV9zaGFyZWRHcmFwaGljc0NvbnRleHQzRCA9IFNoYXJlZEdyYXBoaWNz
Q29udGV4dDNEOjpjcmVhdGUoY2hyb21lKCksIDApOworI2VuZGlmCisgICAgcmV0dXJuIG1fc2hh
cmVkR3JhcGhpY3NDb250ZXh0M0QuZ2V0KCk7CisjZWxzZSAvLyAhRU5BQkxFKEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUykKICAgICByZXR1cm4gMDsKICNlbmRpZgogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9E
cmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA4NDQ4OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRC5oIgogI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCiAKLSNpZiBFTkFC
TEUoU0tJQV9HUFUpCisjaWYgVVNFKFNLSUEpCiAjaW5jbHVkZSAiR3JDb250ZXh0LmgiCiAjZW5k
aWYKIApAQCAtODcsNyArODcsNyBAQCBEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKEdyYXBo
aWNzQ29uCiAgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxlQ29s
b3JCdWZmZXIoMCkKICAgICAsIG1faW50ZXJuYWwobmV3IERyYXdpbmdCdWZmZXJJbnRlcm5hbCkK
LSNpZiBFTkFCTEUoU0tJQV9HUFUpCisjaWYgVVNFKFNLSUEpCiAgICAgLCBtX2dyQ29udGV4dCgw
KQogI2VuZGlmCiB7CkBAIC0xMzUsNyArMTM1LDcgQEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpwdWJs
aXNoVG9QbGF0Zm9ybUxheQogICAgIC8vIGhhcHBlbnMgYmVmb3JlIHRoZSBjb21wb3NpdG9yIGRy
YXdzLiAgVGhpcyBtZWFucyB3ZSBtaWdodCBkcmF3IHN0YWxlIGZyYW1lcyBzb21ldGltZXMuICBJ
ZGVhbGx5IHRoaXMKICAgICAvLyB3b3VsZCBpbnNlcnQgYSBmZW5jZSBpbnRvIHRoZSBjaGlsZCBj
b21tYW5kIHN0cmVhbSB0aGF0IHRoZSBjb21wb3NpdG9yIGNvdWxkIHdhaXQgZm9yLgogICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWYgRU5BQkxFKFNLSUFfR1BVKQorI2lm
IFVTRShTS0lBKQogICAgIGlmIChtX2dyQ29udGV4dCkKICAgICAgICAgbV9nckNvbnRleHQtPmZs
dXNoKDApOwogI2VuZGlmCkBAIC0xNjYsNyArMTY2LDcgQEAgUGxhdGZvcm0zRE9iamVjdCBEcmF3
aW5nQnVmZmVyOjpwbGF0Zm9ybQogICAgIHJldHVybiBtX2NvbG9yQnVmZmVyOwogfQogCi0jaWYg
RU5BQkxFKFNLSUFfR1BVKQorI2lmIFVTRShTS0lBKQogdm9pZCBEcmF3aW5nQnVmZmVyOjpzZXRH
ckNvbnRleHQoR3JDb250ZXh0KiBjb250ZXh0KQogewogICAgIC8vIFdlIGp1c3QgdGFrZSBhIHB0
ciB3aXRob3V0IHJlZmVyZW5jaW5nIGl0LCBhcyB3ZSByZXF1aXJlIHRoYXQgd2UgbmV2ZXIgb3V0
bGl2ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdC
dWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvRHJhd2luZ0J1ZmZlci5oCShyZXZpc2lvbiA4NDQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDcgKzQyLDcgQEAKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjZW5kaWYKIAotI2lmIEVO
QUJMRShTS0lBX0dQVSkKKyNpZiBVU0UoU0tJQSkKIGNsYXNzIEdyQ29udGV4dDsKIHN0cnVjdCBH
clBsYXRmb3JtU3VyZmFjZURlc2M7CiAjZW5kaWYKQEAgLTEwMyw3ICsxMDMsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRXaWxsUHVibGlzaENhbGxiYWNrKFBhc3NPd25QdHI8V2lsbFB1Ymxpc2hD
YWxsYmFjaz4gY2FsbGJhY2spIHsgbV9jYWxsYmFjayA9IGNhbGxiYWNrOyB9CiAjZW5kaWYKIAot
I2lmIEVOQUJMRShTS0lBX0dQVSkKKyNpZiBVU0UoU0tJQSkKICAgICB2b2lkIHNldEdyQ29udGV4
dChHckNvbnRleHQqIGN0eCk7CiAgICAgdm9pZCBnZXRHclBsYXRmb3JtU3VyZmFjZURlc2MoR3JQ
bGF0Zm9ybVN1cmZhY2VEZXNjKik7CiAjZW5kaWYKQEAgLTE0NSw3ICsxNDUsNyBAQCBwcml2YXRl
OgogICAgIFJldGFpblB0cjxXZWJHTExheWVyPiBtX3BsYXRmb3JtTGF5ZXI7CiAjZW5kaWYKIAot
I2lmIEVOQUJMRShTS0lBX0dQVSkKKyNpZiBVU0UoU0tJQSkKICAgICBHckNvbnRleHQqIG1fZ3JD
b250ZXh0OwogI2VuZGlmCiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3Bw
CShyZXZpc2lvbiA4NDQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMx
LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpCi0KICNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIgogCiAjaW5jbHVk
ZSAiQWZmaW5lVHJhbnNmb3JtLmgiCkBAIC00NiwxMyArNDUsMTQgQEAKICNpbmNsdWRlICJTb2xp
ZEZpbGxTaGFkZXIuaCIKICNpbmNsdWRlICJUZXhTaGFkZXIuaCIKIAotI2lmIEVOQUJMRShTS0lB
X0dQVSkKKyNpZiBVU0UoU0tJQSkKICNpbmNsdWRlICJHckNvbnRleHQuaCIKKyNlbmRpZgorCiAv
LyBMaW1pdCB0aGUgbnVtYmVyIG9mIHRleHR1cmVzIHdlIGhvbGQgaW4gdGhlIGJpdG1hcC0+dGV4
dHVyZSBjYWNoZS4KIHN0YXRpYyBjb25zdCBpbnQgbWF4VGV4dHVyZUNhY2hlQ291bnQgPSA1MTI7
CiAvLyBMaW1pdCB0aGUgYnl0ZXMgYWxsb2NhdGVkIHRvd2FyZCB0ZXh0dXJlcyBpbiB0aGUgYml0
bWFwLT50ZXh0dXJlIGNhY2hlLgogc3RhdGljIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlQ2FjaGVC
eXRlcyA9IDUwICogMTAyNCAqIDEwMjQ7Ci0jZW5kaWYKIAogI2luY2x1ZGUgPHd0Zi9Pd25BcnJh
eVB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTYxLDcgKzYxLDcgQEAg
c3RhdGljIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlQ2FjaGVCeXRlcwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAvLyBzdGF0aWMKLVBhc3NSZWZQdHI8U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q+IFNo
YXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK1Bh
c3NSZWZQdHI8U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q+IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGUoSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgdW5zaWduZWQgZmxhZ3MpCiB7CiAgICAg
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cjsKICAgICBhdHRyLmRlcHRoID0gZmFs
c2U7CkBAIC04NiwxMCArODYsMTEgQEAgUGFzc1JlZlB0cjxTaGFyZWRHcmFwaGljc0NvbnRleHQz
RD4gU2hhcgogICAgICAgICBpZiAoIWNvbnZvbHV0aW9uU2hhZGVyc1tpXSkKICAgICAgICAgICAg
IHJldHVybiAwOwogICAgIH0KLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZEdyYXBoaWNz
Q29udGV4dDNEKGNvbnRleHQucmVsZWFzZSgpLCBzb2xpZEZpbGxTaGFkZXIucmVsZWFzZSgpLCB0
ZXhTaGFkZXIucmVsZWFzZSgpLCBiaWN1YmljU2hhZGVyLnJlbGVhc2UoKSwgY29udm9sdXRpb25T
aGFkZXJzLnJlbGVhc2UoKSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0QoY29udGV4dC5yZWxlYXNlKCksIHNvbGlkRmlsbFNoYWRlci5yZWxlYXNlKCks
IHRleFNoYWRlci5yZWxlYXNlKCksIGJpY3ViaWNTaGFkZXIucmVsZWFzZSgpLCBjb252b2x1dGlv
blNoYWRlcnMucmVsZWFzZSgpLCBmbGFncykpOwogfQogCi1TaGFyZWRHcmFwaGljc0NvbnRleHQz
RDo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCwgUGFzc093blB0cjxTb2xpZEZpbGxTaGFkZXI+IHNvbGlkRmlsbFNoYWRlciwgUGFz
c093blB0cjxUZXhTaGFkZXI+IHRleFNoYWRlciwgUGFzc093blB0cjxCaWN1YmljU2hhZGVyPiBi
aWN1YmljU2hhZGVyLCBQYXNzT3duQXJyYXlQdHI8T3duUHRyPENvbnZvbHV0aW9uU2hhZGVyPiA+
IGNvbnZvbHV0aW9uU2hhZGVycykKKworU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OlNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIFBh
c3NPd25QdHI8U29saWRGaWxsU2hhZGVyPiBzb2xpZEZpbGxTaGFkZXIsIFBhc3NPd25QdHI8VGV4
U2hhZGVyPiB0ZXhTaGFkZXIsIFBhc3NPd25QdHI8QmljdWJpY1NoYWRlcj4gYmljdWJpY1NoYWRl
ciwgUGFzc093bkFycmF5UHRyPE93blB0cjxDb252b2x1dGlvblNoYWRlcj4gPiBjb252b2x1dGlv
blNoYWRlcnMsIHVuc2lnbmVkIGZsYWdzKQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiAgICAg
LCBtX2JncmFTdXBwb3J0ZWQoZmFsc2UpCiAgICAgLCBtX3F1YWRWZXJ0aWNlcygwKQpAQCAtOTgs
NyArOTksOCBAQCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6U2hhcmVkR3JhcGhpY3NDCiAgICAg
LCBtX2JpY3ViaWNTaGFkZXIoYmljdWJpY1NoYWRlcikKICAgICAsIG1fY29udm9sdXRpb25TaGFk
ZXJzKGNvbnZvbHV0aW9uU2hhZGVycykKICAgICAsIG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlc1N1
cHBvcnRlZChmYWxzZSkKLSNpZiBFTkFCTEUoU0tJQV9HUFUpCisgICAgLCBtX2ZsYWdzKGZsYWdz
KQorI2lmIFVTRShTS0lBKQogICAgICwgbV9nckNvbnRleHQoMCkKICNlbmRpZgogewpAQCAtMTE4
LDcgKzEyMCw3IEBAIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjp+U2hhcmVkR3JhcGhpY3MKIHsK
ICAgICBtX2NvbnRleHQtPmRlbGV0ZUJ1ZmZlcihtX3F1YWRWZXJ0aWNlcyk7CiAgICAgYWxsQ29u
dGV4dHMoKS0+cmVtb3ZlKHRoaXMpOwotI2lmIEVOQUJMRShTS0lBX0dQVSkKKyNpZiBVU0UoU0tJ
QSkKICAgICBHclNhZmVVbnJlZihtX2dyQ29udGV4dCk7CiAjZW5kaWYKIH0KQEAgLTIzMiw2ICsy
MzQsMTUgQEAgYm9vbCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6c3VwcG9ydHNCRwogICAgIHJl
dHVybiBtX2JncmFTdXBwb3J0ZWQ7CiB9CiAKK2Jvb2wgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6
OnN1cHBvcnRzQ29tcG9zaXRlT3AoQ29tcG9zaXRlT3BlcmF0b3Igb3ApIGNvbnN0Cit7ICAgCisj
aWYgVVNFKFNLSUEpCisgICAgcmV0dXJuIG1fZmxhZ3MgJiBVc2VTa2lhR1BVIHx8IG9wID09IENv
bXBvc2l0ZVNvdXJjZU92ZXI7CisjZWxzZQorICAgIHJldHVybiBvcCA9PSBDb21wb3NpdGVTb3Vy
Y2VPdmVyOworI2VuZGlmCit9CisKIFRleHR1cmUqIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpj
cmVhdGVUZXh0dXJlKE5hdGl2ZUltYWdlUHRyIHB0ciwgVGV4dHVyZTo6Rm9ybWF0IGZvcm1hdCwg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIFJlZlB0cjxUZXh0dXJlPiB0ZXh0dXJlID0g
bV90ZXh0dXJlcy5nZXQocHRyKTsKQEAgLTQ2NSw5ICs0NzYsMTEgQEAgRHJhd2luZ0J1ZmZlciog
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OgogICAgIHJldHVybiBtX29mZnNjcmVlbkJ1ZmZlcnNb
aW5kZXhdLmdldCgpOwogfQogCi0jaWYgRU5BQkxFKFNLSUFfR1BVKQorI2lmIFVTRShTS0lBKQog
R3JDb250ZXh0KiBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z3JDb250ZXh0KCkKIHsKKyAgICBp
ZiAoIShtX2ZsYWdzICYgVXNlU2tpYUdQVSkpCisgICAgICAgIHJldHVybiAwOwogICAgIGlmICgh
bV9nckNvbnRleHQpIHsKICAgICAgICAgbV9nckNvbnRleHQgPSBHckNvbnRleHQ6OkNyZWF0ZUdM
U2hhZGVyQ29udGV4dCgpOwogICAgICAgICBtX2dyQ29udGV4dC0+c2V0VGV4dHVyZUNhY2hlTGlt
aXRzKG1heFRleHR1cmVDYWNoZUNvdW50LCBtYXhUZXh0dXJlQ2FjaGVCeXRlcyk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0
M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gODQ0ODgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCi0jaWYgRU5BQkxFKFNLSUFfR1BVKQorI2lmIFVT
RShTS0lBKQogY2xhc3MgR3JDb250ZXh0OwogI2VuZGlmCiAKQEAgLTY1LDcgKzY1LDEzIEBAIHR5
cGVkZWYgSGFzaE1hcDxOYXRpdmVJbWFnZVB0ciwgUmVmUHRyPFQKIAogY2xhc3MgU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0QgOiBwdWJsaWMgUmVmQ291bnRlZDxTaGFyZWRHcmFwaGljc0NvbnRleHQz
RD4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEdyYXBoaWNzQ29udGV4
dDNEPiBjcmVhdGUoSG9zdFdpbmRvdyopOworI2lmIFVTRShTS0lBKQorICAgIGVudW0geworICAg
ICAgICBVc2VTa2lhR1BVID0gMQorICAgIH07CisjZW5kaWYKKworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGUoSG9zdFdpbmRvdyosIHVuc2lnbmVk
IGZsYWdzKTsKICAgICB+U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoKTsKIAogICAgIC8vIEZ1bmN0
aW9ucyB0aGF0IGRlbGVnYXRlIGRpcmVjdGx5IHRvIEdyYXBoaWNzQ29udGV4dDNELCB3aXRoIGNh
Y2hpbmcKQEAgLTExNiw2ICsxMjIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBiaW5kVGV4dHVyZShH
QzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSk7CiAKICAgICBib29sIHN1
cHBvcnRzQkdSQSgpOworICAgIGJvb2wgc3VwcG9ydHNDb21wb3NpdGVPcChDb21wb3NpdGVPcGVy
YXRvcikgY29uc3Q7CiAKICAgICAvLyBDcmVhdGVzIGEgdGV4dHVyZSBhc3NvY2lhdGVkIHdpdGgg
dGhlIGdpdmVuIGltYWdlLiAgSXMgb3duZWQgYnkgdGhpcyBjb250ZXh0J3MKICAgICAvLyBUZXh0
dXJlSGFzaE1hcC4KQEAgLTEzOSwxMiArMTQ2LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHVzZUxv
b3BCbGlubkV4dGVyaW9yUHJvZ3JhbSh1bnNpZ25lZCB2ZXJ0ZXhPZmZzZXQsIHVuc2lnbmVkIGts
bU9mZnNldCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgQ29sb3ImKTsKICAgICBEcmF3
aW5nQnVmZmVyKiBnZXRPZmZzY3JlZW5CdWZmZXIodW5zaWduZWQgaW5kZXgsIGNvbnN0IEludFNp
emUmKTsKIAotI2lmIEVOQUJMRShTS0lBX0dQVSkKKyNpZiBVU0UoU0tJQSkKICAgICBHckNvbnRl
eHQqIGdyQ29udGV4dCgpOwogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgU2hhcmVkR3JhcGhpY3ND
b250ZXh0M0QoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIFBhc3NPd25QdHI8U29saWRG
aWxsU2hhZGVyPiwgUGFzc093blB0cjxUZXhTaGFkZXI+LCBQYXNzT3duUHRyPEJpY3ViaWNTaGFk
ZXI+LCBQYXNzT3duQXJyYXlQdHI8T3duUHRyPENvbnZvbHV0aW9uU2hhZGVyPiA+KTsKKyAgICBT
aGFyZWRHcmFwaGljc0NvbnRleHQzRChQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFz
c093blB0cjxTb2xpZEZpbGxTaGFkZXI+LCBQYXNzT3duUHRyPFRleFNoYWRlcj4sIFBhc3NPd25Q
dHI8QmljdWJpY1NoYWRlcj4sIFBhc3NPd25BcnJheVB0cjxPd25QdHI8Q29udm9sdXRpb25TaGFk
ZXI+ID4sIHVuc2lnbmVkIGZsYWdzKTsKIAogICAgIC8vIFVzZWQgdG8gaW1wbGVtZW50IHJlbW92
ZVRleHR1cmVzRm9yKCksIHNlZSB0aGUgY29tbWVudCBhYm92ZS4KICAgICBzdGF0aWMgSGFzaFNl
dDxTaGFyZWRHcmFwaGljc0NvbnRleHQzRCo+KiBhbGxDb250ZXh0cygpOwpAQCAtMTcwLDcgKzE3
Nyw4IEBAIHByaXZhdGU6CiAKICAgICBXVEY6OlZlY3RvcjxSZWZQdHI8RHJhd2luZ0J1ZmZlcj4g
PiBtX29mZnNjcmVlbkJ1ZmZlcnM7CiAKLSNpZiBFTkFCTEUoU0tJQV9HUFUpCisgICAgdW5zaWdu
ZWQgbV9mbGFnczsKKyNpZiBVU0UoU0tJQSkKICAgICBHckNvbnRleHQqIG1fZ3JDb250ZXh0Owog
I2VuZGlmCiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9J
bWFnZVNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvSW1hZ2VTa2lhLmNwcAkocmV2aXNpb24gODQ0ODgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDcgKzY2LDYgQEAgZW51bSBSZXNhbXBsaW5nTW9kZSB7CiAgICAgUkVTQU1QTEVfQVdFU09N
RSwKIH07CiAKLSNpZiAhRU5BQkxFKFNLSUFfR1BVKQogc3RhdGljIFJlc2FtcGxpbmdNb2RlIGNv
bXB1dGVSZXNhbXBsaW5nTW9kZShQbGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQs
IGNvbnN0IE5hdGl2ZUltYWdlU2tpYSYgYml0bWFwLCBpbnQgc3JjV2lkdGgsIGludCBzcmNIZWln
aHQsIGZsb2F0IGRlc3RXaWR0aCwgZmxvYXQgZGVzdEhlaWdodCkKIHsKICAgICBpZiAocGxhdGZv
cm1Db250ZXh0LT5oYXNJbWFnZVJlc2FtcGxpbmdIaW50KCkpIHsKQEAgLTE1MSw3ICsxNTAsNiBA
QCBzdGF0aWMgUmVzYW1wbGluZ01vZGUgY29tcHV0ZVJlc2FtcGxpbmdNCiAgICAgCiAgICAgcmV0
dXJuIFJFU0FNUExFX0xJTkVBUjsKIH0KLSNlbmRpZgogCiAvLyBEcmF3cyB0aGUgZ2l2ZW4gYml0
bWFwIHRvIHRoZSBnaXZlbiBjYW52YXMuIFRoZSBzdWJzZXQgb2YgdGhlIHNvdXJjZSBiaXRtYXAK
IC8vIGlkZW50aWZpZWQgYnkgc3JjX3JlY3QgaXMgZHJhd24gdG8gdGhlIGdpdmVuIGRlc3RpbmF0
aW9uIHJlY3QuIFRoZSBiaXRtYXAKQEAgLTI2NywxNCArMjY1LDExIEBAIHN0YXRpYyB2b2lkIHBh
aW50U2tCaXRtYXAoUGxhdGZvcm1Db250ZXgKICAgICBTa0NhbnZhcyogY2FudmFzID0gcGxhdGZv
cm1Db250ZXh0LT5jYW52YXMoKTsKIAogICAgIFJlc2FtcGxpbmdNb2RlIHJlc2FtcGxpbmc7Ci0j
aWYgRU5BQkxFKFNLSUFfR1BVKQotICAgIHJlc2FtcGxpbmcgPSBSRVNBTVBMRV9MSU5FQVI7Ci0j
ZWxzZQotICAgIHJlc2FtcGxpbmcgPSBwbGF0Zm9ybUNvbnRleHQtPnByaW50aW5nKCkgPyBSRVNB
TVBMRV9OT05FIDoKLSAgICAgICAgY29tcHV0ZVJlc2FtcGxpbmdNb2RlKHBsYXRmb3JtQ29udGV4
dCwgYml0bWFwLCBzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTa1NjYWxhclRvRmxvYXQoZGVzdFJlY3Qud2lkdGgoKSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1NjYWxhclRvRmxvYXQoZGVzdFJlY3QuaGVp
Z2h0KCkpKTsKLSNlbmRpZgorICAgIGlmIChwbGF0Zm9ybUNvbnRleHQtPnVzZVNraWFHUFUoKSkK
KyAgICAgICAgcmVzYW1wbGluZyA9IFJFU0FNUExFX0xJTkVBUjsKKyAgICBlbHNlCisgICAgICAg
IHJlc2FtcGxpbmcgPSBwbGF0Zm9ybUNvbnRleHQtPnByaW50aW5nKCkgPyBSRVNBTVBMRV9OT05F
IDoKKyAgICAgICAgICAgIGNvbXB1dGVSZXNhbXBsaW5nTW9kZShwbGF0Zm9ybUNvbnRleHQsIGJp
dG1hcCwgc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgpLCBTa1NjYWxhclRvRmxvYXQo
ZGVzdFJlY3Qud2lkdGgoKSksIFNrU2NhbGFyVG9GbG9hdChkZXN0UmVjdC5oZWlnaHQoKSkpOwog
ICAgIGlmIChyZXNhbXBsaW5nID09IFJFU0FNUExFX0FXRVNPTUUpIHsKICAgICAgICAgZHJhd1Jl
c2FtcGxlZEJpdG1hcCgqY2FudmFzLCBwYWludCwgYml0bWFwLCBzcmNSZWN0LCBkZXN0UmVjdCk7
CiAgICAgfSBlbHNlIHsKQEAgLTM3MCwxNyArMzY1LDE0IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0
ZXJuKEdyYXBoaWNzQ29udGV4dCoKIAogICAgIC8vIENvbXB1dGUgdGhlIHJlc2FtcGxpbmcgbW9k
ZS4KICAgICBSZXNhbXBsaW5nTW9kZSByZXNhbXBsaW5nOwotI2lmIEVOQUJMRShTS0lBX0dQVSkK
LSAgICByZXNhbXBsaW5nID0gUkVTQU1QTEVfTElORUFSOwotI2Vsc2UKLSAgICBpZiAoY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCktPnByaW50aW5nKCkpCi0gICAgICByZXNhbXBsaW5nID0gUkVT
QU1QTEVfTElORUFSOworICAgIGlmIChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+dXNlU2tp
YUdQVSgpKQorICAgICAgICByZXNhbXBsaW5nID0gUkVTQU1QTEVfTElORUFSOwogICAgIGVsc2Ug
ewotICAgICAgcmVzYW1wbGluZyA9IGNvbXB1dGVSZXNhbXBsaW5nTW9kZShjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKSwgKmJpdG1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Qml0bWFwV2lkdGgsIGRlc3RCaXRtYXBI
ZWlnaHQpOworICAgICAgICBpZiAoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnByaW50aW5n
KCkpCisgICAgICAgICAgICByZXNhbXBsaW5nID0gUkVTQU1QTEVfTElORUFSOworICAgICAgICBl
bHNlCisgICAgICAgICAgICByZXNhbXBsaW5nID0gY29tcHV0ZVJlc2FtcGxpbmdNb2RlKGNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLCAqYml0bWFwLCBzcmNSZWN0LndpZHRoKCksIHNyY1JlY3Qu
aGVpZ2h0KCksIGRlc3RCaXRtYXBXaWR0aCwgZGVzdEJpdG1hcEhlaWdodCk7CiAgICAgfQotI2Vu
ZGlmCiAKICAgICAvLyBMb2FkIHRoZSB0cmFuc2Zvcm0gV2ViS2l0IHJlcXVlc3RlZC4KICAgICBT
a01hdHJpeCBtYXRyaXgocGF0dGVyblRyYW5zZm9ybSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0
U2tpYS5jcHAJKHJldmlzaW9uIDg0NDg4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEs
MTEgKzUxLDkgQEAKICNpbmNsdWRlICJTa0Rhc2hQYXRoRWZmZWN0LmgiCiAjaW5jbHVkZSAiU2tT
aGFkZXIuaCIKIAotI2lmIEVOQUJMRShTS0lBX0dQVSkKICNpbmNsdWRlICJHckNvbnRleHQuaCIK
ICNpbmNsdWRlICJTa0dwdURldmljZS5oIgogI2luY2x1ZGUgIlNrR3B1RGV2aWNlRmFjdG9yeS5o
IgotI2VuZGlmCiAKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9P
d25BcnJheVB0ci5oPgpAQCAtMjE3LDcgKzIxNSw3IEBAIFBsYXRmb3JtQ29udGV4dFNraWE6OlBs
YXRmb3JtQ29udGV4dFNraWEKICAgICA6IG1fY2FudmFzKGNhbnZhcykKICAgICAsIG1fcHJpbnRp
bmcoZmFsc2UpCiAgICAgLCBtX2RyYXdpbmdUb0ltYWdlQnVmZmVyKGZhbHNlKQotICAgICwgbV91
c2VHUFUoZmFsc2UpCisgICAgLCBtX2FjY2VsZXJhdGlvbk1vZGUoTm9BY2NlbGVyYXRpb24pCiAj
aWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICAsIG1fZ3B1Q2FudmFzKDApCiAj
ZW5kaWYKQEAgLTIzMSwxNCArMjI5LDEyIEBAIFBsYXRmb3JtQ29udGV4dFNraWE6On5QbGF0Zm9y
bUNvbnRleHRTa2kKIHsKICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIGlm
IChtX2dwdUNhbnZhcykgewotI2lmIEVOQUJMRShTS0lBX0dQVSkKICAgICAgICAgLy8gbWFrZSBz
dXJlIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byB0aGlzIHBsYXRmb3JtIGNvbnRleHQgaGFzIGJlZW4g
Zmx1c2hlZAotICAgICAgICBpZiAoIW1fdXNlR1BVKSB7CisgICAgICAgIGlmICh1c2VTa2lhR1BV
KCkpIHsKICAgICAgICAgICAgIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9n
cHVDYW52YXMtPmNvbnRleHQoKTsKICAgICAgICAgICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOwogICAgICAgICAgICAgY29udGV4dC0+Z3JDb250ZXh0KCktPmZsdXNoKDApOwogICAg
ICAgICB9Ci0jZW5kaWYKICAgICAgICAgbV9ncHVDYW52YXMtPmRyYXdpbmdCdWZmZXIoKS0+c2V0
V2lsbFB1Ymxpc2hDYWxsYmFjaygwKTsKICAgICB9CiAjZW5kaWYKQEAgLTYxNSwxMSArNjExLDkg
QEAgY29uc3QgU2tCaXRtYXAqIFBsYXRmb3JtQ29udGV4dFNraWE6OmJpdAogCiBib29sIFBsYXRm
b3JtQ29udGV4dFNraWE6OmlzTmF0aXZlRm9udFJlbmRlcmluZ0FsbG93ZWQoKQogewotI2lmIEVO
QUJMRShTS0lBX0dQVSkKLSAgICByZXR1cm4gZmFsc2U7Ci0jZWxzZQorICAgIGlmIChtX2FjY2Vs
ZXJhdGlvbk1vZGUgPT0gU2tpYUdQVSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVy
biBza2lhOjpTdXBwb3J0c1BsYXRmb3JtUGFpbnQobV9jYW52YXMpOwotI2VuZGlmCiB9CiAKIHZv
aWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6Z2V0SW1hZ2VSZXNhbXBsaW5nSGludChJbnRTaXplKiBz
cmNTaXplLCBGbG9hdFNpemUqIGRzdFNpemUpIGNvbnN0CkBAIC03MjYsNDUgKzcyMCw0NyBAQCBw
cml2YXRlOgogCiB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldFNoYXJlZEdyYXBoaWNzQ29u
dGV4dDNEKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKiBk
cmF3aW5nQnVmZmVyLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQogeworICAgIG1fYWNj
ZWxlcmF0aW9uTW9kZSA9IE5vQWNjZWxlcmF0aW9uOwogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8y
RF9DQU5WQVMpCiAgICAgaWYgKGNvbnRleHQgJiYgZHJhd2luZ0J1ZmZlcikgewotICAgICAgICBt
X3VzZUdQVSA9IHRydWU7CiAgICAgICAgIG1fZ3B1Q2FudmFzID0gbmV3IEdyYXBoaWNzQ29udGV4
dEdQVShjb250ZXh0LCBkcmF3aW5nQnVmZmVyLCBzaXplKTsKICAgICAgICAgbV91cGxvYWRUZXh0
dXJlLmNsZWFyKCk7CiAgICAgICAgIGRyYXdpbmdCdWZmZXItPnNldFdpbGxQdWJsaXNoQ2FsbGJh
Y2soV2lsbFB1Ymxpc2hDYWxsYmFja0ltcGw6OmNyZWF0ZSh0aGlzKSk7CiAKLSNpZiBFTkFCTEUo
U0tJQV9HUFUpCi0gICAgICAgIG1fdXNlR1BVID0gZmFsc2U7Ci0gICAgICAgIGNvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgICAgICBtX2dwdUNhbnZhcy0+YmluZEZyYW1lYnVmZmVy
KCk7Ci0KKyAgICAgICAgLy8gdXNlIHNraWEgZ3B1IHJlbmRlcmluZyBpZiBhdmFpbGFibGUKICAg
ICAgICAgR3JDb250ZXh0KiBnciA9IGNvbnRleHQtPmdyQ29udGV4dCgpOwotICAgICAgICBnci0+
cmVzZXRDb250ZXh0KCk7Ci0gICAgICAgIGRyYXdpbmdCdWZmZXItPnNldEdyQ29udGV4dChncik7
CisgICAgICAgIGlmIChncikgeworICAgICAgICAgICAgbV9hY2NlbGVyYXRpb25Nb2RlID0gU2tp
YUdQVTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgICAgICAgICBtX2dwdUNhbnZhcy0+YmluZEZyYW1lYnVmZmVyKCk7CiAKLSAg
ICAgICAgR3JQbGF0Zm9ybVN1cmZhY2VEZXNjIGRyYXdCdWZEZXNjOwotICAgICAgICBkcmF3aW5n
QnVmZmVyLT5nZXRHclBsYXRmb3JtU3VyZmFjZURlc2MoJmRyYXdCdWZEZXNjKTsKLSAgICAgICAg
R3JUZXh0dXJlKiBkcmF3QnVmVGV4ID0gc3RhdGljX2Nhc3Q8R3JUZXh0dXJlKj4oZ3ItPmNyZWF0
ZVBsYXRmb3JtU3VyZmFjZShkcmF3QnVmRGVzYykpOwotICAgICAgICBTa0RldmljZUZhY3Rvcnkq
IGZhY3RvcnkgPSBuZXcgU2tHcHVEZXZpY2VGYWN0b3J5KGdyLCBkcmF3QnVmVGV4KTsKLSAgICAg
ICAgZHJhd0J1ZlRleC0+dW5yZWYoKTsKLQotICAgICAgICBTa0RldmljZSogZGV2aWNlID0gZmFj
dG9yeS0+bmV3RGV2aWNlKG1fY2FudmFzLCBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIGRy
YXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgpLCBkcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVpZ2h0
KCksIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgIG1fY2FudmFzLT5zZXREZXZpY2UoZGV2aWNlKS0+
dW5yZWYoKTsKLSAgICAgICAgbV9jYW52YXMtPnNldERldmljZUZhY3RvcnkoZmFjdG9yeSk7Ci0j
ZW5kaWYKKyAgICAgICAgICAgIGdyLT5yZXNldENvbnRleHQoKTsKKyAgICAgICAgICAgIGRyYXdp
bmdCdWZmZXItPnNldEdyQ29udGV4dChncik7CisKKyAgICAgICAgICAgIEdyUGxhdGZvcm1TdXJm
YWNlRGVzYyBkcmF3QnVmRGVzYzsKKyAgICAgICAgICAgIGRyYXdpbmdCdWZmZXItPmdldEdyUGxh
dGZvcm1TdXJmYWNlRGVzYygmZHJhd0J1ZkRlc2MpOworICAgICAgICAgICAgR3JUZXh0dXJlKiBk
cmF3QnVmVGV4ID0gc3RhdGljX2Nhc3Q8R3JUZXh0dXJlKj4oZ3ItPmNyZWF0ZVBsYXRmb3JtU3Vy
ZmFjZShkcmF3QnVmRGVzYykpOworICAgICAgICAgICAgU2tEZXZpY2VGYWN0b3J5KiBmYWN0b3J5
ID0gbmV3IFNrR3B1RGV2aWNlRmFjdG9yeShnciwgZHJhd0J1ZlRleCk7CisgICAgICAgICAgICBk
cmF3QnVmVGV4LT51bnJlZigpOworCisgICAgICAgICAgICBTa0RldmljZSogZGV2aWNlID0gZmFj
dG9yeS0+bmV3RGV2aWNlKG1fY2FudmFzLCBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIGRy
YXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgpLCBkcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVpZ2h0
KCksIGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICBtX2NhbnZhcy0+c2V0RGV2aWNlKGRldmlj
ZSktPnVucmVmKCk7CisgICAgICAgICAgICBtX2NhbnZhcy0+c2V0RGV2aWNlRmFjdG9yeShmYWN0
b3J5KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2FjY2VsZXJhdGlvbk1vZGUgPSBH
UFU7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc3luY1NvZnR3YXJlQ2FudmFzKCk7CiAgICAgICAg
IG1fdXBsb2FkVGV4dHVyZS5jbGVhcigpOwogICAgICAgICBtX2dwdUNhbnZhcy5jbGVhcigpOwot
ICAgICAgICBtX3VzZUdQVSA9IGZhbHNlOwogICAgIH0KICNlbmRpZgogfQogCiB2b2lkIFBsYXRm
b3JtQ29udGV4dFNraWE6OnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKSBjb25zdAogewotICAgIGlm
ICghbV91c2VHUFUpIHsKLSNpZiBFTkFCTEUoU0tJQV9HUFUpCisgICAgaWYgKG1fYWNjZWxlcmF0
aW9uTW9kZSA9PSBTa2lhR1BVKSB7CisjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykK
ICAgICAgICAgaWYgKG1fZ3B1Q2FudmFzKQogICAgICAgICAgICAgbV9ncHVDYW52YXMtPmNvbnRl
eHQoKS0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAjZW5kaWYKQEAgLTgwNiw3ICs4MDIsNyBAQCB2
b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnByZXBhcmVGb3JTb2Z0CiAKIHZvaWQgUGxhdGZvcm1D
b250ZXh0U2tpYTo6cHJlcGFyZUZvckhhcmR3YXJlRHJhdygpIGNvbnN0CiB7Ci0gICAgaWYgKCFt
X3VzZUdQVSkKKyAgICBpZiAoIShtX2FjY2VsZXJhdGlvbk1vZGUgPT0gR1BVKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKG1fYmFja2luZ1N0b3JlU3RhdGUgPT0gU29mdHdhcmUpIHsKQEAg
LTgyMiw4ICs4MTgsOCBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnByZXBhcmVGb3JIYXJk
CiAKIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c3luY1NvZnR3YXJlQ2FudmFzKCkgY29uc3QK
IHsKLSAgICBpZiAoIW1fdXNlR1BVKSB7Ci0jaWYgRU5BQkxFKFNLSUFfR1BVKQorICAgIGlmICht
X2FjY2VsZXJhdGlvbk1vZGUgPT0gU2tpYUdQVSkgeworI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8y
RF9DQU5WQVMpCiAgICAgICAgIGlmIChtX2dwdUNhbnZhcykKICAgICAgICAgICAgIG1fZ3B1Q2Fu
dmFzLT5jb250ZXh0KCktPm1ha2VDb250ZXh0Q3VycmVudCgpOwogI2VuZGlmCkBAIC04NDQsNyAr
ODQwLDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzeW5jU29mdHdhcmVDYQogCiB2b2lk
IFBsYXRmb3JtQ29udGV4dFNraWE6Om1hcmtEaXJ0eVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKLSAgICBpZiAoIW1fdXNlR1BVKQorICAgIGlmIChtX2FjY2VsZXJhdGlvbk1vZGUgIT0gR1BV
KQogICAgICAgICByZXR1cm47CiAKICAgICBzd2l0Y2ggKG1fYmFja2luZ1N0b3JlU3RhdGUpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250
ZXh0U2tpYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCShyZXZpc2lvbiA4NDQ4OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MCw2ICs3MCwxMiBAQCBjbGFzcyBUZXh0dXJlOwogY2xhc3MgUGxhdGZv
cm1Db250ZXh0U2tpYSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGxhdGZvcm1Db250ZXh0
U2tpYSk7CiBwdWJsaWM6CisgICAgZW51bSBBY2NlbGVyYXRpb25Nb2RlIHsKKyAgICAgICAgTm9B
Y2NlbGVyYXRpb24sCisgICAgICAgIEdQVSwKKyAgICAgICAgU2tpYUdQVQorICAgIH07CisKICAg
ICAvLyBGb3IgcHJpbnRpbmcsIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgY2FudmFzLiBjYW52YXMg
Y2FuIGJlIE5VTEwuIElmIHlvdQogICAgIC8vIHN1cHBseSBhIE5VTEwgY2FudmFzLCB5b3UgY2Fu
IGFsc28gY2FsbCBzZXRDYW52YXMgbGF0ZXIuCiAgICAgUGxhdGZvcm1Db250ZXh0U2tpYShTa0Nh
bnZhcyopOwpAQCAtMTc4LDcgKzE4NCw5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY2FuQWNjZWxl
cmF0ZSgpIGNvbnN0OwogICAgIGJvb2wgY2FudmFzQ2xpcEFwcGxpZWQoKSBjb25zdDsKLSAgICBi
b29sIHVzZUdQVSgpIHsgcmV0dXJuIG1fdXNlR1BVOyB9CisgICAgQWNjZWxlcmF0aW9uTW9kZSBh
Y2NlbGVyYXRpb25Nb2RlKCkgY29uc3QgeyByZXR1cm4gbV9hY2NlbGVyYXRpb25Nb2RlOyB9Cisg
ICAgYm9vbCB1c2VHUFUoKSBjb25zdCB7IHJldHVybiBtX2FjY2VsZXJhdGlvbk1vZGUgPT0gR1BV
OyB9CisgICAgYm9vbCB1c2VTa2lhR1BVKCkgY29uc3QgeyByZXR1cm4gbV9hY2NlbGVyYXRpb25N
b2RlID09IFNraWFHUFU7IH0KICAgICB2b2lkIHNldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKFNo
YXJlZEdyYXBoaWNzQ29udGV4dDNEKiwgRHJhd2luZ0J1ZmZlciosIGNvbnN0IEludFNpemUmKTsK
ICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIEdyYXBoaWNzQ29udGV4dEdQ
VSogZ3B1Q2FudmFzKCkgY29uc3QgeyByZXR1cm4gbV9ncHVDYW52YXMuZ2V0KCk7IH0KQEAgLTIy
MSw3ICsyMjksNyBAQCBwcml2YXRlOgogICAgIEZsb2F0U2l6ZSBtX2ltYWdlUmVzYW1wbGluZ0hp
bnREc3RTaXplOwogICAgIGJvb2wgbV9wcmludGluZzsKICAgICBib29sIG1fZHJhd2luZ1RvSW1h
Z2VCdWZmZXI7Ci0gICAgYm9vbCBtX3VzZUdQVTsKKyAgICBBY2NlbGVyYXRpb25Nb2RlIG1fYWNj
ZWxlcmF0aW9uTW9kZTsKICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIE93
blB0cjxHcmFwaGljc0NvbnRleHRHUFU+IG1fZ3B1Q2FudmFzOwogICAgIG11dGFibGUgUmVmUHRy
PFRleHR1cmU+IG1fdXBsb2FkVGV4dHVyZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91135</attachid>
            <date>2011-04-26 11:54:15 -0700</date>
            <delta_ts>2011-04-26 15:12:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58683-20110426145413.patch</filename>
            <type>text/plain</type>
            <size>22469</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0NDk4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTEtMDQtMjEgIEp1c3RpbiBO
b3Zvc2FkICA8anVub3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtDaHJvbWl1bV0gRXhwb3NlIHNraWEgZ3B1IGNhbnZhcyBy
ZW5kZXJpbmcgYXMgYSBydW50aW1lIGZsYWcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU4NjgzCisgICAgICAgIHJlcGxhY2UgdGhlIFNLSUFfR1BVIGNv
bXBpbGUgZmxhZyBieSB0aGUgcHJlLWV4aXN0aW5nCisgICAgICAgIGFjY2VsZXJhdGVkRHJhd2lu
Z0VuYWJsZWQgZmxhZy4gTW9zdCBjb2RlIGNoYW5nZXMgYXJlIHRyaXZpYWw6CisgICAgICAgIGNv
bXBpbGUtdGltZSBjb25kaXRpb25hbHMgb24gU0tJQV9HUFUgd2VyZSBlaXRoZXIgcmVwbGFjZWQg
d2l0aAorICAgICAgICBhIHJ1bi10aW1lIGNoZWNrLCBvciBhIGNvbXBpbGUgdGltZSBjaGVjayBv
biBVU0UoU0tJQSkgCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBDb3ZlcmVkIGJ5IGV4aXN0aW5n
IHRlc3RzLgorCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0R2xv
YmFsQ29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UGFnZTo6c2hhcmVkR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICBBZGRl
ZCBjaGVjayBmb3IgdGhlIGFjY2VsZXJhdGVkRHJhd2luZyBmbGFnLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRyYXdpbmdCdWZmZXI6OnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICBPbiBTa2lhIGJ1
aWxkcywgdGhpcyBtZXRob3Mgbm93IHJlY2VpdmVzIGEgYm9vbCBhcmcgdG8gdHVybiBvbgorICAg
ICAgICBHUFUtYWNjZWxlcmF0ZWQgc2tpYSByZW5kZXJpbmcKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZEdyYXBoaWNzQ29udGV4dDNEOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6flNoYXJlZEdyYXBoaWNzQ29udGV4
dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpnckNvbnRl
eHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRl
eHQzRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVSZXNhbXBsaW5nTW9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpwYWludFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpkcmF3UGF0dGVy
bik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29u
dGV4dFNraWEpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6flBsYXRm
b3JtQ29udGV4dFNraWEpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6
aXNOYXRpdmVGb250UmVuZGVyaW5nQWxsb3dlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUNvbnRleHRTa2lhOjpzZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpwcmVwYXJlRm9yU29mdHdhcmVEcmF3KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnByZXBhcmVGb3JIYXJkd2FyZURyYXcp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6c3luY1NvZnR3YXJlQ2Fu
dmFzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6Om1hcmtEaXJ0eVJl
Y3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tp
YS5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6YWNjZWxlcmF0aW9u
TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjp1c2VHUFUpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6dXNlU2tpYUdQVSk6CisKIDIw
MTEtMDQtMjEgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGlyayBTY2h1bHplLgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZp
c2lvbiA4NDQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzOCw4ICs1MzgsOCBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0R2xvYmFsCiAgICAgaWYgKCFjKQogICAgICAgICBy
ZXR1cm47CiAgICAgYy0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wKTsKLSNpZiBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKSAmJiAhRU5BQkxFKFNLSUFfR1BVKQotICAgIGlmIChpc0FjY2Vs
ZXJhdGVkKCkgJiYgb3AgIT0gQ29tcG9zaXRlU291cmNlT3ZlcikgeworI2lmIEVOQUJMRShBQ0NF
TEVSQVRFRF8yRF9DQU5WQVMpCisgICAgaWYgKGlzQWNjZWxlcmF0ZWQoKSAmJiAhbV9jb250ZXh0
M0QtPnN1cHBvcnRzQ29tcG9zaXRlT3Aob3ApKSB7CiAgICAgICAgIGMtPnNldFNoYXJlZEdyYXBo
aWNzQ29udGV4dDNEKDAsIDAsIEludFNpemUoKSk7CiAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci5j
bGVhcigpOwogICAgICAgICBtX2NvbnRleHQzRC5jbGVhcigpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwCShyZXZpc2lvbiA4NDQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc1MiwxMCArNzUyLDEzIEBAIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNE
KiBQYWdlOjpzaGFyZWRHcmEKIHsKICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQog
ICAgIGlmICghbV9zaGFyZWRHcmFwaGljc0NvbnRleHQzRCkKLSAgICAgICAgbV9zaGFyZWRHcmFw
aGljc0NvbnRleHQzRCA9IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoY2hyb21lKCkp
OwotCi0gICAgcmV0dXJuIG1fc2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuZ2V0KCk7CisjaWYgVVNF
KFNLSUEpCisgICAgICAgIG1fc2hhcmVkR3JhcGhpY3NDb250ZXh0M0QgPSBTaGFyZWRHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlKGNocm9tZSgpLCBzZXR0aW5ncygpLT5hY2NlbGVyYXRlZERyYXdp
bmdFbmFibGVkKCkgPyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6VXNlU2tpYUdQVSA6IDApOwog
I2Vsc2UKKyAgICAgICAgbV9zaGFyZWRHcmFwaGljc0NvbnRleHQzRCA9IFNoYXJlZEdyYXBoaWNz
Q29udGV4dDNEOjpjcmVhdGUoY2hyb21lKCksIDApOworI2VuZGlmCisgICAgcmV0dXJuIG1fc2hh
cmVkR3JhcGhpY3NDb250ZXh0M0QuZ2V0KCk7CisjZWxzZSAvLyAhRU5BQkxFKEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUykKICAgICByZXR1cm4gMDsKICNlbmRpZgogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9E
cmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA4NDQ4OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRC5oIgogI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCiAKLSNpZiBFTkFC
TEUoU0tJQV9HUFUpCisjaWYgVVNFKFNLSUEpCiAjaW5jbHVkZSAiR3JDb250ZXh0LmgiCiAjZW5k
aWYKIApAQCAtODcsNyArODcsNyBAQCBEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKEdyYXBo
aWNzQ29uCiAgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxlQ29s
b3JCdWZmZXIoMCkKICAgICAsIG1faW50ZXJuYWwobmV3IERyYXdpbmdCdWZmZXJJbnRlcm5hbCkK
LSNpZiBFTkFCTEUoU0tJQV9HUFUpCisjaWYgVVNFKFNLSUEpCiAgICAgLCBtX2dyQ29udGV4dCgw
KQogI2VuZGlmCiB7CkBAIC0xMzUsNyArMTM1LDcgQEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpwdWJs
aXNoVG9QbGF0Zm9ybUxheQogICAgIC8vIGhhcHBlbnMgYmVmb3JlIHRoZSBjb21wb3NpdG9yIGRy
YXdzLiAgVGhpcyBtZWFucyB3ZSBtaWdodCBkcmF3IHN0YWxlIGZyYW1lcyBzb21ldGltZXMuICBJ
ZGVhbGx5IHRoaXMKICAgICAvLyB3b3VsZCBpbnNlcnQgYSBmZW5jZSBpbnRvIHRoZSBjaGlsZCBj
b21tYW5kIHN0cmVhbSB0aGF0IHRoZSBjb21wb3NpdG9yIGNvdWxkIHdhaXQgZm9yLgogICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWYgRU5BQkxFKFNLSUFfR1BVKQorI2lm
IFVTRShTS0lBKQogICAgIGlmIChtX2dyQ29udGV4dCkKICAgICAgICAgbV9nckNvbnRleHQtPmZs
dXNoKDApOwogI2VuZGlmCkBAIC0xNjYsNyArMTY2LDcgQEAgUGxhdGZvcm0zRE9iamVjdCBEcmF3
aW5nQnVmZmVyOjpwbGF0Zm9ybQogICAgIHJldHVybiBtX2NvbG9yQnVmZmVyOwogfQogCi0jaWYg
RU5BQkxFKFNLSUFfR1BVKQorI2lmIFVTRShTS0lBKQogdm9pZCBEcmF3aW5nQnVmZmVyOjpzZXRH
ckNvbnRleHQoR3JDb250ZXh0KiBjb250ZXh0KQogewogICAgIC8vIFdlIGp1c3QgdGFrZSBhIHB0
ciB3aXRob3V0IHJlZmVyZW5jaW5nIGl0LCBhcyB3ZSByZXF1aXJlIHRoYXQgd2UgbmV2ZXIgb3V0
bGl2ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdC
dWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvRHJhd2luZ0J1ZmZlci5oCShyZXZpc2lvbiA4NDQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDcgKzQyLDcgQEAKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjZW5kaWYKIAotI2lmIEVO
QUJMRShTS0lBX0dQVSkKKyNpZiBVU0UoU0tJQSkKIGNsYXNzIEdyQ29udGV4dDsKIHN0cnVjdCBH
clBsYXRmb3JtU3VyZmFjZURlc2M7CiAjZW5kaWYKQEAgLTEwMyw3ICsxMDMsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRXaWxsUHVibGlzaENhbGxiYWNrKFBhc3NPd25QdHI8V2lsbFB1Ymxpc2hD
YWxsYmFjaz4gY2FsbGJhY2spIHsgbV9jYWxsYmFjayA9IGNhbGxiYWNrOyB9CiAjZW5kaWYKIAot
I2lmIEVOQUJMRShTS0lBX0dQVSkKKyNpZiBVU0UoU0tJQSkKICAgICB2b2lkIHNldEdyQ29udGV4
dChHckNvbnRleHQqIGN0eCk7CiAgICAgdm9pZCBnZXRHclBsYXRmb3JtU3VyZmFjZURlc2MoR3JQ
bGF0Zm9ybVN1cmZhY2VEZXNjKik7CiAjZW5kaWYKQEAgLTE0NSw3ICsxNDUsNyBAQCBwcml2YXRl
OgogICAgIFJldGFpblB0cjxXZWJHTExheWVyPiBtX3BsYXRmb3JtTGF5ZXI7CiAjZW5kaWYKIAot
I2lmIEVOQUJMRShTS0lBX0dQVSkKKyNpZiBVU0UoU0tJQSkKICAgICBHckNvbnRleHQqIG1fZ3JD
b250ZXh0OwogI2VuZGlmCiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3Bw
CShyZXZpc2lvbiA4NDQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMx
LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpCi0KICNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIgogCiAjaW5jbHVk
ZSAiQWZmaW5lVHJhbnNmb3JtLmgiCkBAIC00NiwxMyArNDUsMTQgQEAKICNpbmNsdWRlICJTb2xp
ZEZpbGxTaGFkZXIuaCIKICNpbmNsdWRlICJUZXhTaGFkZXIuaCIKIAotI2lmIEVOQUJMRShTS0lB
X0dQVSkKKyNpZiBVU0UoU0tJQSkKICNpbmNsdWRlICJHckNvbnRleHQuaCIKKyNlbmRpZgorCiAv
LyBMaW1pdCB0aGUgbnVtYmVyIG9mIHRleHR1cmVzIHdlIGhvbGQgaW4gdGhlIGJpdG1hcC0+dGV4
dHVyZSBjYWNoZS4KIHN0YXRpYyBjb25zdCBpbnQgbWF4VGV4dHVyZUNhY2hlQ291bnQgPSA1MTI7
CiAvLyBMaW1pdCB0aGUgYnl0ZXMgYWxsb2NhdGVkIHRvd2FyZCB0ZXh0dXJlcyBpbiB0aGUgYml0
bWFwLT50ZXh0dXJlIGNhY2hlLgogc3RhdGljIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlQ2FjaGVC
eXRlcyA9IDUwICogMTAyNCAqIDEwMjQ7Ci0jZW5kaWYKIAogI2luY2x1ZGUgPHd0Zi9Pd25BcnJh
eVB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTYxLDcgKzYxLDcgQEAg
c3RhdGljIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlQ2FjaGVCeXRlcwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAvLyBzdGF0aWMKLVBhc3NSZWZQdHI8U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q+IFNo
YXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK1Bh
c3NSZWZQdHI8U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q+IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGUoSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgQ3JlYXRpb25GbGFncyBmbGFncykKIHsK
ICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyOwogICAgIGF0dHIuZGVwdGgg
PSBmYWxzZTsKQEAgLTg2LDEwICs4NiwxMSBAQCBQYXNzUmVmUHRyPFNoYXJlZEdyYXBoaWNzQ29u
dGV4dDNEPiBTaGFyCiAgICAgICAgIGlmICghY29udm9sdXRpb25TaGFkZXJzW2ldKQogICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0QoY29udGV4dC5yZWxlYXNlKCksIHNvbGlkRmlsbFNoYWRlci5yZWxlYXNl
KCksIHRleFNoYWRlci5yZWxlYXNlKCksIGJpY3ViaWNTaGFkZXIucmVsZWFzZSgpLCBjb252b2x1
dGlvblNoYWRlcnMucmVsZWFzZSgpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRH
cmFwaGljc0NvbnRleHQzRChjb250ZXh0LnJlbGVhc2UoKSwgc29saWRGaWxsU2hhZGVyLnJlbGVh
c2UoKSwgdGV4U2hhZGVyLnJlbGVhc2UoKSwgYmljdWJpY1NoYWRlci5yZWxlYXNlKCksIGNvbnZv
bHV0aW9uU2hhZGVycy5yZWxlYXNlKCksIGZsYWdzKSk7CiB9CiAKLVNoYXJlZEdyYXBoaWNzQ29u
dGV4dDNEOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRChQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjb250ZXh0LCBQYXNzT3duUHRyPFNvbGlkRmlsbFNoYWRlcj4gc29saWRGaWxsU2hhZGVy
LCBQYXNzT3duUHRyPFRleFNoYWRlcj4gdGV4U2hhZGVyLCBQYXNzT3duUHRyPEJpY3ViaWNTaGFk
ZXI+IGJpY3ViaWNTaGFkZXIsIFBhc3NPd25BcnJheVB0cjxPd25QdHI8Q29udm9sdXRpb25TaGFk
ZXI+ID4gY29udm9sdXRpb25TaGFkZXJzKQorCitTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6U2hh
cmVkR3JhcGhpY3NDb250ZXh0M0QoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4
dCwgUGFzc093blB0cjxTb2xpZEZpbGxTaGFkZXI+IHNvbGlkRmlsbFNoYWRlciwgUGFzc093blB0
cjxUZXhTaGFkZXI+IHRleFNoYWRlciwgUGFzc093blB0cjxCaWN1YmljU2hhZGVyPiBiaWN1Ymlj
U2hhZGVyLCBQYXNzT3duQXJyYXlQdHI8T3duUHRyPENvbnZvbHV0aW9uU2hhZGVyPiA+IGNvbnZv
bHV0aW9uU2hhZGVycywgQ3JlYXRpb25GbGFncyBmbGFncykKICAgICA6IG1fY29udGV4dChjb250
ZXh0KQogICAgICwgbV9iZ3JhU3VwcG9ydGVkKGZhbHNlKQogICAgICwgbV9xdWFkVmVydGljZXMo
MCkKQEAgLTk4LDcgKzk5LDggQEAgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OlNoYXJlZEdyYXBo
aWNzQwogICAgICwgbV9iaWN1YmljU2hhZGVyKGJpY3ViaWNTaGFkZXIpCiAgICAgLCBtX2NvbnZv
bHV0aW9uU2hhZGVycyhjb252b2x1dGlvblNoYWRlcnMpCiAgICAgLCBtX29lc1N0YW5kYXJkRGVy
aXZhdGl2ZXNTdXBwb3J0ZWQoZmFsc2UpCi0jaWYgRU5BQkxFKFNLSUFfR1BVKQorICAgICwgbV9m
bGFncyhmbGFncykKKyNpZiBVU0UoU0tJQSkKICAgICAsIG1fZ3JDb250ZXh0KDApCiAjZW5kaWYK
IHsKQEAgLTExOCw3ICsxMjAsNyBAQCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6flNoYXJlZEdy
YXBoaWNzCiB7CiAgICAgbV9jb250ZXh0LT5kZWxldGVCdWZmZXIobV9xdWFkVmVydGljZXMpOwog
ICAgIGFsbENvbnRleHRzKCktPnJlbW92ZSh0aGlzKTsKLSNpZiBFTkFCTEUoU0tJQV9HUFUpCisj
aWYgVVNFKFNLSUEpCiAgICAgR3JTYWZlVW5yZWYobV9nckNvbnRleHQpOwogI2VuZGlmCiB9CkBA
IC0yMzIsNiArMjM0LDE1IEBAIGJvb2wgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnN1cHBvcnRz
QkcKICAgICByZXR1cm4gbV9iZ3JhU3VwcG9ydGVkOwogfQogCitib29sIFNoYXJlZEdyYXBoaWNz
Q29udGV4dDNEOjpzdXBwb3J0c0NvbXBvc2l0ZU9wKENvbXBvc2l0ZU9wZXJhdG9yIG9wKSBjb25z
dAoreyAgIAorI2lmIFVTRShTS0lBKQorICAgIHJldHVybiBtX2ZsYWdzICYgVXNlU2tpYUdQVSB8
fCBvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyOworI2Vsc2UKKyAgICByZXR1cm4gb3AgPT0gQ29t
cG9zaXRlU291cmNlT3ZlcjsKKyNlbmRpZgorfQorCiBUZXh0dXJlKiBTaGFyZWRHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlVGV4dHVyZShOYXRpdmVJbWFnZVB0ciBwdHIsIFRleHR1cmU6OkZvcm1h
dCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKICAgICBSZWZQdHI8VGV4dHVyZT4g
dGV4dHVyZSA9IG1fdGV4dHVyZXMuZ2V0KHB0cik7CkBAIC00NjUsOSArNDc2LDExIEBAIERyYXdp
bmdCdWZmZXIqIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjoKICAgICByZXR1cm4gbV9vZmZzY3Jl
ZW5CdWZmZXJzW2luZGV4XS5nZXQoKTsKIH0KIAotI2lmIEVOQUJMRShTS0lBX0dQVSkKKyNpZiBV
U0UoU0tJQSkKIEdyQ29udGV4dCogU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmdyQ29udGV4dCgp
CiB7CisgICAgaWYgKCEobV9mbGFncyAmIFVzZVNraWFHUFUpKQorICAgICAgICByZXR1cm4gMDsK
ICAgICBpZiAoIW1fZ3JDb250ZXh0KSB7CiAgICAgICAgIG1fZ3JDb250ZXh0ID0gR3JDb250ZXh0
OjpDcmVhdGVHTFNoYWRlckNvbnRleHQoKTsKICAgICAgICAgbV9nckNvbnRleHQtPnNldFRleHR1
cmVDYWNoZUxpbWl0cyhtYXhUZXh0dXJlQ2FjaGVDb3VudCwgbWF4VGV4dHVyZUNhY2hlQnl0ZXMp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBo
aWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDg0NDg4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4
dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAKICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAotI2lmIEVOQUJMRShTS0lBX0dQ
VSkKKyNpZiBVU0UoU0tJQSkKIGNsYXNzIEdyQ29udGV4dDsKICNlbmRpZgogCkBAIC02NSw3ICs2
NSwxMyBAQCB0eXBlZGVmIEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIsIFJlZlB0cjxUCiAKIGNsYXNz
IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEIDogcHVibGljIFJlZkNvdW50ZWQ8U2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0Q+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRHcmFw
aGljc0NvbnRleHQzRD4gY3JlYXRlKEhvc3RXaW5kb3cqKTsKKworICAgIGVudW0gQ3JlYXRpb25G
bGFnQml0cyB7CisgICAgICAgIFVzZVNraWFHUFUgPSAxCisgICAgfTsKKyAgICB0eXBlZGVmIHVu
c2lnbmVkIENyZWF0aW9uRmxhZ3M7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRHcmFw
aGljc0NvbnRleHQzRD4gY3JlYXRlKEhvc3RXaW5kb3cqLCBDcmVhdGlvbkZsYWdzKTsKICAgICB+
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoKTsKIAogICAgIC8vIEZ1bmN0aW9ucyB0aGF0IGRlbGVn
YXRlIGRpcmVjdGx5IHRvIEdyYXBoaWNzQ29udGV4dDNELCB3aXRoIGNhY2hpbmcKQEAgLTExNiw2
ICsxMjIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQs
IFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSk7CiAKICAgICBib29sIHN1cHBvcnRzQkdSQSgpOwor
ICAgIGJvb2wgc3VwcG9ydHNDb21wb3NpdGVPcChDb21wb3NpdGVPcGVyYXRvcikgY29uc3Q7CiAK
ICAgICAvLyBDcmVhdGVzIGEgdGV4dHVyZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGltYWdl
LiAgSXMgb3duZWQgYnkgdGhpcyBjb250ZXh0J3MKICAgICAvLyBUZXh0dXJlSGFzaE1hcC4KQEAg
LTEzOSwxMiArMTQ2LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHVzZUxvb3BCbGlubkV4dGVyaW9y
UHJvZ3JhbSh1bnNpZ25lZCB2ZXJ0ZXhPZmZzZXQsIHVuc2lnbmVkIGtsbU9mZnNldCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgQ29sb3ImKTsKICAgICBEcmF3aW5nQnVmZmVyKiBnZXRP
ZmZzY3JlZW5CdWZmZXIodW5zaWduZWQgaW5kZXgsIGNvbnN0IEludFNpemUmKTsKIAotI2lmIEVO
QUJMRShTS0lBX0dQVSkKKyNpZiBVU0UoU0tJQSkKICAgICBHckNvbnRleHQqIGdyQ29udGV4dCgp
OwogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoUGFzc1Jl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIFBhc3NPd25QdHI8U29saWRGaWxsU2hhZGVyPiwgUGFz
c093blB0cjxUZXhTaGFkZXI+LCBQYXNzT3duUHRyPEJpY3ViaWNTaGFkZXI+LCBQYXNzT3duQXJy
YXlQdHI8T3duUHRyPENvbnZvbHV0aW9uU2hhZGVyPiA+KTsKKyAgICBTaGFyZWRHcmFwaGljc0Nv
bnRleHQzRChQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0cjxTb2xpZEZp
bGxTaGFkZXI+LCBQYXNzT3duUHRyPFRleFNoYWRlcj4sIFBhc3NPd25QdHI8QmljdWJpY1NoYWRl
cj4sIFBhc3NPd25BcnJheVB0cjxPd25QdHI8Q29udm9sdXRpb25TaGFkZXI+ID4sIENyZWF0aW9u
RmxhZ3MpOwogCiAgICAgLy8gVXNlZCB0byBpbXBsZW1lbnQgcmVtb3ZlVGV4dHVyZXNGb3IoKSwg
c2VlIHRoZSBjb21tZW50IGFib3ZlLgogICAgIHN0YXRpYyBIYXNoU2V0PFNoYXJlZEdyYXBoaWNz
Q29udGV4dDNEKj4qIGFsbENvbnRleHRzKCk7CkBAIC0xNzAsNyArMTc3LDggQEAgcHJpdmF0ZToK
IAogICAgIFdURjo6VmVjdG9yPFJlZlB0cjxEcmF3aW5nQnVmZmVyPiA+IG1fb2Zmc2NyZWVuQnVm
ZmVyczsKIAotI2lmIEVOQUJMRShTS0lBX0dQVSkKKyAgICB1bnNpZ25lZCBtX2ZsYWdzOworI2lm
IFVTRShTS0lBKQogICAgIEdyQ29udGV4dCogbV9nckNvbnRleHQ7CiAjZW5kaWYKIH07CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNr
aWEuY3BwCShyZXZpc2lvbiA4NDQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvSW1hZ2VTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNiBAQCBl
bnVtIFJlc2FtcGxpbmdNb2RlIHsKICAgICBSRVNBTVBMRV9BV0VTT01FLAogfTsKIAotI2lmICFF
TkFCTEUoU0tJQV9HUFUpCiBzdGF0aWMgUmVzYW1wbGluZ01vZGUgY29tcHV0ZVJlc2FtcGxpbmdN
b2RlKFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgTmF0aXZlSW1h
Z2VTa2lhJiBiaXRtYXAsIGludCBzcmNXaWR0aCwgaW50IHNyY0hlaWdodCwgZmxvYXQgZGVzdFdp
ZHRoLCBmbG9hdCBkZXN0SGVpZ2h0KQogewogICAgIGlmIChwbGF0Zm9ybUNvbnRleHQtPmhhc0lt
YWdlUmVzYW1wbGluZ0hpbnQoKSkgewpAQCAtMTUxLDcgKzE1MCw2IEBAIHN0YXRpYyBSZXNhbXBs
aW5nTW9kZSBjb21wdXRlUmVzYW1wbGluZ00KICAgICAKICAgICByZXR1cm4gUkVTQU1QTEVfTElO
RUFSOwogfQotI2VuZGlmCiAKIC8vIERyYXdzIHRoZSBnaXZlbiBiaXRtYXAgdG8gdGhlIGdpdmVu
IGNhbnZhcy4gVGhlIHN1YnNldCBvZiB0aGUgc291cmNlIGJpdG1hcAogLy8gaWRlbnRpZmllZCBi
eSBzcmNfcmVjdCBpcyBkcmF3biB0byB0aGUgZ2l2ZW4gZGVzdGluYXRpb24gcmVjdC4gVGhlIGJp
dG1hcApAQCAtMjY3LDE0ICsyNjUsMTEgQEAgc3RhdGljIHZvaWQgcGFpbnRTa0JpdG1hcChQbGF0
Zm9ybUNvbnRleAogICAgIFNrQ2FudmFzKiBjYW52YXMgPSBwbGF0Zm9ybUNvbnRleHQtPmNhbnZh
cygpOwogCiAgICAgUmVzYW1wbGluZ01vZGUgcmVzYW1wbGluZzsKLSNpZiBFTkFCTEUoU0tJQV9H
UFUpCi0gICAgcmVzYW1wbGluZyA9IFJFU0FNUExFX0xJTkVBUjsKLSNlbHNlCi0gICAgcmVzYW1w
bGluZyA9IHBsYXRmb3JtQ29udGV4dC0+cHJpbnRpbmcoKSA/IFJFU0FNUExFX05PTkUgOgotICAg
ICAgICBjb21wdXRlUmVzYW1wbGluZ01vZGUocGxhdGZvcm1Db250ZXh0LCBiaXRtYXAsIHNyY1Jl
Y3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNrU2NhbGFyVG9GbG9hdChkZXN0UmVjdC53aWR0aCgpKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNrU2NhbGFyVG9GbG9hdChkZXN0UmVjdC5oZWlnaHQoKSkpOwotI2VuZGlm
CisgICAgaWYgKHBsYXRmb3JtQ29udGV4dC0+dXNlU2tpYUdQVSgpKQorICAgICAgICByZXNhbXBs
aW5nID0gUkVTQU1QTEVfTElORUFSOworICAgIGVsc2UKKyAgICAgICAgcmVzYW1wbGluZyA9IHBs
YXRmb3JtQ29udGV4dC0+cHJpbnRpbmcoKSA/IFJFU0FNUExFX05PTkUgOgorICAgICAgICAgICAg
Y29tcHV0ZVJlc2FtcGxpbmdNb2RlKHBsYXRmb3JtQ29udGV4dCwgYml0bWFwLCBzcmNSZWN0Lndp
ZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCksIFNrU2NhbGFyVG9GbG9hdChkZXN0UmVjdC53aWR0aCgp
KSwgU2tTY2FsYXJUb0Zsb2F0KGRlc3RSZWN0LmhlaWdodCgpKSk7CiAgICAgaWYgKHJlc2FtcGxp
bmcgPT0gUkVTQU1QTEVfQVdFU09NRSkgewogICAgICAgICBkcmF3UmVzYW1wbGVkQml0bWFwKCpj
YW52YXMsIHBhaW50LCBiaXRtYXAsIHNyY1JlY3QsIGRlc3RSZWN0KTsKICAgICB9IGVsc2UgewpA
QCAtMzcwLDE3ICszNjUsMTQgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250
ZXh0KgogCiAgICAgLy8gQ29tcHV0ZSB0aGUgcmVzYW1wbGluZyBtb2RlLgogICAgIFJlc2FtcGxp
bmdNb2RlIHJlc2FtcGxpbmc7Ci0jaWYgRU5BQkxFKFNLSUFfR1BVKQotICAgIHJlc2FtcGxpbmcg
PSBSRVNBTVBMRV9MSU5FQVI7Ci0jZWxzZQotICAgIGlmIChjb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKS0+cHJpbnRpbmcoKSkKLSAgICAgIHJlc2FtcGxpbmcgPSBSRVNBTVBMRV9MSU5FQVI7Cisg
ICAgaWYgKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT51c2VTa2lhR1BVKCkpCisgICAgICAg
IHJlc2FtcGxpbmcgPSBSRVNBTVBMRV9MSU5FQVI7CiAgICAgZWxzZSB7Ci0gICAgICByZXNhbXBs
aW5nID0gY29tcHV0ZVJlc2FtcGxpbmdNb2RlKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCAq
Yml0bWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNSZWN0
LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RCaXRtYXBXaWR0aCwgZGVzdEJpdG1hcEhlaWdodCk7CisgICAgICAg
IGlmIChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+cHJpbnRpbmcoKSkKKyAgICAgICAgICAg
IHJlc2FtcGxpbmcgPSBSRVNBTVBMRV9MSU5FQVI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHJlc2FtcGxpbmcgPSBjb21wdXRlUmVzYW1wbGluZ01vZGUoY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCksICpiaXRtYXAsIHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSwgZGVzdEJp
dG1hcFdpZHRoLCBkZXN0Qml0bWFwSGVpZ2h0KTsKICAgICB9Ci0jZW5kaWYKIAogICAgIC8vIExv
YWQgdGhlIHRyYW5zZm9ybSBXZWJLaXQgcmVxdWVzdGVkLgogICAgIFNrTWF0cml4IG1hdHJpeChw
YXR0ZXJuVHJhbnNmb3JtKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAkocmV2aXNp
b24gODQ0ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRm
b3JtQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMSArNTEsOSBAQAogI2lu
Y2x1ZGUgIlNrRGFzaFBhdGhFZmZlY3QuaCIKICNpbmNsdWRlICJTa1NoYWRlci5oIgogCi0jaWYg
RU5BQkxFKFNLSUFfR1BVKQogI2luY2x1ZGUgIkdyQ29udGV4dC5oIgogI2luY2x1ZGUgIlNrR3B1
RGV2aWNlLmgiCiAjaW5jbHVkZSAiU2tHcHVEZXZpY2VGYWN0b3J5LmgiCi0jZW5kaWYKIAogI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CkBA
IC0yMTcsNyArMjE1LDcgQEAgUGxhdGZvcm1Db250ZXh0U2tpYTo6UGxhdGZvcm1Db250ZXh0U2tp
YQogICAgIDogbV9jYW52YXMoY2FudmFzKQogICAgICwgbV9wcmludGluZyhmYWxzZSkKICAgICAs
IG1fZHJhd2luZ1RvSW1hZ2VCdWZmZXIoZmFsc2UpCi0gICAgLCBtX3VzZUdQVShmYWxzZSkKKyAg
ICAsIG1fYWNjZWxlcmF0aW9uTW9kZShOb0FjY2VsZXJhdGlvbikKICNpZiBFTkFCTEUoQUNDRUxF
UkFURURfMkRfQ0FOVkFTKQogICAgICwgbV9ncHVDYW52YXMoMCkKICNlbmRpZgpAQCAtMjMxLDE0
ICsyMjksMTIgQEAgUGxhdGZvcm1Db250ZXh0U2tpYTo6flBsYXRmb3JtQ29udGV4dFNraQogewog
I2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgaWYgKG1fZ3B1Q2FudmFzKSB7
Ci0jaWYgRU5BQkxFKFNLSUFfR1BVKQogICAgICAgICAvLyBtYWtlIHN1cmUgZXZlcnl0aGluZyBy
ZWxhdGVkIHRvIHRoaXMgcGxhdGZvcm0gY29udGV4dCBoYXMgYmVlbiBmbHVzaGVkCi0gICAgICAg
IGlmICghbV91c2VHUFUpIHsKKyAgICAgICAgaWYgKHVzZVNraWFHUFUoKSkgewogICAgICAgICAg
ICAgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX2dwdUNhbnZhcy0+Y29udGV4
dCgpOwogICAgICAgICAgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgICAg
ICAgICBjb250ZXh0LT5nckNvbnRleHQoKS0+Zmx1c2goMCk7CiAgICAgICAgIH0KLSNlbmRpZgog
ICAgICAgICBtX2dwdUNhbnZhcy0+ZHJhd2luZ0J1ZmZlcigpLT5zZXRXaWxsUHVibGlzaENhbGxi
YWNrKDApOwogICAgIH0KICNlbmRpZgpAQCAtNjE1LDExICs2MTEsOSBAQCBjb25zdCBTa0JpdG1h
cCogUGxhdGZvcm1Db250ZXh0U2tpYTo6Yml0CiAKIGJvb2wgUGxhdGZvcm1Db250ZXh0U2tpYTo6
aXNOYXRpdmVGb250UmVuZGVyaW5nQWxsb3dlZCgpCiB7Ci0jaWYgRU5BQkxFKFNLSUFfR1BVKQot
ICAgIHJldHVybiBmYWxzZTsKLSNlbHNlCisgICAgaWYgKG1fYWNjZWxlcmF0aW9uTW9kZSA9PSBT
a2lhR1BVKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHNraWE6OlN1cHBvcnRz
UGxhdGZvcm1QYWludChtX2NhbnZhcyk7Ci0jZW5kaWYKIH0KIAogdm9pZCBQbGF0Zm9ybUNvbnRl
eHRTa2lhOjpnZXRJbWFnZVJlc2FtcGxpbmdIaW50KEludFNpemUqIHNyY1NpemUsIEZsb2F0U2l6
ZSogZHN0U2l6ZSkgY29uc3QKQEAgLTcyNiw0NSArNzIwLDQ3IEBAIHByaXZhdGU6CiAKIHZvaWQg
UGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIsIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCiB7CisgICAgbV9hY2NlbGVyYXRpb25Nb2RlID0g
Tm9BY2NlbGVyYXRpb247CiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBp
ZiAoY29udGV4dCAmJiBkcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIG1fdXNlR1BVID0gdHJ1ZTsK
ICAgICAgICAgbV9ncHVDYW52YXMgPSBuZXcgR3JhcGhpY3NDb250ZXh0R1BVKGNvbnRleHQsIGRy
YXdpbmdCdWZmZXIsIHNpemUpOwogICAgICAgICBtX3VwbG9hZFRleHR1cmUuY2xlYXIoKTsKICAg
ICAgICAgZHJhd2luZ0J1ZmZlci0+c2V0V2lsbFB1Ymxpc2hDYWxsYmFjayhXaWxsUHVibGlzaENh
bGxiYWNrSW1wbDo6Y3JlYXRlKHRoaXMpKTsKIAotI2lmIEVOQUJMRShTS0lBX0dQVSkKLSAgICAg
ICAgbV91c2VHUFUgPSBmYWxzZTsKLSAgICAgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgICAgIG1fZ3B1Q2FudmFzLT5iaW5kRnJhbWVidWZmZXIoKTsKLQorICAgICAgICAv
LyB1c2Ugc2tpYSBncHUgcmVuZGVyaW5nIGlmIGF2YWlsYWJsZQogICAgICAgICBHckNvbnRleHQq
IGdyID0gY29udGV4dC0+Z3JDb250ZXh0KCk7Ci0gICAgICAgIGdyLT5yZXNldENvbnRleHQoKTsK
LSAgICAgICAgZHJhd2luZ0J1ZmZlci0+c2V0R3JDb250ZXh0KGdyKTsKKyAgICAgICAgaWYgKGdy
KSB7CisgICAgICAgICAgICBtX2FjY2VsZXJhdGlvbk1vZGUgPSBTa2lhR1BVOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAgICAg
ICAgIG1fZ3B1Q2FudmFzLT5iaW5kRnJhbWVidWZmZXIoKTsKIAotICAgICAgICBHclBsYXRmb3Jt
U3VyZmFjZURlc2MgZHJhd0J1ZkRlc2M7Ci0gICAgICAgIGRyYXdpbmdCdWZmZXItPmdldEdyUGxh
dGZvcm1TdXJmYWNlRGVzYygmZHJhd0J1ZkRlc2MpOwotICAgICAgICBHclRleHR1cmUqIGRyYXdC
dWZUZXggPSBzdGF0aWNfY2FzdDxHclRleHR1cmUqPihnci0+Y3JlYXRlUGxhdGZvcm1TdXJmYWNl
KGRyYXdCdWZEZXNjKSk7Ci0gICAgICAgIFNrRGV2aWNlRmFjdG9yeSogZmFjdG9yeSA9IG5ldyBT
a0dwdURldmljZUZhY3RvcnkoZ3IsIGRyYXdCdWZUZXgpOwotICAgICAgICBkcmF3QnVmVGV4LT51
bnJlZigpOwotCi0gICAgICAgIFNrRGV2aWNlKiBkZXZpY2UgPSBmYWN0b3J5LT5uZXdEZXZpY2Uo
bV9jYW52YXMsIFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgZHJhd2luZ0J1ZmZlci0+c2l6
ZSgpLndpZHRoKCksIGRyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKSwgZmFsc2UsIGZhbHNl
KTsKLSAgICAgICAgbV9jYW52YXMtPnNldERldmljZShkZXZpY2UpLT51bnJlZigpOwotICAgICAg
ICBtX2NhbnZhcy0+c2V0RGV2aWNlRmFjdG9yeShmYWN0b3J5KTsKLSNlbmRpZgorICAgICAgICAg
ICAgZ3ItPnJlc2V0Q29udGV4dCgpOworICAgICAgICAgICAgZHJhd2luZ0J1ZmZlci0+c2V0R3JD
b250ZXh0KGdyKTsKKworICAgICAgICAgICAgR3JQbGF0Zm9ybVN1cmZhY2VEZXNjIGRyYXdCdWZE
ZXNjOworICAgICAgICAgICAgZHJhd2luZ0J1ZmZlci0+Z2V0R3JQbGF0Zm9ybVN1cmZhY2VEZXNj
KCZkcmF3QnVmRGVzYyk7CisgICAgICAgICAgICBHclRleHR1cmUqIGRyYXdCdWZUZXggPSBzdGF0
aWNfY2FzdDxHclRleHR1cmUqPihnci0+Y3JlYXRlUGxhdGZvcm1TdXJmYWNlKGRyYXdCdWZEZXNj
KSk7CisgICAgICAgICAgICBTa0RldmljZUZhY3RvcnkqIGZhY3RvcnkgPSBuZXcgU2tHcHVEZXZp
Y2VGYWN0b3J5KGdyLCBkcmF3QnVmVGV4KTsKKyAgICAgICAgICAgIGRyYXdCdWZUZXgtPnVucmVm
KCk7CisKKyAgICAgICAgICAgIFNrRGV2aWNlKiBkZXZpY2UgPSBmYWN0b3J5LT5uZXdEZXZpY2Uo
bV9jYW52YXMsIFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgZHJhd2luZ0J1ZmZlci0+c2l6
ZSgpLndpZHRoKCksIGRyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKSwgZmFsc2UsIGZhbHNl
KTsKKyAgICAgICAgICAgIG1fY2FudmFzLT5zZXREZXZpY2UoZGV2aWNlKS0+dW5yZWYoKTsKKyAg
ICAgICAgICAgIG1fY2FudmFzLT5zZXREZXZpY2VGYWN0b3J5KGZhY3RvcnkpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIG1fYWNjZWxlcmF0aW9uTW9kZSA9IEdQVTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBzeW5jU29mdHdhcmVDYW52YXMoKTsKICAgICAgICAgbV91cGxvYWRUZXh0dXJl
LmNsZWFyKCk7CiAgICAgICAgIG1fZ3B1Q2FudmFzLmNsZWFyKCk7Ci0gICAgICAgIG1fdXNlR1BV
ID0gZmFsc2U7CiAgICAgfQogI2VuZGlmCiB9CiAKIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6
cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3VzZUdQVSkgewot
I2lmIEVOQUJMRShTS0lBX0dQVSkKKyAgICBpZiAobV9hY2NlbGVyYXRpb25Nb2RlID09IFNraWFH
UFUpIHsKKyNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgICAgICBpZiAobV9n
cHVDYW52YXMpCiAgICAgICAgICAgICBtX2dwdUNhbnZhcy0+Y29udGV4dCgpLT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKICNlbmRpZgpAQCAtODA2LDcgKzgwMiw3IEBAIHZvaWQgUGxhdGZvcm1Db250
ZXh0U2tpYTo6cHJlcGFyZUZvclNvZnQKIAogdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpwcmVw
YXJlRm9ySGFyZHdhcmVEcmF3KCkgY29uc3QKIHsKLSAgICBpZiAoIW1fdXNlR1BVKQorICAgIGlm
ICghKG1fYWNjZWxlcmF0aW9uTW9kZSA9PSBHUFUpKQogICAgICAgICByZXR1cm47CiAKICAgICBp
ZiAobV9iYWNraW5nU3RvcmVTdGF0ZSA9PSBTb2Z0d2FyZSkgewpAQCAtODIyLDggKzgxOCw4IEBA
IHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6cHJlcGFyZUZvckhhcmQKIAogdm9pZCBQbGF0Zm9y
bUNvbnRleHRTa2lhOjpzeW5jU29mdHdhcmVDYW52YXMoKSBjb25zdAogewotICAgIGlmICghbV91
c2VHUFUpIHsKLSNpZiBFTkFCTEUoU0tJQV9HUFUpCisgICAgaWYgKG1fYWNjZWxlcmF0aW9uTW9k
ZSA9PSBTa2lhR1BVKSB7CisjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICAg
ICAgaWYgKG1fZ3B1Q2FudmFzKQogICAgICAgICAgICAgbV9ncHVDYW52YXMtPmNvbnRleHQoKS0+
bWFrZUNvbnRleHRDdXJyZW50KCk7CiAjZW5kaWYKQEAgLTg0NCw3ICs4NDAsNyBAQCB2b2lkIFBs
YXRmb3JtQ29udGV4dFNraWE6OnN5bmNTb2Z0d2FyZUNhCiAKIHZvaWQgUGxhdGZvcm1Db250ZXh0
U2tpYTo6bWFya0RpcnR5UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmICghbV91
c2VHUFUpCisgICAgaWYgKG1fYWNjZWxlcmF0aW9uTW9kZSAhPSBHUFUpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIHN3aXRjaCAobV9iYWNraW5nU3RvcmVTdGF0ZSkgewpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNv
bnRleHRTa2lhLmgJKHJldmlzaW9uIDg0NDg4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgJKHdvcmtpbmcgY29weSkKQEAgLTcw
LDYgKzcwLDEyIEBAIGNsYXNzIFRleHR1cmU7CiBjbGFzcyBQbGF0Zm9ybUNvbnRleHRTa2lhIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQbGF0Zm9ybUNvbnRleHRTa2lhKTsKIHB1YmxpYzoK
KyAgICBlbnVtIEFjY2VsZXJhdGlvbk1vZGUgeworICAgICAgICBOb0FjY2VsZXJhdGlvbiwKKyAg
ICAgICAgR1BVLAorICAgICAgICBTa2lhR1BVCisgICAgfTsKKwogICAgIC8vIEZvciBwcmludGlu
ZywgdGhlcmUgc2hvdWxkbid0IGJlIGFueSBjYW52YXMuIGNhbnZhcyBjYW4gYmUgTlVMTC4gSWYg
eW91CiAgICAgLy8gc3VwcGx5IGEgTlVMTCBjYW52YXMsIHlvdSBjYW4gYWxzbyBjYWxsIHNldENh
bnZhcyBsYXRlci4KICAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKFNrQ2FudmFzKik7CkBAIC0xNzgs
NyArMTg0LDkgQEAgcHVibGljOgogCiAgICAgYm9vbCBjYW5BY2NlbGVyYXRlKCkgY29uc3Q7CiAg
ICAgYm9vbCBjYW52YXNDbGlwQXBwbGllZCgpIGNvbnN0OwotICAgIGJvb2wgdXNlR1BVKCkgeyBy
ZXR1cm4gbV91c2VHUFU7IH0KKyAgICBBY2NlbGVyYXRpb25Nb2RlIGFjY2VsZXJhdGlvbk1vZGUo
KSBjb25zdCB7IHJldHVybiBtX2FjY2VsZXJhdGlvbk1vZGU7IH0KKyAgICBib29sIHVzZUdQVSgp
IGNvbnN0IHsgcmV0dXJuIG1fYWNjZWxlcmF0aW9uTW9kZSA9PSBHUFU7IH0KKyAgICBib29sIHVz
ZVNraWFHUFUoKSBjb25zdCB7IHJldHVybiBtX2FjY2VsZXJhdGlvbk1vZGUgPT0gU2tpYUdQVTsg
fQogICAgIHZvaWQgc2V0U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoU2hhcmVkR3JhcGhpY3NDb250
ZXh0M0QqLCBEcmF3aW5nQnVmZmVyKiwgY29uc3QgSW50U2l6ZSYpOwogI2lmIEVOQUJMRShBQ0NF
TEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgR3JhcGhpY3NDb250ZXh0R1BVKiBncHVDYW52YXMoKSBj
b25zdCB7IHJldHVybiBtX2dwdUNhbnZhcy5nZXQoKTsgfQpAQCAtMjIxLDcgKzIyOSw3IEBAIHBy
aXZhdGU6CiAgICAgRmxvYXRTaXplIG1faW1hZ2VSZXNhbXBsaW5nSGludERzdFNpemU7CiAgICAg
Ym9vbCBtX3ByaW50aW5nOwogICAgIGJvb2wgbV9kcmF3aW5nVG9JbWFnZUJ1ZmZlcjsKLSAgICBi
b29sIG1fdXNlR1BVOworICAgIEFjY2VsZXJhdGlvbk1vZGUgbV9hY2NlbGVyYXRpb25Nb2RlOwog
I2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgT3duUHRyPEdyYXBoaWNzQ29u
dGV4dEdQVT4gbV9ncHVDYW52YXM7CiAgICAgbXV0YWJsZSBSZWZQdHI8VGV4dHVyZT4gbV91cGxv
YWRUZXh0dXJlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91171</attachid>
            <date>2011-04-26 15:12:09 -0700</date>
            <delta_ts>2011-04-26 22:30:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58683-20110426181208.patch</filename>
            <type>text/plain</type>
            <size>22400</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0OTYzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTEtMDQtMjYgIEp1c3RpbiBO
b3Zvc2FkICA8anVub3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtDaHJvbWl1bV0gRXhwb3NlIHNraWEgZ3B1IGNhbnZhcyBy
ZW5kZXJpbmcgYXMgYSBydW50aW1lIGZsYWcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU4NjgzCisgICAgICAgIFJlcGxhY2UgdGhlIFNLSUFfR1BVIGNv
bXBpbGUgZmxhZyBieSB0aGUgcHJlLWV4aXN0aW5nCisgICAgICAgIGFjY2VsZXJhdGVkRHJhd2lu
Z0VuYWJsZWQgZmxhZy4gTW9zdCBjb2RlIGNoYW5nZXMgYXJlIHRyaXZpYWw6CisgICAgICAgIGNv
bXBpbGUtdGltZSBjb25kaXRpb25hbHMgb24gU0tJQV9HUFUgd2VyZSBlaXRoZXIgcmVwbGFjZWQg
d2l0aAorICAgICAgICBhIHJ1bi10aW1lIGNoZWNrLCBvciBhIGNvbXBpbGUgdGltZSBjaGVjayBv
biBVU0UoU0tJQSkgCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBDb3ZlcmVkIGJ5IGV4aXN0aW5n
IHRlc3RzLgorCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0R2xv
YmFsQ29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UGFnZTo6c2hhcmVkR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICBBZGRl
ZCBjaGVjayBmb3IgdGhlIGFjY2VsZXJhdGVkRHJhd2luZyBmbGFnLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRyYXdpbmdCdWZmZXI6OnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICBPbiBTa2lhIGJ1
aWxkcywgdGhpcyBtZXRob3Mgbm93IHJlY2VpdmVzIGEgYm9vbCBhcmcgdG8gdHVybiBvbgorICAg
ICAgICBHUFUtYWNjZWxlcmF0ZWQgc2tpYSByZW5kZXJpbmcKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZEdyYXBoaWNzQ29udGV4dDNEOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6flNoYXJlZEdyYXBoaWNzQ29udGV4
dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpnckNvbnRl
eHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRl
eHQzRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVSZXNhbXBsaW5nTW9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpwYWludFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpkcmF3UGF0dGVy
bik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29u
dGV4dFNraWEpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6flBsYXRm
b3JtQ29udGV4dFNraWEpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6
aXNOYXRpdmVGb250UmVuZGVyaW5nQWxsb3dlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUNvbnRleHRTa2lhOjpzZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpwcmVwYXJlRm9yU29mdHdhcmVEcmF3KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnByZXBhcmVGb3JIYXJkd2FyZURyYXcp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6c3luY1NvZnR3YXJlQ2Fu
dmFzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6Om1hcmtEaXJ0eVJl
Y3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tp
YS5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6YWNjZWxlcmF0aW9u
TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjp1c2VHUFUpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6dXNlU2tpYUdQVSk6CisKIDIw
MTEtMDQtMjYgIEplZmYgTWlsbGVyICA8amVmZm1AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBh
IG5ld2xpbmUgYXQgdGhlIGVuZCBvZiBTVkdGRURyb3BTaGFkb3dFbGVtZW50LmlkbC4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcAkocmV2aXNpb24gODQ5NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTQs
OCArNTU0LDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEdsb2JhbAogICAg
IGlmICghYykKICAgICAgICAgcmV0dXJuOwogICAgIGMtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihv
cCk7Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgIUVOQUJMRShTS0lBX0dQ
VSkKLSAgICBpZiAoaXNBY2NlbGVyYXRlZCgpICYmIG9wICE9IENvbXBvc2l0ZVNvdXJjZU92ZXIp
IHsKKyNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorICAgIGlmIChpc0FjY2VsZXJh
dGVkKCkgJiYgIW1fY29udGV4dDNELT5zdXBwb3J0c0NvbXBvc2l0ZU9wKG9wKSkgewogICAgICAg
ICBjLT5zZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRCgwLCAwLCBJbnRTaXplKCkpOwogICAgICAg
ICBtX2RyYXdpbmdCdWZmZXIuY2xlYXIoKTsKICAgICAgICAgbV9jb250ZXh0M0QuY2xlYXIoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNpb24gODQ5NTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTIsMTAgKzc1MiwxMyBAQCBTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRCogUGFnZTo6c2hhcmVkR3JhCiB7CiAjaWYgRU5BQkxFKEFDQ0VM
RVJBVEVEXzJEX0NBTlZBUykKICAgICBpZiAoIW1fc2hhcmVkR3JhcGhpY3NDb250ZXh0M0QpCi0g
ICAgICAgIG1fc2hhcmVkR3JhcGhpY3NDb250ZXh0M0QgPSBTaGFyZWRHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlKGNocm9tZSgpKTsKLQotICAgIHJldHVybiBtX3NoYXJlZEdyYXBoaWNzQ29udGV4
dDNELmdldCgpOworI2lmIFVTRShTS0lBKQorICAgICAgICBtX3NoYXJlZEdyYXBoaWNzQ29udGV4
dDNEID0gU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShjaHJvbWUoKSwgc2V0dGluZ3Mo
KS0+YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpID8gU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6
OlVzZVNraWFHUFUgOiAwKTsKICNlbHNlCisgICAgICAgIG1fc2hhcmVkR3JhcGhpY3NDb250ZXh0
M0QgPSBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGNocm9tZSgpLCAwKTsKKyNlbmRp
ZgorICAgIHJldHVybiBtX3NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmdldCgpOworI2Vsc2UgLy8g
IUVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgcmV0dXJuIDA7CiAjZW5kaWYKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdC
dWZmZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkocmV2aXNpb24gODQ5
NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5n
QnVmZmVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRl
eHQzRC5oIgogCi0jaWYgRU5BQkxFKFNLSUFfR1BVKQorI2lmIFVTRShTS0lBKQogI2luY2x1ZGUg
IkdyQ29udGV4dC5oIgogI2VuZGlmCiAKQEAgLTg3LDcgKzg3LDcgQEAgRHJhd2luZ0J1ZmZlcjo6
RHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbgogICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAg
ICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCiAgICAgLCBtX2ludGVybmFsKGFkb3B0UHRy
KG5ldyBEcmF3aW5nQnVmZmVySW50ZXJuYWwpKQotI2lmIEVOQUJMRShTS0lBX0dQVSkKKyNpZiBV
U0UoU0tJQSkKICAgICAsIG1fZ3JDb250ZXh0KDApCiAjZW5kaWYKIHsKQEAgLTEzNSw3ICsxMzUs
NyBAQCB2b2lkIERyYXdpbmdCdWZmZXI6OnB1Ymxpc2hUb1BsYXRmb3JtTGF5CiAgICAgLy8gaGFw
cGVucyBiZWZvcmUgdGhlIGNvbXBvc2l0b3IgZHJhd3MuICBUaGlzIG1lYW5zIHdlIG1pZ2h0IGRy
YXcgc3RhbGUgZnJhbWVzIHNvbWV0aW1lcy4gIElkZWFsbHkgdGhpcwogICAgIC8vIHdvdWxkIGlu
c2VydCBhIGZlbmNlIGludG8gdGhlIGNoaWxkIGNvbW1hbmQgc3RyZWFtIHRoYXQgdGhlIGNvbXBv
c2l0b3IgY291bGQgd2FpdCBmb3IuCiAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSNpZiBFTkFCTEUoU0tJQV9HUFUpCisjaWYgVVNFKFNLSUEpCiAgICAgaWYgKG1fZ3JDb250
ZXh0KQogICAgICAgICBtX2dyQ29udGV4dC0+Zmx1c2goMCk7CiAjZW5kaWYKQEAgLTE2Niw3ICsx
NjYsNyBAQCBQbGF0Zm9ybTNET2JqZWN0IERyYXdpbmdCdWZmZXI6OnBsYXRmb3JtCiAgICAgcmV0
dXJuIG1fY29sb3JCdWZmZXI7CiB9CiAKLSNpZiBFTkFCTEUoU0tJQV9HUFUpCisjaWYgVVNFKFNL
SUEpCiB2b2lkIERyYXdpbmdCdWZmZXI6OnNldEdyQ29udGV4dChHckNvbnRleHQqIGNvbnRleHQp
CiB7CiAgICAgLy8gV2UganVzdCB0YWtlIGEgcHRyIHdpdGhvdXQgcmVmZXJlbmNpbmcgaXQsIGFz
IHdlIHJlcXVpcmUgdGhhdCB3ZSBuZXZlciBvdXRsaXZlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgJKHJldmlzaW9u
IDg0OTU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdC
dWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQAogI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KICNlbmRpZgogCi0jaWYgRU5BQkxFKFNLSUFfR1BVKQorI2lmIFVTRShTS0lB
KQogY2xhc3MgR3JDb250ZXh0Owogc3RydWN0IEdyUGxhdGZvcm1TdXJmYWNlRGVzYzsKICNlbmRp
ZgpAQCAtMTAzLDcgKzEwMyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFdpbGxQdWJsaXNoQ2Fs
bGJhY2soUGFzc093blB0cjxXaWxsUHVibGlzaENhbGxiYWNrPiBjYWxsYmFjaykgeyBtX2NhbGxi
YWNrID0gY2FsbGJhY2s7IH0KICNlbmRpZgogCi0jaWYgRU5BQkxFKFNLSUFfR1BVKQorI2lmIFVT
RShTS0lBKQogICAgIHZvaWQgc2V0R3JDb250ZXh0KEdyQ29udGV4dCogY3R4KTsKICAgICB2b2lk
IGdldEdyUGxhdGZvcm1TdXJmYWNlRGVzYyhHclBsYXRmb3JtU3VyZmFjZURlc2MqKTsKICNlbmRp
ZgpAQCAtMTQ1LDcgKzE0NSw3IEBAIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPFdlYkdMTGF5ZXI+
IG1fcGxhdGZvcm1MYXllcjsKICNlbmRpZgogCi0jaWYgRU5BQkxFKFNLSUFfR1BVKQorI2lmIFVT
RShTS0lBKQogICAgIEdyQ29udGV4dCogbV9nckNvbnRleHQ7CiAjZW5kaWYKIH07CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0
M0QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDg0OTU3KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
CiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLQogI2luY2x1ZGUgIlNoYXJlZEdy
YXBoaWNzQ29udGV4dDNELmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKQEAgLTQ2
LDEzICs0NSwxNCBAQAogI2luY2x1ZGUgIlNvbGlkRmlsbFNoYWRlci5oIgogI2luY2x1ZGUgIlRl
eFNoYWRlci5oIgogCi0jaWYgRU5BQkxFKFNLSUFfR1BVKQorI2lmIFVTRShTS0lBKQogI2luY2x1
ZGUgIkdyQ29udGV4dC5oIgorI2VuZGlmCisKIC8vIExpbWl0IHRoZSBudW1iZXIgb2YgdGV4dHVy
ZXMgd2UgaG9sZCBpbiB0aGUgYml0bWFwLT50ZXh0dXJlIGNhY2hlLgogc3RhdGljIGNvbnN0IGlu
dCBtYXhUZXh0dXJlQ2FjaGVDb3VudCA9IDUxMjsKIC8vIExpbWl0IHRoZSBieXRlcyBhbGxvY2F0
ZWQgdG93YXJkIHRleHR1cmVzIGluIHRoZSBiaXRtYXAtPnRleHR1cmUgY2FjaGUuCiBzdGF0aWMg
Y29uc3Qgc2l6ZV90IG1heFRleHR1cmVDYWNoZUJ5dGVzID0gNTAgKiAxMDI0ICogMTAyNDsKLSNl
bmRpZgogCiAjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgpAQCAtNjEsNyArNjEsNyBAQCBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heFRleHR1
cmVDYWNoZUJ5dGVzCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIHN0YXRpYwotUGFzc1JlZlB0
cjxTaGFyZWRHcmFwaGljc0NvbnRleHQzRD4gU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZShIb3N0V2luZG93KiBob3N0V2luZG93KQorUGFzc1JlZlB0cjxTaGFyZWRHcmFwaGljc0NvbnRl
eHQzRD4gU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShIb3N0V2luZG93KiBob3N0V2lu
ZG93LCBDcmVhdGlvbkZsYWdzIGZsYWdzKQogewogICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzIGF0dHI7CiAgICAgYXR0ci5kZXB0aCA9IGZhbHNlOwpAQCAtODYsMTAgKzg2LDExIEBA
IFBhc3NSZWZQdHI8U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q+IFNoYXIKICAgICAgICAgaWYgKCFj
b252b2x1dGlvblNoYWRlcnNbaV0pCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRChjb250ZXh0LnJlbGVh
c2UoKSwgc29saWRGaWxsU2hhZGVyLnJlbGVhc2UoKSwgdGV4U2hhZGVyLnJlbGVhc2UoKSwgYmlj
dWJpY1NoYWRlci5yZWxlYXNlKCksIGNvbnZvbHV0aW9uU2hhZGVycy5yZWxlYXNlKCkpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKGNvbnRleHQucmVs
ZWFzZSgpLCBzb2xpZEZpbGxTaGFkZXIucmVsZWFzZSgpLCB0ZXhTaGFkZXIucmVsZWFzZSgpLCBi
aWN1YmljU2hhZGVyLnJlbGVhc2UoKSwgY29udm9sdXRpb25TaGFkZXJzLnJlbGVhc2UoKSwgZmxh
Z3MpKTsKIH0KIAotU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OlNoYXJlZEdyYXBoaWNzQ29udGV4
dDNEKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIFBhc3NPd25QdHI8U29s
aWRGaWxsU2hhZGVyPiBzb2xpZEZpbGxTaGFkZXIsIFBhc3NPd25QdHI8VGV4U2hhZGVyPiB0ZXhT
aGFkZXIsIFBhc3NPd25QdHI8QmljdWJpY1NoYWRlcj4gYmljdWJpY1NoYWRlciwgUGFzc093bkFy
cmF5UHRyPE93blB0cjxDb252b2x1dGlvblNoYWRlcj4gPiBjb252b2x1dGlvblNoYWRlcnMpCisK
K1NoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRChQYXNzUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LCBQYXNzT3duUHRyPFNvbGlkRmlsbFNoYWRl
cj4gc29saWRGaWxsU2hhZGVyLCBQYXNzT3duUHRyPFRleFNoYWRlcj4gdGV4U2hhZGVyLCBQYXNz
T3duUHRyPEJpY3ViaWNTaGFkZXI+IGJpY3ViaWNTaGFkZXIsIFBhc3NPd25BcnJheVB0cjxPd25Q
dHI8Q29udm9sdXRpb25TaGFkZXI+ID4gY29udm9sdXRpb25TaGFkZXJzLCBDcmVhdGlvbkZsYWdz
IGZsYWdzKQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX2JncmFTdXBwb3J0ZWQo
ZmFsc2UpCiAgICAgLCBtX3F1YWRWZXJ0aWNlcygwKQpAQCAtOTgsNyArOTksOCBAQCBTaGFyZWRH
cmFwaGljc0NvbnRleHQzRDo6U2hhcmVkR3JhcGhpY3NDCiAgICAgLCBtX2JpY3ViaWNTaGFkZXIo
YmljdWJpY1NoYWRlcikKICAgICAsIG1fY29udm9sdXRpb25TaGFkZXJzKGNvbnZvbHV0aW9uU2hh
ZGVycykKICAgICAsIG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlc1N1cHBvcnRlZChmYWxzZSkKLSNp
ZiBFTkFCTEUoU0tJQV9HUFUpCisgICAgLCBtX2ZsYWdzKGZsYWdzKQorI2lmIFVTRShTS0lBKQog
ICAgICwgbV9nckNvbnRleHQoMCkKICNlbmRpZgogewpAQCAtMTE4LDcgKzEyMCw3IEBAIFNoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEOjp+U2hhcmVkR3JhcGhpY3MKIHsKICAgICBtX2NvbnRleHQtPmRl
bGV0ZUJ1ZmZlcihtX3F1YWRWZXJ0aWNlcyk7CiAgICAgYWxsQ29udGV4dHMoKS0+cmVtb3ZlKHRo
aXMpOwotI2lmIEVOQUJMRShTS0lBX0dQVSkKKyNpZiBVU0UoU0tJQSkKICAgICBHclNhZmVVbnJl
ZihtX2dyQ29udGV4dCk7CiAjZW5kaWYKIH0KQEAgLTIzMiw2ICsyMzQsMTUgQEAgYm9vbCBTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRDo6c3VwcG9ydHNCRwogICAgIHJldHVybiBtX2JncmFTdXBwb3J0
ZWQ7CiB9CiAKK2Jvb2wgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnN1cHBvcnRzQ29tcG9zaXRl
T3AoQ29tcG9zaXRlT3BlcmF0b3Igb3ApIGNvbnN0Cit7ICAgCisjaWYgVVNFKFNLSUEpCisgICAg
cmV0dXJuIG1fZmxhZ3MgJiBVc2VTa2lhR1BVIHx8IG9wID09IENvbXBvc2l0ZVNvdXJjZU92ZXI7
CisjZWxzZQorICAgIHJldHVybiBvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyOworI2VuZGlmCit9
CisKIFRleHR1cmUqIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVUZXh0dXJlKE5hdGl2
ZUltYWdlUHRyIHB0ciwgVGV4dHVyZTo6Rm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KQogewogICAgIFJlZlB0cjxUZXh0dXJlPiB0ZXh0dXJlID0gbV90ZXh0dXJlcy5nZXQocHRy
KTsKQEAgLTQ2NSw5ICs0NzYsMTEgQEAgRHJhd2luZ0J1ZmZlciogU2hhcmVkR3JhcGhpY3NDb250
ZXh0M0Q6OgogICAgIHJldHVybiBtX29mZnNjcmVlbkJ1ZmZlcnNbaW5kZXhdLmdldCgpOwogfQog
Ci0jaWYgRU5BQkxFKFNLSUFfR1BVKQorI2lmIFVTRShTS0lBKQogR3JDb250ZXh0KiBTaGFyZWRH
cmFwaGljc0NvbnRleHQzRDo6Z3JDb250ZXh0KCkKIHsKKyAgICBpZiAoIShtX2ZsYWdzICYgVXNl
U2tpYUdQVSkpCisgICAgICAgIHJldHVybiAwOwogICAgIGlmICghbV9nckNvbnRleHQpIHsKICAg
ICAgICAgbV9nckNvbnRleHQgPSBHckNvbnRleHQ6OkNyZWF0ZUdMU2hhZGVyQ29udGV4dCgpOwog
ICAgICAgICBtX2dyQ29udGV4dC0+c2V0VGV4dHVyZUNhY2hlTGltaXRzKG1heFRleHR1cmVDYWNo
ZUNvdW50LCBtYXhUZXh0dXJlQ2FjaGVCeXRlcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250
ZXh0M0QuaAkocmV2aXNpb24gODQ5NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
NyArNDMsNyBAQAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogCi0jaWYgRU5BQkxFKFNLSUFfR1BVKQorI2lmIFVTRShTS0lBKQogY2xhc3MgR3JD
b250ZXh0OwogI2VuZGlmCiAKQEAgLTY1LDcgKzY1LDEzIEBAIHR5cGVkZWYgSGFzaE1hcDxOYXRp
dmVJbWFnZVB0ciwgUmVmUHRyPFQKIAogY2xhc3MgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QgOiBw
dWJsaWMgUmVmQ291bnRlZDxTaGFyZWRHcmFwaGljc0NvbnRleHQzRD4gewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGUoSG9zdFdp
bmRvdyopOworCisgICAgZW51bSBDcmVhdGlvbkZsYWdCaXRzIHsKKyAgICAgICAgVXNlU2tpYUdQ
VSA9IDEKKyAgICB9OworICAgIHR5cGVkZWYgdW5zaWduZWQgQ3JlYXRpb25GbGFnczsKKworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGUoSG9zdFdp
bmRvdyosIENyZWF0aW9uRmxhZ3MpOwogICAgIH5TaGFyZWRHcmFwaGljc0NvbnRleHQzRCgpOwog
CiAgICAgLy8gRnVuY3Rpb25zIHRoYXQgZGVsZWdhdGUgZGlyZWN0bHkgdG8gR3JhcGhpY3NDb250
ZXh0M0QsIHdpdGggY2FjaGluZwpAQCAtMTE2LDYgKzEyMiw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKTsK
IAogICAgIGJvb2wgc3VwcG9ydHNCR1JBKCk7CisgICAgYm9vbCBzdXBwb3J0c0NvbXBvc2l0ZU9w
KENvbXBvc2l0ZU9wZXJhdG9yKSBjb25zdDsKIAogICAgIC8vIENyZWF0ZXMgYSB0ZXh0dXJlIGFz
c29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gaW1hZ2UuICBJcyBvd25lZCBieSB0aGlzIGNvbnRleHQn
cwogICAgIC8vIFRleHR1cmVIYXNoTWFwLgpAQCAtMTM5LDEyICsxNDYsMTIgQEAgcHVibGljOgog
ICAgIHZvaWQgdXNlTG9vcEJsaW5uRXh0ZXJpb3JQcm9ncmFtKHVuc2lnbmVkIHZlcnRleE9mZnNl
dCwgdW5zaWduZWQga2xtT2Zmc2V0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBDb2xv
ciYpOwogICAgIERyYXdpbmdCdWZmZXIqIGdldE9mZnNjcmVlbkJ1ZmZlcih1bnNpZ25lZCBpbmRl
eCwgY29uc3QgSW50U2l6ZSYpOwogCi0jaWYgRU5BQkxFKFNLSUFfR1BVKQorI2lmIFVTRShTS0lB
KQogICAgIEdyQ29udGV4dCogZ3JDb250ZXh0KCk7CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBT
aGFyZWRHcmFwaGljc0NvbnRleHQzRChQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFz
c093blB0cjxTb2xpZEZpbGxTaGFkZXI+LCBQYXNzT3duUHRyPFRleFNoYWRlcj4sIFBhc3NPd25Q
dHI8QmljdWJpY1NoYWRlcj4sIFBhc3NPd25BcnJheVB0cjxPd25QdHI8Q29udm9sdXRpb25TaGFk
ZXI+ID4pOworICAgIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKFBhc3NSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+LCBQYXNzT3duUHRyPFNvbGlkRmlsbFNoYWRlcj4sIFBhc3NPd25QdHI8VGV4U2hh
ZGVyPiwgUGFzc093blB0cjxCaWN1YmljU2hhZGVyPiwgUGFzc093bkFycmF5UHRyPE93blB0cjxD
b252b2x1dGlvblNoYWRlcj4gPiwgQ3JlYXRpb25GbGFncyk7CiAKICAgICAvLyBVc2VkIHRvIGlt
cGxlbWVudCByZW1vdmVUZXh0dXJlc0ZvcigpLCBzZWUgdGhlIGNvbW1lbnQgYWJvdmUuCiAgICAg
c3RhdGljIEhhc2hTZXQ8U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqPiogYWxsQ29udGV4dHMoKTsK
QEAgLTE3MCw3ICsxNzcsOCBAQCBwcml2YXRlOgogCiAgICAgV1RGOjpWZWN0b3I8UmVmUHRyPERy
YXdpbmdCdWZmZXI+ID4gbV9vZmZzY3JlZW5CdWZmZXJzOwogCi0jaWYgRU5BQkxFKFNLSUFfR1BV
KQorICAgIHVuc2lnbmVkIG1fZmxhZ3M7CisjaWYgVVNFKFNLSUEpCiAgICAgR3JDb250ZXh0KiBt
X2dyQ29udGV4dDsKICNlbmRpZgogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAJKHJldmlzaW9uIDg0OTU3KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Niw3ICs2Niw2IEBAIGVudW0gUmVzYW1wbGluZ01vZGUgewogICAgIFJF
U0FNUExFX0FXRVNPTUUsCiB9OwogCi0jaWYgIUVOQUJMRShTS0lBX0dQVSkKIHN0YXRpYyBSZXNh
bXBsaW5nTW9kZSBjb21wdXRlUmVzYW1wbGluZ01vZGUoUGxhdGZvcm1Db250ZXh0U2tpYSogcGxh
dGZvcm1Db250ZXh0LCBjb25zdCBOYXRpdmVJbWFnZVNraWEmIGJpdG1hcCwgaW50IHNyY1dpZHRo
LCBpbnQgc3JjSGVpZ2h0LCBmbG9hdCBkZXN0V2lkdGgsIGZsb2F0IGRlc3RIZWlnaHQpCiB7CiAg
ICAgaWYgKHBsYXRmb3JtQ29udGV4dC0+aGFzSW1hZ2VSZXNhbXBsaW5nSGludCgpKSB7CkBAIC0x
NTEsNyArMTUwLDYgQEAgc3RhdGljIFJlc2FtcGxpbmdNb2RlIGNvbXB1dGVSZXNhbXBsaW5nTQog
ICAgIAogICAgIHJldHVybiBSRVNBTVBMRV9MSU5FQVI7CiB9Ci0jZW5kaWYKIAogLy8gRHJhd3Mg
dGhlIGdpdmVuIGJpdG1hcCB0byB0aGUgZ2l2ZW4gY2FudmFzLiBUaGUgc3Vic2V0IG9mIHRoZSBz
b3VyY2UgYml0bWFwCiAvLyBpZGVudGlmaWVkIGJ5IHNyY19yZWN0IGlzIGRyYXduIHRvIHRoZSBn
aXZlbiBkZXN0aW5hdGlvbiByZWN0LiBUaGUgYml0bWFwCkBAIC0yNjcsMTQgKzI2NSwxMSBAQCBz
dGF0aWMgdm9pZCBwYWludFNrQml0bWFwKFBsYXRmb3JtQ29udGV4CiAgICAgU2tDYW52YXMqIGNh
bnZhcyA9IHBsYXRmb3JtQ29udGV4dC0+Y2FudmFzKCk7CiAKICAgICBSZXNhbXBsaW5nTW9kZSBy
ZXNhbXBsaW5nOwotI2lmIEVOQUJMRShTS0lBX0dQVSkKLSAgICByZXNhbXBsaW5nID0gUkVTQU1Q
TEVfTElORUFSOwotI2Vsc2UKLSAgICByZXNhbXBsaW5nID0gcGxhdGZvcm1Db250ZXh0LT5wcmlu
dGluZygpID8gUkVTQU1QTEVfTk9ORSA6Ci0gICAgICAgIGNvbXB1dGVSZXNhbXBsaW5nTW9kZShw
bGF0Zm9ybUNvbnRleHQsIGJpdG1hcCwgc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXJUb0Zsb2F0KGRlc3RSZWN0
LndpZHRoKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXJUb0Zsb2F0
KGRlc3RSZWN0LmhlaWdodCgpKSk7Ci0jZW5kaWYKKyAgICBpZiAocGxhdGZvcm1Db250ZXh0LT51
c2VTa2lhR1BVKCkpCisgICAgICAgIHJlc2FtcGxpbmcgPSBSRVNBTVBMRV9MSU5FQVI7CisgICAg
ZWxzZQorICAgICAgICByZXNhbXBsaW5nID0gcGxhdGZvcm1Db250ZXh0LT5wcmludGluZygpID8g
UkVTQU1QTEVfTk9ORSA6CisgICAgICAgICAgICBjb21wdXRlUmVzYW1wbGluZ01vZGUocGxhdGZv
cm1Db250ZXh0LCBiaXRtYXAsIHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSwgU2tT
Y2FsYXJUb0Zsb2F0KGRlc3RSZWN0LndpZHRoKCkpLCBTa1NjYWxhclRvRmxvYXQoZGVzdFJlY3Qu
aGVpZ2h0KCkpKTsKICAgICBpZiAocmVzYW1wbGluZyA9PSBSRVNBTVBMRV9BV0VTT01FKSB7CiAg
ICAgICAgIGRyYXdSZXNhbXBsZWRCaXRtYXAoKmNhbnZhcywgcGFpbnQsIGJpdG1hcCwgc3JjUmVj
dCwgZGVzdFJlY3QpOwogICAgIH0gZWxzZSB7CkBAIC0zNzAsMTcgKzM2NSwxNCBAQCB2b2lkIElt
YWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqCiAKICAgICAvLyBDb21wdXRlIHRoZSBy
ZXNhbXBsaW5nIG1vZGUuCiAgICAgUmVzYW1wbGluZ01vZGUgcmVzYW1wbGluZzsKLSNpZiBFTkFC
TEUoU0tJQV9HUFUpCi0gICAgcmVzYW1wbGluZyA9IFJFU0FNUExFX0xJTkVBUjsKLSNlbHNlCi0g
ICAgaWYgKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5wcmludGluZygpKQotICAgICAgcmVz
YW1wbGluZyA9IFJFU0FNUExFX0xJTkVBUjsKKyAgICBpZiAoY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCktPnVzZVNraWFHUFUoKSkKKyAgICAgICAgcmVzYW1wbGluZyA9IFJFU0FNUExFX0xJTkVB
UjsKICAgICBlbHNlIHsKLSAgICAgIHJlc2FtcGxpbmcgPSBjb21wdXRlUmVzYW1wbGluZ01vZGUo
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksICpiaXRtYXAsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdEJpdG1hcFdpZHRo
LCBkZXN0Qml0bWFwSGVpZ2h0KTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLT5wcmludGluZygpKQorICAgICAgICAgICAgcmVzYW1wbGluZyA9IFJFU0FNUExFX0xJTkVB
UjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzYW1wbGluZyA9IGNvbXB1dGVSZXNhbXBs
aW5nTW9kZShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgKmJpdG1hcCwgc3JjUmVjdC53aWR0
aCgpLCBzcmNSZWN0LmhlaWdodCgpLCBkZXN0Qml0bWFwV2lkdGgsIGRlc3RCaXRtYXBIZWlnaHQp
OwogICAgIH0KLSNlbmRpZgogCiAgICAgLy8gTG9hZCB0aGUgdHJhbnNmb3JtIFdlYktpdCByZXF1
ZXN0ZWQuCiAgICAgU2tNYXRyaXggbWF0cml4KHBhdHRlcm5UcmFuc2Zvcm0pOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Bs
YXRmb3JtQ29udGV4dFNraWEuY3BwCShyZXZpc2lvbiA4NDk1NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUxLDExICs1MSw5IEBACiAjaW5jbHVkZSAiU2tEYXNoUGF0aEVmZmVjdC5oIgog
I2luY2x1ZGUgIlNrU2hhZGVyLmgiCiAKLSNpZiBFTkFCTEUoU0tJQV9HUFUpCiAjaW5jbHVkZSAi
R3JDb250ZXh0LmgiCiAjaW5jbHVkZSAiU2tHcHVEZXZpY2UuaCIKICNpbmNsdWRlICJTa0dwdURl
dmljZUZhY3RvcnkuaCIKLSNlbmRpZgogCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0yMTYsNyArMjE0LDcgQEAgUGxhdGZvcm1Db250ZXh0
U2tpYTo6UGxhdGZvcm1Db250ZXh0U2tpYQogICAgIDogbV9jYW52YXMoY2FudmFzKQogICAgICwg
bV9wcmludGluZyhmYWxzZSkKICAgICAsIG1fZHJhd2luZ1RvSW1hZ2VCdWZmZXIoZmFsc2UpCi0g
ICAgLCBtX3VzZUdQVShmYWxzZSkKKyAgICAsIG1fYWNjZWxlcmF0aW9uTW9kZShOb0FjY2VsZXJh
dGlvbikKICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgICwgbV9ncHVDYW52
YXMoMCkKICNlbmRpZgpAQCAtMjMwLDE0ICsyMjgsMTIgQEAgUGxhdGZvcm1Db250ZXh0U2tpYTo6
flBsYXRmb3JtQ29udGV4dFNraQogewogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMp
CiAgICAgaWYgKG1fZ3B1Q2FudmFzKSB7Ci0jaWYgRU5BQkxFKFNLSUFfR1BVKQogICAgICAgICAv
LyBtYWtlIHN1cmUgZXZlcnl0aGluZyByZWxhdGVkIHRvIHRoaXMgcGxhdGZvcm0gY29udGV4dCBo
YXMgYmVlbiBmbHVzaGVkCi0gICAgICAgIGlmICghbV91c2VHUFUpIHsKKyAgICAgICAgaWYgKHVz
ZVNraWFHUFUoKSkgewogICAgICAgICAgICAgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQgPSBtX2dwdUNhbnZhcy0+Y29udGV4dCgpOwogICAgICAgICAgICAgY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CiAgICAgICAgICAgICBjb250ZXh0LT5nckNvbnRleHQoKS0+Zmx1c2go
MCk7CiAgICAgICAgIH0KLSNlbmRpZgogICAgICAgICBtX2dwdUNhbnZhcy0+ZHJhd2luZ0J1ZmZl
cigpLT5zZXRXaWxsUHVibGlzaENhbGxiYWNrKDApOwogICAgIH0KICNlbmRpZgpAQCAtNjE3LDEw
ICs2MTMsOCBAQCBib29sIFBsYXRmb3JtQ29udGV4dFNraWE6OmlzTmF0aXZlRm9udFJlCiAjaWYg
RU5BQkxFKFNLSUFfVEVYVCkKICAgICByZXR1cm4gZmFsc2U7CiAjZWxzZQotI2lmIEVOQUJMRShT
S0lBX0dQVSkKLSAgICBpZiAoIW1fdXNlR1BVICYmIG1fZ3B1Q2FudmFzKQorICAgIGlmIChtX2Fj
Y2VsZXJhdGlvbk1vZGUgPT0gU2tpYUdQVSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlm
CiAgICAgcmV0dXJuIHNraWE6OlN1cHBvcnRzUGxhdGZvcm1QYWludChtX2NhbnZhcyk7CiAjZW5k
aWYKIH0KQEAgLTcyOSw0NSArNzIzLDQ3IEBAIHByaXZhdGU6CiAKIHZvaWQgUGxhdGZvcm1Db250
ZXh0U2tpYTo6c2V0U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoU2hhcmVkR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIsIGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIHNpemUpCiB7CisgICAgbV9hY2NlbGVyYXRpb25Nb2RlID0gTm9BY2NlbGVyYXRp
b247CiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBpZiAoY29udGV4dCAm
JiBkcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIG1fdXNlR1BVID0gdHJ1ZTsKICAgICAgICAgbV9n
cHVDYW52YXMgPSBuZXcgR3JhcGhpY3NDb250ZXh0R1BVKGNvbnRleHQsIGRyYXdpbmdCdWZmZXIs
IHNpemUpOwogICAgICAgICBtX3VwbG9hZFRleHR1cmUuY2xlYXIoKTsKICAgICAgICAgZHJhd2lu
Z0J1ZmZlci0+c2V0V2lsbFB1Ymxpc2hDYWxsYmFjayhXaWxsUHVibGlzaENhbGxiYWNrSW1wbDo6
Y3JlYXRlKHRoaXMpKTsKIAotI2lmIEVOQUJMRShTS0lBX0dQVSkKLSAgICAgICAgbV91c2VHUFUg
PSBmYWxzZTsKLSAgICAgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgICAg
IG1fZ3B1Q2FudmFzLT5iaW5kRnJhbWVidWZmZXIoKTsKLQorICAgICAgICAvLyB1c2Ugc2tpYSBn
cHUgcmVuZGVyaW5nIGlmIGF2YWlsYWJsZQogICAgICAgICBHckNvbnRleHQqIGdyID0gY29udGV4
dC0+Z3JDb250ZXh0KCk7Ci0gICAgICAgIGdyLT5yZXNldENvbnRleHQoKTsKLSAgICAgICAgZHJh
d2luZ0J1ZmZlci0+c2V0R3JDb250ZXh0KGdyKTsKKyAgICAgICAgaWYgKGdyKSB7CisgICAgICAg
ICAgICBtX2FjY2VsZXJhdGlvbk1vZGUgPSBTa2lhR1BVOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAgICAgICAgIG1fZ3B1Q2Fu
dmFzLT5iaW5kRnJhbWVidWZmZXIoKTsKIAotICAgICAgICBHclBsYXRmb3JtU3VyZmFjZURlc2Mg
ZHJhd0J1ZkRlc2M7Ci0gICAgICAgIGRyYXdpbmdCdWZmZXItPmdldEdyUGxhdGZvcm1TdXJmYWNl
RGVzYygmZHJhd0J1ZkRlc2MpOwotICAgICAgICBHclRleHR1cmUqIGRyYXdCdWZUZXggPSBzdGF0
aWNfY2FzdDxHclRleHR1cmUqPihnci0+Y3JlYXRlUGxhdGZvcm1TdXJmYWNlKGRyYXdCdWZEZXNj
KSk7Ci0gICAgICAgIFNrRGV2aWNlRmFjdG9yeSogZmFjdG9yeSA9IG5ldyBTa0dwdURldmljZUZh
Y3RvcnkoZ3IsIGRyYXdCdWZUZXgpOwotICAgICAgICBkcmF3QnVmVGV4LT51bnJlZigpOwotCi0g
ICAgICAgIFNrRGV2aWNlKiBkZXZpY2UgPSBmYWN0b3J5LT5uZXdEZXZpY2UobV9jYW52YXMsIFNr
Qml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCks
IGRyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKSwgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAg
bV9jYW52YXMtPnNldERldmljZShkZXZpY2UpLT51bnJlZigpOwotICAgICAgICBtX2NhbnZhcy0+
c2V0RGV2aWNlRmFjdG9yeShmYWN0b3J5KTsKLSNlbmRpZgorICAgICAgICAgICAgZ3ItPnJlc2V0
Q29udGV4dCgpOworICAgICAgICAgICAgZHJhd2luZ0J1ZmZlci0+c2V0R3JDb250ZXh0KGdyKTsK
KworICAgICAgICAgICAgR3JQbGF0Zm9ybVN1cmZhY2VEZXNjIGRyYXdCdWZEZXNjOworICAgICAg
ICAgICAgZHJhd2luZ0J1ZmZlci0+Z2V0R3JQbGF0Zm9ybVN1cmZhY2VEZXNjKCZkcmF3QnVmRGVz
Yyk7CisgICAgICAgICAgICBHclRleHR1cmUqIGRyYXdCdWZUZXggPSBzdGF0aWNfY2FzdDxHclRl
eHR1cmUqPihnci0+Y3JlYXRlUGxhdGZvcm1TdXJmYWNlKGRyYXdCdWZEZXNjKSk7CisgICAgICAg
ICAgICBTa0RldmljZUZhY3RvcnkqIGZhY3RvcnkgPSBuZXcgU2tHcHVEZXZpY2VGYWN0b3J5KGdy
LCBkcmF3QnVmVGV4KTsKKyAgICAgICAgICAgIGRyYXdCdWZUZXgtPnVucmVmKCk7CisKKyAgICAg
ICAgICAgIFNrRGV2aWNlKiBkZXZpY2UgPSBmYWN0b3J5LT5uZXdEZXZpY2UobV9jYW52YXMsIFNr
Qml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCks
IGRyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKSwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAg
ICAgIG1fY2FudmFzLT5zZXREZXZpY2UoZGV2aWNlKS0+dW5yZWYoKTsKKyAgICAgICAgICAgIG1f
Y2FudmFzLT5zZXREZXZpY2VGYWN0b3J5KGZhY3RvcnkpOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIG1fYWNjZWxlcmF0aW9uTW9kZSA9IEdQVTsKICAgICB9IGVsc2UgewogICAgICAgICBz
eW5jU29mdHdhcmVDYW52YXMoKTsKICAgICAgICAgbV91cGxvYWRUZXh0dXJlLmNsZWFyKCk7CiAg
ICAgICAgIG1fZ3B1Q2FudmFzLmNsZWFyKCk7Ci0gICAgICAgIG1fdXNlR1BVID0gZmFsc2U7CiAg
ICAgfQogI2VuZGlmCiB9CiAKIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6cHJlcGFyZUZvclNv
ZnR3YXJlRHJhdygpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3VzZUdQVSkgewotI2lmIEVOQUJMRShT
S0lBX0dQVSkKKyAgICBpZiAobV9hY2NlbGVyYXRpb25Nb2RlID09IFNraWFHUFUpIHsKKyNpZiBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgICAgICBpZiAobV9ncHVDYW52YXMpCiAg
ICAgICAgICAgICBtX2dwdUNhbnZhcy0+Y29udGV4dCgpLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
ICNlbmRpZgpAQCAtODA5LDcgKzgwNSw3IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6cHJl
cGFyZUZvclNvZnQKIAogdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpwcmVwYXJlRm9ySGFyZHdh
cmVEcmF3KCkgY29uc3QKIHsKLSAgICBpZiAoIW1fdXNlR1BVKQorICAgIGlmICghKG1fYWNjZWxl
cmF0aW9uTW9kZSA9PSBHUFUpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9iYWNraW5n
U3RvcmVTdGF0ZSA9PSBTb2Z0d2FyZSkgewpAQCAtODI1LDggKzgyMSw4IEBAIHZvaWQgUGxhdGZv
cm1Db250ZXh0U2tpYTo6cHJlcGFyZUZvckhhcmQKIAogdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lh
OjpzeW5jU29mdHdhcmVDYW52YXMoKSBjb25zdAogewotICAgIGlmICghbV91c2VHUFUpIHsKLSNp
ZiBFTkFCTEUoU0tJQV9HUFUpCisgICAgaWYgKG1fYWNjZWxlcmF0aW9uTW9kZSA9PSBTa2lhR1BV
KSB7CisjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICAgICAgaWYgKG1fZ3B1
Q2FudmFzKQogICAgICAgICAgICAgbV9ncHVDYW52YXMtPmNvbnRleHQoKS0+bWFrZUNvbnRleHRD
dXJyZW50KCk7CiAjZW5kaWYKQEAgLTg0Nyw3ICs4NDMsNyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4
dFNraWE6OnN5bmNTb2Z0d2FyZUNhCiAKIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6bWFya0Rp
cnR5UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmICghbV91c2VHUFUpCisgICAg
aWYgKG1fYWNjZWxlcmF0aW9uTW9kZSAhPSBHUFUpCiAgICAgICAgIHJldHVybjsKIAogICAgIHN3
aXRjaCAobV9iYWNraW5nU3RvcmVTdGF0ZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgJ
KHJldmlzaW9uIDg0OTU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDEyIEBA
IGNsYXNzIFRleHR1cmU7CiBjbGFzcyBQbGF0Zm9ybUNvbnRleHRTa2lhIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShQbGF0Zm9ybUNvbnRleHRTa2lhKTsKIHB1YmxpYzoKKyAgICBlbnVtIEFj
Y2VsZXJhdGlvbk1vZGUgeworICAgICAgICBOb0FjY2VsZXJhdGlvbiwKKyAgICAgICAgR1BVLAor
ICAgICAgICBTa2lhR1BVCisgICAgfTsKKwogICAgIC8vIEZvciBwcmludGluZywgdGhlcmUgc2hv
dWxkbid0IGJlIGFueSBjYW52YXMuIGNhbnZhcyBjYW4gYmUgTlVMTC4gSWYgeW91CiAgICAgLy8g
c3VwcGx5IGEgTlVMTCBjYW52YXMsIHlvdSBjYW4gYWxzbyBjYWxsIHNldENhbnZhcyBsYXRlci4K
ICAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKFNrQ2FudmFzKik7CkBAIC0xNzgsNyArMTg0LDkgQEAg
cHVibGljOgogCiAgICAgYm9vbCBjYW5BY2NlbGVyYXRlKCkgY29uc3Q7CiAgICAgYm9vbCBjYW52
YXNDbGlwQXBwbGllZCgpIGNvbnN0OwotICAgIGJvb2wgdXNlR1BVKCkgeyByZXR1cm4gbV91c2VH
UFU7IH0KKyAgICBBY2NlbGVyYXRpb25Nb2RlIGFjY2VsZXJhdGlvbk1vZGUoKSBjb25zdCB7IHJl
dHVybiBtX2FjY2VsZXJhdGlvbk1vZGU7IH0KKyAgICBib29sIHVzZUdQVSgpIGNvbnN0IHsgcmV0
dXJuIG1fYWNjZWxlcmF0aW9uTW9kZSA9PSBHUFU7IH0KKyAgICBib29sIHVzZVNraWFHUFUoKSBj
b25zdCB7IHJldHVybiBtX2FjY2VsZXJhdGlvbk1vZGUgPT0gU2tpYUdQVTsgfQogICAgIHZvaWQg
c2V0U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqLCBEcmF3
aW5nQnVmZmVyKiwgY29uc3QgSW50U2l6ZSYpOwogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpCiAgICAgR3JhcGhpY3NDb250ZXh0R1BVKiBncHVDYW52YXMoKSBjb25zdCB7IHJldHVy
biBtX2dwdUNhbnZhcy5nZXQoKTsgfQpAQCAtMjIxLDcgKzIyOSw3IEBAIHByaXZhdGU6CiAgICAg
RmxvYXRTaXplIG1faW1hZ2VSZXNhbXBsaW5nSGludERzdFNpemU7CiAgICAgYm9vbCBtX3ByaW50
aW5nOwogICAgIGJvb2wgbV9kcmF3aW5nVG9JbWFnZUJ1ZmZlcjsKLSAgICBib29sIG1fdXNlR1BV
OworICAgIEFjY2VsZXJhdGlvbk1vZGUgbV9hY2NlbGVyYXRpb25Nb2RlOwogI2lmIEVOQUJMRShB
Q0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dEdQVT4gbV9n
cHVDYW52YXM7CiAgICAgbXV0YWJsZSBSZWZQdHI8VGV4dHVyZT4gbV91cGxvYWRUZXh0dXJlOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>