<?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>45993</bug_id>
          
          <creation_ts>2010-09-17 13:33:57 -0700</creation_ts>
          <short_desc>Convert printing to the new pagination model.</short_desc>
          <delta_ts>2010-09-17 19:14:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>280826</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-17 13:33:57 -0700</bug_when>
    <thetext>Columns are using the new pagination model, but printing isn&apos;t using it yet.  This patch switches printing over to use the new model.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280828</commentid>
    <comment_count>1</comment_count>
      <attachid>67941</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-17 13:36:07 -0700</bug_when>
    <thetext>Created attachment 67941
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280831</commentid>
    <comment_count>2</comment_count>
      <attachid>67943</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-17 13:39:54 -0700</bug_when>
    <thetext>Created attachment 67943
Patch with comment typos fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280833</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-17 13:42:20 -0700</bug_when>
    <thetext>Attachment 67941 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/rendering/RenderView.h:132:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 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>280836</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-17 13:43:25 -0700</bug_when>
    <thetext>Attachment 67943 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/rendering/RenderView.h:132:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 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>280837</commentid>
    <comment_count>5</comment_count>
      <attachid>67944</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-17 13:45:19 -0700</bug_when>
    <thetext>Created attachment 67944
Fix style issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280879</commentid>
    <comment_count>6</comment_count>
      <attachid>67944</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-17 14:41:27 -0700</bug_when>
    <thetext>Comment on attachment 67944
Fix style issue.

Clearing review flag.  I have to get the layout test harness for printing updated to the new model too. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280889</commentid>
    <comment_count>7</comment_count>
      <attachid>67955</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-17 14:58:16 -0700</bug_when>
    <thetext>Created attachment 67955
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280949</commentid>
    <comment_count>8</comment_count>
      <attachid>67955</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-09-17 15:51:02 -0700</bug_when>
    <thetext>Comment on attachment 67955
Patch

&gt; Index: WebCore/ChangeLog
&gt; ===================================================================
&gt; --- WebCore/ChangeLog	(revision 67743)
&gt; +++ WebCore/ChangeLog	(working copy)
&gt; @@ -1,3 +1,47 @@
&gt; +2010-09-17  David Hyatt  &lt;hyatt@apple.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=45993, convert printing to the new pagination model.

I&apos;d like to see some discussion about what you did here.

&gt; Index: WebCore/page/FrameView.h
&gt; ===================================================================

&gt; +    // FIXME: This method is retained because of embedded WebViews in AppKit.  When a WebView is embedded inside
&gt; +    // some enclosing view with auto-pagination, no call happens to resize the view.  The new pagination model
&gt; +    // needs the view to resize as a result of the breaks, but that means that the enclosing view has to potentially
&gt; +    // resize around that view.  Auto-pagination uses the bounds of the actual view that&apos;s being printed to determine
&gt; +    // the edges of the print operation, so the resize is necessary if the enclosing view&apos;s bounds depend on the
&gt; +    // web document&apos;s bounds.
&gt; +    // 
&gt; +    // This is already a problem if the view needs to be a different size because of printer fonts or because of print stylesheets.
&gt; +    // Mail/Dictionary work around this problem by using the _layoutForPrinting SPI
&gt; +    // to at least get print stylesheets and printer fonts into play, but since WebKit doesn&apos;t know about the page offset or
&gt; +    // page size, it can&apos;t actually paginate correctly during _layoutForPrinting.
&gt; +    //
&gt; +    // We can eventually move Mail to a newer SPI that would let them opt in to the layout-time pagination model,
&gt; +    // but that doesn&apos;t solve the general problem of how other AppKit views could opt in to the better model.
&gt; +    //
&gt; +    // NO OTHER PLATFORM BESIDES MAC SHOULD USE THIS METHOD.
&gt;      void adjustPageHeight(float* newBottom, float oldTop, float oldBottom, float bottomLimit);

I agree with renaming this method to make it more scarey-sounding. If I just looked at the header, I would not have seen this comment.

&gt; Index: WebCore/rendering/RenderView.h
&gt; ===================================================================

&gt; +    // FIXME: Only used by embedded WebViews inside AppKit NSViews.  Find a way to remove.
&gt; +    int m_bestTruncatedAt;
&gt;      int m_truncatedAt;
&gt; +    int m_truncatorWidth;
&gt; +    IntRect m_printRect;
&gt; +    bool m_forcedPageBreak;
&gt; +    // End deprecated members.

Could these be moved into a struct just to keep them together?

&gt; @@ -274,6 +292,7 @@ private:
&gt;      bool m_disabled : 1;        // true if the offset and clip part of layoutState is disabled
&gt;      bool m_didStart : 1;        // true if we did a push or disable
&gt;      bool m_didEnd : 1;          // true if we popped or re-enabled
&gt; +    bool m_didCreateLayoutState; // true if we actually made a layout state.

Put in the bitfield?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281068</commentid>
    <comment_count>9</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-17 19:14:11 -0700</bug_when>
    <thetext>Fixed in r67771.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67941</attachid>
            <date>2010-09-17 13:36:07 -0700</date>
            <delta_ts>2010-09-17 13:39:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>25363</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Nzc0MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTAtMDktMTcgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTk5MywgY29udmVydCBwcmludGlu
ZyB0byB0aGUgbmV3IHBhZ2luYXRpb24gbW9kZWwuCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmll
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnJlc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6
Zm9yY2VMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpmb3JjZUxheW91dEZv
clBhZ2luYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGp1c3RQYWdlSGVp
Z2h0KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAgICAgICAqIHBhZ2UvUHJpbnRD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByaW50Q29udGV4dDo6Y29tcHV0ZVBhZ2VS
ZWN0c1dpdGhQYWdlU2l6ZUludGVybmFsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4pOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpjYWxjSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50UmVwbGFjZWQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMaW5lQm94TGlzdDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWRl
by5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWRlbzo6cGFpbnRSZXBsYWNlZCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVmlldzo6UmVuZGVyVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpsYXlv
dXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVmlldzo6c2V0QmVzdFRydW5jYXRlZEF0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVmlldy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cG9wTGF5b3V0
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cGFnZUhlaWdodCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzZXRQYWdlSGVpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclZpZXc6OmJlc3RUcnVuY2F0ZWRBdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJWaWV3Ojp0cnVuY2F0ZWRBdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzZXRU
cnVuY2F0ZWRBdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpwcmludFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6c2V0UHJpbnRSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclZpZXc6OnB1c2hMYXlvdXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXRTdGF0ZU1haW50YWluZXI6OkxheW91dFN0YXRlTWFpbnRhaW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXRTdGF0ZU1haW50YWluZXI6OnB1c2gpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0U3RhdGVNYWludGFpbmVyOjpwb3ApOgorCiAyMDEwLTA5LTE3ICBMdWNhcyBEZSBNYXJj
aGkgIDxsdWNhcy5kZW1hcmNoaUBwcm9mdXNpb24ubW9iaT4KIAogICAgICAgICBVbnJldmlld2Vk
LCBidWlsZCBmaXguIEFkZCBmaWxlcyBtaXNzZWQgaW4gcjY3NzA0LgpJbmRleDogV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAJKHJldmlzaW9uIDY3NjcxKQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzMCw3ICsyMzAsNiBAQCB2b2lkIEZyYW1lVmlldzo6cmVzZXQoKQogICAg
IG1fd2FzU2Nyb2xsZWRCeVVzZXIgPSBmYWxzZTsKICAgICBtX2xhc3RMYXlvdXRTaXplID0gSW50
U2l6ZSgpOwogICAgIG1fbGFzdFpvb21GYWN0b3IgPSAxLjBmOwotICAgIG1fcGFnZUhlaWdodCA9
IDA7CiAgICAgbV9kZWZlcnJpbmdSZXBhaW50cyA9IDA7CiAgICAgbV9yZXBhaW50Q291bnQgPSAw
OwogICAgIG1fcmVwYWludFJlY3RzLmNsZWFyKCk7CkBAIC03OTUsNyArNzk0LDcgQEAgdm9pZCBG
cmFtZVZpZXc6OmxheW91dChib29sIGFsbG93U3VidHJlZQogCiAgICAgaWYgKHN1YnRyZWUpIHsK
ICAgICAgICAgUmVuZGVyVmlldyogdmlldyA9IHJvb3QtPnZpZXcoKTsKLSAgICAgICAgdmlldy0+
cG9wTGF5b3V0U3RhdGUoKTsKKyAgICAgICAgdmlldy0+cG9wTGF5b3V0U3RhdGUocm9vdCk7CiAg
ICAgICAgIGlmIChkaXNhYmxlTGF5b3V0U3RhdGUpCiAgICAgICAgICAgICB2aWV3LT5lbmFibGVM
YXlvdXRTdGF0ZSgpOwogICAgIH0KQEAgLTIxMDEsMTIgKzIxMDAsNiBAQCB2b2lkIEZyYW1lVmll
dzo6Zmx1c2hEZWZlcnJlZFJlcGFpbnRzKCkKIHZvaWQgRnJhbWVWaWV3Ojpmb3JjZUxheW91dChi
b29sIGFsbG93U3VidHJlZSkKIHsKICAgICBsYXlvdXQoYWxsb3dTdWJ0cmVlKTsKLSAgICAvLyBX
ZSBjYW5ub3QgdW5zY2hlZHVsZSBhIHBlbmRpbmcgcmVsYXlvdXQsIHNpbmNlIHRoZSBmb3JjZSBj
YW4gYmUgY2FsbGVkIHdpdGgKLSAgICAvLyBhIHRpbnkgcmVjdGFuZ2xlIGZyb20gYSBkcmF3UmVj
dCB1cGRhdGUuICBCeSB1bnNjaGVkdWxpbmcgd2UgaW4gZWZmZWN0Ci0gICAgLy8gInZhbGlkYXRl
IiBhbmQgc3RvcCB0aGUgbmVjZXNzYXJ5IGZ1bGwgcmVwYWludCBmcm9tIG9jY3VycmluZy4gIEJh
c2ljYWxseSBhbnkgYmFzaWMKLSAgICAvLyBhcHBlbmQvcmVtb3ZlIERIVE1MIGlzIGJyb2tlbiBi
eSB0aGlzIGNhbGwuICBGb3Igbm93LCBJIGhhdmUgcmVtb3ZlZCB0aGUgb3B0aW1pemF0aW9uCi0g
ICAgLy8gdW50aWwgd2UgaGF2ZSBhIGJldHRlciBpbnZhbGlkYXRpb24gc3RhdGVneS4gLWR3aAot
ICAgIC8vdW5zY2hlZHVsZVJlbGF5b3V0KCk7CiB9CiAKIHZvaWQgRnJhbWVWaWV3Ojpmb3JjZUxh
eW91dEZvclBhZ2luYXRpb24oY29uc3QgRmxvYXRTaXplJiBwYWdlU2l6ZSwgZmxvYXQgbWF4aW11
bVNocmlua0ZhY3RvciwgRnJhbWU6OkFkanVzdFZpZXdTaXplT3JOb3Qgc2hvdWxkQWRqdXN0Vmll
d1NpemUpCkBAIC0yMTE2LDggKzIxMDksOCBAQCB2b2lkIEZyYW1lVmlldzo6Zm9yY2VMYXlvdXRG
b3JQYWdpbmF0aW9uCiAgICAgUmVuZGVyVmlldyAqcm9vdCA9IHRvUmVuZGVyVmlldyhtX2ZyYW1l
LT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKTsKICAgICBpZiAocm9vdCkgewogICAgICAgICBpbnQg
cGFnZVcgPSBjZWlsZihwYWdlU2l6ZS53aWR0aCgpKTsKLSAgICAgICAgbV9wYWdlSGVpZ2h0ID0g
cGFnZVNpemUuaGVpZ2h0KCkgPyBwYWdlU2l6ZS5oZWlnaHQoKSA6IHZpc2libGVIZWlnaHQoKTsK
ICAgICAgICAgcm9vdC0+c2V0V2lkdGgocGFnZVcpOworICAgICAgICByb290LT5zZXRQYWdlSGVp
Z2h0KHBhZ2VTaXplLmhlaWdodCgpKTsKICAgICAgICAgcm9vdC0+c2V0TmVlZHNMYXlvdXRBbmRQ
cmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAgIGZvcmNlTGF5b3V0KCk7CiAKQEAgLTIxMjksNyAr
MjEyMiw3IEBAIHZvaWQgRnJhbWVWaWV3Ojpmb3JjZUxheW91dEZvclBhZ2luYXRpb24KICAgICAg
ICAgaWYgKHJpZ2h0bW9zdFBvcyA+IHBhZ2VTaXplLndpZHRoKCkpIHsKICAgICAgICAgICAgIHBh
Z2VXID0gc3RkOjptaW48aW50PihyaWdodG1vc3RQb3MsIGNlaWxmKHBhZ2VTaXplLndpZHRoKCkg
KiBtYXhpbXVtU2hyaW5rRmFjdG9yKSk7CiAgICAgICAgICAgICBpZiAocGFnZVNpemUuaGVpZ2h0
KCkpCi0gICAgICAgICAgICAgICAgbV9wYWdlSGVpZ2h0ID0gcGFnZVcgLyBwYWdlU2l6ZS53aWR0
aCgpICogcGFnZVNpemUuaGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgcm9vdC0+c2V0UGFnZUhl
aWdodChwYWdlVyAvIHBhZ2VTaXplLndpZHRoKCkgKiBwYWdlU2l6ZS5oZWlnaHQoKSk7CiAgICAg
ICAgICAgICByb290LT5zZXRXaWR0aChwYWdlVyk7CiAgICAgICAgICAgICByb290LT5zZXROZWVk
c0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICAgICAgICAgIGZvcmNlTGF5b3V0KCk7
CkBAIC0yMTM4LDcgKzIxMzEsNiBAQCB2b2lkIEZyYW1lVmlldzo6Zm9yY2VMYXlvdXRGb3JQYWdp
bmF0aW9uCiAKICAgICBpZiAoc2hvdWxkQWRqdXN0Vmlld1NpemUpCiAgICAgICAgIGFkanVzdFZp
ZXdTaXplKCk7Ci0gICAgbV9wYWdlSGVpZ2h0ID0gMDsKIH0KIAogdm9pZCBGcmFtZVZpZXc6OmFk
anVzdFBhZ2VIZWlnaHQoZmxvYXQgKm5ld0JvdHRvbSwgZmxvYXQgb2xkVG9wLCBmbG9hdCBvbGRC
b3R0b20sIGZsb2F0IC8qYm90dG9tTGltaXQqLykKQEAgLTIxNDksMTAgKzIxNDEsMTIgQEAgdm9p
ZCBGcmFtZVZpZXc6OmFkanVzdFBhZ2VIZWlnaHQoZmxvYXQgKgogICAgICAgICBHcmFwaGljc0Nv
bnRleHQgY29udGV4dCgoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqKTApOwogICAgICAgICByb290
LT5zZXRUcnVuY2F0ZWRBdCgoaW50KWZsb29yZihvbGRCb3R0b20pKTsKICAgICAgICAgSW50UmVj
dCBkaXJ0eVJlY3QoMCwgKGludClmbG9vcmYob2xkVG9wKSwgcm9vdC0+cmlnaHRMYXlvdXRPdmVy
ZmxvdygpLCAoaW50KWNlaWxmKG9sZEJvdHRvbSAtIG9sZFRvcCkpOworICAgICAgICByb290LT5z
ZXRQcmludFJlY3QoZGlydHlSZWN0KTsKICAgICAgICAgcm9vdC0+bGF5ZXIoKS0+cGFpbnQoJmNv
bnRleHQsIGRpcnR5UmVjdCk7CiAgICAgICAgICpuZXdCb3R0b20gPSByb290LT5iZXN0VHJ1bmNh
dGVkQXQoKTsKICAgICAgICAgaWYgKCpuZXdCb3R0b20gPT0gMCkKICAgICAgICAgICAgICpuZXdC
b3R0b20gPSBvbGRCb3R0b207CisgICAgICAgIHJvb3QtPnNldFByaW50UmVjdChJbnRSZWN0KCkp
OwogICAgIH0gZWxzZQogICAgICAgICAqbmV3Qm90dG9tID0gb2xkQm90dG9tOwogfQpJbmRleDog
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuaAkocmV2aXNpb24gNjc2NzEpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwMCw4ICsyMDAsMjMgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3Jj
ZUxheW91dChib29sIGFsbG93U3VidHJlZSA9IGZhbHNlKTsKICAgICB2b2lkIGZvcmNlTGF5b3V0
Rm9yUGFnaW5hdGlvbihjb25zdCBGbG9hdFNpemUmIHBhZ2VTaXplLCBmbG9hdCBtYXhpbXVtU2hy
aW5rRmFjdG9yLCBGcmFtZTo6QWRqdXN0Vmlld1NpemVPck5vdCk7Ci0gICAgaW50IHBhZ2VIZWln
aHQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VIZWlnaHQ7IH0KIAorICAgIC8vIEZJWE1FOiBUaGlz
IG1ldGhvZCBpcyByZXRhaW5lZCBiZWNhdXNlIG9mIGVtYmVkZGVkIFdlYlZpZXdzIGluIEFwcEtp
dC4gIFdoZW4gYSBXZWJWaWV3IGlzIGVtYmVkZGVkIGluc2lkZQorICAgIC8vIHNvbWUgZW5jbG9z
aW5nIHZpZXcgd2l0aCBhdXRvLXBhZ2luYXRpb24sIG5vIGNhbGwgaGFwcGVucyB0byByZXNpemUg
dGhlIHZpZXcuICBUaGUgbmV3IHBhZ2luYXRpb24gbW9kZWwKKyAgICAvLyBuZWVkcyB0aGUgdmll
dyB0byByZXNpemUgYXMgYSByZXN1bHQgb2YgdGhlIGJyZWFrcywgYnV0IHRoYXQgbWVhbnMgdGhh
dCB0aGUgZW5jbG9zaW5nIHZpZXcgaGFzIHRvIHBvdGVudGlhbGx5CisgICAgLy8gcmVzaXplIGFy
b3VuZCB0aGF0IHZpZXcuICBBdXRvLXBhZ2luYXRpb24gdXNlcyB0aGUgYm91bmRzIG9mIHRoZSBh
Y3R1YWwgdmlldyB0aGF0J3MgYmVpbmcgcHJpbnRlZCB0byBkZXRlcm1pbmUKKyAgICAvLyB0aGUg
ZWRnZXMgb2YgdGhlIHByaW50IG9wZXJhdGlvbiwgc28gdGhlIHJlc2l6ZSBpcyBuZWNlc3Nhcnkg
aWYgdGhlIGVuY2xvc2luZyB2aWV3J3MgYm91bmRzIGRlcGVuZCBvbiB0aGUKKyAgICAvLyB3ZWIg
ZG9jdW1lbnQncyBib3VuZHMuCisgICAgLy8gCisgICAgLy8gVGhpcyBpcyBhbHJlYWR5IGEgcHJv
YmxlbSBmIHRoZSB2aWV3IG5lZWRzIHRvIGJlIGEgZGlmZmVyZW50IHNpemUgYmVjYXVzZSBvZiBw
cmludGVyIGZvbnRzIG9yIGJlY2F1c2Ugb2YgcHJpbnQgc3R5bGVzaGVldHMuCisgICAgLy8gTWFp
bC9EaWN0aW9uYXJ5IHdvcmsgYXJvdW5kIHRoaXMgcHJvYmxlbSBieSB1c2luZyB0aGUgX2xheW91
dEZvclByaW50aW5nIFNQSQorICAgIC8vIHRvIGF0IGxlYXN0IGdldCBwcmludCBzdHlsZXNoZWV0
cyBhbmQgcHJpbnRlciBmb250cyBpbnRvIHBsYXksIGJ1dCBzaW5jZSBXZWJLaXQgZG9lc24ndCBr
bm93IGFib3V0IHRoZSBwYWdlIG9mZnNldCBvcgorICAgIC8vIHBhZ2Ugc2l6ZSwgaXQgY2FuJ3Qg
YWN0dWFsbHkgcGFnaW5hdGUgY29ycmVjdGx5IGR1cmluZyBfbGF5b3V0Rm9yUHJpbnRpbmcuCisg
ICAgLy8KKyAgICAvLyBXZSBjYW4gZXZlbnR1YWxseSBtb3ZlIE1haWwgdG8gYSBuZXdlciBTUEkg
dGhhdCB3b3VsZCBsZXQgdGhlbSBvcHQgaW4gdG8gdGhlIGxheW91dC10aW1lIHBhZ2luYXRpb24g
bW9kZWwsCisgICAgLy8gYnV0IHRoYXQgZG9lc24ndCBzb2x2ZSB0aGUgZ2VuZXJhbCBwcm9ibGVt
IG9mIGhvdyBvdGhlciBBcHBLaXQgdmlld3MgY291bGQgb3B0IGluIHRvIHRoZSBiZXR0ZXIgbW9k
ZWwuCisgICAgLy8KKyAgICAvLyBOTyBPVEhFUiBQTEFURk9STSBCRVNJREVTIE1BQyBTSE9VTEQg
VVNFIFRISVMgTUVUSE9ELgogICAgIHZvaWQgYWRqdXN0UGFnZUhlaWdodChmbG9hdCogbmV3Qm90
dG9tLCBmbG9hdCBvbGRUb3AsIGZsb2F0IG9sZEJvdHRvbSwgZmxvYXQgYm90dG9tTGltaXQpOwog
CiAgICAgYm9vbCBzY3JvbGxUb0ZyYWdtZW50KGNvbnN0IEtVUkwmKTsKQEAgLTMzNiw4ICszNTEs
NiBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX21lZGlhVHlwZTsKICAgICBTdHJpbmcgbV9tZWRp
YVR5cGVXaGVuTm90UHJpbnRpbmc7CiAKLSAgICBpbnQgbV9wYWdlSGVpZ2h0OwotCiAgICAgdW5z
aWduZWQgbV9lbnF1ZXVlRXZlbnRzOwogICAgIFZlY3RvcjxTY2hlZHVsZWRFdmVudCo+IG1fc2No
ZWR1bGVkRXZlbnRzOwogICAgIApJbmRleDogV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5jcHAJKHJldmlzaW9uIDY3
NjcxKQorKysgV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk1LDI2ICs5NSwyMiBAQCB2b2lkIFByaW50Q29udGV4dDo6Y29tcHV0ZVBhZ2VSZWN0c1dpdGhQ
CiB7CiAgICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpIHx8ICFtX2ZyYW1lLT52aWV3KCkgfHwg
IW1fZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKKwogICAg
IFJlbmRlclZpZXcqIHJvb3QgPSB0b1JlbmRlclZpZXcobV9mcmFtZS0+ZG9jdW1lbnQoKS0+cmVu
ZGVyZXIoKSk7CiAKLSAgICBjb25zdCBmbG9hdCBwYWdlV2lkdGggPSBwYWdlU2l6ZUluUGl4ZWxz
LndpZHRoKCk7Ci0gICAgY29uc3QgZmxvYXQgZG9jV2lkdGggPSByb290LT5sYXllcigpLT53aWR0
aCgpOwotICAgIGNvbnN0IGZsb2F0IGRvY0hlaWdodCA9IHJvb3QtPmxheWVyKCktPmhlaWdodCgp
OwotICAgIGZsb2F0IGN1cnJQYWdlSGVpZ2h0ID0gcGFnZVNpemVJblBpeGVscy5oZWlnaHQoKTsK
LQotICAgIC8vIGFsd2F5cyByZXR1cm4gYXQgbGVhc3Qgb25lIHBhZ2UsIHNpbmNlIGVtcHR5IGZp
bGVzIHNob3VsZCBwcmludCBhIGJsYW5rIHBhZ2UKLSAgICBmbG9hdCBwcmludGVkUGFnZXNIZWln
aHQgPSAwOwotICAgIGRvIHsKLSAgICAgICAgZmxvYXQgcHJvcG9zZWRCb3R0b20gPSBzdGQ6Om1p
bihkb2NIZWlnaHQsIHByaW50ZWRQYWdlc0hlaWdodCArIHBhZ2VTaXplSW5QaXhlbHMuaGVpZ2h0
KCkpOwotICAgICAgICBtX2ZyYW1lLT52aWV3KCktPmFkanVzdFBhZ2VIZWlnaHQoJnByb3Bvc2Vk
Qm90dG9tLCBwcmludGVkUGFnZXNIZWlnaHQsIHByb3Bvc2VkQm90dG9tLCBwcmludGVkUGFnZXNI
ZWlnaHQpOwotICAgICAgICBjdXJyUGFnZUhlaWdodCA9IG1heCgxLjBmLCBwcm9wb3NlZEJvdHRv
bSAtIHByaW50ZWRQYWdlc0hlaWdodCk7CisgICAgaW50IGRvY1dpZHRoID0gcm9vdC0+bGF5ZXIo
KS0+d2lkdGgoKTsKKyAgICBpbnQgZG9jSGVpZ2h0ID0gcm9vdC0+bGF5ZXIoKS0+aGVpZ2h0KCk7
CisgICAgaW50IHBhZ2VXaWR0aCA9IHBhZ2VTaXplSW5QaXhlbHMud2lkdGgoKTsKKyAgICBpbnQg
cGFnZUhlaWdodCA9IHBhZ2VTaXplSW5QaXhlbHMuaGVpZ2h0KCk7CisKKyAgICB1bnNpZ25lZCBw
YWdlQ291bnQgPSBjZWlsZigoZmxvYXQpZG9jSGVpZ2h0IC8gcGFnZUhlaWdodCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhZ2VDb3VudDsgKytpKSB7CiAgICAgICAgIGlmIChhbGxv
d0hvcml6b250YWxNdWx0aVBhZ2VzKSB7Ci0gICAgICAgICAgICBmb3IgKGZsb2F0IGN1cldpZHRo
ID0gMDsgY3VyV2lkdGggPCBkb2NXaWR0aDsgY3VyV2lkdGggKz0gcGFnZVdpZHRoKQotICAgICAg
ICAgICAgICAgIG1fcGFnZVJlY3RzLmFwcGVuZChJbnRSZWN0KGN1cldpZHRoLCAoaW50KXByaW50
ZWRQYWdlc0hlaWdodCwgKGludClwYWdlV2lkdGgsIChpbnQpY3VyclBhZ2VIZWlnaHQpKTsKKyAg
ICAgICAgICAgIGZvciAoaW50IGN1cnJXaWR0aCA9IDA7IGN1cnJXaWR0aCA8IGRvY1dpZHRoOyBj
dXJyV2lkdGggKz0gcGFnZVdpZHRoKQorICAgICAgICAgICAgICAgIG1fcGFnZVJlY3RzLmFwcGVu
ZChJbnRSZWN0KGN1cnJXaWR0aCwgaSAqIHBhZ2VIZWlnaHQsIHBhZ2VXaWR0aCwgcGFnZUhlaWdo
dCkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fcGFnZVJlY3RzLmFwcGVuZChJbnRS
ZWN0KDAsIChpbnQpcHJpbnRlZFBhZ2VzSGVpZ2h0LCAoaW50KXBhZ2VXaWR0aCwgKGludCljdXJy
UGFnZUhlaWdodCkpOwotICAgICAgICBwcmludGVkUGFnZXNIZWlnaHQgKz0gY3VyclBhZ2VIZWln
aHQ7Ci0gICAgfSB3aGlsZSAocHJpbnRlZFBhZ2VzSGVpZ2h0IDwgZG9jSGVpZ2h0KTsKKyAgICAg
ICAgICAgIG1fcGFnZVJlY3RzLmFwcGVuZChJbnRSZWN0KDAsIGkgKiBwYWdlSGVpZ2h0LCBwYWdl
V2lkdGgsIHBhZ2VIZWlnaHQpKTsKKyAgICB9CiB9CiAKIHZvaWQgUHJpbnRDb250ZXh0OjpiZWdp
bihmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcAkocmV2aXNpb24gNjc2NzMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMDgsMTQgKzIyMDgsMTQgQEAgdm9pZCBSZW5kZXJCbG9j
azo6cGFpbnRDaGlsZHJlbihQYWludEluZgogICAgIGluZm8ucGhhc2UgPSBuZXdQaGFzZTsKICAg
ICBpbmZvLnVwZGF0ZVBhaW50aW5nUm9vdEZvckNoaWxkcmVuKHRoaXMpOwogICAgIAorICAgIC8v
IEZJWE1FOiBQYWludC10aW1lIHBhZ2luYXRpb24gaXMgb2Jzb2xldGUgYW5kIGlzIG5vdyBvbmx5
IHVzZWQgYnkgZW1iZWRkZWQgV2ViVmlld3MgaW5zaWRlIEFwcEtpdAorICAgIC8vIE5TVmlld3Mu
ICBEbyBub3QgYWRkIGFueSBtb3JlIGNvZGUgZm9yIHRoaXMuCiAgICAgUmVuZGVyVmlldyogcmVu
ZGVyVmlldyA9IHZpZXcoKTsKICAgICBib29sIHVzZVByaW50UmVjdCA9ICFyZW5kZXJWaWV3LT5w
cmludFJlY3QoKS5pc0VtcHR5KCk7CiAgICAgCi0gICAgYm9vbCBjaGVja1BhZ2VCcmVha3MgPSBk
b2N1bWVudCgpLT5wYWdpbmF0ZWQoKSAmJiAhZG9jdW1lbnQoKS0+c2V0dGluZ3MoKS0+cGFnaW5h
dGVEdXJpbmdMYXlvdXRFbmFibGVkKCk7Ci0KICAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBm
aXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKSB7
ICAgICAgICAKICAgICAgICAgLy8gQ2hlY2sgZm9yIHBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMs
IGFuZCBpZiBpdCdzIHNldCwgYnJlYWsgYW5kIGJhaWwuCi0gICAgICAgIGJvb2wgY2hlY2tCZWZv
cmVBbHdheXMgPSAhY2hpbGRyZW5JbmxpbmUoKSAmJiAoY2hlY2tQYWdlQnJlYWtzICYmIGNoaWxk
LT5zdHlsZSgpLT5wYWdlQnJlYWtCZWZvcmUoKSA9PSBQQkFMV0FZUyk7CisgICAgICAgIGJvb2wg
Y2hlY2tCZWZvcmVBbHdheXMgPSAhY2hpbGRyZW5JbmxpbmUoKSAmJiAodXNlUHJpbnRSZWN0ICYm
IGNoaWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtCZWZvcmUoKSA9PSBQQkFMV0FZUyk7CiAgICAgICAg
IGlmIChjaGVja0JlZm9yZUFsd2F5cwogICAgICAgICAgICAgJiYgKHR5ICsgY2hpbGQtPnkoKSkg
PiBwYWludEluZm8ucmVjdC55KCkKICAgICAgICAgICAgICYmICh0eSArIGNoaWxkLT55KCkpIDwg
cGFpbnRJbmZvLnJlY3QuYm90dG9tKCkpIHsKQEAgLTIyMzgsNyArMjIzOCw3IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmYKICAgICAgICAgICAgIGNoaWxkLT5wYWlu
dChpbmZvLCB0eCwgdHkpOwogCiAgICAgICAgIC8vIENoZWNrIGZvciBwYWdlLWJyZWFrLWFmdGVy
OiBhbHdheXMsIGFuZCBpZiBpdCdzIHNldCwgYnJlYWsgYW5kIGJhaWwuCi0gICAgICAgIGJvb2wg
Y2hlY2tBZnRlckFsd2F5cyA9ICFjaGlsZHJlbklubGluZSgpICYmIChjaGVja1BhZ2VCcmVha3Mg
JiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0FmdGVyKCkgPT0gUEJBTFdBWVMpOworICAgICAg
ICBib29sIGNoZWNrQWZ0ZXJBbHdheXMgPSAhY2hpbGRyZW5JbmxpbmUoKSAmJiAodXNlUHJpbnRS
ZWN0ICYmIGNoaWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtBZnRlcigpID09IFBCQUxXQVlTKTsKICAg
ICAgICAgaWYgKGNoZWNrQWZ0ZXJBbHdheXMKICAgICAgICAgICAgICYmICh0eSArIGNoaWxkLT55
KCkgKyBjaGlsZC0+aGVpZ2h0KCkpID4gcGFpbnRJbmZvLnJlY3QueSgpCiAgICAgICAgICAgICAm
JiAodHkgKyBjaGlsZC0+eSgpICsgY2hpbGQtPmhlaWdodCgpKSA8IHBhaW50SW5mby5yZWN0LmJv
dHRvbSgpKSB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDY3NjcxKQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUx
NSwxMSArMTUxNSwxMSBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY0hlaWdodCgpCiAgICAgLy8gaXMg
c3BlY2lmaWVkLiBXaGVuIHdlJ3JlIHByaW50aW5nLCB3ZSBhbHNvIG5lZWQgdGhpcyBxdWlyayBp
ZiB0aGUgYm9keSBvciByb290IGhhcyBhIHBlcmNlbnRhZ2UgCiAgICAgLy8gaGVpZ2h0IHNpbmNl
IHdlIGRvbid0IHNldCBhIGhlaWdodCBpbiBSZW5kZXJWaWV3IHdoZW4gd2UncmUgcHJpbnRpbmcu
IFNvIHdpdGhvdXQgdGhpcyBxdWlyaywgdGhlIAogICAgIC8vIGhlaWdodCBoYXMgbm90aGluZyB0
byBiZSBhIHBlcmNlbnRhZ2Ugb2YsIGFuZCBpdCBlbmRzIHVwIGJlaW5nIDAuIFRoYXQgaXMgYmFk
LgotICAgIGJvb2wgcGFnaW5hdGVkQ29udGVudE5lZWRzQmFzZUhlaWdodCA9IGRvY3VtZW50KCkt
PnBhZ2luYXRlZCgpICYmIGguaXNQZXJjZW50KCkKKyAgICBib29sIHBhZ2luYXRlZENvbnRlbnRO
ZWVkc0Jhc2VIZWlnaHQgPSBkb2N1bWVudCgpLT5wcmludGluZygpICYmIGguaXNQZXJjZW50KCkK
ICAgICAgICAgJiYgKGlzUm9vdCgpIHx8IChpc0JvZHkoKSAmJiBkb2N1bWVudCgpLT5kb2N1bWVu
dEVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+aGVpZ2h0KCkuaXNQZXJjZW50KCkpKTsK
ICAgICBpZiAoc3RyZXRjaGVzVG9WaWV3SGVpZ2h0KCkgfHwgcGFnaW5hdGVkQ29udGVudE5lZWRz
QmFzZUhlaWdodCkgewogICAgICAgICBpbnQgbWFyZ2lucyA9IGNvbGxhcHNlZE1hcmdpblRvcCgp
ICsgY29sbGFwc2VkTWFyZ2luQm90dG9tKCk7Ci0gICAgICAgIGludCB2aXNIZWlnaHQgPSBkb2N1
bWVudCgpLT5wcmludGluZygpID8gdmlldygpLT5mcmFtZVZpZXcoKS0+cGFnZUhlaWdodCgpIDog
dmlldygpLT52aWV3SGVpZ2h0KCk7CisgICAgICAgIGludCB2aXNIZWlnaHQgPSBkb2N1bWVudCgp
LT5wcmludGluZygpID8gdmlldygpLT5wYWdlSGVpZ2h0KCkgOiB2aWV3KCktPnZpZXdIZWlnaHQo
KTsKICAgICAgICAgaWYgKGlzUm9vdCgpKQogICAgICAgICAgICAgc2V0SGVpZ2h0KG1heChoZWln
aHQoKSwgdmlzSGVpZ2h0IC0gbWFyZ2lucykpOwogICAgICAgICBlbHNlIHsKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDY3NjcxKQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsOSArMjE0LDYgQEAgdm9p
ZCBSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZChQYWludEluZgogICAgIGludCBsZWZ0UGFkID0g
cGFkZGluZ0xlZnQoKTsKICAgICBpbnQgdG9wUGFkID0gcGFkZGluZ1RvcCgpOwogCi0gICAgaWYg
KGRvY3VtZW50KCktPnByaW50aW5nKCkgJiYgIXZpZXcoKS0+cHJpbnRJbWFnZXMoKSkKLSAgICAg
ICAgcmV0dXJuOwotCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNv
bnRleHQ7CiAKICAgICBpZiAoIW1faW1hZ2VSZXNvdXJjZS0+aGFzSW1hZ2UoKSB8fCBtX2ltYWdl
UmVzb3VyY2UtPmVycm9yT2NjdXJyZWQoKSkgewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGluZUJveExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpbmVCb3hMaXN0LmNwcAkocmV2aXNpb24gNjc2NzEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaW5lQm94TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OSw2ICsxNTksOCBAQCB2
b2lkIFJlbmRlckxpbmVCb3hMaXN0OjpwYWludChSZW5kZXJCb3hNCiAgICAgaWYgKCFmaXJzdExp
bmVCb3goKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gRklYTUU6IFBhaW50LXRpbWUgcGFn
aW5hdGlvbiBpcyBvYnNvbGV0ZSBhbmQgaXMgbm93IG9ubHkgdXNlZCBieSBlbWJlZGRlZCBXZWJW
aWV3cyBpbnNpZGUgQXBwS2l0CisgICAgLy8gTlNWaWV3cy4gIERvIG5vdCBhZGQgYW55IG1vcmUg
Y29kZSBmb3IgdGhpcy4KICAgICBSZW5kZXJWaWV3KiB2ID0gcmVuZGVyZXItPnZpZXcoKTsKICAg
ICBib29sIHVzZVByaW50UmVjdCA9ICF2LT5wcmludFJlY3QoKS5pc0VtcHR5KCk7CiAgICAgCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCShyZXZpc2lvbiA2NzY3MSkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDkgKzE4
Nyw2IEBAIHZvaWQgUmVuZGVyVmlkZW86OnBhaW50UmVwbGFjZWQoUGFpbnRJbmYKICAgICBNZWRp
YVBsYXllciogbWVkaWFQbGF5ZXIgPSBwbGF5ZXIoKTsKICAgICBib29sIGRpc3BsYXlpbmdQb3N0
ZXIgPSB2aWRlb0VsZW1lbnQoKS0+c2hvdWxkRGlzcGxheVBvc3RlckltYWdlKCk7CiAKLSAgICBp
ZiAoZGlzcGxheWluZ1Bvc3RlciAmJiBkb2N1bWVudCgpLT5wcmludGluZygpICYmICF2aWV3KCkt
PnByaW50SW1hZ2VzKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmICghZGlzcGxheWluZ1Bv
c3RlcikgewogICAgICAgICBpZiAoIW1lZGlhUGxheWVyKQogICAgICAgICAgICAgcmV0dXJuOwpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDY3NjcxKQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDExICs0OCwx
MiBAQCBSZW5kZXJWaWV3OjpSZW5kZXJWaWV3KE5vZGUqIG5vZGUsIEZyYW1lCiAgICAgLCBtX3Nl
bGVjdGlvbkVuZCgwKQogICAgICwgbV9zZWxlY3Rpb25TdGFydFBvcygtMSkKICAgICAsIG1fc2Vs
ZWN0aW9uRW5kUG9zKC0xKQotICAgICwgbV9wcmludEltYWdlcyh0cnVlKQotICAgICwgbV9tYXhp
bWFsT3V0bGluZVNpemUoMCkKICAgICAsIG1fYmVzdFRydW5jYXRlZEF0KDApCisgICAgLCBtX3Ry
dW5jYXRlZEF0KDApCiAgICAgLCBtX3RydW5jYXRvcldpZHRoKDApCiAgICAgLCBtX2ZvcmNlZFBh
Z2VCcmVhayhmYWxzZSkKKyAgICAsIG1fbWF4aW1hbE91dGxpbmVTaXplKDApCisgICAgLCBtX3Bh
Z2VIZWlnaHQoMCkKICAgICAsIG1fbGF5b3V0U3RhdGUoMCkKICAgICAsIG1fbGF5b3V0U3RhdGVE
aXNhYmxlQ291bnQoMCkKIHsKQEAgLTEwMCw2ICsxMDEsOSBAQCB2b2lkIFJlbmRlclZpZXc6OmNh
bGNQcmVmV2lkdGhzKCkKIAogdm9pZCBSZW5kZXJWaWV3OjpsYXlvdXQoKQogeworICAgIGlmICgh
ZG9jdW1lbnQoKS0+cGFnaW5hdGVkKCkpCisgICAgICAgIHNldFBhZ2VIZWlnaHQoMCk7CisKICAg
ICBpZiAocHJpbnRpbmcoKSkKICAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtX21heFByZWZXaWR0
aCA9IHdpZHRoKCk7CiAKQEAgLTExNyw2ICsxMjEsNyBAQCB2b2lkIFJlbmRlclZpZXc6OmxheW91
dCgpCiAgICAgTGF5b3V0U3RhdGUgc3RhdGU7CiAgICAgLy8gRklYTUU6IE1heSBiZSBiZXR0ZXIg
dG8gcHVzaCBhIGNsaXAgYW5kIGF2b2lkIGlzc3Vpbmcgb2Zmc2NyZWVuIHJlcGFpbnRzLgogICAg
IHN0YXRlLm1fY2xpcHBlZCA9IGZhbHNlOworICAgIHN0YXRlLm1fcGFnZUhlaWdodCA9IG1fcGFn
ZUhlaWdodDsKICAgICBtX2xheW91dFN0YXRlID0gJnN0YXRlOwogCiAgICAgaWYgKG5lZWRzTGF5
b3V0KCkpCkBAIC0xMjYsNyArMTMxLDYgQEAgdm9pZCBSZW5kZXJWaWV3OjpsYXlvdXQoKQogICAg
IG1fb3ZlcmZsb3cuY2xlYXIoKTsKICAgICBhZGRMYXlvdXRPdmVyZmxvdyhJbnRSZWN0KDAsIDAs
IGRvY1dpZHRoKCksIGRvY0hlaWdodCgpKSk7CiAKLQogICAgIEFTU0VSVChsYXlvdXREZWx0YSgp
ID09IEludFNpemUoKSk7CiAgICAgQVNTRVJUKG1fbGF5b3V0U3RhdGVEaXNhYmxlQ291bnQgPT0g
MCk7CiAgICAgQVNTRVJUKG1fbGF5b3V0U3RhdGUgPT0gJnN0YXRlKTsKQEAgLTE1NCwxMiArMTU4
LDYgQEAgdm9pZCBSZW5kZXJWaWV3OjpwYWludChQYWludEluZm8mIHBhaW50SQogewogICAgIC8v
IElmIHdlIGV2ZXIgcmVxdWlyZSBsYXlvdXQgYnV0IHJlY2VpdmUgYSBwYWludCBhbnl3YXksIHNv
bWV0aGluZyBoYXMgZ29uZSBob3JyaWJseSB3cm9uZy4KICAgICBBU1NFUlQoIW5lZWRzTGF5b3V0
KCkpOwotCi0gICAgLy8gQ2FjaGUgdGhlIHByaW50IHJlY3QgYmVjYXVzZSB0aGUgZGlydHkgcmVj
dCBjb3VsZCBnZXQgY2hhbmdlZCBkdXJpbmcgcGFpbnRpbmcuCi0gICAgaWYgKGRvY3VtZW50KCkt
PnBhZ2luYXRlZCgpKQotICAgICAgICBzZXRQcmludFJlY3QocGFpbnRJbmZvLnJlY3QpOwotICAg
IGVsc2UKLSAgICAgICAgc2V0UHJpbnRSZWN0KEludFJlY3QoKSk7CiAgICAgcGFpbnRPYmplY3Qo
cGFpbnRJbmZvLCB0eCwgdHkpOwogfQogCkBAIC02NjcsMjkgKzY2NSw2IEBAIGZsb2F0IFJlbmRl
clZpZXc6Onpvb21GYWN0b3IoKSBjb25zdAogICAgIHJldHVybiBtX2ZyYW1lVmlldy0+cGFnZVpv
b21GYWN0b3IoKTsKIH0KIAotLy8gVGhlIGlkZWEgaGVyZSBpcyB0byB0YWtlIGludG8gYWNjb3Vu
dCB3aGF0IG9iamVjdCBpcyBtb3ZpbmcgdGhlIHBhZ2luYXRpb24gcG9pbnQsIGFuZAotLy8gdGh1
cyBjaG9vc2UgdGhlIGJlc3QgcGxhY2UgdG8gY2hvcCBpdC4KLXZvaWQgUmVuZGVyVmlldzo6c2V0
QmVzdFRydW5jYXRlZEF0KGludCB5LCBSZW5kZXJCb3hNb2RlbE9iamVjdCogZm9yUmVuZGVyZXIs
IGJvb2wgZm9yY2VkQnJlYWspCi17Ci0gICAgLy8gTm9ib2R5IGVsc2UgY2FuIHNldCBhIHBhZ2Ug
YnJlYWsgb25jZSB3ZSBoYXZlIGEgZm9yY2VkIGJyZWFrLgotICAgIGlmIChtX2ZvcmNlZFBhZ2VC
cmVhaykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRm9yY2VkIGJyZWFrcyBhbHdheXMgd2lu
IG92ZXIgdW5mb3JjZWQgYnJlYWtzLgotICAgIGlmIChmb3JjZWRCcmVhaykgewotICAgICAgICBt
X2ZvcmNlZFBhZ2VCcmVhayA9IHRydWU7Ci0gICAgICAgIG1fYmVzdFRydW5jYXRlZEF0ID0geTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFByZWZlciB0aGUgd2lkZXN0IG9iamVj
dCB0aGF0IHRyaWVzIHRvIG1vdmUgdGhlIHBhZ2luYXRpb24gcG9pbnQKLSAgICBJbnRSZWN0IGJv
dW5kaW5nQm94ID0gZm9yUmVuZGVyZXItPmJvcmRlckJvdW5kaW5nQm94KCk7Ci0gICAgaWYgKGJv
dW5kaW5nQm94LndpZHRoKCkgPiBtX3RydW5jYXRvcldpZHRoKSB7Ci0gICAgICAgIG1fdHJ1bmNh
dG9yV2lkdGggPSBib3VuZGluZ0JveC53aWR0aCgpOwotICAgICAgICBtX2Jlc3RUcnVuY2F0ZWRB
dCA9IHk7Ci0gICAgfQotfQotCiB2b2lkIFJlbmRlclZpZXc6OnB1c2hMYXlvdXRTdGF0ZShSZW5k
ZXJPYmplY3QqIHJvb3QpCiB7CiAgICAgQVNTRVJUKG1fbGF5b3V0U3RhdGVEaXNhYmxlQ291bnQg
PT0gMCk7CkBAIC03MjMsNiArNjk4LDMxIEBAIHZvaWQgUmVuZGVyVmlldzo6dXBkYXRlSGl0VGVz
dFJlc3VsdChIaXQKICAgICB9CiB9CiAKKy8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGlzIG9ic29s
ZXRlIGFuZCBvbmx5IHVzZWQgYnkgZW1iZWRkZWQgV2ViVmlld3MgaW5zaWRlIEFwcEtpdCBOU1Zp
ZXdzLgorLy8gRG8gbm90IGFkZCBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24hCisvLyBUaGUgaWRl
YSBoZXJlIGlzIHRvIHRha2UgaW50byBhY2NvdW50IHdoYXQgb2JqZWN0IGlzIG1vdmluZyB0aGUg
cGFnaW5hdGlvbiBwb2ludCwgYW5kCisvLyB0aHVzIGNob29zZSB0aGUgYmVzdCBwbGFjZSB0byBj
aG9wIGl0Lgordm9pZCBSZW5kZXJWaWV3OjpzZXRCZXN0VHJ1bmNhdGVkQXQoaW50IHksIFJlbmRl
ckJveE1vZGVsT2JqZWN0KiBmb3JSZW5kZXJlciwgYm9vbCBmb3JjZWRCcmVhaykKK3sKKyAgICAv
LyBOb2JvZHkgZWxzZSBjYW4gc2V0IGEgcGFnZSBicmVhayBvbmNlIHdlIGhhdmUgYSBmb3JjZWQg
YnJlYWsuCisgICAgaWYgKG1fZm9yY2VkUGFnZUJyZWFrKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBGb3JjZWQgYnJlYWtzIGFsd2F5cyB3aW4gb3ZlciB1bmZvcmNlZCBicmVha3MuCisgICAg
aWYgKGZvcmNlZEJyZWFrKSB7CisgICAgICAgIG1fZm9yY2VkUGFnZUJyZWFrID0gdHJ1ZTsKKyAg
ICAgICAgbV9iZXN0VHJ1bmNhdGVkQXQgPSB5OworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gUHJlZmVyIHRoZSB3aWRlc3Qgb2JqZWN0IHRoYXQgdHJpZXMgdG8gbW92ZSB0aGUgcGFn
aW5hdGlvbiBwb2ludAorICAgIEludFJlY3QgYm91bmRpbmdCb3ggPSBmb3JSZW5kZXJlci0+Ym9y
ZGVyQm91bmRpbmdCb3goKTsKKyAgICBpZiAoYm91bmRpbmdCb3gud2lkdGgoKSA+IG1fdHJ1bmNh
dG9yV2lkdGgpIHsKKyAgICAgICAgbV90cnVuY2F0b3JXaWR0aCA9IGJvdW5kaW5nQm94LndpZHRo
KCk7CisgICAgICAgIG1fYmVzdFRydW5jYXRlZEF0ID0geTsKKyAgICB9Cit9CisKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBib29sIFJlbmRlclZpZXc6OnVzZXNDb21wb3NpdGlu
ZygpIGNvbnN0CiB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCShyZXZpc2lvbiA2NzY3MSkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNzcs
MTcgKzc3LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2VsZWN0aW9uU3RhcnRFbmQoaW50JiBzdGFy
dFBvcywgaW50JiBlbmRQb3MpIGNvbnN0OwogCiAgICAgYm9vbCBwcmludGluZygpIGNvbnN0Owot
ICAgIHZvaWQgc2V0UHJpbnRJbWFnZXMoYm9vbCBlbmFibGUpIHsgbV9wcmludEltYWdlcyA9IGVu
YWJsZTsgfQotICAgIGJvb2wgcHJpbnRJbWFnZXMoKSBjb25zdCB7IHJldHVybiBtX3ByaW50SW1h
Z2VzOyB9Ci0KLSAgICBJbnRSZWN0IHByaW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbnRS
ZWN0OyB9Ci0gICAgdm9pZCBzZXRQcmludFJlY3QoY29uc3QgSW50UmVjdCYgcikgeyBtX3ByaW50
UmVjdCA9IHI7IH0KLQotICAgIHZvaWQgc2V0VHJ1bmNhdGVkQXQoaW50IHkpIHsgbV90cnVuY2F0
ZWRBdCA9IHk7IG1fYmVzdFRydW5jYXRlZEF0ID0gbV90cnVuY2F0b3JXaWR0aCA9IDA7IG1fZm9y
Y2VkUGFnZUJyZWFrID0gZmFsc2U7IH0KLSAgICB2b2lkIHNldEJlc3RUcnVuY2F0ZWRBdChpbnQg
eSwgUmVuZGVyQm94TW9kZWxPYmplY3QqIGZvclJlbmRlcmVyLCBib29sIGZvcmNlZEJyZWFrID0g
ZmFsc2UpOwotICAgIGludCBiZXN0VHJ1bmNhdGVkQXQoKSBjb25zdCB7IHJldHVybiBtX2Jlc3RU
cnVuY2F0ZWRBdDsgfQotICAgIAotICAgIGludCB0cnVuY2F0ZWRBdCgpIGNvbnN0IHsgcmV0dXJu
IG1fdHJ1bmNhdGVkQXQ7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3Rv
cjxJbnRSZWN0PiYsIGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVR
dWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYpOwpAQCAtMTIwLDIzICsxMDksOSBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGRvaW5nRnVsbFJlcGFpbnQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lVmlldy0+
bmVlZHNGdWxsUmVwYWludCgpOyB9CiAKLSAgICB2b2lkIHB1c2hMYXlvdXRTdGF0ZShSZW5kZXJC
b3gqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBvZmZzZXQsIGludCBwYWdlSGVpZ2h0ID0gMCwg
Q29sdW1uSW5mbyogY29sSW5mbyA9IDApCi0gICAgewotICAgICAgICAvLyBXZSBwdXNoIExheW91
dFN0YXRlIGV2ZW4gaWYgbGF5b3V0U3RhdGUgaXMgZGlzYWJsZWQgYmVjYXVzZSBpdCBzdG9yZXMg
bGF5b3V0RGVsdGEgdG9vLgotICAgICAgICBpZiAoIWRvaW5nRnVsbFJlcGFpbnQoKSB8fCByZW5k
ZXJlci0+aGFzQ29sdW1ucygpIHx8IG1fbGF5b3V0U3RhdGUtPmlzUGFnaW5hdGVkKCkpCi0gICAg
ICAgICAgICBtX2xheW91dFN0YXRlID0gbmV3IChyZW5kZXJBcmVuYSgpKSBMYXlvdXRTdGF0ZSht
X2xheW91dFN0YXRlLCByZW5kZXJlciwgb2Zmc2V0LCBwYWdlSGVpZ2h0LCBjb2xJbmZvKTsKLSAg
ICB9Ci0KKyAgICAvLyBTdWJ0cmVlIHB1c2gvcG9wCiAgICAgdm9pZCBwdXNoTGF5b3V0U3RhdGUo
UmVuZGVyT2JqZWN0Kik7Ci0KLSAgICB2b2lkIHBvcExheW91dFN0YXRlKCkKLSAgICB7Ci0gICAg
ICAgIExheW91dFN0YXRlKiBzdGF0ZSA9IG1fbGF5b3V0U3RhdGU7Ci0gICAgICAgIGlmIChkb2lu
Z0Z1bGxSZXBhaW50KCkgJiYgIW1fbGF5b3V0U3RhdGUtPmlzUGFnaW5hdGVkKCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIG1fbGF5b3V0U3RhdGUgPSBzdGF0ZS0+bV9uZXh0OwotICAg
ICAgICBzdGF0ZS0+ZGVzdHJveShyZW5kZXJBcmVuYSgpKTsKLSAgICB9CisgICAgdm9pZCBwb3BM
YXlvdXRTdGF0ZShSZW5kZXJPYmplY3QqKSB7IHJldHVybiBwb3BMYXlvdXRTdGF0ZSgpOyB9IC8v
IEp1c3QgZG9pbmcgdGhpcyB0byBrZWVwIHBvcExheW91dFN0YXRlKCkgcHJpdmF0ZSBhbmQgdG8g
bWFrZSB0aGUgc3VidHJlZSBjYWxscyBzeW1tZXRyaWNhbC4KIAogICAgIGJvb2wgc2hvdWxkRGlz
YWJsZUxheW91dFN0YXRlRm9yU3VidHJlZShSZW5kZXJPYmplY3QqKSBjb25zdDsKIApAQCAtMTUz
LDYgKzEyOCwyMyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSGl0VGVzdFJl
c3VsdChIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmKTsKIAorICAgIHVuc2lnbmVkIHBh
Z2VIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VIZWlnaHQ7IH0KKyAgICB2b2lkIHNldFBh
Z2VIZWlnaHQodW5zaWduZWQgaGVpZ2h0KSB7CisgICAgICAgIGlmIChtX3BhZ2VIZWlnaHQgIT0g
aGVpZ2h0KSB7CisgICAgICAgICAgICBtX3BhZ2VIZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgICAg
ICBtYXJrRGVzY2VuZGFudEJsb2Nrc0FuZExpbmVzRm9yTGF5b3V0KCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBGSVhNRTogVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXByZWNhdGVkLiBObyBj
b3VsZCBzaG91bGQgYmUgYWRkZWQgdGhhdCB1c2VzIHRoZXNlLgorICAgIGludCBiZXN0VHJ1bmNh
dGVkQXQoKSBjb25zdCB7IHJldHVybiBtX2Jlc3RUcnVuY2F0ZWRBdDsgfQorICAgIHZvaWQgc2V0
QmVzdFRydW5jYXRlZEF0KGludCB5LCBSZW5kZXJCb3hNb2RlbE9iamVjdCogZm9yUmVuZGVyZXIs
IGJvb2wgZm9yY2VkQnJlYWsgPSBmYWxzZSk7CisgICAgaW50IHRydW5jYXRlZEF0KCkgY29uc3Qg
eyByZXR1cm4gbV90cnVuY2F0ZWRBdDsgfQorICAgIHZvaWQgc2V0VHJ1bmNhdGVkQXQoaW50IHkp
IHsgbV90cnVuY2F0ZWRBdCA9IHk7IG1fYmVzdFRydW5jYXRlZEF0ID0gbV90cnVuY2F0b3JXaWR0
aCA9IDA7IG1fZm9yY2VkUGFnZUJyZWFrID0gZmFsc2U7IH0KKyAgICBjb25zdCBJbnRSZWN0JiBw
cmludFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3ByaW50UmVjdDsgfQorICAgIHZvaWQgc2V0UHJp
bnRSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsgbV9wcmludFJlY3QgPSByOyB9CisgICAgLy8gRW5k
IGRlcHJlY2F0ZWQgZnVuY3Rpb25zLgorCiAgICAgLy8gTm90aWZpY2F0aW9ucyB0aGF0IHRoaXMg
dmlldyBiZWNhbWUgdmlzaWJsZSBpbiBhIHdpbmRvdywgb3Igd2lsbCBiZQogICAgIC8vIHJlbW92
ZWQgZnJvbSB0aGUgd2luZG93LgogICAgIHZvaWQgZGlkTW92ZU9uc2NyZWVuKCk7CkBAIC0xNzMs
NiArMTY1LDI2IEBAIHByaXZhdGU6CiAgICAgaW50IGRvY0hlaWdodCgpIGNvbnN0OwogICAgIGlu
dCBkb2NXaWR0aCgpIGNvbnN0OwogCisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIG1heSBvbmx5IGJl
IGFjY2Vzc2VkIGJ5IExheW91dFN0YXRlTWFpbnRhaW5lci4KKyAgICBib29sIHB1c2hMYXlvdXRT
dGF0ZShSZW5kZXJCb3gqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBvZmZzZXQsIGludCBwYWdl
SGVpZ2h0ID0gMCwgQ29sdW1uSW5mbyogY29sSW5mbyA9IDApCisgICAgeworICAgICAgICAvLyBX
ZSBwdXNoIExheW91dFN0YXRlIGV2ZW4gaWYgbGF5b3V0U3RhdGUgaXMgZGlzYWJsZWQgYmVjYXVz
ZSBpdCBzdG9yZXMgbGF5b3V0RGVsdGEgdG9vLgorICAgICAgICBpZiAoIWRvaW5nRnVsbFJlcGFp
bnQoKSB8fCByZW5kZXJlci0+aGFzQ29sdW1ucygpIHx8IG1fbGF5b3V0U3RhdGUtPmlzUGFnaW5h
dGVkKCkpIHsKKyAgICAgICAgICAgIG1fbGF5b3V0U3RhdGUgPSBuZXcgKHJlbmRlckFyZW5hKCkp
IExheW91dFN0YXRlKG1fbGF5b3V0U3RhdGUsIHJlbmRlcmVyLCBvZmZzZXQsIHBhZ2VIZWlnaHQs
IGNvbEluZm8pOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZvaWQgcG9wTGF5b3V0U3RhdGUoKQorICAgIHsK
KyAgICAgICAgTGF5b3V0U3RhdGUqIHN0YXRlID0gbV9sYXlvdXRTdGF0ZTsKKyAgICAgICAgbV9s
YXlvdXRTdGF0ZSA9IHN0YXRlLT5tX25leHQ7CisgICAgICAgIHN0YXRlLT5kZXN0cm95KHJlbmRl
ckFyZW5hKCkpOworICAgIH0KKyAgICAKKyAgICBmcmllbmQgY2xhc3MgTGF5b3V0U3RhdGVNYWlu
dGFpbmVyOworICAgICAgICAKIHByb3RlY3RlZDoKICAgICBGcmFtZVZpZXcqIG1fZnJhbWVWaWV3
OwogCkBAIC0xODEsMjEgKzE5MywyMSBAQCBwcm90ZWN0ZWQ6CiAgICAgaW50IG1fc2VsZWN0aW9u
U3RhcnRQb3M7CiAgICAgaW50IG1fc2VsZWN0aW9uRW5kUG9zOwogCi0gICAgLy8gdXNlZCB0byBp
Z25vcmUgdmlld3BvcnQgd2lkdGggd2hlbiBwcmludGluZyB0byB0aGUgcHJpbnRlcgotICAgIGJv
b2wgbV9wcmludEltYWdlczsKKyAgICAvLyBGSVhNRTogT25seSB1c2VkIGJ5IGVtYmVkZGVkIFdl
YlZpZXdzIGluc2lkZSBBcHBLaXQgTlNWaWV3cy4gIEZpbmQgYSB3YXkgdG8gcmVtb3ZlLgorICAg
IGludCBtX2Jlc3RUcnVuY2F0ZWRBdDsKICAgICBpbnQgbV90cnVuY2F0ZWRBdDsKKyAgICBpbnQg
bV90cnVuY2F0b3JXaWR0aDsKKyAgICBJbnRSZWN0IG1fcHJpbnRSZWN0OworICAgIGJvb2wgbV9m
b3JjZWRQYWdlQnJlYWs7CisgICAgLy8gRW5kIGRlcHJlY2F0ZWQgbWVtYmVycy4KIAogICAgIGlu
dCBtX21heGltYWxPdXRsaW5lU2l6ZTsgLy8gVXNlZCB0byBhcHBseSBhIGZ1ZGdlIGZhY3RvciB0
byBkaXJ0eS1yZWN0IGNoZWNrcyBvbiBibG9ja3MvdGFibGVzLgotICAgIEludFJlY3QgbV9wcmlu
dFJlY3Q7IC8vIFVzZWQgd2hlbiBwcmludGluZy4KIAogICAgIHR5cGVkZWYgSGFzaFNldDxSZW5k
ZXJXaWRnZXQqPiBSZW5kZXJXaWRnZXRTZXQ7Ci0KICAgICBSZW5kZXJXaWRnZXRTZXQgbV93aWRn
ZXRzOwotCisgICAgCiBwcml2YXRlOgotICAgIGludCBtX2Jlc3RUcnVuY2F0ZWRBdDsKLSAgICBp
bnQgbV90cnVuY2F0b3JXaWR0aDsKLSAgICBib29sIG1fZm9yY2VkUGFnZUJyZWFrOworICAgIHVu
c2lnbmVkIG1fcGFnZUhlaWdodDsKICAgICBMYXlvdXRTdGF0ZSogbV9sYXlvdXRTdGF0ZTsKICAg
ICB1bnNpZ25lZCBtX2xheW91dFN0YXRlRGlzYWJsZUNvdW50OwogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKQEAgLTIyOCw2ICsyNDAsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9k
aXNhYmxlZChkaXNhYmxlU3RhdGUpCiAgICAgICAgICwgbV9kaWRTdGFydChmYWxzZSkKICAgICAg
ICAgLCBtX2RpZEVuZChmYWxzZSkKKyAgICAgICAgLCBtX2RpZENyZWF0ZUxheW91dFN0YXRlKGZh
bHNlKQogICAgIHsKICAgICAgICAgcHVzaChyb290LCBvZmZzZXQsIHBhZ2VIZWlnaHQsIGNvbElu
Zm8pOwogICAgIH0KQEAgLTIzOCw2ICsyNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9kaXNh
YmxlZChmYWxzZSkKICAgICAgICAgLCBtX2RpZFN0YXJ0KGZhbHNlKQogICAgICAgICAsIG1fZGlk
RW5kKGZhbHNlKQorICAgICAgICAsIG1fZGlkQ3JlYXRlTGF5b3V0U3RhdGUoZmFsc2UpCiAgICAg
ewogICAgIH0KICAgICAKQEAgLTI1MCw4ICsyNjQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBBU1NFUlQoIW1fZGlkU3RhcnQpOwogICAgICAgICAvLyBXZSBwdXNoIHN0YXRlIGV2ZW4gaWYg
ZGlzYWJsZWQsIGJlY2F1c2Ugd2Ugc3RpbGwgbmVlZCB0byBzdG9yZSBsYXlvdXREZWx0YQotICAg
ICAgICBtX3ZpZXctPnB1c2hMYXlvdXRTdGF0ZShyb290LCBvZmZzZXQsIHBhZ2VIZWlnaHQsIGNv
bEluZm8pOwotICAgICAgICBpZiAobV9kaXNhYmxlZCkKKyAgICAgICAgbV9kaWRDcmVhdGVMYXlv
dXRTdGF0ZSA9IG1fdmlldy0+cHVzaExheW91dFN0YXRlKHJvb3QsIG9mZnNldCwgcGFnZUhlaWdo
dCwgY29sSW5mbyk7CisgICAgICAgIGlmIChtX2Rpc2FibGVkICYmIG1fZGlkQ3JlYXRlTGF5b3V0
U3RhdGUpCiAgICAgICAgICAgICBtX3ZpZXctPmRpc2FibGVMYXlvdXRTdGF0ZSgpOwogICAgICAg
ICBtX2RpZFN0YXJ0ID0gdHJ1ZTsKICAgICB9CkBAIC0yNjAsOSArMjc0LDEyIEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIGlmIChtX2RpZFN0YXJ0KSB7CiAgICAgICAgICAgICBBU1NFUlQoIW1f
ZGlkRW5kKTsKLSAgICAgICAgICAgIG1fdmlldy0+cG9wTGF5b3V0U3RhdGUoKTsKLSAgICAgICAg
ICAgIGlmIChtX2Rpc2FibGVkKQotICAgICAgICAgICAgICAgIG1fdmlldy0+ZW5hYmxlTGF5b3V0
U3RhdGUoKTsKKyAgICAgICAgICAgIGlmIChtX2RpZENyZWF0ZUxheW91dFN0YXRlKSB7CisgICAg
ICAgICAgICAgICAgbV92aWV3LT5wb3BMYXlvdXRTdGF0ZSgpOworICAgICAgICAgICAgICAgIGlm
IChtX2Rpc2FibGVkKQorICAgICAgICAgICAgICAgICAgICBtX3ZpZXctPmVuYWJsZUxheW91dFN0
YXRlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIG1fZGlkRW5k
ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTI3NCw2ICsyOTEsNyBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbV9kaXNhYmxlZCA6IDE7ICAgICAgICAvLyB0cnVlIGlmIHRoZSBvZmZzZXQgYW5k
IGNsaXAgcGFydCBvZiBsYXlvdXRTdGF0ZSBpcyBkaXNhYmxlZAogICAgIGJvb2wgbV9kaWRTdGFy
dCA6IDE7ICAgICAgICAvLyB0cnVlIGlmIHdlIGRpZCBhIHB1c2ggb3IgZGlzYWJsZQogICAgIGJv
b2wgbV9kaWRFbmQgOiAxOyAgICAgICAgICAvLyB0cnVlIGlmIHdlIHBvcHBlZCBvciByZS1lbmFi
bGVkCisgICAgYm9vbCBtX2RpZENyZWF0ZUxheW91dFN0YXRlOyAvLyB0cnVlIGlmIHdlIGFjdHVh
bGx5IG1hZGUgYSBsYXlvdXQgc3RhdGUuCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67943</attachid>
            <date>2010-09-17 13:39:54 -0700</date>
            <delta_ts>2010-09-17 13:45:19 -0700</delta_ts>
            <desc>Patch with comment typos fixed.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>25363</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Nzc0MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTAtMDktMTcgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTk5MywgY29udmVydCBwcmludGlu
ZyB0byB0aGUgbmV3IHBhZ2luYXRpb24gbW9kZWwuCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmll
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnJlc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6
Zm9yY2VMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpmb3JjZUxheW91dEZv
clBhZ2luYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGp1c3RQYWdlSGVp
Z2h0KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAgICAgICAqIHBhZ2UvUHJpbnRD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByaW50Q29udGV4dDo6Y29tcHV0ZVBhZ2VS
ZWN0c1dpdGhQYWdlU2l6ZUludGVybmFsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4pOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpjYWxjSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50UmVwbGFjZWQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMaW5lQm94TGlzdDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWRl
by5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWRlbzo6cGFpbnRSZXBsYWNlZCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVmlldzo6UmVuZGVyVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpsYXlv
dXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVmlldzo6c2V0QmVzdFRydW5jYXRlZEF0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVmlldy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cG9wTGF5b3V0
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cGFnZUhlaWdodCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzZXRQYWdlSGVpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclZpZXc6OmJlc3RUcnVuY2F0ZWRBdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJWaWV3Ojp0cnVuY2F0ZWRBdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzZXRU
cnVuY2F0ZWRBdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpwcmludFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6c2V0UHJpbnRSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclZpZXc6OnB1c2hMYXlvdXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXRTdGF0ZU1haW50YWluZXI6OkxheW91dFN0YXRlTWFpbnRhaW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXRTdGF0ZU1haW50YWluZXI6OnB1c2gpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0U3RhdGVNYWludGFpbmVyOjpwb3ApOgorCiAyMDEwLTA5LTE3ICBMdWNhcyBEZSBNYXJj
aGkgIDxsdWNhcy5kZW1hcmNoaUBwcm9mdXNpb24ubW9iaT4KIAogICAgICAgICBVbnJldmlld2Vk
LCBidWlsZCBmaXguIEFkZCBmaWxlcyBtaXNzZWQgaW4gcjY3NzA0LgpJbmRleDogV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAJKHJldmlzaW9uIDY3NjcxKQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzMCw3ICsyMzAsNiBAQCB2b2lkIEZyYW1lVmlldzo6cmVzZXQoKQogICAg
IG1fd2FzU2Nyb2xsZWRCeVVzZXIgPSBmYWxzZTsKICAgICBtX2xhc3RMYXlvdXRTaXplID0gSW50
U2l6ZSgpOwogICAgIG1fbGFzdFpvb21GYWN0b3IgPSAxLjBmOwotICAgIG1fcGFnZUhlaWdodCA9
IDA7CiAgICAgbV9kZWZlcnJpbmdSZXBhaW50cyA9IDA7CiAgICAgbV9yZXBhaW50Q291bnQgPSAw
OwogICAgIG1fcmVwYWludFJlY3RzLmNsZWFyKCk7CkBAIC03OTUsNyArNzk0LDcgQEAgdm9pZCBG
cmFtZVZpZXc6OmxheW91dChib29sIGFsbG93U3VidHJlZQogCiAgICAgaWYgKHN1YnRyZWUpIHsK
ICAgICAgICAgUmVuZGVyVmlldyogdmlldyA9IHJvb3QtPnZpZXcoKTsKLSAgICAgICAgdmlldy0+
cG9wTGF5b3V0U3RhdGUoKTsKKyAgICAgICAgdmlldy0+cG9wTGF5b3V0U3RhdGUocm9vdCk7CiAg
ICAgICAgIGlmIChkaXNhYmxlTGF5b3V0U3RhdGUpCiAgICAgICAgICAgICB2aWV3LT5lbmFibGVM
YXlvdXRTdGF0ZSgpOwogICAgIH0KQEAgLTIxMDEsMTIgKzIxMDAsNiBAQCB2b2lkIEZyYW1lVmll
dzo6Zmx1c2hEZWZlcnJlZFJlcGFpbnRzKCkKIHZvaWQgRnJhbWVWaWV3Ojpmb3JjZUxheW91dChi
b29sIGFsbG93U3VidHJlZSkKIHsKICAgICBsYXlvdXQoYWxsb3dTdWJ0cmVlKTsKLSAgICAvLyBX
ZSBjYW5ub3QgdW5zY2hlZHVsZSBhIHBlbmRpbmcgcmVsYXlvdXQsIHNpbmNlIHRoZSBmb3JjZSBj
YW4gYmUgY2FsbGVkIHdpdGgKLSAgICAvLyBhIHRpbnkgcmVjdGFuZ2xlIGZyb20gYSBkcmF3UmVj
dCB1cGRhdGUuICBCeSB1bnNjaGVkdWxpbmcgd2UgaW4gZWZmZWN0Ci0gICAgLy8gInZhbGlkYXRl
IiBhbmQgc3RvcCB0aGUgbmVjZXNzYXJ5IGZ1bGwgcmVwYWludCBmcm9tIG9jY3VycmluZy4gIEJh
c2ljYWxseSBhbnkgYmFzaWMKLSAgICAvLyBhcHBlbmQvcmVtb3ZlIERIVE1MIGlzIGJyb2tlbiBi
eSB0aGlzIGNhbGwuICBGb3Igbm93LCBJIGhhdmUgcmVtb3ZlZCB0aGUgb3B0aW1pemF0aW9uCi0g
ICAgLy8gdW50aWwgd2UgaGF2ZSBhIGJldHRlciBpbnZhbGlkYXRpb24gc3RhdGVneS4gLWR3aAot
ICAgIC8vdW5zY2hlZHVsZVJlbGF5b3V0KCk7CiB9CiAKIHZvaWQgRnJhbWVWaWV3Ojpmb3JjZUxh
eW91dEZvclBhZ2luYXRpb24oY29uc3QgRmxvYXRTaXplJiBwYWdlU2l6ZSwgZmxvYXQgbWF4aW11
bVNocmlua0ZhY3RvciwgRnJhbWU6OkFkanVzdFZpZXdTaXplT3JOb3Qgc2hvdWxkQWRqdXN0Vmll
d1NpemUpCkBAIC0yMTE2LDggKzIxMDksOCBAQCB2b2lkIEZyYW1lVmlldzo6Zm9yY2VMYXlvdXRG
b3JQYWdpbmF0aW9uCiAgICAgUmVuZGVyVmlldyAqcm9vdCA9IHRvUmVuZGVyVmlldyhtX2ZyYW1l
LT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKTsKICAgICBpZiAocm9vdCkgewogICAgICAgICBpbnQg
cGFnZVcgPSBjZWlsZihwYWdlU2l6ZS53aWR0aCgpKTsKLSAgICAgICAgbV9wYWdlSGVpZ2h0ID0g
cGFnZVNpemUuaGVpZ2h0KCkgPyBwYWdlU2l6ZS5oZWlnaHQoKSA6IHZpc2libGVIZWlnaHQoKTsK
ICAgICAgICAgcm9vdC0+c2V0V2lkdGgocGFnZVcpOworICAgICAgICByb290LT5zZXRQYWdlSGVp
Z2h0KHBhZ2VTaXplLmhlaWdodCgpKTsKICAgICAgICAgcm9vdC0+c2V0TmVlZHNMYXlvdXRBbmRQ
cmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAgIGZvcmNlTGF5b3V0KCk7CiAKQEAgLTIxMjksNyAr
MjEyMiw3IEBAIHZvaWQgRnJhbWVWaWV3Ojpmb3JjZUxheW91dEZvclBhZ2luYXRpb24KICAgICAg
ICAgaWYgKHJpZ2h0bW9zdFBvcyA+IHBhZ2VTaXplLndpZHRoKCkpIHsKICAgICAgICAgICAgIHBh
Z2VXID0gc3RkOjptaW48aW50PihyaWdodG1vc3RQb3MsIGNlaWxmKHBhZ2VTaXplLndpZHRoKCkg
KiBtYXhpbXVtU2hyaW5rRmFjdG9yKSk7CiAgICAgICAgICAgICBpZiAocGFnZVNpemUuaGVpZ2h0
KCkpCi0gICAgICAgICAgICAgICAgbV9wYWdlSGVpZ2h0ID0gcGFnZVcgLyBwYWdlU2l6ZS53aWR0
aCgpICogcGFnZVNpemUuaGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgcm9vdC0+c2V0UGFnZUhl
aWdodChwYWdlVyAvIHBhZ2VTaXplLndpZHRoKCkgKiBwYWdlU2l6ZS5oZWlnaHQoKSk7CiAgICAg
ICAgICAgICByb290LT5zZXRXaWR0aChwYWdlVyk7CiAgICAgICAgICAgICByb290LT5zZXROZWVk
c0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICAgICAgICAgIGZvcmNlTGF5b3V0KCk7
CkBAIC0yMTM4LDcgKzIxMzEsNiBAQCB2b2lkIEZyYW1lVmlldzo6Zm9yY2VMYXlvdXRGb3JQYWdp
bmF0aW9uCiAKICAgICBpZiAoc2hvdWxkQWRqdXN0Vmlld1NpemUpCiAgICAgICAgIGFkanVzdFZp
ZXdTaXplKCk7Ci0gICAgbV9wYWdlSGVpZ2h0ID0gMDsKIH0KIAogdm9pZCBGcmFtZVZpZXc6OmFk
anVzdFBhZ2VIZWlnaHQoZmxvYXQgKm5ld0JvdHRvbSwgZmxvYXQgb2xkVG9wLCBmbG9hdCBvbGRC
b3R0b20sIGZsb2F0IC8qYm90dG9tTGltaXQqLykKQEAgLTIxNDksMTAgKzIxNDEsMTIgQEAgdm9p
ZCBGcmFtZVZpZXc6OmFkanVzdFBhZ2VIZWlnaHQoZmxvYXQgKgogICAgICAgICBHcmFwaGljc0Nv
bnRleHQgY29udGV4dCgoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqKTApOwogICAgICAgICByb290
LT5zZXRUcnVuY2F0ZWRBdCgoaW50KWZsb29yZihvbGRCb3R0b20pKTsKICAgICAgICAgSW50UmVj
dCBkaXJ0eVJlY3QoMCwgKGludClmbG9vcmYob2xkVG9wKSwgcm9vdC0+cmlnaHRMYXlvdXRPdmVy
ZmxvdygpLCAoaW50KWNlaWxmKG9sZEJvdHRvbSAtIG9sZFRvcCkpOworICAgICAgICByb290LT5z
ZXRQcmludFJlY3QoZGlydHlSZWN0KTsKICAgICAgICAgcm9vdC0+bGF5ZXIoKS0+cGFpbnQoJmNv
bnRleHQsIGRpcnR5UmVjdCk7CiAgICAgICAgICpuZXdCb3R0b20gPSByb290LT5iZXN0VHJ1bmNh
dGVkQXQoKTsKICAgICAgICAgaWYgKCpuZXdCb3R0b20gPT0gMCkKICAgICAgICAgICAgICpuZXdC
b3R0b20gPSBvbGRCb3R0b207CisgICAgICAgIHJvb3QtPnNldFByaW50UmVjdChJbnRSZWN0KCkp
OwogICAgIH0gZWxzZQogICAgICAgICAqbmV3Qm90dG9tID0gb2xkQm90dG9tOwogfQpJbmRleDog
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuaAkocmV2aXNpb24gNjc2NzEpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwMCw4ICsyMDAsMjMgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3Jj
ZUxheW91dChib29sIGFsbG93U3VidHJlZSA9IGZhbHNlKTsKICAgICB2b2lkIGZvcmNlTGF5b3V0
Rm9yUGFnaW5hdGlvbihjb25zdCBGbG9hdFNpemUmIHBhZ2VTaXplLCBmbG9hdCBtYXhpbXVtU2hy
aW5rRmFjdG9yLCBGcmFtZTo6QWRqdXN0Vmlld1NpemVPck5vdCk7Ci0gICAgaW50IHBhZ2VIZWln
aHQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VIZWlnaHQ7IH0KIAorICAgIC8vIEZJWE1FOiBUaGlz
IG1ldGhvZCBpcyByZXRhaW5lZCBiZWNhdXNlIG9mIGVtYmVkZGVkIFdlYlZpZXdzIGluIEFwcEtp
dC4gIFdoZW4gYSBXZWJWaWV3IGlzIGVtYmVkZGVkIGluc2lkZQorICAgIC8vIHNvbWUgZW5jbG9z
aW5nIHZpZXcgd2l0aCBhdXRvLXBhZ2luYXRpb24sIG5vIGNhbGwgaGFwcGVucyB0byByZXNpemUg
dGhlIHZpZXcuICBUaGUgbmV3IHBhZ2luYXRpb24gbW9kZWwKKyAgICAvLyBuZWVkcyB0aGUgdmll
dyB0byByZXNpemUgYXMgYSByZXN1bHQgb2YgdGhlIGJyZWFrcywgYnV0IHRoYXQgbWVhbnMgdGhh
dCB0aGUgZW5jbG9zaW5nIHZpZXcgaGFzIHRvIHBvdGVudGlhbGx5CisgICAgLy8gcmVzaXplIGFy
b3VuZCB0aGF0IHZpZXcuICBBdXRvLXBhZ2luYXRpb24gdXNlcyB0aGUgYm91bmRzIG9mIHRoZSBh
Y3R1YWwgdmlldyB0aGF0J3MgYmVpbmcgcHJpbnRlZCB0byBkZXRlcm1pbmUKKyAgICAvLyB0aGUg
ZWRnZXMgb2YgdGhlIHByaW50IG9wZXJhdGlvbiwgc28gdGhlIHJlc2l6ZSBpcyBuZWNlc3Nhcnkg
aWYgdGhlIGVuY2xvc2luZyB2aWV3J3MgYm91bmRzIGRlcGVuZCBvbiB0aGUKKyAgICAvLyB3ZWIg
ZG9jdW1lbnQncyBib3VuZHMuCisgICAgLy8gCisgICAgLy8gVGhpcyBpcyBhbHJlYWR5IGEgcHJv
YmxlbSBpZiB0aGUgdmlldyBuZWVkcyB0byBiZSBhIGRpZmZlcmVudCBzaXplIGJlY2F1c2Ugb2Yg
cHJpbnRlciBmb250cyBvciBiZWNhdXNlIG9mIHByaW50IHN0eWxlc2hlZXRzLgorICAgIC8vIE1h
aWwvRGljdGlvbmFyeSB3b3JrIGFyb3VuZCB0aGlzIHByb2JsZW0gYnkgdXNpbmcgdGhlIF9sYXlv
dXRGb3JQcmludGluZyBTUEkKKyAgICAvLyB0byBhdCBsZWFzdCBnZXQgcHJpbnQgc3R5bGVzaGVl
dHMgYW5kIHByaW50ZXIgZm9udHMgaW50byBwbGF5LCBidXQgc2luY2UgV2ViS2l0IGRvZXNuJ3Qg
a25vdyBhYm91dCB0aGUgcGFnZSBvZmZzZXQgb3IKKyAgICAvLyBwYWdlIHNpemUsIGl0IGNhbid0
IGFjdHVhbGx5IHBhZ2luYXRlIGNvcnJlY3RseSBkdXJpbmcgX2xheW91dEZvclByaW50aW5nLgor
ICAgIC8vCisgICAgLy8gV2UgY2FuIGV2ZW50dWFsbHkgbW92ZSBNYWlsIHRvIGEgbmV3ZXIgU1BJ
IHRoYXQgd291bGQgbGV0IHRoZW0gb3B0IGluIHRvIHRoZSBsYXlvdXQtdGltZSBwYWdpbmF0aW9u
IG1vZGVsLAorICAgIC8vIGJ1dCB0aGF0IGRvZXNuJ3Qgc29sdmUgdGhlIGdlbmVyYWwgcHJvYmxl
bSBvZiBob3cgb3RoZXIgQXBwS2l0IHZpZXdzIGNvdWxkIG9wdCBpbiB0byB0aGUgYmV0dGVyIG1v
ZGVsLgorICAgIC8vCisgICAgLy8gTk8gT1RIRVIgUExBVEZPUk0gQkVTSURFUyBNQUMgU0hPVUxE
IFVTRSBUSElTIE1FVEhPRC4KICAgICB2b2lkIGFkanVzdFBhZ2VIZWlnaHQoZmxvYXQqIG5ld0Jv
dHRvbSwgZmxvYXQgb2xkVG9wLCBmbG9hdCBvbGRCb3R0b20sIGZsb2F0IGJvdHRvbUxpbWl0KTsK
IAogICAgIGJvb2wgc2Nyb2xsVG9GcmFnbWVudChjb25zdCBLVVJMJik7CkBAIC0zMzYsOCArMzUx
LDYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9tZWRpYVR5cGU7CiAgICAgU3RyaW5nIG1fbWVk
aWFUeXBlV2hlbk5vdFByaW50aW5nOwogCi0gICAgaW50IG1fcGFnZUhlaWdodDsKLQogICAgIHVu
c2lnbmVkIG1fZW5xdWV1ZUV2ZW50czsKICAgICBWZWN0b3I8U2NoZWR1bGVkRXZlbnQqPiBtX3Nj
aGVkdWxlZEV2ZW50czsKICAgICAKSW5kZXg6IFdlYkNvcmUvcGFnZS9QcmludENvbnRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QcmludENvbnRleHQuY3BwCShyZXZpc2lvbiA2
NzY3MSkKKysrIFdlYkNvcmUvcGFnZS9QcmludENvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05NSwyNiArOTUsMjIgQEAgdm9pZCBQcmludENvbnRleHQ6OmNvbXB1dGVQYWdlUmVjdHNXaXRo
UAogewogICAgIGlmICghbV9mcmFtZS0+ZG9jdW1lbnQoKSB8fCAhbV9mcmFtZS0+dmlldygpIHx8
ICFtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CisKICAg
ICBSZW5kZXJWaWV3KiByb290ID0gdG9SZW5kZXJWaWV3KG1fZnJhbWUtPmRvY3VtZW50KCktPnJl
bmRlcmVyKCkpOwogCi0gICAgY29uc3QgZmxvYXQgcGFnZVdpZHRoID0gcGFnZVNpemVJblBpeGVs
cy53aWR0aCgpOwotICAgIGNvbnN0IGZsb2F0IGRvY1dpZHRoID0gcm9vdC0+bGF5ZXIoKS0+d2lk
dGgoKTsKLSAgICBjb25zdCBmbG9hdCBkb2NIZWlnaHQgPSByb290LT5sYXllcigpLT5oZWlnaHQo
KTsKLSAgICBmbG9hdCBjdXJyUGFnZUhlaWdodCA9IHBhZ2VTaXplSW5QaXhlbHMuaGVpZ2h0KCk7
Ci0KLSAgICAvLyBhbHdheXMgcmV0dXJuIGF0IGxlYXN0IG9uZSBwYWdlLCBzaW5jZSBlbXB0eSBm
aWxlcyBzaG91bGQgcHJpbnQgYSBibGFuayBwYWdlCi0gICAgZmxvYXQgcHJpbnRlZFBhZ2VzSGVp
Z2h0ID0gMDsKLSAgICBkbyB7Ci0gICAgICAgIGZsb2F0IHByb3Bvc2VkQm90dG9tID0gc3RkOjpt
aW4oZG9jSGVpZ2h0LCBwcmludGVkUGFnZXNIZWlnaHQgKyBwYWdlU2l6ZUluUGl4ZWxzLmhlaWdo
dCgpKTsKLSAgICAgICAgbV9mcmFtZS0+dmlldygpLT5hZGp1c3RQYWdlSGVpZ2h0KCZwcm9wb3Nl
ZEJvdHRvbSwgcHJpbnRlZFBhZ2VzSGVpZ2h0LCBwcm9wb3NlZEJvdHRvbSwgcHJpbnRlZFBhZ2Vz
SGVpZ2h0KTsKLSAgICAgICAgY3VyclBhZ2VIZWlnaHQgPSBtYXgoMS4wZiwgcHJvcG9zZWRCb3R0
b20gLSBwcmludGVkUGFnZXNIZWlnaHQpOworICAgIGludCBkb2NXaWR0aCA9IHJvb3QtPmxheWVy
KCktPndpZHRoKCk7CisgICAgaW50IGRvY0hlaWdodCA9IHJvb3QtPmxheWVyKCktPmhlaWdodCgp
OworICAgIGludCBwYWdlV2lkdGggPSBwYWdlU2l6ZUluUGl4ZWxzLndpZHRoKCk7CisgICAgaW50
IHBhZ2VIZWlnaHQgPSBwYWdlU2l6ZUluUGl4ZWxzLmhlaWdodCgpOworCisgICAgdW5zaWduZWQg
cGFnZUNvdW50ID0gY2VpbGYoKGZsb2F0KWRvY0hlaWdodCAvIHBhZ2VIZWlnaHQpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYWdlQ291bnQ7ICsraSkgewogICAgICAgICBpZiAoYWxs
b3dIb3Jpem9udGFsTXVsdGlQYWdlcykgewotICAgICAgICAgICAgZm9yIChmbG9hdCBjdXJXaWR0
aCA9IDA7IGN1cldpZHRoIDwgZG9jV2lkdGg7IGN1cldpZHRoICs9IHBhZ2VXaWR0aCkKLSAgICAg
ICAgICAgICAgICBtX3BhZ2VSZWN0cy5hcHBlbmQoSW50UmVjdChjdXJXaWR0aCwgKGludClwcmlu
dGVkUGFnZXNIZWlnaHQsIChpbnQpcGFnZVdpZHRoLCAoaW50KWN1cnJQYWdlSGVpZ2h0KSk7Cisg
ICAgICAgICAgICBmb3IgKGludCBjdXJyV2lkdGggPSAwOyBjdXJyV2lkdGggPCBkb2NXaWR0aDsg
Y3VycldpZHRoICs9IHBhZ2VXaWR0aCkKKyAgICAgICAgICAgICAgICBtX3BhZ2VSZWN0cy5hcHBl
bmQoSW50UmVjdChjdXJyV2lkdGgsIGkgKiBwYWdlSGVpZ2h0LCBwYWdlV2lkdGgsIHBhZ2VIZWln
aHQpKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3BhZ2VSZWN0cy5hcHBlbmQoSW50
UmVjdCgwLCAoaW50KXByaW50ZWRQYWdlc0hlaWdodCwgKGludClwYWdlV2lkdGgsIChpbnQpY3Vy
clBhZ2VIZWlnaHQpKTsKLSAgICAgICAgcHJpbnRlZFBhZ2VzSGVpZ2h0ICs9IGN1cnJQYWdlSGVp
Z2h0OwotICAgIH0gd2hpbGUgKHByaW50ZWRQYWdlc0hlaWdodCA8IGRvY0hlaWdodCk7CisgICAg
ICAgICAgICBtX3BhZ2VSZWN0cy5hcHBlbmQoSW50UmVjdCgwLCBpICogcGFnZUhlaWdodCwgcGFn
ZVdpZHRoLCBwYWdlSGVpZ2h0KSk7CisgICAgfQogfQogCiB2b2lkIFByaW50Q29udGV4dDo6YmVn
aW4oZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAJKHJldmlzaW9uIDY3NjczKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjA4LDE0ICsyMjA4LDE0IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmYKICAgICBpbmZvLnBoYXNlID0gbmV3UGhhc2U7CiAg
ICAgaW5mby51cGRhdGVQYWludGluZ1Jvb3RGb3JDaGlsZHJlbih0aGlzKTsKICAgICAKKyAgICAv
LyBGSVhNRTogUGFpbnQtdGltZSBwYWdpbmF0aW9uIGlzIG9ic29sZXRlIGFuZCBpcyBub3cgb25s
eSB1c2VkIGJ5IGVtYmVkZGVkIFdlYlZpZXdzIGluc2lkZSBBcHBLaXQKKyAgICAvLyBOU1ZpZXdz
LiAgRG8gbm90IGFkZCBhbnkgbW9yZSBjb2RlIGZvciB0aGlzLgogICAgIFJlbmRlclZpZXcqIHJl
bmRlclZpZXcgPSB2aWV3KCk7CiAgICAgYm9vbCB1c2VQcmludFJlY3QgPSAhcmVuZGVyVmlldy0+
cHJpbnRSZWN0KCkuaXNFbXB0eSgpOwogICAgIAotICAgIGJvb2wgY2hlY2tQYWdlQnJlYWtzID0g
ZG9jdW1lbnQoKS0+cGFnaW5hdGVkKCkgJiYgIWRvY3VtZW50KCktPnNldHRpbmdzKCktPnBhZ2lu
YXRlRHVyaW5nTGF5b3V0RW5hYmxlZCgpOwotCiAgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0g
Zmlyc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkg
eyAgICAgICAgCiAgICAgICAgIC8vIENoZWNrIGZvciBwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlz
LCBhbmQgaWYgaXQncyBzZXQsIGJyZWFrIGFuZCBiYWlsLgotICAgICAgICBib29sIGNoZWNrQmVm
b3JlQWx3YXlzID0gIWNoaWxkcmVuSW5saW5lKCkgJiYgKGNoZWNrUGFnZUJyZWFrcyAmJiBjaGls
ZC0+c3R5bGUoKS0+cGFnZUJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMpOworICAgICAgICBib29s
IGNoZWNrQmVmb3JlQWx3YXlzID0gIWNoaWxkcmVuSW5saW5lKCkgJiYgKHVzZVByaW50UmVjdCAm
JiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMpOwogICAgICAg
ICBpZiAoY2hlY2tCZWZvcmVBbHdheXMKICAgICAgICAgICAgICYmICh0eSArIGNoaWxkLT55KCkp
ID4gcGFpbnRJbmZvLnJlY3QueSgpCiAgICAgICAgICAgICAmJiAodHkgKyBjaGlsZC0+eSgpKSA8
IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpKSB7CkBAIC0yMjM4LDcgKzIyMzgsNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjpwYWludENoaWxkcmVuKFBhaW50SW5mCiAgICAgICAgICAgICBjaGlsZC0+cGFp
bnQoaW5mbywgdHgsIHR5KTsKIAogICAgICAgICAvLyBDaGVjayBmb3IgcGFnZS1icmVhay1hZnRl
cjogYWx3YXlzLCBhbmQgaWYgaXQncyBzZXQsIGJyZWFrIGFuZCBiYWlsLgotICAgICAgICBib29s
IGNoZWNrQWZ0ZXJBbHdheXMgPSAhY2hpbGRyZW5JbmxpbmUoKSAmJiAoY2hlY2tQYWdlQnJlYWtz
ICYmIGNoaWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtBZnRlcigpID09IFBCQUxXQVlTKTsKKyAgICAg
ICAgYm9vbCBjaGVja0FmdGVyQWx3YXlzID0gIWNoaWxkcmVuSW5saW5lKCkgJiYgKHVzZVByaW50
UmVjdCAmJiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFrQWZ0ZXIoKSA9PSBQQkFMV0FZUyk7CiAg
ICAgICAgIGlmIChjaGVja0FmdGVyQWx3YXlzCiAgICAgICAgICAgICAmJiAodHkgKyBjaGlsZC0+
eSgpICsgY2hpbGQtPmhlaWdodCgpKSA+IHBhaW50SW5mby5yZWN0LnkoKQogICAgICAgICAgICAg
JiYgKHR5ICsgY2hpbGQtPnkoKSArIGNoaWxkLT5oZWlnaHQoKSkgPCBwYWludEluZm8ucmVjdC5i
b3R0b20oKSkgewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiA2NzY3MSkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
MTUsMTEgKzE1MTUsMTEgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNIZWlnaHQoKQogICAgIC8vIGlz
IHNwZWNpZmllZC4gV2hlbiB3ZSdyZSBwcmludGluZywgd2UgYWxzbyBuZWVkIHRoaXMgcXVpcmsg
aWYgdGhlIGJvZHkgb3Igcm9vdCBoYXMgYSBwZXJjZW50YWdlIAogICAgIC8vIGhlaWdodCBzaW5j
ZSB3ZSBkb24ndCBzZXQgYSBoZWlnaHQgaW4gUmVuZGVyVmlldyB3aGVuIHdlJ3JlIHByaW50aW5n
LiBTbyB3aXRob3V0IHRoaXMgcXVpcmssIHRoZSAKICAgICAvLyBoZWlnaHQgaGFzIG5vdGhpbmcg
dG8gYmUgYSBwZXJjZW50YWdlIG9mLCBhbmQgaXQgZW5kcyB1cCBiZWluZyAwLiBUaGF0IGlzIGJh
ZC4KLSAgICBib29sIHBhZ2luYXRlZENvbnRlbnROZWVkc0Jhc2VIZWlnaHQgPSBkb2N1bWVudCgp
LT5wYWdpbmF0ZWQoKSAmJiBoLmlzUGVyY2VudCgpCisgICAgYm9vbCBwYWdpbmF0ZWRDb250ZW50
TmVlZHNCYXNlSGVpZ2h0ID0gZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSAmJiBoLmlzUGVyY2VudCgp
CiAgICAgICAgICYmIChpc1Jvb3QoKSB8fCAoaXNCb2R5KCkgJiYgZG9jdW1lbnQoKS0+ZG9jdW1l
bnRFbGVtZW50KCktPnJlbmRlcmVyKCktPnN0eWxlKCktPmhlaWdodCgpLmlzUGVyY2VudCgpKSk7
CiAgICAgaWYgKHN0cmV0Y2hlc1RvVmlld0hlaWdodCgpIHx8IHBhZ2luYXRlZENvbnRlbnROZWVk
c0Jhc2VIZWlnaHQpIHsKICAgICAgICAgaW50IG1hcmdpbnMgPSBjb2xsYXBzZWRNYXJnaW5Ub3Ao
KSArIGNvbGxhcHNlZE1hcmdpbkJvdHRvbSgpOwotICAgICAgICBpbnQgdmlzSGVpZ2h0ID0gZG9j
dW1lbnQoKS0+cHJpbnRpbmcoKSA/IHZpZXcoKS0+ZnJhbWVWaWV3KCktPnBhZ2VIZWlnaHQoKSA6
IHZpZXcoKS0+dmlld0hlaWdodCgpOworICAgICAgICBpbnQgdmlzSGVpZ2h0ID0gZG9jdW1lbnQo
KS0+cHJpbnRpbmcoKSA/IHZpZXcoKS0+cGFnZUhlaWdodCgpIDogdmlldygpLT52aWV3SGVpZ2h0
KCk7CiAgICAgICAgIGlmIChpc1Jvb3QoKSkKICAgICAgICAgICAgIHNldEhlaWdodChtYXgoaGVp
Z2h0KCksIHZpc0hlaWdodCAtIG1hcmdpbnMpKTsKICAgICAgICAgZWxzZSB7CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiA2NzY3MSkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDkgKzIxNCw2IEBAIHZv
aWQgUmVuZGVySW1hZ2U6OnBhaW50UmVwbGFjZWQoUGFpbnRJbmYKICAgICBpbnQgbGVmdFBhZCA9
IHBhZGRpbmdMZWZ0KCk7CiAgICAgaW50IHRvcFBhZCA9IHBhZGRpbmdUb3AoKTsKIAotICAgIGlm
IChkb2N1bWVudCgpLT5wcmludGluZygpICYmICF2aWV3KCktPnByaW50SW1hZ2VzKCkpCi0gICAg
ICAgIHJldHVybjsKLQogICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5j
b250ZXh0OwogCiAgICAgaWYgKCFtX2ltYWdlUmVzb3VyY2UtPmhhc0ltYWdlKCkgfHwgbV9pbWFn
ZVJlc291cmNlLT5lcnJvck9jY3VycmVkKCkpIHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpbmVCb3hMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaW5lQm94TGlzdC5jcHAJKHJldmlzaW9uIDY3NjcxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGluZUJveExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNiArMTU5LDggQEAg
dm9pZCBSZW5kZXJMaW5lQm94TGlzdDo6cGFpbnQoUmVuZGVyQm94TQogICAgIGlmICghZmlyc3RM
aW5lQm94KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIEZJWE1FOiBQYWludC10aW1lIHBh
Z2luYXRpb24gaXMgb2Jzb2xldGUgYW5kIGlzIG5vdyBvbmx5IHVzZWQgYnkgZW1iZWRkZWQgV2Vi
Vmlld3MgaW5zaWRlIEFwcEtpdAorICAgIC8vIE5TVmlld3MuICBEbyBub3QgYWRkIGFueSBtb3Jl
IGNvZGUgZm9yIHRoaXMuCiAgICAgUmVuZGVyVmlldyogdiA9IHJlbmRlcmVyLT52aWV3KCk7CiAg
ICAgYm9vbCB1c2VQcmludFJlY3QgPSAhdi0+cHJpbnRSZWN0KCkuaXNFbXB0eSgpOwogICAgIApJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcAkocmV2aXNpb24gNjc2NzEpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw5ICsx
ODcsNiBAQCB2b2lkIFJlbmRlclZpZGVvOjpwYWludFJlcGxhY2VkKFBhaW50SW5mCiAgICAgTWVk
aWFQbGF5ZXIqIG1lZGlhUGxheWVyID0gcGxheWVyKCk7CiAgICAgYm9vbCBkaXNwbGF5aW5nUG9z
dGVyID0gdmlkZW9FbGVtZW50KCktPnNob3VsZERpc3BsYXlQb3N0ZXJJbWFnZSgpOwogCi0gICAg
aWYgKGRpc3BsYXlpbmdQb3N0ZXIgJiYgZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSAmJiAhdmlldygp
LT5wcmludEltYWdlcygpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoIWRpc3BsYXlpbmdQ
b3N0ZXIpIHsKICAgICAgICAgaWYgKCFtZWRpYVBsYXllcikKICAgICAgICAgICAgIHJldHVybjsK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCShyZXZpc2lvbiA2NzY3MSkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMSArNDgs
MTIgQEAgUmVuZGVyVmlldzo6UmVuZGVyVmlldyhOb2RlKiBub2RlLCBGcmFtZQogICAgICwgbV9z
ZWxlY3Rpb25FbmQoMCkKICAgICAsIG1fc2VsZWN0aW9uU3RhcnRQb3MoLTEpCiAgICAgLCBtX3Nl
bGVjdGlvbkVuZFBvcygtMSkKLSAgICAsIG1fcHJpbnRJbWFnZXModHJ1ZSkKLSAgICAsIG1fbWF4
aW1hbE91dGxpbmVTaXplKDApCiAgICAgLCBtX2Jlc3RUcnVuY2F0ZWRBdCgwKQorICAgICwgbV90
cnVuY2F0ZWRBdCgwKQogICAgICwgbV90cnVuY2F0b3JXaWR0aCgwKQogICAgICwgbV9mb3JjZWRQ
YWdlQnJlYWsoZmFsc2UpCisgICAgLCBtX21heGltYWxPdXRsaW5lU2l6ZSgwKQorICAgICwgbV9w
YWdlSGVpZ2h0KDApCiAgICAgLCBtX2xheW91dFN0YXRlKDApCiAgICAgLCBtX2xheW91dFN0YXRl
RGlzYWJsZUNvdW50KDApCiB7CkBAIC0xMDAsNiArMTAxLDkgQEAgdm9pZCBSZW5kZXJWaWV3Ojpj
YWxjUHJlZldpZHRocygpCiAKIHZvaWQgUmVuZGVyVmlldzo6bGF5b3V0KCkKIHsKKyAgICBpZiAo
IWRvY3VtZW50KCktPnBhZ2luYXRlZCgpKQorICAgICAgICBzZXRQYWdlSGVpZ2h0KDApOworCiAg
ICAgaWYgKHByaW50aW5nKCkpCiAgICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lk
dGggPSB3aWR0aCgpOwogCkBAIC0xMTcsNiArMTIxLDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpsYXlv
dXQoKQogICAgIExheW91dFN0YXRlIHN0YXRlOwogICAgIC8vIEZJWE1FOiBNYXkgYmUgYmV0dGVy
IHRvIHB1c2ggYSBjbGlwIGFuZCBhdm9pZCBpc3N1aW5nIG9mZnNjcmVlbiByZXBhaW50cy4KICAg
ICBzdGF0ZS5tX2NsaXBwZWQgPSBmYWxzZTsKKyAgICBzdGF0ZS5tX3BhZ2VIZWlnaHQgPSBtX3Bh
Z2VIZWlnaHQ7CiAgICAgbV9sYXlvdXRTdGF0ZSA9ICZzdGF0ZTsKIAogICAgIGlmIChuZWVkc0xh
eW91dCgpKQpAQCAtMTI2LDcgKzEzMSw2IEBAIHZvaWQgUmVuZGVyVmlldzo6bGF5b3V0KCkKICAg
ICBtX292ZXJmbG93LmNsZWFyKCk7CiAgICAgYWRkTGF5b3V0T3ZlcmZsb3coSW50UmVjdCgwLCAw
LCBkb2NXaWR0aCgpLCBkb2NIZWlnaHQoKSkpOwogCi0KICAgICBBU1NFUlQobGF5b3V0RGVsdGEo
KSA9PSBJbnRTaXplKCkpOwogICAgIEFTU0VSVChtX2xheW91dFN0YXRlRGlzYWJsZUNvdW50ID09
IDApOwogICAgIEFTU0VSVChtX2xheW91dFN0YXRlID09ICZzdGF0ZSk7CkBAIC0xNTQsMTIgKzE1
OCw2IEBAIHZvaWQgUmVuZGVyVmlldzo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEkKIHsKICAgICAv
LyBJZiB3ZSBldmVyIHJlcXVpcmUgbGF5b3V0IGJ1dCByZWNlaXZlIGEgcGFpbnQgYW55d2F5LCBz
b21ldGhpbmcgaGFzIGdvbmUgaG9ycmlibHkgd3JvbmcuCiAgICAgQVNTRVJUKCFuZWVkc0xheW91
dCgpKTsKLQotICAgIC8vIENhY2hlIHRoZSBwcmludCByZWN0IGJlY2F1c2UgdGhlIGRpcnR5IHJl
Y3QgY291bGQgZ2V0IGNoYW5nZWQgZHVyaW5nIHBhaW50aW5nLgotICAgIGlmIChkb2N1bWVudCgp
LT5wYWdpbmF0ZWQoKSkKLSAgICAgICAgc2V0UHJpbnRSZWN0KHBhaW50SW5mby5yZWN0KTsKLSAg
ICBlbHNlCi0gICAgICAgIHNldFByaW50UmVjdChJbnRSZWN0KCkpOwogICAgIHBhaW50T2JqZWN0
KHBhaW50SW5mbywgdHgsIHR5KTsKIH0KIApAQCAtNjY3LDI5ICs2NjUsNiBAQCBmbG9hdCBSZW5k
ZXJWaWV3Ojp6b29tRmFjdG9yKCkgY29uc3QKICAgICByZXR1cm4gbV9mcmFtZVZpZXctPnBhZ2Va
b29tRmFjdG9yKCk7CiB9CiAKLS8vIFRoZSBpZGVhIGhlcmUgaXMgdG8gdGFrZSBpbnRvIGFjY291
bnQgd2hhdCBvYmplY3QgaXMgbW92aW5nIHRoZSBwYWdpbmF0aW9uIHBvaW50LCBhbmQKLS8vIHRo
dXMgY2hvb3NlIHRoZSBiZXN0IHBsYWNlIHRvIGNob3AgaXQuCi12b2lkIFJlbmRlclZpZXc6OnNl
dEJlc3RUcnVuY2F0ZWRBdChpbnQgeSwgUmVuZGVyQm94TW9kZWxPYmplY3QqIGZvclJlbmRlcmVy
LCBib29sIGZvcmNlZEJyZWFrKQotewotICAgIC8vIE5vYm9keSBlbHNlIGNhbiBzZXQgYSBwYWdl
IGJyZWFrIG9uY2Ugd2UgaGF2ZSBhIGZvcmNlZCBicmVhay4KLSAgICBpZiAobV9mb3JjZWRQYWdl
QnJlYWspCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZvcmNlZCBicmVha3MgYWx3YXlzIHdp
biBvdmVyIHVuZm9yY2VkIGJyZWFrcy4KLSAgICBpZiAoZm9yY2VkQnJlYWspIHsKLSAgICAgICAg
bV9mb3JjZWRQYWdlQnJlYWsgPSB0cnVlOwotICAgICAgICBtX2Jlc3RUcnVuY2F0ZWRBdCA9IHk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBQcmVmZXIgdGhlIHdpZGVzdCBvYmpl
Y3QgdGhhdCB0cmllcyB0byBtb3ZlIHRoZSBwYWdpbmF0aW9uIHBvaW50Ci0gICAgSW50UmVjdCBi
b3VuZGluZ0JveCA9IGZvclJlbmRlcmVyLT5ib3JkZXJCb3VuZGluZ0JveCgpOwotICAgIGlmIChi
b3VuZGluZ0JveC53aWR0aCgpID4gbV90cnVuY2F0b3JXaWR0aCkgewotICAgICAgICBtX3RydW5j
YXRvcldpZHRoID0gYm91bmRpbmdCb3gud2lkdGgoKTsKLSAgICAgICAgbV9iZXN0VHJ1bmNhdGVk
QXQgPSB5OwotICAgIH0KLX0KLQogdm9pZCBSZW5kZXJWaWV3OjpwdXNoTGF5b3V0U3RhdGUoUmVu
ZGVyT2JqZWN0KiByb290KQogewogICAgIEFTU0VSVChtX2xheW91dFN0YXRlRGlzYWJsZUNvdW50
ID09IDApOwpAQCAtNzIzLDYgKzY5OCwzMSBAQCB2b2lkIFJlbmRlclZpZXc6OnVwZGF0ZUhpdFRl
c3RSZXN1bHQoSGl0CiAgICAgfQogfQogCisvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBpcyBvYnNv
bGV0ZSBhbmQgb25seSB1c2VkIGJ5IGVtYmVkZGVkIFdlYlZpZXdzIGluc2lkZSBBcHBLaXQgTlNW
aWV3cy4KKy8vIERvIG5vdCBhZGQgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uIQorLy8gVGhlIGlk
ZWEgaGVyZSBpcyB0byB0YWtlIGludG8gYWNjb3VudCB3aGF0IG9iamVjdCBpcyBtb3ZpbmcgdGhl
IHBhZ2luYXRpb24gcG9pbnQsIGFuZAorLy8gdGh1cyBjaG9vc2UgdGhlIGJlc3QgcGxhY2UgdG8g
Y2hvcCBpdC4KK3ZvaWQgUmVuZGVyVmlldzo6c2V0QmVzdFRydW5jYXRlZEF0KGludCB5LCBSZW5k
ZXJCb3hNb2RlbE9iamVjdCogZm9yUmVuZGVyZXIsIGJvb2wgZm9yY2VkQnJlYWspCit7CisgICAg
Ly8gTm9ib2R5IGVsc2UgY2FuIHNldCBhIHBhZ2UgYnJlYWsgb25jZSB3ZSBoYXZlIGEgZm9yY2Vk
IGJyZWFrLgorICAgIGlmIChtX2ZvcmNlZFBhZ2VCcmVhaykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gRm9yY2VkIGJyZWFrcyBhbHdheXMgd2luIG92ZXIgdW5mb3JjZWQgYnJlYWtzLgorICAg
IGlmIChmb3JjZWRCcmVhaykgeworICAgICAgICBtX2ZvcmNlZFBhZ2VCcmVhayA9IHRydWU7Cisg
ICAgICAgIG1fYmVzdFRydW5jYXRlZEF0ID0geTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIFByZWZlciB0aGUgd2lkZXN0IG9iamVjdCB0aGF0IHRyaWVzIHRvIG1vdmUgdGhlIHBh
Z2luYXRpb24gcG9pbnQKKyAgICBJbnRSZWN0IGJvdW5kaW5nQm94ID0gZm9yUmVuZGVyZXItPmJv
cmRlckJvdW5kaW5nQm94KCk7CisgICAgaWYgKGJvdW5kaW5nQm94LndpZHRoKCkgPiBtX3RydW5j
YXRvcldpZHRoKSB7CisgICAgICAgIG1fdHJ1bmNhdG9yV2lkdGggPSBib3VuZGluZ0JveC53aWR0
aCgpOworICAgICAgICBtX2Jlc3RUcnVuY2F0ZWRBdCA9IHk7CisgICAgfQorfQorCiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogYm9vbCBSZW5kZXJWaWV3Ojp1c2VzQ29tcG9zaXRp
bmcoKSBjb25zdAogewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkocmV2aXNpb24gNjc2NzEp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3
LDE3ICs3Nyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNlbGVjdGlvblN0YXJ0RW5kKGludCYgc3Rh
cnRQb3MsIGludCYgZW5kUG9zKSBjb25zdDsKIAogICAgIGJvb2wgcHJpbnRpbmcoKSBjb25zdDsK
LSAgICB2b2lkIHNldFByaW50SW1hZ2VzKGJvb2wgZW5hYmxlKSB7IG1fcHJpbnRJbWFnZXMgPSBl
bmFibGU7IH0KLSAgICBib29sIHByaW50SW1hZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9wcmludElt
YWdlczsgfQotCi0gICAgSW50UmVjdCBwcmludFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3ByaW50
UmVjdDsgfQotICAgIHZvaWQgc2V0UHJpbnRSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsgbV9wcmlu
dFJlY3QgPSByOyB9Ci0KLSAgICB2b2lkIHNldFRydW5jYXRlZEF0KGludCB5KSB7IG1fdHJ1bmNh
dGVkQXQgPSB5OyBtX2Jlc3RUcnVuY2F0ZWRBdCA9IG1fdHJ1bmNhdG9yV2lkdGggPSAwOyBtX2Zv
cmNlZFBhZ2VCcmVhayA9IGZhbHNlOyB9Ci0gICAgdm9pZCBzZXRCZXN0VHJ1bmNhdGVkQXQoaW50
IHksIFJlbmRlckJveE1vZGVsT2JqZWN0KiBmb3JSZW5kZXJlciwgYm9vbCBmb3JjZWRCcmVhayA9
IGZhbHNlKTsKLSAgICBpbnQgYmVzdFRydW5jYXRlZEF0KCkgY29uc3QgeyByZXR1cm4gbV9iZXN0
VHJ1bmNhdGVkQXQ7IH0KLSAgICAKLSAgICBpbnQgdHJ1bmNhdGVkQXQoKSBjb25zdCB7IHJldHVy
biBtX3RydW5jYXRlZEF0OyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0
b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7CiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRl
UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mKTsKQEAgLTEyMCwyMyArMTA5LDkgQEAgcHVibGljOgog
CiAgICAgYm9vbCBkb2luZ0Z1bGxSZXBhaW50KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVZpZXct
Pm5lZWRzRnVsbFJlcGFpbnQoKTsgfQogCi0gICAgdm9pZCBwdXNoTGF5b3V0U3RhdGUoUmVuZGVy
Qm94KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0LCBpbnQgcGFnZUhlaWdodCA9IDAs
IENvbHVtbkluZm8qIGNvbEluZm8gPSAwKQotICAgIHsKLSAgICAgICAgLy8gV2UgcHVzaCBMYXlv
dXRTdGF0ZSBldmVuIGlmIGxheW91dFN0YXRlIGlzIGRpc2FibGVkIGJlY2F1c2UgaXQgc3RvcmVz
IGxheW91dERlbHRhIHRvby4KLSAgICAgICAgaWYgKCFkb2luZ0Z1bGxSZXBhaW50KCkgfHwgcmVu
ZGVyZXItPmhhc0NvbHVtbnMoKSB8fCBtX2xheW91dFN0YXRlLT5pc1BhZ2luYXRlZCgpKQotICAg
ICAgICAgICAgbV9sYXlvdXRTdGF0ZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgTGF5b3V0U3RhdGUo
bV9sYXlvdXRTdGF0ZSwgcmVuZGVyZXIsIG9mZnNldCwgcGFnZUhlaWdodCwgY29sSW5mbyk7Ci0g
ICAgfQotCisgICAgLy8gU3VidHJlZSBwdXNoL3BvcAogICAgIHZvaWQgcHVzaExheW91dFN0YXRl
KFJlbmRlck9iamVjdCopOwotCi0gICAgdm9pZCBwb3BMYXlvdXRTdGF0ZSgpCi0gICAgewotICAg
ICAgICBMYXlvdXRTdGF0ZSogc3RhdGUgPSBtX2xheW91dFN0YXRlOwotICAgICAgICBpZiAoZG9p
bmdGdWxsUmVwYWludCgpICYmICFtX2xheW91dFN0YXRlLT5pc1BhZ2luYXRlZCgpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBtX2xheW91dFN0YXRlID0gc3RhdGUtPm1fbmV4dDsKLSAg
ICAgICAgc3RhdGUtPmRlc3Ryb3kocmVuZGVyQXJlbmEoKSk7Ci0gICAgfQorICAgIHZvaWQgcG9w
TGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gcG9wTGF5b3V0U3RhdGUoKTsgfSAv
LyBKdXN0IGRvaW5nIHRoaXMgdG8ga2VlcCBwb3BMYXlvdXRTdGF0ZSgpIHByaXZhdGUgYW5kIHRv
IG1ha2UgdGhlIHN1YnRyZWUgY2FsbHMgc3ltbWV0cmljYWwuCiAKICAgICBib29sIHNob3VsZERp
c2FibGVMYXlvdXRTdGF0ZUZvclN1YnRyZWUoUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAKQEAgLTE1
Myw2ICsxMjgsMjMgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUhpdFRlc3RS
ZXN1bHQoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50Jik7CiAKKyAgICB1bnNpZ25lZCBw
YWdlSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlSGVpZ2h0OyB9CisgICAgdm9pZCBzZXRQ
YWdlSGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkgeworICAgICAgICBpZiAobV9wYWdlSGVpZ2h0ICE9
IGhlaWdodCkgeworICAgICAgICAgICAgbV9wYWdlSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICAg
ICAgbWFya0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91dCgpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gRklYTUU6IFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVwcmVjYXRlZC4gTm8g
Y29kZSBzaG91bGQgYmUgYWRkZWQgdGhhdCB1c2VzIHRoZXNlLgorICAgIGludCBiZXN0VHJ1bmNh
dGVkQXQoKSBjb25zdCB7IHJldHVybiBtX2Jlc3RUcnVuY2F0ZWRBdDsgfQorICAgIHZvaWQgc2V0
QmVzdFRydW5jYXRlZEF0KGludCB5LCBSZW5kZXJCb3hNb2RlbE9iamVjdCogZm9yUmVuZGVyZXIs
IGJvb2wgZm9yY2VkQnJlYWsgPSBmYWxzZSk7CisgICAgaW50IHRydW5jYXRlZEF0KCkgY29uc3Qg
eyByZXR1cm4gbV90cnVuY2F0ZWRBdDsgfQorICAgIHZvaWQgc2V0VHJ1bmNhdGVkQXQoaW50IHkp
IHsgbV90cnVuY2F0ZWRBdCA9IHk7IG1fYmVzdFRydW5jYXRlZEF0ID0gbV90cnVuY2F0b3JXaWR0
aCA9IDA7IG1fZm9yY2VkUGFnZUJyZWFrID0gZmFsc2U7IH0KKyAgICBjb25zdCBJbnRSZWN0JiBw
cmludFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3ByaW50UmVjdDsgfQorICAgIHZvaWQgc2V0UHJp
bnRSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsgbV9wcmludFJlY3QgPSByOyB9CisgICAgLy8gRW5k
IGRlcHJlY2F0ZWQgZnVuY3Rpb25zLgorCiAgICAgLy8gTm90aWZpY2F0aW9ucyB0aGF0IHRoaXMg
dmlldyBiZWNhbWUgdmlzaWJsZSBpbiBhIHdpbmRvdywgb3Igd2lsbCBiZQogICAgIC8vIHJlbW92
ZWQgZnJvbSB0aGUgd2luZG93LgogICAgIHZvaWQgZGlkTW92ZU9uc2NyZWVuKCk7CkBAIC0xNzMs
NiArMTY1LDI2IEBAIHByaXZhdGU6CiAgICAgaW50IGRvY0hlaWdodCgpIGNvbnN0OwogICAgIGlu
dCBkb2NXaWR0aCgpIGNvbnN0OwogCisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIG1heSBvbmx5IGJl
IGFjY2Vzc2VkIGJ5IExheW91dFN0YXRlTWFpbnRhaW5lci4KKyAgICBib29sIHB1c2hMYXlvdXRT
dGF0ZShSZW5kZXJCb3gqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBvZmZzZXQsIGludCBwYWdl
SGVpZ2h0ID0gMCwgQ29sdW1uSW5mbyogY29sSW5mbyA9IDApCisgICAgeworICAgICAgICAvLyBX
ZSBwdXNoIExheW91dFN0YXRlIGV2ZW4gaWYgbGF5b3V0U3RhdGUgaXMgZGlzYWJsZWQgYmVjYXVz
ZSBpdCBzdG9yZXMgbGF5b3V0RGVsdGEgdG9vLgorICAgICAgICBpZiAoIWRvaW5nRnVsbFJlcGFp
bnQoKSB8fCByZW5kZXJlci0+aGFzQ29sdW1ucygpIHx8IG1fbGF5b3V0U3RhdGUtPmlzUGFnaW5h
dGVkKCkpIHsKKyAgICAgICAgICAgIG1fbGF5b3V0U3RhdGUgPSBuZXcgKHJlbmRlckFyZW5hKCkp
IExheW91dFN0YXRlKG1fbGF5b3V0U3RhdGUsIHJlbmRlcmVyLCBvZmZzZXQsIHBhZ2VIZWlnaHQs
IGNvbEluZm8pOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZvaWQgcG9wTGF5b3V0U3RhdGUoKQorICAgIHsK
KyAgICAgICAgTGF5b3V0U3RhdGUqIHN0YXRlID0gbV9sYXlvdXRTdGF0ZTsKKyAgICAgICAgbV9s
YXlvdXRTdGF0ZSA9IHN0YXRlLT5tX25leHQ7CisgICAgICAgIHN0YXRlLT5kZXN0cm95KHJlbmRl
ckFyZW5hKCkpOworICAgIH0KKyAgICAKKyAgICBmcmllbmQgY2xhc3MgTGF5b3V0U3RhdGVNYWlu
dGFpbmVyOworICAgICAgICAKIHByb3RlY3RlZDoKICAgICBGcmFtZVZpZXcqIG1fZnJhbWVWaWV3
OwogCkBAIC0xODEsMjEgKzE5MywyMSBAQCBwcm90ZWN0ZWQ6CiAgICAgaW50IG1fc2VsZWN0aW9u
U3RhcnRQb3M7CiAgICAgaW50IG1fc2VsZWN0aW9uRW5kUG9zOwogCi0gICAgLy8gdXNlZCB0byBp
Z25vcmUgdmlld3BvcnQgd2lkdGggd2hlbiBwcmludGluZyB0byB0aGUgcHJpbnRlcgotICAgIGJv
b2wgbV9wcmludEltYWdlczsKKyAgICAvLyBGSVhNRTogT25seSB1c2VkIGJ5IGVtYmVkZGVkIFdl
YlZpZXdzIGluc2lkZSBBcHBLaXQgTlNWaWV3cy4gIEZpbmQgYSB3YXkgdG8gcmVtb3ZlLgorICAg
IGludCBtX2Jlc3RUcnVuY2F0ZWRBdDsKICAgICBpbnQgbV90cnVuY2F0ZWRBdDsKKyAgICBpbnQg
bV90cnVuY2F0b3JXaWR0aDsKKyAgICBJbnRSZWN0IG1fcHJpbnRSZWN0OworICAgIGJvb2wgbV9m
b3JjZWRQYWdlQnJlYWs7CisgICAgLy8gRW5kIGRlcHJlY2F0ZWQgbWVtYmVycy4KIAogICAgIGlu
dCBtX21heGltYWxPdXRsaW5lU2l6ZTsgLy8gVXNlZCB0byBhcHBseSBhIGZ1ZGdlIGZhY3RvciB0
byBkaXJ0eS1yZWN0IGNoZWNrcyBvbiBibG9ja3MvdGFibGVzLgotICAgIEludFJlY3QgbV9wcmlu
dFJlY3Q7IC8vIFVzZWQgd2hlbiBwcmludGluZy4KIAogICAgIHR5cGVkZWYgSGFzaFNldDxSZW5k
ZXJXaWRnZXQqPiBSZW5kZXJXaWRnZXRTZXQ7Ci0KICAgICBSZW5kZXJXaWRnZXRTZXQgbV93aWRn
ZXRzOwotCisgICAgCiBwcml2YXRlOgotICAgIGludCBtX2Jlc3RUcnVuY2F0ZWRBdDsKLSAgICBp
bnQgbV90cnVuY2F0b3JXaWR0aDsKLSAgICBib29sIG1fZm9yY2VkUGFnZUJyZWFrOworICAgIHVu
c2lnbmVkIG1fcGFnZUhlaWdodDsKICAgICBMYXlvdXRTdGF0ZSogbV9sYXlvdXRTdGF0ZTsKICAg
ICB1bnNpZ25lZCBtX2xheW91dFN0YXRlRGlzYWJsZUNvdW50OwogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKQEAgLTIyOCw2ICsyNDAsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9k
aXNhYmxlZChkaXNhYmxlU3RhdGUpCiAgICAgICAgICwgbV9kaWRTdGFydChmYWxzZSkKICAgICAg
ICAgLCBtX2RpZEVuZChmYWxzZSkKKyAgICAgICAgLCBtX2RpZENyZWF0ZUxheW91dFN0YXRlKGZh
bHNlKQogICAgIHsKICAgICAgICAgcHVzaChyb290LCBvZmZzZXQsIHBhZ2VIZWlnaHQsIGNvbElu
Zm8pOwogICAgIH0KQEAgLTIzOCw2ICsyNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9kaXNh
YmxlZChmYWxzZSkKICAgICAgICAgLCBtX2RpZFN0YXJ0KGZhbHNlKQogICAgICAgICAsIG1fZGlk
RW5kKGZhbHNlKQorICAgICAgICAsIG1fZGlkQ3JlYXRlTGF5b3V0U3RhdGUoZmFsc2UpCiAgICAg
ewogICAgIH0KICAgICAKQEAgLTI1MCw4ICsyNjQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBBU1NFUlQoIW1fZGlkU3RhcnQpOwogICAgICAgICAvLyBXZSBwdXNoIHN0YXRlIGV2ZW4gaWYg
ZGlzYWJsZWQsIGJlY2F1c2Ugd2Ugc3RpbGwgbmVlZCB0byBzdG9yZSBsYXlvdXREZWx0YQotICAg
ICAgICBtX3ZpZXctPnB1c2hMYXlvdXRTdGF0ZShyb290LCBvZmZzZXQsIHBhZ2VIZWlnaHQsIGNv
bEluZm8pOwotICAgICAgICBpZiAobV9kaXNhYmxlZCkKKyAgICAgICAgbV9kaWRDcmVhdGVMYXlv
dXRTdGF0ZSA9IG1fdmlldy0+cHVzaExheW91dFN0YXRlKHJvb3QsIG9mZnNldCwgcGFnZUhlaWdo
dCwgY29sSW5mbyk7CisgICAgICAgIGlmIChtX2Rpc2FibGVkICYmIG1fZGlkQ3JlYXRlTGF5b3V0
U3RhdGUpCiAgICAgICAgICAgICBtX3ZpZXctPmRpc2FibGVMYXlvdXRTdGF0ZSgpOwogICAgICAg
ICBtX2RpZFN0YXJ0ID0gdHJ1ZTsKICAgICB9CkBAIC0yNjAsOSArMjc0LDEyIEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIGlmIChtX2RpZFN0YXJ0KSB7CiAgICAgICAgICAgICBBU1NFUlQoIW1f
ZGlkRW5kKTsKLSAgICAgICAgICAgIG1fdmlldy0+cG9wTGF5b3V0U3RhdGUoKTsKLSAgICAgICAg
ICAgIGlmIChtX2Rpc2FibGVkKQotICAgICAgICAgICAgICAgIG1fdmlldy0+ZW5hYmxlTGF5b3V0
U3RhdGUoKTsKKyAgICAgICAgICAgIGlmIChtX2RpZENyZWF0ZUxheW91dFN0YXRlKSB7CisgICAg
ICAgICAgICAgICAgbV92aWV3LT5wb3BMYXlvdXRTdGF0ZSgpOworICAgICAgICAgICAgICAgIGlm
IChtX2Rpc2FibGVkKQorICAgICAgICAgICAgICAgICAgICBtX3ZpZXctPmVuYWJsZUxheW91dFN0
YXRlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIG1fZGlkRW5k
ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTI3NCw2ICsyOTEsNyBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbV9kaXNhYmxlZCA6IDE7ICAgICAgICAvLyB0cnVlIGlmIHRoZSBvZmZzZXQgYW5k
IGNsaXAgcGFydCBvZiBsYXlvdXRTdGF0ZSBpcyBkaXNhYmxlZAogICAgIGJvb2wgbV9kaWRTdGFy
dCA6IDE7ICAgICAgICAvLyB0cnVlIGlmIHdlIGRpZCBhIHB1c2ggb3IgZGlzYWJsZQogICAgIGJv
b2wgbV9kaWRFbmQgOiAxOyAgICAgICAgICAvLyB0cnVlIGlmIHdlIHBvcHBlZCBvciByZS1lbmFi
bGVkCisgICAgYm9vbCBtX2RpZENyZWF0ZUxheW91dFN0YXRlOyAvLyB0cnVlIGlmIHdlIGFjdHVh
bGx5IG1hZGUgYSBsYXlvdXQgc3RhdGUuCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67944</attachid>
            <date>2010-09-17 13:45:19 -0700</date>
            <delta_ts>2010-09-17 14:58:16 -0700</delta_ts>
            <desc>Fix style issue.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>25368</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Nzc0MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTAtMDktMTcgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTk5MywgY29udmVydCBwcmludGlu
ZyB0byB0aGUgbmV3IHBhZ2luYXRpb24gbW9kZWwuCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmll
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnJlc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6
Zm9yY2VMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpmb3JjZUxheW91dEZv
clBhZ2luYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGp1c3RQYWdlSGVp
Z2h0KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAgICAgICAqIHBhZ2UvUHJpbnRD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByaW50Q29udGV4dDo6Y29tcHV0ZVBhZ2VS
ZWN0c1dpdGhQYWdlU2l6ZUludGVybmFsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4pOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpjYWxjSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50UmVwbGFjZWQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMaW5lQm94TGlzdDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWRl
by5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWRlbzo6cGFpbnRSZXBsYWNlZCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVmlldzo6UmVuZGVyVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpsYXlv
dXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVmlldzo6c2V0QmVzdFRydW5jYXRlZEF0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVmlldy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cG9wTGF5b3V0
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cGFnZUhlaWdodCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzZXRQYWdlSGVpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclZpZXc6OmJlc3RUcnVuY2F0ZWRBdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJWaWV3Ojp0cnVuY2F0ZWRBdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzZXRU
cnVuY2F0ZWRBdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpwcmludFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6c2V0UHJpbnRSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclZpZXc6OnB1c2hMYXlvdXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXRTdGF0ZU1haW50YWluZXI6OkxheW91dFN0YXRlTWFpbnRhaW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXRTdGF0ZU1haW50YWluZXI6OnB1c2gpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0U3RhdGVNYWludGFpbmVyOjpwb3ApOgorCiAyMDEwLTA5LTE3ICBMdWNhcyBEZSBNYXJj
aGkgIDxsdWNhcy5kZW1hcmNoaUBwcm9mdXNpb24ubW9iaT4KIAogICAgICAgICBVbnJldmlld2Vk
LCBidWlsZCBmaXguIEFkZCBmaWxlcyBtaXNzZWQgaW4gcjY3NzA0LgpJbmRleDogV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAJKHJldmlzaW9uIDY3NjcxKQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzMCw3ICsyMzAsNiBAQCB2b2lkIEZyYW1lVmlldzo6cmVzZXQoKQogICAg
IG1fd2FzU2Nyb2xsZWRCeVVzZXIgPSBmYWxzZTsKICAgICBtX2xhc3RMYXlvdXRTaXplID0gSW50
U2l6ZSgpOwogICAgIG1fbGFzdFpvb21GYWN0b3IgPSAxLjBmOwotICAgIG1fcGFnZUhlaWdodCA9
IDA7CiAgICAgbV9kZWZlcnJpbmdSZXBhaW50cyA9IDA7CiAgICAgbV9yZXBhaW50Q291bnQgPSAw
OwogICAgIG1fcmVwYWludFJlY3RzLmNsZWFyKCk7CkBAIC03OTUsNyArNzk0LDcgQEAgdm9pZCBG
cmFtZVZpZXc6OmxheW91dChib29sIGFsbG93U3VidHJlZQogCiAgICAgaWYgKHN1YnRyZWUpIHsK
ICAgICAgICAgUmVuZGVyVmlldyogdmlldyA9IHJvb3QtPnZpZXcoKTsKLSAgICAgICAgdmlldy0+
cG9wTGF5b3V0U3RhdGUoKTsKKyAgICAgICAgdmlldy0+cG9wTGF5b3V0U3RhdGUocm9vdCk7CiAg
ICAgICAgIGlmIChkaXNhYmxlTGF5b3V0U3RhdGUpCiAgICAgICAgICAgICB2aWV3LT5lbmFibGVM
YXlvdXRTdGF0ZSgpOwogICAgIH0KQEAgLTIxMDEsMTIgKzIxMDAsNiBAQCB2b2lkIEZyYW1lVmll
dzo6Zmx1c2hEZWZlcnJlZFJlcGFpbnRzKCkKIHZvaWQgRnJhbWVWaWV3Ojpmb3JjZUxheW91dChi
b29sIGFsbG93U3VidHJlZSkKIHsKICAgICBsYXlvdXQoYWxsb3dTdWJ0cmVlKTsKLSAgICAvLyBX
ZSBjYW5ub3QgdW5zY2hlZHVsZSBhIHBlbmRpbmcgcmVsYXlvdXQsIHNpbmNlIHRoZSBmb3JjZSBj
YW4gYmUgY2FsbGVkIHdpdGgKLSAgICAvLyBhIHRpbnkgcmVjdGFuZ2xlIGZyb20gYSBkcmF3UmVj
dCB1cGRhdGUuICBCeSB1bnNjaGVkdWxpbmcgd2UgaW4gZWZmZWN0Ci0gICAgLy8gInZhbGlkYXRl
IiBhbmQgc3RvcCB0aGUgbmVjZXNzYXJ5IGZ1bGwgcmVwYWludCBmcm9tIG9jY3VycmluZy4gIEJh
c2ljYWxseSBhbnkgYmFzaWMKLSAgICAvLyBhcHBlbmQvcmVtb3ZlIERIVE1MIGlzIGJyb2tlbiBi
eSB0aGlzIGNhbGwuICBGb3Igbm93LCBJIGhhdmUgcmVtb3ZlZCB0aGUgb3B0aW1pemF0aW9uCi0g
ICAgLy8gdW50aWwgd2UgaGF2ZSBhIGJldHRlciBpbnZhbGlkYXRpb24gc3RhdGVneS4gLWR3aAot
ICAgIC8vdW5zY2hlZHVsZVJlbGF5b3V0KCk7CiB9CiAKIHZvaWQgRnJhbWVWaWV3Ojpmb3JjZUxh
eW91dEZvclBhZ2luYXRpb24oY29uc3QgRmxvYXRTaXplJiBwYWdlU2l6ZSwgZmxvYXQgbWF4aW11
bVNocmlua0ZhY3RvciwgRnJhbWU6OkFkanVzdFZpZXdTaXplT3JOb3Qgc2hvdWxkQWRqdXN0Vmll
d1NpemUpCkBAIC0yMTE2LDggKzIxMDksOCBAQCB2b2lkIEZyYW1lVmlldzo6Zm9yY2VMYXlvdXRG
b3JQYWdpbmF0aW9uCiAgICAgUmVuZGVyVmlldyAqcm9vdCA9IHRvUmVuZGVyVmlldyhtX2ZyYW1l
LT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKTsKICAgICBpZiAocm9vdCkgewogICAgICAgICBpbnQg
cGFnZVcgPSBjZWlsZihwYWdlU2l6ZS53aWR0aCgpKTsKLSAgICAgICAgbV9wYWdlSGVpZ2h0ID0g
cGFnZVNpemUuaGVpZ2h0KCkgPyBwYWdlU2l6ZS5oZWlnaHQoKSA6IHZpc2libGVIZWlnaHQoKTsK
ICAgICAgICAgcm9vdC0+c2V0V2lkdGgocGFnZVcpOworICAgICAgICByb290LT5zZXRQYWdlSGVp
Z2h0KHBhZ2VTaXplLmhlaWdodCgpKTsKICAgICAgICAgcm9vdC0+c2V0TmVlZHNMYXlvdXRBbmRQ
cmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAgIGZvcmNlTGF5b3V0KCk7CiAKQEAgLTIxMjksNyAr
MjEyMiw3IEBAIHZvaWQgRnJhbWVWaWV3Ojpmb3JjZUxheW91dEZvclBhZ2luYXRpb24KICAgICAg
ICAgaWYgKHJpZ2h0bW9zdFBvcyA+IHBhZ2VTaXplLndpZHRoKCkpIHsKICAgICAgICAgICAgIHBh
Z2VXID0gc3RkOjptaW48aW50PihyaWdodG1vc3RQb3MsIGNlaWxmKHBhZ2VTaXplLndpZHRoKCkg
KiBtYXhpbXVtU2hyaW5rRmFjdG9yKSk7CiAgICAgICAgICAgICBpZiAocGFnZVNpemUuaGVpZ2h0
KCkpCi0gICAgICAgICAgICAgICAgbV9wYWdlSGVpZ2h0ID0gcGFnZVcgLyBwYWdlU2l6ZS53aWR0
aCgpICogcGFnZVNpemUuaGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgcm9vdC0+c2V0UGFnZUhl
aWdodChwYWdlVyAvIHBhZ2VTaXplLndpZHRoKCkgKiBwYWdlU2l6ZS5oZWlnaHQoKSk7CiAgICAg
ICAgICAgICByb290LT5zZXRXaWR0aChwYWdlVyk7CiAgICAgICAgICAgICByb290LT5zZXROZWVk
c0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICAgICAgICAgIGZvcmNlTGF5b3V0KCk7
CkBAIC0yMTM4LDcgKzIxMzEsNiBAQCB2b2lkIEZyYW1lVmlldzo6Zm9yY2VMYXlvdXRGb3JQYWdp
bmF0aW9uCiAKICAgICBpZiAoc2hvdWxkQWRqdXN0Vmlld1NpemUpCiAgICAgICAgIGFkanVzdFZp
ZXdTaXplKCk7Ci0gICAgbV9wYWdlSGVpZ2h0ID0gMDsKIH0KIAogdm9pZCBGcmFtZVZpZXc6OmFk
anVzdFBhZ2VIZWlnaHQoZmxvYXQgKm5ld0JvdHRvbSwgZmxvYXQgb2xkVG9wLCBmbG9hdCBvbGRC
b3R0b20sIGZsb2F0IC8qYm90dG9tTGltaXQqLykKQEAgLTIxNDksMTAgKzIxNDEsMTIgQEAgdm9p
ZCBGcmFtZVZpZXc6OmFkanVzdFBhZ2VIZWlnaHQoZmxvYXQgKgogICAgICAgICBHcmFwaGljc0Nv
bnRleHQgY29udGV4dCgoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqKTApOwogICAgICAgICByb290
LT5zZXRUcnVuY2F0ZWRBdCgoaW50KWZsb29yZihvbGRCb3R0b20pKTsKICAgICAgICAgSW50UmVj
dCBkaXJ0eVJlY3QoMCwgKGludClmbG9vcmYob2xkVG9wKSwgcm9vdC0+cmlnaHRMYXlvdXRPdmVy
ZmxvdygpLCAoaW50KWNlaWxmKG9sZEJvdHRvbSAtIG9sZFRvcCkpOworICAgICAgICByb290LT5z
ZXRQcmludFJlY3QoZGlydHlSZWN0KTsKICAgICAgICAgcm9vdC0+bGF5ZXIoKS0+cGFpbnQoJmNv
bnRleHQsIGRpcnR5UmVjdCk7CiAgICAgICAgICpuZXdCb3R0b20gPSByb290LT5iZXN0VHJ1bmNh
dGVkQXQoKTsKICAgICAgICAgaWYgKCpuZXdCb3R0b20gPT0gMCkKICAgICAgICAgICAgICpuZXdC
b3R0b20gPSBvbGRCb3R0b207CisgICAgICAgIHJvb3QtPnNldFByaW50UmVjdChJbnRSZWN0KCkp
OwogICAgIH0gZWxzZQogICAgICAgICAqbmV3Qm90dG9tID0gb2xkQm90dG9tOwogfQpJbmRleDog
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuaAkocmV2aXNpb24gNjc2NzEpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwMCw4ICsyMDAsMjMgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3Jj
ZUxheW91dChib29sIGFsbG93U3VidHJlZSA9IGZhbHNlKTsKICAgICB2b2lkIGZvcmNlTGF5b3V0
Rm9yUGFnaW5hdGlvbihjb25zdCBGbG9hdFNpemUmIHBhZ2VTaXplLCBmbG9hdCBtYXhpbXVtU2hy
aW5rRmFjdG9yLCBGcmFtZTo6QWRqdXN0Vmlld1NpemVPck5vdCk7Ci0gICAgaW50IHBhZ2VIZWln
aHQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VIZWlnaHQ7IH0KIAorICAgIC8vIEZJWE1FOiBUaGlz
IG1ldGhvZCBpcyByZXRhaW5lZCBiZWNhdXNlIG9mIGVtYmVkZGVkIFdlYlZpZXdzIGluIEFwcEtp
dC4gIFdoZW4gYSBXZWJWaWV3IGlzIGVtYmVkZGVkIGluc2lkZQorICAgIC8vIHNvbWUgZW5jbG9z
aW5nIHZpZXcgd2l0aCBhdXRvLXBhZ2luYXRpb24sIG5vIGNhbGwgaGFwcGVucyB0byByZXNpemUg
dGhlIHZpZXcuICBUaGUgbmV3IHBhZ2luYXRpb24gbW9kZWwKKyAgICAvLyBuZWVkcyB0aGUgdmll
dyB0byByZXNpemUgYXMgYSByZXN1bHQgb2YgdGhlIGJyZWFrcywgYnV0IHRoYXQgbWVhbnMgdGhh
dCB0aGUgZW5jbG9zaW5nIHZpZXcgaGFzIHRvIHBvdGVudGlhbGx5CisgICAgLy8gcmVzaXplIGFy
b3VuZCB0aGF0IHZpZXcuICBBdXRvLXBhZ2luYXRpb24gdXNlcyB0aGUgYm91bmRzIG9mIHRoZSBh
Y3R1YWwgdmlldyB0aGF0J3MgYmVpbmcgcHJpbnRlZCB0byBkZXRlcm1pbmUKKyAgICAvLyB0aGUg
ZWRnZXMgb2YgdGhlIHByaW50IG9wZXJhdGlvbiwgc28gdGhlIHJlc2l6ZSBpcyBuZWNlc3Nhcnkg
aWYgdGhlIGVuY2xvc2luZyB2aWV3J3MgYm91bmRzIGRlcGVuZCBvbiB0aGUKKyAgICAvLyB3ZWIg
ZG9jdW1lbnQncyBib3VuZHMuCisgICAgLy8gCisgICAgLy8gVGhpcyBpcyBhbHJlYWR5IGEgcHJv
YmxlbSBpZiB0aGUgdmlldyBuZWVkcyB0byBiZSBhIGRpZmZlcmVudCBzaXplIGJlY2F1c2Ugb2Yg
cHJpbnRlciBmb250cyBvciBiZWNhdXNlIG9mIHByaW50IHN0eWxlc2hlZXRzLgorICAgIC8vIE1h
aWwvRGljdGlvbmFyeSB3b3JrIGFyb3VuZCB0aGlzIHByb2JsZW0gYnkgdXNpbmcgdGhlIF9sYXlv
dXRGb3JQcmludGluZyBTUEkKKyAgICAvLyB0byBhdCBsZWFzdCBnZXQgcHJpbnQgc3R5bGVzaGVl
dHMgYW5kIHByaW50ZXIgZm9udHMgaW50byBwbGF5LCBidXQgc2luY2UgV2ViS2l0IGRvZXNuJ3Qg
a25vdyBhYm91dCB0aGUgcGFnZSBvZmZzZXQgb3IKKyAgICAvLyBwYWdlIHNpemUsIGl0IGNhbid0
IGFjdHVhbGx5IHBhZ2luYXRlIGNvcnJlY3RseSBkdXJpbmcgX2xheW91dEZvclByaW50aW5nLgor
ICAgIC8vCisgICAgLy8gV2UgY2FuIGV2ZW50dWFsbHkgbW92ZSBNYWlsIHRvIGEgbmV3ZXIgU1BJ
IHRoYXQgd291bGQgbGV0IHRoZW0gb3B0IGluIHRvIHRoZSBsYXlvdXQtdGltZSBwYWdpbmF0aW9u
IG1vZGVsLAorICAgIC8vIGJ1dCB0aGF0IGRvZXNuJ3Qgc29sdmUgdGhlIGdlbmVyYWwgcHJvYmxl
bSBvZiBob3cgb3RoZXIgQXBwS2l0IHZpZXdzIGNvdWxkIG9wdCBpbiB0byB0aGUgYmV0dGVyIG1v
ZGVsLgorICAgIC8vCisgICAgLy8gTk8gT1RIRVIgUExBVEZPUk0gQkVTSURFUyBNQUMgU0hPVUxE
IFVTRSBUSElTIE1FVEhPRC4KICAgICB2b2lkIGFkanVzdFBhZ2VIZWlnaHQoZmxvYXQqIG5ld0Jv
dHRvbSwgZmxvYXQgb2xkVG9wLCBmbG9hdCBvbGRCb3R0b20sIGZsb2F0IGJvdHRvbUxpbWl0KTsK
IAogICAgIGJvb2wgc2Nyb2xsVG9GcmFnbWVudChjb25zdCBLVVJMJik7CkBAIC0zMzYsOCArMzUx
LDYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9tZWRpYVR5cGU7CiAgICAgU3RyaW5nIG1fbWVk
aWFUeXBlV2hlbk5vdFByaW50aW5nOwogCi0gICAgaW50IG1fcGFnZUhlaWdodDsKLQogICAgIHVu
c2lnbmVkIG1fZW5xdWV1ZUV2ZW50czsKICAgICBWZWN0b3I8U2NoZWR1bGVkRXZlbnQqPiBtX3Nj
aGVkdWxlZEV2ZW50czsKICAgICAKSW5kZXg6IFdlYkNvcmUvcGFnZS9QcmludENvbnRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QcmludENvbnRleHQuY3BwCShyZXZpc2lvbiA2
NzY3MSkKKysrIFdlYkNvcmUvcGFnZS9QcmludENvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05NSwyNiArOTUsMjIgQEAgdm9pZCBQcmludENvbnRleHQ6OmNvbXB1dGVQYWdlUmVjdHNXaXRo
UAogewogICAgIGlmICghbV9mcmFtZS0+ZG9jdW1lbnQoKSB8fCAhbV9mcmFtZS0+dmlldygpIHx8
ICFtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CisKICAg
ICBSZW5kZXJWaWV3KiByb290ID0gdG9SZW5kZXJWaWV3KG1fZnJhbWUtPmRvY3VtZW50KCktPnJl
bmRlcmVyKCkpOwogCi0gICAgY29uc3QgZmxvYXQgcGFnZVdpZHRoID0gcGFnZVNpemVJblBpeGVs
cy53aWR0aCgpOwotICAgIGNvbnN0IGZsb2F0IGRvY1dpZHRoID0gcm9vdC0+bGF5ZXIoKS0+d2lk
dGgoKTsKLSAgICBjb25zdCBmbG9hdCBkb2NIZWlnaHQgPSByb290LT5sYXllcigpLT5oZWlnaHQo
KTsKLSAgICBmbG9hdCBjdXJyUGFnZUhlaWdodCA9IHBhZ2VTaXplSW5QaXhlbHMuaGVpZ2h0KCk7
Ci0KLSAgICAvLyBhbHdheXMgcmV0dXJuIGF0IGxlYXN0IG9uZSBwYWdlLCBzaW5jZSBlbXB0eSBm
aWxlcyBzaG91bGQgcHJpbnQgYSBibGFuayBwYWdlCi0gICAgZmxvYXQgcHJpbnRlZFBhZ2VzSGVp
Z2h0ID0gMDsKLSAgICBkbyB7Ci0gICAgICAgIGZsb2F0IHByb3Bvc2VkQm90dG9tID0gc3RkOjpt
aW4oZG9jSGVpZ2h0LCBwcmludGVkUGFnZXNIZWlnaHQgKyBwYWdlU2l6ZUluUGl4ZWxzLmhlaWdo
dCgpKTsKLSAgICAgICAgbV9mcmFtZS0+dmlldygpLT5hZGp1c3RQYWdlSGVpZ2h0KCZwcm9wb3Nl
ZEJvdHRvbSwgcHJpbnRlZFBhZ2VzSGVpZ2h0LCBwcm9wb3NlZEJvdHRvbSwgcHJpbnRlZFBhZ2Vz
SGVpZ2h0KTsKLSAgICAgICAgY3VyclBhZ2VIZWlnaHQgPSBtYXgoMS4wZiwgcHJvcG9zZWRCb3R0
b20gLSBwcmludGVkUGFnZXNIZWlnaHQpOworICAgIGludCBkb2NXaWR0aCA9IHJvb3QtPmxheWVy
KCktPndpZHRoKCk7CisgICAgaW50IGRvY0hlaWdodCA9IHJvb3QtPmxheWVyKCktPmhlaWdodCgp
OworICAgIGludCBwYWdlV2lkdGggPSBwYWdlU2l6ZUluUGl4ZWxzLndpZHRoKCk7CisgICAgaW50
IHBhZ2VIZWlnaHQgPSBwYWdlU2l6ZUluUGl4ZWxzLmhlaWdodCgpOworCisgICAgdW5zaWduZWQg
cGFnZUNvdW50ID0gY2VpbGYoKGZsb2F0KWRvY0hlaWdodCAvIHBhZ2VIZWlnaHQpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYWdlQ291bnQ7ICsraSkgewogICAgICAgICBpZiAoYWxs
b3dIb3Jpem9udGFsTXVsdGlQYWdlcykgewotICAgICAgICAgICAgZm9yIChmbG9hdCBjdXJXaWR0
aCA9IDA7IGN1cldpZHRoIDwgZG9jV2lkdGg7IGN1cldpZHRoICs9IHBhZ2VXaWR0aCkKLSAgICAg
ICAgICAgICAgICBtX3BhZ2VSZWN0cy5hcHBlbmQoSW50UmVjdChjdXJXaWR0aCwgKGludClwcmlu
dGVkUGFnZXNIZWlnaHQsIChpbnQpcGFnZVdpZHRoLCAoaW50KWN1cnJQYWdlSGVpZ2h0KSk7Cisg
ICAgICAgICAgICBmb3IgKGludCBjdXJyV2lkdGggPSAwOyBjdXJyV2lkdGggPCBkb2NXaWR0aDsg
Y3VycldpZHRoICs9IHBhZ2VXaWR0aCkKKyAgICAgICAgICAgICAgICBtX3BhZ2VSZWN0cy5hcHBl
bmQoSW50UmVjdChjdXJyV2lkdGgsIGkgKiBwYWdlSGVpZ2h0LCBwYWdlV2lkdGgsIHBhZ2VIZWln
aHQpKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3BhZ2VSZWN0cy5hcHBlbmQoSW50
UmVjdCgwLCAoaW50KXByaW50ZWRQYWdlc0hlaWdodCwgKGludClwYWdlV2lkdGgsIChpbnQpY3Vy
clBhZ2VIZWlnaHQpKTsKLSAgICAgICAgcHJpbnRlZFBhZ2VzSGVpZ2h0ICs9IGN1cnJQYWdlSGVp
Z2h0OwotICAgIH0gd2hpbGUgKHByaW50ZWRQYWdlc0hlaWdodCA8IGRvY0hlaWdodCk7CisgICAg
ICAgICAgICBtX3BhZ2VSZWN0cy5hcHBlbmQoSW50UmVjdCgwLCBpICogcGFnZUhlaWdodCwgcGFn
ZVdpZHRoLCBwYWdlSGVpZ2h0KSk7CisgICAgfQogfQogCiB2b2lkIFByaW50Q29udGV4dDo6YmVn
aW4oZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAJKHJldmlzaW9uIDY3NjczKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjA4LDE0ICsyMjA4LDE0IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmYKICAgICBpbmZvLnBoYXNlID0gbmV3UGhhc2U7CiAg
ICAgaW5mby51cGRhdGVQYWludGluZ1Jvb3RGb3JDaGlsZHJlbih0aGlzKTsKICAgICAKKyAgICAv
LyBGSVhNRTogUGFpbnQtdGltZSBwYWdpbmF0aW9uIGlzIG9ic29sZXRlIGFuZCBpcyBub3cgb25s
eSB1c2VkIGJ5IGVtYmVkZGVkIFdlYlZpZXdzIGluc2lkZSBBcHBLaXQKKyAgICAvLyBOU1ZpZXdz
LiAgRG8gbm90IGFkZCBhbnkgbW9yZSBjb2RlIGZvciB0aGlzLgogICAgIFJlbmRlclZpZXcqIHJl
bmRlclZpZXcgPSB2aWV3KCk7CiAgICAgYm9vbCB1c2VQcmludFJlY3QgPSAhcmVuZGVyVmlldy0+
cHJpbnRSZWN0KCkuaXNFbXB0eSgpOwogICAgIAotICAgIGJvb2wgY2hlY2tQYWdlQnJlYWtzID0g
ZG9jdW1lbnQoKS0+cGFnaW5hdGVkKCkgJiYgIWRvY3VtZW50KCktPnNldHRpbmdzKCktPnBhZ2lu
YXRlRHVyaW5nTGF5b3V0RW5hYmxlZCgpOwotCiAgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0g
Zmlyc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkg
eyAgICAgICAgCiAgICAgICAgIC8vIENoZWNrIGZvciBwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlz
LCBhbmQgaWYgaXQncyBzZXQsIGJyZWFrIGFuZCBiYWlsLgotICAgICAgICBib29sIGNoZWNrQmVm
b3JlQWx3YXlzID0gIWNoaWxkcmVuSW5saW5lKCkgJiYgKGNoZWNrUGFnZUJyZWFrcyAmJiBjaGls
ZC0+c3R5bGUoKS0+cGFnZUJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMpOworICAgICAgICBib29s
IGNoZWNrQmVmb3JlQWx3YXlzID0gIWNoaWxkcmVuSW5saW5lKCkgJiYgKHVzZVByaW50UmVjdCAm
JiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMpOwogICAgICAg
ICBpZiAoY2hlY2tCZWZvcmVBbHdheXMKICAgICAgICAgICAgICYmICh0eSArIGNoaWxkLT55KCkp
ID4gcGFpbnRJbmZvLnJlY3QueSgpCiAgICAgICAgICAgICAmJiAodHkgKyBjaGlsZC0+eSgpKSA8
IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpKSB7CkBAIC0yMjM4LDcgKzIyMzgsNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjpwYWludENoaWxkcmVuKFBhaW50SW5mCiAgICAgICAgICAgICBjaGlsZC0+cGFp
bnQoaW5mbywgdHgsIHR5KTsKIAogICAgICAgICAvLyBDaGVjayBmb3IgcGFnZS1icmVhay1hZnRl
cjogYWx3YXlzLCBhbmQgaWYgaXQncyBzZXQsIGJyZWFrIGFuZCBiYWlsLgotICAgICAgICBib29s
IGNoZWNrQWZ0ZXJBbHdheXMgPSAhY2hpbGRyZW5JbmxpbmUoKSAmJiAoY2hlY2tQYWdlQnJlYWtz
ICYmIGNoaWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtBZnRlcigpID09IFBCQUxXQVlTKTsKKyAgICAg
ICAgYm9vbCBjaGVja0FmdGVyQWx3YXlzID0gIWNoaWxkcmVuSW5saW5lKCkgJiYgKHVzZVByaW50
UmVjdCAmJiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFrQWZ0ZXIoKSA9PSBQQkFMV0FZUyk7CiAg
ICAgICAgIGlmIChjaGVja0FmdGVyQWx3YXlzCiAgICAgICAgICAgICAmJiAodHkgKyBjaGlsZC0+
eSgpICsgY2hpbGQtPmhlaWdodCgpKSA+IHBhaW50SW5mby5yZWN0LnkoKQogICAgICAgICAgICAg
JiYgKHR5ICsgY2hpbGQtPnkoKSArIGNoaWxkLT5oZWlnaHQoKSkgPCBwYWludEluZm8ucmVjdC5i
b3R0b20oKSkgewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiA2NzY3MSkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
MTUsMTEgKzE1MTUsMTEgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNIZWlnaHQoKQogICAgIC8vIGlz
IHNwZWNpZmllZC4gV2hlbiB3ZSdyZSBwcmludGluZywgd2UgYWxzbyBuZWVkIHRoaXMgcXVpcmsg
aWYgdGhlIGJvZHkgb3Igcm9vdCBoYXMgYSBwZXJjZW50YWdlIAogICAgIC8vIGhlaWdodCBzaW5j
ZSB3ZSBkb24ndCBzZXQgYSBoZWlnaHQgaW4gUmVuZGVyVmlldyB3aGVuIHdlJ3JlIHByaW50aW5n
LiBTbyB3aXRob3V0IHRoaXMgcXVpcmssIHRoZSAKICAgICAvLyBoZWlnaHQgaGFzIG5vdGhpbmcg
dG8gYmUgYSBwZXJjZW50YWdlIG9mLCBhbmQgaXQgZW5kcyB1cCBiZWluZyAwLiBUaGF0IGlzIGJh
ZC4KLSAgICBib29sIHBhZ2luYXRlZENvbnRlbnROZWVkc0Jhc2VIZWlnaHQgPSBkb2N1bWVudCgp
LT5wYWdpbmF0ZWQoKSAmJiBoLmlzUGVyY2VudCgpCisgICAgYm9vbCBwYWdpbmF0ZWRDb250ZW50
TmVlZHNCYXNlSGVpZ2h0ID0gZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSAmJiBoLmlzUGVyY2VudCgp
CiAgICAgICAgICYmIChpc1Jvb3QoKSB8fCAoaXNCb2R5KCkgJiYgZG9jdW1lbnQoKS0+ZG9jdW1l
bnRFbGVtZW50KCktPnJlbmRlcmVyKCktPnN0eWxlKCktPmhlaWdodCgpLmlzUGVyY2VudCgpKSk7
CiAgICAgaWYgKHN0cmV0Y2hlc1RvVmlld0hlaWdodCgpIHx8IHBhZ2luYXRlZENvbnRlbnROZWVk
c0Jhc2VIZWlnaHQpIHsKICAgICAgICAgaW50IG1hcmdpbnMgPSBjb2xsYXBzZWRNYXJnaW5Ub3Ao
KSArIGNvbGxhcHNlZE1hcmdpbkJvdHRvbSgpOwotICAgICAgICBpbnQgdmlzSGVpZ2h0ID0gZG9j
dW1lbnQoKS0+cHJpbnRpbmcoKSA/IHZpZXcoKS0+ZnJhbWVWaWV3KCktPnBhZ2VIZWlnaHQoKSA6
IHZpZXcoKS0+dmlld0hlaWdodCgpOworICAgICAgICBpbnQgdmlzSGVpZ2h0ID0gZG9jdW1lbnQo
KS0+cHJpbnRpbmcoKSA/IHZpZXcoKS0+cGFnZUhlaWdodCgpIDogdmlldygpLT52aWV3SGVpZ2h0
KCk7CiAgICAgICAgIGlmIChpc1Jvb3QoKSkKICAgICAgICAgICAgIHNldEhlaWdodChtYXgoaGVp
Z2h0KCksIHZpc0hlaWdodCAtIG1hcmdpbnMpKTsKICAgICAgICAgZWxzZSB7CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiA2NzY3MSkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDkgKzIxNCw2IEBAIHZv
aWQgUmVuZGVySW1hZ2U6OnBhaW50UmVwbGFjZWQoUGFpbnRJbmYKICAgICBpbnQgbGVmdFBhZCA9
IHBhZGRpbmdMZWZ0KCk7CiAgICAgaW50IHRvcFBhZCA9IHBhZGRpbmdUb3AoKTsKIAotICAgIGlm
IChkb2N1bWVudCgpLT5wcmludGluZygpICYmICF2aWV3KCktPnByaW50SW1hZ2VzKCkpCi0gICAg
ICAgIHJldHVybjsKLQogICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5j
b250ZXh0OwogCiAgICAgaWYgKCFtX2ltYWdlUmVzb3VyY2UtPmhhc0ltYWdlKCkgfHwgbV9pbWFn
ZVJlc291cmNlLT5lcnJvck9jY3VycmVkKCkpIHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpbmVCb3hMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaW5lQm94TGlzdC5jcHAJKHJldmlzaW9uIDY3NjcxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGluZUJveExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNiArMTU5LDggQEAg
dm9pZCBSZW5kZXJMaW5lQm94TGlzdDo6cGFpbnQoUmVuZGVyQm94TQogICAgIGlmICghZmlyc3RM
aW5lQm94KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIEZJWE1FOiBQYWludC10aW1lIHBh
Z2luYXRpb24gaXMgb2Jzb2xldGUgYW5kIGlzIG5vdyBvbmx5IHVzZWQgYnkgZW1iZWRkZWQgV2Vi
Vmlld3MgaW5zaWRlIEFwcEtpdAorICAgIC8vIE5TVmlld3MuICBEbyBub3QgYWRkIGFueSBtb3Jl
IGNvZGUgZm9yIHRoaXMuCiAgICAgUmVuZGVyVmlldyogdiA9IHJlbmRlcmVyLT52aWV3KCk7CiAg
ICAgYm9vbCB1c2VQcmludFJlY3QgPSAhdi0+cHJpbnRSZWN0KCkuaXNFbXB0eSgpOwogICAgIApJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcAkocmV2aXNpb24gNjc2NzEpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw5ICsx
ODcsNiBAQCB2b2lkIFJlbmRlclZpZGVvOjpwYWludFJlcGxhY2VkKFBhaW50SW5mCiAgICAgTWVk
aWFQbGF5ZXIqIG1lZGlhUGxheWVyID0gcGxheWVyKCk7CiAgICAgYm9vbCBkaXNwbGF5aW5nUG9z
dGVyID0gdmlkZW9FbGVtZW50KCktPnNob3VsZERpc3BsYXlQb3N0ZXJJbWFnZSgpOwogCi0gICAg
aWYgKGRpc3BsYXlpbmdQb3N0ZXIgJiYgZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSAmJiAhdmlldygp
LT5wcmludEltYWdlcygpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoIWRpc3BsYXlpbmdQ
b3N0ZXIpIHsKICAgICAgICAgaWYgKCFtZWRpYVBsYXllcikKICAgICAgICAgICAgIHJldHVybjsK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCShyZXZpc2lvbiA2NzY3MSkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMSArNDgs
MTIgQEAgUmVuZGVyVmlldzo6UmVuZGVyVmlldyhOb2RlKiBub2RlLCBGcmFtZQogICAgICwgbV9z
ZWxlY3Rpb25FbmQoMCkKICAgICAsIG1fc2VsZWN0aW9uU3RhcnRQb3MoLTEpCiAgICAgLCBtX3Nl
bGVjdGlvbkVuZFBvcygtMSkKLSAgICAsIG1fcHJpbnRJbWFnZXModHJ1ZSkKLSAgICAsIG1fbWF4
aW1hbE91dGxpbmVTaXplKDApCiAgICAgLCBtX2Jlc3RUcnVuY2F0ZWRBdCgwKQorICAgICwgbV90
cnVuY2F0ZWRBdCgwKQogICAgICwgbV90cnVuY2F0b3JXaWR0aCgwKQogICAgICwgbV9mb3JjZWRQ
YWdlQnJlYWsoZmFsc2UpCisgICAgLCBtX21heGltYWxPdXRsaW5lU2l6ZSgwKQorICAgICwgbV9w
YWdlSGVpZ2h0KDApCiAgICAgLCBtX2xheW91dFN0YXRlKDApCiAgICAgLCBtX2xheW91dFN0YXRl
RGlzYWJsZUNvdW50KDApCiB7CkBAIC0xMDAsNiArMTAxLDkgQEAgdm9pZCBSZW5kZXJWaWV3Ojpj
YWxjUHJlZldpZHRocygpCiAKIHZvaWQgUmVuZGVyVmlldzo6bGF5b3V0KCkKIHsKKyAgICBpZiAo
IWRvY3VtZW50KCktPnBhZ2luYXRlZCgpKQorICAgICAgICBzZXRQYWdlSGVpZ2h0KDApOworCiAg
ICAgaWYgKHByaW50aW5nKCkpCiAgICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lk
dGggPSB3aWR0aCgpOwogCkBAIC0xMTcsNiArMTIxLDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpsYXlv
dXQoKQogICAgIExheW91dFN0YXRlIHN0YXRlOwogICAgIC8vIEZJWE1FOiBNYXkgYmUgYmV0dGVy
IHRvIHB1c2ggYSBjbGlwIGFuZCBhdm9pZCBpc3N1aW5nIG9mZnNjcmVlbiByZXBhaW50cy4KICAg
ICBzdGF0ZS5tX2NsaXBwZWQgPSBmYWxzZTsKKyAgICBzdGF0ZS5tX3BhZ2VIZWlnaHQgPSBtX3Bh
Z2VIZWlnaHQ7CiAgICAgbV9sYXlvdXRTdGF0ZSA9ICZzdGF0ZTsKIAogICAgIGlmIChuZWVkc0xh
eW91dCgpKQpAQCAtMTI2LDcgKzEzMSw2IEBAIHZvaWQgUmVuZGVyVmlldzo6bGF5b3V0KCkKICAg
ICBtX292ZXJmbG93LmNsZWFyKCk7CiAgICAgYWRkTGF5b3V0T3ZlcmZsb3coSW50UmVjdCgwLCAw
LCBkb2NXaWR0aCgpLCBkb2NIZWlnaHQoKSkpOwogCi0KICAgICBBU1NFUlQobGF5b3V0RGVsdGEo
KSA9PSBJbnRTaXplKCkpOwogICAgIEFTU0VSVChtX2xheW91dFN0YXRlRGlzYWJsZUNvdW50ID09
IDApOwogICAgIEFTU0VSVChtX2xheW91dFN0YXRlID09ICZzdGF0ZSk7CkBAIC0xNTQsMTIgKzE1
OCw2IEBAIHZvaWQgUmVuZGVyVmlldzo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEkKIHsKICAgICAv
LyBJZiB3ZSBldmVyIHJlcXVpcmUgbGF5b3V0IGJ1dCByZWNlaXZlIGEgcGFpbnQgYW55d2F5LCBz
b21ldGhpbmcgaGFzIGdvbmUgaG9ycmlibHkgd3JvbmcuCiAgICAgQVNTRVJUKCFuZWVkc0xheW91
dCgpKTsKLQotICAgIC8vIENhY2hlIHRoZSBwcmludCByZWN0IGJlY2F1c2UgdGhlIGRpcnR5IHJl
Y3QgY291bGQgZ2V0IGNoYW5nZWQgZHVyaW5nIHBhaW50aW5nLgotICAgIGlmIChkb2N1bWVudCgp
LT5wYWdpbmF0ZWQoKSkKLSAgICAgICAgc2V0UHJpbnRSZWN0KHBhaW50SW5mby5yZWN0KTsKLSAg
ICBlbHNlCi0gICAgICAgIHNldFByaW50UmVjdChJbnRSZWN0KCkpOwogICAgIHBhaW50T2JqZWN0
KHBhaW50SW5mbywgdHgsIHR5KTsKIH0KIApAQCAtNjY3LDI5ICs2NjUsNiBAQCBmbG9hdCBSZW5k
ZXJWaWV3Ojp6b29tRmFjdG9yKCkgY29uc3QKICAgICByZXR1cm4gbV9mcmFtZVZpZXctPnBhZ2Va
b29tRmFjdG9yKCk7CiB9CiAKLS8vIFRoZSBpZGVhIGhlcmUgaXMgdG8gdGFrZSBpbnRvIGFjY291
bnQgd2hhdCBvYmplY3QgaXMgbW92aW5nIHRoZSBwYWdpbmF0aW9uIHBvaW50LCBhbmQKLS8vIHRo
dXMgY2hvb3NlIHRoZSBiZXN0IHBsYWNlIHRvIGNob3AgaXQuCi12b2lkIFJlbmRlclZpZXc6OnNl
dEJlc3RUcnVuY2F0ZWRBdChpbnQgeSwgUmVuZGVyQm94TW9kZWxPYmplY3QqIGZvclJlbmRlcmVy
LCBib29sIGZvcmNlZEJyZWFrKQotewotICAgIC8vIE5vYm9keSBlbHNlIGNhbiBzZXQgYSBwYWdl
IGJyZWFrIG9uY2Ugd2UgaGF2ZSBhIGZvcmNlZCBicmVhay4KLSAgICBpZiAobV9mb3JjZWRQYWdl
QnJlYWspCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZvcmNlZCBicmVha3MgYWx3YXlzIHdp
biBvdmVyIHVuZm9yY2VkIGJyZWFrcy4KLSAgICBpZiAoZm9yY2VkQnJlYWspIHsKLSAgICAgICAg
bV9mb3JjZWRQYWdlQnJlYWsgPSB0cnVlOwotICAgICAgICBtX2Jlc3RUcnVuY2F0ZWRBdCA9IHk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBQcmVmZXIgdGhlIHdpZGVzdCBvYmpl
Y3QgdGhhdCB0cmllcyB0byBtb3ZlIHRoZSBwYWdpbmF0aW9uIHBvaW50Ci0gICAgSW50UmVjdCBi
b3VuZGluZ0JveCA9IGZvclJlbmRlcmVyLT5ib3JkZXJCb3VuZGluZ0JveCgpOwotICAgIGlmIChi
b3VuZGluZ0JveC53aWR0aCgpID4gbV90cnVuY2F0b3JXaWR0aCkgewotICAgICAgICBtX3RydW5j
YXRvcldpZHRoID0gYm91bmRpbmdCb3gud2lkdGgoKTsKLSAgICAgICAgbV9iZXN0VHJ1bmNhdGVk
QXQgPSB5OwotICAgIH0KLX0KLQogdm9pZCBSZW5kZXJWaWV3OjpwdXNoTGF5b3V0U3RhdGUoUmVu
ZGVyT2JqZWN0KiByb290KQogewogICAgIEFTU0VSVChtX2xheW91dFN0YXRlRGlzYWJsZUNvdW50
ID09IDApOwpAQCAtNzIzLDYgKzY5OCwzMSBAQCB2b2lkIFJlbmRlclZpZXc6OnVwZGF0ZUhpdFRl
c3RSZXN1bHQoSGl0CiAgICAgfQogfQogCisvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBpcyBvYnNv
bGV0ZSBhbmQgb25seSB1c2VkIGJ5IGVtYmVkZGVkIFdlYlZpZXdzIGluc2lkZSBBcHBLaXQgTlNW
aWV3cy4KKy8vIERvIG5vdCBhZGQgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uIQorLy8gVGhlIGlk
ZWEgaGVyZSBpcyB0byB0YWtlIGludG8gYWNjb3VudCB3aGF0IG9iamVjdCBpcyBtb3ZpbmcgdGhl
IHBhZ2luYXRpb24gcG9pbnQsIGFuZAorLy8gdGh1cyBjaG9vc2UgdGhlIGJlc3QgcGxhY2UgdG8g
Y2hvcCBpdC4KK3ZvaWQgUmVuZGVyVmlldzo6c2V0QmVzdFRydW5jYXRlZEF0KGludCB5LCBSZW5k
ZXJCb3hNb2RlbE9iamVjdCogZm9yUmVuZGVyZXIsIGJvb2wgZm9yY2VkQnJlYWspCit7CisgICAg
Ly8gTm9ib2R5IGVsc2UgY2FuIHNldCBhIHBhZ2UgYnJlYWsgb25jZSB3ZSBoYXZlIGEgZm9yY2Vk
IGJyZWFrLgorICAgIGlmIChtX2ZvcmNlZFBhZ2VCcmVhaykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gRm9yY2VkIGJyZWFrcyBhbHdheXMgd2luIG92ZXIgdW5mb3JjZWQgYnJlYWtzLgorICAg
IGlmIChmb3JjZWRCcmVhaykgeworICAgICAgICBtX2ZvcmNlZFBhZ2VCcmVhayA9IHRydWU7Cisg
ICAgICAgIG1fYmVzdFRydW5jYXRlZEF0ID0geTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIFByZWZlciB0aGUgd2lkZXN0IG9iamVjdCB0aGF0IHRyaWVzIHRvIG1vdmUgdGhlIHBh
Z2luYXRpb24gcG9pbnQKKyAgICBJbnRSZWN0IGJvdW5kaW5nQm94ID0gZm9yUmVuZGVyZXItPmJv
cmRlckJvdW5kaW5nQm94KCk7CisgICAgaWYgKGJvdW5kaW5nQm94LndpZHRoKCkgPiBtX3RydW5j
YXRvcldpZHRoKSB7CisgICAgICAgIG1fdHJ1bmNhdG9yV2lkdGggPSBib3VuZGluZ0JveC53aWR0
aCgpOworICAgICAgICBtX2Jlc3RUcnVuY2F0ZWRBdCA9IHk7CisgICAgfQorfQorCiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogYm9vbCBSZW5kZXJWaWV3Ojp1c2VzQ29tcG9zaXRp
bmcoKSBjb25zdAogewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkocmV2aXNpb24gNjc2NzEp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3
LDE3ICs3Nyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNlbGVjdGlvblN0YXJ0RW5kKGludCYgc3Rh
cnRQb3MsIGludCYgZW5kUG9zKSBjb25zdDsKIAogICAgIGJvb2wgcHJpbnRpbmcoKSBjb25zdDsK
LSAgICB2b2lkIHNldFByaW50SW1hZ2VzKGJvb2wgZW5hYmxlKSB7IG1fcHJpbnRJbWFnZXMgPSBl
bmFibGU7IH0KLSAgICBib29sIHByaW50SW1hZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9wcmludElt
YWdlczsgfQotCi0gICAgSW50UmVjdCBwcmludFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3ByaW50
UmVjdDsgfQotICAgIHZvaWQgc2V0UHJpbnRSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsgbV9wcmlu
dFJlY3QgPSByOyB9Ci0KLSAgICB2b2lkIHNldFRydW5jYXRlZEF0KGludCB5KSB7IG1fdHJ1bmNh
dGVkQXQgPSB5OyBtX2Jlc3RUcnVuY2F0ZWRBdCA9IG1fdHJ1bmNhdG9yV2lkdGggPSAwOyBtX2Zv
cmNlZFBhZ2VCcmVhayA9IGZhbHNlOyB9Ci0gICAgdm9pZCBzZXRCZXN0VHJ1bmNhdGVkQXQoaW50
IHksIFJlbmRlckJveE1vZGVsT2JqZWN0KiBmb3JSZW5kZXJlciwgYm9vbCBmb3JjZWRCcmVhayA9
IGZhbHNlKTsKLSAgICBpbnQgYmVzdFRydW5jYXRlZEF0KCkgY29uc3QgeyByZXR1cm4gbV9iZXN0
VHJ1bmNhdGVkQXQ7IH0KLSAgICAKLSAgICBpbnQgdHJ1bmNhdGVkQXQoKSBjb25zdCB7IHJldHVy
biBtX3RydW5jYXRlZEF0OyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0
b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7CiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRl
UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mKTsKQEAgLTEyMCwyMyArMTA5LDkgQEAgcHVibGljOgog
CiAgICAgYm9vbCBkb2luZ0Z1bGxSZXBhaW50KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVZpZXct
Pm5lZWRzRnVsbFJlcGFpbnQoKTsgfQogCi0gICAgdm9pZCBwdXNoTGF5b3V0U3RhdGUoUmVuZGVy
Qm94KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0LCBpbnQgcGFnZUhlaWdodCA9IDAs
IENvbHVtbkluZm8qIGNvbEluZm8gPSAwKQotICAgIHsKLSAgICAgICAgLy8gV2UgcHVzaCBMYXlv
dXRTdGF0ZSBldmVuIGlmIGxheW91dFN0YXRlIGlzIGRpc2FibGVkIGJlY2F1c2UgaXQgc3RvcmVz
IGxheW91dERlbHRhIHRvby4KLSAgICAgICAgaWYgKCFkb2luZ0Z1bGxSZXBhaW50KCkgfHwgcmVu
ZGVyZXItPmhhc0NvbHVtbnMoKSB8fCBtX2xheW91dFN0YXRlLT5pc1BhZ2luYXRlZCgpKQotICAg
ICAgICAgICAgbV9sYXlvdXRTdGF0ZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgTGF5b3V0U3RhdGUo
bV9sYXlvdXRTdGF0ZSwgcmVuZGVyZXIsIG9mZnNldCwgcGFnZUhlaWdodCwgY29sSW5mbyk7Ci0g
ICAgfQotCisgICAgLy8gU3VidHJlZSBwdXNoL3BvcAogICAgIHZvaWQgcHVzaExheW91dFN0YXRl
KFJlbmRlck9iamVjdCopOwotCi0gICAgdm9pZCBwb3BMYXlvdXRTdGF0ZSgpCi0gICAgewotICAg
ICAgICBMYXlvdXRTdGF0ZSogc3RhdGUgPSBtX2xheW91dFN0YXRlOwotICAgICAgICBpZiAoZG9p
bmdGdWxsUmVwYWludCgpICYmICFtX2xheW91dFN0YXRlLT5pc1BhZ2luYXRlZCgpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBtX2xheW91dFN0YXRlID0gc3RhdGUtPm1fbmV4dDsKLSAg
ICAgICAgc3RhdGUtPmRlc3Ryb3kocmVuZGVyQXJlbmEoKSk7Ci0gICAgfQorICAgIHZvaWQgcG9w
TGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gcG9wTGF5b3V0U3RhdGUoKTsgfSAv
LyBKdXN0IGRvaW5nIHRoaXMgdG8ga2VlcCBwb3BMYXlvdXRTdGF0ZSgpIHByaXZhdGUgYW5kIHRv
IG1ha2UgdGhlIHN1YnRyZWUgY2FsbHMgc3ltbWV0cmljYWwuCiAKICAgICBib29sIHNob3VsZERp
c2FibGVMYXlvdXRTdGF0ZUZvclN1YnRyZWUoUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAKQEAgLTE1
Myw2ICsxMjgsMjQgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUhpdFRlc3RS
ZXN1bHQoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50Jik7CiAKKyAgICB1bnNpZ25lZCBw
YWdlSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlSGVpZ2h0OyB9CisgICAgdm9pZCBzZXRQ
YWdlSGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKKyAgICB7CisgICAgICAgIGlmIChtX3BhZ2VIZWln
aHQgIT0gaGVpZ2h0KSB7CisgICAgICAgICAgICBtX3BhZ2VIZWlnaHQgPSBoZWlnaHQ7CisgICAg
ICAgICAgICBtYXJrRGVzY2VuZGFudEJsb2Nrc0FuZExpbmVzRm9yTGF5b3V0KCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBGSVhNRTogVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXByZWNhdGVk
LiBObyBjb2RlIHNob3VsZCBiZSBhZGRlZCB0aGF0IHVzZXMgdGhlc2UuCisgICAgaW50IGJlc3RU
cnVuY2F0ZWRBdCgpIGNvbnN0IHsgcmV0dXJuIG1fYmVzdFRydW5jYXRlZEF0OyB9CisgICAgdm9p
ZCBzZXRCZXN0VHJ1bmNhdGVkQXQoaW50IHksIFJlbmRlckJveE1vZGVsT2JqZWN0KiBmb3JSZW5k
ZXJlciwgYm9vbCBmb3JjZWRCcmVhayA9IGZhbHNlKTsKKyAgICBpbnQgdHJ1bmNhdGVkQXQoKSBj
b25zdCB7IHJldHVybiBtX3RydW5jYXRlZEF0OyB9CisgICAgdm9pZCBzZXRUcnVuY2F0ZWRBdChp
bnQgeSkgeyBtX3RydW5jYXRlZEF0ID0geTsgbV9iZXN0VHJ1bmNhdGVkQXQgPSBtX3RydW5jYXRv
cldpZHRoID0gMDsgbV9mb3JjZWRQYWdlQnJlYWsgPSBmYWxzZTsgfQorICAgIGNvbnN0IEludFJl
Y3QmIHByaW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbnRSZWN0OyB9CisgICAgdm9pZCBz
ZXRQcmludFJlY3QoY29uc3QgSW50UmVjdCYgcikgeyBtX3ByaW50UmVjdCA9IHI7IH0KKyAgICAv
LyBFbmQgZGVwcmVjYXRlZCBmdW5jdGlvbnMuCisKICAgICAvLyBOb3RpZmljYXRpb25zIHRoYXQg
dGhpcyB2aWV3IGJlY2FtZSB2aXNpYmxlIGluIGEgd2luZG93LCBvciB3aWxsIGJlCiAgICAgLy8g
cmVtb3ZlZCBmcm9tIHRoZSB3aW5kb3cuCiAgICAgdm9pZCBkaWRNb3ZlT25zY3JlZW4oKTsKQEAg
LTE3Myw2ICsxNjYsMjYgQEAgcHJpdmF0ZToKICAgICBpbnQgZG9jSGVpZ2h0KCkgY29uc3Q7CiAg
ICAgaW50IGRvY1dpZHRoKCkgY29uc3Q7CiAKKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgbWF5IG9u
bHkgYmUgYWNjZXNzZWQgYnkgTGF5b3V0U3RhdGVNYWludGFpbmVyLgorICAgIGJvb2wgcHVzaExh
eW91dFN0YXRlKFJlbmRlckJveCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIG9mZnNldCwgaW50
IHBhZ2VIZWlnaHQgPSAwLCBDb2x1bW5JbmZvKiBjb2xJbmZvID0gMCkKKyAgICB7CisgICAgICAg
IC8vIFdlIHB1c2ggTGF5b3V0U3RhdGUgZXZlbiBpZiBsYXlvdXRTdGF0ZSBpcyBkaXNhYmxlZCBi
ZWNhdXNlIGl0IHN0b3JlcyBsYXlvdXREZWx0YSB0b28uCisgICAgICAgIGlmICghZG9pbmdGdWxs
UmVwYWludCgpIHx8IHJlbmRlcmVyLT5oYXNDb2x1bW5zKCkgfHwgbV9sYXlvdXRTdGF0ZS0+aXNQ
YWdpbmF0ZWQoKSkgeworICAgICAgICAgICAgbV9sYXlvdXRTdGF0ZSA9IG5ldyAocmVuZGVyQXJl
bmEoKSkgTGF5b3V0U3RhdGUobV9sYXlvdXRTdGF0ZSwgcmVuZGVyZXIsIG9mZnNldCwgcGFnZUhl
aWdodCwgY29sSW5mbyk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCBwb3BMYXlvdXRTdGF0ZSgpCisg
ICAgeworICAgICAgICBMYXlvdXRTdGF0ZSogc3RhdGUgPSBtX2xheW91dFN0YXRlOworICAgICAg
ICBtX2xheW91dFN0YXRlID0gc3RhdGUtPm1fbmV4dDsKKyAgICAgICAgc3RhdGUtPmRlc3Ryb3ko
cmVuZGVyQXJlbmEoKSk7CisgICAgfQorICAgIAorICAgIGZyaWVuZCBjbGFzcyBMYXlvdXRTdGF0
ZU1haW50YWluZXI7CisgICAgICAgIAogcHJvdGVjdGVkOgogICAgIEZyYW1lVmlldyogbV9mcmFt
ZVZpZXc7CiAKQEAgLTE4MSwyMSArMTk0LDIxIEBAIHByb3RlY3RlZDoKICAgICBpbnQgbV9zZWxl
Y3Rpb25TdGFydFBvczsKICAgICBpbnQgbV9zZWxlY3Rpb25FbmRQb3M7CiAKLSAgICAvLyB1c2Vk
IHRvIGlnbm9yZSB2aWV3cG9ydCB3aWR0aCB3aGVuIHByaW50aW5nIHRvIHRoZSBwcmludGVyCi0g
ICAgYm9vbCBtX3ByaW50SW1hZ2VzOworICAgIC8vIEZJWE1FOiBPbmx5IHVzZWQgYnkgZW1iZWRk
ZWQgV2ViVmlld3MgaW5zaWRlIEFwcEtpdCBOU1ZpZXdzLiAgRmluZCBhIHdheSB0byByZW1vdmUu
CisgICAgaW50IG1fYmVzdFRydW5jYXRlZEF0OwogICAgIGludCBtX3RydW5jYXRlZEF0OworICAg
IGludCBtX3RydW5jYXRvcldpZHRoOworICAgIEludFJlY3QgbV9wcmludFJlY3Q7CisgICAgYm9v
bCBtX2ZvcmNlZFBhZ2VCcmVhazsKKyAgICAvLyBFbmQgZGVwcmVjYXRlZCBtZW1iZXJzLgogCiAg
ICAgaW50IG1fbWF4aW1hbE91dGxpbmVTaXplOyAvLyBVc2VkIHRvIGFwcGx5IGEgZnVkZ2UgZmFj
dG9yIHRvIGRpcnR5LXJlY3QgY2hlY2tzIG9uIGJsb2Nrcy90YWJsZXMuCi0gICAgSW50UmVjdCBt
X3ByaW50UmVjdDsgLy8gVXNlZCB3aGVuIHByaW50aW5nLgogCiAgICAgdHlwZWRlZiBIYXNoU2V0
PFJlbmRlcldpZGdldCo+IFJlbmRlcldpZGdldFNldDsKLQogICAgIFJlbmRlcldpZGdldFNldCBt
X3dpZGdldHM7Ci0KKyAgICAKIHByaXZhdGU6Ci0gICAgaW50IG1fYmVzdFRydW5jYXRlZEF0Owot
ICAgIGludCBtX3RydW5jYXRvcldpZHRoOwotICAgIGJvb2wgbV9mb3JjZWRQYWdlQnJlYWs7Cisg
ICAgdW5zaWduZWQgbV9wYWdlSGVpZ2h0OwogICAgIExheW91dFN0YXRlKiBtX2xheW91dFN0YXRl
OwogICAgIHVuc2lnbmVkIG1fbGF5b3V0U3RhdGVEaXNhYmxlQ291bnQ7CiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtMjI4LDYgKzI0MSw3IEBAIHB1YmxpYzoKICAgICAgICAg
LCBtX2Rpc2FibGVkKGRpc2FibGVTdGF0ZSkKICAgICAgICAgLCBtX2RpZFN0YXJ0KGZhbHNlKQog
ICAgICAgICAsIG1fZGlkRW5kKGZhbHNlKQorICAgICAgICAsIG1fZGlkQ3JlYXRlTGF5b3V0U3Rh
dGUoZmFsc2UpCiAgICAgewogICAgICAgICBwdXNoKHJvb3QsIG9mZnNldCwgcGFnZUhlaWdodCwg
Y29sSW5mbyk7CiAgICAgfQpAQCAtMjM4LDYgKzI1Miw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBt
X2Rpc2FibGVkKGZhbHNlKQogICAgICAgICAsIG1fZGlkU3RhcnQoZmFsc2UpCiAgICAgICAgICwg
bV9kaWRFbmQoZmFsc2UpCisgICAgICAgICwgbV9kaWRDcmVhdGVMYXlvdXRTdGF0ZShmYWxzZSkK
ICAgICB7CiAgICAgfQogICAgIApAQCAtMjUwLDggKzI2NSw4IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIEFTU0VSVCghbV9kaWRTdGFydCk7CiAgICAgICAgIC8vIFdlIHB1c2ggc3RhdGUgZXZl
biBpZiBkaXNhYmxlZCwgYmVjYXVzZSB3ZSBzdGlsbCBuZWVkIHRvIHN0b3JlIGxheW91dERlbHRh
Ci0gICAgICAgIG1fdmlldy0+cHVzaExheW91dFN0YXRlKHJvb3QsIG9mZnNldCwgcGFnZUhlaWdo
dCwgY29sSW5mbyk7Ci0gICAgICAgIGlmIChtX2Rpc2FibGVkKQorICAgICAgICBtX2RpZENyZWF0
ZUxheW91dFN0YXRlID0gbV92aWV3LT5wdXNoTGF5b3V0U3RhdGUocm9vdCwgb2Zmc2V0LCBwYWdl
SGVpZ2h0LCBjb2xJbmZvKTsKKyAgICAgICAgaWYgKG1fZGlzYWJsZWQgJiYgbV9kaWRDcmVhdGVM
YXlvdXRTdGF0ZSkKICAgICAgICAgICAgIG1fdmlldy0+ZGlzYWJsZUxheW91dFN0YXRlKCk7CiAg
ICAgICAgIG1fZGlkU3RhcnQgPSB0cnVlOwogICAgIH0KQEAgLTI2MCw5ICsyNzUsMTIgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgaWYgKG1fZGlkU3RhcnQpIHsKICAgICAgICAgICAgIEFTU0VS
VCghbV9kaWRFbmQpOwotICAgICAgICAgICAgbV92aWV3LT5wb3BMYXlvdXRTdGF0ZSgpOwotICAg
ICAgICAgICAgaWYgKG1fZGlzYWJsZWQpCi0gICAgICAgICAgICAgICAgbV92aWV3LT5lbmFibGVM
YXlvdXRTdGF0ZSgpOworICAgICAgICAgICAgaWYgKG1fZGlkQ3JlYXRlTGF5b3V0U3RhdGUpIHsK
KyAgICAgICAgICAgICAgICBtX3ZpZXctPnBvcExheW91dFN0YXRlKCk7CisgICAgICAgICAgICAg
ICAgaWYgKG1fZGlzYWJsZWQpCisgICAgICAgICAgICAgICAgICAgIG1fdmlldy0+ZW5hYmxlTGF5
b3V0U3RhdGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgbV9k
aWRFbmQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtMjc0LDYgKzI5Miw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX2Rpc2FibGVkIDogMTsgICAgICAgIC8vIHRydWUgaWYgdGhlIG9mZnNl
dCBhbmQgY2xpcCBwYXJ0IG9mIGxheW91dFN0YXRlIGlzIGRpc2FibGVkCiAgICAgYm9vbCBtX2Rp
ZFN0YXJ0IDogMTsgICAgICAgIC8vIHRydWUgaWYgd2UgZGlkIGEgcHVzaCBvciBkaXNhYmxlCiAg
ICAgYm9vbCBtX2RpZEVuZCA6IDE7ICAgICAgICAgIC8vIHRydWUgaWYgd2UgcG9wcGVkIG9yIHJl
LWVuYWJsZWQKKyAgICBib29sIG1fZGlkQ3JlYXRlTGF5b3V0U3RhdGU7IC8vIHRydWUgaWYgd2Ug
YWN0dWFsbHkgbWFkZSBhIGxheW91dCBzdGF0ZS4KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67955</attachid>
            <date>2010-09-17 14:58:16 -0700</date>
            <delta_ts>2010-09-17 15:51:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>29775</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Nzc0MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTAtMDktMTcgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTk5MywgY29udmVydCBwcmludGlu
ZyB0byB0aGUgbmV3IHBhZ2luYXRpb24gbW9kZWwuCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmll
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnJlc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6
Zm9yY2VMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpmb3JjZUxheW91dEZv
clBhZ2luYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGp1c3RQYWdlSGVp
Z2h0KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAgICAgICAqIHBhZ2UvUHJpbnRD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByaW50Q29udGV4dDo6Y29tcHV0ZVBhZ2VS
ZWN0c1dpdGhQYWdlU2l6ZUludGVybmFsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4pOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpjYWxjSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50UmVwbGFjZWQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMaW5lQm94TGlzdDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWRl
by5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWRlbzo6cGFpbnRSZXBsYWNlZCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVmlldzo6UmVuZGVyVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpsYXlv
dXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVmlldzo6c2V0QmVzdFRydW5jYXRlZEF0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVmlldy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cG9wTGF5b3V0
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cGFnZUhlaWdodCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzZXRQYWdlSGVpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclZpZXc6OmJlc3RUcnVuY2F0ZWRBdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJWaWV3Ojp0cnVuY2F0ZWRBdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzZXRU
cnVuY2F0ZWRBdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpwcmludFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6c2V0UHJpbnRSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclZpZXc6OnB1c2hMYXlvdXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXRTdGF0ZU1haW50YWluZXI6OkxheW91dFN0YXRlTWFpbnRhaW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXRTdGF0ZU1haW50YWluZXI6OnB1c2gpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0U3RhdGVNYWludGFpbmVyOjpwb3ApOgorCiAyMDEwLTA5LTE3ICBMdWNhcyBEZSBNYXJj
aGkgIDxsdWNhcy5kZW1hcmNoaUBwcm9mdXNpb24ubW9iaT4KIAogICAgICAgICBVbnJldmlld2Vk
LCBidWlsZCBmaXguIEFkZCBmaWxlcyBtaXNzZWQgaW4gcjY3NzA0LgpJbmRleDogV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAJKHJldmlzaW9uIDY3NjcxKQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzMCw3ICsyMzAsNiBAQCB2b2lkIEZyYW1lVmlldzo6cmVzZXQoKQogICAg
IG1fd2FzU2Nyb2xsZWRCeVVzZXIgPSBmYWxzZTsKICAgICBtX2xhc3RMYXlvdXRTaXplID0gSW50
U2l6ZSgpOwogICAgIG1fbGFzdFpvb21GYWN0b3IgPSAxLjBmOwotICAgIG1fcGFnZUhlaWdodCA9
IDA7CiAgICAgbV9kZWZlcnJpbmdSZXBhaW50cyA9IDA7CiAgICAgbV9yZXBhaW50Q291bnQgPSAw
OwogICAgIG1fcmVwYWludFJlY3RzLmNsZWFyKCk7CkBAIC03OTUsNyArNzk0LDcgQEAgdm9pZCBG
cmFtZVZpZXc6OmxheW91dChib29sIGFsbG93U3VidHJlZQogCiAgICAgaWYgKHN1YnRyZWUpIHsK
ICAgICAgICAgUmVuZGVyVmlldyogdmlldyA9IHJvb3QtPnZpZXcoKTsKLSAgICAgICAgdmlldy0+
cG9wTGF5b3V0U3RhdGUoKTsKKyAgICAgICAgdmlldy0+cG9wTGF5b3V0U3RhdGUocm9vdCk7CiAg
ICAgICAgIGlmIChkaXNhYmxlTGF5b3V0U3RhdGUpCiAgICAgICAgICAgICB2aWV3LT5lbmFibGVM
YXlvdXRTdGF0ZSgpOwogICAgIH0KQEAgLTIxMDEsMTIgKzIxMDAsNiBAQCB2b2lkIEZyYW1lVmll
dzo6Zmx1c2hEZWZlcnJlZFJlcGFpbnRzKCkKIHZvaWQgRnJhbWVWaWV3Ojpmb3JjZUxheW91dChi
b29sIGFsbG93U3VidHJlZSkKIHsKICAgICBsYXlvdXQoYWxsb3dTdWJ0cmVlKTsKLSAgICAvLyBX
ZSBjYW5ub3QgdW5zY2hlZHVsZSBhIHBlbmRpbmcgcmVsYXlvdXQsIHNpbmNlIHRoZSBmb3JjZSBj
YW4gYmUgY2FsbGVkIHdpdGgKLSAgICAvLyBhIHRpbnkgcmVjdGFuZ2xlIGZyb20gYSBkcmF3UmVj
dCB1cGRhdGUuICBCeSB1bnNjaGVkdWxpbmcgd2UgaW4gZWZmZWN0Ci0gICAgLy8gInZhbGlkYXRl
IiBhbmQgc3RvcCB0aGUgbmVjZXNzYXJ5IGZ1bGwgcmVwYWludCBmcm9tIG9jY3VycmluZy4gIEJh
c2ljYWxseSBhbnkgYmFzaWMKLSAgICAvLyBhcHBlbmQvcmVtb3ZlIERIVE1MIGlzIGJyb2tlbiBi
eSB0aGlzIGNhbGwuICBGb3Igbm93LCBJIGhhdmUgcmVtb3ZlZCB0aGUgb3B0aW1pemF0aW9uCi0g
ICAgLy8gdW50aWwgd2UgaGF2ZSBhIGJldHRlciBpbnZhbGlkYXRpb24gc3RhdGVneS4gLWR3aAot
ICAgIC8vdW5zY2hlZHVsZVJlbGF5b3V0KCk7CiB9CiAKIHZvaWQgRnJhbWVWaWV3Ojpmb3JjZUxh
eW91dEZvclBhZ2luYXRpb24oY29uc3QgRmxvYXRTaXplJiBwYWdlU2l6ZSwgZmxvYXQgbWF4aW11
bVNocmlua0ZhY3RvciwgRnJhbWU6OkFkanVzdFZpZXdTaXplT3JOb3Qgc2hvdWxkQWRqdXN0Vmll
d1NpemUpCkBAIC0yMTE2LDggKzIxMDksOCBAQCB2b2lkIEZyYW1lVmlldzo6Zm9yY2VMYXlvdXRG
b3JQYWdpbmF0aW9uCiAgICAgUmVuZGVyVmlldyAqcm9vdCA9IHRvUmVuZGVyVmlldyhtX2ZyYW1l
LT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKTsKICAgICBpZiAocm9vdCkgewogICAgICAgICBpbnQg
cGFnZVcgPSBjZWlsZihwYWdlU2l6ZS53aWR0aCgpKTsKLSAgICAgICAgbV9wYWdlSGVpZ2h0ID0g
cGFnZVNpemUuaGVpZ2h0KCkgPyBwYWdlU2l6ZS5oZWlnaHQoKSA6IHZpc2libGVIZWlnaHQoKTsK
ICAgICAgICAgcm9vdC0+c2V0V2lkdGgocGFnZVcpOworICAgICAgICByb290LT5zZXRQYWdlSGVp
Z2h0KHBhZ2VTaXplLmhlaWdodCgpKTsKICAgICAgICAgcm9vdC0+c2V0TmVlZHNMYXlvdXRBbmRQ
cmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAgIGZvcmNlTGF5b3V0KCk7CiAKQEAgLTIxMjksNyAr
MjEyMiw3IEBAIHZvaWQgRnJhbWVWaWV3Ojpmb3JjZUxheW91dEZvclBhZ2luYXRpb24KICAgICAg
ICAgaWYgKHJpZ2h0bW9zdFBvcyA+IHBhZ2VTaXplLndpZHRoKCkpIHsKICAgICAgICAgICAgIHBh
Z2VXID0gc3RkOjptaW48aW50PihyaWdodG1vc3RQb3MsIGNlaWxmKHBhZ2VTaXplLndpZHRoKCkg
KiBtYXhpbXVtU2hyaW5rRmFjdG9yKSk7CiAgICAgICAgICAgICBpZiAocGFnZVNpemUuaGVpZ2h0
KCkpCi0gICAgICAgICAgICAgICAgbV9wYWdlSGVpZ2h0ID0gcGFnZVcgLyBwYWdlU2l6ZS53aWR0
aCgpICogcGFnZVNpemUuaGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgcm9vdC0+c2V0UGFnZUhl
aWdodChwYWdlVyAvIHBhZ2VTaXplLndpZHRoKCkgKiBwYWdlU2l6ZS5oZWlnaHQoKSk7CiAgICAg
ICAgICAgICByb290LT5zZXRXaWR0aChwYWdlVyk7CiAgICAgICAgICAgICByb290LT5zZXROZWVk
c0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICAgICAgICAgIGZvcmNlTGF5b3V0KCk7
CkBAIC0yMTM4LDcgKzIxMzEsNiBAQCB2b2lkIEZyYW1lVmlldzo6Zm9yY2VMYXlvdXRGb3JQYWdp
bmF0aW9uCiAKICAgICBpZiAoc2hvdWxkQWRqdXN0Vmlld1NpemUpCiAgICAgICAgIGFkanVzdFZp
ZXdTaXplKCk7Ci0gICAgbV9wYWdlSGVpZ2h0ID0gMDsKIH0KIAogdm9pZCBGcmFtZVZpZXc6OmFk
anVzdFBhZ2VIZWlnaHQoZmxvYXQgKm5ld0JvdHRvbSwgZmxvYXQgb2xkVG9wLCBmbG9hdCBvbGRC
b3R0b20sIGZsb2F0IC8qYm90dG9tTGltaXQqLykKQEAgLTIxNDksMTAgKzIxNDEsMTIgQEAgdm9p
ZCBGcmFtZVZpZXc6OmFkanVzdFBhZ2VIZWlnaHQoZmxvYXQgKgogICAgICAgICBHcmFwaGljc0Nv
bnRleHQgY29udGV4dCgoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqKTApOwogICAgICAgICByb290
LT5zZXRUcnVuY2F0ZWRBdCgoaW50KWZsb29yZihvbGRCb3R0b20pKTsKICAgICAgICAgSW50UmVj
dCBkaXJ0eVJlY3QoMCwgKGludClmbG9vcmYob2xkVG9wKSwgcm9vdC0+cmlnaHRMYXlvdXRPdmVy
ZmxvdygpLCAoaW50KWNlaWxmKG9sZEJvdHRvbSAtIG9sZFRvcCkpOworICAgICAgICByb290LT5z
ZXRQcmludFJlY3QoZGlydHlSZWN0KTsKICAgICAgICAgcm9vdC0+bGF5ZXIoKS0+cGFpbnQoJmNv
bnRleHQsIGRpcnR5UmVjdCk7CiAgICAgICAgICpuZXdCb3R0b20gPSByb290LT5iZXN0VHJ1bmNh
dGVkQXQoKTsKICAgICAgICAgaWYgKCpuZXdCb3R0b20gPT0gMCkKICAgICAgICAgICAgICpuZXdC
b3R0b20gPSBvbGRCb3R0b207CisgICAgICAgIHJvb3QtPnNldFByaW50UmVjdChJbnRSZWN0KCkp
OwogICAgIH0gZWxzZQogICAgICAgICAqbmV3Qm90dG9tID0gb2xkQm90dG9tOwogfQpJbmRleDog
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuaAkocmV2aXNpb24gNjc2NzEpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwMCw4ICsyMDAsMjMgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3Jj
ZUxheW91dChib29sIGFsbG93U3VidHJlZSA9IGZhbHNlKTsKICAgICB2b2lkIGZvcmNlTGF5b3V0
Rm9yUGFnaW5hdGlvbihjb25zdCBGbG9hdFNpemUmIHBhZ2VTaXplLCBmbG9hdCBtYXhpbXVtU2hy
aW5rRmFjdG9yLCBGcmFtZTo6QWRqdXN0Vmlld1NpemVPck5vdCk7Ci0gICAgaW50IHBhZ2VIZWln
aHQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VIZWlnaHQ7IH0KIAorICAgIC8vIEZJWE1FOiBUaGlz
IG1ldGhvZCBpcyByZXRhaW5lZCBiZWNhdXNlIG9mIGVtYmVkZGVkIFdlYlZpZXdzIGluIEFwcEtp
dC4gIFdoZW4gYSBXZWJWaWV3IGlzIGVtYmVkZGVkIGluc2lkZQorICAgIC8vIHNvbWUgZW5jbG9z
aW5nIHZpZXcgd2l0aCBhdXRvLXBhZ2luYXRpb24sIG5vIGNhbGwgaGFwcGVucyB0byByZXNpemUg
dGhlIHZpZXcuICBUaGUgbmV3IHBhZ2luYXRpb24gbW9kZWwKKyAgICAvLyBuZWVkcyB0aGUgdmll
dyB0byByZXNpemUgYXMgYSByZXN1bHQgb2YgdGhlIGJyZWFrcywgYnV0IHRoYXQgbWVhbnMgdGhh
dCB0aGUgZW5jbG9zaW5nIHZpZXcgaGFzIHRvIHBvdGVudGlhbGx5CisgICAgLy8gcmVzaXplIGFy
b3VuZCB0aGF0IHZpZXcuICBBdXRvLXBhZ2luYXRpb24gdXNlcyB0aGUgYm91bmRzIG9mIHRoZSBh
Y3R1YWwgdmlldyB0aGF0J3MgYmVpbmcgcHJpbnRlZCB0byBkZXRlcm1pbmUKKyAgICAvLyB0aGUg
ZWRnZXMgb2YgdGhlIHByaW50IG9wZXJhdGlvbiwgc28gdGhlIHJlc2l6ZSBpcyBuZWNlc3Nhcnkg
aWYgdGhlIGVuY2xvc2luZyB2aWV3J3MgYm91bmRzIGRlcGVuZCBvbiB0aGUKKyAgICAvLyB3ZWIg
ZG9jdW1lbnQncyBib3VuZHMuCisgICAgLy8gCisgICAgLy8gVGhpcyBpcyBhbHJlYWR5IGEgcHJv
YmxlbSBpZiB0aGUgdmlldyBuZWVkcyB0byBiZSBhIGRpZmZlcmVudCBzaXplIGJlY2F1c2Ugb2Yg
cHJpbnRlciBmb250cyBvciBiZWNhdXNlIG9mIHByaW50IHN0eWxlc2hlZXRzLgorICAgIC8vIE1h
aWwvRGljdGlvbmFyeSB3b3JrIGFyb3VuZCB0aGlzIHByb2JsZW0gYnkgdXNpbmcgdGhlIF9sYXlv
dXRGb3JQcmludGluZyBTUEkKKyAgICAvLyB0byBhdCBsZWFzdCBnZXQgcHJpbnQgc3R5bGVzaGVl
dHMgYW5kIHByaW50ZXIgZm9udHMgaW50byBwbGF5LCBidXQgc2luY2UgV2ViS2l0IGRvZXNuJ3Qg
a25vdyBhYm91dCB0aGUgcGFnZSBvZmZzZXQgb3IKKyAgICAvLyBwYWdlIHNpemUsIGl0IGNhbid0
IGFjdHVhbGx5IHBhZ2luYXRlIGNvcnJlY3RseSBkdXJpbmcgX2xheW91dEZvclByaW50aW5nLgor
ICAgIC8vCisgICAgLy8gV2UgY2FuIGV2ZW50dWFsbHkgbW92ZSBNYWlsIHRvIGEgbmV3ZXIgU1BJ
IHRoYXQgd291bGQgbGV0IHRoZW0gb3B0IGluIHRvIHRoZSBsYXlvdXQtdGltZSBwYWdpbmF0aW9u
IG1vZGVsLAorICAgIC8vIGJ1dCB0aGF0IGRvZXNuJ3Qgc29sdmUgdGhlIGdlbmVyYWwgcHJvYmxl
bSBvZiBob3cgb3RoZXIgQXBwS2l0IHZpZXdzIGNvdWxkIG9wdCBpbiB0byB0aGUgYmV0dGVyIG1v
ZGVsLgorICAgIC8vCisgICAgLy8gTk8gT1RIRVIgUExBVEZPUk0gQkVTSURFUyBNQUMgU0hPVUxE
IFVTRSBUSElTIE1FVEhPRC4KICAgICB2b2lkIGFkanVzdFBhZ2VIZWlnaHQoZmxvYXQqIG5ld0Jv
dHRvbSwgZmxvYXQgb2xkVG9wLCBmbG9hdCBvbGRCb3R0b20sIGZsb2F0IGJvdHRvbUxpbWl0KTsK
IAogICAgIGJvb2wgc2Nyb2xsVG9GcmFnbWVudChjb25zdCBLVVJMJik7CkBAIC0zMzYsOCArMzUx
LDYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9tZWRpYVR5cGU7CiAgICAgU3RyaW5nIG1fbWVk
aWFUeXBlV2hlbk5vdFByaW50aW5nOwogCi0gICAgaW50IG1fcGFnZUhlaWdodDsKLQogICAgIHVu
c2lnbmVkIG1fZW5xdWV1ZUV2ZW50czsKICAgICBWZWN0b3I8U2NoZWR1bGVkRXZlbnQqPiBtX3Nj
aGVkdWxlZEV2ZW50czsKICAgICAKSW5kZXg6IFdlYkNvcmUvcGFnZS9QcmludENvbnRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QcmludENvbnRleHQuY3BwCShyZXZpc2lvbiA2
NzY3MSkKKysrIFdlYkNvcmUvcGFnZS9QcmludENvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05NSwyNiArOTUsMjIgQEAgdm9pZCBQcmludENvbnRleHQ6OmNvbXB1dGVQYWdlUmVjdHNXaXRo
UAogewogICAgIGlmICghbV9mcmFtZS0+ZG9jdW1lbnQoKSB8fCAhbV9mcmFtZS0+dmlldygpIHx8
ICFtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CisKICAg
ICBSZW5kZXJWaWV3KiByb290ID0gdG9SZW5kZXJWaWV3KG1fZnJhbWUtPmRvY3VtZW50KCktPnJl
bmRlcmVyKCkpOwogCi0gICAgY29uc3QgZmxvYXQgcGFnZVdpZHRoID0gcGFnZVNpemVJblBpeGVs
cy53aWR0aCgpOwotICAgIGNvbnN0IGZsb2F0IGRvY1dpZHRoID0gcm9vdC0+bGF5ZXIoKS0+d2lk
dGgoKTsKLSAgICBjb25zdCBmbG9hdCBkb2NIZWlnaHQgPSByb290LT5sYXllcigpLT5oZWlnaHQo
KTsKLSAgICBmbG9hdCBjdXJyUGFnZUhlaWdodCA9IHBhZ2VTaXplSW5QaXhlbHMuaGVpZ2h0KCk7
Ci0KLSAgICAvLyBhbHdheXMgcmV0dXJuIGF0IGxlYXN0IG9uZSBwYWdlLCBzaW5jZSBlbXB0eSBm
aWxlcyBzaG91bGQgcHJpbnQgYSBibGFuayBwYWdlCi0gICAgZmxvYXQgcHJpbnRlZFBhZ2VzSGVp
Z2h0ID0gMDsKLSAgICBkbyB7Ci0gICAgICAgIGZsb2F0IHByb3Bvc2VkQm90dG9tID0gc3RkOjpt
aW4oZG9jSGVpZ2h0LCBwcmludGVkUGFnZXNIZWlnaHQgKyBwYWdlU2l6ZUluUGl4ZWxzLmhlaWdo
dCgpKTsKLSAgICAgICAgbV9mcmFtZS0+dmlldygpLT5hZGp1c3RQYWdlSGVpZ2h0KCZwcm9wb3Nl
ZEJvdHRvbSwgcHJpbnRlZFBhZ2VzSGVpZ2h0LCBwcm9wb3NlZEJvdHRvbSwgcHJpbnRlZFBhZ2Vz
SGVpZ2h0KTsKLSAgICAgICAgY3VyclBhZ2VIZWlnaHQgPSBtYXgoMS4wZiwgcHJvcG9zZWRCb3R0
b20gLSBwcmludGVkUGFnZXNIZWlnaHQpOworICAgIGludCBkb2NXaWR0aCA9IHJvb3QtPmxheWVy
KCktPndpZHRoKCk7CisgICAgaW50IGRvY0hlaWdodCA9IHJvb3QtPmxheWVyKCktPmhlaWdodCgp
OworICAgIGludCBwYWdlV2lkdGggPSBwYWdlU2l6ZUluUGl4ZWxzLndpZHRoKCk7CisgICAgaW50
IHBhZ2VIZWlnaHQgPSBwYWdlU2l6ZUluUGl4ZWxzLmhlaWdodCgpOworCisgICAgdW5zaWduZWQg
cGFnZUNvdW50ID0gY2VpbGYoKGZsb2F0KWRvY0hlaWdodCAvIHBhZ2VIZWlnaHQpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYWdlQ291bnQ7ICsraSkgewogICAgICAgICBpZiAoYWxs
b3dIb3Jpem9udGFsTXVsdGlQYWdlcykgewotICAgICAgICAgICAgZm9yIChmbG9hdCBjdXJXaWR0
aCA9IDA7IGN1cldpZHRoIDwgZG9jV2lkdGg7IGN1cldpZHRoICs9IHBhZ2VXaWR0aCkKLSAgICAg
ICAgICAgICAgICBtX3BhZ2VSZWN0cy5hcHBlbmQoSW50UmVjdChjdXJXaWR0aCwgKGludClwcmlu
dGVkUGFnZXNIZWlnaHQsIChpbnQpcGFnZVdpZHRoLCAoaW50KWN1cnJQYWdlSGVpZ2h0KSk7Cisg
ICAgICAgICAgICBmb3IgKGludCBjdXJyV2lkdGggPSAwOyBjdXJyV2lkdGggPCBkb2NXaWR0aDsg
Y3VycldpZHRoICs9IHBhZ2VXaWR0aCkKKyAgICAgICAgICAgICAgICBtX3BhZ2VSZWN0cy5hcHBl
bmQoSW50UmVjdChjdXJyV2lkdGgsIGkgKiBwYWdlSGVpZ2h0LCBwYWdlV2lkdGgsIHBhZ2VIZWln
aHQpKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3BhZ2VSZWN0cy5hcHBlbmQoSW50
UmVjdCgwLCAoaW50KXByaW50ZWRQYWdlc0hlaWdodCwgKGludClwYWdlV2lkdGgsIChpbnQpY3Vy
clBhZ2VIZWlnaHQpKTsKLSAgICAgICAgcHJpbnRlZFBhZ2VzSGVpZ2h0ICs9IGN1cnJQYWdlSGVp
Z2h0OwotICAgIH0gd2hpbGUgKHByaW50ZWRQYWdlc0hlaWdodCA8IGRvY0hlaWdodCk7CisgICAg
ICAgICAgICBtX3BhZ2VSZWN0cy5hcHBlbmQoSW50UmVjdCgwLCBpICogcGFnZUhlaWdodCwgcGFn
ZVdpZHRoLCBwYWdlSGVpZ2h0KSk7CisgICAgfQogfQogCiB2b2lkIFByaW50Q29udGV4dDo6YmVn
aW4oZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAJKHJldmlzaW9uIDY3NjczKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjA4LDE0ICsyMjA4LDE0IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmYKICAgICBpbmZvLnBoYXNlID0gbmV3UGhhc2U7CiAg
ICAgaW5mby51cGRhdGVQYWludGluZ1Jvb3RGb3JDaGlsZHJlbih0aGlzKTsKICAgICAKKyAgICAv
LyBGSVhNRTogUGFpbnQtdGltZSBwYWdpbmF0aW9uIGlzIG9ic29sZXRlIGFuZCBpcyBub3cgb25s
eSB1c2VkIGJ5IGVtYmVkZGVkIFdlYlZpZXdzIGluc2lkZSBBcHBLaXQKKyAgICAvLyBOU1ZpZXdz
LiAgRG8gbm90IGFkZCBhbnkgbW9yZSBjb2RlIGZvciB0aGlzLgogICAgIFJlbmRlclZpZXcqIHJl
bmRlclZpZXcgPSB2aWV3KCk7CiAgICAgYm9vbCB1c2VQcmludFJlY3QgPSAhcmVuZGVyVmlldy0+
cHJpbnRSZWN0KCkuaXNFbXB0eSgpOwogICAgIAotICAgIGJvb2wgY2hlY2tQYWdlQnJlYWtzID0g
ZG9jdW1lbnQoKS0+cGFnaW5hdGVkKCkgJiYgIWRvY3VtZW50KCktPnNldHRpbmdzKCktPnBhZ2lu
YXRlRHVyaW5nTGF5b3V0RW5hYmxlZCgpOwotCiAgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0g
Zmlyc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkg
eyAgICAgICAgCiAgICAgICAgIC8vIENoZWNrIGZvciBwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlz
LCBhbmQgaWYgaXQncyBzZXQsIGJyZWFrIGFuZCBiYWlsLgotICAgICAgICBib29sIGNoZWNrQmVm
b3JlQWx3YXlzID0gIWNoaWxkcmVuSW5saW5lKCkgJiYgKGNoZWNrUGFnZUJyZWFrcyAmJiBjaGls
ZC0+c3R5bGUoKS0+cGFnZUJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMpOworICAgICAgICBib29s
IGNoZWNrQmVmb3JlQWx3YXlzID0gIWNoaWxkcmVuSW5saW5lKCkgJiYgKHVzZVByaW50UmVjdCAm
JiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMpOwogICAgICAg
ICBpZiAoY2hlY2tCZWZvcmVBbHdheXMKICAgICAgICAgICAgICYmICh0eSArIGNoaWxkLT55KCkp
ID4gcGFpbnRJbmZvLnJlY3QueSgpCiAgICAgICAgICAgICAmJiAodHkgKyBjaGlsZC0+eSgpKSA8
IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpKSB7CkBAIC0yMjM4LDcgKzIyMzgsNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjpwYWludENoaWxkcmVuKFBhaW50SW5mCiAgICAgICAgICAgICBjaGlsZC0+cGFp
bnQoaW5mbywgdHgsIHR5KTsKIAogICAgICAgICAvLyBDaGVjayBmb3IgcGFnZS1icmVhay1hZnRl
cjogYWx3YXlzLCBhbmQgaWYgaXQncyBzZXQsIGJyZWFrIGFuZCBiYWlsLgotICAgICAgICBib29s
IGNoZWNrQWZ0ZXJBbHdheXMgPSAhY2hpbGRyZW5JbmxpbmUoKSAmJiAoY2hlY2tQYWdlQnJlYWtz
ICYmIGNoaWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtBZnRlcigpID09IFBCQUxXQVlTKTsKKyAgICAg
ICAgYm9vbCBjaGVja0FmdGVyQWx3YXlzID0gIWNoaWxkcmVuSW5saW5lKCkgJiYgKHVzZVByaW50
UmVjdCAmJiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFrQWZ0ZXIoKSA9PSBQQkFMV0FZUyk7CiAg
ICAgICAgIGlmIChjaGVja0FmdGVyQWx3YXlzCiAgICAgICAgICAgICAmJiAodHkgKyBjaGlsZC0+
eSgpICsgY2hpbGQtPmhlaWdodCgpKSA+IHBhaW50SW5mby5yZWN0LnkoKQogICAgICAgICAgICAg
JiYgKHR5ICsgY2hpbGQtPnkoKSArIGNoaWxkLT5oZWlnaHQoKSkgPCBwYWludEluZm8ucmVjdC5i
b3R0b20oKSkgewpAQCAtNTkwNyw3ICs1OTA3LDggQEAgaW50IFJlbmRlckJsb2NrOjphcHBseUJl
Zm9yZUJyZWFrKFJlbmRlcgogewogICAgIC8vIEZJWE1FOiBBZGQgcGFnZSBicmVhayBjaGVja2lu
ZyBoZXJlIHdoZW4gd2Ugc3VwcG9ydCBwcmludGluZy4KICAgICBib29sIGNoZWNrQ29sdW1uQnJl
YWtzID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5pc1BhZ2luYXRpbmdDb2x1bW5zKCk7Ci0gICAg
Ym9vbCBjaGVja0JlZm9yZUFsd2F5cyA9IGNoZWNrQ29sdW1uQnJlYWtzICYmIGNoaWxkLT5zdHls
ZSgpLT5jb2x1bW5CcmVha0JlZm9yZSgpID09IFBCQUxXQVlTOworICAgIGJvb2wgY2hlY2tQYWdl
QnJlYWtzID0gIWNoZWNrQ29sdW1uQnJlYWtzICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9w
YWdlSGVpZ2h0OyAvLyBGSVhNRTogT25jZSBjb2x1bW5zIGNhbiBwcmludCB3ZSBoYXZlIHRvIGNo
ZWNrIHRoaXMuCisgICAgYm9vbCBjaGVja0JlZm9yZUFsd2F5cyA9IChjaGVja0NvbHVtbkJyZWFr
cyAmJiBjaGlsZC0+c3R5bGUoKS0+Y29sdW1uQnJlYWtCZWZvcmUoKSA9PSBQQkFMV0FZUykgfHwg
KGNoZWNrUGFnZUJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFrQmVmb3JlKCkgPT0g
UEJBTFdBWVMpOwogICAgIGlmIChjaGVja0JlZm9yZUFsd2F5cyAmJiBpbk5vcm1hbEZsb3coY2hp
bGQpKSB7CiAgICAgICAgIGlmIChjaGVja0NvbHVtbkJyZWFrcykKICAgICAgICAgICAgIHZpZXco
KS0+bGF5b3V0U3RhdGUoKS0+YWRkRm9yY2VkQ29sdW1uQnJlYWsoeVBvcyk7CkBAIC01OTIwLDcg
KzU5MjEsOCBAQCBpbnQgUmVuZGVyQmxvY2s6OmFwcGx5QWZ0ZXJCcmVhayhSZW5kZXJCCiB7CiAg
ICAgLy8gRklYTUU6IEFkZCBwYWdlIGJyZWFrIGNoZWNraW5nIGhlcmUgd2hlbiB3ZSBzdXBwb3J0
IHByaW50aW5nLgogICAgIGJvb2wgY2hlY2tDb2x1bW5CcmVha3MgPSB2aWV3KCktPmxheW91dFN0
YXRlKCktPmlzUGFnaW5hdGluZ0NvbHVtbnMoKTsKLSAgICBib29sIGNoZWNrQWZ0ZXJBbHdheXMg
PSBjaGVja0NvbHVtbkJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+Y29sdW1uQnJlYWtBZnRlcigp
ID09IFBCQUxXQVlTOworICAgIGJvb2wgY2hlY2tQYWdlQnJlYWtzID0gIWNoZWNrQ29sdW1uQnJl
YWtzICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdlSGVpZ2h0OyAvLyBGSVhNRTogT25j
ZSBjb2x1bW5zIGNhbiBwcmludCB3ZSBoYXZlIHRvIGNoZWNrIHRoaXMuCisgICAgYm9vbCBjaGVj
a0FmdGVyQWx3YXlzID0gKGNoZWNrQ29sdW1uQnJlYWtzICYmIGNoaWxkLT5zdHlsZSgpLT5jb2x1
bW5CcmVha0FmdGVyKCkgPT0gUEJBTFdBWVMpIHx8IChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQt
PnN0eWxlKCktPnBhZ2VCcmVha0FmdGVyKCkgPT0gUEJBTFdBWVMpOwogICAgIGlmIChjaGVja0Fm
dGVyQWx3YXlzICYmIGluTm9ybWFsRmxvdyhjaGlsZCkpIHsKICAgICAgICAgbWFyZ2luSW5mby5z
ZXRCb3R0b21RdWlyayh0cnVlKTsgLy8gQ2F1c2UgbWFyZ2lucyB0byBiZSBkaXNjYXJkZWQgZm9y
IGFueSBmb2xsb3dpbmcgY29udGVudC4KICAgICAgICAgaWYgKGNoZWNrQ29sdW1uQnJlYWtzKQpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiA2NzY3MSkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MTUsMTEgKzE1MTUs
MTEgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNIZWlnaHQoKQogICAgIC8vIGlzIHNwZWNpZmllZC4g
V2hlbiB3ZSdyZSBwcmludGluZywgd2UgYWxzbyBuZWVkIHRoaXMgcXVpcmsgaWYgdGhlIGJvZHkg
b3Igcm9vdCBoYXMgYSBwZXJjZW50YWdlIAogICAgIC8vIGhlaWdodCBzaW5jZSB3ZSBkb24ndCBz
ZXQgYSBoZWlnaHQgaW4gUmVuZGVyVmlldyB3aGVuIHdlJ3JlIHByaW50aW5nLiBTbyB3aXRob3V0
IHRoaXMgcXVpcmssIHRoZSAKICAgICAvLyBoZWlnaHQgaGFzIG5vdGhpbmcgdG8gYmUgYSBwZXJj
ZW50YWdlIG9mLCBhbmQgaXQgZW5kcyB1cCBiZWluZyAwLiBUaGF0IGlzIGJhZC4KLSAgICBib29s
IHBhZ2luYXRlZENvbnRlbnROZWVkc0Jhc2VIZWlnaHQgPSBkb2N1bWVudCgpLT5wYWdpbmF0ZWQo
KSAmJiBoLmlzUGVyY2VudCgpCisgICAgYm9vbCBwYWdpbmF0ZWRDb250ZW50TmVlZHNCYXNlSGVp
Z2h0ID0gZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSAmJiBoLmlzUGVyY2VudCgpCiAgICAgICAgICYm
IChpc1Jvb3QoKSB8fCAoaXNCb2R5KCkgJiYgZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkt
PnJlbmRlcmVyKCktPnN0eWxlKCktPmhlaWdodCgpLmlzUGVyY2VudCgpKSk7CiAgICAgaWYgKHN0
cmV0Y2hlc1RvVmlld0hlaWdodCgpIHx8IHBhZ2luYXRlZENvbnRlbnROZWVkc0Jhc2VIZWlnaHQp
IHsKICAgICAgICAgaW50IG1hcmdpbnMgPSBjb2xsYXBzZWRNYXJnaW5Ub3AoKSArIGNvbGxhcHNl
ZE1hcmdpbkJvdHRvbSgpOwotICAgICAgICBpbnQgdmlzSGVpZ2h0ID0gZG9jdW1lbnQoKS0+cHJp
bnRpbmcoKSA/IHZpZXcoKS0+ZnJhbWVWaWV3KCktPnBhZ2VIZWlnaHQoKSA6IHZpZXcoKS0+dmll
d0hlaWdodCgpOworICAgICAgICBpbnQgdmlzSGVpZ2h0ID0gZG9jdW1lbnQoKS0+cHJpbnRpbmco
KSA/IHZpZXcoKS0+cGFnZUhlaWdodCgpIDogdmlldygpLT52aWV3SGVpZ2h0KCk7CiAgICAgICAg
IGlmIChpc1Jvb3QoKSkKICAgICAgICAgICAgIHNldEhlaWdodChtYXgoaGVpZ2h0KCksIHZpc0hl
aWdodCAtIG1hcmdpbnMpKTsKICAgICAgICAgZWxzZSB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW1hZ2UuY3BwCShyZXZpc2lvbiA2NzY3MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklt
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDkgKzIxNCw2IEBAIHZvaWQgUmVuZGVySW1h
Z2U6OnBhaW50UmVwbGFjZWQoUGFpbnRJbmYKICAgICBpbnQgbGVmdFBhZCA9IHBhZGRpbmdMZWZ0
KCk7CiAgICAgaW50IHRvcFBhZCA9IHBhZGRpbmdUb3AoKTsKIAotICAgIGlmIChkb2N1bWVudCgp
LT5wcmludGluZygpICYmICF2aWV3KCktPnByaW50SW1hZ2VzKCkpCi0gICAgICAgIHJldHVybjsK
LQogICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0OwogCiAg
ICAgaWYgKCFtX2ltYWdlUmVzb3VyY2UtPmhhc0ltYWdlKCkgfHwgbV9pbWFnZVJlc291cmNlLT5l
cnJvck9jY3VycmVkKCkpIHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hM
aXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlz
dC5jcHAJKHJldmlzaW9uIDY3NjcxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJv
eExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNiArMTU5LDggQEAgdm9pZCBSZW5kZXJM
aW5lQm94TGlzdDo6cGFpbnQoUmVuZGVyQm94TQogICAgIGlmICghZmlyc3RMaW5lQm94KCkpCiAg
ICAgICAgIHJldHVybjsKIAorICAgIC8vIEZJWE1FOiBQYWludC10aW1lIHBhZ2luYXRpb24gaXMg
b2Jzb2xldGUgYW5kIGlzIG5vdyBvbmx5IHVzZWQgYnkgZW1iZWRkZWQgV2ViVmlld3MgaW5zaWRl
IEFwcEtpdAorICAgIC8vIE5TVmlld3MuICBEbyBub3QgYWRkIGFueSBtb3JlIGNvZGUgZm9yIHRo
aXMuCiAgICAgUmVuZGVyVmlldyogdiA9IHJlbmRlcmVyLT52aWV3KCk7CiAgICAgYm9vbCB1c2VQ
cmludFJlY3QgPSAhdi0+cHJpbnRSZWN0KCkuaXNFbXB0eSgpOwogICAgIApJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZGVvLmNwcAkocmV2aXNpb24gNjc2NzEpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWRlby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw5ICsxODcsNiBAQCB2b2lk
IFJlbmRlclZpZGVvOjpwYWludFJlcGxhY2VkKFBhaW50SW5mCiAgICAgTWVkaWFQbGF5ZXIqIG1l
ZGlhUGxheWVyID0gcGxheWVyKCk7CiAgICAgYm9vbCBkaXNwbGF5aW5nUG9zdGVyID0gdmlkZW9F
bGVtZW50KCktPnNob3VsZERpc3BsYXlQb3N0ZXJJbWFnZSgpOwogCi0gICAgaWYgKGRpc3BsYXlp
bmdQb3N0ZXIgJiYgZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSAmJiAhdmlldygpLT5wcmludEltYWdl
cygpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoIWRpc3BsYXlpbmdQb3N0ZXIpIHsKICAg
ICAgICAgaWYgKCFtZWRpYVBsYXllcikKICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZXcuY3BwCShyZXZpc2lvbiA2NzY3MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMSArNDgsMTIgQEAgUmVuZGVy
Vmlldzo6UmVuZGVyVmlldyhOb2RlKiBub2RlLCBGcmFtZQogICAgICwgbV9zZWxlY3Rpb25FbmQo
MCkKICAgICAsIG1fc2VsZWN0aW9uU3RhcnRQb3MoLTEpCiAgICAgLCBtX3NlbGVjdGlvbkVuZFBv
cygtMSkKLSAgICAsIG1fcHJpbnRJbWFnZXModHJ1ZSkKLSAgICAsIG1fbWF4aW1hbE91dGxpbmVT
aXplKDApCiAgICAgLCBtX2Jlc3RUcnVuY2F0ZWRBdCgwKQorICAgICwgbV90cnVuY2F0ZWRBdCgw
KQogICAgICwgbV90cnVuY2F0b3JXaWR0aCgwKQogICAgICwgbV9mb3JjZWRQYWdlQnJlYWsoZmFs
c2UpCisgICAgLCBtX21heGltYWxPdXRsaW5lU2l6ZSgwKQorICAgICwgbV9wYWdlSGVpZ2h0KDAp
CiAgICAgLCBtX2xheW91dFN0YXRlKDApCiAgICAgLCBtX2xheW91dFN0YXRlRGlzYWJsZUNvdW50
KDApCiB7CkBAIC0xMDAsNiArMTAxLDkgQEAgdm9pZCBSZW5kZXJWaWV3OjpjYWxjUHJlZldpZHRo
cygpCiAKIHZvaWQgUmVuZGVyVmlldzo6bGF5b3V0KCkKIHsKKyAgICBpZiAoIWRvY3VtZW50KCkt
PnBhZ2luYXRlZCgpKQorICAgICAgICBzZXRQYWdlSGVpZ2h0KDApOworCiAgICAgaWYgKHByaW50
aW5nKCkpCiAgICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGggPSB3aWR0aCgp
OwogCkBAIC0xMTcsNiArMTIxLDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpsYXlvdXQoKQogICAgIExh
eW91dFN0YXRlIHN0YXRlOwogICAgIC8vIEZJWE1FOiBNYXkgYmUgYmV0dGVyIHRvIHB1c2ggYSBj
bGlwIGFuZCBhdm9pZCBpc3N1aW5nIG9mZnNjcmVlbiByZXBhaW50cy4KICAgICBzdGF0ZS5tX2Ns
aXBwZWQgPSBmYWxzZTsKKyAgICBzdGF0ZS5tX3BhZ2VIZWlnaHQgPSBtX3BhZ2VIZWlnaHQ7CiAg
ICAgbV9sYXlvdXRTdGF0ZSA9ICZzdGF0ZTsKIAogICAgIGlmIChuZWVkc0xheW91dCgpKQpAQCAt
MTI2LDcgKzEzMSw2IEBAIHZvaWQgUmVuZGVyVmlldzo6bGF5b3V0KCkKICAgICBtX292ZXJmbG93
LmNsZWFyKCk7CiAgICAgYWRkTGF5b3V0T3ZlcmZsb3coSW50UmVjdCgwLCAwLCBkb2NXaWR0aCgp
LCBkb2NIZWlnaHQoKSkpOwogCi0KICAgICBBU1NFUlQobGF5b3V0RGVsdGEoKSA9PSBJbnRTaXpl
KCkpOwogICAgIEFTU0VSVChtX2xheW91dFN0YXRlRGlzYWJsZUNvdW50ID09IDApOwogICAgIEFT
U0VSVChtX2xheW91dFN0YXRlID09ICZzdGF0ZSk7CkBAIC0xNTQsMTIgKzE1OCw2IEBAIHZvaWQg
UmVuZGVyVmlldzo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEkKIHsKICAgICAvLyBJZiB3ZSBldmVy
IHJlcXVpcmUgbGF5b3V0IGJ1dCByZWNlaXZlIGEgcGFpbnQgYW55d2F5LCBzb21ldGhpbmcgaGFz
IGdvbmUgaG9ycmlibHkgd3JvbmcuCiAgICAgQVNTRVJUKCFuZWVkc0xheW91dCgpKTsKLQotICAg
IC8vIENhY2hlIHRoZSBwcmludCByZWN0IGJlY2F1c2UgdGhlIGRpcnR5IHJlY3QgY291bGQgZ2V0
IGNoYW5nZWQgZHVyaW5nIHBhaW50aW5nLgotICAgIGlmIChkb2N1bWVudCgpLT5wYWdpbmF0ZWQo
KSkKLSAgICAgICAgc2V0UHJpbnRSZWN0KHBhaW50SW5mby5yZWN0KTsKLSAgICBlbHNlCi0gICAg
ICAgIHNldFByaW50UmVjdChJbnRSZWN0KCkpOwogICAgIHBhaW50T2JqZWN0KHBhaW50SW5mbywg
dHgsIHR5KTsKIH0KIApAQCAtNjY3LDI5ICs2NjUsNiBAQCBmbG9hdCBSZW5kZXJWaWV3Ojp6b29t
RmFjdG9yKCkgY29uc3QKICAgICByZXR1cm4gbV9mcmFtZVZpZXctPnBhZ2Vab29tRmFjdG9yKCk7
CiB9CiAKLS8vIFRoZSBpZGVhIGhlcmUgaXMgdG8gdGFrZSBpbnRvIGFjY291bnQgd2hhdCBvYmpl
Y3QgaXMgbW92aW5nIHRoZSBwYWdpbmF0aW9uIHBvaW50LCBhbmQKLS8vIHRodXMgY2hvb3NlIHRo
ZSBiZXN0IHBsYWNlIHRvIGNob3AgaXQuCi12b2lkIFJlbmRlclZpZXc6OnNldEJlc3RUcnVuY2F0
ZWRBdChpbnQgeSwgUmVuZGVyQm94TW9kZWxPYmplY3QqIGZvclJlbmRlcmVyLCBib29sIGZvcmNl
ZEJyZWFrKQotewotICAgIC8vIE5vYm9keSBlbHNlIGNhbiBzZXQgYSBwYWdlIGJyZWFrIG9uY2Ug
d2UgaGF2ZSBhIGZvcmNlZCBicmVhay4KLSAgICBpZiAobV9mb3JjZWRQYWdlQnJlYWspCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIEZvcmNlZCBicmVha3MgYWx3YXlzIHdpbiBvdmVyIHVuZm9y
Y2VkIGJyZWFrcy4KLSAgICBpZiAoZm9yY2VkQnJlYWspIHsKLSAgICAgICAgbV9mb3JjZWRQYWdl
QnJlYWsgPSB0cnVlOwotICAgICAgICBtX2Jlc3RUcnVuY2F0ZWRBdCA9IHk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBQcmVmZXIgdGhlIHdpZGVzdCBvYmplY3QgdGhhdCB0cmll
cyB0byBtb3ZlIHRoZSBwYWdpbmF0aW9uIHBvaW50Ci0gICAgSW50UmVjdCBib3VuZGluZ0JveCA9
IGZvclJlbmRlcmVyLT5ib3JkZXJCb3VuZGluZ0JveCgpOwotICAgIGlmIChib3VuZGluZ0JveC53
aWR0aCgpID4gbV90cnVuY2F0b3JXaWR0aCkgewotICAgICAgICBtX3RydW5jYXRvcldpZHRoID0g
Ym91bmRpbmdCb3gud2lkdGgoKTsKLSAgICAgICAgbV9iZXN0VHJ1bmNhdGVkQXQgPSB5OwotICAg
IH0KLX0KLQogdm9pZCBSZW5kZXJWaWV3OjpwdXNoTGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KiBy
b290KQogewogICAgIEFTU0VSVChtX2xheW91dFN0YXRlRGlzYWJsZUNvdW50ID09IDApOwpAQCAt
NzIzLDYgKzY5OCwzMSBAQCB2b2lkIFJlbmRlclZpZXc6OnVwZGF0ZUhpdFRlc3RSZXN1bHQoSGl0
CiAgICAgfQogfQogCisvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBpcyBvYnNvbGV0ZSBhbmQgb25s
eSB1c2VkIGJ5IGVtYmVkZGVkIFdlYlZpZXdzIGluc2lkZSBBcHBLaXQgTlNWaWV3cy4KKy8vIERv
IG5vdCBhZGQgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uIQorLy8gVGhlIGlkZWEgaGVyZSBpcyB0
byB0YWtlIGludG8gYWNjb3VudCB3aGF0IG9iamVjdCBpcyBtb3ZpbmcgdGhlIHBhZ2luYXRpb24g
cG9pbnQsIGFuZAorLy8gdGh1cyBjaG9vc2UgdGhlIGJlc3QgcGxhY2UgdG8gY2hvcCBpdC4KK3Zv
aWQgUmVuZGVyVmlldzo6c2V0QmVzdFRydW5jYXRlZEF0KGludCB5LCBSZW5kZXJCb3hNb2RlbE9i
amVjdCogZm9yUmVuZGVyZXIsIGJvb2wgZm9yY2VkQnJlYWspCit7CisgICAgLy8gTm9ib2R5IGVs
c2UgY2FuIHNldCBhIHBhZ2UgYnJlYWsgb25jZSB3ZSBoYXZlIGEgZm9yY2VkIGJyZWFrLgorICAg
IGlmIChtX2ZvcmNlZFBhZ2VCcmVhaykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRm9yY2Vk
IGJyZWFrcyBhbHdheXMgd2luIG92ZXIgdW5mb3JjZWQgYnJlYWtzLgorICAgIGlmIChmb3JjZWRC
cmVhaykgeworICAgICAgICBtX2ZvcmNlZFBhZ2VCcmVhayA9IHRydWU7CisgICAgICAgIG1fYmVz
dFRydW5jYXRlZEF0ID0geTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFByZWZl
ciB0aGUgd2lkZXN0IG9iamVjdCB0aGF0IHRyaWVzIHRvIG1vdmUgdGhlIHBhZ2luYXRpb24gcG9p
bnQKKyAgICBJbnRSZWN0IGJvdW5kaW5nQm94ID0gZm9yUmVuZGVyZXItPmJvcmRlckJvdW5kaW5n
Qm94KCk7CisgICAgaWYgKGJvdW5kaW5nQm94LndpZHRoKCkgPiBtX3RydW5jYXRvcldpZHRoKSB7
CisgICAgICAgIG1fdHJ1bmNhdG9yV2lkdGggPSBib3VuZGluZ0JveC53aWR0aCgpOworICAgICAg
ICBtX2Jlc3RUcnVuY2F0ZWRBdCA9IHk7CisgICAgfQorfQorCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogYm9vbCBSZW5kZXJWaWV3Ojp1c2VzQ29tcG9zaXRpbmcoKSBjb25zdAog
ewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkocmV2aXNpb24gNjc2NzEpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDE3ICs3Nyw2IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNlbGVjdGlvblN0YXJ0RW5kKGludCYgc3RhcnRQb3MsIGludCYg
ZW5kUG9zKSBjb25zdDsKIAogICAgIGJvb2wgcHJpbnRpbmcoKSBjb25zdDsKLSAgICB2b2lkIHNl
dFByaW50SW1hZ2VzKGJvb2wgZW5hYmxlKSB7IG1fcHJpbnRJbWFnZXMgPSBlbmFibGU7IH0KLSAg
ICBib29sIHByaW50SW1hZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9wcmludEltYWdlczsgfQotCi0g
ICAgSW50UmVjdCBwcmludFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3ByaW50UmVjdDsgfQotICAg
IHZvaWQgc2V0UHJpbnRSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsgbV9wcmludFJlY3QgPSByOyB9
Ci0KLSAgICB2b2lkIHNldFRydW5jYXRlZEF0KGludCB5KSB7IG1fdHJ1bmNhdGVkQXQgPSB5OyBt
X2Jlc3RUcnVuY2F0ZWRBdCA9IG1fdHJ1bmNhdG9yV2lkdGggPSAwOyBtX2ZvcmNlZFBhZ2VCcmVh
ayA9IGZhbHNlOyB9Ci0gICAgdm9pZCBzZXRCZXN0VHJ1bmNhdGVkQXQoaW50IHksIFJlbmRlckJv
eE1vZGVsT2JqZWN0KiBmb3JSZW5kZXJlciwgYm9vbCBmb3JjZWRCcmVhayA9IGZhbHNlKTsKLSAg
ICBpbnQgYmVzdFRydW5jYXRlZEF0KCkgY29uc3QgeyByZXR1cm4gbV9iZXN0VHJ1bmNhdGVkQXQ7
IH0KLSAgICAKLSAgICBpbnQgdHJ1bmNhdGVkQXQoKSBjb25zdCB7IHJldHVybiBtX3RydW5jYXRl
ZEF0OyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4m
LCBpbnQgdHgsIGludCB0eSk7CiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9y
PEZsb2F0UXVhZD4mKTsKQEAgLTEyMCwyMyArMTA5LDkgQEAgcHVibGljOgogCiAgICAgYm9vbCBk
b2luZ0Z1bGxSZXBhaW50KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVZpZXctPm5lZWRzRnVsbFJl
cGFpbnQoKTsgfQogCi0gICAgdm9pZCBwdXNoTGF5b3V0U3RhdGUoUmVuZGVyQm94KiByZW5kZXJl
ciwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0LCBpbnQgcGFnZUhlaWdodCA9IDAsIENvbHVtbkluZm8q
IGNvbEluZm8gPSAwKQotICAgIHsKLSAgICAgICAgLy8gV2UgcHVzaCBMYXlvdXRTdGF0ZSBldmVu
IGlmIGxheW91dFN0YXRlIGlzIGRpc2FibGVkIGJlY2F1c2UgaXQgc3RvcmVzIGxheW91dERlbHRh
IHRvby4KLSAgICAgICAgaWYgKCFkb2luZ0Z1bGxSZXBhaW50KCkgfHwgcmVuZGVyZXItPmhhc0Nv
bHVtbnMoKSB8fCBtX2xheW91dFN0YXRlLT5pc1BhZ2luYXRlZCgpKQotICAgICAgICAgICAgbV9s
YXlvdXRTdGF0ZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgTGF5b3V0U3RhdGUobV9sYXlvdXRTdGF0
ZSwgcmVuZGVyZXIsIG9mZnNldCwgcGFnZUhlaWdodCwgY29sSW5mbyk7Ci0gICAgfQotCisgICAg
Ly8gU3VidHJlZSBwdXNoL3BvcAogICAgIHZvaWQgcHVzaExheW91dFN0YXRlKFJlbmRlck9iamVj
dCopOwotCi0gICAgdm9pZCBwb3BMYXlvdXRTdGF0ZSgpCi0gICAgewotICAgICAgICBMYXlvdXRT
dGF0ZSogc3RhdGUgPSBtX2xheW91dFN0YXRlOwotICAgICAgICBpZiAoZG9pbmdGdWxsUmVwYWlu
dCgpICYmICFtX2xheW91dFN0YXRlLT5pc1BhZ2luYXRlZCgpKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBtX2xheW91dFN0YXRlID0gc3RhdGUtPm1fbmV4dDsKLSAgICAgICAgc3RhdGUt
PmRlc3Ryb3kocmVuZGVyQXJlbmEoKSk7Ci0gICAgfQorICAgIHZvaWQgcG9wTGF5b3V0U3RhdGUo
UmVuZGVyT2JqZWN0KikgeyByZXR1cm4gcG9wTGF5b3V0U3RhdGUoKTsgfSAvLyBKdXN0IGRvaW5n
IHRoaXMgdG8ga2VlcCBwb3BMYXlvdXRTdGF0ZSgpIHByaXZhdGUgYW5kIHRvIG1ha2UgdGhlIHN1
YnRyZWUgY2FsbHMgc3ltbWV0cmljYWwuCiAKICAgICBib29sIHNob3VsZERpc2FibGVMYXlvdXRT
dGF0ZUZvclN1YnRyZWUoUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAKQEAgLTE1Myw2ICsxMjgsMjQg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUhpdFRlc3RSZXN1bHQoSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IEludFBvaW50Jik7CiAKKyAgICB1bnNpZ25lZCBwYWdlSGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9wYWdlSGVpZ2h0OyB9CisgICAgdm9pZCBzZXRQYWdlSGVpZ2h0KHVu
c2lnbmVkIGhlaWdodCkKKyAgICB7CisgICAgICAgIGlmIChtX3BhZ2VIZWlnaHQgIT0gaGVpZ2h0
KSB7CisgICAgICAgICAgICBtX3BhZ2VIZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgICAgICBtYXJr
RGVzY2VuZGFudEJsb2Nrc0FuZExpbmVzRm9yTGF5b3V0KCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBGSVhNRTogVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXByZWNhdGVkLiBObyBjb2RlIHNo
b3VsZCBiZSBhZGRlZCB0aGF0IHVzZXMgdGhlc2UuCisgICAgaW50IGJlc3RUcnVuY2F0ZWRBdCgp
IGNvbnN0IHsgcmV0dXJuIG1fYmVzdFRydW5jYXRlZEF0OyB9CisgICAgdm9pZCBzZXRCZXN0VHJ1
bmNhdGVkQXQoaW50IHksIFJlbmRlckJveE1vZGVsT2JqZWN0KiBmb3JSZW5kZXJlciwgYm9vbCBm
b3JjZWRCcmVhayA9IGZhbHNlKTsKKyAgICBpbnQgdHJ1bmNhdGVkQXQoKSBjb25zdCB7IHJldHVy
biBtX3RydW5jYXRlZEF0OyB9CisgICAgdm9pZCBzZXRUcnVuY2F0ZWRBdChpbnQgeSkgeyBtX3Ry
dW5jYXRlZEF0ID0geTsgbV9iZXN0VHJ1bmNhdGVkQXQgPSBtX3RydW5jYXRvcldpZHRoID0gMDsg
bV9mb3JjZWRQYWdlQnJlYWsgPSBmYWxzZTsgfQorICAgIGNvbnN0IEludFJlY3QmIHByaW50UmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbnRSZWN0OyB9CisgICAgdm9pZCBzZXRQcmludFJlY3Qo
Y29uc3QgSW50UmVjdCYgcikgeyBtX3ByaW50UmVjdCA9IHI7IH0KKyAgICAvLyBFbmQgZGVwcmVj
YXRlZCBmdW5jdGlvbnMuCisKICAgICAvLyBOb3RpZmljYXRpb25zIHRoYXQgdGhpcyB2aWV3IGJl
Y2FtZSB2aXNpYmxlIGluIGEgd2luZG93LCBvciB3aWxsIGJlCiAgICAgLy8gcmVtb3ZlZCBmcm9t
IHRoZSB3aW5kb3cuCiAgICAgdm9pZCBkaWRNb3ZlT25zY3JlZW4oKTsKQEAgLTE3Myw2ICsxNjYs
MjYgQEAgcHJpdmF0ZToKICAgICBpbnQgZG9jSGVpZ2h0KCkgY29uc3Q7CiAgICAgaW50IGRvY1dp
ZHRoKCkgY29uc3Q7CiAKKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgbWF5IG9ubHkgYmUgYWNjZXNz
ZWQgYnkgTGF5b3V0U3RhdGVNYWludGFpbmVyLgorICAgIGJvb2wgcHVzaExheW91dFN0YXRlKFJl
bmRlckJveCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIG9mZnNldCwgaW50IHBhZ2VIZWlnaHQg
PSAwLCBDb2x1bW5JbmZvKiBjb2xJbmZvID0gMCkKKyAgICB7CisgICAgICAgIC8vIFdlIHB1c2gg
TGF5b3V0U3RhdGUgZXZlbiBpZiBsYXlvdXRTdGF0ZSBpcyBkaXNhYmxlZCBiZWNhdXNlIGl0IHN0
b3JlcyBsYXlvdXREZWx0YSB0b28uCisgICAgICAgIGlmICghZG9pbmdGdWxsUmVwYWludCgpIHx8
IHJlbmRlcmVyLT5oYXNDb2x1bW5zKCkgfHwgbV9sYXlvdXRTdGF0ZS0+aXNQYWdpbmF0ZWQoKSkg
eworICAgICAgICAgICAgbV9sYXlvdXRTdGF0ZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgTGF5b3V0
U3RhdGUobV9sYXlvdXRTdGF0ZSwgcmVuZGVyZXIsIG9mZnNldCwgcGFnZUhlaWdodCwgY29sSW5m
byk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgdm9pZCBwb3BMYXlvdXRTdGF0ZSgpCisgICAgeworICAgICAg
ICBMYXlvdXRTdGF0ZSogc3RhdGUgPSBtX2xheW91dFN0YXRlOworICAgICAgICBtX2xheW91dFN0
YXRlID0gc3RhdGUtPm1fbmV4dDsKKyAgICAgICAgc3RhdGUtPmRlc3Ryb3kocmVuZGVyQXJlbmEo
KSk7CisgICAgfQorICAgIAorICAgIGZyaWVuZCBjbGFzcyBMYXlvdXRTdGF0ZU1haW50YWluZXI7
CisgICAgICAgIAogcHJvdGVjdGVkOgogICAgIEZyYW1lVmlldyogbV9mcmFtZVZpZXc7CiAKQEAg
LTE4MSwyMSArMTk0LDIxIEBAIHByb3RlY3RlZDoKICAgICBpbnQgbV9zZWxlY3Rpb25TdGFydFBv
czsKICAgICBpbnQgbV9zZWxlY3Rpb25FbmRQb3M7CiAKLSAgICAvLyB1c2VkIHRvIGlnbm9yZSB2
aWV3cG9ydCB3aWR0aCB3aGVuIHByaW50aW5nIHRvIHRoZSBwcmludGVyCi0gICAgYm9vbCBtX3By
aW50SW1hZ2VzOworICAgIC8vIEZJWE1FOiBPbmx5IHVzZWQgYnkgZW1iZWRkZWQgV2ViVmlld3Mg
aW5zaWRlIEFwcEtpdCBOU1ZpZXdzLiAgRmluZCBhIHdheSB0byByZW1vdmUuCisgICAgaW50IG1f
YmVzdFRydW5jYXRlZEF0OwogICAgIGludCBtX3RydW5jYXRlZEF0OworICAgIGludCBtX3RydW5j
YXRvcldpZHRoOworICAgIEludFJlY3QgbV9wcmludFJlY3Q7CisgICAgYm9vbCBtX2ZvcmNlZFBh
Z2VCcmVhazsKKyAgICAvLyBFbmQgZGVwcmVjYXRlZCBtZW1iZXJzLgogCiAgICAgaW50IG1fbWF4
aW1hbE91dGxpbmVTaXplOyAvLyBVc2VkIHRvIGFwcGx5IGEgZnVkZ2UgZmFjdG9yIHRvIGRpcnR5
LXJlY3QgY2hlY2tzIG9uIGJsb2Nrcy90YWJsZXMuCi0gICAgSW50UmVjdCBtX3ByaW50UmVjdDsg
Ly8gVXNlZCB3aGVuIHByaW50aW5nLgogCiAgICAgdHlwZWRlZiBIYXNoU2V0PFJlbmRlcldpZGdl
dCo+IFJlbmRlcldpZGdldFNldDsKLQogICAgIFJlbmRlcldpZGdldFNldCBtX3dpZGdldHM7Ci0K
KyAgICAKIHByaXZhdGU6Ci0gICAgaW50IG1fYmVzdFRydW5jYXRlZEF0OwotICAgIGludCBtX3Ry
dW5jYXRvcldpZHRoOwotICAgIGJvb2wgbV9mb3JjZWRQYWdlQnJlYWs7CisgICAgdW5zaWduZWQg
bV9wYWdlSGVpZ2h0OwogICAgIExheW91dFN0YXRlKiBtX2xheW91dFN0YXRlOwogICAgIHVuc2ln
bmVkIG1fbGF5b3V0U3RhdGVEaXNhYmxlQ291bnQ7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQpAQCAtMjI4LDYgKzI0MSw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2Rpc2FibGVk
KGRpc2FibGVTdGF0ZSkKICAgICAgICAgLCBtX2RpZFN0YXJ0KGZhbHNlKQogICAgICAgICAsIG1f
ZGlkRW5kKGZhbHNlKQorICAgICAgICAsIG1fZGlkQ3JlYXRlTGF5b3V0U3RhdGUoZmFsc2UpCiAg
ICAgewogICAgICAgICBwdXNoKHJvb3QsIG9mZnNldCwgcGFnZUhlaWdodCwgY29sSW5mbyk7CiAg
ICAgfQpAQCAtMjM4LDYgKzI1Miw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2Rpc2FibGVkKGZh
bHNlKQogICAgICAgICAsIG1fZGlkU3RhcnQoZmFsc2UpCiAgICAgICAgICwgbV9kaWRFbmQoZmFs
c2UpCisgICAgICAgICwgbV9kaWRDcmVhdGVMYXlvdXRTdGF0ZShmYWxzZSkKICAgICB7CiAgICAg
fQogICAgIApAQCAtMjUwLDggKzI2NSw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VS
VCghbV9kaWRTdGFydCk7CiAgICAgICAgIC8vIFdlIHB1c2ggc3RhdGUgZXZlbiBpZiBkaXNhYmxl
ZCwgYmVjYXVzZSB3ZSBzdGlsbCBuZWVkIHRvIHN0b3JlIGxheW91dERlbHRhCi0gICAgICAgIG1f
dmlldy0+cHVzaExheW91dFN0YXRlKHJvb3QsIG9mZnNldCwgcGFnZUhlaWdodCwgY29sSW5mbyk7
Ci0gICAgICAgIGlmIChtX2Rpc2FibGVkKQorICAgICAgICBtX2RpZENyZWF0ZUxheW91dFN0YXRl
ID0gbV92aWV3LT5wdXNoTGF5b3V0U3RhdGUocm9vdCwgb2Zmc2V0LCBwYWdlSGVpZ2h0LCBjb2xJ
bmZvKTsKKyAgICAgICAgaWYgKG1fZGlzYWJsZWQgJiYgbV9kaWRDcmVhdGVMYXlvdXRTdGF0ZSkK
ICAgICAgICAgICAgIG1fdmlldy0+ZGlzYWJsZUxheW91dFN0YXRlKCk7CiAgICAgICAgIG1fZGlk
U3RhcnQgPSB0cnVlOwogICAgIH0KQEAgLTI2MCw5ICsyNzUsMTIgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgaWYgKG1fZGlkU3RhcnQpIHsKICAgICAgICAgICAgIEFTU0VSVCghbV9kaWRFbmQp
OwotICAgICAgICAgICAgbV92aWV3LT5wb3BMYXlvdXRTdGF0ZSgpOwotICAgICAgICAgICAgaWYg
KG1fZGlzYWJsZWQpCi0gICAgICAgICAgICAgICAgbV92aWV3LT5lbmFibGVMYXlvdXRTdGF0ZSgp
OworICAgICAgICAgICAgaWYgKG1fZGlkQ3JlYXRlTGF5b3V0U3RhdGUpIHsKKyAgICAgICAgICAg
ICAgICBtX3ZpZXctPnBvcExheW91dFN0YXRlKCk7CisgICAgICAgICAgICAgICAgaWYgKG1fZGlz
YWJsZWQpCisgICAgICAgICAgICAgICAgICAgIG1fdmlldy0+ZW5hYmxlTGF5b3V0U3RhdGUoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgbV9kaWRFbmQgPSB0cnVl
OwogICAgICAgICB9CiAgICAgfQpAQCAtMjc0LDYgKzI5Miw3IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX2Rpc2FibGVkIDogMTsgICAgICAgIC8vIHRydWUgaWYgdGhlIG9mZnNldCBhbmQgY2xpcCBw
YXJ0IG9mIGxheW91dFN0YXRlIGlzIGRpc2FibGVkCiAgICAgYm9vbCBtX2RpZFN0YXJ0IDogMTsg
ICAgICAgIC8vIHRydWUgaWYgd2UgZGlkIGEgcHVzaCBvciBkaXNhYmxlCiAgICAgYm9vbCBtX2Rp
ZEVuZCA6IDE7ICAgICAgICAgIC8vIHRydWUgaWYgd2UgcG9wcGVkIG9yIHJlLWVuYWJsZWQKKyAg
ICBib29sIG1fZGlkQ3JlYXRlTGF5b3V0U3RhdGU7IC8vIHRydWUgaWYgd2UgYWN0dWFsbHkgbWFk
ZSBhIGxheW91dCBzdGF0ZS4KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDY3NzQ4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDktMTcgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTk5MywgY29udmVydCBwcmlu
dGluZyB0byB0aGUgbmV3IHBhZ2luYXRpb24gbW9kZWwuCisKKyAgICAgICAgUmVtb3ZlIHRoZSBv
dmVyZmxvdyB0ZXN0LCBzaW5jZSB0aGUgbmV3IG1vZGVsIHRyZWF0cyBvdmVyZmxvdzphdXRvL3Nj
cm9sbCBhcyB1bnNwbGl0dGFibGUuCisKKyAgICAgICAgKiBwcmludGluZy9wYWdlLWJyZWFrLWFs
d2F5cy1mb3Itb3ZlcmZsb3ctZXhwZWN0ZWQudHh0OiBSZW1vdmVkLgorICAgICAgICAqIHByaW50
aW5nL3BhZ2UtYnJlYWstYWx3YXlzLWZvci1vdmVyZmxvdy5odG1sOiBSZW1vdmVkLgorCiAyMDEw
LTA5LTE3ICBNaWhhaSBQYXJwYXJpdGEgIDxtaWhhaXBAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5kZXg6IExheW91dFRlc3RzL3ByaW50aW5n
L3BhZ2UtYnJlYWstYWx3YXlzLWZvci1vdmVyZmxvdy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvcHJpbnRpbmcvcGFnZS1icmVhay1hbHdheXMtZm9yLW92ZXJmbG93LWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gNjc2NzEpCisrKyBMYXlvdXRUZXN0cy9wcmludGluZy9wYWdl
LWJyZWFrLWFsd2F5cy1mb3Itb3ZlcmZsb3ctZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0xLDIxICswLDAgQEAKLVRlc3QgcGFnZS1icmVhay17YmVmb3JlLGFmdGVyfTphbHdheXMgZm9y
IG92ZXJmbG93Ont2aXNpYmxlLGhpZGRlbixzY3JvbGwsYXV0b30gZWxlbWVudHMuCi0KLU9uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KLQotCi0KLVBBU1M6IHBhZ2UgbnVtYmVyIG9mICJ0ZXN0LXBh
Z2UtYnJlYWstYmVmb3JlOmFsd2F5cy1mb3Itb3ZlcmZsb3c6dmlzaWJsZSIgaXMgMQotUEFTUzog
cGFnZSBudW1iZXIgb2YgInRlc3QtcGFnZS1icmVhay1iZWZvcmU6YWx3YXlzLWZvci1vdmVyZmxv
dzpoaWRkZW4iIGlzIDIKLVBBU1M6IHBhZ2UgbnVtYmVyIG9mICJ0ZXN0LXBhZ2UtYnJlYWstYmVm
b3JlOmFsd2F5cy1mb3Itb3ZlcmZsb3c6c2Nyb2xsIiBpcyAzCi1QQVNTOiBwYWdlIG51bWJlciBv
ZiAidGVzdC1wYWdlLWJyZWFrLWJlZm9yZTphbHdheXMtZm9yLW92ZXJmbG93OmF1dG8iIGlzIDQK
LVBBU1M6IHBhZ2UgbnVtYmVyIG9mICJ0ZXN0LXBhZ2UtYnJlYWstYWZ0ZXI6YWx3YXlzLWZvci1v
dmVyZmxvdzp2aXNpYmxlIiBpcyA0Ci1QQVNTOiBwYWdlIG51bWJlciBvZiAidGVzdC1wYWdlLWJy
ZWFrLWFmdGVyOmFsd2F5cy1mb3Itb3ZlcmZsb3c6aGlkZGVuIiBpcyA1Ci1QQVNTOiBwYWdlIG51
bWJlciBvZiAidGVzdC1wYWdlLWJyZWFrLWFmdGVyOmFsd2F5cy1mb3Itb3ZlcmZsb3c6c2Nyb2xs
IiBpcyA2Ci1QQVNTOiBwYWdlIG51bWJlciBvZiAidGVzdC1wYWdlLWJyZWFrLWFmdGVyOmFsd2F5
cy1mb3Itb3ZlcmZsb3c6YXV0byIgaXMgNwotUEFTUzogcGFnZSBudW1iZXIgb2YgInRlc3QtbGFz
dC1wYWdlIiBpcyA4Ci1BbGwgdGVzdHMgcGFzc2VkCi0KLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCkluZGV4OiBMYXlvdXRUZXN0cy9wcmludGluZy9w
YWdlLWJyZWFrLWFsd2F5cy1mb3Itb3ZlcmZsb3cuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9wcmludGluZy9wYWdlLWJyZWFrLWFsd2F5cy1mb3Itb3ZlcmZsb3cuaHRtbAkocmV2aXNp
b24gNjc2NzEpCisrKyBMYXlvdXRUZXN0cy9wcmludGluZy9wYWdlLWJyZWFrLWFsd2F5cy1mb3It
b3ZlcmZsb3cuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSwxNiArMCwwIEBACi08IURPQ1RZUEUg
SFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0
eWxlLmNzcyI+Ci08c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9InJlc291cmNlcy9wYWdlZC1tZWRpYS10ZXN0LXV0
aWxzLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPHAgaWQ9ImRlc2NyaXB0aW9uIj48
L3A+Ci08ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KLTxkaXYgaWQ9InNhbmRib3giPjwvZGl2Pgot
PHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9wYWdlLWJyZWFrLWFsd2F5cy1mb3Itb3ZlcmZsb3cu
anMiPjwvc2NyaXB0PgotPHNjcmlwdD5ydW5QcmludGluZ1Rlc3QodGVzdCk7PC9zY3JpcHQ+Ci08
c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Njcmlw
dD4KLTwvYm9keT4KLTwvaHRtbD4K
</data>
<flag name="review"
          id="57384"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>