<?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>46422</bug_id>
          
          <creation_ts>2010-09-23 15:28:56 -0700</creation_ts>
          <short_desc>Make printing and pagination work with vertical text.</short_desc>
          <delta_ts>2011-03-23 13:29:04 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>56958</dependson>
          <blocked>46123</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>284037</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-23 15:28:56 -0700</bug_when>
    <thetext>Make printing and pagination work with vertical text.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302112</commentid>
    <comment_count>1</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2010-10-29 15:14:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/8612055&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322042</commentid>
    <comment_count>2</comment_count>
      <attachid>76546</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-12-14 10:32:22 -0800</bug_when>
    <thetext>Created attachment 76546
Part 1: Rename pageHeight -&gt; pageLogicalHeight</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322091</commentid>
    <comment_count>3</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-12-14 11:58:47 -0800</bug_when>
    <thetext>Part 1 landed in r74048.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322653</commentid>
    <comment_count>4</comment_count>
      <attachid>76659</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-12-15 10:02:32 -0800</bug_when>
    <thetext>Created attachment 76659
Part 2: pageY -&gt; pageLogicalOffset</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322656</commentid>
    <comment_count>5</comment_count>
      <attachid>76659</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-15 10:06:38 -0800</bug_when>
    <thetext>Comment on attachment 76659
Part 2: pageY -&gt; pageLogicalOffset

r=me, but please add comments to the headers explaining what pageLogicalOffset really means.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322659</commentid>
    <comment_count>6</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-12-15 10:11:05 -0800</bug_when>
    <thetext>Part 2 landed in r74121.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324037</commentid>
    <comment_count>7</comment_count>
      <attachid>76659</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-17 16:37:27 -0800</bug_when>
    <thetext>Comment on attachment 76659
Part 2: pageY -&gt; pageLogicalOffset

Marking obsolete since landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324038</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-17 16:37:40 -0800</bug_when>
    <thetext>Did you still want this open Hyatt?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324040</commentid>
    <comment_count>9</comment_count>
      <attachid>76546</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-17 16:38:52 -0800</bug_when>
    <thetext>Comment on attachment 76546
Part 1: Rename pageHeight -&gt; pageLogicalHeight

Cleared Timothy Hatcher&apos;s review+ from obsolete attachment 76546 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324041</commentid>
    <comment_count>10</comment_count>
      <attachid>76659</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-17 16:38:55 -0800</bug_when>
    <thetext>Comment on attachment 76659
Part 2: pageY -&gt; pageLogicalOffset

Cleared Simon Fraser&apos;s review+ from obsolete attachment 76659 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341130</commentid>
    <comment_count>11</comment_count>
      <attachid>80377</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-01-27 16:55:00 -0800</bug_when>
    <thetext>Created attachment 80377
vertical-lr works great.  vertical-rl prints correctly but spasms the scrollbar in WebKit2.  vertical-rl does not print correctly in Mac WebKit1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341199</commentid>
    <comment_count>12</comment_count>
      <attachid>80377</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-27 18:00:14 -0800</bug_when>
    <thetext>Comment on attachment 80377
vertical-lr works great.  vertical-rl prints correctly but spasms the scrollbar in WebKit2.  vertical-rl does not print correctly in Mac WebKit1.

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

Apparently the patch doesn’t apply so the EWS is not helping you. You may want to post a later version just to let the EWS double check things, but since so much of this is Mac-specific that may not matter.

&gt; Source/WebCore/page/FrameView.cpp:2285
&gt; +        root-&gt;setPageLogicalHeight(root-&gt;style()-&gt;isHorizontalWritingMode() ? pageSize.height() : pageSize.width());

You meant to use your pageLogicalHeight local variable here, right? Why repeat the expression?

&gt; Source/WebCore/page/FrameView.cpp:2295
&gt; +            flooredPageLogicalWidth = std::min&lt;int&gt;(docLogicalWidth, static_cast&lt;int&gt;(pageLogicalWidth * maximumShrinkFactor));

You can use min without the std:: prefix if you put the using namespace std at the top of the file. Even though that’s not new.

Given that you specify min&lt;int&gt; I am surprised you need the static_cast.

I think you should put a small comment explaining why you use floor. It may be hard to keep the comment short, though!

&gt; Source/WebCore/page/PrintContext.cpp:89
&gt; +        pageWidth  = view-&gt;docWidth();

I don’t like those extra spaces.

&gt; Source/WebCore/page/PrintContext.cpp:90
&gt; +        pageHeight = floor(pageWidth * ratio);

Since this is float, you should use floor like the old code. Because floor is for double, not float.

&gt; Source/WebCore/page/PrintContext.cpp:93
&gt; +        pageHeight  = view-&gt;docHeight();

Same.

&gt; Source/WebCore/page/PrintContext.cpp:94
&gt; +        pageWidth = floor(pageHeight * ratio);

Same.

&gt; Source/WebCore/page/PrintContext.cpp:162
&gt; +        int pageLogicalTop = blockDirectionEnd &gt; blockDirectionStart ?
&gt; +                                blockDirectionStart + i * pageLogicalHeight : 
&gt; +                                blockDirectionStart - (i + 1) * pageLogicalHeight;

I don’t love this formatting. I prefer to put the ? and : at the starts of the lines and use 4-character indent. Like this:

    int pageLogicalTop = blockDirectionEnd &gt; blockDirectionStart
        ? blockDirectionStart + i * pageLogicalHeight
        :  blockDirectionStart - (i + 1) * pageLogicalHeight;

Hope bugs.webkit.org doesn’t wrap that, but you’ll get the idea.

&gt; Source/WebCore/page/PrintContext.cpp:166
&gt; +            for (int currentInlinePosition = inlineDirectionStart;
&gt; +                 inlineDirectionEnd &gt; inlineDirectionStart ? currentInlinePosition &lt; inlineDirectionEnd : currentInlinePosition &gt; inlineDirectionEnd;
&gt; +                 currentInlinePosition += (inlineDirectionEnd &gt; inlineDirectionStart ? pageLogicalWidth : -pageLogicalWidth)) {

A bool for inlineDirectionEnd &gt; inlineDirectionStart could help if you can find a small enough name for it.

&gt; Source/WebCore/page/PrintContext.cpp:200
&gt; +    bool useViewWidth = true;

The boolean here is a little confusing. I had no idea that false meant to use the height. Might be better with orientation or something.

&gt; Source/WebKit/mac/WebView/WebHTMLView.mm:2226
&gt; +    bool isHorizontal = true;
&gt; +    Document* document = frame-&gt;document();
&gt; +    if (document &amp;&amp; document-&gt;renderView() &amp;&amp; !document-&gt;renderView()-&gt;style()-&gt;isHorizontalWritingMode())
&gt; +        isHorizontal = false;

You could just initialize isHorizontal here instead of using an if.

    Document* document = frame-&gt;document();
    bool isHorizontal = !document || !document-&gt;renderView() || document-&gt;renderView()-&gt;style()-&gt;isHorizontalWritingMode();

Or you could set it inside the if like this:

    bool isHorizontal = true;
    Document* document = frame-&gt;document();
    if (document &amp;&amp; document-&gt;renderView())
        isHorizontal = document-&gt;renderView()-&gt;style()-&gt;isHorizontalWritingMode());

&gt; Source/WebKit/mac/WebView/WebHTMLView.mm:2263
&gt; +    bool isHorizontal = true;
&gt; +    Document* document = frame-&gt;document();
&gt; +    if (document &amp;&amp; document-&gt;renderView() &amp;&amp; !document-&gt;renderView()-&gt;style()-&gt;isHorizontalWritingMode())
&gt; +        isHorizontal = false;

Same comment as above. Maybe you should make a little helper function that takes a frame and gives you this boolean.

&gt; Source/WebKit/mac/WebView/WebHTMLView.mm:3155
&gt; +        if (minPageLogicalWidth &gt; 0.0) {

Maybe just &gt; 0 rather than &gt; 0.0.

&gt; Source/WebKit/mac/WebView/WebHTMLView.mm:3979
&gt; +    bool useViewWidth = true;
&gt; +    Frame* coreFrame = core([self _frame]);
&gt; +    if (coreFrame) {
&gt; +        Document* document = coreFrame-&gt;document();
&gt; +        if (document &amp;&amp; document-&gt;renderView())
&gt; +            useViewWidth = document-&gt;renderView()-&gt;style()-&gt;isHorizontalWritingMode();
&gt; +    }

This could use that frame helper I mentioned above.

Also, I am slightly annoyed that you use local variables for frame, then document, but then decide not to for renderView. What changed at that level?

&gt; Source/WebKit/mac/WebView/WebHTMLView.mm:3981
&gt; +    float viewLogicalWidth = useViewWidth ? NSWidth([self bounds]) : NSHeight([self bounds]);

This should be CGFloat since it’s getting things directly from NSWidth. But then inside WebCore I guess it’s all float. Somewhere it narrows on 64-bit. Probably no big deal either way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343343</commentid>
    <comment_count>13</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-02-01 10:50:43 -0800</bug_when>
    <thetext>Bungled the landing a bit.  r77257-77259 to get everything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343377</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-01 11:32:35 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/77257 might have broken SnowLeopard Intel Release (Tests)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371870</commentid>
    <comment_count>15</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-22 17:44:36 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Bungled the landing a bit.  r77257-77259 to get everything.

Oddly enough, this broke printing in Chromium -- maybe in Safari too? See http://code.google.com/p/chromium/issues/detail?id=76694 for details.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76546</attachid>
            <date>2010-12-14 10:32:22 -0800</date>
            <delta_ts>2010-12-17 16:38:51 -0800</delta_ts>
            <desc>Part 1: Rename pageHeight -&gt; pageLogicalHeight</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>28118</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDA0MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMTAtMTItMTQgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmFt
ZSBwYWdlSGVpZ2h0IHZhcmlhYmxlcyBhbmQgbWVtYmVycyBpbiBXZWJDb3JlIHRvIHBhZ2VMb2dp
Y2FsSGVpZ2h0IGluIHByZXBhcmF0aW9uIGZvcgorICAgICAgICBtYWtpbmcgcHJpbnRpbmcgYW5k
IHBhZ2luYXRpb24gd29yayB3aXRoIHZlcnRpY2FsIHdyaXRpbmcgbW9kZXMuCisKKyAgICAgICAg
KiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmZvcmNl
TGF5b3V0Rm9yUGFnaW5hdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL0xheW91dFN0YXRlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFN0YXRlOjpMYXlvdXRTdGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXRTdGF0ZTo6Y2xlYXJQYWdpbmF0aW9uSW5mb3JtYXRpb24pOgorICAg
ICAgICAqIHJlbmRlcmluZy9MYXlvdXRTdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
U3RhdGU6OkxheW91dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFN0YXRlOjppc1Bh
Z2luYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRTdGF0ZTo6cGFnZUxvZ2ljYWxIZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0U3RhdGU6OnBhZ2VMb2dpY2FsSGVpZ2h0Q2hh
bmdlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6bWFya0ZvclBhZ2luYXRpb25SZWxheW91dElmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjppbnNlcnRGbG9hdGluZ09iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0Q29sdW1ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6bmV4dFBhZ2VUb3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFw
cGx5QmVmb3JlQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFwcGx5QWZ0
ZXJCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRqdXN0Rm9yVW5zcGxp
dHRhYmxlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkanVzdExpbmVQ
b3NpdGlvbkZvclBhZ2luYXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbEhlaWdodCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckZsZXhpYmxlQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsZXhpYmxlQm94
OjpsYXlvdXRCbG9jayk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUYWJsZVJvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVJvdzo6
bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmll
dzo6UmVuZGVyVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpsYXlvdXQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJWaWV3OjpwYWdlTG9naWNhbEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3
OjpzZXRQYWdlTG9naWNhbEhlaWdodCk6CisKIDIwMTAtMTItMTQgIEhlbGRlciBDb3JyZWlhICA8
aGVsZGVyQHNlbmNoYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQXJpeWEgSGlkYXlhdC4K
SW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiA3Mzk0MSkKKysrIFdlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMxLDcgKzIyMzEsNyBAQCB2b2lkIEZyYW1l
Vmlldzo6Zm9yY2VMYXlvdXRGb3JQYWdpbmF0aW9uCiAgICAgaWYgKHJvb3QpIHsKICAgICAgICAg
aW50IHBhZ2VXID0gY2VpbGYocGFnZVNpemUud2lkdGgoKSk7CiAgICAgICAgIHJvb3QtPnNldFdp
ZHRoKHBhZ2VXKTsKLSAgICAgICAgcm9vdC0+c2V0UGFnZUhlaWdodChwYWdlU2l6ZS5oZWlnaHQo
KSk7CisgICAgICAgIHJvb3QtPnNldFBhZ2VMb2dpY2FsSGVpZ2h0KHBhZ2VTaXplLmhlaWdodCgp
KTsKICAgICAgICAgcm9vdC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAg
ICAgICAgIGZvcmNlTGF5b3V0KCk7CiAKQEAgLTIyNDMsNyArMjI0Myw3IEBAIHZvaWQgRnJhbWVW
aWV3Ojpmb3JjZUxheW91dEZvclBhZ2luYXRpb24KICAgICAgICAgaWYgKGRvY1dpZHRoID4gcGFn
ZVNpemUud2lkdGgoKSkgewogICAgICAgICAgICAgcGFnZVcgPSBzdGQ6Om1pbjxpbnQ+KGRvY1dp
ZHRoLCBjZWlsZihwYWdlU2l6ZS53aWR0aCgpICogbWF4aW11bVNocmlua0ZhY3RvcikpOwogICAg
ICAgICAgICAgaWYgKHBhZ2VTaXplLmhlaWdodCgpKQotICAgICAgICAgICAgICAgIHJvb3QtPnNl
dFBhZ2VIZWlnaHQocGFnZVcgLyBwYWdlU2l6ZS53aWR0aCgpICogcGFnZVNpemUuaGVpZ2h0KCkp
OworICAgICAgICAgICAgICAgIHJvb3QtPnNldFBhZ2VMb2dpY2FsSGVpZ2h0KHBhZ2VXIC8gcGFn
ZVNpemUud2lkdGgoKSAqIHBhZ2VTaXplLmhlaWdodCgpKTsKICAgICAgICAgICAgIHJvb3QtPnNl
dFdpZHRoKHBhZ2VXKTsKICAgICAgICAgICAgIHJvb3QtPnNldE5lZWRzTGF5b3V0QW5kUHJlZldp
ZHRoc1JlY2FsYygpOwogICAgICAgICAgICAgZm9yY2VMYXlvdXQoKTsKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9MYXlvdXRTdGF0ZS5jcHAJKHJldmlzaW9uIDczOTQwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
TGF5b3V0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotTGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKExheW91dFN0YXRlKiBw
cmV2LCBSZW5kZXJCb3gqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBvZmZzZXQsIGludCBwYWdl
SGVpZ2h0LCBib29sIHBhZ2VIZWlnaHRDaGFuZ2VkLCBDb2x1bW5JbmZvKiBjb2x1bW5JbmZvKQor
TGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKExheW91dFN0YXRlKiBwcmV2LCBSZW5kZXJCb3gqIHJl
bmRlcmVyLCBjb25zdCBJbnRTaXplJiBvZmZzZXQsIGludCBwYWdlTG9naWNhbEhlaWdodCwgYm9v
bCBwYWdlTG9naWNhbEhlaWdodENoYW5nZWQsIENvbHVtbkluZm8qIGNvbHVtbkluZm8pCiAgICAg
OiBtX2NvbHVtbkluZm8oY29sdW1uSW5mbykKICAgICAsIG1fbmV4dChwcmV2KQogI2lmbmRlZiBO
REVCVUcKQEAgLTgyLDIwICs4MiwyMCBAQCBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoTGF5b3V0
U3RhdGUqIHByCiAKICAgICAvLyBJZiB3ZSBlc3RhYmxpc2ggYSBuZXcgcGFnZSBoZWlnaHQsIHRo
ZW4gY2FjaGUgdGhlIG9mZnNldCB0byB0aGUgdG9wIG9mIHRoZSBmaXJzdCBwYWdlLgogICAgIC8v
IFdlIGNhbiBjb21wYXJlIHRoaXMgbGF0ZXIgb24gdG8gZmlndXJlIG91dCB3aGF0IHBhcnQgb2Yg
dGhlIHBhZ2Ugd2UncmUgYWN0dWFsbHkgb24sCi0gICAgaWYgKHBhZ2VIZWlnaHQgfHwgbV9jb2x1
bW5JbmZvKSB7Ci0gICAgICAgIG1fcGFnZUhlaWdodCA9IHBhZ2VIZWlnaHQ7CisgICAgaWYgKHBh
Z2VMb2dpY2FsSGVpZ2h0IHx8IG1fY29sdW1uSW5mbykgeworICAgICAgICBtX3BhZ2VMb2dpY2Fs
SGVpZ2h0ID0gcGFnZUxvZ2ljYWxIZWlnaHQ7CiAgICAgICAgIG1fcGFnZU9mZnNldCA9IEludFNp
emUobV9sYXlvdXRPZmZzZXQud2lkdGgoKSArIHJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5k
ZXJlci0+cGFkZGluZ0xlZnQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xh
eW91dE9mZnNldC5oZWlnaHQoKSArIHJlbmRlcmVyLT5ib3JkZXJUb3AoKSArIHJlbmRlcmVyLT5w
YWRkaW5nVG9wKCkpOwotICAgICAgICBtX3BhZ2VIZWlnaHRDaGFuZ2VkID0gcGFnZUhlaWdodENo
YW5nZWQ7CisgICAgICAgIG1fcGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkID0gcGFnZUxvZ2ljYWxI
ZWlnaHRDaGFuZ2VkOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIElmIHdlIGRvbid0IGVzdGFi
bGlzaCBhIG5ldyBwYWdlIGhlaWdodCwgdGhlbiBwcm9wYWdhdGUgdGhlIG9sZCBwYWdlIGhlaWdo
dCBhbmQgb2Zmc2V0IGRvd24uCi0gICAgICAgIG1fcGFnZUhlaWdodCA9IG1fbmV4dC0+bV9wYWdl
SGVpZ2h0OwotICAgICAgICBtX3BhZ2VIZWlnaHRDaGFuZ2VkID0gbV9uZXh0LT5tX3BhZ2VIZWln
aHRDaGFuZ2VkOworICAgICAgICBtX3BhZ2VMb2dpY2FsSGVpZ2h0ID0gbV9uZXh0LT5tX3BhZ2VM
b2dpY2FsSGVpZ2h0OworICAgICAgICBtX3BhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCA9IG1fbmV4
dC0+bV9wYWdlTG9naWNhbEhlaWdodENoYW5nZWQ7CiAgICAgICAgIG1fcGFnZU9mZnNldCA9IG1f
bmV4dC0+bV9wYWdlT2Zmc2V0OwogICAgICAgICAKICAgICAgICAgLy8gRGlzYWJsZSBwYWdpbmF0
aW9uIGZvciBvYmplY3RzIHdlIGRvbid0IHN1cHBvcnQuICBGb3Igbm93IHRoaXMgaW5jbHVkZXMg
b3ZlcmZsb3c6c2Nyb2xsL2F1dG8gYW5kIGlubGluZSBibG9ja3MuCiAgICAgICAgIGlmIChyZW5k
ZXJlci0+aXNSZXBsYWNlZCgpIHx8IHJlbmRlcmVyLT5zY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAg
ICAgICAgIG1fcGFnZUhlaWdodCA9IDA7CisgICAgICAgICAgICBtX3BhZ2VMb2dpY2FsSGVpZ2h0
ID0gMDsKICAgICB9CiAgICAgCiAgICAgaWYgKCFtX2NvbHVtbkluZm8pCkBAIC0xMDgsOCArMTA4
LDggQEAgTGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKExheW91dFN0YXRlKiBwcgogCiBMYXlvdXRT
dGF0ZTo6TGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KiByb290KQogICAgIDogbV9jbGlwcGVkKGZh
bHNlKQotICAgICwgbV9wYWdlSGVpZ2h0KDApCi0gICAgLCBtX3BhZ2VIZWlnaHRDaGFuZ2VkKGZh
bHNlKQorICAgICwgbV9wYWdlTG9naWNhbEhlaWdodCgwKQorICAgICwgbV9wYWdlTG9naWNhbEhl
aWdodENoYW5nZWQoZmFsc2UpCiAgICAgLCBtX2NvbHVtbkluZm8oMCkKICAgICAsIG1fbmV4dCgw
KQogI2lmbmRlZiBOREVCVUcKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIExheW91dFN0YXRlOjpv
cGVyYXRvciBkZWxldGUodm9pZCogCiAKIHZvaWQgTGF5b3V0U3RhdGU6OmNsZWFyUGFnaW5hdGlv
bkluZm9ybWF0aW9uKCkKIHsKLSAgICBtX3BhZ2VIZWlnaHQgPSBtX25leHQtPm1fcGFnZUhlaWdo
dDsKKyAgICBtX3BhZ2VMb2dpY2FsSGVpZ2h0ID0gbV9uZXh0LT5tX3BhZ2VMb2dpY2FsSGVpZ2h0
OwogICAgIG1fcGFnZU9mZnNldCA9IG1fbmV4dC0+bV9wYWdlT2Zmc2V0OwogICAgIG1fY29sdW1u
SW5mbyA9IG1fbmV4dC0+bV9jb2x1bW5JbmZvOwogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
TGF5b3V0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0
ZS5oCShyZXZpc2lvbiA3Mzk0MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDggKzQxLDggQEAgY2xhc3MgTGF5b3V0U3RhdGUgOiBwdWJs
aWMgTm9uY29weWFibGUgewogcHVibGljOgogICAgIExheW91dFN0YXRlKCkKICAgICAgICAgOiBt
X2NsaXBwZWQoZmFsc2UpCi0gICAgICAgICwgbV9wYWdlSGVpZ2h0KDApCi0gICAgICAgICwgbV9w
YWdlSGVpZ2h0Q2hhbmdlZChmYWxzZSkKKyAgICAgICAgLCBtX3BhZ2VMb2dpY2FsSGVpZ2h0KDAp
CisgICAgICAgICwgbV9wYWdlTG9naWNhbEhlaWdodENoYW5nZWQoZmFsc2UpCiAgICAgICAgICwg
bV9jb2x1bW5JbmZvKDApCiAgICAgICAgICwgbV9uZXh0KDApCiAjaWZuZGVmIE5ERUJVRwpAQCAt
NjQsMTIgKzY0LDEyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXJQYWdpbmF0aW9uSW5mb3Jt
YXRpb24oKTsKICAgICBib29sIGlzUGFnaW5hdGluZ0NvbHVtbnMoKSBjb25zdCB7IHJldHVybiBt
X2NvbHVtbkluZm87IH0KLSAgICBib29sIGlzUGFnaW5hdGVkKCkgY29uc3QgeyByZXR1cm4gbV9w
YWdlSGVpZ2h0IHx8IG1fY29sdW1uSW5mbzsgfQorICAgIGJvb2wgaXNQYWdpbmF0ZWQoKSBjb25z
dCB7IHJldHVybiBtX3BhZ2VMb2dpY2FsSGVpZ2h0IHx8IG1fY29sdW1uSW5mbzsgfQogICAgIGlu
dCBwYWdlWShpbnQgY2hpbGRZKSBjb25zdDsKICAgICB2b2lkIGFkZEZvcmNlZENvbHVtbkJyZWFr
KGludCBjaGlsZFkpOwogICAgIAotICAgIGJvb2wgcGFnZUhlaWdodCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFnZUhlaWdodDsgfQotICAgIGJvb2wgcGFnZUhlaWdodENoYW5nZWQoKSBjb25zdCB7IHJl
dHVybiBtX3BhZ2VIZWlnaHRDaGFuZ2VkOyB9CisgICAgYm9vbCBwYWdlTG9naWNhbEhlaWdodCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGFnZUxvZ2ljYWxIZWlnaHQ7IH0KKyAgICBib29sIHBhZ2VMb2dp
Y2FsSGVpZ2h0Q2hhbmdlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUxvZ2ljYWxIZWlnaHRDaGFu
Z2VkOyB9CiAKIHByaXZhdGU6CiAgICAgLy8gVGhlIG5vcm1hbCBvcGVyYXRvciBuZXcgaXMgZGlz
YWxsb3dlZC4KQEAgLTg0LDggKzg0LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gdXNlZCB0byBlbnN1cmUgdGhhdCByZXBhaW50cyBoYXBwZW4gaW4gdGhlIGNvcnJl
Y3QgcGxhY2UuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgdG90YWwg
ZGVsdGEgYWNjdW11bGF0ZWQgZnJvbSB0aGUgcm9vdC4KIAotICAgIGludCBtX3BhZ2VIZWlnaHQ7
IC8vIFRoZSBjdXJyZW50IHBhZ2UgaGVpZ2h0IGZvciB0aGUgcGFnaW5hdGlvbiBtb2RlbCB0aGF0
IGVuY2xvc2VzIHVzLgotICAgIGJvb2wgbV9wYWdlSGVpZ2h0Q2hhbmdlZDsgLy8gSWYgb3VyIHBh
Z2UgaGVpZ2h0IGhhcyBjaGFuZ2VkLCB0aGlzIHdpbGwgZm9yY2UgYWxsIGJsb2NrcyB0byByZWxh
eW91dC4KKyAgICBpbnQgbV9wYWdlTG9naWNhbEhlaWdodDsgLy8gVGhlIGN1cnJlbnQgcGFnZSBo
ZWlnaHQgZm9yIHRoZSBwYWdpbmF0aW9uIG1vZGVsIHRoYXQgZW5jbG9zZXMgdXMuCisgICAgYm9v
bCBtX3BhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZDsgLy8gSWYgb3VyIHBhZ2UgaGVpZ2h0IGhhcyBj
aGFuZ2VkLCB0aGlzIHdpbGwgZm9yY2UgYWxsIGJsb2NrcyB0byByZWxheW91dC4KICAgICBJbnRT
aXplIG1fcGFnZU9mZnNldDsgLy8gVGhlIG9mZnNldCBvZiB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0
IHBhZ2UgaW4gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIHBhZ2luYXRpb24gbW9kZWwuCiAgICAgQ29s
dW1uSW5mbyogbV9jb2x1bW5JbmZvOyAvLyBJZiB0aGUgZW5jbG9zaW5nIHBhZ2luYXRpb24gbW9k
ZWwgaXMgYSBjb2x1bW4gbW9kZWwsIHRoZW4gdGhpcyB3aWxsIHN0b3JlIGNvbHVtbiBpbmZvcm1h
dGlvbiBmb3IgZWFzeSByZXRyaWV2YWwvbWFuaXB1bGF0aW9uLgogCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA3Mzk0MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwOSw3ICsxMTA5LDcgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6bGF5b3V0KCkKICAgICAgICAgY2xlYXJMYXlvdXRPdmVyZmxvdygpOwogfQog
Ci12b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGlu
dCBwYWdlSGVpZ2h0KQordm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91
dENoaWxkcmVuLCBpbnQgcGFnZUxvZ2ljYWxIZWlnaHQpCiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5
b3V0KCkpOwogCkBAIC0xMTM2LDMxICsxMTM2LDMxIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91
dEJsb2NrKGJvb2wgcmVsYXkKIAogICAgIGludCBwcmV2aW91c0hlaWdodCA9IGxvZ2ljYWxIZWln
aHQoKTsKICAgICBzZXRMb2dpY2FsSGVpZ2h0KDApOwotICAgIGJvb2wgaGFzU3BlY2lmaWVkUGFn
ZUhlaWdodCA9IGZhbHNlOwotICAgIGJvb2wgcGFnZUhlaWdodENoYW5nZWQgPSBmYWxzZTsKKyAg
ICBib29sIGhhc1NwZWNpZmllZFBhZ2VMb2dpY2FsSGVpZ2h0ID0gZmFsc2U7CisgICAgYm9vbCBw
YWdlTG9naWNhbEhlaWdodENoYW5nZWQgPSBmYWxzZTsKICAgICBDb2x1bW5JbmZvKiBjb2xJbmZv
ID0gY29sdW1uSW5mbygpOwogICAgIGlmIChoYXNDb2x1bW5zKCkpIHsKLSAgICAgICAgaWYgKCFw
YWdlSGVpZ2h0KSB7CisgICAgICAgIGlmICghcGFnZUxvZ2ljYWxIZWlnaHQpIHsKICAgICAgICAg
ICAgIC8vIFdlIG5lZWQgdG8gZ28gYWhlYWQgYW5kIHNldCBvdXIgZXhwbGljaXQgcGFnZSBoZWln
aHQgaWYgb25lIGV4aXN0cywgc28gdGhhdCB3ZSBjYW4KICAgICAgICAgICAgIC8vIGF2b2lkIGRv
aW5nIHR3byBsYXlvdXQgcGFzc2VzLgogICAgICAgICAgICAgY29tcHV0ZUxvZ2ljYWxIZWlnaHQo
KTsKICAgICAgICAgICAgIGludCBjb2x1bW5IZWlnaHQgPSBjb250ZW50TG9naWNhbEhlaWdodCgp
OwogICAgICAgICAgICAgaWYgKGNvbHVtbkhlaWdodCA+IDApIHsKLSAgICAgICAgICAgICAgICBw
YWdlSGVpZ2h0ID0gY29sdW1uSGVpZ2h0OwotICAgICAgICAgICAgICAgIGhhc1NwZWNpZmllZFBh
Z2VIZWlnaHQgPSB0cnVlOworICAgICAgICAgICAgICAgIHBhZ2VMb2dpY2FsSGVpZ2h0ID0gY29s
dW1uSGVpZ2h0OworICAgICAgICAgICAgICAgIGhhc1NwZWNpZmllZFBhZ2VMb2dpY2FsSGVpZ2h0
ID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQoMCk7
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNvbEluZm8tPmNvbHVtbkhlaWdodCgpICE9IHBhZ2VI
ZWlnaHQgJiYgbV9ldmVySGFkTGF5b3V0KSB7Ci0gICAgICAgICAgICBjb2xJbmZvLT5zZXRDb2x1
bW5IZWlnaHQocGFnZUhlaWdodCk7Ci0gICAgICAgICAgICBwYWdlSGVpZ2h0Q2hhbmdlZCA9IHRy
dWU7CisgICAgICAgIGlmIChjb2xJbmZvLT5jb2x1bW5IZWlnaHQoKSAhPSBwYWdlTG9naWNhbEhl
aWdodCAmJiBtX2V2ZXJIYWRMYXlvdXQpIHsKKyAgICAgICAgICAgIGNvbEluZm8tPnNldENvbHVt
bkhlaWdodChwYWdlTG9naWNhbEhlaWdodCk7CisgICAgICAgICAgICBwYWdlTG9naWNhbEhlaWdo
dENoYW5nZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoIWhhc1Nw
ZWNpZmllZFBhZ2VIZWlnaHQgJiYgIXBhZ2VIZWlnaHQpCisgICAgICAgIGlmICghaGFzU3BlY2lm
aWVkUGFnZUxvZ2ljYWxIZWlnaHQgJiYgIXBhZ2VMb2dpY2FsSGVpZ2h0KQogICAgICAgICAgICAg
Y29sSW5mby0+Y2xlYXJGb3JjZWRCcmVha3MoKTsKICAgICB9CiAKLSAgICBMYXlvdXRTdGF0ZU1h
aW50YWluZXIgc3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBJbnRTaXplKHgoKSwgeSgpKSwgaGFz
Q29sdW1ucygpIHx8IGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSB8fCBzdHlsZSgp
LT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpLCBwYWdlSGVpZ2h0LCBwYWdlSGVpZ2h0Q2hh
bmdlZCwgY29sSW5mbyk7CisgICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZp
ZXcoKSwgdGhpcywgSW50U2l6ZSh4KCksIHkoKSksIGhhc0NvbHVtbnMoKSB8fCBoYXNUcmFuc2Zv
cm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkgfHwgc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGlu
Z01vZGUoKSwgcGFnZUxvZ2ljYWxIZWlnaHQsIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCwgY29s
SW5mbyk7CiAKICAgICAvLyBXZSB1c2UgZm91ciB2YWx1ZXMsIG1heFRvcFBvcywgbWF4VG9wTmVn
LCBtYXhCb3R0b21Qb3MsIGFuZCBtYXhCb3R0b21OZWcsIHRvIHRyYWNrCiAgICAgLy8gb3VyIGN1
cnJlbnQgbWF4aW1hbCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgbWFyZ2lucy4gIFRoZXNlIHZhbHVl
cyBhcmUgdXNlZCB3aGVuIHdlCkBAIC0xMjEyLDcgKzEyMTIsNyBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgaWYgKGxvd2VzdEZsb2F0TG9naWNhbEJvdHRv
bSgpID4gKGxvZ2ljYWxIZWlnaHQoKSAtIHRvQWRkKSAmJiBleHBhbmRzVG9FbmNsb3NlT3Zlcmhh
bmdpbmdGbG9hdHMoKSkKICAgICAgICAgc2V0TG9naWNhbEhlaWdodChsb3dlc3RGbG9hdExvZ2lj
YWxCb3R0b20oKSArIHRvQWRkKTsKICAgICAKLSAgICBpZiAobGF5b3V0Q29sdW1ucyhoYXNTcGVj
aWZpZWRQYWdlSGVpZ2h0LCBwYWdlSGVpZ2h0LCBzdGF0ZVB1c2hlcikpCisgICAgaWYgKGxheW91
dENvbHVtbnMoaGFzU3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWlnaHQsIHBhZ2VMb2dpY2FsSGVpZ2h0
LCBzdGF0ZVB1c2hlcikpCiAgICAgICAgIHJldHVybjsKICAKICAgICAvLyBDYWxjdWxhdGUgb3Vy
IG5ldyBoZWlnaHQuCkBAIC0xMjQzLDcgKzEyNDMsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlv
dXRCbG9jayhib29sIHJlbGF5CiAgICAgCiAgICAgc3RhdGVQdXNoZXIucG9wKCk7CiAKLSAgICBp
ZiAodmlldygpLT5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VIZWlnaHQpCisgICAgaWYgKHZpZXcoKS0+
bGF5b3V0U3RhdGUoKS0+bV9wYWdlTG9naWNhbEhlaWdodCkKICAgICAgICAgc2V0UGFnZVkodmll
dygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlWSh5KCkpKTsKIAogICAgIHVwZGF0ZUxheWVyVHJhbnNm
b3JtKCk7CkBAIC0yMTM2LDcgKzIxMzYsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjptYXJrRm9yUGFn
aW5hdGlvblJlbGF5CiAgICAgaWYgKG5lZWRzTGF5b3V0KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmICh2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2VIZWlnaHRDaGFuZ2VkKCkgfHwgKHZp
ZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnZUhlaWdodCgpICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUo
KS0+cGFnZVkoeSgpKSAhPSBwYWdlWSgpKSkKKyAgICBpZiAodmlldygpLT5sYXlvdXRTdGF0ZSgp
LT5wYWdlTG9naWNhbEhlaWdodENoYW5nZWQoKSB8fCAodmlldygpLT5sYXlvdXRTdGF0ZSgpLT5w
YWdlTG9naWNhbEhlaWdodCgpICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnZVkoeSgpKSAh
PSBwYWdlWSgpKSkKICAgICAgICAgc2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7CiB9
CiAKQEAgLTMwMzIsMTAgKzMwMzIsMTAgQEAgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBS
ZW5kZXJCbG9jawogICAgIC8vIE91ciBsb2NhdGlvbiBpcyBpcnJlbGV2YW50IGlmIHdlJ3JlIHVu
c3BsaXR0YWJsZSBvciBubyBwYWdpbmF0aW9uIGlzIGluIGVmZmVjdC4KICAgICAvLyBKdXN0IGdv
IGFoZWFkIGFuZCBsYXkgb3V0IHRoZSBmbG9hdC4KICAgICBib29sIGlzQ2hpbGRSZW5kZXJCbG9j
ayA9IG8tPmlzUmVuZGVyQmxvY2soKTsKLSAgICBpZiAoaXNDaGlsZFJlbmRlckJsb2NrICYmICFv
LT5uZWVkc0xheW91dCgpICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnZUhlaWdodENoYW5n
ZWQoKSkKKyAgICBpZiAoaXNDaGlsZFJlbmRlckJsb2NrICYmICFvLT5uZWVkc0xheW91dCgpICYm
IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkKCkpCiAgICAg
ICAgIG8tPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOwogICAgICAgICAKLSAgICBi
b29sIGFmZmVjdGVkQnlQYWdpbmF0aW9uID0gaXNDaGlsZFJlbmRlckJsb2NrICYmIHZpZXcoKS0+
bGF5b3V0U3RhdGUoKS0+bV9wYWdlSGVpZ2h0OworICAgIGJvb2wgYWZmZWN0ZWRCeVBhZ2luYXRp
b24gPSBpc0NoaWxkUmVuZGVyQmxvY2sgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VM
b2dpY2FsSGVpZ2h0OwogICAgIGlmICghYWZmZWN0ZWRCeVBhZ2luYXRpb24gfHwgaXNXcml0aW5n
TW9kZVJvb3QoKSkgLy8gV2UgYXJlIHVuc3BsaXR0YWJsZSBpZiB3ZSdyZSBhIGJsb2NrIGZsb3cg
cm9vdC4KICAgICAgICAgby0+bGF5b3V0SWZOZWVkZWQoKTsKICAgICBlbHNlIHsKQEAgLTQyMjEs
NyArNDIyMSw3IEBAIEludFJlY3QgUmVuZGVyQmxvY2s6OmNvbHVtblJlY3RBdChDb2x1bW4KICAg
ICByZXR1cm4gSW50UmVjdChjb2xMZWZ0LCBjb2xUb3AsIGNvbFdpZHRoLCBjb2xIZWlnaHQpOwog
fQogCi1ib29sIFJlbmRlckJsb2NrOjpsYXlvdXRDb2x1bW5zKGJvb2wgaGFzU3BlY2lmaWVkUGFn
ZUhlaWdodCwgaW50IHBhZ2VIZWlnaHQsIExheW91dFN0YXRlTWFpbnRhaW5lciYgc3RhdGVQdXNo
ZXIpCitib29sIFJlbmRlckJsb2NrOjpsYXlvdXRDb2x1bW5zKGJvb2wgaGFzU3BlY2lmaWVkUGFn
ZUxvZ2ljYWxIZWlnaHQsIGludCBwYWdlTG9naWNhbEhlaWdodCwgTGF5b3V0U3RhdGVNYWludGFp
bmVyJiBzdGF0ZVB1c2hlcikKIHsKICAgICBpZiAoIWhhc0NvbHVtbnMoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtNDIzMCwyMyArNDIzMCwyMyBAQCBib29sIFJlbmRlckJsb2NrOjpsYXlv
dXRDb2x1bW5zKGJvb2wgaGFzCiAgICAgLy8gdGhlIGRpc3RhbmNlIGJldHdlZW4gZm9yY2VkIHBh
Z2UgYnJlYWtzIGlzIHNvIHRoYXQgd2UgY2FuIGF2b2lkIG1ha2luZyB0aGUgbWluaW11bSBjb2x1
bW4gaGVpZ2h0IHRvbyB0YWxsLgogICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZv
KCk7CiAgICAgaW50IGRlc2lyZWRDb2x1bW5Db3VudCA9IGNvbEluZm8tPmRlc2lyZWRDb2x1bW5D
b3VudCgpOwotICAgIGlmICghaGFzU3BlY2lmaWVkUGFnZUhlaWdodCkgewotICAgICAgICBpbnQg
Y29sdW1uSGVpZ2h0ID0gcGFnZUhlaWdodDsKKyAgICBpZiAoIWhhc1NwZWNpZmllZFBhZ2VMb2dp
Y2FsSGVpZ2h0KSB7CisgICAgICAgIGludCBjb2x1bW5IZWlnaHQgPSBwYWdlTG9naWNhbEhlaWdo
dDsKICAgICAgICAgaW50IG1pbkNvbHVtbkNvdW50ID0gY29sSW5mby0+Zm9yY2VkQnJlYWtzKCkg
KyAxOwogICAgICAgICBpZiAobWluQ29sdW1uQ291bnQgPj0gZGVzaXJlZENvbHVtbkNvdW50KSB7
CiAgICAgICAgICAgICAvLyBUaGUgZm9yY2VkIHBhZ2UgYnJlYWtzIGFyZSBpbiBjb250cm9sIG9m
IHRoZSBiYWxhbmNpbmcuICBKdXN0IHNldCB0aGUgY29sdW1uIGhlaWdodCB0byB0aGUKICAgICAg
ICAgICAgIC8vIG1heGltdW0gcGFnZSBicmVhayBkaXN0YW5jZS4KLSAgICAgICAgICAgIGlmICgh
cGFnZUhlaWdodCkgeworICAgICAgICAgICAgaWYgKCFwYWdlTG9naWNhbEhlaWdodCkgewogICAg
ICAgICAgICAgICAgIGludCBkaXN0YW5jZUJldHdlZW5CcmVha3MgPSBtYXgoY29sSW5mby0+bWF4
aW11bURpc3RhbmNlQmV0d2VlbkZvcmNlZEJyZWFrcygpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlWShi
b3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSArIGNvbnRlbnRIZWlnaHQoKSkgLSBjb2xJbmZvLT5m
b3JjZWRCcmVha09mZnNldCgpKTsKICAgICAgICAgICAgICAgICBjb2x1bW5IZWlnaHQgPSBtYXgo
Y29sSW5mby0+bWluaW11bUNvbHVtbkhlaWdodCgpLCBkaXN0YW5jZUJldHdlZW5CcmVha3MpOwog
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnRIZWlnaHQoKSA+IHBhZ2VI
ZWlnaHQgKiBkZXNpcmVkQ29sdW1uQ291bnQpIHsKKyAgICAgICAgfSBlbHNlIGlmIChjb250ZW50
SGVpZ2h0KCkgPiBwYWdlTG9naWNhbEhlaWdodCAqIGRlc2lyZWRDb2x1bW5Db3VudCkgewogICAg
ICAgICAgICAgLy8gTm93IHRoYXQgd2Uga25vdyB0aGUgaW50cmluc2ljIGhlaWdodCBvZiB0aGUg
Y29sdW1ucywgd2UgaGF2ZSB0byByZWJhbGFuY2UgdGhlbS4KICAgICAgICAgICAgIGNvbHVtbkhl
aWdodCA9IG1heChjb2xJbmZvLT5taW5pbXVtQ29sdW1uSGVpZ2h0KCksIChpbnQpY2VpbGYoKGZs
b2F0KWNvbnRlbnRIZWlnaHQoKSAvIGRlc2lyZWRDb2x1bW5Db3VudCkpOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBpZiAoY29sdW1uSGVpZ2h0ICYmIGNvbHVtbkhlaWdodCAhPSBwYWdl
SGVpZ2h0KSB7CisgICAgICAgIGlmIChjb2x1bW5IZWlnaHQgJiYgY29sdW1uSGVpZ2h0ICE9IHBh
Z2VMb2dpY2FsSGVpZ2h0KSB7CiAgICAgICAgICAgICBzdGF0ZVB1c2hlci5wb3AoKTsKICAgICAg
ICAgICAgIG1fZXZlckhhZExheW91dCA9IHRydWU7CiAgICAgICAgICAgICBsYXlvdXRCbG9jayhm
YWxzZSwgY29sdW1uSGVpZ2h0KTsKQEAgLTQyNTQsOCArNDI1NCw4IEBAIGJvb2wgUmVuZGVyQmxv
Y2s6OmxheW91dENvbHVtbnMoYm9vbCBoYXMKICAgICAgICAgfQogICAgIH0gCiAgICAgCi0gICAg
aWYgKHBhZ2VIZWlnaHQpIC8vIEZJWE1FOiBTaG91bGQgd2UgdXNlIGxvd2VzdFBvc2l0aW9uIChl
eGNsdWRpbmcgb3VyIHBvc2l0aW9uZWQgb2JqZWN0cykgaW5zdGVhZCBvZiBjb250ZW50SGVpZ2h0
KCk/Ci0gICAgICAgIGNvbEluZm8tPnNldENvbHVtbkNvdW50QW5kSGVpZ2h0KGNlaWxmKChmbG9h
dCljb250ZW50SGVpZ2h0KCkgLyBwYWdlSGVpZ2h0KSwgcGFnZUhlaWdodCk7CisgICAgaWYgKHBh
Z2VMb2dpY2FsSGVpZ2h0KQorICAgICAgICBjb2xJbmZvLT5zZXRDb2x1bW5Db3VudEFuZEhlaWdo
dChjZWlsZigoZmxvYXQpY29udGVudEhlaWdodCgpIC8gcGFnZUxvZ2ljYWxIZWlnaHQpLCBwYWdl
TG9naWNhbEhlaWdodCk7CiAKICAgICBpZiAoY29sdW1uQ291bnQoY29sSW5mbykpIHsKICAgICAg
ICAgc2V0TG9naWNhbEhlaWdodChib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSArIGNvbEluZm8t
PmNvbHVtbkhlaWdodCgpICsgYm9yZGVyQm90dG9tKCkgKyBwYWRkaW5nQm90dG9tKCkgKyBob3Jp
em9udGFsU2Nyb2xsYmFySGVpZ2h0KCkpOwpAQCAtNTcyNywxMiArNTcyNywxMiBAQCBSZW5kZXJC
bG9jayogUmVuZGVyQmxvY2s6OmNyZWF0ZUFub255bW91CiBpbnQgUmVuZGVyQmxvY2s6Om5leHRQ
YWdlVG9wKGludCB5UG9zKSBjb25zdAogewogICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0ZSA9
IHZpZXcoKS0+bGF5b3V0U3RhdGUoKTsKLSAgICBpZiAoIWxheW91dFN0YXRlLT5tX3BhZ2VIZWln
aHQpCisgICAgaWYgKCFsYXlvdXRTdGF0ZS0+bV9wYWdlTG9naWNhbEhlaWdodCkKICAgICAgICAg
cmV0dXJuIHlQb3M7CiAgICAgCiAgICAgLy8gVGhlIHlQb3MgaXMgaW4gb3VyIGNvb3JkaW5hdGUg
c3BhY2UuICBXZSBjYW4gYWRkIGluIG91ciBwdXNoZWQgb2Zmc2V0LgotICAgIGludCBwYWdlSGVp
Z2h0ID0gbGF5b3V0U3RhdGUtPm1fcGFnZUhlaWdodDsKLSAgICBpbnQgcmVtYWluaW5nSGVpZ2h0
ID0gKHBhZ2VIZWlnaHQgLSAoKGxheW91dFN0YXRlLT5tX2xheW91dE9mZnNldCAtIGxheW91dFN0
YXRlLT5tX3BhZ2VPZmZzZXQpLmhlaWdodCgpICsgeVBvcykgJSBwYWdlSGVpZ2h0KSAlIHBhZ2VI
ZWlnaHQ7CisgICAgaW50IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gbGF5b3V0U3RhdGUtPm1fcGFnZUxv
Z2ljYWxIZWlnaHQ7CisgICAgaW50IHJlbWFpbmluZ0hlaWdodCA9IChwYWdlTG9naWNhbEhlaWdo
dCAtICgobGF5b3V0U3RhdGUtPm1fbGF5b3V0T2Zmc2V0IC0gbGF5b3V0U3RhdGUtPm1fcGFnZU9m
ZnNldCkuaGVpZ2h0KCkgKyB5UG9zKSAlIHBhZ2VMb2dpY2FsSGVpZ2h0KSAlIHBhZ2VMb2dpY2Fs
SGVpZ2h0OwogICAgIHJldHVybiB5UG9zICsgcmVtYWluaW5nSGVpZ2h0OwogfQogCkBAIC01NzU0
LDcgKzU3NTQsNyBAQCBpbnQgUmVuZGVyQmxvY2s6OmFwcGx5QmVmb3JlQnJlYWsoUmVuZGVyCiB7
CiAgICAgLy8gRklYTUU6IEFkZCBwYWdlIGJyZWFrIGNoZWNraW5nIGhlcmUgd2hlbiB3ZSBzdXBw
b3J0IHByaW50aW5nLgogICAgIGJvb2wgY2hlY2tDb2x1bW5CcmVha3MgPSB2aWV3KCktPmxheW91
dFN0YXRlKCktPmlzUGFnaW5hdGluZ0NvbHVtbnMoKTsKLSAgICBib29sIGNoZWNrUGFnZUJyZWFr
cyA9ICFjaGVja0NvbHVtbkJyZWFrcyAmJiB2aWV3KCktPmxheW91dFN0YXRlKCktPm1fcGFnZUhl
aWdodDsgLy8gRklYTUU6IE9uY2UgY29sdW1ucyBjYW4gcHJpbnQgd2UgaGF2ZSB0byBjaGVjayB0
aGlzLgorICAgIGJvb2wgY2hlY2tQYWdlQnJlYWtzID0gIWNoZWNrQ29sdW1uQnJlYWtzICYmIHZp
ZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdlTG9naWNhbEhlaWdodDsgLy8gRklYTUU6IE9uY2Ug
Y29sdW1ucyBjYW4gcHJpbnQgd2UgaGF2ZSB0byBjaGVjayB0aGlzLgogICAgIGJvb2wgY2hlY2tC
ZWZvcmVBbHdheXMgPSAoY2hlY2tDb2x1bW5CcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPmNvbHVt
bkJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMpIHx8IChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQt
PnN0eWxlKCktPnBhZ2VCcmVha0JlZm9yZSgpID09IFBCQUxXQVlTKTsKICAgICBpZiAoY2hlY2tC
ZWZvcmVBbHdheXMgJiYgaW5Ob3JtYWxGbG93KGNoaWxkKSkgewogICAgICAgICBpZiAoY2hlY2tD
b2x1bW5CcmVha3MpCkBAIC01NzY4LDcgKzU3NjgsNyBAQCBpbnQgUmVuZGVyQmxvY2s6OmFwcGx5
QWZ0ZXJCcmVhayhSZW5kZXJCCiB7CiAgICAgLy8gRklYTUU6IEFkZCBwYWdlIGJyZWFrIGNoZWNr
aW5nIGhlcmUgd2hlbiB3ZSBzdXBwb3J0IHByaW50aW5nLgogICAgIGJvb2wgY2hlY2tDb2x1bW5C
cmVha3MgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPmlzUGFnaW5hdGluZ0NvbHVtbnMoKTsKLSAg
ICBib29sIGNoZWNrUGFnZUJyZWFrcyA9ICFjaGVja0NvbHVtbkJyZWFrcyAmJiB2aWV3KCktPmxh
eW91dFN0YXRlKCktPm1fcGFnZUhlaWdodDsgLy8gRklYTUU6IE9uY2UgY29sdW1ucyBjYW4gcHJp
bnQgd2UgaGF2ZSB0byBjaGVjayB0aGlzLgorICAgIGJvb2wgY2hlY2tQYWdlQnJlYWtzID0gIWNo
ZWNrQ29sdW1uQnJlYWtzICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdlTG9naWNhbEhl
aWdodDsgLy8gRklYTUU6IE9uY2UgY29sdW1ucyBjYW4gcHJpbnQgd2UgaGF2ZSB0byBjaGVjayB0
aGlzLgogICAgIGJvb2wgY2hlY2tBZnRlckFsd2F5cyA9IChjaGVja0NvbHVtbkJyZWFrcyAmJiBj
aGlsZC0+c3R5bGUoKS0+Y29sdW1uQnJlYWtBZnRlcigpID09IFBCQUxXQVlTKSB8fCAoY2hlY2tQ
YWdlQnJlYWtzICYmIGNoaWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtBZnRlcigpID09IFBCQUxXQVlT
KTsKICAgICBpZiAoY2hlY2tBZnRlckFsd2F5cyAmJiBpbk5vcm1hbEZsb3coY2hpbGQpKSB7CiAg
ICAgICAgIG1hcmdpbkluZm8uc2V0TWFyZ2luQWZ0ZXJRdWlyayh0cnVlKTsgLy8gQ2F1c2UgbWFy
Z2lucyB0byBiZSBkaXNjYXJkZWQgZm9yIGFueSBmb2xsb3dpbmcgY29udGVudC4KQEAgLTU3ODgs
MTAgKzU3ODgsMTAgQEAgaW50IFJlbmRlckJsb2NrOjphZGp1c3RGb3JVbnNwbGl0dGFibGVDaAog
ICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0ZSA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKTsKICAg
ICBpZiAobGF5b3V0U3RhdGUtPm1fY29sdW1uSW5mbykKICAgICAgICAgbGF5b3V0U3RhdGUtPm1f
Y29sdW1uSW5mby0+dXBkYXRlTWluaW11bUNvbHVtbkhlaWdodChjaGlsZEhlaWdodCk7Ci0gICAg
aW50IHBhZ2VIZWlnaHQgPSBsYXlvdXRTdGF0ZS0+bV9wYWdlSGVpZ2h0OwotICAgIGlmICghcGFn
ZUhlaWdodCB8fCBjaGlsZEhlaWdodCA+IHBhZ2VIZWlnaHQpCisgICAgaW50IHBhZ2VMb2dpY2Fs
SGVpZ2h0ID0gbGF5b3V0U3RhdGUtPm1fcGFnZUxvZ2ljYWxIZWlnaHQ7CisgICAgaWYgKCFwYWdl
TG9naWNhbEhlaWdodCB8fCBjaGlsZEhlaWdodCA+IHBhZ2VMb2dpY2FsSGVpZ2h0KQogICAgICAg
ICByZXR1cm4geVBvczsKLSAgICBpbnQgcmVtYWluaW5nSGVpZ2h0ID0gKHBhZ2VIZWlnaHQgLSAo
KGxheW91dFN0YXRlLT5tX2xheW91dE9mZnNldCAtIGxheW91dFN0YXRlLT5tX3BhZ2VPZmZzZXQp
LmhlaWdodCgpICsgeVBvcykgJSBwYWdlSGVpZ2h0KSAlIHBhZ2VIZWlnaHQ7CisgICAgaW50IHJl
bWFpbmluZ0hlaWdodCA9IChwYWdlTG9naWNhbEhlaWdodCAtICgobGF5b3V0U3RhdGUtPm1fbGF5
b3V0T2Zmc2V0IC0gbGF5b3V0U3RhdGUtPm1fcGFnZU9mZnNldCkuaGVpZ2h0KCkgKyB5UG9zKSAl
IHBhZ2VMb2dpY2FsSGVpZ2h0KSAlIHBhZ2VMb2dpY2FsSGVpZ2h0OwogICAgIGlmIChyZW1haW5p
bmdIZWlnaHQgPCBjaGlsZEhlaWdodCkKICAgICAgICAgcmV0dXJuIHlQb3MgKyByZW1haW5pbmdI
ZWlnaHQ7CiAgICAgcmV0dXJuIHlQb3M7CkBAIC01ODE2LDE5ICs1ODE2LDE5IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmFkanVzdExpbmVQb3NpdGlvbkZvclAKICAgICAvLyBUZWNobmljYWxseSBpZiB0
aGUgbG9jYXRpb24gd2UgbW92ZSB0aGUgbGluZSB0byBoYXMgYSBkaWZmZXJlbnQgbGluZSB3aWR0
aCB0aGFuIG91ciBvbGQgcG9zaXRpb24sIHRoZW4gd2UgbmVlZCB0byBkaXJ0eSB0aGUKICAgICAv
LyBsaW5lIGFuZCBhbGwgZm9sbG93aW5nIGxpbmVzLgogICAgIExheW91dFN0YXRlKiBsYXlvdXRT
dGF0ZSA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKTsKLSAgICBpbnQgcGFnZUhlaWdodCA9IGxheW91
dFN0YXRlLT5tX3BhZ2VIZWlnaHQ7CisgICAgaW50IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gbGF5b3V0
U3RhdGUtPm1fcGFnZUxvZ2ljYWxIZWlnaHQ7CiAgICAgaW50IHlQb3MgPSBsaW5lQm94LT50b3BW
aXN1YWxPdmVyZmxvdygpOwogICAgIGludCBsaW5lSGVpZ2h0ID0gbGluZUJveC0+Ym90dG9tVmlz
dWFsT3ZlcmZsb3coKSAtIHlQb3M7CiAgICAgaWYgKGxheW91dFN0YXRlLT5tX2NvbHVtbkluZm8p
CiAgICAgICAgIGxheW91dFN0YXRlLT5tX2NvbHVtbkluZm8tPnVwZGF0ZU1pbmltdW1Db2x1bW5I
ZWlnaHQobGluZUhlaWdodCk7CiAgICAgeVBvcyArPSBkZWx0YTsKICAgICBsaW5lQm94LT5zZXRQ
YWdpbmF0aW9uU3RydXQoMCk7Ci0gICAgaWYgKCFwYWdlSGVpZ2h0IHx8IGxpbmVIZWlnaHQgPiBw
YWdlSGVpZ2h0KQorICAgIGlmICghcGFnZUxvZ2ljYWxIZWlnaHQgfHwgbGluZUhlaWdodCA+IHBh
Z2VMb2dpY2FsSGVpZ2h0KQogICAgICAgICByZXR1cm47Ci0gICAgaW50IHJlbWFpbmluZ0hlaWdo
dCA9IHBhZ2VIZWlnaHQgLSAoKGxheW91dFN0YXRlLT5tX2xheW91dE9mZnNldCAtIGxheW91dFN0
YXRlLT5tX3BhZ2VPZmZzZXQpLmhlaWdodCgpICsgeVBvcykgJSBwYWdlSGVpZ2h0OworICAgIGlu
dCByZW1haW5pbmdIZWlnaHQgPSBwYWdlTG9naWNhbEhlaWdodCAtICgobGF5b3V0U3RhdGUtPm1f
bGF5b3V0T2Zmc2V0IC0gbGF5b3V0U3RhdGUtPm1fcGFnZU9mZnNldCkuaGVpZ2h0KCkgKyB5UG9z
KSAlIHBhZ2VMb2dpY2FsSGVpZ2h0OwogICAgIGlmIChyZW1haW5pbmdIZWlnaHQgPCBsaW5lSGVp
Z2h0KSB7CiAgICAgICAgIGludCB0b3RhbEhlaWdodCA9IGxpbmVIZWlnaHQgKyBtYXgoMCwgeVBv
cyk7Ci0gICAgICAgIGlmIChsaW5lQm94ID09IGZpcnN0Um9vdEJveCgpICYmIHRvdGFsSGVpZ2h0
IDwgcGFnZUhlaWdodCAmJiAhaXNQb3NpdGlvbmVkKCkgJiYgIWlzVGFibGVDZWxsKCkpCisgICAg
ICAgIGlmIChsaW5lQm94ID09IGZpcnN0Um9vdEJveCgpICYmIHRvdGFsSGVpZ2h0IDwgcGFnZUxv
Z2ljYWxIZWlnaHQgJiYgIWlzUG9zaXRpb25lZCgpICYmICFpc1RhYmxlQ2VsbCgpKQogICAgICAg
ICAgICAgc2V0UGFnaW5hdGlvblN0cnV0KHJlbWFpbmluZ0hlaWdodCArIG1heCgwLCB5UG9zKSk7
CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgZGVsdGEgKz0gcmVtYWluaW5nSGVpZ2h0OwpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiA3Mzk0MCkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxk
LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92
ZUNoaWxkKFJlbmRlck9iamVjdCopOwogCi0gICAgdmlydHVhbCB2b2lkIGxheW91dEJsb2NrKGJv
b2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50IHBhZ2VIZWlnaHQgPSAwKTsKKyAgICB2aXJ0dWFsIHZv
aWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBpbnQgcGFnZUxvZ2ljYWxIZWln
aHQgPSAwKTsKIAogICAgIHZvaWQgaW5zZXJ0UG9zaXRpb25lZE9iamVjdChSZW5kZXJCb3gqKTsK
ICAgICB2b2lkIHJlbW92ZVBvc2l0aW9uZWRPYmplY3QoUmVuZGVyQm94Kik7CkBAIC01NjcsNyAr
NTY3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIG9mZnNldEZvckNvbnRlbnRzKGludCYgdHgsIGlu
dCYgdHkpIGNvbnN0OwogCiAgICAgdm9pZCBjYWxjQ29sdW1uV2lkdGgoKTsKLSAgICBib29sIGxh
eW91dENvbHVtbnMoYm9vbCBoYXNTcGVjaWZpZWRQYWdlSGVpZ2h0LCBpbnQgcGFnZUhlaWdodCwg
TGF5b3V0U3RhdGVNYWludGFpbmVyJik7CisgICAgYm9vbCBsYXlvdXRDb2x1bW5zKGJvb2wgaGFz
U3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWlnaHQsIGludCBwYWdlTG9naWNhbEhlaWdodCwgTGF5b3V0
U3RhdGVNYWludGFpbmVyJik7CiAgICAgdm9pZCBtYWtlQ2hpbGRyZW5Bbm9ueW1vdXNDb2x1bW5C
bG9ja3MoUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyQmxvY2sqIG5ld0Jsb2NrQm94
LCBSZW5kZXJPYmplY3QqIG5ld0NoaWxkKTsKIAogICAgIGJvb2wgZXhwYW5kc1RvRW5jbG9zZU92
ZXJoYW5naW5nRmxvYXRzKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJl
dmlzaW9uIDczOTQxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc1Miw3ICsxNzUyLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dp
Y2FsSGVpZ2h0KCkKICAgICAgICAgaW50IG1hcmdpbnMgPSBjb2xsYXBzZWRNYXJnaW5CZWZvcmUo
KSArIGNvbGxhcHNlZE1hcmdpbkFmdGVyKCk7CiAgICAgICAgIGludCB2aXNIZWlnaHQ7CiAgICAg
ICAgIGlmIChkb2N1bWVudCgpLT5wcmludGluZygpKQotICAgICAgICAgICAgdmlzSGVpZ2h0ID0g
c3RhdGljX2Nhc3Q8aW50Pih2aWV3KCktPnBhZ2VIZWlnaHQoKSk7CisgICAgICAgICAgICB2aXNI
ZWlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHZpZXcoKS0+cGFnZUxvZ2ljYWxIZWlnaHQoKSk7CiAg
ICAgICAgIGVsc2UgIHsKICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpKQogICAgICAgICAgICAgICAgIHZpc0hlaWdodCA9IHZpZXcoKS0+dmlld0hlaWdo
dCgpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAkocmV2aXNp
b24gNzM5NDApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3OCw3ICsyNzgsNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94Ojps
YXlvdXRCbG9jayhib29sCiAKICAgICB1cGRhdGVMYXllclRyYW5zZm9ybSgpOwogCi0gICAgaWYg
KHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdlSGVpZ2h0KQorICAgIGlmICh2aWV3KCktPmxh
eW91dFN0YXRlKCktPnBhZ2VMb2dpY2FsSGVpZ2h0KCkpCiAgICAgICAgIHNldFBhZ2VZKHZpZXco
KS0+bGF5b3V0U3RhdGUoKS0+cGFnZVkoeSgpKSk7CiAKICAgICAvLyBVcGRhdGUgb3VyIHNjcm9s
bGJhcnMgaWYgd2UncmUgb3ZlcmZsb3c6YXV0by9zY3JvbGwvaGlkZGVuIG5vdyB0aGF0IHdlIGtu
b3cgaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHJldmlzaW9uIDczOTQwKQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OTAsNyArMzkwLDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKIAogICAgIHN0YXRlUHVz
aGVyLnBvcCgpOwogCi0gICAgaWYgKHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdlSGVpZ2h0
KQorICAgIGlmICh2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2VMb2dpY2FsSGVpZ2h0KCkpCiAg
ICAgICAgIHNldFBhZ2VZKHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnZVkoeSgpKSk7CiAKICAg
ICBib29sIGRpZEZ1bGxSZXBhaW50ID0gcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOwpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAkocmV2aXNpb24gNzM5NDApCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMiw3ICsxMjIsNyBAQCB2b2lkIFJlbmRlclRhYmxlUm93OjpsYXlvdXQoKQogICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlQ2VsbCgpKSB7CiAg
ICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSB0b1JlbmRlclRhYmxlQ2VsbChjaGls
ZCk7Ci0gICAgICAgICAgICBpZiAoIWNlbGwtPm5lZWRzTGF5b3V0KCkgJiYgcGFnaW5hdGVkICYm
IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdlSGVpZ2h0ICYmIHZpZXcoKS0+bGF5b3V0U3Rh
dGUoKS0+cGFnZVkoY2VsbC0+eSgpKSAhPSBjZWxsLT5wYWdlWSgpKQorICAgICAgICAgICAgaWYg
KCFjZWxsLT5uZWVkc0xheW91dCgpICYmIHBhZ2luYXRlZCAmJiB2aWV3KCktPmxheW91dFN0YXRl
KCktPnBhZ2VMb2dpY2FsSGVpZ2h0KCkgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlWShj
ZWxsLT55KCkpICE9IGNlbGwtPnBhZ2VZKCkpCiAgICAgICAgICAgICAgICAgY2VsbC0+c2V0Q2hp
bGROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7CiAKICAgICAgICAgICAgIGlmIChjaGlsZC0+bmVl
ZHNMYXlvdXQoKSkgewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24u
Y3BwCShyZXZpc2lvbiA3Mzk0MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2Vj
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxNCwxMyArNjE0LDEzIEBAIGludCBSZW5kZXJU
YWJsZVNlY3Rpb246OmxheW91dFJvd3MoaW50IHQKICAgICAgICAgICAgIGlmIChpbnRyaW5zaWNQ
YWRkaW5nQmVmb3JlICE9IG9sZEludHJpbnNpY1BhZGRpbmdCZWZvcmUgfHwgaW50cmluc2ljUGFk
ZGluZ0FmdGVyICE9IG9sZEludHJpbnNpY1BhZGRpbmdBZnRlcikKICAgICAgICAgICAgICAgICBj
ZWxsLT5zZXROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7CiAKLSAgICAgICAgICAgIGlmICghY2Vs
bC0+bmVlZHNMYXlvdXQoKSAmJiB2aWV3KCktPmxheW91dFN0YXRlKCktPm1fcGFnZUhlaWdodCAm
JiB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2VZKGNlbGwtPnkoKSkgIT0gY2VsbC0+cGFnZVko
KSkKKyAgICAgICAgICAgIGlmICghY2VsbC0+bmVlZHNMYXlvdXQoKSAmJiB2aWV3KCktPmxheW91
dFN0YXRlKCktPnBhZ2VMb2dpY2FsSGVpZ2h0KCkgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5w
YWdlWShjZWxsLT55KCkpICE9IGNlbGwtPnBhZ2VZKCkpCiAgICAgICAgICAgICAgICAgY2VsbC0+
c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7CiAKICAgICAgICAgICAgIGNlbGwtPmxh
eW91dElmTmVlZGVkKCk7CiAKICAgICAgICAgICAgIC8vIEZJWE1FOiBNYWtlIHBhZ2luYXRpb24g
d29yayB3aXRoIHZlcnRpY2FsIHRhYmxlcy4KLSAgICAgICAgICAgIGlmIChzdHlsZSgpLT5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdlSGVp
Z2h0ICYmIGNlbGwtPmhlaWdodCgpICE9IHJIZWlnaHQpCisgICAgICAgICAgICBpZiAoc3R5bGUo
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiB2aWV3KCktPmxheW91dFN0YXRlKCktPnBh
Z2VMb2dpY2FsSGVpZ2h0KCkgJiYgY2VsbC0+aGVpZ2h0KCkgIT0gckhlaWdodCkKICAgICAgICAg
ICAgICAgICBjZWxsLT5zZXRIZWlnaHQockhlaWdodCk7IC8vIEZJWE1FOiBQYWdpbmF0aW9uIG1p
Z2h0IGhhdmUgbWFkZSB1cyBjaGFuZ2Ugc2l6ZS4gIEZvciBub3cganVzdCBzaHJpbmsgb3IgZ3Jv
dyB0aGUgY2VsbCB0byBmaXQgd2l0aG91dCBkb2luZyBhIHJlbGF5b3V0LgogCiAgICAgICAgICAg
ICBJbnRTaXplIGNoaWxkT2Zmc2V0KGNlbGwtPngoKSAtIG9sZENlbGxSZWN0LngoKSwgY2VsbC0+
eSgpIC0gb2xkQ2VsbFJlY3QueSgpKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCShy
ZXZpc2lvbiA3Mzk0MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw4ICs0OSw4IEBAIFJlbmRlclZpZXc6OlJlbmRlclZpZXcoTm9kZSog
bm9kZSwgRnJhbWUKICAgICAsIG1fc2VsZWN0aW9uU3RhcnRQb3MoLTEpCiAgICAgLCBtX3NlbGVj
dGlvbkVuZFBvcygtMSkKICAgICAsIG1fbWF4aW1hbE91dGxpbmVTaXplKDApCi0gICAgLCBtX3Bh
Z2VIZWlnaHQoMCkKLSAgICAsIG1fcGFnZUhlaWdodENoYW5nZWQoZmFsc2UpCisgICAgLCBtX3Bh
Z2VMb2dpY2FsSGVpZ2h0KDApCisgICAgLCBtX3BhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZChmYWxz
ZSkKICAgICAsIG1fbGF5b3V0U3RhdGUoMCkKICAgICAsIG1fbGF5b3V0U3RhdGVEaXNhYmxlQ291
bnQoMCkKIHsKQEAgLTEwMiw3ICsxMDIsNyBAQCBib29sIFJlbmRlclZpZXc6OmlzQ2hpbGRBbGxv
d2VkKFJlbmRlck9iCiB2b2lkIFJlbmRlclZpZXc6OmxheW91dCgpCiB7CiAgICAgaWYgKCFkb2N1
bWVudCgpLT5wYWdpbmF0ZWQoKSkKLSAgICAgICAgc2V0UGFnZUhlaWdodCgwKTsKKyAgICAgICAg
c2V0UGFnZUxvZ2ljYWxIZWlnaHQoMCk7CiAKICAgICBpZiAocHJpbnRpbmcoKSkKICAgICAgICAg
bV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9
IHdpZHRoKCk7CkBAIC0xMjEsOSArMTIxLDkgQEAgdm9pZCBSZW5kZXJWaWV3OjpsYXlvdXQoKQog
ICAgIExheW91dFN0YXRlIHN0YXRlOwogICAgIC8vIEZJWE1FOiBNYXkgYmUgYmV0dGVyIHRvIHB1
c2ggYSBjbGlwIGFuZCBhdm9pZCBpc3N1aW5nIG9mZnNjcmVlbiByZXBhaW50cy4KICAgICBzdGF0
ZS5tX2NsaXBwZWQgPSBmYWxzZTsKLSAgICBzdGF0ZS5tX3BhZ2VIZWlnaHQgPSBtX3BhZ2VIZWln
aHQ7Ci0gICAgc3RhdGUubV9wYWdlSGVpZ2h0Q2hhbmdlZCA9IG1fcGFnZUhlaWdodENoYW5nZWQ7
Ci0gICAgbV9wYWdlSGVpZ2h0Q2hhbmdlZCA9IGZhbHNlOworICAgIHN0YXRlLm1fcGFnZUxvZ2lj
YWxIZWlnaHQgPSBtX3BhZ2VMb2dpY2FsSGVpZ2h0OworICAgIHN0YXRlLm1fcGFnZUxvZ2ljYWxI
ZWlnaHRDaGFuZ2VkID0gbV9wYWdlTG9naWNhbEhlaWdodENoYW5nZWQ7CisgICAgbV9wYWdlTG9n
aWNhbEhlaWdodENoYW5nZWQgPSBmYWxzZTsKICAgICBtX2xheW91dFN0YXRlID0gJnN0YXRlOwog
CiAgICAgaWYgKG5lZWRzTGF5b3V0KCkpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCShyZXZp
c2lvbiA3Mzk3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkod29ya2luZyBj
b3B5KQpAQCAtMTMyLDEyICsxMzIsMTIgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZUhpdFRlc3RSZXN1bHQoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50Jik7CiAKLSAg
ICB1bnNpZ25lZCBwYWdlSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlSGVpZ2h0OyB9Ci0g
ICAgdm9pZCBzZXRQYWdlSGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKKyAgICB1bnNpZ25lZCBwYWdl
TG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUxvZ2ljYWxIZWlnaHQ7IH0KKyAg
ICB2b2lkIHNldFBhZ2VMb2dpY2FsSGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKICAgICB7Ci0gICAg
ICAgIGlmIChtX3BhZ2VIZWlnaHQgIT0gaGVpZ2h0KSB7Ci0gICAgICAgICAgICBtX3BhZ2VIZWln
aHQgPSBoZWlnaHQ7Ci0gICAgICAgICAgICBtX3BhZ2VIZWlnaHRDaGFuZ2VkID0gdHJ1ZTsKKyAg
ICAgICAgaWYgKG1fcGFnZUxvZ2ljYWxIZWlnaHQgIT0gaGVpZ2h0KSB7CisgICAgICAgICAgICBt
X3BhZ2VMb2dpY2FsSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICAgICAgbV9wYWdlTG9naWNhbEhl
aWdodENoYW5nZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMzMsOCArMjMzLDgg
QEAgcHJvdGVjdGVkOgogICAgIFJlbmRlcldpZGdldFNldCBtX3dpZGdldHM7CiAgICAgCiBwcml2
YXRlOgotICAgIHVuc2lnbmVkIG1fcGFnZUhlaWdodDsKLSAgICBib29sIG1fcGFnZUhlaWdodENo
YW5nZWQ7CisgICAgdW5zaWduZWQgbV9wYWdlTG9naWNhbEhlaWdodDsKKyAgICBib29sIG1fcGFn
ZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkOwogICAgIExheW91dFN0YXRlKiBtX2xheW91dFN0YXRlOwog
ICAgIHVuc2lnbmVkIG1fbGF5b3V0U3RhdGVEaXNhYmxlQ291bnQ7CiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76659</attachid>
            <date>2010-12-15 10:02:32 -0800</date>
            <delta_ts>2010-12-17 16:38:55 -0800</delta_ts>
            <desc>Part 2: pageY -&gt; pageLogicalOffset</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>9744</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDExOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTAtMTItMTUgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmFt
ZSBwYWdlWSB0byBwYWdlTG9naWNhbE9mZnNldCwgc2luY2UgZm9yIHZlcnRpY2FsIHdyaXRpbmcg
bW9kZXMgaXQgaXMgYW4geC1wb3NpdGlvbiByYXRoZXIgdGhhbiBhCisgICAgICAgIHktcG9zaXRp
b24uCisKKyAgICAgICAgKiByZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0U3RhdGU6OnBhZ2VMb2dpY2FsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dFN0YXRlOjphZGRGb3JjZWRDb2x1bW5CcmVhayk6CisgICAgICAgICogcmVuZGVyaW5n
L0xheW91dFN0YXRlLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6bWFya0ZvclBhZ2luYXRpb25SZWxheW91dElmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRDb2x1bW5zKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpzZXRQYWdlTG9naWNhbE9mZnNldCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFn
ZUxvZ2ljYWxPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OlJlbmRlckJs
b2NrUmFyZURhdGE6OlJlbmRlckJsb2NrUmFyZURhdGEpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJGbGV4aWJsZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJv
eDo6bGF5b3V0QmxvY2spOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGFibGVSb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVSb3c6
OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MpOgorCiAyMDEw
LTEyLTEzICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9M
YXlvdXRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3Rh
dGUuY3BwCShyZXZpc2lvbiA3NDA0OCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDE2ICsxNjIsMTYgQEAgdm9pZCBMYXlvdXRTdGF0
ZTo6Y2xlYXJQYWdpbmF0aW9uSW5mb3JtYQogICAgIG1fY29sdW1uSW5mbyA9IG1fbmV4dC0+bV9j
b2x1bW5JbmZvOwogfQogCi1pbnQgTGF5b3V0U3RhdGU6OnBhZ2VZKGludCBjaGlsZFkpIGNvbnN0
CitpbnQgTGF5b3V0U3RhdGU6OnBhZ2VMb2dpY2FsT2Zmc2V0KGludCBjaGlsZExvZ2ljYWxPZmZz
ZXQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbGF5b3V0T2Zmc2V0LmhlaWdodCgpICsgY2hpbGRZ
IC0gbV9wYWdlT2Zmc2V0LmhlaWdodCgpOworICAgIHJldHVybiBtX2xheW91dE9mZnNldC5oZWln
aHQoKSArIGNoaWxkTG9naWNhbE9mZnNldCAtIG1fcGFnZU9mZnNldC5oZWlnaHQoKTsKIH0KIAog
dm9pZCBMYXlvdXRTdGF0ZTo6YWRkRm9yY2VkQ29sdW1uQnJlYWsoaW50IGNoaWxkWSkKIHsKICAg
ICBpZiAoIW1fY29sdW1uSW5mbyB8fCBtX2NvbHVtbkluZm8tPmNvbHVtbkhlaWdodCgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgbV9jb2x1bW5JbmZvLT5hZGRGb3JjZWRCcmVhayhwYWdlWShjaGls
ZFkpKTsKKyAgICBtX2NvbHVtbkluZm8tPmFkZEZvcmNlZEJyZWFrKHBhZ2VMb2dpY2FsT2Zmc2V0
KGNoaWxkWSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9MYXlvdXRTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0xh
eW91dFN0YXRlLmgJKHJldmlzaW9uIDc0MDQ4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0
U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBjbGVhclBhZ2luYXRpb25JbmZvcm1hdGlvbigpOwogICAgIGJvb2wgaXNQYWdpbmF0aW5nQ29s
dW1ucygpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uSW5mbzsgfQogICAgIGJvb2wgaXNQYWdpbmF0
ZWQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VMb2dpY2FsSGVpZ2h0IHx8IG1fY29sdW1uSW5mbzsg
fQotICAgIGludCBwYWdlWShpbnQgY2hpbGRZKSBjb25zdDsKKyAgICBpbnQgcGFnZUxvZ2ljYWxP
ZmZzZXQoaW50IGNoaWxkTG9naWNhbE9mZnNldCkgY29uc3Q7CiAgICAgdm9pZCBhZGRGb3JjZWRD
b2x1bW5CcmVhayhpbnQgY2hpbGRZKTsKICAgICAKICAgICBib29sIHBhZ2VMb2dpY2FsSGVpZ2h0
KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlTG9naWNhbEhlaWdodDsgfQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gNzQwNjMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNDQsNyArMTI0NCw3IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICBzdGF0ZVB1c2hlci5wb3Ao
KTsKIAogICAgIGlmICh2aWV3KCktPmxheW91dFN0YXRlKCktPm1fcGFnZUxvZ2ljYWxIZWlnaHQp
Ci0gICAgICAgIHNldFBhZ2VZKHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnZVkoeSgpKSk7Cisg
ICAgICAgIHNldFBhZ2VMb2dpY2FsT2Zmc2V0KHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnZUxv
Z2ljYWxPZmZzZXQoeSgpKSk7CiAKICAgICB1cGRhdGVMYXllclRyYW5zZm9ybSgpOwogCkBAIC0y
MTM2LDcgKzIxMzYsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjptYXJrRm9yUGFnaW5hdGlvblJlbGF5
CiAgICAgaWYgKG5lZWRzTGF5b3V0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICh2aWV3
KCktPmxheW91dFN0YXRlKCktPnBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCgpIHx8ICh2aWV3KCkt
PmxheW91dFN0YXRlKCktPnBhZ2VMb2dpY2FsSGVpZ2h0KCkgJiYgdmlldygpLT5sYXlvdXRTdGF0
ZSgpLT5wYWdlWSh5KCkpICE9IHBhZ2VZKCkpKQorICAgIGlmICh2aWV3KCktPmxheW91dFN0YXRl
KCktPnBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCgpIHx8ICh2aWV3KCktPmxheW91dFN0YXRlKCkt
PnBhZ2VMb2dpY2FsSGVpZ2h0KCkgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlTG9naWNh
bE9mZnNldCh5KCkpICE9IHBhZ2VMb2dpY2FsT2Zmc2V0KCkpKQogICAgICAgICBzZXRDaGlsZE5l
ZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsKIH0KIApAQCAtNDIzOCw3ICs0MjM4LDcgQEAgYm9vbCBS
ZW5kZXJCbG9jazo6bGF5b3V0Q29sdW1ucyhib29sIGhhcwogICAgICAgICAgICAgLy8gbWF4aW11
bSBwYWdlIGJyZWFrIGRpc3RhbmNlLgogICAgICAgICAgICAgaWYgKCFwYWdlTG9naWNhbEhlaWdo
dCkgewogICAgICAgICAgICAgICAgIGludCBkaXN0YW5jZUJldHdlZW5CcmVha3MgPSBtYXgoY29s
SW5mby0+bWF4aW11bURpc3RhbmNlQmV0d2VlbkZvcmNlZEJyZWFrcygpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldygpLT5sYXlvdXRTdGF0ZSgp
LT5wYWdlWShib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSArIGNvbnRlbnRIZWlnaHQoKSkgLSBj
b2xJbmZvLT5mb3JjZWRCcmVha09mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnZUxvZ2ljYWxP
ZmZzZXQoYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkgKyBjb250ZW50SGVpZ2h0KCkpIC0gY29s
SW5mby0+Zm9yY2VkQnJlYWtPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgY29sdW1uSGVpZ2h0
ID0gbWF4KGNvbEluZm8tPm1pbmltdW1Db2x1bW5IZWlnaHQoKSwgZGlzdGFuY2VCZXR3ZWVuQnJl
YWtzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50SGVpZ2h0KCkg
PiBwYWdlTG9naWNhbEhlaWdodCAqIGRlc2lyZWRDb2x1bW5Db3VudCkgewpAQCAtNTQ1MCwxNCAr
NTQ1MCwxNCBAQCB2b2lkIFJlbmRlckJsb2NrOjpzZXRQYWdpbmF0aW9uU3RydXQoaW50CiAgICAg
bV9yYXJlRGF0YS0+bV9wYWdpbmF0aW9uU3RydXQgPSBzdHJ1dDsKIH0KIAotdm9pZCBSZW5kZXJC
bG9jazo6c2V0UGFnZVkoaW50IHkpCit2b2lkIFJlbmRlckJsb2NrOjpzZXRQYWdlTG9naWNhbE9m
ZnNldChpbnQgbG9naWNhbE9mZnNldCkKIHsKICAgICBpZiAoIW1fcmFyZURhdGEpIHsKLSAgICAg
ICAgaWYgKCF5KQorICAgICAgICBpZiAoIWxvZ2ljYWxPZmZzZXQpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIG1fcmFyZURhdGEgPSBuZXcgUmVuZGVyQmxvY2tSYXJlRGF0YSh0aGlzKTsK
ICAgICB9Ci0gICAgbV9yYXJlRGF0YS0+bV9wYWdlWSA9IHk7CisgICAgbV9yYXJlRGF0YS0+bV9w
YWdlTG9naWNhbE9mZnNldCA9IGxvZ2ljYWxPZmZzZXQ7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6
OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkpCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDc0MDQ4KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDkgKzE1Myw5IEBA
IHB1YmxpYzoKICAgICBJbnRSZWN0IGNvbHVtblJlY3RBdChDb2x1bW5JbmZvKiwgdW5zaWduZWQp
IGNvbnN0OwogCiAgICAgaW50IHBhZ2luYXRpb25TdHJ1dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFy
ZURhdGEgPyBtX3JhcmVEYXRhLT5tX3BhZ2luYXRpb25TdHJ1dCA6IDA7IH0KLSAgICBpbnQgcGFn
ZVkoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9wYWdlWSA6IDA7
IH0KLSAgICB2b2lkIHNldFBhZ2luYXRpb25TdHJ1dChpbnQgc3RydXQpOwotICAgIHZvaWQgc2V0
UGFnZVkoaW50IHkpOworICAgIGludCBwYWdlTG9naWNhbE9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3BhZ2VMb2dpY2FsT2Zmc2V0IDogMDsgfQorICAg
IHZvaWQgc2V0UGFnaW5hdGlvblN0cnV0KGludCk7CisgICAgdm9pZCBzZXRQYWdlTG9naWNhbE9m
ZnNldChpbnQpOwogCiAgICAgLy8gQWNjZXNzb3JzIGZvciBsb2dpY2FsIHdpZHRoL2hlaWdodCBh
bmQgbWFyZ2lucyBpbiB0aGUgY29udGFpbmluZyBibG9jaydzIGJsb2NrLWZsb3cgZGlyZWN0aW9u
LgogICAgIGVudW0gQXBwbHlMYXlvdXREZWx0YU1vZGUgeyBBcHBseUxheW91dERlbHRhLCBEb05v
dEFwcGx5TGF5b3V0RGVsdGEgfTsKQEAgLTY4Miw3ICs2ODIsNyBAQCBwcml2YXRlOgogICAgICAg
ICBSZW5kZXJCbG9ja1JhcmVEYXRhKGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaykgCiAgICAgICAg
ICAgICA6IG1fbWFyZ2lucyhwb3NpdGl2ZU1hcmdpbkJlZm9yZURlZmF1bHQoYmxvY2spLCBuZWdh
dGl2ZU1hcmdpbkJlZm9yZURlZmF1bHQoYmxvY2spLCBwb3NpdGl2ZU1hcmdpbkFmdGVyRGVmYXVs
dChibG9jayksIG5lZ2F0aXZlTWFyZ2luQWZ0ZXJEZWZhdWx0KGJsb2NrKSkKICAgICAgICAgICAg
ICwgbV9wYWdpbmF0aW9uU3RydXQoMCkKLSAgICAgICAgICAgICwgbV9wYWdlWSgwKQorICAgICAg
ICAgICAgLCBtX3BhZ2VMb2dpY2FsT2Zmc2V0KDApCiAgICAgICAgIHsgCiAgICAgICAgIH0KIApA
QCAtNzA2LDcgKzcwNiw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBNYXJnaW5WYWx1
ZXMgbV9tYXJnaW5zOwogICAgICAgICBpbnQgbV9wYWdpbmF0aW9uU3RydXQ7Ci0gICAgICAgIGlu
dCBtX3BhZ2VZOworICAgICAgICBpbnQgbV9wYWdlTG9naWNhbE9mZnNldDsKICAgICAgfTsKIAog
ICAgIE93blB0cjxSZW5kZXJCbG9ja1JhcmVEYXRhPiBtX3JhcmVEYXRhOwpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAkocmV2aXNpb24gNzQwNDgpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
OSw3ICsyNzksNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRCbG9jayhib29sCiAg
ICAgdXBkYXRlTGF5ZXJUcmFuc2Zvcm0oKTsKIAogICAgIGlmICh2aWV3KCktPmxheW91dFN0YXRl
KCktPnBhZ2VMb2dpY2FsSGVpZ2h0KCkpCi0gICAgICAgIHNldFBhZ2VZKHZpZXcoKS0+bGF5b3V0
U3RhdGUoKS0+cGFnZVkoeSgpKSk7CisgICAgICAgIHNldFBhZ2VMb2dpY2FsT2Zmc2V0KHZpZXco
KS0+bGF5b3V0U3RhdGUoKS0+cGFnZUxvZ2ljYWxPZmZzZXQoeSgpKSk7CiAKICAgICAvLyBVcGRh
dGUgb3VyIHNjcm9sbGJhcnMgaWYgd2UncmUgb3ZlcmZsb3c6YXV0by9zY3JvbGwvaGlkZGVuIG5v
dyB0aGF0IHdlIGtub3cgaWYKICAgICAvLyB3ZSBvdmVyZmxvdyBvciBub3QuCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZpc2lvbiA3NDA0OCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkxLDcgKzM5MSw3IEBAIHZv
aWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAgICAgc3RhdGVQdXNoZXIucG9wKCk7CiAKICAgICBp
ZiAodmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlTG9naWNhbEhlaWdodCgpKQotICAgICAgICBz
ZXRQYWdlWSh2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2VZKHkoKSkpOworICAgICAgICBzZXRQ
YWdlTG9naWNhbE9mZnNldCh2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2VMb2dpY2FsT2Zmc2V0
KHkoKSkpOwogCiAgICAgYm9vbCBkaWRGdWxsUmVwYWludCA9IHJlcGFpbnRlci5yZXBhaW50QWZ0
ZXJMYXlvdXQoKTsKICAgICAvLyBSZXBhaW50IHdpdGggb3VyIG5ldyBib3VuZHMgaWYgdGhleSBh
cmUgZGlmZmVyZW50IGZyb20gb3VyIG9sZCBib3VuZHMuCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZVJvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVSb3cuY3BwCShyZXZpc2lvbiA3NDA0OCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlUm93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDcgKzEyMiw3IEBAIHZvaWQg
UmVuZGVyVGFibGVSb3c6OmxheW91dCgpCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0g
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAg
ICAgICBpZiAoY2hpbGQtPmlzVGFibGVDZWxsKCkpIHsKICAgICAgICAgICAgIFJlbmRlclRhYmxl
Q2VsbCogY2VsbCA9IHRvUmVuZGVyVGFibGVDZWxsKGNoaWxkKTsKLSAgICAgICAgICAgIGlmICgh
Y2VsbC0+bmVlZHNMYXlvdXQoKSAmJiBwYWdpbmF0ZWQgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgp
LT5wYWdlTG9naWNhbEhlaWdodCgpICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnZVkoY2Vs
bC0+eSgpKSAhPSBjZWxsLT5wYWdlWSgpKQorICAgICAgICAgICAgaWYgKCFjZWxsLT5uZWVkc0xh
eW91dCgpICYmIHBhZ2luYXRlZCAmJiB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2VMb2dpY2Fs
SGVpZ2h0KCkgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlTG9naWNhbE9mZnNldChjZWxs
LT55KCkpICE9IGNlbGwtPnBhZ2VMb2dpY2FsT2Zmc2V0KCkpCiAgICAgICAgICAgICAgICAgY2Vs
bC0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7CiAKICAgICAgICAgICAgIGlmIChj
aGlsZC0+bmVlZHNMYXlvdXQoKSkgewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVTZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZVNlY3Rpb24uY3BwCShyZXZpc2lvbiA3NDA0OCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlU2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxNCw3ICs2MTQsNyBAQCBpbnQg
UmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKGludCB0CiAgICAgICAgICAgICBpZiAoaW50
cmluc2ljUGFkZGluZ0JlZm9yZSAhPSBvbGRJbnRyaW5zaWNQYWRkaW5nQmVmb3JlIHx8IGludHJp
bnNpY1BhZGRpbmdBZnRlciAhPSBvbGRJbnRyaW5zaWNQYWRkaW5nQWZ0ZXIpCiAgICAgICAgICAg
ICAgICAgY2VsbC0+c2V0TmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOwogCi0gICAgICAgICAgICBp
ZiAoIWNlbGwtPm5lZWRzTGF5b3V0KCkgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlTG9n
aWNhbEhlaWdodCgpICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnZVkoY2VsbC0+eSgpKSAh
PSBjZWxsLT5wYWdlWSgpKQorICAgICAgICAgICAgaWYgKCFjZWxsLT5uZWVkc0xheW91dCgpICYm
IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnZUxvZ2ljYWxIZWlnaHQoKSAmJiB2aWV3KCktPmxh
eW91dFN0YXRlKCktPnBhZ2VMb2dpY2FsT2Zmc2V0KGNlbGwtPnkoKSkgIT0gY2VsbC0+cGFnZUxv
Z2ljYWxPZmZzZXQoKSkKICAgICAgICAgICAgICAgICBjZWxsLT5zZXRDaGlsZE5lZWRzTGF5b3V0
KHRydWUsIGZhbHNlKTsKIAogICAgICAgICAgICAgY2VsbC0+bGF5b3V0SWZOZWVkZWQoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80377</attachid>
            <date>2011-01-27 16:55:00 -0800</date>
            <delta_ts>2011-01-27 18:00:14 -0800</delta_ts>
            <desc>vertical-lr works great.  vertical-rl prints correctly but spasms the scrollbar in WebKit2.  vertical-rl does not print correctly in Mac WebKit1.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>45654</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2ODYxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTEtMDEtMjcgIERhdmUgSHlh
dHQgIDxoeWF0dEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2
NDIyLCBtYWtlIHByaW50aW5nIGFuZCBwYWdpbmF0aW9uIHdvcmsKKyAgICAgICAgd2l0aCB2ZXJ0
aWNhbCB0ZXh0LgorCisgICAgICAgIENoYW5nZSBwcmludGluZyBmdW5jdGlvbnMgdG8gY2hlY2sg
d3JpdGluZy1tb2RlIGFuZCBwcm9wZXJseSBzd2FwIHdpZHRoIGFuZCBoZWlnaHQKKyAgICAgICAg
YXMgbmVlZGVkLgorICAgICAgICAKKyAgICAgICAgRml4IHRoZSBzZXRTY3JvbGxPcmlnaW4gZnVu
Y3Rpb24gc28gdGhhdCB0aGUgb3JpZ2luIGRvZXNuJ3QgY2F1c2UKKyAgICAgICAgc2Nyb2xsIHNw
YXNtaW5nIGR1cmluZyBwcmludGluZyAodGhpcyBpcyBvbmx5IHBhcnRpYWxseSBzdWNjZXNzZnVs
LCBidXQgaXQncyBiZXR0ZXIKKyAgICAgICAgdGhhbiBpdCB3YXMpLgorCisgICAgICAgIFJld3Jp
dGUgY29tcHV0ZVBhZ2VSZWN0cyB0byBoYW5kbGUgYm90aCBSVEwgZG9jdW1lbnRzIHByb3Blcmx5
IGFzIHdlbGwgYXMgdmVydGljYWwKKyAgICAgICAgdGV4dCBkb2N1bWVudHMgcHJvcGVybHkuCisK
KyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmFkanVzdFZpZXdTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lVmlldzo6Zm9yY2VMYXlvdXRGb3JQYWdpbmF0aW9uKToKKyAgICAgICAg
KiBwYWdlL1ByaW50Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcmludENvbnRleHQ6
OmNvbXB1dGVQYWdlUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UHJpbnRDb250ZXh0Ojpjb21w
dXRlUGFnZVJlY3RzV2l0aFBhZ2VTaXplSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UHJp
bnRDb250ZXh0Ojpjb21wdXRlQXV0b21hdGljU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6UHJpbnRDb250ZXh0OjpzcG9vbFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UHJpbnRDb250
ZXh0OjpzcG9vbFJlY3QpOgorICAgICAgICAqIHBhZ2UvUHJpbnRDb250ZXh0Lmg6CisgICAgICAg
ICogcGFnZS9tYWMvV2ViQ29yZUZyYW1lVmlldy5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9s
bFZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2hlZWxFdmVudCk6Cisg
ICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9T
Y3JvbGxWaWV3TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1T
ZXRTY3JvbGxPcmlnaW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmxheW91dCk6CisKIDIwMTEtMDEtMjcgIENhcm9s
IFN6YWJvIDxjYXJvbC5zemFib0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2
aWQgSHlhdHQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gNzY3MjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMjY2LDcgKzI2
Niw3IEBAIF9fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0MTZjb21wdXRlUGFnZVIKIF9fWk43V2Vi
Q29yZTEyUHJpbnRDb250ZXh0MTZpc1BhZ2VCb3hWaXNpYmxlRVBOU181RnJhbWVFaQogX19aTjdX
ZWJDb3JlMTJQcmludENvbnRleHQyMHBhZ2VOdW1iZXJGb3JFbGVtZW50RVBOU183RWxlbWVudEVS
S05TXzlGbG9hdFNpemVFCiBfX1pON1dlYkNvcmUxMlByaW50Q29udGV4dDI2cGFnZVNpemVBbmRN
YXJnaW5zSW5QaXhlbHNFUE5TXzVGcmFtZUVpaWlpaWlpCi1fX1pON1dlYkNvcmUxMlByaW50Q29u
dGV4dDI3Y29tcHV0ZUF1dG9tYXRpY1NjYWxlRmFjdG9yRWYKK19fWk43V2ViQ29yZTEyUHJpbnRD
b250ZXh0Mjdjb21wdXRlQXV0b21hdGljU2NhbGVGYWN0b3JFUktOU185RmxvYXRTaXplRQogX19a
TjdXZWJDb3JlMTJQcmludENvbnRleHQyN3Nwb29sQWxsUGFnZXNXaXRoQm91bmRhcmllc0VQTlNf
NUZyYW1lRVJOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzlGbG9hdFNpemVFCiBfX1pON1dlYkNv
cmUxMlByaW50Q29udGV4dDI4Y29tcHV0ZVBhZ2VSZWN0c1dpdGhQYWdlU2l6ZUVSS05TXzlGbG9h
dFNpemVFYgogX19aTjdXZWJDb3JlMTJQcmludENvbnRleHQzZW5kRXYKQEAgLTEyMjAsNiArMTIy
MCwxMiBAQCBfX1pUVk43V2ViQ29yZTEyQ2hyb21lQ2xpZW50RQogX19aVFZON1dlYkNvcmUxN0Zp
bGVDaG9vc2VyQ2xpZW50RQogX19aVFZON1dlYkNvcmUxN0ZyYW1lTG9hZGVyQ2xpZW50RQogX19a
VFZON1dlYkNvcmUyNUhpc3RvcnlQcm9wZXJ0eUxpc3RXcml0ZXJFCitfX1pOSzdXZWJDb3JlMTJS
ZW5kZXJPYmplY3Q0dmlld0V2CitfX1pOSzdXZWJDb3JlMTBSZW5kZXJWaWV3N2RvY0xlZnRFdgor
X19aTks3V2ViQ29yZTEwUmVuZGVyVmlldzZkb2NUb3BFdgorX19aTks3V2ViQ29yZTEwUmVuZGVy
Vmlldzhkb2NSaWdodEV2CitfX1pOSzdXZWJDb3JlMTBSZW5kZXJWaWV3OWRvY0JvdHRvbUV2Citf
X1pOSzdXZWJDb3JlOERvY3VtZW50MTByZW5kZXJWaWV3RXYKIF9maWxlbmFtZUJ5Rml4aW5nSWxs
ZWdhbENoYXJhY3RlcnMKIF9oYXNDYXNlSW5zZW5zaXRpdmVTdWJzdHJpbmcKIF9oYXNDYXNlSW5z
ZW5zaXRpdmVTdWZmaXgKQEAgLTE0MjksNyArMTQzNSw2IEBAIF9fTlBOX1VURjhGcm9tSWRlbnRp
ZmllcgogX19aTjdXZWJDb3JlMTZTY3JpcHRDb250cm9sbGVyMjB3aW5kb3dTY3JpcHROUE9iamVj
dEV2CiBfX1pON1dlYkNvcmUxNlNjcmlwdENvbnRyb2xsZXIyOWNsZWFudXBTY3JpcHRPYmplY3Rz
Rm9yUGx1Z2luRVB2CiBfX1pON1dlYkNvcmUxN0hUTUxQbHVnSW5FbGVtZW50MTFnZXROUE9iamVj
dEV2Ci1fX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3Q0dmlld0V2CiBfX1pOSzdXZWJDb3JlMTRT
ZWN1cml0eU9yaWdpbjljYW5BY2Nlc3NFUEtTMF8KIF9fWk5LN1dlYkNvcmU0S1VSTDEwcHJvdG9j
b2xJc0VQS2MKIF9fWk5LN1dlYkNvcmU0S1VSTDdoYXNQYXRoRXYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDc2NzI2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTMsNyArNDUzLDcgQEAgdm9pZCBGcmFt
ZVZpZXc6OmFkanVzdFZpZXdTaXplKCkKIAogICAgIEludFNpemUgc2l6ZSA9IEludFNpemUocm9v
dC0+ZG9jV2lkdGgoKSwgcm9vdC0+ZG9jSGVpZ2h0KCkpOwogCi0gICAgU2Nyb2xsVmlldzo6c2V0
U2Nyb2xsT3JpZ2luKEludFBvaW50KC1yb290LT5kb2NMZWZ0KCksIC1yb290LT5kb2NUb3AoKSks
IHNpemUgPT0gY29udGVudHNTaXplKCkpOworICAgIFNjcm9sbFZpZXc6OnNldFNjcm9sbE9yaWdp
bihJbnRQb2ludCgtcm9vdC0+ZG9jTGVmdCgpLCAtcm9vdC0+ZG9jVG9wKCkpLCAhbV9mcmFtZS0+
ZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSwgc2l6ZSA9PSBjb250ZW50c1NpemUoKSk7CiAgICAgCiAg
ICAgc2V0Q29udGVudHNTaXplKHNpemUpOwogfQpAQCAtMjI3NywyNyArMjI3NywzOCBAQCB2b2lk
IEZyYW1lVmlldzo6Zm9yY2VMYXlvdXRGb3JQYWdpbmF0aW9uCiAgICAgLy8gdGhlIHN0YXRlIG9m
IHRoaW5ncyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBsYXlvdXQKICAgICBSZW5kZXJWaWV3ICpyb290
ID0gdG9SZW5kZXJWaWV3KG1fZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlcmVyKCkpOwogICAgIGlm
IChyb290KSB7Ci0gICAgICAgIGludCBwYWdlVyA9IGNlaWxmKHBhZ2VTaXplLndpZHRoKCkpOwot
ICAgICAgICByb290LT5zZXRXaWR0aChwYWdlVyk7Ci0gICAgICAgIHJvb3QtPnNldFBhZ2VMb2dp
Y2FsSGVpZ2h0KHBhZ2VTaXplLmhlaWdodCgpKTsKKyAgICAgICAgZmxvYXQgcGFnZUxvZ2ljYWxX
aWR0aCA9IHJvb3QtPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBwYWdlU2l6
ZS53aWR0aCgpIDogcGFnZVNpemUuaGVpZ2h0KCk7CisgICAgICAgIGZsb2F0IHBhZ2VMb2dpY2Fs
SGVpZ2h0ID0gcm9vdC0+c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBhZ2VT
aXplLmhlaWdodCgpIDogcGFnZVNpemUud2lkdGgoKTsKKworICAgICAgICBpbnQgZmxvb3JlZFBh
Z2VMb2dpY2FsV2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KHBhZ2VMb2dpY2FsV2lkdGgpOworICAg
ICAgICByb290LT5zZXRMb2dpY2FsV2lkdGgoZmxvb3JlZFBhZ2VMb2dpY2FsV2lkdGgpOworICAg
ICAgICByb290LT5zZXRQYWdlTG9naWNhbEhlaWdodChyb290LT5zdHlsZSgpLT5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpID8gcGFnZVNpemUuaGVpZ2h0KCkgOiBwYWdlU2l6ZS53aWR0aCgpKTsK
ICAgICAgICAgcm9vdC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAg
ICAgIGZvcmNlTGF5b3V0KCk7Ci0KKyAgICAgICAgCiAgICAgICAgIC8vIElmIHdlIGRvbid0IGZp
dCBpbiB0aGUgZ2l2ZW4gcGFnZSB3aWR0aCwgd2UnbGwgbGF5IG91dCBhZ2Fpbi4gSWYgd2UgZG9u
J3QgZml0IGluIHRoZQogICAgICAgICAvLyBwYWdlIHdpZHRoIHdoZW4gc2hydW5rLCB3ZSB3aWxs
IGxheSBvdXQgYXQgbWF4aW11bSBzaHJpbmsgYW5kIGNsaXAgZXh0cmEgY29udGVudC4KICAgICAg
ICAgLy8gRklYTUU6IFdlIGFyZSBhc3N1bWluZyBhIHNocmluay10by1maXQgcHJpbnRpbmcgaW1w
bGVtZW50YXRpb24uICBBIGNyb3BwaW5nCiAgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIHNob3Vs
ZCBub3QgZG8gdGhpcyEKLSAgICAgICAgaW50IGRvY1dpZHRoID0gcm9vdC0+ZG9jV2lkdGgoKTsK
LSAgICAgICAgaWYgKGRvY1dpZHRoID4gcGFnZVNpemUud2lkdGgoKSkgewotICAgICAgICAgICAg
cGFnZVcgPSBzdGQ6Om1pbjxpbnQ+KGRvY1dpZHRoLCBjZWlsZihwYWdlU2l6ZS53aWR0aCgpICog
bWF4aW11bVNocmlua0ZhY3RvcikpOwotICAgICAgICAgICAgaWYgKHBhZ2VTaXplLmhlaWdodCgp
KQotICAgICAgICAgICAgICAgIHJvb3QtPnNldFBhZ2VMb2dpY2FsSGVpZ2h0KHBhZ2VXIC8gcGFn
ZVNpemUud2lkdGgoKSAqIHBhZ2VTaXplLmhlaWdodCgpKTsKLSAgICAgICAgICAgIHJvb3QtPnNl
dFdpZHRoKHBhZ2VXKTsKKyAgICAgICAgaW50IGRvY0xvZ2ljYWxXaWR0aCA9IHJvb3QtPnN0eWxl
KCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyByb290LT5kb2NXaWR0aCgpIDogcm9vdC0+
ZG9jSGVpZ2h0KCk7CisgICAgICAgIGlmIChkb2NMb2dpY2FsV2lkdGggPiBwYWdlTG9naWNhbFdp
ZHRoKSB7CisgICAgICAgICAgICBmbG9vcmVkUGFnZUxvZ2ljYWxXaWR0aCA9IHN0ZDo6bWluPGlu
dD4oZG9jTG9naWNhbFdpZHRoLCBzdGF0aWNfY2FzdDxpbnQ+KHBhZ2VMb2dpY2FsV2lkdGggKiBt
YXhpbXVtU2hyaW5rRmFjdG9yKSk7CisgICAgICAgICAgICBpZiAocGFnZUxvZ2ljYWxIZWlnaHQp
CisgICAgICAgICAgICAgICAgcm9vdC0+c2V0UGFnZUxvZ2ljYWxIZWlnaHQoZmxvb3JlZFBhZ2VM
b2dpY2FsV2lkdGggLyBwYWdlU2l6ZS53aWR0aCgpICogcGFnZVNpemUuaGVpZ2h0KCkpOworICAg
ICAgICAgICAgcm9vdC0+c2V0TG9naWNhbFdpZHRoKGZsb29yZWRQYWdlTG9naWNhbFdpZHRoKTsK
ICAgICAgICAgICAgIHJvb3QtPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwog
ICAgICAgICAgICAgZm9yY2VMYXlvdXQoKTsKLSAgICAgICAgICAgIGludCBkb2NIZWlnaHQgPSBy
b290LT5kb2NIZWlnaHQoKTsKICAgICAgICAgICAgIHJvb3QtPmNsZWFyTGF5b3V0T3ZlcmZsb3co
KTsKLSAgICAgICAgICAgIHJvb3QtPmFkZExheW91dE92ZXJmbG93KEludFJlY3QoMCwgMCwgcGFn
ZVcsIGRvY0hlaWdodCkpOyAvLyBUaGlzIGlzIGhvdyB3ZSBjbGlwIGluIGNhc2Ugd2Ugb3ZlcmZs
b3cgYWdhaW4uCisgICAgICAgICAgICBpbnQgZG9jTG9naWNhbEhlaWdodCA9IHJvb3QtPnN0eWxl
KCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyByb290LT5kb2NIZWlnaHQoKSA6IHJvb3Qt
PmRvY1dpZHRoKCk7CisgICAgICAgICAgICBpbnQgZG9jTG9naWNhbFRvcCA9IHJvb3QtPnN0eWxl
KCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyByb290LT5kb2NUb3AoKSA6IHJvb3QtPmRv
Y0xlZnQoKTsKKyAgICAgICAgICAgIGludCBkb2NMb2dpY2FsUmlnaHQgPSByb290LT5zdHlsZSgp
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gcm9vdC0+ZG9jUmlnaHQoKSA6IHJvb3QtPmRv
Y0JvdHRvbSgpOworICAgICAgICAgICAgaW50IGNsaXBwZWRMb2dpY2FsTGVmdCA9IDA7CisgICAg
ICAgICAgICBpZiAoIXJvb3QtPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKKyAg
ICAgICAgICAgICAgICBjbGlwcGVkTG9naWNhbExlZnQgPSBkb2NMb2dpY2FsUmlnaHQgLSBmbG9v
cmVkUGFnZUxvZ2ljYWxXaWR0aDsKKyAgICAgICAgICAgIEludFJlY3Qgb3ZlcmZsb3coY2xpcHBl
ZExvZ2ljYWxMZWZ0LCBkb2NMb2dpY2FsVG9wLCBmbG9vcmVkUGFnZUxvZ2ljYWxXaWR0aCwgZG9j
TG9naWNhbEhlaWdodCk7CisgICAgICAgICAgICBpZiAoIXJvb3QtPnN0eWxlKCktPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpCisgICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBvdmVyZmxvdy50
cmFuc3Bvc2VkUmVjdCgpOworICAgICAgICAgICAgcm9vdC0+YWRkTGF5b3V0T3ZlcmZsb3cob3Zl
cmZsb3cpOyAvLyBUaGlzIGlzIGhvdyB3ZSBjbGlwIGluIGNhc2Ugd2Ugb3ZlcmZsb3cgYWdhaW4u
CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5j
cHAJKHJldmlzaW9uIDc2NzI2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCwxMCArODAsMjAgQEAgdm9pZCBQcmludENvbnRleHQ6
OmNvbXB1dGVQYWdlUmVjdHMoY29ucwogCiAgICAgUmVuZGVyVmlldyogdmlldyA9IHRvUmVuZGVy
VmlldyhtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKTsKIAotICAgIGZsb2F0IHJhdGlv
ID0gcHJpbnRSZWN0LmhlaWdodCgpIC8gcHJpbnRSZWN0LndpZHRoKCk7CisgICAgYm9vbCBpc0hv
cml6b250YWwgPSB2aWV3LT5zdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOworCisg
ICAgZmxvYXQgcGFnZVdpZHRoOworICAgIGZsb2F0IHBhZ2VIZWlnaHQ7CisgICAgaWYgKGlzSG9y
aXpvbnRhbCkgeworICAgICAgICBmbG9hdCByYXRpbyA9IHByaW50UmVjdC5oZWlnaHQoKSAvIHBy
aW50UmVjdC53aWR0aCgpOworICAgICAgICBwYWdlV2lkdGggID0gdmlldy0+ZG9jV2lkdGgoKTsK
KyAgICAgICAgcGFnZUhlaWdodCA9IGZsb29yKHBhZ2VXaWR0aCAqIHJhdGlvKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBmbG9hdCByYXRpbyA9IHByaW50UmVjdC53aWR0aCgpIC8gcHJpbnRSZWN0
LmhlaWdodCgpOworICAgICAgICBwYWdlSGVpZ2h0ICA9IHZpZXctPmRvY0hlaWdodCgpOworICAg
ICAgICBwYWdlV2lkdGggPSBmbG9vcihwYWdlSGVpZ2h0ICogcmF0aW8pOworICAgIH0KIAotICAg
IGZsb2F0IHBhZ2VXaWR0aCAgPSB2aWV3LT5kb2NXaWR0aCgpOwotICAgIGZsb2F0IHBhZ2VIZWln
aHQgPSBmbG9vcmYocGFnZVdpZHRoICogcmF0aW8pOwogICAgIG91dFBhZ2VIZWlnaHQgPSBwYWdl
SGVpZ2h0OyAvLyB0aGlzIGlzIHRoZSBoZWlnaHQgb2YgdGhlIHBhZ2UgYWRqdXN0ZWQgYnkgbWFy
Z2lucwogICAgIHBhZ2VIZWlnaHQgLT0gaGVhZGVySGVpZ2h0ICsgZm9vdGVySGVpZ2h0OwogCkBA
IC0xMDEsNyArMTExLDcgQEAgdm9pZCBQcmludENvbnRleHQ6OmNvbXB1dGVQYWdlUmVjdHNXaXRo
UAogICAgIGNvbXB1dGVQYWdlUmVjdHNXaXRoUGFnZVNpemVJbnRlcm5hbChwYWdlU2l6ZUluUGl4
ZWxzLCBhbGxvd0hvcml6b250YWxUaWxpbmcpOwogfQogCi12b2lkIFByaW50Q29udGV4dDo6Y29t
cHV0ZVBhZ2VSZWN0c1dpdGhQYWdlU2l6ZUludGVybmFsKGNvbnN0IEZsb2F0U2l6ZSYgcGFnZVNp
emVJblBpeGVscywgYm9vbCBhbGxvd0hvcml6b250YWxUaWxpbmcpCit2b2lkIFByaW50Q29udGV4
dDo6Y29tcHV0ZVBhZ2VSZWN0c1dpdGhQYWdlU2l6ZUludGVybmFsKGNvbnN0IEZsb2F0U2l6ZSYg
cGFnZVNpemVJblBpeGVscywgYm9vbCBhbGxvd0lubGluZURpcmVjdGlvblRpbGluZykKIHsKICAg
ICBpZiAoIW1fZnJhbWUtPmRvY3VtZW50KCkgfHwgIW1fZnJhbWUtPnZpZXcoKSB8fCAhbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTEzLDEzICsx
MjMsNjAgQEAgdm9pZCBQcmludENvbnRleHQ6OmNvbXB1dGVQYWdlUmVjdHNXaXRoUAogICAgIGlu
dCBwYWdlV2lkdGggPSBwYWdlU2l6ZUluUGl4ZWxzLndpZHRoKCk7CiAgICAgaW50IHBhZ2VIZWln
aHQgPSBwYWdlU2l6ZUluUGl4ZWxzLmhlaWdodCgpOwogCi0gICAgdW5zaWduZWQgcGFnZUNvdW50
ID0gY2VpbGYoKGZsb2F0KWRvY1JlY3QuaGVpZ2h0KCkgLyBwYWdlSGVpZ2h0KTsKKyAgICBib29s
IGlzSG9yaXpvbnRhbCA9IHZpZXctPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7
CisKKyAgICBpbnQgZG9jTG9naWNhbEhlaWdodCA9IGlzSG9yaXpvbnRhbCA/IGRvY1JlY3QuaGVp
Z2h0KCkgOiBkb2NSZWN0LndpZHRoKCk7CisgICAgaW50IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gaXNI
b3Jpem9udGFsID8gcGFnZUhlaWdodCA6IHBhZ2VXaWR0aDsKKyAgICBpbnQgcGFnZUxvZ2ljYWxX
aWR0aCA9IGlzSG9yaXpvbnRhbCA/IHBhZ2VXaWR0aCA6IHBhZ2VIZWlnaHQ7CisKKyAgICBpbnQg
aW5saW5lRGlyZWN0aW9uU3RhcnQ7CisgICAgaW50IGlubGluZURpcmVjdGlvbkVuZDsKKyAgICBp
bnQgYmxvY2tEaXJlY3Rpb25TdGFydDsKKyAgICBpbnQgYmxvY2tEaXJlY3Rpb25FbmQ7CisgICAg
aWYgKGlzSG9yaXpvbnRhbCkgeworICAgICAgICBpZiAodmlldy0+c3R5bGUoKS0+aXNGbGlwcGVk
QmxvY2tzV3JpdGluZ01vZGUoKSkgeworICAgICAgICAgICAgYmxvY2tEaXJlY3Rpb25TdGFydCA9
IGRvY1JlY3QuYm90dG9tKCk7CisgICAgICAgICAgICBibG9ja0RpcmVjdGlvbkVuZCA9IGRvY1Jl
Y3QueSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYmxvY2tEaXJlY3Rpb25TdGFy
dCA9IGRvY1JlY3QueSgpOworICAgICAgICAgICAgYmxvY2tEaXJlY3Rpb25FbmQgPSBkb2NSZWN0
LmJvdHRvbSgpOworICAgICAgICB9CisgICAgICAgIGlubGluZURpcmVjdGlvblN0YXJ0ID0gdmll
dy0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gZG9jUmVjdC54KCkgOiBkb2NS
ZWN0LnJpZ2h0KCk7CisgICAgICAgIGlubGluZURpcmVjdGlvbkVuZCA9IHZpZXctPnN0eWxlKCkt
PmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGRvY1JlY3QucmlnaHQoKSA6IGRvY1JlY3QueCgp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICh2aWV3LT5zdHlsZSgpLT5pc0ZsaXBwZWRCbG9j
a3NXcml0aW5nTW9kZSgpKSB7CisgICAgICAgICAgICBibG9ja0RpcmVjdGlvblN0YXJ0ID0gZG9j
UmVjdC5yaWdodCgpOworICAgICAgICAgICAgYmxvY2tEaXJlY3Rpb25FbmQgPSBkb2NSZWN0Lngo
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uU3RhcnQgPSBk
b2NSZWN0LngoKTsKKyAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uRW5kID0gZG9jUmVjdC5yaWdo
dCgpOworICAgICAgICB9CisgICAgICAgIGlubGluZURpcmVjdGlvblN0YXJ0ID0gdmlldy0+c3R5
bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gZG9jUmVjdC55KCkgOiBkb2NSZWN0LmJv
dHRvbSgpOworICAgICAgICBpbmxpbmVEaXJlY3Rpb25FbmQgPSB2aWV3LT5zdHlsZSgpLT5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBkb2NSZWN0LmJvdHRvbSgpIDogZG9jUmVjdC55KCk7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgcGFnZUNvdW50ID0gY2VpbGYoKGZsb2F0KWRvY0xvZ2ljYWxI
ZWlnaHQgLyBwYWdlTG9naWNhbEhlaWdodCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHBhZ2VDb3VudDsgKytpKSB7Ci0gICAgICAgIGlmIChhbGxvd0hvcml6b250YWxUaWxpbmcpIHsK
LSAgICAgICAgICAgIGZvciAoaW50IGN1cnJlbnRYID0gZG9jUmVjdC54KCk7IGN1cnJlbnRYIDwg
ZG9jUmVjdC5yaWdodCgpOyBjdXJyZW50WCArPSBwYWdlV2lkdGgpCi0gICAgICAgICAgICAgICAg
bV9wYWdlUmVjdHMuYXBwZW5kKEludFJlY3QoY3VycmVudFgsIGRvY1JlY3QueSgpICsgaSAqIHBh
Z2VIZWlnaHQsIHBhZ2VXaWR0aCwgcGFnZUhlaWdodCkpOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIG1fcGFnZVJlY3RzLmFwcGVuZChJbnRSZWN0KGRvY1JlY3QueCgpLCBkb2NSZWN0Lnko
KSArIGkgKiBwYWdlSGVpZ2h0LCBwYWdlV2lkdGgsIHBhZ2VIZWlnaHQpKTsKKyAgICAgICAgaW50
IHBhZ2VMb2dpY2FsVG9wID0gYmxvY2tEaXJlY3Rpb25FbmQgPiBibG9ja0RpcmVjdGlvblN0YXJ0
ID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEaXJlY3Rpb25TdGFydCAr
IGkgKiBwYWdlTG9naWNhbEhlaWdodCA6IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBibG9ja0RpcmVjdGlvblN0YXJ0IC0gKGkgKyAxKSAqIHBhZ2VMb2dpY2FsSGVpZ2h0OworICAg
ICAgICBpZiAoYWxsb3dJbmxpbmVEaXJlY3Rpb25UaWxpbmcpIHsKKyAgICAgICAgICAgIGZvciAo
aW50IGN1cnJlbnRJbmxpbmVQb3NpdGlvbiA9IGlubGluZURpcmVjdGlvblN0YXJ0OworICAgICAg
ICAgICAgICAgICBpbmxpbmVEaXJlY3Rpb25FbmQgPiBpbmxpbmVEaXJlY3Rpb25TdGFydCA/IGN1
cnJlbnRJbmxpbmVQb3NpdGlvbiA8IGlubGluZURpcmVjdGlvbkVuZCA6IGN1cnJlbnRJbmxpbmVQ
b3NpdGlvbiA+IGlubGluZURpcmVjdGlvbkVuZDsKKyAgICAgICAgICAgICAgICAgY3VycmVudElu
bGluZVBvc2l0aW9uICs9IChpbmxpbmVEaXJlY3Rpb25FbmQgPiBpbmxpbmVEaXJlY3Rpb25TdGFy
dCA/IHBhZ2VMb2dpY2FsV2lkdGggOiAtcGFnZUxvZ2ljYWxXaWR0aCkpIHsKKyAgICAgICAgICAg
ICAgICBpbnQgcGFnZUxvZ2ljYWxMZWZ0ID0gaW5saW5lRGlyZWN0aW9uRW5kID4gaW5saW5lRGly
ZWN0aW9uU3RhcnQgPyBjdXJyZW50SW5saW5lUG9zaXRpb24gOiBjdXJyZW50SW5saW5lUG9zaXRp
b24gLSBwYWdlTG9naWNhbFdpZHRoOworICAgICAgICAgICAgICAgIEludFJlY3QgcGFnZVJlY3Qo
cGFnZUxvZ2ljYWxMZWZ0LCBwYWdlTG9naWNhbFRvcCwgcGFnZUxvZ2ljYWxXaWR0aCwgcGFnZUxv
Z2ljYWxIZWlnaHQpOworICAgICAgICAgICAgICAgIGlmICghaXNIb3Jpem9udGFsKQorICAgICAg
ICAgICAgICAgICAgICBwYWdlUmVjdCA9IHBhZ2VSZWN0LnRyYW5zcG9zZWRSZWN0KCk7CisgICAg
ICAgICAgICAgICAgbV9wYWdlUmVjdHMuYXBwZW5kKHBhZ2VSZWN0KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludCBwYWdlTG9naWNhbExlZnQgPSBpbmxp
bmVEaXJlY3Rpb25FbmQgPiBpbmxpbmVEaXJlY3Rpb25TdGFydCA/IGlubGluZURpcmVjdGlvblN0
YXJ0IDogaW5saW5lRGlyZWN0aW9uU3RhcnQgLSBwYWdlTG9naWNhbFdpZHRoOworICAgICAgICAg
ICAgSW50UmVjdCBwYWdlUmVjdChwYWdlTG9naWNhbExlZnQsIHBhZ2VMb2dpY2FsVG9wLCBwYWdl
TG9naWNhbFdpZHRoLCBwYWdlTG9naWNhbEhlaWdodCk7CisgICAgICAgICAgICBpZiAoIWlzSG9y
aXpvbnRhbCkKKyAgICAgICAgICAgICAgICBwYWdlUmVjdCA9IHBhZ2VSZWN0LnRyYW5zcG9zZWRS
ZWN0KCk7CisgICAgICAgICAgICBtX3BhZ2VSZWN0cy5hcHBlbmQocGFnZVJlY3QpOworICAgICAg
ICB9CiAgICAgfQogfQogCkBAIC0xMzUsMjIgKzE5MiwyNyBAQCB2b2lkIFByaW50Q29udGV4dDo6
YmVnaW4oZmxvYXQgd2lkdGgsIGZsCiAgICAgbV9mcmFtZS0+c2V0UHJpbnRpbmcodHJ1ZSwgRmxv
YXRTaXplKG1pbkxheW91dFdpZHRoLCBtaW5MYXlvdXRIZWlnaHQpLCBwcmludGluZ01heGltdW1T
aHJpbmtGYWN0b3IgLyBwcmludGluZ01pbmltdW1TaHJpbmtGYWN0b3IsIEZyYW1lOjpBZGp1c3RW
aWV3U2l6ZSk7CiB9CiAKLWZsb2F0IFByaW50Q29udGV4dDo6Y29tcHV0ZUF1dG9tYXRpY1NjYWxl
RmFjdG9yKGZsb2F0IGF2YWlsYWJsZVBhcGVyV2lkdGgpCitmbG9hdCBQcmludENvbnRleHQ6OmNv
bXB1dGVBdXRvbWF0aWNTY2FsZUZhY3Rvcihjb25zdCBGbG9hdFNpemUmIGF2YWlsYWJsZVBhcGVy
U2l6ZSkKIHsKICAgICBpZiAoIW1fZnJhbWUtPnZpZXcoKSkKICAgICAgICAgcmV0dXJuIDE7CiAK
LSAgICBmbG9hdCB2aWV3V2lkdGggPSBtX2ZyYW1lLT52aWV3KCktPmNvbnRlbnRzV2lkdGgoKTsK
LSAgICBpZiAodmlld1dpZHRoIDwgMSkKKyAgICBib29sIHVzZVZpZXdXaWR0aCA9IHRydWU7Cisg
ICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkgJiYgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVy
VmlldygpKQorICAgICAgICB1c2VWaWV3V2lkdGggPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5k
ZXJWaWV3KCktPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CisKKyAgICBmbG9h
dCB2aWV3TG9naWNhbFdpZHRoID0gdXNlVmlld1dpZHRoID8gbV9mcmFtZS0+dmlldygpLT5jb250
ZW50c1dpZHRoKCkgOiBtX2ZyYW1lLT52aWV3KCktPmNvbnRlbnRzSGVpZ2h0KCk7CisgICAgaWYg
KHZpZXdMb2dpY2FsV2lkdGggPCAxKQogICAgICAgICByZXR1cm4gMTsKIAogICAgIGZsb2F0IG1h
eFNocmlua1RvRml0U2NhbGVGYWN0b3IgPSAxIC8gcHJpbnRpbmdNYXhpbXVtU2hyaW5rRmFjdG9y
OwotICAgIGZsb2F0IHNocmlua1RvRml0U2NhbGVGYWN0b3IgPSBhdmFpbGFibGVQYXBlcldpZHRo
IC8gdmlld1dpZHRoOworICAgIGZsb2F0IHNocmlua1RvRml0U2NhbGVGYWN0b3IgPSAodXNlVmll
d1dpZHRoID8gYXZhaWxhYmxlUGFwZXJTaXplLndpZHRoKCkgOiBhdmFpbGFibGVQYXBlclNpemUu
aGVpZ2h0KCkpIC8gdmlld0xvZ2ljYWxXaWR0aDsKICAgICByZXR1cm4gbWF4KG1heFNocmlua1Rv
Rml0U2NhbGVGYWN0b3IsIHNocmlua1RvRml0U2NhbGVGYWN0b3IpOwogfQogCiB2b2lkIFByaW50
Q29udGV4dDo6c3Bvb2xQYWdlKEdyYXBoaWNzQ29udGV4dCYgY3R4LCBpbnQgcGFnZU51bWJlciwg
ZmxvYXQgd2lkdGgpCiB7CisgICAgLy8gRklYTUU6IE5vdCBjb3JyZWN0IGZvciB2ZXJ0aWNhbCB0
ZXh0LgogICAgIEludFJlY3QgcGFnZVJlY3QgPSBtX3BhZ2VSZWN0c1twYWdlTnVtYmVyXTsKICAg
ICBmbG9hdCBzY2FsZSA9IHdpZHRoIC8gcGFnZVJlY3Qud2lkdGgoKTsKIApAQCAtMTY0LDYgKzIy
Niw3IEBAIHZvaWQgUHJpbnRDb250ZXh0OjpzcG9vbFBhZ2UoR3JhcGhpY3NDb24KIAogdm9pZCBQ
cmludENvbnRleHQ6OnNwb29sUmVjdChHcmFwaGljc0NvbnRleHQmIGN0eCwgY29uc3QgSW50UmVj
dCYgcmVjdCkKIHsKKyAgICAvLyBGSVhNRTogTm90IGNvcnJlY3QgZm9yIHZlcnRpY2FsIHRleHQu
CiAgICAgY3R4LnNhdmUoKTsKICAgICBjdHguc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CiAgICAg
Y3R4LnRyYW5zbGF0ZSgwLCAtbV9mcmFtZS0+dmlldygpLT5jb250ZW50c0hlaWdodCgpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRleHQuaAkocmV2aXNpb24gNzY0MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1
NCw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBJbnRSZWN0JiBwYWdlUmVjdChzaXplX3QgcGFnZU51
bWJlcikgY29uc3Q7CiAgICAgY29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWdlUmVjdHMoKSBjb25z
dCB7IHJldHVybiBtX3BhZ2VSZWN0czsgfQogCi0gICAgZmxvYXQgY29tcHV0ZUF1dG9tYXRpY1Nj
YWxlRmFjdG9yKGZsb2F0IGF2YWlsYWJsZVBhcGVyV2lkdGgpOworICAgIGZsb2F0IGNvbXB1dGVB
dXRvbWF0aWNTY2FsZUZhY3Rvcihjb25zdCBGbG9hdFNpemUmIGF2YWlsYWJsZVBhcGVyU2l6ZSk7
CiAKICAgICAvLyBFbnRlciBwcmludCBtb2RlLCB1cGRhdGluZyBsYXlvdXQgZm9yIG5ldyBwYWdl
IHNpemUuCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVz
IHRvIGFwcGx5IG5ldyBwcmludCBvcHRpb25zIHdpdGhvdXQgZ29pbmcgYmFjayB0byBzY3JlZW4g
bW9kZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVGcmFtZVZpZXcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVWaWV3LmgJ
KHJldmlzaW9uIDc2NDEyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1l
Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIC0gKHZvaWQpc2V0U2Nyb2xsaW5nTW9kZXM6KFdlYkNvcmU6OlNjcm9sbGJhck1vZGUpaE1v
ZGUgdmVydGljYWw6KFdlYkNvcmU6OlNjcm9sbGJhck1vZGUpdk1vZGUgYW5kTG9jazooQk9PTCls
b2NrOwogLSAodm9pZClzY3JvbGxpbmdNb2RlczooV2ViQ29yZTo6U2Nyb2xsYmFyTW9kZSopaE1v
ZGUgdmVydGljYWw6KFdlYkNvcmU6OlNjcm9sbGJhck1vZGUqKXZNb2RlOwogLSAodm9pZClzZXRT
Y3JvbGxCYXJzU3VwcHJlc3NlZDooQk9PTClzdXBwcmVzc2VkIHJlcGFpbnRPblVuc3VwcHJlc3M6
KEJPT0wpcmVwYWludDsKLS0gKHZvaWQpc2V0U2Nyb2xsT3JpZ2luOihOU1BvaW50KW9yaWdpbiB1
cGRhdGVQb3NpdGlvbjooQk9PTCl1cGRhdGVQb3NpdGlvbjsKKy0gKHZvaWQpc2V0U2Nyb2xsT3Jp
Z2luOihOU1BvaW50KW9yaWdpbiB1cGRhdGVQb3NpdGlvbkF0QWxsOihCT09MKXVwZGF0ZVBvc2l0
aW9uQXRBbGwgaW1tZWRpYXRlbHk6KEJPT0wpdXBkYXRlUG9zaXRpb25JbW1lZGlhdGVseTsKIC0g
KE5TUG9pbnQpc2Nyb2xsT3JpZ2luOwogQGVuZAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxWaWV3LmNwcAkocmV2aXNpb24gNzY0MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzNyw3ICsxMDM3LDcgQEAg
dm9pZCBTY3JvbGxWaWV3OjpyZW1vdmVQYW5TY3JvbGxJY29uKCkKICAgICBob3N0V2luZG93KCkt
PmludmFsaWRhdGVDb250ZW50c0FuZFdpbmRvdyhJbnRSZWN0KG1fcGFuU2Nyb2xsSWNvblBvaW50
LCBJbnRTaXplKHBhbkljb25TaXplTGVuZ3RoLCBwYW5JY29uU2l6ZUxlbmd0aCkpLCB0cnVlIC8q
aW1tZWRpYXRlKi8pOwogfQogCi12b2lkIFNjcm9sbFZpZXc6OnNldFNjcm9sbE9yaWdpbihjb25z
dCBJbnRQb2ludCYgb3JpZ2luLCBib29sIHVwZGF0ZVBvc2l0aW9uKQordm9pZCBTY3JvbGxWaWV3
OjpzZXRTY3JvbGxPcmlnaW4oY29uc3QgSW50UG9pbnQmIG9yaWdpbiwgYm9vbCB1cGRhdGVQb3Np
dGlvbkF0QWxsLCBib29sIHVwZGF0ZVBvc2l0aW9uU3luY2hyb25vdXNseSkKIHsKICAgICBpZiAo
bV9zY3JvbGxPcmlnaW4gPT0gb3JpZ2luKQogICAgICAgICByZXR1cm47CkBAIC0xMDQ1LDEyICsx
MDQ1LDEyIEBAIHZvaWQgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsT3JpZ2luKGNvbnN0IEkKICAgICBt
X3Njcm9sbE9yaWdpbiA9IG9yaWdpbjsKIAogICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKSB7Ci0g
ICAgICAgIHBsYXRmb3JtU2V0U2Nyb2xsT3JpZ2luKG9yaWdpbiwgdXBkYXRlUG9zaXRpb24pOwor
ICAgICAgICBwbGF0Zm9ybVNldFNjcm9sbE9yaWdpbihvcmlnaW4sIHVwZGF0ZVBvc2l0aW9uQXRB
bGwsIHVwZGF0ZVBvc2l0aW9uU3luY2hyb25vdXNseSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCiAgICAgLy8gVXBkYXRlIGlmIHRoZSBzY3JvbGwgb3JpZ2luIGNoYW5nZXMsIHNpbmNl
IG91ciBwb3NpdGlvbiB3aWxsIGJlIGRpZmZlcmVudCBpZiB0aGUgY29udGVudCBzaXplIGRpZCBu
b3QgY2hhbmdlLgotICAgIGlmICh1cGRhdGVQb3NpdGlvbikKKyAgICBpZiAodXBkYXRlUG9zaXRp
b25BdEFsbCAmJiB1cGRhdGVQb3NpdGlvblN5bmNocm9ub3VzbHkpCiAgICAgICAgIHVwZGF0ZVNj
cm9sbGJhcnMoc2Nyb2xsT2Zmc2V0KCkpOwogfQogCkBAIC0xMDg0LDcgKzEwODQsNyBAQCB2b2lk
IFNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0U2Nyb2xsYmFyc1N1CiB7CiB9CiAKLXZvaWQgU2Nyb2xs
Vmlldzo6cGxhdGZvcm1TZXRTY3JvbGxPcmlnaW4oY29uc3QgSW50UG9pbnQmLCBib29sIHVwZGF0
ZVBvc2l0aW9uKQordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldFNjcm9sbE9yaWdpbihjb25z
dCBJbnRQb2ludCYsIGJvb2wgdXBkYXRlUG9zaXRpb25BdEFsbCwgYm9vbCB1cGRhdGVQb3NpdGlv
blN5bmNocm9ub3VzbHkpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbFZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxW
aWV3LmgJKHJldmlzaW9uIDc2NDEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsNyArMjkyLDcgQEAgcHJvdGVjdGVkOgogICAg
IC8vIFNjcm9sbCB0aGUgY29udGVudCBieSBpbnZhbGlkYXRpbmcgZXZlcnl0aGluZy4KICAgICB2
aXJ0dWFsIHZvaWQgc2Nyb2xsQ29udGVudHNTbG93UGF0aChjb25zdCBJbnRSZWN0JiB1cGRhdGVS
ZWN0KTsKIAotICAgIHZvaWQgc2V0U2Nyb2xsT3JpZ2luKGNvbnN0IEludFBvaW50JiwgYm9vbCB1
cGRhdGVQb3NpdGlvbik7CisgICAgdm9pZCBzZXRTY3JvbGxPcmlnaW4oY29uc3QgSW50UG9pbnQm
LCBib29sIHVwZGF0ZVBvc2l0aW9uQXRBbGwsIGJvb2wgdXBkYXRlUG9zaXRpb25TeW5jaHJvbm91
c2x5KTsKICAgICBJbnRQb2ludCBzY3JvbGxPcmlnaW4oKSB7IHJldHVybiBtX3Njcm9sbE9yaWdp
bjsgfQogCiAgICAgLy8gU3ViY2xhc3NlZCBieSBGcmFtZVZpZXcgdG8gY2hlY2sgdGhlIHdyaXRp
bmctbW9kZSBvZiB0aGUgZG9jdW1lbnQuCkBAIC0zNzYsNyArMzc2LDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHBsYXRmb3JtUmVwYWludENvbnRlbnRSZWN0YW5nbGUoY29uc3QgSW50UmVjdCYsIGJv
b2wgbm93KTsKICAgICBib29sIHBsYXRmb3JtSXNPZmZzY3JlZW4oKSBjb25zdDsKICAgIAotICAg
IHZvaWQgcGxhdGZvcm1TZXRTY3JvbGxPcmlnaW4oY29uc3QgSW50UG9pbnQmLCBib29sIHVwZGF0
ZVBvc2l0aW9uKTsKKyAgICB2b2lkIHBsYXRmb3JtU2V0U2Nyb2xsT3JpZ2luKGNvbnN0IEludFBv
aW50JiwgYm9vbCB1cGRhdGVQb3NpdGlvbkF0QWxsLCBib29sIHVwZGF0ZVBvc2l0aW9uU3luY2hy
b25vdXNseSk7CiAKICNpZiBQTEFURk9STShNQUMpICYmIGRlZmluZWQgX19PQkpDX18KIHB1Ymxp
YzoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxWaWV3TWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxWaWV3TWFjLm1t
CShyZXZpc2lvbiA3NjQxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxW
aWV3TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsMTAgKzIwMywxMCBAQCBib29sIFNjcm9s
bFZpZXc6OnBsYXRmb3JtSXNPZmZzY3JlZW4oKSBjCiAgICAgcmV0dXJuICFbcGxhdGZvcm1XaWRn
ZXQoKSB3aW5kb3ddIHx8ICFbW3BsYXRmb3JtV2lkZ2V0KCkgd2luZG93XSBpc1Zpc2libGVdOwog
fQogCi12b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0U2Nyb2xsT3JpZ2luKGNvbnN0IEludFBv
aW50JiBvcmlnaW4sIGJvb2wgdXBkYXRlUG9zaXRpb24pCit2b2lkIFNjcm9sbFZpZXc6OnBsYXRm
b3JtU2V0U2Nyb2xsT3JpZ2luKGNvbnN0IEludFBvaW50JiBvcmlnaW4sIGJvb2wgdXBkYXRlUG9z
aXRpb25BdEFsbCwgYm9vbCB1cGRhdGVQb3NpdGlvblN5bmNocm9ub3VzbHkpCiB7CiAgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIFtzY3JvbGxWaWV3KCkgc2V0U2Nyb2xsT3Jp
Z2luOm9yaWdpbiB1cGRhdGVQb3NpdGlvbjp1cGRhdGVQb3NpdGlvbl07CisgICAgW3Njcm9sbFZp
ZXcoKSBzZXRTY3JvbGxPcmlnaW46b3JpZ2luIHVwZGF0ZVBvc2l0aW9uQXRBbGw6dXBkYXRlUG9z
aXRpb25BdEFsbCBpbW1lZGlhdGVseTp1cGRhdGVQb3NpdGlvblN5bmNocm9ub3VzbHldOwogICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDc2NzI1KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcg
QEAgdm9pZCBSZW5kZXJWaWV3OjpsYXlvdXQoKQogICAgICAgICBzZXRQYWdlTG9naWNhbEhlaWdo
dCgwKTsKIAogICAgIGlmIChwcmludGluZygpKQotICAgICAgICBtX21pblByZWZlcnJlZExvZ2lj
YWxXaWR0aCA9IG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gd2lkdGgoKTsKKyAgICAgICAg
bV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9
IGxvZ2ljYWxXaWR0aCgpOwogCiAgICAgLy8gVXNlIGNhbGNXaWR0aC9IZWlnaHQgdG8gZ2V0IHRo
ZSBuZXcgd2lkdGgvaGVpZ2h0LCBzaW5jZSB0aGlzIHdpbGwgdGFrZSB0aGUgZnVsbCBwYWdlIHpv
b20gZmFjdG9yIGludG8gYWNjb3VudC4KICAgICBib29sIHJlbGF5b3V0Q2hpbGRyZW4gPSAhcHJp
bnRpbmcoKSAmJiAoIW1fZnJhbWVWaWV3IHx8IHdpZHRoKCkgIT0gdmlld1dpZHRoKCkgfHwgaGVp
Z2h0KCkgIT0gdmlld0hlaWdodCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2ODY0KQor
KysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTEtMDEtMjcgIERhdmUgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2NDIyLCBtYWtlIHByaW50aW5nIGFuZCBwYWdpbmF0aW9u
IHdvcmsKKyAgICAgICAgd2l0aCB2ZXJ0aWNhbCB0ZXh0LgorCisgICAgICAgIENoYW5nZSBwcmlu
dGluZyBmdW5jdGlvbnMgdG8gY2hlY2sgd3JpdGluZy1tb2RlIGFuZCBwcm9wZXJseSBzd2FwIHdp
ZHRoIGFuZCBoZWlnaHQKKyAgICAgICAgYXMgbmVlZGVkLgorCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjb21wdXRl
UGFnZXNGb3JQcmludGluZyk6CisKIDIwMTEtMDEtMjcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiA3
NjcyNikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTc4Miw3ICsxNzgyLDcgQEAgdm9pZCBXZWJQYWdlOjpjb21wdXRl
UGFnZXNGb3JQcmludGluZyh1aQogICAgIGZsb2F0IGZ1bGxQYWdlSGVpZ2h0OwogICAgIG1fcHJp
bnRDb250ZXh0LT5jb21wdXRlUGFnZVJlY3RzKEZsb2F0UmVjdCgwLCAwLCBwcmludEluZm8uYXZh
aWxhYmxlUGFwZXJXaWR0aCwgcHJpbnRJbmZvLmF2YWlsYWJsZVBhcGVySGVpZ2h0KSwgMCwgMCwg
cHJpbnRJbmZvLnBhZ2VTZXR1cFNjYWxlRmFjdG9yLCBmdWxsUGFnZUhlaWdodCwgdHJ1ZSk7CiAK
LSAgICByZXN1bHRUb3RhbFNjYWxlRmFjdG9yRm9yUHJpbnRpbmcgPSBtX3ByaW50Q29udGV4dC0+
Y29tcHV0ZUF1dG9tYXRpY1NjYWxlRmFjdG9yKHByaW50SW5mby5hdmFpbGFibGVQYXBlcldpZHRo
KSAqIHByaW50SW5mby5wYWdlU2V0dXBTY2FsZUZhY3RvcjsKKyAgICByZXN1bHRUb3RhbFNjYWxl
RmFjdG9yRm9yUHJpbnRpbmcgPSBtX3ByaW50Q29udGV4dC0+Y29tcHV0ZUF1dG9tYXRpY1NjYWxl
RmFjdG9yKEZsb2F0U2l6ZShwcmludEluZm8uYXZhaWxhYmxlUGFwZXJXaWR0aCwgcHJpbnRJbmZv
LmF2YWlsYWJsZVBhcGVySGVpZ2h0KSkgKiBwcmludEluZm8ucGFnZVNldHVwU2NhbGVGYWN0b3I7
CiAgICAgcmVzdWx0UGFnZVJlY3RzID0gbV9wcmludENvbnRleHQtPnBhZ2VSZWN0cygpOwogCiAg
ICAgLy8gSWYgd2UncmUgYXNrZWQgdG8gcHJpbnQsIHdlIHNob3VsZCBhY3R1YWxseSBwcmludCBh
dCBsZWFzdCBhIGJsYW5rIHBhZ2UuCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3Njg2
NCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM0IEBACisyMDExLTAxLTI3ICBEYXZlIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjQyMiwgbWFrZSBwcmludGluZyBhbmQgcGFn
aW5hdGlvbiB3b3JrCisgICAgICAgIHdpdGggdmVydGljYWwgdGV4dC4KKworICAgICAgICBDaGFu
Z2UgcHJpbnRpbmcgZnVuY3Rpb25zIHRvIGNoZWNrIHdyaXRpbmctbW9kZSBhbmQgcHJvcGVybHkg
c3dhcCB3aWR0aCBhbmQgaGVpZ2h0CisgICAgICAgIGFzIG5lZWRlZC4KKworICAgICAgICAqIFdl
YlZpZXcvV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3Lm1tOgorICAgICAgICAoLVtXZWJEeW5hbWlj
U2Nyb2xsQmFyc1ZpZXcgc2V0U2Nyb2xsT3JpZ2luOnVwZGF0ZVBvc2l0aW9uQXRBbGw6aW1tZWRp
YXRlbHk6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2Vi
RnJhbWUgX2NvbXB1dGVQYWdlUmVjdHNXaXRoUHJpbnRTY2FsZUZhY3RvcjpwYWdlU2l6ZTpdKToK
KyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaDoKKyAgICAgICAgKiBXZWJWaWV3
L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfd2ViX3NldFByaW50aW5n
TW9kZVJlY3Vyc2l2ZV0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfd2ViX2NsZWFyUHJpbnRp
bmdNb2RlUmVjdXJzaXZlXSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF93ZWJfc2V0UHJpbnRp
bmdNb2RlUmVjdXJzaXZlQW5kQWRqdXN0Vmlld1NpemVdKToKKyAgICAgICAgKC1bV2ViSFRNTFZp
ZXcgX2JlZ2luUHJpbnRNb2RlV2l0aE1pbmltdW1QYWdlV2lkdGg6aGVpZ2h0Om1heGltdW1QYWdl
V2lkdGg6XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9iZWdpblByaW50TW9kZVdpdGhQYWdl
V2lkdGg6aGVpZ2h0OnNocmlua1RvRml0Ol0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfZW5k
UHJpbnRNb2RlXSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9iZWdpblNjcmVlblBhZ2luYXRp
b25Nb2RlV2l0aFBhZ2VTaXplOnNocmlua1RvRml0Ol0pOgorICAgICAgICAoLVtXZWJIVE1MVmll
dyBfZW5kU2NyZWVuUGFnaW5hdGlvbk1vZGVdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgbGF5
b3V0VG9NaW5pbXVtUGFnZVdpZHRoOmhlaWdodDptYXhpbXVtUGFnZVdpZHRoOmFkanVzdGluZ1Zp
ZXdTaXplOl0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfc2V0UHJpbnRpbmc6bWluaW11bVBh
Z2VMb2dpY2FsV2lkdGg6bG9naWNhbEhlaWdodDptYXhpbXVtUGFnZUxvZ2ljYWxXaWR0aDphZGp1
c3RWaWV3U2l6ZTpwYWdpbmF0ZVNjcmVlbkNvbnRlbnQ6XSk6CisgICAgICAgICgtW1dlYkhUTUxW
aWV3IGFkanVzdFBhZ2VIZWlnaHROZXc6dG9wOmJvdHRvbTpsaW1pdDpdKToKKyAgICAgICAgKC1b
V2ViSFRNTFZpZXcgX3NjYWxlRmFjdG9yRm9yUHJpbnRPcGVyYXRpb246XSk6CisgICAgICAgICgt
W1dlYkhUTUxWaWV3IHNldFBhZ2VXaWR0aEZvclByaW50aW5nOl0pOgorICAgICAgICAoLVtXZWJI
VE1MVmlldyBrbm93c1BhZ2VSYW5nZTpdKToKKwogMjAxMS0wMS0yNyAgRGFuIEJlcm5zdGVpbiAg
PG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IEFuZGVycyBDYXJs
c3Nvbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRHluYW1pY1Njcm9sbEJh
cnNWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRHlu
YW1pY1Njcm9sbEJhcnNWaWV3Lm1tCShyZXZpc2lvbiA3NjQxMikKKysrIFNvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC01NjgsNyArNTY4LDcgQEAgLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkIAogICAgIHJl
dHVybiBZRVM7CiB9CiAKLS0gKHZvaWQpc2V0U2Nyb2xsT3JpZ2luOihOU1BvaW50KXNjcm9sbE9y
aWdpbiB1cGRhdGVQb3NpdGlvbjooQk9PTCl1cGRhdGVQb3NpdGlvbgorLSAodm9pZClzZXRTY3Jv
bGxPcmlnaW46KE5TUG9pbnQpc2Nyb2xsT3JpZ2luIHVwZGF0ZVBvc2l0aW9uQXRBbGw6KEJPT0wp
dXBkYXRlUG9zaXRpb25BdEFsbCBpbW1lZGlhdGVseTooQk9PTCl1cGRhdGVQb3NpdGlvblN5bmNo
cm9ub3VzbHkKIHsKICAgICAvLyBUaGUgY3Jvc3MtcGxhdGZvcm0gU2Nyb2xsVmlldyBjYWxsIGFs
cmVhZHkgY2hlY2tlZCB0byBzZWUgaWYgdGhlIG9sZC9uZXcgc2Nyb2xsIG9yaWdpbnMgd2VyZSB0
aGUgc2FtZSBvciBub3QKICAgICAvLyBzbyB3ZSBkb24ndCBoYXZlIHRvIGNoZWNrIGZvciBlcXVp
dmFsZW5jZSBoZXJlLgpAQCAtNTc5LDEyICs1NzksMTMgQEAgLSAodm9pZClzZXRTY3JvbGxPcmln
aW46KE5TUG9pbnQpc2Nyb2xsTwogCiAgICAgW2RvY1ZpZXcgc2V0Qm91bmRzT3JpZ2luOk5TTWFr
ZVBvaW50KC1zY3JvbGxPcmlnaW4ueCwgLXNjcm9sbE9yaWdpbi55KV07CiAKLSAgICBfcHJpdmF0
ZS0+c2Nyb2xsT3JpZ2luQ2hhbmdlZCA9IHRydWU7CisgICAgaWYgKHVwZGF0ZVBvc2l0aW9uQXRB
bGwpCisgICAgICAgIF9wcml2YXRlLT5zY3JvbGxPcmlnaW5DaGFuZ2VkID0gdHJ1ZTsKIAogICAg
IC8vIE1haW50YWluIG91ciBvcmlnaW5hbCBwb3NpdGlvbiBpbiB0aGUgcHJlc2VuY2Ugb2YgdGhl
IG5ldyBzY3JvbGwgb3JpZ2luLgogICAgIF9wcml2YXRlLT5zY3JvbGxQb3NpdGlvbkV4Y2x1ZGlu
Z09yaWdpbiA9IE5TTWFrZVBvaW50KHZpc2libGVSZWN0Lm9yaWdpbi54ICsgc2Nyb2xsT3JpZ2lu
LngsIHZpc2libGVSZWN0Lm9yaWdpbi55ICsgc2Nyb2xsT3JpZ2luLnkpOwogCi0gICAgaWYgKHVw
ZGF0ZVBvc2l0aW9uKSAvLyBPdGhlcndpc2Ugd2UnbGwganVzdCBsZXQgdGhlIHNuYXAgaGFwcGVu
IHdoZW4gd2UgdXBkYXRlIGZvciB0aGUgcmVzaXplLgorICAgIGlmICh1cGRhdGVQb3NpdGlvbkF0
QWxsICYmIHVwZGF0ZVBvc2l0aW9uU3luY2hyb25vdXNseSkgLy8gT3RoZXJ3aXNlIHdlJ2xsIGp1
c3QgbGV0IHRoZSBzbmFwIGhhcHBlbiB3aGVuIHdlIHVwZGF0ZSBmb3IgdGhlIHJlc2l6ZS4KICAg
ICAgICAgW3NlbGYgYWRqdXN0Rm9yU2Nyb2xsT3JpZ2luQ2hhbmdlXTsKIH0KIApJbmRleDogU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCShyZXZpc2lvbiA3NjQxMikKKysrIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTU4Nywx
NiArNTg3LDExIEBAIC0gKHZvaWQpX2RyYXdSZWN0OihOU1JlY3QpcmVjdCBjb250ZW50c08KIH0K
IAogLy8gVXNlZCBieSBwYWdpbmF0aW9uIGNvZGUgY2FsbGVkIGZyb20gQXBwS2l0IHdoZW4gYSBz
dGFuZGFsb25lIHdlYiBwYWdlIGlzIHByaW50ZWQuCi0tIChOU0FycmF5KilfY29tcHV0ZVBhZ2VS
ZWN0c1dpdGhQcmludFdpZHRoU2NhbGVGYWN0b3I6KGZsb2F0KXByaW50V2lkdGhTY2FsZUZhY3Rv
ciBwcmludEhlaWdodDooZmxvYXQpcHJpbnRIZWlnaHQKKy0gKE5TQXJyYXkqKV9jb21wdXRlUGFn
ZVJlY3RzV2l0aFByaW50U2NhbGVGYWN0b3I6KGZsb2F0KXByaW50U2NhbGVGYWN0b3IgcGFnZVNp
emU6KE5TU2l6ZSlwYWdlU2l6ZQogewogICAgIE5TTXV0YWJsZUFycmF5KiBwYWdlcyA9IFtOU011
dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTo1XTsKLSAgICBpZiAocHJpbnRXaWR0aFNjYWxl
RmFjdG9yIDw9IDApIHsKLSAgICAgICAgTE9HX0VSUk9SKCJwcmludFdpZHRoU2NhbGVGYWN0b3Ig
aGFzIGJhZCB2YWx1ZSAlLjJmIiwgcHJpbnRXaWR0aFNjYWxlRmFjdG9yKTsKLSAgICAgICAgcmV0
dXJuIHBhZ2VzOwotICAgIH0KLSAgICAKLSAgICBpZiAocHJpbnRIZWlnaHQgPD0gMCkgewotICAg
ICAgICBMT0dfRVJST1IoInByaW50SGVpZ2h0IGhhcyBiYWQgdmFsdWUgJS4yZiIsIHByaW50SGVp
Z2h0KTsKKyAgICBpZiAocHJpbnRTY2FsZUZhY3RvciA8PSAwKSB7CisgICAgICAgIExPR19FUlJP
UigicHJpbnRTY2FsZUZhY3RvciBoYXMgYmFkIHZhbHVlICUuMmYiLCBwcmludFNjYWxlRmFjdG9y
KTsKICAgICAgICAgcmV0dXJuIHBhZ2VzOwogICAgIH0KIApAQCAtNjEyLDggKzYwNywxMSBAQCAt
IChOU0FycmF5KilfY29tcHV0ZVBhZ2VSZWN0c1dpdGhQcmludFdpCiAgICAgaWYgKCFkb2N1bWVu
dFZpZXcpCiAgICAgICAgIHJldHVybiBwYWdlczsKIAotICAgIGZsb2F0IGRvY1dpZHRoID0gcm9v
dC0+bGF5ZXIoKS0+d2lkdGgoKTsKLSAgICBmbG9hdCBwcmludFdpZHRoID0gZG9jV2lkdGggLyBw
cmludFdpZHRoU2NhbGVGYWN0b3I7CisgICAgZmxvYXQgZG9jV2lkdGggPSByb290LT5kb2NXaWR0
aCgpOworICAgIGZsb2F0IGRvY0hlaWdodCA9IHJvb3QtPmRvY0hlaWdodCgpOworCisgICAgZmxv
YXQgcHJpbnRXaWR0aCA9IHJvb3QtPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBkb2NXaWR0aCAvIHByaW50U2NhbGVGYWN0b3IgOiBwYWdlU2l6ZS53aWR0aDsKKyAgICBmbG9h
dCBwcmludEhlaWdodCA9IHJvb3QtPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBwYWdlU2l6ZS5oZWlnaHQgOiBkb2NIZWlnaHQgLyBwcmludFNjYWxlRmFjdG9yOwogCiAgICAg
UHJpbnRDb250ZXh0IHByaW50Q29udGV4dChfcHJpdmF0ZS0+Y29yZUZyYW1lKTsKICAgICBwcmlu
dENvbnRleHQuY29tcHV0ZVBhZ2VSZWN0c1dpdGhQYWdlU2l6ZShGbG9hdFNpemUocHJpbnRXaWR0
aCwgcHJpbnRIZWlnaHQpLCB0cnVlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViRnJhbWVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViRnJhbWVJbnRlcm5hbC5oCShyZXZpc2lvbiA3NjQxMikKKysrIFNvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyAr
MTI0LDcgQEAgQGludGVyZmFjZSBXZWJGcmFtZSAoV2ViSW50ZXJuYWwpCiAtIChCT09MKV9uZWVk
c0xheW91dDsKIC0gKHZvaWQpX2RyYXdSZWN0OihOU1JlY3QpcmVjdCBjb250ZW50c09ubHk6KEJP
T0wpY29udGVudHNPbmx5OwogLSAoQk9PTClfZ2V0VmlzaWJsZVJlY3Q6KE5TUmVjdCopcmVjdDsK
LS0gKE5TQXJyYXkqKV9jb21wdXRlUGFnZVJlY3RzV2l0aFByaW50V2lkdGhTY2FsZUZhY3Rvcjoo
ZmxvYXQpcHJpbnRXaWR0aFNjYWxlRmFjdG9yIHByaW50SGVpZ2h0OihmbG9hdClwcmludEhlaWdo
dDsKKy0gKE5TQXJyYXkqKV9jb21wdXRlUGFnZVJlY3RzV2l0aFByaW50U2NhbGVGYWN0b3I6KGZs
b2F0KXByaW50V2lkdGhTY2FsZUZhY3RvciBwYWdlU2l6ZTooTlNTaXplKXBhZ2VTaXplOwogCiAt
IChOU1N0cmluZyAqKV9zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzooTlNT
dHJpbmcgKilzdHJpbmc7CiAtIChOU1N0cmluZyAqKV9zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0RnJvbVN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgZm9yY2VVc2VyR2VzdHVyZTooQk9PTClm
b3JjZVVzZXJHZXN0dXJlOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1M
Vmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxW
aWV3Lm1tCShyZXZpc2lvbiA3NjcyNikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
SFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsNyBAQAogI2ltcG9ydCA8
V2ViQ29yZS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmFuZ2Uu
aD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyV2lkZ2V0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1Jl
bmRlclZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1NlbGVjdGlvbkNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNv
cmUvU2hhcmVkQnVmZmVyLmg+CkBAIC00MjgsNyArNDI5LDcgQEAgLSAodm9pZCl0b2dnbGVBdXRv
bWF0aWNTcGVsbGluZ0NvcnJlY3RpbwogI2VuZGlmCiAKIEBpbnRlcmZhY2UgV2ViSFRNTFZpZXcg
KFdlYkZvcndhcmREZWNsYXJhdGlvbikgLy8gRklYTUU6IFB1dCB0aGlzIGluIGEgbm9ybWFsIGNh
dGVnb3J5IGFuZCBzdG9wIGRvaW5nIHRoZSBmb3J3YXJkIGRlY2xhcmF0aW9uIHRyaWNrLgotLSAo
dm9pZClfc2V0UHJpbnRpbmc6KEJPT0wpcHJpbnRpbmcgbWluaW11bVBhZ2VXaWR0aDooZmxvYXQp
bWluUGFnZVdpZHRoIGhlaWdodDooZmxvYXQpbWluUGFnZUhlaWdodCBtYXhpbXVtUGFnZVdpZHRo
OihmbG9hdCltYXhQYWdlV2lkdGggYWRqdXN0Vmlld1NpemU6KEJPT0wpYWRqdXN0Vmlld1NpemUg
cGFnaW5hdGVTY3JlZW5Db250ZW50OihCT09MKXBhZ2luYXRlU2NyZWVuQ29udGVudDsKKy0gKHZv
aWQpX3NldFByaW50aW5nOihCT09MKXByaW50aW5nIG1pbmltdW1QYWdlTG9naWNhbFdpZHRoOihm
bG9hdCltaW5QYWdlV2lkdGggbG9naWNhbEhlaWdodDooZmxvYXQpbWluUGFnZUhlaWdodCBtYXhp
bXVtUGFnZUxvZ2ljYWxXaWR0aDooZmxvYXQpbWF4UGFnZVdpZHRoIGFkanVzdFZpZXdTaXplOihC
T09MKWFkanVzdFZpZXdTaXplIHBhZ2luYXRlU2NyZWVuQ29udGVudDooQk9PTClwYWdpbmF0ZVNj
cmVlbkNvbnRlbnQ7CiBAZW5kCiAKIEBjbGFzcyBOU1RleHRJbnB1dENvbnRleHQ7CkBAIC0xMDgw
LDcgKzEwODEsNyBAQCAtIChCT09MKV9pc1RvcEhUTUxWaWV3CiAKIC0gKHZvaWQpX3dlYl9zZXRQ
cmludGluZ01vZGVSZWN1cnNpdmUKIHsKLSAgICBbc2VsZiBfc2V0UHJpbnRpbmc6WUVTIG1pbmlt
dW1QYWdlV2lkdGg6MCBoZWlnaHQ6MCBtYXhpbXVtUGFnZVdpZHRoOjAgYWRqdXN0Vmlld1NpemU6
Tk8gcGFnaW5hdGVTY3JlZW5Db250ZW50OltzZWxmIF9pc0luU2NyZWVuUGFnaW5hdGlvbk1vZGVd
XTsKKyAgICBbc2VsZiBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlTG9naWNhbFdpZHRoOjAg
bG9naWNhbEhlaWdodDowIG1heGltdW1QYWdlTG9naWNhbFdpZHRoOjAgYWRqdXN0Vmlld1NpemU6
Tk8gcGFnaW5hdGVTY3JlZW5Db250ZW50OltzZWxmIF9pc0luU2NyZWVuUGFnaW5hdGlvbk1vZGVd
XTsKIAogI2lmbmRlZiBOREVCVUcKICAgICBfcHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cyA9
IFlFUzsKQEAgLTEwOTIsNyArMTA5Myw3IEBAIC0gKHZvaWQpX3dlYl9zZXRQcmludGluZ01vZGVS
ZWN1cnNpdmUKIAogICAgIHVuc2lnbmVkIGNvdW50ID0gW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3Mg
Y291bnRdOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAg
ICBbW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3Mgb2JqZWN0QXRJbmRleDppXSBfc2V0UHJpbnRpbmc6
WUVTIG1pbmltdW1QYWdlV2lkdGg6MCBoZWlnaHQ6MCBtYXhpbXVtUGFnZVdpZHRoOjAgYWRqdXN0
Vmlld1NpemU6Tk8gcGFnaW5hdGVTY3JlZW5Db250ZW50OltzZWxmIF9pc0luU2NyZWVuUGFnaW5h
dGlvbk1vZGVdXTsKKyAgICAgICAgW1tkZXNjZW5kYW50V2ViSFRNTFZpZXdzIG9iamVjdEF0SW5k
ZXg6aV0gX3NldFByaW50aW5nOllFUyBtaW5pbXVtUGFnZUxvZ2ljYWxXaWR0aDowIGxvZ2ljYWxI
ZWlnaHQ6MCBtYXhpbXVtUGFnZUxvZ2ljYWxXaWR0aDowIGFkanVzdFZpZXdTaXplOk5PIHBhZ2lu
YXRlU2NyZWVuQ29udGVudDpbc2VsZiBfaXNJblNjcmVlblBhZ2luYXRpb25Nb2RlXV07CiAKICAg
ICBbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyByZWxlYXNlXTsKIApAQCAtMTEwMyw3ICsxMTA0LDcg
QEAgLSAodm9pZClfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2ZQogCiAtICh2b2lkKV93ZWJf
Y2xlYXJQcmludGluZ01vZGVSZWN1cnNpdmUKIHsKLSAgICBbc2VsZiBfc2V0UHJpbnRpbmc6Tk8g
bWluaW11bVBhZ2VXaWR0aDowIGhlaWdodDowIG1heGltdW1QYWdlV2lkdGg6MCBhZGp1c3RWaWV3
U2l6ZTpOTyBwYWdpbmF0ZVNjcmVlbkNvbnRlbnQ6W3NlbGYgX2lzSW5TY3JlZW5QYWdpbmF0aW9u
TW9kZV1dOworICAgIFtzZWxmIF9zZXRQcmludGluZzpOTyBtaW5pbXVtUGFnZUxvZ2ljYWxXaWR0
aDowIGxvZ2ljYWxIZWlnaHQ6MCBtYXhpbXVtUGFnZUxvZ2ljYWxXaWR0aDowIGFkanVzdFZpZXdT
aXplOk5PIHBhZ2luYXRlU2NyZWVuQ29udGVudDpbc2VsZiBfaXNJblNjcmVlblBhZ2luYXRpb25N
b2RlXV07CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmll
d3MgPSBZRVM7CkBAIC0xMTE1LDcgKzExMTYsNyBAQCAtICh2b2lkKV93ZWJfY2xlYXJQcmludGlu
Z01vZGVSZWN1cnNpdmUKIAogICAgIHVuc2lnbmVkIGNvdW50ID0gW2Rlc2NlbmRhbnRXZWJIVE1M
Vmlld3MgY291bnRdOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQot
ICAgICAgICBbW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3Mgb2JqZWN0QXRJbmRleDppXSBfc2V0UHJp
bnRpbmc6Tk8gbWluaW11bVBhZ2VXaWR0aDowIGhlaWdodDowIG1heGltdW1QYWdlV2lkdGg6MCBh
ZGp1c3RWaWV3U2l6ZTpOTyBwYWdpbmF0ZVNjcmVlbkNvbnRlbnQ6W3NlbGYgX2lzSW5TY3JlZW5Q
YWdpbmF0aW9uTW9kZV1dOworICAgICAgICBbW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3Mgb2JqZWN0
QXRJbmRleDppXSBfc2V0UHJpbnRpbmc6Tk8gbWluaW11bVBhZ2VMb2dpY2FsV2lkdGg6MCBsb2dp
Y2FsSGVpZ2h0OjAgbWF4aW11bVBhZ2VMb2dpY2FsV2lkdGg6MCBhZGp1c3RWaWV3U2l6ZTpOTyBw
YWdpbmF0ZVNjcmVlbkNvbnRlbnQ6W3NlbGYgX2lzSW5TY3JlZW5QYWdpbmF0aW9uTW9kZV1dOwog
CiAgICAgW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3MgcmVsZWFzZV07CiAKQEAgLTExMjYsNyArMTEy
Nyw3IEBAIC0gKHZvaWQpX3dlYl9jbGVhclByaW50aW5nTW9kZVJlY3Vyc2l2ZQogCiAtICh2b2lk
KV93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlQW5kQWRqdXN0Vmlld1NpemUKIHsKLSAgICBb
c2VsZiBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlV2lkdGg6MCBoZWlnaHQ6MCBtYXhpbXVt
UGFnZVdpZHRoOjAgYWRqdXN0Vmlld1NpemU6WUVTIHBhZ2luYXRlU2NyZWVuQ29udGVudDpbc2Vs
ZiBfaXNJblNjcmVlblBhZ2luYXRpb25Nb2RlXV07CisgICAgW3NlbGYgX3NldFByaW50aW5nOllF
UyBtaW5pbXVtUGFnZUxvZ2ljYWxXaWR0aDowIGxvZ2ljYWxIZWlnaHQ6MCBtYXhpbXVtUGFnZUxv
Z2ljYWxXaWR0aDowIGFkanVzdFZpZXdTaXplOllFUyBwYWdpbmF0ZVNjcmVlbkNvbnRlbnQ6W3Nl
bGYgX2lzSW5TY3JlZW5QYWdpbmF0aW9uTW9kZV1dOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIF9w
cml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzID0gWUVTOwpAQCAtMTEzOCw3ICsxMTM5LDcgQEAg
LSAodm9pZClfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2ZUFuZAogCiAgICAgdW5zaWduZWQg
Y291bnQgPSBbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBjb3VudF07CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIFtbZGVzY2VuZGFudFdlYkhUTUxWaWV3
cyBvYmplY3RBdEluZGV4OmldIF9zZXRQcmludGluZzpZRVMgbWluaW11bVBhZ2VXaWR0aDowIGhl
aWdodDowIG1heGltdW1QYWdlV2lkdGg6MCBhZGp1c3RWaWV3U2l6ZTpZRVMgcGFnaW5hdGVTY3Jl
ZW5Db250ZW50OltzZWxmIF9pc0luU2NyZWVuUGFnaW5hdGlvbk1vZGVdXTsKKyAgICAgICAgW1tk
ZXNjZW5kYW50V2ViSFRNTFZpZXdzIG9iamVjdEF0SW5kZXg6aV0gX3NldFByaW50aW5nOllFUyBt
aW5pbXVtUGFnZUxvZ2ljYWxXaWR0aDowIGxvZ2ljYWxIZWlnaHQ6MCBtYXhpbXVtUGFnZUxvZ2lj
YWxXaWR0aDowIGFkanVzdFZpZXdTaXplOllFUyBwYWdpbmF0ZVNjcmVlbkNvbnRlbnQ6W3NlbGYg
X2lzSW5TY3JlZW5QYWdpbmF0aW9uTW9kZV1dOwogCiAgICAgW2Rlc2NlbmRhbnRXZWJIVE1MVmll
d3MgcmVsZWFzZV07CiAKQEAgLTIyMDksNyArMjIxMCw3IEBAIC0gKEJPT0wpX2JlZ2luUHJpbnRN
b2RlV2l0aE1pbmltdW1QYWdlV2kKICAgICAgICAgbWF4aW11bVBhZ2VXaWR0aCA9IDA7CiAgICAg
fQogCi0gICAgW3NlbGYgX3NldFByaW50aW5nOllFUyBtaW5pbXVtUGFnZVdpZHRoOm1pbmltdW1Q
YWdlV2lkdGggaGVpZ2h0Om1pbmltdW1QYWdlSGVpZ2h0IG1heGltdW1QYWdlV2lkdGg6bWF4aW11
bVBhZ2VXaWR0aCBhZGp1c3RWaWV3U2l6ZTpZRVMgcGFnaW5hdGVTY3JlZW5Db250ZW50OltzZWxm
IF9pc0luU2NyZWVuUGFnaW5hdGlvbk1vZGVdXTsKKyAgICBbc2VsZiBfc2V0UHJpbnRpbmc6WUVT
IG1pbmltdW1QYWdlTG9naWNhbFdpZHRoOm1pbmltdW1QYWdlV2lkdGggbG9naWNhbEhlaWdodDpt
aW5pbXVtUGFnZUhlaWdodCBtYXhpbXVtUGFnZUxvZ2ljYWxXaWR0aDptYXhpbXVtUGFnZVdpZHRo
IGFkanVzdFZpZXdTaXplOllFUyBwYWdpbmF0ZVNjcmVlbkNvbnRlbnQ6W3NlbGYgX2lzSW5TY3Jl
ZW5QYWdpbmF0aW9uTW9kZV1dOwogICAgIHJldHVybiBZRVM7CiB9CiAKQEAgLTIyMTksMjUgKzIy
MjAsMzAgQEAgLSAoQk9PTClfYmVnaW5QcmludE1vZGVXaXRoUGFnZVdpZHRoOihmbAogICAgIGlm
ICghZnJhbWUpCiAgICAgICAgIHJldHVybiBOTzsKIAotICAgIGZsb2F0IG1pbkxheW91dFdpZHRo
ID0gMDsKLSAgICBmbG9hdCBtaW5MYXlvdXRIZWlnaHQgPSAwOwotICAgIGZsb2F0IG1heExheW91
dFdpZHRoID0gMDsKKyAgICBib29sIGlzSG9yaXpvbnRhbCA9IHRydWU7CisgICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CisgICAgaWYgKGRvY3VtZW50ICYmIGRvY3Vt
ZW50LT5yZW5kZXJWaWV3KCkgJiYgIWRvY3VtZW50LT5yZW5kZXJWaWV3KCktPnN0eWxlKCktPmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCisgICAgICAgIGlzSG9yaXpvbnRhbCA9IGZhbHNlOwor
CisgICAgZmxvYXQgbWluTGF5b3V0TG9naWNhbFdpZHRoID0gaXNIb3Jpem9udGFsID8gcGFnZVdp
ZHRoIDogcGFnZUhlaWdodDsKKyAgICBmbG9hdCBtaW5MYXlvdXRMb2dpY2FsSGVpZ2h0ID0gaXNI
b3Jpem9udGFsID8gcGFnZUhlaWdodCA6IHBhZ2VXaWR0aDsKKyAgICBmbG9hdCBtYXhMYXlvdXRM
b2dpY2FsV2lkdGggPSBtaW5MYXlvdXRMb2dpY2FsV2lkdGg7CiAKICAgICAvLyBJZiB3ZSBhcmUg
YSBmcmFtZXNldCBqdXN0IHByaW50IHdpdGggdGhlIGxheW91dCB3ZSBoYXZlIG9uc2NyZWVuLCBv
dGhlcndpc2UgcmVsYXlvdXQKICAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIHBhZ2Ugd2lkdGguCi0g
ICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQoKSB8fCAhZnJhbWUtPmRvY3VtZW50KCktPmlzRnJhbWVT
ZXQoKSkgewotICAgICAgICBtaW5MYXlvdXRXaWR0aCA9IHNocmlua1RvRml0ID8gcGFnZVdpZHRo
ICogX1dlYkhUTUxWaWV3UHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yIDogcGFnZVdpZHRoOwot
ICAgICAgICBtaW5MYXlvdXRIZWlnaHQgPSBzaHJpbmtUb0ZpdCA/IHBhZ2VIZWlnaHQgKiBfV2Vi
SFRNTFZpZXdQcmludGluZ01pbmltdW1TaHJpbmtGYWN0b3IgOiBwYWdlSGVpZ2h0OwotICAgICAg
ICBtYXhMYXlvdXRXaWR0aCA9IHNocmlua1RvRml0ID8gcGFnZVdpZHRoICogX1dlYkhUTUxWaWV3
UHJpbnRpbmdNYXhpbXVtU2hyaW5rRmFjdG9yIDogcGFnZVdpZHRoOworICAgIGlmIChzaHJpbmtU
b0ZpdCAmJiAoIWZyYW1lLT5kb2N1bWVudCgpIHx8ICFmcmFtZS0+ZG9jdW1lbnQoKS0+aXNGcmFt
ZVNldCgpKSkgeworICAgICAgICBtaW5MYXlvdXRMb2dpY2FsV2lkdGggKj0gX1dlYkhUTUxWaWV3
UHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yOworICAgICAgICBtaW5MYXlvdXRMb2dpY2FsSGVp
Z2h0ICo9IF9XZWJIVE1MVmlld1ByaW50aW5nTWluaW11bVNocmlua0ZhY3RvcjsKKyAgICAgICAg
bWF4TGF5b3V0TG9naWNhbFdpZHRoICo9IF9XZWJIVE1MVmlld1ByaW50aW5nTWF4aW11bVNocmlu
a0ZhY3RvcjsKICAgICB9Ci0gICAgW3NlbGYgX3NldFByaW50aW5nOllFUyBtaW5pbXVtUGFnZVdp
ZHRoOm1pbkxheW91dFdpZHRoIGhlaWdodDptaW5MYXlvdXRIZWlnaHQgbWF4aW11bVBhZ2VXaWR0
aDptYXhMYXlvdXRXaWR0aCBhZGp1c3RWaWV3U2l6ZTpZRVMgcGFnaW5hdGVTY3JlZW5Db250ZW50
OltzZWxmIF9pc0luU2NyZWVuUGFnaW5hdGlvbk1vZGVdXTsKKyAgICBbc2VsZiBfc2V0UHJpbnRp
bmc6WUVTIG1pbmltdW1QYWdlTG9naWNhbFdpZHRoOm1pbkxheW91dExvZ2ljYWxXaWR0aCBsb2dp
Y2FsSGVpZ2h0Om1pbkxheW91dExvZ2ljYWxIZWlnaHQgbWF4aW11bVBhZ2VMb2dpY2FsV2lkdGg6
bWF4TGF5b3V0TG9naWNhbFdpZHRoIGFkanVzdFZpZXdTaXplOllFUyBwYWdpbmF0ZVNjcmVlbkNv
bnRlbnQ6W3NlbGYgX2lzSW5TY3JlZW5QYWdpbmF0aW9uTW9kZV1dOwogCiAgICAgcmV0dXJuIFlF
UzsKIH0KIAogLSAodm9pZClfZW5kUHJpbnRNb2RlCiB7Ci0gICAgW3NlbGYgX3NldFByaW50aW5n
Ok5PIG1pbmltdW1QYWdlV2lkdGg6MCBoZWlnaHQ6MCBtYXhpbXVtUGFnZVdpZHRoOjAgYWRqdXN0
Vmlld1NpemU6WUVTIHBhZ2luYXRlU2NyZWVuQ29udGVudDpbc2VsZiBfaXNJblNjcmVlblBhZ2lu
YXRpb25Nb2RlXV07CisgICAgW3NlbGYgX3NldFByaW50aW5nOk5PIG1pbmltdW1QYWdlTG9naWNh
bFdpZHRoOjAgbG9naWNhbEhlaWdodDowIG1heGltdW1QYWdlTG9naWNhbFdpZHRoOjAgYWRqdXN0
Vmlld1NpemU6WUVTIHBhZ2luYXRlU2NyZWVuQ29udGVudDpbc2VsZiBfaXNJblNjcmVlblBhZ2lu
YXRpb25Nb2RlXV07CiB9CiAKIC0gKEJPT0wpX2lzSW5TY3JlZW5QYWdpbmF0aW9uTW9kZQpAQCAt
MjI1MSwyNSArMjI1NywzMCBAQCAtIChCT09MKV9iZWdpblNjcmVlblBhZ2luYXRpb25Nb2RlV2l0
aFBhCiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIE5POwogCi0gICAgQ0dGbG9hdCBt
aW5MYXlvdXRXaWR0aCA9IDA7Ci0gICAgQ0dGbG9hdCBtaW5MYXlvdXRIZWlnaHQgPSAwOwotICAg
IENHRmxvYXQgbWF4TGF5b3V0V2lkdGggPSAwOworICAgIGJvb2wgaXNIb3Jpem9udGFsID0gdHJ1
ZTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAo
ZG9jdW1lbnQgJiYgZG9jdW1lbnQtPnJlbmRlclZpZXcoKSAmJiAhZG9jdW1lbnQtPnJlbmRlclZp
ZXcoKS0+c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAgICAgaXNIb3Jp
em9udGFsID0gZmFsc2U7CisKKyAgICBmbG9hdCBtaW5MYXlvdXRMb2dpY2FsV2lkdGggPSBpc0hv
cml6b250YWwgPyBwYWdlU2l6ZS53aWR0aCA6IHBhZ2VTaXplLmhlaWdodDsKKyAgICBmbG9hdCBt
aW5MYXlvdXRMb2dpY2FsSGVpZ2h0ID0gaXNIb3Jpem9udGFsID8gcGFnZVNpemUuaGVpZ2h0IDog
cGFnZVNpemUud2lkdGg7CisgICAgZmxvYXQgbWF4TGF5b3V0TG9naWNhbFdpZHRoID0gbWluTGF5
b3V0TG9naWNhbFdpZHRoOwogCi0gICAgLy8gSWYgd2UgYXJlIGEgZnJhbWVzZXQganVzdCBwcmlu
dCB3aXRoIHRoZSBsYXlvdXQgd2UgaGF2ZSBvbiB0aGUgc2NyZWVuLiBPdGhlcndpc2UgZG8gYSBy
ZWxheW91dAorICAgIC8vIElmIHdlIGFyZSBhIGZyYW1lc2V0IGp1c3QgcHJpbnQgd2l0aCB0aGUg
bGF5b3V0IHdlIGhhdmUgb25zY3JlZW4sIG90aGVyd2lzZSByZWxheW91dAogICAgIC8vIGFjY29y
ZGluZyB0byB0aGUgcGFnZSB3aWR0aC4KLSAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpIHx8ICFm
cmFtZS0+ZG9jdW1lbnQoKS0+aXNGcmFtZVNldCgpKSB7Ci0gICAgICAgIG1pbkxheW91dFdpZHRo
ID0gc2hyaW5rVG9GaXQgPyBwYWdlU2l6ZS53aWR0aCAqIF9XZWJIVE1MVmlld1ByaW50aW5nTWlu
aW11bVNocmlua0ZhY3RvciA6IHBhZ2VTaXplLndpZHRoOwotICAgICAgICBtaW5MYXlvdXRIZWln
aHQgPSBzaHJpbmtUb0ZpdCA/IHBhZ2VTaXplLmhlaWdodCAqIF9XZWJIVE1MVmlld1ByaW50aW5n
TWluaW11bVNocmlua0ZhY3RvciA6IHBhZ2VTaXplLmhlaWdodDsKLSAgICAgICAgbWF4TGF5b3V0
V2lkdGggPSBzaHJpbmtUb0ZpdCA/IHBhZ2VTaXplLndpZHRoICogX1dlYkhUTUxWaWV3UHJpbnRp
bmdNYXhpbXVtU2hyaW5rRmFjdG9yIDogcGFnZVNpemUud2lkdGg7CisgICAgaWYgKHNocmlua1Rv
Rml0ICYmICghZnJhbWUtPmRvY3VtZW50KCkgfHwgIWZyYW1lLT5kb2N1bWVudCgpLT5pc0ZyYW1l
U2V0KCkpKSB7CisgICAgICAgIG1pbkxheW91dExvZ2ljYWxXaWR0aCAqPSBfV2ViSFRNTFZpZXdQ
cmludGluZ01pbmltdW1TaHJpbmtGYWN0b3I7CisgICAgICAgIG1pbkxheW91dExvZ2ljYWxIZWln
aHQgKj0gX1dlYkhUTUxWaWV3UHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yOworICAgICAgICBt
YXhMYXlvdXRMb2dpY2FsV2lkdGggKj0gX1dlYkhUTUxWaWV3UHJpbnRpbmdNYXhpbXVtU2hyaW5r
RmFjdG9yOwogICAgIH0KLSAgICBbc2VsZiBfc2V0UHJpbnRpbmc6W3NlbGYgX2lzSW5QcmludE1v
ZGVdIG1pbmltdW1QYWdlV2lkdGg6bWluTGF5b3V0V2lkdGggaGVpZ2h0Om1pbkxheW91dEhlaWdo
dCBtYXhpbXVtUGFnZVdpZHRoOm1heExheW91dFdpZHRoIGFkanVzdFZpZXdTaXplOllFUyBwYWdp
bmF0ZVNjcmVlbkNvbnRlbnQ6WUVTXTsKKyAgICBbc2VsZiBfc2V0UHJpbnRpbmc6W3NlbGYgX2lz
SW5QcmludE1vZGVdIG1pbmltdW1QYWdlTG9naWNhbFdpZHRoOm1pbkxheW91dExvZ2ljYWxXaWR0
aCBsb2dpY2FsSGVpZ2h0Om1pbkxheW91dExvZ2ljYWxIZWlnaHQgbWF4aW11bVBhZ2VMb2dpY2Fs
V2lkdGg6bWF4TGF5b3V0TG9naWNhbFdpZHRoIGFkanVzdFZpZXdTaXplOllFUyBwYWdpbmF0ZVNj
cmVlbkNvbnRlbnQ6WUVTXTsKIAogICAgIHJldHVybiBZRVM7CiB9CiAKIC0gKHZvaWQpX2VuZFNj
cmVlblBhZ2luYXRpb25Nb2RlCiB7Ci0gICAgW3NlbGYgX3NldFByaW50aW5nOltzZWxmIF9pc0lu
UHJpbnRNb2RlXSBtaW5pbXVtUGFnZVdpZHRoOjAgaGVpZ2h0OjAgbWF4aW11bVBhZ2VXaWR0aDow
IGFkanVzdFZpZXdTaXplOllFUyBwYWdpbmF0ZVNjcmVlbkNvbnRlbnQ6Tk9dOworICAgIFtzZWxm
IF9zZXRQcmludGluZzpbc2VsZiBfaXNJblByaW50TW9kZV0gbWluaW11bVBhZ2VMb2dpY2FsV2lk
dGg6MCBsb2dpY2FsSGVpZ2h0OjAgbWF4aW11bVBhZ2VMb2dpY2FsV2lkdGg6MCBhZGp1c3RWaWV3
U2l6ZTpZRVMgcGFnaW5hdGVTY3JlZW5Db250ZW50Ok5PXTsKIH0KIAogLSAoQ0dGbG9hdClfYWRq
dXN0ZWRCb3R0b21PZlBhZ2VXaXRoVG9wOihDR0Zsb2F0KXRvcCBib3R0b206KENHRmxvYXQpYm90
dG9tIGxpbWl0OihDR0Zsb2F0KWJvdHRvbUxpbWl0CkBAIC0zMTI1LDcgKzMxMzYsNyBAQCAtICh2
b2lkKXJlYXBwbHlTdHlsZXMKIAogLy8gRG8gYSBsYXlvdXQsIGJ1dCBzZXQgdXAgYSBuZXcgZml4
ZWQgd2lkdGggZm9yIHRoZSBwdXJwb3NlcyBvZiBkb2luZyBwcmludGluZyBsYXlvdXQuCiAvLyBt
aW5QYWdlV2lkdGg9PTAgaW1wbGllcyBhIG5vbi1wcmludGluZyBsYXlvdXQKLS0gKHZvaWQpbGF5
b3V0VG9NaW5pbXVtUGFnZVdpZHRoOihmbG9hdCltaW5QYWdlV2lkdGggaGVpZ2h0OihmbG9hdClt
aW5QYWdlSGVpZ2h0IG1heGltdW1QYWdlV2lkdGg6KGZsb2F0KW1heFBhZ2VXaWR0aCBhZGp1c3Rp
bmdWaWV3U2l6ZTooQk9PTClhZGp1c3RWaWV3U2l6ZQorLSAodm9pZClsYXlvdXRUb01pbmltdW1Q
YWdlV2lkdGg6KGZsb2F0KW1pblBhZ2VMb2dpY2FsV2lkdGggaGVpZ2h0OihmbG9hdCltaW5QYWdl
TG9naWNhbEhlaWdodCBtYXhpbXVtUGFnZVdpZHRoOihmbG9hdCltYXhQYWdlTG9naWNhbFdpZHRo
IGFkanVzdGluZ1ZpZXdTaXplOihCT09MKWFkanVzdFZpZXdTaXplCiB7ICAgIAogICAgIGlmICgh
W3NlbGYgX25lZWRzTGF5b3V0XSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzE0MSw5ICszMTUyLDEy
IEBAIC0gKHZvaWQpbGF5b3V0VG9NaW5pbXVtUGFnZVdpZHRoOihmbG9hdCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKEZyYW1lVmlldyogY29yZVZpZXcgPSBjb3JlRnJhbWUtPnZpZXcoKSkg
ewotICAgICAgICBpZiAobWluUGFnZVdpZHRoID4gMC4wKQotICAgICAgICAgICAgY29yZVZpZXct
PmZvcmNlTGF5b3V0Rm9yUGFnaW5hdGlvbihGbG9hdFNpemUobWluUGFnZVdpZHRoLCBtaW5QYWdl
SGVpZ2h0KSwgbWF4UGFnZVdpZHRoIC8gbWluUGFnZVdpZHRoLCBhZGp1c3RWaWV3U2l6ZSA/IEZy
YW1lOjpBZGp1c3RWaWV3U2l6ZSA6IEZyYW1lOjpEb05vdEFkanVzdFZpZXdTaXplKTsKLSAgICAg
ICAgZWxzZSB7CisgICAgICAgIGlmIChtaW5QYWdlTG9naWNhbFdpZHRoID4gMC4wKSB7CisgICAg
ICAgICAgICBGbG9hdFNpemUgcGFnZVNpemUobWluUGFnZUxvZ2ljYWxXaWR0aCwgbWluUGFnZUxv
Z2ljYWxIZWlnaHQpOworICAgICAgICAgICAgaWYgKGNvcmVGcmFtZS0+ZG9jdW1lbnQoKSAmJiBj
b3JlRnJhbWUtPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKSAmJiAhY29yZUZyYW1lLT5kb2N1bWVu
dCgpLT5yZW5kZXJWaWV3KCktPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCisg
ICAgICAgICAgICAgICAgcGFnZVNpemUgPSBGbG9hdFNpemUobWluUGFnZUxvZ2ljYWxIZWlnaHQs
IG1pblBhZ2VMb2dpY2FsV2lkdGgpOworICAgICAgICAgICAgY29yZVZpZXctPmZvcmNlTGF5b3V0
Rm9yUGFnaW5hdGlvbihwYWdlU2l6ZSwgbWF4UGFnZUxvZ2ljYWxXaWR0aCAvIG1pblBhZ2VMb2dp
Y2FsV2lkdGgsIGFkanVzdFZpZXdTaXplID8gRnJhbWU6OkFkanVzdFZpZXdTaXplIDogRnJhbWU6
OkRvTm90QWRqdXN0Vmlld1NpemUpOworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgY29y
ZVZpZXctPmZvcmNlTGF5b3V0KCFhZGp1c3RWaWV3U2l6ZSk7CiAgICAgICAgICAgICBpZiAoYWRq
dXN0Vmlld1NpemUpCiAgICAgICAgICAgICAgICAgY29yZVZpZXctPmFkanVzdFZpZXdTaXplKCk7
CkBAIC0zODg1LDcgKzM4OTksNyBAQCAtICh2b2lkKXVwZGF0ZUNlbGw6KE5TQ2VsbCopY2VsbAog
CiAvLyBEb2VzIHNldE5lZWRzRGlzcGxheTpOTyBhcyBhIHNpZGUgZWZmZWN0IHdoZW4gcHJpbnRp
bmcgaXMgZW5kaW5nLgogLy8gcGFnZVdpZHRoICE9IDAgaW1wbGllcyB3ZSB3aWxsIHJlbGF5b3V0
IHRvIGEgbmV3IHdpZHRoCi0tICh2b2lkKV9zZXRQcmludGluZzooQk9PTClwcmludGluZyBtaW5p
bXVtUGFnZVdpZHRoOihmbG9hdCltaW5QYWdlV2lkdGggaGVpZ2h0OihmbG9hdCltaW5QYWdlSGVp
Z2h0IG1heGltdW1QYWdlV2lkdGg6KGZsb2F0KW1heFBhZ2VXaWR0aCBhZGp1c3RWaWV3U2l6ZToo
Qk9PTClhZGp1c3RWaWV3U2l6ZSBwYWdpbmF0ZVNjcmVlbkNvbnRlbnQ6KEJPT0wpcGFnaW5hdGVT
Y3JlZW5Db250ZW50CistICh2b2lkKV9zZXRQcmludGluZzooQk9PTClwcmludGluZyBtaW5pbXVt
UGFnZUxvZ2ljYWxXaWR0aDooZmxvYXQpbWluUGFnZUxvZ2ljYWxXaWR0aCBsb2dpY2FsSGVpZ2h0
OihmbG9hdCltaW5QYWdlTG9naWNhbEhlaWdodCBtYXhpbXVtUGFnZUxvZ2ljYWxXaWR0aDooZmxv
YXQpbWF4UGFnZUxvZ2ljYWxXaWR0aCBhZGp1c3RWaWV3U2l6ZTooQk9PTClhZGp1c3RWaWV3U2l6
ZSBwYWdpbmF0ZVNjcmVlbkNvbnRlbnQ6KEJPT0wpcGFnaW5hdGVTY3JlZW5Db250ZW50CiB7CiAg
ICAgaWYgKHByaW50aW5nID09IF9wcml2YXRlLT5wcmludGluZyAmJiBwYWdpbmF0ZVNjcmVlbkNv
bnRlbnQgPT0gX3ByaXZhdGUtPnBhZ2luYXRlU2NyZWVuQ29udGVudCkKICAgICAgICAgcmV0dXJu
OwpAQCAtMzg5OCw3ICszOTEyLDcgQEAgLSAodm9pZClfc2V0UHJpbnRpbmc6KEJPT0wpcHJpbnRp
bmcgbWluaQogICAgICAgICBXZWJGcmFtZSAqc3ViZnJhbWUgPSBbc3ViZnJhbWVzIG9iamVjdEF0
SW5kZXg6aV07CiAgICAgICAgIFdlYkZyYW1lVmlldyAqZnJhbWVWaWV3ID0gW3N1YmZyYW1lIGZy
YW1lVmlld107CiAgICAgICAgIGlmIChbW3N1YmZyYW1lIF9kYXRhU291cmNlXSBfaXNEb2N1bWVu
dEhUTUxdKSB7Ci0gICAgICAgICAgICBbKFdlYkhUTUxWaWV3ICopW2ZyYW1lVmlldyBkb2N1bWVu
dFZpZXddIF9zZXRQcmludGluZzpwcmludGluZyBtaW5pbXVtUGFnZVdpZHRoOjAgaGVpZ2h0OjAg
bWF4aW11bVBhZ2VXaWR0aDowIGFkanVzdFZpZXdTaXplOmFkanVzdFZpZXdTaXplIHBhZ2luYXRl
U2NyZWVuQ29udGVudDpwYWdpbmF0ZVNjcmVlbkNvbnRlbnRdOworICAgICAgICAgICAgWyhXZWJI
VE1MVmlldyAqKVtmcmFtZVZpZXcgZG9jdW1lbnRWaWV3XSBfc2V0UHJpbnRpbmc6cHJpbnRpbmcg
bWluaW11bVBhZ2VMb2dpY2FsV2lkdGg6MCBsb2dpY2FsSGVpZ2h0OjAgbWF4aW11bVBhZ2VMb2dp
Y2FsV2lkdGg6MCBhZGp1c3RWaWV3U2l6ZTphZGp1c3RWaWV3U2l6ZSBwYWdpbmF0ZVNjcmVlbkNv
bnRlbnQ6cGFnaW5hdGVTY3JlZW5Db250ZW50XTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzkx
OSw3ICszOTMzLDcgQEAgLSAodm9pZClfc2V0UHJpbnRpbmc6KEJPT0wpcHJpbnRpbmcgbWluaQog
ICAgIH0KIAogICAgIFtzZWxmIHNldE5lZWRzTGF5b3V0OllFU107Ci0gICAgW3NlbGYgbGF5b3V0
VG9NaW5pbXVtUGFnZVdpZHRoOm1pblBhZ2VXaWR0aCBoZWlnaHQ6bWluUGFnZUhlaWdodCBtYXhp
bXVtUGFnZVdpZHRoOm1heFBhZ2VXaWR0aCBhZGp1c3RpbmdWaWV3U2l6ZTphZGp1c3RWaWV3U2l6
ZV07CisgICAgW3NlbGYgbGF5b3V0VG9NaW5pbXVtUGFnZVdpZHRoOm1pblBhZ2VMb2dpY2FsV2lk
dGggaGVpZ2h0Om1pblBhZ2VMb2dpY2FsSGVpZ2h0IG1heGltdW1QYWdlV2lkdGg6bWF4UGFnZUxv
Z2ljYWxXaWR0aCBhZGp1c3RpbmdWaWV3U2l6ZTphZGp1c3RWaWV3U2l6ZV07CiAgICAgaWYgKCFw
cmludGluZykgewogICAgICAgICAvLyBDYW4ndCBkbyB0aGlzIHdoZW4gc3RhcnRpbmcgcHJpbnRp
bmcgb3IgbmVzdGVkIHByaW50aW5nIHdvbid0IHdvcmssIHNlZSAzNDkxNDI3LgogICAgICAgICBb
c2VsZiBzZXROZWVkc0Rpc3BsYXk6Tk9dOwpAQCAtMzkzOSw3ICszOTUzLDcgQEAgLSAodm9pZClh
ZGp1c3RQYWdlSGVpZ2h0TmV3OihDR0Zsb2F0ICopbgogICAgIC8vIElmIHRoZSBXZWJIVE1MVmll
dyBpdHNlbGYgaXMgd2hhdCB3ZSdyZSBwcmludGluZywgdGhlbiB3ZSB3aWxsIG5ldmVyIGhhdmUg
dG8gZG8gdGhpcy4KICAgICBCT09MIHdhc0luUHJpbnRpbmdNb2RlID0gX3ByaXZhdGUtPnByaW50
aW5nOwogICAgIGlmICghd2FzSW5QcmludGluZ01vZGUpCi0gICAgICAgIFtzZWxmIF9zZXRQcmlu
dGluZzpZRVMgbWluaW11bVBhZ2VXaWR0aDowIGhlaWdodDowIG1heGltdW1QYWdlV2lkdGg6MCBh
ZGp1c3RWaWV3U2l6ZTpOTyBwYWdpbmF0ZVNjcmVlbkNvbnRlbnQ6W3NlbGYgX2lzSW5TY3JlZW5Q
YWdpbmF0aW9uTW9kZV1dOworICAgICAgICBbc2VsZiBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1Q
YWdlTG9naWNhbFdpZHRoOjAgbG9naWNhbEhlaWdodDowIG1heGltdW1QYWdlTG9naWNhbFdpZHRo
OjAgYWRqdXN0Vmlld1NpemU6Tk8gcGFnaW5hdGVTY3JlZW5Db250ZW50OltzZWxmIF9pc0luU2Ny
ZWVuUGFnaW5hdGlvbk1vZGVdXTsKIAogICAgICpuZXdCb3R0b20gPSBbc2VsZiBfYWRqdXN0ZWRC
b3R0b21PZlBhZ2VXaXRoVG9wOm9sZFRvcCBib3R0b206b2xkQm90dG9tIGxpbWl0OmJvdHRvbUxp
bWl0XTsKIApAQCAtMzk1MCwyMSArMzk2NCwyOSBAQCAtICh2b2lkKWFkanVzdFBhZ2VIZWlnaHRO
ZXc6KENHRmxvYXQgKiluCiAgICAgICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVj
dG9yKF9kZWxheWVkRW5kUHJpbnRNb2RlOikgd2l0aE9iamVjdDpjdXJyZW5QcmludE9wZXJhdGlv
biBhZnRlckRlbGF5OjBdOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICAvLyBub3Qgc3VyZSBp
ZiB0aGlzIGlzIGFjdHVhbGx5IGV2ZXIgaW52b2tlZCwgaXQgcHJvYmFibHkgc2hvdWxkbid0IGJl
Ci0gICAgICAgICAgICBbc2VsZiBfc2V0UHJpbnRpbmc6Tk8gbWluaW11bVBhZ2VXaWR0aDowIGhl
aWdodDowIG1heGltdW1QYWdlV2lkdGg6MCBhZGp1c3RWaWV3U2l6ZTpOTyBwYWdpbmF0ZVNjcmVl
bkNvbnRlbnQ6W3NlbGYgX2lzSW5TY3JlZW5QYWdpbmF0aW9uTW9kZV1dOworICAgICAgICAgICAg
W3NlbGYgX3NldFByaW50aW5nOk5PIG1pbmltdW1QYWdlTG9naWNhbFdpZHRoOjAgbG9naWNhbEhl
aWdodDowIG1heGltdW1QYWdlTG9naWNhbFdpZHRoOjAgYWRqdXN0Vmlld1NpemU6Tk8gcGFnaW5h
dGVTY3JlZW5Db250ZW50OltzZWxmIF9pc0luU2NyZWVuUGFnaW5hdGlvbk1vZGVdXTsKICAgICB9
CiB9CiAKIC0gKGZsb2F0KV9zY2FsZUZhY3RvckZvclByaW50T3BlcmF0aW9uOihOU1ByaW50T3Bl
cmF0aW9uICopcHJpbnRPcGVyYXRpb24KIHsKLSAgICBmbG9hdCB2aWV3V2lkdGggPSBOU1dpZHRo
KFtzZWxmIGJvdW5kc10pOwotICAgIGlmICh2aWV3V2lkdGggPCAxKSB7Ci0gICAgICAgIExPR19F
UlJPUigiJUAgaGFzIG5vIHdpZHRoIHdoZW4gcHJpbnRpbmciLCBzZWxmKTsKKyAgICBib29sIHVz
ZVZpZXdXaWR0aCA9IHRydWU7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2Zy
YW1lXSk7CisgICAgaWYgKGNvcmVGcmFtZSkgeworICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBjb3JlRnJhbWUtPmRvY3VtZW50KCk7CisgICAgICAgIGlmIChkb2N1bWVudCAmJiBkb2N1bWVu
dC0+cmVuZGVyVmlldygpKQorICAgICAgICAgICAgdXNlVmlld1dpZHRoID0gZG9jdW1lbnQtPnJl
bmRlclZpZXcoKS0+c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKKyAgICB9CisK
KyAgICBmbG9hdCB2aWV3TG9naWNhbFdpZHRoID0gdXNlVmlld1dpZHRoID8gTlNXaWR0aChbc2Vs
ZiBib3VuZHNdKSA6IE5TSGVpZ2h0KFtzZWxmIGJvdW5kc10pOworICAgIGlmICh2aWV3TG9naWNh
bFdpZHRoIDwgMSkgeworICAgICAgICBMT0dfRVJST1IoIiVAIGhhcyBubyBsb2dpY2FsIHdpZHRo
IHdoZW4gcHJpbnRpbmciLCBzZWxmKTsKICAgICAgICAgcmV0dXJuIDEuMGY7CiAgICAgfQogCiAg
ICAgZmxvYXQgdXNlclNjYWxlRmFjdG9yID0gW3ByaW50T3BlcmF0aW9uIF93ZWJfcGFnZVNldHVw
U2NhbGVGYWN0b3JdOwogICAgIGZsb2F0IG1heFNocmlua1RvRml0U2NhbGVGYWN0b3IgPSAxLjBm
IC8gX1dlYkhUTUxWaWV3UHJpbnRpbmdNYXhpbXVtU2hyaW5rRmFjdG9yOwotICAgIGZsb2F0IHNo
cmlua1RvRml0U2NhbGVGYWN0b3IgPSBbcHJpbnRPcGVyYXRpb24gX3dlYl9hdmFpbGFibGVQYXBl
cldpZHRoXSAvIHZpZXdXaWR0aDsKKyAgICBmbG9hdCBzaHJpbmtUb0ZpdFNjYWxlRmFjdG9yID0g
KHVzZVZpZXdXaWR0aCA/IFtwcmludE9wZXJhdGlvbiBfd2ViX2F2YWlsYWJsZVBhcGVyV2lkdGhd
IDogIFtwcmludE9wZXJhdGlvbiBfd2ViX2F2YWlsYWJsZVBhcGVySGVpZ2h0XSkgLyB2aWV3TG9n
aWNhbFdpZHRoOwogICAgIHJldHVybiB1c2VyU2NhbGVGYWN0b3IgKiBtYXgobWF4U2hyaW5rVG9G
aXRTY2FsZUZhY3Rvciwgc2hyaW5rVG9GaXRTY2FsZUZhY3Rvcik7CiB9CiAKQEAgLTM5NzksOCAr
NDAwMSw4IEBAIC0gKENHRmxvYXQpX3Byb3ZpZGVUb3RhbFNjYWxlRmFjdG9yRm9yUHIKIC8vIFRo
aXMgaXMgdXNlZCBmb3IgQ2FyYm9uIHByaW50aW5nLiBBdCBzb21lIHBvaW50IHdlIG1pZ2h0IHdh
bnQgdG8gbWFrZSB0aGlzIHB1YmxpYyBBUEkuCiAtICh2b2lkKXNldFBhZ2VXaWR0aEZvclByaW50
aW5nOihmbG9hdClwYWdlV2lkdGgKIHsKLSAgICBbc2VsZiBfc2V0UHJpbnRpbmc6Tk8gbWluaW11
bVBhZ2VXaWR0aDowIGhlaWdodDowIG1heGltdW1QYWdlV2lkdGg6MCBhZGp1c3RWaWV3U2l6ZTpO
TyBwYWdpbmF0ZVNjcmVlbkNvbnRlbnQ6W3NlbGYgX2lzSW5TY3JlZW5QYWdpbmF0aW9uTW9kZV1d
OwotICAgIFtzZWxmIF9zZXRQcmludGluZzpZRVMgbWluaW11bVBhZ2VXaWR0aDpwYWdlV2lkdGgg
aGVpZ2h0OjAgbWF4aW11bVBhZ2VXaWR0aDpwYWdlV2lkdGggYWRqdXN0Vmlld1NpemU6WUVTIHBh
Z2luYXRlU2NyZWVuQ29udGVudDpbc2VsZiBfaXNJblNjcmVlblBhZ2luYXRpb25Nb2RlXV07Cisg
ICAgW3NlbGYgX3NldFByaW50aW5nOk5PIG1pbmltdW1QYWdlTG9naWNhbFdpZHRoOjAgbG9naWNh
bEhlaWdodDowIG1heGltdW1QYWdlTG9naWNhbFdpZHRoOjAgYWRqdXN0Vmlld1NpemU6Tk8gcGFn
aW5hdGVTY3JlZW5Db250ZW50OltzZWxmIF9pc0luU2NyZWVuUGFnaW5hdGlvbk1vZGVdXTsKKyAg
ICBbc2VsZiBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlTG9naWNhbFdpZHRoOnBhZ2VXaWR0
aCBsb2dpY2FsSGVpZ2h0OjAgbWF4aW11bVBhZ2VMb2dpY2FsV2lkdGg6cGFnZVdpZHRoIGFkanVz
dFZpZXdTaXplOllFUyBwYWdpbmF0ZVNjcmVlbkNvbnRlbnQ6W3NlbGYgX2lzSW5TY3JlZW5QYWdp
bmF0aW9uTW9kZV1dOwogfQogCiAtICh2b2lkKV9lbmRQcmludE1vZGVBbmRSZXN0b3JlV2luZG93
QXV0b2Rpc3BsYXkKQEAgLTQwNDQsOSArNDA2NiwxMCBAQCAtIChCT09MKWtub3dzUGFnZVJhbmdl
OihOU1JhbmdlUG9pbnRlcilyCiAgICAgZmxvYXQgdG90YWxTY2FsZUZhY3RvciA9IFtzZWxmIF9z
Y2FsZUZhY3RvckZvclByaW50T3BlcmF0aW9uOnByaW50T3BlcmF0aW9uXTsKICAgICBmbG9hdCB1
c2VyU2NhbGVGYWN0b3IgPSBbcHJpbnRPcGVyYXRpb24gX3dlYl9wYWdlU2V0dXBTY2FsZUZhY3Rv
cl07CiAgICAgW19wcml2YXRlLT5wYWdlUmVjdHMgcmVsZWFzZV07CisgICAgZmxvYXQgZnVsbFBh
Z2VXaWR0aCA9IGZsb29yZihbcHJpbnRPcGVyYXRpb24gX3dlYl9hdmFpbGFibGVQYXBlcldpZHRo
XSAvIHRvdGFsU2NhbGVGYWN0b3IpOwogICAgIGZsb2F0IGZ1bGxQYWdlSGVpZ2h0ID0gZmxvb3Jm
KFtwcmludE9wZXJhdGlvbiBfd2ViX2F2YWlsYWJsZVBhcGVySGVpZ2h0XSAvIHRvdGFsU2NhbGVG
YWN0b3IpOwogICAgIFdlYkZyYW1lICpmcmFtZSA9IFtzZWxmIF9mcmFtZV07Ci0gICAgTlNBcnJh
eSAqbmV3UGFnZVJlY3RzID0gW2ZyYW1lIF9jb21wdXRlUGFnZVJlY3RzV2l0aFByaW50V2lkdGhT
Y2FsZUZhY3Rvcjp1c2VyU2NhbGVGYWN0b3IgcHJpbnRIZWlnaHQ6ZnVsbFBhZ2VIZWlnaHRdOwor
ICAgIE5TQXJyYXkgKm5ld1BhZ2VSZWN0cyA9IFtmcmFtZSBfY29tcHV0ZVBhZ2VSZWN0c1dpdGhQ
cmludFNjYWxlRmFjdG9yOnVzZXJTY2FsZUZhY3RvciBwYWdlU2l6ZTpOU01ha2VTaXplKGZ1bGxQ
YWdlV2lkdGgsIGZ1bGxQYWdlSGVpZ2h0KV07CiAgICAgCiAgICAgLy8gQXBwS2l0IGdldHMgYWxs
IG1lc3NlZCB1cCBpZiB5b3UgZ2l2ZSBpdCBhIHplcm8tbGVuZ3RoIHBhZ2UgY291bnQgKHNlZSAz
NTc2MzM0KSwgc28gaWYgd2UKICAgICAvLyBoaXQgdGhhdCBjYXNlIHdlJ2xsIHBhc3MgYWxvbmcg
YSBkZWdlbmVyYXRlIDEgcGl4ZWwgc3F1YXJlIHRvIHByaW50LiBUaGlzIHdpbGwgcHJpbnQK
</data>
<flag name="review"
          id="71856"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>