<?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>111012</bug_id>
          
          <creation_ts>2013-02-27 14:36:00 -0800</creation_ts>
          <short_desc>Refactor validation checks for texture uploads</short_desc>
          <delta_ts>2013-03-27 18:33:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>110931</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Jun Jiang">jun.a.jiang</assigned_to>
          <cc>bajones</cc>
    
    <cc>buildbot</cc>
    
    <cc>cmarrin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gman</cc>
    
    <cc>jfeldstein</cc>
    
    <cc>jun.a.jiang</cc>
    
    <cc>nayankk</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>peter+ews</cc>
    
    <cc>rniwa</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>843515</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2013-02-27 14:36:00 -0800</bug_when>
    <thetext>Currently the validation checks performed during texture uploads in WebGL are scattered in many different places in the call stack. The majority of the checks occur in texImage2DBase and texSubImage2DBase, but some of the entry points which call these methods need to pack incoming data into a specified format. Therefore the format and type combination have to be verified as valid beforehand, leading to redundant checks in certain situations.

All of the necessary validation code should be refactored and called from the user-facing entry points before calling down further, and in particular, before calling any of the texture data conversion code. Then the checks performed in texImage2DBase and texSubImage2DBase will be unnecessary and can be turned into assertions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854381</commentid>
    <comment_count>1</comment_count>
      <attachid>192942</attachid>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2013-03-13 10:12:34 -0700</bug_when>
    <thetext>Created attachment 192942
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854386</commentid>
    <comment_count>2</comment_count>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2013-03-13 10:20:16 -0700</bug_when>
    <thetext>As Kenneth suggested, move all the validation checks to the entry level and turn the check at bottom(tex{Sub}Image2DBase) into assertions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854387</commentid>
    <comment_count>3</comment_count>
      <attachid>192942</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-03-13 10:22:27 -0700</bug_when>
    <thetext>Comment on attachment 192942
Patch

Attachment 192942 did not pass qt-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/17136221</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854388</commentid>
    <comment_count>4</comment_count>
      <attachid>192942</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-03-13 10:24:15 -0700</bug_when>
    <thetext>Comment on attachment 192942
Patch

Attachment 192942 did not pass qt-wk2-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/17175088</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854391</commentid>
    <comment_count>5</comment_count>
      <attachid>192942</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-13 10:32:41 -0700</bug_when>
    <thetext>Comment on attachment 192942
Patch

Attachment 192942 did not pass chromium-ews (chromium-xvfb):
Output: http://webkit-commit-queue.appspot.com/results/17203040</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854392</commentid>
    <comment_count>6</comment_count>
      <attachid>192942</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-03-13 10:35:36 -0700</bug_when>
    <thetext>Comment on attachment 192942
Patch

Attachment 192942 did not pass efl-ews (efl):
Output: http://webkit-commit-queue.appspot.com/results/17036757</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854396</commentid>
    <comment_count>7</comment_count>
      <attachid>192942</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-13 10:40:52 -0700</bug_when>
    <thetext>Comment on attachment 192942
Patch

Attachment 192942 did not pass mac-ews (mac):
Output: http://webkit-commit-queue.appspot.com/results/17207116</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854398</commentid>
    <comment_count>8</comment_count>
      <attachid>192942</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2013-03-13 10:45:43 -0700</bug_when>
    <thetext>Comment on attachment 192942
Patch

Attachment 192942 did not pass cr-android-ews (chromium-android):
Output: http://webkit-commit-queue.appspot.com/results/17169478</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854415</commentid>
    <comment_count>9</comment_count>
      <attachid>192942</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-13 11:13:25 -0700</bug_when>
    <thetext>Comment on attachment 192942
Patch

Attachment 192942 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-commit-queue.appspot.com/results/17126354</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854420</commentid>
    <comment_count>10</comment_count>
      <attachid>192942</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2013-03-13 11:16:39 -0700</bug_when>
    <thetext>Comment on attachment 192942
Patch

Before this is reviewed in detail could you please rebase it on to top of tree and upload another version? Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854984</commentid>
    <comment_count>11</comment_count>
      <attachid>193069</attachid>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2013-03-13 23:17:46 -0700</bug_when>
    <thetext>Created attachment 193069
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854987</commentid>
    <comment_count>12</comment_count>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2013-03-13 23:22:07 -0700</bug_when>
    <thetext>Fixed the issue that some variables were only used in Debug build and resulted in &quot;unused variable&quot; error for Release build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>862005</commentid>
    <comment_count>13</comment_count>
      <attachid>193069</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2013-03-22 17:16:51 -0700</bug_when>
    <thetext>Comment on attachment 193069
Patch

Thanks for doing this refactoring. It looks great. bajones, zmo, could you both please take a look at this and see if it looks correct to you? i.e., all the same checks are being done, and none were lost?

What tests were run? Have you done a complete WebGL conformance test run? Mozilla&apos;s performance tests? Others?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>862682</commentid>
    <comment_count>14</comment_count>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2013-03-25 06:04:00 -0700</bug_when>
    <thetext>Hi, Kenneth. Thanks for your comments. I had tested it on WebKit Layout tests, WebGL conformance test and Mozilla&apos;s performance tests. If any other tests are needed but missing, I am glad to have a try.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>862873</commentid>
    <comment_count>15</comment_count>
    <who name="Brandon Jones">bajones</who>
    <bug_when>2013-03-25 10:06:12 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 193069 [details])
&gt; Thanks for doing this refactoring. It looks great. bajones, zmo, could you both please take a look at this and see if it looks correct to you? i.e., all the same checks are being done, and none were lost?

It looks to me like all the checks are still in place.

Thanks for the refactor, the new code certainly feels cleaner!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>862889</commentid>
    <comment_count>16</comment_count>
      <attachid>193069</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2013-03-25 10:28:28 -0700</bug_when>
    <thetext>Comment on attachment 193069
Patch

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

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:3699
&gt; +    ASSERT(isGLES2NPOTStrict() || !level || !WebGLTexture::isNPOT(width, height));

You don&apos;t neeed isGLES2NPOTStrict() here as it is ASSERT.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:3786
&gt; +        if (xoffset + width &gt; texture-&gt;getWidth(target, level) || yoffset + height &gt; texture-&gt;getHeight(target, level)) {

Probably another CL since the code is just copied over, but it seems to me that we need to check for overflow with xoffset + width and yoffset + height.

Here and a few other places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>862890</commentid>
    <comment_count>17</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2013-03-25 10:28:53 -0700</bug_when>
    <thetext>Looks good to me otherwise.  Thanks for the refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>863432</commentid>
    <comment_count>18</comment_count>
      <attachid>193069</attachid>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2013-03-26 01:01:44 -0700</bug_when>
    <thetext>Comment on attachment 193069
Patch

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

&gt;&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:3699
&gt;&gt; +    ASSERT(isGLES2NPOTStrict() || !level || !WebGLTexture::isNPOT(width, height));
&gt; 
&gt; You don&apos;t neeed isGLES2NPOTStrict() here as it is ASSERT.

Hi, Zhenyao. I was not quite sure if I had caught your idea right. The ASSERT() is much like ASSERT(! (!isGLES2NPOTStrict() &amp;&amp; level &amp;&amp; WebGLTexture::isNPOT(width, height)) ) here. And isGLES2NPOTStrict() only returns false when extensions &quot;GL_OES_texture_npot&quot; or &quot;GL_ARB_texture_non_power_of_two&quot; is enabled. It doesn&apos;t return false constantly. 
In fact, when I saw the condition statement (if(!isGLES2NPOTStrict())) to determine if to do validation on level and POT status of width and height, I felt the condition statement should be removed. It seems level, width &amp; height won&apos;t be validated when isGLES2NPOTStrict() returns true.

&gt;&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:3786
&gt;&gt; +        if (xoffset + width &gt; texture-&gt;getWidth(target, level) || yoffset + height &gt; texture-&gt;getHeight(target, level)) {
&gt; 
&gt; Probably another CL since the code is just copied over, but it seems to me that we need to check for overflow with xoffset + width and yoffset + height.
&gt; 
&gt; Here and a few other places.

Thanks for your comments. It was a nice hit on the potential overflow issue. Adding the overflow checking can catch the error in an early stage and I will add it soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>863733</commentid>
    <comment_count>19</comment_count>
      <attachid>193069</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2013-03-26 09:36:47 -0700</bug_when>
    <thetext>Comment on attachment 193069
Patch

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

&gt;&gt;&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:3699
&gt;&gt;&gt; +    ASSERT(isGLES2NPOTStrict() || !level || !WebGLTexture::isNPOT(width, height));
&gt;&gt; 
&gt;&gt; You don&apos;t neeed isGLES2NPOTStrict() here as it is ASSERT.
&gt; 
&gt; Hi, Zhenyao. I was not quite sure if I had caught your idea right. The ASSERT() is much like ASSERT(! (!isGLES2NPOTStrict() &amp;&amp; level &amp;&amp; WebGLTexture::isNPOT(width, height)) ) here. And isGLES2NPOTStrict() only returns false when extensions &quot;GL_OES_texture_npot&quot; or &quot;GL_ARB_texture_non_power_of_two&quot; is enabled. It doesn&apos;t return false constantly. 
&gt; In fact, when I saw the condition statement (if(!isGLES2NPOTStrict())) to determine if to do validation on level and POT status of width and height, I felt the condition statement should be removed. It seems level, width &amp; height won&apos;t be validated when isGLES2NPOTStrict() returns true.

We check isGLES2NPOTStrict() only to avoid double effort, it basically checked whether the underlying implementation also does the same NPOT check.

It&apos;s no big deal, you can leave it here, but removing it in ASSERT makes the code cleaner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864238</commentid>
    <comment_count>20</comment_count>
      <attachid>195225</attachid>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2013-03-26 22:53:25 -0700</bug_when>
    <thetext>Created attachment 195225
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864258</commentid>
    <comment_count>21</comment_count>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2013-03-26 23:55:58 -0700</bug_when>
    <thetext>Thanks for Zhenyao&apos;s comments. Uploaded a new patch that removed isGLES2NPOTStrict() in the ASSERT and added overflow check with xoffset + width and yoffset + height.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864629</commentid>
    <comment_count>22</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2013-03-27 09:42:03 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; Thanks for Zhenyao&apos;s comments. Uploaded a new patch that removed isGLES2NPOTStrict() in the ASSERT and added overflow check with xoffset + width and yoffset + height.

Thanks.  The patch looks good.

(Usually we use CheckedInt class from mozilla for overflow check. But your code is OK too.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864772</commentid>
    <comment_count>23</comment_count>
      <attachid>195225</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2013-03-27 12:27:06 -0700</bug_when>
    <thetext>Comment on attachment 195225
Patch

Nice work. Let&apos;s wait for this to clear the mac-ews bot before cq+&apos;ing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864773</commentid>
    <comment_count>24</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2013-03-27 12:27:37 -0700</bug_when>
    <thetext>zmo, bajones: thanks for the informal reviews.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865060</commentid>
    <comment_count>25</comment_count>
      <attachid>195225</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2013-03-27 18:00:02 -0700</bug_when>
    <thetext>Comment on attachment 195225
Patch

It doesn&apos;t look like the mac-ews bot is making progress, and the test failures it reported previously don&apos;t look related to this patch. This refactoring is important, so marking cq+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865083</commentid>
    <comment_count>26</comment_count>
      <attachid>195225</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-27 18:33:18 -0700</bug_when>
    <thetext>Comment on attachment 195225
Patch

Clearing flags on attachment: 195225

Committed r147042: &lt;http://trac.webkit.org/changeset/147042&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865084</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-27 18:33:23 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192942</attachid>
            <date>2013-03-13 10:12:34 -0700</date>
            <delta_ts>2013-03-13 23:17:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111012-20130314010831.patch</filename>
            <type>text/plain</type>
            <size>27310</size>
            <attacher name="Jun Jiang">jun.a.jiang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1NzI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGEyOWY5OTYyYWRhZjU4
NzdkZDQ5ZDhiYzdiMGIxMDExODU3MWYwOC4uMGFiMjA2ZGY5MDU3MTY5MjZlOWI0ZmI3NTA1ZjRi
M2QyZjdjYTM2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEzLTAzLTEzICBKdW4g
SmlhbmcgIDxqdW4uYS5qaWFuZ0BpbnRlbC5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgdmFsaWRh
dGlvbiBjaGVja3MgZm9yIHRleHR1cmUgdXBsb2FkcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTExMDEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgdmFsaWRhdGlvbiBjaGVja3MgdG8gdGhl
IGVudHJ5IGxldmVsIG9mIHRleHtTdWJ9SW1hZ2UyRCBhbmQgYXZvaWQgZHVwbGljYXRlZCBjaGVj
a3MuIE1vcmVvdmVyLAorICAgICAgICB0dXJuIGFsbCB0aGUgdmFsaWRhdGlvbiBjaGVja3MgYXQg
dGhlIGJvdHRvbSBsZXZlbCAtLSB0ZXh7U3VifUltYWdlMkRCYXNlIGludG8gYXNzZXJ0aW9ucy4g
CisgCisgICAgICAgIEFscmVhZHkgY292ZXJlZCBieSBjdXJyZW50IHRlc3RzLgorCisgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJE
QmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdl
MkRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVUZXhGdW5jKTogQSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBjaGVj
ayBpbnB1dCBwYXJhbWV0ZXJzLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dGV4U3ViSW1hZ2UyREJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp0ZXhTdWJJbWFnZTJESW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MVmlkZW9F
bGVtZW50KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDoK
KwogMjAxMy0wMy0xMyAgQW5kcmV5IEx1c2huaWtvdiAgPGx1c2huaWtvdkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogW0NvZGVNaXJyb3JdIEhhbmRsZSAiZW50ZXIiIGtl
eSBpbiB7fH0gc2l0dWF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCA4MjBjZjEzMGE3ZWJkNzkwNmYxZDU4Mzgy
NjU3OWQzOGNhNDRiYWRjLi5hZDYyODljNGIwNDk1ZjBmMzEwMzEyMDBmMjVlNzVlYTc3MTJjMjFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5jcHAKQEAgLTM2ODksMTcgKzM2ODksMTAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnRleEltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGUKIHsKICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5l
ZAogICAgIGVjID0gMDsKLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleElt
YWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUpKQotICAgICAgICByZXR1cm47CiAg
ICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJE
IiwgdGFyZ2V0LCB0cnVlKTsKLSAgICBpZiAoIXRleCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
ICghaXNHTEVTMk5QT1RTdHJpY3QoKSkgewotICAgICAgICBpZiAobGV2ZWwgJiYgV2ViR0xUZXh0
dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJsZXZl
bCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0KKyAgICBBU1NFUlQodmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygidGV4SW1hZ2UyRCIs
IE5vdFRleFN1YkltYWdlMkQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSkpOworICAgIEFTU0VSVCh0ZXgpOworICAgIEFT
U0VSVChpc0dMRVMyTlBPVFN0cmljdCgpIHx8ICFsZXZlbCB8fCAhV2ViR0xUZXh0dXJlOjppc05Q
T1Qod2lkdGgsIGhlaWdodCkpOwogICAgIGlmICghcGl4ZWxzKSB7CiAgICAgICAgIC8vIE5vdGU6
IENocm9taXVtJ3MgT3BlbkdMIGltcGxlbWVudGF0aW9uIGNsZWFycyB0ZXh0dXJlcyBhbmQgaXNS
ZXNvdXJjZVNhZmUoKSBpcyB0aGVyZWZvcmUgdHJ1ZS4KICAgICAgICAgLy8gRm9yIG90aGVyIGlt
cGxlbWVudGF0aW9ucywgaWYgdGhleSBhcmUgdXNpbmcgQU5HTEVfZGVwdGhfdGV4dHVyZSwgQU5H
TEUgZGVwdGggdGV4dHVyZXMKQEAgLTM3MTQsOCArMzcwNyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp0ZXhJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RlCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJ0ZXhJbWFnZTJEIiwgaW50
ZXJuYWxmb3JtYXQpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NFUlQodmFsaWRh
dGVTZXR0YWJsZVRleEZvcm1hdCgidGV4SW1hZ2UyRCIsIGludGVybmFsZm9ybWF0KSk7CiAgICAg
ICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlciwgZm9y
bWF0LCB0eXBlLCBwaXhlbHMpOwogICAgIH0KQEAgLTM3MjYsOCArMzcxOCw2IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRElt
cGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBoaWNz
Q29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZLCBib29s
IHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKLSAg
ICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoInRleEltYWdlMkQiLCBpbnRlcm5hbGZv
cm1hdCkpCi0gICAgICAgIHJldHVybjsKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKICAgICBH
cmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRv
bVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9
PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7CiAgICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRy
YWN0U3VjY2VlZGVkKCkpIHsKQEAgLTM3NTUsMTEgKzM3NDUsNTkgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleEltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGUKICAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQz
RDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwogfQogCitib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlLCBUZXhGdW5jVmFs
aWRhdGlvblNvdXJjZVR5cGUgc291cmNlVHlwZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBH
QzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCkKK3sKKyAgICBpZiAoIXZhbGlkYXRlVGV4
RnVuY1BhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBmdW5jdGlvblR5cGUsIHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSA9IHZhbGlk
YXRlVGV4dHVyZUJpbmRpbmcoZnVuY3Rpb25OYW1lLCB0YXJnZXQsIHRydWUpOworICAgIGlmICgh
dGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGZ1bmN0aW9uVHlwZSA9
PSBOb3RUZXhTdWJJbWFnZTJEKSB7CisgICAgICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkg
eworICAgICAgICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBo
ZWlnaHQpKSB7CisgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxldmVsID4gMCBub3QgcG93ZXIg
b2YgMiIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAvLyBGb3IgU291cmNlQXJyYXlCdWZmZXJWaWV3LCBmdW5jdGlvbiB2
YWxpZGF0ZVRleEZ1bmNEYXRhKCkgd291bGQgaGFuZGxlIHdoZXRoZXIgdG8gdmFsaWRhdGUgdGhl
IFNldHRhYmxlVGV4Rm9ybWF0CisgICAgICAgIC8vIGJ5IGNoZWNraW5nIGlmIHRoZSBBcnJheUJ1
ZmZlclZpZXcgaXMgbm90IG51bGwuCisgICAgICAgIGlmIChzb3VyY2VUeXBlICE9IFNvdXJjZUFy
cmF5QnVmZmVyVmlldykgeworICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9y
bWF0KGZ1bmN0aW9uTmFtZSwgZm9ybWF0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVU
ZXhGb3JtYXQoZnVuY3Rpb25OYW1lLCBmb3JtYXQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoIXZhbGlkYXRlU2l6ZShmdW5jdGlvbk5hbWUsIHhvZmZzZXQsIHlvZmZz
ZXQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoeG9mZnNldCArIHdp
ZHRoID4gdGV4dHVyZS0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwgeW9mZnNldCArIGhlaWdo
dCA+IHRleHR1cmUtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgeworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9u
TmFtZSwgImRpbWVuc2lvbnMgb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRh
cmdldCwgbGV2ZWwpICE9IGZvcm1hdCB8fCB0ZXh0dXJlLT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwp
ICE9IHR5cGUpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBhbmQgZm9ybWF0IGRv
IG5vdCBtYXRjaCB0ZXh0dXJlIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBGSVhNRTogVXBsb2FkaW5nIHtJbWFnZURhdGEsIEhUTUxJbWFn
ZUVsZW1lbnQsIEhUTUxDYW52YXNFbGVtZW50LCBIVE1MVmlkZW9FbGVtZW50fSB0byBoYWxmIGZs
b2F0aW5nIHBvaW50IHRleHR1cmUgaXMgbm90IHN1cHBvcnRlZCB5ZXQuCisgICAgLy8gU2VlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTA5MzYuCisgICAgaWYgKHNv
dXJjZVR5cGUgIT0gU291cmNlQXJyYXlCdWZmZXJWaWV3ICYmIHR5cGUgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiT3BlcmF0aW9u
IG5vdCBzdXBwb3J0ZWQgeWV0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5
QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKCJ0ZXhJbWFnZTJEIiwgbGV2ZWwsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLCBOdWxsQWxsb3dlZCkpCisgICAgaWYg
KGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVUZXhGdW5jRGF0YSgidGV4SW1hZ2UyRCIsIGxl
dmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscywgTnVsbEFsbG93ZWQpCisg
ICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJE
LCBTb3VyY2VBcnJheUJ1ZmZlclZpZXcsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCiAgICAgICAgIHJldHVy
bjsKICAgICB2b2lkKiBkYXRhID0gcGl4ZWxzID8gcGl4ZWxzLT5iYXNlQWRkcmVzcygpIDogMDsK
ICAgICBWZWN0b3I8dWludDhfdD4gdGVtcERhdGE7CkBAIC0zNzg2LDIyICszODI0LDkgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEZW51bQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkp
CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhcGl4ZWxzIHx8ICF2YWxpZGF0ZVRleEZ1bmMo
InRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VJbWFnZURhdGEsIHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCks
IDAsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCiAgICAgICAgIHJldHVybjsKICAgICBWZWN0b3I8dWlu
dDhfdD4gZGF0YTsKLSAgICBpZiAoIXBpeGVscykKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICgh
dmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZSgidGV4SW1hZ2UyRCIsIGZvcm1hdCwgdHlwZSwg
bGV2ZWwpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9y
bWF0KCJ0ZXhJbWFnZTJEIiwgZm9ybWF0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIEZJWE1F
OiBVcGxvYWRpbmcgSW1hZ2VEYXRhIHRvIGhhbGYgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZSBpcyBu
b3Qgc3VwcG9ydGVkIHlldAotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTA5MzYKLSAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9G
TE9BVF9PRVMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCAidGV4SW1hZ2UyRCIsICJPcGVyYXRpb24gbm90IHN1cHBvcnRl
ZCB5ZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGJvb2wgbmVlZENvbnZlcnNp
b24gPSB0cnVlOwogICAgIC8vIFRoZSBkYXRhIGZyb20gSW1hZ2VEYXRhIGlzIGFsd2F5cyBvZiBm
b3JtYXQgUkdCQTguCiAgICAgLy8gTm8gY29udmVyc2lvbiBpcyBuZWVkZWQgaWYgZGVzdGluYXRp
b24gZm9ybWF0IGlzIFJHQkEgYW5kIHR5cGUgaXMgVVNJR05FRF9CWVRFIGFuZCBubyBGbGlwIG9y
IFByZW11bHRpcGx5IG9wZXJhdGlvbiBpcyByZXF1aXJlZC4KQEAgLTM4MjQsNDggKzM4NDksMjEg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50
KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwotICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlSFRNTEltYWdl
RWxlbWVudCgidGV4SW1hZ2UyRCIsIGltYWdlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICh3
b3VsZFRhaW50T3JpZ2luKGltYWdlKSkgewotICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleElt
YWdlMkQiLCBpbWFnZSwgZWMpKQogICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZJWE1F
OiBVcGxvYWRpbmcgSW1hZ2VFbGVtZW50IHRvIGhhbGYgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZSBp
cyBub3Qgc3VwcG9ydGVkIHlldAotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTA5MzYKLSAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6SEFM
Rl9GTE9BVF9PRVMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidGV4SW1hZ2UyRCIsICJPcGVyYXRpb24gbm90IHN1cHBv
cnRlZCB5ZXQiKTsKKyAgICBJbWFnZSogaW1hZ2VGb3JSZW5kZXIgPSBpbWFnZS0+Y2FjaGVkSW1h
Z2UoKS0+aW1hZ2VGb3JSZW5kZXJlcihpbWFnZS0+cmVuZGVyZXIoKSk7CisgICAgaWYgKCFpbWFn
ZUZvclJlbmRlciB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1h
Z2UyRCwgU291cmNlSFRNTEltYWdlRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBpbWFnZUZvclJlbmRlci0+aGVpZ2h0KCksIDAs
IGZvcm1hdCwgdHlwZSwgMCwgMCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICB0ZXhJ
bWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBp
bWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJlcihpbWFnZS0+cmVuZGVyZXIoKSks
IEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tSW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNr
UHJlbXVsdGlwbHlBbHBoYSwgZWMpOworICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlRm9yUmVuZGVyLCBHcmFwaGljc0Nv
bnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5
QWxwaGEsIGVjKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBpZiAoIWNhbnZhcyB8fCAhY2FudmFzLT5idWZmZXIoKSkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleElt
YWdlMkQiLCAibm8gY2FudmFzIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHdv
dWxkVGFpbnRPcmlnaW4oY2FudmFzKSkgewotICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5
cGUoInRleEltYWdlMkQiLCBmb3JtYXQsIHR5cGUsIGxldmVsKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4SW1hZ2UyRCIsIGZvcm1hdCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICAvLyBGSVhNRTogVXBsb2FkaW5nIEhUTUxDYW52YXNFbGVt
ZW50IHRvIGhhbGYgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZSBpcyBub3Qgc3VwcG9ydGVkIHlldAot
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTA5MzYKLSAg
ICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAidGV4SW1hZ2UyRCIsICJPcGVyYXRpb24gbm90IHN1cHBvcnRlZCB5ZXQiKTsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50KCJ0ZXhJbWFnZTJE
IiwgY2FudmFzLCBlYykgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1
YkltYWdlMkQsIFNvdXJjZUhUTUxDYW52YXNFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5
cGUsIDAsIDApKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgV2ViR0xUZXh0dXJlKiB0
ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1
ZSk7CiAgICAgLy8gSWYgcG9zc2libGUsIGNvcHkgZnJvbSB0aGUgY2FudmFzIGVsZW1lbnQgZGly
ZWN0bHkgdG8gdGhlIHRleHR1cmUKQEAgLTM5MDksMTkgKzM5MDcsOCBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RlbnVtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmICghdmlkZW8gfHwgIXZpZGVvLT52aWRlb1dpZHRoKCkgfHwg
IXZpZGVvLT52aWRlb0hlaWdodCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJubyB2aWRlbyIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKHZpZGVvKSkg
ewotICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoInRleEltYWdlMkQiLCBmb3JtYXQs
IHR5cGUsIGxldmVsKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVTZXR0YWJs
ZVRleEZvcm1hdCgidGV4SW1hZ2UyRCIsIGZvcm1hdCkpCisgICAgaWYgKGlzQ29udGV4dExvc3Qo
KSB8fCAhdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KCJ0ZXhJbWFnZTJEIiwgdmlkZW8sIGVjKQor
ICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2Uy
RCwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpLCAwLCBmb3JtYXQsIHR5
cGUsIDAsIDApKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBHbyB0aHJvdWdoIHRoZSBmYXN0
IHBhdGggZG9pbmcgYSBHUFUtR1BVIHRleHR1cmVzIGNvcHkgd2l0aG91dCBhIHJlYWRiYWNrIHRv
IHN5c3RlbSBtZW1vcnkgaWYgcG9zc2libGUuCkBAIC0zOTQ1LDEzICszOTMyLDYgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bQogICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9J
bWFnZSh2aWRlbywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCksIGVjKTsKICAgICBp
ZiAoIWltYWdlKQogICAgICAgICByZXR1cm47Ci0gICAgLy8gRklYTUU6IFVwbG9hZGluZyBIVE1M
VmlkZW9FbGVtZW50IHRvIGhhbGYgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZSBpcyBub3Qgc3VwcG9y
dGVkIHlldAotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTA5MzYKLSAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAidGV4SW1hZ2UyRCIsICJPcGVyYXRpb24gbm90IHN1cHBvcnRlZCB5ZXQiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0Nv
bnRleHQzRDo6SHRtbERvbVZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5
QWxwaGEsIGVjKTsKIH0KICNlbmRpZgpAQCAtNDAwOSwyNSArMzk4OSwxNiBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQwogewogICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJy
b3JzIHJldHVybmVkCiAgICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleFN1Yklt
YWdlMkQiLCBUZXhTdWJJbWFnZTJELCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIDAsIGZvcm1hdCwgdHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRl
U2l6ZSgidGV4U3ViSW1hZ2UyRCIsIHhvZmZzZXQsIHlvZmZzZXQpKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJ0ZXhTdWJJbWFnZTJEIiwgZm9y
bWF0KSkKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKKyAg
ICBBU1NFUlQodmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygidGV4U3ViSW1hZ2UyRCIsIFRleFN1
YkltYWdlMkQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0
LCB0eXBlKSk7CisgICAgQVNTRVJUKHZhbGlkYXRlU2l6ZSgidGV4U3ViSW1hZ2UyRCIsIHhvZmZz
ZXQsIHlvZmZzZXQpKTsKKyAgICBBU1NFUlQodmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4
U3ViSW1hZ2UyRCIsIGZvcm1hdCkpOwogICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVU
ZXh0dXJlQmluZGluZygidGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKCF0
ZXgpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gdGV4LT5nZXRX
aWR0aCh0YXJnZXQsIGxldmVsKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4LT5nZXRIZWlnaHQo
dGFyZ2V0LCBsZXZlbCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImRpbWVuc2lvbnMgb3V0IG9m
IHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRleC0+Z2V0SW50ZXJu
YWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkgIT0gZm9ybWF0IHx8IHRleC0+Z2V0VHlwZSh0YXJnZXQs
IGxldmVsKSAhPSB0eXBlKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInRleFN1YkltYWdlMkQiLCAidHlwZSBhbmQgZm9y
bWF0IGRvIG5vdCBtYXRjaCB0ZXh0dXJlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
QVNTRVJUKHRleCk7CisgICAgQVNTRVJUKHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgPj0g
KHhvZmZzZXQgKyB3aWR0aCkpOworICAgIEFTU0VSVCh0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxl
dmVsKSA+PSAoeW9mZnNldCArIGhlaWdodCkpOworICAgIEFTU0VSVCh0ZXgtPmdldEludGVybmFs
Rm9ybWF0KHRhcmdldCwgbGV2ZWwpID09IGZvcm1hdCk7CisgICAgQVNTRVJUKHRleC0+Z2V0VHlw
ZSh0YXJnZXQsIGxldmVsKSA9PSB0eXBlKTsKICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCBwaXhlbHMpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBA
IC00MDM1LDEyICs0MDA2LDYgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1Yklt
YWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MKIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdl
SHRtbERvbVNvdXJjZSBkb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBo
YSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRM
b3N0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFu
ZFR5cGUoInRleFN1YkltYWdlMkQiLCBmb3JtYXQsIHR5cGUsIGxldmVsKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4U3ViSW1hZ2UyRCIs
IGZvcm1hdCkpCi0gICAgICAgIHJldHVybjsKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKICAg
ICBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2Us
IGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lv
biA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7ICAKICAgICBpZiAoIWltYWdlRXh0cmFjdG9y
LmV4dHJhY3RTdWNjZWVkZWQoKSkgewpAQCAtNDA3Miw3ICs0MDM3LDggQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlC
dWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkgfHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEoInRleFN1YkltYWdlMkQiLCBsZXZlbCwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMsIE51bGxOb3RBbGxvd2VkKSkKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKCJ0ZXhTdWJJbWFn
ZTJEIiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLCBOdWxsTm90
QWxsb3dlZCkKKyAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRl
eFN1YkltYWdlMkQsIFNvdXJjZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQogICAg
ICAgICByZXR1cm47CiAgICAgdm9pZCogZGF0YSA9IHBpeGVscy0+YmFzZUFkZHJlc3MoKTsKICAg
ICBWZWN0b3I8dWludDhfdD4gdGVtcERhdGE7CkBAIC00MDk4LDIwICs0MDY0LDggQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgp
KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFwaXhlbHMpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoInRleFN1YkltYWdlMkQiLCBmb3Jt
YXQsIHR5cGUsIGxldmVsKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICFwaXhlbHMgfHwg
IXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUlt
YWdlRGF0YSwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCAgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMt
PmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJ0ZXhTdWJJbWFnZTJE
IiwgZm9ybWF0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIEZJWE1FOiBVcGxvYWRpbmcgSW1h
Z2VEYXRhIHRvIGhhbGYgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZSBpcyBub3Qgc3VwcG9ydGVkIHll
dAotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTA5MzYK
LSAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAidGV4U3ViSW1hZ2UyRCIsICJPcGVyYXRpb24gbm90IHN1cHBvcnRlZCB5ZXQiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgIGJv
b2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOwpAQCAtNDEzNiw0OCArNDA5MCwyMiBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFn
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRM
b3N0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlSFRNTEltYWdlRWxlbWVu
dCgidGV4U3ViSW1hZ2UyRCIsIGltYWdlKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2
YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleFN1YkltYWdlMkQiLCBpbWFnZSwgZWMpKQogICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oaW1hZ2UpKSB7Ci0gICAgICAg
IGVjID0gU0VDVVJJVFlfRVJSOworICAgIEltYWdlKiBpbWFnZUZvclJlbmRlciA9IGltYWdlLT5j
YWNoZWRJbWFnZSgpLT5pbWFnZUZvclJlbmRlcmVyKGltYWdlLT5yZW5kZXJlcigpKTsKKyAgICBp
ZiAoIWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBU
ZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBmb3Jt
YXQsIGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBpbWFnZUZvclJlbmRlci0+aGVpZ2h0KCksIDAs
IGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgLy8gRklYTUU6IFVwbG9hZGluZyBIVE1MSW1hZ2VFbGVtZW50IHRvIGhhbGYgZmxvYXRp
bmcgcG9pbnQgdGV4dHVyZSBpcyBub3Qgc3VwcG9ydGVkIHlldAotICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTA5MzYKLSAgICBpZiAodHlwZSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidGV4U3ViSW1hZ2UyRCIs
ICJPcGVyYXRpb24gbm90IHN1cHBvcnRlZCB5ZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
IAotICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IGZvcm1hdCwgdHlwZSwgaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1h
Z2UtPnJlbmRlcmVyKCkpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3VucGFj
a0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKKyAgICB0ZXhTdWJJbWFnZTJE
SW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdl
Rm9yUmVuZGVyLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3VucGFja0ZsaXBZ
LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENh
bnZhc0VsZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwot
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWNhbnZh
cyB8fCAhY2FudmFzLT5idWZmZXIoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAibm8gY2FudmFz
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oY2Fu
dmFzKSkgewotICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoInRleFN1YkltYWdlMkQi
LCBmb3JtYXQsIHR5cGUsIGxldmVsKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRh
dGVTZXR0YWJsZVRleEZvcm1hdCgidGV4U3ViSW1hZ2UyRCIsIGZvcm1hdCkpCisgICAgaWYgKGlz
Q29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudCgidGV4U3ViSW1hZ2Uy
RCIsIGNhbnZhcywgZWMpCisgICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdl
MkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwgdGFyZ2V0LCBsZXZl
bCwgZm9ybWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwg
dHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCiAgICAgICAgIHJldHVybjsKLSAgICAvLyBGSVhNRTog
VXBsb2FkaW5nIEhUTUxDYW52YXNFbGVtZW50IHRvIGhhbGYgZmxvYXRpbmcgcG9pbnQgdGV4dHVy
ZSBpcyBub3Qgc3VwcG9ydGVkIHlldAotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTA5MzYKLSAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
SEFMRl9GTE9BVF9PRVMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidGV4U3ViSW1hZ2UyRCIsICJPcGVyYXRpb24gbm90
IHN1cHBvcnRlZCB5ZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIFJlZlB0cjxJ
bWFnZURhdGE+IGltYWdlRGF0YSA9IGNhbnZhcy0+Z2V0SW1hZ2VEYXRhKCk7CiAgICAgaWYgKGlt
YWdlRGF0YSkKQEAgLTQxOTEsMzIgKzQxMTksMTMgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW4K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKCF2aWRlbyB8fCAhdmlkZW8tPnZpZGVvV2lkdGgoKSB8fCAhdmlkZW8t
PnZpZGVvSGVpZ2h0KCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgIm5vIHZpZGVvIik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAod291bGRUYWludE9yaWdpbih2aWRlbykpIHsK
LSAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
aWYgKCF2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKCJ0ZXhTdWJJbWFnZTJEIiwgZm9ybWF0
LCB0eXBlLCBsZXZlbCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlU2V0dGFi
bGVUZXhGb3JtYXQoInRleFN1YkltYWdlMkQiLCBmb3JtYXQpKQorICAgIGlmIChpc0NvbnRleHRM
b3N0KCkgfHwgIXZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIHZpZGVv
LCBlYykKKyAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1
YkltYWdlMkQsIFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwg
dmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlw
ZSwgeG9mZnNldCwgeW9mZnNldCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxJbWFn
ZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlbywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5
SW1hZ2VNb2RlKCksIGVjKTsKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47Ci0gICAg
Ly8gRklYTUU6IFVwbG9hZGluZyBIVE1MVmlkZW9FbGVtZW50IHRvIGhhbGYgZmxvYXRpbmcgcG9p
bnQgdGV4dHVyZSBpcyBub3Qgc3VwcG9ydGVkIHlldAotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTA5MzYKLSAgICBpZiAodHlwZSA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidGV4U3ViSW1hZ2UyRCIsICJPcGVy
YXRpb24gbm90IHN1cHBvcnRlZCB5ZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAg
IHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1h
dCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tVmlkZW8sIG1f
dW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwogfQogI2VuZGlmCkBA
IC01NzAzLDcgKzU2MTIsNyBAQCBXZWJHTEJ1ZmZlciogV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bgogICAgIHJldHVybiAw
OwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MSW1hZ2VFbGVt
ZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UpCiti
b29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5jYWNoZWRJbWFnZSgpKSB7CiAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJubyBpbWFnZSIpOwpAQCAtNTcxNCw5ICs1NjIzLDQxIEBAIGJvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBICiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGltYWdlIik7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisgICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oaW1h
Z2UpKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhU
TUxDYW52YXNFbGVtZW50KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICgh
Y2FudmFzIHx8ICFjYW52YXMtPmJ1ZmZlcigpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBjYW52
YXMiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAod291bGRUYWludE9y
aWdpbihjYW52YXMpKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCisjaWYgRU5BQkxFKFZJREVP
KQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudChj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBpZiAoIXZpZGVvIHx8ICF2aWRlby0+dmlkZW9XaWR0aCgpIHx8
ICF2aWRlby0+dmlkZW9IZWlnaHQoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gdmlkZW8iKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAod291bGRUYWludE9yaWdpbih2
aWRlbykpIHsKKyAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwogdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZJbXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
R0MzRHVpbnQgaW5kZXgsIEdDM0RzaXplaSBleHBlY3RlZFNpemUsIEdDM0RmbG9hdCB2MCwgR0Mz
RGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKIHsKICAgICBpZiAoaXNDb250
ZXh0TG9zdCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuaAppbmRleCBhYjY0MmI0YmUyMmJmODJlNTY0YzZkMDg2NzBmMTIxNDYxOTUy
NGNiLi41YzJhZjM3ZWZhZDRiYTMwYjE0OTk5NDQ2OWZmYmNjNTE1YjcxYmU3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaApAQCAt
NjAxLDYgKzYwMSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIFRleFN1YkltYWdlMkQsCiAgICAgfTsK
IAorICAgIGVudW0gVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlIHsKKyAgICAgICAgU291cmNl
QXJyYXlCdWZmZXJWaWV3LAorICAgICAgICBTb3VyY2VJbWFnZURhdGEsCisgICAgICAgIFNvdXJj
ZUhUTUxJbWFnZUVsZW1lbnQsCisgICAgICAgIFNvdXJjZUhUTUxDYW52YXNFbGVtZW50LAorICAg
ICAgICBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LAorICAgIH07CisKKyAgICAvLyBIZWxwZXIgZnVu
Y3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBjaGVjayBpZiB0aGUgaW5wdXQgZm9ybWF0L3R5
cGUvbGV2ZWwvdGFyZ2V0L3dpZHRoL2hlaWdodC9ib3JkZXIveG9mZnNldC95b2Zmc2V0IGFyZSB2
YWxpZC4KKyAgICAvLyBPdGhlcndpc2UsIGl0IHdvdWxkIHJldHVybiBxdWlja2x5IHdpdGhvdXQg
ZG9pbmcgb3RoZXIgd29yay4KKyAgICBib29sIHZhbGlkYXRlVGV4RnVuYyhjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlLCBUZXhGdW5jVmFsaWRh
dGlvblNvdXJjZVR5cGUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwKKyAgICAgICAgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGlu
dCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQpOworCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRv
IGNoZWNrIGlucHV0IHBhcmFtZXRlcnMgZm9yIGZ1bmN0aW9ucyB7Y29weX1UZXh7U3VifUltYWdl
LgogICAgIC8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiBwYXJhbWV0
ZXJzIGFyZSBpbnZhbGlkLgogICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsCkBAIC02OTIsOCArNzA1LDE2IEBAIHB1YmxpYzoKICAgICAv
LyBSZXR1cm4gdGhlIGN1cnJlbnQgYm91bmQgYnVmZmVyIHRvIHRhcmdldCwgb3IgMCBpZiBwYXJh
bWV0ZXJzIGFyZSBpbnZhbGlkLgogICAgIFdlYkdMQnVmZmVyKiB2YWxpZGF0ZUJ1ZmZlckRhdGFQ
YXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSB1c2FnZSk7CiAKLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2Uy
RCB0byBtYWtlIHN1cmUgaW1hZ2UgaXMgcmVhZHkuCi0gICAgYm9vbCB2YWxpZGF0ZUhUTUxJbWFn
ZUVsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MSW1hZ2VFbGVtZW50Kik7Cisg
ICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdlMkQgdG8gbWFrZSBzdXJlIGlt
YWdlIGlzIHJlYWR5IGFuZCB3b3VsZG4ndCB0YWludCBPcmlnaW4uCisgICAgYm9vbCB2YWxpZGF0
ZUhUTUxJbWFnZUVsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MSW1hZ2VFbGVt
ZW50KiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh7
U3VifUltYWdlMkQgdG8gbWFrZSBzdXJlIGNhbnZhcyBpcyByZWFkeSBhbmQgd291bGRuJ3QgdGFp
bnQgT3JpZ2luLgorICAgIGJvb2wgdmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudChjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIEhUTUxDYW52YXNFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworCisj
aWYgRU5BQkxFKFZJREVPKQorICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFn
ZTJEIHRvIG1ha2Ugc3VyZSB2aWRlbyBpcyByZWFkeSB3b3VsZG4ndCB0YWludCBPcmlnaW4uCisg
ICAgYm9vbCB2YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBIVE1MVmlkZW9FbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCiAKICAgICAvLyBI
ZWxwZXIgZnVuY3Rpb25zIGZvciB2ZXJ0ZXhBdHRyaWJOZnt2fS4KICAgICB2b2lkIHZlcnRleEF0
dHJpYmZJbXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0Rz
aXplaSBleHBlY3RlZFNpemUsIEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQsIEdDM0Rm
bG9hdCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193069</attachid>
            <date>2013-03-13 23:17:46 -0700</date>
            <delta_ts>2013-03-26 22:53:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111012-20130314141542.patch</filename>
            <type>text/plain</type>
            <size>27345</size>
            <attacher name="Jun Jiang">jun.a.jiang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1Nzg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWEyYThjYTlhOTczOGZm
ODEyNmFjYTc3NDhlN2MxZWJlZGRhMTM3YS4uMjEzOTI2MmY2MTU1YjVkOWFjMWRjN2EwZWMxNjYx
NDY5N2E0MDJjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEzLTAzLTEzICBKdW4g
SmlhbmcgIDxqdW4uYS5qaWFuZ0BpbnRlbC5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgdmFsaWRh
dGlvbiBjaGVja3MgZm9yIHRleHR1cmUgdXBsb2FkcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTExMDEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgdmFsaWRhdGlvbiBjaGVja3MgdG8gdGhl
IGVudHJ5IGxldmVsIG9mIHRleHtTdWJ9SW1hZ2UyRCwgcmV0dXJuIGVhcmx5IGZvciBpbnZhbGlk
IHBhcmFtZXRlcnMgYW5kIGF2b2lkIGR1cGxpY2F0ZWQgY2hlY2tzLgorICAgICAgICBNb3Jlb3Zl
ciwgdHVybiBhbGwgdGhlIHZhbGlkYXRpb24gY2hlY2tzIGF0IHRoZSBib3R0b20gbGV2ZWwgLSB0
ZXh7U3VifUltYWdlMkRCYXNlIGludG8gYXNzZXJ0aW9ucy4KKworICAgICAgICBBbHJlYWR5IGNv
dmVyZWQgYnkgY3VycmVudCB0ZXN0cy4KKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJESW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuYyk6IEEgaGVscGVyIGZ1
bmN0aW9uIGZvciB0ZXh7U3VifUltYWdlMkQgdG8gY2hlY2sgaW5wdXQgcGFyYW1ldGVycy4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRCYXNlKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRElt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFn
ZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVI
VE1MSW1hZ2VFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudCk6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6CisKIDIwMTMtMDMtMTMgIEt1bmloaWtv
IFNha2Ftb3RvICA8a3Nha2Ftb3RvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbXBsZW1lbnQg
Rm9udExvYWRlciBpbnRlcmZhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IDcyMDdmMzBkYjNiMWViOTI2ZWE2M2M1
YzI5ODVhN2IwNzkyN2JkODguLmZlM2UyY2U4Y2NhZGI5YWJkN2IzNWMyZmQxMmM5MmEyMjIxNGIz
NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmNwcApAQCAtMzY5MywxNyArMzY5MywxMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dGV4SW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEZQogewogICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVy
bmVkCiAgICAgZWMgPSAwOwotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygidGV4
SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSkpCi0gICAgICAgIHJldHVybjsK
ICAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleEltYWdl
MkQiLCB0YXJnZXQsIHRydWUpOwotICAgIGlmICghdGV4KQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKSB7Ci0gICAgICAgIGlmIChsZXZlbCAmJiBXZWJHTFRl
eHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImxl
dmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfQorICAgIEFTU0VSVCh2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKCJ0ZXhJbWFnZTJE
IiwgTm90VGV4U3ViSW1hZ2UyRCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlKSk7CisgICAgQVNTRVJUKHRleCk7CisgICAg
QVNTRVJUKGlzR0xFUzJOUE9UU3RyaWN0KCkgfHwgIWxldmVsIHx8ICFXZWJHTFRleHR1cmU6Omlz
TlBPVCh3aWR0aCwgaGVpZ2h0KSk7CiAgICAgaWYgKCFwaXhlbHMpIHsKICAgICAgICAgLy8gTm90
ZTogQ2hyb21pdW0ncyBPcGVuR0wgaW1wbGVtZW50YXRpb24gY2xlYXJzIHRleHR1cmVzIGFuZCBp
c1Jlc291cmNlU2FmZSgpIGlzIHRoZXJlZm9yZSB0cnVlLgogICAgICAgICAvLyBGb3Igb3RoZXIg
aW1wbGVtZW50YXRpb25zLCBpZiB0aGV5IGFyZSB1c2luZyBBTkdMRV9kZXB0aF90ZXh0dXJlLCBB
TkdMRSBkZXB0aCB0ZXh0dXJlcwpAQCAtMzcxOCw4ICszNzExLDcgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleEltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGUKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVsc2Ug
ewotICAgICAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoInRleEltYWdlMkQiLCBp
bnRlcm5hbGZvcm1hdCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFTU0VSVCh2YWxp
ZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJ0ZXhJbWFnZTJEIiwgaW50ZXJuYWxmb3JtYXQpKTsKICAg
ICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLCBm
b3JtYXQsIHR5cGUsIHBpeGVscyk7CiAgICAgfQpAQCAtMzczMCw4ICszNzIyLDYgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGUKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJE
SW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiBpbWFnZSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkltYWdlSHRtbERvbVNvdXJjZSBkb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwot
ICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4SW1hZ2UyRCIsIGludGVybmFs
Zm9ybWF0KSkKLSAgICAgICAgcmV0dXJuOwogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAg
IEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3RvciBpbWFnZUV4dHJhY3RvcihpbWFnZSwg
ZG9tU291cmNlLCBwcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9u
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKTsKICAgICBpZiAoIWltYWdlRXh0cmFjdG9yLmV4
dHJhY3RTdWNjZWVkZWQoKSkgewpAQCAtMzc1OSwxMSArMzc0OSw1OSBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEZQogICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4
dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7CiB9CiAKK2Jvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUsIFRleEZ1bmNW
YWxpZGF0aW9uU291cmNlVHlwZSBzb3VyY2VUeXBlLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0KQoreworICAgIC8vIEZJWE1FOiBVcGxv
YWRpbmcge0ltYWdlRGF0YSwgSFRNTEltYWdlRWxlbWVudCwgSFRNTENhbnZhc0VsZW1lbnQsIEhU
TUxWaWRlb0VsZW1lbnR9IHRvIGhhbGYgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZSBpcyBub3Qgc3Vw
cG9ydGVkIHlldC4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExMDkzNi4KKyAgICBpZiAoc291cmNlVHlwZSAhPSBTb3VyY2VBcnJheUJ1ZmZlclZp
ZXcgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCBmdW5jdGlvbk5hbWUsICJPcGVyYXRpb24gbm90IHN1cHBvcnRlZCB5ZXQiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVy
cyhmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uVHlwZSwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmlu
ZGluZyhmdW5jdGlvbk5hbWUsIHRhcmdldCwgdHJ1ZSk7CisgICAgaWYgKCF0ZXh0dXJlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZnVuY3Rpb25UeXBlID09IE5vdFRleFN1Yklt
YWdlMkQpIHsKKyAgICAgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKSB7CisgICAgICAgICAg
ICBpZiAobGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsKKyAg
ICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAyIik7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIC8vIEZvciBTb3VyY2VBcnJheUJ1ZmZlclZpZXcsIGZ1bmN0aW9uIHZhbGlkYXRlVGV4RnVu
Y0RhdGEoKSB3b3VsZCBoYW5kbGUgd2hldGhlciB0byB2YWxpZGF0ZSB0aGUgU2V0dGFibGVUZXhG
b3JtYXQKKyAgICAgICAgLy8gYnkgY2hlY2tpbmcgaWYgdGhlIEFycmF5QnVmZmVyVmlldyBpcyBu
dWxsIG9yIG5vdC4KKyAgICAgICAgaWYgKHNvdXJjZVR5cGUgIT0gU291cmNlQXJyYXlCdWZmZXJW
aWV3KSB7CisgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoZnVuY3Rp
b25OYW1lLCBmb3JtYXQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChm
dW5jdGlvbk5hbWUsIGZvcm1hdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGlmICghdmFsaWRhdGVTaXplKGZ1bmN0aW9uTmFtZSwgeG9mZnNldCwgeW9mZnNldCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0
dXJlLT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVy
ZS0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiZGlt
ZW5zaW9ucyBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAodGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZl
bCkgIT0gZm9ybWF0IHx8IHRleHR1cmUtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgIT0gdHlwZSkg
eworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIGFuZCBmb3JtYXQgZG8gbm90IG1hdGNo
IHRleHR1cmUiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
QXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmIChp
c0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEoInRleEltYWdlMkQiLCBsZXZl
bCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMsIE51bGxBbGxvd2VkKSkKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKCJ0ZXhJbWFnZTJE
IiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLCBOdWxsQWxsb3dl
ZCkKKyAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1Yklt
YWdlMkQsIFNvdXJjZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKICAgICAgICAg
cmV0dXJuOwogICAgIHZvaWQqIGRhdGEgPSBwaXhlbHMgPyBwaXhlbHMtPmJhc2VBZGRyZXNzKCkg
OiAwOwogICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wRGF0YTsKQEAgLTM3OTAsMjIgKzM4MjgsOSBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlRGF0YSogcGl4ZWxz
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExv
c3QoKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICFwaXhlbHMgfHwgIXZhbGlkYXRlVGV4
RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIFNvdXJjZUltYWdlRGF0YSwgdGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWln
aHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKICAgICAgICAgcmV0dXJuOwogICAgIFZlY3Rv
cjx1aW50OF90PiBkYXRhOwotICAgIGlmICghcGl4ZWxzKQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKCF2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKCJ0ZXhJbWFnZTJEIiwgZm9ybWF0LCB0
eXBlLCBsZXZlbCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVU
ZXhGb3JtYXQoInRleEltYWdlMkQiLCBmb3JtYXQpKQotICAgICAgICByZXR1cm47Ci0gICAgLy8g
RklYTUU6IFVwbG9hZGluZyBJbWFnZURhdGEgdG8gaGFsZiBmbG9hdGluZyBwb2ludCB0ZXh0dXJl
IGlzIG5vdCBzdXBwb3J0ZWQgeWV0Ci0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTExMDkzNgotICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpI
QUxGX0ZMT0FUX09FUykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ0ZXhJbWFnZTJEIiwgIk9wZXJhdGlvbiBub3Qgc3Vw
cG9ydGVkIHlldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgYm9vbCBuZWVkQ29u
dmVyc2lvbiA9IHRydWU7CiAgICAgLy8gVGhlIGRhdGEgZnJvbSBJbWFnZURhdGEgaXMgYWx3YXlz
IG9mIGZvcm1hdCBSR0JBOC4KICAgICAvLyBObyBjb252ZXJzaW9uIGlzIG5lZWRlZCBpZiBkZXN0
aW5hdGlvbiBmb3JtYXQgaXMgUkdCQSBhbmQgdHlwZSBpcyBVU0lHTkVEX0JZVEUgYW5kIG5vIEZs
aXAgb3IgUHJlbXVsdGlwbHkgb3BlcmF0aW9uIGlzIHJlcXVpcmVkLgpAQCAtMzgyOCw0OCArMzg1
MywyMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFnZUVs
ZW1lbnQqIGltYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3QoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVIVE1M
SW1hZ2VFbGVtZW50KCJ0ZXhJbWFnZTJEIiwgaW1hZ2UpKQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKHdvdWxkVGFpbnRPcmlnaW4oaW1hZ2UpKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJS
OworICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlSFRNTEltYWdlRWxlbWVudCgi
dGV4SW1hZ2UyRCIsIGltYWdlLCBlYykpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8g
RklYTUU6IFVwbG9hZGluZyBJbWFnZUVsZW1lbnQgdG8gaGFsZiBmbG9hdGluZyBwb2ludCB0ZXh0
dXJlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Ci0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExMDkzNgotICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNE
OjpIQUxGX0ZMT0FUX09FUykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ0ZXhJbWFnZTJEIiwgIk9wZXJhdGlvbiBub3Qg
c3VwcG9ydGVkIHlldCIpOworICAgIEltYWdlKiBpbWFnZUZvclJlbmRlciA9IGltYWdlLT5jYWNo
ZWRJbWFnZSgpLT5pbWFnZUZvclJlbmRlcmVyKGltYWdlLT5yZW5kZXJlcigpKTsKKyAgICBpZiAo
IWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBOb3RUZXhT
dWJJbWFnZTJELCBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgaW1hZ2VGb3JSZW5kZXItPndpZHRoKCksIGltYWdlRm9yUmVuZGVyLT5oZWlnaHQo
KSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAg
IHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5
cGUsIGltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZUZvclJlbmRlcmVyKGltYWdlLT5yZW5kZXJl
cigpKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21JbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91
bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7CisgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VGb3JSZW5kZXIsIEdyYXBo
aWNzQ29udGV4dDNEOjpIdG1sRG9tSW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVs
dGlwbHlBbHBoYSwgZWMpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGlmICghY2FudmFzIHx8ICFjYW52YXMtPmJ1ZmZlcigpKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
dGV4SW1hZ2UyRCIsICJubyBjYW52YXMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAod291bGRUYWludE9yaWdpbihjYW52YXMpKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJS
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jRm9ybWF0
QW5kVHlwZSgidGV4SW1hZ2UyRCIsIGZvcm1hdCwgdHlwZSwgbGV2ZWwpKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJ0ZXhJbWFnZTJEIiwgZm9y
bWF0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIEZJWE1FOiBVcGxvYWRpbmcgSFRNTENhbnZh
c0VsZW1lbnQgdG8gaGFsZiBmbG9hdGluZyBwb2ludCB0ZXh0dXJlIGlzIG5vdCBzdXBwb3J0ZWQg
eWV0Ci0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDkz
NgotICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUykgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJ0ZXhJbWFnZTJEIiwgIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIHlldCIpOworICAg
IGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlSFRNTENhbnZhc0VsZW1lbnQoInRleElt
YWdlMkQiLCBjYW52YXMsIGVjKSB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90
VGV4U3ViSW1hZ2UyRCwgU291cmNlSFRNTENhbnZhc0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIDAsIGZvcm1h
dCwgdHlwZSwgMCwgMCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBXZWJHTFRleHR1
cmUqIHRleHR1cmUgPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFyZ2V0
LCB0cnVlKTsKICAgICAvLyBJZiBwb3NzaWJsZSwgY29weSBmcm9tIHRoZSBjYW52YXMgZWxlbWVu
dCBkaXJlY3RseSB0byB0aGUgdGV4dHVyZQpAQCAtMzkxMywxOSArMzkxMSw4IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGVudW0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgp
KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2aWRlbyB8fCAhdmlkZW8tPnZpZGVvV2lkdGgo
KSB8fCAhdmlkZW8tPnZpZGVvSGVpZ2h0KCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgIm5vIHZpZGVv
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4odmlk
ZW8pKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZSgidGV4SW1hZ2UyRCIsIGZv
cm1hdCwgdHlwZSwgbGV2ZWwpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVNl
dHRhYmxlVGV4Rm9ybWF0KCJ0ZXhJbWFnZTJEIiwgZm9ybWF0KSkKKyAgICBpZiAoaXNDb250ZXh0
TG9zdCgpIHx8ICF2YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQoInRleEltYWdlMkQiLCB2aWRlbywg
ZWMpCisgICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJ
bWFnZTJELCBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgdmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCksIDAsIGZvcm1h
dCwgdHlwZSwgMCwgMCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEdvIHRocm91Z2ggdGhl
IGZhc3QgcGF0aCBkb2luZyBhIEdQVS1HUFUgdGV4dHVyZXMgY29weSB3aXRob3V0IGEgcmVhZGJh
Y2sgdG8gc3lzdGVtIG1lbW9yeSBpZiBwb3NzaWJsZS4KQEAgLTM5NDksMTMgKzM5MzYsNiBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtCiAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJh
bWVUb0ltYWdlKHZpZGVvLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSwgZWMpOwog
ICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICAvLyBGSVhNRTogVXBsb2FkaW5n
IEhUTUxWaWRlb0VsZW1lbnQgdG8gaGFsZiBmbG9hdGluZyBwb2ludCB0ZXh0dXJlIGlzIG5vdCBz
dXBwb3J0ZWQgeWV0Ci0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTExMDkzNgotICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FU
X09FUykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sICJ0ZXhJbWFnZTJEIiwgIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIHll
dCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBo
aWNzQ29udGV4dDNEOjpIdG1sRG9tVmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVs
dGlwbHlBbHBoYSwgZWMpOwogfQogI2VuZGlmCkBAIC00MDEzLDI1ICszOTkzLDE5IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDCiB7CiAgICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFu
eSBlcnJvcnMgcmV0dXJuZWQKICAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygidGV4
U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFs
aWRhdGVTaXplKCJ0ZXhTdWJJbWFnZTJEIiwgeG9mZnNldCwgeW9mZnNldCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoInRleFN1YkltYWdlMkQi
LCBmb3JtYXQpKQotICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKCFpc0NvbnRleHRMb3N0KCkp
OworICAgIEFTU0VSVCh2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKCJ0ZXhTdWJJbWFnZTJEIiwg
VGV4U3ViSW1hZ2UyRCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBm
b3JtYXQsIHR5cGUpKTsKKyAgICBBU1NFUlQodmFsaWRhdGVTaXplKCJ0ZXhTdWJJbWFnZTJEIiwg
eG9mZnNldCwgeW9mZnNldCkpOworICAgIEFTU0VSVCh2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0
KCJ0ZXhTdWJJbWFnZTJEIiwgZm9ybWF0KSk7CiAgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxp
ZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKLSAgICBp
ZiAoIXRleCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXgt
PmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiB0ZXgtPmdldEhl
aWdodCh0YXJnZXQsIGxldmVsKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiZGltZW5zaW9ucyBv
dXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodGV4LT5nZXRJ
bnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSAhPSBmb3JtYXQgfHwgdGV4LT5nZXRUeXBlKHRh
cmdldCwgbGV2ZWwpICE9IHR5cGUpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidGV4U3ViSW1hZ2UyRCIsICJ0eXBlIGFu
ZCBmb3JtYXQgZG8gbm90IG1hdGNoIHRleHR1cmUiKTsKKyAgICBpZiAoIXRleCkgeworICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBBU1NF
UlQodGV4LT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSA+PSAoeG9mZnNldCArIHdpZHRoKSk7Cisg
ICAgQVNTRVJUKHRleC0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpID49ICh5b2Zmc2V0ICsgaGVp
Z2h0KSk7CisgICAgQVNTRVJUKHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkg
PT0gZm9ybWF0KTsKKyAgICBBU1NFUlQodGV4LT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpID09IHR5
cGUpOwogICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0
LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTQwMzksMTIgKzQwMTMsNiBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1
YkltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zm
c2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1h
Z2UqIGltYWdlLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlIGRvbVNvdXJj
ZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZSgidGV4U3ViSW1hZ2UyRCIs
IGZvcm1hdCwgdHlwZSwgbGV2ZWwpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0
ZVNldHRhYmxlVGV4Rm9ybWF0KCJ0ZXhTdWJJbWFnZTJEIiwgZm9ybWF0KSkKLSAgICAgICAgcmV0
dXJuOwogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgIEdyYXBoaWNzQ29udGV4dDNEOjpJ
bWFnZUV4dHJhY3RvciBpbWFnZUV4dHJhY3RvcihpbWFnZSwgZG9tU291cmNlLCBwcmVtdWx0aXBs
eUFscGhhLCBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dDNE
OjpOT05FKTsgIAogICAgIGlmICghaW1hZ2VFeHRyYWN0b3IuZXh0cmFjdFN1Y2NlZWRlZCgpKSB7
CkBAIC00MDc2LDcgKzQwNDQsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3Vi
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVU
ZXhGdW5jRGF0YSgidGV4U3ViSW1hZ2UyRCIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIHBpeGVscywgTnVsbE5vdEFsbG93ZWQpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkg
fHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEoInRleFN1YkltYWdlMkQiLCBsZXZlbCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMsIE51bGxOb3RBbGxvd2VkKQorICAgICAgICB8fCAh
dmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlQXJy
YXlCdWZmZXJWaWV3LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZv
cm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCiAgICAgICAgIHJldHVybjsKICAgICB2b2lk
KiBkYXRhID0gcGl4ZWxzLT5iYXNlQWRkcmVzcygpOwogICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1w
RGF0YTsKQEAgLTQxMDIsMjAgKzQwNzEsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAoIXBpeGVscykKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVUZXhGdW5j
Rm9ybWF0QW5kVHlwZSgidGV4U3ViSW1hZ2UyRCIsIGZvcm1hdCwgdHlwZSwgbGV2ZWwpKQotICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJ0ZXhTdWJJ
bWFnZTJEIiwgZm9ybWF0KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICFwaXhlbHMgfHwg
IXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUlt
YWdlRGF0YSwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCAgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMt
PmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgLy8gRklYTUU6IFVwbG9hZGluZyBJbWFnZURhdGEgdG8gaGFsZiBmbG9hdGlu
ZyBwb2ludCB0ZXh0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Ci0gICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDkzNgotICAgIGlmICh0eXBlID09IEdyYXBo
aWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ0ZXhTdWJJbWFnZTJEIiwg
Ik9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIHlldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQog
CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiAgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRy
dWU7CkBAIC00MTQwLDQ4ICs0MDk3LDIyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0
ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGluCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICBpZiAoaXNDb250
ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleFN1YkltYWdlMkQiLCBp
bWFnZSwgZWMpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZUhUTUxJbWFnZUVs
ZW1lbnQoInRleFN1YkltYWdlMkQiLCBpbWFnZSkpCisgICAgSW1hZ2UqIGltYWdlRm9yUmVuZGVy
ID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJlbmRlcmVy
KCkpOworICAgIGlmICghaW1hZ2VGb3JSZW5kZXIgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3Vi
SW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUhUTUxJbWFnZUVsZW1lbnQsIHRhcmdldCwg
bGV2ZWwsIGZvcm1hdCwgaW1hZ2VGb3JSZW5kZXItPndpZHRoKCksIGltYWdlRm9yUmVuZGVyLT5o
ZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKICAgICAgICAgcmV0
dXJuOwotICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKGltYWdlKSkgewotICAgICAgICBlYyA9IFNF
Q1VSSVRZX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGSVhNRTogVXBsb2Fk
aW5nIEhUTUxJbWFnZUVsZW1lbnQgdG8gaGFsZiBmbG9hdGluZyBwb2ludCB0ZXh0dXJlIGlzIG5v
dCBzdXBwb3J0ZWQgeWV0Ci0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExMDkzNgotICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZM
T0FUX09FUykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJ0ZXhTdWJJbWFnZTJEIiwgIk9wZXJhdGlvbiBub3Qgc3VwcG9y
dGVkIHlldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgdGV4U3ViSW1hZ2UyRElt
cGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS0+
Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJlcihpbWFnZS0+cmVuZGVyZXIoKSksIEdyYXBo
aWNzQ29udGV4dDNEOjpIdG1sRG9tSW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVs
dGlwbHlBbHBoYSwgZWMpOworICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VGb3JSZW5kZXIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpIdG1sRG9tSW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlB
bHBoYSwgZWMpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGlu
dCB5b2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3Qo
KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50
KCJ0ZXhTdWJJbWFnZTJEIiwgY2FudmFzLCBlYykKKyAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVu
YygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUhUTUxDYW52YXNFbGVtZW50
LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQo
KSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKICAgICAgICAgcmV0dXJuOwot
ICAgIGlmICghY2FudmFzIHx8ICFjYW52YXMtPmJ1ZmZlcigpKSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2Uy
RCIsICJubyBjYW52YXMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAod291bGRU
YWludE9yaWdpbihjYW52YXMpKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZSgi
dGV4U3ViSW1hZ2UyRCIsIGZvcm1hdCwgdHlwZSwgbGV2ZWwpKQotICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJ0ZXhTdWJJbWFnZTJEIiwgZm9ybWF0
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIEZJWE1FOiBVcGxvYWRpbmcgSFRNTENhbnZhc0Vs
ZW1lbnQgdG8gaGFsZiBmbG9hdGluZyBwb2ludCB0ZXh0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0
Ci0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDkzNgot
ICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUykgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJ0ZXhTdWJJbWFnZTJEIiwgIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIHlldCIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0g
Y2FudmFzLT5nZXRJbWFnZURhdGEoKTsKICAgICBpZiAoaW1hZ2VEYXRhKQpAQCAtNDE5NSwzMiAr
NDEyNiwxMyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1M
VmlkZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwot
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZpZGVv
IHx8ICF2aWRlby0+dmlkZW9XaWR0aCgpIHx8ICF2aWRlby0+dmlkZW9IZWlnaHQoKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
InRleFN1YkltYWdlMkQiLCAibm8gdmlkZW8iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKHZpZGVvKSkgewotICAgICAgICBlYyA9IFNFQ1VSSVRZ
X0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zv
cm1hdEFuZFR5cGUoInRleFN1YkltYWdlMkQiLCBmb3JtYXQsIHR5cGUsIGxldmVsKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4U3ViSW1h
Z2UyRCIsIGZvcm1hdCkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVIVE1M
VmlkZW9FbGVtZW50KCJ0ZXhTdWJJbWFnZTJEIiwgdmlkZW8sIGVjKQorICAgICAgICB8fCAhdmFs
aWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlSFRNTFZp
ZGVvRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2
aWRlby0+dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVU
b0ltYWdlKHZpZGVvLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSwgZWMpOwogICAg
IGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICAvLyBGSVhNRTogVXBsb2FkaW5nIEhU
TUxWaWRlb0VsZW1lbnQgdG8gaGFsZiBmbG9hdGluZyBwb2ludCB0ZXh0dXJlIGlzIG5vdCBzdXBw
b3J0ZWQgeWV0Ci0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExMDkzNgotICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09F
UykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJ0ZXhTdWJJbWFnZTJEIiwgIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIHll
dCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFy
Z2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwg
R3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21WaWRlbywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQ
cmVtdWx0aXBseUFscGhhLCBlYyk7CiB9CiAjZW5kaWYKQEAgLTU3MDcsNyArNTYxOSw3IEBAIFdl
YkdMQnVmZmVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQnVmZmVyRGF0YVBhcmFt
ZXRlcnMoY29uc3QgY2hhciogZnVuCiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSkKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBI
VE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFp
bWFnZSB8fCAhaW1hZ2UtPmNhY2hlZEltYWdlKCkpIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGlt
YWdlIik7CkBAIC01NzE4LDkgKzU2MzAsNDEgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlSFRNTEltYWdlRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEgKICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgaW1hZ2UiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KKyAgICBpZiAod291bGRUYWludE9yaWdpbihpbWFnZSkpIHsKKyAgICAgICAgZWMgPSBT
RUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUhUTUxDYW52YXNF
bGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZh
cywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFjYW52YXMgfHwgIWNhbnZhcy0+YnVm
ZmVyKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGNhbnZhcyIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKGNhbnZhcykpIHsKKyAgICAg
ICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlm
ICghdmlkZW8gfHwgIXZpZGVvLT52aWRlb1dpZHRoKCkgfHwgIXZpZGVvLT52aWRlb0hlaWdodCgp
KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyB2aWRlbyIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKHZpZGVvKSkgeworICAgICAgICBlYyA9
IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKyNlbmRpZgorCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0
cmliZkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRleCwgR0MzRHNp
emVpIGV4cGVjdGVkU2l6ZSwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2
MiwgR0MzRGZsb2F0IHYzKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCmluZGV4IGFi
NjQyYjRiZTIyYmY4MmU1NjRjNmQwODY3MGYxMjE0NjE5NTI0Y2IuLjVjMmFmMzdlZmFkNGJhMzBi
MTQ5OTk0NDY5ZmZiY2M1MTViNzFiZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCkBAIC02MDEsNiArNjAxLDE5IEBAIHB1Ymxp
YzoKICAgICAgICAgVGV4U3ViSW1hZ2UyRCwKICAgICB9OwogCisgICAgZW51bSBUZXhGdW5jVmFs
aWRhdGlvblNvdXJjZVR5cGUgeworICAgICAgICBTb3VyY2VBcnJheUJ1ZmZlclZpZXcsCisgICAg
ICAgIFNvdXJjZUltYWdlRGF0YSwKKyAgICAgICAgU291cmNlSFRNTEltYWdlRWxlbWVudCwKKyAg
ICAgICAgU291cmNlSFRNTENhbnZhc0VsZW1lbnQsCisgICAgICAgIFNvdXJjZUhUTUxWaWRlb0Vs
ZW1lbnQsCisgICAgfTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFn
ZTJEIHRvIGNoZWNrIGlmIHRoZSBpbnB1dCBmb3JtYXQvdHlwZS9sZXZlbC90YXJnZXQvd2lkdGgv
aGVpZ2h0L2JvcmRlci94b2Zmc2V0L3lvZmZzZXQgYXJlIHZhbGlkLgorICAgIC8vIE90aGVyd2lz
ZSwgaXQgd291bGQgcmV0dXJuIHF1aWNrbHkgd2l0aG91dCBkb2luZyBvdGhlciB3b3JrLgorICAg
IGJvb2wgdmFsaWRhdGVUZXhGdW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgVGV4RnVuY1Zh
bGlkYXRpb25GdW5jdGlvblR5cGUsIFRleEZ1bmNWYWxpZGF0aW9uU291cmNlVHlwZSwgR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNp
emVpIHdpZHRoLAorICAgICAgICBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9m
ZnNldCk7CisKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaW5wdXQgcGFyYW1ldGVy
cyBmb3IgZnVuY3Rpb25zIHtjb3B5fVRleHtTdWJ9SW1hZ2UuCiAgICAgLy8gR2VuZXJhdGVzIEdM
IGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCiAgICAg
Ym9vbCB2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwK
QEAgLTY5Miw4ICs3MDUsMTYgQEAgcHVibGljOgogICAgIC8vIFJldHVybiB0aGUgY3VycmVudCBi
b3VuZCBidWZmZXIgdG8gdGFyZ2V0LCBvciAwIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCiAg
ICAgV2ViR0xCdWZmZXIqIHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHVzYWdlKTsKIAotICAgIC8v
IEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFnZTJEIHRvIG1ha2Ugc3VyZSBpbWFnZSBp
cyByZWFkeS4KLSAgICBib29sIHZhbGlkYXRlSFRNTEltYWdlRWxlbWVudChjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEhUTUxJbWFnZUVsZW1lbnQqKTsKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
Zm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgaW1hZ2UgaXMgcmVhZHkgYW5kIHdvdWxk
bid0IHRhaW50IE9yaWdpbi4KKyAgICBib29sIHZhbGlkYXRlSFRNTEltYWdlRWxlbWVudChjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxJbWFnZUVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7
CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1
cmUgY2FudmFzIGlzIHJlYWR5IGFuZCB3b3VsZG4ndCB0YWludCBPcmlnaW4uCisgICAgYm9vbCB2
YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTENh
bnZhc0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisKKyNpZiBFTkFCTEUoVklERU8pCisgICAg
Ly8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdlMkQgdG8gbWFrZSBzdXJlIHZpZGVv
IGlzIHJlYWR5IHdvdWxkbid0IHRhaW50IE9yaWdpbi4KKyAgICBib29sIHZhbGlkYXRlSFRNTFZp
ZGVvRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxWaWRlb0VsZW1lbnQqLCBF
eGNlcHRpb25Db2RlJik7CisjZW5kaWYKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIHZl
cnRleEF0dHJpYk5me3Z9LgogICAgIHZvaWQgdmVydGV4QXR0cmliZkltcGwoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRleCwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSwgR0Mz
RGZsb2F0LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195225</attachid>
            <date>2013-03-26 22:53:25 -0700</date>
            <delta_ts>2013-03-27 18:33:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111012-20130327135121.patch</filename>
            <type>text/plain</type>
            <size>28418</size>
            <attacher name="Jun Jiang">jun.a.jiang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ2OTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWI1M2RiNDcxYjNjNzkw
OTNhZTU3OTA5OTc3ZDRmMjk4ODQ4Y2IzMy4uMzVmNjhmNGI1YzgzZjEzOTU0ODEwYTNkYzljYTZi
ZDU2YzhlMDA2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEzLTAzLTI2ICBKdW4g
SmlhbmcgIDxqdW4uYS5qaWFuZ0BpbnRlbC5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgdmFsaWRh
dGlvbiBjaGVja3MgZm9yIHRleHR1cmUgdXBsb2FkcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTExMDEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgdmFsaWRhdGlvbiBjaGVja3MgdG8gdGhl
IGVudHJ5IGxldmVsIG9mIHRleHtTdWJ9SW1hZ2UyRCwgcmV0dXJuIGVhcmx5IGZvciBpbnZhbGlk
IHBhcmFtZXRlcnMgYW5kIGF2b2lkIGR1cGxpY2F0ZWQgY2hlY2tzLgorICAgICAgICBNb3Jlb3Zl
ciwgdHVybiBhbGwgdGhlIHZhbGlkYXRpb24gY2hlY2tzIGF0IHRoZSBib3R0b20gbGV2ZWwgLSB0
ZXh7U3VifUltYWdlMkRCYXNlIGludG8gYXNzZXJ0aW9ucy4KKworICAgICAgICBBbHJlYWR5IGNv
dmVyZWQgYnkgY3VycmVudCB0ZXN0cy4KKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmNvcHlUZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dGV4SW1hZ2UyREJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp0ZXhJbWFnZTJESW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuYyk6IEEgaGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh7
U3VifUltYWdlMkQgdG8gY2hlY2sgaW5wdXQgcGFyYW1ldGVycy4KKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRCYXNlKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1M
Q2FudmFzRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Lmg6CisKIDIwMTMtMDMtMjYgIFRha2VzaGkgWW9zaGlubyAgPHR5b3No
aW5vQGNocm9taXVtLm9yZz4KIAogICAgICAgICBNYWtlIFNvY2tldFN0cmVhbUhhbmRsZSAoQ2hy
b21pdW0gcG9ydCkgZnVsbHkgdXNlIElQQyB3aW5kb3cgaW4gc2VuZCgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCA4
ZTJlYjMzZDUxMTkxMmQ4NTk2NzdlYWRhMzdiODY1MTk3NmE2MmExLi4zN2QwYjQ5MWQ5NTA1NDQ2
OWIzZTQwYjBhOGU2Yjg5NzI5N2UxZDVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTE0NjMsNiArMTQ2MywxMSBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQwogICAgICAgICByZXR1cm47CiAgICAgaWYgKCF2YWxp
ZGF0ZVNpemUoImNvcHlUZXhTdWJJbWFnZTJEIiwgeG9mZnNldCwgeW9mZnNldCkgfHwgIXZhbGlk
YXRlU2l6ZSgiY29weVRleFN1YkltYWdlMkQiLCB3aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgcmV0
dXJuOworICAgIC8vIEJlZm9yZSBjaGVja2luZyBpZiBpdCBpcyBpbiB0aGUgcmFuZ2UsIGNoZWNr
IGlmIG92ZXJmbG93IGhhcHBlbnMgZmlyc3QuCisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA8IDAg
fHwgeW9mZnNldCArIGhlaWdodCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJiYWQg
ZGltZW5zaW9ucyIpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGlmICh4b2Zmc2V0ICsg
d2lkdGggPiB0ZXgtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpIHx8IHlvZmZzZXQgKyBoZWlnaHQg
PiB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgewogICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJE
IiwgInJlY3RhbmdsZSBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzY4MSwx
NyArMzY4NiwxMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhc2Uo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZQogewogICAgIC8vIEZJWE1FOiBG
b3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCiAgICAgZWMgPSAwOwotICAgIGlm
ICghdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygidGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdl
MkQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
IGZvcm1hdCwgdHlwZSkpCi0gICAgICAgIHJldHVybjsKICAgICBXZWJHTFRleHR1cmUqIHRleCA9
IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwotICAg
IGlmICghdGV4KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgp
KSB7Ci0gICAgICAgIGlmIChsZXZlbCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVp
Z2h0KSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQorICAgIEFTU0VSVCh2YWxp
ZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgdGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0
LCB0eXBlKSk7CisgICAgQVNTRVJUKHRleCk7CisgICAgQVNTRVJUKCFsZXZlbCB8fCAhV2ViR0xU
ZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpOwogICAgIGlmICghcGl4ZWxzKSB7CiAgICAg
ICAgIC8vIE5vdGU6IENocm9taXVtJ3MgT3BlbkdMIGltcGxlbWVudGF0aW9uIGNsZWFycyB0ZXh0
dXJlcyBhbmQgaXNSZXNvdXJjZVNhZmUoKSBpcyB0aGVyZWZvcmUgdHJ1ZS4KICAgICAgICAgLy8g
Rm9yIG90aGVyIGltcGxlbWVudGF0aW9ucywgaWYgdGhleSBhcmUgdXNpbmcgQU5HTEVfZGVwdGhf
dGV4dHVyZSwgQU5HTEUgZGVwdGggdGV4dHVyZXMKQEAgLTM3MDYsOCArMzcwNCw3IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJ0ZXhJ
bWFnZTJEIiwgaW50ZXJuYWxmb3JtYXQpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBB
U1NFUlQodmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4SW1hZ2UyRCIsIGludGVybmFsZm9y
bWF0KSk7CiAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwogICAgIH0KQEAgLTM3MTgsOCArMzcxNSw2
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEQmFzZShHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dGV4SW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1h
Z2UsIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29s
IGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IGVjID0gMDsKLSAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoInRleEltYWdlMkQi
LCBpbnRlcm5hbGZvcm1hdCkpCi0gICAgICAgIHJldHVybjsKICAgICBWZWN0b3I8dWludDhfdD4g
ZGF0YTsKICAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3IgaW1hZ2VFeHRyYWN0
b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNl
Q29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7CiAgICAgaWYgKCFpbWFnZUV4
dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsKQEAgLTM3NDcsMTEgKzM3NDIsNjIgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGUKICAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFw
aGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwogfQog
Citib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBl
LCBUZXhGdW5jVmFsaWRhdGlvblNvdXJjZVR5cGUgc291cmNlVHlwZSwgR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCkKK3sKKyAgICAvLyBG
SVhNRTogVXBsb2FkaW5nIHtJbWFnZURhdGEsIEhUTUxJbWFnZUVsZW1lbnQsIEhUTUxDYW52YXNF
bGVtZW50LCBIVE1MVmlkZW9FbGVtZW50fSB0byBoYWxmIGZsb2F0aW5nIHBvaW50IHRleHR1cmUg
aXMgbm90IHN1cHBvcnRlZCB5ZXQuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTA5MzYuCisgICAgaWYgKHNvdXJjZVR5cGUgIT0gU291cmNlQXJy
YXlCdWZmZXJWaWV3ICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VT
KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgeWV0Iik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVu
Y1BhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBmdW5jdGlvblR5cGUsIHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSA9IHZhbGlkYXRl
VGV4dHVyZUJpbmRpbmcoZnVuY3Rpb25OYW1lLCB0YXJnZXQsIHRydWUpOworICAgIGlmICghdGV4
dHVyZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGZ1bmN0aW9uVHlwZSA9PSBO
b3RUZXhTdWJJbWFnZTJEKSB7CisgICAgICAgIGlmIChsZXZlbCAmJiBXZWJHTFRleHR1cmU6Omlz
TlBPVCh3aWR0aCwgaGVpZ2h0KSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxldmVsID4gMCBu
b3QgcG93ZXIgb2YgMiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIC8vIEZvciBTb3VyY2VBcnJheUJ1ZmZlclZpZXcsIGZ1bmN0aW9uIHZhbGlkYXRlVGV4
RnVuY0RhdGEoKSB3b3VsZCBoYW5kbGUgd2hldGhlciB0byB2YWxpZGF0ZSB0aGUgU2V0dGFibGVU
ZXhGb3JtYXQKKyAgICAgICAgLy8gYnkgY2hlY2tpbmcgaWYgdGhlIEFycmF5QnVmZmVyVmlldyBp
cyBudWxsIG9yIG5vdC4KKyAgICAgICAgaWYgKHNvdXJjZVR5cGUgIT0gU291cmNlQXJyYXlCdWZm
ZXJWaWV3KSB7CisgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoZnVu
Y3Rpb25OYW1lLCBmb3JtYXQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1h
dChmdW5jdGlvbk5hbWUsIGZvcm1hdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGlmICghdmFsaWRhdGVTaXplKGZ1bmN0aW9uTmFtZSwgeG9mZnNldCwgeW9mZnNldCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIEJlZm9yZSBjaGVja2luZyBpZiBp
dCBpcyBpbiB0aGUgcmFuZ2UsIGNoZWNrIGlmIG92ZXJmbG93IGhhcHBlbnMgZmlyc3QuCisgICAg
ICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPCAwIHx8IHlvZmZzZXQgKyBoZWlnaHQgPCAwKSB7Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAiYmFkIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gdGV4dHVy
ZS0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwgeW9mZnNldCArIGhlaWdodCA+IHRleHR1cmUt
PmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImRpbWVu
c2lvbnMgb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwp
ICE9IGZvcm1hdCB8fCB0ZXh0dXJlLT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpICE9IHR5cGUpIHsK
KyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBhbmQgZm9ybWF0IGRvIG5vdCBtYXRjaCB0
ZXh0dXJlIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFy
cmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoaXND
b250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKCJ0ZXhJbWFnZTJEIiwgbGV2ZWws
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLCBOdWxsQWxsb3dlZCkpCisgICAg
aWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVUZXhGdW5jRGF0YSgidGV4SW1hZ2UyRCIs
IGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscywgTnVsbEFsbG93ZWQp
CisgICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFn
ZTJELCBTb3VyY2VBcnJheUJ1ZmZlclZpZXcsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCiAgICAgICAgIHJl
dHVybjsKICAgICB2b2lkKiBkYXRhID0gcGl4ZWxzID8gcGl4ZWxzLT5iYXNlQWRkcmVzcygpIDog
MDsKICAgICBWZWN0b3I8dWludDhfdD4gdGVtcERhdGE7CkBAIC0zNzc4LDIyICszODI0LDkgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEZW51bQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0
KCkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhcGl4ZWxzIHx8ICF2YWxpZGF0ZVRleEZ1
bmMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VJbWFnZURhdGEsIHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0
KCksIDAsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCiAgICAgICAgIHJldHVybjsKICAgICBWZWN0b3I8
dWludDhfdD4gZGF0YTsKLSAgICBpZiAoIXBpeGVscykKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
ICghdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZSgidGV4SW1hZ2UyRCIsIGZvcm1hdCwgdHlw
ZSwgbGV2ZWwpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4
Rm9ybWF0KCJ0ZXhJbWFnZTJEIiwgZm9ybWF0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIEZJ
WE1FOiBVcGxvYWRpbmcgSW1hZ2VEYXRhIHRvIGhhbGYgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZSBp
cyBub3Qgc3VwcG9ydGVkIHlldAotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTA5MzYKLSAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6SEFM
Rl9GTE9BVF9PRVMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidGV4SW1hZ2UyRCIsICJPcGVyYXRpb24gbm90IHN1cHBv
cnRlZCB5ZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGJvb2wgbmVlZENvbnZl
cnNpb24gPSB0cnVlOwogICAgIC8vIFRoZSBkYXRhIGZyb20gSW1hZ2VEYXRhIGlzIGFsd2F5cyBv
ZiBmb3JtYXQgUkdCQTguCiAgICAgLy8gTm8gY29udmVyc2lvbiBpcyBuZWVkZWQgaWYgZGVzdGlu
YXRpb24gZm9ybWF0IGlzIFJHQkEgYW5kIHR5cGUgaXMgVVNJR05FRF9CWVRFIGFuZCBubyBGbGlw
IG9yIFByZW11bHRpcGx5IG9wZXJhdGlvbiBpcyByZXF1aXJlZC4KQEAgLTM4MTYsNDggKzM4NDks
MjEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVt
ZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwotICAgIGlmIChp
c0NvbnRleHRMb3N0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlSFRNTElt
YWdlRWxlbWVudCgidGV4SW1hZ2UyRCIsIGltYWdlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
ICh3b3VsZFRhaW50T3JpZ2luKGltYWdlKSkgewotICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRl
eEltYWdlMkQiLCBpbWFnZSwgZWMpKQogICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZJ
WE1FOiBVcGxvYWRpbmcgSW1hZ2VFbGVtZW50IHRvIGhhbGYgZmxvYXRpbmcgcG9pbnQgdGV4dHVy
ZSBpcyBub3Qgc3VwcG9ydGVkIHlldAotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTA5MzYKLSAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
SEFMRl9GTE9BVF9PRVMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidGV4SW1hZ2UyRCIsICJPcGVyYXRpb24gbm90IHN1
cHBvcnRlZCB5ZXQiKTsKKyAgICBJbWFnZSogaW1hZ2VGb3JSZW5kZXIgPSBpbWFnZS0+Y2FjaGVk
SW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJlcihpbWFnZS0+cmVuZGVyZXIoKSk7CisgICAgaWYgKCFp
bWFnZUZvclJlbmRlciB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3Vi
SW1hZ2UyRCwgU291cmNlSFRNTEltYWdlRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBpbWFnZUZvclJlbmRlci0+aGVpZ2h0KCks
IDAsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICB0
ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBl
LCBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJlcihpbWFnZS0+cmVuZGVyZXIo
KSksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tSW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5w
YWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOworICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlRm9yUmVuZGVyLCBHcmFwaGlj
c0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRp
cGx5QWxwaGEsIGVjKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CiAgICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBpZiAoIWNhbnZhcyB8fCAhY2FudmFzLT5idWZmZXIoKSkgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRl
eEltYWdlMkQiLCAibm8gY2FudmFzIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYg
KHdvdWxkVGFpbnRPcmlnaW4oY2FudmFzKSkgewotICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFu
ZFR5cGUoInRleEltYWdlMkQiLCBmb3JtYXQsIHR5cGUsIGxldmVsKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4SW1hZ2UyRCIsIGZvcm1h
dCkpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBGSVhNRTogVXBsb2FkaW5nIEhUTUxDYW52YXNF
bGVtZW50IHRvIGhhbGYgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZSBpcyBub3Qgc3VwcG9ydGVkIHll
dAotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTA5MzYK
LSAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAidGV4SW1hZ2UyRCIsICJPcGVyYXRpb24gbm90IHN1cHBvcnRlZCB5ZXQiKTsKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50KCJ0ZXhJbWFn
ZTJEIiwgY2FudmFzLCBlYykgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRl
eFN1YkltYWdlMkQsIFNvdXJjZUhUTUxDYW52YXNFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCAwLCBmb3JtYXQs
IHR5cGUsIDAsIDApKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgV2ViR0xUZXh0dXJl
KiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4SW1hZ2UyRCIsIHRhcmdldCwg
dHJ1ZSk7CiAgICAgLy8gSWYgcG9zc2libGUsIGNvcHkgZnJvbSB0aGUgY2FudmFzIGVsZW1lbnQg
ZGlyZWN0bHkgdG8gdGhlIHRleHR1cmUKQEAgLTM5MDEsMTkgKzM5MDcsOCBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmlkZW8gfHwgIXZpZGVvLT52aWRlb1dpZHRoKCkg
fHwgIXZpZGVvLT52aWRlb0hlaWdodCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJubyB2aWRlbyIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKHZpZGVv
KSkgewotICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoInRleEltYWdlMkQiLCBmb3Jt
YXQsIHR5cGUsIGxldmVsKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVTZXR0
YWJsZVRleEZvcm1hdCgidGV4SW1hZ2UyRCIsIGZvcm1hdCkpCisgICAgaWYgKGlzQ29udGV4dExv
c3QoKSB8fCAhdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KCJ0ZXhJbWFnZTJEIiwgdmlkZW8sIGVj
KQorICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1h
Z2UyRCwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpLCAwLCBmb3JtYXQs
IHR5cGUsIDAsIDApKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBHbyB0aHJvdWdoIHRoZSBm
YXN0IHBhdGggZG9pbmcgYSBHUFUtR1BVIHRleHR1cmVzIGNvcHkgd2l0aG91dCBhIHJlYWRiYWNr
IHRvIHN5c3RlbSBtZW1vcnkgaWYgcG9zc2libGUuCkBAIC0zOTM3LDEzICszOTMyLDYgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEZW51bQogICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1l
VG9JbWFnZSh2aWRlbywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCksIGVjKTsKICAg
ICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47Ci0gICAgLy8gRklYTUU6IFVwbG9hZGluZyBI
VE1MVmlkZW9FbGVtZW50IHRvIGhhbGYgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZSBpcyBub3Qgc3Vw
cG9ydGVkIHlldAotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTA5MzYKLSAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9P
RVMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAidGV4SW1hZ2UyRCIsICJPcGVyYXRpb24gbm90IHN1cHBvcnRlZCB5ZXQi
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGlj
c0NvbnRleHQzRDo6SHRtbERvbVZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRp
cGx5QWxwaGEsIGVjKTsKIH0KICNlbmRpZgpAQCAtNDAwMSwyNSArMzk4OSwyMSBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQwogewogICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkg
ZXJyb3JzIHJldHVybmVkCiAgICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleFN1
YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlk
YXRlU2l6ZSgidGV4U3ViSW1hZ2UyRCIsIHhvZmZzZXQsIHlvZmZzZXQpKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJ0ZXhTdWJJbWFnZTJEIiwg
Zm9ybWF0KSkKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsK
KyAgICBBU1NFUlQodmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygidGV4U3ViSW1hZ2UyRCIsIFRl
eFN1YkltYWdlMkQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9y
bWF0LCB0eXBlKSk7CisgICAgQVNTRVJUKHZhbGlkYXRlU2l6ZSgidGV4U3ViSW1hZ2UyRCIsIHhv
ZmZzZXQsIHlvZmZzZXQpKTsKKyAgICBBU1NFUlQodmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgi
dGV4U3ViSW1hZ2UyRCIsIGZvcm1hdCkpOwogICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRh
dGVUZXh0dXJlQmluZGluZygidGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYg
KCF0ZXgpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gdGV4LT5n
ZXRXaWR0aCh0YXJnZXQsIGxldmVsKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4LT5nZXRIZWln
aHQodGFyZ2V0LCBsZXZlbCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImRpbWVuc2lvbnMgb3V0
IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRleC0+Z2V0SW50
ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkgIT0gZm9ybWF0IHx8IHRleC0+Z2V0VHlwZSh0YXJn
ZXQsIGxldmVsKSAhPSB0eXBlKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInRleFN1YkltYWdlMkQiLCAidHlwZSBhbmQg
Zm9ybWF0IGRvIG5vdCBtYXRjaCB0ZXh0dXJlIik7CisgICAgaWYgKCF0ZXgpIHsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgQVNTRVJU
KCh4b2Zmc2V0ICsgd2lkdGgpID49IDApOworICAgIEFTU0VSVCgoeW9mZnNldCArIGhlaWdodCkg
Pj0gMCk7CisgICAgQVNTRVJUKHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgPj0gKHhvZmZz
ZXQgKyB3aWR0aCkpOworICAgIEFTU0VSVCh0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSA+
PSAoeW9mZnNldCArIGhlaWdodCkpOworICAgIEFTU0VSVCh0ZXgtPmdldEludGVybmFsRm9ybWF0
KHRhcmdldCwgbGV2ZWwpID09IGZvcm1hdCk7CisgICAgQVNTRVJUKHRleC0+Z2V0VHlwZSh0YXJn
ZXQsIGxldmVsKSA9PSB0eXBlKTsKICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBw
aXhlbHMpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC00MDI3
LDEyICs0MDExLDYgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRC
YXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MKIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsIEltYWdlKiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRtbERv
bVNvdXJjZSBkb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUo
InRleFN1YkltYWdlMkQiLCBmb3JtYXQsIHR5cGUsIGxldmVsKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4U3ViSW1hZ2UyRCIsIGZvcm1h
dCkpCi0gICAgICAgIHJldHVybjsKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKICAgICBHcmFw
aGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNv
dXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBH
cmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7ICAKICAgICBpZiAoIWltYWdlRXh0cmFjdG9yLmV4dHJh
Y3RTdWNjZWVkZWQoKSkgewpAQCAtNDA2NCw3ICs0MDQyLDggQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJW
aWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmIChpc0NvbnRleHRMb3N0
KCkgfHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEoInRleFN1YkltYWdlMkQiLCBsZXZlbCwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMsIE51bGxOb3RBbGxvd2VkKSkKKyAgICBpZiAo
aXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKCJ0ZXhTdWJJbWFnZTJEIiwg
bGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLCBOdWxsTm90QWxsb3dl
ZCkKKyAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1Yklt
YWdlMkQsIFNvdXJjZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQogICAgICAgICBy
ZXR1cm47CiAgICAgdm9pZCogZGF0YSA9IHBpeGVscy0+YmFzZUFkZHJlc3MoKTsKICAgICBWZWN0
b3I8dWludDhfdD4gdGVtcERhdGE7CkBAIC00MDkwLDIwICs0MDY5LDggQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKCFwaXhlbHMpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8
fCAhcGl4ZWxzIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFn
ZTJELCBTb3VyY2VJbWFnZURhdGEsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgIHBpeGVscy0+d2lk
dGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0
KSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlw
ZSgidGV4U3ViSW1hZ2UyRCIsIGZvcm1hdCwgdHlwZSwgbGV2ZWwpKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJ0ZXhTdWJJbWFnZTJEIiwgZm9y
bWF0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIEZJWE1FOiBVcGxvYWRpbmcgSW1hZ2VEYXRh
IHRvIGhhbGYgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZSBpcyBub3Qgc3VwcG9ydGVkIHlldAotICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTA5MzYKLSAgICBp
ZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAi
dGV4U3ViSW1hZ2UyRCIsICJPcGVyYXRpb24gbm90IHN1cHBvcnRlZCB5ZXQiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KIAogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgIGJvb2wgbmVl
ZENvbnZlcnNpb24gPSB0cnVlOwpAQCAtNDEyOCw0OCArNDA5NSwyMiBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkp
CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KCJ0
ZXhTdWJJbWFnZTJEIiwgaW1hZ2UsIGVjKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFs
aWRhdGVIVE1MSW1hZ2VFbGVtZW50KCJ0ZXhTdWJJbWFnZTJEIiwgaW1hZ2UpKQorICAgIEltYWdl
KiBpbWFnZUZvclJlbmRlciA9IGltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZUZvclJlbmRlcmVy
KGltYWdlLT5yZW5kZXJlcigpKTsKKyAgICBpZiAoIWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0
ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MSW1hZ2VF
bGVtZW50LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBp
bWFnZUZvclJlbmRlci0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNl
dCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAod291bGRUYWludE9yaWdpbihpbWFnZSkpIHsK
LSAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Ly8gRklYTUU6IFVwbG9hZGluZyBIVE1MSW1hZ2VFbGVtZW50IHRvIGhhbGYgZmxvYXRpbmcgcG9p
bnQgdGV4dHVyZSBpcyBub3Qgc3VwcG9ydGVkIHlldAotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTA5MzYKLSAgICBpZiAodHlwZSA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidGV4U3ViSW1hZ2UyRCIsICJPcGVy
YXRpb24gbm90IHN1cHBvcnRlZCB5ZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAg
IHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1h
dCwgdHlwZSwgaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJl
bmRlcmVyKCkpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3VucGFja0ZsaXBZ
LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKKyAgICB0ZXhTdWJJbWFnZTJESW1wbCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlRm9yUmVu
ZGVyLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3Vu
cGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50
IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENhbnZhc0Vs
ZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwotICAgIGlm
IChpc0NvbnRleHRMb3N0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWNhbnZhcyB8fCAh
Y2FudmFzLT5idWZmZXIoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAibm8gY2FudmFzIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oY2FudmFzKSkg
ewotICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoInRleFN1YkltYWdlMkQiLCBmb3Jt
YXQsIHR5cGUsIGxldmVsKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUhU
TUxDYW52YXNFbGVtZW50KCJ0ZXhTdWJJbWFnZTJEIiwgY2FudmFzLCBlYykKKyAgICAgICAgfHwg
IXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUhU
TUxDYW52YXNFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwg
Y2FudmFzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKICAg
ICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4U3Vi
SW1hZ2UyRCIsIGZvcm1hdCkpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBGSVhNRTogVXBsb2Fk
aW5nIEhUTUxDYW52YXNFbGVtZW50IHRvIGhhbGYgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZSBpcyBu
b3Qgc3VwcG9ydGVkIHlldAotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTA5MzYKLSAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9G
TE9BVF9PRVMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCAidGV4U3ViSW1hZ2UyRCIsICJPcGVyYXRpb24gbm90IHN1cHBv
cnRlZCB5ZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIFJlZlB0cjxJbWFnZURh
dGE+IGltYWdlRGF0YSA9IGNhbnZhcy0+Z2V0SW1hZ2VEYXRhKCk7CiAgICAgaWYgKGltYWdlRGF0
YSkKQEAgLTQxODMsMzIgKzQxMjQsMTMgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW4KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCF2aWRlbyB8fCAhdmlkZW8tPnZpZGVvV2lkdGgoKSB8fCAhdmlkZW8tPnZpZGVv
SGVpZ2h0KCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgIm5vIHZpZGVvIik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAod291bGRUYWludE9yaWdpbih2aWRlbykpIHsKLSAgICAg
ICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCF2
YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKCJ0ZXhTdWJJbWFnZTJEIiwgZm9ybWF0LCB0eXBl
LCBsZXZlbCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhG
b3JtYXQoInRleFN1YkltYWdlMkQiLCBmb3JtYXQpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkg
fHwgIXZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIHZpZGVvLCBlYykK
KyAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdl
MkQsIFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgdmlkZW8t
PnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9m
ZnNldCwgeW9mZnNldCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxJbWFnZT4gaW1h
Z2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlbywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VN
b2RlKCksIGVjKTsKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47Ci0gICAgLy8gRklY
TUU6IFVwbG9hZGluZyBIVE1MVmlkZW9FbGVtZW50IHRvIGhhbGYgZmxvYXRpbmcgcG9pbnQgdGV4
dHVyZSBpcyBub3Qgc3VwcG9ydGVkIHlldAotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTA5MzYKLSAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQz
RDo6SEFMRl9GTE9BVF9PRVMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidGV4U3ViSW1hZ2UyRCIsICJPcGVyYXRpb24g
bm90IHN1cHBvcnRlZCB5ZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIHRleFN1
YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlw
ZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tVmlkZW8sIG1fdW5wYWNr
RmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwogfQogI2VuZGlmCkBAIC01Njg1
LDcgKzU2MDcsNyBAQCBXZWJHTEJ1ZmZlciogV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bgogICAgIHJldHVybiAwOwogfQog
Ci1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UpCitib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewogICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5jYWNoZWRJbWFnZSgpKSB7CiAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJubyBpbWFnZSIpOwpAQCAtNTY5Niw4ICs1NjE4LDQwIEBAIGJvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBICiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGltYWdlIik7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CisgICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oaW1hZ2UpKSB7
CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVIVE1MQ2FudmFzRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxDYW52
YXNFbGVtZW50KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghY2FudmFz
IHx8ICFjYW52YXMtPmJ1ZmZlcigpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBjYW52YXMiKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAod291bGRUYWludE9yaWdpbihj
YW52YXMpKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCisjaWYgRU5BQkxFKFZJREVPKQorYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudChjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBpZiAoIXZpZGVvIHx8ICF2aWRlby0+dmlkZW9XaWR0aCgpIHx8ICF2aWRl
by0+dmlkZW9IZWlnaHQoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gdmlkZW8iKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAod291bGRUYWludE9yaWdpbih2aWRlbykp
IHsKKyAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CisjZW5kaWYKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZlcnRleEF0dHJpYmZJbXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVp
bnQgaW5kZXgsIEdDM0RzaXplaSBleHBlY3RlZFNpemUsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0
IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKaW5kZXggMzQ1NjFmMDA4YmRl
MDJiNWM5MDRkZDk4OTkxMzFkZWZjYWI3OGUwZC4uMGRlYjc1MDVmN2Y1MmEwM2UzYTAwZjgyYTYx
NjgzYjE0NmRiNTM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmgKQEAgLTYwNyw2ICs2MDcsMTkgQEAgcHVibGljOgogICAgICAg
ICBUZXhTdWJJbWFnZTJELAogICAgIH07CiAKKyAgICBlbnVtIFRleEZ1bmNWYWxpZGF0aW9uU291
cmNlVHlwZSB7CisgICAgICAgIFNvdXJjZUFycmF5QnVmZmVyVmlldywKKyAgICAgICAgU291cmNl
SW1hZ2VEYXRhLAorICAgICAgICBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LAorICAgICAgICBTb3Vy
Y2VIVE1MQ2FudmFzRWxlbWVudCwKKyAgICAgICAgU291cmNlSFRNTFZpZGVvRWxlbWVudCwKKyAg
ICB9OworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdlMkQgdG8gY2hl
Y2sgaWYgdGhlIGlucHV0IGZvcm1hdC90eXBlL2xldmVsL3RhcmdldC93aWR0aC9oZWlnaHQvYm9y
ZGVyL3hvZmZzZXQveW9mZnNldCBhcmUgdmFsaWQuCisgICAgLy8gT3RoZXJ3aXNlLCBpdCB3b3Vs
ZCByZXR1cm4gcXVpY2tseSB3aXRob3V0IGRvaW5nIG90aGVyIHdvcmsuCisgICAgYm9vbCB2YWxp
ZGF0ZVRleEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBUZXhGdW5jVmFsaWRhdGlvbkZ1
bmN0aW9uVHlwZSwgVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlLCBHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgs
CisgICAgICAgIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0KTsKKwog
ICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBwYXJhbWV0ZXJzIGZvciBmdW5j
dGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KICAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5k
IHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KICAgICBib29sIHZhbGlk
YXRlVGV4RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLApAQCAtNjk4LDgg
KzcxMSwxNiBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IGJvdW5kIGJ1ZmZl
ciB0byB0YXJnZXQsIG9yIDAgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KICAgICBXZWJHTEJ1
ZmZlciogdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gdXNhZ2UpOwogCi0gICAgLy8gSGVscGVyIGZ1
bmN0aW9uIGZvciB0ZXh7U3VifUltYWdlMkQgdG8gbWFrZSBzdXJlIGltYWdlIGlzIHJlYWR5Lgot
ICAgIGJvb2wgdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgSFRNTEltYWdlRWxlbWVudCopOworICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1
Yn1JbWFnZTJEIHRvIG1ha2Ugc3VyZSBpbWFnZSBpcyByZWFkeSBhbmQgd291bGRuJ3QgdGFpbnQg
T3JpZ2luLgorICAgIGJvb2wgdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIC8v
IEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFnZTJEIHRvIG1ha2Ugc3VyZSBjYW52YXMg
aXMgcmVhZHkgYW5kIHdvdWxkbid0IHRhaW50IE9yaWdpbi4KKyAgICBib29sIHZhbGlkYXRlSFRN
TENhbnZhc0VsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MQ2FudmFzRWxlbWVu
dCosIEV4Y2VwdGlvbkNvZGUmKTsKKworI2lmIEVOQUJMRShWSURFTykKKyAgICAvLyBIZWxwZXIg
ZnVuY3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgdmlkZW8gaXMgcmVhZHkg
d291bGRuJ3QgdGFpbnQgT3JpZ2luLgorICAgIGJvb2wgdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTFZpZGVvRWxlbWVudCosIEV4Y2VwdGlvbkNv
ZGUmKTsKKyNlbmRpZgogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgdmVydGV4QXR0cmli
TmZ7dn0uCiAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJmSW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIEdDM0R1aW50IGluZGV4LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplLCBHQzNEZmxvYXQsIEdD
M0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>