<?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>79150</bug_id>
          
          <creation_ts>2012-02-21 14:45:53 -0800</creation_ts>
          <short_desc>[chromium] Add Link Preview behavior to WebViewImpl</short_desc>
          <delta_ts>2012-08-15 22:18:13 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>94182</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>84936</dependson>
    
    <dependson>85725</dependson>
    
    <dependson>92997</dependson>
          <blocked>66687</blocked>
    
    <blocked>91648</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Michael Feldstein">feldstein</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>feldstein</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>trchen</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>561239</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Feldstein">feldstein</who>
    <bug_when>2012-02-21 14:45:53 -0800</bug_when>
    <thetext>[chromium] Add Link Preview behavior to WebViewImpl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561241</commentid>
    <comment_count>1</comment_count>
      <attachid>128049</attachid>
    <who name="Michael Feldstein">feldstein</who>
    <bug_when>2012-02-21 14:47:51 -0800</bug_when>
    <thetext>Created attachment 128049
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561278</commentid>
    <comment_count>2</comment_count>
      <attachid>128058</attachid>
    <who name="Michael Feldstein">feldstein</who>
    <bug_when>2012-02-21 15:25:56 -0800</bug_when>
    <thetext>Created attachment 128058
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561330</commentid>
    <comment_count>3</comment_count>
      <attachid>128058</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-21 16:10:00 -0800</bug_when>
    <thetext>Comment on attachment 128058
Patch

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

&gt; Source/WebKit/chromium/public/WebView.h:35
&gt; +#if defined(ANDROID)

This functionality probably shouldn&apos;t be dependent on ANDROID.  It should be available all the time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561334</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-21 16:11:19 -0800</bug_when>
    <thetext>fishd should probably review this patch.

The main question here is which layer should do this work.  You&apos;re adding a lot of code to the WebKit layer, which is something we usually try to avoid.  It&apos;s unclear to me whether this work should move into WebCore or should be moved into the embedder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561367</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Feldstein">feldstein</who>
    <bug_when>2012-02-21 16:38:03 -0800</bug_when>
    <thetext>Let me know if there&apos;s a better place to put this and I&apos;ll try to change it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563855</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2012-02-23 19:52:49 -0800</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563948</commentid>
    <comment_count>7</comment_count>
      <attachid>128058</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-02-23 22:47:51 -0800</bug_when>
    <thetext>Comment on attachment 128058
Patch

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

&gt;&gt; Source/WebKit/chromium/public/WebView.h:35
&gt;&gt; +#if defined(ANDROID)
&gt; 
&gt; This functionality probably shouldn&apos;t be dependent on ANDROID.  It should be available all the time.

Agreed.

&gt; Source/WebKit/chromium/public/WebView.h:44
&gt; +struct WebTouchCandidatesInfo {

style nits:
1- each top-level type gets its own header file.
2- this struct should be declared within the WebKit namespace.

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:3183
&gt; +struct TouchNodeData {

This is way too much code to be adding to WebView.  You need to refactor this into some self-contained piece.

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:3184
&gt; +    Node* mNode;

style nit: public member variables do not have a &quot;m&quot; prefix.  they just use normal variable naming style.

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:3318
&gt; +    outTouchInfo-&gt;numberOfCandidates = 0;

nit: this function is massive.  it needs to be decomposed into smaller units.

I&apos;m not sure how to best advise you on improving the design here.  It might help
to step back and have you educate a WebKit reviewer about what you are trying to
accomplish.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>619180</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-05-08 22:44:55 -0700</bug_when>
    <thetext>Michael, do you have thoughts on fishd&apos;s comments above?  I tend to agree with fishd that 230 line functions are too large to be maintainable.  The path forward here is likely to discuss how best to factor this code into something more maintainable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>619912</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Feldstein">feldstein</who>
    <bug_when>2012-05-09 15:26:46 -0700</bug_when>
    <thetext>I no longer work on this.  I&apos;ll ask the new owner to follow up on it.

We did talk about a design where all the code is moved into the client, and WebView would just expose a hitTestWithPadding method, which would minimize the amount of code needed in webkit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>619918</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-05-09 15:29:26 -0700</bug_when>
    <thetext>Who is the new owner?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>619920</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Feldstein">feldstein</who>
    <bug_when>2012-05-09 15:30:47 -0700</bug_when>
    <thetext>Tien-Ren Chen I believe.  I&apos;ve forwarded the bug to him.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>619944</commentid>
    <comment_count>12</comment_count>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-05-09 15:52:45 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; I no longer work on this.  I&apos;ll ask the new owner to follow up on it.

Hi all, I&apos;ll be responsible for upstreaming our link preview code.

(In reply to comment #8)
&gt; Michael, do you have thoughts on fishd&apos;s comments above?  I tend to agree with fishd that 230 line functions are too large to be maintainable.  The path forward here is likely to discuss how best to factor this code into something more maintainable.

Totally agree. Our WebViewImpl::getTouchHighlightQuads function is multiplexed with too many functionality at this time, including
* hit test &amp; touch targets disambiguation
* find out the highlight quads (when only 1 touch target is available)
* find out a reasonable rect for link preview (when 2 or more touch targets are available)

Currently I&apos;m working on the first and second part, cooperating with CrOS people who also want link highlighting.

For the hit test &amp; disambiguation code I&apos;m still trying to understand it and refactor it. In the meantime the CrOS people will reuse EventHandler.cpp::findBestClickableCandidate.

The highlight quads code has been rewritten to support threaded scrolling/animation, currently waiting for review:
https://bugs.webkit.org/show_bug.cgi?id=84936 --- depends on --&gt; https://bugs.webkit.org/show_bug.cgi?id=85725

As for link preview, I&apos;m not certain what is the current plan on this. As far as I know we&apos;re going to allow panning in the preview area, and move much of the functionality into the compositor. Need to discuss that after getting the highlight to work first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>619952</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-05-09 16:00:59 -0700</bug_when>
    <thetext>Hi trchen.  If you run into any difficulty getting patches reviewed, please let me know.  I can help you find appropriate reviews.  Thanks for picking up this work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696710</commentid>
    <comment_count>14</comment_count>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-08-15 21:14:15 -0700</bug_when>
    <thetext>The work has been replaced by https://bugs.webkit.org/show_bug.cgi?id=94182</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696743</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-15 22:18:13 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 94182 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128049</attachid>
            <date>2012-02-21 14:47:51 -0800</date>
            <delta_ts>2012-02-21 15:25:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79150-20120221144750.patch</filename>
            <type>text/plain</type>
            <size>27377</size>
            <attacher name="Michael Feldstein">feldstein</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3OTg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGUxZmMyZjkxYjAzNWQyODMzOWJhZTJmYzg2OWIyYzAxNDViNjY3ZGIuLmNlOGVlMTU3YmZmMGMw
ZjhkNjNjMmMxZmFlODZkNTE5MWRmYTMwYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTItMDItMjEgIE1pY2hhZWwgRmVsZHN0ZWluICA8ZmVsZHN0ZWlu
QGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEFkZCBMaW5rIFByZXZpZXcgYmVo
YXZpb3IgdG8gV2ViVmlld0ltcGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc5MTUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBwdWJsaWMvV2ViVmlldy5oOgorICAgICAgICAoV2ViVG91Y2hDYW5kaWRh
dGVzSW5mbyk6CisgICAgICAgIChXZWJWaWV3KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnBh
aW50TGlua1ByZXZpZXcpOgorICAgICAgICAoVG91Y2hOb2RlRGF0YSk6CisgICAgICAgIChXZWJL
aXQ6OlRvdWNoTm9kZURhdGE6OlRvdWNoTm9kZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpnZXRF
ZmZlY3RpdmVUb3VjaFRhcmdldHMpOgorICAgICAgICAoV2ViS2l0OjpmaW5kQmVzdFRvdWNoTm9k
ZSk6CisgICAgICAgIChXZWJLaXQ6OmdldFNtYWxsZXN0RGltZW5zaW9uKToKKyAgICAgICAgKFdl
YktpdDo6YWJzb2x1dGVRdWFkc1JlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJ
bXBsOjpnZXRUb3VjaEhpZ2hsaWdodFF1YWRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6OnNob3dUb3VjaEhpZ2hsaWdodFF1YWRzKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwu
aDoKKyAgICAgICAgKFdlYlZpZXdJbXBsKToKKwogMjAxMi0wMi0xNiAgRGFuaWVsIENoZW5nICA8
ZGNoZW5nQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIEFkZCBXRUJLSVRfRVhQ
T1JUIHRvIG5ldyBXZWJEcmFnRGF0YSBtZXRob2RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViVmlldy5oCmluZGV4IGVkODUzZTIzYTc3NWRmNDliNDEzNzBkYzliYmM3MGI2MDBiNWUw
MTYuLmNkZDM3YzAyOTdkM2NhZjhjNjI3ZTVkZDQ4YjRhMGJlMjhmMWU2YjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKQEAgLTMyLDExICszMiwzMiBAQAogI2RlZmlu
ZSBXZWJWaWV3X2gKIAogI2luY2x1ZGUgIldlYkRyYWdPcGVyYXRpb24uaCIKKyNpZiBkZWZpbmVk
KEFORFJPSUQpCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViRmxvYXRRdWFkLmgiCisjZW5kaWYKICNp
bmNsdWRlICJXZWJQYWdlVmlzaWJpbGl0eVN0YXRlLmgiCiAjaW5jbHVkZSAiV2ViV2lkZ2V0Lmgi
CiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2Vi
VmVjdG9yLmgiCiAKKyNpZiBkZWZpbmVkKEFORFJPSUQpCitzdHJ1Y3QgV2ViVG91Y2hDYW5kaWRh
dGVzSW5mbyB7CisgICAgLy8gVGhlIG51bWJlciBvZiBwb3NzaWJsZSB0b3VjaCByZWNlaXZlcnMg
ZnJvbSB0aGUgbGFzdCB0b3VjaC4gVGhpcyBpcyB1c2VkCisgICAgLy8gaW4gT25TaW5nbGVUYXAg
aW4gb3JkZXIgdG8ga25vdyB3aGV0aGVyIG9yIG5vdCB0aGUgdGFwIHNob3VsZCBnbyB0aHJvdWdo
LgorICAgIC8vIElmIGl0IGlzIG1vcmUgdGhhbiAxLCB0aGUgdGFwIHNob3VsZCBub3QgZ28gdGhy
b3VnaCwgYXMgdGhlIExpbmsgUHJldmlldworICAgIC8vIHNob3VsZCBiZSB1c2VkIGluc3RlYWQs
IGFsbG93aW5nIHRoZSB1c2VyIHRvIGNsYXJpZnkuCisgICAgaW50IG51bWJlck9mQ2FuZGlkYXRl
czsKKyAgICAvLyBUaGUgYm91bmRzIG9mIHRoZSBwb3NzaWJsZSB0b3VjaCBjYW5kaWRhdGVzLiBU
aGlzIHdpbGwgZW5jb21wYXNzIHRoZQorICAgIC8vIHRvdGFsaXR5IG9mIGFueSBwb3NzaWJsZSB0
b3VjaCBjYW5kaWRhdGVzIGZvciBhIHByZXNzLgorICAgIFdlYktpdDo6V2ViUmVjdCB1bml0ZWRC
b3VuZHM7CisgICAgLy8gVGhlIHNtYWxsZXN0IGRpbWVuc2lvbiAoZWl0aGVyIHdpZHRoIG9yIGhl
aWdodCkgb2YgYW55IG9mIHRoZQorICAgIC8vIGF2YWlsYWJsZSB0b3VjaCB0YXJnZXRzLiBUaGlz
IGlzIHVzZWQgd2l0aCBMaW5rIFByZXZpZXcgdG8KKyAgICAvLyBkZXRlcm1pbmUgdGhlIG1pbmlt
dW0gYW1vdW50IG5lZWRlZCB0byBzY2FsZSB0byBnZXQgaXQgdXAgdG8gYQorICAgIC8vIHRvdWNo
YWJsZSBzaXplLgorICAgIGludCBzbWFsbGVzdERpbWVuc2lvbjsKK307CisjZW5kaWYKKwogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q7CkBAIC00MjMs
NiArNDQ0LDMzIEBAIHB1YmxpYzoKICAgICAvLyBBUElzLgogICAgIHZpcnR1YWwgV2ViR3JhcGhp
Y3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgPSAwOwogCisjaWYgZGVmaW5lZChBTkRS
T0lEKQorCisgICAgLy8gVG91Y2ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvLyBSZXR1cm5zIGEgbGlzdCBvZiBs
YXlvdXQgYm91bmRpbmcgYm94IG9mIHRoZSBldmVudCB0YXJnZXQgbm9kZSB0b3VjaGVkIGJ5Cisg
ICAgLy8gdGhlIGlucHV0IHBvaW50IHdpdGggdGhlIHBhZGRpbmcuIElmIG5vIHRhcmdldCBub2Rl
IGlzIGZvdW5kLCBhbiBlbXB0eQorICAgIC8vIGxpc3QgaXMgcmV0dXJuZWQuIElmIHRoZSBub2Rl
IGlzIGlubGluZSB0eXBlLCBlYWNoIGxpbmUgYm94IGlzIHJldHVybmVkCisgICAgLy8gc2VwYXJh
dGVseS4gT3RoZXJ3aXNlLCBvbmUgYm91bmRpbmcgYm94IGlzIHJldHVybmVkLgorICAgIC8vIEFs
c28gcmV0dXJucyB0aGUgbnVtYmVyIG9mIHRvdWNoIHRvdWNoIG5vZGVzIHRoYXQgbWF5IGhhdmUg
YmVlbgorICAgIC8vIGNhbmRpZGF0ZXMgZm9yIHRoaXMgcG9pbnQuIFRoaXMgbnVtYmVyIGlzIHVz
ZWQgYnkgUmVuZGVyVmlldyB0byBzaG93CisgICAgLy8gdGhlIExpbmsgUHJldmlldyBwb3B1cC4K
KyAgICAvLyBBbHNvIHJldHVybnMgdGhlIGJvdW5kcyBvZiBhbGwgdGhlIHRvdWNoIG5vZGVzIHRo
YXQgbWF5IGhhdmUgYmVlbgorICAgIC8vIGNhbmRpZGF0ZXMsIHRvIGFsbG93IGZvciBhY2N1cmF0
ZSB6b29taW5nIGNvbnRhaW5pbmcgZWFjaCBub2RlLgorICAgIHZpcnR1YWwgV2ViVmVjdG9yPFdl
YkZsb2F0UXVhZD4gZ2V0VG91Y2hIaWdobGlnaHRRdWFkcyhjb25zdCBXZWJQb2ludCYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBwYWRkaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJUb3VjaENhbmRpZGF0ZXNJbmZvKiBvdXRUb3VjaEluZm8sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YkNvbG9yJiBvdXRUYXBIaWdobGlnaHRDb2xvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApID0gMDsKKworICAgIC8vIFJldHVybnMg
dGhlIGxpc3Qgb2YgcXVhZHMgcmVxdWlyZWQgdG8gaGlnaGxpZ2h0IGEgZ2l2ZW4gdGV4dCByYW5n
ZS4KKyAgICB2aXJ0dWFsIFdlYlZlY3RvcjxXZWJGbG9hdFF1YWQ+IGdldFRvdWNoSGlnaGxpZ2h0
UXVhZHMoY29uc3QgV2ViUmFuZ2UmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb2xvciYgb3V0VGFwSGlnaGxpZ2h0Q29sb3Ip
ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzaG93VG91Y2hIaWdobGlnaHRRdWFkcyhjb25zdCBX
ZWJWZWN0b3I8V2ViRmxvYXRRdWFkPiYgaGlnaGxpZ2h0LCBXZWJDb2xvciBoaWdobGlnaHRDb2xv
cikgPSAwOworCisjZW5kaWYKKwogICAgIC8vIFZpc2liaWxpdHkgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIC8vIFNldHMg
dGhlIHZpc2liaWxpdHkgb2YgdGhlIFdlYlZpZXcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggZWYxMDY0M2NiZWM2ZTQ4NjRmMWE4NjkyZWU5MGU2MDVm
OTQ2ZDRmNy4uZGZkYjhlNDBiNTgxZmY1NDNjZjMwMDM5YzE3MTY4YTQ2NTUwM2EwYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMTIzMiw2ICsxMjMy
LDIwIEBAIHZvaWQgV2ViVmlld0ltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBX
ZWJSZWN0JiByZWN0KQogICAgIH0KIH0KIAorI2lmIE9TKEFORFJPSUQpCit2b2lkIFdlYlZpZXdJ
bXBsOjpwYWludExpbmtQcmV2aWV3KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiBy
ZWN0KQoreworICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7Cisg
ICAgaWYgKHdlYmZyYW1lKSB7CisgICAgICAgIEZyYW1lVmlldyogdmlldyA9IHBhZ2UoKS0+bWFp
bkZyYW1lKCktPnZpZXcoKTsKKyAgICAgICAgUGFpbnRCZWhhdmlvciBvbGRCZWhhdmlvciA9IHZp
ZXctPnBhaW50QmVoYXZpb3IoKTsKKyAgICAgICAgdmlldy0+c2V0UGFpbnRCZWhhdmlvcihvbGRC
ZWhhdmlvciB8IFBhaW50QmVoYXZpb3JGbGF0dGVuQ29tcG9zaXRpbmdMYXllcnMpOworICAgICAg
ICB3ZWJmcmFtZS0+cGFpbnQoY2FudmFzLCByZWN0KTsKKyAgICAgICAgdmlldy0+c2V0UGFpbnRC
ZWhhdmlvcihvbGRCZWhhdmlvcik7CisgICAgfQorfQorI2VuZGlmCisKIHZvaWQgV2ViVmlld0lt
cGw6OnRoZW1lQ2hhbmdlZCgpCiB7CiAgICAgaWYgKCFwYWdlKCkpCkBAIC0zMTY0LDYgKzMxNzgs
NDE2IEBAIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBXZWJWaWV3SW1wbDo6Z3JhcGhpY3NDb250ZXh0
M0QoKQogICAgIHJldHVybiAwOwogfQogCisjaWYgT1MoQU5EUk9JRCkKKworc3RydWN0IFRvdWNo
Tm9kZURhdGEgeworICAgIE5vZGUqIG1Ob2RlOworICAgIEludFJlY3QgbUJvdW5kczsKKyAgICBT
dHJpbmcgbVVSTDsKKyAgICBib29sIG1IYXNDbGlja0hhbmRsZXI7CisgICAgLy8gV2hldGhlciBv
ciBub3QgdGhlIHRvdWNoIHRhcmdldCBpcyBhIG5vbi1hY3Rpb25hYmxlIGZvcm0gZWxlbWVudCwg
bGlrZSBhIHRleHQgZmllbGQKKyAgICAvLyBvciByYWRpbyBidXR0b24uIFRoZXNlIHRhcmdldHMg
Y2FuIGJlIGNsaWNrZWQgd2l0aCBubyBwYWdlIGNoYW5nZS4gQnV0dG9ucyBhcmUgbm90CisgICAg
Ly8gaW5jbHVkZWQgYXMgdGhleSBjYW4gY2F1c2Ugc3RhdGUgY2hhbmdlLgorICAgIGJvb2wgbUlz
Rm9ybUlucHV0VHlwZTsKKworICAgIFRvdWNoTm9kZURhdGEoKQorICAgICAgICA6IG1Ob2RlKDAp
LAorICAgICAgICAgIG1IYXNDbGlja0hhbmRsZXIoZmFsc2UpLAorICAgICAgICAgIG1Jc0Zvcm1J
bnB1dFR5cGUoZmFsc2UpCisgICAgeworICAgIH0KK307CisKKy8vIEdvIHRocm91Z2ggZWFjaCBy
dWxlIHRvIGZpZ3VyZSBvdXQgaG93IG1hbnkgZWZmZWN0aXZlIChkaXN0aW5jdCkgdG91Y2ggdGFy
Z2V0cyB0aGVyZSBhcmUuCisvLyBSZXR1cm4gdGhlIHNtYWxsZXN0IG51bWJlci4KK3N0YXRpYyBz
aXplX3QgZ2V0RWZmZWN0aXZlVG91Y2hUYXJnZXRzKGNvbnN0IFZlY3RvcjxUb3VjaE5vZGVEYXRh
PiYgbm9kZXMpCit7CisgICAgLy8gS2VlcCB0cmFjayBvZiBlYWNoIGRpc3RpbmN0IFVSTCBmb3Ig
dGhlIGxpc3Qgb2Ygbm9kZXMuIElmIGEgdXJsIGlzIGRpc3RpbmN0LAorICAgIC8vIGFkZCBpdCB0
byB0aGUgdmVjdG9yLCBvdGhlcndpc2Ugc2tpcCBpdC4gVGhpcyBzaG91bGQgZ2l2ZSB0aGUgbnVt
YmVyIG9mIGRpc3RpbmN0CisgICAgLy8gdXJscy4KKyAgICBMaXN0SGFzaFNldDxTdHJpbmc+IGV4
aXN0aW5nVXJsczsKKyAgICBzaXplX3QgbnVtYmVyT2ZCbGFua1RhcmdldHMgPSAwOworICAgIGZv
ciAoVmVjdG9yPFRvdWNoTm9kZURhdGE+Ojpjb25zdF9pdGVyYXRvciBub2RlID0gbm9kZXMuYmVn
aW4oKTsgbm9kZSAhPSBub2Rlcy5lbmQoKTsgKytub2RlKSB7CisgICAgICAgIC8vIElmIHRoZXJl
IGlzIGEgamF2YXNjcmlwdCBjbGljayBoYW5kbGVyLCBhZGQgaXQgbm8gbWF0dGVyIHdoYXQgYXMg
d2UgY2Fubm90CisgICAgICAgIC8vIGRldGVybWluZSB3aGF0IHRoZSBoYW5kbGVyIGlzLiBJZiB0
aGVyZSBpcyBubyB1cmwsIGFzc3VtZSB0aGF0IHRoZXJlIGlzIGFub3RoZXIKKyAgICAgICAgLy8g
cmVhc29uIHRoYXQgdGhpcyBpcyBjbGlja2FibGUsIGFuZCBmb3JjZSBpdCB0byBjb3VudCBhcyBh
bm90aGVyIHRhcmdldC4KKyAgICAgICAgaWYgKG5vZGUtPm1IYXNDbGlja0hhbmRsZXIgfHwgbm9k
ZS0+bVVSTC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICsrbnVtYmVyT2ZCbGFua1RhcmdldHM7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBleGlzdGluZ1VybHMu
YWRkKG5vZGUtPm1VUkwubG93ZXIoKSk7CisgICAgfQorCisgICAgcmV0dXJuIG51bWJlck9mQmxh
bmtUYXJnZXRzICsgZXhpc3RpbmdVcmxzLnNpemUoKTsKK30KKworc3RhdGljIFRvdWNoTm9kZURh
dGEgZmluZEJlc3RUb3VjaE5vZGUoVmVjdG9yPFRvdWNoTm9kZURhdGE+IG5vZGVEYXRhTGlzdCwg
SW50UmVjdCB0ZXN0UmVjdCkKK3sKKyAgICBUb3VjaE5vZGVEYXRhIGJlc3ROb2RlOworICAgIGlu
dCBsYXJnZXN0T3ZlcmxhcCA9IDA7CisgICAgYm9vbCBiZXN0Tm9kZUlzRm9ybVR5cGUgPSBmYWxz
ZTsKKyAgICBWZWN0b3I8VG91Y2hOb2RlRGF0YT46OmNvbnN0X2l0ZXJhdG9yIG5sYXN0ID0gbm9k
ZURhdGFMaXN0LmVuZCgpOworICAgIGZvciAoVmVjdG9yPFRvdWNoTm9kZURhdGE+Ojpjb25zdF9p
dGVyYXRvciBuID0gbm9kZURhdGFMaXN0LmJlZ2luKCk7IG4gIT0gbmxhc3Q7ICsrbikgeworICAg
ICAgICBJbnRSZWN0IHJlY3QgPSBuLT5tQm91bmRzOworICAgICAgICByZWN0LmludGVyc2VjdCh0
ZXN0UmVjdCk7CisgICAgICAgIGludCBhID0gcmVjdC53aWR0aCgpICogcmVjdC5oZWlnaHQoKTsK
KyAgICAgICAgLy8gR2l2ZSBwcmVmZXJlbmNlIHRvIGlucHV0IG5vZGVzLiBJZiB0aGUgZXhpc3Rp
bmcgYmVzdCBjaG9pY2UgaXMgbm90IGFuIGlucHV0LAorICAgICAgICAvLyBhbmQgdGhpcyBvbmUg
aXMsIG1ha2UgdGhpcyB0aGUgYmVzdC4gSWYgdGhlIGV4aXN0aW5nIG5vZGUgYWxyZWFkeSBpcyBh
biBpbnB1dCwKKyAgICAgICAgLy8gY2hlY2sgdGhpcyBvbmUgaWYgaXQgaXMgYW4gaW5wdXQgYWxz
bywgb3RoZXJ3aXNlIGp1c3Qgc2tpcCBpdC4KKyAgICAgICAgYm9vbCBwcmVmZXJGb3JtVHlwZSA9
ICghYmVzdE5vZGVJc0Zvcm1UeXBlICYmIG4tPm1Jc0Zvcm1JbnB1dFR5cGUpOworICAgICAgICBi
b29sIGFsbG93Tm9kZSA9ICFiZXN0Tm9kZUlzRm9ybVR5cGUgfHwgbi0+bUlzRm9ybUlucHV0VHlw
ZTsKKyAgICAgICAgaWYgKChhbGxvd05vZGUgJiYgYSA+IGxhcmdlc3RPdmVybGFwKSB8fCBwcmVm
ZXJGb3JtVHlwZSkgeworICAgICAgICAgICAgbGFyZ2VzdE92ZXJsYXAgPSBhOworICAgICAgICAg
ICAgYmVzdE5vZGUgPSAqbjsKKyAgICAgICAgICAgIGlmIChuLT5tSXNGb3JtSW5wdXRUeXBlKQor
ICAgICAgICAgICAgICAgIGJlc3ROb2RlSXNGb3JtVHlwZSA9IHRydWU7CisgICAgICAgIH0KKyAg
ICAgfQorICAgIHJldHVybiBiZXN0Tm9kZTsKK30KKworc3RhdGljIGludCBnZXRTbWFsbGVzdERp
bWVuc2lvbihjb25zdCBWZWN0b3I8VG91Y2hOb2RlRGF0YT4mIG5vZGVEYXRhTGlzdCkKK3sKKyAg
ICBWZWN0b3I8VG91Y2hOb2RlRGF0YT46OmNvbnN0X2l0ZXJhdG9yIG5sYXN0ID0gbm9kZURhdGFM
aXN0LmVuZCgpOworICAgIGludCBzbWFsbGVzdERpbWVuc2lvbiA9IElOVF9NQVg7CisgICAgZm9y
IChWZWN0b3I8VG91Y2hOb2RlRGF0YT46OmNvbnN0X2l0ZXJhdG9yIG4gPSBub2RlRGF0YUxpc3Qu
YmVnaW4oKTsgbiAhPSBubGFzdDsgKytuKSB7CisgICAgICAgIEludFJlY3QgcmVjdCA9IG4tPm1C
b3VuZHM7CisgICAgICAgIGlmIChyZWN0LndpZHRoKCkgPCBzbWFsbGVzdERpbWVuc2lvbikKKyAg
ICAgICAgICAgIHNtYWxsZXN0RGltZW5zaW9uID0gcmVjdC53aWR0aCgpOworICAgICAgICBpZiAo
cmVjdC5oZWlnaHQoKSA8IHNtYWxsZXN0RGltZW5zaW9uKQorICAgICAgICAgICAgc21hbGxlc3RE
aW1lbnNpb24gPSByZWN0LmhlaWdodCgpOworICAgIH0KKyAgICByZXR1cm4gc21hbGxlc3REaW1l
bnNpb247Cit9CisKKy8vIEhlbHBlciBmdW5jdGlvbiBmb3IgZ2V0VG91Y2hIaWdobGlnaHRRdWFk
cyB0byBnZXQgcXVhZHMgZm9yIGFsbCBkZXNjZW5kYW50IGVsZW1lbnRzCitzdGF0aWMgdm9pZCBh
YnNvbHV0ZVF1YWRzUmVjdXJzaXZlKE5vZGUqIG5vZGUsIFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFk
cykKK3sKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAg
ICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8RmxvYXRRdWFk
PiBuZXdxdWFkczsKKyAgICByZW5kZXJlci0+YWJzb2x1dGVRdWFkcyhuZXdxdWFkcyk7CisKKyAg
ICAvLyB0cnkgdG8gY2xpcCBoaWdobGlnaHQgYXJlYSBhY2NvcmRpbmcgdG8gYmxvY2sgdmlzaWJs
ZSBhcmVhCisgICAgLy8gZXhhbXBsZTogPGRpdiBzdHlsZT0iaGVpZ2h0OjE2cHg7b3ZlcmZsb3c6
aGlkZGVuIj48YSBocmVmPkxpbmUgMTxici8+TGluZSAyPGJyLz5MaW5lIDM8L2E+PC9kaXY+Cisg
ICAgLy8gaW4gdGhpcyBjYXNlIHRoZSA8YT4gZWxlbWVudCB3b3VsZCByZXR1cm4gMyBxdWFkcyBm
b3IgaXRzIGhpZ2hsaWdodCwgYnV0IG9ubHkgdGhlIHRvcCAxNnB4IGlzIHZpc2libGUuCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBuZXdxdWFkcy5zaXplKCk7IGkrKykgeworICAgICAgICBp
ZiAoIW5ld3F1YWRzW2ldLmlzUmVjdGlsaW5lYXIoKSkgeyAvLyBkb24ndCBrbm93IGhvdyB0byBj
bGlwIHRoaXMuIDooCisgICAgICAgICAgICBxdWFkcy5hcHBlbmQobmV3cXVhZHNbaV0pOworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgRmxvYXRSZWN0IGNsaXBwZWQg
PSBuZXdxdWFkc1tpXS5ib3VuZGluZ0JveCgpOworICAgICAgICAvLyBpdGVyYXRlIHRocm91Z2gg
YWxsIGFuY2VzdG9yIGJsb2NrcyBvZiB0aGUgZWxlbWVudAorICAgICAgICBmb3IgKFJlbmRlckJs
b2NrICpibGsgPSByZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCk7IGJsayAmJiAhYmxrLT5pc1Jl
bmRlclZpZXcoKTsgYmxrID0gYmxrLT5jb250YWluaW5nQmxvY2soKSkgeworICAgICAgICAgICAg
aWYgKCFibGstPmhhc092ZXJmbG93Q2xpcCgpKSAvLyBza2lwIGlmIHRoZSBibG9jayBhbGxvd3Mg
b3ZlcmZsb3cKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIC8vIGZpbmQg
b3V0IHRoZSB2aXNpYmxlIGFyZWEgb2YgdGhlIGJsb2NrCisgICAgICAgICAgICBGbG9hdFF1YWQg
Ym91bmRRdWFkID0gYmxrLT5sb2NhbFRvQWJzb2x1dGVRdWFkKHN0YXRpY19jYXN0PEZsb2F0UmVj
dD4oYmxrLT52aXN1YWxPdmVyZmxvd1JlY3QoKSkpOworICAgICAgICAgICAgaWYgKCFib3VuZFF1
YWQuaXNSZWN0aWxpbmVhcigpKSAvLyBkb24ndCBrbm93IGhvdyB0byBjbGlwIHRoaXMuIDooCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBGbG9hdFJlY3QgYm91bmRSZWN0
ID0gYm91bmRRdWFkLmJvdW5kaW5nQm94KCk7CisgICAgICAgICAgICBjbGlwcGVkLmludGVyc2Vj
dChib3VuZFJlY3QpOworICAgICAgICB9CisKKyAgICAgICAgcXVhZHMuYXBwZW5kKHN0YXRpY19j
YXN0PEZsb2F0UXVhZD4oY2xpcHBlZCkpOworICAgIH0KKworICAgIGlmIChyZW5kZXJlci0+aGFz
T3ZlcmZsb3dDbGlwKCkpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBUT0RPKHRyY2hlbik6IHNo
b3VsZCBvcHRpbWl6ZSBmb3IgdGhlIGNhc2Ugd2hlbiB0aGUgY2hpbGQgZWxlbWVudCBpcyBzdHJp
Y3RseQorICAgIC8vICAgICBlbmNsb3NlZCBpbiBpdHMgcGFyZW50IGVsZW1lbnQgc28gd2UgY2Fu
IHNraXAgaXQuCisgICAgZm9yIChOb2RlICpjaGlsZCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIGFic29sdXRlUXVhZHNS
ZWN1cnNpdmUoY2hpbGQsIHF1YWRzKTsKK30KKworLy8gUmV0dXJucyBhIGxpc3Qgb2YgbGF5b3V0
IGJvdW5kaW5nIGJveCBvZiB0aGUgZXZlbnQgdGFyZ2V0IG5vZGUgdG91Y2hlZCBieSB0aGUKKy8v
IGlucHV0IHBvaW50IHdpdGggdGhlIHBhZGRpbmcuIElmIG5vIHRhcmdldCBub2RlIGlzIGZvdW5k
LCBhbiBlbXB0eSBsaXN0IGlzCisvLyByZXR1cm5lZC4gSWYgdGhlIG5vZGUgaXMgaW5saW5lIHR5
cGUsIGVhY2ggbGluZSBib3ggaXMgcmV0dXJuZWQgc2VwYXJhdGVseS4KKy8vIE90aGVyd2lzZSwg
b25lIGJvdW5kaW5nIGJveCBpcyByZXR1cm5lZC4gVGhpcyBpcyB1c2VkIHRvIGRyYXcgdGhlIG91
dGxpbmUKKy8vIGZvciB0aGUgdG91Y2ggaGlnaGxpZ2h0LgorLy8KKy8vIG91dFRvdWNoSW5mbyBp
cyB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIGZvciB0aGUgTGluayBQcmV2aWV3IG9wdGlvbi4KK1dl
YlZlY3RvcjxXZWJGbG9hdFF1YWQ+IFdlYlZpZXdJbXBsOjpnZXRUb3VjaEhpZ2hsaWdodFF1YWRz
KGNvbnN0IFdlYlBvaW50JiBpbnB1dFBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBhZGRpbmcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXQ6
OldlYlRvdWNoQ2FuZGlkYXRlc0luZm8qIG91dFRvdWNoSW5mbywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNvbG9yJiBvdXRU
YXBIaWdobGlnaHRDb2xvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKQoreworICAgIG91dFRvdWNoSW5mby0+bnVtYmVyT2ZDYW5k
aWRhdGVzID0gMDsKKyAgICBvdXRUb3VjaEluZm8tPnVuaXRlZEJvdW5kcyA9IEludFJlY3QoKTsK
KyAgICBvdXRUYXBIaWdobGlnaHRDb2xvciA9IFJlbmRlclN0eWxlOjppbml0aWFsVGFwSGlnaGxp
Z2h0Q29sb3IoKS5yZ2IoKTsKKyAgICBpZiAoIW1haW5GcmFtZUltcGwoKSkKKyAgICAgICAgcmV0
dXJuIFdlYlZlY3RvcjxXZWJGbG9hdFF1YWQ+KCk7CisgICAgLy8gVXNlIHRoZSByZWN0LWJhc2Vk
IGhpdCB0ZXN0IHRvIGdldCBhIGxpc3Qgb2YgY2FuZGlkYXRlcy4KKyAgICBJbnRQb2ludCBwb2lu
dCA9IG1haW5GcmFtZUltcGwoKS0+ZnJhbWVWaWV3KCktPndpbmRvd1RvQ29udGVudHMoaW5wdXRQ
b2ludCk7CisgICAgcGFkZGluZyA9IHN0YXRpY19jYXN0PGludD4gKHBhZGRpbmcgLyBwYWdlU2Nh
bGVGYWN0b3IoKSk7CisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtYWluRnJhbWVJbXBsKCkt
PmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChwb2ludCwKKyAg
ICAgICAgICAgIGZhbHNlLCBmYWxzZSwgRG9udEhpdFRlc3RTY3JvbGxiYXJzLCBIaXRUZXN0UmVx
dWVzdDo6QWN0aXZlIHwgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5LAorICAgICAgICAgICAgSW50
U2l6ZShwYWRkaW5nLCBwYWRkaW5nKSk7CisgICAgLy8gUXVpY2sgcmVqZWN0IGlmIG5vIG5vZGUg
aXMgaGl0LgorICAgIGNvbnN0IExpc3RIYXNoU2V0PFJlZlB0cjxOb2RlPiA+JiBsaXN0ID0gcmVz
dWx0LnJlY3RCYXNlZFRlc3RSZXN1bHQoKTsKKyAgICBpZiAobGlzdC5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiBXZWJWZWN0b3I8V2ViRmxvYXRRdWFkPigpOworICAgIC8vIFRyYXZlcnNlIHRo
ZSBjYW5kaWRhdGUgbGlzdCB0byBmaW5kIHRoZSBiZXN0IHRvdWNoIHRhcmdldAorICAgIEZyYW1l
KiBmcmFtZSA9IGxpc3QuYmVnaW4oKS0+Z2V0KCktPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAg
VmVjdG9yPFRvdWNoTm9kZURhdGE+IG5vZGVEYXRhTGlzdDsKKyAgICBMaXN0SGFzaFNldDxSZWZQ
dHI8Tm9kZT4gPjo6Y29uc3RfaXRlcmF0b3IgbGFzdCA9IGxpc3QuZW5kKCk7CisgICAgZm9yIChM
aXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsaXN0LmJlZ2lu
KCk7IGl0ICE9IGxhc3Q7ICsraXQpIHsKKyAgICAgICAgLy8gVE9ETyBpdCBzZWVtcyByZWFzb25h
YmxlIHRvIG5vdCBzZWFyY2ggYWNyb3NzIHRoZSBmcmFtZSwgcmlnaHQ/CisgICAgICAgIGlmIChp
dC0+Z2V0KCktPmRvY3VtZW50KCktPmZyYW1lKCkgIT0gZnJhbWUpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgLy8gVHJhdmVyc2UgdXAgdGhlIHRyZWUgdG8gZmluZCB0aGUgZmlyc3Qg
bm9kZSB0aGF0IG1heSBiZSB0aGUgdG91Y2ggdGFyZ2V0LgorICAgICAgICBib29sIGZvdW5kID0g
ZmFsc2U7CisgICAgICAgIE5vZGUqIGV2ZW50Tm9kZSA9IGl0LT5nZXQoKTsKKyAgICAgICAgd2hp
bGUgKGV2ZW50Tm9kZSkgeworICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXIgPSBldmVu
dE5vZGUtPnJlbmRlcmVyKCk7CisgICAgICAgICAgICBpZiAocmVuZGVyLT5pc0JvZHkoKSB8fCBy
ZW5kZXItPmlzUmVuZGVyVmlldygpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgaWYgKGV2ZW50Tm9kZS0+c3VwcG9ydHNGb2N1cygpCisgICAgICAgICAgICAgICAgICAgIHx8
IGV2ZW50Tm9kZS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpCisg
ICAgICAgICAgICAgICAgICAgIHx8IGV2ZW50Tm9kZS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnRO
YW1lcygpLm1vdXNlZG93bkV2ZW50KQorICAgICAgICAgICAgICAgICAgICB8fCBldmVudE5vZGUt
Pmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpKSB7CisgICAgICAg
ICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gVGhlIG5vZGVzIGluIHRoZSByZWN0QmFzZWRUZXN0UmVzdWx0
KCkgYXJlIG9yZGVyZWQgYmFzZWQgb24KKyAgICAgICAgICAgIC8vIHotaW5kZXggZHVyaW5nIGhp
dCB0ZXN0aW5nLiBTbyBkbyBub3Qgc2VhcmNoIGZvciB0aGUgZXZlbnROb2RlCisgICAgICAgICAg
ICAvLyBhY3Jvc3MgZXhwbGljaXQgei1pbmRleCBib3JkZXIuCisgICAgICAgICAgICAvLyBUT0RP
OiB0aGlzIGlzIGEgaGFyZCBvbmUuIHotaW5kZXggaXMgcXVpdGUgY29tcGxpY2F0ZWQgYXMKKyAg
ICAgICAgICAgIC8vIGl0cyB2YWx1ZSBvbmx5IG1hdHRlcnMgd2hlbiB5b3UgY29tcGFyZSB0d28g
UmVuZGVyTGF5ZXJzIGluIHRoZQorICAgICAgICAgICAgLy8gc2FtZSBoaWVyYXJjaHkgbGV2ZWwu
IGUuZy4gaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCAiYiIgaXMgb24KKyAgICAgICAgICAgIC8v
IHRoZSB0b3AgYXMgaXRzIHogbGV2ZWwgaXMgdGhlIGhpZ2hlc3QuIGV2ZW4gImMiIGhhcyAxMDAg
YXMKKyAgICAgICAgICAgIC8vIHotaW5kZXgsIGl0IGlzIHN0aWxsIGJlbG93ICJkIiBhcyBpdHMg
cGFyZW50IGhhcyB0aGUgc2FtZSB6LWluZGV4CisgICAgICAgICAgICAvLyBhcyAiZCIgYW5kIGxv
Z2ljYWxseSBiZWZvcmUgImQiLiBPZiBjb3Vyc2UgImEiIGlzIHRoZSBsb3dlc3QgaW4KKyAgICAg
ICAgICAgIC8vIHRoZSB6IGxldmVsLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIHot
aW5kZXg6YXV0byAiYSIKKyAgICAgICAgICAgIC8vICAgei1pbmRleDoyICJiIgorICAgICAgICAg
ICAgLy8gICB6LWluZGV4OjEKKyAgICAgICAgICAgIC8vICAgICB6LWluZGV4OjEwMCAiYyIKKyAg
ICAgICAgICAgIC8vICAgei1pbmRleDoxICJkIgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IC8vIElmIHRoZSBmYXQgcG9pbnQgdG91Y2hlcyBldmVyeSBub2RlLCB0aGUgb3JkZXIgaW4gdGhl
IGxpc3Qgc2hvdWxkCisgICAgICAgICAgICAvLyBiZSAiYiIsICJkIiwgImMiIGFuZCAiYSIuIFdo
ZW4gd2Ugc2VhcmNoIGZvciB0aGUgZXZlbnQgbm9kZSBmb3IKKyAgICAgICAgICAgIC8vICJiIiwg
d2UgcmVhbGx5IGRvbid0IHdhbnQgImEiIGFzIGl0IGlzIGJlaGluZCBldmVyeXRoaW5nIGVsc2Uu
CisgICAgICAgICAgICBpZiAoIXJlbmRlci0+c3R5bGUoKS0+aGFzQXV0b1pJbmRleCgpKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZXZlbnROb2RlID0gZXZlbnROb2RlLT5w
YXJlbnROb2RlKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gRGlkbid0IGZpbmQgYW55IHRvdWNo
IHRhcmdldCwgc2tpcCBpdC4KKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAvLyBCZWZvcmUgY29tcHV0aW5nIHRoZSBib3VuZGluZyBib3ggd2hpY2gg
aXMgZXhwZW5zaXZlLCBkbyBhIHF1aWNrIGNoZWNrCisgICAgICAgIC8vIHdoZXRoZXIgaXQgaXMg
YSBkdXBsaWNhdGVkIG5vZGUsIG9yIHdoZXRoZXIgaXQgaXMgYSBwYXJlbnQgb2YgYW4gZXhpc3Rp
bmcgbm9kZS4KKyAgICAgICAgLy8gV2UgZG9udCB3YW50IGFuc2Nlc3RvcnMsIG9ubHkgdGhlIGRl
ZXBlc3Qgbm9kZSBhcyBldmVudHMgd2lsbCBidWJibGUgdXAuCisgICAgICAgIGZvciAoaW50IGlu
ZGV4ID0gbm9kZURhdGFMaXN0LnNpemUoKSAtIDE7IGluZGV4ID49IDA7IC0taW5kZXgpIHsKKyAg
ICAgICAgICAgIFRvdWNoTm9kZURhdGEgbiA9IG5vZGVEYXRhTGlzdFtpbmRleF07CisgICAgICAg
ICAgICAvLyBmb3VuZCB0aGUgc2FtZSBub2RlLCBvciBhbiBhbmNlc3RvciBvZiBhbiBleGlzdGlu
ZyBub2RlOyBza2lwIGl0CisgICAgICAgICAgICBpZiAoZXZlbnROb2RlID09IG4ubU5vZGUgfHwg
bi5tTm9kZS0+aXNEZXNjZW5kYW50T2YoZXZlbnROb2RlKSkgeworICAgICAgICAgICAgICAgIGZv
dW5kID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAvLyBJZiBhbiBleGlzdGluZyBub2RlIGlzIGFuIGFuY2VzdG9yIG9mIHRoaXMgbmV3
IG5vZGUsIHJlbW92ZSB0aGUgYW5jZXN0b3IuCisgICAgICAgICAgICBpZiAobi5tTm9kZS0+Y29u
dGFpbnMoZXZlbnROb2RlKSkKKyAgICAgICAgICAgICAgICBub2RlRGF0YUxpc3QucmVtb3ZlKGlu
ZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZm91bmQpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgLy8gTm93IGNoZWNrIHdoZXRoZXIgdGhlIG5vZGUgaXMgZnVsbHkgY292
ZXJlZCBieSBvciBmdWxseSBjb3ZlcmluZyBhbm90aGVyIG5vZGUuCisgICAgICAgIGZvdW5kID0g
ZmFsc2U7CisKKyAgICAgICAgLy8gTm9kZTo6Z2V0UmVjdCBvbmx5IGFwcGx5IHRyYW5zZm9ybSBw
YXJ0aWFsbHkgYXQgdGltZSBvZiB3cml0aW5nICgwOS8wNy8yMDExKSwKKyAgICAgICAgLy8gb25s
eSB0aGUgcG9zaXRpb24gaXMgY29ycmVjdGx5IHRyYW5zZm9ybWVkLCBsZWF2aW5nIHNpemUgdW50
cmFuc2Zvcm1lZC4KKyAgICAgICAgLy8gQ2FsbCBOb2RlOjpnZXRSZWN0IGV4cGxpY2l0bHkgdW50
aWwgdGhlIHByb2JsZW0gaXMgc29sdmVkLgorICAgICAgICBJbnRSZWN0IHJlY3QgPSBldmVudE5v
ZGUtPk5vZGU6OmdldFJlY3QoKTsgLy8gd29ya2Fyb3VuZCBDb250YWluZXJOb2RlOjpnZXRSZWN0
IHRyYW5zZm9ybWF0aW9uIGJ1ZworCisgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgLy8gSWYgdGhlIG5vZGUncyBib3VuZHMgaXMgZW1wdHkgYW5kIGl0IGlzIG5vdCBh
IENvbnRhaW5lck5vZGUsIHNraXAgaXQuCisgICAgICAgICAgICBpZiAoIWV2ZW50Tm9kZS0+aXND
b250YWluZXJOb2RlKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAv
LyBJZiB0aGUgbm9kZSdzIGNoaWxkcmVuIGFyZSBhbGwgcG9zaXRpb25lZCBvYmplY3RzLCBpdHMg
Ym91bmRzIGNhbgorICAgICAgICAgICAgLy8gYmUgZW1wdHkuIFdhbGsgdGhyb3VnaCB0aGUgY2hp
bGRyZW4gdG8gZmluZCB0aGUgYm91bmRpbmcgYm94LgorICAgICAgICAgICAgTm9kZSogY2hpbGQg
PSBzdGF0aWNfY2FzdDxjb25zdCBDb250YWluZXJOb2RlKj4oZXZlbnROb2RlKS0+Zmlyc3RDaGls
ZCgpOworICAgICAgICAgICAgd2hpbGUgKGNoaWxkKSB7CisgICAgICAgICAgICAgICAgSW50UmVj
dCBjaGlsZHJlY3QgPSBjaGlsZC0+Tm9kZTo6Z2V0UmVjdCgpOyAvLyB3b3JrYXJvdW5kIENvbnRh
aW5lck5vZGU6OmdldFJlY3QgdHJhbnNmb3JtYXRpb24gYnVnCisgICAgICAgICAgICAgICAgaWYg
KCFjaGlsZHJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlY3QudW5pdGUo
Y2hpbGRyZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+dHJhdmVyc2VO
ZXh0U2libGluZyhldmVudE5vZGUpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT50cmF2ZXJzZU5leHROb2RlKGV2ZW50Tm9kZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBJZiB0aGUgcmVjdCBpcyBzdGlsbCBlbXB0eSwg
c2tpcCBpdC4KKyAgICAgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBOb3RlOiBpdCBpcyBpbXBvcnRhbnQg
dG8gdXNlICJpbnQiIGluc3RlYWQgb2YgInNpemVfdCIgZm9yIGkgdG8gYXZvaWQKKyAgICAgICAg
Ly8gaW5maW5pdGUgbG9vcCB0cmlnZ2VyZWQgYnkgYXV0byBjb252ZXJzaW9uIG9mIHVuc2lnbmVk
LXNpZ25lZC4KKyAgICAgICAgZm9yIChpbnQgaSA9IG5vZGVEYXRhTGlzdC5zaXplKCkgLSAxOyBp
ID49IDA7IGktLSkgeworICAgICAgICAgICAgVG91Y2hOb2RlRGF0YSBuID0gbm9kZURhdGFMaXN0
LmF0KGkpOworICAgICAgICAgICAgLy8gVGhlIG5ldyBub2RlIGlzIGVuY2xvc2luZyBhbiBleGlz
dGluZyBub2RlLCBza2lwIGl0LgorICAgICAgICAgICAgaWYgKHJlY3QuY29udGFpbnMobi5tQm91
bmRzKSkgeworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFRoZSBuZXcgbm9kZSBpcyBmdWxs
eSBpbnNpZGUgYW4gZXhpc3Rpbmcgbm9kZSwgcmVtb3ZlIHRoZSBleGlzdGluZyBub2RlLgorICAg
ICAgICAgICAgaWYgKG4ubUJvdW5kcy5jb250YWlucyhyZWN0KSkKKyAgICAgICAgICAgICAgICBu
b2RlRGF0YUxpc3QucmVtb3ZlKGkpOworICAgICAgICB9CisgICAgICAgIGlmICghZm91bmQpIHsK
KyAgICAgICAgICAgIFRvdWNoTm9kZURhdGEgbmV3Tm9kZTsKKyAgICAgICAgICAgIG5ld05vZGUu
bU5vZGUgPSBldmVudE5vZGU7CisgICAgICAgICAgICBuZXdOb2RlLm1Cb3VuZHMgPSByZWN0Owor
ICAgICAgICAgICAgLy8gV2hhdCBpZiB0aGlzIGlzIG5vdCBhbiBlbGVtZW50Pz8KKyAgICAgICAg
ICAgIGlmIChldmVudE5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBldmVudE5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjphVGFnKSkgeworICAgICAgICAgICAgICAgIEhUTUxBbmNob3JFbGVtZW50
KiBlbCA9IHN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50Kj4oZXZlbnROb2RlKTsKKyAgICAg
ICAgICAgICAgICBuZXdOb2RlLm1VUkwgPSBlbC0+aHJlZigpOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgbmV3Tm9kZS5tVVJMID0gIiI7CisgICAgICAgICAgICBuZXdOb2Rl
Lm1Jc0Zvcm1JbnB1dFR5cGUgPQorICAgICAgICAgICAgICAgICAgICBldmVudE5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykgLy8gY2F0Y2hlcyBib3RoIHRleHQgZmllbGRzIGFu
ZCByYWRpbyBidXR0b25zCisgICAgICAgICAgICAgICAgICAgIHx8IGV2ZW50Tm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6Om9wdGdyb3VwVGFnKQorICAgICAgICAgICAgICAgICAgICB8fCBldmVu
dE5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZXh0YXJlYVRhZykKKyAgICAgICAgICAgICAg
ICAgICAgfHwgZXZlbnROb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uVGFnKQorICAg
ICAgICAgICAgICAgICAgICB8fCBldmVudE5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzZWxl
Y3RUYWcpOworICAgICAgICAgICAgbmV3Tm9kZS5tSGFzQ2xpY2tIYW5kbGVyID0gZXZlbnROb2Rl
LT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkuY2xpY2tFdmVudCk7CisgICAgICAgICAg
ICBub2RlRGF0YUxpc3QuYXBwZW5kKG5ld05vZGUpOworICAgICAgICB9CisgICAgfQorCisgICAg
b3V0VG91Y2hJbmZvLT5udW1iZXJPZkNhbmRpZGF0ZXMgPSBnZXRFZmZlY3RpdmVUb3VjaFRhcmdl
dHMobm9kZURhdGFMaXN0KTsKKworICAgIC8vIFJldHVybiBpZiBubyB0b3VjaCB0YXJnZXQgaXMg
Zm91bmQuCisgICAgaWYgKG5vZGVEYXRhTGlzdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBX
ZWJWZWN0b3I8V2ViRmxvYXRRdWFkPigpOworCisgICAgLy8gU2VsZWN0IGEgbm9kZSB3aGljaCBo
YXMgdGhlIGxhcmdlc3Qgb3ZlcmxhcCB3aXRoIHRoZSBmYXQgcG9pbnQuCisgICAgSW50UmVjdCB0
ZXN0UmVjdCA9IHJlc3VsdC5yZWN0Rm9yUG9pbnQoZnJhbWUtPnZpZXcoKS0+d2luZG93VG9Db250
ZW50cyhpbnB1dFBvaW50KSk7CisgICAgVG91Y2hOb2RlRGF0YSBiZXN0Tm9kZSA9IGZpbmRCZXN0
VG91Y2hOb2RlKG5vZGVEYXRhTGlzdCwgdGVzdFJlY3QpOworICAgIGlmIChiZXN0Tm9kZS5tSXNG
b3JtSW5wdXRUeXBlKQorICAgICAgICBvdXRUb3VjaEluZm8tPm51bWJlck9mQ2FuZGlkYXRlcyA9
IDE7CisKKyAgICAvLyBJZiB0aGUgd2Vic2l0ZSBpcyBub3QgdXNlclNjYWxhYmxlLCB3ZSBhc3N1
bWUgaXQgaXMgYSBtb2JpbGUgZm9ybWF0dGVkIHNpdGUsIGFuZCBkaXNhYmxlIHRoaXMuCisgICAg
Vmlld3BvcnRBcmd1bWVudHMgdmlld3BvcnQgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+dmlld3BvcnRB
cmd1bWVudHMoKTsKKyAgICBpZiAoIXZpZXdwb3J0LnVzZXJTY2FsYWJsZSkKKyAgICAgIG91dFRv
dWNoSW5mby0+bnVtYmVyT2ZDYW5kaWRhdGVzID0gMTsKKworICAgIEludFJlY3QgdW5pdGVkQm91
bmRzOyAvLyBUaGUgYm91bmRzIG9mIGFsbCBwb3NzaWJsZSB0b3VjaCB0YXJnZXRzLgorICAgIGZv
ciAoVmVjdG9yPFRvdWNoTm9kZURhdGE+Ojpjb25zdF9pdGVyYXRvciBub2RlID0gbm9kZURhdGFM
aXN0LmJlZ2luKCk7IG5vZGUgIT0gbm9kZURhdGFMaXN0LmVuZCgpOyArK25vZGUpCisgICAgICAg
IHVuaXRlZEJvdW5kcy51bml0ZShub2RlLT5tQm91bmRzKTsKKworICAgIC8vIENoZWNrIGZvciB0
aW55IHRhcmdldHMgbmV4dCB0byBsYXJnZSB0YXJnZXRzLiBJZiB0aGlzIGlzIHRoZSBjYXNlLCB0
aGUgdXNlciBwcm9iYWJseSBtZWFudCB0byB0YXAKKyAgICAvLyB0aGF0IG5vZGUuCisgICAgaWYg
KG91dFRvdWNoSW5mby0+bnVtYmVyT2ZDYW5kaWRhdGVzID4gMSkgeworICAgICAgICAvLyBLZWVw
IHRyYWNrIG9mIHRoZSB0aW55IG5vZGVzIGluIGNhc2UgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUs
IHdlJ2xsIHVzZSB0aGVtIHRvIHpvb20gaW50by4KKyAgICAgICAgVmVjdG9yPFRvdWNoTm9kZURh
dGE+IHRpbnlOb2RlczsKKyAgICAgICAgaW50IHRvdGFsQXJlYSA9IHVuaXRlZEJvdW5kcy5oZWln
aHQoKSAqIHVuaXRlZEJvdW5kcy53aWR0aCgpOworICAgICAgICBmb3IgKFZlY3RvcjxUb3VjaE5v
ZGVEYXRhPjo6Y29uc3RfaXRlcmF0b3Igbm9kZSA9IG5vZGVEYXRhTGlzdC5iZWdpbigpOyBub2Rl
ICE9IG5vZGVEYXRhTGlzdC5lbmQoKTsgKytub2RlKSB7CisgICAgICAgICAgICBJbnRSZWN0IHJl
Y3QgPSBub2RlLT5tQm91bmRzOworICAgICAgICAgICAgaW50IG5vZGVBcmVhID0gcmVjdC53aWR0
aCgpICogcmVjdC5oZWlnaHQoKTsKKyAgICAgICAgICAgIC8vIElmIHRoZSBib3VuZHMgb2YgdGhp
cyB0YXJnZXQgaXMgbW9yZSB0aGFuIDUgdGltZXMgc21hbGxlciB0aGFuIHRoZSBvdmVyYWxsIHRh
cmdldCBhcmVhLAorICAgICAgICAgICAgLy8gdGhlIHVzZXIgcHJvYmFibHkgbWVhbnQgdG8gdGFw
IHRoaXMgb25lLCBvdGhlcndpc2UgdGhleSB3b3VsZCBoYXZlIHRhcHBlZCBzb21ld2hlcmUgaW4g
dGhlCisgICAgICAgICAgICAvLyBtaWRkbGUgb2YgdGhlIGxhcmdlciB0YXJnZXRzLiBJbiB0aGlz
IGNhc2UsIGp1c3QgY2xpY2sgdGhlIHNtYWxsIHRhcmdldC4gSW4gdGhlIHZlcnkgdW5saWtlbHkK
KyAgICAgICAgICAgIC8vIGNhc2UgdGhhdCBtdWx0aXBsZSB0YXJnZXRzIG1lZXQgdGhpcyBjcml0
ZXJpYSwgdGhlIEp1c3QtSW4tVGltZSB6b29tIHdpbGwgY29udGludWUgdG8gc2hvdy4KKyAgICAg
ICAgICAgIGlmIChub2RlQXJlYSAqIDUgPCB0b3RhbEFyZWEpIHsKKyAgICAgICAgICAgICAgICB0
aW55Tm9kZXMuYXBwZW5kKCpub2RlKTsKKyAgICAgICAgICAgICAgICBiZXN0Tm9kZSA9ICpub2Rl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIElmIHRoZXJlIGlzIG9ubHkg
b25lIHRpbnkgdGFyZ2V0LCB1c2UgaXQgYXMgdGhlIG9ubHkgdGFyZ2V0LiBPdGhlcndpc2UsIGNv
bnRpbnVlIGFzIHBsYW5uZWQuCisgICAgICAgIGlmICghdGlueU5vZGVzLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgbm9kZURhdGFMaXN0LnN3YXAodGlueU5vZGVzKTsKKyAgICAgICAgICAgIG91
dFRvdWNoSW5mby0+bnVtYmVyT2ZDYW5kaWRhdGVzID0gbm9kZURhdGFMaXN0LnNpemUoKTsKKyAg
ICAgICAgICAgIHVuaXRlZEJvdW5kcy5zZXRXaWR0aCgwKTsKKyAgICAgICAgICAgIHVuaXRlZEJv
dW5kcy5zZXRIZWlnaHQoMCk7CisgICAgICAgICAgICBmb3IgKFZlY3RvcjxUb3VjaE5vZGVEYXRh
Pjo6Y29uc3RfaXRlcmF0b3Igbm9kZSA9IG5vZGVEYXRhTGlzdC5iZWdpbigpOyBub2RlICE9IG5v
ZGVEYXRhTGlzdC5lbmQoKTsgKytub2RlKQorICAgICAgICAgICAgICAgIHVuaXRlZEJvdW5kcy51
bml0ZShub2RlLT5tQm91bmRzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG91dFRvdWNoSW5m
by0+c21hbGxlc3REaW1lbnNpb24gPSBnZXRTbWFsbGVzdERpbWVuc2lvbihub2RlRGF0YUxpc3Qp
OworCisgICAgeyAvLyBjbGFtcCB0b3VjaCBjYW5kaWRhdGVzIGJvdW5kIHRvIHRoZSB2aWV3cG9y
dCBiZWNhdXNlIHdlIGNhbid0IHJlYWQgcGl4ZWxzIGZyb20gb2ZmLXNjcmVlbiBhcmVhIGluIEhX
IG1vZGUKKyAgICAgICAgY29uc3QgSW50UmVjdCB2aWV3cG9ydChJbnRQb2ludCgwLCAwKSwgc2l6
ZSgpKTsKKyAgICAgICAgdW5pdGVkQm91bmRzID0gZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dp
bmRvdyh1bml0ZWRCb3VuZHMpOworICAgICAgICB1bml0ZWRCb3VuZHMuaW50ZXJzZWN0KHZpZXdw
b3J0KTsKKyAgICAgICAgb3V0VG91Y2hJbmZvLT51bml0ZWRCb3VuZHMgPSB1bml0ZWRCb3VuZHM7
CisKKyAgICAgICAgLy8gUmV0dXJuIGVtcHR5IGhpZ2hsaWdodCBpZiB0b3VjaCB0YXJnZXQgaXMg
dG9vIGJpZy4KKyAgICAgICAgaWYgKGJlc3ROb2RlLm1Ob2RlKSB7CisgICAgICAgICAgICBJbnRS
ZWN0IG5vZGVCb3VuZHMgPSBmcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KGJlc3ROb2Rl
Lm1Cb3VuZHMpOworICAgICAgICAgICAgbm9kZUJvdW5kcy5pbnRlcnNlY3Qodmlld3BvcnQpOwor
ICAgICAgICAgICAgaWYgKG5vZGVCb3VuZHMud2lkdGgoKSA+IDAuOCAqIG1fc2l6ZS53aWR0aCAm
JiBub2RlQm91bmRzLmhlaWdodCgpID4gMC44ICogbV9zaXplLmhlaWdodCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gV2ViVmVjdG9yPFdlYkZsb2F0UXVhZD4oKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIFdlIHdhbnQgdG8gZXhjbHVkZSBhbiBlbGVtZW50IHRoYXQgb25seSBhY2NlcHRz
IG1vdXNlIGV2ZW50cyBmcm9tIGhpZ2hsaWdodGluZy4gQXMgZGlzY3Vzc2VkIGluIGIvNTY5MDk3
NworICAgIGlmICghYmVzdE5vZGUubU5vZGUgfHwgIShiZXN0Tm9kZS5tTm9kZS0+c3VwcG9ydHNG
b2N1cygpIHx8IGJlc3ROb2RlLm1Ob2RlLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCku
Y2xpY2tFdmVudCkpKQorICAgICAgICByZXR1cm4gV2ViVmVjdG9yPFdlYkZsb2F0UXVhZD4oKTsK
KworICAgIG91dFRhcEhpZ2hsaWdodENvbG9yID0KKyAgICAgICAgYmVzdE5vZGUubU5vZGUtPnJl
bmRlcmVyKCktPnN0eWxlKCktPnRhcEhpZ2hsaWdodENvbG9yKCkucmdiKCk7CisgICAgVmVjdG9y
PEZsb2F0UXVhZD4gcXVhZHM7CisgICAgYWJzb2x1dGVRdWFkc1JlY3Vyc2l2ZShiZXN0Tm9kZS5t
Tm9kZSwgcXVhZHMpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBxdWFkcy5zaXplKCk7
ICsraSkgeworICAgICAgICAvLyBUT0RPKHRyY2hlbik6IHNob3VsZCBjaGFuZ2UgRmxvYXRRdWFk
IHRvIHVzZSBhcnJheSBpbiB1cHN0cmVhbS4uLgorICAgICAgICBxdWFkc1tpXS5zZXRQMShmcmFt
ZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KHJvdW5kZWRJbnRQb2ludChxdWFkc1tpXS5wMSgp
KSkpOworICAgICAgICBxdWFkc1tpXS5zZXRQMihmcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2lu
ZG93KHJvdW5kZWRJbnRQb2ludChxdWFkc1tpXS5wMigpKSkpOworICAgICAgICBxdWFkc1tpXS5z
ZXRQMyhmcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KHJvdW5kZWRJbnRQb2ludChxdWFk
c1tpXS5wMygpKSkpOworICAgICAgICBxdWFkc1tpXS5zZXRQNChmcmFtZS0+dmlldygpLT5jb250
ZW50c1RvV2luZG93KHJvdW5kZWRJbnRQb2ludChxdWFkc1tpXS5wNCgpKSkpOworICAgIH0KKwor
ICAgIHJldHVybiBxdWFkczsKK30KKworV2ViVmVjdG9yPFdlYkZsb2F0UXVhZD4gV2ViVmlld0lt
cGw6OmdldFRvdWNoSGlnaGxpZ2h0UXVhZHMoY29uc3QgV2ViUmFuZ2UmIHdlYlJhbmdlLCBXZWJD
b2xvciYgb3V0VGFwSGlnaGxpZ2h0Q29sb3IpCit7CisgICAgb3V0VGFwSGlnaGxpZ2h0Q29sb3Ig
PSBSZW5kZXJTdHlsZTo6aW5pdGlhbFRhcEhpZ2hsaWdodENvbG9yKCkucmdiKCk7CisgICAgaWYg
KHdlYlJhbmdlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gV2ViVmVjdG9yPFdlYkZsb2F0UXVh
ZD4oKTsKKworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzdGF0aWNfY2FzdDxQYXNzUmVmUHRy
PFJhbmdlPiA+KHdlYlJhbmdlKTsKKyAgICBpZiAoTm9kZSogbm9kZSA9IHJhbmdlLT5maXJzdE5v
ZGUoKSkKKyAgICAgICAgbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dGFwSGlnaGxpZ2h0Q29s
b3IoKS5yZ2IoKTsKKworICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIHJhbmdlLT50
ZXh0UXVhZHMocXVhZHMpOworCisgICAgRnJhbWUqIGZyYW1lID0gcGFnZSgpLT5mb2N1c0NvbnRy
b2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHF1YWRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHF1YWRzW2ldLnNldFAxKGZyYW1lLT52
aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocm91bmRlZEludFBvaW50KHF1YWRzW2ldLnAxKCkpKSk7
CisgICAgICAgIHF1YWRzW2ldLnNldFAyKGZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3co
cm91bmRlZEludFBvaW50KHF1YWRzW2ldLnAyKCkpKSk7CisgICAgICAgIHF1YWRzW2ldLnNldFAz
KGZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocm91bmRlZEludFBvaW50KHF1YWRzW2ld
LnAzKCkpKSk7CisgICAgICAgIHF1YWRzW2ldLnNldFA0KGZyYW1lLT52aWV3KCktPmNvbnRlbnRz
VG9XaW5kb3cocm91bmRlZEludFBvaW50KHF1YWRzW2ldLnA0KCkpKSk7CisgICAgfQorCisgICAg
cmV0dXJuIHF1YWRzOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjpzaG93VG91Y2hIaWdobGlnaHRR
dWFkcyhjb25zdCBXZWJWZWN0b3I8V2ViRmxvYXRRdWFkPiAmaGlnaGxpZ2h0LCBXZWJDb2xvciBo
aWdobGlnaHRDb2xvcikKK3sKKyAgICAvLyBDb21wdXRlIGRpZmZlcmVuY2UgYmV0d2VlbiBleHBh
bmRlZCB2aWV3cG9ydCBhbmQgc2Nyb2xsIG9mZnNldCAoZm9yCisgICAgLy8gYnJvd3NlciBzY3Jv
bGxpbmcpLgorICAgIEZyYW1lVmlldyogdmlldyA9IHBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXco
KTsKKyAgICBJbnRTaXplIHNjcm9sbFRvRml4ZWQ7CisgICAgaWYgKCF2aWV3LT5maXhlZFZpc2li
bGVDb250ZW50UmVjdCgpLmlzRW1wdHkoKSkKKyAgICAgICAgc2Nyb2xsVG9GaXhlZCA9IHZpZXct
PmZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KCkubG9jYXRpb24oKSAtIHZpZXctPnNjcm9sbFBvc2l0
aW9uKCk7CisKKyAgICBXVEY6OlZlY3RvcjxXZWJDb3JlOjpGbG9hdFF1YWQ+IG5ld1F1YWRzKGhp
Z2hsaWdodC5zaXplKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBoaWdobGlnaHQu
c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgY29uc3QgV2ViRmxvYXRRdWFkICZxID0gaGlnaGxpZ2h0
W2ldOworICAgICAgICBuZXdRdWFkc1tpXSA9IEZsb2F0UXVhZChxLnBbMF0gLSBzY3JvbGxUb0Zp
eGVkLCBxLnBbMV0gLSBzY3JvbGxUb0ZpeGVkLCBxLnBbMl0gLSBzY3JvbGxUb0ZpeGVkLCBxLnBb
M10gLSBzY3JvbGxUb0ZpeGVkKTsKKyAgICB9CisKKyAgICBtX2xheWVyVHJlZUhvc3QtPnBlbmRI
aWdobGlnaHRGb3JOZXh0Q29tcG9zaXRlKG5ld1F1YWRzLCBoaWdobGlnaHRDb2xvcik7CisgICAg
bV9sYXllclRyZWVIb3N0LT5zZXROZWVkc0NvbW1pdCgpOworfQorCisjZW5kaWYKKwogdm9pZCBX
ZWJWaWV3SW1wbDo6c2V0VmlzaWJpbGl0eVN0YXRlKFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGUgdmlz
aWJpbGl0eVN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
aXNJbml0aWFsU3RhdGUpIHsKICAgICBpZiAoIXBhZ2UoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IGQ0MmIyY2JkZGZmMWQ1M2YzYjkyNWM5MzgyMzE1ZTU0
OTUwODRjYjkuLmFiMTgxN2UxNTBjMzhhNDljYjNhZDY1MDcyMmMwZTdiYmU0MGFhNDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtMTA5LDYgKzEwOSwxMiBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1l
KTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7IC8vIEFsc28gaW1wbGVtZW50cyBDQ0xheWVy
VHJlZUhvc3RDbGllbnQ6OmxheW91dCgpCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNhbnZh
cyosIGNvbnN0IFdlYlJlY3QmKTsKKyNpZiBPUyhBTkRST0lEKQorICAgIC8vIFRoZSBwdXJwb3Nl
IG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gYnlwYXNzIEhXIGNvbXBvc2l0aW9uCisgICAgLy8gV2Ug
d2FudCB0byByZWRyYXcgdmVjdG9yIGNvbnRlbnRzICh0ZXh0ICYgU1ZHKSBpbiBoaWdoZXIgcmVz
b2x1dGlvbiBmb3IgTGluayBQcmV2aWV3LAorICAgIC8vIGluc3RlYWQgb2YgcmVhZGluZyBiYWNr
IGZyb20gdGhlIGNvbXBvc2l0ZSBidWZmZXIsIHdoaWNoIHJlc3VsdHMgaW4gYWxpYXNpbmcuCisg
ICAgdmlydHVhbCB2b2lkIHBhaW50TGlua1ByZXZpZXcoV2ViQ2FudmFzKiwgY29uc3QgV2ViUmVj
dCYpOworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpOwogICAgIHZpcnR1
YWwgdm9pZCBjb21wb3NpdGUoYm9vbCBmaW5pc2gpOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVk
c1JlZHJhdygpOwpAQCAtMjQwLDYgKzI0NiwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHBlcmZvcm1DdXN0b21Db250ZXh0TWVudUFjdGlvbih1bnNpZ25lZCBhY3Rpb24pOwogICAgIHZp
cnR1YWwgdm9pZCBhZGRQYWdlT3ZlcmxheShXZWJQYWdlT3ZlcmxheSosIGludCAvKiB6T3JkZXIg
Ki8pOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVQYWdlT3ZlcmxheShXZWJQYWdlT3ZlcmxheSop
OworI2lmIE9TKEFORFJPSUQpCisgICAgdmlydHVhbCBXZWJWZWN0b3I8V2ViRmxvYXRRdWFkPiBn
ZXRUb3VjaEhpZ2hsaWdodFF1YWRzKGNvbnN0IFdlYlBvaW50JiB0b3VjaFBvaW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IHBhZGRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJLaXQ6OldlYlRvdWNoQ2FuZGlkYXRlc0luZm8qIG91dFRvdWNoSW5m
bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdlYkNvbG9yJiBvdXRUYXBIaWdobGlnaHRDb2xvcik7CisgICAgdmlydHVhbCBXZWJW
ZWN0b3I8V2ViRmxvYXRRdWFkPiBnZXRUb3VjaEhpZ2hsaWdodFF1YWRzKGNvbnN0IFdlYlJhbmdl
JiwgV2ViQ29sb3ImIG91dFRhcEhpZ2hsaWdodGNvbG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2hv
d1RvdWNoSGlnaGxpZ2h0UXVhZHMoY29uc3QgV2ViVmVjdG9yPFdlYkZsb2F0UXVhZD4mIGhpZ2hs
aWdodCwgV2ViQ29sb3IgaGlnaGxpZ2h0Q29sb3IpOworI2VuZGlmCiAKICAgICAvLyBDQ0xheWVy
VHJlZUhvc3RDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQW5pbWF0aW9ucyhkb3VibGUg
ZnJhbWVCZWdpblRpbWUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128058</attachid>
            <date>2012-02-21 15:25:56 -0800</date>
            <delta_ts>2012-08-01 15:54:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79150-20120221152555.patch</filename>
            <type>text/plain</type>
            <size>27750</size>
            <attacher name="Michael Feldstein">feldstein</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3OTg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGUxZmMyZjkxYjAzNWQyODMzOWJhZTJmYzg2OWIyYzAxNDViNjY3ZGIuLmNjYWI1M2VkYTFhNGFi
MDAzZmY5Mzk1ZWU5ODA1ODBiOTkzZTE4OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMTItMDItMjEgIE1pY2hhZWwgRmVsZHN0ZWluICA8ZmVsZHN0ZWlu
QGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEFkZCBMaW5rIFByZXZpZXcgYmVo
YXZpb3IgdG8gV2ViVmlld0ltcGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc5MTUwCisKKyAgICAgICAgQWRkZWQgdGhlIGFiaWxpdHkgdG8gcmVxdWVz
dCB0aGUgbnVtYmVyIG9mIHRvdWNoIHRhcmdldHMgYmVuZWF0aCBhCisgICAgICAgIHRvdWNoLCBh
bmQgYWxzbyB0aGUgYWJpbGl0eSB0byBwYWludCBhIHN1YnNlY3Rpb24gb2YgYSBwYWdlIGF0IGEK
KyAgICAgICAgc3BlY2lmaWVkIHNjYWxlIHRvIHN1cHBvcnQgQ2hyb21lIG9uIEFuZHJvaWQncyBM
aW5rIFByZXZpZXcgZmVhdHVyZS4KKworICAgICAgICBUaGVzZSB0b3VjaCBmdW5jdGlvbnMgd2ls
bCBiZSB1c2VkIGJ5IG90aGVyIENocm9tZSBmb3IgQW5kcm9pZCBmZWF0dXJlcworICAgICAgICBp
biB0aGUgZnV0dXJlLCBtb3N0bHkgZm9yIG91dGxpbmluZyB0b3VjaCB0YXJnZXRzLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcHVibGljL1dlYlZp
ZXcuaDoKKyAgICAgICAgKFdlYlRvdWNoQ2FuZGlkYXRlc0luZm8pOgorICAgICAgICAoV2ViVmll
dyk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpwYWludExpbmtQcmV2aWV3KToKKyAgICAgICAg
KFRvdWNoTm9kZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpUb3VjaE5vZGVEYXRhOjpUb3VjaE5v
ZGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6Z2V0RWZmZWN0aXZlVG91Y2hUYXJnZXRzKToKKyAg
ICAgICAgKFdlYktpdDo6ZmluZEJlc3RUb3VjaE5vZGUpOgorICAgICAgICAoV2ViS2l0OjpnZXRT
bWFsbGVzdERpbWVuc2lvbik6CisgICAgICAgIChXZWJLaXQ6OmFic29sdXRlUXVhZHNSZWN1cnNp
dmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Z2V0VG91Y2hIaWdobGlnaHRRdWFk
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzaG93VG91Y2hIaWdobGlnaHRRdWFk
cyk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgIChXZWJWaWV3SW1wbCk6
CisKIDIwMTItMDItMTYgIERhbmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgW2Nocm9taXVtXSBBZGQgV0VCS0lUX0VYUE9SVCB0byBuZXcgV2ViRHJhZ0RhdGEgbWV0
aG9kcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcu
aCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAppbmRleCBlZDg1M2Uy
M2E3NzVkZjQ5YjQxMzcwZGM5YmJjNzBiNjAwYjVlMDE2Li5jZGQzN2MwMjk3ZDNjYWY4YzYyN2U1
ZGQ0OGI0YTBiZTI4ZjFlNmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmll
dy5oCkBAIC0zMiwxMSArMzIsMzIgQEAKICNkZWZpbmUgV2ViVmlld19oCiAKICNpbmNsdWRlICJX
ZWJEcmFnT3BlcmF0aW9uLmgiCisjaWYgZGVmaW5lZChBTkRST0lEKQorI2luY2x1ZGUgInBsYXRm
b3JtL1dlYkZsb2F0UXVhZC5oIgorI2VuZGlmCiAjaW5jbHVkZSAiV2ViUGFnZVZpc2liaWxpdHlT
dGF0ZS5oIgogI2luY2x1ZGUgIldlYldpZGdldC5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0
cmluZy5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlZlY3Rvci5oIgogCisjaWYgZGVmaW5lZChB
TkRST0lEKQorc3RydWN0IFdlYlRvdWNoQ2FuZGlkYXRlc0luZm8geworICAgIC8vIFRoZSBudW1i
ZXIgb2YgcG9zc2libGUgdG91Y2ggcmVjZWl2ZXJzIGZyb20gdGhlIGxhc3QgdG91Y2guIFRoaXMg
aXMgdXNlZAorICAgIC8vIGluIE9uU2luZ2xlVGFwIGluIG9yZGVyIHRvIGtub3cgd2hldGhlciBv
ciBub3QgdGhlIHRhcCBzaG91bGQgZ28gdGhyb3VnaC4KKyAgICAvLyBJZiBpdCBpcyBtb3JlIHRo
YW4gMSwgdGhlIHRhcCBzaG91bGQgbm90IGdvIHRocm91Z2gsIGFzIHRoZSBMaW5rIFByZXZpZXcK
KyAgICAvLyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLCBhbGxvd2luZyB0aGUgdXNlciB0byBjbGFy
aWZ5LgorICAgIGludCBudW1iZXJPZkNhbmRpZGF0ZXM7CisgICAgLy8gVGhlIGJvdW5kcyBvZiB0
aGUgcG9zc2libGUgdG91Y2ggY2FuZGlkYXRlcy4gVGhpcyB3aWxsIGVuY29tcGFzcyB0aGUKKyAg
ICAvLyB0b3RhbGl0eSBvZiBhbnkgcG9zc2libGUgdG91Y2ggY2FuZGlkYXRlcyBmb3IgYSBwcmVz
cy4KKyAgICBXZWJLaXQ6OldlYlJlY3QgdW5pdGVkQm91bmRzOworICAgIC8vIFRoZSBzbWFsbGVz
dCBkaW1lbnNpb24gKGVpdGhlciB3aWR0aCBvciBoZWlnaHQpIG9mIGFueSBvZiB0aGUKKyAgICAv
LyBhdmFpbGFibGUgdG91Y2ggdGFyZ2V0cy4gVGhpcyBpcyB1c2VkIHdpdGggTGluayBQcmV2aWV3
IHRvCisgICAgLy8gZGV0ZXJtaW5lIHRoZSBtaW5pbXVtIGFtb3VudCBuZWVkZWQgdG8gc2NhbGUg
dG8gZ2V0IGl0IHVwIHRvIGEKKyAgICAvLyB0b3VjaGFibGUgc2l6ZS4KKyAgICBpbnQgc21hbGxl
c3REaW1lbnNpb247Cit9OworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OwpAQCAtNDIzLDYgKzQ0NCwzMyBAQCBwdWJsaWM6CiAgICAg
Ly8gQVBJcy4KICAgICB2aXJ0dWFsIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRl
eHQzRCgpID0gMDsKIAorI2lmIGRlZmluZWQoQU5EUk9JRCkKKworICAgIC8vIFRvdWNoIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCisgICAgLy8gUmV0dXJucyBhIGxpc3Qgb2YgbGF5b3V0IGJvdW5kaW5nIGJveCBvZiB0aGUg
ZXZlbnQgdGFyZ2V0IG5vZGUgdG91Y2hlZCBieQorICAgIC8vIHRoZSBpbnB1dCBwb2ludCB3aXRo
IHRoZSBwYWRkaW5nLiBJZiBubyB0YXJnZXQgbm9kZSBpcyBmb3VuZCwgYW4gZW1wdHkKKyAgICAv
LyBsaXN0IGlzIHJldHVybmVkLiBJZiB0aGUgbm9kZSBpcyBpbmxpbmUgdHlwZSwgZWFjaCBsaW5l
IGJveCBpcyByZXR1cm5lZAorICAgIC8vIHNlcGFyYXRlbHkuIE90aGVyd2lzZSwgb25lIGJvdW5k
aW5nIGJveCBpcyByZXR1cm5lZC4KKyAgICAvLyBBbHNvIHJldHVybnMgdGhlIG51bWJlciBvZiB0
b3VjaCB0b3VjaCBub2RlcyB0aGF0IG1heSBoYXZlIGJlZW4KKyAgICAvLyBjYW5kaWRhdGVzIGZv
ciB0aGlzIHBvaW50LiBUaGlzIG51bWJlciBpcyB1c2VkIGJ5IFJlbmRlclZpZXcgdG8gc2hvdwor
ICAgIC8vIHRoZSBMaW5rIFByZXZpZXcgcG9wdXAuCisgICAgLy8gQWxzbyByZXR1cm5zIHRoZSBi
b3VuZHMgb2YgYWxsIHRoZSB0b3VjaCBub2RlcyB0aGF0IG1heSBoYXZlIGJlZW4KKyAgICAvLyBj
YW5kaWRhdGVzLCB0byBhbGxvdyBmb3IgYWNjdXJhdGUgem9vbWluZyBjb250YWluaW5nIGVhY2gg
bm9kZS4KKyAgICB2aXJ0dWFsIFdlYlZlY3RvcjxXZWJGbG9hdFF1YWQ+IGdldFRvdWNoSGlnaGxp
Z2h0UXVhZHMoY29uc3QgV2ViUG9pbnQmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGFkZGluZywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViVG91Y2hDYW5k
aWRhdGVzSW5mbyogb3V0VG91Y2hJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb2xvciYgb3V0VGFwSGlnaGxpZ2h0Q29s
b3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKSA9IDA7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBsaXN0IG9mIHF1YWRzIHJlcXVpcmVk
IHRvIGhpZ2hsaWdodCBhIGdpdmVuIHRleHQgcmFuZ2UuCisgICAgdmlydHVhbCBXZWJWZWN0b3I8
V2ViRmxvYXRRdWFkPiBnZXRUb3VjaEhpZ2hsaWdodFF1YWRzKGNvbnN0IFdlYlJhbmdlJiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V2ViQ29sb3ImIG91dFRhcEhpZ2hsaWdodENvbG9yKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQg
c2hvd1RvdWNoSGlnaGxpZ2h0UXVhZHMoY29uc3QgV2ViVmVjdG9yPFdlYkZsb2F0UXVhZD4mIGhp
Z2hsaWdodCwgV2ViQ29sb3IgaGlnaGxpZ2h0Q29sb3IpID0gMDsKKworI2VuZGlmCisKICAgICAv
LyBWaXNpYmlsaXR5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKICAgICAvLyBTZXRzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBXZWJW
aWV3LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IGVm
MTA2NDNjYmVjNmU0ODY0ZjFhODY5MmVlOTBlNjA1Zjk0NmQ0ZjcuLmRmZGI4ZTQwYjU4MWZmNTQz
Y2YzMDAzOWMxNzE2OGE0NjU1MDNhMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5jcHAKQEAgLTEyMzIsNiArMTIzMiwyMCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpw
YWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcmVjdCkKICAgICB9CiB9CiAK
KyNpZiBPUyhBTkRST0lEKQordm9pZCBXZWJWaWV3SW1wbDo6cGFpbnRMaW5rUHJldmlldyhXZWJD
YW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcmVjdCkKK3sKKyAgICBXZWJGcmFtZUltcGwq
IHdlYmZyYW1lID0gbWFpbkZyYW1lSW1wbCgpOworICAgIGlmICh3ZWJmcmFtZSkgeworICAgICAg
ICBGcmFtZVZpZXcqIHZpZXcgPSBwYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCk7CisgICAgICAg
IFBhaW50QmVoYXZpb3Igb2xkQmVoYXZpb3IgPSB2aWV3LT5wYWludEJlaGF2aW9yKCk7CisgICAg
ICAgIHZpZXctPnNldFBhaW50QmVoYXZpb3Iob2xkQmVoYXZpb3IgfCBQYWludEJlaGF2aW9yRmxh
dHRlbkNvbXBvc2l0aW5nTGF5ZXJzKTsKKyAgICAgICAgd2ViZnJhbWUtPnBhaW50KGNhbnZhcywg
cmVjdCk7CisgICAgICAgIHZpZXctPnNldFBhaW50QmVoYXZpb3Iob2xkQmVoYXZpb3IpOworICAg
IH0KK30KKyNlbmRpZgorCiB2b2lkIFdlYlZpZXdJbXBsOjp0aGVtZUNoYW5nZWQoKQogewogICAg
IGlmICghcGFnZSgpKQpAQCAtMzE2NCw2ICszMTc4LDQxNiBAQCBXZWJHcmFwaGljc0NvbnRleHQz
RCogV2ViVmlld0ltcGw6OmdyYXBoaWNzQ29udGV4dDNEKCkKICAgICByZXR1cm4gMDsKIH0KIAor
I2lmIE9TKEFORFJPSUQpCisKK3N0cnVjdCBUb3VjaE5vZGVEYXRhIHsKKyAgICBOb2RlKiBtTm9k
ZTsKKyAgICBJbnRSZWN0IG1Cb3VuZHM7CisgICAgU3RyaW5nIG1VUkw7CisgICAgYm9vbCBtSGFz
Q2xpY2tIYW5kbGVyOworICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSB0b3VjaCB0YXJnZXQgaXMg
YSBub24tYWN0aW9uYWJsZSBmb3JtIGVsZW1lbnQsIGxpa2UgYSB0ZXh0IGZpZWxkCisgICAgLy8g
b3IgcmFkaW8gYnV0dG9uLiBUaGVzZSB0YXJnZXRzIGNhbiBiZSBjbGlja2VkIHdpdGggbm8gcGFn
ZSBjaGFuZ2UuIEJ1dHRvbnMgYXJlIG5vdAorICAgIC8vIGluY2x1ZGVkIGFzIHRoZXkgY2FuIGNh
dXNlIHN0YXRlIGNoYW5nZS4KKyAgICBib29sIG1Jc0Zvcm1JbnB1dFR5cGU7CisKKyAgICBUb3Vj
aE5vZGVEYXRhKCkKKyAgICAgICAgOiBtTm9kZSgwKSwKKyAgICAgICAgICBtSGFzQ2xpY2tIYW5k
bGVyKGZhbHNlKSwKKyAgICAgICAgICBtSXNGb3JtSW5wdXRUeXBlKGZhbHNlKQorICAgIHsKKyAg
ICB9Cit9OworCisvLyBHbyB0aHJvdWdoIGVhY2ggcnVsZSB0byBmaWd1cmUgb3V0IGhvdyBtYW55
IGVmZmVjdGl2ZSAoZGlzdGluY3QpIHRvdWNoIHRhcmdldHMgdGhlcmUgYXJlLgorLy8gUmV0dXJu
IHRoZSBzbWFsbGVzdCBudW1iZXIuCitzdGF0aWMgc2l6ZV90IGdldEVmZmVjdGl2ZVRvdWNoVGFy
Z2V0cyhjb25zdCBWZWN0b3I8VG91Y2hOb2RlRGF0YT4mIG5vZGVzKQoreworICAgIC8vIEtlZXAg
dHJhY2sgb2YgZWFjaCBkaXN0aW5jdCBVUkwgZm9yIHRoZSBsaXN0IG9mIG5vZGVzLiBJZiBhIHVy
bCBpcyBkaXN0aW5jdCwKKyAgICAvLyBhZGQgaXQgdG8gdGhlIHZlY3Rvciwgb3RoZXJ3aXNlIHNr
aXAgaXQuIFRoaXMgc2hvdWxkIGdpdmUgdGhlIG51bWJlciBvZiBkaXN0aW5jdAorICAgIC8vIHVy
bHMuCisgICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiBleGlzdGluZ1VybHM7CisgICAgc2l6ZV90IG51
bWJlck9mQmxhbmtUYXJnZXRzID0gMDsKKyAgICBmb3IgKFZlY3RvcjxUb3VjaE5vZGVEYXRhPjo6
Y29uc3RfaXRlcmF0b3Igbm9kZSA9IG5vZGVzLmJlZ2luKCk7IG5vZGUgIT0gbm9kZXMuZW5kKCk7
ICsrbm9kZSkgeworICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIGphdmFzY3JpcHQgY2xpY2sgaGFu
ZGxlciwgYWRkIGl0IG5vIG1hdHRlciB3aGF0IGFzIHdlIGNhbm5vdAorICAgICAgICAvLyBkZXRl
cm1pbmUgd2hhdCB0aGUgaGFuZGxlciBpcy4gSWYgdGhlcmUgaXMgbm8gdXJsLCBhc3N1bWUgdGhh
dCB0aGVyZSBpcyBhbm90aGVyCisgICAgICAgIC8vIHJlYXNvbiB0aGF0IHRoaXMgaXMgY2xpY2th
YmxlLCBhbmQgZm9yY2UgaXQgdG8gY291bnQgYXMgYW5vdGhlciB0YXJnZXQuCisgICAgICAgIGlm
IChub2RlLT5tSGFzQ2xpY2tIYW5kbGVyIHx8IG5vZGUtPm1VUkwuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICArK251bWJlck9mQmxhbmtUYXJnZXRzOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyAgICAgICAgZXhpc3RpbmdVcmxzLmFkZChub2RlLT5tVVJMLmxvd2VyKCkpOwor
ICAgIH0KKworICAgIHJldHVybiBudW1iZXJPZkJsYW5rVGFyZ2V0cyArIGV4aXN0aW5nVXJscy5z
aXplKCk7Cit9CisKK3N0YXRpYyBUb3VjaE5vZGVEYXRhIGZpbmRCZXN0VG91Y2hOb2RlKFZlY3Rv
cjxUb3VjaE5vZGVEYXRhPiBub2RlRGF0YUxpc3QsIEludFJlY3QgdGVzdFJlY3QpCit7CisgICAg
VG91Y2hOb2RlRGF0YSBiZXN0Tm9kZTsKKyAgICBpbnQgbGFyZ2VzdE92ZXJsYXAgPSAwOworICAg
IGJvb2wgYmVzdE5vZGVJc0Zvcm1UeXBlID0gZmFsc2U7CisgICAgVmVjdG9yPFRvdWNoTm9kZURh
dGE+Ojpjb25zdF9pdGVyYXRvciBubGFzdCA9IG5vZGVEYXRhTGlzdC5lbmQoKTsKKyAgICBmb3Ig
KFZlY3RvcjxUb3VjaE5vZGVEYXRhPjo6Y29uc3RfaXRlcmF0b3IgbiA9IG5vZGVEYXRhTGlzdC5i
ZWdpbigpOyBuICE9IG5sYXN0OyArK24pIHsKKyAgICAgICAgSW50UmVjdCByZWN0ID0gbi0+bUJv
dW5kczsKKyAgICAgICAgcmVjdC5pbnRlcnNlY3QodGVzdFJlY3QpOworICAgICAgICBpbnQgYSA9
IHJlY3Qud2lkdGgoKSAqIHJlY3QuaGVpZ2h0KCk7CisgICAgICAgIC8vIEdpdmUgcHJlZmVyZW5j
ZSB0byBpbnB1dCBub2Rlcy4gSWYgdGhlIGV4aXN0aW5nIGJlc3QgY2hvaWNlIGlzIG5vdCBhbiBp
bnB1dCwKKyAgICAgICAgLy8gYW5kIHRoaXMgb25lIGlzLCBtYWtlIHRoaXMgdGhlIGJlc3QuIElm
IHRoZSBleGlzdGluZyBub2RlIGFscmVhZHkgaXMgYW4gaW5wdXQsCisgICAgICAgIC8vIGNoZWNr
IHRoaXMgb25lIGlmIGl0IGlzIGFuIGlucHV0IGFsc28sIG90aGVyd2lzZSBqdXN0IHNraXAgaXQu
CisgICAgICAgIGJvb2wgcHJlZmVyRm9ybVR5cGUgPSAoIWJlc3ROb2RlSXNGb3JtVHlwZSAmJiBu
LT5tSXNGb3JtSW5wdXRUeXBlKTsKKyAgICAgICAgYm9vbCBhbGxvd05vZGUgPSAhYmVzdE5vZGVJ
c0Zvcm1UeXBlIHx8IG4tPm1Jc0Zvcm1JbnB1dFR5cGU7CisgICAgICAgIGlmICgoYWxsb3dOb2Rl
ICYmIGEgPiBsYXJnZXN0T3ZlcmxhcCkgfHwgcHJlZmVyRm9ybVR5cGUpIHsKKyAgICAgICAgICAg
IGxhcmdlc3RPdmVybGFwID0gYTsKKyAgICAgICAgICAgIGJlc3ROb2RlID0gKm47CisgICAgICAg
ICAgICBpZiAobi0+bUlzRm9ybUlucHV0VHlwZSkKKyAgICAgICAgICAgICAgICBiZXN0Tm9kZUlz
Rm9ybVR5cGUgPSB0cnVlOworICAgICAgICB9CisgICAgIH0KKyAgICByZXR1cm4gYmVzdE5vZGU7
Cit9CisKK3N0YXRpYyBpbnQgZ2V0U21hbGxlc3REaW1lbnNpb24oY29uc3QgVmVjdG9yPFRvdWNo
Tm9kZURhdGE+JiBub2RlRGF0YUxpc3QpCit7CisgICAgVmVjdG9yPFRvdWNoTm9kZURhdGE+Ojpj
b25zdF9pdGVyYXRvciBubGFzdCA9IG5vZGVEYXRhTGlzdC5lbmQoKTsKKyAgICBpbnQgc21hbGxl
c3REaW1lbnNpb24gPSBJTlRfTUFYOworICAgIGZvciAoVmVjdG9yPFRvdWNoTm9kZURhdGE+Ojpj
b25zdF9pdGVyYXRvciBuID0gbm9kZURhdGFMaXN0LmJlZ2luKCk7IG4gIT0gbmxhc3Q7ICsrbikg
eworICAgICAgICBJbnRSZWN0IHJlY3QgPSBuLT5tQm91bmRzOworICAgICAgICBpZiAocmVjdC53
aWR0aCgpIDwgc21hbGxlc3REaW1lbnNpb24pCisgICAgICAgICAgICBzbWFsbGVzdERpbWVuc2lv
biA9IHJlY3Qud2lkdGgoKTsKKyAgICAgICAgaWYgKHJlY3QuaGVpZ2h0KCkgPCBzbWFsbGVzdERp
bWVuc2lvbikKKyAgICAgICAgICAgIHNtYWxsZXN0RGltZW5zaW9uID0gcmVjdC5oZWlnaHQoKTsK
KyAgICB9CisgICAgcmV0dXJuIHNtYWxsZXN0RGltZW5zaW9uOworfQorCisvLyBIZWxwZXIgZnVu
Y3Rpb24gZm9yIGdldFRvdWNoSGlnaGxpZ2h0UXVhZHMgdG8gZ2V0IHF1YWRzIGZvciBhbGwgZGVz
Y2VuZGFudCBlbGVtZW50cworc3RhdGljIHZvaWQgYWJzb2x1dGVRdWFkc1JlY3Vyc2l2ZShOb2Rl
KiBub2RlLCBWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCit7CisgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgVmVjdG9yPEZsb2F0UXVhZD4gbmV3cXVhZHM7CisgICAgcmVuZGVyZXIt
PmFic29sdXRlUXVhZHMobmV3cXVhZHMpOworCisgICAgLy8gdHJ5IHRvIGNsaXAgaGlnaGxpZ2h0
IGFyZWEgYWNjb3JkaW5nIHRvIGJsb2NrIHZpc2libGUgYXJlYQorICAgIC8vIGV4YW1wbGU6IDxk
aXYgc3R5bGU9ImhlaWdodDoxNnB4O292ZXJmbG93OmhpZGRlbiI+PGEgaHJlZj5MaW5lIDE8YnIv
PkxpbmUgMjxici8+TGluZSAzPC9hPjwvZGl2PgorICAgIC8vIGluIHRoaXMgY2FzZSB0aGUgPGE+
IGVsZW1lbnQgd291bGQgcmV0dXJuIDMgcXVhZHMgZm9yIGl0cyBoaWdobGlnaHQsIGJ1dCBvbmx5
IHRoZSB0b3AgMTZweCBpcyB2aXNpYmxlLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmV3
cXVhZHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKCFuZXdxdWFkc1tpXS5pc1JlY3RpbGlu
ZWFyKCkpIHsgLy8gZG9uJ3Qga25vdyBob3cgdG8gY2xpcCB0aGlzLiA6KAorICAgICAgICAgICAg
cXVhZHMuYXBwZW5kKG5ld3F1YWRzW2ldKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisgICAgICAgIEZsb2F0UmVjdCBjbGlwcGVkID0gbmV3cXVhZHNbaV0uYm91bmRpbmdCb3go
KTsKKyAgICAgICAgLy8gaXRlcmF0ZSB0aHJvdWdoIGFsbCBhbmNlc3RvciBibG9ja3Mgb2YgdGhl
IGVsZW1lbnQKKyAgICAgICAgZm9yIChSZW5kZXJCbG9jayAqYmxrID0gcmVuZGVyZXItPmNvbnRh
aW5pbmdCbG9jaygpOyBibGsgJiYgIWJsay0+aXNSZW5kZXJWaWV3KCk7IGJsayA9IGJsay0+Y29u
dGFpbmluZ0Jsb2NrKCkpIHsKKyAgICAgICAgICAgIGlmICghYmxrLT5oYXNPdmVyZmxvd0NsaXAo
KSkgLy8gc2tpcCBpZiB0aGUgYmxvY2sgYWxsb3dzIG92ZXJmbG93CisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAvLyBmaW5kIG91dCB0aGUgdmlzaWJsZSBhcmVhIG9mIHRo
ZSBibG9jaworICAgICAgICAgICAgRmxvYXRRdWFkIGJvdW5kUXVhZCA9IGJsay0+bG9jYWxUb0Fi
c29sdXRlUXVhZChzdGF0aWNfY2FzdDxGbG9hdFJlY3Q+KGJsay0+dmlzdWFsT3ZlcmZsb3dSZWN0
KCkpKTsKKyAgICAgICAgICAgIGlmICghYm91bmRRdWFkLmlzUmVjdGlsaW5lYXIoKSkgLy8gZG9u
J3Qga25vdyBob3cgdG8gY2xpcCB0aGlzLiA6KAorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgRmxvYXRSZWN0IGJvdW5kUmVjdCA9IGJvdW5kUXVhZC5ib3VuZGluZ0JveCgp
OworICAgICAgICAgICAgY2xpcHBlZC5pbnRlcnNlY3QoYm91bmRSZWN0KTsKKyAgICAgICAgfQor
CisgICAgICAgIHF1YWRzLmFwcGVuZChzdGF0aWNfY2FzdDxGbG9hdFF1YWQ+KGNsaXBwZWQpKTsK
KyAgICB9CisKKyAgICBpZiAocmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICBy
ZXR1cm47CisgICAgLy8gVE9ETyh0cmNoZW4pOiBzaG91bGQgb3B0aW1pemUgZm9yIHRoZSBjYXNl
IHdoZW4gdGhlIGNoaWxkIGVsZW1lbnQgaXMgc3RyaWN0bHkKKyAgICAvLyAgICAgZW5jbG9zZWQg
aW4gaXRzIHBhcmVudCBlbGVtZW50IHNvIHdlIGNhbiBza2lwIGl0LgorICAgIGZvciAoTm9kZSAq
Y2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2li
bGluZygpKQorICAgICAgICBhYnNvbHV0ZVF1YWRzUmVjdXJzaXZlKGNoaWxkLCBxdWFkcyk7Cit9
CisKKy8vIFJldHVybnMgYSBsaXN0IG9mIGxheW91dCBib3VuZGluZyBib3ggb2YgdGhlIGV2ZW50
IHRhcmdldCBub2RlIHRvdWNoZWQgYnkgdGhlCisvLyBpbnB1dCBwb2ludCB3aXRoIHRoZSBwYWRk
aW5nLiBJZiBubyB0YXJnZXQgbm9kZSBpcyBmb3VuZCwgYW4gZW1wdHkgbGlzdCBpcworLy8gcmV0
dXJuZWQuIElmIHRoZSBub2RlIGlzIGlubGluZSB0eXBlLCBlYWNoIGxpbmUgYm94IGlzIHJldHVy
bmVkIHNlcGFyYXRlbHkuCisvLyBPdGhlcndpc2UsIG9uZSBib3VuZGluZyBib3ggaXMgcmV0dXJu
ZWQuIFRoaXMgaXMgdXNlZCB0byBkcmF3IHRoZSBvdXRsaW5lCisvLyBmb3IgdGhlIHRvdWNoIGhp
Z2hsaWdodC4KKy8vCisvLyBvdXRUb3VjaEluZm8gaXMgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCBm
b3IgdGhlIExpbmsgUHJldmlldyBvcHRpb24uCitXZWJWZWN0b3I8V2ViRmxvYXRRdWFkPiBXZWJW
aWV3SW1wbDo6Z2V0VG91Y2hIaWdobGlnaHRRdWFkcyhjb25zdCBXZWJQb2ludCYgaW5wdXRQb2lu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBwYWRkaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0OjpXZWJUb3VjaENhbmRpZGF0ZXNJbmZvKiBv
dXRUb3VjaEluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXZWJDb2xvciYgb3V0VGFwSGlnaGxpZ2h0Q29sb3IKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKK3sK
KyAgICBvdXRUb3VjaEluZm8tPm51bWJlck9mQ2FuZGlkYXRlcyA9IDA7CisgICAgb3V0VG91Y2hJ
bmZvLT51bml0ZWRCb3VuZHMgPSBJbnRSZWN0KCk7CisgICAgb3V0VGFwSGlnaGxpZ2h0Q29sb3Ig
PSBSZW5kZXJTdHlsZTo6aW5pdGlhbFRhcEhpZ2hsaWdodENvbG9yKCkucmdiKCk7CisgICAgaWYg
KCFtYWluRnJhbWVJbXBsKCkpCisgICAgICAgIHJldHVybiBXZWJWZWN0b3I8V2ViRmxvYXRRdWFk
PigpOworICAgIC8vIFVzZSB0aGUgcmVjdC1iYXNlZCBoaXQgdGVzdCB0byBnZXQgYSBsaXN0IG9m
IGNhbmRpZGF0ZXMuCisgICAgSW50UG9pbnQgcG9pbnQgPSBtYWluRnJhbWVJbXBsKCktPmZyYW1l
VmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGlucHV0UG9pbnQpOworICAgIHBhZGRpbmcgPSBzdGF0
aWNfY2FzdDxpbnQ+IChwYWRkaW5nIC8gcGFnZVNjYWxlRmFjdG9yKCkpOworICAgIEhpdFRlc3RS
ZXN1bHQgcmVzdWx0ID0gbWFpbkZyYW1lSW1wbCgpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+
aGl0VGVzdFJlc3VsdEF0UG9pbnQocG9pbnQsCisgICAgICAgICAgICBmYWxzZSwgZmFsc2UsIERv
bnRIaXRUZXN0U2Nyb2xsYmFycywgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSB8IEhpdFRlc3RSZXF1
ZXN0OjpSZWFkT25seSwKKyAgICAgICAgICAgIEludFNpemUocGFkZGluZywgcGFkZGluZykpOwor
ICAgIC8vIFF1aWNrIHJlamVjdCBpZiBubyBub2RlIGlzIGhpdC4KKyAgICBjb25zdCBMaXN0SGFz
aFNldDxSZWZQdHI8Tm9kZT4gPiYgbGlzdCA9IHJlc3VsdC5yZWN0QmFzZWRUZXN0UmVzdWx0KCk7
CisgICAgaWYgKGxpc3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gV2ViVmVjdG9yPFdlYkZs
b2F0UXVhZD4oKTsKKyAgICAvLyBUcmF2ZXJzZSB0aGUgY2FuZGlkYXRlIGxpc3QgdG8gZmluZCB0
aGUgYmVzdCB0b3VjaCB0YXJnZXQKKyAgICBGcmFtZSogZnJhbWUgPSBsaXN0LmJlZ2luKCktPmdl
dCgpLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIFZlY3RvcjxUb3VjaE5vZGVEYXRhPiBub2Rl
RGF0YUxpc3Q7CisgICAgTGlzdEhhc2hTZXQ8UmVmUHRyPE5vZGU+ID46OmNvbnN0X2l0ZXJhdG9y
IGxhc3QgPSBsaXN0LmVuZCgpOworICAgIGZvciAoTGlzdEhhc2hTZXQ8UmVmUHRyPE5vZGU+ID46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGlzdC5iZWdpbigpOyBpdCAhPSBsYXN0OyArK2l0KSB7Cisg
ICAgICAgIC8vIFRPRE8gaXQgc2VlbXMgcmVhc29uYWJsZSB0byBub3Qgc2VhcmNoIGFjcm9zcyB0
aGUgZnJhbWUsIHJpZ2h0PworICAgICAgICBpZiAoaXQtPmdldCgpLT5kb2N1bWVudCgpLT5mcmFt
ZSgpICE9IGZyYW1lKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIC8vIFRyYXZlcnNl
IHVwIHRoZSB0cmVlIHRvIGZpbmQgdGhlIGZpcnN0IG5vZGUgdGhhdCBtYXkgYmUgdGhlIHRvdWNo
IHRhcmdldC4KKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBOb2RlKiBldmVu
dE5vZGUgPSBpdC0+Z2V0KCk7CisgICAgICAgIHdoaWxlIChldmVudE5vZGUpIHsKKyAgICAgICAg
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyID0gZXZlbnROb2RlLT5yZW5kZXJlcigpOworICAgICAg
ICAgICAgaWYgKHJlbmRlci0+aXNCb2R5KCkgfHwgcmVuZGVyLT5pc1JlbmRlclZpZXcoKSkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChldmVudE5vZGUtPnN1cHBvcnRz
Rm9jdXMoKQorICAgICAgICAgICAgICAgICAgICB8fCBldmVudE5vZGUtPmhhc0V2ZW50TGlzdGVu
ZXJzKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KQorICAgICAgICAgICAgICAgICAgICB8fCBldmVu
dE5vZGUtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkKKyAg
ICAgICAgICAgICAgICAgICAgfHwgZXZlbnROb2RlLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5h
bWVzKCkubW91c2V1cEV2ZW50KSkgeworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFRoZSBu
b2RlcyBpbiB0aGUgcmVjdEJhc2VkVGVzdFJlc3VsdCgpIGFyZSBvcmRlcmVkIGJhc2VkIG9uCisg
ICAgICAgICAgICAvLyB6LWluZGV4IGR1cmluZyBoaXQgdGVzdGluZy4gU28gZG8gbm90IHNlYXJj
aCBmb3IgdGhlIGV2ZW50Tm9kZQorICAgICAgICAgICAgLy8gYWNyb3NzIGV4cGxpY2l0IHotaW5k
ZXggYm9yZGVyLgorICAgICAgICAgICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhcmQgb25lLiB6LWlu
ZGV4IGlzIHF1aXRlIGNvbXBsaWNhdGVkIGFzCisgICAgICAgICAgICAvLyBpdHMgdmFsdWUgb25s
eSBtYXR0ZXJzIHdoZW4geW91IGNvbXBhcmUgdHdvIFJlbmRlckxheWVycyBpbiB0aGUKKyAgICAg
ICAgICAgIC8vIHNhbWUgaGllcmFyY2h5IGxldmVsLiBlLmcuIGluIHRoZSBmb2xsb3dpbmcgZXhh
bXBsZSwgImIiIGlzIG9uCisgICAgICAgICAgICAvLyB0aGUgdG9wIGFzIGl0cyB6IGxldmVsIGlz
IHRoZSBoaWdoZXN0LiBldmVuICJjIiBoYXMgMTAwIGFzCisgICAgICAgICAgICAvLyB6LWluZGV4
LCBpdCBpcyBzdGlsbCBiZWxvdyAiZCIgYXMgaXRzIHBhcmVudCBoYXMgdGhlIHNhbWUgei1pbmRl
eAorICAgICAgICAgICAgLy8gYXMgImQiIGFuZCBsb2dpY2FsbHkgYmVmb3JlICJkIi4gT2YgY291
cnNlICJhIiBpcyB0aGUgbG93ZXN0IGluCisgICAgICAgICAgICAvLyB0aGUgeiBsZXZlbC4KKyAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyB6LWluZGV4OmF1dG8gImEiCisgICAgICAgICAg
ICAvLyAgIHotaW5kZXg6MiAiYiIKKyAgICAgICAgICAgIC8vICAgei1pbmRleDoxCisgICAgICAg
ICAgICAvLyAgICAgei1pbmRleDoxMDAgImMiCisgICAgICAgICAgICAvLyAgIHotaW5kZXg6MSAi
ZCIKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBJZiB0aGUgZmF0IHBvaW50IHRvdWNo
ZXMgZXZlcnkgbm9kZSwgdGhlIG9yZGVyIGluIHRoZSBsaXN0IHNob3VsZAorICAgICAgICAgICAg
Ly8gYmUgImIiLCAiZCIsICJjIiBhbmQgImEiLiBXaGVuIHdlIHNlYXJjaCBmb3IgdGhlIGV2ZW50
IG5vZGUgZm9yCisgICAgICAgICAgICAvLyAiYiIsIHdlIHJlYWxseSBkb24ndCB3YW50ICJhIiBh
cyBpdCBpcyBiZWhpbmQgZXZlcnl0aGluZyBlbHNlLgorICAgICAgICAgICAgaWYgKCFyZW5kZXIt
PnN0eWxlKCktPmhhc0F1dG9aSW5kZXgoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGV2ZW50Tm9kZSA9IGV2ZW50Tm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICB9Cisg
ICAgICAgIC8vIERpZG4ndCBmaW5kIGFueSB0b3VjaCB0YXJnZXQsIHNraXAgaXQuCisgICAgICAg
IGlmICghZm91bmQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgLy8gQmVmb3JlIGNv
bXB1dGluZyB0aGUgYm91bmRpbmcgYm94IHdoaWNoIGlzIGV4cGVuc2l2ZSwgZG8gYSBxdWljayBj
aGVjaworICAgICAgICAvLyB3aGV0aGVyIGl0IGlzIGEgZHVwbGljYXRlZCBub2RlLCBvciB3aGV0
aGVyIGl0IGlzIGEgcGFyZW50IG9mIGFuIGV4aXN0aW5nIG5vZGUuCisgICAgICAgIC8vIFdlIGRv
bnQgd2FudCBhbnNjZXN0b3JzLCBvbmx5IHRoZSBkZWVwZXN0IG5vZGUgYXMgZXZlbnRzIHdpbGwg
YnViYmxlIHVwLgorICAgICAgICBmb3IgKGludCBpbmRleCA9IG5vZGVEYXRhTGlzdC5zaXplKCkg
LSAxOyBpbmRleCA+PSAwOyAtLWluZGV4KSB7CisgICAgICAgICAgICBUb3VjaE5vZGVEYXRhIG4g
PSBub2RlRGF0YUxpc3RbaW5kZXhdOworICAgICAgICAgICAgLy8gZm91bmQgdGhlIHNhbWUgbm9k
ZSwgb3IgYW4gYW5jZXN0b3Igb2YgYW4gZXhpc3Rpbmcgbm9kZTsgc2tpcCBpdAorICAgICAgICAg
ICAgaWYgKGV2ZW50Tm9kZSA9PSBuLm1Ob2RlIHx8IG4ubU5vZGUtPmlzRGVzY2VuZGFudE9mKGV2
ZW50Tm9kZSkpIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gSWYgYW4gZXhpc3Rpbmcg
bm9kZSBpcyBhbiBhbmNlc3RvciBvZiB0aGlzIG5ldyBub2RlLCByZW1vdmUgdGhlIGFuY2VzdG9y
LgorICAgICAgICAgICAgaWYgKG4ubU5vZGUtPmNvbnRhaW5zKGV2ZW50Tm9kZSkpCisgICAgICAg
ICAgICAgICAgbm9kZURhdGFMaXN0LnJlbW92ZShpbmRleCk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIWZvdW5kKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIC8vIE5vdyBjaGVj
ayB3aGV0aGVyIHRoZSBub2RlIGlzIGZ1bGx5IGNvdmVyZWQgYnkgb3IgZnVsbHkgY292ZXJpbmcg
YW5vdGhlciBub2RlLgorICAgICAgICBmb3VuZCA9IGZhbHNlOworCisgICAgICAgIC8vIE5vZGU6
OmdldFJlY3Qgb25seSBhcHBseSB0cmFuc2Zvcm0gcGFydGlhbGx5IGF0IHRpbWUgb2Ygd3JpdGlu
ZyAoMDkvMDcvMjAxMSksCisgICAgICAgIC8vIG9ubHkgdGhlIHBvc2l0aW9uIGlzIGNvcnJlY3Rs
eSB0cmFuc2Zvcm1lZCwgbGVhdmluZyBzaXplIHVudHJhbnNmb3JtZWQuCisgICAgICAgIC8vIENh
bGwgTm9kZTo6Z2V0UmVjdCBleHBsaWNpdGx5IHVudGlsIHRoZSBwcm9ibGVtIGlzIHNvbHZlZC4K
KyAgICAgICAgSW50UmVjdCByZWN0ID0gZXZlbnROb2RlLT5Ob2RlOjpnZXRSZWN0KCk7IC8vIHdv
cmthcm91bmQgQ29udGFpbmVyTm9kZTo6Z2V0UmVjdCB0cmFuc2Zvcm1hdGlvbiBidWcKKworICAg
ICAgICBpZiAocmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBub2RlJ3Mg
Ym91bmRzIGlzIGVtcHR5IGFuZCBpdCBpcyBub3QgYSBDb250YWluZXJOb2RlLCBza2lwIGl0Lgor
ICAgICAgICAgICAgaWYgKCFldmVudE5vZGUtPmlzQ29udGFpbmVyTm9kZSgpKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgLy8gSWYgdGhlIG5vZGUncyBjaGlsZHJlbiBh
cmUgYWxsIHBvc2l0aW9uZWQgb2JqZWN0cywgaXRzIGJvdW5kcyBjYW4KKyAgICAgICAgICAgIC8v
IGJlIGVtcHR5LiBXYWxrIHRocm91Z2ggdGhlIGNoaWxkcmVuIHRvIGZpbmQgdGhlIGJvdW5kaW5n
IGJveC4KKyAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ29udGFp
bmVyTm9kZSo+KGV2ZW50Tm9kZSktPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgIHdoaWxlIChj
aGlsZCkgeworICAgICAgICAgICAgICAgIEludFJlY3QgY2hpbGRyZWN0ID0gY2hpbGQtPk5vZGU6
OmdldFJlY3QoKTsgLy8gd29ya2Fyb3VuZCBDb250YWluZXJOb2RlOjpnZXRSZWN0IHRyYW5zZm9y
bWF0aW9uIGJ1ZworICAgICAgICAgICAgICAgIGlmICghY2hpbGRyZWN0LmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgICAgICAgICByZWN0LnVuaXRlKGNoaWxkcmVjdCk7CisgICAgICAgICAgICAg
ICAgICAgIGNoaWxkID0gY2hpbGQtPnRyYXZlcnNlTmV4dFNpYmxpbmcoZXZlbnROb2RlKTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+
dHJhdmVyc2VOZXh0Tm9kZShldmVudE5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Ly8gSWYgdGhlIHJlY3QgaXMgc3RpbGwgZW1wdHksIHNraXAgaXQuCisgICAgICAgICAgICBpZiAo
cmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gTm90ZTogaXQgaXMgaW1wb3J0YW50IHRvIHVzZSAiaW50IiBpbnN0ZWFkIG9mICJz
aXplX3QiIGZvciBpIHRvIGF2b2lkCisgICAgICAgIC8vIGluZmluaXRlIGxvb3AgdHJpZ2dlcmVk
IGJ5IGF1dG8gY29udmVyc2lvbiBvZiB1bnNpZ25lZC1zaWduZWQuCisgICAgICAgIGZvciAoaW50
IGkgPSBub2RlRGF0YUxpc3Quc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAg
IFRvdWNoTm9kZURhdGEgbiA9IG5vZGVEYXRhTGlzdC5hdChpKTsKKyAgICAgICAgICAgIC8vIFRo
ZSBuZXcgbm9kZSBpcyBlbmNsb3NpbmcgYW4gZXhpc3Rpbmcgbm9kZSwgc2tpcCBpdC4KKyAgICAg
ICAgICAgIGlmIChyZWN0LmNvbnRhaW5zKG4ubUJvdW5kcykpIHsKKyAgICAgICAgICAgICAgICBm
b3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAvLyBUaGUgbmV3IG5vZGUgaXMgZnVsbHkgaW5zaWRlIGFuIGV4aXN0aW5nIG5vZGUs
IHJlbW92ZSB0aGUgZXhpc3Rpbmcgbm9kZS4KKyAgICAgICAgICAgIGlmIChuLm1Cb3VuZHMuY29u
dGFpbnMocmVjdCkpCisgICAgICAgICAgICAgICAgbm9kZURhdGFMaXN0LnJlbW92ZShpKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICBUb3VjaE5vZGVEYXRh
IG5ld05vZGU7CisgICAgICAgICAgICBuZXdOb2RlLm1Ob2RlID0gZXZlbnROb2RlOworICAgICAg
ICAgICAgbmV3Tm9kZS5tQm91bmRzID0gcmVjdDsKKyAgICAgICAgICAgIC8vIFdoYXQgaWYgdGhp
cyBpcyBub3QgYW4gZWxlbWVudD8/CisgICAgICAgICAgICBpZiAoZXZlbnROb2RlLT5pc0VsZW1l
bnROb2RlKCkgJiYgZXZlbnROb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YVRhZykpIHsKKyAg
ICAgICAgICAgICAgICBIVE1MQW5jaG9yRWxlbWVudCogZWwgPSBzdGF0aWNfY2FzdDxIVE1MQW5j
aG9yRWxlbWVudCo+KGV2ZW50Tm9kZSk7CisgICAgICAgICAgICAgICAgbmV3Tm9kZS5tVVJMID0g
ZWwtPmhyZWYoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG5ld05vZGUu
bVVSTCA9ICIiOworICAgICAgICAgICAgbmV3Tm9kZS5tSXNGb3JtSW5wdXRUeXBlID0KKyAgICAg
ICAgICAgICAgICAgICAgZXZlbnROb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcp
IC8vIGNhdGNoZXMgYm90aCB0ZXh0IGZpZWxkcyBhbmQgcmFkaW8gYnV0dG9ucworICAgICAgICAg
ICAgICAgICAgICB8fCBldmVudE5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRncm91cFRh
ZykKKyAgICAgICAgICAgICAgICAgICAgfHwgZXZlbnROb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6dGV4dGFyZWFUYWcpCisgICAgICAgICAgICAgICAgICAgIHx8IGV2ZW50Tm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6Om9wdGlvblRhZykKKyAgICAgICAgICAgICAgICAgICAgfHwgZXZlbnRO
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2VsZWN0VGFnKTsKKyAgICAgICAgICAgIG5ld05v
ZGUubUhhc0NsaWNrSGFuZGxlciA9IGV2ZW50Tm9kZS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnRO
YW1lcygpLmNsaWNrRXZlbnQpOworICAgICAgICAgICAgbm9kZURhdGFMaXN0LmFwcGVuZChuZXdO
b2RlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG91dFRvdWNoSW5mby0+bnVtYmVyT2ZDYW5k
aWRhdGVzID0gZ2V0RWZmZWN0aXZlVG91Y2hUYXJnZXRzKG5vZGVEYXRhTGlzdCk7CisKKyAgICAv
LyBSZXR1cm4gaWYgbm8gdG91Y2ggdGFyZ2V0IGlzIGZvdW5kLgorICAgIGlmIChub2RlRGF0YUxp
c3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gV2ViVmVjdG9yPFdlYkZsb2F0UXVhZD4oKTsK
KworICAgIC8vIFNlbGVjdCBhIG5vZGUgd2hpY2ggaGFzIHRoZSBsYXJnZXN0IG92ZXJsYXAgd2l0
aCB0aGUgZmF0IHBvaW50LgorICAgIEludFJlY3QgdGVzdFJlY3QgPSByZXN1bHQucmVjdEZvclBv
aW50KGZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMoaW5wdXRQb2ludCkpOworICAgIFRv
dWNoTm9kZURhdGEgYmVzdE5vZGUgPSBmaW5kQmVzdFRvdWNoTm9kZShub2RlRGF0YUxpc3QsIHRl
c3RSZWN0KTsKKyAgICBpZiAoYmVzdE5vZGUubUlzRm9ybUlucHV0VHlwZSkKKyAgICAgICAgb3V0
VG91Y2hJbmZvLT5udW1iZXJPZkNhbmRpZGF0ZXMgPSAxOworCisgICAgLy8gSWYgdGhlIHdlYnNp
dGUgaXMgbm90IHVzZXJTY2FsYWJsZSwgd2UgYXNzdW1lIGl0IGlzIGEgbW9iaWxlIGZvcm1hdHRl
ZCBzaXRlLCBhbmQgZGlzYWJsZSB0aGlzLgorICAgIFZpZXdwb3J0QXJndW1lbnRzIHZpZXdwb3J0
ID0gZnJhbWUtPmRvY3VtZW50KCktPnZpZXdwb3J0QXJndW1lbnRzKCk7CisgICAgaWYgKCF2aWV3
cG9ydC51c2VyU2NhbGFibGUpCisgICAgICBvdXRUb3VjaEluZm8tPm51bWJlck9mQ2FuZGlkYXRl
cyA9IDE7CisKKyAgICBJbnRSZWN0IHVuaXRlZEJvdW5kczsgLy8gVGhlIGJvdW5kcyBvZiBhbGwg
cG9zc2libGUgdG91Y2ggdGFyZ2V0cy4KKyAgICBmb3IgKFZlY3RvcjxUb3VjaE5vZGVEYXRhPjo6
Y29uc3RfaXRlcmF0b3Igbm9kZSA9IG5vZGVEYXRhTGlzdC5iZWdpbigpOyBub2RlICE9IG5vZGVE
YXRhTGlzdC5lbmQoKTsgKytub2RlKQorICAgICAgICB1bml0ZWRCb3VuZHMudW5pdGUobm9kZS0+
bUJvdW5kcyk7CisKKyAgICAvLyBDaGVjayBmb3IgdGlueSB0YXJnZXRzIG5leHQgdG8gbGFyZ2Ug
dGFyZ2V0cy4gSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhlIHVzZXIgcHJvYmFibHkgbWVhbnQgdG8g
dGFwCisgICAgLy8gdGhhdCBub2RlLgorICAgIGlmIChvdXRUb3VjaEluZm8tPm51bWJlck9mQ2Fu
ZGlkYXRlcyA+IDEpIHsKKyAgICAgICAgLy8gS2VlcCB0cmFjayBvZiB0aGUgdGlueSBub2RlcyBp
biBjYXNlIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lLCB3ZSdsbCB1c2UgdGhlbSB0byB6b29tIGlu
dG8uCisgICAgICAgIFZlY3RvcjxUb3VjaE5vZGVEYXRhPiB0aW55Tm9kZXM7CisgICAgICAgIGlu
dCB0b3RhbEFyZWEgPSB1bml0ZWRCb3VuZHMuaGVpZ2h0KCkgKiB1bml0ZWRCb3VuZHMud2lkdGgo
KTsKKyAgICAgICAgZm9yIChWZWN0b3I8VG91Y2hOb2RlRGF0YT46OmNvbnN0X2l0ZXJhdG9yIG5v
ZGUgPSBub2RlRGF0YUxpc3QuYmVnaW4oKTsgbm9kZSAhPSBub2RlRGF0YUxpc3QuZW5kKCk7ICsr
bm9kZSkgeworICAgICAgICAgICAgSW50UmVjdCByZWN0ID0gbm9kZS0+bUJvdW5kczsKKyAgICAg
ICAgICAgIGludCBub2RlQXJlYSA9IHJlY3Qud2lkdGgoKSAqIHJlY3QuaGVpZ2h0KCk7CisgICAg
ICAgICAgICAvLyBJZiB0aGUgYm91bmRzIG9mIHRoaXMgdGFyZ2V0IGlzIG1vcmUgdGhhbiA1IHRp
bWVzIHNtYWxsZXIgdGhhbiB0aGUgb3ZlcmFsbCB0YXJnZXQgYXJlYSwKKyAgICAgICAgICAgIC8v
IHRoZSB1c2VyIHByb2JhYmx5IG1lYW50IHRvIHRhcCB0aGlzIG9uZSwgb3RoZXJ3aXNlIHRoZXkg
d291bGQgaGF2ZSB0YXBwZWQgc29tZXdoZXJlIGluIHRoZQorICAgICAgICAgICAgLy8gbWlkZGxl
IG9mIHRoZSBsYXJnZXIgdGFyZ2V0cy4gSW4gdGhpcyBjYXNlLCBqdXN0IGNsaWNrIHRoZSBzbWFs
bCB0YXJnZXQuIEluIHRoZSB2ZXJ5IHVubGlrZWx5CisgICAgICAgICAgICAvLyBjYXNlIHRoYXQg
bXVsdGlwbGUgdGFyZ2V0cyBtZWV0IHRoaXMgY3JpdGVyaWEsIHRoZSBKdXN0LUluLVRpbWUgem9v
bSB3aWxsIGNvbnRpbnVlIHRvIHNob3cuCisgICAgICAgICAgICBpZiAobm9kZUFyZWEgKiA1IDwg
dG90YWxBcmVhKSB7CisgICAgICAgICAgICAgICAgdGlueU5vZGVzLmFwcGVuZCgqbm9kZSk7Cisg
ICAgICAgICAgICAgICAgYmVzdE5vZGUgPSAqbm9kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAvLyBJZiB0aGVyZSBpcyBvbmx5IG9uZSB0aW55IHRhcmdldCwgdXNlIGl0IGFz
IHRoZSBvbmx5IHRhcmdldC4gT3RoZXJ3aXNlLCBjb250aW51ZSBhcyBwbGFubmVkLgorICAgICAg
ICBpZiAoIXRpbnlOb2Rlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG5vZGVEYXRhTGlzdC5z
d2FwKHRpbnlOb2Rlcyk7CisgICAgICAgICAgICBvdXRUb3VjaEluZm8tPm51bWJlck9mQ2FuZGlk
YXRlcyA9IG5vZGVEYXRhTGlzdC5zaXplKCk7CisgICAgICAgICAgICB1bml0ZWRCb3VuZHMuc2V0
V2lkdGgoMCk7CisgICAgICAgICAgICB1bml0ZWRCb3VuZHMuc2V0SGVpZ2h0KDApOworICAgICAg
ICAgICAgZm9yIChWZWN0b3I8VG91Y2hOb2RlRGF0YT46OmNvbnN0X2l0ZXJhdG9yIG5vZGUgPSBu
b2RlRGF0YUxpc3QuYmVnaW4oKTsgbm9kZSAhPSBub2RlRGF0YUxpc3QuZW5kKCk7ICsrbm9kZSkK
KyAgICAgICAgICAgICAgICB1bml0ZWRCb3VuZHMudW5pdGUobm9kZS0+bUJvdW5kcyk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBvdXRUb3VjaEluZm8tPnNtYWxsZXN0RGltZW5zaW9uID0gZ2V0
U21hbGxlc3REaW1lbnNpb24obm9kZURhdGFMaXN0KTsKKworICAgIHsgLy8gY2xhbXAgdG91Y2gg
Y2FuZGlkYXRlcyBib3VuZCB0byB0aGUgdmlld3BvcnQgYmVjYXVzZSB3ZSBjYW4ndCByZWFkIHBp
eGVscyBmcm9tIG9mZi1zY3JlZW4gYXJlYSBpbiBIVyBtb2RlCisgICAgICAgIGNvbnN0IEludFJl
Y3Qgdmlld3BvcnQoSW50UG9pbnQoMCwgMCksIHNpemUoKSk7CisgICAgICAgIHVuaXRlZEJvdW5k
cyA9IGZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3codW5pdGVkQm91bmRzKTsKKyAgICAg
ICAgdW5pdGVkQm91bmRzLmludGVyc2VjdCh2aWV3cG9ydCk7CisgICAgICAgIG91dFRvdWNoSW5m
by0+dW5pdGVkQm91bmRzID0gdW5pdGVkQm91bmRzOworCisgICAgICAgIC8vIFJldHVybiBlbXB0
eSBoaWdobGlnaHQgaWYgdG91Y2ggdGFyZ2V0IGlzIHRvbyBiaWcuCisgICAgICAgIGlmIChiZXN0
Tm9kZS5tTm9kZSkgeworICAgICAgICAgICAgSW50UmVjdCBub2RlQm91bmRzID0gZnJhbWUtPnZp
ZXcoKS0+Y29udGVudHNUb1dpbmRvdyhiZXN0Tm9kZS5tQm91bmRzKTsKKyAgICAgICAgICAgIG5v
ZGVCb3VuZHMuaW50ZXJzZWN0KHZpZXdwb3J0KTsKKyAgICAgICAgICAgIGlmIChub2RlQm91bmRz
LndpZHRoKCkgPiAwLjggKiBtX3NpemUud2lkdGggJiYgbm9kZUJvdW5kcy5oZWlnaHQoKSA+IDAu
OCAqIG1fc2l6ZS5oZWlnaHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYlZlY3RvcjxXZWJG
bG9hdFF1YWQ+KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBXZSB3YW50IHRvIGV4Y2x1
ZGUgYW4gZWxlbWVudCB0aGF0IG9ubHkgYWNjZXB0cyBtb3VzZSBldmVudHMgZnJvbSBoaWdobGln
aHRpbmcuIEFzIGRpc2N1c3NlZCBpbiBiLzU2OTA5NzcKKyAgICBpZiAoIWJlc3ROb2RlLm1Ob2Rl
IHx8ICEoYmVzdE5vZGUubU5vZGUtPnN1cHBvcnRzRm9jdXMoKSB8fCBiZXN0Tm9kZS5tTm9kZS0+
aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpKSkKKyAgICAgICAgcmV0
dXJuIFdlYlZlY3RvcjxXZWJGbG9hdFF1YWQ+KCk7CisKKyAgICBvdXRUYXBIaWdobGlnaHRDb2xv
ciA9CisgICAgICAgIGJlc3ROb2RlLm1Ob2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLT50YXBIaWdo
bGlnaHRDb2xvcigpLnJnYigpOworICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIGFi
c29sdXRlUXVhZHNSZWN1cnNpdmUoYmVzdE5vZGUubU5vZGUsIHF1YWRzKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcXVhZHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgLy8gVE9ETyh0
cmNoZW4pOiBzaG91bGQgY2hhbmdlIEZsb2F0UXVhZCB0byB1c2UgYXJyYXkgaW4gdXBzdHJlYW0u
Li4KKyAgICAgICAgcXVhZHNbaV0uc2V0UDEoZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRv
dyhyb3VuZGVkSW50UG9pbnQocXVhZHNbaV0ucDEoKSkpKTsKKyAgICAgICAgcXVhZHNbaV0uc2V0
UDIoZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyb3VuZGVkSW50UG9pbnQocXVhZHNb
aV0ucDIoKSkpKTsKKyAgICAgICAgcXVhZHNbaV0uc2V0UDMoZnJhbWUtPnZpZXcoKS0+Y29udGVu
dHNUb1dpbmRvdyhyb3VuZGVkSW50UG9pbnQocXVhZHNbaV0ucDMoKSkpKTsKKyAgICAgICAgcXVh
ZHNbaV0uc2V0UDQoZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyb3VuZGVkSW50UG9p
bnQocXVhZHNbaV0ucDQoKSkpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcXVhZHM7Cit9CisKK1dl
YlZlY3RvcjxXZWJGbG9hdFF1YWQ+IFdlYlZpZXdJbXBsOjpnZXRUb3VjaEhpZ2hsaWdodFF1YWRz
KGNvbnN0IFdlYlJhbmdlJiB3ZWJSYW5nZSwgV2ViQ29sb3ImIG91dFRhcEhpZ2hsaWdodENvbG9y
KQoreworICAgIG91dFRhcEhpZ2hsaWdodENvbG9yID0gUmVuZGVyU3R5bGU6OmluaXRpYWxUYXBI
aWdobGlnaHRDb2xvcigpLnJnYigpOworICAgIGlmICh3ZWJSYW5nZS5pc051bGwoKSkKKyAgICAg
ICAgcmV0dXJuIFdlYlZlY3RvcjxXZWJGbG9hdFF1YWQ+KCk7CisKKyAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlID0gc3RhdGljX2Nhc3Q8UGFzc1JlZlB0cjxSYW5nZT4gPih3ZWJSYW5nZSk7CisgICAg
aWYgKE5vZGUqIG5vZGUgPSByYW5nZS0+Zmlyc3ROb2RlKCkpCisgICAgICAgIG5vZGUtPnJlbmRl
cmVyKCktPnN0eWxlKCktPnRhcEhpZ2hsaWdodENvbG9yKCkucmdiKCk7CisKKyAgICBWZWN0b3I8
RmxvYXRRdWFkPiBxdWFkczsKKyAgICByYW5nZS0+dGV4dFF1YWRzKHF1YWRzKTsKKworICAgIEZy
YW1lKiBmcmFtZSA9IHBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFt
ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBxdWFkcy5zaXplKCk7ICsraSkgewor
ICAgICAgICBxdWFkc1tpXS5zZXRQMShmcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KHJv
dW5kZWRJbnRQb2ludChxdWFkc1tpXS5wMSgpKSkpOworICAgICAgICBxdWFkc1tpXS5zZXRQMihm
cmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KHJvdW5kZWRJbnRQb2ludChxdWFkc1tpXS5w
MigpKSkpOworICAgICAgICBxdWFkc1tpXS5zZXRQMyhmcmFtZS0+dmlldygpLT5jb250ZW50c1Rv
V2luZG93KHJvdW5kZWRJbnRQb2ludChxdWFkc1tpXS5wMygpKSkpOworICAgICAgICBxdWFkc1tp
XS5zZXRQNChmcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KHJvdW5kZWRJbnRQb2ludChx
dWFkc1tpXS5wNCgpKSkpOworICAgIH0KKworICAgIHJldHVybiBxdWFkczsKK30KKwordm9pZCBX
ZWJWaWV3SW1wbDo6c2hvd1RvdWNoSGlnaGxpZ2h0UXVhZHMoY29uc3QgV2ViVmVjdG9yPFdlYkZs
b2F0UXVhZD4gJmhpZ2hsaWdodCwgV2ViQ29sb3IgaGlnaGxpZ2h0Q29sb3IpCit7CisgICAgLy8g
Q29tcHV0ZSBkaWZmZXJlbmNlIGJldHdlZW4gZXhwYW5kZWQgdmlld3BvcnQgYW5kIHNjcm9sbCBv
ZmZzZXQgKGZvcgorICAgIC8vIGJyb3dzZXIgc2Nyb2xsaW5nKS4KKyAgICBGcmFtZVZpZXcqIHZp
ZXcgPSBwYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCk7CisgICAgSW50U2l6ZSBzY3JvbGxUb0Zp
eGVkOworICAgIGlmICghdmlldy0+Zml4ZWRWaXNpYmxlQ29udGVudFJlY3QoKS5pc0VtcHR5KCkp
CisgICAgICAgIHNjcm9sbFRvRml4ZWQgPSB2aWV3LT5maXhlZFZpc2libGVDb250ZW50UmVjdCgp
LmxvY2F0aW9uKCkgLSB2aWV3LT5zY3JvbGxQb3NpdGlvbigpOworCisgICAgV1RGOjpWZWN0b3I8
V2ViQ29yZTo6RmxvYXRRdWFkPiBuZXdRdWFkcyhoaWdobGlnaHQuc2l6ZSgpKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgaGlnaGxpZ2h0LnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNv
bnN0IFdlYkZsb2F0UXVhZCAmcSA9IGhpZ2hsaWdodFtpXTsKKyAgICAgICAgbmV3UXVhZHNbaV0g
PSBGbG9hdFF1YWQocS5wWzBdIC0gc2Nyb2xsVG9GaXhlZCwgcS5wWzFdIC0gc2Nyb2xsVG9GaXhl
ZCwgcS5wWzJdIC0gc2Nyb2xsVG9GaXhlZCwgcS5wWzNdIC0gc2Nyb2xsVG9GaXhlZCk7CisgICAg
fQorCisgICAgbV9sYXllclRyZWVIb3N0LT5wZW5kSGlnaGxpZ2h0Rm9yTmV4dENvbXBvc2l0ZShu
ZXdRdWFkcywgaGlnaGxpZ2h0Q29sb3IpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHND
b21taXQoKTsKK30KKworI2VuZGlmCisKIHZvaWQgV2ViVmlld0ltcGw6OnNldFZpc2liaWxpdHlT
dGF0ZShXZWJQYWdlVmlzaWJpbGl0eVN0YXRlIHZpc2liaWxpdHlTdGF0ZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzSW5pdGlhbFN0YXRlKSB7CiAgICAgaWYg
KCFwYWdlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCBk
NDJiMmNiZGRmZjFkNTNmM2I5MjVjOTM4MjMxNWU1NDk1MDg0Y2I5Li5hYjE4MTdlMTUwYzM4YTQ5
Y2IzYWQ2NTA3MjJjMGU3YmJlNDBhYTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmgKQEAgLTEwOSw2ICsxMDksMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBhbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91
dCgpOyAvLyBBbHNvIGltcGxlbWVudHMgQ0NMYXllclRyZWVIb3N0Q2xpZW50OjpsYXlvdXQoKQog
ICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0Jik7CisjaWYg
T1MoQU5EUk9JRCkKKyAgICAvLyBUaGUgcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGJ5
cGFzcyBIVyBjb21wb3NpdGlvbgorICAgIC8vIFdlIHdhbnQgdG8gcmVkcmF3IHZlY3RvciBjb250
ZW50cyAodGV4dCAmIFNWRykgaW4gaGlnaGVyIHJlc29sdXRpb24gZm9yIExpbmsgUHJldmlldywK
KyAgICAvLyBpbnN0ZWFkIG9mIHJlYWRpbmcgYmFjayBmcm9tIHRoZSBjb21wb3NpdGUgYnVmZmVy
LCB3aGljaCByZXN1bHRzIGluIGFsaWFzaW5nLgorICAgIHZpcnR1YWwgdm9pZCBwYWludExpbmtQ
cmV2aWV3KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmKTsKKyNlbmRpZgogICAgIHZpcnR1YWwg
dm9pZCB0aGVtZUNoYW5nZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmlu
aXNoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKQEAgLTI0MCw2ICsyNDYs
MTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtQ3VzdG9tQ29udGV4dE1lbnVB
Y3Rpb24odW5zaWduZWQgYWN0aW9uKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkUGFnZU92ZXJsYXko
V2ViUGFnZU92ZXJsYXkqLCBpbnQgLyogek9yZGVyICovKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlUGFnZU92ZXJsYXkoV2ViUGFnZU92ZXJsYXkqKTsKKyNpZiBPUyhBTkRST0lEKQorICAgIHZp
cnR1YWwgV2ViVmVjdG9yPFdlYkZsb2F0UXVhZD4gZ2V0VG91Y2hIaWdobGlnaHRRdWFkcyhjb25z
dCBXZWJQb2ludCYgdG91Y2hQb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYWRkaW5nLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0OjpXZWJU
b3VjaENhbmRpZGF0ZXNJbmZvKiBvdXRUb3VjaEluZm8sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb2xvciYgb3V0VGFwSGln
aGxpZ2h0Q29sb3IpOworICAgIHZpcnR1YWwgV2ViVmVjdG9yPFdlYkZsb2F0UXVhZD4gZ2V0VG91
Y2hIaWdobGlnaHRRdWFkcyhjb25zdCBXZWJSYW5nZSYsIFdlYkNvbG9yJiBvdXRUYXBIaWdobGln
aHRjb2xvcik7CisgICAgdmlydHVhbCB2b2lkIHNob3dUb3VjaEhpZ2hsaWdodFF1YWRzKGNvbnN0
IFdlYlZlY3RvcjxXZWJGbG9hdFF1YWQ+JiBoaWdobGlnaHQsIFdlYkNvbG9yIGhpZ2hsaWdodENv
bG9yKTsKKyNlbmRpZgogCiAgICAgLy8gQ0NMYXllclRyZWVIb3N0Q2xpZW50CiAgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUFuaW1hdGlvbnMoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsK
</data>
<flag name="review"
          id="130333"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
      

    </bug>

</bugzilla>