<?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>232974</bug_id>
          
          <creation_ts>2021-11-10 17:12:18 -0800</creation_ts>
          <short_desc>Move image overlay code out of HTMLElement and into a separate helper file</short_desc>
          <delta_ts>2021-11-11 13:53:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>akeerthi</cc>
    
    <cc>annulen</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>mifenton</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1813850</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-11-10 17:12:18 -0800</bug_when>
    <thetext>Image overlay code is fairly self-contained, and it would give us better compartmentalization if it were in its own header/compilation unit (instead of drifting around in HTMLElement.cpp)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813882</commentid>
    <comment_count>1</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-11-10 18:29:33 -0800</bug_when>
    <thetext>The existing helpers on HTMLElement should belong in a separate header/compilation unit, instead of drifting around in HTMLElement.(h|cpp)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814054</commentid>
    <comment_count>2</comment_count>
      <attachid>443953</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-11-11 09:03:29 -0800</bug_when>
    <thetext>Created attachment 443953
For EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814066</commentid>
    <comment_count>3</comment_count>
      <attachid>443958</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-11-11 09:23:01 -0800</bug_when>
    <thetext>Created attachment 443958
Fix Windows build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814083</commentid>
    <comment_count>4</comment_count>
      <attachid>443958</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-11-11 10:09:40 -0800</bug_when>
    <thetext>Comment on attachment 443958
Fix Windows build

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        Move code for updating, querying, and removing image overlays out of HTMLElement.cpp and HTMLElement.h and into
&gt; +        separate helper files instead (ImageOverlay.h and ImageOverlay.cpp). Future patches in this area will extend the
&gt; +        functionality of these overlays, so this will help avoid code bloat inside HTMLElement when doing so.

Nice!

&gt; Source/WebCore/dom/ImageOverlay.cpp:168
&gt; +void updateWithTextRecognitionResult(HTMLElement&amp; element, const TextRecognitionResult&amp; result, CacheTextRecognitionResults cacheTextRecognitionResults)

Would be nice to chop up this mega-function into smaller pieces at some point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814084</commentid>
    <comment_count>5</comment_count>
      <attachid>443958</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-11-11 10:13:32 -0800</bug_when>
    <thetext>Comment on attachment 443958
Fix Windows build

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

&gt; Source/WebCore/dom/ImageOverlay.h:50
&gt; +WEBCORE_EXPORT bool hasImageOverlay(const HTMLElement&amp;);
&gt; +WEBCORE_EXPORT bool isImageOverlayDataDetectorResult(const HTMLElement&amp;);
&gt; +WEBCORE_EXPORT bool isInsideImageOverlay(const SimpleRange&amp;);
&gt; +WEBCORE_EXPORT bool isInsideImageOverlay(const Node&amp;);
&gt; +WEBCORE_EXPORT bool isImageOverlayText(const Node&amp;);
&gt; +WEBCORE_EXPORT bool isImageOverlayText(const Node*);
&gt; +void removeImageOverlaySoonIfNeeded(HTMLElement&amp;);
&gt; +IntRect containerRectForImageOverlay(HTMLElement&amp;);
&gt; +
&gt; +#if ENABLE(IMAGE_ANALYSIS)
&gt; +enum class CacheTextRecognitionResults : bool { No, Yes };
&gt; +WEBCORE_EXPORT void updateWithTextRecognitionResult(HTMLElement&amp;, const TextRecognitionResult&amp;, CacheTextRecognitionResults = CacheTextRecognitionResults::Yes);
&gt; +#endif

You could consider wrapping these functions into a namespace or a class (say &quot;ImageOverlay&quot;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814089</commentid>
    <comment_count>6</comment_count>
      <attachid>443958</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-11-11 10:19:42 -0800</bug_when>
    <thetext>Comment on attachment 443958
Fix Windows build

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

Thanks for the review!

&gt;&gt; Source/WebCore/dom/ImageOverlay.cpp:168
&gt;&gt; +void updateWithTextRecognitionResult(HTMLElement&amp; element, const TextRecognitionResult&amp; result, CacheTextRecognitionResults cacheTextRecognitionResults)
&gt; 
&gt; Would be nice to chop up this mega-function into smaller pieces at some point.

Good point! I&apos;ll do this refactoring as part of a future patch that&apos;ll augment this code.

&gt;&gt; Source/WebCore/dom/ImageOverlay.h:50
&gt;&gt; +#endif
&gt; 
&gt; You could consider wrapping these functions into a namespace or a class (say &quot;ImageOverlay&quot;).

Makes sense — I&apos;ll wrap these helpers in a `namespace ImageOverlay` in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814120</commentid>
    <comment_count>7</comment_count>
      <attachid>443975</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-11-11 11:04:31 -0800</bug_when>
    <thetext>Created attachment 443975
Add namespace, fix CMake builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814200</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-11-11 13:44:58 -0800</bug_when>
    <thetext>Tools/Scripts/svn-apply failed to apply attachment 443975 to trunk.
Please resolve the conflicts and upload a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814206</commentid>
    <comment_count>9</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-11-11 13:52:10 -0800</bug_when>
    <thetext>Committed r285655 (244153@main): &lt;https://commits.webkit.org/244153@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814210</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-11-11 13:53:31 -0800</bug_when>
    <thetext>&lt;rdar://problem/85314337&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443953</attachid>
            <date>2021-11-11 09:03:29 -0800</date>
            <delta_ts>2021-11-11 09:42:03 -0800</delta_ts>
            <desc>For EWS</desc>
            <filename>bug-232974-20211111090328.patch</filename>
            <type>text/plain</type>
            <size>88468</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDZjMGY5MzEwNGI5ODlk
MTIyMzdiM2IwZGEzNzBkYTQ1NTk2Y2M1Ni4uOGEzYzE1ZGY3ZGRkYTFlMjRhNjg1MTlmNmIzNTY4
ZjlkYjNlNDk5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDIxLTExLTExICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgaW1hZ2Ug
b3ZlcmxheSBjb2RlIG91dCBvZiBIVE1MRWxlbWVudCBhbmQgaW50byBhIHNlcGFyYXRlIGhlbHBl
ciBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MzI5NzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
b3ZlIGNvZGUgZm9yIHVwZGF0aW5nLCBxdWVyeWluZywgYW5kIHJlbW92aW5nIGltYWdlIG92ZXJs
YXlzIG91dCBvZiBIVE1MRWxlbWVudC5jcHAgYW5kIEhUTUxFbGVtZW50LmggYW5kIGludG8KKyAg
ICAgICAgc2VwYXJhdGUgaGVscGVyIGZpbGVzIGluc3RlYWQgKEltYWdlT3ZlcmxheS5oIGFuZCBJ
bWFnZU92ZXJsYXkuY3BwKS4gRnV0dXJlIHBhdGNoZXMgaW4gdGhpcyBhcmVhIHdpbGwgZXh0ZW5k
IHRoZQorICAgICAgICBmdW5jdGlvbmFsaXR5IG9mIHRoZXNlIG92ZXJsYXlzLCBzbyB0aGlzIHdp
bGwgaGVscCBhdm9pZCBjb2RlIGJsb2F0IGluc2lkZSBIVE1MRWxlbWVudCB3aGVuIGRvaW5nIHNv
LgorCisgICAgICAgIE5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIEhlYWRlcnMu
Y21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRvbS9JbWFnZU92ZXJsYXkuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmltYWdlT3ZlcmxheUVsZW1lbnRJZGVudGlmaWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmltYWdlT3ZlcmxheURhdGFEZXRlY3RvckNsYXNzTmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpoYXNJbWFnZU92ZXJsYXkpOgorICAgICAgICAoV2ViQ29yZTo6aW1hZ2VP
dmVybGF5SG9zdCk6CisgICAgICAgIChXZWJDb3JlOjppc0ltYWdlT3ZlcmxheURhdGFEZXRlY3Rv
clJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjppc0luc2lkZUltYWdlT3ZlcmxheSk6CisgICAg
ICAgIChXZWJDb3JlOjppc0ltYWdlT3ZlcmxheVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6cmVt
b3ZlSW1hZ2VPdmVybGF5U29vbklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5l
clJlY3RGb3JJbWFnZU92ZXJsYXkpOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlV2l0aFRleHRS
ZWNvZ25pdGlvblJlc3VsdCk6CisgICAgICAgICogZG9tL0ltYWdlT3ZlcmxheS5oOiBBZGRlZC4K
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnBlcmZvcm1DdXRPckNvcHkpOgorICAgICAgICAoV2ViQ29yZTo6c2NhbkZvclRlbGVwaG9uZU51
bWJlcnMpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKiBlZGl0
aW5nL1RleHRJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6Omhh
bmRsZVJlcGxhY2VkRWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjppbWFnZU92ZXJsYXlFbGVtZW50SWRlbnRpZmllcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjppbWFnZU92ZXJsYXlEYXRhRGV0ZWN0b3JDbGFzc05hbWUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6Omhhc0ltYWdlT3ZlcmxheSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjppbWFnZU92ZXJsYXlIb3N0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50Ojppc0ltYWdlT3ZlcmxheURhdGFE
ZXRlY3RvclJlc3VsdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxl
bWVudDo6aXNJbnNpZGVJbWFnZU92ZXJsYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEVsZW1lbnQ6OmlzSW1hZ2VPdmVybGF5VGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpIVE1MRWxlbWVudDo6cmVtb3ZlSW1hZ2VPdmVybGF5U29vbklmTmVlZGVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50Ojpjb250YWluZXJSZWN0Rm9yVGV4dFJl
Y29nbml0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50Ojp1cGRh
dGVXaXRoVGV4dFJlY29nbml0aW9uUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1sL0hU
TUxFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNlZWtXaXRoVG9sZXJhbmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBsYXlJbnRlcm5hbCk6CisgICAgICAgICog
cGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4
dE1lbnVDb250cm9sbGVyOjpwb3B1bGF0ZSk6CisgICAgICAgICogcGFnZS9EcmFnQ29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZHJhZ2dhYmxlRWxlbWVu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKToK
KyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub2Rl
VG9TZWxlY3RPbk1vdXNlRG93bkZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5k
bGVyOjpjYW5Nb3VzZURvd25TdGFydFNlbGVjdCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhh
bmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhh
bmRsZXI6OnVwZGF0ZVNlbGVjdGlvbkZvck1vdXNlRHJhZyk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudEhhbmRsZXI6OmhpdFRlc3RSZXN1bHRBdFBvaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAgKiBwYWdlL0ltYWdlT3Zl
cmxheUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VPdmVybGF5Q29udHJv
bGxlcjo6c2VsZWN0aW9uUXVhZHNEaWRDaGFuZ2UpOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp1cGRhdGVFbGVtZW50c1dpdGhUZXh0UmVjb2duaXRp
b25SZXN1bHRzKToKKyAgICAgICAgKiBwYWdlL21hYy9JbWFnZU92ZXJsYXlDb250cm9sbGVyTWFj
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VPdmVybGF5Q29udHJvbGxlcjo6dXBkYXRlRGF0
YURldGVjdG9ySGlnaGxpZ2h0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZU92ZXJsYXlDb250
cm9sbGVyOjplbGVtZW50VW5kZXJNb3VzZURpZENoYW5nZSk6CisgICAgICAgICogcmVuZGVyaW5n
L0hpdFRlc3RSZXN1bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6bm9k
ZUZvckltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Ojph
ZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0Q29tbW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OlJlbmRlcklt
YWdlKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnRlcm5hbHM6Omluc3RhbGxJbWFnZU92ZXJsYXkpOgorCiAyMDIxLTExLTExICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBJbnRyb2R1Y2UgU2VsZWN0b3JN
YXRjaGluZ1N0YXRlIGFuZCBtb3ZlIFNlbGVjdG9yRmlsdGVyIHRoZXJlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRl
MTUxOTZkOGNmZGQ3NDAyNGJhN2FkZjZjZmQ1ODdlY2Q1ZGQ0ODIuLjAzNmZiNjIzOGIzMzlhY2Q4
ZGFkYTAwYzQ4YzM2NjVhZmVkODE0ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMjEt
MTEtMTEgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAg
TW92ZSBpbWFnZSBvdmVybGF5IGNvZGUgb3V0IG9mIEhUTUxFbGVtZW50IGFuZCBpbnRvIGEgc2Vw
YXJhdGUgaGVscGVyIGZpbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzMjk3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFNlZSBXZWJDb3JlL0NoYW5nZUxvZyBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpGaW5kQ29udHJvbGxlcjo6dXBkYXRlRmluZEluZGljYXRvcik6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjplZGl0
b3JTdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmZpbmREYXRhRGV0ZWN0
aW9uUmVzdWx0RWxlbWVudEluSW1hZ2VPdmVybGF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6cmVxdWVzdFRleHRSZWNvZ25pdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnVw
ZGF0ZVdpdGhUZXh0UmVjb2duaXRpb25SZXN1bHQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvRmluZENvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXZWJLaXQ6OmZpbmRUZXh0
SW5kaWNhdG9yT3B0aW9ucyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQ
YWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjppbnNpZGVJbWFnZU92ZXJsYXkpOgorICAgICAg
ICAoV2ViS2l0OjpyYW5nZUZvclBvaW50SW5Sb290Vmlld0Nvb3JkaW5hdGVzKToKKyAgICAgICAg
KFdlYktpdDo6aG9zdFZpZGVvRWxlbWVudElnbm9yaW5nSW1hZ2VPdmVybGF5KToKKyAgICAgICAg
KFdlYktpdDo6ZWxlbWVudFBvc2l0aW9uSW5mb3JtYXRpb24pOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
cGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3RBdExvY2F0aW9uKToKKwogMjAyMS0xMS0xMCAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFdlIHNob3VsZCBub3Qg
a2lsbCBhbGwgV2ViQ29udGVudCBwcm9jZXNzZXMgd2hlbmV2ZXIgdGhlIFdlYkF1dGhuIHByb2Nl
c3MgY3Jhc2hlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggMzYzNWZjNWJjZTllYWQ0OTBjOGQ5ODU0
ZmU4ZTVmZGUyOTY3NGQyMC4uMWNlMjUyMWU0ZWYyMjJjNjk1YWQxZGNiZGFmNDU0YjhjNmQwNDYx
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC01MDcsNiArNTA3LDcgQEAgc2V0KFdlYkNvcmVfUFJJ
VkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIGRvbS9GcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Np
b24uaAogICAgIGRvbS9GdWxsc2NyZWVuTWFuYWdlci5oCiAgICAgZG9tL0dDUmVhY2hhYmxlUmVm
LmgKKyAgICBkb20vSW1hZ2VPdmVybGF5LmgKICAgICBkb20vSW5saW5lU3R5bGVTaGVldE93bmVy
LmgKICAgICBkb20vS2V5Ym9hcmRFdmVudC5oCiAgICAgZG9tL0xpdmVOb2RlTGlzdC5oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CmluZGV4IDhhMTE0YTEyMzhkNGY2ODE4ODQ2ZjIxYzJkYjBhYzAzMDNiMWViMjkuLmVh
YmNjMDBmMDMzNjNjMmY4ZjFmYjZmOTZmNWVmNjRmMjU1MWUyYzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBA
IC05NTksNiArOTU5LDcgQEAgZG9tL0lkVGFyZ2V0T2JzZXJ2ZXIuY3BwCiBkb20vSWRUYXJnZXRP
YnNlcnZlclJlZ2lzdHJ5LmNwcAogZG9tL0lkbGVDYWxsYmFja0NvbnRyb2xsZXIuY3BwCiBkb20v
SWRsZURlYWRsaW5lLmNwcAorZG9tL0ltYWdlT3ZlcmxheS5jcHAKIGRvbS9JbmxpbmVDbGFzc2lj
U2NyaXB0LmNwcAogZG9tL0lubGluZVN0eWxlU2hlZXRPd25lci5jcHAKIGRvbS9JbnB1dEV2ZW50
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDY5ZDNmZDljOGEyZmNhNjExNDk3ODg5MGY4MWJlN2NmN2RmMzU4NGEuLjkxNzI5
YzZkMGU2NDZmMDIzNWY5MTc0ZjQ0Yjk4NmNjMTY1MGRiNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU0NDAsNiArNTQ0MCw3
IEBACiAJCUY0NTc3NUNFMjQxNDM3RDUwMDJERjFBMCAvKiBJbmxpbmVQYXRoRGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ1Nzc1Q0QyNDE0MzdE
NTAwMkRGMUEwIC8qIElubGluZVBhdGhEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ2NzI5MjgxRTBERTY4NTAwQUNDM0Q4IC8qIFNjcm9s
bFNuYXBPZmZzZXRzSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjQ2NzI5MjUxRTBERTVBQjAwQUNDM0Q4IC8qIFNjcm9sbFNuYXBPZmZzZXRzSW5m
by5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0
NkM0NDdFMjM0NjU0NTQwMDM5QTc5RCAvKiBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDZDNDQ3
QzIzNDY1NDU0MDAzOUE3OUQgLyogQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5oICov
OyB9OworCQlGNDZENTM4NjI3M0Q3RTQ2MDAwOUZBODAgLyogSW1hZ2VPdmVybGF5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDZENTM4NTI3M0Q3RTNG
MDAwOUZBODAgLyogSW1hZ2VPdmVybGF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ3Mzg0NTgyNURERTlGQjAwNkRFOEREIC8qIERhdGFPd25l
clR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0
NzM4NDU3MjVEREU5RkIwMDZERThERCAvKiBEYXRhT3duZXJUeXBlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ3QTA5RDEyMEE5M0E5NzAwMjQw
RkFFIC8qIERpc2FibGVkQWRhcHRhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY0N0EwOUNGMjBBOTM5RjYwMDI0MEZBRSAvKiBEaXNhYmxlZEFk
YXB0YXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRjQ3QTVFM0UxOTVCOEM4QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ3QTVFM0Ix
OTVCOEM4QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNzIzMSw2ICsxNzIzMiw4IEBA
CiAJCUY0NkM0NDdEMjM0NjU0NTQwMDM5QTc5RCAvKiBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRh
U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFT
b3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDZDNDQ4MDIzNDY1NDdB
MDAzOUE3OUQgLyogQ2xpcGJvYXJkSXRlbVBhc3RlYm9hcmREYXRhU291cmNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENsaXBib2FyZEl0ZW1QYXN0ZWJvYXJkRGF0YVNvdXJjZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGNDZDNDQ4MTIzNDY1NDdBMDAzOUE3OUQgLyogQ2xpcGJvYXJkSXRl
bVBhc3RlYm9hcmREYXRhU291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsaXBib2FyZEl0
ZW1QYXN0ZWJvYXJkRGF0YVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUY0NkQ1Mzg0MjczRDdFM0UwMDA5RkE4MCAvKiBJbWFnZU92ZXJsYXkuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW1hZ2VPdmVybGF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RjQ2RDUzODUyNzNEN0UzRjAwMDlGQTgwIC8qIEltYWdlT3ZlcmxheS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbWFnZU92ZXJsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ3Mzg0NTcy
NURERTlGQjAwNkRFOEREIC8qIERhdGFPd25lclR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YU93
bmVyVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDdBMDlDRjIwQTkzOUY2
MDAyNDBGQUUgLyogRGlzYWJsZWRBZGFwdGF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNhYmxl
ZEFkYXB0YXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0N0EwOUQ0MjBB
OUREMDQwMDI0MEZBRSAvKiBEaXNhYmxlZEFkYXB0YXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IERpc2FibGVkQWRhcHRhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTg5MjIsMTEgKzE4OTI1LDExIEBACiAJCTFBNTY5Q0M0MEQ3RTJCNjAwMDdDMzk4MyAvKiBi
cmlkZ2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTFB
NTY5Q0UyMEQ3RTJCODIwMDdDMzk4MyAvKiBvYmpjICovLAogCQkJCTU5OUU3NThGMTEwNTVBMUYw
MEQ5MDRGQSAvKiBCcmlkZ2UuaCAqLywKIAkJCQkxQTcxRDU3OTBGMzM4MTkwMDBGOUNFNEUgLyog
SWRlbnRpZmllclJlcC5jcHAgKi8sCiAJCQkJMUE3MUQ1N0EwRjMzODE5MDAwRjlDRTRFIC8qIElk
ZW50aWZpZXJSZXAuaCAqLywKIAkJCQk1OUI1OTc3MTExMDg2NTU2MDA3MTU5RTggLyoganNjICov
LAorCQkJCTFBNTY5Q0UyMEQ3RTJCODIwMDdDMzk4MyAvKiBvYmpjICovLAogCQkJCTFBNTY5Q0VG
MEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX2FycmF5LmNwcCAqLywKIAkJCQkxQTU2OUNGMDBE
N0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9hcnJheS5oICovLAogCQkJCTFBNTY5Q0YxMEQ3RTJC
ODIwMDdDMzk4MyAvKiBydW50aW1lX21ldGhvZC5jcHAgKi8sCkBAIC0zMTM3Nyw2ICszMTM4MCw4
IEBACiAJCQkJQzNDRjE3QTMxNUIwMDYzRjAwMjc2RDM5IC8qIElkVGFyZ2V0T2JzZXJ2ZXJSZWdp
c3RyeS5oICovLAogCQkJCThBQjRCQzc2MTI2RkRCNzEwMERFQjcyNyAvKiBJZ25vcmVEZXN0cnVj
dGl2ZVdyaXRlQ291bnRJbmNyZW1lbnRlci5oICovLAogCQkJCTQ2NzMwMjAxMUM0RUZFNjYwMEJD
QjM1NyAvKiBJZ25vcmVPcGVuc0R1cmluZ1VubG9hZENvdW50SW5jcmVtZW50ZXIuaCAqLywKKwkJ
CQlGNDZENTM4NDI3M0Q3RTNFMDAwOUZBODAgLyogSW1hZ2VPdmVybGF5LmNwcCAqLywKKwkJCQlG
NDZENTM4NTI3M0Q3RTNGMDAwOUZBODAgLyogSW1hZ2VPdmVybGF5LmggKi8sCiAJCQkJRTMwNTky
NjExRTI3QTM4QzAwRDU3Qzk4IC8qIElubGluZUNsYXNzaWNTY3JpcHQuY3BwICovLAogCQkJCUUz
MDU5MjYyMUUyN0EzOEMwMEQ1N0M5OCAvKiBJbmxpbmVDbGFzc2ljU2NyaXB0LmggKi8sCiAJCQkJ
QUE0QzNBNzQwQjJCMTY3OTAwMjMzNEEyIC8qIElubGluZVN0eWxlU2hlZXRPd25lci5jcHAgKi8s
CkBAIC0zMzgwMCw2ICszMzgwNSw3IEBACiAJCQkJMDg5NTgyNTYwRTg1N0E3RTAwRjgyQzgzIC8q
IEltYWdlTG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdGNDRBODBCOUUzMjRFMDBBOUQw
ODEgLyogSW1hZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ1QTU5MzExNTI1MjVE
MDAwMzZFRTUxIC8qIEltYWdlT3JpZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUY0NkQ1
Mzg2MjczRDdFNDYwMDA5RkE4MCAvKiBJbWFnZU92ZXJsYXkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUY0ODI0MzRCMjYwQzMzMDYwMDIyNDk3QyAvKiBJbWFnZU92ZXJsYXlDb250cm9sbGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGNDQ2RURFMTI2NURCMUU1MDAzMURBOEYgLyogSW1hZ2VPdmVybGF5
RGF0YURldGVjdGlvblJlc3VsdElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcyMjgz
RjBFMjMwQjI2OEMwMEY1RDgyOCAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oIGluIEhlYWRlcnMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vSW1hZ2VPdmVybGF5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9JbWFnZU92ZXJsYXkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMwNjQ4M2YxYjI4
Mzk1MTAwOGVhNmU3NDMxODRmZTdjYWNmZjk3MTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vSW1hZ2VPdmVybGF5LmNwcApAQCAtMCwwICsxLDQ1NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZU92ZXJsYXkuaCIKKworI2lu
Y2x1ZGUgIkRPTVRva2VuTGlzdC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAi
RWxlbWVudENoaWxkSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNs
dWRlICJFdmVudExvb3AuaCIKKyNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgorI2luY2x1
ZGUgIkhUTUxCckVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRGl2RWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCisj
aW5jbHVkZSAiTWVkaWFDb250cm9sc0hvc3QuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVk
ZSAiUXVpcmtzLmgiCisjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKKyNpbmNsdWRlICJTaGFkb3dS
b290LmgiCisjaW5jbHVkZSAiU2ltcGxlUmFuZ2UuaCIKKyNpbmNsdWRlICJUZXh0LmgiCisjaW5j
bHVkZSAiVGV4dFJlY29nbml0aW9uUmVzdWx0LmgiCisjaW5jbHVkZSAiVXNlckFnZW50U3R5bGVT
aGVldHMuaCIKKyNpbmNsdWRlIDx3dGYvUmFuZ2UuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KKworI2lmIEVOQUJMRShEQVRBX0RF
VEVDVElPTikKKyNpbmNsdWRlICJEYXRhRGV0ZWN0aW9uLmgiCisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgaW1hZ2VPdmVybGF5RWxlbWVu
dElkZW50aWZpZXIoKQoreworICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgQXRvbVN0cmluZz4gaWRlbnRpZmllcigiaW1hZ2Utb3ZlcmxheSIsIEF0b21TdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICByZXR1cm4gaWRlbnRpZmllcjsKK30KKworc3RhdGlj
IGNvbnN0IEF0b21TdHJpbmcmIGltYWdlT3ZlcmxheURhdGFEZXRlY3RvckNsYXNzTmFtZSgpCit7
CisgICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBj
bGFzc05hbWUoImltYWdlLW92ZXJsYXktZGF0YS1kZXRlY3Rvci1yZXN1bHQiLCBBdG9tU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgcmV0dXJuIGNsYXNzTmFtZTsKK30KKworYm9v
bCBoYXNJbWFnZU92ZXJsYXkoY29uc3QgSFRNTEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgYXV0
byBzaGFkb3dSb290ID0gZWxlbWVudC5zaGFkb3dSb290KCk7CisgICAgaWYgKExJS0VMWSghc2hh
ZG93Um9vdCB8fCBzaGFkb3dSb290LT5tb2RlKCkgIT0gU2hhZG93Um9vdE1vZGU6OlVzZXJBZ2Vu
dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBzaGFkb3dSb290LT5oYXNF
bGVtZW50V2l0aElkKCppbWFnZU92ZXJsYXlFbGVtZW50SWRlbnRpZmllcigpLmltcGwoKSk7Cit9
CisKK3N0YXRpYyBSZWZQdHI8SFRNTEVsZW1lbnQ+IGltYWdlT3ZlcmxheUhvc3QoY29uc3QgTm9k
ZSYgbm9kZSkKK3sKKyAgICBhdXRvIGhvc3QgPSBub2RlLnNoYWRvd0hvc3QoKTsKKyAgICBpZiAo
IWlzPEhUTUxFbGVtZW50Pihob3N0KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBS
ZWZQdHIgZWxlbWVudCB7ICZkb3duY2FzdDxIVE1MRWxlbWVudD4oKmhvc3QpIH07CisgICAgcmV0
dXJuIGhhc0ltYWdlT3ZlcmxheSgqZWxlbWVudCkgPyBlbGVtZW50IDogbnVsbHB0cjsKK30KKwor
Ym9vbCBpc0ltYWdlT3ZlcmxheURhdGFEZXRlY3RvclJlc3VsdChjb25zdCBIVE1MRWxlbWVudCYg
ZWxlbWVudCkKK3sKKyAgICByZXR1cm4gaW1hZ2VPdmVybGF5SG9zdChlbGVtZW50KSAmJiBlbGVt
ZW50Lmhhc0NsYXNzKCkgJiYgZWxlbWVudC5jbGFzc05hbWVzKCkuY29udGFpbnMoaW1hZ2VPdmVy
bGF5RGF0YURldGVjdG9yQ2xhc3NOYW1lKCkpOworfQorCitib29sIGlzSW5zaWRlSW1hZ2VPdmVy
bGF5KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKK3sKKyAgICBSZWZQdHIgY29tbW9uQW5jZXN0
b3IgPSBjb21tb25JbmNsdXNpdmVBbmNlc3RvcjxDb21wb3NlZFRyZWU+KHJhbmdlKTsKKyAgICBp
ZiAoIWNvbW1vbkFuY2VzdG9yKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
aXNJbnNpZGVJbWFnZU92ZXJsYXkoKmNvbW1vbkFuY2VzdG9yKTsKK30KKworYm9vbCBpc0luc2lk
ZUltYWdlT3ZlcmxheShjb25zdCBOb2RlJiBub2RlKQoreworICAgIGF1dG8gaG9zdCA9IGltYWdl
T3ZlcmxheUhvc3Qobm9kZSk7CisgICAgaWYgKCFob3N0KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gaG9zdC0+dXNlckFnZW50U2hhZG93Um9vdCgpLT5jb250YWlucyhub2Rl
KTsKK30KKworYm9vbCBpc0ltYWdlT3ZlcmxheVRleHQoY29uc3QgTm9kZSogbm9kZSkKK3sKKyAg
ICByZXR1cm4gbm9kZSAmJiBpc0ltYWdlT3ZlcmxheVRleHQoKm5vZGUpOworfQorCitib29sIGlz
SW1hZ2VPdmVybGF5VGV4dChjb25zdCBOb2RlJiBub2RlKQoreworICAgIGF1dG8gaG9zdCA9IGlt
YWdlT3ZlcmxheUhvc3Qobm9kZSk7CisgICAgaWYgKCFob3N0KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoUmVmUHRyIG92ZXJsYXkgPSBzdGF0aWNfY2FzdDxUcmVlU2NvcGUmPigq
aG9zdC0+dXNlckFnZW50U2hhZG93Um9vdCgpKS5nZXRFbGVtZW50QnlJZChpbWFnZU92ZXJsYXlF
bGVtZW50SWRlbnRpZmllcigpKSkKKyAgICAgICAgcmV0dXJuIG5vZGUuaXNEZXNjZW5kYW50T2Yo
Km92ZXJsYXkpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIHJlbW92ZUltYWdlT3Zl
cmxheVNvb25JZk5lZWRlZChIVE1MRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICBpZiAoIWhhc0lt
YWdlT3ZlcmxheShlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZWxlbWVudC5kb2N1
bWVudCgpLmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpJbnRlcm5hbEFzeW5jVGFz
aywgW3dlYWtFbGVtZW50ID0gV2Vha1B0ciB7IGVsZW1lbnQgfV0geworICAgICAgICBSZWZQdHIg
cHJvdGVjdGVkRWxlbWVudCA9IHdlYWtFbGVtZW50LmdldCgpOworICAgICAgICBpZiAoIXByb3Rl
Y3RlZEVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmVmUHRyIHNoYWRv
d1Jvb3QgPSBwcm90ZWN0ZWRFbGVtZW50LT51c2VyQWdlbnRTaGFkb3dSb290KCk7CisgICAgICAg
IGlmICghc2hhZG93Um9vdCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoUmVm
UHRyIG92ZXJsYXkgPSBzdGF0aWNfY2FzdDxUcmVlU2NvcGUmPigqc2hhZG93Um9vdCkuZ2V0RWxl
bWVudEJ5SWQoaW1hZ2VPdmVybGF5RWxlbWVudElkZW50aWZpZXIoKSkpCisgICAgICAgICAgICBv
dmVybGF5LT5yZW1vdmUoKTsKKworI2lmIEVOQUJMRShJTUFHRV9BTkFMWVNJUykKKyAgICAgICAg
aWYgKGF1dG8gcGFnZSA9IHByb3RlY3RlZEVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKQorICAg
ICAgICAgICAgcGFnZS0+cmVzZXRUZXh0UmVjb2duaXRpb25SZXN1bHQoKnByb3RlY3RlZEVsZW1l
bnQpOworI2VuZGlmCisgICAgfSk7Cit9CisKKyNpZiBFTkFCTEUoSU1BR0VfQU5BTFlTSVMpCisK
K0ludFJlY3QgY29udGFpbmVyUmVjdEZvckltYWdlT3ZlcmxheShIVE1MRWxlbWVudCYgZWxlbWVu
dCkKK3sKKyAgICBhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKKyAgICBpZiAo
IWlzPFJlbmRlckltYWdlPihyZW5kZXJlcikpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBp
ZiAoIXJlbmRlcmVyLT5vcGFjaXR5KCkpCisgICAgICAgIHJldHVybiB7IDAsIDAsIGVsZW1lbnQu
b2Zmc2V0V2lkdGgoKSwgZWxlbWVudC5vZmZzZXRIZWlnaHQoKSB9OworCisgICAgcmV0dXJuIGVu
Y2xvc2luZ0ludFJlY3QoZG93bmNhc3Q8UmVuZGVySW1hZ2U+KCpyZW5kZXJlcikucmVwbGFjZWRD
b250ZW50UmVjdCgpKTsKK30KKwordm9pZCB1cGRhdGVXaXRoVGV4dFJlY29nbml0aW9uUmVzdWx0
KEhUTUxFbGVtZW50JiBlbGVtZW50LCBjb25zdCBUZXh0UmVjb2duaXRpb25SZXN1bHQmIHJlc3Vs
dCwgQ2FjaGVUZXh0UmVjb2duaXRpb25SZXN1bHRzIGNhY2hlVGV4dFJlY29nbml0aW9uUmVzdWx0
cykKK3sKKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJp
bmc+IGltYWdlT3ZlcmxheUxpbmVDbGFzcygiaW1hZ2Utb3ZlcmxheS1saW5lIiwgQXRvbVN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0
cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gaW1hZ2VPdmVybGF5VGV4dENsYXNzKCJpbWFnZS1vdmVy
bGF5LXRleHQiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisKKyAgICBzdHJ1
Y3QgVGV4dFJlY29nbml0aW9uTGluZUVsZW1lbnRzIHsKKyAgICAgICAgUmVmPEhUTUxEaXZFbGVt
ZW50PiBsaW5lOworICAgICAgICBWZWN0b3I8UmVmPEhUTUxFbGVtZW50Pj4gY2hpbGRyZW47Cisg
ICAgfTsKKworICAgIHN0cnVjdCBUZXh0UmVjb2duaXRpb25FbGVtZW50cyB7CisgICAgICAgIFJl
ZlB0cjxIVE1MRGl2RWxlbWVudD4gcm9vdDsKKyAgICAgICAgVmVjdG9yPFRleHRSZWNvZ25pdGlv
bkxpbmVFbGVtZW50cz4gbGluZXM7CisgICAgICAgIFZlY3RvcjxSZWY8SFRNTERpdkVsZW1lbnQ+
PiBkYXRhRGV0ZWN0b3JzOworICAgIH07CisKKyAgICBib29sIGhhZEV4aXN0aW5nVGV4dFJlY29n
bml0aW9uRWxlbWVudHMgPSBmYWxzZTsKKyAgICBUZXh0UmVjb2duaXRpb25FbGVtZW50cyB0ZXh0
UmVjb2duaXRpb25FbGVtZW50czsKKyAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IG1lZGlhQ29udHJv
bHNDb250YWluZXI7CisgICAgaWYgKFJlZlB0ciBzaGFkb3dSb290ID0gZWxlbWVudC5zaGFkb3dS
b290KCkpIHsKKyNpZiBFTkFCTEUoTU9ERVJOX01FRElBX0NPTlRST0xTKQorICAgICAgICBpZiAo
aXM8SFRNTE1lZGlhRWxlbWVudD4oZWxlbWVudCkpIHsKKyAgICAgICAgICAgIGlmIChSZWZQdHIg
Y29udHJvbHNIb3N0ID0gZG93bmNhc3Q8SFRNTE1lZGlhRWxlbWVudD4oZWxlbWVudCkubWVkaWFD
b250cm9sc0hvc3QoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGNvbnRhaW5lckNsYXNzID0g
Y29udHJvbHNIb3N0LT5tZWRpYUNvbnRyb2xzQ29udGFpbmVyQ2xhc3NOYW1lKCk7CisgICAgICAg
ICAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPEhUTUxEaXZFbGVtZW50
Pigqc2hhZG93Um9vdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmhhc0NsYXNz
KCkgJiYgY2hpbGQuY2xhc3NOYW1lcygpLmNvbnRhaW5zKGNvbnRhaW5lckNsYXNzKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgbWVkaWFDb250cm9sc0NvbnRhaW5lciA9ICZjaGlsZDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYKKyAgICAgICAg
aWYgKGhhc0ltYWdlT3ZlcmxheShlbGVtZW50KSkgeworICAgICAgICAgICAgUmVmUHRyPENvbnRh
aW5lck5vZGU+IGNvbnRhaW5lckZvckltYWdlT3ZlcmxheTsKKyAgICAgICAgICAgIGlmIChtZWRp
YUNvbnRyb2xzQ29udGFpbmVyKQorICAgICAgICAgICAgICAgIGNvbnRhaW5lckZvckltYWdlT3Zl
cmxheSA9IG1lZGlhQ29udHJvbHNDb250YWluZXI7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgY29udGFpbmVyRm9ySW1hZ2VPdmVybGF5ID0gc2hhZG93Um9vdDsKKyAgICAgICAg
ICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxIVE1MRGl2RWxlbWVudD4oKmNv
bnRhaW5lckZvckltYWdlT3ZlcmxheSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZ2V0
SWRBdHRyaWJ1dGUoKSA9PSBpbWFnZU92ZXJsYXlFbGVtZW50SWRlbnRpZmllcigpKSB7CisgICAg
ICAgICAgICAgICAgICAgIHRleHRSZWNvZ25pdGlvbkVsZW1lbnRzLnJvb3QgPSAmY2hpbGQ7Cisg
ICAgICAgICAgICAgICAgICAgIGhhZEV4aXN0aW5nVGV4dFJlY29nbml0aW9uRWxlbWVudHMgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodGV4dFJlY29nbml0aW9u
RWxlbWVudHMucm9vdCkgeworICAgICAgICBmb3IgKGF1dG8mIGxpbmVPckRhdGFEZXRlY3RvciA6
IGNoaWxkcmVuT2ZUeXBlPEhUTUxEaXZFbGVtZW50PigqdGV4dFJlY29nbml0aW9uRWxlbWVudHMu
cm9vdCkpIHsKKyAgICAgICAgICAgIGlmICghbGluZU9yRGF0YURldGVjdG9yLmhhc0NsYXNzKCkp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmIChsaW5lT3JEYXRh
RGV0ZWN0b3IuY2xhc3NMaXN0KCkuY29udGFpbnMoaW1hZ2VPdmVybGF5TGluZUNsYXNzKSkgewor
ICAgICAgICAgICAgICAgIFRleHRSZWNvZ25pdGlvbkxpbmVFbGVtZW50cyBsaW5lRWxlbWVudHMg
eyBsaW5lT3JEYXRhRGV0ZWN0b3IsIHsgfSB9OworICAgICAgICAgICAgICAgIGZvciAoYXV0byYg
dGV4dCA6IGNoaWxkcmVuT2ZUeXBlPEhUTUxEaXZFbGVtZW50PihsaW5lT3JEYXRhRGV0ZWN0b3Ip
KQorICAgICAgICAgICAgICAgICAgICBsaW5lRWxlbWVudHMuY2hpbGRyZW4uYXBwZW5kKHRleHQp
OworICAgICAgICAgICAgICAgIHRleHRSZWNvZ25pdGlvbkVsZW1lbnRzLmxpbmVzLmFwcGVuZChX
VEZNb3ZlKGxpbmVFbGVtZW50cykpOworICAgICAgICAgICAgfSBlbHNlIGlmIChsaW5lT3JEYXRh
RGV0ZWN0b3IuY2xhc3NMaXN0KCkuY29udGFpbnMoaW1hZ2VPdmVybGF5RGF0YURldGVjdG9yQ2xh
c3NOYW1lKCkpKQorICAgICAgICAgICAgICAgIHRleHRSZWNvZ25pdGlvbkVsZW1lbnRzLmRhdGFE
ZXRlY3RvcnMuYXBwZW5kKGxpbmVPckRhdGFEZXRlY3Rvcik7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIGNhblVzZUV4aXN0aW5nVGV4dFJlY29nbml0aW9uRWxlbWVudHMgPSAoWyZdIHsKKyAg
ICAgICAgICAgIGlmIChyZXN1bHQuZGF0YURldGVjdG9ycy5zaXplKCkgIT0gdGV4dFJlY29nbml0
aW9uRWxlbWVudHMuZGF0YURldGVjdG9ycy5zaXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgICAgICBpZiAocmVzdWx0LmxpbmVzLnNpemUoKSAhPSB0ZXh0UmVj
b2duaXRpb25FbGVtZW50cy5saW5lcy5zaXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgICAgICBmb3IgKHNpemVfdCBsaW5lSW5kZXggPSAwOyBsaW5lSW5kZXgg
PCByZXN1bHQubGluZXMuc2l6ZSgpOyArK2xpbmVJbmRleCkgeworICAgICAgICAgICAgICAgIGF1
dG8mIGNoaWxkUmVzdWx0cyA9IHJlc3VsdC5saW5lc1tsaW5lSW5kZXhdLmNoaWxkcmVuOworICAg
ICAgICAgICAgICAgIGF1dG8mIGNoaWxkVGV4dEVsZW1lbnRzID0gdGV4dFJlY29nbml0aW9uRWxl
bWVudHMubGluZXNbbGluZUluZGV4XS5jaGlsZHJlbjsKKyAgICAgICAgICAgICAgICBpZiAoY2hp
bGRSZXN1bHRzLnNpemUoKSAhPSBjaGlsZFRleHRFbGVtZW50cy5zaXplKCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGNo
aWxkSW5kZXggPSAwOyBjaGlsZEluZGV4IDwgY2hpbGRSZXN1bHRzLnNpemUoKTsgKytjaGlsZElu
ZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZFJlc3VsdHNbY2hpbGRJbmRleF0u
dGV4dCAhPSBjaGlsZFRleHRFbGVtZW50c1tjaGlsZEluZGV4XS0+dGV4dENvbnRlbnQoKS5zdHJp
cFdoaXRlU3BhY2UoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9KSgpOworCisgICAgICAgIGlmICghY2FuVXNlRXhpc3RpbmdUZXh0UmVjb2du
aXRpb25FbGVtZW50cykgeworICAgICAgICAgICAgdGV4dFJlY29nbml0aW9uRWxlbWVudHMucm9v
dC0+cmVtb3ZlKCk7CisgICAgICAgICAgICB0ZXh0UmVjb2duaXRpb25FbGVtZW50cyA9IHsgfTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChyZXN1bHQuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBSZWYgZG9jdW1lbnQgPSBlbGVtZW50LmRvY3VtZW50KCk7CisgICAgUmVm
IHNoYWRvd1Jvb3QgPSBlbGVtZW50LmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKKyAgICBp
ZiAoIXRleHRSZWNvZ25pdGlvbkVsZW1lbnRzLnJvb3QpIHsKKyAgICAgICAgYXV0byByb290Q29u
dGFpbmVyID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudC5nZXQoKSk7CisgICAgICAg
IHJvb3RDb250YWluZXItPnNldElkQXR0cmlidXRlKGltYWdlT3ZlcmxheUVsZW1lbnRJZGVudGlm
aWVyKCkpOworICAgICAgICBpZiAoZG9jdW1lbnQtPmlzSW1hZ2VEb2N1bWVudCgpKQorICAgICAg
ICAgICAgcm9vdENvbnRhaW5lci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdl
YmtpdFVzZXJTZWxlY3QsIENTU1ZhbHVlVGV4dCk7CisKKyAgICAgICAgaWYgKG1lZGlhQ29udHJv
bHNDb250YWluZXIpCisgICAgICAgICAgICBtZWRpYUNvbnRyb2xzQ29udGFpbmVyLT5hcHBlbmRD
aGlsZChyb290Q29udGFpbmVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2hhZG93Um9v
dC0+YXBwZW5kQ2hpbGQocm9vdENvbnRhaW5lcik7CisgICAgICAgIHRleHRSZWNvZ25pdGlvbkVs
ZW1lbnRzLnJvb3QgPSByb290Q29udGFpbmVyLmNvcHlSZWYoKTsKKyAgICAgICAgdGV4dFJlY29n
bml0aW9uRWxlbWVudHMubGluZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShyZXN1bHQubGluZXMu
c2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBsaW5lIDogcmVzdWx0LmxpbmVzKSB7CisgICAg
ICAgICAgICBhdXRvIGxpbmVDb250YWluZXIgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3Vt
ZW50LmdldCgpKTsKKyAgICAgICAgICAgIGxpbmVDb250YWluZXItPmNsYXNzTGlzdCgpLmFkZChp
bWFnZU92ZXJsYXlMaW5lQ2xhc3MpOworICAgICAgICAgICAgcm9vdENvbnRhaW5lci0+YXBwZW5k
Q2hpbGQobGluZUNvbnRhaW5lcik7CisgICAgICAgICAgICBUZXh0UmVjb2duaXRpb25MaW5lRWxl
bWVudHMgbGluZUVsZW1lbnRzIHsgbGluZUNvbnRhaW5lciwgeyB9IH07CisgICAgICAgICAgICBs
aW5lRWxlbWVudHMuY2hpbGRyZW4ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsaW5lLmNoaWxkcmVu
LnNpemUoKSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBjaGlsZEluZGV4ID0gMDsgY2hpbGRJ
bmRleCA8IGxpbmUuY2hpbGRyZW4uc2l6ZSgpOyArK2NoaWxkSW5kZXgpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvJiBjaGlsZCA9IGxpbmUuY2hpbGRyZW5bY2hpbGRJbmRleF07CisgICAgICAgICAg
ICAgICAgYXV0byB0ZXh0Q29udGFpbmVyID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVu
dC5nZXQoKSk7CisgICAgICAgICAgICAgICAgdGV4dENvbnRhaW5lci0+Y2xhc3NMaXN0KCkuYWRk
KGltYWdlT3ZlcmxheVRleHRDbGFzcyk7CisgICAgICAgICAgICAgICAgbGluZUNvbnRhaW5lci0+
YXBwZW5kQ2hpbGQodGV4dENvbnRhaW5lcik7CisgICAgICAgICAgICAgICAgdGV4dENvbnRhaW5l
ci0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKGRvY3VtZW50LmdldCgpLCBjaGlsZC5oYXNMZWFk
aW5nV2hpdGVzcGFjZSA/IG1ha2VTdHJpbmcoJ1xuJywgY2hpbGQudGV4dCkgOiBjaGlsZC50ZXh0
KSk7CisgICAgICAgICAgICAgICAgbGluZUVsZW1lbnRzLmNoaWxkcmVuLnVuY2hlY2tlZEFwcGVu
ZChXVEZNb3ZlKHRleHRDb250YWluZXIpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
bGluZUNvbnRhaW5lci0+YXBwZW5kQ2hpbGQoSFRNTEJSRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50
LmdldCgpKSk7CisgICAgICAgICAgICB0ZXh0UmVjb2duaXRpb25FbGVtZW50cy5saW5lcy51bmNo
ZWNrZWRBcHBlbmQoV1RGTW92ZShsaW5lRWxlbWVudHMpKTsKKyAgICAgICAgfQorCisjaWYgRU5B
QkxFKERBVEFfREVURUNUSU9OKQorICAgICAgICB0ZXh0UmVjb2duaXRpb25FbGVtZW50cy5kYXRh
RGV0ZWN0b3JzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocmVzdWx0LmRhdGFEZXRlY3RvcnMuc2l6
ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBkYXRhRGV0ZWN0b3IgOiByZXN1bHQuZGF0YURldGVj
dG9ycykgeworICAgICAgICAgICAgYXV0byBkYXRhRGV0ZWN0b3JDb250YWluZXIgPSBEYXRhRGV0
ZWN0aW9uOjpjcmVhdGVFbGVtZW50Rm9ySW1hZ2VPdmVybGF5KGRvY3VtZW50LmdldCgpLCBkYXRh
RGV0ZWN0b3IpOworICAgICAgICAgICAgZGF0YURldGVjdG9yQ29udGFpbmVyLT5jbGFzc0xpc3Qo
KS5hZGQoaW1hZ2VPdmVybGF5RGF0YURldGVjdG9yQ2xhc3NOYW1lKCkpOworICAgICAgICAgICAg
cm9vdENvbnRhaW5lci0+YXBwZW5kQ2hpbGQoZGF0YURldGVjdG9yQ29udGFpbmVyKTsKKyAgICAg
ICAgICAgIHRleHRSZWNvZ25pdGlvbkVsZW1lbnRzLmRhdGFEZXRlY3RvcnMudW5jaGVja2VkQXBw
ZW5kKFdURk1vdmUoZGF0YURldGVjdG9yQ29udGFpbmVyKSk7CisgICAgICAgIH0KKyNlbmRpZiAv
LyBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisKKyAgICAgICAgaWYgKGRvY3VtZW50LT5xdWlya3Mo
KS5uZWVkc1RvRm9yY2VVc2VyU2VsZWN0V2hlbkluc3RhbGxpbmdJbWFnZU92ZXJsYXkoKSkKKyAg
ICAgICAgICAgIGVsZW1lbnQuc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtp
dFVzZXJTZWxlY3QsIENTU1ZhbHVlVGV4dCk7CisgICAgfQorCisgICAgaWYgKCFoYWRFeGlzdGlu
Z1RleHRSZWNvZ25pdGlvbkVsZW1lbnRzKSB7CisgICAgICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBzaGFkb3dTdHlsZShTdHJpbmdJbXBsOjpjcmVhdGVX
aXRob3V0Q29weWluZyhpbWFnZU92ZXJsYXlVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YoaW1h
Z2VPdmVybGF5VXNlckFnZW50U3R5bGVTaGVldCkpKTsKKyAgICAgICAgYXV0byBzdHlsZSA9IEhU
TUxTdHlsZUVsZW1lbnQ6OmNyZWF0ZShIVE1MTmFtZXM6OnN0eWxlVGFnLCBkb2N1bWVudC5nZXQo
KSwgZmFsc2UpOworICAgICAgICBzdHlsZS0+c2V0VGV4dENvbnRlbnQoc2hhZG93U3R5bGUpOwor
ICAgICAgICBzaGFkb3dSb290LT5hcHBlbmRDaGlsZChXVEZNb3ZlKHN0eWxlKSk7CisgICAgfQor
CisgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwor
CisgICAgYXV0byogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CisgICAgaWYgKCFpczxS
ZW5kZXJJbWFnZT4ocmVuZGVyZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBkb3duY2FzdDxS
ZW5kZXJJbWFnZT4oKnJlbmRlcmVyKS5zZXRIYXNJbWFnZU92ZXJsYXkoKTsKKworICAgIGF1dG8g
Y29udGFpbmVyUmVjdCA9IGNvbnRhaW5lclJlY3RGb3JJbWFnZU92ZXJsYXkoZWxlbWVudCk7Cisg
ICAgYXV0byBjb252ZXJ0VG9Db250YWluZXJDb29yZGluYXRlcyA9IFsmXShjb25zdCBGbG9hdFF1
YWQmIG5vcm1hbGl6ZWRRdWFkKSB7CisgICAgICAgIGF1dG8gcXVhZCA9IG5vcm1hbGl6ZWRRdWFk
OworICAgICAgICBxdWFkLnNjYWxlKGNvbnRhaW5lclJlY3Qud2lkdGgoKSwgY29udGFpbmVyUmVj
dC5oZWlnaHQoKSk7CisgICAgICAgIHF1YWQubW92ZShjb250YWluZXJSZWN0LngoKSwgY29udGFp
bmVyUmVjdC55KCkpOworICAgICAgICByZXR1cm4gcXVhZDsKKyAgICB9OworCisgICAgYm9vbCBh
cHBseVVzZXJTZWxlY3RBbGwgPSBkb2N1bWVudC0+aXNJbWFnZURvY3VtZW50KCkgfHwgcmVuZGVy
ZXItPnN0eWxlKCkudXNlclNlbGVjdCgpICE9IFVzZXJTZWxlY3Q6Ok5vbmU7CisgICAgZm9yIChz
aXplX3QgbGluZUluZGV4ID0gMDsgbGluZUluZGV4IDwgcmVzdWx0LmxpbmVzLnNpemUoKTsgKyts
aW5lSW5kZXgpIHsKKyAgICAgICAgYXV0byYgbGluZUVsZW1lbnRzID0gdGV4dFJlY29nbml0aW9u
RWxlbWVudHMubGluZXNbbGluZUluZGV4XTsKKyAgICAgICAgYXV0byYgbGluZUNvbnRhaW5lciA9
IGxpbmVFbGVtZW50cy5saW5lOworICAgICAgICBhdXRvJiBsaW5lID0gcmVzdWx0LmxpbmVzW2xp
bmVJbmRleF07CisgICAgICAgIGF1dG8gbGluZVF1YWQgPSBjb252ZXJ0VG9Db250YWluZXJDb29y
ZGluYXRlcyhsaW5lLm5vcm1hbGl6ZWRRdWFkKTsKKyAgICAgICAgaWYgKGxpbmVRdWFkLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1dG8gbGluZUJvdW5kcyA9
IHJvdGF0ZWRCb3VuZGluZ1JlY3RXaXRoTWluaW11bUFuZ2xlT2ZSb3RhdGlvbihsaW5lUXVhZCwg
MC4wMSk7CisgICAgICAgIGxpbmVDb250YWluZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NT
UHJvcGVydHlXaWR0aCwgbGluZUJvdW5kcy5zaXplLndpZHRoKCksIENTU1VuaXRUeXBlOjpDU1Nf
UFgpOworICAgICAgICBsaW5lQ29udGFpbmVyLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5SGVpZ2h0LCBsaW5lQm91bmRzLnNpemUuaGVpZ2h0KCksIENTU1VuaXRUeXBlOjpDU1Nf
UFgpOworICAgICAgICBsaW5lQ29udGFpbmVyLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5VHJhbnNmb3JtLCBtYWtlU3RyaW5nKAorICAgICAgICAgICAgInRyYW5zbGF0ZSgiX3Ms
CisgICAgICAgICAgICBzdGQ6OnJvdW5kKGxpbmVCb3VuZHMuY2VudGVyLngoKSAtIChsaW5lQm91
bmRzLnNpemUud2lkdGgoKSAvIDIpKSwgInB4LCAiX3MsCisgICAgICAgICAgICBzdGQ6OnJvdW5k
KGxpbmVCb3VuZHMuY2VudGVyLnkoKSAtIChsaW5lQm91bmRzLnNpemUuaGVpZ2h0KCkgLyAyKSks
ICJweCkgIl9zLAorICAgICAgICAgICAgbGluZUJvdW5kcy5hbmdsZUluUmFkaWFucyA/IG1ha2VT
dHJpbmcoInJvdGF0ZSgiX3MsIGxpbmVCb3VuZHMuYW5nbGVJblJhZGlhbnMsICJyYWQpICJfcykg
OiBlbXB0eVN0cmluZygpCisgICAgICAgICkpOworCisgICAgICAgIGF1dG8gb2Zmc2V0QWxvbmdI
b3Jpem9udGFsQXhpcyA9IFsmXShjb25zdCBGbG9hdFBvaW50JiBxdWFkUG9pbnQxLCBjb25zdCBG
bG9hdFBvaW50JiBxdWFkUG9pbnQyKSB7CisgICAgICAgICAgICBhdXRvIGludGVydmFsTGVuZ3Ro
ID0gbGluZUJvdW5kcy5zaXplLndpZHRoKCk7CisgICAgICAgICAgICBhdXRvIG1pZCA9IG1pZFBv
aW50KHF1YWRQb2ludDEsIHF1YWRQb2ludDIpOworICAgICAgICAgICAgbWlkLm1vdmVCeSgtbGlu
ZUJvdW5kcy5jZW50ZXIpOworICAgICAgICAgICAgbWlkLnJvdGF0ZSgtbGluZUJvdW5kcy5hbmds
ZUluUmFkaWFucyk7CisgICAgICAgICAgICByZXR1cm4gaW50ZXJ2YWxMZW5ndGggKiBjbGFtcFRv
PGZsb2F0PigwLjUgKyBtaWQueCgpIC8gaW50ZXJ2YWxMZW5ndGgsIDAsIDEpOworICAgICAgICB9
OworCisgICAgICAgIGF1dG8gb2Zmc2V0c0Fsb25nSG9yaXpvbnRhbEF4aXMgPSBsaW5lLmNoaWxk
cmVuLm1hcChbJl0oYXV0byYgY2hpbGQpIC0+IFdURjo6UmFuZ2U8ZmxvYXQ+IHsKKyAgICAgICAg
ICAgIGF1dG8gdGV4dFF1YWQgPSBjb252ZXJ0VG9Db250YWluZXJDb29yZGluYXRlcyhjaGlsZC5u
b3JtYWxpemVkUXVhZCk7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIG9m
ZnNldEFsb25nSG9yaXpvbnRhbEF4aXModGV4dFF1YWQucDEoKSwgdGV4dFF1YWQucDQoKSksCisg
ICAgICAgICAgICAgICAgb2Zmc2V0QWxvbmdIb3Jpem9udGFsQXhpcyh0ZXh0UXVhZC5wMigpLCB0
ZXh0UXVhZC5wMygpKQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZm9y
IChzaXplX3QgY2hpbGRJbmRleCA9IDA7IGNoaWxkSW5kZXggPCBsaW5lLmNoaWxkcmVuLnNpemUo
KTsgKytjaGlsZEluZGV4KSB7CisgICAgICAgICAgICBhdXRvJiB0ZXh0Q29udGFpbmVyID0gbGlu
ZUVsZW1lbnRzLmNoaWxkcmVuW2NoaWxkSW5kZXhdOworICAgICAgICAgICAgYm9vbCBsaW5lSGFz
T25lQ2hpbGQgPSBsaW5lLmNoaWxkcmVuLnNpemUoKSA9PSAxOworICAgICAgICAgICAgZmxvYXQg
aG9yaXpvbnRhbE1hcmdpblRvTWluaW1pemVTZWxlY3Rpb25HYXBzID0gbGluZUhhc09uZUNoaWxk
ID8gMCA6IDAuMTI1OworICAgICAgICAgICAgZmxvYXQgaG9yaXpvbnRhbE9mZnNldCA9IGxpbmVI
YXNPbmVDaGlsZCA/IDAgOiAtaG9yaXpvbnRhbE1hcmdpblRvTWluaW1pemVTZWxlY3Rpb25HYXBz
OworICAgICAgICAgICAgZmxvYXQgaG9yaXpvbnRhbEV4dGVudCA9IGxpbmVIYXNPbmVDaGlsZCA/
IDAgOiBob3Jpem9udGFsTWFyZ2luVG9NaW5pbWl6ZVNlbGVjdGlvbkdhcHM7CisKKyAgICAgICAg
ICAgIGlmIChsaW5lSGFzT25lQ2hpbGQpIHsKKyAgICAgICAgICAgICAgICBob3Jpem9udGFsT2Zm
c2V0ICs9IG9mZnNldHNBbG9uZ0hvcml6b250YWxBeGlzW2NoaWxkSW5kZXhdLmJlZ2luKCk7Cisg
ICAgICAgICAgICAgICAgaG9yaXpvbnRhbEV4dGVudCArPSBvZmZzZXRzQWxvbmdIb3Jpem9udGFs
QXhpc1tjaGlsZEluZGV4XS5lbmQoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNoaWxkSW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICBob3Jpem9udGFsT2Zmc2V0ICs9IG9mZnNldHNBbG9uZ0hv
cml6b250YWxBeGlzW2NoaWxkSW5kZXhdLmJlZ2luKCk7CisgICAgICAgICAgICAgICAgaG9yaXpv
bnRhbEV4dGVudCArPSAob2Zmc2V0c0Fsb25nSG9yaXpvbnRhbEF4aXNbY2hpbGRJbmRleF0uZW5k
KCkgKyBvZmZzZXRzQWxvbmdIb3Jpem9udGFsQXhpc1tjaGlsZEluZGV4ICsgMV0uYmVnaW4oKSkg
LyAyOworICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZEluZGV4ID09IGxpbmUuY2hpbGRyZW4u
c2l6ZSgpIC0gMSkgeworICAgICAgICAgICAgICAgIGhvcml6b250YWxPZmZzZXQgKz0gKG9mZnNl
dHNBbG9uZ0hvcml6b250YWxBeGlzW2NoaWxkSW5kZXggLSAxXS5lbmQoKSArIG9mZnNldHNBbG9u
Z0hvcml6b250YWxBeGlzW2NoaWxkSW5kZXhdLmJlZ2luKCkpIC8gMjsKKyAgICAgICAgICAgICAg
ICBob3Jpem9udGFsRXh0ZW50ICs9IG9mZnNldHNBbG9uZ0hvcml6b250YWxBeGlzW2NoaWxkSW5k
ZXhdLmVuZCgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBob3Jpem9u
dGFsT2Zmc2V0ICs9IChvZmZzZXRzQWxvbmdIb3Jpem9udGFsQXhpc1tjaGlsZEluZGV4IC0gMV0u
ZW5kKCkgKyBvZmZzZXRzQWxvbmdIb3Jpem9udGFsQXhpc1tjaGlsZEluZGV4XS5iZWdpbigpKSAv
IDI7CisgICAgICAgICAgICAgICAgaG9yaXpvbnRhbEV4dGVudCArPSAob2Zmc2V0c0Fsb25nSG9y
aXpvbnRhbEF4aXNbY2hpbGRJbmRleF0uZW5kKCkgKyBvZmZzZXRzQWxvbmdIb3Jpem9udGFsQXhp
c1tjaGlsZEluZGV4ICsgMV0uYmVnaW4oKSkgLyAyOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBGbG9hdFNpemUgdGFyZ2V0U2l6ZSB7IGhvcml6b250YWxFeHRlbnQgLSBob3Jpem9udGFs
T2Zmc2V0LCBsaW5lQm91bmRzLnNpemUuaGVpZ2h0KCkgfTsKKyAgICAgICAgICAgIGlmICh0YXJn
ZXRTaXplLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIHRleHRDb250YWluZXItPnNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUcmFuc2Zvcm0sICJzY2FsZSgwLCAwKSIpOwor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBk
b2N1bWVudC0+dXBkYXRlTGF5b3V0SWZEaW1lbnNpb25zT3V0T2ZEYXRlKHRleHRDb250YWluZXIp
OworCisgICAgICAgICAgICBGbG9hdFNpemUgc2l6ZUJlZm9yZVRyYW5zZm9ybTsKKyAgICAgICAg
ICAgIGlmIChhdXRvKiByZW5kZXJlciA9IHRleHRDb250YWluZXItPnJlbmRlckJveE1vZGVsT2Jq
ZWN0KCkpIHsKKyAgICAgICAgICAgICAgICBzaXplQmVmb3JlVHJhbnNmb3JtID0geworICAgICAg
ICAgICAgICAgICAgICBhZGp1c3RMYXlvdXRVbml0Rm9yQWJzb2x1dGVab29tKHJlbmRlcmVyLT5v
ZmZzZXRXaWR0aCgpLCAqcmVuZGVyZXIpLnRvRmxvYXQoKSwKKyAgICAgICAgICAgICAgICAgICAg
YWRqdXN0TGF5b3V0VW5pdEZvckFic29sdXRlWm9vbShyZW5kZXJlci0+b2Zmc2V0SGVpZ2h0KCks
ICpyZW5kZXJlcikudG9GbG9hdCgpLAorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChzaXplQmVmb3JlVHJhbnNmb3JtLmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgICAgIHRleHRDb250YWluZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlUcmFuc2Zvcm0sICJzY2FsZSgwLCAwKSIpOworICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0ZXh0Q29udGFpbmVyLT5zZXRJbmxpbmVT
dHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtLCBtYWtlU3RyaW5nKAorICAgICAgICAg
ICAgICAgICJ0cmFuc2xhdGUoIl9zLAorICAgICAgICAgICAgICAgIGhvcml6b250YWxPZmZzZXQg
KyAodGFyZ2V0U2l6ZS53aWR0aCgpIC0gc2l6ZUJlZm9yZVRyYW5zZm9ybS53aWR0aCgpKSAvIDIs
ICJweCwgIl9zLAorICAgICAgICAgICAgICAgICh0YXJnZXRTaXplLmhlaWdodCgpIC0gc2l6ZUJl
Zm9yZVRyYW5zZm9ybS5oZWlnaHQoKSkgLyAyLCAicHgpICJfcywKKyAgICAgICAgICAgICAgICAi
c2NhbGUoIl9zLCB0YXJnZXRTaXplLndpZHRoKCkgLyBzaXplQmVmb3JlVHJhbnNmb3JtLndpZHRo
KCksICIsICJfcywgdGFyZ2V0U2l6ZS5oZWlnaHQoKSAvIHNpemVCZWZvcmVUcmFuc2Zvcm0uaGVp
Z2h0KCksICIpICJfcworICAgICAgICAgICAgKSk7CisKKyAgICAgICAgICAgIHRleHRDb250YWlu
ZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRVc2VyU2VsZWN0LCBh
cHBseVVzZXJTZWxlY3RBbGwgPyBDU1NWYWx1ZUFsbCA6IENTU1ZhbHVlTm9uZSk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoZG9jdW1lbnQtPmlzSW1hZ2VEb2N1bWVudCgpKQorICAgICAgICAg
ICAgbGluZUNvbnRhaW5lci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1cnNv
ciwgQ1NTVmFsdWVUZXh0KTsKKyAgICB9CisKKyNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisg
ICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IHJlc3VsdC5kYXRhRGV0ZWN0b3JzLnNp
emUoKTsgKytpbmRleCkgeworICAgICAgICBhdXRvIGRhdGFEZXRlY3RvckNvbnRhaW5lciA9IHRl
eHRSZWNvZ25pdGlvbkVsZW1lbnRzLmRhdGFEZXRlY3RvcnNbaW5kZXhdOworICAgICAgICBhdXRv
JiBkYXRhRGV0ZWN0b3IgPSByZXN1bHQuZGF0YURldGVjdG9yc1tpbmRleF07CisgICAgICAgIGlm
IChkYXRhRGV0ZWN0b3Iubm9ybWFsaXplZFF1YWRzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY29tZSB1cCB3aXRoIGEgd2F5
IHRvIGNvYWxlc2NlIHRoZSBib3VuZGluZyBxdWFkcyBpbnRvIG9uZSBvciBtb3JlIHJvdGF0ZWQg
cmVjdHMgd2l0aCB0aGUgc2FtZSBhbmdsZSBvZiByb3RhdGlvbi4KKyAgICAgICAgYXV0byB0YXJn
ZXRRdWFkID0gY29udmVydFRvQ29udGFpbmVyQ29vcmRpbmF0ZXMoZGF0YURldGVjdG9yLm5vcm1h
bGl6ZWRRdWFkcy5maXJzdCgpKTsKKyAgICAgICAgYXV0byB0YXJnZXRCb3VuZHMgPSByb3RhdGVk
Qm91bmRpbmdSZWN0V2l0aE1pbmltdW1BbmdsZU9mUm90YXRpb24odGFyZ2V0UXVhZCwgMC4wMSk7
CisgICAgICAgIGRhdGFEZXRlY3RvckNvbnRhaW5lci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShD
U1NQcm9wZXJ0eVdpZHRoLCB0YXJnZXRCb3VuZHMuc2l6ZS53aWR0aCgpLCBDU1NVbml0VHlwZTo6
Q1NTX1BYKTsKKyAgICAgICAgZGF0YURldGVjdG9yQ29udGFpbmVyLT5zZXRJbmxpbmVTdHlsZVBy
b3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCB0YXJnZXRCb3VuZHMuc2l6ZS5oZWlnaHQoKSwgQ1NT
VW5pdFR5cGU6OkNTU19QWCk7CisgICAgICAgIGRhdGFEZXRlY3RvckNvbnRhaW5lci0+c2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRyYW5zZm9ybSwgbWFrZVN0cmluZygKKyAgICAg
ICAgICAgICJ0cmFuc2xhdGUoIl9zLAorICAgICAgICAgICAgc3RkOjpyb3VuZCh0YXJnZXRCb3Vu
ZHMuY2VudGVyLngoKSAtICh0YXJnZXRCb3VuZHMuc2l6ZS53aWR0aCgpIC8gMikpLCAicHgsICJf
cywKKyAgICAgICAgICAgIHN0ZDo6cm91bmQodGFyZ2V0Qm91bmRzLmNlbnRlci55KCkgLSAodGFy
Z2V0Qm91bmRzLnNpemUuaGVpZ2h0KCkgLyAyKSksICJweCkgIl9zLAorICAgICAgICAgICAgdGFy
Z2V0Qm91bmRzLmFuZ2xlSW5SYWRpYW5zID8gbWFrZVN0cmluZygicm90YXRlKCJfcywgdGFyZ2V0
Qm91bmRzLmFuZ2xlSW5SYWRpYW5zLCAicmFkKSAiX3MpIDogZW1wdHlTdHJpbmcoKQorICAgICAg
ICApKTsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKERBVEFfREVURUNUSU9OKQorCisgICAgaWYg
KFJlZlB0ciBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpKQorICAgICAgICBmcmFtZS0+ZXZlbnRI
YW5kbGVyKCkuc2NoZWR1bGVDdXJzb3JVcGRhdGUoKTsKKworICAgIGlmIChjYWNoZVRleHRSZWNv
Z25pdGlvblJlc3VsdHMgPT0gQ2FjaGVUZXh0UmVjb2duaXRpb25SZXN1bHRzOjpZZXMpIHsKKyAg
ICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgpKQorICAgICAgICAgICAgcGFn
ZS0+Y2FjaGVUZXh0UmVjb2duaXRpb25SZXN1bHQoZWxlbWVudCwgY29udGFpbmVyUmVjdCwgcmVz
dWx0KTsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSU1BR0VfQU5BTFlTSVMpCisKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0lt
YWdlT3ZlcmxheS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0ltYWdlT3ZlcmxheS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjYzNDc4YjIwZjZhN2VkODA0MjUwYzZkNjNlMTBiNGZhMzg0ZWI2MzgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vSW1hZ2VPdmVybGF5LmgKQEAgLTAsMCArMSw1MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSFRNTEVsZW1lbnQ7CitjbGFzcyBO
b2RlOworCitzdHJ1Y3QgU2ltcGxlUmFuZ2U7CitzdHJ1Y3QgVGV4dFJlY29nbml0aW9uUmVzdWx0
OworCitXRUJDT1JFX0VYUE9SVCBib29sIGhhc0ltYWdlT3ZlcmxheShjb25zdCBIVE1MRWxlbWVu
dCYpOworV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0ltYWdlT3ZlcmxheURhdGFEZXRlY3RvclJlc3Vs
dChjb25zdCBIVE1MRWxlbWVudCYpOworV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0luc2lkZUltYWdl
T3ZlcmxheShjb25zdCBTaW1wbGVSYW5nZSYpOworV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0luc2lk
ZUltYWdlT3ZlcmxheShjb25zdCBOb2RlJik7CitXRUJDT1JFX0VYUE9SVCBib29sIGlzSW1hZ2VP
dmVybGF5VGV4dChjb25zdCBOb2RlJik7CitXRUJDT1JFX0VYUE9SVCBib29sIGlzSW1hZ2VPdmVy
bGF5VGV4dChjb25zdCBOb2RlKik7Cit2b2lkIHJlbW92ZUltYWdlT3ZlcmxheVNvb25JZk5lZWRl
ZChIVE1MRWxlbWVudCYpOworSW50UmVjdCBjb250YWluZXJSZWN0Rm9ySW1hZ2VPdmVybGF5KEhU
TUxFbGVtZW50Jik7CisKKyNpZiBFTkFCTEUoSU1BR0VfQU5BTFlTSVMpCitlbnVtIGNsYXNzIENh
Y2hlVGV4dFJlY29nbml0aW9uUmVzdWx0cyA6IGJvb2wgeyBObywgWWVzIH07CitXRUJDT1JFX0VY
UE9SVCB2b2lkIHVwZGF0ZVdpdGhUZXh0UmVjb2duaXRpb25SZXN1bHQoSFRNTEVsZW1lbnQmLCBj
b25zdCBUZXh0UmVjb2duaXRpb25SZXN1bHQmLCBDYWNoZVRleHRSZWNvZ25pdGlvblJlc3VsdHMg
PSBDYWNoZVRleHRSZWNvZ25pdGlvblJlc3VsdHM6Olllcyk7CisjZW5kaWYKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IGM2NzEwMjI3ZGRk
MTRmNTA2ZDhmNTIwYzBlODk2Y2M5Y2Q0ZTY5ZGIuLjA5NDAyMzhlYmVlODQ4Y2M5ZTE5Y2NmNzUw
ZWU5NWIyYzdkNzM2NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTc0LDYgKzc0
LDcgQEAKICNpbmNsdWRlICJIVE1MU3BhbkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVUxpc3RF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIkltYWdlT3Zl
cmxheS5oIgogI2luY2x1ZGUgIkluZGVudE91dGRlbnRDb21tYW5kLmgiCiAjaW5jbHVkZSAiSW5w
dXRFdmVudC5oIgogI2luY2x1ZGUgIkluc2VydExpc3RDb21tYW5kLmgiCkBAIC0xNDI2LDcgKzE0
MjcsNyBAQCB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weShFZGl0b3JBY3Rpb25TcGVjaWZp
ZXIgYWN0aW9uKQogICAgICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGlu
Zyh0cnVlKTsKICAgICB9CiAKLSAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkgfHwgKHNlbGVjdGlvbiAmJiBI
VE1MRWxlbWVudDo6aXNJbnNpZGVJbWFnZU92ZXJsYXkoKnNlbGVjdGlvbikpKQorICAgIGlmIChl
bmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5zdGFydCgpKSB8fCAoc2VsZWN0aW9uICYmIGlzSW5zaWRlSW1hZ2VPdmVybGF5KCpzZWxlY3Rp
b24pKSkKICAgICAgICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKFBhZ2VQYXN0
ZWJvYXJkQ29udGV4dDo6Y3JlYXRlKG1fZG9jdW1lbnQucGFnZUlEKCkpKS0+d3JpdGVQbGFpblRl
eHQoc2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCksIGNhblNtYXJ0Q29weU9yRGVsZXRlKCkg
PyBQYXN0ZWJvYXJkOjpDYW5TbWFydFJlcGxhY2UgOiBQYXN0ZWJvYXJkOjpDYW5ub3RTbWFydFJl
cGxhY2UpOwogICAgIGVsc2UgewogICAgICAgICBSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4gaW1h
Z2VFbGVtZW50OwpAQCAtMzY3OSw3ICszNjgwLDcgQEAgc3RhdGljIFZlY3RvcjxTaW1wbGVSYW5n
ZT4gc2NhbkZvclRlbGVwaG9uZU51bWJlcnMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogICAg
IGlmIChSZWYgc3RhcnROb2RlID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKTsgc3RhcnROb2RlLT5o
YXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBpZiAoSFRNTEVs
ZW1lbnQ6OmlzSW5zaWRlSW1hZ2VPdmVybGF5KHJhbmdlKSkKKyAgICBpZiAoaXNJbnNpZGVJbWFn
ZU92ZXJsYXkocmFuZ2UpKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgYXV0byB0ZXh0ID0g
cGxhaW5UZXh0KHJhbmdlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHAKaW5kZXggMzBmY2QzMGY0ZGY2NTExZTk2MmIxYmYxZWU5ZmVjZjljMGRjOTk2My4uNzg2Mjc2
MzcxMjAzYzkyODRhY2Q4NjEzOGNkZjA2ZDk3NGIxZDAxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlICJIVE1M
U2VsZWN0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCiAjaW5jbHVkZSAi
SGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIkltYWdlT3ZlcmxheS5oIgogI2luY2x1ZGUgIklu
bGluZVJ1bkFuZE9mZnNldC5oIgogI2luY2x1ZGUgIkxlZ2FjeUlubGluZVRleHRCb3guaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCkBAIC0xOTE3LDcgKzE5MTgsNyBAQCBib29sIEZyYW1lU2VsZWN0
aW9uOjpjb250YWlucyhjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpIGNvbnN0CiAgICAgaWYgKCFp
bm5lck5vZGUgfHwgIWlubmVyTm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKEhUTUxFbGVtZW50Ojppc0luc2lkZUltYWdlT3ZlcmxheSgqcmFuZ2UpICYm
IEhUTUxFbGVtZW50Ojppc0luc2lkZUltYWdlT3ZlcmxheSgqaW5uZXJOb2RlKSkgeworICAgIGlm
IChpc0luc2lkZUltYWdlT3ZlcmxheSgqcmFuZ2UpICYmIGlzSW5zaWRlSW1hZ2VPdmVybGF5KCpp
bm5lck5vZGUpKSB7CiAgICAgICAgIGZvciAoYXV0byBxdWFkIDogUmVuZGVyT2JqZWN0OjphYnNv
bHV0ZVRleHRRdWFkcygqcmFuZ2UsIHsgUmVuZGVyT2JqZWN0OjpCb3VuZGluZ1JlY3RCZWhhdmlv
cjo6VXNlU2VsZWN0aW9uSGVpZ2h0IH0pKSB7CiAgICAgICAgICAgICBpZiAoIXF1YWQuaXNFbXB0
eSgpICYmIHF1YWQuY29udGFpbnNQb2ludChwb2ludCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKaW5kZXggZWM2ZmYy
OTRjODFiZGJiZTc1YmUxYmI4ZjMxNjUyOWQ3OTk0NDdkNy4uMWVkZTJmZmY2YTllNjgwNTg4MmRi
NDVlNzhiOWY4MGIxOGMwNGU4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
ZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9y
LmNwcApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIkhUTUxTbG90RWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudC5oIgorI2luY2x1ZGUgIkltYWdlT3ZlcmxheS5oIgogI2luY2x1ZGUgIkxlZ2Fj
eUlubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAi
UmFuZ2UuaCIKQEAgLTczNyw3ICs3MzgsNyBAQCBib29sIFRleHRJdGVyYXRvcjo6aGFuZGxlUmVw
bGFjZWRFbGVtZW50KCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtX2JlaGF2aW9ycy5j
b250YWlucyhUZXh0SXRlcmF0b3JCZWhhdmlvcjo6RW50ZXJzSW1hZ2VPdmVybGF5cykgJiYgaXM8
SFRNTEVsZW1lbnQ+KG1fbm9kZSkgJiYgZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCptX25vZGUpLmhh
c0ltYWdlT3ZlcmxheSgpKSB7CisgICAgaWYgKG1fYmVoYXZpb3JzLmNvbnRhaW5zKFRleHRJdGVy
YXRvckJlaGF2aW9yOjpFbnRlcnNJbWFnZU92ZXJsYXlzKSAmJiBpczxIVE1MRWxlbWVudD4obV9u
b2RlKSAmJiBoYXNJbWFnZU92ZXJsYXkoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCptX25vZGUpKSkg
ewogICAgICAgICBpZiAoUmVmUHRyIHNoYWRvd1Jvb3QgPSBtX25vZGUtPnNoYWRvd1Jvb3QoKSkg
ewogICAgICAgICAgICAgbV9ub2RlID0gc2hhZG93Um9vdC5nZXQoKTsKICAgICAgICAgICAgIHB1
c2hGdWxseUNsaXBwZWRTdGF0ZShtX2Z1bGx5Q2xpcHBlZFN0YWNrLCAqbV9ub2RlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKaW5kZXggMTVhNDJiZWNmNDkwNGRlMWI4MzdhOGZiN2Uy
ZGI0Y2Y5NGMwYTViMi4uNDE0NmJlM2RmYjdiNmQ1OWVhNjIxNWU5MDcwZDNmYzVhYjExYWFlNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKQEAgLTQzLDExICs0Myw5IEBACiAjaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgotI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSFRNTEJE
SUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MQlJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEJ1
dHRvbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRGl2RWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50RmFjdG9yeS5oIgogI2luY2x1ZGUg
IkhUTUxGaWVsZFNldEVsZW1lbnQuaCIKQEAgLTU5LDEzICs1NywxMiBAQAogI2luY2x1ZGUgIkhU
TUxPcHRpb25FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1
ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudC5oIgorI2luY2x1ZGUgIkltYWdlT3ZlcmxheS5oIgogI2luY2x1ZGUgIk1l
ZGlhQ29udHJvbHNIb3N0LmgiCiAjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUg
IlJlbmRlckVsZW1lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlNj
cmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTY3JpcHREaXNhbGxvd2VkU2NvcGUuaCIKICNp
bmNsdWRlICJTaGFkb3dSb290LmgiCkBAIC04MiwxOCArNzksMTAgQEAKICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCi0j
aWYgRU5BQkxFKElNQUdFX0FOQUxZU0lTKQotI2luY2x1ZGUgIlRleHRSZWNvZ25pdGlvblJlc3Vs
dC5oIgotI2VuZGlmCi0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogI2luY2x1ZGUgIlNlbGVj
dGlvbkdlb21ldHJ5LmgiCiAjZW5kaWYKIAotI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKLSNp
bmNsdWRlICJEYXRhRGV0ZWN0aW9uLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSFRNTEVsZW1lbnQpOwpAQCAtMTI1MiwyMSAr
MTI0MSw2IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OnNldEVudGVyS2V5SGludChjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgIHNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oZW50ZXJrZXlo
aW50QXR0ciwgdmFsdWUpOwogfQogCi0vLyBGSVhNRTogV2Ugc2hvdWxkIG1vdmUgYWxsIG9mIHRo
aXMgaW1hZ2Ugb3ZlcmxheS1zcGVjaWZpYyBsb2dpYyBvdXQgaW50byBhIHNlcGFyYXRlIGhlbHBl
ciBmaWxlIChwb3NzaWJseSBhcyBzdGFuZGFsb25lIGZ1bmN0aW9ucykKLS8vIHRvIGJldHRlciBj
b21wYXJ0bWVudGFsaXplIHRoaXMgY29kZS4KLQotc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIGlt
YWdlT3ZlcmxheUVsZW1lbnRJZGVudGlmaWVyKCkKLXsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5l
dmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGlkZW50aWZpZXIoImltYWdlLW92ZXJsYXki
LCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIGlkZW50aWZp
ZXI7Ci19Ci0KLXN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBpbWFnZU92ZXJsYXlEYXRhRGV0ZWN0
b3JDbGFzc05hbWUoKQotewotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgQXRvbVN0cmluZz4gY2xhc3NOYW1lKCJpbWFnZS1vdmVybGF5LWRhdGEtZGV0ZWN0b3ItcmVz
dWx0IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHJldHVybiBjbGFz
c05hbWU7Ci19Ci0KIGJvb2wgSFRNTEVsZW1lbnQ6OnNob3VsZEV4dGVuZFNlbGVjdGlvblRvVGFy
Z2V0Tm9kZShjb25zdCBOb2RlJiB0YXJnZXROb2RlLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb25CZWZvcmVVcGRhdGUpCiB7CiAgICAgaWYgKGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb25C
ZWZvcmVVcGRhdGUucmFuZ2UoKTsgcmFuZ2UgJiYgaXNJbnNpZGVJbWFnZU92ZXJsYXkoKnJhbmdl
KSkKQEAgLTEyNzUsMzg5ICsxMjQ5LDYgQEAgYm9vbCBIVE1MRWxlbWVudDo6c2hvdWxkRXh0ZW5k
U2VsZWN0aW9uVG9UYXJnZXROb2RlKGNvbnN0IE5vZGUmIHRhcmdldE5vZGUsIGNvbnMKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBIVE1MRWxlbWVudDo6aGFzSW1hZ2VPdmVybGF5KCkgY29u
c3QKLXsKLSAgICBhdXRvIHNoYWRvd1Jvb3QgPSB0aGlzLT5zaGFkb3dSb290KCk7Ci0gICAgaWYg
KExJS0VMWSghc2hhZG93Um9vdCB8fCBzaGFkb3dSb290LT5tb2RlKCkgIT0gU2hhZG93Um9vdE1v
ZGU6OlVzZXJBZ2VudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBzaGFk
b3dSb290LT5oYXNFbGVtZW50V2l0aElkKCppbWFnZU92ZXJsYXlFbGVtZW50SWRlbnRpZmllcigp
LmltcGwoKSk7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8SFRNTEVsZW1lbnQ+IGltYWdlT3ZlcmxheUhv
c3QoY29uc3QgTm9kZSYgbm9kZSkKLXsKLSAgICBhdXRvIGhvc3QgPSBub2RlLnNoYWRvd0hvc3Qo
KTsKLSAgICBpZiAoIWlzPEhUTUxFbGVtZW50Pihob3N0KSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBSZWZQdHIgZWxlbWVudCB7ICZkb3duY2FzdDxIVE1MRWxlbWVudD4oKmhvc3Qp
IH07Ci0gICAgcmV0dXJuIGVsZW1lbnQtPmhhc0ltYWdlT3ZlcmxheSgpID8gZWxlbWVudCA6IG51
bGxwdHI7Ci19Ci0KLWJvb2wgSFRNTEVsZW1lbnQ6OmlzSW1hZ2VPdmVybGF5RGF0YURldGVjdG9y
UmVzdWx0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaW1hZ2VPdmVybGF5SG9zdCgqdGhpcykgJiYg
aGFzQ2xhc3MoKSAmJiBjbGFzc05hbWVzKCkuY29udGFpbnMoaW1hZ2VPdmVybGF5RGF0YURldGVj
dG9yQ2xhc3NOYW1lKCkpOwotfQotCi1ib29sIEhUTUxFbGVtZW50Ojppc0luc2lkZUltYWdlT3Zl
cmxheShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCi17Ci0gICAgUmVmUHRyIGNvbW1vbkFuY2Vz
dG9yID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3I8Q29tcG9zZWRUcmVlPihyYW5nZSk7Ci0gICAg
aWYgKCFjb21tb25BbmNlc3RvcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
IGlzSW5zaWRlSW1hZ2VPdmVybGF5KCpjb21tb25BbmNlc3Rvcik7Ci19Ci0KLWJvb2wgSFRNTEVs
ZW1lbnQ6OmlzSW5zaWRlSW1hZ2VPdmVybGF5KGNvbnN0IE5vZGUmIG5vZGUpCi17Ci0gICAgYXV0
byBob3N0ID0gaW1hZ2VPdmVybGF5SG9zdChub2RlKTsKLSAgICBpZiAoIWhvc3QpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBob3N0LT51c2VyQWdlbnRTaGFkb3dSb290KCkt
PmNvbnRhaW5zKG5vZGUpOwotfQotCi1ib29sIEhUTUxFbGVtZW50Ojppc0ltYWdlT3ZlcmxheVRl
eHQoY29uc3QgTm9kZSogbm9kZSkKLXsKLSAgICByZXR1cm4gbm9kZSAmJiBpc0ltYWdlT3Zlcmxh
eVRleHQoKm5vZGUpOwotfQotCi1ib29sIEhUTUxFbGVtZW50Ojppc0ltYWdlT3ZlcmxheVRleHQo
Y29uc3QgTm9kZSYgbm9kZSkKLXsKLSAgICBhdXRvIGhvc3QgPSBpbWFnZU92ZXJsYXlIb3N0KG5v
ZGUpOwotICAgIGlmICghaG9zdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKFJl
ZlB0ciBvdmVybGF5ID0gc3RhdGljX2Nhc3Q8VHJlZVNjb3BlJj4oKmhvc3QtPnVzZXJBZ2VudFNo
YWRvd1Jvb3QoKSkuZ2V0RWxlbWVudEJ5SWQoaW1hZ2VPdmVybGF5RWxlbWVudElkZW50aWZpZXIo
KSkpCi0gICAgICAgIHJldHVybiBub2RlLmlzRGVzY2VuZGFudE9mKCpvdmVybGF5KTsKLQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBIVE1MRWxlbWVudDo6cmVtb3ZlSW1hZ2VPdmVybGF5
U29vbklmTmVlZGVkKCkKLXsKLSAgICBpZiAoIWhhc0ltYWdlT3ZlcmxheSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBkb2N1bWVudCgpLmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNl
OjpJbnRlcm5hbEFzeW5jVGFzaywgW3dlYWtUaGlzID0gV2Vha1B0ciB7ICp0aGlzIH1dIHsKLSAg
ICAgICAgUmVmUHRyIHByb3RlY3RlZFRoaXMgPSB3ZWFrVGhpcy5nZXQoKTsKLSAgICAgICAgaWYg
KCFwcm90ZWN0ZWRUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFJlZlB0ciBz
aGFkb3dSb290ID0gcHJvdGVjdGVkVGhpcy0+dXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgICAg
ICBpZiAoIXNoYWRvd1Jvb3QpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKFJl
ZlB0ciBvdmVybGF5ID0gc3RhdGljX2Nhc3Q8VHJlZVNjb3BlJj4oKnNoYWRvd1Jvb3QpLmdldEVs
ZW1lbnRCeUlkKGltYWdlT3ZlcmxheUVsZW1lbnRJZGVudGlmaWVyKCkpKQotICAgICAgICAgICAg
b3ZlcmxheS0+cmVtb3ZlKCk7Ci0KLSNpZiBFTkFCTEUoSU1BR0VfQU5BTFlTSVMpCi0gICAgICAg
IGlmIChhdXRvIHBhZ2UgPSBwcm90ZWN0ZWRUaGlzLT5kb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAg
ICAgICAgIHBhZ2UtPnJlc2V0VGV4dFJlY29nbml0aW9uUmVzdWx0KCpwcm90ZWN0ZWRUaGlzKTsK
LSNlbmRpZgotICAgIH0pOwotfQotCi0jaWYgRU5BQkxFKElNQUdFX0FOQUxZU0lTKQotCi1JbnRS
ZWN0IEhUTUxFbGVtZW50Ojpjb250YWluZXJSZWN0Rm9yVGV4dFJlY29nbml0aW9uKCkKLXsKLSAg
ICBhdXRvKiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFpczxSZW5kZXJJ
bWFnZT4ocmVuZGVyZXIpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgaWYgKCFyZW5kZXJl
ci0+b3BhY2l0eSgpKQotICAgICAgICByZXR1cm4geyAwLCAwLCBvZmZzZXRXaWR0aCgpLCBvZmZz
ZXRIZWlnaHQoKSB9OwotCi0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoZG93bmNhc3Q8UmVu
ZGVySW1hZ2U+KCpyZW5kZXJlcikucmVwbGFjZWRDb250ZW50UmVjdCgpKTsKLX0KLQotdm9pZCBI
VE1MRWxlbWVudDo6dXBkYXRlV2l0aFRleHRSZWNvZ25pdGlvblJlc3VsdChjb25zdCBUZXh0UmVj
b2duaXRpb25SZXN1bHQmIHJlc3VsdCwgQ2FjaGVUZXh0UmVjb2duaXRpb25SZXN1bHRzIGNhY2hl
VGV4dFJlY29nbml0aW9uUmVzdWx0cykKLXsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVz
dHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGltYWdlT3ZlcmxheUxpbmVDbGFzcygiaW1hZ2Utb3Zl
cmxheS1saW5lIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRp
YyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gaW1hZ2VPdmVybGF5
VGV4dENsYXNzKCJpbWFnZS1vdmVybGF5LXRleHQiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7Ci0KLSAgICBzdHJ1Y3QgVGV4dFJlY29nbml0aW9uTGluZUVsZW1lbnRzIHsKLSAg
ICAgICAgUmVmPEhUTUxEaXZFbGVtZW50PiBsaW5lOwotICAgICAgICBWZWN0b3I8UmVmPEhUTUxF
bGVtZW50Pj4gY2hpbGRyZW47Ci0gICAgfTsKLQotICAgIHN0cnVjdCBUZXh0UmVjb2duaXRpb25F
bGVtZW50cyB7Ci0gICAgICAgIFJlZlB0cjxIVE1MRGl2RWxlbWVudD4gcm9vdDsKLSAgICAgICAg
VmVjdG9yPFRleHRSZWNvZ25pdGlvbkxpbmVFbGVtZW50cz4gbGluZXM7Ci0gICAgICAgIFZlY3Rv
cjxSZWY8SFRNTERpdkVsZW1lbnQ+PiBkYXRhRGV0ZWN0b3JzOwotICAgIH07Ci0KLSAgICBib29s
IGhhZEV4aXN0aW5nVGV4dFJlY29nbml0aW9uRWxlbWVudHMgPSBmYWxzZTsKLSAgICBUZXh0UmVj
b2duaXRpb25FbGVtZW50cyB0ZXh0UmVjb2duaXRpb25FbGVtZW50czsKLSAgICBSZWZQdHI8SFRN
TEVsZW1lbnQ+IG1lZGlhQ29udHJvbHNDb250YWluZXI7Ci0gICAgaWYgKFJlZlB0ciBzaGFkb3dS
b290ID0gdGhpcy0+c2hhZG93Um9vdCgpKSB7Ci0jaWYgRU5BQkxFKE1PREVSTl9NRURJQV9DT05U
Uk9MUykKLSAgICAgICAgaWYgKGlzPEhUTUxNZWRpYUVsZW1lbnQ+KCp0aGlzKSkgewotICAgICAg
ICAgICAgaWYgKFJlZlB0ciBjb250cm9sc0hvc3QgPSBkb3duY2FzdDxIVE1MTWVkaWFFbGVtZW50
PigqdGhpcykubWVkaWFDb250cm9sc0hvc3QoKSkgewotICAgICAgICAgICAgICAgIGF1dG8mIGNv
bnRhaW5lckNsYXNzID0gY29udHJvbHNIb3N0LT5tZWRpYUNvbnRyb2xzQ29udGFpbmVyQ2xhc3NO
YW1lKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBl
PEhUTUxEaXZFbGVtZW50Pigqc2hhZG93Um9vdCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGNoaWxkLmhhc0NsYXNzKCkgJiYgY2hpbGQuY2xhc3NOYW1lcygpLmNvbnRhaW5zKGNvbnRhaW5l
ckNsYXNzKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFDb250cm9sc0NvbnRhaW5l
ciA9ICZjaGlsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0j
ZW5kaWYKLSAgICAgICAgaWYgKGhhc0ltYWdlT3ZlcmxheSgpKSB7Ci0gICAgICAgICAgICBSZWZQ
dHI8Q29udGFpbmVyTm9kZT4gY29udGFpbmVyRm9ySW1hZ2VPdmVybGF5OwotICAgICAgICAgICAg
aWYgKG1lZGlhQ29udHJvbHNDb250YWluZXIpCi0gICAgICAgICAgICAgICAgY29udGFpbmVyRm9y
SW1hZ2VPdmVybGF5ID0gbWVkaWFDb250cm9sc0NvbnRhaW5lcjsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBjb250YWluZXJGb3JJbWFnZU92ZXJsYXkgPSBzaGFkb3dSb290Owot
ICAgICAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPEhUTUxEaXZFbGVt
ZW50PigqY29udGFpbmVyRm9ySW1hZ2VPdmVybGF5KSkgewotICAgICAgICAgICAgICAgIGlmIChj
aGlsZC5nZXRJZEF0dHJpYnV0ZSgpID09IGltYWdlT3ZlcmxheUVsZW1lbnRJZGVudGlmaWVyKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgdGV4dFJlY29nbml0aW9uRWxlbWVudHMucm9vdCA9ICZj
aGlsZDsKLSAgICAgICAgICAgICAgICAgICAgaGFkRXhpc3RpbmdUZXh0UmVjb2duaXRpb25FbGVt
ZW50cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh0ZXh0UmVj
b2duaXRpb25FbGVtZW50cy5yb290KSB7Ci0gICAgICAgIGZvciAoYXV0byYgbGluZU9yRGF0YURl
dGVjdG9yIDogY2hpbGRyZW5PZlR5cGU8SFRNTERpdkVsZW1lbnQ+KCp0ZXh0UmVjb2duaXRpb25F
bGVtZW50cy5yb290KSkgewotICAgICAgICAgICAgaWYgKCFsaW5lT3JEYXRhRGV0ZWN0b3IuaGFz
Q2xhc3MoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKGxp
bmVPckRhdGFEZXRlY3Rvci5jbGFzc0xpc3QoKS5jb250YWlucyhpbWFnZU92ZXJsYXlMaW5lQ2xh
c3MpKSB7Ci0gICAgICAgICAgICAgICAgVGV4dFJlY29nbml0aW9uTGluZUVsZW1lbnRzIGxpbmVF
bGVtZW50cyB7IGxpbmVPckRhdGFEZXRlY3RvciwgeyB9IH07Ci0gICAgICAgICAgICAgICAgZm9y
IChhdXRvJiB0ZXh0IDogY2hpbGRyZW5PZlR5cGU8SFRNTERpdkVsZW1lbnQ+KGxpbmVPckRhdGFE
ZXRlY3RvcikpCi0gICAgICAgICAgICAgICAgICAgIGxpbmVFbGVtZW50cy5jaGlsZHJlbi5hcHBl
bmQodGV4dCk7Ci0gICAgICAgICAgICAgICAgdGV4dFJlY29nbml0aW9uRWxlbWVudHMubGluZXMu
YXBwZW5kKFdURk1vdmUobGluZUVsZW1lbnRzKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxp
bmVPckRhdGFEZXRlY3Rvci5jbGFzc0xpc3QoKS5jb250YWlucyhpbWFnZU92ZXJsYXlEYXRhRGV0
ZWN0b3JDbGFzc05hbWUoKSkpCi0gICAgICAgICAgICAgICAgdGV4dFJlY29nbml0aW9uRWxlbWVu
dHMuZGF0YURldGVjdG9ycy5hcHBlbmQobGluZU9yRGF0YURldGVjdG9yKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGJvb2wgY2FuVXNlRXhpc3RpbmdUZXh0UmVjb2duaXRpb25FbGVtZW50cyA9IChb
Jl0gewotICAgICAgICAgICAgaWYgKHJlc3VsdC5kYXRhRGV0ZWN0b3JzLnNpemUoKSAhPSB0ZXh0
UmVjb2duaXRpb25FbGVtZW50cy5kYXRhRGV0ZWN0b3JzLnNpemUoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmIChyZXN1bHQubGluZXMuc2l6ZSgpICE9
IHRleHRSZWNvZ25pdGlvbkVsZW1lbnRzLmxpbmVzLnNpemUoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGxpbmVJbmRleCA9IDA7IGxp
bmVJbmRleCA8IHJlc3VsdC5saW5lcy5zaXplKCk7ICsrbGluZUluZGV4KSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byYgY2hpbGRSZXN1bHRzID0gcmVzdWx0LmxpbmVzW2xpbmVJbmRleF0uY2hpbGRy
ZW47Ci0gICAgICAgICAgICAgICAgYXV0byYgY2hpbGRUZXh0RWxlbWVudHMgPSB0ZXh0UmVjb2du
aXRpb25FbGVtZW50cy5saW5lc1tsaW5lSW5kZXhdLmNoaWxkcmVuOwotICAgICAgICAgICAgICAg
IGlmIChjaGlsZFJlc3VsdHMuc2l6ZSgpICE9IGNoaWxkVGV4dEVsZW1lbnRzLnNpemUoKSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgY2hpbGRJbmRleCA9IDA7IGNoaWxkSW5kZXggPCBjaGlsZFJlc3VsdHMuc2l6ZSgpOyAr
K2NoaWxkSW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkUmVzdWx0c1tjaGls
ZEluZGV4XS50ZXh0ICE9IGNoaWxkVGV4dEVsZW1lbnRzW2NoaWxkSW5kZXhdLT50ZXh0Q29udGVu
dCgpLnN0cmlwV2hpdGVTcGFjZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0pKCk7Ci0KLSAgICAgICAgaWYgKCFjYW5Vc2VFeGlzdGluZ1Rl
eHRSZWNvZ25pdGlvbkVsZW1lbnRzKSB7Ci0gICAgICAgICAgICB0ZXh0UmVjb2duaXRpb25FbGVt
ZW50cy5yb290LT5yZW1vdmUoKTsKLSAgICAgICAgICAgIHRleHRSZWNvZ25pdGlvbkVsZW1lbnRz
ID0geyB9OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdC5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFJlZiBzaGFkb3dSb290ID0gZW5zdXJlVXNlckFnZW50U2hh
ZG93Um9vdCgpOwotICAgIGlmICghdGV4dFJlY29nbml0aW9uRWxlbWVudHMucm9vdCkgewotICAg
ICAgICBhdXRvIHJvb3RDb250YWluZXIgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50
KCkpOwotICAgICAgICByb290Q29udGFpbmVyLT5zZXRJZEF0dHJpYnV0ZShpbWFnZU92ZXJsYXlF
bGVtZW50SWRlbnRpZmllcigpKTsKLSAgICAgICAgaWYgKGRvY3VtZW50KCkuaXNJbWFnZURvY3Vt
ZW50KCkpCi0gICAgICAgICAgICByb290Q29udGFpbmVyLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5V2Via2l0VXNlclNlbGVjdCwgQ1NTVmFsdWVUZXh0KTsKLQotICAgICAgICBp
ZiAobWVkaWFDb250cm9sc0NvbnRhaW5lcikKLSAgICAgICAgICAgIG1lZGlhQ29udHJvbHNDb250
YWluZXItPmFwcGVuZENoaWxkKHJvb3RDb250YWluZXIpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBzaGFkb3dSb290LT5hcHBlbmRDaGlsZChyb290Q29udGFpbmVyKTsKLSAgICAgICAgdGV4
dFJlY29nbml0aW9uRWxlbWVudHMucm9vdCA9IHJvb3RDb250YWluZXIuY29weVJlZigpOwotICAg
ICAgICB0ZXh0UmVjb2duaXRpb25FbGVtZW50cy5saW5lcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KHJlc3VsdC5saW5lcy5zaXplKCkpOwotICAgICAgICBmb3IgKGF1dG8mIGxpbmUgOiByZXN1bHQu
bGluZXMpIHsKLSAgICAgICAgICAgIGF1dG8gbGluZUNvbnRhaW5lciA9IEhUTUxEaXZFbGVtZW50
OjpjcmVhdGUoZG9jdW1lbnQoKSk7Ci0gICAgICAgICAgICBsaW5lQ29udGFpbmVyLT5jbGFzc0xp
c3QoKS5hZGQoaW1hZ2VPdmVybGF5TGluZUNsYXNzKTsKLSAgICAgICAgICAgIHJvb3RDb250YWlu
ZXItPmFwcGVuZENoaWxkKGxpbmVDb250YWluZXIpOwotICAgICAgICAgICAgVGV4dFJlY29nbml0
aW9uTGluZUVsZW1lbnRzIGxpbmVFbGVtZW50cyB7IGxpbmVDb250YWluZXIsIHsgfSB9OwotICAg
ICAgICAgICAgbGluZUVsZW1lbnRzLmNoaWxkcmVuLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGlu
ZS5jaGlsZHJlbi5zaXplKCkpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgY2hpbGRJbmRleCA9
IDA7IGNoaWxkSW5kZXggPCBsaW5lLmNoaWxkcmVuLnNpemUoKTsgKytjaGlsZEluZGV4KSB7Ci0g
ICAgICAgICAgICAgICAgYXV0byYgY2hpbGQgPSBsaW5lLmNoaWxkcmVuW2NoaWxkSW5kZXhdOwot
ICAgICAgICAgICAgICAgIGF1dG8gdGV4dENvbnRhaW5lciA9IEhUTUxEaXZFbGVtZW50OjpjcmVh
dGUoZG9jdW1lbnQoKSk7Ci0gICAgICAgICAgICAgICAgdGV4dENvbnRhaW5lci0+Y2xhc3NMaXN0
KCkuYWRkKGltYWdlT3ZlcmxheVRleHRDbGFzcyk7Ci0gICAgICAgICAgICAgICAgbGluZUNvbnRh
aW5lci0+YXBwZW5kQ2hpbGQodGV4dENvbnRhaW5lcik7Ci0gICAgICAgICAgICAgICAgdGV4dENv
bnRhaW5lci0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCksIGNoaWxkLmhhc0xl
YWRpbmdXaGl0ZXNwYWNlID8gbWFrZVN0cmluZygnXG4nLCBjaGlsZC50ZXh0KSA6IGNoaWxkLnRl
eHQpKTsKLSAgICAgICAgICAgICAgICBsaW5lRWxlbWVudHMuY2hpbGRyZW4udW5jaGVja2VkQXBw
ZW5kKFdURk1vdmUodGV4dENvbnRhaW5lcikpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBsaW5lQ29udGFpbmVyLT5hcHBlbmRDaGlsZChIVE1MQlJFbGVtZW50OjpjcmVhdGUoZG9jdW1l
bnQoKSkpOwotICAgICAgICAgICAgdGV4dFJlY29nbml0aW9uRWxlbWVudHMubGluZXMudW5jaGVj
a2VkQXBwZW5kKFdURk1vdmUobGluZUVsZW1lbnRzKSk7Ci0gICAgICAgIH0KLQotI2lmIEVOQUJM
RShEQVRBX0RFVEVDVElPTikKLSAgICAgICAgdGV4dFJlY29nbml0aW9uRWxlbWVudHMuZGF0YURl
dGVjdG9ycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHJlc3VsdC5kYXRhRGV0ZWN0b3JzLnNpemUo
KSk7Ci0gICAgICAgIGZvciAoYXV0byYgZGF0YURldGVjdG9yIDogcmVzdWx0LmRhdGFEZXRlY3Rv
cnMpIHsKLSAgICAgICAgICAgIGF1dG8gZGF0YURldGVjdG9yQ29udGFpbmVyID0gRGF0YURldGVj
dGlvbjo6Y3JlYXRlRWxlbWVudEZvckltYWdlT3ZlcmxheShkb2N1bWVudCgpLCBkYXRhRGV0ZWN0
b3IpOwotICAgICAgICAgICAgZGF0YURldGVjdG9yQ29udGFpbmVyLT5jbGFzc0xpc3QoKS5hZGQo
aW1hZ2VPdmVybGF5RGF0YURldGVjdG9yQ2xhc3NOYW1lKCkpOwotICAgICAgICAgICAgcm9vdENv
bnRhaW5lci0+YXBwZW5kQ2hpbGQoZGF0YURldGVjdG9yQ29udGFpbmVyKTsKLSAgICAgICAgICAg
IHRleHRSZWNvZ25pdGlvbkVsZW1lbnRzLmRhdGFEZXRlY3RvcnMudW5jaGVja2VkQXBwZW5kKFdU
Rk1vdmUoZGF0YURldGVjdG9yQ29udGFpbmVyKSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBFTkFC
TEUoREFUQV9ERVRFQ1RJT04pCi0KLSAgICAgICAgaWYgKGRvY3VtZW50KCkucXVpcmtzKCkubmVl
ZHNUb0ZvcmNlVXNlclNlbGVjdFdoZW5JbnN0YWxsaW5nSW1hZ2VPdmVybGF5KCkpCi0gICAgICAg
ICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VXNlclNlbGVjdCwg
Q1NTVmFsdWVUZXh0KTsKLSAgICB9Ci0KLSAgICBpZiAoIWhhZEV4aXN0aW5nVGV4dFJlY29nbml0
aW9uRWxlbWVudHMpIHsKLSAgICAgICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxj
b25zdCBTdHJpbmc+IHNoYWRvd1N0eWxlKFN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhvdXRDb3B5aW5n
KGltYWdlT3ZlcmxheVVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihpbWFnZU92ZXJsYXlVc2Vy
QWdlbnRTdHlsZVNoZWV0KSkpOwotICAgICAgICBhdXRvIHN0eWxlID0gSFRNTFN0eWxlRWxlbWVu
dDo6Y3JlYXRlKEhUTUxOYW1lczo6c3R5bGVUYWcsIGRvY3VtZW50KCksIGZhbHNlKTsKLSAgICAg
ICAgc3R5bGUtPnNldFRleHRDb250ZW50KHNoYWRvd1N0eWxlKTsKLSAgICAgICAgc2hhZG93Um9v
dC0+YXBwZW5kQ2hpbGQoV1RGTW92ZShzdHlsZSkpOwotICAgIH0KLQotICAgIGRvY3VtZW50KCku
dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0KLSAgICBhdXRvKiByZW5k
ZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFpczxSZW5kZXJJbWFnZT4ocmVuZGVy
ZXIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkb3duY2FzdDxSZW5kZXJJbWFnZT4oKnJlbmRl
cmVyKS5zZXRIYXNJbWFnZU92ZXJsYXkoKTsKLQotICAgIGF1dG8gY29udGFpbmVyUmVjdCA9IGNv
bnRhaW5lclJlY3RGb3JUZXh0UmVjb2duaXRpb24oKTsKLSAgICBhdXRvIGNvbnZlcnRUb0NvbnRh
aW5lckNvb3JkaW5hdGVzID0gWyZdKGNvbnN0IEZsb2F0UXVhZCYgbm9ybWFsaXplZFF1YWQpIHsK
LSAgICAgICAgYXV0byBxdWFkID0gbm9ybWFsaXplZFF1YWQ7Ci0gICAgICAgIHF1YWQuc2NhbGUo
Y29udGFpbmVyUmVjdC53aWR0aCgpLCBjb250YWluZXJSZWN0LmhlaWdodCgpKTsKLSAgICAgICAg
cXVhZC5tb3ZlKGNvbnRhaW5lclJlY3QueCgpLCBjb250YWluZXJSZWN0LnkoKSk7Ci0gICAgICAg
IHJldHVybiBxdWFkOwotICAgIH07Ci0KLSAgICBib29sIGFwcGx5VXNlclNlbGVjdEFsbCA9IGRv
Y3VtZW50KCkuaXNJbWFnZURvY3VtZW50KCkgfHwgcmVuZGVyZXItPnN0eWxlKCkudXNlclNlbGVj
dCgpICE9IFVzZXJTZWxlY3Q6Ok5vbmU7Ci0gICAgZm9yIChzaXplX3QgbGluZUluZGV4ID0gMDsg
bGluZUluZGV4IDwgcmVzdWx0LmxpbmVzLnNpemUoKTsgKytsaW5lSW5kZXgpIHsKLSAgICAgICAg
YXV0byYgbGluZUVsZW1lbnRzID0gdGV4dFJlY29nbml0aW9uRWxlbWVudHMubGluZXNbbGluZUlu
ZGV4XTsKLSAgICAgICAgYXV0byYgbGluZUNvbnRhaW5lciA9IGxpbmVFbGVtZW50cy5saW5lOwot
ICAgICAgICBhdXRvJiBsaW5lID0gcmVzdWx0LmxpbmVzW2xpbmVJbmRleF07Ci0gICAgICAgIGF1
dG8gbGluZVF1YWQgPSBjb252ZXJ0VG9Db250YWluZXJDb29yZGluYXRlcyhsaW5lLm5vcm1hbGl6
ZWRRdWFkKTsKLSAgICAgICAgaWYgKGxpbmVRdWFkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgIGF1dG8gbGluZUJvdW5kcyA9IHJvdGF0ZWRCb3VuZGluZ1JlY3RX
aXRoTWluaW11bUFuZ2xlT2ZSb3RhdGlvbihsaW5lUXVhZCwgMC4wMSk7Ci0gICAgICAgIGxpbmVD
b250YWluZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgbGluZUJv
dW5kcy5zaXplLndpZHRoKCksIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICBsaW5lQ29u
dGFpbmVyLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCBsaW5lQm91
bmRzLnNpemUuaGVpZ2h0KCksIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICBsaW5lQ29u
dGFpbmVyLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtLCBtYWtl
U3RyaW5nKAotICAgICAgICAgICAgInRyYW5zbGF0ZSgiX3MsCi0gICAgICAgICAgICBzdGQ6OnJv
dW5kKGxpbmVCb3VuZHMuY2VudGVyLngoKSAtIChsaW5lQm91bmRzLnNpemUud2lkdGgoKSAvIDIp
KSwgInB4LCAiX3MsCi0gICAgICAgICAgICBzdGQ6OnJvdW5kKGxpbmVCb3VuZHMuY2VudGVyLnko
KSAtIChsaW5lQm91bmRzLnNpemUuaGVpZ2h0KCkgLyAyKSksICJweCkgIl9zLAotICAgICAgICAg
ICAgbGluZUJvdW5kcy5hbmdsZUluUmFkaWFucyA/IG1ha2VTdHJpbmcoInJvdGF0ZSgiX3MsIGxp
bmVCb3VuZHMuYW5nbGVJblJhZGlhbnMsICJyYWQpICJfcykgOiBlbXB0eVN0cmluZygpCi0gICAg
ICAgICkpOwotCi0gICAgICAgIGF1dG8gb2Zmc2V0QWxvbmdIb3Jpem9udGFsQXhpcyA9IFsmXShj
b25zdCBGbG9hdFBvaW50JiBxdWFkUG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBxdWFkUG9pbnQy
KSB7Ci0gICAgICAgICAgICBhdXRvIGludGVydmFsTGVuZ3RoID0gbGluZUJvdW5kcy5zaXplLndp
ZHRoKCk7Ci0gICAgICAgICAgICBhdXRvIG1pZCA9IG1pZFBvaW50KHF1YWRQb2ludDEsIHF1YWRQ
b2ludDIpOwotICAgICAgICAgICAgbWlkLm1vdmVCeSgtbGluZUJvdW5kcy5jZW50ZXIpOwotICAg
ICAgICAgICAgbWlkLnJvdGF0ZSgtbGluZUJvdW5kcy5hbmdsZUluUmFkaWFucyk7Ci0gICAgICAg
ICAgICByZXR1cm4gaW50ZXJ2YWxMZW5ndGggKiBjbGFtcFRvPGZsb2F0PigwLjUgKyBtaWQueCgp
IC8gaW50ZXJ2YWxMZW5ndGgsIDAsIDEpOwotICAgICAgICB9OwotCi0gICAgICAgIGF1dG8gb2Zm
c2V0c0Fsb25nSG9yaXpvbnRhbEF4aXMgPSBsaW5lLmNoaWxkcmVuLm1hcChbJl0oYXV0byYgY2hp
bGQpIC0+IFdURjo6UmFuZ2U8ZmxvYXQ+IHsKLSAgICAgICAgICAgIGF1dG8gdGV4dFF1YWQgPSBj
b252ZXJ0VG9Db250YWluZXJDb29yZGluYXRlcyhjaGlsZC5ub3JtYWxpemVkUXVhZCk7Ci0gICAg
ICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIG9mZnNldEFsb25nSG9yaXpvbnRhbEF4
aXModGV4dFF1YWQucDEoKSwgdGV4dFF1YWQucDQoKSksCi0gICAgICAgICAgICAgICAgb2Zmc2V0
QWxvbmdIb3Jpem9udGFsQXhpcyh0ZXh0UXVhZC5wMigpLCB0ZXh0UXVhZC5wMygpKQotICAgICAg
ICAgICAgfTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgZm9yIChzaXplX3QgY2hpbGRJbmRleCA9
IDA7IGNoaWxkSW5kZXggPCBsaW5lLmNoaWxkcmVuLnNpemUoKTsgKytjaGlsZEluZGV4KSB7Ci0g
ICAgICAgICAgICBhdXRvJiB0ZXh0Q29udGFpbmVyID0gbGluZUVsZW1lbnRzLmNoaWxkcmVuW2No
aWxkSW5kZXhdOwotICAgICAgICAgICAgYm9vbCBsaW5lSGFzT25lQ2hpbGQgPSBsaW5lLmNoaWxk
cmVuLnNpemUoKSA9PSAxOwotICAgICAgICAgICAgZmxvYXQgaG9yaXpvbnRhbE1hcmdpblRvTWlu
aW1pemVTZWxlY3Rpb25HYXBzID0gbGluZUhhc09uZUNoaWxkID8gMCA6IDAuMTI1OwotICAgICAg
ICAgICAgZmxvYXQgaG9yaXpvbnRhbE9mZnNldCA9IGxpbmVIYXNPbmVDaGlsZCA/IDAgOiAtaG9y
aXpvbnRhbE1hcmdpblRvTWluaW1pemVTZWxlY3Rpb25HYXBzOwotICAgICAgICAgICAgZmxvYXQg
aG9yaXpvbnRhbEV4dGVudCA9IGxpbmVIYXNPbmVDaGlsZCA/IDAgOiBob3Jpem9udGFsTWFyZ2lu
VG9NaW5pbWl6ZVNlbGVjdGlvbkdhcHM7Ci0KLSAgICAgICAgICAgIGlmIChsaW5lSGFzT25lQ2hp
bGQpIHsKLSAgICAgICAgICAgICAgICBob3Jpem9udGFsT2Zmc2V0ICs9IG9mZnNldHNBbG9uZ0hv
cml6b250YWxBeGlzW2NoaWxkSW5kZXhdLmJlZ2luKCk7Ci0gICAgICAgICAgICAgICAgaG9yaXpv
bnRhbEV4dGVudCArPSBvZmZzZXRzQWxvbmdIb3Jpem9udGFsQXhpc1tjaGlsZEluZGV4XS5lbmQo
KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNoaWxkSW5kZXgpIHsKLSAgICAgICAgICAgICAg
ICBob3Jpem9udGFsT2Zmc2V0ICs9IG9mZnNldHNBbG9uZ0hvcml6b250YWxBeGlzW2NoaWxkSW5k
ZXhdLmJlZ2luKCk7Ci0gICAgICAgICAgICAgICAgaG9yaXpvbnRhbEV4dGVudCArPSAob2Zmc2V0
c0Fsb25nSG9yaXpvbnRhbEF4aXNbY2hpbGRJbmRleF0uZW5kKCkgKyBvZmZzZXRzQWxvbmdIb3Jp
em9udGFsQXhpc1tjaGlsZEluZGV4ICsgMV0uYmVnaW4oKSkgLyAyOwotICAgICAgICAgICAgfSBl
bHNlIGlmIChjaGlsZEluZGV4ID09IGxpbmUuY2hpbGRyZW4uc2l6ZSgpIC0gMSkgewotICAgICAg
ICAgICAgICAgIGhvcml6b250YWxPZmZzZXQgKz0gKG9mZnNldHNBbG9uZ0hvcml6b250YWxBeGlz
W2NoaWxkSW5kZXggLSAxXS5lbmQoKSArIG9mZnNldHNBbG9uZ0hvcml6b250YWxBeGlzW2NoaWxk
SW5kZXhdLmJlZ2luKCkpIC8gMjsKLSAgICAgICAgICAgICAgICBob3Jpem9udGFsRXh0ZW50ICs9
IG9mZnNldHNBbG9uZ0hvcml6b250YWxBeGlzW2NoaWxkSW5kZXhdLmVuZCgpOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBob3Jpem9udGFsT2Zmc2V0ICs9IChvZmZzZXRz
QWxvbmdIb3Jpem9udGFsQXhpc1tjaGlsZEluZGV4IC0gMV0uZW5kKCkgKyBvZmZzZXRzQWxvbmdI
b3Jpem9udGFsQXhpc1tjaGlsZEluZGV4XS5iZWdpbigpKSAvIDI7Ci0gICAgICAgICAgICAgICAg
aG9yaXpvbnRhbEV4dGVudCArPSAob2Zmc2V0c0Fsb25nSG9yaXpvbnRhbEF4aXNbY2hpbGRJbmRl
eF0uZW5kKCkgKyBvZmZzZXRzQWxvbmdIb3Jpem9udGFsQXhpc1tjaGlsZEluZGV4ICsgMV0uYmVn
aW4oKSkgLyAyOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBGbG9hdFNpemUgdGFyZ2V0
U2l6ZSB7IGhvcml6b250YWxFeHRlbnQgLSBob3Jpem9udGFsT2Zmc2V0LCBsaW5lQm91bmRzLnNp
emUuaGVpZ2h0KCkgfTsKLSAgICAgICAgICAgIGlmICh0YXJnZXRTaXplLmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgICAgIHRleHRDb250YWluZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NT
UHJvcGVydHlUcmFuc2Zvcm0sICJzY2FsZSgwLCAwKSIpOwotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91
dElmRGltZW5zaW9uc091dE9mRGF0ZSh0ZXh0Q29udGFpbmVyKTsKLQotICAgICAgICAgICAgRmxv
YXRTaXplIHNpemVCZWZvcmVUcmFuc2Zvcm07Ci0gICAgICAgICAgICBpZiAoYXV0byogcmVuZGVy
ZXIgPSB0ZXh0Q29udGFpbmVyLT5yZW5kZXJCb3hNb2RlbE9iamVjdCgpKSB7Ci0gICAgICAgICAg
ICAgICAgc2l6ZUJlZm9yZVRyYW5zZm9ybSA9IHsKLSAgICAgICAgICAgICAgICAgICAgYWRqdXN0
TGF5b3V0VW5pdEZvckFic29sdXRlWm9vbShyZW5kZXJlci0+b2Zmc2V0V2lkdGgoKSwgKnJlbmRl
cmVyKS50b0Zsb2F0KCksCi0gICAgICAgICAgICAgICAgICAgIGFkanVzdExheW91dFVuaXRGb3JB
YnNvbHV0ZVpvb20ocmVuZGVyZXItPm9mZnNldEhlaWdodCgpLCAqcmVuZGVyZXIpLnRvRmxvYXQo
KSwKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAo
c2l6ZUJlZm9yZVRyYW5zZm9ybS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICB0ZXh0Q29u
dGFpbmVyLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtLCAic2Nh
bGUoMCwgMCkiKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgdGV4dENvbnRhaW5lci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVRyYW5zZm9ybSwgbWFrZVN0cmluZygKLSAgICAgICAgICAgICAgICAidHJhbnNsYXRlKCJf
cywKLSAgICAgICAgICAgICAgICBob3Jpem9udGFsT2Zmc2V0ICsgKHRhcmdldFNpemUud2lkdGgo
KSAtIHNpemVCZWZvcmVUcmFuc2Zvcm0ud2lkdGgoKSkgLyAyLCAicHgsICJfcywKLSAgICAgICAg
ICAgICAgICAodGFyZ2V0U2l6ZS5oZWlnaHQoKSAtIHNpemVCZWZvcmVUcmFuc2Zvcm0uaGVpZ2h0
KCkpIC8gMiwgInB4KSAiX3MsCi0gICAgICAgICAgICAgICAgInNjYWxlKCJfcywgdGFyZ2V0U2l6
ZS53aWR0aCgpIC8gc2l6ZUJlZm9yZVRyYW5zZm9ybS53aWR0aCgpLCAiLCAiX3MsIHRhcmdldFNp
emUuaGVpZ2h0KCkgLyBzaXplQmVmb3JlVHJhbnNmb3JtLmhlaWdodCgpLCAiKSAiX3MKLSAgICAg
ICAgICAgICkpOwotCi0gICAgICAgICAgICB0ZXh0Q29udGFpbmVyLT5zZXRJbmxpbmVTdHlsZVBy
b3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VXNlclNlbGVjdCwgYXBwbHlVc2VyU2VsZWN0QWxsID8g
Q1NTVmFsdWVBbGwgOiBDU1NWYWx1ZU5vbmUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRv
Y3VtZW50KCkuaXNJbWFnZURvY3VtZW50KCkpCi0gICAgICAgICAgICBsaW5lQ29udGFpbmVyLT5z
ZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Q3Vyc29yLCBDU1NWYWx1ZVRleHQpOwot
ICAgIH0KLQotI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKLSAgICBmb3IgKHNpemVfdCBpbmRl
eCA9IDA7IGluZGV4IDwgcmVzdWx0LmRhdGFEZXRlY3RvcnMuc2l6ZSgpOyArK2luZGV4KSB7Ci0g
ICAgICAgIGF1dG8gZGF0YURldGVjdG9yQ29udGFpbmVyID0gdGV4dFJlY29nbml0aW9uRWxlbWVu
dHMuZGF0YURldGVjdG9yc1tpbmRleF07Ci0gICAgICAgIGF1dG8mIGRhdGFEZXRlY3RvciA9IHJl
c3VsdC5kYXRhRGV0ZWN0b3JzW2luZGV4XTsKLSAgICAgICAgaWYgKGRhdGFEZXRlY3Rvci5ub3Jt
YWxpemVkUXVhZHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBjb21lIHVwIHdpdGggYSB3YXkgdG8gY29hbGVzY2UgdGhlIGJv
dW5kaW5nIHF1YWRzIGludG8gb25lIG9yIG1vcmUgcm90YXRlZCByZWN0cyB3aXRoIHRoZSBzYW1l
IGFuZ2xlIG9mIHJvdGF0aW9uLgotICAgICAgICBhdXRvIHRhcmdldFF1YWQgPSBjb252ZXJ0VG9D
b250YWluZXJDb29yZGluYXRlcyhkYXRhRGV0ZWN0b3Iubm9ybWFsaXplZFF1YWRzLmZpcnN0KCkp
OwotICAgICAgICBhdXRvIHRhcmdldEJvdW5kcyA9IHJvdGF0ZWRCb3VuZGluZ1JlY3RXaXRoTWlu
aW11bUFuZ2xlT2ZSb3RhdGlvbih0YXJnZXRRdWFkLCAwLjAxKTsKLSAgICAgICAgZGF0YURldGVj
dG9yQ29udGFpbmVyLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIHRh
cmdldEJvdW5kcy5zaXplLndpZHRoKCksIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICBk
YXRhRGV0ZWN0b3JDb250YWluZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlI
ZWlnaHQsIHRhcmdldEJvdW5kcy5zaXplLmhlaWdodCgpLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsK
LSAgICAgICAgZGF0YURldGVjdG9yQ29udGFpbmVyLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENT
U1Byb3BlcnR5VHJhbnNmb3JtLCBtYWtlU3RyaW5nKAotICAgICAgICAgICAgInRyYW5zbGF0ZSgi
X3MsCi0gICAgICAgICAgICBzdGQ6OnJvdW5kKHRhcmdldEJvdW5kcy5jZW50ZXIueCgpIC0gKHRh
cmdldEJvdW5kcy5zaXplLndpZHRoKCkgLyAyKSksICJweCwgIl9zLAotICAgICAgICAgICAgc3Rk
Ojpyb3VuZCh0YXJnZXRCb3VuZHMuY2VudGVyLnkoKSAtICh0YXJnZXRCb3VuZHMuc2l6ZS5oZWln
aHQoKSAvIDIpKSwgInB4KSAiX3MsCi0gICAgICAgICAgICB0YXJnZXRCb3VuZHMuYW5nbGVJblJh
ZGlhbnMgPyBtYWtlU3RyaW5nKCJyb3RhdGUoIl9zLCB0YXJnZXRCb3VuZHMuYW5nbGVJblJhZGlh
bnMsICJyYWQpICJfcykgOiBlbXB0eVN0cmluZygpCi0gICAgICAgICkpOwotICAgIH0KLSNlbmRp
ZiAvLyBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCi0KLSAgICBpZiAoUmVmUHRyIGZyYW1lID0gZG9j
dW1lbnQoKS5mcmFtZSgpKQotICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkuc2NoZWR1bGVD
dXJzb3JVcGRhdGUoKTsKLQotICAgIGlmIChjYWNoZVRleHRSZWNvZ25pdGlvblJlc3VsdHMgPT0g
Q2FjaGVUZXh0UmVjb2duaXRpb25SZXN1bHRzOjpZZXMpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBh
Z2UgPSBkb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgICAgIHBhZ2UtPmNhY2hlVGV4dFJlY29n
bml0aW9uUmVzdWx0KCp0aGlzLCBjb250YWluZXJSZWN0LCByZXN1bHQpOwotICAgIH0KLX0KLQot
I2VuZGlmIC8vIEVOQUJMRShJTUFHRV9BTkFMWVNJUykKLQogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCiAKIFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yIEhUTUxFbGVtZW50OjpzZWxlY3Rpb25S
ZW5kZXJpbmdCZWhhdmlvcihjb25zdCBOb2RlKiBub2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVu
dC5oCmluZGV4IDE1NDY5MThmM2ZlYzBlZDA3OGVkYzc5OTVmYTAyOTU1NmNhYWY1YzUuLjI4Njk0
MjgxYzE4ZjU5YTY4NmVjZjUxMmQ2NmY3ZGY4Yjk4YzU3MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxF
bGVtZW50LmgKQEAgLTEzMiwxOSArMTMyLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RW50ZXJL
ZXlIaW50KGNvbnN0IFN0cmluZyYgdmFsdWUpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IGJvb2wgc2hvdWxkRXh0ZW5kU2VsZWN0aW9uVG9UYXJnZXROb2RlKGNvbnN0IE5vZGUmIHRhcmdl
dE5vZGUsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkJlZm9yZVVwZGF0ZSk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNJbWFnZU92ZXJsYXkoKSBjb25zdDsKLSAgICBXRUJD
T1JFX0VYUE9SVCBib29sIGlzSW1hZ2VPdmVybGF5RGF0YURldGVjdG9yUmVzdWx0KCkgY29uc3Q7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgaXNJbnNpZGVJbWFnZU92ZXJsYXkoY29u
c3QgU2ltcGxlUmFuZ2UmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBpc0luc2lk
ZUltYWdlT3ZlcmxheShjb25zdCBOb2RlJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJv
b2wgaXNJbWFnZU92ZXJsYXlUZXh0KGNvbnN0IE5vZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgYm9vbCBpc0ltYWdlT3ZlcmxheVRleHQoY29uc3QgTm9kZSopOwotICAgIHZvaWQgcmVt
b3ZlSW1hZ2VPdmVybGF5U29vbklmTmVlZGVkKCk7Ci0KLSNpZiBFTkFCTEUoSU1BR0VfQU5BTFlT
SVMpCi0gICAgSW50UmVjdCBjb250YWluZXJSZWN0Rm9yVGV4dFJlY29nbml0aW9uKCk7Ci0gICAg
ZW51bSBjbGFzcyBDYWNoZVRleHRSZWNvZ25pdGlvblJlc3VsdHMgOiBib29sIHsgTm8sIFllcyB9
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlV2l0aFRleHRSZWNvZ25pdGlvblJlc3Vs
dChjb25zdCBUZXh0UmVjb2duaXRpb25SZXN1bHQmLCBDYWNoZVRleHRSZWNvZ25pdGlvblJlc3Vs
dHMgPSBDYWNoZVRleHRSZWNvZ25pdGlvblJlc3VsdHM6Olllcyk7Ci0jZW5kaWYKIAogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCiAgICAgc3RhdGljIFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9y
IHNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yKGNvbnN0IE5vZGUqKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IDMyM2ZjNDgxMmUzODdmNmM1OTNmNDZjMmNj
NGZiMGUwNjJkOTdkMGYuLmMzMjZiOGJhMGE4ZmY1M2VjNWE5MTFjODBmY2IxZWI5Y2Q2M2YwMDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAtNjEsNiArNjEs
NyBAQAogI2luY2x1ZGUgIkhUTUxTb3VyY2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRyYWNr
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJJbWFn
ZU92ZXJsYXkuaCIKICNpbmNsdWRlICJJbmJhbmRHZW5lcmljVGV4dFRyYWNrLmgiCiAjaW5jbHVk
ZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZS5oIgogI2luY2x1ZGUgIkluYmFuZFdlYlZUVFRleHRU
cmFjay5oIgpAQCAtMzE0MCw3ICszMTQxLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZWVr
V2l0aFRvbGVyYW5jZShjb25zdCBNZWRpYVRpbWUmIGluVGltZSwgY29uc3QgTWVkaWFUaW0KICAg
ICBpZiAocHJvY2Vzc2luZ1VzZXJHZXN0dXJlRm9yTWVkaWEoKSkKICAgICAgICAgbWVkaWFTZXNz
aW9uKCkucmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1
aXJlVXNlckdlc3R1cmVUb0NvbnRyb2xDb250cm9sc01hbmFnZXIpOwogCi0gICAgcmVtb3ZlSW1h
Z2VPdmVybGF5U29vbklmTmVlZGVkKCk7CisgICAgcmVtb3ZlSW1hZ2VPdmVybGF5U29vbklmTmVl
ZGVkKCp0aGlzKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZWVrVGFzaygpCkBAIC0z
NzM0LDcgKzM3MzUsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBsYXlJbnRlcm5hbCgpCiAg
ICAgbV9hdXRvcGxheWluZyA9IGZhbHNlOwogICAgIHVwZGF0ZVBsYXlTdGF0ZSgpOwogCi0gICAg
cmVtb3ZlSW1hZ2VPdmVybGF5U29vbklmTmVlZGVkKCk7CisgICAgcmVtb3ZlSW1hZ2VPdmVybGF5
U29vbklmTmVlZGVkKCp0aGlzKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpwYXVzZSgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKaW5kZXgg
ZDE3OTkxNzAxOTgxYTgwMTk0YmQyM2UzMDhmNmUzN2E1YmRiNWU4My4uYWQ0MjUzNGJjOWNiZjk2
NmM1MjM1N2FjN2MyM2NjNDZkMjAwNWJjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29u
dGV4dE1lbnVDb250cm9sbGVyLmNwcApAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIkhUTUxG
b3JtQ29udHJvbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNs
dWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiSW1hZ2VPdmVybGF5LmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIK
ICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCkBAIC05NDMsNyArOTQ0LDcgQEAgdm9pZCBDb250ZXh0
TWVudUNvbnRyb2xsZXI6OnBvcHVsYXRlKCkKICAgICAgICAgfQogCiAgICAgICAgIGF1dG8gc2Vs
ZWN0ZWRSYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yYW5nZSgpOwotICAg
ICAgICBib29sIHNlbGVjdGlvbklzSW5zaWRlSW1hZ2VPdmVybGF5ID0gc2VsZWN0ZWRSYW5nZSAm
JiBIVE1MRWxlbWVudDo6aXNJbnNpZGVJbWFnZU92ZXJsYXkoKnNlbGVjdGVkUmFuZ2UpOworICAg
ICAgICBib29sIHNlbGVjdGlvbklzSW5zaWRlSW1hZ2VPdmVybGF5ID0gc2VsZWN0ZWRSYW5nZSAm
JiBpc0luc2lkZUltYWdlT3ZlcmxheSgqc2VsZWN0ZWRSYW5nZSk7CiAgICAgICAgIGJvb2wgc2hv
dWxkU2hvd0l0ZW1zRm9yTm9uRWRpdGFibGVUZXh0ID0gKFsmXSB7CiAgICAgICAgICAgICBpZiAo
IWxpbmtVUkwuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKaW5kZXggYTM3YWNiNTAyOGQzYjYxNmQzNTYy
NTYyZDJhN2Q0MGQyODBkOGM4NC4uOTQ3Y2RlNDJkZDNhNWI4MzJhNTAyNTM4YzBjMzY2YWUyYjIz
N2Q0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKQEAgLTY3LDYgKzY3
LDcgQEAKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNp
bmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCisjaW5jbHVkZSAiSW1hZ2VPdmVybGF5LmgiCiAj
aW5jbHVkZSAiTW9kZWwuaCIKICNpbmNsdWRlICJNb3ZlU2VsZWN0aW9uQ29tbWFuZC5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKQEAgLTc5OSw3ICs4MDAsNyBAQCBFbGVtZW50KiBEcmFnQ29udHJvbGxl
cjo6ZHJhZ2dhYmxlRWxlbWVudChjb25zdCBGcmFtZSogc291cmNlRnJhbWUsIEVsZW1lbnQqIHN0
YQogI2VuZGlmCiAKICAgICBhdXRvIHNlbGVjdGlvbkRyYWdFbGVtZW50ID0gc3RhdGUudHlwZS5j
b250YWlucyhEcmFnU291cmNlQWN0aW9uOjpTZWxlY3Rpb24pICYmIG1fZHJhZ1NvdXJjZUFjdGlv
bi5jb250YWlucyhEcmFnU291cmNlQWN0aW9uOjpTZWxlY3Rpb24pID8gc3RhcnRFbGVtZW50IDog
bnVsbHB0cjsKLSAgICBpZiAoSFRNTEVsZW1lbnQ6OmlzSW1hZ2VPdmVybGF5VGV4dChzdGFydEVs
ZW1lbnQpKQorICAgIGlmIChpc0ltYWdlT3ZlcmxheVRleHQoc3RhcnRFbGVtZW50KSkKICAgICAg
ICAgcmV0dXJuIHNlbGVjdGlvbkRyYWdFbGVtZW50OwogCiAgICAgZm9yIChhdXRvKiBlbGVtZW50
ID0gc3RhcnRFbGVtZW50OyBlbGVtZW50OyBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50T3JTaGFk
b3dIb3N0RWxlbWVudCgpKSB7CkBAIC0xMDQxLDcgKzEwNDIsNyBAQCBib29sIERyYWdDb250cm9s
bGVyOjpzdGFydERyYWcoRnJhbWUmIHNyYywgY29uc3QgRHJhZ1N0YXRlJiBzdGF0ZSwgT3B0aW9u
U2V0PERyYQogICAgICAgICAgICAgc3JjLmVkaXRvcigpLndpbGxXcml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZCgqc2VsZWN0aW9uUmFuZ2UpOwogICAgICAgICAgICAgYXV0byBzZWxlY3Rpb24gPSBz
cmMuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgICAgICAgICBib29sIHNob3VsZERyYWdB
c1BsYWluVGV4dCA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChzZWxlY3Rpb24uc3RhcnQoKSk7
Ci0gICAgICAgICAgICBpZiAoYXV0byByYW5nZSA9IHNlbGVjdGlvbi5yYW5nZSgpOyByYW5nZSAm
JiBIVE1MRWxlbWVudDo6aXNJbnNpZGVJbWFnZU92ZXJsYXkoKnJhbmdlKSkKKyAgICAgICAgICAg
IGlmIChhdXRvIHJhbmdlID0gc2VsZWN0aW9uLnJhbmdlKCk7IHJhbmdlICYmIGlzSW5zaWRlSW1h
Z2VPdmVybGF5KCpyYW5nZSkpCiAgICAgICAgICAgICAgICAgc2hvdWxkRHJhZ0FzUGxhaW5UZXh0
ID0gdHJ1ZTsKIAogICAgICAgICAgICAgaWYgKHNob3VsZERyYWdBc1BsYWluVGV4dCkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDZlYmJjNDdhNDZjZDEyZTc4ODg4OGVm
ZTQ3N2FkZDYzY2I2ZDFkYjcuLmI1N2Q2ZjJlZWEwYmUwOWFhMzFlYjg3NGViZGRlNTAxODQzNGZl
NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTY5LDYgKzY5LDcgQEAK
ICNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIK
ICNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkltYWdlT3ZlcmxheS5oIgogI2luY2x1ZGUg
IkltYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24uaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCkBAIC00NDksNyArNDUwLDcgQEAg
c3RhdGljIGlubGluZSBib29sIGRpc3BhdGNoU2VsZWN0U3RhcnQoTm9kZSogbm9kZSkKIAogc3Rh
dGljIE5vZGUqIG5vZGVUb1NlbGVjdE9uTW91c2VEb3duRm9yTm9kZShOb2RlJiB0YXJnZXROb2Rl
KQogewotICAgIGlmIChIVE1MRWxlbWVudDo6aXNJbnNpZGVJbWFnZU92ZXJsYXkodGFyZ2V0Tm9k
ZSkpCisgICAgaWYgKGlzSW5zaWRlSW1hZ2VPdmVybGF5KHRhcmdldE5vZGUpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChSZWZQdHIgcm9vdFVzZXJTZWxlY3RBbGwgPSBQb3Np
dGlvbjo6cm9vdFVzZXJTZWxlY3RBbGxGb3JOb2RlKCZ0YXJnZXROb2RlKSkKQEAgLTcyMCw3ICs3
MjEsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6Y2FuTW91c2VEb3duU3RhcnRTZWxlY3QoY29uc3Qg
TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZQogICAgIGlmICghbm9kZSB8fCAhbm9kZS0+
cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoSFRNTEVsZW1lbnQ6
OmlzSW1hZ2VPdmVybGF5VGV4dCgqbm9kZSkpCisgICAgaWYgKGlzSW1hZ2VPdmVybGF5VGV4dCgq
bm9kZSkpCiAgICAgICAgIHJldHVybiBub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLnVzZXJTZWxl
Y3RJbmNsdWRpbmdJbmVydCgpICE9IFVzZXJTZWxlY3Q6Ok5vbmU7CiAKICAgICByZXR1cm4gbm9k
ZS0+Y2FuU3RhcnRTZWxlY3Rpb24oKSB8fCBQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdEFsbChu
b2RlLmdldCgpKTsKQEAgLTc2Niw4ICs3NjcsOCBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxl
TW91c2VQcmVzc0V2ZW50KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2ZQog
ICAgIC8vIEJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTM5
MAogCiAgICAgLy8gU2luZ2xlIG1vdXNlIGRvd24gb24gbGlua3Mgb3IgaW1hZ2VzIGNhbiBhbHdh
eXMgdHJpZ2dlciBkcmFnLW4tZHJvcC4KLSAgICBib29sIGlzSW1hZ2VPdmVybGF5VGV4dCA9IEhU
TUxFbGVtZW50Ojppc0ltYWdlT3ZlcmxheVRleHQoZXZlbnQudGFyZ2V0Tm9kZSgpKTsKLSAgICBi
b29sIGlzTW91c2VEb3duT25MaW5rT3JJbWFnZSA9IGV2ZW50LmlzT3ZlckxpbmsoKSB8fCAoZXZl
bnQuaGl0VGVzdFJlc3VsdCgpLmltYWdlKCkgJiYgIWlzSW1hZ2VPdmVybGF5VGV4dCk7CisgICAg
Ym9vbCBpc1RleHRJbkltYWdlT3ZlcmxheSA9IGlzSW1hZ2VPdmVybGF5VGV4dChldmVudC50YXJn
ZXROb2RlKCkpOworICAgIGJvb2wgaXNNb3VzZURvd25PbkxpbmtPckltYWdlID0gZXZlbnQuaXNP
dmVyTGluaygpIHx8IChldmVudC5oaXRUZXN0UmVzdWx0KCkuaW1hZ2UoKSAmJiAhaXNUZXh0SW5J
bWFnZU92ZXJsYXkpOwogICAgIG1fbW91c2VEb3duTWF5U3RhcnREcmFnID0gc2luZ2xlQ2xpY2sg
JiYgKCFldmVudC5ldmVudCgpLnNoaWZ0S2V5KCkgfHwgaXNNb3VzZURvd25PbkxpbmtPckltYWdl
KSAmJiBzaG91bGRBbGxvd01vdXNlRG93blRvU3RhcnREcmFnKCk7CiAjZW5kaWYKIApAQCAtMTAy
Myw3ICsxMDI0LDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnVwZGF0ZVNlbGVjdGlvbkZvck1vdXNl
RHJhZyhjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWwKICAgICBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNldFNlbGVjdGlvbkJ5TW91c2VJZkRpZmZlcmVudChuZXdTZWxlY3Rpb24sIG1fZnJh
bWUuc2VsZWN0aW9uKCkuZ3JhbnVsYXJpdHkoKSwKICAgICAgICAgRnJhbWVTZWxlY3Rpb246OkVu
ZFBvaW50c0FkanVzdG1lbnRNb2RlOjpBZGp1c3RBdEJpZGlCb3VuZGFyeSk7CiAKLSAgICBpZiAo
b2xkU2VsZWN0aW9uICE9IG5ld1NlbGVjdGlvbiAmJiBIVE1MRWxlbWVudDo6aXNJbWFnZU92ZXJs
YXlUZXh0KG5ld1NlbGVjdGlvbi5zdGFydCgpLmNvbnRhaW5lck5vZGUoKSkgJiYgSFRNTEVsZW1l
bnQ6OmlzSW1hZ2VPdmVybGF5VGV4dChuZXdTZWxlY3Rpb24uZW5kKCkuY29udGFpbmVyTm9kZSgp
KSkKKyAgICBpZiAob2xkU2VsZWN0aW9uICE9IG5ld1NlbGVjdGlvbiAmJiBpc0ltYWdlT3Zlcmxh
eVRleHQobmV3U2VsZWN0aW9uLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgpKSAmJiBpc0ltYWdlT3Zl
cmxheVRleHQobmV3U2VsZWN0aW9uLmVuZCgpLmNvbnRhaW5lck5vZGUoKSkpCiAgICAgICAgIGlu
dmFsaWRhdGVDbGljaygpOwogfQogI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpCkBAIC0x
MjAwLDcgKzEyMDEsNyBAQCBIaXRUZXN0UmVzdWx0IEV2ZW50SGFuZGxlcjo6aGl0VGVzdFJlc3Vs
dEF0UG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50LCBPcHRpbwogCiAgICAgUmVmUHRyIGlu
bmVyTm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKICAgICBpZiAocmVxdWVzdC5kaXNhbGxvd3NV
c2VyQWdlbnRTaGFkb3dDb250ZW50KCkKLSAgICAgICAgfHwgKHJlcXVlc3QuZGlzYWxsb3dzVXNl
ckFnZW50U2hhZG93Q29udGVudEV4Y2VwdEZvckltYWdlT3ZlcmxheXMoKSAmJiBpbm5lck5vZGUg
JiYgIUhUTUxFbGVtZW50Ojppc0luc2lkZUltYWdlT3ZlcmxheSgqaW5uZXJOb2RlKSkpCisgICAg
ICAgIHx8IChyZXF1ZXN0LmRpc2FsbG93c1VzZXJBZ2VudFNoYWRvd0NvbnRlbnRFeGNlcHRGb3JJ
bWFnZU92ZXJsYXlzKCkgJiYgaW5uZXJOb2RlICYmICFpc0luc2lkZUltYWdlT3ZlcmxheSgqaW5u
ZXJOb2RlKSkpCiAgICAgICAgIHJlc3VsdC5zZXRUb05vblVzZXJBZ2VudFNoYWRvd0FuY2VzdG9y
KCk7CiAKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTUyMSw3ICsxNTIyLDcgQEAgc3RkOjpvcHRp
b25hbDxDdXJzb3I+IEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0IEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwgYm8KIAogICAgIHN3aXRjaCAoc3R5bGUgPyBzdHlsZS0+Y3Vyc29yKCkgOiBD
dXJzb3JUeXBlOjpBdXRvKSB7CiAgICAgY2FzZSBDdXJzb3JUeXBlOjpBdXRvOiB7Ci0gICAgICAg
IGlmIChIVE1MRWxlbWVudDo6aXNJbWFnZU92ZXJsYXlUZXh0KG5vZGUuZ2V0KCkpKSB7CisgICAg
ICAgIGlmIChpc0ltYWdlT3ZlcmxheVRleHQobm9kZS5nZXQoKSkpIHsKICAgICAgICAgICAgIGF1
dG8qIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAgICAgIGlmIChyZW5kZXJl
ciAmJiByZW5kZXJlci0+c3R5bGUoKS51c2VyU2VsZWN0SW5jbHVkaW5nSW5lcnQoKSAhPSBVc2Vy
U2VsZWN0OjpOb25lKQogICAgICAgICAgICAgICAgIHJldHVybiBpQmVhbTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW1hZ2VPdmVybGF5Q29udHJvbGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ltYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCmluZGV4IDdjNTgyYmU2YzJl
NzdjOTE4YzZjMWRkZTE3NjM5M2JiNzU0ZjIyYjAuLmZiMDZjN2Y0ZTE2NmY2NGI5OTJlYWQ1NTli
N2E1ZWQxYzNiZTZjMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW1hZ2VPdmVy
bGF5Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9JbWFnZU92ZXJsYXlD
b250cm9sbGVyLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9u
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQu
aCIKKyNpbmNsdWRlICJJbWFnZU92ZXJsYXkuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5j
bHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTcxLDcgKzcyLDcgQEAg
dm9pZCBJbWFnZU92ZXJsYXlDb250cm9sbGVyOjpzZWxlY3Rpb25RdWFkc0RpZENoYW5nZShGcmFt
ZSYgZnJhbWUsIGNvbnN0IFZlY3RvcjwKICAgICAgICAgaWYgKCFzZWxlY3RlZFJhbmdlKQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgaWYgKCFIVE1MRWxlbWVudDo6aXNJ
bnNpZGVJbWFnZU92ZXJsYXkoKnNlbGVjdGVkUmFuZ2UpKQorICAgICAgICBpZiAoIWlzSW5zaWRl
SW1hZ2VPdmVybGF5KCpzZWxlY3RlZFJhbmdlKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgICAgIGlmIChSZWZQdHIgaG9zdCA9IHNlbGVjdGVkUmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCkuc2hhZG93SG9zdCgpOyBpczxIVE1MRWxlbWVudD4oaG9zdCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNw
cAppbmRleCAxYWNkNTk2OTdhNDQ2OWFhMmFmOTQ1MjJkYmZkZTI5YTcyNzJhZTliLi41YWQ0YWUy
ODdhMjMxMDY2ZjhlN2ViYzMyMGYwZGI4YWQ5MzZiM2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAg
LTc2LDYgKzc2LDcgQEAKICNpbmNsdWRlICJIaXN0b3J5Q29udHJvbGxlci5oIgogI2luY2x1ZGUg
Ikhpc3RvcnlJdGVtLmgiCiAjaW5jbHVkZSAiSURCQ29ubmVjdGlvblRvU2VydmVyLmgiCisjaW5j
bHVkZSAiSW1hZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiSW1hZ2VPdmVybGF5Q29udHJvbGxlci5o
IgogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRy
b2xsZXIuaCIKQEAgLTM3MjEsNyArMzcyMiw3IEBAIHZvaWQgUGFnZTo6dXBkYXRlRWxlbWVudHNX
aXRoVGV4dFJlY29nbml0aW9uUmVzdWx0cygpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAg
ICAgICBhdXRvJiBbcmVzdWx0LCBjb250YWluZXJSZWN0XSA9IGVudHJ5LnZhbHVlOwotICAgICAg
ICBhdXRvIG5ld0NvbnRhaW5lclJlY3QgPSBwcm90ZWN0ZWRFbGVtZW50LT5jb250YWluZXJSZWN0
Rm9yVGV4dFJlY29nbml0aW9uKCk7CisgICAgICAgIGF1dG8gbmV3Q29udGFpbmVyUmVjdCA9IGNv
bnRhaW5lclJlY3RGb3JJbWFnZU92ZXJsYXkocHJvdGVjdGVkRWxlbWVudC5nZXQoKSk7CiAgICAg
ICAgIGlmIChjb250YWluZXJSZWN0ID09IG5ld0NvbnRhaW5lclJlY3QpCiAgICAgICAgICAgICBj
b250aW51ZTsKIApAQCAtMzczMSwxMSArMzczMiw4IEBAIHZvaWQgUGFnZTo6dXBkYXRlRWxlbWVu
dHNXaXRoVGV4dFJlY29nbml0aW9uUmVzdWx0cygpCiAKICAgICBmb3IgKGF1dG8mIFtlbGVtZW50
LCByZXN1bHRdIDogZWxlbWVudHNUb1VwZGF0ZSkgewogICAgICAgICBlbGVtZW50LT5kb2N1bWVu
dCgpLmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpJbnRlcm5hbEFzeW5jVGFzaywg
W3Jlc3VsdCA9IFRleHRSZWNvZ25pdGlvblJlc3VsdCB7IHJlc3VsdCB9LCB3ZWFrRWxlbWVudCA9
IFdlYWtQdHIgeyBlbGVtZW50IH1dIHsKLSAgICAgICAgICAgIFJlZlB0ciBlbGVtZW50IHsgd2Vh
a0VsZW1lbnQuZ2V0KCkgfTsKLSAgICAgICAgICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGVsZW1lbnQtPnVwZGF0ZVdpdGhUZXh0UmVjb2du
aXRpb25SZXN1bHQocmVzdWx0LCBIVE1MRWxlbWVudDo6Q2FjaGVUZXh0UmVjb2duaXRpb25SZXN1
bHRzOjpObyk7CisgICAgICAgICAgICBpZiAoUmVmUHRyIGVsZW1lbnQgPSB3ZWFrRWxlbWVudC5n
ZXQoKSkKKyAgICAgICAgICAgICAgICB1cGRhdGVXaXRoVGV4dFJlY29nbml0aW9uUmVzdWx0KCpl
bGVtZW50LCByZXN1bHQsIENhY2hlVGV4dFJlY29nbml0aW9uUmVzdWx0czo6Tm8pOwogICAgICAg
ICB9KTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9JbWFn
ZU92ZXJsYXlDb250cm9sbGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvSW1hZ2VP
dmVybGF5Q29udHJvbGxlck1hYy5tbQppbmRleCAyMmNkMzI3MzllYmYwODNkMjVmYzhiYzQxMzRl
MjkwMDBjN2M4NTk1Li44YzY0ZDlmY2NkMDI3ZmY0ZGI2OGRhNGM1MWVjNTI5NGIxNWEwY2Y3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9JbWFnZU92ZXJsYXlDb250cm9sbGVy
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0ltYWdlT3ZlcmxheUNvbnRyb2xs
ZXJNYWMubW0KQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgIkZyYW1lVmlldy5oIgogI2ltcG9y
dCAiSFRNTEVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxOYW1lcy5oIgorI2ltcG9ydCAiSW1hZ2VP
dmVybGF5LmgiCiAjaW1wb3J0ICJJbWFnZU92ZXJsYXlEYXRhRGV0ZWN0aW9uUmVzdWx0SWRlbnRp
Zmllci5oIgogI2ltcG9ydCAiSW50UmVjdC5oIgogI2ltcG9ydCAiUGFnZS5oIgpAQCAtNTAsNyAr
NTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgSW1hZ2VPdmVybGF5Q29udHJvbGxl
cjo6dXBkYXRlRGF0YURldGVjdG9ySGlnaGxpZ2h0cyhjb25zdCBIVE1MRWxlbWVudCYgb3Zlcmxh
eUhvc3QpCiB7Ci0gICAgaWYgKCFvdmVybGF5SG9zdC5oYXNJbWFnZU92ZXJsYXkoKSkgeworICAg
IGlmICghaGFzSW1hZ2VPdmVybGF5KG92ZXJsYXlIb3N0KSkgewogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgY2xlYXJEYXRhRGV0ZWN0b3JIaWdobGlnaHRzKCk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTU4LDcgKzU5LDcgQEAgdm9pZCBJbWFnZU92ZXJsYXlDb250cm9sbGVy
Ojp1cGRhdGVEYXRhRGV0ZWN0b3JIaWdobGlnaHRzKGNvbnN0IEhUTUxFbGVtZW50JiBvdmUKIAog
ICAgIFZlY3RvcjxSZWY8SFRNTEVsZW1lbnQ+PiBkYXRhRGV0ZWN0b3JSZXN1bHRFbGVtZW50czsK
ICAgICBmb3IgKGF1dG8mIGNoaWxkIDogZGVzY2VuZGFudHNPZlR5cGU8SFRNTEVsZW1lbnQ+KCpv
dmVybGF5SG9zdC51c2VyQWdlbnRTaGFkb3dSb290KCkpKSB7Ci0gICAgICAgIGlmIChjaGlsZC5p
c0ltYWdlT3ZlcmxheURhdGFEZXRlY3RvclJlc3VsdCgpICYmIGNoaWxkLnJlbmRlcmVyKCkpCisg
ICAgICAgIGlmIChpc0ltYWdlT3ZlcmxheURhdGFEZXRlY3RvclJlc3VsdChjaGlsZCkgJiYgY2hp
bGQucmVuZGVyZXIoKSkKICAgICAgICAgICAgIGRhdGFEZXRlY3RvclJlc3VsdEVsZW1lbnRzLmFw
cGVuZChjaGlsZCk7CiAgICAgfQogCkBAIC0xOTAsNyArMTkxLDcgQEAgdm9pZCBJbWFnZU92ZXJs
YXlDb250cm9sbGVyOjplbGVtZW50VW5kZXJNb3VzZURpZENoYW5nZShGcmFtZSYgZnJhbWUsIEVs
ZW1lbnQqIGUKICAgICBpZiAoIWVsZW1lbnRVbmRlck1vdXNlICYmIG1faG9zdEVsZW1lbnRGb3JE
YXRhRGV0ZWN0b3JzICYmIGZyYW1lLmRvY3VtZW50KCkgIT0gJm1faG9zdEVsZW1lbnRGb3JEYXRh
RGV0ZWN0b3JzLT5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWVsZW1l
bnRVbmRlck1vdXNlIHx8ICFIVE1MRWxlbWVudDo6aXNJbnNpZGVJbWFnZU92ZXJsYXkoKmVsZW1l
bnRVbmRlck1vdXNlKSkgeworICAgIGlmICghZWxlbWVudFVuZGVyTW91c2UgfHwgIWlzSW5zaWRl
SW1hZ2VPdmVybGF5KCplbGVtZW50VW5kZXJNb3VzZSkpIHsKICAgICAgICAgbV9ob3N0RWxlbWVu
dEZvckRhdGFEZXRlY3RvcnMgPSBudWxscHRyOwogICAgICAgICB1bmluc3RhbGxQYWdlT3Zlcmxh
eUlmTmVlZGVkKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTIwNSw3ICsyMDYsNyBAQCB2b2lkIElt
YWdlT3ZlcmxheUNvbnRyb2xsZXI6OmVsZW1lbnRVbmRlck1vdXNlRGlkQ2hhbmdlKEZyYW1lJiBm
cmFtZSwgRWxlbWVudCogZQogICAgIH0KIAogICAgIFJlZiBpbWFnZU92ZXJsYXlIb3N0ID0gZG93
bmNhc3Q8SFRNTEVsZW1lbnQ+KCpzaGFkb3dIb3N0KTsKLSAgICBpZiAoIWltYWdlT3ZlcmxheUhv
c3QtPmhhc0ltYWdlT3ZlcmxheSgpKSB7CisgICAgaWYgKCFoYXNJbWFnZU92ZXJsYXkoaW1hZ2VP
dmVybGF5SG9zdC5nZXQoKSkpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIG1faG9zdEVsZW1lbnRGb3JEYXRhRGV0ZWN0b3JzID0gbnVsbHB0cjsKICAgICAgICAgdW5p
bnN0YWxsUGFnZU92ZXJsYXlJZk5lZWRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hp
dFRlc3RSZXN1bHQuY3BwCmluZGV4IGJjYTMyMDcxNGQ5ZDk3ODA4YzVkYWVhOGMzZGQ1ZDI2ZTA1
ODFmODUuLjQ4OTk2MTNjZWQ1MGRlYmRmMDYwNDhhMjA1ZWNjZDZhYzljOTU2MjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKQEAgLTM4LDYgKzM4LDcgQEAK
ICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJJbWFnZU92
ZXJsYXkuaCIKICNpbmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIK
ICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKQEAgLTMzMiw3ICszMzMsNyBAQCBSZWZQdHI8
Tm9kZT4gSGl0VGVzdFJlc3VsdDo6bm9kZUZvckltYWdlRGF0YSgpIGNvbnN0CiAgICAgaWYgKCFt
X2lubmVyTm9uU2hhcmVkTm9kZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAo
SFRNTEVsZW1lbnQ6OmlzSW5zaWRlSW1hZ2VPdmVybGF5KCptX2lubmVyTm9uU2hhcmVkTm9kZSkp
CisgICAgaWYgKGlzSW5zaWRlSW1hZ2VPdmVybGF5KCptX2lubmVyTm9uU2hhcmVkTm9kZSkpCiAg
ICAgICAgIHJldHVybiBtX2lubmVyTm9uU2hhcmVkTm9kZS0+c2hhZG93SG9zdCgpOwogCiAgICAg
cmV0dXJuIG1faW5uZXJOb25TaGFyZWROb2RlOwpAQCAtNjUzLDcgKzY1NCw3IEBAIGlubGluZSBI
aXRUZXN0UHJvZ3Jlc3MgSGl0VGVzdFJlc3VsdDo6YWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3Vs
dENvbW1vbihOb2RlKiBuCiAgICAgICAgIHJldHVybiBIaXRUZXN0UHJvZ3Jlc3M6OkNvbnRpbnVl
OwogCiAgICAgaWYgKChyZXF1ZXN0LmRpc2FsbG93c1VzZXJBZ2VudFNoYWRvd0NvbnRlbnQoKSAm
JiBub2RlLT5pc0luVXNlckFnZW50U2hhZG93VHJlZSgpKQotICAgICAgICB8fCAocmVxdWVzdC5k
aXNhbGxvd3NVc2VyQWdlbnRTaGFkb3dDb250ZW50RXhjZXB0Rm9ySW1hZ2VPdmVybGF5cygpICYm
ICFIVE1MRWxlbWVudDo6aXNJbnNpZGVJbWFnZU92ZXJsYXkoKm5vZGUpICYmIG5vZGUtPmlzSW5V
c2VyQWdlbnRTaGFkb3dUcmVlKCkpKQorICAgICAgICB8fCAocmVxdWVzdC5kaXNhbGxvd3NVc2Vy
QWdlbnRTaGFkb3dDb250ZW50RXhjZXB0Rm9ySW1hZ2VPdmVybGF5cygpICYmICFpc0luc2lkZUlt
YWdlT3ZlcmxheSgqbm9kZSkgJiYgbm9kZS0+aXNJblVzZXJBZ2VudFNoYWRvd1RyZWUoKSkpCiAg
ICAgICAgIG5vZGUgPSBub2RlLT5kb2N1bWVudCgpLmFuY2VzdG9yTm9kZUluVGhpc1Njb3BlKG5v
ZGUpOwogCiAgICAgbXV0YWJsZUxpc3RCYXNlZFRlc3RSZXN1bHQoKS5hZGQoKm5vZGUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKaW5kZXggNGU4OWMyZTgwYjc4MDE0
MDdkOGVlYTBhZTA2YzM0OTY2NjEyNTAxMi4uZTg2YWVjZGQ4MDBhNWY0ZmY2NDc5ODljMjYxZWY2
N2NlNjM3MGExZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklt
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCkBA
IC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiSFRNTE1hcEVsZW1lbnQuaCIKICNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiSW1hZ2VP
dmVybGF5LmgiCiAjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JJbmxpbmVCb3guaCIKICNpbmNsdWRl
ICJJbmxpbmVJdGVyYXRvckxpbmUuaCIKICNpbmNsdWRlICJQYWdlLmgiCkBAIC0xNDAsNyArMTQx
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIFJlbmRlckltYWdlOjpSZW5kZXJJbWFn
ZShFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlLCBTdHlsZUltYWdlKiBzdHls
ZUltYWdlLCBjb25zdCBmbG9hdCBpbWFnZURldmljZVBpeGVsUmF0aW8pCiAgICAgOiBSZW5kZXJS
ZXBsYWNlZChlbGVtZW50LCBXVEZNb3ZlKHN0eWxlKSwgSW50U2l6ZSgpKQogICAgICwgbV9pbWFn
ZVJlc291cmNlKHN0eWxlSW1hZ2UgPyBtYWtlVW5pcXVlPFJlbmRlckltYWdlUmVzb3VyY2VTdHls
ZUltYWdlPigqc3R5bGVJbWFnZSkgOiBtYWtlVW5pcXVlPFJlbmRlckltYWdlUmVzb3VyY2U+KCkp
Ci0gICAgLCBtX2hhc0ltYWdlT3ZlcmxheShpczxIVE1MRWxlbWVudD4oZWxlbWVudCkgJiYgZG93
bmNhc3Q8SFRNTEVsZW1lbnQ+KGVsZW1lbnQpLmhhc0ltYWdlT3ZlcmxheSgpKQorICAgICwgbV9o
YXNJbWFnZU92ZXJsYXkoaXM8SFRNTEVsZW1lbnQ+KGVsZW1lbnQpICYmIGhhc0ltYWdlT3Zlcmxh
eShkb3duY2FzdDxIVE1MRWxlbWVudD4oZWxlbWVudCkpKQogICAgICwgbV9pbWFnZURldmljZVBp
eGVsUmF0aW8oaW1hZ2VEZXZpY2VQaXhlbFJhdGlvKQogewogICAgIHVwZGF0ZUFsdFRleHQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCBlM2RkZmM5YzIwZDgzYmQ0ZDY4
NGI5YjkwM2E5NjExZmJkOWNkM2VlLi40NWVlNmUyZDFlZmViOGFiYzUzMjQwMjQ3NmQxOGE1Y2E2
N2IxN2IyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0xMTEsNiArMTEx
LDcgQEAKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSURCUmVxdWVzdC5o
IgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiSW1hZ2VPdmVybGF5Lmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRlYnVnZ2FibGVUeXBlLmgiCkBAIC01ODA3LDcg
KzU4MDgsNyBAQCB2b2lkIEludGVybmFsczo6aW5zdGFsbEltYWdlT3ZlcmxheShFbGVtZW50JiBl
bGVtZW50LCBWZWN0b3I8SW1hZ2VPdmVybGF5TGluZT4mJgogICAgICAgICByZXR1cm47CiAKICNp
ZiBFTkFCTEUoSU1BR0VfQU5BTFlTSVMpCi0gICAgZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGVsZW1l
bnQpLnVwZGF0ZVdpdGhUZXh0UmVjb2duaXRpb25SZXN1bHQoVGV4dFJlY29nbml0aW9uUmVzdWx0
IHsKKyAgICB1cGRhdGVXaXRoVGV4dFJlY29nbml0aW9uUmVzdWx0KGRvd25jYXN0PEhUTUxFbGVt
ZW50PihlbGVtZW50KSwgVGV4dFJlY29nbml0aW9uUmVzdWx0IHsKICAgICAgICAgbGluZXMubWFw
KFtdIChhdXRvJiBsaW5lKSAtPiBUZXh0UmVjb2duaXRpb25MaW5lRGF0YSB7CiAgICAgICAgICAg
ICByZXR1cm4gbWFrZURhdGFGb3JMaW5lKGxpbmUpOwogICAgICAgICB9KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCmlu
ZGV4IGEyNzM3NWIyOWNlZWZhYjM4NWU0OGQwODNkZWM1YjdhMGViZDc0MTEuLmM0NzlkOGRkYWJi
NDkyYWMxYzM3Mzk3ZTU4MGM0YmNkOTYzZjk4MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KQEAgLTQ3LDYgKzQ3
LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvSFRNTE9MaXN0RWxlbWVudC5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9IVE1MVUxpc3RFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hpdFRlc3RSZXN1bHQu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvSW1hZ2VPdmVybGF5Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL05l
dHdvcmtFeHRlbnNpb25Db250ZW50RmlsdGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05vZGVSZW5k
ZXJTdHlsZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYXltZW50Q29vcmRpbmF0b3IuaD4KQEAgLTIw
MCw3ICsyMDEsNyBAQCBEaWN0aW9uYXJ5UG9wdXBJbmZvIFdlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1
cEluZm9Gb3JSYW5nZShGcmFtZSYgZnJhbWUsIGNvbnN0IFNpbQogI2VuZGlmIC8vIFBMQVRGT1JN
KE1BQykKIAogICAgIE9wdGlvblNldDxUZXh0SW5kaWNhdG9yT3B0aW9uPiBpbmRpY2F0b3JPcHRp
b25zIHsgVGV4dEluZGljYXRvck9wdGlvbjo6VXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxDb250
ZW50Rm9yQ29tcGxleFJhbmdlcyB9OwotICAgIGlmIChIVE1MRWxlbWVudDo6aXNJbnNpZGVJbWFn
ZU92ZXJsYXkocmFuZ2UpKQorICAgIGlmIChpc0luc2lkZUltYWdlT3ZlcmxheShyYW5nZSkpCiAg
ICAgICAgIGluZGljYXRvck9wdGlvbnMuYWRkKHsgVGV4dEluZGljYXRvck9wdGlvbjo6UGFpbnRB
bGxDb250ZW50LCBUZXh0SW5kaWNhdG9yT3B0aW9uOjpQYWludEJhY2tncm91bmRzIH0pOwogCiAg
ICAgaWYgKHByZXNlbnRhdGlvblRyYW5zaXRpb24gPT0gVGV4dEluZGljYXRvclByZXNlbnRhdGlv
blRyYW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCBiNTBhZWQxNjJmYzUy
ZTdmNGE4YzM5Y2EwMzY2NTljNTViMDg5MGEzLi4zNTBkNTM3MGYzMDA2NDQyOGEyNGI5NWExZjlk
NTRmYjAzYTlmZDFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9GaW5kQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvRmluZENvbnRyb2xsZXIuY3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZVNlbGVjdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ltYWdl
T3ZlcmxheS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UGFnZU92ZXJsYXlDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYXRoVXRpbGl0aWVz
Lmg+CkBAIC0zNzQsNyArMzc1LDcgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6aGlkZUZpbmRVSSgp
CiBib29sIEZpbmRDb250cm9sbGVyOjp1cGRhdGVGaW5kSW5kaWNhdG9yKEZyYW1lJiBzZWxlY3Rl
ZEZyYW1lLCBib29sIGlzU2hvd2luZ092ZXJsYXksIGJvb2wgc2hvdWxkQW5pbWF0ZSkKIHsKICAg
ICBPcHRpb25TZXQ8VGV4dEluZGljYXRvck9wdGlvbj4gdGV4dEluZGljYXRvck9wdGlvbnMgeyBU
ZXh0SW5kaWNhdG9yT3B0aW9uOjpJbmNsdWRlTWFyZ2luSWZSYW5nZU1hdGNoZXNTZWxlY3Rpb24g
fTsKLSAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0ZWRGcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5yYW5nZSgpOyBzZWxlY3RlZFJhbmdlICYmIEhUTUxFbGVtZW50Ojppc0lu
c2lkZUltYWdlT3ZlcmxheSgqc2VsZWN0ZWRSYW5nZSkpCisgICAgaWYgKGF1dG8gc2VsZWN0ZWRS
YW5nZSA9IHNlbGVjdGVkRnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucmFuZ2UoKTsgc2Vs
ZWN0ZWRSYW5nZSAmJiBpc0luc2lkZUltYWdlT3ZlcmxheSgqc2VsZWN0ZWRSYW5nZSkpCiAgICAg
ICAgIHRleHRJbmRpY2F0b3JPcHRpb25zLmFkZCh7IFRleHRJbmRpY2F0b3JPcHRpb246OlBhaW50
QWxsQ29udGVudCwgVGV4dEluZGljYXRvck9wdGlvbjo6UGFpbnRCYWNrZ3JvdW5kcyB9KTsKIAog
ICAgIGF1dG8gaW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFNlbGVjdGlvbklu
RnJhbWUoc2VsZWN0ZWRGcmFtZSwgdGV4dEluZGljYXRvck9wdGlvbnMsIHNob3VsZEFuaW1hdGUg
PyBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlIDogVGV4dEluZGlj
YXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCBkNTQwOWJlZGNlNTYxN2E0YTA3ZjcyMTJh
ODdmZmQ2MmQ2ZjAwMGY3Li40M2ZlMjJhMDUxYTVkNGMzODU0YmYzODIwZjFlNWZjZmYyZWVlNmEw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAt
MjAxLDYgKzIwMSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9IaXN0b3J5Q29udHJvbGxlci5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvSGlzdG9yeUl0ZW0uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hpdFRl
c3RSZXN1bHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlT3ZlcmxheS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSlNET01F
eGNlcHRpb25IYW5kbGluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSlNET01XaW5kb3cuaD4KQEAg
LTEyMTUsNyArMTIxNiw3IEBAIEVkaXRvclN0YXRlIFdlYlBhZ2U6OmVkaXRvclN0YXRlKFNob3Vs
ZFBlcmZvcm1MYXlvdXQgc2hvdWxkUGVyZm9ybUxheW91dCkgY29uc3QKIAogICAgIGlmIChyZXN1
bHQuc2VsZWN0aW9uSXNSYW5nZSkgewogICAgICAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gc2Vs
ZWN0aW9uLnJhbmdlKCk7Ci0gICAgICAgIHJlc3VsdC5zZWxlY3Rpb25Jc1JhbmdlSW5zaWRlSW1h
Z2VPdmVybGF5ID0gc2VsZWN0aW9uUmFuZ2UgJiYgSFRNTEVsZW1lbnQ6OmlzSW5zaWRlSW1hZ2VP
dmVybGF5KCpzZWxlY3Rpb25SYW5nZSk7CisgICAgICAgIHJlc3VsdC5zZWxlY3Rpb25Jc1Jhbmdl
SW5zaWRlSW1hZ2VPdmVybGF5ID0gc2VsZWN0aW9uUmFuZ2UgJiYgaXNJbnNpZGVJbWFnZU92ZXJs
YXkoKnNlbGVjdGlvblJhbmdlKTsKICAgICB9CiAKICAgICBtX2xhc3RFZGl0b3JTdGF0ZVdhc0Nv
bnRlbnRFZGl0YWJsZSA9IHJlc3VsdC5pc0NvbnRlbnRFZGl0YWJsZSA/IEVkaXRvclN0YXRlSXND
b250ZW50RWRpdGFibGU6OlllcyA6IEVkaXRvclN0YXRlSXNDb250ZW50RWRpdGFibGU6Ok5vOwpA
QCAtNDA5MCw3ICs0MDkxLDcgQEAgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8UmVmPFdlYkNvcmU6
OkhUTUxFbGVtZW50PiwgV2ViQ29yZTo6SW50UmVjdD4+IFdlYlBhZ2U6OmYKIHsKICAgICBWZWN0
b3I8UmVmPEhUTUxFbGVtZW50Pj4gZGF0YURldGVjdG9yRWxlbWVudHM7CiAgICAgZm9yIChhdXRv
JiBjaGlsZCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEhUTUxFbGVtZW50PigqaW1hZ2VPdmVybGF5SG9z
dC5zaGFkb3dSb290KCkpKSB7Ci0gICAgICAgIGlmIChjaGlsZC5pc0ltYWdlT3ZlcmxheURhdGFE
ZXRlY3RvclJlc3VsdCgpKQorICAgICAgICBpZiAoaXNJbWFnZU92ZXJsYXlEYXRhRGV0ZWN0b3JS
ZXN1bHQoY2hpbGQpKQogICAgICAgICAgICAgZGF0YURldGVjdG9yRWxlbWVudHMuYXBwZW5kKGNo
aWxkKTsKICAgICB9CiAKQEAgLTc0NjYsNyArNzQ2Nyw3IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVz
dFRleHRSZWNvZ25pdGlvbihXZWJDb3JlOjpFbGVtZW50JiBlbGVtZW50LCBDb21wbGV0aW9uSGFu
ZGxlCiAgICAgaWYgKGNvcmVQYWdlKCktPmhhc0NhY2hlZFRleHRSZWNvZ25pdGlvblJlc3VsdCho
dG1sRWxlbWVudC5nZXQoKSkpIHsKICAgICAgICAgaWYgKGNvbXBsZXRpb24pIHsKICAgICAgICAg
ICAgIFJlZlB0cjxFbGVtZW50PiBpbWFnZU92ZXJsYXlIb3N0OwotICAgICAgICAgICAgaWYgKGh0
bWxFbGVtZW50LT5oYXNJbWFnZU92ZXJsYXkoKSkKKyAgICAgICAgICAgIGlmIChoYXNJbWFnZU92
ZXJsYXkoaHRtbEVsZW1lbnQuZ2V0KCkpKQogICAgICAgICAgICAgICAgIGltYWdlT3ZlcmxheUhv
c3QgPSAmZWxlbWVudDsKICAgICAgICAgICAgIGNvbXBsZXRpb24oV1RGTW92ZShpbWFnZU92ZXJs
YXlIb3N0KSk7CiAgICAgICAgIH0KQEAgLTc1MzMsNyArNzUzNCw3IEBAIHZvaWQgV2ViUGFnZTo6
cmVxdWVzdFRleHRSZWNvZ25pdGlvbihXZWJDb3JlOjpFbGVtZW50JiBlbGVtZW50LCBDb21wbGV0
aW9uSGFuZGxlCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgYXV0byYgaHRtbEVsZW1l
bnQgPSBkb3duY2FzdDxIVE1MRWxlbWVudD4oKnByb3RlY3RlZEVsZW1lbnQpOwotICAgICAgICBo
dG1sRWxlbWVudC51cGRhdGVXaXRoVGV4dFJlY29nbml0aW9uUmVzdWx0KHJlc3VsdCk7CisgICAg
ICAgIFdlYkNvcmU6OnVwZGF0ZVdpdGhUZXh0UmVjb2duaXRpb25SZXN1bHQoaHRtbEVsZW1lbnQs
IHJlc3VsdCk7CiAKICAgICAgICAgYXV0byBtYXRjaEluZGV4ID0gcHJvdGVjdGVkUGFnZS0+bV9l
bGVtZW50c1BlbmRpbmdUZXh0UmVjb2duaXRpb24uZmluZE1hdGNoaW5nKFsmXSAoYXV0byYgZWxl
bWVudEFuZENvbXBsZXRpb25IYW5kbGVycykgewogICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRB
bmRDb21wbGV0aW9uSGFuZGxlcnMuZmlyc3QgPT0gJmh0bWxFbGVtZW50OwpAQCAtNzU0Miw3ICs3
NTQzLDcgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0VGV4dFJlY29nbml0aW9uKFdlYkNvcmU6OkVs
ZW1lbnQmIGVsZW1lbnQsIENvbXBsZXRpb25IYW5kbGUKICAgICAgICAgaWYgKG1hdGNoSW5kZXgg
PT0gbm90Rm91bmQpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgUmVmUHRyIGltYWdl
T3ZlcmxheUhvc3QgPSBodG1sRWxlbWVudC5oYXNJbWFnZU92ZXJsYXkoKSA/ICZodG1sRWxlbWVu
dCA6IG51bGxwdHI7CisgICAgICAgIFJlZlB0ciBpbWFnZU92ZXJsYXlIb3N0ID0gaGFzSW1hZ2VP
dmVybGF5KGh0bWxFbGVtZW50KSA/ICZodG1sRWxlbWVudCA6IG51bGxwdHI7CiAgICAgICAgIGZv
ciAoYXV0byYgY29tcGxldGlvbkhhbmRsZXIgOiBwcm90ZWN0ZWRQYWdlLT5tX2VsZW1lbnRzUGVu
ZGluZ1RleHRSZWNvZ25pdGlvblttYXRjaEluZGV4XS5zZWNvbmQpCiAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihpbWFnZU92ZXJsYXlIb3N0LmNvcHlSZWYoKSk7CiAKQEAgLTc1NTgsNyAr
NzU1OSw3IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlV2l0aFRleHRSZWNvZ25pdGlvblJlc3VsdChj
b25zdCBUZXh0UmVjb2duaXRpb25SZXN1bHQmIHJlc3VsCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBkb3duY2FzdDxIVE1MRWxlbWVudD4oKmVsZW1lbnRUb1VwZGF0ZSkudXBkYXRlV2l0
aFRleHRSZWNvZ25pdGlvblJlc3VsdChyZXN1bHQpOworICAgIFdlYkNvcmU6OnVwZGF0ZVdpdGhU
ZXh0UmVjb2duaXRpb25SZXN1bHQoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCplbGVtZW50VG9VcGRh
dGUpLCByZXN1bHQpOwogICAgIGF1dG8gaGl0VGVzdFJlc3VsdCA9IGNvcmVQYWdlKCktPm1haW5G
cmFtZSgpLmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KHJvdW5kZWRJbnRQb2lu
dChsb2NhdGlvbiksIHsKICAgICAgICAgSGl0VGVzdFJlcXVlc3Q6OlR5cGU6OlJlYWRPbmx5LAog
ICAgICAgICBIaXRUZXN0UmVxdWVzdDo6VHlwZTo6QWN0aXZlLApAQCAtNzU2Nyw3ICs3NTY4LDcg
QEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVXaXRoVGV4dFJlY29nbml0aW9uUmVzdWx0KGNvbnN0IFRl
eHRSZWNvZ25pdGlvblJlc3VsdCYgcmVzdWwKIAogICAgIFJlZlB0ciBub2RlQXRMb2NhdGlvbiA9
IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7CiAgICAgYXV0byB1cGRhdGVSZXN1
bHQgPSAoWyZdIHsKLSAgICAgICAgaWYgKCFub2RlQXRMb2NhdGlvbiB8fCBub2RlQXRMb2NhdGlv
bi0+c2hhZG93SG9zdCgpICE9IGVsZW1lbnRUb1VwZGF0ZSB8fCAhSFRNTEVsZW1lbnQ6OmlzSW5z
aWRlSW1hZ2VPdmVybGF5KCpub2RlQXRMb2NhdGlvbikpCisgICAgICAgIGlmICghbm9kZUF0TG9j
YXRpb24gfHwgbm9kZUF0TG9jYXRpb24tPnNoYWRvd0hvc3QoKSAhPSBlbGVtZW50VG9VcGRhdGUg
fHwgIWlzSW5zaWRlSW1hZ2VPdmVybGF5KCpub2RlQXRMb2NhdGlvbikpCiAgICAgICAgICAgICBy
ZXR1cm4gVGV4dFJlY29nbml0aW9uVXBkYXRlUmVzdWx0OjpOb1RleHQ7CiAKICNpZiBFTkFCTEUo
REFUQV9ERVRFQ1RJT04pCkBAIC03NTc1LDcgKzc1NzYsNyBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0
ZVdpdGhUZXh0UmVjb2duaXRpb25SZXN1bHQoY29uc3QgVGV4dFJlY29nbml0aW9uUmVzdWx0JiBy
ZXN1bAogICAgICAgICAgICAgcmV0dXJuIFRleHRSZWNvZ25pdGlvblVwZGF0ZVJlc3VsdDo6RGF0
YURldGVjdG9yOwogI2VuZGlmCiAKLSAgICAgICAgaWYgKEhUTUxFbGVtZW50Ojppc0ltYWdlT3Zl
cmxheVRleHQoKm5vZGVBdExvY2F0aW9uKSkKKyAgICAgICAgaWYgKGlzSW1hZ2VPdmVybGF5VGV4
dCgqbm9kZUF0TG9jYXRpb24pKQogICAgICAgICAgICAgcmV0dXJuIFRleHRSZWNvZ25pdGlvblVw
ZGF0ZVJlc3VsdDo6VGV4dDsKIAogICAgICAgICByZXR1cm4gVGV4dFJlY29nbml0aW9uVXBkYXRl
UmVzdWx0OjpOb1RleHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvRmluZENvbnRyb2xsZXJJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9pb3MvRmluZENvbnRyb2xsZXJJT1MubW0KaW5kZXggN2E2NjY4YjgxNWZmZTU5NjY0
MDgwODFhNTJjY2Y3MThmZGEwOGU2MC4uZjRmYjY5ZDk1YTk1MTg1Y2IwOTZmMzIyNWMwZWFlMmVk
M2QxMDg3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L0ZpbmRDb250cm9sbGVySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2lvcy9GaW5kQ29udHJvbGxlcklPUy5tbQpAQCAtMzgsNiArMzgsNyBAQAogI2ltcG9ydCA8
V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbXBvcnQg
PFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0ltYWdlT3Zlcmxh
eS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2VPdmVy
bGF5Q29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYXRoVXRpbGl0aWVzLmg+CkBAIC01
NCw3ICs1NSw3IEBAIGNvbnN0IGludCB0b3RhbFZlcnRpY2FsTWFyZ2luID0gMTsKIHN0YXRpYyBP
cHRpb25TZXQ8VGV4dEluZGljYXRvck9wdGlvbj4gZmluZFRleHRJbmRpY2F0b3JPcHRpb25zKGNv
bnN0IEZyYW1lJiBmcmFtZSkKIHsKICAgICBPcHRpb25TZXQ8VGV4dEluZGljYXRvck9wdGlvbj4g
b3B0aW9ucyB7IFRleHRJbmRpY2F0b3JPcHRpb246OkluY2x1ZGVNYXJnaW5JZlJhbmdlTWF0Y2hl
c1NlbGVjdGlvbiwgVGV4dEluZGljYXRvck9wdGlvbjo6RG9Ob3RDbGlwVG9WaXNpYmxlUmVjdCB9
OwotICAgIGlmIChhdXRvIHNlbGVjdGVkUmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5yYW5nZSgpOyBzZWxlY3RlZFJhbmdlICYmIEhUTUxFbGVtZW50Ojppc0luc2lkZUltYWdl
T3ZlcmxheSgqc2VsZWN0ZWRSYW5nZSkpCisgICAgaWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9IGZy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJhbmdlKCk7IHNlbGVjdGVkUmFuZ2UgJiYgaXNJ
bnNpZGVJbWFnZU92ZXJsYXkoKnNlbGVjdGVkUmFuZ2UpKQogICAgICAgICBvcHRpb25zLmFkZCh7
IFRleHRJbmRpY2F0b3JPcHRpb246OlBhaW50QWxsQ29udGVudCwgVGV4dEluZGljYXRvck9wdGlv
bjo6UGFpbnRCYWNrZ3JvdW5kcyB9KTsKICAgICByZXR1cm4gb3B0aW9uczsKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4
IGE5NzE1ZGUzNDAxYTQwZTBiZThkNzhjY2EyNmFjMWI1MmY5MDgyNGEuLjMyNzc3NzdjMjM0Y2Jj
YjI5MzFjNWM0ODE4MmYzOTIxYjdmNmRiOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0xMDgsNiArMTA4LDcgQEAKICNp
bXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVvRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXN0
b3J5SXRlbS5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CisjaW1wb3J0IDxX
ZWJDb3JlL0ltYWdlT3ZlcmxheS5oPgogI2ltcG9ydCA8V2ViQ29yZS9JbnB1dE1vZGUuaD4KICNp
bXBvcnQgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9MaWJXZWJS
VENQcm92aWRlci5oPgpAQCAtMTM0OSw3ICsxMzUwLDcgQEAgc3RhdGljIEludFBvaW50IGNvbnN0
cmFpblBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCwgY29uc3QgRnJhbWUmIGZyYW1lLCBjb25z
dAogc3RhdGljIGJvb2wgaW5zaWRlSW1hZ2VPdmVybGF5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
cG9zaXRpb24pCiB7CiAgICAgUmVmUHRyIGNvbnRhaW5lciA9IHBvc2l0aW9uLmRlZXBFcXVpdmFs
ZW50KCkuY29udGFpbmVyTm9kZSgpOwotICAgIHJldHVybiBjb250YWluZXIgJiYgSFRNTEVsZW1l
bnQ6OmlzSW5zaWRlSW1hZ2VPdmVybGF5KCpjb250YWluZXIpOworICAgIHJldHVybiBjb250YWlu
ZXIgJiYgaXNJbnNpZGVJbWFnZU92ZXJsYXkoKmNvbnRhaW5lcik7CiB9CiAKIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiBleHBhbmRGb3JJbWFnZU92ZXJsYXkoY29uc3QgU2ltcGxl
UmFuZ2UmIHJhbmdlKQpAQCAtMTU4Niw3ICsxNTg3LDcgQEAgc3RhdGljIHN0ZDo6cGFpcjxzdGQ6
Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiwgU2VsZWN0aW9uV2FzRmxpcHBlZD4gcmFuZ2VGb3JQb2lu
dEkKICAgICAgICAgICAgIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHJlc3VsdCwgc2VsZWN0aW9u
RW5kKTsKICAgICB9CiAgICAgCi0gICAgaWYgKHJhbmdlICYmIEhUTUxFbGVtZW50Ojppc0luc2lk
ZUltYWdlT3ZlcmxheSgqcmFuZ2UpKQorICAgIGlmIChyYW5nZSAmJiBpc0luc2lkZUltYWdlT3Zl
cmxheSgqcmFuZ2UpKQogICAgICAgICByZXR1cm4geyBleHBhbmRGb3JJbWFnZU92ZXJsYXkoKnJh
bmdlKSwgU2VsZWN0aW9uV2FzRmxpcHBlZDo6Tm8gfTsKIAogICAgIHJldHVybiB7IHJhbmdlLCBz
ZWxlY3Rpb25GbGlwcGVkIH07CkBAIC0yODA1LDcgKzI4MDYsNyBAQCBzdGF0aWMgdm9pZCB2aWRl
b1Bvc2l0aW9uSW5mb3JtYXRpb24oV2ViUGFnZSYgcGFnZSwgSFRNTFZpZGVvRWxlbWVudCYgZWxl
bWVudCwgYwogCiBzdGF0aWMgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IGhvc3RWaWRlb0VsZW1l
bnRJZ25vcmluZ0ltYWdlT3ZlcmxheShOb2RlJiBub2RlKQogewotICAgIGlmIChIVE1MRWxlbWVu
dDo6aXNJbnNpZGVJbWFnZU92ZXJsYXkobm9kZSkpCisgICAgaWYgKGlzSW5zaWRlSW1hZ2VPdmVy
bGF5KG5vZGUpKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgaWYgKGlzPEhUTUxWaWRlb0Vs
ZW1lbnQ+KG5vZGUpKQpAQCAtMjg1OCw3ICsyODU5LDcgQEAgc3RhdGljIHZvaWQgZWxlbWVudFBv
c2l0aW9uSW5mb3JtYXRpb24oV2ViUGFnZSYgcGFnZSwgRWxlbWVudCYgZWxlbWVudCwgY29uc3Qg
SW4KIAogICAgIGluZm8uaXNFbGVtZW50ID0gdHJ1ZTsKICAgICBpbmZvLmlkQXR0cmlidXRlID0g
ZWxlbWVudC5nZXRJZEF0dHJpYnV0ZSgpOwotICAgIGluZm8uaXNJbWFnZU92ZXJsYXlUZXh0ID0g
SFRNTEVsZW1lbnQ6OmlzSW1hZ2VPdmVybGF5VGV4dChpbm5lck5vblNoYXJlZE5vZGUpOworICAg
IGluZm8uaXNJbWFnZU92ZXJsYXlUZXh0ID0gaXNJbWFnZU92ZXJsYXlUZXh0KGlubmVyTm9uU2hh
cmVkTm9kZSk7CiAKICAgICBpbmZvLnRpdGxlID0gZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKEhUTUxOYW1lczo6dGl0bGVBdHRyKS5zdHJpbmcoKTsKICAgICBpZiAobGlu
a0VsZW1lbnQgJiYgaW5mby50aXRsZS5pc0VtcHR5KCkpCkBAIC0yOTA3LDcgKzI5MDgsNyBAQCBz
dGF0aWMgdm9pZCBlbGVtZW50UG9zaXRpb25JbmZvcm1hdGlvbihXZWJQYWdlJiBwYWdlLCBFbGVt
ZW50JiBlbGVtZW50LCBjb25zdCBJbgogCiAjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQogICAg
IGlmIChpbmZvLmlzSW1hZ2VPdmVybGF5VGV4dCAmJiBpbm5lck5vblNoYXJlZE5vZGUtPnNoYWRv
d0hvc3QoKSA9PSAmZWxlbWVudCAmJiBpczxIVE1MRWxlbWVudD4oZWxlbWVudCkpIHsKLSAgICAg
ICAgaWYgKFJlZiBodG1sRWxlbWVudCA9IGRvd25jYXN0PEhUTUxFbGVtZW50PihlbGVtZW50KTsg
aHRtbEVsZW1lbnQtPmhhc0ltYWdlT3ZlcmxheSgpKQorICAgICAgICBpZiAoUmVmIGh0bWxFbGVt
ZW50ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGVsZW1lbnQpOyBoYXNJbWFnZU92ZXJsYXkoaHRt
bEVsZW1lbnQuZ2V0KCkpKQogICAgICAgICAgICAgZGF0YURldGVjdG9ySW1hZ2VPdmVybGF5UG9z
aXRpb25JbmZvcm1hdGlvbihodG1sRWxlbWVudC5nZXQoKSwgcmVxdWVzdCwgaW5mbyk7CiAgICAg
fQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9X
ZWJQYWdlTWFjLm1tCmluZGV4IDFlMjNhZmZlZGVjYWZkYmNkYTMxMDM4YzkxYmY4MDhkYWE4ODNl
YzEuLjg1MDdiNGYyNTQzZmU3YjVmYzI3NGE1Nzc5NDdiYWEwODVjYTI4ODcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC03
Myw2ICs3Myw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxDb252ZXJ0ZXIuaD4KICNpbXBvcnQg
PFdlYkNvcmUvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXRU
ZXN0UmVzdWx0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0ltYWdlT3ZlcmxheS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL01JTUVUeXBlUmVnaXN0
cnkuaD4KICNpbXBvcnQgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CkBAIC04ODUs
NyArODg2LDcgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdEF0
TG9jYXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludCBsb2NhdGkKIAogICAgIGF1dG8gaW5kaWNhdG9y
T3B0aW9ucyA9IFsmXShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpIHsKICAgICAgICAgT3B0aW9u
U2V0PFRleHRJbmRpY2F0b3JPcHRpb24+IG9wdGlvbnMgeyBUZXh0SW5kaWNhdG9yT3B0aW9uOjpV
c2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzIH07Ci0gICAg
ICAgIGlmIChIVE1MRWxlbWVudDo6aXNJbnNpZGVJbWFnZU92ZXJsYXkocmFuZ2UpKQorICAgICAg
ICBpZiAoaXNJbnNpZGVJbWFnZU92ZXJsYXkocmFuZ2UpKQogICAgICAgICAgICAgb3B0aW9ucy5h
ZGQoeyBUZXh0SW5kaWNhdG9yT3B0aW9uOjpQYWludEFsbENvbnRlbnQsIFRleHRJbmRpY2F0b3JP
cHRpb246OlBhaW50QmFja2dyb3VuZHMgfSk7CiAgICAgICAgIHJldHVybiBvcHRpb25zOwogICAg
IH07Cg==
</data>
<flag name="commit-queue"
          id="468816"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443958</attachid>
            <date>2021-11-11 09:23:01 -0800</date>
            <delta_ts>2021-11-11 11:07:11 -0800</delta_ts>
            <desc>Fix Windows build</desc>
            <filename>bug-232974-20211111092300.patch</filename>
            <type>text/plain</type>
            <size>87933</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDZjMGY5MzEwNGI5ODlk
MTIyMzdiM2IwZGEzNzBkYTQ1NTk2Y2M1Ni4uOGEzYzE1ZGY3ZGRkYTFlMjRhNjg1MTlmNmIzNTY4
ZjlkYjNlNDk5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDIxLTExLTExICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgaW1hZ2Ug
b3ZlcmxheSBjb2RlIG91dCBvZiBIVE1MRWxlbWVudCBhbmQgaW50byBhIHNlcGFyYXRlIGhlbHBl
ciBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MzI5NzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
b3ZlIGNvZGUgZm9yIHVwZGF0aW5nLCBxdWVyeWluZywgYW5kIHJlbW92aW5nIGltYWdlIG92ZXJs
YXlzIG91dCBvZiBIVE1MRWxlbWVudC5jcHAgYW5kIEhUTUxFbGVtZW50LmggYW5kIGludG8KKyAg
ICAgICAgc2VwYXJhdGUgaGVscGVyIGZpbGVzIGluc3RlYWQgKEltYWdlT3ZlcmxheS5oIGFuZCBJ
bWFnZU92ZXJsYXkuY3BwKS4gRnV0dXJlIHBhdGNoZXMgaW4gdGhpcyBhcmVhIHdpbGwgZXh0ZW5k
IHRoZQorICAgICAgICBmdW5jdGlvbmFsaXR5IG9mIHRoZXNlIG92ZXJsYXlzLCBzbyB0aGlzIHdp
bGwgaGVscCBhdm9pZCBjb2RlIGJsb2F0IGluc2lkZSBIVE1MRWxlbWVudCB3aGVuIGRvaW5nIHNv
LgorCisgICAgICAgIE5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIEhlYWRlcnMu
Y21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRvbS9JbWFnZU92ZXJsYXkuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmltYWdlT3ZlcmxheUVsZW1lbnRJZGVudGlmaWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmltYWdlT3ZlcmxheURhdGFEZXRlY3RvckNsYXNzTmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpoYXNJbWFnZU92ZXJsYXkpOgorICAgICAgICAoV2ViQ29yZTo6aW1hZ2VP
dmVybGF5SG9zdCk6CisgICAgICAgIChXZWJDb3JlOjppc0ltYWdlT3ZlcmxheURhdGFEZXRlY3Rv
clJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjppc0luc2lkZUltYWdlT3ZlcmxheSk6CisgICAg
ICAgIChXZWJDb3JlOjppc0ltYWdlT3ZlcmxheVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6cmVt
b3ZlSW1hZ2VPdmVybGF5U29vbklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5l
clJlY3RGb3JJbWFnZU92ZXJsYXkpOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlV2l0aFRleHRS
ZWNvZ25pdGlvblJlc3VsdCk6CisgICAgICAgICogZG9tL0ltYWdlT3ZlcmxheS5oOiBBZGRlZC4K
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnBlcmZvcm1DdXRPckNvcHkpOgorICAgICAgICAoV2ViQ29yZTo6c2NhbkZvclRlbGVwaG9uZU51
bWJlcnMpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKiBlZGl0
aW5nL1RleHRJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6Omhh
bmRsZVJlcGxhY2VkRWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjppbWFnZU92ZXJsYXlFbGVtZW50SWRlbnRpZmllcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjppbWFnZU92ZXJsYXlEYXRhRGV0ZWN0b3JDbGFzc05hbWUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6Omhhc0ltYWdlT3ZlcmxheSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjppbWFnZU92ZXJsYXlIb3N0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50Ojppc0ltYWdlT3ZlcmxheURhdGFE
ZXRlY3RvclJlc3VsdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxl
bWVudDo6aXNJbnNpZGVJbWFnZU92ZXJsYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEVsZW1lbnQ6OmlzSW1hZ2VPdmVybGF5VGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpIVE1MRWxlbWVudDo6cmVtb3ZlSW1hZ2VPdmVybGF5U29vbklmTmVlZGVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50Ojpjb250YWluZXJSZWN0Rm9yVGV4dFJl
Y29nbml0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50Ojp1cGRh
dGVXaXRoVGV4dFJlY29nbml0aW9uUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1sL0hU
TUxFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNlZWtXaXRoVG9sZXJhbmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBsYXlJbnRlcm5hbCk6CisgICAgICAgICog
cGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4
dE1lbnVDb250cm9sbGVyOjpwb3B1bGF0ZSk6CisgICAgICAgICogcGFnZS9EcmFnQ29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZHJhZ2dhYmxlRWxlbWVu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKToK
KyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub2Rl
VG9TZWxlY3RPbk1vdXNlRG93bkZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5k
bGVyOjpjYW5Nb3VzZURvd25TdGFydFNlbGVjdCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhh
bmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhh
bmRsZXI6OnVwZGF0ZVNlbGVjdGlvbkZvck1vdXNlRHJhZyk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudEhhbmRsZXI6OmhpdFRlc3RSZXN1bHRBdFBvaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAgKiBwYWdlL0ltYWdlT3Zl
cmxheUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VPdmVybGF5Q29udHJv
bGxlcjo6c2VsZWN0aW9uUXVhZHNEaWRDaGFuZ2UpOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp1cGRhdGVFbGVtZW50c1dpdGhUZXh0UmVjb2duaXRp
b25SZXN1bHRzKToKKyAgICAgICAgKiBwYWdlL21hYy9JbWFnZU92ZXJsYXlDb250cm9sbGVyTWFj
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VPdmVybGF5Q29udHJvbGxlcjo6dXBkYXRlRGF0
YURldGVjdG9ySGlnaGxpZ2h0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZU92ZXJsYXlDb250
cm9sbGVyOjplbGVtZW50VW5kZXJNb3VzZURpZENoYW5nZSk6CisgICAgICAgICogcmVuZGVyaW5n
L0hpdFRlc3RSZXN1bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6bm9k
ZUZvckltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Ojph
ZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0Q29tbW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OlJlbmRlcklt
YWdlKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnRlcm5hbHM6Omluc3RhbGxJbWFnZU92ZXJsYXkpOgorCiAyMDIxLTExLTExICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBJbnRyb2R1Y2UgU2VsZWN0b3JN
YXRjaGluZ1N0YXRlIGFuZCBtb3ZlIFNlbGVjdG9yRmlsdGVyIHRoZXJlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRl
MTUxOTZkOGNmZGQ3NDAyNGJhN2FkZjZjZmQ1ODdlY2Q1ZGQ0ODIuLjAzNmZiNjIzOGIzMzlhY2Q4
ZGFkYTAwYzQ4YzM2NjVhZmVkODE0ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMjEt
MTEtMTEgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAg
TW92ZSBpbWFnZSBvdmVybGF5IGNvZGUgb3V0IG9mIEhUTUxFbGVtZW50IGFuZCBpbnRvIGEgc2Vw
YXJhdGUgaGVscGVyIGZpbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzMjk3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFNlZSBXZWJDb3JlL0NoYW5nZUxvZyBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpGaW5kQ29udHJvbGxlcjo6dXBkYXRlRmluZEluZGljYXRvcik6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjplZGl0
b3JTdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmZpbmREYXRhRGV0ZWN0
aW9uUmVzdWx0RWxlbWVudEluSW1hZ2VPdmVybGF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6cmVxdWVzdFRleHRSZWNvZ25pdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnVw
ZGF0ZVdpdGhUZXh0UmVjb2duaXRpb25SZXN1bHQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvRmluZENvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXZWJLaXQ6OmZpbmRUZXh0
SW5kaWNhdG9yT3B0aW9ucyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQ
YWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjppbnNpZGVJbWFnZU92ZXJsYXkpOgorICAgICAg
ICAoV2ViS2l0OjpyYW5nZUZvclBvaW50SW5Sb290Vmlld0Nvb3JkaW5hdGVzKToKKyAgICAgICAg
KFdlYktpdDo6aG9zdFZpZGVvRWxlbWVudElnbm9yaW5nSW1hZ2VPdmVybGF5KToKKyAgICAgICAg
KFdlYktpdDo6ZWxlbWVudFBvc2l0aW9uSW5mb3JtYXRpb24pOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
cGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3RBdExvY2F0aW9uKToKKwogMjAyMS0xMS0xMCAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFdlIHNob3VsZCBub3Qg
a2lsbCBhbGwgV2ViQ29udGVudCBwcm9jZXNzZXMgd2hlbmV2ZXIgdGhlIFdlYkF1dGhuIHByb2Nl
c3MgY3Jhc2hlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggMzYzNWZjNWJjZTllYWQ0OTBjOGQ5ODU0
ZmU4ZTVmZGUyOTY3NGQyMC4uMWNlMjUyMWU0ZWYyMjJjNjk1YWQxZGNiZGFmNDU0YjhjNmQwNDYx
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC01MDcsNiArNTA3LDcgQEAgc2V0KFdlYkNvcmVfUFJJ
VkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIGRvbS9GcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Np
b24uaAogICAgIGRvbS9GdWxsc2NyZWVuTWFuYWdlci5oCiAgICAgZG9tL0dDUmVhY2hhYmxlUmVm
LmgKKyAgICBkb20vSW1hZ2VPdmVybGF5LmgKICAgICBkb20vSW5saW5lU3R5bGVTaGVldE93bmVy
LmgKICAgICBkb20vS2V5Ym9hcmRFdmVudC5oCiAgICAgZG9tL0xpdmVOb2RlTGlzdC5oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CmluZGV4IDhhMTE0YTEyMzhkNGY2ODE4ODQ2ZjIxYzJkYjBhYzAzMDNiMWViMjkuLmVh
YmNjMDBmMDMzNjNjMmY4ZjFmYjZmOTZmNWVmNjRmMjU1MWUyYzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBA
IC05NTksNiArOTU5LDcgQEAgZG9tL0lkVGFyZ2V0T2JzZXJ2ZXIuY3BwCiBkb20vSWRUYXJnZXRP
YnNlcnZlclJlZ2lzdHJ5LmNwcAogZG9tL0lkbGVDYWxsYmFja0NvbnRyb2xsZXIuY3BwCiBkb20v
SWRsZURlYWRsaW5lLmNwcAorZG9tL0ltYWdlT3ZlcmxheS5jcHAKIGRvbS9JbmxpbmVDbGFzc2lj
U2NyaXB0LmNwcAogZG9tL0lubGluZVN0eWxlU2hlZXRPd25lci5jcHAKIGRvbS9JbnB1dEV2ZW50
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDY5ZDNmZDljOGEyZmNhNjExNDk3ODg5MGY4MWJlN2NmN2RmMzU4NGEuLjEwM2My
OTA1MDkyYjkyYWUwZWFkYjEyNDA5MjAyY2NkZjQ0Y2QwNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU0NDAsNiArNTQ0MCw3
IEBACiAJCUY0NTc3NUNFMjQxNDM3RDUwMDJERjFBMCAvKiBJbmxpbmVQYXRoRGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ1Nzc1Q0QyNDE0MzdE
NTAwMkRGMUEwIC8qIElubGluZVBhdGhEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ2NzI5MjgxRTBERTY4NTAwQUNDM0Q4IC8qIFNjcm9s
bFNuYXBPZmZzZXRzSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjQ2NzI5MjUxRTBERTVBQjAwQUNDM0Q4IC8qIFNjcm9sbFNuYXBPZmZzZXRzSW5m
by5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0
NkM0NDdFMjM0NjU0NTQwMDM5QTc5RCAvKiBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDZDNDQ3
QzIzNDY1NDU0MDAzOUE3OUQgLyogQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5oICov
OyB9OworCQlGNDZENTM4NjI3M0Q3RTQ2MDAwOUZBODAgLyogSW1hZ2VPdmVybGF5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDZENTM4NTI3M0Q3RTNG
MDAwOUZBODAgLyogSW1hZ2VPdmVybGF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ3Mzg0NTgyNURERTlGQjAwNkRFOEREIC8qIERhdGFPd25l
clR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0
NzM4NDU3MjVEREU5RkIwMDZERThERCAvKiBEYXRhT3duZXJUeXBlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ3QTA5RDEyMEE5M0E5NzAwMjQw
RkFFIC8qIERpc2FibGVkQWRhcHRhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY0N0EwOUNGMjBBOTM5RjYwMDI0MEZBRSAvKiBEaXNhYmxlZEFk
YXB0YXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRjQ3QTVFM0UxOTVCOEM4QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ3QTVFM0Ix
OTVCOEM4QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNzIzMSw2ICsxNzIzMiw4IEBA
CiAJCUY0NkM0NDdEMjM0NjU0NTQwMDM5QTc5RCAvKiBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRh
U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFT
b3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDZDNDQ4MDIzNDY1NDdB
MDAzOUE3OUQgLyogQ2xpcGJvYXJkSXRlbVBhc3RlYm9hcmREYXRhU291cmNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENsaXBib2FyZEl0ZW1QYXN0ZWJvYXJkRGF0YVNvdXJjZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGNDZDNDQ4MTIzNDY1NDdBMDAzOUE3OUQgLyogQ2xpcGJvYXJkSXRl
bVBhc3RlYm9hcmREYXRhU291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsaXBib2FyZEl0
ZW1QYXN0ZWJvYXJkRGF0YVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUY0NkQ1Mzg0MjczRDdFM0UwMDA5RkE4MCAvKiBJbWFnZU92ZXJsYXkuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW1hZ2VPdmVybGF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RjQ2RDUzODUyNzNEN0UzRjAwMDlGQTgwIC8qIEltYWdlT3ZlcmxheS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbWFnZU92ZXJsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ3Mzg0NTcy
NURERTlGQjAwNkRFOEREIC8qIERhdGFPd25lclR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YU93
bmVyVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDdBMDlDRjIwQTkzOUY2
MDAyNDBGQUUgLyogRGlzYWJsZWRBZGFwdGF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNhYmxl
ZEFkYXB0YXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0N0EwOUQ0MjBB
OUREMDQwMDI0MEZBRSAvKiBEaXNhYmxlZEFkYXB0YXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IERpc2FibGVkQWRhcHRhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMzEzNzcsNiArMzEzODAsOCBAQAogCQkJCUMzQ0YxN0EzMTVCMDA2M0YwMDI3NkQzOSAvKiBJ
ZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuaCAqLywKIAkJCQk4QUI0QkM3NjEyNkZEQjcxMDBERUI3
MjcgLyogSWdub3JlRGVzdHJ1Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIuaCAqLywKIAkJCQk0
NjczMDIwMTFDNEVGRTY2MDBCQ0IzNTcgLyogSWdub3JlT3BlbnNEdXJpbmdVbmxvYWRDb3VudElu
Y3JlbWVudGVyLmggKi8sCisJCQkJRjQ2RDUzODQyNzNEN0UzRTAwMDlGQTgwIC8qIEltYWdlT3Zl
cmxheS5jcHAgKi8sCisJCQkJRjQ2RDUzODUyNzNEN0UzRjAwMDlGQTgwIC8qIEltYWdlT3Zlcmxh
eS5oICovLAogCQkJCUUzMDU5MjYxMUUyN0EzOEMwMEQ1N0M5OCAvKiBJbmxpbmVDbGFzc2ljU2Ny
aXB0LmNwcCAqLywKIAkJCQlFMzA1OTI2MjFFMjdBMzhDMDBENTdDOTggLyogSW5saW5lQ2xhc3Np
Y1NjcmlwdC5oICovLAogCQkJCUFBNEMzQTc0MEIyQjE2NzkwMDIzMzRBMiAvKiBJbmxpbmVTdHls
ZVNoZWV0T3duZXIuY3BwICovLApAQCAtMzM4MDAsNiArMzM4MDUsNyBAQAogCQkJCTA4OTU4MjU2
MEU4NTdBN0UwMEY4MkM4MyAvKiBJbWFnZUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3
RjQ0QTgwQjlFMzI0RTAwQTlEMDgxIC8qIEltYWdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTJENUE1OTMxMTUyNTI1RDAwMDM2RUU1MSAvKiBJbWFnZU9yaWVudGF0aW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlGNDZENTM4NjI3M0Q3RTQ2MDAwOUZBODAgLyogSW1hZ2VPdmVybGF5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGNDgyNDM0QjI2MEMzMzA2MDAyMjQ5N0MgLyogSW1hZ2VPdmVy
bGF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQ0NkVERTEyNjVEQjFFNTAwMzFE
QThGIC8qIEltYWdlT3ZlcmxheURhdGFEZXRlY3Rpb25SZXN1bHRJZGVudGlmaWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3MjI4M0YwRTIzMEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQYWludGluZ09w
dGlvbnMuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0lt
YWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vSW1hZ2VPdmVybGF5LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5kOTVjNmI3YTZjNjhmODhiZmZmMzQwMWFkNTc4MGE0ZjgwNzRmNDM2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0ltYWdlT3ZlcmxheS5jcHAKQEAgLTAsMCAr
MSw0NTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1h
Z2VPdmVybGF5LmgiCisKKyNpbmNsdWRlICJET01Ub2tlbkxpc3QuaCIKKyNpbmNsdWRlICJEb2N1
bWVudC5oIgorI2luY2x1ZGUgIkVsZW1lbnRDaGlsZEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiRXZl
bnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiRXZlbnRMb29wLmgiCisjaW5jbHVkZSAiRmxvYXRTaXpl
LmgiCisjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJIVE1MQnJFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTWVkaWFF
bGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgorI2luY2x1ZGUgIk1lZGlh
Q29udHJvbHNIb3N0LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlF1aXJrcy5oIgor
I2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCisjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgorI2luY2x1
ZGUgIlNpbXBsZVJhbmdlLmgiCisjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIlRleHRSZWNv
Z25pdGlvblJlc3VsdC5oIgorI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCisjaW5j
bHVkZSA8d3RmL1JhbmdlLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9BdG9tU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisjaW5j
bHVkZSAiRGF0YURldGVjdGlvbi5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIGltYWdlT3ZlcmxheUVsZW1lbnRJZGVudGlmaWVyKCkK
K3sKKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+
IGlkZW50aWZpZXIoImltYWdlLW92ZXJsYXkiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7CisgICAgcmV0dXJuIGlkZW50aWZpZXI7Cit9CisKK3N0YXRpYyBjb25zdCBBdG9tU3Ry
aW5nJiBpbWFnZU92ZXJsYXlEYXRhRGV0ZWN0b3JDbGFzc05hbWUoKQoreworICAgIHN0YXRpYyBN
YWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gY2xhc3NOYW1lKCJpbWFn
ZS1vdmVybGF5LWRhdGEtZGV0ZWN0b3ItcmVzdWx0IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOworICAgIHJldHVybiBjbGFzc05hbWU7Cit9CisKK2Jvb2wgaGFzSW1hZ2VPdmVy
bGF5KGNvbnN0IEhUTUxFbGVtZW50JiBlbGVtZW50KQoreworICAgIGF1dG8gc2hhZG93Um9vdCA9
IGVsZW1lbnQuc2hhZG93Um9vdCgpOworICAgIGlmIChMSUtFTFkoIXNoYWRvd1Jvb3QgfHwgc2hh
ZG93Um9vdC0+bW9kZSgpICE9IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2hhZG93Um9vdC0+aGFzRWxlbWVudFdpdGhJZCgq
aW1hZ2VPdmVybGF5RWxlbWVudElkZW50aWZpZXIoKS5pbXBsKCkpOworfQorCitzdGF0aWMgUmVm
UHRyPEhUTUxFbGVtZW50PiBpbWFnZU92ZXJsYXlIb3N0KGNvbnN0IE5vZGUmIG5vZGUpCit7Cisg
ICAgYXV0byBob3N0ID0gbm9kZS5zaGFkb3dIb3N0KCk7CisgICAgaWYgKCFpczxIVE1MRWxlbWVu
dD4oaG9zdCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmVmUHRyIGVsZW1lbnQg
eyAmZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpob3N0KSB9OworICAgIHJldHVybiBoYXNJbWFnZU92
ZXJsYXkoKmVsZW1lbnQpID8gZWxlbWVudCA6IG51bGxwdHI7Cit9CisKK2Jvb2wgaXNJbWFnZU92
ZXJsYXlEYXRhRGV0ZWN0b3JSZXN1bHQoY29uc3QgSFRNTEVsZW1lbnQmIGVsZW1lbnQpCit7Cisg
ICAgcmV0dXJuIGltYWdlT3ZlcmxheUhvc3QoZWxlbWVudCkgJiYgZWxlbWVudC5oYXNDbGFzcygp
ICYmIGVsZW1lbnQuY2xhc3NOYW1lcygpLmNvbnRhaW5zKGltYWdlT3ZlcmxheURhdGFEZXRlY3Rv
ckNsYXNzTmFtZSgpKTsKK30KKworYm9vbCBpc0luc2lkZUltYWdlT3ZlcmxheShjb25zdCBTaW1w
bGVSYW5nZSYgcmFuZ2UpCit7CisgICAgUmVmUHRyIGNvbW1vbkFuY2VzdG9yID0gY29tbW9uSW5j
bHVzaXZlQW5jZXN0b3I8Q29tcG9zZWRUcmVlPihyYW5nZSk7CisgICAgaWYgKCFjb21tb25BbmNl
c3RvcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGlzSW5zaWRlSW1hZ2VP
dmVybGF5KCpjb21tb25BbmNlc3Rvcik7Cit9CisKK2Jvb2wgaXNJbnNpZGVJbWFnZU92ZXJsYXko
Y29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICBhdXRvIGhvc3QgPSBpbWFnZU92ZXJsYXlIb3N0KG5v
ZGUpOworICAgIGlmICghaG9zdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IGhvc3QtPnVzZXJBZ2VudFNoYWRvd1Jvb3QoKS0+Y29udGFpbnMobm9kZSk7Cit9CisKK2Jvb2wg
aXNJbWFnZU92ZXJsYXlUZXh0KGNvbnN0IE5vZGUqIG5vZGUpCit7CisgICAgcmV0dXJuIG5vZGUg
JiYgaXNJbWFnZU92ZXJsYXlUZXh0KCpub2RlKTsKK30KKworYm9vbCBpc0ltYWdlT3ZlcmxheVRl
eHQoY29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICBhdXRvIGhvc3QgPSBpbWFnZU92ZXJsYXlIb3N0
KG5vZGUpOworICAgIGlmICghaG9zdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KFJlZlB0ciBvdmVybGF5ID0gc3RhdGljX2Nhc3Q8VHJlZVNjb3BlJj4oKmhvc3QtPnVzZXJBZ2Vu
dFNoYWRvd1Jvb3QoKSkuZ2V0RWxlbWVudEJ5SWQoaW1hZ2VPdmVybGF5RWxlbWVudElkZW50aWZp
ZXIoKSkpCisgICAgICAgIHJldHVybiBub2RlLmlzRGVzY2VuZGFudE9mKCpvdmVybGF5KTsKKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCByZW1vdmVJbWFnZU92ZXJsYXlTb29uSWZOZWVk
ZWQoSFRNTEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgaWYgKCFoYXNJbWFnZU92ZXJsYXkoZWxl
bWVudCkpCisgICAgICAgIHJldHVybjsKKworICAgIGVsZW1lbnQuZG9jdW1lbnQoKS5ldmVudExv
b3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6SW50ZXJuYWxBc3luY1Rhc2ssIFt3ZWFrRWxlbWVu
dCA9IFdlYWtQdHIgeyBlbGVtZW50IH1dIHsKKyAgICAgICAgUmVmUHRyIHByb3RlY3RlZEVsZW1l
bnQgPSB3ZWFrRWxlbWVudC5nZXQoKTsKKyAgICAgICAgaWYgKCFwcm90ZWN0ZWRFbGVtZW50KQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFJlZlB0ciBzaGFkb3dSb290ID0gcHJvdGVj
dGVkRWxlbWVudC0+dXNlckFnZW50U2hhZG93Um9vdCgpOworICAgICAgICBpZiAoIXNoYWRvd1Jv
b3QpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKFJlZlB0ciBvdmVybGF5ID0g
c3RhdGljX2Nhc3Q8VHJlZVNjb3BlJj4oKnNoYWRvd1Jvb3QpLmdldEVsZW1lbnRCeUlkKGltYWdl
T3ZlcmxheUVsZW1lbnRJZGVudGlmaWVyKCkpKQorICAgICAgICAgICAgb3ZlcmxheS0+cmVtb3Zl
KCk7CisKKyNpZiBFTkFCTEUoSU1BR0VfQU5BTFlTSVMpCisgICAgICAgIGlmIChhdXRvIHBhZ2Ug
PSBwcm90ZWN0ZWRFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkKKyAgICAgICAgICAgIHBhZ2Ut
PnJlc2V0VGV4dFJlY29nbml0aW9uUmVzdWx0KCpwcm90ZWN0ZWRFbGVtZW50KTsKKyNlbmRpZgor
ICAgIH0pOworfQorCisjaWYgRU5BQkxFKElNQUdFX0FOQUxZU0lTKQorCitJbnRSZWN0IGNvbnRh
aW5lclJlY3RGb3JJbWFnZU92ZXJsYXkoSFRNTEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgYXV0
byogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CisgICAgaWYgKCFpczxSZW5kZXJJbWFn
ZT4ocmVuZGVyZXIpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKCFyZW5kZXJlci0+
b3BhY2l0eSgpKQorICAgICAgICByZXR1cm4geyAwLCAwLCBlbGVtZW50Lm9mZnNldFdpZHRoKCks
IGVsZW1lbnQub2Zmc2V0SGVpZ2h0KCkgfTsKKworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0
KGRvd25jYXN0PFJlbmRlckltYWdlPigqcmVuZGVyZXIpLnJlcGxhY2VkQ29udGVudFJlY3QoKSk7
Cit9CisKK3ZvaWQgdXBkYXRlV2l0aFRleHRSZWNvZ25pdGlvblJlc3VsdChIVE1MRWxlbWVudCYg
ZWxlbWVudCwgY29uc3QgVGV4dFJlY29nbml0aW9uUmVzdWx0JiByZXN1bHQsIENhY2hlVGV4dFJl
Y29nbml0aW9uUmVzdWx0cyBjYWNoZVRleHRSZWNvZ25pdGlvblJlc3VsdHMpCit7CisgICAgc3Rh
dGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBpbWFnZU92ZXJs
YXlMaW5lQ2xhc3MoImltYWdlLW92ZXJsYXktbGluZSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0
b21TdHJpbmc+IGltYWdlT3ZlcmxheVRleHRDbGFzcygiaW1hZ2Utb3ZlcmxheS10ZXh0IiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworCisgICAgc3RydWN0IFRleHRSZWNvZ25p
dGlvbkxpbmVFbGVtZW50cyB7CisgICAgICAgIFJlZjxIVE1MRGl2RWxlbWVudD4gbGluZTsKKyAg
ICAgICAgVmVjdG9yPFJlZjxIVE1MRWxlbWVudD4+IGNoaWxkcmVuOworICAgIH07CisKKyAgICBz
dHJ1Y3QgVGV4dFJlY29nbml0aW9uRWxlbWVudHMgeworICAgICAgICBSZWZQdHI8SFRNTERpdkVs
ZW1lbnQ+IHJvb3Q7CisgICAgICAgIFZlY3RvcjxUZXh0UmVjb2duaXRpb25MaW5lRWxlbWVudHM+
IGxpbmVzOworICAgICAgICBWZWN0b3I8UmVmPEhUTUxEaXZFbGVtZW50Pj4gZGF0YURldGVjdG9y
czsKKyAgICB9OworCisgICAgYm9vbCBoYWRFeGlzdGluZ1RleHRSZWNvZ25pdGlvbkVsZW1lbnRz
ID0gZmFsc2U7CisgICAgVGV4dFJlY29nbml0aW9uRWxlbWVudHMgdGV4dFJlY29nbml0aW9uRWxl
bWVudHM7CisgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBtZWRpYUNvbnRyb2xzQ29udGFpbmVyOwor
ICAgIGlmIChSZWZQdHIgc2hhZG93Um9vdCA9IGVsZW1lbnQuc2hhZG93Um9vdCgpKSB7CisjaWYg
RU5BQkxFKE1PREVSTl9NRURJQV9DT05UUk9MUykKKyAgICAgICAgaWYgKGlzPEhUTUxNZWRpYUVs
ZW1lbnQ+KGVsZW1lbnQpKSB7CisgICAgICAgICAgICBpZiAoUmVmUHRyIGNvbnRyb2xzSG9zdCA9
IGRvd25jYXN0PEhUTUxNZWRpYUVsZW1lbnQ+KGVsZW1lbnQpLm1lZGlhQ29udHJvbHNIb3N0KCkp
IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBjb250YWluZXJDbGFzcyA9IGNvbnRyb2xzSG9zdC0+
bWVkaWFDb250cm9sc0NvbnRhaW5lckNsYXNzTmFtZSgpOworICAgICAgICAgICAgICAgIGZvciAo
YXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxIVE1MRGl2RWxlbWVudD4oKnNoYWRvd1Jvb3Qp
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5oYXNDbGFzcygpICYmIGNoaWxkLmNs
YXNzTmFtZXMoKS5jb250YWlucyhjb250YWluZXJDbGFzcykpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1lZGlhQ29udHJvbHNDb250YWluZXIgPSAmY2hpbGQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGlmIChoYXNJbWFnZU92
ZXJsYXkoZWxlbWVudCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBjb250
YWluZXJGb3JJbWFnZU92ZXJsYXk7CisgICAgICAgICAgICBpZiAobWVkaWFDb250cm9sc0NvbnRh
aW5lcikKKyAgICAgICAgICAgICAgICBjb250YWluZXJGb3JJbWFnZU92ZXJsYXkgPSBtZWRpYUNv
bnRyb2xzQ29udGFpbmVyOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbnRh
aW5lckZvckltYWdlT3ZlcmxheSA9IHNoYWRvd1Jvb3Q7CisgICAgICAgICAgICBmb3IgKGF1dG8m
IGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8SFRNTERpdkVsZW1lbnQ+KCpjb250YWluZXJGb3JJbWFn
ZU92ZXJsYXkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmdldElkQXR0cmlidXRlKCkg
PT0gaW1hZ2VPdmVybGF5RWxlbWVudElkZW50aWZpZXIoKSkgeworICAgICAgICAgICAgICAgICAg
ICB0ZXh0UmVjb2duaXRpb25FbGVtZW50cy5yb290ID0gJmNoaWxkOworICAgICAgICAgICAgICAg
ICAgICBoYWRFeGlzdGluZ1RleHRSZWNvZ25pdGlvbkVsZW1lbnRzID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHRleHRSZWNvZ25pdGlvbkVsZW1lbnRzLnJvb3Qp
IHsKKyAgICAgICAgZm9yIChhdXRvJiBsaW5lT3JEYXRhRGV0ZWN0b3IgOiBjaGlsZHJlbk9mVHlw
ZTxIVE1MRGl2RWxlbWVudD4oKnRleHRSZWNvZ25pdGlvbkVsZW1lbnRzLnJvb3QpKSB7CisgICAg
ICAgICAgICBpZiAoIWxpbmVPckRhdGFEZXRlY3Rvci5oYXNDbGFzcygpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAobGluZU9yRGF0YURldGVjdG9yLmNsYXNz
TGlzdCgpLmNvbnRhaW5zKGltYWdlT3ZlcmxheUxpbmVDbGFzcykpIHsKKyAgICAgICAgICAgICAg
ICBUZXh0UmVjb2duaXRpb25MaW5lRWxlbWVudHMgbGluZUVsZW1lbnRzIHsgbGluZU9yRGF0YURl
dGVjdG9yLCB7IH0gfTsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHRleHQgOiBjaGlsZHJl
bk9mVHlwZTxIVE1MRGl2RWxlbWVudD4obGluZU9yRGF0YURldGVjdG9yKSkKKyAgICAgICAgICAg
ICAgICAgICAgbGluZUVsZW1lbnRzLmNoaWxkcmVuLmFwcGVuZCh0ZXh0KTsKKyAgICAgICAgICAg
ICAgICB0ZXh0UmVjb2duaXRpb25FbGVtZW50cy5saW5lcy5hcHBlbmQoV1RGTW92ZShsaW5lRWxl
bWVudHMpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobGluZU9yRGF0YURldGVjdG9yLmNsYXNz
TGlzdCgpLmNvbnRhaW5zKGltYWdlT3ZlcmxheURhdGFEZXRlY3RvckNsYXNzTmFtZSgpKSkKKyAg
ICAgICAgICAgICAgICB0ZXh0UmVjb2duaXRpb25FbGVtZW50cy5kYXRhRGV0ZWN0b3JzLmFwcGVu
ZChsaW5lT3JEYXRhRGV0ZWN0b3IpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBjYW5Vc2VF
eGlzdGluZ1RleHRSZWNvZ25pdGlvbkVsZW1lbnRzID0gKFsmXSB7CisgICAgICAgICAgICBpZiAo
cmVzdWx0LmRhdGFEZXRlY3RvcnMuc2l6ZSgpICE9IHRleHRSZWNvZ25pdGlvbkVsZW1lbnRzLmRh
dGFEZXRlY3RvcnMuc2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICAgICAgaWYgKHJlc3VsdC5saW5lcy5zaXplKCkgIT0gdGV4dFJlY29nbml0aW9uRWxlbWVu
dHMubGluZXMuc2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICAgICAgZm9yIChzaXplX3QgbGluZUluZGV4ID0gMDsgbGluZUluZGV4IDwgcmVzdWx0LmxpbmVz
LnNpemUoKTsgKytsaW5lSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBjaGlsZFJlc3Vs
dHMgPSByZXN1bHQubGluZXNbbGluZUluZGV4XS5jaGlsZHJlbjsKKyAgICAgICAgICAgICAgICBh
dXRvJiBjaGlsZFRleHRFbGVtZW50cyA9IHRleHRSZWNvZ25pdGlvbkVsZW1lbnRzLmxpbmVzW2xp
bmVJbmRleF0uY2hpbGRyZW47CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkUmVzdWx0cy5zaXpl
KCkgIT0gY2hpbGRUZXh0RWxlbWVudHMuc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBjaGlsZEluZGV4ID0gMDsg
Y2hpbGRJbmRleCA8IGNoaWxkUmVzdWx0cy5zaXplKCk7ICsrY2hpbGRJbmRleCkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoY2hpbGRSZXN1bHRzW2NoaWxkSW5kZXhdLnRleHQgIT0gY2hpbGRU
ZXh0RWxlbWVudHNbY2hpbGRJbmRleF0tPnRleHRDb250ZW50KCkuc3RyaXBXaGl0ZVNwYWNlKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSko
KTsKKworICAgICAgICBpZiAoIWNhblVzZUV4aXN0aW5nVGV4dFJlY29nbml0aW9uRWxlbWVudHMp
IHsKKyAgICAgICAgICAgIHRleHRSZWNvZ25pdGlvbkVsZW1lbnRzLnJvb3QtPnJlbW92ZSgpOwor
ICAgICAgICAgICAgdGV4dFJlY29nbml0aW9uRWxlbWVudHMgPSB7IH07CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAocmVzdWx0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
UmVmIGRvY3VtZW50ID0gZWxlbWVudC5kb2N1bWVudCgpOworICAgIFJlZiBzaGFkb3dSb290ID0g
ZWxlbWVudC5lbnN1cmVVc2VyQWdlbnRTaGFkb3dSb290KCk7CisgICAgaWYgKCF0ZXh0UmVjb2du
aXRpb25FbGVtZW50cy5yb290KSB7CisgICAgICAgIGF1dG8gcm9vdENvbnRhaW5lciA9IEhUTUxE
aXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQuZ2V0KCkpOworICAgICAgICByb290Q29udGFpbmVy
LT5zZXRJZEF0dHJpYnV0ZShpbWFnZU92ZXJsYXlFbGVtZW50SWRlbnRpZmllcigpKTsKKyAgICAg
ICAgaWYgKGRvY3VtZW50LT5pc0ltYWdlRG9jdW1lbnQoKSkKKyAgICAgICAgICAgIHJvb3RDb250
YWluZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRVc2VyU2VsZWN0
LCBDU1NWYWx1ZVRleHQpOworCisgICAgICAgIGlmIChtZWRpYUNvbnRyb2xzQ29udGFpbmVyKQor
ICAgICAgICAgICAgbWVkaWFDb250cm9sc0NvbnRhaW5lci0+YXBwZW5kQ2hpbGQocm9vdENvbnRh
aW5lcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNoYWRvd1Jvb3QtPmFwcGVuZENoaWxk
KHJvb3RDb250YWluZXIpOworICAgICAgICB0ZXh0UmVjb2duaXRpb25FbGVtZW50cy5yb290ID0g
cm9vdENvbnRhaW5lci5jb3B5UmVmKCk7CisgICAgICAgIHRleHRSZWNvZ25pdGlvbkVsZW1lbnRz
LmxpbmVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocmVzdWx0LmxpbmVzLnNpemUoKSk7CisgICAg
ICAgIGZvciAoYXV0byYgbGluZSA6IHJlc3VsdC5saW5lcykgeworICAgICAgICAgICAgYXV0byBs
aW5lQ29udGFpbmVyID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudC5nZXQoKSk7Cisg
ICAgICAgICAgICBsaW5lQ29udGFpbmVyLT5jbGFzc0xpc3QoKS5hZGQoaW1hZ2VPdmVybGF5TGlu
ZUNsYXNzKTsKKyAgICAgICAgICAgIHJvb3RDb250YWluZXItPmFwcGVuZENoaWxkKGxpbmVDb250
YWluZXIpOworICAgICAgICAgICAgVGV4dFJlY29nbml0aW9uTGluZUVsZW1lbnRzIGxpbmVFbGVt
ZW50cyB7IGxpbmVDb250YWluZXIsIHsgfSB9OworICAgICAgICAgICAgbGluZUVsZW1lbnRzLmNo
aWxkcmVuLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGluZS5jaGlsZHJlbi5zaXplKCkpOworICAg
ICAgICAgICAgZm9yIChzaXplX3QgY2hpbGRJbmRleCA9IDA7IGNoaWxkSW5kZXggPCBsaW5lLmNo
aWxkcmVuLnNpemUoKTsgKytjaGlsZEluZGV4KSB7CisgICAgICAgICAgICAgICAgYXV0byYgY2hp
bGQgPSBsaW5lLmNoaWxkcmVuW2NoaWxkSW5kZXhdOworICAgICAgICAgICAgICAgIGF1dG8gdGV4
dENvbnRhaW5lciA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQuZ2V0KCkpOworICAg
ICAgICAgICAgICAgIHRleHRDb250YWluZXItPmNsYXNzTGlzdCgpLmFkZChpbWFnZU92ZXJsYXlU
ZXh0Q2xhc3MpOworICAgICAgICAgICAgICAgIGxpbmVDb250YWluZXItPmFwcGVuZENoaWxkKHRl
eHRDb250YWluZXIpOworICAgICAgICAgICAgICAgIHRleHRDb250YWluZXItPmFwcGVuZENoaWxk
KFRleHQ6OmNyZWF0ZShkb2N1bWVudC5nZXQoKSwgY2hpbGQuaGFzTGVhZGluZ1doaXRlc3BhY2Ug
PyBtYWtlU3RyaW5nKCdcbicsIGNoaWxkLnRleHQpIDogY2hpbGQudGV4dCkpOworICAgICAgICAg
ICAgICAgIGxpbmVFbGVtZW50cy5jaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSh0ZXh0
Q29udGFpbmVyKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxpbmVDb250YWluZXIt
PmFwcGVuZENoaWxkKEhUTUxCUkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudC5nZXQoKSkpOworICAg
ICAgICAgICAgdGV4dFJlY29nbml0aW9uRWxlbWVudHMubGluZXMudW5jaGVja2VkQXBwZW5kKFdU
Rk1vdmUobGluZUVsZW1lbnRzKSk7CisgICAgICAgIH0KKworI2lmIEVOQUJMRShEQVRBX0RFVEVD
VElPTikKKyAgICAgICAgdGV4dFJlY29nbml0aW9uRWxlbWVudHMuZGF0YURldGVjdG9ycy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHJlc3VsdC5kYXRhRGV0ZWN0b3JzLnNpemUoKSk7CisgICAgICAg
IGZvciAoYXV0byYgZGF0YURldGVjdG9yIDogcmVzdWx0LmRhdGFEZXRlY3RvcnMpIHsKKyAgICAg
ICAgICAgIGF1dG8gZGF0YURldGVjdG9yQ29udGFpbmVyID0gRGF0YURldGVjdGlvbjo6Y3JlYXRl
RWxlbWVudEZvckltYWdlT3ZlcmxheShkb2N1bWVudC5nZXQoKSwgZGF0YURldGVjdG9yKTsKKyAg
ICAgICAgICAgIGRhdGFEZXRlY3RvckNvbnRhaW5lci0+Y2xhc3NMaXN0KCkuYWRkKGltYWdlT3Zl
cmxheURhdGFEZXRlY3RvckNsYXNzTmFtZSgpKTsKKyAgICAgICAgICAgIHJvb3RDb250YWluZXIt
PmFwcGVuZENoaWxkKGRhdGFEZXRlY3RvckNvbnRhaW5lcik7CisgICAgICAgICAgICB0ZXh0UmVj
b2duaXRpb25FbGVtZW50cy5kYXRhRGV0ZWN0b3JzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGRh
dGFEZXRlY3RvckNvbnRhaW5lcikpOworICAgICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKERBVEFf
REVURUNUSU9OKQorCisgICAgICAgIGlmIChkb2N1bWVudC0+cXVpcmtzKCkubmVlZHNUb0ZvcmNl
VXNlclNlbGVjdFdoZW5JbnN0YWxsaW5nSW1hZ2VPdmVybGF5KCkpCisgICAgICAgICAgICBlbGVt
ZW50LnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRVc2VyU2VsZWN0LCBD
U1NWYWx1ZVRleHQpOworICAgIH0KKworICAgIGlmICghaGFkRXhpc3RpbmdUZXh0UmVjb2duaXRp
b25FbGVtZW50cykgeworICAgICAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNv
bnN0IFN0cmluZz4gc2hhZG93U3R5bGUoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmco
aW1hZ2VPdmVybGF5VXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKGltYWdlT3ZlcmxheVVzZXJB
Z2VudFN0eWxlU2hlZXQpKSk7CisgICAgICAgIGF1dG8gc3R5bGUgPSBIVE1MU3R5bGVFbGVtZW50
OjpjcmVhdGUoSFRNTE5hbWVzOjpzdHlsZVRhZywgZG9jdW1lbnQuZ2V0KCksIGZhbHNlKTsKKyAg
ICAgICAgc3R5bGUtPnNldFRleHRDb250ZW50KHNoYWRvd1N0eWxlKTsKKyAgICAgICAgc2hhZG93
Um9vdC0+YXBwZW5kQ2hpbGQoV1RGTW92ZShzdHlsZSkpOworICAgIH0KKworICAgIGRvY3VtZW50
LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKworICAgIGF1dG8qIHJl
bmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOworICAgIGlmICghaXM8UmVuZGVySW1hZ2U+KHJl
bmRlcmVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZG93bmNhc3Q8UmVuZGVySW1hZ2U+KCpy
ZW5kZXJlcikuc2V0SGFzSW1hZ2VPdmVybGF5KCk7CisKKyAgICBhdXRvIGNvbnRhaW5lclJlY3Qg
PSBjb250YWluZXJSZWN0Rm9ySW1hZ2VPdmVybGF5KGVsZW1lbnQpOworICAgIGF1dG8gY29udmVy
dFRvQ29udGFpbmVyQ29vcmRpbmF0ZXMgPSBbJl0oY29uc3QgRmxvYXRRdWFkJiBub3JtYWxpemVk
UXVhZCkgeworICAgICAgICBhdXRvIHF1YWQgPSBub3JtYWxpemVkUXVhZDsKKyAgICAgICAgcXVh
ZC5zY2FsZShjb250YWluZXJSZWN0LndpZHRoKCksIGNvbnRhaW5lclJlY3QuaGVpZ2h0KCkpOwor
ICAgICAgICBxdWFkLm1vdmUoY29udGFpbmVyUmVjdC54KCksIGNvbnRhaW5lclJlY3QueSgpKTsK
KyAgICAgICAgcmV0dXJuIHF1YWQ7CisgICAgfTsKKworICAgIGJvb2wgYXBwbHlVc2VyU2VsZWN0
QWxsID0gZG9jdW1lbnQtPmlzSW1hZ2VEb2N1bWVudCgpIHx8IHJlbmRlcmVyLT5zdHlsZSgpLnVz
ZXJTZWxlY3QoKSAhPSBVc2VyU2VsZWN0OjpOb25lOworICAgIGZvciAoc2l6ZV90IGxpbmVJbmRl
eCA9IDA7IGxpbmVJbmRleCA8IHJlc3VsdC5saW5lcy5zaXplKCk7ICsrbGluZUluZGV4KSB7Cisg
ICAgICAgIGF1dG8mIGxpbmVFbGVtZW50cyA9IHRleHRSZWNvZ25pdGlvbkVsZW1lbnRzLmxpbmVz
W2xpbmVJbmRleF07CisgICAgICAgIGF1dG8mIGxpbmVDb250YWluZXIgPSBsaW5lRWxlbWVudHMu
bGluZTsKKyAgICAgICAgYXV0byYgbGluZSA9IHJlc3VsdC5saW5lc1tsaW5lSW5kZXhdOworICAg
ICAgICBhdXRvIGxpbmVRdWFkID0gY29udmVydFRvQ29udGFpbmVyQ29vcmRpbmF0ZXMobGluZS5u
b3JtYWxpemVkUXVhZCk7CisgICAgICAgIGlmIChsaW5lUXVhZC5pc0VtcHR5KCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBhdXRvIGxpbmVCb3VuZHMgPSByb3RhdGVkQm91bmRp
bmdSZWN0V2l0aE1pbmltdW1BbmdsZU9mUm90YXRpb24obGluZVF1YWQsIDAuMDEpOworICAgICAg
ICBsaW5lQ29udGFpbmVyLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgs
IGxpbmVCb3VuZHMuc2l6ZS53aWR0aCgpLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICAgICAg
bGluZUNvbnRhaW5lci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwg
bGluZUJvdW5kcy5zaXplLmhlaWdodCgpLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICAgICAg
bGluZUNvbnRhaW5lci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRyYW5zZm9y
bSwgbWFrZVN0cmluZygKKyAgICAgICAgICAgICJ0cmFuc2xhdGUoIl9zLAorICAgICAgICAgICAg
c3RkOjpyb3VuZChsaW5lQm91bmRzLmNlbnRlci54KCkgLSAobGluZUJvdW5kcy5zaXplLndpZHRo
KCkgLyAyKSksICJweCwgIl9zLAorICAgICAgICAgICAgc3RkOjpyb3VuZChsaW5lQm91bmRzLmNl
bnRlci55KCkgLSAobGluZUJvdW5kcy5zaXplLmhlaWdodCgpIC8gMikpLCAicHgpICJfcywKKyAg
ICAgICAgICAgIGxpbmVCb3VuZHMuYW5nbGVJblJhZGlhbnMgPyBtYWtlU3RyaW5nKCJyb3RhdGUo
Il9zLCBsaW5lQm91bmRzLmFuZ2xlSW5SYWRpYW5zLCAicmFkKSAiX3MpIDogZW1wdHlTdHJpbmco
KQorICAgICAgICApKTsKKworICAgICAgICBhdXRvIG9mZnNldEFsb25nSG9yaXpvbnRhbEF4aXMg
PSBbJl0oY29uc3QgRmxvYXRQb2ludCYgcXVhZFBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcXVh
ZFBvaW50MikgeworICAgICAgICAgICAgYXV0byBpbnRlcnZhbExlbmd0aCA9IGxpbmVCb3VuZHMu
c2l6ZS53aWR0aCgpOworICAgICAgICAgICAgYXV0byBtaWQgPSBtaWRQb2ludChxdWFkUG9pbnQx
LCBxdWFkUG9pbnQyKTsKKyAgICAgICAgICAgIG1pZC5tb3ZlQnkoLWxpbmVCb3VuZHMuY2VudGVy
KTsKKyAgICAgICAgICAgIG1pZC5yb3RhdGUoLWxpbmVCb3VuZHMuYW5nbGVJblJhZGlhbnMpOwor
ICAgICAgICAgICAgcmV0dXJuIGludGVydmFsTGVuZ3RoICogY2xhbXBUbzxmbG9hdD4oMC41ICsg
bWlkLngoKSAvIGludGVydmFsTGVuZ3RoLCAwLCAxKTsKKyAgICAgICAgfTsKKworICAgICAgICBh
dXRvIG9mZnNldHNBbG9uZ0hvcml6b250YWxBeGlzID0gbGluZS5jaGlsZHJlbi5tYXAoWyZdKGF1
dG8mIGNoaWxkKSAtPiBXVEY6OlJhbmdlPGZsb2F0PiB7CisgICAgICAgICAgICBhdXRvIHRleHRR
dWFkID0gY29udmVydFRvQ29udGFpbmVyQ29vcmRpbmF0ZXMoY2hpbGQubm9ybWFsaXplZFF1YWQp
OworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICBvZmZzZXRBbG9uZ0hvcml6
b250YWxBeGlzKHRleHRRdWFkLnAxKCksIHRleHRRdWFkLnA0KCkpLAorICAgICAgICAgICAgICAg
IG9mZnNldEFsb25nSG9yaXpvbnRhbEF4aXModGV4dFF1YWQucDIoKSwgdGV4dFF1YWQucDMoKSkK
KyAgICAgICAgICAgIH07CisgICAgICAgIH0pOworCisgICAgICAgIGZvciAoc2l6ZV90IGNoaWxk
SW5kZXggPSAwOyBjaGlsZEluZGV4IDwgbGluZS5jaGlsZHJlbi5zaXplKCk7ICsrY2hpbGRJbmRl
eCkgeworICAgICAgICAgICAgYXV0byYgdGV4dENvbnRhaW5lciA9IGxpbmVFbGVtZW50cy5jaGls
ZHJlbltjaGlsZEluZGV4XTsKKyAgICAgICAgICAgIGJvb2wgbGluZUhhc09uZUNoaWxkID0gbGlu
ZS5jaGlsZHJlbi5zaXplKCkgPT0gMTsKKyAgICAgICAgICAgIGZsb2F0IGhvcml6b250YWxNYXJn
aW5Ub01pbmltaXplU2VsZWN0aW9uR2FwcyA9IGxpbmVIYXNPbmVDaGlsZCA/IDAgOiAwLjEyNTsK
KyAgICAgICAgICAgIGZsb2F0IGhvcml6b250YWxPZmZzZXQgPSBsaW5lSGFzT25lQ2hpbGQgPyAw
IDogLWhvcml6b250YWxNYXJnaW5Ub01pbmltaXplU2VsZWN0aW9uR2FwczsKKyAgICAgICAgICAg
IGZsb2F0IGhvcml6b250YWxFeHRlbnQgPSBsaW5lSGFzT25lQ2hpbGQgPyAwIDogaG9yaXpvbnRh
bE1hcmdpblRvTWluaW1pemVTZWxlY3Rpb25HYXBzOworCisgICAgICAgICAgICBpZiAobGluZUhh
c09uZUNoaWxkKSB7CisgICAgICAgICAgICAgICAgaG9yaXpvbnRhbE9mZnNldCArPSBvZmZzZXRz
QWxvbmdIb3Jpem9udGFsQXhpc1tjaGlsZEluZGV4XS5iZWdpbigpOworICAgICAgICAgICAgICAg
IGhvcml6b250YWxFeHRlbnQgKz0gb2Zmc2V0c0Fsb25nSG9yaXpvbnRhbEF4aXNbY2hpbGRJbmRl
eF0uZW5kKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFjaGlsZEluZGV4KSB7CisgICAgICAg
ICAgICAgICAgaG9yaXpvbnRhbE9mZnNldCArPSBvZmZzZXRzQWxvbmdIb3Jpem9udGFsQXhpc1tj
aGlsZEluZGV4XS5iZWdpbigpOworICAgICAgICAgICAgICAgIGhvcml6b250YWxFeHRlbnQgKz0g
KG9mZnNldHNBbG9uZ0hvcml6b250YWxBeGlzW2NoaWxkSW5kZXhdLmVuZCgpICsgb2Zmc2V0c0Fs
b25nSG9yaXpvbnRhbEF4aXNbY2hpbGRJbmRleCArIDFdLmJlZ2luKCkpIC8gMjsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoY2hpbGRJbmRleCA9PSBsaW5lLmNoaWxkcmVuLnNpemUoKSAtIDEpIHsK
KyAgICAgICAgICAgICAgICBob3Jpem9udGFsT2Zmc2V0ICs9IChvZmZzZXRzQWxvbmdIb3Jpem9u
dGFsQXhpc1tjaGlsZEluZGV4IC0gMV0uZW5kKCkgKyBvZmZzZXRzQWxvbmdIb3Jpem9udGFsQXhp
c1tjaGlsZEluZGV4XS5iZWdpbigpKSAvIDI7CisgICAgICAgICAgICAgICAgaG9yaXpvbnRhbEV4
dGVudCArPSBvZmZzZXRzQWxvbmdIb3Jpem9udGFsQXhpc1tjaGlsZEluZGV4XS5lbmQoKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaG9yaXpvbnRhbE9mZnNldCArPSAo
b2Zmc2V0c0Fsb25nSG9yaXpvbnRhbEF4aXNbY2hpbGRJbmRleCAtIDFdLmVuZCgpICsgb2Zmc2V0
c0Fsb25nSG9yaXpvbnRhbEF4aXNbY2hpbGRJbmRleF0uYmVnaW4oKSkgLyAyOworICAgICAgICAg
ICAgICAgIGhvcml6b250YWxFeHRlbnQgKz0gKG9mZnNldHNBbG9uZ0hvcml6b250YWxBeGlzW2No
aWxkSW5kZXhdLmVuZCgpICsgb2Zmc2V0c0Fsb25nSG9yaXpvbnRhbEF4aXNbY2hpbGRJbmRleCAr
IDFdLmJlZ2luKCkpIC8gMjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgRmxvYXRTaXpl
IHRhcmdldFNpemUgeyBob3Jpem9udGFsRXh0ZW50IC0gaG9yaXpvbnRhbE9mZnNldCwgbGluZUJv
dW5kcy5zaXplLmhlaWdodCgpIH07CisgICAgICAgICAgICBpZiAodGFyZ2V0U2l6ZS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgICAgICB0ZXh0Q29udGFpbmVyLT5zZXRJbmxpbmVTdHlsZVByb3Bl
cnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtLCAic2NhbGUoMCwgMCkiKTsKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZG9jdW1lbnQtPnVwZGF0
ZUxheW91dElmRGltZW5zaW9uc091dE9mRGF0ZSh0ZXh0Q29udGFpbmVyKTsKKworICAgICAgICAg
ICAgRmxvYXRTaXplIHNpemVCZWZvcmVUcmFuc2Zvcm07CisgICAgICAgICAgICBpZiAoYXV0byog
cmVuZGVyZXIgPSB0ZXh0Q29udGFpbmVyLT5yZW5kZXJCb3hNb2RlbE9iamVjdCgpKSB7CisgICAg
ICAgICAgICAgICAgc2l6ZUJlZm9yZVRyYW5zZm9ybSA9IHsKKyAgICAgICAgICAgICAgICAgICAg
YWRqdXN0TGF5b3V0VW5pdEZvckFic29sdXRlWm9vbShyZW5kZXJlci0+b2Zmc2V0V2lkdGgoKSwg
KnJlbmRlcmVyKS50b0Zsb2F0KCksCisgICAgICAgICAgICAgICAgICAgIGFkanVzdExheW91dFVu
aXRGb3JBYnNvbHV0ZVpvb20ocmVuZGVyZXItPm9mZnNldEhlaWdodCgpLCAqcmVuZGVyZXIpLnRv
RmxvYXQoKSwKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoc2l6ZUJlZm9yZVRyYW5zZm9ybS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICB0
ZXh0Q29udGFpbmVyLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3Jt
LCAic2NhbGUoMCwgMCkiKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgdGV4dENvbnRhaW5lci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShD
U1NQcm9wZXJ0eVRyYW5zZm9ybSwgbWFrZVN0cmluZygKKyAgICAgICAgICAgICAgICAidHJhbnNs
YXRlKCJfcywKKyAgICAgICAgICAgICAgICBob3Jpem9udGFsT2Zmc2V0ICsgKHRhcmdldFNpemUu
d2lkdGgoKSAtIHNpemVCZWZvcmVUcmFuc2Zvcm0ud2lkdGgoKSkgLyAyLCAicHgsICJfcywKKyAg
ICAgICAgICAgICAgICAodGFyZ2V0U2l6ZS5oZWlnaHQoKSAtIHNpemVCZWZvcmVUcmFuc2Zvcm0u
aGVpZ2h0KCkpIC8gMiwgInB4KSAiX3MsCisgICAgICAgICAgICAgICAgInNjYWxlKCJfcywgdGFy
Z2V0U2l6ZS53aWR0aCgpIC8gc2l6ZUJlZm9yZVRyYW5zZm9ybS53aWR0aCgpLCAiLCAiX3MsIHRh
cmdldFNpemUuaGVpZ2h0KCkgLyBzaXplQmVmb3JlVHJhbnNmb3JtLmhlaWdodCgpLCAiKSAiX3MK
KyAgICAgICAgICAgICkpOworCisgICAgICAgICAgICB0ZXh0Q29udGFpbmVyLT5zZXRJbmxpbmVT
dHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VXNlclNlbGVjdCwgYXBwbHlVc2VyU2VsZWN0
QWxsID8gQ1NTVmFsdWVBbGwgOiBDU1NWYWx1ZU5vbmUpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGRvY3VtZW50LT5pc0ltYWdlRG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGxpbmVDb250YWlu
ZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3IsIENTU1ZhbHVlVGV4
dCk7CisgICAgfQorCisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorICAgIGZvciAoc2l6ZV90
IGluZGV4ID0gMDsgaW5kZXggPCByZXN1bHQuZGF0YURldGVjdG9ycy5zaXplKCk7ICsraW5kZXgp
IHsKKyAgICAgICAgYXV0byBkYXRhRGV0ZWN0b3JDb250YWluZXIgPSB0ZXh0UmVjb2duaXRpb25F
bGVtZW50cy5kYXRhRGV0ZWN0b3JzW2luZGV4XTsKKyAgICAgICAgYXV0byYgZGF0YURldGVjdG9y
ID0gcmVzdWx0LmRhdGFEZXRlY3RvcnNbaW5kZXhdOworICAgICAgICBpZiAoZGF0YURldGVjdG9y
Lm5vcm1hbGl6ZWRRdWFkcy5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbWUgdXAgd2l0aCBhIHdheSB0byBjb2FsZXNjZSB0
aGUgYm91bmRpbmcgcXVhZHMgaW50byBvbmUgb3IgbW9yZSByb3RhdGVkIHJlY3RzIHdpdGggdGhl
IHNhbWUgYW5nbGUgb2Ygcm90YXRpb24uCisgICAgICAgIGF1dG8gdGFyZ2V0UXVhZCA9IGNvbnZl
cnRUb0NvbnRhaW5lckNvb3JkaW5hdGVzKGRhdGFEZXRlY3Rvci5ub3JtYWxpemVkUXVhZHMuZmly
c3QoKSk7CisgICAgICAgIGF1dG8gdGFyZ2V0Qm91bmRzID0gcm90YXRlZEJvdW5kaW5nUmVjdFdp
dGhNaW5pbXVtQW5nbGVPZlJvdGF0aW9uKHRhcmdldFF1YWQsIDAuMDEpOworICAgICAgICBkYXRh
RGV0ZWN0b3JDb250YWluZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0
aCwgdGFyZ2V0Qm91bmRzLnNpemUud2lkdGgoKSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAg
ICAgIGRhdGFEZXRlY3RvckNvbnRhaW5lci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUhlaWdodCwgdGFyZ2V0Qm91bmRzLnNpemUuaGVpZ2h0KCksIENTU1VuaXRUeXBlOjpDU1Nf
UFgpOworICAgICAgICBkYXRhRGV0ZWN0b3JDb250YWluZXItPnNldElubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlUcmFuc2Zvcm0sIG1ha2VTdHJpbmcoCisgICAgICAgICAgICAidHJhbnNs
YXRlKCJfcywKKyAgICAgICAgICAgIHN0ZDo6cm91bmQodGFyZ2V0Qm91bmRzLmNlbnRlci54KCkg
LSAodGFyZ2V0Qm91bmRzLnNpemUud2lkdGgoKSAvIDIpKSwgInB4LCAiX3MsCisgICAgICAgICAg
ICBzdGQ6OnJvdW5kKHRhcmdldEJvdW5kcy5jZW50ZXIueSgpIC0gKHRhcmdldEJvdW5kcy5zaXpl
LmhlaWdodCgpIC8gMikpLCAicHgpICJfcywKKyAgICAgICAgICAgIHRhcmdldEJvdW5kcy5hbmds
ZUluUmFkaWFucyA/IG1ha2VTdHJpbmcoInJvdGF0ZSgiX3MsIHRhcmdldEJvdW5kcy5hbmdsZUlu
UmFkaWFucywgInJhZCkgIl9zKSA6IGVtcHR5U3RyaW5nKCkKKyAgICAgICAgKSk7CisgICAgfQor
I2VuZGlmIC8vIEVOQUJMRShEQVRBX0RFVEVDVElPTikKKworICAgIGlmIChSZWZQdHIgZnJhbWUg
PSBkb2N1bWVudC0+ZnJhbWUoKSkKKyAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLnNjaGVk
dWxlQ3Vyc29yVXBkYXRlKCk7CisKKyAgICBpZiAoY2FjaGVUZXh0UmVjb2duaXRpb25SZXN1bHRz
ID09IENhY2hlVGV4dFJlY29nbml0aW9uUmVzdWx0czo6WWVzKSB7CisgICAgICAgIGlmIChhdXRv
KiBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoKSkKKyAgICAgICAgICAgIHBhZ2UtPmNhY2hlVGV4dFJl
Y29nbml0aW9uUmVzdWx0KGVsZW1lbnQsIGNvbnRhaW5lclJlY3QsIHJlc3VsdCk7CisgICAgfQor
fQorCisjZW5kaWYgLy8gRU5BQkxFKElNQUdFX0FOQUxZU0lTKQorCisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9JbWFnZU92ZXJsYXkuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9JbWFnZU92ZXJsYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNTdkYmZjYTg1
ZjFmNGNkYzlmYjI3MTc5MTAxMjEzMWUxODVkYzZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0ltYWdlT3ZlcmxheS5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkludFJlY3QuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBIVE1MRWxlbWVudDsKK2NsYXNzIE5vZGU7CisKK3N0cnVjdCBTaW1wbGVS
YW5nZTsKK3N0cnVjdCBUZXh0UmVjb2duaXRpb25SZXN1bHQ7CisKK1dFQkNPUkVfRVhQT1JUIGJv
b2wgaGFzSW1hZ2VPdmVybGF5KGNvbnN0IEhUTUxFbGVtZW50Jik7CitXRUJDT1JFX0VYUE9SVCBi
b29sIGlzSW1hZ2VPdmVybGF5RGF0YURldGVjdG9yUmVzdWx0KGNvbnN0IEhUTUxFbGVtZW50Jik7
CitXRUJDT1JFX0VYUE9SVCBib29sIGlzSW5zaWRlSW1hZ2VPdmVybGF5KGNvbnN0IFNpbXBsZVJh
bmdlJik7CitXRUJDT1JFX0VYUE9SVCBib29sIGlzSW5zaWRlSW1hZ2VPdmVybGF5KGNvbnN0IE5v
ZGUmKTsKK1dFQkNPUkVfRVhQT1JUIGJvb2wgaXNJbWFnZU92ZXJsYXlUZXh0KGNvbnN0IE5vZGUm
KTsKK1dFQkNPUkVfRVhQT1JUIGJvb2wgaXNJbWFnZU92ZXJsYXlUZXh0KGNvbnN0IE5vZGUqKTsK
K3ZvaWQgcmVtb3ZlSW1hZ2VPdmVybGF5U29vbklmTmVlZGVkKEhUTUxFbGVtZW50Jik7CitJbnRS
ZWN0IGNvbnRhaW5lclJlY3RGb3JJbWFnZU92ZXJsYXkoSFRNTEVsZW1lbnQmKTsKKworI2lmIEVO
QUJMRShJTUFHRV9BTkFMWVNJUykKK2VudW0gY2xhc3MgQ2FjaGVUZXh0UmVjb2duaXRpb25SZXN1
bHRzIDogYm9vbCB7IE5vLCBZZXMgfTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlV2l0aFRl
eHRSZWNvZ25pdGlvblJlc3VsdChIVE1MRWxlbWVudCYsIGNvbnN0IFRleHRSZWNvZ25pdGlvblJl
c3VsdCYsIENhY2hlVGV4dFJlY29nbml0aW9uUmVzdWx0cyA9IENhY2hlVGV4dFJlY29nbml0aW9u
UmVzdWx0czo6WWVzKTsKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggYzY3MTAyMjdkZGQxNGY1MDZkOGY1MjBjMGU4OTZjYzlj
ZDRlNjlkYi4uMDk0MDIzOGViZWU4NDhjYzllMTljY2Y3NTBlZTk1YjJjN2Q3MzY1YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtNzQsNiArNzQsNyBAQAogI2luY2x1ZGUgIkhUTUxT
cGFuRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxVTGlzdEVsZW1lbnQuaCIKICNpbmNsdWRlICJI
aXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiSW1hZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiSW5k
ZW50T3V0ZGVudENvbW1hbmQuaCIKICNpbmNsdWRlICJJbnB1dEV2ZW50LmgiCiAjaW5jbHVkZSAi
SW5zZXJ0TGlzdENvbW1hbmQuaCIKQEAgLTE0MjYsNyArMTQyNyw3IEBAIHZvaWQgRWRpdG9yOjpw
ZXJmb3JtQ3V0T3JDb3B5KEVkaXRvckFjdGlvblNwZWNpZmllciBhY3Rpb24pCiAgICAgICAgIHVw
ZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKHRydWUpOwogICAgIH0KIAotICAg
IGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5zdGFydCgpKSB8fCAoc2VsZWN0aW9uICYmIEhUTUxFbGVtZW50Ojppc0luc2lkZUlt
YWdlT3ZlcmxheSgqc2VsZWN0aW9uKSkpCisgICAgaWYgKGVuY2xvc2luZ1RleHRGb3JtQ29udHJv
bChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpIHx8IChzZWxlY3Rp
b24gJiYgaXNJbnNpZGVJbWFnZU92ZXJsYXkoKnNlbGVjdGlvbikpKQogICAgICAgICBQYXN0ZWJv
YXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoUGFnZVBhc3RlYm9hcmRDb250ZXh0OjpjcmVhdGUo
bV9kb2N1bWVudC5wYWdlSUQoKSkpLT53cml0ZVBsYWluVGV4dChzZWxlY3RlZFRleHRGb3JEYXRh
VHJhbnNmZXIoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFBhc3RlYm9hcmQ6OkNhblNtYXJ0
UmVwbGFjZSA6IFBhc3RlYm9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFjZSk7CiAgICAgZWxzZSB7CiAg
ICAgICAgIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBpbWFnZUVsZW1lbnQ7CkBAIC0zNjc5LDcg
KzM2ODAsNyBAQCBzdGF0aWMgVmVjdG9yPFNpbXBsZVJhbmdlPiBzY2FuRm9yVGVsZXBob25lTnVt
YmVycyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiAgICAgaWYgKFJlZiBzdGFydE5vZGUgPSBy
YW5nZS5zdGFydENvbnRhaW5lcigpOyBzdGFydE5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGlmIChIVE1MRWxlbWVudDo6aXNJbnNpZGVJbWFnZU92
ZXJsYXkocmFuZ2UpKQorICAgIGlmIChpc0luc2lkZUltYWdlT3ZlcmxheShyYW5nZSkpCiAgICAg
ICAgIHJldHVybiB7IH07CiAKICAgICBhdXRvIHRleHQgPSBwbGFpblRleHQocmFuZ2UpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCAzMGZjZDMwZjRkZjY1
MTFlOTYyYjFiZjFlZTlmZWNmOWMwZGM5OTYzLi43ODYyNzYzNzEyMDNjOTI4NGFjZDg2MTM4Y2Rm
MDZkOTc0YjFkMDEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cApAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5j
bHVkZSAiSW1hZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiSW5saW5lUnVuQW5kT2Zmc2V0LmgiCiAj
aW5jbHVkZSAiTGVnYWN5SW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAg
LTE5MTcsNyArMTkxOCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OmNvbnRhaW5zKGNvbnN0IExh
eW91dFBvaW50JiBwb2ludCkgY29uc3QKICAgICBpZiAoIWlubmVyTm9kZSB8fCAhaW5uZXJOb2Rl
LT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoSFRNTEVsZW1l
bnQ6OmlzSW5zaWRlSW1hZ2VPdmVybGF5KCpyYW5nZSkgJiYgSFRNTEVsZW1lbnQ6OmlzSW5zaWRl
SW1hZ2VPdmVybGF5KCppbm5lck5vZGUpKSB7CisgICAgaWYgKGlzSW5zaWRlSW1hZ2VPdmVybGF5
KCpyYW5nZSkgJiYgaXNJbnNpZGVJbWFnZU92ZXJsYXkoKmlubmVyTm9kZSkpIHsKICAgICAgICAg
Zm9yIChhdXRvIHF1YWQgOiBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKCpyYW5nZSwg
eyBSZW5kZXJPYmplY3Q6OkJvdW5kaW5nUmVjdEJlaGF2aW9yOjpVc2VTZWxlY3Rpb25IZWlnaHQg
fSkpIHsKICAgICAgICAgICAgIGlmICghcXVhZC5pc0VtcHR5KCkgJiYgcXVhZC5jb250YWluc1Bv
aW50KHBvaW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRleCBlYzZmZjI5NGM4MWJkYmJlNzViZTFiYjhmMzE2
NTI5ZDc5OTQ0N2Q3Li4xZWRlMmZmZjZhOWU2ODA1ODgyZGI0NWU3OGI5ZjgwYjE4YzA0ZTg3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCkBAIC00NSw2ICs0NSw3IEBA
CiAjaW5jbHVkZSAiSFRNTFNsb3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSW1hZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiTGVnYWN5SW5saW5lVGV4dEJveC5oIgogI2lu
Y2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSYW5nZS5oIgpAQCAtNzM3LDcgKzcz
OCw3IEBAIGJvb2wgVGV4dEl0ZXJhdG9yOjpoYW5kbGVSZXBsYWNlZEVsZW1lbnQoKQogICAgICAg
ICB9CiAgICAgfQogCi0gICAgaWYgKG1fYmVoYXZpb3JzLmNvbnRhaW5zKFRleHRJdGVyYXRvckJl
aGF2aW9yOjpFbnRlcnNJbWFnZU92ZXJsYXlzKSAmJiBpczxIVE1MRWxlbWVudD4obV9ub2RlKSAm
JiBkb3duY2FzdDxIVE1MRWxlbWVudD4oKm1fbm9kZSkuaGFzSW1hZ2VPdmVybGF5KCkpIHsKKyAg
ICBpZiAobV9iZWhhdmlvcnMuY29udGFpbnMoVGV4dEl0ZXJhdG9yQmVoYXZpb3I6OkVudGVyc0lt
YWdlT3ZlcmxheXMpICYmIGlzPEhUTUxFbGVtZW50PihtX25vZGUpICYmIGhhc0ltYWdlT3Zlcmxh
eShkb3duY2FzdDxIVE1MRWxlbWVudD4oKm1fbm9kZSkpKSB7CiAgICAgICAgIGlmIChSZWZQdHIg
c2hhZG93Um9vdCA9IG1fbm9kZS0+c2hhZG93Um9vdCgpKSB7CiAgICAgICAgICAgICBtX25vZGUg
PSBzaGFkb3dSb290LmdldCgpOwogICAgICAgICAgICAgcHVzaEZ1bGx5Q2xpcHBlZFN0YXRlKG1f
ZnVsbHlDbGlwcGVkU3RhY2ssICptX25vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNw
cAppbmRleCAxNWE0MmJlY2Y0OTA0ZGUxYjgzN2E4ZmI3ZTJkYjRjZjk0YzBhNWIyLi40MTQ2YmUz
ZGZiN2I2ZDU5ZWE2MjE1ZTkwNzBkM2ZjNWFiMTFhYWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxF
bGVtZW50LmNwcApAQCAtNDMsMTEgKzQzLDkgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR2Vv
bWV0cnlVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJIVE1MQkRJRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxCUkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MQnV0dG9uRWxlbWVudC5oIgotI2luY2x1
ZGUgIkhUTUxEaXZFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTEVsZW1lbnRGYWN0b3J5LmgiCiAjaW5jbHVkZSAiSFRNTEZpZWxkU2V0RWxlbWVudC5o
IgpAQCAtNTksMTMgKzU3LDEyIEBACiAjaW5jbHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQu
aCIKLSNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRBcmVh
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmgiCisjaW5j
bHVkZSAiSW1hZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiTWVkaWFDb250cm9sc0hvc3QuaCIKICNp
bmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIlNjcmlwdERpc2FsbG93ZWRTY29wZS5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIK
QEAgLTgyLDE4ICs3OSwxMCBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLSNpZiBFTkFCTEUoSU1BR0VfQU5BTFlT
SVMpCi0jaW5jbHVkZSAiVGV4dFJlY29nbml0aW9uUmVzdWx0LmgiCi0jZW5kaWYKLQogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCiAjaW5jbHVkZSAiU2VsZWN0aW9uR2VvbWV0cnkuaCIKICNlbmRp
ZgogCi0jaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQotI2luY2x1ZGUgIkRhdGFEZXRlY3Rpb24u
aCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FU
RURfSU1QTChIVE1MRWxlbWVudCk7CkBAIC0xMjUyLDIxICsxMjQxLDYgQEAgdm9pZCBIVE1MRWxl
bWVudDo6c2V0RW50ZXJLZXlIaW50KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgc2V0QXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihlbnRlcmtleWhpbnRBdHRyLCB2YWx1ZSk7CiB9CiAK
LS8vIEZJWE1FOiBXZSBzaG91bGQgbW92ZSBhbGwgb2YgdGhpcyBpbWFnZSBvdmVybGF5LXNwZWNp
ZmljIGxvZ2ljIG91dCBpbnRvIGEgc2VwYXJhdGUgaGVscGVyIGZpbGUgKHBvc3NpYmx5IGFzIHN0
YW5kYWxvbmUgZnVuY3Rpb25zKQotLy8gdG8gYmV0dGVyIGNvbXBhcnRtZW50YWxpemUgdGhpcyBj
b2RlLgotCi1zdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgaW1hZ2VPdmVybGF5RWxlbWVudElkZW50
aWZpZXIoKQotewotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRv
bVN0cmluZz4gaWRlbnRpZmllcigiaW1hZ2Utb3ZlcmxheSIsIEF0b21TdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKLSAgICByZXR1cm4gaWRlbnRpZmllcjsKLX0KLQotc3RhdGljIGNvbnN0
IEF0b21TdHJpbmcmIGltYWdlT3ZlcmxheURhdGFEZXRlY3RvckNsYXNzTmFtZSgpCi17Ci0gICAg
c3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBjbGFzc05h
bWUoImltYWdlLW92ZXJsYXktZGF0YS1kZXRlY3Rvci1yZXN1bHQiLCBBdG9tU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIGNsYXNzTmFtZTsKLX0KLQogYm9vbCBIVE1M
RWxlbWVudDo6c2hvdWxkRXh0ZW5kU2VsZWN0aW9uVG9UYXJnZXROb2RlKGNvbnN0IE5vZGUmIHRh
cmdldE5vZGUsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkJlZm9yZVVwZGF0ZSkK
IHsKICAgICBpZiAoYXV0byByYW5nZSA9IHNlbGVjdGlvbkJlZm9yZVVwZGF0ZS5yYW5nZSgpOyBy
YW5nZSAmJiBpc0luc2lkZUltYWdlT3ZlcmxheSgqcmFuZ2UpKQpAQCAtMTI3NSwzODkgKzEyNDks
NiBAQCBib29sIEhUTUxFbGVtZW50OjpzaG91bGRFeHRlbmRTZWxlY3Rpb25Ub1RhcmdldE5vZGUo
Y29uc3QgTm9kZSYgdGFyZ2V0Tm9kZSwgY29ucwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IEhUTUxFbGVtZW50OjpoYXNJbWFnZU92ZXJsYXkoKSBjb25zdAotewotICAgIGF1dG8gc2hhZG93
Um9vdCA9IHRoaXMtPnNoYWRvd1Jvb3QoKTsKLSAgICBpZiAoTElLRUxZKCFzaGFkb3dSb290IHx8
IHNoYWRvd1Jvb3QtPm1vZGUoKSAhPSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmhhc0VsZW1lbnRXaXRo
SWQoKmltYWdlT3ZlcmxheUVsZW1lbnRJZGVudGlmaWVyKCkuaW1wbCgpKTsKLX0KLQotc3RhdGlj
IFJlZlB0cjxIVE1MRWxlbWVudD4gaW1hZ2VPdmVybGF5SG9zdChjb25zdCBOb2RlJiBub2RlKQot
ewotICAgIGF1dG8gaG9zdCA9IG5vZGUuc2hhZG93SG9zdCgpOwotICAgIGlmICghaXM8SFRNTEVs
ZW1lbnQ+KGhvc3QpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlZlB0ciBlbGVt
ZW50IHsgJmRvd25jYXN0PEhUTUxFbGVtZW50PigqaG9zdCkgfTsKLSAgICByZXR1cm4gZWxlbWVu
dC0+aGFzSW1hZ2VPdmVybGF5KCkgPyBlbGVtZW50IDogbnVsbHB0cjsKLX0KLQotYm9vbCBIVE1M
RWxlbWVudDo6aXNJbWFnZU92ZXJsYXlEYXRhRGV0ZWN0b3JSZXN1bHQoKSBjb25zdAotewotICAg
IHJldHVybiBpbWFnZU92ZXJsYXlIb3N0KCp0aGlzKSAmJiBoYXNDbGFzcygpICYmIGNsYXNzTmFt
ZXMoKS5jb250YWlucyhpbWFnZU92ZXJsYXlEYXRhRGV0ZWN0b3JDbGFzc05hbWUoKSk7Ci19Ci0K
LWJvb2wgSFRNTEVsZW1lbnQ6OmlzSW5zaWRlSW1hZ2VPdmVybGF5KGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSkKLXsKLSAgICBSZWZQdHIgY29tbW9uQW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVB
bmNlc3RvcjxDb21wb3NlZFRyZWU+KHJhbmdlKTsKLSAgICBpZiAoIWNvbW1vbkFuY2VzdG9yKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gaXNJbnNpZGVJbWFnZU92ZXJsYXko
KmNvbW1vbkFuY2VzdG9yKTsKLX0KLQotYm9vbCBIVE1MRWxlbWVudDo6aXNJbnNpZGVJbWFnZU92
ZXJsYXkoY29uc3QgTm9kZSYgbm9kZSkKLXsKLSAgICBhdXRvIGhvc3QgPSBpbWFnZU92ZXJsYXlI
b3N0KG5vZGUpOwotICAgIGlmICghaG9zdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
cmV0dXJuIGhvc3QtPnVzZXJBZ2VudFNoYWRvd1Jvb3QoKS0+Y29udGFpbnMobm9kZSk7Ci19Ci0K
LWJvb2wgSFRNTEVsZW1lbnQ6OmlzSW1hZ2VPdmVybGF5VGV4dChjb25zdCBOb2RlKiBub2RlKQot
ewotICAgIHJldHVybiBub2RlICYmIGlzSW1hZ2VPdmVybGF5VGV4dCgqbm9kZSk7Ci19Ci0KLWJv
b2wgSFRNTEVsZW1lbnQ6OmlzSW1hZ2VPdmVybGF5VGV4dChjb25zdCBOb2RlJiBub2RlKQotewot
ICAgIGF1dG8gaG9zdCA9IGltYWdlT3ZlcmxheUhvc3Qobm9kZSk7Ci0gICAgaWYgKCFob3N0KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoUmVmUHRyIG92ZXJsYXkgPSBzdGF0aWNf
Y2FzdDxUcmVlU2NvcGUmPigqaG9zdC0+dXNlckFnZW50U2hhZG93Um9vdCgpKS5nZXRFbGVtZW50
QnlJZChpbWFnZU92ZXJsYXlFbGVtZW50SWRlbnRpZmllcigpKSkKLSAgICAgICAgcmV0dXJuIG5v
ZGUuaXNEZXNjZW5kYW50T2YoKm92ZXJsYXkpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12
b2lkIEhUTUxFbGVtZW50OjpyZW1vdmVJbWFnZU92ZXJsYXlTb29uSWZOZWVkZWQoKQotewotICAg
IGlmICghaGFzSW1hZ2VPdmVybGF5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRvY3VtZW50
KCkuZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6OkludGVybmFsQXN5bmNUYXNrLCBb
d2Vha1RoaXMgPSBXZWFrUHRyIHsgKnRoaXMgfV0gewotICAgICAgICBSZWZQdHIgcHJvdGVjdGVk
VGhpcyA9IHdlYWtUaGlzLmdldCgpOwotICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgUmVmUHRyIHNoYWRvd1Jvb3QgPSBwcm90ZWN0ZWRU
aGlzLT51c2VyQWdlbnRTaGFkb3dSb290KCk7Ci0gICAgICAgIGlmICghc2hhZG93Um9vdCkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoUmVmUHRyIG92ZXJsYXkgPSBzdGF0aWNf
Y2FzdDxUcmVlU2NvcGUmPigqc2hhZG93Um9vdCkuZ2V0RWxlbWVudEJ5SWQoaW1hZ2VPdmVybGF5
RWxlbWVudElkZW50aWZpZXIoKSkpCi0gICAgICAgICAgICBvdmVybGF5LT5yZW1vdmUoKTsKLQot
I2lmIEVOQUJMRShJTUFHRV9BTkFMWVNJUykKLSAgICAgICAgaWYgKGF1dG8gcGFnZSA9IHByb3Rl
Y3RlZFRoaXMtPmRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICAgICAgcGFnZS0+cmVzZXRUZXh0
UmVjb2duaXRpb25SZXN1bHQoKnByb3RlY3RlZFRoaXMpOwotI2VuZGlmCi0gICAgfSk7Ci19Ci0K
LSNpZiBFTkFCTEUoSU1BR0VfQU5BTFlTSVMpCi0KLUludFJlY3QgSFRNTEVsZW1lbnQ6OmNvbnRh
aW5lclJlY3RGb3JUZXh0UmVjb2duaXRpb24oKQotewotICAgIGF1dG8qIHJlbmRlcmVyID0gdGhp
cy0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIWlzPFJlbmRlckltYWdlPihyZW5kZXJlcikpCi0gICAg
ICAgIHJldHVybiB7IH07Ci0KLSAgICBpZiAoIXJlbmRlcmVyLT5vcGFjaXR5KCkpCi0gICAgICAg
IHJldHVybiB7IDAsIDAsIG9mZnNldFdpZHRoKCksIG9mZnNldEhlaWdodCgpIH07Ci0KLSAgICBy
ZXR1cm4gZW5jbG9zaW5nSW50UmVjdChkb3duY2FzdDxSZW5kZXJJbWFnZT4oKnJlbmRlcmVyKS5y
ZXBsYWNlZENvbnRlbnRSZWN0KCkpOwotfQotCi12b2lkIEhUTUxFbGVtZW50Ojp1cGRhdGVXaXRo
VGV4dFJlY29nbml0aW9uUmVzdWx0KGNvbnN0IFRleHRSZWNvZ25pdGlvblJlc3VsdCYgcmVzdWx0
LCBDYWNoZVRleHRSZWNvZ25pdGlvblJlc3VsdHMgY2FjaGVUZXh0UmVjb2duaXRpb25SZXN1bHRz
KQotewotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmlu
Zz4gaW1hZ2VPdmVybGF5TGluZUNsYXNzKCJpbWFnZS1vdmVybGF5LWxpbmUiLCBBdG9tU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ry
b3llZDxjb25zdCBBdG9tU3RyaW5nPiBpbWFnZU92ZXJsYXlUZXh0Q2xhc3MoImltYWdlLW92ZXJs
YXktdGV4dCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLQotICAgIHN0cnVj
dCBUZXh0UmVjb2duaXRpb25MaW5lRWxlbWVudHMgewotICAgICAgICBSZWY8SFRNTERpdkVsZW1l
bnQ+IGxpbmU7Ci0gICAgICAgIFZlY3RvcjxSZWY8SFRNTEVsZW1lbnQ+PiBjaGlsZHJlbjsKLSAg
ICB9OwotCi0gICAgc3RydWN0IFRleHRSZWNvZ25pdGlvbkVsZW1lbnRzIHsKLSAgICAgICAgUmVm
UHRyPEhUTUxEaXZFbGVtZW50PiByb290OwotICAgICAgICBWZWN0b3I8VGV4dFJlY29nbml0aW9u
TGluZUVsZW1lbnRzPiBsaW5lczsKLSAgICAgICAgVmVjdG9yPFJlZjxIVE1MRGl2RWxlbWVudD4+
IGRhdGFEZXRlY3RvcnM7Ci0gICAgfTsKLQotICAgIGJvb2wgaGFkRXhpc3RpbmdUZXh0UmVjb2du
aXRpb25FbGVtZW50cyA9IGZhbHNlOwotICAgIFRleHRSZWNvZ25pdGlvbkVsZW1lbnRzIHRleHRS
ZWNvZ25pdGlvbkVsZW1lbnRzOwotICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbWVkaWFDb250cm9s
c0NvbnRhaW5lcjsKLSAgICBpZiAoUmVmUHRyIHNoYWRvd1Jvb3QgPSB0aGlzLT5zaGFkb3dSb290
KCkpIHsKLSNpZiBFTkFCTEUoTU9ERVJOX01FRElBX0NPTlRST0xTKQotICAgICAgICBpZiAoaXM8
SFRNTE1lZGlhRWxlbWVudD4oKnRoaXMpKSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyIGNvbnRy
b2xzSG9zdCA9IGRvd25jYXN0PEhUTUxNZWRpYUVsZW1lbnQ+KCp0aGlzKS5tZWRpYUNvbnRyb2xz
SG9zdCgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgY29udGFpbmVyQ2xhc3MgPSBjb250cm9s
c0hvc3QtPm1lZGlhQ29udHJvbHNDb250YWluZXJDbGFzc05hbWUoKTsKLSAgICAgICAgICAgICAg
ICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8SFRNTERpdkVsZW1lbnQ+KCpzaGFk
b3dSb290KSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuaGFzQ2xhc3MoKSAmJiBj
aGlsZC5jbGFzc05hbWVzKCkuY29udGFpbnMoY29udGFpbmVyQ2xhc3MpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtZWRpYUNvbnRyb2xzQ29udGFpbmVyID0gJmNoaWxkOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBpZiAoaGFz
SW1hZ2VPdmVybGF5KCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBjb250
YWluZXJGb3JJbWFnZU92ZXJsYXk7Ci0gICAgICAgICAgICBpZiAobWVkaWFDb250cm9sc0NvbnRh
aW5lcikKLSAgICAgICAgICAgICAgICBjb250YWluZXJGb3JJbWFnZU92ZXJsYXkgPSBtZWRpYUNv
bnRyb2xzQ29udGFpbmVyOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRh
aW5lckZvckltYWdlT3ZlcmxheSA9IHNoYWRvd1Jvb3Q7Ci0gICAgICAgICAgICBmb3IgKGF1dG8m
IGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8SFRNTERpdkVsZW1lbnQ+KCpjb250YWluZXJGb3JJbWFn
ZU92ZXJsYXkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxkLmdldElkQXR0cmlidXRlKCkg
PT0gaW1hZ2VPdmVybGF5RWxlbWVudElkZW50aWZpZXIoKSkgewotICAgICAgICAgICAgICAgICAg
ICB0ZXh0UmVjb2duaXRpb25FbGVtZW50cy5yb290ID0gJmNoaWxkOwotICAgICAgICAgICAgICAg
ICAgICBoYWRFeGlzdGluZ1RleHRSZWNvZ25pdGlvbkVsZW1lbnRzID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHRleHRSZWNvZ25pdGlvbkVsZW1lbnRzLnJvb3Qp
IHsKLSAgICAgICAgZm9yIChhdXRvJiBsaW5lT3JEYXRhRGV0ZWN0b3IgOiBjaGlsZHJlbk9mVHlw
ZTxIVE1MRGl2RWxlbWVudD4oKnRleHRSZWNvZ25pdGlvbkVsZW1lbnRzLnJvb3QpKSB7Ci0gICAg
ICAgICAgICBpZiAoIWxpbmVPckRhdGFEZXRlY3Rvci5oYXNDbGFzcygpKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBpZiAobGluZU9yRGF0YURldGVjdG9yLmNsYXNz
TGlzdCgpLmNvbnRhaW5zKGltYWdlT3ZlcmxheUxpbmVDbGFzcykpIHsKLSAgICAgICAgICAgICAg
ICBUZXh0UmVjb2duaXRpb25MaW5lRWxlbWVudHMgbGluZUVsZW1lbnRzIHsgbGluZU9yRGF0YURl
dGVjdG9yLCB7IH0gfTsKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHRleHQgOiBjaGlsZHJl
bk9mVHlwZTxIVE1MRGl2RWxlbWVudD4obGluZU9yRGF0YURldGVjdG9yKSkKLSAgICAgICAgICAg
ICAgICAgICAgbGluZUVsZW1lbnRzLmNoaWxkcmVuLmFwcGVuZCh0ZXh0KTsKLSAgICAgICAgICAg
ICAgICB0ZXh0UmVjb2duaXRpb25FbGVtZW50cy5saW5lcy5hcHBlbmQoV1RGTW92ZShsaW5lRWxl
bWVudHMpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGluZU9yRGF0YURldGVjdG9yLmNsYXNz
TGlzdCgpLmNvbnRhaW5zKGltYWdlT3ZlcmxheURhdGFEZXRlY3RvckNsYXNzTmFtZSgpKSkKLSAg
ICAgICAgICAgICAgICB0ZXh0UmVjb2duaXRpb25FbGVtZW50cy5kYXRhRGV0ZWN0b3JzLmFwcGVu
ZChsaW5lT3JEYXRhRGV0ZWN0b3IpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBjYW5Vc2VF
eGlzdGluZ1RleHRSZWNvZ25pdGlvbkVsZW1lbnRzID0gKFsmXSB7Ci0gICAgICAgICAgICBpZiAo
cmVzdWx0LmRhdGFEZXRlY3RvcnMuc2l6ZSgpICE9IHRleHRSZWNvZ25pdGlvbkVsZW1lbnRzLmRh
dGFEZXRlY3RvcnMuc2l6ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICAgICAgaWYgKHJlc3VsdC5saW5lcy5zaXplKCkgIT0gdGV4dFJlY29nbml0aW9uRWxlbWVu
dHMubGluZXMuc2l6ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICAgICAgZm9yIChzaXplX3QgbGluZUluZGV4ID0gMDsgbGluZUluZGV4IDwgcmVzdWx0LmxpbmVz
LnNpemUoKTsgKytsaW5lSW5kZXgpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBjaGlsZFJlc3Vs
dHMgPSByZXN1bHQubGluZXNbbGluZUluZGV4XS5jaGlsZHJlbjsKLSAgICAgICAgICAgICAgICBh
dXRvJiBjaGlsZFRleHRFbGVtZW50cyA9IHRleHRSZWNvZ25pdGlvbkVsZW1lbnRzLmxpbmVzW2xp
bmVJbmRleF0uY2hpbGRyZW47Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxkUmVzdWx0cy5zaXpl
KCkgIT0gY2hpbGRUZXh0RWxlbWVudHMuc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBjaGlsZEluZGV4ID0gMDsg
Y2hpbGRJbmRleCA8IGNoaWxkUmVzdWx0cy5zaXplKCk7ICsrY2hpbGRJbmRleCkgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoY2hpbGRSZXN1bHRzW2NoaWxkSW5kZXhdLnRleHQgIT0gY2hpbGRU
ZXh0RWxlbWVudHNbY2hpbGRJbmRleF0tPnRleHRDb250ZW50KCkuc3RyaXBXaGl0ZVNwYWNlKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfSko
KTsKLQotICAgICAgICBpZiAoIWNhblVzZUV4aXN0aW5nVGV4dFJlY29nbml0aW9uRWxlbWVudHMp
IHsKLSAgICAgICAgICAgIHRleHRSZWNvZ25pdGlvbkVsZW1lbnRzLnJvb3QtPnJlbW92ZSgpOwot
ICAgICAgICAgICAgdGV4dFJlY29nbml0aW9uRWxlbWVudHMgPSB7IH07Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAocmVzdWx0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
UmVmIHNoYWRvd1Jvb3QgPSBlbnN1cmVVc2VyQWdlbnRTaGFkb3dSb290KCk7Ci0gICAgaWYgKCF0
ZXh0UmVjb2duaXRpb25FbGVtZW50cy5yb290KSB7Ci0gICAgICAgIGF1dG8gcm9vdENvbnRhaW5l
ciA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7Ci0gICAgICAgIHJvb3RDb250
YWluZXItPnNldElkQXR0cmlidXRlKGltYWdlT3ZlcmxheUVsZW1lbnRJZGVudGlmaWVyKCkpOwot
ICAgICAgICBpZiAoZG9jdW1lbnQoKS5pc0ltYWdlRG9jdW1lbnQoKSkKLSAgICAgICAgICAgIHJv
b3RDb250YWluZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRVc2Vy
U2VsZWN0LCBDU1NWYWx1ZVRleHQpOwotCi0gICAgICAgIGlmIChtZWRpYUNvbnRyb2xzQ29udGFp
bmVyKQotICAgICAgICAgICAgbWVkaWFDb250cm9sc0NvbnRhaW5lci0+YXBwZW5kQ2hpbGQocm9v
dENvbnRhaW5lcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNoYWRvd1Jvb3QtPmFwcGVu
ZENoaWxkKHJvb3RDb250YWluZXIpOwotICAgICAgICB0ZXh0UmVjb2duaXRpb25FbGVtZW50cy5y
b290ID0gcm9vdENvbnRhaW5lci5jb3B5UmVmKCk7Ci0gICAgICAgIHRleHRSZWNvZ25pdGlvbkVs
ZW1lbnRzLmxpbmVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocmVzdWx0LmxpbmVzLnNpemUoKSk7
Ci0gICAgICAgIGZvciAoYXV0byYgbGluZSA6IHJlc3VsdC5saW5lcykgewotICAgICAgICAgICAg
YXV0byBsaW5lQ29udGFpbmVyID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsK
LSAgICAgICAgICAgIGxpbmVDb250YWluZXItPmNsYXNzTGlzdCgpLmFkZChpbWFnZU92ZXJsYXlM
aW5lQ2xhc3MpOwotICAgICAgICAgICAgcm9vdENvbnRhaW5lci0+YXBwZW5kQ2hpbGQobGluZUNv
bnRhaW5lcik7Ci0gICAgICAgICAgICBUZXh0UmVjb2duaXRpb25MaW5lRWxlbWVudHMgbGluZUVs
ZW1lbnRzIHsgbGluZUNvbnRhaW5lciwgeyB9IH07Ci0gICAgICAgICAgICBsaW5lRWxlbWVudHMu
Y2hpbGRyZW4ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsaW5lLmNoaWxkcmVuLnNpemUoKSk7Ci0g
ICAgICAgICAgICBmb3IgKHNpemVfdCBjaGlsZEluZGV4ID0gMDsgY2hpbGRJbmRleCA8IGxpbmUu
Y2hpbGRyZW4uc2l6ZSgpOyArK2NoaWxkSW5kZXgpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBj
aGlsZCA9IGxpbmUuY2hpbGRyZW5bY2hpbGRJbmRleF07Ci0gICAgICAgICAgICAgICAgYXV0byB0
ZXh0Q29udGFpbmVyID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKLSAgICAg
ICAgICAgICAgICB0ZXh0Q29udGFpbmVyLT5jbGFzc0xpc3QoKS5hZGQoaW1hZ2VPdmVybGF5VGV4
dENsYXNzKTsKLSAgICAgICAgICAgICAgICBsaW5lQ29udGFpbmVyLT5hcHBlbmRDaGlsZCh0ZXh0
Q29udGFpbmVyKTsKLSAgICAgICAgICAgICAgICB0ZXh0Q29udGFpbmVyLT5hcHBlbmRDaGlsZChU
ZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgY2hpbGQuaGFzTGVhZGluZ1doaXRlc3BhY2UgPyBtYWtl
U3RyaW5nKCdcbicsIGNoaWxkLnRleHQpIDogY2hpbGQudGV4dCkpOwotICAgICAgICAgICAgICAg
IGxpbmVFbGVtZW50cy5jaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSh0ZXh0Q29udGFp
bmVyKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGxpbmVDb250YWluZXItPmFwcGVu
ZENoaWxkKEhUTUxCUkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7Ci0gICAgICAgICAgICB0
ZXh0UmVjb2duaXRpb25FbGVtZW50cy5saW5lcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShsaW5l
RWxlbWVudHMpKTsKLSAgICAgICAgfQotCi0jaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQotICAg
ICAgICB0ZXh0UmVjb2duaXRpb25FbGVtZW50cy5kYXRhRGV0ZWN0b3JzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkocmVzdWx0LmRhdGFEZXRlY3RvcnMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRv
JiBkYXRhRGV0ZWN0b3IgOiByZXN1bHQuZGF0YURldGVjdG9ycykgewotICAgICAgICAgICAgYXV0
byBkYXRhRGV0ZWN0b3JDb250YWluZXIgPSBEYXRhRGV0ZWN0aW9uOjpjcmVhdGVFbGVtZW50Rm9y
SW1hZ2VPdmVybGF5KGRvY3VtZW50KCksIGRhdGFEZXRlY3Rvcik7Ci0gICAgICAgICAgICBkYXRh
RGV0ZWN0b3JDb250YWluZXItPmNsYXNzTGlzdCgpLmFkZChpbWFnZU92ZXJsYXlEYXRhRGV0ZWN0
b3JDbGFzc05hbWUoKSk7Ci0gICAgICAgICAgICByb290Q29udGFpbmVyLT5hcHBlbmRDaGlsZChk
YXRhRGV0ZWN0b3JDb250YWluZXIpOwotICAgICAgICAgICAgdGV4dFJlY29nbml0aW9uRWxlbWVu
dHMuZGF0YURldGVjdG9ycy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShkYXRhRGV0ZWN0b3JDb250
YWluZXIpKTsKLSAgICAgICAgfQotI2VuZGlmIC8vIEVOQUJMRShEQVRBX0RFVEVDVElPTikKLQot
ICAgICAgICBpZiAoZG9jdW1lbnQoKS5xdWlya3MoKS5uZWVkc1RvRm9yY2VVc2VyU2VsZWN0V2hl
bkluc3RhbGxpbmdJbWFnZU92ZXJsYXkoKSkKLSAgICAgICAgICAgIHNldElubGluZVN0eWxlUHJv
cGVydHkoQ1NTUHJvcGVydHlXZWJraXRVc2VyU2VsZWN0LCBDU1NWYWx1ZVRleHQpOwotICAgIH0K
LQotICAgIGlmICghaGFkRXhpc3RpbmdUZXh0UmVjb2duaXRpb25FbGVtZW50cykgewotICAgICAg
ICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gc2hhZG93U3R5
bGUoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoaW1hZ2VPdmVybGF5VXNlckFnZW50
U3R5bGVTaGVldCwgc2l6ZW9mKGltYWdlT3ZlcmxheVVzZXJBZ2VudFN0eWxlU2hlZXQpKSk7Ci0g
ICAgICAgIGF1dG8gc3R5bGUgPSBIVE1MU3R5bGVFbGVtZW50OjpjcmVhdGUoSFRNTE5hbWVzOjpz
dHlsZVRhZywgZG9jdW1lbnQoKSwgZmFsc2UpOwotICAgICAgICBzdHlsZS0+c2V0VGV4dENvbnRl
bnQoc2hhZG93U3R5bGUpOwotICAgICAgICBzaGFkb3dSb290LT5hcHBlbmRDaGlsZChXVEZNb3Zl
KHN0eWxlKSk7Ci0gICAgfQotCi0gICAgZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5k
aW5nU3R5bGVzaGVldHMoKTsKLQotICAgIGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIo
KTsKLSAgICBpZiAoIWlzPFJlbmRlckltYWdlPihyZW5kZXJlcikpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGRvd25jYXN0PFJlbmRlckltYWdlPigqcmVuZGVyZXIpLnNldEhhc0ltYWdlT3Zlcmxh
eSgpOwotCi0gICAgYXV0byBjb250YWluZXJSZWN0ID0gY29udGFpbmVyUmVjdEZvclRleHRSZWNv
Z25pdGlvbigpOwotICAgIGF1dG8gY29udmVydFRvQ29udGFpbmVyQ29vcmRpbmF0ZXMgPSBbJl0o
Y29uc3QgRmxvYXRRdWFkJiBub3JtYWxpemVkUXVhZCkgewotICAgICAgICBhdXRvIHF1YWQgPSBu
b3JtYWxpemVkUXVhZDsKLSAgICAgICAgcXVhZC5zY2FsZShjb250YWluZXJSZWN0LndpZHRoKCks
IGNvbnRhaW5lclJlY3QuaGVpZ2h0KCkpOwotICAgICAgICBxdWFkLm1vdmUoY29udGFpbmVyUmVj
dC54KCksIGNvbnRhaW5lclJlY3QueSgpKTsKLSAgICAgICAgcmV0dXJuIHF1YWQ7Ci0gICAgfTsK
LQotICAgIGJvb2wgYXBwbHlVc2VyU2VsZWN0QWxsID0gZG9jdW1lbnQoKS5pc0ltYWdlRG9jdW1l
bnQoKSB8fCByZW5kZXJlci0+c3R5bGUoKS51c2VyU2VsZWN0KCkgIT0gVXNlclNlbGVjdDo6Tm9u
ZTsKLSAgICBmb3IgKHNpemVfdCBsaW5lSW5kZXggPSAwOyBsaW5lSW5kZXggPCByZXN1bHQubGlu
ZXMuc2l6ZSgpOyArK2xpbmVJbmRleCkgewotICAgICAgICBhdXRvJiBsaW5lRWxlbWVudHMgPSB0
ZXh0UmVjb2duaXRpb25FbGVtZW50cy5saW5lc1tsaW5lSW5kZXhdOwotICAgICAgICBhdXRvJiBs
aW5lQ29udGFpbmVyID0gbGluZUVsZW1lbnRzLmxpbmU7Ci0gICAgICAgIGF1dG8mIGxpbmUgPSBy
ZXN1bHQubGluZXNbbGluZUluZGV4XTsKLSAgICAgICAgYXV0byBsaW5lUXVhZCA9IGNvbnZlcnRU
b0NvbnRhaW5lckNvb3JkaW5hdGVzKGxpbmUubm9ybWFsaXplZFF1YWQpOwotICAgICAgICBpZiAo
bGluZVF1YWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0
byBsaW5lQm91bmRzID0gcm90YXRlZEJvdW5kaW5nUmVjdFdpdGhNaW5pbXVtQW5nbGVPZlJvdGF0
aW9uKGxpbmVRdWFkLCAwLjAxKTsKLSAgICAgICAgbGluZUNvbnRhaW5lci0+c2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCBsaW5lQm91bmRzLnNpemUud2lkdGgoKSwgQ1NT
VW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgIGxpbmVDb250YWluZXItPnNldElubGluZVN0eWxl
UHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIGxpbmVCb3VuZHMuc2l6ZS5oZWlnaHQoKSwgQ1NT
VW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgIGxpbmVDb250YWluZXItPnNldElubGluZVN0eWxl
UHJvcGVydHkoQ1NTUHJvcGVydHlUcmFuc2Zvcm0sIG1ha2VTdHJpbmcoCi0gICAgICAgICAgICAi
dHJhbnNsYXRlKCJfcywKLSAgICAgICAgICAgIHN0ZDo6cm91bmQobGluZUJvdW5kcy5jZW50ZXIu
eCgpIC0gKGxpbmVCb3VuZHMuc2l6ZS53aWR0aCgpIC8gMikpLCAicHgsICJfcywKLSAgICAgICAg
ICAgIHN0ZDo6cm91bmQobGluZUJvdW5kcy5jZW50ZXIueSgpIC0gKGxpbmVCb3VuZHMuc2l6ZS5o
ZWlnaHQoKSAvIDIpKSwgInB4KSAiX3MsCi0gICAgICAgICAgICBsaW5lQm91bmRzLmFuZ2xlSW5S
YWRpYW5zID8gbWFrZVN0cmluZygicm90YXRlKCJfcywgbGluZUJvdW5kcy5hbmdsZUluUmFkaWFu
cywgInJhZCkgIl9zKSA6IGVtcHR5U3RyaW5nKCkKLSAgICAgICAgKSk7Ci0KLSAgICAgICAgYXV0
byBvZmZzZXRBbG9uZ0hvcml6b250YWxBeGlzID0gWyZdKGNvbnN0IEZsb2F0UG9pbnQmIHF1YWRQ
b2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHF1YWRQb2ludDIpIHsKLSAgICAgICAgICAgIGF1dG8g
aW50ZXJ2YWxMZW5ndGggPSBsaW5lQm91bmRzLnNpemUud2lkdGgoKTsKLSAgICAgICAgICAgIGF1
dG8gbWlkID0gbWlkUG9pbnQocXVhZFBvaW50MSwgcXVhZFBvaW50Mik7Ci0gICAgICAgICAgICBt
aWQubW92ZUJ5KC1saW5lQm91bmRzLmNlbnRlcik7Ci0gICAgICAgICAgICBtaWQucm90YXRlKC1s
aW5lQm91bmRzLmFuZ2xlSW5SYWRpYW5zKTsKLSAgICAgICAgICAgIHJldHVybiBpbnRlcnZhbExl
bmd0aCAqIGNsYW1wVG88ZmxvYXQ+KDAuNSArIG1pZC54KCkgLyBpbnRlcnZhbExlbmd0aCwgMCwg
MSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgYXV0byBvZmZzZXRzQWxvbmdIb3Jpem9udGFsQXhp
cyA9IGxpbmUuY2hpbGRyZW4ubWFwKFsmXShhdXRvJiBjaGlsZCkgLT4gV1RGOjpSYW5nZTxmbG9h
dD4gewotICAgICAgICAgICAgYXV0byB0ZXh0UXVhZCA9IGNvbnZlcnRUb0NvbnRhaW5lckNvb3Jk
aW5hdGVzKGNoaWxkLm5vcm1hbGl6ZWRRdWFkKTsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAg
ICAgICAgICAgICAgb2Zmc2V0QWxvbmdIb3Jpem9udGFsQXhpcyh0ZXh0UXVhZC5wMSgpLCB0ZXh0
UXVhZC5wNCgpKSwKLSAgICAgICAgICAgICAgICBvZmZzZXRBbG9uZ0hvcml6b250YWxBeGlzKHRl
eHRRdWFkLnAyKCksIHRleHRRdWFkLnAzKCkpCi0gICAgICAgICAgICB9OwotICAgICAgICB9KTsK
LQotICAgICAgICBmb3IgKHNpemVfdCBjaGlsZEluZGV4ID0gMDsgY2hpbGRJbmRleCA8IGxpbmUu
Y2hpbGRyZW4uc2l6ZSgpOyArK2NoaWxkSW5kZXgpIHsKLSAgICAgICAgICAgIGF1dG8mIHRleHRD
b250YWluZXIgPSBsaW5lRWxlbWVudHMuY2hpbGRyZW5bY2hpbGRJbmRleF07Ci0gICAgICAgICAg
ICBib29sIGxpbmVIYXNPbmVDaGlsZCA9IGxpbmUuY2hpbGRyZW4uc2l6ZSgpID09IDE7Ci0gICAg
ICAgICAgICBmbG9hdCBob3Jpem9udGFsTWFyZ2luVG9NaW5pbWl6ZVNlbGVjdGlvbkdhcHMgPSBs
aW5lSGFzT25lQ2hpbGQgPyAwIDogMC4xMjU7Ci0gICAgICAgICAgICBmbG9hdCBob3Jpem9udGFs
T2Zmc2V0ID0gbGluZUhhc09uZUNoaWxkID8gMCA6IC1ob3Jpem9udGFsTWFyZ2luVG9NaW5pbWl6
ZVNlbGVjdGlvbkdhcHM7Ci0gICAgICAgICAgICBmbG9hdCBob3Jpem9udGFsRXh0ZW50ID0gbGlu
ZUhhc09uZUNoaWxkID8gMCA6IGhvcml6b250YWxNYXJnaW5Ub01pbmltaXplU2VsZWN0aW9uR2Fw
czsKLQotICAgICAgICAgICAgaWYgKGxpbmVIYXNPbmVDaGlsZCkgewotICAgICAgICAgICAgICAg
IGhvcml6b250YWxPZmZzZXQgKz0gb2Zmc2V0c0Fsb25nSG9yaXpvbnRhbEF4aXNbY2hpbGRJbmRl
eF0uYmVnaW4oKTsKLSAgICAgICAgICAgICAgICBob3Jpem9udGFsRXh0ZW50ICs9IG9mZnNldHNB
bG9uZ0hvcml6b250YWxBeGlzW2NoaWxkSW5kZXhdLmVuZCgpOwotICAgICAgICAgICAgfSBlbHNl
IGlmICghY2hpbGRJbmRleCkgewotICAgICAgICAgICAgICAgIGhvcml6b250YWxPZmZzZXQgKz0g
b2Zmc2V0c0Fsb25nSG9yaXpvbnRhbEF4aXNbY2hpbGRJbmRleF0uYmVnaW4oKTsKLSAgICAgICAg
ICAgICAgICBob3Jpem9udGFsRXh0ZW50ICs9IChvZmZzZXRzQWxvbmdIb3Jpem9udGFsQXhpc1tj
aGlsZEluZGV4XS5lbmQoKSArIG9mZnNldHNBbG9uZ0hvcml6b250YWxBeGlzW2NoaWxkSW5kZXgg
KyAxXS5iZWdpbigpKSAvIDI7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkSW5kZXggPT0g
bGluZS5jaGlsZHJlbi5zaXplKCkgLSAxKSB7Ci0gICAgICAgICAgICAgICAgaG9yaXpvbnRhbE9m
ZnNldCArPSAob2Zmc2V0c0Fsb25nSG9yaXpvbnRhbEF4aXNbY2hpbGRJbmRleCAtIDFdLmVuZCgp
ICsgb2Zmc2V0c0Fsb25nSG9yaXpvbnRhbEF4aXNbY2hpbGRJbmRleF0uYmVnaW4oKSkgLyAyOwot
ICAgICAgICAgICAgICAgIGhvcml6b250YWxFeHRlbnQgKz0gb2Zmc2V0c0Fsb25nSG9yaXpvbnRh
bEF4aXNbY2hpbGRJbmRleF0uZW5kKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIGhvcml6b250YWxPZmZzZXQgKz0gKG9mZnNldHNBbG9uZ0hvcml6b250YWxBeGlzW2No
aWxkSW5kZXggLSAxXS5lbmQoKSArIG9mZnNldHNBbG9uZ0hvcml6b250YWxBeGlzW2NoaWxkSW5k
ZXhdLmJlZ2luKCkpIC8gMjsKLSAgICAgICAgICAgICAgICBob3Jpem9udGFsRXh0ZW50ICs9IChv
ZmZzZXRzQWxvbmdIb3Jpem9udGFsQXhpc1tjaGlsZEluZGV4XS5lbmQoKSArIG9mZnNldHNBbG9u
Z0hvcml6b250YWxBeGlzW2NoaWxkSW5kZXggKyAxXS5iZWdpbigpKSAvIDI7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIEZsb2F0U2l6ZSB0YXJnZXRTaXplIHsgaG9yaXpvbnRhbEV4dGVu
dCAtIGhvcml6b250YWxPZmZzZXQsIGxpbmVCb3VuZHMuc2l6ZS5oZWlnaHQoKSB9OwotICAgICAg
ICAgICAgaWYgKHRhcmdldFNpemUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgdGV4dENv
bnRhaW5lci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRyYW5zZm9ybSwgInNj
YWxlKDAsIDApIik7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWZEaW1lbnNpb25zT3V0T2ZEYXRl
KHRleHRDb250YWluZXIpOwotCi0gICAgICAgICAgICBGbG9hdFNpemUgc2l6ZUJlZm9yZVRyYW5z
Zm9ybTsKLSAgICAgICAgICAgIGlmIChhdXRvKiByZW5kZXJlciA9IHRleHRDb250YWluZXItPnJl
bmRlckJveE1vZGVsT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICBzaXplQmVmb3JlVHJhbnNm
b3JtID0gewotICAgICAgICAgICAgICAgICAgICBhZGp1c3RMYXlvdXRVbml0Rm9yQWJzb2x1dGVa
b29tKHJlbmRlcmVyLT5vZmZzZXRXaWR0aCgpLCAqcmVuZGVyZXIpLnRvRmxvYXQoKSwKLSAgICAg
ICAgICAgICAgICAgICAgYWRqdXN0TGF5b3V0VW5pdEZvckFic29sdXRlWm9vbShyZW5kZXJlci0+
b2Zmc2V0SGVpZ2h0KCksICpyZW5kZXJlcikudG9GbG9hdCgpLAotICAgICAgICAgICAgICAgIH07
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChzaXplQmVmb3JlVHJhbnNmb3JtLmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgICAgIHRleHRDb250YWluZXItPnNldElubGluZVN0eWxl
UHJvcGVydHkoQ1NTUHJvcGVydHlUcmFuc2Zvcm0sICJzY2FsZSgwLCAwKSIpOwotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0ZXh0Q29udGFp
bmVyLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtLCBtYWtlU3Ry
aW5nKAotICAgICAgICAgICAgICAgICJ0cmFuc2xhdGUoIl9zLAotICAgICAgICAgICAgICAgIGhv
cml6b250YWxPZmZzZXQgKyAodGFyZ2V0U2l6ZS53aWR0aCgpIC0gc2l6ZUJlZm9yZVRyYW5zZm9y
bS53aWR0aCgpKSAvIDIsICJweCwgIl9zLAotICAgICAgICAgICAgICAgICh0YXJnZXRTaXplLmhl
aWdodCgpIC0gc2l6ZUJlZm9yZVRyYW5zZm9ybS5oZWlnaHQoKSkgLyAyLCAicHgpICJfcywKLSAg
ICAgICAgICAgICAgICAic2NhbGUoIl9zLCB0YXJnZXRTaXplLndpZHRoKCkgLyBzaXplQmVmb3Jl
VHJhbnNmb3JtLndpZHRoKCksICIsICJfcywgdGFyZ2V0U2l6ZS5oZWlnaHQoKSAvIHNpemVCZWZv
cmVUcmFuc2Zvcm0uaGVpZ2h0KCksICIpICJfcwotICAgICAgICAgICAgKSk7Ci0KLSAgICAgICAg
ICAgIHRleHRDb250YWluZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJr
aXRVc2VyU2VsZWN0LCBhcHBseVVzZXJTZWxlY3RBbGwgPyBDU1NWYWx1ZUFsbCA6IENTU1ZhbHVl
Tm9uZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZG9jdW1lbnQoKS5pc0ltYWdlRG9jdW1l
bnQoKSkKLSAgICAgICAgICAgIGxpbmVDb250YWluZXItPnNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlDdXJzb3IsIENTU1ZhbHVlVGV4dCk7Ci0gICAgfQotCi0jaWYgRU5BQkxFKERB
VEFfREVURUNUSU9OKQotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCByZXN1bHQu
ZGF0YURldGVjdG9ycy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgYXV0byBkYXRhRGV0ZWN0
b3JDb250YWluZXIgPSB0ZXh0UmVjb2duaXRpb25FbGVtZW50cy5kYXRhRGV0ZWN0b3JzW2luZGV4
XTsKLSAgICAgICAgYXV0byYgZGF0YURldGVjdG9yID0gcmVzdWx0LmRhdGFEZXRlY3RvcnNbaW5k
ZXhdOwotICAgICAgICBpZiAoZGF0YURldGVjdG9yLm5vcm1hbGl6ZWRRdWFkcy5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNv
bWUgdXAgd2l0aCBhIHdheSB0byBjb2FsZXNjZSB0aGUgYm91bmRpbmcgcXVhZHMgaW50byBvbmUg
b3IgbW9yZSByb3RhdGVkIHJlY3RzIHdpdGggdGhlIHNhbWUgYW5nbGUgb2Ygcm90YXRpb24uCi0g
ICAgICAgIGF1dG8gdGFyZ2V0UXVhZCA9IGNvbnZlcnRUb0NvbnRhaW5lckNvb3JkaW5hdGVzKGRh
dGFEZXRlY3Rvci5ub3JtYWxpemVkUXVhZHMuZmlyc3QoKSk7Ci0gICAgICAgIGF1dG8gdGFyZ2V0
Qm91bmRzID0gcm90YXRlZEJvdW5kaW5nUmVjdFdpdGhNaW5pbXVtQW5nbGVPZlJvdGF0aW9uKHRh
cmdldFF1YWQsIDAuMDEpOwotICAgICAgICBkYXRhRGV0ZWN0b3JDb250YWluZXItPnNldElubGlu
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgdGFyZ2V0Qm91bmRzLnNpemUud2lkdGgo
KSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgIGRhdGFEZXRlY3RvckNvbnRhaW5lci0+
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgdGFyZ2V0Qm91bmRzLnNp
emUuaGVpZ2h0KCksIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICBkYXRhRGV0ZWN0b3JD
b250YWluZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUcmFuc2Zvcm0sIG1h
a2VTdHJpbmcoCi0gICAgICAgICAgICAidHJhbnNsYXRlKCJfcywKLSAgICAgICAgICAgIHN0ZDo6
cm91bmQodGFyZ2V0Qm91bmRzLmNlbnRlci54KCkgLSAodGFyZ2V0Qm91bmRzLnNpemUud2lkdGgo
KSAvIDIpKSwgInB4LCAiX3MsCi0gICAgICAgICAgICBzdGQ6OnJvdW5kKHRhcmdldEJvdW5kcy5j
ZW50ZXIueSgpIC0gKHRhcmdldEJvdW5kcy5zaXplLmhlaWdodCgpIC8gMikpLCAicHgpICJfcywK
LSAgICAgICAgICAgIHRhcmdldEJvdW5kcy5hbmdsZUluUmFkaWFucyA/IG1ha2VTdHJpbmcoInJv
dGF0ZSgiX3MsIHRhcmdldEJvdW5kcy5hbmdsZUluUmFkaWFucywgInJhZCkgIl9zKSA6IGVtcHR5
U3RyaW5nKCkKLSAgICAgICAgKSk7Ci0gICAgfQotI2VuZGlmIC8vIEVOQUJMRShEQVRBX0RFVEVD
VElPTikKLQotICAgIGlmIChSZWZQdHIgZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCkpCi0gICAg
ICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5zY2hlZHVsZUN1cnNvclVwZGF0ZSgpOwotCi0gICAg
aWYgKGNhY2hlVGV4dFJlY29nbml0aW9uUmVzdWx0cyA9PSBDYWNoZVRleHRSZWNvZ25pdGlvblJl
c3VsdHM6OlllcykgewotICAgICAgICBpZiAoYXV0byogcGFnZSA9IGRvY3VtZW50KCkucGFnZSgp
KQotICAgICAgICAgICAgcGFnZS0+Y2FjaGVUZXh0UmVjb2duaXRpb25SZXN1bHQoKnRoaXMsIGNv
bnRhaW5lclJlY3QsIHJlc3VsdCk7Ci0gICAgfQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKElNQUdF
X0FOQUxZU0lTKQotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAogU2VsZWN0aW9uUmVuZGVy
aW5nQmVoYXZpb3IgSFRNTEVsZW1lbnQ6OnNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yKGNvbnN0
IE5vZGUqIG5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgKaW5kZXggMTU0NjkxOGYzZmVj
MGVkMDc4ZWRjNzk5NWZhMDI5NTU2Y2FhZjVjNS4uMjg2OTQyODFjMThmNTlhNjg2ZWNmNTEyZDY2
ZjdkZjhiOThjNTcxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaApAQCAtMTMyLDE5ICsx
MzIsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRFbnRlcktleUhpbnQoY29uc3QgU3RyaW5nJiB2
YWx1ZSk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBzaG91bGRFeHRlbmRTZWxl
Y3Rpb25Ub1RhcmdldE5vZGUoY29uc3QgTm9kZSYgdGFyZ2V0Tm9kZSwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uQmVmb3JlVXBkYXRlKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29s
IGhhc0ltYWdlT3ZlcmxheSgpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNJbWFn
ZU92ZXJsYXlEYXRhRGV0ZWN0b3JSZXN1bHQoKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgYm9vbCBpc0luc2lkZUltYWdlT3ZlcmxheShjb25zdCBTaW1wbGVSYW5nZSYpOwotICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGlzSW5zaWRlSW1hZ2VPdmVybGF5KGNvbnN0IE5v
ZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBpc0ltYWdlT3ZlcmxheVRleHQo
Y29uc3QgTm9kZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGlzSW1hZ2VPdmVy
bGF5VGV4dChjb25zdCBOb2RlKik7Ci0gICAgdm9pZCByZW1vdmVJbWFnZU92ZXJsYXlTb29uSWZO
ZWVkZWQoKTsKLQotI2lmIEVOQUJMRShJTUFHRV9BTkFMWVNJUykKLSAgICBJbnRSZWN0IGNvbnRh
aW5lclJlY3RGb3JUZXh0UmVjb2duaXRpb24oKTsKLSAgICBlbnVtIGNsYXNzIENhY2hlVGV4dFJl
Y29nbml0aW9uUmVzdWx0cyA6IGJvb2wgeyBObywgWWVzIH07Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCB1cGRhdGVXaXRoVGV4dFJlY29nbml0aW9uUmVzdWx0KGNvbnN0IFRleHRSZWNvZ25pdGlv
blJlc3VsdCYsIENhY2hlVGV4dFJlY29nbml0aW9uUmVzdWx0cyA9IENhY2hlVGV4dFJlY29nbml0
aW9uUmVzdWx0czo6WWVzKTsKLSNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAg
ICBzdGF0aWMgU2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3Igc2VsZWN0aW9uUmVuZGVyaW5nQmVo
YXZpb3IoY29uc3QgTm9kZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5j
cHAKaW5kZXggMzIzZmM0ODEyZTM4N2Y2YzU5M2Y0NmMyY2M0ZmIwZTA2MmQ5N2QwZi4uYzMyNmI4
YmEwYThmZjUzZWM1YTkxMWM4MGZjYjFlYjljZDYzZjAwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSAiSFRNTFNv
dXJjZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVHJhY2tFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTFZpZGVvRWxlbWVudC5oIgorI2luY2x1ZGUgIkltYWdlT3ZlcmxheS5oIgogI2luY2x1ZGUg
IkluYmFuZEdlbmVyaWNUZXh0VHJhY2suaCIKICNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2
YXRlLmgiCiAjaW5jbHVkZSAiSW5iYW5kV2ViVlRUVGV4dFRyYWNrLmgiCkBAIC0zMTQwLDcgKzMx
NDEsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNlZWtXaXRoVG9sZXJhbmNlKGNvbnN0IE1l
ZGlhVGltZSYgaW5UaW1lLCBjb25zdCBNZWRpYVRpbQogICAgIGlmIChwcm9jZXNzaW5nVXNlckdl
c3R1cmVGb3JNZWRpYSgpKQogICAgICAgICBtZWRpYVNlc3Npb24oKS5yZW1vdmVCZWhhdmlvclJl
c3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZVRvQ29udHJv
bENvbnRyb2xzTWFuYWdlcik7CiAKLSAgICByZW1vdmVJbWFnZU92ZXJsYXlTb29uSWZOZWVkZWQo
KTsKKyAgICByZW1vdmVJbWFnZU92ZXJsYXlTb29uSWZOZWVkZWQoKnRoaXMpOwogfQogCiB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6OnNlZWtUYXNrKCkKQEAgLTM3MzQsNyArMzczNSw3IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6cGxheUludGVybmFsKCkKICAgICBtX2F1dG9wbGF5aW5nID0gZmFs
c2U7CiAgICAgdXBkYXRlUGxheVN0YXRlKCk7CiAKLSAgICByZW1vdmVJbWFnZU92ZXJsYXlTb29u
SWZOZWVkZWQoKTsKKyAgICByZW1vdmVJbWFnZU92ZXJsYXlTb29uSWZOZWVkZWQoKnRoaXMpOwog
fQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBhdXNlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAppbmRleCBkMTc5OTE3MDE5ODFhODAxOTRiZDIz
ZTMwOGY2ZTM3YTViZGI1ZTgzLi5hZDQyNTM0YmM5Y2JmOTY2YzUyMzU3YWM3YzIzY2M0NmQyMDA1
YmM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3Bw
CkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIK
KyNpbmNsdWRlICJJbWFnZU92ZXJsYXkuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQu
aCIKQEAgLTk0Myw3ICs5NDQsNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxh
dGUoKQogICAgICAgICB9CiAKICAgICAgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gZnJhbWUtPnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnJhbmdlKCk7Ci0gICAgICAgIGJvb2wgc2VsZWN0aW9uSXNJ
bnNpZGVJbWFnZU92ZXJsYXkgPSBzZWxlY3RlZFJhbmdlICYmIEhUTUxFbGVtZW50Ojppc0luc2lk
ZUltYWdlT3ZlcmxheSgqc2VsZWN0ZWRSYW5nZSk7CisgICAgICAgIGJvb2wgc2VsZWN0aW9uSXNJ
bnNpZGVJbWFnZU92ZXJsYXkgPSBzZWxlY3RlZFJhbmdlICYmIGlzSW5zaWRlSW1hZ2VPdmVybGF5
KCpzZWxlY3RlZFJhbmdlKTsKICAgICAgICAgYm9vbCBzaG91bGRTaG93SXRlbXNGb3JOb25FZGl0
YWJsZVRleHQgPSAoWyZdIHsKICAgICAgICAgICAgIGlmICghbGlua1VSTC5pc0VtcHR5KCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9s
bGVyLmNwcAppbmRleCBhMzdhY2I1MDI4ZDNiNjE2ZDM1NjI1NjJkMmE3ZDQwZDI4MGQ4Yzg0Li45
NDdjZGU0MmRkM2E1YjgzMmE1MDI1MzhjMGMzNjZhZTJiMjM3ZDQ0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtNjcsNiArNjcsNyBAQAogI2luY2x1ZGUgIkhpdFRl
c3RSZXN1bHQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRp
b24uaCIKKyNpbmNsdWRlICJJbWFnZU92ZXJsYXkuaCIKICNpbmNsdWRlICJNb2RlbC5oIgogI2lu
Y2x1ZGUgIk1vdmVTZWxlY3Rpb25Db21tYW5kLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAtNzk5
LDcgKzgwMCw3IEBAIEVsZW1lbnQqIERyYWdDb250cm9sbGVyOjpkcmFnZ2FibGVFbGVtZW50KGNv
bnN0IEZyYW1lKiBzb3VyY2VGcmFtZSwgRWxlbWVudCogc3RhCiAjZW5kaWYKIAogICAgIGF1dG8g
c2VsZWN0aW9uRHJhZ0VsZW1lbnQgPSBzdGF0ZS50eXBlLmNvbnRhaW5zKERyYWdTb3VyY2VBY3Rp
b246OlNlbGVjdGlvbikgJiYgbV9kcmFnU291cmNlQWN0aW9uLmNvbnRhaW5zKERyYWdTb3VyY2VB
Y3Rpb246OlNlbGVjdGlvbikgPyBzdGFydEVsZW1lbnQgOiBudWxscHRyOwotICAgIGlmIChIVE1M
RWxlbWVudDo6aXNJbWFnZU92ZXJsYXlUZXh0KHN0YXJ0RWxlbWVudCkpCisgICAgaWYgKGlzSW1h
Z2VPdmVybGF5VGV4dChzdGFydEVsZW1lbnQpKQogICAgICAgICByZXR1cm4gc2VsZWN0aW9uRHJh
Z0VsZW1lbnQ7CiAKICAgICBmb3IgKGF1dG8qIGVsZW1lbnQgPSBzdGFydEVsZW1lbnQ7IGVsZW1l
bnQ7IGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCkpIHsKQEAg
LTEwNDEsNyArMTA0Miw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyhGcmFtZSYg
c3JjLCBjb25zdCBEcmFnU3RhdGUmIHN0YXRlLCBPcHRpb25TZXQ8RHJhCiAgICAgICAgICAgICBz
cmMuZWRpdG9yKCkud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCpzZWxlY3Rpb25SYW5n
ZSk7CiAgICAgICAgICAgICBhdXRvIHNlbGVjdGlvbiA9IHNyYy5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKICAgICAgICAgICAgIGJvb2wgc2hvdWxkRHJhZ0FzUGxhaW5UZXh0ID0gZW5jbG9zaW5n
VGV4dEZvcm1Db250cm9sKHNlbGVjdGlvbi5zdGFydCgpKTsKLSAgICAgICAgICAgIGlmIChhdXRv
IHJhbmdlID0gc2VsZWN0aW9uLnJhbmdlKCk7IHJhbmdlICYmIEhUTUxFbGVtZW50Ojppc0luc2lk
ZUltYWdlT3ZlcmxheSgqcmFuZ2UpKQorICAgICAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBzZWxl
Y3Rpb24ucmFuZ2UoKTsgcmFuZ2UgJiYgaXNJbnNpZGVJbWFnZU92ZXJsYXkoKnJhbmdlKSkKICAg
ICAgICAgICAgICAgICBzaG91bGREcmFnQXNQbGFpblRleHQgPSB0cnVlOwogCiAgICAgICAgICAg
ICBpZiAoc2hvdWxkRHJhZ0FzUGxhaW5UZXh0KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAKaW5kZXggNmViYmM0N2E0NmNkMTJlNzg4ODg4ZWZlNDc3YWRkNjNjYjZkMWRiNy4uYjU3
ZDZmMmVlYTBiZTA5YWEzMWViODc0ZWJkZGU1MDE4NDM0ZmU2OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcApAQCAtNjksNiArNjksNyBAQAogI2luY2x1ZGUgIkhpdFRlc3RSZXF1
ZXN0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCisj
aW5jbHVkZSAiSW1hZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiSW1hZ2VPdmVybGF5Q29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIktl
eWJvYXJkRXZlbnQuaCIKQEAgLTQ0OSw3ICs0NTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZGlz
cGF0Y2hTZWxlY3RTdGFydChOb2RlKiBub2RlKQogCiBzdGF0aWMgTm9kZSogbm9kZVRvU2VsZWN0
T25Nb3VzZURvd25Gb3JOb2RlKE5vZGUmIHRhcmdldE5vZGUpCiB7Ci0gICAgaWYgKEhUTUxFbGVt
ZW50Ojppc0luc2lkZUltYWdlT3ZlcmxheSh0YXJnZXROb2RlKSkKKyAgICBpZiAoaXNJbnNpZGVJ
bWFnZU92ZXJsYXkodGFyZ2V0Tm9kZSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
aWYgKFJlZlB0ciByb290VXNlclNlbGVjdEFsbCA9IFBvc2l0aW9uOjpyb290VXNlclNlbGVjdEFs
bEZvck5vZGUoJnRhcmdldE5vZGUpKQpAQCAtNzIwLDcgKzcyMSw3IEBAIGJvb2wgRXZlbnRIYW5k
bGVyOjpjYW5Nb3VzZURvd25TdGFydFNlbGVjdChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RS
ZXN1bHRzJiBlCiAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcigpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChIVE1MRWxlbWVudDo6aXNJbWFnZU92ZXJsYXlUZXh0KCpu
b2RlKSkKKyAgICBpZiAoaXNJbWFnZU92ZXJsYXlUZXh0KCpub2RlKSkKICAgICAgICAgcmV0dXJu
IG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCkudXNlclNlbGVjdEluY2x1ZGluZ0luZXJ0KCkgIT0g
VXNlclNlbGVjdDo6Tm9uZTsKIAogICAgIHJldHVybiBub2RlLT5jYW5TdGFydFNlbGVjdGlvbigp
IHx8IFBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0QWxsKG5vZGUuZ2V0KCkpOwpAQCAtNzY2LDgg
Kzc2Nyw4IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3Qg
TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlCiAgICAgLy8gQnVnOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MzkwCiAKICAgICAvLyBTaW5nbGUgbW91
c2UgZG93biBvbiBsaW5rcyBvciBpbWFnZXMgY2FuIGFsd2F5cyB0cmlnZ2VyIGRyYWctbi1kcm9w
LgotICAgIGJvb2wgaXNJbWFnZU92ZXJsYXlUZXh0ID0gSFRNTEVsZW1lbnQ6OmlzSW1hZ2VPdmVy
bGF5VGV4dChldmVudC50YXJnZXROb2RlKCkpOwotICAgIGJvb2wgaXNNb3VzZURvd25PbkxpbmtP
ckltYWdlID0gZXZlbnQuaXNPdmVyTGluaygpIHx8IChldmVudC5oaXRUZXN0UmVzdWx0KCkuaW1h
Z2UoKSAmJiAhaXNJbWFnZU92ZXJsYXlUZXh0KTsKKyAgICBib29sIGlzVGV4dEluSW1hZ2VPdmVy
bGF5ID0gaXNJbWFnZU92ZXJsYXlUZXh0KGV2ZW50LnRhcmdldE5vZGUoKSk7CisgICAgYm9vbCBp
c01vdXNlRG93bk9uTGlua09ySW1hZ2UgPSBldmVudC5pc092ZXJMaW5rKCkgfHwgKGV2ZW50Lmhp
dFRlc3RSZXN1bHQoKS5pbWFnZSgpICYmICFpc1RleHRJbkltYWdlT3ZlcmxheSk7CiAgICAgbV9t
b3VzZURvd25NYXlTdGFydERyYWcgPSBzaW5nbGVDbGljayAmJiAoIWV2ZW50LmV2ZW50KCkuc2hp
ZnRLZXkoKSB8fCBpc01vdXNlRG93bk9uTGlua09ySW1hZ2UpICYmIHNob3VsZEFsbG93TW91c2VE
b3duVG9TdGFydERyYWcoKTsKICNlbmRpZgogCkBAIC0xMDIzLDcgKzEwMjQsNyBAQCB2b2lkIEV2
ZW50SGFuZGxlcjo6dXBkYXRlU2VsZWN0aW9uRm9yTW91c2VEcmFnKGNvbnN0IEhpdFRlc3RSZXN1
bHQmIGhpdFRlc3RSZXN1bAogICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uQnlN
b3VzZUlmRGlmZmVyZW50KG5ld1NlbGVjdGlvbiwgbV9mcmFtZS5zZWxlY3Rpb24oKS5ncmFudWxh
cml0eSgpLAogICAgICAgICBGcmFtZVNlbGVjdGlvbjo6RW5kUG9pbnRzQWRqdXN0bWVudE1vZGU6
OkFkanVzdEF0QmlkaUJvdW5kYXJ5KTsKIAotICAgIGlmIChvbGRTZWxlY3Rpb24gIT0gbmV3U2Vs
ZWN0aW9uICYmIEhUTUxFbGVtZW50Ojppc0ltYWdlT3ZlcmxheVRleHQobmV3U2VsZWN0aW9uLnN0
YXJ0KCkuY29udGFpbmVyTm9kZSgpKSAmJiBIVE1MRWxlbWVudDo6aXNJbWFnZU92ZXJsYXlUZXh0
KG5ld1NlbGVjdGlvbi5lbmQoKS5jb250YWluZXJOb2RlKCkpKQorICAgIGlmIChvbGRTZWxlY3Rp
b24gIT0gbmV3U2VsZWN0aW9uICYmIGlzSW1hZ2VPdmVybGF5VGV4dChuZXdTZWxlY3Rpb24uc3Rh
cnQoKS5jb250YWluZXJOb2RlKCkpICYmIGlzSW1hZ2VPdmVybGF5VGV4dChuZXdTZWxlY3Rpb24u
ZW5kKCkuY29udGFpbmVyTm9kZSgpKSkKICAgICAgICAgaW52YWxpZGF0ZUNsaWNrKCk7CiB9CiAj
ZW5kaWYgLy8gRU5BQkxFKERSQUdfU1VQUE9SVCkKQEAgLTEyMDAsNyArMTIwMSw3IEBAIEhpdFRl
c3RSZXN1bHQgRXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVzdWx0QXRQb2ludChjb25zdCBMYXlvdXRQ
b2ludCYgcG9pbnQsIE9wdGlvCiAKICAgICBSZWZQdHIgaW5uZXJOb2RlID0gcmVzdWx0LmlubmVy
Tm9kZSgpOwogICAgIGlmIChyZXF1ZXN0LmRpc2FsbG93c1VzZXJBZ2VudFNoYWRvd0NvbnRlbnQo
KQotICAgICAgICB8fCAocmVxdWVzdC5kaXNhbGxvd3NVc2VyQWdlbnRTaGFkb3dDb250ZW50RXhj
ZXB0Rm9ySW1hZ2VPdmVybGF5cygpICYmIGlubmVyTm9kZSAmJiAhSFRNTEVsZW1lbnQ6OmlzSW5z
aWRlSW1hZ2VPdmVybGF5KCppbm5lck5vZGUpKSkKKyAgICAgICAgfHwgKHJlcXVlc3QuZGlzYWxs
b3dzVXNlckFnZW50U2hhZG93Q29udGVudEV4Y2VwdEZvckltYWdlT3ZlcmxheXMoKSAmJiBpbm5l
ck5vZGUgJiYgIWlzSW5zaWRlSW1hZ2VPdmVybGF5KCppbm5lck5vZGUpKSkKICAgICAgICAgcmVz
dWx0LnNldFRvTm9uVXNlckFnZW50U2hhZG93QW5jZXN0b3IoKTsKIAogICAgIHJldHVybiByZXN1
bHQ7CkBAIC0xNTIxLDcgKzE1MjIsNyBAQCBzdGQ6Om9wdGlvbmFsPEN1cnNvcj4gRXZlbnRIYW5k
bGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBibwogCiAgICAg
c3dpdGNoIChzdHlsZSA/IHN0eWxlLT5jdXJzb3IoKSA6IEN1cnNvclR5cGU6OkF1dG8pIHsKICAg
ICBjYXNlIEN1cnNvclR5cGU6OkF1dG86IHsKLSAgICAgICAgaWYgKEhUTUxFbGVtZW50Ojppc0lt
YWdlT3ZlcmxheVRleHQobm9kZS5nZXQoKSkpIHsKKyAgICAgICAgaWYgKGlzSW1hZ2VPdmVybGF5
VGV4dChub2RlLmdldCgpKSkgewogICAgICAgICAgICAgYXV0byogcmVuZGVyZXIgPSBub2RlLT5y
ZW5kZXJlcigpOwogICAgICAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5zdHlsZSgp
LnVzZXJTZWxlY3RJbmNsdWRpbmdJbmVydCgpICE9IFVzZXJTZWxlY3Q6Ok5vbmUpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGlCZWFtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9J
bWFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW1hZ2VPdmVy
bGF5Q29udHJvbGxlci5jcHAKaW5kZXggN2M1ODJiZTZjMmU3N2M5MThjNmMxZGRlMTc2MzkzYmI3
NTRmMjJiMC4uZmIwNmM3ZjRlMTY2ZjY0Yjk5MmVhZDU1OWI3YTVlZDFjM2JlNmMzNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9JbWFnZU92ZXJsYXlDb250cm9sbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ltYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCkBAIC0zNCw2
ICszNCw3IEBACiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkltYWdlT3Zl
cmxheS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgpAQCAtNzEsNyArNzIsNyBAQCB2b2lkIEltYWdlT3ZlcmxheUNvbnRy
b2xsZXI6OnNlbGVjdGlvblF1YWRzRGlkQ2hhbmdlKEZyYW1lJiBmcmFtZSwgY29uc3QgVmVjdG9y
PAogICAgICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgICAgICBpZiAoIUhUTUxFbGVtZW50Ojppc0luc2lkZUltYWdlT3ZlcmxheSgqc2Vs
ZWN0ZWRSYW5nZSkpCisgICAgICAgIGlmICghaXNJbnNpZGVJbWFnZU92ZXJsYXkoKnNlbGVjdGVk
UmFuZ2UpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgaWYgKFJlZlB0
ciBob3N0ID0gc2VsZWN0ZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS5zaGFkb3dIb3N0KCk7IGlz
PEhUTUxFbGVtZW50Pihob3N0KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDFhY2Q1OTY5N2E0NDY5
YWEyYWY5NDUyMmRiZmRlMjlhNzI3MmFlOWIuLjVhZDRhZTI4N2EyMzEwNjZmOGU3ZWJjMzIwZjBk
YjhhZDkzNmIzZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtNzYsNiArNzYsNyBAQAogI2luY2x1
ZGUgIkhpc3RvcnlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKICNpbmNs
dWRlICJJREJDb25uZWN0aW9uVG9TZXJ2ZXIuaCIKKyNpbmNsdWRlICJJbWFnZU92ZXJsYXkuaCIK
ICNpbmNsdWRlICJJbWFnZU92ZXJsYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
Q2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgpAQCAtMzcyMSw3ICsz
NzIyLDcgQEAgdm9pZCBQYWdlOjp1cGRhdGVFbGVtZW50c1dpdGhUZXh0UmVjb2duaXRpb25SZXN1
bHRzKCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGF1dG8mIFtyZXN1bHQsIGNv
bnRhaW5lclJlY3RdID0gZW50cnkudmFsdWU7Ci0gICAgICAgIGF1dG8gbmV3Q29udGFpbmVyUmVj
dCA9IHByb3RlY3RlZEVsZW1lbnQtPmNvbnRhaW5lclJlY3RGb3JUZXh0UmVjb2duaXRpb24oKTsK
KyAgICAgICAgYXV0byBuZXdDb250YWluZXJSZWN0ID0gY29udGFpbmVyUmVjdEZvckltYWdlT3Zl
cmxheShwcm90ZWN0ZWRFbGVtZW50LmdldCgpKTsKICAgICAgICAgaWYgKGNvbnRhaW5lclJlY3Qg
PT0gbmV3Q29udGFpbmVyUmVjdCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0zNzMxLDEx
ICszNzMyLDggQEAgdm9pZCBQYWdlOjp1cGRhdGVFbGVtZW50c1dpdGhUZXh0UmVjb2duaXRpb25S
ZXN1bHRzKCkKIAogICAgIGZvciAoYXV0byYgW2VsZW1lbnQsIHJlc3VsdF0gOiBlbGVtZW50c1Rv
VXBkYXRlKSB7CiAgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCkuZXZlbnRMb29wKCkucXVldWVU
YXNrKFRhc2tTb3VyY2U6OkludGVybmFsQXN5bmNUYXNrLCBbcmVzdWx0ID0gVGV4dFJlY29nbml0
aW9uUmVzdWx0IHsgcmVzdWx0IH0sIHdlYWtFbGVtZW50ID0gV2Vha1B0ciB7IGVsZW1lbnQgfV0g
ewotICAgICAgICAgICAgUmVmUHRyIGVsZW1lbnQgeyB3ZWFrRWxlbWVudC5nZXQoKSB9OwotICAg
ICAgICAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICAgICAgZWxlbWVudC0+dXBkYXRlV2l0aFRleHRSZWNvZ25pdGlvblJlc3VsdChyZXN1bHQsIEhU
TUxFbGVtZW50OjpDYWNoZVRleHRSZWNvZ25pdGlvblJlc3VsdHM6Ok5vKTsKKyAgICAgICAgICAg
IGlmIChSZWZQdHIgZWxlbWVudCA9IHdlYWtFbGVtZW50LmdldCgpKQorICAgICAgICAgICAgICAg
IHVwZGF0ZVdpdGhUZXh0UmVjb2duaXRpb25SZXN1bHQoKmVsZW1lbnQsIHJlc3VsdCwgQ2FjaGVU
ZXh0UmVjb2duaXRpb25SZXN1bHRzOjpObyk7CiAgICAgICAgIH0pOwogICAgIH0KIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0ltYWdlT3ZlcmxheUNvbnRyb2xsZXJNYWMu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9JbWFnZU92ZXJsYXlDb250cm9sbGVyTWFjLm1t
CmluZGV4IDIyY2QzMjczOWViZjA4M2QyNWZjOGJjNDEzNGUyOTAwMGM3Yzg1OTUuLjhjNjRkOWZj
Y2QwMjdmZjRkYjY4ZGE0YzUxZWM1Mjk0YjE1YTBjZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvbWFjL0ltYWdlT3ZlcmxheUNvbnRyb2xsZXJNYWMubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9tYWMvSW1hZ2VPdmVybGF5Q29udHJvbGxlck1hYy5tbQpAQCAtMzUsNiArMzUs
NyBAQAogI2ltcG9ydCAiRnJhbWVWaWV3LmgiCiAjaW1wb3J0ICJIVE1MRWxlbWVudC5oIgogI2lt
cG9ydCAiSFRNTE5hbWVzLmgiCisjaW1wb3J0ICJJbWFnZU92ZXJsYXkuaCIKICNpbXBvcnQgIklt
YWdlT3ZlcmxheURhdGFEZXRlY3Rpb25SZXN1bHRJZGVudGlmaWVyLmgiCiAjaW1wb3J0ICJJbnRS
ZWN0LmgiCiAjaW1wb3J0ICJQYWdlLmgiCkBAIC01MCw3ICs1MSw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogdm9pZCBJbWFnZU92ZXJsYXlDb250cm9sbGVyOjp1cGRhdGVEYXRhRGV0ZWN0b3JI
aWdobGlnaHRzKGNvbnN0IEhUTUxFbGVtZW50JiBvdmVybGF5SG9zdCkKIHsKLSAgICBpZiAoIW92
ZXJsYXlIb3N0Lmhhc0ltYWdlT3ZlcmxheSgpKSB7CisgICAgaWYgKCFoYXNJbWFnZU92ZXJsYXko
b3ZlcmxheUhvc3QpKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBj
bGVhckRhdGFEZXRlY3RvckhpZ2hsaWdodHMoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTgsNyAr
NTksNyBAQCB2b2lkIEltYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnVwZGF0ZURhdGFEZXRlY3Rvckhp
Z2hsaWdodHMoY29uc3QgSFRNTEVsZW1lbnQmIG92ZQogCiAgICAgVmVjdG9yPFJlZjxIVE1MRWxl
bWVudD4+IGRhdGFEZXRlY3RvclJlc3VsdEVsZW1lbnRzOwogICAgIGZvciAoYXV0byYgY2hpbGQg
OiBkZXNjZW5kYW50c09mVHlwZTxIVE1MRWxlbWVudD4oKm92ZXJsYXlIb3N0LnVzZXJBZ2VudFNo
YWRvd1Jvb3QoKSkpIHsKLSAgICAgICAgaWYgKGNoaWxkLmlzSW1hZ2VPdmVybGF5RGF0YURldGVj
dG9yUmVzdWx0KCkgJiYgY2hpbGQucmVuZGVyZXIoKSkKKyAgICAgICAgaWYgKGlzSW1hZ2VPdmVy
bGF5RGF0YURldGVjdG9yUmVzdWx0KGNoaWxkKSAmJiBjaGlsZC5yZW5kZXJlcigpKQogICAgICAg
ICAgICAgZGF0YURldGVjdG9yUmVzdWx0RWxlbWVudHMuYXBwZW5kKGNoaWxkKTsKICAgICB9CiAK
QEAgLTE5MCw3ICsxOTEsNyBAQCB2b2lkIEltYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmVsZW1lbnRV
bmRlck1vdXNlRGlkQ2hhbmdlKEZyYW1lJiBmcmFtZSwgRWxlbWVudCogZQogICAgIGlmICghZWxl
bWVudFVuZGVyTW91c2UgJiYgbV9ob3N0RWxlbWVudEZvckRhdGFEZXRlY3RvcnMgJiYgZnJhbWUu
ZG9jdW1lbnQoKSAhPSAmbV9ob3N0RWxlbWVudEZvckRhdGFEZXRlY3RvcnMtPmRvY3VtZW50KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZWxlbWVudFVuZGVyTW91c2UgfHwgIUhUTUxF
bGVtZW50Ojppc0luc2lkZUltYWdlT3ZlcmxheSgqZWxlbWVudFVuZGVyTW91c2UpKSB7CisgICAg
aWYgKCFlbGVtZW50VW5kZXJNb3VzZSB8fCAhaXNJbnNpZGVJbWFnZU92ZXJsYXkoKmVsZW1lbnRV
bmRlck1vdXNlKSkgewogICAgICAgICBtX2hvc3RFbGVtZW50Rm9yRGF0YURldGVjdG9ycyA9IG51
bGxwdHI7CiAgICAgICAgIHVuaW5zdGFsbFBhZ2VPdmVybGF5SWZOZWVkZWQoKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtMjA1LDcgKzIwNiw3IEBAIHZvaWQgSW1hZ2VPdmVybGF5Q29udHJvbGxlcjo6
ZWxlbWVudFVuZGVyTW91c2VEaWRDaGFuZ2UoRnJhbWUmIGZyYW1lLCBFbGVtZW50KiBlCiAgICAg
fQogCiAgICAgUmVmIGltYWdlT3ZlcmxheUhvc3QgPSBkb3duY2FzdDxIVE1MRWxlbWVudD4oKnNo
YWRvd0hvc3QpOwotICAgIGlmICghaW1hZ2VPdmVybGF5SG9zdC0+aGFzSW1hZ2VPdmVybGF5KCkp
IHsKKyAgICBpZiAoIWhhc0ltYWdlT3ZlcmxheShpbWFnZU92ZXJsYXlIb3N0LmdldCgpKSkgewog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgbV9ob3N0RWxlbWVudEZvckRh
dGFEZXRlY3RvcnMgPSBudWxscHRyOwogICAgICAgICB1bmluc3RhbGxQYWdlT3ZlcmxheUlmTmVl
ZGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3Vs
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKaW5kZXgg
YmNhMzIwNzE0ZDlkOTc4MDhjNWRhZWE4YzNkZDVkMjZlMDU4MWY4NS4uNDg5OTYxM2NlZDUwZGVi
ZGYwNjA0OGEyMDVlY2NkNmFjOWM5NTYyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9I
aXRUZXN0UmVzdWx0LmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkhUTUxQYXJzZXJJ
ZGlvbXMuaCIKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TFZpZGVvRWxlbWVudC5oIgorI2luY2x1ZGUgIkltYWdlT3ZlcmxheS5oIgogI2luY2x1ZGUgIlBz
ZXVkb0VsZW1lbnQuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2Nr
Rmxvdy5oIgpAQCAtMzMyLDcgKzMzMyw3IEBAIFJlZlB0cjxOb2RlPiBIaXRUZXN0UmVzdWx0Ojpu
b2RlRm9ySW1hZ2VEYXRhKCkgY29uc3QKICAgICBpZiAoIW1faW5uZXJOb25TaGFyZWROb2RlKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmIChIVE1MRWxlbWVudDo6aXNJbnNpZGVJ
bWFnZU92ZXJsYXkoKm1faW5uZXJOb25TaGFyZWROb2RlKSkKKyAgICBpZiAoaXNJbnNpZGVJbWFn
ZU92ZXJsYXkoKm1faW5uZXJOb25TaGFyZWROb2RlKSkKICAgICAgICAgcmV0dXJuIG1faW5uZXJO
b25TaGFyZWROb2RlLT5zaGFkb3dIb3N0KCk7CiAKICAgICByZXR1cm4gbV9pbm5lck5vblNoYXJl
ZE5vZGU7CkBAIC02NTMsNyArNjU0LDcgQEAgaW5saW5lIEhpdFRlc3RQcm9ncmVzcyBIaXRUZXN0
UmVzdWx0OjphZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0Q29tbW9uKE5vZGUqIG4KICAgICAg
ICAgcmV0dXJuIEhpdFRlc3RQcm9ncmVzczo6Q29udGludWU7CiAKICAgICBpZiAoKHJlcXVlc3Qu
ZGlzYWxsb3dzVXNlckFnZW50U2hhZG93Q29udGVudCgpICYmIG5vZGUtPmlzSW5Vc2VyQWdlbnRT
aGFkb3dUcmVlKCkpCi0gICAgICAgIHx8IChyZXF1ZXN0LmRpc2FsbG93c1VzZXJBZ2VudFNoYWRv
d0NvbnRlbnRFeGNlcHRGb3JJbWFnZU92ZXJsYXlzKCkgJiYgIUhUTUxFbGVtZW50Ojppc0luc2lk
ZUltYWdlT3ZlcmxheSgqbm9kZSkgJiYgbm9kZS0+aXNJblVzZXJBZ2VudFNoYWRvd1RyZWUoKSkp
CisgICAgICAgIHx8IChyZXF1ZXN0LmRpc2FsbG93c1VzZXJBZ2VudFNoYWRvd0NvbnRlbnRFeGNl
cHRGb3JJbWFnZU92ZXJsYXlzKCkgJiYgIWlzSW5zaWRlSW1hZ2VPdmVybGF5KCpub2RlKSAmJiBu
b2RlLT5pc0luVXNlckFnZW50U2hhZG93VHJlZSgpKSkKICAgICAgICAgbm9kZSA9IG5vZGUtPmRv
Y3VtZW50KCkuYW5jZXN0b3JOb2RlSW5UaGlzU2NvcGUobm9kZSk7CiAKICAgICBtdXRhYmxlTGlz
dEJhc2VkVGVzdFJlc3VsdCgpLmFkZCgqbm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckltYWdlLmNwcAppbmRleCA0ZTg5YzJlODBiNzgwMTQwN2Q4ZWVhMGFlMDZjMzQ5NjY2MTI1
MDEyLi5lODZhZWNkZDgwMGE1ZjRmZjY0Nzk4OWMyNjFlZjY3Y2U2MzcwYTFkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNs
dWRlICJIVE1MTWFwRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUg
IkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJJbWFnZU92ZXJsYXkuaCIKICNpbmNsdWRlICJJ
bmxpbmVJdGVyYXRvcklubGluZUJveC5oIgogI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yTGluZS5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTE0MCw3ICsxNDEsNyBAQCB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogUmVuZGVySW1hZ2U6OlJlbmRlckltYWdlKEVsZW1lbnQmIGVsZW1lbnQsIFJl
bmRlclN0eWxlJiYgc3R5bGUsIFN0eWxlSW1hZ2UqIHN0eWxlSW1hZ2UsIGNvbnN0IGZsb2F0IGlt
YWdlRGV2aWNlUGl4ZWxSYXRpbykKICAgICA6IFJlbmRlclJlcGxhY2VkKGVsZW1lbnQsIFdURk1v
dmUoc3R5bGUpLCBJbnRTaXplKCkpCiAgICAgLCBtX2ltYWdlUmVzb3VyY2Uoc3R5bGVJbWFnZSA/
IG1ha2VVbmlxdWU8UmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2U+KCpzdHlsZUltYWdlKSA6
IG1ha2VVbmlxdWU8UmVuZGVySW1hZ2VSZXNvdXJjZT4oKSkKLSAgICAsIG1faGFzSW1hZ2VPdmVy
bGF5KGlzPEhUTUxFbGVtZW50PihlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MRWxlbWVudD4oZWxl
bWVudCkuaGFzSW1hZ2VPdmVybGF5KCkpCisgICAgLCBtX2hhc0ltYWdlT3ZlcmxheShpczxIVE1M
RWxlbWVudD4oZWxlbWVudCkgJiYgaGFzSW1hZ2VPdmVybGF5KGRvd25jYXN0PEhUTUxFbGVtZW50
PihlbGVtZW50KSkpCiAgICAgLCBtX2ltYWdlRGV2aWNlUGl4ZWxSYXRpbyhpbWFnZURldmljZVBp
eGVsUmF0aW8pCiB7CiAgICAgdXBkYXRlQWx0VGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwCmluZGV4IGUzZGRmYzljMjBkODNiZDRkNjg0YjliOTAzYTk2MTFmYmQ5Y2QzZWUu
LjQ1ZWU2ZTJkMWVmZWI4YWJjNTMyNDAyNDc2ZDE4YTVjYTY3YjE3YjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTExMSw2ICsxMTEsNyBAQAogI2luY2x1ZGUgIkhpdFRl
c3RSZXN1bHQuaCIKICNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSURCVHJhbnNh
Y3Rpb24uaCIKKyNpbmNsdWRlICJJbWFnZU92ZXJsYXkuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JD
bGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yRGVidWdnYWJsZVR5cGUuaCIKQEAgLTU4MDcsNyArNTgwOCw3IEBAIHZvaWQgSW50ZXJu
YWxzOjppbnN0YWxsSW1hZ2VPdmVybGF5KEVsZW1lbnQmIGVsZW1lbnQsIFZlY3RvcjxJbWFnZU92
ZXJsYXlMaW5lPiYmCiAgICAgICAgIHJldHVybjsKIAogI2lmIEVOQUJMRShJTUFHRV9BTkFMWVNJ
UykKLSAgICBkb3duY2FzdDxIVE1MRWxlbWVudD4oZWxlbWVudCkudXBkYXRlV2l0aFRleHRSZWNv
Z25pdGlvblJlc3VsdChUZXh0UmVjb2duaXRpb25SZXN1bHQgeworICAgIHVwZGF0ZVdpdGhUZXh0
UmVjb2duaXRpb25SZXN1bHQoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGVsZW1lbnQpLCBUZXh0UmVj
b2duaXRpb25SZXN1bHQgewogICAgICAgICBsaW5lcy5tYXAoW10gKGF1dG8mIGxpbmUpIC0+IFRl
eHRSZWNvZ25pdGlvbkxpbmVEYXRhIHsKICAgICAgICAgICAgIHJldHVybiBtYWtlRGF0YUZvckxp
bmUobGluZSk7CiAgICAgICAgIH0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KaW5kZXggYTI3Mzc1YjI5Y2VlZmFiMzg1
ZTQ4ZDA4M2RlYzViN2EwZWJkNzQxMS4uYzQ3OWQ4ZGRhYmI0OTJhYzFjMzczOTdlNTgwYzRiY2Q5
NjNmOTgzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29j
b2EvV2ViUGFnZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0NvY29hL1dlYlBhZ2VDb2NvYS5tbQpAQCAtNDcsNiArNDcsNyBAQAogI2ltcG9ydCA8V2ViQ29y
ZS9IVE1MT0xpc3RFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxVTGlzdEVsZW1lbnQu
aD4KICNpbXBvcnQgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9J
bWFnZU92ZXJsYXkuaD4KICNpbXBvcnQgPFdlYkNvcmUvTmV0d29ya0V4dGVuc2lvbkNvbnRlbnRG
aWx0ZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvTm9kZVJlbmRlclN0eWxlLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1BheW1lbnRDb29yZGluYXRvci5oPgpAQCAtMjAwLDcgKzIwMSw3IEBAIERpY3Rpb25h
cnlQb3B1cEluZm8gV2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKEZyYW1lJiBm
cmFtZSwgY29uc3QgU2ltCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAgICAgT3B0aW9uU2V0
PFRleHRJbmRpY2F0b3JPcHRpb24+IGluZGljYXRvck9wdGlvbnMgeyBUZXh0SW5kaWNhdG9yT3B0
aW9uOjpVc2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzIH07
Ci0gICAgaWYgKEhUTUxFbGVtZW50Ojppc0luc2lkZUltYWdlT3ZlcmxheShyYW5nZSkpCisgICAg
aWYgKGlzSW5zaWRlSW1hZ2VPdmVybGF5KHJhbmdlKSkKICAgICAgICAgaW5kaWNhdG9yT3B0aW9u
cy5hZGQoeyBUZXh0SW5kaWNhdG9yT3B0aW9uOjpQYWludEFsbENvbnRlbnQsIFRleHRJbmRpY2F0
b3JPcHRpb246OlBhaW50QmFja2dyb3VuZHMgfSk7CiAKICAgICBpZiAocHJlc2VudGF0aW9uVHJh
bnNpdGlvbiA9PSBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5k
Q3Jvc3NmYWRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmlu
ZENvbnRyb2xsZXIuY3BwCmluZGV4IGI1MGFlZDE2MmZjNTJlN2Y0YThjMzljYTAzNjY1OWM1NWIw
ODkwYTMuLjM1MGQ1MzcwZjMwMDY0NDI4YTI0Yjk1YTFmOWQ1NGZiMDNhOWZkMWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAK
QEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lU2VsZWN0aW9uLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNz
Q29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VPdmVybGF5Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhdGhVdGlsaXRpZXMuaD4KQEAgLTM3NCw3ICszNzUsNyBA
QCB2b2lkIEZpbmRDb250cm9sbGVyOjpoaWRlRmluZFVJKCkKIGJvb2wgRmluZENvbnRyb2xsZXI6
OnVwZGF0ZUZpbmRJbmRpY2F0b3IoRnJhbWUmIHNlbGVjdGVkRnJhbWUsIGJvb2wgaXNTaG93aW5n
T3ZlcmxheSwgYm9vbCBzaG91bGRBbmltYXRlKQogewogICAgIE9wdGlvblNldDxUZXh0SW5kaWNh
dG9yT3B0aW9uPiB0ZXh0SW5kaWNhdG9yT3B0aW9ucyB7IFRleHRJbmRpY2F0b3JPcHRpb246Oklu
Y2x1ZGVNYXJnaW5JZlJhbmdlTWF0Y2hlc1NlbGVjdGlvbiB9OwotICAgIGlmIChhdXRvIHNlbGVj
dGVkUmFuZ2UgPSBzZWxlY3RlZEZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJhbmdlKCk7
IHNlbGVjdGVkUmFuZ2UgJiYgSFRNTEVsZW1lbnQ6OmlzSW5zaWRlSW1hZ2VPdmVybGF5KCpzZWxl
Y3RlZFJhbmdlKSkKKyAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0ZWRGcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yYW5nZSgpOyBzZWxlY3RlZFJhbmdlICYmIGlzSW5zaWRl
SW1hZ2VPdmVybGF5KCpzZWxlY3RlZFJhbmdlKSkKICAgICAgICAgdGV4dEluZGljYXRvck9wdGlv
bnMuYWRkKHsgVGV4dEluZGljYXRvck9wdGlvbjo6UGFpbnRBbGxDb250ZW50LCBUZXh0SW5kaWNh
dG9yT3B0aW9uOjpQYWludEJhY2tncm91bmRzIH0pOwogCiAgICAgYXV0byBpbmRpY2F0b3IgPSBU
ZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoU2VsZWN0aW9uSW5GcmFtZShzZWxlY3RlZEZyYW1lLCB0
ZXh0SW5kaWNhdG9yT3B0aW9ucywgc2hvdWxkQW5pbWF0ZSA/IFRleHRJbmRpY2F0b3JQcmVzZW50
YXRpb25UcmFuc2l0aW9uOjpCb3VuY2UgOiBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNp
dGlvbjo6Tm9uZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCmluZGV4IGQ1NDA5YmVkY2U1NjE3YTRhMDdmNzIxMmE4N2ZmZDYyZDZmMDAwZjcuLjQzZmUy
MmEwNTFhNWQ0YzM4NTRiZjM4MjBmMWU1ZmNmZjJlZWU2YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0yMDEsNiArMjAxLDcgQEAKICNpbmNs
dWRlIDxXZWJDb3JlL0hpc3RvcnlDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IaXN0
b3J5SXRlbS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvSW1hZ2VPdmVybGF5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250
cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9KU0RPTVdpbmRvdy5oPgpAQCAtMTIxNSw3ICsxMjE2LDcgQEAgRWRp
dG9yU3RhdGUgV2ViUGFnZTo6ZWRpdG9yU3RhdGUoU2hvdWxkUGVyZm9ybUxheW91dCBzaG91bGRQ
ZXJmb3JtTGF5b3V0KSBjb25zdAogCiAgICAgaWYgKHJlc3VsdC5zZWxlY3Rpb25Jc1JhbmdlKSB7
CiAgICAgICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24ucmFuZ2UoKTsKLSAgICAg
ICAgcmVzdWx0LnNlbGVjdGlvbklzUmFuZ2VJbnNpZGVJbWFnZU92ZXJsYXkgPSBzZWxlY3Rpb25S
YW5nZSAmJiBIVE1MRWxlbWVudDo6aXNJbnNpZGVJbWFnZU92ZXJsYXkoKnNlbGVjdGlvblJhbmdl
KTsKKyAgICAgICAgcmVzdWx0LnNlbGVjdGlvbklzUmFuZ2VJbnNpZGVJbWFnZU92ZXJsYXkgPSBz
ZWxlY3Rpb25SYW5nZSAmJiBpc0luc2lkZUltYWdlT3ZlcmxheSgqc2VsZWN0aW9uUmFuZ2UpOwog
ICAgIH0KIAogICAgIG1fbGFzdEVkaXRvclN0YXRlV2FzQ29udGVudEVkaXRhYmxlID0gcmVzdWx0
LmlzQ29udGVudEVkaXRhYmxlID8gRWRpdG9yU3RhdGVJc0NvbnRlbnRFZGl0YWJsZTo6WWVzIDog
RWRpdG9yU3RhdGVJc0NvbnRlbnRFZGl0YWJsZTo6Tm87CkBAIC00MDkwLDcgKzQwOTEsNyBAQCBz
dGQ6Om9wdGlvbmFsPHN0ZDo6cGFpcjxSZWY8V2ViQ29yZTo6SFRNTEVsZW1lbnQ+LCBXZWJDb3Jl
OjpJbnRSZWN0Pj4gV2ViUGFnZTo6ZgogewogICAgIFZlY3RvcjxSZWY8SFRNTEVsZW1lbnQ+PiBk
YXRhRGV0ZWN0b3JFbGVtZW50czsKICAgICBmb3IgKGF1dG8mIGNoaWxkIDogZGVzY2VuZGFudHNP
ZlR5cGU8SFRNTEVsZW1lbnQ+KCppbWFnZU92ZXJsYXlIb3N0LnNoYWRvd1Jvb3QoKSkpIHsKLSAg
ICAgICAgaWYgKGNoaWxkLmlzSW1hZ2VPdmVybGF5RGF0YURldGVjdG9yUmVzdWx0KCkpCisgICAg
ICAgIGlmIChpc0ltYWdlT3ZlcmxheURhdGFEZXRlY3RvclJlc3VsdChjaGlsZCkpCiAgICAgICAg
ICAgICBkYXRhRGV0ZWN0b3JFbGVtZW50cy5hcHBlbmQoY2hpbGQpOwogICAgIH0KIApAQCAtNzQ2
Niw3ICs3NDY3LDcgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0VGV4dFJlY29nbml0aW9uKFdlYkNv
cmU6OkVsZW1lbnQmIGVsZW1lbnQsIENvbXBsZXRpb25IYW5kbGUKICAgICBpZiAoY29yZVBhZ2Uo
KS0+aGFzQ2FjaGVkVGV4dFJlY29nbml0aW9uUmVzdWx0KGh0bWxFbGVtZW50LmdldCgpKSkgewog
ICAgICAgICBpZiAoY29tcGxldGlvbikgewogICAgICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IGlt
YWdlT3ZlcmxheUhvc3Q7Ci0gICAgICAgICAgICBpZiAoaHRtbEVsZW1lbnQtPmhhc0ltYWdlT3Zl
cmxheSgpKQorICAgICAgICAgICAgaWYgKGhhc0ltYWdlT3ZlcmxheShodG1sRWxlbWVudC5nZXQo
KSkpCiAgICAgICAgICAgICAgICAgaW1hZ2VPdmVybGF5SG9zdCA9ICZlbGVtZW50OwogICAgICAg
ICAgICAgY29tcGxldGlvbihXVEZNb3ZlKGltYWdlT3ZlcmxheUhvc3QpKTsKICAgICAgICAgfQpA
QCAtNzUzMyw3ICs3NTM0LDcgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0VGV4dFJlY29nbml0aW9u
KFdlYkNvcmU6OkVsZW1lbnQmIGVsZW1lbnQsIENvbXBsZXRpb25IYW5kbGUKICAgICAgICAgICAg
IHJldHVybjsKIAogICAgICAgICBhdXRvJiBodG1sRWxlbWVudCA9IGRvd25jYXN0PEhUTUxFbGVt
ZW50PigqcHJvdGVjdGVkRWxlbWVudCk7Ci0gICAgICAgIGh0bWxFbGVtZW50LnVwZGF0ZVdpdGhU
ZXh0UmVjb2duaXRpb25SZXN1bHQocmVzdWx0KTsKKyAgICAgICAgV2ViQ29yZTo6dXBkYXRlV2l0
aFRleHRSZWNvZ25pdGlvblJlc3VsdChodG1sRWxlbWVudCwgcmVzdWx0KTsKIAogICAgICAgICBh
dXRvIG1hdGNoSW5kZXggPSBwcm90ZWN0ZWRQYWdlLT5tX2VsZW1lbnRzUGVuZGluZ1RleHRSZWNv
Z25pdGlvbi5maW5kTWF0Y2hpbmcoWyZdIChhdXRvJiBlbGVtZW50QW5kQ29tcGxldGlvbkhhbmRs
ZXJzKSB7CiAgICAgICAgICAgICByZXR1cm4gZWxlbWVudEFuZENvbXBsZXRpb25IYW5kbGVycy5m
aXJzdCA9PSAmaHRtbEVsZW1lbnQ7CkBAIC03NTQyLDcgKzc1NDMsNyBAQCB2b2lkIFdlYlBhZ2U6
OnJlcXVlc3RUZXh0UmVjb2duaXRpb24oV2ViQ29yZTo6RWxlbWVudCYgZWxlbWVudCwgQ29tcGxl
dGlvbkhhbmRsZQogICAgICAgICBpZiAobWF0Y2hJbmRleCA9PSBub3RGb3VuZCkKICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICBSZWZQdHIgaW1hZ2VPdmVybGF5SG9zdCA9IGh0bWxFbGVt
ZW50Lmhhc0ltYWdlT3ZlcmxheSgpID8gJmh0bWxFbGVtZW50IDogbnVsbHB0cjsKKyAgICAgICAg
UmVmUHRyIGltYWdlT3ZlcmxheUhvc3QgPSBoYXNJbWFnZU92ZXJsYXkoaHRtbEVsZW1lbnQpID8g
Jmh0bWxFbGVtZW50IDogbnVsbHB0cjsKICAgICAgICAgZm9yIChhdXRvJiBjb21wbGV0aW9uSGFu
ZGxlciA6IHByb3RlY3RlZFBhZ2UtPm1fZWxlbWVudHNQZW5kaW5nVGV4dFJlY29nbml0aW9uW21h
dGNoSW5kZXhdLnNlY29uZCkKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGltYWdlT3Zl
cmxheUhvc3QuY29weVJlZigpKTsKIApAQCAtNzU1OCw3ICs3NTU5LDcgQEAgdm9pZCBXZWJQYWdl
Ojp1cGRhdGVXaXRoVGV4dFJlY29nbml0aW9uUmVzdWx0KGNvbnN0IFRleHRSZWNvZ25pdGlvblJl
c3VsdCYgcmVzdWwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGRvd25jYXN0PEhUTUxF
bGVtZW50PigqZWxlbWVudFRvVXBkYXRlKS51cGRhdGVXaXRoVGV4dFJlY29nbml0aW9uUmVzdWx0
KHJlc3VsdCk7CisgICAgV2ViQ29yZTo6dXBkYXRlV2l0aFRleHRSZWNvZ25pdGlvblJlc3VsdChk
b3duY2FzdDxIVE1MRWxlbWVudD4oKmVsZW1lbnRUb1VwZGF0ZSksIHJlc3VsdCk7CiAgICAgYXV0
byBoaXRUZXN0UmVzdWx0ID0gY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCku
aGl0VGVzdFJlc3VsdEF0UG9pbnQocm91bmRlZEludFBvaW50KGxvY2F0aW9uKSwgewogICAgICAg
ICBIaXRUZXN0UmVxdWVzdDo6VHlwZTo6UmVhZE9ubHksCiAgICAgICAgIEhpdFRlc3RSZXF1ZXN0
OjpUeXBlOjpBY3RpdmUsCkBAIC03NTY3LDcgKzc1NjgsNyBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0
ZVdpdGhUZXh0UmVjb2duaXRpb25SZXN1bHQoY29uc3QgVGV4dFJlY29nbml0aW9uUmVzdWx0JiBy
ZXN1bAogCiAgICAgUmVmUHRyIG5vZGVBdExvY2F0aW9uID0gaGl0VGVzdFJlc3VsdC5pbm5lck5v
blNoYXJlZE5vZGUoKTsKICAgICBhdXRvIHVwZGF0ZVJlc3VsdCA9IChbJl0gewotICAgICAgICBp
ZiAoIW5vZGVBdExvY2F0aW9uIHx8IG5vZGVBdExvY2F0aW9uLT5zaGFkb3dIb3N0KCkgIT0gZWxl
bWVudFRvVXBkYXRlIHx8ICFIVE1MRWxlbWVudDo6aXNJbnNpZGVJbWFnZU92ZXJsYXkoKm5vZGVB
dExvY2F0aW9uKSkKKyAgICAgICAgaWYgKCFub2RlQXRMb2NhdGlvbiB8fCBub2RlQXRMb2NhdGlv
bi0+c2hhZG93SG9zdCgpICE9IGVsZW1lbnRUb1VwZGF0ZSB8fCAhaXNJbnNpZGVJbWFnZU92ZXJs
YXkoKm5vZGVBdExvY2F0aW9uKSkKICAgICAgICAgICAgIHJldHVybiBUZXh0UmVjb2duaXRpb25V
cGRhdGVSZXN1bHQ6Ok5vVGV4dDsKIAogI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKQEAgLTc1
NzUsNyArNzU3Niw3IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlV2l0aFRleHRSZWNvZ25pdGlvblJl
c3VsdChjb25zdCBUZXh0UmVjb2duaXRpb25SZXN1bHQmIHJlc3VsCiAgICAgICAgICAgICByZXR1
cm4gVGV4dFJlY29nbml0aW9uVXBkYXRlUmVzdWx0OjpEYXRhRGV0ZWN0b3I7CiAjZW5kaWYKIAot
ICAgICAgICBpZiAoSFRNTEVsZW1lbnQ6OmlzSW1hZ2VPdmVybGF5VGV4dCgqbm9kZUF0TG9jYXRp
b24pKQorICAgICAgICBpZiAoaXNJbWFnZU92ZXJsYXlUZXh0KCpub2RlQXRMb2NhdGlvbikpCiAg
ICAgICAgICAgICByZXR1cm4gVGV4dFJlY29nbml0aW9uVXBkYXRlUmVzdWx0OjpUZXh0OwogCiAg
ICAgICAgIHJldHVybiBUZXh0UmVjb2duaXRpb25VcGRhdGVSZXN1bHQ6Ok5vVGV4dDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kQ29udHJvbGxl
cklPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kQ29udHJv
bGxlcklPUy5tbQppbmRleCA3YTY2NjhiODE1ZmZlNTk2NjQwODA4MWE1MmNjZjcxOGZkYTA4ZTYw
Li5mNGZiNjlkOTVhOTUxODVjYjA5NmYzMjI1YzBlYWUyZWQzZDEwODc2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvRmluZENvbnRyb2xsZXJJT1MubW0K
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRDb250cm9sbGVy
SU9TLm1tCkBAIC0zOCw2ICszOCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRl
eHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSW1hZ2VPdmVybGF5Lmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1BhZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZU92ZXJsYXlDb250cm9sbGVyLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1BhdGhVdGlsaXRpZXMuaD4KQEAgLTU0LDcgKzU1LDcgQEAgY29uc3QgaW50
IHRvdGFsVmVydGljYWxNYXJnaW4gPSAxOwogc3RhdGljIE9wdGlvblNldDxUZXh0SW5kaWNhdG9y
T3B0aW9uPiBmaW5kVGV4dEluZGljYXRvck9wdGlvbnMoY29uc3QgRnJhbWUmIGZyYW1lKQogewog
ICAgIE9wdGlvblNldDxUZXh0SW5kaWNhdG9yT3B0aW9uPiBvcHRpb25zIHsgVGV4dEluZGljYXRv
ck9wdGlvbjo6SW5jbHVkZU1hcmdpbklmUmFuZ2VNYXRjaGVzU2VsZWN0aW9uLCBUZXh0SW5kaWNh
dG9yT3B0aW9uOjpEb05vdENsaXBUb1Zpc2libGVSZWN0IH07Ci0gICAgaWYgKGF1dG8gc2VsZWN0
ZWRSYW5nZSA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJhbmdlKCk7IHNlbGVjdGVk
UmFuZ2UgJiYgSFRNTEVsZW1lbnQ6OmlzSW5zaWRlSW1hZ2VPdmVybGF5KCpzZWxlY3RlZFJhbmdl
KSkKKyAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkucmFuZ2UoKTsgc2VsZWN0ZWRSYW5nZSAmJiBpc0luc2lkZUltYWdlT3ZlcmxheSgqc2Vs
ZWN0ZWRSYW5nZSkpCiAgICAgICAgIG9wdGlvbnMuYWRkKHsgVGV4dEluZGljYXRvck9wdGlvbjo6
UGFpbnRBbGxDb250ZW50LCBUZXh0SW5kaWNhdG9yT3B0aW9uOjpQYWludEJhY2tncm91bmRzIH0p
OwogICAgIHJldHVybiBvcHRpb25zOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggYTk3MTVkZTM0MDFhNDBlMGJlOGQ3
OGNjYTI2YWMxYjUyZjkwODI0YS4uMzI3Nzc3N2MyMzRjYmNiMjkzMWM1YzQ4MTgyZjM5MjFiN2Y2
ZGI4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW0KQEAgLTEwOCw2ICsxMDgsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlk
ZW9FbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hpc3RvcnlJdGVtLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0hpdFRlc3RSZXN1bHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSW1hZ2VPdmVybGF5Lmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0lucHV0TW9kZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9LZXlib2Fy
ZEV2ZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xpYldlYlJUQ1Byb3ZpZGVyLmg+CkBAIC0xMzQ5
LDcgKzEzNTAsNyBAQCBzdGF0aWMgSW50UG9pbnQgY29uc3RyYWluUG9pbnQoY29uc3QgSW50UG9p
bnQmIHBvaW50LCBjb25zdCBGcmFtZSYgZnJhbWUsIGNvbnN0CiBzdGF0aWMgYm9vbCBpbnNpZGVJ
bWFnZU92ZXJsYXkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikKIHsKICAgICBSZWZQ
dHIgY29udGFpbmVyID0gcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJOb2RlKCk7
Ci0gICAgcmV0dXJuIGNvbnRhaW5lciAmJiBIVE1MRWxlbWVudDo6aXNJbnNpZGVJbWFnZU92ZXJs
YXkoKmNvbnRhaW5lcik7CisgICAgcmV0dXJuIGNvbnRhaW5lciAmJiBpc0luc2lkZUltYWdlT3Zl
cmxheSgqY29udGFpbmVyKTsKIH0KIAogc3RhdGljIHN0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IGV4cGFuZEZvckltYWdlT3ZlcmxheShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCkBAIC0xNTg2
LDcgKzE1ODcsNyBAQCBzdGF0aWMgc3RkOjpwYWlyPHN0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+
LCBTZWxlY3Rpb25XYXNGbGlwcGVkPiByYW5nZUZvclBvaW50SQogICAgICAgICAgICAgcmFuZ2Ug
PSBtYWtlU2ltcGxlUmFuZ2UocmVzdWx0LCBzZWxlY3Rpb25FbmQpOwogICAgIH0KICAgICAKLSAg
ICBpZiAocmFuZ2UgJiYgSFRNTEVsZW1lbnQ6OmlzSW5zaWRlSW1hZ2VPdmVybGF5KCpyYW5nZSkp
CisgICAgaWYgKHJhbmdlICYmIGlzSW5zaWRlSW1hZ2VPdmVybGF5KCpyYW5nZSkpCiAgICAgICAg
IHJldHVybiB7IGV4cGFuZEZvckltYWdlT3ZlcmxheSgqcmFuZ2UpLCBTZWxlY3Rpb25XYXNGbGlw
cGVkOjpObyB9OwogCiAgICAgcmV0dXJuIHsgcmFuZ2UsIHNlbGVjdGlvbkZsaXBwZWQgfTsKQEAg
LTI4MDUsNyArMjgwNiw3IEBAIHN0YXRpYyB2b2lkIHZpZGVvUG9zaXRpb25JbmZvcm1hdGlvbihX
ZWJQYWdlJiBwYWdlLCBIVE1MVmlkZW9FbGVtZW50JiBlbGVtZW50LCBjCiAKIHN0YXRpYyBSZWZQ
dHI8SFRNTFZpZGVvRWxlbWVudD4gaG9zdFZpZGVvRWxlbWVudElnbm9yaW5nSW1hZ2VPdmVybGF5
KE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKEhUTUxFbGVtZW50Ojppc0luc2lkZUltYWdlT3Zlcmxh
eShub2RlKSkKKyAgICBpZiAoaXNJbnNpZGVJbWFnZU92ZXJsYXkobm9kZSkpCiAgICAgICAgIHJl
dHVybiB7IH07CiAKICAgICBpZiAoaXM8SFRNTFZpZGVvRWxlbWVudD4obm9kZSkpCkBAIC0yODU4
LDcgKzI4NTksNyBAQCBzdGF0aWMgdm9pZCBlbGVtZW50UG9zaXRpb25JbmZvcm1hdGlvbihXZWJQ
YWdlJiBwYWdlLCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBJbgogCiAgICAgaW5mby5pc0VsZW1l
bnQgPSB0cnVlOwogICAgIGluZm8uaWRBdHRyaWJ1dGUgPSBlbGVtZW50LmdldElkQXR0cmlidXRl
KCk7Ci0gICAgaW5mby5pc0ltYWdlT3ZlcmxheVRleHQgPSBIVE1MRWxlbWVudDo6aXNJbWFnZU92
ZXJsYXlUZXh0KGlubmVyTm9uU2hhcmVkTm9kZSk7CisgICAgaW5mby5pc0ltYWdlT3ZlcmxheVRl
eHQgPSBpc0ltYWdlT3ZlcmxheVRleHQoaW5uZXJOb25TaGFyZWROb2RlKTsKIAogICAgIGluZm8u
dGl0bGUgPSBlbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVz
Ojp0aXRsZUF0dHIpLnN0cmluZygpOwogICAgIGlmIChsaW5rRWxlbWVudCAmJiBpbmZvLnRpdGxl
LmlzRW1wdHkoKSkKQEAgLTI5MDcsNyArMjkwOCw3IEBAIHN0YXRpYyB2b2lkIGVsZW1lbnRQb3Np
dGlvbkluZm9ybWF0aW9uKFdlYlBhZ2UmIHBhZ2UsIEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IElu
CiAKICNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCiAgICAgaWYgKGluZm8uaXNJbWFnZU92ZXJs
YXlUZXh0ICYmIGlubmVyTm9uU2hhcmVkTm9kZS0+c2hhZG93SG9zdCgpID09ICZlbGVtZW50ICYm
IGlzPEhUTUxFbGVtZW50PihlbGVtZW50KSkgewotICAgICAgICBpZiAoUmVmIGh0bWxFbGVtZW50
ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGVsZW1lbnQpOyBodG1sRWxlbWVudC0+aGFzSW1hZ2VP
dmVybGF5KCkpCisgICAgICAgIGlmIChSZWYgaHRtbEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MRWxl
bWVudD4oZWxlbWVudCk7IGhhc0ltYWdlT3ZlcmxheShodG1sRWxlbWVudC5nZXQoKSkpCiAgICAg
ICAgICAgICBkYXRhRGV0ZWN0b3JJbWFnZU92ZXJsYXlQb3NpdGlvbkluZm9ybWF0aW9uKGh0bWxF
bGVtZW50LmdldCgpLCByZXF1ZXN0LCBpbmZvKTsKICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggMWUy
M2FmZmVkZWNhZmRiY2RhMzEwMzhjOTFiZjgwOGRhYTg4M2VjMS4uODUwN2I0ZjI1NDNmZTdiNWZj
Mjc0YTU3Nzk0N2JhYTA4NWNhMjg4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTczLDYgKzczLDcgQEAKICNpbXBvcnQg
PFdlYkNvcmUvSFRNTENvbnZlcnRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MUGx1Z0luSW1h
Z2VFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hpdFRlc3RSZXN1bHQuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvSW1hZ2VPdmVybGF5Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0tleWJvYXJkRXZlbnQu
aD4KICNpbXBvcnQgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KQEAgLTg4NSw3ICs4ODYsNyBAQCB2b2lkIFdlYlBh
Z2U6OnBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0QXRMb2NhdGlvbihXZWJDb3JlOjpGbG9h
dFBvaW50IGxvY2F0aQogCiAgICAgYXV0byBpbmRpY2F0b3JPcHRpb25zID0gWyZdKGNvbnN0IFNp
bXBsZVJhbmdlJiByYW5nZSkgewogICAgICAgICBPcHRpb25TZXQ8VGV4dEluZGljYXRvck9wdGlv
bj4gb3B0aW9ucyB7IFRleHRJbmRpY2F0b3JPcHRpb246OlVzZUJvdW5kaW5nUmVjdEFuZFBhaW50
QWxsQ29udGVudEZvckNvbXBsZXhSYW5nZXMgfTsKLSAgICAgICAgaWYgKEhUTUxFbGVtZW50Ojpp
c0luc2lkZUltYWdlT3ZlcmxheShyYW5nZSkpCisgICAgICAgIGlmIChpc0luc2lkZUltYWdlT3Zl
cmxheShyYW5nZSkpCiAgICAgICAgICAgICBvcHRpb25zLmFkZCh7IFRleHRJbmRpY2F0b3JPcHRp
b246OlBhaW50QWxsQ29udGVudCwgVGV4dEluZGljYXRvck9wdGlvbjo6UGFpbnRCYWNrZ3JvdW5k
cyB9KTsKICAgICAgICAgcmV0dXJuIG9wdGlvbnM7CiAgICAgfTsK
</data>
<flag name="commit-queue"
          id="468845"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443975</attachid>
            <date>2021-11-11 11:04:31 -0800</date>
            <delta_ts>2021-11-11 13:45:01 -0800</delta_ts>
            <desc>Add namespace, fix CMake builds</desc>
            <filename>bug-232974-20211111110430.patch</filename>
            <type>text/plain</type>
            <size>89682</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDZjMGY5MzEwNGI5ODlk
MTIyMzdiM2IwZGEzNzBkYTQ1NTk2Y2M1Ni4uNDFmM2U0MTgxMWRmNTM0NjA3MzNlNjc0ZmVkNWQ4
MmY5NWY4YmY5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg3IEBACisyMDIxLTExLTExICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgaW1hZ2Ug
b3ZlcmxheSBjb2RlIG91dCBvZiBIVE1MRWxlbWVudCBhbmQgaW50byBhIHNlcGFyYXRlIGhlbHBl
ciBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MzI5NzQKKworICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAgICBN
b3ZlIGNvZGUgZm9yIHVwZGF0aW5nLCBxdWVyeWluZywgYW5kIHJlbW92aW5nIGltYWdlIG92ZXJs
YXlzIG91dCBvZiBIVE1MRWxlbWVudC5jcHAgYW5kIEhUTUxFbGVtZW50LmggYW5kIGludG8KKyAg
ICAgICAgc2VwYXJhdGUgaGVscGVyIGZpbGVzIGluc3RlYWQgKEltYWdlT3ZlcmxheS5oIGFuZCBJ
bWFnZU92ZXJsYXkuY3BwKS4gRnV0dXJlIHBhdGNoZXMgaW4gdGhpcyBhcmVhIHdpbGwgZXh0ZW5k
IHRoZQorICAgICAgICBmdW5jdGlvbmFsaXR5IG9mIHRoZXNlIG92ZXJsYXlzLCBzbyB0aGlzIHdp
bGwgaGVscCBhdm9pZCBjb2RlIGJsb2F0IGluc2lkZSBIVE1MRWxlbWVudCB3aGVuIGRvaW5nIHNv
LgorCisgICAgICAgIE5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIEhlYWRlcnMu
Y21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRvbS9JbWFnZU92ZXJsYXkuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlT3ZlcmxheTo6aW1hZ2VPdmVybGF5RWxlbWVudElk
ZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VPdmVybGF5OjppbWFnZU92ZXJsYXlE
YXRhRGV0ZWN0b3JDbGFzc05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VPdmVybGF5Ojpo
YXNPdmVybGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlT3ZlcmxheTo6aW1hZ2VPdmVybGF5
SG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZU92ZXJsYXk6OmlzRGF0YURldGVjdG9yUmVz
dWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlT3ZlcmxheTo6aXNJbnNpZGVPdmVybGF5KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlT3ZlcmxheTo6aXNPdmVybGF5VGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZU92ZXJsYXk6OnJlbW92ZU92ZXJsYXlTb29uSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VPdmVybGF5Ojpjb250YWluZXJSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlT3ZlcmxheTo6dXBkYXRlV2l0aFRleHRSZWNvZ25pdGlvblJlc3VsdCk6Cisg
ICAgICAgICogZG9tL0ltYWdlT3ZlcmxheS5oOiBBZGRlZC4KKworICAgICAgICBBZGRpdGlvbmFs
bHkgd3JhcCB0aGUgbmV3IGltYWdlIG92ZXJsYXkgaGVscGVyIGZ1bmN0aW9ucyBpbiB0aGUgYElt
YWdlT3ZlcmxheWAgbmFtZXNwYWNlLiBUaGlzIGFsc28gYWxsb3dzIHVzIHRvCisgICAgICAgIHNo
b3J0ZW4gc29tZSBvZiB0aGUgZnVuY3Rpb24gbmFtZXMsIHNpbmNlIHRoZXkncmUgYWxyZWFkeSB1
bmRlciB0aGUgbmFtZXNwYWNlLCBzbyBkdXBsaWNhdGluZyAiSW1hZ2VPdmVybGF5IiBpbgorICAg
ICAgICB0aGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYgaXMgdW5uZWNlc3NhcnkuCisKKyAgICAgICAg
KiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBlcmZvcm1D
dXRPckNvcHkpOgorICAgICAgICAoV2ViQ29yZTo6c2NhbkZvclRlbGVwaG9uZU51bWJlcnMpOgor
ICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRJ
dGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OmhhbmRsZVJlcGxh
Y2VkRWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRWxlbWVudDo6c2hvdWxkRXh0ZW5kU2VsZWN0aW9uVG9UYXJnZXROb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpzZWxlY3Rpb25SZW5kZXJpbmdCZWhhdmlv
cik6CisgICAgICAgIChXZWJDb3JlOjppbWFnZU92ZXJsYXlFbGVtZW50SWRlbnRpZmllcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjppbWFnZU92ZXJsYXlEYXRhRGV0ZWN0b3JDbGFzc05h
bWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6Omhhc0ltYWdlT3Zl
cmxheSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjppbWFnZU92ZXJsYXlIb3N0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50Ojppc0ltYWdlT3Zlcmxh
eURhdGFEZXRlY3RvclJlc3VsdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MRWxlbWVudDo6aXNJbnNpZGVJbWFnZU92ZXJsYXkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEVsZW1lbnQ6OmlzSW1hZ2VPdmVybGF5VGV4dCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MRWxlbWVudDo6cmVtb3ZlSW1hZ2VPdmVybGF5U29vbklmTmVlZGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50Ojpjb250YWluZXJSZWN0Rm9y
VGV4dFJlY29nbml0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50
Ojp1cGRhdGVXaXRoVGV4dFJlY29nbml0aW9uUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKiBo
dG1sL0hUTUxFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNlZWtXaXRoVG9sZXJhbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBsYXlJbnRlcm5hbCk6CisgICAg
ICAgICogcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGV4dE1lbnVDb250cm9sbGVyOjpwb3B1bGF0ZSk6CisgICAgICAgICogcGFnZS9EcmFnQ29u
dHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZHJhZ2dhYmxl
RWxlbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6c3RhcnRE
cmFnKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpub2RlVG9TZWxlY3RPbk1vdXNlRG93bkZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjpjYW5Nb3VzZURvd25TdGFydFNlbGVjdCk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudEhhbmRsZXI6OnVwZGF0ZVNlbGVjdGlvbkZvck1vdXNlRHJhZyk6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudEhhbmRsZXI6OmhpdFRlc3RSZXN1bHRBdFBvaW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAgKiBwYWdlL0lt
YWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VPdmVybGF5
Q29udHJvbGxlcjo6c2VsZWN0aW9uUXVhZHNEaWRDaGFuZ2UpOgorICAgICAgICAqIHBhZ2UvUGFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp1cGRhdGVFbGVtZW50c1dpdGhUZXh0UmVj
b2duaXRpb25SZXN1bHRzKToKKyAgICAgICAgKiBwYWdlL21hYy9JbWFnZU92ZXJsYXlDb250cm9s
bGVyTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VPdmVybGF5Q29udHJvbGxlcjo6dXBk
YXRlRGF0YURldGVjdG9ySGlnaGxpZ2h0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZU92ZXJs
YXlDb250cm9sbGVyOjplbGVtZW50VW5kZXJNb3VzZURpZENoYW5nZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3Vs
dDo6bm9kZUZvckltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVz
dWx0OjphZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0Q29tbW9uKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OlJl
bmRlckltYWdlKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnRlcm5hbHM6Omluc3RhbGxJbWFnZU92ZXJsYXkpOgorCiAyMDIxLTExLTExICBB
bnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBJbnRyb2R1Y2UgU2Vs
ZWN0b3JNYXRjaGluZ1N0YXRlIGFuZCBtb3ZlIFNlbGVjdG9yRmlsdGVyIHRoZXJlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IDRlMTUxOTZkOGNmZGQ3NDAyNGJhN2FkZjZjZmQ1ODdlY2Q1ZGQ0ODIuLjdkMDc4NzE1YTVk
ZGQwODE5NjA0YzFkM2YwY2U1NDUyMDU5ZTFkZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAK
KzIwMjEtMTEtMTEgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAg
ICAgICAgTW92ZSBpbWFnZSBvdmVybGF5IGNvZGUgb3V0IG9mIEhUTUxFbGVtZW50IGFuZCBpbnRv
IGEgc2VwYXJhdGUgaGVscGVyIGZpbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzMjk3NAorCisgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZp
c3RvLgorCisgICAgICAgIFNlZSBXZWJDb3JlL0NoYW5nZUxvZyBmb3IgbW9yZSBkZXRhaWxzLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViS2l0OjpGaW5kQ29udHJvbGxlcjo6dXBkYXRlRmluZEluZGljYXRvcik6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjplZGl0b3JTdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmZpbmREYXRh
RGV0ZWN0aW9uUmVzdWx0RWxlbWVudEluSW1hZ2VPdmVybGF5KToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6cmVxdWVzdFRleHRSZWNvZ25pdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OnVwZGF0ZVdpdGhUZXh0UmVjb2duaXRpb25SZXN1bHQpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9pb3MvRmluZENvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXZWJLaXQ6OmZp
bmRUZXh0SW5kaWNhdG9yT3B0aW9ucyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lv
cy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjppbnNpZGVJbWFnZU92ZXJsYXkpOgor
ICAgICAgICAoV2ViS2l0OjpyYW5nZUZvclBvaW50SW5Sb290Vmlld0Nvb3JkaW5hdGVzKToKKyAg
ICAgICAgKFdlYktpdDo6aG9zdFZpZGVvRWxlbWVudElnbm9yaW5nSW1hZ2VPdmVybGF5KToKKyAg
ICAgICAgKFdlYktpdDo6ZWxlbWVudFBvc2l0aW9uSW5mb3JtYXRpb24pOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6cGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3RBdExvY2F0aW9uKToKKwogMjAyMS0x
MS0xMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFdlIHNob3Vs
ZCBub3Qga2lsbCBhbGwgV2ViQ29udGVudCBwcm9jZXNzZXMgd2hlbmV2ZXIgdGhlIFdlYkF1dGhu
IHByb2Nlc3MgY3Jhc2hlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFr
ZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggMzYzNWZjNWJjZTllYWQ0OTBj
OGQ5ODU0ZmU4ZTVmZGUyOTY3NGQyMC4uMWNlMjUyMWU0ZWYyMjJjNjk1YWQxZGNiZGFmNDU0Yjhj
NmQwNDYxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9T
b3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC01MDcsNiArNTA3LDcgQEAgc2V0KFdlYkNv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIGRvbS9GcmFnbWVudFNjcmlwdGluZ1Bl
cm1pc3Npb24uaAogICAgIGRvbS9GdWxsc2NyZWVuTWFuYWdlci5oCiAgICAgZG9tL0dDUmVhY2hh
YmxlUmVmLmgKKyAgICBkb20vSW1hZ2VPdmVybGF5LmgKICAgICBkb20vSW5saW5lU3R5bGVTaGVl
dE93bmVyLmgKICAgICBkb20vS2V5Ym9hcmRFdmVudC5oCiAgICAgZG9tL0xpdmVOb2RlTGlzdC5o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CmluZGV4IDhhMTE0YTEyMzhkNGY2ODE4ODQ2ZjIxYzJkYjBhYzAzMDNiMWVi
MjkuLmVhYmNjMDBmMDMzNjNjMmY4ZjFmYjZmOTZmNWVmNjRmMjU1MWUyYzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CkBAIC05NTksNiArOTU5LDcgQEAgZG9tL0lkVGFyZ2V0T2JzZXJ2ZXIuY3BwCiBkb20vSWRU
YXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmNwcAogZG9tL0lkbGVDYWxsYmFja0NvbnRyb2xsZXIuY3Bw
CiBkb20vSWRsZURlYWRsaW5lLmNwcAorZG9tL0ltYWdlT3ZlcmxheS5jcHAKIGRvbS9JbmxpbmVD
bGFzc2ljU2NyaXB0LmNwcAogZG9tL0lubGluZVN0eWxlU2hlZXRPd25lci5jcHAKIGRvbS9JbnB1
dEV2ZW50LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDY5ZDNmZDljOGEyZmNhNjExNDk3ODg5MGY4MWJlN2NmN2RmMzU4NGEu
LmVlODk2MzAyYjFjOWY2ZWJhYzhhZjI3YjI4NmVhNmJjOWZiODUxMDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU0NDAsNiAr
NTQ0MCw3IEBACiAJCUY0NTc3NUNFMjQxNDM3RDUwMDJERjFBMCAvKiBJbmxpbmVQYXRoRGF0YS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ1Nzc1Q0Qy
NDE0MzdENTAwMkRGMUEwIC8qIElubGluZVBhdGhEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ2NzI5MjgxRTBERTY4NTAwQUNDM0Q4IC8q
IFNjcm9sbFNuYXBPZmZzZXRzSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjQ2NzI5MjUxRTBERTVBQjAwQUNDM0Q4IC8qIFNjcm9sbFNuYXBPZmZz
ZXRzSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUY0NkM0NDdFMjM0NjU0NTQwMDM5QTc5RCAvKiBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRh
U291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NDZDNDQ3QzIzNDY1NDU0MDAzOUE3OUQgLyogQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJj
ZS5oICovOyB9OworCQlGNDZENTM4NjI3M0Q3RTQ2MDAwOUZBODAgLyogSW1hZ2VPdmVybGF5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDZENTM4NTI3
M0Q3RTNGMDAwOUZBODAgLyogSW1hZ2VPdmVybGF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ3Mzg0NTgyNURERTlGQjAwNkRFOEREIC8qIERh
dGFPd25lclR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY0NzM4NDU3MjVEREU5RkIwMDZERThERCAvKiBEYXRhT3duZXJUeXBlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ3QTA5RDEyMEE5M0E5
NzAwMjQwRkFFIC8qIERpc2FibGVkQWRhcHRhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0N0EwOUNGMjBBOTM5RjYwMDI0MEZBRSAvKiBEaXNh
YmxlZEFkYXB0YXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRjQ3QTVFM0UxOTVCOEM4QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBv
aW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ3
QTVFM0IxOTVCOEM4QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNzIzMSw2ICsxNzIz
Miw4IEBACiAJCUY0NkM0NDdEMjM0NjU0NTQwMDM5QTc5RCAvKiBDbGlwYm9hcmRJdGVtQmluZGlu
Z3NEYXRhU291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsaXBib2FyZEl0ZW1CaW5kaW5n
c0RhdGFTb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDZDNDQ4MDIz
NDY1NDdBMDAzOUE3OUQgLyogQ2xpcGJvYXJkSXRlbVBhc3RlYm9hcmREYXRhU291cmNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENsaXBib2FyZEl0ZW1QYXN0ZWJvYXJkRGF0YVNvdXJjZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGNDZDNDQ4MTIzNDY1NDdBMDAzOUE3OUQgLyogQ2xpcGJv
YXJkSXRlbVBhc3RlYm9hcmREYXRhU291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsaXBi
b2FyZEl0ZW1QYXN0ZWJvYXJkRGF0YVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUY0NkQ1Mzg0MjczRDdFM0UwMDA5RkE4MCAvKiBJbWFnZU92ZXJsYXkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW1hZ2VPdmVybGF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRjQ2RDUzODUyNzNEN0UzRjAwMDlGQTgwIC8qIEltYWdlT3ZlcmxheS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbWFnZU92ZXJsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ3
Mzg0NTcyNURERTlGQjAwNkRFOEREIC8qIERhdGFPd25lclR5cGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RGF0YU93bmVyVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDdBMDlDRjIw
QTkzOUY2MDAyNDBGQUUgLyogRGlzYWJsZWRBZGFwdGF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
aXNhYmxlZEFkYXB0YXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0N0Ew
OUQ0MjBBOUREMDQwMDI0MEZBRSAvKiBEaXNhYmxlZEFkYXB0YXRpb25zLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IERpc2FibGVkQWRhcHRhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTg5MjIsMTEgKzE4OTI1LDExIEBACiAJCTFBNTY5Q0M0MEQ3RTJCNjAwMDdDMzk4
MyAvKiBicmlkZ2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAor
CQkJCTU5QjU5NzcxMTEwODY1NTYwMDcxNTlFOCAvKiBqc2MgKi8sCiAJCQkJMUE1NjlDRTIwRDdF
MkI4MjAwN0MzOTgzIC8qIG9iamMgKi8sCiAJCQkJNTk5RTc1OEYxMTA1NUExRjAwRDkwNEZBIC8q
IEJyaWRnZS5oICovLAogCQkJCTFBNzFENTc5MEYzMzgxOTAwMEY5Q0U0RSAvKiBJZGVudGlmaWVy
UmVwLmNwcCAqLywKIAkJCQkxQTcxRDU3QTBGMzM4MTkwMDBGOUNFNEUgLyogSWRlbnRpZmllclJl
cC5oICovLAotCQkJCTU5QjU5NzcxMTEwODY1NTYwMDcxNTlFOCAvKiBqc2MgKi8sCiAJCQkJMUE1
NjlDRUYwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfYXJyYXkuY3BwICovLAogCQkJCTFBNTY5
Q0YwMEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX2FycmF5LmggKi8sCiAJCQkJMUE1NjlDRjEw
RDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfbWV0aG9kLmNwcCAqLywKQEAgLTMxMzc3LDYgKzMx
MzgwLDggQEAKIAkJCQlDM0NGMTdBMzE1QjAwNjNGMDAyNzZEMzkgLyogSWRUYXJnZXRPYnNlcnZl
clJlZ2lzdHJ5LmggKi8sCiAJCQkJOEFCNEJDNzYxMjZGREI3MTAwREVCNzI3IC8qIElnbm9yZURl
c3RydWN0aXZlV3JpdGVDb3VudEluY3JlbWVudGVyLmggKi8sCiAJCQkJNDY3MzAyMDExQzRFRkU2
NjAwQkNCMzU3IC8qIElnbm9yZU9wZW5zRHVyaW5nVW5sb2FkQ291bnRJbmNyZW1lbnRlci5oICov
LAorCQkJCUY0NkQ1Mzg0MjczRDdFM0UwMDA5RkE4MCAvKiBJbWFnZU92ZXJsYXkuY3BwICovLAor
CQkJCUY0NkQ1Mzg1MjczRDdFM0YwMDA5RkE4MCAvKiBJbWFnZU92ZXJsYXkuaCAqLywKIAkJCQlF
MzA1OTI2MTFFMjdBMzhDMDBENTdDOTggLyogSW5saW5lQ2xhc3NpY1NjcmlwdC5jcHAgKi8sCiAJ
CQkJRTMwNTkyNjIxRTI3QTM4QzAwRDU3Qzk4IC8qIElubGluZUNsYXNzaWNTY3JpcHQuaCAqLywK
IAkJCQlBQTRDM0E3NDBCMkIxNjc5MDAyMzM0QTIgLyogSW5saW5lU3R5bGVTaGVldE93bmVyLmNw
cCAqLywKQEAgLTMzODAwLDYgKzMzODA1LDcgQEAKIAkJCQkwODk1ODI1NjBFODU3QTdFMDBGODJD
ODMgLyogSW1hZ2VMb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDN0Y0NEE4MEI5RTMyNEUw
MEE5RDA4MSAvKiBJbWFnZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDVBNTkzMTE1
MjUyNUQwMDAzNkVFNTEgLyogSW1hZ2VPcmllbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RjQ2RDUzODYyNzNEN0U0NjAwMDlGQTgwIC8qIEltYWdlT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRjQ4MjQzNEIyNjBDMzMwNjAwMjI0OTdDIC8qIEltYWdlT3ZlcmxheUNvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUY0NDZFREUxMjY1REIxRTUwMDMxREE4RiAvKiBJbWFnZU92
ZXJsYXlEYXRhRGV0ZWN0aW9uUmVzdWx0SWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NzIyODNGMEUyMzBCMjY4QzAwRjVEODI4IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggaW4gSGVh
ZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9JbWFnZU92ZXJsYXkuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0ltYWdlT3ZlcmxheS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTM0YzY0
NGFhMDY1NDk5MGU1NmQ2OTgxMTUwNmY4M2JmYWZmZThkOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9JbWFnZU92ZXJsYXkuY3BwCkBAIC0wLDAgKzEsNDU3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlT3ZlcmxheS5oIgor
CisjaW5jbHVkZSAiRE9NVG9rZW5MaXN0LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJFbGVtZW50Q2hpbGRJdGVyYXRvci5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgor
I2luY2x1ZGUgIkV2ZW50TG9vcC5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUg
Ikdlb21ldHJ5VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSFRNTEJSRWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxEaXZFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJNZWRpYUNvbnRyb2xzSG9zdC5o
IgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJRdWlya3MuaCIKKyNpbmNsdWRlICJSZW5k
ZXJJbWFnZS5oIgorI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJTaW1wbGVSYW5n
ZS5oIgorI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJUZXh0UmVjb2duaXRpb25SZXN1bHQu
aCIKKyNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgorI2luY2x1ZGUgPHd0Zi9SYW5n
ZS5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0
cmluZy5oPgorCisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorI2luY2x1ZGUgIkRhdGFEZXRl
Y3Rpb24uaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgSW1hZ2VP
dmVybGF5IHsKKworc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIGltYWdlT3ZlcmxheUVsZW1lbnRJ
ZGVudGlmaWVyKCkKK3sKKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0
IEF0b21TdHJpbmc+IGlkZW50aWZpZXIoImltYWdlLW92ZXJsYXkiLCBBdG9tU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgcmV0dXJuIGlkZW50aWZpZXI7Cit9CisKK3N0YXRpYyBj
b25zdCBBdG9tU3RyaW5nJiBpbWFnZU92ZXJsYXlEYXRhRGV0ZWN0b3JDbGFzc05hbWUoKQorewor
ICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gY2xh
c3NOYW1lKCJpbWFnZS1vdmVybGF5LWRhdGEtZGV0ZWN0b3ItcmVzdWx0IiwgQXRvbVN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIHJldHVybiBjbGFzc05hbWU7Cit9CisKK2Jvb2wg
aGFzT3ZlcmxheShjb25zdCBIVE1MRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICBhdXRvIHNoYWRv
d1Jvb3QgPSBlbGVtZW50LnNoYWRvd1Jvb3QoKTsKKyAgICBpZiAoTElLRUxZKCFzaGFkb3dSb290
IHx8IHNoYWRvd1Jvb3QtPm1vZGUoKSAhPSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmhhc0VsZW1lbnRX
aXRoSWQoKmltYWdlT3ZlcmxheUVsZW1lbnRJZGVudGlmaWVyKCkuaW1wbCgpKTsKK30KKworc3Rh
dGljIFJlZlB0cjxIVE1MRWxlbWVudD4gaW1hZ2VPdmVybGF5SG9zdChjb25zdCBOb2RlJiBub2Rl
KQoreworICAgIGF1dG8gaG9zdCA9IG5vZGUuc2hhZG93SG9zdCgpOworICAgIGlmICghaXM8SFRN
TEVsZW1lbnQ+KGhvc3QpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlZlB0ciBl
bGVtZW50IHsgJmRvd25jYXN0PEhUTUxFbGVtZW50PigqaG9zdCkgfTsKKyAgICByZXR1cm4gaGFz
T3ZlcmxheSgqZWxlbWVudCkgPyBlbGVtZW50IDogbnVsbHB0cjsKK30KKworYm9vbCBpc0RhdGFE
ZXRlY3RvclJlc3VsdChjb25zdCBIVE1MRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICByZXR1cm4g
aW1hZ2VPdmVybGF5SG9zdChlbGVtZW50KSAmJiBlbGVtZW50Lmhhc0NsYXNzKCkgJiYgZWxlbWVu
dC5jbGFzc05hbWVzKCkuY29udGFpbnMoaW1hZ2VPdmVybGF5RGF0YURldGVjdG9yQ2xhc3NOYW1l
KCkpOworfQorCitib29sIGlzSW5zaWRlT3ZlcmxheShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2Up
Cit7CisgICAgUmVmUHRyIGNvbW1vbkFuY2VzdG9yID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3I8
Q29tcG9zZWRUcmVlPihyYW5nZSk7CisgICAgaWYgKCFjb21tb25BbmNlc3RvcikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGlzSW5zaWRlT3ZlcmxheSgqY29tbW9uQW5jZXN0
b3IpOworfQorCitib29sIGlzSW5zaWRlT3ZlcmxheShjb25zdCBOb2RlJiBub2RlKQoreworICAg
IGF1dG8gaG9zdCA9IGltYWdlT3ZlcmxheUhvc3Qobm9kZSk7CisgICAgaWYgKCFob3N0KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gaG9zdC0+dXNlckFnZW50U2hhZG93Um9v
dCgpLT5jb250YWlucyhub2RlKTsKK30KKworYm9vbCBpc092ZXJsYXlUZXh0KGNvbnN0IE5vZGUq
IG5vZGUpCit7CisgICAgcmV0dXJuIG5vZGUgJiYgaXNPdmVybGF5VGV4dCgqbm9kZSk7Cit9CisK
K2Jvb2wgaXNPdmVybGF5VGV4dChjb25zdCBOb2RlJiBub2RlKQoreworICAgIGF1dG8gaG9zdCA9
IGltYWdlT3ZlcmxheUhvc3Qobm9kZSk7CisgICAgaWYgKCFob3N0KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoUmVmUHRyIG92ZXJsYXkgPSBzdGF0aWNfY2FzdDxUcmVlU2NvcGUm
PigqaG9zdC0+dXNlckFnZW50U2hhZG93Um9vdCgpKS5nZXRFbGVtZW50QnlJZChpbWFnZU92ZXJs
YXlFbGVtZW50SWRlbnRpZmllcigpKSkKKyAgICAgICAgcmV0dXJuIG5vZGUuaXNEZXNjZW5kYW50
T2YoKm92ZXJsYXkpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIHJlbW92ZU92ZXJs
YXlTb29uSWZOZWVkZWQoSFRNTEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgaWYgKCFoYXNPdmVy
bGF5KGVsZW1lbnQpKQorICAgICAgICByZXR1cm47CisKKyAgICBlbGVtZW50LmRvY3VtZW50KCku
ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6OkludGVybmFsQXN5bmNUYXNrLCBbd2Vh
a0VsZW1lbnQgPSBXZWFrUHRyIHsgZWxlbWVudCB9XSB7CisgICAgICAgIFJlZlB0ciBwcm90ZWN0
ZWRFbGVtZW50ID0gd2Vha0VsZW1lbnQuZ2V0KCk7CisgICAgICAgIGlmICghcHJvdGVjdGVkRWxl
bWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSZWZQdHIgc2hhZG93Um9vdCA9
IHByb3RlY3RlZEVsZW1lbnQtPnVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKKyAgICAgICAgaWYgKCFz
aGFkb3dSb290KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChSZWZQdHIgb3Zl
cmxheSA9IHN0YXRpY19jYXN0PFRyZWVTY29wZSY+KCpzaGFkb3dSb290KS5nZXRFbGVtZW50QnlJ
ZChpbWFnZU92ZXJsYXlFbGVtZW50SWRlbnRpZmllcigpKSkKKyAgICAgICAgICAgIG92ZXJsYXkt
PnJlbW92ZSgpOworCisjaWYgRU5BQkxFKElNQUdFX0FOQUxZU0lTKQorICAgICAgICBpZiAoYXV0
byBwYWdlID0gcHJvdGVjdGVkRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgICAg
ICBwYWdlLT5yZXNldFRleHRSZWNvZ25pdGlvblJlc3VsdCgqcHJvdGVjdGVkRWxlbWVudCk7Cisj
ZW5kaWYKKyAgICB9KTsKK30KKworI2lmIEVOQUJMRShJTUFHRV9BTkFMWVNJUykKKworSW50UmVj
dCBjb250YWluZXJSZWN0KEhUTUxFbGVtZW50JiBlbGVtZW50KQoreworICAgIGF1dG8qIHJlbmRl
cmVyID0gZWxlbWVudC5yZW5kZXJlcigpOworICAgIGlmICghaXM8UmVuZGVySW1hZ2U+KHJlbmRl
cmVyKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmICghcmVuZGVyZXItPm9wYWNpdHko
KSkKKyAgICAgICAgcmV0dXJuIHsgMCwgMCwgZWxlbWVudC5vZmZzZXRXaWR0aCgpLCBlbGVtZW50
Lm9mZnNldEhlaWdodCgpIH07CisKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChkb3duY2Fz
dDxSZW5kZXJJbWFnZT4oKnJlbmRlcmVyKS5yZXBsYWNlZENvbnRlbnRSZWN0KCkpOworfQorCit2
b2lkIHVwZGF0ZVdpdGhUZXh0UmVjb2duaXRpb25SZXN1bHQoSFRNTEVsZW1lbnQmIGVsZW1lbnQs
IGNvbnN0IFRleHRSZWNvZ25pdGlvblJlc3VsdCYgcmVzdWx0LCBDYWNoZVRleHRSZWNvZ25pdGlv
blJlc3VsdHMgY2FjaGVUZXh0UmVjb2duaXRpb25SZXN1bHRzKQoreworICAgIHN0YXRpYyBNYWlu
VGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gaW1hZ2VPdmVybGF5TGluZUNs
YXNzKCJpbWFnZS1vdmVybGF5LWxpbmUiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7CisgICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5n
PiBpbWFnZU92ZXJsYXlUZXh0Q2xhc3MoImltYWdlLW92ZXJsYXktdGV4dCIsIEF0b21TdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKworICAgIHN0cnVjdCBUZXh0UmVjb2duaXRpb25MaW5l
RWxlbWVudHMgeworICAgICAgICBSZWY8SFRNTERpdkVsZW1lbnQ+IGxpbmU7CisgICAgICAgIFZl
Y3RvcjxSZWY8SFRNTEVsZW1lbnQ+PiBjaGlsZHJlbjsKKyAgICB9OworCisgICAgc3RydWN0IFRl
eHRSZWNvZ25pdGlvbkVsZW1lbnRzIHsKKyAgICAgICAgUmVmUHRyPEhUTUxEaXZFbGVtZW50PiBy
b290OworICAgICAgICBWZWN0b3I8VGV4dFJlY29nbml0aW9uTGluZUVsZW1lbnRzPiBsaW5lczsK
KyAgICAgICAgVmVjdG9yPFJlZjxIVE1MRGl2RWxlbWVudD4+IGRhdGFEZXRlY3RvcnM7CisgICAg
fTsKKworICAgIGJvb2wgaGFkRXhpc3RpbmdUZXh0UmVjb2duaXRpb25FbGVtZW50cyA9IGZhbHNl
OworICAgIFRleHRSZWNvZ25pdGlvbkVsZW1lbnRzIHRleHRSZWNvZ25pdGlvbkVsZW1lbnRzOwor
ICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbWVkaWFDb250cm9sc0NvbnRhaW5lcjsKKyAgICBpZiAo
UmVmUHRyIHNoYWRvd1Jvb3QgPSBlbGVtZW50LnNoYWRvd1Jvb3QoKSkgeworI2lmIEVOQUJMRShN
T0RFUk5fTUVESUFfQ09OVFJPTFMpCisgICAgICAgIGlmIChpczxIVE1MTWVkaWFFbGVtZW50Pihl
bGVtZW50KSkgeworICAgICAgICAgICAgaWYgKFJlZlB0ciBjb250cm9sc0hvc3QgPSBkb3duY2Fz
dDxIVE1MTWVkaWFFbGVtZW50PihlbGVtZW50KS5tZWRpYUNvbnRyb2xzSG9zdCgpKSB7CisgICAg
ICAgICAgICAgICAgYXV0byYgY29udGFpbmVyQ2xhc3MgPSBjb250cm9sc0hvc3QtPm1lZGlhQ29u
dHJvbHNDb250YWluZXJDbGFzc05hbWUoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGNo
aWxkIDogY2hpbGRyZW5PZlR5cGU8SFRNTERpdkVsZW1lbnQ+KCpzaGFkb3dSb290KSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuaGFzQ2xhc3MoKSAmJiBjaGlsZC5jbGFzc05hbWVz
KCkuY29udGFpbnMoY29udGFpbmVyQ2xhc3MpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBt
ZWRpYUNvbnRyb2xzQ29udGFpbmVyID0gJmNoaWxkOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBpZiAoaGFzT3ZlcmxheShlbGVtZW50
KSkgeworICAgICAgICAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IGNvbnRhaW5lckZvckltYWdl
T3ZlcmxheTsKKyAgICAgICAgICAgIGlmIChtZWRpYUNvbnRyb2xzQ29udGFpbmVyKQorICAgICAg
ICAgICAgICAgIGNvbnRhaW5lckZvckltYWdlT3ZlcmxheSA9IG1lZGlhQ29udHJvbHNDb250YWlu
ZXI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29udGFpbmVyRm9ySW1hZ2VP
dmVybGF5ID0gc2hhZG93Um9vdDsKKyAgICAgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGls
ZHJlbk9mVHlwZTxIVE1MRGl2RWxlbWVudD4oKmNvbnRhaW5lckZvckltYWdlT3ZlcmxheSkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZ2V0SWRBdHRyaWJ1dGUoKSA9PSBpbWFnZU92ZXJs
YXlFbGVtZW50SWRlbnRpZmllcigpKSB7CisgICAgICAgICAgICAgICAgICAgIHRleHRSZWNvZ25p
dGlvbkVsZW1lbnRzLnJvb3QgPSAmY2hpbGQ7CisgICAgICAgICAgICAgICAgICAgIGhhZEV4aXN0
aW5nVGV4dFJlY29nbml0aW9uRWxlbWVudHMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAodGV4dFJlY29nbml0aW9uRWxlbWVudHMucm9vdCkgeworICAgICAgICBm
b3IgKGF1dG8mIGxpbmVPckRhdGFEZXRlY3RvciA6IGNoaWxkcmVuT2ZUeXBlPEhUTUxEaXZFbGVt
ZW50PigqdGV4dFJlY29nbml0aW9uRWxlbWVudHMucm9vdCkpIHsKKyAgICAgICAgICAgIGlmICgh
bGluZU9yRGF0YURldGVjdG9yLmhhc0NsYXNzKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgICAgIGlmIChsaW5lT3JEYXRhRGV0ZWN0b3IuY2xhc3NMaXN0KCkuY29udGFp
bnMoaW1hZ2VPdmVybGF5TGluZUNsYXNzKSkgeworICAgICAgICAgICAgICAgIFRleHRSZWNvZ25p
dGlvbkxpbmVFbGVtZW50cyBsaW5lRWxlbWVudHMgeyBsaW5lT3JEYXRhRGV0ZWN0b3IsIHsgfSB9
OworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgdGV4dCA6IGNoaWxkcmVuT2ZUeXBlPEhUTUxE
aXZFbGVtZW50PihsaW5lT3JEYXRhRGV0ZWN0b3IpKQorICAgICAgICAgICAgICAgICAgICBsaW5l
RWxlbWVudHMuY2hpbGRyZW4uYXBwZW5kKHRleHQpOworICAgICAgICAgICAgICAgIHRleHRSZWNv
Z25pdGlvbkVsZW1lbnRzLmxpbmVzLmFwcGVuZChXVEZNb3ZlKGxpbmVFbGVtZW50cykpOworICAg
ICAgICAgICAgfSBlbHNlIGlmIChsaW5lT3JEYXRhRGV0ZWN0b3IuY2xhc3NMaXN0KCkuY29udGFp
bnMoaW1hZ2VPdmVybGF5RGF0YURldGVjdG9yQ2xhc3NOYW1lKCkpKQorICAgICAgICAgICAgICAg
IHRleHRSZWNvZ25pdGlvbkVsZW1lbnRzLmRhdGFEZXRlY3RvcnMuYXBwZW5kKGxpbmVPckRhdGFE
ZXRlY3Rvcik7CisgICAgICAgIH0KKworICAgICAgICBib29sIGNhblVzZUV4aXN0aW5nVGV4dFJl
Y29nbml0aW9uRWxlbWVudHMgPSAoWyZdIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuZGF0YURl
dGVjdG9ycy5zaXplKCkgIT0gdGV4dFJlY29nbml0aW9uRWxlbWVudHMuZGF0YURldGVjdG9ycy5z
aXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAo
cmVzdWx0LmxpbmVzLnNpemUoKSAhPSB0ZXh0UmVjb2duaXRpb25FbGVtZW50cy5saW5lcy5zaXpl
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBmb3IgKHNp
emVfdCBsaW5lSW5kZXggPSAwOyBsaW5lSW5kZXggPCByZXN1bHQubGluZXMuc2l6ZSgpOyArK2xp
bmVJbmRleCkgeworICAgICAgICAgICAgICAgIGF1dG8mIGNoaWxkUmVzdWx0cyA9IHJlc3VsdC5s
aW5lc1tsaW5lSW5kZXhdLmNoaWxkcmVuOworICAgICAgICAgICAgICAgIGF1dG8mIGNoaWxkVGV4
dEVsZW1lbnRzID0gdGV4dFJlY29nbml0aW9uRWxlbWVudHMubGluZXNbbGluZUluZGV4XS5jaGls
ZHJlbjsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGRSZXN1bHRzLnNpemUoKSAhPSBjaGlsZFRl
eHRFbGVtZW50cy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGNoaWxkSW5kZXggPSAwOyBjaGlsZEluZGV4IDwg
Y2hpbGRSZXN1bHRzLnNpemUoKTsgKytjaGlsZEluZGV4KSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChjaGlsZFJlc3VsdHNbY2hpbGRJbmRleF0udGV4dCAhPSBjaGlsZFRleHRFbGVtZW50c1tj
aGlsZEluZGV4XS0+dGV4dENvbnRlbnQoKS5zdHJpcFdoaXRlU3BhY2UoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KSgpOworCisgICAgICAg
IGlmICghY2FuVXNlRXhpc3RpbmdUZXh0UmVjb2duaXRpb25FbGVtZW50cykgeworICAgICAgICAg
ICAgdGV4dFJlY29nbml0aW9uRWxlbWVudHMucm9vdC0+cmVtb3ZlKCk7CisgICAgICAgICAgICB0
ZXh0UmVjb2duaXRpb25FbGVtZW50cyA9IHsgfTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChyZXN1bHQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWYgZG9jdW1lbnQg
PSBlbGVtZW50LmRvY3VtZW50KCk7CisgICAgUmVmIHNoYWRvd1Jvb3QgPSBlbGVtZW50LmVuc3Vy
ZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKKyAgICBpZiAoIXRleHRSZWNvZ25pdGlvbkVsZW1lbnRz
LnJvb3QpIHsKKyAgICAgICAgYXV0byByb290Q29udGFpbmVyID0gSFRNTERpdkVsZW1lbnQ6OmNy
ZWF0ZShkb2N1bWVudC5nZXQoKSk7CisgICAgICAgIHJvb3RDb250YWluZXItPnNldElkQXR0cmli
dXRlKGltYWdlT3ZlcmxheUVsZW1lbnRJZGVudGlmaWVyKCkpOworICAgICAgICBpZiAoZG9jdW1l
bnQtPmlzSW1hZ2VEb2N1bWVudCgpKQorICAgICAgICAgICAgcm9vdENvbnRhaW5lci0+c2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFVzZXJTZWxlY3QsIENTU1ZhbHVlVGV4
dCk7CisKKyAgICAgICAgaWYgKG1lZGlhQ29udHJvbHNDb250YWluZXIpCisgICAgICAgICAgICBt
ZWRpYUNvbnRyb2xzQ29udGFpbmVyLT5hcHBlbmRDaGlsZChyb290Q29udGFpbmVyKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgc2hhZG93Um9vdC0+YXBwZW5kQ2hpbGQocm9vdENvbnRhaW5l
cik7CisgICAgICAgIHRleHRSZWNvZ25pdGlvbkVsZW1lbnRzLnJvb3QgPSByb290Q29udGFpbmVy
LmNvcHlSZWYoKTsKKyAgICAgICAgdGV4dFJlY29nbml0aW9uRWxlbWVudHMubGluZXMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShyZXN1bHQubGluZXMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRv
JiBsaW5lIDogcmVzdWx0LmxpbmVzKSB7CisgICAgICAgICAgICBhdXRvIGxpbmVDb250YWluZXIg
PSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LmdldCgpKTsKKyAgICAgICAgICAgIGxp
bmVDb250YWluZXItPmNsYXNzTGlzdCgpLmFkZChpbWFnZU92ZXJsYXlMaW5lQ2xhc3MpOworICAg
ICAgICAgICAgcm9vdENvbnRhaW5lci0+YXBwZW5kQ2hpbGQobGluZUNvbnRhaW5lcik7CisgICAg
ICAgICAgICBUZXh0UmVjb2duaXRpb25MaW5lRWxlbWVudHMgbGluZUVsZW1lbnRzIHsgbGluZUNv
bnRhaW5lciwgeyB9IH07CisgICAgICAgICAgICBsaW5lRWxlbWVudHMuY2hpbGRyZW4ucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShsaW5lLmNoaWxkcmVuLnNpemUoKSk7CisgICAgICAgICAgICBmb3Ig
KHNpemVfdCBjaGlsZEluZGV4ID0gMDsgY2hpbGRJbmRleCA8IGxpbmUuY2hpbGRyZW4uc2l6ZSgp
OyArK2NoaWxkSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBjaGlsZCA9IGxpbmUuY2hp
bGRyZW5bY2hpbGRJbmRleF07CisgICAgICAgICAgICAgICAgYXV0byB0ZXh0Q29udGFpbmVyID0g
SFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudC5nZXQoKSk7CisgICAgICAgICAgICAgICAg
dGV4dENvbnRhaW5lci0+Y2xhc3NMaXN0KCkuYWRkKGltYWdlT3ZlcmxheVRleHRDbGFzcyk7Cisg
ICAgICAgICAgICAgICAgbGluZUNvbnRhaW5lci0+YXBwZW5kQ2hpbGQodGV4dENvbnRhaW5lcik7
CisgICAgICAgICAgICAgICAgdGV4dENvbnRhaW5lci0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRl
KGRvY3VtZW50LmdldCgpLCBjaGlsZC5oYXNMZWFkaW5nV2hpdGVzcGFjZSA/IG1ha2VTdHJpbmco
J1xuJywgY2hpbGQudGV4dCkgOiBjaGlsZC50ZXh0KSk7CisgICAgICAgICAgICAgICAgbGluZUVs
ZW1lbnRzLmNoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHRleHRDb250YWluZXIpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGluZUNvbnRhaW5lci0+YXBwZW5kQ2hpbGQo
SFRNTEJSRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LmdldCgpKSk7CisgICAgICAgICAgICB0ZXh0
UmVjb2duaXRpb25FbGVtZW50cy5saW5lcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShsaW5lRWxl
bWVudHMpKTsKKyAgICAgICAgfQorCisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorICAgICAg
ICB0ZXh0UmVjb2duaXRpb25FbGVtZW50cy5kYXRhRGV0ZWN0b3JzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkocmVzdWx0LmRhdGFEZXRlY3RvcnMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBk
YXRhRGV0ZWN0b3IgOiByZXN1bHQuZGF0YURldGVjdG9ycykgeworICAgICAgICAgICAgYXV0byBk
YXRhRGV0ZWN0b3JDb250YWluZXIgPSBEYXRhRGV0ZWN0aW9uOjpjcmVhdGVFbGVtZW50Rm9ySW1h
Z2VPdmVybGF5KGRvY3VtZW50LmdldCgpLCBkYXRhRGV0ZWN0b3IpOworICAgICAgICAgICAgZGF0
YURldGVjdG9yQ29udGFpbmVyLT5jbGFzc0xpc3QoKS5hZGQoaW1hZ2VPdmVybGF5RGF0YURldGVj
dG9yQ2xhc3NOYW1lKCkpOworICAgICAgICAgICAgcm9vdENvbnRhaW5lci0+YXBwZW5kQ2hpbGQo
ZGF0YURldGVjdG9yQ29udGFpbmVyKTsKKyAgICAgICAgICAgIHRleHRSZWNvZ25pdGlvbkVsZW1l
bnRzLmRhdGFEZXRlY3RvcnMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZGF0YURldGVjdG9yQ29u
dGFpbmVyKSk7CisgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisK
KyAgICAgICAgaWYgKGRvY3VtZW50LT5xdWlya3MoKS5uZWVkc1RvRm9yY2VVc2VyU2VsZWN0V2hl
bkluc3RhbGxpbmdJbWFnZU92ZXJsYXkoKSkKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFVzZXJTZWxlY3QsIENTU1ZhbHVlVGV4dCk7
CisgICAgfQorCisgICAgaWYgKCFoYWRFeGlzdGluZ1RleHRSZWNvZ25pdGlvbkVsZW1lbnRzKSB7
CisgICAgICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBz
aGFkb3dTdHlsZShTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWluZyhpbWFnZU92ZXJsYXlV
c2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YoaW1hZ2VPdmVybGF5VXNlckFnZW50U3R5bGVTaGVl
dCkpKTsKKyAgICAgICAgYXV0byBzdHlsZSA9IEhUTUxTdHlsZUVsZW1lbnQ6OmNyZWF0ZShIVE1M
TmFtZXM6OnN0eWxlVGFnLCBkb2N1bWVudC5nZXQoKSwgZmFsc2UpOworICAgICAgICBzdHlsZS0+
c2V0VGV4dENvbnRlbnQoc2hhZG93U3R5bGUpOworICAgICAgICBzaGFkb3dSb290LT5hcHBlbmRD
aGlsZChXVEZNb3ZlKHN0eWxlKSk7CisgICAgfQorCisgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91
dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworCisgICAgYXV0byogcmVuZGVyZXIgPSBlbGVt
ZW50LnJlbmRlcmVyKCk7CisgICAgaWYgKCFpczxSZW5kZXJJbWFnZT4ocmVuZGVyZXIpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBkb3duY2FzdDxSZW5kZXJJbWFnZT4oKnJlbmRlcmVyKS5zZXRI
YXNJbWFnZU92ZXJsYXkoKTsKKworICAgIGF1dG8gY29udGFpbmVyUmVjdCA9IEltYWdlT3Zlcmxh
eTo6Y29udGFpbmVyUmVjdChlbGVtZW50KTsKKyAgICBhdXRvIGNvbnZlcnRUb0NvbnRhaW5lckNv
b3JkaW5hdGVzID0gWyZdKGNvbnN0IEZsb2F0UXVhZCYgbm9ybWFsaXplZFF1YWQpIHsKKyAgICAg
ICAgYXV0byBxdWFkID0gbm9ybWFsaXplZFF1YWQ7CisgICAgICAgIHF1YWQuc2NhbGUoY29udGFp
bmVyUmVjdC53aWR0aCgpLCBjb250YWluZXJSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgcXVhZC5t
b3ZlKGNvbnRhaW5lclJlY3QueCgpLCBjb250YWluZXJSZWN0LnkoKSk7CisgICAgICAgIHJldHVy
biBxdWFkOworICAgIH07CisKKyAgICBib29sIGFwcGx5VXNlclNlbGVjdEFsbCA9IGRvY3VtZW50
LT5pc0ltYWdlRG9jdW1lbnQoKSB8fCByZW5kZXJlci0+c3R5bGUoKS51c2VyU2VsZWN0KCkgIT0g
VXNlclNlbGVjdDo6Tm9uZTsKKyAgICBmb3IgKHNpemVfdCBsaW5lSW5kZXggPSAwOyBsaW5lSW5k
ZXggPCByZXN1bHQubGluZXMuc2l6ZSgpOyArK2xpbmVJbmRleCkgeworICAgICAgICBhdXRvJiBs
aW5lRWxlbWVudHMgPSB0ZXh0UmVjb2duaXRpb25FbGVtZW50cy5saW5lc1tsaW5lSW5kZXhdOwor
ICAgICAgICBhdXRvJiBsaW5lQ29udGFpbmVyID0gbGluZUVsZW1lbnRzLmxpbmU7CisgICAgICAg
IGF1dG8mIGxpbmUgPSByZXN1bHQubGluZXNbbGluZUluZGV4XTsKKyAgICAgICAgYXV0byBsaW5l
UXVhZCA9IGNvbnZlcnRUb0NvbnRhaW5lckNvb3JkaW5hdGVzKGxpbmUubm9ybWFsaXplZFF1YWQp
OworICAgICAgICBpZiAobGluZVF1YWQuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgYXV0byBsaW5lQm91bmRzID0gcm90YXRlZEJvdW5kaW5nUmVjdFdpdGhNaW5p
bXVtQW5nbGVPZlJvdGF0aW9uKGxpbmVRdWFkLCAwLjAxKTsKKyAgICAgICAgbGluZUNvbnRhaW5l
ci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCBsaW5lQm91bmRzLnNp
emUud2lkdGgoKSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgICAgIGxpbmVDb250YWluZXIt
PnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIGxpbmVCb3VuZHMuc2l6
ZS5oZWlnaHQoKSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgICAgIGxpbmVDb250YWluZXIt
PnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUcmFuc2Zvcm0sIG1ha2VTdHJpbmco
CisgICAgICAgICAgICAidHJhbnNsYXRlKCJfcywKKyAgICAgICAgICAgIHN0ZDo6cm91bmQobGlu
ZUJvdW5kcy5jZW50ZXIueCgpIC0gKGxpbmVCb3VuZHMuc2l6ZS53aWR0aCgpIC8gMikpLCAicHgs
ICJfcywKKyAgICAgICAgICAgIHN0ZDo6cm91bmQobGluZUJvdW5kcy5jZW50ZXIueSgpIC0gKGxp
bmVCb3VuZHMuc2l6ZS5oZWlnaHQoKSAvIDIpKSwgInB4KSAiX3MsCisgICAgICAgICAgICBsaW5l
Qm91bmRzLmFuZ2xlSW5SYWRpYW5zID8gbWFrZVN0cmluZygicm90YXRlKCJfcywgbGluZUJvdW5k
cy5hbmdsZUluUmFkaWFucywgInJhZCkgIl9zKSA6IGVtcHR5U3RyaW5nKCkKKyAgICAgICAgKSk7
CisKKyAgICAgICAgYXV0byBvZmZzZXRBbG9uZ0hvcml6b250YWxBeGlzID0gWyZdKGNvbnN0IEZs
b2F0UG9pbnQmIHF1YWRQb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHF1YWRQb2ludDIpIHsKKyAg
ICAgICAgICAgIGF1dG8gaW50ZXJ2YWxMZW5ndGggPSBsaW5lQm91bmRzLnNpemUud2lkdGgoKTsK
KyAgICAgICAgICAgIGF1dG8gbWlkID0gbWlkUG9pbnQocXVhZFBvaW50MSwgcXVhZFBvaW50Mik7
CisgICAgICAgICAgICBtaWQubW92ZUJ5KC1saW5lQm91bmRzLmNlbnRlcik7CisgICAgICAgICAg
ICBtaWQucm90YXRlKC1saW5lQm91bmRzLmFuZ2xlSW5SYWRpYW5zKTsKKyAgICAgICAgICAgIHJl
dHVybiBpbnRlcnZhbExlbmd0aCAqIGNsYW1wVG88ZmxvYXQ+KDAuNSArIG1pZC54KCkgLyBpbnRl
cnZhbExlbmd0aCwgMCwgMSk7CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byBvZmZzZXRzQWxv
bmdIb3Jpem9udGFsQXhpcyA9IGxpbmUuY2hpbGRyZW4ubWFwKFsmXShhdXRvJiBjaGlsZCkgLT4g
V1RGOjpSYW5nZTxmbG9hdD4geworICAgICAgICAgICAgYXV0byB0ZXh0UXVhZCA9IGNvbnZlcnRU
b0NvbnRhaW5lckNvb3JkaW5hdGVzKGNoaWxkLm5vcm1hbGl6ZWRRdWFkKTsKKyAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgb2Zmc2V0QWxvbmdIb3Jpem9udGFsQXhpcyh0ZXh0
UXVhZC5wMSgpLCB0ZXh0UXVhZC5wNCgpKSwKKyAgICAgICAgICAgICAgICBvZmZzZXRBbG9uZ0hv
cml6b250YWxBeGlzKHRleHRRdWFkLnAyKCksIHRleHRRdWFkLnAzKCkpCisgICAgICAgICAgICB9
OworICAgICAgICB9KTsKKworICAgICAgICBmb3IgKHNpemVfdCBjaGlsZEluZGV4ID0gMDsgY2hp
bGRJbmRleCA8IGxpbmUuY2hpbGRyZW4uc2l6ZSgpOyArK2NoaWxkSW5kZXgpIHsKKyAgICAgICAg
ICAgIGF1dG8mIHRleHRDb250YWluZXIgPSBsaW5lRWxlbWVudHMuY2hpbGRyZW5bY2hpbGRJbmRl
eF07CisgICAgICAgICAgICBib29sIGxpbmVIYXNPbmVDaGlsZCA9IGxpbmUuY2hpbGRyZW4uc2l6
ZSgpID09IDE7CisgICAgICAgICAgICBmbG9hdCBob3Jpem9udGFsTWFyZ2luVG9NaW5pbWl6ZVNl
bGVjdGlvbkdhcHMgPSBsaW5lSGFzT25lQ2hpbGQgPyAwIDogMC4xMjU7CisgICAgICAgICAgICBm
bG9hdCBob3Jpem9udGFsT2Zmc2V0ID0gbGluZUhhc09uZUNoaWxkID8gMCA6IC1ob3Jpem9udGFs
TWFyZ2luVG9NaW5pbWl6ZVNlbGVjdGlvbkdhcHM7CisgICAgICAgICAgICBmbG9hdCBob3Jpem9u
dGFsRXh0ZW50ID0gbGluZUhhc09uZUNoaWxkID8gMCA6IGhvcml6b250YWxNYXJnaW5Ub01pbmlt
aXplU2VsZWN0aW9uR2FwczsKKworICAgICAgICAgICAgaWYgKGxpbmVIYXNPbmVDaGlsZCkgewor
ICAgICAgICAgICAgICAgIGhvcml6b250YWxPZmZzZXQgKz0gb2Zmc2V0c0Fsb25nSG9yaXpvbnRh
bEF4aXNbY2hpbGRJbmRleF0uYmVnaW4oKTsKKyAgICAgICAgICAgICAgICBob3Jpem9udGFsRXh0
ZW50ICs9IG9mZnNldHNBbG9uZ0hvcml6b250YWxBeGlzW2NoaWxkSW5kZXhdLmVuZCgpOworICAg
ICAgICAgICAgfSBlbHNlIGlmICghY2hpbGRJbmRleCkgeworICAgICAgICAgICAgICAgIGhvcml6
b250YWxPZmZzZXQgKz0gb2Zmc2V0c0Fsb25nSG9yaXpvbnRhbEF4aXNbY2hpbGRJbmRleF0uYmVn
aW4oKTsKKyAgICAgICAgICAgICAgICBob3Jpem9udGFsRXh0ZW50ICs9IChvZmZzZXRzQWxvbmdI
b3Jpem9udGFsQXhpc1tjaGlsZEluZGV4XS5lbmQoKSArIG9mZnNldHNBbG9uZ0hvcml6b250YWxB
eGlzW2NoaWxkSW5kZXggKyAxXS5iZWdpbigpKSAvIDI7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KGNoaWxkSW5kZXggPT0gbGluZS5jaGlsZHJlbi5zaXplKCkgLSAxKSB7CisgICAgICAgICAgICAg
ICAgaG9yaXpvbnRhbE9mZnNldCArPSAob2Zmc2V0c0Fsb25nSG9yaXpvbnRhbEF4aXNbY2hpbGRJ
bmRleCAtIDFdLmVuZCgpICsgb2Zmc2V0c0Fsb25nSG9yaXpvbnRhbEF4aXNbY2hpbGRJbmRleF0u
YmVnaW4oKSkgLyAyOworICAgICAgICAgICAgICAgIGhvcml6b250YWxFeHRlbnQgKz0gb2Zmc2V0
c0Fsb25nSG9yaXpvbnRhbEF4aXNbY2hpbGRJbmRleF0uZW5kKCk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGhvcml6b250YWxPZmZzZXQgKz0gKG9mZnNldHNBbG9uZ0hv
cml6b250YWxBeGlzW2NoaWxkSW5kZXggLSAxXS5lbmQoKSArIG9mZnNldHNBbG9uZ0hvcml6b250
YWxBeGlzW2NoaWxkSW5kZXhdLmJlZ2luKCkpIC8gMjsKKyAgICAgICAgICAgICAgICBob3Jpem9u
dGFsRXh0ZW50ICs9IChvZmZzZXRzQWxvbmdIb3Jpem9udGFsQXhpc1tjaGlsZEluZGV4XS5lbmQo
KSArIG9mZnNldHNBbG9uZ0hvcml6b250YWxBeGlzW2NoaWxkSW5kZXggKyAxXS5iZWdpbigpKSAv
IDI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEZsb2F0U2l6ZSB0YXJnZXRTaXplIHsg
aG9yaXpvbnRhbEV4dGVudCAtIGhvcml6b250YWxPZmZzZXQsIGxpbmVCb3VuZHMuc2l6ZS5oZWln
aHQoKSB9OworICAgICAgICAgICAgaWYgKHRhcmdldFNpemUuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICAgICAgdGV4dENvbnRhaW5lci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0
eVRyYW5zZm9ybSwgInNjYWxlKDAsIDApIik7CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZkRpbWVu
c2lvbnNPdXRPZkRhdGUodGV4dENvbnRhaW5lcik7CisKKyAgICAgICAgICAgIEZsb2F0U2l6ZSBz
aXplQmVmb3JlVHJhbnNmb3JtOworICAgICAgICAgICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gdGV4
dENvbnRhaW5lci0+cmVuZGVyQm94TW9kZWxPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIHNp
emVCZWZvcmVUcmFuc2Zvcm0gPSB7CisgICAgICAgICAgICAgICAgICAgIGFkanVzdExheW91dFVu
aXRGb3JBYnNvbHV0ZVpvb20ocmVuZGVyZXItPm9mZnNldFdpZHRoKCksICpyZW5kZXJlcikudG9G
bG9hdCgpLAorICAgICAgICAgICAgICAgICAgICBhZGp1c3RMYXlvdXRVbml0Rm9yQWJzb2x1dGVa
b29tKHJlbmRlcmVyLT5vZmZzZXRIZWlnaHQoKSwgKnJlbmRlcmVyKS50b0Zsb2F0KCksCisgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNpemVCZWZv
cmVUcmFuc2Zvcm0uaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgdGV4dENvbnRhaW5lci0+
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRyYW5zZm9ybSwgInNjYWxlKDAsIDAp
Iik7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHRleHRDb250YWluZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUcmFu
c2Zvcm0sIG1ha2VTdHJpbmcoCisgICAgICAgICAgICAgICAgInRyYW5zbGF0ZSgiX3MsCisgICAg
ICAgICAgICAgICAgaG9yaXpvbnRhbE9mZnNldCArICh0YXJnZXRTaXplLndpZHRoKCkgLSBzaXpl
QmVmb3JlVHJhbnNmb3JtLndpZHRoKCkpIC8gMiwgInB4LCAiX3MsCisgICAgICAgICAgICAgICAg
KHRhcmdldFNpemUuaGVpZ2h0KCkgLSBzaXplQmVmb3JlVHJhbnNmb3JtLmhlaWdodCgpKSAvIDIs
ICJweCkgIl9zLAorICAgICAgICAgICAgICAgICJzY2FsZSgiX3MsIHRhcmdldFNpemUud2lkdGgo
KSAvIHNpemVCZWZvcmVUcmFuc2Zvcm0ud2lkdGgoKSwgIiwgIl9zLCB0YXJnZXRTaXplLmhlaWdo
dCgpIC8gc2l6ZUJlZm9yZVRyYW5zZm9ybS5oZWlnaHQoKSwgIikgIl9zCisgICAgICAgICAgICAp
KTsKKworICAgICAgICAgICAgdGV4dENvbnRhaW5lci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShD
U1NQcm9wZXJ0eVdlYmtpdFVzZXJTZWxlY3QsIGFwcGx5VXNlclNlbGVjdEFsbCA/IENTU1ZhbHVl
QWxsIDogQ1NTVmFsdWVOb25lKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkb2N1bWVudC0+
aXNJbWFnZURvY3VtZW50KCkpCisgICAgICAgICAgICBsaW5lQ29udGFpbmVyLT5zZXRJbmxpbmVT
dHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Q3Vyc29yLCBDU1NWYWx1ZVRleHQpOworICAgIH0KKwor
I2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGlu
ZGV4IDwgcmVzdWx0LmRhdGFEZXRlY3RvcnMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGF1
dG8gZGF0YURldGVjdG9yQ29udGFpbmVyID0gdGV4dFJlY29nbml0aW9uRWxlbWVudHMuZGF0YURl
dGVjdG9yc1tpbmRleF07CisgICAgICAgIGF1dG8mIGRhdGFEZXRlY3RvciA9IHJlc3VsdC5kYXRh
RGV0ZWN0b3JzW2luZGV4XTsKKyAgICAgICAgaWYgKGRhdGFEZXRlY3Rvci5ub3JtYWxpemVkUXVh
ZHMuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBjb21lIHVwIHdpdGggYSB3YXkgdG8gY29hbGVzY2UgdGhlIGJvdW5kaW5nIHF1
YWRzIGludG8gb25lIG9yIG1vcmUgcm90YXRlZCByZWN0cyB3aXRoIHRoZSBzYW1lIGFuZ2xlIG9m
IHJvdGF0aW9uLgorICAgICAgICBhdXRvIHRhcmdldFF1YWQgPSBjb252ZXJ0VG9Db250YWluZXJD
b29yZGluYXRlcyhkYXRhRGV0ZWN0b3Iubm9ybWFsaXplZFF1YWRzLmZpcnN0KCkpOworICAgICAg
ICBhdXRvIHRhcmdldEJvdW5kcyA9IHJvdGF0ZWRCb3VuZGluZ1JlY3RXaXRoTWluaW11bUFuZ2xl
T2ZSb3RhdGlvbih0YXJnZXRRdWFkLCAwLjAxKTsKKyAgICAgICAgZGF0YURldGVjdG9yQ29udGFp
bmVyLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIHRhcmdldEJvdW5k
cy5zaXplLndpZHRoKCksIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICBkYXRhRGV0ZWN0
b3JDb250YWluZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIHRh
cmdldEJvdW5kcy5zaXplLmhlaWdodCgpLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICAgICAg
ZGF0YURldGVjdG9yQ29udGFpbmVyLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
VHJhbnNmb3JtLCBtYWtlU3RyaW5nKAorICAgICAgICAgICAgInRyYW5zbGF0ZSgiX3MsCisgICAg
ICAgICAgICBzdGQ6OnJvdW5kKHRhcmdldEJvdW5kcy5jZW50ZXIueCgpIC0gKHRhcmdldEJvdW5k
cy5zaXplLndpZHRoKCkgLyAyKSksICJweCwgIl9zLAorICAgICAgICAgICAgc3RkOjpyb3VuZCh0
YXJnZXRCb3VuZHMuY2VudGVyLnkoKSAtICh0YXJnZXRCb3VuZHMuc2l6ZS5oZWlnaHQoKSAvIDIp
KSwgInB4KSAiX3MsCisgICAgICAgICAgICB0YXJnZXRCb3VuZHMuYW5nbGVJblJhZGlhbnMgPyBt
YWtlU3RyaW5nKCJyb3RhdGUoIl9zLCB0YXJnZXRCb3VuZHMuYW5nbGVJblJhZGlhbnMsICJyYWQp
ICJfcykgOiBlbXB0eVN0cmluZygpCisgICAgICAgICkpOworICAgIH0KKyNlbmRpZiAvLyBFTkFC
TEUoREFUQV9ERVRFQ1RJT04pCisKKyAgICBpZiAoUmVmUHRyIGZyYW1lID0gZG9jdW1lbnQtPmZy
YW1lKCkpCisgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5zY2hlZHVsZUN1cnNvclVwZGF0
ZSgpOworCisgICAgaWYgKGNhY2hlVGV4dFJlY29nbml0aW9uUmVzdWx0cyA9PSBDYWNoZVRleHRS
ZWNvZ25pdGlvblJlc3VsdHM6OlllcykgeworICAgICAgICBpZiAoYXV0byogcGFnZSA9IGRvY3Vt
ZW50LT5wYWdlKCkpCisgICAgICAgICAgICBwYWdlLT5jYWNoZVRleHRSZWNvZ25pdGlvblJlc3Vs
dChlbGVtZW50LCBjb250YWluZXJSZWN0LCByZXN1bHQpOworICAgIH0KK30KKworI2VuZGlmIC8v
IEVOQUJMRShJTUFHRV9BTkFMWVNJUykKKworfSAvLyBuYW1lc3BhY2UgSW1hZ2VPdmVybGF5Cit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vSW1h
Z2VPdmVybGF5LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vSW1hZ2VPdmVybGF5LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNjVjM2JkNTNhYmRkMTRiMGI4MGQzMTRjMzY4MjY3NTI3M2YwMjYxMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9JbWFnZU92ZXJsYXkuaApAQCAtMCwwICsxLDU2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSFRNTEVsZW1lbnQ7CitjbGFzcyBOb2RlOworCitz
dHJ1Y3QgU2ltcGxlUmFuZ2U7CitzdHJ1Y3QgVGV4dFJlY29nbml0aW9uUmVzdWx0OworCituYW1l
c3BhY2UgSW1hZ2VPdmVybGF5IHsKKworV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNPdmVybGF5KGNv
bnN0IEhUTUxFbGVtZW50Jik7CitXRUJDT1JFX0VYUE9SVCBib29sIGlzRGF0YURldGVjdG9yUmVz
dWx0KGNvbnN0IEhUTUxFbGVtZW50Jik7CitXRUJDT1JFX0VYUE9SVCBib29sIGlzSW5zaWRlT3Zl
cmxheShjb25zdCBTaW1wbGVSYW5nZSYpOworV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0luc2lkZU92
ZXJsYXkoY29uc3QgTm9kZSYpOworV0VCQ09SRV9FWFBPUlQgYm9vbCBpc092ZXJsYXlUZXh0KGNv
bnN0IE5vZGUmKTsKK1dFQkNPUkVfRVhQT1JUIGJvb2wgaXNPdmVybGF5VGV4dChjb25zdCBOb2Rl
Kik7Cit2b2lkIHJlbW92ZU92ZXJsYXlTb29uSWZOZWVkZWQoSFRNTEVsZW1lbnQmKTsKK0ludFJl
Y3QgY29udGFpbmVyUmVjdChIVE1MRWxlbWVudCYpOworCisjaWYgRU5BQkxFKElNQUdFX0FOQUxZ
U0lTKQorZW51bSBjbGFzcyBDYWNoZVRleHRSZWNvZ25pdGlvblJlc3VsdHMgOiBib29sIHsgTm8s
IFllcyB9OworV0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVXaXRoVGV4dFJlY29nbml0aW9uUmVz
dWx0KEhUTUxFbGVtZW50JiwgY29uc3QgVGV4dFJlY29nbml0aW9uUmVzdWx0JiwgQ2FjaGVUZXh0
UmVjb2duaXRpb25SZXN1bHRzID0gQ2FjaGVUZXh0UmVjb2duaXRpb25SZXN1bHRzOjpZZXMpOwor
I2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIEltYWdlT3ZlcmxheQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggYzY3MTAyMjdkZGQxNGY1MDZk
OGY1MjBjMGU4OTZjYzljZDRlNjlkYi4uYjVlMzQ0Njg4ODZiNzEyNDdkOTgyODE4ZGI4YjlkM2Ey
ZTgyMGYxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtNzQsNiArNzQsNyBAQAog
I2luY2x1ZGUgIkhUTUxTcGFuRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxVTGlzdEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiSW1hZ2VPdmVybGF5Lmgi
CiAjaW5jbHVkZSAiSW5kZW50T3V0ZGVudENvbW1hbmQuaCIKICNpbmNsdWRlICJJbnB1dEV2ZW50
LmgiCiAjaW5jbHVkZSAiSW5zZXJ0TGlzdENvbW1hbmQuaCIKQEAgLTE0MjYsNyArMTQyNyw3IEBA
IHZvaWQgRWRpdG9yOjpwZXJmb3JtQ3V0T3JDb3B5KEVkaXRvckFjdGlvblNwZWNpZmllciBhY3Rp
b24pCiAgICAgICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKHRydWUp
OwogICAgIH0KIAotICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wobV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSB8fCAoc2VsZWN0aW9uICYmIEhUTUxFbGVt
ZW50Ojppc0luc2lkZUltYWdlT3ZlcmxheSgqc2VsZWN0aW9uKSkpCisgICAgaWYgKGVuY2xvc2lu
Z1RleHRGb3JtQ29udHJvbChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCkpIHx8IChzZWxlY3Rpb24gJiYgSW1hZ2VPdmVybGF5Ojppc0luc2lkZU92ZXJsYXkoKnNlbGVj
dGlvbikpKQogICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoUGFnZVBh
c3RlYm9hcmRDb250ZXh0OjpjcmVhdGUobV9kb2N1bWVudC5wYWdlSUQoKSkpLT53cml0ZVBsYWlu
VGV4dChzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUo
KSA/IFBhc3RlYm9hcmQ6OkNhblNtYXJ0UmVwbGFjZSA6IFBhc3RlYm9hcmQ6OkNhbm5vdFNtYXJ0
UmVwbGFjZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBp
bWFnZUVsZW1lbnQ7CkBAIC0zNjc5LDcgKzM2ODAsNyBAQCBzdGF0aWMgVmVjdG9yPFNpbXBsZVJh
bmdlPiBzY2FuRm9yVGVsZXBob25lTnVtYmVycyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiAg
ICAgaWYgKFJlZiBzdGFydE5vZGUgPSByYW5nZS5zdGFydENvbnRhaW5lcigpOyBzdGFydE5vZGUt
Pmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGlmIChIVE1M
RWxlbWVudDo6aXNJbnNpZGVJbWFnZU92ZXJsYXkocmFuZ2UpKQorICAgIGlmIChJbWFnZU92ZXJs
YXk6OmlzSW5zaWRlT3ZlcmxheShyYW5nZSkpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBh
dXRvIHRleHQgPSBwbGFpblRleHQocmFuZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1l
U2VsZWN0aW9uLmNwcAppbmRleCAzMGZjZDMwZjRkZjY1MTFlOTYyYjFiZjFlZTlmZWNmOWMwZGM5
OTYzLi45MWQxY2YyZGY2NTEyZmI1ZWQzNWZkMGRiMGEzYjk3YWU1ZTNkYTk3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtNTIsNiArNTIsNyBAQAogI2lu
Y2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIK
ICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiSW1hZ2VPdmVybGF5LmgiCiAj
aW5jbHVkZSAiSW5saW5lUnVuQW5kT2Zmc2V0LmgiCiAjaW5jbHVkZSAiTGVnYWN5SW5saW5lVGV4
dEJveC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAgLTE5MTcsNyArMTkxOCw3IEBAIGJvb2wg
RnJhbWVTZWxlY3Rpb246OmNvbnRhaW5zKGNvbnN0IExheW91dFBvaW50JiBwb2ludCkgY29uc3QK
ICAgICBpZiAoIWlubmVyTm9kZSB8fCAhaW5uZXJOb2RlLT5yZW5kZXJlcigpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoSFRNTEVsZW1lbnQ6OmlzSW5zaWRlSW1hZ2VPdmVybGF5
KCpyYW5nZSkgJiYgSFRNTEVsZW1lbnQ6OmlzSW5zaWRlSW1hZ2VPdmVybGF5KCppbm5lck5vZGUp
KSB7CisgICAgaWYgKEltYWdlT3ZlcmxheTo6aXNJbnNpZGVPdmVybGF5KCpyYW5nZSkgJiYgSW1h
Z2VPdmVybGF5Ojppc0luc2lkZU92ZXJsYXkoKmlubmVyTm9kZSkpIHsKICAgICAgICAgZm9yIChh
dXRvIHF1YWQgOiBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKCpyYW5nZSwgeyBSZW5k
ZXJPYmplY3Q6OkJvdW5kaW5nUmVjdEJlaGF2aW9yOjpVc2VTZWxlY3Rpb25IZWlnaHQgfSkpIHsK
ICAgICAgICAgICAgIGlmICghcXVhZC5pc0VtcHR5KCkgJiYgcXVhZC5jb250YWluc1BvaW50KHBv
aW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dEl0ZXJhdG9yLmNwcAppbmRleCBlYzZmZjI5NGM4MWJkYmJlNzViZTFiYjhmMzE2NTI5ZDc5
OTQ0N2Q3Li5iOTRkOWJlZTBlYjk4Y2I1ZjhkYTAxZDBlY2UyMTA0NGU1ZTQ3MjhjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCkBAIC00NSw2ICs0NSw3IEBACiAjaW5j
bHVkZSAiSFRNTFNsb3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmgiCisjaW5jbHVkZSAiSW1h
Z2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiTGVnYWN5SW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUg
Ik5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSYW5nZS5oIgpAQCAtNzM3LDcgKzczOCw3IEBA
IGJvb2wgVGV4dEl0ZXJhdG9yOjpoYW5kbGVSZXBsYWNlZEVsZW1lbnQoKQogICAgICAgICB9CiAg
ICAgfQogCi0gICAgaWYgKG1fYmVoYXZpb3JzLmNvbnRhaW5zKFRleHRJdGVyYXRvckJlaGF2aW9y
OjpFbnRlcnNJbWFnZU92ZXJsYXlzKSAmJiBpczxIVE1MRWxlbWVudD4obV9ub2RlKSAmJiBkb3du
Y2FzdDxIVE1MRWxlbWVudD4oKm1fbm9kZSkuaGFzSW1hZ2VPdmVybGF5KCkpIHsKKyAgICBpZiAo
bV9iZWhhdmlvcnMuY29udGFpbnMoVGV4dEl0ZXJhdG9yQmVoYXZpb3I6OkVudGVyc0ltYWdlT3Zl
cmxheXMpICYmIGlzPEhUTUxFbGVtZW50PihtX25vZGUpICYmIEltYWdlT3ZlcmxheTo6aGFzT3Zl
cmxheShkb3duY2FzdDxIVE1MRWxlbWVudD4oKm1fbm9kZSkpKSB7CiAgICAgICAgIGlmIChSZWZQ
dHIgc2hhZG93Um9vdCA9IG1fbm9kZS0+c2hhZG93Um9vdCgpKSB7CiAgICAgICAgICAgICBtX25v
ZGUgPSBzaGFkb3dSb290LmdldCgpOwogICAgICAgICAgICAgcHVzaEZ1bGx5Q2xpcHBlZFN0YXRl
KG1fZnVsbHlDbGlwcGVkU3RhY2ssICptX25vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50
LmNwcAppbmRleCAxNWE0MmJlY2Y0OTA0ZGUxYjgzN2E4ZmI3ZTJkYjRjZjk0YzBhNWIyLi4xODBi
OTMwNGU5ZDRlZmFhZTQyZTVkM2UzNzY3MDFmMGI3ZjFjYThlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxFbGVtZW50LmNwcApAQCAtNDMsMTEgKzQzLDkgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAi
R2VvbWV0cnlVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJIVE1MQkRJRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxCUkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MQnV0dG9uRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIkhUTUxEaXZFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTEVsZW1lbnRGYWN0b3J5LmgiCiAjaW5jbHVkZSAiSFRNTEZpZWxkU2V0RWxlbWVu
dC5oIgpAQCAtNTksMTMgKzU3LDEyIEBACiAjaW5jbHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1l
bnQuaCIKLSNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRB
cmVhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmgiCisj
aW5jbHVkZSAiSW1hZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiTWVkaWFDb250cm9sc0hvc3QuaCIK
ICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgot
I2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgog
I2luY2x1ZGUgIlNjcmlwdERpc2FsbG93ZWRTY29wZS5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3Qu
aCIKQEAgLTgyLDE4ICs3OSwxMCBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLSNpZiBFTkFCTEUoSU1BR0VfQU5B
TFlTSVMpCi0jaW5jbHVkZSAiVGV4dFJlY29nbml0aW9uUmVzdWx0LmgiCi0jZW5kaWYKLQogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW5jbHVkZSAiU2VsZWN0aW9uR2VvbWV0cnkuaCIKICNl
bmRpZgogCi0jaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQotI2luY2x1ZGUgIkRhdGFEZXRlY3Rp
b24uaCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExP
Q0FURURfSU1QTChIVE1MRWxlbWVudCk7CkBAIC0xMjUyLDQxNyArMTI0MSwxOSBAQCB2b2lkIEhU
TUxFbGVtZW50OjpzZXRFbnRlcktleUhpbnQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICBzZXRB
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGVudGVya2V5aGludEF0dHIsIHZhbHVlKTsK
IH0KIAotLy8gRklYTUU6IFdlIHNob3VsZCBtb3ZlIGFsbCBvZiB0aGlzIGltYWdlIG92ZXJsYXkt
c3BlY2lmaWMgbG9naWMgb3V0IGludG8gYSBzZXBhcmF0ZSBoZWxwZXIgZmlsZSAocG9zc2libHkg
YXMgc3RhbmRhbG9uZSBmdW5jdGlvbnMpCi0vLyB0byBiZXR0ZXIgY29tcGFydG1lbnRhbGl6ZSB0
aGlzIGNvZGUuCi0KLXN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBpbWFnZU92ZXJsYXlFbGVtZW50
SWRlbnRpZmllcigpCi17Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25z
dCBBdG9tU3RyaW5nPiBpZGVudGlmaWVyKCJpbWFnZS1vdmVybGF5IiwgQXRvbVN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHJldHVybiBpZGVudGlmaWVyOwotfQotCi1zdGF0aWMg
Y29uc3QgQXRvbVN0cmluZyYgaW1hZ2VPdmVybGF5RGF0YURldGVjdG9yQ2xhc3NOYW1lKCkKLXsK
LSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGNs
YXNzTmFtZSgiaW1hZ2Utb3ZlcmxheS1kYXRhLWRldGVjdG9yLXJlc3VsdCIsIEF0b21TdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICByZXR1cm4gY2xhc3NOYW1lOwotfQotCiBib29s
IEhUTUxFbGVtZW50OjpzaG91bGRFeHRlbmRTZWxlY3Rpb25Ub1RhcmdldE5vZGUoY29uc3QgTm9k
ZSYgdGFyZ2V0Tm9kZSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQmVmb3JlVXBk
YXRlKQogewotICAgIGlmIChhdXRvIHJhbmdlID0gc2VsZWN0aW9uQmVmb3JlVXBkYXRlLnJhbmdl
KCk7IHJhbmdlICYmIGlzSW5zaWRlSW1hZ2VPdmVybGF5KCpyYW5nZSkpCi0gICAgICAgIHJldHVy
biBpc0ltYWdlT3ZlcmxheVRleHQodGFyZ2V0Tm9kZSk7CisgICAgaWYgKGF1dG8gcmFuZ2UgPSBz
ZWxlY3Rpb25CZWZvcmVVcGRhdGUucmFuZ2UoKTsgcmFuZ2UgJiYgSW1hZ2VPdmVybGF5Ojppc0lu
c2lkZU92ZXJsYXkoKnJhbmdlKSkKKyAgICAgICAgcmV0dXJuIEltYWdlT3ZlcmxheTo6aXNPdmVy
bGF5VGV4dCh0YXJnZXROb2RlKTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEhUTUxF
bGVtZW50OjpoYXNJbWFnZU92ZXJsYXkoKSBjb25zdAotewotICAgIGF1dG8gc2hhZG93Um9vdCA9
IHRoaXMtPnNoYWRvd1Jvb3QoKTsKLSAgICBpZiAoTElLRUxZKCFzaGFkb3dSb290IHx8IHNoYWRv
d1Jvb3QtPm1vZGUoKSAhPSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmhhc0VsZW1lbnRXaXRoSWQoKmlt
YWdlT3ZlcmxheUVsZW1lbnRJZGVudGlmaWVyKCkuaW1wbCgpKTsKLX0KLQotc3RhdGljIFJlZlB0
cjxIVE1MRWxlbWVudD4gaW1hZ2VPdmVybGF5SG9zdChjb25zdCBOb2RlJiBub2RlKQotewotICAg
IGF1dG8gaG9zdCA9IG5vZGUuc2hhZG93SG9zdCgpOwotICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+
KGhvc3QpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlZlB0ciBlbGVtZW50IHsg
JmRvd25jYXN0PEhUTUxFbGVtZW50PigqaG9zdCkgfTsKLSAgICByZXR1cm4gZWxlbWVudC0+aGFz
SW1hZ2VPdmVybGF5KCkgPyBlbGVtZW50IDogbnVsbHB0cjsKLX0KLQotYm9vbCBIVE1MRWxlbWVu
dDo6aXNJbWFnZU92ZXJsYXlEYXRhRGV0ZWN0b3JSZXN1bHQoKSBjb25zdAotewotICAgIHJldHVy
biBpbWFnZU92ZXJsYXlIb3N0KCp0aGlzKSAmJiBoYXNDbGFzcygpICYmIGNsYXNzTmFtZXMoKS5j
b250YWlucyhpbWFnZU92ZXJsYXlEYXRhRGV0ZWN0b3JDbGFzc05hbWUoKSk7Ci19Ci0KLWJvb2wg
SFRNTEVsZW1lbnQ6OmlzSW5zaWRlSW1hZ2VPdmVybGF5KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5n
ZSkKLXsKLSAgICBSZWZQdHIgY29tbW9uQW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNlc3Rv
cjxDb21wb3NlZFRyZWU+KHJhbmdlKTsKLSAgICBpZiAoIWNvbW1vbkFuY2VzdG9yKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gaXNJbnNpZGVJbWFnZU92ZXJsYXkoKmNvbW1v
bkFuY2VzdG9yKTsKLX0KLQotYm9vbCBIVE1MRWxlbWVudDo6aXNJbnNpZGVJbWFnZU92ZXJsYXko
Y29uc3QgTm9kZSYgbm9kZSkKLXsKLSAgICBhdXRvIGhvc3QgPSBpbWFnZU92ZXJsYXlIb3N0KG5v
ZGUpOwotICAgIGlmICghaG9zdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
IGhvc3QtPnVzZXJBZ2VudFNoYWRvd1Jvb3QoKS0+Y29udGFpbnMobm9kZSk7Ci19Ci0KLWJvb2wg
SFRNTEVsZW1lbnQ6OmlzSW1hZ2VPdmVybGF5VGV4dChjb25zdCBOb2RlKiBub2RlKQotewotICAg
IHJldHVybiBub2RlICYmIGlzSW1hZ2VPdmVybGF5VGV4dCgqbm9kZSk7Ci19Ci0KLWJvb2wgSFRN
TEVsZW1lbnQ6OmlzSW1hZ2VPdmVybGF5VGV4dChjb25zdCBOb2RlJiBub2RlKQotewotICAgIGF1
dG8gaG9zdCA9IGltYWdlT3ZlcmxheUhvc3Qobm9kZSk7Ci0gICAgaWYgKCFob3N0KQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoUmVmUHRyIG92ZXJsYXkgPSBzdGF0aWNfY2FzdDxU
cmVlU2NvcGUmPigqaG9zdC0+dXNlckFnZW50U2hhZG93Um9vdCgpKS5nZXRFbGVtZW50QnlJZChp
bWFnZU92ZXJsYXlFbGVtZW50SWRlbnRpZmllcigpKSkKLSAgICAgICAgcmV0dXJuIG5vZGUuaXNE
ZXNjZW5kYW50T2YoKm92ZXJsYXkpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEhU
TUxFbGVtZW50OjpyZW1vdmVJbWFnZU92ZXJsYXlTb29uSWZOZWVkZWQoKQotewotICAgIGlmICgh
aGFzSW1hZ2VPdmVybGF5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRvY3VtZW50KCkuZXZl
bnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6OkludGVybmFsQXN5bmNUYXNrLCBbd2Vha1Ro
aXMgPSBXZWFrUHRyIHsgKnRoaXMgfV0gewotICAgICAgICBSZWZQdHIgcHJvdGVjdGVkVGhpcyA9
IHdlYWtUaGlzLmdldCgpOwotICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgUmVmUHRyIHNoYWRvd1Jvb3QgPSBwcm90ZWN0ZWRUaGlzLT51
c2VyQWdlbnRTaGFkb3dSb290KCk7Ci0gICAgICAgIGlmICghc2hhZG93Um9vdCkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBpZiAoUmVmUHRyIG92ZXJsYXkgPSBzdGF0aWNfY2FzdDxU
cmVlU2NvcGUmPigqc2hhZG93Um9vdCkuZ2V0RWxlbWVudEJ5SWQoaW1hZ2VPdmVybGF5RWxlbWVu
dElkZW50aWZpZXIoKSkpCi0gICAgICAgICAgICBvdmVybGF5LT5yZW1vdmUoKTsKLQotI2lmIEVO
QUJMRShJTUFHRV9BTkFMWVNJUykKLSAgICAgICAgaWYgKGF1dG8gcGFnZSA9IHByb3RlY3RlZFRo
aXMtPmRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICAgICAgcGFnZS0+cmVzZXRUZXh0UmVjb2du
aXRpb25SZXN1bHQoKnByb3RlY3RlZFRoaXMpOwotI2VuZGlmCi0gICAgfSk7Ci19Ci0KLSNpZiBF
TkFCTEUoSU1BR0VfQU5BTFlTSVMpCi0KLUludFJlY3QgSFRNTEVsZW1lbnQ6OmNvbnRhaW5lclJl
Y3RGb3JUZXh0UmVjb2duaXRpb24oKQotewotICAgIGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+cmVu
ZGVyZXIoKTsKLSAgICBpZiAoIWlzPFJlbmRlckltYWdlPihyZW5kZXJlcikpCi0gICAgICAgIHJl
dHVybiB7IH07Ci0KLSAgICBpZiAoIXJlbmRlcmVyLT5vcGFjaXR5KCkpCi0gICAgICAgIHJldHVy
biB7IDAsIDAsIG9mZnNldFdpZHRoKCksIG9mZnNldEhlaWdodCgpIH07Ci0KLSAgICByZXR1cm4g
ZW5jbG9zaW5nSW50UmVjdChkb3duY2FzdDxSZW5kZXJJbWFnZT4oKnJlbmRlcmVyKS5yZXBsYWNl
ZENvbnRlbnRSZWN0KCkpOwotfQotCi12b2lkIEhUTUxFbGVtZW50Ojp1cGRhdGVXaXRoVGV4dFJl
Y29nbml0aW9uUmVzdWx0KGNvbnN0IFRleHRSZWNvZ25pdGlvblJlc3VsdCYgcmVzdWx0LCBDYWNo
ZVRleHRSZWNvZ25pdGlvblJlc3VsdHMgY2FjaGVUZXh0UmVjb2duaXRpb25SZXN1bHRzKQotewot
ICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gaW1h
Z2VPdmVybGF5TGluZUNsYXNzKCJpbWFnZS1vdmVybGF5LWxpbmUiLCBBdG9tU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxj
b25zdCBBdG9tU3RyaW5nPiBpbWFnZU92ZXJsYXlUZXh0Q2xhc3MoImltYWdlLW92ZXJsYXktdGV4
dCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLQotICAgIHN0cnVjdCBUZXh0
UmVjb2duaXRpb25MaW5lRWxlbWVudHMgewotICAgICAgICBSZWY8SFRNTERpdkVsZW1lbnQ+IGxp
bmU7Ci0gICAgICAgIFZlY3RvcjxSZWY8SFRNTEVsZW1lbnQ+PiBjaGlsZHJlbjsKLSAgICB9Owot
Ci0gICAgc3RydWN0IFRleHRSZWNvZ25pdGlvbkVsZW1lbnRzIHsKLSAgICAgICAgUmVmUHRyPEhU
TUxEaXZFbGVtZW50PiByb290OwotICAgICAgICBWZWN0b3I8VGV4dFJlY29nbml0aW9uTGluZUVs
ZW1lbnRzPiBsaW5lczsKLSAgICAgICAgVmVjdG9yPFJlZjxIVE1MRGl2RWxlbWVudD4+IGRhdGFE
ZXRlY3RvcnM7Ci0gICAgfTsKLQotICAgIGJvb2wgaGFkRXhpc3RpbmdUZXh0UmVjb2duaXRpb25F
bGVtZW50cyA9IGZhbHNlOwotICAgIFRleHRSZWNvZ25pdGlvbkVsZW1lbnRzIHRleHRSZWNvZ25p
dGlvbkVsZW1lbnRzOwotICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbWVkaWFDb250cm9sc0NvbnRh
aW5lcjsKLSAgICBpZiAoUmVmUHRyIHNoYWRvd1Jvb3QgPSB0aGlzLT5zaGFkb3dSb290KCkpIHsK
LSNpZiBFTkFCTEUoTU9ERVJOX01FRElBX0NPTlRST0xTKQotICAgICAgICBpZiAoaXM8SFRNTE1l
ZGlhRWxlbWVudD4oKnRoaXMpKSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyIGNvbnRyb2xzSG9z
dCA9IGRvd25jYXN0PEhUTUxNZWRpYUVsZW1lbnQ+KCp0aGlzKS5tZWRpYUNvbnRyb2xzSG9zdCgp
KSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgY29udGFpbmVyQ2xhc3MgPSBjb250cm9sc0hvc3Qt
Pm1lZGlhQ29udHJvbHNDb250YWluZXJDbGFzc05hbWUoKTsKLSAgICAgICAgICAgICAgICBmb3Ig
KGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8SFRNTERpdkVsZW1lbnQ+KCpzaGFkb3dSb290
KSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuaGFzQ2xhc3MoKSAmJiBjaGlsZC5j
bGFzc05hbWVzKCkuY29udGFpbnMoY29udGFpbmVyQ2xhc3MpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBtZWRpYUNvbnRyb2xzQ29udGFpbmVyID0gJmNoaWxkOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBpZiAoaGFzSW1hZ2VP
dmVybGF5KCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBjb250YWluZXJG
b3JJbWFnZU92ZXJsYXk7Ci0gICAgICAgICAgICBpZiAobWVkaWFDb250cm9sc0NvbnRhaW5lcikK
LSAgICAgICAgICAgICAgICBjb250YWluZXJGb3JJbWFnZU92ZXJsYXkgPSBtZWRpYUNvbnRyb2xz
Q29udGFpbmVyOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRhaW5lckZv
ckltYWdlT3ZlcmxheSA9IHNoYWRvd1Jvb3Q7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNoaWxk
IDogY2hpbGRyZW5PZlR5cGU8SFRNTERpdkVsZW1lbnQ+KCpjb250YWluZXJGb3JJbWFnZU92ZXJs
YXkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxkLmdldElkQXR0cmlidXRlKCkgPT0gaW1h
Z2VPdmVybGF5RWxlbWVudElkZW50aWZpZXIoKSkgewotICAgICAgICAgICAgICAgICAgICB0ZXh0
UmVjb2duaXRpb25FbGVtZW50cy5yb290ID0gJmNoaWxkOwotICAgICAgICAgICAgICAgICAgICBo
YWRFeGlzdGluZ1RleHRSZWNvZ25pdGlvbkVsZW1lbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKHRleHRSZWNvZ25pdGlvbkVsZW1lbnRzLnJvb3QpIHsKLSAg
ICAgICAgZm9yIChhdXRvJiBsaW5lT3JEYXRhRGV0ZWN0b3IgOiBjaGlsZHJlbk9mVHlwZTxIVE1M
RGl2RWxlbWVudD4oKnRleHRSZWNvZ25pdGlvbkVsZW1lbnRzLnJvb3QpKSB7Ci0gICAgICAgICAg
ICBpZiAoIWxpbmVPckRhdGFEZXRlY3Rvci5oYXNDbGFzcygpKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgICAgICBpZiAobGluZU9yRGF0YURldGVjdG9yLmNsYXNzTGlzdCgp
LmNvbnRhaW5zKGltYWdlT3ZlcmxheUxpbmVDbGFzcykpIHsKLSAgICAgICAgICAgICAgICBUZXh0
UmVjb2duaXRpb25MaW5lRWxlbWVudHMgbGluZUVsZW1lbnRzIHsgbGluZU9yRGF0YURldGVjdG9y
LCB7IH0gfTsKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHRleHQgOiBjaGlsZHJlbk9mVHlw
ZTxIVE1MRGl2RWxlbWVudD4obGluZU9yRGF0YURldGVjdG9yKSkKLSAgICAgICAgICAgICAgICAg
ICAgbGluZUVsZW1lbnRzLmNoaWxkcmVuLmFwcGVuZCh0ZXh0KTsKLSAgICAgICAgICAgICAgICB0
ZXh0UmVjb2duaXRpb25FbGVtZW50cy5saW5lcy5hcHBlbmQoV1RGTW92ZShsaW5lRWxlbWVudHMp
KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGluZU9yRGF0YURldGVjdG9yLmNsYXNzTGlzdCgp
LmNvbnRhaW5zKGltYWdlT3ZlcmxheURhdGFEZXRlY3RvckNsYXNzTmFtZSgpKSkKLSAgICAgICAg
ICAgICAgICB0ZXh0UmVjb2duaXRpb25FbGVtZW50cy5kYXRhRGV0ZWN0b3JzLmFwcGVuZChsaW5l
T3JEYXRhRGV0ZWN0b3IpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBjYW5Vc2VFeGlzdGlu
Z1RleHRSZWNvZ25pdGlvbkVsZW1lbnRzID0gKFsmXSB7Ci0gICAgICAgICAgICBpZiAocmVzdWx0
LmRhdGFEZXRlY3RvcnMuc2l6ZSgpICE9IHRleHRSZWNvZ25pdGlvbkVsZW1lbnRzLmRhdGFEZXRl
Y3RvcnMuc2l6ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAg
ICAgaWYgKHJlc3VsdC5saW5lcy5zaXplKCkgIT0gdGV4dFJlY29nbml0aW9uRWxlbWVudHMubGlu
ZXMuc2l6ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAg
Zm9yIChzaXplX3QgbGluZUluZGV4ID0gMDsgbGluZUluZGV4IDwgcmVzdWx0LmxpbmVzLnNpemUo
KTsgKytsaW5lSW5kZXgpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBjaGlsZFJlc3VsdHMgPSBy
ZXN1bHQubGluZXNbbGluZUluZGV4XS5jaGlsZHJlbjsKLSAgICAgICAgICAgICAgICBhdXRvJiBj
aGlsZFRleHRFbGVtZW50cyA9IHRleHRSZWNvZ25pdGlvbkVsZW1lbnRzLmxpbmVzW2xpbmVJbmRl
eF0uY2hpbGRyZW47Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxkUmVzdWx0cy5zaXplKCkgIT0g
Y2hpbGRUZXh0RWxlbWVudHMuc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBjaGlsZEluZGV4ID0gMDsgY2hpbGRJ
bmRleCA8IGNoaWxkUmVzdWx0cy5zaXplKCk7ICsrY2hpbGRJbmRleCkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoY2hpbGRSZXN1bHRzW2NoaWxkSW5kZXhdLnRleHQgIT0gY2hpbGRUZXh0RWxl
bWVudHNbY2hpbGRJbmRleF0tPnRleHRDb250ZW50KCkuc3RyaXBXaGl0ZVNwYWNlKCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfSkoKTsKLQot
ICAgICAgICBpZiAoIWNhblVzZUV4aXN0aW5nVGV4dFJlY29nbml0aW9uRWxlbWVudHMpIHsKLSAg
ICAgICAgICAgIHRleHRSZWNvZ25pdGlvbkVsZW1lbnRzLnJvb3QtPnJlbW92ZSgpOwotICAgICAg
ICAgICAgdGV4dFJlY29nbml0aW9uRWxlbWVudHMgPSB7IH07Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAocmVzdWx0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmIHNo
YWRvd1Jvb3QgPSBlbnN1cmVVc2VyQWdlbnRTaGFkb3dSb290KCk7Ci0gICAgaWYgKCF0ZXh0UmVj
b2duaXRpb25FbGVtZW50cy5yb290KSB7Ci0gICAgICAgIGF1dG8gcm9vdENvbnRhaW5lciA9IEhU
TUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7Ci0gICAgICAgIHJvb3RDb250YWluZXIt
PnNldElkQXR0cmlidXRlKGltYWdlT3ZlcmxheUVsZW1lbnRJZGVudGlmaWVyKCkpOwotICAgICAg
ICBpZiAoZG9jdW1lbnQoKS5pc0ltYWdlRG9jdW1lbnQoKSkKLSAgICAgICAgICAgIHJvb3RDb250
YWluZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRVc2VyU2VsZWN0
LCBDU1NWYWx1ZVRleHQpOwotCi0gICAgICAgIGlmIChtZWRpYUNvbnRyb2xzQ29udGFpbmVyKQot
ICAgICAgICAgICAgbWVkaWFDb250cm9sc0NvbnRhaW5lci0+YXBwZW5kQ2hpbGQocm9vdENvbnRh
aW5lcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNoYWRvd1Jvb3QtPmFwcGVuZENoaWxk
KHJvb3RDb250YWluZXIpOwotICAgICAgICB0ZXh0UmVjb2duaXRpb25FbGVtZW50cy5yb290ID0g
cm9vdENvbnRhaW5lci5jb3B5UmVmKCk7Ci0gICAgICAgIHRleHRSZWNvZ25pdGlvbkVsZW1lbnRz
LmxpbmVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocmVzdWx0LmxpbmVzLnNpemUoKSk7Ci0gICAg
ICAgIGZvciAoYXV0byYgbGluZSA6IHJlc3VsdC5saW5lcykgewotICAgICAgICAgICAgYXV0byBs
aW5lQ29udGFpbmVyID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKLSAgICAg
ICAgICAgIGxpbmVDb250YWluZXItPmNsYXNzTGlzdCgpLmFkZChpbWFnZU92ZXJsYXlMaW5lQ2xh
c3MpOwotICAgICAgICAgICAgcm9vdENvbnRhaW5lci0+YXBwZW5kQ2hpbGQobGluZUNvbnRhaW5l
cik7Ci0gICAgICAgICAgICBUZXh0UmVjb2duaXRpb25MaW5lRWxlbWVudHMgbGluZUVsZW1lbnRz
IHsgbGluZUNvbnRhaW5lciwgeyB9IH07Ci0gICAgICAgICAgICBsaW5lRWxlbWVudHMuY2hpbGRy
ZW4ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsaW5lLmNoaWxkcmVuLnNpemUoKSk7Ci0gICAgICAg
ICAgICBmb3IgKHNpemVfdCBjaGlsZEluZGV4ID0gMDsgY2hpbGRJbmRleCA8IGxpbmUuY2hpbGRy
ZW4uc2l6ZSgpOyArK2NoaWxkSW5kZXgpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBjaGlsZCA9
IGxpbmUuY2hpbGRyZW5bY2hpbGRJbmRleF07Ci0gICAgICAgICAgICAgICAgYXV0byB0ZXh0Q29u
dGFpbmVyID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKLSAgICAgICAgICAg
ICAgICB0ZXh0Q29udGFpbmVyLT5jbGFzc0xpc3QoKS5hZGQoaW1hZ2VPdmVybGF5VGV4dENsYXNz
KTsKLSAgICAgICAgICAgICAgICBsaW5lQ29udGFpbmVyLT5hcHBlbmRDaGlsZCh0ZXh0Q29udGFp
bmVyKTsKLSAgICAgICAgICAgICAgICB0ZXh0Q29udGFpbmVyLT5hcHBlbmRDaGlsZChUZXh0Ojpj
cmVhdGUoZG9jdW1lbnQoKSwgY2hpbGQuaGFzTGVhZGluZ1doaXRlc3BhY2UgPyBtYWtlU3RyaW5n
KCdcbicsIGNoaWxkLnRleHQpIDogY2hpbGQudGV4dCkpOwotICAgICAgICAgICAgICAgIGxpbmVF
bGVtZW50cy5jaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSh0ZXh0Q29udGFpbmVyKSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGxpbmVDb250YWluZXItPmFwcGVuZENoaWxk
KEhUTUxCUkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7Ci0gICAgICAgICAgICB0ZXh0UmVj
b2duaXRpb25FbGVtZW50cy5saW5lcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShsaW5lRWxlbWVu
dHMpKTsKLSAgICAgICAgfQotCi0jaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQotICAgICAgICB0
ZXh0UmVjb2duaXRpb25FbGVtZW50cy5kYXRhRGV0ZWN0b3JzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkocmVzdWx0LmRhdGFEZXRlY3RvcnMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBkYXRh
RGV0ZWN0b3IgOiByZXN1bHQuZGF0YURldGVjdG9ycykgewotICAgICAgICAgICAgYXV0byBkYXRh
RGV0ZWN0b3JDb250YWluZXIgPSBEYXRhRGV0ZWN0aW9uOjpjcmVhdGVFbGVtZW50Rm9ySW1hZ2VP
dmVybGF5KGRvY3VtZW50KCksIGRhdGFEZXRlY3Rvcik7Ci0gICAgICAgICAgICBkYXRhRGV0ZWN0
b3JDb250YWluZXItPmNsYXNzTGlzdCgpLmFkZChpbWFnZU92ZXJsYXlEYXRhRGV0ZWN0b3JDbGFz
c05hbWUoKSk7Ci0gICAgICAgICAgICByb290Q29udGFpbmVyLT5hcHBlbmRDaGlsZChkYXRhRGV0
ZWN0b3JDb250YWluZXIpOwotICAgICAgICAgICAgdGV4dFJlY29nbml0aW9uRWxlbWVudHMuZGF0
YURldGVjdG9ycy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShkYXRhRGV0ZWN0b3JDb250YWluZXIp
KTsKLSAgICAgICAgfQotI2VuZGlmIC8vIEVOQUJMRShEQVRBX0RFVEVDVElPTikKLQotICAgICAg
ICBpZiAoZG9jdW1lbnQoKS5xdWlya3MoKS5uZWVkc1RvRm9yY2VVc2VyU2VsZWN0V2hlbkluc3Rh
bGxpbmdJbWFnZU92ZXJsYXkoKSkKLSAgICAgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlXZWJraXRVc2VyU2VsZWN0LCBDU1NWYWx1ZVRleHQpOwotICAgIH0KLQotICAg
IGlmICghaGFkRXhpc3RpbmdUZXh0UmVjb2duaXRpb25FbGVtZW50cykgewotICAgICAgICBzdGF0
aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gc2hhZG93U3R5bGUoU3Ry
aW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoaW1hZ2VPdmVybGF5VXNlckFnZW50U3R5bGVT
aGVldCwgc2l6ZW9mKGltYWdlT3ZlcmxheVVzZXJBZ2VudFN0eWxlU2hlZXQpKSk7Ci0gICAgICAg
IGF1dG8gc3R5bGUgPSBIVE1MU3R5bGVFbGVtZW50OjpjcmVhdGUoSFRNTE5hbWVzOjpzdHlsZVRh
ZywgZG9jdW1lbnQoKSwgZmFsc2UpOwotICAgICAgICBzdHlsZS0+c2V0VGV4dENvbnRlbnQoc2hh
ZG93U3R5bGUpOwotICAgICAgICBzaGFkb3dSb290LT5hcHBlbmRDaGlsZChXVEZNb3ZlKHN0eWxl
KSk7Ci0gICAgfQotCi0gICAgZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5
bGVzaGVldHMoKTsKLQotICAgIGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKLSAg
ICBpZiAoIWlzPFJlbmRlckltYWdlPihyZW5kZXJlcikpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGRvd25jYXN0PFJlbmRlckltYWdlPigqcmVuZGVyZXIpLnNldEhhc0ltYWdlT3ZlcmxheSgpOwot
Ci0gICAgYXV0byBjb250YWluZXJSZWN0ID0gY29udGFpbmVyUmVjdEZvclRleHRSZWNvZ25pdGlv
bigpOwotICAgIGF1dG8gY29udmVydFRvQ29udGFpbmVyQ29vcmRpbmF0ZXMgPSBbJl0oY29uc3Qg
RmxvYXRRdWFkJiBub3JtYWxpemVkUXVhZCkgewotICAgICAgICBhdXRvIHF1YWQgPSBub3JtYWxp
emVkUXVhZDsKLSAgICAgICAgcXVhZC5zY2FsZShjb250YWluZXJSZWN0LndpZHRoKCksIGNvbnRh
aW5lclJlY3QuaGVpZ2h0KCkpOwotICAgICAgICBxdWFkLm1vdmUoY29udGFpbmVyUmVjdC54KCks
IGNvbnRhaW5lclJlY3QueSgpKTsKLSAgICAgICAgcmV0dXJuIHF1YWQ7Ci0gICAgfTsKLQotICAg
IGJvb2wgYXBwbHlVc2VyU2VsZWN0QWxsID0gZG9jdW1lbnQoKS5pc0ltYWdlRG9jdW1lbnQoKSB8
fCByZW5kZXJlci0+c3R5bGUoKS51c2VyU2VsZWN0KCkgIT0gVXNlclNlbGVjdDo6Tm9uZTsKLSAg
ICBmb3IgKHNpemVfdCBsaW5lSW5kZXggPSAwOyBsaW5lSW5kZXggPCByZXN1bHQubGluZXMuc2l6
ZSgpOyArK2xpbmVJbmRleCkgewotICAgICAgICBhdXRvJiBsaW5lRWxlbWVudHMgPSB0ZXh0UmVj
b2duaXRpb25FbGVtZW50cy5saW5lc1tsaW5lSW5kZXhdOwotICAgICAgICBhdXRvJiBsaW5lQ29u
dGFpbmVyID0gbGluZUVsZW1lbnRzLmxpbmU7Ci0gICAgICAgIGF1dG8mIGxpbmUgPSByZXN1bHQu
bGluZXNbbGluZUluZGV4XTsKLSAgICAgICAgYXV0byBsaW5lUXVhZCA9IGNvbnZlcnRUb0NvbnRh
aW5lckNvb3JkaW5hdGVzKGxpbmUubm9ybWFsaXplZFF1YWQpOwotICAgICAgICBpZiAobGluZVF1
YWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byBsaW5l
Qm91bmRzID0gcm90YXRlZEJvdW5kaW5nUmVjdFdpdGhNaW5pbXVtQW5nbGVPZlJvdGF0aW9uKGxp
bmVRdWFkLCAwLjAxKTsKLSAgICAgICAgbGluZUNvbnRhaW5lci0+c2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCBsaW5lQm91bmRzLnNpemUud2lkdGgoKSwgQ1NTVW5pdFR5
cGU6OkNTU19QWCk7Ci0gICAgICAgIGxpbmVDb250YWluZXItPnNldElubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlIZWlnaHQsIGxpbmVCb3VuZHMuc2l6ZS5oZWlnaHQoKSwgQ1NTVW5pdFR5
cGU6OkNTU19QWCk7Ci0gICAgICAgIGxpbmVDb250YWluZXItPnNldElubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlUcmFuc2Zvcm0sIG1ha2VTdHJpbmcoCi0gICAgICAgICAgICAidHJhbnNs
YXRlKCJfcywKLSAgICAgICAgICAgIHN0ZDo6cm91bmQobGluZUJvdW5kcy5jZW50ZXIueCgpIC0g
KGxpbmVCb3VuZHMuc2l6ZS53aWR0aCgpIC8gMikpLCAicHgsICJfcywKLSAgICAgICAgICAgIHN0
ZDo6cm91bmQobGluZUJvdW5kcy5jZW50ZXIueSgpIC0gKGxpbmVCb3VuZHMuc2l6ZS5oZWlnaHQo
KSAvIDIpKSwgInB4KSAiX3MsCi0gICAgICAgICAgICBsaW5lQm91bmRzLmFuZ2xlSW5SYWRpYW5z
ID8gbWFrZVN0cmluZygicm90YXRlKCJfcywgbGluZUJvdW5kcy5hbmdsZUluUmFkaWFucywgInJh
ZCkgIl9zKSA6IGVtcHR5U3RyaW5nKCkKLSAgICAgICAgKSk7Ci0KLSAgICAgICAgYXV0byBvZmZz
ZXRBbG9uZ0hvcml6b250YWxBeGlzID0gWyZdKGNvbnN0IEZsb2F0UG9pbnQmIHF1YWRQb2ludDEs
IGNvbnN0IEZsb2F0UG9pbnQmIHF1YWRQb2ludDIpIHsKLSAgICAgICAgICAgIGF1dG8gaW50ZXJ2
YWxMZW5ndGggPSBsaW5lQm91bmRzLnNpemUud2lkdGgoKTsKLSAgICAgICAgICAgIGF1dG8gbWlk
ID0gbWlkUG9pbnQocXVhZFBvaW50MSwgcXVhZFBvaW50Mik7Ci0gICAgICAgICAgICBtaWQubW92
ZUJ5KC1saW5lQm91bmRzLmNlbnRlcik7Ci0gICAgICAgICAgICBtaWQucm90YXRlKC1saW5lQm91
bmRzLmFuZ2xlSW5SYWRpYW5zKTsKLSAgICAgICAgICAgIHJldHVybiBpbnRlcnZhbExlbmd0aCAq
IGNsYW1wVG88ZmxvYXQ+KDAuNSArIG1pZC54KCkgLyBpbnRlcnZhbExlbmd0aCwgMCwgMSk7Ci0g
ICAgICAgIH07Ci0KLSAgICAgICAgYXV0byBvZmZzZXRzQWxvbmdIb3Jpem9udGFsQXhpcyA9IGxp
bmUuY2hpbGRyZW4ubWFwKFsmXShhdXRvJiBjaGlsZCkgLT4gV1RGOjpSYW5nZTxmbG9hdD4gewot
ICAgICAgICAgICAgYXV0byB0ZXh0UXVhZCA9IGNvbnZlcnRUb0NvbnRhaW5lckNvb3JkaW5hdGVz
KGNoaWxkLm5vcm1hbGl6ZWRRdWFkKTsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAg
ICAgICAgb2Zmc2V0QWxvbmdIb3Jpem9udGFsQXhpcyh0ZXh0UXVhZC5wMSgpLCB0ZXh0UXVhZC5w
NCgpKSwKLSAgICAgICAgICAgICAgICBvZmZzZXRBbG9uZ0hvcml6b250YWxBeGlzKHRleHRRdWFk
LnAyKCksIHRleHRRdWFkLnAzKCkpCi0gICAgICAgICAgICB9OwotICAgICAgICB9KTsKLQotICAg
ICAgICBmb3IgKHNpemVfdCBjaGlsZEluZGV4ID0gMDsgY2hpbGRJbmRleCA8IGxpbmUuY2hpbGRy
ZW4uc2l6ZSgpOyArK2NoaWxkSW5kZXgpIHsKLSAgICAgICAgICAgIGF1dG8mIHRleHRDb250YWlu
ZXIgPSBsaW5lRWxlbWVudHMuY2hpbGRyZW5bY2hpbGRJbmRleF07Ci0gICAgICAgICAgICBib29s
IGxpbmVIYXNPbmVDaGlsZCA9IGxpbmUuY2hpbGRyZW4uc2l6ZSgpID09IDE7Ci0gICAgICAgICAg
ICBmbG9hdCBob3Jpem9udGFsTWFyZ2luVG9NaW5pbWl6ZVNlbGVjdGlvbkdhcHMgPSBsaW5lSGFz
T25lQ2hpbGQgPyAwIDogMC4xMjU7Ci0gICAgICAgICAgICBmbG9hdCBob3Jpem9udGFsT2Zmc2V0
ID0gbGluZUhhc09uZUNoaWxkID8gMCA6IC1ob3Jpem9udGFsTWFyZ2luVG9NaW5pbWl6ZVNlbGVj
dGlvbkdhcHM7Ci0gICAgICAgICAgICBmbG9hdCBob3Jpem9udGFsRXh0ZW50ID0gbGluZUhhc09u
ZUNoaWxkID8gMCA6IGhvcml6b250YWxNYXJnaW5Ub01pbmltaXplU2VsZWN0aW9uR2FwczsKLQot
ICAgICAgICAgICAgaWYgKGxpbmVIYXNPbmVDaGlsZCkgewotICAgICAgICAgICAgICAgIGhvcml6
b250YWxPZmZzZXQgKz0gb2Zmc2V0c0Fsb25nSG9yaXpvbnRhbEF4aXNbY2hpbGRJbmRleF0uYmVn
aW4oKTsKLSAgICAgICAgICAgICAgICBob3Jpem9udGFsRXh0ZW50ICs9IG9mZnNldHNBbG9uZ0hv
cml6b250YWxBeGlzW2NoaWxkSW5kZXhdLmVuZCgpOwotICAgICAgICAgICAgfSBlbHNlIGlmICgh
Y2hpbGRJbmRleCkgewotICAgICAgICAgICAgICAgIGhvcml6b250YWxPZmZzZXQgKz0gb2Zmc2V0
c0Fsb25nSG9yaXpvbnRhbEF4aXNbY2hpbGRJbmRleF0uYmVnaW4oKTsKLSAgICAgICAgICAgICAg
ICBob3Jpem9udGFsRXh0ZW50ICs9IChvZmZzZXRzQWxvbmdIb3Jpem9udGFsQXhpc1tjaGlsZElu
ZGV4XS5lbmQoKSArIG9mZnNldHNBbG9uZ0hvcml6b250YWxBeGlzW2NoaWxkSW5kZXggKyAxXS5i
ZWdpbigpKSAvIDI7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkSW5kZXggPT0gbGluZS5j
aGlsZHJlbi5zaXplKCkgLSAxKSB7Ci0gICAgICAgICAgICAgICAgaG9yaXpvbnRhbE9mZnNldCAr
PSAob2Zmc2V0c0Fsb25nSG9yaXpvbnRhbEF4aXNbY2hpbGRJbmRleCAtIDFdLmVuZCgpICsgb2Zm
c2V0c0Fsb25nSG9yaXpvbnRhbEF4aXNbY2hpbGRJbmRleF0uYmVnaW4oKSkgLyAyOwotICAgICAg
ICAgICAgICAgIGhvcml6b250YWxFeHRlbnQgKz0gb2Zmc2V0c0Fsb25nSG9yaXpvbnRhbEF4aXNb
Y2hpbGRJbmRleF0uZW5kKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGhvcml6b250YWxPZmZzZXQgKz0gKG9mZnNldHNBbG9uZ0hvcml6b250YWxBeGlzW2NoaWxkSW5k
ZXggLSAxXS5lbmQoKSArIG9mZnNldHNBbG9uZ0hvcml6b250YWxBeGlzW2NoaWxkSW5kZXhdLmJl
Z2luKCkpIC8gMjsKLSAgICAgICAgICAgICAgICBob3Jpem9udGFsRXh0ZW50ICs9IChvZmZzZXRz
QWxvbmdIb3Jpem9udGFsQXhpc1tjaGlsZEluZGV4XS5lbmQoKSArIG9mZnNldHNBbG9uZ0hvcml6
b250YWxBeGlzW2NoaWxkSW5kZXggKyAxXS5iZWdpbigpKSAvIDI7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIEZsb2F0U2l6ZSB0YXJnZXRTaXplIHsgaG9yaXpvbnRhbEV4dGVudCAtIGhv
cml6b250YWxPZmZzZXQsIGxpbmVCb3VuZHMuc2l6ZS5oZWlnaHQoKSB9OwotICAgICAgICAgICAg
aWYgKHRhcmdldFNpemUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgdGV4dENvbnRhaW5l
ci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRyYW5zZm9ybSwgInNjYWxlKDAs
IDApIik7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWZEaW1lbnNpb25zT3V0T2ZEYXRlKHRleHRD
b250YWluZXIpOwotCi0gICAgICAgICAgICBGbG9hdFNpemUgc2l6ZUJlZm9yZVRyYW5zZm9ybTsK
LSAgICAgICAgICAgIGlmIChhdXRvKiByZW5kZXJlciA9IHRleHRDb250YWluZXItPnJlbmRlckJv
eE1vZGVsT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICBzaXplQmVmb3JlVHJhbnNmb3JtID0g
ewotICAgICAgICAgICAgICAgICAgICBhZGp1c3RMYXlvdXRVbml0Rm9yQWJzb2x1dGVab29tKHJl
bmRlcmVyLT5vZmZzZXRXaWR0aCgpLCAqcmVuZGVyZXIpLnRvRmxvYXQoKSwKLSAgICAgICAgICAg
ICAgICAgICAgYWRqdXN0TGF5b3V0VW5pdEZvckFic29sdXRlWm9vbShyZW5kZXJlci0+b2Zmc2V0
SGVpZ2h0KCksICpyZW5kZXJlcikudG9GbG9hdCgpLAotICAgICAgICAgICAgICAgIH07Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChzaXplQmVmb3JlVHJhbnNmb3JtLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgICAgIHRleHRDb250YWluZXItPnNldElubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlUcmFuc2Zvcm0sICJzY2FsZSgwLCAwKSIpOwotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0ZXh0Q29udGFpbmVyLT5z
ZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtLCBtYWtlU3RyaW5nKAot
ICAgICAgICAgICAgICAgICJ0cmFuc2xhdGUoIl9zLAotICAgICAgICAgICAgICAgIGhvcml6b250
YWxPZmZzZXQgKyAodGFyZ2V0U2l6ZS53aWR0aCgpIC0gc2l6ZUJlZm9yZVRyYW5zZm9ybS53aWR0
aCgpKSAvIDIsICJweCwgIl9zLAotICAgICAgICAgICAgICAgICh0YXJnZXRTaXplLmhlaWdodCgp
IC0gc2l6ZUJlZm9yZVRyYW5zZm9ybS5oZWlnaHQoKSkgLyAyLCAicHgpICJfcywKLSAgICAgICAg
ICAgICAgICAic2NhbGUoIl9zLCB0YXJnZXRTaXplLndpZHRoKCkgLyBzaXplQmVmb3JlVHJhbnNm
b3JtLndpZHRoKCksICIsICJfcywgdGFyZ2V0U2l6ZS5oZWlnaHQoKSAvIHNpemVCZWZvcmVUcmFu
c2Zvcm0uaGVpZ2h0KCksICIpICJfcwotICAgICAgICAgICAgKSk7Ci0KLSAgICAgICAgICAgIHRl
eHRDb250YWluZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRVc2Vy
U2VsZWN0LCBhcHBseVVzZXJTZWxlY3RBbGwgPyBDU1NWYWx1ZUFsbCA6IENTU1ZhbHVlTm9uZSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZG9jdW1lbnQoKS5pc0ltYWdlRG9jdW1lbnQoKSkK
LSAgICAgICAgICAgIGxpbmVDb250YWluZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlDdXJzb3IsIENTU1ZhbHVlVGV4dCk7Ci0gICAgfQotCi0jaWYgRU5BQkxFKERBVEFfREVU
RUNUSU9OKQotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCByZXN1bHQuZGF0YURl
dGVjdG9ycy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgYXV0byBkYXRhRGV0ZWN0b3JDb250
YWluZXIgPSB0ZXh0UmVjb2duaXRpb25FbGVtZW50cy5kYXRhRGV0ZWN0b3JzW2luZGV4XTsKLSAg
ICAgICAgYXV0byYgZGF0YURldGVjdG9yID0gcmVzdWx0LmRhdGFEZXRlY3RvcnNbaW5kZXhdOwot
ICAgICAgICBpZiAoZGF0YURldGVjdG9yLm5vcm1hbGl6ZWRRdWFkcy5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbWUgdXAg
d2l0aCBhIHdheSB0byBjb2FsZXNjZSB0aGUgYm91bmRpbmcgcXVhZHMgaW50byBvbmUgb3IgbW9y
ZSByb3RhdGVkIHJlY3RzIHdpdGggdGhlIHNhbWUgYW5nbGUgb2Ygcm90YXRpb24uCi0gICAgICAg
IGF1dG8gdGFyZ2V0UXVhZCA9IGNvbnZlcnRUb0NvbnRhaW5lckNvb3JkaW5hdGVzKGRhdGFEZXRl
Y3Rvci5ub3JtYWxpemVkUXVhZHMuZmlyc3QoKSk7Ci0gICAgICAgIGF1dG8gdGFyZ2V0Qm91bmRz
ID0gcm90YXRlZEJvdW5kaW5nUmVjdFdpdGhNaW5pbXVtQW5nbGVPZlJvdGF0aW9uKHRhcmdldFF1
YWQsIDAuMDEpOwotICAgICAgICBkYXRhRGV0ZWN0b3JDb250YWluZXItPnNldElubGluZVN0eWxl
UHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgdGFyZ2V0Qm91bmRzLnNpemUud2lkdGgoKSwgQ1NT
VW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgIGRhdGFEZXRlY3RvckNvbnRhaW5lci0+c2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgdGFyZ2V0Qm91bmRzLnNpemUuaGVp
Z2h0KCksIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICBkYXRhRGV0ZWN0b3JDb250YWlu
ZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUcmFuc2Zvcm0sIG1ha2VTdHJp
bmcoCi0gICAgICAgICAgICAidHJhbnNsYXRlKCJfcywKLSAgICAgICAgICAgIHN0ZDo6cm91bmQo
dGFyZ2V0Qm91bmRzLmNlbnRlci54KCkgLSAodGFyZ2V0Qm91bmRzLnNpemUud2lkdGgoKSAvIDIp
KSwgInB4LCAiX3MsCi0gICAgICAgICAgICBzdGQ6OnJvdW5kKHRhcmdldEJvdW5kcy5jZW50ZXIu
eSgpIC0gKHRhcmdldEJvdW5kcy5zaXplLmhlaWdodCgpIC8gMikpLCAicHgpICJfcywKLSAgICAg
ICAgICAgIHRhcmdldEJvdW5kcy5hbmdsZUluUmFkaWFucyA/IG1ha2VTdHJpbmcoInJvdGF0ZSgi
X3MsIHRhcmdldEJvdW5kcy5hbmdsZUluUmFkaWFucywgInJhZCkgIl9zKSA6IGVtcHR5U3RyaW5n
KCkKLSAgICAgICAgKSk7Ci0gICAgfQotI2VuZGlmIC8vIEVOQUJMRShEQVRBX0RFVEVDVElPTikK
LQotICAgIGlmIChSZWZQdHIgZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCkpCi0gICAgICAgIGZy
YW1lLT5ldmVudEhhbmRsZXIoKS5zY2hlZHVsZUN1cnNvclVwZGF0ZSgpOwotCi0gICAgaWYgKGNh
Y2hlVGV4dFJlY29nbml0aW9uUmVzdWx0cyA9PSBDYWNoZVRleHRSZWNvZ25pdGlvblJlc3VsdHM6
OlllcykgewotICAgICAgICBpZiAoYXV0byogcGFnZSA9IGRvY3VtZW50KCkucGFnZSgpKQotICAg
ICAgICAgICAgcGFnZS0+Y2FjaGVUZXh0UmVjb2duaXRpb25SZXN1bHQoKnRoaXMsIGNvbnRhaW5l
clJlY3QsIHJlc3VsdCk7Ci0gICAgfQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKElNQUdFX0FOQUxZ
U0lTKQotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAogU2VsZWN0aW9uUmVuZGVyaW5nQmVo
YXZpb3IgSFRNTEVsZW1lbnQ6OnNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yKGNvbnN0IE5vZGUq
IG5vZGUpCiB7Ci0gICAgcmV0dXJuIGlzSW1hZ2VPdmVybGF5VGV4dChub2RlKSA/IFNlbGVjdGlv
blJlbmRlcmluZ0JlaGF2aW9yOjpVc2VJbmRpdmlkdWFsUXVhZHMgOiBTZWxlY3Rpb25SZW5kZXJp
bmdCZWhhdmlvcjo6Q29hbGVzY2VCb3VuZGluZ1JlY3RzOworICAgIHJldHVybiBJbWFnZU92ZXJs
YXk6OmlzT3ZlcmxheVRleHQobm9kZSkgPyBTZWxlY3Rpb25SZW5kZXJpbmdCZWhhdmlvcjo6VXNl
SW5kaXZpZHVhbFF1YWRzIDogU2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3I6OkNvYWxlc2NlQm91
bmRpbmdSZWN0czsKIH0KIAogI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxFbGVtZW50LmgKaW5kZXggMTU0NjkxOGYzZmVjMGVkMDc4ZWRjNzk5NWZhMDI5NTU2
Y2FhZjVjNS4uMjg2OTQyODFjMThmNTlhNjg2ZWNmNTEyZDY2ZjdkZjhiOThjNTcxYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEVsZW1lbnQuaApAQCAtMTMyLDE5ICsxMzIsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRFbnRlcktleUhpbnQoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAKICAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgYm9vbCBzaG91bGRFeHRlbmRTZWxlY3Rpb25Ub1RhcmdldE5vZGUoY29u
c3QgTm9kZSYgdGFyZ2V0Tm9kZSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQmVm
b3JlVXBkYXRlKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhc0ltYWdlT3ZlcmxheSgpIGNv
bnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNJbWFnZU92ZXJsYXlEYXRhRGV0ZWN0b3JS
ZXN1bHQoKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBpc0luc2lkZUlt
YWdlT3ZlcmxheShjb25zdCBTaW1wbGVSYW5nZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBib29sIGlzSW5zaWRlSW1hZ2VPdmVybGF5KGNvbnN0IE5vZGUmKTsKLSAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgYm9vbCBpc0ltYWdlT3ZlcmxheVRleHQoY29uc3QgTm9kZSYpOwotICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGlzSW1hZ2VPdmVybGF5VGV4dChjb25zdCBOb2RlKik7
Ci0gICAgdm9pZCByZW1vdmVJbWFnZU92ZXJsYXlTb29uSWZOZWVkZWQoKTsKLQotI2lmIEVOQUJM
RShJTUFHRV9BTkFMWVNJUykKLSAgICBJbnRSZWN0IGNvbnRhaW5lclJlY3RGb3JUZXh0UmVjb2du
aXRpb24oKTsKLSAgICBlbnVtIGNsYXNzIENhY2hlVGV4dFJlY29nbml0aW9uUmVzdWx0cyA6IGJv
b2wgeyBObywgWWVzIH07Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVXaXRoVGV4dFJl
Y29nbml0aW9uUmVzdWx0KGNvbnN0IFRleHRSZWNvZ25pdGlvblJlc3VsdCYsIENhY2hlVGV4dFJl
Y29nbml0aW9uUmVzdWx0cyA9IENhY2hlVGV4dFJlY29nbml0aW9uUmVzdWx0czo6WWVzKTsKLSNl
bmRpZgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBzdGF0aWMgU2VsZWN0aW9uUmVu
ZGVyaW5nQmVoYXZpb3Igc2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3IoY29uc3QgTm9kZSopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXggMzIzZmM0ODEyZTM4
N2Y2YzU5M2Y0NmMyY2M0ZmIwZTA2MmQ5N2QwZi4uNTE3MWI5Y2RjNzg5MzE3MWUyMWU1ZjRiZjU1
MDE3ZWY5NDRhYzc5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
CkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSAiSFRNTFNvdXJjZUVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MVHJhY2tFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgor
I2luY2x1ZGUgIkltYWdlT3ZlcmxheS5oIgogI2luY2x1ZGUgIkluYmFuZEdlbmVyaWNUZXh0VHJh
Y2suaCIKICNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlLmgiCiAjaW5jbHVkZSAiSW5i
YW5kV2ViVlRUVGV4dFRyYWNrLmgiCkBAIC0zMTQwLDcgKzMxNDEsNyBAQCB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OnNlZWtXaXRoVG9sZXJhbmNlKGNvbnN0IE1lZGlhVGltZSYgaW5UaW1lLCBjb25z
dCBNZWRpYVRpbQogICAgIGlmIChwcm9jZXNzaW5nVXNlckdlc3R1cmVGb3JNZWRpYSgpKQogICAg
ICAgICBtZWRpYVNlc3Npb24oKS5yZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVu
dFNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZVRvQ29udHJvbENvbnRyb2xzTWFuYWdlcik7CiAK
LSAgICByZW1vdmVJbWFnZU92ZXJsYXlTb29uSWZOZWVkZWQoKTsKKyAgICBJbWFnZU92ZXJsYXk6
OnJlbW92ZU92ZXJsYXlTb29uSWZOZWVkZWQoKnRoaXMpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnNlZWtUYXNrKCkKQEAgLTM3MzQsNyArMzczNSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6cGxheUludGVybmFsKCkKICAgICBtX2F1dG9wbGF5aW5nID0gZmFsc2U7CiAgICAgdXBk
YXRlUGxheVN0YXRlKCk7CiAKLSAgICByZW1vdmVJbWFnZU92ZXJsYXlTb29uSWZOZWVkZWQoKTsK
KyAgICBJbWFnZU92ZXJsYXk6OnJlbW92ZU92ZXJsYXlTb29uSWZOZWVkZWQoKnRoaXMpOwogfQog
CiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBhdXNlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q29udGV4dE1lbnVDb250cm9sbGVyLmNwcAppbmRleCBkMTc5OTE3MDE5ODFhODAxOTRiZDIzZTMw
OGY2ZTM3YTViZGI1ZTgzLi4zNTFkZWY1NTZmMWMzNzRlNDU1NTc5YjQ4ZDZhNzI5YmM4MmU5YWI5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCkBA
IC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNp
bmNsdWRlICJJbWFnZU92ZXJsYXkuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIK
QEAgLTk0Myw3ICs5NDQsNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxhdGUo
KQogICAgICAgICB9CiAKICAgICAgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gZnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnJhbmdlKCk7Ci0gICAgICAgIGJvb2wgc2VsZWN0aW9uSXNJbnNp
ZGVJbWFnZU92ZXJsYXkgPSBzZWxlY3RlZFJhbmdlICYmIEhUTUxFbGVtZW50Ojppc0luc2lkZUlt
YWdlT3ZlcmxheSgqc2VsZWN0ZWRSYW5nZSk7CisgICAgICAgIGJvb2wgc2VsZWN0aW9uSXNJbnNp
ZGVJbWFnZU92ZXJsYXkgPSBzZWxlY3RlZFJhbmdlICYmIEltYWdlT3ZlcmxheTo6aXNJbnNpZGVP
dmVybGF5KCpzZWxlY3RlZFJhbmdlKTsKICAgICAgICAgYm9vbCBzaG91bGRTaG93SXRlbXNGb3JO
b25FZGl0YWJsZVRleHQgPSAoWyZdIHsKICAgICAgICAgICAgIGlmICghbGlua1VSTC5pc0VtcHR5
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdD
b250cm9sbGVyLmNwcAppbmRleCBhMzdhY2I1MDI4ZDNiNjE2ZDM1NjI1NjJkMmE3ZDQwZDI4MGQ4
Yzg0Li4xMzk5NTY4OTMxOWQ5NDBiYTNiZjlkNGI0MjhkMjcyYTZhMzVhNDAyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtNjcsNiArNjcsNyBAQAogI2luY2x1ZGUg
IkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlT3Jp
ZW50YXRpb24uaCIKKyNpbmNsdWRlICJJbWFnZU92ZXJsYXkuaCIKICNpbmNsdWRlICJNb2RlbC5o
IgogI2luY2x1ZGUgIk1vdmVTZWxlY3Rpb25Db21tYW5kLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgpA
QCAtNzk5LDcgKzgwMCw3IEBAIEVsZW1lbnQqIERyYWdDb250cm9sbGVyOjpkcmFnZ2FibGVFbGVt
ZW50KGNvbnN0IEZyYW1lKiBzb3VyY2VGcmFtZSwgRWxlbWVudCogc3RhCiAjZW5kaWYKIAogICAg
IGF1dG8gc2VsZWN0aW9uRHJhZ0VsZW1lbnQgPSBzdGF0ZS50eXBlLmNvbnRhaW5zKERyYWdTb3Vy
Y2VBY3Rpb246OlNlbGVjdGlvbikgJiYgbV9kcmFnU291cmNlQWN0aW9uLmNvbnRhaW5zKERyYWdT
b3VyY2VBY3Rpb246OlNlbGVjdGlvbikgPyBzdGFydEVsZW1lbnQgOiBudWxscHRyOwotICAgIGlm
IChIVE1MRWxlbWVudDo6aXNJbWFnZU92ZXJsYXlUZXh0KHN0YXJ0RWxlbWVudCkpCisgICAgaWYg
KEltYWdlT3ZlcmxheTo6aXNPdmVybGF5VGV4dChzdGFydEVsZW1lbnQpKQogICAgICAgICByZXR1
cm4gc2VsZWN0aW9uRHJhZ0VsZW1lbnQ7CiAKICAgICBmb3IgKGF1dG8qIGVsZW1lbnQgPSBzdGFy
dEVsZW1lbnQ7IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRPclNoYWRvd0hvc3RF
bGVtZW50KCkpIHsKQEAgLTEwNDEsNyArMTA0Miw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnN0
YXJ0RHJhZyhGcmFtZSYgc3JjLCBjb25zdCBEcmFnU3RhdGUmIHN0YXRlLCBPcHRpb25TZXQ8RHJh
CiAgICAgICAgICAgICBzcmMuZWRpdG9yKCkud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJk
KCpzZWxlY3Rpb25SYW5nZSk7CiAgICAgICAgICAgICBhdXRvIHNlbGVjdGlvbiA9IHNyYy5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICAgICAgICAgIGJvb2wgc2hvdWxkRHJhZ0FzUGxhaW5U
ZXh0ID0gZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKHNlbGVjdGlvbi5zdGFydCgpKTsKLSAgICAg
ICAgICAgIGlmIChhdXRvIHJhbmdlID0gc2VsZWN0aW9uLnJhbmdlKCk7IHJhbmdlICYmIEhUTUxF
bGVtZW50Ojppc0luc2lkZUltYWdlT3ZlcmxheSgqcmFuZ2UpKQorICAgICAgICAgICAgaWYgKGF1
dG8gcmFuZ2UgPSBzZWxlY3Rpb24ucmFuZ2UoKTsgcmFuZ2UgJiYgSW1hZ2VPdmVybGF5Ojppc0lu
c2lkZU92ZXJsYXkoKnJhbmdlKSkKICAgICAgICAgICAgICAgICBzaG91bGREcmFnQXNQbGFpblRl
eHQgPSB0cnVlOwogCiAgICAgICAgICAgICBpZiAoc2hvdWxkRHJhZ0FzUGxhaW5UZXh0KSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggNmViYmM0N2E0NmNkMTJlNzg4ODg4
ZWZlNDc3YWRkNjNjYjZkMWRiNy4uNjU1YzY3NGUwM2FhYWZjZDgzZjBlZGU3NDVhNmYxMWRmNDE0
NzE2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtNjksNiArNjksNyBA
QAogI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5o
IgogI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VPdmVybGF5LmgiCiAjaW5jbHVk
ZSAiSW1hZ2VPdmVybGF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1l
bnRhdGlvbi5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKQEAgLTQ0OSw3ICs0NTAsNyBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgZGlzcGF0Y2hTZWxlY3RTdGFydChOb2RlKiBub2RlKQogCiBz
dGF0aWMgTm9kZSogbm9kZVRvU2VsZWN0T25Nb3VzZURvd25Gb3JOb2RlKE5vZGUmIHRhcmdldE5v
ZGUpCiB7Ci0gICAgaWYgKEhUTUxFbGVtZW50Ojppc0luc2lkZUltYWdlT3ZlcmxheSh0YXJnZXRO
b2RlKSkKKyAgICBpZiAoSW1hZ2VPdmVybGF5Ojppc0luc2lkZU92ZXJsYXkodGFyZ2V0Tm9kZSkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKFJlZlB0ciByb290VXNlclNlbGVj
dEFsbCA9IFBvc2l0aW9uOjpyb290VXNlclNlbGVjdEFsbEZvck5vZGUoJnRhcmdldE5vZGUpKQpA
QCAtNzIwLDcgKzcyMSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpjYW5Nb3VzZURvd25TdGFydFNl
bGVjdChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBlCiAgICAgaWYgKCFub2Rl
IHx8ICFub2RlLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChI
VE1MRWxlbWVudDo6aXNJbWFnZU92ZXJsYXlUZXh0KCpub2RlKSkKKyAgICBpZiAoSW1hZ2VPdmVy
bGF5Ojppc092ZXJsYXlUZXh0KCpub2RlKSkKICAgICAgICAgcmV0dXJuIG5vZGUtPnJlbmRlcmVy
KCktPnN0eWxlKCkudXNlclNlbGVjdEluY2x1ZGluZ0luZXJ0KCkgIT0gVXNlclNlbGVjdDo6Tm9u
ZTsKIAogICAgIHJldHVybiBub2RlLT5jYW5TdGFydFNlbGVjdGlvbigpIHx8IFBvc2l0aW9uOjpu
b2RlSXNVc2VyU2VsZWN0QWxsKG5vZGUuZ2V0KCkpOwpAQCAtNzY2LDcgKzc2Nyw3IEBAIGJvb2wg
RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3QgTW91c2VFdmVudFdpdGhI
aXRUZXN0UmVzdWx0cyYgZXZlCiAgICAgLy8gQnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTU1MzkwCiAKICAgICAvLyBTaW5nbGUgbW91c2UgZG93biBvbiBsaW5r
cyBvciBpbWFnZXMgY2FuIGFsd2F5cyB0cmlnZ2VyIGRyYWctbi1kcm9wLgotICAgIGJvb2wgaXNJ
bWFnZU92ZXJsYXlUZXh0ID0gSFRNTEVsZW1lbnQ6OmlzSW1hZ2VPdmVybGF5VGV4dChldmVudC50
YXJnZXROb2RlKCkpOworICAgIGJvb2wgaXNJbWFnZU92ZXJsYXlUZXh0ID0gSW1hZ2VPdmVybGF5
Ojppc092ZXJsYXlUZXh0KGV2ZW50LnRhcmdldE5vZGUoKSk7CiAgICAgYm9vbCBpc01vdXNlRG93
bk9uTGlua09ySW1hZ2UgPSBldmVudC5pc092ZXJMaW5rKCkgfHwgKGV2ZW50LmhpdFRlc3RSZXN1
bHQoKS5pbWFnZSgpICYmICFpc0ltYWdlT3ZlcmxheVRleHQpOwogICAgIG1fbW91c2VEb3duTWF5
U3RhcnREcmFnID0gc2luZ2xlQ2xpY2sgJiYgKCFldmVudC5ldmVudCgpLnNoaWZ0S2V5KCkgfHwg
aXNNb3VzZURvd25PbkxpbmtPckltYWdlKSAmJiBzaG91bGRBbGxvd01vdXNlRG93blRvU3RhcnRE
cmFnKCk7CiAjZW5kaWYKQEAgLTEwMjMsNyArMTAyNCw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjp1
cGRhdGVTZWxlY3Rpb25Gb3JNb3VzZURyYWcoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJl
c3VsCiAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb25CeU1vdXNlSWZEaWZmZXJl
bnQobmV3U2VsZWN0aW9uLCBtX2ZyYW1lLnNlbGVjdGlvbigpLmdyYW51bGFyaXR5KCksCiAgICAg
ICAgIEZyYW1lU2VsZWN0aW9uOjpFbmRQb2ludHNBZGp1c3RtZW50TW9kZTo6QWRqdXN0QXRCaWRp
Qm91bmRhcnkpOwogCi0gICAgaWYgKG9sZFNlbGVjdGlvbiAhPSBuZXdTZWxlY3Rpb24gJiYgSFRN
TEVsZW1lbnQ6OmlzSW1hZ2VPdmVybGF5VGV4dChuZXdTZWxlY3Rpb24uc3RhcnQoKS5jb250YWlu
ZXJOb2RlKCkpICYmIEhUTUxFbGVtZW50Ojppc0ltYWdlT3ZlcmxheVRleHQobmV3U2VsZWN0aW9u
LmVuZCgpLmNvbnRhaW5lck5vZGUoKSkpCisgICAgaWYgKG9sZFNlbGVjdGlvbiAhPSBuZXdTZWxl
Y3Rpb24gJiYgSW1hZ2VPdmVybGF5Ojppc092ZXJsYXlUZXh0KG5ld1NlbGVjdGlvbi5zdGFydCgp
LmNvbnRhaW5lck5vZGUoKSkgJiYgSW1hZ2VPdmVybGF5Ojppc092ZXJsYXlUZXh0KG5ld1NlbGVj
dGlvbi5lbmQoKS5jb250YWluZXJOb2RlKCkpKQogICAgICAgICBpbnZhbGlkYXRlQ2xpY2soKTsK
IH0KICNlbmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKQpAQCAtMTIwMCw3ICsxMjAxLDcgQEAg
SGl0VGVzdFJlc3VsdCBFdmVudEhhbmRsZXI6OmhpdFRlc3RSZXN1bHRBdFBvaW50KGNvbnN0IExh
eW91dFBvaW50JiBwb2ludCwgT3B0aW8KIAogICAgIFJlZlB0ciBpbm5lck5vZGUgPSByZXN1bHQu
aW5uZXJOb2RlKCk7CiAgICAgaWYgKHJlcXVlc3QuZGlzYWxsb3dzVXNlckFnZW50U2hhZG93Q29u
dGVudCgpCi0gICAgICAgIHx8IChyZXF1ZXN0LmRpc2FsbG93c1VzZXJBZ2VudFNoYWRvd0NvbnRl
bnRFeGNlcHRGb3JJbWFnZU92ZXJsYXlzKCkgJiYgaW5uZXJOb2RlICYmICFIVE1MRWxlbWVudDo6
aXNJbnNpZGVJbWFnZU92ZXJsYXkoKmlubmVyTm9kZSkpKQorICAgICAgICB8fCAocmVxdWVzdC5k
aXNhbGxvd3NVc2VyQWdlbnRTaGFkb3dDb250ZW50RXhjZXB0Rm9ySW1hZ2VPdmVybGF5cygpICYm
IGlubmVyTm9kZSAmJiAhSW1hZ2VPdmVybGF5Ojppc0luc2lkZU92ZXJsYXkoKmlubmVyTm9kZSkp
KQogICAgICAgICByZXN1bHQuc2V0VG9Ob25Vc2VyQWdlbnRTaGFkb3dBbmNlc3RvcigpOwogCiAg
ICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE1MjEsNyArMTUyMiw3IEBAIHN0ZDo6b3B0aW9uYWw8Q3Vy
c29yPiBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1
bHQsIGJvCiAKICAgICBzd2l0Y2ggKHN0eWxlID8gc3R5bGUtPmN1cnNvcigpIDogQ3Vyc29yVHlw
ZTo6QXV0bykgewogICAgIGNhc2UgQ3Vyc29yVHlwZTo6QXV0bzogewotICAgICAgICBpZiAoSFRN
TEVsZW1lbnQ6OmlzSW1hZ2VPdmVybGF5VGV4dChub2RlLmdldCgpKSkgeworICAgICAgICBpZiAo
SW1hZ2VPdmVybGF5Ojppc092ZXJsYXlUZXh0KG5vZGUuZ2V0KCkpKSB7CiAgICAgICAgICAgICBh
dXRvKiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgICAgICBpZiAocmVuZGVy
ZXIgJiYgcmVuZGVyZXItPnN0eWxlKCkudXNlclNlbGVjdEluY2x1ZGluZ0luZXJ0KCkgIT0gVXNl
clNlbGVjdDo6Tm9uZSkKICAgICAgICAgICAgICAgICByZXR1cm4gaUJlYW07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ltYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9JbWFnZU92ZXJsYXlDb250cm9sbGVyLmNwcAppbmRleCA3YzU4MmJlNmMy
ZTc3YzkxOGM2YzFkZGUxNzYzOTNiYjc1NGYyMmIwLi44Zjg5YzYyMzA5NmM5ZjY4NjNjYTYxZjgx
MWM3YWNjOWIwNTA2ZjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ltYWdlT3Zl
cmxheUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW1hZ2VPdmVybGF5
Q29udHJvbGxlci5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlv
bi5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50
LmgiCisjaW5jbHVkZSAiSW1hZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2lu
Y2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJQYWdlLmgiCkBAIC03MSw3ICs3Miw3IEBA
IHZvaWQgSW1hZ2VPdmVybGF5Q29udHJvbGxlcjo6c2VsZWN0aW9uUXVhZHNEaWRDaGFuZ2UoRnJh
bWUmIGZyYW1lLCBjb25zdCBWZWN0b3I8CiAgICAgICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgIGlmICghSFRNTEVsZW1lbnQ6Omlz
SW5zaWRlSW1hZ2VPdmVybGF5KCpzZWxlY3RlZFJhbmdlKSkKKyAgICAgICAgaWYgKCFJbWFnZU92
ZXJsYXk6OmlzSW5zaWRlT3ZlcmxheSgqc2VsZWN0ZWRSYW5nZSkpCiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgICAgICBpZiAoUmVmUHRyIGhvc3QgPSBzZWxlY3RlZFJhbmdlLT5z
dGFydENvbnRhaW5lcigpLnNoYWRvd0hvc3QoKTsgaXM8SFRNTEVsZW1lbnQ+KGhvc3QpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZS5jcHAKaW5kZXggMWFjZDU5Njk3YTQ0NjlhYTJhZjk0NTIyZGJmZGUyOWE3MjcyYWU5
Yi4uMjE2MDBlMWE5NTI3YjE2MjQ5OTc4NWUyMzRlYWM2MjhlYjAxYzM1MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuY3BwCkBAIC03Niw2ICs3Niw3IEBACiAjaW5jbHVkZSAiSGlzdG9yeUNvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgogI2luY2x1ZGUgIklEQkNvbm5lY3Rpb25Ub1NlcnZl
ci5oIgorI2luY2x1ZGUgIkltYWdlT3ZlcmxheS5oIgogI2luY2x1ZGUgIkltYWdlT3ZlcmxheUNv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JDb250cm9sbGVyLmgiCkBAIC0zNzIxLDcgKzM3MjIsNyBAQCB2b2lkIFBhZ2U6OnVwZGF0
ZUVsZW1lbnRzV2l0aFRleHRSZWNvZ25pdGlvblJlc3VsdHMoKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKICAgICAgICAgYXV0byYgW3Jlc3VsdCwgY29udGFpbmVyUmVjdF0gPSBlbnRyeS52YWx1
ZTsKLSAgICAgICAgYXV0byBuZXdDb250YWluZXJSZWN0ID0gcHJvdGVjdGVkRWxlbWVudC0+Y29u
dGFpbmVyUmVjdEZvclRleHRSZWNvZ25pdGlvbigpOworICAgICAgICBhdXRvIG5ld0NvbnRhaW5l
clJlY3QgPSBJbWFnZU92ZXJsYXk6OmNvbnRhaW5lclJlY3QocHJvdGVjdGVkRWxlbWVudC5nZXQo
KSk7CiAgICAgICAgIGlmIChjb250YWluZXJSZWN0ID09IG5ld0NvbnRhaW5lclJlY3QpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIApAQCAtMzczMSwxMSArMzczMiw4IEBAIHZvaWQgUGFnZTo6dXBk
YXRlRWxlbWVudHNXaXRoVGV4dFJlY29nbml0aW9uUmVzdWx0cygpCiAKICAgICBmb3IgKGF1dG8m
IFtlbGVtZW50LCByZXN1bHRdIDogZWxlbWVudHNUb1VwZGF0ZSkgewogICAgICAgICBlbGVtZW50
LT5kb2N1bWVudCgpLmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpJbnRlcm5hbEFz
eW5jVGFzaywgW3Jlc3VsdCA9IFRleHRSZWNvZ25pdGlvblJlc3VsdCB7IHJlc3VsdCB9LCB3ZWFr
RWxlbWVudCA9IFdlYWtQdHIgeyBlbGVtZW50IH1dIHsKLSAgICAgICAgICAgIFJlZlB0ciBlbGVt
ZW50IHsgd2Vha0VsZW1lbnQuZ2V0KCkgfTsKLSAgICAgICAgICAgIGlmICghZWxlbWVudCkKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGVsZW1lbnQtPnVwZGF0ZVdpdGhU
ZXh0UmVjb2duaXRpb25SZXN1bHQocmVzdWx0LCBIVE1MRWxlbWVudDo6Q2FjaGVUZXh0UmVjb2du
aXRpb25SZXN1bHRzOjpObyk7CisgICAgICAgICAgICBpZiAoUmVmUHRyIGVsZW1lbnQgPSB3ZWFr
RWxlbWVudC5nZXQoKSkKKyAgICAgICAgICAgICAgICBJbWFnZU92ZXJsYXk6OnVwZGF0ZVdpdGhU
ZXh0UmVjb2duaXRpb25SZXN1bHQoKmVsZW1lbnQsIHJlc3VsdCwgSW1hZ2VPdmVybGF5OjpDYWNo
ZVRleHRSZWNvZ25pdGlvblJlc3VsdHM6Ok5vKTsKICAgICAgICAgfSk7CiAgICAgfQogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvSW1hZ2VPdmVybGF5Q29udHJvbGxlck1h
Yy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0ltYWdlT3ZlcmxheUNvbnRyb2xsZXJNYWMu
bW0KaW5kZXggMjJjZDMyNzM5ZWJmMDgzZDI1ZmM4YmM0MTM0ZTI5MDAwYzdjODU5NS4uM2JiNjI5
NDg1MTFjNDNhZDhlYWVmNzllYmQ4MWViYzc0MzFjOGQ1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9tYWMvSW1hZ2VPdmVybGF5Q29udHJvbGxlck1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL21hYy9JbWFnZU92ZXJsYXlDb250cm9sbGVyTWFjLm1tCkBAIC0zNSw2ICsz
NSw3IEBACiAjaW1wb3J0ICJGcmFtZVZpZXcuaCIKICNpbXBvcnQgIkhUTUxFbGVtZW50LmgiCiAj
aW1wb3J0ICJIVE1MTmFtZXMuaCIKKyNpbXBvcnQgIkltYWdlT3ZlcmxheS5oIgogI2ltcG9ydCAi
SW1hZ2VPdmVybGF5RGF0YURldGVjdGlvblJlc3VsdElkZW50aWZpZXIuaCIKICNpbXBvcnQgIklu
dFJlY3QuaCIKICNpbXBvcnQgIlBhZ2UuaCIKQEAgLTUwLDcgKzUxLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB2b2lkIEltYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnVwZGF0ZURhdGFEZXRlY3Rv
ckhpZ2hsaWdodHMoY29uc3QgSFRNTEVsZW1lbnQmIG92ZXJsYXlIb3N0KQogewotICAgIGlmICgh
b3ZlcmxheUhvc3QuaGFzSW1hZ2VPdmVybGF5KCkpIHsKKyAgICBpZiAoIUltYWdlT3ZlcmxheTo6
aGFzT3ZlcmxheShvdmVybGF5SG9zdCkpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIGNsZWFyRGF0YURldGVjdG9ySGlnaGxpZ2h0cygpOwogICAgICAgICByZXR1cm47
CkBAIC01OCw3ICs1OSw3IEBAIHZvaWQgSW1hZ2VPdmVybGF5Q29udHJvbGxlcjo6dXBkYXRlRGF0
YURldGVjdG9ySGlnaGxpZ2h0cyhjb25zdCBIVE1MRWxlbWVudCYgb3ZlCiAKICAgICBWZWN0b3I8
UmVmPEhUTUxFbGVtZW50Pj4gZGF0YURldGVjdG9yUmVzdWx0RWxlbWVudHM7CiAgICAgZm9yIChh
dXRvJiBjaGlsZCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEhUTUxFbGVtZW50Pigqb3ZlcmxheUhvc3Qu
dXNlckFnZW50U2hhZG93Um9vdCgpKSkgewotICAgICAgICBpZiAoY2hpbGQuaXNJbWFnZU92ZXJs
YXlEYXRhRGV0ZWN0b3JSZXN1bHQoKSAmJiBjaGlsZC5yZW5kZXJlcigpKQorICAgICAgICBpZiAo
SW1hZ2VPdmVybGF5Ojppc0RhdGFEZXRlY3RvclJlc3VsdChjaGlsZCkgJiYgY2hpbGQucmVuZGVy
ZXIoKSkKICAgICAgICAgICAgIGRhdGFEZXRlY3RvclJlc3VsdEVsZW1lbnRzLmFwcGVuZChjaGls
ZCk7CiAgICAgfQogCkBAIC0xOTAsNyArMTkxLDcgQEAgdm9pZCBJbWFnZU92ZXJsYXlDb250cm9s
bGVyOjplbGVtZW50VW5kZXJNb3VzZURpZENoYW5nZShGcmFtZSYgZnJhbWUsIEVsZW1lbnQqIGUK
ICAgICBpZiAoIWVsZW1lbnRVbmRlck1vdXNlICYmIG1faG9zdEVsZW1lbnRGb3JEYXRhRGV0ZWN0
b3JzICYmIGZyYW1lLmRvY3VtZW50KCkgIT0gJm1faG9zdEVsZW1lbnRGb3JEYXRhRGV0ZWN0b3Jz
LT5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWVsZW1lbnRVbmRlck1v
dXNlIHx8ICFIVE1MRWxlbWVudDo6aXNJbnNpZGVJbWFnZU92ZXJsYXkoKmVsZW1lbnRVbmRlck1v
dXNlKSkgeworICAgIGlmICghZWxlbWVudFVuZGVyTW91c2UgfHwgIUltYWdlT3ZlcmxheTo6aXNJ
bnNpZGVPdmVybGF5KCplbGVtZW50VW5kZXJNb3VzZSkpIHsKICAgICAgICAgbV9ob3N0RWxlbWVu
dEZvckRhdGFEZXRlY3RvcnMgPSBudWxscHRyOwogICAgICAgICB1bmluc3RhbGxQYWdlT3Zlcmxh
eUlmTmVlZGVkKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTIwNSw3ICsyMDYsNyBAQCB2b2lkIElt
YWdlT3ZlcmxheUNvbnRyb2xsZXI6OmVsZW1lbnRVbmRlck1vdXNlRGlkQ2hhbmdlKEZyYW1lJiBm
cmFtZSwgRWxlbWVudCogZQogICAgIH0KIAogICAgIFJlZiBpbWFnZU92ZXJsYXlIb3N0ID0gZG93
bmNhc3Q8SFRNTEVsZW1lbnQ+KCpzaGFkb3dIb3N0KTsKLSAgICBpZiAoIWltYWdlT3ZlcmxheUhv
c3QtPmhhc0ltYWdlT3ZlcmxheSgpKSB7CisgICAgaWYgKCFJbWFnZU92ZXJsYXk6Omhhc092ZXJs
YXkoaW1hZ2VPdmVybGF5SG9zdC5nZXQoKSkpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIG1faG9zdEVsZW1lbnRGb3JEYXRhRGV0ZWN0b3JzID0gbnVsbHB0cjsKICAg
ICAgICAgdW5pbnN0YWxsUGFnZU92ZXJsYXlJZk5lZWRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCmluZGV4IGJjYTMyMDcxNGQ5ZDk3ODA4YzVkYWVhOGMz
ZGQ1ZDI2ZTA1ODFmODUuLmY2YjExZDlkNjI5YWNmYmZiODc4NjBjYjdiOGNkMjhjZWJjMWIxOGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKQEAgLTM4LDYg
KzM4LDcgQEAKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSFRNTFRl
eHRBcmVhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKKyNpbmNsdWRl
ICJJbWFnZU92ZXJsYXkuaCIKICNpbmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCiAjaW5jbHVkZSAi
UmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKQEAgLTMzMiw3ICszMzMsNyBA
QCBSZWZQdHI8Tm9kZT4gSGl0VGVzdFJlc3VsdDo6bm9kZUZvckltYWdlRGF0YSgpIGNvbnN0CiAg
ICAgaWYgKCFtX2lubmVyTm9uU2hhcmVkTm9kZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICBpZiAoSFRNTEVsZW1lbnQ6OmlzSW5zaWRlSW1hZ2VPdmVybGF5KCptX2lubmVyTm9uU2hh
cmVkTm9kZSkpCisgICAgaWYgKEltYWdlT3ZlcmxheTo6aXNJbnNpZGVPdmVybGF5KCptX2lubmVy
Tm9uU2hhcmVkTm9kZSkpCiAgICAgICAgIHJldHVybiBtX2lubmVyTm9uU2hhcmVkTm9kZS0+c2hh
ZG93SG9zdCgpOwogCiAgICAgcmV0dXJuIG1faW5uZXJOb25TaGFyZWROb2RlOwpAQCAtNjUzLDcg
KzY1NCw3IEBAIGlubGluZSBIaXRUZXN0UHJvZ3Jlc3MgSGl0VGVzdFJlc3VsdDo6YWRkTm9kZVRv
TGlzdEJhc2VkVGVzdFJlc3VsdENvbW1vbihOb2RlKiBuCiAgICAgICAgIHJldHVybiBIaXRUZXN0
UHJvZ3Jlc3M6OkNvbnRpbnVlOwogCiAgICAgaWYgKChyZXF1ZXN0LmRpc2FsbG93c1VzZXJBZ2Vu
dFNoYWRvd0NvbnRlbnQoKSAmJiBub2RlLT5pc0luVXNlckFnZW50U2hhZG93VHJlZSgpKQotICAg
ICAgICB8fCAocmVxdWVzdC5kaXNhbGxvd3NVc2VyQWdlbnRTaGFkb3dDb250ZW50RXhjZXB0Rm9y
SW1hZ2VPdmVybGF5cygpICYmICFIVE1MRWxlbWVudDo6aXNJbnNpZGVJbWFnZU92ZXJsYXkoKm5v
ZGUpICYmIG5vZGUtPmlzSW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCkpKQorICAgICAgICB8fCAocmVx
dWVzdC5kaXNhbGxvd3NVc2VyQWdlbnRTaGFkb3dDb250ZW50RXhjZXB0Rm9ySW1hZ2VPdmVybGF5
cygpICYmICFJbWFnZU92ZXJsYXk6OmlzSW5zaWRlT3ZlcmxheSgqbm9kZSkgJiYgbm9kZS0+aXNJ
blVzZXJBZ2VudFNoYWRvd1RyZWUoKSkpCiAgICAgICAgIG5vZGUgPSBub2RlLT5kb2N1bWVudCgp
LmFuY2VzdG9yTm9kZUluVGhpc1Njb3BlKG5vZGUpOwogCiAgICAgbXV0YWJsZUxpc3RCYXNlZFRl
c3RSZXN1bHQoKS5hZGQoKm5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFn
ZS5jcHAKaW5kZXggNGU4OWMyZTgwYjc4MDE0MDdkOGVlYTBhZTA2YzM0OTY2NjEyNTAxMi4uODYy
ZmI5ZjRjZjRiZTkxNmU1OTlhYTY1MDQxNjI5MGVhMDdmZDAzOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiSFRN
TE1hcEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCisjaW5jbHVkZSAiSW1hZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiSW5saW5lSXRl
cmF0b3JJbmxpbmVCb3guaCIKICNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckxpbmUuaCIKICNpbmNs
dWRlICJQYWdlLmgiCkBAIC0xNDAsNyArMTQxLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIFJlbmRlckltYWdlOjpSZW5kZXJJbWFnZShFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHls
ZSYmIHN0eWxlLCBTdHlsZUltYWdlKiBzdHlsZUltYWdlLCBjb25zdCBmbG9hdCBpbWFnZURldmlj
ZVBpeGVsUmF0aW8pCiAgICAgOiBSZW5kZXJSZXBsYWNlZChlbGVtZW50LCBXVEZNb3ZlKHN0eWxl
KSwgSW50U2l6ZSgpKQogICAgICwgbV9pbWFnZVJlc291cmNlKHN0eWxlSW1hZ2UgPyBtYWtlVW5p
cXVlPFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlPigqc3R5bGVJbWFnZSkgOiBtYWtlVW5p
cXVlPFJlbmRlckltYWdlUmVzb3VyY2U+KCkpCi0gICAgLCBtX2hhc0ltYWdlT3ZlcmxheShpczxI
VE1MRWxlbWVudD4oZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGVsZW1lbnQpLmhh
c0ltYWdlT3ZlcmxheSgpKQorICAgICwgbV9oYXNJbWFnZU92ZXJsYXkoaXM8SFRNTEVsZW1lbnQ+
KGVsZW1lbnQpICYmIEltYWdlT3ZlcmxheTo6aGFzT3ZlcmxheShkb3duY2FzdDxIVE1MRWxlbWVu
dD4oZWxlbWVudCkpKQogICAgICwgbV9pbWFnZURldmljZVBpeGVsUmF0aW8oaW1hZ2VEZXZpY2VQ
aXhlbFJhdGlvKQogewogICAgIHVwZGF0ZUFsdFRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmNwcAppbmRleCBlM2RkZmM5YzIwZDgzYmQ0ZDY4NGI5YjkwM2E5NjExZmJkOWNkM2Vl
Li5mNjI1ZDZmNzBmMWUyYjlhMTk5OGE2YjU5Yzc1NDNmNDAzOTcwODJhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0xMTEsNiArMTExLDcgQEAKICNpbmNsdWRlICJIaXRU
ZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSURCUmVxdWVzdC5oIgogI2luY2x1ZGUgIklEQlRyYW5z
YWN0aW9uLmgiCisjaW5jbHVkZSAiSW1hZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
Q2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIklu
c3BlY3RvckRlYnVnZ2FibGVUeXBlLmgiCkBAIC01ODA3LDcgKzU4MDgsNyBAQCB2b2lkIEludGVy
bmFsczo6aW5zdGFsbEltYWdlT3ZlcmxheShFbGVtZW50JiBlbGVtZW50LCBWZWN0b3I8SW1hZ2VP
dmVybGF5TGluZT4mJgogICAgICAgICByZXR1cm47CiAKICNpZiBFTkFCTEUoSU1BR0VfQU5BTFlT
SVMpCi0gICAgZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGVsZW1lbnQpLnVwZGF0ZVdpdGhUZXh0UmVj
b2duaXRpb25SZXN1bHQoVGV4dFJlY29nbml0aW9uUmVzdWx0IHsKKyAgICBJbWFnZU92ZXJsYXk6
OnVwZGF0ZVdpdGhUZXh0UmVjb2duaXRpb25SZXN1bHQoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGVs
ZW1lbnQpLCBUZXh0UmVjb2duaXRpb25SZXN1bHQgewogICAgICAgICBsaW5lcy5tYXAoW10gKGF1
dG8mIGxpbmUpIC0+IFRleHRSZWNvZ25pdGlvbkxpbmVEYXRhIHsKICAgICAgICAgICAgIHJldHVy
biBtYWtlRGF0YUZvckxpbmUobGluZSk7CiAgICAgICAgIH0pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0gYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KaW5kZXggYTI3
Mzc1YjI5Y2VlZmFiMzg1ZTQ4ZDA4M2RlYzViN2EwZWJkNzQxMS4uYTE1NDU5NmViZGVkOWQ0MzJm
ZjA3ZjM5OGM3OTBhODk3NjlkZDQzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQpAQCAtNDcsNiArNDcsNyBAQAog
I2ltcG9ydCA8V2ViQ29yZS9IVE1MT0xpc3RFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hU
TUxVTGlzdEVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgorI2lt
cG9ydCA8V2ViQ29yZS9JbWFnZU92ZXJsYXkuaD4KICNpbXBvcnQgPFdlYkNvcmUvTmV0d29ya0V4
dGVuc2lvbkNvbnRlbnRGaWx0ZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvTm9kZVJlbmRlclN0eWxl
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BheW1lbnRDb29yZGluYXRvci5oPgpAQCAtMjAwLDcgKzIw
MSw3IEBAIERpY3Rpb25hcnlQb3B1cEluZm8gV2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0Zv
clJhbmdlKEZyYW1lJiBmcmFtZSwgY29uc3QgU2ltCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQog
CiAgICAgT3B0aW9uU2V0PFRleHRJbmRpY2F0b3JPcHRpb24+IGluZGljYXRvck9wdGlvbnMgeyBU
ZXh0SW5kaWNhdG9yT3B0aW9uOjpVc2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JD
b21wbGV4UmFuZ2VzIH07Ci0gICAgaWYgKEhUTUxFbGVtZW50Ojppc0luc2lkZUltYWdlT3Zlcmxh
eShyYW5nZSkpCisgICAgaWYgKEltYWdlT3ZlcmxheTo6aXNJbnNpZGVPdmVybGF5KHJhbmdlKSkK
ICAgICAgICAgaW5kaWNhdG9yT3B0aW9ucy5hZGQoeyBUZXh0SW5kaWNhdG9yT3B0aW9uOjpQYWlu
dEFsbENvbnRlbnQsIFRleHRJbmRpY2F0b3JPcHRpb246OlBhaW50QmFja2dyb3VuZHMgfSk7CiAK
ICAgICBpZiAocHJlc2VudGF0aW9uVHJhbnNpdGlvbiA9PSBUZXh0SW5kaWNhdG9yUHJlc2VudGF0
aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCmluZGV4IGI1MGFlZDE2MmZj
NTJlN2Y0YThjMzljYTAzNjY1OWM1NWIwODkwYTMuLmFmYzY4ZjhkOWE4YzZiZDcwMWJmZTBjYjI0
NzJmNzAwYWRmZTRlZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0ZpbmRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9GaW5kQ29udHJvbGxlci5jcHAKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxXZWJD
b3JlL0ZyYW1lU2VsZWN0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW1h
Z2VPdmVybGF5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhdGhVdGlsaXRp
ZXMuaD4KQEAgLTM3NCw3ICszNzUsNyBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpoaWRlRmluZFVJ
KCkKIGJvb2wgRmluZENvbnRyb2xsZXI6OnVwZGF0ZUZpbmRJbmRpY2F0b3IoRnJhbWUmIHNlbGVj
dGVkRnJhbWUsIGJvb2wgaXNTaG93aW5nT3ZlcmxheSwgYm9vbCBzaG91bGRBbmltYXRlKQogewog
ICAgIE9wdGlvblNldDxUZXh0SW5kaWNhdG9yT3B0aW9uPiB0ZXh0SW5kaWNhdG9yT3B0aW9ucyB7
IFRleHRJbmRpY2F0b3JPcHRpb246OkluY2x1ZGVNYXJnaW5JZlJhbmdlTWF0Y2hlc1NlbGVjdGlv
biB9OwotICAgIGlmIChhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3RlZEZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnJhbmdlKCk7IHNlbGVjdGVkUmFuZ2UgJiYgSFRNTEVsZW1lbnQ6Omlz
SW5zaWRlSW1hZ2VPdmVybGF5KCpzZWxlY3RlZFJhbmdlKSkKKyAgICBpZiAoYXV0byBzZWxlY3Rl
ZFJhbmdlID0gc2VsZWN0ZWRGcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yYW5nZSgpOyBz
ZWxlY3RlZFJhbmdlICYmIEltYWdlT3ZlcmxheTo6aXNJbnNpZGVPdmVybGF5KCpzZWxlY3RlZFJh
bmdlKSkKICAgICAgICAgdGV4dEluZGljYXRvck9wdGlvbnMuYWRkKHsgVGV4dEluZGljYXRvck9w
dGlvbjo6UGFpbnRBbGxDb250ZW50LCBUZXh0SW5kaWNhdG9yT3B0aW9uOjpQYWludEJhY2tncm91
bmRzIH0pOwogCiAgICAgYXV0byBpbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRo
U2VsZWN0aW9uSW5GcmFtZShzZWxlY3RlZEZyYW1lLCB0ZXh0SW5kaWNhdG9yT3B0aW9ucywgc2hv
dWxkQW5pbWF0ZSA/IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2Ug
OiBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Tm9uZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IGQ1NDA5YmVkY2U1NjE3
YTRhMDdmNzIxMmE4N2ZmZDYyZDZmMDAwZjcuLmMwNWRmNzExNDNlMmYwMGY4YmQxYjBhOWIzZjZh
NWM1NGMyN2NlNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCkBAIC0yMDEsNiArMjAxLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0hpc3RvcnlDb250
cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IaXN0b3J5SXRlbS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvSGl0VGVzdFJlc3VsdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VPdmVybGF5Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9KU0RPTVdp
bmRvdy5oPgpAQCAtMTIxNSw3ICsxMjE2LDcgQEAgRWRpdG9yU3RhdGUgV2ViUGFnZTo6ZWRpdG9y
U3RhdGUoU2hvdWxkUGVyZm9ybUxheW91dCBzaG91bGRQZXJmb3JtTGF5b3V0KSBjb25zdAogCiAg
ICAgaWYgKHJlc3VsdC5zZWxlY3Rpb25Jc1JhbmdlKSB7CiAgICAgICAgIGF1dG8gc2VsZWN0aW9u
UmFuZ2UgPSBzZWxlY3Rpb24ucmFuZ2UoKTsKLSAgICAgICAgcmVzdWx0LnNlbGVjdGlvbklzUmFu
Z2VJbnNpZGVJbWFnZU92ZXJsYXkgPSBzZWxlY3Rpb25SYW5nZSAmJiBIVE1MRWxlbWVudDo6aXNJ
bnNpZGVJbWFnZU92ZXJsYXkoKnNlbGVjdGlvblJhbmdlKTsKKyAgICAgICAgcmVzdWx0LnNlbGVj
dGlvbklzUmFuZ2VJbnNpZGVJbWFnZU92ZXJsYXkgPSBzZWxlY3Rpb25SYW5nZSAmJiBJbWFnZU92
ZXJsYXk6OmlzSW5zaWRlT3ZlcmxheSgqc2VsZWN0aW9uUmFuZ2UpOwogICAgIH0KIAogICAgIG1f
bGFzdEVkaXRvclN0YXRlV2FzQ29udGVudEVkaXRhYmxlID0gcmVzdWx0LmlzQ29udGVudEVkaXRh
YmxlID8gRWRpdG9yU3RhdGVJc0NvbnRlbnRFZGl0YWJsZTo6WWVzIDogRWRpdG9yU3RhdGVJc0Nv
bnRlbnRFZGl0YWJsZTo6Tm87CkBAIC00MDkwLDcgKzQwOTEsNyBAQCBzdGQ6Om9wdGlvbmFsPHN0
ZDo6cGFpcjxSZWY8V2ViQ29yZTo6SFRNTEVsZW1lbnQ+LCBXZWJDb3JlOjpJbnRSZWN0Pj4gV2Vi
UGFnZTo6ZgogewogICAgIFZlY3RvcjxSZWY8SFRNTEVsZW1lbnQ+PiBkYXRhRGV0ZWN0b3JFbGVt
ZW50czsKICAgICBmb3IgKGF1dG8mIGNoaWxkIDogZGVzY2VuZGFudHNPZlR5cGU8SFRNTEVsZW1l
bnQ+KCppbWFnZU92ZXJsYXlIb3N0LnNoYWRvd1Jvb3QoKSkpIHsKLSAgICAgICAgaWYgKGNoaWxk
LmlzSW1hZ2VPdmVybGF5RGF0YURldGVjdG9yUmVzdWx0KCkpCisgICAgICAgIGlmIChJbWFnZU92
ZXJsYXk6OmlzRGF0YURldGVjdG9yUmVzdWx0KGNoaWxkKSkKICAgICAgICAgICAgIGRhdGFEZXRl
Y3RvckVsZW1lbnRzLmFwcGVuZChjaGlsZCk7CiAgICAgfQogCkBAIC03NDY2LDcgKzc0NjcsNyBA
QCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RUZXh0UmVjb2duaXRpb24oV2ViQ29yZTo6RWxlbWVudCYg
ZWxlbWVudCwgQ29tcGxldGlvbkhhbmRsZQogICAgIGlmIChjb3JlUGFnZSgpLT5oYXNDYWNoZWRU
ZXh0UmVjb2duaXRpb25SZXN1bHQoaHRtbEVsZW1lbnQuZ2V0KCkpKSB7CiAgICAgICAgIGlmIChj
b21wbGV0aW9uKSB7CiAgICAgICAgICAgICBSZWZQdHI8RWxlbWVudD4gaW1hZ2VPdmVybGF5SG9z
dDsKLSAgICAgICAgICAgIGlmIChodG1sRWxlbWVudC0+aGFzSW1hZ2VPdmVybGF5KCkpCisgICAg
ICAgICAgICBpZiAoSW1hZ2VPdmVybGF5OjpoYXNPdmVybGF5KGh0bWxFbGVtZW50LmdldCgpKSkK
ICAgICAgICAgICAgICAgICBpbWFnZU92ZXJsYXlIb3N0ID0gJmVsZW1lbnQ7CiAgICAgICAgICAg
ICBjb21wbGV0aW9uKFdURk1vdmUoaW1hZ2VPdmVybGF5SG9zdCkpOwogICAgICAgICB9CkBAIC03
NTMzLDcgKzc1MzQsNyBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RUZXh0UmVjb2duaXRpb24oV2Vi
Q29yZTo6RWxlbWVudCYgZWxlbWVudCwgQ29tcGxldGlvbkhhbmRsZQogICAgICAgICAgICAgcmV0
dXJuOwogCiAgICAgICAgIGF1dG8mIGh0bWxFbGVtZW50ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+
KCpwcm90ZWN0ZWRFbGVtZW50KTsKLSAgICAgICAgaHRtbEVsZW1lbnQudXBkYXRlV2l0aFRleHRS
ZWNvZ25pdGlvblJlc3VsdChyZXN1bHQpOworICAgICAgICBJbWFnZU92ZXJsYXk6OnVwZGF0ZVdp
dGhUZXh0UmVjb2duaXRpb25SZXN1bHQoaHRtbEVsZW1lbnQsIHJlc3VsdCk7CiAKICAgICAgICAg
YXV0byBtYXRjaEluZGV4ID0gcHJvdGVjdGVkUGFnZS0+bV9lbGVtZW50c1BlbmRpbmdUZXh0UmVj
b2duaXRpb24uZmluZE1hdGNoaW5nKFsmXSAoYXV0byYgZWxlbWVudEFuZENvbXBsZXRpb25IYW5k
bGVycykgewogICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRBbmRDb21wbGV0aW9uSGFuZGxlcnMu
Zmlyc3QgPT0gJmh0bWxFbGVtZW50OwpAQCAtNzU0Miw3ICs3NTQzLDcgQEAgdm9pZCBXZWJQYWdl
OjpyZXF1ZXN0VGV4dFJlY29nbml0aW9uKFdlYkNvcmU6OkVsZW1lbnQmIGVsZW1lbnQsIENvbXBs
ZXRpb25IYW5kbGUKICAgICAgICAgaWYgKG1hdGNoSW5kZXggPT0gbm90Rm91bmQpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgUmVmUHRyIGltYWdlT3ZlcmxheUhvc3QgPSBodG1sRWxl
bWVudC5oYXNJbWFnZU92ZXJsYXkoKSA/ICZodG1sRWxlbWVudCA6IG51bGxwdHI7CisgICAgICAg
IFJlZlB0ciBpbWFnZU92ZXJsYXlIb3N0ID0gSW1hZ2VPdmVybGF5OjpoYXNPdmVybGF5KGh0bWxF
bGVtZW50KSA/ICZodG1sRWxlbWVudCA6IG51bGxwdHI7CiAgICAgICAgIGZvciAoYXV0byYgY29t
cGxldGlvbkhhbmRsZXIgOiBwcm90ZWN0ZWRQYWdlLT5tX2VsZW1lbnRzUGVuZGluZ1RleHRSZWNv
Z25pdGlvblttYXRjaEluZGV4XS5zZWNvbmQpCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihpbWFnZU92ZXJsYXlIb3N0LmNvcHlSZWYoKSk7CiAKQEAgLTc1NTgsNyArNzU1OSw3IEBAIHZv
aWQgV2ViUGFnZTo6dXBkYXRlV2l0aFRleHRSZWNvZ25pdGlvblJlc3VsdChjb25zdCBUZXh0UmVj
b2duaXRpb25SZXN1bHQmIHJlc3VsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBkb3du
Y2FzdDxIVE1MRWxlbWVudD4oKmVsZW1lbnRUb1VwZGF0ZSkudXBkYXRlV2l0aFRleHRSZWNvZ25p
dGlvblJlc3VsdChyZXN1bHQpOworICAgIEltYWdlT3ZlcmxheTo6dXBkYXRlV2l0aFRleHRSZWNv
Z25pdGlvblJlc3VsdChkb3duY2FzdDxIVE1MRWxlbWVudD4oKmVsZW1lbnRUb1VwZGF0ZSksIHJl
c3VsdCk7CiAgICAgYXV0byBoaXRUZXN0UmVzdWx0ID0gY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCku
ZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQocm91bmRlZEludFBvaW50KGxvY2F0
aW9uKSwgewogICAgICAgICBIaXRUZXN0UmVxdWVzdDo6VHlwZTo6UmVhZE9ubHksCiAgICAgICAg
IEhpdFRlc3RSZXF1ZXN0OjpUeXBlOjpBY3RpdmUsCkBAIC03NTY3LDcgKzc1NjgsNyBAQCB2b2lk
IFdlYlBhZ2U6OnVwZGF0ZVdpdGhUZXh0UmVjb2duaXRpb25SZXN1bHQoY29uc3QgVGV4dFJlY29n
bml0aW9uUmVzdWx0JiByZXN1bAogCiAgICAgUmVmUHRyIG5vZGVBdExvY2F0aW9uID0gaGl0VGVz
dFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKICAgICBhdXRvIHVwZGF0ZVJlc3VsdCA9IChb
Jl0gewotICAgICAgICBpZiAoIW5vZGVBdExvY2F0aW9uIHx8IG5vZGVBdExvY2F0aW9uLT5zaGFk
b3dIb3N0KCkgIT0gZWxlbWVudFRvVXBkYXRlIHx8ICFIVE1MRWxlbWVudDo6aXNJbnNpZGVJbWFn
ZU92ZXJsYXkoKm5vZGVBdExvY2F0aW9uKSkKKyAgICAgICAgaWYgKCFub2RlQXRMb2NhdGlvbiB8
fCBub2RlQXRMb2NhdGlvbi0+c2hhZG93SG9zdCgpICE9IGVsZW1lbnRUb1VwZGF0ZSB8fCAhSW1h
Z2VPdmVybGF5Ojppc0luc2lkZU92ZXJsYXkoKm5vZGVBdExvY2F0aW9uKSkKICAgICAgICAgICAg
IHJldHVybiBUZXh0UmVjb2duaXRpb25VcGRhdGVSZXN1bHQ6Ok5vVGV4dDsKIAogI2lmIEVOQUJM
RShEQVRBX0RFVEVDVElPTikKQEAgLTc1NzUsNyArNzU3Niw3IEBAIHZvaWQgV2ViUGFnZTo6dXBk
YXRlV2l0aFRleHRSZWNvZ25pdGlvblJlc3VsdChjb25zdCBUZXh0UmVjb2duaXRpb25SZXN1bHQm
IHJlc3VsCiAgICAgICAgICAgICByZXR1cm4gVGV4dFJlY29nbml0aW9uVXBkYXRlUmVzdWx0OjpE
YXRhRGV0ZWN0b3I7CiAjZW5kaWYKIAotICAgICAgICBpZiAoSFRNTEVsZW1lbnQ6OmlzSW1hZ2VP
dmVybGF5VGV4dCgqbm9kZUF0TG9jYXRpb24pKQorICAgICAgICBpZiAoSW1hZ2VPdmVybGF5Ojpp
c092ZXJsYXlUZXh0KCpub2RlQXRMb2NhdGlvbikpCiAgICAgICAgICAgICByZXR1cm4gVGV4dFJl
Y29nbml0aW9uVXBkYXRlUmVzdWx0OjpUZXh0OwogCiAgICAgICAgIHJldHVybiBUZXh0UmVjb2du
aXRpb25VcGRhdGVSZXN1bHQ6Ok5vVGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kQ29udHJvbGxlcklPUy5tbSBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kQ29udHJvbGxlcklPUy5tbQppbmRleCA3YTY2Njhi
ODE1ZmZlNTk2NjQwODA4MWE1MmNjZjcxOGZkYTA4ZTYwLi41MTc0MDI4ZjVlMDZmNTMxMmY5OTQw
NDFkMGZiMDg0ZjUxZDhhZmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9pb3MvRmluZENvbnRyb2xsZXJJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRDb250cm9sbGVySU9TLm1tCkBAIC0zOCw2ICszOCw3IEBA
CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5o
PgogI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
SW1hZ2VPdmVybGF5Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KICNpbXBvcnQgPFdlYkNv
cmUvUGFnZU92ZXJsYXlDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhdGhVdGlsaXRp
ZXMuaD4KQEAgLTU0LDcgKzU1LDcgQEAgY29uc3QgaW50IHRvdGFsVmVydGljYWxNYXJnaW4gPSAx
Owogc3RhdGljIE9wdGlvblNldDxUZXh0SW5kaWNhdG9yT3B0aW9uPiBmaW5kVGV4dEluZGljYXRv
ck9wdGlvbnMoY29uc3QgRnJhbWUmIGZyYW1lKQogewogICAgIE9wdGlvblNldDxUZXh0SW5kaWNh
dG9yT3B0aW9uPiBvcHRpb25zIHsgVGV4dEluZGljYXRvck9wdGlvbjo6SW5jbHVkZU1hcmdpbklm
UmFuZ2VNYXRjaGVzU2VsZWN0aW9uLCBUZXh0SW5kaWNhdG9yT3B0aW9uOjpEb05vdENsaXBUb1Zp
c2libGVSZWN0IH07Ci0gICAgaWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9IGZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnJhbmdlKCk7IHNlbGVjdGVkUmFuZ2UgJiYgSFRNTEVsZW1lbnQ6Omlz
SW5zaWRlSW1hZ2VPdmVybGF5KCpzZWxlY3RlZFJhbmdlKSkKKyAgICBpZiAoYXV0byBzZWxlY3Rl
ZFJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucmFuZ2UoKTsgc2VsZWN0ZWRS
YW5nZSAmJiBJbWFnZU92ZXJsYXk6OmlzSW5zaWRlT3ZlcmxheSgqc2VsZWN0ZWRSYW5nZSkpCiAg
ICAgICAgIG9wdGlvbnMuYWRkKHsgVGV4dEluZGljYXRvck9wdGlvbjo6UGFpbnRBbGxDb250ZW50
LCBUZXh0SW5kaWNhdG9yT3B0aW9uOjpQYWludEJhY2tncm91bmRzIH0pOwogICAgIHJldHVybiBv
cHRpb25zOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L1dlYlBhZ2VJT1MubW0KaW5kZXggYTk3MTVkZTM0MDFhNDBlMGJlOGQ3OGNjYTI2YWMxYjUyZjkw
ODI0YS4uMjIzOWVjYzUzNTE4MDc1MDUxNWQwZTRmNGYwM2E3Yjc1ZDE4NWI4MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAg
LTEwOCw2ICsxMDgsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0hpc3RvcnlJdGVtLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hpdFRlc3RS
ZXN1bHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSW1hZ2VPdmVybGF5Lmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0lucHV0TW9kZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0xpYldlYlJUQ1Byb3ZpZGVyLmg+CkBAIC0xMzQ5LDcgKzEzNTAsNyBAQCBz
dGF0aWMgSW50UG9pbnQgY29uc3RyYWluUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50LCBjb25z
dCBGcmFtZSYgZnJhbWUsIGNvbnN0CiBzdGF0aWMgYm9vbCBpbnNpZGVJbWFnZU92ZXJsYXkoY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikKIHsKICAgICBSZWZQdHIgY29udGFpbmVyID0g
cG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJOb2RlKCk7Ci0gICAgcmV0dXJuIGNv
bnRhaW5lciAmJiBIVE1MRWxlbWVudDo6aXNJbnNpZGVJbWFnZU92ZXJsYXkoKmNvbnRhaW5lcik7
CisgICAgcmV0dXJuIGNvbnRhaW5lciAmJiBJbWFnZU92ZXJsYXk6OmlzSW5zaWRlT3ZlcmxheSgq
Y29udGFpbmVyKTsKIH0KIAogc3RhdGljIHN0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGV4cGFu
ZEZvckltYWdlT3ZlcmxheShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCkBAIC0xNTg2LDcgKzE1
ODcsNyBAQCBzdGF0aWMgc3RkOjpwYWlyPHN0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+LCBTZWxl
Y3Rpb25XYXNGbGlwcGVkPiByYW5nZUZvclBvaW50SQogICAgICAgICAgICAgcmFuZ2UgPSBtYWtl
U2ltcGxlUmFuZ2UocmVzdWx0LCBzZWxlY3Rpb25FbmQpOwogICAgIH0KICAgICAKLSAgICBpZiAo
cmFuZ2UgJiYgSFRNTEVsZW1lbnQ6OmlzSW5zaWRlSW1hZ2VPdmVybGF5KCpyYW5nZSkpCisgICAg
aWYgKHJhbmdlICYmIEltYWdlT3ZlcmxheTo6aXNJbnNpZGVPdmVybGF5KCpyYW5nZSkpCiAgICAg
ICAgIHJldHVybiB7IGV4cGFuZEZvckltYWdlT3ZlcmxheSgqcmFuZ2UpLCBTZWxlY3Rpb25XYXNG
bGlwcGVkOjpObyB9OwogCiAgICAgcmV0dXJuIHsgcmFuZ2UsIHNlbGVjdGlvbkZsaXBwZWQgfTsK
QEAgLTI4MDUsNyArMjgwNiw3IEBAIHN0YXRpYyB2b2lkIHZpZGVvUG9zaXRpb25JbmZvcm1hdGlv
bihXZWJQYWdlJiBwYWdlLCBIVE1MVmlkZW9FbGVtZW50JiBlbGVtZW50LCBjCiAKIHN0YXRpYyBS
ZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gaG9zdFZpZGVvRWxlbWVudElnbm9yaW5nSW1hZ2VPdmVy
bGF5KE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKEhUTUxFbGVtZW50Ojppc0luc2lkZUltYWdlT3Zl
cmxheShub2RlKSkKKyAgICBpZiAoSW1hZ2VPdmVybGF5Ojppc0luc2lkZU92ZXJsYXkobm9kZSkp
CiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpZiAoaXM8SFRNTFZpZGVvRWxlbWVudD4obm9k
ZSkpCkBAIC0yODU4LDcgKzI4NTksNyBAQCBzdGF0aWMgdm9pZCBlbGVtZW50UG9zaXRpb25JbmZv
cm1hdGlvbihXZWJQYWdlJiBwYWdlLCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBJbgogCiAgICAg
aW5mby5pc0VsZW1lbnQgPSB0cnVlOwogICAgIGluZm8uaWRBdHRyaWJ1dGUgPSBlbGVtZW50Lmdl
dElkQXR0cmlidXRlKCk7Ci0gICAgaW5mby5pc0ltYWdlT3ZlcmxheVRleHQgPSBIVE1MRWxlbWVu
dDo6aXNJbWFnZU92ZXJsYXlUZXh0KGlubmVyTm9uU2hhcmVkTm9kZSk7CisgICAgaW5mby5pc0lt
YWdlT3ZlcmxheVRleHQgPSBJbWFnZU92ZXJsYXk6OmlzT3ZlcmxheVRleHQoaW5uZXJOb25TaGFy
ZWROb2RlKTsKIAogICAgIGluZm8udGl0bGUgPSBlbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oSFRNTE5hbWVzOjp0aXRsZUF0dHIpLnN0cmluZygpOwogICAgIGlmIChsaW5r
RWxlbWVudCAmJiBpbmZvLnRpdGxlLmlzRW1wdHkoKSkKQEAgLTI5MDcsNyArMjkwOCw3IEBAIHN0
YXRpYyB2b2lkIGVsZW1lbnRQb3NpdGlvbkluZm9ybWF0aW9uKFdlYlBhZ2UmIHBhZ2UsIEVsZW1l
bnQmIGVsZW1lbnQsIGNvbnN0IEluCiAKICNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCiAgICAg
aWYgKGluZm8uaXNJbWFnZU92ZXJsYXlUZXh0ICYmIGlubmVyTm9uU2hhcmVkTm9kZS0+c2hhZG93
SG9zdCgpID09ICZlbGVtZW50ICYmIGlzPEhUTUxFbGVtZW50PihlbGVtZW50KSkgewotICAgICAg
ICBpZiAoUmVmIGh0bWxFbGVtZW50ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGVsZW1lbnQpOyBo
dG1sRWxlbWVudC0+aGFzSW1hZ2VPdmVybGF5KCkpCisgICAgICAgIGlmIChSZWYgaHRtbEVsZW1l
bnQgPSBkb3duY2FzdDxIVE1MRWxlbWVudD4oZWxlbWVudCk7IEltYWdlT3ZlcmxheTo6aGFzT3Zl
cmxheShodG1sRWxlbWVudC5nZXQoKSkpCiAgICAgICAgICAgICBkYXRhRGV0ZWN0b3JJbWFnZU92
ZXJsYXlQb3NpdGlvbkluZm9ybWF0aW9uKGh0bWxFbGVtZW50LmdldCgpLCByZXF1ZXN0LCBpbmZv
KTsKICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggMWUyM2FmZmVkZWNhZmRiY2RhMzEwMzhjOTFiZjgw
OGRhYTg4M2VjMS4uYTNjZmI1YTc5Yzk0ODY1N2ZhMDk3MGE4MjVlZDZlZmVkYjJjNDBhMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMu
bW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMu
bW0KQEAgLTczLDYgKzczLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvSFRNTENvbnZlcnRlci5oPgog
I2ltcG9ydCA8V2ViQ29yZS9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0hpdFRlc3RSZXN1bHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSW1hZ2VPdmVybGF5Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvTUlNRVR5
cGVSZWdpc3RyeS5oPgogI2ltcG9ydCA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4K
QEAgLTg4NSw3ICs4ODYsNyBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1JbW1lZGlhdGVBY3Rpb25I
aXRUZXN0QXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IGxvY2F0aQogCiAgICAgYXV0byBp
bmRpY2F0b3JPcHRpb25zID0gWyZdKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkgewogICAgICAg
ICBPcHRpb25TZXQ8VGV4dEluZGljYXRvck9wdGlvbj4gb3B0aW9ucyB7IFRleHRJbmRpY2F0b3JP
cHRpb246OlVzZUJvdW5kaW5nUmVjdEFuZFBhaW50QWxsQ29udGVudEZvckNvbXBsZXhSYW5nZXMg
fTsKLSAgICAgICAgaWYgKEhUTUxFbGVtZW50Ojppc0luc2lkZUltYWdlT3ZlcmxheShyYW5nZSkp
CisgICAgICAgIGlmIChJbWFnZU92ZXJsYXk6OmlzSW5zaWRlT3ZlcmxheShyYW5nZSkpCiAgICAg
ICAgICAgICBvcHRpb25zLmFkZCh7IFRleHRJbmRpY2F0b3JPcHRpb246OlBhaW50QWxsQ29udGVu
dCwgVGV4dEluZGljYXRvck9wdGlvbjo6UGFpbnRCYWNrZ3JvdW5kcyB9KTsKICAgICAgICAgcmV0
dXJuIG9wdGlvbnM7CiAgICAgfTsK
</data>
<flag name="commit-queue"
          id="468873"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>