<?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>15671</bug_id>
          
          <creation_ts>2007-10-24 13:21:32 -0700</creation_ts>
          <short_desc>[Transforms] The caret doesn&apos;t blink inside transformed content.</short_desc>
          <delta_ts>2013-01-22 15:45:00 -0800</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>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>21942</dependson>
          <blocked>15670</blocked>
    
    <blocked>18751</blocked>
    
    <blocked>22304</blocked>
    
    <blocked>19058</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>eric</cc>
    
    <cc>gregg</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>mitz</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>59364</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2007-10-24 13:21:32 -0700</bug_when>
    <thetext>Caret rects should be reworked to not rely on absolute position.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96808</commentid>
    <comment_count>1</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-27 16:05:23 -0700</bug_when>
    <thetext>*** Bug 21907 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96809</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-27 16:05:30 -0700</bug_when>
    <thetext>RenderText::caretRect() calls absolutePositionForContent(), which fails to take
transforms into account.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97989</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-11-07 17:28:20 -0800</bug_when>
    <thetext>This is another case, like bug 21906, where someone is trying to draw an absolute rectangle, but there&apos;s a transform in the parent chain which changes the CTM. The caret drawing is going to have to be &quot;more local&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98085</commentid>
    <comment_count>4</comment_count>
      <attachid>25002</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-11-09 11:15:49 -0800</bug_when>
    <thetext>Created attachment 25002
WIP patch, makes caret painting use local coords</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98588</commentid>
    <comment_count>5</comment_count>
      <attachid>25118</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-11-12 23:01:10 -0800</bug_when>
    <thetext>Created attachment 25118
WIP patch 2

This patch has problems with scrolled textareas because the renderer used to compute the caret coords isn&apos;t necessarily the one calling paintCaret(); see RenderBlock::paintCaret().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98853</commentid>
    <comment_count>6</comment_count>
      <attachid>25182</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-11-14 23:33:56 -0800</bug_when>
    <thetext>Created attachment 25182
Final patch, changlog.

Patch includes a new base for the one existing LayoutTest that shows a transformed caret. I can add more if appropriate.

All pixel tests pass with this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98982</commentid>
    <comment_count>7</comment_count>
      <attachid>25204</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-11-16 18:18:45 -0800</bug_when>
    <thetext>Created attachment 25204
Testcase for arrow key navigation with transforms</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99004</commentid>
    <comment_count>8</comment_count>
      <attachid>25209</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-11-16 22:52:59 -0800</bug_when>
    <thetext>Created attachment 25209
Final patch, doesn&apos;t break arrow navigation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99006</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-11-16 22:56:06 -0800</bug_when>
    <thetext>Filed bug 22305 on improving arrow navigation with transforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101501</commentid>
    <comment_count>10</comment_count>
      <attachid>25209</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-12-05 09:38:32 -0800</bug_when>
    <thetext>Comment on attachment 25209
Final patch, doesn&apos;t break arrow navigation

+            // First compute a rect local to the rendere at the selection start

Typo: you meant &quot;renderer&quot;

&quot;// because it&apos;s m_frame is always 0.&quot;

it&apos;s should be its

&quot;+     , m_beginMinWidth(0)
+     , m_endMinWidth(0)&quot;

This seems irrelevant to the patch?  Not that I&apos;m complaining, just curious.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101666</commentid>
    <comment_count>11</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-12-06 11:18:42 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; &quot;+     , m_beginMinWidth(0)
&gt; +     , m_endMinWidth(0)&quot;
&gt; 
&gt; This seems irrelevant to the patch?  Not that I&apos;m complaining, just curious.

Yes, it&apos;s not relevant to the caret changes, but just fixing some variable that I noticed during debugging were not initialized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101667</commentid>
    <comment_count>12</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-12-06 11:58:43 -0800</bug_when>
    <thetext>	M	WebKit/mac/ChangeLog
	M	WebKit/mac/WebView/WebFrame.mm
	M	WebKit/qt/ChangeLog
	M	WebKit/qt/Api/qwebpage.cpp
	M	WebKit/gtk/webkit/webkitwebview.cpp
	M	WebKit/gtk/ChangeLog
	M	WebKit/win/ChangeLog
	M	WebKit/win/WebView.cpp
	M	WebCore/editing/mac/SelectionControllerMac.mm
	M	WebCore/editing/SelectionController.h
	M	WebCore/editing/DeleteSelectionCommand.cpp
	M	WebCore/editing/VisiblePosition.cpp
	M	WebCore/editing/SelectionController.cpp
	M	WebCore/editing/VisiblePosition.h
	M	WebCore/ChangeLog
	M	WebCore/WebCore.base.exp
	M	WebCore/page/Frame.h
	M	WebCore/page/AccessibilityRenderObject.cpp
	M	WebCore/page/Frame.cpp
	M	WebCore/html/HTMLElement.cpp
	M	WebCore/rendering/RenderObject.cpp
	M	WebCore/rendering/RenderFlow.h
	M	WebCore/rendering/RenderBox.h
	M	WebCore/rendering/RenderFlow.cpp
	M	WebCore/rendering/RenderSVGInlineText.h
	M	WebCore/rendering/RenderObject.h
	M	WebCore/rendering/RenderLayer.cpp
	M	WebCore/rendering/RenderSVGInlineText.cpp
	M	WebCore/rendering/RenderText.cpp
	M	WebCore/rendering/RenderBox.cpp
	M	WebCore/rendering/RenderBlock.cpp
	M	WebCore/rendering/RenderBlock.h
	M	WebCore/rendering/LayoutState.cpp
	M	WebCore/rendering/RenderText.h
	M	LayoutTests/platform/mac/fast/transforms/transformed-focused-text-input-expected.checksum
	A	LayoutTests/platform/mac/fast/transforms/transformed-caret-expected.png
	M	LayoutTests/platform/mac/fast/transforms/transformed-focused-text-input-expected.png
	A	LayoutTests/platform/mac/fast/transforms/transformed-caret-expected.checksum
	A	LayoutTests/platform/mac/fast/transforms/transformed-caret-expected.txt
	M	LayoutTests/ChangeLog
	A	LayoutTests/fast/transforms/transformed-caret.html
r39069 = 2b2b6ce0b2190e0531a3182661dd483b8202f0b9 (trunk)
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101696</commentid>
    <comment_count>13</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-12-06 17:08:06 -0800</bug_when>
    <thetext>And one more pixel test updated:
Committed r39074
	M	LayoutTests/platform/mac/fast/forms/search-transformed-expected.png
	M	LayoutTests/platform/mac/fast/forms/search-transformed-expected.checksum
	M	LayoutTests/ChangeLog
r39074 = 75efff3244d98c9f0f7a2dc6000ce143bfa4a6a0 (trunk)
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702684</commentid>
    <comment_count>14</comment_count>
    <who name="Gregg">gregg</who>
    <bug_when>2012-08-22 21:49:10 -0700</bug_when>
    <thetext>Has this really ben resolved? I&apos;m still seeing exactly this issue in Chrome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702688</commentid>
    <comment_count>15</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-08-22 22:13:58 -0700</bug_when>
    <thetext>Please open a new bug with a testcase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703103</commentid>
    <comment_count>16</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-08-23 10:11:11 -0700</bug_when>
    <thetext>Bug 18751 covers an existing caret drawing problem with transforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703136</commentid>
    <comment_count>17</comment_count>
    <who name="Gregg">gregg</who>
    <bug_when>2012-08-23 10:43:20 -0700</bug_when>
    <thetext>True, but then this issue isn&apos;t really &quot;RESOLVED FIXED&quot;. It&apos;s a bit misleading. Regardless, thanks for pointing me to the linked bug report. I&apos;ll keep an eye on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703137</commentid>
    <comment_count>18</comment_count>
    <who name="Gregg">gregg</who>
    <bug_when>2012-08-23 10:45:00 -0700</bug_when>
    <thetext>No, wait, that bug (18751) says that the caret blinking problem was split off into this one. Am I missing something here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704417</commentid>
    <comment_count>19</comment_count>
    <who name="Gregg">gregg</who>
    <bug_when>2012-08-24 14:25:50 -0700</bug_when>
    <thetext>I have reproduced the issue in a jsfiddle. I&apos;m using the isotope plugin in my project, so I used it in the jsfiddle to show this issue. Isotope uses the scale3d transform. When this transform is not used, the issue is not observed. To turn off transforms in isotope, simply add &quot;transformsEnabled: false&quot; to the passed options.

http://jsfiddle.net/5Rqv8/

To see the issue, focus any textbox. The caret won&apos;t be blinking. Type and see that the caret still isn&apos;t blinking. Arrow key to the right and see that the caret doesn&apos;t move. Type again and see that the text shows up where the caret should be and also moves the caret into position.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704456</commentid>
    <comment_count>20</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-24 15:24:53 -0700</bug_when>
    <thetext>Caret blinking problems are usually repaint issues.  Could you please file a separate bug with a test case?  If you CC me, I&apos;m happy to take a look.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705538</commentid>
    <comment_count>21</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-08-27 12:44:13 -0700</bug_when>
    <thetext>*** Bug 94985 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813492</commentid>
    <comment_count>22</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-01-22 15:45:00 -0800</bug_when>
    <thetext>*** Bug 94985 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25002</attachid>
            <date>2008-11-09 11:15:49 -0800</date>
            <delta_ts>2008-11-12 23:01:10 -0800</delta_ts>
            <desc>WIP patch, makes caret painting use local coords</desc>
            <filename>15671_partial_patch.txt</filename>
            <type>text/plain</type>
            <size>33924</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29yZS5i
YXNlLmV4cAppbmRleCA3N2QwZGFlLi4zNGY1Mzg0IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUuYmFzZS5leHAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCkBAIC03NjUsNyArNzY1
LDggQEAgX19aTks3V2ViQ29yZTE1UmVzb3VyY2VSZXF1ZXN0MTJuc1VSTFJlcXVlc3RFdgogX19a
Tks3V2ViQ29yZTE1VmlzaWJsZVBvc2l0aW9uMTRjaGFyYWN0ZXJBZnRlckV2CiBfX1pOSzdXZWJD
b3JlMTVWaXNpYmxlUG9zaXRpb240bmV4dEViCiBfX1pOSzdXZWJDb3JlMTVWaXNpYmxlUG9zaXRp
b244cHJldmlvdXNFYgotX19aTks3V2ViQ29yZTE1VmlzaWJsZVBvc2l0aW9uOWNhcmV0UmVjdEV2
CitfX1pOSzdXZWJDb3JlMTVWaXNpYmxlUG9zaXRpb24xNGxvY2FsQ2FyZXRSZWN0RXYKK19fWk5L
N1dlYkNvcmUxNVZpc2libGVQb3NpdGlvbjE5YWJzb2x1dGVDYXJldEJvdW5kc0V2CiBfX1pOSzdX
ZWJDb3JlMTZIVE1MSW5wdXRFbGVtZW50MTJhdXRvQ29tcGxldGVFdgogX19aTks3V2ViQ29yZTE2
UmVzb3VyY2VSZXNwb25zZTEzbnNVUkxSZXNwb25zZUV2CiBfX1pOSzdXZWJDb3JlMTdSZXNvdXJj
ZUVycm9yQmFzZThsYXp5SW5pdEV2CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZC5jcHAKaW5kZXggMGM5ZDY4YS4uZDkxNzk5YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0
aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9EZWxl
dGVTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNTU0LDcgKzU1NCw3IEBAIHZvaWQgRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3JhcGhzKCkKICAgICAvLyBUaGUgcnVsZSBmb3IgbWVy
Z2luZyBpbnRvIGFuIGVtcHR5IGJsb2NrIGlzOiBvbmx5IGRvIHNvIGlmIGl0cyBmYXJ0aGVyIHRv
IHRoZSByaWdodC4KICAgICAvLyBGSVhNRTogQ29uc2lkZXIgUlRMLgogICAgIC8vIEZJWE1FOiBo
YW5kbGVTcGVjaWFsQ2FzZUJSRGVsZXRlIHByZXZlbnRzIHVzIGZyb20gZ2V0dGluZyBoZXJlIGlu
IGEgY2FzZSBsaWtlIDx1bD48bGk+Zm9vPGJyPjxicj48L2xpPjwvdWw+XmZvbwotICAgIGlmIChp
c1N0YXJ0T2ZQYXJhZ3JhcGgobWVyZ2VEZXN0aW5hdGlvbikgJiYgc3RhcnRPZlBhcmFncmFwaFRv
TW92ZS5jYXJldFJlY3QoKS54KCkgPiBtZXJnZURlc3RpbmF0aW9uLmNhcmV0UmVjdCgpLngoKSkg
eworICAgIGlmIChpc1N0YXJ0T2ZQYXJhZ3JhcGgobWVyZ2VEZXN0aW5hdGlvbikgJiYgc3RhcnRP
ZlBhcmFncmFwaFRvTW92ZS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkueCgpID4gbWVyZ2VEZXN0aW5h
dGlvbi5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkueCgpKSB7CiAgICAgICAgIEFTU0VSVChtZXJnZURl
c3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpLm5vZGUoKS0+aGFzVGFnTmFt
ZShiclRhZykpOwogICAgICAgICByZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMobWVyZ2VEZXN0
aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKS5ub2RlKCkpOwogICAgICAgICBt
X2VuZGluZ1Bvc2l0aW9uID0gc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwIGIv
V2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IDg5ZGFmMzMuLjMy
YjE1NWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNw
cAorKysgYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKQEAgLTU1LDYg
KzU1LDggQEAKIAogI2RlZmluZSBFRElUX0RFQlVHIDAKIAordXNpbmcgbmFtZXNwYWNlIHN0ZDsK
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpAQCAt
NjIsNyArNjQsOCBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogY29uc3QgaW50IE5vWFBv
c0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uID0gSU5UX01JTjsKIAogU2VsZWN0aW9uQ29udHJv
bGxlcjo6U2VsZWN0aW9uQ29udHJvbGxlcihGcmFtZSogZnJhbWUsIGJvb2wgaXNEcmFnQ2FyZXRD
b250cm9sbGVyKQotICAgIDogbV9uZWVkc0xheW91dCh0cnVlKQorICAgIDogbV9jYXJldFJlbmRl
cmVyKDApCisgICAgLCBtX25lZWRzTGF5b3V0KHRydWUpCiAgICAgLCBtX2xhc3RDaGFuZ2VXYXNI
b3Jpem9udGFsRXh0ZW5zaW9uKGZhbHNlKQogICAgICwgbV9mcmFtZShmcmFtZSkKICAgICAsIG1f
aXNEcmFnQ2FyZXRDb250cm9sbGVyKGlzRHJhZ0NhcmV0Q29udHJvbGxlcikKQEAgLTU1Miw5ICs1
NTUsOSBAQCBib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRl
ciwgRURpcmVjdGlvbiBkaXIsIFRleHRHcmFudWxhcgogfQogCiAvLyBGSVhNRTogTWF5YmUgYmFz
ZWxpbmUgd291bGQgYmUgYmV0dGVyPwotc3RhdGljIGJvb2wgY2FyZXRZKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiAmYywgaW50ICZ5KQorc3RhdGljIGJvb2wgYWJzb2x1dGVDYXJldFkoY29uc3QgVmlz
aWJsZVBvc2l0aW9uICZjLCBpbnQgJnkpCiB7Ci0gICAgSW50UmVjdCByZWN0ID0gYy5jYXJldFJl
Y3QoKTsKKyAgICBJbnRSZWN0IHJlY3QgPSBjLmFic29sdXRlQ2FyZXRCb3VuZHMoKTsKICAgICBp
ZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB5ID0gcmVjdC55
KCkgKyByZWN0LmhlaWdodCgpIC8gMjsKQEAgLTU5OCw3ICs2MDEsNyBAQCBib29sIFNlbGVjdGlv
bkNvbnRyb2xsZXI6Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgaW50IHZlcnRpY2FsRGlzdGFu
Y2UsIGJvb2wgdQogICAgIH0KIAogICAgIGludCBzdGFydFk7Ci0gICAgaWYgKCFjYXJldFkocG9z
LCBzdGFydFkpKQorICAgIGlmICghYWJzb2x1dGVDYXJldFkocG9zLCBzdGFydFkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKHVwKQogICAgICAgICBzdGFydFkgPSAtc3RhcnRZOwpA
QCAtNjExLDcgKzYxNCw3IEBAIGJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5KEVBbHRl
cmF0aW9uIGFsdGVyLCBpbnQgdmVydGljYWxEaXN0YW5jZSwgYm9vbCB1CiAgICAgICAgIGlmIChu
ZXh0LmlzTnVsbCgpIHx8IG5leHQgPT0gcCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBp
bnQgbmV4dFk7Ci0gICAgICAgIGlmICghY2FyZXRZKG5leHQsIG5leHRZKSkKKyAgICAgICAgaWYg
KCFhYnNvbHV0ZUNhcmV0WShuZXh0LCBuZXh0WSkpCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgaWYgKHVwKQogICAgICAgICAgICAgbmV4dFkgPSAtbmV4dFk7CkBAIC02ODIsNyArNjg1LDcg
QEAgaW50IFNlbGVjdGlvbkNvbnRyb2xsZXI6OnhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlv
bihFUG9zaXRpb25UeXBlIHR5cGUpCiAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9z
aXRpb24ocG9zLCBtX3NlbC5hZmZpbml0eSgpKTsKICAgICAgICAgLy8gVmlzaWJsZVBvc2l0aW9u
IGNyZWF0aW9uIGNhbiBmYWlsIGhlcmUgaWYgYSBub2RlIGNvbnRhaW5pbmcgdGhlIHNlbGVjdGlv
biBiZWNvbWVzIHZpc2liaWxpdHk6aGlkZGVuCiAgICAgICAgIC8vIGFmdGVyIHRoZSBzZWxlY3Rp
b24gaXMgY3JlYXRlZCBhbmQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgotICAgICAg
ICB4ID0gdmlzaWJsZVBvc2l0aW9uLmlzTm90TnVsbCgpID8gdmlzaWJsZVBvc2l0aW9uLmNhcmV0
UmVjdCgpLngoKSA6IDA7CisgICAgICAgIHggPSB2aXNpYmxlUG9zaXRpb24uaXNOb3ROdWxsKCkg
PyB2aXNpYmxlUG9zaXRpb24uYWJzb2x1dGVDYXJldEJvdW5kcygpLngoKSA6IDA7CiAgICAgICAg
IG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uID0geDsKICAgICB9CiAgICAgZWxzZQpA
QCAtNzMxLDYgKzczNCw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bGF5b3V0KCkKIAog
ICAgIG1fc2VsLnN0YXJ0KCkubm9kZSgpLT5kb2N1bWVudCgpLT51cGRhdGVSZW5kZXJpbmcoKTsK
ICAgICAKKyAgICBtX2NhcmV0UmVuZGVyZXIgPSAwOwogICAgIG1fY2FyZXRSZWN0ID0gSW50UmVj
dCgpOwogICAgIG1fY2FyZXRQb3NpdGlvbk9uTGF5b3V0ID0gSW50UG9pbnQoKTsKICAgICAgICAg
CkBAIC03MzgsMTAgKzc0MiwxMSBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmxheW91dCgp
CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3MobV9zZWwuc3RhcnQoKSwgbV9zZWwuYWZmaW5p
dHkoKSk7CiAgICAgICAgIGlmIChwb3MuaXNOb3ROdWxsKCkpIHsKICAgICAgICAgICAgIEFTU0VS
VChwb3MuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPnJlbmRlcmVyKCkpOwotICAgICAgICAgICAg
bV9jYXJldFJlY3QgPSBwb3MuY2FyZXRSZWN0KCk7CisgICAgICAgICAgICBtX2NhcmV0UmVuZGVy
ZXIgPSBwb3MuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPnJlbmRlcmVyKCk7CisgICAgICAgICAg
ICBtX2NhcmV0UmVjdCA9IHBvcy5sb2NhbENhcmV0UmVjdCgpOwogCiAgICAgICAgICAgICAvLyBG
SVhNRTogYnJva2VuIHdpdGggdHJhbnNmb3JtcwotICAgICAgICAgICAgRmxvYXRQb2ludCBhYnNQ
b3MgPSBwb3MuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPnJlbmRlcmVyKCktPmxvY2FsVG9BYnNv
bHV0ZUZvckNvbnRlbnQoRmxvYXRQb2ludCgpKTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgYWJz
UG9zID0gbV9jYXJldFJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9p
bnQoKSwgZmFsc2UsIHRydWUpOwogICAgICAgICAgICAgbV9jYXJldFBvc2l0aW9uT25MYXlvdXQg
PSByb3VuZGVkSW50UG9pbnQoYWJzUG9zKTsKICAgICAgICAgfQogICAgIH0KQEAgLTc0OSw3ICs3
NTQsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmxheW91dCgpCiAgICAgbV9uZWVkc0xh
eW91dCA9IGZhbHNlOwogfQogCi1JbnRSZWN0IFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNhcmV0UmVj
dCgpIGNvbnN0CitJbnRSZWN0IFNlbGVjdGlvbkNvbnRyb2xsZXI6OmxvY2FsQ2FyZXRSZWN0KCkg
Y29uc3QKIHsKICAgICBpZiAobV9uZWVkc0xheW91dCkKICAgICAgICAgY29uc3RfY2FzdDxTZWxl
Y3Rpb25Db250cm9sbGVyICo+KHRoaXMpLT5sYXlvdXQoKTsKQEAgLTc1NywxMyArNzYyLDE5IEBA
IEludFJlY3QgU2VsZWN0aW9uQ29udHJvbGxlcjo6Y2FyZXRSZWN0KCkgY29uc3QKICAgICBJbnRS
ZWN0IGNhcmV0ID0gbV9jYXJldFJlY3Q7CiAKICAgICBpZiAobV9zZWwuc3RhcnQoKS5ub2RlKCkg
JiYgbV9zZWwuc3RhcnQoKS5ub2RlKCktPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgRmxvYXRQb2lu
dCBhYnNQb3MgPSBtX3NlbC5zdGFydCgpLm5vZGUoKS0+cmVuZGVyZXIoKS0+bG9jYWxUb0Fic29s
dXRlRm9yQ29udGVudChGbG9hdFBvaW50KCkpOwotICAgICAgICBjYXJldC5tb3ZlKHJvdW5kZWRJ
bnRQb2ludChhYnNQb3MpIC0gbV9jYXJldFBvc2l0aW9uT25MYXlvdXQpOworICAgICAgICAvLyBG
SVhNRTogaG93IHRvIGRvIHRoaXM/CisvLyAgICAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBtX3Nl
bC5zdGFydCgpLm5vZGUoKS0+cmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlRm9yQ29udGVudChG
bG9hdFBvaW50KCkpOworLy8gICAgICAgIGNhcmV0Lm1vdmUocm91bmRlZEludFBvaW50KGFic1Bv
cykgLSBtX2NhcmV0UG9zaXRpb25PbkxheW91dCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGNhcmV0
OwogfQogCitJbnRSZWN0IFNlbGVjdGlvbkNvbnRyb2xsZXI6OmFic29sdXRlQ2FyZXRCb3VuZHMo
KSBjb25zdAoreworICAgIHJldHVybiBtX2Fic0NhcmV0Qm91bmRzOworfQorCiBzdGF0aWMgSW50
UmVjdCByZXBhaW50UmVjdEZvckNhcmV0KEludFJlY3QgY2FyZXQpCiB7CiAgICAgaWYgKGNhcmV0
LmlzRW1wdHkoKSkKQEAgLTc3Niw3ICs3ODcsMjEgQEAgc3RhdGljIEludFJlY3QgcmVwYWludFJl
Y3RGb3JDYXJldChJbnRSZWN0IGNhcmV0KQogCiBJbnRSZWN0IFNlbGVjdGlvbkNvbnRyb2xsZXI6
OmNhcmV0UmVwYWludFJlY3QoKSBjb25zdAogewotICAgIHJldHVybiByZXBhaW50UmVjdEZvckNh
cmV0KGNhcmV0UmVjdCgpKTsKKyAgICBJbnRSZWN0IGxvY2FsUmVjdCA9IHJlcGFpbnRSZWN0Rm9y
Q2FyZXQobG9jYWxDYXJldFJlY3QoKSk7CisgICAgCisgICAgSW50UG9pbnQgY2FyZXRUb3BMZWZ0
ID0gbG9jYWxSZWN0LnRvcExlZnQoKTsKKyAgICBJbnRQb2ludCBjYXJldEJvdHRvbVJpZ2h0ID0g
bG9jYWxSZWN0LmJvdHRvbVJpZ2h0KCk7CisKKyAgICAvLyBEb24ndCB1c2UgbV9jYXJldFJlbmRl
cmVyOyBpdCBtYXkgYmUgc3RhbGUKKyAgICBSZW5kZXJPYmplY3QqIGNhcmV0UmVuZGVyZXI7Cisg
ICAgaWYgKG1fc2VsLnN0YXJ0KCkubm9kZSgpICYmIChjYXJldFJlbmRlcmVyID0gbV9zZWwuc3Rh
cnQoKS5ub2RlKCktPnJlbmRlcmVyKCkpKSB7CisgICAgICAgIC8vIEZJWE1FOiB3ZSByZWFsbHkg
bmVlZCB0byBjb21wdXRlIGEgYm91bmRpbmcgcXVhZAorICAgICAgICBGbG9hdFBvaW50IGFic1Rv
cExlZnQgPSBjYXJldFJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KGNhcmV0VG9w
TGVmdCwgZmFsc2UsIHRydWUpOworICAgICAgICBGbG9hdFBvaW50IGFic0JvdHRvbVJpZ2h0ID0g
Y2FyZXRSZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlRm9yQ29udGVudChjYXJldEJvdHRvbVJpZ2h0
LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGVuY2xvc2lu
Z1JlY3QoYWJzVG9wTGVmdCwgYWJzQm90dG9tUmlnaHQpKTsKKyAgICB9CisKKyAgICByZXR1cm4g
SW50UmVjdCgpOwogfQogCiBib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnJlY29tcHV0ZUNhcmV0
UmVjdCgpCkBAIC03OTEsMTYgKzgxNiwyMiBAQCBib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnJl
Y29tcHV0ZUNhcmV0UmVjdCgpCiAgICAgaWYgKCFtX25lZWRzTGF5b3V0KQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKKyAgICBSZW5kZXJPYmplY3QqIG9sZFJlbmRlcmVyID0gbV9jYXJldFJlbmRl
cmVyOwogICAgIEludFJlY3Qgb2xkUmVjdCA9IG1fY2FyZXRSZWN0OwogICAgIG1fbmVlZHNMYXlv
dXQgPSB0cnVlOwotICAgIEludFJlY3QgbmV3UmVjdCA9IGNhcmV0UmVjdCgpOwotICAgIGlmIChv
bGRSZWN0ID09IG5ld1JlY3QpCisgICAgSW50UmVjdCBuZXdSZWN0ID0gbG9jYWxDYXJldFJlY3Qo
KTsKKyAgICBpZiAob2xkUmVjdCA9PSBuZXdSZWN0ICYmIG9sZFJlbmRlcmVyID09IG1fY2FyZXRS
ZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgSW50UmVjdCBvbGRBYnNSZXBh
aW50UmVjdCA9IG1fYWJzQ2FyZXRCb3VuZHM7CisgICAgLy8gRklYTUU6IGNhcmV0UmVwYWludFJl
Y3QgY2FuIHJldHVybiBhbiBlbXB0eSByZWN0CisgICAgbV9hYnNDYXJldEJvdW5kcyA9IGNhcmV0
UmVwYWludFJlY3QoKTsKKyAgICAKICAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IHN0YXRpY19j
YXN0PFJlbmRlclZpZXcqPihtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKSkgewotICAg
ICAgICB2aWV3LT5yZXBhaW50Vmlld1JlY3RhbmdsZShyZXBhaW50UmVjdEZvckNhcmV0KG9sZFJl
Y3QpLCBmYWxzZSk7Ci0gICAgICAgIHZpZXctPnJlcGFpbnRWaWV3UmVjdGFuZ2xlKHJlcGFpbnRS
ZWN0Rm9yQ2FyZXQobmV3UmVjdCksIGZhbHNlKTsKKyAgICAgICAgdmlldy0+cmVwYWludFZpZXdS
ZWN0YW5nbGUob2xkQWJzUmVwYWludFJlY3QsIGZhbHNlKTsKKyAgICAgICAgdmlldy0+cmVwYWlu
dFZpZXdSZWN0YW5nbGUobV9hYnNDYXJldEJvdW5kcywgZmFsc2UpOwogICAgIH0KKwogICAgIHJl
dHVybiB0cnVlOwogfQogCkBAIC04MjgsMTkgKzg1OSwyMSBAQCB2b2lkIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OmludmFsaWRhdGVDYXJldFJlY3QoKQogCiAgICAgaWYgKCFjYXJldFJlY3RDaGFuZ2Vk
KSB7CiAgICAgICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVmll
dyo+KGQtPnJlbmRlcmVyKCkpKQotICAgICAgICAgICAgdmlldy0+cmVwYWludFZpZXdSZWN0YW5n
bGUoY2FyZXRSZXBhaW50UmVjdCgpLCBmYWxzZSk7CisgICAgICAgICAgICB2aWV3LT5yZXBhaW50
Vmlld1JlY3RhbmdsZShtX2Fic0NhcmV0Qm91bmRzLCBmYWxzZSk7CiAgICAgfQogfQogCi12b2lk
IFNlbGVjdGlvbkNvbnRyb2xsZXI6OnBhaW50Q2FyZXQoR3JhcGhpY3NDb250ZXh0ICpwLCBjb25z
dCBJbnRSZWN0ICZyZWN0KQordm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpwYWludENhcmV0KEdy
YXBoaWNzQ29udGV4dCogcCwgaW50IHR4LCBpbnQgdHksIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0
KQogewogICAgIGlmICghIG1fc2VsLmlzQ2FyZXQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKG1fbmVlZHNMYXlvdXQpCiAgICAgICAgIGxheW91dCgpOwotICAgICAgICAKLSAgICBJbnRS
ZWN0IGNhcmV0ID0gaW50ZXJzZWN0aW9uKGNhcmV0UmVjdCgpLCByZWN0KTsKKyAgICAKKyAgICBJ
bnRSZWN0IGRyYXdpbmdSZWN0ID0gbG9jYWxDYXJldFJlY3QoKTsKKyAgICBkcmF3aW5nUmVjdC5t
b3ZlKHR4LCB0eSk7CisgICAgSW50UmVjdCBjYXJldCA9IGludGVyc2VjdGlvbihkcmF3aW5nUmVj
dCwgY2xpcFJlY3QpOwogICAgIGlmICghY2FyZXQuaXNFbXB0eSgpKSB7CiAgICAgICAgIENvbG9y
IGNhcmV0Q29sb3IgPSBDb2xvcjo6YmxhY2s7CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBy
b290RWRpdGFibGVFbGVtZW50KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0
aW9uQ29udHJvbGxlci5oIGIvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaApp
bmRleCBiYTg5NjcwLi4xMTE1MTY5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0
aW9uQ29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVy
LmgKQEAgLTg1LDcgKzg1LDEwIEBAIHB1YmxpYzoKICAgICBQb3NpdGlvbiBzdGFydCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2VsLnN0YXJ0KCk7IH0KICAgICBQb3NpdGlvbiBlbmQoKSBjb25zdCB7IHJl
dHVybiBtX3NlbC5lbmQoKTsgfQogCi0gICAgSW50UmVjdCBjYXJldFJlY3QoKSBjb25zdDsKKyAg
ICAvLyBDYXJldCByZWN0IGxvY2FsIHRvIHRoZSBjYXJldCdzIHJlbmRlcmVyCisgICAgSW50UmVj
dCBsb2NhbENhcmV0UmVjdCgpIGNvbnN0OworICAgIC8vIEJvdW5kcyBvZiAocG9zc2libHkgdHJh
bnNmb3JtZWQpIGNhcmV0IGluIGFic29sdXRlIGNvb3JkcworICAgIEludFJlY3QgYWJzb2x1dGVD
YXJldEJvdW5kcygpIGNvbnN0OwogICAgIHZvaWQgc2V0TmVlZHNMYXlvdXQoYm9vbCBmbGFnID0g
dHJ1ZSk7CiAKICAgICB2b2lkIHNldExhc3RDaGFuZ2VXYXNIb3Jpem9udGFsRXh0ZW5zaW9uKGJv
b2wgYikgeyBtX2xhc3RDaGFuZ2VXYXNIb3Jpem9udGFsRXh0ZW5zaW9uID0gYjsgfQpAQCAtMTA2
LDcgKzEwOSw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgcmVjb21wdXRlQ2FyZXRSZWN0KCk7IC8v
IHJldHVybnMgdHJ1ZSBpZiBjYXJldCByZWN0IG1vdmVkCiAgICAgdm9pZCBpbnZhbGlkYXRlQ2Fy
ZXRSZWN0KCk7Ci0gICAgdm9pZCBwYWludENhcmV0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IElu
dFJlY3QmKTsKKyAgICB2b2lkIHBhaW50Q2FyZXQoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBp
bnQgdHksIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KTsKIAogICAgIC8vIFVzZWQgdG8gc3VzcGVu
ZCBjYXJldCBibGlua2luZyB3aGlsZSB0aGUgbW91c2UgaXMgZG93bi4KICAgICB2b2lkIHNldENh
cmV0QmxpbmtpbmdTdXNwZW5kZWQoYm9vbCBzdXNwZW5kZWQpIHsgbV9pc0NhcmV0QmxpbmtpbmdT
dXNwZW5kZWQgPSBzdXNwZW5kZWQ7IH0KQEAgLTE0Nyw3ICsxNTAsOSBAQCBwcml2YXRlOgogCiAg
ICAgU2VsZWN0aW9uIG1fc2VsOwogCi0gICAgSW50UmVjdCBtX2NhcmV0UmVjdDsgICAgICAgICAg
ICAvLyBjYXJldCBjb29yZGluYXRlcywgc2l6ZSwgYW5kIHBvc2l0aW9uCisgICAgUmVuZGVyT2Jq
ZWN0KiBtX2NhcmV0UmVuZGVyZXI7CisgICAgSW50UmVjdCBtX2NhcmV0UmVjdDsgICAgICAgIC8v
IGNhcmV0IGNvb3JkaW5hdGVzLCBzaXplLCBhbmQgcG9zaXRpb24sIGluIGNvb3JkcyBsb2NhbCB0
byB0aGUgY2FyZXQncyByZW5kZXJlcgorICAgIEludFJlY3QgbV9hYnNDYXJldEJvdW5kczsgICAv
LyBhYnNvbHV0ZSBib3VuZGluZyByZWN0IGZvciB0aGUgY2FyZXQKICAgICAKICAgICAvLyBtX2Nh
cmV0UG9zaXRpb25PbkxheW91dCBzdG9yZXMgdGhlIHNjcm9sbCBvZmZzZXQgb24gdGhlIHByZXZp
b3VzIGNhbGwgdG8gU2VsZWN0aW9uQ29udHJvbGxlcjo6bGF5b3V0KCkuCiAgICAgLy8gV2hlbiBh
c2tlZCBmb3IgY2FyZXRSZWN0KCksIHdlIGNvcnJlY3QgbV9jYXJldFJlY3QgZm9yIG9mZnNldCBk
dWUgdG8gc2Nyb2xsaW5nIHNpbmNlIHRoZSBsYXN0IGxheW91dCgpLgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvVmlzaWJs
ZVBvc2l0aW9uLmNwcAppbmRleCA2MjZjNWI0Li5jM2FhMzY4IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvVmlzaWJs
ZVBvc2l0aW9uLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94
LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpAQCAtNTIzLDcgKzUyNCw3IEBAIFVDaGFyIFZpc2li
bGVQb3NpdGlvbjo6Y2hhcmFjdGVyQWZ0ZXIoKSBjb25zdAogICAgIHJldHVybiB0ZXh0Tm9kZS0+
ZGF0YSgpW29mZnNldF07CiB9CiAKLUludFJlY3QgVmlzaWJsZVBvc2l0aW9uOjpjYXJldFJlY3Qo
KSBjb25zdAorSW50UmVjdCBWaXNpYmxlUG9zaXRpb246OmxvY2FsQ2FyZXRSZWN0KCkgY29uc3QK
IHsKICAgICBOb2RlKiBub2RlID0gbV9kZWVwUG9zaXRpb24ubm9kZSgpOwogICAgIGlmICghbm9k
ZSkKQEAgLTU0MCw3ICs1NDEsMjYgQEAgSW50UmVjdCBWaXNpYmxlUG9zaXRpb246OmNhcmV0UmVj
dCgpIGNvbnN0CiAgICAgaWYgKGlubGluZUJveCkKICAgICAgICAgcmVuZGVyZXIgPSBpbmxpbmVC
b3gtPm9iamVjdCgpOwogCi0gICAgcmV0dXJuIHJlbmRlcmVyLT5jYXJldFJlY3QoaW5saW5lQm94
LCBjYXJldE9mZnNldCk7CisgICAgcmV0dXJuIHJlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChpbmxp
bmVCb3gsIGNhcmV0T2Zmc2V0KTsKK30KKworSW50UmVjdCBWaXNpYmxlUG9zaXRpb246OmFic29s
dXRlQ2FyZXRCb3VuZHMoKSBjb25zdAoreworICAgIEludFJlY3QgbG9jYWxSZWN0ID0gbG9jYWxD
YXJldFJlY3QoKTsKKyAgICBpZiAobG9jYWxSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IEludFJlY3QoKTsKKworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBtX2RlZXBQb3NpdGlv
bi5ub2RlKCkgPyBtX2RlZXBQb3NpdGlvbi5ub2RlKCktPnJlbmRlcmVyKCkgOiAwOworICAgIGlm
ICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICBJbnRQb2ludCBj
YXJldFRvcExlZnQgPSBsb2NhbFJlY3QudG9wTGVmdCgpOworICAgIEludFBvaW50IGNhcmV0Qm90
dG9tUmlnaHQgPSBsb2NhbFJlY3QuYm90dG9tUmlnaHQoKTsKKworICAgIC8vIEZJWE1FOiB3ZSBy
ZWFsbHkgbmVlZCB0byBjb21wdXRlIGEgYm91bmRpbmcgcXVhZAorICAgIEZsb2F0UG9pbnQgYWJz
VG9wTGVmdCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KGNhcmV0VG9wTGVm
dCwgZmFsc2UsIHRydWUpOworICAgIEZsb2F0UG9pbnQgYWJzQm90dG9tUmlnaHQgPSByZW5kZXJl
ci0+bG9jYWxUb0Fic29sdXRlRm9yQ29udGVudChjYXJldEJvdHRvbVJpZ2h0LCBmYWxzZSwgdHJ1
ZSk7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoZW5jbG9zaW5nUmVjdChhYnNUb3BMZWZ0
LCBhYnNCb3R0b21SaWdodCkpOwogfQogCiB2b2lkIFZpc2libGVQb3NpdGlvbjo6ZGVidWdQb3Np
dGlvbihjb25zdCBjaGFyKiBtc2cpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcv
VmlzaWJsZVBvc2l0aW9uLmggYi9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgKaW5k
ZXggNzlmM2E1Ny4uNmRhMGQxMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQ
b3NpdGlvbi5oCisrKyBiL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaApAQCAtOTAs
NyArOTAsMTAgQEAgcHVibGljOgogICAgICAgICBtX2RlZXBQb3NpdGlvbi5nZXRJbmxpbmVCb3hB
bmRPZmZzZXQobV9hZmZpbml0eSwgcHJpbWFyeURpcmVjdGlvbiwgaW5saW5lQm94LCBjYXJldE9m
ZnNldCk7CiAgICAgfQogCi0gICAgSW50UmVjdCBjYXJldFJlY3QoKSBjb25zdDsKKyAgICAvLyBS
ZWN0IGlzIGxvY2FsIHRvIG1fZGVlcFBvc2l0aW9uLm5vZGUoKS0+cmVuZGVyZXIoKQorICAgIElu
dFJlY3QgbG9jYWxDYXJldFJlY3QoKSBjb25zdDsKKyAgICAvLyBCb3VuZHMgb2YgKHBvc3NpYmx5
IHRyYW5zZm9ybWVkKSBjYXJldCBpbiBhYnNvbHV0ZSBjb29yZHMKKyAgICBJbnRSZWN0IGFic29s
dXRlQ2FyZXRCb3VuZHMoKSBjb25zdDsKIAogI2lmbmRlZiBOREVCVUcKICAgICB2b2lkIGZvcm1h
dEZvckRlYnVnZ2VyKGNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvZWRpdGluZy9tYWMvU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbSBiL1dl
YkNvcmUvZWRpdGluZy9tYWMvU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbQppbmRleCBlMDcwMjRh
Li43Zjk1ZDlkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvbWFjL1NlbGVjdGlvbkNvbnRy
b2xsZXJNYWMubW0KKysrIGIvV2ViQ29yZS9lZGl0aW5nL21hYy9TZWxlY3Rpb25Db250cm9sbGVy
TWFjLm1tCkBAIC00Niw3ICs0Niw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bm90aWZ5
QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSgpCiAgICAgaWYgKFVBWm9vbUVuYWJsZWQo
KSAmJiBtX3NlbC5pc0NhcmV0KCkgJiYgbV9zZWwuc3RhcnQoKS5ub2RlKCkpIHsKICAgICAgICAg
UmVuZGVyVmlldyAqcmVuZGVyVmlldyA9IHN0YXRpY19jYXN0PFJlbmRlclZpZXcqPihtX3NlbC5z
dGFydCgpLm5vZGUoKS0+cmVuZGVyZXIoKSk7CiAgICAgICAgIGlmIChyZW5kZXJWaWV3KSB7Ci0g
ICAgICAgICAgICBJbnRSZWN0IHNlbGVjdGlvblJlY3QgPSBjYXJldFJlY3QoKTsKKyAgICAgICAg
ICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdCA9IGFic29sdXRlQ2FyZXRCb3VuZHMoKTsKICAgICAg
ICAgICAgIEludFJlY3Qgdmlld1JlY3QgPSByZW5kZXJWaWV3LT52aWV3UmVjdCgpOwogICAgICAg
ICAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSByZW5kZXJWaWV3LT52aWV3KCktPmZyYW1lVmll
dygpOyAKICAgICAgICAgICAgIGlmIChmcmFtZVZpZXcpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGFnZS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1dlYkNvcmUvcGFnZS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCBlZGQyNjQ4Li5kNWZhNDE5IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvV2ViQ29y
ZS9wYWdlL0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC0xNjI0LDE5ICsxNjI0LDE5
IEBAIEludFJlY3QgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Ym91bmRzRm9yVmlzaWJsZVBv
c2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvCiAgICAgCiAgICAgLy8gQ3JlYXRlIGEgbXV0YWJs
ZSBWaXNpYmxlUG9zaXRpb25SYW5nZS4KICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSByYW5nZSh2
aXNpYmxlUG9zaXRpb25SYW5nZSk7Ci0gICAgSW50UmVjdCByZWN0MSA9IHJhbmdlLnN0YXJ0LmNh
cmV0UmVjdCgpOwotICAgIEludFJlY3QgcmVjdDIgPSByYW5nZS5lbmQuY2FyZXRSZWN0KCk7Cisg
ICAgSW50UmVjdCByZWN0MSA9IHJhbmdlLnN0YXJ0LmFic29sdXRlQ2FyZXRCb3VuZHMoKTsKKyAg
ICBJbnRSZWN0IHJlY3QyID0gcmFuZ2UuZW5kLmFic29sdXRlQ2FyZXRCb3VuZHMoKTsKICAgICAK
ICAgICAvLyByZWFkanVzdCBmb3IgcG9zaXRpb24gYXQgdGhlIGVkZ2Ugb2YgYSBsaW5lLiAgVGhp
cyBpcyB0byBleGNsdWRlIGxpbmUgcmVjdCB0aGF0IGRvZXNuJ3QgbmVlZCB0byBiZSBhY2NvdW50
ZWQgaW4gdGhlIHJhbmdlIGJvdW5kcwogICAgIGlmIChyZWN0Mi55KCkgIT0gcmVjdDEueSgpKSB7
CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBlbmRPZkZpcnN0TGluZSA9IGVuZE9mTGluZShyYW5n
ZS5zdGFydCk7CiAgICAgICAgIGlmIChyYW5nZS5zdGFydCA9PSBlbmRPZkZpcnN0TGluZSkgewog
ICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuc2V0QWZmaW5pdHkoRE9XTlNUUkVBTSk7Ci0gICAgICAg
ICAgICByZWN0MSA9IHJhbmdlLnN0YXJ0LmNhcmV0UmVjdCgpOworICAgICAgICAgICAgcmVjdDEg
PSByYW5nZS5zdGFydC5hYnNvbHV0ZUNhcmV0Qm91bmRzKCk7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKHJhbmdlLmVuZCA9PSBlbmRPZkZpcnN0TGluZSkgewogICAgICAgICAgICAgcmFuZ2UuZW5k
LnNldEFmZmluaXR5KFVQU1RSRUFNKTsKLSAgICAgICAgICAgIHJlY3QyID0gcmFuZ2UuZW5kLmNh
cmV0UmVjdCgpOworICAgICAgICAgICAgcmVjdDIgPSByYW5nZS5lbmQuYWJzb2x1dGVDYXJldEJv
dW5kcygpOwogICAgICAgICB9CiAgICAgfQogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdl
L0ZyYW1lLmNwcCBiL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggYmQwOGU1OC4uNGY0ODQ1
ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9XZWJDb3JlL3BhZ2Uv
RnJhbWUuY3BwCkBAIC0yNTksMTIgKzI1OSwxMyBAQCBJbnRSZWN0IEZyYW1lOjpmaXJzdFJlY3RG
b3JSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0CiAgICAgSW5saW5lQm94KiBzdGFydElubGluZUJv
eDsKICAgICBpbnQgc3RhcnRDYXJldE9mZnNldDsKICAgICByYW5nZS0+c3RhcnRQb3NpdGlvbigp
LmdldElubGluZUJveEFuZE9mZnNldChET1dOU1RSRUFNLCBzdGFydElubGluZUJveCwgc3RhcnRD
YXJldE9mZnNldCk7Ci0gICAgSW50UmVjdCBzdGFydENhcmV0UmVjdCA9IHJhbmdlLT5zdGFydENv
bnRhaW5lcihlYyktPnJlbmRlcmVyKCktPmNhcmV0UmVjdChzdGFydElubGluZUJveCwgc3RhcnRD
YXJldE9mZnNldCwgJmV4dHJhV2lkdGhUb0VuZE9mTGluZSk7CisvLyN3YXJuaW5nIGZpeCBtZQor
ICAgIEludFJlY3Qgc3RhcnRDYXJldFJlY3QgPSByYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5y
ZW5kZXJlcigpLT5sb2NhbENhcmV0UmVjdChzdGFydElubGluZUJveCwgc3RhcnRDYXJldE9mZnNl
dCwgJmV4dHJhV2lkdGhUb0VuZE9mTGluZSk7CiAKICAgICBJbmxpbmVCb3gqIGVuZElubGluZUJv
eDsKICAgICBpbnQgZW5kQ2FyZXRPZmZzZXQ7CiAgICAgcmFuZ2UtPmVuZFBvc2l0aW9uKCkuZ2V0
SW5saW5lQm94QW5kT2Zmc2V0KFVQU1RSRUFNLCBlbmRJbmxpbmVCb3gsIGVuZENhcmV0T2Zmc2V0
KTsKLSAgICBJbnRSZWN0IGVuZENhcmV0UmVjdCA9IHJhbmdlLT5lbmRDb250YWluZXIoZWMpLT5y
ZW5kZXJlcigpLT5jYXJldFJlY3QoZW5kSW5saW5lQm94LCBlbmRDYXJldE9mZnNldCk7CisgICAg
SW50UmVjdCBlbmRDYXJldFJlY3QgPSByYW5nZS0+ZW5kQ29udGFpbmVyKGVjKS0+cmVuZGVyZXIo
KS0+bG9jYWxDYXJldFJlY3QoZW5kSW5saW5lQm94LCBlbmRDYXJldE9mZnNldCk7CiAKICAgICBp
ZiAoc3RhcnRDYXJldFJlY3QueSgpID09IGVuZENhcmV0UmVjdC55KCkpIHsKICAgICAgICAgLy8g
c3RhcnQgYW5kIGVuZCBhcmUgb24gdGhlIHNhbWUgbGluZQpAQCAtNjE2LDE4ICs2MTcsMTggQEAg
dm9pZCBGcmFtZTo6Y2FyZXRCbGlua1RpbWVyRmlyZWQoVGltZXI8RnJhbWU+KikKICAgICBzZWxl
Y3Rpb24oKS0+aW52YWxpZGF0ZUNhcmV0UmVjdCgpOwogfQogCi12b2lkIEZyYW1lOjpwYWludENh
cmV0KEdyYXBoaWNzQ29udGV4dCogcCwgY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3ZvaWQg
RnJhbWU6OnBhaW50Q2FyZXQoR3JhcGhpY3NDb250ZXh0KiBwLCBpbnQgdHgsIGludCB0eSwgY29u
c3QgSW50UmVjdCYgY2xpcFJlY3QpIGNvbnN0CiB7CiAgICAgaWYgKGQtPm1fY2FyZXRQYWludCAm
JiBkLT5tX2NhcmV0VmlzaWJsZSkKLSAgICAgICAgc2VsZWN0aW9uKCktPnBhaW50Q2FyZXQocCwg
cmVjdCk7CisgICAgICAgIHNlbGVjdGlvbigpLT5wYWludENhcmV0KHAsIHR4LCB0eSwgY2xpcFJl
Y3QpOwogfQogCi12b2lkIEZyYW1lOjpwYWludERyYWdDYXJldChHcmFwaGljc0NvbnRleHQqIHAs
IGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit2b2lkIEZyYW1lOjpwYWludERyYWdDYXJldChH
cmFwaGljc0NvbnRleHQqIHAsIGludCB0eCwgaW50IHR5LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVj
dCkgY29uc3QKIHsKICAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBkcmFnQ2FyZXRDb250cm9sbGVy
ID0gZC0+bV9wYWdlLT5kcmFnQ2FyZXRDb250cm9sbGVyKCk7CiAgICAgQVNTRVJUKGRyYWdDYXJl
dENvbnRyb2xsZXItPnNlbGVjdGlvbigpLmlzQ2FyZXQoKSk7CiAgICAgaWYgKGRyYWdDYXJldENv
bnRyb2xsZXItPnNlbGVjdGlvbigpLnN0YXJ0KCkubm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgp
ID09IHRoaXMpCi0gICAgICAgIGRyYWdDYXJldENvbnRyb2xsZXItPnBhaW50Q2FyZXQocCwgcmVj
dCk7CisgICAgICAgIGRyYWdDYXJldENvbnRyb2xsZXItPnBhaW50Q2FyZXQocCwgdHgsIHR5LCBj
bGlwUmVjdCk7CiB9CiAKIGZsb2F0IEZyYW1lOjp6b29tRmFjdG9yKCkgY29uc3QKQEAgLTEyMDMs
NyArMTIwNCw3IEBAIHZvaWQgRnJhbWU6OnJldmVhbFNlbGVjdGlvbihjb25zdCBSZW5kZXJMYXll
cjo6U2Nyb2xsQWxpZ25tZW50JiBhbGlnbm1lbnQpIGNvbnN0CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBTZWxlY3Rpb246OkNBUkVUOgotICAgICAgICAg
ICAgcmVjdCA9IHNlbGVjdGlvbigpLT5jYXJldFJlY3QoKTsKKyAgICAgICAgICAgIHJlY3QgPSBz
ZWxlY3Rpb24oKS0+YWJzb2x1dGVDYXJldEJvdW5kcygpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBTZWxlY3Rpb246OlJBTkdFOgpAQCAtMTIzMCw3ICsx
MjMxLDcgQEAgdm9pZCBGcmFtZTo6cmV2ZWFsQ2FyZXQoY29uc3QgUmVuZGVyTGF5ZXI6OlNjcm9s
bEFsaWdubWVudCYgYWxpZ25tZW50KSBjb25zdAogCiAgICAgUG9zaXRpb24gZXh0ZW50ID0gc2Vs
ZWN0aW9uKCktPmV4dGVudCgpOwogICAgIGlmIChleHRlbnQubm9kZSgpICYmIGV4dGVudC5ub2Rl
KCktPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgSW50UmVjdCBleHRlbnRSZWN0ID0gVmlzaWJsZVBv
c2l0aW9uKGV4dGVudCkuY2FyZXRSZWN0KCk7CisgICAgICAgIEludFJlY3QgZXh0ZW50UmVjdCA9
IFZpc2libGVQb3NpdGlvbihleHRlbnQpLmFic29sdXRlQ2FyZXRCb3VuZHMoKTsKICAgICAgICAg
UmVuZGVyTGF5ZXIqIGxheWVyID0gZXh0ZW50Lm5vZGUoKS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5n
TGF5ZXIoKTsKICAgICAgICAgaWYgKGxheWVyKQogICAgICAgICAgICAgbGF5ZXItPnNjcm9sbFJl
Y3RUb1Zpc2libGUoZXh0ZW50UmVjdCwgZmFsc2UsIGFsaWdubWVudCwgYWxpZ25tZW50KTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9GcmFtZS5oIGIvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKaW5k
ZXggNzE0M2Q1ZC4uMjA4NjcxYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKKysr
IGIvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKQEAgLTI0NCw4ICsyNDQsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBpbnZhbGlkYXRlU2VsZWN0aW9uKCk7CiAKICAgICB2b2lkIHNldENhcmV0VmlzaWJsZShi
b29sID0gdHJ1ZSk7Ci0gICAgdm9pZCBwYWludENhcmV0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEludFJlY3QmKSBjb25zdDsgIAotICAgIHZvaWQgcGFpbnREcmFnQ2FyZXQoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgIHZvaWQgcGFpbnRDYXJldChHcmFwaGlj
c0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIGNvbnN0
OyAgCisgICAgdm9pZCBwYWludERyYWdDYXJldChHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGlu
dCB0eSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIGNvbnN0OwogCiAgICAgYm9vbCBpc0NvbnRl
bnRFZGl0YWJsZSgpIGNvbnN0OyAvLyBpZiB0cnVlLCBldmVyeXRoaW5nIGluIGZyYW1lIGlzIGVk
aXRhYmxlCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAppbmRleCBlYzdi
M2ZhLi4zNWYyYzU5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UmVjdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCkBA
IC0xMTksNCArMTE5LDExIEBAIEludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiAgICAgcmV0dXJuIEludFJlY3QobCwgdCwgciAtIGwsIGIgLSB0KTsKIH0KIAor
RmxvYXRSZWN0IGVuY2xvc2luZ1JlY3QoY29uc3QgRmxvYXRQb2ludCYgYSwgY29uc3QgRmxvYXRQ
b2ludCYgYikKK3sKKyAgICByZXR1cm4gRmxvYXRSZWN0KG1pbihhLngoKSwgYi54KCkpLCBtaW4o
YS55KCksIGIueSgpKSwgCisgICAgICAgICAgICAgICAgICAgICBmYWJzZihhLngoKSAtIGIueCgp
KSwgZmFic2YoYS55KCkgLSBiLnkoKSkpOworCit9CisKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UmVjdC5oCmluZGV4IDExZTM3OTEuLmM5NjA1NzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFJlY3QuaApAQCAtMTc5LDYgKzE3OSw3IEBAIGlubGluZSBib29sIG9wZXJhdG9y
IT0oY29uc3QgRmxvYXRSZWN0JiBhLCBjb25zdCBGbG9hdFJlY3QmIGIpCiAKIEludFJlY3QgZW5j
bG9zaW5nSW50UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKIAorRmxvYXRSZWN0IGVuY2xvc2luZ1Jl
Y3QoY29uc3QgRmxvYXRQb2ludCYgYSwgY29uc3QgRmxvYXRQb2ludCYgYik7CiB9CiAKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCmluZGV4IDg3MmE2NDAuLjVmMDhjNzMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAorKysgYi9XZWJDb3JlL3Jl
bmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgTGF5b3V0U3RhdGU6Okxh
eW91dFN0YXRlKFJlbmRlck9iamVjdCogcm9vdCkKIHsKICAgICBSZW5kZXJPYmplY3QqIGNvbnRh
aW5lciA9IHJvb3QtPmNvbnRhaW5lcigpOwogICAgIC8vIEZJWE1FOiB0aGlzIGlzIGJyb2tlbiB3
aXRoIHRyYW5zZm9ybXM/Ci0gICAgRmxvYXRQb2ludCBhYnNDb250ZW50UG9pbnQgPSBjb250YWlu
ZXItPmxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQb2ludCgpKTsKKyAgICBGbG9hdFBv
aW50IGFic0NvbnRlbnRQb2ludCA9IGNvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlRm9yQ29udGVu
dChGbG9hdFBvaW50KCksIGZhbHNlLCB0cnVlKTsKICAgICBtX29mZnNldCA9IEludFNpemUoYWJz
Q29udGVudFBvaW50LngoKSwgYWJzQ29udGVudFBvaW50LnkoKSk7CiAgICAgbV9uZXh0ID0gMDsK
IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCBhZWU2OThjLi5jMTViZjNmIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0xNjM1LDcgKzE2MzUsNyBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpwYWludENoaWxkcmVuKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0
eSkKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q2FyZXQoUGFpbnRJbmZvJiBw
YWludEluZm8sIENhcmV0VHlwZSB0eXBlKQordm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDYXJldChQ
YWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHksIENhcmV0VHlwZSB0eXBlKQogewog
ICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlvbiA9IHR5cGUgPT0gQ3Vyc29yQ2FyZXQg
PyBkb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKSA6IGRvY3VtZW50KCktPmZyYW1lKCkt
PmRyYWdDYXJldENvbnRyb2xsZXIoKTsKICAgICBOb2RlKiBjYXJldE5vZGUgPSBzZWxlY3Rpb24t
PnN0YXJ0KCkubm9kZSgpOwpAQCAtMTY0Niw5ICsxNjQ2LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6
cGFpbnRDYXJldChQYWludEluZm8mIHBhaW50SW5mbywgQ2FyZXRUeXBlIHR5cGUpCiAgICAgYm9v
bCBjdXJzb3JJbnNpZGVCbG9ja0NhcmV0Tm9kZSA9IHJlbmRlcmVyLT5pc0Jsb2NrRmxvdygpICYm
IHNlbGVjdGlvbi0+aXNJbnNpZGVOb2RlKCk7CiAgICAgaWYgKChjdXJzb3JJbnNpZGVCbG9ja0Nh
cmV0Tm9kZSA/IHJlbmRlcmVyIDogcmVuZGVyZXItPmNvbnRhaW5pbmdCbG9jaygpKSA9PSB0aGlz
ICYmIHNlbGVjdGlvbi0+aXNDb250ZW50RWRpdGFibGUoKSkgewogICAgICAgICBpZiAodHlwZSA9
PSBDdXJzb3JDYXJldCkKLSAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPnBhaW50Q2Fy
ZXQocGFpbnRJbmZvLmNvbnRleHQsIHBhaW50SW5mby5yZWN0KTsKKyAgICAgICAgICAgIGRvY3Vt
ZW50KCktPmZyYW1lKCktPnBhaW50Q2FyZXQocGFpbnRJbmZvLmNvbnRleHQsIHR4LCB0eSwgcGFp
bnRJbmZvLnJlY3QpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFt
ZSgpLT5wYWludERyYWdDYXJldChwYWludEluZm8uY29udGV4dCwgcGFpbnRJbmZvLnJlY3QpOwor
ICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+cGFpbnREcmFnQ2FyZXQocGFpbnRJbmZv
LmNvbnRleHQsIHR4LCB0eSwgcGFpbnRJbmZvLnJlY3QpOwogICAgIH0KIH0KIApAQCAtMTcyNCw4
ICsxNzI0LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGludCB0eCwgaW50IHR5KQogICAgIC8vIElmIHRoZSBjYXJldCdzIG5vZGUncyByZW5k
ZXIgb2JqZWN0J3MgY29udGFpbmluZyBibG9jayBpcyB0aGlzIGJsb2NrLCBhbmQgdGhlIHBhaW50
IGFjdGlvbiBpcyBQYWludFBoYXNlRm9yZWdyb3VuZCwKICAgICAvLyB0aGVuIHBhaW50IHRoZSBj
YXJldC4KICAgICBpZiAoIWlubGluZUZsb3cgJiYgcGFpbnRQaGFzZSA9PSBQYWludFBoYXNlRm9y
ZWdyb3VuZCkgeyAgICAgICAgCi0gICAgICAgIHBhaW50Q2FyZXQocGFpbnRJbmZvLCBDdXJzb3JD
YXJldCk7Ci0gICAgICAgIHBhaW50Q2FyZXQocGFpbnRJbmZvLCBEcmFnQ2FyZXQpOworICAgICAg
ICBwYWludENhcmV0KHBhaW50SW5mbywgdHgsIHR5LCBDdXJzb3JDYXJldCk7CisgICAgICAgIHBh
aW50Q2FyZXQocGFpbnRJbmZvLCB0eCwgdHksIERyYWdDYXJldCk7CiAgICAgfQogfQogCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suaAppbmRleCA1YTIwYzljLi5kODY1MzIwIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmgKQEAgLTE2Nyw3ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludENoaWxk
cmVuKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICB2b2lkIHBhaW50RWxsaXBzaXNC
b3hlcyhQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAgICAgdm9pZCBwYWludFNlbGVjdGlv
bihQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7Ci0gICAgdm9pZCBwYWludENhcmV0KFBhaW50
SW5mbyYsIENhcmV0VHlwZSk7CisgICAgdm9pZCBwYWludENhcmV0KFBhaW50SW5mbyYsIGludCB0
eCwgaW50IHR5LCBDYXJldFR5cGUpOwogCiAgICAgdm9pZCBpbnNlcnRGbG9hdGluZ09iamVjdChS
ZW5kZXJPYmplY3QqKTsKICAgICB2b2lkIHJlbW92ZUZsb2F0aW5nT2JqZWN0KFJlbmRlck9iamVj
dCopOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggOTUyYTAyZi4uNzkzYjFlYyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guY3BwCkBAIC0yNjY5LDcgKzI2NjksNyBAQCB2b2lkIFJlbmRlckJveDo6
Y2FsY0Fic29sdXRlVmVydGljYWxSZXBsYWNlZCgpCiAgICAgbV95ID0gdG9wVmFsdWUgKyBtX21h
cmdpblRvcCArIGNvbnRhaW5lckJsb2NrLT5ib3JkZXJUb3AoKTsKIH0KIAotSW50UmVjdCBSZW5k
ZXJCb3g6OmNhcmV0UmVjdChJbmxpbmVCb3gqIGJveCwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4
dHJhV2lkdGhUb0VuZE9mTGluZSkKK0ludFJlY3QgUmVuZGVyQm94Ojpsb2NhbENhcmV0UmVjdChJ
bmxpbmVCb3gqIGJveCwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGlu
ZSkKIHsKICAgICAvLyBWaXNpYmxlUG9zaXRpb25zIGF0IG9mZnNldHMgaW5zaWRlIGNvbnRhaW5l
cnMgZWl0aGVyIGEpIHJlZmVyIHRvIHRoZSBwb3NpdGlvbnMgYmVmb3JlL2FmdGVyCiAgICAgLy8g
dGhvc2UgY29udGFpbmVycyAodGFibGVzIGFuZCBzZWxlY3QgZWxlbWVudHMpIG9yIGIpIHJlZmVy
IHRvIHRoZSBwb3NpdGlvbiBpbnNpZGUgYW4gZW1wdHkgYmxvY2suCkBAIC0yNjc3LDcgKzI2Nzcs
NyBAQCBJbnRSZWN0IFJlbmRlckJveDo6Y2FyZXRSZWN0KElubGluZUJveCogYm94LCBpbnQgY2Fy
ZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRQogICAgIC8vIEZJWE1FOiBQYWludCB0aGUgY2Fy
ZXRzIGluc2lkZSBlbXB0eSBibG9ja3MgZGlmZmVyZW50bHkgdGhhbiB0aGUgY2FyZXRzIGJlZm9y
ZS9hZnRlciBlbGVtZW50cy4KIAogICAgIC8vIEZJWE1FOiBXaGF0IGFib3V0IGJvcmRlciBhbmQg
cGFkZGluZz8KLSAgICBjb25zdCBpbnQgY2FyZXRXaWR0aCA9IDE7CisgICAgY29uc3QgaW50IGNh
cmV0V2lkdGggPSAzOyAgICAgICAvLyBURVNUSU5HCiAgICAgSW50UmVjdCByZWN0KHhQb3MoKSwg
eVBvcygpLCBjYXJldFdpZHRoLCBtX2hlaWdodCk7CiAgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24gPSBib3ggPyBib3gtPmRpcmVjdGlvbigpIDogc3R5bGUoKS0+ZGlyZWN0aW9uKCk7CiAKQEAg
LTI3MDgsMTIgKzI3MDgsOSBAQCBJbnRSZWN0IFJlbmRlckJveDo6Y2FyZXRSZWN0KElubGluZUJv
eCogYm94LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRQogICAgICAgICAvLyBO
byBwb2ludCByZXR1cm5pbmcgYSByZWxhdGl2ZSBwb3NpdGlvbi4KICAgICAgICAgcmV0dXJuIElu
dFJlY3QoKTsKIAotICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gY2ItPmxvY2FsVG9BYnNvbHV0ZSgp
OwotCiAgICAgaWYgKGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKICAgICAgICAgKmV4dHJhV2lkdGhU
b0VuZE9mTGluZSA9IHhQb3MoKSArIG1fd2lkdGggLSByZWN0LnJpZ2h0KCk7CiAKLSAgICByZWN0
Lm1vdmUoYWJzUG9zLngoKSwgYWJzUG9zLnkoKSk7CiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmgKaW5kZXggM2NjOGJlNy4uZGFiZTQ2MiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmgKQEAgLTE0MCw3ICsxNDAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBSZW5kZXJM
YXllciogbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyOyB9CiAKLSAgICB2aXJ0dWFsIElu
dFJlY3QgY2FyZXRSZWN0KElubGluZUJveCosIGludCBjYXJldE9mZnNldCwgaW50KiBleHRyYVdp
ZHRoVG9FbmRPZkxpbmUgPSAwKTsKKyAgICB2aXJ0dWFsIEludFJlY3QgbG9jYWxDYXJldFJlY3Qo
SW5saW5lQm94KiwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9
IDApOwogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50RmlsbExheWVyRXh0ZW5kZWQoY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgQ29sb3ImLCBjb25zdCBGaWxsTGF5ZXIqLCBpbnQgY2xpcFksIGludCBj
bGlwSGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0
eCwgaW50IHR5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIElubGluZUZsb3dCb3gqID0gMCwgQ29t
cG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxv
dy5jcHAKaW5kZXggZWU2MDQ4Yy4uNzc5YjQzOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmxvdy5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHAK
QEAgLTYyMCwxMSArNjIwLDExIEBAIGludCBSZW5kZXJGbG93OjpsZWZ0bW9zdFBvc2l0aW9uKGJv
b2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IsIGJvb2wgaW5jbHVkZVNlbGYpCiAgICAgcmV0dXJu
IGxlZnQ7CiB9CiAKLUludFJlY3QgUmVuZGVyRmxvdzo6Y2FyZXRSZWN0KElubGluZUJveCogaW5s
aW5lQm94LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQorSW50
UmVjdCBSZW5kZXJGbG93Ojpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgaW50
IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKIHsKICAgICAvLyBEbyB0
aGUgbm9ybWFsIGNhbGN1bGF0aW9uIGluIG1vc3QgY2FzZXMuCiAgICAgaWYgKGZpcnN0Q2hpbGQo
KSB8fCBzdHlsZSgpLT5kaXNwbGF5KCkgPT0gSU5MSU5FKQotICAgICAgICByZXR1cm4gUmVuZGVy
Q29udGFpbmVyOjpjYXJldFJlY3QoaW5saW5lQm94LCBjYXJldE9mZnNldCwgZXh0cmFXaWR0aFRv
RW5kT2ZMaW5lKTsKKyAgICAgICAgcmV0dXJuIFJlbmRlckNvbnRhaW5lcjo6bG9jYWxDYXJldFJl
Y3QoaW5saW5lQm94LCBjYXJldE9mZnNldCwgZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKTsKIAogICAg
IC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2U6CiAgICAgLy8gVGhlIGVsZW1lbnQgaXMgbm90IGFu
IGlubGluZSBlbGVtZW50LCBhbmQgaXQncyBlbXB0eS4gU28gd2UgaGF2ZSB0bwpAQCAtNjk0LDkg
KzY5NCw3IEBAIEludFJlY3QgUmVuZGVyRmxvdzo6Y2FyZXRSZWN0KElubGluZUJveCogaW5saW5l
Qm94LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQb2lu
dCgpKTsKLSAgICB4ICs9IGFic1Bvcy54KCk7Ci0gICAgaW50IHkgPSBhYnNQb3MueSgpICsgcGFk
ZGluZ1RvcCgpICsgYm9yZGVyVG9wKCk7CisgICAgaW50IHkgPSBwYWRkaW5nVG9wKCkgKyBib3Jk
ZXJUb3AoKTsKIAogICAgIHJldHVybiBJbnRSZWN0KHgsIHksIGNhcmV0V2lkdGgsIGhlaWdodCk7
CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93LmggYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGbG93LmgKaW5kZXggYzI4NGVkOC4uN2UzYTM0NSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvdy5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZsb3cuaApAQCAtOTMsNyArOTMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQg
cmlnaHRtb3N0UG9zaXRpb24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciA9IHRydWUsIGJv
b2wgaW5jbHVkZVNlbGYgPSB0cnVlKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBsZWZ0bW9zdFBv
c2l0aW9uKGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IgPSB0cnVlLCBib29sIGluY2x1ZGVT
ZWxmID0gdHJ1ZSkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIEludFJlY3QgY2FyZXRSZWN0KElubGlu
ZUJveCosIGludCBjYXJldE9mZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKTsK
KyAgICB2aXJ0dWFsIEludFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgaW50IGNhcmV0
T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IDApOwogCiAgICAgdmlydHVhbCB2
b2lkIGFkZEZvY3VzUmluZ1JlY3RzKEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5KTsK
ICAgICB2b2lkIHBhaW50T3V0bGluZUZvckxpbmUoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBp
bnQgdHksIGNvbnN0IEludFJlY3QmIHByZXZMaW5lLCBjb25zdCBJbnRSZWN0JiB0aGlzTGluZSwg
Y29uc3QgSW50UmVjdCYgbmV4dExpbmUpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5k
ZXggYTdmNzIyYi4uMjY2NmI3OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0y
Mzk4LDcgKzIzOTgsNyBAQCBGbG9hdFBvaW50IFJlbmRlck9iamVjdDo6YWJzb2x1dGVUb0xvY2Fs
KEZsb2F0UG9pbnQgY29udGFpbmVyUG9pbnQsIGJvb2wgZml4ZWQsCiAgICAgcmV0dXJuIEZsb2F0
UG9pbnQoKTsKIH0KIAotSW50UmVjdCBSZW5kZXJPYmplY3Q6OmNhcmV0UmVjdChJbmxpbmVCb3gq
IGlubGluZUJveCwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkK
K0ludFJlY3QgUmVuZGVyT2JqZWN0Ojpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJv
eCwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKIHsKICAgIGlm
IChleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9
IDA7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IDNmNWI2NzYuLjBkMjA4NDcgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC00NjgsNyArNDY4LDcgQEAgcHVibGljOgogICAgICAg
ICB9CiAKICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0OwotICAgICAgICBJbnRSZWN0
IHJlY3Q7CisgICAgICAgIEludFJlY3QgcmVjdDsgICAvLyByZWN0IGJlaW5nIGRyYXduCiAgICAg
ICAgIFBhaW50UGhhc2UgcGhhc2U7CiAgICAgICAgIGJvb2wgZm9yY2VCbGFja1RleHQ7CiAgICAg
ICAgIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290OyAvLyB1c2VkIHRvIGRyYXcganVzdCBvbmUg
ZWxlbWVudCBhbmQgaXRzIHZpc3VhbCBraWRzCkBAIC04MzEsMTQgKzgzMSwxNCBAQCBwdWJsaWM6
CiAgICAgTm9kZSogZHJhZ2dhYmxlTm9kZShib29sIGRodG1sT0ssIGJvb2wgdWFPSywgaW50IHgs
IGludCB5LCBib29sJiBkaHRtbFdpbGxEcmFnKSBjb25zdDsKIAogICAgIC8qKgotICAgICAqIFJl
dHVybnMgdGhlIGNvbnRlbnQgY29vcmRpbmF0ZXMgb2YgdGhlIGNhcmV0IHdpdGhpbiB0aGlzIHJl
bmRlciBvYmplY3QuCisgICAgICogUmV0dXJucyB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhl
IGNhcmV0IHdpdGhpbiB0aGlzIHJlbmRlciBvYmplY3QuCiAgICAgICogQHBhcmFtIG9mZnNldCB6
ZXJvLWJhc2VkIG9mZnNldCBkZXRlcm1pbmluZyBwb3NpdGlvbiB3aXRoaW4gdGhlIHJlbmRlciBv
YmplY3QuCiAgICAgICogQHBhcmFtIG92ZXJyaWRlIEBwIHRydWUgaWYgaW5wdXQgb3ZlcnJpZGVz
IGV4aXN0aW5nIGNoYXJhY3RlcnMsCiAgICAgICogQHAgZmFsc2UgaWYgaXQgaW5zZXJ0cyB0aGVt
LiBUaGUgd2lkdGggb2YgdGhlIGNhcmV0IGRlcGVuZHMgb24gdGhpcyBvbmUuCiAgICAgICogQHBh
cmFtIGV4dHJhV2lkdGhUb0VuZE9mTGluZSBvcHRpb25hbCBvdXQgYXJnIHRvIGdpdmUgZXh0cmEg
d2lkdGggdG8gZW5kIG9mIGxpbmUgLQogICAgICAqIHVzZWZ1bCBmb3IgY2hhcmFjdGVyIHJhbmdl
IHJlY3QgY29tcHV0YXRpb25zCiAgICAgICovCi0gICAgdmlydHVhbCBJbnRSZWN0IGNhcmV0UmVj
dChJbmxpbmVCb3gqLCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5l
ID0gMCk7CisgICAgdmlydHVhbCBJbnRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGlu
dCBjYXJldE9mZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKTsKIAogICAgIHZp
cnR1YWwgaW50IGxvd2VzdFBvc2l0aW9uKGJvb2wgLyppbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciov
ID0gdHJ1ZSwgYm9vbCAvKmluY2x1ZGVTZWxmKi8gPSB0cnVlKSBjb25zdCB7IHJldHVybiAwOyB9
CiAgICAgdmlydHVhbCBpbnQgcmlnaHRtb3N0UG9zaXRpb24oYm9vbCAvKmluY2x1ZGVPdmVyZmxv
d0ludGVyaW9yKi8gPSB0cnVlLCBib29sIC8qaW5jbHVkZVNlbGYqLyA9IHRydWUpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGlu
ZVRleHQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKaW5k
ZXggNGJhNDU4ZC4uYjM3ZjhhMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHSW5saW5lVGV4dC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5l
VGV4dC5jcHAKQEAgLTEyMyw3ICsxMjMsNyBAQCBJbmxpbmVUZXh0Qm94KiBSZW5kZXJTVkdJbmxp
bmVUZXh0OjpjcmVhdGVJbmxpbmVUZXh0Qm94KCkKICAgICByZXR1cm4gbmV3IChyZW5kZXJBcmVu
YSgpKSBTVkdJbmxpbmVUZXh0Qm94KHRoaXMpOwogfQogCi1JbnRSZWN0IFJlbmRlclNWR0lubGlu
ZVRleHQ6OmNhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgaW50IGNhcmV0T2Zmc2V0LCBp
bnQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKK0ludFJlY3QgUmVuZGVyU1ZHSW5saW5lVGV4dDo6
bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIGludCBjYXJldE9mZnNldCwgaW50
KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiB7CiAgICAgLy8gU1ZHIGRvZXNuJ3QgaGF2ZSBhbnkg
ZWRpdGFibGUgY29udGVudCB3aGVyZSBhIGNhcmV0IHJlY3Qgd291bGQgYmUgbmVlZGVkCiAgICAg
cmV0dXJuIEludFJlY3QoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R0lubGluZVRleHQuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuaApp
bmRleCA3ODZiYTMxLi45Y2RmZjkwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdJbmxpbmVUZXh0LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5l
VGV4dC5oCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdU
ZXh0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgSW5saW5lVGV4dEJveCog
Y3JlYXRlSW5saW5lVGV4dEJveCgpOwogCi0gICAgdmlydHVhbCBJbnRSZWN0IGNhcmV0UmVjdChJ
bmxpbmVCb3gqLCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0g
MCk7CisgICAgdmlydHVhbCBJbnRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGludCBj
YXJldE9mZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKTsKICAgICB2aXJ0dWFs
IFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvckNvb3JkaW5hdGVzKGludCB4LCBpbnQgeSk7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAppbmRl
eCAwYTk5Y2Y1Li41OTJkZWE0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcApAQCAtMzE5LDcg
KzMxOSw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJUZXh0Ojpwb3NpdGlvbkZvckNvb3JkaW5h
dGVzKGludCB4LCBpbnQgeSkKICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGVsZW1lbnQoKSwg
bGFzdEJveEFib3ZlID8gbGFzdEJveEFib3ZlLT5tX3N0YXJ0ICsgbGFzdEJveEFib3ZlLT5tX2xl
biA6IDAsIERPV05TVFJFQU0pOwogfQogCi1JbnRSZWN0IFJlbmRlclRleHQ6OmNhcmV0UmVjdChJ
bmxpbmVCb3gqIGlubGluZUJveCwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0Vu
ZE9mTGluZSkKK0ludFJlY3QgUmVuZGVyVGV4dDo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBp
bmxpbmVCb3gsIGludCBjYXJldE9mZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiB7
CiAgICAgaWYgKCFpbmxpbmVCb3gpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CkBAIC0zMzAs
NiArMzMwLDcgQEAgSW50UmVjdCBSZW5kZXJUZXh0OjpjYXJldFJlY3QoSW5saW5lQm94KiBpbmxp
bmVCb3gsIGludCBjYXJldE9mZnNldCwgaW50KiBleHRyYVcKIAogICAgIElubGluZVRleHRCb3gq
IGJveCA9IHN0YXRpY19jYXN0PElubGluZVRleHRCb3gqPihpbmxpbmVCb3gpOwogCisvLyN3YXJu
aW5nIGZpZ3VyZSB0aGlzIG91dAogICAgIGludCBoZWlnaHQgPSBib3gtPnJvb3QoKS0+Ym90dG9t
T3ZlcmZsb3coKSAtIGJveC0+cm9vdCgpLT50b3BPdmVyZmxvdygpOwogICAgIGludCB0b3AgPSBi
b3gtPnJvb3QoKS0+dG9wT3ZlcmZsb3coKTsKIApAQCAtMzQyLDcgKzM0Myw3IEBAIEludFJlY3Qg
UmVuZGVyVGV4dDo6Y2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCBpbnQgY2FyZXRPZmZz
ZXQsIGludCogZXh0cmFXCiAgICAgICAgICpleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAoYm94LT5y
b290KCktPndpZHRoKCkgKyByb290TGVmdCkgLSAobGVmdCArIDEpOwogCiAgICAgLy8gRklYTUU6
IGJyb2tlbiB3aXRoIHRyYW5zZm9ybXMKLSAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9B
YnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQb2ludCgpKTsKKyAgICBGbG9hdFBvaW50IGFic1Bvczsg
Ly8gID0gbG9jYWxUb0Fic29sdXRlRm9yQ29udGVudChGbG9hdFBvaW50KCkpOwogICAgIGxlZnQg
Kz0gYWJzUG9zLngoKTsKICAgICB0b3AgKz0gYWJzUG9zLnkoKTsKIApAQCAtMzU1LDcgKzM1Niw4
IEBAIEludFJlY3QgUmVuZGVyVGV4dDo6Y2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCBp
bnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXCiAgICAgICAgICAgICBsZWZ0ID0gbWF4KGxlZnQs
IHN0YXRpY19jYXN0PGludD4oYWJzUG9zLngoKSkgKyByb290TGVmdCk7CiAgICAgfQogCi0gICAg
cmV0dXJuIEludFJlY3QobGVmdCwgdG9wLCAxLCBoZWlnaHQpOworICAgIGNvbnN0IGludCBjYXJl
dFdpZHRoID0gMzsgICAgICAgLy8gVEVTVElORworICAgIHJldHVybiBJbnRSZWN0KGxlZnQsIHRv
cCwgY2FyZXRXaWR0aCwgaGVpZ2h0KTsKIH0KIAogQUxXQVlTX0lOTElORSBpbnQgUmVuZGVyVGV4
dDo6d2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udCYgZiwgaW50IHN0YXJ0LCBpbnQgbGVuLCBpbnQg
eFBvcykgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaCBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAppbmRleCBhNjhiYTU3Li40ZWQ0ODBkIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKKysrIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dC5oCkBAIC0xMDMsNyArMTAzLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgU2VsZWN0aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxTZWxlY3Rpb25TdGF0ZT4obV9zZWxlY3Rpb25TdGF0ZSk7IH0KICAgICB2aXJ0dWFs
IHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUgcyk7CiAgICAgdmlydHVhbCBJ
bnRSZWN0IHNlbGVjdGlvblJlY3QoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCA9IHRydWUpOwot
ICAgIHZpcnR1YWwgSW50UmVjdCBjYXJldFJlY3QoSW5saW5lQm94KiwgaW50IGNhcmV0T2Zmc2V0
LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IDApOworICAgIHZpcnR1YWwgSW50UmVjdCBs
b2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0
aFRvRW5kT2ZMaW5lID0gMCk7CiAKICAgICB2aXJ0dWFsIGludCBtYXJnaW5MZWZ0KCkgY29uc3Qg
eyByZXR1cm4gc3R5bGUoKS0+bWFyZ2luTGVmdCgpLmNhbGNNaW5WYWx1ZSgwKTsgfQogICAgIHZp
cnR1YWwgaW50IG1hcmdpblJpZ2h0KCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+bWFyZ2luUmln
aHQoKS5jYWxjTWluVmFsdWUoMCk7IH0KZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbSBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCA1YWFlNTZi
Li5mZWRiZDAzIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysr
IGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC02NTcsNyArNjU3LDcgQEAgc3Rh
dGljIGlubGluZSBXZWJEYXRhU291cmNlICpkYXRhU291cmNlKERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIpCiAtIChOU1JlY3QpX2NhcmV0UmVjdEF0Tm9kZTooRE9NTm9kZSAqKW5vZGUgb2Zmc2V0Oihp
bnQpb2Zmc2V0IGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KWFmZmluaXR5CiB7CiAgICAg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbihbbm9kZSBfbm9kZV0sIG9mZnNldCwgc3Rh
dGljX2Nhc3Q8RUFmZmluaXR5PihhZmZpbml0eSkpOwotICAgIHJldHVybiB2aXNpYmxlUG9zaXRp
b24uY2FyZXRSZWN0KCk7CisgICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbi5hYnNvbHV0ZUNhcmV0
Qm91bmRzKCk7CiB9CiAKIC0gKE5TUmVjdClfZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6KERPTVJhbmdl
ICopcmFuZ2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25118</attachid>
            <date>2008-11-12 23:01:10 -0800</date>
            <delta_ts>2008-11-15 09:21:54 -0800</delta_ts>
            <desc>WIP patch 2</desc>
            <filename>15671_wip_patch2.txt</filename>
            <type>text/plain</type>
            <size>33817</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29yZS5i
YXNlLmV4cAppbmRleCBlOTMzYWFlLi4yYzQ1MzM0IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUuYmFzZS5leHAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCkBAIC03NjYsNyArNzY2
LDggQEAgX19aTks3V2ViQ29yZTE1UmVzb3VyY2VSZXF1ZXN0MTJuc1VSTFJlcXVlc3RFdgogX19a
Tks3V2ViQ29yZTE1VmlzaWJsZVBvc2l0aW9uMTRjaGFyYWN0ZXJBZnRlckV2CiBfX1pOSzdXZWJD
b3JlMTVWaXNpYmxlUG9zaXRpb240bmV4dEViCiBfX1pOSzdXZWJDb3JlMTVWaXNpYmxlUG9zaXRp
b244cHJldmlvdXNFYgotX19aTks3V2ViQ29yZTE1VmlzaWJsZVBvc2l0aW9uOWNhcmV0UmVjdEV2
CitfX1pOSzdXZWJDb3JlMTVWaXNpYmxlUG9zaXRpb24xNGxvY2FsQ2FyZXRSZWN0RXYKK19fWk5L
N1dlYkNvcmUxNVZpc2libGVQb3NpdGlvbjE5YWJzb2x1dGVDYXJldEJvdW5kc0V2CiBfX1pOSzdX
ZWJDb3JlMTZIVE1MSW5wdXRFbGVtZW50MTJhdXRvQ29tcGxldGVFdgogX19aTks3V2ViQ29yZTE2
UmVzb3VyY2VSZXNwb25zZTEzbnNVUkxSZXNwb25zZUV2CiBfX1pOSzdXZWJDb3JlMTdSZXNvdXJj
ZUVycm9yQmFzZThsYXp5SW5pdEV2CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZC5jcHAKaW5kZXggNTFjOWQ1YS4uMmMyOWM0YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0
aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9EZWxl
dGVTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNTc4LDcgKzU3OCw3IEBAIHZvaWQgRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3JhcGhzKCkKICAgICAvLyBUaGUgcnVsZSBmb3IgbWVy
Z2luZyBpbnRvIGFuIGVtcHR5IGJsb2NrIGlzOiBvbmx5IGRvIHNvIGlmIGl0cyBmYXJ0aGVyIHRv
IHRoZSByaWdodC4KICAgICAvLyBGSVhNRTogQ29uc2lkZXIgUlRMLgogICAgIC8vIEZJWE1FOiBo
YW5kbGVTcGVjaWFsQ2FzZUJSRGVsZXRlIHByZXZlbnRzIHVzIGZyb20gZ2V0dGluZyBoZXJlIGlu
IGEgY2FzZSBsaWtlIDx1bD48bGk+Zm9vPGJyPjxicj48L2xpPjwvdWw+XmZvbwotICAgIGlmIChp
c1N0YXJ0T2ZQYXJhZ3JhcGgobWVyZ2VEZXN0aW5hdGlvbikgJiYgc3RhcnRPZlBhcmFncmFwaFRv
TW92ZS5jYXJldFJlY3QoKS54KCkgPiBtZXJnZURlc3RpbmF0aW9uLmNhcmV0UmVjdCgpLngoKSkg
eworICAgIGlmIChpc1N0YXJ0T2ZQYXJhZ3JhcGgobWVyZ2VEZXN0aW5hdGlvbikgJiYgc3RhcnRP
ZlBhcmFncmFwaFRvTW92ZS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkueCgpID4gbWVyZ2VEZXN0aW5h
dGlvbi5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkueCgpKSB7CiAgICAgICAgIEFTU0VSVChtZXJnZURl
c3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpLm5vZGUoKS0+aGFzVGFnTmFt
ZShiclRhZykpOwogICAgICAgICByZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMobWVyZ2VEZXN0
aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKS5ub2RlKCkpOwogICAgICAgICBt
X2VuZGluZ1Bvc2l0aW9uID0gc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwIGIv
V2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IDg5ZGFmMzMuLjE2
MjU0ZmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNw
cAorKysgYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKQEAgLTU1LDYg
KzU1LDggQEAKIAogI2RlZmluZSBFRElUX0RFQlVHIDAKIAordXNpbmcgbmFtZXNwYWNlIHN0ZDsK
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpAQCAt
NjIsMTMgKzY0LDE0IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBjb25zdCBpbnQgTm9Y
UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24gPSBJTlRfTUlOOwogCiBTZWxlY3Rpb25Db250
cm9sbGVyOjpTZWxlY3Rpb25Db250cm9sbGVyKEZyYW1lKiBmcmFtZSwgYm9vbCBpc0RyYWdDYXJl
dENvbnRyb2xsZXIpCi0gICAgOiBtX25lZWRzTGF5b3V0KHRydWUpCisgICAgOiBtX2NhcmV0UmVu
ZGVyZXIoMCkKKyAgICAsIG1fbmVlZHNMYXlvdXQodHJ1ZSkKICAgICAsIG1fbGFzdENoYW5nZVdh
c0hvcml6b250YWxFeHRlbnNpb24oZmFsc2UpCi0gICAgLCBtX2ZyYW1lKGZyYW1lKQogICAgICwg
bV9pc0RyYWdDYXJldENvbnRyb2xsZXIoaXNEcmFnQ2FyZXRDb250cm9sbGVyKQogICAgICwgbV9p
c0NhcmV0QmxpbmtpbmdTdXNwZW5kZWQoZmFsc2UpCi0gICAgLCBtX3hQb3NGb3JWZXJ0aWNhbEFy
cm93TmF2aWdhdGlvbihOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbikKICAgICAsIG1f
Zm9jdXNlZChmYWxzZSkKKyAgICAsIG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX3hQb3NGb3JWZXJ0
aWNhbEFycm93TmF2aWdhdGlvbihOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbikKIHsK
IH0KIApAQCAtNTUyLDkgKzU1NSw5IEBAIGJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5
KEVBbHRlcmF0aW9uIGFsdGVyLCBFRGlyZWN0aW9uIGRpciwgVGV4dEdyYW51bGFyCiB9CiAKIC8v
IEZJWE1FOiBNYXliZSBiYXNlbGluZSB3b3VsZCBiZSBiZXR0ZXI/Ci1zdGF0aWMgYm9vbCBjYXJl
dFkoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjLCBpbnQgJnkpCitzdGF0aWMgYm9vbCBhYnNvbHV0
ZUNhcmV0WShjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMsIGludCAmeSkKIHsKLSAgICBJbnRSZWN0
IHJlY3QgPSBjLmNhcmV0UmVjdCgpOworICAgIEludFJlY3QgcmVjdCA9IGMuYWJzb2x1dGVDYXJl
dEJvdW5kcygpOwogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIHkgPSByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkgLyAyOwpAQCAtNTk4LDcgKzYwMSw3
IEBAIGJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBp
bnQgdmVydGljYWxEaXN0YW5jZSwgYm9vbCB1CiAgICAgfQogCiAgICAgaW50IHN0YXJ0WTsKLSAg
ICBpZiAoIWNhcmV0WShwb3MsIHN0YXJ0WSkpCisgICAgaWYgKCFhYnNvbHV0ZUNhcmV0WShwb3Ms
IHN0YXJ0WSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAodXApCiAgICAgICAgIHN0
YXJ0WSA9IC1zdGFydFk7CkBAIC02MTEsNyArNjE0LDcgQEAgYm9vbCBTZWxlY3Rpb25Db250cm9s
bGVyOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIGludCB2ZXJ0aWNhbERpc3RhbmNlLCBib29s
IHUKICAgICAgICAgaWYgKG5leHQuaXNOdWxsKCkgfHwgbmV4dCA9PSBwKQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGludCBuZXh0WTsKLSAgICAgICAgaWYgKCFjYXJldFkobmV4dCwgbmV4
dFkpKQorICAgICAgICBpZiAoIWFic29sdXRlQ2FyZXRZKG5leHQsIG5leHRZKSkKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBpZiAodXApCiAgICAgICAgICAgICBuZXh0WSA9IC1uZXh0WTsK
QEAgLTY4Miw3ICs2ODUsNyBAQCBpbnQgU2VsZWN0aW9uQ29udHJvbGxlcjo6eFBvc0ZvclZlcnRp
Y2FsQXJyb3dOYXZpZ2F0aW9uKEVQb3NpdGlvblR5cGUgdHlwZSkKICAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHZpc2libGVQb3NpdGlvbihwb3MsIG1fc2VsLmFmZmluaXR5KCkpOwogICAgICAgICAv
LyBWaXNpYmxlUG9zaXRpb24gY3JlYXRpb24gY2FuIGZhaWwgaGVyZSBpZiBhIG5vZGUgY29udGFp
bmluZyB0aGUgc2VsZWN0aW9uIGJlY29tZXMgdmlzaWJpbGl0eTpoaWRkZW4KICAgICAgICAgLy8g
YWZ0ZXIgdGhlIHNlbGVjdGlvbiBpcyBjcmVhdGVkIGFuZCBiZWZvcmUgdGhpcyBmdW5jdGlvbiBp
cyBjYWxsZWQuCi0gICAgICAgIHggPSB2aXNpYmxlUG9zaXRpb24uaXNOb3ROdWxsKCkgPyB2aXNp
YmxlUG9zaXRpb24uY2FyZXRSZWN0KCkueCgpIDogMDsKKyAgICAgICAgeCA9IHZpc2libGVQb3Np
dGlvbi5pc05vdE51bGwoKSA/IHZpc2libGVQb3NpdGlvbi5hYnNvbHV0ZUNhcmV0Qm91bmRzKCku
eCgpIDogMDsKICAgICAgICAgbV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24gPSB4Owog
ICAgIH0KICAgICBlbHNlCkBAIC03MjQsNDQgKzcyNyw0MCBAQCB2b2lkIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OnNldE5lZWRzTGF5b3V0KGJvb2wgZmxhZykKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxl
cjo6bGF5b3V0KCkKIHsKICAgICBpZiAoaXNOb25lKCkgfHwgIW1fc2VsLnN0YXJ0KCkubm9kZSgp
LT5pbkRvY3VtZW50KCkgfHwgIW1fc2VsLmVuZCgpLm5vZGUoKS0+aW5Eb2N1bWVudCgpKSB7Cisg
ICAgICAgIG1fY2FyZXRSZW5kZXJlciA9IDA7CiAgICAgICAgIG1fY2FyZXRSZWN0ID0gSW50UmVj
dCgpOwotICAgICAgICBtX2NhcmV0UG9zaXRpb25PbkxheW91dCA9IEludFBvaW50KCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBtX3NlbC5zdGFydCgpLm5vZGUoKS0+ZG9jdW1lbnQo
KS0+dXBkYXRlUmVuZGVyaW5nKCk7CiAgICAgCisgICAgbV9jYXJldFJlbmRlcmVyID0gMDsKICAg
ICBtX2NhcmV0UmVjdCA9IEludFJlY3QoKTsKLSAgICBtX2NhcmV0UG9zaXRpb25PbkxheW91dCA9
IEludFBvaW50KCk7CiAgICAgICAgIAogICAgIGlmIChpc0NhcmV0KCkpIHsKICAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIHBvcyhtX3NlbC5zdGFydCgpLCBtX3NlbC5hZmZpbml0eSgpKTsKICAgICAg
ICAgaWYgKHBvcy5pc05vdE51bGwoKSkgewogICAgICAgICAgICAgQVNTRVJUKHBvcy5kZWVwRXF1
aXZhbGVudCgpLm5vZGUoKS0+cmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICBtX2NhcmV0UmVjdCA9
IHBvcy5jYXJldFJlY3QoKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IGJyb2tlbiB3aXRoIHRy
YW5zZm9ybXMKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gcG9zLmRlZXBFcXVpdmFs
ZW50KCkubm9kZSgpLT5yZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0
UG9pbnQoKSk7Ci0gICAgICAgICAgICBtX2NhcmV0UG9zaXRpb25PbkxheW91dCA9IHJvdW5kZWRJ
bnRQb2ludChhYnNQb3MpOworICAgICAgICAgICAgbV9jYXJldFJlbmRlcmVyID0gcG9zLmRlZXBF
cXVpdmFsZW50KCkubm9kZSgpLT5yZW5kZXJlcigpOworICAgICAgICAgICAgbV9jYXJldFJlY3Qg
PSBwb3MubG9jYWxDYXJldFJlY3QoKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIG1fbmVlZHNM
YXlvdXQgPSBmYWxzZTsKIH0KIAotSW50UmVjdCBTZWxlY3Rpb25Db250cm9sbGVyOjpjYXJldFJl
Y3QoKSBjb25zdAorSW50UmVjdCBTZWxlY3Rpb25Db250cm9sbGVyOjpsb2NhbENhcmV0UmVjdCgp
IGNvbnN0CiB7CiAgICAgaWYgKG1fbmVlZHNMYXlvdXQpCiAgICAgICAgIGNvbnN0X2Nhc3Q8U2Vs
ZWN0aW9uQ29udHJvbGxlciAqPih0aGlzKS0+bGF5b3V0KCk7CiAgICAgCi0gICAgSW50UmVjdCBj
YXJldCA9IG1fY2FyZXRSZWN0OwotCi0gICAgaWYgKG1fc2VsLnN0YXJ0KCkubm9kZSgpICYmIG1f
c2VsLnN0YXJ0KCkubm9kZSgpLT5yZW5kZXJlcigpKSB7Ci0gICAgICAgIEZsb2F0UG9pbnQgYWJz
UG9zID0gbV9zZWwuc3RhcnQoKS5ub2RlKCktPnJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZUZv
ckNvbnRlbnQoRmxvYXRQb2ludCgpKTsKLSAgICAgICAgY2FyZXQubW92ZShyb3VuZGVkSW50UG9p
bnQoYWJzUG9zKSAtIG1fY2FyZXRQb3NpdGlvbk9uTGF5b3V0KTsKLSAgICB9CisgICAgcmV0dXJu
IG1fY2FyZXRSZWN0OworfQogCi0gICAgcmV0dXJuIGNhcmV0OworSW50UmVjdCBTZWxlY3Rpb25D
b250cm9sbGVyOjphYnNvbHV0ZUNhcmV0Qm91bmRzKCkKK3sKKyAgICByZWNvbXB1dGVDYXJldFJl
Y3QoKTsKKyAgICByZXR1cm4gbV9hYnNDYXJldEJvdW5kczsKIH0KIAogc3RhdGljIEludFJlY3Qg
cmVwYWludFJlY3RGb3JDYXJldChJbnRSZWN0IGNhcmV0KQpAQCAtNzc2LDcgKzc3NSwxNiBAQCBz
dGF0aWMgSW50UmVjdCByZXBhaW50UmVjdEZvckNhcmV0KEludFJlY3QgY2FyZXQpCiAKIEludFJl
Y3QgU2VsZWN0aW9uQ29udHJvbGxlcjo6Y2FyZXRSZXBhaW50UmVjdCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIHJlcGFpbnRSZWN0Rm9yQ2FyZXQoY2FyZXRSZWN0KCkpOworICAgIEludFJlY3QgbG9j
YWxSZWN0ID0gcmVwYWludFJlY3RGb3JDYXJldChsb2NhbENhcmV0UmVjdCgpKTsKKyAgICAKKyAg
ICAvLyBEb24ndCB1c2UgbV9jYXJldFJlbmRlcmVyOyBpdCBtYXkgYmUgc3RhbGUKKyAgICBSZW5k
ZXJPYmplY3QqIGNhcmV0UmVuZGVyZXI7CisgICAgaWYgKG1fc2VsLnN0YXJ0KCkubm9kZSgpICYm
IChjYXJldFJlbmRlcmVyID0gbV9zZWwuc3RhcnQoKS5ub2RlKCktPnJlbmRlcmVyKCkpKSB7Cisg
ICAgICAgIEZsb2F0UXVhZCBhYnNDYXJldFF1YWQgPSBjYXJldFJlbmRlcmVyLT5sb2NhbFRvQWJz
b2x1dGVRdWFkKEZsb2F0UmVjdChsb2NhbFJlY3QpKTsKKyAgICAgICAgcmV0dXJuIGFic0NhcmV0
UXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAgIH0KKworICAgIHJldHVybiBJbnRSZWN0
KCk7CiB9CiAKIGJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6cmVjb21wdXRlQ2FyZXRSZWN0KCkK
QEAgLTc5MSwxNiArNzk5LDIyIEBAIGJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6cmVjb21wdXRl
Q2FyZXRSZWN0KCkKICAgICBpZiAoIW1fbmVlZHNMYXlvdXQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAorICAgIFJlbmRlck9iamVjdCogb2xkUmVuZGVyZXIgPSBtX2NhcmV0UmVuZGVyZXI7CiAg
ICAgSW50UmVjdCBvbGRSZWN0ID0gbV9jYXJldFJlY3Q7CiAgICAgbV9uZWVkc0xheW91dCA9IHRy
dWU7Ci0gICAgSW50UmVjdCBuZXdSZWN0ID0gY2FyZXRSZWN0KCk7Ci0gICAgaWYgKG9sZFJlY3Qg
PT0gbmV3UmVjdCkKKyAgICBJbnRSZWN0IG5ld1JlY3QgPSBsb2NhbENhcmV0UmVjdCgpOworICAg
IGlmIChvbGRSZWN0ID09IG5ld1JlY3QgJiYgb2xkUmVuZGVyZXIgPT0gbV9jYXJldFJlbmRlcmVy
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBJbnRSZWN0IG9sZEFic1JlcGFpbnRSZWN0
ID0gbV9hYnNDYXJldEJvdW5kczsKKyAgICAvLyBGSVhNRTogY2FyZXRSZXBhaW50UmVjdCBjYW4g
cmV0dXJuIGFuIGVtcHR5IHJlY3QKKyAgICBtX2Fic0NhcmV0Qm91bmRzID0gY2FyZXRSZXBhaW50
UmVjdCgpOworICAgIAogICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UmVu
ZGVyVmlldyo+KG1fZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlcmVyKCkpKSB7Ci0gICAgICAgIHZp
ZXctPnJlcGFpbnRWaWV3UmVjdGFuZ2xlKHJlcGFpbnRSZWN0Rm9yQ2FyZXQob2xkUmVjdCksIGZh
bHNlKTsKLSAgICAgICAgdmlldy0+cmVwYWludFZpZXdSZWN0YW5nbGUocmVwYWludFJlY3RGb3JD
YXJldChuZXdSZWN0KSwgZmFsc2UpOworICAgICAgICB2aWV3LT5yZXBhaW50Vmlld1JlY3Rhbmds
ZShvbGRBYnNSZXBhaW50UmVjdCwgZmFsc2UpOworICAgICAgICB2aWV3LT5yZXBhaW50Vmlld1Jl
Y3RhbmdsZShtX2Fic0NhcmV0Qm91bmRzLCBmYWxzZSk7CiAgICAgfQorCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTgyOCwxOSArODQyLDIxIEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6
aW52YWxpZGF0ZUNhcmV0UmVjdCgpCiAKICAgICBpZiAoIWNhcmV0UmVjdENoYW5nZWQpIHsKICAg
ICAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxSZW5kZXJWaWV3Kj4oZC0+
cmVuZGVyZXIoKSkpCi0gICAgICAgICAgICB2aWV3LT5yZXBhaW50Vmlld1JlY3RhbmdsZShjYXJl
dFJlcGFpbnRSZWN0KCksIGZhbHNlKTsKKyAgICAgICAgICAgIHZpZXctPnJlcGFpbnRWaWV3UmVj
dGFuZ2xlKG1fYWJzQ2FyZXRCb3VuZHMsIGZhbHNlKTsKICAgICB9CiB9CiAKLXZvaWQgU2VsZWN0
aW9uQ29udHJvbGxlcjo6cGFpbnRDYXJldChHcmFwaGljc0NvbnRleHQgKnAsIGNvbnN0IEludFJl
Y3QgJnJlY3QpCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnBhaW50Q2FyZXQoR3JhcGhpY3ND
b250ZXh0KiBwLCBpbnQgdHgsIGludCB0eSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCiB7CiAg
ICAgaWYgKCEgbV9zZWwuaXNDYXJldCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9u
ZWVkc0xheW91dCkKICAgICAgICAgbGF5b3V0KCk7Ci0gICAgICAgIAotICAgIEludFJlY3QgY2Fy
ZXQgPSBpbnRlcnNlY3Rpb24oY2FyZXRSZWN0KCksIHJlY3QpOworICAgIAorICAgIEludFJlY3Qg
ZHJhd2luZ1JlY3QgPSBsb2NhbENhcmV0UmVjdCgpOworICAgIGRyYXdpbmdSZWN0Lm1vdmUodHgs
IHR5KTsKKyAgICBJbnRSZWN0IGNhcmV0ID0gaW50ZXJzZWN0aW9uKGRyYXdpbmdSZWN0LCBjbGlw
UmVjdCk7CiAgICAgaWYgKCFjYXJldC5pc0VtcHR5KCkpIHsKICAgICAgICAgQ29sb3IgY2FyZXRD
b2xvciA9IENvbG9yOjpibGFjazsKICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHJvb3RFZGl0
YWJsZUVsZW1lbnQoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250
cm9sbGVyLmggYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oCmluZGV4IGJh
ODk2NzAuLjIxNGZkODIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250
cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaApAQCAt
ODUsNyArODUsMTAgQEAgcHVibGljOgogICAgIFBvc2l0aW9uIHN0YXJ0KCkgY29uc3QgeyByZXR1
cm4gbV9zZWwuc3RhcnQoKTsgfQogICAgIFBvc2l0aW9uIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2VsLmVuZCgpOyB9CiAKLSAgICBJbnRSZWN0IGNhcmV0UmVjdCgpIGNvbnN0OworICAgIC8vIENh
cmV0IHJlY3QgbG9jYWwgdG8gdGhlIGNhcmV0J3MgcmVuZGVyZXIKKyAgICBJbnRSZWN0IGxvY2Fs
Q2FyZXRSZWN0KCkgY29uc3Q7CisgICAgLy8gQm91bmRzIG9mIChwb3NzaWJseSB0cmFuc2Zvcm1l
ZCkgY2FyZXQgaW4gYWJzb2x1dGUgY29vcmRzCisgICAgSW50UmVjdCBhYnNvbHV0ZUNhcmV0Qm91
bmRzKCk7CiAgICAgdm9pZCBzZXROZWVkc0xheW91dChib29sIGZsYWcgPSB0cnVlKTsKIAogICAg
IHZvaWQgc2V0TGFzdENoYW5nZVdhc0hvcml6b250YWxFeHRlbnNpb24oYm9vbCBiKSB7IG1fbGFz
dENoYW5nZVdhc0hvcml6b250YWxFeHRlbnNpb24gPSBiOyB9CkBAIC0xMDYsNyArMTA5LDcgQEAg
cHVibGljOgogCiAgICAgYm9vbCByZWNvbXB1dGVDYXJldFJlY3QoKTsgLy8gcmV0dXJucyB0cnVl
IGlmIGNhcmV0IHJlY3QgbW92ZWQKICAgICB2b2lkIGludmFsaWRhdGVDYXJldFJlY3QoKTsKLSAg
ICB2b2lkIHBhaW50Q2FyZXQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworICAg
IHZvaWQgcGFpbnRDYXJldChHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSwgY29uc3Qg
SW50UmVjdCYgY2xpcFJlY3QpOwogCiAgICAgLy8gVXNlZCB0byBzdXNwZW5kIGNhcmV0IGJsaW5r
aW5nIHdoaWxlIHRoZSBtb3VzZSBpcyBkb3duLgogICAgIHZvaWQgc2V0Q2FyZXRCbGlua2luZ1N1
c3BlbmRlZChib29sIHN1c3BlbmRlZCkgeyBtX2lzQ2FyZXRCbGlua2luZ1N1c3BlbmRlZCA9IHN1
c3BlbmRlZDsgfQpAQCAtMTQ3LDIyICsxNTAsMTggQEAgcHJpdmF0ZToKIAogICAgIFNlbGVjdGlv
biBtX3NlbDsKIAotICAgIEludFJlY3QgbV9jYXJldFJlY3Q7ICAgICAgICAgICAgLy8gY2FyZXQg
Y29vcmRpbmF0ZXMsIHNpemUsIGFuZCBwb3NpdGlvbgotICAgIAotICAgIC8vIG1fY2FyZXRQb3Np
dGlvbk9uTGF5b3V0IHN0b3JlcyB0aGUgc2Nyb2xsIG9mZnNldCBvbiB0aGUgcHJldmlvdXMgY2Fs
bCB0byBTZWxlY3Rpb25Db250cm9sbGVyOjpsYXlvdXQoKS4KLSAgICAvLyBXaGVuIGFza2VkIGZv
ciBjYXJldFJlY3QoKSwgd2UgY29ycmVjdCBtX2NhcmV0UmVjdCBmb3Igb2Zmc2V0IGR1ZSB0byBz
Y3JvbGxpbmcgc2luY2UgdGhlIGxhc3QgbGF5b3V0KCkuCi0gICAgLy8gVGhpcyBpcyBmYXN0ZXIg
dGhhbiBkb2luZyBhbm90aGVyIGxheW91dCgpLgotICAgIEludFBvaW50IG1fY2FyZXRQb3NpdGlv
bk9uTGF5b3V0OworICAgIFJlbmRlck9iamVjdCogbV9jYXJldFJlbmRlcmVyOworICAgIEludFJl
Y3QgbV9jYXJldFJlY3Q7ICAgICAgICAvLyBjYXJldCBjb29yZGluYXRlcywgc2l6ZSwgYW5kIHBv
c2l0aW9uLCBpbiBjb29yZHMgbG9jYWwgdG8gdGhlIGNhcmV0J3MgcmVuZGVyZXIKKyAgICBJbnRS
ZWN0IG1fYWJzQ2FyZXRCb3VuZHM7ICAgLy8gYWJzb2x1dGUgYm91bmRpbmcgcmVjdCBmb3IgdGhl
IGNhcmV0CiAgICAgCiAgICAgYm9vbCBtX25lZWRzTGF5b3V0IDogMTsgICAgICAgLy8gdHJ1ZSBp
ZiB0aGUgY2FyZXQgYW5kIGV4cGVjdGVkVmlzaWJsZSByZWN0YW5nbGVzIG5lZWQgdG8gYmUgY2Fs
Y3VsYXRlZAogICAgIGJvb2wgbV9sYXN0Q2hhbmdlV2FzSG9yaXpvbnRhbEV4dGVuc2lvbiA6IDE7
Ci0gICAgRnJhbWUqIG1fZnJhbWU7Ci0gICAgYm9vbCBtX2lzRHJhZ0NhcmV0Q29udHJvbGxlcjsK
KyAgICBib29sIG1faXNEcmFnQ2FyZXRDb250cm9sbGVyIDogMTsKKyAgICBib29sIG1faXNDYXJl
dEJsaW5raW5nU3VzcGVuZGVkIDogMTsKKyAgICBib29sIG1fZm9jdXNlZCA6IDE7CiAKLSAgICBi
b29sIG1faXNDYXJldEJsaW5raW5nU3VzcGVuZGVkOwotICAgIAorICAgIEZyYW1lKiBtX2ZyYW1l
OwogICAgIGludCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbjsKLSAgICBib29sIG1f
Zm9jdXNlZDsKIH07CiAKIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU2VsZWN0aW9uQ29u
dHJvbGxlciYgYSwgY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciYgYikKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwIGIvV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVQb3NpdGlvbi5jcHAKaW5kZXggNjI2YzViNC4uNDdiNDIyOSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVQb3NpdGlvbi5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDU3RyaW5nLmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJv
eC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAgLTUyMyw3ICs1MjQsNyBAQCBVQ2hhciBWaXNp
YmxlUG9zaXRpb246OmNoYXJhY3RlckFmdGVyKCkgY29uc3QKICAgICByZXR1cm4gdGV4dE5vZGUt
PmRhdGEoKVtvZmZzZXRdOwogfQogCi1JbnRSZWN0IFZpc2libGVQb3NpdGlvbjo6Y2FyZXRSZWN0
KCkgY29uc3QKK0ludFJlY3QgVmlzaWJsZVBvc2l0aW9uOjpsb2NhbENhcmV0UmVjdCgpIGNvbnN0
CiB7CiAgICAgTm9kZSogbm9kZSA9IG1fZGVlcFBvc2l0aW9uLm5vZGUoKTsKICAgICBpZiAoIW5v
ZGUpCkBAIC01NDAsNyArNTQxLDIwIEBAIEludFJlY3QgVmlzaWJsZVBvc2l0aW9uOjpjYXJldFJl
Y3QoKSBjb25zdAogICAgIGlmIChpbmxpbmVCb3gpCiAgICAgICAgIHJlbmRlcmVyID0gaW5saW5l
Qm94LT5vYmplY3QoKTsKIAotICAgIHJldHVybiByZW5kZXJlci0+Y2FyZXRSZWN0KGlubGluZUJv
eCwgY2FyZXRPZmZzZXQpOworICAgIHJldHVybiByZW5kZXJlci0+bG9jYWxDYXJldFJlY3QoaW5s
aW5lQm94LCBjYXJldE9mZnNldCk7Cit9CisKK0ludFJlY3QgVmlzaWJsZVBvc2l0aW9uOjphYnNv
bHV0ZUNhcmV0Qm91bmRzKCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IGxvY2FsUmVjdCA9IGxvY2Fs
Q2FyZXRSZWN0KCk7CisgICAgaWYgKGxvY2FsUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBJbnRSZWN0KCk7CisKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV9kZWVwUG9zaXRp
b24ubm9kZSgpID8gbV9kZWVwUG9zaXRpb24ubm9kZSgpLT5yZW5kZXJlcigpIDogMDsKKyAgICBp
ZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworCisgICAgcmV0dXJuIHJl
bmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChsb2NhbFJlY3QpKS5lbmNsb3Np
bmdCb3VuZGluZ0JveCgpOwogfQogCiB2b2lkIFZpc2libGVQb3NpdGlvbjo6ZGVidWdQb3NpdGlv
bihjb25zdCBjaGFyKiBtc2cpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVBvc2l0aW9uLmggYi9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgKaW5kZXgg
NzlmM2E1Ny4uNmRhMGQxMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3Np
dGlvbi5oCisrKyBiL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaApAQCAtOTAsNyAr
OTAsMTAgQEAgcHVibGljOgogICAgICAgICBtX2RlZXBQb3NpdGlvbi5nZXRJbmxpbmVCb3hBbmRP
ZmZzZXQobV9hZmZpbml0eSwgcHJpbWFyeURpcmVjdGlvbiwgaW5saW5lQm94LCBjYXJldE9mZnNl
dCk7CiAgICAgfQogCi0gICAgSW50UmVjdCBjYXJldFJlY3QoKSBjb25zdDsKKyAgICAvLyBSZWN0
IGlzIGxvY2FsIHRvIG1fZGVlcFBvc2l0aW9uLm5vZGUoKS0+cmVuZGVyZXIoKQorICAgIEludFJl
Y3QgbG9jYWxDYXJldFJlY3QoKSBjb25zdDsKKyAgICAvLyBCb3VuZHMgb2YgKHBvc3NpYmx5IHRy
YW5zZm9ybWVkKSBjYXJldCBpbiBhYnNvbHV0ZSBjb29yZHMKKyAgICBJbnRSZWN0IGFic29sdXRl
Q2FyZXRCb3VuZHMoKSBjb25zdDsKIAogI2lmbmRlZiBOREVCVUcKICAgICB2b2lkIGZvcm1hdEZv
ckRlYnVnZ2VyKGNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvZWRpdGluZy9tYWMvU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbSBiL1dlYkNv
cmUvZWRpdGluZy9tYWMvU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbQppbmRleCBlMDcwMjRhLi43
Zjk1ZDlkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvbWFjL1NlbGVjdGlvbkNvbnRyb2xs
ZXJNYWMubW0KKysrIGIvV2ViQ29yZS9lZGl0aW5nL21hYy9TZWxlY3Rpb25Db250cm9sbGVyTWFj
Lm1tCkBAIC00Niw3ICs0Niw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bm90aWZ5QWNj
ZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSgpCiAgICAgaWYgKFVBWm9vbUVuYWJsZWQoKSAm
JiBtX3NlbC5pc0NhcmV0KCkgJiYgbV9zZWwuc3RhcnQoKS5ub2RlKCkpIHsKICAgICAgICAgUmVu
ZGVyVmlldyAqcmVuZGVyVmlldyA9IHN0YXRpY19jYXN0PFJlbmRlclZpZXcqPihtX3NlbC5zdGFy
dCgpLm5vZGUoKS0+cmVuZGVyZXIoKSk7CiAgICAgICAgIGlmIChyZW5kZXJWaWV3KSB7Ci0gICAg
ICAgICAgICBJbnRSZWN0IHNlbGVjdGlvblJlY3QgPSBjYXJldFJlY3QoKTsKKyAgICAgICAgICAg
IEludFJlY3Qgc2VsZWN0aW9uUmVjdCA9IGFic29sdXRlQ2FyZXRCb3VuZHMoKTsKICAgICAgICAg
ICAgIEludFJlY3Qgdmlld1JlY3QgPSByZW5kZXJWaWV3LT52aWV3UmVjdCgpOwogICAgICAgICAg
ICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSByZW5kZXJWaWV3LT52aWV3KCktPmZyYW1lVmlldygp
OyAKICAgICAgICAgICAgIGlmIChmcmFtZVZpZXcpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFn
ZS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1dlYkNvcmUvcGFnZS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCBlZGQyNjQ4Li5kNWZhNDE5IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9w
YWdlL0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC0xNjI0LDE5ICsxNjI0LDE5IEBA
IEludFJlY3QgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Ym91bmRzRm9yVmlzaWJsZVBvc2l0
aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvCiAgICAgCiAgICAgLy8gQ3JlYXRlIGEgbXV0YWJsZSBW
aXNpYmxlUG9zaXRpb25SYW5nZS4KICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSByYW5nZSh2aXNp
YmxlUG9zaXRpb25SYW5nZSk7Ci0gICAgSW50UmVjdCByZWN0MSA9IHJhbmdlLnN0YXJ0LmNhcmV0
UmVjdCgpOwotICAgIEludFJlY3QgcmVjdDIgPSByYW5nZS5lbmQuY2FyZXRSZWN0KCk7CisgICAg
SW50UmVjdCByZWN0MSA9IHJhbmdlLnN0YXJ0LmFic29sdXRlQ2FyZXRCb3VuZHMoKTsKKyAgICBJ
bnRSZWN0IHJlY3QyID0gcmFuZ2UuZW5kLmFic29sdXRlQ2FyZXRCb3VuZHMoKTsKICAgICAKICAg
ICAvLyByZWFkanVzdCBmb3IgcG9zaXRpb24gYXQgdGhlIGVkZ2Ugb2YgYSBsaW5lLiAgVGhpcyBp
cyB0byBleGNsdWRlIGxpbmUgcmVjdCB0aGF0IGRvZXNuJ3QgbmVlZCB0byBiZSBhY2NvdW50ZWQg
aW4gdGhlIHJhbmdlIGJvdW5kcwogICAgIGlmIChyZWN0Mi55KCkgIT0gcmVjdDEueSgpKSB7CiAg
ICAgICAgIFZpc2libGVQb3NpdGlvbiBlbmRPZkZpcnN0TGluZSA9IGVuZE9mTGluZShyYW5nZS5z
dGFydCk7CiAgICAgICAgIGlmIChyYW5nZS5zdGFydCA9PSBlbmRPZkZpcnN0TGluZSkgewogICAg
ICAgICAgICAgcmFuZ2Uuc3RhcnQuc2V0QWZmaW5pdHkoRE9XTlNUUkVBTSk7Ci0gICAgICAgICAg
ICByZWN0MSA9IHJhbmdlLnN0YXJ0LmNhcmV0UmVjdCgpOworICAgICAgICAgICAgcmVjdDEgPSBy
YW5nZS5zdGFydC5hYnNvbHV0ZUNhcmV0Qm91bmRzKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KHJhbmdlLmVuZCA9PSBlbmRPZkZpcnN0TGluZSkgewogICAgICAgICAgICAgcmFuZ2UuZW5kLnNl
dEFmZmluaXR5KFVQU1RSRUFNKTsKLSAgICAgICAgICAgIHJlY3QyID0gcmFuZ2UuZW5kLmNhcmV0
UmVjdCgpOworICAgICAgICAgICAgcmVjdDIgPSByYW5nZS5lbmQuYWJzb2x1dGVDYXJldEJvdW5k
cygpOwogICAgICAgICB9CiAgICAgfQogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0Zy
YW1lLmNwcCBiL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggYTdjNGVkNy4uZDBlMTc3OCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCkBAIC0yNTYsMTUgKzI1NiwyMiBAQCBJbnRSZWN0IEZyYW1lOjpmaXJzdFJlY3RGb3JS
YW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAg
QVNTRVJUKHJhbmdlLT5zdGFydENvbnRhaW5lcihlYykpOwogICAgIEFTU0VSVChyYW5nZS0+ZW5k
Q29udGFpbmVyKGVjKSk7CisKICAgICBJbmxpbmVCb3gqIHN0YXJ0SW5saW5lQm94OwogICAgIGlu
dCBzdGFydENhcmV0T2Zmc2V0OwogICAgIHJhbmdlLT5zdGFydFBvc2l0aW9uKCkuZ2V0SW5saW5l
Qm94QW5kT2Zmc2V0KERPV05TVFJFQU0sIHN0YXJ0SW5saW5lQm94LCBzdGFydENhcmV0T2Zmc2V0
KTsKLSAgICBJbnRSZWN0IHN0YXJ0Q2FyZXRSZWN0ID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVj
KS0+cmVuZGVyZXIoKS0+Y2FyZXRSZWN0KHN0YXJ0SW5saW5lQm94LCBzdGFydENhcmV0T2Zmc2V0
LCAmZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKTsKKworICAgIFJlbmRlck9iamVjdCogc3RhcnRSZW5k
ZXJlciA9IHJhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPnJlbmRlcmVyKCk7CisgICAgSW50UmVj
dCBsb2NhbFN0YXJ0UmVjdCA9IHN0YXJ0UmVuZGVyZXItPmxvY2FsQ2FyZXRSZWN0KHN0YXJ0SW5s
aW5lQm94LCBzdGFydENhcmV0T2Zmc2V0LCAmZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKTsKKyAgICBJ
bnRSZWN0IHN0YXJ0Q2FyZXRSZWN0ID0gc3RhcnRSZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVh
ZChGbG9hdFJlY3QobG9jYWxTdGFydFJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogCiAg
ICAgSW5saW5lQm94KiBlbmRJbmxpbmVCb3g7CiAgICAgaW50IGVuZENhcmV0T2Zmc2V0OwogICAg
IHJhbmdlLT5lbmRQb3NpdGlvbigpLmdldElubGluZUJveEFuZE9mZnNldChVUFNUUkVBTSwgZW5k
SW5saW5lQm94LCBlbmRDYXJldE9mZnNldCk7Ci0gICAgSW50UmVjdCBlbmRDYXJldFJlY3QgPSBy
YW5nZS0+ZW5kQ29udGFpbmVyKGVjKS0+cmVuZGVyZXIoKS0+Y2FyZXRSZWN0KGVuZElubGluZUJv
eCwgZW5kQ2FyZXRPZmZzZXQpOworCisgICAgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJlciA9IHJh
bmdlLT5lbmRDb250YWluZXIoZWMpLT5yZW5kZXJlcigpOworICAgIEludFJlY3QgbG9jYWxFbmRS
ZWN0ID0gZW5kUmVuZGVyZXItPmxvY2FsQ2FyZXRSZWN0KGVuZElubGluZUJveCwgZW5kQ2FyZXRP
ZmZzZXQpOworICAgIEludFJlY3QgZW5kQ2FyZXRSZWN0ID0gZW5kUmVuZGVyZXItPmxvY2FsVG9B
YnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGxvY2FsRW5kUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94
KCk7CiAKICAgICBpZiAoc3RhcnRDYXJldFJlY3QueSgpID09IGVuZENhcmV0UmVjdC55KCkpIHsK
ICAgICAgICAgLy8gc3RhcnQgYW5kIGVuZCBhcmUgb24gdGhlIHNhbWUgbGluZQpAQCAtNjE2LDE4
ICs2MjMsMTggQEAgdm9pZCBGcmFtZTo6Y2FyZXRCbGlua1RpbWVyRmlyZWQoVGltZXI8RnJhbWU+
KikKICAgICBzZWxlY3Rpb24oKS0+aW52YWxpZGF0ZUNhcmV0UmVjdCgpOwogfQogCi12b2lkIEZy
YW1lOjpwYWludENhcmV0KEdyYXBoaWNzQ29udGV4dCogcCwgY29uc3QgSW50UmVjdCYgcmVjdCkg
Y29uc3QKK3ZvaWQgRnJhbWU6OnBhaW50Q2FyZXQoR3JhcGhpY3NDb250ZXh0KiBwLCBpbnQgdHgs
IGludCB0eSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIGNvbnN0CiB7CiAgICAgaWYgKGQtPm1f
Y2FyZXRQYWludCAmJiBkLT5tX2NhcmV0VmlzaWJsZSkKLSAgICAgICAgc2VsZWN0aW9uKCktPnBh
aW50Q2FyZXQocCwgcmVjdCk7CisgICAgICAgIHNlbGVjdGlvbigpLT5wYWludENhcmV0KHAsIHR4
LCB0eSwgY2xpcFJlY3QpOwogfQogCi12b2lkIEZyYW1lOjpwYWludERyYWdDYXJldChHcmFwaGlj
c0NvbnRleHQqIHAsIGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit2b2lkIEZyYW1lOjpwYWlu
dERyYWdDYXJldChHcmFwaGljc0NvbnRleHQqIHAsIGludCB0eCwgaW50IHR5LCBjb25zdCBJbnRS
ZWN0JiBjbGlwUmVjdCkgY29uc3QKIHsKICAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBkcmFnQ2Fy
ZXRDb250cm9sbGVyID0gZC0+bV9wYWdlLT5kcmFnQ2FyZXRDb250cm9sbGVyKCk7CiAgICAgQVNT
RVJUKGRyYWdDYXJldENvbnRyb2xsZXItPnNlbGVjdGlvbigpLmlzQ2FyZXQoKSk7CiAgICAgaWYg
KGRyYWdDYXJldENvbnRyb2xsZXItPnNlbGVjdGlvbigpLnN0YXJ0KCkubm9kZSgpLT5kb2N1bWVu
dCgpLT5mcmFtZSgpID09IHRoaXMpCi0gICAgICAgIGRyYWdDYXJldENvbnRyb2xsZXItPnBhaW50
Q2FyZXQocCwgcmVjdCk7CisgICAgICAgIGRyYWdDYXJldENvbnRyb2xsZXItPnBhaW50Q2FyZXQo
cCwgdHgsIHR5LCBjbGlwUmVjdCk7CiB9CiAKIGZsb2F0IEZyYW1lOjp6b29tRmFjdG9yKCkgY29u
c3QKQEAgLTEyMDMsNyArMTIxMCw3IEBAIHZvaWQgRnJhbWU6OnJldmVhbFNlbGVjdGlvbihjb25z
dCBSZW5kZXJMYXllcjo6U2Nyb2xsQWxpZ25tZW50JiBhbGlnbm1lbnQpIGNvbnN0CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBTZWxlY3Rpb246OkNBUkVU
OgotICAgICAgICAgICAgcmVjdCA9IHNlbGVjdGlvbigpLT5jYXJldFJlY3QoKTsKKyAgICAgICAg
ICAgIHJlY3QgPSBzZWxlY3Rpb24oKS0+YWJzb2x1dGVDYXJldEJvdW5kcygpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBTZWxlY3Rpb246OlJBTkdFOgpA
QCAtMTIzMCw3ICsxMjM3LDcgQEAgdm9pZCBGcmFtZTo6cmV2ZWFsQ2FyZXQoY29uc3QgUmVuZGVy
TGF5ZXI6OlNjcm9sbEFsaWdubWVudCYgYWxpZ25tZW50KSBjb25zdAogCiAgICAgUG9zaXRpb24g
ZXh0ZW50ID0gc2VsZWN0aW9uKCktPmV4dGVudCgpOwogICAgIGlmIChleHRlbnQubm9kZSgpICYm
IGV4dGVudC5ub2RlKCktPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgSW50UmVjdCBleHRlbnRSZWN0
ID0gVmlzaWJsZVBvc2l0aW9uKGV4dGVudCkuY2FyZXRSZWN0KCk7CisgICAgICAgIEludFJlY3Qg
ZXh0ZW50UmVjdCA9IFZpc2libGVQb3NpdGlvbihleHRlbnQpLmFic29sdXRlQ2FyZXRCb3VuZHMo
KTsKICAgICAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gZXh0ZW50Lm5vZGUoKS0+cmVuZGVyZXIo
KS0+ZW5jbG9zaW5nTGF5ZXIoKTsKICAgICAgICAgaWYgKGxheWVyKQogICAgICAgICAgICAgbGF5
ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUoZXh0ZW50UmVjdCwgZmFsc2UsIGFsaWdubWVudCwgYWxp
Z25tZW50KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9GcmFtZS5oIGIvV2ViQ29yZS9wYWdl
L0ZyYW1lLmgKaW5kZXggNzE0M2Q1ZC4uMjA4NjcxYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdl
L0ZyYW1lLmgKKysrIGIvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKQEAgLTI0NCw4ICsyNDQsOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBpbnZhbGlkYXRlU2VsZWN0aW9uKCk7CiAKICAgICB2b2lkIHNldENh
cmV0VmlzaWJsZShib29sID0gdHJ1ZSk7Ci0gICAgdm9pZCBwYWludENhcmV0KEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEludFJlY3QmKSBjb25zdDsgIAotICAgIHZvaWQgcGFpbnREcmFnQ2FyZXQo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgIHZvaWQgcGFpbnRD
YXJldChHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSwgY29uc3QgSW50UmVjdCYgY2xp
cFJlY3QpIGNvbnN0OyAgCisgICAgdm9pZCBwYWludERyYWdDYXJldChHcmFwaGljc0NvbnRleHQq
LCBpbnQgdHgsIGludCB0eSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIGNvbnN0OwogCiAgICAg
Ym9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OyAvLyBpZiB0cnVlLCBldmVyeXRoaW5nIGlu
IGZyYW1lIGlzIGVkaXRhYmxlCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRSZWN0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNw
cAppbmRleCBlYzdiM2ZhLi4zNWYyYzU5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UmVjdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFJlY3QuY3BwCkBAIC0xMTksNCArMTE5LDExIEBAIEludFJlY3QgZW5jbG9zaW5nSW50UmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgcmV0dXJuIEludFJlY3QobCwgdCwgciAtIGwsIGIg
LSB0KTsKIH0KIAorRmxvYXRSZWN0IGVuY2xvc2luZ1JlY3QoY29uc3QgRmxvYXRQb2ludCYgYSwg
Y29uc3QgRmxvYXRQb2ludCYgYikKK3sKKyAgICByZXR1cm4gRmxvYXRSZWN0KG1pbihhLngoKSwg
Yi54KCkpLCBtaW4oYS55KCksIGIueSgpKSwgCisgICAgICAgICAgICAgICAgICAgICBmYWJzZihh
LngoKSAtIGIueCgpKSwgZmFic2YoYS55KCkgLSBiLnkoKSkpOworCit9CisKIH0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmggYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCmluZGV4IDExZTM3OTEuLmM5NjA1NzAgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaApAQCAtMTc5LDYgKzE3OSw3IEBAIGlubGluZSBi
b29sIG9wZXJhdG9yIT0oY29uc3QgRmxvYXRSZWN0JiBhLCBjb25zdCBGbG9hdFJlY3QmIGIpCiAK
IEludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKIAorRmxvYXRSZWN0
IGVuY2xvc2luZ1JlY3QoY29uc3QgRmxvYXRQb2ludCYgYSwgY29uc3QgRmxvYXRQb2ludCYgYik7
CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUu
Y3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCmluZGV4IDg3MmE2NDAuLjVm
MDhjNzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAorKysg
Yi9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgTGF5
b3V0U3RhdGU6OkxheW91dFN0YXRlKFJlbmRlck9iamVjdCogcm9vdCkKIHsKICAgICBSZW5kZXJP
YmplY3QqIGNvbnRhaW5lciA9IHJvb3QtPmNvbnRhaW5lcigpOwogICAgIC8vIEZJWE1FOiB0aGlz
IGlzIGJyb2tlbiB3aXRoIHRyYW5zZm9ybXM/Ci0gICAgRmxvYXRQb2ludCBhYnNDb250ZW50UG9p
bnQgPSBjb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQb2ludCgpKTsK
KyAgICBGbG9hdFBvaW50IGFic0NvbnRlbnRQb2ludCA9IGNvbnRhaW5lci0+bG9jYWxUb0Fic29s
dXRlRm9yQ29udGVudChGbG9hdFBvaW50KCksIGZhbHNlLCB0cnVlKTsKICAgICBtX29mZnNldCA9
IEludFNpemUoYWJzQ29udGVudFBvaW50LngoKSwgYWJzQ29udGVudFBvaW50LnkoKSk7CiAgICAg
bV9uZXh0ID0gMDsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCA1NDg5ZTExLi5k
MDEwNGQ0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysr
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0xNjM1LDcgKzE2MzUsNyBA
QCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENoaWxkcmVuKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBp
bnQgdHgsIGludCB0eSkKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q2FyZXQo
UGFpbnRJbmZvJiBwYWludEluZm8sIENhcmV0VHlwZSB0eXBlKQordm9pZCBSZW5kZXJCbG9jazo6
cGFpbnRDYXJldChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHksIENhcmV0VHlw
ZSB0eXBlKQogewogICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlvbiA9IHR5cGUgPT0g
Q3Vyc29yQ2FyZXQgPyBkb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKSA6IGRvY3VtZW50
KCktPmZyYW1lKCktPmRyYWdDYXJldENvbnRyb2xsZXIoKTsKICAgICBOb2RlKiBjYXJldE5vZGUg
PSBzZWxlY3Rpb24tPnN0YXJ0KCkubm9kZSgpOwpAQCAtMTY0Niw5ICsxNjQ2LDkgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6cGFpbnRDYXJldChQYWludEluZm8mIHBhaW50SW5mbywgQ2FyZXRUeXBlIHR5
cGUpCiAgICAgYm9vbCBjdXJzb3JJbnNpZGVCbG9ja0NhcmV0Tm9kZSA9IHJlbmRlcmVyLT5pc0Js
b2NrRmxvdygpICYmIHNlbGVjdGlvbi0+aXNJbnNpZGVOb2RlKCk7CiAgICAgaWYgKChjdXJzb3JJ
bnNpZGVCbG9ja0NhcmV0Tm9kZSA/IHJlbmRlcmVyIDogcmVuZGVyZXItPmNvbnRhaW5pbmdCbG9j
aygpKSA9PSB0aGlzICYmIHNlbGVjdGlvbi0+aXNDb250ZW50RWRpdGFibGUoKSkgewogICAgICAg
ICBpZiAodHlwZSA9PSBDdXJzb3JDYXJldCkKLSAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1l
KCktPnBhaW50Q2FyZXQocGFpbnRJbmZvLmNvbnRleHQsIHBhaW50SW5mby5yZWN0KTsKKyAgICAg
ICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPnBhaW50Q2FyZXQocGFpbnRJbmZvLmNvbnRleHQs
IHR4LCB0eSwgcGFpbnRJbmZvLnJlY3QpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBkb2N1
bWVudCgpLT5mcmFtZSgpLT5wYWludERyYWdDYXJldChwYWludEluZm8uY29udGV4dCwgcGFpbnRJ
bmZvLnJlY3QpOworICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+cGFpbnREcmFnQ2Fy
ZXQocGFpbnRJbmZvLmNvbnRleHQsIHR4LCB0eSwgcGFpbnRJbmZvLnJlY3QpOwogICAgIH0KIH0K
IApAQCAtMTcyNCw4ICsxNzI0LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRPYmplY3QoUGFp
bnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQogICAgIC8vIElmIHRoZSBjYXJldCdz
IG5vZGUncyByZW5kZXIgb2JqZWN0J3MgY29udGFpbmluZyBibG9jayBpcyB0aGlzIGJsb2NrLCBh
bmQgdGhlIHBhaW50IGFjdGlvbiBpcyBQYWludFBoYXNlRm9yZWdyb3VuZCwKICAgICAvLyB0aGVu
IHBhaW50IHRoZSBjYXJldC4KICAgICBpZiAoIWlubGluZUZsb3cgJiYgcGFpbnRQaGFzZSA9PSBQ
YWludFBoYXNlRm9yZWdyb3VuZCkgeyAgICAgICAgCi0gICAgICAgIHBhaW50Q2FyZXQocGFpbnRJ
bmZvLCBDdXJzb3JDYXJldCk7Ci0gICAgICAgIHBhaW50Q2FyZXQocGFpbnRJbmZvLCBEcmFnQ2Fy
ZXQpOworICAgICAgICBwYWludENhcmV0KHBhaW50SW5mbywgdHgsIHR5LCBDdXJzb3JDYXJldCk7
CisgICAgICAgIHBhaW50Q2FyZXQocGFpbnRJbmZvLCB0eCwgdHksIERyYWdDYXJldCk7CiAgICAg
fQogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAppbmRleCA1YTIwYzljLi5kODY1MzIwIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmgKQEAgLTE2Nyw3ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBwYWludENoaWxkcmVuKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICB2b2lkIHBh
aW50RWxsaXBzaXNCb3hlcyhQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAgICAgdm9pZCBw
YWludFNlbGVjdGlvbihQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7Ci0gICAgdm9pZCBwYWlu
dENhcmV0KFBhaW50SW5mbyYsIENhcmV0VHlwZSk7CisgICAgdm9pZCBwYWludENhcmV0KFBhaW50
SW5mbyYsIGludCB0eCwgaW50IHR5LCBDYXJldFR5cGUpOwogCiAgICAgdm9pZCBpbnNlcnRGbG9h
dGluZ09iamVjdChSZW5kZXJPYmplY3QqKTsKICAgICB2b2lkIHJlbW92ZUZsb2F0aW5nT2JqZWN0
KFJlbmRlck9iamVjdCopOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggMjM2YTQ4Ny4uMWYy
N2MyNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC0yNjk1LDcgKzI2OTUsNyBAQCB2b2lk
IFJlbmRlckJveDo6Y2FsY0Fic29sdXRlVmVydGljYWxSZXBsYWNlZCgpCiAgICAgbV95ID0gdG9w
VmFsdWUgKyBtX21hcmdpblRvcCArIGNvbnRhaW5lckJsb2NrLT5ib3JkZXJUb3AoKTsKIH0KIAot
SW50UmVjdCBSZW5kZXJCb3g6OmNhcmV0UmVjdChJbmxpbmVCb3gqIGJveCwgaW50IGNhcmV0T2Zm
c2V0LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKK0ludFJlY3QgUmVuZGVyQm94Ojpsb2Nh
bENhcmV0UmVjdChJbmxpbmVCb3gqIGJveCwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lk
dGhUb0VuZE9mTGluZSkKIHsKICAgICAvLyBWaXNpYmxlUG9zaXRpb25zIGF0IG9mZnNldHMgaW5z
aWRlIGNvbnRhaW5lcnMgZWl0aGVyIGEpIHJlZmVyIHRvIHRoZSBwb3NpdGlvbnMgYmVmb3JlL2Fm
dGVyCiAgICAgLy8gdGhvc2UgY29udGFpbmVycyAodGFibGVzIGFuZCBzZWxlY3QgZWxlbWVudHMp
IG9yIGIpIHJlZmVyIHRvIHRoZSBwb3NpdGlvbiBpbnNpZGUgYW4gZW1wdHkgYmxvY2suCkBAIC0y
NzM0LDEyICsyNzM0LDkgQEAgSW50UmVjdCBSZW5kZXJCb3g6OmNhcmV0UmVjdChJbmxpbmVCb3gq
IGJveCwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0UKICAgICAgICAgLy8gTm8g
cG9pbnQgcmV0dXJuaW5nIGEgcmVsYXRpdmUgcG9zaXRpb24uCiAgICAgICAgIHJldHVybiBJbnRS
ZWN0KCk7CiAKLSAgICBGbG9hdFBvaW50IGFic1BvcyA9IGNiLT5sb2NhbFRvQWJzb2x1dGUoKTsK
LQogICAgIGlmIChleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiAgICAgICAgICpleHRyYVdpZHRoVG9F
bmRPZkxpbmUgPSB4UG9zKCkgKyBtX3dpZHRoIC0gcmVjdC5yaWdodCgpOwogCi0gICAgcmVjdC5t
b3ZlKGFic1Bvcy54KCksIGFic1Bvcy55KCkpOwogICAgIHJldHVybiByZWN0OwogfQogCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaCBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5oCmluZGV4IGRlZDljYjUuLmRmZDQ5NmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5o
CkBAIC0xNDEsNyArMTQxLDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgUmVuZGVyTGF5
ZXIqIGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcjsgfQogCi0gICAgdmlydHVhbCBJbnRS
ZWN0IGNhcmV0UmVjdChJbmxpbmVCb3gqLCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0
aFRvRW5kT2ZMaW5lID0gMCk7CisgICAgdmlydHVhbCBJbnRSZWN0IGxvY2FsQ2FyZXRSZWN0KElu
bGluZUJveCosIGludCBjYXJldE9mZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAw
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludEZpbGxMYXllckV4dGVuZGVkKGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IENvbG9yJiwgY29uc3QgRmlsbExheWVyKiwgaW50IGNsaXBZLCBpbnQgY2xp
cEhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHgs
IGludCB0eSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBJbmxpbmVGbG93Qm94KiA9IDAsIENvbXBv
c2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlcik7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGbG93LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3cu
Y3BwCmluZGV4IGVlNjA0OGMuLjc3OWI0MzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZsb3cuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwCkBA
IC02MjAsMTEgKzYyMCwxMSBAQCBpbnQgUmVuZGVyRmxvdzo6bGVmdG1vc3RQb3NpdGlvbihib29s
IGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yLCBib29sIGluY2x1ZGVTZWxmKQogICAgIHJldHVybiBs
ZWZ0OwogfQogCi1JbnRSZWN0IFJlbmRlckZsb3c6OmNhcmV0UmVjdChJbmxpbmVCb3gqIGlubGlu
ZUJveCwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKK0ludFJl
Y3QgUmVuZGVyRmxvdzo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIGludCBj
YXJldE9mZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiB7CiAgICAgLy8gRG8gdGhl
IG5vcm1hbCBjYWxjdWxhdGlvbiBpbiBtb3N0IGNhc2VzLgogICAgIGlmIChmaXJzdENoaWxkKCkg
fHwgc3R5bGUoKS0+ZGlzcGxheSgpID09IElOTElORSkKLSAgICAgICAgcmV0dXJuIFJlbmRlckNv
bnRhaW5lcjo6Y2FyZXRSZWN0KGlubGluZUJveCwgY2FyZXRPZmZzZXQsIGV4dHJhV2lkdGhUb0Vu
ZE9mTGluZSk7CisgICAgICAgIHJldHVybiBSZW5kZXJDb250YWluZXI6OmxvY2FsQ2FyZXRSZWN0
KGlubGluZUJveCwgY2FyZXRPZmZzZXQsIGV4dHJhV2lkdGhUb0VuZE9mTGluZSk7CiAKICAgICAv
LyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlOgogICAgIC8vIFRoZSBlbGVtZW50IGlzIG5vdCBhbiBp
bmxpbmUgZWxlbWVudCwgYW5kIGl0J3MgZW1wdHkuIFNvIHdlIGhhdmUgdG8KQEAgLTY5NCw5ICs2
OTQsNyBAQCBJbnRSZWN0IFJlbmRlckZsb3c6OmNhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJv
eCwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhVwogICAgICAgICB9CiAgICAgfQogCi0gICAg
RmxvYXRQb2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQo
KSk7Ci0gICAgeCArPSBhYnNQb3MueCgpOwotICAgIGludCB5ID0gYWJzUG9zLnkoKSArIHBhZGRp
bmdUb3AoKSArIGJvcmRlclRvcCgpOworICAgIGludCB5ID0gcGFkZGluZ1RvcCgpICsgYm9yZGVy
VG9wKCk7CiAKICAgICByZXR1cm4gSW50UmVjdCh4LCB5LCBjYXJldFdpZHRoLCBoZWlnaHQpOwog
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvdy5oIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxvdy5oCmluZGV4IGMyODRlZDguLjdlM2EzNDUgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3cuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGbG93LmgKQEAgLTkzLDcgKzkzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50IHJp
Z2h0bW9zdFBvc2l0aW9uKGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IgPSB0cnVlLCBib29s
IGluY2x1ZGVTZWxmID0gdHJ1ZSkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgbGVmdG1vc3RQb3Np
dGlvbihib29sIGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yID0gdHJ1ZSwgYm9vbCBpbmNsdWRlU2Vs
ZiA9IHRydWUpIGNvbnN0OwogCi0gICAgdmlydHVhbCBJbnRSZWN0IGNhcmV0UmVjdChJbmxpbmVC
b3gqLCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCk7Cisg
ICAgdmlydHVhbCBJbnRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGludCBjYXJldE9m
ZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBhZGRGb2N1c1JpbmdSZWN0cyhHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSk7CiAg
ICAgdm9pZCBwYWludE91dGxpbmVGb3JMaW5lKEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50
IHR5LCBjb25zdCBJbnRSZWN0JiBwcmV2TGluZSwgY29uc3QgSW50UmVjdCYgdGhpc0xpbmUsIGNv
bnN0IEludFJlY3QmIG5leHRMaW5lKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4
IDUxZTViMDIuLjRkOTkxM2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMjQ0
Myw3ICsyNDQzLDcgQEAgRmxvYXRRdWFkIFJlbmRlck9iamVjdDo6bG9jYWxUb0Fic29sdXRlUXVh
ZChjb25zdCBGbG9hdFF1YWQmIGxvY2FsUXVhZCwgYm9vbCBmaXgKICAgICByZXR1cm4gRmxvYXRR
dWFkKCk7CiB9CiAKLUludFJlY3QgUmVuZGVyT2JqZWN0OjpjYXJldFJlY3QoSW5saW5lQm94KiBp
bmxpbmVCb3gsIGludCBjYXJldE9mZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCitJ
bnRSZWN0IFJlbmRlck9iamVjdDo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxpbmVCb3gs
IGludCBjYXJldE9mZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiB7CiAgICBpZiAo
ZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQogICAgICAgICpleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAw
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCA5OWIyMzA5Li45OTRkOGE1IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaApAQCAtNDY5LDcgKzQ2OSw3IEBAIHB1YmxpYzoKICAgICAgICAg
fQogCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dDsKLSAgICAgICAgSW50UmVjdCBy
ZWN0OworICAgICAgICBJbnRSZWN0IHJlY3Q7ICAgLy8gcmVjdCBiZWluZyBkcmF3bgogICAgICAg
ICBQYWludFBoYXNlIHBoYXNlOwogICAgICAgICBib29sIGZvcmNlQmxhY2tUZXh0OwogICAgICAg
ICBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdDsgLy8gdXNlZCB0byBkcmF3IGp1c3Qgb25lIGVs
ZW1lbnQgYW5kIGl0cyB2aXN1YWwga2lkcwpAQCAtODQ1LDE0ICs4NDUsMTQgQEAgcHVibGljOgog
ICAgIE5vZGUqIGRyYWdnYWJsZU5vZGUoYm9vbCBkaHRtbE9LLCBib29sIHVhT0ssIGludCB4LCBp
bnQgeSwgYm9vbCYgZGh0bWxXaWxsRHJhZykgY29uc3Q7CiAKICAgICAvKioKLSAgICAgKiBSZXR1
cm5zIHRoZSBjb250ZW50IGNvb3JkaW5hdGVzIG9mIHRoZSBjYXJldCB3aXRoaW4gdGhpcyByZW5k
ZXIgb2JqZWN0LgorICAgICAqIFJldHVybnMgdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBj
YXJldCB3aXRoaW4gdGhpcyByZW5kZXIgb2JqZWN0LgogICAgICAqIEBwYXJhbSBvZmZzZXQgemVy
by1iYXNlZCBvZmZzZXQgZGV0ZXJtaW5pbmcgcG9zaXRpb24gd2l0aGluIHRoZSByZW5kZXIgb2Jq
ZWN0LgogICAgICAqIEBwYXJhbSBvdmVycmlkZSBAcCB0cnVlIGlmIGlucHV0IG92ZXJyaWRlcyBl
eGlzdGluZyBjaGFyYWN0ZXJzLAogICAgICAqIEBwIGZhbHNlIGlmIGl0IGluc2VydHMgdGhlbS4g
VGhlIHdpZHRoIG9mIHRoZSBjYXJldCBkZXBlbmRzIG9uIHRoaXMgb25lLgogICAgICAqIEBwYXJh
bSBleHRyYVdpZHRoVG9FbmRPZkxpbmUgb3B0aW9uYWwgb3V0IGFyZyB0byBnaXZlIGV4dHJhIHdp
ZHRoIHRvIGVuZCBvZiBsaW5lIC0KICAgICAgKiB1c2VmdWwgZm9yIGNoYXJhY3RlciByYW5nZSBy
ZWN0IGNvbXB1dGF0aW9ucwogICAgICAqLwotICAgIHZpcnR1YWwgSW50UmVjdCBjYXJldFJlY3Qo
SW5saW5lQm94KiwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9
IDApOworICAgIHZpcnR1YWwgSW50UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCBpbnQg
Y2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCk7CiAKICAgICB2aXJ0
dWFsIGludCBsb3dlc3RQb3NpdGlvbihib29sIC8qaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IqLyA9
IHRydWUsIGJvb2wgLyppbmNsdWRlU2VsZiovID0gdHJ1ZSkgY29uc3QgeyByZXR1cm4gMDsgfQog
ICAgIHZpcnR1YWwgaW50IHJpZ2h0bW9zdFBvc2l0aW9uKGJvb2wgLyppbmNsdWRlT3ZlcmZsb3dJ
bnRlcmlvciovID0gdHJ1ZSwgYm9vbCAvKmluY2x1ZGVTZWxmKi8gPSB0cnVlKSBjb25zdCB7IHJl
dHVybiAwOyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmVU
ZXh0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwCmluZGV4
IDg3YTg5YjQuLjM4NWQxOWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R0lubGluZVRleHQuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRl
eHQuY3BwCkBAIC0xMjksNyArMTI5LDcgQEAgSW5saW5lVGV4dEJveCogUmVuZGVyU1ZHSW5saW5l
VGV4dDo6Y3JlYXRlSW5saW5lVGV4dEJveCgpCiAgICAgcmV0dXJuIG5ldyAocmVuZGVyQXJlbmEo
KSkgU1ZHSW5saW5lVGV4dEJveCh0aGlzKTsKIH0KIAotSW50UmVjdCBSZW5kZXJTVkdJbmxpbmVU
ZXh0OjpjYXJldFJlY3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIGludCBjYXJldE9mZnNldCwgaW50
KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCitJbnRSZWN0IFJlbmRlclNWR0lubGluZVRleHQ6Omxv
Y2FsQ2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCBpbnQgY2FyZXRPZmZzZXQsIGludCog
ZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQogewogICAgIC8vIFNWRyBkb2Vzbid0IGhhdmUgYW55IGVk
aXRhYmxlIGNvbnRlbnQgd2hlcmUgYSBjYXJldCByZWN0IHdvdWxkIGJlIG5lZWRlZAogICAgIHJl
dHVybiBJbnRSZWN0KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJ
bmxpbmVUZXh0LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgKaW5k
ZXggZGM3ZTg1MS4uY2MzNzE2NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHSW5saW5lVGV4dC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRl
eHQuaApAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzU1ZHVGV4
dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIElubGluZVRleHRCb3gqIGNy
ZWF0ZUlubGluZVRleHRCb3goKTsKIAotICAgIHZpcnR1YWwgSW50UmVjdCBjYXJldFJlY3QoSW5s
aW5lQm94KiwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IDAp
OworICAgIHZpcnR1YWwgSW50UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCBpbnQgY2Fy
ZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCk7CiAgICAgdmlydHVhbCBW
aXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JDb29yZGluYXRlcyhpbnQgeCwgaW50IHkpOwogCiAg
ICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKaW5kZXgg
OGQ4Nzk0Yi4uOTdjNDA4NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKQEAgLTM2Miw3ICsz
NjIsNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dDo6cG9zaXRpb25Gb3JDb29yZGluYXRl
cyhpbnQgeCwgaW50IHkpCiAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihlbGVtZW50KCksIGxh
c3RCb3hBYm92ZSA/IGxhc3RCb3hBYm92ZS0+bV9zdGFydCArIGxhc3RCb3hBYm92ZS0+bV9sZW4g
OiAwLCBET1dOU1RSRUFNKTsKIH0KIAotSW50UmVjdCBSZW5kZXJUZXh0OjpjYXJldFJlY3QoSW5s
aW5lQm94KiBpbmxpbmVCb3gsIGludCBjYXJldE9mZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRP
ZkxpbmUpCitJbnRSZWN0IFJlbmRlclRleHQ6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogaW5s
aW5lQm94LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQogewog
ICAgIGlmICghaW5saW5lQm94KQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwpAQCAtMzg0LDIx
ICszODQsMTcgQEAgSW50UmVjdCBSZW5kZXJUZXh0OjpjYXJldFJlY3QoSW5saW5lQm94KiBpbmxp
bmVCb3gsIGludCBjYXJldE9mZnNldCwgaW50KiBleHRyYVcKICAgICBpZiAoZXh0cmFXaWR0aFRv
RW5kT2ZMaW5lKQogICAgICAgICAqZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gKGJveC0+cm9vdCgp
LT53aWR0aCgpICsgcm9vdExlZnQpIC0gKGxlZnQgKyAxKTsKIAotICAgIC8vIEZJWE1FOiBicm9r
ZW4gd2l0aCB0cmFuc2Zvcm1zCi0gICAgRmxvYXRQb2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1
dGVGb3JDb250ZW50KEZsb2F0UG9pbnQoKSk7Ci0gICAgbGVmdCArPSBhYnNQb3MueCgpOwotICAg
IHRvcCArPSBhYnNQb3MueSgpOwotCiAgICAgUmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmluZ0Js
b2NrKCk7CiAgICAgaWYgKHN0eWxlKCktPmF1dG9XcmFwKCkpIHsKICAgICAgICAgaW50IGF2YWls
YWJsZVdpZHRoID0gY2ItPmxpbmVXaWR0aCh0b3ApOwogICAgICAgICBpZiAoYm94LT5kaXJlY3Rp
b24oKSA9PSBMVFIpCi0gICAgICAgICAgICBsZWZ0ID0gbWluKGxlZnQsIHN0YXRpY19jYXN0PGlu
dD4oYWJzUG9zLngoKSkgKyByb290TGVmdCArIGF2YWlsYWJsZVdpZHRoIC0gMSk7CisgICAgICAg
ICAgICBsZWZ0ID0gbWluKGxlZnQsIHJvb3RMZWZ0ICsgYXZhaWxhYmxlV2lkdGggLSAxKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbGVmdCA9IG1heChsZWZ0LCBzdGF0aWNfY2FzdDxpbnQ+
KGFic1Bvcy54KCkpICsgcm9vdExlZnQpOworICAgICAgICAgICAgbGVmdCA9IG1heChsZWZ0LCBy
b290TGVmdCk7CiAgICAgfQogCi0gICAgcmV0dXJuIEludFJlY3QobGVmdCwgdG9wLCAxLCBoZWln
aHQpOworICAgIGNvbnN0IGludCBjYXJldFdpZHRoID0gMTsKKyAgICByZXR1cm4gSW50UmVjdChs
ZWZ0LCB0b3AsIGNhcmV0V2lkdGgsIGhlaWdodCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgaW50IFJl
bmRlclRleHQ6OndpZHRoRnJvbUNhY2hlKGNvbnN0IEZvbnQmIGYsIGludCBzdGFydCwgaW50IGxl
biwgaW50IHhQb3MpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKaW5kZXggMDhlMTAzNS4uYWM1
MTAyZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCisrKyBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaApAQCAtMTA2LDcgKzEwNiw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIFNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0YXRlKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8U2VsZWN0aW9uU3RhdGU+KG1fc2VsZWN0aW9uU3RhdGUpOyB9CiAgICAg
dmlydHVhbCB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlIHMpOwogICAgIHZp
cnR1YWwgSW50UmVjdCBzZWxlY3Rpb25SZWN0KGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0
cnVlKTsKLSAgICB2aXJ0dWFsIEludFJlY3QgY2FyZXRSZWN0KElubGluZUJveCosIGludCBjYXJl
dE9mZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKTsKKyAgICB2aXJ0dWFsIElu
dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4
dHJhV2lkdGhUb0VuZE9mTGluZSA9IDApOwogCiAgICAgdmlydHVhbCBpbnQgbWFyZ2luTGVmdCgp
IGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPm1hcmdpbkxlZnQoKS5jYWxjTWluVmFsdWUoMCk7IH0K
ICAgICB2aXJ0dWFsIGludCBtYXJnaW5SaWdodCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPm1h
cmdpblJpZ2h0KCkuY2FsY01pblZhbHVlKDApOyB9CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0gYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXgg
ODdiM2RjNC4uMWZhOTg1YyAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1l
Lm1tCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtNjU3LDcgKzY1Nyw3
IEBAIHN0YXRpYyBpbmxpbmUgV2ViRGF0YVNvdXJjZSAqZGF0YVNvdXJjZShEb2N1bWVudExvYWRl
ciogbG9hZGVyKQogLSAoTlNSZWN0KV9jYXJldFJlY3RBdE5vZGU6KERPTU5vZGUgKilub2RlIG9m
ZnNldDooaW50KW9mZnNldCBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlhZmZpbml0eQog
ewogICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb24oW25vZGUgX25vZGVdLCBvZmZz
ZXQsIHN0YXRpY19jYXN0PEVBZmZpbml0eT4oYWZmaW5pdHkpKTsKLSAgICByZXR1cm4gdmlzaWJs
ZVBvc2l0aW9uLmNhcmV0UmVjdCgpOworICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb24uYWJzb2x1
dGVDYXJldEJvdW5kcygpOwogfQogCiAtIChOU1JlY3QpX2ZpcnN0UmVjdEZvckRPTVJhbmdlOihE
T01SYW5nZSAqKXJhbmdlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25182</attachid>
            <date>2008-11-14 23:33:56 -0800</date>
            <delta_ts>2008-11-16 22:52:59 -0800</delta_ts>
            <desc>Final patch, changlog.</desc>
            <filename>15671_patch.txt</filename>
            <type>text/plain</type>
            <size>49860</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0ZjY5MDJiLi40YWNlYzMzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDgtMTEt
MTQgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1NjcxCisKKyAgICAgICAgTmV3IGV4cGVjdGVkcyBhZnRlciBm
aXhpbmcgY2FyZXQgZHJhd2luZyBpbiB0cmFuc2Zvcm1lZCBlbGVtZW50cworICAgICAgICAKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC90cmFuc2Zvcm1zL3RyYW5zZm9ybWVkLWZvY3VzZWQt
dGV4dC1pbnB1dC1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFz
dC90cmFuc2Zvcm1zL3RyYW5zZm9ybWVkLWZvY3VzZWQtdGV4dC1pbnB1dC1leHBlY3RlZC5wbmc6
CisKIDIwMDgtMTEtMTQgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEp1c3RpbiBHYXJjaWEuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvZmFzdC90cmFuc2Zvcm1zL3RyYW5zZm9ybWVkLWZvY3VzZWQtdGV4dC1pbnB1dC1l
eHBlY3RlZC5jaGVja3N1bSBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L3RyYW5zZm9y
bXMvdHJhbnNmb3JtZWQtZm9jdXNlZC10ZXh0LWlucHV0LWV4cGVjdGVkLmNoZWNrc3VtCmluZGV4
IDg0YjcwYTQuLjQ4ZWVhMzcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9m
YXN0L3RyYW5zZm9ybXMvdHJhbnNmb3JtZWQtZm9jdXNlZC10ZXh0LWlucHV0LWV4cGVjdGVkLmNo
ZWNrc3VtCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L3RyYW5zZm9ybXMvdHJh
bnNmb3JtZWQtZm9jdXNlZC10ZXh0LWlucHV0LWV4cGVjdGVkLmNoZWNrc3VtCkBAIC0xICsxIEBA
Ci1mYTZkZTJiNmI3MWIxN2UxZjZmNTA4YmMyNThlYTE2NQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKKzdlYjNkYTM0MDNiYjZmYjBiYjI3ZDFlYjFiZjNiZGE3ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvdHJh
bnNmb3Jtcy90cmFuc2Zvcm1lZC1mb2N1c2VkLXRleHQtaW5wdXQtZXhwZWN0ZWQucG5nIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvdHJhbnNmb3Jtcy90cmFuc2Zvcm1lZC1mb2N1c2Vk
LXRleHQtaW5wdXQtZXhwZWN0ZWQucG5nCmluZGV4IDkxZWE0ZTQuLmVhMTZkZjkgMTAwNjQ0CkJp
bmFyeSBmaWxlcyBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L3RyYW5zZm9ybXMvdHJh
bnNmb3JtZWQtZm9jdXNlZC10ZXh0LWlucHV0LWV4cGVjdGVkLnBuZyBhbmQgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvZmFzdC90cmFuc2Zvcm1zL3RyYW5zZm9ybWVkLWZvY3VzZWQtdGV4dC1p
bnB1dC1leHBlY3RlZC5wbmcgZGlmZmVyCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGMxNjU1Y2EuLjQ0YmMzOWIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTYgQEAK
KzIwMDgtMTEtMTQgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjcxCisKKyAgICAgICAgRml4IGNhcmV0IHJl
bmRlcmluZyB0byBiZWhhdmUgY29ycmVjdGx5IHdpdGggdHJhbnNmb3JtczoKKyAgICAgICAgKiBS
ZW5hbWUgY2FyZXRSZWN0KCkgbWV0aG9kcyB0byBsb2NhbENhcmV0UmVjdCgpIGFuZAorICAgICAg
ICAgIGFic29sdXRlQ2FyZXRCb3VuZHMoKSBhcyBhcHByb3ByaWF0ZQorICAgICAgICAqIEZpeCBs
b2NhbENhcmV0UmVjdCgpIG1ldGhvZHMgdG8gcmV0dXJuIGEgcmVjdCBpbiB0aGUKKyAgICAgICAg
ICBhcHByb3ByaWF0ZSBjb29yZGluYXRlcy4KKyAgICAgICAgKiBQYXNzIHR4LCB0eSBkb3duIHRo
cm91Z2ggdGhlIHBhaW50Q2FyZXQoKSBtZXRob2RzLCBhZnRlciBmaXhpbmcgdGhlbQorICAgICAg
ICAgIHVwIHRvIGFjY291bnQgZm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gY29udGVudHMgY29vcmRz
LCBhbmQgcmVuZGVyZXItbG9jYWwKKyAgICAgICAgICBjb29yZHMgKHZpYSBSZW5kZXJCbG9jazo6
b2Zmc2V0Rm9yQ29udGVudHMoKSkuCisgICAgICAgICogUmVtb3ZlIG1fY2FyZXRQb3NpdGlvbk9u
TGF5b3V0IGZyb20gU2VsZWN0aW9uQ29udHJvbGxlciwgYW5kIGluc3RlYWQKKyAgICAgICAgICBj
YWxsIGludmFsaWRhdGVTZWxlY3Rpb24oKSBmcm9tIFJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNl
dCgpLCBiZWNhdXNlCisgICAgICAgICAgd2UgY2FuIG5vIGxvbmdlciBhc3N1bWUgc2ltcGxlIHgv
eSBvZmZzZXRzIGZyb20gc2Nyb2xsaW5nIHdpdGggdHJhbnNmb3Jtcy4KKyAgICAgICAgKiBNb3Zl
IHRoZSBsb2dpYyB0byBjb21wdXRlIHdoaWNoIFJlbmRlck9iamVjdCBhY3R1YWxseSBwYWludHMg
dGhlIGNhcmV0IGludG8KKyAgICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyOjpjYXJldFJlbmRl
cmVyKCksIHJhdGhlciB0aGFuIGhhdmluZyBpdCBpbiBSZW5kZXJCbG9jay4KKyAgICAgICAgKiBT
ZWxlY3Rpb25Db250cm9sbGVyIG5vdyBjb21wdXRlcyBhbmQgY2FjaGVzIGEgbG9jYWwgY2FyZXQg
cmVjdC4gRm9yIGludmFsaWRhdGlvbiwKKyAgICAgICAgICBpdCBjb21wdXRlcyB0aGUgYWJzb2x1
dGUgYm91bmRzIG9mIHRoYXQgKHBvc3NpYmx5IHRyYW5zZm9ybWVkKSBsb2NhbCByZWN0LgorICAg
ICAgICAgIFRoZSBsb2NhbCByZWN0IGlzIGNvbXB1dGVkIGluIHRoZSBjb29yZGluYXRlIHN5c3Rl
bSBvZiB0aGUgUmVuZGVyT2JqZWN0IHRoYXQKKyAgICAgICAgICB3aWxsIHBhaW50IHRoZSBjYXJl
dCAodGhpcyBtYXkgcmVxdWlyZSBvZmZzZXR0aW5nIGZyb20gdGhlIGFjdHVhbCByZW5kZXJlcgor
ICAgICAgICAgIGF0IHRoZSBzdGFydCBvZiB0aGUgc2VsZWN0aW9uKS4KKyAgICAgICAgKiBGaXgg
TGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KiByb290KSB0byB0YWtlIHRyYW5zZm9ybXMgaW50byBh
Y2NvdW50CisgICAgICAgICogTWFrZSBvZmZzZXRGcm9tQ29udGFpbmVyKCkgYSB2aXJ0dWFsIG1l
dGhvZCBvbiBSZW5kZXJPYmplY3QsIGFuZCBpbXBsZW1lbnQKKyAgICAgICAgICB0aGUgUmVuZGVy
T2JqZWN0IHZlcnNpb24uIEl0J3MgdXNlZCB0byBtYXAgZnJvbSBzZWxlY3Rpb24gc3RhcnQgcmVu
ZGVyZXIKKyAgICAgICAgICB0byBjYXJldCByZW5kZXJlci4KKyAgICAgICAgICAKKyAgICAgICAg
KiBXZWJDb3JlLmJhc2UuZXhwOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptZXJn
ZVBhcmFncmFwaHMpOgorICAgICAgICAqIGVkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjpTZWxlY3Rpb25Db250cm9s
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmFic29sdXRlQ2FyZXRZKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3Rpb25Db250cm9sbGVyOjp4UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OmNhcmV0UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bG9jYWxDYXJldFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjpjYXJldFJlcGFpbnRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnJlY29tcHV0ZUNhcmV0UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjppbnZhbGlkYXRlQ2FyZXRSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnBhaW50Q2FyZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6Y2FyZXRSZW5kZXJzSW5zaWRlTm9k
ZSk6CisgICAgICAgICogZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmg6CisgICAgICAgICog
ZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVBv
c2l0aW9uOjpsb2NhbENhcmV0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlUG9zaXRp
b246OmFic29sdXRlQ2FyZXRCb3VuZHMpOgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVBvc2l0
aW9uLmg6CisgICAgICAgICogZWRpdGluZy9tYWMvU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbToK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFjY2Vzc2liaWxp
dHlGb3JTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6OmlzQ29udGVudEVkaXRhYmxlKToKKyAgICAg
ICAgKiBwYWdlL0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Ym91bmRzRm9yVmlzaWJsZVBvc2l0aW9uUmFu
Z2UpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6
OmZpcnN0UmVjdEZvclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZWxlY3Rpb25M
YXlvdXRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpwYWludENhcmV0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lOjpwYWludERyYWdDYXJldCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZTo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpyZXZl
YWxDYXJldCk6CisgICAgICAgICogcGFnZS9GcmFtZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9M
YXlvdXRTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRTdGF0ZTo6TGF5b3V0U3Rh
dGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6cGFpbnRDYXJldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6cGFpbnRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBvc2l0
aW9uRm9yQ29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om9mZnNl
dEZvckNvbnRlbnRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6bG9jYWxDYXJldFJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJGbG93Ojpsb2NhbENhcmV0UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3cu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6b2Zmc2V0RnJv
bUNvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmxvY2FsQ2FyZXRS
ZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHSW5saW5lVGV4dDo6bG9jYWxDYXJldFJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJTVkdJbmxpbmVUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6UmVuZGVyVGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUZXh0Ojpsb2NhbENhcmV0UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRleHQuaDoKKwogMjAwOC0xMS0xNCAgR3JlZyBCb2xzaW5nYSAgPGJvbHNpbmdhQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvV2ViQ29yZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAppbmRleCBh
ODhhNmRmLi44MWUyODBjIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKKysr
IGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCkBAIC03NjcsNyArNzY3LDggQEAgX19aTks3V2Vi
Q29yZTE1UmVzb3VyY2VSZXF1ZXN0MTJuc1VSTFJlcXVlc3RFdgogX19aTks3V2ViQ29yZTE1Vmlz
aWJsZVBvc2l0aW9uMTRjaGFyYWN0ZXJBZnRlckV2CiBfX1pOSzdXZWJDb3JlMTVWaXNpYmxlUG9z
aXRpb240bmV4dEViCiBfX1pOSzdXZWJDb3JlMTVWaXNpYmxlUG9zaXRpb244cHJldmlvdXNFYgot
X19aTks3V2ViQ29yZTE1VmlzaWJsZVBvc2l0aW9uOWNhcmV0UmVjdEV2CitfX1pOSzdXZWJDb3Jl
MTVWaXNpYmxlUG9zaXRpb24xNGxvY2FsQ2FyZXRSZWN0RVJQTlNfMTJSZW5kZXJPYmplY3RFCitf
X1pOSzdXZWJDb3JlMTVWaXNpYmxlUG9zaXRpb24xOWFic29sdXRlQ2FyZXRCb3VuZHNFdgogX19a
Tks3V2ViQ29yZTE2SFRNTElucHV0RWxlbWVudDEyYXV0b0NvbXBsZXRlRXYKIF9fWk5LN1dlYkNv
cmUxNlJlc291cmNlUmVzcG9uc2UxM25zVVJMUmVzcG9uc2VFdgogX19aTks3V2ViQ29yZTE3UmVz
b3VyY2VFcnJvckJhc2U4bGF6eUluaXRFdgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0Rl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQuY3BwCmluZGV4IDUxYzlkNWEuLjJjMjljNGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
ZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcv
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTU3OCw3ICs1NzgsNyBAQCB2b2lkIERlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlUGFyYWdyYXBocygpCiAgICAgLy8gVGhlIHJ1bGUgZm9y
IG1lcmdpbmcgaW50byBhbiBlbXB0eSBibG9jayBpczogb25seSBkbyBzbyBpZiBpdHMgZmFydGhl
ciB0byB0aGUgcmlnaHQuCiAgICAgLy8gRklYTUU6IENvbnNpZGVyIFJUTC4KICAgICAvLyBGSVhN
RTogaGFuZGxlU3BlY2lhbENhc2VCUkRlbGV0ZSBwcmV2ZW50cyB1cyBmcm9tIGdldHRpbmcgaGVy
ZSBpbiBhIGNhc2UgbGlrZSA8dWw+PGxpPmZvbzxicj48YnI+PC9saT48L3VsPl5mb28KLSAgICBp
ZiAoaXNTdGFydE9mUGFyYWdyYXBoKG1lcmdlRGVzdGluYXRpb24pICYmIHN0YXJ0T2ZQYXJhZ3Jh
cGhUb01vdmUuY2FyZXRSZWN0KCkueCgpID4gbWVyZ2VEZXN0aW5hdGlvbi5jYXJldFJlY3QoKS54
KCkpIHsKKyAgICBpZiAoaXNTdGFydE9mUGFyYWdyYXBoKG1lcmdlRGVzdGluYXRpb24pICYmIHN0
YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuYWJzb2x1dGVDYXJldEJvdW5kcygpLngoKSA+IG1lcmdlRGVz
dGluYXRpb24uYWJzb2x1dGVDYXJldEJvdW5kcygpLngoKSkgewogICAgICAgICBBU1NFUlQobWVy
Z2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKS5ub2RlKCktPmhhc1Rh
Z05hbWUoYnJUYWcpKTsKICAgICAgICAgcmVtb3ZlTm9kZUFuZFBydW5lQW5jZXN0b3JzKG1lcmdl
RGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCkubm9kZSgpKTsKICAgICAg
ICAgbV9lbmRpbmdQb3NpdGlvbiA9IHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxl
bnQoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNw
cCBiL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAppbmRleCA4OWRhZjMz
Li42YWUyYjc2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxl
ci5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC02
MiwxMiArNjIsMTMgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIGNvbnN0IGludCBOb1hQ
b3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbiA9IElOVF9NSU47CiAKIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OlNlbGVjdGlvbkNvbnRyb2xsZXIoRnJhbWUqIGZyYW1lLCBib29sIGlzRHJhZ0NhcmV0
Q29udHJvbGxlcikKLSAgICA6IG1fbmVlZHNMYXlvdXQodHJ1ZSkKKyAgICA6IG1fZnJhbWUoZnJh
bWUpCisgICAgLCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihOb1hQb3NGb3JWZXJ0
aWNhbEFycm93TmF2aWdhdGlvbikKKyAgICAsIG1fbmVlZHNMYXlvdXQodHJ1ZSkKKyAgICAsIG1f
YWJzQ2FyZXRCb3VuZHNEaXJ0eSh0cnVlKQogICAgICwgbV9sYXN0Q2hhbmdlV2FzSG9yaXpvbnRh
bEV4dGVuc2lvbihmYWxzZSkKLSAgICAsIG1fZnJhbWUoZnJhbWUpCiAgICAgLCBtX2lzRHJhZ0Nh
cmV0Q29udHJvbGxlcihpc0RyYWdDYXJldENvbnRyb2xsZXIpCiAgICAgLCBtX2lzQ2FyZXRCbGlu
a2luZ1N1c3BlbmRlZChmYWxzZSkKLSAgICAsIG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0
aW9uKE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKQogICAgICwgbV9mb2N1c2VkKGZh
bHNlKQogewogfQpAQCAtNTUyLDkgKzU1Myw5IEBAIGJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6
bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBFRGlyZWN0aW9uIGRpciwgVGV4dEdyYW51bGFyCiB9
CiAKIC8vIEZJWE1FOiBNYXliZSBiYXNlbGluZSB3b3VsZCBiZSBiZXR0ZXI/Ci1zdGF0aWMgYm9v
bCBjYXJldFkoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjLCBpbnQgJnkpCitzdGF0aWMgYm9vbCBh
YnNvbHV0ZUNhcmV0WShjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMsIGludCAmeSkKIHsKLSAgICBJ
bnRSZWN0IHJlY3QgPSBjLmNhcmV0UmVjdCgpOworICAgIEludFJlY3QgcmVjdCA9IGMuYWJzb2x1
dGVDYXJldEJvdW5kcygpOwogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIHkgPSByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkgLyAyOwpAQCAtNTk4LDcg
KzU5OSw3IEBAIGJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5KEVBbHRlcmF0aW9uIGFs
dGVyLCBpbnQgdmVydGljYWxEaXN0YW5jZSwgYm9vbCB1CiAgICAgfQogCiAgICAgaW50IHN0YXJ0
WTsKLSAgICBpZiAoIWNhcmV0WShwb3MsIHN0YXJ0WSkpCisgICAgaWYgKCFhYnNvbHV0ZUNhcmV0
WShwb3MsIHN0YXJ0WSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAodXApCiAgICAg
ICAgIHN0YXJ0WSA9IC1zdGFydFk7CkBAIC02MTEsNyArNjEyLDcgQEAgYm9vbCBTZWxlY3Rpb25D
b250cm9sbGVyOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIGludCB2ZXJ0aWNhbERpc3RhbmNl
LCBib29sIHUKICAgICAgICAgaWYgKG5leHQuaXNOdWxsKCkgfHwgbmV4dCA9PSBwKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGludCBuZXh0WTsKLSAgICAgICAgaWYgKCFjYXJldFkobmV4
dCwgbmV4dFkpKQorICAgICAgICBpZiAoIWFic29sdXRlQ2FyZXRZKG5leHQsIG5leHRZKSkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBpZiAodXApCiAgICAgICAgICAgICBuZXh0WSA9IC1u
ZXh0WTsKQEAgLTY4Miw3ICs2ODMsNyBAQCBpbnQgU2VsZWN0aW9uQ29udHJvbGxlcjo6eFBvc0Zv
clZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKEVQb3NpdGlvblR5cGUgdHlwZSkKICAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbihwb3MsIG1fc2VsLmFmZmluaXR5KCkpOwogICAg
ICAgICAvLyBWaXNpYmxlUG9zaXRpb24gY3JlYXRpb24gY2FuIGZhaWwgaGVyZSBpZiBhIG5vZGUg
Y29udGFpbmluZyB0aGUgc2VsZWN0aW9uIGJlY29tZXMgdmlzaWJpbGl0eTpoaWRkZW4KICAgICAg
ICAgLy8gYWZ0ZXIgdGhlIHNlbGVjdGlvbiBpcyBjcmVhdGVkIGFuZCBiZWZvcmUgdGhpcyBmdW5j
dGlvbiBpcyBjYWxsZWQuCi0gICAgICAgIHggPSB2aXNpYmxlUG9zaXRpb24uaXNOb3ROdWxsKCkg
PyB2aXNpYmxlUG9zaXRpb24uY2FyZXRSZWN0KCkueCgpIDogMDsKKyAgICAgICAgeCA9IHZpc2li
bGVQb3NpdGlvbi5pc05vdE51bGwoKSA/IHZpc2libGVQb3NpdGlvbi5hYnNvbHV0ZUNhcmV0Qm91
bmRzKCkueCgpIDogMDsKICAgICAgICAgbV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24g
PSB4OwogICAgIH0KICAgICBlbHNlCkBAIC03MjUsNDMgKzcyNiw3OSBAQCB2b2lkIFNlbGVjdGlv
bkNvbnRyb2xsZXI6OmxheW91dCgpCiB7CiAgICAgaWYgKGlzTm9uZSgpIHx8ICFtX3NlbC5zdGFy
dCgpLm5vZGUoKS0+aW5Eb2N1bWVudCgpIHx8ICFtX3NlbC5lbmQoKS5ub2RlKCktPmluRG9jdW1l
bnQoKSkgewogICAgICAgICBtX2NhcmV0UmVjdCA9IEludFJlY3QoKTsKLSAgICAgICAgbV9jYXJl
dFBvc2l0aW9uT25MYXlvdXQgPSBJbnRQb2ludCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgbV9zZWwuc3RhcnQoKS5ub2RlKCktPmRvY3VtZW50KCktPnVwZGF0ZVJlbmRlcmluZygp
OwogICAgIAogICAgIG1fY2FyZXRSZWN0ID0gSW50UmVjdCgpOwotICAgIG1fY2FyZXRQb3NpdGlv
bk9uTGF5b3V0ID0gSW50UG9pbnQoKTsKICAgICAgICAgCiAgICAgaWYgKGlzQ2FyZXQoKSkgewog
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9zKG1fc2VsLnN0YXJ0KCksIG1fc2VsLmFmZmluaXR5
KCkpOwogICAgICAgICBpZiAocG9zLmlzTm90TnVsbCgpKSB7CiAgICAgICAgICAgICBBU1NFUlQo
cG9zLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5yZW5kZXJlcigpKTsKLSAgICAgICAgICAgIG1f
Y2FyZXRSZWN0ID0gcG9zLmNhcmV0UmVjdCgpOwotCi0gICAgICAgICAgICAvLyBGSVhNRTogYnJv
a2VuIHdpdGggdHJhbnNmb3JtcwotICAgICAgICAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBwb3Mu
ZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPnJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZUZvckNv
bnRlbnQoRmxvYXRQb2ludCgpKTsKLSAgICAgICAgICAgIG1fY2FyZXRQb3NpdGlvbk9uTGF5b3V0
ID0gcm91bmRlZEludFBvaW50KGFic1Bvcyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IEZpcnN0IGNvbXB1dGUgYSByZWN0IGxvY2FsIHRvIHRoZSByZW5kZXJlIGF0IHRoZSBzZWxlY3Rp
b24gc3RhcnQKKyAgICAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXI7CisgICAgICAgICAg
ICBJbnRSZWN0IGxvY2FsUmVjdCA9IHBvcy5sb2NhbENhcmV0UmVjdChyZW5kZXJlcik7CisKKyAg
ICAgICAgICAgIC8vIEdldCB0aGUgcmVuZGVyZXIgdGhhdCB3aWxsIGJlIHJlc3BvbnNpYmxlIGZv
ciBwYWludGluZyB0aGUgY2FyZXQgKHdoaWNoCisgICAgICAgICAgICAvLyBpcyBlaXRoZXIgdGhl
IHJlbmRlcmVyIHdlIGp1c3QgZm91bmQsIG9yIG9uZSBvZiBpdHMgY29udGFpbmVycykKKyAgICAg
ICAgICAgIFJlbmRlck9iamVjdCogY2FyZXRQYWludGVyID0gY2FyZXRSZW5kZXJlcigpOworCisg
ICAgICAgICAgICAvLyBDb21wdXRlIGFuIG9mZnNldCBiZXR3ZWVuIHRoZSByZW5kZXJlciBhbmQg
dGhlIGNhcmV0UGFpbnRlcgorICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tUGFpbnRlcjsK
KyAgICAgICAgICAgIGJvb2wgdW5yb290ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHdoaWxlIChy
ZW5kZXJlciAhPSBjYXJldFBhaW50ZXIpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3Qq
IGNvbnRhaW5lck9iamVjdCA9IHJlbmRlcmVyLT5jb250YWluZXIoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWNvbnRhaW5lck9iamVjdCkgeworICAgICAgICAgICAgICAgICAgICB1bnJvb3RlZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBvZmZzZXRGcm9tUGFpbnRlciArPSByZW5kZXJlci0+b2Zmc2V0RnJvbUNv
bnRhaW5lcihjb250YWluZXJPYmplY3QpOworICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gY29u
dGFpbmVyT2JqZWN0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAoIXVucm9vdGVkKSB7CisgICAgICAgICAgICAgICAgLy8gTW92ZSB0aGUgY2FyZXQgcmVjdCB0
byB0aGUgY29vcmRzIG9mIHRoZSBwYWludGVyCisgICAgICAgICAgICAgICAgbG9jYWxSZWN0Lm1v
dmUob2Zmc2V0RnJvbVBhaW50ZXIpOworICAgICAgICAgICAgICAgIG1fY2FyZXRSZWN0ID0gbG9j
YWxSZWN0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX2Fic0Nh
cmV0Qm91bmRzRGlydHkgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgbV9uZWVkc0xh
eW91dCA9IGZhbHNlOwogfQogCi1JbnRSZWN0IFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNhcmV0UmVj
dCgpIGNvbnN0CitSZW5kZXJPYmplY3QqIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNhcmV0UmVuZGVy
ZXIoKSBjb25zdAoreworICAgIE5vZGUqIG5vZGUgPSBtX3NlbC5zdGFydCgpLm5vZGUoKTsKKyAg
ICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICAvLyBpZiBjYXJldE5vZGUgaXMgYSBibG9jayBhbmQgY2FyZXQgaXMgaW5z
aWRlIGl0IHRoZW4gY2FyZXQgc2hvdWxkIGJlIHBhaW50ZWQgYnkgdGhhdCBibG9jaworICAgIGJv
b2wgcGFpbnRlZEJ5QmxvY2sgPSByZW5kZXJlci0+aXNCbG9ja0Zsb3coKSAmJiBjYXJldFJlbmRl
cnNJbnNpZGVOb2RlKG5vZGUpOworICAgIHJldHVybiBwYWludGVkQnlCbG9jayA/IHJlbmRlcmVy
IDogcmVuZGVyZXItPmNvbnRhaW5pbmdCbG9jaygpOworfQorCitJbnRSZWN0IFNlbGVjdGlvbkNv
bnRyb2xsZXI6OmxvY2FsQ2FyZXRSZWN0KCkgY29uc3QKIHsKICAgICBpZiAobV9uZWVkc0xheW91
dCkKICAgICAgICAgY29uc3RfY2FzdDxTZWxlY3Rpb25Db250cm9sbGVyICo+KHRoaXMpLT5sYXlv
dXQoKTsKICAgICAKLSAgICBJbnRSZWN0IGNhcmV0ID0gbV9jYXJldFJlY3Q7Ci0KLSAgICBpZiAo
bV9zZWwuc3RhcnQoKS5ub2RlKCkgJiYgbV9zZWwuc3RhcnQoKS5ub2RlKCktPnJlbmRlcmVyKCkp
IHsKLSAgICAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBtX3NlbC5zdGFydCgpLm5vZGUoKS0+cmVu
ZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlRm9yQ29udGVudChGbG9hdFBvaW50KCkpOwotICAgICAg
ICBjYXJldC5tb3ZlKHJvdW5kZWRJbnRQb2ludChhYnNQb3MpIC0gbV9jYXJldFBvc2l0aW9uT25M
YXlvdXQpOwotICAgIH0KKyAgICByZXR1cm4gbV9jYXJldFJlY3Q7Cit9CiAKLSAgICByZXR1cm4g
Y2FyZXQ7CitJbnRSZWN0IFNlbGVjdGlvbkNvbnRyb2xsZXI6OmFic29sdXRlQ2FyZXRCb3VuZHMo
KQoreworICAgIHJlY29tcHV0ZUNhcmV0UmVjdCgpOworICAgIHJldHVybiBtX2Fic0NhcmV0Qm91
bmRzOwogfQogCiBzdGF0aWMgSW50UmVjdCByZXBhaW50UmVjdEZvckNhcmV0KEludFJlY3QgY2Fy
ZXQpCkBAIC03NzYsNyArODEzLDEzIEBAIHN0YXRpYyBJbnRSZWN0IHJlcGFpbnRSZWN0Rm9yQ2Fy
ZXQoSW50UmVjdCBjYXJldCkKIAogSW50UmVjdCBTZWxlY3Rpb25Db250cm9sbGVyOjpjYXJldFJl
cGFpbnRSZWN0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVwYWludFJlY3RGb3JDYXJldChjYXJl
dFJlY3QoKSk7CisgICAgSW50UmVjdCBsb2NhbFJlY3QgPSByZXBhaW50UmVjdEZvckNhcmV0KGxv
Y2FsQ2FyZXRSZWN0KCkpOworICAgIAorICAgIFJlbmRlck9iamVjdCogY2FyZXRQYWludGVyID0g
Y2FyZXRSZW5kZXJlcigpOworICAgIGlmIChjYXJldFBhaW50ZXIpCisgICAgICAgIHJldHVybiBj
YXJldFBhaW50ZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGxvY2FsUmVjdCkpLmVu
Y2xvc2luZ0JvdW5kaW5nQm94KCk7CisKKyAgICByZXR1cm4gSW50UmVjdCgpOwogfQogCiBib29s
IFNlbGVjdGlvbkNvbnRyb2xsZXI6OnJlY29tcHV0ZUNhcmV0UmVjdCgpCkBAIC03OTMsMTQgKzgz
NiwyMiBAQCBib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnJlY29tcHV0ZUNhcmV0UmVjdCgpCiAK
ICAgICBJbnRSZWN0IG9sZFJlY3QgPSBtX2NhcmV0UmVjdDsKICAgICBtX25lZWRzTGF5b3V0ID0g
dHJ1ZTsKLSAgICBJbnRSZWN0IG5ld1JlY3QgPSBjYXJldFJlY3QoKTsKLSAgICBpZiAob2xkUmVj
dCA9PSBuZXdSZWN0KQorICAgIEludFJlY3QgbmV3UmVjdCA9IGxvY2FsQ2FyZXRSZWN0KCk7Cisg
ICAgaWYgKG9sZFJlY3QgPT0gbmV3UmVjdCAmJiAhbV9hYnNDYXJldEJvdW5kc0RpcnR5KQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBJbnRSZWN0IG9sZEFic1JlcGFpbnRSZWN0ID0gbV9h
YnNDYXJldEJvdW5kczsKKyAgICBtX2Fic0NhcmV0Qm91bmRzID0gY2FyZXRSZXBhaW50UmVjdCgp
OworICAgIG1fYWJzQ2FyZXRCb3VuZHNEaXJ0eSA9IGZhbHNlOworICAgIAorICAgIGlmIChvbGRB
YnNSZXBhaW50UmVjdCA9PSBtX2Fic0NhcmV0Qm91bmRzKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCiAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxSZW5kZXJWaWV3
Kj4obV9mcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkpIHsKLSAgICAgICAgdmlldy0+cmVw
YWludFZpZXdSZWN0YW5nbGUocmVwYWludFJlY3RGb3JDYXJldChvbGRSZWN0KSwgZmFsc2UpOwot
ICAgICAgICB2aWV3LT5yZXBhaW50Vmlld1JlY3RhbmdsZShyZXBhaW50UmVjdEZvckNhcmV0KG5l
d1JlY3QpLCBmYWxzZSk7CisgICAgICAgIHZpZXctPnJlcGFpbnRWaWV3UmVjdGFuZ2xlKG9sZEFi
c1JlcGFpbnRSZWN0LCBmYWxzZSk7CisgICAgICAgIHZpZXctPnJlcGFpbnRWaWV3UmVjdGFuZ2xl
KG1fYWJzQ2FyZXRCb3VuZHMsIGZhbHNlKTsKICAgICB9CisKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtODExLDYgKzg2Miw4IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6aW52YWxpZGF0
ZUNhcmV0UmVjdCgpCiAKICAgICBEb2N1bWVudCogZCA9IG1fc2VsLnN0YXJ0KCkubm9kZSgpLT5k
b2N1bWVudCgpOwogCisgICAgLy8gcmVjb21wdXRlQ2FyZXRSZWN0IHdpbGwgYWx3YXlzIHJldHVy
biBmYWxzZSBmb3IgdGhlIGRyYWcgY2FyZXQsCisgICAgLy8gYmVjYXVzZSBpdCdzIG1fZnJhbWUg
aXMgYWx3YXlzIDAuCiAgICAgYm9vbCBjYXJldFJlY3RDaGFuZ2VkID0gcmVjb21wdXRlQ2FyZXRS
ZWN0KCk7CiAKICAgICAvLyBFRElUIEZJWE1FOiBUaGlzIGlzIGFuIHVuZm9ydHVuYXRlIGhhY2su
CkBAIC04MzIsMTUgKzg4NSwxNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmludmFsaWRh
dGVDYXJldFJlY3QoKQogICAgIH0KIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpwYWlu
dENhcmV0KEdyYXBoaWNzQ29udGV4dCAqcCwgY29uc3QgSW50UmVjdCAmcmVjdCkKK3ZvaWQgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6cGFpbnRDYXJldChHcmFwaGljc0NvbnRleHQqIHAsIGludCB0eCwg
aW50IHR5LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKIHsKICAgICBpZiAoISBtX3NlbC5pc0Nh
cmV0KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX25lZWRzTGF5b3V0KQogICAgICAg
ICBsYXlvdXQoKTsKLSAgICAgICAgCi0gICAgSW50UmVjdCBjYXJldCA9IGludGVyc2VjdGlvbihj
YXJldFJlY3QoKSwgcmVjdCk7CisKKyAgICBJbnRSZWN0IGRyYXdpbmdSZWN0ID0gbG9jYWxDYXJl
dFJlY3QoKTsKKyAgICBkcmF3aW5nUmVjdC5tb3ZlKHR4LCB0eSk7CisgICAgSW50UmVjdCBjYXJl
dCA9IGludGVyc2VjdGlvbihkcmF3aW5nUmVjdCwgY2xpcFJlY3QpOwogICAgIGlmICghY2FyZXQu
aXNFbXB0eSgpKSB7CiAgICAgICAgIENvbG9yIGNhcmV0Q29sb3IgPSBDb2xvcjo6YmxhY2s7CiAg
ICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSByb290RWRpdGFibGVFbGVtZW50KCk7CkBAIC0xMDkx
LDEyICsxMTQ2LDExIEBAIGJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6aXNJblBhc3N3b3JkRmll
bGQoKSBjb25zdAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oc3Rh
cnROb2RlKS0+aW5wdXRUeXBlKCkgPT0gSFRNTElucHV0RWxlbWVudDo6UEFTU1dPUkQ7CiB9CiAK
LWJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6aXNJbnNpZGVOb2RlKCkgY29uc3QKK2Jvb2wgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6Y2FyZXRSZW5kZXJzSW5zaWRlTm9kZShOb2RlKiBub2RlKSBjb25z
dAogewotICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHN0YXJ0KCkubm9kZSgpOwotICAgIGlmICghc3Rh
cnROb2RlKQorICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVy
biAhaXNUYWJsZUVsZW1lbnQoc3RhcnROb2RlKSAmJiAhZWRpdGluZ0lnbm9yZXNDb250ZW50KHN0
YXJ0Tm9kZSk7CisgICAgcmV0dXJuICFpc1RhYmxlRWxlbWVudChub2RlKSAmJiAhZWRpdGluZ0ln
bm9yZXNDb250ZW50KG5vZGUpOwogfQogCiB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmZvY3Vz
ZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCkBAIC0xMTUzLDcgKzEyMDcsNyBAQCBib29sIFNlbGVj
dGlvbkNvbnRyb2xsZXI6OmlzRm9jdXNlZEFuZEFjdGl2ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fZm9jdXNlZCAmJiBtX2ZyYW1lLT5wYWdlKCkgJiYgbV9mcmFtZS0+cGFnZSgpLT5mb2N1c0Nv
bnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKIH0KLSAgCisKICNpZm5kZWYgTkRFQlVHCiAKIHZvaWQg
U2VsZWN0aW9uQ29udHJvbGxlcjo6Zm9ybWF0Rm9yRGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNp
Z25lZCBsZW5ndGgpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9u
Q29udHJvbGxlci5oIGIvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaAppbmRl
eCBiYTg5NjcwLi4wYzYyNzBkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9u
Q29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgK
QEAgLTg1LDcgKzg1LDEzIEBAIHB1YmxpYzoKICAgICBQb3NpdGlvbiBzdGFydCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2VsLnN0YXJ0KCk7IH0KICAgICBQb3NpdGlvbiBlbmQoKSBjb25zdCB7IHJldHVy
biBtX3NlbC5lbmQoKTsgfQogCi0gICAgSW50UmVjdCBjYXJldFJlY3QoKSBjb25zdDsKKyAgICAv
LyBSZXR1cm4gdGhlIHJlbmRlcmVyIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIHRo
ZSBjYXJldCAoaW4gdGhlIHNlbGVjdGlvbiBzdGFydCBub2RlKQorICAgIFJlbmRlck9iamVjdCog
Y2FyZXRSZW5kZXJlcigpIGNvbnN0OworCisgICAgLy8gQ2FyZXQgcmVjdCBsb2NhbCB0byB0aGUg
Y2FyZXQncyByZW5kZXJlcgorICAgIEludFJlY3QgbG9jYWxDYXJldFJlY3QoKSBjb25zdDsKKyAg
ICAvLyBCb3VuZHMgb2YgKHBvc3NpYmx5IHRyYW5zZm9ybWVkKSBjYXJldCBpbiBhYnNvbHV0ZSBj
b29yZHMKKyAgICBJbnRSZWN0IGFic29sdXRlQ2FyZXRCb3VuZHMoKTsKICAgICB2b2lkIHNldE5l
ZWRzTGF5b3V0KGJvb2wgZmxhZyA9IHRydWUpOwogCiAgICAgdm9pZCBzZXRMYXN0Q2hhbmdlV2Fz
SG9yaXpvbnRhbEV4dGVuc2lvbihib29sIGIpIHsgbV9sYXN0Q2hhbmdlV2FzSG9yaXpvbnRhbEV4
dGVuc2lvbiA9IGI7IH0KQEAgLTk2LDcgKzEwMiw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzUmFu
Z2UoKSBjb25zdCB7IHJldHVybiBtX3NlbC5pc1JhbmdlKCk7IH0KICAgICBib29sIGlzQ2FyZXRP
clJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9zZWwuaXNDYXJldE9yUmFuZ2UoKTsgfQogICAgIGJv
b2wgaXNJblBhc3N3b3JkRmllbGQoKSBjb25zdDsKLSAgICBib29sIGlzSW5zaWRlTm9kZSgpIGNv
bnN0OwogICAgIAogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHRvUmFuZ2UoKSBjb25zdCB7IHJldHVy
biBtX3NlbC50b1JhbmdlKCk7IH0KIApAQCAtMTA2LDcgKzExMSw3IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgcmVjb21wdXRlQ2FyZXRSZWN0KCk7IC8vIHJldHVybnMgdHJ1ZSBpZiBjYXJldCByZWN0
IG1vdmVkCiAgICAgdm9pZCBpbnZhbGlkYXRlQ2FyZXRSZWN0KCk7Ci0gICAgdm9pZCBwYWludENh
cmV0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHBhaW50Q2Fy
ZXQoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHksIGNvbnN0IEludFJlY3QmIGNsaXBS
ZWN0KTsKIAogICAgIC8vIFVzZWQgdG8gc3VzcGVuZCBjYXJldCBibGlua2luZyB3aGlsZSB0aGUg
bW91c2UgaXMgZG93bi4KICAgICB2b2lkIHNldENhcmV0QmxpbmtpbmdTdXNwZW5kZWQoYm9vbCBz
dXNwZW5kZWQpIHsgbV9pc0NhcmV0QmxpbmtpbmdTdXNwZW5kZWQgPSBzdXNwZW5kZWQ7IH0KQEAg
LTE0NCwyNSArMTQ5LDIzIEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIHZvaWQgZm9jdXNlZE9y
QWN0aXZlU3RhdGVDaGFuZ2VkKCk7CisgICAgYm9vbCBjYXJldFJlbmRlcnNJbnNpZGVOb2RlKE5v
ZGUqKSBjb25zdDsKKworICAgIEZyYW1lKiBtX2ZyYW1lOworICAgIGludCBtX3hQb3NGb3JWZXJ0
aWNhbEFycm93TmF2aWdhdGlvbjsKIAogICAgIFNlbGVjdGlvbiBtX3NlbDsKIAotICAgIEludFJl
Y3QgbV9jYXJldFJlY3Q7ICAgICAgICAgICAgLy8gY2FyZXQgY29vcmRpbmF0ZXMsIHNpemUsIGFu
ZCBwb3NpdGlvbgotICAgIAotICAgIC8vIG1fY2FyZXRQb3NpdGlvbk9uTGF5b3V0IHN0b3JlcyB0
aGUgc2Nyb2xsIG9mZnNldCBvbiB0aGUgcHJldmlvdXMgY2FsbCB0byBTZWxlY3Rpb25Db250cm9s
bGVyOjpsYXlvdXQoKS4KLSAgICAvLyBXaGVuIGFza2VkIGZvciBjYXJldFJlY3QoKSwgd2UgY29y
cmVjdCBtX2NhcmV0UmVjdCBmb3Igb2Zmc2V0IGR1ZSB0byBzY3JvbGxpbmcgc2luY2UgdGhlIGxh
c3QgbGF5b3V0KCkuCi0gICAgLy8gVGhpcyBpcyBmYXN0ZXIgdGhhbiBkb2luZyBhbm90aGVyIGxh
eW91dCgpLgotICAgIEludFBvaW50IG1fY2FyZXRQb3NpdGlvbk9uTGF5b3V0OworICAgIEludFJl
Y3QgbV9jYXJldFJlY3Q7ICAgICAgICAvLyBjYXJldCByZWN0IGluIGNvb3JkcyBsb2NhbCB0byB0
aGUgcmVuZGVyZXIgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIHRoZSBjYXJldAorICAgIEludFJl
Y3QgbV9hYnNDYXJldEJvdW5kczsgICAvLyBhYnNvbHV0ZSBib3VuZGluZyByZWN0IGZvciB0aGUg
Y2FyZXQKICAgICAKICAgICBib29sIG1fbmVlZHNMYXlvdXQgOiAxOyAgICAgICAvLyB0cnVlIGlm
IHRoZSBjYXJldCBhbmQgZXhwZWN0ZWRWaXNpYmxlIHJlY3RhbmdsZXMgbmVlZCB0byBiZSBjYWxj
dWxhdGVkCisgICAgYm9vbCBtX2Fic0NhcmV0Qm91bmRzRGlydHk6IDE7CiAgICAgYm9vbCBtX2xh
c3RDaGFuZ2VXYXNIb3Jpem9udGFsRXh0ZW5zaW9uIDogMTsKLSAgICBGcmFtZSogbV9mcmFtZTsK
LSAgICBib29sIG1faXNEcmFnQ2FyZXRDb250cm9sbGVyOworICAgIGJvb2wgbV9pc0RyYWdDYXJl
dENvbnRyb2xsZXIgOiAxOworICAgIGJvb2wgbV9pc0NhcmV0QmxpbmtpbmdTdXNwZW5kZWQgOiAx
OworICAgIGJvb2wgbV9mb2N1c2VkIDogMTsKIAotICAgIGJvb2wgbV9pc0NhcmV0QmxpbmtpbmdT
dXNwZW5kZWQ7Ci0gICAgCi0gICAgaW50IG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9u
OwotICAgIGJvb2wgbV9mb2N1c2VkOwogfTsKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBTZWxlY3Rpb25Db250cm9sbGVyJiBhLCBjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyJiBiKQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAgYi9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAppbmRleCA2MjZjNWI0Li5jMGVkNjAxIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAorKysgYi9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUg
IkNTdHJpbmcuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIK
KyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRl
ICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpAQCAtNTIzLDEzICs1MjQs
MTUgQEAgVUNoYXIgVmlzaWJsZVBvc2l0aW9uOjpjaGFyYWN0ZXJBZnRlcigpIGNvbnN0CiAgICAg
cmV0dXJuIHRleHROb2RlLT5kYXRhKClbb2Zmc2V0XTsKIH0KIAotSW50UmVjdCBWaXNpYmxlUG9z
aXRpb246OmNhcmV0UmVjdCgpIGNvbnN0CitJbnRSZWN0IFZpc2libGVQb3NpdGlvbjo6bG9jYWxD
YXJldFJlY3QoUmVuZGVyT2JqZWN0KiYgcmVuZGVyZXIpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9k
ZSA9IG1fZGVlcFBvc2l0aW9uLm5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCisgICAgaWYgKCFub2Rl
KSB7CisgICAgICAgIHJlbmRlcmVyID0gMDsKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQot
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgIH0KKyAg
ICAKKyAgICByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikK
ICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIApAQCAtNTQwLDcgKzU0MywxNyBAQCBJbnRSZWN0
IFZpc2libGVQb3NpdGlvbjo6Y2FyZXRSZWN0KCkgY29uc3QKICAgICBpZiAoaW5saW5lQm94KQog
ICAgICAgICByZW5kZXJlciA9IGlubGluZUJveC0+b2JqZWN0KCk7CiAKLSAgICByZXR1cm4gcmVu
ZGVyZXItPmNhcmV0UmVjdChpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0KTsKKyAgICByZXR1cm4gcmVu
ZGVyZXItPmxvY2FsQ2FyZXRSZWN0KGlubGluZUJveCwgY2FyZXRPZmZzZXQpOworfQorCitJbnRS
ZWN0IFZpc2libGVQb3NpdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcygpIGNvbnN0Cit7CisgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlcjsKKyAgICBJbnRSZWN0IGxvY2FsUmVjdCA9IGxvY2FsQ2Fy
ZXRSZWN0KHJlbmRlcmVyKTsKKyAgICBpZiAobG9jYWxSZWN0LmlzRW1wdHkoKSB8fCAhcmVuZGVy
ZXIpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICByZXR1cm4gcmVuZGVyZXItPmxv
Y2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGxvY2FsUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5n
Qm94KCk7CiB9CiAKIHZvaWQgVmlzaWJsZVBvc2l0aW9uOjpkZWJ1Z1Bvc2l0aW9uKGNvbnN0IGNo
YXIqIG1zZykgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRp
b24uaCBiL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAppbmRleCA3OWYzYTU3Li43
ZjU3MGU5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgKKysr
IGIvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCkBAIC05MCw3ICs5MCwxMCBAQCBw
dWJsaWM6CiAgICAgICAgIG1fZGVlcFBvc2l0aW9uLmdldElubGluZUJveEFuZE9mZnNldChtX2Fm
ZmluaXR5LCBwcmltYXJ5RGlyZWN0aW9uLCBpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0KTsKICAgICB9
CiAKLSAgICBJbnRSZWN0IGNhcmV0UmVjdCgpIGNvbnN0OworICAgIC8vIFJlY3QgaXMgbG9jYWwg
dG8gdGhlIHJldHVybmVkIHJlbmRlcmVyCisgICAgSW50UmVjdCBsb2NhbENhcmV0UmVjdChSZW5k
ZXJPYmplY3QqJikgY29uc3Q7CisgICAgLy8gQm91bmRzIG9mIChwb3NzaWJseSB0cmFuc2Zvcm1l
ZCkgY2FyZXQgaW4gYWJzb2x1dGUgY29vcmRzCisgICAgSW50UmVjdCBhYnNvbHV0ZUNhcmV0Qm91
bmRzKCkgY29uc3Q7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgdm9pZCBmb3JtYXRGb3JEZWJ1Z2dl
cihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2VkaXRpbmcvbWFjL1NlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW0gYi9XZWJDb3JlL2VkaXRp
bmcvbWFjL1NlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW0KaW5kZXggZTA3MDI0YS4uN2Y5NWQ5ZCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL21hYy9TZWxlY3Rpb25Db250cm9sbGVyTWFjLm1t
CisrKyBiL1dlYkNvcmUvZWRpdGluZy9tYWMvU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbQpAQCAt
NDYsNyArNDYsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFjY2Vzc2liaWxp
dHlGb3JTZWxlY3Rpb25DaGFuZ2UoKQogICAgIGlmIChVQVpvb21FbmFibGVkKCkgJiYgbV9zZWwu
aXNDYXJldCgpICYmIG1fc2VsLnN0YXJ0KCkubm9kZSgpKSB7CiAgICAgICAgIFJlbmRlclZpZXcg
KnJlbmRlclZpZXcgPSBzdGF0aWNfY2FzdDxSZW5kZXJWaWV3Kj4obV9zZWwuc3RhcnQoKS5ub2Rl
KCktPnJlbmRlcmVyKCkpOwogICAgICAgICBpZiAocmVuZGVyVmlldykgewotICAgICAgICAgICAg
SW50UmVjdCBzZWxlY3Rpb25SZWN0ID0gY2FyZXRSZWN0KCk7CisgICAgICAgICAgICBJbnRSZWN0
IHNlbGVjdGlvblJlY3QgPSBhYnNvbHV0ZUNhcmV0Qm91bmRzKCk7CiAgICAgICAgICAgICBJbnRS
ZWN0IHZpZXdSZWN0ID0gcmVuZGVyVmlldy0+dmlld1JlY3QoKTsKICAgICAgICAgICAgIEZyYW1l
VmlldyogZnJhbWVWaWV3ID0gcmVuZGVyVmlldy0+dmlldygpLT5mcmFtZVZpZXcoKTsgCiAgICAg
ICAgICAgICBpZiAoZnJhbWVWaWV3KSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEVs
ZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAppbmRleCA2ZDRiODYxLi4w
NDEzNDEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCisrKyBiL1dl
YkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKQEAgLTYxMCw2ICs2MTAsOCBAQCBib29sIEhUTUxF
bGVtZW50Ojppc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0CiAgICAgaWYgKGRvY3VtZW50KCktPmZy
YW1lKCkgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKKyAgICAvLyBGSVhNRTogdGhpcyBpcyBhIHRlcnJpYmxlIHRoaW5n
IHRvIGRvIGhlcmU6CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxODM0CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlUmVuZGVyaW5nKCk7CiAKICAgICBpZiAo
IXJlbmRlcmVyKCkpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcCBiL1dlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cAppbmRleCBlZGQyNjQ4Li5kNWZhNDE5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCkBAIC0xNjI0LDE5ICsxNjI0LDE5IEBAIEludFJlY3QgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6Ym91bmRzRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlz
aWJsZVBvCiAgICAgCiAgICAgLy8gQ3JlYXRlIGEgbXV0YWJsZSBWaXNpYmxlUG9zaXRpb25SYW5n
ZS4KICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSByYW5nZSh2aXNpYmxlUG9zaXRpb25SYW5nZSk7
Ci0gICAgSW50UmVjdCByZWN0MSA9IHJhbmdlLnN0YXJ0LmNhcmV0UmVjdCgpOwotICAgIEludFJl
Y3QgcmVjdDIgPSByYW5nZS5lbmQuY2FyZXRSZWN0KCk7CisgICAgSW50UmVjdCByZWN0MSA9IHJh
bmdlLnN0YXJ0LmFic29sdXRlQ2FyZXRCb3VuZHMoKTsKKyAgICBJbnRSZWN0IHJlY3QyID0gcmFu
Z2UuZW5kLmFic29sdXRlQ2FyZXRCb3VuZHMoKTsKICAgICAKICAgICAvLyByZWFkanVzdCBmb3Ig
cG9zaXRpb24gYXQgdGhlIGVkZ2Ugb2YgYSBsaW5lLiAgVGhpcyBpcyB0byBleGNsdWRlIGxpbmUg
cmVjdCB0aGF0IGRvZXNuJ3QgbmVlZCB0byBiZSBhY2NvdW50ZWQgaW4gdGhlIHJhbmdlIGJvdW5k
cwogICAgIGlmIChyZWN0Mi55KCkgIT0gcmVjdDEueSgpKSB7CiAgICAgICAgIFZpc2libGVQb3Np
dGlvbiBlbmRPZkZpcnN0TGluZSA9IGVuZE9mTGluZShyYW5nZS5zdGFydCk7CiAgICAgICAgIGlm
IChyYW5nZS5zdGFydCA9PSBlbmRPZkZpcnN0TGluZSkgewogICAgICAgICAgICAgcmFuZ2Uuc3Rh
cnQuc2V0QWZmaW5pdHkoRE9XTlNUUkVBTSk7Ci0gICAgICAgICAgICByZWN0MSA9IHJhbmdlLnN0
YXJ0LmNhcmV0UmVjdCgpOworICAgICAgICAgICAgcmVjdDEgPSByYW5nZS5zdGFydC5hYnNvbHV0
ZUNhcmV0Qm91bmRzKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJhbmdlLmVuZCA9PSBlbmRP
ZkZpcnN0TGluZSkgewogICAgICAgICAgICAgcmFuZ2UuZW5kLnNldEFmZmluaXR5KFVQU1RSRUFN
KTsKLSAgICAgICAgICAgIHJlY3QyID0gcmFuZ2UuZW5kLmNhcmV0UmVjdCgpOworICAgICAgICAg
ICAgcmVjdDIgPSByYW5nZS5lbmQuYWJzb2x1dGVDYXJldEJvdW5kcygpOwogICAgICAgICB9CiAg
ICAgfQogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1dlYkNvcmUv
cGFnZS9GcmFtZS5jcHAKaW5kZXggYTg4ZWFjZS4uYmUzYzQwOSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC0yNTcsMTUg
KzI1NywyNCBAQCBJbnRSZWN0IEZyYW1lOjpmaXJzdFJlY3RGb3JSYW5nZShSYW5nZSogcmFuZ2Up
IGNvbnN0CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgQVNTRVJUKHJhbmdlLT5zdGFy
dENvbnRhaW5lcihlYykpOwogICAgIEFTU0VSVChyYW5nZS0+ZW5kQ29udGFpbmVyKGVjKSk7CisK
ICAgICBJbmxpbmVCb3gqIHN0YXJ0SW5saW5lQm94OwogICAgIGludCBzdGFydENhcmV0T2Zmc2V0
OwogICAgIHJhbmdlLT5zdGFydFBvc2l0aW9uKCkuZ2V0SW5saW5lQm94QW5kT2Zmc2V0KERPV05T
VFJFQU0sIHN0YXJ0SW5saW5lQm94LCBzdGFydENhcmV0T2Zmc2V0KTsKLSAgICBJbnRSZWN0IHN0
YXJ0Q2FyZXRSZWN0ID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+cmVuZGVyZXIoKS0+Y2Fy
ZXRSZWN0KHN0YXJ0SW5saW5lQm94LCBzdGFydENhcmV0T2Zmc2V0LCAmZXh0cmFXaWR0aFRvRW5k
T2ZMaW5lKTsKKworICAgIFJlbmRlck9iamVjdCogc3RhcnRSZW5kZXJlciA9IHJhbmdlLT5zdGFy
dENvbnRhaW5lcihlYyktPnJlbmRlcmVyKCk7CisgICAgSW50UmVjdCBzdGFydENhcmV0UmVjdCA9
IHN0YXJ0UmVuZGVyZXItPmxvY2FsQ2FyZXRSZWN0KHN0YXJ0SW5saW5lQm94LCBzdGFydENhcmV0
T2Zmc2V0LCAmZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKTsKKyAgICBpZiAoc3RhcnRDYXJldFJlY3Qg
IT0gSW50UmVjdCgpKQorICAgICAgICBzdGFydENhcmV0UmVjdCA9IHN0YXJ0UmVuZGVyZXItPmxv
Y2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KHN0YXJ0Q2FyZXRSZWN0KSkuZW5jbG9zaW5nQm91
bmRpbmdCb3goKTsKIAogICAgIElubGluZUJveCogZW5kSW5saW5lQm94OwogICAgIGludCBlbmRD
YXJldE9mZnNldDsKICAgICByYW5nZS0+ZW5kUG9zaXRpb24oKS5nZXRJbmxpbmVCb3hBbmRPZmZz
ZXQoVVBTVFJFQU0sIGVuZElubGluZUJveCwgZW5kQ2FyZXRPZmZzZXQpOwotICAgIEludFJlY3Qg
ZW5kQ2FyZXRSZWN0ID0gcmFuZ2UtPmVuZENvbnRhaW5lcihlYyktPnJlbmRlcmVyKCktPmNhcmV0
UmVjdChlbmRJbmxpbmVCb3gsIGVuZENhcmV0T2Zmc2V0KTsKKworICAgIFJlbmRlck9iamVjdCog
ZW5kUmVuZGVyZXIgPSByYW5nZS0+ZW5kQ29udGFpbmVyKGVjKS0+cmVuZGVyZXIoKTsKKyAgICBJ
bnRSZWN0IGVuZENhcmV0UmVjdCA9IGVuZFJlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChlbmRJbmxp
bmVCb3gsIGVuZENhcmV0T2Zmc2V0KTsKKyAgICBpZiAoZW5kQ2FyZXRSZWN0ICE9IEludFJlY3Qo
KSkKKyAgICAgICAgZW5kQ2FyZXRSZWN0ID0gZW5kUmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1
YWQoRmxvYXRSZWN0KGVuZENhcmV0UmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiAKICAg
ICBpZiAoc3RhcnRDYXJldFJlY3QueSgpID09IGVuZENhcmV0UmVjdC55KCkpIHsKICAgICAgICAg
Ly8gc3RhcnQgYW5kIGVuZCBhcmUgb24gdGhlIHNhbWUgbGluZQpAQCAtNTc2LDE0ICs1ODUsMTQg
QEAgdm9pZCBGcmFtZTo6c2VsZWN0aW9uTGF5b3V0Q2hhbmdlZCgpCiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBSZW5kZXJWaWV3KiBjYW52YXMgPSBjb250ZW50UmVuZGVyZXIoKTsKLSAgICBpZiAo
IWNhbnZhcykKKyAgICBSZW5kZXJWaWV3KiB2aWV3ID0gY29udGVudFJlbmRlcmVyKCk7CisgICAg
aWYgKCF2aWV3KQogICAgICAgICByZXR1cm47CiAKICAgICBTZWxlY3Rpb24gc2VsZWN0aW9uID0g
dGhpcy0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwogICAgICAgICAKICAgICBpZiAoIXNlbGVj
dGlvbi5pc1JhbmdlKCkpCi0gICAgICAgIGNhbnZhcy0+Y2xlYXJTZWxlY3Rpb24oKTsKKyAgICAg
ICAgdmlldy0+Y2xlYXJTZWxlY3Rpb24oKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gVXNlIHRo
ZSByaWdodG1vc3QgY2FuZGlkYXRlIGZvciB0aGUgc3RhcnQgb2YgdGhlIHNlbGVjdGlvbiwgYW5k
IHRoZSBsZWZ0bW9zdCBjYW5kaWRhdGUgZm9yIHRoZSBlbmQgb2YgdGhlIHNlbGVjdGlvbi4KICAg
ICAgICAgLy8gRXhhbXBsZTogZm9vIDxhPmJhcjwvYT4uICBJbWFnaW5lIHRoYXQgYSBsaW5lIHdy
YXAgb2NjdXJzIGFmdGVyICdmb28nLCBhbmQgdGhhdCAnYmFyJyBpcyBzZWxlY3RlZC4gICBJZiB3
ZSBwYXNzIFtmb28sIDNdCkBAIC02MDEsNyArNjEwLDcgQEAgdm9pZCBGcmFtZTo6c2VsZWN0aW9u
TGF5b3V0Q2hhbmdlZCgpCiAgICAgICAgIGlmIChzdGFydFBvcy5pc05vdE51bGwoKSAmJiBlbmRQ
b3MuaXNOb3ROdWxsKCkgJiYgc2VsZWN0aW9uLnZpc2libGVTdGFydCgpICE9IHNlbGVjdGlvbi52
aXNpYmxlRW5kKCkpIHsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCAqc3RhcnRSZW5kZXJlciA9
IHN0YXJ0UG9zLm5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCAq
ZW5kUmVuZGVyZXIgPSBlbmRQb3Mubm9kZSgpLT5yZW5kZXJlcigpOwotICAgICAgICAgICAgY2Fu
dmFzLT5zZXRTZWxlY3Rpb24oc3RhcnRSZW5kZXJlciwgc3RhcnRQb3Mub2Zmc2V0KCksIGVuZFJl
bmRlcmVyLCBlbmRQb3Mub2Zmc2V0KCkpOworICAgICAgICAgICAgdmlldy0+c2V0U2VsZWN0aW9u
KHN0YXJ0UmVuZGVyZXIsIHN0YXJ0UG9zLm9mZnNldCgpLCBlbmRSZW5kZXJlciwgZW5kUG9zLm9m
ZnNldCgpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTYxNywxOCArNjI2LDE4IEBAIHZvaWQg
RnJhbWU6OmNhcmV0QmxpbmtUaW1lckZpcmVkKFRpbWVyPEZyYW1lPiopCiAgICAgc2VsZWN0aW9u
KCktPmludmFsaWRhdGVDYXJldFJlY3QoKTsKIH0KIAotdm9pZCBGcmFtZTo6cGFpbnRDYXJldChH
cmFwaGljc0NvbnRleHQqIHAsIGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit2b2lkIEZyYW1l
OjpwYWludENhcmV0KEdyYXBoaWNzQ29udGV4dCogcCwgaW50IHR4LCBpbnQgdHksIGNvbnN0IElu
dFJlY3QmIGNsaXBSZWN0KSBjb25zdAogewogICAgIGlmIChkLT5tX2NhcmV0UGFpbnQgJiYgZC0+
bV9jYXJldFZpc2libGUpCi0gICAgICAgIHNlbGVjdGlvbigpLT5wYWludENhcmV0KHAsIHJlY3Qp
OworICAgICAgICBzZWxlY3Rpb24oKS0+cGFpbnRDYXJldChwLCB0eCwgdHksIGNsaXBSZWN0KTsK
IH0KIAotdm9pZCBGcmFtZTo6cGFpbnREcmFnQ2FyZXQoR3JhcGhpY3NDb250ZXh0KiBwLCBjb25z
dCBJbnRSZWN0JiByZWN0KSBjb25zdAordm9pZCBGcmFtZTo6cGFpbnREcmFnQ2FyZXQoR3JhcGhp
Y3NDb250ZXh0KiBwLCBpbnQgdHgsIGludCB0eSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIGNv
bnN0CiB7CiAgICAgU2VsZWN0aW9uQ29udHJvbGxlciogZHJhZ0NhcmV0Q29udHJvbGxlciA9IGQt
Pm1fcGFnZS0+ZHJhZ0NhcmV0Q29udHJvbGxlcigpOwogICAgIEFTU0VSVChkcmFnQ2FyZXRDb250
cm9sbGVyLT5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpOwogICAgIGlmIChkcmFnQ2FyZXRDb250cm9s
bGVyLT5zZWxlY3Rpb24oKS5zdGFydCgpLm5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSA9PSB0
aGlzKQotICAgICAgICBkcmFnQ2FyZXRDb250cm9sbGVyLT5wYWludENhcmV0KHAsIHJlY3QpOwor
ICAgICAgICBkcmFnQ2FyZXRDb250cm9sbGVyLT5wYWludENhcmV0KHAsIHR4LCB0eSwgY2xpcFJl
Y3QpOwogfQogCiBmbG9hdCBGcmFtZTo6em9vbUZhY3RvcigpIGNvbnN0CkBAIC0xMjIwLDcgKzEy
MjksNyBAQCB2b2lkIEZyYW1lOjpyZXZlYWxTZWxlY3Rpb24oY29uc3QgUmVuZGVyTGF5ZXI6OlNj
cm9sbEFsaWdubWVudCYgYWxpZ25tZW50KSBjb25zdAogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpDQVJFVDoKLSAgICAgICAgICAgIHJl
Y3QgPSBzZWxlY3Rpb24oKS0+Y2FyZXRSZWN0KCk7CisgICAgICAgICAgICByZWN0ID0gc2VsZWN0
aW9uKCktPmFic29sdXRlQ2FyZXRCb3VuZHMoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpSQU5HRToKQEAgLTEyNDcsNyArMTI1Niw3
IEBAIHZvaWQgRnJhbWU6OnJldmVhbENhcmV0KGNvbnN0IFJlbmRlckxheWVyOjpTY3JvbGxBbGln
bm1lbnQmIGFsaWdubWVudCkgY29uc3QKIAogICAgIFBvc2l0aW9uIGV4dGVudCA9IHNlbGVjdGlv
bigpLT5leHRlbnQoKTsKICAgICBpZiAoZXh0ZW50Lm5vZGUoKSAmJiBleHRlbnQubm9kZSgpLT5y
ZW5kZXJlcigpKSB7Ci0gICAgICAgIEludFJlY3QgZXh0ZW50UmVjdCA9IFZpc2libGVQb3NpdGlv
bihleHRlbnQpLmNhcmV0UmVjdCgpOworICAgICAgICBJbnRSZWN0IGV4dGVudFJlY3QgPSBWaXNp
YmxlUG9zaXRpb24oZXh0ZW50KS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCk7CiAgICAgICAgIFJlbmRl
ckxheWVyKiBsYXllciA9IGV4dGVudC5ub2RlKCktPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVy
KCk7CiAgICAgICAgIGlmIChsYXllcikKICAgICAgICAgICAgIGxheWVyLT5zY3JvbGxSZWN0VG9W
aXNpYmxlKGV4dGVudFJlY3QsIGZhbHNlLCBhbGlnbm1lbnQsIGFsaWdubWVudCk7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BhZ2UvRnJhbWUuaCBiL1dlYkNvcmUvcGFnZS9GcmFtZS5oCmluZGV4IDcx
NDNkNWQuLjIwODY3MWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9GcmFtZS5oCisrKyBiL1dl
YkNvcmUvcGFnZS9GcmFtZS5oCkBAIC0yNDQsOCArMjQ0LDggQEAgcHVibGljOgogICAgIHZvaWQg
aW52YWxpZGF0ZVNlbGVjdGlvbigpOwogCiAgICAgdm9pZCBzZXRDYXJldFZpc2libGUoYm9vbCA9
IHRydWUpOwotICAgIHZvaWQgcGFpbnRDYXJldChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRS
ZWN0JikgY29uc3Q7ICAKLSAgICB2b2lkIHBhaW50RHJhZ0NhcmV0KEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICB2b2lkIHBhaW50Q2FyZXQoR3JhcGhpY3NDb250
ZXh0KiwgaW50IHR4LCBpbnQgdHksIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSBjb25zdDsgIAor
ICAgIHZvaWQgcGFpbnREcmFnQ2FyZXQoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHks
IGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSBjb25zdDsKIAogICAgIGJvb2wgaXNDb250ZW50RWRp
dGFibGUoKSBjb25zdDsgLy8gaWYgdHJ1ZSwgZXZlcnl0aGluZyBpbiBmcmFtZSBpcyBlZGl0YWJs
ZQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAgYi9XZWJD
b3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAKaW5kZXggODcyYTY0MC4uMjBkMGI5OSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCisrKyBiL1dlYkNvcmUv
cmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcApAQCAtNzksOCArNzksNyBAQCBMYXlvdXRTdGF0ZTo6
TGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KiByb290KQogICAgIDogbV9jbGlwcGVkKGZhbHNlKQog
ewogICAgIFJlbmRlck9iamVjdCogY29udGFpbmVyID0gcm9vdC0+Y29udGFpbmVyKCk7Ci0gICAg
Ly8gRklYTUU6IHRoaXMgaXMgYnJva2VuIHdpdGggdHJhbnNmb3Jtcz8KLSAgICBGbG9hdFBvaW50
IGFic0NvbnRlbnRQb2ludCA9IGNvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlRm9yQ29udGVudChG
bG9hdFBvaW50KCkpOworICAgIEZsb2F0UG9pbnQgYWJzQ29udGVudFBvaW50ID0gY29udGFpbmVy
LT5sb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQoKSwgZmFsc2UsIHRydWUpOwog
ICAgIG1fb2Zmc2V0ID0gSW50U2l6ZShhYnNDb250ZW50UG9pbnQueCgpLCBhYnNDb250ZW50UG9p
bnQueSgpKTsKICAgICBtX25leHQgPSAwOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmlu
ZGV4IDQ0YzQ3NGIuLjVkMjEwYzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTE2
MzgsMjAgKzE2MzgsMjEgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDaGlsZHJlbihQYWludElu
Zm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiAgICAgfQogfQogCi12b2lkIFJlbmRlckJs
b2NrOjpwYWludENhcmV0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBDYXJldFR5cGUgdHlwZSkKK3Zv
aWQgUmVuZGVyQmxvY2s6OnBhaW50Q2FyZXQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwg
aW50IHR5LCBDYXJldFR5cGUgdHlwZSkKIHsKICAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxl
Y3Rpb24gPSB0eXBlID09IEN1cnNvckNhcmV0ID8gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0
aW9uKCkgOiBkb2N1bWVudCgpLT5mcmFtZSgpLT5kcmFnQ2FyZXRDb250cm9sbGVyKCk7Ci0gICAg
Tm9kZSogY2FyZXROb2RlID0gc2VsZWN0aW9uLT5zdGFydCgpLm5vZGUoKTsKLSAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gY2FyZXROb2RlID8gY2FyZXROb2RlLT5yZW5kZXJlcigpIDogMDsK
LSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0gICAgLy8gaWYgY2FyZXROb2Rl
IGlzIGEgYmxvY2sgYW5kIGNhcmV0IGlzIGluc2lkZSBpdCB0aGVuIGNhcmV0IHNob3VsZCBiZSBw
YWludGVkIGJ5IHRoYXQgYmxvY2sKLSAgICBib29sIGN1cnNvckluc2lkZUJsb2NrQ2FyZXROb2Rl
ID0gcmVuZGVyZXItPmlzQmxvY2tGbG93KCkgJiYgc2VsZWN0aW9uLT5pc0luc2lkZU5vZGUoKTsK
LSAgICBpZiAoKGN1cnNvckluc2lkZUJsb2NrQ2FyZXROb2RlID8gcmVuZGVyZXIgOiByZW5kZXJl
ci0+Y29udGFpbmluZ0Jsb2NrKCkpID09IHRoaXMgJiYgc2VsZWN0aW9uLT5pc0NvbnRlbnRFZGl0
YWJsZSgpKSB7CisKKyAgICAvLyBBc2sgdGhlIFNlbGVjdGlvbkNvbnRyb2xsZXIgaWYgdGhlIGNh
cmV0IHNob3VsZCBiZSBwYWludGVkIGJ5IHRoaXMgYmxvY2sKKyAgICBSZW5kZXJPYmplY3QqIGNh
cmV0UGFpbnRlciA9IHNlbGVjdGlvbi0+Y2FyZXRSZW5kZXJlcigpOworICAgIGlmIChjYXJldFBh
aW50ZXIgPT0gdGhpcyAmJiBzZWxlY3Rpb24tPmlzQ29udGVudEVkaXRhYmxlKCkpIHsKKyAgICAg
ICAgLy8gQ29udmVydCB0aGUgcGFpbnRpbmcgb2Zmc2V0IGludG8gdGhlIGxvY2FsIGNvb3JkaW5h
dGUgc3lzdGVtIG9mIHRoaXMgcmVuZGVyZXIsCisgICAgICAgIC8vIHRvIG1hdGNoIHRoZSBsb2Nh
bENhcmV0UmVjdCBjb21wdXRlZCBieSB0aGUgU2VsZWN0aW9uQ29udHJvbGxlcgorICAgICAgICBv
ZmZzZXRGb3JDb250ZW50cyh0eCwgdHkpOworCiAgICAgICAgIGlmICh0eXBlID09IEN1cnNvckNh
cmV0KQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+cGFpbnRDYXJldChwYWludElu
Zm8uY29udGV4dCwgcGFpbnRJbmZvLnJlY3QpOworICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJh
bWUoKS0+cGFpbnRDYXJldChwYWludEluZm8uY29udGV4dCwgdHgsIHR5LCBwYWludEluZm8ucmVj
dCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPnBhaW50
RHJhZ0NhcmV0KHBhaW50SW5mby5jb250ZXh0LCBwYWludEluZm8ucmVjdCk7CisgICAgICAgICAg
ICBkb2N1bWVudCgpLT5mcmFtZSgpLT5wYWludERyYWdDYXJldChwYWludEluZm8uY29udGV4dCwg
dHgsIHR5LCBwYWludEluZm8ucmVjdCk7CiAgICAgfQogfQogCkBAIC0xNzI3LDggKzE3MjgsOCBA
QCB2b2lkIFJlbmRlckJsb2NrOjpwYWludE9iamVjdChQYWludEluZm8mIHBhaW50SW5mbywgaW50
IHR4LCBpbnQgdHkpCiAgICAgLy8gSWYgdGhlIGNhcmV0J3Mgbm9kZSdzIHJlbmRlciBvYmplY3Qn
cyBjb250YWluaW5nIGJsb2NrIGlzIHRoaXMgYmxvY2ssIGFuZCB0aGUgcGFpbnQgYWN0aW9uIGlz
IFBhaW50UGhhc2VGb3JlZ3JvdW5kLAogICAgIC8vIHRoZW4gcGFpbnQgdGhlIGNhcmV0LgogICAg
IGlmICghaW5saW5lRmxvdyAmJiBwYWludFBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7
ICAgICAgICAKLSAgICAgICAgcGFpbnRDYXJldChwYWludEluZm8sIEN1cnNvckNhcmV0KTsKLSAg
ICAgICAgcGFpbnRDYXJldChwYWludEluZm8sIERyYWdDYXJldCk7CisgICAgICAgIHBhaW50Q2Fy
ZXQocGFpbnRJbmZvLCBzY3JvbGxlZFgsIHNjcm9sbGVkWSwgQ3Vyc29yQ2FyZXQpOworICAgICAg
ICBwYWludENhcmV0KHBhaW50SW5mbywgc2Nyb2xsZWRYLCBzY3JvbGxlZFksIERyYWdDYXJldCk7
CiAgICAgfQogfQogCkBAIC0zMjc4LDE1ICszMjc5LDggQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRl
ckJsb2NrOjpwb3NpdGlvbkZvckNvb3JkaW5hdGVzKGludCB4LCBpbnQgeSkKICAgICBOb2RlKiBu
ID0gZWxlbWVudCgpOwogICAgIAogICAgIGludCBjb250ZW50c1ggPSB4OwotICAgIGludCBjb250
ZW50c1kgPSB5IC0gYm9yZGVyVG9wRXh0cmEoKTsKLSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkp
Ci0gICAgICAgIG1fbGF5ZXItPmFkZFNjcm9sbGVkQ29udGVudE9mZnNldChjb250ZW50c1gsIGNv
bnRlbnRzWSk7Ci0gICAgaWYgKG1faGFzQ29sdW1ucykgewotICAgICAgICBJbnRQb2ludCBjb250
ZW50c1BvaW50KGNvbnRlbnRzWCwgY29udGVudHNZKTsKLSAgICAgICAgYWRqdXN0UG9pbnRUb0Nv
bHVtbkNvbnRlbnRzKGNvbnRlbnRzUG9pbnQpOwotICAgICAgICBjb250ZW50c1ggPSBjb250ZW50
c1BvaW50LngoKTsKLSAgICAgICAgY29udGVudHNZID0gY29udGVudHNQb2ludC55KCk7Ci0gICAg
fQorICAgIGludCBjb250ZW50c1kgPSB5OworICAgIG9mZnNldEZvckNvbnRlbnRzKGNvbnRlbnRz
WCwgY29udGVudHNZKTsKIAogICAgIGlmIChpc1JlcGxhY2VkKCkpIHsKICAgICAgICAgaWYgKHkg
PCAwIHx8IHkgPCBoZWlnaHQoKSAmJiB4IDwgMCkKQEAgLTMzODYsNiArMzM4MCwyMSBAQCBWaXNp
YmxlUG9zaXRpb24gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoaW50IHgsIGlu
dCB5KQogICAgIHJldHVybiBSZW5kZXJGbG93Ojpwb3NpdGlvbkZvckNvb3JkaW5hdGVzKHgsIHkp
OwogfQogCit2b2lkIFJlbmRlckJsb2NrOjpvZmZzZXRGb3JDb250ZW50cyhpbnQmIHR4LCBpbnQm
IHR5KSBjb25zdAoreworICAgIHR5IC09IGJvcmRlclRvcEV4dHJhKCk7CisgICAgCisgICAgaWYg
KGhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICBtX2xheWVyLT5hZGRTY3JvbGxlZENvbnRlbnRP
ZmZzZXQodHgsIHR5KTsKKworICAgIGlmIChtX2hhc0NvbHVtbnMpIHsKKyAgICAgICAgSW50UG9p
bnQgY29udGVudHNQb2ludCh0eCwgdHkpOworICAgICAgICBhZGp1c3RQb2ludFRvQ29sdW1uQ29u
dGVudHMoY29udGVudHNQb2ludCk7CisgICAgICAgIHR4ID0gY29udGVudHNQb2ludC54KCk7Cisg
ICAgICAgIHR5ID0gY29udGVudHNQb2ludC55KCk7CisgICAgfQorfQorCiBpbnQgUmVuZGVyQmxv
Y2s6OmF2YWlsYWJsZVdpZHRoKCkgY29uc3QKIHsKICAgICAvLyBJZiB3ZSBoYXZlIG11bHRpcGxl
IGNvbHVtbnMsIHRoZW4gdGhlIGF2YWlsYWJsZSB3aWR0aCBpcyByZWR1Y2VkIHRvIG91ciBjb2x1
bW4gd2lkdGguCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oIGIv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAppbmRleCBlNDQ2ZmIyLi41YWUxMzRlIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKQEAgLTE2Nyw3ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBwYWludENoaWxkcmVuKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICB2b2lk
IHBhaW50RWxsaXBzaXNCb3hlcyhQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAgICAgdm9p
ZCBwYWludFNlbGVjdGlvbihQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7Ci0gICAgdm9pZCBw
YWludENhcmV0KFBhaW50SW5mbyYsIENhcmV0VHlwZSk7CisgICAgdm9pZCBwYWludENhcmV0KFBh
aW50SW5mbyYsIGludCB0eCwgaW50IHR5LCBDYXJldFR5cGUpOwogCiAgICAgdm9pZCBpbnNlcnRG
bG9hdGluZ09iamVjdChSZW5kZXJPYmplY3QqKTsKICAgICB2b2lkIHJlbW92ZUZsb2F0aW5nT2Jq
ZWN0KFJlbmRlck9iamVjdCopOwpAQCAtMzI0LDYgKzMyNCw5IEBAIHByaXZhdGU6CiAgICAgUG9z
aXRpb24gcG9zaXRpb25Gb3JCb3goSW5saW5lQm94KiwgYm9vbCBzdGFydCA9IHRydWUpIGNvbnN0
OwogICAgIFBvc2l0aW9uIHBvc2l0aW9uRm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiwgYm9vbCBz
dGFydCA9IHRydWUpIGNvbnN0OwogCisgICAgLy8gQWRqdXN0IHR4IGFuZCB0eSBmcm9tIHBhaW50
aW5nIG9mZnNldHMgdG8gdGhlIGxvY2FsIGNvb3JkcyBvZiB0aGlzIHJlbmRlcmVyCisgICAgdm9p
ZCBvZmZzZXRGb3JDb250ZW50cyhpbnQmIHR4LCBpbnQmIHR5KSBjb25zdDsKKwogICAgIGludCBj
b2x1bW5HYXAoKSBjb25zdDsKICAgICB2b2lkIGNhbGNDb2x1bW5XaWR0aCgpOwogICAgIGludCBs
YXlvdXRDb2x1bW5zKGludCBlbmRPZkNvbnRlbnQgPSAtMSk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cAppbmRleCAyMzZhNDg3Li5kZmJlNWViIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTI2
OTUsNyArMjY5NSw3IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVWZXJ0aWNhbFJlcGxh
Y2VkKCkKICAgICBtX3kgPSB0b3BWYWx1ZSArIG1fbWFyZ2luVG9wICsgY29udGFpbmVyQmxvY2st
PmJvcmRlclRvcCgpOwogfQogCi1JbnRSZWN0IFJlbmRlckJveDo6Y2FyZXRSZWN0KElubGluZUJv
eCogYm94LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQorSW50
UmVjdCBSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogYm94LCBpbnQgY2FyZXRP
ZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQogewogICAgIC8vIFZpc2libGVQb3Np
dGlvbnMgYXQgb2Zmc2V0cyBpbnNpZGUgY29udGFpbmVycyBlaXRoZXIgYSkgcmVmZXIgdG8gdGhl
IHBvc2l0aW9ucyBiZWZvcmUvYWZ0ZXIKICAgICAvLyB0aG9zZSBjb250YWluZXJzICh0YWJsZXMg
YW5kIHNlbGVjdCBlbGVtZW50cykgb3IgYikgcmVmZXIgdG8gdGhlIHBvc2l0aW9uIGluc2lkZSBh
biBlbXB0eSBibG9jay4KQEAgLTI3MjksMTcgKzI3MjksMTEgQEAgSW50UmVjdCBSZW5kZXJCb3g6
OmNhcmV0UmVjdChJbmxpbmVCb3gqIGJveCwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lk
dGhUb0UKICAgICBpZiAoZm9udEhlaWdodCA+IHJlY3QuaGVpZ2h0KCkgfHwgIWlzUmVwbGFjZWQo
KSAmJiAhaXNUYWJsZSgpKQogICAgICAgICByZWN0LnNldEhlaWdodChmb250SGVpZ2h0KTsKIAot
ICAgIFJlbmRlck9iamVjdCogY2IgPSBjb250YWluaW5nQmxvY2soKTsKLSAgICBpZiAoIWNiKQot
ICAgICAgICAvLyBObyBwb2ludCByZXR1cm5pbmcgYSByZWxhdGl2ZSBwb3NpdGlvbi4KLSAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gY2ItPmxvY2Fs
VG9BYnNvbHV0ZSgpOwotCiAgICAgaWYgKGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKICAgICAgICAg
KmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IHhQb3MoKSArIG1fd2lkdGggLSByZWN0LnJpZ2h0KCk7
CiAKLSAgICByZWN0Lm1vdmUoYWJzUG9zLngoKSwgYWJzUG9zLnkoKSk7CisgICAgLy8gTW92ZSB0
byBsb2NhbCBjb29yZHMKKyAgICByZWN0Lm1vdmUoLXhQb3MoKSwgLXlQb3MoKSk7CiAgICAgcmV0
dXJuIHJlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5o
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggZGVkOWNiNS4uN2E3MjUxNiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKKysrIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTUzLDYgKzUzLDkgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgRmxvYXRQb2ludCBhYnNvbHV0ZVRvTG9jYWwoRmxvYXRQb2ludCBjb250YWluZXJQb2ludCwg
Ym9vbCBmaXhlZCA9IGZhbHNlLCBib29sIHVzZVRyYW5zZm9ybXMgPSBmYWxzZSkgY29uc3Q7CiAg
ICAgdmlydHVhbCBGbG9hdFF1YWQgbG9jYWxUb0Fic29sdXRlUXVhZChjb25zdCBGbG9hdFF1YWQm
LCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0OwogCisgICAgLy8gUmV0dXJuIHRoZSBvZmZzZXQg
ZnJvbSB0aGUgY29udGFpbmVyKCkgcmVuZGVyZXIgKGV4Y2x1ZGluZyB0cmFuc2Zvcm1zKQorICAg
IHZpcnR1YWwgSW50U2l6ZSBvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlck9iamVjdCopIGNvbnN0
OworCiAgICAgdmlydHVhbCBpbnQgeFBvcygpIGNvbnN0IHsgcmV0dXJuIG1feDsgfQogICAgIHZp
cnR1YWwgaW50IHlQb3MoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KICAgICB2aXJ0dWFsIHZvaWQg
c2V0UG9zKGludCB4LCBpbnQgeSk7CkBAIC0xNDEsNyArMTQ0LDcgQEAgcHVibGljOgogICAgIAog
ICAgIHZpcnR1YWwgUmVuZGVyTGF5ZXIqIGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcjsg
fQogCi0gICAgdmlydHVhbCBJbnRSZWN0IGNhcmV0UmVjdChJbmxpbmVCb3gqLCBpbnQgY2FyZXRP
ZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCk7CisgICAgdmlydHVhbCBJbnRS
ZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGludCBjYXJldE9mZnNldCwgaW50KiBleHRy
YVdpZHRoVG9FbmRPZkxpbmUgPSAwKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludEZpbGxMYXll
ckV4dGVuZGVkKGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IENvbG9yJiwgY29uc3QgRmlsbExheWVy
KiwgaW50IGNsaXBZLCBpbnQgY2xpcEhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgdHgsIGludCB0eSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBJbmxp
bmVGbG93Qm94KiA9IDAsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlcik7
CkBAIC0xOTAsOCArMTkzLDYgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgY2FsY0Fic29sdXRlSG9y
aXpvbnRhbCgpOwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDYWxjdWxhdGVTaXplQXNS
ZXBsYWNlZCgpIGNvbnN0IHsgcmV0dXJuIGlzUmVwbGFjZWQoKSAmJiAhaXNJbmxpbmVCbG9ja09y
SW5saW5lVGFibGUoKTsgfQotCi0gICAgSW50U2l6ZSBvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRl
ck9iamVjdCopIGNvbnN0OwogICAgIAogcHJpdmF0ZToKICAgICB2b2lkIHBhaW50Um9vdEJveERl
Y29yYXRpb25zKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxv
dy5jcHAKaW5kZXggZWU2MDQ4Yy4uNzc5YjQzOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmxvdy5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHAK
QEAgLTYyMCwxMSArNjIwLDExIEBAIGludCBSZW5kZXJGbG93OjpsZWZ0bW9zdFBvc2l0aW9uKGJv
b2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IsIGJvb2wgaW5jbHVkZVNlbGYpCiAgICAgcmV0dXJu
IGxlZnQ7CiB9CiAKLUludFJlY3QgUmVuZGVyRmxvdzo6Y2FyZXRSZWN0KElubGluZUJveCogaW5s
aW5lQm94LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQorSW50
UmVjdCBSZW5kZXJGbG93Ojpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgaW50
IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKIHsKICAgICAvLyBEbyB0
aGUgbm9ybWFsIGNhbGN1bGF0aW9uIGluIG1vc3QgY2FzZXMuCiAgICAgaWYgKGZpcnN0Q2hpbGQo
KSB8fCBzdHlsZSgpLT5kaXNwbGF5KCkgPT0gSU5MSU5FKQotICAgICAgICByZXR1cm4gUmVuZGVy
Q29udGFpbmVyOjpjYXJldFJlY3QoaW5saW5lQm94LCBjYXJldE9mZnNldCwgZXh0cmFXaWR0aFRv
RW5kT2ZMaW5lKTsKKyAgICAgICAgcmV0dXJuIFJlbmRlckNvbnRhaW5lcjo6bG9jYWxDYXJldFJl
Y3QoaW5saW5lQm94LCBjYXJldE9mZnNldCwgZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKTsKIAogICAg
IC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2U6CiAgICAgLy8gVGhlIGVsZW1lbnQgaXMgbm90IGFu
IGlubGluZSBlbGVtZW50LCBhbmQgaXQncyBlbXB0eS4gU28gd2UgaGF2ZSB0bwpAQCAtNjk0LDkg
KzY5NCw3IEBAIEludFJlY3QgUmVuZGVyRmxvdzo6Y2FyZXRSZWN0KElubGluZUJveCogaW5saW5l
Qm94LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQb2lu
dCgpKTsKLSAgICB4ICs9IGFic1Bvcy54KCk7Ci0gICAgaW50IHkgPSBhYnNQb3MueSgpICsgcGFk
ZGluZ1RvcCgpICsgYm9yZGVyVG9wKCk7CisgICAgaW50IHkgPSBwYWRkaW5nVG9wKCkgKyBib3Jk
ZXJUb3AoKTsKIAogICAgIHJldHVybiBJbnRSZWN0KHgsIHksIGNhcmV0V2lkdGgsIGhlaWdodCk7
CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93LmggYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGbG93LmgKaW5kZXggYzI4NGVkOC4uN2UzYTM0NSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvdy5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZsb3cuaApAQCAtOTMsNyArOTMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQg
cmlnaHRtb3N0UG9zaXRpb24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciA9IHRydWUsIGJv
b2wgaW5jbHVkZVNlbGYgPSB0cnVlKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBsZWZ0bW9zdFBv
c2l0aW9uKGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IgPSB0cnVlLCBib29sIGluY2x1ZGVT
ZWxmID0gdHJ1ZSkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIEludFJlY3QgY2FyZXRSZWN0KElubGlu
ZUJveCosIGludCBjYXJldE9mZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKTsK
KyAgICB2aXJ0dWFsIEludFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgaW50IGNhcmV0
T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IDApOwogCiAgICAgdmlydHVhbCB2
b2lkIGFkZEZvY3VzUmluZ1JlY3RzKEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5KTsK
ICAgICB2b2lkIHBhaW50T3V0bGluZUZvckxpbmUoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBp
bnQgdHksIGNvbnN0IEludFJlY3QmIHByZXZMaW5lLCBjb25zdCBJbnRSZWN0JiB0aGlzTGluZSwg
Y29uc3QgSW50UmVjdCYgbmV4dExpbmUpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4
IDEyMGUxMjAuLmJkZDg5ZmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTgyNSw2
ICs4MjUsMTEgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXQoaW50IHgsIGludCB5
LCBib29sIHVwZGF0ZVNjcm9sbGJhcnMsIGJvb2wgcmVwYWkKICAgICAgICAgdmlldy0+dXBkYXRl
V2lkZ2V0UG9zaXRpb25zKCk7CiAgICAgfQogCisgICAgLy8gVGhlIGNhcmV0IHJlY3QgbmVlZHMg
dG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgc2Nyb2xsaW5nCisgICAgRnJhbWUqIGZyYW1lID0gcmVu
ZGVyZXIoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBpZiAoZnJhbWUpCisgICAgICAgIGZy
YW1lLT5pbnZhbGlkYXRlU2VsZWN0aW9uKCk7CisKICAgICAvLyBKdXN0IHNjaGVkdWxlIGEgZnVs
bCByZXBhaW50IG9mIG91ciBvYmplY3QuCiAgICAgaWYgKHJlcGFpbnQpCiAgICAgICAgIG1fb2Jq
ZWN0LT5yZXBhaW50KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCA1MWU1YjAy
Li44NDQzMmNmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTI0NDMsNyArMjQ0
MywyMCBAQCBGbG9hdFF1YWQgUmVuZGVyT2JqZWN0Ojpsb2NhbFRvQWJzb2x1dGVRdWFkKGNvbnN0
IEZsb2F0UXVhZCYgbG9jYWxRdWFkLCBib29sIGZpeAogICAgIHJldHVybiBGbG9hdFF1YWQoKTsK
IH0KIAotSW50UmVjdCBSZW5kZXJPYmplY3Q6OmNhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJv
eCwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKK0ludFNpemUg
UmVuZGVyT2JqZWN0OjpvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlck9iamVjdCogbykgY29uc3QK
K3sKKyAgICBBU1NFUlQobyA9PSBjb250YWluZXIoKSk7CisKKyAgICBJbnRTaXplIG9mZnNldDsK
KyAgICBvZmZzZXQuZXhwYW5kKDAsIG8tPmJvcmRlclRvcEV4dHJhKCkpOworCisgICAgaWYgKG8t
Pmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICBvZmZzZXQgLT0gby0+bGF5ZXIoKS0+c2Nyb2xs
ZWRDb250ZW50T2Zmc2V0KCk7CisKKyAgICByZXR1cm4gb2Zmc2V0OworfQorCitJbnRSZWN0IFJl
bmRlck9iamVjdDo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIGludCBjYXJl
dE9mZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiB7CiAgICBpZiAoZXh0cmFXaWR0
aFRvRW5kT2ZMaW5lKQogICAgICAgICpleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaAppbmRleCA5OWIyMzA5Li5lMzM1MjJjIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaApAQCAtNDY5LDcgKzQ2OSw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAg
ICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dDsKLSAgICAgICAgSW50UmVjdCByZWN0OworICAg
ICAgICBJbnRSZWN0IHJlY3Q7ICAgLy8gcmVjdCBiZWluZyBkcmF3bgogICAgICAgICBQYWludFBo
YXNlIHBoYXNlOwogICAgICAgICBib29sIGZvcmNlQmxhY2tUZXh0OwogICAgICAgICBSZW5kZXJP
YmplY3QqIHBhaW50aW5nUm9vdDsgLy8gdXNlZCB0byBkcmF3IGp1c3Qgb25lIGVsZW1lbnQgYW5k
IGl0cyB2aXN1YWwga2lkcwpAQCAtNjAyLDYgKzYwMiw5IEBAIHB1YmxpYzoKICAgICAvLyBDb252
ZXJ0IGEgbG9jYWwgcXVhZCB0byBhbiBhYnNvbHV0ZSBxdWFkLCB0YWtpbmcgdHJhbnNmb3JtcyBp
bnRvIGFjY291bnQuCiAgICAgdmlydHVhbCBGbG9hdFF1YWQgbG9jYWxUb0Fic29sdXRlUXVhZChj
b25zdCBGbG9hdFF1YWQmLCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0OwogCisgICAgLy8gUmV0
dXJuIHRoZSBvZmZzZXQgZnJvbSB0aGUgY29udGFpbmVyKCkgcmVuZGVyZXIgKGV4Y2x1ZGluZyB0
cmFuc2Zvcm1zKQorICAgIHZpcnR1YWwgSW50U2l6ZSBvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRl
ck9iamVjdCopIGNvbnN0OworCiAgICAgLy8gd2lkdGggYW5kIGhlaWdodCBhcmUgd2l0aG91dCBt
YXJnaW5zIGJ1dCBpbmNsdWRlIHBhZGRpbmdzIGFuZCBib3JkZXJzCiAgICAgdmlydHVhbCBpbnQg
d2lkdGgoKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBpbnQgaGVpZ2h0KCkgY29u
c3QgeyByZXR1cm4gMDsgfQpAQCAtODQ1LDE0ICs4NDgsMTIgQEAgcHVibGljOgogICAgIE5vZGUq
IGRyYWdnYWJsZU5vZGUoYm9vbCBkaHRtbE9LLCBib29sIHVhT0ssIGludCB4LCBpbnQgeSwgYm9v
bCYgZGh0bWxXaWxsRHJhZykgY29uc3Q7CiAKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBj
b250ZW50IGNvb3JkaW5hdGVzIG9mIHRoZSBjYXJldCB3aXRoaW4gdGhpcyByZW5kZXIgb2JqZWN0
LgotICAgICAqIEBwYXJhbSBvZmZzZXQgemVyby1iYXNlZCBvZmZzZXQgZGV0ZXJtaW5pbmcgcG9z
aXRpb24gd2l0aGluIHRoZSByZW5kZXIgb2JqZWN0LgotICAgICAqIEBwYXJhbSBvdmVycmlkZSBA
cCB0cnVlIGlmIGlucHV0IG92ZXJyaWRlcyBleGlzdGluZyBjaGFyYWN0ZXJzLAotICAgICAqIEBw
IGZhbHNlIGlmIGl0IGluc2VydHMgdGhlbS4gVGhlIHdpZHRoIG9mIHRoZSBjYXJldCBkZXBlbmRz
IG9uIHRoaXMgb25lLgorICAgICAqIFJldHVybnMgdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRo
ZSBjYXJldCB3aXRoaW4gdGhpcyByZW5kZXIgb2JqZWN0LgorICAgICAqIEBwYXJhbSBjYXJldE9m
ZnNldCB6ZXJvLWJhc2VkIG9mZnNldCBkZXRlcm1pbmluZyBwb3NpdGlvbiB3aXRoaW4gdGhlIHJl
bmRlciBvYmplY3QuCiAgICAgICogQHBhcmFtIGV4dHJhV2lkdGhUb0VuZE9mTGluZSBvcHRpb25h
bCBvdXQgYXJnIHRvIGdpdmUgZXh0cmEgd2lkdGggdG8gZW5kIG9mIGxpbmUgLQogICAgICAqIHVz
ZWZ1bCBmb3IgY2hhcmFjdGVyIHJhbmdlIHJlY3QgY29tcHV0YXRpb25zCiAgICAgICovCi0gICAg
dmlydHVhbCBJbnRSZWN0IGNhcmV0UmVjdChJbmxpbmVCb3gqLCBpbnQgY2FyZXRPZmZzZXQsIGlu
dCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCk7CisgICAgdmlydHVhbCBJbnRSZWN0IGxvY2Fs
Q2FyZXRSZWN0KElubGluZUJveCosIGludCBjYXJldE9mZnNldCwgaW50KiBleHRyYVdpZHRoVG9F
bmRPZkxpbmUgPSAwKTsKIAogICAgIHZpcnR1YWwgaW50IGxvd2VzdFBvc2l0aW9uKGJvb2wgLypp
bmNsdWRlT3ZlcmZsb3dJbnRlcmlvciovID0gdHJ1ZSwgYm9vbCAvKmluY2x1ZGVTZWxmKi8gPSB0
cnVlKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBpbnQgcmlnaHRtb3N0UG9zaXRp
b24oYm9vbCAvKmluY2x1ZGVPdmVyZmxvd0ludGVyaW9yKi8gPSB0cnVlLCBib29sIC8qaW5jbHVk
ZVNlbGYqLyA9IHRydWUpIGNvbnN0IHsgcmV0dXJuIDA7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHSW5saW5lVGV4dC5jcHAKaW5kZXggODdhODliNC4uMzg1ZDE5ZCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKKysrIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKQEAgLTEyOSw3ICsxMjksNyBAQCBJbmxp
bmVUZXh0Qm94KiBSZW5kZXJTVkdJbmxpbmVUZXh0OjpjcmVhdGVJbmxpbmVUZXh0Qm94KCkKICAg
ICByZXR1cm4gbmV3IChyZW5kZXJBcmVuYSgpKSBTVkdJbmxpbmVUZXh0Qm94KHRoaXMpOwogfQog
Ci1JbnRSZWN0IFJlbmRlclNWR0lubGluZVRleHQ6OmNhcmV0UmVjdChJbmxpbmVCb3gqIGlubGlu
ZUJveCwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKK0ludFJl
Y3QgUmVuZGVyU1ZHSW5saW5lVGV4dDo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxpbmVC
b3gsIGludCBjYXJldE9mZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiB7CiAgICAg
Ly8gU1ZHIGRvZXNuJ3QgaGF2ZSBhbnkgZWRpdGFibGUgY29udGVudCB3aGVyZSBhIGNhcmV0IHJl
Y3Qgd291bGQgYmUgbmVlZGVkCiAgICAgcmV0dXJuIEludFJlY3QoKTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuaCBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR0lubGluZVRleHQuaAppbmRleCBkYzdlODUxLi5jYzM3MTY2IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgKKysrIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdUZXh0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAg
IHZpcnR1YWwgSW5saW5lVGV4dEJveCogY3JlYXRlSW5saW5lVGV4dEJveCgpOwogCi0gICAgdmly
dHVhbCBJbnRSZWN0IGNhcmV0UmVjdChJbmxpbmVCb3gqLCBpbnQgY2FyZXRPZmZzZXQsIGludCog
ZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCk7CisgICAgdmlydHVhbCBJbnRSZWN0IGxvY2FsQ2Fy
ZXRSZWN0KElubGluZUJveCosIGludCBjYXJldE9mZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRP
ZkxpbmUgPSAwKTsKICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvckNvb3Jk
aW5hdGVzKGludCB4LCBpbnQgeSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0LmNwcAppbmRleCA4ZDg3OTRiLi5iMGZmNGY2IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0LmNwcApAQCAtNTUsNiArNTUsOCBAQCBSZW5kZXJUZXh0OjpSZW5kZXJUZXh0KE5v
ZGUqIG5vZGUsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gc3RyKQogICAgICAsIG1fbGFzdFRleHRC
b3goMCkKICAgICAgLCBtX21pbldpZHRoKC0xKQogICAgICAsIG1fbWF4V2lkdGgoLTEpCisgICAg
ICwgbV9iZWdpbk1pbldpZHRoKDApCisgICAgICwgbV9lbmRNaW5XaWR0aCgwKQogICAgICAsIG1f
c2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uTm9uZSkKICAgICAgLCBtX2hhc1RhYihmYWxzZSkKICAg
ICAgLCBtX2xpbmVzRGlydHkoZmFsc2UpCkBAIC0zNjIsNyArMzY0LDcgQEAgVmlzaWJsZVBvc2l0
aW9uIFJlbmRlclRleHQ6OnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoaW50IHgsIGludCB5KQogICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24oZWxlbWVudCgpLCBsYXN0Qm94QWJvdmUgPyBsYXN0Qm94
QWJvdmUtPm1fc3RhcnQgKyBsYXN0Qm94QWJvdmUtPm1fbGVuIDogMCwgRE9XTlNUUkVBTSk7CiB9
CiAKLUludFJlY3QgUmVuZGVyVGV4dDo6Y2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCBp
bnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQorSW50UmVjdCBSZW5k
ZXJUZXh0Ojpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgaW50IGNhcmV0T2Zm
c2V0LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKIHsKICAgICBpZiAoIWlubGluZUJveCkK
ICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKQEAgLTM4NCwyMSArMzg2LDE3IEBAIEludFJlY3Qg
UmVuZGVyVGV4dDo6Y2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCBpbnQgY2FyZXRPZmZz
ZXQsIGludCogZXh0cmFXCiAgICAgaWYgKGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKICAgICAgICAg
KmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IChib3gtPnJvb3QoKS0+d2lkdGgoKSArIHJvb3RMZWZ0
KSAtIChsZWZ0ICsgMSk7CiAKLSAgICAvLyBGSVhNRTogYnJva2VuIHdpdGggdHJhbnNmb3Jtcwot
ICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRlRm9yQ29udGVudChGbG9hdFBv
aW50KCkpOwotICAgIGxlZnQgKz0gYWJzUG9zLngoKTsKLSAgICB0b3AgKz0gYWJzUG9zLnkoKTsK
LQogICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOwogICAgIGlmIChzdHls
ZSgpLT5hdXRvV3JhcCgpKSB7CiAgICAgICAgIGludCBhdmFpbGFibGVXaWR0aCA9IGNiLT5saW5l
V2lkdGgodG9wKTsKICAgICAgICAgaWYgKGJveC0+ZGlyZWN0aW9uKCkgPT0gTFRSKQotICAgICAg
ICAgICAgbGVmdCA9IG1pbihsZWZ0LCBzdGF0aWNfY2FzdDxpbnQ+KGFic1Bvcy54KCkpICsgcm9v
dExlZnQgKyBhdmFpbGFibGVXaWR0aCAtIDEpOworICAgICAgICAgICAgbGVmdCA9IG1pbihsZWZ0
LCByb290TGVmdCArIGF2YWlsYWJsZVdpZHRoIC0gMSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGxlZnQgPSBtYXgobGVmdCwgc3RhdGljX2Nhc3Q8aW50PihhYnNQb3MueCgpKSArIHJvb3RM
ZWZ0KTsKKyAgICAgICAgICAgIGxlZnQgPSBtYXgobGVmdCwgcm9vdExlZnQpOwogICAgIH0KIAot
ICAgIHJldHVybiBJbnRSZWN0KGxlZnQsIHRvcCwgMSwgaGVpZ2h0KTsKKyAgICBjb25zdCBpbnQg
Y2FyZXRXaWR0aCA9IDE7CisgICAgcmV0dXJuIEludFJlY3QobGVmdCwgdG9wLCBjYXJldFdpZHRo
LCBoZWlnaHQpOwogfQogCiBBTFdBWVNfSU5MSU5FIGludCBSZW5kZXJUZXh0Ojp3aWR0aEZyb21D
YWNoZShjb25zdCBGb250JiBmLCBpbnQgc3RhcnQsIGludCBsZW4sIGludCB4UG9zKSBjb25zdApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dC5oCmluZGV4IDA4ZTEwMzUuLmFjNTEwMmUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0LmgKQEAgLTEwNiw3ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTZWxlY3Rp
b25TdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFNlbGVj
dGlvblN0YXRlPihtX3NlbGVjdGlvblN0YXRlKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxl
Y3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSBzKTsKICAgICB2aXJ0dWFsIEludFJlY3Qgc2VsZWN0
aW9uUmVjdChib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSk7Ci0gICAgdmlydHVhbCBJ
bnRSZWN0IGNhcmV0UmVjdChJbmxpbmVCb3gqLCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFX
aWR0aFRvRW5kT2ZMaW5lID0gMCk7CisgICAgdmlydHVhbCBJbnRSZWN0IGxvY2FsQ2FyZXRSZWN0
KElubGluZUJveCosIGludCBjYXJldE9mZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUg
PSAwKTsKIAogICAgIHZpcnR1YWwgaW50IG1hcmdpbkxlZnQoKSBjb25zdCB7IHJldHVybiBzdHls
ZSgpLT5tYXJnaW5MZWZ0KCkuY2FsY01pblZhbHVlKDApOyB9CiAgICAgdmlydHVhbCBpbnQgbWFy
Z2luUmlnaHQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5tYXJnaW5SaWdodCgpLmNhbGNNaW5W
YWx1ZSgwKTsgfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9XZWJLaXQvbWFj
L0NoYW5nZUxvZwppbmRleCAzNDZiNzY3Li5lMWE0YTRhIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFj
L0NoYW5nZUxvZworKysgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisy
MDA4LTExLTE0ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY3MQorCisgICAgICAgIFZpc2libGVQb3NpdGlv
bjo6Y2FyZXRSZWN0KCkgd2FzIHJlbmFlbWQgdG8gYWJzb2x1dGVDYXJldEJvdW5kcygpLgorCisg
ICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2NhcmV0
UmVjdEF0Tm9kZTpvZmZzZXQ6YWZmaW5pdHk6XSk6CisKIDIwMDgtMTEtMTQgIERhbiBCZXJuc3Rl
aW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4K
ZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCA3NzM3ODIwLi4yMTllNzk3IDEwMDY0NAotLS0gYS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkZyYW1lLm1tCkBAIC02NzEsNyArNjcxLDcgQEAgc3RhdGljIGlubGluZSBXZWJEYXRhU291cmNl
ICpkYXRhU291cmNlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAtIChOU1JlY3QpX2NhcmV0UmVj
dEF0Tm9kZTooRE9NTm9kZSAqKW5vZGUgb2Zmc2V0OihpbnQpb2Zmc2V0IGFmZmluaXR5OihOU1Nl
bGVjdGlvbkFmZmluaXR5KWFmZmluaXR5CiB7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQ
b3NpdGlvbihbbm9kZSBfbm9kZV0sIG9mZnNldCwgc3RhdGljX2Nhc3Q8RUFmZmluaXR5PihhZmZp
bml0eSkpOwotICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb24uY2FyZXRSZWN0KCk7CisgICAgcmV0
dXJuIHZpc2libGVQb3NpdGlvbi5hYnNvbHV0ZUNhcmV0Qm91bmRzKCk7CiB9CiAKIC0gKE5TUmVj
dClfZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>25204</attachid>
            <date>2008-11-16 18:18:45 -0800</date>
            <delta_ts>2008-11-16 18:18:45 -0800</delta_ts>
            <desc>Testcase for arrow key navigation with transforms</desc>
            <filename>arrow-navigation.html</filename>
            <type>text/html</type>
            <size>973</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFs
Ly9FTiIKICAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cgo8aHRtbCBs
YW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVu
dD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KICA8dGl0bGU+UmVzaXplIEhhbmRsaW5nPC90
aXRsZT4KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgogICAgYm9keSB7
CiAgICAgIGhlaWdodDogODAwcHg7CiAgICB9CiAgICAKICAgICNjb250YWluZXIgewogICAgICB3
aWR0aDogMzAwcHg7CiAgICAgIG1hcmdpbi10b3A6IDIwMHB4OwogICAgICAtd2Via2l0LXRyYW5z
Zm9ybTogcm90YXRlKDQ1ZGVnKTsKICAgIH0KICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoKPGRp
diBpZD0iY29udGFpbmVyIiBjb250ZW50ZWRpdGFibGU9InRydWUiPgogIExvcmVtIGlwc3VtIGRv
bG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21v
ZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gVXQg
ZW5pbSBhZCBtaW5pbSB2ZW5pYW0sIHF1aXMgbm9zdHJ1ZCBleGVyY2l0YXRpb24gdWxsYW1jbyBs
YWJvcmlzIG5pc2kgdXQgYWxpcXVpcCBleCBlYSBjb21tb2RvIGNvbnNlcXVhdC4gRHVpcyBhdXRl
IGlydXJlIGRvbG9yIGluIHJlcHJlaGVuZGVyaXQgaW4gdm9sdXB0YXRlIHZlbGl0IGVzc2UgY2ls
bHVtIGRvbG9yZSBldSBmdWdpYXQgbnVsbGEgcGFyaWF0dXIuIEV4Y2VwdGV1ciBzaW50IG9jY2Fl
Y2F0IGN1cGlkYXRhdCBub24gcHJvaWRlbnQsIHN1bnQgaW4gY3VscGEgcXVpIG9mZmljaWEgZGVz
ZXJ1bnQgbW9sbGl0IGFuaW0gaWQgZXN0IGxhYm9ydW0uCiAgCjwvZGl2PgoKPC9ib2R5Pgo8L2h0
bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25209</attachid>
            <date>2008-11-16 22:52:59 -0800</date>
            <delta_ts>2008-12-05 09:38:32 -0800</delta_ts>
            <desc>Final patch, doesn&apos;t break arrow navigation</desc>
            <filename>15671_final.txt</filename>
            <type>text/plain</type>
            <size>50572</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwMWM4YjA4Li41N2U0YTNjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDgtMTEt
MTQgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1NjcxCisKKyAgICAgICAgTmV3IGV4cGVjdGVkcyBhZnRlciBm
aXhpbmcgY2FyZXQgZHJhd2luZyBpbiB0cmFuc2Zvcm1lZCBlbGVtZW50cworICAgICAgICAKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC90cmFuc2Zvcm1zL3RyYW5zZm9ybWVkLWZvY3VzZWQt
dGV4dC1pbnB1dC1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFz
dC90cmFuc2Zvcm1zL3RyYW5zZm9ybWVkLWZvY3VzZWQtdGV4dC1pbnB1dC1leHBlY3RlZC5wbmc6
CisKIDIwMDgtMTEtMTYgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL2Zhc3QvdHJhbnNmb3Jtcy90cmFuc2Zvcm1lZC1mb2N1c2VkLXRleHQt
aW5wdXQtZXhwZWN0ZWQuY2hlY2tzdW0gYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC90
cmFuc2Zvcm1zL3RyYW5zZm9ybWVkLWZvY3VzZWQtdGV4dC1pbnB1dC1leHBlY3RlZC5jaGVja3N1
bQppbmRleCA4NGI3MGE0Li40OGVlYTM3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvZmFzdC90cmFuc2Zvcm1zL3RyYW5zZm9ybWVkLWZvY3VzZWQtdGV4dC1pbnB1dC1leHBl
Y3RlZC5jaGVja3N1bQorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC90cmFuc2Zv
cm1zL3RyYW5zZm9ybWVkLWZvY3VzZWQtdGV4dC1pbnB1dC1leHBlY3RlZC5jaGVja3N1bQpAQCAt
MSArMSBAQAotZmE2ZGUyYjZiNzFiMTdlMWY2ZjUwOGJjMjU4ZWExNjUKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCis3ZWIzZGEzNDAzYmI2ZmIwYmIyN2QxZWIxYmYzYmRhNwpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9m
YXN0L3RyYW5zZm9ybXMvdHJhbnNmb3JtZWQtZm9jdXNlZC10ZXh0LWlucHV0LWV4cGVjdGVkLnBu
ZyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L3RyYW5zZm9ybXMvdHJhbnNmb3JtZWQt
Zm9jdXNlZC10ZXh0LWlucHV0LWV4cGVjdGVkLnBuZwppbmRleCA5MWVhNGU0Li5lYTE2ZGY5IDEw
MDY0NApCaW5hcnkgZmlsZXMgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC90cmFuc2Zv
cm1zL3RyYW5zZm9ybWVkLWZvY3VzZWQtdGV4dC1pbnB1dC1leHBlY3RlZC5wbmcgYW5kIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvdHJhbnNmb3Jtcy90cmFuc2Zvcm1lZC1mb2N1c2Vk
LXRleHQtaW5wdXQtZXhwZWN0ZWQucG5nIGRpZmZlcgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxYzcwZjVjLi5jMzM5ZmY4IDEwMDY0NAot
LS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDk2IEBACisyMDA4LTExLTE0ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY3MQorCisgICAgICAgIEZpeCBj
YXJldCByZW5kZXJpbmcgdG8gYmVoYXZlIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXM6CisgICAg
ICAgICogUmVuYW1lIGNhcmV0UmVjdCgpIG1ldGhvZHMgdG8gbG9jYWxDYXJldFJlY3QoKSBhbmQK
KyAgICAgICAgICBhYnNvbHV0ZUNhcmV0Qm91bmRzKCkgYXMgYXBwcm9wcmlhdGUKKyAgICAgICAg
KiBGaXggbG9jYWxDYXJldFJlY3QoKSBtZXRob2RzIHRvIHJldHVybiBhIHJlY3QgaW4gdGhlCisg
ICAgICAgICAgYXBwcm9wcmlhdGUgY29vcmRpbmF0ZXMuCisgICAgICAgICogUGFzcyB0eCwgdHkg
ZG93biB0aHJvdWdoIHRoZSBwYWludENhcmV0KCkgbWV0aG9kcywgYWZ0ZXIgZml4aW5nIHRoZW0K
KyAgICAgICAgICB1cCB0byBhY2NvdW50IGZvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIGNvbnRlbnRz
IGNvb3JkcywgYW5kIHJlbmRlcmVyLWxvY2FsCisgICAgICAgICAgY29vcmRzICh2aWEgUmVuZGVy
QmxvY2s6Om9mZnNldEZvckNvbnRlbnRzKCkpLgorICAgICAgICAqIFJlbW92ZSBtX2NhcmV0UG9z
aXRpb25PbkxheW91dCBmcm9tIFNlbGVjdGlvbkNvbnRyb2xsZXIsIGFuZCBpbnN0ZWFkCisgICAg
ICAgICAgY2FsbCBpbnZhbGlkYXRlU2VsZWN0aW9uKCkgZnJvbSBSZW5kZXJMYXllcjo6c2Nyb2xs
VG9PZmZzZXQoKSwgYmVjYXVzZQorICAgICAgICAgIHdlIGNhbiBubyBsb25nZXIgYXNzdW1lIHNp
bXBsZSB4L3kgb2Zmc2V0cyBmcm9tIHNjcm9sbGluZyB3aXRoIHRyYW5zZm9ybXMuCisgICAgICAg
ICogTW92ZSB0aGUgbG9naWMgdG8gY29tcHV0ZSB3aGljaCBSZW5kZXJPYmplY3QgYWN0dWFsbHkg
cGFpbnRzIHRoZSBjYXJldCBpbnRvCisgICAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlcjo6Y2Fy
ZXRSZW5kZXJlcigpLCByYXRoZXIgdGhhbiBoYXZpbmcgaXQgaW4gUmVuZGVyQmxvY2suCisgICAg
ICAgICogU2VsZWN0aW9uQ29udHJvbGxlciBub3cgY29tcHV0ZXMgYW5kIGNhY2hlcyBhIGxvY2Fs
IGNhcmV0IHJlY3QuIEZvciBpbnZhbGlkYXRpb24sCisgICAgICAgICAgaXQgY29tcHV0ZXMgdGhl
IGFic29sdXRlIGJvdW5kcyBvZiB0aGF0IChwb3NzaWJseSB0cmFuc2Zvcm1lZCkgbG9jYWwgcmVj
dC4KKyAgICAgICAgICBUaGUgbG9jYWwgcmVjdCBpcyBjb21wdXRlZCBpbiB0aGUgY29vcmRpbmF0
ZSBzeXN0ZW0gb2YgdGhlIFJlbmRlck9iamVjdCB0aGF0CisgICAgICAgICAgd2lsbCBwYWludCB0
aGUgY2FyZXQgKHRoaXMgbWF5IHJlcXVpcmUgb2Zmc2V0dGluZyBmcm9tIHRoZSBhY3R1YWwgcmVu
ZGVyZXIKKyAgICAgICAgICBhdCB0aGUgc3RhcnQgb2YgdGhlIHNlbGVjdGlvbikuCisgICAgICAg
ICogRml4IExheW91dFN0YXRlKFJlbmRlck9iamVjdCogcm9vdCkgdG8gdGFrZSB0cmFuc2Zvcm1z
IGludG8gYWNjb3VudAorICAgICAgICAqIE1ha2Ugb2Zmc2V0RnJvbUNvbnRhaW5lcigpIGEgdmly
dHVhbCBtZXRob2Qgb24gUmVuZGVyT2JqZWN0LCBhbmQgaW1wbGVtZW50CisgICAgICAgICAgdGhl
IFJlbmRlck9iamVjdCB2ZXJzaW9uLiBJdCdzIHVzZWQgdG8gbWFwIGZyb20gc2VsZWN0aW9uIHN0
YXJ0IHJlbmRlcmVyCisgICAgICAgICAgdG8gY2FyZXQgcmVuZGVyZXIuCisgICAgICAgICAgCisg
ICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZDo6bWVyZ2VQYXJhZ3JhcGhzKToKKyAgICAgICAgKiBlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6U2VsZWN0aW9u
Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjphYnNvbHV0ZUNhcmV0WSk6CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnkpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6eFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OmxheW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjpjYXJldFJlbmRlcmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OmxvY2FsQ2FyZXRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OmFic29sdXRlQ2FyZXRCb3VuZHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6Y2FyZXRSZXBhaW50UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjpyZWNvbXB1dGVDYXJldFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6aW52YWxpZGF0ZUNhcmV0
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjpwYWludENhcmV0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OmNhcmV0UmVuZGVyc0lu
c2lkZU5vZGUpOgorICAgICAgICAqIGVkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oOgorICAg
ICAgICAqIGVkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZp
c2libGVQb3NpdGlvbjo6bG9jYWxDYXJldFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJs
ZVBvc2l0aW9uOjphYnNvbHV0ZUNhcmV0Qm91bmRzKToKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2li
bGVQb3NpdGlvbi5oOgorICAgICAgICAqIGVkaXRpbmcvbWFjL1NlbGVjdGlvbkNvbnRyb2xsZXJN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjpub3RpZnlBY2Nl
c3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50Ojppc0NvbnRlbnRFZGl0YWJsZSk6
CisgICAgICAgICogcGFnZS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmJvdW5kc0ZvclZpc2libGVQb3Np
dGlvblJhbmdlKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lOjpmaXJzdFJlY3RGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2Vs
ZWN0aW9uTGF5b3V0Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cGFpbnRDYXJl
dCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cGFpbnREcmFnQ2FyZXQpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWU6OnJldmVhbFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZTo6cmV2ZWFsQ2FyZXQpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvTGF5b3V0U3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0U3RhdGU6Okxh
eW91dFN0YXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50Q2FyZXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Ojpwb3NpdGlvbkZvckNvb3JkaW5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpvZmZzZXRGb3JDb250ZW50cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRmxvdzo6bG9jYWxDYXJldFJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJGbG93Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om9m
ZnNldEZyb21Db250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpsb2Nh
bENhcmV0UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR0lubGluZVRleHQ6OmxvY2FsQ2FyZXRSZWN0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OlJlbmRlclRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6bG9jYWxDYXJldFJlY3QpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUZXh0Lmg6CisKIDIwMDgtMTEtMTYgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZy
YXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2Uu
ZXhwCmluZGV4IGE4OGE2ZGYuLjgxZTI4MGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5i
YXNlLmV4cAorKysgYi9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKQEAgLTc2Nyw3ICs3NjcsOCBA
QCBfX1pOSzdXZWJDb3JlMTVSZXNvdXJjZVJlcXVlc3QxMm5zVVJMUmVxdWVzdEV2CiBfX1pOSzdX
ZWJDb3JlMTVWaXNpYmxlUG9zaXRpb24xNGNoYXJhY3RlckFmdGVyRXYKIF9fWk5LN1dlYkNvcmUx
NVZpc2libGVQb3NpdGlvbjRuZXh0RWIKIF9fWk5LN1dlYkNvcmUxNVZpc2libGVQb3NpdGlvbjhw
cmV2aW91c0ViCi1fX1pOSzdXZWJDb3JlMTVWaXNpYmxlUG9zaXRpb245Y2FyZXRSZWN0RXYKK19f
Wk5LN1dlYkNvcmUxNVZpc2libGVQb3NpdGlvbjE0bG9jYWxDYXJldFJlY3RFUlBOU18xMlJlbmRl
ck9iamVjdEUKK19fWk5LN1dlYkNvcmUxNVZpc2libGVQb3NpdGlvbjE5YWJzb2x1dGVDYXJldEJv
dW5kc0V2CiBfX1pOSzdXZWJDb3JlMTZIVE1MSW5wdXRFbGVtZW50MTJhdXRvQ29tcGxldGVFdgog
X19aTks3V2ViQ29yZTE2UmVzb3VyY2VSZXNwb25zZTEzbnNVUkxSZXNwb25zZUV2CiBfX1pOSzdX
ZWJDb3JlMTdSZXNvdXJjZUVycm9yQmFzZThsYXp5SW5pdEV2CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggNTFjOWQ1YS4uMmMyOWM0YyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1dlYkNv
cmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNTc4LDcgKzU3OCw3IEBA
IHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3JhcGhzKCkKICAgICAvLyBU
aGUgcnVsZSBmb3IgbWVyZ2luZyBpbnRvIGFuIGVtcHR5IGJsb2NrIGlzOiBvbmx5IGRvIHNvIGlm
IGl0cyBmYXJ0aGVyIHRvIHRoZSByaWdodC4KICAgICAvLyBGSVhNRTogQ29uc2lkZXIgUlRMLgog
ICAgIC8vIEZJWE1FOiBoYW5kbGVTcGVjaWFsQ2FzZUJSRGVsZXRlIHByZXZlbnRzIHVzIGZyb20g
Z2V0dGluZyBoZXJlIGluIGEgY2FzZSBsaWtlIDx1bD48bGk+Zm9vPGJyPjxicj48L2xpPjwvdWw+
XmZvbwotICAgIGlmIChpc1N0YXJ0T2ZQYXJhZ3JhcGgobWVyZ2VEZXN0aW5hdGlvbikgJiYgc3Rh
cnRPZlBhcmFncmFwaFRvTW92ZS5jYXJldFJlY3QoKS54KCkgPiBtZXJnZURlc3RpbmF0aW9uLmNh
cmV0UmVjdCgpLngoKSkgeworICAgIGlmIChpc1N0YXJ0T2ZQYXJhZ3JhcGgobWVyZ2VEZXN0aW5h
dGlvbikgJiYgc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkueCgp
ID4gbWVyZ2VEZXN0aW5hdGlvbi5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkueCgpKSB7CiAgICAgICAg
IEFTU0VSVChtZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpLm5v
ZGUoKS0+aGFzVGFnTmFtZShiclRhZykpOwogICAgICAgICByZW1vdmVOb2RlQW5kUHJ1bmVBbmNl
c3RvcnMobWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKS5ub2Rl
KCkpOwogICAgICAgICBtX2VuZGluZ1Bvc2l0aW9uID0gc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5k
ZWVwRXF1aXZhbGVudCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNv
bnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCmlu
ZGV4IDg5ZGFmMzMuLjBkM2RhM2QgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rp
b25Db250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxl
ci5jcHAKQEAgLTYyLDEyICs2MiwxMyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogY29u
c3QgaW50IE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uID0gSU5UX01JTjsKIAogU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6U2VsZWN0aW9uQ29udHJvbGxlcihGcmFtZSogZnJhbWUsIGJvb2wg
aXNEcmFnQ2FyZXRDb250cm9sbGVyKQotICAgIDogbV9uZWVkc0xheW91dCh0cnVlKQorICAgIDog
bV9mcmFtZShmcmFtZSkKKyAgICAsIG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKE5v
WFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKQorICAgICwgbV9uZWVkc0xheW91dCh0cnVl
KQorICAgICwgbV9hYnNDYXJldEJvdW5kc0RpcnR5KHRydWUpCiAgICAgLCBtX2xhc3RDaGFuZ2VX
YXNIb3Jpem9udGFsRXh0ZW5zaW9uKGZhbHNlKQotICAgICwgbV9mcmFtZShmcmFtZSkKICAgICAs
IG1faXNEcmFnQ2FyZXRDb250cm9sbGVyKGlzRHJhZ0NhcmV0Q29udHJvbGxlcikKICAgICAsIG1f
aXNDYXJldEJsaW5raW5nU3VzcGVuZGVkKGZhbHNlKQotICAgICwgbV94UG9zRm9yVmVydGljYWxB
cnJvd05hdmlnYXRpb24oTm9YUG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24pCiAgICAgLCBt
X2ZvY3VzZWQoZmFsc2UpCiB7CiB9CkBAIC01NTIsOSArNTUzLDkgQEAgYm9vbCBTZWxlY3Rpb25D
b250cm9sbGVyOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIEVEaXJlY3Rpb24gZGlyLCBUZXh0
R3JhbnVsYXIKIH0KIAogLy8gRklYTUU6IE1heWJlIGJhc2VsaW5lIHdvdWxkIGJlIGJldHRlcj8K
LXN0YXRpYyBib29sIGNhcmV0WShjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMsIGludCAmeSkKK3N0
YXRpYyBib29sIGFic29sdXRlQ2FyZXRZKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYywgaW50ICZ5
KQogewotICAgIEludFJlY3QgcmVjdCA9IGMuY2FyZXRSZWN0KCk7CisgICAgSW50UmVjdCByZWN0
ID0gYy5hYnNvbHV0ZUNhcmV0Qm91bmRzKCk7CiAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgeSA9IHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAvIDI7
CkBAIC01OTgsNyArNTk5LDcgQEAgYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnkoRUFs
dGVyYXRpb24gYWx0ZXIsIGludCB2ZXJ0aWNhbERpc3RhbmNlLCBib29sIHUKICAgICB9CiAKICAg
ICBpbnQgc3RhcnRZOwotICAgIGlmICghY2FyZXRZKHBvcywgc3RhcnRZKSkKKyAgICBpZiAoIWFi
c29sdXRlQ2FyZXRZKHBvcywgc3RhcnRZKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlm
ICh1cCkKICAgICAgICAgc3RhcnRZID0gLXN0YXJ0WTsKQEAgLTYxMSw3ICs2MTIsNyBAQCBib29s
IFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgaW50IHZlcnRp
Y2FsRGlzdGFuY2UsIGJvb2wgdQogICAgICAgICBpZiAobmV4dC5pc051bGwoKSB8fCBuZXh0ID09
IHApCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaW50IG5leHRZOwotICAgICAgICBpZiAo
IWNhcmV0WShuZXh0LCBuZXh0WSkpCisgICAgICAgIGlmICghYWJzb2x1dGVDYXJldFkobmV4dCwg
bmV4dFkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmICh1cCkKICAgICAgICAgICAg
IG5leHRZID0gLW5leHRZOwpAQCAtNjgyLDcgKzY4Myw3IEBAIGludCBTZWxlY3Rpb25Db250cm9s
bGVyOjp4UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oRVBvc2l0aW9uVHlwZSB0eXBlKQog
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uKHBvcywgbV9zZWwuYWZmaW5p
dHkoKSk7CiAgICAgICAgIC8vIFZpc2libGVQb3NpdGlvbiBjcmVhdGlvbiBjYW4gZmFpbCBoZXJl
IGlmIGEgbm9kZSBjb250YWluaW5nIHRoZSBzZWxlY3Rpb24gYmVjb21lcyB2aXNpYmlsaXR5Omhp
ZGRlbgogICAgICAgICAvLyBhZnRlciB0aGUgc2VsZWN0aW9uIGlzIGNyZWF0ZWQgYW5kIGJlZm9y
ZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KLSAgICAgICAgeCA9IHZpc2libGVQb3NpdGlvbi5p
c05vdE51bGwoKSA/IHZpc2libGVQb3NpdGlvbi5jYXJldFJlY3QoKS54KCkgOiAwOworICAgICAg
ICB4ID0gdmlzaWJsZVBvc2l0aW9uLmlzTm90TnVsbCgpID8gdmlzaWJsZVBvc2l0aW9uLnhPZmZz
ZXRGb3JWZXJ0aWNhbE5hdmlnYXRpb24oKSA6IDA7CiAgICAgICAgIG1feFBvc0ZvclZlcnRpY2Fs
QXJyb3dOYXZpZ2F0aW9uID0geDsKICAgICB9CiAgICAgZWxzZQpAQCAtNzI1LDQzICs3MjYsNzkg
QEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpsYXlvdXQoKQogewogICAgIGlmIChpc05vbmUo
KSB8fCAhbV9zZWwuc3RhcnQoKS5ub2RlKCktPmluRG9jdW1lbnQoKSB8fCAhbV9zZWwuZW5kKCku
bm9kZSgpLT5pbkRvY3VtZW50KCkpIHsKICAgICAgICAgbV9jYXJldFJlY3QgPSBJbnRSZWN0KCk7
Ci0gICAgICAgIG1fY2FyZXRQb3NpdGlvbk9uTGF5b3V0ID0gSW50UG9pbnQoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIG1fc2VsLnN0YXJ0KCkubm9kZSgpLT5kb2N1bWVudCgpLT51
cGRhdGVSZW5kZXJpbmcoKTsKICAgICAKICAgICBtX2NhcmV0UmVjdCA9IEludFJlY3QoKTsKLSAg
ICBtX2NhcmV0UG9zaXRpb25PbkxheW91dCA9IEludFBvaW50KCk7CiAgICAgICAgIAogICAgIGlm
IChpc0NhcmV0KCkpIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhtX3NlbC5zdGFydCgp
LCBtX3NlbC5hZmZpbml0eSgpKTsKICAgICAgICAgaWYgKHBvcy5pc05vdE51bGwoKSkgewogICAg
ICAgICAgICAgQVNTRVJUKHBvcy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+cmVuZGVyZXIoKSk7
Ci0gICAgICAgICAgICBtX2NhcmV0UmVjdCA9IHBvcy5jYXJldFJlY3QoKTsKLQotICAgICAgICAg
ICAgLy8gRklYTUU6IGJyb2tlbiB3aXRoIHRyYW5zZm9ybXMKLSAgICAgICAgICAgIEZsb2F0UG9p
bnQgYWJzUG9zID0gcG9zLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5yZW5kZXJlcigpLT5sb2Nh
bFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQoKSk7Ci0gICAgICAgICAgICBtX2NhcmV0
UG9zaXRpb25PbkxheW91dCA9IHJvdW5kZWRJbnRQb2ludChhYnNQb3MpOworICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBGaXJzdCBjb21wdXRlIGEgcmVjdCBsb2NhbCB0byB0aGUgcmVuZGVy
ZSBhdCB0aGUgc2VsZWN0aW9uIHN0YXJ0CisgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyOworICAgICAgICAgICAgSW50UmVjdCBsb2NhbFJlY3QgPSBwb3MubG9jYWxDYXJldFJlY3Qo
cmVuZGVyZXIpOworCisgICAgICAgICAgICAvLyBHZXQgdGhlIHJlbmRlcmVyIHRoYXQgd2lsbCBi
ZSByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgdGhlIGNhcmV0ICh3aGljaAorICAgICAgICAgICAg
Ly8gaXMgZWl0aGVyIHRoZSByZW5kZXJlciB3ZSBqdXN0IGZvdW5kLCBvciBvbmUgb2YgaXRzIGNv
bnRhaW5lcnMpCisgICAgICAgICAgICBSZW5kZXJPYmplY3QqIGNhcmV0UGFpbnRlciA9IGNhcmV0
UmVuZGVyZXIoKTsKKworICAgICAgICAgICAgLy8gQ29tcHV0ZSBhbiBvZmZzZXQgYmV0d2VlbiB0
aGUgcmVuZGVyZXIgYW5kIHRoZSBjYXJldFBhaW50ZXIKKyAgICAgICAgICAgIEludFNpemUgb2Zm
c2V0RnJvbVBhaW50ZXI7CisgICAgICAgICAgICBib29sIHVucm9vdGVkID0gZmFsc2U7CisgICAg
ICAgICAgICB3aGlsZSAocmVuZGVyZXIgIT0gY2FyZXRQYWludGVyKSB7CisgICAgICAgICAgICAg
ICAgUmVuZGVyT2JqZWN0KiBjb250YWluZXJPYmplY3QgPSByZW5kZXJlci0+Y29udGFpbmVyKCk7
CisgICAgICAgICAgICAgICAgaWYgKCFjb250YWluZXJPYmplY3QpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdW5yb290ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb2Zmc2V0RnJvbVBhaW50ZXIgKz0gcmVuZGVy
ZXItPm9mZnNldEZyb21Db250YWluZXIoY29udGFpbmVyT2JqZWN0KTsKKyAgICAgICAgICAgICAg
ICByZW5kZXJlciA9IGNvbnRhaW5lck9iamVjdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKCF1bnJvb3RlZCkgeworICAgICAgICAgICAgICAgIC8vIE1vdmUg
dGhlIGNhcmV0IHJlY3QgdG8gdGhlIGNvb3JkcyBvZiB0aGUgcGFpbnRlcgorICAgICAgICAgICAg
ICAgIGxvY2FsUmVjdC5tb3ZlKG9mZnNldEZyb21QYWludGVyKTsKKyAgICAgICAgICAgICAgICBt
X2NhcmV0UmVjdCA9IGxvY2FsUmVjdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV9hYnNDYXJldEJvdW5kc0RpcnR5ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0K
IAogICAgIG1fbmVlZHNMYXlvdXQgPSBmYWxzZTsKIH0KIAotSW50UmVjdCBTZWxlY3Rpb25Db250
cm9sbGVyOjpjYXJldFJlY3QoKSBjb25zdAorUmVuZGVyT2JqZWN0KiBTZWxlY3Rpb25Db250cm9s
bGVyOjpjYXJldFJlbmRlcmVyKCkgY29uc3QKK3sKKyAgICBOb2RlKiBub2RlID0gbV9zZWwuc3Rh
cnQoKS5ub2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVy
ZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gaWYgY2FyZXROb2RlIGlzIGEgYmxvY2sg
YW5kIGNhcmV0IGlzIGluc2lkZSBpdCB0aGVuIGNhcmV0IHNob3VsZCBiZSBwYWludGVkIGJ5IHRo
YXQgYmxvY2sKKyAgICBib29sIHBhaW50ZWRCeUJsb2NrID0gcmVuZGVyZXItPmlzQmxvY2tGbG93
KCkgJiYgY2FyZXRSZW5kZXJzSW5zaWRlTm9kZShub2RlKTsKKyAgICByZXR1cm4gcGFpbnRlZEJ5
QmxvY2sgPyByZW5kZXJlciA6IHJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKTsKK30KKworSW50
UmVjdCBTZWxlY3Rpb25Db250cm9sbGVyOjpsb2NhbENhcmV0UmVjdCgpIGNvbnN0CiB7CiAgICAg
aWYgKG1fbmVlZHNMYXlvdXQpCiAgICAgICAgIGNvbnN0X2Nhc3Q8U2VsZWN0aW9uQ29udHJvbGxl
ciAqPih0aGlzKS0+bGF5b3V0KCk7CiAgICAgCi0gICAgSW50UmVjdCBjYXJldCA9IG1fY2FyZXRS
ZWN0OwotCi0gICAgaWYgKG1fc2VsLnN0YXJ0KCkubm9kZSgpICYmIG1fc2VsLnN0YXJ0KCkubm9k
ZSgpLT5yZW5kZXJlcigpKSB7Ci0gICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbV9zZWwuc3Rh
cnQoKS5ub2RlKCktPnJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQ
b2ludCgpKTsKLSAgICAgICAgY2FyZXQubW92ZShyb3VuZGVkSW50UG9pbnQoYWJzUG9zKSAtIG1f
Y2FyZXRQb3NpdGlvbk9uTGF5b3V0KTsKLSAgICB9CisgICAgcmV0dXJuIG1fY2FyZXRSZWN0Owor
fQogCi0gICAgcmV0dXJuIGNhcmV0OworSW50UmVjdCBTZWxlY3Rpb25Db250cm9sbGVyOjphYnNv
bHV0ZUNhcmV0Qm91bmRzKCkKK3sKKyAgICByZWNvbXB1dGVDYXJldFJlY3QoKTsKKyAgICByZXR1
cm4gbV9hYnNDYXJldEJvdW5kczsKIH0KIAogc3RhdGljIEludFJlY3QgcmVwYWludFJlY3RGb3JD
YXJldChJbnRSZWN0IGNhcmV0KQpAQCAtNzc2LDcgKzgxMywxMyBAQCBzdGF0aWMgSW50UmVjdCBy
ZXBhaW50UmVjdEZvckNhcmV0KEludFJlY3QgY2FyZXQpCiAKIEludFJlY3QgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6Y2FyZXRSZXBhaW50UmVjdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHJlcGFpbnRS
ZWN0Rm9yQ2FyZXQoY2FyZXRSZWN0KCkpOworICAgIEludFJlY3QgbG9jYWxSZWN0ID0gcmVwYWlu
dFJlY3RGb3JDYXJldChsb2NhbENhcmV0UmVjdCgpKTsKKyAgICAKKyAgICBSZW5kZXJPYmplY3Qq
IGNhcmV0UGFpbnRlciA9IGNhcmV0UmVuZGVyZXIoKTsKKyAgICBpZiAoY2FyZXRQYWludGVyKQor
ICAgICAgICByZXR1cm4gY2FyZXRQYWludGVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVj
dChsb2NhbFJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOworCisgICAgcmV0dXJuIEludFJl
Y3QoKTsKIH0KIAogYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjpyZWNvbXB1dGVDYXJldFJlY3Qo
KQpAQCAtNzkzLDE0ICs4MzYsMjIgQEAgYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjpyZWNvbXB1
dGVDYXJldFJlY3QoKQogCiAgICAgSW50UmVjdCBvbGRSZWN0ID0gbV9jYXJldFJlY3Q7CiAgICAg
bV9uZWVkc0xheW91dCA9IHRydWU7Ci0gICAgSW50UmVjdCBuZXdSZWN0ID0gY2FyZXRSZWN0KCk7
Ci0gICAgaWYgKG9sZFJlY3QgPT0gbmV3UmVjdCkKKyAgICBJbnRSZWN0IG5ld1JlY3QgPSBsb2Nh
bENhcmV0UmVjdCgpOworICAgIGlmIChvbGRSZWN0ID09IG5ld1JlY3QgJiYgIW1fYWJzQ2FyZXRC
b3VuZHNEaXJ0eSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgSW50UmVjdCBvbGRBYnNS
ZXBhaW50UmVjdCA9IG1fYWJzQ2FyZXRCb3VuZHM7CisgICAgbV9hYnNDYXJldEJvdW5kcyA9IGNh
cmV0UmVwYWludFJlY3QoKTsKKyAgICBtX2Fic0NhcmV0Qm91bmRzRGlydHkgPSBmYWxzZTsKKyAg
ICAKKyAgICBpZiAob2xkQWJzUmVwYWludFJlY3QgPT0gbV9hYnNDYXJldEJvdW5kcykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAogICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gc3RhdGlj
X2Nhc3Q8UmVuZGVyVmlldyo+KG1fZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlcmVyKCkpKSB7Ci0g
ICAgICAgIHZpZXctPnJlcGFpbnRWaWV3UmVjdGFuZ2xlKHJlcGFpbnRSZWN0Rm9yQ2FyZXQob2xk
UmVjdCksIGZhbHNlKTsKLSAgICAgICAgdmlldy0+cmVwYWludFZpZXdSZWN0YW5nbGUocmVwYWlu
dFJlY3RGb3JDYXJldChuZXdSZWN0KSwgZmFsc2UpOworICAgICAgICB2aWV3LT5yZXBhaW50Vmll
d1JlY3RhbmdsZShvbGRBYnNSZXBhaW50UmVjdCwgZmFsc2UpOworICAgICAgICB2aWV3LT5yZXBh
aW50Vmlld1JlY3RhbmdsZShtX2Fic0NhcmV0Qm91bmRzLCBmYWxzZSk7CiAgICAgfQorCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKQEAgLTgxMSw2ICs4NjIsOCBAQCB2b2lkIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OmludmFsaWRhdGVDYXJldFJlY3QoKQogCiAgICAgRG9jdW1lbnQqIGQgPSBtX3NlbC5z
dGFydCgpLm5vZGUoKS0+ZG9jdW1lbnQoKTsKIAorICAgIC8vIHJlY29tcHV0ZUNhcmV0UmVjdCB3
aWxsIGFsd2F5cyByZXR1cm4gZmFsc2UgZm9yIHRoZSBkcmFnIGNhcmV0LAorICAgIC8vIGJlY2F1
c2UgaXQncyBtX2ZyYW1lIGlzIGFsd2F5cyAwLgogICAgIGJvb2wgY2FyZXRSZWN0Q2hhbmdlZCA9
IHJlY29tcHV0ZUNhcmV0UmVjdCgpOwogCiAgICAgLy8gRURJVCBGSVhNRTogVGhpcyBpcyBhbiB1
bmZvcnR1bmF0ZSBoYWNrLgpAQCAtODMyLDE1ICs4ODUsMTcgQEAgdm9pZCBTZWxlY3Rpb25Db250
cm9sbGVyOjppbnZhbGlkYXRlQ2FyZXRSZWN0KCkKICAgICB9CiB9CiAKLXZvaWQgU2VsZWN0aW9u
Q29udHJvbGxlcjo6cGFpbnRDYXJldChHcmFwaGljc0NvbnRleHQgKnAsIGNvbnN0IEludFJlY3Qg
JnJlY3QpCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnBhaW50Q2FyZXQoR3JhcGhpY3NDb250
ZXh0KiBwLCBpbnQgdHgsIGludCB0eSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCiB7CiAgICAg
aWYgKCEgbV9zZWwuaXNDYXJldCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9uZWVk
c0xheW91dCkKICAgICAgICAgbGF5b3V0KCk7Ci0gICAgICAgIAotICAgIEludFJlY3QgY2FyZXQg
PSBpbnRlcnNlY3Rpb24oY2FyZXRSZWN0KCksIHJlY3QpOworCisgICAgSW50UmVjdCBkcmF3aW5n
UmVjdCA9IGxvY2FsQ2FyZXRSZWN0KCk7CisgICAgZHJhd2luZ1JlY3QubW92ZSh0eCwgdHkpOwor
ICAgIEludFJlY3QgY2FyZXQgPSBpbnRlcnNlY3Rpb24oZHJhd2luZ1JlY3QsIGNsaXBSZWN0KTsK
ICAgICBpZiAoIWNhcmV0LmlzRW1wdHkoKSkgewogICAgICAgICBDb2xvciBjYXJldENvbG9yID0g
Q29sb3I6OmJsYWNrOwogICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gcm9vdEVkaXRhYmxlRWxl
bWVudCgpOwpAQCAtMTA5MSwxMiArMTE0NiwxMSBAQCBib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OmlzSW5QYXNzd29yZEZpZWxkKCkgY29uc3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudCo+KHN0YXJ0Tm9kZSktPmlucHV0VHlwZSgpID09IEhUTUxJbnB1dEVsZW1lbnQ6
OlBBU1NXT1JEOwogfQogCi1ib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmlzSW5zaWRlTm9kZSgp
IGNvbnN0Citib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNhcmV0UmVuZGVyc0luc2lkZU5vZGUo
Tm9kZSogbm9kZSkgY29uc3QKIHsKLSAgICBOb2RlKiBzdGFydE5vZGUgPSBzdGFydCgpLm5vZGUo
KTsKLSAgICBpZiAoIXN0YXJ0Tm9kZSkKKyAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICByZXR1cm4gIWlzVGFibGVFbGVtZW50KHN0YXJ0Tm9kZSkgJiYgIWVkaXRpbmdJ
Z25vcmVzQ29udGVudChzdGFydE5vZGUpOworICAgIHJldHVybiAhaXNUYWJsZUVsZW1lbnQobm9k
ZSkgJiYgIWVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKTsKIH0KIAogdm9pZCBTZWxlY3Rpb25D
b250cm9sbGVyOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKQpAQCAtMTE1Myw3ICsxMjA3
LDcgQEAgYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjppc0ZvY3VzZWRBbmRBY3RpdmUoKSBjb25z
dAogewogICAgIHJldHVybiBtX2ZvY3VzZWQgJiYgbV9mcmFtZS0+cGFnZSgpICYmIG1fZnJhbWUt
PnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCk7CiB9Ci0gIAorCiAjaWZuZGVm
IE5ERUJVRwogCiB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmZvcm1hdEZvckRlYnVnZ2VyKGNo
YXIqIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9l
ZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25D
b250cm9sbGVyLmgKaW5kZXggYmE4OTY3MC4uMGM2MjcwZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9l
ZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0
aW9uQ29udHJvbGxlci5oCkBAIC04NSw3ICs4NSwxMyBAQCBwdWJsaWM6CiAgICAgUG9zaXRpb24g
c3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3NlbC5zdGFydCgpOyB9CiAgICAgUG9zaXRpb24gZW5k
KCkgY29uc3QgeyByZXR1cm4gbV9zZWwuZW5kKCk7IH0KIAotICAgIEludFJlY3QgY2FyZXRSZWN0
KCkgY29uc3Q7CisgICAgLy8gUmV0dXJuIHRoZSByZW5kZXJlciB0aGF0IGlzIHJlc3BvbnNpYmxl
IGZvciBwYWludGluZyB0aGUgY2FyZXQgKGluIHRoZSBzZWxlY3Rpb24gc3RhcnQgbm9kZSkKKyAg
ICBSZW5kZXJPYmplY3QqIGNhcmV0UmVuZGVyZXIoKSBjb25zdDsKKworICAgIC8vIENhcmV0IHJl
Y3QgbG9jYWwgdG8gdGhlIGNhcmV0J3MgcmVuZGVyZXIKKyAgICBJbnRSZWN0IGxvY2FsQ2FyZXRS
ZWN0KCkgY29uc3Q7CisgICAgLy8gQm91bmRzIG9mIChwb3NzaWJseSB0cmFuc2Zvcm1lZCkgY2Fy
ZXQgaW4gYWJzb2x1dGUgY29vcmRzCisgICAgSW50UmVjdCBhYnNvbHV0ZUNhcmV0Qm91bmRzKCk7
CiAgICAgdm9pZCBzZXROZWVkc0xheW91dChib29sIGZsYWcgPSB0cnVlKTsKIAogICAgIHZvaWQg
c2V0TGFzdENoYW5nZVdhc0hvcml6b250YWxFeHRlbnNpb24oYm9vbCBiKSB7IG1fbGFzdENoYW5n
ZVdhc0hvcml6b250YWxFeHRlbnNpb24gPSBiOyB9CkBAIC05Niw3ICsxMDIsNiBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc1JhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9zZWwuaXNSYW5nZSgpOyB9CiAg
ICAgYm9vbCBpc0NhcmV0T3JSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsLmlzQ2FyZXRPclJh
bmdlKCk7IH0KICAgICBib29sIGlzSW5QYXNzd29yZEZpZWxkKCkgY29uc3Q7Ci0gICAgYm9vbCBp
c0luc2lkZU5vZGUoKSBjb25zdDsKICAgICAKICAgICBQYXNzUmVmUHRyPFJhbmdlPiB0b1Jhbmdl
KCkgY29uc3QgeyByZXR1cm4gbV9zZWwudG9SYW5nZSgpOyB9CiAKQEAgLTEwNiw3ICsxMTEsNyBA
QCBwdWJsaWM6CiAKICAgICBib29sIHJlY29tcHV0ZUNhcmV0UmVjdCgpOyAvLyByZXR1cm5zIHRy
dWUgaWYgY2FyZXQgcmVjdCBtb3ZlZAogICAgIHZvaWQgaW52YWxpZGF0ZUNhcmV0UmVjdCgpOwot
ICAgIHZvaWQgcGFpbnRDYXJldChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7Cisg
ICAgdm9pZCBwYWludENhcmV0KEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5LCBjb25z
dCBJbnRSZWN0JiBjbGlwUmVjdCk7CiAKICAgICAvLyBVc2VkIHRvIHN1c3BlbmQgY2FyZXQgYmxp
bmtpbmcgd2hpbGUgdGhlIG1vdXNlIGlzIGRvd24uCiAgICAgdm9pZCBzZXRDYXJldEJsaW5raW5n
U3VzcGVuZGVkKGJvb2wgc3VzcGVuZGVkKSB7IG1faXNDYXJldEJsaW5raW5nU3VzcGVuZGVkID0g
c3VzcGVuZGVkOyB9CkBAIC0xNDQsMjUgKzE0OSwyMyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAg
ICB2b2lkIGZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpOworICAgIGJvb2wgY2FyZXRSZW5k
ZXJzSW5zaWRlTm9kZShOb2RlKikgY29uc3Q7CisKKyAgICBGcmFtZSogbV9mcmFtZTsKKyAgICBp
bnQgbV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb247CiAKICAgICBTZWxlY3Rpb24gbV9z
ZWw7CiAKLSAgICBJbnRSZWN0IG1fY2FyZXRSZWN0OyAgICAgICAgICAgIC8vIGNhcmV0IGNvb3Jk
aW5hdGVzLCBzaXplLCBhbmQgcG9zaXRpb24KLSAgICAKLSAgICAvLyBtX2NhcmV0UG9zaXRpb25P
bkxheW91dCBzdG9yZXMgdGhlIHNjcm9sbCBvZmZzZXQgb24gdGhlIHByZXZpb3VzIGNhbGwgdG8g
U2VsZWN0aW9uQ29udHJvbGxlcjo6bGF5b3V0KCkuCi0gICAgLy8gV2hlbiBhc2tlZCBmb3IgY2Fy
ZXRSZWN0KCksIHdlIGNvcnJlY3QgbV9jYXJldFJlY3QgZm9yIG9mZnNldCBkdWUgdG8gc2Nyb2xs
aW5nIHNpbmNlIHRoZSBsYXN0IGxheW91dCgpLgotICAgIC8vIFRoaXMgaXMgZmFzdGVyIHRoYW4g
ZG9pbmcgYW5vdGhlciBsYXlvdXQoKS4KLSAgICBJbnRQb2ludCBtX2NhcmV0UG9zaXRpb25Pbkxh
eW91dDsKKyAgICBJbnRSZWN0IG1fY2FyZXRSZWN0OyAgICAgICAgLy8gY2FyZXQgcmVjdCBpbiBj
b29yZHMgbG9jYWwgdG8gdGhlIHJlbmRlcmVyIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyB0aGUg
Y2FyZXQKKyAgICBJbnRSZWN0IG1fYWJzQ2FyZXRCb3VuZHM7ICAgLy8gYWJzb2x1dGUgYm91bmRp
bmcgcmVjdCBmb3IgdGhlIGNhcmV0CiAgICAgCiAgICAgYm9vbCBtX25lZWRzTGF5b3V0IDogMTsg
ICAgICAgLy8gdHJ1ZSBpZiB0aGUgY2FyZXQgYW5kIGV4cGVjdGVkVmlzaWJsZSByZWN0YW5nbGVz
IG5lZWQgdG8gYmUgY2FsY3VsYXRlZAorICAgIGJvb2wgbV9hYnNDYXJldEJvdW5kc0RpcnR5OiAx
OwogICAgIGJvb2wgbV9sYXN0Q2hhbmdlV2FzSG9yaXpvbnRhbEV4dGVuc2lvbiA6IDE7Ci0gICAg
RnJhbWUqIG1fZnJhbWU7Ci0gICAgYm9vbCBtX2lzRHJhZ0NhcmV0Q29udHJvbGxlcjsKKyAgICBi
b29sIG1faXNEcmFnQ2FyZXRDb250cm9sbGVyIDogMTsKKyAgICBib29sIG1faXNDYXJldEJsaW5r
aW5nU3VzcGVuZGVkIDogMTsKKyAgICBib29sIG1fZm9jdXNlZCA6IDE7CiAKLSAgICBib29sIG1f
aXNDYXJldEJsaW5raW5nU3VzcGVuZGVkOwotICAgIAotICAgIGludCBtX3hQb3NGb3JWZXJ0aWNh
bEFycm93TmF2aWdhdGlvbjsKLSAgICBib29sIG1fZm9jdXNlZDsKIH07CiAKIGlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciYgYSwgY29uc3QgU2VsZWN0aW9u
Q29udHJvbGxlciYgYikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRp
b24uY3BwIGIvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKaW5kZXggNjI2YzVi
NC4uOWVjYzRkOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5j
cHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKQEAgLTI5LDYgKzI5
LDcgQEAKICNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
QEAgLTUyMywxMyArNTI0LDE1IEBAIFVDaGFyIFZpc2libGVQb3NpdGlvbjo6Y2hhcmFjdGVyQWZ0
ZXIoKSBjb25zdAogICAgIHJldHVybiB0ZXh0Tm9kZS0+ZGF0YSgpW29mZnNldF07CiB9CiAKLUlu
dFJlY3QgVmlzaWJsZVBvc2l0aW9uOjpjYXJldFJlY3QoKSBjb25zdAorSW50UmVjdCBWaXNpYmxl
UG9zaXRpb246OmxvY2FsQ2FyZXRSZWN0KFJlbmRlck9iamVjdComIHJlbmRlcmVyKSBjb25zdAog
ewogICAgIE5vZGUqIG5vZGUgPSBtX2RlZXBQb3NpdGlvbi5ub2RlKCk7Ci0gICAgaWYgKCFub2Rl
KQorICAgIGlmICghbm9kZSkgeworICAgICAgICByZW5kZXJlciA9IDA7CiAgICAgICAgIHJldHVy
biBJbnRSZWN0KCk7Ci0KLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVy
ZXIoKTsKKyAgICB9CisgICAgCisgICAgcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAg
IGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKQEAgLTU0MCw3ICs1
NDMsMzAgQEAgSW50UmVjdCBWaXNpYmxlUG9zaXRpb246OmNhcmV0UmVjdCgpIGNvbnN0CiAgICAg
aWYgKGlubGluZUJveCkKICAgICAgICAgcmVuZGVyZXIgPSBpbmxpbmVCb3gtPm9iamVjdCgpOwog
Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5jYXJldFJlY3QoaW5saW5lQm94LCBjYXJldE9mZnNldCk7
CisgICAgcmV0dXJuIHJlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChpbmxpbmVCb3gsIGNhcmV0T2Zm
c2V0KTsKK30KKworSW50UmVjdCBWaXNpYmxlUG9zaXRpb246OmFic29sdXRlQ2FyZXRCb3VuZHMo
KSBjb25zdAoreworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXI7CisgICAgSW50UmVjdCBsb2Nh
bFJlY3QgPSBsb2NhbENhcmV0UmVjdChyZW5kZXJlcik7CisgICAgaWYgKGxvY2FsUmVjdC5pc0Vt
cHR5KCkgfHwgIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworCisgICAgcmV0
dXJuIHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChsb2NhbFJlY3QpKS5l
bmNsb3NpbmdCb3VuZGluZ0JveCgpOworfQorCitpbnQgVmlzaWJsZVBvc2l0aW9uOjp4T2Zmc2V0
Rm9yVmVydGljYWxOYXZpZ2F0aW9uKCkgY29uc3QKK3sKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyOworICAgIEludFJlY3QgbG9jYWxSZWN0ID0gbG9jYWxDYXJldFJlY3QocmVuZGVyZXIpOwor
ICAgIGlmIChsb2NhbFJlY3QuaXNFbXB0eSgpIHx8ICFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICAvLyBUaGlzIGlnbm9yZXMgdHJhbnNmb3JtcyBvbiBwdXJwb3NlLCBmb3Igbm93
LiBWZXJ0aWNhbCBuYXZpZ2F0aW9uIGlzIGRvbmUKKyAgICAvLyB3aXRob3V0IGNvbnN1bHRpbmcg
dHJhbnNmb3Jtcywgc28gdGhhdCAndXAnIGluIHRyYW5zZm9ybWVkIHRleHQgaXMgJ3VwJworICAg
IC8vIHJlbGF0aXZlIHRvIHRoZSB0ZXh0LCBub3QgYWJzb2x1dGUgJ3VwJy4KKyAgICByZXR1cm4g
cmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZShsb2NhbFJlY3QubG9jYXRpb24oKSkueCgpOwogfQog
CiB2b2lkIFZpc2libGVQb3NpdGlvbjo6ZGVidWdQb3NpdGlvbihjb25zdCBjaGFyKiBtc2cpIGNv
bnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmggYi9XZWJD
b3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgKaW5kZXggNzlmM2E1Ny4uNDAzYzgxNiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCisrKyBiL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaApAQCAtOTAsOCArOTAsMTQgQEAgcHVibGljOgogICAg
ICAgICBtX2RlZXBQb3NpdGlvbi5nZXRJbmxpbmVCb3hBbmRPZmZzZXQobV9hZmZpbml0eSwgcHJp
bWFyeURpcmVjdGlvbiwgaW5saW5lQm94LCBjYXJldE9mZnNldCk7CiAgICAgfQogCi0gICAgSW50
UmVjdCBjYXJldFJlY3QoKSBjb25zdDsKLQorICAgIC8vIFJlY3QgaXMgbG9jYWwgdG8gdGhlIHJl
dHVybmVkIHJlbmRlcmVyCisgICAgSW50UmVjdCBsb2NhbENhcmV0UmVjdChSZW5kZXJPYmplY3Qq
JikgY29uc3Q7CisgICAgLy8gQm91bmRzIG9mIChwb3NzaWJseSB0cmFuc2Zvcm1lZCkgY2FyZXQg
aW4gYWJzb2x1dGUgY29vcmRzCisgICAgSW50UmVjdCBhYnNvbHV0ZUNhcmV0Qm91bmRzKCkgY29u
c3Q7CisgICAgLy8gQWJzIHggcG9zaXRpb24gb2YgdGhlIGNhcmV0IGlnbm9yaW5nIHRyYW5zZm9y
bXMuCisgICAgLy8gRklYTUU6IG5hdmlnYXRpb24gd2l0aCB0cmFuc2Zvcm1zIHNob3VsZCBiZSBz
bWFydGVyLgorICAgIGludCB4T2Zmc2V0Rm9yVmVydGljYWxOYXZpZ2F0aW9uKCkgY29uc3Q7Cisg
ICAgCiAjaWZuZGVmIE5ERUJVRwogICAgIHZvaWQgZm9ybWF0Rm9yRGVidWdnZXIoY2hhciogYnVm
ZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OwogICAgIHZvaWQgc2hvd1RyZWVGb3JUaGlzKCkg
Y29uc3Q7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvbWFjL1NlbGVjdGlvbkNvbnRyb2xs
ZXJNYWMubW0gYi9XZWJDb3JlL2VkaXRpbmcvbWFjL1NlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW0K
aW5kZXggZTA3MDI0YS4uN2Y5NWQ5ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL21hYy9T
ZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tCisrKyBiL1dlYkNvcmUvZWRpdGluZy9tYWMvU2VsZWN0
aW9uQ29udHJvbGxlck1hYy5tbQpAQCAtNDYsNyArNDYsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRy
b2xsZXI6Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UoKQogICAgIGlmIChV
QVpvb21FbmFibGVkKCkgJiYgbV9zZWwuaXNDYXJldCgpICYmIG1fc2VsLnN0YXJ0KCkubm9kZSgp
KSB7CiAgICAgICAgIFJlbmRlclZpZXcgKnJlbmRlclZpZXcgPSBzdGF0aWNfY2FzdDxSZW5kZXJW
aWV3Kj4obV9zZWwuc3RhcnQoKS5ub2RlKCktPnJlbmRlcmVyKCkpOwogICAgICAgICBpZiAocmVu
ZGVyVmlldykgewotICAgICAgICAgICAgSW50UmVjdCBzZWxlY3Rpb25SZWN0ID0gY2FyZXRSZWN0
KCk7CisgICAgICAgICAgICBJbnRSZWN0IHNlbGVjdGlvblJlY3QgPSBhYnNvbHV0ZUNhcmV0Qm91
bmRzKCk7CiAgICAgICAgICAgICBJbnRSZWN0IHZpZXdSZWN0ID0gcmVuZGVyVmlldy0+dmlld1Jl
Y3QoKTsKICAgICAgICAgICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gcmVuZGVyVmlldy0+dmll
dygpLT5mcmFtZVZpZXcoKTsgCiAgICAgICAgICAgICBpZiAoZnJhbWVWaWV3KSB7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxFbGVt
ZW50LmNwcAppbmRleCA2ZDRiODYxLi4wNDEzNDEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwv
SFRNTEVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKQEAgLTYx
MCw2ICs2MTAsOCBAQCBib29sIEhUTUxFbGVtZW50Ojppc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0
CiAgICAgaWYgKGRvY3VtZW50KCktPmZyYW1lKCkgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+aXND
b250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKKyAgICAvLyBGSVhNRTog
dGhpcyBpcyBhIHRlcnJpYmxlIHRoaW5nIHRvIGRvIGhlcmU6CisgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODM0CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRl
UmVuZGVyaW5nKCk7CiAKICAgICBpZiAoIXJlbmRlcmVyKCkpIHsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGFnZS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1dlYkNvcmUvcGFnZS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCBmZDI5ZGNlLi44NTc5NTY5IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvV2Vi
Q29yZS9wYWdlL0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC0xNjI1LDE5ICsxNjI1
LDE5IEBAIEludFJlY3QgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Ym91bmRzRm9yVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvCiAgICAgCiAgICAgLy8gQ3JlYXRlIGEgbXV0
YWJsZSBWaXNpYmxlUG9zaXRpb25SYW5nZS4KICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSByYW5n
ZSh2aXNpYmxlUG9zaXRpb25SYW5nZSk7Ci0gICAgSW50UmVjdCByZWN0MSA9IHJhbmdlLnN0YXJ0
LmNhcmV0UmVjdCgpOwotICAgIEludFJlY3QgcmVjdDIgPSByYW5nZS5lbmQuY2FyZXRSZWN0KCk7
CisgICAgSW50UmVjdCByZWN0MSA9IHJhbmdlLnN0YXJ0LmFic29sdXRlQ2FyZXRCb3VuZHMoKTsK
KyAgICBJbnRSZWN0IHJlY3QyID0gcmFuZ2UuZW5kLmFic29sdXRlQ2FyZXRCb3VuZHMoKTsKICAg
ICAKICAgICAvLyByZWFkanVzdCBmb3IgcG9zaXRpb24gYXQgdGhlIGVkZ2Ugb2YgYSBsaW5lLiAg
VGhpcyBpcyB0byBleGNsdWRlIGxpbmUgcmVjdCB0aGF0IGRvZXNuJ3QgbmVlZCB0byBiZSBhY2Nv
dW50ZWQgaW4gdGhlIHJhbmdlIGJvdW5kcwogICAgIGlmIChyZWN0Mi55KCkgIT0gcmVjdDEueSgp
KSB7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBlbmRPZkZpcnN0TGluZSA9IGVuZE9mTGluZShy
YW5nZS5zdGFydCk7CiAgICAgICAgIGlmIChyYW5nZS5zdGFydCA9PSBlbmRPZkZpcnN0TGluZSkg
ewogICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuc2V0QWZmaW5pdHkoRE9XTlNUUkVBTSk7Ci0gICAg
ICAgICAgICByZWN0MSA9IHJhbmdlLnN0YXJ0LmNhcmV0UmVjdCgpOworICAgICAgICAgICAgcmVj
dDEgPSByYW5nZS5zdGFydC5hYnNvbHV0ZUNhcmV0Qm91bmRzKCk7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKHJhbmdlLmVuZCA9PSBlbmRPZkZpcnN0TGluZSkgewogICAgICAgICAgICAgcmFuZ2Uu
ZW5kLnNldEFmZmluaXR5KFVQU1RSRUFNKTsKLSAgICAgICAgICAgIHJlY3QyID0gcmFuZ2UuZW5k
LmNhcmV0UmVjdCgpOworICAgICAgICAgICAgcmVjdDIgPSByYW5nZS5lbmQuYWJzb2x1dGVDYXJl
dEJvdW5kcygpOwogICAgICAgICB9CiAgICAgfQogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
YWdlL0ZyYW1lLmNwcCBiL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggYTg4ZWFjZS4uYmUz
YzQwOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9XZWJDb3JlL3Bh
Z2UvRnJhbWUuY3BwCkBAIC0yNTcsMTUgKzI1NywyNCBAQCBJbnRSZWN0IEZyYW1lOjpmaXJzdFJl
Y3RGb3JSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CiAgICAgQVNTRVJUKHJhbmdlLT5zdGFydENvbnRhaW5lcihlYykpOwogICAgIEFTU0VSVChyYW5n
ZS0+ZW5kQ29udGFpbmVyKGVjKSk7CisKICAgICBJbmxpbmVCb3gqIHN0YXJ0SW5saW5lQm94Owog
ICAgIGludCBzdGFydENhcmV0T2Zmc2V0OwogICAgIHJhbmdlLT5zdGFydFBvc2l0aW9uKCkuZ2V0
SW5saW5lQm94QW5kT2Zmc2V0KERPV05TVFJFQU0sIHN0YXJ0SW5saW5lQm94LCBzdGFydENhcmV0
T2Zmc2V0KTsKLSAgICBJbnRSZWN0IHN0YXJ0Q2FyZXRSZWN0ID0gcmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKGVjKS0+cmVuZGVyZXIoKS0+Y2FyZXRSZWN0KHN0YXJ0SW5saW5lQm94LCBzdGFydENhcmV0
T2Zmc2V0LCAmZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKTsKKworICAgIFJlbmRlck9iamVjdCogc3Rh
cnRSZW5kZXJlciA9IHJhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPnJlbmRlcmVyKCk7CisgICAg
SW50UmVjdCBzdGFydENhcmV0UmVjdCA9IHN0YXJ0UmVuZGVyZXItPmxvY2FsQ2FyZXRSZWN0KHN0
YXJ0SW5saW5lQm94LCBzdGFydENhcmV0T2Zmc2V0LCAmZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKTsK
KyAgICBpZiAoc3RhcnRDYXJldFJlY3QgIT0gSW50UmVjdCgpKQorICAgICAgICBzdGFydENhcmV0
UmVjdCA9IHN0YXJ0UmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KHN0YXJ0
Q2FyZXRSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKIAogICAgIElubGluZUJveCogZW5k
SW5saW5lQm94OwogICAgIGludCBlbmRDYXJldE9mZnNldDsKICAgICByYW5nZS0+ZW5kUG9zaXRp
b24oKS5nZXRJbmxpbmVCb3hBbmRPZmZzZXQoVVBTVFJFQU0sIGVuZElubGluZUJveCwgZW5kQ2Fy
ZXRPZmZzZXQpOwotICAgIEludFJlY3QgZW5kQ2FyZXRSZWN0ID0gcmFuZ2UtPmVuZENvbnRhaW5l
cihlYyktPnJlbmRlcmVyKCktPmNhcmV0UmVjdChlbmRJbmxpbmVCb3gsIGVuZENhcmV0T2Zmc2V0
KTsKKworICAgIFJlbmRlck9iamVjdCogZW5kUmVuZGVyZXIgPSByYW5nZS0+ZW5kQ29udGFpbmVy
KGVjKS0+cmVuZGVyZXIoKTsKKyAgICBJbnRSZWN0IGVuZENhcmV0UmVjdCA9IGVuZFJlbmRlcmVy
LT5sb2NhbENhcmV0UmVjdChlbmRJbmxpbmVCb3gsIGVuZENhcmV0T2Zmc2V0KTsKKyAgICBpZiAo
ZW5kQ2FyZXRSZWN0ICE9IEludFJlY3QoKSkKKyAgICAgICAgZW5kQ2FyZXRSZWN0ID0gZW5kUmVu
ZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGVuZENhcmV0UmVjdCkpLmVuY2xv
c2luZ0JvdW5kaW5nQm94KCk7CiAKICAgICBpZiAoc3RhcnRDYXJldFJlY3QueSgpID09IGVuZENh
cmV0UmVjdC55KCkpIHsKICAgICAgICAgLy8gc3RhcnQgYW5kIGVuZCBhcmUgb24gdGhlIHNhbWUg
bGluZQpAQCAtNTc2LDE0ICs1ODUsMTQgQEAgdm9pZCBGcmFtZTo6c2VsZWN0aW9uTGF5b3V0Q2hh
bmdlZCgpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSZW5kZXJWaWV3KiBjYW52YXMgPSBjb250
ZW50UmVuZGVyZXIoKTsKLSAgICBpZiAoIWNhbnZhcykKKyAgICBSZW5kZXJWaWV3KiB2aWV3ID0g
Y29udGVudFJlbmRlcmVyKCk7CisgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm47CiAKICAg
ICBTZWxlY3Rpb24gc2VsZWN0aW9uID0gdGhpcy0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwog
ICAgICAgICAKICAgICBpZiAoIXNlbGVjdGlvbi5pc1JhbmdlKCkpCi0gICAgICAgIGNhbnZhcy0+
Y2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgdmlldy0+Y2xlYXJTZWxlY3Rpb24oKTsKICAgICBl
bHNlIHsKICAgICAgICAgLy8gVXNlIHRoZSByaWdodG1vc3QgY2FuZGlkYXRlIGZvciB0aGUgc3Rh
cnQgb2YgdGhlIHNlbGVjdGlvbiwgYW5kIHRoZSBsZWZ0bW9zdCBjYW5kaWRhdGUgZm9yIHRoZSBl
bmQgb2YgdGhlIHNlbGVjdGlvbi4KICAgICAgICAgLy8gRXhhbXBsZTogZm9vIDxhPmJhcjwvYT4u
ICBJbWFnaW5lIHRoYXQgYSBsaW5lIHdyYXAgb2NjdXJzIGFmdGVyICdmb28nLCBhbmQgdGhhdCAn
YmFyJyBpcyBzZWxlY3RlZC4gICBJZiB3ZSBwYXNzIFtmb28sIDNdCkBAIC02MDEsNyArNjEwLDcg
QEAgdm9pZCBGcmFtZTo6c2VsZWN0aW9uTGF5b3V0Q2hhbmdlZCgpCiAgICAgICAgIGlmIChzdGFy
dFBvcy5pc05vdE51bGwoKSAmJiBlbmRQb3MuaXNOb3ROdWxsKCkgJiYgc2VsZWN0aW9uLnZpc2li
bGVTdGFydCgpICE9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpIHsKICAgICAgICAgICAgIFJlbmRl
ck9iamVjdCAqc3RhcnRSZW5kZXJlciA9IHN0YXJ0UG9zLm5vZGUoKS0+cmVuZGVyZXIoKTsKICAg
ICAgICAgICAgIFJlbmRlck9iamVjdCAqZW5kUmVuZGVyZXIgPSBlbmRQb3Mubm9kZSgpLT5yZW5k
ZXJlcigpOwotICAgICAgICAgICAgY2FudmFzLT5zZXRTZWxlY3Rpb24oc3RhcnRSZW5kZXJlciwg
c3RhcnRQb3Mub2Zmc2V0KCksIGVuZFJlbmRlcmVyLCBlbmRQb3Mub2Zmc2V0KCkpOworICAgICAg
ICAgICAgdmlldy0+c2V0U2VsZWN0aW9uKHN0YXJ0UmVuZGVyZXIsIHN0YXJ0UG9zLm9mZnNldCgp
LCBlbmRSZW5kZXJlciwgZW5kUG9zLm9mZnNldCgpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAg
LTYxNywxOCArNjI2LDE4IEBAIHZvaWQgRnJhbWU6OmNhcmV0QmxpbmtUaW1lckZpcmVkKFRpbWVy
PEZyYW1lPiopCiAgICAgc2VsZWN0aW9uKCktPmludmFsaWRhdGVDYXJldFJlY3QoKTsKIH0KIAot
dm9pZCBGcmFtZTo6cGFpbnRDYXJldChHcmFwaGljc0NvbnRleHQqIHAsIGNvbnN0IEludFJlY3Qm
IHJlY3QpIGNvbnN0Cit2b2lkIEZyYW1lOjpwYWludENhcmV0KEdyYXBoaWNzQ29udGV4dCogcCwg
aW50IHR4LCBpbnQgdHksIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSBjb25zdAogewogICAgIGlm
IChkLT5tX2NhcmV0UGFpbnQgJiYgZC0+bV9jYXJldFZpc2libGUpCi0gICAgICAgIHNlbGVjdGlv
bigpLT5wYWludENhcmV0KHAsIHJlY3QpOworICAgICAgICBzZWxlY3Rpb24oKS0+cGFpbnRDYXJl
dChwLCB0eCwgdHksIGNsaXBSZWN0KTsKIH0KIAotdm9pZCBGcmFtZTo6cGFpbnREcmFnQ2FyZXQo
R3JhcGhpY3NDb250ZXh0KiBwLCBjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAordm9pZCBGcmFt
ZTo6cGFpbnREcmFnQ2FyZXQoR3JhcGhpY3NDb250ZXh0KiBwLCBpbnQgdHgsIGludCB0eSwgY29u
c3QgSW50UmVjdCYgY2xpcFJlY3QpIGNvbnN0CiB7CiAgICAgU2VsZWN0aW9uQ29udHJvbGxlciog
ZHJhZ0NhcmV0Q29udHJvbGxlciA9IGQtPm1fcGFnZS0+ZHJhZ0NhcmV0Q29udHJvbGxlcigpOwog
ICAgIEFTU0VSVChkcmFnQ2FyZXRDb250cm9sbGVyLT5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpOwog
ICAgIGlmIChkcmFnQ2FyZXRDb250cm9sbGVyLT5zZWxlY3Rpb24oKS5zdGFydCgpLm5vZGUoKS0+
ZG9jdW1lbnQoKS0+ZnJhbWUoKSA9PSB0aGlzKQotICAgICAgICBkcmFnQ2FyZXRDb250cm9sbGVy
LT5wYWludENhcmV0KHAsIHJlY3QpOworICAgICAgICBkcmFnQ2FyZXRDb250cm9sbGVyLT5wYWlu
dENhcmV0KHAsIHR4LCB0eSwgY2xpcFJlY3QpOwogfQogCiBmbG9hdCBGcmFtZTo6em9vbUZhY3Rv
cigpIGNvbnN0CkBAIC0xMjIwLDcgKzEyMjksNyBAQCB2b2lkIEZyYW1lOjpyZXZlYWxTZWxlY3Rp
b24oY29uc3QgUmVuZGVyTGF5ZXI6OlNjcm9sbEFsaWdubWVudCYgYWxpZ25tZW50KSBjb25zdAog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgU2VsZWN0aW9u
OjpDQVJFVDoKLSAgICAgICAgICAgIHJlY3QgPSBzZWxlY3Rpb24oKS0+Y2FyZXRSZWN0KCk7Cisg
ICAgICAgICAgICByZWN0ID0gc2VsZWN0aW9uKCktPmFic29sdXRlQ2FyZXRCb3VuZHMoKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpS
QU5HRToKQEAgLTEyNDcsNyArMTI1Niw3IEBAIHZvaWQgRnJhbWU6OnJldmVhbENhcmV0KGNvbnN0
IFJlbmRlckxheWVyOjpTY3JvbGxBbGlnbm1lbnQmIGFsaWdubWVudCkgY29uc3QKIAogICAgIFBv
c2l0aW9uIGV4dGVudCA9IHNlbGVjdGlvbigpLT5leHRlbnQoKTsKICAgICBpZiAoZXh0ZW50Lm5v
ZGUoKSAmJiBleHRlbnQubm9kZSgpLT5yZW5kZXJlcigpKSB7Ci0gICAgICAgIEludFJlY3QgZXh0
ZW50UmVjdCA9IFZpc2libGVQb3NpdGlvbihleHRlbnQpLmNhcmV0UmVjdCgpOworICAgICAgICBJ
bnRSZWN0IGV4dGVudFJlY3QgPSBWaXNpYmxlUG9zaXRpb24oZXh0ZW50KS5hYnNvbHV0ZUNhcmV0
Qm91bmRzKCk7CiAgICAgICAgIFJlbmRlckxheWVyKiBsYXllciA9IGV4dGVudC5ub2RlKCktPnJl
bmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7CiAgICAgICAgIGlmIChsYXllcikKICAgICAgICAg
ICAgIGxheWVyLT5zY3JvbGxSZWN0VG9WaXNpYmxlKGV4dGVudFJlY3QsIGZhbHNlLCBhbGlnbm1l
bnQsIGFsaWdubWVudCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRnJhbWUuaCBiL1dlYkNv
cmUvcGFnZS9GcmFtZS5oCmluZGV4IDcxNDNkNWQuLjIwODY3MWEgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGFnZS9GcmFtZS5oCisrKyBiL1dlYkNvcmUvcGFnZS9GcmFtZS5oCkBAIC0yNDQsOCArMjQ0
LDggQEAgcHVibGljOgogICAgIHZvaWQgaW52YWxpZGF0ZVNlbGVjdGlvbigpOwogCiAgICAgdm9p
ZCBzZXRDYXJldFZpc2libGUoYm9vbCA9IHRydWUpOwotICAgIHZvaWQgcGFpbnRDYXJldChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7ICAKLSAgICB2b2lkIHBhaW50RHJh
Z0NhcmV0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICB2b2lk
IHBhaW50Q2FyZXQoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHksIGNvbnN0IEludFJl
Y3QmIGNsaXBSZWN0KSBjb25zdDsgIAorICAgIHZvaWQgcGFpbnREcmFnQ2FyZXQoR3JhcGhpY3ND
b250ZXh0KiwgaW50IHR4LCBpbnQgdHksIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSBjb25zdDsK
IAogICAgIGJvb2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25zdDsgLy8gaWYgdHJ1ZSwgZXZlcnl0
aGluZyBpbiBmcmFtZSBpcyBlZGl0YWJsZQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9MYXlvdXRTdGF0ZS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAKaW5k
ZXggODcyYTY0MC4uMjBkMGI5OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0
U3RhdGUuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcApAQCAtNzks
OCArNzksNyBAQCBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KiByb290KQog
ICAgIDogbV9jbGlwcGVkKGZhbHNlKQogewogICAgIFJlbmRlck9iamVjdCogY29udGFpbmVyID0g
cm9vdC0+Y29udGFpbmVyKCk7Ci0gICAgLy8gRklYTUU6IHRoaXMgaXMgYnJva2VuIHdpdGggdHJh
bnNmb3Jtcz8KLSAgICBGbG9hdFBvaW50IGFic0NvbnRlbnRQb2ludCA9IGNvbnRhaW5lci0+bG9j
YWxUb0Fic29sdXRlRm9yQ29udGVudChGbG9hdFBvaW50KCkpOworICAgIEZsb2F0UG9pbnQgYWJz
Q29udGVudFBvaW50ID0gY29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0
UG9pbnQoKSwgZmFsc2UsIHRydWUpOwogICAgIG1fb2Zmc2V0ID0gSW50U2l6ZShhYnNDb250ZW50
UG9pbnQueCgpLCBhYnNDb250ZW50UG9pbnQueSgpKTsKICAgICBtX25leHQgPSAwOwogfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDQ0YzQ3NGIuLjVkMjEwYzcgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAKQEAgLTE2MzgsMjAgKzE2MzgsMjEgQEAgdm9pZCBSZW5kZXJCbG9j
azo6cGFpbnRDaGlsZHJlbihQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiAg
ICAgfQogfQogCi12b2lkIFJlbmRlckJsb2NrOjpwYWludENhcmV0KFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBDYXJldFR5cGUgdHlwZSkKK3ZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q2FyZXQoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5LCBDYXJldFR5cGUgdHlwZSkKIHsKICAgICBT
ZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb24gPSB0eXBlID09IEN1cnNvckNhcmV0ID8gZG9j
dW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkgOiBkb2N1bWVudCgpLT5mcmFtZSgpLT5kcmFn
Q2FyZXRDb250cm9sbGVyKCk7Ci0gICAgTm9kZSogY2FyZXROb2RlID0gc2VsZWN0aW9uLT5zdGFy
dCgpLm5vZGUoKTsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY2FyZXROb2RlID8gY2Fy
ZXROb2RlLT5yZW5kZXJlcigpIDogMDsKLSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1
cm47Ci0gICAgLy8gaWYgY2FyZXROb2RlIGlzIGEgYmxvY2sgYW5kIGNhcmV0IGlzIGluc2lkZSBp
dCB0aGVuIGNhcmV0IHNob3VsZCBiZSBwYWludGVkIGJ5IHRoYXQgYmxvY2sKLSAgICBib29sIGN1
cnNvckluc2lkZUJsb2NrQ2FyZXROb2RlID0gcmVuZGVyZXItPmlzQmxvY2tGbG93KCkgJiYgc2Vs
ZWN0aW9uLT5pc0luc2lkZU5vZGUoKTsKLSAgICBpZiAoKGN1cnNvckluc2lkZUJsb2NrQ2FyZXRO
b2RlID8gcmVuZGVyZXIgOiByZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCkpID09IHRoaXMgJiYg
c2VsZWN0aW9uLT5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CisKKyAgICAvLyBBc2sgdGhlIFNlbGVj
dGlvbkNvbnRyb2xsZXIgaWYgdGhlIGNhcmV0IHNob3VsZCBiZSBwYWludGVkIGJ5IHRoaXMgYmxv
Y2sKKyAgICBSZW5kZXJPYmplY3QqIGNhcmV0UGFpbnRlciA9IHNlbGVjdGlvbi0+Y2FyZXRSZW5k
ZXJlcigpOworICAgIGlmIChjYXJldFBhaW50ZXIgPT0gdGhpcyAmJiBzZWxlY3Rpb24tPmlzQ29u
dGVudEVkaXRhYmxlKCkpIHsKKyAgICAgICAgLy8gQ29udmVydCB0aGUgcGFpbnRpbmcgb2Zmc2V0
IGludG8gdGhlIGxvY2FsIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoaXMgcmVuZGVyZXIsCisgICAg
ICAgIC8vIHRvIG1hdGNoIHRoZSBsb2NhbENhcmV0UmVjdCBjb21wdXRlZCBieSB0aGUgU2VsZWN0
aW9uQ29udHJvbGxlcgorICAgICAgICBvZmZzZXRGb3JDb250ZW50cyh0eCwgdHkpOworCiAgICAg
ICAgIGlmICh0eXBlID09IEN1cnNvckNhcmV0KQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJh
bWUoKS0+cGFpbnRDYXJldChwYWludEluZm8uY29udGV4dCwgcGFpbnRJbmZvLnJlY3QpOworICAg
ICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+cGFpbnRDYXJldChwYWludEluZm8uY29udGV4
dCwgdHgsIHR5LCBwYWludEluZm8ucmVjdCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRv
Y3VtZW50KCktPmZyYW1lKCktPnBhaW50RHJhZ0NhcmV0KHBhaW50SW5mby5jb250ZXh0LCBwYWlu
dEluZm8ucmVjdCk7CisgICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5wYWludERyYWdD
YXJldChwYWludEluZm8uY29udGV4dCwgdHgsIHR5LCBwYWludEluZm8ucmVjdCk7CiAgICAgfQog
fQogCkBAIC0xNzI3LDggKzE3MjgsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludE9iamVjdChQ
YWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiAgICAgLy8gSWYgdGhlIGNhcmV0
J3Mgbm9kZSdzIHJlbmRlciBvYmplY3QncyBjb250YWluaW5nIGJsb2NrIGlzIHRoaXMgYmxvY2ss
IGFuZCB0aGUgcGFpbnQgYWN0aW9uIGlzIFBhaW50UGhhc2VGb3JlZ3JvdW5kLAogICAgIC8vIHRo
ZW4gcGFpbnQgdGhlIGNhcmV0LgogICAgIGlmICghaW5saW5lRmxvdyAmJiBwYWludFBoYXNlID09
IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7ICAgICAgICAKLSAgICAgICAgcGFpbnRDYXJldChwYWlu
dEluZm8sIEN1cnNvckNhcmV0KTsKLSAgICAgICAgcGFpbnRDYXJldChwYWludEluZm8sIERyYWdD
YXJldCk7CisgICAgICAgIHBhaW50Q2FyZXQocGFpbnRJbmZvLCBzY3JvbGxlZFgsIHNjcm9sbGVk
WSwgQ3Vyc29yQ2FyZXQpOworICAgICAgICBwYWludENhcmV0KHBhaW50SW5mbywgc2Nyb2xsZWRY
LCBzY3JvbGxlZFksIERyYWdDYXJldCk7CiAgICAgfQogfQogCkBAIC0zMjc4LDE1ICszMjc5LDgg
QEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJsb2NrOjpwb3NpdGlvbkZvckNvb3JkaW5hdGVzKGlu
dCB4LCBpbnQgeSkKICAgICBOb2RlKiBuID0gZWxlbWVudCgpOwogICAgIAogICAgIGludCBjb250
ZW50c1ggPSB4OwotICAgIGludCBjb250ZW50c1kgPSB5IC0gYm9yZGVyVG9wRXh0cmEoKTsKLSAg
ICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgIG1fbGF5ZXItPmFkZFNjcm9sbGVkQ29u
dGVudE9mZnNldChjb250ZW50c1gsIGNvbnRlbnRzWSk7Ci0gICAgaWYgKG1faGFzQ29sdW1ucykg
ewotICAgICAgICBJbnRQb2ludCBjb250ZW50c1BvaW50KGNvbnRlbnRzWCwgY29udGVudHNZKTsK
LSAgICAgICAgYWRqdXN0UG9pbnRUb0NvbHVtbkNvbnRlbnRzKGNvbnRlbnRzUG9pbnQpOwotICAg
ICAgICBjb250ZW50c1ggPSBjb250ZW50c1BvaW50LngoKTsKLSAgICAgICAgY29udGVudHNZID0g
Y29udGVudHNQb2ludC55KCk7Ci0gICAgfQorICAgIGludCBjb250ZW50c1kgPSB5OworICAgIG9m
ZnNldEZvckNvbnRlbnRzKGNvbnRlbnRzWCwgY29udGVudHNZKTsKIAogICAgIGlmIChpc1JlcGxh
Y2VkKCkpIHsKICAgICAgICAgaWYgKHkgPCAwIHx8IHkgPCBoZWlnaHQoKSAmJiB4IDwgMCkKQEAg
LTMzODYsNiArMzM4MCwyMSBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQmxvY2s6OnBvc2l0aW9u
Rm9yQ29vcmRpbmF0ZXMoaW50IHgsIGludCB5KQogICAgIHJldHVybiBSZW5kZXJGbG93Ojpwb3Np
dGlvbkZvckNvb3JkaW5hdGVzKHgsIHkpOwogfQogCit2b2lkIFJlbmRlckJsb2NrOjpvZmZzZXRG
b3JDb250ZW50cyhpbnQmIHR4LCBpbnQmIHR5KSBjb25zdAoreworICAgIHR5IC09IGJvcmRlclRv
cEV4dHJhKCk7CisgICAgCisgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICBtX2xh
eWVyLT5hZGRTY3JvbGxlZENvbnRlbnRPZmZzZXQodHgsIHR5KTsKKworICAgIGlmIChtX2hhc0Nv
bHVtbnMpIHsKKyAgICAgICAgSW50UG9pbnQgY29udGVudHNQb2ludCh0eCwgdHkpOworICAgICAg
ICBhZGp1c3RQb2ludFRvQ29sdW1uQ29udGVudHMoY29udGVudHNQb2ludCk7CisgICAgICAgIHR4
ID0gY29udGVudHNQb2ludC54KCk7CisgICAgICAgIHR5ID0gY29udGVudHNQb2ludC55KCk7Cisg
ICAgfQorfQorCiBpbnQgUmVuZGVyQmxvY2s6OmF2YWlsYWJsZVdpZHRoKCkgY29uc3QKIHsKICAg
ICAvLyBJZiB3ZSBoYXZlIG11bHRpcGxlIGNvbHVtbnMsIHRoZW4gdGhlIGF2YWlsYWJsZSB3aWR0
aCBpcyByZWR1Y2VkIHRvIG91ciBjb2x1bW4gd2lkdGguCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApp
bmRleCBlNDQ2ZmIyLi41YWUxMzRlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKQEAgLTE2Nyw3
ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludENoaWxkcmVuKFBhaW50SW5mbyYsIGlu
dCB0eCwgaW50IHR5KTsKICAgICB2b2lkIHBhaW50RWxsaXBzaXNCb3hlcyhQYWludEluZm8mLCBp
bnQgdHgsIGludCB0eSk7CiAgICAgdm9pZCBwYWludFNlbGVjdGlvbihQYWludEluZm8mLCBpbnQg
dHgsIGludCB0eSk7Ci0gICAgdm9pZCBwYWludENhcmV0KFBhaW50SW5mbyYsIENhcmV0VHlwZSk7
CisgICAgdm9pZCBwYWludENhcmV0KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5LCBDYXJldFR5
cGUpOwogCiAgICAgdm9pZCBpbnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJPYmplY3QqKTsKICAg
ICB2b2lkIHJlbW92ZUZsb2F0aW5nT2JqZWN0KFJlbmRlck9iamVjdCopOwpAQCAtMzI0LDYgKzMy
NCw5IEBAIHByaXZhdGU6CiAgICAgUG9zaXRpb24gcG9zaXRpb25Gb3JCb3goSW5saW5lQm94Kiwg
Ym9vbCBzdGFydCA9IHRydWUpIGNvbnN0OwogICAgIFBvc2l0aW9uIHBvc2l0aW9uRm9yUmVuZGVy
ZXIoUmVuZGVyT2JqZWN0KiwgYm9vbCBzdGFydCA9IHRydWUpIGNvbnN0OwogCisgICAgLy8gQWRq
dXN0IHR4IGFuZCB0eSBmcm9tIHBhaW50aW5nIG9mZnNldHMgdG8gdGhlIGxvY2FsIGNvb3JkcyBv
ZiB0aGlzIHJlbmRlcmVyCisgICAgdm9pZCBvZmZzZXRGb3JDb250ZW50cyhpbnQmIHR4LCBpbnQm
IHR5KSBjb25zdDsKKwogICAgIGludCBjb2x1bW5HYXAoKSBjb25zdDsKICAgICB2b2lkIGNhbGND
b2x1bW5XaWR0aCgpOwogICAgIGludCBsYXlvdXRDb2x1bW5zKGludCBlbmRPZkNvbnRlbnQgPSAt
MSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCAyMzZhNDg3Li5kZmJlNWViIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAKQEAgLTI2OTUsNyArMjY5NSw3IEBAIHZvaWQgUmVuZGVyQm94Ojpj
YWxjQWJzb2x1dGVWZXJ0aWNhbFJlcGxhY2VkKCkKICAgICBtX3kgPSB0b3BWYWx1ZSArIG1fbWFy
Z2luVG9wICsgY29udGFpbmVyQmxvY2stPmJvcmRlclRvcCgpOwogfQogCi1JbnRSZWN0IFJlbmRl
ckJveDo6Y2FyZXRSZWN0KElubGluZUJveCogYm94LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0
cmFXaWR0aFRvRW5kT2ZMaW5lKQorSW50UmVjdCBSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0KElu
bGluZUJveCogYm94LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5l
KQogewogICAgIC8vIFZpc2libGVQb3NpdGlvbnMgYXQgb2Zmc2V0cyBpbnNpZGUgY29udGFpbmVy
cyBlaXRoZXIgYSkgcmVmZXIgdG8gdGhlIHBvc2l0aW9ucyBiZWZvcmUvYWZ0ZXIKICAgICAvLyB0
aG9zZSBjb250YWluZXJzICh0YWJsZXMgYW5kIHNlbGVjdCBlbGVtZW50cykgb3IgYikgcmVmZXIg
dG8gdGhlIHBvc2l0aW9uIGluc2lkZSBhbiBlbXB0eSBibG9jay4KQEAgLTI3MjksMTcgKzI3Mjks
MTEgQEAgSW50UmVjdCBSZW5kZXJCb3g6OmNhcmV0UmVjdChJbmxpbmVCb3gqIGJveCwgaW50IGNh
cmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0UKICAgICBpZiAoZm9udEhlaWdodCA+IHJlY3Qu
aGVpZ2h0KCkgfHwgIWlzUmVwbGFjZWQoKSAmJiAhaXNUYWJsZSgpKQogICAgICAgICByZWN0LnNl
dEhlaWdodChmb250SGVpZ2h0KTsKIAotICAgIFJlbmRlck9iamVjdCogY2IgPSBjb250YWluaW5n
QmxvY2soKTsKLSAgICBpZiAoIWNiKQotICAgICAgICAvLyBObyBwb2ludCByZXR1cm5pbmcgYSBy
ZWxhdGl2ZSBwb3NpdGlvbi4KLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIEZsb2F0
UG9pbnQgYWJzUG9zID0gY2ItPmxvY2FsVG9BYnNvbHV0ZSgpOwotCiAgICAgaWYgKGV4dHJhV2lk
dGhUb0VuZE9mTGluZSkKICAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IHhQb3MoKSAr
IG1fd2lkdGggLSByZWN0LnJpZ2h0KCk7CiAKLSAgICByZWN0Lm1vdmUoYWJzUG9zLngoKSwgYWJz
UG9zLnkoKSk7CisgICAgLy8gTW92ZSB0byBsb2NhbCBjb29yZHMKKyAgICByZWN0Lm1vdmUoLXhQ
b3MoKSwgLXlQb3MoKSk7CiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgK
aW5kZXggZGVkOWNiNS4uN2E3MjUxNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTUzLDYgKzUz
LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgRmxvYXRQb2ludCBhYnNvbHV0ZVRvTG9jYWwoRmxv
YXRQb2ludCBjb250YWluZXJQb2ludCwgYm9vbCBmaXhlZCA9IGZhbHNlLCBib29sIHVzZVRyYW5z
Zm9ybXMgPSBmYWxzZSkgY29uc3Q7CiAgICAgdmlydHVhbCBGbG9hdFF1YWQgbG9jYWxUb0Fic29s
dXRlUXVhZChjb25zdCBGbG9hdFF1YWQmLCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0OwogCisg
ICAgLy8gUmV0dXJuIHRoZSBvZmZzZXQgZnJvbSB0aGUgY29udGFpbmVyKCkgcmVuZGVyZXIgKGV4
Y2x1ZGluZyB0cmFuc2Zvcm1zKQorICAgIHZpcnR1YWwgSW50U2l6ZSBvZmZzZXRGcm9tQ29udGFp
bmVyKFJlbmRlck9iamVjdCopIGNvbnN0OworCiAgICAgdmlydHVhbCBpbnQgeFBvcygpIGNvbnN0
IHsgcmV0dXJuIG1feDsgfQogICAgIHZpcnR1YWwgaW50IHlQb3MoKSBjb25zdCB7IHJldHVybiBt
X3k7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zKGludCB4LCBpbnQgeSk7CkBAIC0xNDEsNyAr
MTQ0LDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgUmVuZGVyTGF5ZXIqIGxheWVyKCkg
Y29uc3QgeyByZXR1cm4gbV9sYXllcjsgfQogCi0gICAgdmlydHVhbCBJbnRSZWN0IGNhcmV0UmVj
dChJbmxpbmVCb3gqLCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5l
ID0gMCk7CisgICAgdmlydHVhbCBJbnRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGlu
dCBjYXJldE9mZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBwYWludEZpbGxMYXllckV4dGVuZGVkKGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IENvbG9yJiwgY29uc3QgRmlsbExheWVyKiwgaW50IGNsaXBZLCBpbnQgY2xpcEhlaWdodCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHgsIGludCB0eSwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCBJbmxpbmVGbG93Qm94KiA9IDAsIENvbXBvc2l0ZU9wZXJhdG9y
ID0gQ29tcG9zaXRlU291cmNlT3Zlcik7CkBAIC0xOTAsOCArMTkzLDYgQEAgcHJvdGVjdGVkOgog
ICAgIHZvaWQgY2FsY0Fic29sdXRlSG9yaXpvbnRhbCgpOwogICAgIAogICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRDYWxjdWxhdGVTaXplQXNSZXBsYWNlZCgpIGNvbnN0IHsgcmV0dXJuIGlzUmVwbGFj
ZWQoKSAmJiAhaXNJbmxpbmVCbG9ja09ySW5saW5lVGFibGUoKTsgfQotCi0gICAgSW50U2l6ZSBv
ZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlck9iamVjdCopIGNvbnN0OwogICAgIAogcHJpdmF0ZToK
ICAgICB2b2lkIHBhaW50Um9vdEJveERlY29yYXRpb25zKFBhaW50SW5mbyYsIGludCB0eCwgaW50
IHR5KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHAKaW5kZXggZWU2MDQ4Yy4uNzc5YjQzOSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHAKKysrIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHAKQEAgLTYyMCwxMSArNjIwLDExIEBAIGludCBSZW5kZXJG
bG93OjpsZWZ0bW9zdFBvc2l0aW9uKGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IsIGJvb2wg
aW5jbHVkZVNlbGYpCiAgICAgcmV0dXJuIGxlZnQ7CiB9CiAKLUludFJlY3QgUmVuZGVyRmxvdzo6
Y2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0
cmFXaWR0aFRvRW5kT2ZMaW5lKQorSW50UmVjdCBSZW5kZXJGbG93Ojpsb2NhbENhcmV0UmVjdChJ
bmxpbmVCb3gqIGlubGluZUJveCwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0Vu
ZE9mTGluZSkKIHsKICAgICAvLyBEbyB0aGUgbm9ybWFsIGNhbGN1bGF0aW9uIGluIG1vc3QgY2Fz
ZXMuCiAgICAgaWYgKGZpcnN0Q2hpbGQoKSB8fCBzdHlsZSgpLT5kaXNwbGF5KCkgPT0gSU5MSU5F
KQotICAgICAgICByZXR1cm4gUmVuZGVyQ29udGFpbmVyOjpjYXJldFJlY3QoaW5saW5lQm94LCBj
YXJldE9mZnNldCwgZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKTsKKyAgICAgICAgcmV0dXJuIFJlbmRl
ckNvbnRhaW5lcjo6bG9jYWxDYXJldFJlY3QoaW5saW5lQm94LCBjYXJldE9mZnNldCwgZXh0cmFX
aWR0aFRvRW5kT2ZMaW5lKTsKIAogICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2U6CiAgICAg
Ly8gVGhlIGVsZW1lbnQgaXMgbm90IGFuIGlubGluZSBlbGVtZW50LCBhbmQgaXQncyBlbXB0eS4g
U28gd2UgaGF2ZSB0bwpAQCAtNjk0LDkgKzY5NCw3IEBAIEludFJlY3QgUmVuZGVyRmxvdzo6Y2Fy
ZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFX
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNv
bHV0ZUZvckNvbnRlbnQoRmxvYXRQb2ludCgpKTsKLSAgICB4ICs9IGFic1Bvcy54KCk7Ci0gICAg
aW50IHkgPSBhYnNQb3MueSgpICsgcGFkZGluZ1RvcCgpICsgYm9yZGVyVG9wKCk7CisgICAgaW50
IHkgPSBwYWRkaW5nVG9wKCkgKyBib3JkZXJUb3AoKTsKIAogICAgIHJldHVybiBJbnRSZWN0KHgs
IHksIGNhcmV0V2lkdGgsIGhlaWdodCk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGbG93LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93LmgKaW5kZXggYzI4
NGVkOC4uN2UzYTM0NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvdy5o
CisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3cuaApAQCAtOTMsNyArOTMsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBpbnQgcmlnaHRtb3N0UG9zaXRpb24oYm9vbCBpbmNsdWRlT3Zl
cmZsb3dJbnRlcmlvciA9IHRydWUsIGJvb2wgaW5jbHVkZVNlbGYgPSB0cnVlKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGludCBsZWZ0bW9zdFBvc2l0aW9uKGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJp
b3IgPSB0cnVlLCBib29sIGluY2x1ZGVTZWxmID0gdHJ1ZSkgY29uc3Q7CiAKLSAgICB2aXJ0dWFs
IEludFJlY3QgY2FyZXRSZWN0KElubGluZUJveCosIGludCBjYXJldE9mZnNldCwgaW50KiBleHRy
YVdpZHRoVG9FbmRPZkxpbmUgPSAwKTsKKyAgICB2aXJ0dWFsIEludFJlY3QgbG9jYWxDYXJldFJl
Y3QoSW5saW5lQm94KiwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGlu
ZSA9IDApOwogCiAgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKEdyYXBoaWNzQ29u
dGV4dCosIGludCB0eCwgaW50IHR5KTsKICAgICB2b2lkIHBhaW50T3V0bGluZUZvckxpbmUoR3Jh
cGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHksIGNvbnN0IEludFJlY3QmIHByZXZMaW5lLCBj
b25zdCBJbnRSZWN0JiB0aGlzTGluZSwgY29uc3QgSW50UmVjdCYgbmV4dExpbmUpOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDg2N2RiMjQuLjI2OWE0ZjUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAKQEAgLTgzNSw2ICs4MzUsMTEgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Ny
b2xsVG9PZmZzZXQoaW50IHgsIGludCB5LCBib29sIHVwZGF0ZVNjcm9sbGJhcnMsIGJvb2wgcmVw
YWkKICAgICAgICAgdmlldy0+dXBkYXRlV2lkZ2V0UG9zaXRpb25zKCk7CiAgICAgfQogCisgICAg
Ly8gVGhlIGNhcmV0IHJlY3QgbmVlZHMgdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgc2Nyb2xsaW5n
CisgICAgRnJhbWUqIGZyYW1lID0gcmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAg
ICBpZiAoZnJhbWUpCisgICAgICAgIGZyYW1lLT5pbnZhbGlkYXRlU2VsZWN0aW9uKCk7CisKICAg
ICAvLyBKdXN0IHNjaGVkdWxlIGEgZnVsbCByZXBhaW50IG9mIG91ciBvYmplY3QuCiAgICAgaWYg
KHJlcGFpbnQpCiAgICAgICAgIG1fb2JqZWN0LT5yZXBhaW50KCk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcAppbmRleCA1MWU1YjAyLi44NDQzMmNmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAKQEAgLTI0NDMsNyArMjQ0MywyMCBAQCBGbG9hdFF1YWQgUmVuZGVyT2JqZWN0Ojps
b2NhbFRvQWJzb2x1dGVRdWFkKGNvbnN0IEZsb2F0UXVhZCYgbG9jYWxRdWFkLCBib29sIGZpeAog
ICAgIHJldHVybiBGbG9hdFF1YWQoKTsKIH0KIAotSW50UmVjdCBSZW5kZXJPYmplY3Q6OmNhcmV0
UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lk
dGhUb0VuZE9mTGluZSkKK0ludFNpemUgUmVuZGVyT2JqZWN0OjpvZmZzZXRGcm9tQ29udGFpbmVy
KFJlbmRlck9iamVjdCogbykgY29uc3QKK3sKKyAgICBBU1NFUlQobyA9PSBjb250YWluZXIoKSk7
CisKKyAgICBJbnRTaXplIG9mZnNldDsKKyAgICBvZmZzZXQuZXhwYW5kKDAsIG8tPmJvcmRlclRv
cEV4dHJhKCkpOworCisgICAgaWYgKG8tPmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICBvZmZz
ZXQgLT0gby0+bGF5ZXIoKS0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CisKKyAgICByZXR1cm4g
b2Zmc2V0OworfQorCitJbnRSZWN0IFJlbmRlck9iamVjdDo6bG9jYWxDYXJldFJlY3QoSW5saW5l
Qm94KiBpbmxpbmVCb3gsIGludCBjYXJldE9mZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxp
bmUpCiB7CiAgICBpZiAoZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQogICAgICAgICpleHRyYVdpZHRo
VG9FbmRPZkxpbmUgPSAwOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCA5OWIyMzA5Li5l
MzM1MjJjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysg
Yi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtNDY5LDcgKzQ2OSw3IEBAIHB1
YmxpYzoKICAgICAgICAgfQogCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dDsKLSAg
ICAgICAgSW50UmVjdCByZWN0OworICAgICAgICBJbnRSZWN0IHJlY3Q7ICAgLy8gcmVjdCBiZWlu
ZyBkcmF3bgogICAgICAgICBQYWludFBoYXNlIHBoYXNlOwogICAgICAgICBib29sIGZvcmNlQmxh
Y2tUZXh0OwogICAgICAgICBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdDsgLy8gdXNlZCB0byBk
cmF3IGp1c3Qgb25lIGVsZW1lbnQgYW5kIGl0cyB2aXN1YWwga2lkcwpAQCAtNjAyLDYgKzYwMiw5
IEBAIHB1YmxpYzoKICAgICAvLyBDb252ZXJ0IGEgbG9jYWwgcXVhZCB0byBhbiBhYnNvbHV0ZSBx
dWFkLCB0YWtpbmcgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQuCiAgICAgdmlydHVhbCBGbG9hdFF1
YWQgbG9jYWxUb0Fic29sdXRlUXVhZChjb25zdCBGbG9hdFF1YWQmLCBib29sIGZpeGVkID0gZmFs
c2UpIGNvbnN0OwogCisgICAgLy8gUmV0dXJuIHRoZSBvZmZzZXQgZnJvbSB0aGUgY29udGFpbmVy
KCkgcmVuZGVyZXIgKGV4Y2x1ZGluZyB0cmFuc2Zvcm1zKQorICAgIHZpcnR1YWwgSW50U2l6ZSBv
ZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlck9iamVjdCopIGNvbnN0OworCiAgICAgLy8gd2lkdGgg
YW5kIGhlaWdodCBhcmUgd2l0aG91dCBtYXJnaW5zIGJ1dCBpbmNsdWRlIHBhZGRpbmdzIGFuZCBi
b3JkZXJzCiAgICAgdmlydHVhbCBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAg
dmlydHVhbCBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gMDsgfQpAQCAtODQ1LDE0ICs4NDgs
MTIgQEAgcHVibGljOgogICAgIE5vZGUqIGRyYWdnYWJsZU5vZGUoYm9vbCBkaHRtbE9LLCBib29s
IHVhT0ssIGludCB4LCBpbnQgeSwgYm9vbCYgZGh0bWxXaWxsRHJhZykgY29uc3Q7CiAKICAgICAv
KioKLSAgICAgKiBSZXR1cm5zIHRoZSBjb250ZW50IGNvb3JkaW5hdGVzIG9mIHRoZSBjYXJldCB3
aXRoaW4gdGhpcyByZW5kZXIgb2JqZWN0LgotICAgICAqIEBwYXJhbSBvZmZzZXQgemVyby1iYXNl
ZCBvZmZzZXQgZGV0ZXJtaW5pbmcgcG9zaXRpb24gd2l0aGluIHRoZSByZW5kZXIgb2JqZWN0Lgot
ICAgICAqIEBwYXJhbSBvdmVycmlkZSBAcCB0cnVlIGlmIGlucHV0IG92ZXJyaWRlcyBleGlzdGlu
ZyBjaGFyYWN0ZXJzLAotICAgICAqIEBwIGZhbHNlIGlmIGl0IGluc2VydHMgdGhlbS4gVGhlIHdp
ZHRoIG9mIHRoZSBjYXJldCBkZXBlbmRzIG9uIHRoaXMgb25lLgorICAgICAqIFJldHVybnMgdGhl
IGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBjYXJldCB3aXRoaW4gdGhpcyByZW5kZXIgb2JqZWN0
LgorICAgICAqIEBwYXJhbSBjYXJldE9mZnNldCB6ZXJvLWJhc2VkIG9mZnNldCBkZXRlcm1pbmlu
ZyBwb3NpdGlvbiB3aXRoaW4gdGhlIHJlbmRlciBvYmplY3QuCiAgICAgICogQHBhcmFtIGV4dHJh
V2lkdGhUb0VuZE9mTGluZSBvcHRpb25hbCBvdXQgYXJnIHRvIGdpdmUgZXh0cmEgd2lkdGggdG8g
ZW5kIG9mIGxpbmUgLQogICAgICAqIHVzZWZ1bCBmb3IgY2hhcmFjdGVyIHJhbmdlIHJlY3QgY29t
cHV0YXRpb25zCiAgICAgICovCi0gICAgdmlydHVhbCBJbnRSZWN0IGNhcmV0UmVjdChJbmxpbmVC
b3gqLCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCk7Cisg
ICAgdmlydHVhbCBJbnRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGludCBjYXJldE9m
ZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKTsKIAogICAgIHZpcnR1YWwgaW50
IGxvd2VzdFBvc2l0aW9uKGJvb2wgLyppbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciovID0gdHJ1ZSwg
Ym9vbCAvKmluY2x1ZGVTZWxmKi8gPSB0cnVlKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgdmly
dHVhbCBpbnQgcmlnaHRtb3N0UG9zaXRpb24oYm9vbCAvKmluY2x1ZGVPdmVyZmxvd0ludGVyaW9y
Ki8gPSB0cnVlLCBib29sIC8qaW5jbHVkZVNlbGYqLyA9IHRydWUpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuY3Bw
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKaW5kZXggODdhODli
NC4uMzg1ZDE5ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5l
VGV4dC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAK
QEAgLTEyOSw3ICsxMjksNyBAQCBJbmxpbmVUZXh0Qm94KiBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpj
cmVhdGVJbmxpbmVUZXh0Qm94KCkKICAgICByZXR1cm4gbmV3IChyZW5kZXJBcmVuYSgpKSBTVkdJ
bmxpbmVUZXh0Qm94KHRoaXMpOwogfQogCi1JbnRSZWN0IFJlbmRlclNWR0lubGluZVRleHQ6OmNh
cmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJh
V2lkdGhUb0VuZE9mTGluZSkKK0ludFJlY3QgUmVuZGVyU1ZHSW5saW5lVGV4dDo6bG9jYWxDYXJl
dFJlY3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIGludCBjYXJldE9mZnNldCwgaW50KiBleHRyYVdp
ZHRoVG9FbmRPZkxpbmUpCiB7CiAgICAgLy8gU1ZHIGRvZXNuJ3QgaGF2ZSBhbnkgZWRpdGFibGUg
Y29udGVudCB3aGVyZSBhIGNhcmV0IHJlY3Qgd291bGQgYmUgbmVlZGVkCiAgICAgcmV0dXJuIElu
dFJlY3QoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRl
eHQuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuaAppbmRleCBkYzdl
ODUxLi5jYzM3MTY2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxp
bmVUZXh0LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCkBA
IC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdUZXh0KCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgSW5saW5lVGV4dEJveCogY3JlYXRlSW5s
aW5lVGV4dEJveCgpOwogCi0gICAgdmlydHVhbCBJbnRSZWN0IGNhcmV0UmVjdChJbmxpbmVCb3gq
LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCk7CisgICAg
dmlydHVhbCBJbnRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGludCBjYXJldE9mZnNl
dCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKTsKICAgICB2aXJ0dWFsIFZpc2libGVQ
b3NpdGlvbiBwb3NpdGlvbkZvckNvb3JkaW5hdGVzKGludCB4LCBpbnQgeSk7CiAKICAgICB2aXJ0
dWFsIHZvaWQgZGVzdHJveSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAppbmRleCA4ZDg3OTRi
Li5iMGZmNGY2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAor
KysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcApAQCAtNTUsNiArNTUsOCBAQCBS
ZW5kZXJUZXh0OjpSZW5kZXJUZXh0KE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
c3RyKQogICAgICAsIG1fbGFzdFRleHRCb3goMCkKICAgICAgLCBtX21pbldpZHRoKC0xKQogICAg
ICAsIG1fbWF4V2lkdGgoLTEpCisgICAgICwgbV9iZWdpbk1pbldpZHRoKDApCisgICAgICwgbV9l
bmRNaW5XaWR0aCgwKQogICAgICAsIG1fc2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uTm9uZSkKICAg
ICAgLCBtX2hhc1RhYihmYWxzZSkKICAgICAgLCBtX2xpbmVzRGlydHkoZmFsc2UpCkBAIC0zNjIs
NyArMzY0LDcgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlclRleHQ6OnBvc2l0aW9uRm9yQ29vcmRp
bmF0ZXMoaW50IHgsIGludCB5KQogICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZWxlbWVudCgp
LCBsYXN0Qm94QWJvdmUgPyBsYXN0Qm94QWJvdmUtPm1fc3RhcnQgKyBsYXN0Qm94QWJvdmUtPm1f
bGVuIDogMCwgRE9XTlNUUkVBTSk7CiB9CiAKLUludFJlY3QgUmVuZGVyVGV4dDo6Y2FyZXRSZWN0
KElubGluZUJveCogaW5saW5lQm94LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRv
RW5kT2ZMaW5lKQorSW50UmVjdCBSZW5kZXJUZXh0Ojpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gq
IGlubGluZUJveCwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkK
IHsKICAgICBpZiAoIWlubGluZUJveCkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKQEAgLTM4
NCwyMSArMzg2LDE3IEBAIEludFJlY3QgUmVuZGVyVGV4dDo6Y2FyZXRSZWN0KElubGluZUJveCog
aW5saW5lQm94LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXCiAgICAgaWYgKGV4dHJhV2lk
dGhUb0VuZE9mTGluZSkKICAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IChib3gtPnJv
b3QoKS0+d2lkdGgoKSArIHJvb3RMZWZ0KSAtIChsZWZ0ICsgMSk7CiAKLSAgICAvLyBGSVhNRTog
YnJva2VuIHdpdGggdHJhbnNmb3JtcwotICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fi
c29sdXRlRm9yQ29udGVudChGbG9hdFBvaW50KCkpOwotICAgIGxlZnQgKz0gYWJzUG9zLngoKTsK
LSAgICB0b3AgKz0gYWJzUG9zLnkoKTsKLQogICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5p
bmdCbG9jaygpOwogICAgIGlmIChzdHlsZSgpLT5hdXRvV3JhcCgpKSB7CiAgICAgICAgIGludCBh
dmFpbGFibGVXaWR0aCA9IGNiLT5saW5lV2lkdGgodG9wKTsKICAgICAgICAgaWYgKGJveC0+ZGly
ZWN0aW9uKCkgPT0gTFRSKQotICAgICAgICAgICAgbGVmdCA9IG1pbihsZWZ0LCBzdGF0aWNfY2Fz
dDxpbnQ+KGFic1Bvcy54KCkpICsgcm9vdExlZnQgKyBhdmFpbGFibGVXaWR0aCAtIDEpOworICAg
ICAgICAgICAgbGVmdCA9IG1pbihsZWZ0LCByb290TGVmdCArIGF2YWlsYWJsZVdpZHRoIC0gMSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxlZnQgPSBtYXgobGVmdCwgc3RhdGljX2Nhc3Q8
aW50PihhYnNQb3MueCgpKSArIHJvb3RMZWZ0KTsKKyAgICAgICAgICAgIGxlZnQgPSBtYXgobGVm
dCwgcm9vdExlZnQpOwogICAgIH0KIAotICAgIHJldHVybiBJbnRSZWN0KGxlZnQsIHRvcCwgMSwg
aGVpZ2h0KTsKKyAgICBjb25zdCBpbnQgY2FyZXRXaWR0aCA9IDE7CisgICAgcmV0dXJuIEludFJl
Y3QobGVmdCwgdG9wLCBjYXJldFdpZHRoLCBoZWlnaHQpOwogfQogCiBBTFdBWVNfSU5MSU5FIGlu
dCBSZW5kZXJUZXh0Ojp3aWR0aEZyb21DYWNoZShjb25zdCBGb250JiBmLCBpbnQgc3RhcnQsIGlu
dCBsZW4sIGludCB4UG9zKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCmluZGV4IDA4ZTEwMzUu
LmFjNTEwMmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAorKysg
Yi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKQEAgLTEwNiw3ICsxMDYsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBTZWxlY3Rpb25TdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PFNlbGVjdGlvblN0YXRlPihtX3NlbGVjdGlvblN0YXRlKTsgfQog
ICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSBzKTsKICAg
ICB2aXJ0dWFsIEludFJlY3Qgc2VsZWN0aW9uUmVjdChib29sIGNsaXBUb1Zpc2libGVDb250ZW50
ID0gdHJ1ZSk7Ci0gICAgdmlydHVhbCBJbnRSZWN0IGNhcmV0UmVjdChJbmxpbmVCb3gqLCBpbnQg
Y2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCk7CisgICAgdmlydHVh
bCBJbnRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGludCBjYXJldE9mZnNldCwgaW50
KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKTsKIAogICAgIHZpcnR1YWwgaW50IG1hcmdpbkxl
ZnQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5tYXJnaW5MZWZ0KCkuY2FsY01pblZhbHVlKDAp
OyB9CiAgICAgdmlydHVhbCBpbnQgbWFyZ2luUmlnaHQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgp
LT5tYXJnaW5SaWdodCgpLmNhbGNNaW5WYWx1ZSgwKTsgfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCBhZjU1NTc2Li40MzE0M2Ey
IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9XZWJLaXQvbWFjL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDA4LTExLTE0ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5m
cmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY3MQor
CisgICAgICAgIFZpc2libGVQb3NpdGlvbjo6Y2FyZXRSZWN0KCkgd2FzIHJlbmFlbWQgdG8gYWJz
b2x1dGVDYXJldEJvdW5kcygpLgorCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAg
ICAgICAgKC1bV2ViRnJhbWUgX2NhcmV0UmVjdEF0Tm9kZTpvZmZzZXQ6YWZmaW5pdHk6XSk6CisK
IDIwMDgtMTEtMTYgIEdyZWcgQm9sc2luZ2EgIDxib2xzaW5nYUBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViRnJhbWUubW0gYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggNzcz
NzgyMC4uMjE5ZTc5NyAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
CisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtNjcxLDcgKzY3MSw3IEBA
IHN0YXRpYyBpbmxpbmUgV2ViRGF0YVNvdXJjZSAqZGF0YVNvdXJjZShEb2N1bWVudExvYWRlciog
bG9hZGVyKQogLSAoTlNSZWN0KV9jYXJldFJlY3RBdE5vZGU6KERPTU5vZGUgKilub2RlIG9mZnNl
dDooaW50KW9mZnNldCBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlhZmZpbml0eQogewog
ICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb24oW25vZGUgX25vZGVdLCBvZmZzZXQs
IHN0YXRpY19jYXN0PEVBZmZpbml0eT4oYWZmaW5pdHkpKTsKLSAgICByZXR1cm4gdmlzaWJsZVBv
c2l0aW9uLmNhcmV0UmVjdCgpOworICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb24uYWJzb2x1dGVD
YXJldEJvdW5kcygpOwogfQogCiAtIChOU1JlY3QpX2ZpcnN0UmVjdEZvckRPTVJhbmdlOihET01S
YW5nZSAqKXJhbmdlCg==
</data>
<flag name="review"
          id="11641"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>