<?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>121107</bug_id>
          
          <creation_ts>2013-09-10 11:42:41 -0700</creation_ts>
          <short_desc>Move LineWidth out of RenderBlockLineLayout</short_desc>
          <delta_ts>2013-09-12 14:47:02 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>121191</blocked>
    
    <blocked>121261</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zoltan Horvath">zoltan</reporter>
          <assigned_to name="Zoltan Horvath">zoltan</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rakuco</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>927397</commentid>
    <comment_count>0</comment_count>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2013-09-10 11:42:41 -0700</bug_when>
    <thetext>Move LineWidth class and related code into LineWidth.{h,cpp}.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927400</commentid>
    <comment_count>1</comment_count>
      <attachid>211218</attachid>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2013-09-10 11:52:39 -0700</bug_when>
    <thetext>Created attachment 211218
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927505</commentid>
    <comment_count>2</comment_count>
      <attachid>211218</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-09-10 14:28:41 -0700</bug_when>
    <thetext>Comment on attachment 211218
proposed patch

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

&gt; Source/WebCore/rendering/LineWidth.h:38
&gt; +static LayoutUnit logicalHeightForLine(const RenderBlock* block, bool isFirstLine, LayoutUnit replacedHeight = 0)

Does this function really need to be in the header?  If so, you should not mark it static, but rather inline.

&gt; Source/WebCore/rendering/LineWidth.h:53
&gt; +    LineWidth(RenderBlock* block, bool isFirstLine, IndentTextOrNot shouldIndentText)

Is it necessary for the constructor to be inline?

&gt; Source/WebCore/rendering/LineWidth.h:108
&gt; +    bool fitsOnLineExcludingTrailingCollapsedWhitespace() const { return currentWidth() - m_trailingCollapsedWhitespaceWidth &lt;= m_availableWidth; }

This should probably be on multiple lines if the one above it is.

&gt; Source/WebCore/rendering/LineWidth.h:110
&gt; +private:

This private: is redundant.

&gt; Source/WebCore/rendering/LineWidth.h:144
&gt; +inline void LineWidth::shrinkAvailableWidthForNewFloatIfNeeded(FloatingObject* newFloat)

This is an awfully big function to inline.  Are you sure it is worth it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927542</commentid>
    <comment_count>3</comment_count>
      <attachid>211252</attachid>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2013-09-10 15:15:05 -0700</bug_when>
    <thetext>Created attachment 211252
proposed patch

Please note that I was just moved out the code from RenderBlockLineLayout.cpp. In this patch I addressed your comments.

(In reply to comment #2)
&gt; (From update of attachment 211218 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=211218&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/LineWidth.h:38
&gt; &gt; +static LayoutUnit logicalHeightForLine(const RenderBlock* block, bool isFirstLine, LayoutUnit replacedHeight = 0)
&gt; 
&gt; Does this function really need to be in the header?  If so, you should not mark it static, but rather inline.

It&apos;s used by both RenderBlockLineLayout.cpp and LineWidth.cpp. I made it inline. I&apos;m going to move that function to RenderBlock and make a member of it in a separate patch.

&gt; &gt; Source/WebCore/rendering/LineWidth.h:53
&gt; &gt; +    LineWidth(RenderBlock* block, bool isFirstLine, IndentTextOrNot shouldIndentText)
&gt; 
&gt; Is it necessary for the constructor to be inline?

No. I moved it to the cpp.

&gt; &gt; Source/WebCore/rendering/LineWidth.h:108
&gt; &gt; +    bool fitsOnLineExcludingTrailingCollapsedWhitespace() const { return currentWidth() - m_trailingCollapsedWhitespaceWidth &lt;= m_availableWidth; }
&gt; 
&gt; This should probably be on multiple lines if the one above it is.

Yeah, I moved these things to the cpp. 

&gt; &gt; Source/WebCore/rendering/LineWidth.h:110
&gt; &gt; +private:
&gt; 
&gt; This private: is redundant.

Removed.

&gt; &gt; Source/WebCore/rendering/LineWidth.h:144
&gt; &gt; +inline void LineWidth::shrinkAvailableWidthForNewFloatIfNeeded(FloatingObject* newFloat)
&gt; 
&gt; This is an awfully big function to inline.  Are you sure it is worth it?

Probably it had been inline before that it has got big. I removed the moved to the cpp. We can inline it later if the performance measurements suggest that it&apos;s actually worth it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927544</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-10 15:19:26 -0700</bug_when>
    <thetext>Attachment 211252 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/Target.pri&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/rendering/LineWidth.cpp&apos;, u&apos;Source/WebCore/rendering/LineWidth.h&apos;, u&apos;Source/WebCore/rendering/RenderBlockLineLayout.cpp&apos;]&quot; exit_code: 1
Source/WebCore/rendering/LineWidth.h:53:  The parameter name &quot;block&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927547</commentid>
    <comment_count>5</comment_count>
      <attachid>211253</attachid>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2013-09-10 15:24:49 -0700</bug_when>
    <thetext>Created attachment 211253
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927667</commentid>
    <comment_count>6</comment_count>
      <attachid>211253</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-09-11 00:23:36 -0700</bug_when>
    <thetext>Comment on attachment 211253
proposed patch

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

&gt; Source/WebCore/rendering/LineWidth.h:34
&gt; +#include &quot;RenderBlock.h&quot;
&gt; +#include &quot;RenderRubyRun.h&quot;

Do either of these really need to be in the header?

&gt; Source/WebCore/rendering/LineWidth.h:48
&gt; +    return max&lt;LayoutUnit&gt;(replacedHeight, block-&gt;lineHeight(isFirstLine, block-&gt;isHorizontalWritingMode() ? HorizontalLine : VerticalLine, PositionOfInteriorLineBoxes));

I am surprised this compiles without the std::.  I would add it though.

&gt; Source/WebCore/rendering/LineWidth.h:79
&gt; +    RenderBlock* m_block;

It looks like this is never null, can we make it a RenderBlock&amp;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927862</commentid>
    <comment_count>7</comment_count>
      <attachid>211329</attachid>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2013-09-11 10:51:21 -0700</bug_when>
    <thetext>Created attachment 211329
proposed patch

(In reply to comment #6)
&gt; (From update of attachment 211253 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=211253&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/LineWidth.h:34
&gt; &gt; +#include &quot;RenderBlock.h&quot;
&gt; &gt; +#include &quot;RenderRubyRun.h&quot;
&gt; 
&gt; Do either of these really need to be in the header?

For now, yes. I&apos;d like to move logicalHeightForLine to RenderBlock in a separate patch, I&apos;ll remove the includes along with that patch.

&gt; &gt; Source/WebCore/rendering/LineWidth.h:48
&gt; &gt; +    return max&lt;LayoutUnit&gt;(replacedHeight, block-&gt;lineHeight(isFirstLine, block-&gt;isHorizontalWritingMode() ? HorizontalLine : VerticalLine, PositionOfInteriorLineBoxes));
&gt; 
&gt; I am surprised this compiles without the std::.  I would add it though.

Added.

&gt; &gt; Source/WebCore/rendering/LineWidth.h:79
&gt; &gt; +    RenderBlock* m_block;
&gt; 
&gt; It looks like this is never null, can we make it a RenderBlock&amp;?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927955</commentid>
    <comment_count>8</comment_count>
      <attachid>211329</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-09-11 13:27:21 -0700</bug_when>
    <thetext>Comment on attachment 211329
proposed patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927981</commentid>
    <comment_count>9</comment_count>
      <attachid>211329</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-11 14:28:40 -0700</bug_when>
    <thetext>Comment on attachment 211329
proposed patch

Clearing flags on attachment: 211329

Committed r155565: &lt;http://trac.webkit.org/changeset/155565&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927982</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-11 14:28:43 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211218</attachid>
            <date>2013-09-10 11:52:39 -0700</date>
            <delta_ts>2013-09-10 15:15:05 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>movelinewidth.patch</filename>
            <type>text/plain</type>
            <size>32683</size>
            <attacher name="Zoltan Horvath">zoltan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMTU4OTk4Ni4uYWIxOTZmYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTIxMDgsNiArMjEwOCw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKICAgICByZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCiAg
ICAgcmVuZGVyaW5nL0xheW91dFJlcGFpbnRlci5jcHAKKyAgICByZW5kZXJpbmcvTGluZVdpZHRo
LmNwcAogICAgIHJlbmRlcmluZy9Qb2ludGVyRXZlbnRzSGl0UnVsZXMuY3BwCiAgICAgcmVuZGVy
aW5nL1JlbmRlckFwcGxldC5jcHAKICAgICByZW5kZXJpbmcvUmVuZGVyQXJlbmEuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggODdhZGM0NS4uNzE0ZDZhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisy
MDEzLTA5LTEwICBab2x0YW4gSG9ydmF0aCAgPHpvbHRhbkB3ZWJraXQub3JnPgorCisgICAgICAg
IE1vdmUgTGluZVdpZHRoIG91dCBvZiBSZW5kZXJCbG9ja0xpbmVMYXlvdXQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTEwNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgTGluZVdpZHRoIGNsYXNz
IGFuZCByZWxhdGVkIGNvZGUgaW50byBMaW5lV2lkdGgue2gsY3BwfS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToK
KyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvTGlu
ZVdpZHRoLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OmFwcGx5T3Zl
cmhhbmcpOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRoOjpmaXRCZWxvd0Zsb2F0cyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL0xpbmVXaWR0aC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmxvZ2ljYWxIZWlnaHRGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVXaWR0aDo6TGlu
ZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVXaWR0aDo6Zml0c09uTGluZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OmZpdHNPbkxpbmVJbmNsdWRpbmdFeHRyYVdpZHRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkxpbmVXaWR0aDo6Zml0c09uTGluZUV4Y2x1ZGluZ1RyYWlsaW5n
V2hpdGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OmN1cnJlbnRXaWR0aCk6
CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OnVuY29tbWl0dGVkV2lkdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6TGluZVdpZHRoOjpjb21taXR0ZWRXaWR0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpMaW5lV2lkdGg6OmF2YWlsYWJsZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVXaWR0
aDo6YWRkVW5jb21taXR0ZWRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OmNv
bW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OnNldFRyYWlsaW5nV2hpdGVzcGFj
ZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVXaWR0aDo6c2hvdWxkSW5kZW50VGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OmNvbXB1dGVBdmFpbGFibGVXaWR0aEZyb21M
ZWZ0QW5kUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRoOjpmaXRzT25MaW5lRXhj
bHVkaW5nVHJhaWxpbmdDb2xsYXBzZWRXaGl0ZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Okxp
bmVXaWR0aDo6dXBkYXRlQXZhaWxhYmxlV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdp
ZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorCiAyMDEzLTA5LTA5ICBBbmRy
ZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBIaWRlIG5vZGUoKSBiZWxv
dyBSZW5kZXJTVkdNb2RlbE9iamVjdCwgdXNlIGVsZW1lbnQoKSBpbnN0ZWFkLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggNWZhNzIwNy4uOGFlNjMyMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCkBAIC00MzY2LDYgKzQzNjYsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Mb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVz
LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRSZXBhaW50ZXIuaCBcCiAJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFJlcGFpbnRlci5jcHAgXAorCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9MaW5lV2lkdGguaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xp
bmVXaWR0aC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9PdmVybGFwVGVzdFJlcXVl
c3RDbGllbnQuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1BhZ2luYXRpb24uaCBcCiAJ
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1BhaW50SW5mby5oIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDZm
MzhkN2QuLmJjYjZlMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysr
IGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMTE1MSw2ICsxMTUxLDcgQEAgU09VUkNF
UyArPSBcCiAgICAgcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwIFwKICAgICByZW5kZXJpbmcv
TGF5b3V0U3RhdGUuY3BwIFwKICAgICByZW5kZXJpbmcvTGF5b3V0UmVwYWludGVyLmNwcCBcCisg
ICAgcmVuZGVyaW5nL0xpbmVXaWR0aC5jcHAgXAogICAgIHJlbmRlcmluZy9SZW5kZXJBcHBsZXQu
Y3BwIFwKICAgICByZW5kZXJpbmcvUmVuZGVyQXJlbmEuY3BwIFwKICAgICByZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwIFwKQEAgLTI0MDQsNiArMjQwNSw3IEBAIEhFQURFUlMgKz0gXAogICAgIHJl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmggXAogICAgIHJlbmRlcmluZy9MYXlvdXRSZXBhaW50ZXIu
aCBcCiAgICAgcmVuZGVyaW5nL0xheW91dFN0YXRlLmggXAorICAgIHJlbmRlcmluZy9MaW5lV2lk
dGguaCBcCiAgICAgcmVuZGVyaW5nL0xvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMuaCBcCiAg
ICAgcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oIFwKICAgICByZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCmluZGV4IDI3NTc0MGYuLjQ0YjJiZTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAtOTY0Miw2
ICs5NjQyLDcgQEAKICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRl
ZEZyb21CdWlsZD4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+dHJ1ZTwvRXhjbHVkZWRG
cm9tQnVpbGQ+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
ZW5kZXJpbmdcTGluZVdpZHRoLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJl
bmRlcmluZ1xQb2ludGVyRXZlbnRzSGl0UnVsZXMuY3BwIj4KICAgICAgIDxFeGNsdWRlZEZyb21C
dWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdp
bjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50
cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KQEAgLTIwMDE1LDYgKzIwMDE2LDcgQEAKICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xJbmxpbmVUZXh0Qm94LmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcTGF5b3V0UmVwYWludGVyLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcTGF5b3V0U3RhdGUuaCIgLz4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xMaW5lV2lkdGguaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xQYWludEluZm8uaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xQYWludFBoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiIC8+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
NDY2NjYyZS4uNzZmOTgwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzQxOCw2ICszNDIwLDggQEAKIAkJQTA3RDMzNTYxNTJC
NjMwRTAwMUI2MzkzIC8qIEpTV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwN0QzMzU0MTUyQjYzMEUwMDFC
NjM5MyAvKiBKU1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmggKi87IH07CiAJCUEwN0QzMzU4
MTUyQjYzMkQwMDFCNjM5MyAvKiBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTA3RDMzNTcxNTJCNjMyRDAw
MUI2MzkzIC8qIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmggKi87IH07CiAJCUEwOENGMTU0
MTUyQjc3QjMwMDlDNTc3NSAvKiBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMDhDRjE1MzE1MkI3N0Iz
MDA5QzU3NzUgLyogV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuY3BwICovOyB9OworCQlBMENC
MDAyNDE3REY4MjY2MDAxNzg5NkIgLyogTGluZVdpZHRoLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQ0IwMDIzMTdERjgxQUMwMDE3ODk2QiAvKiBM
aW5lV2lkdGguY3BwICovOyB9OworCQlBMENCMDAyNTE3REY4MjZDMDAxNzg5NkIgLyogTGluZVdp
ZHRoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMENC
MDAyMTE3REU5Q0QwMDAxNzg5NkIgLyogTGluZVdpZHRoLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoKTsgfTsgfTsKIAkJQTBFRTBERjUxNDRGODI1NTAwRjgwQjBEIC8qIFdlYkdMRGVi
dWdSZW5kZXJlckluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTBFRTBERjExNDRGODI1NTAwRjgwQjBEIC8qIFdlYkdMRGVidWdSZW5kZXJlcklu
Zm8uY3BwICovOyB9OwogCQlBMEVFMERGNjE0NEY4MjU1MDBGODBCMEQgLyogV2ViR0xEZWJ1Z1Jl
bmRlcmVySW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTBFRTBERjIxNDRGODI1NTAwRjgwQjBEIC8qIFdlYkdMRGVidWdSZW5kZXJlckluZm8uaCAq
LzsgfTsKIAkJQTBFRTBERjcxNDRGODI1NTAwRjgwQjBEIC8qIFdlYkdMRGVidWdTaGFkZXJzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwRUUwREYz
MTQ0RjgyNTUwMEY4MEIwRCAvKiBXZWJHTERlYnVnU2hhZGVycy5jcHAgKi87IH07CkBAIC0xMDAx
MSw2ICsxMDAxNSw4IEBACiAJCUEwN0QzMzU3MTUyQjYzMkQwMDFCNjM5MyAvKiBXZWJHTFNoYWRl
clByZWNpc2lvbkZvcm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJH
TFNoYWRlclByZWNpc2lvbkZvcm1hdC5oOyBwYXRoID0gY2FudmFzL1dlYkdMU2hhZGVyUHJlY2lz
aW9uRm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEwN0QzMzU5MTUyQjYz
M0UwMDFCNjM5MyAvKiBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBuYW1lID0gV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaWRsOyBwYXRoID0gY2FudmFz
L1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTA4Q0YxNTMxNTJCNzdCMzAwOUM1Nzc1IC8qIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9y
bWF0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdMU2hhZGVy
UHJlY2lzaW9uRm9ybWF0LmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTFNoYWRlclByZWNpc2lvbkZv
cm1hdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEwQ0IwMDIxMTdERTlDRDAw
MDE3ODk2QiAvKiBMaW5lV2lkdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TGluZVdpZHRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEwQ0IwMDIzMTdERjgx
QUMwMDE3ODk2QiAvKiBMaW5lV2lkdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTGluZVdpZHRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTBF
RTBERUYxNDRGODIzMjAwRjgwQjBEIC8qIFdlYkdMRGVidWdTaGFkZXJzLmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IG5hbWUgPSBXZWJHTERlYnVnU2hhZGVycy5pZGw7IHBhdGggPSBjYW52YXMvV2ViR0xE
ZWJ1Z1NoYWRlcnMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMEVFMERGMDE0
NEY4MjQzMDBGODBCMEQgLyogV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBuYW1lID0gV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5pZGw7IHBhdGggPSBjYW52YXMvV2Vi
R0xEZWJ1Z1JlbmRlcmVySW5mby5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEw
RUUwREYxMTQ0RjgyNTUwMEY4MEIwRCAvKiBXZWJHTERlYnVnUmVuZGVyZXJJbmZvLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdMRGVidWdSZW5kZXJlckluZm8u
Y3BwOyBwYXRoID0gY2FudmFzL1dlYkdMRGVidWdSZW5kZXJlckluZm8uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjAzODUsNiArMjAzODksOCBAQAogCQkJCUExMjBBQ0EwMTNG
OTk4MzcwMEZFNEFDNyAvKiBMYXlvdXRSZXBhaW50ZXIuaCAqLywKIAkJCQkyRDkwNjYwNDBCRTE0
MUQ0MDA5NTY5OTggLyogTGF5b3V0U3RhdGUuY3BwICovLAogCQkJCTJEOTA2NjA1MEJFMTQxRDQw
MDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5oICovLAorCQkJCUEwQ0IwMDIzMTdERjgxQUMwMDE3ODk2
QiAvKiBMaW5lV2lkdGguY3BwICovLAorCQkJCUEwQ0IwMDIxMTdERTlDRDAwMDE3ODk2QiAvKiBM
aW5lV2lkdGguaCAqLywKIAkJCQk5QkEyNzNGMzE3MjIwNkJCMDA5N0NFNDcgLyogTG9naWNhbFNl
bGVjdGlvbk9mZnNldENhY2hlcy5oICovLAogCQkJCTM3NzRBQkEzMEZBMjFFQjQwMEFEN0RFOSAv
KiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLywKIAkJCQk5Mzc3QUI5RjE1REVGRUVGMDAz
MUZEMDQgLyogUGFnaW5hdGlvbi5oICovLApAQCAtMjQ1NTQsNiArMjQ1NjAsNyBAQAogCQkJCUJF
MTZDNTkzMTdDRkUxNzIwMDg1MkMwNCAvKiBJbmJhbmRHZW5lcmljVGV4dFRyYWNrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCRTE2QzU5NTE3Q0ZFMTcyMDA4NTJDMDQgLyogSW5iYW5kV2ViVlRUVGV4
dFRyYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzEwRDc2ODE3RDhFRTcxMDA1RTI2MjYgLyog
UmVuZGVyQmxvY2tGbG93LmggaW4gSGVhZGVycyAqLywKKwkJCQlBMENCMDAyNTE3REY4MjZDMDAx
Nzg5NkIgLyogTGluZVdpZHRoLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI3NTc4LDYgKzI3NTg1LDcg
QEAKIAkJCQlCRTE2QzU5MjE3Q0ZFMTcyMDA4NTJDMDQgLyogSW5iYW5kR2VuZXJpY1RleHRUcmFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCRTE2QzU5NDE3Q0ZFMTcyMDA4NTJDMDQgLyogSW5i
YW5kV2ViVlRUVGV4dFRyYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMTBENzY3MTdEOEVF
NkUwMDVFMjYyNiAvKiBSZW5kZXJCbG9ja0Zsb3cuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTBD
QjAwMjQxN0RGODI2NjAwMTc4OTZCIC8qIExpbmVXaWR0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MaW5lV2lkdGguY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0xpbmVXaWR0aC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZjg4YzRhMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9MaW5lV2lkdGguY3BwCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICog
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1l
ciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAor
ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJMaW5lV2lkdGguaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit2b2lkIExpbmVXaWR0aDo6YXBwbHlPdmVyaGFuZyhSZW5kZXJSdWJ5UnVuKiBydWJ5UnVuLCBS
ZW5kZXJPYmplY3QqIHN0YXJ0UmVuZGVyZXIsIFJlbmRlck9iamVjdCogZW5kUmVuZGVyZXIpCit7
CisgICAgaW50IHN0YXJ0T3Zlcmhhbmc7CisgICAgaW50IGVuZE92ZXJoYW5nOworICAgIHJ1YnlS
dW4tPmdldE92ZXJoYW5nKG1faXNGaXJzdExpbmUsIHN0YXJ0UmVuZGVyZXIsIGVuZFJlbmRlcmVy
LCBzdGFydE92ZXJoYW5nLCBlbmRPdmVyaGFuZyk7CisKKyAgICBzdGFydE92ZXJoYW5nID0gc3Rk
OjptaW48aW50PihzdGFydE92ZXJoYW5nLCBtX2NvbW1pdHRlZFdpZHRoKTsKKyAgICBtX2F2YWls
YWJsZVdpZHRoICs9IHN0YXJ0T3Zlcmhhbmc7CisKKyAgICBlbmRPdmVyaGFuZyA9IHN0ZDo6bWF4
KHN0ZDo6bWluPGludD4oZW5kT3ZlcmhhbmcsIG1fYXZhaWxhYmxlV2lkdGggLSBjdXJyZW50V2lk
dGgoKSksIDApOworICAgIG1fYXZhaWxhYmxlV2lkdGggKz0gZW5kT3Zlcmhhbmc7CisgICAgbV9v
dmVyaGFuZ1dpZHRoICs9IHN0YXJ0T3ZlcmhhbmcgKyBlbmRPdmVyaGFuZzsKK30KKwordm9pZCBM
aW5lV2lkdGg6OmZpdEJlbG93RmxvYXRzKCkKK3sKKyAgICBBU1NFUlQoIW1fY29tbWl0dGVkV2lk
dGgpOworICAgIEFTU0VSVCghZml0c09uTGluZSgpKTsKKworICAgIExheW91dFVuaXQgZmxvYXRM
b2dpY2FsQm90dG9tOworICAgIExheW91dFVuaXQgbGFzdEZsb2F0TG9naWNhbEJvdHRvbSA9IG1f
YmxvY2stPmxvZ2ljYWxIZWlnaHQoKTsKKyAgICBmbG9hdCBuZXdMaW5lV2lkdGggPSBtX2F2YWls
YWJsZVdpZHRoOworICAgIGZsb2F0IG5ld0xpbmVMZWZ0ID0gbV9sZWZ0OworICAgIGZsb2F0IG5l
d0xpbmVSaWdodCA9IG1fcmlnaHQ7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgZmxvYXRM
b2dpY2FsQm90dG9tID0gbV9ibG9jay0+bmV4dEZsb2F0TG9naWNhbEJvdHRvbUJlbG93KGxhc3RG
bG9hdExvZ2ljYWxCb3R0b20pOworICAgICAgICBpZiAoZmxvYXRMb2dpY2FsQm90dG9tIDw9IGxh
c3RGbG9hdExvZ2ljYWxCb3R0b20pCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBuZXdM
aW5lTGVmdCA9IG1fYmxvY2stPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShmbG9hdExvZ2ljYWxC
b3R0b20sIHNob3VsZEluZGVudFRleHQoKSk7CisgICAgICAgIG5ld0xpbmVSaWdodCA9IG1fYmxv
Y2stPmxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoZmxvYXRMb2dpY2FsQm90dG9tLCBzaG91bGRJ
bmRlbnRUZXh0KCkpOworICAgICAgICBuZXdMaW5lV2lkdGggPSBtYXgoMC4wZiwgbmV3TGluZVJp
Z2h0IC0gbmV3TGluZUxlZnQpOworICAgICAgICBsYXN0RmxvYXRMb2dpY2FsQm90dG9tID0gZmxv
YXRMb2dpY2FsQm90dG9tOworICAgICAgICBpZiAobmV3TGluZVdpZHRoID49IG1fdW5jb21taXR0
ZWRXaWR0aCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChuZXdMaW5lV2lk
dGggPiBtX2F2YWlsYWJsZVdpZHRoKSB7CisgICAgICAgIG1fYmxvY2stPnNldExvZ2ljYWxIZWln
aHQobGFzdEZsb2F0TG9naWNhbEJvdHRvbSk7CisgICAgICAgIG1fYXZhaWxhYmxlV2lkdGggPSBu
ZXdMaW5lV2lkdGggKyBtX292ZXJoYW5nV2lkdGg7CisgICAgICAgIG1fbGVmdCA9IG5ld0xpbmVM
ZWZ0OworICAgICAgICBtX3JpZ2h0ID0gbmV3TGluZVJpZ2h0OworICAgIH0KK30KKworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xpbmVXaWR0aC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0xpbmVXaWR0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmM1YWY0MjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvTGluZVdpZHRoLmgKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
KyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAq
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTGluZVdpZHRo
X2gKKyNkZWZpbmUgTGluZVdpZHRoX2gKKworI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCisjaW5j
bHVkZSAiUmVuZGVyUnVieVJ1bi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBM
YXlvdXRVbml0IGxvZ2ljYWxIZWlnaHRGb3JMaW5lKGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaywg
Ym9vbCBpc0ZpcnN0TGluZSwgTGF5b3V0VW5pdCByZXBsYWNlZEhlaWdodCA9IDApCit7CisgICAg
aWYgKCFibG9jay0+ZG9jdW1lbnQoKS5pbk5vUXVpcmtzTW9kZSgpICYmIHJlcGxhY2VkSGVpZ2h0
KQorICAgICAgICByZXR1cm4gcmVwbGFjZWRIZWlnaHQ7CisKKyAgICBpZiAoIShibG9jay0+c3R5
bGUoaXNGaXJzdExpbmUpLT5saW5lQm94Q29udGFpbigpICYgTGluZUJveENvbnRhaW5CbG9jaykp
CisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1heDxMYXlvdXRVbml0PihyZXBsYWNl
ZEhlaWdodCwgYmxvY2stPmxpbmVIZWlnaHQoaXNGaXJzdExpbmUsIGJsb2NrLT5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNhbExpbmUsIFBvc2l0aW9u
T2ZJbnRlcmlvckxpbmVCb3hlcykpOworfQorCitlbnVtIEluZGVudFRleHRPck5vdCB7IERvTm90
SW5kZW50VGV4dCwgSW5kZW50VGV4dCB9OworCitjbGFzcyBMaW5lV2lkdGggeworcHVibGljOgor
ICAgIExpbmVXaWR0aChSZW5kZXJCbG9jayogYmxvY2ssIGJvb2wgaXNGaXJzdExpbmUsIEluZGVu
dFRleHRPck5vdCBzaG91bGRJbmRlbnRUZXh0KQorICAgICAgICA6IG1fYmxvY2soYmxvY2spCisg
ICAgICAgICwgbV91bmNvbW1pdHRlZFdpZHRoKDApCisgICAgICAgICwgbV9jb21taXR0ZWRXaWR0
aCgwKQorICAgICAgICAsIG1fb3ZlcmhhbmdXaWR0aCgwKQorICAgICAgICAsIG1fdHJhaWxpbmdX
aGl0ZXNwYWNlV2lkdGgoMCkKKyAgICAgICAgLCBtX3RyYWlsaW5nQ29sbGFwc2VkV2hpdGVzcGFj
ZVdpZHRoKDApCisgICAgICAgICwgbV9sZWZ0KDApCisgICAgICAgICwgbV9yaWdodCgwKQorICAg
ICAgICAsIG1fYXZhaWxhYmxlV2lkdGgoMCkKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKyAgICAg
ICAgLCBtX3NlZ21lbnQoMCkKKyNlbmRpZgorICAgICAgICAsIG1faXNGaXJzdExpbmUoaXNGaXJz
dExpbmUpCisgICAgICAgICwgbV9zaG91bGRJbmRlbnRUZXh0KHNob3VsZEluZGVudFRleHQpCisg
ICAgeworICAgICAgICBBU1NFUlQoYmxvY2spOworI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorICAg
ICAgICBpZiAoU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8gPSBtX2Jsb2NrLT5sYXlv
dXRTaGFwZUluc2lkZUluZm8oKSkKKyAgICAgICAgICAgIG1fc2VnbWVudCA9IHNoYXBlSW5zaWRl
SW5mby0+Y3VycmVudFNlZ21lbnQoKTsKKyNlbmRpZgorICAgICAgICB1cGRhdGVBdmFpbGFibGVX
aWR0aCgpOworICAgIH0KKyAgICBib29sIGZpdHNPbkxpbmUoYm9vbCBpZ25vcmluZ1RyYWlsaW5n
U3BhY2UgPSBmYWxzZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpZ25vcmluZ1RyYWlsaW5nU3Bh
Y2UgPyBmaXRzT25MaW5lRXhjbHVkaW5nVHJhaWxpbmdDb2xsYXBzZWRXaGl0ZXNwYWNlKCkgOiBm
aXRzT25MaW5lSW5jbHVkaW5nRXh0cmFXaWR0aCgwKTsKKyAgICB9CisgICAgYm9vbCBmaXRzT25M
aW5lSW5jbHVkaW5nRXh0cmFXaWR0aChmbG9hdCBleHRyYSkgY29uc3QgeyByZXR1cm4gY3VycmVu
dFdpZHRoKCkgKyBleHRyYSA8PSBtX2F2YWlsYWJsZVdpZHRoOyB9CisgICAgYm9vbCBmaXRzT25M
aW5lRXhjbHVkaW5nVHJhaWxpbmdXaGl0ZXNwYWNlKGZsb2F0IGV4dHJhKSBjb25zdCB7IHJldHVy
biBjdXJyZW50V2lkdGgoKSAtIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggKyBleHRyYSA8PSBt
X2F2YWlsYWJsZVdpZHRoOyB9CisKKyAgICBmbG9hdCBjdXJyZW50V2lkdGgoKSBjb25zdCB7IHJl
dHVybiBtX2NvbW1pdHRlZFdpZHRoICsgbV91bmNvbW1pdHRlZFdpZHRoOyB9CisgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBldmVudHVhbGx5IHJlcGxhY2UgdGhlc2UgdGhyZWUgZnVuY3Rpb25zIGJ5
IG9uZXMgdGhhdCB3b3JrIG9uIGEgaGlnaGVyIGFic3RyYWN0aW9uLgorICAgIGZsb2F0IHVuY29t
bWl0dGVkV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3VuY29tbWl0dGVkV2lkdGg7IH0KKyAgICBm
bG9hdCBjb21taXR0ZWRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY29tbWl0dGVkV2lkdGg7IH0K
KyAgICBmbG9hdCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYXZhaWxhYmxlV2lk
dGg7IH0KKworICAgIHZvaWQgdXBkYXRlQXZhaWxhYmxlV2lkdGgoTGF5b3V0VW5pdCBtaW5pbXVt
SGVpZ2h0ID0gMCk7CisgICAgdm9pZCBzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZO
ZWVkZWQoRmxvYXRpbmdPYmplY3QqKTsKKyAgICB2b2lkIGFkZFVuY29tbWl0dGVkV2lkdGgoZmxv
YXQgZGVsdGEpIHsgbV91bmNvbW1pdHRlZFdpZHRoICs9IGRlbHRhOyB9CisgICAgdm9pZCBjb21t
aXQoKQorICAgIHsKKyAgICAgICAgbV9jb21taXR0ZWRXaWR0aCArPSBtX3VuY29tbWl0dGVkV2lk
dGg7CisgICAgICAgIG1fdW5jb21taXR0ZWRXaWR0aCA9IDA7CisgICAgfQorICAgIHZvaWQgYXBw
bHlPdmVyaGFuZyhSZW5kZXJSdWJ5UnVuKiwgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyLCBS
ZW5kZXJPYmplY3QqIGVuZFJlbmRlcmVyKTsKKyAgICB2b2lkIGZpdEJlbG93RmxvYXRzKCk7Cisg
ICAgdm9pZCBzZXRUcmFpbGluZ1doaXRlc3BhY2VXaWR0aChmbG9hdCBjb2xsYXBzZWRXaGl0ZXNw
YWNlLCBmbG9hdCBib3JkZXJQYWRkaW5nTWFyZ2luID0gMCkgeyBtX3RyYWlsaW5nQ29sbGFwc2Vk
V2hpdGVzcGFjZVdpZHRoID0gY29sbGFwc2VkV2hpdGVzcGFjZTsgbV90cmFpbGluZ1doaXRlc3Bh
Y2VXaWR0aCA9ICBjb2xsYXBzZWRXaGl0ZXNwYWNlICsgYm9yZGVyUGFkZGluZ01hcmdpbjsgfQor
CisgICAgYm9vbCBzaG91bGRJbmRlbnRUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRJbmRl
bnRUZXh0ID09IEluZGVudFRleHQ7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGNvbXB1dGVBdmFp
bGFibGVXaWR0aEZyb21MZWZ0QW5kUmlnaHQoKQorICAgIHsKKyAgICAgICAgbV9hdmFpbGFibGVX
aWR0aCA9IG1heCgwLjBmLCBtX3JpZ2h0IC0gbV9sZWZ0KSArIG1fb3ZlcmhhbmdXaWR0aDsKKyAg
ICB9CisgICAgYm9vbCBmaXRzT25MaW5lRXhjbHVkaW5nVHJhaWxpbmdDb2xsYXBzZWRXaGl0ZXNw
YWNlKCkgY29uc3QgeyByZXR1cm4gY3VycmVudFdpZHRoKCkgLSBtX3RyYWlsaW5nQ29sbGFwc2Vk
V2hpdGVzcGFjZVdpZHRoIDw9IG1fYXZhaWxhYmxlV2lkdGg7IH0KKworcHJpdmF0ZToKKyAgICBS
ZW5kZXJCbG9jayogbV9ibG9jazsKKyAgICBmbG9hdCBtX3VuY29tbWl0dGVkV2lkdGg7CisgICAg
ZmxvYXQgbV9jb21taXR0ZWRXaWR0aDsKKyAgICBmbG9hdCBtX292ZXJoYW5nV2lkdGg7IC8vIFRo
ZSBhbW91bnQgYnkgd2hpY2ggfG1fYXZhaWxhYmxlV2lkdGh8IGhhcyBiZWVuIGluZmxhdGVkIHRv
IGFjY291bnQgZm9yIHBvc3NpYmxlIGNvbnRyYWN0aW9uIGR1ZSB0byBydWJ5IG92ZXJoYW5nLgor
ICAgIGZsb2F0IG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGg7CisgICAgZmxvYXQgbV90cmFpbGlu
Z0NvbGxhcHNlZFdoaXRlc3BhY2VXaWR0aDsKKyAgICBmbG9hdCBtX2xlZnQ7CisgICAgZmxvYXQg
bV9yaWdodDsKKyAgICBmbG9hdCBtX2F2YWlsYWJsZVdpZHRoOworI2lmIEVOQUJMRShDU1NfU0hB
UEVTKQorICAgIGNvbnN0IExpbmVTZWdtZW50KiBtX3NlZ21lbnQ7CisjZW5kaWYKKyAgICBib29s
IG1faXNGaXJzdExpbmU7CisgICAgSW5kZW50VGV4dE9yTm90IG1fc2hvdWxkSW5kZW50VGV4dDsK
K307CisKK2lubGluZSB2b2lkIExpbmVXaWR0aDo6dXBkYXRlQXZhaWxhYmxlV2lkdGgoTGF5b3V0
VW5pdCByZXBsYWNlZEhlaWdodCkKK3sKKyAgICBMYXlvdXRVbml0IGhlaWdodCA9IG1fYmxvY2st
PmxvZ2ljYWxIZWlnaHQoKTsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSBsb2dpY2Fs
SGVpZ2h0Rm9yTGluZShtX2Jsb2NrLCBtX2lzRmlyc3RMaW5lLCByZXBsYWNlZEhlaWdodCk7Cisg
ICAgbV9sZWZ0ID0gbV9ibG9jay0+bG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKGhlaWdodCwgc2hv
dWxkSW5kZW50VGV4dCgpLCBsb2dpY2FsSGVpZ2h0KTsKKyAgICBtX3JpZ2h0ID0gbV9ibG9jay0+
bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShoZWlnaHQsIHNob3VsZEluZGVudFRleHQoKSwgbG9n
aWNhbEhlaWdodCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKyAgICBpZiAobV9zZWdtZW50
KSB7CisgICAgICAgIG1fbGVmdCA9IHN0ZDo6bWF4PGZsb2F0PihtX3NlZ21lbnQtPmxvZ2ljYWxM
ZWZ0LCBtX2xlZnQpOworICAgICAgICBtX3JpZ2h0ID0gc3RkOjptaW48ZmxvYXQ+KG1fc2VnbWVu
dC0+bG9naWNhbFJpZ2h0LCBtX3JpZ2h0KTsKKyAgICB9CisjZW5kaWYKKworICAgIGNvbXB1dGVB
dmFpbGFibGVXaWR0aEZyb21MZWZ0QW5kUmlnaHQoKTsKK30KKworaW5saW5lIHZvaWQgTGluZVdp
ZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQoRmxvYXRpbmdPYmpl
Y3QqIG5ld0Zsb2F0KQoreworICAgIExheW91dFVuaXQgaGVpZ2h0ID0gbV9ibG9jay0+bG9naWNh
bEhlaWdodCgpOworICAgIGlmIChoZWlnaHQgPCBuZXdGbG9hdC0+bG9naWNhbFRvcChtX2Jsb2Nr
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB8fCBoZWlnaHQgPj0gbmV3RmxvYXQtPmxvZ2lj
YWxCb3R0b20obV9ibG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpCisgICAgICAgIHJl
dHVybjsKKworI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorICAgIC8vIFdoZW4gZmxvYXRzIHdpdGgg
c2hhcGUgb3V0c2lkZSBhcmUgc3RhY2tlZCwgdGhlIGZsb2F0cyBhcmUgcG9zaXRpb25lZCBiYXNl
ZCBvbiB0aGUgbWFyZ2luIGJveCBvZiB0aGUgZmxvYXQsCisgICAgLy8gbm90IHRoZSBzaGFwZSdz
IGNvbnRvdXIuIFNpbmNlIHdlIGNvbXB1dGVkIHRoZSB3aWR0aCBiYXNlZCBvbiB0aGUgc2hhcGUg
Y29udG91ciB3aGVuIHdlIGFkZGVkIHRoZSBmbG9hdCwKKyAgICAvLyB3aGVuIHdlIGFkZCBhIHN1
YnNlcXVlbnQgZmxvYXQgb24gdGhlIHNhbWUgbGluZSwgd2UgbmVlZCB0byB1bmRvIHRoZSBzaGFw
ZSBkZWx0YSBpbiBvcmRlciB0byBwb3NpdGlvbgorICAgIC8vIGJhc2VkIG9uIHRoZSBtYXJnaW4g
Ym94LiBJbiBvcmRlciB0byBkbyB0aGlzLCB3ZSBuZWVkIHRvIHdhbGsgYmFjayB0aHJvdWdoIHRo
ZSBmbG9hdGluZyBvYmplY3QgbGlzdCB0byBmaW5kCisgICAgLy8gdGhlIGZpcnN0IHByZXZpb3Vz
IGZsb2F0IHRoYXQgaXMgb24gdGhlIHNhbWUgc2lkZSBhcyBvdXIgbmV3RmxvYXQuCisgICAgU2hh
cGVPdXRzaWRlSW5mbyogcHJldmlvdXNTaGFwZU91dHNpZGVJbmZvID0gMDsKKyAgICBjb25zdCBG
bG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Jsb2NrLT5tX2Zsb2F0aW5n
T2JqZWN0cy0+c2V0KCk7CisgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0
aW5nT2JqZWN0U2V0LmVuZCgpOworICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgYmVnaW4g
PSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOworICAgIGZvciAoLS1pdDsgaXQgIT0gYmVnaW47
IC0taXQpIHsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIHByZXZpb3VzRmxvYXQgPSAqaXQ7Cisg
ICAgICAgIGlmIChwcmV2aW91c0Zsb2F0ICE9IG5ld0Zsb2F0ICYmIHByZXZpb3VzRmxvYXQtPnR5
cGUoKSA9PSBuZXdGbG9hdC0+dHlwZSgpKSB7CisgICAgICAgICAgICBwcmV2aW91c1NoYXBlT3V0
c2lkZUluZm8gPSBwcmV2aW91c0Zsb2F0LT5yZW5kZXJlcigpLT5zaGFwZU91dHNpZGVJbmZvKCk7
CisgICAgICAgICAgICBpZiAocHJldmlvdXNTaGFwZU91dHNpZGVJbmZvKQorICAgICAgICAgICAg
ICAgIHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mby0+Y29tcHV0ZVNlZ21lbnRzRm9yQ29udGFpbmlu
Z0Jsb2NrTGluZShtX2Jsb2NrLT5sb2dpY2FsSGVpZ2h0KCksIHByZXZpb3VzRmxvYXQtPmxvZ2lj
YWxUb3AobV9ibG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSksIGxvZ2ljYWxIZWlnaHRG
b3JMaW5lKG1fYmxvY2ssIG1faXNGaXJzdExpbmUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorCisgICAgU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlSW5mbyA9
IG5ld0Zsb2F0LT5yZW5kZXJlcigpLT5zaGFwZU91dHNpZGVJbmZvKCk7CisgICAgaWYgKHNoYXBl
T3V0c2lkZUluZm8pCisgICAgICAgIHNoYXBlT3V0c2lkZUluZm8tPmNvbXB1dGVTZWdtZW50c0Zv
ckNvbnRhaW5pbmdCbG9ja0xpbmUobV9ibG9jay0+bG9naWNhbEhlaWdodCgpLCBuZXdGbG9hdC0+
bG9naWNhbFRvcChtX2Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSwgbG9naWNhbEhl
aWdodEZvckxpbmUobV9ibG9jaywgbV9pc0ZpcnN0TGluZSkpOworI2VuZGlmCisKKyAgICBpZiAo
bmV3RmxvYXQtPnR5cGUoKSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0KSB7CisgICAgICAg
IGZsb2F0IG5ld0xlZnQgPSBuZXdGbG9hdC0+bG9naWNhbFJpZ2h0KG1fYmxvY2stPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpOworI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorICAgICAgICBpZiAo
cHJldmlvdXNTaGFwZU91dHNpZGVJbmZvKQorICAgICAgICAgICAgbmV3TGVmdCAtPSBwcmV2aW91
c1NoYXBlT3V0c2lkZUluZm8tPnJpZ2h0U2VnbWVudE1hcmdpbkJveERlbHRhKCk7CisgICAgICAg
IGlmIChzaGFwZU91dHNpZGVJbmZvKQorICAgICAgICAgICAgbmV3TGVmdCArPSBzaGFwZU91dHNp
ZGVJbmZvLT5yaWdodFNlZ21lbnRNYXJnaW5Cb3hEZWx0YSgpOworI2VuZGlmCisKKyAgICAgICAg
aWYgKHNob3VsZEluZGVudFRleHQoKSAmJiBtX2Jsb2NrLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkpCisgICAgICAgICAgICBuZXdMZWZ0ICs9IGZsb29yVG9JbnQobV9ibG9jay0+
dGV4dEluZGVudE9mZnNldCgpKTsKKyAgICAgICAgbV9sZWZ0ID0gc3RkOjptYXg8ZmxvYXQ+KG1f
bGVmdCwgbmV3TGVmdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmxvYXQgbmV3UmlnaHQgPSBu
ZXdGbG9hdC0+bG9naWNhbExlZnQobV9ibG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7
CisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisgICAgICAgIGlmIChwcmV2aW91c1NoYXBlT3V0c2lk
ZUluZm8pCisgICAgICAgICAgICBuZXdSaWdodCAtPSBwcmV2aW91c1NoYXBlT3V0c2lkZUluZm8t
PmxlZnRTZWdtZW50TWFyZ2luQm94RGVsdGEoKTsKKyAgICAgICAgaWYgKHNoYXBlT3V0c2lkZUlu
Zm8pCisgICAgICAgICAgICBuZXdSaWdodCArPSBzaGFwZU91dHNpZGVJbmZvLT5sZWZ0U2VnbWVu
dE1hcmdpbkJveERlbHRhKCk7CisjZW5kaWYKKworICAgICAgICBpZiAoc2hvdWxkSW5kZW50VGV4
dCgpICYmICFtX2Jsb2NrLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCisgICAg
ICAgICAgICBuZXdSaWdodCAtPSBmbG9vclRvSW50KG1fYmxvY2stPnRleHRJbmRlbnRPZmZzZXQo
KSk7CisgICAgICAgIG1fcmlnaHQgPSBzdGQ6Om1pbjxmbG9hdD4obV9yaWdodCwgbmV3UmlnaHQp
OworICAgIH0KKworICAgIGNvbXB1dGVBdmFpbGFibGVXaWR0aEZyb21MZWZ0QW5kUmlnaHQoKTsK
K30KKworfQorCisjZW5kaWYgLy8gTGluZVdpZHRoX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKaW5kZXggMGE1NWJjYy4uZDE0NGNk
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxh
eW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxh
eW91dC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJIeXBoZW5hdGlvbi5oIgogI2lu
Y2x1ZGUgIklubGluZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgorI2lu
Y2x1ZGUgIkxpbmVXaWR0aC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJSZW5k
ZXJBcmVuYS5oIgogI2luY2x1ZGUgIlJlbmRlckNvbWJpbmVUZXh0LmgiCkBAIC02NiwxNyArNjcs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBXZSBkb24ndCBsZXQgb3VyIGxpbmUgYm94IHRy
ZWUgZm9yIGEgc2luZ2xlIGxpbmUgZ2V0IGFueSBkZWVwZXIgdGhhbiB0aGlzLgogY29uc3QgdW5z
aWduZWQgY01heExpbmVEZXB0aCA9IDIwMDsKIAotc3RhdGljIExheW91dFVuaXQgbG9naWNhbEhl
aWdodEZvckxpbmUoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrLCBib29sIGlzRmlyc3RMaW5lLCBM
YXlvdXRVbml0IHJlcGxhY2VkSGVpZ2h0ID0gMCkKLXsKLSAgICBpZiAoIWJsb2NrLT5kb2N1bWVu
dCgpLmluTm9RdWlya3NNb2RlKCkgJiYgcmVwbGFjZWRIZWlnaHQpCi0gICAgICAgIHJldHVybiBy
ZXBsYWNlZEhlaWdodDsKLQotICAgIGlmICghKGJsb2NrLT5zdHlsZShpc0ZpcnN0TGluZSktPmxp
bmVCb3hDb250YWluKCkgJiBMaW5lQm94Q29udGFpbkJsb2NrKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICByZXR1cm4gbWF4PExheW91dFVuaXQ+KHJlcGxhY2VkSGVpZ2h0LCBibG9jay0+bGlu
ZUhlaWdodChpc0ZpcnN0TGluZSwgYmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBI
b3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVz
KSk7Ci19Ci0KICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKIFNoYXBlSW5zaWRlSW5mbyogUmVuZGVy
QmxvY2s6OmxheW91dFNoYXBlSW5zaWRlSW5mbygpIGNvbnN0CiB7CkBAIC05NCwyMDggKzg0LDYg
QEAgU2hhcGVJbnNpZGVJbmZvKiBSZW5kZXJCbG9jazo6bGF5b3V0U2hhcGVJbnNpZGVJbmZvKCkg
Y29uc3QKIH0KICNlbmRpZgogCi1lbnVtIEluZGVudFRleHRPck5vdCB7IERvTm90SW5kZW50VGV4
dCwgSW5kZW50VGV4dCB9OwotCi1jbGFzcyBMaW5lV2lkdGggewotcHVibGljOgotICAgIExpbmVX
aWR0aChSZW5kZXJCbG9jayogYmxvY2ssIGJvb2wgaXNGaXJzdExpbmUsIEluZGVudFRleHRPck5v
dCBzaG91bGRJbmRlbnRUZXh0KQotICAgICAgICA6IG1fYmxvY2soYmxvY2spCi0gICAgICAgICwg
bV91bmNvbW1pdHRlZFdpZHRoKDApCi0gICAgICAgICwgbV9jb21taXR0ZWRXaWR0aCgwKQotICAg
ICAgICAsIG1fb3ZlcmhhbmdXaWR0aCgwKQotICAgICAgICAsIG1fdHJhaWxpbmdXaGl0ZXNwYWNl
V2lkdGgoMCkKLSAgICAgICAgLCBtX3RyYWlsaW5nQ29sbGFwc2VkV2hpdGVzcGFjZVdpZHRoKDAp
Ci0gICAgICAgICwgbV9sZWZ0KDApCi0gICAgICAgICwgbV9yaWdodCgwKQotICAgICAgICAsIG1f
YXZhaWxhYmxlV2lkdGgoMCkKLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAgLCBtX3Nl
Z21lbnQoMCkKLSNlbmRpZgotICAgICAgICAsIG1faXNGaXJzdExpbmUoaXNGaXJzdExpbmUpCi0g
ICAgICAgICwgbV9zaG91bGRJbmRlbnRUZXh0KHNob3VsZEluZGVudFRleHQpCi0gICAgewotICAg
ICAgICBBU1NFUlQoYmxvY2spOwotI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgICAgICBpZiAo
U2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8gPSBtX2Jsb2NrLT5sYXlvdXRTaGFwZUlu
c2lkZUluZm8oKSkKLSAgICAgICAgICAgIG1fc2VnbWVudCA9IHNoYXBlSW5zaWRlSW5mby0+Y3Vy
cmVudFNlZ21lbnQoKTsKLSNlbmRpZgotICAgICAgICB1cGRhdGVBdmFpbGFibGVXaWR0aCgpOwot
ICAgIH0KLSAgICBib29sIGZpdHNPbkxpbmUoYm9vbCBpZ25vcmluZ1RyYWlsaW5nU3BhY2UgPSBm
YWxzZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpZ25vcmluZ1RyYWlsaW5nU3BhY2UgPyBmaXRz
T25MaW5lRXhjbHVkaW5nVHJhaWxpbmdDb2xsYXBzZWRXaGl0ZXNwYWNlKCkgOiBmaXRzT25MaW5l
SW5jbHVkaW5nRXh0cmFXaWR0aCgwKTsKLSAgICB9Ci0gICAgYm9vbCBmaXRzT25MaW5lSW5jbHVk
aW5nRXh0cmFXaWR0aChmbG9hdCBleHRyYSkgY29uc3QgeyByZXR1cm4gY3VycmVudFdpZHRoKCkg
KyBleHRyYSA8PSBtX2F2YWlsYWJsZVdpZHRoOyB9Ci0gICAgYm9vbCBmaXRzT25MaW5lRXhjbHVk
aW5nVHJhaWxpbmdXaGl0ZXNwYWNlKGZsb2F0IGV4dHJhKSBjb25zdCB7IHJldHVybiBjdXJyZW50
V2lkdGgoKSAtIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggKyBleHRyYSA8PSBtX2F2YWlsYWJs
ZVdpZHRoOyB9Ci0KLSAgICBmbG9hdCBjdXJyZW50V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2Nv
bW1pdHRlZFdpZHRoICsgbV91bmNvbW1pdHRlZFdpZHRoOyB9Ci0gICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBldmVudHVhbGx5IHJlcGxhY2UgdGhlc2UgdGhyZWUgZnVuY3Rpb25zIGJ5IG9uZXMgdGhh
dCB3b3JrIG9uIGEgaGlnaGVyIGFic3RyYWN0aW9uLgotICAgIGZsb2F0IHVuY29tbWl0dGVkV2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX3VuY29tbWl0dGVkV2lkdGg7IH0KLSAgICBmbG9hdCBjb21t
aXR0ZWRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY29tbWl0dGVkV2lkdGg7IH0KLSAgICBmbG9h
dCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYXZhaWxhYmxlV2lkdGg7IH0KLQot
ICAgIHZvaWQgdXBkYXRlQXZhaWxhYmxlV2lkdGgoTGF5b3V0VW5pdCBtaW5pbXVtSGVpZ2h0ID0g
MCk7Ci0gICAgdm9pZCBzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQoRmxv
YXRpbmdPYmplY3QqKTsKLSAgICB2b2lkIGFkZFVuY29tbWl0dGVkV2lkdGgoZmxvYXQgZGVsdGEp
IHsgbV91bmNvbW1pdHRlZFdpZHRoICs9IGRlbHRhOyB9Ci0gICAgdm9pZCBjb21taXQoKQotICAg
IHsKLSAgICAgICAgbV9jb21taXR0ZWRXaWR0aCArPSBtX3VuY29tbWl0dGVkV2lkdGg7Ci0gICAg
ICAgIG1fdW5jb21taXR0ZWRXaWR0aCA9IDA7Ci0gICAgfQotICAgIHZvaWQgYXBwbHlPdmVyaGFu
ZyhSZW5kZXJSdWJ5UnVuKiwgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyLCBSZW5kZXJPYmpl
Y3QqIGVuZFJlbmRlcmVyKTsKLSAgICB2b2lkIGZpdEJlbG93RmxvYXRzKCk7Ci0gICAgdm9pZCBz
ZXRUcmFpbGluZ1doaXRlc3BhY2VXaWR0aChmbG9hdCBjb2xsYXBzZWRXaGl0ZXNwYWNlLCBmbG9h
dCBib3JkZXJQYWRkaW5nTWFyZ2luID0gMCkgeyBtX3RyYWlsaW5nQ29sbGFwc2VkV2hpdGVzcGFj
ZVdpZHRoID0gY29sbGFwc2VkV2hpdGVzcGFjZTsgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCA9
ICBjb2xsYXBzZWRXaGl0ZXNwYWNlICsgYm9yZGVyUGFkZGluZ01hcmdpbjsgfQotCi0gICAgYm9v
bCBzaG91bGRJbmRlbnRUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRJbmRlbnRUZXh0ID09
IEluZGVudFRleHQ7IH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIGNvbXB1dGVBdmFpbGFibGVXaWR0
aEZyb21MZWZ0QW5kUmlnaHQoKQotICAgIHsKLSAgICAgICAgbV9hdmFpbGFibGVXaWR0aCA9IG1h
eCgwLjBmLCBtX3JpZ2h0IC0gbV9sZWZ0KSArIG1fb3ZlcmhhbmdXaWR0aDsKLSAgICB9Ci0gICAg
Ym9vbCBmaXRzT25MaW5lRXhjbHVkaW5nVHJhaWxpbmdDb2xsYXBzZWRXaGl0ZXNwYWNlKCkgY29u
c3QgeyByZXR1cm4gY3VycmVudFdpZHRoKCkgLSBtX3RyYWlsaW5nQ29sbGFwc2VkV2hpdGVzcGFj
ZVdpZHRoIDw9IG1fYXZhaWxhYmxlV2lkdGg7IH0KLQotcHJpdmF0ZToKLSAgICBSZW5kZXJCbG9j
ayogbV9ibG9jazsKLSAgICBmbG9hdCBtX3VuY29tbWl0dGVkV2lkdGg7Ci0gICAgZmxvYXQgbV9j
b21taXR0ZWRXaWR0aDsKLSAgICBmbG9hdCBtX292ZXJoYW5nV2lkdGg7IC8vIFRoZSBhbW91bnQg
Ynkgd2hpY2ggfG1fYXZhaWxhYmxlV2lkdGh8IGhhcyBiZWVuIGluZmxhdGVkIHRvIGFjY291bnQg
Zm9yIHBvc3NpYmxlIGNvbnRyYWN0aW9uIGR1ZSB0byBydWJ5IG92ZXJoYW5nLgotICAgIGZsb2F0
IG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGg7Ci0gICAgZmxvYXQgbV90cmFpbGluZ0NvbGxhcHNl
ZFdoaXRlc3BhY2VXaWR0aDsKLSAgICBmbG9hdCBtX2xlZnQ7Ci0gICAgZmxvYXQgbV9yaWdodDsK
LSAgICBmbG9hdCBtX2F2YWlsYWJsZVdpZHRoOwotI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAg
IGNvbnN0IExpbmVTZWdtZW50KiBtX3NlZ21lbnQ7Ci0jZW5kaWYKLSAgICBib29sIG1faXNGaXJz
dExpbmU7Ci0gICAgSW5kZW50VGV4dE9yTm90IG1fc2hvdWxkSW5kZW50VGV4dDsKLX07Ci0KLWlu
bGluZSB2b2lkIExpbmVXaWR0aDo6dXBkYXRlQXZhaWxhYmxlV2lkdGgoTGF5b3V0VW5pdCByZXBs
YWNlZEhlaWdodCkKLXsKLSAgICBMYXlvdXRVbml0IGhlaWdodCA9IG1fYmxvY2stPmxvZ2ljYWxI
ZWlnaHQoKTsKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0Rm9y
TGluZShtX2Jsb2NrLCBtX2lzRmlyc3RMaW5lLCByZXBsYWNlZEhlaWdodCk7Ci0gICAgbV9sZWZ0
ID0gbV9ibG9jay0+bG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKGhlaWdodCwgc2hvdWxkSW5kZW50
VGV4dCgpLCBsb2dpY2FsSGVpZ2h0KTsKLSAgICBtX3JpZ2h0ID0gbV9ibG9jay0+bG9naWNhbFJp
Z2h0T2Zmc2V0Rm9yTGluZShoZWlnaHQsIHNob3VsZEluZGVudFRleHQoKSwgbG9naWNhbEhlaWdo
dCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICBpZiAobV9zZWdtZW50KSB7Ci0gICAg
ICAgIG1fbGVmdCA9IG1heDxmbG9hdD4obV9zZWdtZW50LT5sb2dpY2FsTGVmdCwgbV9sZWZ0KTsK
LSAgICAgICAgbV9yaWdodCA9IG1pbjxmbG9hdD4obV9zZWdtZW50LT5sb2dpY2FsUmlnaHQsIG1f
cmlnaHQpOwotICAgIH0KLSNlbmRpZgotCi0gICAgY29tcHV0ZUF2YWlsYWJsZVdpZHRoRnJvbUxl
ZnRBbmRSaWdodCgpOwotfQotCi1pbmxpbmUgdm9pZCBMaW5lV2lkdGg6OnNocmlua0F2YWlsYWJs
ZVdpZHRoRm9yTmV3RmxvYXRJZk5lZWRlZChGbG9hdGluZ09iamVjdCogbmV3RmxvYXQpCi17Ci0g
ICAgTGF5b3V0VW5pdCBoZWlnaHQgPSBtX2Jsb2NrLT5sb2dpY2FsSGVpZ2h0KCk7Ci0gICAgaWYg
KGhlaWdodCA8IG5ld0Zsb2F0LT5sb2dpY2FsVG9wKG1fYmxvY2stPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpIHx8IGhlaWdodCA+PSBuZXdGbG9hdC0+bG9naWNhbEJvdHRvbShtX2Jsb2NrLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgRU5BQkxF
KENTU19TSEFQRVMpCi0gICAgLy8gV2hlbiBmbG9hdHMgd2l0aCBzaGFwZSBvdXRzaWRlIGFyZSBz
dGFja2VkLCB0aGUgZmxvYXRzIGFyZSBwb3NpdGlvbmVkIGJhc2VkIG9uIHRoZSBtYXJnaW4gYm94
IG9mIHRoZSBmbG9hdCwKLSAgICAvLyBub3QgdGhlIHNoYXBlJ3MgY29udG91ci4gU2luY2Ugd2Ug
Y29tcHV0ZWQgdGhlIHdpZHRoIGJhc2VkIG9uIHRoZSBzaGFwZSBjb250b3VyIHdoZW4gd2UgYWRk
ZWQgdGhlIGZsb2F0LAotICAgIC8vIHdoZW4gd2UgYWRkIGEgc3Vic2VxdWVudCBmbG9hdCBvbiB0
aGUgc2FtZSBsaW5lLCB3ZSBuZWVkIHRvIHVuZG8gdGhlIHNoYXBlIGRlbHRhIGluIG9yZGVyIHRv
IHBvc2l0aW9uCi0gICAgLy8gYmFzZWQgb24gdGhlIG1hcmdpbiBib3guIEluIG9yZGVyIHRvIGRv
IHRoaXMsIHdlIG5lZWQgdG8gd2FsayBiYWNrIHRocm91Z2ggdGhlIGZsb2F0aW5nIG9iamVjdCBs
aXN0IHRvIGZpbmQKLSAgICAvLyB0aGUgZmlyc3QgcHJldmlvdXMgZmxvYXQgdGhhdCBpcyBvbiB0
aGUgc2FtZSBzaWRlIGFzIG91ciBuZXdGbG9hdC4KLSAgICBTaGFwZU91dHNpZGVJbmZvKiBwcmV2
aW91c1NoYXBlT3V0c2lkZUluZm8gPSAwOwotICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBm
bG9hdGluZ09iamVjdFNldCA9IG1fYmxvY2stPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAg
ICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7
Ci0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0
LmJlZ2luKCk7Ci0gICAgZm9yICgtLWl0OyBpdCAhPSBiZWdpbjsgLS1pdCkgewotICAgICAgICBG
bG9hdGluZ09iamVjdCogcHJldmlvdXNGbG9hdCA9ICppdDsKLSAgICAgICAgaWYgKHByZXZpb3Vz
RmxvYXQgIT0gbmV3RmxvYXQgJiYgcHJldmlvdXNGbG9hdC0+dHlwZSgpID09IG5ld0Zsb2F0LT50
eXBlKCkpIHsKLSAgICAgICAgICAgIHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mbyA9IHByZXZpb3Vz
RmxvYXQtPnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8oKTsKLSAgICAgICAgICAgIGlmIChw
cmV2aW91c1NoYXBlT3V0c2lkZUluZm8pIHsKLSAgICAgICAgICAgICAgICBwcmV2aW91c1NoYXBl
T3V0c2lkZUluZm8tPmNvbXB1dGVTZWdtZW50c0ZvckNvbnRhaW5pbmdCbG9ja0xpbmUobV9ibG9j
ay0+bG9naWNhbEhlaWdodCgpLCBwcmV2aW91c0Zsb2F0LT5sb2dpY2FsVG9wKG1fYmxvY2stPmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpLCBsb2dpY2FsSGVpZ2h0Rm9yTGluZShtX2Jsb2NrLCBt
X2lzRmlyc3RMaW5lKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZUluZm8gPSBu
ZXdGbG9hdC0+cmVuZGVyZXIoKS0+c2hhcGVPdXRzaWRlSW5mbygpOwotICAgIGlmIChzaGFwZU91
dHNpZGVJbmZvKSB7Ci0gICAgICAgIHNoYXBlT3V0c2lkZUluZm8tPmNvbXB1dGVTZWdtZW50c0Zv
ckNvbnRhaW5pbmdCbG9ja0xpbmUobV9ibG9jay0+bG9naWNhbEhlaWdodCgpLCBuZXdGbG9hdC0+
bG9naWNhbFRvcChtX2Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSwgbG9naWNhbEhl
aWdodEZvckxpbmUobV9ibG9jaywgbV9pc0ZpcnN0TGluZSkpOwotICAgIH0KLSNlbmRpZgotCi0g
ICAgaWYgKG5ld0Zsb2F0LT50eXBlKCkgPT0gRmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdCkgewot
ICAgICAgICBmbG9hdCBuZXdMZWZ0ID0gbmV3RmxvYXQtPmxvZ2ljYWxSaWdodChtX2Jsb2NrLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAg
ICAgaWYgKHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mbykKLSAgICAgICAgICAgIG5ld0xlZnQgLT0g
cHJldmlvdXNTaGFwZU91dHNpZGVJbmZvLT5yaWdodFNlZ21lbnRNYXJnaW5Cb3hEZWx0YSgpOwot
ICAgICAgICBpZiAoc2hhcGVPdXRzaWRlSW5mbykKLSAgICAgICAgICAgIG5ld0xlZnQgKz0gc2hh
cGVPdXRzaWRlSW5mby0+cmlnaHRTZWdtZW50TWFyZ2luQm94RGVsdGEoKTsKLSNlbmRpZgotCi0g
ICAgICAgIGlmIChzaG91bGRJbmRlbnRUZXh0KCkgJiYgbV9ibG9jay0+c3R5bGUoKS0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICAgICAgbmV3TGVmdCArPSBmbG9vclRvSW50KG1f
YmxvY2stPnRleHRJbmRlbnRPZmZzZXQoKSk7Ci0gICAgICAgIG1fbGVmdCA9IG1heDxmbG9hdD4o
bV9sZWZ0LCBuZXdMZWZ0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBmbG9hdCBuZXdSaWdodCA9
IG5ld0Zsb2F0LT5sb2dpY2FsTGVmdChtX2Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KTsKLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAgaWYgKHByZXZpb3VzU2hhcGVPdXRz
aWRlSW5mbykKLSAgICAgICAgICAgIG5ld1JpZ2h0IC09IHByZXZpb3VzU2hhcGVPdXRzaWRlSW5m
by0+bGVmdFNlZ21lbnRNYXJnaW5Cb3hEZWx0YSgpOwotICAgICAgICBpZiAoc2hhcGVPdXRzaWRl
SW5mbykKLSAgICAgICAgICAgIG5ld1JpZ2h0ICs9IHNoYXBlT3V0c2lkZUluZm8tPmxlZnRTZWdt
ZW50TWFyZ2luQm94RGVsdGEoKTsKLSNlbmRpZgotCi0gICAgICAgIGlmIChzaG91bGRJbmRlbnRU
ZXh0KCkgJiYgIW1fYmxvY2stPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKLSAg
ICAgICAgICAgIG5ld1JpZ2h0IC09IGZsb29yVG9JbnQobV9ibG9jay0+dGV4dEluZGVudE9mZnNl
dCgpKTsKLSAgICAgICAgbV9yaWdodCA9IG1pbjxmbG9hdD4obV9yaWdodCwgbmV3UmlnaHQpOwot
ICAgIH0KLQotICAgIGNvbXB1dGVBdmFpbGFibGVXaWR0aEZyb21MZWZ0QW5kUmlnaHQoKTsKLX0K
LQotdm9pZCBMaW5lV2lkdGg6OmFwcGx5T3ZlcmhhbmcoUmVuZGVyUnVieVJ1biogcnVieVJ1biwg
UmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyLCBSZW5kZXJPYmplY3QqIGVuZFJlbmRlcmVyKQot
ewotICAgIGludCBzdGFydE92ZXJoYW5nOwotICAgIGludCBlbmRPdmVyaGFuZzsKLSAgICBydWJ5
UnVuLT5nZXRPdmVyaGFuZyhtX2lzRmlyc3RMaW5lLCBzdGFydFJlbmRlcmVyLCBlbmRSZW5kZXJl
ciwgc3RhcnRPdmVyaGFuZywgZW5kT3ZlcmhhbmcpOwotCi0gICAgc3RhcnRPdmVyaGFuZyA9IG1p
bjxpbnQ+KHN0YXJ0T3ZlcmhhbmcsIG1fY29tbWl0dGVkV2lkdGgpOwotICAgIG1fYXZhaWxhYmxl
V2lkdGggKz0gc3RhcnRPdmVyaGFuZzsKLQotICAgIGVuZE92ZXJoYW5nID0gbWF4KG1pbjxpbnQ+
KGVuZE92ZXJoYW5nLCBtX2F2YWlsYWJsZVdpZHRoIC0gY3VycmVudFdpZHRoKCkpLCAwKTsKLSAg
ICBtX2F2YWlsYWJsZVdpZHRoICs9IGVuZE92ZXJoYW5nOwotICAgIG1fb3ZlcmhhbmdXaWR0aCAr
PSBzdGFydE92ZXJoYW5nICsgZW5kT3Zlcmhhbmc7Ci19Ci0KLXZvaWQgTGluZVdpZHRoOjpmaXRC
ZWxvd0Zsb2F0cygpCi17Ci0gICAgQVNTRVJUKCFtX2NvbW1pdHRlZFdpZHRoKTsKLSAgICBBU1NF
UlQoIWZpdHNPbkxpbmUoKSk7Ci0KLSAgICBMYXlvdXRVbml0IGZsb2F0TG9naWNhbEJvdHRvbTsK
LSAgICBMYXlvdXRVbml0IGxhc3RGbG9hdExvZ2ljYWxCb3R0b20gPSBtX2Jsb2NrLT5sb2dpY2Fs
SGVpZ2h0KCk7Ci0gICAgZmxvYXQgbmV3TGluZVdpZHRoID0gbV9hdmFpbGFibGVXaWR0aDsKLSAg
ICBmbG9hdCBuZXdMaW5lTGVmdCA9IG1fbGVmdDsKLSAgICBmbG9hdCBuZXdMaW5lUmlnaHQgPSBt
X3JpZ2h0OwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGZsb2F0TG9naWNhbEJvdHRvbSA9
IG1fYmxvY2stPm5leHRGbG9hdExvZ2ljYWxCb3R0b21CZWxvdyhsYXN0RmxvYXRMb2dpY2FsQm90
dG9tKTsKLSAgICAgICAgaWYgKGZsb2F0TG9naWNhbEJvdHRvbSA8PSBsYXN0RmxvYXRMb2dpY2Fs
Qm90dG9tKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgbmV3TGluZUxlZnQgPSBtX2Js
b2NrLT5sb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoZmxvYXRMb2dpY2FsQm90dG9tLCBzaG91bGRJ
bmRlbnRUZXh0KCkpOwotICAgICAgICBuZXdMaW5lUmlnaHQgPSBtX2Jsb2NrLT5sb2dpY2FsUmln
aHRPZmZzZXRGb3JMaW5lKGZsb2F0TG9naWNhbEJvdHRvbSwgc2hvdWxkSW5kZW50VGV4dCgpKTsK
LSAgICAgICAgbmV3TGluZVdpZHRoID0gbWF4KDAuMGYsIG5ld0xpbmVSaWdodCAtIG5ld0xpbmVM
ZWZ0KTsKLSAgICAgICAgbGFzdEZsb2F0TG9naWNhbEJvdHRvbSA9IGZsb2F0TG9naWNhbEJvdHRv
bTsKLSAgICAgICAgaWYgKG5ld0xpbmVXaWR0aCA+PSBtX3VuY29tbWl0dGVkV2lkdGgpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAobmV3TGluZVdpZHRoID4gbV9hdmFpbGFi
bGVXaWR0aCkgewotICAgICAgICBtX2Jsb2NrLT5zZXRMb2dpY2FsSGVpZ2h0KGxhc3RGbG9hdExv
Z2ljYWxCb3R0b20pOwotICAgICAgICBtX2F2YWlsYWJsZVdpZHRoID0gbmV3TGluZVdpZHRoICsg
bV9vdmVyaGFuZ1dpZHRoOwotICAgICAgICBtX2xlZnQgPSBuZXdMaW5lTGVmdDsKLSAgICAgICAg
bV9yaWdodCA9IG5ld0xpbmVSaWdodDsKLSAgICB9Ci19Ci0KIGNsYXNzIExpbmVJbmZvIHsKIHB1
YmxpYzoKICAgICBMaW5lSW5mbygpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211252</attachid>
            <date>2013-09-10 15:15:05 -0700</date>
            <delta_ts>2013-09-10 15:24:49 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>movelinewidth2.patch</filename>
            <type>text/plain</type>
            <size>33151</size>
            <attacher name="Zoltan Horvath">zoltan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMTU4OTk4Ni4uYWIxOTZmYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTIxMDgsNiArMjEwOCw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKICAgICByZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCiAg
ICAgcmVuZGVyaW5nL0xheW91dFJlcGFpbnRlci5jcHAKKyAgICByZW5kZXJpbmcvTGluZVdpZHRo
LmNwcAogICAgIHJlbmRlcmluZy9Qb2ludGVyRXZlbnRzSGl0UnVsZXMuY3BwCiAgICAgcmVuZGVy
aW5nL1JlbmRlckFwcGxldC5jcHAKICAgICByZW5kZXJpbmcvUmVuZGVyQXJlbmEuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggYmMyOGQ0YS4uZWUzODY1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisy
MDEzLTA5LTEwICBab2x0YW4gSG9ydmF0aCAgPHpvbHRhbkB3ZWJraXQub3JnPgorCisgICAgICAg
IE1vdmUgTGluZVdpZHRoIG91dCBvZiBSZW5kZXJCbG9ja0xpbmVMYXlvdXQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTEwNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgTGluZVdpZHRoIGNsYXNz
IGFuZCByZWxhdGVkIGNvZGUgaW50byBMaW5lV2lkdGgue2gsY3BwfS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToK
KyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvTGlu
ZVdpZHRoLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OmFwcGx5T3Zl
cmhhbmcpOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRoOjpmaXRCZWxvd0Zsb2F0cyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL0xpbmVXaWR0aC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmxvZ2ljYWxIZWlnaHRGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVXaWR0aDo6TGlu
ZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVXaWR0aDo6Zml0c09uTGluZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OmZpdHNPbkxpbmVJbmNsdWRpbmdFeHRyYVdpZHRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkxpbmVXaWR0aDo6Zml0c09uTGluZUV4Y2x1ZGluZ1RyYWlsaW5n
V2hpdGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OmN1cnJlbnRXaWR0aCk6
CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OnVuY29tbWl0dGVkV2lkdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6TGluZVdpZHRoOjpjb21taXR0ZWRXaWR0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpMaW5lV2lkdGg6OmF2YWlsYWJsZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVXaWR0
aDo6YWRkVW5jb21taXR0ZWRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OmNv
bW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OnNldFRyYWlsaW5nV2hpdGVzcGFj
ZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVXaWR0aDo6c2hvdWxkSW5kZW50VGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OmNvbXB1dGVBdmFpbGFibGVXaWR0aEZyb21M
ZWZ0QW5kUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRoOjpmaXRzT25MaW5lRXhj
bHVkaW5nVHJhaWxpbmdDb2xsYXBzZWRXaGl0ZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Okxp
bmVXaWR0aDo6dXBkYXRlQXZhaWxhYmxlV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdp
ZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorCiAyMDEzLTA5LTEwICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFttYWNdIFBERkRv
Y3VtZW50SW1hZ2Ugc2hvdWxkIHVzZSBQREZLaXQgdG8gZHJhdwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KaW5kZXggNWZhNzIwNy4uOGFlNjMyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCkBAIC00MzY2LDYgKzQzNjYsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9Mb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzLmggXAogCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRSZXBhaW50ZXIuaCBcCiAJU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0xheW91dFJlcGFpbnRlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9MaW5lV2lkdGguaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xpbmVXaWR0aC5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9PdmVybGFwVGVzdFJlcXVlc3RDbGllbnQu
aCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1BhZ2luYXRpb24uaCBcCiAJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1BhaW50SW5mby5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDZmMzhkN2QuLmJj
YjZlMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNl
L1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMTE1MSw2ICsxMTUxLDcgQEAgU09VUkNFUyArPSBcCiAg
ICAgcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwIFwKICAgICByZW5kZXJpbmcvTGF5b3V0U3Rh
dGUuY3BwIFwKICAgICByZW5kZXJpbmcvTGF5b3V0UmVwYWludGVyLmNwcCBcCisgICAgcmVuZGVy
aW5nL0xpbmVXaWR0aC5jcHAgXAogICAgIHJlbmRlcmluZy9SZW5kZXJBcHBsZXQuY3BwIFwKICAg
ICByZW5kZXJpbmcvUmVuZGVyQXJlbmEuY3BwIFwKICAgICByZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwIFwKQEAgLTI0MDQsNiArMjQwNSw3IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmggXAogICAgIHJlbmRlcmluZy9MYXlvdXRSZXBhaW50ZXIuaCBcCiAgICAg
cmVuZGVyaW5nL0xheW91dFN0YXRlLmggXAorICAgIHJlbmRlcmluZy9MaW5lV2lkdGguaCBcCiAg
ICAgcmVuZGVyaW5nL0xvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMuaCBcCiAgICAgcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oIFwKICAgICByZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTEZlbmNlZC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ov
V2ViQ29yZS52Y3hwcm9qCmluZGV4IDE0ZGFhOTEuLjZhNzI3ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAtOTY0Miw2ICs5NjQyLDcg
QEAKICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWls
ZD4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+
CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdc
TGluZVdpZHRoLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xQ
b2ludGVyRXZlbnRzSGl0UnVsZXMuY3BwIj4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1
ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9u
PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9FeGNs
dWRlZEZyb21CdWlsZD4KQEAgLTIwMDE1LDYgKzIwMDE2LDcgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJlbmRlcmluZ1xJbmxpbmVUZXh0Qm94LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcTGF5b3V0UmVwYWludGVyLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcTGF5b3V0U3RhdGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xMaW5lV2lkdGguaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJlbmRlcmluZ1xQYWludEluZm8uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJlbmRlcmluZ1xQYWludFBoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxyZW5kZXJpbmdcUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiIC8+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNWNjNDI5Yi4u
MmM0NjFkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMzQxOSw2ICszNDE5LDggQEAKIAkJQTA3RDMzNTYxNTJCNjMwRTAwMUI2
MzkzIC8qIEpTV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwN0QzMzU0MTUyQjYzMEUwMDFCNjM5MyAvKiBK
U1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmggKi87IH07CiAJCUEwN0QzMzU4MTUyQjYzMkQw
MDFCNjM5MyAvKiBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTA3RDMzNTcxNTJCNjMyRDAwMUI2MzkzIC8q
IFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmggKi87IH07CiAJCUEwOENGMTU0MTUyQjc3QjMw
MDlDNTc3NSAvKiBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMDhDRjE1MzE1MkI3N0IzMDA5QzU3NzUg
LyogV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuY3BwICovOyB9OworCQlBMENCMDAyNDE3REY4
MjY2MDAxNzg5NkIgLyogTGluZVdpZHRoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEwQ0IwMDIzMTdERjgxQUMwMDE3ODk2QiAvKiBMaW5lV2lkdGgu
Y3BwICovOyB9OworCQlBMENCMDAyNTE3REY4MjZDMDAxNzg5NkIgLyogTGluZVdpZHRoLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMENCMDAyMTE3REU5
Q0QwMDAxNzg5NkIgLyogTGluZVdpZHRoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
KTsgfTsgfTsKIAkJQTBFRTBERjUxNDRGODI1NTAwRjgwQjBEIC8qIFdlYkdMRGVidWdSZW5kZXJl
ckluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTBFRTBERjExNDRGODI1NTAwRjgwQjBEIC8qIFdlYkdMRGVidWdSZW5kZXJlckluZm8uY3BwICov
OyB9OwogCQlBMEVFMERGNjE0NEY4MjU1MDBGODBCMEQgLyogV2ViR0xEZWJ1Z1JlbmRlcmVySW5m
by5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTBFRTBE
RjIxNDRGODI1NTAwRjgwQjBEIC8qIFdlYkdMRGVidWdSZW5kZXJlckluZm8uaCAqLzsgfTsKIAkJ
QTBFRTBERjcxNDRGODI1NTAwRjgwQjBEIC8qIFdlYkdMRGVidWdTaGFkZXJzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwRUUwREYzMTQ0RjgyNTUw
MEY4MEIwRCAvKiBXZWJHTERlYnVnU2hhZGVycy5jcHAgKi87IH07CkBAIC0xMDAxMyw2ICsxMDAx
NSw4IEBACiAJCUEwN0QzMzU3MTUyQjYzMkQwMDFCNjM5MyAvKiBXZWJHTFNoYWRlclByZWNpc2lv
bkZvcm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJHTFNoYWRlclBy
ZWNpc2lvbkZvcm1hdC5oOyBwYXRoID0gY2FudmFzL1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEwN0QzMzU5MTUyQjYzM0UwMDFCNjM5
MyAvKiBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1l
ID0gV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMU2hh
ZGVyUHJlY2lzaW9uRm9ybWF0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTA4
Q0YxNTMxNTJCNzdCMzAwOUM1Nzc1IC8qIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdMU2hhZGVyUHJlY2lzaW9u
Rm9ybWF0LmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEwQ0IwMDIxMTdERTlDRDAwMDE3ODk2QiAv
KiBMaW5lV2lkdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGluZVdpZHRo
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEwQ0IwMDIzMTdERjgxQUMwMDE3ODk2
QiAvKiBMaW5lV2lkdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TGluZVdpZHRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTBFRTBERUYxNDRG
ODIzMjAwRjgwQjBEIC8qIFdlYkdMRGVidWdTaGFkZXJzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5h
bWUgPSBXZWJHTERlYnVnU2hhZGVycy5pZGw7IHBhdGggPSBjYW52YXMvV2ViR0xEZWJ1Z1NoYWRl
cnMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMEVFMERGMDE0NEY4MjQzMDBG
ODBCMEQgLyogV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1l
ID0gV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5pZGw7IHBhdGggPSBjYW52YXMvV2ViR0xEZWJ1Z1Jl
bmRlcmVySW5mby5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEwRUUwREYxMTQ0
RjgyNTUwMEY4MEIwRCAvKiBXZWJHTERlYnVnUmVuZGVyZXJJbmZvLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdMRGVidWdSZW5kZXJlckluZm8uY3BwOyBwYXRo
ID0gY2FudmFzL1dlYkdMRGVidWdSZW5kZXJlckluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjAzODgsNiArMjAzOTIsOCBAQAogCQkJCUExMjBBQ0EwMTNGOTk4MzcwMEZF
NEFDNyAvKiBMYXlvdXRSZXBhaW50ZXIuaCAqLywKIAkJCQkyRDkwNjYwNDBCRTE0MUQ0MDA5NTY5
OTggLyogTGF5b3V0U3RhdGUuY3BwICovLAogCQkJCTJEOTA2NjA1MEJFMTQxRDQwMDk1Njk5OCAv
KiBMYXlvdXRTdGF0ZS5oICovLAorCQkJCUEwQ0IwMDIzMTdERjgxQUMwMDE3ODk2QiAvKiBMaW5l
V2lkdGguY3BwICovLAorCQkJCUEwQ0IwMDIxMTdERTlDRDAwMDE3ODk2QiAvKiBMaW5lV2lkdGgu
aCAqLywKIAkJCQk5QkEyNzNGMzE3MjIwNkJCMDA5N0NFNDcgLyogTG9naWNhbFNlbGVjdGlvbk9m
ZnNldENhY2hlcy5oICovLAogCQkJCTM3NzRBQkEzMEZBMjFFQjQwMEFEN0RFOSAvKiBPdmVybGFw
VGVzdFJlcXVlc3RDbGllbnQuaCAqLywKIAkJCQk5Mzc3QUI5RjE1REVGRUVGMDAzMUZEMDQgLyog
UGFnaW5hdGlvbi5oICovLApAQCAtMjQ1NTcsNiArMjQ1NjMsNyBAQAogCQkJCUJFMTZDNTkzMTdD
RkUxNzIwMDg1MkMwNCAvKiBJbmJhbmRHZW5lcmljVGV4dFRyYWNrLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCRTE2QzU5NTE3Q0ZFMTcyMDA4NTJDMDQgLyogSW5iYW5kV2ViVlRUVGV4dFRyYWNrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzEwRDc2ODE3RDhFRTcxMDA1RTI2MjYgLyogUmVuZGVyQmxv
Y2tGbG93LmggaW4gSGVhZGVycyAqLywKKwkJCQlBMENCMDAyNTE3REY4MjZDMDAxNzg5NkIgLyog
TGluZVdpZHRoLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI3NTgyLDYgKzI3NTg5LDcgQEAKIAkJCQlC
RTE2QzU5MjE3Q0ZFMTcyMDA4NTJDMDQgLyogSW5iYW5kR2VuZXJpY1RleHRUcmFjay5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCRTE2QzU5NDE3Q0ZFMTcyMDA4NTJDMDQgLyogSW5iYW5kV2ViVlRU
VGV4dFRyYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMTBENzY3MTdEOEVFNkUwMDVFMjYy
NiAvKiBSZW5kZXJCbG9ja0Zsb3cuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTBDQjAwMjQxN0RG
ODI2NjAwMTc4OTZCIC8qIExpbmVXaWR0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MaW5lV2lkdGguY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0xpbmVXaWR0aC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYjgxZjA0YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9M
aW5lV2lkdGguY3BwCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisg
KiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiTGluZVdpZHRoLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTGluZVdp
ZHRoOjpMaW5lV2lkdGgoUmVuZGVyQmxvY2sqIGJsb2NrLCBib29sIGlzRmlyc3RMaW5lLCBJbmRl
bnRUZXh0T3JOb3Qgc2hvdWxkSW5kZW50VGV4dCkKKyAgICA6IG1fYmxvY2soYmxvY2spCisgICAg
LCBtX3VuY29tbWl0dGVkV2lkdGgoMCkKKyAgICAsIG1fY29tbWl0dGVkV2lkdGgoMCkKKyAgICAs
IG1fb3ZlcmhhbmdXaWR0aCgwKQorICAgICwgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgwKQor
ICAgICwgbV90cmFpbGluZ0NvbGxhcHNlZFdoaXRlc3BhY2VXaWR0aCgwKQorICAgICwgbV9sZWZ0
KDApCisgICAgLCBtX3JpZ2h0KDApCisgICAgLCBtX2F2YWlsYWJsZVdpZHRoKDApCisjaWYgRU5B
QkxFKENTU19TSEFQRVMpCisgICAgLCBtX3NlZ21lbnQoMCkKKyNlbmRpZgorICAgICwgbV9pc0Zp
cnN0TGluZShpc0ZpcnN0TGluZSkKKyAgICAsIG1fc2hvdWxkSW5kZW50VGV4dChzaG91bGRJbmRl
bnRUZXh0KQoreworICAgIEFTU0VSVChibG9jayk7CisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisg
ICAgaWYgKFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gbV9ibG9jay0+bGF5b3V0
U2hhcGVJbnNpZGVJbmZvKCkpCisgICAgICAgIG1fc2VnbWVudCA9IHNoYXBlSW5zaWRlSW5mby0+
Y3VycmVudFNlZ21lbnQoKTsKKyNlbmRpZgorICAgIHVwZGF0ZUF2YWlsYWJsZVdpZHRoKCk7Cit9
CisKK2Jvb2wgTGluZVdpZHRoOjpmaXRzT25MaW5lKGJvb2wgaWdub3JpbmdUcmFpbGluZ1NwYWNl
KSBjb25zdAoreworICAgIHJldHVybiBpZ25vcmluZ1RyYWlsaW5nU3BhY2UgPyBmaXRzT25MaW5l
RXhjbHVkaW5nVHJhaWxpbmdDb2xsYXBzZWRXaGl0ZXNwYWNlKCkgOiBmaXRzT25MaW5lSW5jbHVk
aW5nRXh0cmFXaWR0aCgwKTsKK30KKworYm9vbCBMaW5lV2lkdGg6OmZpdHNPbkxpbmVJbmNsdWRp
bmdFeHRyYVdpZHRoKGZsb2F0IGV4dHJhKSBjb25zdAoreworICAgIHJldHVybiBjdXJyZW50V2lk
dGgoKSArIGV4dHJhIDw9IG1fYXZhaWxhYmxlV2lkdGg7Cit9CisKK2Jvb2wgTGluZVdpZHRoOjpm
aXRzT25MaW5lRXhjbHVkaW5nVHJhaWxpbmdXaGl0ZXNwYWNlKGZsb2F0IGV4dHJhKSBjb25zdAor
eworICAgIHJldHVybiBjdXJyZW50V2lkdGgoKSAtIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgg
KyBleHRyYSA8PSBtX2F2YWlsYWJsZVdpZHRoOworfQorCit2b2lkIExpbmVXaWR0aDo6dXBkYXRl
QXZhaWxhYmxlV2lkdGgoTGF5b3V0VW5pdCByZXBsYWNlZEhlaWdodCkKK3sKKyAgICBMYXlvdXRV
bml0IGhlaWdodCA9IG1fYmxvY2stPmxvZ2ljYWxIZWlnaHQoKTsKKyAgICBMYXlvdXRVbml0IGxv
Z2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0Rm9yTGluZShtX2Jsb2NrLCBtX2lzRmlyc3RMaW5l
LCByZXBsYWNlZEhlaWdodCk7CisgICAgbV9sZWZ0ID0gbV9ibG9jay0+bG9naWNhbExlZnRPZmZz
ZXRGb3JMaW5lKGhlaWdodCwgc2hvdWxkSW5kZW50VGV4dCgpLCBsb2dpY2FsSGVpZ2h0KTsKKyAg
ICBtX3JpZ2h0ID0gbV9ibG9jay0+bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShoZWlnaHQsIHNo
b3VsZEluZGVudFRleHQoKSwgbG9naWNhbEhlaWdodCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NIQVBF
UykKKyAgICBpZiAobV9zZWdtZW50KSB7CisgICAgICAgIG1fbGVmdCA9IHN0ZDo6bWF4PGZsb2F0
PihtX3NlZ21lbnQtPmxvZ2ljYWxMZWZ0LCBtX2xlZnQpOworICAgICAgICBtX3JpZ2h0ID0gc3Rk
OjptaW48ZmxvYXQ+KG1fc2VnbWVudC0+bG9naWNhbFJpZ2h0LCBtX3JpZ2h0KTsKKyAgICB9Cisj
ZW5kaWYKKworICAgIGNvbXB1dGVBdmFpbGFibGVXaWR0aEZyb21MZWZ0QW5kUmlnaHQoKTsKK30K
Kwordm9pZCBMaW5lV2lkdGg6OnNocmlua0F2YWlsYWJsZVdpZHRoRm9yTmV3RmxvYXRJZk5lZWRl
ZChGbG9hdGluZ09iamVjdCogbmV3RmxvYXQpCit7CisgICAgTGF5b3V0VW5pdCBoZWlnaHQgPSBt
X2Jsb2NrLT5sb2dpY2FsSGVpZ2h0KCk7CisgICAgaWYgKGhlaWdodCA8IG5ld0Zsb2F0LT5sb2dp
Y2FsVG9wKG1fYmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHx8IGhlaWdodCA+PSBu
ZXdGbG9hdC0+bG9naWNhbEJvdHRvbShtX2Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisgICAgLy8gV2hl
biBmbG9hdHMgd2l0aCBzaGFwZSBvdXRzaWRlIGFyZSBzdGFja2VkLCB0aGUgZmxvYXRzIGFyZSBw
b3NpdGlvbmVkIGJhc2VkIG9uIHRoZSBtYXJnaW4gYm94IG9mIHRoZSBmbG9hdCwKKyAgICAvLyBu
b3QgdGhlIHNoYXBlJ3MgY29udG91ci4gU2luY2Ugd2UgY29tcHV0ZWQgdGhlIHdpZHRoIGJhc2Vk
IG9uIHRoZSBzaGFwZSBjb250b3VyIHdoZW4gd2UgYWRkZWQgdGhlIGZsb2F0LAorICAgIC8vIHdo
ZW4gd2UgYWRkIGEgc3Vic2VxdWVudCBmbG9hdCBvbiB0aGUgc2FtZSBsaW5lLCB3ZSBuZWVkIHRv
IHVuZG8gdGhlIHNoYXBlIGRlbHRhIGluIG9yZGVyIHRvIHBvc2l0aW9uCisgICAgLy8gYmFzZWQg
b24gdGhlIG1hcmdpbiBib3guIEluIG9yZGVyIHRvIGRvIHRoaXMsIHdlIG5lZWQgdG8gd2FsayBi
YWNrIHRocm91Z2ggdGhlIGZsb2F0aW5nIG9iamVjdCBsaXN0IHRvIGZpbmQKKyAgICAvLyB0aGUg
Zmlyc3QgcHJldmlvdXMgZmxvYXQgdGhhdCBpcyBvbiB0aGUgc2FtZSBzaWRlIGFzIG91ciBuZXdG
bG9hdC4KKyAgICBTaGFwZU91dHNpZGVJbmZvKiBwcmV2aW91c1NoYXBlT3V0c2lkZUluZm8gPSAw
OworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fYmxv
Y2stPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJh
dG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAgRmxvYXRpbmdPYmplY3RTZXRJ
dGVyYXRvciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7CisgICAgZm9yICgtLWl0
OyBpdCAhPSBiZWdpbjsgLS1pdCkgeworICAgICAgICBGbG9hdGluZ09iamVjdCogcHJldmlvdXNG
bG9hdCA9ICppdDsKKyAgICAgICAgaWYgKHByZXZpb3VzRmxvYXQgIT0gbmV3RmxvYXQgJiYgcHJl
dmlvdXNGbG9hdC0+dHlwZSgpID09IG5ld0Zsb2F0LT50eXBlKCkpIHsKKyAgICAgICAgICAgIHBy
ZXZpb3VzU2hhcGVPdXRzaWRlSW5mbyA9IHByZXZpb3VzRmxvYXQtPnJlbmRlcmVyKCktPnNoYXBl
T3V0c2lkZUluZm8oKTsKKyAgICAgICAgICAgIGlmIChwcmV2aW91c1NoYXBlT3V0c2lkZUluZm8p
CisgICAgICAgICAgICAgICAgcHJldmlvdXNTaGFwZU91dHNpZGVJbmZvLT5jb21wdXRlU2VnbWVu
dHNGb3JDb250YWluaW5nQmxvY2tMaW5lKG1fYmxvY2stPmxvZ2ljYWxIZWlnaHQoKSwgcHJldmlv
dXNGbG9hdC0+bG9naWNhbFRvcChtX2Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSwg
bG9naWNhbEhlaWdodEZvckxpbmUobV9ibG9jaywgbV9pc0ZpcnN0TGluZSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTaGFwZU91dHNpZGVJbmZvKiBzaGFw
ZU91dHNpZGVJbmZvID0gbmV3RmxvYXQtPnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8oKTsK
KyAgICBpZiAoc2hhcGVPdXRzaWRlSW5mbykKKyAgICAgICAgc2hhcGVPdXRzaWRlSW5mby0+Y29t
cHV0ZVNlZ21lbnRzRm9yQ29udGFpbmluZ0Jsb2NrTGluZShtX2Jsb2NrLT5sb2dpY2FsSGVpZ2h0
KCksIG5ld0Zsb2F0LT5sb2dpY2FsVG9wKG1fYmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpLCBsb2dpY2FsSGVpZ2h0Rm9yTGluZShtX2Jsb2NrLCBtX2lzRmlyc3RMaW5lKSk7CisjZW5k
aWYKKworICAgIGlmIChuZXdGbG9hdC0+dHlwZSgpID09IEZsb2F0aW5nT2JqZWN0OjpGbG9hdExl
ZnQpIHsKKyAgICAgICAgZmxvYXQgbmV3TGVmdCA9IG5ld0Zsb2F0LT5sb2dpY2FsUmlnaHQobV9i
bG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CisjaWYgRU5BQkxFKENTU19TSEFQRVMp
CisgICAgICAgIGlmIChwcmV2aW91c1NoYXBlT3V0c2lkZUluZm8pCisgICAgICAgICAgICBuZXdM
ZWZ0IC09IHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mby0+cmlnaHRTZWdtZW50TWFyZ2luQm94RGVs
dGEoKTsKKyAgICAgICAgaWYgKHNoYXBlT3V0c2lkZUluZm8pCisgICAgICAgICAgICBuZXdMZWZ0
ICs9IHNoYXBlT3V0c2lkZUluZm8tPnJpZ2h0U2VnbWVudE1hcmdpbkJveERlbHRhKCk7CisjZW5k
aWYKKworICAgICAgICBpZiAoc2hvdWxkSW5kZW50VGV4dCgpICYmIG1fYmxvY2stPnN0eWxlKCkt
PmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKKyAgICAgICAgICAgIG5ld0xlZnQgKz0gZmxvb3JU
b0ludChtX2Jsb2NrLT50ZXh0SW5kZW50T2Zmc2V0KCkpOworICAgICAgICBtX2xlZnQgPSBzdGQ6
Om1heDxmbG9hdD4obV9sZWZ0LCBuZXdMZWZ0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBmbG9h
dCBuZXdSaWdodCA9IG5ld0Zsb2F0LT5sb2dpY2FsTGVmdChtX2Jsb2NrLT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKTsKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKyAgICAgICAgaWYgKHByZXZp
b3VzU2hhcGVPdXRzaWRlSW5mbykKKyAgICAgICAgICAgIG5ld1JpZ2h0IC09IHByZXZpb3VzU2hh
cGVPdXRzaWRlSW5mby0+bGVmdFNlZ21lbnRNYXJnaW5Cb3hEZWx0YSgpOworICAgICAgICBpZiAo
c2hhcGVPdXRzaWRlSW5mbykKKyAgICAgICAgICAgIG5ld1JpZ2h0ICs9IHNoYXBlT3V0c2lkZUlu
Zm8tPmxlZnRTZWdtZW50TWFyZ2luQm94RGVsdGEoKTsKKyNlbmRpZgorCisgICAgICAgIGlmIChz
aG91bGRJbmRlbnRUZXh0KCkgJiYgIW1fYmxvY2stPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSkKKyAgICAgICAgICAgIG5ld1JpZ2h0IC09IGZsb29yVG9JbnQobV9ibG9jay0+dGV4
dEluZGVudE9mZnNldCgpKTsKKyAgICAgICAgbV9yaWdodCA9IHN0ZDo6bWluPGZsb2F0PihtX3Jp
Z2h0LCBuZXdSaWdodCk7CisgICAgfQorCisgICAgY29tcHV0ZUF2YWlsYWJsZVdpZHRoRnJvbUxl
ZnRBbmRSaWdodCgpOworfQorCit2b2lkIExpbmVXaWR0aDo6Y29tbWl0KCkKK3sKKyAgICBtX2Nv
bW1pdHRlZFdpZHRoICs9IG1fdW5jb21taXR0ZWRXaWR0aDsKKyAgICBtX3VuY29tbWl0dGVkV2lk
dGggPSAwOworfQorCit2b2lkIExpbmVXaWR0aDo6YXBwbHlPdmVyaGFuZyhSZW5kZXJSdWJ5UnVu
KiBydWJ5UnVuLCBSZW5kZXJPYmplY3QqIHN0YXJ0UmVuZGVyZXIsIFJlbmRlck9iamVjdCogZW5k
UmVuZGVyZXIpCit7CisgICAgaW50IHN0YXJ0T3Zlcmhhbmc7CisgICAgaW50IGVuZE92ZXJoYW5n
OworICAgIHJ1YnlSdW4tPmdldE92ZXJoYW5nKG1faXNGaXJzdExpbmUsIHN0YXJ0UmVuZGVyZXIs
IGVuZFJlbmRlcmVyLCBzdGFydE92ZXJoYW5nLCBlbmRPdmVyaGFuZyk7CisKKyAgICBzdGFydE92
ZXJoYW5nID0gc3RkOjptaW48aW50PihzdGFydE92ZXJoYW5nLCBtX2NvbW1pdHRlZFdpZHRoKTsK
KyAgICBtX2F2YWlsYWJsZVdpZHRoICs9IHN0YXJ0T3Zlcmhhbmc7CisKKyAgICBlbmRPdmVyaGFu
ZyA9IHN0ZDo6bWF4KHN0ZDo6bWluPGludD4oZW5kT3ZlcmhhbmcsIG1fYXZhaWxhYmxlV2lkdGgg
LSBjdXJyZW50V2lkdGgoKSksIDApOworICAgIG1fYXZhaWxhYmxlV2lkdGggKz0gZW5kT3Zlcmhh
bmc7CisgICAgbV9vdmVyaGFuZ1dpZHRoICs9IHN0YXJ0T3ZlcmhhbmcgKyBlbmRPdmVyaGFuZzsK
K30KKwordm9pZCBMaW5lV2lkdGg6OmZpdEJlbG93RmxvYXRzKCkKK3sKKyAgICBBU1NFUlQoIW1f
Y29tbWl0dGVkV2lkdGgpOworICAgIEFTU0VSVCghZml0c09uTGluZSgpKTsKKworICAgIExheW91
dFVuaXQgZmxvYXRMb2dpY2FsQm90dG9tOworICAgIExheW91dFVuaXQgbGFzdEZsb2F0TG9naWNh
bEJvdHRvbSA9IG1fYmxvY2stPmxvZ2ljYWxIZWlnaHQoKTsKKyAgICBmbG9hdCBuZXdMaW5lV2lk
dGggPSBtX2F2YWlsYWJsZVdpZHRoOworICAgIGZsb2F0IG5ld0xpbmVMZWZ0ID0gbV9sZWZ0Owor
ICAgIGZsb2F0IG5ld0xpbmVSaWdodCA9IG1fcmlnaHQ7CisgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgZmxvYXRMb2dpY2FsQm90dG9tID0gbV9ibG9jay0+bmV4dEZsb2F0TG9naWNhbEJvdHRv
bUJlbG93KGxhc3RGbG9hdExvZ2ljYWxCb3R0b20pOworICAgICAgICBpZiAoZmxvYXRMb2dpY2Fs
Qm90dG9tIDw9IGxhc3RGbG9hdExvZ2ljYWxCb3R0b20pCisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBuZXdMaW5lTGVmdCA9IG1fYmxvY2stPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShm
bG9hdExvZ2ljYWxCb3R0b20sIHNob3VsZEluZGVudFRleHQoKSk7CisgICAgICAgIG5ld0xpbmVS
aWdodCA9IG1fYmxvY2stPmxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoZmxvYXRMb2dpY2FsQm90
dG9tLCBzaG91bGRJbmRlbnRUZXh0KCkpOworICAgICAgICBuZXdMaW5lV2lkdGggPSBtYXgoMC4w
ZiwgbmV3TGluZVJpZ2h0IC0gbmV3TGluZUxlZnQpOworICAgICAgICBsYXN0RmxvYXRMb2dpY2Fs
Qm90dG9tID0gZmxvYXRMb2dpY2FsQm90dG9tOworICAgICAgICBpZiAobmV3TGluZVdpZHRoID49
IG1fdW5jb21taXR0ZWRXaWR0aCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlm
IChuZXdMaW5lV2lkdGggPiBtX2F2YWlsYWJsZVdpZHRoKSB7CisgICAgICAgIG1fYmxvY2stPnNl
dExvZ2ljYWxIZWlnaHQobGFzdEZsb2F0TG9naWNhbEJvdHRvbSk7CisgICAgICAgIG1fYXZhaWxh
YmxlV2lkdGggPSBuZXdMaW5lV2lkdGggKyBtX292ZXJoYW5nV2lkdGg7CisgICAgICAgIG1fbGVm
dCA9IG5ld0xpbmVMZWZ0OworICAgICAgICBtX3JpZ2h0ID0gbmV3TGluZVJpZ2h0OworICAgIH0K
K30KKwordm9pZCBMaW5lV2lkdGg6OnNldFRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKGZsb2F0IGNv
bGxhcHNlZFdoaXRlc3BhY2UsIGZsb2F0IGJvcmRlclBhZGRpbmdNYXJnaW4pCit7CisgICAgbV90
cmFpbGluZ0NvbGxhcHNlZFdoaXRlc3BhY2VXaWR0aCA9IGNvbGxhcHNlZFdoaXRlc3BhY2U7Cisg
ICAgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCA9IGNvbGxhcHNlZFdoaXRlc3BhY2UgKyBib3Jk
ZXJQYWRkaW5nTWFyZ2luOworfQorCit2b2lkIExpbmVXaWR0aDo6Y29tcHV0ZUF2YWlsYWJsZVdp
ZHRoRnJvbUxlZnRBbmRSaWdodCgpCit7CisgICAgbV9hdmFpbGFibGVXaWR0aCA9IG1heCgwLjBm
LCBtX3JpZ2h0IC0gbV9sZWZ0KSArIG1fb3ZlcmhhbmdXaWR0aDsKK30KKworYm9vbCBMaW5lV2lk
dGg6OmZpdHNPbkxpbmVFeGNsdWRpbmdUcmFpbGluZ0NvbGxhcHNlZFdoaXRlc3BhY2UoKSBjb25z
dAoreworICAgIHJldHVybiBjdXJyZW50V2lkdGgoKSAtIG1fdHJhaWxpbmdDb2xsYXBzZWRXaGl0
ZXNwYWNlV2lkdGggPD0gbV9hdmFpbGFibGVXaWR0aDsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xpbmVXaWR0aC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xpbmVXaWR0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NDVj
MDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGluZVdpZHRo
LmgKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBZG9iZSBTeXN0
ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAq
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisg
KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBMaW5lV2lkdGhfaAorI2RlZmluZSBM
aW5lV2lkdGhfaAorCisjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKKyNpbmNsdWRlICJSZW5kZXJS
dWJ5UnVuLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBJbmRlbnRUZXh0T3JOb3Qg
eyBEb05vdEluZGVudFRleHQsIEluZGVudFRleHQgfTsKKworaW5saW5lIExheW91dFVuaXQgbG9n
aWNhbEhlaWdodEZvckxpbmUoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrLCBib29sIGlzRmlyc3RM
aW5lLCBMYXlvdXRVbml0IHJlcGxhY2VkSGVpZ2h0ID0gMCkKK3sKKyAgICBpZiAoIWJsb2NrLT5k
b2N1bWVudCgpLmluTm9RdWlya3NNb2RlKCkgJiYgcmVwbGFjZWRIZWlnaHQpCisgICAgICAgIHJl
dHVybiByZXBsYWNlZEhlaWdodDsKKworICAgIGlmICghKGJsb2NrLT5zdHlsZShpc0ZpcnN0TGlu
ZSktPmxpbmVCb3hDb250YWluKCkgJiBMaW5lQm94Q29udGFpbkJsb2NrKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICByZXR1cm4gbWF4PExheW91dFVuaXQ+KHJlcGxhY2VkSGVpZ2h0LCBibG9j
ay0+bGluZUhlaWdodChpc0ZpcnN0TGluZSwgYmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBIb3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGlu
ZUJveGVzKSk7Cit9CisKK2NsYXNzIExpbmVXaWR0aCB7CitwdWJsaWM6CisgICAgTGluZVdpZHRo
KFJlbmRlckJsb2NrKiBibG9jaywgYm9vbCBpc0ZpcnN0TGluZSwgSW5kZW50VGV4dE9yTm90IHNo
b3VsZEluZGVudFRleHQpOworCisgICAgYm9vbCBmaXRzT25MaW5lKGJvb2wgaWdub3JpbmdUcmFp
bGluZ1NwYWNlID0gZmFsc2UpIGNvbnN0OworICAgIGJvb2wgZml0c09uTGluZUluY2x1ZGluZ0V4
dHJhV2lkdGgoZmxvYXQgZXh0cmEpIGNvbnN0OworICAgIGJvb2wgZml0c09uTGluZUV4Y2x1ZGlu
Z1RyYWlsaW5nV2hpdGVzcGFjZShmbG9hdCBleHRyYSkgY29uc3Q7CisKKyAgICBmbG9hdCBjdXJy
ZW50V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2NvbW1pdHRlZFdpZHRoICsgbV91bmNvbW1pdHRl
ZFdpZHRoOyB9CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBldmVudHVhbGx5IHJlcGxhY2UgdGhl
c2UgdGhyZWUgZnVuY3Rpb25zIGJ5IG9uZXMgdGhhdCB3b3JrIG9uIGEgaGlnaGVyIGFic3RyYWN0
aW9uLgorICAgIGZsb2F0IHVuY29tbWl0dGVkV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3VuY29t
bWl0dGVkV2lkdGg7IH0KKyAgICBmbG9hdCBjb21taXR0ZWRXaWR0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29tbWl0dGVkV2lkdGg7IH0KKyAgICBmbG9hdCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fYXZhaWxhYmxlV2lkdGg7IH0KKworICAgIHZvaWQgdXBkYXRlQXZhaWxhYmxlV2lk
dGgoTGF5b3V0VW5pdCBtaW5pbXVtSGVpZ2h0ID0gMCk7CisgICAgdm9pZCBzaHJpbmtBdmFpbGFi
bGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQoRmxvYXRpbmdPYmplY3QqKTsKKyAgICB2b2lkIGFk
ZFVuY29tbWl0dGVkV2lkdGgoZmxvYXQgZGVsdGEpIHsgbV91bmNvbW1pdHRlZFdpZHRoICs9IGRl
bHRhOyB9CisgICAgdm9pZCBjb21taXQoKTsKKyAgICB2b2lkIGFwcGx5T3ZlcmhhbmcoUmVuZGVy
UnVieVJ1biosIFJlbmRlck9iamVjdCogc3RhcnRSZW5kZXJlciwgUmVuZGVyT2JqZWN0KiBlbmRS
ZW5kZXJlcik7CisgICAgdm9pZCBmaXRCZWxvd0Zsb2F0cygpOworICAgIHZvaWQgc2V0VHJhaWxp
bmdXaGl0ZXNwYWNlV2lkdGgoZmxvYXQgY29sbGFwc2VkV2hpdGVzcGFjZSwgZmxvYXQgYm9yZGVy
UGFkZGluZ01hcmdpbiA9IDApOworCisgICAgYm9vbCBzaG91bGRJbmRlbnRUZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV9zaG91bGRJbmRlbnRUZXh0ID09IEluZGVudFRleHQ7IH0KKworcHJpdmF0ZToK
KyAgICB2b2lkIGNvbXB1dGVBdmFpbGFibGVXaWR0aEZyb21MZWZ0QW5kUmlnaHQoKTsKKyAgICBi
b29sIGZpdHNPbkxpbmVFeGNsdWRpbmdUcmFpbGluZ0NvbGxhcHNlZFdoaXRlc3BhY2UoKSBjb25z
dDsKKworICAgIFJlbmRlckJsb2NrKiBtX2Jsb2NrOworICAgIGZsb2F0IG1fdW5jb21taXR0ZWRX
aWR0aDsKKyAgICBmbG9hdCBtX2NvbW1pdHRlZFdpZHRoOworICAgIGZsb2F0IG1fb3ZlcmhhbmdX
aWR0aDsgLy8gVGhlIGFtb3VudCBieSB3aGljaCB8bV9hdmFpbGFibGVXaWR0aHwgaGFzIGJlZW4g
aW5mbGF0ZWQgdG8gYWNjb3VudCBmb3IgcG9zc2libGUgY29udHJhY3Rpb24gZHVlIHRvIHJ1Ynkg
b3ZlcmhhbmcuCisgICAgZmxvYXQgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aDsKKyAgICBmbG9h
dCBtX3RyYWlsaW5nQ29sbGFwc2VkV2hpdGVzcGFjZVdpZHRoOworICAgIGZsb2F0IG1fbGVmdDsK
KyAgICBmbG9hdCBtX3JpZ2h0OworICAgIGZsb2F0IG1fYXZhaWxhYmxlV2lkdGg7CisjaWYgRU5B
QkxFKENTU19TSEFQRVMpCisgICAgY29uc3QgTGluZVNlZ21lbnQqIG1fc2VnbWVudDsKKyNlbmRp
ZgorICAgIGJvb2wgbV9pc0ZpcnN0TGluZTsKKyAgICBJbmRlbnRUZXh0T3JOb3QgbV9zaG91bGRJ
bmRlbnRUZXh0OworfTsKKworfQorCisjZW5kaWYgLy8gTGluZVdpZHRoX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKaW5kZXggMGE1
NWJjYy4uZDE0NGNkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrTGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrTGluZUxheW91dC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJIeXBoZW5h
dGlvbi5oIgogI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4
dEJveC5oIgorI2luY2x1ZGUgIkxpbmVXaWR0aC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNp
bmNsdWRlICJSZW5kZXJBcmVuYS5oIgogI2luY2x1ZGUgIlJlbmRlckNvbWJpbmVUZXh0LmgiCkBA
IC02NiwxNyArNjcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBXZSBkb24ndCBsZXQgb3Vy
IGxpbmUgYm94IHRyZWUgZm9yIGEgc2luZ2xlIGxpbmUgZ2V0IGFueSBkZWVwZXIgdGhhbiB0aGlz
LgogY29uc3QgdW5zaWduZWQgY01heExpbmVEZXB0aCA9IDIwMDsKIAotc3RhdGljIExheW91dFVu
aXQgbG9naWNhbEhlaWdodEZvckxpbmUoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrLCBib29sIGlz
Rmlyc3RMaW5lLCBMYXlvdXRVbml0IHJlcGxhY2VkSGVpZ2h0ID0gMCkKLXsKLSAgICBpZiAoIWJs
b2NrLT5kb2N1bWVudCgpLmluTm9RdWlya3NNb2RlKCkgJiYgcmVwbGFjZWRIZWlnaHQpCi0gICAg
ICAgIHJldHVybiByZXBsYWNlZEhlaWdodDsKLQotICAgIGlmICghKGJsb2NrLT5zdHlsZShpc0Zp
cnN0TGluZSktPmxpbmVCb3hDb250YWluKCkgJiBMaW5lQm94Q29udGFpbkJsb2NrKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbWF4PExheW91dFVuaXQ+KHJlcGxhY2VkSGVpZ2h0
LCBibG9jay0+bGluZUhlaWdodChpc0ZpcnN0TGluZSwgYmxvY2stPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyBIb3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PZkludGVy
aW9yTGluZUJveGVzKSk7Ci19Ci0KICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKIFNoYXBlSW5zaWRl
SW5mbyogUmVuZGVyQmxvY2s6OmxheW91dFNoYXBlSW5zaWRlSW5mbygpIGNvbnN0CiB7CkBAIC05
NCwyMDggKzg0LDYgQEAgU2hhcGVJbnNpZGVJbmZvKiBSZW5kZXJCbG9jazo6bGF5b3V0U2hhcGVJ
bnNpZGVJbmZvKCkgY29uc3QKIH0KICNlbmRpZgogCi1lbnVtIEluZGVudFRleHRPck5vdCB7IERv
Tm90SW5kZW50VGV4dCwgSW5kZW50VGV4dCB9OwotCi1jbGFzcyBMaW5lV2lkdGggewotcHVibGlj
OgotICAgIExpbmVXaWR0aChSZW5kZXJCbG9jayogYmxvY2ssIGJvb2wgaXNGaXJzdExpbmUsIElu
ZGVudFRleHRPck5vdCBzaG91bGRJbmRlbnRUZXh0KQotICAgICAgICA6IG1fYmxvY2soYmxvY2sp
Ci0gICAgICAgICwgbV91bmNvbW1pdHRlZFdpZHRoKDApCi0gICAgICAgICwgbV9jb21taXR0ZWRX
aWR0aCgwKQotICAgICAgICAsIG1fb3ZlcmhhbmdXaWR0aCgwKQotICAgICAgICAsIG1fdHJhaWxp
bmdXaGl0ZXNwYWNlV2lkdGgoMCkKLSAgICAgICAgLCBtX3RyYWlsaW5nQ29sbGFwc2VkV2hpdGVz
cGFjZVdpZHRoKDApCi0gICAgICAgICwgbV9sZWZ0KDApCi0gICAgICAgICwgbV9yaWdodCgwKQot
ICAgICAgICAsIG1fYXZhaWxhYmxlV2lkdGgoMCkKLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAg
ICAgICAgLCBtX3NlZ21lbnQoMCkKLSNlbmRpZgotICAgICAgICAsIG1faXNGaXJzdExpbmUoaXNG
aXJzdExpbmUpCi0gICAgICAgICwgbV9zaG91bGRJbmRlbnRUZXh0KHNob3VsZEluZGVudFRleHQp
Ci0gICAgewotICAgICAgICBBU1NFUlQoYmxvY2spOwotI2lmIEVOQUJMRShDU1NfU0hBUEVTKQot
ICAgICAgICBpZiAoU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8gPSBtX2Jsb2NrLT5s
YXlvdXRTaGFwZUluc2lkZUluZm8oKSkKLSAgICAgICAgICAgIG1fc2VnbWVudCA9IHNoYXBlSW5z
aWRlSW5mby0+Y3VycmVudFNlZ21lbnQoKTsKLSNlbmRpZgotICAgICAgICB1cGRhdGVBdmFpbGFi
bGVXaWR0aCgpOwotICAgIH0KLSAgICBib29sIGZpdHNPbkxpbmUoYm9vbCBpZ25vcmluZ1RyYWls
aW5nU3BhY2UgPSBmYWxzZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpZ25vcmluZ1RyYWlsaW5n
U3BhY2UgPyBmaXRzT25MaW5lRXhjbHVkaW5nVHJhaWxpbmdDb2xsYXBzZWRXaGl0ZXNwYWNlKCkg
OiBmaXRzT25MaW5lSW5jbHVkaW5nRXh0cmFXaWR0aCgwKTsKLSAgICB9Ci0gICAgYm9vbCBmaXRz
T25MaW5lSW5jbHVkaW5nRXh0cmFXaWR0aChmbG9hdCBleHRyYSkgY29uc3QgeyByZXR1cm4gY3Vy
cmVudFdpZHRoKCkgKyBleHRyYSA8PSBtX2F2YWlsYWJsZVdpZHRoOyB9Ci0gICAgYm9vbCBmaXRz
T25MaW5lRXhjbHVkaW5nVHJhaWxpbmdXaGl0ZXNwYWNlKGZsb2F0IGV4dHJhKSBjb25zdCB7IHJl
dHVybiBjdXJyZW50V2lkdGgoKSAtIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggKyBleHRyYSA8
PSBtX2F2YWlsYWJsZVdpZHRoOyB9Ci0KLSAgICBmbG9hdCBjdXJyZW50V2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX2NvbW1pdHRlZFdpZHRoICsgbV91bmNvbW1pdHRlZFdpZHRoOyB9Ci0gICAgLy8g
RklYTUU6IFdlIHNob3VsZCBldmVudHVhbGx5IHJlcGxhY2UgdGhlc2UgdGhyZWUgZnVuY3Rpb25z
IGJ5IG9uZXMgdGhhdCB3b3JrIG9uIGEgaGlnaGVyIGFic3RyYWN0aW9uLgotICAgIGZsb2F0IHVu
Y29tbWl0dGVkV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3VuY29tbWl0dGVkV2lkdGg7IH0KLSAg
ICBmbG9hdCBjb21taXR0ZWRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY29tbWl0dGVkV2lkdGg7
IH0KLSAgICBmbG9hdCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYXZhaWxhYmxl
V2lkdGg7IH0KLQotICAgIHZvaWQgdXBkYXRlQXZhaWxhYmxlV2lkdGgoTGF5b3V0VW5pdCBtaW5p
bXVtSGVpZ2h0ID0gMCk7Ci0gICAgdm9pZCBzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0
SWZOZWVkZWQoRmxvYXRpbmdPYmplY3QqKTsKLSAgICB2b2lkIGFkZFVuY29tbWl0dGVkV2lkdGgo
ZmxvYXQgZGVsdGEpIHsgbV91bmNvbW1pdHRlZFdpZHRoICs9IGRlbHRhOyB9Ci0gICAgdm9pZCBj
b21taXQoKQotICAgIHsKLSAgICAgICAgbV9jb21taXR0ZWRXaWR0aCArPSBtX3VuY29tbWl0dGVk
V2lkdGg7Ci0gICAgICAgIG1fdW5jb21taXR0ZWRXaWR0aCA9IDA7Ci0gICAgfQotICAgIHZvaWQg
YXBwbHlPdmVyaGFuZyhSZW5kZXJSdWJ5UnVuKiwgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVy
LCBSZW5kZXJPYmplY3QqIGVuZFJlbmRlcmVyKTsKLSAgICB2b2lkIGZpdEJlbG93RmxvYXRzKCk7
Ci0gICAgdm9pZCBzZXRUcmFpbGluZ1doaXRlc3BhY2VXaWR0aChmbG9hdCBjb2xsYXBzZWRXaGl0
ZXNwYWNlLCBmbG9hdCBib3JkZXJQYWRkaW5nTWFyZ2luID0gMCkgeyBtX3RyYWlsaW5nQ29sbGFw
c2VkV2hpdGVzcGFjZVdpZHRoID0gY29sbGFwc2VkV2hpdGVzcGFjZTsgbV90cmFpbGluZ1doaXRl
c3BhY2VXaWR0aCA9ICBjb2xsYXBzZWRXaGl0ZXNwYWNlICsgYm9yZGVyUGFkZGluZ01hcmdpbjsg
fQotCi0gICAgYm9vbCBzaG91bGRJbmRlbnRUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRJ
bmRlbnRUZXh0ID09IEluZGVudFRleHQ7IH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIGNvbXB1dGVB
dmFpbGFibGVXaWR0aEZyb21MZWZ0QW5kUmlnaHQoKQotICAgIHsKLSAgICAgICAgbV9hdmFpbGFi
bGVXaWR0aCA9IG1heCgwLjBmLCBtX3JpZ2h0IC0gbV9sZWZ0KSArIG1fb3ZlcmhhbmdXaWR0aDsK
LSAgICB9Ci0gICAgYm9vbCBmaXRzT25MaW5lRXhjbHVkaW5nVHJhaWxpbmdDb2xsYXBzZWRXaGl0
ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gY3VycmVudFdpZHRoKCkgLSBtX3RyYWlsaW5nQ29sbGFw
c2VkV2hpdGVzcGFjZVdpZHRoIDw9IG1fYXZhaWxhYmxlV2lkdGg7IH0KLQotcHJpdmF0ZToKLSAg
ICBSZW5kZXJCbG9jayogbV9ibG9jazsKLSAgICBmbG9hdCBtX3VuY29tbWl0dGVkV2lkdGg7Ci0g
ICAgZmxvYXQgbV9jb21taXR0ZWRXaWR0aDsKLSAgICBmbG9hdCBtX292ZXJoYW5nV2lkdGg7IC8v
IFRoZSBhbW91bnQgYnkgd2hpY2ggfG1fYXZhaWxhYmxlV2lkdGh8IGhhcyBiZWVuIGluZmxhdGVk
IHRvIGFjY291bnQgZm9yIHBvc3NpYmxlIGNvbnRyYWN0aW9uIGR1ZSB0byBydWJ5IG92ZXJoYW5n
LgotICAgIGZsb2F0IG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGg7Ci0gICAgZmxvYXQgbV90cmFp
bGluZ0NvbGxhcHNlZFdoaXRlc3BhY2VXaWR0aDsKLSAgICBmbG9hdCBtX2xlZnQ7Ci0gICAgZmxv
YXQgbV9yaWdodDsKLSAgICBmbG9hdCBtX2F2YWlsYWJsZVdpZHRoOwotI2lmIEVOQUJMRShDU1Nf
U0hBUEVTKQotICAgIGNvbnN0IExpbmVTZWdtZW50KiBtX3NlZ21lbnQ7Ci0jZW5kaWYKLSAgICBi
b29sIG1faXNGaXJzdExpbmU7Ci0gICAgSW5kZW50VGV4dE9yTm90IG1fc2hvdWxkSW5kZW50VGV4
dDsKLX07Ci0KLWlubGluZSB2b2lkIExpbmVXaWR0aDo6dXBkYXRlQXZhaWxhYmxlV2lkdGgoTGF5
b3V0VW5pdCByZXBsYWNlZEhlaWdodCkKLXsKLSAgICBMYXlvdXRVbml0IGhlaWdodCA9IG1fYmxv
Y2stPmxvZ2ljYWxIZWlnaHQoKTsKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSBsb2dp
Y2FsSGVpZ2h0Rm9yTGluZShtX2Jsb2NrLCBtX2lzRmlyc3RMaW5lLCByZXBsYWNlZEhlaWdodCk7
Ci0gICAgbV9sZWZ0ID0gbV9ibG9jay0+bG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKGhlaWdodCwg
c2hvdWxkSW5kZW50VGV4dCgpLCBsb2dpY2FsSGVpZ2h0KTsKLSAgICBtX3JpZ2h0ID0gbV9ibG9j
ay0+bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShoZWlnaHQsIHNob3VsZEluZGVudFRleHQoKSwg
bG9naWNhbEhlaWdodCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICBpZiAobV9zZWdt
ZW50KSB7Ci0gICAgICAgIG1fbGVmdCA9IG1heDxmbG9hdD4obV9zZWdtZW50LT5sb2dpY2FsTGVm
dCwgbV9sZWZ0KTsKLSAgICAgICAgbV9yaWdodCA9IG1pbjxmbG9hdD4obV9zZWdtZW50LT5sb2dp
Y2FsUmlnaHQsIG1fcmlnaHQpOwotICAgIH0KLSNlbmRpZgotCi0gICAgY29tcHV0ZUF2YWlsYWJs
ZVdpZHRoRnJvbUxlZnRBbmRSaWdodCgpOwotfQotCi1pbmxpbmUgdm9pZCBMaW5lV2lkdGg6OnNo
cmlua0F2YWlsYWJsZVdpZHRoRm9yTmV3RmxvYXRJZk5lZWRlZChGbG9hdGluZ09iamVjdCogbmV3
RmxvYXQpCi17Ci0gICAgTGF5b3V0VW5pdCBoZWlnaHQgPSBtX2Jsb2NrLT5sb2dpY2FsSGVpZ2h0
KCk7Ci0gICAgaWYgKGhlaWdodCA8IG5ld0Zsb2F0LT5sb2dpY2FsVG9wKG1fYmxvY2stPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpIHx8IGhlaWdodCA+PSBuZXdGbG9hdC0+bG9naWNhbEJvdHRv
bShtX2Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0jaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgLy8gV2hlbiBmbG9hdHMgd2l0aCBzaGFwZSBv
dXRzaWRlIGFyZSBzdGFja2VkLCB0aGUgZmxvYXRzIGFyZSBwb3NpdGlvbmVkIGJhc2VkIG9uIHRo
ZSBtYXJnaW4gYm94IG9mIHRoZSBmbG9hdCwKLSAgICAvLyBub3QgdGhlIHNoYXBlJ3MgY29udG91
ci4gU2luY2Ugd2UgY29tcHV0ZWQgdGhlIHdpZHRoIGJhc2VkIG9uIHRoZSBzaGFwZSBjb250b3Vy
IHdoZW4gd2UgYWRkZWQgdGhlIGZsb2F0LAotICAgIC8vIHdoZW4gd2UgYWRkIGEgc3Vic2VxdWVu
dCBmbG9hdCBvbiB0aGUgc2FtZSBsaW5lLCB3ZSBuZWVkIHRvIHVuZG8gdGhlIHNoYXBlIGRlbHRh
IGluIG9yZGVyIHRvIHBvc2l0aW9uCi0gICAgLy8gYmFzZWQgb24gdGhlIG1hcmdpbiBib3guIElu
IG9yZGVyIHRvIGRvIHRoaXMsIHdlIG5lZWQgdG8gd2FsayBiYWNrIHRocm91Z2ggdGhlIGZsb2F0
aW5nIG9iamVjdCBsaXN0IHRvIGZpbmQKLSAgICAvLyB0aGUgZmlyc3QgcHJldmlvdXMgZmxvYXQg
dGhhdCBpcyBvbiB0aGUgc2FtZSBzaWRlIGFzIG91ciBuZXdGbG9hdC4KLSAgICBTaGFwZU91dHNp
ZGVJbmZvKiBwcmV2aW91c1NoYXBlT3V0c2lkZUluZm8gPSAwOwotICAgIGNvbnN0IEZsb2F0aW5n
T2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fYmxvY2stPm1fZmxvYXRpbmdPYmplY3Rz
LT5zZXQoKTsKLSAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmpl
Y3RTZXQuZW5kKCk7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdpbiA9IGZsb2F0
aW5nT2JqZWN0U2V0LmJlZ2luKCk7Ci0gICAgZm9yICgtLWl0OyBpdCAhPSBiZWdpbjsgLS1pdCkg
ewotICAgICAgICBGbG9hdGluZ09iamVjdCogcHJldmlvdXNGbG9hdCA9ICppdDsKLSAgICAgICAg
aWYgKHByZXZpb3VzRmxvYXQgIT0gbmV3RmxvYXQgJiYgcHJldmlvdXNGbG9hdC0+dHlwZSgpID09
IG5ld0Zsb2F0LT50eXBlKCkpIHsKLSAgICAgICAgICAgIHByZXZpb3VzU2hhcGVPdXRzaWRlSW5m
byA9IHByZXZpb3VzRmxvYXQtPnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8oKTsKLSAgICAg
ICAgICAgIGlmIChwcmV2aW91c1NoYXBlT3V0c2lkZUluZm8pIHsKLSAgICAgICAgICAgICAgICBw
cmV2aW91c1NoYXBlT3V0c2lkZUluZm8tPmNvbXB1dGVTZWdtZW50c0ZvckNvbnRhaW5pbmdCbG9j
a0xpbmUobV9ibG9jay0+bG9naWNhbEhlaWdodCgpLCBwcmV2aW91c0Zsb2F0LT5sb2dpY2FsVG9w
KG1fYmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpLCBsb2dpY2FsSGVpZ2h0Rm9yTGlu
ZShtX2Jsb2NrLCBtX2lzRmlyc3RMaW5lKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0
c2lkZUluZm8gPSBuZXdGbG9hdC0+cmVuZGVyZXIoKS0+c2hhcGVPdXRzaWRlSW5mbygpOwotICAg
IGlmIChzaGFwZU91dHNpZGVJbmZvKSB7Ci0gICAgICAgIHNoYXBlT3V0c2lkZUluZm8tPmNvbXB1
dGVTZWdtZW50c0ZvckNvbnRhaW5pbmdCbG9ja0xpbmUobV9ibG9jay0+bG9naWNhbEhlaWdodCgp
LCBuZXdGbG9hdC0+bG9naWNhbFRvcChtX2Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KSwgbG9naWNhbEhlaWdodEZvckxpbmUobV9ibG9jaywgbV9pc0ZpcnN0TGluZSkpOwotICAgIH0K
LSNlbmRpZgotCi0gICAgaWYgKG5ld0Zsb2F0LT50eXBlKCkgPT0gRmxvYXRpbmdPYmplY3Q6OkZs
b2F0TGVmdCkgewotICAgICAgICBmbG9hdCBuZXdMZWZ0ID0gbmV3RmxvYXQtPmxvZ2ljYWxSaWdo
dChtX2Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKLSNpZiBFTkFCTEUoQ1NTX1NI
QVBFUykKLSAgICAgICAgaWYgKHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mbykKLSAgICAgICAgICAg
IG5ld0xlZnQgLT0gcHJldmlvdXNTaGFwZU91dHNpZGVJbmZvLT5yaWdodFNlZ21lbnRNYXJnaW5C
b3hEZWx0YSgpOwotICAgICAgICBpZiAoc2hhcGVPdXRzaWRlSW5mbykKLSAgICAgICAgICAgIG5l
d0xlZnQgKz0gc2hhcGVPdXRzaWRlSW5mby0+cmlnaHRTZWdtZW50TWFyZ2luQm94RGVsdGEoKTsK
LSNlbmRpZgotCi0gICAgICAgIGlmIChzaG91bGRJbmRlbnRUZXh0KCkgJiYgbV9ibG9jay0+c3R5
bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICAgICAgbmV3TGVmdCArPSBm
bG9vclRvSW50KG1fYmxvY2stPnRleHRJbmRlbnRPZmZzZXQoKSk7Ci0gICAgICAgIG1fbGVmdCA9
IG1heDxmbG9hdD4obV9sZWZ0LCBuZXdMZWZ0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBmbG9h
dCBuZXdSaWdodCA9IG5ld0Zsb2F0LT5sb2dpY2FsTGVmdChtX2Jsb2NrLT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKTsKLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAgaWYgKHByZXZp
b3VzU2hhcGVPdXRzaWRlSW5mbykKLSAgICAgICAgICAgIG5ld1JpZ2h0IC09IHByZXZpb3VzU2hh
cGVPdXRzaWRlSW5mby0+bGVmdFNlZ21lbnRNYXJnaW5Cb3hEZWx0YSgpOwotICAgICAgICBpZiAo
c2hhcGVPdXRzaWRlSW5mbykKLSAgICAgICAgICAgIG5ld1JpZ2h0ICs9IHNoYXBlT3V0c2lkZUlu
Zm8tPmxlZnRTZWdtZW50TWFyZ2luQm94RGVsdGEoKTsKLSNlbmRpZgotCi0gICAgICAgIGlmIChz
aG91bGRJbmRlbnRUZXh0KCkgJiYgIW1fYmxvY2stPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSkKLSAgICAgICAgICAgIG5ld1JpZ2h0IC09IGZsb29yVG9JbnQobV9ibG9jay0+dGV4
dEluZGVudE9mZnNldCgpKTsKLSAgICAgICAgbV9yaWdodCA9IG1pbjxmbG9hdD4obV9yaWdodCwg
bmV3UmlnaHQpOwotICAgIH0KLQotICAgIGNvbXB1dGVBdmFpbGFibGVXaWR0aEZyb21MZWZ0QW5k
UmlnaHQoKTsKLX0KLQotdm9pZCBMaW5lV2lkdGg6OmFwcGx5T3ZlcmhhbmcoUmVuZGVyUnVieVJ1
biogcnVieVJ1biwgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyLCBSZW5kZXJPYmplY3QqIGVu
ZFJlbmRlcmVyKQotewotICAgIGludCBzdGFydE92ZXJoYW5nOwotICAgIGludCBlbmRPdmVyaGFu
ZzsKLSAgICBydWJ5UnVuLT5nZXRPdmVyaGFuZyhtX2lzRmlyc3RMaW5lLCBzdGFydFJlbmRlcmVy
LCBlbmRSZW5kZXJlciwgc3RhcnRPdmVyaGFuZywgZW5kT3ZlcmhhbmcpOwotCi0gICAgc3RhcnRP
dmVyaGFuZyA9IG1pbjxpbnQ+KHN0YXJ0T3ZlcmhhbmcsIG1fY29tbWl0dGVkV2lkdGgpOwotICAg
IG1fYXZhaWxhYmxlV2lkdGggKz0gc3RhcnRPdmVyaGFuZzsKLQotICAgIGVuZE92ZXJoYW5nID0g
bWF4KG1pbjxpbnQ+KGVuZE92ZXJoYW5nLCBtX2F2YWlsYWJsZVdpZHRoIC0gY3VycmVudFdpZHRo
KCkpLCAwKTsKLSAgICBtX2F2YWlsYWJsZVdpZHRoICs9IGVuZE92ZXJoYW5nOwotICAgIG1fb3Zl
cmhhbmdXaWR0aCArPSBzdGFydE92ZXJoYW5nICsgZW5kT3Zlcmhhbmc7Ci19Ci0KLXZvaWQgTGlu
ZVdpZHRoOjpmaXRCZWxvd0Zsb2F0cygpCi17Ci0gICAgQVNTRVJUKCFtX2NvbW1pdHRlZFdpZHRo
KTsKLSAgICBBU1NFUlQoIWZpdHNPbkxpbmUoKSk7Ci0KLSAgICBMYXlvdXRVbml0IGZsb2F0TG9n
aWNhbEJvdHRvbTsKLSAgICBMYXlvdXRVbml0IGxhc3RGbG9hdExvZ2ljYWxCb3R0b20gPSBtX2Js
b2NrLT5sb2dpY2FsSGVpZ2h0KCk7Ci0gICAgZmxvYXQgbmV3TGluZVdpZHRoID0gbV9hdmFpbGFi
bGVXaWR0aDsKLSAgICBmbG9hdCBuZXdMaW5lTGVmdCA9IG1fbGVmdDsKLSAgICBmbG9hdCBuZXdM
aW5lUmlnaHQgPSBtX3JpZ2h0OwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGZsb2F0TG9n
aWNhbEJvdHRvbSA9IG1fYmxvY2stPm5leHRGbG9hdExvZ2ljYWxCb3R0b21CZWxvdyhsYXN0Rmxv
YXRMb2dpY2FsQm90dG9tKTsKLSAgICAgICAgaWYgKGZsb2F0TG9naWNhbEJvdHRvbSA8PSBsYXN0
RmxvYXRMb2dpY2FsQm90dG9tKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgbmV3TGlu
ZUxlZnQgPSBtX2Jsb2NrLT5sb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoZmxvYXRMb2dpY2FsQm90
dG9tLCBzaG91bGRJbmRlbnRUZXh0KCkpOwotICAgICAgICBuZXdMaW5lUmlnaHQgPSBtX2Jsb2Nr
LT5sb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKGZsb2F0TG9naWNhbEJvdHRvbSwgc2hvdWxkSW5k
ZW50VGV4dCgpKTsKLSAgICAgICAgbmV3TGluZVdpZHRoID0gbWF4KDAuMGYsIG5ld0xpbmVSaWdo
dCAtIG5ld0xpbmVMZWZ0KTsKLSAgICAgICAgbGFzdEZsb2F0TG9naWNhbEJvdHRvbSA9IGZsb2F0
TG9naWNhbEJvdHRvbTsKLSAgICAgICAgaWYgKG5ld0xpbmVXaWR0aCA+PSBtX3VuY29tbWl0dGVk
V2lkdGgpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAobmV3TGluZVdpZHRo
ID4gbV9hdmFpbGFibGVXaWR0aCkgewotICAgICAgICBtX2Jsb2NrLT5zZXRMb2dpY2FsSGVpZ2h0
KGxhc3RGbG9hdExvZ2ljYWxCb3R0b20pOwotICAgICAgICBtX2F2YWlsYWJsZVdpZHRoID0gbmV3
TGluZVdpZHRoICsgbV9vdmVyaGFuZ1dpZHRoOwotICAgICAgICBtX2xlZnQgPSBuZXdMaW5lTGVm
dDsKLSAgICAgICAgbV9yaWdodCA9IG5ld0xpbmVSaWdodDsKLSAgICB9Ci19Ci0KIGNsYXNzIExp
bmVJbmZvIHsKIHB1YmxpYzoKICAgICBMaW5lSW5mbygpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211253</attachid>
            <date>2013-09-10 15:24:49 -0700</date>
            <delta_ts>2013-09-11 10:51:21 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>movelinewidth2.patch</filename>
            <type>text/plain</type>
            <size>33145</size>
            <attacher name="Zoltan Horvath">zoltan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMTU4OTk4Ni4uYWIxOTZmYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTIxMDgsNiArMjEwOCw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKICAgICByZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCiAg
ICAgcmVuZGVyaW5nL0xheW91dFJlcGFpbnRlci5jcHAKKyAgICByZW5kZXJpbmcvTGluZVdpZHRo
LmNwcAogICAgIHJlbmRlcmluZy9Qb2ludGVyRXZlbnRzSGl0UnVsZXMuY3BwCiAgICAgcmVuZGVy
aW5nL1JlbmRlckFwcGxldC5jcHAKICAgICByZW5kZXJpbmcvUmVuZGVyQXJlbmEuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggYmMyOGQ0YS4uZWUzODY1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisy
MDEzLTA5LTEwICBab2x0YW4gSG9ydmF0aCAgPHpvbHRhbkB3ZWJraXQub3JnPgorCisgICAgICAg
IE1vdmUgTGluZVdpZHRoIG91dCBvZiBSZW5kZXJCbG9ja0xpbmVMYXlvdXQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTEwNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgTGluZVdpZHRoIGNsYXNz
IGFuZCByZWxhdGVkIGNvZGUgaW50byBMaW5lV2lkdGgue2gsY3BwfS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToK
KyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvTGlu
ZVdpZHRoLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OmFwcGx5T3Zl
cmhhbmcpOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRoOjpmaXRCZWxvd0Zsb2F0cyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL0xpbmVXaWR0aC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmxvZ2ljYWxIZWlnaHRGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVXaWR0aDo6TGlu
ZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVXaWR0aDo6Zml0c09uTGluZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OmZpdHNPbkxpbmVJbmNsdWRpbmdFeHRyYVdpZHRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkxpbmVXaWR0aDo6Zml0c09uTGluZUV4Y2x1ZGluZ1RyYWlsaW5n
V2hpdGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OmN1cnJlbnRXaWR0aCk6
CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OnVuY29tbWl0dGVkV2lkdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6TGluZVdpZHRoOjpjb21taXR0ZWRXaWR0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpMaW5lV2lkdGg6OmF2YWlsYWJsZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVXaWR0
aDo6YWRkVW5jb21taXR0ZWRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OmNv
bW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OnNldFRyYWlsaW5nV2hpdGVzcGFj
ZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVXaWR0aDo6c2hvdWxkSW5kZW50VGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OmNvbXB1dGVBdmFpbGFibGVXaWR0aEZyb21M
ZWZ0QW5kUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRoOjpmaXRzT25MaW5lRXhj
bHVkaW5nVHJhaWxpbmdDb2xsYXBzZWRXaGl0ZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Okxp
bmVXaWR0aDo6dXBkYXRlQXZhaWxhYmxlV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdp
ZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorCiAyMDEzLTA5LTEwICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFttYWNdIFBERkRv
Y3VtZW50SW1hZ2Ugc2hvdWxkIHVzZSBQREZLaXQgdG8gZHJhdwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KaW5kZXggNWZhNzIwNy4uOGFlNjMyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCkBAIC00MzY2LDYgKzQzNjYsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9Mb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzLmggXAogCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRSZXBhaW50ZXIuaCBcCiAJU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0xheW91dFJlcGFpbnRlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9MaW5lV2lkdGguaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xpbmVXaWR0aC5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9PdmVybGFwVGVzdFJlcXVlc3RDbGllbnQu
aCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1BhZ2luYXRpb24uaCBcCiAJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1BhaW50SW5mby5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDZmMzhkN2QuLmJj
YjZlMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNl
L1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMTE1MSw2ICsxMTUxLDcgQEAgU09VUkNFUyArPSBcCiAg
ICAgcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwIFwKICAgICByZW5kZXJpbmcvTGF5b3V0U3Rh
dGUuY3BwIFwKICAgICByZW5kZXJpbmcvTGF5b3V0UmVwYWludGVyLmNwcCBcCisgICAgcmVuZGVy
aW5nL0xpbmVXaWR0aC5jcHAgXAogICAgIHJlbmRlcmluZy9SZW5kZXJBcHBsZXQuY3BwIFwKICAg
ICByZW5kZXJpbmcvUmVuZGVyQXJlbmEuY3BwIFwKICAgICByZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwIFwKQEAgLTI0MDQsNiArMjQwNSw3IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmggXAogICAgIHJlbmRlcmluZy9MYXlvdXRSZXBhaW50ZXIuaCBcCiAgICAg
cmVuZGVyaW5nL0xheW91dFN0YXRlLmggXAorICAgIHJlbmRlcmluZy9MaW5lV2lkdGguaCBcCiAg
ICAgcmVuZGVyaW5nL0xvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMuaCBcCiAgICAgcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oIFwKICAgICByZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTEZlbmNlZC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ov
V2ViQ29yZS52Y3hwcm9qCmluZGV4IDE0ZGFhOTEuLjZhNzI3ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAtOTY0Miw2ICs5NjQyLDcg
QEAKICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWls
ZD4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+
CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdc
TGluZVdpZHRoLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xQ
b2ludGVyRXZlbnRzSGl0UnVsZXMuY3BwIj4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1
ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9u
PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9FeGNs
dWRlZEZyb21CdWlsZD4KQEAgLTIwMDE1LDYgKzIwMDE2LDcgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJlbmRlcmluZ1xJbmxpbmVUZXh0Qm94LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcTGF5b3V0UmVwYWludGVyLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcTGF5b3V0U3RhdGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xMaW5lV2lkdGguaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJlbmRlcmluZ1xQYWludEluZm8uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJlbmRlcmluZ1xQYWludFBoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxyZW5kZXJpbmdcUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiIC8+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNWNjNDI5Yi4u
MmM0NjFkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMzQxOSw2ICszNDE5LDggQEAKIAkJQTA3RDMzNTYxNTJCNjMwRTAwMUI2
MzkzIC8qIEpTV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwN0QzMzU0MTUyQjYzMEUwMDFCNjM5MyAvKiBK
U1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmggKi87IH07CiAJCUEwN0QzMzU4MTUyQjYzMkQw
MDFCNjM5MyAvKiBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTA3RDMzNTcxNTJCNjMyRDAwMUI2MzkzIC8q
IFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmggKi87IH07CiAJCUEwOENGMTU0MTUyQjc3QjMw
MDlDNTc3NSAvKiBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMDhDRjE1MzE1MkI3N0IzMDA5QzU3NzUg
LyogV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuY3BwICovOyB9OworCQlBMENCMDAyNDE3REY4
MjY2MDAxNzg5NkIgLyogTGluZVdpZHRoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEwQ0IwMDIzMTdERjgxQUMwMDE3ODk2QiAvKiBMaW5lV2lkdGgu
Y3BwICovOyB9OworCQlBMENCMDAyNTE3REY4MjZDMDAxNzg5NkIgLyogTGluZVdpZHRoLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMENCMDAyMTE3REU5
Q0QwMDAxNzg5NkIgLyogTGluZVdpZHRoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
KTsgfTsgfTsKIAkJQTBFRTBERjUxNDRGODI1NTAwRjgwQjBEIC8qIFdlYkdMRGVidWdSZW5kZXJl
ckluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTBFRTBERjExNDRGODI1NTAwRjgwQjBEIC8qIFdlYkdMRGVidWdSZW5kZXJlckluZm8uY3BwICov
OyB9OwogCQlBMEVFMERGNjE0NEY4MjU1MDBGODBCMEQgLyogV2ViR0xEZWJ1Z1JlbmRlcmVySW5m
by5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTBFRTBE
RjIxNDRGODI1NTAwRjgwQjBEIC8qIFdlYkdMRGVidWdSZW5kZXJlckluZm8uaCAqLzsgfTsKIAkJ
QTBFRTBERjcxNDRGODI1NTAwRjgwQjBEIC8qIFdlYkdMRGVidWdTaGFkZXJzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwRUUwREYzMTQ0RjgyNTUw
MEY4MEIwRCAvKiBXZWJHTERlYnVnU2hhZGVycy5jcHAgKi87IH07CkBAIC0xMDAxMyw2ICsxMDAx
NSw4IEBACiAJCUEwN0QzMzU3MTUyQjYzMkQwMDFCNjM5MyAvKiBXZWJHTFNoYWRlclByZWNpc2lv
bkZvcm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJHTFNoYWRlclBy
ZWNpc2lvbkZvcm1hdC5oOyBwYXRoID0gY2FudmFzL1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEwN0QzMzU5MTUyQjYzM0UwMDFCNjM5
MyAvKiBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1l
ID0gV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMU2hh
ZGVyUHJlY2lzaW9uRm9ybWF0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTA4
Q0YxNTMxNTJCNzdCMzAwOUM1Nzc1IC8qIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdMU2hhZGVyUHJlY2lzaW9u
Rm9ybWF0LmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEwQ0IwMDIxMTdERTlDRDAwMDE3ODk2QiAv
KiBMaW5lV2lkdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGluZVdpZHRo
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEwQ0IwMDIzMTdERjgxQUMwMDE3ODk2
QiAvKiBMaW5lV2lkdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TGluZVdpZHRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTBFRTBERUYxNDRG
ODIzMjAwRjgwQjBEIC8qIFdlYkdMRGVidWdTaGFkZXJzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5h
bWUgPSBXZWJHTERlYnVnU2hhZGVycy5pZGw7IHBhdGggPSBjYW52YXMvV2ViR0xEZWJ1Z1NoYWRl
cnMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMEVFMERGMDE0NEY4MjQzMDBG
ODBCMEQgLyogV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1l
ID0gV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5pZGw7IHBhdGggPSBjYW52YXMvV2ViR0xEZWJ1Z1Jl
bmRlcmVySW5mby5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEwRUUwREYxMTQ0
RjgyNTUwMEY4MEIwRCAvKiBXZWJHTERlYnVnUmVuZGVyZXJJbmZvLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdMRGVidWdSZW5kZXJlckluZm8uY3BwOyBwYXRo
ID0gY2FudmFzL1dlYkdMRGVidWdSZW5kZXJlckluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjAzODgsNiArMjAzOTIsOCBAQAogCQkJCUExMjBBQ0EwMTNGOTk4MzcwMEZF
NEFDNyAvKiBMYXlvdXRSZXBhaW50ZXIuaCAqLywKIAkJCQkyRDkwNjYwNDBCRTE0MUQ0MDA5NTY5
OTggLyogTGF5b3V0U3RhdGUuY3BwICovLAogCQkJCTJEOTA2NjA1MEJFMTQxRDQwMDk1Njk5OCAv
KiBMYXlvdXRTdGF0ZS5oICovLAorCQkJCUEwQ0IwMDIzMTdERjgxQUMwMDE3ODk2QiAvKiBMaW5l
V2lkdGguY3BwICovLAorCQkJCUEwQ0IwMDIxMTdERTlDRDAwMDE3ODk2QiAvKiBMaW5lV2lkdGgu
aCAqLywKIAkJCQk5QkEyNzNGMzE3MjIwNkJCMDA5N0NFNDcgLyogTG9naWNhbFNlbGVjdGlvbk9m
ZnNldENhY2hlcy5oICovLAogCQkJCTM3NzRBQkEzMEZBMjFFQjQwMEFEN0RFOSAvKiBPdmVybGFw
VGVzdFJlcXVlc3RDbGllbnQuaCAqLywKIAkJCQk5Mzc3QUI5RjE1REVGRUVGMDAzMUZEMDQgLyog
UGFnaW5hdGlvbi5oICovLApAQCAtMjQ1NTcsNiArMjQ1NjMsNyBAQAogCQkJCUJFMTZDNTkzMTdD
RkUxNzIwMDg1MkMwNCAvKiBJbmJhbmRHZW5lcmljVGV4dFRyYWNrLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCRTE2QzU5NTE3Q0ZFMTcyMDA4NTJDMDQgLyogSW5iYW5kV2ViVlRUVGV4dFRyYWNrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzEwRDc2ODE3RDhFRTcxMDA1RTI2MjYgLyogUmVuZGVyQmxv
Y2tGbG93LmggaW4gSGVhZGVycyAqLywKKwkJCQlBMENCMDAyNTE3REY4MjZDMDAxNzg5NkIgLyog
TGluZVdpZHRoLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI3NTgyLDYgKzI3NTg5LDcgQEAKIAkJCQlC
RTE2QzU5MjE3Q0ZFMTcyMDA4NTJDMDQgLyogSW5iYW5kR2VuZXJpY1RleHRUcmFjay5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCRTE2QzU5NDE3Q0ZFMTcyMDA4NTJDMDQgLyogSW5iYW5kV2ViVlRU
VGV4dFRyYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMTBENzY3MTdEOEVFNkUwMDVFMjYy
NiAvKiBSZW5kZXJCbG9ja0Zsb3cuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTBDQjAwMjQxN0RG
ODI2NjAwMTc4OTZCIC8qIExpbmVXaWR0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MaW5lV2lkdGguY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0xpbmVXaWR0aC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYjgxZjA0YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9M
aW5lV2lkdGguY3BwCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisg
KiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiTGluZVdpZHRoLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTGluZVdp
ZHRoOjpMaW5lV2lkdGgoUmVuZGVyQmxvY2sqIGJsb2NrLCBib29sIGlzRmlyc3RMaW5lLCBJbmRl
bnRUZXh0T3JOb3Qgc2hvdWxkSW5kZW50VGV4dCkKKyAgICA6IG1fYmxvY2soYmxvY2spCisgICAg
LCBtX3VuY29tbWl0dGVkV2lkdGgoMCkKKyAgICAsIG1fY29tbWl0dGVkV2lkdGgoMCkKKyAgICAs
IG1fb3ZlcmhhbmdXaWR0aCgwKQorICAgICwgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgwKQor
ICAgICwgbV90cmFpbGluZ0NvbGxhcHNlZFdoaXRlc3BhY2VXaWR0aCgwKQorICAgICwgbV9sZWZ0
KDApCisgICAgLCBtX3JpZ2h0KDApCisgICAgLCBtX2F2YWlsYWJsZVdpZHRoKDApCisjaWYgRU5B
QkxFKENTU19TSEFQRVMpCisgICAgLCBtX3NlZ21lbnQoMCkKKyNlbmRpZgorICAgICwgbV9pc0Zp
cnN0TGluZShpc0ZpcnN0TGluZSkKKyAgICAsIG1fc2hvdWxkSW5kZW50VGV4dChzaG91bGRJbmRl
bnRUZXh0KQoreworICAgIEFTU0VSVChibG9jayk7CisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisg
ICAgaWYgKFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gbV9ibG9jay0+bGF5b3V0
U2hhcGVJbnNpZGVJbmZvKCkpCisgICAgICAgIG1fc2VnbWVudCA9IHNoYXBlSW5zaWRlSW5mby0+
Y3VycmVudFNlZ21lbnQoKTsKKyNlbmRpZgorICAgIHVwZGF0ZUF2YWlsYWJsZVdpZHRoKCk7Cit9
CisKK2Jvb2wgTGluZVdpZHRoOjpmaXRzT25MaW5lKGJvb2wgaWdub3JpbmdUcmFpbGluZ1NwYWNl
KSBjb25zdAoreworICAgIHJldHVybiBpZ25vcmluZ1RyYWlsaW5nU3BhY2UgPyBmaXRzT25MaW5l
RXhjbHVkaW5nVHJhaWxpbmdDb2xsYXBzZWRXaGl0ZXNwYWNlKCkgOiBmaXRzT25MaW5lSW5jbHVk
aW5nRXh0cmFXaWR0aCgwKTsKK30KKworYm9vbCBMaW5lV2lkdGg6OmZpdHNPbkxpbmVJbmNsdWRp
bmdFeHRyYVdpZHRoKGZsb2F0IGV4dHJhKSBjb25zdAoreworICAgIHJldHVybiBjdXJyZW50V2lk
dGgoKSArIGV4dHJhIDw9IG1fYXZhaWxhYmxlV2lkdGg7Cit9CisKK2Jvb2wgTGluZVdpZHRoOjpm
aXRzT25MaW5lRXhjbHVkaW5nVHJhaWxpbmdXaGl0ZXNwYWNlKGZsb2F0IGV4dHJhKSBjb25zdAor
eworICAgIHJldHVybiBjdXJyZW50V2lkdGgoKSAtIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgg
KyBleHRyYSA8PSBtX2F2YWlsYWJsZVdpZHRoOworfQorCit2b2lkIExpbmVXaWR0aDo6dXBkYXRl
QXZhaWxhYmxlV2lkdGgoTGF5b3V0VW5pdCByZXBsYWNlZEhlaWdodCkKK3sKKyAgICBMYXlvdXRV
bml0IGhlaWdodCA9IG1fYmxvY2stPmxvZ2ljYWxIZWlnaHQoKTsKKyAgICBMYXlvdXRVbml0IGxv
Z2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0Rm9yTGluZShtX2Jsb2NrLCBtX2lzRmlyc3RMaW5l
LCByZXBsYWNlZEhlaWdodCk7CisgICAgbV9sZWZ0ID0gbV9ibG9jay0+bG9naWNhbExlZnRPZmZz
ZXRGb3JMaW5lKGhlaWdodCwgc2hvdWxkSW5kZW50VGV4dCgpLCBsb2dpY2FsSGVpZ2h0KTsKKyAg
ICBtX3JpZ2h0ID0gbV9ibG9jay0+bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShoZWlnaHQsIHNo
b3VsZEluZGVudFRleHQoKSwgbG9naWNhbEhlaWdodCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NIQVBF
UykKKyAgICBpZiAobV9zZWdtZW50KSB7CisgICAgICAgIG1fbGVmdCA9IHN0ZDo6bWF4PGZsb2F0
PihtX3NlZ21lbnQtPmxvZ2ljYWxMZWZ0LCBtX2xlZnQpOworICAgICAgICBtX3JpZ2h0ID0gc3Rk
OjptaW48ZmxvYXQ+KG1fc2VnbWVudC0+bG9naWNhbFJpZ2h0LCBtX3JpZ2h0KTsKKyAgICB9Cisj
ZW5kaWYKKworICAgIGNvbXB1dGVBdmFpbGFibGVXaWR0aEZyb21MZWZ0QW5kUmlnaHQoKTsKK30K
Kwordm9pZCBMaW5lV2lkdGg6OnNocmlua0F2YWlsYWJsZVdpZHRoRm9yTmV3RmxvYXRJZk5lZWRl
ZChGbG9hdGluZ09iamVjdCogbmV3RmxvYXQpCit7CisgICAgTGF5b3V0VW5pdCBoZWlnaHQgPSBt
X2Jsb2NrLT5sb2dpY2FsSGVpZ2h0KCk7CisgICAgaWYgKGhlaWdodCA8IG5ld0Zsb2F0LT5sb2dp
Y2FsVG9wKG1fYmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHx8IGhlaWdodCA+PSBu
ZXdGbG9hdC0+bG9naWNhbEJvdHRvbShtX2Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisgICAgLy8gV2hl
biBmbG9hdHMgd2l0aCBzaGFwZSBvdXRzaWRlIGFyZSBzdGFja2VkLCB0aGUgZmxvYXRzIGFyZSBw
b3NpdGlvbmVkIGJhc2VkIG9uIHRoZSBtYXJnaW4gYm94IG9mIHRoZSBmbG9hdCwKKyAgICAvLyBu
b3QgdGhlIHNoYXBlJ3MgY29udG91ci4gU2luY2Ugd2UgY29tcHV0ZWQgdGhlIHdpZHRoIGJhc2Vk
IG9uIHRoZSBzaGFwZSBjb250b3VyIHdoZW4gd2UgYWRkZWQgdGhlIGZsb2F0LAorICAgIC8vIHdo
ZW4gd2UgYWRkIGEgc3Vic2VxdWVudCBmbG9hdCBvbiB0aGUgc2FtZSBsaW5lLCB3ZSBuZWVkIHRv
IHVuZG8gdGhlIHNoYXBlIGRlbHRhIGluIG9yZGVyIHRvIHBvc2l0aW9uCisgICAgLy8gYmFzZWQg
b24gdGhlIG1hcmdpbiBib3guIEluIG9yZGVyIHRvIGRvIHRoaXMsIHdlIG5lZWQgdG8gd2FsayBi
YWNrIHRocm91Z2ggdGhlIGZsb2F0aW5nIG9iamVjdCBsaXN0IHRvIGZpbmQKKyAgICAvLyB0aGUg
Zmlyc3QgcHJldmlvdXMgZmxvYXQgdGhhdCBpcyBvbiB0aGUgc2FtZSBzaWRlIGFzIG91ciBuZXdG
bG9hdC4KKyAgICBTaGFwZU91dHNpZGVJbmZvKiBwcmV2aW91c1NoYXBlT3V0c2lkZUluZm8gPSAw
OworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fYmxv
Y2stPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJh
dG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAgRmxvYXRpbmdPYmplY3RTZXRJ
dGVyYXRvciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7CisgICAgZm9yICgtLWl0
OyBpdCAhPSBiZWdpbjsgLS1pdCkgeworICAgICAgICBGbG9hdGluZ09iamVjdCogcHJldmlvdXNG
bG9hdCA9ICppdDsKKyAgICAgICAgaWYgKHByZXZpb3VzRmxvYXQgIT0gbmV3RmxvYXQgJiYgcHJl
dmlvdXNGbG9hdC0+dHlwZSgpID09IG5ld0Zsb2F0LT50eXBlKCkpIHsKKyAgICAgICAgICAgIHBy
ZXZpb3VzU2hhcGVPdXRzaWRlSW5mbyA9IHByZXZpb3VzRmxvYXQtPnJlbmRlcmVyKCktPnNoYXBl
T3V0c2lkZUluZm8oKTsKKyAgICAgICAgICAgIGlmIChwcmV2aW91c1NoYXBlT3V0c2lkZUluZm8p
CisgICAgICAgICAgICAgICAgcHJldmlvdXNTaGFwZU91dHNpZGVJbmZvLT5jb21wdXRlU2VnbWVu
dHNGb3JDb250YWluaW5nQmxvY2tMaW5lKG1fYmxvY2stPmxvZ2ljYWxIZWlnaHQoKSwgcHJldmlv
dXNGbG9hdC0+bG9naWNhbFRvcChtX2Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSwg
bG9naWNhbEhlaWdodEZvckxpbmUobV9ibG9jaywgbV9pc0ZpcnN0TGluZSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTaGFwZU91dHNpZGVJbmZvKiBzaGFw
ZU91dHNpZGVJbmZvID0gbmV3RmxvYXQtPnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8oKTsK
KyAgICBpZiAoc2hhcGVPdXRzaWRlSW5mbykKKyAgICAgICAgc2hhcGVPdXRzaWRlSW5mby0+Y29t
cHV0ZVNlZ21lbnRzRm9yQ29udGFpbmluZ0Jsb2NrTGluZShtX2Jsb2NrLT5sb2dpY2FsSGVpZ2h0
KCksIG5ld0Zsb2F0LT5sb2dpY2FsVG9wKG1fYmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpLCBsb2dpY2FsSGVpZ2h0Rm9yTGluZShtX2Jsb2NrLCBtX2lzRmlyc3RMaW5lKSk7CisjZW5k
aWYKKworICAgIGlmIChuZXdGbG9hdC0+dHlwZSgpID09IEZsb2F0aW5nT2JqZWN0OjpGbG9hdExl
ZnQpIHsKKyAgICAgICAgZmxvYXQgbmV3TGVmdCA9IG5ld0Zsb2F0LT5sb2dpY2FsUmlnaHQobV9i
bG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CisjaWYgRU5BQkxFKENTU19TSEFQRVMp
CisgICAgICAgIGlmIChwcmV2aW91c1NoYXBlT3V0c2lkZUluZm8pCisgICAgICAgICAgICBuZXdM
ZWZ0IC09IHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mby0+cmlnaHRTZWdtZW50TWFyZ2luQm94RGVs
dGEoKTsKKyAgICAgICAgaWYgKHNoYXBlT3V0c2lkZUluZm8pCisgICAgICAgICAgICBuZXdMZWZ0
ICs9IHNoYXBlT3V0c2lkZUluZm8tPnJpZ2h0U2VnbWVudE1hcmdpbkJveERlbHRhKCk7CisjZW5k
aWYKKworICAgICAgICBpZiAoc2hvdWxkSW5kZW50VGV4dCgpICYmIG1fYmxvY2stPnN0eWxlKCkt
PmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKKyAgICAgICAgICAgIG5ld0xlZnQgKz0gZmxvb3JU
b0ludChtX2Jsb2NrLT50ZXh0SW5kZW50T2Zmc2V0KCkpOworICAgICAgICBtX2xlZnQgPSBzdGQ6
Om1heDxmbG9hdD4obV9sZWZ0LCBuZXdMZWZ0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBmbG9h
dCBuZXdSaWdodCA9IG5ld0Zsb2F0LT5sb2dpY2FsTGVmdChtX2Jsb2NrLT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKTsKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKyAgICAgICAgaWYgKHByZXZp
b3VzU2hhcGVPdXRzaWRlSW5mbykKKyAgICAgICAgICAgIG5ld1JpZ2h0IC09IHByZXZpb3VzU2hh
cGVPdXRzaWRlSW5mby0+bGVmdFNlZ21lbnRNYXJnaW5Cb3hEZWx0YSgpOworICAgICAgICBpZiAo
c2hhcGVPdXRzaWRlSW5mbykKKyAgICAgICAgICAgIG5ld1JpZ2h0ICs9IHNoYXBlT3V0c2lkZUlu
Zm8tPmxlZnRTZWdtZW50TWFyZ2luQm94RGVsdGEoKTsKKyNlbmRpZgorCisgICAgICAgIGlmIChz
aG91bGRJbmRlbnRUZXh0KCkgJiYgIW1fYmxvY2stPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSkKKyAgICAgICAgICAgIG5ld1JpZ2h0IC09IGZsb29yVG9JbnQobV9ibG9jay0+dGV4
dEluZGVudE9mZnNldCgpKTsKKyAgICAgICAgbV9yaWdodCA9IHN0ZDo6bWluPGZsb2F0PihtX3Jp
Z2h0LCBuZXdSaWdodCk7CisgICAgfQorCisgICAgY29tcHV0ZUF2YWlsYWJsZVdpZHRoRnJvbUxl
ZnRBbmRSaWdodCgpOworfQorCit2b2lkIExpbmVXaWR0aDo6Y29tbWl0KCkKK3sKKyAgICBtX2Nv
bW1pdHRlZFdpZHRoICs9IG1fdW5jb21taXR0ZWRXaWR0aDsKKyAgICBtX3VuY29tbWl0dGVkV2lk
dGggPSAwOworfQorCit2b2lkIExpbmVXaWR0aDo6YXBwbHlPdmVyaGFuZyhSZW5kZXJSdWJ5UnVu
KiBydWJ5UnVuLCBSZW5kZXJPYmplY3QqIHN0YXJ0UmVuZGVyZXIsIFJlbmRlck9iamVjdCogZW5k
UmVuZGVyZXIpCit7CisgICAgaW50IHN0YXJ0T3Zlcmhhbmc7CisgICAgaW50IGVuZE92ZXJoYW5n
OworICAgIHJ1YnlSdW4tPmdldE92ZXJoYW5nKG1faXNGaXJzdExpbmUsIHN0YXJ0UmVuZGVyZXIs
IGVuZFJlbmRlcmVyLCBzdGFydE92ZXJoYW5nLCBlbmRPdmVyaGFuZyk7CisKKyAgICBzdGFydE92
ZXJoYW5nID0gc3RkOjptaW48aW50PihzdGFydE92ZXJoYW5nLCBtX2NvbW1pdHRlZFdpZHRoKTsK
KyAgICBtX2F2YWlsYWJsZVdpZHRoICs9IHN0YXJ0T3Zlcmhhbmc7CisKKyAgICBlbmRPdmVyaGFu
ZyA9IHN0ZDo6bWF4KHN0ZDo6bWluPGludD4oZW5kT3ZlcmhhbmcsIG1fYXZhaWxhYmxlV2lkdGgg
LSBjdXJyZW50V2lkdGgoKSksIDApOworICAgIG1fYXZhaWxhYmxlV2lkdGggKz0gZW5kT3Zlcmhh
bmc7CisgICAgbV9vdmVyaGFuZ1dpZHRoICs9IHN0YXJ0T3ZlcmhhbmcgKyBlbmRPdmVyaGFuZzsK
K30KKwordm9pZCBMaW5lV2lkdGg6OmZpdEJlbG93RmxvYXRzKCkKK3sKKyAgICBBU1NFUlQoIW1f
Y29tbWl0dGVkV2lkdGgpOworICAgIEFTU0VSVCghZml0c09uTGluZSgpKTsKKworICAgIExheW91
dFVuaXQgZmxvYXRMb2dpY2FsQm90dG9tOworICAgIExheW91dFVuaXQgbGFzdEZsb2F0TG9naWNh
bEJvdHRvbSA9IG1fYmxvY2stPmxvZ2ljYWxIZWlnaHQoKTsKKyAgICBmbG9hdCBuZXdMaW5lV2lk
dGggPSBtX2F2YWlsYWJsZVdpZHRoOworICAgIGZsb2F0IG5ld0xpbmVMZWZ0ID0gbV9sZWZ0Owor
ICAgIGZsb2F0IG5ld0xpbmVSaWdodCA9IG1fcmlnaHQ7CisgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgZmxvYXRMb2dpY2FsQm90dG9tID0gbV9ibG9jay0+bmV4dEZsb2F0TG9naWNhbEJvdHRv
bUJlbG93KGxhc3RGbG9hdExvZ2ljYWxCb3R0b20pOworICAgICAgICBpZiAoZmxvYXRMb2dpY2Fs
Qm90dG9tIDw9IGxhc3RGbG9hdExvZ2ljYWxCb3R0b20pCisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBuZXdMaW5lTGVmdCA9IG1fYmxvY2stPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShm
bG9hdExvZ2ljYWxCb3R0b20sIHNob3VsZEluZGVudFRleHQoKSk7CisgICAgICAgIG5ld0xpbmVS
aWdodCA9IG1fYmxvY2stPmxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoZmxvYXRMb2dpY2FsQm90
dG9tLCBzaG91bGRJbmRlbnRUZXh0KCkpOworICAgICAgICBuZXdMaW5lV2lkdGggPSBtYXgoMC4w
ZiwgbmV3TGluZVJpZ2h0IC0gbmV3TGluZUxlZnQpOworICAgICAgICBsYXN0RmxvYXRMb2dpY2Fs
Qm90dG9tID0gZmxvYXRMb2dpY2FsQm90dG9tOworICAgICAgICBpZiAobmV3TGluZVdpZHRoID49
IG1fdW5jb21taXR0ZWRXaWR0aCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlm
IChuZXdMaW5lV2lkdGggPiBtX2F2YWlsYWJsZVdpZHRoKSB7CisgICAgICAgIG1fYmxvY2stPnNl
dExvZ2ljYWxIZWlnaHQobGFzdEZsb2F0TG9naWNhbEJvdHRvbSk7CisgICAgICAgIG1fYXZhaWxh
YmxlV2lkdGggPSBuZXdMaW5lV2lkdGggKyBtX292ZXJoYW5nV2lkdGg7CisgICAgICAgIG1fbGVm
dCA9IG5ld0xpbmVMZWZ0OworICAgICAgICBtX3JpZ2h0ID0gbmV3TGluZVJpZ2h0OworICAgIH0K
K30KKwordm9pZCBMaW5lV2lkdGg6OnNldFRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKGZsb2F0IGNv
bGxhcHNlZFdoaXRlc3BhY2UsIGZsb2F0IGJvcmRlclBhZGRpbmdNYXJnaW4pCit7CisgICAgbV90
cmFpbGluZ0NvbGxhcHNlZFdoaXRlc3BhY2VXaWR0aCA9IGNvbGxhcHNlZFdoaXRlc3BhY2U7Cisg
ICAgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCA9IGNvbGxhcHNlZFdoaXRlc3BhY2UgKyBib3Jk
ZXJQYWRkaW5nTWFyZ2luOworfQorCit2b2lkIExpbmVXaWR0aDo6Y29tcHV0ZUF2YWlsYWJsZVdp
ZHRoRnJvbUxlZnRBbmRSaWdodCgpCit7CisgICAgbV9hdmFpbGFibGVXaWR0aCA9IG1heCgwLjBm
LCBtX3JpZ2h0IC0gbV9sZWZ0KSArIG1fb3ZlcmhhbmdXaWR0aDsKK30KKworYm9vbCBMaW5lV2lk
dGg6OmZpdHNPbkxpbmVFeGNsdWRpbmdUcmFpbGluZ0NvbGxhcHNlZFdoaXRlc3BhY2UoKSBjb25z
dAoreworICAgIHJldHVybiBjdXJyZW50V2lkdGgoKSAtIG1fdHJhaWxpbmdDb2xsYXBzZWRXaGl0
ZXNwYWNlV2lkdGggPD0gbV9hdmFpbGFibGVXaWR0aDsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xpbmVXaWR0aC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xpbmVXaWR0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmOWNh
NjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGluZVdpZHRo
LmgKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBZG9iZSBTeXN0
ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAq
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisg
KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBMaW5lV2lkdGhfaAorI2RlZmluZSBM
aW5lV2lkdGhfaAorCisjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKKyNpbmNsdWRlICJSZW5kZXJS
dWJ5UnVuLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBJbmRlbnRUZXh0T3JOb3Qg
eyBEb05vdEluZGVudFRleHQsIEluZGVudFRleHQgfTsKKworaW5saW5lIExheW91dFVuaXQgbG9n
aWNhbEhlaWdodEZvckxpbmUoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrLCBib29sIGlzRmlyc3RM
aW5lLCBMYXlvdXRVbml0IHJlcGxhY2VkSGVpZ2h0ID0gMCkKK3sKKyAgICBpZiAoIWJsb2NrLT5k
b2N1bWVudCgpLmluTm9RdWlya3NNb2RlKCkgJiYgcmVwbGFjZWRIZWlnaHQpCisgICAgICAgIHJl
dHVybiByZXBsYWNlZEhlaWdodDsKKworICAgIGlmICghKGJsb2NrLT5zdHlsZShpc0ZpcnN0TGlu
ZSktPmxpbmVCb3hDb250YWluKCkgJiBMaW5lQm94Q29udGFpbkJsb2NrKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICByZXR1cm4gbWF4PExheW91dFVuaXQ+KHJlcGxhY2VkSGVpZ2h0LCBibG9j
ay0+bGluZUhlaWdodChpc0ZpcnN0TGluZSwgYmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBIb3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGlu
ZUJveGVzKSk7Cit9CisKK2NsYXNzIExpbmVXaWR0aCB7CitwdWJsaWM6CisgICAgTGluZVdpZHRo
KFJlbmRlckJsb2NrKiwgYm9vbCBpc0ZpcnN0TGluZSwgSW5kZW50VGV4dE9yTm90IHNob3VsZElu
ZGVudFRleHQpOworCisgICAgYm9vbCBmaXRzT25MaW5lKGJvb2wgaWdub3JpbmdUcmFpbGluZ1Nw
YWNlID0gZmFsc2UpIGNvbnN0OworICAgIGJvb2wgZml0c09uTGluZUluY2x1ZGluZ0V4dHJhV2lk
dGgoZmxvYXQgZXh0cmEpIGNvbnN0OworICAgIGJvb2wgZml0c09uTGluZUV4Y2x1ZGluZ1RyYWls
aW5nV2hpdGVzcGFjZShmbG9hdCBleHRyYSkgY29uc3Q7CisKKyAgICBmbG9hdCBjdXJyZW50V2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX2NvbW1pdHRlZFdpZHRoICsgbV91bmNvbW1pdHRlZFdpZHRo
OyB9CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBldmVudHVhbGx5IHJlcGxhY2UgdGhlc2UgdGhy
ZWUgZnVuY3Rpb25zIGJ5IG9uZXMgdGhhdCB3b3JrIG9uIGEgaGlnaGVyIGFic3RyYWN0aW9uLgor
ICAgIGZsb2F0IHVuY29tbWl0dGVkV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3VuY29tbWl0dGVk
V2lkdGg7IH0KKyAgICBmbG9hdCBjb21taXR0ZWRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY29t
bWl0dGVkV2lkdGg7IH0KKyAgICBmbG9hdCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fYXZhaWxhYmxlV2lkdGg7IH0KKworICAgIHZvaWQgdXBkYXRlQXZhaWxhYmxlV2lkdGgoTGF5
b3V0VW5pdCBtaW5pbXVtSGVpZ2h0ID0gMCk7CisgICAgdm9pZCBzaHJpbmtBdmFpbGFibGVXaWR0
aEZvck5ld0Zsb2F0SWZOZWVkZWQoRmxvYXRpbmdPYmplY3QqKTsKKyAgICB2b2lkIGFkZFVuY29t
bWl0dGVkV2lkdGgoZmxvYXQgZGVsdGEpIHsgbV91bmNvbW1pdHRlZFdpZHRoICs9IGRlbHRhOyB9
CisgICAgdm9pZCBjb21taXQoKTsKKyAgICB2b2lkIGFwcGx5T3ZlcmhhbmcoUmVuZGVyUnVieVJ1
biosIFJlbmRlck9iamVjdCogc3RhcnRSZW5kZXJlciwgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJl
cik7CisgICAgdm9pZCBmaXRCZWxvd0Zsb2F0cygpOworICAgIHZvaWQgc2V0VHJhaWxpbmdXaGl0
ZXNwYWNlV2lkdGgoZmxvYXQgY29sbGFwc2VkV2hpdGVzcGFjZSwgZmxvYXQgYm9yZGVyUGFkZGlu
Z01hcmdpbiA9IDApOworCisgICAgYm9vbCBzaG91bGRJbmRlbnRUZXh0KCkgY29uc3QgeyByZXR1
cm4gbV9zaG91bGRJbmRlbnRUZXh0ID09IEluZGVudFRleHQ7IH0KKworcHJpdmF0ZToKKyAgICB2
b2lkIGNvbXB1dGVBdmFpbGFibGVXaWR0aEZyb21MZWZ0QW5kUmlnaHQoKTsKKyAgICBib29sIGZp
dHNPbkxpbmVFeGNsdWRpbmdUcmFpbGluZ0NvbGxhcHNlZFdoaXRlc3BhY2UoKSBjb25zdDsKKwor
ICAgIFJlbmRlckJsb2NrKiBtX2Jsb2NrOworICAgIGZsb2F0IG1fdW5jb21taXR0ZWRXaWR0aDsK
KyAgICBmbG9hdCBtX2NvbW1pdHRlZFdpZHRoOworICAgIGZsb2F0IG1fb3ZlcmhhbmdXaWR0aDsg
Ly8gVGhlIGFtb3VudCBieSB3aGljaCB8bV9hdmFpbGFibGVXaWR0aHwgaGFzIGJlZW4gaW5mbGF0
ZWQgdG8gYWNjb3VudCBmb3IgcG9zc2libGUgY29udHJhY3Rpb24gZHVlIHRvIHJ1Ynkgb3Zlcmhh
bmcuCisgICAgZmxvYXQgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aDsKKyAgICBmbG9hdCBtX3Ry
YWlsaW5nQ29sbGFwc2VkV2hpdGVzcGFjZVdpZHRoOworICAgIGZsb2F0IG1fbGVmdDsKKyAgICBm
bG9hdCBtX3JpZ2h0OworICAgIGZsb2F0IG1fYXZhaWxhYmxlV2lkdGg7CisjaWYgRU5BQkxFKENT
U19TSEFQRVMpCisgICAgY29uc3QgTGluZVNlZ21lbnQqIG1fc2VnbWVudDsKKyNlbmRpZgorICAg
IGJvb2wgbV9pc0ZpcnN0TGluZTsKKyAgICBJbmRlbnRUZXh0T3JOb3QgbV9zaG91bGRJbmRlbnRU
ZXh0OworfTsKKworfQorCisjZW5kaWYgLy8gTGluZVdpZHRoX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKaW5kZXggMGE1NWJjYy4u
ZDE0NGNkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
TGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
TGluZUxheW91dC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJIeXBoZW5hdGlvbi5o
IgogI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5o
IgorI2luY2x1ZGUgIkxpbmVXaWR0aC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJSZW5kZXJBcmVuYS5oIgogI2luY2x1ZGUgIlJlbmRlckNvbWJpbmVUZXh0LmgiCkBAIC02Niwx
NyArNjcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBXZSBkb24ndCBsZXQgb3VyIGxpbmUg
Ym94IHRyZWUgZm9yIGEgc2luZ2xlIGxpbmUgZ2V0IGFueSBkZWVwZXIgdGhhbiB0aGlzLgogY29u
c3QgdW5zaWduZWQgY01heExpbmVEZXB0aCA9IDIwMDsKIAotc3RhdGljIExheW91dFVuaXQgbG9n
aWNhbEhlaWdodEZvckxpbmUoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrLCBib29sIGlzRmlyc3RM
aW5lLCBMYXlvdXRVbml0IHJlcGxhY2VkSGVpZ2h0ID0gMCkKLXsKLSAgICBpZiAoIWJsb2NrLT5k
b2N1bWVudCgpLmluTm9RdWlya3NNb2RlKCkgJiYgcmVwbGFjZWRIZWlnaHQpCi0gICAgICAgIHJl
dHVybiByZXBsYWNlZEhlaWdodDsKLQotICAgIGlmICghKGJsb2NrLT5zdHlsZShpc0ZpcnN0TGlu
ZSktPmxpbmVCb3hDb250YWluKCkgJiBMaW5lQm94Q29udGFpbkJsb2NrKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICByZXR1cm4gbWF4PExheW91dFVuaXQ+KHJlcGxhY2VkSGVpZ2h0LCBibG9j
ay0+bGluZUhlaWdodChpc0ZpcnN0TGluZSwgYmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBIb3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGlu
ZUJveGVzKSk7Ci19Ci0KICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKIFNoYXBlSW5zaWRlSW5mbyog
UmVuZGVyQmxvY2s6OmxheW91dFNoYXBlSW5zaWRlSW5mbygpIGNvbnN0CiB7CkBAIC05NCwyMDgg
Kzg0LDYgQEAgU2hhcGVJbnNpZGVJbmZvKiBSZW5kZXJCbG9jazo6bGF5b3V0U2hhcGVJbnNpZGVJ
bmZvKCkgY29uc3QKIH0KICNlbmRpZgogCi1lbnVtIEluZGVudFRleHRPck5vdCB7IERvTm90SW5k
ZW50VGV4dCwgSW5kZW50VGV4dCB9OwotCi1jbGFzcyBMaW5lV2lkdGggewotcHVibGljOgotICAg
IExpbmVXaWR0aChSZW5kZXJCbG9jayogYmxvY2ssIGJvb2wgaXNGaXJzdExpbmUsIEluZGVudFRl
eHRPck5vdCBzaG91bGRJbmRlbnRUZXh0KQotICAgICAgICA6IG1fYmxvY2soYmxvY2spCi0gICAg
ICAgICwgbV91bmNvbW1pdHRlZFdpZHRoKDApCi0gICAgICAgICwgbV9jb21taXR0ZWRXaWR0aCgw
KQotICAgICAgICAsIG1fb3ZlcmhhbmdXaWR0aCgwKQotICAgICAgICAsIG1fdHJhaWxpbmdXaGl0
ZXNwYWNlV2lkdGgoMCkKLSAgICAgICAgLCBtX3RyYWlsaW5nQ29sbGFwc2VkV2hpdGVzcGFjZVdp
ZHRoKDApCi0gICAgICAgICwgbV9sZWZ0KDApCi0gICAgICAgICwgbV9yaWdodCgwKQotICAgICAg
ICAsIG1fYXZhaWxhYmxlV2lkdGgoMCkKLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAg
LCBtX3NlZ21lbnQoMCkKLSNlbmRpZgotICAgICAgICAsIG1faXNGaXJzdExpbmUoaXNGaXJzdExp
bmUpCi0gICAgICAgICwgbV9zaG91bGRJbmRlbnRUZXh0KHNob3VsZEluZGVudFRleHQpCi0gICAg
ewotICAgICAgICBBU1NFUlQoYmxvY2spOwotI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgICAg
ICBpZiAoU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8gPSBtX2Jsb2NrLT5sYXlvdXRT
aGFwZUluc2lkZUluZm8oKSkKLSAgICAgICAgICAgIG1fc2VnbWVudCA9IHNoYXBlSW5zaWRlSW5m
by0+Y3VycmVudFNlZ21lbnQoKTsKLSNlbmRpZgotICAgICAgICB1cGRhdGVBdmFpbGFibGVXaWR0
aCgpOwotICAgIH0KLSAgICBib29sIGZpdHNPbkxpbmUoYm9vbCBpZ25vcmluZ1RyYWlsaW5nU3Bh
Y2UgPSBmYWxzZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpZ25vcmluZ1RyYWlsaW5nU3BhY2Ug
PyBmaXRzT25MaW5lRXhjbHVkaW5nVHJhaWxpbmdDb2xsYXBzZWRXaGl0ZXNwYWNlKCkgOiBmaXRz
T25MaW5lSW5jbHVkaW5nRXh0cmFXaWR0aCgwKTsKLSAgICB9Ci0gICAgYm9vbCBmaXRzT25MaW5l
SW5jbHVkaW5nRXh0cmFXaWR0aChmbG9hdCBleHRyYSkgY29uc3QgeyByZXR1cm4gY3VycmVudFdp
ZHRoKCkgKyBleHRyYSA8PSBtX2F2YWlsYWJsZVdpZHRoOyB9Ci0gICAgYm9vbCBmaXRzT25MaW5l
RXhjbHVkaW5nVHJhaWxpbmdXaGl0ZXNwYWNlKGZsb2F0IGV4dHJhKSBjb25zdCB7IHJldHVybiBj
dXJyZW50V2lkdGgoKSAtIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggKyBleHRyYSA8PSBtX2F2
YWlsYWJsZVdpZHRoOyB9Ci0KLSAgICBmbG9hdCBjdXJyZW50V2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX2NvbW1pdHRlZFdpZHRoICsgbV91bmNvbW1pdHRlZFdpZHRoOyB9Ci0gICAgLy8gRklYTUU6
IFdlIHNob3VsZCBldmVudHVhbGx5IHJlcGxhY2UgdGhlc2UgdGhyZWUgZnVuY3Rpb25zIGJ5IG9u
ZXMgdGhhdCB3b3JrIG9uIGEgaGlnaGVyIGFic3RyYWN0aW9uLgotICAgIGZsb2F0IHVuY29tbWl0
dGVkV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3VuY29tbWl0dGVkV2lkdGg7IH0KLSAgICBmbG9h
dCBjb21taXR0ZWRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY29tbWl0dGVkV2lkdGg7IH0KLSAg
ICBmbG9hdCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYXZhaWxhYmxlV2lkdGg7
IH0KLQotICAgIHZvaWQgdXBkYXRlQXZhaWxhYmxlV2lkdGgoTGF5b3V0VW5pdCBtaW5pbXVtSGVp
Z2h0ID0gMCk7Ci0gICAgdm9pZCBzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVk
ZWQoRmxvYXRpbmdPYmplY3QqKTsKLSAgICB2b2lkIGFkZFVuY29tbWl0dGVkV2lkdGgoZmxvYXQg
ZGVsdGEpIHsgbV91bmNvbW1pdHRlZFdpZHRoICs9IGRlbHRhOyB9Ci0gICAgdm9pZCBjb21taXQo
KQotICAgIHsKLSAgICAgICAgbV9jb21taXR0ZWRXaWR0aCArPSBtX3VuY29tbWl0dGVkV2lkdGg7
Ci0gICAgICAgIG1fdW5jb21taXR0ZWRXaWR0aCA9IDA7Ci0gICAgfQotICAgIHZvaWQgYXBwbHlP
dmVyaGFuZyhSZW5kZXJSdWJ5UnVuKiwgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyLCBSZW5k
ZXJPYmplY3QqIGVuZFJlbmRlcmVyKTsKLSAgICB2b2lkIGZpdEJlbG93RmxvYXRzKCk7Ci0gICAg
dm9pZCBzZXRUcmFpbGluZ1doaXRlc3BhY2VXaWR0aChmbG9hdCBjb2xsYXBzZWRXaGl0ZXNwYWNl
LCBmbG9hdCBib3JkZXJQYWRkaW5nTWFyZ2luID0gMCkgeyBtX3RyYWlsaW5nQ29sbGFwc2VkV2hp
dGVzcGFjZVdpZHRoID0gY29sbGFwc2VkV2hpdGVzcGFjZTsgbV90cmFpbGluZ1doaXRlc3BhY2VX
aWR0aCA9ICBjb2xsYXBzZWRXaGl0ZXNwYWNlICsgYm9yZGVyUGFkZGluZ01hcmdpbjsgfQotCi0g
ICAgYm9vbCBzaG91bGRJbmRlbnRUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRJbmRlbnRU
ZXh0ID09IEluZGVudFRleHQ7IH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIGNvbXB1dGVBdmFpbGFi
bGVXaWR0aEZyb21MZWZ0QW5kUmlnaHQoKQotICAgIHsKLSAgICAgICAgbV9hdmFpbGFibGVXaWR0
aCA9IG1heCgwLjBmLCBtX3JpZ2h0IC0gbV9sZWZ0KSArIG1fb3ZlcmhhbmdXaWR0aDsKLSAgICB9
Ci0gICAgYm9vbCBmaXRzT25MaW5lRXhjbHVkaW5nVHJhaWxpbmdDb2xsYXBzZWRXaGl0ZXNwYWNl
KCkgY29uc3QgeyByZXR1cm4gY3VycmVudFdpZHRoKCkgLSBtX3RyYWlsaW5nQ29sbGFwc2VkV2hp
dGVzcGFjZVdpZHRoIDw9IG1fYXZhaWxhYmxlV2lkdGg7IH0KLQotcHJpdmF0ZToKLSAgICBSZW5k
ZXJCbG9jayogbV9ibG9jazsKLSAgICBmbG9hdCBtX3VuY29tbWl0dGVkV2lkdGg7Ci0gICAgZmxv
YXQgbV9jb21taXR0ZWRXaWR0aDsKLSAgICBmbG9hdCBtX292ZXJoYW5nV2lkdGg7IC8vIFRoZSBh
bW91bnQgYnkgd2hpY2ggfG1fYXZhaWxhYmxlV2lkdGh8IGhhcyBiZWVuIGluZmxhdGVkIHRvIGFj
Y291bnQgZm9yIHBvc3NpYmxlIGNvbnRyYWN0aW9uIGR1ZSB0byBydWJ5IG92ZXJoYW5nLgotICAg
IGZsb2F0IG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGg7Ci0gICAgZmxvYXQgbV90cmFpbGluZ0Nv
bGxhcHNlZFdoaXRlc3BhY2VXaWR0aDsKLSAgICBmbG9hdCBtX2xlZnQ7Ci0gICAgZmxvYXQgbV9y
aWdodDsKLSAgICBmbG9hdCBtX2F2YWlsYWJsZVdpZHRoOwotI2lmIEVOQUJMRShDU1NfU0hBUEVT
KQotICAgIGNvbnN0IExpbmVTZWdtZW50KiBtX3NlZ21lbnQ7Ci0jZW5kaWYKLSAgICBib29sIG1f
aXNGaXJzdExpbmU7Ci0gICAgSW5kZW50VGV4dE9yTm90IG1fc2hvdWxkSW5kZW50VGV4dDsKLX07
Ci0KLWlubGluZSB2b2lkIExpbmVXaWR0aDo6dXBkYXRlQXZhaWxhYmxlV2lkdGgoTGF5b3V0VW5p
dCByZXBsYWNlZEhlaWdodCkKLXsKLSAgICBMYXlvdXRVbml0IGhlaWdodCA9IG1fYmxvY2stPmxv
Z2ljYWxIZWlnaHQoKTsKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVp
Z2h0Rm9yTGluZShtX2Jsb2NrLCBtX2lzRmlyc3RMaW5lLCByZXBsYWNlZEhlaWdodCk7Ci0gICAg
bV9sZWZ0ID0gbV9ibG9jay0+bG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKGhlaWdodCwgc2hvdWxk
SW5kZW50VGV4dCgpLCBsb2dpY2FsSGVpZ2h0KTsKLSAgICBtX3JpZ2h0ID0gbV9ibG9jay0+bG9n
aWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShoZWlnaHQsIHNob3VsZEluZGVudFRleHQoKSwgbG9naWNh
bEhlaWdodCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICBpZiAobV9zZWdtZW50KSB7
Ci0gICAgICAgIG1fbGVmdCA9IG1heDxmbG9hdD4obV9zZWdtZW50LT5sb2dpY2FsTGVmdCwgbV9s
ZWZ0KTsKLSAgICAgICAgbV9yaWdodCA9IG1pbjxmbG9hdD4obV9zZWdtZW50LT5sb2dpY2FsUmln
aHQsIG1fcmlnaHQpOwotICAgIH0KLSNlbmRpZgotCi0gICAgY29tcHV0ZUF2YWlsYWJsZVdpZHRo
RnJvbUxlZnRBbmRSaWdodCgpOwotfQotCi1pbmxpbmUgdm9pZCBMaW5lV2lkdGg6OnNocmlua0F2
YWlsYWJsZVdpZHRoRm9yTmV3RmxvYXRJZk5lZWRlZChGbG9hdGluZ09iamVjdCogbmV3RmxvYXQp
Ci17Ci0gICAgTGF5b3V0VW5pdCBoZWlnaHQgPSBtX2Jsb2NrLT5sb2dpY2FsSGVpZ2h0KCk7Ci0g
ICAgaWYgKGhlaWdodCA8IG5ld0Zsb2F0LT5sb2dpY2FsVG9wKG1fYmxvY2stPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpIHx8IGhlaWdodCA+PSBuZXdGbG9hdC0+bG9naWNhbEJvdHRvbShtX2Js
b2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYg
RU5BQkxFKENTU19TSEFQRVMpCi0gICAgLy8gV2hlbiBmbG9hdHMgd2l0aCBzaGFwZSBvdXRzaWRl
IGFyZSBzdGFja2VkLCB0aGUgZmxvYXRzIGFyZSBwb3NpdGlvbmVkIGJhc2VkIG9uIHRoZSBtYXJn
aW4gYm94IG9mIHRoZSBmbG9hdCwKLSAgICAvLyBub3QgdGhlIHNoYXBlJ3MgY29udG91ci4gU2lu
Y2Ugd2UgY29tcHV0ZWQgdGhlIHdpZHRoIGJhc2VkIG9uIHRoZSBzaGFwZSBjb250b3VyIHdoZW4g
d2UgYWRkZWQgdGhlIGZsb2F0LAotICAgIC8vIHdoZW4gd2UgYWRkIGEgc3Vic2VxdWVudCBmbG9h
dCBvbiB0aGUgc2FtZSBsaW5lLCB3ZSBuZWVkIHRvIHVuZG8gdGhlIHNoYXBlIGRlbHRhIGluIG9y
ZGVyIHRvIHBvc2l0aW9uCi0gICAgLy8gYmFzZWQgb24gdGhlIG1hcmdpbiBib3guIEluIG9yZGVy
IHRvIGRvIHRoaXMsIHdlIG5lZWQgdG8gd2FsayBiYWNrIHRocm91Z2ggdGhlIGZsb2F0aW5nIG9i
amVjdCBsaXN0IHRvIGZpbmQKLSAgICAvLyB0aGUgZmlyc3QgcHJldmlvdXMgZmxvYXQgdGhhdCBp
cyBvbiB0aGUgc2FtZSBzaWRlIGFzIG91ciBuZXdGbG9hdC4KLSAgICBTaGFwZU91dHNpZGVJbmZv
KiBwcmV2aW91c1NoYXBlT3V0c2lkZUluZm8gPSAwOwotICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0
U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fYmxvY2stPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQo
KTsKLSAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQu
ZW5kKCk7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdpbiA9IGZsb2F0aW5nT2Jq
ZWN0U2V0LmJlZ2luKCk7Ci0gICAgZm9yICgtLWl0OyBpdCAhPSBiZWdpbjsgLS1pdCkgewotICAg
ICAgICBGbG9hdGluZ09iamVjdCogcHJldmlvdXNGbG9hdCA9ICppdDsKLSAgICAgICAgaWYgKHBy
ZXZpb3VzRmxvYXQgIT0gbmV3RmxvYXQgJiYgcHJldmlvdXNGbG9hdC0+dHlwZSgpID09IG5ld0Zs
b2F0LT50eXBlKCkpIHsKLSAgICAgICAgICAgIHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mbyA9IHBy
ZXZpb3VzRmxvYXQtPnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8oKTsKLSAgICAgICAgICAg
IGlmIChwcmV2aW91c1NoYXBlT3V0c2lkZUluZm8pIHsKLSAgICAgICAgICAgICAgICBwcmV2aW91
c1NoYXBlT3V0c2lkZUluZm8tPmNvbXB1dGVTZWdtZW50c0ZvckNvbnRhaW5pbmdCbG9ja0xpbmUo
bV9ibG9jay0+bG9naWNhbEhlaWdodCgpLCBwcmV2aW91c0Zsb2F0LT5sb2dpY2FsVG9wKG1fYmxv
Y2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpLCBsb2dpY2FsSGVpZ2h0Rm9yTGluZShtX2Js
b2NrLCBtX2lzRmlyc3RMaW5lKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZUlu
Zm8gPSBuZXdGbG9hdC0+cmVuZGVyZXIoKS0+c2hhcGVPdXRzaWRlSW5mbygpOwotICAgIGlmIChz
aGFwZU91dHNpZGVJbmZvKSB7Ci0gICAgICAgIHNoYXBlT3V0c2lkZUluZm8tPmNvbXB1dGVTZWdt
ZW50c0ZvckNvbnRhaW5pbmdCbG9ja0xpbmUobV9ibG9jay0+bG9naWNhbEhlaWdodCgpLCBuZXdG
bG9hdC0+bG9naWNhbFRvcChtX2Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSwgbG9n
aWNhbEhlaWdodEZvckxpbmUobV9ibG9jaywgbV9pc0ZpcnN0TGluZSkpOwotICAgIH0KLSNlbmRp
ZgotCi0gICAgaWYgKG5ld0Zsb2F0LT50eXBlKCkgPT0gRmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVm
dCkgewotICAgICAgICBmbG9hdCBuZXdMZWZ0ID0gbmV3RmxvYXQtPmxvZ2ljYWxSaWdodChtX2Js
b2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykK
LSAgICAgICAgaWYgKHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mbykKLSAgICAgICAgICAgIG5ld0xl
ZnQgLT0gcHJldmlvdXNTaGFwZU91dHNpZGVJbmZvLT5yaWdodFNlZ21lbnRNYXJnaW5Cb3hEZWx0
YSgpOwotICAgICAgICBpZiAoc2hhcGVPdXRzaWRlSW5mbykKLSAgICAgICAgICAgIG5ld0xlZnQg
Kz0gc2hhcGVPdXRzaWRlSW5mby0+cmlnaHRTZWdtZW50TWFyZ2luQm94RGVsdGEoKTsKLSNlbmRp
ZgotCi0gICAgICAgIGlmIChzaG91bGRJbmRlbnRUZXh0KCkgJiYgbV9ibG9jay0+c3R5bGUoKS0+
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICAgICAgbmV3TGVmdCArPSBmbG9vclRv
SW50KG1fYmxvY2stPnRleHRJbmRlbnRPZmZzZXQoKSk7Ci0gICAgICAgIG1fbGVmdCA9IG1heDxm
bG9hdD4obV9sZWZ0LCBuZXdMZWZ0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBmbG9hdCBuZXdS
aWdodCA9IG5ld0Zsb2F0LT5sb2dpY2FsTGVmdChtX2Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpKTsKLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAgaWYgKHByZXZpb3VzU2hh
cGVPdXRzaWRlSW5mbykKLSAgICAgICAgICAgIG5ld1JpZ2h0IC09IHByZXZpb3VzU2hhcGVPdXRz
aWRlSW5mby0+bGVmdFNlZ21lbnRNYXJnaW5Cb3hEZWx0YSgpOwotICAgICAgICBpZiAoc2hhcGVP
dXRzaWRlSW5mbykKLSAgICAgICAgICAgIG5ld1JpZ2h0ICs9IHNoYXBlT3V0c2lkZUluZm8tPmxl
ZnRTZWdtZW50TWFyZ2luQm94RGVsdGEoKTsKLSNlbmRpZgotCi0gICAgICAgIGlmIChzaG91bGRJ
bmRlbnRUZXh0KCkgJiYgIW1fYmxvY2stPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSkKLSAgICAgICAgICAgIG5ld1JpZ2h0IC09IGZsb29yVG9JbnQobV9ibG9jay0+dGV4dEluZGVu
dE9mZnNldCgpKTsKLSAgICAgICAgbV9yaWdodCA9IG1pbjxmbG9hdD4obV9yaWdodCwgbmV3Umln
aHQpOwotICAgIH0KLQotICAgIGNvbXB1dGVBdmFpbGFibGVXaWR0aEZyb21MZWZ0QW5kUmlnaHQo
KTsKLX0KLQotdm9pZCBMaW5lV2lkdGg6OmFwcGx5T3ZlcmhhbmcoUmVuZGVyUnVieVJ1biogcnVi
eVJ1biwgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyLCBSZW5kZXJPYmplY3QqIGVuZFJlbmRl
cmVyKQotewotICAgIGludCBzdGFydE92ZXJoYW5nOwotICAgIGludCBlbmRPdmVyaGFuZzsKLSAg
ICBydWJ5UnVuLT5nZXRPdmVyaGFuZyhtX2lzRmlyc3RMaW5lLCBzdGFydFJlbmRlcmVyLCBlbmRS
ZW5kZXJlciwgc3RhcnRPdmVyaGFuZywgZW5kT3ZlcmhhbmcpOwotCi0gICAgc3RhcnRPdmVyaGFu
ZyA9IG1pbjxpbnQ+KHN0YXJ0T3ZlcmhhbmcsIG1fY29tbWl0dGVkV2lkdGgpOwotICAgIG1fYXZh
aWxhYmxlV2lkdGggKz0gc3RhcnRPdmVyaGFuZzsKLQotICAgIGVuZE92ZXJoYW5nID0gbWF4KG1p
bjxpbnQ+KGVuZE92ZXJoYW5nLCBtX2F2YWlsYWJsZVdpZHRoIC0gY3VycmVudFdpZHRoKCkpLCAw
KTsKLSAgICBtX2F2YWlsYWJsZVdpZHRoICs9IGVuZE92ZXJoYW5nOwotICAgIG1fb3ZlcmhhbmdX
aWR0aCArPSBzdGFydE92ZXJoYW5nICsgZW5kT3Zlcmhhbmc7Ci19Ci0KLXZvaWQgTGluZVdpZHRo
OjpmaXRCZWxvd0Zsb2F0cygpCi17Ci0gICAgQVNTRVJUKCFtX2NvbW1pdHRlZFdpZHRoKTsKLSAg
ICBBU1NFUlQoIWZpdHNPbkxpbmUoKSk7Ci0KLSAgICBMYXlvdXRVbml0IGZsb2F0TG9naWNhbEJv
dHRvbTsKLSAgICBMYXlvdXRVbml0IGxhc3RGbG9hdExvZ2ljYWxCb3R0b20gPSBtX2Jsb2NrLT5s
b2dpY2FsSGVpZ2h0KCk7Ci0gICAgZmxvYXQgbmV3TGluZVdpZHRoID0gbV9hdmFpbGFibGVXaWR0
aDsKLSAgICBmbG9hdCBuZXdMaW5lTGVmdCA9IG1fbGVmdDsKLSAgICBmbG9hdCBuZXdMaW5lUmln
aHQgPSBtX3JpZ2h0OwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGZsb2F0TG9naWNhbEJv
dHRvbSA9IG1fYmxvY2stPm5leHRGbG9hdExvZ2ljYWxCb3R0b21CZWxvdyhsYXN0RmxvYXRMb2dp
Y2FsQm90dG9tKTsKLSAgICAgICAgaWYgKGZsb2F0TG9naWNhbEJvdHRvbSA8PSBsYXN0RmxvYXRM
b2dpY2FsQm90dG9tKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgbmV3TGluZUxlZnQg
PSBtX2Jsb2NrLT5sb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoZmxvYXRMb2dpY2FsQm90dG9tLCBz
aG91bGRJbmRlbnRUZXh0KCkpOwotICAgICAgICBuZXdMaW5lUmlnaHQgPSBtX2Jsb2NrLT5sb2dp
Y2FsUmlnaHRPZmZzZXRGb3JMaW5lKGZsb2F0TG9naWNhbEJvdHRvbSwgc2hvdWxkSW5kZW50VGV4
dCgpKTsKLSAgICAgICAgbmV3TGluZVdpZHRoID0gbWF4KDAuMGYsIG5ld0xpbmVSaWdodCAtIG5l
d0xpbmVMZWZ0KTsKLSAgICAgICAgbGFzdEZsb2F0TG9naWNhbEJvdHRvbSA9IGZsb2F0TG9naWNh
bEJvdHRvbTsKLSAgICAgICAgaWYgKG5ld0xpbmVXaWR0aCA+PSBtX3VuY29tbWl0dGVkV2lkdGgp
Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAobmV3TGluZVdpZHRoID4gbV9h
dmFpbGFibGVXaWR0aCkgewotICAgICAgICBtX2Jsb2NrLT5zZXRMb2dpY2FsSGVpZ2h0KGxhc3RG
bG9hdExvZ2ljYWxCb3R0b20pOwotICAgICAgICBtX2F2YWlsYWJsZVdpZHRoID0gbmV3TGluZVdp
ZHRoICsgbV9vdmVyaGFuZ1dpZHRoOwotICAgICAgICBtX2xlZnQgPSBuZXdMaW5lTGVmdDsKLSAg
ICAgICAgbV9yaWdodCA9IG5ld0xpbmVSaWdodDsKLSAgICB9Ci19Ci0KIGNsYXNzIExpbmVJbmZv
IHsKIHB1YmxpYzoKICAgICBMaW5lSW5mbygpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211329</attachid>
            <date>2013-09-11 10:51:21 -0700</date>
            <delta_ts>2013-09-11 14:28:39 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>movelinewidth3.patch</filename>
            <type>text/plain</type>
            <size>33741</size>
            <attacher name="Zoltan Horvath">zoltan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMDYzM2M4Mi4uNGVmNmFmNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTIxMTAsNiArMjExMCw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKICAgICByZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCiAg
ICAgcmVuZGVyaW5nL0xheW91dFJlcGFpbnRlci5jcHAKKyAgICByZW5kZXJpbmcvTGluZVdpZHRo
LmNwcAogICAgIHJlbmRlcmluZy9Qb2ludGVyRXZlbnRzSGl0UnVsZXMuY3BwCiAgICAgcmVuZGVy
aW5nL1JlbmRlckFwcGxldC5jcHAKICAgICByZW5kZXJpbmcvUmVuZGVyQXJlbmEuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggM2VhZDYxOC4uYmMyNzA4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisy
MDEzLTA5LTExICBab2x0YW4gSG9ydmF0aCAgPHpvbHRhbkB3ZWJraXQub3JnPgorCisgICAgICAg
IE1vdmUgTGluZVdpZHRoIG91dCBvZiBSZW5kZXJCbG9ja0xpbmVMYXlvdXQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTEwNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgTGluZVdpZHRoIGNsYXNz
IGFuZCByZWxhdGVkIGNvZGUgaW50byBMaW5lV2lkdGgue2gsY3BwfS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToK
KyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvTGlu
ZVdpZHRoLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OmFwcGx5T3Zl
cmhhbmcpOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRoOjpmaXRCZWxvd0Zsb2F0cyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL0xpbmVXaWR0aC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmxvZ2ljYWxIZWlnaHRGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVXaWR0aDo6TGlu
ZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVXaWR0aDo6Zml0c09uTGluZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OmZpdHNPbkxpbmVJbmNsdWRpbmdFeHRyYVdpZHRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkxpbmVXaWR0aDo6Zml0c09uTGluZUV4Y2x1ZGluZ1RyYWlsaW5n
V2hpdGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OmN1cnJlbnRXaWR0aCk6
CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OnVuY29tbWl0dGVkV2lkdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6TGluZVdpZHRoOjpjb21taXR0ZWRXaWR0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpMaW5lV2lkdGg6OmF2YWlsYWJsZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVXaWR0
aDo6YWRkVW5jb21taXR0ZWRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OmNv
bW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OnNldFRyYWlsaW5nV2hpdGVzcGFj
ZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVXaWR0aDo6c2hvdWxkSW5kZW50VGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OmNvbXB1dGVBdmFpbGFibGVXaWR0aEZyb21M
ZWZ0QW5kUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRoOjpmaXRzT25MaW5lRXhj
bHVkaW5nVHJhaWxpbmdDb2xsYXBzZWRXaGl0ZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Okxp
bmVXaWR0aDo6dXBkYXRlQXZhaWxhYmxlV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdp
ZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorCiAyMDEzLTA5LTExICBNYXJp
byBTYW5jaGV6IFByYWRhICA8bWFyaW8ucHJhZGFAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0dU
S10gUmVtb3ZlIEdhaWwgZGVwZW5kZW5jeSBmcm9tIGJ1aWxkIHN5c3RlbSBmb3IgR1RLMwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggMDUzNDQ2ZS4uZTA2ZWZjMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC00MzY2LDYgKzQzNjYsOCBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Mb2dpY2FsU2VsZWN0aW9uT2Zmc2V0
Q2FjaGVzLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRSZXBhaW50ZXIuaCBc
CiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFJlcGFpbnRlci5jcHAgXAorCVNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9MaW5lV2lkdGguaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xpbmVXaWR0aC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9PdmVybGFwVGVz
dFJlcXVlc3RDbGllbnQuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1BhZ2luYXRpb24u
aCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1BhaW50SW5mby5oIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmlu
ZGV4IDYzOWQ4NWQuLjU2ZGYyNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5w
cmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMTE1MSw2ICsxMTUxLDcgQEAg
U09VUkNFUyArPSBcCiAgICAgcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwIFwKICAgICByZW5k
ZXJpbmcvTGF5b3V0U3RhdGUuY3BwIFwKICAgICByZW5kZXJpbmcvTGF5b3V0UmVwYWludGVyLmNw
cCBcCisgICAgcmVuZGVyaW5nL0xpbmVXaWR0aC5jcHAgXAogICAgIHJlbmRlcmluZy9SZW5kZXJB
cHBsZXQuY3BwIFwKICAgICByZW5kZXJpbmcvUmVuZGVyQXJlbmEuY3BwIFwKICAgICByZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwIFwKQEAgLTI0MDUsNiArMjQwNiw3IEBAIEhFQURFUlMgKz0gXAog
ICAgIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmggXAogICAgIHJlbmRlcmluZy9MYXlvdXRSZXBh
aW50ZXIuaCBcCiAgICAgcmVuZGVyaW5nL0xheW91dFN0YXRlLmggXAorICAgIHJlbmRlcmluZy9M
aW5lV2lkdGguaCBcCiAgICAgcmVuZGVyaW5nL0xvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMu
aCBcCiAgICAgcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oIFwKICAgICByZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCmluZGV4IDM0ZGFiNjUuLmIwMWRiOTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAt
OTY0Miw2ICs5NjQyLDcgQEAKICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9F
eGNsdWRlZEZyb21CdWlsZD4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+dHJ1ZTwvRXhj
bHVkZWRGcm9tQnVpbGQ+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxyZW5kZXJpbmdcTGluZVdpZHRoLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJlbmRlcmluZ1xQb2ludGVyRXZlbnRzSGl0UnVsZXMuY3BwIj4KICAgICAgIDxFeGNsdWRl
ZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0Rl
YnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9t
QnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4
NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KQEAgLTIwMDE1LDYgKzIwMDE2LDcgQEAKICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xJbmxpbmVUZXh0Qm94LmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcTGF5b3V0UmVwYWludGVyLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcTGF5b3V0U3RhdGUuaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xMaW5lV2lkdGguaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xQYWludEluZm8uaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xQYWludFBoYXNlLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiIC8+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggMjNjNDZmYS4uMDY2NWU5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzQyMiw2ICszNDIyLDggQEAKIAkJQTA3RDMz
NTYxNTJCNjMwRTAwMUI2MzkzIC8qIEpTV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwN0QzMzU0MTUyQjYz
MEUwMDFCNjM5MyAvKiBKU1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmggKi87IH07CiAJCUEw
N0QzMzU4MTUyQjYzMkQwMDFCNjM5MyAvKiBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTA3RDMzNTcxNTJC
NjMyRDAwMUI2MzkzIC8qIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmggKi87IH07CiAJCUEw
OENGMTU0MTUyQjc3QjMwMDlDNTc3NSAvKiBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMDhDRjE1MzE1
MkI3N0IzMDA5QzU3NzUgLyogV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuY3BwICovOyB9Owor
CQlBMENCMDAyNDE3REY4MjY2MDAxNzg5NkIgLyogTGluZVdpZHRoLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQ0IwMDIzMTdERjgxQUMwMDE3ODk2
QiAvKiBMaW5lV2lkdGguY3BwICovOyB9OworCQlBMENCMDAyNTE3REY4MjZDMDAxNzg5NkIgLyog
TGluZVdpZHRoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMENCMDAyMTE3REU5Q0QwMDAxNzg5NkIgLyogTGluZVdpZHRoLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJQTBFRTBERjUxNDRGODI1NTAwRjgwQjBEIC8qIFdl
YkdMRGVidWdSZW5kZXJlckluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTBFRTBERjExNDRGODI1NTAwRjgwQjBEIC8qIFdlYkdMRGVidWdSZW5k
ZXJlckluZm8uY3BwICovOyB9OwogCQlBMEVFMERGNjE0NEY4MjU1MDBGODBCMEQgLyogV2ViR0xE
ZWJ1Z1JlbmRlcmVySW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTBFRTBERjIxNDRGODI1NTAwRjgwQjBEIC8qIFdlYkdMRGVidWdSZW5kZXJlcklu
Zm8uaCAqLzsgfTsKIAkJQTBFRTBERjcxNDRGODI1NTAwRjgwQjBEIC8qIFdlYkdMRGVidWdTaGFk
ZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEw
RUUwREYzMTQ0RjgyNTUwMEY4MEIwRCAvKiBXZWJHTERlYnVnU2hhZGVycy5jcHAgKi87IH07CkBA
IC0xMDAxOSw2ICsxMDAyMSw4IEBACiAJCUEwN0QzMzU3MTUyQjYzMkQwMDFCNjM5MyAvKiBXZWJH
TFNoYWRlclByZWNpc2lvbkZvcm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5oOyBwYXRoID0gY2FudmFzL1dlYkdMU2hhZGVy
UHJlY2lzaW9uRm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEwN0QzMzU5
MTUyQjYzM0UwMDFCNjM5MyAvKiBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaWRsOyBwYXRoID0g
Y2FudmFzL1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTA4Q0YxNTMxNTJCNzdCMzAwOUM1Nzc1IC8qIFdlYkdMU2hhZGVyUHJlY2lz
aW9uRm9ybWF0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdM
U2hhZGVyUHJlY2lzaW9uRm9ybWF0LmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTFNoYWRlclByZWNp
c2lvbkZvcm1hdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEwQ0IwMDIxMTdE
RTlDRDAwMDE3ODk2QiAvKiBMaW5lV2lkdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTGluZVdpZHRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEwQ0IwMDIz
MTdERjgxQUMwMDE3ODk2QiAvKiBMaW5lV2lkdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTGluZVdpZHRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTBFRTBERUYxNDRGODIzMjAwRjgwQjBEIC8qIFdlYkdMRGVidWdTaGFkZXJzLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJHTERlYnVnU2hhZGVycy5pZGw7IHBhdGggPSBjYW52YXMv
V2ViR0xEZWJ1Z1NoYWRlcnMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMEVF
MERGMDE0NEY4MjQzMDBGODBCMEQgLyogV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5pZGw7IHBhdGggPSBjYW52
YXMvV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUEwRUUwREYxMTQ0RjgyNTUwMEY4MEIwRCAvKiBXZWJHTERlYnVnUmVuZGVyZXJJbmZvLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdMRGVidWdSZW5kZXJl
ckluZm8uY3BwOyBwYXRoID0gY2FudmFzL1dlYkdMRGVidWdSZW5kZXJlckluZm8uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjAzOTcsNiArMjA0MDEsOCBAQAogCQkJCUExMjBB
Q0EwMTNGOTk4MzcwMEZFNEFDNyAvKiBMYXlvdXRSZXBhaW50ZXIuaCAqLywKIAkJCQkyRDkwNjYw
NDBCRTE0MUQ0MDA5NTY5OTggLyogTGF5b3V0U3RhdGUuY3BwICovLAogCQkJCTJEOTA2NjA1MEJF
MTQxRDQwMDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5oICovLAorCQkJCUEwQ0IwMDIzMTdERjgxQUMw
MDE3ODk2QiAvKiBMaW5lV2lkdGguY3BwICovLAorCQkJCUEwQ0IwMDIxMTdERTlDRDAwMDE3ODk2
QiAvKiBMaW5lV2lkdGguaCAqLywKIAkJCQk5QkEyNzNGMzE3MjIwNkJCMDA5N0NFNDcgLyogTG9n
aWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcy5oICovLAogCQkJCTM3NzRBQkEzMEZBMjFFQjQwMEFE
N0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLywKIAkJCQk5Mzc3QUI5RjE1REVG
RUVGMDAzMUZEMDQgLyogUGFnaW5hdGlvbi5oICovLApAQCAtMjQ1NjcsNiArMjQ1NzMsNyBAQAog
CQkJCUJFMTZDNTkzMTdDRkUxNzIwMDg1MkMwNCAvKiBJbmJhbmRHZW5lcmljVGV4dFRyYWNrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCRTE2QzU5NTE3Q0ZFMTcyMDA4NTJDMDQgLyogSW5iYW5kV2Vi
VlRUVGV4dFRyYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzEwRDc2ODE3RDhFRTcxMDA1RTI2
MjYgLyogUmVuZGVyQmxvY2tGbG93LmggaW4gSGVhZGVycyAqLywKKwkJCQlBMENCMDAyNTE3REY4
MjZDMDAxNzg5NkIgLyogTGluZVdpZHRoLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI3NTk0LDYgKzI3
NjAxLDcgQEAKIAkJCQlCRTE2QzU5MjE3Q0ZFMTcyMDA4NTJDMDQgLyogSW5iYW5kR2VuZXJpY1Rl
eHRUcmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCRTE2QzU5NDE3Q0ZFMTcyMDA4NTJDMDQg
LyogSW5iYW5kV2ViVlRUVGV4dFRyYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMTBENzY3
MTdEOEVFNkUwMDVFMjYyNiAvKiBSZW5kZXJCbG9ja0Zsb3cuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTBDQjAwMjQxN0RGODI2NjAwMTc4OTZCIC8qIExpbmVXaWR0aC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MaW5lV2lkdGguY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xpbmVXaWR0aC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNTFhYzlhNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9MaW5lV2lkdGguY3BwCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRp
c2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICog
ICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGluZVdpZHRoLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworTGluZVdpZHRoOjpMaW5lV2lkdGgoUmVuZGVyQmxvY2smIGJsb2NrLCBib29sIGlz
Rmlyc3RMaW5lLCBJbmRlbnRUZXh0T3JOb3Qgc2hvdWxkSW5kZW50VGV4dCkKKyAgICA6IG1fYmxv
Y2soYmxvY2spCisgICAgLCBtX3VuY29tbWl0dGVkV2lkdGgoMCkKKyAgICAsIG1fY29tbWl0dGVk
V2lkdGgoMCkKKyAgICAsIG1fb3ZlcmhhbmdXaWR0aCgwKQorICAgICwgbV90cmFpbGluZ1doaXRl
c3BhY2VXaWR0aCgwKQorICAgICwgbV90cmFpbGluZ0NvbGxhcHNlZFdoaXRlc3BhY2VXaWR0aCgw
KQorICAgICwgbV9sZWZ0KDApCisgICAgLCBtX3JpZ2h0KDApCisgICAgLCBtX2F2YWlsYWJsZVdp
ZHRoKDApCisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisgICAgLCBtX3NlZ21lbnQoMCkKKyNlbmRp
ZgorICAgICwgbV9pc0ZpcnN0TGluZShpc0ZpcnN0TGluZSkKKyAgICAsIG1fc2hvdWxkSW5kZW50
VGV4dChzaG91bGRJbmRlbnRUZXh0KQoreworICAgIEFTU0VSVChibG9jayk7CisjaWYgRU5BQkxF
KENTU19TSEFQRVMpCisgICAgaWYgKFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0g
bV9ibG9jay5sYXlvdXRTaGFwZUluc2lkZUluZm8oKSkKKyAgICAgICAgbV9zZWdtZW50ID0gc2hh
cGVJbnNpZGVJbmZvLT5jdXJyZW50U2VnbWVudCgpOworI2VuZGlmCisgICAgdXBkYXRlQXZhaWxh
YmxlV2lkdGgoKTsKK30KKworYm9vbCBMaW5lV2lkdGg6OmZpdHNPbkxpbmUoYm9vbCBpZ25vcmlu
Z1RyYWlsaW5nU3BhY2UpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlnbm9yaW5nVHJhaWxpbmdTcGFj
ZSA/IGZpdHNPbkxpbmVFeGNsdWRpbmdUcmFpbGluZ0NvbGxhcHNlZFdoaXRlc3BhY2UoKSA6IGZp
dHNPbkxpbmVJbmNsdWRpbmdFeHRyYVdpZHRoKDApOworfQorCitib29sIExpbmVXaWR0aDo6Zml0
c09uTGluZUluY2x1ZGluZ0V4dHJhV2lkdGgoZmxvYXQgZXh0cmEpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGN1cnJlbnRXaWR0aCgpICsgZXh0cmEgPD0gbV9hdmFpbGFibGVXaWR0aDsKK30KKworYm9v
bCBMaW5lV2lkdGg6OmZpdHNPbkxpbmVFeGNsdWRpbmdUcmFpbGluZ1doaXRlc3BhY2UoZmxvYXQg
ZXh0cmEpIGNvbnN0Cit7CisgICAgcmV0dXJuIGN1cnJlbnRXaWR0aCgpIC0gbV90cmFpbGluZ1do
aXRlc3BhY2VXaWR0aCArIGV4dHJhIDw9IG1fYXZhaWxhYmxlV2lkdGg7Cit9CisKK3ZvaWQgTGlu
ZVdpZHRoOjp1cGRhdGVBdmFpbGFibGVXaWR0aChMYXlvdXRVbml0IHJlcGxhY2VkSGVpZ2h0KQor
eworICAgIExheW91dFVuaXQgaGVpZ2h0ID0gbV9ibG9jay5sb2dpY2FsSGVpZ2h0KCk7CisgICAg
TGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodEZvckxpbmUoJm1fYmxvY2ss
IG1faXNGaXJzdExpbmUsIHJlcGxhY2VkSGVpZ2h0KTsKKyAgICBtX2xlZnQgPSBtX2Jsb2NrLmxv
Z2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShoZWlnaHQsIHNob3VsZEluZGVudFRleHQoKSwgbG9naWNh
bEhlaWdodCk7CisgICAgbV9yaWdodCA9IG1fYmxvY2subG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGlu
ZShoZWlnaHQsIHNob3VsZEluZGVudFRleHQoKSwgbG9naWNhbEhlaWdodCk7CisKKyNpZiBFTkFC
TEUoQ1NTX1NIQVBFUykKKyAgICBpZiAobV9zZWdtZW50KSB7CisgICAgICAgIG1fbGVmdCA9IHN0
ZDo6bWF4PGZsb2F0PihtX3NlZ21lbnQtPmxvZ2ljYWxMZWZ0LCBtX2xlZnQpOworICAgICAgICBt
X3JpZ2h0ID0gc3RkOjptaW48ZmxvYXQ+KG1fc2VnbWVudC0+bG9naWNhbFJpZ2h0LCBtX3JpZ2h0
KTsKKyAgICB9CisjZW5kaWYKKworICAgIGNvbXB1dGVBdmFpbGFibGVXaWR0aEZyb21MZWZ0QW5k
UmlnaHQoKTsKK30KKwordm9pZCBMaW5lV2lkdGg6OnNocmlua0F2YWlsYWJsZVdpZHRoRm9yTmV3
RmxvYXRJZk5lZWRlZChGbG9hdGluZ09iamVjdCogbmV3RmxvYXQpCit7CisgICAgTGF5b3V0VW5p
dCBoZWlnaHQgPSBtX2Jsb2NrLmxvZ2ljYWxIZWlnaHQoKTsKKyAgICBpZiAoaGVpZ2h0IDwgbmV3
RmxvYXQtPmxvZ2ljYWxUb3AobV9ibG9jay5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB8fCBo
ZWlnaHQgPj0gbmV3RmxvYXQtPmxvZ2ljYWxCb3R0b20obV9ibG9jay5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisg
ICAgLy8gV2hlbiBmbG9hdHMgd2l0aCBzaGFwZSBvdXRzaWRlIGFyZSBzdGFja2VkLCB0aGUgZmxv
YXRzIGFyZSBwb3NpdGlvbmVkIGJhc2VkIG9uIHRoZSBtYXJnaW4gYm94IG9mIHRoZSBmbG9hdCwK
KyAgICAvLyBub3QgdGhlIHNoYXBlJ3MgY29udG91ci4gU2luY2Ugd2UgY29tcHV0ZWQgdGhlIHdp
ZHRoIGJhc2VkIG9uIHRoZSBzaGFwZSBjb250b3VyIHdoZW4gd2UgYWRkZWQgdGhlIGZsb2F0LAor
ICAgIC8vIHdoZW4gd2UgYWRkIGEgc3Vic2VxdWVudCBmbG9hdCBvbiB0aGUgc2FtZSBsaW5lLCB3
ZSBuZWVkIHRvIHVuZG8gdGhlIHNoYXBlIGRlbHRhIGluIG9yZGVyIHRvIHBvc2l0aW9uCisgICAg
Ly8gYmFzZWQgb24gdGhlIG1hcmdpbiBib3guIEluIG9yZGVyIHRvIGRvIHRoaXMsIHdlIG5lZWQg
dG8gd2FsayBiYWNrIHRocm91Z2ggdGhlIGZsb2F0aW5nIG9iamVjdCBsaXN0IHRvIGZpbmQKKyAg
ICAvLyB0aGUgZmlyc3QgcHJldmlvdXMgZmxvYXQgdGhhdCBpcyBvbiB0aGUgc2FtZSBzaWRlIGFz
IG91ciBuZXdGbG9hdC4KKyAgICBTaGFwZU91dHNpZGVJbmZvKiBwcmV2aW91c1NoYXBlT3V0c2lk
ZUluZm8gPSAwOworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNl
dCA9IG1fYmxvY2subV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIEZsb2F0aW5nT2JqZWN0
U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKKyAgICBGbG9hdGluZ09i
amVjdFNldEl0ZXJhdG9yIGJlZ2luID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKKyAgICBm
b3IgKC0taXQ7IGl0ICE9IGJlZ2luOyAtLWl0KSB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBw
cmV2aW91c0Zsb2F0ID0gKml0OworICAgICAgICBpZiAocHJldmlvdXNGbG9hdCAhPSBuZXdGbG9h
dCAmJiBwcmV2aW91c0Zsb2F0LT50eXBlKCkgPT0gbmV3RmxvYXQtPnR5cGUoKSkgeworICAgICAg
ICAgICAgcHJldmlvdXNTaGFwZU91dHNpZGVJbmZvID0gcHJldmlvdXNGbG9hdC0+cmVuZGVyZXIo
KS0+c2hhcGVPdXRzaWRlSW5mbygpOworICAgICAgICAgICAgaWYgKHByZXZpb3VzU2hhcGVPdXRz
aWRlSW5mbykKKyAgICAgICAgICAgICAgICBwcmV2aW91c1NoYXBlT3V0c2lkZUluZm8tPmNvbXB1
dGVTZWdtZW50c0ZvckNvbnRhaW5pbmdCbG9ja0xpbmUobV9ibG9jay5sb2dpY2FsSGVpZ2h0KCks
IHByZXZpb3VzRmxvYXQtPmxvZ2ljYWxUb3AobV9ibG9jay5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpKSwgbG9naWNhbEhlaWdodEZvckxpbmUoJm1fYmxvY2ssIG1faXNGaXJzdExpbmUpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgU2hhcGVPdXRzaWRlSW5m
byogc2hhcGVPdXRzaWRlSW5mbyA9IG5ld0Zsb2F0LT5yZW5kZXJlcigpLT5zaGFwZU91dHNpZGVJ
bmZvKCk7CisgICAgaWYgKHNoYXBlT3V0c2lkZUluZm8pCisgICAgICAgIHNoYXBlT3V0c2lkZUlu
Zm8tPmNvbXB1dGVTZWdtZW50c0ZvckNvbnRhaW5pbmdCbG9ja0xpbmUobV9ibG9jay5sb2dpY2Fs
SGVpZ2h0KCksIG5ld0Zsb2F0LT5sb2dpY2FsVG9wKG1fYmxvY2suaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSksIGxvZ2ljYWxIZWlnaHRGb3JMaW5lKCZtX2Jsb2NrLCBtX2lzRmlyc3RMaW5lKSk7
CisjZW5kaWYKKworICAgIGlmIChuZXdGbG9hdC0+dHlwZSgpID09IEZsb2F0aW5nT2JqZWN0OjpG
bG9hdExlZnQpIHsKKyAgICAgICAgZmxvYXQgbmV3TGVmdCA9IG5ld0Zsb2F0LT5sb2dpY2FsUmln
aHQobV9ibG9jay5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKKyNpZiBFTkFCTEUoQ1NTX1NI
QVBFUykKKyAgICAgICAgaWYgKHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mbykKKyAgICAgICAgICAg
IG5ld0xlZnQgLT0gcHJldmlvdXNTaGFwZU91dHNpZGVJbmZvLT5yaWdodFNlZ21lbnRNYXJnaW5C
b3hEZWx0YSgpOworICAgICAgICBpZiAoc2hhcGVPdXRzaWRlSW5mbykKKyAgICAgICAgICAgIG5l
d0xlZnQgKz0gc2hhcGVPdXRzaWRlSW5mby0+cmlnaHRTZWdtZW50TWFyZ2luQm94RGVsdGEoKTsK
KyNlbmRpZgorCisgICAgICAgIGlmIChzaG91bGRJbmRlbnRUZXh0KCkgJiYgbV9ibG9jay5zdHls
ZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCisgICAgICAgICAgICBuZXdMZWZ0ICs9IGZs
b29yVG9JbnQobV9ibG9jay50ZXh0SW5kZW50T2Zmc2V0KCkpOworICAgICAgICBtX2xlZnQgPSBz
dGQ6Om1heDxmbG9hdD4obV9sZWZ0LCBuZXdMZWZ0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBm
bG9hdCBuZXdSaWdodCA9IG5ld0Zsb2F0LT5sb2dpY2FsTGVmdChtX2Jsb2NrLmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpOworI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorICAgICAgICBpZiAocHJl
dmlvdXNTaGFwZU91dHNpZGVJbmZvKQorICAgICAgICAgICAgbmV3UmlnaHQgLT0gcHJldmlvdXNT
aGFwZU91dHNpZGVJbmZvLT5sZWZ0U2VnbWVudE1hcmdpbkJveERlbHRhKCk7CisgICAgICAgIGlm
IChzaGFwZU91dHNpZGVJbmZvKQorICAgICAgICAgICAgbmV3UmlnaHQgKz0gc2hhcGVPdXRzaWRl
SW5mby0+bGVmdFNlZ21lbnRNYXJnaW5Cb3hEZWx0YSgpOworI2VuZGlmCisKKyAgICAgICAgaWYg
KHNob3VsZEluZGVudFRleHQoKSAmJiAhbV9ibG9jay5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCkpCisgICAgICAgICAgICBuZXdSaWdodCAtPSBmbG9vclRvSW50KG1fYmxvY2sudGV4
dEluZGVudE9mZnNldCgpKTsKKyAgICAgICAgbV9yaWdodCA9IHN0ZDo6bWluPGZsb2F0PihtX3Jp
Z2h0LCBuZXdSaWdodCk7CisgICAgfQorCisgICAgY29tcHV0ZUF2YWlsYWJsZVdpZHRoRnJvbUxl
ZnRBbmRSaWdodCgpOworfQorCit2b2lkIExpbmVXaWR0aDo6Y29tbWl0KCkKK3sKKyAgICBtX2Nv
bW1pdHRlZFdpZHRoICs9IG1fdW5jb21taXR0ZWRXaWR0aDsKKyAgICBtX3VuY29tbWl0dGVkV2lk
dGggPSAwOworfQorCit2b2lkIExpbmVXaWR0aDo6YXBwbHlPdmVyaGFuZyhSZW5kZXJSdWJ5UnVu
KiBydWJ5UnVuLCBSZW5kZXJPYmplY3QqIHN0YXJ0UmVuZGVyZXIsIFJlbmRlck9iamVjdCogZW5k
UmVuZGVyZXIpCit7CisgICAgaW50IHN0YXJ0T3Zlcmhhbmc7CisgICAgaW50IGVuZE92ZXJoYW5n
OworICAgIHJ1YnlSdW4tPmdldE92ZXJoYW5nKG1faXNGaXJzdExpbmUsIHN0YXJ0UmVuZGVyZXIs
IGVuZFJlbmRlcmVyLCBzdGFydE92ZXJoYW5nLCBlbmRPdmVyaGFuZyk7CisKKyAgICBzdGFydE92
ZXJoYW5nID0gc3RkOjptaW48aW50PihzdGFydE92ZXJoYW5nLCBtX2NvbW1pdHRlZFdpZHRoKTsK
KyAgICBtX2F2YWlsYWJsZVdpZHRoICs9IHN0YXJ0T3Zlcmhhbmc7CisKKyAgICBlbmRPdmVyaGFu
ZyA9IHN0ZDo6bWF4KHN0ZDo6bWluPGludD4oZW5kT3ZlcmhhbmcsIG1fYXZhaWxhYmxlV2lkdGgg
LSBjdXJyZW50V2lkdGgoKSksIDApOworICAgIG1fYXZhaWxhYmxlV2lkdGggKz0gZW5kT3Zlcmhh
bmc7CisgICAgbV9vdmVyaGFuZ1dpZHRoICs9IHN0YXJ0T3ZlcmhhbmcgKyBlbmRPdmVyaGFuZzsK
K30KKwordm9pZCBMaW5lV2lkdGg6OmZpdEJlbG93RmxvYXRzKCkKK3sKKyAgICBBU1NFUlQoIW1f
Y29tbWl0dGVkV2lkdGgpOworICAgIEFTU0VSVCghZml0c09uTGluZSgpKTsKKworICAgIExheW91
dFVuaXQgZmxvYXRMb2dpY2FsQm90dG9tOworICAgIExheW91dFVuaXQgbGFzdEZsb2F0TG9naWNh
bEJvdHRvbSA9IG1fYmxvY2subG9naWNhbEhlaWdodCgpOworICAgIGZsb2F0IG5ld0xpbmVXaWR0
aCA9IG1fYXZhaWxhYmxlV2lkdGg7CisgICAgZmxvYXQgbmV3TGluZUxlZnQgPSBtX2xlZnQ7Cisg
ICAgZmxvYXQgbmV3TGluZVJpZ2h0ID0gbV9yaWdodDsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgICBmbG9hdExvZ2ljYWxCb3R0b20gPSBtX2Jsb2NrLm5leHRGbG9hdExvZ2ljYWxCb3R0b21C
ZWxvdyhsYXN0RmxvYXRMb2dpY2FsQm90dG9tKTsKKyAgICAgICAgaWYgKGZsb2F0TG9naWNhbEJv
dHRvbSA8PSBsYXN0RmxvYXRMb2dpY2FsQm90dG9tKQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgbmV3TGluZUxlZnQgPSBtX2Jsb2NrLmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShmbG9h
dExvZ2ljYWxCb3R0b20sIHNob3VsZEluZGVudFRleHQoKSk7CisgICAgICAgIG5ld0xpbmVSaWdo
dCA9IG1fYmxvY2subG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShmbG9hdExvZ2ljYWxCb3R0b20s
IHNob3VsZEluZGVudFRleHQoKSk7CisgICAgICAgIG5ld0xpbmVXaWR0aCA9IG1heCgwLjBmLCBu
ZXdMaW5lUmlnaHQgLSBuZXdMaW5lTGVmdCk7CisgICAgICAgIGxhc3RGbG9hdExvZ2ljYWxCb3R0
b20gPSBmbG9hdExvZ2ljYWxCb3R0b207CisgICAgICAgIGlmIChuZXdMaW5lV2lkdGggPj0gbV91
bmNvbW1pdHRlZFdpZHRoKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKG5l
d0xpbmVXaWR0aCA+IG1fYXZhaWxhYmxlV2lkdGgpIHsKKyAgICAgICAgbV9ibG9jay5zZXRMb2dp
Y2FsSGVpZ2h0KGxhc3RGbG9hdExvZ2ljYWxCb3R0b20pOworICAgICAgICBtX2F2YWlsYWJsZVdp
ZHRoID0gbmV3TGluZVdpZHRoICsgbV9vdmVyaGFuZ1dpZHRoOworICAgICAgICBtX2xlZnQgPSBu
ZXdMaW5lTGVmdDsKKyAgICAgICAgbV9yaWdodCA9IG5ld0xpbmVSaWdodDsKKyAgICB9Cit9CisK
K3ZvaWQgTGluZVdpZHRoOjpzZXRUcmFpbGluZ1doaXRlc3BhY2VXaWR0aChmbG9hdCBjb2xsYXBz
ZWRXaGl0ZXNwYWNlLCBmbG9hdCBib3JkZXJQYWRkaW5nTWFyZ2luKQoreworICAgIG1fdHJhaWxp
bmdDb2xsYXBzZWRXaGl0ZXNwYWNlV2lkdGggPSBjb2xsYXBzZWRXaGl0ZXNwYWNlOworICAgIG1f
dHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggPSBjb2xsYXBzZWRXaGl0ZXNwYWNlICsgYm9yZGVyUGFk
ZGluZ01hcmdpbjsKK30KKwordm9pZCBMaW5lV2lkdGg6OmNvbXB1dGVBdmFpbGFibGVXaWR0aEZy
b21MZWZ0QW5kUmlnaHQoKQoreworICAgIG1fYXZhaWxhYmxlV2lkdGggPSBtYXgoMC4wZiwgbV9y
aWdodCAtIG1fbGVmdCkgKyBtX292ZXJoYW5nV2lkdGg7Cit9CisKK2Jvb2wgTGluZVdpZHRoOjpm
aXRzT25MaW5lRXhjbHVkaW5nVHJhaWxpbmdDb2xsYXBzZWRXaGl0ZXNwYWNlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gY3VycmVudFdpZHRoKCkgLSBtX3RyYWlsaW5nQ29sbGFwc2VkV2hpdGVzcGFj
ZVdpZHRoIDw9IG1fYXZhaWxhYmxlV2lkdGg7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9MaW5lV2lkdGguaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9M
aW5lV2lkdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmFmZWNmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xpbmVXaWR0aC5oCkBA
IC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQWRvYmUgU3lzdGVtcyBJ
bmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTGluZVdpZHRoX2gKKyNkZWZpbmUgTGluZVdp
ZHRoX2gKKworI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCisjaW5jbHVkZSAiUmVuZGVyUnVieVJ1
bi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gSW5kZW50VGV4dE9yTm90IHsgRG9O
b3RJbmRlbnRUZXh0LCBJbmRlbnRUZXh0IH07CisKK2lubGluZSBMYXlvdXRVbml0IGxvZ2ljYWxI
ZWlnaHRGb3JMaW5lKGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaywgYm9vbCBpc0ZpcnN0TGluZSwg
TGF5b3V0VW5pdCByZXBsYWNlZEhlaWdodCA9IDApCit7CisgICAgaWYgKCFibG9jay0+ZG9jdW1l
bnQoKS5pbk5vUXVpcmtzTW9kZSgpICYmIHJlcGxhY2VkSGVpZ2h0KQorICAgICAgICByZXR1cm4g
cmVwbGFjZWRIZWlnaHQ7CisKKyAgICBpZiAoIShibG9jay0+c3R5bGUoaXNGaXJzdExpbmUpLT5s
aW5lQm94Q29udGFpbigpICYgTGluZUJveENvbnRhaW5CbG9jaykpCisgICAgICAgIHJldHVybiAw
OworCisgICAgcmV0dXJuIHN0ZDo6bWF4PExheW91dFVuaXQ+KHJlcGxhY2VkSGVpZ2h0LCBibG9j
ay0+bGluZUhlaWdodChpc0ZpcnN0TGluZSwgYmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBIb3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGlu
ZUJveGVzKSk7Cit9CisKK2NsYXNzIExpbmVXaWR0aCB7CitwdWJsaWM6CisgICAgTGluZVdpZHRo
KFJlbmRlckJsb2NrJiwgYm9vbCBpc0ZpcnN0TGluZSwgSW5kZW50VGV4dE9yTm90IHNob3VsZElu
ZGVudFRleHQpOworCisgICAgYm9vbCBmaXRzT25MaW5lKGJvb2wgaWdub3JpbmdUcmFpbGluZ1Nw
YWNlID0gZmFsc2UpIGNvbnN0OworICAgIGJvb2wgZml0c09uTGluZUluY2x1ZGluZ0V4dHJhV2lk
dGgoZmxvYXQgZXh0cmEpIGNvbnN0OworICAgIGJvb2wgZml0c09uTGluZUV4Y2x1ZGluZ1RyYWls
aW5nV2hpdGVzcGFjZShmbG9hdCBleHRyYSkgY29uc3Q7CisKKyAgICBmbG9hdCBjdXJyZW50V2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX2NvbW1pdHRlZFdpZHRoICsgbV91bmNvbW1pdHRlZFdpZHRo
OyB9CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBldmVudHVhbGx5IHJlcGxhY2UgdGhlc2UgdGhy
ZWUgZnVuY3Rpb25zIGJ5IG9uZXMgdGhhdCB3b3JrIG9uIGEgaGlnaGVyIGFic3RyYWN0aW9uLgor
ICAgIGZsb2F0IHVuY29tbWl0dGVkV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3VuY29tbWl0dGVk
V2lkdGg7IH0KKyAgICBmbG9hdCBjb21taXR0ZWRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY29t
bWl0dGVkV2lkdGg7IH0KKyAgICBmbG9hdCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fYXZhaWxhYmxlV2lkdGg7IH0KKworICAgIHZvaWQgdXBkYXRlQXZhaWxhYmxlV2lkdGgoTGF5
b3V0VW5pdCBtaW5pbXVtSGVpZ2h0ID0gMCk7CisgICAgdm9pZCBzaHJpbmtBdmFpbGFibGVXaWR0
aEZvck5ld0Zsb2F0SWZOZWVkZWQoRmxvYXRpbmdPYmplY3QqKTsKKyAgICB2b2lkIGFkZFVuY29t
bWl0dGVkV2lkdGgoZmxvYXQgZGVsdGEpIHsgbV91bmNvbW1pdHRlZFdpZHRoICs9IGRlbHRhOyB9
CisgICAgdm9pZCBjb21taXQoKTsKKyAgICB2b2lkIGFwcGx5T3ZlcmhhbmcoUmVuZGVyUnVieVJ1
biosIFJlbmRlck9iamVjdCogc3RhcnRSZW5kZXJlciwgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJl
cik7CisgICAgdm9pZCBmaXRCZWxvd0Zsb2F0cygpOworICAgIHZvaWQgc2V0VHJhaWxpbmdXaGl0
ZXNwYWNlV2lkdGgoZmxvYXQgY29sbGFwc2VkV2hpdGVzcGFjZSwgZmxvYXQgYm9yZGVyUGFkZGlu
Z01hcmdpbiA9IDApOworCisgICAgYm9vbCBzaG91bGRJbmRlbnRUZXh0KCkgY29uc3QgeyByZXR1
cm4gbV9zaG91bGRJbmRlbnRUZXh0ID09IEluZGVudFRleHQ7IH0KKworcHJpdmF0ZToKKyAgICB2
b2lkIGNvbXB1dGVBdmFpbGFibGVXaWR0aEZyb21MZWZ0QW5kUmlnaHQoKTsKKyAgICBib29sIGZp
dHNPbkxpbmVFeGNsdWRpbmdUcmFpbGluZ0NvbGxhcHNlZFdoaXRlc3BhY2UoKSBjb25zdDsKKwor
ICAgIFJlbmRlckJsb2NrJiBtX2Jsb2NrOworICAgIGZsb2F0IG1fdW5jb21taXR0ZWRXaWR0aDsK
KyAgICBmbG9hdCBtX2NvbW1pdHRlZFdpZHRoOworICAgIGZsb2F0IG1fb3ZlcmhhbmdXaWR0aDsg
Ly8gVGhlIGFtb3VudCBieSB3aGljaCB8bV9hdmFpbGFibGVXaWR0aHwgaGFzIGJlZW4gaW5mbGF0
ZWQgdG8gYWNjb3VudCBmb3IgcG9zc2libGUgY29udHJhY3Rpb24gZHVlIHRvIHJ1Ynkgb3Zlcmhh
bmcuCisgICAgZmxvYXQgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aDsKKyAgICBmbG9hdCBtX3Ry
YWlsaW5nQ29sbGFwc2VkV2hpdGVzcGFjZVdpZHRoOworICAgIGZsb2F0IG1fbGVmdDsKKyAgICBm
bG9hdCBtX3JpZ2h0OworICAgIGZsb2F0IG1fYXZhaWxhYmxlV2lkdGg7CisjaWYgRU5BQkxFKENT
U19TSEFQRVMpCisgICAgY29uc3QgTGluZVNlZ21lbnQqIG1fc2VnbWVudDsKKyNlbmRpZgorICAg
IGJvb2wgbV9pc0ZpcnN0TGluZTsKKyAgICBJbmRlbnRUZXh0T3JOb3QgbV9zaG91bGRJbmRlbnRU
ZXh0OworfTsKKworfQorCisjZW5kaWYgLy8gTGluZVdpZHRoX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKaW5kZXggMGE1NWJjYy4u
ZTI1ZTYwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
TGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
TGluZUxheW91dC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJIeXBoZW5hdGlvbi5o
IgogI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5o
IgorI2luY2x1ZGUgIkxpbmVXaWR0aC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJSZW5kZXJBcmVuYS5oIgogI2luY2x1ZGUgIlJlbmRlckNvbWJpbmVUZXh0LmgiCkBAIC02Niwx
NyArNjcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBXZSBkb24ndCBsZXQgb3VyIGxpbmUg
Ym94IHRyZWUgZm9yIGEgc2luZ2xlIGxpbmUgZ2V0IGFueSBkZWVwZXIgdGhhbiB0aGlzLgogY29u
c3QgdW5zaWduZWQgY01heExpbmVEZXB0aCA9IDIwMDsKIAotc3RhdGljIExheW91dFVuaXQgbG9n
aWNhbEhlaWdodEZvckxpbmUoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrLCBib29sIGlzRmlyc3RM
aW5lLCBMYXlvdXRVbml0IHJlcGxhY2VkSGVpZ2h0ID0gMCkKLXsKLSAgICBpZiAoIWJsb2NrLT5k
b2N1bWVudCgpLmluTm9RdWlya3NNb2RlKCkgJiYgcmVwbGFjZWRIZWlnaHQpCi0gICAgICAgIHJl
dHVybiByZXBsYWNlZEhlaWdodDsKLQotICAgIGlmICghKGJsb2NrLT5zdHlsZShpc0ZpcnN0TGlu
ZSktPmxpbmVCb3hDb250YWluKCkgJiBMaW5lQm94Q29udGFpbkJsb2NrKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICByZXR1cm4gbWF4PExheW91dFVuaXQ+KHJlcGxhY2VkSGVpZ2h0LCBibG9j
ay0+bGluZUhlaWdodChpc0ZpcnN0TGluZSwgYmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBIb3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGlu
ZUJveGVzKSk7Ci19Ci0KICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKIFNoYXBlSW5zaWRlSW5mbyog
UmVuZGVyQmxvY2s6OmxheW91dFNoYXBlSW5zaWRlSW5mbygpIGNvbnN0CiB7CkBAIC05NCwyMDgg
Kzg0LDYgQEAgU2hhcGVJbnNpZGVJbmZvKiBSZW5kZXJCbG9jazo6bGF5b3V0U2hhcGVJbnNpZGVJ
bmZvKCkgY29uc3QKIH0KICNlbmRpZgogCi1lbnVtIEluZGVudFRleHRPck5vdCB7IERvTm90SW5k
ZW50VGV4dCwgSW5kZW50VGV4dCB9OwotCi1jbGFzcyBMaW5lV2lkdGggewotcHVibGljOgotICAg
IExpbmVXaWR0aChSZW5kZXJCbG9jayogYmxvY2ssIGJvb2wgaXNGaXJzdExpbmUsIEluZGVudFRl
eHRPck5vdCBzaG91bGRJbmRlbnRUZXh0KQotICAgICAgICA6IG1fYmxvY2soYmxvY2spCi0gICAg
ICAgICwgbV91bmNvbW1pdHRlZFdpZHRoKDApCi0gICAgICAgICwgbV9jb21taXR0ZWRXaWR0aCgw
KQotICAgICAgICAsIG1fb3ZlcmhhbmdXaWR0aCgwKQotICAgICAgICAsIG1fdHJhaWxpbmdXaGl0
ZXNwYWNlV2lkdGgoMCkKLSAgICAgICAgLCBtX3RyYWlsaW5nQ29sbGFwc2VkV2hpdGVzcGFjZVdp
ZHRoKDApCi0gICAgICAgICwgbV9sZWZ0KDApCi0gICAgICAgICwgbV9yaWdodCgwKQotICAgICAg
ICAsIG1fYXZhaWxhYmxlV2lkdGgoMCkKLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAg
LCBtX3NlZ21lbnQoMCkKLSNlbmRpZgotICAgICAgICAsIG1faXNGaXJzdExpbmUoaXNGaXJzdExp
bmUpCi0gICAgICAgICwgbV9zaG91bGRJbmRlbnRUZXh0KHNob3VsZEluZGVudFRleHQpCi0gICAg
ewotICAgICAgICBBU1NFUlQoYmxvY2spOwotI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgICAg
ICBpZiAoU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8gPSBtX2Jsb2NrLT5sYXlvdXRT
aGFwZUluc2lkZUluZm8oKSkKLSAgICAgICAgICAgIG1fc2VnbWVudCA9IHNoYXBlSW5zaWRlSW5m
by0+Y3VycmVudFNlZ21lbnQoKTsKLSNlbmRpZgotICAgICAgICB1cGRhdGVBdmFpbGFibGVXaWR0
aCgpOwotICAgIH0KLSAgICBib29sIGZpdHNPbkxpbmUoYm9vbCBpZ25vcmluZ1RyYWlsaW5nU3Bh
Y2UgPSBmYWxzZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpZ25vcmluZ1RyYWlsaW5nU3BhY2Ug
PyBmaXRzT25MaW5lRXhjbHVkaW5nVHJhaWxpbmdDb2xsYXBzZWRXaGl0ZXNwYWNlKCkgOiBmaXRz
T25MaW5lSW5jbHVkaW5nRXh0cmFXaWR0aCgwKTsKLSAgICB9Ci0gICAgYm9vbCBmaXRzT25MaW5l
SW5jbHVkaW5nRXh0cmFXaWR0aChmbG9hdCBleHRyYSkgY29uc3QgeyByZXR1cm4gY3VycmVudFdp
ZHRoKCkgKyBleHRyYSA8PSBtX2F2YWlsYWJsZVdpZHRoOyB9Ci0gICAgYm9vbCBmaXRzT25MaW5l
RXhjbHVkaW5nVHJhaWxpbmdXaGl0ZXNwYWNlKGZsb2F0IGV4dHJhKSBjb25zdCB7IHJldHVybiBj
dXJyZW50V2lkdGgoKSAtIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggKyBleHRyYSA8PSBtX2F2
YWlsYWJsZVdpZHRoOyB9Ci0KLSAgICBmbG9hdCBjdXJyZW50V2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX2NvbW1pdHRlZFdpZHRoICsgbV91bmNvbW1pdHRlZFdpZHRoOyB9Ci0gICAgLy8gRklYTUU6
IFdlIHNob3VsZCBldmVudHVhbGx5IHJlcGxhY2UgdGhlc2UgdGhyZWUgZnVuY3Rpb25zIGJ5IG9u
ZXMgdGhhdCB3b3JrIG9uIGEgaGlnaGVyIGFic3RyYWN0aW9uLgotICAgIGZsb2F0IHVuY29tbWl0
dGVkV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3VuY29tbWl0dGVkV2lkdGg7IH0KLSAgICBmbG9h
dCBjb21taXR0ZWRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY29tbWl0dGVkV2lkdGg7IH0KLSAg
ICBmbG9hdCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYXZhaWxhYmxlV2lkdGg7
IH0KLQotICAgIHZvaWQgdXBkYXRlQXZhaWxhYmxlV2lkdGgoTGF5b3V0VW5pdCBtaW5pbXVtSGVp
Z2h0ID0gMCk7Ci0gICAgdm9pZCBzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVk
ZWQoRmxvYXRpbmdPYmplY3QqKTsKLSAgICB2b2lkIGFkZFVuY29tbWl0dGVkV2lkdGgoZmxvYXQg
ZGVsdGEpIHsgbV91bmNvbW1pdHRlZFdpZHRoICs9IGRlbHRhOyB9Ci0gICAgdm9pZCBjb21taXQo
KQotICAgIHsKLSAgICAgICAgbV9jb21taXR0ZWRXaWR0aCArPSBtX3VuY29tbWl0dGVkV2lkdGg7
Ci0gICAgICAgIG1fdW5jb21taXR0ZWRXaWR0aCA9IDA7Ci0gICAgfQotICAgIHZvaWQgYXBwbHlP
dmVyaGFuZyhSZW5kZXJSdWJ5UnVuKiwgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyLCBSZW5k
ZXJPYmplY3QqIGVuZFJlbmRlcmVyKTsKLSAgICB2b2lkIGZpdEJlbG93RmxvYXRzKCk7Ci0gICAg
dm9pZCBzZXRUcmFpbGluZ1doaXRlc3BhY2VXaWR0aChmbG9hdCBjb2xsYXBzZWRXaGl0ZXNwYWNl
LCBmbG9hdCBib3JkZXJQYWRkaW5nTWFyZ2luID0gMCkgeyBtX3RyYWlsaW5nQ29sbGFwc2VkV2hp
dGVzcGFjZVdpZHRoID0gY29sbGFwc2VkV2hpdGVzcGFjZTsgbV90cmFpbGluZ1doaXRlc3BhY2VX
aWR0aCA9ICBjb2xsYXBzZWRXaGl0ZXNwYWNlICsgYm9yZGVyUGFkZGluZ01hcmdpbjsgfQotCi0g
ICAgYm9vbCBzaG91bGRJbmRlbnRUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRJbmRlbnRU
ZXh0ID09IEluZGVudFRleHQ7IH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIGNvbXB1dGVBdmFpbGFi
bGVXaWR0aEZyb21MZWZ0QW5kUmlnaHQoKQotICAgIHsKLSAgICAgICAgbV9hdmFpbGFibGVXaWR0
aCA9IG1heCgwLjBmLCBtX3JpZ2h0IC0gbV9sZWZ0KSArIG1fb3ZlcmhhbmdXaWR0aDsKLSAgICB9
Ci0gICAgYm9vbCBmaXRzT25MaW5lRXhjbHVkaW5nVHJhaWxpbmdDb2xsYXBzZWRXaGl0ZXNwYWNl
KCkgY29uc3QgeyByZXR1cm4gY3VycmVudFdpZHRoKCkgLSBtX3RyYWlsaW5nQ29sbGFwc2VkV2hp
dGVzcGFjZVdpZHRoIDw9IG1fYXZhaWxhYmxlV2lkdGg7IH0KLQotcHJpdmF0ZToKLSAgICBSZW5k
ZXJCbG9jayogbV9ibG9jazsKLSAgICBmbG9hdCBtX3VuY29tbWl0dGVkV2lkdGg7Ci0gICAgZmxv
YXQgbV9jb21taXR0ZWRXaWR0aDsKLSAgICBmbG9hdCBtX292ZXJoYW5nV2lkdGg7IC8vIFRoZSBh
bW91bnQgYnkgd2hpY2ggfG1fYXZhaWxhYmxlV2lkdGh8IGhhcyBiZWVuIGluZmxhdGVkIHRvIGFj
Y291bnQgZm9yIHBvc3NpYmxlIGNvbnRyYWN0aW9uIGR1ZSB0byBydWJ5IG92ZXJoYW5nLgotICAg
IGZsb2F0IG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGg7Ci0gICAgZmxvYXQgbV90cmFpbGluZ0Nv
bGxhcHNlZFdoaXRlc3BhY2VXaWR0aDsKLSAgICBmbG9hdCBtX2xlZnQ7Ci0gICAgZmxvYXQgbV9y
aWdodDsKLSAgICBmbG9hdCBtX2F2YWlsYWJsZVdpZHRoOwotI2lmIEVOQUJMRShDU1NfU0hBUEVT
KQotICAgIGNvbnN0IExpbmVTZWdtZW50KiBtX3NlZ21lbnQ7Ci0jZW5kaWYKLSAgICBib29sIG1f
aXNGaXJzdExpbmU7Ci0gICAgSW5kZW50VGV4dE9yTm90IG1fc2hvdWxkSW5kZW50VGV4dDsKLX07
Ci0KLWlubGluZSB2b2lkIExpbmVXaWR0aDo6dXBkYXRlQXZhaWxhYmxlV2lkdGgoTGF5b3V0VW5p
dCByZXBsYWNlZEhlaWdodCkKLXsKLSAgICBMYXlvdXRVbml0IGhlaWdodCA9IG1fYmxvY2stPmxv
Z2ljYWxIZWlnaHQoKTsKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVp
Z2h0Rm9yTGluZShtX2Jsb2NrLCBtX2lzRmlyc3RMaW5lLCByZXBsYWNlZEhlaWdodCk7Ci0gICAg
bV9sZWZ0ID0gbV9ibG9jay0+bG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKGhlaWdodCwgc2hvdWxk
SW5kZW50VGV4dCgpLCBsb2dpY2FsSGVpZ2h0KTsKLSAgICBtX3JpZ2h0ID0gbV9ibG9jay0+bG9n
aWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShoZWlnaHQsIHNob3VsZEluZGVudFRleHQoKSwgbG9naWNh
bEhlaWdodCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICBpZiAobV9zZWdtZW50KSB7
Ci0gICAgICAgIG1fbGVmdCA9IG1heDxmbG9hdD4obV9zZWdtZW50LT5sb2dpY2FsTGVmdCwgbV9s
ZWZ0KTsKLSAgICAgICAgbV9yaWdodCA9IG1pbjxmbG9hdD4obV9zZWdtZW50LT5sb2dpY2FsUmln
aHQsIG1fcmlnaHQpOwotICAgIH0KLSNlbmRpZgotCi0gICAgY29tcHV0ZUF2YWlsYWJsZVdpZHRo
RnJvbUxlZnRBbmRSaWdodCgpOwotfQotCi1pbmxpbmUgdm9pZCBMaW5lV2lkdGg6OnNocmlua0F2
YWlsYWJsZVdpZHRoRm9yTmV3RmxvYXRJZk5lZWRlZChGbG9hdGluZ09iamVjdCogbmV3RmxvYXQp
Ci17Ci0gICAgTGF5b3V0VW5pdCBoZWlnaHQgPSBtX2Jsb2NrLT5sb2dpY2FsSGVpZ2h0KCk7Ci0g
ICAgaWYgKGhlaWdodCA8IG5ld0Zsb2F0LT5sb2dpY2FsVG9wKG1fYmxvY2stPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpIHx8IGhlaWdodCA+PSBuZXdGbG9hdC0+bG9naWNhbEJvdHRvbShtX2Js
b2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYg
RU5BQkxFKENTU19TSEFQRVMpCi0gICAgLy8gV2hlbiBmbG9hdHMgd2l0aCBzaGFwZSBvdXRzaWRl
IGFyZSBzdGFja2VkLCB0aGUgZmxvYXRzIGFyZSBwb3NpdGlvbmVkIGJhc2VkIG9uIHRoZSBtYXJn
aW4gYm94IG9mIHRoZSBmbG9hdCwKLSAgICAvLyBub3QgdGhlIHNoYXBlJ3MgY29udG91ci4gU2lu
Y2Ugd2UgY29tcHV0ZWQgdGhlIHdpZHRoIGJhc2VkIG9uIHRoZSBzaGFwZSBjb250b3VyIHdoZW4g
d2UgYWRkZWQgdGhlIGZsb2F0LAotICAgIC8vIHdoZW4gd2UgYWRkIGEgc3Vic2VxdWVudCBmbG9h
dCBvbiB0aGUgc2FtZSBsaW5lLCB3ZSBuZWVkIHRvIHVuZG8gdGhlIHNoYXBlIGRlbHRhIGluIG9y
ZGVyIHRvIHBvc2l0aW9uCi0gICAgLy8gYmFzZWQgb24gdGhlIG1hcmdpbiBib3guIEluIG9yZGVy
IHRvIGRvIHRoaXMsIHdlIG5lZWQgdG8gd2FsayBiYWNrIHRocm91Z2ggdGhlIGZsb2F0aW5nIG9i
amVjdCBsaXN0IHRvIGZpbmQKLSAgICAvLyB0aGUgZmlyc3QgcHJldmlvdXMgZmxvYXQgdGhhdCBp
cyBvbiB0aGUgc2FtZSBzaWRlIGFzIG91ciBuZXdGbG9hdC4KLSAgICBTaGFwZU91dHNpZGVJbmZv
KiBwcmV2aW91c1NoYXBlT3V0c2lkZUluZm8gPSAwOwotICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0
U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fYmxvY2stPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQo
KTsKLSAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQu
ZW5kKCk7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdpbiA9IGZsb2F0aW5nT2Jq
ZWN0U2V0LmJlZ2luKCk7Ci0gICAgZm9yICgtLWl0OyBpdCAhPSBiZWdpbjsgLS1pdCkgewotICAg
ICAgICBGbG9hdGluZ09iamVjdCogcHJldmlvdXNGbG9hdCA9ICppdDsKLSAgICAgICAgaWYgKHBy
ZXZpb3VzRmxvYXQgIT0gbmV3RmxvYXQgJiYgcHJldmlvdXNGbG9hdC0+dHlwZSgpID09IG5ld0Zs
b2F0LT50eXBlKCkpIHsKLSAgICAgICAgICAgIHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mbyA9IHBy
ZXZpb3VzRmxvYXQtPnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8oKTsKLSAgICAgICAgICAg
IGlmIChwcmV2aW91c1NoYXBlT3V0c2lkZUluZm8pIHsKLSAgICAgICAgICAgICAgICBwcmV2aW91
c1NoYXBlT3V0c2lkZUluZm8tPmNvbXB1dGVTZWdtZW50c0ZvckNvbnRhaW5pbmdCbG9ja0xpbmUo
bV9ibG9jay0+bG9naWNhbEhlaWdodCgpLCBwcmV2aW91c0Zsb2F0LT5sb2dpY2FsVG9wKG1fYmxv
Y2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpLCBsb2dpY2FsSGVpZ2h0Rm9yTGluZShtX2Js
b2NrLCBtX2lzRmlyc3RMaW5lKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZUlu
Zm8gPSBuZXdGbG9hdC0+cmVuZGVyZXIoKS0+c2hhcGVPdXRzaWRlSW5mbygpOwotICAgIGlmIChz
aGFwZU91dHNpZGVJbmZvKSB7Ci0gICAgICAgIHNoYXBlT3V0c2lkZUluZm8tPmNvbXB1dGVTZWdt
ZW50c0ZvckNvbnRhaW5pbmdCbG9ja0xpbmUobV9ibG9jay0+bG9naWNhbEhlaWdodCgpLCBuZXdG
bG9hdC0+bG9naWNhbFRvcChtX2Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSwgbG9n
aWNhbEhlaWdodEZvckxpbmUobV9ibG9jaywgbV9pc0ZpcnN0TGluZSkpOwotICAgIH0KLSNlbmRp
ZgotCi0gICAgaWYgKG5ld0Zsb2F0LT50eXBlKCkgPT0gRmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVm
dCkgewotICAgICAgICBmbG9hdCBuZXdMZWZ0ID0gbmV3RmxvYXQtPmxvZ2ljYWxSaWdodChtX2Js
b2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykK
LSAgICAgICAgaWYgKHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mbykKLSAgICAgICAgICAgIG5ld0xl
ZnQgLT0gcHJldmlvdXNTaGFwZU91dHNpZGVJbmZvLT5yaWdodFNlZ21lbnRNYXJnaW5Cb3hEZWx0
YSgpOwotICAgICAgICBpZiAoc2hhcGVPdXRzaWRlSW5mbykKLSAgICAgICAgICAgIG5ld0xlZnQg
Kz0gc2hhcGVPdXRzaWRlSW5mby0+cmlnaHRTZWdtZW50TWFyZ2luQm94RGVsdGEoKTsKLSNlbmRp
ZgotCi0gICAgICAgIGlmIChzaG91bGRJbmRlbnRUZXh0KCkgJiYgbV9ibG9jay0+c3R5bGUoKS0+
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICAgICAgbmV3TGVmdCArPSBmbG9vclRv
SW50KG1fYmxvY2stPnRleHRJbmRlbnRPZmZzZXQoKSk7Ci0gICAgICAgIG1fbGVmdCA9IG1heDxm
bG9hdD4obV9sZWZ0LCBuZXdMZWZ0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBmbG9hdCBuZXdS
aWdodCA9IG5ld0Zsb2F0LT5sb2dpY2FsTGVmdChtX2Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpKTsKLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAgaWYgKHByZXZpb3VzU2hh
cGVPdXRzaWRlSW5mbykKLSAgICAgICAgICAgIG5ld1JpZ2h0IC09IHByZXZpb3VzU2hhcGVPdXRz
aWRlSW5mby0+bGVmdFNlZ21lbnRNYXJnaW5Cb3hEZWx0YSgpOwotICAgICAgICBpZiAoc2hhcGVP
dXRzaWRlSW5mbykKLSAgICAgICAgICAgIG5ld1JpZ2h0ICs9IHNoYXBlT3V0c2lkZUluZm8tPmxl
ZnRTZWdtZW50TWFyZ2luQm94RGVsdGEoKTsKLSNlbmRpZgotCi0gICAgICAgIGlmIChzaG91bGRJ
bmRlbnRUZXh0KCkgJiYgIW1fYmxvY2stPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSkKLSAgICAgICAgICAgIG5ld1JpZ2h0IC09IGZsb29yVG9JbnQobV9ibG9jay0+dGV4dEluZGVu
dE9mZnNldCgpKTsKLSAgICAgICAgbV9yaWdodCA9IG1pbjxmbG9hdD4obV9yaWdodCwgbmV3Umln
aHQpOwotICAgIH0KLQotICAgIGNvbXB1dGVBdmFpbGFibGVXaWR0aEZyb21MZWZ0QW5kUmlnaHQo
KTsKLX0KLQotdm9pZCBMaW5lV2lkdGg6OmFwcGx5T3ZlcmhhbmcoUmVuZGVyUnVieVJ1biogcnVi
eVJ1biwgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyLCBSZW5kZXJPYmplY3QqIGVuZFJlbmRl
cmVyKQotewotICAgIGludCBzdGFydE92ZXJoYW5nOwotICAgIGludCBlbmRPdmVyaGFuZzsKLSAg
ICBydWJ5UnVuLT5nZXRPdmVyaGFuZyhtX2lzRmlyc3RMaW5lLCBzdGFydFJlbmRlcmVyLCBlbmRS
ZW5kZXJlciwgc3RhcnRPdmVyaGFuZywgZW5kT3ZlcmhhbmcpOwotCi0gICAgc3RhcnRPdmVyaGFu
ZyA9IG1pbjxpbnQ+KHN0YXJ0T3ZlcmhhbmcsIG1fY29tbWl0dGVkV2lkdGgpOwotICAgIG1fYXZh
aWxhYmxlV2lkdGggKz0gc3RhcnRPdmVyaGFuZzsKLQotICAgIGVuZE92ZXJoYW5nID0gbWF4KG1p
bjxpbnQ+KGVuZE92ZXJoYW5nLCBtX2F2YWlsYWJsZVdpZHRoIC0gY3VycmVudFdpZHRoKCkpLCAw
KTsKLSAgICBtX2F2YWlsYWJsZVdpZHRoICs9IGVuZE92ZXJoYW5nOwotICAgIG1fb3ZlcmhhbmdX
aWR0aCArPSBzdGFydE92ZXJoYW5nICsgZW5kT3Zlcmhhbmc7Ci19Ci0KLXZvaWQgTGluZVdpZHRo
OjpmaXRCZWxvd0Zsb2F0cygpCi17Ci0gICAgQVNTRVJUKCFtX2NvbW1pdHRlZFdpZHRoKTsKLSAg
ICBBU1NFUlQoIWZpdHNPbkxpbmUoKSk7Ci0KLSAgICBMYXlvdXRVbml0IGZsb2F0TG9naWNhbEJv
dHRvbTsKLSAgICBMYXlvdXRVbml0IGxhc3RGbG9hdExvZ2ljYWxCb3R0b20gPSBtX2Jsb2NrLT5s
b2dpY2FsSGVpZ2h0KCk7Ci0gICAgZmxvYXQgbmV3TGluZVdpZHRoID0gbV9hdmFpbGFibGVXaWR0
aDsKLSAgICBmbG9hdCBuZXdMaW5lTGVmdCA9IG1fbGVmdDsKLSAgICBmbG9hdCBuZXdMaW5lUmln
aHQgPSBtX3JpZ2h0OwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGZsb2F0TG9naWNhbEJv
dHRvbSA9IG1fYmxvY2stPm5leHRGbG9hdExvZ2ljYWxCb3R0b21CZWxvdyhsYXN0RmxvYXRMb2dp
Y2FsQm90dG9tKTsKLSAgICAgICAgaWYgKGZsb2F0TG9naWNhbEJvdHRvbSA8PSBsYXN0RmxvYXRM
b2dpY2FsQm90dG9tKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgbmV3TGluZUxlZnQg
PSBtX2Jsb2NrLT5sb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoZmxvYXRMb2dpY2FsQm90dG9tLCBz
aG91bGRJbmRlbnRUZXh0KCkpOwotICAgICAgICBuZXdMaW5lUmlnaHQgPSBtX2Jsb2NrLT5sb2dp
Y2FsUmlnaHRPZmZzZXRGb3JMaW5lKGZsb2F0TG9naWNhbEJvdHRvbSwgc2hvdWxkSW5kZW50VGV4
dCgpKTsKLSAgICAgICAgbmV3TGluZVdpZHRoID0gbWF4KDAuMGYsIG5ld0xpbmVSaWdodCAtIG5l
d0xpbmVMZWZ0KTsKLSAgICAgICAgbGFzdEZsb2F0TG9naWNhbEJvdHRvbSA9IGZsb2F0TG9naWNh
bEJvdHRvbTsKLSAgICAgICAgaWYgKG5ld0xpbmVXaWR0aCA+PSBtX3VuY29tbWl0dGVkV2lkdGgp
Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAobmV3TGluZVdpZHRoID4gbV9h
dmFpbGFibGVXaWR0aCkgewotICAgICAgICBtX2Jsb2NrLT5zZXRMb2dpY2FsSGVpZ2h0KGxhc3RG
bG9hdExvZ2ljYWxCb3R0b20pOwotICAgICAgICBtX2F2YWlsYWJsZVdpZHRoID0gbmV3TGluZVdp
ZHRoICsgbV9vdmVyaGFuZ1dpZHRoOwotICAgICAgICBtX2xlZnQgPSBuZXdMaW5lTGVmdDsKLSAg
ICAgICAgbV9yaWdodCA9IG5ld0xpbmVSaWdodDsKLSAgICB9Ci19Ci0KIGNsYXNzIExpbmVJbmZv
IHsKIHB1YmxpYzoKICAgICBMaW5lSW5mbygpCkBAIC0yOTI3LDcgKzI3MTUsNyBAQCBJbmxpbmVJ
dGVyYXRvciBSZW5kZXJCbG9jazo6TGluZUJyZWFrZXI6Om5leHRTZWdtZW50QnJlYWsoSW5saW5l
QmlkaVJlc29sdmVyJiByZQogICAgIGJvb2wgaW5jbHVkZUVuZFdpZHRoID0gdHJ1ZTsKICAgICBM
aW5lTWlkcG9pbnRTdGF0ZSYgbGluZU1pZHBvaW50U3RhdGUgPSByZXNvbHZlci5taWRwb2ludFN0
YXRlKCk7CiAKLSAgICBMaW5lV2lkdGggd2lkdGgobV9ibG9jaywgbGluZUluZm8uaXNGaXJzdExp
bmUoKSwgcmVxdWlyZXNJbmRlbnQobGluZUluZm8uaXNGaXJzdExpbmUoKSwgbGluZUluZm8ucHJl
dmlvdXNMaW5lQnJva2VDbGVhbmx5KCksIG1fYmxvY2stPnN0eWxlKCkpKTsKKyAgICBMaW5lV2lk
dGggd2lkdGgoKm1fYmxvY2ssIGxpbmVJbmZvLmlzRmlyc3RMaW5lKCksIHJlcXVpcmVzSW5kZW50
KGxpbmVJbmZvLmlzRmlyc3RMaW5lKCksIGxpbmVJbmZvLnByZXZpb3VzTGluZUJyb2tlQ2xlYW5s
eSgpLCBtX2Jsb2NrLT5zdHlsZSgpKSk7CiAKICAgICBza2lwTGVhZGluZ1doaXRlc3BhY2UocmVz
b2x2ZXIsIGxpbmVJbmZvLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCB3aWR0aCk7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>