<?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>79395</bug_id>
          
          <creation_ts>2012-02-23 13:45:53 -0800</creation_ts>
          <short_desc>Add ImageBuffer support for having a hi-res backing store</short_desc>
          <delta_ts>2012-02-27 12:43:53 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>79396</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Matthew Delaney">mdelaney7</reporter>
          <assigned_to name="Matthew Delaney">mdelaney7</assigned_to>
          <cc>bdakin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gustavo</cc>
    
    <cc>hyatt</cc>
    
    <cc>mitz</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>563425</commentid>
    <comment_count>0</comment_count>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2012-02-23 13:45:53 -0800</bug_when>
    <thetext>Many of the clients of ImageBuffer create oversized versions and then scale up their contexts to have a high-res version of the ImageBuffer. This logic is being duplicated in many locations and should just be moved down into ImageBuffer. This bug tracks building hi-res support directly into ImageBuffer so that the ImageBuffer internals can deal with the scale factor directly.

One example of a client whose code would become much cleaner by adopting this would be &lt;canvas&gt;. I&apos;ll file a follow up bug to track &lt;canvas&gt; adopting this change in factor of mucking with the internals of the ImageBuffer directly, as it currently does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563439</commentid>
    <comment_count>1</comment_count>
      <attachid>128550</attachid>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2012-02-23 13:55:13 -0800</bug_when>
    <thetext>Created attachment 128550
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563441</commentid>
    <comment_count>2</comment_count>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2012-02-23 13:56:41 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=128550) [details]
&gt; Patch

Note: I still need to update the other platforms, though the bots are pretty broken right now anyhow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563445</commentid>
    <comment_count>3</comment_count>
      <attachid>128550</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-23 13:58:12 -0800</bug_when>
    <thetext>Comment on attachment 128550
Patch

Attachment 128550 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11576426</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563449</commentid>
    <comment_count>4</comment_count>
      <attachid>128550</attachid>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2012-02-23 13:59:18 -0800</bug_when>
    <thetext>Comment on attachment 128550
Patch

That patch had some junk in it, reuploading in a min.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563480</commentid>
    <comment_count>5</comment_count>
      <attachid>128550</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-02-23 14:23:47 -0800</bug_when>
    <thetext>Comment on attachment 128550
Patch

Attachment 128550 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11610371</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563497</commentid>
    <comment_count>6</comment_count>
      <attachid>128550</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-23 14:39:55 -0800</bug_when>
    <thetext>Comment on attachment 128550
Patch

Attachment 128550 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11600444</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563562</commentid>
    <comment_count>7</comment_count>
      <attachid>128570</attachid>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2012-02-23 15:36:19 -0800</bug_when>
    <thetext>Created attachment 128570
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563563</commentid>
    <comment_count>8</comment_count>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2012-02-23 15:37:11 -0800</bug_when>
    <thetext>I reworked it to require less changes to other ports. So, this patch is EWS food.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563570</commentid>
    <comment_count>9</comment_count>
      <attachid>128570</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-23 15:44:27 -0800</bug_when>
    <thetext>Comment on attachment 128570
Patch

Attachment 128570 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11576463</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563579</commentid>
    <comment_count>10</comment_count>
      <attachid>128576</attachid>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2012-02-23 15:47:42 -0800</bug_when>
    <thetext>Created attachment 128576
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563630</commentid>
    <comment_count>11</comment_count>
      <attachid>128586</attachid>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2012-02-23 16:11:20 -0800</bug_when>
    <thetext>Created attachment 128586
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563632</commentid>
    <comment_count>12</comment_count>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2012-02-23 16:11:59 -0800</bug_when>
    <thetext>Had a mistype in the last patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563693</commentid>
    <comment_count>13</comment_count>
      <attachid>128586</attachid>
    <who name="">mitz</who>
    <bug_when>2012-02-23 16:53:14 -0800</bug_when>
    <thetext>Comment on attachment 128586
Patch

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

&gt; Source/WebCore/ChangeLog:15
&gt; +        (WebCore::ImageBuffer::devicePixelRatio): Add a way to access if ratio.

“if”?

&gt; Source/WebCore/ChangeLog:17
&gt; +        (WebCore::ImageBuffer::dataSize): Differentiate between the logical size and the underlying data&apos;s size.

To me, “data size” strongly suggests “number of bytes”. How about “physicalSize” instead?

&gt; Source/WebCore/ChangeLog:20
&gt; +        and thus clearer use of logicalSize or deviceSize.

Here you call it “deviceSize” but I suspect you mean the same thing as “dataSize”.

&gt; Source/WebCore/html/HTMLCanvasElement.cpp:527
&gt; -    scriptExecutionContext()-&gt;globalData()-&gt;heap.reportExtraMemoryCost(m_imageBuffer-&gt;dataSize());
&gt; +    size_t numBytes = 4 * m_imageBuffer-&gt;dataSize().width() * m_imageBuffer-&gt;dataSize().height();
&gt; +    scriptExecutionContext()-&gt;globalData()-&gt;heap.reportExtraMemoryCost(numBytes);

Now I see that dataSize() currently does mean a size in bytes. I strongly suggest leaving it to mean that, and using a different name for the new function.

&gt; Source/WebCore/platform/graphics/ImageBuffer.h:84
&gt; +            dataSize.scale(devicePixelRatio);

Does this need to be rounded up?

&gt; Source/WebCore/platform/graphics/ImageBuffer.h:91
&gt; +            buf-&gt;context()-&gt;scale(FloatSize(devicePixelRatio, devicePixelRatio));
&gt; +            buf-&gt;m_devicePixelRatio = devicePixelRatio;

Is there a reason why you didn’t just add the device pixel ratio to the ImageBuffer constructor?

&gt; Source/WebCore/platform/graphics/ImageBuffer.h:105
&gt; +        const IntSize logicalSize() const
&gt; +        { 
&gt; +            IntSize logicalSize = dataSize();
&gt; +            logicalSize.scale(1 / devicePixelRatio());
&gt; +            return logicalSize;
&gt; +        }
&gt; +

Because of rounding, this is not necessarily going to return the size you passed the ImageBuffer::create(). Isn’t this going to be inconvenient for clients?

&gt; Source/WebCore/platform/graphics/ImageBuffer.h:160
&gt; +        

Why the newline?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563703</commentid>
    <comment_count>14</comment_count>
      <attachid>128586</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-02-23 16:56:00 -0800</bug_when>
    <thetext>Comment on attachment 128586
Patch

Attachment 128586 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11603489</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563727</commentid>
    <comment_count>15</comment_count>
      <attachid>128586</attachid>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2012-02-23 17:25:52 -0800</bug_when>
    <thetext>Comment on attachment 128586
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:17
&gt;&gt; +        (WebCore::ImageBuffer::dataSize): Differentiate between the logical size and the underlying data&apos;s size.
&gt; 
&gt; To me, “data size” strongly suggests “number of bytes”. How about “physicalSize” instead?

How about &quot;deviceSize&quot; instead? Then it&apos;ll match the already-existing notion of &quot;deviceScaleFactor&quot;.

&gt;&gt; Source/WebCore/ChangeLog:20
&gt;&gt; +        and thus clearer use of logicalSize or deviceSize.
&gt; 
&gt; Here you call it “deviceSize” but I suspect you mean the same thing as “dataSize”.

Yep, typo when I was already thinking of this as an alternate name! :-)

&gt;&gt; Source/WebCore/html/HTMLCanvasElement.cpp:527
&gt;&gt; +    scriptExecutionContext()-&gt;globalData()-&gt;heap.reportExtraMemoryCost(numBytes);
&gt; 
&gt; Now I see that dataSize() currently does mean a size in bytes. I strongly suggest leaving it to mean that, and using a different name for the new function.

That old declaration of dataSize() returned the number of bytes and this was the only call site. The new version of the method returns the size w.r.t pixels, not bytes.  So, I updated this to have a mult by 4 to calc the number of bytes for the purposes of this gc hook.

&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.h:84
&gt;&gt; +            dataSize.scale(devicePixelRatio);
&gt; 
&gt; Does this need to be rounded up?

Yea, good call. I&apos;ll fix this.

&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.h:91
&gt;&gt; +            buf-&gt;m_devicePixelRatio = devicePixelRatio;
&gt; 
&gt; Is there a reason why you didn’t just add the device pixel ratio to the ImageBuffer constructor?

Yea, I wanted to avoid having to modify all the platform impls ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563772</commentid>
    <comment_count>16</comment_count>
      <attachid>128576</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-02-23 17:57:57 -0800</bug_when>
    <thetext>Comment on attachment 128576
Patch

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

&gt; Source/WebCore/platform/graphics/ImageBuffer.h:97
&gt; +        bool devicePixelRatio() const { return m_devicePixelRatio; }

We use the term deviceScaleFactor() elsewhere. However, this is ImageBuffer&apos;s pixel ratio, not a device pixel ratio.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563861</commentid>
    <comment_count>17</comment_count>
      <attachid>128635</attachid>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2012-02-23 20:01:11 -0800</bug_when>
    <thetext>Created attachment 128635
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563867</commentid>
    <comment_count>18</comment_count>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2012-02-23 20:06:40 -0800</bug_when>
    <thetext>&gt; We use the term deviceScaleFactor() elsewhere. However, this is ImageBuffer&apos;s pixel ratio, not a device pixel ratio.

Yea, using deviceScaleFactor here was a dumb idea. I made a new patch that just cuts out using it altogether since it&apos;s misleading if the xScale and yScale differ by a little due to integer rounding. Also, I renamed the size of the ImageBuffer&apos;s internal backing store to be &quot;internalSize&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565894</commentid>
    <comment_count>19</comment_count>
      <attachid>129086</attachid>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2012-02-27 12:24:08 -0800</bug_when>
    <thetext>Created attachment 129086
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565905</commentid>
    <comment_count>20</comment_count>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2012-02-27 12:43:53 -0800</bug_when>
    <thetext>Committed r109016: &lt;http://trac.webkit.org/changeset/109016&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128550</attachid>
            <date>2012-02-23 13:55:13 -0800</date>
            <delta_ts>2012-02-23 15:36:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79395-20120223135512.patch</filename>
            <type>text/plain</type>
            <size>41774</size>
            <attacher name="Matthew Delaney">mdelaney7</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODY3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDEyLTAyLTIzICBNYXR0aGV3
IERlbGFuZXkgIDxtZGVsYW5leUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIEltYWdlQnVmZmVy
IHN1cHBvcnQgZm9yIGhhdmluZyBhIGhpLXJlcyBiYWNraW5nIHN0b3JlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTM5NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBncm91
bmR3b3JrIHBhdGNoIGRvZXNuJ3QgY2hhbmdlIGJlaGF2aW9yLgorCisgICAgICAgICogaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVu
dDo6Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmNyZWF0ZUNvbXBvc2l0aW5nQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJbnRlcm5hbCk6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJbWFnZUJ1ZmZlckNh
Y2hlOjppbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZTo6bm9kZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpkcmFn
SW1hZ2VGb3JTZWxlY3Rpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFk
ZUdlbmVyYXRlZEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyb3NzZmFkZUdlbmVyYXRl
ZEltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1Rp
bGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZUNvbXBhdGli
bGVCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRvTHVtaW5hbmNl
TWFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoSW1hZ2VCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRldmljZVBpeGVsUmF0aW8pOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmxvZ2ljYWxTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyOjpsb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmxvZ2ljYWxIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRh
dGFTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkYXRhV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRhdGFIZWlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmJhc2VUcmFuc2Zvcm0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyYXRjaEJ1ZmZlcjo6Z2V0
U2NyYXRjaEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3U2hhZG93
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvcHlOYXRpdmVJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZElt
YWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGll
ZEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0RhdGFVUkwpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmFzSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRo
ZW1lTWFjOjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyOjpwcmVwYXJlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdl
QnVmZmVyVG9vbHM6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lt
YWdlQnVmZmVyVG9vbHM6OmNyZWF0ZUltYWdlQnVmZmVyRm9yUGF0dGVybik6CisgICAgICAgICog
c3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpu
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0lt
YWdlQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6bG9va3VwT3JD
cmVhdGVCaXRtYXBJbWFnZUZvclJlbmRlcmVyKToKKwogMjAxMi0wMi0yMyAgRXJpayBBcnZpZHNz
b24gIDxhcnZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBJbnRlcmZh
Y2VOYW1lIGluIHRoZSBiaW5kaW5ncwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDEwODY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTMsNyArNTEzLDcgQEAg
dm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZQogICAgICAgICBVbmFjY2Vs
ZXJhdGVkOwogI2VuZGlmCiAgICAgRGVmZXJyYWxNb2RlIGRlZmVycmFsTW9kZSA9IHNob3VsZERl
ZmVyKCkgPyBEZWZlcnJlZCA6IE5vbkRlZmVycmVkOwotICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlclNpemUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIHJlbmRlcmlu
Z01vZGUsIGRlZmVycmFsTW9kZSk7CisgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoYnVmZmVyU2l6ZSwgMSwgQ29sb3JTcGFjZURldmljZVJHQiwgcmVuZGVyaW5nTW9kZSwg
ZGVmZXJyYWxNb2RlKTsKICAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybjsK
ICAgICBtX2ltYWdlQnVmZmVyLT5jb250ZXh0KCktPnNjYWxlKEZsb2F0U2l6ZShidWZmZXJTaXpl
LndpZHRoKCkgLyBsb2dpY2FsU2l6ZS53aWR0aCgpLCBidWZmZXJTaXplLmhlaWdodCgpIC8gbG9n
aWNhbFNpemUuaGVpZ2h0KCkpKTsKQEAgLTUyMyw3ICs1MjMsOCBAQCB2b2lkIEhUTUxDYW52YXNF
bGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlCiAKICNpZiBVU0UoSlNDKQogICAgIEpTQzo6SlNMb2Nr
IGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+Z2xvYmFsRGF0YSgpLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChtX2ltYWdl
QnVmZmVyLT5kYXRhU2l6ZSgpKTsKKyAgICBzaXplX3QgbnVtQnl0ZXMgPSA0ICogbV9pbWFnZUJ1
ZmZlci0+ZGF0YVdpZHRoKCkgKiBtX2ltYWdlQnVmZmVyLT5kYXRhSGVpZ2h0KCk7CisgICAgc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLT5nbG9iYWxEYXRhKCktPmhlYXAucmVwb3J0RXh0cmFNZW1v
cnlDb3N0KG51bUJ5dGVzKTsKICNlbmRpZgogCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFD
S0lOR19TVE9SRSkgfHwgKEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICYmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDEwODY2
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MjEsNyArMTUyMSw3IEBAIHRlbXBsYXRlPGNsYXNz
IFQ+IEludFJlY3QgQ2FudmFzUmVuZGVyaW4KIFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlQ29tcG9zaXRpbmdCdWZmZXIoY29uc3QgSW50UmVj
dCYgYnVmZmVyUmVjdCkKIHsKICAgICBSZW5kZXJpbmdNb2RlIHJlbmRlck1vZGUgPSBpc0FjY2Vs
ZXJhdGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7Ci0gICAgcmV0dXJuIEltYWdl
QnVmZmVyOjpjcmVhdGUoYnVmZmVyUmVjdC5zaXplKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIHJl
bmRlck1vZGUpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlclJlY3Quc2l6
ZSgpLCAxLCBDb2xvclNwYWNlRGV2aWNlUkdCLCByZW5kZXJNb2RlKTsKIH0KIAogdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNvbXBvc2l0ZUJ1ZmZlcihJbWFnZUJ1ZmZlciogYnVmZmVy
LCBjb25zdCBJbnRSZWN0JiBidWZmZXJSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCkKQEAgLTE4
ODMsNyArMTg4Myw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwdXRJbWFnZUQK
ICAgICBJbnRTaXplIGRlc3RPZmZzZXQoc3RhdGljX2Nhc3Q8aW50PihkeCksIHN0YXRpY19jYXN0
PGludD4oZHkpKTsKICAgICBJbnRSZWN0IGRlc3RSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjbGlw
UmVjdCk7CiAgICAgZGVzdFJlY3QubW92ZShkZXN0T2Zmc2V0KTsKLSAgICBkZXN0UmVjdC5pbnRl
cnNlY3QoSW50UmVjdChJbnRQb2ludCgpLCBidWZmZXItPnNpemUoKSkpOworICAgIGRlc3RSZWN0
LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KCksIGJ1ZmZlci0+ZGF0YVNpemUoKSkpOwogICAg
IGlmIChkZXN0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBJbnRSZWN0IHNv
dXJjZVJlY3QoZGVzdFJlY3QpOwpAQCAtMjA4OSw5ICsyMDg5LDkgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmRyYXdUZXh0SQogICAgICAgICBJbnRSZWN0IG1hc2tSZWN0ID0gZW5j
bG9zaW5nSW50UmVjdCh0ZXh0UmVjdCk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKQotICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1hc2tJbWFnZSA9IEltYWdl
QnVmZmVyOjpjcmVhdGUobWFza1JlY3Quc2l6ZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBBY2Nl
bGVyYXRlZCk7CisgICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbWFza0ltYWdlID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShtYXNrUmVjdC5zaXplKCksIDEsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEFj
Y2VsZXJhdGVkKTsKICNlbHNlCi0gICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbWFza0ltYWdl
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtYXNrUmVjdC5zaXplKCkpOworICAgICAgICBPd25QdHI8
SW1hZ2VCdWZmZXI+IG1hc2tJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUobWFza1JlY3Quc2l6
ZSgpLCAxKTsKICNlbmRpZgogCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogbWFza0ltYWdlQ29u
dGV4dCA9IG1hc2tJbWFnZS0+Y29udGV4dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAxMDg2
NjApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzE1LDEzICs1MzE1LDEzIEBAIEltYWdlQnVmZmVyKiBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OkxSVUkKICAgICAgICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9IG1f
YnVmZmVyc1tpXS5nZXQoKTsKICAgICAgICAgaWYgKCFidWYpCiAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgaWYgKGJ1Zi0+c2l6ZSgpICE9IHNpemUpCisgICAgICAgIGlmIChidWYtPmxvZ2lj
YWxTaXplKCkgIT0gc2l6ZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBidWJibGVU
b0Zyb250KGkpOwogICAgICAgICByZXR1cm4gYnVmOwogICAgIH0KIAotICAgIE93blB0cjxJbWFn
ZUJ1ZmZlcj4gdGVtcCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSk7CisgICAgT3duUHRyPElt
YWdlQnVmZmVyPiB0ZW1wID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCAxKTsKICAgICBpZiAo
IXRlbXApCiAgICAgICAgIHJldHVybiAwOwogICAgIGkgPSBzdGQ6Om1pbihtX2NhcGFjaXR5IC0g
MSwgaSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24gMTA4NjYwKQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwODUsNyArMTA4
NSw3IEBAIERyYWdJbWFnZVJlZiBGcmFtZTo6bm9kZUltYWdlKE5vZGUqIG5vZGUKICAgICBMYXlv
dXRSZWN0IHRvcExldmVsUmVjdDsKICAgICBJbnRSZWN0IHBhaW50aW5nUmVjdCA9IHBpeGVsU25h
cHBlZEludFJlY3QocmVuZGVyZXItPnBhaW50aW5nUm9vdFJlY3QodG9wTGV2ZWxSZWN0KSk7CiAK
LSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50
aW5nUmVjdC5zaXplKCkpKTsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVjdC5zaXplKCksIDEsIENvbG9yU3BhY2VEZXZpY2VSR0Ip
KTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIDA7CiAgICAgYnVmZmVyLT5jb250
ZXh0KCktPnRyYW5zbGF0ZSgtcGFpbnRpbmdSZWN0LngoKSwgLXBhaW50aW5nUmVjdC55KCkpOwpA
QCAtMTEwOCw3ICsxMTA4LDcgQEAgRHJhZ0ltYWdlUmVmIEZyYW1lOjpkcmFnSW1hZ2VGb3JTZWxl
Y3RpbwogCiAgICAgSW50UmVjdCBwYWludGluZ1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHNlbGVj
dGlvbigpLT5ib3VuZHMoKSk7CiAKLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVjdC5zaXplKCkpKTsKKyAgICBPd25QdHI8SW1hZ2VC
dWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVjdC5zaXplKCksIDEs
IENvbG9yU3BhY2VEZXZpY2VSR0IpKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgYnVmZmVyLT5jb250ZXh0KCktPnRyYW5zbGF0ZSgtcGFpbnRpbmdSZWN0LngoKSwg
LXBhaW50aW5nUmVjdC55KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcAkocmV2aXNp
b24gMTA4NjYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRl
R2VuZXJhdGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIHZvaWQg
Q3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U6OmRyYXcoR3JhcGgKIAogdm9pZCBDcm9zc2ZhZGVHZW5l
cmF0ZWRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBD
b21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0KQog
ewotICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKG1fc2l6ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgY29udGV4dC0+aXNBY2NlbGVyYXRlZENv
bnRleHQoKSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZCk7CisgICAgT3duUHRyPEltYWdl
QnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9zaXplLCAxLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBjb250ZXh0LT5pc0FjY2VsZXJhdGVkQ29udGV4dCgpID8gQWNjZWxl
cmF0ZWQgOiBVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICBy
ZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmNwcAkocmV2aXNpb24gMTA4NjYwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDg3LDcgKzQ4Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2Uq
IGkKICAgICAgICAgaW1hZ2UtPmRyYXcodGhpcywgRmxvYXRSZWN0KGRlc3QubG9jYXRpb24oKSwg
RmxvYXRTaXplKHR3LCB0aCkpLCBGbG9hdFJlY3Qoc3JjLmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0
c3csIHRzaCkpLCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3Bh
Y2UsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFBvaW50JiBzcmNQb2ludCwgY29uc3Qg
SW50U2l6ZSYgdGlsZVNpemUsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxp
dHlTY2FsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSogaW1h
Z2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgSW50UG9pbnQmIHNyY1BvaW50LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgQ29tcG9z
aXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQogewogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkgfHwgIWltYWdlKQogICAgICAgICByZXR1cm47CkBAIC00OTUsMTAgKzQ5
NSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hCiAgICAgaWYg
KHVzZUxvd1F1YWxpdHlTY2FsZSkgewogICAgICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBwcmV2
aW91c0ludGVycG9sYXRpb25RdWFsaXR5ID0gaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpOwog
ICAgICAgICBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25Mb3cpOwot
ICAgICAgICBpbWFnZS0+ZHJhd1RpbGVkKHRoaXMsIHJlY3QsIHNyY1BvaW50LCB0aWxlU2l6ZSwg
c3R5bGVDb2xvclNwYWNlLCBvcCk7CisgICAgICAgIGltYWdlLT5kcmF3VGlsZWQodGhpcywgZGVz
dFJlY3QsIHNyY1BvaW50LCB0aWxlU2l6ZSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CiAgICAgICAg
IHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkocHJldmlvdXNJbnRlcnBvbGF0aW9uUXVhbGl0
eSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGltYWdlLT5kcmF3VGlsZWQodGhpcywgcmVjdCwgc3Jj
UG9pbnQsIHRpbGVTaXplLCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKKyAgICAgICAgaW1hZ2UtPmRy
YXdUaWxlZCh0aGlzLCBkZXN0UmVjdCwgc3JjUG9pbnQsIHRpbGVTaXplLCBzdHlsZUNvbG9yU3Bh
Y2UsIG9wKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdl
KiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIGRlc3Qs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsCkBAIC01NTMsMTQgKzU1MywxNCBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltCiAgICAgZmxvYXQgdGggPSBkZXN0LmhlaWdo
dCgpOwogCiAgICAgaWYgKHRzdyA9PSAtMSkKLSAgICAgICAgdHN3ID0gaW1hZ2UtPndpZHRoKCk7
CisgICAgICAgIHRzdyA9IGltYWdlLT5sb2dpY2FsV2lkdGgoKTsKICAgICBpZiAodHNoID09IC0x
KQotICAgICAgICB0c2ggPSBpbWFnZS0+aGVpZ2h0KCk7CisgICAgICAgIHRzaCA9IGltYWdlLT5s
b2dpY2FsSGVpZ2h0KCk7CiAKICAgICBpZiAodHcgPT0gLTEpCi0gICAgICAgIHR3ID0gaW1hZ2Ut
PndpZHRoKCk7CisgICAgICAgIHR3ID0gaW1hZ2UtPmxvZ2ljYWxXaWR0aCgpOwogICAgIGlmICh0
aCA9PSAtMSkKLSAgICAgICAgdGggPSBpbWFnZS0+aGVpZ2h0KCk7CisgICAgICAgIHRoID0gaW1h
Z2UtPmxvZ2ljYWxIZWlnaHQoKTsKIAogICAgIGlmICh1c2VMb3dRdWFsaXR5U2NhbGUpIHsKICAg
ICAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgcHJldmlvdXNJbnRlcnBvbGF0aW9uUXVhbGl0eSA9
IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKTsKQEAgLTYwMyw3ICs2MDMsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoCiB7CiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGJ1ZmZlci0+Y2xpcCh0aGlzLCByZWN0KTsK
KyAgICBidWZmZXItPmNsaXAodGhpcywgcmVjdCwgdHJ1ZSk7CiB9CiAKICNpZiAhVVNFKENHKSAm
JiAhUExBVEZPUk0oUVQpICYmICFVU0UoQ0FJUk8pCkBAIC03NTQsNyArNzU0LDcgQEAgUGFzc093
blB0cjxJbWFnZUJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0OgogICAgIEFmZmluZVRyYW5zZm9ybSB0
cmFuc2Zvcm0gPSBnZXRDVE0oKTsKICAgICBJbnRTaXplIHNjYWxlZFNpemUoc3RhdGljX2Nhc3Q8
aW50PihjZWlsKHNpemUud2lkdGgoKSAqIHRyYW5zZm9ybS54U2NhbGUoKSkpLCBzdGF0aWNfY2Fz
dDxpbnQ+KGNlaWwoc2l6ZS5oZWlnaHQoKSAqIHRyYW5zZm9ybS55U2NhbGUoKSkpKTsKIAotICAg
IE93blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzY2FsZWRT
aXplLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBpc0FjY2VsZXJhdGVkQ29udGV4dCgpID8gQWNjZWxl
cmF0ZWQgOiBVbmFjY2VsZXJhdGVkKTsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoc2NhbGVkU2l6ZSwgMSwgQ29sb3JTcGFjZURldmljZVJHQiwg
aXNBY2NlbGVyYXRlZENvbnRleHQoKSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZCk7CiAg
ICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCShyZXZpc2lv
biAxMDg2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6
dHJhbnNmb3JtQ29sb3JTcGFjZShDbwogCiBpbmxpbmUgdm9pZCBJbWFnZUJ1ZmZlcjo6Z2VuZXJp
Y0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKQogewotICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJ
bnRQb2ludCgpLCBzaXplKCkpOworICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2ludCgp
LCBtX2RhdGFTaXplKTsKICAgICBSZWZQdHI8Qnl0ZUFycmF5PiBzcmNQaXhlbEFycmF5ID0gZ2V0
VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGx1bWluYW5jZVJlY3QpOwogICAgIAogICAgIHVuc2lnbmVk
IHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5LT5sZW5ndGgoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAkocmV2aXNpb24g
MTA4NjYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNzcsMTAgKzc3LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXIpOyBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CiAgICAgICAgIC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBw
b2ludGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KLSAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8
SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UgPSBDb2xvclNwYWNlRGV2aWNlUkdCLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUg
PSBVbmFjY2VsZXJhdGVkLCBEZWZlcnJhbE1vZGUgZGVmZXJyYWxNb2RlID0gTm9uRGVmZXJyZWQp
CisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgSW50
U2l6ZSYgc2l6ZSwgZmxvYXQgZGV2aWNlUGl4ZWxSYXRpbyA9IDEsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSA9IENvbG9yU3BhY2VEZXZpY2VSR0IsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9
IFVuYWNjZWxlcmF0ZWQsIERlZmVycmFsTW9kZSBkZWZlcnJhbE1vZGUgPSBOb25EZWZlcnJlZCkK
ICAgICAgICAgewogICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgICAg
ICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZiA9IGFkb3B0UHRyKG5ldyBJbWFnZUJ1ZmZlcihzaXpl
LCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBkZWZlcnJhbE1vZGUsIHN1Y2Nlc3MpKTsKKyAg
ICAgICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gYnVmID0gYWRvcHRQdHIobmV3IEltYWdlQnVm
ZmVyKHNpemUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIGRlZmVycmFsTW9kZSwgc3VjY2Vz
cywgZGV2aWNlUGl4ZWxSYXRpbykpOwogICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGJ1Zi5yZWxlYXNlKCk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKQEAgLTg4LDEyICs4OCwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgfklt
YWdlQnVmZmVyKCk7CiAKLSAgICAgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZTsgfQotICAgICAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3NpemUu
d2lkdGgoKTsgfQotICAgICAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9zaXplLmhl
aWdodCgpOyB9Ci0gICAgICAgIAotICAgICAgICBzaXplX3QgZGF0YVNpemUoKSBjb25zdDsKKwor
ICAgICAgICBib29sIGRldmljZVBpeGVsUmF0aW8oKSBjb25zdCB7IHJldHVybiBtX2RldmljZVBp
eGVsUmF0aW87IH0KKyAgICAgICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUoKSBjb25zdCB7
IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9CisgICAgICAgIGludCBsb2dpY2FsV2lkdGgoKSBjb25z
dCB7IHJldHVybiBtX2xvZ2ljYWxTaXplLndpZHRoKCk7IH0KKyAgICAgICAgaW50IGxvZ2ljYWxI
ZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplLmhlaWdodCgpOyB9CiAgICAgICAg
IAorICAgICAgICBjb25zdCBJbnRTaXplJiBkYXRhU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0
YVNpemU7IH0KKyAgICAgICAgaW50IGRhdGFXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YVNp
emUud2lkdGgoKTsgfQorICAgICAgICBpbnQgZGF0YUhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YVNpemUuaGVpZ2h0KCk7IH0KKwogICAgICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQo
KSBjb25zdDsKIAogICAgICAgICBQYXNzUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0
b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwpAQCAtMTExLDcgKzExNSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9y
U3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKTsKICAgICAgICAg
dm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVjdG9yPGludD4mKTsKICNl
bHNlCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1
cm4gQWZmaW5lVHJhbnNmb3JtKDEsIDAsIDAsIC0xLCAwLCBtX3NpemUuaGVpZ2h0KCkpOyB9Cisg
ICAgICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZm
aW5lVHJhbnNmb3JtKDEsIDAsIDAsIC0xLCAwLCBtX2RhdGFTaXplLmhlaWdodCgpKTsgfQogI2Vu
ZGlmCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgICAgICBQbGF0Zm9ybUxh
eWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CkBAIC0xMjIsNyArMTI2LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2lu
Z1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwogI2VuZGlmCiAKLSAgICAgICAg
dm9pZCBjbGlwKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OworICAg
ICAgICB2b2lkIGNsaXAoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBk
dWcpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBDb2xvclNw
YWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qg
PSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVT
b3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9IGZhbHNlKTsKICAgICAgICAgdm9p
ZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7CkBAIC0xMzcsNyArMTQxLDkgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAgIEltYWdlQnVmZmVyRGF0YSBtX2RhdGE7
CiAKLSAgICAgICAgSW50U2l6ZSBtX3NpemU7CisgICAgICAgIEludFNpemUgbV9sb2dpY2FsU2l6
ZTsKKyAgICAgICAgSW50U2l6ZSBtX2RhdGFTaXplOworICAgICAgICBmbG9hdCBtX2RldmljZVBp
eGVsUmF0aW87CiAgICAgICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKIAog
I2lmICFVU0UoQ0cpCkBAIC0xNDcsNyArMTUzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgICAgIC8vIFRoaXMgY29uc3RydWN0b3Igd2lsbCBwbGFjZSBpdHMgc3VjY2VzcyBpbnRvIHRo
ZSBnaXZlbiBvdXQtdmFyaWFibGUKICAgICAgICAgLy8gc28gdGhhdCBjcmVhdGUoKSBrbm93cyB3
aGVuIGl0IHNob3VsZCByZXR1cm4gZmFpbHVyZS4KLSAgICAgICAgSW1hZ2VCdWZmZXIoY29uc3Qg
SW50U2l6ZSYsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUsIERlZmVycmFsTW9kZSwgYm9vbCYg
c3VjY2Vzcyk7CisgICAgICAgIEltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmLCBDb2xvclNwYWNl
LCBSZW5kZXJpbmdNb2RlLCBEZWZlcnJhbE1vZGUsIGJvb2wmIHN1Y2Nlc3MsIGZsb2F0KTsKKyAg
ICAgICAgCiAgICAgfTsKIAogI2lmIFVTRShDRykgfHwgVVNFKFNLSUEpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAkocmV2aXNpb24g
MTA4NjYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDE0ICs3MywxNCBAQCBwdWJsaWM6CiAgICAgICAgIG1f
YnVmZmVySW5Vc2UgPSB0cnVlOwogI2VuZGlmCiAgICAgICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRv
IHJlY3JlYXRlIHRoZSBidWZmZXIgaWYgdGhlIGN1cnJlbnQgYnVmZmVyIGlzIGxhcmdlIGVub3Vn
aC4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXIgJiYgbV9pbWFnZUJ1ZmZlci0+d2lkdGgoKSA+
PSBzaXplLndpZHRoKCkgJiYgbV9pbWFnZUJ1ZmZlci0+aGVpZ2h0KCkgPj0gc2l6ZS5oZWlnaHQo
KSkKKyAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXIgJiYgbV9pbWFnZUJ1ZmZlci0+bG9naWNhbFdp
ZHRoKCkgPj0gc2l6ZS53aWR0aCgpICYmIG1faW1hZ2VCdWZmZXItPmxvZ2ljYWxIZWlnaHQoKSA+
PSBzaXplLmhlaWdodCgpKQogICAgICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7
CiAKICAgICAgICAgLy8gUm91bmQgdG8gdGhlIG5lYXJlc3QgMzIgcGl4ZWxzIHNvIHdlIGRvIG5v
dCBncm93IHRoZSBidWZmZXIgZm9yIHNpbWlsYXIgc2l6ZWQgcmVxdWVzdHMuCiAgICAgICAgIElu
dFNpemUgcm91bmRlZFNpemUocm91bmRVcFRvTXVsdGlwbGVPZjMyKHNpemUud2lkdGgoKSksIHJv
dW5kVXBUb011bHRpcGxlT2YzMihzaXplLmhlaWdodCgpKSk7CiAKICAgICAgICAgY2xlYXJTY3Jh
dGNoQnVmZmVyKCk7Ci0gICAgICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHJvdW5kZWRTaXplKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUocm91bmRlZFNpemUsIDEpOwogICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsK
ICAgICB9CiAKQEAgLTQ0MCw3ICs0NDAsOCBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdTaGFkb3dC
dWZmZXIoR3JhcGhpCiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
KmdyYXBoaWNzQ29udGV4dCk7CiAKLSAgICBJbnRTaXplIGJ1ZmZlclNpemUgPSBtX2xheWVySW1h
Z2UtPnNpemUoKTsKKyAgICBBU1NFUlQobV9sYXllckltYWdlLT5kZXZpY2VQaXhlbFJhdGlvKCkg
PT0gMSk7IC8vIFRoZSBjb21wdXRhdGlvbnMgYmVsb3cgbWFrZSB0aGlzIGFzc3VtcHRpb24KKyAg
ICBJbnRTaXplIGJ1ZmZlclNpemUgPSBtX2xheWVySW1hZ2UtPmRhdGFTaXplKCk7CiAgICAgaWYg
KGJ1ZmZlclNpemUgIT0gbV9sYXllclNpemUpIHsKICAgICAgICAgLy8gVGhlIHJlY3QgcGFzc2Vk
IHRvIGNsaXBUb0ltYWdlQnVmZmVyKCkgaGFzIHRvIGJlIHRoZSBzaXplIG9mIHRoZSBlbnRpcmUg
YnVmZmVyLAogICAgICAgICAvLyBidXQgd2UgbWF5IG5vdCBoYXZlIGNsZWFyZWQgaXQgYWxsLCBz
byBjbGlwIHRvIHRoZSBmaWxsZWQgcGFydCBmaXJzdC4KQEAgLTgyNiw2ICs4MjcsNyBAQCB2b2lk
IFNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIoY29uc3QgCiAgICAgICAgIHJldHVybjsKIAog
ICAgIEludFJlY3QgYmx1clJlY3QoSW50UG9pbnQoKSwgdGVtcGxhdGVTaXplKTsKKyAgICBBU1NF
UlQobV9sYXllckltYWdlLT5kZXZpY2VQaXhlbFJhdGlvKCkgPT0gMSk7IC8vIFRoZSBjb21wdXRh
dGlvbnMgYmVsb3cgbWFrZSB0aGlzIGFzc3VtcHRpb24KICAgICBSZWZQdHI8Qnl0ZUFycmF5PiBs
YXllckRhdGEgPSBtX2xheWVySW1hZ2UtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShibHVyUmVj
dCk7CiAgICAgYmx1ckxheWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCksIGJsdXJSZWN0LnNpemUo
KSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOwogICAgIG1fbGF5ZXJJbWFnZS0+cHV0Qnl0ZUFycmF5
KFVubXVsdGlwbGllZCwgbGF5ZXJEYXRhLmdldCgpLCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0
LCBJbnRQb2ludCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCShyZXZpc2lvbiAxMDg2NjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA3LDI2ICsxMDcsMzEgQEAgc3RhdGljIHZvaWQgcmVsZWFzZUltYWdlRGF0
YSh2b2lkKiwgY29ucwogICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKIH0K
IAotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIENvbG9yU3Bh
Y2UgaW1hZ2VDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIERlZmVycmFs
TW9kZSwgYm9vbCYgc3VjY2VzcykKLSAgICA6IG1fZGF0YShzaXplKQotICAgICwgbV9zaXplKHNp
emUpCi17CitJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgbG9naWNhbFNp
emUsIENvbG9yU3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUsIERlZmVycmFsTW9kZSwgYm9vbCYgc3VjY2VzcywgZmxvYXQgZGV2aWNlUGl4ZWxSYXRpbykK
KyAgICA6IG1fZGF0YShsb2dpY2FsU2l6ZSkgLy8gTk9URTogVGhlIGlucHV0IGhlcmUgaXNuJ3Qg
aW1wb3J0YW50IGFzIEltYWdlQnVmZmVyRGF0YUNHJ3MgY29uc3RydWN0b3IganVzdCBpZ25vcmVz
IGl0LgorICAgICwgbV9sb2dpY2FsU2l6ZShsb2dpY2FsU2l6ZSkKKyAgICAsIG1fZGV2aWNlUGl4
ZWxSYXRpbyhkZXZpY2VQaXhlbFJhdGlvKQoreworICAgIC8vIFNjYWxlIHVwIHRoZSBiYWNraW5n
IHN0b3JlIGlmIG5lZWRlZAorICAgIG1fZGF0YVNpemUgPSBsb2dpY2FsU2l6ZTsKKyAgICBtX2Rh
dGFTaXplLnNjYWxlKG1fZGV2aWNlUGl4ZWxSYXRpbyk7CisKICAgICBzdWNjZXNzID0gZmFsc2U7
ICAvLyBNYWtlIGVhcmx5IHJldHVybiBtZWFuIGZhaWx1cmUuCiAgICAgYm9vbCBhY2NlbGVyYXRl
UmVuZGVyaW5nID0gcmVuZGVyaW5nTW9kZSA9PSBBY2NlbGVyYXRlZDsKLSAgICBpZiAoc2l6ZS53
aWR0aCgpIDw9IDAgfHwgc2l6ZS5oZWlnaHQoKSA8PSAwKQorICAgIGlmIChtX2RhdGFTaXplLndp
ZHRoKCkgPD0gMCB8fCBtX2RhdGFTaXplLmhlaWdodCgpIDw9IDApCiAgICAgICAgIHJldHVybjsK
IAotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gd2lkdGggPSBzaXplLndpZHRoKCk7
Ci0gICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiBoZWlnaHQgPSBzaXplLmhlaWdodCgp
OworICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gZGF0YVdpZHRoID0gbV9kYXRhU2l6
ZS53aWR0aCgpOworICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gZGF0YUhlaWdodCA9
IG1fZGF0YVNpemUuaGVpZ2h0KCk7CiAKICAgICAvLyBQcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dz
Ci0gICAgbV9kYXRhLm1fYnl0ZXNQZXJSb3cgPSA0ICogd2lkdGg7Ci0gICAgQ2hlY2tlZDxzaXpl
X3QsIFJlY29yZE92ZXJmbG93PiBkYXRhU2l6ZSA9IGhlaWdodCAqIG1fZGF0YS5tX2J5dGVzUGVy
Um93OwotICAgIGlmIChkYXRhU2l6ZS5oYXNPdmVyZmxvd2VkKCkpCisgICAgbV9kYXRhLm1fYnl0
ZXNQZXJSb3cgPSA0ICogZGF0YVdpZHRoOworICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVy
Zmxvdz4gbnVtQnl0ZXMgPSBkYXRhSGVpZ2h0ICogbV9kYXRhLm1fYnl0ZXNQZXJSb3c7CisgICAg
aWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAjaWYgVVNF
KElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAod2lkdGgudW5zYWZlR2V0
KCkgPj0gbWF4SU9TdXJmYWNlRGltZW5zaW9uIHx8IGhlaWdodC51bnNhZmVHZXQoKSA+PSBtYXhJ
T1N1cmZhY2VEaW1lbnNpb24gfHwgKHdpZHRoICogaGVpZ2h0KS51bnNhZmVHZXQoKSA8IG1pbklP
U3VyZmFjZUFyZWEpCisgICAgaWYgKGRhdGFXaWR0aC51bnNhZmVHZXQoKSA+PSBtYXhJT1N1cmZh
Y2VEaW1lbnNpb24gfHwgZGF0YUhlaWdodC51bnNhZmVHZXQoKSA+PSBtYXhJT1N1cmZhY2VEaW1l
bnNpb24gfHwgKGRhdGFXaWR0aCAqIGRhdGFIZWlnaHQpLnVuc2FmZUdldCgpIDwgbWluSU9TdXJm
YWNlQXJlYSkKICAgICAgICAgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IGZhbHNlOwogI2Vsc2UKICAg
ICBBU1NFUlQocmVuZGVyaW5nTW9kZSA9PSBVbmFjY2VsZXJhdGVkKTsKQEAgLTE0NywzMCArMTUy
LDMwIEBAIEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiAKICAgICBSZXRh
aW5QdHI8Q0dDb250ZXh0UmVmPiBjZ0NvbnRleHQ7CiAgICAgaWYgKGFjY2VsZXJhdGVSZW5kZXJp
bmcpIHsKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAgICBt
X2RhdGEubV9zdXJmYWNlID0gY3JlYXRlSU9TdXJmYWNlKHNpemUpOwotICAgICAgICBjZ0NvbnRl
eHQuYWRvcHRDRih3a0lPU3VyZmFjZUNvbnRleHRDcmVhdGUobV9kYXRhLm1fc3VyZmFjZS5nZXQo
KSwgd2lkdGgudW5zYWZlR2V0KCksIGhlaWdodC51bnNhZmVHZXQoKSwgbV9kYXRhLm1fY29sb3JT
cGFjZSkpOworICAgICAgICBtX2RhdGEubV9zdXJmYWNlID0gY3JlYXRlSU9TdXJmYWNlKG1fZGF0
YVNpemUpOworICAgICAgICBjZ0NvbnRleHQuYWRvcHRDRih3a0lPU3VyZmFjZUNvbnRleHRDcmVh
dGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgZGF0YVdpZHRoLnVuc2FmZUdldCgpLCBkYXRhSGVp
Z2h0LnVuc2FmZUdldCgpLCBtX2RhdGEubV9jb2xvclNwYWNlKSk7CiAjZW5kaWYKICAgICAgICAg
aWYgKCFjZ0NvbnRleHQpCiAgICAgICAgICAgICBhY2NlbGVyYXRlUmVuZGVyaW5nID0gZmFsc2U7
IC8vIElmIGFsbG9jYXRpb24gZmFpbHMsIGZhbGwgYmFjayB0byBub24tYWNjZWxlcmF0ZWQgcGF0
aC4KICAgICB9CiAKICAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgaWYg
KCF0cnlGYXN0Q2FsbG9jKGhlaWdodC51bnNhZmVHZXQoKSwgbV9kYXRhLm1fYnl0ZXNQZXJSb3cu
dW5zYWZlR2V0KCkpLmdldFZhbHVlKG1fZGF0YS5tX2RhdGEpKQorICAgICAgICBpZiAoIXRyeUZh
c3RDYWxsb2MoZGF0YUhlaWdodC51bnNhZmVHZXQoKSwgbV9kYXRhLm1fYnl0ZXNQZXJSb3cudW5z
YWZlR2V0KCkpLmdldFZhbHVlKG1fZGF0YS5tX2RhdGEpKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHNpemVfdD4obV9kYXRhLm1fZGF0YSkg
JiAyKSk7CiAKICAgICAgICAgbV9kYXRhLm1fYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVt
dWx0aXBsaWVkTGFzdDsKLSAgICAgICAgY2dDb250ZXh0LmFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0
Q3JlYXRlKG1fZGF0YS5tX2RhdGEsIHdpZHRoLnVuc2FmZUdldCgpLCBoZWlnaHQudW5zYWZlR2V0
KCksIDgsIG1fZGF0YS5tX2J5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBtX2RhdGEubV9jb2xvclNw
YWNlLCBtX2RhdGEubV9iaXRtYXBJbmZvKSk7CisgICAgICAgIGNnQ29udGV4dC5hZG9wdENGKENH
Qml0bWFwQ29udGV4dENyZWF0ZShtX2RhdGEubV9kYXRhLCBkYXRhV2lkdGgudW5zYWZlR2V0KCks
IGRhdGFIZWlnaHQudW5zYWZlR2V0KCksIDgsIG1fZGF0YS5tX2J5dGVzUGVyUm93LnVuc2FmZUdl
dCgpLCBtX2RhdGEubV9jb2xvclNwYWNlLCBtX2RhdGEubV9iaXRtYXBJbmZvKSk7CiAgICAgICAg
IC8vIENyZWF0ZSBhIGxpdmUgaW1hZ2UgdGhhdCB3cmFwcyB0aGUgZGF0YS4KLSAgICAgICAgbV9k
YXRhLm1fZGF0YVByb3ZpZGVyLmFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgw
LCBtX2RhdGEubV9kYXRhLCBkYXRhU2l6ZS51bnNhZmVHZXQoKSwgcmVsZWFzZUltYWdlRGF0YSkp
OworICAgICAgICBtX2RhdGEubV9kYXRhUHJvdmlkZXIuYWRvcHRDRihDR0RhdGFQcm92aWRlckNy
ZWF0ZVdpdGhEYXRhKDAsIG1fZGF0YS5tX2RhdGEsIG51bUJ5dGVzLnVuc2FmZUdldCgpLCByZWxl
YXNlSW1hZ2VEYXRhKSk7CiAgICAgfQogCiAgICAgaWYgKCFjZ0NvbnRleHQpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIG1fY29udGV4dCA9IGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQoY2dD
b250ZXh0LmdldCgpKSk7Ci0gICAgbV9jb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsK
LSAgICBtX2NvbnRleHQtPnRyYW5zbGF0ZSgwLCAtaGVpZ2h0LnVuc2FmZUdldCgpKTsKKyAgICBt
X2NvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShtX2RldmljZVBpeGVsUmF0aW8sIC1tX2RldmljZVBp
eGVsUmF0aW8pKTsKKyAgICBtX2NvbnRleHQtPnRyYW5zbGF0ZSgwLCAtbV9sb2dpY2FsU2l6ZS5o
ZWlnaHQoKSk7CiAgICAgbV9jb250ZXh0LT5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dChhY2NlbGVy
YXRlUmVuZGVyaW5nKTsKICNpZiBkZWZpbmVkKEJVSUxESU5HX09OX0xJT04pCiAgICAgbV9kYXRh
Lm1fbGFzdEZsdXNoVGltZSA9IGN1cnJlbnRUaW1lTVMoKTsKQEAgLTE4MiwxMSArMTg3LDYgQEAg
SW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpCiB7CiB9CiAKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6
ZGF0YVNpemUoKSBjb25zdAotewotICAgIHJldHVybiBtX3NpemUuaGVpZ2h0KCkgKiBtX2RhdGEu
bV9ieXRlc1BlclJvdy51bnNhZmVHZXQoKTsKLX0KLQogR3JhcGhpY3NDb250ZXh0KiBJbWFnZUJ1
ZmZlcjo6Y29udGV4dCgpIGNvbnN0CiB7CiAjaWYgZGVmaW5lZChCVUlMRElOR19PTl9MSU9OKQpA
QCAtMjIyLDcgKzIyMiw3IEBAIE5hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyOjpjb3B5TmF0aXZl
SW0KICAgICBpZiAoIW1fY29udGV4dC0+aXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewogICAgICAg
ICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgewogICAgICAgICBjYXNlIERvbnRDb3B5QmFja2luZ1N0
b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBDR0ltYWdlQ3JlYXRlKG1fc2l6ZS53aWR0aCgpLCBt
X3NpemUuaGVpZ2h0KCksIDgsIDMyLCBtX2RhdGEubV9ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwg
bV9kYXRhLm1fY29sb3JTcGFjZSwgbV9kYXRhLm1fYml0bWFwSW5mbywgbV9kYXRhLm1fZGF0YVBy
b3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsKKyAgICAg
ICAgICAgIGltYWdlID0gQ0dJbWFnZUNyZWF0ZShtX2RhdGFTaXplLndpZHRoKCksIG1fZGF0YVNp
emUuaGVpZ2h0KCksIDgsIDMyLCBtX2RhdGEubV9ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9k
YXRhLm1fY29sb3JTcGFjZSwgbV9kYXRhLm1fYml0bWFwSW5mbywgbV9kYXRhLm1fZGF0YVByb3Zp
ZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIENvcHlCYWNraW5nU3RvcmU6CiAgICAgICAgICAgICBp
bWFnZSA9IENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250
ZXh0KCkpOwpAQCAtMjU1LDI4ICsyNTUsMzUgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFw
aGljc0NvbnRleHQqIAogICAgIGVsc2UKICAgICAgICAgaW1hZ2UuYWRvcHRDRihjb3B5TmF0aXZl
SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKTsKIAotICAgIGRlc3RDb250ZXh0LT5kcmF3TmF0
aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fc2l6ZSwgY29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1Jl
Y3QsIG9wKTsKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBh
ZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9kZXZpY2VQaXhlbFJhdGlvKTsKKyAgICBkZXN0Q29udGV4
dC0+ZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2RhdGFTaXplLCBjb2xvclNwYWNlLCBk
ZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcCk7CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXI6OmRy
YXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogeworICAgIEZsb2F0UmVjdCBh
ZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX2Rl
dmljZVBpeGVsUmF0aW8pOworCiAgICAgaWYgKCFtX2NvbnRleHQtPmlzQWNjZWxlcmF0ZWRDb250
ZXh0KCkpIHsKICAgICAgICAgaWYgKGRlc3RDb250ZXh0ID09IG1fY29udGV4dCB8fCBkZXN0Q29u
dGV4dC0+aXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewogICAgICAgICAgICAgUmVmUHRyPEltYWdl
PiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpOyAvLyBEcmF3aW5nIGludG8gb3Vy
IG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgotICAgICAgICAgICAgY29weS0+ZHJhd1Bh
dHRlcm4oZGVzdENvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHls
ZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CisgICAgICAgICAgICBjb3B5LT5kcmF3UGF0dGVy
bihkZXN0Q29udGV4dCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IGNvcHlJbWFnZShEb250Q29w
eUJhY2tpbmdTdG9yZSk7Ci0gICAgICAgICAgICBpbWFnZUZvclJlbmRlcmluZy0+ZHJhd1BhdHRl
cm4oZGVzdENvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNv
bG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CisgICAgICAgICAgICBpbWFnZUZvclJlbmRlcmluZy0+
ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKICAgICAgICAgfQogICAg
IH0gZWxzZSB7CiAgICAgICAgIFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZShDb3B5QmFj
a2luZ1N0b3JlKTsKLSAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIHNyY1Jl
Y3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVj
dCk7CisgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBhZGp1c3RlZFNyY1Jl
Y3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVj
dCk7CiAgICAgfQogfQogCi12b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dFRvQ2xpcCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAordm9pZCBJbWFnZUJ1
ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqIGNvbnRleHRUb0NsaXAsIGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgYm9vbCBkdWcpIGNvbnN0CiB7CisgICAgVU5VU0VEX1BBUkFNKGR1Zyk7CiAgICAg
Q0dDb250ZXh0UmVmIHBsYXRmb3JtQ29udGV4dFRvQ2xpcCA9IGNvbnRleHRUb0NsaXAtPnBsYXRm
b3JtQ29udGV4dCgpOworICAgIC8vIEZJWE1FOiBUaGlzIGltYWdlIG5lZWRzIHRvIGJlIGdyYXlz
Y2FsZSB0byBiZSB1c2VkIGFzIGFuIGFscGhhIG1hc2sgaGVyZS4KICAgICBSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gaW1hZ2UoQWRvcHRDRiwgY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0
b3JlKSk7CiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dFRvQ2xpcCwg
cmVjdC54KCksIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVD
VE0ocGxhdGZvcm1Db250ZXh0VG9DbGlwLCAxLCAtMSk7CkBAIC0yOTMsNyArMzAwLDcgQEAgUGFz
c1JlZlB0cjxCeXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbgogICAgICAgICBtX2RhdGEubV9s
YXN0Rmx1c2hUaW1lID0gY3VycmVudFRpbWVNUygpOwogI2VuZGlmCiAgICAgfQotICAgIHJldHVy
biBtX2RhdGEuZ2V0RGF0YShyZWN0LCBtX3NpemUsIG1fY29udGV4dC0+aXNBY2NlbGVyYXRlZENv
bnRleHQoKSwgdHJ1ZSk7CisgICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKHJlY3QsIG1fZGF0YVNp
emUsIG1fY29udGV4dC0+aXNBY2NlbGVyYXRlZENvbnRleHQoKSwgdHJ1ZSk7CiB9CiAKIFBhc3NS
ZWZQdHI8Qnl0ZUFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShj
b25zdCBJbnRSZWN0JiByZWN0KSBjb25zdApAQCAtMzA0LDIzICszMTEsMjQgQEAgUGFzc1JlZlB0
cjxCeXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQcgogICAgICAgICBtX2RhdGEubV9sYXN0Rmx1
c2hUaW1lID0gY3VycmVudFRpbWVNUygpOwogI2VuZGlmCiAgICAgfQotICAgIHJldHVybiBtX2Rh
dGEuZ2V0RGF0YShyZWN0LCBtX3NpemUsIG1fY29udGV4dC0+aXNBY2NlbGVyYXRlZENvbnRleHQo
KSwgZmFsc2UpOworICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShyZWN0LCBtX2RhdGFTaXplLCBt
X2NvbnRleHQtPmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIGZhbHNlKTsKIH0KIAogdm9pZCBJbWFn
ZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KE11bHRpcGx5IG11bHRpcGxpZWQsIEJ5dGVBcnJheSogc291
cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewogICAgIGlmICghbV9jb250ZXh0LT5pc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIG1fZGF0YS5wdXREYXRhKHNvdXJjZSwgc291
cmNlU2l6ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX3NpemUsIG1fY29udGV4dC0+aXNBY2Nl
bGVyYXRlZENvbnRleHQoKSwgbXVsdGlwbGllZCA9PSBVbm11bHRpcGxpZWQpOworICAgICAgICBt
X2RhdGEucHV0RGF0YShzb3VyY2UsIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwg
bV9kYXRhU2l6ZSwgbV9jb250ZXh0LT5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCBtdWx0aXBsaWVk
ID09IFVubXVsdGlwbGllZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICNpZiBVU0UoSU9T
VVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQogICAgIC8vIE1ha2UgYSBjb3B5IG9mIHRoZSBz
b3VyY2UgdG8gZW5zdXJlIHRoZSBiaXRzIGRvbid0IGNoYW5nZSBiZWZvcmUgYmVpbmcgZHJhd24K
ICAgICBJbnRTaXplIHNvdXJjZUNvcHlTaXplKHNvdXJjZVJlY3Qud2lkdGgoKSwgc291cmNlUmVj
dC5oZWlnaHQoKSk7Ci0gICAgT3duUHRyPEltYWdlQnVmZmVyPiBzb3VyY2VDb3B5ID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShzb3VyY2VDb3B5U2l6ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgVW5hY2Nl
bGVyYXRlZCk7CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBzb3VyY2VDb3B5ID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShzb3VyY2VDb3B5U2l6ZSwgMSwgQ29sb3JTcGFjZURldmljZVJHQiwgVW5hY2Nl
bGVyYXRlZCk7CiAgICAgaWYgKCFzb3VyY2VDb3B5KQogICAgICAgICByZXR1cm47Ci0gICAgc291
cmNlQ29weS0+bV9kYXRhLnB1dERhdGEoc291cmNlLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJ
bnRQb2ludCgtc291cmNlUmVjdC54KCksIC1zb3VyY2VSZWN0LnkoKSksIHNvdXJjZUNvcHktPnNp
emUoKSwgc291cmNlQ29weS0+Y29udGV4dCgpLT5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCBtdWx0
aXBsaWVkID09IFVubXVsdGlwbGllZCk7CisKKyAgICBzb3VyY2VDb3B5LT5tX2RhdGEucHV0RGF0
YShzb3VyY2UsIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QsIEludFBvaW50KC1zb3VyY2VSZWN0Lngo
KSwgLXNvdXJjZVJlY3QueSgpKSwgc291cmNlQ29weS0+ZGF0YVNpemUoKSwgc291cmNlQ29weS0+
Y29udGV4dCgpLT5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCBtdWx0aXBsaWVkID09IFVubXVsdGlw
bGllZCk7CiAKICAgICAvLyBTZXQgdXAgY29udGV4dCBmb3IgdXNpbmcgZHJhd0ltYWdlIGFzIGEg
ZGlyZWN0IGJpdCBjb3B5CiAgICAgQ0dDb250ZXh0UmVmIGRlc3RDb250ZXh0ID0gY29udGV4dCgp
LT5wbGF0Zm9ybUNvbnRleHQoKTsKQEAgLTMzMyw3ICszNDEsNyBAQCB2b2lkIEltYWdlQnVmZmVy
OjpwdXRCeXRlQXJyYXkoTXVsdGlwbHkgCiAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9y
KGRlc3RDb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKIAogICAgIC8vIERyYXcgdGhlIGltYWdl
IGluIENHIGNvb3JkaW5hdGUgc3BhY2UKLSAgICBJbnRQb2ludCBkZXN0UG9pbnRJbkNHQ29vcmRz
KGRlc3RQb2ludC54KCkgKyBzb3VyY2VSZWN0LngoKSwgbV9zaXplLmhlaWdodCgpIC0gKGRlc3RQ
b2ludC55KCkrc291cmNlUmVjdC55KCkpIC0gc291cmNlUmVjdC5oZWlnaHQoKSk7CisgICAgSW50
UG9pbnQgZGVzdFBvaW50SW5DR0Nvb3JkcyhkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC54KCks
IG1fZGF0YVNpemUuaGVpZ2h0KCkgLSAoZGVzdFBvaW50LnkoKStzb3VyY2VSZWN0LnkoKSkgLSBz
b3VyY2VSZWN0LmhlaWdodCgpKTsKICAgICBJbnRSZWN0IGRlc3RSZWN0SW5DR0Nvb3JkcyhkZXN0
UG9pbnRJbkNHQ29vcmRzLCBzb3VyY2VDb3B5U2l6ZSk7CiAgICAgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IHNvdXJjZUNvcHlJbWFnZShBZG9wdENGLCBzb3VyY2VDb3B5LT5jb3B5TmF0aXZlSW1hZ2Uo
KSk7CiAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGRlc3RDb250ZXh0LCBkZXN0UmVjdEluQ0dDb29y
ZHMsIHNvdXJjZUNvcHlJbWFnZS5nZXQoKSk7CkBAIC00MTgsMjEgKzQyNiwyMSBAQCBTdHJpbmcg
SW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpCiAKICAgICBpZiAoQ0ZFcXVhbCh1dGku
Z2V0KCksIGpwZWdVVEkoKSkpIHsKICAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBo
YSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxh
Y2suCi0gICAgICAgIGFyciA9IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQ
b2ludCgwLCAwKSwgbV9zaXplKSk7CisgICAgICAgIGFyciA9IGdldFByZW11bHRpcGxpZWRJbWFn
ZURhdGEoSW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV9kYXRhU2l6ZSkpOwogCiAgICAgICAgIHVu
c2lnbmVkIGNoYXIgKmRhdGEgPSBhcnItPmRhdGEoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCB3aWR0aCgpICogaGVpZ2h0KCk7IGkrKykKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBkYXRhV2lkdGgoKSAqIGRhdGFIZWlnaHQoKTsgaSsrKQogICAgICAgICAgICAgZGF0YVtpICog
NCArIDNdID0gMjU1OyAvLyBUaGUgaW1hZ2UgaXMgYWxyZWFkeSBwcmVtdWx0aXBsaWVkLCBzbyB3
ZSBqdXN0IG5lZWQgdG8gbWFrZSBpdCBvcGFxdWUuCiAKICAgICAgICAgUmV0YWluUHRyPENHRGF0
YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXI7CiAgICAgCiAgICAgICAgIGRhdGFQcm92aWRlci5h
ZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICogd2lkdGgo
KSAqIGhlaWdodCgpLCAwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgNCAqIGRhdGFXaWR0aCgpICogZGF0YUhlaWdodCgpLCAwKSk7
CiAgICAgCiAgICAgICAgIGlmICghZGF0YVByb3ZpZGVyKQogICAgICAgICAgICAgcmV0dXJuICJk
YXRhOiwiOwogCi0gICAgICAgIGltYWdlLmFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZSh3aWR0aCgpLCBo
ZWlnaHQoKSwgOCwgMzIsIDQgKiB3aWR0aCgpLAorICAgICAgICBpbWFnZS5hZG9wdENGKENHSW1h
Z2VDcmVhdGUoZGF0YVdpZHRoKCksIGRhdGFIZWlnaHQoKSwgOCwgMzIsIDQgKiBkYXRhV2lkdGgo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENHQ29sb3JTcGFjZUNyZWF0
ZURldmljZVJHQigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYUxh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUHJvdmlkZXIuZ2V0
KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CiAgICAgfSBlbHNlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRy
aXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHJldmlzaW9uIDEwODY2MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2Nyw2ICsxNjcsNyBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyCiAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS0+ZHJhd0ltYWdlQnVmZmVyKGlu
LT5hc0ltYWdlQnVmZmVyKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKIAogICAgIEludFJlY3QgaW1hZ2VS
ZWN0KEludFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKKyAgICBBU1NFUlQo
cmVzdWx0SW1hZ2UtPmRldmljZVBpeGVsUmF0aW8oKSA9PSAxKTsgLy8gVGhlIGNvbXB1dGF0aW9u
cyBiZWxvdyBtYWtlIHRoaXMgYXNzdW1wdGlvbgogICAgIFJlZlB0cjxCeXRlQXJyYXk+IHBpeGVs
QXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlUmVjdCk7
CiAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAkocmV2aXNp
b24gMTA4NjYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURyb3BTaGFkb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsOSArMTAzLDkgQEAgdm9pZCBG
RURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZQogICAgIFNoYWRvd0JsdXIgY29udGV4
dFNoYWRvdyhibHVyUmFkaXVzLCBvZmZzZXQsIG1fc2hhZG93Q29sb3IsIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOwogCiAgICAgLy8gVE9ETzogRGlyZWN0IHBpeGVsIGFjY2VzcyB0byBJbWFnZUJ1ZmZl
ciB3b3VsZCBhdm9pZCBjb3B5aW5nIHRoZSBJbWFnZURhdGEuCi0gICAgSW50UmVjdCBzaGFkb3dB
cmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT5zaXplKCkpOworICAgIEludFJlY3Qgc2hhZG93
QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+ZGF0YVNpemUoKSk7CisgICAgQVNTRVJUKHJl
c3VsdEltYWdlLT5kZXZpY2VQaXhlbFJhdGlvKCkgPT0gMSk7IC8vIFRoZSBjb21wdXRhdGlvbnMg
YmVsb3cgbWFrZSB0aGlzIGFzc3VtcHRpb24KICAgICBSZWZQdHI8Qnl0ZUFycmF5PiBzcmNQaXhl
bEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoc2hhZG93QXJl
YSk7Ci0KICAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXktPmRh
dGEoKSwgc2hhZG93QXJlYS5zaXplKCksIDQgKiBzaGFkb3dBcmVhLnNpemUoKS53aWR0aCgpKTsK
IAogICAgIHJlc3VsdEltYWdlLT5wdXRCeXRlQXJyYXkoUHJlbXVsdGlwbGllZCwgc3JjUGl4ZWxB
cnJheS5nZXQoKSwgc2hhZG93QXJlYS5zaXplKCksIHNoYWRvd0FyZWEsIEludFBvaW50KCkpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmNwcAkocmV2aXNpb24gMTA4NjYwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjcsOCArMTI3LDkgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6YXNJbWFn
ZUJ1ZmZlcgogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkK
ICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7Ci0gICAgbV9pbWFnZUJ1
ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCksIENvbG9yU3BhY2VMaW5lYXJSR0IsIG1fZmlsdGVyLT5yZW5kZXJpbmdNb2RlKCkpOworICAg
IG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fYWJzb2x1dGVQYWlu
dFJlY3Quc2l6ZSgpLCAxLCBDb2xvclNwYWNlTGluZWFyUkdCLCBtX2ZpbHRlci0+cmVuZGVyaW5n
TW9kZSgpKTsKICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKSk7CisgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmRl
dmljZVBpeGVsUmF0aW8oKSA9PSAxKTsgLy8gVGhlIGZvbGxvd2luZyBjYWxscyBtYWtlIHRoaXMg
YXNzdW1wdGlvbgogICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAg
bV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0Qnl0ZUFycmF5KFByZW11bHRpcGxpZWQsIG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0LmdldCgpLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5h
dGlvblJlY3QsIEludFBvaW50KCkpOwogICAgIGVsc2UKQEAgLTIwMiw5ICsyMDMsMTAgQEAgdm9p
ZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRJbWFnZQogCiAgICAgaWYgKCFtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24g
ZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgotICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkK
KyAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKKyAgICAgICAgICAgIEFTU0VSVCht
X2ltYWdlQnVmZmVyUmVzdWx0LT5kZXZpY2VQaXhlbFJhdGlvKCkgPT0gMSk7IC8vIFRoZSBjb21w
dXRhdGlvbnMgYmVsb3cgbWFrZSB0aGlzIGFzc3VtcHRpb24KICAgICAgICAgICAgIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRVbm11bHRpcGxpZWRJ
bWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkp
OwotICAgICAgICBlbHNlIHsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChp
c0ZpbHRlclNpemVWYWxpZChtX2Fic29sdXRlUGFpbnRSZWN0KSk7CiAgICAgICAgICAgICBtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0ID0gQnl0ZUFycmF5OjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50
UmVjdC53aWR0aCgpICogbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSAqIDQpOwogICAgICAg
ICAgICAgdW5zaWduZWQgY2hhciogc291cmNlQ29tcG9uZW50ID0gbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQtPmRhdGEoKTsKQEAgLTIzNiw5ICsyMzgsMTAgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6
OmNvcHlQcmVtdWx0aXBsaWVkSW1hZwogCiAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCkgewogICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdl
IGJ1ZmZlci4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCisgICAgICAgIGlmICht
X2ltYWdlQnVmZmVyUmVzdWx0KSB7CisgICAgICAgICAgICBBU1NFUlQobV9pbWFnZUJ1ZmZlclJl
c3VsdC0+ZGV2aWNlUGl4ZWxSYXRpbygpID09IDEpOyAvLyBUaGUgY29tcHV0YXRpb25zIGJlbG93
IG1ha2UgdGhpcyBhc3N1bXB0aW9uCiAgICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50
UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwotICAgICAgICBl
bHNlIHsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChpc0ZpbHRlclNpemVW
YWxpZChtX2Fic29sdXRlUGFpbnRSZWN0KSk7CiAgICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCA9IEJ5dGVBcnJheTo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgo
KSAqIG1fYWJzb2x1dGVQYWludFJlY3QuaGVpZ2h0KCkgKiA0KTsKICAgICAgICAgICAgIHVuc2ln
bmVkIGNoYXIqIHNvdXJjZUNvbXBvbmVudCA9IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRh
dGEoKTsKQEAgLTI2NCw3ICsyNjcsNyBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVh
dGVJbWFnZUJ1CiAgICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7CiAgICAgaWYgKG1fYWJzb2x1dGVQ
YWludFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBtX2ltYWdlQnVmZmVy
UmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwg
Q29sb3JTcGFjZUxpbmVhclJHQiwgbV9maWx0ZXItPnJlbmRlcmluZ01vZGUoKSk7CisgICAgbV9p
bWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVj
dC5zaXplKCksIDEsIENvbG9yU3BhY2VMaW5lYXJSR0IsIG1fZmlsdGVyLT5yZW5kZXJpbmdNb2Rl
KCkpOwogICAgIGlmICghbV9pbWFnZUJ1ZmZlclJlc3VsdCkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNvbnRleHQoKSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCShyZXZpc2lv
biAxMDg2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU4OSw3ICs1ODksNyBAQCBib29sIFNjcm9sbGJhclRo
ZW1lTWFjOjpwYWludChTY3JvbGxiYXIqCiAgICAgICAgIEludFJlY3QgYnVmZmVyUmVjdChzY3Jv
bGxiYXItPmZyYW1lUmVjdCgpKTsKICAgICAgICAgYnVmZmVyUmVjdC5pbnRlcnNlY3QoZGFtYWdl
UmVjdCk7CiAgICAgICAgIAotICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSk7CisgICAgICAgIE93blB0
cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlclJl
Y3Quc2l6ZSgpLCAxKTsKICAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0
UmVuZGVyZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5jcHAJKHJldmlzaW9uIDEwODY2MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
Miw3ICszMjIsOCBAQCB2b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyOjpwcmVwYXJlKCkKICAgICAv
LyBzb3VyY2UgaW1hZ2Ugc2l6ZXMgc2V0LiBXZSBqdXN0IG5lZWQgdG8gYXR0YWNoIHRoZSBncmFw
aGljCiAgICAgLy8gYnVmZmVyIGlmIHdlIGhhdmUgbm90IHlldCBkb25lIHNvLgogICAgIGlmICgh
bV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkKSB7Ci0gICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdl
QnVmZmVyOjpjcmVhdGUoSW50U2l6ZShtX3NvdXJjZURyYXdpbmdSZWdpb24ud2lkdGgoKSwgbV9z
b3VyY2VEcmF3aW5nUmVnaW9uLmhlaWdodCgpKSwgQ29sb3JTcGFjZURldmljZVJHQiwgcmVuZGVy
aW5nTW9kZSgpKSk7CisgICAgICAgIEludFNpemUgbG9naWNhbFNpemUobV9zb3VyY2VEcmF3aW5n
UmVnaW9uLndpZHRoKCksIG1fc291cmNlRHJhd2luZ1JlZ2lvbi5oZWlnaHQoKSk7CisgICAgICAg
IHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIDEsIENvbG9y
U3BhY2VEZXZpY2VSR0IsIHJlbmRlcmluZ01vZGUoKSkpOwogICAgICAgICBtX2dyYXBoaWNzQnVm
ZmVyQXR0YWNoZWQgPSB0cnVlOwogICAgIH0KICAgICBtX3NvdXJjZUdyYXBoaWMtPmNsZWFyUmVz
dWx0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1t
CShyZXZpc2lvbiAxMDg2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTk5MCw3ICs5OTAsNyBAQCBib29sIFJlbmRlclRo
ZW1lTWFjOjpwYWludFByb2dyZXNzQmFyKFJlCiAgICAgdHJhY2tJbmZvLnJlc2VydmVkID0gMDsK
ICAgICB0cmFja0luZm8uZmlsbGVyMSA9IDA7CiAKLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGlt
YWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbmZsYXRlZFJlY3Quc2l6ZSgpKTsKKyAg
ICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShp
bmZsYXRlZFJlY3Quc2l6ZSgpLCAxKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbWFn
ZUJ1ZmZlclRvb2xzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwCShyZXZpc2lvbiAxMDg2NjApCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MCw3ICs2MCw3IEBAIGJvb2wgU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y3JlYXRlSW1h
Z2VCdWYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSW50U2l6ZSBjbGFtcGVkU2l6ZSA9
IGNsYW1wZWRBYnNvbHV0ZVNpemUocGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgT3duUHRyPEltYWdl
QnVmZmVyPiBpbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIGNvbG9yU3Bh
Y2UsIHJlbmRlcmluZ01vZGUpOworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCAxLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2Rl
KTsKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTg5LDcgKzg5
LDcgQEAgYm9vbCBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjcmVhdGVJbWFnZUJ1ZgogICAgIGlmIChp
bWFnZVNpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBPd25QdHI8
SW1hZ2VCdWZmZXI+IGltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVNpemUsIGNvbG9y
U3BhY2UsIHJlbmRlcmluZ01vZGUpOworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlU2l6ZSwgMSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9k
ZSk7CiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHJldmlzaW9uIDEwODY2MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwNCw3ICszMDQsNyBAQCBOYXRpdmVJbWFnZVB0ciBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VG
b3JDCiAgICAgaWYgKCFtX2ZyYW1lQ2FjaGUpIHsKICAgICAgICAgaWYgKCFtX3BhZ2UpCiAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSk7CisgICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4g
YnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIDEpOwogICAgICAgICBpZiAoIWJ1
ZmZlcikgLy8gZmFpbGVkIHRvIGFsbG9jYXRlIGltYWdlCiAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgZHJhdyhidWZmZXItPmNvbnRleHQoKSwgcmVjdCgpLCByZWN0KCksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcAkocmV2aXNpb24gMTA4NjYwKQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgSW1hZ2UqIFNWR0ltYWdlQ2FjaGU6Omxvb2t1cE9yQ3Jl
YXRlQml0bQogICAgIH0KIAogICAgIC8vIENyZWF0ZSBhbmQgY2FjaGUgbmV3IGltYWdlIGFuZCBp
bWFnZSBidWZmZXIgYXQgcmVxdWVzdGVkIHNpemUuCi0gICAgT3duUHRyPEltYWdlQnVmZmVyPiBu
ZXdCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUpOworICAgIE93blB0cjxJbWFnZUJ1
ZmZlcj4gbmV3QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCAxKTsKICAgICBpZiAo
IW5ld0J1ZmZlcikKICAgICAgICAgcmV0dXJuIEltYWdlOjpudWxsSW1hZ2UoKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128570</attachid>
            <date>2012-02-23 15:36:19 -0800</date>
            <delta_ts>2012-02-23 15:47:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79395-20120223153618.patch</filename>
            <type>text/plain</type>
            <size>41721</size>
            <attacher name="Matthew Delaney">mdelaney7</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODY3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTAyLTIzICBNYXR0aGV3
IERlbGFuZXkgIDxtZGVsYW5leUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIEltYWdlQnVmZmVy
IHN1cHBvcnQgZm9yIGhhdmluZyBhIGhpLXJlcyBiYWNraW5nIHN0b3JlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTM5NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBwYXRj
aCBkb2Vzbid0IGNoYW5nZSBiZWhhdmlvci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlKTog
VXNlIHRoZSBkZXZpY2Ugc2NhbGUgdG8gYWRqdXN0IHRoZSByZXNvbHV0aW9uCisgICAgICAgIG9m
IHRoZSBiYWNraW5nIHN0b3JlLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRldmlj
ZVBpeGVsUmF0aW8pOiBBZGQgYSB3YXkgdG8gYWNjZXNzIGlmIHJhdGlvLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmxvZ2ljYWxTaXplKTogRGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRo
ZSBsb2dpY2FsIHNpemUgYW5kIHRoZSB1bmRlcmx5aW5nIGRhdGEncyBzaXplLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRhdGFTaXplKTogRGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRo
ZSBsb2dpY2FsIHNpemUgYW5kIHRoZSB1bmRlcmx5aW5nIGRhdGEncyBzaXplLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHA6IEF2b2lkIGRpcmVjdCB1
c2Ugb2YgbV9zaXplIHRvIHByZWZlciB0aGUgZXhwbGljaXQKKyAgICAgICAgYW5kIHRodXMgY2xl
YXJlciB1c2Ugb2YgbG9naWNhbFNpemUgb3IgZGV2aWNlU2l6ZS4KKworICAgICAgICBFeHBsaWNp
dGx5IHN0YXRlIGEgMXggc2NhbGUgZm9yIGFsbCBJbWFnZUJ1ZmZlciBjcmVhdGlvbiBzaXRlcwor
ICAgICAgICBzaW5jZSB0aGlzIGlzIHdoYXQgdGhleSBjdXJyZW50bHkgYXNzdW1lLiBBZGRlZCBB
U1NFUlRzIGZvciBjYWxsIHNpdGVzCisgICAgICAgIHRoYXQgdmVyeSBjbGVhcmx5IGFyZSBhc3N1
bWluZyBhIDE6MSByYXRpbyBvZiBiYWNraW5nIHN0b3JlIHRvIHNpemUuCisgICAgICAgICogaHRt
bC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuY3BwOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbGJh
clRoZW1lTWFjLm1tOgorICAgICAgICAqIHJlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5j
cHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvU1ZHSW1hZ2VCdWZmZXJUb29scy5jcHA6CisgICAgICAgICogc3ZnL2dyYXBo
aWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5j
cHA6CisKKyAgICAgICAgVXBkYXRlIEltYWdlQnVmZmVyIHNpemUgdXNhZ2UuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisKIDIwMTItMDItMjMgIEVyaWsgQXJ2aWRzc29u
ICA8YXJ2QGNocm9taXVtLm9yZz4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3IgSW50ZXJmYWNl
TmFtZSBpbiB0aGUgYmluZGluZ3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZh
c0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZh
c0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDg2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEzLDcgKzUxMyw3IEBAIHZv
aWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmUKICAgICAgICAgVW5hY2NlbGVy
YXRlZDsKICNlbmRpZgogICAgIERlZmVycmFsTW9kZSBkZWZlcnJhbE1vZGUgPSBzaG91bGREZWZl
cigpID8gRGVmZXJyZWQgOiBOb25EZWZlcnJlZDsKLSAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShidWZmZXJTaXplLCBDb2xvclNwYWNlRGV2aWNlUkdCLCByZW5kZXJpbmdN
b2RlLCBkZWZlcnJhbE1vZGUpOworICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGJ1ZmZlclNpemUsIDEsIENvbG9yU3BhY2VEZXZpY2VSR0IsIHJlbmRlcmluZ01vZGUsIGRl
ZmVycmFsTW9kZSk7CiAgICAgaWYgKCFtX2ltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm47CiAg
ICAgbV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5zY2FsZShGbG9hdFNpemUoYnVmZmVyU2l6ZS53
aWR0aCgpIC8gbG9naWNhbFNpemUud2lkdGgoKSwgYnVmZmVyU2l6ZS5oZWlnaHQoKSAvIGxvZ2lj
YWxTaXplLmhlaWdodCgpKSk7CkBAIC01MjMsNyArNTIzLDggQEAgdm9pZCBIVE1MQ2FudmFzRWxl
bWVudDo6Y3JlYXRlSW1hZ2VCdWZmZQogCiAjaWYgVVNFKEpTQykKICAgICBKU0M6OkpTTG9jayBs
b2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPmdsb2JhbERhdGEoKS0+aGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3QobV9pbWFnZUJ1
ZmZlci0+ZGF0YVNpemUoKSk7CisgICAgc2l6ZV90IG51bUJ5dGVzID0gNCAqIG1faW1hZ2VCdWZm
ZXItPmRhdGFTaXplKCkud2lkdGgoKSAqIG1faW1hZ2VCdWZmZXItPmRhdGFTaXplKCkuaGVpZ2h0
KCk7CisgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5nbG9iYWxEYXRhKCktPmhlYXAucmVw
b3J0RXh0cmFNZW1vcnlDb3N0KG51bUJ5dGVzKTsKICNlbmRpZgogCiAjaWYgVVNFKElPU1VSRkFD
RV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgKEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMp
ICYmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJl
dmlzaW9uIDEwODY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MjEsNyArMTUyMSw3IEBAIHRl
bXBsYXRlPGNsYXNzIFQ+IEludFJlY3QgQ2FudmFzUmVuZGVyaW4KIFBhc3NPd25QdHI8SW1hZ2VC
dWZmZXI+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlQ29tcG9zaXRpbmdCdWZmZXIo
Y29uc3QgSW50UmVjdCYgYnVmZmVyUmVjdCkKIHsKICAgICBSZW5kZXJpbmdNb2RlIHJlbmRlck1v
ZGUgPSBpc0FjY2VsZXJhdGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7Ci0gICAg
cmV0dXJuIEltYWdlQnVmZmVyOjpjcmVhdGUoYnVmZmVyUmVjdC5zaXplKCksIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIHJlbmRlck1vZGUpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJ1
ZmZlclJlY3Quc2l6ZSgpLCAxLCBDb2xvclNwYWNlRGV2aWNlUkdCLCByZW5kZXJNb2RlKTsKIH0K
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNvbXBvc2l0ZUJ1ZmZlcihJbWFnZUJ1
ZmZlciogYnVmZmVyLCBjb25zdCBJbnRSZWN0JiBidWZmZXJSZWN0LCBDb21wb3NpdGVPcGVyYXRv
ciBvcCkKQEAgLTE4ODMsNyArMTg4Myw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpwdXRJbWFnZUQKICAgICBJbnRTaXplIGRlc3RPZmZzZXQoc3RhdGljX2Nhc3Q8aW50PihkeCks
IHN0YXRpY19jYXN0PGludD4oZHkpKTsKICAgICBJbnRSZWN0IGRlc3RSZWN0ID0gZW5jbG9zaW5n
SW50UmVjdChjbGlwUmVjdCk7CiAgICAgZGVzdFJlY3QubW92ZShkZXN0T2Zmc2V0KTsKLSAgICBk
ZXN0UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgpLCBidWZmZXItPnNpemUoKSkpOwor
ICAgIGRlc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KCksIGJ1ZmZlci0+ZGF0YVNp
emUoKSkpOwogICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAg
ICBJbnRSZWN0IHNvdXJjZVJlY3QoZGVzdFJlY3QpOwpAQCAtMjA4OSw5ICsyMDg5LDkgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdUZXh0SQogICAgICAgICBJbnRSZWN0IG1h
c2tSZWN0ID0gZW5jbG9zaW5nSW50UmVjdCh0ZXh0UmVjdCk7CiAKICNpZiBVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1hc2tJ
bWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUobWFza1JlY3Quc2l6ZSgpLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBBY2NlbGVyYXRlZCk7CisgICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbWFza0lt
YWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtYXNrUmVjdC5zaXplKCksIDEsIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIEFjY2VsZXJhdGVkKTsKICNlbHNlCi0gICAgICAgIE93blB0cjxJbWFnZUJ1ZmZl
cj4gbWFza0ltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtYXNrUmVjdC5zaXplKCkpOworICAg
ICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1hc2tJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
bWFza1JlY3Quc2l6ZSgpLCAxKTsKICNlbmRpZgogCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCog
bWFza0ltYWdlQ29udGV4dCA9IG1hc2tJbWFnZS0+Y29udGV4dCgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShy
ZXZpc2lvbiAxMDg2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzE1LDEzICs1MzE1LDEzIEBAIElt
YWdlQnVmZmVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OkxSVUkKICAgICAgICAgSW1hZ2VCdWZm
ZXIqIGJ1ZiA9IG1fYnVmZmVyc1tpXS5nZXQoKTsKICAgICAgICAgaWYgKCFidWYpCiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgaWYgKGJ1Zi0+c2l6ZSgpICE9IHNpemUpCisgICAgICAgIGlm
IChidWYtPmxvZ2ljYWxTaXplKCkgIT0gc2l6ZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICBidWJibGVUb0Zyb250KGkpOwogICAgICAgICByZXR1cm4gYnVmOwogICAgIH0KIAotICAg
IE93blB0cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSk7Cisg
ICAgT3duUHRyPEltYWdlQnVmZmVyPiB0ZW1wID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCAx
KTsKICAgICBpZiAoIXRlbXApCiAgICAgICAgIHJldHVybiAwOwogICAgIGkgPSBzdGQ6Om1pbiht
X2NhcGFjaXR5IC0gMSwgaSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24gMTA4
NjYwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwODUsNyArMTA4NSw3IEBAIERyYWdJbWFnZVJlZiBGcmFtZTo6bm9kZUltYWdlKE5vZGUqIG5v
ZGUKICAgICBMYXlvdXRSZWN0IHRvcExldmVsUmVjdDsKICAgICBJbnRSZWN0IHBhaW50aW5nUmVj
dCA9IHBpeGVsU25hcHBlZEludFJlY3QocmVuZGVyZXItPnBhaW50aW5nUm9vdFJlY3QodG9wTGV2
ZWxSZWN0KSk7CiAKLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKHBhaW50aW5nUmVjdC5zaXplKCkpKTsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1
ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVjdC5zaXplKCksIDEsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IpKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
YnVmZmVyLT5jb250ZXh0KCktPnRyYW5zbGF0ZSgtcGFpbnRpbmdSZWN0LngoKSwgLXBhaW50aW5n
UmVjdC55KCkpOwpAQCAtMTEwOCw3ICsxMTA4LDcgQEAgRHJhZ0ltYWdlUmVmIEZyYW1lOjpkcmFn
SW1hZ2VGb3JTZWxlY3RpbwogCiAgICAgSW50UmVjdCBwYWludGluZ1JlY3QgPSBlbmNsb3NpbmdJ
bnRSZWN0KHNlbGVjdGlvbigpLT5ib3VuZHMoKSk7CiAKLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+
IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVjdC5zaXplKCkpKTsKKyAgICBP
d25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVj
dC5zaXplKCksIDEsIENvbG9yU3BhY2VEZXZpY2VSR0IpKTsKICAgICBpZiAoIWJ1ZmZlcikKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgYnVmZmVyLT5jb250ZXh0KCktPnRyYW5zbGF0ZSgtcGFpbnRp
bmdSZWN0LngoKSwgLXBhaW50aW5nUmVjdC55KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdl
LmNwcAkocmV2aXNpb24gMTA4NjYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5
NSw3IEBAIHZvaWQgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U6OmRyYXcoR3JhcGgKIAogdm9pZCBD
cm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgY29uc3QgRmxvYXRSZWN0
JiBkc3RSZWN0KQogewotICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKG1fc2l6ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgY29udGV4dC0+aXNB
Y2NlbGVyYXRlZENvbnRleHQoKSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZCk7CisgICAg
T3duUHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9z
aXplLCAxLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBjb250ZXh0LT5pc0FjY2VsZXJhdGVkQ29udGV4
dCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWltYWdlQnVmZmVy
KQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkocmV2aXNpb24gMTA4NjYwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDg3LDcgKzQ4Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
SW1hZ2UoSW1hZ2UqIGkKICAgICAgICAgaW1hZ2UtPmRyYXcodGhpcywgRmxvYXRSZWN0KGRlc3Qu
bG9jYXRpb24oKSwgRmxvYXRTaXplKHR3LCB0aCkpLCBGbG9hdFJlY3Qoc3JjLmxvY2F0aW9uKCks
IEZsb2F0U2l6ZSh0c3csIHRzaCkpLCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFBvaW50JiBzcmNQ
b2ludCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29s
IHVzZUxvd1F1YWxpdHlTY2FsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFn
ZShJbWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgSW50UG9pbnQmIHNyY1BvaW50LCBjb25zdCBJbnRTaXplJiB0aWxl
U2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQogewog
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWltYWdlKQogICAgICAgICByZXR1cm47CkBA
IC00OTUsMTAgKzQ5NSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2Uo
SW1hCiAgICAgaWYgKHVzZUxvd1F1YWxpdHlTY2FsZSkgewogICAgICAgICBJbnRlcnBvbGF0aW9u
UXVhbGl0eSBwcmV2aW91c0ludGVycG9sYXRpb25RdWFsaXR5ID0gaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSgpOwogICAgICAgICBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9s
YXRpb25Mb3cpOwotICAgICAgICBpbWFnZS0+ZHJhd1RpbGVkKHRoaXMsIHJlY3QsIHNyY1BvaW50
LCB0aWxlU2l6ZSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CisgICAgICAgIGltYWdlLT5kcmF3VGls
ZWQodGhpcywgZGVzdFJlY3QsIHNyY1BvaW50LCB0aWxlU2l6ZSwgc3R5bGVDb2xvclNwYWNlLCBv
cCk7CiAgICAgICAgIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkocHJldmlvdXNJbnRlcnBv
bGF0aW9uUXVhbGl0eSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGltYWdlLT5kcmF3VGlsZWQodGhp
cywgcmVjdCwgc3JjUG9pbnQsIHRpbGVTaXplLCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKKyAgICAg
ICAgaW1hZ2UtPmRyYXdUaWxlZCh0aGlzLCBkZXN0UmVjdCwgc3JjUG9pbnQsIHRpbGVTaXplLCBz
dHlsZUNvbG9yU3BhY2UsIG9wKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxl
ZEltYWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IElu
dFJlY3QmIGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsCkBAIC01NTMsMTQgKzU1MywxNCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltCiAgICAgZmxvYXQgdGgg
PSBkZXN0LmhlaWdodCgpOwogCiAgICAgaWYgKHRzdyA9PSAtMSkKLSAgICAgICAgdHN3ID0gaW1h
Z2UtPndpZHRoKCk7CisgICAgICAgIHRzdyA9IGltYWdlLT5sb2dpY2FsU2l6ZSgpLndpZHRoKCk7
CiAgICAgaWYgKHRzaCA9PSAtMSkKLSAgICAgICAgdHNoID0gaW1hZ2UtPmhlaWdodCgpOworICAg
ICAgICB0c2ggPSBpbWFnZS0+bG9naWNhbFNpemUoKS5oZWlnaHQoKTsKIAogICAgIGlmICh0dyA9
PSAtMSkKLSAgICAgICAgdHcgPSBpbWFnZS0+d2lkdGgoKTsKKyAgICAgICAgdHcgPSBpbWFnZS0+
bG9naWNhbFNpemUoKS53aWR0aCgpOwogICAgIGlmICh0aCA9PSAtMSkKLSAgICAgICAgdGggPSBp
bWFnZS0+aGVpZ2h0KCk7CisgICAgICAgIHRoID0gaW1hZ2UtPmxvZ2ljYWxTaXplKCkuaGVpZ2h0
KCk7CiAKICAgICBpZiAodXNlTG93UXVhbGl0eVNjYWxlKSB7CiAgICAgICAgIEludGVycG9sYXRp
b25RdWFsaXR5IHByZXZpb3VzSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBpbWFnZUludGVycG9sYXRp
b25RdWFsaXR5KCk7CkBAIC03NTQsNyArNzU0LDcgQEAgUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4g
R3JhcGhpY3NDb250ZXh0OgogICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0o
KTsKICAgICBJbnRTaXplIHNjYWxlZFNpemUoc3RhdGljX2Nhc3Q8aW50PihjZWlsKHNpemUud2lk
dGgoKSAqIHRyYW5zZm9ybS54U2NhbGUoKSkpLCBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoc2l6ZS5o
ZWlnaHQoKSAqIHRyYW5zZm9ybS55U2NhbGUoKSkpKTsKIAotICAgIE93blB0cjxJbWFnZUJ1ZmZl
cj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzY2FsZWRTaXplLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBpc0FjY2VsZXJhdGVkQ29udGV4dCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJh
dGVkKTsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoc2NhbGVkU2l6ZSwgMSwgQ29sb3JTcGFjZURldmljZVJHQiwgaXNBY2NlbGVyYXRlZENvbnRl
eHQoKSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFidWZmZXIpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCShyZXZpc2lvbiAxMDg2NjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFj
ZShDbwogCiBpbmxpbmUgdm9pZCBJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5j
ZU1hc2soKQogewotICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2ludCgpLCBzaXplKCkp
OworICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2ludCgpLCBkYXRhU2l6ZSgpKTsKICAg
ICBSZWZQdHI8Qnl0ZUFycmF5PiBzcmNQaXhlbEFycmF5ID0gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VE
YXRhKGx1bWluYW5jZVJlY3QpOwogICAgIAogICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgg
PSBzcmNQaXhlbEFycmF5LT5sZW5ndGgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAkocmV2aXNpb24gMTA4NjYwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUg
IkNvbG9yU3BhY2UuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaW5jbHVkZSAi
R3JhcGhpY3NMYXllci5oIgogI2VuZGlmCkBAIC00Niw3ICs0Nyw2IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKICAgICBjbGFzcyBJbWFnZTsK
ICAgICBjbGFzcyBJbWFnZURhdGE7CiAgICAgY2xhc3MgSW50UG9pbnQ7CkBAIC03NywyMyArNzcs
MzIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJ
bWFnZUJ1ZmZlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKICAgICAg
ICAgLy8gV2lsbCByZXR1cm4gYSBudWxsIHBvaW50ZXIgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgot
ICAgICAgICBzdGF0aWMgUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEludFNp
emUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IENvbG9yU3BhY2VEZXZpY2VSR0IsIFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IFVuYWNjZWxlcmF0ZWQsIERlZmVycmFsTW9kZSBk
ZWZlcnJhbE1vZGUgPSBOb25EZWZlcnJlZCkKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8SW1h
Z2VCdWZmZXI+IGNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBmbG9hdCBkZXZpY2VQaXhlbFJh
dGlvID0gMSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gQ29sb3JTcGFjZURldmljZVJHQiwgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZCwgRGVmZXJyYWxNb2RlIGRl
ZmVycmFsTW9kZSA9IE5vbkRlZmVycmVkKQogICAgICAgICB7CiAgICAgICAgICAgICBib29sIHN1
Y2Nlc3MgPSBmYWxzZTsKLSAgICAgICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gYnVmID0gYWRv
cHRQdHIobmV3IEltYWdlQnVmZmVyKHNpemUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIGRl
ZmVycmFsTW9kZSwgc3VjY2VzcykpOwotICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGJ1Zi5yZWxlYXNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgICAgIEludFNpemUgZGF0YVNpemUgPSBzaXplOworICAgICAgICAgICAgZGF0
YVNpemUuc2NhbGUoZGV2aWNlUGl4ZWxSYXRpbyk7CisKKyAgICAgICAgICAgIE93blB0cjxJbWFn
ZUJ1ZmZlcj4gYnVmID0gYWRvcHRQdHIobmV3IEltYWdlQnVmZmVyKGRhdGFTaXplLCBjb2xvclNw
YWNlLCByZW5kZXJpbmdNb2RlLCBkZWZlcnJhbE1vZGUsIHN1Y2Nlc3MpKTsKKyAgICAgICAgICAg
IGlmICghc3VjY2VzcykKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAg
ICAgICAgYnVmLT5jb250ZXh0KCktPnNjYWxlKEZsb2F0U2l6ZShkZXZpY2VQaXhlbFJhdGlvLCBk
ZXZpY2VQaXhlbFJhdGlvKSk7CisgICAgICAgICAgICBidWYtPm1fZGV2aWNlUGl4ZWxSYXRpbyA9
IGRldmljZVBpeGVsUmF0aW87CisgICAgICAgICAgICByZXR1cm4gYnVmLnJlbGVhc2UoKTsKICAg
ICAgICAgfQogCiAgICAgICAgIH5JbWFnZUJ1ZmZlcigpOwogCi0gICAgICAgIGNvbnN0IEludFNp
emUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICAgICAgaW50IHdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplLndpZHRoKCk7IH0KLSAgICAgICAgaW50IGhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQotICAgICAgICAKLSAgICAgICAgc2l6ZV90
IGRhdGFTaXplKCkgY29uc3Q7Ci0gICAgICAgIAorICAgICAgICBib29sIGRldmljZVBpeGVsUmF0
aW8oKSBjb25zdCB7IHJldHVybiBtX2RldmljZVBpeGVsUmF0aW87IH0KKyAgICAgICAgY29uc3Qg
SW50U2l6ZSYgZGF0YVNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICAgICAgY29u
c3QgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0CisgICAgICAgIHsgCisgICAgICAgICAgICBJ
bnRTaXplIGxvZ2ljYWxTaXplID0gZGF0YVNpemUoKTsKKyAgICAgICAgICAgIGxvZ2ljYWxTaXpl
LnNjYWxlKDEgLyBkZXZpY2VQaXhlbFJhdGlvKCkpOworICAgICAgICAgICAgcmV0dXJuIGxvZ2lj
YWxTaXplOworICAgICAgICB9CisKICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KCkg
Y29uc3Q7CiAKICAgICAgICAgUGFzc1JlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9y
ZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdDsKQEAgLTExMSw3ICsxMjAsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNw
YWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSk7CiAgICAgICAgIHZv
aWQgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IFZlY3RvcjxpbnQ+Jik7CiAjZWxz
ZQotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAtMSwgMCwgbV9zaXplLmhlaWdodCgpKTsgfQorICAg
ICAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmlu
ZVRyYW5zZm9ybSgxLCAwLCAwLCAtMSwgMCwgZGF0YVNpemUoKS5oZWlnaHQoKSk7IH0KICNlbmRp
ZgogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICAgICAgUGxhdGZvcm1MYXll
ciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwpAQCAtMTM2LDcgKzE0NSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIEltYWdlQnVmZmVyRGF0YSBtX2RhdGE7
Ci0KKyAgICAgICAgZmxvYXQgbV9kZXZpY2VQaXhlbFJhdGlvOwogICAgICAgICBJbnRTaXplIG1f
c2l6ZTsKICAgICAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0OwogCkBAIC0x
NDgsNiArMTU3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBUaGlzIGNvbnN0
cnVjdG9yIHdpbGwgcGxhY2UgaXRzIHN1Y2Nlc3MgaW50byB0aGUgZ2l2ZW4gb3V0LXZhcmlhYmxl
CiAgICAgICAgIC8vIHNvIHRoYXQgY3JlYXRlKCkga25vd3Mgd2hlbiBpdCBzaG91bGQgcmV0dXJu
IGZhaWx1cmUuCiAgICAgICAgIEltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmLCBDb2xvclNwYWNl
LCBSZW5kZXJpbmdNb2RlLCBEZWZlcnJhbE1vZGUsIGJvb2wmIHN1Y2Nlc3MpOworICAgICAgICAK
ICAgICB9OwogCiAjaWYgVVNFKENHKSB8fCBVU0UoU0tJQSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCShyZXZpc2lvbiAxMDg2NjAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzMsMTQgKzczLDE0IEBAIHB1YmxpYzoKICAgICAgICAgbV9idWZmZXJJ
blVzZSA9IHRydWU7CiAjZW5kaWYKICAgICAgICAgLy8gV2UgZG8gbm90IG5lZWQgdG8gcmVjcmVh
dGUgdGhlIGJ1ZmZlciBpZiB0aGUgY3VycmVudCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoLgotICAg
ICAgICBpZiAobV9pbWFnZUJ1ZmZlciAmJiBtX2ltYWdlQnVmZmVyLT53aWR0aCgpID49IHNpemUu
d2lkdGgoKSAmJiBtX2ltYWdlQnVmZmVyLT5oZWlnaHQoKSA+PSBzaXplLmhlaWdodCgpKQorICAg
ICAgICBpZiAobV9pbWFnZUJ1ZmZlciAmJiBtX2ltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpLndp
ZHRoKCkgPj0gc2l6ZS53aWR0aCgpICYmIG1faW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkuaGVp
Z2h0KCkgPj0gc2l6ZS5oZWlnaHQoKSkKICAgICAgICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVy
LmdldCgpOwogCiAgICAgICAgIC8vIFJvdW5kIHRvIHRoZSBuZWFyZXN0IDMyIHBpeGVscyBzbyB3
ZSBkbyBub3QgZ3JvdyB0aGUgYnVmZmVyIGZvciBzaW1pbGFyIHNpemVkIHJlcXVlc3RzLgogICAg
ICAgICBJbnRTaXplIHJvdW5kZWRTaXplKHJvdW5kVXBUb011bHRpcGxlT2YzMihzaXplLndpZHRo
KCkpLCByb3VuZFVwVG9NdWx0aXBsZU9mMzIoc2l6ZS5oZWlnaHQoKSkpOwogCiAgICAgICAgIGNs
ZWFyU2NyYXRjaEJ1ZmZlcigpOwotICAgICAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShyb3VuZGVkU2l6ZSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHJvdW5kZWRTaXplLCAxKTsKICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIu
Z2V0KCk7CiAgICAgfQogCkBAIC00NDAsNyArNDQwLDggQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3
U2hhZG93QnVmZmVyKEdyYXBoaQogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0
ZVNhdmVyKCpncmFwaGljc0NvbnRleHQpOwogCi0gICAgSW50U2l6ZSBidWZmZXJTaXplID0gbV9s
YXllckltYWdlLT5zaXplKCk7CisgICAgQVNTRVJUKG1fbGF5ZXJJbWFnZS0+ZGV2aWNlUGl4ZWxS
YXRpbygpID09IDEpOyAvLyBUaGUgY29tcHV0YXRpb25zIGJlbG93IG1ha2UgdGhpcyBhc3N1bXB0
aW9uCisgICAgSW50U2l6ZSBidWZmZXJTaXplID0gbV9sYXllckltYWdlLT5kYXRhU2l6ZSgpOwog
ICAgIGlmIChidWZmZXJTaXplICE9IG1fbGF5ZXJTaXplKSB7CiAgICAgICAgIC8vIFRoZSByZWN0
IHBhc3NlZCB0byBjbGlwVG9JbWFnZUJ1ZmZlcigpIGhhcyB0byBiZSB0aGUgc2l6ZSBvZiB0aGUg
ZW50aXJlIGJ1ZmZlciwKICAgICAgICAgLy8gYnV0IHdlIG1heSBub3QgaGF2ZSBjbGVhcmVkIGl0
IGFsbCwgc28gY2xpcCB0byB0aGUgZmlsbGVkIHBhcnQgZmlyc3QuCkBAIC04MjYsNiArODI3LDcg
QEAgdm9pZCBTaGFkb3dCbHVyOjpibHVyU2hhZG93QnVmZmVyKGNvbnN0IAogICAgICAgICByZXR1
cm47CiAKICAgICBJbnRSZWN0IGJsdXJSZWN0KEludFBvaW50KCksIHRlbXBsYXRlU2l6ZSk7Cisg
ICAgQVNTRVJUKG1fbGF5ZXJJbWFnZS0+ZGV2aWNlUGl4ZWxSYXRpbygpID09IDEpOyAvLyBUaGUg
Y29tcHV0YXRpb25zIGJlbG93IG1ha2UgdGhpcyBhc3N1bXB0aW9uCiAgICAgUmVmUHRyPEJ5dGVB
cnJheT4gbGF5ZXJEYXRhID0gbV9sYXllckltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
Ymx1clJlY3QpOwogICAgIGJsdXJMYXllckltYWdlKGxheWVyRGF0YS0+ZGF0YSgpLCBibHVyUmVj
dC5zaXplKCksIGJsdXJSZWN0LndpZHRoKCkgKiA0KTsKICAgICBtX2xheWVySW1hZ2UtPnB1dEJ5
dGVBcnJheShVbm11bHRpcGxpZWQsIGxheWVyRGF0YS5nZXQoKSwgYmx1clJlY3Quc2l6ZSgpLCBi
bHVyUmVjdCwgSW50UG9pbnQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAkocmV2aXNp
b24gMTA4NjYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDExICs3Niw2IEBAIEltYWdl
QnVmZmVyOjp+SW1hZ2VCdWZmZXIoKQogICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShtX2RhdGEu
bV9zdXJmYWNlKTsKIH0KIAotc2l6ZV90IEltYWdlQnVmZmVyOjpkYXRhU2l6ZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpICogNDsKLX0KLQog
R3JhcGhpY3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fY29udGV4dC5nZXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCShyZXZpc2lvbiAxMDg2NjApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA4LDI1ICsxMDgsMjUgQEAgc3RhdGljIHZvaWQgcmVsZWFzZUlt
YWdlRGF0YSh2b2lkKiwgY29ucwogfQogCiBJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSwgRGVmZXJyYWxNb2RlLCBib29sJiBzdWNjZXNzKQotICAgIDogbV9kYXRh
KHNpemUpCisgICAgOiBtX2RhdGEoc2l6ZSkgLy8gTk9URTogVGhlIGlucHV0IGhlcmUgaXNuJ3Qg
aW1wb3J0YW50IGFzIEltYWdlQnVmZmVyRGF0YUNHJ3MgY29uc3RydWN0b3IganVzdCBpZ25vcmVz
IGl0LgogICAgICwgbV9zaXplKHNpemUpCiB7CiAgICAgc3VjY2VzcyA9IGZhbHNlOyAgLy8gTWFr
ZSBlYXJseSByZXR1cm4gbWVhbiBmYWlsdXJlLgogICAgIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmlu
ZyA9IHJlbmRlcmluZ01vZGUgPT0gQWNjZWxlcmF0ZWQ7Ci0gICAgaWYgKHNpemUud2lkdGgoKSA8
PSAwIHx8IHNpemUuaGVpZ2h0KCkgPD0gMCkKKyAgICBpZiAoZGF0YVNpemUoKS53aWR0aCgpIDw9
IDAgfHwgZGF0YVNpemUoKS5oZWlnaHQoKSA8PSAwKQogICAgICAgICByZXR1cm47CiAKLSAgICBD
aGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IHdpZHRoID0gc2l6ZS53aWR0aCgpOwotICAgIENo
ZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKKyAgICBD
aGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IGRhdGFXaWR0aCA9IGRhdGFTaXplKCkud2lkdGgo
KTsKKyAgICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IGRhdGFIZWlnaHQgPSBkYXRhU2l6
ZSgpLmhlaWdodCgpOwogCiAgICAgLy8gUHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cwotICAgIG1f
ZGF0YS5tX2J5dGVzUGVyUm93ID0gNCAqIHdpZHRoOwotICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNv
cmRPdmVyZmxvdz4gZGF0YVNpemUgPSBoZWlnaHQgKiBtX2RhdGEubV9ieXRlc1BlclJvdzsKLSAg
ICBpZiAoZGF0YVNpemUuaGFzT3ZlcmZsb3dlZCgpKQorICAgIG1fZGF0YS5tX2J5dGVzUGVyUm93
ID0gNCAqIGRhdGFXaWR0aDsKKyAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51
bUJ5dGVzID0gZGF0YUhlaWdodCAqIG1fZGF0YS5tX2J5dGVzUGVyUm93OworICAgIGlmIChudW1C
eXRlcy5oYXNPdmVyZmxvd2VkKCkpCiAgICAgICAgIHJldHVybjsKIAogI2lmIFVTRShJT1NVUkZB
Q0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKHdpZHRoLnVuc2FmZUdldCgpID49IG1h
eElPU3VyZmFjZURpbWVuc2lvbiB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPj0gbWF4SU9TdXJmYWNl
RGltZW5zaW9uIHx8ICh3aWR0aCAqIGhlaWdodCkudW5zYWZlR2V0KCkgPCBtaW5JT1N1cmZhY2VB
cmVhKQorICAgIGlmIChkYXRhV2lkdGgudW5zYWZlR2V0KCkgPj0gbWF4SU9TdXJmYWNlRGltZW5z
aW9uIHx8IGRhdGFIZWlnaHQudW5zYWZlR2V0KCkgPj0gbWF4SU9TdXJmYWNlRGltZW5zaW9uIHx8
IChkYXRhV2lkdGggKiBkYXRhSGVpZ2h0KS51bnNhZmVHZXQoKSA8IG1pbklPU3VyZmFjZUFyZWEp
CiAgICAgICAgIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSBmYWxzZTsKICNlbHNlCiAgICAgQVNTRVJU
KHJlbmRlcmluZ01vZGUgPT0gVW5hY2NlbGVyYXRlZCk7CkBAIC0xNDcsMjIgKzE0NywyMiBAQCBJ
bWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgCiAgICAgUmV0YWluUHRyPENH
Q29udGV4dFJlZj4gY2dDb250ZXh0OwogICAgIGlmIChhY2NlbGVyYXRlUmVuZGVyaW5nKSB7CiAj
aWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgbV9kYXRhLm1f
c3VyZmFjZSA9IGNyZWF0ZUlPU3VyZmFjZShzaXplKTsKLSAgICAgICAgY2dDb250ZXh0LmFkb3B0
Q0Yod2tJT1N1cmZhY2VDb250ZXh0Q3JlYXRlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIHdpZHRo
LnVuc2FmZUdldCgpLCBoZWlnaHQudW5zYWZlR2V0KCksIG1fZGF0YS5tX2NvbG9yU3BhY2UpKTsK
KyAgICAgICAgbV9kYXRhLm1fc3VyZmFjZSA9IGNyZWF0ZUlPU3VyZmFjZShkYXRhU2l6ZSgpKTsK
KyAgICAgICAgY2dDb250ZXh0LmFkb3B0Q0Yod2tJT1N1cmZhY2VDb250ZXh0Q3JlYXRlKG1fZGF0
YS5tX3N1cmZhY2UuZ2V0KCksIGRhdGFXaWR0aC51bnNhZmVHZXQoKSwgZGF0YUhlaWdodC51bnNh
ZmVHZXQoKSwgbV9kYXRhLm1fY29sb3JTcGFjZSkpOwogI2VuZGlmCiAgICAgICAgIGlmICghY2dD
b250ZXh0KQogICAgICAgICAgICAgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IGZhbHNlOyAvLyBJZiBh
bGxvY2F0aW9uIGZhaWxzLCBmYWxsIGJhY2sgdG8gbm9uLWFjY2VsZXJhdGVkIHBhdGguCiAgICAg
fQogCiAgICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIGlmICghdHJ5RmFz
dENhbGxvYyhoZWlnaHQudW5zYWZlR2V0KCksIG1fZGF0YS5tX2J5dGVzUGVyUm93LnVuc2FmZUdl
dCgpKS5nZXRWYWx1ZShtX2RhdGEubV9kYXRhKSkKKyAgICAgICAgaWYgKCF0cnlGYXN0Q2FsbG9j
KGRhdGFIZWlnaHQudW5zYWZlR2V0KCksIG1fZGF0YS5tX2J5dGVzUGVyUm93LnVuc2FmZUdldCgp
KS5nZXRWYWx1ZShtX2RhdGEubV9kYXRhKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
QVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KG1fZGF0YS5tX2RhdGEpICYgMikpOwog
CiAgICAgICAgIG1fZGF0YS5tX2JpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGll
ZExhc3Q7Ci0gICAgICAgIGNnQ29udGV4dC5hZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSht
X2RhdGEubV9kYXRhLCB3aWR0aC51bnNhZmVHZXQoKSwgaGVpZ2h0LnVuc2FmZUdldCgpLCA4LCBt
X2RhdGEubV9ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9kYXRhLm1fY29sb3JTcGFjZSwgbV9k
YXRhLm1fYml0bWFwSW5mbykpOworICAgICAgICBjZ0NvbnRleHQuYWRvcHRDRihDR0JpdG1hcENv
bnRleHRDcmVhdGUobV9kYXRhLm1fZGF0YSwgZGF0YVdpZHRoLnVuc2FmZUdldCgpLCBkYXRhSGVp
Z2h0LnVuc2FmZUdldCgpLCA4LCBtX2RhdGEubV9ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9k
YXRhLm1fY29sb3JTcGFjZSwgbV9kYXRhLm1fYml0bWFwSW5mbykpOwogICAgICAgICAvLyBDcmVh
dGUgYSBsaXZlIGltYWdlIHRoYXQgd3JhcHMgdGhlIGRhdGEuCi0gICAgICAgIG1fZGF0YS5tX2Rh
dGFQcm92aWRlci5hZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgbV9kYXRh
Lm1fZGF0YSwgZGF0YVNpemUudW5zYWZlR2V0KCksIHJlbGVhc2VJbWFnZURhdGEpKTsKKyAgICAg
ICAgbV9kYXRhLm1fZGF0YVByb3ZpZGVyLmFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRo
RGF0YSgwLCBtX2RhdGEubV9kYXRhLCBudW1CeXRlcy51bnNhZmVHZXQoKSwgcmVsZWFzZUltYWdl
RGF0YSkpOwogICAgIH0KIAogICAgIGlmICghY2dDb250ZXh0KQpAQCAtMTcwLDcgKzE3MCw3IEBA
IEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiAKIAogICAgIG1fY29udGV4
dCA9IGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQoY2dDb250ZXh0LmdldCgpKSk7CiAgICAg
bV9jb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKLSAgICBtX2NvbnRleHQtPnRyYW5z
bGF0ZSgwLCAtaGVpZ2h0LnVuc2FmZUdldCgpKTsKKyAgICBtX2NvbnRleHQtPnRyYW5zbGF0ZSgw
LCAtZGF0YUhlaWdodC51bnNhZmVHZXQoKSk7CiAgICAgbV9jb250ZXh0LT5zZXRJc0FjY2VsZXJh
dGVkQ29udGV4dChhY2NlbGVyYXRlUmVuZGVyaW5nKTsKICNpZiBkZWZpbmVkKEJVSUxESU5HX09O
X0xJT04pCiAgICAgbV9kYXRhLm1fbGFzdEZsdXNoVGltZSA9IGN1cnJlbnRUaW1lTVMoKTsKQEAg
LTE4MiwxMSArMTgyLDYgQEAgSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpCiB7CiB9CiAKLXNp
emVfdCBJbWFnZUJ1ZmZlcjo6ZGF0YVNpemUoKSBjb25zdAotewotICAgIHJldHVybiBtX3NpemUu
aGVpZ2h0KCkgKiBtX2RhdGEubV9ieXRlc1BlclJvdy51bnNhZmVHZXQoKTsKLX0KLQogR3JhcGhp
Y3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0CiB7CiAjaWYgZGVmaW5lZChC
VUlMRElOR19PTl9MSU9OKQpAQCAtMjIyLDcgKzIxNyw3IEBAIE5hdGl2ZUltYWdlUHRyIEltYWdl
QnVmZmVyOjpjb3B5TmF0aXZlSW0KICAgICBpZiAoIW1fY29udGV4dC0+aXNBY2NlbGVyYXRlZENv
bnRleHQoKSkgewogICAgICAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgewogICAgICAgICBjYXNl
IERvbnRDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBDR0ltYWdlQ3JlYXRl
KG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDgsIDMyLCBtX2RhdGEubV9ieXRlc1Bl
clJvdy51bnNhZmVHZXQoKSwgbV9kYXRhLm1fY29sb3JTcGFjZSwgbV9kYXRhLm1fYml0bWFwSW5m
bywgbV9kYXRhLm1fZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRl
bnREZWZhdWx0KTsKKyAgICAgICAgICAgIGltYWdlID0gQ0dJbWFnZUNyZWF0ZShkYXRhU2l6ZSgp
LndpZHRoKCksIGRhdGFTaXplKCkuaGVpZ2h0KCksIDgsIDMyLCBtX2RhdGEubV9ieXRlc1BlclJv
dy51bnNhZmVHZXQoKSwgbV9kYXRhLm1fY29sb3JTcGFjZSwgbV9kYXRhLm1fYml0bWFwSW5mbywg
bV9kYXRhLm1fZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnRE
ZWZhdWx0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENvcHlCYWNraW5nU3Rv
cmU6CiAgICAgICAgICAgICBpbWFnZSA9IENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRl
eHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOwpAQCAtMjU1LDI4ICsyNTAsMzQgQEAgdm9pZCBJbWFn
ZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgIGVsc2UKICAgICAgICAgaW1hZ2Uu
YWRvcHRDRihjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKTsKIAotICAgIGRl
c3RDb250ZXh0LT5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fc2l6ZSwgY29sb3JTcGFj
ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wKTsKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0
ID0gc3JjUmVjdDsKKyAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9kZXZpY2VQaXhlbFJhdGlv
KTsKKyAgICBkZXN0Q29udGV4dC0+ZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBkYXRhU2l6
ZSgpLCBjb2xvclNwYWNlLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcCk7CiB9CiAKIHZv
aWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogZGVzdENvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQog
eworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVk
U3JjUmVjdC5zY2FsZShtX2RldmljZVBpeGVsUmF0aW8pOworCiAgICAgaWYgKCFtX2NvbnRleHQt
PmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKICAgICAgICAgaWYgKGRlc3RDb250ZXh0ID09IG1f
Y29udGV4dCB8fCBkZXN0Q29udGV4dC0+aXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewogICAgICAg
ICAgICAgUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpOyAv
LyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgotICAgICAg
ICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFu
c2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CisgICAgICAgICAg
ICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9
IGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0gICAgICAgICAgICBpbWFnZUZvclJl
bmRlcmluZy0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CisgICAgICAgICAgICBp
bWFnZUZvclJlbmRlcmluZy0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGFkanVzdGVkU3JjUmVj
dCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0
KTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIFJlZlB0cjxJbWFnZT4gY29weSA9
IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4o
ZGVzdENvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9y
U3BhY2UsIG9wLCBkZXN0UmVjdCk7CisgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250
ZXh0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9y
U3BhY2UsIG9wLCBkZXN0UmVjdCk7CiAgICAgfQogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpjbGlw
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dFRvQ2xpcCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KSBj
b25zdAogewogICAgIENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRleHRUb0NsaXAgPSBjb250ZXh0
VG9DbGlwLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICAvLyBGSVhNRTogVGhpcyBpbWFnZSBuZWVk
cyB0byBiZSBncmF5c2NhbGUgdG8gYmUgdXNlZCBhcyBhbiBhbHBoYSBtYXNrIGhlcmUuCiAgICAg
UmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlKEFkb3B0Q0YsIGNvcHlOYXRpdmVJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSkpOwogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNv
bnRleHRUb0NsaXAsIHJlY3QueCgpLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpOwogICAgIENH
Q29udGV4dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4dFRvQ2xpcCwgMSwgLTEpOwpAQCAtMjkzLDcg
KzI5NCw3IEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW4KICAgICAg
ICAgbV9kYXRhLm1fbGFzdEZsdXNoVGltZSA9IGN1cnJlbnRUaW1lTVMoKTsKICNlbmRpZgogICAg
IH0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEocmVjdCwgbV9zaXplLCBtX2NvbnRleHQtPmlz
QWNjZWxlcmF0ZWRDb250ZXh0KCksIHRydWUpOworICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShy
ZWN0LCBkYXRhU2l6ZSgpLCBtX2NvbnRleHQtPmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIHRydWUp
OwogfQogCiBQYXNzUmVmUHRyPEJ5dGVBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxp
ZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKQEAgLTMwNCwyMyArMzA1LDI0
IEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHIKICAgICAgICAgbV9k
YXRhLm1fbGFzdEZsdXNoVGltZSA9IGN1cnJlbnRUaW1lTVMoKTsKICNlbmRpZgogICAgIH0KLSAg
ICByZXR1cm4gbV9kYXRhLmdldERhdGEocmVjdCwgbV9zaXplLCBtX2NvbnRleHQtPmlzQWNjZWxl
cmF0ZWRDb250ZXh0KCksIGZhbHNlKTsKKyAgICByZXR1cm4gbV9kYXRhLmdldERhdGEocmVjdCwg
ZGF0YVNpemUoKSwgbV9jb250ZXh0LT5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCBmYWxzZSk7CiB9
CiAKIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJheShNdWx0aXBseSBtdWx0aXBsaWVkLCBC
eXRlQXJyYXkqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKICAgICBpZiAoIW1f
Y29udGV4dC0+aXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICBtX2RhdGEucHV0RGF0
YShzb3VyY2UsIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwgbV9zaXplLCBtX2Nv
bnRleHQtPmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIG11bHRpcGxpZWQgPT0gVW5tdWx0aXBsaWVk
KTsKKyAgICAgICAgbV9kYXRhLnB1dERhdGEoc291cmNlLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0
LCBkZXN0UG9pbnQsIGRhdGFTaXplKCksIG1fY29udGV4dC0+aXNBY2NlbGVyYXRlZENvbnRleHQo
KSwgbXVsdGlwbGllZCA9PSBVbm11bHRpcGxpZWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKICAgICAvLyBNYWtlIGEg
Y29weSBvZiB0aGUgc291cmNlIHRvIGVuc3VyZSB0aGUgYml0cyBkb24ndCBjaGFuZ2UgYmVmb3Jl
IGJlaW5nIGRyYXduCiAgICAgSW50U2l6ZSBzb3VyY2VDb3B5U2l6ZShzb3VyY2VSZWN0LndpZHRo
KCksIHNvdXJjZVJlY3QuaGVpZ2h0KCkpOwotICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc291cmNl
Q29weSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlQ29weVNpemUsIENvbG9yU3BhY2VEZXZp
Y2VSR0IsIFVuYWNjZWxlcmF0ZWQpOworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc291cmNlQ29w
eSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlQ29weVNpemUsIDEsIENvbG9yU3BhY2VEZXZp
Y2VSR0IsIFVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghc291cmNlQ29weSkKICAgICAgICAgcmV0
dXJuOwotICAgIHNvdXJjZUNvcHktPm1fZGF0YS5wdXREYXRhKHNvdXJjZSwgc291cmNlU2l6ZSwg
c291cmNlUmVjdCwgSW50UG9pbnQoLXNvdXJjZVJlY3QueCgpLCAtc291cmNlUmVjdC55KCkpLCBz
b3VyY2VDb3B5LT5zaXplKCksIHNvdXJjZUNvcHktPmNvbnRleHQoKS0+aXNBY2NlbGVyYXRlZENv
bnRleHQoKSwgbXVsdGlwbGllZCA9PSBVbm11bHRpcGxpZWQpOworCisgICAgc291cmNlQ29weS0+
bV9kYXRhLnB1dERhdGEoc291cmNlLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJbnRQb2ludCgt
c291cmNlUmVjdC54KCksIC1zb3VyY2VSZWN0LnkoKSksIHNvdXJjZUNvcHktPmRhdGFTaXplKCks
IHNvdXJjZUNvcHktPmNvbnRleHQoKS0+aXNBY2NlbGVyYXRlZENvbnRleHQoKSwgbXVsdGlwbGll
ZCA9PSBVbm11bHRpcGxpZWQpOwogCiAgICAgLy8gU2V0IHVwIGNvbnRleHQgZm9yIHVzaW5nIGRy
YXdJbWFnZSBhcyBhIGRpcmVjdCBiaXQgY29weQogICAgIENHQ29udGV4dFJlZiBkZXN0Q29udGV4
dCA9IGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCk7CkBAIC0zMzMsNyArMzM1LDcgQEAgdm9p
ZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KE11bHRpcGx5IAogICAgIENHQ29udGV4dFNldFNo
YWRvd1dpdGhDb2xvcihkZXN0Q29udGV4dCwgQ0dTaXplWmVybywgMCwgMCk7CiAKICAgICAvLyBE
cmF3IHRoZSBpbWFnZSBpbiBDRyBjb29yZGluYXRlIHNwYWNlCi0gICAgSW50UG9pbnQgZGVzdFBv
aW50SW5DR0Nvb3JkcyhkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC54KCksIG1fc2l6ZS5oZWln
aHQoKSAtIChkZXN0UG9pbnQueSgpK3NvdXJjZVJlY3QueSgpKSAtIHNvdXJjZVJlY3QuaGVpZ2h0
KCkpOworICAgIEludFBvaW50IGRlc3RQb2ludEluQ0dDb29yZHMoZGVzdFBvaW50LngoKSArIHNv
dXJjZVJlY3QueCgpLCBkYXRhU2l6ZSgpLmhlaWdodCgpIC0gKGRlc3RQb2ludC55KCkrc291cmNl
UmVjdC55KCkpIC0gc291cmNlUmVjdC5oZWlnaHQoKSk7CiAgICAgSW50UmVjdCBkZXN0UmVjdElu
Q0dDb29yZHMoZGVzdFBvaW50SW5DR0Nvb3Jkcywgc291cmNlQ29weVNpemUpOwogICAgIFJldGFp
blB0cjxDR0ltYWdlUmVmPiBzb3VyY2VDb3B5SW1hZ2UoQWRvcHRDRiwgc291cmNlQ29weS0+Y29w
eU5hdGl2ZUltYWdlKCkpOwogICAgIENHQ29udGV4dERyYXdJbWFnZShkZXN0Q29udGV4dCwgZGVz
dFJlY3RJbkNHQ29vcmRzLCBzb3VyY2VDb3B5SW1hZ2UuZ2V0KCkpOwpAQCAtNDE4LDIxICs0MjAs
MjEgQEAgU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaQogCiAgICAgaWYg
KENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CiAgICAgICAgIC8vIEpQRUdzIGRvbid0
IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUg
b24gdG9wIG9mIGJsYWNrLgotICAgICAgICBhcnIgPSBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRh
KEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fc2l6ZSkpOworICAgICAgICBhcnIgPSBnZXRQcmVt
dWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoMCwgMCksIGRhdGFTaXplKCkpKTsK
IAogICAgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhID0gYXJyLT5kYXRhKCk7Ci0gICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgd2lkdGgoKSAqIGhlaWdodCgpOyBpKyspCisgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgZGF0YVNpemUoKS53aWR0aCgpICogZGF0YVNpemUoKS5oZWlnaHQoKTsg
aSsrKQogICAgICAgICAgICAgZGF0YVtpICogNCArIDNdID0gMjU1OyAvLyBUaGUgaW1hZ2UgaXMg
YWxyZWFkeSBwcmVtdWx0aXBsaWVkLCBzbyB3ZSBqdXN0IG5lZWQgdG8gbWFrZSBpdCBvcGFxdWUu
CiAKICAgICAgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXI7CiAg
ICAgCiAgICAgICAgIGRhdGFQcm92aWRlci5hZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0
aERhdGEoMCwgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA0ICogd2lkdGgoKSAqIGhlaWdodCgpLCAwKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAqIGRhdGFT
aXplKCkud2lkdGgoKSAqIGRhdGFTaXplKCkuaGVpZ2h0KCksIDApKTsKICAgICAKICAgICAgICAg
aWYgKCFkYXRhUHJvdmlkZXIpCiAgICAgICAgICAgICByZXR1cm4gImRhdGE6LCI7CiAKLSAgICAg
ICAgaW1hZ2UuYWRvcHRDRihDR0ltYWdlQ3JlYXRlKHdpZHRoKCksIGhlaWdodCgpLCA4LCAzMiwg
NCAqIHdpZHRoKCksCisgICAgICAgIGltYWdlLmFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShkYXRhU2l6
ZSgpLndpZHRoKCksIGRhdGFTaXplKCkuaGVpZ2h0KCksIDgsIDMyLCA0ICogZGF0YVNpemUoKS53
aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dDb2xvclNwYWNl
Q3JlYXRlRGV2aWNlUkdCKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFs
cGhhTGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFQcm92aWRl
ci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKICAgICB9IGVs
c2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAkocmV2aXNpb24gMTA4NjYwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTY3LDYgKzE2Nyw3IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZv
cm1BcHBseVNvZnR3YXIKICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5kcmF3SW1hZ2VCdWZm
ZXIoaW4tPmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lv
bk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwogCiAgICAgSW50UmVjdCBp
bWFnZVJlY3QoSW50UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOworICAgIEFT
U0VSVChyZXN1bHRJbWFnZS0+ZGV2aWNlUGl4ZWxSYXRpbygpID09IDEpOyAvLyBUaGUgY29tcHV0
YXRpb25zIGJlbG93IG1ha2UgdGhpcyBhc3N1bXB0aW9uCiAgICAgUmVmUHRyPEJ5dGVBcnJheT4g
cGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VS
ZWN0KTsKIAogICAgIHN3aXRjaCAobV90eXBlKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCShy
ZXZpc2lvbiAxMDg2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw5ICsxMDMsOSBAQCB2
b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlCiAgICAgU2hhZG93Qmx1ciBj
b250ZXh0U2hhZG93KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9zaGFkb3dDb2xvciwgQ29sb3JTcGFj
ZURldmljZVJHQik7CiAKICAgICAvLyBUT0RPOiBEaXJlY3QgcGl4ZWwgYWNjZXNzIHRvIEltYWdl
QnVmZmVyIHdvdWxkIGF2b2lkIGNvcHlpbmcgdGhlIEltYWdlRGF0YS4KLSAgICBJbnRSZWN0IHNo
YWRvd0FyZWEoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPnNpemUoKSk7CisgICAgSW50UmVjdCBz
aGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT5kYXRhU2l6ZSgpKTsKKyAgICBBU1NF
UlQocmVzdWx0SW1hZ2UtPmRldmljZVBpeGVsUmF0aW8oKSA9PSAxKTsgLy8gVGhlIGNvbXB1dGF0
aW9ucyBiZWxvdyBtYWtlIHRoaXMgYXNzdW1wdGlvbgogICAgIFJlZlB0cjxCeXRlQXJyYXk+IHNy
Y1BpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShzaGFk
b3dBcmVhKTsKLQogICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc3JjUGl4ZWxBcnJh
eS0+ZGF0YSgpLCBzaGFkb3dBcmVhLnNpemUoKSwgNCAqIHNoYWRvd0FyZWEuc2l6ZSgpLndpZHRo
KCkpOwogCiAgICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVBcnJheShQcmVtdWx0aXBsaWVkLCBzcmNQ
aXhlbEFycmF5LmdldCgpLCBzaGFkb3dBcmVhLnNpemUoKSwgc2hhZG93QXJlYSwgSW50UG9pbnQo
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCShyZXZpc2lvbiAxMDg2NjApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyNyw4ICsxMjcsOSBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0Ojph
c0ltYWdlQnVmZmVyCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmIChtX2ltYWdlQnVmZmVyUmVz
dWx0KQogICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKLSAgICBtX2lt
YWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0
LnNpemUoKSwgQ29sb3JTcGFjZUxpbmVhclJHQiwgbV9maWx0ZXItPnJlbmRlcmluZ01vZGUoKSk7
CisgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0
ZVBhaW50UmVjdC5zaXplKCksIDEsIENvbG9yU3BhY2VMaW5lYXJSR0IsIG1fZmlsdGVyLT5yZW5k
ZXJpbmdNb2RlKCkpOwogICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKKyAgICBBU1NFUlQobV9pbWFnZUJ1ZmZlclJlc3Vs
dC0+ZGV2aWNlUGl4ZWxSYXRpbygpID09IDEpOyAvLyBUaGUgZm9sbG93aW5nIGNhbGxzIG1ha2Ug
dGhpcyBhc3N1bXB0aW9uCiAgICAgaWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAg
ICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRCeXRlQXJyYXkoUHJlbXVsdGlwbGllZCwgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCksIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRl
c3RpbmF0aW9uUmVjdCwgSW50UG9pbnQoKSk7CiAgICAgZWxzZQpAQCAtMjAyLDkgKzIwMywxMCBA
QCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZEltYWdlCiAKICAgICBpZiAoIW1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVy
c2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCi0gICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVz
dWx0KQorICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgeworICAgICAgICAgICAgQVNT
RVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmRldmljZVBpeGVsUmF0aW8oKSA9PSAxKTsgLy8gVGhl
IGNvbXB1dGF0aW9ucyBiZWxvdyBtYWtlIHRoaXMgYXNzdW1wdGlvbgogICAgICAgICAgICAgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFVubXVsdGlw
bGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6
ZSgpKSk7Ci0gICAgICAgIGVsc2UgeworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNT
RVJUKGlzRmlsdGVyU2l6ZVZhbGlkKG1fYWJzb2x1dGVQYWludFJlY3QpKTsKICAgICAgICAgICAg
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBCeXRlQXJyYXk6OmNyZWF0ZShtX2Fic29sdXRl
UGFpbnRSZWN0LndpZHRoKCkgKiBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgpICogNCk7CiAg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBzb3VyY2VDb21wb25lbnQgPSBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdC0+ZGF0YSgpOwpAQCAtMjM2LDkgKzIzOCwxMCBAQCB2b2lkIEZpbHRlckVm
ZmVjdDo6Y29weVByZW11bHRpcGxpZWRJbWFnCiAKICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUg
aW1hZ2UgYnVmZmVyLgotICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkKKyAgICAgICAg
aWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2ltYWdlQnVm
ZmVyUmVzdWx0LT5kZXZpY2VQaXhlbFJhdGlvKCkgPT0gMSk7IC8vIFRoZSBjb21wdXRhdGlvbnMg
YmVsb3cgbWFrZSB0aGlzIGFzc3VtcHRpb24KICAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0
YShJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7Ci0gICAg
ICAgIGVsc2UgeworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKGlzRmlsdGVy
U2l6ZVZhbGlkKG1fYWJzb2x1dGVQYWludFJlY3QpKTsKICAgICAgICAgICAgIG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0ID0gQnl0ZUFycmF5OjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC53
aWR0aCgpICogbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSAqIDQpOwogICAgICAgICAgICAg
dW5zaWduZWQgY2hhciogc291cmNlQ29tcG9uZW50ID0gbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dC0+ZGF0YSgpOwpAQCAtMjY0LDcgKzI2Nyw3IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6
OmNyZWF0ZUltYWdlQnUKICAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKICAgICBpZiAobV9hYnNv
bHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIG1faW1hZ2VC
dWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6
ZSgpLCBDb2xvclNwYWNlTGluZWFyUkdCLCBtX2ZpbHRlci0+cmVuZGVyaW5nTW9kZSgpKTsKKyAg
ICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSwgMSwgQ29sb3JTcGFjZUxpbmVhclJHQiwgbV9maWx0ZXItPnJlbmRlcmlu
Z01vZGUoKSk7CiAgICAgaWYgKCFtX2ltYWdlQnVmZmVyUmVzdWx0KQogICAgICAgICByZXR1cm4g
MDsKICAgICBBU1NFUlQobV9pbWFnZUJ1ZmZlclJlc3VsdC0+Y29udGV4dCgpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVy
UXQuY3BwCShyZXZpc2lvbiAxMDg2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDExICsxMDks
NiBAQCBJbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkKIHsKIH0KIAotc2l6ZV90IEltYWdlQnVm
ZmVyOjpkYXRhU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2l6ZS53aWR0aCgpICogbV9z
aXplLmhlaWdodCgpICogNDsKLX0KLQogR3JhcGhpY3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29u
dGV4dCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZGF0YS5tX3BhaW50ZXItPmlzQWN0aXZlKCkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZl
clNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkocmV2aXNpb24gMTA4NjYwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjksMTEgKzE2OSw2IEBAIEdyYXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6
OmNvbnRleHQoKSAKICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwogfQogCi1zaXplX3QgSW1h
Z2VCdWZmZXI6OmRhdGFTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zaXplLndpZHRoKCkg
KiBtX3NpemUuaGVpZ2h0KCkgKiA0OwotfQotCiBQYXNzUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZl
cjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAogewogICAg
IHJldHVybiBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6Y3JlYXRlKCptX2RhdGEubV9wbGF0
Zm9ybUNvbnRleHQuYml0bWFwKCksIGNvcHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVy
V2luQ0UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwCShyZXZpc2lvbiAxMDg2NjApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbkNFLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODgsMTEgKzg4LDYgQEAgSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigp
CiB7CiB9CiAKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6ZGF0YVNpemUoKSBjb25zdAotewotICAgIHJl
dHVybiBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSAqIDQ7Ci19Ci0KIEdyYXBoaWNz
Q29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAogewogICAgIHJldHVybiBtX2Nv
bnRleHQuZ2V0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9J
bWFnZUJ1ZmZlcld4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAkocmV2aXNpb24gMTA4NjYwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDEyICs0OCw2IEBAIEltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKQogewog
fQogCi1zaXplX3QgSW1hZ2VCdWZmZXI6OmRhdGFTaXplKCkgY29uc3QKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCiBHcmFwaGljc0NvbnRleHQqIEltYWdlQnVm
ZmVyOjpjb250ZXh0KCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbQkocmV2
aXNpb24gMTA4NjYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRo
ZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01ODksNyArNTg5LDcgQEAgYm9vbCBTY3JvbGxi
YXJUaGVtZU1hYzo6cGFpbnQoU2Nyb2xsYmFyKgogICAgICAgICBJbnRSZWN0IGJ1ZmZlclJlY3Qo
c2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSk7CiAgICAgICAgIGJ1ZmZlclJlY3QuaW50ZXJzZWN0KGRh
bWFnZVJlY3QpOwogICAgICAgICAKLSAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoYnVmZmVyUmVjdC5zaXplKCkpOworICAgICAgICBP
d25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZm
ZXJSZWN0LnNpemUoKSwgMSk7CiAgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
RmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCShyZXZpc2lvbiAxMDg2NjApCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMjIsNyArMzIyLDggQEAgdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6cHJlcGFyZSgpCiAg
ICAgLy8gc291cmNlIGltYWdlIHNpemVzIHNldC4gV2UganVzdCBuZWVkIHRvIGF0dGFjaCB0aGUg
Z3JhcGhpYwogICAgIC8vIGJ1ZmZlciBpZiB3ZSBoYXZlIG5vdCB5ZXQgZG9uZSBzby4KICAgICBp
ZiAoIW1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCkgewotICAgICAgICBzZXRTb3VyY2VJbWFnZShJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNpemUobV9zb3VyY2VEcmF3aW5nUmVnaW9uLndpZHRoKCks
IG1fc291cmNlRHJhd2luZ1JlZ2lvbi5oZWlnaHQoKSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIHJl
bmRlcmluZ01vZGUoKSkpOworICAgICAgICBJbnRTaXplIGxvZ2ljYWxTaXplKG1fc291cmNlRHJh
d2luZ1JlZ2lvbi53aWR0aCgpLCBtX3NvdXJjZURyYXdpbmdSZWdpb24uaGVpZ2h0KCkpOworICAg
ICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCAxLCBD
b2xvclNwYWNlRGV2aWNlUkdCLCByZW5kZXJpbmdNb2RlKCkpKTsKICAgICAgICAgbV9ncmFwaGlj
c0J1ZmZlckF0dGFjaGVkID0gdHJ1ZTsKICAgICB9CiAgICAgbV9zb3VyY2VHcmFwaGljLT5jbGVh
clJlc3VsdCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5tbQkocmV2aXNpb24gMTA4NjYwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05OTAsNyArOTkwLDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRQcm9ncmVzc0JhcihSZQogICAgIHRyYWNrSW5mby5yZXNlcnZlZCA9
IDA7CiAgICAgdHJhY2tJbmZvLmZpbGxlcjEgPSAwOwogCi0gICAgT3duUHRyPEltYWdlQnVmZmVy
PiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW5mbGF0ZWRSZWN0LnNpemUoKSk7
CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoaW5mbGF0ZWRSZWN0LnNpemUoKSwgMSk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
SW1hZ2VCdWZmZXJUb29scy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcAkocmV2aXNpb24gMTA4NjYwKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBib29sIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNyZWF0
ZUltYWdlQnVmCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEludFNpemUgY2xhbXBlZFNp
emUgPSBjbGFtcGVkQWJzb2x1dGVTaXplKHBhaW50UmVjdC5zaXplKCkpOwotICAgIE93blB0cjxJ
bWFnZUJ1ZmZlcj4gaW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBjb2xv
clNwYWNlLCByZW5kZXJpbmdNb2RlKTsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgcmVuZGVyaW5n
TW9kZSk7CiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC04OSw3
ICs4OSw3IEBAIGJvb2wgU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y3JlYXRlSW1hZ2VCdWYKICAgICBp
ZiAoaW1hZ2VTaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgT3du
UHRyPEltYWdlQnVmZmVyPiBpbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VTaXplLCBj
b2xvclNwYWNlLCByZW5kZXJpbmdNb2RlKTsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdl
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVNpemUsIDEsIGNvbG9yU3BhY2UsIHJlbmRlcmlu
Z01vZGUpOwogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCShyZXZpc2lvbiAxMDg2NjAp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMDQsNyArMzA0LDcgQEAgTmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6Om5hdGl2ZUlt
YWdlRm9yQwogICAgIGlmICghbV9mcmFtZUNhY2hlKSB7CiAgICAgICAgIGlmICghbV9wYWdlKQog
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCkpOworICAgICAgICBPd25QdHI8SW1hZ2VCdWZm
ZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCAxKTsKICAgICAgICAgaWYg
KCFidWZmZXIpIC8vIGZhaWxlZCB0byBhbGxvY2F0ZSBpbWFnZQogICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgIGRyYXcoYnVmZmVyLT5jb250ZXh0KCksIHJlY3QoKSwgcmVjdCgpLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAJKHJldmlzaW9uIDEwODY2MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBAIEltYWdlKiBTVkdJbWFnZUNhY2hlOjpsb29rdXBP
ckNyZWF0ZUJpdG0KICAgICB9CiAKICAgICAvLyBDcmVhdGUgYW5kIGNhY2hlIG5ldyBpbWFnZSBh
bmQgaW1hZ2UgYnVmZmVyIGF0IHJlcXVlc3RlZCBzaXplLgotICAgIE93blB0cjxJbWFnZUJ1ZmZl
cj4gbmV3QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKTsKKyAgICBPd25QdHI8SW1h
Z2VCdWZmZXI+IG5ld0J1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgMSk7CiAgICAg
aWYgKCFuZXdCdWZmZXIpCiAgICAgICAgIHJldHVybiBJbWFnZTo6bnVsbEltYWdlKCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128576</attachid>
            <date>2012-02-23 15:47:42 -0800</date>
            <delta_ts>2012-02-23 17:57:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79395-20120223154741.patch</filename>
            <type>text/plain</type>
            <size>42533</size>
            <attacher name="Matthew Delaney">mdelaney7</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODY3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTAyLTIzICBNYXR0aGV3
IERlbGFuZXkgIDxtZGVsYW5leUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIEltYWdlQnVmZmVy
IHN1cHBvcnQgZm9yIGhhdmluZyBhIGhpLXJlcyBiYWNraW5nIHN0b3JlLiBUaGlzIGFsbG93cwor
ICAgICAgICBJbWFnZUJ1ZmZlciBjbGllbnRzIHRvIHNwZWNpZnkgYSBzY2FsZSBmYWN0b3IgdXBv
biBjcmVhdGlvbiBzbyB0aGF0IHRoZXkKKyAgICAgICAgZG9uJ3QgaGF2ZSB0byBtYWludGFpbiB0
aGF0IGluZm8gdGhlbXNlbHZlcyBhcyB0aGV5IHVzZS9wYXNzIGFyb3VuZCB0aGUgSW1hZ2VCdWZm
ZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTM5
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cy4gVGhpcyBwYXRjaCBkb2Vzbid0IGNoYW5nZSBiZWhhdmlvci4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKTogVXNlIHRoZSBkZXZpY2Ugc2NhbGUgdG8gYWRqdXN0IHRoZSByZXNv
bHV0aW9uCisgICAgICAgIG9mIHRoZSBiYWNraW5nIHN0b3JlLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OmRldmljZVBpeGVsUmF0aW8pOiBBZGQgYSB3YXkgdG8gYWNjZXNzIGlmIHJh
dGlvLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmxvZ2ljYWxTaXplKTogRGlmZmVy
ZW50aWF0ZSBiZXR3ZWVuIHRoZSBsb2dpY2FsIHNpemUgYW5kIHRoZSB1bmRlcmx5aW5nIGRhdGEn
cyBzaXplLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRhdGFTaXplKTogRGlmZmVy
ZW50aWF0ZSBiZXR3ZWVuIHRoZSBsb2dpY2FsIHNpemUgYW5kIHRoZSB1bmRlcmx5aW5nIGRhdGEn
cyBzaXplLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5j
cHA6IEF2b2lkIGRpcmVjdCB1c2Ugb2YgbV9zaXplIHRvIHByZWZlciB0aGUgZXhwbGljaXQKKyAg
ICAgICAgYW5kIHRodXMgY2xlYXJlciB1c2Ugb2YgbG9naWNhbFNpemUgb3IgZGV2aWNlU2l6ZS4K
KworICAgICAgICBFeHBsaWNpdGx5IHN0YXRlIGEgMXggc2NhbGUgZm9yIGFsbCBJbWFnZUJ1ZmZl
ciBjcmVhdGlvbiBzaXRlcworICAgICAgICBzaW5jZSB0aGlzIGlzIHdoYXQgdGhleSBjdXJyZW50
bHkgYXNzdW1lLiBBZGRlZCBBU1NFUlRzIGZvciBjYWxsIHNpdGVzCisgICAgICAgIHRoYXQgdmVy
eSBjbGVhcmx5IGFyZSBhc3N1bWluZyBhIDE6MSByYXRpbyBvZiBiYWNraW5nIHN0b3JlIHRvIHNp
emUuCisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNw
cDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgICogcGxh
dGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tOgorICAgICAgICAqIHJlbmRlcmluZy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFj
Lm1tOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHSW1hZ2VCdWZmZXJUb29scy5jcHA6Cisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvU1ZHSW1hZ2VDYWNoZS5jcHA6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1BsYXRmb3JtQ29udGV4dFNraWEuY3BwOiBVc2UgZGF0YVNpemUoKQorCisgICAgICAgIFVwZGF0
ZSBJbWFnZUJ1ZmZlciBzaXplIHVzYWdlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuY3BwOgorCiAyMDEyLTAyLTIzICBFcmlrIEFydmlkc3NvbiAgPGFydkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIEludGVyZmFjZU5hbWUgaW4gdGhlIGJpbmRpbmdz
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNp
b24gMTA4NjYwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUxMyw3ICs1MTMsNyBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50
OjpjcmVhdGVJbWFnZUJ1ZmZlCiAgICAgICAgIFVuYWNjZWxlcmF0ZWQ7CiAjZW5kaWYKICAgICBE
ZWZlcnJhbE1vZGUgZGVmZXJyYWxNb2RlID0gc2hvdWxkRGVmZXIoKSA/IERlZmVycmVkIDogTm9u
RGVmZXJyZWQ7Ci0gICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoYnVmZmVy
U2l6ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgcmVuZGVyaW5nTW9kZSwgZGVmZXJyYWxNb2RlKTsK
KyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJTaXplLCAxLCBD
b2xvclNwYWNlRGV2aWNlUkdCLCByZW5kZXJpbmdNb2RlLCBkZWZlcnJhbE1vZGUpOwogICAgIGlm
ICghbV9pbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogICAgIG1faW1hZ2VCdWZmZXItPmNv
bnRleHQoKS0+c2NhbGUoRmxvYXRTaXplKGJ1ZmZlclNpemUud2lkdGgoKSAvIGxvZ2ljYWxTaXpl
LndpZHRoKCksIGJ1ZmZlclNpemUuaGVpZ2h0KCkgLyBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOwpA
QCAtNTIzLDcgKzUyMyw4IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVm
ZmUKIAogI2lmIFVTRShKU0MpCiAgICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3Nl
cnRpb25zT25seSk7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5nbG9iYWxEYXRhKCkt
PmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KG1faW1hZ2VCdWZmZXItPmRhdGFTaXplKCkpOwor
ICAgIHNpemVfdCBudW1CeXRlcyA9IDQgKiBtX2ltYWdlQnVmZmVyLT5kYXRhU2l6ZSgpLndpZHRo
KCkgKiBtX2ltYWdlQnVmZmVyLT5kYXRhU2l6ZSgpLmhlaWdodCgpOworICAgIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+Z2xvYmFsRGF0YSgpLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChu
dW1CeXRlcyk7CiAjZW5kaWYKIAogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RP
UkUpIHx8IChFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAxMDg2NjApCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTIxLDcgKzE1MjEsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBUPiBJbnRS
ZWN0IENhbnZhc1JlbmRlcmluCiBQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmNyZWF0ZUNvbXBvc2l0aW5nQnVmZmVyKGNvbnN0IEludFJlY3QmIGJ1ZmZl
clJlY3QpCiB7CiAgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJNb2RlID0gaXNBY2NlbGVyYXRlZCgp
ID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkOwotICAgIHJldHVybiBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGJ1ZmZlclJlY3Quc2l6ZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCByZW5kZXJNb2Rl
KTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgMSwg
Q29sb3JTcGFjZURldmljZVJHQiwgcmVuZGVyTW9kZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpjb21wb3NpdGVCdWZmZXIoSW1hZ2VCdWZmZXIqIGJ1ZmZlciwgY29uc3Qg
SW50UmVjdCYgYnVmZmVyUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCkBAIC0xODgzLDcgKzE4
ODMsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cHV0SW1hZ2VECiAgICAgSW50
U2l6ZSBkZXN0T2Zmc2V0KHN0YXRpY19jYXN0PGludD4oZHgpLCBzdGF0aWNfY2FzdDxpbnQ+KGR5
KSk7CiAgICAgSW50UmVjdCBkZXN0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpOwog
ICAgIGRlc3RSZWN0Lm1vdmUoZGVzdE9mZnNldCk7Ci0gICAgZGVzdFJlY3QuaW50ZXJzZWN0KElu
dFJlY3QoSW50UG9pbnQoKSwgYnVmZmVyLT5zaXplKCkpKTsKKyAgICBkZXN0UmVjdC5pbnRlcnNl
Y3QoSW50UmVjdChJbnRQb2ludCgpLCBidWZmZXItPmRhdGFTaXplKCkpKTsKICAgICBpZiAoZGVz
dFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgSW50UmVjdCBzb3VyY2VSZWN0
KGRlc3RSZWN0KTsKQEAgLTIwODksOSArMjA4OSw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpkcmF3VGV4dEkKICAgICAgICAgSW50UmVjdCBtYXNrUmVjdCA9IGVuY2xvc2luZ0lu
dFJlY3QodGV4dFJlY3QpOwogCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9S
RSkKLSAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBtYXNrSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKG1hc2tSZWN0LnNpemUoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgQWNjZWxlcmF0ZWQp
OworICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1hc2tJbWFnZSA9IEltYWdlQnVmZmVyOjpj
cmVhdGUobWFza1JlY3Quc2l6ZSgpLCAxLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBBY2NlbGVyYXRl
ZCk7CiAjZWxzZQotICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1hc2tJbWFnZSA9IEltYWdl
QnVmZmVyOjpjcmVhdGUobWFza1JlY3Quc2l6ZSgpKTsKKyAgICAgICAgT3duUHRyPEltYWdlQnVm
ZmVyPiBtYXNrSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1hc2tSZWN0LnNpemUoKSwgMSk7
CiAjZW5kaWYKIAogICAgICAgICBHcmFwaGljc0NvbnRleHQqIG1hc2tJbWFnZUNvbnRleHQgPSBt
YXNrSW1hZ2UtPmNvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMTA4NjYwKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTMxNSwxMyArNTMxNSwxMyBAQCBJbWFnZUJ1ZmZlciogV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpMUlVJCiAgICAgICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2J1ZmZlcnNb
aV0uZ2V0KCk7CiAgICAgICAgIGlmICghYnVmKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGlmIChidWYtPnNpemUoKSAhPSBzaXplKQorICAgICAgICBpZiAoYnVmLT5sb2dpY2FsU2l6ZSgp
ICE9IHNpemUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYnViYmxlVG9Gcm9udChp
KTsKICAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICB9CiAKLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+
IHRlbXAgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUpOworICAgIE93blB0cjxJbWFnZUJ1ZmZl
cj4gdGVtcCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgMSk7CiAgICAgaWYgKCF0ZW1wKQog
ICAgICAgICByZXR1cm4gMDsKICAgICBpID0gc3RkOjptaW4obV9jYXBhY2l0eSAtIDEsIGkpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDEwODY2MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg1LDcgKzEwODUsNyBAQCBE
cmFnSW1hZ2VSZWYgRnJhbWU6Om5vZGVJbWFnZShOb2RlKiBub2RlCiAgICAgTGF5b3V0UmVjdCB0
b3BMZXZlbFJlY3Q7CiAgICAgSW50UmVjdCBwYWludGluZ1JlY3QgPSBwaXhlbFNuYXBwZWRJbnRS
ZWN0KHJlbmRlcmVyLT5wYWludGluZ1Jvb3RSZWN0KHRvcExldmVsUmVjdCkpOwogCi0gICAgT3du
UHRyPEltYWdlQnVmZmVyPiBidWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShwYWludGluZ1JlY3Qu
c2l6ZSgpKSk7CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIoSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShwYWludGluZ1JlY3Quc2l6ZSgpLCAxLCBDb2xvclNwYWNlRGV2aWNlUkdCKSk7CiAgICAg
aWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiAwOwogICAgIGJ1ZmZlci0+Y29udGV4dCgpLT50
cmFuc2xhdGUoLXBhaW50aW5nUmVjdC54KCksIC1wYWludGluZ1JlY3QueSgpKTsKQEAgLTExMDgs
NyArMTEwOCw3IEBAIERyYWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0aW8KIAog
ICAgIEludFJlY3QgcGFpbnRpbmdSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChzZWxlY3Rpb24oKS0+
Ym91bmRzKCkpOwogCi0gICAgT3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIoSW1hZ2VCdWZmZXI6
OmNyZWF0ZShwYWludGluZ1JlY3Quc2l6ZSgpKSk7CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBi
dWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShwYWludGluZ1JlY3Quc2l6ZSgpLCAxLCBDb2xvclNw
YWNlRGV2aWNlUkdCKSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiAwOwogICAg
IGJ1ZmZlci0+Y29udGV4dCgpLT50cmFuc2xhdGUoLXBhaW50aW5nUmVjdC54KCksIC1wYWludGlu
Z1JlY3QueSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3Nz
ZmFkZUdlbmVyYXRlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAJKHJldmlzaW9uIDEwODY2
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRl
ZEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCB2b2lkIENyb3NzZmFk
ZUdlbmVyYXRlZEltYWdlOjpkcmF3KEdyYXBoCiAKIHZvaWQgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1h
Z2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3AsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCkKIHsKLSAgICBP
d25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX3Np
emUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIGNvbnRleHQtPmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkg
PyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQpOworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4g
aW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fc2l6ZSwgMSwgQ29sb3JTcGFjZURl
dmljZVJHQiwgY29udGV4dC0+aXNBY2NlbGVyYXRlZENvbnRleHQoKSA/IEFjY2VsZXJhdGVkIDog
VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDEwODY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Nyw3
ICs0ODcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlKiBpCiAgICAg
ICAgIGltYWdlLT5kcmF3KHRoaXMsIEZsb2F0UmVjdChkZXN0LmxvY2F0aW9uKCksIEZsb2F0U2l6
ZSh0dywgdGgpKSwgRmxvYXRSZWN0KHNyYy5sb2NhdGlvbigpLCBGbG9hdFNpemUodHN3LCB0c2gp
KSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
VGlsZWRJbWFnZShJbWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25z
dCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRQb2ludCYgc3JjUG9pbnQsIGNvbnN0IEludFNpemUm
IHRpbGVTaXplLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UqIGltYWdlLCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIGNvbnN0IElu
dFBvaW50JiBzcmNQb2ludCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpIHx8ICFpbWFnZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDk1LDEwICs0OTUsMTAgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYQogICAgIGlmICh1c2VMb3dR
dWFsaXR5U2NhbGUpIHsKICAgICAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgcHJldmlvdXNJbnRl
cnBvbGF0aW9uUXVhbGl0eSA9IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKTsKICAgICAgICAg
c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uTG93KTsKLSAgICAgICAg
aW1hZ2UtPmRyYXdUaWxlZCh0aGlzLCByZWN0LCBzcmNQb2ludCwgdGlsZVNpemUsIHN0eWxlQ29s
b3JTcGFjZSwgb3ApOworICAgICAgICBpbWFnZS0+ZHJhd1RpbGVkKHRoaXMsIGRlc3RSZWN0LCBz
cmNQb2ludCwgdGlsZVNpemUsIHN0eWxlQ29sb3JTcGFjZSwgb3ApOwogICAgICAgICBzZXRJbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5KHByZXZpb3VzSW50ZXJwb2xhdGlvblF1YWxpdHkpOwogICAg
IH0gZWxzZQotICAgICAgICBpbWFnZS0+ZHJhd1RpbGVkKHRoaXMsIHJlY3QsIHNyY1BvaW50LCB0
aWxlU2l6ZSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CisgICAgICAgIGltYWdlLT5kcmF3VGlsZWQo
dGhpcywgZGVzdFJlY3QsIHNyY1BvaW50LCB0aWxlU2l6ZSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSogaW1hZ2Us
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0LCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LApAQCAtNTUzLDE0ICs1NTMsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbQogICAgIGZsb2F0IHRoID0gZGVzdC5oZWlnaHQoKTsKIAog
ICAgIGlmICh0c3cgPT0gLTEpCi0gICAgICAgIHRzdyA9IGltYWdlLT53aWR0aCgpOworICAgICAg
ICB0c3cgPSBpbWFnZS0+bG9naWNhbFNpemUoKS53aWR0aCgpOwogICAgIGlmICh0c2ggPT0gLTEp
Ci0gICAgICAgIHRzaCA9IGltYWdlLT5oZWlnaHQoKTsKKyAgICAgICAgdHNoID0gaW1hZ2UtPmxv
Z2ljYWxTaXplKCkuaGVpZ2h0KCk7CiAKICAgICBpZiAodHcgPT0gLTEpCi0gICAgICAgIHR3ID0g
aW1hZ2UtPndpZHRoKCk7CisgICAgICAgIHR3ID0gaW1hZ2UtPmxvZ2ljYWxTaXplKCkud2lkdGgo
KTsKICAgICBpZiAodGggPT0gLTEpCi0gICAgICAgIHRoID0gaW1hZ2UtPmhlaWdodCgpOworICAg
ICAgICB0aCA9IGltYWdlLT5sb2dpY2FsU2l6ZSgpLmhlaWdodCgpOwogCiAgICAgaWYgKHVzZUxv
d1F1YWxpdHlTY2FsZSkgewogICAgICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBwcmV2aW91c0lu
dGVycG9sYXRpb25RdWFsaXR5ID0gaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpOwpAQCAtNzU0
LDcgKzc1NCw3IEBAIFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IEdyYXBoaWNzQ29udGV4dDoKICAg
ICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKCk7CiAgICAgSW50U2l6ZSBzY2Fs
ZWRTaXplKHN0YXRpY19jYXN0PGludD4oY2VpbChzaXplLndpZHRoKCkgKiB0cmFuc2Zvcm0ueFNj
YWxlKCkpKSwgc3RhdGljX2Nhc3Q8aW50PihjZWlsKHNpemUuaGVpZ2h0KCkgKiB0cmFuc2Zvcm0u
eVNjYWxlKCkpKSk7CiAKLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoc2NhbGVkU2l6ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgaXNBY2NlbGVyYXRl
ZENvbnRleHQoKSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZCk7CisgICAgT3duUHRyPElt
YWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNjYWxlZFNpemUsIDEsIENv
bG9yU3BhY2VEZXZpY2VSR0IsIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBBY2NlbGVyYXRlZCA6
IFVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmNwcAkocmV2aXNpb24gMTA4NjYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBA
IHZvaWQgSW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ28KIAogaW5saW5lIHZvaWQg
SW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKIHsKLSAgICBJbnRS
ZWN0IGx1bWluYW5jZVJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKTsKKyAgICBJbnRSZWN0IGx1bWlu
YW5jZVJlY3QoSW50UG9pbnQoKSwgZGF0YVNpemUoKSk7CiAgICAgUmVmUHRyPEJ5dGVBcnJheT4g
c3JjUGl4ZWxBcnJheSA9IGdldFVubXVsdGlwbGllZEltYWdlRGF0YShsdW1pbmFuY2VSZWN0KTsK
ICAgICAKICAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gc3JjUGl4ZWxBcnJheS0+bGVu
Z3RoKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmgJKHJldmlzaW9uIDEwODY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNp
bmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNl
bmRpZgpAQCAtNDYsNyArNDcsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFz
cyBHcmFwaGljc0NvbnRleHQ7CiAgICAgY2xhc3MgSW1hZ2U7CiAgICAgY2xhc3MgSW1hZ2VEYXRh
OwogICAgIGNsYXNzIEludFBvaW50OwpAQCAtNzcsMjMgKzc3LDMyIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXIpOyBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CiAgICAgICAgIC8vIFdpbGwgcmV0dXJuIGEg
bnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KLSAgICAgICAgc3RhdGljIFBhc3NP
d25QdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlRGV2aWNlUkdCLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUgPSBVbmFjY2VsZXJhdGVkLCBEZWZlcnJhbE1vZGUgZGVmZXJyYWxNb2RlID0gTm9uRGVm
ZXJyZWQpCisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29u
c3QgSW50U2l6ZSYgc2l6ZSwgZmxvYXQgZGV2aWNlUGl4ZWxSYXRpbyA9IDEsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSA9IENvbG9yU3BhY2VEZXZpY2VSR0IsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSA9IFVuYWNjZWxlcmF0ZWQsIERlZmVycmFsTW9kZSBkZWZlcnJhbE1vZGUgPSBOb25EZWZl
cnJlZCkKICAgICAgICAgewogICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAg
ICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZiA9IGFkb3B0UHRyKG5ldyBJbWFnZUJ1ZmZl
cihzaXplLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBkZWZlcnJhbE1vZGUsIHN1Y2Nlc3Mp
KTsKLSAgICAgICAgICAgIGlmIChzdWNjZXNzKQotICAgICAgICAgICAgICAgIHJldHVybiBidWYu
cmVsZWFzZSgpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBJbnRT
aXplIGRhdGFTaXplID0gc2l6ZTsKKyAgICAgICAgICAgIGRhdGFTaXplLnNjYWxlKGRldmljZVBp
eGVsUmF0aW8pOworCisgICAgICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZiA9IGFkb3B0
UHRyKG5ldyBJbWFnZUJ1ZmZlcihkYXRhU2l6ZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwg
ZGVmZXJyYWxNb2RlLCBzdWNjZXNzKSk7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgICAgIGJ1Zi0+Y29udGV4dCgp
LT5zY2FsZShGbG9hdFNpemUoZGV2aWNlUGl4ZWxSYXRpbywgZGV2aWNlUGl4ZWxSYXRpbykpOwor
ICAgICAgICAgICAgYnVmLT5tX2RldmljZVBpeGVsUmF0aW8gPSBkZXZpY2VQaXhlbFJhdGlvOwor
ICAgICAgICAgICAgcmV0dXJuIGJ1Zi5yZWxlYXNlKCk7CiAgICAgICAgIH0KIAogICAgICAgICB+
SW1hZ2VCdWZmZXIoKTsKIAotICAgICAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaXplOyB9Ci0gICAgICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZS53aWR0aCgpOyB9Ci0gICAgICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUu
aGVpZ2h0KCk7IH0KLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBkYXRhU2l6ZSgpIGNvbnN0Owot
ICAgICAgICAKKyAgICAgICAgYm9vbCBkZXZpY2VQaXhlbFJhdGlvKCkgY29uc3QgeyByZXR1cm4g
bV9kZXZpY2VQaXhlbFJhdGlvOyB9CisgICAgICAgIGNvbnN0IEludFNpemUmIGRhdGFTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgICAgIGNvbnN0IEludFNpemUgbG9naWNhbFNp
emUoKSBjb25zdAorICAgICAgICB7IAorICAgICAgICAgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSA9
IGRhdGFTaXplKCk7CisgICAgICAgICAgICBsb2dpY2FsU2l6ZS5zY2FsZSgxIC8gZGV2aWNlUGl4
ZWxSYXRpbygpKTsKKyAgICAgICAgICAgIHJldHVybiBsb2dpY2FsU2l6ZTsKKyAgICAgICAgfQor
CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCgpIGNvbnN0OwogCiAgICAgICAgIFBh
c3NSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdT
dG9yZSkgY29uc3Q7CkBAIC0xMTEsNyArMTIwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBD
b2xvclNwYWNlIGRzdENvbG9yU3BhY2UpOwogICAgICAgICB2b2lkIHBsYXRmb3JtVHJhbnNmb3Jt
Q29sb3JTcGFjZShjb25zdCBWZWN0b3I8aW50PiYpOwogI2Vsc2UKLSAgICAgICAgQWZmaW5lVHJh
bnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwg
MCwgMCwgLTEsIDAsIG1fc2l6ZS5oZWlnaHQoKSk7IH0KKyAgICAgICAgQWZmaW5lVHJhbnNmb3Jt
IGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwg
LTEsIDAsIGRhdGFTaXplKCkuaGVpZ2h0KCkpOyB9CiAjZW5kaWYKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiAgICAgICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBj
b25zdDsKQEAgLTEzNiw3ICsxNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBwcml2
YXRlOgogICAgICAgICBJbWFnZUJ1ZmZlckRhdGEgbV9kYXRhOwotCisgICAgICAgIGZsb2F0IG1f
ZGV2aWNlUGl4ZWxSYXRpbzsKICAgICAgICAgSW50U2l6ZSBtX3NpemU7CiAgICAgICAgIE93blB0
cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKIApAQCAtMTQ4LDYgKzE1Nyw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciB3aWxsIHBsYWNlIGl0
cyBzdWNjZXNzIGludG8gdGhlIGdpdmVuIG91dC12YXJpYWJsZQogICAgICAgICAvLyBzbyB0aGF0
IGNyZWF0ZSgpIGtub3dzIHdoZW4gaXQgc2hvdWxkIHJldHVybiBmYWlsdXJlLgogICAgICAgICBJ
bWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgRGVm
ZXJyYWxNb2RlLCBib29sJiBzdWNjZXNzKTsKKyAgICAgICAgCiAgICAgfTsKIAogI2lmIFVTRShD
RykgfHwgVVNFKFNLSUEpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aGFkb3dCbHVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcAkocmV2aXNpb24gMTA4NjYwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDE0
ICs3MywxNCBAQCBwdWJsaWM6CiAgICAgICAgIG1fYnVmZmVySW5Vc2UgPSB0cnVlOwogI2VuZGlm
CiAgICAgICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIHJlY3JlYXRlIHRoZSBidWZmZXIgaWYgdGhl
IGN1cnJlbnQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaC4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZm
ZXIgJiYgbV9pbWFnZUJ1ZmZlci0+d2lkdGgoKSA+PSBzaXplLndpZHRoKCkgJiYgbV9pbWFnZUJ1
ZmZlci0+aGVpZ2h0KCkgPj0gc2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgaWYgKG1faW1hZ2VCdWZm
ZXIgJiYgbV9pbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKS53aWR0aCgpID49IHNpemUud2lkdGgo
KSAmJiBtX2ltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpLmhlaWdodCgpID49IHNpemUuaGVpZ2h0
KCkpCiAgICAgICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKIAogICAgICAgICAv
LyBSb3VuZCB0byB0aGUgbmVhcmVzdCAzMiBwaXhlbHMgc28gd2UgZG8gbm90IGdyb3cgdGhlIGJ1
ZmZlciBmb3Igc2ltaWxhciBzaXplZCByZXF1ZXN0cy4KICAgICAgICAgSW50U2l6ZSByb3VuZGVk
U2l6ZShyb3VuZFVwVG9NdWx0aXBsZU9mMzIoc2l6ZS53aWR0aCgpKSwgcm91bmRVcFRvTXVsdGlw
bGVPZjMyKHNpemUuaGVpZ2h0KCkpKTsKIAogICAgICAgICBjbGVhclNjcmF0Y2hCdWZmZXIoKTsK
LSAgICAgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocm91bmRlZFNpemUp
OworICAgICAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShyb3VuZGVkU2l6
ZSwgMSk7CiAgICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOwogICAgIH0KIApAQCAt
NDQwLDcgKzQ0MCw4IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1NoYWRvd0J1ZmZlcihHcmFwaGkK
IAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqZ3JhcGhpY3NDb250
ZXh0KTsKIAotICAgIEludFNpemUgYnVmZmVyU2l6ZSA9IG1fbGF5ZXJJbWFnZS0+c2l6ZSgpOwor
ICAgIEFTU0VSVChtX2xheWVySW1hZ2UtPmRldmljZVBpeGVsUmF0aW8oKSA9PSAxKTsgLy8gVGhl
IGNvbXB1dGF0aW9ucyBiZWxvdyBtYWtlIHRoaXMgYXNzdW1wdGlvbgorICAgIEludFNpemUgYnVm
ZmVyU2l6ZSA9IG1fbGF5ZXJJbWFnZS0+ZGF0YVNpemUoKTsKICAgICBpZiAoYnVmZmVyU2l6ZSAh
PSBtX2xheWVyU2l6ZSkgewogICAgICAgICAvLyBUaGUgcmVjdCBwYXNzZWQgdG8gY2xpcFRvSW1h
Z2VCdWZmZXIoKSBoYXMgdG8gYmUgdGhlIHNpemUgb2YgdGhlIGVudGlyZSBidWZmZXIsCiAgICAg
ICAgIC8vIGJ1dCB3ZSBtYXkgbm90IGhhdmUgY2xlYXJlZCBpdCBhbGwsIHNvIGNsaXAgdG8gdGhl
IGZpbGxlZCBwYXJ0IGZpcnN0LgpAQCAtODI2LDYgKzgyNyw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6
Ymx1clNoYWRvd0J1ZmZlcihjb25zdCAKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBi
bHVyUmVjdChJbnRQb2ludCgpLCB0ZW1wbGF0ZVNpemUpOworICAgIEFTU0VSVChtX2xheWVySW1h
Z2UtPmRldmljZVBpeGVsUmF0aW8oKSA9PSAxKTsgLy8gVGhlIGNvbXB1dGF0aW9ucyBiZWxvdyBt
YWtlIHRoaXMgYXNzdW1wdGlvbgogICAgIFJlZlB0cjxCeXRlQXJyYXk+IGxheWVyRGF0YSA9IG1f
bGF5ZXJJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGJsdXJSZWN0KTsKICAgICBibHVy
TGF5ZXJJbWFnZShsYXllckRhdGEtPmRhdGEoKSwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdC53
aWR0aCgpICogNCk7CiAgICAgbV9sYXllckltYWdlLT5wdXRCeXRlQXJyYXkoVW5tdWx0aXBsaWVk
LCBsYXllckRhdGEuZ2V0KCksIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3QsIEludFBvaW50KCkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJKHJldmlzaW9uIDEwODY2MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03NiwxMSArNzYsNiBAQCBJbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVy
KCkKICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kobV9kYXRhLm1fc3VyZmFjZSk7CiB9CiAKLXNp
emVfdCBJbWFnZUJ1ZmZlcjo6ZGF0YVNpemUoKSBjb25zdAotewotICAgIHJldHVybiBtX3NpemUu
d2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSAqIDQ7Ci19Ci0KIEdyYXBoaWNzQ29udGV4dCogSW1h
Z2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAogewogICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHLmNwcAkocmV2aXNpb24gMTA4NjYwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
OCwyNSArMTA4LDI1IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VJbWFnZURhdGEodm9pZCosIGNvbnMK
IH0KIAogSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIENvbG9y
U3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIERlZmVy
cmFsTW9kZSwgYm9vbCYgc3VjY2VzcykKLSAgICA6IG1fZGF0YShzaXplKQorICAgIDogbV9kYXRh
KHNpemUpIC8vIE5PVEU6IFRoZSBpbnB1dCBoZXJlIGlzbid0IGltcG9ydGFudCBhcyBJbWFnZUJ1
ZmZlckRhdGFDRydzIGNvbnN0cnVjdG9yIGp1c3QgaWdub3JlcyBpdC4KICAgICAsIG1fc2l6ZShz
aXplKQogewogICAgIHN1Y2Nlc3MgPSBmYWxzZTsgIC8vIE1ha2UgZWFybHkgcmV0dXJuIG1lYW4g
ZmFpbHVyZS4KICAgICBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSByZW5kZXJpbmdNb2RlID09
IEFjY2VsZXJhdGVkOwotICAgIGlmIChzaXplLndpZHRoKCkgPD0gMCB8fCBzaXplLmhlaWdodCgp
IDw9IDApCisgICAgaWYgKGRhdGFTaXplKCkud2lkdGgoKSA8PSAwIHx8IGRhdGFTaXplKCkuaGVp
Z2h0KCkgPD0gMCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92
ZXJmbG93PiB3aWR0aCA9IHNpemUud2lkdGgoKTsKLSAgICBDaGVja2VkPGludCwgUmVjb3JkT3Zl
cmZsb3c+IGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisgICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92
ZXJmbG93PiBkYXRhV2lkdGggPSBkYXRhU2l6ZSgpLndpZHRoKCk7CisgICAgQ2hlY2tlZDxpbnQs
IFJlY29yZE92ZXJmbG93PiBkYXRhSGVpZ2h0ID0gZGF0YVNpemUoKS5oZWlnaHQoKTsKIAogICAg
IC8vIFByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MKLSAgICBtX2RhdGEubV9ieXRlc1BlclJvdyA9
IDQgKiB3aWR0aDsKLSAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IGRhdGFTaXpl
ID0gaGVpZ2h0ICogbV9kYXRhLm1fYnl0ZXNQZXJSb3c7Ci0gICAgaWYgKGRhdGFTaXplLmhhc092
ZXJmbG93ZWQoKSkKKyAgICBtX2RhdGEubV9ieXRlc1BlclJvdyA9IDQgKiBkYXRhV2lkdGg7Cisg
ICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IGRhdGFIZWlnaHQg
KiBtX2RhdGEubV9ieXRlc1BlclJvdzsKKyAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgp
KQogICAgICAgICByZXR1cm47CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NU
T1JFKQotICAgIGlmICh3aWR0aC51bnNhZmVHZXQoKSA+PSBtYXhJT1N1cmZhY2VEaW1lbnNpb24g
fHwgaGVpZ2h0LnVuc2FmZUdldCgpID49IG1heElPU3VyZmFjZURpbWVuc2lvbiB8fCAod2lkdGgg
KiBoZWlnaHQpLnVuc2FmZUdldCgpIDwgbWluSU9TdXJmYWNlQXJlYSkKKyAgICBpZiAoZGF0YVdp
ZHRoLnVuc2FmZUdldCgpID49IG1heElPU3VyZmFjZURpbWVuc2lvbiB8fCBkYXRhSGVpZ2h0LnVu
c2FmZUdldCgpID49IG1heElPU3VyZmFjZURpbWVuc2lvbiB8fCAoZGF0YVdpZHRoICogZGF0YUhl
aWdodCkudW5zYWZlR2V0KCkgPCBtaW5JT1N1cmZhY2VBcmVhKQogICAgICAgICBhY2NlbGVyYXRl
UmVuZGVyaW5nID0gZmFsc2U7CiAjZWxzZQogICAgIEFTU0VSVChyZW5kZXJpbmdNb2RlID09IFVu
YWNjZWxlcmF0ZWQpOwpAQCAtMTQ3LDIyICsxNDcsMjIgQEAgSW1hZ2VCdWZmZXI6OkltYWdlQnVm
ZmVyKGNvbnN0IEludFNpemUmIAogICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4
dDsKICAgICBpZiAoYWNjZWxlcmF0ZVJlbmRlcmluZykgewogI2lmIFVTRShJT1NVUkZBQ0VfQ0FO
VkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIG1fZGF0YS5tX3N1cmZhY2UgPSBjcmVhdGVJT1N1
cmZhY2Uoc2l6ZSk7Ci0gICAgICAgIGNnQ29udGV4dC5hZG9wdENGKHdrSU9TdXJmYWNlQ29udGV4
dENyZWF0ZShtX2RhdGEubV9zdXJmYWNlLmdldCgpLCB3aWR0aC51bnNhZmVHZXQoKSwgaGVpZ2h0
LnVuc2FmZUdldCgpLCBtX2RhdGEubV9jb2xvclNwYWNlKSk7CisgICAgICAgIG1fZGF0YS5tX3N1
cmZhY2UgPSBjcmVhdGVJT1N1cmZhY2UoZGF0YVNpemUoKSk7CisgICAgICAgIGNnQ29udGV4dC5h
ZG9wdENGKHdrSU9TdXJmYWNlQ29udGV4dENyZWF0ZShtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBk
YXRhV2lkdGgudW5zYWZlR2V0KCksIGRhdGFIZWlnaHQudW5zYWZlR2V0KCksIG1fZGF0YS5tX2Nv
bG9yU3BhY2UpKTsKICNlbmRpZgogICAgICAgICBpZiAoIWNnQ29udGV4dCkKICAgICAgICAgICAg
IGFjY2VsZXJhdGVSZW5kZXJpbmcgPSBmYWxzZTsgLy8gSWYgYWxsb2NhdGlvbiBmYWlscywgZmFs
bCBiYWNrIHRvIG5vbi1hY2NlbGVyYXRlZCBwYXRoLgogICAgIH0KIAogICAgIGlmICghYWNjZWxl
cmF0ZVJlbmRlcmluZykgewotICAgICAgICBpZiAoIXRyeUZhc3RDYWxsb2MoaGVpZ2h0LnVuc2Fm
ZUdldCgpLCBtX2RhdGEubV9ieXRlc1BlclJvdy51bnNhZmVHZXQoKSkuZ2V0VmFsdWUobV9kYXRh
Lm1fZGF0YSkpCisgICAgICAgIGlmICghdHJ5RmFzdENhbGxvYyhkYXRhSGVpZ2h0LnVuc2FmZUdl
dCgpLCBtX2RhdGEubV9ieXRlc1BlclJvdy51bnNhZmVHZXQoKSkuZ2V0VmFsdWUobV9kYXRhLm1f
ZGF0YSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0
X2Nhc3Q8c2l6ZV90PihtX2RhdGEubV9kYXRhKSAmIDIpKTsKIAogICAgICAgICBtX2RhdGEubV9i
aXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0OwotICAgICAgICBjZ0Nv
bnRleHQuYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUobV9kYXRhLm1fZGF0YSwgd2lkdGgu
dW5zYWZlR2V0KCksIGhlaWdodC51bnNhZmVHZXQoKSwgOCwgbV9kYXRhLm1fYnl0ZXNQZXJSb3cu
dW5zYWZlR2V0KCksIG1fZGF0YS5tX2NvbG9yU3BhY2UsIG1fZGF0YS5tX2JpdG1hcEluZm8pKTsK
KyAgICAgICAgY2dDb250ZXh0LmFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1fZGF0YS5t
X2RhdGEsIGRhdGFXaWR0aC51bnNhZmVHZXQoKSwgZGF0YUhlaWdodC51bnNhZmVHZXQoKSwgOCwg
bV9kYXRhLm1fYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIG1fZGF0YS5tX2NvbG9yU3BhY2UsIG1f
ZGF0YS5tX2JpdG1hcEluZm8pKTsKICAgICAgICAgLy8gQ3JlYXRlIGEgbGl2ZSBpbWFnZSB0aGF0
IHdyYXBzIHRoZSBkYXRhLgotICAgICAgICBtX2RhdGEubV9kYXRhUHJvdmlkZXIuYWRvcHRDRihD
R0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIG1fZGF0YS5tX2RhdGEsIGRhdGFTaXplLnVu
c2FmZUdldCgpLCByZWxlYXNlSW1hZ2VEYXRhKSk7CisgICAgICAgIG1fZGF0YS5tX2RhdGFQcm92
aWRlci5hZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgbV9kYXRhLm1fZGF0
YSwgbnVtQnl0ZXMudW5zYWZlR2V0KCksIHJlbGVhc2VJbWFnZURhdGEpKTsKICAgICB9CiAKICAg
ICBpZiAoIWNnQ29udGV4dCkKQEAgLTE3MCw3ICsxNzAsNyBAQCBJbWFnZUJ1ZmZlcjo6SW1hZ2VC
dWZmZXIoY29uc3QgSW50U2l6ZSYgCiAKICAgICBtX2NvbnRleHQgPSBhZG9wdFB0cihuZXcgR3Jh
cGhpY3NDb250ZXh0KGNnQ29udGV4dC5nZXQoKSkpOwogICAgIG1fY29udGV4dC0+c2NhbGUoRmxv
YXRTaXplKDEsIC0xKSk7Ci0gICAgbV9jb250ZXh0LT50cmFuc2xhdGUoMCwgLWhlaWdodC51bnNh
ZmVHZXQoKSk7CisgICAgbV9jb250ZXh0LT50cmFuc2xhdGUoMCwgLWRhdGFIZWlnaHQudW5zYWZl
R2V0KCkpOwogICAgIG1fY29udGV4dC0+c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYWNjZWxlcmF0
ZVJlbmRlcmluZyk7CiAjaWYgZGVmaW5lZChCVUlMRElOR19PTl9MSU9OKQogICAgIG1fZGF0YS5t
X2xhc3RGbHVzaFRpbWUgPSBjdXJyZW50VGltZU1TKCk7CkBAIC0xODIsMTEgKzE4Miw2IEBAIElt
YWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKQogewogfQogCi1zaXplX3QgSW1hZ2VCdWZmZXI6OmRh
dGFTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zaXplLmhlaWdodCgpICogbV9kYXRhLm1f
Ynl0ZXNQZXJSb3cudW5zYWZlR2V0KCk7Ci19Ci0KIEdyYXBoaWNzQ29udGV4dCogSW1hZ2VCdWZm
ZXI6OmNvbnRleHQoKSBjb25zdAogewogI2lmIGRlZmluZWQoQlVJTERJTkdfT05fTElPTikKQEAg
LTIyMiw3ICsyMTcsNyBAQCBOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcjo6Y29weU5hdGl2ZUlt
CiAgICAgaWYgKCFtX2NvbnRleHQtPmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKICAgICAgICAg
c3dpdGNoIChjb3B5QmVoYXZpb3IpIHsKICAgICAgICAgY2FzZSBEb250Q29weUJhY2tpbmdTdG9y
ZToKLSAgICAgICAgICAgIGltYWdlID0gQ0dJbWFnZUNyZWF0ZShtX3NpemUud2lkdGgoKSwgbV9z
aXplLmhlaWdodCgpLCA4LCAzMiwgbV9kYXRhLm1fYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIG1f
ZGF0YS5tX2NvbG9yU3BhY2UsIG1fZGF0YS5tX2JpdG1hcEluZm8sIG1fZGF0YS5tX2RhdGFQcm92
aWRlci5nZXQoKSwgMCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCk7CisgICAgICAg
ICAgICBpbWFnZSA9IENHSW1hZ2VDcmVhdGUoZGF0YVNpemUoKS53aWR0aCgpLCBkYXRhU2l6ZSgp
LmhlaWdodCgpLCA4LCAzMiwgbV9kYXRhLm1fYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIG1fZGF0
YS5tX2NvbG9yU3BhY2UsIG1fZGF0YS5tX2JpdG1hcEluZm8sIG1fZGF0YS5tX2RhdGFQcm92aWRl
ci5nZXQoKSwgMCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOgogICAgICAgICAgICAgaW1h
Z2UgPSBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4
dCgpKTsKQEAgLTI1NSwyOCArMjUwLDM0IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhp
Y3NDb250ZXh0KiAKICAgICBlbHNlCiAgICAgICAgIGltYWdlLmFkb3B0Q0YoY29weU5hdGl2ZUlt
YWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSk7CiAKLSAgICBkZXN0Q29udGV4dC0+ZHJhd05hdGl2
ZUltYWdlKGltYWdlLmdldCgpLCBtX3NpemUsIGNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0
LCBvcCk7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgYWRq
dXN0ZWRTcmNSZWN0LnNjYWxlKG1fZGV2aWNlUGl4ZWxSYXRpbyk7CisgICAgZGVzdENvbnRleHQt
PmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgZGF0YVNpemUoKSwgY29sb3JTcGFjZSwgZGVz
dFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3ApOwogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVy
YXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKKyAgICBGbG9hdFJlY3QgYWRq
dXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9kZXZp
Y2VQaXhlbFJhdGlvKTsKKwogICAgIGlmICghbV9jb250ZXh0LT5pc0FjY2VsZXJhdGVkQ29udGV4
dCgpKSB7CiAgICAgICAgIGlmIChkZXN0Q29udGV4dCA9PSBtX2NvbnRleHQgfHwgZGVzdENvbnRl
eHQtPmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxJbWFnZT4g
Y29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsgLy8gRHJhd2luZyBpbnRvIG91ciBv
d24gYnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0
ZXJuKGRlc3RDb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVD
b2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOworICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4o
ZGVzdENvbnRleHQsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0
eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXJpbmcgPSBjb3B5SW1hZ2UoRG9udENvcHlC
YWNraW5nU3RvcmUpOwotICAgICAgICAgICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRyYXdQYXR0ZXJu
KGRlc3RDb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xv
clNwYWNlLCBvcCwgZGVzdFJlY3QpOworICAgICAgICAgICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRy
YXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgewogICAgICAgICBSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tp
bmdTdG9yZSk7Ci0gICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBzcmNSZWN0
LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3Qp
OworICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgYWRqdXN0ZWRTcmNSZWN0
LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3Qp
OwogICAgIH0KIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHRUb0NsaXAsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICBDR0NvbnRl
eHRSZWYgcGxhdGZvcm1Db250ZXh0VG9DbGlwID0gY29udGV4dFRvQ2xpcC0+cGxhdGZvcm1Db250
ZXh0KCk7CisgICAgLy8gRklYTUU6IFRoaXMgaW1hZ2UgbmVlZHMgdG8gYmUgZ3JheXNjYWxlIHRv
IGJlIHVzZWQgYXMgYW4gYWxwaGEgbWFzayBoZXJlLgogICAgIFJldGFpblB0cjxDR0ltYWdlUmVm
PiBpbWFnZShBZG9wdENGLCBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKTsK
ICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0ocGxhdGZvcm1Db250ZXh0VG9DbGlwLCByZWN0Lngo
KSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShwbGF0
Zm9ybUNvbnRleHRUb0NsaXAsIDEsIC0xKTsKQEAgLTI5Myw3ICsyOTQsNyBAQCBQYXNzUmVmUHRy
PEJ5dGVBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVuCiAgICAgICAgIG1fZGF0YS5tX2xhc3RGbHVz
aFRpbWUgPSBjdXJyZW50VGltZU1TKCk7CiAjZW5kaWYKICAgICB9Ci0gICAgcmV0dXJuIG1fZGF0
YS5nZXREYXRhKHJlY3QsIG1fc2l6ZSwgbV9jb250ZXh0LT5pc0FjY2VsZXJhdGVkQ29udGV4dCgp
LCB0cnVlKTsKKyAgICByZXR1cm4gbV9kYXRhLmdldERhdGEocmVjdCwgZGF0YVNpemUoKSwgbV9j
b250ZXh0LT5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCB0cnVlKTsKIH0KIAogUGFzc1JlZlB0cjxC
eXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IElu
dFJlY3QmIHJlY3QpIGNvbnN0CkBAIC0zMDQsMjMgKzMwNSwyNCBAQCBQYXNzUmVmUHRyPEJ5dGVB
cnJheT4gSW1hZ2VCdWZmZXI6OmdldFByCiAgICAgICAgIG1fZGF0YS5tX2xhc3RGbHVzaFRpbWUg
PSBjdXJyZW50VGltZU1TKCk7CiAjZW5kaWYKICAgICB9Ci0gICAgcmV0dXJuIG1fZGF0YS5nZXRE
YXRhKHJlY3QsIG1fc2l6ZSwgbV9jb250ZXh0LT5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCBmYWxz
ZSk7CisgICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKHJlY3QsIGRhdGFTaXplKCksIG1fY29udGV4
dC0+aXNBY2NlbGVyYXRlZENvbnRleHQoKSwgZmFsc2UpOwogfQogCiB2b2lkIEltYWdlQnVmZmVy
OjpwdXRCeXRlQXJyYXkoTXVsdGlwbHkgbXVsdGlwbGllZCwgQnl0ZUFycmF5KiBzb3VyY2UsIGNv
bnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0
IEludFBvaW50JiBkZXN0UG9pbnQpCiB7CiAgICAgaWYgKCFtX2NvbnRleHQtPmlzQWNjZWxlcmF0
ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgbV9kYXRhLnB1dERhdGEoc291cmNlLCBzb3VyY2VTaXpl
LCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIG1fc2l6ZSwgbV9jb250ZXh0LT5pc0FjY2VsZXJhdGVk
Q29udGV4dCgpLCBtdWx0aXBsaWVkID09IFVubXVsdGlwbGllZCk7CisgICAgICAgIG1fZGF0YS5w
dXREYXRhKHNvdXJjZSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBkYXRhU2l6
ZSgpLCBtX2NvbnRleHQtPmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIG11bHRpcGxpZWQgPT0gVW5t
dWx0aXBsaWVkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogI2lmIFVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpCiAgICAgLy8gTWFrZSBhIGNvcHkgb2YgdGhlIHNvdXJjZSB0
byBlbnN1cmUgdGhlIGJpdHMgZG9uJ3QgY2hhbmdlIGJlZm9yZSBiZWluZyBkcmF3bgogICAgIElu
dFNpemUgc291cmNlQ29weVNpemUoc291cmNlUmVjdC53aWR0aCgpLCBzb3VyY2VSZWN0LmhlaWdo
dCgpKTsKLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNvdXJjZUNvcHkgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKHNvdXJjZUNvcHlTaXplLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBVbmFjY2VsZXJhdGVk
KTsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNvdXJjZUNvcHkgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHNvdXJjZUNvcHlTaXplLCAxLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBVbmFjY2VsZXJhdGVk
KTsKICAgICBpZiAoIXNvdXJjZUNvcHkpCiAgICAgICAgIHJldHVybjsKLSAgICBzb3VyY2VDb3B5
LT5tX2RhdGEucHV0RGF0YShzb3VyY2UsIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QsIEludFBvaW50
KC1zb3VyY2VSZWN0LngoKSwgLXNvdXJjZVJlY3QueSgpKSwgc291cmNlQ29weS0+c2l6ZSgpLCBz
b3VyY2VDb3B5LT5jb250ZXh0KCktPmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIG11bHRpcGxpZWQg
PT0gVW5tdWx0aXBsaWVkKTsKKworICAgIHNvdXJjZUNvcHktPm1fZGF0YS5wdXREYXRhKHNvdXJj
ZSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwgSW50UG9pbnQoLXNvdXJjZVJlY3QueCgpLCAtc291
cmNlUmVjdC55KCkpLCBzb3VyY2VDb3B5LT5kYXRhU2l6ZSgpLCBzb3VyY2VDb3B5LT5jb250ZXh0
KCktPmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIG11bHRpcGxpZWQgPT0gVW5tdWx0aXBsaWVkKTsK
IAogICAgIC8vIFNldCB1cCBjb250ZXh0IGZvciB1c2luZyBkcmF3SW1hZ2UgYXMgYSBkaXJlY3Qg
Yml0IGNvcHkKICAgICBDR0NvbnRleHRSZWYgZGVzdENvbnRleHQgPSBjb250ZXh0KCktPnBsYXRm
b3JtQ29udGV4dCgpOwpAQCAtMzMzLDcgKzMzNSw3IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dEJ5
dGVBcnJheShNdWx0aXBseSAKICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoZGVzdENv
bnRleHQsIENHU2l6ZVplcm8sIDAsIDApOwogCiAgICAgLy8gRHJhdyB0aGUgaW1hZ2UgaW4gQ0cg
Y29vcmRpbmF0ZSBzcGFjZQotICAgIEludFBvaW50IGRlc3RQb2ludEluQ0dDb29yZHMoZGVzdFBv
aW50LngoKSArIHNvdXJjZVJlY3QueCgpLCBtX3NpemUuaGVpZ2h0KCkgLSAoZGVzdFBvaW50Lnko
KStzb3VyY2VSZWN0LnkoKSkgLSBzb3VyY2VSZWN0LmhlaWdodCgpKTsKKyAgICBJbnRQb2ludCBk
ZXN0UG9pbnRJbkNHQ29vcmRzKGRlc3RQb2ludC54KCkgKyBzb3VyY2VSZWN0LngoKSwgZGF0YVNp
emUoKS5oZWlnaHQoKSAtIChkZXN0UG9pbnQueSgpK3NvdXJjZVJlY3QueSgpKSAtIHNvdXJjZVJl
Y3QuaGVpZ2h0KCkpOwogICAgIEludFJlY3QgZGVzdFJlY3RJbkNHQ29vcmRzKGRlc3RQb2ludElu
Q0dDb29yZHMsIHNvdXJjZUNvcHlTaXplKTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gc291
cmNlQ29weUltYWdlKEFkb3B0Q0YsIHNvdXJjZUNvcHktPmNvcHlOYXRpdmVJbWFnZSgpKTsKICAg
ICBDR0NvbnRleHREcmF3SW1hZ2UoZGVzdENvbnRleHQsIGRlc3RSZWN0SW5DR0Nvb3Jkcywgc291
cmNlQ29weUltYWdlLmdldCgpKTsKQEAgLTQxOCwyMSArNDIwLDIxIEBAIFN0cmluZyBJbWFnZUJ1
ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmkKIAogICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwg
anBlZ1VUSSgpKSkgewogICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5u
ZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KLSAg
ICAgICAgYXJyID0gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KDAs
IDApLCBtX3NpemUpKTsKKyAgICAgICAgYXJyID0gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJ
bnRSZWN0KEludFBvaW50KDAsIDApLCBkYXRhU2l6ZSgpKSk7CiAKICAgICAgICAgdW5zaWduZWQg
Y2hhciAqZGF0YSA9IGFyci0+ZGF0YSgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdp
ZHRoKCkgKiBoZWlnaHQoKTsgaSsrKQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRhdGFT
aXplKCkud2lkdGgoKSAqIGRhdGFTaXplKCkuaGVpZ2h0KCk7IGkrKykKICAgICAgICAgICAgIGRh
dGFbaSAqIDQgKyAzXSA9IDI1NTsgLy8gVGhlIGltYWdlIGlzIGFscmVhZHkgcHJlbXVsdGlwbGll
ZCwgc28gd2UganVzdCBuZWVkIHRvIG1ha2UgaXQgb3BhcXVlLgogCiAgICAgICAgIFJldGFpblB0
cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyOwogICAgIAogICAgICAgICBkYXRhUHJv
dmlkZXIuYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIGRhdGEsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAq
IHdpZHRoKCkgKiBoZWlnaHQoKSwgMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKiBkYXRhU2l6ZSgpLndpZHRoKCkgKiBkYXRh
U2l6ZSgpLmhlaWdodCgpLCAwKSk7CiAgICAgCiAgICAgICAgIGlmICghZGF0YVByb3ZpZGVyKQog
ICAgICAgICAgICAgcmV0dXJuICJkYXRhOiwiOwogCi0gICAgICAgIGltYWdlLmFkb3B0Q0YoQ0dJ
bWFnZUNyZWF0ZSh3aWR0aCgpLCBoZWlnaHQoKSwgOCwgMzIsIDQgKiB3aWR0aCgpLAorICAgICAg
ICBpbWFnZS5hZG9wdENGKENHSW1hZ2VDcmVhdGUoZGF0YVNpemUoKS53aWR0aCgpLCBkYXRhU2l6
ZSgpLmhlaWdodCgpLCA4LCAzMiwgNCAqIGRhdGFTaXplKCkud2lkdGgoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpLCBr
Q0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYUxhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBr
Q0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CiAgICAgfSBlbHNlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5jcHAJKHJldmlzaW9uIDEwODY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw2
ICsxNjcsNyBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyCiAgICAg
cmVzdWx0SW1hZ2UtPmNvbnRleHQoKS0+ZHJhd0ltYWdlQnVmZmVyKGluLT5hc0ltYWdlQnVmZmVy
KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFi
c29sdXRlUGFpbnRSZWN0KCkpKTsKIAogICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCks
IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKKyAgICBBU1NFUlQocmVzdWx0SW1hZ2UtPmRl
dmljZVBpeGVsUmF0aW8oKSA9PSAxKTsgLy8gVGhlIGNvbXB1dGF0aW9ucyBiZWxvdyBtYWtlIHRo
aXMgYXNzdW1wdGlvbgogICAgIFJlZlB0cjxCeXRlQXJyYXk+IHBpeGVsQXJyYXkgPSByZXN1bHRJ
bWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlUmVjdCk7CiAKICAgICBzd2l0Y2gg
KG1fdHlwZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURyb3BTaGFkb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAkocmV2aXNpb24gMTA4NjYwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsOSArMTAzLDkgQEAgdm9pZCBGRURyb3BTaGFkb3c6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZQogICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhibHVyUmFk
aXVzLCBvZmZzZXQsIG1fc2hhZG93Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogCiAgICAg
Ly8gVE9ETzogRGlyZWN0IHBpeGVsIGFjY2VzcyB0byBJbWFnZUJ1ZmZlciB3b3VsZCBhdm9pZCBj
b3B5aW5nIHRoZSBJbWFnZURhdGEuCi0gICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCks
IHJlc3VsdEltYWdlLT5zaXplKCkpOworICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgp
LCByZXN1bHRJbWFnZS0+ZGF0YVNpemUoKSk7CisgICAgQVNTRVJUKHJlc3VsdEltYWdlLT5kZXZp
Y2VQaXhlbFJhdGlvKCkgPT0gMSk7IC8vIFRoZSBjb21wdXRhdGlvbnMgYmVsb3cgbWFrZSB0aGlz
IGFzc3VtcHRpb24KICAgICBSZWZQdHI8Qnl0ZUFycmF5PiBzcmNQaXhlbEFycmF5ID0gcmVzdWx0
SW1hZ2UtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoc2hhZG93QXJlYSk7Ci0KICAgICBjb250
ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXktPmRhdGEoKSwgc2hhZG93QXJl
YS5zaXplKCksIDQgKiBzaGFkb3dBcmVhLnNpemUoKS53aWR0aCgpKTsKIAogICAgIHJlc3VsdElt
YWdlLT5wdXRCeXRlQXJyYXkoUHJlbXVsdGlwbGllZCwgc3JjUGl4ZWxBcnJheS5nZXQoKSwgc2hh
ZG93QXJlYS5zaXplKCksIHNoYWRvd0FyZWEsIEludFBvaW50KCkpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmNwcAkocmV2aXNpb24gMTA4NjYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsOCAr
MTI3LDkgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6YXNJbWFnZUJ1ZmZlcgogICAgICAg
ICByZXR1cm4gMDsKICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkKICAgICAgICAgcmV0dXJu
IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7Ci0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IElt
YWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIENvbG9yU3BhY2VM
aW5lYXJSR0IsIG1fZmlsdGVyLT5yZW5kZXJpbmdNb2RlKCkpOworICAgIG1faW1hZ2VCdWZmZXJS
ZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCAx
LCBDb2xvclNwYWNlTGluZWFyUkdCLCBtX2ZpbHRlci0+cmVuZGVyaW5nTW9kZSgpKTsKICAgICBJ
bnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSk7CisgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmRldmljZVBpeGVsUmF0aW8o
KSA9PSAxKTsgLy8gVGhlIGZvbGxvd2luZyBjYWxscyBtYWtlIHRoaXMgYXNzdW1wdGlvbgogICAg
IGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgbV9pbWFnZUJ1ZmZlclJl
c3VsdC0+cHV0Qnl0ZUFycmF5KFByZW11bHRpcGxpZWQsIG1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0LmdldCgpLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QsIEludFBv
aW50KCkpOwogICAgIGVsc2UKQEAgLTIwMiw5ICsyMDMsMTAgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6
OmNvcHlVbm11bHRpcGxpZWRJbWFnZQogCiAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2Ug
YnVmZmVyLgotICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkKKyAgICAgICAgaWYgKG1f
aW1hZ2VCdWZmZXJSZXN1bHQpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2ltYWdlQnVmZmVyUmVz
dWx0LT5kZXZpY2VQaXhlbFJhdGlvKCkgPT0gMSk7IC8vIFRoZSBjb21wdXRhdGlvbnMgYmVsb3cg
bWFrZSB0aGlzIGFzc3VtcHRpb24KICAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVj
dChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwotICAgICAgICBlbHNl
IHsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChpc0ZpbHRlclNpemVWYWxp
ZChtX2Fic29sdXRlUGFpbnRSZWN0KSk7CiAgICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0ID0gQnl0ZUFycmF5OjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpICog
bV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSAqIDQpOwogICAgICAgICAgICAgdW5zaWduZWQg
Y2hhciogc291cmNlQ29tcG9uZW50ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEo
KTsKQEAgLTIzNiw5ICsyMzgsMTAgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBs
aWVkSW1hZwogCiAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewogICAgICAg
ICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KLSAgICAg
ICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCisgICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVz
dWx0KSB7CisgICAgICAgICAgICBBU1NFUlQobV9pbWFnZUJ1ZmZlclJlc3VsdC0+ZGV2aWNlUGl4
ZWxSYXRpbygpID09IDEpOyAvLyBUaGUgY29tcHV0YXRpb25zIGJlbG93IG1ha2UgdGhpcyBhc3N1
bXB0aW9uCiAgICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VC
dWZmZXJSZXN1bHQtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgp
LCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwotICAgICAgICBlbHNlIHsKKyAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChpc0ZpbHRlclNpemVWYWxpZChtX2Fic29sdXRl
UGFpbnRSZWN0KSk7CiAgICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEJ5
dGVBcnJheTo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSAqIG1fYWJzb2x1dGVQ
YWludFJlY3QuaGVpZ2h0KCkgKiA0KTsKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHNvdXJj
ZUNvbXBvbmVudCA9IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKTsKQEAgLTI2NCw3
ICsyNjcsNyBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1CiAgICAg
QVNTRVJUKCFoYXNSZXN1bHQoKSk7CiAgICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgQ29sb3JTcGFjZUxpbmVh
clJHQiwgbV9maWx0ZXItPnJlbmRlcmluZ01vZGUoKSk7CisgICAgbV9pbWFnZUJ1ZmZlclJlc3Vs
dCA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIDEsIENv
bG9yU3BhY2VMaW5lYXJSR0IsIG1fZmlsdGVyLT5yZW5kZXJpbmdNb2RlKCkpOwogICAgIGlmICgh
bV9pbWFnZUJ1ZmZlclJlc3VsdCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgQVNTRVJUKG1faW1h
Z2VCdWZmZXJSZXN1bHQtPmNvbnRleHQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAkocmV2aXNpb24gMTA4
NjYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJR
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSwxMSArMTA5LDYgQEAgSW1hZ2VCdWZmZXI6On5J
bWFnZUJ1ZmZlcigpCiB7CiB9CiAKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6ZGF0YVNpemUoKSBjb25z
dAotewotICAgIHJldHVybiBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSAqIDQ7Ci19
Ci0KIEdyYXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAogewogICAg
IEFTU0VSVChtX2RhdGEubV9wYWludGVyLT5pc0FjdGl2ZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tp
YS5jcHAJKHJldmlzaW9uIDEwODY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDExICsx
NjksNiBAQCBHcmFwaGljc0NvbnRleHQqIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgCiAgICAgcmV0
dXJuIG1fY29udGV4dC5nZXQoKTsKIH0KIAotc2l6ZV90IEltYWdlQnVmZmVyOjpkYXRhU2l6ZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpICog
NDsKLX0KLQogUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5n
U3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKIHsKICAgICByZXR1cm4gQml0bWFwSW1hZ2VT
aW5nbGVGcmFtZVNraWE6OmNyZWF0ZSgqbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0LmJpdG1hcCgp
LCBjb3B5QmVoYXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250
ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDEwODY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIzNyw3ICsyMzcsNyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmJlZ2luTGF5ZXJDbGlw
CiAKICAgICBjYW52YXMoKS0+Y2xpcFJlY3QoYm91bmRzKTsKIAotICAgIGlmIChpbWFnZUJ1ZmZl
ci0+c2l6ZSgpLmlzRW1wdHkoKSkKKyAgICBpZiAoaW1hZ2VCdWZmZXItPmRhdGFTaXplKCkuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBjYW52YXMoKS0+c2F2ZUxheWVyQWxwaGEo
JmJvdW5kcywgMjU1LApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAJKHJldmlzaW9uIDEwODY2
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVy
V2luQ0UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMSArODgsNiBAQCBJbWFnZUJ1ZmZlcjo6
fkltYWdlQnVmZmVyKCkKIHsKIH0KIAotc2l6ZV90IEltYWdlQnVmZmVyOjpkYXRhU2l6ZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpICogNDsK
LX0KLQogR3JhcGhpY3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCShyZXZpc2lvbiAxMDg2
NjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTIgKzQ4LDYgQEAgSW1hZ2VCdWZmZXI6On5JbWFn
ZUJ1ZmZlcigpCiB7CiB9CiAKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6ZGF0YVNpemUoKSBjb25zdAot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIEdyYXBoaWNzQ29u
dGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVk
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRo
ZW1lTWFjLm1tCShyZXZpc2lvbiAxMDg2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU4OSw3ICs1ODksNyBA
QCBib29sIFNjcm9sbGJhclRoZW1lTWFjOjpwYWludChTY3JvbGxiYXIqCiAgICAgICAgIEludFJl
Y3QgYnVmZmVyUmVjdChzY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKICAgICAgICAgYnVmZmVyUmVj
dC5pbnRlcnNlY3QoZGFtYWdlUmVjdCk7CiAgICAgICAgIAotICAgICAgICBPd25QdHI8SW1hZ2VC
dWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUo
KSk7CisgICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGJ1ZmZlclJlY3Quc2l6ZSgpLCAxKTsKICAgICAgICAgaWYgKCFpbWFnZUJ1ZmZl
cikKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAJKHJldmlzaW9uIDEwODY2MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyMiw3ICszMjIsOCBAQCB2b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVy
OjpwcmVwYXJlKCkKICAgICAvLyBzb3VyY2UgaW1hZ2Ugc2l6ZXMgc2V0LiBXZSBqdXN0IG5lZWQg
dG8gYXR0YWNoIHRoZSBncmFwaGljCiAgICAgLy8gYnVmZmVyIGlmIHdlIGhhdmUgbm90IHlldCBk
b25lIHNvLgogICAgIGlmICghbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkKSB7Ci0gICAgICAgIHNl
dFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZShtX3NvdXJjZURyYXdpbmdS
ZWdpb24ud2lkdGgoKSwgbV9zb3VyY2VEcmF3aW5nUmVnaW9uLmhlaWdodCgpKSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgcmVuZGVyaW5nTW9kZSgpKSk7CisgICAgICAgIEludFNpemUgbG9naWNhbFNp
emUobV9zb3VyY2VEcmF3aW5nUmVnaW9uLndpZHRoKCksIG1fc291cmNlRHJhd2luZ1JlZ2lvbi5o
ZWlnaHQoKSk7CisgICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVhdGUobG9n
aWNhbFNpemUsIDEsIENvbG9yU3BhY2VEZXZpY2VSR0IsIHJlbmRlcmluZ01vZGUoKSkpOwogICAg
ICAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgPSB0cnVlOwogICAgIH0KICAgICBtX3NvdXJj
ZUdyYXBoaWMtPmNsZWFyUmVzdWx0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAxMDg2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTk5MCw3ICs5OTAs
NyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFByb2dyZXNzQmFyKFJlCiAgICAgdHJhY2tJ
bmZvLnJlc2VydmVkID0gMDsKICAgICB0cmFja0luZm8uZmlsbGVyMSA9IDA7CiAKLSAgICBPd25Q
dHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbmZsYXRl
ZFJlY3Quc2l6ZSgpKTsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShpbmZsYXRlZFJlY3Quc2l6ZSgpLCAxKTsKICAgICBpZiAoIWltYWdl
QnVmZmVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwCShyZXZpc2lvbiAx
MDg2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9v
bHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIGJvb2wgU1ZHSW1hZ2VCdWZm
ZXJUb29sczo6Y3JlYXRlSW1hZ2VCdWYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSW50
U2l6ZSBjbGFtcGVkU2l6ZSA9IGNsYW1wZWRBYnNvbHV0ZVNpemUocGFpbnRSZWN0LnNpemUoKSk7
Ci0gICAgT3duUHRyPEltYWdlQnVmZmVyPiBpbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xh
bXBlZFNpemUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUpOworICAgIE93blB0cjxJbWFnZUJ1
ZmZlcj4gaW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCAxLCBjb2xvclNw
YWNlLCByZW5kZXJpbmdNb2RlKTsKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKQEAgLTg5LDcgKzg5LDcgQEAgYm9vbCBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjcmVhdGVJ
bWFnZUJ1ZgogICAgIGlmIChpbWFnZVNpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShpbWFnZVNpemUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUpOworICAgIE93blB0cjxJbWFn
ZUJ1ZmZlcj4gaW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlU2l6ZSwgMSwgY29sb3JT
cGFjZSwgcmVuZGVyaW5nTW9kZSk7CiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHJl
dmlzaW9uIDEwODY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNCw3ICszMDQsNyBAQCBOYXRpdmVJbWFnZVB0ciBTVkdJ
bWFnZTo6bmF0aXZlSW1hZ2VGb3JDCiAgICAgaWYgKCFtX2ZyYW1lQ2FjaGUpIHsKICAgICAgICAg
aWYgKCFtX3BhZ2UpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgT3duUHRyPEltYWdl
QnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSk7CisgICAgICAgIE93
blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIDEp
OwogICAgICAgICBpZiAoIWJ1ZmZlcikgLy8gZmFpbGVkIHRvIGFsbG9jYXRlIGltYWdlCiAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgZHJhdyhidWZmZXItPmNvbnRleHQoKSwgcmVjdCgp
LCByZWN0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcAkocmV2
aXNpb24gMTA4NjYwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2Fj
aGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgSW1hZ2UqIFNWR0ltYWdl
Q2FjaGU6Omxvb2t1cE9yQ3JlYXRlQml0bQogICAgIH0KIAogICAgIC8vIENyZWF0ZSBhbmQgY2Fj
aGUgbmV3IGltYWdlIGFuZCBpbWFnZSBidWZmZXIgYXQgcmVxdWVzdGVkIHNpemUuCi0gICAgT3du
UHRyPEltYWdlQnVmZmVyPiBuZXdCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUpOwor
ICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbmV3QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShz
aXplLCAxKTsKICAgICBpZiAoIW5ld0J1ZmZlcikKICAgICAgICAgcmV0dXJuIEltYWdlOjpudWxs
SW1hZ2UoKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128586</attachid>
            <date>2012-02-23 16:11:20 -0800</date>
            <delta_ts>2012-02-23 20:01:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79395-20120223161119.patch</filename>
            <type>text/plain</type>
            <size>42534</size>
            <attacher name="Matthew Delaney">mdelaney7</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODY3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTAyLTIzICBNYXR0aGV3
IERlbGFuZXkgIDxtZGVsYW5leUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIEltYWdlQnVmZmVy
IHN1cHBvcnQgZm9yIGhhdmluZyBhIGhpLXJlcyBiYWNraW5nIHN0b3JlLiBUaGlzIGFsbG93cwor
ICAgICAgICBJbWFnZUJ1ZmZlciBjbGllbnRzIHRvIHNwZWNpZnkgYSBzY2FsZSBmYWN0b3IgdXBv
biBjcmVhdGlvbiBzbyB0aGF0IHRoZXkKKyAgICAgICAgZG9uJ3QgaGF2ZSB0byBtYWludGFpbiB0
aGF0IGluZm8gdGhlbXNlbHZlcyBhcyB0aGV5IHVzZS9wYXNzIGFyb3VuZCB0aGUgSW1hZ2VCdWZm
ZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTM5
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cy4gVGhpcyBwYXRjaCBkb2Vzbid0IGNoYW5nZSBiZWhhdmlvci4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKTogVXNlIHRoZSBkZXZpY2Ugc2NhbGUgdG8gYWRqdXN0IHRoZSByZXNv
bHV0aW9uCisgICAgICAgIG9mIHRoZSBiYWNraW5nIHN0b3JlLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OmRldmljZVBpeGVsUmF0aW8pOiBBZGQgYSB3YXkgdG8gYWNjZXNzIGlmIHJh
dGlvLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmxvZ2ljYWxTaXplKTogRGlmZmVy
ZW50aWF0ZSBiZXR3ZWVuIHRoZSBsb2dpY2FsIHNpemUgYW5kIHRoZSB1bmRlcmx5aW5nIGRhdGEn
cyBzaXplLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRhdGFTaXplKTogRGlmZmVy
ZW50aWF0ZSBiZXR3ZWVuIHRoZSBsb2dpY2FsIHNpemUgYW5kIHRoZSB1bmRlcmx5aW5nIGRhdGEn
cyBzaXplLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5j
cHA6IEF2b2lkIGRpcmVjdCB1c2Ugb2YgbV9zaXplIHRvIHByZWZlciB0aGUgZXhwbGljaXQKKyAg
ICAgICAgYW5kIHRodXMgY2xlYXJlciB1c2Ugb2YgbG9naWNhbFNpemUgb3IgZGV2aWNlU2l6ZS4K
KworICAgICAgICBFeHBsaWNpdGx5IHN0YXRlIGEgMXggc2NhbGUgZm9yIGFsbCBJbWFnZUJ1ZmZl
ciBjcmVhdGlvbiBzaXRlcworICAgICAgICBzaW5jZSB0aGlzIGlzIHdoYXQgdGhleSBjdXJyZW50
bHkgYXNzdW1lLiBBZGRlZCBBU1NFUlRzIGZvciBjYWxsIHNpdGVzCisgICAgICAgIHRoYXQgdmVy
eSBjbGVhcmx5IGFyZSBhc3N1bWluZyBhIDE6MSByYXRpbyBvZiBiYWNraW5nIHN0b3JlIHRvIHNp
emUuCisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNw
cDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgICogcGxh
dGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tOgorICAgICAgICAqIHJlbmRlcmluZy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFj
Lm1tOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHSW1hZ2VCdWZmZXJUb29scy5jcHA6Cisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvU1ZHSW1hZ2VDYWNoZS5jcHA6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1BsYXRmb3JtQ29udGV4dFNraWEuY3BwOiBVc2UgZGF0YVNpemUoKQorCisgICAgICAgIFVwZGF0
ZSBJbWFnZUJ1ZmZlciBzaXplIHVzYWdlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuY3BwOgorCiAyMDEyLTAyLTIzICBFcmlrIEFydmlkc3NvbiAgPGFydkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIEludGVyZmFjZU5hbWUgaW4gdGhlIGJpbmRpbmdz
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNp
b24gMTA4NjYwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUxMyw3ICs1MTMsNyBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50
OjpjcmVhdGVJbWFnZUJ1ZmZlCiAgICAgICAgIFVuYWNjZWxlcmF0ZWQ7CiAjZW5kaWYKICAgICBE
ZWZlcnJhbE1vZGUgZGVmZXJyYWxNb2RlID0gc2hvdWxkRGVmZXIoKSA/IERlZmVycmVkIDogTm9u
RGVmZXJyZWQ7Ci0gICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoYnVmZmVy
U2l6ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgcmVuZGVyaW5nTW9kZSwgZGVmZXJyYWxNb2RlKTsK
KyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJTaXplLCAxLCBD
b2xvclNwYWNlRGV2aWNlUkdCLCByZW5kZXJpbmdNb2RlLCBkZWZlcnJhbE1vZGUpOwogICAgIGlm
ICghbV9pbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogICAgIG1faW1hZ2VCdWZmZXItPmNv
bnRleHQoKS0+c2NhbGUoRmxvYXRTaXplKGJ1ZmZlclNpemUud2lkdGgoKSAvIGxvZ2ljYWxTaXpl
LndpZHRoKCksIGJ1ZmZlclNpemUuaGVpZ2h0KCkgLyBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOwpA
QCAtNTIzLDcgKzUyMyw4IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVm
ZmUKIAogI2lmIFVTRShKU0MpCiAgICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3Nl
cnRpb25zT25seSk7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5nbG9iYWxEYXRhKCkt
PmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KG1faW1hZ2VCdWZmZXItPmRhdGFTaXplKCkpOwor
ICAgIHNpemVfdCBudW1CeXRlcyA9IDQgKiBtX2ltYWdlQnVmZmVyLT5kYXRhU2l6ZSgpLndpZHRo
KCkgKiBtX2ltYWdlQnVmZmVyLT5kYXRhU2l6ZSgpLmhlaWdodCgpOworICAgIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+Z2xvYmFsRGF0YSgpLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChu
dW1CeXRlcyk7CiAjZW5kaWYKIAogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RP
UkUpIHx8IChFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAxMDg2NjApCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTIxLDcgKzE1MjEsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBUPiBJbnRS
ZWN0IENhbnZhc1JlbmRlcmluCiBQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmNyZWF0ZUNvbXBvc2l0aW5nQnVmZmVyKGNvbnN0IEludFJlY3QmIGJ1ZmZl
clJlY3QpCiB7CiAgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJNb2RlID0gaXNBY2NlbGVyYXRlZCgp
ID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkOwotICAgIHJldHVybiBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGJ1ZmZlclJlY3Quc2l6ZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCByZW5kZXJNb2Rl
KTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgMSwg
Q29sb3JTcGFjZURldmljZVJHQiwgcmVuZGVyTW9kZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpjb21wb3NpdGVCdWZmZXIoSW1hZ2VCdWZmZXIqIGJ1ZmZlciwgY29uc3Qg
SW50UmVjdCYgYnVmZmVyUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCkBAIC0xODgzLDcgKzE4
ODMsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cHV0SW1hZ2VECiAgICAgSW50
U2l6ZSBkZXN0T2Zmc2V0KHN0YXRpY19jYXN0PGludD4oZHgpLCBzdGF0aWNfY2FzdDxpbnQ+KGR5
KSk7CiAgICAgSW50UmVjdCBkZXN0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpOwog
ICAgIGRlc3RSZWN0Lm1vdmUoZGVzdE9mZnNldCk7Ci0gICAgZGVzdFJlY3QuaW50ZXJzZWN0KElu
dFJlY3QoSW50UG9pbnQoKSwgYnVmZmVyLT5zaXplKCkpKTsKKyAgICBkZXN0UmVjdC5pbnRlcnNl
Y3QoSW50UmVjdChJbnRQb2ludCgpLCBidWZmZXItPmRhdGFTaXplKCkpKTsKICAgICBpZiAoZGVz
dFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgSW50UmVjdCBzb3VyY2VSZWN0
KGRlc3RSZWN0KTsKQEAgLTIwODksOSArMjA4OSw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpkcmF3VGV4dEkKICAgICAgICAgSW50UmVjdCBtYXNrUmVjdCA9IGVuY2xvc2luZ0lu
dFJlY3QodGV4dFJlY3QpOwogCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9S
RSkKLSAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBtYXNrSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKG1hc2tSZWN0LnNpemUoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgQWNjZWxlcmF0ZWQp
OworICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1hc2tJbWFnZSA9IEltYWdlQnVmZmVyOjpj
cmVhdGUobWFza1JlY3Quc2l6ZSgpLCAxLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBBY2NlbGVyYXRl
ZCk7CiAjZWxzZQotICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1hc2tJbWFnZSA9IEltYWdl
QnVmZmVyOjpjcmVhdGUobWFza1JlY3Quc2l6ZSgpKTsKKyAgICAgICAgT3duUHRyPEltYWdlQnVm
ZmVyPiBtYXNrSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1hc2tSZWN0LnNpemUoKSwgMSk7
CiAjZW5kaWYKIAogICAgICAgICBHcmFwaGljc0NvbnRleHQqIG1hc2tJbWFnZUNvbnRleHQgPSBt
YXNrSW1hZ2UtPmNvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMTA4NjYwKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTMxNSwxMyArNTMxNSwxMyBAQCBJbWFnZUJ1ZmZlciogV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpMUlVJCiAgICAgICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2J1ZmZlcnNb
aV0uZ2V0KCk7CiAgICAgICAgIGlmICghYnVmKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGlmIChidWYtPnNpemUoKSAhPSBzaXplKQorICAgICAgICBpZiAoYnVmLT5sb2dpY2FsU2l6ZSgp
ICE9IHNpemUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYnViYmxlVG9Gcm9udChp
KTsKICAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICB9CiAKLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+
IHRlbXAgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUpOworICAgIE93blB0cjxJbWFnZUJ1ZmZl
cj4gdGVtcCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgMSk7CiAgICAgaWYgKCF0ZW1wKQog
ICAgICAgICByZXR1cm4gMDsKICAgICBpID0gc3RkOjptaW4obV9jYXBhY2l0eSAtIDEsIGkpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDEwODY2MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg1LDcgKzEwODUsNyBAQCBE
cmFnSW1hZ2VSZWYgRnJhbWU6Om5vZGVJbWFnZShOb2RlKiBub2RlCiAgICAgTGF5b3V0UmVjdCB0
b3BMZXZlbFJlY3Q7CiAgICAgSW50UmVjdCBwYWludGluZ1JlY3QgPSBwaXhlbFNuYXBwZWRJbnRS
ZWN0KHJlbmRlcmVyLT5wYWludGluZ1Jvb3RSZWN0KHRvcExldmVsUmVjdCkpOwogCi0gICAgT3du
UHRyPEltYWdlQnVmZmVyPiBidWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShwYWludGluZ1JlY3Qu
c2l6ZSgpKSk7CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIoSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShwYWludGluZ1JlY3Quc2l6ZSgpLCAxLCBDb2xvclNwYWNlRGV2aWNlUkdCKSk7CiAgICAg
aWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiAwOwogICAgIGJ1ZmZlci0+Y29udGV4dCgpLT50
cmFuc2xhdGUoLXBhaW50aW5nUmVjdC54KCksIC1wYWludGluZ1JlY3QueSgpKTsKQEAgLTExMDgs
NyArMTEwOCw3IEBAIERyYWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0aW8KIAog
ICAgIEludFJlY3QgcGFpbnRpbmdSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChzZWxlY3Rpb24oKS0+
Ym91bmRzKCkpOwogCi0gICAgT3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIoSW1hZ2VCdWZmZXI6
OmNyZWF0ZShwYWludGluZ1JlY3Quc2l6ZSgpKSk7CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBi
dWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShwYWludGluZ1JlY3Quc2l6ZSgpLCAxLCBDb2xvclNw
YWNlRGV2aWNlUkdCKSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiAwOwogICAg
IGJ1ZmZlci0+Y29udGV4dCgpLT50cmFuc2xhdGUoLXBhaW50aW5nUmVjdC54KCksIC1wYWludGlu
Z1JlY3QueSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3Nz
ZmFkZUdlbmVyYXRlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAJKHJldmlzaW9uIDEwODY2
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRl
ZEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCB2b2lkIENyb3NzZmFk
ZUdlbmVyYXRlZEltYWdlOjpkcmF3KEdyYXBoCiAKIHZvaWQgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1h
Z2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3AsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCkKIHsKLSAgICBP
d25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX3Np
emUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIGNvbnRleHQtPmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkg
PyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQpOworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4g
aW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fc2l6ZSwgMSwgQ29sb3JTcGFjZURl
dmljZVJHQiwgY29udGV4dC0+aXNBY2NlbGVyYXRlZENvbnRleHQoKSA/IEFjY2VsZXJhdGVkIDog
VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDEwODY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Nyw3
ICs0ODcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlKiBpCiAgICAg
ICAgIGltYWdlLT5kcmF3KHRoaXMsIEZsb2F0UmVjdChkZXN0LmxvY2F0aW9uKCksIEZsb2F0U2l6
ZSh0dywgdGgpKSwgRmxvYXRSZWN0KHNyYy5sb2NhdGlvbigpLCBGbG9hdFNpemUodHN3LCB0c2gp
KSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
VGlsZWRJbWFnZShJbWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25z
dCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRQb2ludCYgc3JjUG9pbnQsIGNvbnN0IEludFNpemUm
IHRpbGVTaXplLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UqIGltYWdlLCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIGNvbnN0IElu
dFBvaW50JiBzcmNQb2ludCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpIHx8ICFpbWFnZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDk1LDEwICs0OTUsMTAgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYQogICAgIGlmICh1c2VMb3dR
dWFsaXR5U2NhbGUpIHsKICAgICAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgcHJldmlvdXNJbnRl
cnBvbGF0aW9uUXVhbGl0eSA9IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKTsKICAgICAgICAg
c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uTG93KTsKLSAgICAgICAg
aW1hZ2UtPmRyYXdUaWxlZCh0aGlzLCByZWN0LCBzcmNQb2ludCwgdGlsZVNpemUsIHN0eWxlQ29s
b3JTcGFjZSwgb3ApOworICAgICAgICBpbWFnZS0+ZHJhd1RpbGVkKHRoaXMsIGRlc3RSZWN0LCBz
cmNQb2ludCwgdGlsZVNpemUsIHN0eWxlQ29sb3JTcGFjZSwgb3ApOwogICAgICAgICBzZXRJbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5KHByZXZpb3VzSW50ZXJwb2xhdGlvblF1YWxpdHkpOwogICAg
IH0gZWxzZQotICAgICAgICBpbWFnZS0+ZHJhd1RpbGVkKHRoaXMsIHJlY3QsIHNyY1BvaW50LCB0
aWxlU2l6ZSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CisgICAgICAgIGltYWdlLT5kcmF3VGlsZWQo
dGhpcywgZGVzdFJlY3QsIHNyY1BvaW50LCB0aWxlU2l6ZSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSogaW1hZ2Us
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0LCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LApAQCAtNTUzLDE0ICs1NTMsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbQogICAgIGZsb2F0IHRoID0gZGVzdC5oZWlnaHQoKTsKIAog
ICAgIGlmICh0c3cgPT0gLTEpCi0gICAgICAgIHRzdyA9IGltYWdlLT53aWR0aCgpOworICAgICAg
ICB0c3cgPSBpbWFnZS0+bG9naWNhbFNpemUoKS53aWR0aCgpOwogICAgIGlmICh0c2ggPT0gLTEp
Ci0gICAgICAgIHRzaCA9IGltYWdlLT5oZWlnaHQoKTsKKyAgICAgICAgdHNoID0gaW1hZ2UtPmxv
Z2ljYWxTaXplKCkuaGVpZ2h0KCk7CiAKICAgICBpZiAodHcgPT0gLTEpCi0gICAgICAgIHR3ID0g
aW1hZ2UtPndpZHRoKCk7CisgICAgICAgIHR3ID0gaW1hZ2UtPmxvZ2ljYWxTaXplKCkud2lkdGgo
KTsKICAgICBpZiAodGggPT0gLTEpCi0gICAgICAgIHRoID0gaW1hZ2UtPmhlaWdodCgpOworICAg
ICAgICB0aCA9IGltYWdlLT5sb2dpY2FsU2l6ZSgpLmhlaWdodCgpOwogCiAgICAgaWYgKHVzZUxv
d1F1YWxpdHlTY2FsZSkgewogICAgICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBwcmV2aW91c0lu
dGVycG9sYXRpb25RdWFsaXR5ID0gaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpOwpAQCAtNzU0
LDcgKzc1NCw3IEBAIFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IEdyYXBoaWNzQ29udGV4dDoKICAg
ICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKCk7CiAgICAgSW50U2l6ZSBzY2Fs
ZWRTaXplKHN0YXRpY19jYXN0PGludD4oY2VpbChzaXplLndpZHRoKCkgKiB0cmFuc2Zvcm0ueFNj
YWxlKCkpKSwgc3RhdGljX2Nhc3Q8aW50PihjZWlsKHNpemUuaGVpZ2h0KCkgKiB0cmFuc2Zvcm0u
eVNjYWxlKCkpKSk7CiAKLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoc2NhbGVkU2l6ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgaXNBY2NlbGVyYXRl
ZENvbnRleHQoKSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZCk7CisgICAgT3duUHRyPElt
YWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNjYWxlZFNpemUsIDEsIENv
bG9yU3BhY2VEZXZpY2VSR0IsIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBBY2NlbGVyYXRlZCA6
IFVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmNwcAkocmV2aXNpb24gMTA4NjYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBA
IHZvaWQgSW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ28KIAogaW5saW5lIHZvaWQg
SW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKIHsKLSAgICBJbnRS
ZWN0IGx1bWluYW5jZVJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKTsKKyAgICBJbnRSZWN0IGx1bWlu
YW5jZVJlY3QoSW50UG9pbnQoKSwgZGF0YVNpemUoKSk7CiAgICAgUmVmUHRyPEJ5dGVBcnJheT4g
c3JjUGl4ZWxBcnJheSA9IGdldFVubXVsdGlwbGllZEltYWdlRGF0YShsdW1pbmFuY2VSZWN0KTsK
ICAgICAKICAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gc3JjUGl4ZWxBcnJheS0+bGVu
Z3RoKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmgJKHJldmlzaW9uIDEwODY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNp
bmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNl
bmRpZgpAQCAtNDYsNyArNDcsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFz
cyBHcmFwaGljc0NvbnRleHQ7CiAgICAgY2xhc3MgSW1hZ2U7CiAgICAgY2xhc3MgSW1hZ2VEYXRh
OwogICAgIGNsYXNzIEludFBvaW50OwpAQCAtNzcsMjMgKzc3LDMyIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXIpOyBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CiAgICAgICAgIC8vIFdpbGwgcmV0dXJuIGEg
bnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KLSAgICAgICAgc3RhdGljIFBhc3NP
d25QdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlRGV2aWNlUkdCLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUgPSBVbmFjY2VsZXJhdGVkLCBEZWZlcnJhbE1vZGUgZGVmZXJyYWxNb2RlID0gTm9uRGVm
ZXJyZWQpCisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29u
c3QgSW50U2l6ZSYgc2l6ZSwgZmxvYXQgZGV2aWNlUGl4ZWxSYXRpbyA9IDEsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSA9IENvbG9yU3BhY2VEZXZpY2VSR0IsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSA9IFVuYWNjZWxlcmF0ZWQsIERlZmVycmFsTW9kZSBkZWZlcnJhbE1vZGUgPSBOb25EZWZl
cnJlZCkKICAgICAgICAgewogICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAg
ICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZiA9IGFkb3B0UHRyKG5ldyBJbWFnZUJ1ZmZl
cihzaXplLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBkZWZlcnJhbE1vZGUsIHN1Y2Nlc3Mp
KTsKLSAgICAgICAgICAgIGlmIChzdWNjZXNzKQotICAgICAgICAgICAgICAgIHJldHVybiBidWYu
cmVsZWFzZSgpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBJbnRT
aXplIGRhdGFTaXplID0gc2l6ZTsKKyAgICAgICAgICAgIGRhdGFTaXplLnNjYWxlKGRldmljZVBp
eGVsUmF0aW8pOworCisgICAgICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZiA9IGFkb3B0
UHRyKG5ldyBJbWFnZUJ1ZmZlcihkYXRhU2l6ZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwg
ZGVmZXJyYWxNb2RlLCBzdWNjZXNzKSk7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgICAgIGJ1Zi0+Y29udGV4dCgp
LT5zY2FsZShGbG9hdFNpemUoZGV2aWNlUGl4ZWxSYXRpbywgZGV2aWNlUGl4ZWxSYXRpbykpOwor
ICAgICAgICAgICAgYnVmLT5tX2RldmljZVBpeGVsUmF0aW8gPSBkZXZpY2VQaXhlbFJhdGlvOwor
ICAgICAgICAgICAgcmV0dXJuIGJ1Zi5yZWxlYXNlKCk7CiAgICAgICAgIH0KIAogICAgICAgICB+
SW1hZ2VCdWZmZXIoKTsKIAotICAgICAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaXplOyB9Ci0gICAgICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZS53aWR0aCgpOyB9Ci0gICAgICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUu
aGVpZ2h0KCk7IH0KLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBkYXRhU2l6ZSgpIGNvbnN0Owot
ICAgICAgICAKKyAgICAgICAgZmxvYXQgZGV2aWNlUGl4ZWxSYXRpbygpIGNvbnN0IHsgcmV0dXJu
IG1fZGV2aWNlUGl4ZWxSYXRpbzsgfQorICAgICAgICBjb25zdCBJbnRTaXplJiBkYXRhU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgICAgICBjb25zdCBJbnRTaXplIGxvZ2ljYWxT
aXplKCkgY29uc3QKKyAgICAgICAgeyAKKyAgICAgICAgICAgIEludFNpemUgbG9naWNhbFNpemUg
PSBkYXRhU2l6ZSgpOworICAgICAgICAgICAgbG9naWNhbFNpemUuc2NhbGUoMSAvIGRldmljZVBp
eGVsUmF0aW8oKSk7CisgICAgICAgICAgICByZXR1cm4gbG9naWNhbFNpemU7CisgICAgICAgIH0K
KwogICAgICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQoKSBjb25zdDsKIAogICAgICAgICBQ
YXNzUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5n
U3RvcmUpIGNvbnN0OwpAQCAtMTExLDcgKzEyMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwg
Q29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKTsKICAgICAgICAgdm9pZCBwbGF0Zm9ybVRyYW5zZm9y
bUNvbG9yU3BhY2UoY29uc3QgVmVjdG9yPGludD4mKTsKICNlbHNlCi0gICAgICAgIEFmZmluZVRy
YW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKDEs
IDAsIDAsIC0xLCAwLCBtX3NpemUuaGVpZ2h0KCkpOyB9CisgICAgICAgIEFmZmluZVRyYW5zZm9y
bSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKDEsIDAsIDAs
IC0xLCAwLCBkYXRhU2l6ZSgpLmhlaWdodCgpKTsgfQogI2VuZGlmCiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQogICAgICAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkg
Y29uc3Q7CkBAIC0xMzYsNyArMTQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgSW1hZ2VCdWZmZXJEYXRhIG1fZGF0YTsKLQorICAgICAgICBmbG9hdCBt
X2RldmljZVBpeGVsUmF0aW87CiAgICAgICAgIEludFNpemUgbV9zaXplOwogICAgICAgICBPd25Q
dHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7CiAKQEAgLTE0OCw2ICsxNTcsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFRoaXMgY29uc3RydWN0b3Igd2lsbCBwbGFjZSBp
dHMgc3VjY2VzcyBpbnRvIHRoZSBnaXZlbiBvdXQtdmFyaWFibGUKICAgICAgICAgLy8gc28gdGhh
dCBjcmVhdGUoKSBrbm93cyB3aGVuIGl0IHNob3VsZCByZXR1cm4gZmFpbHVyZS4KICAgICAgICAg
SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUsIERl
ZmVycmFsTW9kZSwgYm9vbCYgc3VjY2Vzcyk7CisgICAgICAgIAogICAgIH07CiAKICNpZiBVU0Uo
Q0cpIHx8IFVTRShTS0lBKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U2hhZG93Qmx1ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2hhZG93Qmx1ci5jcHAJKHJldmlzaW9uIDEwODY2MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Mywx
NCArNzMsMTQgQEAgcHVibGljOgogICAgICAgICBtX2J1ZmZlckluVXNlID0gdHJ1ZTsKICNlbmRp
ZgogICAgICAgICAvLyBXZSBkbyBub3QgbmVlZCB0byByZWNyZWF0ZSB0aGUgYnVmZmVyIGlmIHRo
ZSBjdXJyZW50IGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2guCi0gICAgICAgIGlmIChtX2ltYWdlQnVm
ZmVyICYmIG1faW1hZ2VCdWZmZXItPndpZHRoKCkgPj0gc2l6ZS53aWR0aCgpICYmIG1faW1hZ2VC
dWZmZXItPmhlaWdodCgpID49IHNpemUuaGVpZ2h0KCkpCisgICAgICAgIGlmIChtX2ltYWdlQnVm
ZmVyICYmIG1faW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkud2lkdGgoKSA+PSBzaXplLndpZHRo
KCkgJiYgbV9pbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKS5oZWlnaHQoKSA+PSBzaXplLmhlaWdo
dCgpKQogICAgICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CiAKICAgICAgICAg
Ly8gUm91bmQgdG8gdGhlIG5lYXJlc3QgMzIgcGl4ZWxzIHNvIHdlIGRvIG5vdCBncm93IHRoZSBi
dWZmZXIgZm9yIHNpbWlsYXIgc2l6ZWQgcmVxdWVzdHMuCiAgICAgICAgIEludFNpemUgcm91bmRl
ZFNpemUocm91bmRVcFRvTXVsdGlwbGVPZjMyKHNpemUud2lkdGgoKSksIHJvdW5kVXBUb011bHRp
cGxlT2YzMihzaXplLmhlaWdodCgpKSk7CiAKICAgICAgICAgY2xlYXJTY3JhdGNoQnVmZmVyKCk7
Ci0gICAgICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJvdW5kZWRTaXpl
KTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocm91bmRlZFNp
emUsIDEpOwogICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKICAgICB9CiAKQEAg
LTQ0MCw3ICs0NDAsOCBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdTaGFkb3dCdWZmZXIoR3JhcGhp
CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmdyYXBoaWNzQ29u
dGV4dCk7CiAKLSAgICBJbnRTaXplIGJ1ZmZlclNpemUgPSBtX2xheWVySW1hZ2UtPnNpemUoKTsK
KyAgICBBU1NFUlQobV9sYXllckltYWdlLT5kZXZpY2VQaXhlbFJhdGlvKCkgPT0gMSk7IC8vIFRo
ZSBjb21wdXRhdGlvbnMgYmVsb3cgbWFrZSB0aGlzIGFzc3VtcHRpb24KKyAgICBJbnRTaXplIGJ1
ZmZlclNpemUgPSBtX2xheWVySW1hZ2UtPmRhdGFTaXplKCk7CiAgICAgaWYgKGJ1ZmZlclNpemUg
IT0gbV9sYXllclNpemUpIHsKICAgICAgICAgLy8gVGhlIHJlY3QgcGFzc2VkIHRvIGNsaXBUb0lt
YWdlQnVmZmVyKCkgaGFzIHRvIGJlIHRoZSBzaXplIG9mIHRoZSBlbnRpcmUgYnVmZmVyLAogICAg
ICAgICAvLyBidXQgd2UgbWF5IG5vdCBoYXZlIGNsZWFyZWQgaXQgYWxsLCBzbyBjbGlwIHRvIHRo
ZSBmaWxsZWQgcGFydCBmaXJzdC4KQEAgLTgyNiw2ICs4MjcsNyBAQCB2b2lkIFNoYWRvd0JsdXI6
OmJsdXJTaGFkb3dCdWZmZXIoY29uc3QgCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFJlY3Qg
Ymx1clJlY3QoSW50UG9pbnQoKSwgdGVtcGxhdGVTaXplKTsKKyAgICBBU1NFUlQobV9sYXllcklt
YWdlLT5kZXZpY2VQaXhlbFJhdGlvKCkgPT0gMSk7IC8vIFRoZSBjb21wdXRhdGlvbnMgYmVsb3cg
bWFrZSB0aGlzIGFzc3VtcHRpb24KICAgICBSZWZQdHI8Qnl0ZUFycmF5PiBsYXllckRhdGEgPSBt
X2xheWVySW1hZ2UtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShibHVyUmVjdCk7CiAgICAgYmx1
ckxheWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCksIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qu
d2lkdGgoKSAqIDQpOwogICAgIG1fbGF5ZXJJbWFnZS0+cHV0Qnl0ZUFycmF5KFVubXVsdGlwbGll
ZCwgbGF5ZXJEYXRhLmdldCgpLCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0LCBJbnRQb2ludCgp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCShyZXZpc2lvbiAxMDg2NjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzYsMTEgKzc2LDYgQEAgSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZl
cigpCiAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KG1fZGF0YS5tX3N1cmZhY2UpOwogfQogCi1z
aXplX3QgSW1hZ2VCdWZmZXI6OmRhdGFTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zaXpl
LndpZHRoKCkgKiBtX3NpemUuaGVpZ2h0KCkgKiA0OwotfQotCiBHcmFwaGljc0NvbnRleHQqIElt
YWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
Ry5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDRy5jcHAJKHJldmlzaW9uIDEwODY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDgsMjUgKzEwOCwyNSBAQCBzdGF0aWMgdm9pZCByZWxlYXNlSW1hZ2VEYXRhKHZvaWQqLCBjb25z
CiB9CiAKIEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBDb2xv
clNwYWNlIGltYWdlQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBEZWZl
cnJhbE1vZGUsIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBtX2RhdGEoc2l6ZSkKKyAgICA6IG1fZGF0
YShzaXplKSAvLyBOT1RFOiBUaGUgaW5wdXQgaGVyZSBpc24ndCBpbXBvcnRhbnQgYXMgSW1hZ2VC
dWZmZXJEYXRhQ0cncyBjb25zdHJ1Y3RvciBqdXN0IGlnbm9yZXMgaXQuCiAgICAgLCBtX3NpemUo
c2l6ZSkKIHsKICAgICBzdWNjZXNzID0gZmFsc2U7ICAvLyBNYWtlIGVhcmx5IHJldHVybiBtZWFu
IGZhaWx1cmUuCiAgICAgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nID0gcmVuZGVyaW5nTW9kZSA9
PSBBY2NlbGVyYXRlZDsKLSAgICBpZiAoc2l6ZS53aWR0aCgpIDw9IDAgfHwgc2l6ZS5oZWlnaHQo
KSA8PSAwKQorICAgIGlmIChkYXRhU2l6ZSgpLndpZHRoKCkgPD0gMCB8fCBkYXRhU2l6ZSgpLmhl
aWdodCgpIDw9IDApCiAgICAgICAgIHJldHVybjsKIAotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRP
dmVyZmxvdz4gd2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92
ZXJmbG93PiBoZWlnaHQgPSBzaXplLmhlaWdodCgpOworICAgIENoZWNrZWQ8aW50LCBSZWNvcmRP
dmVyZmxvdz4gZGF0YVdpZHRoID0gZGF0YVNpemUoKS53aWR0aCgpOworICAgIENoZWNrZWQ8aW50
LCBSZWNvcmRPdmVyZmxvdz4gZGF0YUhlaWdodCA9IGRhdGFTaXplKCkuaGVpZ2h0KCk7CiAKICAg
ICAvLyBQcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzCi0gICAgbV9kYXRhLm1fYnl0ZXNQZXJSb3cg
PSA0ICogd2lkdGg7Ci0gICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBkYXRhU2l6
ZSA9IGhlaWdodCAqIG1fZGF0YS5tX2J5dGVzUGVyUm93OwotICAgIGlmIChkYXRhU2l6ZS5oYXNP
dmVyZmxvd2VkKCkpCisgICAgbV9kYXRhLm1fYnl0ZXNQZXJSb3cgPSA0ICogZGF0YVdpZHRoOwor
ICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBkYXRhSGVpZ2h0
ICogbV9kYXRhLm1fYnl0ZXNQZXJSb3c7CisgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQo
KSkKICAgICAgICAgcmV0dXJuOwogCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19T
VE9SRSkKLSAgICBpZiAod2lkdGgudW5zYWZlR2V0KCkgPj0gbWF4SU9TdXJmYWNlRGltZW5zaW9u
IHx8IGhlaWdodC51bnNhZmVHZXQoKSA+PSBtYXhJT1N1cmZhY2VEaW1lbnNpb24gfHwgKHdpZHRo
ICogaGVpZ2h0KS51bnNhZmVHZXQoKSA8IG1pbklPU3VyZmFjZUFyZWEpCisgICAgaWYgKGRhdGFX
aWR0aC51bnNhZmVHZXQoKSA+PSBtYXhJT1N1cmZhY2VEaW1lbnNpb24gfHwgZGF0YUhlaWdodC51
bnNhZmVHZXQoKSA+PSBtYXhJT1N1cmZhY2VEaW1lbnNpb24gfHwgKGRhdGFXaWR0aCAqIGRhdGFI
ZWlnaHQpLnVuc2FmZUdldCgpIDwgbWluSU9TdXJmYWNlQXJlYSkKICAgICAgICAgYWNjZWxlcmF0
ZVJlbmRlcmluZyA9IGZhbHNlOwogI2Vsc2UKICAgICBBU1NFUlQocmVuZGVyaW5nTW9kZSA9PSBV
bmFjY2VsZXJhdGVkKTsKQEAgLTE0NywyMiArMTQ3LDIyIEBAIEltYWdlQnVmZmVyOjpJbWFnZUJ1
ZmZlcihjb25zdCBJbnRTaXplJiAKICAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjZ0NvbnRl
eHQ7CiAgICAgaWYgKGFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKICNpZiBVU0UoSU9TVVJGQUNFX0NB
TlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAgICBtX2RhdGEubV9zdXJmYWNlID0gY3JlYXRlSU9T
dXJmYWNlKHNpemUpOwotICAgICAgICBjZ0NvbnRleHQuYWRvcHRDRih3a0lPU3VyZmFjZUNvbnRl
eHRDcmVhdGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgd2lkdGgudW5zYWZlR2V0KCksIGhlaWdo
dC51bnNhZmVHZXQoKSwgbV9kYXRhLm1fY29sb3JTcGFjZSkpOworICAgICAgICBtX2RhdGEubV9z
dXJmYWNlID0gY3JlYXRlSU9TdXJmYWNlKGRhdGFTaXplKCkpOworICAgICAgICBjZ0NvbnRleHQu
YWRvcHRDRih3a0lPU3VyZmFjZUNvbnRleHRDcmVhdGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwg
ZGF0YVdpZHRoLnVuc2FmZUdldCgpLCBkYXRhSGVpZ2h0LnVuc2FmZUdldCgpLCBtX2RhdGEubV9j
b2xvclNwYWNlKSk7CiAjZW5kaWYKICAgICAgICAgaWYgKCFjZ0NvbnRleHQpCiAgICAgICAgICAg
ICBhY2NlbGVyYXRlUmVuZGVyaW5nID0gZmFsc2U7IC8vIElmIGFsbG9jYXRpb24gZmFpbHMsIGZh
bGwgYmFjayB0byBub24tYWNjZWxlcmF0ZWQgcGF0aC4KICAgICB9CiAKICAgICBpZiAoIWFjY2Vs
ZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgaWYgKCF0cnlGYXN0Q2FsbG9jKGhlaWdodC51bnNh
ZmVHZXQoKSwgbV9kYXRhLm1fYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCkpLmdldFZhbHVlKG1fZGF0
YS5tX2RhdGEpKQorICAgICAgICBpZiAoIXRyeUZhc3RDYWxsb2MoZGF0YUhlaWdodC51bnNhZmVH
ZXQoKSwgbV9kYXRhLm1fYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCkpLmdldFZhbHVlKG1fZGF0YS5t
X2RhdGEpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBBU1NFUlQoIShyZWludGVycHJl
dF9jYXN0PHNpemVfdD4obV9kYXRhLm1fZGF0YSkgJiAyKSk7CiAKICAgICAgICAgbV9kYXRhLm1f
Yml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsKLSAgICAgICAgY2dD
b250ZXh0LmFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1fZGF0YS5tX2RhdGEsIHdpZHRo
LnVuc2FmZUdldCgpLCBoZWlnaHQudW5zYWZlR2V0KCksIDgsIG1fZGF0YS5tX2J5dGVzUGVyUm93
LnVuc2FmZUdldCgpLCBtX2RhdGEubV9jb2xvclNwYWNlLCBtX2RhdGEubV9iaXRtYXBJbmZvKSk7
CisgICAgICAgIGNnQ29udGV4dC5hZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShtX2RhdGEu
bV9kYXRhLCBkYXRhV2lkdGgudW5zYWZlR2V0KCksIGRhdGFIZWlnaHQudW5zYWZlR2V0KCksIDgs
IG1fZGF0YS5tX2J5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBtX2RhdGEubV9jb2xvclNwYWNlLCBt
X2RhdGEubV9iaXRtYXBJbmZvKSk7CiAgICAgICAgIC8vIENyZWF0ZSBhIGxpdmUgaW1hZ2UgdGhh
dCB3cmFwcyB0aGUgZGF0YS4KLSAgICAgICAgbV9kYXRhLm1fZGF0YVByb3ZpZGVyLmFkb3B0Q0Yo
Q0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBtX2RhdGEubV9kYXRhLCBkYXRhU2l6ZS51
bnNhZmVHZXQoKSwgcmVsZWFzZUltYWdlRGF0YSkpOworICAgICAgICBtX2RhdGEubV9kYXRhUHJv
dmlkZXIuYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIG1fZGF0YS5tX2Rh
dGEsIG51bUJ5dGVzLnVuc2FmZUdldCgpLCByZWxlYXNlSW1hZ2VEYXRhKSk7CiAgICAgfQogCiAg
ICAgaWYgKCFjZ0NvbnRleHQpCkBAIC0xNzAsNyArMTcwLDcgQEAgSW1hZ2VCdWZmZXI6OkltYWdl
QnVmZmVyKGNvbnN0IEludFNpemUmIAogCiAgICAgbV9jb250ZXh0ID0gYWRvcHRQdHIobmV3IEdy
YXBoaWNzQ29udGV4dChjZ0NvbnRleHQuZ2V0KCkpKTsKICAgICBtX2NvbnRleHQtPnNjYWxlKEZs
b2F0U2l6ZSgxLCAtMSkpOwotICAgIG1fY29udGV4dC0+dHJhbnNsYXRlKDAsIC1oZWlnaHQudW5z
YWZlR2V0KCkpOworICAgIG1fY29udGV4dC0+dHJhbnNsYXRlKDAsIC1kYXRhSGVpZ2h0LnVuc2Fm
ZUdldCgpKTsKICAgICBtX2NvbnRleHQtPnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGFjY2VsZXJh
dGVSZW5kZXJpbmcpOwogI2lmIGRlZmluZWQoQlVJTERJTkdfT05fTElPTikKICAgICBtX2RhdGEu
bV9sYXN0Rmx1c2hUaW1lID0gY3VycmVudFRpbWVNUygpOwpAQCAtMTgyLDExICsxODIsNiBAQCBJ
bWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkKIHsKIH0KIAotc2l6ZV90IEltYWdlQnVmZmVyOjpk
YXRhU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKSAqIG1fZGF0YS5t
X2J5dGVzUGVyUm93LnVuc2FmZUdldCgpOwotfQotCiBHcmFwaGljc0NvbnRleHQqIEltYWdlQnVm
ZmVyOjpjb250ZXh0KCkgY29uc3QKIHsKICNpZiBkZWZpbmVkKEJVSUxESU5HX09OX0xJT04pCkBA
IC0yMjIsNyArMjE3LDcgQEAgTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXI6OmNvcHlOYXRpdmVJ
bQogICAgIGlmICghbV9jb250ZXh0LT5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7CiAgICAgICAg
IHN3aXRjaCAoY29weUJlaGF2aW9yKSB7CiAgICAgICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3Rv
cmU6Ci0gICAgICAgICAgICBpbWFnZSA9IENHSW1hZ2VDcmVhdGUobV9zaXplLndpZHRoKCksIG1f
c2l6ZS5oZWlnaHQoKSwgOCwgMzIsIG1fZGF0YS5tX2J5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBt
X2RhdGEubV9jb2xvclNwYWNlLCBtX2RhdGEubV9iaXRtYXBJbmZvLCBtX2RhdGEubV9kYXRhUHJv
dmlkZXIuZ2V0KCksIDAsIHRydWUsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpOworICAgICAg
ICAgICAgaW1hZ2UgPSBDR0ltYWdlQ3JlYXRlKGRhdGFTaXplKCkud2lkdGgoKSwgZGF0YVNpemUo
KS5oZWlnaHQoKSwgOCwgMzIsIG1fZGF0YS5tX2J5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBtX2Rh
dGEubV9jb2xvclNwYWNlLCBtX2RhdGEubV9iaXRtYXBJbmZvLCBtX2RhdGEubV9kYXRhUHJvdmlk
ZXIuZ2V0KCksIDAsIHRydWUsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ29weUJhY2tpbmdTdG9yZToKICAgICAgICAgICAgIGlt
YWdlID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRl
eHQoKSk7CkBAIC0yNTUsMjggKzI1MCwzNCBAQCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCogCiAgICAgZWxzZQogICAgICAgICBpbWFnZS5hZG9wdENGKGNvcHlOYXRpdmVJ
bWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpOwogCi0gICAgZGVzdENvbnRleHQtPmRyYXdOYXRp
dmVJbWFnZShpbWFnZS5nZXQoKSwgbV9zaXplLCBjb2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3ApOworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFk
anVzdGVkU3JjUmVjdC5zY2FsZShtX2RldmljZVBpeGVsUmF0aW8pOworICAgIGRlc3RDb250ZXh0
LT5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIGRhdGFTaXplKCksIGNvbG9yU3BhY2UsIGRl
c3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wKTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJh
d1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7CisgICAgRmxvYXRSZWN0IGFk
anVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fZGV2
aWNlUGl4ZWxSYXRpbyk7CisKICAgICBpZiAoIW1fY29udGV4dC0+aXNBY2NlbGVyYXRlZENvbnRl
eHQoKSkgewogICAgICAgICBpZiAoZGVzdENvbnRleHQgPT0gbV9jb250ZXh0IHx8IGRlc3RDb250
ZXh0LT5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8SW1hZ2U+
IGNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7IC8vIERyYXdpbmcgaW50byBvdXIg
b3duIGJ1ZmZlciwgbmVlZCB0byBkZWVwIGNvcHkuCi0gICAgICAgICAgICBjb3B5LT5kcmF3UGF0
dGVybihkZXN0Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxl
Q29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKKyAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJu
KGRlc3RDb250ZXh0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBz
dHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVyaW5nID0gY29weUltYWdlKERvbnRDb3B5
QmFja2luZ1N0b3JlKTsKLSAgICAgICAgICAgIGltYWdlRm9yUmVuZGVyaW5nLT5kcmF3UGF0dGVy
bihkZXN0Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29s
b3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKKyAgICAgICAgICAgIGltYWdlRm9yUmVuZGVyaW5nLT5k
cmF3UGF0dGVybihkZXN0Q29udGV4dCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3Jt
LCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOwogICAgICAgICB9CiAgICAg
fSBlbHNlIHsKICAgICAgICAgUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNr
aW5nU3RvcmUpOwotICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgc3JjUmVj
dCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0
KTsKKyAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGFkanVzdGVkU3JjUmVj
dCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0
KTsKICAgICB9CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0VG9DbGlwLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgQ0dDb250
ZXh0UmVmIHBsYXRmb3JtQ29udGV4dFRvQ2xpcCA9IGNvbnRleHRUb0NsaXAtPnBsYXRmb3JtQ29u
dGV4dCgpOworICAgIC8vIEZJWE1FOiBUaGlzIGltYWdlIG5lZWRzIHRvIGJlIGdyYXlzY2FsZSB0
byBiZSB1c2VkIGFzIGFuIGFscGhhIG1hc2sgaGVyZS4KICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4gaW1hZ2UoQWRvcHRDRiwgY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSk7
CiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dFRvQ2xpcCwgcmVjdC54
KCksIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0ocGxh
dGZvcm1Db250ZXh0VG9DbGlwLCAxLCAtMSk7CkBAIC0yOTMsNyArMjk0LDcgQEAgUGFzc1JlZlB0
cjxCeXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbgogICAgICAgICBtX2RhdGEubV9sYXN0Rmx1
c2hUaW1lID0gY3VycmVudFRpbWVNUygpOwogI2VuZGlmCiAgICAgfQotICAgIHJldHVybiBtX2Rh
dGEuZ2V0RGF0YShyZWN0LCBtX3NpemUsIG1fY29udGV4dC0+aXNBY2NlbGVyYXRlZENvbnRleHQo
KSwgdHJ1ZSk7CisgICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKHJlY3QsIGRhdGFTaXplKCksIG1f
Y29udGV4dC0+aXNBY2NlbGVyYXRlZENvbnRleHQoKSwgdHJ1ZSk7CiB9CiAKIFBhc3NSZWZQdHI8
Qnl0ZUFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJ
bnRSZWN0JiByZWN0KSBjb25zdApAQCAtMzA0LDIzICszMDUsMjQgQEAgUGFzc1JlZlB0cjxCeXRl
QXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQcgogICAgICAgICBtX2RhdGEubV9sYXN0Rmx1c2hUaW1l
ID0gY3VycmVudFRpbWVNUygpOwogI2VuZGlmCiAgICAgfQotICAgIHJldHVybiBtX2RhdGEuZ2V0
RGF0YShyZWN0LCBtX3NpemUsIG1fY29udGV4dC0+aXNBY2NlbGVyYXRlZENvbnRleHQoKSwgZmFs
c2UpOworICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShyZWN0LCBkYXRhU2l6ZSgpLCBtX2NvbnRl
eHQtPmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIGZhbHNlKTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZl
cjo6cHV0Qnl0ZUFycmF5KE11bHRpcGx5IG11bHRpcGxpZWQsIEJ5dGVBcnJheSogc291cmNlLCBj
b25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50KQogewogICAgIGlmICghbV9jb250ZXh0LT5pc0FjY2VsZXJh
dGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIG1fZGF0YS5wdXREYXRhKHNvdXJjZSwgc291cmNlU2l6
ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX3NpemUsIG1fY29udGV4dC0+aXNBY2NlbGVyYXRl
ZENvbnRleHQoKSwgbXVsdGlwbGllZCA9PSBVbm11bHRpcGxpZWQpOworICAgICAgICBtX2RhdGEu
cHV0RGF0YShzb3VyY2UsIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwgZGF0YVNp
emUoKSwgbV9jb250ZXh0LT5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCBtdWx0aXBsaWVkID09IFVu
bXVsdGlwbGllZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICNpZiBVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKQogICAgIC8vIE1ha2UgYSBjb3B5IG9mIHRoZSBzb3VyY2Ug
dG8gZW5zdXJlIHRoZSBiaXRzIGRvbid0IGNoYW5nZSBiZWZvcmUgYmVpbmcgZHJhd24KICAgICBJ
bnRTaXplIHNvdXJjZUNvcHlTaXplKHNvdXJjZVJlY3Qud2lkdGgoKSwgc291cmNlUmVjdC5oZWln
aHQoKSk7Ci0gICAgT3duUHRyPEltYWdlQnVmZmVyPiBzb3VyY2VDb3B5ID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShzb3VyY2VDb3B5U2l6ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgVW5hY2NlbGVyYXRl
ZCk7CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBzb3VyY2VDb3B5ID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzb3VyY2VDb3B5U2l6ZSwgMSwgQ29sb3JTcGFjZURldmljZVJHQiwgVW5hY2NlbGVyYXRl
ZCk7CiAgICAgaWYgKCFzb3VyY2VDb3B5KQogICAgICAgICByZXR1cm47Ci0gICAgc291cmNlQ29w
eS0+bV9kYXRhLnB1dERhdGEoc291cmNlLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJbnRQb2lu
dCgtc291cmNlUmVjdC54KCksIC1zb3VyY2VSZWN0LnkoKSksIHNvdXJjZUNvcHktPnNpemUoKSwg
c291cmNlQ29weS0+Y29udGV4dCgpLT5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCBtdWx0aXBsaWVk
ID09IFVubXVsdGlwbGllZCk7CisKKyAgICBzb3VyY2VDb3B5LT5tX2RhdGEucHV0RGF0YShzb3Vy
Y2UsIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QsIEludFBvaW50KC1zb3VyY2VSZWN0LngoKSwgLXNv
dXJjZVJlY3QueSgpKSwgc291cmNlQ29weS0+ZGF0YVNpemUoKSwgc291cmNlQ29weS0+Y29udGV4
dCgpLT5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCBtdWx0aXBsaWVkID09IFVubXVsdGlwbGllZCk7
CiAKICAgICAvLyBTZXQgdXAgY29udGV4dCBmb3IgdXNpbmcgZHJhd0ltYWdlIGFzIGEgZGlyZWN0
IGJpdCBjb3B5CiAgICAgQ0dDb250ZXh0UmVmIGRlc3RDb250ZXh0ID0gY29udGV4dCgpLT5wbGF0
Zm9ybUNvbnRleHQoKTsKQEAgLTMzMyw3ICszMzUsNyBAQCB2b2lkIEltYWdlQnVmZmVyOjpwdXRC
eXRlQXJyYXkoTXVsdGlwbHkgCiAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKGRlc3RD
b250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKIAogICAgIC8vIERyYXcgdGhlIGltYWdlIGluIENH
IGNvb3JkaW5hdGUgc3BhY2UKLSAgICBJbnRQb2ludCBkZXN0UG9pbnRJbkNHQ29vcmRzKGRlc3RQ
b2ludC54KCkgKyBzb3VyY2VSZWN0LngoKSwgbV9zaXplLmhlaWdodCgpIC0gKGRlc3RQb2ludC55
KCkrc291cmNlUmVjdC55KCkpIC0gc291cmNlUmVjdC5oZWlnaHQoKSk7CisgICAgSW50UG9pbnQg
ZGVzdFBvaW50SW5DR0Nvb3JkcyhkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC54KCksIGRhdGFT
aXplKCkuaGVpZ2h0KCkgLSAoZGVzdFBvaW50LnkoKStzb3VyY2VSZWN0LnkoKSkgLSBzb3VyY2VS
ZWN0LmhlaWdodCgpKTsKICAgICBJbnRSZWN0IGRlc3RSZWN0SW5DR0Nvb3JkcyhkZXN0UG9pbnRJ
bkNHQ29vcmRzLCBzb3VyY2VDb3B5U2l6ZSk7CiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHNv
dXJjZUNvcHlJbWFnZShBZG9wdENGLCBzb3VyY2VDb3B5LT5jb3B5TmF0aXZlSW1hZ2UoKSk7CiAg
ICAgQ0dDb250ZXh0RHJhd0ltYWdlKGRlc3RDb250ZXh0LCBkZXN0UmVjdEluQ0dDb29yZHMsIHNv
dXJjZUNvcHlJbWFnZS5nZXQoKSk7CkBAIC00MTgsMjEgKzQyMCwyMSBAQCBTdHJpbmcgSW1hZ2VC
dWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpCiAKICAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCks
IGpwZWdVVEkoKSkpIHsKICAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFu
bmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCi0g
ICAgICAgIGFyciA9IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgw
LCAwKSwgbV9zaXplKSk7CisgICAgICAgIGFyciA9IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEo
SW50UmVjdChJbnRQb2ludCgwLCAwKSwgZGF0YVNpemUoKSkpOwogCiAgICAgICAgIHVuc2lnbmVk
IGNoYXIgKmRhdGEgPSBhcnItPmRhdGEoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3
aWR0aCgpICogaGVpZ2h0KCk7IGkrKykKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRh
U2l6ZSgpLndpZHRoKCkgKiBkYXRhU2l6ZSgpLmhlaWdodCgpOyBpKyspCiAgICAgICAgICAgICBk
YXRhW2kgKiA0ICsgM10gPSAyNTU7IC8vIFRoZSBpbWFnZSBpcyBhbHJlYWR5IHByZW11bHRpcGxp
ZWQsIHNvIHdlIGp1c3QgbmVlZCB0byBtYWtlIGl0IG9wYXF1ZS4KIAogICAgICAgICBSZXRhaW5Q
dHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRlcjsKICAgICAKICAgICAgICAgZGF0YVBy
b3ZpZGVyLmFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQg
KiB3aWR0aCgpICogaGVpZ2h0KCksIDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICogZGF0YVNpemUoKS53aWR0aCgpICogZGF0
YVNpemUoKS5oZWlnaHQoKSwgMCkpOwogICAgIAogICAgICAgICBpZiAoIWRhdGFQcm92aWRlcikK
ICAgICAgICAgICAgIHJldHVybiAiZGF0YTosIjsKIAotICAgICAgICBpbWFnZS5hZG9wdENGKENH
SW1hZ2VDcmVhdGUod2lkdGgoKSwgaGVpZ2h0KCksIDgsIDMyLCA0ICogd2lkdGgoKSwKKyAgICAg
ICAgaW1hZ2UuYWRvcHRDRihDR0ltYWdlQ3JlYXRlKGRhdGFTaXplKCkud2lkdGgoKSwgZGF0YVNp
emUoKS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBkYXRhU2l6ZSgpLndpZHRoKCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSwg
a0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGtDR0ltYWdlQWxwaGFMYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwg
a0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwogICAgIH0gZWxzZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwCShyZXZpc2lvbiAxMDg2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcs
NiArMTY3LDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcgogICAg
IHJlc3VsdEltYWdlLT5jb250ZXh0KCktPmRyYXdJbWFnZUJ1ZmZlcihpbi0+YXNJbWFnZUJ1ZmZl
cigpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKSk7CiAKICAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgp
LCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7CisgICAgQVNTRVJUKHJlc3VsdEltYWdlLT5k
ZXZpY2VQaXhlbFJhdGlvKCkgPT0gMSk7IC8vIFRoZSBjb21wdXRhdGlvbnMgYmVsb3cgbWFrZSB0
aGlzIGFzc3VtcHRpb24KICAgICBSZWZQdHI8Qnl0ZUFycmF5PiBwaXhlbEFycmF5ID0gcmVzdWx0
SW1hZ2UtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZVJlY3QpOwogCiAgICAgc3dpdGNo
IChtX3R5cGUpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEcm9wU2hhZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAJKHJldmlzaW9uIDEwODY2MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDkgKzEwMyw5IEBAIHZvaWQgRkVEcm9wU2hhZG93Ojpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUKICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coYmx1clJh
ZGl1cywgb2Zmc2V0LCBtX3NoYWRvd0NvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKIAogICAg
IC8vIFRPRE86IERpcmVjdCBwaXhlbCBhY2Nlc3MgdG8gSW1hZ2VCdWZmZXIgd291bGQgYXZvaWQg
Y29weWluZyB0aGUgSW1hZ2VEYXRhLgotICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgp
LCByZXN1bHRJbWFnZS0+c2l6ZSgpKTsKKyAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQo
KSwgcmVzdWx0SW1hZ2UtPmRhdGFTaXplKCkpOworICAgIEFTU0VSVChyZXN1bHRJbWFnZS0+ZGV2
aWNlUGl4ZWxSYXRpbygpID09IDEpOyAvLyBUaGUgY29tcHV0YXRpb25zIGJlbG93IG1ha2UgdGhp
cyBhc3N1bXB0aW9uCiAgICAgUmVmUHRyPEJ5dGVBcnJheT4gc3JjUGl4ZWxBcnJheSA9IHJlc3Vs
dEltYWdlLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNoYWRvd0FyZWEpOwotCiAgICAgY29u
dGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzcmNQaXhlbEFycmF5LT5kYXRhKCksIHNoYWRvd0Fy
ZWEuc2l6ZSgpLCA0ICogc2hhZG93QXJlYS5zaXplKCkud2lkdGgoKSk7CiAKICAgICByZXN1bHRJ
bWFnZS0+cHV0Qnl0ZUFycmF5KFByZW11bHRpcGxpZWQsIHNyY1BpeGVsQXJyYXkuZ2V0KCksIHNo
YWRvd0FyZWEuc2l6ZSgpLCBzaGFkb3dBcmVhLCBJbnRQb2ludCgpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5jcHAJKHJldmlzaW9uIDEwODY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDgg
KzEyNyw5IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmFzSW1hZ2VCdWZmZXIKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCiAgICAgICAgIHJldHVy
biBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBDb2xvclNwYWNl
TGluZWFyUkdCLCBtX2ZpbHRlci0+cmVuZGVyaW5nTW9kZSgpKTsKKyAgICBtX2ltYWdlQnVmZmVy
UmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwg
MSwgQ29sb3JTcGFjZUxpbmVhclJHQiwgbV9maWx0ZXItPnJlbmRlcmluZ01vZGUoKSk7CiAgICAg
SW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5z
aXplKCkpOworICAgIEFTU0VSVChtX2ltYWdlQnVmZmVyUmVzdWx0LT5kZXZpY2VQaXhlbFJhdGlv
KCkgPT0gMSk7IC8vIFRoZSBmb2xsb3dpbmcgY2FsbHMgbWFrZSB0aGlzIGFzc3VtcHRpb24KICAg
ICBpZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgIG1faW1hZ2VCdWZmZXJS
ZXN1bHQtPnB1dEJ5dGVBcnJheShQcmVtdWx0aXBsaWVkLCBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdC5nZXQoKSwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQ
b2ludCgpKTsKICAgICBlbHNlCkBAIC0yMDIsOSArMjAzLDEwIEBAIHZvaWQgRmlsdGVyRWZmZWN0
Ojpjb3B5VW5tdWx0aXBsaWVkSW1hZ2UKIAogICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCkgewogICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdl
IGJ1ZmZlci4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCisgICAgICAgIGlmICht
X2ltYWdlQnVmZmVyUmVzdWx0KSB7CisgICAgICAgICAgICBBU1NFUlQobV9pbWFnZUJ1ZmZlclJl
c3VsdC0+ZGV2aWNlUGl4ZWxSYXRpbygpID09IDEpOyAvLyBUaGUgY29tcHV0YXRpb25zIGJlbG93
IG1ha2UgdGhpcyBhc3N1bXB0aW9uCiAgICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJl
Y3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKLSAgICAgICAgZWxz
ZSB7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQoaXNGaWx0ZXJTaXplVmFs
aWQobV9hYnNvbHV0ZVBhaW50UmVjdCkpOwogICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCA9IEJ5dGVBcnJheTo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSAq
IG1fYWJzb2x1dGVQYWludFJlY3QuaGVpZ2h0KCkgKiA0KTsKICAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIqIHNvdXJjZUNvbXBvbmVudCA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRh
KCk7CkBAIC0yMzYsOSArMjM4LDEwIEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlw
bGllZEltYWcKIAogICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAg
ICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCi0gICAg
ICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KQorICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJl
c3VsdCkgeworICAgICAgICAgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmRldmljZVBp
eGVsUmF0aW8oKSA9PSAxKTsgLy8gVGhlIGNvbXB1dGF0aW9ucyBiZWxvdyBtYWtlIHRoaXMgYXNz
dW1wdGlvbgogICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdl
QnVmZmVyUmVzdWx0LT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQo
KSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKLSAgICAgICAgZWxzZSB7CisgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQoaXNGaWx0ZXJTaXplVmFsaWQobV9hYnNvbHV0
ZVBhaW50UmVjdCkpOwogICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBC
eXRlQXJyYXk6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCkgKiBtX2Fic29sdXRl
UGFpbnRSZWN0LmhlaWdodCgpICogNCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBzb3Vy
Y2VDb21wb25lbnQgPSBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7CkBAIC0yNjQs
NyArMjY3LDcgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdQogICAg
IEFTU0VSVCghaGFzUmVzdWx0KCkpOwogICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdl
QnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIENvbG9yU3BhY2VMaW5l
YXJSR0IsIG1fZmlsdGVyLT5yZW5kZXJpbmdNb2RlKCkpOworICAgIG1faW1hZ2VCdWZmZXJSZXN1
bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCAxLCBD
b2xvclNwYWNlTGluZWFyUkdCLCBtX2ZpbHRlci0+cmVuZGVyaW5nTW9kZSgpKTsKICAgICBpZiAo
IW1faW1hZ2VCdWZmZXJSZXN1bHQpCiAgICAgICAgIHJldHVybiAwOwogICAgIEFTU0VSVChtX2lt
YWdlQnVmZmVyUmVzdWx0LT5jb250ZXh0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHJldmlzaW9uIDEw
ODY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVy
UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksMTEgKzEwOSw2IEBAIEltYWdlQnVmZmVyOjp+
SW1hZ2VCdWZmZXIoKQogewogfQogCi1zaXplX3QgSW1hZ2VCdWZmZXI6OmRhdGFTaXplKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9zaXplLndpZHRoKCkgKiBtX3NpemUuaGVpZ2h0KCkgKiA0Owot
fQotCiBHcmFwaGljc0NvbnRleHQqIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKIHsKICAg
ICBBU1NFUlQobV9kYXRhLm1fcGFpbnRlci0+aXNBY3RpdmUoKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNr
aWEuY3BwCShyZXZpc2lvbiAxMDg2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OSwxMSAr
MTY5LDYgQEAgR3JhcGhpY3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIAogICAgIHJl
dHVybiBtX2NvbnRleHQuZ2V0KCk7CiB9CiAKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6ZGF0YVNpemUo
KSBjb25zdAotewotICAgIHJldHVybiBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSAq
IDQ7Ci19Ci0KIFBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoQmFja2lu
Z1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEJpdG1hcEltYWdl
U2luZ2xlRnJhbWVTa2lhOjpjcmVhdGUoKm1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dC5iaXRtYXAo
KSwgY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29u
dGV4dFNraWEuY3BwCShyZXZpc2lvbiAxMDg2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzcsNyArMjM3LDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpiZWdpbkxheWVyQ2xp
cAogCiAgICAgY2FudmFzKCktPmNsaXBSZWN0KGJvdW5kcyk7CiAKLSAgICBpZiAoaW1hZ2VCdWZm
ZXItPnNpemUoKS5pc0VtcHR5KCkpCisgICAgaWYgKGltYWdlQnVmZmVyLT5kYXRhU2l6ZSgpLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FudmFzKCktPnNhdmVMYXllckFscGhh
KCZib3VuZHMsIDI1NSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwCShyZXZpc2lvbiAxMDg2
NjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZl
cldpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTEgKzg4LDYgQEAgSW1hZ2VCdWZmZXI6
On5JbWFnZUJ1ZmZlcigpCiB7CiB9CiAKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6ZGF0YVNpemUoKSBj
b25zdAotewotICAgIHJldHVybiBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSAqIDQ7
Ci19Ci0KIEdyYXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAogewog
ICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAkocmV2aXNpb24gMTA4
NjYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJX
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEyICs0OCw2IEBAIEltYWdlQnVmZmVyOjp+SW1h
Z2VCdWZmZXIoKQogewogfQogCi1zaXplX3QgSW1hZ2VCdWZmZXI6OmRhdGFTaXplKCkgY29uc3QK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCiBHcmFwaGljc0Nv
bnRleHQqIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJU
aGVtZU1hYy5tbQkocmV2aXNpb24gMTA4NjYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01ODksNyArNTg5LDcg
QEAgYm9vbCBTY3JvbGxiYXJUaGVtZU1hYzo6cGFpbnQoU2Nyb2xsYmFyKgogICAgICAgICBJbnRS
ZWN0IGJ1ZmZlclJlY3Qoc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSk7CiAgICAgICAgIGJ1ZmZlclJl
Y3QuaW50ZXJzZWN0KGRhbWFnZVJlY3QpOwogICAgICAgICAKLSAgICAgICAgT3duUHRyPEltYWdl
QnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoYnVmZmVyUmVjdC5zaXpl
KCkpOworICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgMSk7CiAgICAgICAgIGlmICghaW1hZ2VCdWZm
ZXIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCShyZXZpc2lvbiAxMDg2NjAp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMjIsNyArMzIyLDggQEAgdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJl
cjo6cHJlcGFyZSgpCiAgICAgLy8gc291cmNlIGltYWdlIHNpemVzIHNldC4gV2UganVzdCBuZWVk
IHRvIGF0dGFjaCB0aGUgZ3JhcGhpYwogICAgIC8vIGJ1ZmZlciBpZiB3ZSBoYXZlIG5vdCB5ZXQg
ZG9uZSBzby4KICAgICBpZiAoIW1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCkgewotICAgICAgICBz
ZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNpemUobV9zb3VyY2VEcmF3aW5n
UmVnaW9uLndpZHRoKCksIG1fc291cmNlRHJhd2luZ1JlZ2lvbi5oZWlnaHQoKSksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIHJlbmRlcmluZ01vZGUoKSkpOworICAgICAgICBJbnRTaXplIGxvZ2ljYWxT
aXplKG1fc291cmNlRHJhd2luZ1JlZ2lvbi53aWR0aCgpLCBtX3NvdXJjZURyYXdpbmdSZWdpb24u
aGVpZ2h0KCkpOworICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxv
Z2ljYWxTaXplLCAxLCBDb2xvclNwYWNlRGV2aWNlUkdCLCByZW5kZXJpbmdNb2RlKCkpKTsKICAg
ICAgICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0gdHJ1ZTsKICAgICB9CiAgICAgbV9zb3Vy
Y2VHcmFwaGljLT5jbGVhclJlc3VsdCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gMTA4NjYwKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05OTAsNyArOTkw
LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9ncmVzc0JhcihSZQogICAgIHRyYWNr
SW5mby5yZXNlcnZlZCA9IDA7CiAgICAgdHJhY2tJbmZvLmZpbGxlcjEgPSAwOwogCi0gICAgT3du
UHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW5mbGF0
ZWRSZWN0LnNpemUoKSk7CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoaW5mbGF0ZWRSZWN0LnNpemUoKSwgMSk7CiAgICAgaWYgKCFpbWFn
ZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHSW1hZ2VCdWZmZXJUb29scy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcAkocmV2aXNpb24g
MTA4NjYwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRv
b2xzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBib29sIFNWR0ltYWdlQnVm
ZmVyVG9vbHM6OmNyZWF0ZUltYWdlQnVmCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIElu
dFNpemUgY2xhbXBlZFNpemUgPSBjbGFtcGVkQWJzb2x1dGVTaXplKHBhaW50UmVjdC5zaXplKCkp
OwotICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNs
YW1wZWRTaXplLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlKTsKKyAgICBPd25QdHI8SW1hZ2VC
dWZmZXI+IGltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgMSwgY29sb3JT
cGFjZSwgcmVuZGVyaW5nTW9kZSk7CiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCkBAIC04OSw3ICs4OSw3IEBAIGJvb2wgU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y3JlYXRl
SW1hZ2VCdWYKICAgICBpZiAoaW1hZ2VTaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgT3duUHRyPEltYWdlQnVmZmVyPiBpbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoaW1hZ2VTaXplLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlKTsKKyAgICBPd25QdHI8SW1h
Z2VCdWZmZXI+IGltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVNpemUsIDEsIGNvbG9y
U3BhY2UsIHJlbmRlcmluZ01vZGUpOwogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCShy
ZXZpc2lvbiAxMDg2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQsNyArMzA0LDcgQEAgTmF0aXZlSW1hZ2VQdHIgU1ZH
SW1hZ2U6Om5hdGl2ZUltYWdlRm9yQwogICAgIGlmICghbV9mcmFtZUNhY2hlKSB7CiAgICAgICAg
IGlmICghbV9wYWdlKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIE93blB0cjxJbWFn
ZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCkpOworICAgICAgICBP
d25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCAx
KTsKICAgICAgICAgaWYgKCFidWZmZXIpIC8vIGZhaWxlZCB0byBhbGxvY2F0ZSBpbWFnZQogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGRyYXcoYnVmZmVyLT5jb250ZXh0KCksIHJlY3Qo
KSwgcmVjdCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAJKHJl
dmlzaW9uIDEwODY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNh
Y2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBAIEltYWdlKiBTVkdJbWFn
ZUNhY2hlOjpsb29rdXBPckNyZWF0ZUJpdG0KICAgICB9CiAKICAgICAvLyBDcmVhdGUgYW5kIGNh
Y2hlIG5ldyBpbWFnZSBhbmQgaW1hZ2UgYnVmZmVyIGF0IHJlcXVlc3RlZCBzaXplLgotICAgIE93
blB0cjxJbWFnZUJ1ZmZlcj4gbmV3QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKTsK
KyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG5ld0J1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
c2l6ZSwgMSk7CiAgICAgaWYgKCFuZXdCdWZmZXIpCiAgICAgICAgIHJldHVybiBJbWFnZTo6bnVs
bEltYWdlKCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128635</attachid>
            <date>2012-02-23 20:01:11 -0800</date>
            <delta_ts>2012-02-27 12:24:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79395-20120223200109.patch</filename>
            <type>text/plain</type>
            <size>37469</size>
            <attacher name="Matthew Delaney">mdelaney7</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODQ3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTAyLTIzICBNYXR0aGV3
IERlbGFuZXkgIDxtZGVsYW5leUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIEltYWdlQnVmZmVy
IHN1cHBvcnQgZm9yIGhhdmluZyBhIGhpLXJlcyBiYWNraW5nIHN0b3JlLiBUaGlzIGFsbG93cwor
ICAgICAgICBJbWFnZUJ1ZmZlciBjbGllbnRzIHRvIHNwZWNpZnkgYSBzY2FsZSBmYWN0b3IgdXBv
biBjcmVhdGlvbiBzbyB0aGF0IHRoZXkKKyAgICAgICAgZG9uJ3QgaGF2ZSB0byBtYWludGFpbiB0
aGF0IGluZm8gdGhlbXNlbHZlcyBhcyB0aGV5IHVzZS9wYXNzIGFyb3VuZCB0aGUgSW1hZ2VCdWZm
ZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTM5
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cy4gVGhpcyBwYXRjaCBkb2Vzbid0IGNoYW5nZSBiZWhhdmlvci4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKTogU2NhbGUgdGhlIGJhY2tpbmcgc3RvcmUgYnkgdGhlIHJlc29sdXRp
b24gc2NhbGUuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bG9naWNhbFNpemUpOiBE
aWZmZXJlbnRpYXRlIHRoZSBsb2dpY2FsIHNpemUgZnJvbSB0aGUgYmFja2luZyBzdG9yZSdzIHNp
emUuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aW50ZXJuYWxTaXplKTogVGhlIGJh
Y2tpbmcgc3RvcmUncyBzaXplLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDRy5jcHA6IFByZWZlciB0aGUgZXhwbGljaXQgdXNlIG9mIGxvZ2ljYWxTaXplIGFu
ZCBpbnRlcm5hbFNpemUuCisKKyAgICAgICAgRXhwbGljaXRseSBzdGF0ZSBhIDF4IHNjYWxlIGZv
ciBhbGwgSW1hZ2VCdWZmZXIgY3JlYXRpb24gc2l0ZXMKKyAgICAgICAgc2luY2UgdGhpcyBpcyB3
aGF0IHRoZXkgY3VycmVudGx5IGFzc3VtZS4KKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6Cisg
ICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jv
c3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BT
aGFkb3cuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW06Cisg
ICAgICAgICogcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJ
bWFnZUJ1ZmZlclRvb2xzLmNwcDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3Bw
OgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcDoKKworICAgICAgICBV
cGRhdGUgSW1hZ2VCdWZmZXI6OnNpemUoKSBjYWxscyB0byBuZXcgdmVyc2lvbnMuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcDoKKwogMjAxMi0wMi0yMiAgU2hpbnlhIEth
d2FuYWthICA8c2hpbnlha0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTm9kZTo6YXR0YWNoKCkg
c2hvdWxkIGJlIGFmdGVyIGF0dGFjaGluZyBjaGlsZHJlbiBpbiBFbGVtZW50OjphdHRhY2goKS4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lv
biAxMDg0NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDkzLDcgKzQ5Myw3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUltYWdlQnVmZmUKICAgICAgICAgVW5hY2NlbGVyYXRlZDsKICNlbmRpZgogICAgIERl
ZmVycmFsTW9kZSBkZWZlcnJhbE1vZGUgPSBzaG91bGREZWZlcigpID8gRGVmZXJyZWQgOiBOb25E
ZWZlcnJlZDsKLSAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJT
aXplLCBDb2xvclNwYWNlRGV2aWNlUkdCLCByZW5kZXJpbmdNb2RlLCBkZWZlcnJhbE1vZGUpOwor
ICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlclNpemUsIDEsIENv
bG9yU3BhY2VEZXZpY2VSR0IsIHJlbmRlcmluZ01vZGUsIGRlZmVycmFsTW9kZSk7CiAgICAgaWYg
KCFtX2ltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm47CiAgICAgbV9pbWFnZUJ1ZmZlci0+Y29u
dGV4dCgpLT5zY2FsZShGbG9hdFNpemUoYnVmZmVyU2l6ZS53aWR0aCgpIC8gbG9naWNhbFNpemUu
d2lkdGgoKSwgYnVmZmVyU2l6ZS5oZWlnaHQoKSAvIGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7CkBA
IC01MDMsNyArNTAzLDggQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZm
ZQogCiAjaWYgVVNFKEpTQykKICAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKLSAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmdsb2JhbERhdGEoKS0+
aGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3QobV9pbWFnZUJ1ZmZlci0+ZGF0YVNpemUoKSk7Cisg
ICAgc2l6ZV90IG51bUJ5dGVzID0gNCAqIG1faW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpLndp
ZHRoKCkgKiBtX2ltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKS5oZWlnaHQoKTsKKyAgICBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmdsb2JhbERhdGEoKS0+aGVhcC5yZXBvcnRFeHRyYU1lbW9y
eUNvc3QobnVtQnl0ZXMpOwogI2VuZGlmCiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKSB8fCAoRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gMTA4NDQ3
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzNSw3ICsxNTM1LDcgQEAgdGVtcGxhdGU8Y2xhc3Mg
VD4gSW50UmVjdCBDYW52YXNSZW5kZXJpbgogUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGVDb21wb3NpdGluZ0J1ZmZlcihjb25zdCBJbnRSZWN0
JiBidWZmZXJSZWN0KQogewogICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyTW9kZSA9IGlzQWNjZWxl
cmF0ZWQoKSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZDsKLSAgICByZXR1cm4gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgcmVu
ZGVyTW9kZSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyOjpjcmVhdGUoYnVmZmVyUmVjdC5zaXpl
KCksIDEsIENvbG9yU3BhY2VEZXZpY2VSR0IsIHJlbmRlck1vZGUpOwogfQogCiB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6Y29tcG9zaXRlQnVmZmVyKEltYWdlQnVmZmVyKiBidWZmZXIs
IGNvbnN0IEludFJlY3QmIGJ1ZmZlclJlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQpAQCAtMTg5
Nyw3ICsxODk3LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnB1dEltYWdlRAog
ICAgIEludFNpemUgZGVzdE9mZnNldChzdGF0aWNfY2FzdDxpbnQ+KGR4KSwgc3RhdGljX2Nhc3Q8
aW50PihkeSkpOwogICAgIEludFJlY3QgZGVzdFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNsaXBS
ZWN0KTsKICAgICBkZXN0UmVjdC5tb3ZlKGRlc3RPZmZzZXQpOwotICAgIGRlc3RSZWN0LmludGVy
c2VjdChJbnRSZWN0KEludFBvaW50KCksIGJ1ZmZlci0+c2l6ZSgpKSk7CisgICAgZGVzdFJlY3Qu
aW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgYnVmZmVyLT5pbnRlcm5hbFNpemUoKSkpOwog
ICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBJbnRSZWN0
IHNvdXJjZVJlY3QoZGVzdFJlY3QpOwpAQCAtMjEwMyw5ICsyMTAzLDkgQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdUZXh0SQogICAgICAgICBJbnRSZWN0IG1hc2tSZWN0ID0g
ZW5jbG9zaW5nSW50UmVjdCh0ZXh0UmVjdCk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19C
QUNLSU5HX1NUT1JFKQotICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1hc2tJbWFnZSA9IElt
YWdlQnVmZmVyOjpjcmVhdGUobWFza1JlY3Quc2l6ZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBB
Y2NlbGVyYXRlZCk7CisgICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbWFza0ltYWdlID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShtYXNrUmVjdC5zaXplKCksIDEsIENvbG9yU3BhY2VEZXZpY2VSR0Is
IEFjY2VsZXJhdGVkKTsKICNlbHNlCi0gICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbWFza0lt
YWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtYXNrUmVjdC5zaXplKCkpOworICAgICAgICBPd25Q
dHI8SW1hZ2VCdWZmZXI+IG1hc2tJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUobWFza1JlY3Qu
c2l6ZSgpLCAxKTsKICNlbmRpZgogCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogbWFza0ltYWdl
Q29udGV4dCA9IG1hc2tJbWFnZS0+Y29udGV4dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAx
MDg0NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzIwLDEzICs1MzIwLDEzIEBAIEltYWdlQnVmZmVy
KiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OkxSVUkKICAgICAgICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9
IG1fYnVmZmVyc1tpXS5nZXQoKTsKICAgICAgICAgaWYgKCFidWYpCiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgaWYgKGJ1Zi0+c2l6ZSgpICE9IHNpemUpCisgICAgICAgIGlmIChidWYtPmxv
Z2ljYWxTaXplKCkgIT0gc2l6ZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBidWJi
bGVUb0Zyb250KGkpOwogICAgICAgICByZXR1cm4gYnVmOwogICAgIH0KIAotICAgIE93blB0cjxJ
bWFnZUJ1ZmZlcj4gdGVtcCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSk7CisgICAgT3duUHRy
PEltYWdlQnVmZmVyPiB0ZW1wID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCAxKTsKICAgICBp
ZiAoIXRlbXApCiAgICAgICAgIHJldHVybiAwOwogICAgIGkgPSBzdGQ6Om1pbihtX2NhcGFjaXR5
IC0gMSwgaSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24gMTA4NDQ2KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwODUsNyAr
MTA4NSw3IEBAIERyYWdJbWFnZVJlZiBGcmFtZTo6bm9kZUltYWdlKE5vZGUqIG5vZGUKICAgICBM
YXlvdXRSZWN0IHRvcExldmVsUmVjdDsKICAgICBJbnRSZWN0IHBhaW50aW5nUmVjdCA9IHBpeGVs
U25hcHBlZEludFJlY3QocmVuZGVyZXItPnBhaW50aW5nUm9vdFJlY3QodG9wTGV2ZWxSZWN0KSk7
CiAKLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHBh
aW50aW5nUmVjdC5zaXplKCkpKTsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVjdC5zaXplKCksIDEsIENvbG9yU3BhY2VEZXZpY2VS
R0IpKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIDA7CiAgICAgYnVmZmVyLT5j
b250ZXh0KCktPnRyYW5zbGF0ZSgtcGFpbnRpbmdSZWN0LngoKSwgLXBhaW50aW5nUmVjdC55KCkp
OwpAQCAtMTEwOCw3ICsxMTA4LDcgQEAgRHJhZ0ltYWdlUmVmIEZyYW1lOjpkcmFnSW1hZ2VGb3JT
ZWxlY3RpbwogCiAgICAgSW50UmVjdCBwYWludGluZ1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHNl
bGVjdGlvbigpLT5ib3VuZHMoKSk7CiAKLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVjdC5zaXplKCkpKTsKKyAgICBPd25QdHI8SW1h
Z2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVjdC5zaXplKCks
IDEsIENvbG9yU3BhY2VEZXZpY2VSR0IpKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgYnVmZmVyLT5jb250ZXh0KCktPnRyYW5zbGF0ZSgtcGFpbnRpbmdSZWN0Lngo
KSwgLXBhaW50aW5nUmVjdC55KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcAkocmV2
aXNpb24gMTA4NDQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3Nm
YWRlR2VuZXJhdGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIHZv
aWQgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U6OmRyYXcoR3JhcGgKIAogdm9pZCBDcm9zc2ZhZGVH
ZW5lcmF0ZWRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5z
Zm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0
KQogewotICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKG1fc2l6ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgY29udGV4dC0+aXNBY2NlbGVyYXRl
ZENvbnRleHQoKSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZCk7CisgICAgT3duUHRyPElt
YWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9zaXplLCAxLCBD
b2xvclNwYWNlRGV2aWNlUkdCLCBjb250ZXh0LT5pc0FjY2VsZXJhdGVkQ29udGV4dCgpID8gQWNj
ZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAg
ICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkocmV2aXNpb24gMTA4NDQ2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDg3LDcgKzQ4Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1h
Z2UqIGkKICAgICAgICAgaW1hZ2UtPmRyYXcodGhpcywgRmxvYXRSZWN0KGRlc3QubG9jYXRpb24o
KSwgRmxvYXRTaXplKHR3LCB0aCkpLCBGbG9hdFJlY3Qoc3JjLmxvY2F0aW9uKCksIEZsb2F0U2l6
ZSh0c3csIHRzaCkpLCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFBvaW50JiBzcmNQb2ludCwgY29u
c3QgSW50U2l6ZSYgdGlsZVNpemUsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1
YWxpdHlTY2FsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSog
aW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgSW50UG9pbnQmIHNyY1BvaW50LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQogewogICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkgfHwgIWltYWdlKQogICAgICAgICByZXR1cm47CkBAIC00OTUsMTAg
KzQ5NSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hCiAgICAg
aWYgKHVzZUxvd1F1YWxpdHlTY2FsZSkgewogICAgICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBw
cmV2aW91c0ludGVycG9sYXRpb25RdWFsaXR5ID0gaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgp
OwogICAgICAgICBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25Mb3cp
OwotICAgICAgICBpbWFnZS0+ZHJhd1RpbGVkKHRoaXMsIHJlY3QsIHNyY1BvaW50LCB0aWxlU2l6
ZSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CisgICAgICAgIGltYWdlLT5kcmF3VGlsZWQodGhpcywg
ZGVzdFJlY3QsIHNyY1BvaW50LCB0aWxlU2l6ZSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CiAgICAg
ICAgIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkocHJldmlvdXNJbnRlcnBvbGF0aW9uUXVh
bGl0eSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGltYWdlLT5kcmF3VGlsZWQodGhpcywgcmVjdCwg
c3JjUG9pbnQsIHRpbGVTaXplLCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKKyAgICAgICAgaW1hZ2Ut
PmRyYXdUaWxlZCh0aGlzLCBkZXN0UmVjdCwgc3JjUG9pbnQsIHRpbGVTaXplLCBzdHlsZUNvbG9y
U3BhY2UsIG9wKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKElt
YWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIGRl
c3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsCkBAIC01NTMsMTQgKzU1MywxNCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltCiAgICAgZmxvYXQgdGggPSBkZXN0Lmhl
aWdodCgpOwogCiAgICAgaWYgKHRzdyA9PSAtMSkKLSAgICAgICAgdHN3ID0gaW1hZ2UtPndpZHRo
KCk7CisgICAgICAgIHRzdyA9IGltYWdlLT5sb2dpY2FsU2l6ZSgpLndpZHRoKCk7CiAgICAgaWYg
KHRzaCA9PSAtMSkKLSAgICAgICAgdHNoID0gaW1hZ2UtPmhlaWdodCgpOworICAgICAgICB0c2gg
PSBpbWFnZS0+bG9naWNhbFNpemUoKS5oZWlnaHQoKTsKIAogICAgIGlmICh0dyA9PSAtMSkKLSAg
ICAgICAgdHcgPSBpbWFnZS0+d2lkdGgoKTsKKyAgICAgICAgdHcgPSBpbWFnZS0+bG9naWNhbFNp
emUoKS53aWR0aCgpOwogICAgIGlmICh0aCA9PSAtMSkKLSAgICAgICAgdGggPSBpbWFnZS0+aGVp
Z2h0KCk7CisgICAgICAgIHRoID0gaW1hZ2UtPmxvZ2ljYWxTaXplKCkuaGVpZ2h0KCk7CiAKICAg
ICBpZiAodXNlTG93UXVhbGl0eVNjYWxlKSB7CiAgICAgICAgIEludGVycG9sYXRpb25RdWFsaXR5
IHByZXZpb3VzSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KCk7CkBAIC03NTQsNyArNzU0LDcgQEAgUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gR3JhcGhpY3ND
b250ZXh0OgogICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oKTsKICAgICBJ
bnRTaXplIHNjYWxlZFNpemUoc3RhdGljX2Nhc3Q8aW50PihjZWlsKHNpemUud2lkdGgoKSAqIHRy
YW5zZm9ybS54U2NhbGUoKSkpLCBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoc2l6ZS5oZWlnaHQoKSAq
IHRyYW5zZm9ybS55U2NhbGUoKSkpKTsKIAotICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzY2FsZWRTaXplLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBp
c0FjY2VsZXJhdGVkQ29udGV4dCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkKTsKKyAg
ICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2NhbGVk
U2l6ZSwgMSwgQ29sb3JTcGFjZURldmljZVJHQiwgaXNBY2NlbGVyYXRlZENvbnRleHQoKSA/IEFj
Y2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuY3BwCShyZXZpc2lvbiAxMDg0NDYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcx
LDcgKzcxLDcgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZShDbwogCiBp
bmxpbmUgdm9pZCBJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKQog
ewotICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2ludCgpLCBzaXplKCkpOworICAgIElu
dFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2ludCgpLCBpbnRlcm5hbFNpemUoKSk7CiAgICAgUmVm
UHRyPEJ5dGVBcnJheT4gc3JjUGl4ZWxBcnJheSA9IGdldFVubXVsdGlwbGllZEltYWdlRGF0YShs
dW1pbmFuY2VSZWN0KTsKICAgICAKICAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gc3Jj
UGl4ZWxBcnJheS0+bGVuZ3RoKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDEwODQ0NikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDYgKzMxLDcgQEAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDb2xv
clNwYWNlLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXIuaCIKICNlbmRpZgpAQCAtNDYsNyArNDcsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLSAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiAgICAgY2xhc3MgSW1hZ2U7CiAgICAg
Y2xhc3MgSW1hZ2VEYXRhOwogICAgIGNsYXNzIEludFBvaW50OwpAQCAtNzcsMjMgKzc3LDI3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VC
dWZmZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CiAgICAgICAgIC8v
IFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KLSAgICAg
ICAgc3RhdGljIFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBJbnRTaXplJiBz
aXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlRGV2aWNlUkdCLCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUgPSBVbmFjY2VsZXJhdGVkLCBEZWZlcnJhbE1vZGUgZGVmZXJy
YWxNb2RlID0gTm9uRGVmZXJyZWQpCisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPEltYWdlQnVm
ZmVyPiBjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0g
MSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gQ29sb3JTcGFjZURldmljZVJHQiwgUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZCwgRGVmZXJyYWxNb2RlIGRlZmVycmFs
TW9kZSA9IE5vbkRlZmVycmVkKQogICAgICAgICB7CiAgICAgICAgICAgICBib29sIHN1Y2Nlc3Mg
PSBmYWxzZTsKLSAgICAgICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gYnVmID0gYWRvcHRQdHIo
bmV3IEltYWdlQnVmZmVyKHNpemUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIGRlZmVycmFs
TW9kZSwgc3VjY2VzcykpOwotICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGJ1Zi5yZWxlYXNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gc2l6ZTsKKyAgICAgICAgICAgIGludGVy
bmFsU2l6ZS5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOworCisgICAgICAgICAgICBPd25QdHI8SW1h
Z2VCdWZmZXI+IGJ1ZiA9IGFkb3B0UHRyKG5ldyBJbWFnZUJ1ZmZlcihpbnRlcm5hbFNpemUsIGNv
bG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIGRlZmVycmFsTW9kZSwgc3VjY2VzcykpOworICAgICAg
ICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgICAgICAgICBidWYtPm1fbG9naWNhbFNpemUgPSBzaXplOworICAgICAgICAgICAgYnVmLT5j
b250ZXh0KCktPnNjYWxlKEZsb2F0U2l6ZShidWYtPnhTY2FsZSgpLCBidWYtPnlTY2FsZSgpKSk7
CisgICAgICAgICAgICByZXR1cm4gYnVmLnJlbGVhc2UoKTsKICAgICAgICAgfQogCiAgICAgICAg
IH5JbWFnZUJ1ZmZlcigpOwogCi0gICAgICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7
IHJldHVybiBtX3NpemU7IH0KLSAgICAgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplLndpZHRoKCk7IH0KLSAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZS5oZWlnaHQoKTsgfQotICAgICAgICAKLSAgICAgICAgc2l6ZV90IGRhdGFTaXplKCkgY29uc3Q7
Ci0gICAgICAgIAorICAgICAgICAvLyBUaGUgYWN0dWFsIHJlc29sdXRpb24gb2YgdGhlIGJhY2tp
bmcgc3RvcmUKKyAgICAgICAgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaXplOyB9CisgICAgICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZTsgfQorCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCgpIGNvbnN0OwogCiAgICAgICAgIFBhc3NSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShC
YWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7CkBAIC0xMTEsNyArMTE1
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHRyYW5zZm9ybUNvbG9yU3Bh
Y2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpOwog
ICAgICAgICB2b2lkIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBWZWN0b3I8aW50
PiYpOwogI2Vsc2UKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25z
dCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIG1fc2l6ZS5oZWlnaHQo
KSk7IH0KKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJl
dHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIGludGVybmFsU2l6ZSgpLmhlaWdo
dCgpKTsgfQogI2VuZGlmCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgICAg
ICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CkBAIC0xMjEsNiArMTI1LDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIFVTRShDRykKICAgICAgICAgTmF0aXZlSW1hZ2VQ
dHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBj
b25zdDsKICNlbmRpZgorICAgICAgICBmbG9hdCB4U2NhbGUoKSBjb25zdCB7IHJldHVybiBpbnRl
cm5hbFNpemUoKS53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGxvZ2ljYWxTaXplKCkud2lk
dGgoKSk7IH0KKyAgICAgICAgZmxvYXQgeVNjYWxlKCkgY29uc3QgeyByZXR1cm4gaW50ZXJuYWxT
aXplKCkuaGVpZ2h0KCkgLyBzdGF0aWNfY2FzdDxmbG9hdD4obG9naWNhbFNpemUoKS5oZWlnaHQo
KSk7IH0KIAogICAgICAgICB2b2lkIGNsaXAoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRS
ZWN0JikgY29uc3Q7CiAKQEAgLTEzNiw4ICsxNDIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICBwcml2YXRlOgogICAgICAgICBJbWFnZUJ1ZmZlckRhdGEgbV9kYXRhOwotCiAgICAgICAg
IEludFNpemUgbV9zaXplOworICAgICAgICBJbnRTaXplIG1fbG9naWNhbFNpemU7CiAgICAgICAg
IE93blB0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKIAogI2lmICFVU0UoQ0cpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAko
cmV2aXNpb24gMTA4NDQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hh
ZG93Qmx1ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDE0ICs3MywxNCBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fYnVmZmVySW5Vc2UgPSB0cnVlOwogI2VuZGlmCiAgICAgICAgIC8vIFdlIGRvIG5v
dCBuZWVkIHRvIHJlY3JlYXRlIHRoZSBidWZmZXIgaWYgdGhlIGN1cnJlbnQgYnVmZmVyIGlzIGxh
cmdlIGVub3VnaC4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXIgJiYgbV9pbWFnZUJ1ZmZlci0+
d2lkdGgoKSA+PSBzaXplLndpZHRoKCkgJiYgbV9pbWFnZUJ1ZmZlci0+aGVpZ2h0KCkgPj0gc2l6
ZS5oZWlnaHQoKSkKKyAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXIgJiYgbV9pbWFnZUJ1ZmZlci0+
bG9naWNhbFNpemUoKS53aWR0aCgpID49IHNpemUud2lkdGgoKSAmJiBtX2ltYWdlQnVmZmVyLT5s
b2dpY2FsU2l6ZSgpLmhlaWdodCgpID49IHNpemUuaGVpZ2h0KCkpCiAgICAgICAgICAgICByZXR1
cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKIAogICAgICAgICAvLyBSb3VuZCB0byB0aGUgbmVhcmVz
dCAzMiBwaXhlbHMgc28gd2UgZG8gbm90IGdyb3cgdGhlIGJ1ZmZlciBmb3Igc2ltaWxhciBzaXpl
ZCByZXF1ZXN0cy4KICAgICAgICAgSW50U2l6ZSByb3VuZGVkU2l6ZShyb3VuZFVwVG9NdWx0aXBs
ZU9mMzIoc2l6ZS53aWR0aCgpKSwgcm91bmRVcFRvTXVsdGlwbGVPZjMyKHNpemUuaGVpZ2h0KCkp
KTsKIAogICAgICAgICBjbGVhclNjcmF0Y2hCdWZmZXIoKTsKLSAgICAgICAgbV9pbWFnZUJ1ZmZl
ciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocm91bmRlZFNpemUpOworICAgICAgICBtX2ltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShyb3VuZGVkU2l6ZSwgMSk7CiAgICAgICAgIHJldHVy
biBtX2ltYWdlQnVmZmVyLmdldCgpOwogICAgIH0KIApAQCAtNDQwLDcgKzQ0MCw3IEBAIHZvaWQg
U2hhZG93Qmx1cjo6ZHJhd1NoYWRvd0J1ZmZlcihHcmFwaGkKIAogICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqZ3JhcGhpY3NDb250ZXh0KTsKIAotICAgIEludFNpemUg
YnVmZmVyU2l6ZSA9IG1fbGF5ZXJJbWFnZS0+c2l6ZSgpOworICAgIEludFNpemUgYnVmZmVyU2l6
ZSA9IG1fbGF5ZXJJbWFnZS0+aW50ZXJuYWxTaXplKCk7CiAgICAgaWYgKGJ1ZmZlclNpemUgIT0g
bV9sYXllclNpemUpIHsKICAgICAgICAgLy8gVGhlIHJlY3QgcGFzc2VkIHRvIGNsaXBUb0ltYWdl
QnVmZmVyKCkgaGFzIHRvIGJlIHRoZSBzaXplIG9mIHRoZSBlbnRpcmUgYnVmZmVyLAogICAgICAg
ICAvLyBidXQgd2UgbWF5IG5vdCBoYXZlIGNsZWFyZWQgaXQgYWxsLCBzbyBjbGlwIHRvIHRoZSBm
aWxsZWQgcGFydCBmaXJzdC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCShyZXZpc2lvbiAx
MDg0NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsMTEgKzc2LDYgQEAgSW1hZ2VCdWZm
ZXI6On5JbWFnZUJ1ZmZlcigpCiAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KG1fZGF0YS5tX3N1
cmZhY2UpOwogfQogCi1zaXplX3QgSW1hZ2VCdWZmZXI6OmRhdGFTaXplKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9zaXplLndpZHRoKCkgKiBtX3NpemUuaGVpZ2h0KCkgKiA0OwotfQotCiBHcmFw
aGljc0NvbnRleHQqIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4g
bV9jb250ZXh0LmdldCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAJKHJldmlzaW9uIDEwODQ0NikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgc3RhdGljIHZvaWQgcmVsZWFzZUltYWdlRGF0
YSh2b2lkKiwgY29ucwogfQogCiBJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgRGVmZXJyYWxNb2RlLCBib29sJiBzdWNjZXNzKQotICAgIDogbV9kYXRhKHNpemUp
CisgICAgOiBtX2RhdGEoc2l6ZSkgLy8gTk9URTogVGhlIGlucHV0IGhlcmUgaXNuJ3QgaW1wb3J0
YW50IGFzIEltYWdlQnVmZmVyRGF0YUNHJ3MgY29uc3RydWN0b3IganVzdCBpZ25vcmVzIGl0Lgog
ICAgICwgbV9zaXplKHNpemUpCiB7CiAgICAgc3VjY2VzcyA9IGZhbHNlOyAgLy8gTWFrZSBlYXJs
eSByZXR1cm4gbWVhbiBmYWlsdXJlLgpAQCAtMTIxLDggKzEyMSw4IEBAIEltYWdlQnVmZmVyOjpJ
bWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiAKIAogICAgIC8vIFByZXZlbnQgaW50ZWdlciBvdmVy
Zmxvd3MKICAgICBtX2RhdGEubV9ieXRlc1BlclJvdyA9IDQgKiB3aWR0aDsKLSAgICBDaGVja2Vk
PHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IGRhdGFTaXplID0gaGVpZ2h0ICogbV9kYXRhLm1fYnl0
ZXNQZXJSb3c7Ci0gICAgaWYgKGRhdGFTaXplLmhhc092ZXJmbG93ZWQoKSkKKyAgICBDaGVja2Vk
PHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gaGVpZ2h0ICogbV9kYXRhLm1fYnl0
ZXNQZXJSb3c7CisgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKQEAgLTE2Miw3
ICsxNjIsNyBAQCBJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgCiAgICAg
ICAgIG1fZGF0YS5tX2JpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Q7
CiAgICAgICAgIGNnQ29udGV4dC5hZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShtX2RhdGEu
bV9kYXRhLCB3aWR0aC51bnNhZmVHZXQoKSwgaGVpZ2h0LnVuc2FmZUdldCgpLCA4LCBtX2RhdGEu
bV9ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9kYXRhLm1fY29sb3JTcGFjZSwgbV9kYXRhLm1f
Yml0bWFwSW5mbykpOwogICAgICAgICAvLyBDcmVhdGUgYSBsaXZlIGltYWdlIHRoYXQgd3JhcHMg
dGhlIGRhdGEuCi0gICAgICAgIG1fZGF0YS5tX2RhdGFQcm92aWRlci5hZG9wdENGKENHRGF0YVBy
b3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgbV9kYXRhLm1fZGF0YSwgZGF0YVNpemUudW5zYWZlR2V0
KCksIHJlbGVhc2VJbWFnZURhdGEpKTsKKyAgICAgICAgbV9kYXRhLm1fZGF0YVByb3ZpZGVyLmFk
b3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBtX2RhdGEubV9kYXRhLCBudW1C
eXRlcy51bnNhZmVHZXQoKSwgcmVsZWFzZUltYWdlRGF0YSkpOwogICAgIH0KIAogICAgIGlmICgh
Y2dDb250ZXh0KQpAQCAtMTgyLDExICsxODIsNiBAQCBJbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVy
KCkKIHsKIH0KIAotc2l6ZV90IEltYWdlQnVmZmVyOjpkYXRhU2l6ZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fc2l6ZS5oZWlnaHQoKSAqIG1fZGF0YS5tX2J5dGVzUGVyUm93LnVuc2FmZUdldCgp
OwotfQotCiBHcmFwaGljc0NvbnRleHQqIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKIHsK
ICNpZiBkZWZpbmVkKEJVSUxESU5HX09OX0xJT04pCkBAIC0yMjIsNyArMjE3LDcgQEAgTmF0aXZl
SW1hZ2VQdHIgSW1hZ2VCdWZmZXI6OmNvcHlOYXRpdmVJbQogICAgIGlmICghbV9jb250ZXh0LT5p
c0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7CiAgICAgICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7
CiAgICAgICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBpbWFnZSA9
IENHSW1hZ2VDcmVhdGUobV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgOCwgMzIsIG1f
ZGF0YS5tX2J5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBtX2RhdGEubV9jb2xvclNwYWNlLCBtX2Rh
dGEubV9iaXRtYXBJbmZvLCBtX2RhdGEubV9kYXRhUHJvdmlkZXIuZ2V0KCksIDAsIHRydWUsIGtD
R1JlbmRlcmluZ0ludGVudERlZmF1bHQpOworICAgICAgICAgICAgaW1hZ2UgPSBDR0ltYWdlQ3Jl
YXRlKGludGVybmFsU2l6ZSgpLndpZHRoKCksIGludGVybmFsU2l6ZSgpLmhlaWdodCgpLCA4LCAz
MiwgbV9kYXRhLm1fYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIG1fZGF0YS5tX2NvbG9yU3BhY2Us
IG1fZGF0YS5tX2JpdG1hcEluZm8sIG1fZGF0YS5tX2RhdGFQcm92aWRlci5nZXQoKSwgMCwgdHJ1
ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOgogICAgICAgICAgICAgaW1hZ2UgPSBDR0JpdG1hcENv
bnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKQEAgLTI1NSwy
OCArMjUwLDM0IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAg
ICBlbHNlCiAgICAgICAgIGltYWdlLmFkb3B0Q0YoY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFj
a2luZ1N0b3JlKSk7CiAKLSAgICBkZXN0Q29udGV4dC0+ZHJhd05hdGl2ZUltYWdlKGltYWdlLmdl
dCgpLCBtX3NpemUsIGNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCk7CisgICAgRmxv
YXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNj
YWxlKHhTY2FsZSgpLCB5U2NhbGUoKSk7CisgICAgZGVzdENvbnRleHQtPmRyYXdOYXRpdmVJbWFn
ZShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKCksIGNvbG9yU3BhY2UsIGRlc3RSZWN0LCBhZGp1
c3RlZFNyY1JlY3QsIG9wKTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3Jh
cGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVj
dCA9IHNyY1JlY3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKHhTY2FsZSgpLCB5U2NhbGUo
KSk7CisKICAgICBpZiAoIW1fY29udGV4dC0+aXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewogICAg
ICAgICBpZiAoZGVzdENvbnRleHQgPT0gbV9jb250ZXh0IHx8IGRlc3RDb250ZXh0LT5pc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5
SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7IC8vIERyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlciwg
bmVlZCB0byBkZWVwIGNvcHkuCi0gICAgICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29u
dGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwg
b3AsIGRlc3RSZWN0KTsKKyAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0
LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3Bh
Y2UsIG9wLCBkZXN0UmVjdCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBSZWZQdHI8
SW1hZ2U+IGltYWdlRm9yUmVuZGVyaW5nID0gY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3Jl
KTsKLSAgICAgICAgICAgIGltYWdlRm9yUmVuZGVyaW5nLT5kcmF3UGF0dGVybihkZXN0Q29udGV4
dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3As
IGRlc3RSZWN0KTsKKyAgICAgICAgICAgIGltYWdlRm9yUmVuZGVyaW5nLT5kcmF3UGF0dGVybihk
ZXN0Q29udGV4dCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5
bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpOwot
ICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRy
YW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKKyAgICAgICAg
Y29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRy
YW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKICAgICB9CiB9
CiAKIHZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0VG9DbGlw
LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgQ0dDb250ZXh0UmVmIHBsYXRm
b3JtQ29udGV4dFRvQ2xpcCA9IGNvbnRleHRUb0NsaXAtPnBsYXRmb3JtQ29udGV4dCgpOworICAg
IC8vIEZJWE1FOiBUaGlzIGltYWdlIG5lZWRzIHRvIGJlIGdyYXlzY2FsZSB0byBiZSB1c2VkIGFz
IGFuIGFscGhhIG1hc2sgaGVyZS4KICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UoQWRv
cHRDRiwgY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSk7CiAgICAgQ0dDb250
ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dFRvQ2xpcCwgcmVjdC54KCksIHJlY3QueSgp
ICsgcmVjdC5oZWlnaHQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0ocGxhdGZvcm1Db250ZXh0
VG9DbGlwLCAxLCAtMSk7CkBAIC0yOTMsNyArMjk0LDcgQEAgUGFzc1JlZlB0cjxCeXRlQXJyYXk+
IEltYWdlQnVmZmVyOjpnZXRVbgogICAgICAgICBtX2RhdGEubV9sYXN0Rmx1c2hUaW1lID0gY3Vy
cmVudFRpbWVNUygpOwogI2VuZGlmCiAgICAgfQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShy
ZWN0LCBtX3NpemUsIG1fY29udGV4dC0+aXNBY2NlbGVyYXRlZENvbnRleHQoKSwgdHJ1ZSk7Cisg
ICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKHJlY3QsIGludGVybmFsU2l6ZSgpLCBtX2NvbnRleHQt
PmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIHRydWUpOwogfQogCiBQYXNzUmVmUHRyPEJ5dGVBcnJh
eT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYg
cmVjdCkgY29uc3QKQEAgLTMwNCwyMyArMzA1LDI0IEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBJ
bWFnZUJ1ZmZlcjo6Z2V0UHIKICAgICAgICAgbV9kYXRhLm1fbGFzdEZsdXNoVGltZSA9IGN1cnJl
bnRUaW1lTVMoKTsKICNlbmRpZgogICAgIH0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEocmVj
dCwgbV9zaXplLCBtX2NvbnRleHQtPmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIGZhbHNlKTsKKyAg
ICByZXR1cm4gbV9kYXRhLmdldERhdGEocmVjdCwgaW50ZXJuYWxTaXplKCksIG1fY29udGV4dC0+
aXNBY2NlbGVyYXRlZENvbnRleHQoKSwgZmFsc2UpOwogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpw
dXRCeXRlQXJyYXkoTXVsdGlwbHkgbXVsdGlwbGllZCwgQnl0ZUFycmF5KiBzb3VyY2UsIGNvbnN0
IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQpCiB7CiAgICAgaWYgKCFtX2NvbnRleHQtPmlzQWNjZWxlcmF0ZWRD
b250ZXh0KCkpIHsKLSAgICAgICAgbV9kYXRhLnB1dERhdGEoc291cmNlLCBzb3VyY2VTaXplLCBz
b3VyY2VSZWN0LCBkZXN0UG9pbnQsIG1fc2l6ZSwgbV9jb250ZXh0LT5pc0FjY2VsZXJhdGVkQ29u
dGV4dCgpLCBtdWx0aXBsaWVkID09IFVubXVsdGlwbGllZCk7CisgICAgICAgIG1fZGF0YS5wdXRE
YXRhKHNvdXJjZSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBpbnRlcm5hbFNp
emUoKSwgbV9jb250ZXh0LT5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCBtdWx0aXBsaWVkID09IFVu
bXVsdGlwbGllZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICNpZiBVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKQogICAgIC8vIE1ha2UgYSBjb3B5IG9mIHRoZSBzb3VyY2Ug
dG8gZW5zdXJlIHRoZSBiaXRzIGRvbid0IGNoYW5nZSBiZWZvcmUgYmVpbmcgZHJhd24KICAgICBJ
bnRTaXplIHNvdXJjZUNvcHlTaXplKHNvdXJjZVJlY3Qud2lkdGgoKSwgc291cmNlUmVjdC5oZWln
aHQoKSk7Ci0gICAgT3duUHRyPEltYWdlQnVmZmVyPiBzb3VyY2VDb3B5ID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShzb3VyY2VDb3B5U2l6ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgVW5hY2NlbGVyYXRl
ZCk7CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBzb3VyY2VDb3B5ID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzb3VyY2VDb3B5U2l6ZSwgMSwgQ29sb3JTcGFjZURldmljZVJHQiwgVW5hY2NlbGVyYXRl
ZCk7CiAgICAgaWYgKCFzb3VyY2VDb3B5KQogICAgICAgICByZXR1cm47Ci0gICAgc291cmNlQ29w
eS0+bV9kYXRhLnB1dERhdGEoc291cmNlLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJbnRQb2lu
dCgtc291cmNlUmVjdC54KCksIC1zb3VyY2VSZWN0LnkoKSksIHNvdXJjZUNvcHktPnNpemUoKSwg
c291cmNlQ29weS0+Y29udGV4dCgpLT5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCBtdWx0aXBsaWVk
ID09IFVubXVsdGlwbGllZCk7CisKKyAgICBzb3VyY2VDb3B5LT5tX2RhdGEucHV0RGF0YShzb3Vy
Y2UsIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QsIEludFBvaW50KC1zb3VyY2VSZWN0LngoKSwgLXNv
dXJjZVJlY3QueSgpKSwgc291cmNlQ29weS0+aW50ZXJuYWxTaXplKCksIHNvdXJjZUNvcHktPmNv
bnRleHQoKS0+aXNBY2NlbGVyYXRlZENvbnRleHQoKSwgbXVsdGlwbGllZCA9PSBVbm11bHRpcGxp
ZWQpOwogCiAgICAgLy8gU2V0IHVwIGNvbnRleHQgZm9yIHVzaW5nIGRyYXdJbWFnZSBhcyBhIGRp
cmVjdCBiaXQgY29weQogICAgIENHQ29udGV4dFJlZiBkZXN0Q29udGV4dCA9IGNvbnRleHQoKS0+
cGxhdGZvcm1Db250ZXh0KCk7CkBAIC0zMzMsNyArMzM1LDcgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6
cHV0Qnl0ZUFycmF5KE11bHRpcGx5IAogICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihk
ZXN0Q29udGV4dCwgQ0dTaXplWmVybywgMCwgMCk7CiAKICAgICAvLyBEcmF3IHRoZSBpbWFnZSBp
biBDRyBjb29yZGluYXRlIHNwYWNlCi0gICAgSW50UG9pbnQgZGVzdFBvaW50SW5DR0Nvb3Jkcyhk
ZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC54KCksIG1fc2l6ZS5oZWlnaHQoKSAtIChkZXN0UG9p
bnQueSgpK3NvdXJjZVJlY3QueSgpKSAtIHNvdXJjZVJlY3QuaGVpZ2h0KCkpOworICAgIEludFBv
aW50IGRlc3RQb2ludEluQ0dDb29yZHMoZGVzdFBvaW50LngoKSArIHNvdXJjZVJlY3QueCgpLCBp
bnRlcm5hbFNpemUoKS5oZWlnaHQoKSAtIChkZXN0UG9pbnQueSgpK3NvdXJjZVJlY3QueSgpKSAt
IHNvdXJjZVJlY3QuaGVpZ2h0KCkpOwogICAgIEludFJlY3QgZGVzdFJlY3RJbkNHQ29vcmRzKGRl
c3RQb2ludEluQ0dDb29yZHMsIHNvdXJjZUNvcHlTaXplKTsKICAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gc291cmNlQ29weUltYWdlKEFkb3B0Q0YsIHNvdXJjZUNvcHktPmNvcHlOYXRpdmVJbWFn
ZSgpKTsKICAgICBDR0NvbnRleHREcmF3SW1hZ2UoZGVzdENvbnRleHQsIGRlc3RSZWN0SW5DR0Nv
b3Jkcywgc291cmNlQ29weUltYWdlLmdldCgpKTsKQEAgLTQxOCwyMSArNDIwLDIwIEBAIFN0cmlu
ZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmkKIAogICAgIGlmIChDRkVxdWFsKHV0
aS5nZXQoKSwganBlZ1VUSSgpKSkgewogICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFs
cGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBi
bGFjay4KLSAgICAgICAgYXJyID0gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KElu
dFBvaW50KDAsIDApLCBtX3NpemUpKTsKKyAgICAgICAgYXJyID0gZ2V0UHJlbXVsdGlwbGllZElt
YWdlRGF0YShJbnRSZWN0KEludFBvaW50KDAsIDApLCBpbnRlcm5hbFNpemUoKSkpOwogCiAgICAg
ICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEgPSBhcnItPmRhdGEoKTsKLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCB3aWR0aCgpICogaGVpZ2h0KCk7IGkrKykKKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBpbnRlcm5hbFNpemUoKS53aWR0aCgpICogaW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7
IGkrKykKICAgICAgICAgICAgIGRhdGFbaSAqIDQgKyAzXSA9IDI1NTsgLy8gVGhlIGltYWdlIGlz
IGFscmVhZHkgcHJlbXVsdGlwbGllZCwgc28gd2UganVzdCBuZWVkIHRvIG1ha2UgaXQgb3BhcXVl
LgogCiAgICAgICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyOwog
ICAgIAotICAgICAgICBkYXRhUHJvdmlkZXIuYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdp
dGhEYXRhKDAsIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgNCAqIHdpZHRoKCkgKiBoZWlnaHQoKSwgMCkpOworICAgICAgICBk
YXRhUHJvdmlkZXIuYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIGRhdGEs
IDQgKiBpbnRlcm5hbFNpemUoKS53aWR0aCgpICogaW50ZXJuYWxTaXplKCkuaGVpZ2h0KCksIDAp
KTsKICAgICAKICAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCiAgICAgICAgICAgICByZXR1cm4g
ImRhdGE6LCI7CiAKLSAgICAgICAgaW1hZ2UuYWRvcHRDRihDR0ltYWdlQ3JlYXRlKHdpZHRoKCks
IGhlaWdodCgpLCA4LCAzMiwgNCAqIHdpZHRoKCksCisgICAgICAgIGltYWdlLmFkb3B0Q0YoQ0dJ
bWFnZUNyZWF0ZShpbnRlcm5hbFNpemUoKS53aWR0aCgpLCBpbnRlcm5hbFNpemUoKS5oZWlnaHQo
KSwgOCwgMzIsIDQgKiBpbnRlcm5hbFNpemUoKS53aWR0aCgpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCksIGtDR0JpdG1h
cEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRl
cmluZ0ludGVudERlZmF1bHQpKTsKICAgICB9IGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAJ
KHJldmlzaW9uIDEwODQ0NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEcm9wU2hhZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBA
IHZvaWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUKICAgICBTaGFkb3dCbHVy
IGNvbnRleHRTaGFkb3coYmx1clJhZGl1cywgb2Zmc2V0LCBtX3NoYWRvd0NvbG9yLCBDb2xvclNw
YWNlRGV2aWNlUkdCKTsKIAogICAgIC8vIFRPRE86IERpcmVjdCBwaXhlbCBhY2Nlc3MgdG8gSW1h
Z2VCdWZmZXIgd291bGQgYXZvaWQgY29weWluZyB0aGUgSW1hZ2VEYXRhLgotICAgIEludFJlY3Qg
c2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+c2l6ZSgpKTsKKyAgICBJbnRSZWN0
IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmludGVybmFsU2l6ZSgpKTsKICAg
ICBSZWZQdHI8Qnl0ZUFycmF5PiBzcmNQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldFByZW11
bHRpcGxpZWRJbWFnZURhdGEoc2hhZG93QXJlYSk7CiAKICAgICBjb250ZXh0U2hhZG93LmJsdXJM
YXllckltYWdlKHNyY1BpeGVsQXJyYXktPmRhdGEoKSwgc2hhZG93QXJlYS5zaXplKCksIDQgKiBz
aGFkb3dBcmVhLnNpemUoKS53aWR0aCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHJldmlz
aW9uIDEwODQ0NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw3IEBAIEltYWdl
QnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmFzSW1hZ2VCdWZmZXIKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCiAgICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVy
UmVzdWx0LmdldCgpOwotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBDb2xvclNwYWNlTGluZWFyUkdCLCBtX2Zp
bHRlci0+cmVuZGVyaW5nTW9kZSgpKTsKKyAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgMSwgQ29sb3JTcGFjZUxp
bmVhclJHQiwgbV9maWx0ZXItPnJlbmRlcmluZ01vZGUoKSk7CiAgICAgSW50UmVjdCBkZXN0aW5h
dGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgIGlm
IChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3Vs
dC0+cHV0Qnl0ZUFycmF5KFByZW11bHRpcGxpZWQsIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
LmdldCgpLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QsIEludFBvaW50
KCkpOwpAQCAtMjY0LDcgKzI2NCw3IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0
ZUltYWdlQnUKICAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKICAgICBpZiAobV9hYnNvbHV0ZVBh
aW50UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIG1faW1hZ2VCdWZmZXJS
ZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBD
b2xvclNwYWNlTGluZWFyUkdCLCBtX2ZpbHRlci0+cmVuZGVyaW5nTW9kZSgpKTsKKyAgICBtX2lt
YWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0
LnNpemUoKSwgMSwgQ29sb3JTcGFjZUxpbmVhclJHQiwgbV9maWx0ZXItPnJlbmRlcmluZ01vZGUo
KSk7CiAgICAgaWYgKCFtX2ltYWdlQnVmZmVyUmVzdWx0KQogICAgICAgICByZXR1cm4gMDsKICAg
ICBBU1NFUlQobV9pbWFnZUJ1ZmZlclJlc3VsdC0+Y29udGV4dCgpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3Bw
CShyZXZpc2lvbiAxMDg0NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9JbWFnZUJ1ZmZlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDExICsxMDksNiBAQCBJ
bWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkKIHsKIH0KIAotc2l6ZV90IEltYWdlQnVmZmVyOjpk
YXRhU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhl
aWdodCgpICogNDsKLX0KLQogR3JhcGhpY3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZGF0YS5tX3BhaW50ZXItPmlzQWN0aXZlKCkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
SW1hZ2VCdWZmZXJTa2lhLmNwcAkocmV2aXNpb24gMTA4NDQ2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjksMTEgKzE2OSw2IEBAIEdyYXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRl
eHQoKSAKICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwogfQogCi1zaXplX3QgSW1hZ2VCdWZm
ZXI6OmRhdGFTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zaXplLndpZHRoKCkgKiBtX3Np
emUuaGVpZ2h0KCkgKiA0OwotfQotCiBQYXNzUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29w
eUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAogewogICAgIHJldHVy
biBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6Y3JlYXRlKCptX2RhdGEubV9wbGF0Zm9ybUNv
bnRleHQuYml0bWFwKCksIGNvcHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tp
YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAkocmV2aXNpb24gMTA4NDQ2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjM3LDcgKzIzNyw3IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6
YmVnaW5MYXllckNsaXAKIAogICAgIGNhbnZhcygpLT5jbGlwUmVjdChib3VuZHMpOwogCi0gICAg
aWYgKGltYWdlQnVmZmVyLT5zaXplKCkuaXNFbXB0eSgpKQorICAgIGlmIChpbWFnZUJ1ZmZlci0+
aW50ZXJuYWxTaXplKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBjYW52YXMo
KS0+c2F2ZUxheWVyQWxwaGEoJmJvdW5kcywgMjU1LApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVySW1hZ2VCdWZmZXIuaAkocmV2aXNpb24gMTA4NDQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxC
aXRtYXBUZXh0dXJlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQml0bWFwVGV4dHVy
ZUltYWdlQnVmZmVyKTsgfQogICAgIH5CaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIoKSB7IGRlc3Ry
b3koKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCkgeyBtX2ltYWdlLmNsZWFyKCk7IH0K
LSAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UtPnNpemUo
KTsgfQorICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS0+
aW50ZXJuYWxTaXplKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVzZXQoKTsKICAgICB2aXJ0
dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0KICAgICBpbmxpbmUg
R3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQoKSB7IHJldHVybiBtX2ltYWdlID8gbV9p
bWFnZS0+Y29udGV4dCgpIDogMDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAJKHJldmlz
aW9uIDEwODQ0NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0lt
YWdlQnVmZmVyV2luQ0UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMSArODgsNiBAQCBJbWFn
ZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkKIHsKIH0KIAotc2l6ZV90IEltYWdlQnVmZmVyOjpkYXRh
U2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdo
dCgpICogNDsKLX0KLQogR3JhcGhpY3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCShyZXZp
c2lvbiAxMDg0NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFn
ZUJ1ZmZlcld4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTIgKzQ4LDYgQEAgSW1hZ2VCdWZm
ZXI6On5JbWFnZUJ1ZmZlcigpCiB7CiB9CiAKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6ZGF0YVNpemUo
KSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIEdy
YXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAogewogICAgIG5vdElt
cGxlbWVudGVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFy
VGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Nj
cm9sbGJhclRoZW1lTWFjLm1tCShyZXZpc2lvbiAxMDg0NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU4OSw3
ICs1ODksNyBAQCBib29sIFNjcm9sbGJhclRoZW1lTWFjOjpwYWludChTY3JvbGxiYXIqCiAgICAg
ICAgIEludFJlY3QgYnVmZmVyUmVjdChzY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKICAgICAgICAg
YnVmZmVyUmVjdC5pbnRlcnNlY3QoZGFtYWdlUmVjdCk7CiAgICAgICAgIAotICAgICAgICBPd25Q
dHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJS
ZWN0LnNpemUoKSk7CisgICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlclJlY3Quc2l6ZSgpLCAxKTsKICAgICAgICAgaWYgKCFp
bWFnZUJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAJKHJldmlzaW9u
IDEwODQ0NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMiw3ICszMjIsOCBAQCB2b2lkIEZpbHRlckVmZmVj
dFJlbmRlcmVyOjpwcmVwYXJlKCkKICAgICAvLyBzb3VyY2UgaW1hZ2Ugc2l6ZXMgc2V0LiBXZSBq
dXN0IG5lZWQgdG8gYXR0YWNoIHRoZSBncmFwaGljCiAgICAgLy8gYnVmZmVyIGlmIHdlIGhhdmUg
bm90IHlldCBkb25lIHNvLgogICAgIGlmICghbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkKSB7Ci0g
ICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZShtX3NvdXJj
ZURyYXdpbmdSZWdpb24ud2lkdGgoKSwgbV9zb3VyY2VEcmF3aW5nUmVnaW9uLmhlaWdodCgpKSwg
Q29sb3JTcGFjZURldmljZVJHQiwgcmVuZGVyaW5nTW9kZSgpKSk7CisgICAgICAgIEludFNpemUg
bG9naWNhbFNpemUobV9zb3VyY2VEcmF3aW5nUmVnaW9uLndpZHRoKCksIG1fc291cmNlRHJhd2lu
Z1JlZ2lvbi5oZWlnaHQoKSk7CisgICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpj
cmVhdGUobG9naWNhbFNpemUsIDEsIENvbG9yU3BhY2VEZXZpY2VSR0IsIHJlbmRlcmluZ01vZGUo
KSkpOwogICAgICAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgPSB0cnVlOwogICAgIH0KICAg
ICBtX3NvdXJjZUdyYXBoaWMtPmNsZWFyUmVzdWx0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAxMDg0NDYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTk5
MCw3ICs5OTAsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFByb2dyZXNzQmFyKFJlCiAg
ICAgdHJhY2tJbmZvLnJlc2VydmVkID0gMDsKICAgICB0cmFja0luZm8uZmlsbGVyMSA9IDA7CiAK
LSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShpbmZsYXRlZFJlY3Quc2l6ZSgpKTsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbmZsYXRlZFJlY3Quc2l6ZSgpLCAxKTsKICAgICBp
ZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwCShy
ZXZpc2lvbiAxMDg0NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0ltYWdl
QnVmZmVyVG9vbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIGJvb2wgU1ZH
SW1hZ2VCdWZmZXJUb29sczo6Y3JlYXRlSW1hZ2VCdWYKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgSW50U2l6ZSBjbGFtcGVkU2l6ZSA9IGNsYW1wZWRBYnNvbHV0ZVNpemUocGFpbnRSZWN0
LnNpemUoKSk7Ci0gICAgT3duUHRyPEltYWdlQnVmZmVyPiBpbWFnZSA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoY2xhbXBlZFNpemUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUpOworICAgIE93blB0
cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCAx
LCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlKTsKICAgICBpZiAoIWltYWdlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKQEAgLTg5LDcgKzg5LDcgQEAgYm9vbCBTVkdJbWFnZUJ1ZmZlclRvb2xz
OjpjcmVhdGVJbWFnZUJ1ZgogICAgIGlmIChpbWFnZVNpemUuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShpbWFnZVNpemUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUpOworICAgIE93
blB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlU2l6ZSwg
MSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSk7CiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1h
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFn
ZS5jcHAJKHJldmlzaW9uIDEwODQ0NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNCw3ICszMDQsNyBAQCBOYXRpdmVJbWFn
ZVB0ciBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDCiAgICAgaWYgKCFtX2ZyYW1lQ2FjaGUpIHsK
ICAgICAgICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgT3du
UHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSk7Cisg
ICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShz
aXplKCksIDEpOwogICAgICAgICBpZiAoIWJ1ZmZlcikgLy8gZmFpbGVkIHRvIGFsbG9jYXRlIGlt
YWdlCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgZHJhdyhidWZmZXItPmNvbnRleHQo
KSwgcmVjdCgpLCByZWN0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92
ZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hl
LmNwcAkocmV2aXNpb24gMTA4NDQ2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R0ltYWdlQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgSW1hZ2Uq
IFNWR0ltYWdlQ2FjaGU6Omxvb2t1cE9yQ3JlYXRlQml0bQogICAgIH0KIAogICAgIC8vIENyZWF0
ZSBhbmQgY2FjaGUgbmV3IGltYWdlIGFuZCBpbWFnZSBidWZmZXIgYXQgcmVxdWVzdGVkIHNpemUu
Ci0gICAgT3duUHRyPEltYWdlQnVmZmVyPiBuZXdCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHNpemUpOworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbmV3QnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShzaXplLCAxKTsKICAgICBpZiAoIW5ld0J1ZmZlcikKICAgICAgICAgcmV0dXJuIElt
YWdlOjpudWxsSW1hZ2UoKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129086</attachid>
            <date>2012-02-27 12:24:08 -0800</date>
            <delta_ts>2012-02-27 12:41:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79395-20120227122407.patch</filename>
            <type>text/plain</type>
            <size>37716</size>
            <attacher name="Matthew Delaney">mdelaney7</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwOTAxMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTAyLTI3ICBNYXR0aGV3
IERlbGFuZXkgIDxtZGVsYW5leUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIEltYWdlQnVmZmVy
IHN1cHBvcnQgZm9yIGhhdmluZyBhIGhpLXJlcyBiYWNraW5nIHN0b3JlLiBUaGlzIGFsbG93cwor
ICAgICAgICBJbWFnZUJ1ZmZlciBjbGllbnRzIHRvIHNwZWNpZnkgYSBzY2FsZSBmYWN0b3IgdXBv
biBjcmVhdGlvbiBzbyB0aGF0IHRoZXkKKyAgICAgICAgZG9uJ3QgaGF2ZSB0byBtYWludGFpbiB0
aGF0IGluZm8gdGhlbXNlbHZlcyBhcyB0aGV5IHVzZS9wYXNzIGFyb3VuZCB0aGUgSW1hZ2VCdWZm
ZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTM5
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cy4gVGhpcyBwYXRjaCBkb2Vzbid0IGNoYW5nZSBiZWhhdmlvci4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKTogU2NhbGUgdGhlIGJhY2tpbmcgc3RvcmUgYnkgdGhlIHJlc29sdXRp
b24gc2NhbGUuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bG9naWNhbFNpemUpOiBE
aWZmZXJlbnRpYXRlIHRoZSBsb2dpY2FsIHNpemUgZnJvbSB0aGUgYmFja2luZyBzdG9yZSdzIHNp
emUuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aW50ZXJuYWxTaXplKTogVGhlIGJh
Y2tpbmcgc3RvcmUncyBzaXplLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDRy5jcHA6IFByZWZlciB0aGUgZXhwbGljaXQgdXNlIG9mIGxvZ2ljYWxTaXplIGFu
ZCBpbnRlcm5hbFNpemUuCisKKyAgICAgICAgRXhwbGljaXRseSBzdGF0ZSBhIDF4IHNjYWxlIGZv
ciBhbGwgSW1hZ2VCdWZmZXIgY3JlYXRpb24gc2l0ZXMKKyAgICAgICAgc2luY2UgdGhpcyBpcyB3
aGF0IHRoZXkgY3VycmVudGx5IGFzc3VtZS4KKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6Cisg
ICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jv
c3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BT
aGFkb3cuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW06Cisg
ICAgICAgICogcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJ
bWFnZUJ1ZmZlclRvb2xzLmNwcDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3Bw
OgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcDoKKworICAgICAgICBV
cGRhdGUgSW1hZ2VCdWZmZXI6OnNpemUoKSBjYWxscyB0byBuZXcgdmVyc2lvbnMuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcDoKKwogMjAxMi0wMi0yNyAgS2VuIEJ1Y2hh
bmFuICA8a2VucmJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFic29sdXRlIHBvc2l0aW9uZWQg
ZWxlbWVudHMgd2l0aCBJbmxpbmUgUmVsYXRpdmUgUG9zaXRpb25lZCBDb250YWluZXIgYXJlIG5v
dCBsYXlvdXQgY29ycmVjdGx5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmNwcAkocmV2aXNpb24gMTA5MDEzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxMyw3ICs1MTMsNyBAQCB2b2lk
IEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlCiAgICAgICAgIFVuYWNjZWxlcmF0
ZWQ7CiAjZW5kaWYKICAgICBEZWZlcnJhbE1vZGUgZGVmZXJyYWxNb2RlID0gc2hvdWxkRGVmZXIo
KSA/IERlZmVycmVkIDogTm9uRGVmZXJyZWQ7Ci0gICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoYnVmZmVyU2l6ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgcmVuZGVyaW5nTW9k
ZSwgZGVmZXJyYWxNb2RlKTsKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShidWZmZXJTaXplLCAxLCBDb2xvclNwYWNlRGV2aWNlUkdCLCByZW5kZXJpbmdNb2RlLCBkZWZl
cnJhbE1vZGUpOwogICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogICAg
IG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+c2NhbGUoRmxvYXRTaXplKGJ1ZmZlclNpemUud2lk
dGgoKSAvIGxvZ2ljYWxTaXplLndpZHRoKCksIGJ1ZmZlclNpemUuaGVpZ2h0KCkgLyBsb2dpY2Fs
U2l6ZS5oZWlnaHQoKSkpOwpAQCAtNTIzLDcgKzUyMyw4IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1l
bnQ6OmNyZWF0ZUltYWdlQnVmZmUKIAogI2lmIFVTRShKU0MpCiAgICAgSlNDOjpKU0xvY2sgbG9j
ayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5nbG9iYWxEYXRhKCktPmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KG1faW1hZ2VCdWZm
ZXItPmRhdGFTaXplKCkpOworICAgIHNpemVfdCBudW1CeXRlcyA9IDQgKiBtX2ltYWdlQnVmZmVy
LT5pbnRlcm5hbFNpemUoKS53aWR0aCgpICogbV9pbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCku
aGVpZ2h0KCk7CisgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5nbG9iYWxEYXRhKCktPmhl
YXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KG51bUJ5dGVzKTsKICNlbmRpZgogCiAjaWYgVVNFKElP
U1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgKEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpICYmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHAJKHJldmlzaW9uIDEwOTAxMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MjEsNyArMTUyMSw3
IEBAIHRlbXBsYXRlPGNsYXNzIFQ+IEludFJlY3QgQ2FudmFzUmVuZGVyaW4KIFBhc3NPd25QdHI8
SW1hZ2VCdWZmZXI+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlQ29tcG9zaXRpbmdC
dWZmZXIoY29uc3QgSW50UmVjdCYgYnVmZmVyUmVjdCkKIHsKICAgICBSZW5kZXJpbmdNb2RlIHJl
bmRlck1vZGUgPSBpc0FjY2VsZXJhdGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7
Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVyOjpjcmVhdGUoYnVmZmVyUmVjdC5zaXplKCksIENvbG9y
U3BhY2VEZXZpY2VSR0IsIHJlbmRlck1vZGUpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGJ1ZmZlclJlY3Quc2l6ZSgpLCAxLCBDb2xvclNwYWNlRGV2aWNlUkdCLCByZW5kZXJNb2Rl
KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNvbXBvc2l0ZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciogYnVmZmVyLCBjb25zdCBJbnRSZWN0JiBidWZmZXJSZWN0LCBDb21wb3NpdGVP
cGVyYXRvciBvcCkKQEAgLTE4ODMsNyArMTg4Myw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpwdXRJbWFnZUQKICAgICBJbnRTaXplIGRlc3RPZmZzZXQoc3RhdGljX2Nhc3Q8aW50
PihkeCksIHN0YXRpY19jYXN0PGludD4oZHkpKTsKICAgICBJbnRSZWN0IGRlc3RSZWN0ID0gZW5j
bG9zaW5nSW50UmVjdChjbGlwUmVjdCk7CiAgICAgZGVzdFJlY3QubW92ZShkZXN0T2Zmc2V0KTsK
LSAgICBkZXN0UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgpLCBidWZmZXItPnNpemUo
KSkpOworICAgIGRlc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KCksIGJ1ZmZlci0+
aW50ZXJuYWxTaXplKCkpKTsKICAgICBpZiAoZGVzdFJlY3QuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAgICAgSW50UmVjdCBzb3VyY2VSZWN0KGRlc3RSZWN0KTsKQEAgLTIwODksOSArMjA4
OSw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3VGV4dEkKICAgICAgICAg
SW50UmVjdCBtYXNrUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QodGV4dFJlY3QpOwogCiAjaWYgVVNF
KElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgT3duUHRyPEltYWdlQnVm
ZmVyPiBtYXNrSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1hc2tSZWN0LnNpemUoKSwgQ29s
b3JTcGFjZURldmljZVJHQiwgQWNjZWxlcmF0ZWQpOworICAgICAgICBPd25QdHI8SW1hZ2VCdWZm
ZXI+IG1hc2tJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUobWFza1JlY3Quc2l6ZSgpLCAxLCBD
b2xvclNwYWNlRGV2aWNlUkdCLCBBY2NlbGVyYXRlZCk7CiAjZWxzZQotICAgICAgICBPd25QdHI8
SW1hZ2VCdWZmZXI+IG1hc2tJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUobWFza1JlY3Quc2l6
ZSgpKTsKKyAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBtYXNrSW1hZ2UgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKG1hc2tSZWN0LnNpemUoKSwgMSk7CiAjZW5kaWYKIAogICAgICAgICBHcmFwaGlj
c0NvbnRleHQqIG1hc2tJbWFnZUNvbnRleHQgPSBtYXNrSW1hZ2UtPmNvbnRleHQoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmNwcAkocmV2aXNpb24gMTA5MDEzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMzMCwxMyArNTMz
MCwxMyBAQCBJbWFnZUJ1ZmZlciogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJCiAgICAgICAg
IEltYWdlQnVmZmVyKiBidWYgPSBtX2J1ZmZlcnNbaV0uZ2V0KCk7CiAgICAgICAgIGlmICghYnVm
KQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChidWYtPnNpemUoKSAhPSBzaXplKQor
ICAgICAgICBpZiAoYnVmLT5sb2dpY2FsU2l6ZSgpICE9IHNpemUpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgYnViYmxlVG9Gcm9udChpKTsKICAgICAgICAgcmV0dXJuIGJ1ZjsKICAg
ICB9CiAKLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHRlbXAgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHNpemUpOworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoc2l6ZSwgMSk7CiAgICAgaWYgKCF0ZW1wKQogICAgICAgICByZXR1cm4gMDsKICAgICBpID0g
c3RkOjptaW4obV9jYXBhY2l0eSAtIDEsIGkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJl
dmlzaW9uIDEwOTAxMykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDk0LDcgKzEwOTQsNyBAQCBEcmFnSW1hZ2VSZWYgRnJhbWU6Om5vZGVJbWFn
ZShOb2RlKiBub2RlCiAgICAgTGF5b3V0UmVjdCB0b3BMZXZlbFJlY3Q7CiAgICAgSW50UmVjdCBw
YWludGluZ1JlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KHJlbmRlcmVyLT5wYWludGluZ1Jvb3RS
ZWN0KHRvcExldmVsUmVjdCkpOwogCi0gICAgT3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIoSW1h
Z2VCdWZmZXI6OmNyZWF0ZShwYWludGluZ1JlY3Quc2l6ZSgpKSk7CisgICAgT3duUHRyPEltYWdl
QnVmZmVyPiBidWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShwYWludGluZ1JlY3Quc2l6ZSgpLCAx
LCBDb2xvclNwYWNlRGV2aWNlUkdCKSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVy
biAwOwogICAgIGJ1ZmZlci0+Y29udGV4dCgpLT50cmFuc2xhdGUoLXBhaW50aW5nUmVjdC54KCks
IC1wYWludGluZ1JlY3QueSgpKTsKQEAgLTExMTcsNyArMTExNyw3IEBAIERyYWdJbWFnZVJlZiBG
cmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0aW8KIAogICAgIEludFJlY3QgcGFpbnRpbmdSZWN0ID0g
ZW5jbG9zaW5nSW50UmVjdChzZWxlY3Rpb24oKS0+Ym91bmRzKCkpOwogCi0gICAgT3duUHRyPElt
YWdlQnVmZmVyPiBidWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShwYWludGluZ1JlY3Quc2l6ZSgp
KSk7CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShw
YWludGluZ1JlY3Quc2l6ZSgpLCAxLCBDb2xvclNwYWNlRGV2aWNlUkdCKSk7CiAgICAgaWYgKCFi
dWZmZXIpCiAgICAgICAgIHJldHVybiAwOwogICAgIGJ1ZmZlci0+Y29udGV4dCgpLT50cmFuc2xh
dGUoLXBhaW50aW5nUmVjdC54KCksIC1wYWludGluZ1JlY3QueSgpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5l
cmF0ZWRJbWFnZS5jcHAJKHJldmlzaW9uIDEwOTAxMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTUsNyArOTUsNyBAQCB2b2lkIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOjpkcmF3KEdyYXBo
CiAKIHZvaWQgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNw
YWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3AsIGNvbnN0
IEZsb2F0UmVjdCYgZHN0UmVjdCkKIHsKLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX3NpemUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIGNv
bnRleHQtPmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0
ZWQpOworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKG1fc2l6ZSwgMSwgQ29sb3JTcGFjZURldmljZVJHQiwgY29udGV4dC0+aXNBY2NlbGVy
YXRlZENvbnRleHQoKSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFp
bWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDEw
OTAxMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Nyw3ICs0ODcsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0ltYWdlKEltYWdlKiBpCiAgICAgICAgIGltYWdlLT5kcmF3KHRoaXMsIEZsb2F0
UmVjdChkZXN0LmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0dywgdGgpKSwgRmxvYXRSZWN0KHNyYy5s
b2NhdGlvbigpLCBGbG9hdFNpemUodHN3LCB0c2gpKSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSogaW1hZ2UsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRQ
b2ludCYgc3JjUG9pbnQsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBDb21wb3NpdGVPcGVyYXRv
ciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1RpbGVkSW1hZ2UoSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29u
c3QgSW50UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFBvaW50JiBzcmNQb2ludCwgY29uc3QgSW50
U2l6ZSYgdGlsZVNpemUsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlT
Y2FsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFpbWFnZSkKICAgICAgICAg
cmV0dXJuOwpAQCAtNDk1LDEwICs0OTUsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdU
aWxlZEltYWdlKEltYQogICAgIGlmICh1c2VMb3dRdWFsaXR5U2NhbGUpIHsKICAgICAgICAgSW50
ZXJwb2xhdGlvblF1YWxpdHkgcHJldmlvdXNJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IGltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHkoKTsKICAgICAgICAgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eShJbnRlcnBvbGF0aW9uTG93KTsKLSAgICAgICAgaW1hZ2UtPmRyYXdUaWxlZCh0aGlzLCByZWN0
LCBzcmNQb2ludCwgdGlsZVNpemUsIHN0eWxlQ29sb3JTcGFjZSwgb3ApOworICAgICAgICBpbWFn
ZS0+ZHJhd1RpbGVkKHRoaXMsIGRlc3RSZWN0LCBzcmNQb2ludCwgdGlsZVNpemUsIHN0eWxlQ29s
b3JTcGFjZSwgb3ApOwogICAgICAgICBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KHByZXZp
b3VzSW50ZXJwb2xhdGlvblF1YWxpdHkpOwogICAgIH0gZWxzZQotICAgICAgICBpbWFnZS0+ZHJh
d1RpbGVkKHRoaXMsIHJlY3QsIHNyY1BvaW50LCB0aWxlU2l6ZSwgc3R5bGVDb2xvclNwYWNlLCBv
cCk7CisgICAgICAgIGltYWdlLT5kcmF3VGlsZWQodGhpcywgZGVzdFJlY3QsIHNyY1BvaW50LCB0
aWxlU2l6ZSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3VGlsZWRJbWFnZShJbWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBjb25zdCBJbnRSZWN0JiBkZXN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LApAQCAtNTUzLDE0
ICs1NTMsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbQogICAg
IGZsb2F0IHRoID0gZGVzdC5oZWlnaHQoKTsKIAogICAgIGlmICh0c3cgPT0gLTEpCi0gICAgICAg
IHRzdyA9IGltYWdlLT53aWR0aCgpOworICAgICAgICB0c3cgPSBpbWFnZS0+bG9naWNhbFNpemUo
KS53aWR0aCgpOwogICAgIGlmICh0c2ggPT0gLTEpCi0gICAgICAgIHRzaCA9IGltYWdlLT5oZWln
aHQoKTsKKyAgICAgICAgdHNoID0gaW1hZ2UtPmxvZ2ljYWxTaXplKCkuaGVpZ2h0KCk7CiAKICAg
ICBpZiAodHcgPT0gLTEpCi0gICAgICAgIHR3ID0gaW1hZ2UtPndpZHRoKCk7CisgICAgICAgIHR3
ID0gaW1hZ2UtPmxvZ2ljYWxTaXplKCkud2lkdGgoKTsKICAgICBpZiAodGggPT0gLTEpCi0gICAg
ICAgIHRoID0gaW1hZ2UtPmhlaWdodCgpOworICAgICAgICB0aCA9IGltYWdlLT5sb2dpY2FsU2l6
ZSgpLmhlaWdodCgpOwogCiAgICAgaWYgKHVzZUxvd1F1YWxpdHlTY2FsZSkgewogICAgICAgICBJ
bnRlcnBvbGF0aW9uUXVhbGl0eSBwcmV2aW91c0ludGVycG9sYXRpb25RdWFsaXR5ID0gaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSgpOwpAQCAtNzU0LDcgKzc1NCw3IEBAIFBhc3NPd25QdHI8SW1h
Z2VCdWZmZXI+IEdyYXBoaWNzQ29udGV4dDoKICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3Jt
ID0gZ2V0Q1RNKCk7CiAgICAgSW50U2l6ZSBzY2FsZWRTaXplKHN0YXRpY19jYXN0PGludD4oY2Vp
bChzaXplLndpZHRoKCkgKiB0cmFuc2Zvcm0ueFNjYWxlKCkpKSwgc3RhdGljX2Nhc3Q8aW50Pihj
ZWlsKHNpemUuaGVpZ2h0KCkgKiB0cmFuc2Zvcm0ueVNjYWxlKCkpKSk7CiAKLSAgICBPd25QdHI8
SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2NhbGVkU2l6ZSwgQ29s
b3JTcGFjZURldmljZVJHQiwgaXNBY2NlbGVyYXRlZENvbnRleHQoKSA/IEFjY2VsZXJhdGVkIDog
VW5hY2NlbGVyYXRlZCk7CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHNjYWxlZFNpemUsIDEsIENvbG9yU3BhY2VEZXZpY2VSR0IsIGlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICgh
YnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAkocmV2aXNpb24gMTA5MDEz
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnRyYW5zZm9y
bUNvbG9yU3BhY2UoQ28KIAogaW5saW5lIHZvaWQgSW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0
VG9MdW1pbmFuY2VNYXNrKCkKIHsKLSAgICBJbnRSZWN0IGx1bWluYW5jZVJlY3QoSW50UG9pbnQo
KSwgc2l6ZSgpKTsKKyAgICBJbnRSZWN0IGx1bWluYW5jZVJlY3QoSW50UG9pbnQoKSwgaW50ZXJu
YWxTaXplKCkpOwogICAgIFJlZlB0cjxCeXRlQXJyYXk+IHNyY1BpeGVsQXJyYXkgPSBnZXRVbm11
bHRpcGxpZWRJbWFnZURhdGEobHVtaW5hbmNlUmVjdCk7CiAgICAgCiAgICAgdW5zaWduZWQgcGl4
ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAxMDkw
MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjZW5kaWYKQEAgLTQ2LDcgKzQ3LDYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogICAg
IGNsYXNzIEltYWdlOwogICAgIGNsYXNzIEltYWdlRGF0YTsKICAgICBjbGFzcyBJbnRQb2ludDsK
QEAgLTc3LDIzICs3NywyOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEltYWdlQnVmZmVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAg
cHVibGljOgogICAgICAgICAvLyBXaWxsIHJldHVybiBhIG51bGwgcG9pbnRlciBvbiBhbGxvY2F0
aW9uIGZhaWx1cmUuCi0gICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBjcmVh
dGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gQ29sb3JTcGFj
ZURldmljZVJHQiwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZCwg
RGVmZXJyYWxNb2RlIGRlZmVycmFsTW9kZSA9IE5vbkRlZmVycmVkKQorICAgICAgICBzdGF0aWMg
UGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IENvbG9yU3BhY2VE
ZXZpY2VSR0IsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IFVuYWNjZWxlcmF0ZWQsIERl
ZmVycmFsTW9kZSBkZWZlcnJhbE1vZGUgPSBOb25EZWZlcnJlZCkKICAgICAgICAgewogICAgICAg
ICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgICAgICBPd25QdHI8SW1hZ2VCdWZm
ZXI+IGJ1ZiA9IGFkb3B0UHRyKG5ldyBJbWFnZUJ1ZmZlcihzaXplLCBjb2xvclNwYWNlLCByZW5k
ZXJpbmdNb2RlLCBkZWZlcnJhbE1vZGUsIHN1Y2Nlc3MpKTsKLSAgICAgICAgICAgIGlmIChzdWNj
ZXNzKQotICAgICAgICAgICAgICAgIHJldHVybiBidWYucmVsZWFzZSgpOwotICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBmbG9hdCBzY2FsZWRXaWR0aCA9IGNlaWxmKHJl
c29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSk7CisgICAgICAgICAgICBmbG9hdCBzY2FsZWRI
ZWlnaHQgPSBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKTsKKyAgICAgICAg
ICAgIEludFNpemUgaW50ZXJuYWxTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOworCisg
ICAgICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZiA9IGFkb3B0UHRyKG5ldyBJbWFnZUJ1
ZmZlcihpbnRlcm5hbFNpemUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIGRlZmVycmFsTW9k
ZSwgc3VjY2VzcykpOworICAgICAgICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgICAgICAgICBidWYtPm1fbG9naWNhbFNpemUgPSBzaXpl
OworICAgICAgICAgICAgYnVmLT5tX3Jlc29sdXRpb25TY2FsZSA9IHJlc29sdXRpb25TY2FsZTsK
KyAgICAgICAgICAgIGJ1Zi0+Y29udGV4dCgpLT5zY2FsZShGbG9hdFNpemUocmVzb2x1dGlvblNj
YWxlLCByZXNvbHV0aW9uU2NhbGUpKTsKKyAgICAgICAgICAgIHJldHVybiBidWYucmVsZWFzZSgp
OwogICAgICAgICB9CiAKICAgICAgICAgfkltYWdlQnVmZmVyKCk7CiAKLSAgICAgICAgY29uc3Qg
SW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgICAgICBpbnQgd2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX3NpemUud2lkdGgoKTsgfQotICAgICAgICBpbnQgaGVpZ2h0
KCkgY29uc3QgeyByZXR1cm4gbV9zaXplLmhlaWdodCgpOyB9Ci0gICAgICAgIAotICAgICAgICBz
aXplX3QgZGF0YVNpemUoKSBjb25zdDsKLSAgICAgICAgCisgICAgICAgIC8vIFRoZSBhY3R1YWwg
cmVzb2x1dGlvbiBvZiB0aGUgYmFja2luZyBzdG9yZQorICAgICAgICBjb25zdCBJbnRTaXplJiBp
bnRlcm5hbFNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICAgICAgY29uc3QgSW50
U2l6ZSYgbG9naWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9CisKICAg
ICAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KCkgY29uc3Q7CiAKICAgICAgICAgUGFzc1Jl
ZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3Jl
KSBjb25zdDsKQEAgLTExMSw3ICsxMTcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9y
U3BhY2UgZHN0Q29sb3JTcGFjZSk7CiAgICAgICAgIHZvaWQgcGxhdGZvcm1UcmFuc2Zvcm1Db2xv
clNwYWNlKGNvbnN0IFZlY3RvcjxpbnQ+Jik7CiAjZWxzZQotICAgICAgICBBZmZpbmVUcmFuc2Zv
cm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgxLCAwLCAw
LCAtMSwgMCwgbV9zaXplLmhlaWdodCgpKTsgfQorICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYmFz
ZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAtMSwg
MCwgaW50ZXJuYWxTaXplKCkuaGVpZ2h0KCkpOyB9CiAjZW5kaWYKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiAgICAgICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBj
b25zdDsKQEAgLTEyMSw3ICsxMjcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgVVNFKENH
KQogICAgICAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwogI2VuZGlmCi0KICAgICAgICAgdm9pZCBjbGlw
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwogCiAgICAgICAgIHZv
aWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0x
KSwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29sIHVzZUxvd1F1
YWxpdHlTY2FsZSA9IGZhbHNlKTsKQEAgLTEzNiw4ICsxNDEsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICBwcml2YXRlOgogICAgICAgICBJbWFnZUJ1ZmZlckRhdGEgbV9kYXRhOwotCiAg
ICAgICAgIEludFNpemUgbV9zaXplOworICAgICAgICBJbnRTaXplIG1fbG9naWNhbFNpemU7Cisg
ICAgICAgIGZsb2F0IG1fcmVzb2x1dGlvblNjYWxlOwogICAgICAgICBPd25QdHI8R3JhcGhpY3ND
b250ZXh0PiBtX2NvbnRleHQ7CiAKICNpZiAhVVNFKENHKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAJKHJldmlzaW9uIDEwOTAxMykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MywxNCArNzMsMTQgQEAgcHVibGljOgogICAgICAgICBtX2J1ZmZlcklu
VXNlID0gdHJ1ZTsKICNlbmRpZgogICAgICAgICAvLyBXZSBkbyBub3QgbmVlZCB0byByZWNyZWF0
ZSB0aGUgYnVmZmVyIGlmIHRoZSBjdXJyZW50IGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2guCi0gICAg
ICAgIGlmIChtX2ltYWdlQnVmZmVyICYmIG1faW1hZ2VCdWZmZXItPndpZHRoKCkgPj0gc2l6ZS53
aWR0aCgpICYmIG1faW1hZ2VCdWZmZXItPmhlaWdodCgpID49IHNpemUuaGVpZ2h0KCkpCisgICAg
ICAgIGlmIChtX2ltYWdlQnVmZmVyICYmIG1faW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkud2lk
dGgoKSA+PSBzaXplLndpZHRoKCkgJiYgbV9pbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKS5oZWln
aHQoKSA+PSBzaXplLmhlaWdodCgpKQogICAgICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIu
Z2V0KCk7CiAKICAgICAgICAgLy8gUm91bmQgdG8gdGhlIG5lYXJlc3QgMzIgcGl4ZWxzIHNvIHdl
IGRvIG5vdCBncm93IHRoZSBidWZmZXIgZm9yIHNpbWlsYXIgc2l6ZWQgcmVxdWVzdHMuCiAgICAg
ICAgIEludFNpemUgcm91bmRlZFNpemUocm91bmRVcFRvTXVsdGlwbGVPZjMyKHNpemUud2lkdGgo
KSksIHJvdW5kVXBUb011bHRpcGxlT2YzMihzaXplLmhlaWdodCgpKSk7CiAKICAgICAgICAgY2xl
YXJTY3JhdGNoQnVmZmVyKCk7Ci0gICAgICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKHJvdW5kZWRTaXplKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUocm91bmRlZFNpemUsIDEpOwogICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5n
ZXQoKTsKICAgICB9CiAKQEAgLTQ0MCw3ICs0NDAsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdT
aGFkb3dCdWZmZXIoR3JhcGhpCiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoKmdyYXBoaWNzQ29udGV4dCk7CiAKLSAgICBJbnRTaXplIGJ1ZmZlclNpemUgPSBtX2xh
eWVySW1hZ2UtPnNpemUoKTsKKyAgICBJbnRTaXplIGJ1ZmZlclNpemUgPSBtX2xheWVySW1hZ2Ut
PmludGVybmFsU2l6ZSgpOwogICAgIGlmIChidWZmZXJTaXplICE9IG1fbGF5ZXJTaXplKSB7CiAg
ICAgICAgIC8vIFRoZSByZWN0IHBhc3NlZCB0byBjbGlwVG9JbWFnZUJ1ZmZlcigpIGhhcyB0byBi
ZSB0aGUgc2l6ZSBvZiB0aGUgZW50aXJlIGJ1ZmZlciwKICAgICAgICAgLy8gYnV0IHdlIG1heSBu
b3QgaGF2ZSBjbGVhcmVkIGl0IGFsbCwgc28gY2xpcCB0byB0aGUgZmlsbGVkIHBhcnQgZmlyc3Qu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAkocmV2aXNpb24gMTA5MDEzKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc2LDExICs3Niw2IEBAIEltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIo
KQogICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShtX2RhdGEubV9zdXJmYWNlKTsKIH0KIAotc2l6
ZV90IEltYWdlQnVmZmVyOjpkYXRhU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2l6ZS53
aWR0aCgpICogbV9zaXplLmhlaWdodCgpICogNDsKLX0KLQogR3JhcGhpY3NDb250ZXh0KiBJbWFn
ZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0cuY3BwCShyZXZpc2lvbiAxMDkwMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4
LDcgKzEwOCw3IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VJbWFnZURhdGEodm9pZCosIGNvbnMKIH0K
IAogSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIENvbG9yU3Bh
Y2UgaW1hZ2VDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIERlZmVycmFs
TW9kZSwgYm9vbCYgc3VjY2VzcykKLSAgICA6IG1fZGF0YShzaXplKQorICAgIDogbV9kYXRhKHNp
emUpIC8vIE5PVEU6IFRoZSBpbnB1dCBoZXJlIGlzbid0IGltcG9ydGFudCBhcyBJbWFnZUJ1ZmZl
ckRhdGFDRydzIGNvbnN0cnVjdG9yIGp1c3QgaWdub3JlcyBpdC4KICAgICAsIG1fc2l6ZShzaXpl
KQogewogICAgIHN1Y2Nlc3MgPSBmYWxzZTsgIC8vIE1ha2UgZWFybHkgcmV0dXJuIG1lYW4gZmFp
bHVyZS4KQEAgLTEyMSw4ICsxMjEsOCBAQCBJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3Qg
SW50U2l6ZSYgCiAKICAgICAvLyBQcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzCiAgICAgbV9kYXRh
Lm1fYnl0ZXNQZXJSb3cgPSA0ICogd2lkdGg7Ci0gICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92
ZXJmbG93PiBkYXRhU2l6ZSA9IGhlaWdodCAqIG1fZGF0YS5tX2J5dGVzUGVyUm93OwotICAgIGlm
IChkYXRhU2l6ZS5oYXNPdmVyZmxvd2VkKCkpCisgICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92
ZXJmbG93PiBudW1CeXRlcyA9IGhlaWdodCAqIG1fZGF0YS5tX2J5dGVzUGVyUm93OworICAgIGlm
IChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCiAgICAgICAgIHJldHVybjsKIAogI2lmIFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCkBAIC0xNjIsNyArMTYyLDcgQEAgSW1hZ2VC
dWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIAogICAgICAgICBtX2RhdGEubV9iaXRt
YXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0OwogICAgICAgICBjZ0NvbnRl
eHQuYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUobV9kYXRhLm1fZGF0YSwgd2lkdGgudW5z
YWZlR2V0KCksIGhlaWdodC51bnNhZmVHZXQoKSwgOCwgbV9kYXRhLm1fYnl0ZXNQZXJSb3cudW5z
YWZlR2V0KCksIG1fZGF0YS5tX2NvbG9yU3BhY2UsIG1fZGF0YS5tX2JpdG1hcEluZm8pKTsKICAg
ICAgICAgLy8gQ3JlYXRlIGEgbGl2ZSBpbWFnZSB0aGF0IHdyYXBzIHRoZSBkYXRhLgotICAgICAg
ICBtX2RhdGEubV9kYXRhUHJvdmlkZXIuYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhE
YXRhKDAsIG1fZGF0YS5tX2RhdGEsIGRhdGFTaXplLnVuc2FmZUdldCgpLCByZWxlYXNlSW1hZ2VE
YXRhKSk7CisgICAgICAgIG1fZGF0YS5tX2RhdGFQcm92aWRlci5hZG9wdENGKENHRGF0YVByb3Zp
ZGVyQ3JlYXRlV2l0aERhdGEoMCwgbV9kYXRhLm1fZGF0YSwgbnVtQnl0ZXMudW5zYWZlR2V0KCks
IHJlbGVhc2VJbWFnZURhdGEpKTsKICAgICB9CiAKICAgICBpZiAoIWNnQ29udGV4dCkKQEAgLTE4
MiwxMSArMTgyLDYgQEAgSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpCiB7CiB9CiAKLXNpemVf
dCBJbWFnZUJ1ZmZlcjo6ZGF0YVNpemUoKSBjb25zdAotewotICAgIHJldHVybiBtX3NpemUuaGVp
Z2h0KCkgKiBtX2RhdGEubV9ieXRlc1BlclJvdy51bnNhZmVHZXQoKTsKLX0KLQogR3JhcGhpY3ND
b250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0CiB7CiAjaWYgZGVmaW5lZChCVUlM
RElOR19PTl9MSU9OKQpAQCAtMjIyLDcgKzIxNyw3IEBAIE5hdGl2ZUltYWdlUHRyIEltYWdlQnVm
ZmVyOjpjb3B5TmF0aXZlSW0KICAgICBpZiAoIW1fY29udGV4dC0+aXNBY2NlbGVyYXRlZENvbnRl
eHQoKSkgewogICAgICAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgewogICAgICAgICBjYXNlIERv
bnRDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBDR0ltYWdlQ3JlYXRlKG1f
c2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDgsIDMyLCBtX2RhdGEubV9ieXRlc1BlclJv
dy51bnNhZmVHZXQoKSwgbV9kYXRhLm1fY29sb3JTcGFjZSwgbV9kYXRhLm1fYml0bWFwSW5mbywg
bV9kYXRhLm1fZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnRE
ZWZhdWx0KTsKKyAgICAgICAgICAgIGltYWdlID0gQ0dJbWFnZUNyZWF0ZShpbnRlcm5hbFNpemUo
KS53aWR0aCgpLCBpbnRlcm5hbFNpemUoKS5oZWlnaHQoKSwgOCwgMzIsIG1fZGF0YS5tX2J5dGVz
UGVyUm93LnVuc2FmZUdldCgpLCBtX2RhdGEubV9jb2xvclNwYWNlLCBtX2RhdGEubV9iaXRtYXBJ
bmZvLCBtX2RhdGEubV9kYXRhUHJvdmlkZXIuZ2V0KCksIDAsIHRydWUsIGtDR1JlbmRlcmluZ0lu
dGVudERlZmF1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ29weUJhY2tp
bmdTdG9yZToKICAgICAgICAgICAgIGltYWdlID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2Uo
Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7CkBAIC0yNTUsMjggKzI1MCwzNCBAQCB2b2lk
IEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgZWxzZQogICAgICAgICBp
bWFnZS5hZG9wdENGKGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpOwogCi0g
ICAgZGVzdENvbnRleHQtPmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9zaXplLCBjb2xv
clNwYWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3ApOworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNy
Y1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25T
Y2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUpOworICAgIGRlc3RDb250ZXh0LT5kcmF3TmF0aXZlSW1h
Z2UoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSgpLCBjb2xvclNwYWNlLCBkZXN0UmVjdCwgYWRq
dXN0ZWRTcmNSZWN0LCBvcCk7CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCogZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogeworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1Jl
Y3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2Fs
ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOworCiAgICAgaWYgKCFtX2NvbnRleHQtPmlzQWNjZWxlcmF0
ZWRDb250ZXh0KCkpIHsKICAgICAgICAgaWYgKGRlc3RDb250ZXh0ID09IG1fY29udGV4dCB8fCBk
ZXN0Q29udGV4dC0+aXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewogICAgICAgICAgICAgUmVmUHRy
PEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpOyAvLyBEcmF3aW5nIGlu
dG8gb3VyIG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgotICAgICAgICAgICAgY29weS0+
ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CisgICAgICAgICAgICBjb3B5LT5kcmF3
UGF0dGVybihkZXN0Q29udGV4dCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IGNvcHlJbWFnZShE
b250Q29weUJhY2tpbmdTdG9yZSk7Ci0gICAgICAgICAgICBpbWFnZUZvclJlbmRlcmluZy0+ZHJh
d1BhdHRlcm4oZGVzdENvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBz
dHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CisgICAgICAgICAgICBpbWFnZUZvclJlbmRl
cmluZy0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRy
YW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKICAgICAgICAg
fQogICAgIH0gZWxzZSB7CiAgICAgICAgIFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZShD
b3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQs
IHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBk
ZXN0UmVjdCk7CisgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBhZGp1c3Rl
ZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBk
ZXN0UmVjdCk7CiAgICAgfQogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dFRvQ2xpcCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAogewogICAg
IENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRleHRUb0NsaXAgPSBjb250ZXh0VG9DbGlwLT5wbGF0
Zm9ybUNvbnRleHQoKTsKKyAgICAvLyBGSVhNRTogVGhpcyBpbWFnZSBuZWVkcyB0byBiZSBncmF5
c2NhbGUgdG8gYmUgdXNlZCBhcyBhbiBhbHBoYSBtYXNrIGhlcmUuCiAgICAgUmV0YWluUHRyPENH
SW1hZ2VSZWY+IGltYWdlKEFkb3B0Q0YsIGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSkpOwogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHRUb0NsaXAs
IHJlY3QueCgpLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpOwogICAgIENHQ29udGV4dFNjYWxl
Q1RNKHBsYXRmb3JtQ29udGV4dFRvQ2xpcCwgMSwgLTEpOwpAQCAtMjkzLDcgKzI5NCw3IEBAIFBh
c3NSZWZQdHI8Qnl0ZUFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW4KICAgICAgICAgbV9kYXRhLm1f
bGFzdEZsdXNoVGltZSA9IGN1cnJlbnRUaW1lTVMoKTsKICNlbmRpZgogICAgIH0KLSAgICByZXR1
cm4gbV9kYXRhLmdldERhdGEocmVjdCwgbV9zaXplLCBtX2NvbnRleHQtPmlzQWNjZWxlcmF0ZWRD
b250ZXh0KCksIHRydWUpOworICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShyZWN0LCBpbnRlcm5h
bFNpemUoKSwgbV9jb250ZXh0LT5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCB0cnVlKTsKIH0KIAog
UGFzc1JlZlB0cjxCeXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VE
YXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CkBAIC0zMDQsMjMgKzMwNSwyNCBAQCBQYXNz
UmVmUHRyPEJ5dGVBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFByCiAgICAgICAgIG1fZGF0YS5tX2xh
c3RGbHVzaFRpbWUgPSBjdXJyZW50VGltZU1TKCk7CiAjZW5kaWYKICAgICB9Ci0gICAgcmV0dXJu
IG1fZGF0YS5nZXREYXRhKHJlY3QsIG1fc2l6ZSwgbV9jb250ZXh0LT5pc0FjY2VsZXJhdGVkQ29u
dGV4dCgpLCBmYWxzZSk7CisgICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKHJlY3QsIGludGVybmFs
U2l6ZSgpLCBtX2NvbnRleHQtPmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIGZhbHNlKTsKIH0KIAog
dm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KE11bHRpcGx5IG11bHRpcGxpZWQsIEJ5dGVB
cnJheSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewogICAgIGlmICghbV9jb250
ZXh0LT5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIG1fZGF0YS5wdXREYXRhKHNv
dXJjZSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX3NpemUsIG1fY29udGV4
dC0+aXNBY2NlbGVyYXRlZENvbnRleHQoKSwgbXVsdGlwbGllZCA9PSBVbm11bHRpcGxpZWQpOwor
ICAgICAgICBtX2RhdGEucHV0RGF0YShzb3VyY2UsIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QsIGRl
c3RQb2ludCwgaW50ZXJuYWxTaXplKCksIG1fY29udGV4dC0+aXNBY2NlbGVyYXRlZENvbnRleHQo
KSwgbXVsdGlwbGllZCA9PSBVbm11bHRpcGxpZWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKICAgICAvLyBNYWtlIGEg
Y29weSBvZiB0aGUgc291cmNlIHRvIGVuc3VyZSB0aGUgYml0cyBkb24ndCBjaGFuZ2UgYmVmb3Jl
IGJlaW5nIGRyYXduCiAgICAgSW50U2l6ZSBzb3VyY2VDb3B5U2l6ZShzb3VyY2VSZWN0LndpZHRo
KCksIHNvdXJjZVJlY3QuaGVpZ2h0KCkpOwotICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc291cmNl
Q29weSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlQ29weVNpemUsIENvbG9yU3BhY2VEZXZp
Y2VSR0IsIFVuYWNjZWxlcmF0ZWQpOworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc291cmNlQ29w
eSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlQ29weVNpemUsIDEsIENvbG9yU3BhY2VEZXZp
Y2VSR0IsIFVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghc291cmNlQ29weSkKICAgICAgICAgcmV0
dXJuOwotICAgIHNvdXJjZUNvcHktPm1fZGF0YS5wdXREYXRhKHNvdXJjZSwgc291cmNlU2l6ZSwg
c291cmNlUmVjdCwgSW50UG9pbnQoLXNvdXJjZVJlY3QueCgpLCAtc291cmNlUmVjdC55KCkpLCBz
b3VyY2VDb3B5LT5zaXplKCksIHNvdXJjZUNvcHktPmNvbnRleHQoKS0+aXNBY2NlbGVyYXRlZENv
bnRleHQoKSwgbXVsdGlwbGllZCA9PSBVbm11bHRpcGxpZWQpOworCisgICAgc291cmNlQ29weS0+
bV9kYXRhLnB1dERhdGEoc291cmNlLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJbnRQb2ludCgt
c291cmNlUmVjdC54KCksIC1zb3VyY2VSZWN0LnkoKSksIHNvdXJjZUNvcHktPmludGVybmFsU2l6
ZSgpLCBzb3VyY2VDb3B5LT5jb250ZXh0KCktPmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIG11bHRp
cGxpZWQgPT0gVW5tdWx0aXBsaWVkKTsKIAogICAgIC8vIFNldCB1cCBjb250ZXh0IGZvciB1c2lu
ZyBkcmF3SW1hZ2UgYXMgYSBkaXJlY3QgYml0IGNvcHkKICAgICBDR0NvbnRleHRSZWYgZGVzdENv
bnRleHQgPSBjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpOwpAQCAtMzMzLDcgKzMzNSw3IEBA
IHZvaWQgSW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJheShNdWx0aXBseSAKICAgICBDR0NvbnRleHRT
ZXRTaGFkb3dXaXRoQ29sb3IoZGVzdENvbnRleHQsIENHU2l6ZVplcm8sIDAsIDApOwogCiAgICAg
Ly8gRHJhdyB0aGUgaW1hZ2UgaW4gQ0cgY29vcmRpbmF0ZSBzcGFjZQotICAgIEludFBvaW50IGRl
c3RQb2ludEluQ0dDb29yZHMoZGVzdFBvaW50LngoKSArIHNvdXJjZVJlY3QueCgpLCBtX3NpemUu
aGVpZ2h0KCkgLSAoZGVzdFBvaW50LnkoKStzb3VyY2VSZWN0LnkoKSkgLSBzb3VyY2VSZWN0Lmhl
aWdodCgpKTsKKyAgICBJbnRQb2ludCBkZXN0UG9pbnRJbkNHQ29vcmRzKGRlc3RQb2ludC54KCkg
KyBzb3VyY2VSZWN0LngoKSwgaW50ZXJuYWxTaXplKCkuaGVpZ2h0KCkgLSAoZGVzdFBvaW50Lnko
KStzb3VyY2VSZWN0LnkoKSkgLSBzb3VyY2VSZWN0LmhlaWdodCgpKTsKICAgICBJbnRSZWN0IGRl
c3RSZWN0SW5DR0Nvb3JkcyhkZXN0UG9pbnRJbkNHQ29vcmRzLCBzb3VyY2VDb3B5U2l6ZSk7CiAg
ICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHNvdXJjZUNvcHlJbWFnZShBZG9wdENGLCBzb3VyY2VD
b3B5LT5jb3B5TmF0aXZlSW1hZ2UoKSk7CiAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGRlc3RDb250
ZXh0LCBkZXN0UmVjdEluQ0dDb29yZHMsIHNvdXJjZUNvcHlJbWFnZS5nZXQoKSk7CkBAIC00MTgs
MjEgKzQyMCwyMCBAQCBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpCiAK
ICAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKICAgICAgICAgLy8gSlBF
R3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNv
bXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCi0gICAgICAgIGFyciA9IGdldFByZW11bHRpcGxpZWRJ
bWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV9zaXplKSk7CisgICAgICAgIGFyciA9
IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgwLCAwKSwgaW50ZXJu
YWxTaXplKCkpKTsKIAogICAgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhID0gYXJyLT5kYXRhKCk7
Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd2lkdGgoKSAqIGhlaWdodCgpOyBpKyspCisg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGludGVy
bmFsU2l6ZSgpLmhlaWdodCgpOyBpKyspCiAgICAgICAgICAgICBkYXRhW2kgKiA0ICsgM10gPSAy
NTU7IC8vIFRoZSBpbWFnZSBpcyBhbHJlYWR5IHByZW11bHRpcGxpZWQsIHNvIHdlIGp1c3QgbmVl
ZCB0byBtYWtlIGl0IG9wYXF1ZS4KIAogICAgICAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJS
ZWY+IGRhdGFQcm92aWRlcjsKICAgICAKLSAgICAgICAgZGF0YVByb3ZpZGVyLmFkb3B0Q0YoQ0dE
YXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKiB3aWR0aCgpICogaGVpZ2h0
KCksIDApKTsKKyAgICAgICAgZGF0YVByb3ZpZGVyLmFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVh
dGVXaXRoRGF0YSgwLCBkYXRhLCA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGludGVybmFs
U2l6ZSgpLmhlaWdodCgpLCAwKSk7CiAgICAgCiAgICAgICAgIGlmICghZGF0YVByb3ZpZGVyKQog
ICAgICAgICAgICAgcmV0dXJuICJkYXRhOiwiOwogCi0gICAgICAgIGltYWdlLmFkb3B0Q0YoQ0dJ
bWFnZUNyZWF0ZSh3aWR0aCgpLCBoZWlnaHQoKSwgOCwgMzIsIDQgKiB3aWR0aCgpLAorICAgICAg
ICBpbWFnZS5hZG9wdENGKENHSW1hZ2VDcmVhdGUoaW50ZXJuYWxTaXplKCkud2lkdGgoKSwgaW50
ZXJuYWxTaXplKCkuaGVpZ2h0KCksIDgsIDMyLCA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENHQ29sb3JTcGFjZUNyZWF0ZURl
dmljZVJHQigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYUxhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUHJvdmlkZXIuZ2V0KCks
IDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CiAgICAgfSBlbHNlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURyb3BTaGFkb3cuY3BwCShyZXZpc2lvbiAxMDkwMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlCiAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9z
aGFkb3dDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CiAKICAgICAvLyBUT0RPOiBEaXJlY3Qg
cGl4ZWwgYWNjZXNzIHRvIEltYWdlQnVmZmVyIHdvdWxkIGF2b2lkIGNvcHlpbmcgdGhlIEltYWdl
RGF0YS4KLSAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPnNp
emUoKSk7CisgICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT5p
bnRlcm5hbFNpemUoKSk7CiAgICAgUmVmUHRyPEJ5dGVBcnJheT4gc3JjUGl4ZWxBcnJheSA9IHJl
c3VsdEltYWdlLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNoYWRvd0FyZWEpOwogCiAgICAg
Y29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzcmNQaXhlbEFycmF5LT5kYXRhKCksIHNoYWRv
d0FyZWEuc2l6ZSgpLCA0ICogc2hhZG93QXJlYS5zaXplKCkud2lkdGgoKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuY3BwCShyZXZpc2lvbiAxMDkwMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
Nyw3ICsxMjcsNyBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0Ojphc0ltYWdlQnVmZmVyCiAg
ICAgICAgIHJldHVybiAwOwogICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KQogICAgICAgICBy
ZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgQ29sb3JT
cGFjZUxpbmVhclJHQiwgbV9maWx0ZXItPnJlbmRlcmluZ01vZGUoKSk7CisgICAgbV9pbWFnZUJ1
ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCksIDEsIENvbG9yU3BhY2VMaW5lYXJSR0IsIG1fZmlsdGVyLT5yZW5kZXJpbmdNb2RlKCkpOwog
ICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJl
Y3Quc2l6ZSgpKTsKICAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAg
IG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEJ5dGVBcnJheShQcmVtdWx0aXBsaWVkLCBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGlu
YXRpb25SZWN0LCBJbnRQb2ludCgpKTsKQEAgLTI2NCw3ICsyNjQsNyBAQCBJbWFnZUJ1ZmZlciog
RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1CiAgICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7CiAg
ICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsK
LSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKSwgQ29sb3JTcGFjZUxpbmVhclJHQiwgbV9maWx0ZXItPnJlbmRlcmlu
Z01vZGUoKSk7CisgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
bV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIDEsIENvbG9yU3BhY2VMaW5lYXJSR0IsIG1fZmls
dGVyLT5yZW5kZXJpbmdNb2RlKCkpOwogICAgIGlmICghbV9pbWFnZUJ1ZmZlclJlc3VsdCkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNvbnRleHQo
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZl
clF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9JbWFnZUJ1ZmZlclF0LmNwcAkocmV2aXNpb24gMTA5MDEzKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwOSwxMSArMTA5LDYgQEAgSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpCiB7CiB9CiAKLXNp
emVfdCBJbWFnZUJ1ZmZlcjo6ZGF0YVNpemUoKSBjb25zdAotewotICAgIHJldHVybiBtX3NpemUu
d2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSAqIDQ7Ci19Ci0KIEdyYXBoaWNzQ29udGV4dCogSW1h
Z2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAogewogICAgIEFTU0VSVChtX2RhdGEubV9wYWludGVy
LT5pc0FjdGl2ZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHJldmlzaW9uIDEwOTAxMykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lh
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDExICsxNjksNiBAQCBHcmFwaGljc0NvbnRleHQq
IEltYWdlQnVmZmVyOjpjb250ZXh0KCkgCiAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKIH0K
IAotc2l6ZV90IEltYWdlQnVmZmVyOjpkYXRhU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
c2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpICogNDsKLX0KLQogUGFzc1JlZlB0cjxJbWFn
ZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikg
Y29uc3QKIHsKICAgICByZXR1cm4gQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmNyZWF0ZSgq
bV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0LmJpdG1hcCgpLCBjb3B5QmVoYXZpb3IgPT0gQ29weUJh
Y2tpbmdTdG9yZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDEw
OTAxMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1D
b250ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw3ICsyNDEsNyBAQCB2b2lkIFBs
YXRmb3JtQ29udGV4dFNraWE6OmJlZ2luTGF5ZXJDbGlwCiAKICAgICBjYW52YXMoKS0+Y2xpcFJl
Y3QoYm91bmRzKTsKIAotICAgIGlmIChpbWFnZUJ1ZmZlci0+c2l6ZSgpLmlzRW1wdHkoKSkKKyAg
ICBpZiAoaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgY2FudmFzKCktPnNhdmVMYXllckFscGhhKCZib3VuZHMsIDI1NSwKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1h
Z2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDEwOTAxMykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1h
Z2VCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRS
ZWYobmV3IEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcik7IH0KICAgICB+Qml0bWFwVGV4dHVyZUlt
YWdlQnVmZmVyKCkgeyBkZXN0cm95KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpIHsg
bV9pbWFnZS5jbGVhcigpOyB9Ci0gICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2ltYWdlLT5zaXplKCk7IH0KKyAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1faW1hZ2UtPmludGVybmFsU2l6ZSgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRp
ZFJlc2V0KCk7CiAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lt
YWdlOyB9CiAgICAgaW5saW5lIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KCkgeyBy
ZXR1cm4gbV9pbWFnZSA/IG1faW1hZ2UtPmNvbnRleHQoKSA6IDA7IH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVm
ZmVyV2luQ0UuY3BwCShyZXZpc2lvbiAxMDkwMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODgsMTEgKzg4LDYgQEAgSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpCiB7CiB9CiAKLXNpemVf
dCBJbWFnZUJ1ZmZlcjo6ZGF0YVNpemUoKSBjb25zdAotewotICAgIHJldHVybiBtX3NpemUud2lk
dGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSAqIDQ7Ci19Ci0KIEdyYXBoaWNzQ29udGV4dCogSW1hZ2VC
dWZmZXI6OmNvbnRleHQoKSBjb25zdAogewogICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFn
ZUJ1ZmZlcld4LmNwcAkocmV2aXNpb24gMTA5MDEzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEy
ICs0OCw2IEBAIEltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKQogewogfQogCi1zaXplX3QgSW1h
Z2VCdWZmZXI6OmRhdGFTaXplKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiAwOwotfQotCiBHcmFwaGljc0NvbnRleHQqIEltYWdlQnVmZmVyOjpjb250ZXh0KCkg
Y29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbQkocmV2aXNpb24gMTA5MDEzKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC01ODksNyArNTg5LDcgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZU1hYzo6cGFp
bnQoU2Nyb2xsYmFyKgogICAgICAgICBJbnRSZWN0IGJ1ZmZlclJlY3Qoc2Nyb2xsYmFyLT5mcmFt
ZVJlY3QoKSk7CiAgICAgICAgIGJ1ZmZlclJlY3QuaW50ZXJzZWN0KGRhbWFnZVJlY3QpOwogICAg
ICAgICAKLSAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoYnVmZmVyUmVjdC5zaXplKCkpOworICAgICAgICBPd25QdHI8SW1hZ2VCdWZm
ZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwg
MSk7CiAgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVu
ZGVyZXIuY3BwCShyZXZpc2lvbiAxMDkwMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
RmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjIsNyArMzIyLDgg
QEAgdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6cHJlcGFyZSgpCiAgICAgLy8gc291cmNlIGlt
YWdlIHNpemVzIHNldC4gV2UganVzdCBuZWVkIHRvIGF0dGFjaCB0aGUgZ3JhcGhpYwogICAgIC8v
IGJ1ZmZlciBpZiB3ZSBoYXZlIG5vdCB5ZXQgZG9uZSBzby4KICAgICBpZiAoIW1fZ3JhcGhpY3NC
dWZmZXJBdHRhY2hlZCkgewotICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKEludFNpemUobV9zb3VyY2VEcmF3aW5nUmVnaW9uLndpZHRoKCksIG1fc291cmNlRHJhd2lu
Z1JlZ2lvbi5oZWlnaHQoKSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIHJlbmRlcmluZ01vZGUoKSkp
OworICAgICAgICBJbnRTaXplIGxvZ2ljYWxTaXplKG1fc291cmNlRHJhd2luZ1JlZ2lvbi53aWR0
aCgpLCBtX3NvdXJjZURyYXdpbmdSZWdpb24uaGVpZ2h0KCkpOworICAgICAgICBzZXRTb3VyY2VJ
bWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCAxLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCByZW5kZXJpbmdNb2RlKCkpKTsKICAgICAgICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVk
ID0gdHJ1ZTsKICAgICB9CiAgICAgbV9zb3VyY2VHcmFwaGljLT5jbGVhclJlc3VsdCgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2aXNpb24g
MTA5MDEzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC05OTAsNyArOTkwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFp
bnRQcm9ncmVzc0JhcihSZQogICAgIHRyYWNrSW5mby5yZXNlcnZlZCA9IDA7CiAgICAgdHJhY2tJ
bmZvLmZpbGxlcjEgPSAwOwogCi0gICAgT3duUHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoaW5mbGF0ZWRSZWN0LnNpemUoKSk7CisgICAgT3duUHRyPElt
YWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW5mbGF0ZWRSZWN0
LnNpemUoKSwgMSk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW1hZ2VCdWZmZXJUb29s
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbWFn
ZUJ1ZmZlclRvb2xzLmNwcAkocmV2aXNpb24gMTA5MDEzKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAs
NyArNjAsNyBAQCBib29sIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNyZWF0ZUltYWdlQnVmCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIEludFNpemUgY2xhbXBlZFNpemUgPSBjbGFtcGVkQWJz
b2x1dGVTaXplKHBhaW50UmVjdC5zaXplKCkpOwotICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gaW1h
Z2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBjb2xvclNwYWNlLCByZW5kZXJp
bmdNb2RlKTsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShjbGFtcGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSk7CiAgICAgaWYg
KCFpbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC04OSw3ICs4OSw3IEBAIGJvb2wg
U1ZHSW1hZ2VCdWZmZXJUb29sczo6Y3JlYXRlSW1hZ2VCdWYKICAgICBpZiAoaW1hZ2VTaXplLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgT3duUHRyPEltYWdlQnVmZmVy
PiBpbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VTaXplLCBjb2xvclNwYWNlLCByZW5k
ZXJpbmdNb2RlKTsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShpbWFnZVNpemUsIDEsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUpOwogICAgIGlm
ICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCShyZXZpc2lvbiAxMDkwMTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTIsNyAr
MzEyLDcgQEAgTmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQwogICAgIGlm
ICghbV9mcmFtZUNhY2hlKSB7CiAgICAgICAgIGlmICghbV9wYWdlKQogICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShzaXplKCkpOworICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCAxKTsKICAgICAgICAgaWYgKCFidWZmZXIpIC8vIGZh
aWxlZCB0byBhbGxvY2F0ZSBpbWFnZQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGRy
YXcoYnVmZmVyLT5jb250ZXh0KCksIHJlY3QoKSwgcmVjdCgpLCBDb2xvclNwYWNlRGV2aWNlUkdC
LCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdJbWFnZUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAJKHJldmlzaW9uIDEwOTAxMykKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0
LDcgKzE0NCw3IEBAIEltYWdlKiBTVkdJbWFnZUNhY2hlOjpsb29rdXBPckNyZWF0ZUJpdG0KICAg
ICB9CiAKICAgICAvLyBDcmVhdGUgYW5kIGNhY2hlIG5ldyBpbWFnZSBhbmQgaW1hZ2UgYnVmZmVy
IGF0IHJlcXVlc3RlZCBzaXplLgotICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbmV3QnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKTsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG5ld0J1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgMSk7CiAgICAgaWYgKCFuZXdCdWZmZXIp
CiAgICAgICAgIHJldHVybiBJbWFnZTo6bnVsbEltYWdlKCk7CiAK
</data>
<flag name="review"
          id="131647"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>