<?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>72358</bug_id>
          
          <creation_ts>2011-11-14 23:27:09 -0800</creation_ts>
          <short_desc>[Qt] Mouse move event not working with Flash 11 on Mac</short_desc>
          <delta_ts>2013-04-18 21:44:56 -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>UI Events</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.6</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Titta Heikkala">titta.heikkala</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andy.shaw</cc>
    
    <cc>apatiev</cc>
    
    <cc>bobber.cheng</cc>
    
    <cc>gzjjgod</cc>
    
    <cc>hausmann</cc>
    
    <cc>lapiana</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>502678</commentid>
    <comment_count>0</comment_count>
    <who name="Titta Heikkala">titta.heikkala</who>
    <bug_when>2011-11-14 23:27:09 -0800</bug_when>
    <thetext>Overview:
Mouse move events aren&apos;t forwarded to the Flash Player 11 from Webkit on Mac OS. 

Steps to reproduce:
For example, this page: http://www.kirupa.com/developer/mx/animation/slider_tutorial_part2.swf works fine with Flash Player 10.3.183.11, but not with the latest Flash Player 11 (11.1.102.55) when viewed with fancybrowser. Attached also a file that has the page as src to view it with fancybrowser.

Actual results:
With the Flash Player 11 the slider won&apos;t work.

Expected results:
The slider can be moved.

Environment:
Mac OS X, Qt 4.7.4 (configured with -universal)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502679</commentid>
    <comment_count>1</comment_count>
      <attachid>115106</attachid>
    <who name="Titta Heikkala">titta.heikkala</who>
    <bug_when>2011-11-14 23:27:51 -0800</bug_when>
    <thetext>Created attachment 115106
html file for testing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503811</commentid>
    <comment_count>2</comment_count>
    <who name="Alessandro La Piana">lapiana</who>
    <bug_when>2011-11-16 06:26:11 -0800</bug_when>
    <thetext>I was able to reproduce it on Mac OS X 10.7.2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508198</commentid>
    <comment_count>3</comment_count>
    <who name="Anton Patiev">apatiev</who>
    <bug_when>2011-11-23 09:55:11 -0800</bug_when>
    <thetext>Reproduced on the following environment:
* Mac OS X 10.6
* Qt 4.7.4
* Flash Player 11.0.1.152</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508825</commentid>
    <comment_count>4</comment_count>
    <who name="Anton Patiev">apatiev</who>
    <bug_when>2011-11-24 09:54:56 -0800</bug_when>
    <thetext>Also reproduced on QtWebKit-2.2.0 using QtTestBrowser (/Tools/Scripts/run-launcher --qt).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511286</commentid>
    <comment_count>5</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-11-29 18:27:56 -0800</bug_when>
    <thetext>*** Bug 72014 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511675</commentid>
    <comment_count>6</comment_count>
    <who name="Alessandro La Piana">lapiana</who>
    <bug_when>2011-11-30 05:53:46 -0800</bug_when>
    <thetext>After a more detailed analysis it seems the problem is a regression in Flash Player 11 that does not handle the the null event in the Carbon even model that, apparently, is the only way used to track the mouse movement. Since the Carbon event model is deprecated it&apos;s unlikely Adobe will fix this. 
It will probably be necessary to rewrite PluginViewMac.mm switching to Cocoa event model.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721777</commentid>
    <comment_count>7</comment_count>
      <attachid>164361</attachid>
    <who name="">andy.shaw</who>
    <bug_when>2012-09-17 02:48:42 -0700</bug_when>
    <thetext>Created attachment 164361
Preliminary fix for the problem based on Qt 4.8

Additionally this patch solves a number of issues regarding indirect rendering, signal emission to indicate the frame needs repainting and 64bit support as well as Cocoa support on Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722669</commentid>
    <comment_count>8</comment_count>
      <attachid>164361</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-09-18 05:02:51 -0700</bug_when>
    <thetext>Comment on attachment 164361
Preliminary fix for the problem based on Qt 4.8

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

Nice. Here is some initial feedback :). I suggest to rebase this against webkit trunk for official submission with ChangeLog and corrected paths (no src/3rdparty/webkit). You can also use Tools/Scripts/check-webkit-style to do some rudimentary style checking.

&gt; src/3rdparty/webkit/Source/WebCore/plugins/PluginView.cpp:1282
&gt; +static const char* ChromeUserAgent = &quot;Mozilla/5.0 (&quot;

This should be static const char* const ChromeUserAgent or static const char ChromeUserAgent[] - either way the variable should be const, too, not only the characters it points to.

&gt; src/3rdparty/webkit/Source/WebCore/plugins/PluginView.h:233
&gt; +        bool popUpContextMenu(NPMenu *menu);

Coding style nitpick: The * should be placed near the type instead of the name.

&gt; src/3rdparty/webkit/Source/WebCore/plugins/mac/PluginViewMac.mm:154
&gt; +static void InitializeNPCocoaEvent(NPCocoaEvent* event)

Initialize* -&gt; initialize*

&gt; src/3rdparty/webkit/Source/WebCore/plugins/mac/PluginViewMac.mm:156
&gt; +  memset(event, 0, sizeof(NPCocoaEvent));

Incorrect level of indentation.

&gt; src/3rdparty/webkit/Source/WebCore/plugins/mac/PluginViewMac.mm:402
&gt; +        if (NPEventModelCocoa != m_eventModel)

I think m_eventModel != NPEventModelCocoa would be more consistent in style than NPEventModelCocoa != m_eventModel :)

&gt; src/3rdparty/webkit/Source/WebCore/plugins/mac/PluginViewMac.mm:482
&gt; +        NP_CGContext *miniContext = new NP_CGContext;
&gt; +        miniContext-&gt;context = this-&gt;m_contextRef;
&gt; +        m_npWindow.window = (void*)miniContext;

Why can&apos;t you use m_npCgContext here?

&gt; src/3rdparty/webkit/Source/WebCore/plugins/mac/PluginViewMac.mm:558
&gt; +    QPainter *p = context-&gt;platformContext();

Coding style nitpick: * placement

&gt; src/3rdparty/webkit/Source/WebCore/plugins/mac/PluginViewMac.mm:568
&gt; +        if (!cgContext) {
&gt; +            return;
&gt; +        } else {

Single line bodies don&apos;t use braces.

&gt; src/3rdparty/webkit/Source/WebCore/plugins/mac/PluginViewMac.mm:574
&gt; +    } else {
&gt; +        m_usePixmap = false;
&gt; +    }

Ditto.

&gt; src/3rdparty/webkit/Source/WebCore/plugins/mac/PluginViewMac.mm:773
&gt; +        NSEvent *currentEvent = [NSApp currentEvent];

Coding style nitpick: * placement</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723457</commentid>
    <comment_count>9</comment_count>
      <attachid>164714</attachid>
    <who name="">andy.shaw</who>
    <bug_when>2012-09-19 04:46:05 -0700</bug_when>
    <thetext>Created attachment 164714
Patch against trunk

Followed the steps to build and test this against trunk, I think that I covered everything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723468</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-19 05:07:01 -0700</bug_when>
    <thetext>Attachment 164714 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/plugins/npapi.h:418:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/plugins/npapi.h:420:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/ChangeLog:4:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/ChangeLog:8:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/ChangeLog:9:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 5 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723473</commentid>
    <comment_count>11</comment_count>
      <attachid>164720</attachid>
    <who name="">andy.shaw</who>
    <bug_when>2012-09-19 05:15:12 -0700</bug_when>
    <thetext>Created attachment 164720
Fixed patch with code style changes against trunk

The npapi.h file has a couple of code style oddities because it is done to match the rest of the file.  If this should change then I can do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723476</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-19 05:24:06 -0700</bug_when>
    <thetext>Attachment 164720 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/plugins/npapi.h:418:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/plugins/npapi.h:420:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 2 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726170</commentid>
    <comment_count>13</comment_count>
    <who name="Jiang Jiang">gzjjgod</who>
    <bug_when>2012-09-22 13:48:22 -0700</bug_when>
    <thetext>Regarding the title &quot;[Qt] Implement support for Cooca based NAPAI plugins on Mac&quot;, should it be NPAPI?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726284</commentid>
    <comment_count>14</comment_count>
    <who name="">andy.shaw</who>
    <bug_when>2012-09-23 12:22:41 -0700</bug_when>
    <thetext>Good point, that is a typo on my side, I can rectify that quickly enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726285</commentid>
    <comment_count>15</comment_count>
    <who name="Jiang Jiang">gzjjgod</who>
    <bug_when>2012-09-23 12:26:35 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Good point, that is a typo on my side, I can rectify that quickly enough.

And Cooca -&gt; Cocoa as well :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726526</commentid>
    <comment_count>16</comment_count>
      <attachid>165348</attachid>
    <who name="">andy.shaw</who>
    <bug_when>2012-09-24 04:02:17 -0700</bug_when>
    <thetext>Created attachment 165348
Updated patch with the typos in the change log fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726529</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-24 04:04:35 -0700</bug_when>
    <thetext>Attachment 165348 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/plugins/npapi.h:418:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/plugins/npapi.h:420:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 2 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>765399</commentid>
    <comment_count>18</comment_count>
    <who name="Bobber">bobber.cheng</who>
    <bug_when>2012-11-13 01:55:46 -0800</bug_when>
    <thetext>Hi Andy,

I applyied your patch qtwebkit_23 and changed code
&apos;JSC::JSLock::DropAllLocks dropAllLocks(JSC::SilenceAssertionsOnly); &apos; in Source/WebCore/plugins/mac/PluginViewMac.mm to &apos;JSC::JSLock::DropAllLocks dropAllLocks(JSDOMWindowBase::commonJSGlobalData());&apos; because I got error that JSC::SilenceAssertionsOnly is not found on Mac. page: http://www.kirupa.com/developer/mx/animation/slider_tutorial_part2.swf works fine now. Could you please confirmed the change is ok?

Thanks,
Bobber</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766515</commentid>
    <comment_count>19</comment_count>
    <who name="">andy.shaw</who>
    <bug_when>2012-11-13 23:52:38 -0800</bug_when>
    <thetext>Bobber: I am afraid I don&apos;t know as I don&apos;t know that part of webkit well enough, maybe someone else can comment on that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778939</commentid>
    <comment_count>20</comment_count>
      <attachid>165348</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-11-29 05:25:24 -0800</bug_when>
    <thetext>Comment on attachment 165348
Updated patch with the typos in the change log fixed

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

&gt; Source/WebCore/plugins/mac/PluginViewMac.mm:1078
&gt; +    JSC::JSLock::DropAllLocks dropAllLocks(JSC::SilenceAssertionsOnly);

Will fix this when landing, the API was changed just recently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778949</commentid>
    <comment_count>21</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-11-29 05:42:16 -0800</bug_when>
    <thetext>Committed r136124: &lt;http://trac.webkit.org/changeset/136124&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878218</commentid>
    <comment_count>22</comment_count>
    <who name="Bobber">bobber.cheng</who>
    <bug_when>2013-04-18 21:44:56 -0700</bug_when>
    <thetext>Hi guys, could you please check bug 113553?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>115106</attachid>
            <date>2011-11-14 23:27:51 -0800</date>
            <delta_ts>2011-11-14 23:27:51 -0800</delta_ts>
            <desc>html file for testing</desc>
            <filename>test.html</filename>
            <type>text/html</type>
            <size>122</size>
            <attacher name="Titta Heikkala">titta.heikkala</attacher>
            
              <data encoding="base64">PGVtYmVkIHNyYz0iaHR0cDovL3d3dy5raXJ1cGEuY29tL2RldmVsb3Blci9teC9hbmltYXRpb24v
c2xpZGVyX3R1dG9yaWFsX3BhcnQyLnN3ZiIgdHlwZT0iYXBwbGljYXRpb24veC1zaG9ja3dhdmUt
Zmxhc2giLz4=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164361</attachid>
            <date>2012-09-17 02:48:42 -0700</date>
            <delta_ts>2012-09-19 04:46:05 -0700</delta_ts>
            <desc>Preliminary fix for the problem based on Qt 4.8</desc>
            <filename>flashonmac.patch</filename>
            <type>text/plain</type>
            <size>38457</size>
            <attacher>andy.shaw</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYkNvcmUvYnJpZGdlL25w
YXBpLmggYi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ucGFwaS5o
CmluZGV4IGMyMTc3MTguLmZkYmUzNTAgMTAwNjQ0Ci0tLSBhL3NyYy8zcmRwYXJ0eS93ZWJraXQv
U291cmNlL1dlYkNvcmUvYnJpZGdlL25wYXBpLmgKKysrIGIvc3JjLzNyZHBhcnR5L3dlYmtpdC9T
b3VyY2UvV2ViQ29yZS9icmlkZ2UvbnBhcGkuaApAQCAtNDE2LDcgKzQxNiw5IEBAIHR5cGVkZWYg
ZW51bSB7CiAKICAgTlBOVlN1cHBvcnRzV2luZG93bGVzcyA9IDE3LAogCi0gIE5QTlZwcml2YXRl
TW9kZUJvb2wgPSAxOAorICBOUE5WcHJpdmF0ZU1vZGVCb29sID0gMTgsCisKKyAgTlBOVnN1cHBv
cnRzQWR2YW5jZWRLZXlIYW5kbGluZyA9IDIxCiAKICNpZiBkZWZpbmVkKFhQX01BQ09TWCkKICAg
LyogVXNlZCBmb3IgbmVnb3RpYXRpbmcgZHJhd2luZyBtb2RlbHMgKi8KQEAgLTQzMSw2ICs0MzMs
NyBAQCB0eXBlZGVmIGVudW0gewogICAsIE5QTlZzdXBwb3J0c0NhcmJvbkJvb2wgPSAzMDAwIC8q
IFRSVUUgaWYgdGhlIGJyb3dzZXIgc3VwcG9ydHMgdGhlIENhcmJvbiBldmVudCBtb2RlbCAqLwog
I2VuZGlmCiAgICwgTlBOVnN1cHBvcnRzQ29jb2FCb29sID0gMzAwMSAvKiBUUlVFIGlmIHRoZSBi
cm93c2VyIHN1cHBvcnRzIHRoZSBDb2NvYSBldmVudCBtb2RlbCAqLworICAsIE5QTlZzdXBwb3J0
c1VwZGF0ZWRDb2NvYVRleHRJbnB1dEJvb2wgPSAzMDAyCiAjZW5kaWYgLyogWFBfTUFDT1NYICov
CiAjaWYgZGVmaW5lZChNT1pfUExBVEZPUk1fTUFFTU8pICYmIChNT1pfUExBVEZPUk1fTUFFTU8g
Pj0gNSkKICAgLCBOUE5WU3VwcG9ydHNXaW5kb3dsZXNzTG9jYWwgPSAyMDAyCmRpZmYgLS1naXQg
YS9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2Fn
ZS5jcHAgYi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
UGFja2FnZS5jcHAKaW5kZXggYmU1ODIyMS4uN2Y2MThjMyAxMDA2NDQKLS0tIGEvc3JjLzNyZHBh
cnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCisrKyBi
L3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdl
LmNwcApAQCAtMzM3LDggKzMzNywxMCBAQCB2b2lkIFBsdWdpblBhY2thZ2U6OmluaXRpYWxpemVC
cm93c2VyRnVuY3MoKQogICAgIG1fYnJvd3NlckZ1bmNzLmdldHZhbHVlZm9ydXJsID0gTlBOX0dl
dFZhbHVlRm9yVVJMOwogICAgIG1fYnJvd3NlckZ1bmNzLnNldHZhbHVlZm9ydXJsID0gTlBOX1Nl
dFZhbHVlRm9yVVJMOwogICAgIG1fYnJvd3NlckZ1bmNzLmdldGF1dGhlbnRpY2F0aW9uaW5mbyA9
IE5QTl9HZXRBdXRoZW50aWNhdGlvbkluZm87CisKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3B1cGNv
bnRleHRtZW51ID0gTlBOX1BvcFVwQ29udGV4dE1lbnU7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIAogI2lmIEVOQUJMRShQTFVHSU5fUEFDS0FHRV9T
SU1QTEVfSEFTSCkKIHVuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhhc2goKSBjb25zdApkaWZmIC0t
Z2l0IGEvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblF1
aXJrU2V0LmggYi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1
Z2luUXVpcmtTZXQuaAppbmRleCAxYTY4NGZlLi43ZTI5NmRjIDEwMDY0NAotLS0gYS9zcmMvM3Jk
cGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUXVpcmtTZXQuaAorKysg
Yi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUXVpcmtT
ZXQuaApAQCAtNDgsNyArNDgsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBsdWdp
blF1aXJrUmVxdWlyZXNHdGtUb29sS2l0ID0gMSA8PCAxMiwKICAgICAgICAgUGx1Z2luUXVpcmtS
ZXF1aXJlc0RlZmF1bHRTY3JlZW5EZXB0aCA9IDEgPDwgMTMsCiAgICAgICAgIFBsdWdpblF1aXJr
RG9udENhbGxTZXRXaW5kb3dNb3JlVGhhbk9uY2UgPSAxIDw8IDE0LAotICAgICAgICBQbHVnaW5R
dWlya0lnbm9yZVJpZ2h0Q2xpY2tJbldpbmRvd2xlc3NNb2RlID0gMSA8PCAxNQorICAgICAgICBQ
bHVnaW5RdWlya0lnbm9yZVJpZ2h0Q2xpY2tJbldpbmRvd2xlc3NNb2RlID0gMSA8PCAxNSwKKyAg
ICAgICAgUGx1Z2luUXVpcmtXYW50c0Nocm9tZVVzZXJBZ2VudCA9IDEgPDwgMTYKICAgICB9Owog
CiAgICAgY2xhc3MgUGx1Z2luUXVpcmtTZXQgewpkaWZmIC0tZ2l0IGEvc3JjLzNyZHBhcnR5L3dl
YmtpdC9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvc3JjLzNyZHBhcnR5
L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IGIwMjA5
NDYuLmE2ZTI5NDYgMTAwNjQ0Ci0tLSBhL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAorKysgYi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNs
dWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAibnBydW50
aW1lX2ltcGwuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogCkBAIC0xNzAsNiArMTcx
LDEwIEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQogICAgICAg
ICBoYW5kbGVNb3VzZUV2ZW50KHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCkpOwogICAg
IGVsc2UgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKICAgICAgICAgaGFuZGxlS2V5Ym9h
cmRFdmVudChzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpKTsKKyNpZiBkZWZpbmVk
KFhQX01BQ09TWCkKKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5t
b3VzZXdoZWVsRXZlbnQpCisgICAgICAgIGhhbmRsZVdoZWVsRXZlbnQoc3RhdGljX2Nhc3Q8V2hl
ZWxFdmVudCo+KGV2ZW50KSk7CisjZW5kaWYKICNpZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmZvY3Vzb3V0RXZlbnQpCiAgICAgICAgIGhhbmRsZUZvY3VzT3V0RXZlbnQoKTsK
QEAgLTg0Miw2ICs4NDcsOSBAQCBQbHVnaW5WaWV3OjpQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRG
cmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgUGx1Z2luUGFja2FnZSogcAogICAgICwgbV9pbnN0
YW5jZSgwKQogI2lmIGRlZmluZWQoWFBfTUFDT1NYKQogICAgICwgbV9pc1dpbmRvd2VkKGZhbHNl
KQorICAgICwgbV91cGRhdGVkQ29jb2FUZXh0SW5wdXRSZXF1ZXN0ZWQoZmFsc2UpCisgICAgLCBt
X2tleURvd25TZW50KGZhbHNlKQorICAgICwgbV9kaXNyZWdhcmRLZXlVcENvdW50ZXIoMCkKICNl
bHNlCiAgICAgLCBtX2lzV2luZG93ZWQodHJ1ZSkKICNlbmRpZgpAQCAtMTI3MSwxMSArMTI3OSwy
NyBAQCBzdGF0aWMgY29uc3QgY2hhciogTW96aWxsYVVzZXJBZ2VudCA9ICJNb3ppbGxhLzUuMCAo
IgogI2VuZGlmCiAgICAgICAgICIgZW4tVVM7IHJ2OjEuOC4xKSBHZWNrby8yMDA2MTAxMCBGaXJl
Zm94LzIuMCI7CiAKK3N0YXRpYyBjb25zdCBjaGFyKiBDaHJvbWVVc2VyQWdlbnQgPSAiTW96aWxs
YS81LjAgKCIKKyNpZiBkZWZpbmVkKFhQX01BQ09TWCkKKyAgICAiTWFjaW50b3NoOyBVOyBJbnRl
bCBNYWMgT1MgWDsiCisjZWxpZiBkZWZpbmVkKFhQX1dJTikKKyAgICAiV2luZG93czsgVTsgV2lu
ZG93cyBOVCA1LjE7IgorI2VsaWYgZGVmaW5lZChYUF9VTklYKQorICAgIC8vIFRoZSBHdGsgcG9y
dCB1c2VzIFgxMSBwbHVnaW5zIGluIE1hYy4KKyNpZiBPUyhEQVJXSU4pICYmIFBMQVRGT1JNKEdU
SykKKyAgICAiWDExOyBVOyBJbnRlbCBNYWMgT1MgWDsiCisjZWxzZQorICAgICJYMTE7IFU7IExp
bnV4IGk2ODY7IgorI2VuZGlmCisjZW5kaWYKKyAgICAiIEFwcGxlV2ViS2l0LzUzNC4zNCAoS0hU
TUwsIGxpa2UgR2Vja28pIENocm9tZS8xOS4wLjEwNTUuMSBTYWZhcmkvNTM0LjM0IjsKKwogY29u
c3QgY2hhciogUGx1Z2luVmlldzo6dXNlckFnZW50KCkKIHsKICAgICBpZiAobV9wbHVnaW4tPnF1
aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50KSkKICAgICAg
ICAgcmV0dXJuIE1vemlsbGFVc2VyQWdlbnQ7Ci0KKyAgICBlbHNlIGlmIChtX3BsdWdpbi0+cXVp
cmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtXYW50c0Nocm9tZVVzZXJBZ2VudCkpCisgICAgICAg
IHJldHVybiBDaHJvbWVVc2VyQWdlbnQ7CiAgICAgaWYgKG1fdXNlckFnZW50LmlzTnVsbCgpKQog
ICAgICAgICBtX3VzZXJBZ2VudCA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQo
bV91cmwpLnV0ZjgoKTsKIApkaWZmIC0tZ2l0IGEvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaCBiL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKaW5kZXggZjUyODc1NC4uODJhMDNiNCAxMDA2
NDQKLS0tIGEvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
blZpZXcuaAorKysgYi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
UGx1Z2luVmlldy5oCkBAIC05Niw2ICs5Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBj
bGFzcyBQbHVnaW5TdHJlYW07CiAgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsKICAgICBjbGFzcyBS
ZXNvdXJjZVJlc3BvbnNlOworICAgIGNsYXNzIFdoZWVsRXZlbnQ7CiAKICAgICBlbnVtIFBsdWdp
blN0YXR1cyB7CiAgICAgICAgIFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQbHVnaW4sCkBAIC0yMjgs
NiArMjI5LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVR5cGU7IH0KICAgICAgICAgY29uc3QgS1VS
TCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KIAorI2lmIGRlZmluZWQoWFBfTUFDT1NY
KSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgYm9vbCBwb3BVcENvbnRl
eHRNZW51KE5QTWVudSAqbWVudSk7CisjZW5kaWYKKwogI2lmIE9TKFdJTkRPV1MpICYmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgICAgICBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBQ
bHVnaW5WaWV3V25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CiAgICAgICAgIExS
RVNVTFQgd25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBB
UkFNIGxQYXJhbSk7CkBAIC0zMjgsNiArMzMzLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgYm9vbCBkaXNwYXRjaE5QRXZlbnQoTlBFdmVudCYpOwogI2VuZGlmIC8vIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQogI2VuZGlmCisjaWYgZGVmaW5lZChYUF9NQUNPU1gpICYmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBpbnQxNl90IGRpc3BhdGNoTlBDb2Nv
YUV2ZW50KE5QQ29jb2FFdmVudCYpOworICAgICAgICBib29sIG1fdXBkYXRlZENvY29hVGV4dElu
cHV0UmVxdWVzdGVkOworICAgICAgICBib29sIG1fa2V5RG93blNlbnQ7CisgICAgICAgIGJvb2wg
bV91c2VQaXhtYXA7CisgICAgICAgIHVpbnQxNl90IG1fZGlzcmVnYXJkS2V5VXBDb3VudGVyOwor
I2VuZGlmCisKKyNpZiBkZWZpbmVkKFhQX01BQ09TWCkKKyAgICAgICAgdm9pZCBoYW5kbGVXaGVl
bEV2ZW50KFdoZWVsRXZlbnQgKmV2ZW50KTsKKyNlbmRpZgogICAgICAgICB2b2lkIHVwZGF0ZVBs
dWdpbldpZGdldCgpOwogICAgICAgICB2b2lkIHBhaW50TWlzc2luZ1BsdWdpbkljb24oR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogCmRpZmYgLS1naXQgYS9zcmMvM3JkcGFydHkv
d2Via2l0L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblBhY2thZ2VNYWMuY3BwIGIv
c3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL21hYy9QbHVnaW5QYWNr
YWdlTWFjLmNwcAppbmRleCA4NjVlYTMyLi5hOTQxYzlmIDEwMDY0NAotLS0gYS9zcmMvM3JkcGFy
dHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblBhY2thZ2VNYWMuY3Bw
CisrKyBiL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1
Z2luUGFja2FnZU1hYy5jcHAKQEAgLTU3LDggKzU3LDcgQEAgdm9pZCBQbHVnaW5QYWNrYWdlOjpk
ZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKICAgICB9CiAKICAgICBpZiAo
bWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIikgewotICAgICAgICAv
LyBUaGUgZmxhc2ggcGx1Z2luIG9ubHkgcmVxdWVzdHMgd2luZG93bGVzcyBwbHVnaW5zIGlmIHdl
IHJldHVybiBhIG1vemlsbGEgdXNlciBhZ2VudAotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2lu
UXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpOworICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2lu
UXVpcmtXYW50c0Nocm9tZVVzZXJBZ2VudCk7CiAgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5R
dWlya1Rocm90dGxlSW52YWxpZGF0ZSk7CiAgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWly
a1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3NhZ2VzKTsKICAgICAgICAgbV9xdWlya3MuYWRkKFBs
dWdpblF1aXJrRmxhc2hVUkxOb3RpZnlCdWcpOwpAQCAtMTk2LDYgKzE5NSw3IEBAIGJvb2wgUGx1
Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkKIAogICAgICAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9u
ID0gKENGU3RyaW5nUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGV4dGVuc2lvbnNEaWN0LmdldCgp
LCBDRlNUUigiV2ViUGx1Z2luVHlwZURlc2NyaXB0aW9uIikpOwogICAgICAgICAgICAgbV9taW1l
VG9EZXNjcmlwdGlvbnMuc2V0KG1pbWVUeXBlLCBkZXNjcmlwdGlvbik7CisgICAgICAgICAgICBk
ZXRlcm1pbmVRdWlya3MobWltZVR5cGUpOwogICAgICAgICB9CiAKICAgICAgICAgbV9uYW1lID0g
KENGU3RyaW5nUmVmKUNGQnVuZGxlR2V0VmFsdWVGb3JJbmZvRGljdGlvbmFyeUtleShtX21vZHVs
ZSwgQ0ZTVFIoIldlYlBsdWdpbk5hbWUiKSk7CmRpZmYgLS1naXQgYS9zcmMvM3JkcGFydHkvd2Vi
a2l0L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMubW0gYi9zcmMvM3Jk
cGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMubW0K
aW5kZXggMDAwMWY0OS4uY2M2YWY4MyAxMDA2NDQKLS0tIGEvc3JjLzNyZHBhcnR5L3dlYmtpdC9T
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL21hYy9QbHVnaW5WaWV3TWFjLm1tCisrKyBiL3NyYy8zcmRw
YXJ0eS93ZWJraXQvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5tbQpA
QCAtNTgsNiArNTgsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2hlZWxF
dmVudC5oIgogI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCiAjaW5jbHVkZSAicnVudGltZV9y
b290LmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KQEAgLTc2LDkgKzc3LDEyIEBAIHVz
aW5nIEpTQzo6VVN0cmluZzsKICNpbmNsdWRlIDxRV2lkZ2V0PgogI2luY2x1ZGUgPFFLZXlFdmVu
dD4KICNpbmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNsdWRlIDxRRGF0ZVRpbWU+CisjaW5jbHVkZSA8
UVBpeG1hcD4KICNpbmNsdWRlICJRV2ViUGFnZUNsaWVudC5oIgogUVRfQkVHSU5fTkFNRVNQQUNF
CiBleHRlcm4gUV9HVUlfRVhQT1JUIE9TV2luZG93UmVmIHF0X21hY193aW5kb3dfZm9yKGNvbnN0
IFFXaWRnZXQqIHcpOworZXh0ZXJuIFFfR1VJX0VYUE9SVCBDR0NvbnRleHRSZWYgcXRfbWFjX2Nn
X2NvbnRleHQoY29uc3QgUVBhaW50RGV2aWNlICpwZGV2KTsgLy9xcGFpbnRkZXZpY2VfbWFjLmNw
cAogUVRfRU5EX05BTUVTUEFDRQogI2VuZGlmCiAKQEAgLTE0NSw2ICsxNDksMjUgQEAgc3RhdGlj
IGlubGluZSBJbnRQb2ludCB0b3BMZXZlbE9mZnNldEZvcihQbGF0Zm9ybVdpZGdldCB3aWRnZXQp
CiAgICAgcmV0dXJuIEludFBvaW50KCk7CiB9CiAKKy8vIC0tLS0tLS0tLSBDb2NvYSBzcGVjaWZp
YyB1dGlsaXR5IGZ1bmN0aW9ucyAtLS0tLS0tLS0tCisKK3N0YXRpYyB2b2lkIEluaXRpYWxpemVO
UENvY29hRXZlbnQoTlBDb2NvYUV2ZW50KiBldmVudCkKK3sKKyAgbWVtc2V0KGV2ZW50LCAwLCBz
aXplb2YoTlBDb2NvYUV2ZW50KSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IGdldE1vZGlmaWVycyhV
SUV2ZW50V2l0aEtleVN0YXRlICpldmVudCkKK3sKKyAgICBpbnQzMl90IG1vZGlmaWVycyA9IDA7
CisgICAgaWYgKGV2ZW50LT5rZXlDb2RlKCkgPT0gNTcpIG1vZGlmaWVycyB8PSBOU0FscGhhU2hp
ZnRLZXlNYXNrOworICAgIGlmIChldmVudC0+c2hpZnRLZXkoKSkgIG1vZGlmaWVycyB8PSBOU1No
aWZ0S2V5TWFzazsKKyAgICBpZiAoZXZlbnQtPmN0cmxLZXkoKSkgICBtb2RpZmllcnMgfD0gTlND
b250cm9sS2V5TWFzazsKKyAgICBpZiAoZXZlbnQtPm1ldGFLZXkoKSkgICBtb2RpZmllcnMgfD0g
TlNDb21tYW5kS2V5TWFzazsKKyAgICBpZiAoZXZlbnQtPmFsdEtleSgpKSAgICBtb2RpZmllcnMg
fD0gTlNBbHRlcm5hdGVLZXlNYXNrOworCisgICAgcmV0dXJuIG1vZGlmaWVyczsKK30KKwogLy8g
LS0tLS0tLS0tLS0tLS0tIExpZmV0aW1lIG1hbmFnZW1lbnQgLS0tLS0tLS0tLS0tLS0tLS0KIAog
Ym9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKQEAgLTE4MCwyOCArMjAzLDQwIEBAIGJv
b2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCiAgICAgTlBCb29sIGV2ZW50TW9kZWxTdXBw
b3J0ZWQ7CiAgICAgaWYgKGdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlKE5QTlZzdXBwb3J0c0Nh
cmJvbkJvb2wgKyBtX2V2ZW50TW9kZWwpLCAmZXZlbnRNb2RlbFN1cHBvcnRlZCkgIT0gTlBFUlJf
Tk9fRVJST1IKICAgICAgICAgICAgIHx8ICFldmVudE1vZGVsU3VwcG9ydGVkKSB7CisjZWxzZQor
ICAgIE5QQm9vbCBldmVudE1vZGVsU3VwcG9ydGVkOworICAgIGlmIChnZXRWYWx1ZVN0YXRpYyhO
UE5WYXJpYWJsZShOUE5Wc3VwcG9ydHNDb2NvYUJvb2wvKiArIG1fZXZlbnRNb2RlbCovKSwgJmV2
ZW50TW9kZWxTdXBwb3J0ZWQpICE9IE5QRVJSX05PX0VSUk9SCisgICAgICAgICAgICB8fCAhZXZl
bnRNb2RlbFN1cHBvcnRlZCkgewogI2VuZGlmCiAgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3Rh
dHVzQ2FuTm90TG9hZFBsdWdpbjsKICAgICAgICAgTE9HKFBsdWdpbnMsICJQbHVnLWluICclcycg
dXNlcyB1bnN1cHBvcnRlZCBldmVudCBtb2RlbCAlcyIsCiAgICAgICAgICAgICAgICAgbV9wbHVn
aW4tPm5hbWUoKS51dGY4KCkuZGF0YSgpLCBwcmV0dHlOYW1lRm9yRXZlbnRNb2RlbChtX2V2ZW50
TW9kZWwpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwotI2lmbmRlZiBOUF9OT19DQVJCT04KICAg
ICB9Ci0jZW5kaWYKIAogI2lmbmRlZiBOUF9OT19RVUlDS0RSQVcKICAgICBOUEJvb2wgZHJhd2lu
Z01vZGVsU3VwcG9ydGVkOwogICAgIGlmIChnZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZShOUE5W
c3VwcG9ydHNRdWlja0RyYXdCb29sICsgbV9kcmF3aW5nTW9kZWwpLCAmZHJhd2luZ01vZGVsU3Vw
cG9ydGVkKSAhPSBOUEVSUl9OT19FUlJPUgogICAgICAgICAgICAgfHwgIWRyYXdpbmdNb2RlbFN1
cHBvcnRlZCkgeworICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVn
aW47CisgICAgICAgIExPRyhQbHVnaW5zLCAiUGx1Zy1pbiAnJXMnIHVzZXMgdW5zdXBwb3J0ZWQg
ZHJhd2luZyBtb2RlbCAlcyIsCisgICAgICAgICAgICAgICAgbV9wbHVnaW4tPm5hbWUoKS51dGY4
KCkuZGF0YSgpLCBwcmV0dHlOYW1lRm9yRHJhd2luZ01vZGVsKG1fZHJhd2luZ01vZGVsKSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAjZW5kaWYKKworI2lmZGVmIE5QX05PX1FVSUNL
RFJBVworICAgIE5QQm9vbCBkcmF3aW5nTW9kZWxTdXBwb3J0ZWQ7CisgICAgaWYgKGdldFZhbHVl
U3RhdGljKE5QTlZhcmlhYmxlKE5QTlZzdXBwb3J0c0NvcmVHcmFwaGljc0Jvb2wvKiArIG1fZHJh
d2luZ01vZGVsKi8pLCAmZHJhd2luZ01vZGVsU3VwcG9ydGVkKSAhPSBOUEVSUl9OT19FUlJPUgor
ICAgICAgICAgICAgfHwgIWRyYXdpbmdNb2RlbFN1cHBvcnRlZCkgewogICAgICAgICBtX3N0YXR1
cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CiAgICAgICAgIExPRyhQbHVnaW5zLCAi
UGx1Zy1pbiAnJXMnIHVzZXMgdW5zdXBwb3J0ZWQgZHJhd2luZyBtb2RlbCAlcyIsCiAgICAgICAg
ICAgICAgICAgbV9wbHVnaW4tPm5hbWUoKS51dGY4KCkuZGF0YSgpLCBwcmV0dHlOYW1lRm9yRHJh
d2luZ01vZGVsKG1fZHJhd2luZ01vZGVsKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSNpZm5k
ZWYgTlBfTk9fUVVJQ0tEUkFXCiAgICAgfQogI2VuZGlmCiAKKwogI2lmIFBMQVRGT1JNKFFUKQog
ICAgIC8vIFNldCB0aGUgcGxhdGZvcm1QbHVnaW5XaWRnZXQgb25seSBpbiB0aGUgY2FzZSBvZiBR
V2ViVmlldyBzbyB0aGF0IHRoZSBjb250ZXh0IG1lbnUgYXBwZWFycyBpbiB0aGUgcmlnaHQgcGxh
Y2UuCiAgICAgLy8gSW4gYWxsIG90aGVyIGNhc2VzLCB3ZSB1c2Ugb2ZmLXNjcmVlbiByZW5kZXJp
bmcKQEAgLTIxNiwyNyArMjUxLDI5IEBAIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgp
CiAjZW5kaWYKIAogICAgIC8vIENyZWF0ZSBhIGZha2Ugd2luZG93IHJlbGF0aXZlIHRvIHdoaWNo
IGFsbCBldmVudHMgd2lsbCBiZSBzZW50IHdoZW4gdXNpbmcgb2Zmc2NyZWVuIHJlbmRlcmluZwot
ICAgIGlmICghcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkgewogI2lmbmRlZiBOUF9OT19DQVJCT04K
KyAgICBpZiAoIXBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpIHsKICAgICAgICAgLy8gTWFrZSB0aGUg
ZGVmYXVsdCBzaXplIHJlYWxseSBiaWcuIEl0IGlzIHVuY2xlYXIgd2h5IHRoaXMgaXMgcmVxdWly
ZWQgYnV0IHdpdGggYSBzbWFsbGVyIHNpemUsIG1vdXNlIG1vdmUKICAgICAgICAgLy8gZXZlbnRz
IGRvbid0IGdldCBwcm9jZXNzZWQuIFJlc2l6aW5nIHRoZSBmYWtlIHdpbmRvdyB0byBmbGFzaCdz
IHNpemUgZG9lc24ndCBoZWxwLgogICAgICAgICA6OlJlY3Qgd2luZG93Qm91bmRzID0geyAwLCAw
LCAxMDAwLCAxMDAwIH07CiAgICAgICAgIENyZWF0ZU5ld1dpbmRvdyhrRG9jdW1lbnRXaW5kb3dD
bGFzcywga1dpbmRvd1N0YW5kYXJkRG9jdW1lbnRBdHRyaWJ1dGVzLCAmd2luZG93Qm91bmRzLCAm
bV9mYWtlV2luZG93KTsKICAgICAgICAgLy8gRmxhc2ggcmVxdWlyZXMgdGhlIHdpbmRvdyB0byBi
ZSBoaWxpdGVkIHRvIHByb2Nlc3MgbW91c2UgbW92ZSBldmVudHMuCiAgICAgICAgIEhpbGl0ZVdp
bmRvdyhtX2Zha2VXaW5kb3csIHRydWUpOwotI2VuZGlmCiAgICAgfQorI2VuZGlmCiAKICAgICB1
cGRhdGVQbHVnaW5XaWRnZXQoKTsKIAogICAgIGlmICghbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRh
aW5zKFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwpKQogICAgICAgICBzZXROUFdp
bmRvd0lmTmVlZGVkKCk7CiAKKyNpZm5kZWYgTlBfTk9fQ0FSQk9OCiAgICAgLy8gVE9ETzogSW1w
bGVtZW50IG51bGwgdGltZXIgdGhyb3R0bGluZyBkZXBlbmRpbmcgb24gcGx1Z2luIGFjdGl2YXRp
b24KICAgICBtX251bGxFdmVudFRpbWVyID0gYWRvcHRQdHIobmV3IFRpbWVyPFBsdWdpblZpZXc+
KHRoaXMsICZQbHVnaW5WaWV3OjpudWxsRXZlbnRUaW1lckZpcmVkKSk7CiAgICAgbV9udWxsRXZl
bnRUaW1lci0+c3RhcnRSZXBlYXRpbmcoMC4wMik7CiAKICAgICBtX2xhc3RNb3VzZVBvcy5oID0g
bV9sYXN0TW91c2VQb3MudiA9IDA7CisjZW5kaWYgLy8gTlBfTk9fQ0FSQk9OCiAKICAgICByZXR1
cm4gdHJ1ZTsKIH0KQEAgLTI3Nyw3ICszMTQsNyBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3Jt
R2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycgog
CiAjZW5kaWYKICAgICBjYXNlIE5QTlZzdXBwb3J0c0NvY29hQm9vbDoKLSAgICAgICAgKnN0YXRp
Y19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IGZhbHNlOworICAgICAgICAqc3RhdGljX2Nhc3Q8TlBC
b29sKj4odmFsdWUpID0gdHJ1ZTsKICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtMjg3LDYgKzMyNCwxMSBAQCBib29sIFBsdWdpblZp
ZXc6OnBsYXRmb3JtR2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZh
bHVlLCBOUEVycgogICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogCisgICAgY2FzZSBOUE5Wc3VwcG9ydHNBZHZhbmNlZEtleUhhbmRsaW5nOgor
ICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gdHJ1ZTsKKyAgICAgICAgKnJl
c3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKwogI2lmbmRlZiBO
UF9OT19RVUlDS0RSQVcKICAgICAvLyBRdWlja0RyYXcgaXMgZGVwcmVjYXRlZCBpbiAxMC41IGFu
ZCBub3Qgc3VwcG9ydGVkIG9uIDY0LWJpdAogICAgIGNhc2UgTlBOVnN1cHBvcnRzUXVpY2tEcmF3
Qm9vbDoKQEAgLTMwNSw2ICszNDcsMjAgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZh
bHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnIKIC8vIFVz
ZWQgb25seSBmb3IgdmFyaWFibGVzIHRoYXQgbmVlZCBhIHZpZXcgdG8gcmVzb2x2ZQogYm9vbCBQ
bHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2
YWx1ZSwgTlBFcnJvciogZXJyb3IpCiB7CisgICAgLy8gSW4gV2ViS2l0MiwgdGhpcyBpcyBzZXQg
aWYgdGhlIHBsdWdpbiBxdWVyaWVzIGl0J3MgYXZhaWxpYWJsaXR5IGFuZAorICAgIC8vIG5vIGtl
eSBkb3duIGV2ZW50cyBoYXZlIGFscmVhZHkgYmVlbiBzZW50LgorICAgIGlmICh2YXJpYWJsZSA9
PSBOUE5Wc3VwcG9ydHNVcGRhdGVkQ29jb2FUZXh0SW5wdXRCb29sKSB7CisgICAgICAgIGlmICht
X2tleURvd25TZW50ICYmICFtX3VwZGF0ZWRDb2NvYVRleHRJbnB1dFJlcXVlc3RlZCkgeworICAg
ICAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IGZhbHNlOworICAgICAgICAg
ICAgKmVycm9yID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gdHJ1ZTsKKyAgICAgICAg
ICAgICplcnJvciA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICAgICAgbV91cGRhdGVkQ29jb2FU
ZXh0SW5wdXRSZXF1ZXN0ZWQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTM0MywzMSArMzk5LDQ2IEBAIHZv
aWQgUGx1Z2luVmlldzo6c2V0Rm9jdXMoYm9vbCBmb2N1c2VkKQogICAgIExPRyhQbHVnaW5zLCAi
UGx1Z2luVmlldzo6c2V0Rm9jdXMoJWQpIiwgZm9jdXNlZCk7CiAgICAgaWYgKCFmb2N1c2VkKSB7
CiAgICAgICAgIFdpZGdldDo6c2V0Rm9jdXMoZm9jdXNlZCk7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgaWYgKE5QRXZlbnRNb2RlbENvY29hICE9IG1fZXZlbnRNb2RlbCkKKyAgICAgICAgICAg
IHJldHVybjsgLy8gaWUgb25seSByZXR1cm4gaWYgaXQncyBhIENhcmJvbgogICAgIH0KIAogICAg
IGlmIChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQogI2lmIFBMQVRGT1JNKFFUKQotICAgICAgIHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCktPnNldEZvY3VzKFF0OjpPdGhlckZvY3VzUmVhc29uKTsKKyAg
ICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0Rm9jdXMoUXQ6Ok90aGVyRm9jdXNSZWFz
b24pOwogI2Vsc2UKICAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+U2V0Rm9jdXMoKTsK
ICNlbmRpZgogICAgZWxzZQogICAgICAgIFdpZGdldDo6c2V0Rm9jdXMoZm9jdXNlZCk7CiAKLSAg
ICAvLyBUT0RPOiBBbHNvIGhhbmRsZSBhbmQgcGFzcyBvbiBibHVyIGV2ZW50cyAoZm9jdXMgbG9z
dCkKIAotI2lmbmRlZiBOUF9OT19DQVJCT04KLSAgICBFdmVudFJlY29yZCByZWNvcmQ7Ci0gICAg
cmVjb3JkLndoYXQgPSBOUEV2ZW50VHlwZV9HZXRGb2N1c0V2ZW50OwotICAgIHJlY29yZC5tZXNz
YWdlID0gMDsKLSAgICByZWNvcmQud2hlbiA9IFRpY2tDb3VudCgpOwotICAgIHJlY29yZC53aGVy
ZSA9IGdsb2JhbE1vdXNlUG9zRm9yUGx1Z2luKCk7Ci0gICAgcmVjb3JkLm1vZGlmaWVycyA9IEdl
dEN1cnJlbnRLZXlNb2RpZmllcnMoKTsKIAotICAgIGlmICghZGlzcGF0Y2hOUEV2ZW50KHJlY29y
ZCkpCi0gICAgICAgIExPRyhFdmVudHMsICJQbHVnaW5WaWV3OjpzZXRGb2N1cyglZCk6IEZvY3Vz
IGV2ZW50IG5vdCBhY2NlcHRlZCIsIGZvY3VzZWQpOworI2lmbmRlZiBOUF9OT19DQVJCT04KKyAg
ICAvLyBUT0RPOiBBbHNvIGhhbmRsZSBhbmQgcGFzcyBvbiBibHVyIGV2ZW50cyAoZm9jdXMgbG9z
dCkKKyAgICBpZiAoTlBFdmVudE1vZGVsQ29jb2EgIT0gbV9ldmVudE1vZGVsKSB7CisgICAgICAg
IEV2ZW50UmVjb3JkIHJlY29yZDsKKyAgICAgICAgcmVjb3JkLndoYXQgPSBOUEV2ZW50VHlwZV9H
ZXRGb2N1c0V2ZW50OworICAgICAgICByZWNvcmQubWVzc2FnZSA9IDA7CisgICAgICAgIHJlY29y
ZC53aGVuID0gVGlja0NvdW50KCk7CisgICAgICAgIHJlY29yZC53aGVyZSA9IGdsb2JhbE1vdXNl
UG9zRm9yUGx1Z2luKCk7CisgICAgICAgIHJlY29yZC5tb2RpZmllcnMgPSBHZXRDdXJyZW50S2V5
TW9kaWZpZXJzKCk7CisKKyAgICAgICAgaWYgKCFkaXNwYXRjaE5QRXZlbnQocmVjb3JkKSkKKyAg
ICAgICAgICAgIExPRyhFdmVudHMsICJQbHVnaW5WaWV3OjpzZXRGb2N1cyglZCk6IEZvY3VzIGV2
ZW50IG5vdCBhY2NlcHRlZCIsIGZvY3VzZWQpOworICAgIH0gZWxzZQogI2VuZGlmCisgICAgewor
ICAgICAgICBOUENvY29hRXZlbnQgY29jb2FFdmVudDsKKyAgICAgICAgSW5pdGlhbGl6ZU5QQ29j
b2FFdmVudCgmY29jb2FFdmVudCk7CisgICAgICAgIGNvY29hRXZlbnQudHlwZSA9IE5QQ29jb2FF
dmVudEZvY3VzQ2hhbmdlZDsKKyAgICAgICAgTlBCb29sIGZvY3VzID0gZm9jdXNlZDsKKyAgICAg
ICAgY29jb2FFdmVudC5kYXRhLmZvY3VzLmhhc0ZvY3VzID0gZm9jdXM7CisKKyAgICAgICAgaWYo
IWRpc3BhdGNoTlBDb2NvYUV2ZW50KGNvY29hRXZlbnQpKSB7CisgICAgICAgICAgICBMT0coRXZl
bnRzLCAiUGx1Z2luVmlldzo6c2V0Rm9jdXMoKTogRm9jdXMgZXZlbnQgJWQgbm90IGFjY2VwdGVk
IiwgY29jb2FFdmVudC50eXBlKTsKKyAgICAgICAgfQorICAgIH0KIH0KIAogdm9pZCBQbHVnaW5W
aWV3OjpzZXRQYXJlbnRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKQEAgLTQwMCwxMCArNDcxLDE4IEBA
IHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAgICAgICAgIG1fbnBXaW5k
b3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOwogICAgIH0KIAotICAgIGlmICghbmV3Q29u
dGV4dFJlZiB8fCAhbmV3V2luZG93UmVmKQotICAgICAgICByZXR1cm47CisgICAgaWYgKCFuZXdD
b250ZXh0UmVmIHx8ICFuZXdXaW5kb3dSZWYpIHsKKyAgICAgICAgaWYgKCFtX3VzZVBpeG1hcCkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBtX25wV2luZG93LndpbmRvdyA9ICh2
b2lkKikmbV9ucENnQ29udGV4dDsKKyAgICBpZiAobV91c2VQaXhtYXApIHsKKyAgICAgICAgTlBf
Q0dDb250ZXh0ICptaW5pQ29udGV4dCA9IG5ldyBOUF9DR0NvbnRleHQ7CisgICAgICAgIG1pbmlD
b250ZXh0LT5jb250ZXh0ID0gdGhpcy0+bV9jb250ZXh0UmVmOworICAgICAgICBtX25wV2luZG93
LndpbmRvdyA9ICh2b2lkKiltaW5pQ29udGV4dDsKKyAgICB9IGVsc2UgeworICAgICAgICBtX25w
V2luZG93LndpbmRvdyA9ICh2b2lkKikmbV9ucENnQ29udGV4dDsKKyAgICB9CiAjaWZuZGVmIE5Q
X05PX0NBUkJPTgogICAgIG1fbnBDZ0NvbnRleHQud2luZG93ID0gbmV3V2luZG93UmVmOwogI2Vu
ZGlmCkBAIC00NzUsMTIgKzU1NCwzMiBAQCB2b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKIAogICAgIGlmIChjb250ZXh0
LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIHNldE5QV2luZG93
SWZOZWVkZWQoKTsKLQorI2lmIFBMQVRGT1JNKFFUKQorICAgIFFQYWludGVyICpwID0gY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHF0X21h
Y19jZ19jb250ZXh0KHAtPmRldmljZSgpKTsKKyNlbHNlCiAgICAgQ0dDb250ZXh0UmVmIGNnQ29u
dGV4dCA9IG1fbnBDZ0NvbnRleHQuY29udGV4dDsKLSAgICBpZiAoIWNnQ29udGV4dCkKLSAgICAg
ICAgcmV0dXJuOworI2VuZGlmCisgICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOworICAgIGlmICgh
Y2dDb250ZXh0KSB7CisgICAgICAgIGNnQ29udGV4dCA9IG1fY29udGV4dFJlZjsKKyAgICAgICAg
aWYgKCFjZ0NvbnRleHQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIG1fdXNlUGl4bWFwID0gdHJ1ZTsKKyAgICAgICAgICAgIHNldE5QV2luZG93
SWZOZWVkZWQoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIG1fdXNlUGl4bWFw
ID0gZmFsc2U7CisgICAgfQorICAgIGJvb2wgb2xkVXNlUGl4bWFwID0gbV91c2VQaXhtYXA7Cisg
ICAgaWYgKG1faXNUcmFuc3BhcmVudCAmJiAhbV91c2VQaXhtYXApIHsKKyAgICAgICAgaWYgKG1f
cGl4bWFwLmlzTnVsbCgpKQorICAgICAgICAgICAgbV9waXhtYXAgPSBRUGl4bWFwKGZyYW1lUmVj
dCgpLnNpemUoKSk7CisgICAgICAgIG1fdXNlUGl4bWFwID0gdHJ1ZTsKKyAgICAgICAgc2V0TlBX
aW5kb3dJZk5lZWRlZCgpOworICAgICAgICBjZ0NvbnRleHQgPSBxdF9tYWNfY2dfY29udGV4dCgm
bV9waXhtYXApOworICAgIH0KIAogICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY2dDb250ZXh0KTsK
ICAgICBpZiAocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkgewpAQCAtNDk5LDcgKzU5OCw3IEBAIHZv
aWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiByZWN0KQogICAgIHIuc2l6ZS5oZWlnaHQgPSB0YXJnZXRSZWN0LmhlaWdodCgpOwogICAg
IENHQ29udGV4dENsaXBUb1JlY3QoY2dDb250ZXh0LCByKTsKIAotICAgIGlmICghcGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKSAmJiBtX2lzVHJhbnNwYXJlbnQpIHsgLy8gY2xlYW4gdGhlIHBpeG1hcCBp
biB0cmFuc3BhcmVudCBtb2RlCisgICAgaWYgKCFwbGF0Zm9ybVBsdWdpbldpZGdldCgpIHx8IG1f
aXNUcmFuc3BhcmVudCkgeyAvLyBjbGVhbiB0aGUgcGl4bWFwIGluIHRyYW5zcGFyZW50IG1vZGUK
ICNpZiBQTEFURk9STShRVCkKICAgICAgICAgUVBhaW50ZXIgcGFpbnRlcigmbV9waXhtYXApOwog
ICAgICAgICBwYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25N
b2RlX0NsZWFyKTsKQEAgLTUwOCwzOSArNjA3LDY5IEBAIHZvaWQgUGx1Z2luVmlldzo6cGFpbnQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIH0KIAog
I2lmbmRlZiBOUF9OT19DQVJCT04KLSAgICBFdmVudFJlY29yZCBldmVudDsKLSAgICBldmVudC53
aGF0ID0gdXBkYXRlRXZ0OwotICAgIGV2ZW50Lm1lc3NhZ2UgPSAobG9uZyB1bnNpZ25lZCBpbnQp
bV9ucENnQ29udGV4dC53aW5kb3c7Ci0gICAgZXZlbnQud2hlbiA9IFRpY2tDb3VudCgpOwotICAg
IGV2ZW50LndoZXJlLmggPSAwOwotICAgIGV2ZW50LndoZXJlLnYgPSAwOwotICAgIGV2ZW50Lm1v
ZGlmaWVycyA9IEdldEN1cnJlbnRLZXlNb2RpZmllcnMoKTsKLQotICAgIGlmICghZGlzcGF0Y2hO
UEV2ZW50KGV2ZW50KSkKLSAgICAgICAgTE9HKEV2ZW50cywgIlBsdWdpblZpZXc6OnBhaW50KCk6
IFBhaW50IGV2ZW50IG5vdCBhY2NlcHRlZCIpOworICAgIGlmIChOUEV2ZW50TW9kZWxDb2NvYSAh
PSBtX2V2ZW50TW9kZWwpIHsKKyAgICAgICAgRXZlbnRSZWNvcmQgZXZlbnQ7CisgICAgICAgIGV2
ZW50LndoYXQgPSB1cGRhdGVFdnQ7CisgICAgICAgIGV2ZW50Lm1lc3NhZ2UgPSAobG9uZyB1bnNp
Z25lZCBpbnQpbV9ucENnQ29udGV4dC53aW5kb3c7CisgICAgICAgIGV2ZW50LndoZW4gPSBUaWNr
Q291bnQoKTsKKyAgICAgICAgZXZlbnQud2hlcmUuaCA9IDA7CisgICAgICAgIGV2ZW50LndoZXJl
LnYgPSAwOworICAgICAgICBldmVudC5tb2RpZmllcnMgPSBHZXRDdXJyZW50S2V5TW9kaWZpZXJz
KCk7CisKKyAgICAgICAgaWYgKCFkaXNwYXRjaE5QRXZlbnQoZXZlbnQpKQorICAgICAgICAgICAg
TE9HKEV2ZW50cywgIlBsdWdpblZpZXc6OnBhaW50KCk6IFBhaW50IGV2ZW50IG5vdCBhY2NlcHRl
ZCIpOworICAgIH0gZWxzZQogI2VuZGlmCisgICAgeworICAgICAgICBOUENvY29hRXZlbnQgY29j
b2FFdmVudDsKKyAgICAgICAgSW5pdGlhbGl6ZU5QQ29jb2FFdmVudCgmY29jb2FFdmVudCk7Cisg
ICAgICAgIGNvY29hRXZlbnQudHlwZSA9IE5QQ29jb2FFdmVudERyYXdSZWN0OworICAgICAgICBj
b2NvYUV2ZW50LmRhdGEuZHJhdy54ID0gci5vcmlnaW4ueDsKKyAgICAgICAgY29jb2FFdmVudC5k
YXRhLmRyYXcueSA9IHIub3JpZ2luLnk7CisgICAgICAgIGNvY29hRXZlbnQuZGF0YS5kcmF3Lndp
ZHRoID0gci5zaXplLndpZHRoOworICAgICAgICBjb2NvYUV2ZW50LmRhdGEuZHJhdy5oZWlnaHQg
PSByLnNpemUuaGVpZ2h0OworICAgICAgICBjb2NvYUV2ZW50LmRhdGEuZHJhdy5jb250ZXh0ID0g
Y2dDb250ZXh0OworCisgICAgICAgIGlmKCFkaXNwYXRjaE5QQ29jb2FFdmVudChjb2NvYUV2ZW50
KSkgeworICAgICAgICAgICAgTE9HKEV2ZW50cywgIlBsdWdpblZpZXc6OnBhaW50KCk6IFBhaW50
IGV2ZW50IHR5cGUgJWQgbm90IGFjY2VwdGVkIiwgY29jb2FFdmVudC50eXBlKTsKKyAgICAgICAg
fQorICAgIH0KIAotICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY2dDb250ZXh0KTsKLQotICAg
IGlmICghcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkgeworICAgIGlmICghcGxhdGZvcm1QbHVnaW5X
aWRnZXQoKSB8fCBtX2lzVHJhbnNwYXJlbnQpIHsKICNpZiBQTEFURk9STShRVCkKICAgICAgICAg
UVBhaW50ZXIqIHBhaW50ZXIgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICAgICAg
cGFpbnRlci0+ZHJhd1BpeG1hcCh0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIG1fcGl4
bWFwLCAKKyAgICAgICAgcGFpbnRlci0+ZHJhd1BpeG1hcCh0YXJnZXRSZWN0LngoKSwgdGFyZ2V0
UmVjdC55KCksIG1fcGl4bWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFJl
Y3QueCgpIC0gZnJhbWVSZWN0KCkueCgpLCB0YXJnZXRSZWN0LnkoKSAtIGZyYW1lUmVjdCgpLnko
KSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpKTsKICNlbmRpZgogICAg
IH0KKyAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNnQ29udGV4dCk7CisgICAgaWYgKG9sZFVz
ZVBpeG1hcCAhPSBtX3VzZVBpeG1hcCkKKyAgICAgICAgbV91c2VQaXhtYXAgPSBvbGRVc2VQaXht
YXA7Cit9CisKK2Jvb2wgUGx1Z2luVmlldzo6cG9wVXBDb250ZXh0TWVudShOUE1lbnUgKm1lbnUp
Cit7CisgICAgTlNFdmVudCAqY3VycmVudEV2ZW50ID0gW05TQXBwIGN1cnJlbnRFdmVudF07CisK
KyAgICAvLyBOUE5fUG9wVXBDb250ZXh0TWVudSBtdXN0IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiB0
aGUgcGx1Zy1pbidzIE5QUF9IYW5kbGVFdmVudC4KKyAgICBpZiAoIWN1cnJlbnRFdmVudCkKKyAg
ICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICBOU1dpbmRvdyAqd2luZG93
ID0gW2N1cnJlbnRFdmVudCB3aW5kb3ddOworICAgIE5TVmlldyAqdmlldyA9IFt3aW5kb3cgY29u
dGVudFZpZXddOworICAgIFtOU01lbnUgcG9wVXBDb250ZXh0TWVudTooTlNNZW51ICopbWVudSB3
aXRoRXZlbnQ6Y3VycmVudEV2ZW50IGZvclZpZXc6dmlld107CisgICAgcmV0dXJuIHRydWU7CiB9
CiAKIHZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKLSAgICBpZiAocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKKyAgICBpZiAocGxhdGZvcm1QbHVn
aW5XaWRnZXQoKSAmJiBtX2lzVHJhbnNwYXJlbnQpCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgICAg
IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPnVwZGF0ZShjb252ZXJ0VG9Db250YWluaW5nV2luZG93
KHJlY3QpKTsKICNlbHNlCiAgICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPlJlZnJlc2hS
ZWN0KGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3cocmVjdCkpOwogI2VuZGlmCi0gICAgZWxzZQot
ICAgICAgICBpbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QocmVjdCk7CisgICAgaW52YWxp
ZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KHJlY3QpOwogfQogCiB2b2lkIFBsdWdpblZpZXc6Omlu
dmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKQEAgLTU2MywxMjYgKzY5MiwyOTUgQEAgdm9pZCBQ
bHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tIEV2ZW50IGhh
bmRsaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlV2hl
ZWxFdmVudChXaGVlbEV2ZW50ICpldmVudCkKK3sKKyAgICBpZiAoTlBFdmVudE1vZGVsQ29jb2Eg
IT0gbV9ldmVudE1vZGVsIHx8ICFtX2lzU3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
TlBDb2NvYUV2ZW50IGNvY29hRXZlbnQ7CisgICAgSW5pdGlhbGl6ZU5QQ29jb2FFdmVudCgmY29j
b2FFdmVudCk7CisKKyAgICBOU0V2ZW50ICpjdXJyZW50RXZlbnQgPSBbTlNBcHAgY3VycmVudEV2
ZW50XTsKKworICAgIGNvY29hRXZlbnQudHlwZSA9IE5QQ29jb2FFdmVudFNjcm9sbFdoZWVsOwor
CisgICAgY29jb2FFdmVudC5kYXRhLm1vdXNlLnBsdWdpblggPSBldmVudC0+bGF5ZXJYKCkgLSBt
X25wV2luZG93LnggKyBtX3dpbmRvd1JlY3QueCgpIC0gbV9lbGVtZW50LT5vZmZzZXRMZWZ0KCk7
CisgICAgY29jb2FFdmVudC5kYXRhLm1vdXNlLnBsdWdpblkgPSBldmVudC0+bGF5ZXJZKCkgLSBt
X25wV2luZG93LnkgKyBtX3dpbmRvd1JlY3QueSgpIC0gbV9lbGVtZW50LT5vZmZzZXRUb3AoKTsK
KyAgICBjb2NvYUV2ZW50LmRhdGEubW91c2UuZGVsdGFYID0gW2N1cnJlbnRFdmVudCBkZWx0YVhd
OworICAgIGNvY29hRXZlbnQuZGF0YS5tb3VzZS5kZWx0YVkgPSBbY3VycmVudEV2ZW50IGRlbHRh
WV07CisgICAgY29jb2FFdmVudC5kYXRhLm1vdXNlLmRlbHRhWiA9IFtjdXJyZW50RXZlbnQgZGVs
dGFaXTsKKyAgICBjb2NvYUV2ZW50LmRhdGEubW91c2UubW9kaWZpZXJGbGFncyA9IGdldE1vZGlm
aWVycyhldmVudCk7CisKKyAgICBpZighZGlzcGF0Y2hOUENvY29hRXZlbnQoY29jb2FFdmVudCkp
IHsKKyAgICAgICAgTE9HKEV2ZW50cywgIlBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoKTog
V2hlZWwgZXZlbnQgdHlwZSAlZCBhdCAlZCwlZCBub3QgYWNjZXB0ZWQiLCBjb2NvYUV2ZW50LnR5
cGUKKyAgICAgICAgICAgIGNvY29hRXZlbnQuZGF0YS5tb3VzZS54LCBjb2NvYUV2ZW50LmRhdGEu
bW91c2UueSk7CisgICAgfQorICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworfQorCiB2
b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCiB7CiAg
ICAgaWYgKCFtX2lzU3RhcnRlZCkKICAgICAgICAgcmV0dXJuOwogCiAjaWZuZGVmIE5QX05PX0NB
UkJPTgotICAgIEV2ZW50UmVjb3JkIHJlY29yZDsKKyAgICBpZiAoTlBFdmVudE1vZGVsQ29jb2Eg
IT0gbV9ldmVudE1vZGVsKSB7CisgICAgICAgIEV2ZW50UmVjb3JkIHJlY29yZDsKKworICAgICAg
ICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpIHsKKyAg
ICAgICAgICAgIC8vIE1vdXNlIG1vdmVtZW50IGlzIGhhbmRsZWQgYnkgbnVsbCB0aW1lciBldmVu
dHMKKyAgICAgICAgICAgIG1fbGFzdE1vdXNlUG9zID0gbW91c2VQb3NGb3JQbHVnaW4oZXZlbnQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7CisgICAgICAgICAgICByZWNvcmQud2hh
dCA9IE5QRXZlbnRUeXBlX0FkanVzdEN1cnNvckV2ZW50OworICAgICAgICB9IGVsc2UgaWYgKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQpIHsKKyAgICAgICAgICAg
IHJlY29yZC53aGF0ID0gTlBFdmVudFR5cGVfQWRqdXN0Q3Vyc29yRXZlbnQ7CisgICAgICAgIH0g
ZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpIHsK
KyAgICAgICAgICAgIHJlY29yZC53aGF0ID0gbW91c2VEb3duOworICAgICAgICAgICAgLy8gVGhl
IHBsdWdpbiBuZWVkcyBmb2N1cyB0byByZWNlaXZlIGtleWJvYXJkIGV2ZW50cworICAgICAgICAg
ICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICAg
ICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEZvY3VzZWRGcmFtZShtX3BhcmVudEZyYW1l
KTsKKyAgICAgICAgICAgIG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNldEZvY3VzZWROb2Rl
KG1fZWxlbWVudCk7CisgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkubW91c2V1cEV2ZW50KSB7CisgICAgICAgICAgICByZWNvcmQud2hhdCA9IG1vdXNlVXA7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgcmVjb3JkLndoZXJlID0gbW91c2VQb3NGb3JQbHVnaW4oZXZlbnQpOworICAgICAgICByZWNv
cmQubW9kaWZpZXJzID0gbW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQpOwogCi0gICAgaWYgKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KSB7Ci0gICAgICAgIC8vIE1v
dXNlIG1vdmVtZW50IGlzIGhhbmRsZWQgYnkgbnVsbCB0aW1lciBldmVudHMKLSAgICAgICAgbV9s
YXN0TW91c2VQb3MgPSBtb3VzZVBvc0ZvclBsdWdpbihldmVudCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2
ZW50KSB7Ci0gICAgICAgIHJlY29yZC53aGF0ID0gTlBFdmVudFR5cGVfQWRqdXN0Q3Vyc29yRXZl
bnQ7Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91
dEV2ZW50KSB7Ci0gICAgICAgIHJlY29yZC53aGF0ID0gTlBFdmVudFR5cGVfQWRqdXN0Q3Vyc29y
RXZlbnQ7Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZWRvd25FdmVudCkgewotICAgICAgICByZWNvcmQud2hhdCA9IG1vdXNlRG93bjsKLSAgICAgICAg
Ly8gVGhlIHBsdWdpbiBuZWVkcyBmb2N1cyB0byByZWNlaXZlIGtleWJvYXJkIGV2ZW50cwotICAg
ICAgICBpZiAoUGFnZSogcGFnZSA9IG1fcGFyZW50RnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAg
IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkRnJhbWUobV9wYXJlbnRGcmFtZSk7
Ci0gICAgICAgIG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNldEZvY3VzZWROb2RlKG1fZWxl
bWVudCk7Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZXVwRXZlbnQpIHsKLSAgICAgICAgcmVjb3JkLndoYXQgPSBtb3VzZVVwOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcmVjb3JkLndoZXJlID0gbW91c2VQb3NGb3JQ
bHVnaW4oZXZlbnQpOwotICAgIHJlY29yZC5tb2RpZmllcnMgPSBtb2RpZmllcnNGb3JFdmVudChl
dmVudCk7CisgICAgICAgIGlmICghZXZlbnQtPmJ1dHRvbkRvd24oKSkKKyAgICAgICAgICAgIHJl
Y29yZC5tb2RpZmllcnMgfD0gYnRuU3RhdGU7CiAKLSAgICBpZiAoIWV2ZW50LT5idXR0b25Eb3du
KCkpCi0gICAgICAgIHJlY29yZC5tb2RpZmllcnMgfD0gYnRuU3RhdGU7CisgICAgICAgIGlmIChl
dmVudC0+YnV0dG9uKCkgPT0gMikKKyAgICAgICAgICAgIHJlY29yZC5tb2RpZmllcnMgfD0gY29u
dHJvbEtleTsKIAotICAgIGlmIChldmVudC0+YnV0dG9uKCkgPT0gMikKLSAgICAgICAgcmVjb3Jk
Lm1vZGlmaWVycyB8PSBjb250cm9sS2V5OworICAgICAgICBpZiAoIWRpc3BhdGNoTlBFdmVudChy
ZWNvcmQpKSB7CisgICAgICAgICAgICBpZiAocmVjb3JkLndoYXQgPT0gTlBFdmVudFR5cGVfQWRq
dXN0Q3Vyc29yRXZlbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBTaWduYWxzIHRoYXQg
dGhlIHBsdWdpbiB3YW50cyBhIG5vcm1hbCBjdXJzb3IKIAotICAgIGlmICghZGlzcGF0Y2hOUEV2
ZW50KHJlY29yZCkpIHsKLSAgICAgICAgaWYgKHJlY29yZC53aGF0ID09IE5QRXZlbnRUeXBlX0Fk
anVzdEN1cnNvckV2ZW50KQotICAgICAgICAgICAgcmV0dXJuOyAvLyBTaWduYWxzIHRoYXQgdGhl
IHBsdWdpbiB3YW50cyBhIG5vcm1hbCBjdXJzb3IKKyAgICAgICAgICAgIExPRyhFdmVudHMsICJQ
bHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KCk6IE1vdXNlIGV2ZW50IHR5cGUgJWQgYXQgJWQs
JWQgbm90IGFjY2VwdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgcmVjb3JkLndoYXQsIHJlY29y
ZC53aGVyZS5oLCByZWNvcmQud2hlcmUudik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorI2Vu
ZGlmCisgICAgeworICAgICAgICBOUENvY29hRXZlbnRUeXBlIGV2ZW50VHlwZTsKKyAgICAgICAg
aW50MzJfdCBidXR0b25OdW1iZXIgPSAwOworICAgICAgICBpbnQzMl90IGNsaWNrQ291bnQgPSAw
OworICAgICAgICBOU0V2ZW50ICpjdXJyZW50RXZlbnQgPSBbTlNBcHAgY3VycmVudEV2ZW50XTsK
KworICAgICAgICBOU0V2ZW50VHlwZSB0eXBlID0gW2N1cnJlbnRFdmVudCB0eXBlXTsKKworICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBOU0xlZnRNb3VzZURvd246CisgICAg
ICAgIGNhc2UgTlNSaWdodE1vdXNlRG93bjoKKyAgICAgICAgY2FzZSBOU090aGVyTW91c2VEb3du
OgorICAgICAgICAgICAgYnV0dG9uTnVtYmVyID0gW2N1cnJlbnRFdmVudCBidXR0b25OdW1iZXJd
OworICAgICAgICAgICAgY2xpY2tDb3VudCA9IFtjdXJyZW50RXZlbnQgY2xpY2tDb3VudF07Cisg
ICAgICAgICAgICBldmVudFR5cGUgPSBOUENvY29hRXZlbnRNb3VzZURvd247CisgICAgICAgICAg
ICAvLyBUaGUgcGx1Z2luIG5lZWRzIGZvY3VzIHRvIHJlY2VpdmUga2V5Ym9hcmQgZXZlbnRzCisg
ICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fcGFyZW50RnJhbWUtPnBhZ2UoKSkKKyAgICAg
ICAgICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZEZyYW1lKG1fcGFy
ZW50RnJhbWUpOworICAgICAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2V0Rm9j
dXNlZE5vZGUobV9lbGVtZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug
TlNMZWZ0TW91c2VVcDoKKyAgICAgICAgY2FzZSBOU1JpZ2h0TW91c2VVcDoKKyAgICAgICAgY2Fz
ZSBOU090aGVyTW91c2VVcDoKKyAgICAgICAgICAgIGJ1dHRvbk51bWJlciA9IFtjdXJyZW50RXZl
bnQgYnV0dG9uTnVtYmVyXTsKKyAgICAgICAgICAgIGNsaWNrQ291bnQgPSBbY3VycmVudEV2ZW50
IGNsaWNrQ291bnRdOworICAgICAgICAgICAgZXZlbnRUeXBlID0gTlBDb2NvYUV2ZW50TW91c2VV
cDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTlNNb3VzZU1vdmVkOgorICAg
ICAgICAgICAgZXZlbnRUeXBlID0gTlBDb2NvYUV2ZW50TW91c2VNb3ZlZDsKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGNhc2UgTlNMZWZ0TW91c2VEcmFnZ2VkOgorICAgICAgICBjYXNl
IE5TUmlnaHRNb3VzZURyYWdnZWQ6CisgICAgICAgIGNhc2UgTlNPdGhlck1vdXNlRHJhZ2dlZDoK
KyAgICAgICAgICAgIGJ1dHRvbk51bWJlciA9IFtjdXJyZW50RXZlbnQgYnV0dG9uTnVtYmVyXTsK
KyAgICAgICAgICAgIGV2ZW50VHlwZSA9IE5QQ29jb2FFdmVudE1vdXNlRHJhZ2dlZDsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTlNNb3VzZUVudGVyZWQ6CisgICAgICAgICAg
ICBldmVudFR5cGUgPSBOUENvY29hRXZlbnRNb3VzZUVudGVyZWQ7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIE5TTW91c2VFeGl0ZWQ6CisgICAgICAgICAgICBldmVudFR5cGUg
PSBOUENvY29hRXZlbnRNb3VzZUV4aXRlZDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQogCi0gICAgICAgIExPRyhFdmVudHMsICJQbHVnaW5WaWV3Ojpo
YW5kbGVNb3VzZUV2ZW50KCk6IE1vdXNlIGV2ZW50IHR5cGUgJWQgYXQgJWQsJWQgbm90IGFjY2Vw
dGVkIiwKLSAgICAgICAgICAgICAgICByZWNvcmQud2hhdCwgcmVjb3JkLndoZXJlLmgsIHJlY29y
ZC53aGVyZS52KTsKLSAgICB9IGVsc2UgeworICAgICAgICBOUENvY29hRXZlbnQgY29jb2FFdmVu
dDsKKyAgICAgICAgSW5pdGlhbGl6ZU5QQ29jb2FFdmVudCgmY29jb2FFdmVudCk7CisKKyAgICAg
ICAgY29jb2FFdmVudC50eXBlID0gZXZlbnRUeXBlOworICAgICAgICBpZiAoIShOUENvY29hRXZl
bnRNb3VzZUVudGVyZWQgPT0gZXZlbnRUeXBlIHx8IE5QQ29jb2FFdmVudE1vdXNlRXhpdGVkID09
IGV2ZW50VHlwZSkpIHsKKyAgICAgICAgICAgIGNvY29hRXZlbnQuZGF0YS5tb3VzZS5idXR0b25O
dW1iZXIgPSBidXR0b25OdW1iZXI7CisgICAgICAgICAgICBjb2NvYUV2ZW50LmRhdGEubW91c2Uu
Y2xpY2tDb3VudCA9IGNsaWNrQ291bnQ7CisgICAgICAgIH0KKworICAgICAgICBjb2NvYUV2ZW50
LmRhdGEubW91c2UucGx1Z2luWCA9IGV2ZW50LT5sYXllclgoKSAtIG1fbnBXaW5kb3cueCArIG1f
d2luZG93UmVjdC54KCkgLSBtX2VsZW1lbnQtPm9mZnNldExlZnQoKTsKKyAgICAgICAgY29jb2FF
dmVudC5kYXRhLm1vdXNlLnBsdWdpblkgPSBldmVudC0+bGF5ZXJZKCkgLSBtX25wV2luZG93Lnkg
KyBtX3dpbmRvd1JlY3QueSgpIC0gbV9lbGVtZW50LT5vZmZzZXRUb3AoKTsKKyAgICAgICAgY29j
b2FFdmVudC5kYXRhLm1vdXNlLmRlbHRhWCA9IFtjdXJyZW50RXZlbnQgZGVsdGFYXTsKKyAgICAg
ICAgY29jb2FFdmVudC5kYXRhLm1vdXNlLmRlbHRhWSA9IFtjdXJyZW50RXZlbnQgZGVsdGFZXTsK
KyAgICAgICAgY29jb2FFdmVudC5kYXRhLm1vdXNlLmRlbHRhWiA9IFtjdXJyZW50RXZlbnQgZGVs
dGFaXTsKKyAgICAgICAgY29jb2FFdmVudC5kYXRhLm1vdXNlLm1vZGlmaWVyRmxhZ3MgPSBnZXRN
b2RpZmllcnMoZXZlbnQpOworCisgICAgICAgIGludDE2X3QgcmVzcG9uc2UgPSBkaXNwYXRjaE5Q
Q29jb2FFdmVudChjb2NvYUV2ZW50KTsKKyAgICAgICAgaWYocmVzcG9uc2UgPSBrTlBFdmVudE5v
dEhhbmRsZWQpIHsKKyAgICAgICAgICAgIExPRyhFdmVudHMsICJQbHVnaW5WaWV3OjpoYW5kbGVN
b3VzZUV2ZW50KCk6IE1vdXNlIGV2ZW50IHR5cGUgJWQgYXQgJWQsJWQgbm90IGFjY2VwdGVkIiwg
Y29jb2FFdmVudC50eXBlCisgICAgICAgICAgICAgICAgY29jb2FFdmVudC5kYXRhLm1vdXNlLngs
IGNvY29hRXZlbnQuZGF0YS5tb3VzZS55KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNhZmFy
aSBwb2xpY3kgaXMgdG8gcmV0dXJuIHRydWUgZm9yIGFsbCBtb3VzZSBldmVudHMsIGJlY2F1c2Ug
c29tZSBwbHVnaW5zCisgICAgICAgIC8vIHJldHVybiBmYWxzZSBldmVuIGlmIHRoZXkgaGF2ZSBo
YW5kbGVkIHRoZSBldmVudC4KICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAg
ICAgfQotI2VuZGlmCiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChL
ZXlib2FyZEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAoIW1faXNTdGFydGVkKQogICAgICAgICBy
ZXR1cm47Ci0KICAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZl
bnQoKSAtLS0tLS0tLS0tLS0tLS0tLSAiKTsKIAogICAgIExPRyhQbHVnaW5zLCAiUFY6OmhLRSgp
OiBLRS5rZXlDb2RlOiAweCUwMlgsIEtFLmNoYXJDb2RlOiAlZCIsCiAgICAgICAgICAgICBldmVu
dC0+a2V5Q29kZSgpLCBldmVudC0+Y2hhckNvZGUoKSk7CiAKICNpZm5kZWYgTlBfTk9fQ0FSQk9O
Ci0gICAgRXZlbnRSZWNvcmQgcmVjb3JkOwotCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmtleWRvd25FdmVudCkgewotICAgICAgICAvLyBUaGlzIGV2ZW50IGlzIHRoZSBy
ZXN1bHQgb2YgYSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OktleURvd24gd2hpY2gKLSAgICAgICAg
Ly8gd2FzIGRpc2FtYmlndWF0ZWQgaW50byBhIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UmF3S2V5
RG93bi4gU2luY2UKLSAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHRleHQg
aGVyZSwgd2UgcmV0dXJuLCBhbmQgd2FpdCBmb3IgdGhlCi0gICAgICAgIC8vIGNvcnJlc3BvbmRp
bmcgZXZlbnQgYmFzZWQgb24gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpDaGFyLgotICAgICAgICBy
ZXR1cm47Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlw
cmVzc0V2ZW50KSB7Ci0gICAgICAgIC8vIFdoaWNoIHdvdWxkIGJlIHRoaXMgb25lLiBUaGlzIGV2
ZW50IHdhcyBkaXNhbWJpZ3VhdGVkIGZyb20gdGhlIHNhbWUKLSAgICAgICAgLy8gUGxhdGZvcm1L
ZXlib2FyZEV2ZW50OjpLZXlEb3duLCBidXQgdG8gYSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkNo
YXIsCi0gICAgICAgIC8vIHdoaWNoIHJldGFpbnMgdGhlIHRleHQgZnJvbSB0aGUgb3JpZ2luYWwg
ZXZlbnQuIFNvLCB3ZSBjYW4gc2FmZWx5IHBhc3MKLSAgICAgICAgLy8gb24gdGhlIGV2ZW50IGFz
IGEga2V5LWRvd24gZXZlbnQgdG8gdGhlIHBsdWdpbi4KLSAgICAgICAgcmVjb3JkLndoYXQgPSBr
ZXlEb3duOwotICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5
dXBFdmVudCkgewotICAgICAgICAvLyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OktleVVwIGV2ZW50
cyBhbHdheXMgaGF2ZSB0aGUgdGV4dCwgc28gbm90aGluZwotICAgICAgICAvLyBmYW5jeSBoZXJl
LgotICAgICAgICByZWNvcmQud2hhdCA9IGtleVVwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKE5QRXZlbnRNb2RlbENvY29hICE9IG1fZXZlbnRNb2RlbCkg
eworICAgICAgICBFdmVudFJlY29yZCByZWNvcmQ7CisgICAgICAgIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgZXZl
bnQgaXMgdGhlIHJlc3VsdCBvZiBhIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6S2V5RG93biB3aGlj
aAorICAgICAgICAgICAgLy8gd2FzIGRpc2FtYmlndWF0ZWQgaW50byBhIFBsYXRmb3JtS2V5Ym9h
cmRFdmVudDo6UmF3S2V5RG93bi4gU2luY2UKKyAgICAgICAgICAgIC8vIHdlIGRvbid0IGhhdmUg
YWNjZXNzIHRvIHRoZSB0ZXh0IGhlcmUsIHdlIHJldHVybiwgYW5kIHdhaXQgZm9yIHRoZQorICAg
ICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBldmVudCBiYXNlZCBvbiBQbGF0Zm9ybUtleWJvYXJk
RXZlbnQ6OkNoYXIuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCkgeworICAgICAgICAgICAg
Ly8gV2hpY2ggd291bGQgYmUgdGhpcyBvbmUuIFRoaXMgZXZlbnQgd2FzIGRpc2FtYmlndWF0ZWQg
ZnJvbSB0aGUgc2FtZQorICAgICAgICAgICAgLy8gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpLZXlE
b3duLCBidXQgdG8gYSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkNoYXIsCisgICAgICAgICAgICAv
LyB3aGljaCByZXRhaW5zIHRoZSB0ZXh0IGZyb20gdGhlIG9yaWdpbmFsIGV2ZW50LiBTbywgd2Ug
Y2FuIHNhZmVseSBwYXNzCisgICAgICAgICAgICAvLyBvbiB0aGUgZXZlbnQgYXMgYSBrZXktZG93
biBldmVudCB0byB0aGUgcGx1Z2luLgorICAgICAgICAgICAgcmVjb3JkLndoYXQgPSBrZXlEb3du
OworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXVw
RXZlbnQpIHsKKyAgICAgICAgICAgIC8vIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6S2V5VXAgZXZl
bnRzIGFsd2F5cyBoYXZlIHRoZSB0ZXh0LCBzbyBub3RoaW5nCisgICAgICAgICAgICAvLyBmYW5j
eSBoZXJlLgorICAgICAgICAgICAgcmVjb3JkLndoYXQgPSBrZXlVcDsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgY29uc3QgUGxhdGZvcm1L
ZXlib2FyZEV2ZW50KiBwbGF0Zm9ybUV2ZW50ID0gZXZlbnQtPmtleUV2ZW50KCk7Ci0gICAgaW50
IGtleUNvZGUgPSBwbGF0Zm9ybUV2ZW50LT5uYXRpdmVWaXJ0dWFsS2V5Q29kZSgpOworICAgICAg
ICBjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIHBsYXRmb3JtRXZlbnQgPSBldmVudC0+a2V5
RXZlbnQoKTsKKyAgICAgICAgaW50IGtleUNvZGUgPSBwbGF0Zm9ybUV2ZW50LT5uYXRpdmVWaXJ0
dWFsS2V5Q29kZSgpOwogCi0gICAgY29uc3QgU3RyaW5nIHRleHQgPSBwbGF0Zm9ybUV2ZW50LT50
ZXh0KCk7Ci0gICAgaWYgKHRleHQubGVuZ3RoKCkgPCAxKSB7Ci0gICAgICAgIGV2ZW50LT5zZXRE
ZWZhdWx0SGFuZGxlZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICBjb25zdCBT
dHJpbmcgdGV4dCA9IHBsYXRmb3JtRXZlbnQtPnRleHQoKTsKKyAgICAgICAgaWYgKHRleHQubGVu
Z3RoKCkgPCAxKSB7CisgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgV1RGOjpSZXRhaW5QdHI8Q0ZTdHJp
bmdSZWY+IGNmVGV4dChXVEY6OkFkb3B0Q0YsIHRleHQuY3JlYXRlQ0ZTdHJpbmcoKSk7CisgICAg
ICAgIFdURjo6UmV0YWluUHRyPENGU3RyaW5nUmVmPiBjZlRleHQoV1RGOjpBZG9wdENGLCB0ZXh0
LmNyZWF0ZUNGU3RyaW5nKCkpOwogCi0gICAgTE9HKFBsdWdpbnMsICJQVjo6aEtFKCk6IFBLRS50
ZXh0OiAlcywgUEtFLnVubW9kaWZpZWRUZXh0OiAlcywgUEtFLmtleUlkZW50aWZpZXI6ICVzIiwK
KyAgICAgICAgTE9HKFBsdWdpbnMsICJQVjo6aEtFKCk6IFBLRS50ZXh0OiAlcywgUEtFLnVubW9k
aWZpZWRUZXh0OiAlcywgUEtFLmtleUlkZW50aWZpZXI6ICVzIiwKICAgICAgICAgICAgIHRleHQu
YXNjaWkoKS5kYXRhKCksIHBsYXRmb3JtRXZlbnQtPnVubW9kaWZpZWRUZXh0KCkuYXNjaWkoKS5k
YXRhKCksCiAgICAgICAgICAgICBwbGF0Zm9ybUV2ZW50LT5rZXlJZGVudGlmaWVyKCkuYXNjaWko
KS5kYXRhKCkpOwogCi0gICAgY2hhciBjaGFyQ29kZXNbMl0gPSB7IDAsIDAgfTsKLSAgICBpZiAo
IUNGU3RyaW5nR2V0Q1N0cmluZyhjZlRleHQuZ2V0KCksIGNoYXJDb2RlcywgMiwgQ0ZTdHJpbmdH
ZXRTeXN0ZW1FbmNvZGluZygpKSkgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCByZXNv
bHZlIGNoYXJhY3RlciBjb2RlIHVzaW5nIHN5c3RlbSBlbmNvZGluZy4iKTsKLSAgICAgICAgZXZl
bnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgICAg
IGNoYXIgY2hhckNvZGVzWzJdID0geyAwLCAwIH07CisgICAgICAgIGlmICghQ0ZTdHJpbmdHZXRD
U3RyaW5nKGNmVGV4dC5nZXQoKSwgY2hhckNvZGVzLCAyLCBDRlN0cmluZ0dldFN5c3RlbUVuY29k
aW5nKCkpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCByZXNvbHZlIGNoYXJh
Y3RlciBjb2RlIHVzaW5nIHN5c3RlbSBlbmNvZGluZy4iKTsKKyAgICAgICAgICAgIGV2ZW50LT5z
ZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAg
ICByZWNvcmQud2hlcmUgPSBnbG9iYWxNb3VzZVBvc0ZvclBsdWdpbigpOwotICAgIHJlY29yZC5t
b2RpZmllcnMgPSBtb2RpZmllcnNGb3JFdmVudChldmVudCk7Ci0gICAgcmVjb3JkLm1lc3NhZ2Ug
PSAoKGtleUNvZGUgJiAweEZGKSA8PCA4KSB8IChjaGFyQ29kZXNbMF0gJiAweEZGKTsKLSAgICBy
ZWNvcmQud2hlbiA9IFRpY2tDb3VudCgpOworICAgICAgICByZWNvcmQud2hlcmUgPSBnbG9iYWxN
b3VzZVBvc0ZvclBsdWdpbigpOworICAgICAgICByZWNvcmQubW9kaWZpZXJzID0gbW9kaWZpZXJz
Rm9yRXZlbnQoZXZlbnQpOworICAgICAgICByZWNvcmQubWVzc2FnZSA9ICgoa2V5Q29kZSAmIDB4
RkYpIDw8IDgpIHwgKGNoYXJDb2Rlc1swXSAmIDB4RkYpOworICAgICAgICByZWNvcmQud2hlbiA9
IFRpY2tDb3VudCgpOwogCi0gICAgTE9HKFBsdWdpbnMsICJQVjo6aEtFKCk6IHJlY29yZC5tb2Rp
ZmllcnM6ICVkIiwgcmVjb3JkLm1vZGlmaWVycyk7CisgICAgICAgIExPRyhQbHVnaW5zLCAiUFY6
OmhLRSgpOiByZWNvcmQubW9kaWZpZXJzOiAlZCIsIHJlY29yZC5tb2RpZmllcnMpOwogCiAjaWYg
UExBVEZPUk0oUVQpCi0gICAgTE9HKFBsdWdpbnMsICJQVjo6aEtFKCk6IFBLRS5xdEV2ZW50KCkt
Pm5hdGl2ZVZpcnR1YWxLZXk6IDB4JTAyWCwgY2hhckNvZGU6ICVkIiwKLSAgICAgICAgICAgICAg
IGtleUNvZGUsIGludCh1Y2hhcihjaGFyQ29kZXNbMF0pKSk7CisgICAgICAgIExPRyhQbHVnaW5z
LCAiUFY6OmhLRSgpOiBQS0UucXRFdmVudCgpLT5uYXRpdmVWaXJ0dWFsS2V5OiAweCUwMlgsIGNo
YXJDb2RlOiAlZCIsCisgICAgICAgICAgICBrZXlDb2RlLCBpbnQodWNoYXIoY2hhckNvZGVzWzBd
KSkpOwogI2VuZGlmCiAKLSAgICBpZiAoIWRpc3BhdGNoTlBFdmVudChyZWNvcmQpKQotICAgICAg
ICBMT0coRXZlbnRzLCAiUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudCgpOiBLZXlib2Fy
ZCBldmVudCB0eXBlICVkIG5vdCBhY2NlcHRlZCIsIHJlY29yZC53aGF0KTsKLSAgICBlbHNlCi0g
ICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICBpZiAoIWRpc3BhdGNo
TlBFdmVudChyZWNvcmQpKQorICAgICAgICAgICAgTE9HKEV2ZW50cywgIlBsdWdpblZpZXc6Omhh
bmRsZUtleWJvYXJkRXZlbnQoKTogS2V5Ym9hcmQgZXZlbnQgdHlwZSAlZCBub3QgYWNjZXB0ZWQi
LCByZWNvcmQud2hhdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOworICAgIH0gZWxzZQogI2VuZGlmCisgICAgeworICAgICAgICBOU0V2ZW50
ICpjdXJyZW50RXZlbnQgPSBbTlNBcHAgY3VycmVudEV2ZW50XTsKKyAgICAgICAgTlBDb2NvYUV2
ZW50VHlwZSBldmVudFR5cGU7CisgICAgICAgIE5TRXZlbnRUeXBlIHR5cGUgPSBbY3VycmVudEV2
ZW50IHR5cGVdOworCisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIE5TS2V5
RG93bjoKKyAgICAgICAgICAgIGV2ZW50VHlwZSA9IE5QQ29jb2FFdmVudEtleURvd247CisgICAg
ICAgICAgICBtX2tleURvd25TZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIE5TS2V5VXA6CisgICAgICAgICAgICBpZiAobV9kaXNyZWdhcmRLZXlVcENvdW50ZXIg
PiAwKSB7CisgICAgICAgICAgICAgICAgbV9kaXNyZWdhcmRLZXlVcENvdW50ZXItLTsKKyAgICAg
ICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBldmVudFR5cGUgPSBOUENvY29hRXZl
bnRLZXlVcDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5TRmxhZ3NDaGFuZ2Vk
OgorICAgICAgICAgICAgZXZlbnRUeXBlID0gTlBDb2NvYUV2ZW50RmxhZ3NDaGFuZ2VkOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBOUENvY29hRXZlbnQgY29jb2FFdmVudDsKKyAgICAgICAgSW5p
dGlhbGl6ZU5QQ29jb2FFdmVudCgmY29jb2FFdmVudCk7CisgICAgICAgIGNvY29hRXZlbnQudHlw
ZSA9IGV2ZW50VHlwZTsKKyAgICAgICAgaWYgKGV2ZW50VHlwZSAhPSBOUENvY29hRXZlbnRGbGFn
c0NoYW5nZWQpIHsKKyAgICAgICAgICAgIE5TU3RyaW5nICpjaGFyYWN0ZXJzID0gW2N1cnJlbnRF
dmVudCBjaGFyYWN0ZXJzXTsKKyAgICAgICAgICAgIE5TU3RyaW5nICpjaGFyYWN0ZXJzSWdub3Jp
bmdNb2RpZmllcnMgPSBbY3VycmVudEV2ZW50IGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyc107
CisgICAgICAgICAgICBjb2NvYUV2ZW50LmRhdGEua2V5LmNoYXJhY3RlcnMgPSByZWludGVycHJl
dF9jYXN0PE5QTlNTdHJpbmcqPihjaGFyYWN0ZXJzKTsKKyAgICAgICAgICAgIGNvY29hRXZlbnQu
ZGF0YS5rZXkuY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzID0gcmVpbnRlcnByZXRfY2FzdDxO
UE5TU3RyaW5nKj4oY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzKTsKKyAgICAgICAgICAgIGNv
Y29hRXZlbnQuZGF0YS5rZXkuaXNBUmVwZWF0ID0gW2N1cnJlbnRFdmVudCBpc0FSZXBlYXRdOwor
ICAgICAgICAgICAgY29jb2FFdmVudC5kYXRhLmtleS5rZXlDb2RlID0gW2N1cnJlbnRFdmVudCBr
ZXlDb2RlXTsKKyAgICAgICAgICAgIGNvY29hRXZlbnQuZGF0YS5rZXkubW9kaWZpZXJGbGFncyA9
IGdldE1vZGlmaWVycyhldmVudCk7CisgICAgICAgIH0KKworICAgICAgICBpbnQxNl90IHJlc3Bv
bnNlID0gZGlzcGF0Y2hOUENvY29hRXZlbnQoY29jb2FFdmVudCk7CisgICAgICAgIGlmKHJlc3Bv
bnNlID09IGtOUEV2ZW50Tm90SGFuZGxlZCkgeworICAgICAgICAgICAgTE9HKEV2ZW50cywgIlBs
dWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoKTogS2V5Ym9hcmQgZXZlbnQgdHlwZSAlZCBu
b3QgYWNjZXB0ZWQiLCBjb2NvYUV2ZW50LnR5cGUpOworICAgICAgICB9IGVsc2UgaWYgKHJlc3Bv
bnNlID09IGtOUEV2ZW50U3RhcnRJTUUpIHsKKyAgICAgICAgICAgIC8vIGluY3JlbWVudCBjb3Vu
dGVyIGFuZCByZXNlbmQgYXMgYSB0ZXh0IGlucHV0CisgICAgICAgICAgICBtX2Rpc3JlZ2FyZEtl
eVVwQ291bnRlcisrOworICAgICAgICAgICAgTlBDb2NvYUV2ZW50IHRleHRFdmVudDsKKyAgICAg
ICAgICAgIEluaXRpYWxpemVOUENvY29hRXZlbnQoJnRleHRFdmVudCk7CisgICAgICAgICAgICB0
ZXh0RXZlbnQudHlwZSA9IE5QQ29jb2FFdmVudFRleHRJbnB1dDsKKyAgICAgICAgICAgIHRleHRF
dmVudC5kYXRhLnRleHQudGV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TlBOU1N0cmluZyo+KFtjdXJy
ZW50RXZlbnQgY2hhcmFjdGVyc10pOworICAgICAgICAgICAgcmVzcG9uc2UgPSBkaXNwYXRjaE5Q
Q29jb2FFdmVudCh0ZXh0RXZlbnQpOworICAgICAgICAgICAgaWYocmVzcG9uc2UgPT0ga05QRXZl
bnROb3RIYW5kbGVkKQorICAgICAgICAgICAgICAgIExPRyhFdmVudHMsICJQbHVnaW5WaWV3Ojpo
YW5kbGVLZXlib2FyZEV2ZW50KCk6IEtleWJvYXJkIGV2ZW50IHR5cGUgJWQgbm90IGFjY2VwdGVk
IiwgY29jb2FFdmVudC50eXBlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFsbCBrZXlib2Fy
ZCBldmVudHMgbmVlZCB0byBiZSBoYW5kbGVkIHRvIHByZXZlbnQgdGhlbSBmYWxsaW5nCisgICAg
ICAgIC8vIHRocm91Z2ggdG8gdGhlIHBhZ2UsIHVubGVzcyB0aGV5IGFyZSBNZXRhIGtleSBldmVu
dHMsIGluIHdoaWNoCisgICAgICAgIC8vIGNhc2UgdGhleSBhcmUsIHVubGVzcyB0aGV5IGFyZSBD
bWQrYS4gRnJvbSBXZWJLaXQyLCBwb3NzaWJseQorICAgICAgICAvLyBub3QgdGhlIG1vc3QgZWxl
Z2FudCBwaWVjZSBvZiBrZXkgaGFuZGxpbmcgY29kZS4uLi4uCisgICAgICAgIGlmIChldmVudC0+
bWV0YUtleSgpKSB7CisgICAgICAgICAgICBpZiAoY29jb2FFdmVudC5kYXRhLmtleS5rZXlDb2Rl
ID09IDApCisgICAgICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBlbHNlIGlnbm9yZSwgaXQncyBhIE1ldGEgS2V5
IGV2ZW50IGZvciB0aGUgYnJvd3Nlci4KKyAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOworICAgICAgICB9CisgICAgfQogfQogCiAjaWZuZGVmIE5QX05PX0NBUkJPTgpAQCAt
NzgzLDYgKzEwODEsMjEgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVu
dCYgZXZlbnQpCiB9CiAjZW5kaWYKIAorCitpbnQxNl90IFBsdWdpblZpZXc6OmRpc3BhdGNoTlBD
b2NvYUV2ZW50KE5QQ29jb2FFdmVudCYgY29jb2FFdmVudCkKK3sKKyAgICBQbHVnaW5WaWV3Ojpz
ZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgc2V0Q2FsbGlu
Z1BsdWdpbih0cnVlKTsKKworICAgIGludDE2X3QgcmVzcG9uc2UgPSBtX3BsdWdpbi0+cGx1Z2lu
RnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmNvY29hRXZlbnQpOworCisgICAgc2V0Q2FsbGlu
Z1BsdWdpbihmYWxzZSk7CisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7
CisKKyAgICByZXR1cm4gcmVzcG9uc2U7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0gTWlz
Y2VsbGFuZW91cyAgLS0tLS0tLS0tLS0tLS0tLS0tCiAKIE5QRXJyb3IgUGx1Z2luVmlldzo6aGFu
ZGxlUG9zdFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzJfdCBsZW4sIGNvbnN0
IGNoYXIqIGJ1ZikKZGlmZiAtLWdpdCBhL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9ucGFwaS5jcHAgYi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvbnBhcGkuY3BwCmluZGV4IDBmMThjMzguLmE5NDMzZjUgMTAwNjQ0Ci0tLSBhL3Ny
Yy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ucGFwaS5jcHAKKysrIGIv
c3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL25wYXBpLmNwcApAQCAt
MTkyLDMgKzE5MiwxNCBAQCBOUEVycm9yIE5QTl9HZXRBdXRoZW50aWNhdGlvbkluZm8oTlBQIGlu
c3RhbmNlLCBjb25zdCBjaGFyKiBwcm90b2NvbCwgY29uc3QgY2hhcgogewogICAgIHJldHVybiBw
bHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRBdXRoZW50aWNhdGlvbkluZm8ocHJv
dG9jb2wsIGhvc3QsIHBvcnQsIHNjaGVtZSwgcmVhbG0sIHVzZXJuYW1lLCB1bGVuLCBwYXNzd29y
ZCwgcGxlbik7CiB9CisKK05QRXJyb3IgTlBOX1BvcFVwQ29udGV4dE1lbnUoTlBQIGluc3RhbmNl
LCBOUE1lbnUqIG1lbnUpCit7CisjaWYgUExBVEZPUk0oUVQpICYmIGRlZmluZWQoWFBfTUFDT1NY
KQorICAgIFBsdWdpblZpZXcgKnBsdWdpbiA9IHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5j
ZSk7CisgICAgcGx1Z2luLT5wb3BVcENvbnRleHRNZW51KG1lbnUpOworICAgIHJldHVybiBOUEVS
Ul9OT19FUlJPUjsKKyNlbHNlCisgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworI2VuZGlmIC8v
IFBMQVRGT1JNKFFUKSAmJiBkZWZpbmVkKFhQX01BQ09TWCkKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164714</attachid>
            <date>2012-09-19 04:46:05 -0700</date>
            <delta_ts>2012-09-19 05:15:12 -0700</delta_ts>
            <desc>Patch against trunk</desc>
            <filename>flashpatch.diff</filename>
            <type>text/plain</type>
            <size>38954</size>
            <attacher>andy.shaw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODg2NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDEyLTA5LTE5ICBBbmR5IFNo
YXcgIDxhbmR5LnNoYXdAZGlnaWEuY29tPgorCisgICAgICAgIFtRdF0gSW1wbGVtZW50IHN1cHBv
cnQgZm9yIENvb2NhIGJhc2VkIE5BUEFJIHBsdWdpbnMgb24gTWFjCisJaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyMzU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKwlXaXRoIGxhdGVyIHZlcnNpb25zIG9mIEZsYXNoIHRoZXkgYXJlIG9u
bHkgQ29jb2EgYmFzZWQgd2hpY2ggbWVhbnQgdGhhdCBpdCB3YXMgbm90IHBvc3NpYmxlIHRvIHVz
ZSBGbGFzaCBpbiBhIFF0V2ViS2l0IGJyb3dzZXIuCisJVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0
byBhbHNvIHVzZSA2NGJpdCBiYXNlZCBwbHVnaW5zIHRvby4gIAorCisgICAgICAgICogcGx1Z2lu
cy9QbHVnaW5QYWNrYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6Omlu
aXRpYWxpemVCcm93c2VyRnVuY3MpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGx1
Z2lucy9QbHVnaW5RdWlya1NldC5oOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpQbHVnaW5WaWV3KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXNlckFnZW50KToKKyAgICAgICAgKiBwbHVnaW5z
L1BsdWdpblZpZXcuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUGx1Z2luVmlldyk6
CisgICAgICAgICogcGx1Z2lucy9tYWMvUGx1Z2luUGFja2FnZU1hYy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWlya3MpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKToKKyAgICAgICAgKiBwbHVnaW5zL21hYy9QbHVn
aW5WaWV3TWFjLm1tOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjppbml0
aWFsaXplTlBDb2NvYUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmdldE1vZGlmaWVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAgICAgKiBw
bHVnaW5zL25wYXBpLmNwcDoKKyAgICAgICAgKE5QTl9Qb3BVcENvbnRleHRNZW51KToKKyAgICAg
ICAgKiBwbHVnaW5zL25wYXBpLmg6CisKIDIwMTItMDktMTggIE1paG5lYSBPdmlkZW5pZSAgPG1p
aG5lYUBhZG9iZS5jb20+CiAKICAgICAgICAgW0NTU1JlZ2lvbnNdRmxhZyBhdXRvLWhlaWdodCBy
ZWdpb25zCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAJKHJl
dmlzaW9uIDEyODg2NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyOCw4ICszMjgsMTAgQEAgdm9pZCBQbHVnaW5QYWNrYWdl
Ojppbml0aWFsaXplQnJvd3NlckZ1bgogICAgIG1fYnJvd3NlckZ1bmNzLmdldHZhbHVlZm9ydXJs
ID0gTlBOX0dldFZhbHVlRm9yVVJMOwogICAgIG1fYnJvd3NlckZ1bmNzLnNldHZhbHVlZm9ydXJs
ID0gTlBOX1NldFZhbHVlRm9yVVJMOwogICAgIG1fYnJvd3NlckZ1bmNzLmdldGF1dGhlbnRpY2F0
aW9uaW5mbyA9IE5QTl9HZXRBdXRoZW50aWNhdGlvbkluZm87CisKKyAgICBtX2Jyb3dzZXJGdW5j
cy5wb3B1cGNvbnRleHRtZW51ID0gTlBOX1BvcFVwQ29udGV4dE1lbnU7CiB9Ci0jZW5kaWYKKyNl
bmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIAogI2lmIEVOQUJMRShQTFVHSU5f
UEFDS0FHRV9TSU1QTEVfSEFTSCkKIHVuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhhc2goKSBjb25z
dApJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5RdWlya1NldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUXVpcmtTZXQuaAkocmV2aXNpb24g
MTI4ODY3KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5RdWlya1NldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCw3ICs0OCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
UGx1Z2luUXVpcmtSZXF1aXJlc0d0a1Rvb2xLaXQgPSAxIDw8IDEyLAogICAgICAgICBQbHVnaW5R
dWlya1JlcXVpcmVzRGVmYXVsdFNjcmVlbkRlcHRoID0gMSA8PCAxMywKICAgICAgICAgUGx1Z2lu
UXVpcmtEb250Q2FsbFNldFdpbmRvd01vcmVUaGFuT25jZSA9IDEgPDwgMTQsCi0gICAgICAgIFBs
dWdpblF1aXJrSWdub3JlUmlnaHRDbGlja0luV2luZG93bGVzc01vZGUgPSAxIDw8IDE1CisgICAg
ICAgIFBsdWdpblF1aXJrSWdub3JlUmlnaHRDbGlja0luV2luZG93bGVzc01vZGUgPSAxIDw8IDE1
LAorICAgICAgICBQbHVnaW5RdWlya1dhbnRzQ2hyb21lVXNlckFnZW50ID0gMSA8PCAxNgogICAg
IH07CiAKICAgICBjbGFzcyBQbHVnaW5RdWlya1NldCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL1BsdWdpblZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9uIDEyODg2NykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAKICNp
bmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAibnBy
dW50aW1lX2ltcGwuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMTY5LDYgKzE3MCwxMCBAQCB2b2lkIFBsdWdpblZpZXc6
OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVuCiAgICAgICAgIGhhbmRsZU1vdXNlRXZlbnQoc3RhdGlj
X2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KSk7CiAgICAgZWxzZSBpZiAoZXZlbnQtPmlzS2V5Ym9h
cmRFdmVudCgpKQogICAgICAgICBoYW5kbGVLZXlib2FyZEV2ZW50KHN0YXRpY19jYXN0PEtleWJv
YXJkRXZlbnQqPihldmVudCkpOworI2lmIGRlZmluZWQoWFBfTUFDT1NYKQorICAgIGVsc2UgaWYg
KGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkKKyAgICAgICAg
aGFuZGxlV2hlZWxFdmVudChzdGF0aWNfY2FzdDxXaGVlbEV2ZW50Kj4oZXZlbnQpKTsKKyNlbmRp
ZgogICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNvbnRleHRtZW51
RXZlbnQpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOyAvLyBXZSBkb24ndCBr
bm93IGlmIHRoZSBwbHVnLWluIGhhcyBoYW5kbGVkIG1vdXNlZG93biBldmVudCBieSBkaXNwbGF5
aW5nIGEgY29udGV4dCBtZW51LCBzbyB3ZSBuZXZlciB3YW50IFdlYktpdCB0byBzaG93IGEgZGVm
YXVsdCBvbmUuCiAjaWYgZGVmaW5lZChYUF9VTklYKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKQEAgLTgyOSw2ICs4MzQsOSBAQCBQbHVnaW5WaWV3OjpQbHVnaW5WaWV3KEZyYW1lKiBw
YXJlbnRGcmFtCiAgICAgLCBtX2luc3RhbmNlKDApCiAjaWYgZGVmaW5lZChYUF9NQUNPU1gpCiAg
ICAgLCBtX2lzV2luZG93ZWQoZmFsc2UpCisgICAgLCBtX3VwZGF0ZWRDb2NvYVRleHRJbnB1dFJl
cXVlc3RlZChmYWxzZSkKKyAgICAsIG1fa2V5RG93blNlbnQoZmFsc2UpCisgICAgLCBtX2Rpc3Jl
Z2FyZEtleVVwQ291bnRlcigwKQogI2Vsc2UKICAgICAsIG1faXNXaW5kb3dlZCh0cnVlKQogI2Vu
ZGlmCkBAIC0xMjUyLDExICsxMjYwLDI3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBNb3ppbGxhVXNl
ckFnZW50ID0gIk0KICNlbmRpZgogICAgICAgICAiIGVuLVVTOyBydjoxLjguMSkgR2Vja28vMjAw
NjEwMTAgRmlyZWZveC8yLjAiOwogCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgQ2hyb21lVXNl
ckFnZW50ID0gIk1vemlsbGEvNS4wICgiCisjaWYgZGVmaW5lZChYUF9NQUNPU1gpCisgICAgIk1h
Y2ludG9zaDsgVTsgSW50ZWwgTWFjIE9TIFg7IgorI2VsaWYgZGVmaW5lZChYUF9XSU4pCisgICAg
IldpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNS4xOyIKKyNlbGlmIGRlZmluZWQoWFBfVU5JWCkKKyAg
ICAvLyBUaGUgR3RrIHBvcnQgdXNlcyBYMTEgcGx1Z2lucyBpbiBNYWMuCisjaWYgT1MoREFSV0lO
KSAmJiBQTEFURk9STShHVEspCisgICAgIlgxMTsgVTsgSW50ZWwgTWFjIE9TIFg7IgorI2Vsc2UK
KyAgICAiWDExOyBVOyBMaW51eCBpNjg2OyIKKyNlbmRpZgorI2VuZGlmCisgICAgIiBBcHBsZVdl
YktpdC81MzQuMzQgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTkuMC4xMDU1LjEgU2FmYXJp
LzUzNC4zNCI7CisKIGNvbnN0IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJBZ2VudCgpCiB7CiAgICAg
aWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVz
ZXJBZ2VudCkpCiAgICAgICAgIHJldHVybiBNb3ppbGxhVXNlckFnZW50OwotCisgICAgZWxzZSBp
ZiAobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrV2FudHNDaHJvbWVVc2Vy
QWdlbnQpKQorICAgICAgICByZXR1cm4gQ2hyb21lVXNlckFnZW50OwogICAgIGlmIChtX3VzZXJB
Z2VudC5pc051bGwoKSkKICAgICAgICAgbV91c2VyQWdlbnQgPSBtX3BhcmVudEZyYW1lLT5sb2Fk
ZXIoKS0+dXNlckFnZW50KG1fdXJsKS51dGY4KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
UGx1Z2luVmlldy5oCShyZXZpc2lvbiAxMjg4NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L1BsdWdpblZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtOTgsNiArOTgsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgY2xhc3MgUGx1Z2luU3RyZWFtOwogICAgIGNsYXNzIFJlc291cmNlRXJy
b3I7CiAgICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKKyAgICBjbGFzcyBXaGVlbEV2ZW50Owog
CiAgICAgZW51bSBQbHVnaW5TdGF0dXMgewogICAgICAgICBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5k
UGx1Z2luLApAQCAtMjI5LDYgKzIzMCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX21pbWVUeXBlOyB9CiAg
ICAgICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CiAKKyNpZiBk
ZWZpbmVkKFhQX01BQ09TWCkgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAg
IGJvb2wgcG9wVXBDb250ZXh0TWVudShOUE1lbnUqKTsKKyNlbmRpZgorCiAjaWYgT1MoV0lORE9X
UykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgICAgIHN0YXRpYyBMUkVTVUxU
IENBTExCQUNLIFBsdWdpblZpZXdXbmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsK
ICAgICAgICAgTFJFU1VMVCB3bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0g
d1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKQEAgLTMyMyw2ICszMjgsMTcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBib29sIGRpc3BhdGNoTlBFdmVudChOUEV2ZW50Jik7CiAjZW5kaWYg
Ly8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAjZW5kaWYKKyNpZiBkZWZpbmVkKFhQX01B
Q09TWCkgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIGludDE2X3QgZGlz
cGF0Y2hOUENvY29hRXZlbnQoTlBDb2NvYUV2ZW50Jik7CisgICAgICAgIGJvb2wgbV91cGRhdGVk
Q29jb2FUZXh0SW5wdXRSZXF1ZXN0ZWQ7CisgICAgICAgIGJvb2wgbV9rZXlEb3duU2VudDsKKyAg
ICAgICAgYm9vbCBtX3VzZVBpeG1hcDsKKyAgICAgICAgdWludDE2X3QgbV9kaXNyZWdhcmRLZXlV
cENvdW50ZXI7CisjZW5kaWYKKworI2lmIGRlZmluZWQoWFBfTUFDT1NYKQorICAgICAgICB2b2lk
IGhhbmRsZVdoZWVsRXZlbnQoV2hlZWxFdmVudCopOworI2VuZGlmCiAgICAgICAgIHZvaWQgdXBk
YXRlUGx1Z2luV2lkZ2V0KCk7CiAgICAgICAgIHZvaWQgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvbnBhcGkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
bnBhcGkuY3BwCShyZXZpc2lvbiAxMjg4NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL25w
YXBpLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDMgKzE5OSwxNCBAQCBOUEVycm9yIE5QTl9H
ZXRBdXRoZW50aWNhdGlvbkluZm8oTlBQIGluCiB7CiAgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJ
bnN0YW5jZShpbnN0YW5jZSktPmdldEF1dGhlbnRpY2F0aW9uSW5mbyhwcm90b2NvbCwgaG9zdCwg
cG9ydCwgc2NoZW1lLCByZWFsbSwgdXNlcm5hbWUsIHVsZW4sIHBhc3N3b3JkLCBwbGVuKTsKIH0K
KworTlBFcnJvciBOUE5fUG9wVXBDb250ZXh0TWVudShOUFAgaW5zdGFuY2UsIE5QTWVudSogbWVu
dSkKK3sKKyNpZiBQTEFURk9STShRVCkgJiYgZGVmaW5lZChYUF9NQUNPU1gpCisgICAgUGx1Z2lu
VmlldyogcGx1Z2luID0gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKTsKKyAgICBwbHVn
aW4tPnBvcFVwQ29udGV4dE1lbnUobWVudSk7CisgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwor
I2Vsc2UKKyAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisjZW5kaWYgLy8gUExBVEZPUk0oUVQp
ICYmIGRlZmluZWQoWFBfTUFDT1NYKQorfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9u
cGFwaS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbnBhcGkuaAkocmV2
aXNpb24gMTI4ODY3KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ucGFwaS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MTUsNyArNDE1LDkgQEAgdHlwZWRlZiBlbnVtIHsKIAogICBOUE5WU3VwcG9y
dHNXaW5kb3dsZXNzID0gMTcsCiAKLSAgTlBOVnByaXZhdGVNb2RlQm9vbCA9IDE4CisgIE5QTlZw
cml2YXRlTW9kZUJvb2wgPSAxOCwKKworICBOUE5Wc3VwcG9ydHNBZHZhbmNlZEtleUhhbmRsaW5n
ID0gMjEKIAogI2lmIGRlZmluZWQoWFBfTUFDT1NYKQogICAvKiBVc2VkIGZvciBuZWdvdGlhdGlu
ZyBkcmF3aW5nIG1vZGVscyAqLwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1
Z2luUGFja2FnZU1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9t
YWMvUGx1Z2luUGFja2FnZU1hYy5jcHAJKHJldmlzaW9uIDEyODg2NykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvbWFjL1BsdWdpblBhY2thZ2VNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Nyw4ICs1Nyw3IEBAIHZvaWQgUGx1Z2luUGFja2FnZTo6ZGV0ZXJtaW5lUXVpcmtzKGNvbnMKICAg
ICB9CiAKICAgICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNo
IikgewotICAgICAgICAvLyBUaGUgZmxhc2ggcGx1Z2luIG9ubHkgcmVxdWVzdHMgd2luZG93bGVz
cyBwbHVnaW5zIGlmIHdlIHJldHVybiBhIG1vemlsbGEgdXNlciBhZ2VudAotICAgICAgICBtX3F1
aXJrcy5hZGQoUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpOworICAgICAgICBtX3F1
aXJrcy5hZGQoUGx1Z2luUXVpcmtXYW50c0Nocm9tZVVzZXJBZ2VudCk7CiAgICAgICAgIG1fcXVp
cmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSk7CiAgICAgICAgIG1fcXVpcmtz
LmFkZChQbHVnaW5RdWlya1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3NhZ2VzKTsKICAgICAgICAg
bV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRmxhc2hVUkxOb3RpZnlCdWcpOwpAQCAtMTk2LDYgKzE5
NSw3IEBAIGJvb2wgUGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkKIAogICAgICAgICAgICAgU3Ry
aW5nIGRlc2NyaXB0aW9uID0gKENGU3RyaW5nUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGV4dGVu
c2lvbnNEaWN0LmdldCgpLCBDRlNUUigiV2ViUGx1Z2luVHlwZURlc2NyaXB0aW9uIikpOwogICAg
ICAgICAgICAgbV9taW1lVG9EZXNjcmlwdGlvbnMuc2V0KG1pbWVUeXBlLCBkZXNjcmlwdGlvbik7
CisgICAgICAgICAgICBkZXRlcm1pbmVRdWlya3MobWltZVR5cGUpOwogICAgICAgICB9CiAKICAg
ICAgICAgbV9uYW1lID0gKENGU3RyaW5nUmVmKUNGQnVuZGxlR2V0VmFsdWVGb3JJbmZvRGljdGlv
bmFyeUtleShtX21vZHVsZSwgQ0ZTVFIoIldlYlBsdWdpbk5hbWUiKSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL21hYy9QbHVnaW5WaWV3TWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMubW0JKHJldmlzaW9uIDEyODg2NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNs
dWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRl
ICJXaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKICNpbmNsdWRlICJy
dW50aW1lX3Jvb3QuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgpAQCAtNzUsOSArNzYs
MTIgQEAgdXNpbmcgSlNDOjpKU1ZhbHVlOwogI2luY2x1ZGUgPFFXaWRnZXQ+CiAjaW5jbHVkZSA8
UUtleUV2ZW50PgogI2luY2x1ZGUgPFFQYWludGVyPgorI2luY2x1ZGUgPFFEYXRlVGltZT4KKyNp
bmNsdWRlIDxRUGl4bWFwPgogI2luY2x1ZGUgIlFXZWJQYWdlQ2xpZW50LmgiCiBRVF9CRUdJTl9O
QU1FU1BBQ0UKIGV4dGVybiBRX0dVSV9FWFBPUlQgT1NXaW5kb3dSZWYgcXRfbWFjX3dpbmRvd19m
b3IoY29uc3QgUVdpZGdldCogdyk7CitleHRlcm4gUV9HVUlfRVhQT1JUIENHQ29udGV4dFJlZiBx
dF9tYWNfY2dfY29udGV4dChjb25zdCBRUGFpbnREZXZpY2UgKnBkZXYpOyAvL3FwYWludGRldmlj
ZV9tYWMuY3BwCiBRVF9FTkRfTkFNRVNQQUNFCiAjZW5kaWYKIApAQCAtMTQ0LDYgKzE0OCwyNSBA
QCBzdGF0aWMgaW5saW5lIEludFBvaW50IHRvcExldmVsT2Zmc2V0Rm9yCiAgICAgcmV0dXJuIElu
dFBvaW50KCk7CiB9CiAKKy8vIC0tLS0tLS0tLSBDb2NvYSBzcGVjaWZpYyB1dGlsaXR5IGZ1bmN0
aW9ucyAtLS0tLS0tLS0tCisKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVOUENvY29hRXZlbnQoTlBD
b2NvYUV2ZW50KiBldmVudCkKK3sKKyAgICBtZW1zZXQoZXZlbnQsIDAsIHNpemVvZihOUENvY29h
RXZlbnQpKTsKK30KKworc3RhdGljIGludDMyX3QgZ2V0TW9kaWZpZXJzKFVJRXZlbnRXaXRoS2V5
U3RhdGUgKmV2ZW50KQoreworICAgIGludDMyX3QgbW9kaWZpZXJzID0gMDsKKyAgICBpZiAoZXZl
bnQtPmtleUNvZGUoKSA9PSA1NykgbW9kaWZpZXJzIHw9IE5TQWxwaGFTaGlmdEtleU1hc2s7Cisg
ICAgaWYgKGV2ZW50LT5zaGlmdEtleSgpKSAgbW9kaWZpZXJzIHw9IE5TU2hpZnRLZXlNYXNrOwor
ICAgIGlmIChldmVudC0+Y3RybEtleSgpKSAgIG1vZGlmaWVycyB8PSBOU0NvbnRyb2xLZXlNYXNr
OworICAgIGlmIChldmVudC0+bWV0YUtleSgpKSAgIG1vZGlmaWVycyB8PSBOU0NvbW1hbmRLZXlN
YXNrOworICAgIGlmIChldmVudC0+YWx0S2V5KCkpICAgIG1vZGlmaWVycyB8PSBOU0FsdGVybmF0
ZUtleU1hc2s7CisKKyAgICByZXR1cm4gbW9kaWZpZXJzOworfQorCiAvLyAtLS0tLS0tLS0tLS0t
LS0gTGlmZXRpbWUgbWFuYWdlbWVudCAtLS0tLS0tLS0tLS0tLS0tLQogCiBib29sIFBsdWdpblZp
ZXc6OnBsYXRmb3JtU3RhcnQoKQpAQCAtMTc5LDI4ICsyMDIsNDAgQEAgYm9vbCBQbHVnaW5WaWV3
OjpwbGF0Zm9ybVN0YXJ0KCkKICAgICBOUEJvb2wgZXZlbnRNb2RlbFN1cHBvcnRlZDsKICAgICBp
ZiAoZ2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUoTlBOVnN1cHBvcnRzQ2FyYm9uQm9vbCArIG1f
ZXZlbnRNb2RlbCksICZldmVudE1vZGVsU3VwcG9ydGVkKSAhPSBOUEVSUl9OT19FUlJPUgogICAg
ICAgICAgICAgfHwgIWV2ZW50TW9kZWxTdXBwb3J0ZWQpIHsKKyNlbHNlCisgICAgTlBCb29sIGV2
ZW50TW9kZWxTdXBwb3J0ZWQ7CisgICAgaWYgKGdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlKE5Q
TlZzdXBwb3J0c0NvY29hQm9vbC8qICsgbV9ldmVudE1vZGVsKi8pLCAmZXZlbnRNb2RlbFN1cHBv
cnRlZCkgIT0gTlBFUlJfTk9fRVJST1IKKyAgICAgICAgICAgIHx8ICFldmVudE1vZGVsU3VwcG9y
dGVkKSB7CiAjZW5kaWYKICAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2Fk
UGx1Z2luOwogICAgICAgICBMT0coUGx1Z2lucywgIlBsdWctaW4gJyVzJyB1c2VzIHVuc3VwcG9y
dGVkIGV2ZW50IG1vZGVsICVzIiwKICAgICAgICAgICAgICAgICBtX3BsdWdpbi0+bmFtZSgpLnV0
ZjgoKS5kYXRhKCksIHByZXR0eU5hbWVGb3JFdmVudE1vZGVsKG1fZXZlbnRNb2RlbCkpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0jaWZuZGVmIE5QX05PX0NBUkJPTgogICAgIH0KLSNlbmRpZgog
CiAjaWZuZGVmIE5QX05PX1FVSUNLRFJBVwogICAgIE5QQm9vbCBkcmF3aW5nTW9kZWxTdXBwb3J0
ZWQ7CiAgICAgaWYgKGdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlKE5QTlZzdXBwb3J0c1F1aWNr
RHJhd0Jvb2wgKyBtX2RyYXdpbmdNb2RlbCksICZkcmF3aW5nTW9kZWxTdXBwb3J0ZWQpICE9IE5Q
RVJSX05PX0VSUk9SCiAgICAgICAgICAgICB8fCAhZHJhd2luZ01vZGVsU3VwcG9ydGVkKSB7Cisg
ICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKKyAgICAgICAg
TE9HKFBsdWdpbnMsICJQbHVnLWluICclcycgdXNlcyB1bnN1cHBvcnRlZCBkcmF3aW5nIG1vZGVs
ICVzIiwKKyAgICAgICAgICAgICAgICBtX3BsdWdpbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCksIHBy
ZXR0eU5hbWVGb3JEcmF3aW5nTW9kZWwobV9kcmF3aW5nTW9kZWwpKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KICNlbmRpZgorCisjaWZkZWYgTlBfTk9fUVVJQ0tEUkFXCisgICAgTlBC
b29sIGRyYXdpbmdNb2RlbFN1cHBvcnRlZDsKKyAgICBpZiAoZ2V0VmFsdWVTdGF0aWMoTlBOVmFy
aWFibGUoTlBOVnN1cHBvcnRzQ29yZUdyYXBoaWNzQm9vbC8qICsgbV9kcmF3aW5nTW9kZWwqLyks
ICZkcmF3aW5nTW9kZWxTdXBwb3J0ZWQpICE9IE5QRVJSX05PX0VSUk9SCisgICAgICAgICAgICB8
fCAhZHJhd2luZ01vZGVsU3VwcG9ydGVkKSB7CiAgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3Rh
dHVzQ2FuTm90TG9hZFBsdWdpbjsKICAgICAgICAgTE9HKFBsdWdpbnMsICJQbHVnLWluICclcycg
dXNlcyB1bnN1cHBvcnRlZCBkcmF3aW5nIG1vZGVsICVzIiwKICAgICAgICAgICAgICAgICBtX3Bs
dWdpbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCksIHByZXR0eU5hbWVGb3JEcmF3aW5nTW9kZWwobV9k
cmF3aW5nTW9kZWwpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwotI2lmbmRlZiBOUF9OT19RVUlD
S0RSQVcKICAgICB9CiAjZW5kaWYKIAorCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgLy8gU2V0IHRo
ZSBwbGF0Zm9ybVBsdWdpbldpZGdldCBvbmx5IGluIHRoZSBjYXNlIG9mIFFXZWJWaWV3IHNvIHRo
YXQgdGhlIGNvbnRleHQgbWVudSBhcHBlYXJzIGluIHRoZSByaWdodCBwbGFjZS4KICAgICAvLyBJ
biBhbGwgb3RoZXIgY2FzZXMsIHdlIHVzZSBvZmYtc2NyZWVuIHJlbmRlcmluZwpAQCAtMjE1LDI3
ICsyNTAsMjkgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKICNlbmRpZgogCiAg
ICAgLy8gQ3JlYXRlIGEgZmFrZSB3aW5kb3cgcmVsYXRpdmUgdG8gd2hpY2ggYWxsIGV2ZW50cyB3
aWxsIGJlIHNlbnQgd2hlbiB1c2luZyBvZmZzY3JlZW4gcmVuZGVyaW5nCi0gICAgaWYgKCFwbGF0
Zm9ybVBsdWdpbldpZGdldCgpKSB7CiAjaWZuZGVmIE5QX05PX0NBUkJPTgorICAgIGlmICghcGxh
dGZvcm1QbHVnaW5XaWRnZXQoKSkgewogICAgICAgICAvLyBNYWtlIHRoZSBkZWZhdWx0IHNpemUg
cmVhbGx5IGJpZy4gSXQgaXMgdW5jbGVhciB3aHkgdGhpcyBpcyByZXF1aXJlZCBidXQgd2l0aCBh
IHNtYWxsZXIgc2l6ZSwgbW91c2UgbW92ZQogICAgICAgICAvLyBldmVudHMgZG9uJ3QgZ2V0IHBy
b2Nlc3NlZC4gUmVzaXppbmcgdGhlIGZha2Ugd2luZG93IHRvIGZsYXNoJ3Mgc2l6ZSBkb2Vzbid0
IGhlbHAuCiAgICAgICAgIDo6UmVjdCB3aW5kb3dCb3VuZHMgPSB7IDAsIDAsIDEwMDAsIDEwMDAg
fTsKICAgICAgICAgQ3JlYXRlTmV3V2luZG93KGtEb2N1bWVudFdpbmRvd0NsYXNzLCBrV2luZG93
U3RhbmRhcmREb2N1bWVudEF0dHJpYnV0ZXMsICZ3aW5kb3dCb3VuZHMsICZtX2Zha2VXaW5kb3cp
OwogICAgICAgICAvLyBGbGFzaCByZXF1aXJlcyB0aGUgd2luZG93IHRvIGJlIGhpbGl0ZWQgdG8g
cHJvY2VzcyBtb3VzZSBtb3ZlIGV2ZW50cy4KICAgICAgICAgSGlsaXRlV2luZG93KG1fZmFrZVdp
bmRvdywgdHJ1ZSk7Ci0jZW5kaWYKICAgICB9CisjZW5kaWYKIAogICAgIHVwZGF0ZVBsdWdpbldp
ZGdldCgpOwogCiAgICAgaWYgKCFtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVp
cmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpCiAgICAgICAgIHNldE5QV2luZG93SWZOZWVkZWQo
KTsKIAorI2lmbmRlZiBOUF9OT19DQVJCT04KICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgbnVsbCB0
aW1lciB0aHJvdHRsaW5nIGRlcGVuZGluZyBvbiBwbHVnaW4gYWN0aXZhdGlvbgogICAgIG1fbnVs
bEV2ZW50VGltZXIgPSBhZG9wdFB0cihuZXcgVGltZXI8UGx1Z2luVmlldz4odGhpcywgJlBsdWdp
blZpZXc6Om51bGxFdmVudFRpbWVyRmlyZWQpKTsKICAgICBtX251bGxFdmVudFRpbWVyLT5zdGFy
dFJlcGVhdGluZygwLjAyKTsKIAogICAgIG1fbGFzdE1vdXNlUG9zLmggPSBtX2xhc3RNb3VzZVBv
cy52ID0gMDsKKyNlbmRpZiAvLyBOUF9OT19DQVJCT04KIAogICAgIHJldHVybiB0cnVlOwogfQpA
QCAtMjc2LDcgKzMxMyw3IEBAIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZVN0YXRp
YygKIAogI2VuZGlmCiAgICAgY2FzZSBOUE5Wc3VwcG9ydHNDb2NvYUJvb2w6Ci0gICAgICAgICpz
dGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSBmYWxzZTsKKyAgICAgICAgKnN0YXRpY19jYXN0
PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CiAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJP
UjsKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTI4Niw2ICszMjMsMTEgQEAgYm9vbCBQbHVn
aW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKAogICAgICAgICAqcmVzdWx0ID0gTlBFUlJf
Tk9fRVJST1I7CiAgICAgICAgIHJldHVybiB0cnVlOwogCisgICAgY2FzZSBOUE5Wc3VwcG9ydHNB
ZHZhbmNlZEtleUhhbmRsaW5nOgorICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUp
ID0gdHJ1ZTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKwogI2lmbmRlZiBOUF9OT19RVUlDS0RSQVcKICAgICAvLyBRdWlja0RyYXcgaXMg
ZGVwcmVjYXRlZCBpbiAxMC41IGFuZCBub3Qgc3VwcG9ydGVkIG9uIDY0LWJpdAogICAgIGNhc2Ug
TlBOVnN1cHBvcnRzUXVpY2tEcmF3Qm9vbDoKQEAgLTMwNCw2ICszNDYsMjAgQEAgYm9vbCBQbHVn
aW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKAogLy8gVXNlZCBvbmx5IGZvciB2YXJpYWJs
ZXMgdGhhdCBuZWVkIGEgdmlldyB0byByZXNvbHZlCiBib29sIFBsdWdpblZpZXc6OnBsYXRmb3Jt
R2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycm9yKiBlcnJv
cikKIHsKKyAgICAvLyBJbiBXZWJLaXQyLCB0aGlzIGlzIHNldCBpZiB0aGUgcGx1Z2luIHF1ZXJp
ZXMgaXQncyBhdmFpbGlhYmxpdHkgYW5kCisgICAgLy8gbm8ga2V5IGRvd24gZXZlbnRzIGhhdmUg
YWxyZWFkeSBiZWVuIHNlbnQuCisgICAgaWYgKHZhcmlhYmxlID09IE5QTlZzdXBwb3J0c1VwZGF0
ZWRDb2NvYVRleHRJbnB1dEJvb2wpIHsKKyAgICAgICAgaWYgKG1fa2V5RG93blNlbnQgJiYgIW1f
dXBkYXRlZENvY29hVGV4dElucHV0UmVxdWVzdGVkKSB7CisgICAgICAgICAgICAqc3RhdGljX2Nh
c3Q8TlBCb29sKj4odmFsdWUpID0gZmFsc2U7CisgICAgICAgICAgICAqZXJyb3IgPSBOUEVSUl9O
T19FUlJPUjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICpzdGF0aWNf
Y2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOworICAgICAgICAgICAgKmVycm9yID0gTlBFUlJf
Tk9fRVJST1I7CisgICAgICAgICAgICBtX3VwZGF0ZWRDb2NvYVRleHRJbnB1dFJlcXVlc3RlZCA9
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogICAgIHJldHVy
biBmYWxzZTsKIH0KIApAQCAtMzQyLDIxICszOTgsMjIgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXRG
b2N1cyhib29sIGZvY3VzZWQpCiAgICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpzZXRGb2N1
cyglZCkiLCBmb2N1c2VkKTsKICAgICBpZiAoIWZvY3VzZWQpIHsKICAgICAgICAgV2lkZ2V0Ojpz
ZXRGb2N1cyhmb2N1c2VkKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAobV9ldmVudE1v
ZGVsICE9IE5QRXZlbnRNb2RlbENvY29hKQorICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmIChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQogI2lmIFBMQVRGT1JNKFFUKQotICAgICAg
IHN0YXRpY19jYXN0PFFXaWRnZXQqPihwbGF0Zm9ybVBsdWdpbldpZGdldCgpKS0+c2V0Rm9jdXMo
UXQ6Ok90aGVyRm9jdXNSZWFzb24pOworICAgICAgICBzdGF0aWNfY2FzdDxRV2lkZ2V0Kj4ocGxh
dGZvcm1QbHVnaW5XaWRnZXQoKSktPnNldEZvY3VzKFF0OjpPdGhlckZvY3VzUmVhc29uKTsKICNl
bHNlCiAgICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPlNldEZvY3VzKCk7CiAjZW5kaWYK
LSAgIGVsc2UKLSAgICAgICBXaWRnZXQ6OnNldEZvY3VzKGZvY3VzZWQpOworICAgIGVsc2UKKyAg
ICAgICAgV2lkZ2V0OjpzZXRGb2N1cyhmb2N1c2VkKTsKIAotICAgIC8vIFRPRE86IEFsc28gaGFu
ZGxlIGFuZCBwYXNzIG9uIGJsdXIgZXZlbnRzIChmb2N1cyBsb3N0KQogCiAjaWZuZGVmIE5QX05P
X0NBUkJPTgorICAgIC8vIFRPRE86IEFsc28gaGFuZGxlIGFuZCBwYXNzIG9uIGJsdXIgZXZlbnRz
IChmb2N1cyBsb3N0KQogICAgIEV2ZW50UmVjb3JkIHJlY29yZDsKICAgICByZWNvcmQud2hhdCA9
IE5QRXZlbnRUeXBlX0dldEZvY3VzRXZlbnQ7CiAgICAgcmVjb3JkLm1lc3NhZ2UgPSAwOwpAQCAt
MzY3LDYgKzQyNCwxNyBAQCB2b2lkIFBsdWdpblZpZXc6OnNldEZvY3VzKGJvb2wgZm9jdXNlZCkK
ICAgICBpZiAoIWRpc3BhdGNoTlBFdmVudChyZWNvcmQpKQogICAgICAgICBMT0coRXZlbnRzLCAi
UGx1Z2luVmlldzo6c2V0Rm9jdXMoJWQpOiBGb2N1cyBldmVudCBub3QgYWNjZXB0ZWQiLCBmb2N1
c2VkKTsKICNlbmRpZgorICAgIHsKKyAgICAgICAgTlBDb2NvYUV2ZW50IGNvY29hRXZlbnQ7Cisg
ICAgICAgIGluaXRpYWxpemVOUENvY29hRXZlbnQoJmNvY29hRXZlbnQpOworICAgICAgICBjb2Nv
YUV2ZW50LnR5cGUgPSBOUENvY29hRXZlbnRGb2N1c0NoYW5nZWQ7CisgICAgICAgIE5QQm9vbCBm
b2N1cyA9IGZvY3VzZWQ7CisgICAgICAgIGNvY29hRXZlbnQuZGF0YS5mb2N1cy5oYXNGb2N1cyA9
IGZvY3VzOworCisgICAgICAgIGlmKCFkaXNwYXRjaE5QQ29jb2FFdmVudChjb2NvYUV2ZW50KSkg
eworICAgICAgICAgICAgTE9HKEV2ZW50cywgIlBsdWdpblZpZXc6OnNldEZvY3VzKCk6IEZvY3Vz
IGV2ZW50ICVkIG5vdCBhY2NlcHRlZCIsIGNvY29hRXZlbnQudHlwZSk7CisgICAgICAgIH0KKyAg
ICB9CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZShib29sIHZpc2libGUp
CkBAIC0zOTksOCArNDY3LDEwIEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRl
ZCgpCiAgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOwogICAg
IH0KIAotICAgIGlmICghbmV3Q29udGV4dFJlZiB8fCAhbmV3V2luZG93UmVmKQotICAgICAgICBy
ZXR1cm47CisgICAgaWYgKCFuZXdDb250ZXh0UmVmIHx8ICFuZXdXaW5kb3dSZWYpIHsKKyAgICAg
ICAgaWYgKCFtX3VzZVBpeG1hcCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBt
X25wV2luZG93LndpbmRvdyA9ICh2b2lkKikmbV9ucENnQ29udGV4dDsKICNpZm5kZWYgTlBfTk9f
Q0FSQk9OCkBAIC00NzQsMTIgKzU0NCwzMiBAQCB2b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBo
aWNzQ29udGV4dCogCiAKICAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm47Ci0KKyNpZiBQTEFURk9STShRVCkKKyAgICBRUGFpbnRlciogcCA9IGNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBxdF9t
YWNfY2dfY29udGV4dChwLT5kZXZpY2UoKSk7CisjZWxzZQorICAgIENHQ29udGV4dFJlZiBjZ0Nv
bnRleHQgPSBtX25wQ2dDb250ZXh0LmNvbnRleHQ7CisjZW5kaWYKICAgICBzZXROUFdpbmRvd0lm
TmVlZGVkKCk7CisgICAgaWYgKCFjZ0NvbnRleHQpIHsKKyAgICAgICAgY2dDb250ZXh0ID0gbV9j
b250ZXh0UmVmOworICAgICAgICBpZiAoIWNnQ29udGV4dCkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX3VzZVBpeG1hcCA9IHRydWU7CisgICAgICAg
ICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAg
ICAgbV91c2VQaXhtYXAgPSBmYWxzZTsKIAotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBt
X25wQ2dDb250ZXh0LmNvbnRleHQ7Ci0gICAgaWYgKCFjZ0NvbnRleHQpCi0gICAgICAgIHJldHVy
bjsKKyAgICBib29sIG9sZFVzZVBpeG1hcCA9IG1fdXNlUGl4bWFwOworICAgIGlmIChtX2lzVHJh
bnNwYXJlbnQgJiYgIW1fdXNlUGl4bWFwKSB7CisgICAgICAgIGlmIChtX3BpeG1hcC5pc051bGwo
KSkKKyAgICAgICAgICAgIG1fcGl4bWFwID0gUVBpeG1hcChmcmFtZVJlY3QoKS5zaXplKCkpOwor
ICAgICAgICBtX3VzZVBpeG1hcCA9IHRydWU7CisgICAgICAgIHNldE5QV2luZG93SWZOZWVkZWQo
KTsKKyAgICAgICAgY2dDb250ZXh0ID0gcXRfbWFjX2NnX2NvbnRleHQoJm1fcGl4bWFwKTsKKyAg
ICB9CiAKICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNnQ29udGV4dCk7CiAgICAgaWYgKHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCkpIHsKQEAgLTQ5OCw3ICs1ODgsNyBAQCB2b2lkIFBsdWdpblZpZXc6
OnBhaW50KEdyYXBoaWNzQ29udGV4dCogCiAgICAgci5zaXplLmhlaWdodCA9IHRhcmdldFJlY3Qu
aGVpZ2h0KCk7CiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjZ0NvbnRleHQsIHIpOwogCi0gICAg
aWYgKCFwbGF0Zm9ybVBsdWdpbldpZGdldCgpICYmIG1faXNUcmFuc3BhcmVudCkgeyAvLyBjbGVh
biB0aGUgcGl4bWFwIGluIHRyYW5zcGFyZW50IG1vZGUKKyAgICBpZiAoIXBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCkgfHwgbV9pc1RyYW5zcGFyZW50KSB7IC8vIGNsZWFuIHRoZSBwaXhtYXAgaW4gdHJh
bnNwYXJlbnQgbW9kZQogI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICBRUGFpbnRlciBwYWludGVy
KCZtX3BpeG1hcCk7CiAgICAgICAgIHBhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVy
OjpDb21wb3NpdGlvbk1vZGVfQ2xlYXIpOwpAQCAtNTA3LDM5ICs1OTcsNzAgQEAgdm9pZCBQbHVn
aW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIAogICAgIH0KIAogI2lmbmRlZiBOUF9OT19D
QVJCT04KLSAgICBFdmVudFJlY29yZCBldmVudDsKLSAgICBldmVudC53aGF0ID0gdXBkYXRlRXZ0
OwotICAgIGV2ZW50Lm1lc3NhZ2UgPSAobG9uZyB1bnNpZ25lZCBpbnQpbV9ucENnQ29udGV4dC53
aW5kb3c7Ci0gICAgZXZlbnQud2hlbiA9IFRpY2tDb3VudCgpOwotICAgIGV2ZW50LndoZXJlLmgg
PSAwOwotICAgIGV2ZW50LndoZXJlLnYgPSAwOwotICAgIGV2ZW50Lm1vZGlmaWVycyA9IEdldEN1
cnJlbnRLZXlNb2RpZmllcnMoKTsKLQotICAgIGlmICghZGlzcGF0Y2hOUEV2ZW50KGV2ZW50KSkK
LSAgICAgICAgTE9HKEV2ZW50cywgIlBsdWdpblZpZXc6OnBhaW50KCk6IFBhaW50IGV2ZW50IG5v
dCBhY2NlcHRlZCIpOwotI2VuZGlmCi0KLSAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNnQ29u
dGV4dCk7Ci0KLSAgICBpZiAoIXBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpIHsKKyAgICBpZiAobV9l
dmVudE1vZGVsICE9IE5QRXZlbnRNb2RlbENvY29hKSB7CisgICAgICAgIEV2ZW50UmVjb3JkIGV2
ZW50OworICAgICAgICBldmVudC53aGF0ID0gdXBkYXRlRXZ0OworICAgICAgICBldmVudC5tZXNz
YWdlID0gKGxvbmcgdW5zaWduZWQgaW50KW1fbnBDZ0NvbnRleHQud2luZG93OworICAgICAgICBl
dmVudC53aGVuID0gVGlja0NvdW50KCk7CisgICAgICAgIGV2ZW50LndoZXJlLmggPSAwOworICAg
ICAgICBldmVudC53aGVyZS52ID0gMDsKKyAgICAgICAgZXZlbnQubW9kaWZpZXJzID0gR2V0Q3Vy
cmVudEtleU1vZGlmaWVycygpOworCisgICAgICAgIGlmICghZGlzcGF0Y2hOUEV2ZW50KGV2ZW50
KSkKKyAgICAgICAgICAgIExPRyhFdmVudHMsICJQbHVnaW5WaWV3OjpwYWludCgpOiBQYWludCBl
dmVudCBub3QgYWNjZXB0ZWQiKTsKKyAgICB9IGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICAg
TlBDb2NvYUV2ZW50IGNvY29hRXZlbnQ7CisgICAgICAgIGluaXRpYWxpemVOUENvY29hRXZlbnQo
JmNvY29hRXZlbnQpOworICAgICAgICBjb2NvYUV2ZW50LnR5cGUgPSBOUENvY29hRXZlbnREcmF3
UmVjdDsKKyAgICAgICAgY29jb2FFdmVudC5kYXRhLmRyYXcueCA9IG1fdXNlUGl4bWFwID8gMCA6
IHIub3JpZ2luLng7CisgICAgICAgIGNvY29hRXZlbnQuZGF0YS5kcmF3LnkgPSBtX3VzZVBpeG1h
cCA/IDAgOiByLm9yaWdpbi55OworICAgICAgICBjb2NvYUV2ZW50LmRhdGEuZHJhdy53aWR0aCA9
IG1fdXNlUGl4bWFwID8gbV9waXhtYXAud2lkdGgoKSA6IHIuc2l6ZS53aWR0aDsKKyAgICAgICAg
Y29jb2FFdmVudC5kYXRhLmRyYXcuaGVpZ2h0ID0gbV91c2VQaXhtYXAgPyBtX3BpeG1hcC5oZWln
aHQoKSA6IHIuc2l6ZS5oZWlnaHQ7CisgICAgICAgIGNvY29hRXZlbnQuZGF0YS5kcmF3LmNvbnRl
eHQgPSBjZ0NvbnRleHQ7CisgICAgICAgIAorICAgICAgICBpZighZGlzcGF0Y2hOUENvY29hRXZl
bnQoY29jb2FFdmVudCkpCisgICAgICAgICAgICBMT0coRXZlbnRzLCAiUGx1Z2luVmlldzo6cGFp
bnQoKTogUGFpbnQgZXZlbnQgdHlwZSAlZCBub3QgYWNjZXB0ZWQiLCBjb2NvYUV2ZW50LnR5cGUp
OworICAgIH0KKyAgICAKKyAgICBpZiAoIXBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgfHwgbV9pc1Ry
YW5zcGFyZW50KSB7CiAjaWYgUExBVEZPUk0oUVQpCiAgICAgICAgIFFQYWludGVyKiBwYWludGVy
ID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgICAgIHBhaW50ZXItPmRyYXdQaXht
YXAodGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCBtX3BpeG1hcCwgCisgICAgICAgIHBh
aW50ZXItPmRyYXdQaXhtYXAodGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCBtX3BpeG1h
cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0LngoKSAtIGZyYW1lUmVj
dCgpLngoKSwgdGFyZ2V0UmVjdC55KCkgLSBmcmFtZVJlY3QoKS55KCksIHRhcmdldFJlY3Qud2lk
dGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSk7CiAjZW5kaWYKICAgICB9CisgICAgQ0dDb250ZXh0
UmVzdG9yZUdTdGF0ZShjZ0NvbnRleHQpOworICAgIGlmIChvbGRVc2VQaXhtYXAgIT0gbV91c2VQ
aXhtYXApIHsKKyAgICAgICAgbV91c2VQaXhtYXAgPSBvbGRVc2VQaXhtYXA7CisgICAgICAgIG1f
cGl4bWFwID0gUVBpeG1hcCgpOworICAgIH0gICAgCit9CisKK2Jvb2wgUGx1Z2luVmlldzo6cG9w
VXBDb250ZXh0TWVudShOUE1lbnUgKm1lbnUpCit7CisgICAgTlNFdmVudCogY3VycmVudEV2ZW50
ID0gW05TQXBwIGN1cnJlbnRFdmVudF07CisgICAgCisgICAgLy8gTlBOX1BvcFVwQ29udGV4dE1l
bnUgbXVzdCBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIHBsdWctaW4ncyBOUFBfSGFuZGxlRXZl
bnQuCisgICAgaWYgKCFjdXJyZW50RXZlbnQpCisgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklD
X0VSUk9SOworICAgIAorICAgIE5TV2luZG93KiB3aW5kb3cgPSBbY3VycmVudEV2ZW50IHdpbmRv
d107CisgICAgTlNWaWV3KiB2aWV3ID0gW3dpbmRvdyBjb250ZW50Vmlld107CisgICAgW05TTWVu
dSBwb3BVcENvbnRleHRNZW51OihOU01lbnUqKW1lbnUgd2l0aEV2ZW50OmN1cnJlbnRFdmVudCBm
b3JWaWV3OnZpZXddOworICAgIHJldHVybiB0cnVlOwogfQotCisgICAgCiB2b2lkIFBsdWdpblZp
ZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCkpCisgICAgaWYgKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgJiYgbV9p
c1RyYW5zcGFyZW50KQogI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICBzdGF0aWNfY2FzdDxRV2lk
Z2V0Kj4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnVwZGF0ZShjb252ZXJ0VG9Db250YWluaW5n
V2luZG93KHJlY3QpKTsKICNlbHNlCiAgICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPlJl
ZnJlc2hSZWN0KGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3cocmVjdCkpOwogI2VuZGlmCi0gICAg
ZWxzZQotICAgICAgICBpbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QocmVjdCk7CisgICAg
aW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KHJlY3QpOwogfQogCiB2b2lkIFBsdWdpblZp
ZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKQEAgLTU2MSwxMjkgKzY4MiwyOTcgQEAg
dm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpCiAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0g
RXZlbnQgaGFuZGxpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZvaWQgUGx1Z2luVmlldzo6aGFu
ZGxlV2hlZWxFdmVudChXaGVlbEV2ZW50ICpldmVudCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVk
IHx8IG1fZXZlbnRNb2RlbCAhPSBOUEV2ZW50TW9kZWxDb2NvYSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIE5QQ29jb2FFdmVudCBjb2NvYUV2ZW50OworICAgIGluaXRpYWxpemVOUENvY29h
RXZlbnQoJmNvY29hRXZlbnQpOworICAgIAorICAgIE5TRXZlbnQgKmN1cnJlbnRFdmVudCA9IFtO
U0FwcCBjdXJyZW50RXZlbnRdOworICAgIAorICAgIGNvY29hRXZlbnQudHlwZSA9IE5QQ29jb2FF
dmVudFNjcm9sbFdoZWVsOworICAgIAorICAgIGNvY29hRXZlbnQuZGF0YS5tb3VzZS5wbHVnaW5Y
ID0gZXZlbnQtPmxheWVyWCgpIC0gbV9ucFdpbmRvdy54ICsgbV93aW5kb3dSZWN0LngoKSAtIG1f
ZWxlbWVudC0+b2Zmc2V0TGVmdCgpOworICAgIGNvY29hRXZlbnQuZGF0YS5tb3VzZS5wbHVnaW5Z
ID0gZXZlbnQtPmxheWVyWSgpIC0gbV9ucFdpbmRvdy55ICsgbV93aW5kb3dSZWN0LnkoKSAtIG1f
ZWxlbWVudC0+b2Zmc2V0VG9wKCk7CisgICAgY29jb2FFdmVudC5kYXRhLm1vdXNlLmRlbHRhWCA9
IFtjdXJyZW50RXZlbnQgZGVsdGFYXTsKKyAgICBjb2NvYUV2ZW50LmRhdGEubW91c2UuZGVsdGFZ
ID0gW2N1cnJlbnRFdmVudCBkZWx0YVldOworICAgIGNvY29hRXZlbnQuZGF0YS5tb3VzZS5kZWx0
YVogPSBbY3VycmVudEV2ZW50IGRlbHRhWl07CisgICAgY29jb2FFdmVudC5kYXRhLm1vdXNlLm1v
ZGlmaWVyRmxhZ3MgPSBnZXRNb2RpZmllcnMoZXZlbnQpOworICAgIAorICAgIGlmKCFkaXNwYXRj
aE5QQ29jb2FFdmVudChjb2NvYUV2ZW50KSkgeworICAgICAgICBMT0coRXZlbnRzLCAiUGx1Z2lu
Vmlldzo6aGFuZGxlTW91c2VFdmVudCgpOiBXaGVlbCBldmVudCB0eXBlICVkIGF0ICVkLCVkIG5v
dCBhY2NlcHRlZCIsIGNvY29hRXZlbnQudHlwZQorICAgICAgICAgICAgY29jb2FFdmVudC5kYXRh
Lm1vdXNlLngsIGNvY29hRXZlbnQuZGF0YS5tb3VzZS55KTsKKyAgICB9CisgICAgZXZlbnQtPnNl
dERlZmF1bHRIYW5kbGVkKCk7Cit9CiAKIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVu
dChNb3VzZUV2ZW50KiBldmVudCkKIHsKICAgICBpZiAoIW1faXNTdGFydGVkKQogICAgICAgICBy
ZXR1cm47Ci0KKyAgICAKICNpZm5kZWYgTlBfTk9fQ0FSQk9OCi0gICAgRXZlbnRSZWNvcmQgcmVj
b3JkOwotCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2
ZW50KSB7Ci0gICAgICAgIC8vIE1vdXNlIG1vdmVtZW50IGlzIGhhbmRsZWQgYnkgbnVsbCB0aW1l
ciBldmVudHMKLSAgICAgICAgbV9sYXN0TW91c2VQb3MgPSBtb3VzZVBvc0ZvclBsdWdpbihldmVu
dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7Ci0gICAgICAgIHJlY29yZC53aGF0ID0gTlBFdmVu
dFR5cGVfQWRqdXN0Q3Vyc29yRXZlbnQ7Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KSB7Ci0gICAgICAgIHJlY29yZC53aGF0ID0gTlBF
dmVudFR5cGVfQWRqdXN0Q3Vyc29yRXZlbnQ7Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgewotICAgICAgICByZWNvcmQud2hhdCA9
IG1vdXNlRG93bjsKLSAgICAgICAgLy8gVGhlIHBsdWdpbiBuZWVkcyBmb2N1cyB0byByZWNlaXZl
IGtleWJvYXJkIGV2ZW50cwotICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fcGFyZW50RnJhbWUt
PnBhZ2UoKSkKLSAgICAgICAgICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2Vk
RnJhbWUobV9wYXJlbnRGcmFtZSk7Ci0gICAgICAgIG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCkt
PnNldEZvY3VzZWROb2RlKG1fZWxlbWVudCk7Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpIHsKLSAgICAgICAgcmVjb3JkLndoYXQgPSBt
b3VzZVVwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcmVjb3Jk
LndoZXJlID0gbW91c2VQb3NGb3JQbHVnaW4oZXZlbnQpOwotICAgIHJlY29yZC5tb2RpZmllcnMg
PSBtb2RpZmllcnNGb3JFdmVudChldmVudCk7Ci0KLSAgICBpZiAoIWV2ZW50LT5idXR0b25Eb3du
KCkpCi0gICAgICAgIHJlY29yZC5tb2RpZmllcnMgfD0gYnRuU3RhdGU7Ci0KLSAgICBpZiAoZXZl
bnQtPmJ1dHRvbigpID09IDIpCi0gICAgICAgIHJlY29yZC5tb2RpZmllcnMgfD0gY29udHJvbEtl
eTsKLQotICAgIGlmICghZGlzcGF0Y2hOUEV2ZW50KHJlY29yZCkpIHsKLSAgICAgICAgaWYgKHJl
Y29yZC53aGF0ID09IE5QRXZlbnRUeXBlX0FkanVzdEN1cnNvckV2ZW50KQotICAgICAgICAgICAg
cmV0dXJuOyAvLyBTaWduYWxzIHRoYXQgdGhlIHBsdWdpbiB3YW50cyBhIG5vcm1hbCBjdXJzb3IK
LQotICAgICAgICBMT0coRXZlbnRzLCAiUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCgpOiBN
b3VzZSBldmVudCB0eXBlICVkIGF0ICVkLCVkIG5vdCBhY2NlcHRlZCIsCisgICAgaWYgKG1fZXZl
bnRNb2RlbCAhPSBOUEV2ZW50TW9kZWxDb2NvYSkgeworICAgICAgICBFdmVudFJlY29yZCByZWNv
cmQ7CisgICAgICAgIAorICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
bW91c2Vtb3ZlRXZlbnQpIHsKKyAgICAgICAgICAgIC8vIE1vdXNlIG1vdmVtZW50IGlzIGhhbmRs
ZWQgYnkgbnVsbCB0aW1lciBldmVudHMKKyAgICAgICAgICAgIG1fbGFzdE1vdXNlUG9zID0gbW91
c2VQb3NGb3JQbHVnaW4oZXZlbnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVs
c2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7Cisg
ICAgICAgICAgICByZWNvcmQud2hhdCA9IE5QRXZlbnRUeXBlX0FkanVzdEN1cnNvckV2ZW50Owor
ICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0
RXZlbnQpIHsKKyAgICAgICAgICAgIHJlY29yZC53aGF0ID0gTlBFdmVudFR5cGVfQWRqdXN0Q3Vy
c29yRXZlbnQ7CisgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2Vkb3duRXZlbnQpIHsKKyAgICAgICAgICAgIHJlY29yZC53aGF0ID0gbW91c2VEb3du
OworICAgICAgICAgICAgLy8gVGhlIHBsdWdpbiBuZWVkcyBmb2N1cyB0byByZWNlaXZlIGtleWJv
YXJkIGV2ZW50cworICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5w
YWdlKCkpCisgICAgICAgICAgICAgICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEZvY3Vz
ZWRGcmFtZShtX3BhcmVudEZyYW1lKTsKKyAgICAgICAgICAgIG1fcGFyZW50RnJhbWUtPmRvY3Vt
ZW50KCktPnNldEZvY3VzZWROb2RlKG1fZWxlbWVudCk7CisgICAgICAgIH0gZWxzZSBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KSB7CisgICAgICAgICAgICBy
ZWNvcmQud2hhdCA9IG1vdXNlVXA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgcmVjb3JkLndoZXJlID0gbW91c2VQb3NGb3JQbHVnaW4o
ZXZlbnQpOworICAgICAgICByZWNvcmQubW9kaWZpZXJzID0gbW9kaWZpZXJzRm9yRXZlbnQoZXZl
bnQpOworICAgICAgICAKKyAgICAgICAgaWYgKCFldmVudC0+YnV0dG9uRG93bigpKQorICAgICAg
ICAgICAgcmVjb3JkLm1vZGlmaWVycyB8PSBidG5TdGF0ZTsKKyAgICAgICAgCisgICAgICAgIGlm
IChldmVudC0+YnV0dG9uKCkgPT0gMikKKyAgICAgICAgICAgIHJlY29yZC5tb2RpZmllcnMgfD0g
Y29udHJvbEtleTsKKyAgICAgICAgCisgICAgICAgIGlmICghZGlzcGF0Y2hOUEV2ZW50KHJlY29y
ZCkpIHsKKyAgICAgICAgICAgIGlmIChyZWNvcmQud2hhdCA9PSBOUEV2ZW50VHlwZV9BZGp1c3RD
dXJzb3JFdmVudCkKKyAgICAgICAgICAgICAgICByZXR1cm47IC8vIFNpZ25hbHMgdGhhdCB0aGUg
cGx1Z2luIHdhbnRzIGEgbm9ybWFsIGN1cnNvcgorICAgICAgICAgICAgCisgICAgICAgICAgICBM
T0coRXZlbnRzLCAiUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCgpOiBNb3VzZSBldmVudCB0
eXBlICVkIGF0ICVkLCVkIG5vdCBhY2NlcHRlZCIsCiAgICAgICAgICAgICAgICAgcmVjb3JkLndo
YXQsIHJlY29yZC53aGVyZS5oLCByZWNvcmQud2hlcmUudik7Ci0gICAgfSBlbHNlIHsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAg
ICAgICB9CisgICAgfSBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIE5QQ29jb2FFdmVudFR5
cGUgZXZlbnRUeXBlOworICAgICAgICBpbnQzMl90IGJ1dHRvbk51bWJlciA9IDA7CisgICAgICAg
IGludDMyX3QgY2xpY2tDb3VudCA9IDA7CisgICAgICAgIE5TRXZlbnQgKmN1cnJlbnRFdmVudCA9
IFtOU0FwcCBjdXJyZW50RXZlbnRdOworICAgICAgICAKKyAgICAgICAgTlNFdmVudFR5cGUgdHlw
ZSA9IFtjdXJyZW50RXZlbnQgdHlwZV07CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICAgICAgICAgIGNhc2UgTlNMZWZ0TW91c2VEb3duOgorICAgICAgICAgICAgY2FzZSBO
U1JpZ2h0TW91c2VEb3duOgorICAgICAgICAgICAgY2FzZSBOU090aGVyTW91c2VEb3duOgorICAg
ICAgICAgICAgICAgIGJ1dHRvbk51bWJlciA9IFtjdXJyZW50RXZlbnQgYnV0dG9uTnVtYmVyXTsK
KyAgICAgICAgICAgICAgICBjbGlja0NvdW50ID0gW2N1cnJlbnRFdmVudCBjbGlja0NvdW50XTsK
KyAgICAgICAgICAgICAgICBldmVudFR5cGUgPSBOUENvY29hRXZlbnRNb3VzZURvd247CisgICAg
ICAgICAgICAgICAgLy8gVGhlIHBsdWdpbiBuZWVkcyBmb2N1cyB0byByZWNlaXZlIGtleWJvYXJk
IGV2ZW50cworICAgICAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+
cGFnZSgpKQorICAgICAgICAgICAgICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0
Rm9jdXNlZEZyYW1lKG1fcGFyZW50RnJhbWUpOworICAgICAgICAgICAgICAgIG1fcGFyZW50RnJh
bWUtPmRvY3VtZW50KCktPnNldEZvY3VzZWROb2RlKG1fZWxlbWVudCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIE5TTGVmdE1vdXNl
VXA6CisgICAgICAgICAgICBjYXNlIE5TUmlnaHRNb3VzZVVwOgorICAgICAgICAgICAgY2FzZSBO
U090aGVyTW91c2VVcDoKKyAgICAgICAgICAgICAgICBidXR0b25OdW1iZXIgPSBbY3VycmVudEV2
ZW50IGJ1dHRvbk51bWJlcl07CisgICAgICAgICAgICAgICAgY2xpY2tDb3VudCA9IFtjdXJyZW50
RXZlbnQgY2xpY2tDb3VudF07CisgICAgICAgICAgICAgICAgZXZlbnRUeXBlID0gTlBDb2NvYUV2
ZW50TW91c2VVcDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGNhc2UgTlNNb3VzZU1vdmVkOgorICAgICAgICAgICAgICAgIGV2ZW50VHlwZSA9
IE5QQ29jb2FFdmVudE1vdXNlTW92ZWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICBjYXNlIE5TTGVmdE1vdXNlRHJhZ2dlZDoKKyAgICAgICAg
ICAgIGNhc2UgTlNSaWdodE1vdXNlRHJhZ2dlZDoKKyAgICAgICAgICAgIGNhc2UgTlNPdGhlck1v
dXNlRHJhZ2dlZDoKKyAgICAgICAgICAgICAgICBidXR0b25OdW1iZXIgPSBbY3VycmVudEV2ZW50
IGJ1dHRvbk51bWJlcl07CisgICAgICAgICAgICAgICAgZXZlbnRUeXBlID0gTlBDb2NvYUV2ZW50
TW91c2VEcmFnZ2VkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgY2FzZSBOU01vdXNlRW50ZXJlZDoKKyAgICAgICAgICAgICAgICBldmVudFR5
cGUgPSBOUENvY29hRXZlbnRNb3VzZUVudGVyZWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIE5TTW91c2VFeGl0ZWQ6CisgICAgICAg
ICAgICAgICAgZXZlbnRUeXBlID0gTlBDb2NvYUV2ZW50TW91c2VFeGl0ZWQ7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgTlBDb2NvYUV2ZW50IGNvY29hRXZlbnQ7CisgICAgICAgIGluaXRpYWxpemVOUENv
Y29hRXZlbnQoJmNvY29hRXZlbnQpOworICAgICAgICAKKyAgICAgICAgY29jb2FFdmVudC50eXBl
ID0gZXZlbnRUeXBlOworICAgICAgICBpZiAoIShOUENvY29hRXZlbnRNb3VzZUVudGVyZWQgPT0g
ZXZlbnRUeXBlIHx8IE5QQ29jb2FFdmVudE1vdXNlRXhpdGVkID09IGV2ZW50VHlwZSkpIHsKKyAg
ICAgICAgICAgIGNvY29hRXZlbnQuZGF0YS5tb3VzZS5idXR0b25OdW1iZXIgPSBidXR0b25OdW1i
ZXI7CisgICAgICAgICAgICBjb2NvYUV2ZW50LmRhdGEubW91c2UuY2xpY2tDb3VudCA9IGNsaWNr
Q291bnQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNvY29hRXZlbnQuZGF0YS5tb3Vz
ZS5wbHVnaW5YID0gZXZlbnQtPmxheWVyWCgpIC0gbV9ucFdpbmRvdy54ICsgbV93aW5kb3dSZWN0
LngoKSAtIG1fZWxlbWVudC0+b2Zmc2V0TGVmdCgpOworICAgICAgICBjb2NvYUV2ZW50LmRhdGEu
bW91c2UucGx1Z2luWSA9IGV2ZW50LT5sYXllclkoKSAtIG1fbnBXaW5kb3cueSArIG1fd2luZG93
UmVjdC55KCkgLSBtX2VsZW1lbnQtPm9mZnNldFRvcCgpOworICAgICAgICBjb2NvYUV2ZW50LmRh
dGEubW91c2UuZGVsdGFYID0gW2N1cnJlbnRFdmVudCBkZWx0YVhdOworICAgICAgICBjb2NvYUV2
ZW50LmRhdGEubW91c2UuZGVsdGFZID0gW2N1cnJlbnRFdmVudCBkZWx0YVldOworICAgICAgICBj
b2NvYUV2ZW50LmRhdGEubW91c2UuZGVsdGFaID0gW2N1cnJlbnRFdmVudCBkZWx0YVpdOworICAg
ICAgICBjb2NvYUV2ZW50LmRhdGEubW91c2UubW9kaWZpZXJGbGFncyA9IGdldE1vZGlmaWVycyhl
dmVudCk7CisgICAgICAgIAorICAgICAgICBpbnQxNl90IHJlc3BvbnNlID0gZGlzcGF0Y2hOUENv
Y29hRXZlbnQoY29jb2FFdmVudCk7CisgICAgICAgIGlmKHJlc3BvbnNlID0ga05QRXZlbnROb3RI
YW5kbGVkKSB7CisgICAgICAgICAgICBMT0coRXZlbnRzLCAiUGx1Z2luVmlldzo6aGFuZGxlTW91
c2VFdmVudCgpOiBNb3VzZSBldmVudCB0eXBlICVkIGF0ICVkLCVkIG5vdCBhY2NlcHRlZCIsIGNv
Y29hRXZlbnQudHlwZQorICAgICAgICAgICAgICAgIGNvY29hRXZlbnQuZGF0YS5tb3VzZS54LCBj
b2NvYUV2ZW50LmRhdGEubW91c2UueSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IFNhZmFyaSBwb2xpY3kgaXMgdG8gcmV0dXJuIHRydWUgZm9yIGFsbCBtb3VzZSBldmVudHMsIGJl
Y2F1c2Ugc29tZSBwbHVnaW5zCisgICAgICAgIC8vIHJldHVybiBmYWxzZSBldmVuIGlmIHRoZXkg
aGF2ZSBoYW5kbGVkIHRoZSBldmVudC4KICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7CiAgICAgfQotI2VuZGlmCiB9Ci0KKyAgICAKIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5
Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAoIW1faXNTdGFydGVk
KQogICAgICAgICByZXR1cm47Ci0KICAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OmhhbmRs
ZUtleWJvYXJkRXZlbnQoKSAtLS0tLS0tLS0tLS0tLS0tLSAiKTsKLQorICAgIAogICAgIExPRyhQ
bHVnaW5zLCAiUFY6OmhLRSgpOiBLRS5rZXlDb2RlOiAweCUwMlgsIEtFLmNoYXJDb2RlOiAlZCIs
Ci0gICAgICAgICAgICBldmVudC0+a2V5Q29kZSgpLCBldmVudC0+Y2hhckNvZGUoKSk7Ci0KKyAg
ICAgICAgZXZlbnQtPmtleUNvZGUoKSwgZXZlbnQtPmNoYXJDb2RlKCkpOworICAgIAogI2lmbmRl
ZiBOUF9OT19DQVJCT04KLSAgICBFdmVudFJlY29yZCByZWNvcmQ7Ci0KLSAgICBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KSB7Ci0gICAgICAgIC8vIFRoaXMg
ZXZlbnQgaXMgdGhlIHJlc3VsdCBvZiBhIFBsYXRmb3JtRXZlbnQ6OktleURvd24gd2hpY2gKLSAg
ICAgICAgLy8gd2FzIGRpc2FtYmlndWF0ZWQgaW50byBhIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6
UmF3S2V5RG93bi4gU2luY2UKLSAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhl
IHRleHQgaGVyZSwgd2UgcmV0dXJuLCBhbmQgd2FpdCBmb3IgdGhlCi0gICAgICAgIC8vIGNvcnJl
c3BvbmRpbmcgZXZlbnQgYmFzZWQgb24gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpDaGFyLgotICAg
ICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5rZXlwcmVzc0V2ZW50KSB7Ci0gICAgICAgIC8vIFdoaWNoIHdvdWxkIGJlIHRoaXMgb25lLiBU
aGlzIGV2ZW50IHdhcyBkaXNhbWJpZ3VhdGVkIGZyb20gdGhlIHNhbWUKLSAgICAgICAgLy8gUGxh
dGZvcm1FdmVudDo6S2V5RG93biwgYnV0IHRvIGEgUGxhdGZvcm1FdmVudDo6Q2hhciwKLSAgICAg
ICAgLy8gd2hpY2ggcmV0YWlucyB0aGUgdGV4dCBmcm9tIHRoZSBvcmlnaW5hbCBldmVudC4gU28s
IHdlIGNhbiBzYWZlbHkgcGFzcwotICAgICAgICAvLyBvbiB0aGUgZXZlbnQgYXMgYSBrZXktZG93
biBldmVudCB0byB0aGUgcGx1Z2luLgotICAgICAgICByZWNvcmQud2hhdCA9IGtleURvd247Ci0g
ICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50KSB7
Ci0gICAgICAgIC8vIFBsYXRmb3JtRXZlbnQ6OktleVVwIGV2ZW50cyBhbHdheXMgaGF2ZSB0aGUg
dGV4dCwgc28gbm90aGluZwotICAgICAgICAvLyBmYW5jeSBoZXJlLgotICAgICAgICByZWNvcmQu
d2hhdCA9IGtleVVwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIHBsYXRmb3JtRXZlbnQgPSBldmVudC0+a2V5
RXZlbnQoKTsKLSAgICBpbnQga2V5Q29kZSA9IHBsYXRmb3JtRXZlbnQtPm5hdGl2ZVZpcnR1YWxL
ZXlDb2RlKCk7Ci0KLSAgICBjb25zdCBTdHJpbmcgdGV4dCA9IHBsYXRmb3JtRXZlbnQtPnRleHQo
KTsKLSAgICBpZiAodGV4dC5sZW5ndGgoKSA8IDEpIHsKLSAgICAgICAgZXZlbnQtPnNldERlZmF1
bHRIYW5kbGVkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBXVEY6OlJldGFpblB0
cjxDRlN0cmluZ1JlZj4gY2ZUZXh0KFdURjo6QWRvcHRDRiwgdGV4dC5jcmVhdGVDRlN0cmluZygp
KTsKLQotICAgIExPRyhQbHVnaW5zLCAiUFY6OmhLRSgpOiBQS0UudGV4dDogJXMsIFBLRS51bm1v
ZGlmaWVkVGV4dDogJXMsIFBLRS5rZXlJZGVudGlmaWVyOiAlcyIsCisgICAgaWYgKG1fZXZlbnRN
b2RlbCAhPSBOUEV2ZW50TW9kZWxDb2NvYSkgeworICAgICAgICBFdmVudFJlY29yZCByZWNvcmQ7
CisgICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQp
IHsKKyAgICAgICAgICAgIC8vIFRoaXMgZXZlbnQgaXMgdGhlIHJlc3VsdCBvZiBhIFBsYXRmb3Jt
S2V5Ym9hcmRFdmVudDo6S2V5RG93biB3aGljaAorICAgICAgICAgICAgLy8gd2FzIGRpc2FtYmln
dWF0ZWQgaW50byBhIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UmF3S2V5RG93bi4gU2luY2UKKyAg
ICAgICAgICAgIC8vIHdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSB0ZXh0IGhlcmUsIHdlIHJl
dHVybiwgYW5kIHdhaXQgZm9yIHRoZQorICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBldmVu
dCBiYXNlZCBvbiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkNoYXIuCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5
cHJlc3NFdmVudCkgeworICAgICAgICAgICAgLy8gV2hpY2ggd291bGQgYmUgdGhpcyBvbmUuIFRo
aXMgZXZlbnQgd2FzIGRpc2FtYmlndWF0ZWQgZnJvbSB0aGUgc2FtZQorICAgICAgICAgICAgLy8g
UGxhdGZvcm1LZXlib2FyZEV2ZW50OjpLZXlEb3duLCBidXQgdG8gYSBQbGF0Zm9ybUtleWJvYXJk
RXZlbnQ6OkNoYXIsCisgICAgICAgICAgICAvLyB3aGljaCByZXRhaW5zIHRoZSB0ZXh0IGZyb20g
dGhlIG9yaWdpbmFsIGV2ZW50LiBTbywgd2UgY2FuIHNhZmVseSBwYXNzCisgICAgICAgICAgICAv
LyBvbiB0aGUgZXZlbnQgYXMgYSBrZXktZG93biBldmVudCB0byB0aGUgcGx1Z2luLgorICAgICAg
ICAgICAgcmVjb3JkLndoYXQgPSBrZXlEb3duOworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXVwRXZlbnQpIHsKKyAgICAgICAgICAgIC8vIFBsYXRm
b3JtS2V5Ym9hcmRFdmVudDo6S2V5VXAgZXZlbnRzIGFsd2F5cyBoYXZlIHRoZSB0ZXh0LCBzbyBu
b3RoaW5nCisgICAgICAgICAgICAvLyBmYW5jeSBoZXJlLgorICAgICAgICAgICAgcmVjb3JkLndo
YXQgPSBrZXlVcDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50KiBwbGF0
Zm9ybUV2ZW50ID0gZXZlbnQtPmtleUV2ZW50KCk7CisgICAgICAgIGludCBrZXlDb2RlID0gcGxh
dGZvcm1FdmVudC0+bmF0aXZlVmlydHVhbEtleUNvZGUoKTsKKyAgICAgICAgCisgICAgICAgIGNv
bnN0IFN0cmluZyB0ZXh0ID0gcGxhdGZvcm1FdmVudC0+dGV4dCgpOworICAgICAgICBpZiAodGV4
dC5sZW5ndGgoKSA8IDEpIHsKKyAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBXVEY6
OlJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZUZXh0KFdURjo6QWRvcHRDRiwgdGV4dC5jcmVhdGVD
RlN0cmluZygpKTsKKyAgICAgICAgCisgICAgICAgIExPRyhQbHVnaW5zLCAiUFY6OmhLRSgpOiBQ
S0UudGV4dDogJXMsIFBLRS51bm1vZGlmaWVkVGV4dDogJXMsIFBLRS5rZXlJZGVudGlmaWVyOiAl
cyIsCiAgICAgICAgICAgICB0ZXh0LmFzY2lpKCkuZGF0YSgpLCBwbGF0Zm9ybUV2ZW50LT51bm1v
ZGlmaWVkVGV4dCgpLmFzY2lpKCkuZGF0YSgpLAogICAgICAgICAgICAgcGxhdGZvcm1FdmVudC0+
a2V5SWRlbnRpZmllcigpLmFzY2lpKCkuZGF0YSgpKTsKLQotICAgIGNoYXIgY2hhckNvZGVzWzJd
ID0geyAwLCAwIH07Ci0gICAgaWYgKCFDRlN0cmluZ0dldENTdHJpbmcoY2ZUZXh0LmdldCgpLCBj
aGFyQ29kZXMsIDIsIENGU3RyaW5nR2V0U3lzdGVtRW5jb2RpbmcoKSkpIHsKLSAgICAgICAgTE9H
X0VSUk9SKCJDb3VsZCBub3QgcmVzb2x2ZSBjaGFyYWN0ZXIgY29kZSB1c2luZyBzeXN0ZW0gZW5j
b2RpbmcuIik7Ci0gICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgcmVjb3JkLndoZXJlID0gZ2xvYmFsTW91c2VQb3NGb3JQbHVn
aW4oKTsKLSAgICByZWNvcmQubW9kaWZpZXJzID0gbW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQpOwot
ICAgIHJlY29yZC5tZXNzYWdlID0gKChrZXlDb2RlICYgMHhGRikgPDwgOCkgfCAoY2hhckNvZGVz
WzBdICYgMHhGRik7Ci0gICAgcmVjb3JkLndoZW4gPSBUaWNrQ291bnQoKTsKLQotICAgIExPRyhQ
bHVnaW5zLCAiUFY6OmhLRSgpOiByZWNvcmQubW9kaWZpZXJzOiAlZCIsIHJlY29yZC5tb2RpZmll
cnMpOwotCisgICAgICAgIAorICAgICAgICBjaGFyIGNoYXJDb2Rlc1syXSA9IHsgMCwgMCB9Owor
ICAgICAgICBpZiAoIUNGU3RyaW5nR2V0Q1N0cmluZyhjZlRleHQuZ2V0KCksIGNoYXJDb2Rlcywg
MiwgQ0ZTdHJpbmdHZXRTeXN0ZW1FbmNvZGluZygpKSkgeworICAgICAgICAgICAgTE9HX0VSUk9S
KCJDb3VsZCBub3QgcmVzb2x2ZSBjaGFyYWN0ZXIgY29kZSB1c2luZyBzeXN0ZW0gZW5jb2Rpbmcu
Iik7CisgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmVjb3JkLndoZXJlID0gZ2xv
YmFsTW91c2VQb3NGb3JQbHVnaW4oKTsKKyAgICAgICAgcmVjb3JkLm1vZGlmaWVycyA9IG1vZGlm
aWVyc0ZvckV2ZW50KGV2ZW50KTsKKyAgICAgICAgcmVjb3JkLm1lc3NhZ2UgPSAoKGtleUNvZGUg
JiAweEZGKSA8PCA4KSB8IChjaGFyQ29kZXNbMF0gJiAweEZGKTsKKyAgICAgICAgcmVjb3JkLndo
ZW4gPSBUaWNrQ291bnQoKTsKKyAgICAgICAgCisgICAgICAgIExPRyhQbHVnaW5zLCAiUFY6OmhL
RSgpOiByZWNvcmQubW9kaWZpZXJzOiAlZCIsIHJlY29yZC5tb2RpZmllcnMpOworICAgICAgICAK
ICNpZiBQTEFURk9STShRVCkKLSAgICBMT0coUGx1Z2lucywgIlBWOjpoS0UoKTogUEtFLnF0RXZl
bnQoKS0+bmF0aXZlVmlydHVhbEtleTogMHglMDJYLCBjaGFyQ29kZTogJWQiLAotICAgICAgICAg
ICAgICAga2V5Q29kZSwgaW50KHVjaGFyKGNoYXJDb2Rlc1swXSkpKTsKLSNlbmRpZgotCi0gICAg
aWYgKCFkaXNwYXRjaE5QRXZlbnQocmVjb3JkKSkKLSAgICAgICAgTE9HKEV2ZW50cywgIlBsdWdp
blZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoKTogS2V5Ym9hcmQgZXZlbnQgdHlwZSAlZCBub3Qg
YWNjZXB0ZWQiLCByZWNvcmQud2hhdCk7Ci0gICAgZWxzZQotICAgICAgICBldmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKKyAgICAgICAgTE9HKFBsdWdpbnMsICJQVjo6aEtFKCk6IFBLRS5xdEV2
ZW50KCktPm5hdGl2ZVZpcnR1YWxLZXk6IDB4JTAyWCwgY2hhckNvZGU6ICVkIiwKKyAgICAgICAg
ICAgIGtleUNvZGUsIGludCh1Y2hhcihjaGFyQ29kZXNbMF0pKSk7CiAjZW5kaWYKKyAgICAgICAg
CisgICAgICAgIGlmICghZGlzcGF0Y2hOUEV2ZW50KHJlY29yZCkpCisgICAgICAgICAgICBMT0co
RXZlbnRzLCAiUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudCgpOiBLZXlib2FyZCBldmVu
dCB0eXBlICVkIG5vdCBhY2NlcHRlZCIsIHJlY29yZC53aGF0KTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgfSBlbHNlCisjZW5kaWYK
KyAgICB7CisgICAgICAgIE5TRXZlbnQgKmN1cnJlbnRFdmVudCA9IFtOU0FwcCBjdXJyZW50RXZl
bnRdOworICAgICAgICBOUENvY29hRXZlbnRUeXBlIGV2ZW50VHlwZTsKKyAgICAgICAgTlNFdmVu
dFR5cGUgdHlwZSA9IFtjdXJyZW50RXZlbnQgdHlwZV07CisgICAgICAgIAorICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgTlNLZXlEb3duOgorICAgICAgICAgICAgICAg
IGV2ZW50VHlwZSA9IE5QQ29jb2FFdmVudEtleURvd247CisgICAgICAgICAgICAgICAgbV9rZXlE
b3duU2VudCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IE5TS2V5VXA6CisgICAgICAgICAgICAgICAgaWYgKG1fZGlzcmVnYXJkS2V5VXBDb3VudGVyID4g
MCkgeworICAgICAgICAgICAgICAgICAgICBtX2Rpc3JlZ2FyZEtleVVwQ291bnRlci0tOworICAg
ICAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBldmVu
dFR5cGUgPSBOUENvY29hRXZlbnRLZXlVcDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgTlNGbGFnc0NoYW5nZWQ6CisgICAgICAgICAgICAgICAgZXZlbnRUeXBlID0g
TlBDb2NvYUV2ZW50RmxhZ3NDaGFuZ2VkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIE5QQ29jb2FFdmVudCBjb2NvYUV2ZW50OworICAgICAgICBpbml0aWFsaXpl
TlBDb2NvYUV2ZW50KCZjb2NvYUV2ZW50KTsKKyAgICAgICAgY29jb2FFdmVudC50eXBlID0gZXZl
bnRUeXBlOworICAgICAgICBpZiAoZXZlbnRUeXBlICE9IE5QQ29jb2FFdmVudEZsYWdzQ2hhbmdl
ZCkgeworICAgICAgICAgICAgTlNTdHJpbmcgKmNoYXJhY3RlcnMgPSBbY3VycmVudEV2ZW50IGNo
YXJhY3RlcnNdOworICAgICAgICAgICAgTlNTdHJpbmcgKmNoYXJhY3RlcnNJZ25vcmluZ01vZGlm
aWVycyA9IFtjdXJyZW50RXZlbnQgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzXTsKKyAgICAg
ICAgICAgIGNvY29hRXZlbnQuZGF0YS5rZXkuY2hhcmFjdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
TlBOU1N0cmluZyo+KGNoYXJhY3RlcnMpOworICAgICAgICAgICAgY29jb2FFdmVudC5kYXRhLmtl
eS5jaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMgPSByZWludGVycHJldF9jYXN0PE5QTlNTdHJp
bmcqPihjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMpOworICAgICAgICAgICAgY29jb2FFdmVu
dC5kYXRhLmtleS5pc0FSZXBlYXQgPSBbY3VycmVudEV2ZW50IGlzQVJlcGVhdF07CisgICAgICAg
ICAgICBjb2NvYUV2ZW50LmRhdGEua2V5LmtleUNvZGUgPSBbY3VycmVudEV2ZW50IGtleUNvZGVd
OworICAgICAgICAgICAgY29jb2FFdmVudC5kYXRhLmtleS5tb2RpZmllckZsYWdzID0gZ2V0TW9k
aWZpZXJzKGV2ZW50KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50MTZfdCByZXNw
b25zZSA9IGRpc3BhdGNoTlBDb2NvYUV2ZW50KGNvY29hRXZlbnQpOworICAgICAgICBpZihyZXNw
b25zZSA9PSBrTlBFdmVudE5vdEhhbmRsZWQpIHsKKyAgICAgICAgICAgIExPRyhFdmVudHMsICJQ
bHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KCk6IEtleWJvYXJkIGV2ZW50IHR5cGUgJWQg
bm90IGFjY2VwdGVkIiwgY29jb2FFdmVudC50eXBlKTsKKyAgICAgICAgfSBlbHNlIGlmIChyZXNw
b25zZSA9PSBrTlBFdmVudFN0YXJ0SU1FKSB7CisgICAgICAgICAgICAvLyBpbmNyZW1lbnQgY291
bnRlciBhbmQgcmVzZW5kIGFzIGEgdGV4dCBpbnB1dAorICAgICAgICAgICAgbV9kaXNyZWdhcmRL
ZXlVcENvdW50ZXIrKzsKKyAgICAgICAgICAgIE5QQ29jb2FFdmVudCB0ZXh0RXZlbnQ7CisgICAg
ICAgICAgICBpbml0aWFsaXplTlBDb2NvYUV2ZW50KCZ0ZXh0RXZlbnQpOworICAgICAgICAgICAg
dGV4dEV2ZW50LnR5cGUgPSBOUENvY29hRXZlbnRUZXh0SW5wdXQ7CisgICAgICAgICAgICB0ZXh0
RXZlbnQuZGF0YS50ZXh0LnRleHQgPSByZWludGVycHJldF9jYXN0PE5QTlNTdHJpbmcqPihbY3Vy
cmVudEV2ZW50IGNoYXJhY3RlcnNdKTsKKyAgICAgICAgICAgIHJlc3BvbnNlID0gZGlzcGF0Y2hO
UENvY29hRXZlbnQodGV4dEV2ZW50KTsKKyAgICAgICAgICAgIGlmKHJlc3BvbnNlID09IGtOUEV2
ZW50Tm90SGFuZGxlZCkKKyAgICAgICAgICAgICAgICBMT0coRXZlbnRzLCAiUGx1Z2luVmlldzo6
aGFuZGxlS2V5Ym9hcmRFdmVudCgpOiBLZXlib2FyZCBldmVudCB0eXBlICVkIG5vdCBhY2NlcHRl
ZCIsIGNvY29hRXZlbnQudHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEFs
bCBrZXlib2FyZCBldmVudHMgbmVlZCB0byBiZSBoYW5kbGVkIHRvIHByZXZlbnQgdGhlbSBmYWxs
aW5nCisgICAgICAgIC8vIHRocm91Z2ggdG8gdGhlIHBhZ2UsIHVubGVzcyB0aGV5IGFyZSBNZXRh
IGtleSBldmVudHMsIGluIHdoaWNoCisgICAgICAgIC8vIGNhc2UgdGhleSBhcmUsIHVubGVzcyB0
aGV5IGFyZSBDbWQrYS4gRnJvbSBXZWJLaXQyLCBwb3NzaWJseQorICAgICAgICAvLyBub3QgdGhl
IG1vc3QgZWxlZ2FudCBwaWVjZSBvZiBrZXkgaGFuZGxpbmcgY29kZS4uLi4uCisgICAgICAgIGlm
IChldmVudC0+bWV0YUtleSgpKSB7CisgICAgICAgICAgICBpZiAoY29jb2FFdmVudC5kYXRhLmtl
eS5rZXlDb2RlID09IDApCisgICAgICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBlbHNlIGlnbm9yZSwgaXQncyBh
IE1ldGEgS2V5IGV2ZW50IGZvciB0aGUgYnJvd3Nlci4KKyAgICAgICAgICAgIGV2ZW50LT5zZXRE
ZWZhdWx0SGFuZGxlZCgpOworICAgICAgICB9CisgICAgfQogfQotCisgICAgCiAjaWZuZGVmIE5Q
X05PX0NBUkJPTgogdm9pZCBQbHVnaW5WaWV3OjpudWxsRXZlbnRUaW1lckZpcmVkKFRpbWVyPFBs
dWdpblZpZXc+KikKIHsKQEAgLTc4Miw2ICsxMDcxLDIxIEBAIGJvb2wgUGx1Z2luVmlldzo6ZGlz
cGF0Y2hOUEV2ZW50KE5QRXZlbnQKIH0KICNlbmRpZgogCisKK2ludDE2X3QgUGx1Z2luVmlldzo6
ZGlzcGF0Y2hOUENvY29hRXZlbnQoTlBDb2NvYUV2ZW50JiBjb2NvYUV2ZW50KQoreworICAgIFBs
dWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworCisgICAgaW50MTZfdCByZXNwb25zZSA9IG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmY29jb2FFdmVudCk7CisKKyAg
ICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1
Z2luVmlldygwKTsKKworICAgIHJldHVybiByZXNwb25zZTsKK30KKwogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLSBNaXNjZWxsYW5lb3VzICAtLS0tLS0tLS0tLS0tLS0tLS0KIAogTlBFcnJvciBQbHVn
aW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVpbnQzMl90
IGxlbiwgY29uc3QgY2hhciogYnVmKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164720</attachid>
            <date>2012-09-19 05:15:12 -0700</date>
            <delta_ts>2012-09-24 04:02:17 -0700</delta_ts>
            <desc>Fixed patch with code style changes against trunk</desc>
            <filename>flashpatch.diff</filename>
            <type>text/plain</type>
            <size>38975</size>
            <attacher>andy.shaw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODg2NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDEyLTA5LTE5ICBBbmR5IFNo
YXcgIDxhbmR5LnNoYXdAZGlnaWEuY29tPgorCisgICAgICAgIFtRdF0gSW1wbGVtZW50IHN1cHBv
cnQgZm9yIENvb2NhIGJhc2VkIE5BUEFJIHBsdWdpbnMgb24gTWFjCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjM1OAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdpdGggbGF0ZXIgdmVyc2lvbnMgb2YgRmxh
c2ggdGhleSBhcmUgb25seSBDb2NvYSBiYXNlZCB3aGljaCBtZWFudCB0aGF0IGl0IHdhcyBub3Qg
cG9zc2libGUgdG8gdXNlIEZsYXNoIGluIGEgUXRXZWJLaXQgYnJvd3Nlci4KKyAgICAgICAgVGhp
cyBtYWtlcyBpdCBwb3NzaWJsZSB0byBhbHNvIHVzZSA2NGJpdCBiYXNlZCBwbHVnaW5zIHRvby4g
IAorCisgICAgICAgICogcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblBhY2thZ2U6OmluaXRpYWxpemVCcm93c2VyRnVuY3MpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5RdWlya1NldC5oOgorICAgICAgICAqIHBs
dWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5k
bGVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpQbHVnaW5WaWV3KToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXNlckFnZW50
KToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoUGx1Z2luVmlldyk6CisgICAgICAgICogcGx1Z2lucy9tYWMvUGx1Z2luUGFja2Fn
ZU1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWly
a3MpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKToKKyAgICAg
ICAgKiBwbHVnaW5zL21hYy9QbHVnaW5WaWV3TWFjLm1tOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplTlBDb2NvYUV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OmdldE1vZGlmaWVycyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9y
bVN0YXJ0KToKKyAgICAgICAgKiBwbHVnaW5zL25wYXBpLmNwcDoKKyAgICAgICAgKE5QTl9Qb3BV
cENvbnRleHRNZW51KToKKyAgICAgICAgKiBwbHVnaW5zL25wYXBpLmg6CisKIDIwMTItMDktMTgg
IE1paG5lYSBPdmlkZW5pZSAgPG1paG5lYUBhZG9iZS5jb20+CiAKICAgICAgICAgW0NTU1JlZ2lv
bnNdRmxhZyBhdXRvLWhlaWdodCByZWdpb25zCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L1BsdWdpblBhY2thZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
UGx1Z2luUGFja2FnZS5jcHAJKHJldmlzaW9uIDEyODg2NykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luUGFja2FnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyOCw4ICszMjgsMTAg
QEAgdm9pZCBQbHVnaW5QYWNrYWdlOjppbml0aWFsaXplQnJvd3NlckZ1bgogICAgIG1fYnJvd3Nl
ckZ1bmNzLmdldHZhbHVlZm9ydXJsID0gTlBOX0dldFZhbHVlRm9yVVJMOwogICAgIG1fYnJvd3Nl
ckZ1bmNzLnNldHZhbHVlZm9ydXJsID0gTlBOX1NldFZhbHVlRm9yVVJMOwogICAgIG1fYnJvd3Nl
ckZ1bmNzLmdldGF1dGhlbnRpY2F0aW9uaW5mbyA9IE5QTl9HZXRBdXRoZW50aWNhdGlvbkluZm87
CisKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3B1cGNvbnRleHRtZW51ID0gTlBOX1BvcFVwQ29udGV4
dE1lbnU7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
IAogI2lmIEVOQUJMRShQTFVHSU5fUEFDS0FHRV9TSU1QTEVfSEFTSCkKIHVuc2lnbmVkIFBsdWdp
blBhY2thZ2U6Omhhc2goKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVn
aW5RdWlya1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
UXVpcmtTZXQuaAkocmV2aXNpb24gMTI4ODY3KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5RdWlya1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgUGx1Z2luUXVpcmtSZXF1aXJlc0d0a1Rvb2xLaXQgPSAxIDw8
IDEyLAogICAgICAgICBQbHVnaW5RdWlya1JlcXVpcmVzRGVmYXVsdFNjcmVlbkRlcHRoID0gMSA8
PCAxMywKICAgICAgICAgUGx1Z2luUXVpcmtEb250Q2FsbFNldFdpbmRvd01vcmVUaGFuT25jZSA9
IDEgPDwgMTQsCi0gICAgICAgIFBsdWdpblF1aXJrSWdub3JlUmlnaHRDbGlja0luV2luZG93bGVz
c01vZGUgPSAxIDw8IDE1CisgICAgICAgIFBsdWdpblF1aXJrSWdub3JlUmlnaHRDbGlja0luV2lu
ZG93bGVzc01vZGUgPSAxIDw8IDE1LAorICAgICAgICBQbHVnaW5RdWlya1dhbnRzQ2hyb21lVXNl
ckFnZW50ID0gMSA8PCAxNgogICAgIH07CiAKICAgICBjbGFzcyBQbHVnaW5RdWlya1NldCB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9uIDEyODg2NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYyLDYgKzYyLDcgQEAKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXaGVlbEV2
ZW50LmgiCiAjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlD
VHlwZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMTY5LDYgKzE3MCwx
MCBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVuCiAgICAgICAgIGhh
bmRsZU1vdXNlRXZlbnQoc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KSk7CiAgICAgZWxz
ZSBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQogICAgICAgICBoYW5kbGVLZXlib2FyZEV2
ZW50KHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCkpOworI2lmIGRlZmluZWQoWFBf
TUFDT1NYKQorICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
d2hlZWxFdmVudCkKKyAgICAgICAgaGFuZGxlV2hlZWxFdmVudChzdGF0aWNfY2FzdDxXaGVlbEV2
ZW50Kj4oZXZlbnQpKTsKKyNlbmRpZgogICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmNvbnRleHRtZW51RXZlbnQpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOyAvLyBXZSBkb24ndCBrbm93IGlmIHRoZSBwbHVnLWluIGhhcyBoYW5kbGVkIG1vdXNl
ZG93biBldmVudCBieSBkaXNwbGF5aW5nIGEgY29udGV4dCBtZW51LCBzbyB3ZSBuZXZlciB3YW50
IFdlYktpdCB0byBzaG93IGEgZGVmYXVsdCBvbmUuCiAjaWYgZGVmaW5lZChYUF9VTklYKSAmJiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKQEAgLTgyOSw2ICs4MzQsOSBAQCBQbHVnaW5WaWV3
OjpQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtCiAgICAgLCBtX2luc3RhbmNlKDApCiAjaWYg
ZGVmaW5lZChYUF9NQUNPU1gpCiAgICAgLCBtX2lzV2luZG93ZWQoZmFsc2UpCisgICAgLCBtX3Vw
ZGF0ZWRDb2NvYVRleHRJbnB1dFJlcXVlc3RlZChmYWxzZSkKKyAgICAsIG1fa2V5RG93blNlbnQo
ZmFsc2UpCisgICAgLCBtX2Rpc3JlZ2FyZEtleVVwQ291bnRlcigwKQogI2Vsc2UKICAgICAsIG1f
aXNXaW5kb3dlZCh0cnVlKQogI2VuZGlmCkBAIC0xMjUyLDExICsxMjYwLDI3IEBAIHN0YXRpYyBj
b25zdCBjaGFyKiBNb3ppbGxhVXNlckFnZW50ID0gIk0KICNlbmRpZgogICAgICAgICAiIGVuLVVT
OyBydjoxLjguMSkgR2Vja28vMjAwNjEwMTAgRmlyZWZveC8yLjAiOwogCitzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgQ2hyb21lVXNlckFnZW50ID0gIk1vemlsbGEvNS4wICgiCisjaWYgZGVmaW5l
ZChYUF9NQUNPU1gpCisgICAgIk1hY2ludG9zaDsgVTsgSW50ZWwgTWFjIE9TIFg7IgorI2VsaWYg
ZGVmaW5lZChYUF9XSU4pCisgICAgIldpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNS4xOyIKKyNlbGlm
IGRlZmluZWQoWFBfVU5JWCkKKyAgICAvLyBUaGUgR3RrIHBvcnQgdXNlcyBYMTEgcGx1Z2lucyBp
biBNYWMuCisjaWYgT1MoREFSV0lOKSAmJiBQTEFURk9STShHVEspCisgICAgIlgxMTsgVTsgSW50
ZWwgTWFjIE9TIFg7IgorI2Vsc2UKKyAgICAiWDExOyBVOyBMaW51eCBpNjg2OyIKKyNlbmRpZgor
I2VuZGlmCisgICAgIiBBcHBsZVdlYktpdC81MzQuMzQgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJv
bWUvMTkuMC4xMDU1LjEgU2FmYXJpLzUzNC4zNCI7CisKIGNvbnN0IGNoYXIqIFBsdWdpblZpZXc6
OnVzZXJBZ2VudCgpCiB7CiAgICAgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVn
aW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCkpCiAgICAgICAgIHJldHVybiBNb3ppbGxhVXNl
ckFnZW50OwotCisgICAgZWxzZSBpZiAobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdp
blF1aXJrV2FudHNDaHJvbWVVc2VyQWdlbnQpKQorICAgICAgICByZXR1cm4gQ2hyb21lVXNlckFn
ZW50OwogICAgIGlmIChtX3VzZXJBZ2VudC5pc051bGwoKSkKICAgICAgICAgbV91c2VyQWdlbnQg
PSBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+dXNlckFnZW50KG1fdXJsKS51dGY4KCk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCShyZXZpc2lvbiAxMjg4NjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtOTgs
NiArOTgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgUGx1Z2luU3RyZWFtOwog
ICAgIGNsYXNzIFJlc291cmNlRXJyb3I7CiAgICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKKyAg
ICBjbGFzcyBXaGVlbEV2ZW50OwogCiAgICAgZW51bSBQbHVnaW5TdGF0dXMgewogICAgICAgICBQ
bHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luLApAQCAtMjI5LDYgKzIzMCwxMCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIGNvbnN0IFN0cmluZyYgbWltZVR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX21pbWVUeXBlOyB9CiAgICAgICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0
dXJuIG1fdXJsOyB9CiAKKyNpZiBkZWZpbmVkKFhQX01BQ09TWCkgJiYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCisgICAgICAgIGJvb2wgcG9wVXBDb250ZXh0TWVudShOUE1lbnUqKTsKKyNl
bmRpZgorCiAjaWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAg
ICAgICAgIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFBsdWdpblZpZXdXbmRQcm9jKEhXTkQsIFVJ
TlQsIFdQQVJBTSwgTFBBUkFNKTsKICAgICAgICAgTFJFU1VMVCB3bmRQcm9jKEhXTkQgaFduZCwg
VUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKQEAgLTMyMyw2ICsz
MjgsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIGRpc3BhdGNoTlBFdmVu
dChOUEV2ZW50Jik7CiAjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAjZW5k
aWYKKyNpZiBkZWZpbmVkKFhQX01BQ09TWCkgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CisgICAgICAgIGludDE2X3QgZGlzcGF0Y2hOUENvY29hRXZlbnQoTlBDb2NvYUV2ZW50Jik7Cisg
ICAgICAgIGJvb2wgbV91cGRhdGVkQ29jb2FUZXh0SW5wdXRSZXF1ZXN0ZWQ7CisgICAgICAgIGJv
b2wgbV9rZXlEb3duU2VudDsKKyAgICAgICAgYm9vbCBtX3VzZVBpeG1hcDsKKyAgICAgICAgdWlu
dDE2X3QgbV9kaXNyZWdhcmRLZXlVcENvdW50ZXI7CisjZW5kaWYKKworI2lmIGRlZmluZWQoWFBf
TUFDT1NYKQorICAgICAgICB2b2lkIGhhbmRsZVdoZWVsRXZlbnQoV2hlZWxFdmVudCopOworI2Vu
ZGlmCiAgICAgICAgIHZvaWQgdXBkYXRlUGx1Z2luV2lkZ2V0KCk7CiAgICAgICAgIHZvaWQgcGFp
bnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbnBhcGkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvbnBhcGkuY3BwCShyZXZpc2lvbiAxMjg4NjcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL25wYXBpLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDMgKzE5
OSwxNCBAQCBOUEVycm9yIE5QTl9HZXRBdXRoZW50aWNhdGlvbkluZm8oTlBQIGluCiB7CiAgICAg
cmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdldEF1dGhlbnRpY2F0aW9u
SW5mbyhwcm90b2NvbCwgaG9zdCwgcG9ydCwgc2NoZW1lLCByZWFsbSwgdXNlcm5hbWUsIHVsZW4s
IHBhc3N3b3JkLCBwbGVuKTsKIH0KKworTlBFcnJvciBOUE5fUG9wVXBDb250ZXh0TWVudShOUFAg
aW5zdGFuY2UsIE5QTWVudSogbWVudSkKK3sKKyNpZiBQTEFURk9STShRVCkgJiYgZGVmaW5lZChY
UF9NQUNPU1gpCisgICAgUGx1Z2luVmlldyogcGx1Z2luID0gcGx1Z2luVmlld0Zvckluc3RhbmNl
KGluc3RhbmNlKTsKKyAgICBwbHVnaW4tPnBvcFVwQ29udGV4dE1lbnUobWVudSk7CisgICAgcmV0
dXJuIE5QRVJSX05PX0VSUk9SOworI2Vsc2UKKyAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Cisj
ZW5kaWYgLy8gUExBVEZPUk0oUVQpICYmIGRlZmluZWQoWFBfTUFDT1NYKQorfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ucGFwaS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvbnBhcGkuaAkocmV2aXNpb24gMTI4ODY3KQorKysgU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9ucGFwaS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTUsNyArNDE1LDkgQEAgdHlwZWRlZiBl
bnVtIHsKIAogICBOUE5WU3VwcG9ydHNXaW5kb3dsZXNzID0gMTcsCiAKLSAgTlBOVnByaXZhdGVN
b2RlQm9vbCA9IDE4CisgIE5QTlZwcml2YXRlTW9kZUJvb2wgPSAxOCwKKworICBOUE5Wc3VwcG9y
dHNBZHZhbmNlZEtleUhhbmRsaW5nID0gMjEKIAogI2lmIGRlZmluZWQoWFBfTUFDT1NYKQogICAv
KiBVc2VkIGZvciBuZWdvdGlhdGluZyBkcmF3aW5nIG1vZGVscyAqLwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luUGFja2FnZU1hYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luUGFja2FnZU1hYy5jcHAJKHJldmlzaW9uIDEy
ODg2NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblBhY2thZ2VNYWMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw4ICs1Nyw3IEBAIHZvaWQgUGx1Z2luUGFja2FnZTo6ZGV0
ZXJtaW5lUXVpcmtzKGNvbnMKICAgICB9CiAKICAgICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0
aW9uL3gtc2hvY2t3YXZlLWZsYXNoIikgewotICAgICAgICAvLyBUaGUgZmxhc2ggcGx1Z2luIG9u
bHkgcmVxdWVzdHMgd2luZG93bGVzcyBwbHVnaW5zIGlmIHdlIHJldHVybiBhIG1vemlsbGEgdXNl
ciBhZ2VudAotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2Vy
QWdlbnQpOworICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtXYW50c0Nocm9tZVVzZXJB
Z2VudCk7CiAgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0
ZSk7CiAgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxlV01Vc2VyUGx1c09u
ZU1lc3NhZ2VzKTsKICAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRmxhc2hVUkxOb3Rp
ZnlCdWcpOwpAQCAtMTk2LDYgKzE5NSw3IEBAIGJvb2wgUGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZv
KCkKIAogICAgICAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gKENGU3RyaW5nUmVmKUNGRGlj
dGlvbmFyeUdldFZhbHVlKGV4dGVuc2lvbnNEaWN0LmdldCgpLCBDRlNUUigiV2ViUGx1Z2luVHlw
ZURlc2NyaXB0aW9uIikpOwogICAgICAgICAgICAgbV9taW1lVG9EZXNjcmlwdGlvbnMuc2V0KG1p
bWVUeXBlLCBkZXNjcmlwdGlvbik7CisgICAgICAgICAgICBkZXRlcm1pbmVRdWlya3MobWltZVR5
cGUpOwogICAgICAgICB9CiAKICAgICAgICAgbV9uYW1lID0gKENGU3RyaW5nUmVmKUNGQnVuZGxl
R2V0VmFsdWVGb3JJbmZvRGljdGlvbmFyeUtleShtX21vZHVsZSwgQ0ZTVFIoIldlYlBsdWdpbk5h
bWUiKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL21hYy9QbHVnaW5WaWV3TWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMu
bW0JKHJldmlzaW9uIDEyODg2NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdp
blZpZXdNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJS
ZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
U2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAibnBydW50aW1l
X2ltcGwuaCIKICNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKICNpbmNsdWRlIDxydW50aW1lL0pT
TG9jay5oPgpAQCAtNzUsOSArNzYsMTIgQEAgdXNpbmcgSlNDOjpKU1ZhbHVlOwogI2luY2x1ZGUg
PFFXaWRnZXQ+CiAjaW5jbHVkZSA8UUtleUV2ZW50PgogI2luY2x1ZGUgPFFQYWludGVyPgorI2lu
Y2x1ZGUgPFFEYXRlVGltZT4KKyNpbmNsdWRlIDxRUGl4bWFwPgogI2luY2x1ZGUgIlFXZWJQYWdl
Q2xpZW50LmgiCiBRVF9CRUdJTl9OQU1FU1BBQ0UKIGV4dGVybiBRX0dVSV9FWFBPUlQgT1NXaW5k
b3dSZWYgcXRfbWFjX3dpbmRvd19mb3IoY29uc3QgUVdpZGdldCogdyk7CitleHRlcm4gUV9HVUlf
RVhQT1JUIENHQ29udGV4dFJlZiBxdF9tYWNfY2dfY29udGV4dChjb25zdCBRUGFpbnREZXZpY2Ug
KnBkZXYpOyAvL3FwYWludGRldmljZV9tYWMuY3BwCiBRVF9FTkRfTkFNRVNQQUNFCiAjZW5kaWYK
IApAQCAtMTQ0LDYgKzE0OCwyNSBAQCBzdGF0aWMgaW5saW5lIEludFBvaW50IHRvcExldmVsT2Zm
c2V0Rm9yCiAgICAgcmV0dXJuIEludFBvaW50KCk7CiB9CiAKKy8vIC0tLS0tLS0tLSBDb2NvYSBz
cGVjaWZpYyB1dGlsaXR5IGZ1bmN0aW9ucyAtLS0tLS0tLS0tCisKK3N0YXRpYyB2b2lkIGluaXRp
YWxpemVOUENvY29hRXZlbnQoTlBDb2NvYUV2ZW50KiBldmVudCkKK3sKKyAgICBtZW1zZXQoZXZl
bnQsIDAsIHNpemVvZihOUENvY29hRXZlbnQpKTsKK30KKworc3RhdGljIGludDMyX3QgZ2V0TW9k
aWZpZXJzKFVJRXZlbnRXaXRoS2V5U3RhdGUgKmV2ZW50KQoreworICAgIGludDMyX3QgbW9kaWZp
ZXJzID0gMDsKKyAgICBpZiAoZXZlbnQtPmtleUNvZGUoKSA9PSA1NykgbW9kaWZpZXJzIHw9IE5T
QWxwaGFTaGlmdEtleU1hc2s7CisgICAgaWYgKGV2ZW50LT5zaGlmdEtleSgpKSAgbW9kaWZpZXJz
IHw9IE5TU2hpZnRLZXlNYXNrOworICAgIGlmIChldmVudC0+Y3RybEtleSgpKSAgIG1vZGlmaWVy
cyB8PSBOU0NvbnRyb2xLZXlNYXNrOworICAgIGlmIChldmVudC0+bWV0YUtleSgpKSAgIG1vZGlm
aWVycyB8PSBOU0NvbW1hbmRLZXlNYXNrOworICAgIGlmIChldmVudC0+YWx0S2V5KCkpICAgIG1v
ZGlmaWVycyB8PSBOU0FsdGVybmF0ZUtleU1hc2s7CisKKyAgICByZXR1cm4gbW9kaWZpZXJzOwor
fQorCiAvLyAtLS0tLS0tLS0tLS0tLS0gTGlmZXRpbWUgbWFuYWdlbWVudCAtLS0tLS0tLS0tLS0t
LS0tLQogCiBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQpAQCAtMTc5LDI4ICsyMDIs
NDAgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKICAgICBOUEJvb2wgZXZlbnRN
b2RlbFN1cHBvcnRlZDsKICAgICBpZiAoZ2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUoTlBOVnN1
cHBvcnRzQ2FyYm9uQm9vbCArIG1fZXZlbnRNb2RlbCksICZldmVudE1vZGVsU3VwcG9ydGVkKSAh
PSBOUEVSUl9OT19FUlJPUgogICAgICAgICAgICAgfHwgIWV2ZW50TW9kZWxTdXBwb3J0ZWQpIHsK
KyNlbHNlCisgICAgTlBCb29sIGV2ZW50TW9kZWxTdXBwb3J0ZWQ7CisgICAgaWYgKGdldFZhbHVl
U3RhdGljKE5QTlZhcmlhYmxlKE5QTlZzdXBwb3J0c0NvY29hQm9vbC8qICsgbV9ldmVudE1vZGVs
Ki8pLCAmZXZlbnRNb2RlbFN1cHBvcnRlZCkgIT0gTlBFUlJfTk9fRVJST1IKKyAgICAgICAgICAg
IHx8ICFldmVudE1vZGVsU3VwcG9ydGVkKSB7CiAjZW5kaWYKICAgICAgICAgbV9zdGF0dXMgPSBQ
bHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOwogICAgICAgICBMT0coUGx1Z2lucywgIlBsdWct
aW4gJyVzJyB1c2VzIHVuc3VwcG9ydGVkIGV2ZW50IG1vZGVsICVzIiwKICAgICAgICAgICAgICAg
ICBtX3BsdWdpbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCksIHByZXR0eU5hbWVGb3JFdmVudE1vZGVs
KG1fZXZlbnRNb2RlbCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7Ci0jaWZuZGVmIE5QX05PX0NB
UkJPTgogICAgIH0KLSNlbmRpZgogCiAjaWZuZGVmIE5QX05PX1FVSUNLRFJBVwogICAgIE5QQm9v
bCBkcmF3aW5nTW9kZWxTdXBwb3J0ZWQ7CiAgICAgaWYgKGdldFZhbHVlU3RhdGljKE5QTlZhcmlh
YmxlKE5QTlZzdXBwb3J0c1F1aWNrRHJhd0Jvb2wgKyBtX2RyYXdpbmdNb2RlbCksICZkcmF3aW5n
TW9kZWxTdXBwb3J0ZWQpICE9IE5QRVJSX05PX0VSUk9SCiAgICAgICAgICAgICB8fCAhZHJhd2lu
Z01vZGVsU3VwcG9ydGVkKSB7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90
TG9hZFBsdWdpbjsKKyAgICAgICAgTE9HKFBsdWdpbnMsICJQbHVnLWluICclcycgdXNlcyB1bnN1
cHBvcnRlZCBkcmF3aW5nIG1vZGVsICVzIiwKKyAgICAgICAgICAgICAgICBtX3BsdWdpbi0+bmFt
ZSgpLnV0ZjgoKS5kYXRhKCksIHByZXR0eU5hbWVGb3JEcmF3aW5nTW9kZWwobV9kcmF3aW5nTW9k
ZWwpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICNlbmRpZgorCisjaWZkZWYgTlBf
Tk9fUVVJQ0tEUkFXCisgICAgTlBCb29sIGRyYXdpbmdNb2RlbFN1cHBvcnRlZDsKKyAgICBpZiAo
Z2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUoTlBOVnN1cHBvcnRzQ29yZUdyYXBoaWNzQm9vbC8q
ICsgbV9kcmF3aW5nTW9kZWwqLyksICZkcmF3aW5nTW9kZWxTdXBwb3J0ZWQpICE9IE5QRVJSX05P
X0VSUk9SCisgICAgICAgICAgICB8fCAhZHJhd2luZ01vZGVsU3VwcG9ydGVkKSB7CiAgICAgICAg
IG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKICAgICAgICAgTE9HKFBs
dWdpbnMsICJQbHVnLWluICclcycgdXNlcyB1bnN1cHBvcnRlZCBkcmF3aW5nIG1vZGVsICVzIiwK
ICAgICAgICAgICAgICAgICBtX3BsdWdpbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCksIHByZXR0eU5h
bWVGb3JEcmF3aW5nTW9kZWwobV9kcmF3aW5nTW9kZWwpKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotI2lmbmRlZiBOUF9OT19RVUlDS0RSQVcKICAgICB9CiAjZW5kaWYKIAorCiAjaWYgUExBVEZP
Uk0oUVQpCiAgICAgLy8gU2V0IHRoZSBwbGF0Zm9ybVBsdWdpbldpZGdldCBvbmx5IGluIHRoZSBj
YXNlIG9mIFFXZWJWaWV3IHNvIHRoYXQgdGhlIGNvbnRleHQgbWVudSBhcHBlYXJzIGluIHRoZSBy
aWdodCBwbGFjZS4KICAgICAvLyBJbiBhbGwgb3RoZXIgY2FzZXMsIHdlIHVzZSBvZmYtc2NyZWVu
IHJlbmRlcmluZwpAQCAtMjE1LDI3ICsyNTAsMjkgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9y
bVN0YXJ0KCkKICNlbmRpZgogCiAgICAgLy8gQ3JlYXRlIGEgZmFrZSB3aW5kb3cgcmVsYXRpdmUg
dG8gd2hpY2ggYWxsIGV2ZW50cyB3aWxsIGJlIHNlbnQgd2hlbiB1c2luZyBvZmZzY3JlZW4gcmVu
ZGVyaW5nCi0gICAgaWYgKCFwbGF0Zm9ybVBsdWdpbldpZGdldCgpKSB7CiAjaWZuZGVmIE5QX05P
X0NBUkJPTgorICAgIGlmICghcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkgewogICAgICAgICAvLyBN
YWtlIHRoZSBkZWZhdWx0IHNpemUgcmVhbGx5IGJpZy4gSXQgaXMgdW5jbGVhciB3aHkgdGhpcyBp
cyByZXF1aXJlZCBidXQgd2l0aCBhIHNtYWxsZXIgc2l6ZSwgbW91c2UgbW92ZQogICAgICAgICAv
LyBldmVudHMgZG9uJ3QgZ2V0IHByb2Nlc3NlZC4gUmVzaXppbmcgdGhlIGZha2Ugd2luZG93IHRv
IGZsYXNoJ3Mgc2l6ZSBkb2Vzbid0IGhlbHAuCiAgICAgICAgIDo6UmVjdCB3aW5kb3dCb3VuZHMg
PSB7IDAsIDAsIDEwMDAsIDEwMDAgfTsKICAgICAgICAgQ3JlYXRlTmV3V2luZG93KGtEb2N1bWVu
dFdpbmRvd0NsYXNzLCBrV2luZG93U3RhbmRhcmREb2N1bWVudEF0dHJpYnV0ZXMsICZ3aW5kb3dC
b3VuZHMsICZtX2Zha2VXaW5kb3cpOwogICAgICAgICAvLyBGbGFzaCByZXF1aXJlcyB0aGUgd2lu
ZG93IHRvIGJlIGhpbGl0ZWQgdG8gcHJvY2VzcyBtb3VzZSBtb3ZlIGV2ZW50cy4KICAgICAgICAg
SGlsaXRlV2luZG93KG1fZmFrZVdpbmRvdywgdHJ1ZSk7Ci0jZW5kaWYKICAgICB9CisjZW5kaWYK
IAogICAgIHVwZGF0ZVBsdWdpbldpZGdldCgpOwogCiAgICAgaWYgKCFtX3BsdWdpbi0+cXVpcmtz
KCkuY29udGFpbnMoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpCiAgICAgICAg
IHNldE5QV2luZG93SWZOZWVkZWQoKTsKIAorI2lmbmRlZiBOUF9OT19DQVJCT04KICAgICAvLyBU
T0RPOiBJbXBsZW1lbnQgbnVsbCB0aW1lciB0aHJvdHRsaW5nIGRlcGVuZGluZyBvbiBwbHVnaW4g
YWN0aXZhdGlvbgogICAgIG1fbnVsbEV2ZW50VGltZXIgPSBhZG9wdFB0cihuZXcgVGltZXI8UGx1
Z2luVmlldz4odGhpcywgJlBsdWdpblZpZXc6Om51bGxFdmVudFRpbWVyRmlyZWQpKTsKICAgICBt
X251bGxFdmVudFRpbWVyLT5zdGFydFJlcGVhdGluZygwLjAyKTsKIAogICAgIG1fbGFzdE1vdXNl
UG9zLmggPSBtX2xhc3RNb3VzZVBvcy52ID0gMDsKKyNlbmRpZiAvLyBOUF9OT19DQVJCT04KIAog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjc2LDcgKzMxMyw3IEBAIGJvb2wgUGx1Z2luVmlldzo6
cGxhdGZvcm1HZXRWYWx1ZVN0YXRpYygKIAogI2VuZGlmCiAgICAgY2FzZSBOUE5Wc3VwcG9ydHND
b2NvYUJvb2w6Ci0gICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSBmYWxzZTsK
KyAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CiAgICAgICAgICpy
ZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTI4Niw2
ICszMjMsMTEgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKAogICAg
ICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CiAgICAgICAgIHJldHVybiB0cnVlOwogCisg
ICAgY2FzZSBOUE5Wc3VwcG9ydHNBZHZhbmNlZEtleUhhbmRsaW5nOgorICAgICAgICAqc3RhdGlj
X2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gdHJ1ZTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05P
X0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKwogI2lmbmRlZiBOUF9OT19RVUlDS0RSQVcK
ICAgICAvLyBRdWlja0RyYXcgaXMgZGVwcmVjYXRlZCBpbiAxMC41IGFuZCBub3Qgc3VwcG9ydGVk
IG9uIDY0LWJpdAogICAgIGNhc2UgTlBOVnN1cHBvcnRzUXVpY2tEcmF3Qm9vbDoKQEAgLTMwNCw2
ICszNDYsMjAgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKAogLy8g
VXNlZCBvbmx5IGZvciB2YXJpYWJsZXMgdGhhdCBuZWVkIGEgdmlldyB0byByZXNvbHZlCiBib29s
IFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQq
IHZhbHVlLCBOUEVycm9yKiBlcnJvcikKIHsKKyAgICAvLyBJbiBXZWJLaXQyLCB0aGlzIGlzIHNl
dCBpZiB0aGUgcGx1Z2luIHF1ZXJpZXMgaXQncyBhdmFpbGlhYmxpdHkgYW5kCisgICAgLy8gbm8g
a2V5IGRvd24gZXZlbnRzIGhhdmUgYWxyZWFkeSBiZWVuIHNlbnQuCisgICAgaWYgKHZhcmlhYmxl
ID09IE5QTlZzdXBwb3J0c1VwZGF0ZWRDb2NvYVRleHRJbnB1dEJvb2wpIHsKKyAgICAgICAgaWYg
KG1fa2V5RG93blNlbnQgJiYgIW1fdXBkYXRlZENvY29hVGV4dElucHV0UmVxdWVzdGVkKSB7Cisg
ICAgICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gZmFsc2U7CisgICAgICAg
ICAgICAqZXJyb3IgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOworICAgICAg
ICAgICAgKmVycm9yID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgICAgICBtX3VwZGF0ZWRDb2Nv
YVRleHRJbnB1dFJlcXVlc3RlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMzQyLDIxICszOTgsMjIgQEAg
dm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cyhib29sIGZvY3VzZWQpCiAgICAgTE9HKFBsdWdpbnMs
ICJQbHVnaW5WaWV3OjpzZXRGb2N1cyglZCkiLCBmb2N1c2VkKTsKICAgICBpZiAoIWZvY3VzZWQp
IHsKICAgICAgICAgV2lkZ2V0OjpzZXRGb2N1cyhmb2N1c2VkKTsKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICBpZiAobV9ldmVudE1vZGVsICE9IE5QRXZlbnRNb2RlbENvY29hKQorICAgICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQogI2lm
IFBMQVRGT1JNKFFUKQotICAgICAgIHN0YXRpY19jYXN0PFFXaWRnZXQqPihwbGF0Zm9ybVBsdWdp
bldpZGdldCgpKS0+c2V0Rm9jdXMoUXQ6Ok90aGVyRm9jdXNSZWFzb24pOworICAgICAgICBzdGF0
aWNfY2FzdDxRV2lkZ2V0Kj4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnNldEZvY3VzKFF0OjpP
dGhlckZvY3VzUmVhc29uKTsKICNlbHNlCiAgICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkt
PlNldEZvY3VzKCk7CiAjZW5kaWYKLSAgIGVsc2UKLSAgICAgICBXaWRnZXQ6OnNldEZvY3VzKGZv
Y3VzZWQpOworICAgIGVsc2UKKyAgICAgICAgV2lkZ2V0OjpzZXRGb2N1cyhmb2N1c2VkKTsKIAot
ICAgIC8vIFRPRE86IEFsc28gaGFuZGxlIGFuZCBwYXNzIG9uIGJsdXIgZXZlbnRzIChmb2N1cyBs
b3N0KQogCiAjaWZuZGVmIE5QX05PX0NBUkJPTgorICAgIC8vIFRPRE86IEFsc28gaGFuZGxlIGFu
ZCBwYXNzIG9uIGJsdXIgZXZlbnRzIChmb2N1cyBsb3N0KQogICAgIEV2ZW50UmVjb3JkIHJlY29y
ZDsKICAgICByZWNvcmQud2hhdCA9IE5QRXZlbnRUeXBlX0dldEZvY3VzRXZlbnQ7CiAgICAgcmVj
b3JkLm1lc3NhZ2UgPSAwOwpAQCAtMzY3LDYgKzQyNCwxNyBAQCB2b2lkIFBsdWdpblZpZXc6OnNl
dEZvY3VzKGJvb2wgZm9jdXNlZCkKICAgICBpZiAoIWRpc3BhdGNoTlBFdmVudChyZWNvcmQpKQog
ICAgICAgICBMT0coRXZlbnRzLCAiUGx1Z2luVmlldzo6c2V0Rm9jdXMoJWQpOiBGb2N1cyBldmVu
dCBub3QgYWNjZXB0ZWQiLCBmb2N1c2VkKTsKICNlbmRpZgorICAgIHsKKyAgICAgICAgTlBDb2Nv
YUV2ZW50IGNvY29hRXZlbnQ7CisgICAgICAgIGluaXRpYWxpemVOUENvY29hRXZlbnQoJmNvY29h
RXZlbnQpOworICAgICAgICBjb2NvYUV2ZW50LnR5cGUgPSBOUENvY29hRXZlbnRGb2N1c0NoYW5n
ZWQ7CisgICAgICAgIE5QQm9vbCBmb2N1cyA9IGZvY3VzZWQ7CisgICAgICAgIGNvY29hRXZlbnQu
ZGF0YS5mb2N1cy5oYXNGb2N1cyA9IGZvY3VzOworCisgICAgICAgIGlmKCFkaXNwYXRjaE5QQ29j
b2FFdmVudChjb2NvYUV2ZW50KSkgeworICAgICAgICAgICAgTE9HKEV2ZW50cywgIlBsdWdpblZp
ZXc6OnNldEZvY3VzKCk6IEZvY3VzIGV2ZW50ICVkIG5vdCBhY2NlcHRlZCIsIGNvY29hRXZlbnQu
dHlwZSk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50
VmlzaWJsZShib29sIHZpc2libGUpCkBAIC0zOTksOCArNDY3LDEwIEBAIHZvaWQgUGx1Z2luVmll
dzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2lu
ZG93VHlwZURyYXdhYmxlOwogICAgIH0KIAotICAgIGlmICghbmV3Q29udGV4dFJlZiB8fCAhbmV3
V2luZG93UmVmKQotICAgICAgICByZXR1cm47CisgICAgaWYgKCFuZXdDb250ZXh0UmVmIHx8ICFu
ZXdXaW5kb3dSZWYpIHsKKyAgICAgICAgaWYgKCFtX3VzZVBpeG1hcCkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICB9CiAKICAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKikmbV9ucENnQ29u
dGV4dDsKICNpZm5kZWYgTlBfTk9fQ0FSQk9OCkBAIC00NzQsMTIgKzU0NCwzMiBAQCB2b2lkIFBs
dWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogCiAKICAgICBpZiAoY29udGV4dC0+cGFp
bnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0KKyNpZiBQTEFURk9STShRVCkKKyAg
ICBRUGFpbnRlciogcCA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIENHQ29udGV4
dFJlZiBjZ0NvbnRleHQgPSBxdF9tYWNfY2dfY29udGV4dChwLT5kZXZpY2UoKSk7CisjZWxzZQor
ICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBtX25wQ2dDb250ZXh0LmNvbnRleHQ7CisjZW5k
aWYKICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CisgICAgaWYgKCFjZ0NvbnRleHQpIHsKKyAg
ICAgICAgY2dDb250ZXh0ID0gbV9jb250ZXh0UmVmOworICAgICAgICBpZiAoIWNnQ29udGV4dCkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX3VzZVBp
eG1hcCA9IHRydWU7CisgICAgICAgICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UKKyAgICAgICAgbV91c2VQaXhtYXAgPSBmYWxzZTsKIAotICAgIENHQ29u
dGV4dFJlZiBjZ0NvbnRleHQgPSBtX25wQ2dDb250ZXh0LmNvbnRleHQ7Ci0gICAgaWYgKCFjZ0Nv
bnRleHQpCi0gICAgICAgIHJldHVybjsKKyAgICBib29sIG9sZFVzZVBpeG1hcCA9IG1fdXNlUGl4
bWFwOworICAgIGlmIChtX2lzVHJhbnNwYXJlbnQgJiYgIW1fdXNlUGl4bWFwKSB7CisgICAgICAg
IGlmIChtX3BpeG1hcC5pc051bGwoKSkKKyAgICAgICAgICAgIG1fcGl4bWFwID0gUVBpeG1hcChm
cmFtZVJlY3QoKS5zaXplKCkpOworICAgICAgICBtX3VzZVBpeG1hcCA9IHRydWU7CisgICAgICAg
IHNldE5QV2luZG93SWZOZWVkZWQoKTsKKyAgICAgICAgY2dDb250ZXh0ID0gcXRfbWFjX2NnX2Nv
bnRleHQoJm1fcGl4bWFwKTsKKyAgICB9CiAKICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNnQ29u
dGV4dCk7CiAgICAgaWYgKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpIHsKQEAgLTQ5OCw3ICs1ODgs
NyBAQCB2b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogCiAgICAgci5zaXpl
LmhlaWdodCA9IHRhcmdldFJlY3QuaGVpZ2h0KCk7CiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChj
Z0NvbnRleHQsIHIpOwogCi0gICAgaWYgKCFwbGF0Zm9ybVBsdWdpbldpZGdldCgpICYmIG1faXNU
cmFuc3BhcmVudCkgeyAvLyBjbGVhbiB0aGUgcGl4bWFwIGluIHRyYW5zcGFyZW50IG1vZGUKKyAg
ICBpZiAoIXBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgfHwgbV9pc1RyYW5zcGFyZW50KSB7IC8vIGNs
ZWFuIHRoZSBwaXhtYXAgaW4gdHJhbnNwYXJlbnQgbW9kZQogI2lmIFBMQVRGT1JNKFFUKQogICAg
ICAgICBRUGFpbnRlciBwYWludGVyKCZtX3BpeG1hcCk7CiAgICAgICAgIHBhaW50ZXIuc2V0Q29t
cG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfQ2xlYXIpOwpAQCAtNTA3LDM5
ICs1OTcsNzAgQEAgdm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIAogICAg
IH0KIAogI2lmbmRlZiBOUF9OT19DQVJCT04KLSAgICBFdmVudFJlY29yZCBldmVudDsKLSAgICBl
dmVudC53aGF0ID0gdXBkYXRlRXZ0OwotICAgIGV2ZW50Lm1lc3NhZ2UgPSAobG9uZyB1bnNpZ25l
ZCBpbnQpbV9ucENnQ29udGV4dC53aW5kb3c7Ci0gICAgZXZlbnQud2hlbiA9IFRpY2tDb3VudCgp
OwotICAgIGV2ZW50LndoZXJlLmggPSAwOwotICAgIGV2ZW50LndoZXJlLnYgPSAwOwotICAgIGV2
ZW50Lm1vZGlmaWVycyA9IEdldEN1cnJlbnRLZXlNb2RpZmllcnMoKTsKLQotICAgIGlmICghZGlz
cGF0Y2hOUEV2ZW50KGV2ZW50KSkKLSAgICAgICAgTE9HKEV2ZW50cywgIlBsdWdpblZpZXc6OnBh
aW50KCk6IFBhaW50IGV2ZW50IG5vdCBhY2NlcHRlZCIpOwotI2VuZGlmCi0KLSAgICBDR0NvbnRl
eHRSZXN0b3JlR1N0YXRlKGNnQ29udGV4dCk7Ci0KLSAgICBpZiAoIXBsYXRmb3JtUGx1Z2luV2lk
Z2V0KCkpIHsKKyAgICBpZiAobV9ldmVudE1vZGVsICE9IE5QRXZlbnRNb2RlbENvY29hKSB7Cisg
ICAgICAgIEV2ZW50UmVjb3JkIGV2ZW50OworICAgICAgICBldmVudC53aGF0ID0gdXBkYXRlRXZ0
OworICAgICAgICBldmVudC5tZXNzYWdlID0gKGxvbmcgdW5zaWduZWQgaW50KW1fbnBDZ0NvbnRl
eHQud2luZG93OworICAgICAgICBldmVudC53aGVuID0gVGlja0NvdW50KCk7CisgICAgICAgIGV2
ZW50LndoZXJlLmggPSAwOworICAgICAgICBldmVudC53aGVyZS52ID0gMDsKKyAgICAgICAgZXZl
bnQubW9kaWZpZXJzID0gR2V0Q3VycmVudEtleU1vZGlmaWVycygpOworCisgICAgICAgIGlmICgh
ZGlzcGF0Y2hOUEV2ZW50KGV2ZW50KSkKKyAgICAgICAgICAgIExPRyhFdmVudHMsICJQbHVnaW5W
aWV3OjpwYWludCgpOiBQYWludCBldmVudCBub3QgYWNjZXB0ZWQiKTsKKyAgICB9IGVsc2UKKyNl
bmRpZgorICAgIHsKKyAgICAgICAgTlBDb2NvYUV2ZW50IGNvY29hRXZlbnQ7CisgICAgICAgIGlu
aXRpYWxpemVOUENvY29hRXZlbnQoJmNvY29hRXZlbnQpOworICAgICAgICBjb2NvYUV2ZW50LnR5
cGUgPSBOUENvY29hRXZlbnREcmF3UmVjdDsKKyAgICAgICAgY29jb2FFdmVudC5kYXRhLmRyYXcu
eCA9IG1fdXNlUGl4bWFwID8gMCA6IHIub3JpZ2luLng7CisgICAgICAgIGNvY29hRXZlbnQuZGF0
YS5kcmF3LnkgPSBtX3VzZVBpeG1hcCA/IDAgOiByLm9yaWdpbi55OworICAgICAgICBjb2NvYUV2
ZW50LmRhdGEuZHJhdy53aWR0aCA9IG1fdXNlUGl4bWFwID8gbV9waXhtYXAud2lkdGgoKSA6IHIu
c2l6ZS53aWR0aDsKKyAgICAgICAgY29jb2FFdmVudC5kYXRhLmRyYXcuaGVpZ2h0ID0gbV91c2VQ
aXhtYXAgPyBtX3BpeG1hcC5oZWlnaHQoKSA6IHIuc2l6ZS5oZWlnaHQ7CisgICAgICAgIGNvY29h
RXZlbnQuZGF0YS5kcmF3LmNvbnRleHQgPSBjZ0NvbnRleHQ7CisgICAgICAgIAorICAgICAgICBp
ZighZGlzcGF0Y2hOUENvY29hRXZlbnQoY29jb2FFdmVudCkpCisgICAgICAgICAgICBMT0coRXZl
bnRzLCAiUGx1Z2luVmlldzo6cGFpbnQoKTogUGFpbnQgZXZlbnQgdHlwZSAlZCBub3QgYWNjZXB0
ZWQiLCBjb2NvYUV2ZW50LnR5cGUpOworICAgIH0KKyAgICAKKyAgICBpZiAoIXBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCkgfHwgbV9pc1RyYW5zcGFyZW50KSB7CiAjaWYgUExBVEZPUk0oUVQpCiAgICAg
ICAgIFFQYWludGVyKiBwYWludGVyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAg
ICAgIHBhaW50ZXItPmRyYXdQaXhtYXAodGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCBt
X3BpeG1hcCwgCisgICAgICAgIHBhaW50ZXItPmRyYXdQaXhtYXAodGFyZ2V0UmVjdC54KCksIHRh
cmdldFJlY3QueSgpLCBtX3BpeG1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJn
ZXRSZWN0LngoKSAtIGZyYW1lUmVjdCgpLngoKSwgdGFyZ2V0UmVjdC55KCkgLSBmcmFtZVJlY3Qo
KS55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSk7CiAjZW5kaWYK
ICAgICB9CisgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjZ0NvbnRleHQpOworICAgIGlmIChv
bGRVc2VQaXhtYXAgIT0gbV91c2VQaXhtYXApIHsKKyAgICAgICAgbV91c2VQaXhtYXAgPSBvbGRV
c2VQaXhtYXA7CisgICAgICAgIG1fcGl4bWFwID0gUVBpeG1hcCgpOworICAgIH0gICAgCit9CisK
K2Jvb2wgUGx1Z2luVmlldzo6cG9wVXBDb250ZXh0TWVudShOUE1lbnUgKm1lbnUpCit7CisgICAg
TlNFdmVudCogY3VycmVudEV2ZW50ID0gW05TQXBwIGN1cnJlbnRFdmVudF07CisgICAgCisgICAg
Ly8gTlBOX1BvcFVwQ29udGV4dE1lbnUgbXVzdCBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIHBs
dWctaW4ncyBOUFBfSGFuZGxlRXZlbnQuCisgICAgaWYgKCFjdXJyZW50RXZlbnQpCisgICAgICAg
IHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgIAorICAgIE5TV2luZG93KiB3aW5kb3cg
PSBbY3VycmVudEV2ZW50IHdpbmRvd107CisgICAgTlNWaWV3KiB2aWV3ID0gW3dpbmRvdyBjb250
ZW50Vmlld107CisgICAgW05TTWVudSBwb3BVcENvbnRleHRNZW51OihOU01lbnUqKW1lbnUgd2l0
aEV2ZW50OmN1cnJlbnRFdmVudCBmb3JWaWV3OnZpZXddOworICAgIHJldHVybiB0cnVlOwogfQot
CisgICAgCiB2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJl
Y3QpCiB7Ci0gICAgaWYgKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCisgICAgaWYgKHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCkgJiYgbV9pc1RyYW5zcGFyZW50KQogI2lmIFBMQVRGT1JNKFFUKQogICAg
ICAgICBzdGF0aWNfY2FzdDxRV2lkZ2V0Kj4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnVwZGF0
ZShjb252ZXJ0VG9Db250YWluaW5nV2luZG93KHJlY3QpKTsKICNlbHNlCiAgICAgICAgIHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCktPlJlZnJlc2hSZWN0KGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3co
cmVjdCkpOwogI2VuZGlmCi0gICAgZWxzZQotICAgICAgICBpbnZhbGlkYXRlV2luZG93bGVzc1Bs
dWdpblJlY3QocmVjdCk7CisgICAgaW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KHJlY3Qp
OwogfQogCiB2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKQEAg
LTU2MSwxMjkgKzY4MiwyOTcgQEAgdm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpCiAKIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0gRXZlbnQgaGFuZGxpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0K
K3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlV2hlZWxFdmVudChXaGVlbEV2ZW50ICpldmVudCkKK3sK
KyAgICBpZiAoIW1faXNTdGFydGVkIHx8IG1fZXZlbnRNb2RlbCAhPSBOUEV2ZW50TW9kZWxDb2Nv
YSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIE5QQ29jb2FFdmVudCBjb2NvYUV2ZW50Owor
ICAgIGluaXRpYWxpemVOUENvY29hRXZlbnQoJmNvY29hRXZlbnQpOworICAgIAorICAgIE5TRXZl
bnQgKmN1cnJlbnRFdmVudCA9IFtOU0FwcCBjdXJyZW50RXZlbnRdOworICAgIAorICAgIGNvY29h
RXZlbnQudHlwZSA9IE5QQ29jb2FFdmVudFNjcm9sbFdoZWVsOworICAgIAorICAgIGNvY29hRXZl
bnQuZGF0YS5tb3VzZS5wbHVnaW5YID0gZXZlbnQtPmxheWVyWCgpIC0gbV9ucFdpbmRvdy54ICsg
bV93aW5kb3dSZWN0LngoKSAtIG1fZWxlbWVudC0+b2Zmc2V0TGVmdCgpOworICAgIGNvY29hRXZl
bnQuZGF0YS5tb3VzZS5wbHVnaW5ZID0gZXZlbnQtPmxheWVyWSgpIC0gbV9ucFdpbmRvdy55ICsg
bV93aW5kb3dSZWN0LnkoKSAtIG1fZWxlbWVudC0+b2Zmc2V0VG9wKCk7CisgICAgY29jb2FFdmVu
dC5kYXRhLm1vdXNlLmRlbHRhWCA9IFtjdXJyZW50RXZlbnQgZGVsdGFYXTsKKyAgICBjb2NvYUV2
ZW50LmRhdGEubW91c2UuZGVsdGFZID0gW2N1cnJlbnRFdmVudCBkZWx0YVldOworICAgIGNvY29h
RXZlbnQuZGF0YS5tb3VzZS5kZWx0YVogPSBbY3VycmVudEV2ZW50IGRlbHRhWl07CisgICAgY29j
b2FFdmVudC5kYXRhLm1vdXNlLm1vZGlmaWVyRmxhZ3MgPSBnZXRNb2RpZmllcnMoZXZlbnQpOwor
ICAgIAorICAgIGlmKCFkaXNwYXRjaE5QQ29jb2FFdmVudChjb2NvYUV2ZW50KSkgeworICAgICAg
ICBMT0coRXZlbnRzLCAiUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCgpOiBXaGVlbCBldmVu
dCB0eXBlICVkIGF0ICVkLCVkIG5vdCBhY2NlcHRlZCIsIGNvY29hRXZlbnQudHlwZQorICAgICAg
ICAgICAgY29jb2FFdmVudC5kYXRhLm1vdXNlLngsIGNvY29hRXZlbnQuZGF0YS5tb3VzZS55KTsK
KyAgICB9CisgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cit9CiAKIHZvaWQgUGx1Z2lu
Vmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKIHsKICAgICBpZiAoIW1f
aXNTdGFydGVkKQogICAgICAgICByZXR1cm47Ci0KKyAgICAKICNpZm5kZWYgTlBfTk9fQ0FSQk9O
Ci0gICAgRXZlbnRSZWNvcmQgcmVjb3JkOwotCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KSB7Ci0gICAgICAgIC8vIE1vdXNlIG1vdmVtZW50IGlz
IGhhbmRsZWQgYnkgbnVsbCB0aW1lciBldmVudHMKLSAgICAgICAgbV9sYXN0TW91c2VQb3MgPSBt
b3VzZVBvc0ZvclBsdWdpbihldmVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYg
KGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7Ci0gICAgICAg
IHJlY29yZC53aGF0ID0gTlBFdmVudFR5cGVfQWRqdXN0Q3Vyc29yRXZlbnQ7Ci0gICAgfSBlbHNl
IGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KSB7Ci0gICAg
ICAgIHJlY29yZC53aGF0ID0gTlBFdmVudFR5cGVfQWRqdXN0Q3Vyc29yRXZlbnQ7Ci0gICAgfSBl
bHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgewot
ICAgICAgICByZWNvcmQud2hhdCA9IG1vdXNlRG93bjsKLSAgICAgICAgLy8gVGhlIHBsdWdpbiBu
ZWVkcyBmb2N1cyB0byByZWNlaXZlIGtleWJvYXJkIGV2ZW50cwotICAgICAgICBpZiAoUGFnZSog
cGFnZSA9IG1fcGFyZW50RnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAgIHBhZ2UtPmZvY3VzQ29u
dHJvbGxlcigpLT5zZXRGb2N1c2VkRnJhbWUobV9wYXJlbnRGcmFtZSk7Ci0gICAgICAgIG1fcGFy
ZW50RnJhbWUtPmRvY3VtZW50KCktPnNldEZvY3VzZWROb2RlKG1fZWxlbWVudCk7Ci0gICAgfSBl
bHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpIHsKLSAg
ICAgICAgcmVjb3JkLndoYXQgPSBtb3VzZVVwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgcmVjb3JkLndoZXJlID0gbW91c2VQb3NGb3JQbHVnaW4oZXZlbnQpOwot
ICAgIHJlY29yZC5tb2RpZmllcnMgPSBtb2RpZmllcnNGb3JFdmVudChldmVudCk7Ci0KLSAgICBp
ZiAoIWV2ZW50LT5idXR0b25Eb3duKCkpCi0gICAgICAgIHJlY29yZC5tb2RpZmllcnMgfD0gYnRu
U3RhdGU7Ci0KLSAgICBpZiAoZXZlbnQtPmJ1dHRvbigpID09IDIpCi0gICAgICAgIHJlY29yZC5t
b2RpZmllcnMgfD0gY29udHJvbEtleTsKLQotICAgIGlmICghZGlzcGF0Y2hOUEV2ZW50KHJlY29y
ZCkpIHsKLSAgICAgICAgaWYgKHJlY29yZC53aGF0ID09IE5QRXZlbnRUeXBlX0FkanVzdEN1cnNv
ckV2ZW50KQotICAgICAgICAgICAgcmV0dXJuOyAvLyBTaWduYWxzIHRoYXQgdGhlIHBsdWdpbiB3
YW50cyBhIG5vcm1hbCBjdXJzb3IKLQotICAgICAgICBMT0coRXZlbnRzLCAiUGx1Z2luVmlldzo6
aGFuZGxlTW91c2VFdmVudCgpOiBNb3VzZSBldmVudCB0eXBlICVkIGF0ICVkLCVkIG5vdCBhY2Nl
cHRlZCIsCisgICAgaWYgKG1fZXZlbnRNb2RlbCAhPSBOUEV2ZW50TW9kZWxDb2NvYSkgeworICAg
ICAgICBFdmVudFJlY29yZCByZWNvcmQ7CisgICAgICAgIAorICAgICAgICBpZiAoZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpIHsKKyAgICAgICAgICAgIC8vIE1v
dXNlIG1vdmVtZW50IGlzIGhhbmRsZWQgYnkgbnVsbCB0aW1lciBldmVudHMKKyAgICAgICAgICAg
IG1fbGFzdE1vdXNlUG9zID0gbW91c2VQb3NGb3JQbHVnaW4oZXZlbnQpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
Lm1vdXNlb3ZlckV2ZW50KSB7CisgICAgICAgICAgICByZWNvcmQud2hhdCA9IE5QRXZlbnRUeXBl
X0FkanVzdEN1cnNvckV2ZW50OworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQpIHsKKyAgICAgICAgICAgIHJlY29yZC53aGF0ID0g
TlBFdmVudFR5cGVfQWRqdXN0Q3Vyc29yRXZlbnQ7CisgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpIHsKKyAgICAgICAgICAgIHJl
Y29yZC53aGF0ID0gbW91c2VEb3duOworICAgICAgICAgICAgLy8gVGhlIHBsdWdpbiBuZWVkcyBm
b2N1cyB0byByZWNlaXZlIGtleWJvYXJkIGV2ZW50cworICAgICAgICAgICAgaWYgKFBhZ2UqIHBh
Z2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICAgICAgcGFnZS0+Zm9jdXND
b250cm9sbGVyKCktPnNldEZvY3VzZWRGcmFtZShtX3BhcmVudEZyYW1lKTsKKyAgICAgICAgICAg
IG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNldEZvY3VzZWROb2RlKG1fZWxlbWVudCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2
ZW50KSB7CisgICAgICAgICAgICByZWNvcmQud2hhdCA9IG1vdXNlVXA7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcmVjb3JkLndoZXJl
ID0gbW91c2VQb3NGb3JQbHVnaW4oZXZlbnQpOworICAgICAgICByZWNvcmQubW9kaWZpZXJzID0g
bW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQpOworICAgICAgICAKKyAgICAgICAgaWYgKCFldmVudC0+
YnV0dG9uRG93bigpKQorICAgICAgICAgICAgcmVjb3JkLm1vZGlmaWVycyB8PSBidG5TdGF0ZTsK
KyAgICAgICAgCisgICAgICAgIGlmIChldmVudC0+YnV0dG9uKCkgPT0gMikKKyAgICAgICAgICAg
IHJlY29yZC5tb2RpZmllcnMgfD0gY29udHJvbEtleTsKKyAgICAgICAgCisgICAgICAgIGlmICgh
ZGlzcGF0Y2hOUEV2ZW50KHJlY29yZCkpIHsKKyAgICAgICAgICAgIGlmIChyZWNvcmQud2hhdCA9
PSBOUEV2ZW50VHlwZV9BZGp1c3RDdXJzb3JFdmVudCkKKyAgICAgICAgICAgICAgICByZXR1cm47
IC8vIFNpZ25hbHMgdGhhdCB0aGUgcGx1Z2luIHdhbnRzIGEgbm9ybWFsIGN1cnNvcgorICAgICAg
ICAgICAgCisgICAgICAgICAgICBMT0coRXZlbnRzLCAiUGx1Z2luVmlldzo6aGFuZGxlTW91c2VF
dmVudCgpOiBNb3VzZSBldmVudCB0eXBlICVkIGF0ICVkLCVkIG5vdCBhY2NlcHRlZCIsCiAgICAg
ICAgICAgICAgICAgcmVjb3JkLndoYXQsIHJlY29yZC53aGVyZS5oLCByZWNvcmQud2hlcmUudik7
Ci0gICAgfSBlbHNlIHsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGV2ZW50LT5zZXRE
ZWZhdWx0SGFuZGxlZCgpOworICAgICAgICB9CisgICAgfSBlbHNlCisjZW5kaWYKKyAgICB7Cisg
ICAgICAgIE5QQ29jb2FFdmVudFR5cGUgZXZlbnRUeXBlOworICAgICAgICBpbnQzMl90IGJ1dHRv
bk51bWJlciA9IDA7CisgICAgICAgIGludDMyX3QgY2xpY2tDb3VudCA9IDA7CisgICAgICAgIE5T
RXZlbnQgKmN1cnJlbnRFdmVudCA9IFtOU0FwcCBjdXJyZW50RXZlbnRdOworICAgICAgICAKKyAg
ICAgICAgTlNFdmVudFR5cGUgdHlwZSA9IFtjdXJyZW50RXZlbnQgdHlwZV07CisgICAgICAgIAor
ICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgTlNMZWZ0TW91c2VEb3du
OgorICAgICAgICAgICAgY2FzZSBOU1JpZ2h0TW91c2VEb3duOgorICAgICAgICAgICAgY2FzZSBO
U090aGVyTW91c2VEb3duOgorICAgICAgICAgICAgICAgIGJ1dHRvbk51bWJlciA9IFtjdXJyZW50
RXZlbnQgYnV0dG9uTnVtYmVyXTsKKyAgICAgICAgICAgICAgICBjbGlja0NvdW50ID0gW2N1cnJl
bnRFdmVudCBjbGlja0NvdW50XTsKKyAgICAgICAgICAgICAgICBldmVudFR5cGUgPSBOUENvY29h
RXZlbnRNb3VzZURvd247CisgICAgICAgICAgICAgICAgLy8gVGhlIHBsdWdpbiBuZWVkcyBmb2N1
cyB0byByZWNlaXZlIGtleWJvYXJkIGV2ZW50cworICAgICAgICAgICAgICAgIGlmIChQYWdlKiBw
YWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQorICAgICAgICAgICAgICAgICAgICBwYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZEZyYW1lKG1fcGFyZW50RnJhbWUpOworICAgICAg
ICAgICAgICAgIG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNldEZvY3VzZWROb2RlKG1fZWxl
bWVudCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICBjYXNlIE5TTGVmdE1vdXNlVXA6CisgICAgICAgICAgICBjYXNlIE5TUmlnaHRNb3VzZVVw
OgorICAgICAgICAgICAgY2FzZSBOU090aGVyTW91c2VVcDoKKyAgICAgICAgICAgICAgICBidXR0
b25OdW1iZXIgPSBbY3VycmVudEV2ZW50IGJ1dHRvbk51bWJlcl07CisgICAgICAgICAgICAgICAg
Y2xpY2tDb3VudCA9IFtjdXJyZW50RXZlbnQgY2xpY2tDb3VudF07CisgICAgICAgICAgICAgICAg
ZXZlbnRUeXBlID0gTlBDb2NvYUV2ZW50TW91c2VVcDsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTlNNb3VzZU1vdmVkOgorICAgICAg
ICAgICAgICAgIGV2ZW50VHlwZSA9IE5QQ29jb2FFdmVudE1vdXNlTW92ZWQ7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIE5TTGVmdE1v
dXNlRHJhZ2dlZDoKKyAgICAgICAgICAgIGNhc2UgTlNSaWdodE1vdXNlRHJhZ2dlZDoKKyAgICAg
ICAgICAgIGNhc2UgTlNPdGhlck1vdXNlRHJhZ2dlZDoKKyAgICAgICAgICAgICAgICBidXR0b25O
dW1iZXIgPSBbY3VycmVudEV2ZW50IGJ1dHRvbk51bWJlcl07CisgICAgICAgICAgICAgICAgZXZl
bnRUeXBlID0gTlBDb2NvYUV2ZW50TW91c2VEcmFnZ2VkOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBOU01vdXNlRW50ZXJlZDoKKyAg
ICAgICAgICAgICAgICBldmVudFR5cGUgPSBOUENvY29hRXZlbnRNb3VzZUVudGVyZWQ7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIE5T
TW91c2VFeGl0ZWQ6CisgICAgICAgICAgICAgICAgZXZlbnRUeXBlID0gTlBDb2NvYUV2ZW50TW91
c2VFeGl0ZWQ7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTlBDb2NvYUV2ZW50IGNvY29hRXZlbnQ7Cisg
ICAgICAgIGluaXRpYWxpemVOUENvY29hRXZlbnQoJmNvY29hRXZlbnQpOworICAgICAgICAKKyAg
ICAgICAgY29jb2FFdmVudC50eXBlID0gZXZlbnRUeXBlOworICAgICAgICBpZiAoIShOUENvY29h
RXZlbnRNb3VzZUVudGVyZWQgPT0gZXZlbnRUeXBlIHx8IE5QQ29jb2FFdmVudE1vdXNlRXhpdGVk
ID09IGV2ZW50VHlwZSkpIHsKKyAgICAgICAgICAgIGNvY29hRXZlbnQuZGF0YS5tb3VzZS5idXR0
b25OdW1iZXIgPSBidXR0b25OdW1iZXI7CisgICAgICAgICAgICBjb2NvYUV2ZW50LmRhdGEubW91
c2UuY2xpY2tDb3VudCA9IGNsaWNrQ291bnQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGNvY29hRXZlbnQuZGF0YS5tb3VzZS5wbHVnaW5YID0gZXZlbnQtPmxheWVyWCgpIC0gbV9ucFdp
bmRvdy54ICsgbV93aW5kb3dSZWN0LngoKSAtIG1fZWxlbWVudC0+b2Zmc2V0TGVmdCgpOworICAg
ICAgICBjb2NvYUV2ZW50LmRhdGEubW91c2UucGx1Z2luWSA9IGV2ZW50LT5sYXllclkoKSAtIG1f
bnBXaW5kb3cueSArIG1fd2luZG93UmVjdC55KCkgLSBtX2VsZW1lbnQtPm9mZnNldFRvcCgpOwor
ICAgICAgICBjb2NvYUV2ZW50LmRhdGEubW91c2UuZGVsdGFYID0gW2N1cnJlbnRFdmVudCBkZWx0
YVhdOworICAgICAgICBjb2NvYUV2ZW50LmRhdGEubW91c2UuZGVsdGFZID0gW2N1cnJlbnRFdmVu
dCBkZWx0YVldOworICAgICAgICBjb2NvYUV2ZW50LmRhdGEubW91c2UuZGVsdGFaID0gW2N1cnJl
bnRFdmVudCBkZWx0YVpdOworICAgICAgICBjb2NvYUV2ZW50LmRhdGEubW91c2UubW9kaWZpZXJG
bGFncyA9IGdldE1vZGlmaWVycyhldmVudCk7CisgICAgICAgIAorICAgICAgICBpbnQxNl90IHJl
c3BvbnNlID0gZGlzcGF0Y2hOUENvY29hRXZlbnQoY29jb2FFdmVudCk7CisgICAgICAgIGlmKHJl
c3BvbnNlID0ga05QRXZlbnROb3RIYW5kbGVkKSB7CisgICAgICAgICAgICBMT0coRXZlbnRzLCAi
UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCgpOiBNb3VzZSBldmVudCB0eXBlICVkIGF0ICVk
LCVkIG5vdCBhY2NlcHRlZCIsIGNvY29hRXZlbnQudHlwZQorICAgICAgICAgICAgICAgIGNvY29h
RXZlbnQuZGF0YS5tb3VzZS54LCBjb2NvYUV2ZW50LmRhdGEubW91c2UueSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIC8vIFNhZmFyaSBwb2xpY3kgaXMgdG8gcmV0dXJuIHRydWUgZm9y
IGFsbCBtb3VzZSBldmVudHMsIGJlY2F1c2Ugc29tZSBwbHVnaW5zCisgICAgICAgIC8vIHJldHVy
biBmYWxzZSBldmVuIGlmIHRoZXkgaGF2ZSBoYW5kbGVkIHRoZSBldmVudC4KICAgICAgICAgZXZl
bnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgfQotI2VuZGlmCiB9Ci0KKyAgICAKIHZvaWQg
UGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKIHsK
ICAgICBpZiAoIW1faXNTdGFydGVkKQogICAgICAgICByZXR1cm47Ci0KICAgICBMT0coUGx1Z2lu
cywgIlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoKSAtLS0tLS0tLS0tLS0tLS0tLSAi
KTsKLQorICAgIAogICAgIExPRyhQbHVnaW5zLCAiUFY6OmhLRSgpOiBLRS5rZXlDb2RlOiAweCUw
MlgsIEtFLmNoYXJDb2RlOiAlZCIsCi0gICAgICAgICAgICBldmVudC0+a2V5Q29kZSgpLCBldmVu
dC0+Y2hhckNvZGUoKSk7Ci0KKyAgICAgICAgZXZlbnQtPmtleUNvZGUoKSwgZXZlbnQtPmNoYXJD
b2RlKCkpOworICAgIAogI2lmbmRlZiBOUF9OT19DQVJCT04KLSAgICBFdmVudFJlY29yZCByZWNv
cmQ7Ci0KLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50
KSB7Ci0gICAgICAgIC8vIFRoaXMgZXZlbnQgaXMgdGhlIHJlc3VsdCBvZiBhIFBsYXRmb3JtRXZl
bnQ6OktleURvd24gd2hpY2gKLSAgICAgICAgLy8gd2FzIGRpc2FtYmlndWF0ZWQgaW50byBhIFBs
YXRmb3JtS2V5Ym9hcmRFdmVudDo6UmF3S2V5RG93bi4gU2luY2UKLSAgICAgICAgLy8gd2UgZG9u
J3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHRleHQgaGVyZSwgd2UgcmV0dXJuLCBhbmQgd2FpdCBmb3Ig
dGhlCi0gICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgZXZlbnQgYmFzZWQgb24gUGxhdGZvcm1LZXli
b2FyZEV2ZW50OjpDaGFyLgotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7Ci0gICAgICAgIC8vIFdoaWNo
IHdvdWxkIGJlIHRoaXMgb25lLiBUaGlzIGV2ZW50IHdhcyBkaXNhbWJpZ3VhdGVkIGZyb20gdGhl
IHNhbWUKLSAgICAgICAgLy8gUGxhdGZvcm1FdmVudDo6S2V5RG93biwgYnV0IHRvIGEgUGxhdGZv
cm1FdmVudDo6Q2hhciwKLSAgICAgICAgLy8gd2hpY2ggcmV0YWlucyB0aGUgdGV4dCBmcm9tIHRo
ZSBvcmlnaW5hbCBldmVudC4gU28sIHdlIGNhbiBzYWZlbHkgcGFzcwotICAgICAgICAvLyBvbiB0
aGUgZXZlbnQgYXMgYSBrZXktZG93biBldmVudCB0byB0aGUgcGx1Z2luLgotICAgICAgICByZWNv
cmQud2hhdCA9IGtleURvd247Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5rZXl1cEV2ZW50KSB7Ci0gICAgICAgIC8vIFBsYXRmb3JtRXZlbnQ6OktleVVwIGV2
ZW50cyBhbHdheXMgaGF2ZSB0aGUgdGV4dCwgc28gbm90aGluZwotICAgICAgICAvLyBmYW5jeSBo
ZXJlLgotICAgICAgICByZWNvcmQud2hhdCA9IGtleVVwOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIHBsYXRm
b3JtRXZlbnQgPSBldmVudC0+a2V5RXZlbnQoKTsKLSAgICBpbnQga2V5Q29kZSA9IHBsYXRmb3Jt
RXZlbnQtPm5hdGl2ZVZpcnR1YWxLZXlDb2RlKCk7Ci0KLSAgICBjb25zdCBTdHJpbmcgdGV4dCA9
IHBsYXRmb3JtRXZlbnQtPnRleHQoKTsKLSAgICBpZiAodGV4dC5sZW5ndGgoKSA8IDEpIHsKLSAg
ICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBXVEY6OlJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZUZXh0KFdURjo6QWRvcHRDRiwg
dGV4dC5jcmVhdGVDRlN0cmluZygpKTsKLQotICAgIExPRyhQbHVnaW5zLCAiUFY6OmhLRSgpOiBQ
S0UudGV4dDogJXMsIFBLRS51bm1vZGlmaWVkVGV4dDogJXMsIFBLRS5rZXlJZGVudGlmaWVyOiAl
cyIsCisgICAgaWYgKG1fZXZlbnRNb2RlbCAhPSBOUEV2ZW50TW9kZWxDb2NvYSkgeworICAgICAg
ICBFdmVudFJlY29yZCByZWNvcmQ7CisgICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgZXZlbnQgaXMgdGhl
IHJlc3VsdCBvZiBhIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6S2V5RG93biB3aGljaAorICAgICAg
ICAgICAgLy8gd2FzIGRpc2FtYmlndWF0ZWQgaW50byBhIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6
UmF3S2V5RG93bi4gU2luY2UKKyAgICAgICAgICAgIC8vIHdlIGRvbid0IGhhdmUgYWNjZXNzIHRv
IHRoZSB0ZXh0IGhlcmUsIHdlIHJldHVybiwgYW5kIHdhaXQgZm9yIHRoZQorICAgICAgICAgICAg
Ly8gY29ycmVzcG9uZGluZyBldmVudCBiYXNlZCBvbiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkNo
YXIuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCkgeworICAgICAgICAgICAgLy8gV2hpY2gg
d291bGQgYmUgdGhpcyBvbmUuIFRoaXMgZXZlbnQgd2FzIGRpc2FtYmlndWF0ZWQgZnJvbSB0aGUg
c2FtZQorICAgICAgICAgICAgLy8gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpLZXlEb3duLCBidXQg
dG8gYSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkNoYXIsCisgICAgICAgICAgICAvLyB3aGljaCBy
ZXRhaW5zIHRoZSB0ZXh0IGZyb20gdGhlIG9yaWdpbmFsIGV2ZW50LiBTbywgd2UgY2FuIHNhZmVs
eSBwYXNzCisgICAgICAgICAgICAvLyBvbiB0aGUgZXZlbnQgYXMgYSBrZXktZG93biBldmVudCB0
byB0aGUgcGx1Z2luLgorICAgICAgICAgICAgcmVjb3JkLndoYXQgPSBrZXlEb3duOworICAgICAg
ICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXVwRXZlbnQpIHsK
KyAgICAgICAgICAgIC8vIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6S2V5VXAgZXZlbnRzIGFsd2F5
cyBoYXZlIHRoZSB0ZXh0LCBzbyBub3RoaW5nCisgICAgICAgICAgICAvLyBmYW5jeSBoZXJlLgor
ICAgICAgICAgICAgcmVjb3JkLndoYXQgPSBrZXlVcDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY29uc3QgUGxhdGZv
cm1LZXlib2FyZEV2ZW50KiBwbGF0Zm9ybUV2ZW50ID0gZXZlbnQtPmtleUV2ZW50KCk7CisgICAg
ICAgIGludCBrZXlDb2RlID0gcGxhdGZvcm1FdmVudC0+bmF0aXZlVmlydHVhbEtleUNvZGUoKTsK
KyAgICAgICAgCisgICAgICAgIGNvbnN0IFN0cmluZyB0ZXh0ID0gcGxhdGZvcm1FdmVudC0+dGV4
dCgpOworICAgICAgICBpZiAodGV4dC5sZW5ndGgoKSA8IDEpIHsKKyAgICAgICAgICAgIGV2ZW50
LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBXVEY6OlJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZUZXh0KFdURjo6
QWRvcHRDRiwgdGV4dC5jcmVhdGVDRlN0cmluZygpKTsKKyAgICAgICAgCisgICAgICAgIExPRyhQ
bHVnaW5zLCAiUFY6OmhLRSgpOiBQS0UudGV4dDogJXMsIFBLRS51bm1vZGlmaWVkVGV4dDogJXMs
IFBLRS5rZXlJZGVudGlmaWVyOiAlcyIsCiAgICAgICAgICAgICB0ZXh0LmFzY2lpKCkuZGF0YSgp
LCBwbGF0Zm9ybUV2ZW50LT51bm1vZGlmaWVkVGV4dCgpLmFzY2lpKCkuZGF0YSgpLAogICAgICAg
ICAgICAgcGxhdGZvcm1FdmVudC0+a2V5SWRlbnRpZmllcigpLmFzY2lpKCkuZGF0YSgpKTsKLQot
ICAgIGNoYXIgY2hhckNvZGVzWzJdID0geyAwLCAwIH07Ci0gICAgaWYgKCFDRlN0cmluZ0dldENT
dHJpbmcoY2ZUZXh0LmdldCgpLCBjaGFyQ29kZXMsIDIsIENGU3RyaW5nR2V0U3lzdGVtRW5jb2Rp
bmcoKSkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcmVzb2x2ZSBjaGFyYWN0ZXIg
Y29kZSB1c2luZyBzeXN0ZW0gZW5jb2RpbmcuIik7Ci0gICAgICAgIGV2ZW50LT5zZXREZWZhdWx0
SGFuZGxlZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVjb3JkLndoZXJlID0g
Z2xvYmFsTW91c2VQb3NGb3JQbHVnaW4oKTsKLSAgICByZWNvcmQubW9kaWZpZXJzID0gbW9kaWZp
ZXJzRm9yRXZlbnQoZXZlbnQpOwotICAgIHJlY29yZC5tZXNzYWdlID0gKChrZXlDb2RlICYgMHhG
RikgPDwgOCkgfCAoY2hhckNvZGVzWzBdICYgMHhGRik7Ci0gICAgcmVjb3JkLndoZW4gPSBUaWNr
Q291bnQoKTsKLQotICAgIExPRyhQbHVnaW5zLCAiUFY6OmhLRSgpOiByZWNvcmQubW9kaWZpZXJz
OiAlZCIsIHJlY29yZC5tb2RpZmllcnMpOwotCisgICAgICAgIAorICAgICAgICBjaGFyIGNoYXJD
b2Rlc1syXSA9IHsgMCwgMCB9OworICAgICAgICBpZiAoIUNGU3RyaW5nR2V0Q1N0cmluZyhjZlRl
eHQuZ2V0KCksIGNoYXJDb2RlcywgMiwgQ0ZTdHJpbmdHZXRTeXN0ZW1FbmNvZGluZygpKSkgewor
ICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcmVzb2x2ZSBjaGFyYWN0ZXIgY29kZSB1
c2luZyBzeXN0ZW0gZW5jb2RpbmcuIik7CisgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhh
bmRsZWQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgcmVjb3JkLndoZXJlID0gZ2xvYmFsTW91c2VQb3NGb3JQbHVnaW4oKTsKKyAgICAgICAgcmVj
b3JkLm1vZGlmaWVycyA9IG1vZGlmaWVyc0ZvckV2ZW50KGV2ZW50KTsKKyAgICAgICAgcmVjb3Jk
Lm1lc3NhZ2UgPSAoKGtleUNvZGUgJiAweEZGKSA8PCA4KSB8IChjaGFyQ29kZXNbMF0gJiAweEZG
KTsKKyAgICAgICAgcmVjb3JkLndoZW4gPSBUaWNrQ291bnQoKTsKKyAgICAgICAgCisgICAgICAg
IExPRyhQbHVnaW5zLCAiUFY6OmhLRSgpOiByZWNvcmQubW9kaWZpZXJzOiAlZCIsIHJlY29yZC5t
b2RpZmllcnMpOworICAgICAgICAKICNpZiBQTEFURk9STShRVCkKLSAgICBMT0coUGx1Z2lucywg
IlBWOjpoS0UoKTogUEtFLnF0RXZlbnQoKS0+bmF0aXZlVmlydHVhbEtleTogMHglMDJYLCBjaGFy
Q29kZTogJWQiLAotICAgICAgICAgICAgICAga2V5Q29kZSwgaW50KHVjaGFyKGNoYXJDb2Rlc1sw
XSkpKTsKLSNlbmRpZgotCi0gICAgaWYgKCFkaXNwYXRjaE5QRXZlbnQocmVjb3JkKSkKLSAgICAg
ICAgTE9HKEV2ZW50cywgIlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoKTogS2V5Ym9h
cmQgZXZlbnQgdHlwZSAlZCBub3QgYWNjZXB0ZWQiLCByZWNvcmQud2hhdCk7Ci0gICAgZWxzZQot
ICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgTE9HKFBsdWdpbnMs
ICJQVjo6aEtFKCk6IFBLRS5xdEV2ZW50KCktPm5hdGl2ZVZpcnR1YWxLZXk6IDB4JTAyWCwgY2hh
ckNvZGU6ICVkIiwKKyAgICAgICAgICAgIGtleUNvZGUsIGludCh1Y2hhcihjaGFyQ29kZXNbMF0p
KSk7CiAjZW5kaWYKKyAgICAgICAgCisgICAgICAgIGlmICghZGlzcGF0Y2hOUEV2ZW50KHJlY29y
ZCkpCisgICAgICAgICAgICBMT0coRXZlbnRzLCAiUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRF
dmVudCgpOiBLZXlib2FyZCBldmVudCB0eXBlICVkIG5vdCBhY2NlcHRlZCIsIHJlY29yZC53aGF0
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7
CisgICAgfSBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIE5TRXZlbnQgKmN1cnJlbnRFdmVu
dCA9IFtOU0FwcCBjdXJyZW50RXZlbnRdOworICAgICAgICBOUENvY29hRXZlbnRUeXBlIGV2ZW50
VHlwZTsKKyAgICAgICAgTlNFdmVudFR5cGUgdHlwZSA9IFtjdXJyZW50RXZlbnQgdHlwZV07Cisg
ICAgICAgIAorICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgTlNLZXlE
b3duOgorICAgICAgICAgICAgICAgIGV2ZW50VHlwZSA9IE5QQ29jb2FFdmVudEtleURvd247Cisg
ICAgICAgICAgICAgICAgbV9rZXlEb3duU2VudCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIE5TS2V5VXA6CisgICAgICAgICAgICAgICAgaWYgKG1fZGlz
cmVnYXJkS2V5VXBDb3VudGVyID4gMCkgeworICAgICAgICAgICAgICAgICAgICBtX2Rpc3JlZ2Fy
ZEtleVVwQ291bnRlci0tOworICAgICAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhh
bmRsZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBldmVudFR5cGUgPSBOUENvY29hRXZlbnRLZXlVcDsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTlNGbGFnc0NoYW5nZWQ6CisgICAgICAg
ICAgICAgICAgZXZlbnRUeXBlID0gTlBDb2NvYUV2ZW50RmxhZ3NDaGFuZ2VkOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE5QQ29jb2FFdmVudCBjb2NvYUV2ZW50
OworICAgICAgICBpbml0aWFsaXplTlBDb2NvYUV2ZW50KCZjb2NvYUV2ZW50KTsKKyAgICAgICAg
Y29jb2FFdmVudC50eXBlID0gZXZlbnRUeXBlOworICAgICAgICBpZiAoZXZlbnRUeXBlICE9IE5Q
Q29jb2FFdmVudEZsYWdzQ2hhbmdlZCkgeworICAgICAgICAgICAgTlNTdHJpbmcgKmNoYXJhY3Rl
cnMgPSBbY3VycmVudEV2ZW50IGNoYXJhY3RlcnNdOworICAgICAgICAgICAgTlNTdHJpbmcgKmNo
YXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycyA9IFtjdXJyZW50RXZlbnQgY2hhcmFjdGVyc0lnbm9y
aW5nTW9kaWZpZXJzXTsKKyAgICAgICAgICAgIGNvY29hRXZlbnQuZGF0YS5rZXkuY2hhcmFjdGVy
cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8TlBOU1N0cmluZyo+KGNoYXJhY3RlcnMpOworICAgICAgICAg
ICAgY29jb2FFdmVudC5kYXRhLmtleS5jaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMgPSByZWlu
dGVycHJldF9jYXN0PE5QTlNTdHJpbmcqPihjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMpOwor
ICAgICAgICAgICAgY29jb2FFdmVudC5kYXRhLmtleS5pc0FSZXBlYXQgPSBbY3VycmVudEV2ZW50
IGlzQVJlcGVhdF07CisgICAgICAgICAgICBjb2NvYUV2ZW50LmRhdGEua2V5LmtleUNvZGUgPSBb
Y3VycmVudEV2ZW50IGtleUNvZGVdOworICAgICAgICAgICAgY29jb2FFdmVudC5kYXRhLmtleS5t
b2RpZmllckZsYWdzID0gZ2V0TW9kaWZpZXJzKGV2ZW50KTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaW50MTZfdCByZXNwb25zZSA9IGRpc3BhdGNoTlBDb2NvYUV2ZW50KGNvY29hRXZl
bnQpOworICAgICAgICBpZihyZXNwb25zZSA9PSBrTlBFdmVudE5vdEhhbmRsZWQpIHsKKyAgICAg
ICAgICAgIExPRyhFdmVudHMsICJQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KCk6IEtl
eWJvYXJkIGV2ZW50IHR5cGUgJWQgbm90IGFjY2VwdGVkIiwgY29jb2FFdmVudC50eXBlKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChyZXNwb25zZSA9PSBrTlBFdmVudFN0YXJ0SU1FKSB7CisgICAgICAg
ICAgICAvLyBpbmNyZW1lbnQgY291bnRlciBhbmQgcmVzZW5kIGFzIGEgdGV4dCBpbnB1dAorICAg
ICAgICAgICAgbV9kaXNyZWdhcmRLZXlVcENvdW50ZXIrKzsKKyAgICAgICAgICAgIE5QQ29jb2FF
dmVudCB0ZXh0RXZlbnQ7CisgICAgICAgICAgICBpbml0aWFsaXplTlBDb2NvYUV2ZW50KCZ0ZXh0
RXZlbnQpOworICAgICAgICAgICAgdGV4dEV2ZW50LnR5cGUgPSBOUENvY29hRXZlbnRUZXh0SW5w
dXQ7CisgICAgICAgICAgICB0ZXh0RXZlbnQuZGF0YS50ZXh0LnRleHQgPSByZWludGVycHJldF9j
YXN0PE5QTlNTdHJpbmcqPihbY3VycmVudEV2ZW50IGNoYXJhY3RlcnNdKTsKKyAgICAgICAgICAg
IHJlc3BvbnNlID0gZGlzcGF0Y2hOUENvY29hRXZlbnQodGV4dEV2ZW50KTsKKyAgICAgICAgICAg
IGlmKHJlc3BvbnNlID09IGtOUEV2ZW50Tm90SGFuZGxlZCkKKyAgICAgICAgICAgICAgICBMT0co
RXZlbnRzLCAiUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudCgpOiBLZXlib2FyZCBldmVu
dCB0eXBlICVkIG5vdCBhY2NlcHRlZCIsIGNvY29hRXZlbnQudHlwZSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIC8vIEFsbCBrZXlib2FyZCBldmVudHMgbmVlZCB0byBiZSBoYW5kbGVk
IHRvIHByZXZlbnQgdGhlbSBmYWxsaW5nCisgICAgICAgIC8vIHRocm91Z2ggdG8gdGhlIHBhZ2Us
IHVubGVzcyB0aGV5IGFyZSBNZXRhIGtleSBldmVudHMsIGluIHdoaWNoCisgICAgICAgIC8vIGNh
c2UgdGhleSBhcmUsIHVubGVzcyB0aGV5IGFyZSBDbWQrYS4gRnJvbSBXZWJLaXQyLCBwb3NzaWJs
eQorICAgICAgICAvLyBub3QgdGhlIG1vc3QgZWxlZ2FudCBwaWVjZSBvZiBrZXkgaGFuZGxpbmcg
Y29kZS4uLi4uCisgICAgICAgIGlmIChldmVudC0+bWV0YUtleSgpKSB7CisgICAgICAgICAgICBp
ZiAoY29jb2FFdmVudC5kYXRhLmtleS5rZXlDb2RlID09IDApCisgICAgICAgICAgICAgICAgZXZl
bnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBlbHNlIGlnbm9yZSwgaXQncyBhIE1ldGEgS2V5IGV2ZW50IGZvciB0aGUgYnJvd3Nlci4KKyAg
ICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICB9CisgICAgfQog
fQotCisgICAgCiAjaWZuZGVmIE5QX05PX0NBUkJPTgogdm9pZCBQbHVnaW5WaWV3OjpudWxsRXZl
bnRUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXc+KikKIHsKQEAgLTc4Miw2ICsxMDcxLDIxIEBA
IGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQKIH0KICNlbmRpZgogCisK
K2ludDE2X3QgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUENvY29hRXZlbnQoTlBDb2NvYUV2ZW50JiBj
b2NvYUV2ZW50KQoreworICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMp
OworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworCisgICAgaW50
MTZfdCByZXNwb25zZSA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNl
LCAmY29jb2FFdmVudCk7CisKKyAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAgICBQbHVn
aW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKKworICAgIHJldHVybiByZXNwb25zZTsK
K30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzICAtLS0tLS0tLS0tLS0t
LS0tLS0KIAogTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNo
YXI+JiBidWZmZXIsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165348</attachid>
            <date>2012-09-24 04:02:17 -0700</date>
            <delta_ts>2012-11-29 05:25:23 -0800</delta_ts>
            <desc>Updated patch with the typos in the change log fixed</desc>
            <filename>flashpatch.diff</filename>
            <type>text/plain</type>
            <size>38975</size>
            <attacher>andy.shaw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODg2NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDEyLTA5LTE5ICBBbmR5IFNo
YXcgIDxhbmR5LnNoYXdAZGlnaWEuY29tPgorCisgICAgICAgIFtRdF0gSW1wbGVtZW50IHN1cHBv
cnQgZm9yIENvY29hIGJhc2VkIE5QQVBJIHBsdWdpbnMgb24gTWFjCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjM1OAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdpdGggbGF0ZXIgdmVyc2lvbnMgb2YgRmxh
c2ggdGhleSBhcmUgb25seSBDb2NvYSBiYXNlZCB3aGljaCBtZWFudCB0aGF0IGl0IHdhcyBub3Qg
cG9zc2libGUgdG8gdXNlIEZsYXNoIGluIGEgUXRXZWJLaXQgYnJvd3Nlci4KKyAgICAgICAgVGhp
cyBtYWtlcyBpdCBwb3NzaWJsZSB0byBhbHNvIHVzZSA2NGJpdCBiYXNlZCBwbHVnaW5zIHRvby4g
IAorCisgICAgICAgICogcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblBhY2thZ2U6OmluaXRpYWxpemVCcm93c2VyRnVuY3MpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5RdWlya1NldC5oOgorICAgICAgICAqIHBs
dWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5k
bGVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpQbHVnaW5WaWV3KToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXNlckFnZW50
KToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoUGx1Z2luVmlldyk6CisgICAgICAgICogcGx1Z2lucy9tYWMvUGx1Z2luUGFja2Fn
ZU1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWly
a3MpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKToKKyAgICAg
ICAgKiBwbHVnaW5zL21hYy9QbHVnaW5WaWV3TWFjLm1tOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplTlBDb2NvYUV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OmdldE1vZGlmaWVycyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9y
bVN0YXJ0KToKKyAgICAgICAgKiBwbHVnaW5zL25wYXBpLmNwcDoKKyAgICAgICAgKE5QTl9Qb3BV
cENvbnRleHRNZW51KToKKyAgICAgICAgKiBwbHVnaW5zL25wYXBpLmg6CisKIDIwMTItMDktMTgg
IE1paG5lYSBPdmlkZW5pZSAgPG1paG5lYUBhZG9iZS5jb20+CiAKICAgICAgICAgW0NTU1JlZ2lv
bnNdRmxhZyBhdXRvLWhlaWdodCByZWdpb25zCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L1BsdWdpblBhY2thZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
UGx1Z2luUGFja2FnZS5jcHAJKHJldmlzaW9uIDEyODg2NykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luUGFja2FnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyOCw4ICszMjgsMTAg
QEAgdm9pZCBQbHVnaW5QYWNrYWdlOjppbml0aWFsaXplQnJvd3NlckZ1bgogICAgIG1fYnJvd3Nl
ckZ1bmNzLmdldHZhbHVlZm9ydXJsID0gTlBOX0dldFZhbHVlRm9yVVJMOwogICAgIG1fYnJvd3Nl
ckZ1bmNzLnNldHZhbHVlZm9ydXJsID0gTlBOX1NldFZhbHVlRm9yVVJMOwogICAgIG1fYnJvd3Nl
ckZ1bmNzLmdldGF1dGhlbnRpY2F0aW9uaW5mbyA9IE5QTl9HZXRBdXRoZW50aWNhdGlvbkluZm87
CisKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3B1cGNvbnRleHRtZW51ID0gTlBOX1BvcFVwQ29udGV4
dE1lbnU7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
IAogI2lmIEVOQUJMRShQTFVHSU5fUEFDS0FHRV9TSU1QTEVfSEFTSCkKIHVuc2lnbmVkIFBsdWdp
blBhY2thZ2U6Omhhc2goKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVn
aW5RdWlya1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
UXVpcmtTZXQuaAkocmV2aXNpb24gMTI4ODY3KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5RdWlya1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgUGx1Z2luUXVpcmtSZXF1aXJlc0d0a1Rvb2xLaXQgPSAxIDw8
IDEyLAogICAgICAgICBQbHVnaW5RdWlya1JlcXVpcmVzRGVmYXVsdFNjcmVlbkRlcHRoID0gMSA8
PCAxMywKICAgICAgICAgUGx1Z2luUXVpcmtEb250Q2FsbFNldFdpbmRvd01vcmVUaGFuT25jZSA9
IDEgPDwgMTQsCi0gICAgICAgIFBsdWdpblF1aXJrSWdub3JlUmlnaHRDbGlja0luV2luZG93bGVz
c01vZGUgPSAxIDw8IDE1CisgICAgICAgIFBsdWdpblF1aXJrSWdub3JlUmlnaHRDbGlja0luV2lu
ZG93bGVzc01vZGUgPSAxIDw8IDE1LAorICAgICAgICBQbHVnaW5RdWlya1dhbnRzQ2hyb21lVXNl
ckFnZW50ID0gMSA8PCAxNgogICAgIH07CiAKICAgICBjbGFzcyBQbHVnaW5RdWlya1NldCB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9uIDEyODg2NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYyLDYgKzYyLDcgQEAKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXaGVlbEV2
ZW50LmgiCiAjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlD
VHlwZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMTY5LDYgKzE3MCwx
MCBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVuCiAgICAgICAgIGhh
bmRsZU1vdXNlRXZlbnQoc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KSk7CiAgICAgZWxz
ZSBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQogICAgICAgICBoYW5kbGVLZXlib2FyZEV2
ZW50KHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCkpOworI2lmIGRlZmluZWQoWFBf
TUFDT1NYKQorICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
d2hlZWxFdmVudCkKKyAgICAgICAgaGFuZGxlV2hlZWxFdmVudChzdGF0aWNfY2FzdDxXaGVlbEV2
ZW50Kj4oZXZlbnQpKTsKKyNlbmRpZgogICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmNvbnRleHRtZW51RXZlbnQpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOyAvLyBXZSBkb24ndCBrbm93IGlmIHRoZSBwbHVnLWluIGhhcyBoYW5kbGVkIG1vdXNl
ZG93biBldmVudCBieSBkaXNwbGF5aW5nIGEgY29udGV4dCBtZW51LCBzbyB3ZSBuZXZlciB3YW50
IFdlYktpdCB0byBzaG93IGEgZGVmYXVsdCBvbmUuCiAjaWYgZGVmaW5lZChYUF9VTklYKSAmJiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKQEAgLTgyOSw2ICs4MzQsOSBAQCBQbHVnaW5WaWV3
OjpQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtCiAgICAgLCBtX2luc3RhbmNlKDApCiAjaWYg
ZGVmaW5lZChYUF9NQUNPU1gpCiAgICAgLCBtX2lzV2luZG93ZWQoZmFsc2UpCisgICAgLCBtX3Vw
ZGF0ZWRDb2NvYVRleHRJbnB1dFJlcXVlc3RlZChmYWxzZSkKKyAgICAsIG1fa2V5RG93blNlbnQo
ZmFsc2UpCisgICAgLCBtX2Rpc3JlZ2FyZEtleVVwQ291bnRlcigwKQogI2Vsc2UKICAgICAsIG1f
aXNXaW5kb3dlZCh0cnVlKQogI2VuZGlmCkBAIC0xMjUyLDExICsxMjYwLDI3IEBAIHN0YXRpYyBj
b25zdCBjaGFyKiBNb3ppbGxhVXNlckFnZW50ID0gIk0KICNlbmRpZgogICAgICAgICAiIGVuLVVT
OyBydjoxLjguMSkgR2Vja28vMjAwNjEwMTAgRmlyZWZveC8yLjAiOwogCitzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgQ2hyb21lVXNlckFnZW50ID0gIk1vemlsbGEvNS4wICgiCisjaWYgZGVmaW5l
ZChYUF9NQUNPU1gpCisgICAgIk1hY2ludG9zaDsgVTsgSW50ZWwgTWFjIE9TIFg7IgorI2VsaWYg
ZGVmaW5lZChYUF9XSU4pCisgICAgIldpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNS4xOyIKKyNlbGlm
IGRlZmluZWQoWFBfVU5JWCkKKyAgICAvLyBUaGUgR3RrIHBvcnQgdXNlcyBYMTEgcGx1Z2lucyBp
biBNYWMuCisjaWYgT1MoREFSV0lOKSAmJiBQTEFURk9STShHVEspCisgICAgIlgxMTsgVTsgSW50
ZWwgTWFjIE9TIFg7IgorI2Vsc2UKKyAgICAiWDExOyBVOyBMaW51eCBpNjg2OyIKKyNlbmRpZgor
I2VuZGlmCisgICAgIiBBcHBsZVdlYktpdC81MzQuMzQgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJv
bWUvMTkuMC4xMDU1LjEgU2FmYXJpLzUzNC4zNCI7CisKIGNvbnN0IGNoYXIqIFBsdWdpblZpZXc6
OnVzZXJBZ2VudCgpCiB7CiAgICAgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVn
aW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCkpCiAgICAgICAgIHJldHVybiBNb3ppbGxhVXNl
ckFnZW50OwotCisgICAgZWxzZSBpZiAobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdp
blF1aXJrV2FudHNDaHJvbWVVc2VyQWdlbnQpKQorICAgICAgICByZXR1cm4gQ2hyb21lVXNlckFn
ZW50OwogICAgIGlmIChtX3VzZXJBZ2VudC5pc051bGwoKSkKICAgICAgICAgbV91c2VyQWdlbnQg
PSBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+dXNlckFnZW50KG1fdXJsKS51dGY4KCk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCShyZXZpc2lvbiAxMjg4NjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtOTgs
NiArOTgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgUGx1Z2luU3RyZWFtOwog
ICAgIGNsYXNzIFJlc291cmNlRXJyb3I7CiAgICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKKyAg
ICBjbGFzcyBXaGVlbEV2ZW50OwogCiAgICAgZW51bSBQbHVnaW5TdGF0dXMgewogICAgICAgICBQ
bHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luLApAQCAtMjI5LDYgKzIzMCwxMCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIGNvbnN0IFN0cmluZyYgbWltZVR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX21pbWVUeXBlOyB9CiAgICAgICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0
dXJuIG1fdXJsOyB9CiAKKyNpZiBkZWZpbmVkKFhQX01BQ09TWCkgJiYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCisgICAgICAgIGJvb2wgcG9wVXBDb250ZXh0TWVudShOUE1lbnUqKTsKKyNl
bmRpZgorCiAjaWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAg
ICAgICAgIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFBsdWdpblZpZXdXbmRQcm9jKEhXTkQsIFVJ
TlQsIFdQQVJBTSwgTFBBUkFNKTsKICAgICAgICAgTFJFU1VMVCB3bmRQcm9jKEhXTkQgaFduZCwg
VUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKQEAgLTMyMyw2ICsz
MjgsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIGRpc3BhdGNoTlBFdmVu
dChOUEV2ZW50Jik7CiAjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAjZW5k
aWYKKyNpZiBkZWZpbmVkKFhQX01BQ09TWCkgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CisgICAgICAgIGludDE2X3QgZGlzcGF0Y2hOUENvY29hRXZlbnQoTlBDb2NvYUV2ZW50Jik7Cisg
ICAgICAgIGJvb2wgbV91cGRhdGVkQ29jb2FUZXh0SW5wdXRSZXF1ZXN0ZWQ7CisgICAgICAgIGJv
b2wgbV9rZXlEb3duU2VudDsKKyAgICAgICAgYm9vbCBtX3VzZVBpeG1hcDsKKyAgICAgICAgdWlu
dDE2X3QgbV9kaXNyZWdhcmRLZXlVcENvdW50ZXI7CisjZW5kaWYKKworI2lmIGRlZmluZWQoWFBf
TUFDT1NYKQorICAgICAgICB2b2lkIGhhbmRsZVdoZWVsRXZlbnQoV2hlZWxFdmVudCopOworI2Vu
ZGlmCiAgICAgICAgIHZvaWQgdXBkYXRlUGx1Z2luV2lkZ2V0KCk7CiAgICAgICAgIHZvaWQgcGFp
bnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbnBhcGkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvbnBhcGkuY3BwCShyZXZpc2lvbiAxMjg4NjcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL25wYXBpLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDMgKzE5
OSwxNCBAQCBOUEVycm9yIE5QTl9HZXRBdXRoZW50aWNhdGlvbkluZm8oTlBQIGluCiB7CiAgICAg
cmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdldEF1dGhlbnRpY2F0aW9u
SW5mbyhwcm90b2NvbCwgaG9zdCwgcG9ydCwgc2NoZW1lLCByZWFsbSwgdXNlcm5hbWUsIHVsZW4s
IHBhc3N3b3JkLCBwbGVuKTsKIH0KKworTlBFcnJvciBOUE5fUG9wVXBDb250ZXh0TWVudShOUFAg
aW5zdGFuY2UsIE5QTWVudSogbWVudSkKK3sKKyNpZiBQTEFURk9STShRVCkgJiYgZGVmaW5lZChY
UF9NQUNPU1gpCisgICAgUGx1Z2luVmlldyogcGx1Z2luID0gcGx1Z2luVmlld0Zvckluc3RhbmNl
KGluc3RhbmNlKTsKKyAgICBwbHVnaW4tPnBvcFVwQ29udGV4dE1lbnUobWVudSk7CisgICAgcmV0
dXJuIE5QRVJSX05PX0VSUk9SOworI2Vsc2UKKyAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Cisj
ZW5kaWYgLy8gUExBVEZPUk0oUVQpICYmIGRlZmluZWQoWFBfTUFDT1NYKQorfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ucGFwaS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvbnBhcGkuaAkocmV2aXNpb24gMTI4ODY3KQorKysgU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9ucGFwaS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTUsNyArNDE1LDkgQEAgdHlwZWRlZiBl
bnVtIHsKIAogICBOUE5WU3VwcG9ydHNXaW5kb3dsZXNzID0gMTcsCiAKLSAgTlBOVnByaXZhdGVN
b2RlQm9vbCA9IDE4CisgIE5QTlZwcml2YXRlTW9kZUJvb2wgPSAxOCwKKworICBOUE5Wc3VwcG9y
dHNBZHZhbmNlZEtleUhhbmRsaW5nID0gMjEKIAogI2lmIGRlZmluZWQoWFBfTUFDT1NYKQogICAv
KiBVc2VkIGZvciBuZWdvdGlhdGluZyBkcmF3aW5nIG1vZGVscyAqLwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luUGFja2FnZU1hYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luUGFja2FnZU1hYy5jcHAJKHJldmlzaW9uIDEy
ODg2NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblBhY2thZ2VNYWMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw4ICs1Nyw3IEBAIHZvaWQgUGx1Z2luUGFja2FnZTo6ZGV0
ZXJtaW5lUXVpcmtzKGNvbnMKICAgICB9CiAKICAgICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0
aW9uL3gtc2hvY2t3YXZlLWZsYXNoIikgewotICAgICAgICAvLyBUaGUgZmxhc2ggcGx1Z2luIG9u
bHkgcmVxdWVzdHMgd2luZG93bGVzcyBwbHVnaW5zIGlmIHdlIHJldHVybiBhIG1vemlsbGEgdXNl
ciBhZ2VudAotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2Vy
QWdlbnQpOworICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtXYW50c0Nocm9tZVVzZXJB
Z2VudCk7CiAgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0
ZSk7CiAgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxlV01Vc2VyUGx1c09u
ZU1lc3NhZ2VzKTsKICAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRmxhc2hVUkxOb3Rp
ZnlCdWcpOwpAQCAtMTk2LDYgKzE5NSw3IEBAIGJvb2wgUGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZv
KCkKIAogICAgICAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gKENGU3RyaW5nUmVmKUNGRGlj
dGlvbmFyeUdldFZhbHVlKGV4dGVuc2lvbnNEaWN0LmdldCgpLCBDRlNUUigiV2ViUGx1Z2luVHlw
ZURlc2NyaXB0aW9uIikpOwogICAgICAgICAgICAgbV9taW1lVG9EZXNjcmlwdGlvbnMuc2V0KG1p
bWVUeXBlLCBkZXNjcmlwdGlvbik7CisgICAgICAgICAgICBkZXRlcm1pbmVRdWlya3MobWltZVR5
cGUpOwogICAgICAgICB9CiAKICAgICAgICAgbV9uYW1lID0gKENGU3RyaW5nUmVmKUNGQnVuZGxl
R2V0VmFsdWVGb3JJbmZvRGljdGlvbmFyeUtleShtX21vZHVsZSwgQ0ZTVFIoIldlYlBsdWdpbk5h
bWUiKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL21hYy9QbHVnaW5WaWV3TWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMu
bW0JKHJldmlzaW9uIDEyODg2NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdp
blZpZXdNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJS
ZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
U2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAibnBydW50aW1l
X2ltcGwuaCIKICNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKICNpbmNsdWRlIDxydW50aW1lL0pT
TG9jay5oPgpAQCAtNzUsOSArNzYsMTIgQEAgdXNpbmcgSlNDOjpKU1ZhbHVlOwogI2luY2x1ZGUg
PFFXaWRnZXQ+CiAjaW5jbHVkZSA8UUtleUV2ZW50PgogI2luY2x1ZGUgPFFQYWludGVyPgorI2lu
Y2x1ZGUgPFFEYXRlVGltZT4KKyNpbmNsdWRlIDxRUGl4bWFwPgogI2luY2x1ZGUgIlFXZWJQYWdl
Q2xpZW50LmgiCiBRVF9CRUdJTl9OQU1FU1BBQ0UKIGV4dGVybiBRX0dVSV9FWFBPUlQgT1NXaW5k
b3dSZWYgcXRfbWFjX3dpbmRvd19mb3IoY29uc3QgUVdpZGdldCogdyk7CitleHRlcm4gUV9HVUlf
RVhQT1JUIENHQ29udGV4dFJlZiBxdF9tYWNfY2dfY29udGV4dChjb25zdCBRUGFpbnREZXZpY2Ug
KnBkZXYpOyAvL3FwYWludGRldmljZV9tYWMuY3BwCiBRVF9FTkRfTkFNRVNQQUNFCiAjZW5kaWYK
IApAQCAtMTQ0LDYgKzE0OCwyNSBAQCBzdGF0aWMgaW5saW5lIEludFBvaW50IHRvcExldmVsT2Zm
c2V0Rm9yCiAgICAgcmV0dXJuIEludFBvaW50KCk7CiB9CiAKKy8vIC0tLS0tLS0tLSBDb2NvYSBz
cGVjaWZpYyB1dGlsaXR5IGZ1bmN0aW9ucyAtLS0tLS0tLS0tCisKK3N0YXRpYyB2b2lkIGluaXRp
YWxpemVOUENvY29hRXZlbnQoTlBDb2NvYUV2ZW50KiBldmVudCkKK3sKKyAgICBtZW1zZXQoZXZl
bnQsIDAsIHNpemVvZihOUENvY29hRXZlbnQpKTsKK30KKworc3RhdGljIGludDMyX3QgZ2V0TW9k
aWZpZXJzKFVJRXZlbnRXaXRoS2V5U3RhdGUgKmV2ZW50KQoreworICAgIGludDMyX3QgbW9kaWZp
ZXJzID0gMDsKKyAgICBpZiAoZXZlbnQtPmtleUNvZGUoKSA9PSA1NykgbW9kaWZpZXJzIHw9IE5T
QWxwaGFTaGlmdEtleU1hc2s7CisgICAgaWYgKGV2ZW50LT5zaGlmdEtleSgpKSAgbW9kaWZpZXJz
IHw9IE5TU2hpZnRLZXlNYXNrOworICAgIGlmIChldmVudC0+Y3RybEtleSgpKSAgIG1vZGlmaWVy
cyB8PSBOU0NvbnRyb2xLZXlNYXNrOworICAgIGlmIChldmVudC0+bWV0YUtleSgpKSAgIG1vZGlm
aWVycyB8PSBOU0NvbW1hbmRLZXlNYXNrOworICAgIGlmIChldmVudC0+YWx0S2V5KCkpICAgIG1v
ZGlmaWVycyB8PSBOU0FsdGVybmF0ZUtleU1hc2s7CisKKyAgICByZXR1cm4gbW9kaWZpZXJzOwor
fQorCiAvLyAtLS0tLS0tLS0tLS0tLS0gTGlmZXRpbWUgbWFuYWdlbWVudCAtLS0tLS0tLS0tLS0t
LS0tLQogCiBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQpAQCAtMTc5LDI4ICsyMDIs
NDAgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKICAgICBOUEJvb2wgZXZlbnRN
b2RlbFN1cHBvcnRlZDsKICAgICBpZiAoZ2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUoTlBOVnN1
cHBvcnRzQ2FyYm9uQm9vbCArIG1fZXZlbnRNb2RlbCksICZldmVudE1vZGVsU3VwcG9ydGVkKSAh
PSBOUEVSUl9OT19FUlJPUgogICAgICAgICAgICAgfHwgIWV2ZW50TW9kZWxTdXBwb3J0ZWQpIHsK
KyNlbHNlCisgICAgTlBCb29sIGV2ZW50TW9kZWxTdXBwb3J0ZWQ7CisgICAgaWYgKGdldFZhbHVl
U3RhdGljKE5QTlZhcmlhYmxlKE5QTlZzdXBwb3J0c0NvY29hQm9vbC8qICsgbV9ldmVudE1vZGVs
Ki8pLCAmZXZlbnRNb2RlbFN1cHBvcnRlZCkgIT0gTlBFUlJfTk9fRVJST1IKKyAgICAgICAgICAg
IHx8ICFldmVudE1vZGVsU3VwcG9ydGVkKSB7CiAjZW5kaWYKICAgICAgICAgbV9zdGF0dXMgPSBQ
bHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOwogICAgICAgICBMT0coUGx1Z2lucywgIlBsdWct
aW4gJyVzJyB1c2VzIHVuc3VwcG9ydGVkIGV2ZW50IG1vZGVsICVzIiwKICAgICAgICAgICAgICAg
ICBtX3BsdWdpbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCksIHByZXR0eU5hbWVGb3JFdmVudE1vZGVs
KG1fZXZlbnRNb2RlbCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7Ci0jaWZuZGVmIE5QX05PX0NB
UkJPTgogICAgIH0KLSNlbmRpZgogCiAjaWZuZGVmIE5QX05PX1FVSUNLRFJBVwogICAgIE5QQm9v
bCBkcmF3aW5nTW9kZWxTdXBwb3J0ZWQ7CiAgICAgaWYgKGdldFZhbHVlU3RhdGljKE5QTlZhcmlh
YmxlKE5QTlZzdXBwb3J0c1F1aWNrRHJhd0Jvb2wgKyBtX2RyYXdpbmdNb2RlbCksICZkcmF3aW5n
TW9kZWxTdXBwb3J0ZWQpICE9IE5QRVJSX05PX0VSUk9SCiAgICAgICAgICAgICB8fCAhZHJhd2lu
Z01vZGVsU3VwcG9ydGVkKSB7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90
TG9hZFBsdWdpbjsKKyAgICAgICAgTE9HKFBsdWdpbnMsICJQbHVnLWluICclcycgdXNlcyB1bnN1
cHBvcnRlZCBkcmF3aW5nIG1vZGVsICVzIiwKKyAgICAgICAgICAgICAgICBtX3BsdWdpbi0+bmFt
ZSgpLnV0ZjgoKS5kYXRhKCksIHByZXR0eU5hbWVGb3JEcmF3aW5nTW9kZWwobV9kcmF3aW5nTW9k
ZWwpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICNlbmRpZgorCisjaWZkZWYgTlBf
Tk9fUVVJQ0tEUkFXCisgICAgTlBCb29sIGRyYXdpbmdNb2RlbFN1cHBvcnRlZDsKKyAgICBpZiAo
Z2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUoTlBOVnN1cHBvcnRzQ29yZUdyYXBoaWNzQm9vbC8q
ICsgbV9kcmF3aW5nTW9kZWwqLyksICZkcmF3aW5nTW9kZWxTdXBwb3J0ZWQpICE9IE5QRVJSX05P
X0VSUk9SCisgICAgICAgICAgICB8fCAhZHJhd2luZ01vZGVsU3VwcG9ydGVkKSB7CiAgICAgICAg
IG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKICAgICAgICAgTE9HKFBs
dWdpbnMsICJQbHVnLWluICclcycgdXNlcyB1bnN1cHBvcnRlZCBkcmF3aW5nIG1vZGVsICVzIiwK
ICAgICAgICAgICAgICAgICBtX3BsdWdpbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCksIHByZXR0eU5h
bWVGb3JEcmF3aW5nTW9kZWwobV9kcmF3aW5nTW9kZWwpKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotI2lmbmRlZiBOUF9OT19RVUlDS0RSQVcKICAgICB9CiAjZW5kaWYKIAorCiAjaWYgUExBVEZP
Uk0oUVQpCiAgICAgLy8gU2V0IHRoZSBwbGF0Zm9ybVBsdWdpbldpZGdldCBvbmx5IGluIHRoZSBj
YXNlIG9mIFFXZWJWaWV3IHNvIHRoYXQgdGhlIGNvbnRleHQgbWVudSBhcHBlYXJzIGluIHRoZSBy
aWdodCBwbGFjZS4KICAgICAvLyBJbiBhbGwgb3RoZXIgY2FzZXMsIHdlIHVzZSBvZmYtc2NyZWVu
IHJlbmRlcmluZwpAQCAtMjE1LDI3ICsyNTAsMjkgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9y
bVN0YXJ0KCkKICNlbmRpZgogCiAgICAgLy8gQ3JlYXRlIGEgZmFrZSB3aW5kb3cgcmVsYXRpdmUg
dG8gd2hpY2ggYWxsIGV2ZW50cyB3aWxsIGJlIHNlbnQgd2hlbiB1c2luZyBvZmZzY3JlZW4gcmVu
ZGVyaW5nCi0gICAgaWYgKCFwbGF0Zm9ybVBsdWdpbldpZGdldCgpKSB7CiAjaWZuZGVmIE5QX05P
X0NBUkJPTgorICAgIGlmICghcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkgewogICAgICAgICAvLyBN
YWtlIHRoZSBkZWZhdWx0IHNpemUgcmVhbGx5IGJpZy4gSXQgaXMgdW5jbGVhciB3aHkgdGhpcyBp
cyByZXF1aXJlZCBidXQgd2l0aCBhIHNtYWxsZXIgc2l6ZSwgbW91c2UgbW92ZQogICAgICAgICAv
LyBldmVudHMgZG9uJ3QgZ2V0IHByb2Nlc3NlZC4gUmVzaXppbmcgdGhlIGZha2Ugd2luZG93IHRv
IGZsYXNoJ3Mgc2l6ZSBkb2Vzbid0IGhlbHAuCiAgICAgICAgIDo6UmVjdCB3aW5kb3dCb3VuZHMg
PSB7IDAsIDAsIDEwMDAsIDEwMDAgfTsKICAgICAgICAgQ3JlYXRlTmV3V2luZG93KGtEb2N1bWVu
dFdpbmRvd0NsYXNzLCBrV2luZG93U3RhbmRhcmREb2N1bWVudEF0dHJpYnV0ZXMsICZ3aW5kb3dC
b3VuZHMsICZtX2Zha2VXaW5kb3cpOwogICAgICAgICAvLyBGbGFzaCByZXF1aXJlcyB0aGUgd2lu
ZG93IHRvIGJlIGhpbGl0ZWQgdG8gcHJvY2VzcyBtb3VzZSBtb3ZlIGV2ZW50cy4KICAgICAgICAg
SGlsaXRlV2luZG93KG1fZmFrZVdpbmRvdywgdHJ1ZSk7Ci0jZW5kaWYKICAgICB9CisjZW5kaWYK
IAogICAgIHVwZGF0ZVBsdWdpbldpZGdldCgpOwogCiAgICAgaWYgKCFtX3BsdWdpbi0+cXVpcmtz
KCkuY29udGFpbnMoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpCiAgICAgICAg
IHNldE5QV2luZG93SWZOZWVkZWQoKTsKIAorI2lmbmRlZiBOUF9OT19DQVJCT04KICAgICAvLyBU
T0RPOiBJbXBsZW1lbnQgbnVsbCB0aW1lciB0aHJvdHRsaW5nIGRlcGVuZGluZyBvbiBwbHVnaW4g
YWN0aXZhdGlvbgogICAgIG1fbnVsbEV2ZW50VGltZXIgPSBhZG9wdFB0cihuZXcgVGltZXI8UGx1
Z2luVmlldz4odGhpcywgJlBsdWdpblZpZXc6Om51bGxFdmVudFRpbWVyRmlyZWQpKTsKICAgICBt
X251bGxFdmVudFRpbWVyLT5zdGFydFJlcGVhdGluZygwLjAyKTsKIAogICAgIG1fbGFzdE1vdXNl
UG9zLmggPSBtX2xhc3RNb3VzZVBvcy52ID0gMDsKKyNlbmRpZiAvLyBOUF9OT19DQVJCT04KIAog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjc2LDcgKzMxMyw3IEBAIGJvb2wgUGx1Z2luVmlldzo6
cGxhdGZvcm1HZXRWYWx1ZVN0YXRpYygKIAogI2VuZGlmCiAgICAgY2FzZSBOUE5Wc3VwcG9ydHND
b2NvYUJvb2w6Ci0gICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSBmYWxzZTsK
KyAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CiAgICAgICAgICpy
ZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTI4Niw2
ICszMjMsMTEgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKAogICAg
ICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CiAgICAgICAgIHJldHVybiB0cnVlOwogCisg
ICAgY2FzZSBOUE5Wc3VwcG9ydHNBZHZhbmNlZEtleUhhbmRsaW5nOgorICAgICAgICAqc3RhdGlj
X2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gdHJ1ZTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05P
X0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKwogI2lmbmRlZiBOUF9OT19RVUlDS0RSQVcK
ICAgICAvLyBRdWlja0RyYXcgaXMgZGVwcmVjYXRlZCBpbiAxMC41IGFuZCBub3Qgc3VwcG9ydGVk
IG9uIDY0LWJpdAogICAgIGNhc2UgTlBOVnN1cHBvcnRzUXVpY2tEcmF3Qm9vbDoKQEAgLTMwNCw2
ICszNDYsMjAgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKAogLy8g
VXNlZCBvbmx5IGZvciB2YXJpYWJsZXMgdGhhdCBuZWVkIGEgdmlldyB0byByZXNvbHZlCiBib29s
IFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQq
IHZhbHVlLCBOUEVycm9yKiBlcnJvcikKIHsKKyAgICAvLyBJbiBXZWJLaXQyLCB0aGlzIGlzIHNl
dCBpZiB0aGUgcGx1Z2luIHF1ZXJpZXMgaXQncyBhdmFpbGlhYmxpdHkgYW5kCisgICAgLy8gbm8g
a2V5IGRvd24gZXZlbnRzIGhhdmUgYWxyZWFkeSBiZWVuIHNlbnQuCisgICAgaWYgKHZhcmlhYmxl
ID09IE5QTlZzdXBwb3J0c1VwZGF0ZWRDb2NvYVRleHRJbnB1dEJvb2wpIHsKKyAgICAgICAgaWYg
KG1fa2V5RG93blNlbnQgJiYgIW1fdXBkYXRlZENvY29hVGV4dElucHV0UmVxdWVzdGVkKSB7Cisg
ICAgICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gZmFsc2U7CisgICAgICAg
ICAgICAqZXJyb3IgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOworICAgICAg
ICAgICAgKmVycm9yID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgICAgICBtX3VwZGF0ZWRDb2Nv
YVRleHRJbnB1dFJlcXVlc3RlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMzQyLDIxICszOTgsMjIgQEAg
dm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cyhib29sIGZvY3VzZWQpCiAgICAgTE9HKFBsdWdpbnMs
ICJQbHVnaW5WaWV3OjpzZXRGb2N1cyglZCkiLCBmb2N1c2VkKTsKICAgICBpZiAoIWZvY3VzZWQp
IHsKICAgICAgICAgV2lkZ2V0OjpzZXRGb2N1cyhmb2N1c2VkKTsKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICBpZiAobV9ldmVudE1vZGVsICE9IE5QRXZlbnRNb2RlbENvY29hKQorICAgICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQogI2lm
IFBMQVRGT1JNKFFUKQotICAgICAgIHN0YXRpY19jYXN0PFFXaWRnZXQqPihwbGF0Zm9ybVBsdWdp
bldpZGdldCgpKS0+c2V0Rm9jdXMoUXQ6Ok90aGVyRm9jdXNSZWFzb24pOworICAgICAgICBzdGF0
aWNfY2FzdDxRV2lkZ2V0Kj4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnNldEZvY3VzKFF0OjpP
dGhlckZvY3VzUmVhc29uKTsKICNlbHNlCiAgICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkt
PlNldEZvY3VzKCk7CiAjZW5kaWYKLSAgIGVsc2UKLSAgICAgICBXaWRnZXQ6OnNldEZvY3VzKGZv
Y3VzZWQpOworICAgIGVsc2UKKyAgICAgICAgV2lkZ2V0OjpzZXRGb2N1cyhmb2N1c2VkKTsKIAot
ICAgIC8vIFRPRE86IEFsc28gaGFuZGxlIGFuZCBwYXNzIG9uIGJsdXIgZXZlbnRzIChmb2N1cyBs
b3N0KQogCiAjaWZuZGVmIE5QX05PX0NBUkJPTgorICAgIC8vIFRPRE86IEFsc28gaGFuZGxlIGFu
ZCBwYXNzIG9uIGJsdXIgZXZlbnRzIChmb2N1cyBsb3N0KQogICAgIEV2ZW50UmVjb3JkIHJlY29y
ZDsKICAgICByZWNvcmQud2hhdCA9IE5QRXZlbnRUeXBlX0dldEZvY3VzRXZlbnQ7CiAgICAgcmVj
b3JkLm1lc3NhZ2UgPSAwOwpAQCAtMzY3LDYgKzQyNCwxNyBAQCB2b2lkIFBsdWdpblZpZXc6OnNl
dEZvY3VzKGJvb2wgZm9jdXNlZCkKICAgICBpZiAoIWRpc3BhdGNoTlBFdmVudChyZWNvcmQpKQog
ICAgICAgICBMT0coRXZlbnRzLCAiUGx1Z2luVmlldzo6c2V0Rm9jdXMoJWQpOiBGb2N1cyBldmVu
dCBub3QgYWNjZXB0ZWQiLCBmb2N1c2VkKTsKICNlbmRpZgorICAgIHsKKyAgICAgICAgTlBDb2Nv
YUV2ZW50IGNvY29hRXZlbnQ7CisgICAgICAgIGluaXRpYWxpemVOUENvY29hRXZlbnQoJmNvY29h
RXZlbnQpOworICAgICAgICBjb2NvYUV2ZW50LnR5cGUgPSBOUENvY29hRXZlbnRGb2N1c0NoYW5n
ZWQ7CisgICAgICAgIE5QQm9vbCBmb2N1cyA9IGZvY3VzZWQ7CisgICAgICAgIGNvY29hRXZlbnQu
ZGF0YS5mb2N1cy5oYXNGb2N1cyA9IGZvY3VzOworCisgICAgICAgIGlmKCFkaXNwYXRjaE5QQ29j
b2FFdmVudChjb2NvYUV2ZW50KSkgeworICAgICAgICAgICAgTE9HKEV2ZW50cywgIlBsdWdpblZp
ZXc6OnNldEZvY3VzKCk6IEZvY3VzIGV2ZW50ICVkIG5vdCBhY2NlcHRlZCIsIGNvY29hRXZlbnQu
dHlwZSk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50
VmlzaWJsZShib29sIHZpc2libGUpCkBAIC0zOTksOCArNDY3LDEwIEBAIHZvaWQgUGx1Z2luVmll
dzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2lu
ZG93VHlwZURyYXdhYmxlOwogICAgIH0KIAotICAgIGlmICghbmV3Q29udGV4dFJlZiB8fCAhbmV3
V2luZG93UmVmKQotICAgICAgICByZXR1cm47CisgICAgaWYgKCFuZXdDb250ZXh0UmVmIHx8ICFu
ZXdXaW5kb3dSZWYpIHsKKyAgICAgICAgaWYgKCFtX3VzZVBpeG1hcCkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICB9CiAKICAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKikmbV9ucENnQ29u
dGV4dDsKICNpZm5kZWYgTlBfTk9fQ0FSQk9OCkBAIC00NzQsMTIgKzU0NCwzMiBAQCB2b2lkIFBs
dWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogCiAKICAgICBpZiAoY29udGV4dC0+cGFp
bnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0KKyNpZiBQTEFURk9STShRVCkKKyAg
ICBRUGFpbnRlciogcCA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIENHQ29udGV4
dFJlZiBjZ0NvbnRleHQgPSBxdF9tYWNfY2dfY29udGV4dChwLT5kZXZpY2UoKSk7CisjZWxzZQor
ICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBtX25wQ2dDb250ZXh0LmNvbnRleHQ7CisjZW5k
aWYKICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CisgICAgaWYgKCFjZ0NvbnRleHQpIHsKKyAg
ICAgICAgY2dDb250ZXh0ID0gbV9jb250ZXh0UmVmOworICAgICAgICBpZiAoIWNnQ29udGV4dCkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX3VzZVBp
eG1hcCA9IHRydWU7CisgICAgICAgICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UKKyAgICAgICAgbV91c2VQaXhtYXAgPSBmYWxzZTsKIAotICAgIENHQ29u
dGV4dFJlZiBjZ0NvbnRleHQgPSBtX25wQ2dDb250ZXh0LmNvbnRleHQ7Ci0gICAgaWYgKCFjZ0Nv
bnRleHQpCi0gICAgICAgIHJldHVybjsKKyAgICBib29sIG9sZFVzZVBpeG1hcCA9IG1fdXNlUGl4
bWFwOworICAgIGlmIChtX2lzVHJhbnNwYXJlbnQgJiYgIW1fdXNlUGl4bWFwKSB7CisgICAgICAg
IGlmIChtX3BpeG1hcC5pc051bGwoKSkKKyAgICAgICAgICAgIG1fcGl4bWFwID0gUVBpeG1hcChm
cmFtZVJlY3QoKS5zaXplKCkpOworICAgICAgICBtX3VzZVBpeG1hcCA9IHRydWU7CisgICAgICAg
IHNldE5QV2luZG93SWZOZWVkZWQoKTsKKyAgICAgICAgY2dDb250ZXh0ID0gcXRfbWFjX2NnX2Nv
bnRleHQoJm1fcGl4bWFwKTsKKyAgICB9CiAKICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNnQ29u
dGV4dCk7CiAgICAgaWYgKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpIHsKQEAgLTQ5OCw3ICs1ODgs
NyBAQCB2b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogCiAgICAgci5zaXpl
LmhlaWdodCA9IHRhcmdldFJlY3QuaGVpZ2h0KCk7CiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChj
Z0NvbnRleHQsIHIpOwogCi0gICAgaWYgKCFwbGF0Zm9ybVBsdWdpbldpZGdldCgpICYmIG1faXNU
cmFuc3BhcmVudCkgeyAvLyBjbGVhbiB0aGUgcGl4bWFwIGluIHRyYW5zcGFyZW50IG1vZGUKKyAg
ICBpZiAoIXBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgfHwgbV9pc1RyYW5zcGFyZW50KSB7IC8vIGNs
ZWFuIHRoZSBwaXhtYXAgaW4gdHJhbnNwYXJlbnQgbW9kZQogI2lmIFBMQVRGT1JNKFFUKQogICAg
ICAgICBRUGFpbnRlciBwYWludGVyKCZtX3BpeG1hcCk7CiAgICAgICAgIHBhaW50ZXIuc2V0Q29t
cG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfQ2xlYXIpOwpAQCAtNTA3LDM5
ICs1OTcsNzAgQEAgdm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIAogICAg
IH0KIAogI2lmbmRlZiBOUF9OT19DQVJCT04KLSAgICBFdmVudFJlY29yZCBldmVudDsKLSAgICBl
dmVudC53aGF0ID0gdXBkYXRlRXZ0OwotICAgIGV2ZW50Lm1lc3NhZ2UgPSAobG9uZyB1bnNpZ25l
ZCBpbnQpbV9ucENnQ29udGV4dC53aW5kb3c7Ci0gICAgZXZlbnQud2hlbiA9IFRpY2tDb3VudCgp
OwotICAgIGV2ZW50LndoZXJlLmggPSAwOwotICAgIGV2ZW50LndoZXJlLnYgPSAwOwotICAgIGV2
ZW50Lm1vZGlmaWVycyA9IEdldEN1cnJlbnRLZXlNb2RpZmllcnMoKTsKLQotICAgIGlmICghZGlz
cGF0Y2hOUEV2ZW50KGV2ZW50KSkKLSAgICAgICAgTE9HKEV2ZW50cywgIlBsdWdpblZpZXc6OnBh
aW50KCk6IFBhaW50IGV2ZW50IG5vdCBhY2NlcHRlZCIpOwotI2VuZGlmCi0KLSAgICBDR0NvbnRl
eHRSZXN0b3JlR1N0YXRlKGNnQ29udGV4dCk7Ci0KLSAgICBpZiAoIXBsYXRmb3JtUGx1Z2luV2lk
Z2V0KCkpIHsKKyAgICBpZiAobV9ldmVudE1vZGVsICE9IE5QRXZlbnRNb2RlbENvY29hKSB7Cisg
ICAgICAgIEV2ZW50UmVjb3JkIGV2ZW50OworICAgICAgICBldmVudC53aGF0ID0gdXBkYXRlRXZ0
OworICAgICAgICBldmVudC5tZXNzYWdlID0gKGxvbmcgdW5zaWduZWQgaW50KW1fbnBDZ0NvbnRl
eHQud2luZG93OworICAgICAgICBldmVudC53aGVuID0gVGlja0NvdW50KCk7CisgICAgICAgIGV2
ZW50LndoZXJlLmggPSAwOworICAgICAgICBldmVudC53aGVyZS52ID0gMDsKKyAgICAgICAgZXZl
bnQubW9kaWZpZXJzID0gR2V0Q3VycmVudEtleU1vZGlmaWVycygpOworCisgICAgICAgIGlmICgh
ZGlzcGF0Y2hOUEV2ZW50KGV2ZW50KSkKKyAgICAgICAgICAgIExPRyhFdmVudHMsICJQbHVnaW5W
aWV3OjpwYWludCgpOiBQYWludCBldmVudCBub3QgYWNjZXB0ZWQiKTsKKyAgICB9IGVsc2UKKyNl
bmRpZgorICAgIHsKKyAgICAgICAgTlBDb2NvYUV2ZW50IGNvY29hRXZlbnQ7CisgICAgICAgIGlu
aXRpYWxpemVOUENvY29hRXZlbnQoJmNvY29hRXZlbnQpOworICAgICAgICBjb2NvYUV2ZW50LnR5
cGUgPSBOUENvY29hRXZlbnREcmF3UmVjdDsKKyAgICAgICAgY29jb2FFdmVudC5kYXRhLmRyYXcu
eCA9IG1fdXNlUGl4bWFwID8gMCA6IHIub3JpZ2luLng7CisgICAgICAgIGNvY29hRXZlbnQuZGF0
YS5kcmF3LnkgPSBtX3VzZVBpeG1hcCA/IDAgOiByLm9yaWdpbi55OworICAgICAgICBjb2NvYUV2
ZW50LmRhdGEuZHJhdy53aWR0aCA9IG1fdXNlUGl4bWFwID8gbV9waXhtYXAud2lkdGgoKSA6IHIu
c2l6ZS53aWR0aDsKKyAgICAgICAgY29jb2FFdmVudC5kYXRhLmRyYXcuaGVpZ2h0ID0gbV91c2VQ
aXhtYXAgPyBtX3BpeG1hcC5oZWlnaHQoKSA6IHIuc2l6ZS5oZWlnaHQ7CisgICAgICAgIGNvY29h
RXZlbnQuZGF0YS5kcmF3LmNvbnRleHQgPSBjZ0NvbnRleHQ7CisgICAgICAgIAorICAgICAgICBp
ZighZGlzcGF0Y2hOUENvY29hRXZlbnQoY29jb2FFdmVudCkpCisgICAgICAgICAgICBMT0coRXZl
bnRzLCAiUGx1Z2luVmlldzo6cGFpbnQoKTogUGFpbnQgZXZlbnQgdHlwZSAlZCBub3QgYWNjZXB0
ZWQiLCBjb2NvYUV2ZW50LnR5cGUpOworICAgIH0KKyAgICAKKyAgICBpZiAoIXBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCkgfHwgbV9pc1RyYW5zcGFyZW50KSB7CiAjaWYgUExBVEZPUk0oUVQpCiAgICAg
ICAgIFFQYWludGVyKiBwYWludGVyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAg
ICAgIHBhaW50ZXItPmRyYXdQaXhtYXAodGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCBt
X3BpeG1hcCwgCisgICAgICAgIHBhaW50ZXItPmRyYXdQaXhtYXAodGFyZ2V0UmVjdC54KCksIHRh
cmdldFJlY3QueSgpLCBtX3BpeG1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJn
ZXRSZWN0LngoKSAtIGZyYW1lUmVjdCgpLngoKSwgdGFyZ2V0UmVjdC55KCkgLSBmcmFtZVJlY3Qo
KS55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSk7CiAjZW5kaWYK
ICAgICB9CisgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjZ0NvbnRleHQpOworICAgIGlmIChv
bGRVc2VQaXhtYXAgIT0gbV91c2VQaXhtYXApIHsKKyAgICAgICAgbV91c2VQaXhtYXAgPSBvbGRV
c2VQaXhtYXA7CisgICAgICAgIG1fcGl4bWFwID0gUVBpeG1hcCgpOworICAgIH0gICAgCit9CisK
K2Jvb2wgUGx1Z2luVmlldzo6cG9wVXBDb250ZXh0TWVudShOUE1lbnUgKm1lbnUpCit7CisgICAg
TlNFdmVudCogY3VycmVudEV2ZW50ID0gW05TQXBwIGN1cnJlbnRFdmVudF07CisgICAgCisgICAg
Ly8gTlBOX1BvcFVwQ29udGV4dE1lbnUgbXVzdCBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIHBs
dWctaW4ncyBOUFBfSGFuZGxlRXZlbnQuCisgICAgaWYgKCFjdXJyZW50RXZlbnQpCisgICAgICAg
IHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgIAorICAgIE5TV2luZG93KiB3aW5kb3cg
PSBbY3VycmVudEV2ZW50IHdpbmRvd107CisgICAgTlNWaWV3KiB2aWV3ID0gW3dpbmRvdyBjb250
ZW50Vmlld107CisgICAgW05TTWVudSBwb3BVcENvbnRleHRNZW51OihOU01lbnUqKW1lbnUgd2l0
aEV2ZW50OmN1cnJlbnRFdmVudCBmb3JWaWV3OnZpZXddOworICAgIHJldHVybiB0cnVlOwogfQot
CisgICAgCiB2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJl
Y3QpCiB7Ci0gICAgaWYgKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCisgICAgaWYgKHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCkgJiYgbV9pc1RyYW5zcGFyZW50KQogI2lmIFBMQVRGT1JNKFFUKQogICAg
ICAgICBzdGF0aWNfY2FzdDxRV2lkZ2V0Kj4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnVwZGF0
ZShjb252ZXJ0VG9Db250YWluaW5nV2luZG93KHJlY3QpKTsKICNlbHNlCiAgICAgICAgIHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCktPlJlZnJlc2hSZWN0KGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3co
cmVjdCkpOwogI2VuZGlmCi0gICAgZWxzZQotICAgICAgICBpbnZhbGlkYXRlV2luZG93bGVzc1Bs
dWdpblJlY3QocmVjdCk7CisgICAgaW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KHJlY3Qp
OwogfQogCiB2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKQEAg
LTU2MSwxMjkgKzY4MiwyOTcgQEAgdm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpCiAKIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0gRXZlbnQgaGFuZGxpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0K
K3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlV2hlZWxFdmVudChXaGVlbEV2ZW50ICpldmVudCkKK3sK
KyAgICBpZiAoIW1faXNTdGFydGVkIHx8IG1fZXZlbnRNb2RlbCAhPSBOUEV2ZW50TW9kZWxDb2Nv
YSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIE5QQ29jb2FFdmVudCBjb2NvYUV2ZW50Owor
ICAgIGluaXRpYWxpemVOUENvY29hRXZlbnQoJmNvY29hRXZlbnQpOworICAgIAorICAgIE5TRXZl
bnQgKmN1cnJlbnRFdmVudCA9IFtOU0FwcCBjdXJyZW50RXZlbnRdOworICAgIAorICAgIGNvY29h
RXZlbnQudHlwZSA9IE5QQ29jb2FFdmVudFNjcm9sbFdoZWVsOworICAgIAorICAgIGNvY29hRXZl
bnQuZGF0YS5tb3VzZS5wbHVnaW5YID0gZXZlbnQtPmxheWVyWCgpIC0gbV9ucFdpbmRvdy54ICsg
bV93aW5kb3dSZWN0LngoKSAtIG1fZWxlbWVudC0+b2Zmc2V0TGVmdCgpOworICAgIGNvY29hRXZl
bnQuZGF0YS5tb3VzZS5wbHVnaW5ZID0gZXZlbnQtPmxheWVyWSgpIC0gbV9ucFdpbmRvdy55ICsg
bV93aW5kb3dSZWN0LnkoKSAtIG1fZWxlbWVudC0+b2Zmc2V0VG9wKCk7CisgICAgY29jb2FFdmVu
dC5kYXRhLm1vdXNlLmRlbHRhWCA9IFtjdXJyZW50RXZlbnQgZGVsdGFYXTsKKyAgICBjb2NvYUV2
ZW50LmRhdGEubW91c2UuZGVsdGFZID0gW2N1cnJlbnRFdmVudCBkZWx0YVldOworICAgIGNvY29h
RXZlbnQuZGF0YS5tb3VzZS5kZWx0YVogPSBbY3VycmVudEV2ZW50IGRlbHRhWl07CisgICAgY29j
b2FFdmVudC5kYXRhLm1vdXNlLm1vZGlmaWVyRmxhZ3MgPSBnZXRNb2RpZmllcnMoZXZlbnQpOwor
ICAgIAorICAgIGlmKCFkaXNwYXRjaE5QQ29jb2FFdmVudChjb2NvYUV2ZW50KSkgeworICAgICAg
ICBMT0coRXZlbnRzLCAiUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCgpOiBXaGVlbCBldmVu
dCB0eXBlICVkIGF0ICVkLCVkIG5vdCBhY2NlcHRlZCIsIGNvY29hRXZlbnQudHlwZQorICAgICAg
ICAgICAgY29jb2FFdmVudC5kYXRhLm1vdXNlLngsIGNvY29hRXZlbnQuZGF0YS5tb3VzZS55KTsK
KyAgICB9CisgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cit9CiAKIHZvaWQgUGx1Z2lu
Vmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKIHsKICAgICBpZiAoIW1f
aXNTdGFydGVkKQogICAgICAgICByZXR1cm47Ci0KKyAgICAKICNpZm5kZWYgTlBfTk9fQ0FSQk9O
Ci0gICAgRXZlbnRSZWNvcmQgcmVjb3JkOwotCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KSB7Ci0gICAgICAgIC8vIE1vdXNlIG1vdmVtZW50IGlz
IGhhbmRsZWQgYnkgbnVsbCB0aW1lciBldmVudHMKLSAgICAgICAgbV9sYXN0TW91c2VQb3MgPSBt
b3VzZVBvc0ZvclBsdWdpbihldmVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYg
KGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7Ci0gICAgICAg
IHJlY29yZC53aGF0ID0gTlBFdmVudFR5cGVfQWRqdXN0Q3Vyc29yRXZlbnQ7Ci0gICAgfSBlbHNl
IGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KSB7Ci0gICAg
ICAgIHJlY29yZC53aGF0ID0gTlBFdmVudFR5cGVfQWRqdXN0Q3Vyc29yRXZlbnQ7Ci0gICAgfSBl
bHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgewot
ICAgICAgICByZWNvcmQud2hhdCA9IG1vdXNlRG93bjsKLSAgICAgICAgLy8gVGhlIHBsdWdpbiBu
ZWVkcyBmb2N1cyB0byByZWNlaXZlIGtleWJvYXJkIGV2ZW50cwotICAgICAgICBpZiAoUGFnZSog
cGFnZSA9IG1fcGFyZW50RnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAgIHBhZ2UtPmZvY3VzQ29u
dHJvbGxlcigpLT5zZXRGb2N1c2VkRnJhbWUobV9wYXJlbnRGcmFtZSk7Ci0gICAgICAgIG1fcGFy
ZW50RnJhbWUtPmRvY3VtZW50KCktPnNldEZvY3VzZWROb2RlKG1fZWxlbWVudCk7Ci0gICAgfSBl
bHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpIHsKLSAg
ICAgICAgcmVjb3JkLndoYXQgPSBtb3VzZVVwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgcmVjb3JkLndoZXJlID0gbW91c2VQb3NGb3JQbHVnaW4oZXZlbnQpOwot
ICAgIHJlY29yZC5tb2RpZmllcnMgPSBtb2RpZmllcnNGb3JFdmVudChldmVudCk7Ci0KLSAgICBp
ZiAoIWV2ZW50LT5idXR0b25Eb3duKCkpCi0gICAgICAgIHJlY29yZC5tb2RpZmllcnMgfD0gYnRu
U3RhdGU7Ci0KLSAgICBpZiAoZXZlbnQtPmJ1dHRvbigpID09IDIpCi0gICAgICAgIHJlY29yZC5t
b2RpZmllcnMgfD0gY29udHJvbEtleTsKLQotICAgIGlmICghZGlzcGF0Y2hOUEV2ZW50KHJlY29y
ZCkpIHsKLSAgICAgICAgaWYgKHJlY29yZC53aGF0ID09IE5QRXZlbnRUeXBlX0FkanVzdEN1cnNv
ckV2ZW50KQotICAgICAgICAgICAgcmV0dXJuOyAvLyBTaWduYWxzIHRoYXQgdGhlIHBsdWdpbiB3
YW50cyBhIG5vcm1hbCBjdXJzb3IKLQotICAgICAgICBMT0coRXZlbnRzLCAiUGx1Z2luVmlldzo6
aGFuZGxlTW91c2VFdmVudCgpOiBNb3VzZSBldmVudCB0eXBlICVkIGF0ICVkLCVkIG5vdCBhY2Nl
cHRlZCIsCisgICAgaWYgKG1fZXZlbnRNb2RlbCAhPSBOUEV2ZW50TW9kZWxDb2NvYSkgeworICAg
ICAgICBFdmVudFJlY29yZCByZWNvcmQ7CisgICAgICAgIAorICAgICAgICBpZiAoZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpIHsKKyAgICAgICAgICAgIC8vIE1v
dXNlIG1vdmVtZW50IGlzIGhhbmRsZWQgYnkgbnVsbCB0aW1lciBldmVudHMKKyAgICAgICAgICAg
IG1fbGFzdE1vdXNlUG9zID0gbW91c2VQb3NGb3JQbHVnaW4oZXZlbnQpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
Lm1vdXNlb3ZlckV2ZW50KSB7CisgICAgICAgICAgICByZWNvcmQud2hhdCA9IE5QRXZlbnRUeXBl
X0FkanVzdEN1cnNvckV2ZW50OworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQpIHsKKyAgICAgICAgICAgIHJlY29yZC53aGF0ID0g
TlBFdmVudFR5cGVfQWRqdXN0Q3Vyc29yRXZlbnQ7CisgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpIHsKKyAgICAgICAgICAgIHJl
Y29yZC53aGF0ID0gbW91c2VEb3duOworICAgICAgICAgICAgLy8gVGhlIHBsdWdpbiBuZWVkcyBm
b2N1cyB0byByZWNlaXZlIGtleWJvYXJkIGV2ZW50cworICAgICAgICAgICAgaWYgKFBhZ2UqIHBh
Z2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICAgICAgcGFnZS0+Zm9jdXND
b250cm9sbGVyKCktPnNldEZvY3VzZWRGcmFtZShtX3BhcmVudEZyYW1lKTsKKyAgICAgICAgICAg
IG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNldEZvY3VzZWROb2RlKG1fZWxlbWVudCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2
ZW50KSB7CisgICAgICAgICAgICByZWNvcmQud2hhdCA9IG1vdXNlVXA7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcmVjb3JkLndoZXJl
ID0gbW91c2VQb3NGb3JQbHVnaW4oZXZlbnQpOworICAgICAgICByZWNvcmQubW9kaWZpZXJzID0g
bW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQpOworICAgICAgICAKKyAgICAgICAgaWYgKCFldmVudC0+
YnV0dG9uRG93bigpKQorICAgICAgICAgICAgcmVjb3JkLm1vZGlmaWVycyB8PSBidG5TdGF0ZTsK
KyAgICAgICAgCisgICAgICAgIGlmIChldmVudC0+YnV0dG9uKCkgPT0gMikKKyAgICAgICAgICAg
IHJlY29yZC5tb2RpZmllcnMgfD0gY29udHJvbEtleTsKKyAgICAgICAgCisgICAgICAgIGlmICgh
ZGlzcGF0Y2hOUEV2ZW50KHJlY29yZCkpIHsKKyAgICAgICAgICAgIGlmIChyZWNvcmQud2hhdCA9
PSBOUEV2ZW50VHlwZV9BZGp1c3RDdXJzb3JFdmVudCkKKyAgICAgICAgICAgICAgICByZXR1cm47
IC8vIFNpZ25hbHMgdGhhdCB0aGUgcGx1Z2luIHdhbnRzIGEgbm9ybWFsIGN1cnNvcgorICAgICAg
ICAgICAgCisgICAgICAgICAgICBMT0coRXZlbnRzLCAiUGx1Z2luVmlldzo6aGFuZGxlTW91c2VF
dmVudCgpOiBNb3VzZSBldmVudCB0eXBlICVkIGF0ICVkLCVkIG5vdCBhY2NlcHRlZCIsCiAgICAg
ICAgICAgICAgICAgcmVjb3JkLndoYXQsIHJlY29yZC53aGVyZS5oLCByZWNvcmQud2hlcmUudik7
Ci0gICAgfSBlbHNlIHsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGV2ZW50LT5zZXRE
ZWZhdWx0SGFuZGxlZCgpOworICAgICAgICB9CisgICAgfSBlbHNlCisjZW5kaWYKKyAgICB7Cisg
ICAgICAgIE5QQ29jb2FFdmVudFR5cGUgZXZlbnRUeXBlOworICAgICAgICBpbnQzMl90IGJ1dHRv
bk51bWJlciA9IDA7CisgICAgICAgIGludDMyX3QgY2xpY2tDb3VudCA9IDA7CisgICAgICAgIE5T
RXZlbnQgKmN1cnJlbnRFdmVudCA9IFtOU0FwcCBjdXJyZW50RXZlbnRdOworICAgICAgICAKKyAg
ICAgICAgTlNFdmVudFR5cGUgdHlwZSA9IFtjdXJyZW50RXZlbnQgdHlwZV07CisgICAgICAgIAor
ICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgTlNMZWZ0TW91c2VEb3du
OgorICAgICAgICAgICAgY2FzZSBOU1JpZ2h0TW91c2VEb3duOgorICAgICAgICAgICAgY2FzZSBO
U090aGVyTW91c2VEb3duOgorICAgICAgICAgICAgICAgIGJ1dHRvbk51bWJlciA9IFtjdXJyZW50
RXZlbnQgYnV0dG9uTnVtYmVyXTsKKyAgICAgICAgICAgICAgICBjbGlja0NvdW50ID0gW2N1cnJl
bnRFdmVudCBjbGlja0NvdW50XTsKKyAgICAgICAgICAgICAgICBldmVudFR5cGUgPSBOUENvY29h
RXZlbnRNb3VzZURvd247CisgICAgICAgICAgICAgICAgLy8gVGhlIHBsdWdpbiBuZWVkcyBmb2N1
cyB0byByZWNlaXZlIGtleWJvYXJkIGV2ZW50cworICAgICAgICAgICAgICAgIGlmIChQYWdlKiBw
YWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQorICAgICAgICAgICAgICAgICAgICBwYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZEZyYW1lKG1fcGFyZW50RnJhbWUpOworICAgICAg
ICAgICAgICAgIG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNldEZvY3VzZWROb2RlKG1fZWxl
bWVudCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICBjYXNlIE5TTGVmdE1vdXNlVXA6CisgICAgICAgICAgICBjYXNlIE5TUmlnaHRNb3VzZVVw
OgorICAgICAgICAgICAgY2FzZSBOU090aGVyTW91c2VVcDoKKyAgICAgICAgICAgICAgICBidXR0
b25OdW1iZXIgPSBbY3VycmVudEV2ZW50IGJ1dHRvbk51bWJlcl07CisgICAgICAgICAgICAgICAg
Y2xpY2tDb3VudCA9IFtjdXJyZW50RXZlbnQgY2xpY2tDb3VudF07CisgICAgICAgICAgICAgICAg
ZXZlbnRUeXBlID0gTlBDb2NvYUV2ZW50TW91c2VVcDsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTlNNb3VzZU1vdmVkOgorICAgICAg
ICAgICAgICAgIGV2ZW50VHlwZSA9IE5QQ29jb2FFdmVudE1vdXNlTW92ZWQ7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIE5TTGVmdE1v
dXNlRHJhZ2dlZDoKKyAgICAgICAgICAgIGNhc2UgTlNSaWdodE1vdXNlRHJhZ2dlZDoKKyAgICAg
ICAgICAgIGNhc2UgTlNPdGhlck1vdXNlRHJhZ2dlZDoKKyAgICAgICAgICAgICAgICBidXR0b25O
dW1iZXIgPSBbY3VycmVudEV2ZW50IGJ1dHRvbk51bWJlcl07CisgICAgICAgICAgICAgICAgZXZl
bnRUeXBlID0gTlBDb2NvYUV2ZW50TW91c2VEcmFnZ2VkOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBOU01vdXNlRW50ZXJlZDoKKyAg
ICAgICAgICAgICAgICBldmVudFR5cGUgPSBOUENvY29hRXZlbnRNb3VzZUVudGVyZWQ7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIE5T
TW91c2VFeGl0ZWQ6CisgICAgICAgICAgICAgICAgZXZlbnRUeXBlID0gTlBDb2NvYUV2ZW50TW91
c2VFeGl0ZWQ7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTlBDb2NvYUV2ZW50IGNvY29hRXZlbnQ7Cisg
ICAgICAgIGluaXRpYWxpemVOUENvY29hRXZlbnQoJmNvY29hRXZlbnQpOworICAgICAgICAKKyAg
ICAgICAgY29jb2FFdmVudC50eXBlID0gZXZlbnRUeXBlOworICAgICAgICBpZiAoIShOUENvY29h
RXZlbnRNb3VzZUVudGVyZWQgPT0gZXZlbnRUeXBlIHx8IE5QQ29jb2FFdmVudE1vdXNlRXhpdGVk
ID09IGV2ZW50VHlwZSkpIHsKKyAgICAgICAgICAgIGNvY29hRXZlbnQuZGF0YS5tb3VzZS5idXR0
b25OdW1iZXIgPSBidXR0b25OdW1iZXI7CisgICAgICAgICAgICBjb2NvYUV2ZW50LmRhdGEubW91
c2UuY2xpY2tDb3VudCA9IGNsaWNrQ291bnQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGNvY29hRXZlbnQuZGF0YS5tb3VzZS5wbHVnaW5YID0gZXZlbnQtPmxheWVyWCgpIC0gbV9ucFdp
bmRvdy54ICsgbV93aW5kb3dSZWN0LngoKSAtIG1fZWxlbWVudC0+b2Zmc2V0TGVmdCgpOworICAg
ICAgICBjb2NvYUV2ZW50LmRhdGEubW91c2UucGx1Z2luWSA9IGV2ZW50LT5sYXllclkoKSAtIG1f
bnBXaW5kb3cueSArIG1fd2luZG93UmVjdC55KCkgLSBtX2VsZW1lbnQtPm9mZnNldFRvcCgpOwor
ICAgICAgICBjb2NvYUV2ZW50LmRhdGEubW91c2UuZGVsdGFYID0gW2N1cnJlbnRFdmVudCBkZWx0
YVhdOworICAgICAgICBjb2NvYUV2ZW50LmRhdGEubW91c2UuZGVsdGFZID0gW2N1cnJlbnRFdmVu
dCBkZWx0YVldOworICAgICAgICBjb2NvYUV2ZW50LmRhdGEubW91c2UuZGVsdGFaID0gW2N1cnJl
bnRFdmVudCBkZWx0YVpdOworICAgICAgICBjb2NvYUV2ZW50LmRhdGEubW91c2UubW9kaWZpZXJG
bGFncyA9IGdldE1vZGlmaWVycyhldmVudCk7CisgICAgICAgIAorICAgICAgICBpbnQxNl90IHJl
c3BvbnNlID0gZGlzcGF0Y2hOUENvY29hRXZlbnQoY29jb2FFdmVudCk7CisgICAgICAgIGlmKHJl
c3BvbnNlID0ga05QRXZlbnROb3RIYW5kbGVkKSB7CisgICAgICAgICAgICBMT0coRXZlbnRzLCAi
UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCgpOiBNb3VzZSBldmVudCB0eXBlICVkIGF0ICVk
LCVkIG5vdCBhY2NlcHRlZCIsIGNvY29hRXZlbnQudHlwZQorICAgICAgICAgICAgICAgIGNvY29h
RXZlbnQuZGF0YS5tb3VzZS54LCBjb2NvYUV2ZW50LmRhdGEubW91c2UueSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIC8vIFNhZmFyaSBwb2xpY3kgaXMgdG8gcmV0dXJuIHRydWUgZm9y
IGFsbCBtb3VzZSBldmVudHMsIGJlY2F1c2Ugc29tZSBwbHVnaW5zCisgICAgICAgIC8vIHJldHVy
biBmYWxzZSBldmVuIGlmIHRoZXkgaGF2ZSBoYW5kbGVkIHRoZSBldmVudC4KICAgICAgICAgZXZl
bnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgfQotI2VuZGlmCiB9Ci0KKyAgICAKIHZvaWQg
UGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKIHsK
ICAgICBpZiAoIW1faXNTdGFydGVkKQogICAgICAgICByZXR1cm47Ci0KICAgICBMT0coUGx1Z2lu
cywgIlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoKSAtLS0tLS0tLS0tLS0tLS0tLSAi
KTsKLQorICAgIAogICAgIExPRyhQbHVnaW5zLCAiUFY6OmhLRSgpOiBLRS5rZXlDb2RlOiAweCUw
MlgsIEtFLmNoYXJDb2RlOiAlZCIsCi0gICAgICAgICAgICBldmVudC0+a2V5Q29kZSgpLCBldmVu
dC0+Y2hhckNvZGUoKSk7Ci0KKyAgICAgICAgZXZlbnQtPmtleUNvZGUoKSwgZXZlbnQtPmNoYXJD
b2RlKCkpOworICAgIAogI2lmbmRlZiBOUF9OT19DQVJCT04KLSAgICBFdmVudFJlY29yZCByZWNv
cmQ7Ci0KLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50
KSB7Ci0gICAgICAgIC8vIFRoaXMgZXZlbnQgaXMgdGhlIHJlc3VsdCBvZiBhIFBsYXRmb3JtRXZl
bnQ6OktleURvd24gd2hpY2gKLSAgICAgICAgLy8gd2FzIGRpc2FtYmlndWF0ZWQgaW50byBhIFBs
YXRmb3JtS2V5Ym9hcmRFdmVudDo6UmF3S2V5RG93bi4gU2luY2UKLSAgICAgICAgLy8gd2UgZG9u
J3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHRleHQgaGVyZSwgd2UgcmV0dXJuLCBhbmQgd2FpdCBmb3Ig
dGhlCi0gICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgZXZlbnQgYmFzZWQgb24gUGxhdGZvcm1LZXli
b2FyZEV2ZW50OjpDaGFyLgotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7Ci0gICAgICAgIC8vIFdoaWNo
IHdvdWxkIGJlIHRoaXMgb25lLiBUaGlzIGV2ZW50IHdhcyBkaXNhbWJpZ3VhdGVkIGZyb20gdGhl
IHNhbWUKLSAgICAgICAgLy8gUGxhdGZvcm1FdmVudDo6S2V5RG93biwgYnV0IHRvIGEgUGxhdGZv
cm1FdmVudDo6Q2hhciwKLSAgICAgICAgLy8gd2hpY2ggcmV0YWlucyB0aGUgdGV4dCBmcm9tIHRo
ZSBvcmlnaW5hbCBldmVudC4gU28sIHdlIGNhbiBzYWZlbHkgcGFzcwotICAgICAgICAvLyBvbiB0
aGUgZXZlbnQgYXMgYSBrZXktZG93biBldmVudCB0byB0aGUgcGx1Z2luLgotICAgICAgICByZWNv
cmQud2hhdCA9IGtleURvd247Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5rZXl1cEV2ZW50KSB7Ci0gICAgICAgIC8vIFBsYXRmb3JtRXZlbnQ6OktleVVwIGV2
ZW50cyBhbHdheXMgaGF2ZSB0aGUgdGV4dCwgc28gbm90aGluZwotICAgICAgICAvLyBmYW5jeSBo
ZXJlLgotICAgICAgICByZWNvcmQud2hhdCA9IGtleVVwOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIHBsYXRm
b3JtRXZlbnQgPSBldmVudC0+a2V5RXZlbnQoKTsKLSAgICBpbnQga2V5Q29kZSA9IHBsYXRmb3Jt
RXZlbnQtPm5hdGl2ZVZpcnR1YWxLZXlDb2RlKCk7Ci0KLSAgICBjb25zdCBTdHJpbmcgdGV4dCA9
IHBsYXRmb3JtRXZlbnQtPnRleHQoKTsKLSAgICBpZiAodGV4dC5sZW5ndGgoKSA8IDEpIHsKLSAg
ICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBXVEY6OlJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZUZXh0KFdURjo6QWRvcHRDRiwg
dGV4dC5jcmVhdGVDRlN0cmluZygpKTsKLQotICAgIExPRyhQbHVnaW5zLCAiUFY6OmhLRSgpOiBQ
S0UudGV4dDogJXMsIFBLRS51bm1vZGlmaWVkVGV4dDogJXMsIFBLRS5rZXlJZGVudGlmaWVyOiAl
cyIsCisgICAgaWYgKG1fZXZlbnRNb2RlbCAhPSBOUEV2ZW50TW9kZWxDb2NvYSkgeworICAgICAg
ICBFdmVudFJlY29yZCByZWNvcmQ7CisgICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgZXZlbnQgaXMgdGhl
IHJlc3VsdCBvZiBhIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6S2V5RG93biB3aGljaAorICAgICAg
ICAgICAgLy8gd2FzIGRpc2FtYmlndWF0ZWQgaW50byBhIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6
UmF3S2V5RG93bi4gU2luY2UKKyAgICAgICAgICAgIC8vIHdlIGRvbid0IGhhdmUgYWNjZXNzIHRv
IHRoZSB0ZXh0IGhlcmUsIHdlIHJldHVybiwgYW5kIHdhaXQgZm9yIHRoZQorICAgICAgICAgICAg
Ly8gY29ycmVzcG9uZGluZyBldmVudCBiYXNlZCBvbiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkNo
YXIuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCkgeworICAgICAgICAgICAgLy8gV2hpY2gg
d291bGQgYmUgdGhpcyBvbmUuIFRoaXMgZXZlbnQgd2FzIGRpc2FtYmlndWF0ZWQgZnJvbSB0aGUg
c2FtZQorICAgICAgICAgICAgLy8gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpLZXlEb3duLCBidXQg
dG8gYSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkNoYXIsCisgICAgICAgICAgICAvLyB3aGljaCBy
ZXRhaW5zIHRoZSB0ZXh0IGZyb20gdGhlIG9yaWdpbmFsIGV2ZW50LiBTbywgd2UgY2FuIHNhZmVs
eSBwYXNzCisgICAgICAgICAgICAvLyBvbiB0aGUgZXZlbnQgYXMgYSBrZXktZG93biBldmVudCB0
byB0aGUgcGx1Z2luLgorICAgICAgICAgICAgcmVjb3JkLndoYXQgPSBrZXlEb3duOworICAgICAg
ICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXVwRXZlbnQpIHsK
KyAgICAgICAgICAgIC8vIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6S2V5VXAgZXZlbnRzIGFsd2F5
cyBoYXZlIHRoZSB0ZXh0LCBzbyBub3RoaW5nCisgICAgICAgICAgICAvLyBmYW5jeSBoZXJlLgor
ICAgICAgICAgICAgcmVjb3JkLndoYXQgPSBrZXlVcDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY29uc3QgUGxhdGZv
cm1LZXlib2FyZEV2ZW50KiBwbGF0Zm9ybUV2ZW50ID0gZXZlbnQtPmtleUV2ZW50KCk7CisgICAg
ICAgIGludCBrZXlDb2RlID0gcGxhdGZvcm1FdmVudC0+bmF0aXZlVmlydHVhbEtleUNvZGUoKTsK
KyAgICAgICAgCisgICAgICAgIGNvbnN0IFN0cmluZyB0ZXh0ID0gcGxhdGZvcm1FdmVudC0+dGV4
dCgpOworICAgICAgICBpZiAodGV4dC5sZW5ndGgoKSA8IDEpIHsKKyAgICAgICAgICAgIGV2ZW50
LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBXVEY6OlJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZUZXh0KFdURjo6
QWRvcHRDRiwgdGV4dC5jcmVhdGVDRlN0cmluZygpKTsKKyAgICAgICAgCisgICAgICAgIExPRyhQ
bHVnaW5zLCAiUFY6OmhLRSgpOiBQS0UudGV4dDogJXMsIFBLRS51bm1vZGlmaWVkVGV4dDogJXMs
IFBLRS5rZXlJZGVudGlmaWVyOiAlcyIsCiAgICAgICAgICAgICB0ZXh0LmFzY2lpKCkuZGF0YSgp
LCBwbGF0Zm9ybUV2ZW50LT51bm1vZGlmaWVkVGV4dCgpLmFzY2lpKCkuZGF0YSgpLAogICAgICAg
ICAgICAgcGxhdGZvcm1FdmVudC0+a2V5SWRlbnRpZmllcigpLmFzY2lpKCkuZGF0YSgpKTsKLQot
ICAgIGNoYXIgY2hhckNvZGVzWzJdID0geyAwLCAwIH07Ci0gICAgaWYgKCFDRlN0cmluZ0dldENT
dHJpbmcoY2ZUZXh0LmdldCgpLCBjaGFyQ29kZXMsIDIsIENGU3RyaW5nR2V0U3lzdGVtRW5jb2Rp
bmcoKSkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcmVzb2x2ZSBjaGFyYWN0ZXIg
Y29kZSB1c2luZyBzeXN0ZW0gZW5jb2RpbmcuIik7Ci0gICAgICAgIGV2ZW50LT5zZXREZWZhdWx0
SGFuZGxlZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVjb3JkLndoZXJlID0g
Z2xvYmFsTW91c2VQb3NGb3JQbHVnaW4oKTsKLSAgICByZWNvcmQubW9kaWZpZXJzID0gbW9kaWZp
ZXJzRm9yRXZlbnQoZXZlbnQpOwotICAgIHJlY29yZC5tZXNzYWdlID0gKChrZXlDb2RlICYgMHhG
RikgPDwgOCkgfCAoY2hhckNvZGVzWzBdICYgMHhGRik7Ci0gICAgcmVjb3JkLndoZW4gPSBUaWNr
Q291bnQoKTsKLQotICAgIExPRyhQbHVnaW5zLCAiUFY6OmhLRSgpOiByZWNvcmQubW9kaWZpZXJz
OiAlZCIsIHJlY29yZC5tb2RpZmllcnMpOwotCisgICAgICAgIAorICAgICAgICBjaGFyIGNoYXJD
b2Rlc1syXSA9IHsgMCwgMCB9OworICAgICAgICBpZiAoIUNGU3RyaW5nR2V0Q1N0cmluZyhjZlRl
eHQuZ2V0KCksIGNoYXJDb2RlcywgMiwgQ0ZTdHJpbmdHZXRTeXN0ZW1FbmNvZGluZygpKSkgewor
ICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcmVzb2x2ZSBjaGFyYWN0ZXIgY29kZSB1
c2luZyBzeXN0ZW0gZW5jb2RpbmcuIik7CisgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhh
bmRsZWQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgcmVjb3JkLndoZXJlID0gZ2xvYmFsTW91c2VQb3NGb3JQbHVnaW4oKTsKKyAgICAgICAgcmVj
b3JkLm1vZGlmaWVycyA9IG1vZGlmaWVyc0ZvckV2ZW50KGV2ZW50KTsKKyAgICAgICAgcmVjb3Jk
Lm1lc3NhZ2UgPSAoKGtleUNvZGUgJiAweEZGKSA8PCA4KSB8IChjaGFyQ29kZXNbMF0gJiAweEZG
KTsKKyAgICAgICAgcmVjb3JkLndoZW4gPSBUaWNrQ291bnQoKTsKKyAgICAgICAgCisgICAgICAg
IExPRyhQbHVnaW5zLCAiUFY6OmhLRSgpOiByZWNvcmQubW9kaWZpZXJzOiAlZCIsIHJlY29yZC5t
b2RpZmllcnMpOworICAgICAgICAKICNpZiBQTEFURk9STShRVCkKLSAgICBMT0coUGx1Z2lucywg
IlBWOjpoS0UoKTogUEtFLnF0RXZlbnQoKS0+bmF0aXZlVmlydHVhbEtleTogMHglMDJYLCBjaGFy
Q29kZTogJWQiLAotICAgICAgICAgICAgICAga2V5Q29kZSwgaW50KHVjaGFyKGNoYXJDb2Rlc1sw
XSkpKTsKLSNlbmRpZgotCi0gICAgaWYgKCFkaXNwYXRjaE5QRXZlbnQocmVjb3JkKSkKLSAgICAg
ICAgTE9HKEV2ZW50cywgIlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoKTogS2V5Ym9h
cmQgZXZlbnQgdHlwZSAlZCBub3QgYWNjZXB0ZWQiLCByZWNvcmQud2hhdCk7Ci0gICAgZWxzZQot
ICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgTE9HKFBsdWdpbnMs
ICJQVjo6aEtFKCk6IFBLRS5xdEV2ZW50KCktPm5hdGl2ZVZpcnR1YWxLZXk6IDB4JTAyWCwgY2hh
ckNvZGU6ICVkIiwKKyAgICAgICAgICAgIGtleUNvZGUsIGludCh1Y2hhcihjaGFyQ29kZXNbMF0p
KSk7CiAjZW5kaWYKKyAgICAgICAgCisgICAgICAgIGlmICghZGlzcGF0Y2hOUEV2ZW50KHJlY29y
ZCkpCisgICAgICAgICAgICBMT0coRXZlbnRzLCAiUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRF
dmVudCgpOiBLZXlib2FyZCBldmVudCB0eXBlICVkIG5vdCBhY2NlcHRlZCIsIHJlY29yZC53aGF0
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7
CisgICAgfSBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIE5TRXZlbnQgKmN1cnJlbnRFdmVu
dCA9IFtOU0FwcCBjdXJyZW50RXZlbnRdOworICAgICAgICBOUENvY29hRXZlbnRUeXBlIGV2ZW50
VHlwZTsKKyAgICAgICAgTlNFdmVudFR5cGUgdHlwZSA9IFtjdXJyZW50RXZlbnQgdHlwZV07Cisg
ICAgICAgIAorICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgTlNLZXlE
b3duOgorICAgICAgICAgICAgICAgIGV2ZW50VHlwZSA9IE5QQ29jb2FFdmVudEtleURvd247Cisg
ICAgICAgICAgICAgICAgbV9rZXlEb3duU2VudCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIE5TS2V5VXA6CisgICAgICAgICAgICAgICAgaWYgKG1fZGlz
cmVnYXJkS2V5VXBDb3VudGVyID4gMCkgeworICAgICAgICAgICAgICAgICAgICBtX2Rpc3JlZ2Fy
ZEtleVVwQ291bnRlci0tOworICAgICAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhh
bmRsZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBldmVudFR5cGUgPSBOUENvY29hRXZlbnRLZXlVcDsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTlNGbGFnc0NoYW5nZWQ6CisgICAgICAg
ICAgICAgICAgZXZlbnRUeXBlID0gTlBDb2NvYUV2ZW50RmxhZ3NDaGFuZ2VkOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE5QQ29jb2FFdmVudCBjb2NvYUV2ZW50
OworICAgICAgICBpbml0aWFsaXplTlBDb2NvYUV2ZW50KCZjb2NvYUV2ZW50KTsKKyAgICAgICAg
Y29jb2FFdmVudC50eXBlID0gZXZlbnRUeXBlOworICAgICAgICBpZiAoZXZlbnRUeXBlICE9IE5Q
Q29jb2FFdmVudEZsYWdzQ2hhbmdlZCkgeworICAgICAgICAgICAgTlNTdHJpbmcgKmNoYXJhY3Rl
cnMgPSBbY3VycmVudEV2ZW50IGNoYXJhY3RlcnNdOworICAgICAgICAgICAgTlNTdHJpbmcgKmNo
YXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycyA9IFtjdXJyZW50RXZlbnQgY2hhcmFjdGVyc0lnbm9y
aW5nTW9kaWZpZXJzXTsKKyAgICAgICAgICAgIGNvY29hRXZlbnQuZGF0YS5rZXkuY2hhcmFjdGVy
cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8TlBOU1N0cmluZyo+KGNoYXJhY3RlcnMpOworICAgICAgICAg
ICAgY29jb2FFdmVudC5kYXRhLmtleS5jaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMgPSByZWlu
dGVycHJldF9jYXN0PE5QTlNTdHJpbmcqPihjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMpOwor
ICAgICAgICAgICAgY29jb2FFdmVudC5kYXRhLmtleS5pc0FSZXBlYXQgPSBbY3VycmVudEV2ZW50
IGlzQVJlcGVhdF07CisgICAgICAgICAgICBjb2NvYUV2ZW50LmRhdGEua2V5LmtleUNvZGUgPSBb
Y3VycmVudEV2ZW50IGtleUNvZGVdOworICAgICAgICAgICAgY29jb2FFdmVudC5kYXRhLmtleS5t
b2RpZmllckZsYWdzID0gZ2V0TW9kaWZpZXJzKGV2ZW50KTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaW50MTZfdCByZXNwb25zZSA9IGRpc3BhdGNoTlBDb2NvYUV2ZW50KGNvY29hRXZl
bnQpOworICAgICAgICBpZihyZXNwb25zZSA9PSBrTlBFdmVudE5vdEhhbmRsZWQpIHsKKyAgICAg
ICAgICAgIExPRyhFdmVudHMsICJQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KCk6IEtl
eWJvYXJkIGV2ZW50IHR5cGUgJWQgbm90IGFjY2VwdGVkIiwgY29jb2FFdmVudC50eXBlKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChyZXNwb25zZSA9PSBrTlBFdmVudFN0YXJ0SU1FKSB7CisgICAgICAg
ICAgICAvLyBpbmNyZW1lbnQgY291bnRlciBhbmQgcmVzZW5kIGFzIGEgdGV4dCBpbnB1dAorICAg
ICAgICAgICAgbV9kaXNyZWdhcmRLZXlVcENvdW50ZXIrKzsKKyAgICAgICAgICAgIE5QQ29jb2FF
dmVudCB0ZXh0RXZlbnQ7CisgICAgICAgICAgICBpbml0aWFsaXplTlBDb2NvYUV2ZW50KCZ0ZXh0
RXZlbnQpOworICAgICAgICAgICAgdGV4dEV2ZW50LnR5cGUgPSBOUENvY29hRXZlbnRUZXh0SW5w
dXQ7CisgICAgICAgICAgICB0ZXh0RXZlbnQuZGF0YS50ZXh0LnRleHQgPSByZWludGVycHJldF9j
YXN0PE5QTlNTdHJpbmcqPihbY3VycmVudEV2ZW50IGNoYXJhY3RlcnNdKTsKKyAgICAgICAgICAg
IHJlc3BvbnNlID0gZGlzcGF0Y2hOUENvY29hRXZlbnQodGV4dEV2ZW50KTsKKyAgICAgICAgICAg
IGlmKHJlc3BvbnNlID09IGtOUEV2ZW50Tm90SGFuZGxlZCkKKyAgICAgICAgICAgICAgICBMT0co
RXZlbnRzLCAiUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudCgpOiBLZXlib2FyZCBldmVu
dCB0eXBlICVkIG5vdCBhY2NlcHRlZCIsIGNvY29hRXZlbnQudHlwZSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIC8vIEFsbCBrZXlib2FyZCBldmVudHMgbmVlZCB0byBiZSBoYW5kbGVk
IHRvIHByZXZlbnQgdGhlbSBmYWxsaW5nCisgICAgICAgIC8vIHRocm91Z2ggdG8gdGhlIHBhZ2Us
IHVubGVzcyB0aGV5IGFyZSBNZXRhIGtleSBldmVudHMsIGluIHdoaWNoCisgICAgICAgIC8vIGNh
c2UgdGhleSBhcmUsIHVubGVzcyB0aGV5IGFyZSBDbWQrYS4gRnJvbSBXZWJLaXQyLCBwb3NzaWJs
eQorICAgICAgICAvLyBub3QgdGhlIG1vc3QgZWxlZ2FudCBwaWVjZSBvZiBrZXkgaGFuZGxpbmcg
Y29kZS4uLi4uCisgICAgICAgIGlmIChldmVudC0+bWV0YUtleSgpKSB7CisgICAgICAgICAgICBp
ZiAoY29jb2FFdmVudC5kYXRhLmtleS5rZXlDb2RlID09IDApCisgICAgICAgICAgICAgICAgZXZl
bnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBlbHNlIGlnbm9yZSwgaXQncyBhIE1ldGEgS2V5IGV2ZW50IGZvciB0aGUgYnJvd3Nlci4KKyAg
ICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICB9CisgICAgfQog
fQotCisgICAgCiAjaWZuZGVmIE5QX05PX0NBUkJPTgogdm9pZCBQbHVnaW5WaWV3OjpudWxsRXZl
bnRUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXc+KikKIHsKQEAgLTc4Miw2ICsxMDcxLDIxIEBA
IGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQKIH0KICNlbmRpZgogCisK
K2ludDE2X3QgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUENvY29hRXZlbnQoTlBDb2NvYUV2ZW50JiBj
b2NvYUV2ZW50KQoreworICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMp
OworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworCisgICAgaW50
MTZfdCByZXNwb25zZSA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNl
LCAmY29jb2FFdmVudCk7CisKKyAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAgICBQbHVn
aW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKKworICAgIHJldHVybiByZXNwb25zZTsK
K30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzICAtLS0tLS0tLS0tLS0t
LS0tLS0KIAogTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNo
YXI+JiBidWZmZXIsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmKQo=
</data>
<flag name="review"
          id="177373"
          type_id="1"
          status="+"
          setter="hausmann"
    />
          </attachment>
      

    </bug>

</bugzilla>