<?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>113352</bug_id>
          
          <creation_ts>2013-03-26 16:14:44 -0700</creation_ts>
          <short_desc>Need WK2 API to give a WebView a header and footer</short_desc>
          <delta_ts>2013-03-27 19:29:55 -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>Mac</rep_platform>
          <op_sys>Unspecified</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Beth Dakin">bdakin</assigned_to>
          <cc>andersca</cc>
    
    <cc>bdakin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>jamesr</cc>
    
    <cc>jeffm</cc>
    
    <cc>luiz</cc>
    
    <cc>mark.lam</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>864081</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-03-26 16:14:44 -0700</bug_when>
    <thetext>We need WK2 API that can allow a WebView to have a header and footer. The scrolling machinery in WebCore will need to be able to scroll to the header and footer too.

&lt;rdar://problem/13383835&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864096</commentid>
    <comment_count>1</comment_count>
      <attachid>195186</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-03-26 16:38:05 -0700</bug_when>
    <thetext>Created attachment 195186
Patch

I have a follow-up patch that will fix position:fixed and sticky elements when you are in the mode. I separated that code out for now because the patch is big enough as it is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864100</commentid>
    <comment_count>2</comment_count>
      <attachid>195186</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-03-26 16:45:39 -0700</bug_when>
    <thetext>Comment on attachment 195186
Patch

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

&gt; Source/WebCore/platform/ScrollableArea.h:153
&gt; +    unsigned headerHeight() const { return m_headerHeight; }
&gt; +    void setHeaderHeight(unsigned headerHeight) { m_headerHeight = headerHeight; }
&gt; +    unsigned footerHeight() const { return m_footerHeight; }
&gt; +    void setFooterHeight(unsigned footerHeight) { m_footerHeight = footerHeight; }

I don&apos;t think we should use unsigned for geometry.

You&apos;re also allowing these to be called on any ScrollableArea, but it looks like the code only supports them for the main frame. You should assert this.

&gt; Source/WebCore/platform/ScrollableArea.h:156
&gt; +    IntSize scrollableAreaSize() const;

I think we need a better name for this. It&apos;s too easy to read as &quot;the size of the scrollable area&quot; (i.e. the outside), not the scrolledContents size. Maybe totalContentSize()? contentSizeWithHeaderAndFooter()?

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2501
&gt; +        if (m_layerForHeader) {
&gt; +            m_layerForHeader-&gt;removeFromParent();

Please call willDestroyLayer() here.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2526
&gt; +        if (m_layerForFooter) {
&gt; +            m_layerForFooter-&gt;removeFromParent();

Please call willDestroyLayer() here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864125</commentid>
    <comment_count>3</comment_count>
      <attachid>195186</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-03-26 17:12:36 -0700</bug_when>
    <thetext>Comment on attachment 195186
Patch

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

&gt; Source/WebKit2/WebProcess/InjectedBundle/API/c/mac/WKBundlePagePrivateMac.h:40
&gt; +WK_EXPORT CALayer * WKBundlePageGetHeaderLayer(WKBundlePageRef page);
&gt; +WK_EXPORT void WKBundlePageSetHeaderLayer(WKBundlePageRef page, CALayer *headerLayer);
&gt; +WK_EXPORT CALayer * WKBundlePageGetFooterLayer(WKBundlePageRef page);
&gt; +WK_EXPORT void WKBundlePageSetFooterLayer(WKBundlePageRef page, CALayer *footerLayer);

I think we should make the API be setting a layer and its height, and then WebKit would be responsible for setting the layers size based on the width of the viewport.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.h:373
&gt; +    CALayer * getHeaderLayer() const;

There shouldn&apos;t be a space after the *.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864198</commentid>
    <comment_count>4</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-03-26 20:45:54 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 195186 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=195186&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/ScrollableArea.h:153
&gt; &gt; +    unsigned headerHeight() const { return m_headerHeight; }
&gt; &gt; +    void setHeaderHeight(unsigned headerHeight) { m_headerHeight = headerHeight; }
&gt; &gt; +    unsigned footerHeight() const { return m_footerHeight; }
&gt; &gt; +    void setFooterHeight(unsigned footerHeight) { m_footerHeight = footerHeight; }
&gt; 
&gt; I don&apos;t think we should use unsigned for geometry.
&gt; 

Switched to an int.

&gt; You&apos;re also allowing these to be called on any ScrollableArea, but it looks like the code only supports them for the main frame. You should assert this.
&gt; 
&gt; &gt; Source/WebCore/platform/ScrollableArea.h:156
&gt; &gt; +    IntSize scrollableAreaSize() const;
&gt; 
&gt; I think we need a better name for this. It&apos;s too easy to read as &quot;the size of the scrollable area&quot; (i.e. the outside), not the scrolledContents size. Maybe totalContentSize()? contentSizeWithHeaderAndFooter()?
&gt; 

I went with totalContentsSize for now.

&gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2501
&gt; &gt; +        if (m_layerForHeader) {
&gt; &gt; +            m_layerForHeader-&gt;removeFromParent();
&gt; 
&gt; Please call willDestroyLayer() here.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2526
&gt; &gt; +        if (m_layerForFooter) {
&gt; &gt; +            m_layerForFooter-&gt;removeFromParent();
&gt; 
&gt; Please call willDestroyLayer() here.

willDestroyLayer() is currently a private member of RenderLayerBacking, and this code is in RenderLayerCompositor. It doesn&apos;t seem like any of the other layers that are owned by the compositor call this either. What is the best way to proceed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864213</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-03-26 21:13:31 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2501
&gt; &gt; &gt; +        if (m_layerForHeader) {
&gt; &gt; &gt; +            m_layerForHeader-&gt;removeFromParent();
&gt; &gt; 
&gt; &gt; Please call willDestroyLayer() here.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2526
&gt; &gt; &gt; +        if (m_layerForFooter) {
&gt; &gt; &gt; +            m_layerForFooter-&gt;removeFromParent();
&gt; &gt; 
&gt; &gt; Please call willDestroyLayer() here.
&gt; 
&gt; willDestroyLayer() is currently a private member of RenderLayerBacking, and this code is in RenderLayerCompositor. It doesn&apos;t seem like any of the other layers that are owned by the compositor call this either. What is the best way to proceed?

Ah OK, no need to call it then (it&apos;s just used for tiled layer bookkeeping, and these layers will never be tiled I assume).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864233</commentid>
    <comment_count>6</comment_count>
      <attachid>195223</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-03-26 22:24:13 -0700</bug_when>
    <thetext>Created attachment 195223
Patch

Here&apos;s a a patch that addresses everyone&apos;s feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864235</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-26 22:26:57 -0700</bug_when>
    <thetext>Attachment 195223 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/page/FrameView.cpp&apos;, u&apos;Source/WebCore/page/FrameView.h&apos;, u&apos;Source/WebCore/page/SpatialNavigation.cpp&apos;, u&apos;Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp&apos;, u&apos;Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h&apos;, u&apos;Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp&apos;, u&apos;Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h&apos;, u&apos;Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.h&apos;, u&apos;Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm&apos;, u&apos;Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm&apos;, u&apos;Source/WebCore/platform/ScrollView.cpp&apos;, u&apos;Source/WebCore/platform/ScrollableArea.cpp&apos;, u&apos;Source/WebCore/platform/ScrollableArea.h&apos;, u&apos;Source/WebCore/platform/mac/ScrollAnimatorMac.mm&apos;, u&apos;Source/WebCore/platform/mac/ThemeMac.mm&apos;, u&apos;Source/WebCore/rendering/RenderLayerCompositor.cpp&apos;, u&apos;Source/WebCore/rendering/RenderLayerCompositor.h&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/WebKit2.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebKit2/WebProcess/InjectedBundle/API/c/mac/WKBundlePagePrivateMac.h&apos;, u&apos;Source/WebKit2/WebProcess/InjectedBundle/API/c/mac/WKBundlePagePrivateMac.mm&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/WebPage.h&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm&apos;]&quot; exit_code: 1
Source/WebCore/page/FrameView.h:410:  The parameter name &quot;headerHeight&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/page/FrameView.h:412:  The parameter name &quot;footerHeight&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864828</commentid>
    <comment_count>8</comment_count>
      <attachid>195223</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-03-27 13:41:31 -0700</bug_when>
    <thetext>Comment on attachment 195223
Patch

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

I think we need to add window.internals methods for adding header and footer height, and add some tests for basic hit testing etc with a header. Otherwise we have no way for other platforms to tell when they break the geometry logic with headers.

&gt; Source/WebCore/page/FrameView.cpp:892
&gt; +    RenderView* renderView = this-&gt;renderView();

Assert that this is the root FrameView?

&gt; Source/WebCore/page/FrameView.cpp:904
&gt; +{

Ditto.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2493
&gt; +    m_layerForBottomOverhangArea-&gt;setPosition(FloatPoint(0, m_rootContentLayer-&gt;size().height() + m_renderView-&gt;frameView()-&gt;footerHeight() + m_renderView-&gt;frameView()-&gt;headerHeight()));

Seems logical to say headerHeight + footerHeight rather than the other way around.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2519
&gt; +    m_layerForHeader-&gt;setPosition(FloatPoint(0, 0));
&gt; +    return m_layerForHeader.get();

Don&apos;t we want to update the width of the header layer too?

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2543
&gt; +    m_layerForFooter-&gt;setPosition(FloatPoint(0, m_rootContentLayer-&gt;size().height() + m_renderView-&gt;frameView()-&gt;headerHeight()));

Ditto.

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:824
&gt; +void WebPage::setHeaderLayerWithHeight(CALayer *childLayer, int height)

Not sure that the &quot;child&quot; adds anything.

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:838
&gt; +    m_headerLayer.get().bounds = CGRectMake(0, 0, size().width(), height);
&gt; +    parentLayer-&gt;setSize(FloatSize(m_headerLayer.get().bounds.size));

Who&apos;s responsible for updating the width and contents of the header and footer layers when the WKView is resized?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865053</commentid>
    <comment_count>9</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-03-27 17:41:19 -0700</bug_when>
    <thetext>Thanks, Simon! I addressed your comments and added some tests. http://trac.webkit.org/changeset/147039</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865079</commentid>
    <comment_count>10</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-03-27 18:25:47 -0700</bug_when>
    <thetext>This cause build failure in Apple Win bots:
http://build.webkit.org/builders/Apple%20Win%20Release%20%28Build%29/builds/46660/steps/compile-webkit/logs/stdio

19&gt;Linking...
19&gt;   Creating library C:\cygwin\home\buildbot\slave\win-release\build\WebKitBuild\Release\lib\DumpRenderTree.lib and object C:\cygwin\home\buildbot\slave\win-release\build\WebKitBuild\Release\lib\DumpRenderTree.exp
19&gt;WebCoreTestSupport.lib(Internals.obj) : error LNK2019: unresolved external symbol &quot;public: void __thiscall WebCore::FrameView::setHeaderHeight(int)&quot; (?setHeaderHeight@FrameView@WebCore@@QAEXH@Z) referenced in function &quot;public: void __thiscall WebCore::Internals::setHeaderHeight(class WebCore::Document *,float)&quot; (?setHeaderHeight@Internals@WebCore@@QAEXPAVDocument@2@M@Z)
19&gt;WebCoreTestSupport.lib(Internals.obj) : error LNK2019: unresolved external symbol &quot;public: void __thiscall WebCore::FrameView::setFooterHeight(int)&quot; (?setFooterHeight@FrameView@WebCore@@QAEXH@Z) referenced in function &quot;public: void __thiscall WebCore::Internals::setFooterHeight(class WebCore::Document *,float)&quot; (?setFooterHeight@Internals@WebCore@@QAEXPAVDocument@2@M@Z)
19&gt;C:\cygwin\home\buildbot\slave\win-release\build\WebKitBuild\Release\bin\DumpRenderTree.dll : fatal error LNK1120: 2 unresolved externals</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865086</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-03-27 18:40:10 -0700</bug_when>
    <thetext>Windows build fix landed in r147043: &lt;http://trac.webkit.org/changeset/147043&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865087</commentid>
    <comment_count>12</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-03-27 18:53:57 -0700</bug_when>
    <thetext>2 more symbols for the Apple Win debug build.  Landed on in r147044: &lt;http://trac.webkit.org/changeset/147044&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865105</commentid>
    <comment_count>13</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-03-27 19:29:55 -0700</bug_when>
    <thetext>Reverted r147044 in r144046: &lt;http://trac.webkit.org/changeset/147046&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195186</attachid>
            <date>2013-03-26 16:38:05 -0700</date>
            <delta_ts>2013-03-26 22:24:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>48696</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0Njk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMyBAQAorMjAxMy0wMy0yNiAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTmVlZCBXSzIgQVBJIHRvIGdpdmUg
YSBXZWJWaWV3IGEgaGVhZGVyIGFuZCBmb290ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzM1MgorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmct
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzM4MzgzNT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIEFQSSB3aWxsIHJlcXVpcmUgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yIHRvIGtlZXAgbGF5ZXJzIGZvciB0aGUgaGVhZGVyIGFuZCAKKyAgICAg
ICAgZm9vdGVyIHdoZW4gdGhlIGV4aXN0LiBJdCBhbHNvIHJlcXVpcmVzIHRoZSBzY3JvbGxpbmcg
bWFjaGluZXJ5IHRvIGtub3cgdGhhdCB0aGUgCisgICAgICAgIHNpemUgb2YgdGhlIHNjcm9sbGFi
bGUgYXJlYSB3aWxsIGRpZmZlciBmcm9tIHRoZSBjb250ZW50c1NpemUgd2hlbiB0aGVyZSBpcyBh
IAorICAgICAgICBoZWFkZXIgb3IgZm9vdGVyLgorCisgICAgICAgIHNldFdhbnRzTGF5ZXJGb3JI
ZWFkZXIoKSBhbmQgc2V0V2FudHNMYXllckZvckZvb3RlcigpIHJldHVybiBHcmFwaGljc0xheWVy
cyB0byAKKyAgICAgICAgV0syLgorICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAq
IHBhZ2UvRnJhbWVWaWV3Lmg6CisgICAgICAgIChGcmFtZVZpZXcpOgorICAgICAgICAqIHBhZ2Uv
RnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0V2FudHNMYXll
ckZvckhlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldFdhbnRzTGF5ZXJG
b3JGb290ZXIpOgorCisgICAgICAgIFNob3VsZCB1c2Ugc2Nyb2xsYWJsZUFyZWFTaXplKCkgaW5z
dGVhZCBvZiBjb250ZW50c1NpemUoKS4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6d2lu
ZG93Q2xpcFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojppc1Njcm9sbGFibGUp
OgorICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y2FuU2Nyb2xsSW5EaXJlY3Rpb24pOgorCisgICAgICAgIFRoaXMgc2hvdWxkIGFsc28gdXNl
IHNjcm9sbGFibGVBcmVhU2l6ZSgpIGluc3RlYWQgb2YgY29udGVudHNTaXplKCksIGFuZCB3aGls
ZSAKKyAgICAgICAgd2UncmUgYXQgaXQsIHJlLW5hbWUgdGhlIHZhcmlhYmxlIGFuZCBmdW5jdGlv
biBuYW1lcyBpbiB0aGUgc2Nyb2xsaW5nIHRyZWUgY29kZSAKKyAgICAgICAgZnJvbSBjb250ZW50
c1NpemUgdG8gc2Nyb2xsYWJsZUFyZWFTaXplLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldFNjcm9sbGFibGVB
cmVhU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OmR1bXBQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZTo6c2Nyb2xsYWJsZUFyZWFTaXplKToKKyAgICAgICAgKFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZSk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGU6OnVwZGF0ZUJlZm9yZUNoaWxkcmVuKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGU6OnNjcm9sbGFibGVBcmVhU2l6ZSk6CisgICAgICAgIChTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZSk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yTWFjLmg6CisgICAgICAgIChTY3JvbGxQYXJhbWV0ZXJzKToKKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6ZnJhbWVWaWV3TGF5b3V0VXBkYXRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0U2Nyb2xs
UGFyYW1ldGVyc0Zvck5vZGUpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlTWFjOjp1cGRhdGVBZnRlckNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjpzZXRTY3JvbGxMYXllclBvc2l0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjptYXhp
bXVtU2Nyb2xsUG9zaXRpb24pOgorCisgICAgICAgIFVzZSBzY3JvbGxhYmxlQXJlYVNpemUoKSBp
bnN0ZWFkIG9mIGNvbnRlbnRzU2l6ZSgpLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6bWF4aW11bVNjcm9sbFBvc2l0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldFNjcm9sbE9mZnNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpvdmVyaGFuZ0Ftb3VudCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbFZpZXc6OmNhbGN1bGF0ZU92ZXJoYW5nQXJlYXNGb3JQYWludGluZyk6CisgICAgICAgICog
cGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3JNYWM6OmFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnBpbm5lZEluRGlyZWN0aW9uKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpUaGVtZU1h
Yzo6ZW5zdXJlZFZpZXcpOgorCisgICAgICAgIHNjcm9sbE9mZnNldCgpIHJlcHJlc2VudHMgdGhl
IG9mZnNldCB3aXRoaW4gdGhlIHNjcm9sbGFibGVBcmVhU2l6ZSwgYnV0IHRoYXQgaXMgCisgICAg
ICAgIG5vdCB3aGF0IHdlIG5lZWQgaGVyZS4gU28gc3VidHJhY3Qgb3V0IHRoZSBoZWFkZXJIZWln
aHQoKSBmb3IgdGhlIGFwcHJvcHJpYXRlIAorICAgICAgICB2YWx1ZS4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbFZpZXc6OndpbmRvd1RvQ29udGVudHMpOgorCisgICAgICAgIFNjcm9sbGFibGVB
cmVhIG5vdyBrZWVwcyB2YXJpYWJsZXMgZm9yIHRoZSBoZWFkZXIgaGVpZ2h0IGFuZCBmb290ZXIg
aGVpZ2h0LgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcDoKKyAgICAgICAg
KFNhbWVTaXplQXNTY3JvbGxhYmxlQXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxl
QXJlYTo6U2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6
Om1heGltdW1TY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzY3JvbGxhYmxlQXJlYVNpemUpOgorICAgICAgICAqIHBs
YXRmb3JtL1Njcm9sbGFibGVBcmVhLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJl
YTo6aGVhZGVySGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzZXRI
ZWFkZXJIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmZvb3Rlckhl
aWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2V0Rm9vdGVySGVpZ2h0
KToKKyAgICAgICAgKFNjcm9sbGFibGVBcmVhKToKKworICAgICAgICBUaGUgcm9vdENvbnRlbnRM
YXllciBuZWVkcyB0byBiZSBvZmZzZXQgYnkgdGhlIGhlYWRlckhlaWdodCgpLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVSb290TGF5ZXJQb3NpdGlvbik6CisKKyAgICAg
ICAgTmV3IG1lbWJlciB2YXJpYWJsZXMgbV9sYXllckZvckhlYWRlciBhbmQgbV9sYXllckZvckZv
b3Rlci4gVGhpcyBjb2RlIHByb3Blcmx5IAorICAgICAgICBjcmVhdGVzIGFuZCBtYW5hZ2VzIHRo
ZW0uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUxheWVy
Rm9yQm90dG9tT3ZlcmhhbmdBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29t
cG9zaXRvcjo6dXBkYXRlTGF5ZXJGb3JIZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVMYXllckZvckZvb3Rlcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVGaXhlZFZpZXdwb3J0Q29uc3RyYWludHMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXBvcnRNZW1vcnlV
c2FnZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oOgorICAg
ICAgICAoUmVuZGVyTGF5ZXJDb21wb3NpdG9yKToKKwogMjAxMy0wMy0yNiAgQnJlbnQgRnVsZ2hh
bSAgPGJmdWxnaGFtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1dpbmRvd3MsIFdpbkNhaXJvXSBT
Y3JvbGwgb2Zmc2V0IGJlaW5nIGFwcGxpZWQgdG8gcGx1Z2lucyBkdXJpbmcgcHJpbnQgb3BlcmF0
aW9ucy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxNDY5MDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMTU2Miw2ICsxNTYy
LDggQEAgX19aTks3V2ViQ29yZTlGcmFtZVZpZXcxM3BhaW50QmVoYXZpb3JFdgogX19aTks3V2Vi
Q29yZTlGcmFtZVZpZXcxNGRpZEZpcnN0TGF5b3V0RXYKIF9fWk5LN1dlYkNvcmU5RnJhbWVWaWV3
MTliYXNlQmFja2dyb3VuZENvbG9yRXYKIF9fWk5LN1dlYkNvcmU5RnJhbWVWaWV3MjBpc1NvZnR3
YXJlUmVuZGVyYWJsZUV2CitfX1pOSzdXZWJDb3JlOUZyYW1lVmlldzIyc2V0V2FudHNMYXllckZv
ckZvb3RlckViCitfX1pOSzdXZWJDb3JlOUZyYW1lVmlldzIyc2V0V2FudHNMYXllckZvckhlYWRl
ckViCiBfX1pOSzdXZWJDb3JlOUZyYW1lVmlldzIzZG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3JFdgog
X19aTks3V2ViQ29yZTlGcmFtZVZpZXcyN3dpbmRvd0NsaXBSZWN0Rm9yRnJhbWVPd25lckVQS05T
XzIxSFRNTEZyYW1lT3duZXJFbGVtZW50RWIKIF9fWk5LN1dlYkNvcmU5RnJhbWVWaWV3Mjhpc0Vu
Y2xvc2VkSW5Db21wb3NpdGluZ0xheWVyRXYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAJKHJldmlzaW9uIDE0NjkwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODg0LDYgKzg4NCwzMyBAQCBHcmFwaGljc0xheWVyKiBGcmFt
ZVZpZXc6OnNldFdhbnRzTGF5ZXJGCiAgICAgcmV0dXJuIDA7CiAjZW5kaWYKIH0KKworR3JhcGhp
Y3NMYXllciogRnJhbWVWaWV3OjpzZXRXYW50c0xheWVyRm9ySGVhZGVyKGJvb2wgd2FudHNMYXll
cikgY29uc3QKK3sKKyAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gdGhpcy0+cmVuZGVyVmll
dygpOworICAgIGlmICghcmVuZGVyVmlldykKKyAgICAgICAgcmV0dXJuIDA7CisKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgcmV0dXJuIHJlbmRlclZpZXctPmNvbXBvc2l0
b3IoKS0+dXBkYXRlTGF5ZXJGb3JIZWFkZXIod2FudHNMYXllcik7CisjZWxzZQorICAgIHJldHVy
biAwOworI2VuZGlmCit9CisKK0dyYXBoaWNzTGF5ZXIqIEZyYW1lVmlldzo6c2V0V2FudHNMYXll
ckZvckZvb3Rlcihib29sIHdhbnRzTGF5ZXIpIGNvbnN0Cit7CisgICAgUmVuZGVyVmlldyogcmVu
ZGVyVmlldyA9IHRoaXMtPnJlbmRlclZpZXcoKTsKKyAgICBpZiAoIXJlbmRlclZpZXcpCisgICAg
ICAgIHJldHVybiAwOworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIHJl
dHVybiByZW5kZXJWaWV3LT5jb21wb3NpdG9yKCktPnVwZGF0ZUxheWVyRm9yRm9vdGVyKHdhbnRz
TGF5ZXIpOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCiAjZW5kaWYKIAogYm9v
bCBGcmFtZVZpZXc6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNGcmFtZShGcmFtZSogcm9v
dEZyYW1lRm9yRmx1c2gpCkBAIC0yODUyLDcgKzI4NzksNyBAQCBJbnRSZWN0IEZyYW1lVmlldzo6
d2luZG93Q2xpcFJlY3QoYm9vbCBjCiAgICAgQVNTRVJUKG1fZnJhbWUtPnZpZXcoKSA9PSB0aGlz
KTsKIAogICAgIGlmIChwYWludHNFbnRpcmVDb250ZW50cygpKQotICAgICAgICByZXR1cm4gSW50
UmVjdChJbnRQb2ludCgpLCBjb250ZW50c1NpemUoKSk7CisgICAgICAgIHJldHVybiBJbnRSZWN0
KEludFBvaW50KCksIHNjcm9sbGFibGVBcmVhU2l6ZSgpKTsKIAogICAgIC8vIFNldCBvdXIgY2xp
cCByZWN0IHRvIGJlIG91ciBjb250ZW50cy4KICAgICBJbnRSZWN0IGNsaXBSZWN0ID0gY29udGVu
dHNUb1dpbmRvdyh2aXNpYmxlQ29udGVudFJlY3QoY2xpcFRvQ29udGVudHMgPyBFeGNsdWRlU2Ny
b2xsYmFycyA6IEluY2x1ZGVTY3JvbGxiYXJzKSk7CkBAIC0yOTg5LDkgKzMwMTYsOSBAQCBib29s
IEZyYW1lVmlldzo6aXNTY3JvbGxhYmxlKCkKICAgICAvLyA0KSBzY3JvbGxpbmc6IG5vOwogCiAg
ICAgLy8gQ292ZXJzICMxCi0gICAgSW50U2l6ZSBjb250ZW50U2l6ZSA9IGNvbnRlbnRzU2l6ZSgp
OworICAgIEludFNpemUgc2Nyb2xsYWJsZUFyZWFTaXplID0gdGhpcy0+c2Nyb2xsYWJsZUFyZWFT
aXplKCk7CiAgICAgSW50U2l6ZSB2aXNpYmxlQ29udGVudFNpemUgPSB2aXNpYmxlQ29udGVudFJl
Y3QoKS5zaXplKCk7Ci0gICAgaWYgKChjb250ZW50U2l6ZS5oZWlnaHQoKSA8PSB2aXNpYmxlQ29u
dGVudFNpemUuaGVpZ2h0KCkgJiYgY29udGVudFNpemUud2lkdGgoKSA8PSB2aXNpYmxlQ29udGVu
dFNpemUud2lkdGgoKSkpCisgICAgaWYgKChzY3JvbGxhYmxlQXJlYVNpemUuaGVpZ2h0KCkgPD0g
dmlzaWJsZUNvbnRlbnRTaXplLmhlaWdodCgpICYmIHNjcm9sbGFibGVBcmVhU2l6ZS53aWR0aCgp
IDw9IHZpc2libGVDb250ZW50U2l6ZS53aWR0aCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgLy8gQ292ZXJzICMyLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCShyZXZpc2lv
biAxNDY5MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MDIsNiArNDAyLDggQEAgcHVibGljOgogI2lmIEVOQUJMRShSVUJCRVJfQkFORElO
RykKICAgICBHcmFwaGljc0xheWVyKiBzZXRXYW50c0xheWVyRm9yVG9wT3ZlckhhbmdBcmVhKGJv
b2wpIGNvbnN0OwogICAgIEdyYXBoaWNzTGF5ZXIqIHNldFdhbnRzTGF5ZXJGb3JCb3R0b21PdmVy
SGFuZ0FyZWEoYm9vbCkgY29uc3Q7CisgICAgR3JhcGhpY3NMYXllciogc2V0V2FudHNMYXllckZv
ckhlYWRlcihib29sKSBjb25zdDsKKyAgICBHcmFwaGljc0xheWVyKiBzZXRXYW50c0xheWVyRm9y
Rm9vdGVyKGJvb2wpIGNvbnN0OwogI2VuZGlmCiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCShyZXZpc2lvbiAxNDY5MDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDgzLDcgKzQ4Myw3IEBAIGJvb2wgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oY29uc3QgRnJhbWUq
IGYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICgoZGlyZWN0aW9uID09IEZvY3VzRGly
ZWN0aW9uVXAgfHwgZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0aW9uRG93bikgJiYgIFNjcm9sbGJh
ckFsd2F5c09mZiA9PSB2ZXJ0aWNhbE1vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBM
YXlvdXRTaXplIHNpemUgPSBmcmFtZS0+dmlldygpLT5jb250ZW50c1NpemUoKTsKKyAgICBMYXlv
dXRTaXplIHNpemUgPSBmcmFtZS0+dmlldygpLT5zY3JvbGxhYmxlQXJlYVNpemUoKTsKICAgICBM
YXlvdXRTaXplIG9mZnNldCA9IGZyYW1lLT52aWV3KCktPnNjcm9sbE9mZnNldCgpOwogICAgIExh
eW91dFJlY3QgcmVjdCA9IGZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdChTY3JvbGxh
YmxlQXJlYTo6SW5jbHVkZVNjcm9sbGJhcnMpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZS5jcHAJKHJldmlzaW9uIDE0NjkwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcg
KzU4LDcgQEAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxpbmdTdAogU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUoY29uc3Qg
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlJiBzdGF0ZU5vZGUpCiAgICAgOiBTY3JvbGxpbmdT
dGF0ZU5vZGUoc3RhdGVOb2RlKQogICAgICwgbV92aWV3cG9ydFJlY3Qoc3RhdGVOb2RlLnZpZXdw
b3J0UmVjdCgpKQotICAgICwgbV9jb250ZW50c1NpemUoc3RhdGVOb2RlLmNvbnRlbnRzU2l6ZSgp
KQorICAgICwgbV9zY3JvbGxhYmxlQXJlYVNpemUoc3RhdGVOb2RlLnNjcm9sbGFibGVBcmVhU2l6
ZSgpKQogICAgICwgbV9mcmFtZVNjYWxlRmFjdG9yKHN0YXRlTm9kZS5mcmFtZVNjYWxlRmFjdG9y
KCkpCiAgICAgLCBtX25vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKHN0YXRlTm9kZS5ub25GYXN0U2Ny
b2xsYWJsZVJlZ2lvbigpKQogICAgICwgbV93aGVlbEV2ZW50SGFuZGxlckNvdW50KHN0YXRlTm9k
ZS53aGVlbEV2ZW50SGFuZGxlckNvdW50KCkpCkBAIC05NSwxMyArOTUsMTMgQEAgdm9pZCBTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldFZpZQogICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVl
LT5zZXRIYXNDaGFuZ2VkUHJvcGVydGllcyh0cnVlKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGU6OnNldENvbnRlbnRzU2l6ZShjb25zdCBJbnRTaXplJiBjb250ZW50c1Np
emUpCit2b2lkIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0U2Nyb2xsYWJsZUFyZWFT
aXplKGNvbnN0IEludFNpemUmIHNjcm9sbGFibGVBcmVhU2l6ZSkKIHsKLSAgICBpZiAobV9jb250
ZW50c1NpemUgPT0gY29udGVudHNTaXplKQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVhU2l6ZSA9
PSBzY3JvbGxhYmxlQXJlYVNpemUpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fY29udGVudHNT
aXplID0gY29udGVudHNTaXplOwotICAgIHNldFByb3BlcnR5Q2hhbmdlZChDb250ZW50c1NpemUp
OworICAgIG1fc2Nyb2xsYWJsZUFyZWFTaXplID0gc2Nyb2xsYWJsZUFyZWFTaXplOworICAgIHNl
dFByb3BlcnR5Q2hhbmdlZChTY3JvbGxhYmxlQXJlYVNpemUpOwogICAgIG1fc2Nyb2xsaW5nU3Rh
dGVUcmVlLT5zZXRIYXNDaGFuZ2VkUHJvcGVydGllcyh0cnVlKTsKIH0KIApAQCAtMjMzLDkgKzIz
Myw5IEBAIHZvaWQgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpkdW1wUHIKICAgICAgICAg
dHMgPDwgIih2aWV3cG9ydCByZWN0ICIgPDwgbV92aWV3cG9ydFJlY3QueCgpIDw8ICIgIiA8PCBt
X3ZpZXdwb3J0UmVjdC55KCkgPDwgIiAiIDw8IG1fdmlld3BvcnRSZWN0LndpZHRoKCkgPDwgIiAi
IDw8IG1fdmlld3BvcnRSZWN0LmhlaWdodCgpIDw8ICIpXG4iOwogICAgIH0KIAotICAgIGlmICgh
bV9jb250ZW50c1NpemUuaXNFbXB0eSgpKSB7CisgICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhU2l6
ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCArIDEpOwotICAg
ICAgICB0cyA8PCAiKGNvbnRlbnRzIHNpemUgIiA8PCBtX2NvbnRlbnRzU2l6ZS53aWR0aCgpIDw8
ICIgIiA8PCBtX2NvbnRlbnRzU2l6ZS5oZWlnaHQoKSA8PCAiKVxuIjsKKyAgICAgICAgdHMgPDwg
Iihjb250ZW50cyBzaXplICIgPDwgbV9zY3JvbGxhYmxlQXJlYVNpemUud2lkdGgoKSA8PCAiICIg
PDwgbV9zY3JvbGxhYmxlQXJlYVNpemUuaGVpZ2h0KCkgPDwgIilcbiI7CiAgICAgfQogCiAgICAg
aWYgKG1fZnJhbWVTY2FsZUZhY3RvciAhPSAxKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUu
aAkocmV2aXNpb24gMTQ2OTA3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcg
QEAgcHVibGljOgogCiAgICAgZW51bSBDaGFuZ2VkUHJvcGVydHkgewogICAgICAgICBWaWV3cG9y
dFJlY3QgPSBOdW1TdGF0ZU5vZGVCaXRzLAotICAgICAgICBDb250ZW50c1NpemUsCisgICAgICAg
IFNjcm9sbGFibGVBcmVhU2l6ZSwKICAgICAgICAgRnJhbWVTY2FsZUZhY3RvciwKICAgICAgICAg
Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24sCiAgICAgICAgIFdoZWVsRXZlbnRIYW5kbGVyQ291bnQs
CkBAIC02OCw4ICs2OCw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0UmVjdDsgfQogICAgIHZvaWQgc2V0Vmlld3Bv
cnRSZWN0KGNvbnN0IEludFJlY3QmKTsKIAotICAgIGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNTaXplOyB9Ci0gICAgdm9pZCBzZXRDb250ZW50
c1NpemUoY29uc3QgSW50U2l6ZSYpOworICAgIGNvbnN0IEludFNpemUmIHNjcm9sbGFibGVBcmVh
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWFTaXplOyB9CisgICAgdm9pZCBz
ZXRTY3JvbGxhYmxlQXJlYVNpemUoY29uc3QgSW50U2l6ZSYpOwogCiAgICAgZmxvYXQgZnJhbWVT
Y2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVTY2FsZUZhY3RvcjsgfQogICAgIHZv
aWQgc2V0RnJhbWVTY2FsZUZhY3RvcihmbG9hdCk7CkBAIC0xMjYsNyArMTI2LDcgQEAgcHJpdmF0
ZToKICNlbmRpZgogICAgIAogICAgIEludFJlY3QgbV92aWV3cG9ydFJlY3Q7Ci0gICAgSW50U2l6
ZSBtX2NvbnRlbnRzU2l6ZTsKKyAgICBJbnRTaXplIG1fc2Nyb2xsYWJsZUFyZWFTaXplOwogICAg
IAogICAgIGZsb2F0IG1fZnJhbWVTY2FsZUZhY3RvcjsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlLmNwcAkocmV2aXNpb24gMTQ2OTA3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw4
ICs1Niw4IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OnVwZGF0ZUIKICAgICBp
ZiAoc3RhdGUtPmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OlZpZXdwb3J0UmVjdCkpCiAgICAgICAgIG1fdmlld3BvcnRSZWN0ID0gc3RhdGUtPnZpZXdwb3J0
UmVjdCgpOwogCi0gICAgaWYgKHN0YXRlLT5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3Rh
dGVTY3JvbGxpbmdOb2RlOjpDb250ZW50c1NpemUpKQotICAgICAgICBtX2NvbnRlbnRzU2l6ZSA9
IHN0YXRlLT5jb250ZW50c1NpemUoKTsKKyAgICBpZiAoc3RhdGUtPmhhc0NoYW5nZWRQcm9wZXJ0
eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGFibGVBcmVhU2l6ZSkpCisgICAg
ICAgIG1fc2Nyb2xsYWJsZUFyZWFTaXplID0gc3RhdGUtPnNjcm9sbGFibGVBcmVhU2l6ZSgpOwog
CiAgICAgaWYgKHN0YXRlLT5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlOjpGcmFtZVNjYWxlRmFjdG9yKSkKICAgICAgICAgbV9mcmFtZVNjYWxlRmFjdG9yID0g
c3RhdGUtPmZyYW1lU2NhbGVGYWN0b3IoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaAkocmV2
aXNpb24gMTQ2OTA3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgZXhwbGljaXQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUoU2Nyb2xsaW5n
VHJlZSosIFNjcm9sbGluZ05vZGVJRCk7CiAKICAgICBjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0UmVjdDsgfQotICAgIGNvbnN0IEludFNpemUm
IGNvbnRlbnRzU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNTaXplOyB9CisgICAgY29u
c3QgSW50U2l6ZSYgc2Nyb2xsYWJsZUFyZWFTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxh
YmxlQXJlYVNpemU7IH0KIAogICAgIGZsb2F0IGZyYW1lU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJl
dHVybiBtX2ZyYW1lU2NhbGVGYWN0b3I7IH0KIApAQCAtNzUsNyArNzUsNyBAQCBwcm90ZWN0ZWQ6
CiAKIHByaXZhdGU6CiAgICAgSW50UmVjdCBtX3ZpZXdwb3J0UmVjdDsKLSAgICBJbnRTaXplIG1f
Y29udGVudHNTaXplOworICAgIEludFNpemUgbV9zY3JvbGxhYmxlQXJlYVNpemU7CiAgICAgSW50
UG9pbnQgbV9zY3JvbGxPcmlnaW47CiAgICAgCiAgICAgZmxvYXQgbV9mcmFtZVNjYWxlRmFjdG9y
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
bWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmgJKHJldmlzaW9uIDE0NjkwNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAgcHJpdmF0ZToKICAgICAgICAgSW50UG9p
bnQgc2Nyb2xsT3JpZ2luOwogCiAgICAgICAgIEludFJlY3Qgdmlld3BvcnRSZWN0OwotICAgICAg
ICBJbnRTaXplIGNvbnRlbnRzU2l6ZTsKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxhYmxlQXJlYVNp
emU7CiAgICAgICAgIAogICAgICAgICBmbG9hdCBmcmFtZVNjYWxlRmFjdG9yOwogICAgIH07Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0
b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFj
L1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tCShyZXZpc2lvbiAxNDY5MDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
TWFjOjpmcmFtZVZpZXdMCiAKICAgICBzY3JvbGxQYXJhbWV0ZXJzLnNjcm9sbE9yaWdpbiA9IGZy
YW1lVmlldy0+c2Nyb2xsT3JpZ2luKCk7CiAgICAgc2Nyb2xsUGFyYW1ldGVycy52aWV3cG9ydFJl
Y3QgPSBJbnRSZWN0KEludFBvaW50KCksIGZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCku
c2l6ZSgpKTsKLSAgICBzY3JvbGxQYXJhbWV0ZXJzLmNvbnRlbnRzU2l6ZSA9IGZyYW1lVmlldy0+
Y29udGVudHNTaXplKCk7CisgICAgc2Nyb2xsUGFyYW1ldGVycy5zY3JvbGxhYmxlQXJlYVNpemUg
PSBmcmFtZVZpZXctPnNjcm9sbGFibGVBcmVhU2l6ZSgpOwogICAgIHNjcm9sbFBhcmFtZXRlcnMu
ZnJhbWVTY2FsZUZhY3RvciA9IGZyYW1lVmlldy0+ZnJhbWUoKS0+ZnJhbWVTY2FsZUZhY3Rvcigp
OwogCiAgICAgc2V0U2Nyb2xsUGFyYW1ldGVyc0Zvck5vZGUoc2Nyb2xsUGFyYW1ldGVycywgbm9k
ZSk7CkBAIC0yODksNyArMjg5LDcgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0
U2Nyb2xsUAogCiAgICAgbm9kZS0+c2V0U2Nyb2xsT3JpZ2luKHNjcm9sbFBhcmFtZXRlcnMuc2Ny
b2xsT3JpZ2luKTsKICAgICBub2RlLT5zZXRWaWV3cG9ydFJlY3Qoc2Nyb2xsUGFyYW1ldGVycy52
aWV3cG9ydFJlY3QpOwotICAgIG5vZGUtPnNldENvbnRlbnRzU2l6ZShzY3JvbGxQYXJhbWV0ZXJz
LmNvbnRlbnRzU2l6ZSk7CisgICAgbm9kZS0+c2V0U2Nyb2xsYWJsZUFyZWFTaXplKHNjcm9sbFBh
cmFtZXRlcnMuc2Nyb2xsYWJsZUFyZWFTaXplKTsKICAgICBub2RlLT5zZXRGcmFtZVNjYWxlRmFj
dG9yKHNjcm9sbFBhcmFtZXRlcnMuZnJhbWVTY2FsZUZhY3Rvcik7CiAKICAgICBzY2hlZHVsZVRy
ZWVTdGF0ZUNvbW1pdCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFj
L1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5t
bQkocmV2aXNpb24gMTQ2OTA3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFj
L1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEs
NyArMTExLDcgQEAgdm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6dXBkYQogICAg
IGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUtPmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGU6OlJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKSkKICAgICAgICAgc2V0U2Ny
b2xsUG9zaXRpb24oc2Nyb2xsaW5nU3RhdGVOb2RlLT5yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbigp
KTsKIAotICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUtPmhhc0NoYW5nZWRQcm9wZXJ0eShTY3Jv
bGxpbmdTdGF0ZU5vZGU6OlNjcm9sbExheWVyKSB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUtPmhhc0No
YW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OkNvbnRlbnRzU2l6ZSkg
fHwgc2Nyb2xsaW5nU3RhdGVOb2RlLT5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlOjpWaWV3cG9ydFJlY3QpKQorICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUt
Pmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6OlNjcm9sbExheWVyKSB8fCBz
Y3JvbGxpbmdTdGF0ZU5vZGUtPmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGU6OlNjcm9sbGFibGVBcmVhU2l6ZSkgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLT5oYXND
aGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpWaWV3cG9ydFJlY3Qp
KQogICAgICAgICB1cGRhdGVNYWluRnJhbWVQaW5TdGF0ZShzY3JvbGxQb3NpdGlvbigpKTsKIH0K
IApAQCAtMzA1LDcgKzMwNSw3IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6
OnNldFMKICAgICBBU1NFUlQoIXNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5U
aHJlYWQoKSk7CiAgICAgbV9zY3JvbGxMYXllci5nZXQoKS5wb3NpdGlvbiA9IENHUG9pbnRNYWtl
KC1wb3NpdGlvbi54KCkgKyBzY3JvbGxPcmlnaW4oKS54KCksIC1wb3NpdGlvbi55KCkgKyBzY3Jv
bGxPcmlnaW4oKS55KCkpOwogCi0gICAgSW50U2l6ZSBzY3JvbGxPZmZzZXRGb3JGaXhlZENoaWxk
cmVuID0gRnJhbWVWaWV3OjpzY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKHZpZXdwb3J0UmVj
dCgpLCBjb250ZW50c1NpemUoKSwgcG9zaXRpb24sIHNjcm9sbE9yaWdpbigpLCBmcmFtZVNjYWxl
RmFjdG9yKCksIGZhbHNlKTsKKyAgICBJbnRTaXplIHNjcm9sbE9mZnNldEZvckZpeGVkQ2hpbGRy
ZW4gPSBGcmFtZVZpZXc6OnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24odmlld3BvcnRSZWN0
KCksIHNjcm9sbGFibGVBcmVhU2l6ZSgpLCBwb3NpdGlvbiwgc2Nyb2xsT3JpZ2luKCksIGZyYW1l
U2NhbGVGYWN0b3IoKSwgZmFsc2UpOwogICAgIGlmIChtX2NvdW50ZXJTY3JvbGxpbmdMYXllcikK
ICAgICAgICAgbV9jb3VudGVyU2Nyb2xsaW5nTGF5ZXIuZ2V0KCkucG9zaXRpb24gPSBGbG9hdFBv
aW50KHNjcm9sbE9mZnNldEZvckZpeGVkQ2hpbGRyZW4pOwogCkBAIC0zMjcsOCArMzI3LDggQEAg
SW50UG9pbnQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OgogCiBJbnRQb2ludCBTY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QK
IHsKLSAgICBJbnRQb2ludCBwb3NpdGlvbihjb250ZW50c1NpemUoKS53aWR0aCgpIC0gdmlld3Bv
cnRSZWN0KCkud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICBjb250ZW50c1NpemUoKS5o
ZWlnaHQoKSAtIHZpZXdwb3J0UmVjdCgpLmhlaWdodCgpKTsKKyAgICBJbnRQb2ludCBwb3NpdGlv
bihzY3JvbGxhYmxlQXJlYVNpemUoKS53aWR0aCgpIC0gdmlld3BvcnRSZWN0KCkud2lkdGgoKSwK
KyAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYVNpemUoKS5oZWlnaHQoKSAtIHZp
ZXdwb3J0UmVjdCgpLmhlaWdodCgpKTsKIAogICAgIHBvc2l0aW9uLmNsYW1wTmVnYXRpdmVUb1pl
cm8oKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHJldmlz
aW9uIDE0NjkwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMTUsNyArMzE1LDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpzZXRDb250
ZW50c1NpemUoY29uc3QgSQogCiBJbnRQb2ludCBTY3JvbGxWaWV3OjptYXhpbXVtU2Nyb2xsUG9z
aXRpb24oKSBjb25zdAogewotICAgIEludFBvaW50IG1heGltdW1PZmZzZXQoY29udGVudHNXaWR0
aCgpIC0gdmlzaWJsZVdpZHRoKCkgLSBzY3JvbGxPcmlnaW4oKS54KCksIGNvbnRlbnRzSGVpZ2h0
KCkgLSB2aXNpYmxlSGVpZ2h0KCkgLSBzY3JvbGxPcmlnaW4oKS55KCkpOworICAgIEludFBvaW50
IG1heGltdW1PZmZzZXQoY29udGVudHNXaWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkgLSBzY3JvbGxP
cmlnaW4oKS54KCksIHNjcm9sbGFibGVBcmVhU2l6ZSgpLmhlaWdodCgpIC0gdmlzaWJsZUhlaWdo
dCgpIC0gc2Nyb2xsT3JpZ2luKCkueSgpKTsKICAgICBtYXhpbXVtT2Zmc2V0LmNsYW1wTmVnYXRp
dmVUb1plcm8oKTsKICAgICByZXR1cm4gbWF4aW11bU9mZnNldDsKIH0KQEAgLTM1OCw3ICszNTgs
NyBAQCB2b2lkIFNjcm9sbFZpZXc6OnNldFNjcm9sbE9mZnNldChjb25zdCBJCiAgICAgaW50IHZl
cnRpY2FsT2Zmc2V0ID0gb2Zmc2V0LnkoKTsKICAgICBpZiAoY29uc3RyYWluc1Njcm9sbGluZ1Rv
Q29udGVudEVkZ2UoKSkgewogICAgICAgICBob3Jpem9udGFsT2Zmc2V0ID0gbWF4KG1pbihob3Jp
em9udGFsT2Zmc2V0LCBjb250ZW50c1dpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSksIDApOwotICAg
ICAgICB2ZXJ0aWNhbE9mZnNldCA9IG1heChtaW4odmVydGljYWxPZmZzZXQsIGNvbnRlbnRzSGVp
Z2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpLCAwKTsKKyAgICAgICAgdmVydGljYWxPZmZzZXQgPSBt
YXgobWluKHZlcnRpY2FsT2Zmc2V0LCBzY3JvbGxhYmxlQXJlYVNpemUoKS5oZWlnaHQoKSAtIHZp
c2libGVIZWlnaHQoKSksIDApOwogICAgIH0KIAogICAgIEludFNpemUgbmV3T2Zmc2V0ID0gbV9z
Y3JvbGxPZmZzZXQ7CkBAIC00NDMsOCArNDQzLDggQEAgSW50U2l6ZSBTY3JvbGxWaWV3OjpvdmVy
aGFuZ0Ftb3VudCgpIGNvbgogICAgIGludCBwaHlzaWNhbFNjcm9sbFkgPSBzY3JvbGxQb3NpdGlv
bigpLnkoKSArIHNjcm9sbE9yaWdpbigpLnkoKTsKICAgICBpZiAocGh5c2ljYWxTY3JvbGxZIDwg
MCkKICAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQocGh5c2ljYWxTY3JvbGxZKTsKLSAgICBlbHNl
IGlmIChjb250ZW50c0hlaWdodCgpICYmIHBoeXNpY2FsU2Nyb2xsWSA+IGNvbnRlbnRzSGVpZ2h0
KCkgLSB2aXNpYmxlSGVpZ2h0KCkpCi0gICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHBoeXNpY2Fs
U2Nyb2xsWSAtIChjb250ZW50c0hlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKSk7CisgICAgZWxz
ZSBpZiAoc2Nyb2xsYWJsZUFyZWFTaXplKCkuaGVpZ2h0KCkgJiYgcGh5c2ljYWxTY3JvbGxZID4g
c2Nyb2xsYWJsZUFyZWFTaXplKCkuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpCisgICAgICAg
IHN0cmV0Y2guc2V0SGVpZ2h0KHBoeXNpY2FsU2Nyb2xsWSAtIChzY3JvbGxhYmxlQXJlYVNpemUo
KS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkpOwogCiAgICAgaW50IHBoeXNpY2FsU2Nyb2xs
WCA9IHNjcm9sbFBvc2l0aW9uKCkueCgpICsgc2Nyb2xsT3JpZ2luKCkueCgpOwogICAgIGlmIChw
aHlzaWNhbFNjcm9sbFggPCAwKQpAQCAtNTAzLDcgKzUwMyw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6
dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKICAgICB9IGVsc2UgewogICAgICAgICBib29sIHNlbmRD
b250ZW50UmVzaXplZE5vdGlmaWNhdGlvbiA9IGZhbHNlOwogICAgICAgICAKLSAgICAgICAgSW50
U2l6ZSBkb2NTaXplID0gY29udGVudHNTaXplKCk7CisgICAgICAgIEludFNpemUgZG9jU2l6ZSA9
IHNjcm9sbGFibGVBcmVhU2l6ZSgpOwogICAgICAgICBJbnRTaXplIGZ1bGxWaXNpYmxlU2l6ZSA9
IHZpc2libGVDb250ZW50UmVjdChJbmNsdWRlU2Nyb2xsYmFycykuc2l6ZSgpOwogCiAgICAgICAg
IGlmIChoU2Nyb2xsID09IFNjcm9sbGJhckF1dG8pIHsKQEAgLTU0Niw3ICs1NDYsNyBAQCB2b2lk
IFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAgICAgICAgICAgICBtX3VwZGF0
ZVNjcm9sbGJhcnNQYXNzKys7CiAgICAgICAgICAgICBjb250ZW50c1Jlc2l6ZWQoKTsKICAgICAg
ICAgICAgIHZpc2libGVDb250ZW50c1Jlc2l6ZWQoKTsKLSAgICAgICAgICAgIEludFNpemUgbmV3
RG9jU2l6ZSA9IGNvbnRlbnRzU2l6ZSgpOworICAgICAgICAgICAgSW50U2l6ZSBuZXdEb2NTaXpl
ID0gc2Nyb2xsYWJsZUFyZWFTaXplKCk7CiAgICAgICAgICAgICBpZiAobmV3RG9jU2l6ZSA9PSBk
b2NTaXplKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIGxheW91dCB3aXRoIHRoZSBuZXcgc2Ny
b2xsIHN0YXRlIGhhZCBubyBpbXBhY3Qgb24KICAgICAgICAgICAgICAgICAvLyB0aGUgZG9jdW1l
bnQncyBvdmVyYWxsIHNpemUsIHNvIHVwZGF0ZVNjcm9sbGJhcnMgZGlkbid0IGdldCBjYWxsZWQu
CkBAIC01OTksOSArNTk5LDkgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKGNv
bnN0IAogCiAgICAgICAgIGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQogICAgICAgICAgICAg
bV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24odHJ1ZSk7Ci0gICAg
ICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldEVuYWJsZWQoY29udGVudHNIZWlnaHQoKSA+IGNs
aWVudEhlaWdodCk7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldEVuYWJsZWQoc2Ny
b2xsYWJsZUFyZWFTaXplKCkuaGVpZ2h0KCkgPiBjbGllbnRIZWlnaHQpOwogICAgICAgICBtX3Zl
cnRpY2FsU2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCks
IHBhZ2VTdGVwKTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlvbihj
bGllbnRIZWlnaHQsIGNvbnRlbnRzSGVpZ2h0KCkpOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xs
YmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhlaWdodCwgc2Nyb2xsYWJsZUFyZWFTaXplKCkuaGVp
Z2h0KCkpOwogICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkKICAgICAgICAgICAg
IG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsKICAg
ICB9CkBAIC03MzYsNyArNzM2LDggQEAgSW50UG9pbnQgU2Nyb2xsVmlldzo6d2luZG93VG9Db250
ZW50cyhjbwogICAgICAgICByZXR1cm4gY29udmVydEZyb21Db250YWluaW5nV2luZG93KHdpbmRv
d1BvaW50KTsKIAogICAgIEludFBvaW50IHZpZXdQb2ludCA9IGNvbnZlcnRGcm9tQ29udGFpbmlu
Z1dpbmRvdyh3aW5kb3dQb2ludCk7Ci0gICAgcmV0dXJuIHZpZXdQb2ludCArIHNjcm9sbE9mZnNl
dCgpOworICAgIEludFNpemUgb2Zmc2V0SW5Eb2N1bWVudCA9IHNjcm9sbE9mZnNldCgpIC0gSW50
U2l6ZSgwLCBoZWFkZXJIZWlnaHQoKSk7CisgICAgcmV0dXJuIHZpZXdQb2ludCArIG9mZnNldElu
RG9jdW1lbnQ7CiB9CiAKIEludFBvaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzVG9XaW5kb3coY29u
c3QgSW50UG9pbnQmIGNvbnRlbnRzUG9pbnQpIGNvbnN0CkBAIC03NTQsNyArNzU1LDggQEAgSW50
UmVjdCBTY3JvbGxWaWV3Ojp3aW5kb3dUb0NvbnRlbnRzKGNvbgogICAgICAgICByZXR1cm4gY29u
dmVydEZyb21Db250YWluaW5nV2luZG93KHdpbmRvd1JlY3QpOwogCiAgICAgSW50UmVjdCB2aWV3
UmVjdCA9IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyh3aW5kb3dSZWN0KTsKLSAgICB2aWV3
UmVjdC5tb3ZlKHNjcm9sbE9mZnNldCgpKTsKKyAgICBJbnRTaXplIG9mZnNldEluRG9jdW1lbnQg
PSBzY3JvbGxPZmZzZXQoKSAtIEludFNpemUoMCwgaGVhZGVySGVpZ2h0KCkpOworICAgIHZpZXdS
ZWN0Lm1vdmUob2Zmc2V0SW5Eb2N1bWVudCk7CiAgICAgcmV0dXJuIHZpZXdSZWN0OwogfQogCkBA
IC0xMTE2LDggKzExMTgsOCBAQCB2b2lkIFNjcm9sbFZpZXc6OmNhbGN1bGF0ZU92ZXJoYW5nQXJl
YXNGCiAgICAgICAgIGhvcml6b250YWxPdmVyaGFuZ1JlY3QgPSBmcmFtZVJlY3QoKTsKICAgICAg
ICAgaG9yaXpvbnRhbE92ZXJoYW5nUmVjdC5zZXRIZWlnaHQoLXBoeXNpY2FsU2Nyb2xsWSk7CiAg
ICAgICAgIGhvcml6b250YWxPdmVyaGFuZ1JlY3Quc2V0V2lkdGgoaG9yaXpvbnRhbE92ZXJoYW5n
UmVjdC53aWR0aCgpIC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCk7Ci0gICAgfSBlbHNlIGlmIChj
b250ZW50c0hlaWdodCgpICYmIHBoeXNpY2FsU2Nyb2xsWSA+IGNvbnRlbnRzSGVpZ2h0KCkgLSB2
aXNpYmxlSGVpZ2h0KCkpIHsKLSAgICAgICAgaW50IGhlaWdodCA9IHBoeXNpY2FsU2Nyb2xsWSAt
IChjb250ZW50c0hlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKTsKKyAgICB9IGVsc2UgaWYgKHNj
cm9sbGFibGVBcmVhU2l6ZSgpLmhlaWdodCgpICYmIHBoeXNpY2FsU2Nyb2xsWSA+IHNjcm9sbGFi
bGVBcmVhU2l6ZSgpLmhlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKSB7CisgICAgICAgIGludCBo
ZWlnaHQgPSBwaHlzaWNhbFNjcm9sbFkgLSAoc2Nyb2xsYWJsZUFyZWFTaXplKCkuaGVpZ2h0KCkg
LSB2aXNpYmxlSGVpZ2h0KCkpOwogICAgICAgICBob3Jpem9udGFsT3ZlcmhhbmdSZWN0ID0gZnJh
bWVSZWN0KCk7CiAgICAgICAgIGhvcml6b250YWxPdmVyaGFuZ1JlY3Quc2V0WShmcmFtZVJlY3Qo
KS5tYXhZKCkgLSBoZWlnaHQgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KTsKICAgICAgICAg
aG9yaXpvbnRhbE92ZXJoYW5nUmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAJKHJldmlzaW9uIDE0NjkwNykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTEsNiArNTEsOCBAQCBzdHJ1Y3QgU2FtZVNpemVBc1Njcm9sbGFibGVBcmVhIHsKICAg
ICB2aXJ0dWFsIH5TYW1lU2l6ZUFzU2Nyb2xsYWJsZUFyZWEoKTsKICAgICB2b2lkKiBwb2ludGVy
OwogICAgIHVuc2lnbmVkIGJpdGZpZWxkcyA6IDE2OworICAgIHVuc2lnbmVkIGhlYWRlckhlaWdo
dDsKKyAgICB1bnNpZ25lZCBmb290ZXJIZWlnaHQ7CiAgICAgSW50UG9pbnQgb3JpZ2luOwogfTsK
IApAQCAtNjMsNiArNjUsOCBAQCBTY3JvbGxhYmxlQXJlYTo6U2Nyb2xsYWJsZUFyZWEoKQogICAg
ICwgbV9ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSkKICAg
ICAsIG1fc2Nyb2xsYmFyT3ZlcmxheVN0eWxlKFNjcm9sbGJhck92ZXJsYXlTdHlsZURlZmF1bHQp
CiAgICAgLCBtX3Njcm9sbE9yaWdpbkNoYW5nZWQoZmFsc2UpCisgICAgLCBtX2hlYWRlckhlaWdo
dCgwKQorICAgICwgbV9mb290ZXJIZWlnaHQoMCkKIHsKIH0KIApAQCAtNDAwLDcgKzQwNCwxNCBA
QCBJbnRQb2ludCBTY3JvbGxhYmxlQXJlYTo6bWluaW11bVNjcm9sbFBvCiAKIEludFBvaW50IFNj
cm9sbGFibGVBcmVhOjptYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAogewotICAgIHJldHVy
biBJbnRQb2ludChjb250ZW50c1NpemUoKS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCksIGNvbnRl
bnRzU2l6ZSgpLmhlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKTsKKyAgICByZXR1cm4gSW50UG9p
bnQoc2Nyb2xsYWJsZUFyZWFTaXplKCkud2lkdGgoKSAtIHZpc2libGVXaWR0aCgpLCBzY3JvbGxh
YmxlQXJlYVNpemUoKS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSk7Cit9CisKK0ludFNpemUg
U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGFibGVBcmVhU2l6ZSgpIGNvbnN0Cit7CisgICAgSW50U2l6
ZSBzY3JvbGxhYmxlQXJlYVNpemUgPSBjb250ZW50c1NpemUoKTsKKyAgICBzY3JvbGxhYmxlQXJl
YVNpemUuc2V0SGVpZ2h0KHNjcm9sbGFibGVBcmVhU2l6ZS5oZWlnaHQoKSArIGhlYWRlckhlaWdo
dCgpICsgZm9vdGVySGVpZ2h0KCkpOworICAgIHJldHVybiBzY3JvbGxhYmxlQXJlYVNpemU7CiB9
CiAKIEludFJlY3QgU2Nyb2xsYWJsZUFyZWE6OnZpc2libGVDb250ZW50UmVjdChWaXNpYmxlQ29u
dGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Nyb2xsYmFySW5jbHVzaW9uKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCShyZXZpc2lvbiAxNDY5
MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDcsNiArMTQ3LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEludFNpemUg
b3ZlcmhhbmdBbW91bnQoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKCk7IH0KICAgICB2aXJ0dWFs
IEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBJbnRQb2lu
dCgpOyB9CiAKKyAgICB1bnNpZ25lZCBoZWFkZXJIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hl
YWRlckhlaWdodDsgfQorICAgIHZvaWQgc2V0SGVhZGVySGVpZ2h0KHVuc2lnbmVkIGhlYWRlckhl
aWdodCkgeyBtX2hlYWRlckhlaWdodCA9IGhlYWRlckhlaWdodDsgfQorICAgIHVuc2lnbmVkIGZv
b3RlckhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9vdGVySGVpZ2h0OyB9CisgICAgdm9pZCBz
ZXRGb290ZXJIZWlnaHQodW5zaWduZWQgZm9vdGVySGVpZ2h0KSB7IG1fZm9vdGVySGVpZ2h0ID0g
Zm9vdGVySGVpZ2h0OyB9CisKKyAgICAvLyBUaGUgc2Nyb2xsYWJsZUFyZWFTaXplKCkgaXMgZXF1
aXZhbGVudCB0byB0aGUgY29udGVudHNTaXplKCkgcGx1cyB0aGUgaGVhZGVyIGFuZCBmb290ZXIg
aGVpZ2h0cy4KKyAgICBJbnRTaXplIHNjcm9sbGFibGVBcmVhU2l6ZSgpIGNvbnN0OworCiAgICAg
dmlydHVhbCBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxiYXJTdHlsZUNoYW5nZWQoaW50IC8q
bmV3U3R5bGUqLywgYm9vbCAvKmZvcmNlVXBkYXRlKi8pIHsgfQogICAgIHZpcnR1YWwgdm9pZCBz
ZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QoY29uc3QgSW50UmVjdCYpIHsgfQpAQCAtMjI5LDYg
KzIzNyw5IEBAIHByaXZhdGU6CiAKICAgICB1bnNpZ25lZCBtX3Njcm9sbE9yaWdpbkNoYW5nZWQg
OiAxOwogCisgICAgdW5zaWduZWQgbV9oZWFkZXJIZWlnaHQ7CisgICAgdW5zaWduZWQgbV9mb290
ZXJIZWlnaHQ7CisKICAgICAvLyBUaGVyZSBhcmUgOCBwb3NzaWJsZSBjb21iaW5hdGlvbnMgb2Yg
d3JpdGluZyBtb2RlIGFuZCBkaXJlY3Rpb24uIFNjcm9sbCBvcmlnaW4gd2lsbCBiZSBub24temVy
byBpbiB0aGUgeCBvciB5IGF4aXMKICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgcmV2ZXJzZWQgZGly
ZWN0aW9uIG9yIHdyaXRpbmctbW9kZS4gVGhlIGNvbWJpbmF0aW9ucyBhcmU6CiAgICAgLy8gd3Jp
dGluZy1tb2RlIC8gZGlyZWN0aW9uICAgICBzY3JvbGxPcmlnaW4ueCgpIHNldCAgICBzY3JvbGxP
cmlnaW4ueSgpIHNldApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFu
aW1hdG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9T
Y3JvbGxBbmltYXRvck1hYy5tbQkocmV2aXNpb24gMTQ2OTA3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03MDYs
OCArNzA2LDggQEAgRmxvYXRQb2ludCBTY3JvbGxBbmltYXRvck1hYzo6YWRqdXN0U2NybwogICAg
IGlmICghbV9zY3JvbGxhYmxlQXJlYS0+Y29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2Uo
KSkKICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwogCi0gICAgZmxvYXQgbmV3WCA9IG1heDxmbG9h
dD4obWluPGZsb2F0Pihwb3NpdGlvbi54KCksIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6
ZSgpLndpZHRoKCkgLSBtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlV2lkdGgoKSksIDApOwotICAg
IGZsb2F0IG5ld1kgPSBtYXg8ZmxvYXQ+KG1pbjxmbG9hdD4ocG9zaXRpb24ueSgpLCBtX3Njcm9s
bGFibGVBcmVhLT5jb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZp
c2libGVIZWlnaHQoKSksIDApOworICAgIGZsb2F0IG5ld1ggPSBtYXg8ZmxvYXQ+KG1pbjxmbG9h
dD4ocG9zaXRpb24ueCgpLCBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxhYmxlQXJlYVNpemUoKS53
aWR0aCgpIC0gbV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZVdpZHRoKCkpLCAwKTsKKyAgICBmbG9h
dCBuZXdZID0gbWF4PGZsb2F0PihtaW48ZmxvYXQ+KHBvc2l0aW9uLnkoKSwgbV9zY3JvbGxhYmxl
QXJlYS0+c2Nyb2xsYWJsZUFyZWFTaXplKCkuaGVpZ2h0KCkgLSBtX3Njcm9sbGFibGVBcmVhLT52
aXNpYmxlSGVpZ2h0KCkpLCAwKTsKIAogICAgIHJldHVybiBGbG9hdFBvaW50KG5ld1gsIG5ld1kp
OwogfQpAQCAtMTA1Miw3ICsxMDUyLDcgQEAgYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6cGlubmVk
SW5EaXJlY3RpbwogICAgICAgICAgICAgbGltaXREZWx0YS5zZXRIZWlnaHQobV9zY3JvbGxhYmxl
QXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkueSgpICsgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3Jv
bGxPcmlnaW4oKS55KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gV2UgYXJl
IHRyeWluZyB0byBzY3JvbGwgZG93bi4gIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0
aGUgYm90dG9tCi0gICAgICAgICAgICBsaW1pdERlbHRhLnNldEhlaWdodChtX3Njcm9sbGFibGVB
cmVhLT5jb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIChtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxl
Q29udGVudFJlY3QoKS5tYXhZKCkgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmlnaW4oKS55
KCkpKTsKKyAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0SGVpZ2h0KG1fc2Nyb2xsYWJsZUFyZWEt
PnNjcm9sbGFibGVBcmVhU2l6ZSgpLmhlaWdodCgpIC0gKG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2li
bGVDb250ZW50UmVjdCgpLm1heFkoKSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigp
LnkoKSkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChkZWx0YVggIT0gMCkgewogICAgICAg
ICBpZiAoZGVsdGFYIDwgMCkgewpAQCAtMTA2MCw3ICsxMDYwLDcgQEAgYm9vbCBTY3JvbGxBbmlt
YXRvck1hYzo6cGlubmVkSW5EaXJlY3RpbwogICAgICAgICAgICAgbGltaXREZWx0YS5zZXRXaWR0
aChtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVudFJlY3QoKS54KCkgKyBtX3Njcm9sbGFi
bGVBcmVhLT5zY3JvbGxPcmlnaW4oKS54KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwgcmlnaHQuICBNYWtlIHN1cmUgd2UgYXJlIG5v
dCBwaW5uZWQgdG8gdGhlIHJpZ2h0Ci0gICAgICAgICAgICBsaW1pdERlbHRhLnNldFdpZHRoKG1f
c2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgpLndpZHRoKCkgLSAobV9zY3JvbGxhYmxlQXJl
YS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkubWF4WCgpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xs
T3JpZ2luKCkueCgpKSk7CisgICAgICAgICAgICBsaW1pdERlbHRhLnNldFdpZHRoKG1fc2Nyb2xs
YWJsZUFyZWEtPnNjcm9sbGFibGVBcmVhU2l6ZSgpLndpZHRoKCkgLSAobV9zY3JvbGxhYmxlQXJl
YS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkubWF4WCgpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xs
T3JpZ2luKCkueCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCShyZXZpc2lvbiAxNDY5MDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU2Nyw3
ICs1NjcsNyBAQCBOU1ZpZXcgKlRoZW1lTWFjOjplbnN1cmVkVmlldyhTY3JvbGxWaWV3CiAgICAg
CiAgICAgLy8gVXNlIGEgZmFrZSBmbGlwcGVkIHZpZXcuCiAgICAgc3RhdGljIE5TVmlldyAqZmxp
cHBlZFZpZXcgPSBbW1dlYkNvcmVGbGlwcGVkVmlldyBhbGxvY10gaW5pdF07Ci0gICAgW2ZsaXBw
ZWRWaWV3IHNldEZyYW1lU2l6ZTpOU1NpemVGcm9tQ0dTaXplKHNjcm9sbFZpZXctPmNvbnRlbnRz
U2l6ZSgpKV07CisgICAgW2ZsaXBwZWRWaWV3IHNldEZyYW1lU2l6ZTpOU1NpemVGcm9tQ0dTaXpl
KHNjcm9sbFZpZXctPnNjcm9sbGFibGVBcmVhU2l6ZSgpKV07CiAKICAgICByZXR1cm4gZmxpcHBl
ZFZpZXc7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmNwcAkocmV2aXNpb24gMTQ2OTA3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
NzcsNyArMTU3Nyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVSb290TGEK
ICAgICBpZiAobV9yb290Q29udGVudExheWVyKSB7CiAgICAgICAgIGNvbnN0IEludFJlY3QmIGRv
Y3VtZW50UmVjdCA9IG1fcmVuZGVyVmlldy0+ZG9jdW1lbnRSZWN0KCk7CiAgICAgICAgIG1fcm9v
dENvbnRlbnRMYXllci0+c2V0U2l6ZShkb2N1bWVudFJlY3Quc2l6ZSgpKTsKLSAgICAgICAgbV9y
b290Q29udGVudExheWVyLT5zZXRQb3NpdGlvbihkb2N1bWVudFJlY3QubG9jYXRpb24oKSk7Cisg
ICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChkb2N1bWVu
dFJlY3QueCgpLCBkb2N1bWVudFJlY3QueSgpICsgbV9yZW5kZXJWaWV3LT5mcmFtZVZpZXcoKS0+
aGVhZGVySGVpZ2h0KCkpKTsKICAgICB9CiAgICAgaWYgKG1fY2xpcExheWVyKSB7CiAgICAgICAg
IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9yZW5kZXJWaWV3LT5mcmFtZVZpZXcoKTsKQEAgLTE1
OTcsNiArMTU5Nyw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVSb290TGEK
IAogICAgIHVwZGF0ZUxheWVyRm9yVG9wT3ZlcmhhbmdBcmVhKG1fbGF5ZXJGb3JUb3BPdmVyaGFu
Z0FyZWEpOwogICAgIHVwZGF0ZUxheWVyRm9yQm90dG9tT3ZlcmhhbmdBcmVhKG1fbGF5ZXJGb3JC
b3R0b21PdmVyaGFuZ0FyZWEpOworICAgIHVwZGF0ZUxheWVyRm9ySGVhZGVyKG1fbGF5ZXJGb3JI
ZWFkZXIpOworICAgIHVwZGF0ZUxheWVyRm9yRm9vdGVyKG1fbGF5ZXJGb3JGb290ZXIpOwogI2Vu
ZGlmCiB9CiAKQEAgLTI0ODUsMTAgKzI0ODcsNjAgQEAgR3JhcGhpY3NMYXllciogUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjp1cAogICAgICAgICBtX3Njcm9sbExheWVyLT5hZGRDaGlsZEJlbG93KG1f
bGF5ZXJGb3JCb3R0b21PdmVyaGFuZ0FyZWEuZ2V0KCksIG1fcm9vdENvbnRlbnRMYXllci5nZXQo
KSk7CiAgICAgfQogCi0gICAgbV9sYXllckZvckJvdHRvbU92ZXJoYW5nQXJlYS0+c2V0UG9zaXRp
b24oRmxvYXRQb2ludCgwLCBtX3Jvb3RDb250ZW50TGF5ZXItPnNpemUoKS5oZWlnaHQoKSkpOwor
ICAgIG1fbGF5ZXJGb3JCb3R0b21PdmVyaGFuZ0FyZWEtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQo
MCwgbV9yb290Q29udGVudExheWVyLT5zaXplKCkuaGVpZ2h0KCkgKyBtX3JlbmRlclZpZXctPmZy
YW1lVmlldygpLT5mb290ZXJIZWlnaHQoKSArIG1fcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCktPmhl
YWRlckhlaWdodCgpKSk7CiAgICAgcmV0dXJuIG1fbGF5ZXJGb3JCb3R0b21PdmVyaGFuZ0FyZWEu
Z2V0KCk7CiB9CiAKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRl
TGF5ZXJGb3JIZWFkZXIoYm9vbCB3YW50c0xheWVyKQoreworICAgIGlmIChtX3JlbmRlclZpZXct
PmRvY3VtZW50KCktPm93bmVyRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlm
ICghd2FudHNMYXllcikgeworICAgICAgICBpZiAobV9sYXllckZvckhlYWRlcikgeworICAgICAg
ICAgICAgbV9sYXllckZvckhlYWRlci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgICAgICAgICAg
bV9sYXllckZvckhlYWRlciA9IG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgaWYgKCFtX2xheWVyRm9ySGVhZGVyKSB7CisgICAgICAgIG1fbGF5ZXJG
b3JIZWFkZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUoZ3JhcGhpY3NMYXllckZhY3RvcnkoKSwg
dGhpcyk7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBtX2xheWVyRm9ySGVhZGVyLT5zZXROYW1l
KCJoZWFkZXIiKTsKKyNlbmRpZgorICAgICAgICBtX3Njcm9sbExheWVyLT5hZGRDaGlsZEJlbG93
KG1fbGF5ZXJGb3JIZWFkZXIuZ2V0KCksIG1fcm9vdENvbnRlbnRMYXllci5nZXQoKSk7CisgICAg
fQorCisgICAgbV9sYXllckZvckhlYWRlci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgwLCAwKSk7
CisgICAgcmV0dXJuIG1fbGF5ZXJGb3JIZWFkZXIuZ2V0KCk7Cit9CisKK0dyYXBoaWNzTGF5ZXIq
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlTGF5ZXJGb3JGb290ZXIoYm9vbCB3YW50c0xh
eWVyKQoreworICAgIGlmIChtX3JlbmRlclZpZXctPmRvY3VtZW50KCktPm93bmVyRWxlbWVudCgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghd2FudHNMYXllcikgeworICAgICAgICBp
ZiAobV9sYXllckZvckZvb3RlcikgeworICAgICAgICAgICAgbV9sYXllckZvckZvb3Rlci0+cmVt
b3ZlRnJvbVBhcmVudCgpOworICAgICAgICAgICAgbV9sYXllckZvckZvb3RlciA9IG51bGxwdHI7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCFtX2xheWVy
Rm9yRm9vdGVyKSB7CisgICAgICAgIG1fbGF5ZXJGb3JGb290ZXIgPSBHcmFwaGljc0xheWVyOjpj
cmVhdGUoZ3JhcGhpY3NMYXllckZhY3RvcnkoKSwgdGhpcyk7CisjaWZuZGVmIE5ERUJVRworICAg
ICAgICBtX2xheWVyRm9yRm9vdGVyLT5zZXROYW1lKCJmb290ZXIiKTsKKyNlbmRpZgorICAgICAg
ICBtX3Njcm9sbExheWVyLT5hZGRDaGlsZEJlbG93KG1fbGF5ZXJGb3JGb290ZXIuZ2V0KCksIG1f
cm9vdENvbnRlbnRMYXllci5nZXQoKSk7CisgICAgfQorCisgICAgbV9sYXllckZvckZvb3Rlci0+
c2V0UG9zaXRpb24oRmxvYXRQb2ludCgwLCBtX3Jvb3RDb250ZW50TGF5ZXItPnNpemUoKS5oZWln
aHQoKSArIG1fcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCktPmhlYWRlckhlaWdodCgpKSk7CisgICAg
cmV0dXJuIG1fbGF5ZXJGb3JGb290ZXIuZ2V0KCk7Cit9CisKICNlbmRpZgogCiBib29sIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6dmlld0hhc1RyYW5zcGFyZW50QmFja2dyb3VuZChDb2xvciogYmFj
a2dyb3VuZENvbG9yKSBjb25zdApAQCAtMjk0Niw3ICsyOTk4LDcgQEAgRml4ZWRQb3NpdGlvblZp
ZXdwb3J0Q29uc3RyYWludHMgUmVuZGVyTAogCiAgICAgY29uc3RyYWludHMuc2V0TGF5ZXJQb3Np
dGlvbkF0TGFzdExheW91dChncmFwaGljc0xheWVyLT5wb3NpdGlvbigpKTsKICAgICBjb25zdHJh
aW50cy5zZXRWaWV3cG9ydFJlY3RBdExhc3RMYXlvdXQodmlld3BvcnRSZWN0KTsKLSAgICAgICAg
CisKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBsYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKTsK
ICAgICBpZiAoIXN0eWxlLT5sZWZ0KCkuaXNBdXRvKCkpCiAgICAgICAgIGNvbnN0cmFpbnRzLmFk
ZEFuY2hvckVkZ2UoVmlld3BvcnRDb25zdHJhaW50czo6QW5jaG9yRWRnZUxlZnQpOwpAQCAtMzEw
MCw2ICszMTUyLDggQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcG9ydE1lbW9yeQog
ICAgIGluZm8uYWRkTWVtYmVyKG1fY29udGVudFNoYWRvd0xheWVyLCAiY29udGVudFNoYWRvd0xh
eWVyIik7CiAgICAgaW5mby5hZGRNZW1iZXIobV9sYXllckZvclRvcE92ZXJoYW5nQXJlYSwgImxh
eWVyRm9yVG9wT3ZlcmhhbmdBcmVhIik7CiAgICAgaW5mby5hZGRNZW1iZXIobV9sYXllckZvckJv
dHRvbU92ZXJoYW5nQXJlYSwgImxheWVyRm9yQm90dG9tT3ZlcmhhbmdBcmVhIik7CisgICAgaW5m
by5hZGRNZW1iZXIobV9sYXllckZvckhlYWRlciwgImxheWVyRm9ySGVhZGVyIik7CisgICAgaW5m
by5hZGRNZW1iZXIobV9sYXllckZvckZvb3RlciwgImxheWVyRm9yRm9vdGVyIik7CiAjZW5kaWYK
ICAgICBpbmZvLmFkZE1lbWJlcihtX2xheWVyVXBkYXRlciwgImxheWVyVXBkYXRlciIpOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuaAkocmV2aXNpb24gMTQ2OTA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTksNiArMjU5LDggQEAgcHVi
bGljOgogCiAgICAgR3JhcGhpY3NMYXllciogdXBkYXRlTGF5ZXJGb3JUb3BPdmVyaGFuZ0FyZWEo
Ym9vbCB3YW50c0xheWVyKTsKICAgICBHcmFwaGljc0xheWVyKiB1cGRhdGVMYXllckZvckJvdHRv
bU92ZXJoYW5nQXJlYShib29sIHdhbnRzTGF5ZXIpOworICAgIEdyYXBoaWNzTGF5ZXIqIHVwZGF0
ZUxheWVyRm9ySGVhZGVyKGJvb2wgd2FudHNMYXllcik7CisgICAgR3JhcGhpY3NMYXllciogdXBk
YXRlTGF5ZXJGb3JGb290ZXIoYm9vbCB3YW50c0xheWVyKTsKICNlbmRpZgogCiAgICAgdm9pZCB1
cGRhdGVWaWV3cG9ydENvbnN0cmFpbnRTdGF0dXMoUmVuZGVyTGF5ZXIqKTsKQEAgLTQzMyw2ICs0
MzUsOCBAQCBwcml2YXRlOgogICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBtX2NvbnRlbnRTaGFk
b3dMYXllcjsKICAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9sYXllckZvclRvcE92ZXJoYW5n
QXJlYTsKICAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9sYXllckZvckJvdHRvbU92ZXJoYW5n
QXJlYTsKKyAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9sYXllckZvckhlYWRlcjsKKyAgICBP
d25QdHI8R3JhcGhpY3NMYXllcj4gbV9sYXllckZvckZvb3RlcjsKICNlbmRpZgogCiAgICAgT3du
UHRyPEdyYXBoaWNzTGF5ZXJVcGRhdGVyPiBtX2xheWVyVXBkYXRlcjsgLy8gVXBkYXRlcyB0aWxl
ZCBsYXllciB2aXNpYmxlIGFyZWEgcGVyaW9kaWNhbGx5IHdoaWxlIGFuaW1hdGlvbnMgYXJlIHJ1
bm5pbmcuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDY5NDQpCisrKyBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMyBAQAorMjAxMy0wMy0yNiAg
QmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTmVlZCBXSzIgQVBJIHRv
IGdpdmUgYSBXZWJWaWV3IGEgaGVhZGVyIGFuZCBmb290ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzM1MgorICAgICAgICAtYW5kIGNvcnJlc3Bv
bmRpbmctCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzM4MzgzNT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgQVBJIGFsbG93cyBzZXR0aW5n
IGFuZCBnZXR0aW5nIGxheWVycyBmb3IgYSBoZWFkZXIgYW5kIGZvb3Rlci4KKworICAgICAgICAq
IFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9jL21hYzogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvYy9tYWMvV0tCdW5kbGVQYWdlUHJpdmF0ZU1hYy5oOiBBZGRlZC4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL21hYy9XS0J1bmRsZVBh
Z2VQcml2YXRlTWFjLm1tOiBBZGRlZC4KKyAgICAgICAgKFdLQnVuZGxlUGFnZUdldEhlYWRlckxh
eWVyKToKKyAgICAgICAgKFdLQnVuZGxlUGFnZVNldEhlYWRlckxheWVyKToKKyAgICAgICAgKFdL
QnVuZGxlUGFnZUdldEZvb3RlckxheWVyKToKKyAgICAgICAgKFdLQnVuZGxlUGFnZVNldEZvb3Rl
ckxheWVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAg
ICAoV2ViUGFnZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFj
Lm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZXRUb3BPdmVyaGFuZ0ltYWdlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0Qm90dG9tT3ZlcmhhbmdJbWFnZSk6CisgICAgICAg
IChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRIZWFkZXJMYXllcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldEhlYWRlckxheWVyKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6Z2V0Rm9vdGVyTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpz
ZXRGb290ZXJMYXllcik6CisKIDIwMTMtMDMtMjYgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBh
cHBsZS5jb20+CiAKICAgICAgICAgRm9sbG93LXVwIHRvOgpJbmRleDogU291cmNlL1dlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTQ2OTA3
KQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC01ODAsNiArNTgwLDggQEAKIAkJOTM5MUYyQ0ExMjFCNjc5QTAwRUJG
N0U4IC8qIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzkxRjI4NDEyMUIzOEY1MDBFQkY3RTggLyogV2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbSAqLzsgfTsKIAkJOTM5MUYyQ0IxMjFCNjdBRDAwRUJG
N0U4IC8qIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzOTFGMjgzMTIxQjM4RjUwMEVCRjdFOCAvKiBXZWJG
cmFtZU5ldHdvcmtpbmdDb250ZXh0LmggKi87IH07CiAJCTkzOUFFNzY2MTMxNkU5OUMwMEFFMDZB
NiAvKiBXZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTM5QUU3NjUxMzE2RTk5QzAwQUUwNkE2IC8qIFdlYkNvcmVB
cmd1bWVudENvZGVycy5jcHAgKi87IH07CisJCTkzQkQ3MTM3MTcwMTM1OTAwMEFDQUYzOSAvKiBX
S0J1bmRsZVBhZ2VQcml2YXRlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTNCRDcxMzUxNzAxMzU5MDAwQUNBRjM5IC8qIFdLQnVuZGxlUGFnZVBy
aXZhdGVNYWMubW0gKi87IH07CisJCTkzQkQ3MTM4MTcwMTM1OTAwMEFDQUYzOSAvKiBXS0J1bmRs
ZVBhZ2VQcml2YXRlTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5M0JENzEzNjE3MDEzNTkwMDBBQ0FGMzkgLyogV0tCdW5kbGVQYWdlUHJpdmF0ZU1h
Yy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkz
RkM2N0JEMTJEM0NDRjIwMEE2MDYxMCAvKiBEZWNvZGVyQWRhcHRlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0ZDNjc5RDEyRDNDQzc0MDBBNjA2
MTAgLyogRGVjb2RlckFkYXB0ZXIuY3BwICovOyB9OwogCQk5M0ZDNjdCRTEyRDNDQ0YyMDBBNjA2
MTAgLyogRGVjb2RlckFkYXB0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzRkM2NzlFMTJEM0NDNzQwMEE2MDYxMCAvKiBEZWNvZGVyQWRhcHRlci5o
ICovOyB9OwogCQk5M0ZDNjdCRjEyRDNDQ0YyMDBBNjA2MTAgLyogRW5jb2RlckFkYXB0ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGQzY3OUYx
MkQzQ0M3NDAwQTYwNjEwIC8qIEVuY29kZXJBZGFwdGVyLmNwcCAqLzsgfTsKQEAgLTE5OTYsNiAr
MTk5OCw4IEBACiAJCTkzOTFGMjgzMTIxQjM4RjUwMEVCRjdFOCAvKiBXZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM5MUYyODQx
MjFCMzhGNTAwRUJGN0U4IC8qIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzlBRTc2NTEzMTZFOTlDMDBBRTA2
QTYgLyogV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYkNvcmVBcmd1bWVudENvZGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTkzQkQ3MTM1MTcwMTM1OTAwMEFDQUYzOSAvKiBXS0J1bmRsZVBhZ2VQcml2
YXRlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tCdW5k
bGVQYWdlUHJpdmF0ZU1hYy5tbTsgcGF0aCA9IG1hYy9XS0J1bmRsZVBhZ2VQcml2YXRlTWFjLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0JENzEzNjE3MDEzNTkwMDBBQ0FGMzkg
LyogV0tCdW5kbGVQYWdlUHJpdmF0ZU1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBXS0J1bmRsZVBhZ2VQcml2YXRlTWFjLmg7IHBhdGggPSBtYWMvV0tCdW5kbGVQYWdlUHJp
dmF0ZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0ZDNjc5RDEyRDNDQzc0
MDBBNjA2MTAgLyogRGVjb2RlckFkYXB0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGVjb2RlckFkYXB0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5M0ZDNjc5RTEyRDNDQzc0MDBBNjA2MTAgLyogRGVjb2RlckFkYXB0ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVjb2RlckFkYXB0ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTNGQzY3OUYxMkQzQ0M3NDAwQTYwNjEwIC8qIEVuY29kZXJBZGFw
dGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVuY29kZXJBZGFw
dGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQyOTksNiArNDMwMyw4IEBA
CiAJCQkJQkM1RDI0QzYxNkNENzNDNTAwN0Q1NDYxIC8qIFdLQnVuZGxlUmFuZ2VIYW5kbGVQcml2
YXRlLmggKi8sCiAJCQkJQkMxNERGOUMxMjBCNjM1RjAwODI2QzBDIC8qIFdLQnVuZGxlU2NyaXB0
V29ybGQuY3BwICovLAogCQkJCUJDMTRERjlEMTIwQjYzNUYwMDgyNkMwQyAvKiBXS0J1bmRsZVNj
cmlwdFdvcmxkLmggKi8sCisJCQkJOTNCRDcxMzUxNzAxMzU5MDAwQUNBRjM5IC8qIFdLQnVuZGxl
UGFnZVByaXZhdGVNYWMubW0gKi8sCisJCQkJOTNCRDcxMzYxNzAxMzU5MDAwQUNBRjM5IC8qIFdL
QnVuZGxlUGFnZVByaXZhdGVNYWMuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gYzsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC01NjI5LDYgKzU2MzUsNyBAQAogCQkJCUUxNzA4NzcxMTZE
NkNGRTUwMEY5OTIyNiAvKiBCbG9iUmVnaXN0cmF0aW9uRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTE0QTk1NEExNkUwMTZBNDAwNjhERTgyIC8qIE5ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJh
dGVnaWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTc5OEM3QTE2RTY4MTg4MDAyNDAxMzkgLyog
TmV0d29ya0Jsb2JSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNCRDcxMzgxNzAxMzU5
MDAwQUNBRjM5IC8qIFdLQnVuZGxlUGFnZVByaXZhdGVNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
NjgzNiw2ICs2ODQzLDcgQEAKIAkJCQlFMTcwODc3MDE2RDZDRkU1MDBGOTkyMjYgLyogQmxvYlJl
Z2lzdHJhdGlvbkRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE0QTk1NDkxNkUwMTZBNDAw
NjhERTgyIC8qIE5ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUUxNzk4Qzc5MTZFNjgxODgwMDI0MDEzOSAvKiBOZXR3b3JrQmxvYlJlZ2lzdHJ5
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTkzQkQ3MTM3MTcwMTM1OTAwMEFDQUYzOSAvKiBXS0J1
bmRsZVBhZ2VQcml2YXRlTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL21hYy9XS0J1bmRsZVBhZ2VQcml2YXRl
TWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvYy9tYWMvV0tCdW5kbGVQYWdlUHJpdmF0ZU1hYy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9tYWMvV0tCdW5k
bGVQYWdlUHJpdmF0ZU1hYy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBXS0J1bmRsZVBhZ2VQcml2YXRlTWFjX2gKKyNkZWZpbmUgV0tCdW5kbGVQ
YWdlUHJpdmF0ZU1hY19oCisKKyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgorCitAY2xhc3Mg
Q0FMYXllcjsKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitX
S19FWFBPUlQgQ0FMYXllciAqIFdLQnVuZGxlUGFnZUdldEhlYWRlckxheWVyKFdLQnVuZGxlUGFn
ZVJlZiBwYWdlKTsKK1dLX0VYUE9SVCB2b2lkIFdLQnVuZGxlUGFnZVNldEhlYWRlckxheWVyKFdL
QnVuZGxlUGFnZVJlZiBwYWdlLCBDQUxheWVyICpoZWFkZXJMYXllcik7CitXS19FWFBPUlQgQ0FM
YXllciAqIFdLQnVuZGxlUGFnZUdldEZvb3RlckxheWVyKFdLQnVuZGxlUGFnZVJlZiBwYWdlKTsK
K1dLX0VYUE9SVCB2b2lkIFdLQnVuZGxlUGFnZVNldEZvb3RlckxheWVyKFdLQnVuZGxlUGFnZVJl
ZiBwYWdlLCBDQUxheWVyICpmb290ZXJMYXllcik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQor
I2VuZGlmCisKKyNlbmRpZiAvKiBXS0J1bmRsZVBhZ2VQcml2YXRlTWFjX2ggKi8KSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvbWFjL1dLQnVuZGxl
UGFnZVByaXZhdGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9tYWMvV0tCdW5kbGVQYWdlUHJpdmF0ZU1hYy5tbQkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2MvbWFjL1dLQnVuZGxlUGFnZVByaXZhdGVNYWMubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0tCdW5k
bGVQYWdlUHJpdmF0ZU1hYy5oIgorCisjaW5jbHVkZSAiV0tCdW5kbGVBUElDYXN0LmgiCisjaW5j
bHVkZSAiV2ViUGFnZS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitDQUxheWVyICog
V0tCdW5kbGVQYWdlR2V0SGVhZGVyTGF5ZXIoV0tCdW5kbGVQYWdlUmVmIHBhZ2UpCit7CisgICAg
cmV0dXJuIHRvSW1wbChwYWdlKS0+Z2V0SGVhZGVyTGF5ZXIoKTsKK30KKwordm9pZCBXS0J1bmRs
ZVBhZ2VTZXRIZWFkZXJMYXllcihXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgQ0FMYXllciAqaGVhZGVy
TGF5ZXIpCit7CisgICAgdG9JbXBsKHBhZ2UpLT5zZXRIZWFkZXJMYXllcihoZWFkZXJMYXllcik7
Cit9CisKK0NBTGF5ZXIgKiBXS0J1bmRsZVBhZ2VHZXRGb290ZXJMYXllcihXS0J1bmRsZVBhZ2VS
ZWYgcGFnZSkKK3sKKyAgICByZXR1cm4gdG9JbXBsKHBhZ2UpLT5nZXRGb290ZXJMYXllcigpOwor
fQorCit2b2lkIFdLQnVuZGxlUGFnZVNldEZvb3RlckxheWVyKFdLQnVuZGxlUGFnZVJlZiBwYWdl
LCBDQUxheWVyICpmb290ZXJMYXllcikKK3sKKyAgICB0b0ltcGwocGFnZSktPnNldEZvb3Rlckxh
eWVyKGZvb3RlckxheWVyKTsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gMTQ2OTA3KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBA
QAogI2luY2x1ZGUgIkRpY3Rpb25hcnlQb3B1cEluZm8uaCIKICNpbmNsdWRlICJMYXllckhvc3Rp
bmdDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorT0JKQ19DTEFTUyBDQUxh
eWVyOwogT0JKQ19DTEFTUyBOU0RpY3Rpb25hcnk7CiBPQkpDX0NMQVNTIE5TT2JqZWN0OwogT0JK
Q19DTEFTUyBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0OwpAQCAtMzY4LDYgKzM2OSwxMSBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFRvcE92ZXJoYW5nSW1hZ2UoUGFzc1JlZlB0cjxXZWJJ
bWFnZT4pOwogICAgIHZvaWQgc2V0Qm90dG9tT3ZlcmhhbmdJbWFnZShQYXNzUmVmUHRyPFdlYklt
YWdlPik7CisKKyAgICBDQUxheWVyICogZ2V0SGVhZGVyTGF5ZXIoKSBjb25zdDsKKyAgICB2b2lk
IHNldEhlYWRlckxheWVyKENBTGF5ZXIgKik7CisgICAgQ0FMYXllciAqIGdldEZvb3RlckxheWVy
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRGb290ZXJMYXllcihDQUxheWVyICopOwogI2VuZGlmCiAK
ICAgICBib29sIHdpbmRvd0lzRm9jdXNlZCgpIGNvbnN0OwpAQCAtODg0LDYgKzg5MCw5IEBAIHBy
aXZhdGU6CiAKICAgICBSZXRhaW5QdHI8V0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdD4gbV9t
b2NrQWNjZXNzaWJpbGl0eUVsZW1lbnQ7CiAKKyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9oZWFk
ZXJMYXllcjsKKyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9mb290ZXJMYXllcjsKKwogICAgIFdl
YkNvcmU6OktleWJvYXJkRXZlbnQqIG1fa2V5Ym9hcmRFdmVudEJlaW5nSW50ZXJwcmV0ZWQ7CiAK
ICNlbGlmIEhBVkUoQUNDRVNTSUJJTElUWSkgJiYgKFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0o
RUZMKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1dlYlBhZ2VNYWMubW0JKHJldmlzaW9uIDE0NjkwNykKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDMs
NiArNDMsNyBAQAogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNTdG9yZS5oIgogI2ltcG9ydCAiV2Vi
UHJvY2Vzcy5oIgogI2ltcG9ydCA8UERGS2l0L1BERktpdC5oPgorI2ltcG9ydCA8UXVhcnR6Q29y
ZS9RdWFydHpDb3JlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0FYT2JqZWN0Q2FjaGUuaD4KICNpbXBv
cnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+
CkBAIC03OTYsNyArNzk3LDcgQEAgdm9pZCBXZWJQYWdlOjpzZXRUb3BPdmVyaGFuZ0ltYWdlKFBh
c3NSZQogICAgIGxheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDAsIC1pbWFnZS0+c2l6ZSgp
LmhlaWdodCgpKSk7CiAKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY2dJbWFnZSA9IGltYWdl
LT5iaXRtYXAoKS0+bWFrZUNHSW1hZ2VDb3B5KCk7Ci0gICAgbGF5ZXItPnBsYXRmb3JtTGF5ZXIo
KS5jb250ZW50cyA9KGlkKWNnSW1hZ2UuZ2V0KCk7CisgICAgbGF5ZXItPnBsYXRmb3JtTGF5ZXIo
KS5jb250ZW50cyA9IChpZCljZ0ltYWdlLmdldCgpOwogfQogCiB2b2lkIFdlYlBhZ2U6OnNldEJv
dHRvbU92ZXJoYW5nSW1hZ2UoUGFzc1JlZlB0cjxXZWJJbWFnZT4gaW1hZ2UpCkBAIC04MTIsNyAr
ODEzLDUzIEBAIHZvaWQgV2ViUGFnZTo6c2V0Qm90dG9tT3ZlcmhhbmdJbWFnZShQYXMKICAgICBs
YXllci0+c2V0U2l6ZShpbWFnZS0+c2l6ZSgpKTsKICAgICAKICAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gY2dJbWFnZSA9IGltYWdlLT5iaXRtYXAoKS0+bWFrZUNHSW1hZ2VDb3B5KCk7Ci0gICAg
bGF5ZXItPnBsYXRmb3JtTGF5ZXIoKS5jb250ZW50cyA9KGlkKWNnSW1hZ2UuZ2V0KCk7CisgICAg
bGF5ZXItPnBsYXRmb3JtTGF5ZXIoKS5jb250ZW50cyA9IChpZCljZ0ltYWdlLmdldCgpOworfQor
CitDQUxheWVyICogV2ViUGFnZTo6Z2V0SGVhZGVyTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVy
biBtX2hlYWRlckxheWVyLmdldCgpOworfQorCit2b2lkIFdlYlBhZ2U6OnNldEhlYWRlckxheWVy
KENBTGF5ZXIgKmNoaWxkTGF5ZXIpCit7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX21h
aW5GcmFtZS0+Y29yZUZyYW1lKCktPnZpZXcoKTsKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9oZWFkZXJMYXllciA9IGNoaWxkTGF5ZXI7CisgICAgR3JhcGhp
Y3NMYXllciogcGFyZW50TGF5ZXIgPSBmcmFtZVZpZXctPnNldFdhbnRzTGF5ZXJGb3JIZWFkZXIo
bV9oZWFkZXJMYXllcik7CisgICAgaWYgKCFwYXJlbnRMYXllcikgeworICAgICAgICBmcmFtZVZp
ZXctPnNldEhlYWRlckhlaWdodCgwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHBh
cmVudExheWVyLT5zZXRTaXplKEZsb2F0U2l6ZShtX2hlYWRlckxheWVyLmdldCgpLmJvdW5kcy5z
aXplKSk7CisgICAgZnJhbWVWaWV3LT5zZXRIZWFkZXJIZWlnaHQocGFyZW50TGF5ZXItPnNpemUo
KS5oZWlnaHQoKSk7CisgICAgW3BhcmVudExheWVyLT5wbGF0Zm9ybUxheWVyKCkgYWRkU3VibGF5
ZXI6bV9oZWFkZXJMYXllci5nZXQoKV07Cit9CisKK0NBTGF5ZXIgKiBXZWJQYWdlOjpnZXRGb290
ZXJMYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZm9vdGVyTGF5ZXIuZ2V0KCk7Cit9CisK
K3ZvaWQgV2ViUGFnZTo6c2V0Rm9vdGVyTGF5ZXIoQ0FMYXllciAqY2hpbGRMYXllcikKK3sKKyAg
ICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKS0+dmlldygp
OworICAgIGlmICghZnJhbWVWaWV3KSB7CisgICAgICAgIGZyYW1lVmlldy0+c2V0Rm9vdGVySGVp
Z2h0KDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9mb290ZXJMYXllciA9IGNo
aWxkTGF5ZXI7CisgICAgR3JhcGhpY3NMYXllciogcGFyZW50TGF5ZXIgPSBmcmFtZVZpZXctPnNl
dFdhbnRzTGF5ZXJGb3JGb290ZXIobV9mb290ZXJMYXllcik7CisgICAgaWYgKCFwYXJlbnRMYXll
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgcGFyZW50TGF5ZXItPnNldFNpemUoRmxvYXRTaXpl
KG1fZm9vdGVyTGF5ZXIuZ2V0KCkuYm91bmRzLnNpemUpKTsKKyAgICBmcmFtZVZpZXctPnNldEZv
b3RlckhlaWdodChwYXJlbnRMYXllci0+c2l6ZSgpLmhlaWdodCgpKTsKKyAgICBbcGFyZW50TGF5
ZXItPnBsYXRmb3JtTGF5ZXIoKSBhZGRTdWJsYXllcjptX2Zvb3RlckxheWVyLmdldCgpXTsKIH0K
IAogdm9pZCBXZWJQYWdlOjpjb21wdXRlUGFnZXNGb3JQcmludGluZ1BERkRvY3VtZW50KHVpbnQ2
NF90IGZyYW1lSUQsIGNvbnN0IFByaW50SW5mbyYgcHJpbnRJbmZvLCBWZWN0b3I8SW50UmVjdD4m
IHJlc3VsdFBhZ2VSZWN0cykK
</data>
<flag name="review"
          id="217031"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195223</attachid>
            <date>2013-03-26 22:24:13 -0700</date>
            <delta_ts>2013-03-27 13:41:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>50766</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0Njk2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAxMy0wMy0yNiAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTmVlZCBXSzIgQVBJIHRvIGdpdmUg
YSBXZWJWaWV3IGEgaGVhZGVyIGFuZCBmb290ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzM1MgorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmct
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzM4MzgzNT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIEFQSSB3aWxsIHJlcXVpcmUgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yIHRvIGtlZXAgbGF5ZXJzIGZvciB0aGUgaGVhZGVyIGFuZCAKKyAgICAg
ICAgZm9vdGVyIHdoZW4gdGhlIGV4aXN0LiBJdCBhbHNvIHJlcXVpcmVzIHRoZSBzY3JvbGxpbmcg
bWFjaGluZXJ5IHRvIGtub3cgdGhhdCB0aGUgCisgICAgICAgIHNpemUgb2YgdGhlIHNjcm9sbGFi
bGUgYXJlYSB3aWxsIGRpZmZlciBmcm9tIHRoZSBjb250ZW50c1NpemUgd2hlbiB0aGVyZSBpcyBh
IAorICAgICAgICBoZWFkZXIgb3IgZm9vdGVyLgorCisgICAgICAgIHNldFdhbnRzTGF5ZXJGb3JI
ZWFkZXIoKSBhbmQgc2V0V2FudHNMYXllckZvckZvb3RlcigpIHJldHVybiBHcmFwaGljc0xheWVy
cyB0byAKKyAgICAgICAgV0syLiBzZXRIZWFkZXJIZWlnaHQoKSBhbmQgc2V0Rm9vdGVySGVpZ2h0
KCkgc2V0IHRoZSBoZWFkZXIgYW5kIGZvb3RlciBoZWlnaHRzCisgICAgICAgIHJlc3BlY3RpdmVs
eS4KKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5o
OgorICAgICAgICAoRnJhbWVWaWV3KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OkZyYW1lVmlldyk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVZpZXc6OnNldFdhbnRzTGF5ZXJGb3JIZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVWaWV3OjpzZXRXYW50c0xheWVyRm9yRm9vdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6c2V0SGVhZGVySGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6
c2V0Rm9vdGVySGVpZ2h0KToKKworICAgICAgICBTaG91bGQgdXNlIHRvdGFsQ29udGVudHNTaXpl
KCkgaW5zdGVhZCBvZiBjb250ZW50c1NpemUoKS4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmll
dzo6d2luZG93Q2xpcFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojppc1Njcm9s
bGFibGUpOgorICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y2FuU2Nyb2xsSW5EaXJlY3Rpb24pOgorCisgICAgICAgIFRoaXMgc2hvdWxkIGFs
c28gdXNlIHRvdGFsQ29udGVudHNTaXplKCkgaW5zdGVhZCBvZiBjb250ZW50c1NpemUoKSwgYW5k
IHdoaWxlIAorICAgICAgICB3ZSdyZSBhdCBpdCwgcmUtbmFtZSB0aGUgdmFyaWFibGUgYW5kIGZ1
bmN0aW9uIG5hbWVzIGluIHRoZSBzY3JvbGxpbmcgdHJlZSBjb2RlIAorICAgICAgICBmcm9tIGNv
bnRlbnRzU2l6ZSB0byB0b3RhbENvbnRlbnRzU2l6ZS4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRUb3RhbENv
bnRlbnRzU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGU6OmR1bXBQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZTo6dG90YWxDb250ZW50c1NpemUpOgorICAgICAgICAoU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZTo6dXBkYXRlQmVmb3JlQ2hpbGRyZW4pOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZTo6dG90YWxDb250ZW50c1NpemUpOgorICAgICAgICAoU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGUpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxp
bmdDb29yZGluYXRvck1hYy5oOgorICAgICAgICAoU2Nyb2xsUGFyYW1ldGVycyk6CisgICAgICAg
ICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmZyYW1lVmlld0xheW91dFVwZGF0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNldFNjcm9s
bFBhcmFtZXRlcnNGb3JOb2RlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZU1hYzo6dXBkYXRlQWZ0ZXJDaGlsZHJlbik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6c2V0U2Nyb2xsTGF5ZXJQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6bWF4
aW11bVNjcm9sbFBvc2l0aW9uKToKKworICAgICAgICBVc2UgdG90YWxDb250ZW50c1NpemUoKSBp
bnN0ZWFkIG9mIGNvbnRlbnRzU2l6ZSgpLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6bWF4aW11bVNjcm9sbFBvc2l0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldFNjcm9sbE9mZnNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpvdmVyaGFuZ0Ftb3VudCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbFZpZXc6OmNhbGN1bGF0ZU92ZXJoYW5nQXJlYXNGb3JQYWludGluZyk6CisKKyAgICAgICAg
c2Nyb2xsT2Zmc2V0KCkgcmVwcmVzZW50cyB0aGUgb2Zmc2V0IHdpdGhpbiB0aGUgdG90YWxDb250
ZW50c1NpemUsIGJ1dCB0aGF0IGlzIAorICAgICAgICBub3Qgd2hhdCB3ZSBuZWVkIGhlcmUuIFNv
IHN1YnRyYWN0IG91dCB0aGUgaGVhZGVySGVpZ2h0KCkgZm9yIHRoZSBhcHByb3ByaWF0ZSAKKyAg
ICAgICAgdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp3aW5kb3dUb0NvbnRl
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OmNvbnRlbnRzVG9XaW5kb3cpOgor
CisgICAgICAgIFVzZSB0b3RhbENvbnRlbnRzU2l6ZSgpIGluc3RlYWQgb2YgY29udGVudHNTaXpl
KCkuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYWJsZUFyZWE6Om1heGltdW1TY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjp0b3RhbENvbnRlbnRz
U2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGFibGVBcmVhOjpoZWFkZXJIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYWJsZUFyZWE6OmZvb3RlckhlaWdodCk6CisgICAgICAgIChTY3JvbGxhYmxlQXJlYSk6
CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnBpbm5lZEluRGlyZWN0
aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW06CisgICAgICAgIChXZWJD
b3JlOjpUaGVtZU1hYzo6ZW5zdXJlZFZpZXcpOgorCisgICAgICAgIFRoZSByb290Q29udGVudExh
eWVyIG5lZWRzIHRvIGJlIG9mZnNldCBieSB0aGUgaGVhZGVySGVpZ2h0KCkuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVJvb3RMYXllclBvc2l0aW9uKToKKworICAgICAg
ICBOZXcgbWVtYmVyIHZhcmlhYmxlcyBtX2xheWVyRm9ySGVhZGVyIGFuZCBtX2xheWVyRm9yRm9v
dGVyLiBUaGlzIGNvZGUgcHJvcGVybHkgCisgICAgICAgIGNyZWF0ZXMgYW5kIG1hbmFnZXMgdGhl
bS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlTGF5ZXJG
b3JCb3R0b21PdmVyaGFuZ0FyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjp1cGRhdGVMYXllckZvckhlYWRlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlTGF5ZXJGb3JGb290ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlRml4ZWRW
aWV3cG9ydENvbnN0cmFpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9z
aXRvcjo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuaDoKKyAgICAgICAgKFJlbmRlckxheWVyQ29tcG9zaXRvcik6CisKIDIwMTMt
MDMtMjYgIEhheWF0byBJdG8gIDxoYXlhdG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFsbG93
IFNoYWRvd0NvbnRlbnRzIGluIEhpdFRlc3RzIGJ5IGRlZmF1bHQuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgkocmV2aXNpb24gMTQ2OTY0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAu
aW4JKHdvcmtpbmcgY29weSkKQEAgLTMyOSw2ICszMjksOCBAQCBfX1pON1dlYkNvcmUxNExvYWRl
clN0cmF0ZWd5MjVsb2FkUmVzb3VyCiBfX1pON1dlYkNvcmUxNFBsdWdpbkRvY3VtZW50MTBwbHVn
aW5Ob2RlRXYKIF9fWk5LN1dlYkNvcmU1RnJhbWUyNXRyYWNrZWRSZXBhaW50UmVjdHNBc1RleHRF
dgogX19aTjdXZWJDb3JlOUZyYW1lVmlldzEzc2V0Tm9kZVRvRHJhd0VQTlNfNE5vZGVFCitfX1pO
N1dlYkNvcmU5RnJhbWVWaWV3MTVzZXRGb290ZXJIZWlnaHRFaQorX19aTjdXZWJDb3JlOUZyYW1l
VmlldzE1c2V0SGVhZGVySGVpZ2h0RWkKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcxN3NldFRyYWNr
c1JlcGFpbnRzRWIKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcyMHJlc2V0VHJhY2tlZFJlcGFpbnRz
RXYKIF9fWk43V2ViQ29yZTE0UGx1Z2luRG9jdW1lbnQxMnBsdWdpbldpZGdldEV2CkBAIC0xNTcx
LDYgKzE1NzMsOCBAQCBfX1pOSzdXZWJDb3JlOUZyYW1lVmlldzEzcGFpbnRCZWhhdmlvckV2CiBf
X1pOSzdXZWJDb3JlOUZyYW1lVmlldzE0ZGlkRmlyc3RMYXlvdXRFdgogX19aTks3V2ViQ29yZTlG
cmFtZVZpZXcxOWJhc2VCYWNrZ3JvdW5kQ29sb3JFdgogX19aTks3V2ViQ29yZTlGcmFtZVZpZXcy
MGlzU29mdHdhcmVSZW5kZXJhYmxlRXYKK19fWk5LN1dlYkNvcmU5RnJhbWVWaWV3MjJzZXRXYW50
c0xheWVyRm9yRm9vdGVyRWIKK19fWk5LN1dlYkNvcmU5RnJhbWVWaWV3MjJzZXRXYW50c0xheWVy
Rm9ySGVhZGVyRWIKIF9fWk5LN1dlYkNvcmU5RnJhbWVWaWV3MjNkb2N1bWVudEJhY2tncm91bmRD
b2xvckV2CiBfX1pOSzdXZWJDb3JlOUZyYW1lVmlldzI3d2luZG93Q2xpcFJlY3RGb3JGcmFtZU93
bmVyRVBLTlNfMjFIVE1MRnJhbWVPd25lckVsZW1lbnRFYgogX19aTks3V2ViQ29yZTlGcmFtZVZp
ZXcyOGlzRW5jbG9zZWRJbkNvbXBvc2l0aW5nTGF5ZXJFdgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcAkocmV2aXNpb24gMTQ2OTY0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUsNiArMTk1LDggQEAgRnJhbWVWaWV3OjpG
cmFtZVZpZXcoRnJhbWUqIGZyYW1lKQogICAgICwgbV9zaG91bGRBdXRvU2l6ZShmYWxzZSkKICAg
ICAsIG1faW5BdXRvU2l6ZShmYWxzZSkKICAgICAsIG1fZGlkUnVuQXV0b3NpemUoZmFsc2UpCisg
ICAgLCBtX2hlYWRlckhlaWdodCgwKQorICAgICwgbV9mb290ZXJIZWlnaHQoMCkKICNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCiAgICAgLCBtX2hhc1NvZnR3YXJlRmlsdGVycyhmYWxzZSkKICNlbmRp
ZgpAQCAtODg0LDcgKzg4Niw0OCBAQCBHcmFwaGljc0xheWVyKiBGcmFtZVZpZXc6OnNldFdhbnRz
TGF5ZXJGCiAgICAgcmV0dXJuIDA7CiAjZW5kaWYKIH0KKworR3JhcGhpY3NMYXllciogRnJhbWVW
aWV3OjpzZXRXYW50c0xheWVyRm9ySGVhZGVyKGJvb2wgd2FudHNMYXllcikgY29uc3QKK3sKKyAg
ICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gdGhpcy0+cmVuZGVyVmlldygpOworICAgIGlmICgh
cmVuZGVyVmlldykKKyAgICAgICAgcmV0dXJuIDA7CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisgICAgcmV0dXJuIHJlbmRlclZpZXctPmNvbXBvc2l0b3IoKS0+dXBkYXRlTGF5
ZXJGb3JIZWFkZXIod2FudHNMYXllcik7CisjZWxzZQorICAgIHJldHVybiAwOwogI2VuZGlmCit9
CisKK0dyYXBoaWNzTGF5ZXIqIEZyYW1lVmlldzo6c2V0V2FudHNMYXllckZvckZvb3Rlcihib29s
IHdhbnRzTGF5ZXIpIGNvbnN0Cit7CisgICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IHRoaXMt
PnJlbmRlclZpZXcoKTsKKyAgICBpZiAoIXJlbmRlclZpZXcpCisgICAgICAgIHJldHVybiAwOwor
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIHJldHVybiByZW5kZXJWaWV3
LT5jb21wb3NpdG9yKCktPnVwZGF0ZUxheWVyRm9yRm9vdGVyKHdhbnRzTGF5ZXIpOworI2Vsc2UK
KyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCisjZW5kaWYKKwordm9pZCBGcmFtZVZpZXc6OnNl
dEhlYWRlckhlaWdodChpbnQgaGVhZGVySGVpZ2h0KQoreworICAgIGlmIChtX2ZyYW1lICYmIG1f
ZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgQVNTRVJUKG1fZnJhbWUgPT0gbV9mcmFtZS0+cGFnZSgp
LT5tYWluRnJhbWUoKSk7CisgICAgbV9oZWFkZXJIZWlnaHQgPSBoZWFkZXJIZWlnaHQ7Cit9CisK
K3ZvaWQgRnJhbWVWaWV3OjpzZXRGb290ZXJIZWlnaHQoaW50IGZvb3RlckhlaWdodCkKK3sKKyAg
ICBpZiAobV9mcmFtZSAmJiBtX2ZyYW1lLT5wYWdlKCkpCisgICAgICAgIEFTU0VSVChtX2ZyYW1l
ID09IG1fZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpOworICAgIG1fZm9vdGVySGVpZ2h0ID0g
Zm9vdGVySGVpZ2h0OworfQogCiBib29sIEZyYW1lVmlldzo6Zmx1c2hDb21wb3NpdGluZ1N0YXRl
Rm9yVGhpc0ZyYW1lKEZyYW1lKiByb290RnJhbWVGb3JGbHVzaCkKIHsKQEAgLTI4NTIsNyArMjg5
NSw3IEBAIEludFJlY3QgRnJhbWVWaWV3Ojp3aW5kb3dDbGlwUmVjdChib29sIGMKICAgICBBU1NF
UlQobV9mcmFtZS0+dmlldygpID09IHRoaXMpOwogCiAgICAgaWYgKHBhaW50c0VudGlyZUNvbnRl
bnRzKCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIGNvbnRlbnRzU2l6ZSgp
KTsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgdG90YWxDb250ZW50c1NpemUo
KSk7CiAKICAgICAvLyBTZXQgb3VyIGNsaXAgcmVjdCB0byBiZSBvdXIgY29udGVudHMuCiAgICAg
SW50UmVjdCBjbGlwUmVjdCA9IGNvbnRlbnRzVG9XaW5kb3codmlzaWJsZUNvbnRlbnRSZWN0KGNs
aXBUb0NvbnRlbnRzID8gRXhjbHVkZVNjcm9sbGJhcnMgOiBJbmNsdWRlU2Nyb2xsYmFycykpOwpA
QCAtMjk4OSw5ICszMDMyLDkgQEAgYm9vbCBGcmFtZVZpZXc6OmlzU2Nyb2xsYWJsZSgpCiAgICAg
Ly8gNCkgc2Nyb2xsaW5nOiBubzsKIAogICAgIC8vIENvdmVycyAjMQotICAgIEludFNpemUgY29u
dGVudFNpemUgPSBjb250ZW50c1NpemUoKTsKKyAgICBJbnRTaXplIHRvdGFsQ29udGVudHNTaXpl
ID0gdGhpcy0+dG90YWxDb250ZW50c1NpemUoKTsKICAgICBJbnRTaXplIHZpc2libGVDb250ZW50
U2l6ZSA9IHZpc2libGVDb250ZW50UmVjdCgpLnNpemUoKTsKLSAgICBpZiAoKGNvbnRlbnRTaXpl
LmhlaWdodCgpIDw9IHZpc2libGVDb250ZW50U2l6ZS5oZWlnaHQoKSAmJiBjb250ZW50U2l6ZS53
aWR0aCgpIDw9IHZpc2libGVDb250ZW50U2l6ZS53aWR0aCgpKSkKKyAgICBpZiAoKHRvdGFsQ29u
dGVudHNTaXplLmhlaWdodCgpIDw9IHZpc2libGVDb250ZW50U2l6ZS5oZWlnaHQoKSAmJiB0b3Rh
bENvbnRlbnRzU2l6ZS53aWR0aCgpIDw9IHZpc2libGVDb250ZW50U2l6ZS53aWR0aCgpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQ292ZXJzICMyLgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5oCShyZXZpc2lvbiAxNDY5NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MDIsOCArNDAyLDE1IEBAIHB1YmxpYzoKICNp
ZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiAgICAgR3JhcGhpY3NMYXllciogc2V0V2FudHNMYXll
ckZvclRvcE92ZXJIYW5nQXJlYShib29sKSBjb25zdDsKICAgICBHcmFwaGljc0xheWVyKiBzZXRX
YW50c0xheWVyRm9yQm90dG9tT3ZlckhhbmdBcmVhKGJvb2wpIGNvbnN0OworICAgIEdyYXBoaWNz
TGF5ZXIqIHNldFdhbnRzTGF5ZXJGb3JIZWFkZXIoYm9vbCkgY29uc3Q7CisgICAgR3JhcGhpY3NM
YXllciogc2V0V2FudHNMYXllckZvckZvb3Rlcihib29sKSBjb25zdDsKICNlbmRpZgogCisgICAg
dmlydHVhbCBpbnQgaGVhZGVySGVpZ2h0KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9oZWFk
ZXJIZWlnaHQ7IH0KKyAgICB2b2lkIHNldEhlYWRlckhlaWdodChpbnQgaGVhZGVySGVpZ2h0KTsK
KyAgICB2aXJ0dWFsIGludCBmb290ZXJIZWlnaHQoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBt
X2Zvb3RlckhlaWdodDsgfQorICAgIHZvaWQgc2V0Rm9vdGVySGVpZ2h0KGludCBmb290ZXJIZWln
aHQpOworCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHNjcm9sbENvbnRlbnRzRmFzdFBh
dGgoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3QmIHJlY3RUb1Njcm9s
bCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpOwogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxDb250
ZW50c1Nsb3dQYXRoKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpOwpAQCAtNTk1LDYgKzYwMiw5
IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFNjcm9sbGFibGVBcmVhU2V0PiBtX3Njcm9sbGFibGVB
cmVhczsKICAgICBPd25QdHI8Vmlld3BvcnRDb25zdHJhaW5lZE9iamVjdFNldD4gbV92aWV3cG9y
dENvbnN0cmFpbmVkT2JqZWN0czsKIAorICAgIGludCBtX2hlYWRlckhlaWdodDsKKyAgICBpbnQg
bV9mb290ZXJIZWlnaHQ7CisKICAgICBzdGF0aWMgZG91YmxlIHNfbm9ybWFsRGVmZXJyZWRSZXBh
aW50RGVsYXk7CiAgICAgc3RhdGljIGRvdWJsZSBzX2luaXRpYWxEZWZlcnJlZFJlcGFpbnREZWxh
eUR1cmluZ0xvYWRpbmc7CiAgICAgc3RhdGljIGRvdWJsZSBzX21heERlZmVycmVkUmVwYWludERl
bGF5RHVyaW5nTG9hZGluZzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmln
YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmln
YXRpb24uY3BwCShyZXZpc2lvbiAxNDY5NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRp
YWxOYXZpZ2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgzLDcgKzQ4Myw3IEBAIGJvb2wg
Y2FuU2Nyb2xsSW5EaXJlY3Rpb24oY29uc3QgRnJhbWUqIGYKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGlmICgoZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0aW9uVXAgfHwgZGlyZWN0aW9uID09
IEZvY3VzRGlyZWN0aW9uRG93bikgJiYgIFNjcm9sbGJhckFsd2F5c09mZiA9PSB2ZXJ0aWNhbE1v
ZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBMYXlvdXRTaXplIHNpemUgPSBmcmFtZS0+
dmlldygpLT5jb250ZW50c1NpemUoKTsKKyAgICBMYXlvdXRTaXplIHNpemUgPSBmcmFtZS0+dmll
dygpLT50b3RhbENvbnRlbnRzU2l6ZSgpOwogICAgIExheW91dFNpemUgb2Zmc2V0ID0gZnJhbWUt
PnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCk7CiAgICAgTGF5b3V0UmVjdCByZWN0ID0gZnJhbWUtPnZp
ZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KFNjcm9sbGFibGVBcmVhOjpJbmNsdWRlU2Nyb2xsYmFy
cyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcAkocmV2aXNpb24gMTQ2OTY0KQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGU6OlNjcm9sbGluZ1N0CiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZShjb25zdCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGUmIHN0YXRlTm9kZSkKICAgICA6IFNjcm9sbGluZ1N0YXRlTm9kZShzdGF0ZU5vZGUpCiAgICAg
LCBtX3ZpZXdwb3J0UmVjdChzdGF0ZU5vZGUudmlld3BvcnRSZWN0KCkpCi0gICAgLCBtX2NvbnRl
bnRzU2l6ZShzdGF0ZU5vZGUuY29udGVudHNTaXplKCkpCisgICAgLCBtX3RvdGFsQ29udGVudHNT
aXplKHN0YXRlTm9kZS50b3RhbENvbnRlbnRzU2l6ZSgpKQogICAgICwgbV9mcmFtZVNjYWxlRmFj
dG9yKHN0YXRlTm9kZS5mcmFtZVNjYWxlRmFjdG9yKCkpCiAgICAgLCBtX25vbkZhc3RTY3JvbGxh
YmxlUmVnaW9uKHN0YXRlTm9kZS5ub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbigpKQogICAgICwgbV93
aGVlbEV2ZW50SGFuZGxlckNvdW50KHN0YXRlTm9kZS53aGVlbEV2ZW50SGFuZGxlckNvdW50KCkp
CkBAIC05NSwxMyArOTUsMTMgQEAgdm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNl
dFZpZQogICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5zZXRIYXNDaGFuZ2VkUHJvcGVydGllcyh0
cnVlKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldENvbnRlbnRz
U2l6ZShjb25zdCBJbnRTaXplJiBjb250ZW50c1NpemUpCit2b2lkIFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZTo6c2V0VG90YWxDb250ZW50c1NpemUoY29uc3QgSW50U2l6ZSYgdG90YWxDb250
ZW50c1NpemUpCiB7Ci0gICAgaWYgKG1fY29udGVudHNTaXplID09IGNvbnRlbnRzU2l6ZSkKKyAg
ICBpZiAobV90b3RhbENvbnRlbnRzU2l6ZSA9PSB0b3RhbENvbnRlbnRzU2l6ZSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV9jb250ZW50c1NpemUgPSBjb250ZW50c1NpemU7Ci0gICAgc2V0UHJv
cGVydHlDaGFuZ2VkKENvbnRlbnRzU2l6ZSk7CisgICAgbV90b3RhbENvbnRlbnRzU2l6ZSA9IHRv
dGFsQ29udGVudHNTaXplOworICAgIHNldFByb3BlcnR5Q2hhbmdlZChUb3RhbENvbnRlbnRzU2l6
ZSk7CiAgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnNldEhhc0NoYW5nZWRQcm9wZXJ0aWVzKHRy
dWUpOwogfQogCkBAIC0yMzMsOSArMjMzLDkgQEAgdm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGU6OmR1bXBQcgogICAgICAgICB0cyA8PCAiKHZpZXdwb3J0IHJlY3QgIiA8PCBtX3ZpZXdw
b3J0UmVjdC54KCkgPDwgIiAiIDw8IG1fdmlld3BvcnRSZWN0LnkoKSA8PCAiICIgPDwgbV92aWV3
cG9ydFJlY3Qud2lkdGgoKSA8PCAiICIgPDwgbV92aWV3cG9ydFJlY3QuaGVpZ2h0KCkgPDwgIilc
biI7CiAgICAgfQogCi0gICAgaWYgKCFtX2NvbnRlbnRzU2l6ZS5pc0VtcHR5KCkpIHsKKyAgICBp
ZiAoIW1fdG90YWxDb250ZW50c1NpemUuaXNFbXB0eSgpKSB7CiAgICAgICAgIHdyaXRlSW5kZW50
KHRzLCBpbmRlbnQgKyAxKTsKLSAgICAgICAgdHMgPDwgIihjb250ZW50cyBzaXplICIgPDwgbV9j
b250ZW50c1NpemUud2lkdGgoKSA8PCAiICIgPDwgbV9jb250ZW50c1NpemUuaGVpZ2h0KCkgPDwg
IilcbiI7CisgICAgICAgIHRzIDw8ICIoY29udGVudHMgc2l6ZSAiIDw8IG1fdG90YWxDb250ZW50
c1NpemUud2lkdGgoKSA8PCAiICIgPDwgbV90b3RhbENvbnRlbnRzU2l6ZS5oZWlnaHQoKSA8PCAi
KVxuIjsKICAgICB9CiAKICAgICBpZiAobV9mcmFtZVNjYWxlRmFjdG9yICE9IDEpIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZS5oCShyZXZpc2lvbiAxNDY5NjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAKICAgICBlbnVtIENoYW5nZWRQcm9wZXJ0
eSB7CiAgICAgICAgIFZpZXdwb3J0UmVjdCA9IE51bVN0YXRlTm9kZUJpdHMsCi0gICAgICAgIENv
bnRlbnRzU2l6ZSwKKyAgICAgICAgVG90YWxDb250ZW50c1NpemUsCiAgICAgICAgIEZyYW1lU2Nh
bGVGYWN0b3IsCiAgICAgICAgIE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uLAogICAgICAgICBXaGVl
bEV2ZW50SGFuZGxlckNvdW50LApAQCAtNjgsOCArNjgsOCBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
SW50UmVjdCYgdmlld3BvcnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydFJlY3Q7IH0K
ICAgICB2b2lkIHNldFZpZXdwb3J0UmVjdChjb25zdCBJbnRSZWN0Jik7CiAKLSAgICBjb25zdCBJ
bnRTaXplJiBjb250ZW50c1NpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2l6ZTsgfQot
ICAgIHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IEludFNpemUmKTsKKyAgICBjb25zdCBJbnRT
aXplJiB0b3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxDb250ZW50c1Np
emU7IH0KKyAgICB2b2lkIHNldFRvdGFsQ29udGVudHNTaXplKGNvbnN0IEludFNpemUmKTsKIAog
ICAgIGZsb2F0IGZyYW1lU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lU2NhbGVG
YWN0b3I7IH0KICAgICB2b2lkIHNldEZyYW1lU2NhbGVGYWN0b3IoZmxvYXQpOwpAQCAtMTI2LDcg
KzEyNiw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICAKICAgICBJbnRSZWN0IG1fdmlld3BvcnRS
ZWN0OwotICAgIEludFNpemUgbV9jb250ZW50c1NpemU7CisgICAgSW50U2l6ZSBtX3RvdGFsQ29u
dGVudHNTaXplOwogICAgIAogICAgIGZsb2F0IG1fZnJhbWVTY2FsZUZhY3RvcjsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlLmNwcAkocmV2aXNpb24gMTQ2OTY0KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw4ICs1Niw4IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6
OnVwZGF0ZUIKICAgICBpZiAoc3RhdGUtPmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGU6OlZpZXdwb3J0UmVjdCkpCiAgICAgICAgIG1fdmlld3BvcnRSZWN0ID0g
c3RhdGUtPnZpZXdwb3J0UmVjdCgpOwogCi0gICAgaWYgKHN0YXRlLT5oYXNDaGFuZ2VkUHJvcGVy
dHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpDb250ZW50c1NpemUpKQotICAgICAgICBt
X2NvbnRlbnRzU2l6ZSA9IHN0YXRlLT5jb250ZW50c1NpemUoKTsKKyAgICBpZiAoc3RhdGUtPmhh
c0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlRvdGFsQ29udGVu
dHNTaXplKSkKKyAgICAgICAgbV90b3RhbENvbnRlbnRzU2l6ZSA9IHN0YXRlLT50b3RhbENvbnRl
bnRzU2l6ZSgpOwogCiAgICAgaWYgKHN0YXRlLT5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpGcmFtZVNjYWxlRmFjdG9yKSkKICAgICAgICAgbV9mcmFtZVNj
YWxlRmFjdG9yID0gc3RhdGUtPmZyYW1lU2NhbGVGYWN0b3IoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGUuaAkocmV2aXNpb24gMTQ2OTY0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyAr
NTksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGUoU2Nyb2xsaW5nVHJlZSosIFNjcm9sbGluZ05vZGVJRCk7CiAKICAgICBjb25zdCBJbnRSZWN0
JiB2aWV3cG9ydFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0UmVjdDsgfQotICAgIGNv
bnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNTaXpl
OyB9CisgICAgY29uc3QgSW50U2l6ZSYgdG90YWxDb250ZW50c1NpemUoKSBjb25zdCB7IHJldHVy
biBtX3RvdGFsQ29udGVudHNTaXplOyB9CiAKICAgICBmbG9hdCBmcmFtZVNjYWxlRmFjdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9mcmFtZVNjYWxlRmFjdG9yOyB9CiAKQEAgLTc1LDcgKzc1LDcgQEAg
cHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIEludFJlY3QgbV92aWV3cG9ydFJlY3Q7Ci0gICAg
SW50U2l6ZSBtX2NvbnRlbnRzU2l6ZTsKKyAgICBJbnRTaXplIG1fdG90YWxDb250ZW50c1NpemU7
CiAgICAgSW50UG9pbnQgbV9zY3JvbGxPcmlnaW47CiAgICAgCiAgICAgZmxvYXQgbV9mcmFtZVNj
YWxlRmFjdG9yOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmgJKHJldmlzaW9uIDE0Njk2NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRv
ck1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgSW50UG9pbnQgc2Nyb2xsT3JpZ2luOwogCiAgICAgICAgIEludFJlY3Qgdmlld3BvcnRSZWN0
OwotICAgICAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZTsKKyAgICAgICAgSW50U2l6ZSB0b3RhbENv
bnRlbnRzU2l6ZTsKICAgICAgICAgCiAgICAgICAgIGZsb2F0IGZyYW1lU2NhbGVGYWN0b3I7CiAg
ICAgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdD
b29yZGluYXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0JKHJldmlzaW9uIDE0Njk2NCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTU3LDcgKzE1Nyw3IEBAIHZvaWQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3JNYWM6OmZyYW1lVmlld0wKIAogICAgIHNjcm9sbFBhcmFtZXRlcnMuc2Nyb2xsT3Jp
Z2luID0gZnJhbWVWaWV3LT5zY3JvbGxPcmlnaW4oKTsKICAgICBzY3JvbGxQYXJhbWV0ZXJzLnZp
ZXdwb3J0UmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgZnJhbWVWaWV3LT52aXNpYmxlQ29udGVu
dFJlY3QoKS5zaXplKCkpOwotICAgIHNjcm9sbFBhcmFtZXRlcnMuY29udGVudHNTaXplID0gZnJh
bWVWaWV3LT5jb250ZW50c1NpemUoKTsKKyAgICBzY3JvbGxQYXJhbWV0ZXJzLnRvdGFsQ29udGVu
dHNTaXplID0gZnJhbWVWaWV3LT50b3RhbENvbnRlbnRzU2l6ZSgpOwogICAgIHNjcm9sbFBhcmFt
ZXRlcnMuZnJhbWVTY2FsZUZhY3RvciA9IGZyYW1lVmlldy0+ZnJhbWUoKS0+ZnJhbWVTY2FsZUZh
Y3RvcigpOwogCiAgICAgc2V0U2Nyb2xsUGFyYW1ldGVyc0Zvck5vZGUoc2Nyb2xsUGFyYW1ldGVy
cywgbm9kZSk7CkBAIC0yODksNyArMjg5LDcgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1h
Yzo6c2V0U2Nyb2xsUAogCiAgICAgbm9kZS0+c2V0U2Nyb2xsT3JpZ2luKHNjcm9sbFBhcmFtZXRl
cnMuc2Nyb2xsT3JpZ2luKTsKICAgICBub2RlLT5zZXRWaWV3cG9ydFJlY3Qoc2Nyb2xsUGFyYW1l
dGVycy52aWV3cG9ydFJlY3QpOwotICAgIG5vZGUtPnNldENvbnRlbnRzU2l6ZShzY3JvbGxQYXJh
bWV0ZXJzLmNvbnRlbnRzU2l6ZSk7CisgICAgbm9kZS0+c2V0VG90YWxDb250ZW50c1NpemUoc2Ny
b2xsUGFyYW1ldGVycy50b3RhbENvbnRlbnRzU2l6ZSk7CiAgICAgbm9kZS0+c2V0RnJhbWVTY2Fs
ZUZhY3RvcihzY3JvbGxQYXJhbWV0ZXJzLmZyYW1lU2NhbGVGYWN0b3IpOwogCiAgICAgc2NoZWR1
bGVUcmVlU3RhdGVDb21taXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVN
YWMubW0JKHJldmlzaW9uIDE0Njk2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MTExLDcgKzExMSw3IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OnVwZGEK
ICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLT5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbikpCiAgICAgICAgIHNl
dFNjcm9sbFBvc2l0aW9uKHNjcm9sbGluZ1N0YXRlTm9kZS0+cmVxdWVzdGVkU2Nyb2xsUG9zaXRp
b24oKSk7CiAKLSAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLT5oYXNDaGFuZ2VkUHJvcGVydHko
U2Nyb2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxMYXllcikgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLT5o
YXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpDb250ZW50c1Np
emUpIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS0+aGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6Vmlld3BvcnRSZWN0KSkKKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVO
b2RlLT5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxMYXllcikg
fHwgc2Nyb2xsaW5nU3RhdGVOb2RlLT5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlOjpUb3RhbENvbnRlbnRzU2l6ZSkgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLT5o
YXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpWaWV3cG9ydFJl
Y3QpKQogICAgICAgICB1cGRhdGVNYWluRnJhbWVQaW5TdGF0ZShzY3JvbGxQb3NpdGlvbigpKTsK
IH0KIApAQCAtMzA1LDcgKzMwNSw3IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVN
YWM6OnNldFMKICAgICBBU1NFUlQoIXNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1h
aW5UaHJlYWQoKSk7CiAgICAgbV9zY3JvbGxMYXllci5nZXQoKS5wb3NpdGlvbiA9IENHUG9pbnRN
YWtlKC1wb3NpdGlvbi54KCkgKyBzY3JvbGxPcmlnaW4oKS54KCksIC1wb3NpdGlvbi55KCkgKyBz
Y3JvbGxPcmlnaW4oKS55KCkpOwogCi0gICAgSW50U2l6ZSBzY3JvbGxPZmZzZXRGb3JGaXhlZENo
aWxkcmVuID0gRnJhbWVWaWV3OjpzY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKHZpZXdwb3J0
UmVjdCgpLCBjb250ZW50c1NpemUoKSwgcG9zaXRpb24sIHNjcm9sbE9yaWdpbigpLCBmcmFtZVNj
YWxlRmFjdG9yKCksIGZhbHNlKTsKKyAgICBJbnRTaXplIHNjcm9sbE9mZnNldEZvckZpeGVkQ2hp
bGRyZW4gPSBGcmFtZVZpZXc6OnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24odmlld3BvcnRS
ZWN0KCksIHRvdGFsQ29udGVudHNTaXplKCksIHBvc2l0aW9uLCBzY3JvbGxPcmlnaW4oKSwgZnJh
bWVTY2FsZUZhY3RvcigpLCBmYWxzZSk7CiAgICAgaWYgKG1fY291bnRlclNjcm9sbGluZ0xheWVy
KQogICAgICAgICBtX2NvdW50ZXJTY3JvbGxpbmdMYXllci5nZXQoKS5wb3NpdGlvbiA9IEZsb2F0
UG9pbnQoc2Nyb2xsT2Zmc2V0Rm9yRml4ZWRDaGlsZHJlbik7CiAKQEAgLTMyNyw4ICszMjcsOCBA
QCBJbnRQb2ludCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6CiAKIEludFBvaW50IFNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjptYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25z
dAogewotICAgIEludFBvaW50IHBvc2l0aW9uKGNvbnRlbnRzU2l6ZSgpLndpZHRoKCkgLSB2aWV3
cG9ydFJlY3QoKS53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzU2l6ZSgp
LmhlaWdodCgpIC0gdmlld3BvcnRSZWN0KCkuaGVpZ2h0KCkpOworICAgIEludFBvaW50IHBvc2l0
aW9uKHRvdGFsQ29udGVudHNTaXplKCkud2lkdGgoKSAtIHZpZXdwb3J0UmVjdCgpLndpZHRoKCks
CisgICAgICAgICAgICAgICAgICAgICAgdG90YWxDb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIHZp
ZXdwb3J0UmVjdCgpLmhlaWdodCgpKTsKIAogICAgIHBvc2l0aW9uLmNsYW1wTmVnYXRpdmVUb1pl
cm8oKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHJldmlz
aW9uIDE0Njk2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMTUsNyArMzE1LDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpzZXRDb250
ZW50c1NpemUoY29uc3QgSQogCiBJbnRQb2ludCBTY3JvbGxWaWV3OjptYXhpbXVtU2Nyb2xsUG9z
aXRpb24oKSBjb25zdAogewotICAgIEludFBvaW50IG1heGltdW1PZmZzZXQoY29udGVudHNXaWR0
aCgpIC0gdmlzaWJsZVdpZHRoKCkgLSBzY3JvbGxPcmlnaW4oKS54KCksIGNvbnRlbnRzSGVpZ2h0
KCkgLSB2aXNpYmxlSGVpZ2h0KCkgLSBzY3JvbGxPcmlnaW4oKS55KCkpOworICAgIEludFBvaW50
IG1heGltdW1PZmZzZXQoY29udGVudHNXaWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkgLSBzY3JvbGxP
cmlnaW4oKS54KCksIHRvdGFsQ29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0
KCkgLSBzY3JvbGxPcmlnaW4oKS55KCkpOwogICAgIG1heGltdW1PZmZzZXQuY2xhbXBOZWdhdGl2
ZVRvWmVybygpOwogICAgIHJldHVybiBtYXhpbXVtT2Zmc2V0OwogfQpAQCAtMzU4LDcgKzM1OCw3
IEBAIHZvaWQgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEkKICAgICBpbnQgdmVy
dGljYWxPZmZzZXQgPSBvZmZzZXQueSgpOwogICAgIGlmIChjb25zdHJhaW5zU2Nyb2xsaW5nVG9D
b250ZW50RWRnZSgpKSB7CiAgICAgICAgIGhvcml6b250YWxPZmZzZXQgPSBtYXgobWluKGhvcml6
b250YWxPZmZzZXQsIGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKSwgMCk7Ci0gICAg
ICAgIHZlcnRpY2FsT2Zmc2V0ID0gbWF4KG1pbih2ZXJ0aWNhbE9mZnNldCwgY29udGVudHNIZWln
aHQoKSAtIHZpc2libGVIZWlnaHQoKSksIDApOworICAgICAgICB2ZXJ0aWNhbE9mZnNldCA9IG1h
eChtaW4odmVydGljYWxPZmZzZXQsIHRvdGFsQ29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSB2aXNp
YmxlSGVpZ2h0KCkpLCAwKTsKICAgICB9CiAKICAgICBJbnRTaXplIG5ld09mZnNldCA9IG1fc2Ny
b2xsT2Zmc2V0OwpAQCAtNDQzLDggKzQ0Myw4IEBAIEludFNpemUgU2Nyb2xsVmlldzo6b3Zlcmhh
bmdBbW91bnQoKSBjb24KICAgICBpbnQgcGh5c2ljYWxTY3JvbGxZID0gc2Nyb2xsUG9zaXRpb24o
KS55KCkgKyBzY3JvbGxPcmlnaW4oKS55KCk7CiAgICAgaWYgKHBoeXNpY2FsU2Nyb2xsWSA8IDAp
CiAgICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHBoeXNpY2FsU2Nyb2xsWSk7Ci0gICAgZWxzZSBp
ZiAoY29udGVudHNIZWlnaHQoKSAmJiBwaHlzaWNhbFNjcm9sbFkgPiBjb250ZW50c0hlaWdodCgp
IC0gdmlzaWJsZUhlaWdodCgpKQotICAgICAgICBzdHJldGNoLnNldEhlaWdodChwaHlzaWNhbFNj
cm9sbFkgLSAoY29udGVudHNIZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkpOworICAgIGVsc2Ug
aWYgKHRvdGFsQ29udGVudHNTaXplKCkuaGVpZ2h0KCkgJiYgcGh5c2ljYWxTY3JvbGxZID4gdG90
YWxDb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkKKyAgICAgICAgc3Ry
ZXRjaC5zZXRIZWlnaHQocGh5c2ljYWxTY3JvbGxZIC0gKHRvdGFsQ29udGVudHNTaXplKCkuaGVp
Z2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpKTsKIAogICAgIGludCBwaHlzaWNhbFNjcm9sbFggPSBz
Y3JvbGxQb3NpdGlvbigpLngoKSArIHNjcm9sbE9yaWdpbigpLngoKTsKICAgICBpZiAocGh5c2lj
YWxTY3JvbGxYIDwgMCkKQEAgLTUwMyw3ICs1MDMsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0
ZVNjcm9sbGJhcnMoY29uc3QgCiAgICAgfSBlbHNlIHsKICAgICAgICAgYm9vbCBzZW5kQ29udGVu
dFJlc2l6ZWROb3RpZmljYXRpb24gPSBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIEludFNpemUg
ZG9jU2l6ZSA9IGNvbnRlbnRzU2l6ZSgpOworICAgICAgICBJbnRTaXplIGRvY1NpemUgPSB0b3Rh
bENvbnRlbnRzU2l6ZSgpOwogICAgICAgICBJbnRTaXplIGZ1bGxWaXNpYmxlU2l6ZSA9IHZpc2li
bGVDb250ZW50UmVjdChJbmNsdWRlU2Nyb2xsYmFycykuc2l6ZSgpOwogCiAgICAgICAgIGlmICho
U2Nyb2xsID09IFNjcm9sbGJhckF1dG8pIHsKQEAgLTU0Niw3ICs1NDYsNyBAQCB2b2lkIFNjcm9s
bFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAgICAgICAgICAgICBtX3VwZGF0ZVNjcm9s
bGJhcnNQYXNzKys7CiAgICAgICAgICAgICBjb250ZW50c1Jlc2l6ZWQoKTsKICAgICAgICAgICAg
IHZpc2libGVDb250ZW50c1Jlc2l6ZWQoKTsKLSAgICAgICAgICAgIEludFNpemUgbmV3RG9jU2l6
ZSA9IGNvbnRlbnRzU2l6ZSgpOworICAgICAgICAgICAgSW50U2l6ZSBuZXdEb2NTaXplID0gdG90
YWxDb250ZW50c1NpemUoKTsKICAgICAgICAgICAgIGlmIChuZXdEb2NTaXplID09IGRvY1NpemUp
IHsKICAgICAgICAgICAgICAgICAvLyBUaGUgbGF5b3V0IHdpdGggdGhlIG5ldyBzY3JvbGwgc3Rh
dGUgaGFkIG5vIGltcGFjdCBvbgogICAgICAgICAgICAgICAgIC8vIHRoZSBkb2N1bWVudCdzIG92
ZXJhbGwgc2l6ZSwgc28gdXBkYXRlU2Nyb2xsYmFycyBkaWRuJ3QgZ2V0IGNhbGxlZC4KQEAgLTU5
OSw5ICs1OTksOSBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAK
ICAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQpCiAgICAgICAgICAgICBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbih0cnVlKTsKLSAgICAgICAgbV92
ZXJ0aWNhbFNjcm9sbGJhci0+c2V0RW5hYmxlZChjb250ZW50c0hlaWdodCgpID4gY2xpZW50SGVp
Z2h0KTsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0RW5hYmxlZCh0b3RhbENvbnRl
bnRzU2l6ZSgpLmhlaWdodCgpID4gY2xpZW50SGVpZ2h0KTsKICAgICAgICAgbV92ZXJ0aWNhbFNj
cm9sbGJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3Rl
cCk7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24oY2xpZW50SGVp
Z2h0LCBjb250ZW50c0hlaWdodCgpKTsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0
UHJvcG9ydGlvbihjbGllbnRIZWlnaHQsIHRvdGFsQ29udGVudHNTaXplKCkuaGVpZ2h0KCkpOwog
ICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkKICAgICAgICAgICAgIG1fdmVydGlj
YWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsKICAgICB9CkBAIC03
MzYsNyArNzM2LDggQEAgSW50UG9pbnQgU2Nyb2xsVmlldzo6d2luZG93VG9Db250ZW50cyhjbwog
ICAgICAgICByZXR1cm4gY29udmVydEZyb21Db250YWluaW5nV2luZG93KHdpbmRvd1BvaW50KTsK
IAogICAgIEludFBvaW50IHZpZXdQb2ludCA9IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyh3
aW5kb3dQb2ludCk7Ci0gICAgcmV0dXJuIHZpZXdQb2ludCArIHNjcm9sbE9mZnNldCgpOworICAg
IEludFNpemUgb2Zmc2V0SW5Eb2N1bWVudCA9IHNjcm9sbE9mZnNldCgpIC0gSW50U2l6ZSgwLCBo
ZWFkZXJIZWlnaHQoKSk7CisgICAgcmV0dXJuIHZpZXdQb2ludCArIG9mZnNldEluRG9jdW1lbnQ7
CiB9CiAKIEludFBvaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzVG9XaW5kb3coY29uc3QgSW50UG9p
bnQmIGNvbnRlbnRzUG9pbnQpIGNvbnN0CkBAIC03NDQsNyArNzQ1LDcgQEAgSW50UG9pbnQgU2Ny
b2xsVmlldzo6Y29udGVudHNUb1dpbmRvdyhjbwogICAgIGlmIChkZWxlZ2F0ZXNTY3JvbGxpbmco
KSkKICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coY29udGVudHNQb2lu
dCk7CiAKLSAgICBJbnRQb2ludCB2aWV3UG9pbnQgPSBjb250ZW50c1BvaW50IC0gc2Nyb2xsT2Zm
c2V0KCk7CisgICAgSW50UG9pbnQgdmlld1BvaW50ID0gY29udGVudHNQb2ludCAtIHNjcm9sbE9m
ZnNldCgpICsgSW50U2l6ZSgwLCBoZWFkZXJIZWlnaHQoKSk7CiAgICAgcmV0dXJuIGNvbnZlcnRU
b0NvbnRhaW5pbmdXaW5kb3codmlld1BvaW50KTsgIAogfQogCkBAIC03NTQsNyArNzU1LDggQEAg
SW50UmVjdCBTY3JvbGxWaWV3Ojp3aW5kb3dUb0NvbnRlbnRzKGNvbgogICAgICAgICByZXR1cm4g
Y29udmVydEZyb21Db250YWluaW5nV2luZG93KHdpbmRvd1JlY3QpOwogCiAgICAgSW50UmVjdCB2
aWV3UmVjdCA9IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyh3aW5kb3dSZWN0KTsKLSAgICB2
aWV3UmVjdC5tb3ZlKHNjcm9sbE9mZnNldCgpKTsKKyAgICBJbnRTaXplIG9mZnNldEluRG9jdW1l
bnQgPSBzY3JvbGxPZmZzZXQoKSAtIEludFNpemUoMCwgaGVhZGVySGVpZ2h0KCkpOworICAgIHZp
ZXdSZWN0Lm1vdmUob2Zmc2V0SW5Eb2N1bWVudCk7CiAgICAgcmV0dXJuIHZpZXdSZWN0OwogfQog
CkBAIC03NjQsNyArNzY2LDcgQEAgSW50UmVjdCBTY3JvbGxWaWV3Ojpjb250ZW50c1RvV2luZG93
KGNvbgogICAgICAgICByZXR1cm4gY29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhjb250ZW50c1Jl
Y3QpOwogCiAgICAgSW50UmVjdCB2aWV3UmVjdCA9IGNvbnRlbnRzUmVjdDsKLSAgICB2aWV3UmVj
dC5tb3ZlKC1zY3JvbGxPZmZzZXQoKSk7CisgICAgdmlld1JlY3QubW92ZSgtc2Nyb2xsT2Zmc2V0
KCkgKyBJbnRTaXplKDAsIGhlYWRlckhlaWdodCgpKSk7CiAgICAgcmV0dXJuIGNvbnZlcnRUb0Nv
bnRhaW5pbmdXaW5kb3codmlld1JlY3QpOwogfQogCkBAIC0xMTE2LDggKzExMTgsOCBAQCB2b2lk
IFNjcm9sbFZpZXc6OmNhbGN1bGF0ZU92ZXJoYW5nQXJlYXNGCiAgICAgICAgIGhvcml6b250YWxP
dmVyaGFuZ1JlY3QgPSBmcmFtZVJlY3QoKTsKICAgICAgICAgaG9yaXpvbnRhbE92ZXJoYW5nUmVj
dC5zZXRIZWlnaHQoLXBoeXNpY2FsU2Nyb2xsWSk7CiAgICAgICAgIGhvcml6b250YWxPdmVyaGFu
Z1JlY3Quc2V0V2lkdGgoaG9yaXpvbnRhbE92ZXJoYW5nUmVjdC53aWR0aCgpIC0gdmVydGljYWxT
Y3JvbGxiYXJXaWR0aCk7Ci0gICAgfSBlbHNlIGlmIChjb250ZW50c0hlaWdodCgpICYmIHBoeXNp
Y2FsU2Nyb2xsWSA+IGNvbnRlbnRzSGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpIHsKLSAgICAg
ICAgaW50IGhlaWdodCA9IHBoeXNpY2FsU2Nyb2xsWSAtIChjb250ZW50c0hlaWdodCgpIC0gdmlz
aWJsZUhlaWdodCgpKTsKKyAgICB9IGVsc2UgaWYgKHRvdGFsQ29udGVudHNTaXplKCkuaGVpZ2h0
KCkgJiYgcGh5c2ljYWxTY3JvbGxZID4gdG90YWxDb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIHZp
c2libGVIZWlnaHQoKSkgeworICAgICAgICBpbnQgaGVpZ2h0ID0gcGh5c2ljYWxTY3JvbGxZIC0g
KHRvdGFsQ29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpOwogICAgICAg
ICBob3Jpem9udGFsT3ZlcmhhbmdSZWN0ID0gZnJhbWVSZWN0KCk7CiAgICAgICAgIGhvcml6b250
YWxPdmVyaGFuZ1JlY3Quc2V0WShmcmFtZVJlY3QoKS5tYXhZKCkgLSBoZWlnaHQgLSBob3Jpem9u
dGFsU2Nyb2xsYmFySGVpZ2h0KTsKICAgICAgICAgaG9yaXpvbnRhbE92ZXJoYW5nUmVjdC5zZXRI
ZWlnaHQoaGVpZ2h0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVB
cmVhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxl
QXJlYS5jcHAJKHJldmlzaW9uIDE0Njk2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbGFibGVBcmVhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAwLDcgKzQwMCwxNCBAQCBJbnRQ
b2ludCBTY3JvbGxhYmxlQXJlYTo6bWluaW11bVNjcm9sbFBvCiAKIEludFBvaW50IFNjcm9sbGFi
bGVBcmVhOjptYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBJbnRQ
b2ludChjb250ZW50c1NpemUoKS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCksIGNvbnRlbnRzU2l6
ZSgpLmhlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKTsKKyAgICByZXR1cm4gSW50UG9pbnQodG90
YWxDb250ZW50c1NpemUoKS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCksIHRvdGFsQ29udGVudHNT
aXplKCkuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpOworfQorCitJbnRTaXplIFNjcm9sbGFi
bGVBcmVhOjp0b3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0Cit7CisgICAgSW50U2l6ZSB0b3RhbENv
bnRlbnRzU2l6ZSA9IGNvbnRlbnRzU2l6ZSgpOworICAgIHRvdGFsQ29udGVudHNTaXplLnNldEhl
aWdodCh0b3RhbENvbnRlbnRzU2l6ZS5oZWlnaHQoKSArIGhlYWRlckhlaWdodCgpICsgZm9vdGVy
SGVpZ2h0KCkpOworICAgIHJldHVybiB0b3RhbENvbnRlbnRzU2l6ZTsKIH0KIAogSW50UmVjdCBT
Y3JvbGxhYmxlQXJlYTo6dmlzaWJsZUNvbnRlbnRSZWN0KFZpc2libGVDb250ZW50UmVjdEluY2x1
ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJbmNsdXNpb24pIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgJKHJldmlzaW9uIDE0Njk2NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
Nyw2ICsxNDcsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSW50U2l6ZSBvdmVyaGFuZ0Ftb3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUoKTsgfQogICAgIHZpcnR1YWwgSW50UG9pbnQgbGFz
dEtub3duTW91c2VQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIEludFBvaW50KCk7IH0KIAorICAg
IHZpcnR1YWwgaW50IGhlYWRlckhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0
dWFsIGludCBmb290ZXJIZWlnaHQoKSBjb25zdCB7IHJldHVybiAwOyB9CisKKyAgICAvLyBUaGUg
dG90YWxDb250ZW50c1NpemUoKSBpcyBlcXVpdmFsZW50IHRvIHRoZSBjb250ZW50c1NpemUoKSBw
bHVzIHRoZSBoZWFkZXIgYW5kIGZvb3RlciBoZWlnaHRzLgorICAgIEludFNpemUgdG90YWxDb250
ZW50c1NpemUoKSBjb25zdDsKKwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTdXNwZW5kU2Nyb2xs
QW5pbWF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2Ny
b2xsYmFyU3R5bGVDaGFuZ2VkKGludCAvKm5ld1N0eWxlKi8sIGJvb2wgLypmb3JjZVVwZGF0ZSov
KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KGNvbnN0
IEludFJlY3QmKSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxB
bmltYXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
U2Nyb2xsQW5pbWF0b3JNYWMubW0JKHJldmlzaW9uIDE0Njk2NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzA2
LDggKzcwNiw4IEBAIEZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3JNYWM6OmFkanVzdFNjcm8KICAg
ICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEtPmNvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdl
KCkpCiAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKIAotICAgIGZsb2F0IG5ld1ggPSBtYXg8Zmxv
YXQ+KG1pbjxmbG9hdD4ocG9zaXRpb24ueCgpLCBtX3Njcm9sbGFibGVBcmVhLT5jb250ZW50c1Np
emUoKS53aWR0aCgpIC0gbV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZVdpZHRoKCkpLCAwKTsKLSAg
ICBmbG9hdCBuZXdZID0gbWF4PGZsb2F0PihtaW48ZmxvYXQ+KHBvc2l0aW9uLnkoKSwgbV9zY3Jv
bGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSBtX3Njcm9sbGFibGVBcmVhLT52
aXNpYmxlSGVpZ2h0KCkpLCAwKTsKKyAgICBmbG9hdCBuZXdYID0gbWF4PGZsb2F0PihtaW48Zmxv
YXQ+KHBvc2l0aW9uLngoKSwgbV9zY3JvbGxhYmxlQXJlYS0+dG90YWxDb250ZW50c1NpemUoKS53
aWR0aCgpIC0gbV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZVdpZHRoKCkpLCAwKTsKKyAgICBmbG9h
dCBuZXdZID0gbWF4PGZsb2F0PihtaW48ZmxvYXQ+KHBvc2l0aW9uLnkoKSwgbV9zY3JvbGxhYmxl
QXJlYS0+dG90YWxDb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZp
c2libGVIZWlnaHQoKSksIDApOwogCiAgICAgcmV0dXJuIEZsb2F0UG9pbnQobmV3WCwgbmV3WSk7
CiB9CkBAIC0xMDUyLDcgKzEwNTIsNyBAQCBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpwaW5uZWRJ
bkRpcmVjdGlvCiAgICAgICAgICAgICBsaW1pdERlbHRhLnNldEhlaWdodChtX3Njcm9sbGFibGVB
cmVhLT52aXNpYmxlQ29udGVudFJlY3QoKS55KCkgKyArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9s
bE9yaWdpbigpLnkoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBXZSBhcmUg
dHJ5aW5nIHRvIHNjcm9sbCBkb3duLiAgTWFrZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRo
ZSBib3R0b20KLSAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0SGVpZ2h0KG1fc2Nyb2xsYWJsZUFy
ZWEtPmNvbnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0gKG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVD
b250ZW50UmVjdCgpLm1heFkoKSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpLnko
KSkpOworICAgICAgICAgICAgbGltaXREZWx0YS5zZXRIZWlnaHQobV9zY3JvbGxhYmxlQXJlYS0+
dG90YWxDb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIChtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxl
Q29udGVudFJlY3QoKS5tYXhZKCkgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmlnaW4oKS55
KCkpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoZGVsdGFYICE9IDApIHsKICAgICAgICAg
aWYgKGRlbHRhWCA8IDApIHsKQEAgLTEwNjAsNyArMTA2MCw3IEBAIGJvb2wgU2Nyb2xsQW5pbWF0
b3JNYWM6OnBpbm5lZEluRGlyZWN0aW8KICAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0V2lkdGgo
bV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkueCgpICsgbV9zY3JvbGxhYmxl
QXJlYS0+c2Nyb2xsT3JpZ2luKCkueCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIHJpZ2h0LiAgTWFrZSBzdXJlIHdlIGFyZSBub3Qg
cGlubmVkIHRvIHRoZSByaWdodAotICAgICAgICAgICAgbGltaXREZWx0YS5zZXRXaWR0aChtX3Nj
cm9sbGFibGVBcmVhLT5jb250ZW50c1NpemUoKS53aWR0aCgpIC0gKG1fc2Nyb2xsYWJsZUFyZWEt
PnZpc2libGVDb250ZW50UmVjdCgpLm1heFgoKSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9y
aWdpbigpLngoKSkpOworICAgICAgICAgICAgbGltaXREZWx0YS5zZXRXaWR0aChtX3Njcm9sbGFi
bGVBcmVhLT50b3RhbENvbnRlbnRzU2l6ZSgpLndpZHRoKCkgLSAobV9zY3JvbGxhYmxlQXJlYS0+
dmlzaWJsZUNvbnRlbnRSZWN0KCkubWF4WCgpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3Jp
Z2luKCkueCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCShyZXZpc2lvbiAxNDY5NjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU2Nyw3ICs1
NjcsNyBAQCBOU1ZpZXcgKlRoZW1lTWFjOjplbnN1cmVkVmlldyhTY3JvbGxWaWV3CiAgICAgCiAg
ICAgLy8gVXNlIGEgZmFrZSBmbGlwcGVkIHZpZXcuCiAgICAgc3RhdGljIE5TVmlldyAqZmxpcHBl
ZFZpZXcgPSBbW1dlYkNvcmVGbGlwcGVkVmlldyBhbGxvY10gaW5pdF07Ci0gICAgW2ZsaXBwZWRW
aWV3IHNldEZyYW1lU2l6ZTpOU1NpemVGcm9tQ0dTaXplKHNjcm9sbFZpZXctPmNvbnRlbnRzU2l6
ZSgpKV07CisgICAgW2ZsaXBwZWRWaWV3IHNldEZyYW1lU2l6ZTpOU1NpemVGcm9tQ0dTaXplKHNj
cm9sbFZpZXctPnRvdGFsQ29udGVudHNTaXplKCkpXTsKIAogICAgIHJldHVybiBmbGlwcGVkVmll
dzsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuY3BwCShyZXZpc2lvbiAxNDY5NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3Nyw3
ICsxNTc3LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVJvb3RMYQogICAg
IGlmIChtX3Jvb3RDb250ZW50TGF5ZXIpIHsKICAgICAgICAgY29uc3QgSW50UmVjdCYgZG9jdW1l
bnRSZWN0ID0gbV9yZW5kZXJWaWV3LT5kb2N1bWVudFJlY3QoKTsKICAgICAgICAgbV9yb290Q29u
dGVudExheWVyLT5zZXRTaXplKGRvY3VtZW50UmVjdC5zaXplKCkpOwotICAgICAgICBtX3Jvb3RD
b250ZW50TGF5ZXItPnNldFBvc2l0aW9uKGRvY3VtZW50UmVjdC5sb2NhdGlvbigpKTsKKyAgICAg
ICAgbV9yb290Q29udGVudExheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KGRvY3VtZW50UmVj
dC54KCksIGRvY3VtZW50UmVjdC55KCkgKyBtX3JlbmRlclZpZXctPmZyYW1lVmlldygpLT5oZWFk
ZXJIZWlnaHQoKSkpOwogICAgIH0KICAgICBpZiAobV9jbGlwTGF5ZXIpIHsKICAgICAgICAgRnJh
bWVWaWV3KiBmcmFtZVZpZXcgPSBtX3JlbmRlclZpZXctPmZyYW1lVmlldygpOwpAQCAtMTU5Nyw2
ICsxNTk3LDggQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVJvb3RMYQogCiAg
ICAgdXBkYXRlTGF5ZXJGb3JUb3BPdmVyaGFuZ0FyZWEobV9sYXllckZvclRvcE92ZXJoYW5nQXJl
YSk7CiAgICAgdXBkYXRlTGF5ZXJGb3JCb3R0b21PdmVyaGFuZ0FyZWEobV9sYXllckZvckJvdHRv
bU92ZXJoYW5nQXJlYSk7CisgICAgdXBkYXRlTGF5ZXJGb3JIZWFkZXIobV9sYXllckZvckhlYWRl
cik7CisgICAgdXBkYXRlTGF5ZXJGb3JGb290ZXIobV9sYXllckZvckZvb3Rlcik7CiAjZW5kaWYK
IH0KIApAQCAtMjQ4OCwxMCArMjQ5MCw2MCBAQCBHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnVwCiAgICAgICAgIG1fc2Nyb2xsTGF5ZXItPmFkZENoaWxkQmVsb3cobV9sYXll
ckZvckJvdHRvbU92ZXJoYW5nQXJlYS5nZXQoKSwgbV9yb290Q29udGVudExheWVyLmdldCgpKTsK
ICAgICB9CiAKLSAgICBtX2xheWVyRm9yQm90dG9tT3ZlcmhhbmdBcmVhLT5zZXRQb3NpdGlvbihG
bG9hdFBvaW50KDAsIG1fcm9vdENvbnRlbnRMYXllci0+c2l6ZSgpLmhlaWdodCgpKSk7CisgICAg
bV9sYXllckZvckJvdHRvbU92ZXJoYW5nQXJlYS0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgwLCBt
X3Jvb3RDb250ZW50TGF5ZXItPnNpemUoKS5oZWlnaHQoKSArIG1fcmVuZGVyVmlldy0+ZnJhbWVW
aWV3KCktPmZvb3RlckhlaWdodCgpICsgbV9yZW5kZXJWaWV3LT5mcmFtZVZpZXcoKS0+aGVhZGVy
SGVpZ2h0KCkpKTsKICAgICByZXR1cm4gbV9sYXllckZvckJvdHRvbU92ZXJoYW5nQXJlYS5nZXQo
KTsKIH0KIAorR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVMYXll
ckZvckhlYWRlcihib29sIHdhbnRzTGF5ZXIpCit7CisgICAgaWYgKG1fcmVuZGVyVmlldy0+ZG9j
dW1lbnQoKS0+b3duZXJFbGVtZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCF3
YW50c0xheWVyKSB7CisgICAgICAgIGlmIChtX2xheWVyRm9ySGVhZGVyKSB7CisgICAgICAgICAg
ICBtX2xheWVyRm9ySGVhZGVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgICAgICAgICBtX2xh
eWVyRm9ySGVhZGVyID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisKKyAgICBpZiAoIW1fbGF5ZXJGb3JIZWFkZXIpIHsKKyAgICAgICAgbV9sYXllckZvckhl
YWRlciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShncmFwaGljc0xheWVyRmFjdG9yeSgpLCB0aGlz
KTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIG1fbGF5ZXJGb3JIZWFkZXItPnNldE5hbWUoImhl
YWRlciIpOworI2VuZGlmCisgICAgICAgIG1fc2Nyb2xsTGF5ZXItPmFkZENoaWxkQmVsb3cobV9s
YXllckZvckhlYWRlci5nZXQoKSwgbV9yb290Q29udGVudExheWVyLmdldCgpKTsKKyAgICB9CisK
KyAgICBtX2xheWVyRm9ySGVhZGVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDAsIDApKTsKKyAg
ICByZXR1cm4gbV9sYXllckZvckhlYWRlci5nZXQoKTsKK30KKworR3JhcGhpY3NMYXllciogUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVMYXllckZvckZvb3Rlcihib29sIHdhbnRzTGF5ZXIp
Cit7CisgICAgaWYgKG1fcmVuZGVyVmlldy0+ZG9jdW1lbnQoKS0+b3duZXJFbGVtZW50KCkpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCF3YW50c0xheWVyKSB7CisgICAgICAgIGlmICht
X2xheWVyRm9yRm9vdGVyKSB7CisgICAgICAgICAgICBtX2xheWVyRm9yRm9vdGVyLT5yZW1vdmVG
cm9tUGFyZW50KCk7CisgICAgICAgICAgICBtX2xheWVyRm9yRm9vdGVyID0gbnVsbHB0cjsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIW1fbGF5ZXJGb3JG
b290ZXIpIHsKKyAgICAgICAgbV9sYXllckZvckZvb3RlciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0
ZShncmFwaGljc0xheWVyRmFjdG9yeSgpLCB0aGlzKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAg
IG1fbGF5ZXJGb3JGb290ZXItPnNldE5hbWUoImZvb3RlciIpOworI2VuZGlmCisgICAgICAgIG1f
c2Nyb2xsTGF5ZXItPmFkZENoaWxkQmVsb3cobV9sYXllckZvckZvb3Rlci5nZXQoKSwgbV9yb290
Q29udGVudExheWVyLmdldCgpKTsKKyAgICB9CisKKyAgICBtX2xheWVyRm9yRm9vdGVyLT5zZXRQ
b3NpdGlvbihGbG9hdFBvaW50KDAsIG1fcm9vdENvbnRlbnRMYXllci0+c2l6ZSgpLmhlaWdodCgp
ICsgbV9yZW5kZXJWaWV3LT5mcmFtZVZpZXcoKS0+aGVhZGVySGVpZ2h0KCkpKTsKKyAgICByZXR1
cm4gbV9sYXllckZvckZvb3Rlci5nZXQoKTsKK30KKwogI2VuZGlmCiAKIGJvb2wgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjp2aWV3SGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKENvbG9yKiBiYWNrZ3Jv
dW5kQ29sb3IpIGNvbnN0CkBAIC0yOTQ5LDcgKzMwMDEsNyBAQCBGaXhlZFBvc2l0aW9uVmlld3Bv
cnRDb25zdHJhaW50cyBSZW5kZXJMCiAKICAgICBjb25zdHJhaW50cy5zZXRMYXllclBvc2l0aW9u
QXRMYXN0TGF5b3V0KGdyYXBoaWNzTGF5ZXItPnBvc2l0aW9uKCkpOwogICAgIGNvbnN0cmFpbnRz
LnNldFZpZXdwb3J0UmVjdEF0TGFzdExheW91dCh2aWV3cG9ydFJlY3QpOwotICAgICAgICAKKwog
ICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpOwogICAg
IGlmICghc3R5bGUtPmxlZnQoKS5pc0F1dG8oKSkKICAgICAgICAgY29uc3RyYWludHMuYWRkQW5j
aG9yRWRnZShWaWV3cG9ydENvbnN0cmFpbnRzOjpBbmNob3JFZGdlTGVmdCk7CkBAIC0zMTAzLDYg
KzMxNTUsOCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVwb3J0TWVtb3J5CiAgICAg
aW5mby5hZGRNZW1iZXIobV9jb250ZW50U2hhZG93TGF5ZXIsICJjb250ZW50U2hhZG93TGF5ZXIi
KTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2xheWVyRm9yVG9wT3ZlcmhhbmdBcmVhLCAibGF5ZXJG
b3JUb3BPdmVyaGFuZ0FyZWEiKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2xheWVyRm9yQm90dG9t
T3ZlcmhhbmdBcmVhLCAibGF5ZXJGb3JCb3R0b21PdmVyaGFuZ0FyZWEiKTsKKyAgICBpbmZvLmFk
ZE1lbWJlcihtX2xheWVyRm9ySGVhZGVyLCAibGF5ZXJGb3JIZWFkZXIiKTsKKyAgICBpbmZvLmFk
ZE1lbWJlcihtX2xheWVyRm9yRm9vdGVyLCAibGF5ZXJGb3JGb290ZXIiKTsKICNlbmRpZgogICAg
IGluZm8uYWRkTWVtYmVyKG1fbGF5ZXJVcGRhdGVyLCAibGF5ZXJVcGRhdGVyIik7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5o
CShyZXZpc2lvbiAxNDY5NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1OSw2ICsyNTksOCBAQCBwdWJsaWM6
CiAKICAgICBHcmFwaGljc0xheWVyKiB1cGRhdGVMYXllckZvclRvcE92ZXJoYW5nQXJlYShib29s
IHdhbnRzTGF5ZXIpOwogICAgIEdyYXBoaWNzTGF5ZXIqIHVwZGF0ZUxheWVyRm9yQm90dG9tT3Zl
cmhhbmdBcmVhKGJvb2wgd2FudHNMYXllcik7CisgICAgR3JhcGhpY3NMYXllciogdXBkYXRlTGF5
ZXJGb3JIZWFkZXIoYm9vbCB3YW50c0xheWVyKTsKKyAgICBHcmFwaGljc0xheWVyKiB1cGRhdGVM
YXllckZvckZvb3Rlcihib29sIHdhbnRzTGF5ZXIpOwogI2VuZGlmCiAKICAgICB2b2lkIHVwZGF0
ZVZpZXdwb3J0Q29uc3RyYWludFN0YXR1cyhSZW5kZXJMYXllciopOwpAQCAtNDMzLDYgKzQzNSw4
IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fY29udGVudFNoYWRvd0xh
eWVyOwogICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBtX2xheWVyRm9yVG9wT3ZlcmhhbmdBcmVh
OwogICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBtX2xheWVyRm9yQm90dG9tT3ZlcmhhbmdBcmVh
OworICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBtX2xheWVyRm9ySGVhZGVyOworICAgIE93blB0
cjxHcmFwaGljc0xheWVyPiBtX2xheWVyRm9yRm9vdGVyOwogI2VuZGlmCiAKICAgICBPd25QdHI8
R3JhcGhpY3NMYXllclVwZGF0ZXI+IG1fbGF5ZXJVcGRhdGVyOyAvLyBVcGRhdGVzIHRpbGVkIGxh
eWVyIHZpc2libGUgYXJlYSBwZXJpb2RpY2FsbHkgd2hpbGUgYW5pbWF0aW9ucyBhcmUgcnVubmlu
Zy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0Njk2NCkKKysrIFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDEzLTAzLTI2ICBCZXRo
IERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBOZWVkIFdLMiBBUEkgdG8gZ2l2
ZSBhIFdlYlZpZXcgYSBoZWFkZXIgYW5kIGZvb3RlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzMzUyCisgICAgICAgIC1hbmQgY29ycmVzcG9uZGlu
Zy0KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMzgzODM1PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5ldyBBUEkgYWxsb3dzIHNldHRpbmcgYW5k
IGdldHRpbmcgbGF5ZXJzIGZvciBhIGhlYWRlciBhbmQgZm9vdGVyLgorCisgICAgICAgICogV2Vi
S2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2MvbWFjOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9jL21hYy9XS0J1bmRsZVBhZ2VQcml2YXRlTWFjLmg6IEFkZGVkLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvbWFjL1dLQnVuZGxlUGFnZVBy
aXZhdGVNYWMubW06IEFkZGVkLgorICAgICAgICAoV0tCdW5kbGVQYWdlR2V0SGVhZGVyTGF5ZXIp
OgorICAgICAgICAoV0tCdW5kbGVQYWdlU2V0SGVhZGVyTGF5ZXIpOgorICAgICAgICAoV0tCdW5k
bGVQYWdlR2V0Rm9vdGVyTGF5ZXIpOgorICAgICAgICAoV0tCdW5kbGVQYWdlU2V0Rm9vdGVyTGF5
ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgIChX
ZWJQYWdlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldFRvcE92ZXJoYW5nSW1hZ2UpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpzZXRCb3R0b21PdmVyaGFuZ0ltYWdlKToKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldEhlYWRlckxheWVyKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0SGVhZGVyTGF5ZXJXaXRoSGVpZ2h0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6Z2V0Rm9vdGVyTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjpzZXRGb290ZXJMYXllcldpdGhIZWlnaHQpOgorCiAyMDEzLTAzLTI2ICBIYXlhdG8gSXRv
ICA8aGF5YXRvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBBbGxvdyBTaGFkb3dDb250ZW50cyBp
biBIaXRUZXN0cyBieSBkZWZhdWx0LgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktp
dDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTQ2OTY0KQorKysgU291cmNl
L1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC01NzksNiArNTc5LDggQEAKIAkJOTM1RUVCQTQxMjc3NjFENjAwMzMyMkI4IC8qIEluamVj
dGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1RUVCOTIxMjc3NjE1RDAwMzMyMkI4IC8qIEluamVjdGVk
QnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5oICovOyB9OwogCQk5MzkxRjJDQTEyMUI2NzlBMDBF
QkY3RTggLyogV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzOTFGMjg0MTIxQjM4RjUwMEVCRjdFOCAvKiBX
ZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tICovOyB9OwogCQk5MzkxRjJDQjEyMUI2N0FEMDBF
QkY3RTggLyogV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM5MUYyODMxMjFCMzhGNTAwRUJGN0U4IC8qIFdl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCAqLzsgfTsKKwkJOTM5NEFFNDQxNzAyQjI1QjAwMzQ0
MjMyIC8qIFdLQnVuZGxlUGFnZVByaXZhdGVNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzOTRBRTQyMTcwMkIyNUIwMDM0NDIzMiAvKiBXS0J1bmRs
ZVBhZ2VQcml2YXRlTWFjLmggKi87IH07CisJCTkzOTRBRTQ1MTcwMkIyNUIwMDM0NDIzMiAvKiBX
S0J1bmRsZVBhZ2VQcml2YXRlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTM5NEFFNDMxNzAyQjI1QjAwMzQ0MjMyIC8qIFdLQnVuZGxlUGFnZVBy
aXZhdGVNYWMubW0gKi87IH07CiAJCTkzOUFFNzY2MTMxNkU5OUMwMEFFMDZBNiAvKiBXZWJDb3Jl
QXJndW1lbnRDb2RlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTM5QUU3NjUxMzE2RTk5QzAwQUUwNkE2IC8qIFdlYkNvcmVBcmd1bWVudENvZGVy
cy5jcHAgKi87IH07CiAJCTkzRkM2N0JEMTJEM0NDRjIwMEE2MDYxMCAvKiBEZWNvZGVyQWRhcHRl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0ZD
Njc5RDEyRDNDQzc0MDBBNjA2MTAgLyogRGVjb2RlckFkYXB0ZXIuY3BwICovOyB9OwogCQk5M0ZD
NjdCRTEyRDNDQ0YyMDBBNjA2MTAgLyogRGVjb2RlckFkYXB0ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRkM2NzlFMTJEM0NDNzQwMEE2MDYxMCAv
KiBEZWNvZGVyQWRhcHRlci5oICovOyB9OwpAQCAtMTk5Nyw2ICsxOTk5LDggQEAKIAkJOTM1RUVC
OTgxMjc3NjE2RDAwMzMyMkI4IC8qIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW0u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM5MUYyODMxMjFCMzhGNTAwRUJGN0U4
IC8qIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5MzkxRjI4NDEyMUIzOEY1MDBFQkY3RTggLyogV2ViRnJhbWVOZXR3b3JraW5n
Q29udGV4dC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkZy
YW1lTmV0d29ya2luZ0NvbnRleHQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkz
OTRBRTQyMTcwMkIyNUIwMDM0NDIzMiAvKiBXS0J1bmRsZVBhZ2VQcml2YXRlTWFjLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnVuZGxlUGFnZVByaXZhdGVNYWMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTM5NEFFNDMxNzAyQjI1QjAwMzQ0MjMyIC8qIFdL
QnVuZGxlUGFnZVByaXZhdGVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXS0J1bmRsZVBhZ2VQcml2YXRlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5MzlBRTc2NTEzMTZFOTlDMDBBRTA2QTYgLyogV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvcmVBcmd1bWVu
dENvZGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRkM2NzlEMTJEM0ND
NzQwMEE2MDYxMCAvKiBEZWNvZGVyQWRhcHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEZWNvZGVyQWRhcHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzRkM2NzlFMTJEM0NDNzQwMEE2MDYxMCAvKiBEZWNvZGVyQWRhcHRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWNvZGVyQWRhcHRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMzY3OSw2ICszNjgzLDE1IEBACiAJCQluYW1lID0gbWFjOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJOTM5NEFFNDExNzAyQjI1QjAwMzQ0
MjMyIC8qIG1hYyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJ
CQkJOTM5NEFFNDIxNzAyQjI1QjAwMzQ0MjMyIC8qIFdLQnVuZGxlUGFnZVByaXZhdGVNYWMuaCAq
LywKKwkJCQk5Mzk0QUU0MzE3MDJCMjVCMDAzNDQyMzIgLyogV0tCdW5kbGVQYWdlUHJpdmF0ZU1h
Yy5tbSAqLywKKwkJCSk7CisJCQlwYXRoID0gbWFjOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKIAkJOUY0RjU5NDAxNjQ4QjQwNzAwNDkzQjdFIC8qIG1hYyAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC00MjcwLDYgKzQyODMsNyBAQAogCQlC
QzIwNEVFODExQzgzRUI3MDA4RjMzNzUgLyogYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCisJCQkJOTM5NEFFNDExNzAyQjI1QjAwMzQ0MjMyIC8qIG1hYyAqLywK
IAkJCQlCQzIwNEVFOTExQzgzRUM4MDA4RjMzNzUgLyogV0tCdW5kbGUuY3BwICovLAogCQkJCUJD
MjA0RUVBMTFDODNFQzgwMDhGMzM3NSAvKiBXS0J1bmRsZS5oICovLAogCQkJCUJDMjA0RUVCMTFD
ODNFQzgwMDhGMzM3NSAvKiBXS0J1bmRsZUFQSUNhc3QuaCAqLywKQEAgLTU2MzgsNiArNTY1Miw3
IEBACiAJCQkJRTE0QTk1NEExNkUwMTZBNDAwNjhERTgyIC8qIE5ldHdvcmtQcm9jZXNzUGxhdGZv
cm1TdHJhdGVnaWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTc5OEM3QTE2RTY4MTg4MDAyNDAx
MzkgLyogTmV0d29ya0Jsb2JSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE1MjU1MUIx
NzAxMTgxOTAwM0Q3QURCIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRlck1lc3NhZ2VzLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk5Mzk0QUU0NDE3MDJCMjVCMDAzNDQyMzIgLyogV0tCdW5kbGVQYWdlUHJp
dmF0ZU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC02ODQ2LDYgKzY4NjEsNyBAQAogCQkJCUUxNEE5
NTQ5MTZFMDE2QTQwMDY4REU4MiAvKiBOZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTc5OEM3OTE2RTY4MTg4MDAyNDAxMzkgLyogTmV0d29y
a0Jsb2JSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTUyNTUxQTE3MDExODE5MDAz
RDdBREIgLyogTmV0d29ya1Jlc291cmNlTG9hZGVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTkzOTRBRTQ1MTcwMkIyNUIwMDM0NDIzMiAvKiBXS0J1bmRsZVBhZ2VQcml2
YXRlTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9jL21hYy9XS0J1bmRsZVBhZ2VQcml2YXRlTWFjLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9t
YWMvV0tCdW5kbGVQYWdlUHJpdmF0ZU1hYy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9tYWMvV0tCdW5kbGVQYWdlUHJpdmF0
ZU1hYy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBXS0J1bmRsZVBhZ2VQcml2YXRlTWFjX2gKKyNkZWZpbmUgV0tCdW5kbGVQYWdlUHJpdmF0ZU1h
Y19oCisKKyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgorCitAY2xhc3MgQ0FMYXllcjsKKwor
I2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitXS19FWFBPUlQgQ0FM
YXllciAqIFdLQnVuZGxlUGFnZUdldEhlYWRlckxheWVyKFdLQnVuZGxlUGFnZVJlZiBwYWdlKTsK
K1dLX0VYUE9SVCB2b2lkIFdLQnVuZGxlUGFnZVNldEhlYWRlckxheWVyKFdLQnVuZGxlUGFnZVJl
ZiBwYWdlLCBDQUxheWVyICpoZWFkZXJMYXllciwgaW50IGhlaWdodCk7CitXS19FWFBPUlQgQ0FM
YXllciAqIFdLQnVuZGxlUGFnZUdldEZvb3RlckxheWVyKFdLQnVuZGxlUGFnZVJlZiBwYWdlKTsK
K1dLX0VYUE9SVCB2b2lkIFdLQnVuZGxlUGFnZVNldEZvb3RlckxheWVyKFdLQnVuZGxlUGFnZVJl
ZiBwYWdlLCBDQUxheWVyICpmb290ZXJMYXllciwgaW50IGhlaWdodCk7CisKKyNpZmRlZiBfX2Nw
bHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBXS0J1bmRsZVBhZ2VQcml2YXRlTWFjX2gg
Ki8KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2Mv
bWFjL1dLQnVuZGxlUGFnZVByaXZhdGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9tYWMvV0tCdW5kbGVQYWdlUHJpdmF0
ZU1hYy5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2MvbWFjL1dLQnVuZGxlUGFnZVByaXZhdGVNYWMubW0JKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV0tCdW5kbGVQYWdlUHJpdmF0ZU1hYy5oIgorCisjaW5jbHVkZSAiV0tCdW5kbGVBUElD
YXN0LmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0Owor
CitDQUxheWVyICogV0tCdW5kbGVQYWdlR2V0SGVhZGVyTGF5ZXIoV0tCdW5kbGVQYWdlUmVmIHBh
Z2UpCit7CisgICAgcmV0dXJuIHRvSW1wbChwYWdlKS0+Z2V0SGVhZGVyTGF5ZXIoKTsKK30KKwor
dm9pZCBXS0J1bmRsZVBhZ2VTZXRIZWFkZXJMYXllcihXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgQ0FM
YXllciAqaGVhZGVyTGF5ZXIsIGludCBoZWlnaHQpCit7CisgICAgdG9JbXBsKHBhZ2UpLT5zZXRI
ZWFkZXJMYXllcldpdGhIZWlnaHQoaGVhZGVyTGF5ZXIsIGhlaWdodCk7Cit9CisKK0NBTGF5ZXIg
KiBXS0J1bmRsZVBhZ2VHZXRGb290ZXJMYXllcihXS0J1bmRsZVBhZ2VSZWYgcGFnZSkKK3sKKyAg
ICByZXR1cm4gdG9JbXBsKHBhZ2UpLT5nZXRGb290ZXJMYXllcigpOworfQorCit2b2lkIFdLQnVu
ZGxlUGFnZVNldEZvb3RlckxheWVyKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBDQUxheWVyICpmb290
ZXJMYXllciwgaW50IGhlaWdodCkKK3sKKyAgICB0b0ltcGwocGFnZSktPnNldEZvb3RlckxheWVy
V2l0aEhlaWdodChmb290ZXJMYXllciwgaGVpZ2h0KTsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gMTQ2OTY0KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtOTUsNiArOTUsNyBAQAogI2luY2x1ZGUgIkRpY3Rpb25hcnlQb3B1cEluZm8uaCIKICNpbmNs
dWRlICJMYXllckhvc3RpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgor
T0JKQ19DTEFTUyBDQUxheWVyOwogT0JKQ19DTEFTUyBOU0RpY3Rpb25hcnk7CiBPQkpDX0NMQVNT
IE5TT2JqZWN0OwogT0JKQ19DTEFTUyBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0OwpAQCAt
MzY4LDYgKzM2OSwxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFRvcE92ZXJoYW5nSW1hZ2Uo
UGFzc1JlZlB0cjxXZWJJbWFnZT4pOwogICAgIHZvaWQgc2V0Qm90dG9tT3ZlcmhhbmdJbWFnZShQ
YXNzUmVmUHRyPFdlYkltYWdlPik7CisKKyAgICBDQUxheWVyICpnZXRIZWFkZXJMYXllcigpIGNv
bnN0OworICAgIHZvaWQgc2V0SGVhZGVyTGF5ZXJXaXRoSGVpZ2h0KENBTGF5ZXIgKiwgaW50KTsK
KyAgICBDQUxheWVyICpnZXRGb290ZXJMYXllcigpIGNvbnN0OworICAgIHZvaWQgc2V0Rm9vdGVy
TGF5ZXJXaXRoSGVpZ2h0KENBTGF5ZXIgKiwgaW50KTsKICNlbmRpZgogCiAgICAgYm9vbCB3aW5k
b3dJc0ZvY3VzZWQoKSBjb25zdDsKQEAgLTg4OCw2ICs4OTQsOSBAQCBwcml2YXRlOgogCiAgICAg
UmV0YWluUHRyPFdLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3Q+IG1fbW9ja0FjY2Vzc2liaWxp
dHlFbGVtZW50OwogCisgICAgUmV0YWluUHRyPENBTGF5ZXI+IG1faGVhZGVyTGF5ZXI7CisgICAg
UmV0YWluUHRyPENBTGF5ZXI+IG1fZm9vdGVyTGF5ZXI7CisKICAgICBXZWJDb3JlOjpLZXlib2Fy
ZEV2ZW50KiBtX2tleWJvYXJkRXZlbnRCZWluZ0ludGVycHJldGVkOwogCiAjZWxpZiBIQVZFKEFD
Q0VTU0lCSUxJVFkpICYmIChQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkpCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFj
Lm1tCShyZXZpc2lvbiAxNDY5NjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1dlYlBhZ2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNp
bXBvcnQgIldlYlByZWZlcmVuY2VzU3RvcmUuaCIKICNpbXBvcnQgIldlYlByb2Nlc3MuaCIKICNp
bXBvcnQgPFBERktpdC9QREZLaXQuaD4KKyNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9BWE9iamVjdENhY2hlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Zv
Y3VzQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgpAQCAtNzk2LDcgKzc5
Nyw3IEBAIHZvaWQgV2ViUGFnZTo6c2V0VG9wT3ZlcmhhbmdJbWFnZShQYXNzUmUKICAgICBsYXll
ci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgwLCAtaW1hZ2UtPnNpemUoKS5oZWlnaHQoKSkpOwog
CiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNnSW1hZ2UgPSBpbWFnZS0+Yml0bWFwKCktPm1h
a2VDR0ltYWdlQ29weSgpOwotICAgIGxheWVyLT5wbGF0Zm9ybUxheWVyKCkuY29udGVudHMgPShp
ZCljZ0ltYWdlLmdldCgpOworICAgIGxheWVyLT5wbGF0Zm9ybUxheWVyKCkuY29udGVudHMgPSAo
aWQpY2dJbWFnZS5nZXQoKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpzZXRCb3R0b21PdmVyaGFuZ0lt
YWdlKFBhc3NSZWZQdHI8V2ViSW1hZ2U+IGltYWdlKQpAQCAtODEyLDcgKzgxMyw1OSBAQCB2b2lk
IFdlYlBhZ2U6OnNldEJvdHRvbU92ZXJoYW5nSW1hZ2UoUGFzCiAgICAgbGF5ZXItPnNldFNpemUo
aW1hZ2UtPnNpemUoKSk7CiAgICAgCiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNnSW1hZ2Ug
PSBpbWFnZS0+Yml0bWFwKCktPm1ha2VDR0ltYWdlQ29weSgpOwotICAgIGxheWVyLT5wbGF0Zm9y
bUxheWVyKCkuY29udGVudHMgPShpZCljZ0ltYWdlLmdldCgpOworICAgIGxheWVyLT5wbGF0Zm9y
bUxheWVyKCkuY29udGVudHMgPSAoaWQpY2dJbWFnZS5nZXQoKTsKK30KKworQ0FMYXllciAqV2Vi
UGFnZTo6Z2V0SGVhZGVyTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2hlYWRlckxheWVy
LmdldCgpOworfQorCit2b2lkIFdlYlBhZ2U6OnNldEhlYWRlckxheWVyV2l0aEhlaWdodChDQUxh
eWVyICpjaGlsZExheWVyLCBpbnQgaGVpZ2h0KQoreworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3
ID0gbV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3KCk7CisgICAgaWYgKCFmcmFtZVZpZXcp
CisgICAgICAgIHJldHVybjsKKworICAgIG1faGVhZGVyTGF5ZXIgPSBjaGlsZExheWVyOworICAg
IEdyYXBoaWNzTGF5ZXIqIHBhcmVudExheWVyID0gZnJhbWVWaWV3LT5zZXRXYW50c0xheWVyRm9y
SGVhZGVyKG1faGVhZGVyTGF5ZXIpOworICAgIGlmICghcGFyZW50TGF5ZXIpIHsKKyAgICAgICAg
ZnJhbWVWaWV3LT5zZXRIZWFkZXJIZWlnaHQoMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBtX2hlYWRlckxheWVyLmdldCgpLmJvdW5kcyA9IENHUmVjdE1ha2UoMCwgMCwgc2l6ZSgp
LndpZHRoKCksIGhlaWdodCk7CisgICAgcGFyZW50TGF5ZXItPnNldFNpemUoRmxvYXRTaXplKG1f
aGVhZGVyTGF5ZXIuZ2V0KCkuYm91bmRzLnNpemUpKTsKKworICAgIGZyYW1lVmlldy0+c2V0SGVh
ZGVySGVpZ2h0KGhlaWdodCk7CisgICAgW3BhcmVudExheWVyLT5wbGF0Zm9ybUxheWVyKCkgYWRk
U3VibGF5ZXI6bV9oZWFkZXJMYXllci5nZXQoKV07Cit9CisKK0NBTGF5ZXIgKldlYlBhZ2U6Omdl
dEZvb3RlckxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mb290ZXJMYXllci5nZXQoKTsK
K30KKwordm9pZCBXZWJQYWdlOjpzZXRGb290ZXJMYXllcldpdGhIZWlnaHQoQ0FMYXllciAqY2hp
bGRMYXllciwgaW50IGhlaWdodCkKK3sKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fbWFp
bkZyYW1lLT5jb3JlRnJhbWUoKS0+dmlldygpOworICAgIGlmICghZnJhbWVWaWV3KSB7CisgICAg
ICAgIGZyYW1lVmlldy0+c2V0Rm9vdGVySGVpZ2h0KDApOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV9mb290ZXJMYXllciA9IGNoaWxkTGF5ZXI7CisgICAgR3JhcGhpY3NMYXllciog
cGFyZW50TGF5ZXIgPSBmcmFtZVZpZXctPnNldFdhbnRzTGF5ZXJGb3JGb290ZXIobV9mb290ZXJM
YXllcik7CisgICAgaWYgKCFwYXJlbnRMYXllcikgeworICAgICAgICBmcmFtZVZpZXctPnNldEZv
b3RlckhlaWdodCgwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZm9vdGVyTGF5
ZXIuZ2V0KCkuYm91bmRzID0gQ0dSZWN0TWFrZSgwLCAwLCBzaXplKCkud2lkdGgoKSwgaGVpZ2h0
KTsKKyAgICBwYXJlbnRMYXllci0+c2V0U2l6ZShGbG9hdFNpemUobV9mb290ZXJMYXllci5nZXQo
KS5ib3VuZHMuc2l6ZSkpOworCisgICAgZnJhbWVWaWV3LT5zZXRGb290ZXJIZWlnaHQoaGVpZ2h0
KTsKKyAgICBbcGFyZW50TGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSBhZGRTdWJsYXllcjptX2Zvb3Rl
ckxheWVyLmdldCgpXTsKIH0KIAogdm9pZCBXZWJQYWdlOjpjb21wdXRlUGFnZXNGb3JQcmludGlu
Z1BERkRvY3VtZW50KHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFByaW50SW5mbyYgcHJpbnRJbmZv
LCBWZWN0b3I8SW50UmVjdD4mIHJlc3VsdFBhZ2VSZWN0cykK
</data>
<flag name="review"
          id="217067"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>