<?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>224708</bug_id>
          
          <creation_ts>2021-04-16 18:10:47 -0700</creation_ts>
          <short_desc>Deploy Ref/RefPtr in Editor</short_desc>
          <delta_ts>2021-04-24 15:08:30 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</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="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>kangil.han</cc>
    
    <cc>mifenton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1751352</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-16 18:10:47 -0700</bug_when>
    <thetext>Deploy smart pointers in Editor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751356</commentid>
    <comment_count>1</comment_count>
      <attachid>426305</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-16 18:27:26 -0700</bug_when>
    <thetext>Created attachment 426305
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751360</commentid>
    <comment_count>2</comment_count>
      <attachid>426308</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-16 18:34:32 -0700</bug_when>
    <thetext>Created attachment 426308
Fixed release builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751361</commentid>
    <comment_count>3</comment_count>
      <attachid>426308</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-04-16 18:35:45 -0700</bug_when>
    <thetext>Comment on attachment 426308
Fixed release builds

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

r=mews

&gt; Source/WebCore/editing/Editor.cpp:3674
&gt; +    if (auto startNode = makeRefPtr(range.startContainer()); startNode-&gt;hasEditableStyle())

Nit - I think this one can be `makeRef`.

&gt; Source/WebKit/WebProcess/WebPage/WebPage.cpp:1196
&gt; +    Editor&amp; editor = frame-&gt;editor();

Nit - auto&amp;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751364</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-16 18:56:01 -0700</bug_when>
    <thetext>Thanks for the review!

(In reply to Wenson Hsieh from comment #3)
&gt; Comment on attachment 426308 [details]
&gt; Fixed release builds
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=426308&amp;action=review
&gt; 
&gt; r=mews
&gt; 
&gt; &gt; Source/WebCore/editing/Editor.cpp:3674
&gt; &gt; +    if (auto startNode = makeRefPtr(range.startContainer()); startNode-&gt;hasEditableStyle())
&gt; 
&gt; Nit - I think this one can be `makeRef`.

Fixed.

&gt; &gt; Source/WebKit/WebProcess/WebPage/WebPage.cpp:1196
&gt; &gt; +    Editor&amp; editor = frame-&gt;editor();
&gt; 
&gt; Nit - auto&amp;?

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751366</commentid>
    <comment_count>5</comment_count>
      <attachid>426310</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-16 18:59:04 -0700</bug_when>
    <thetext>Created attachment 426310
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751370</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-04-16 19:33:02 -0700</bug_when>
    <thetext>Committed r276191 (236673@main): &lt;https://commits.webkit.org/236673@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 426310.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753938</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-04-24 15:08:30 -0700</bug_when>
    <thetext>&lt;rdar://problem/77110110&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426305</attachid>
            <date>2021-04-16 18:27:26 -0700</date>
            <delta_ts>2021-04-16 18:36:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224708-20210416182725.patch</filename>
            <type>text/plain</type>
            <size>43276</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2MTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDkxZmY2MzA1NDc0YzZl
N2Y5MzAyYzM3MTliOGU0NzA0ZmE0NTlkMS4uY2Q3ZDA4MjI5N2ZlODM3MzliMGEyM2M4OTI3YjQ2
NWMyOWU5NTllOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDIxLTA0LTE2ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIERlcGxveSBSRWYvUmVmUHRy
IGluIEVkaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI0NzA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgRGVwbG95ZWQgc21hcnQgcG9pbnRlcnMgaW4gV2ViQ29yZTo6RWRpdG9yLgorCisgICAgICAg
IEFsc28gZGVwbG95ZWQgU2NyaXB0RGlzYWxsb3dlZFNjb3BlIGFyb3VuZCB0aGUgY29kZSB3aGlj
aCBhY2Nlc3NlcyB0aGUgcmVuZGVyIHRyZWUuCisKKyAgICAgICAgKiBkb20vUG9zaXRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmNvbnRhaW5lck9yUGFyZW50RWxlbWVudCBj
b25zdCk6IEFkZGVkLgorICAgICAgICAqIGRvbS9Qb3NpdGlvbi5oOgorICAgICAgICAqIGVkaXRp
bmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uRm9yQ29t
bWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlQXNQbGFpblRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZUFzRnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpzaG91bGRJbnNlcnRGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpoYXNCaWRpU2VsZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2Vs
ZWN0aW9uVW5vcmRlcmVkTGlzdFN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6c2VsZWN0aW9uT3JkZXJlZExpc3RTdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6Om5vdGlmeVRleHRGcm9tQ29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3
aWxsQXBwbHlFZGl0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbGll
ZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNl
bmRpbmdUZXh0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwZXJmb3JtQ3V0T3JD
b3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2ltcGxpZnlNYXJrdXApOiBSZXBsYWNl
ZCB0aGUgbWFudWFsIHRyZWUgdHJhdmVyc2FsIGJ5IHRyZWVPcmRlcih+KS4gCisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmNvcHlJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNl
dEJhc2VXcml0aW5nRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YmFzZVdy
aXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OnNldENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2
YW5jZVRvTmV4dE1pc3NwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01p
c3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKTogVXNlIGNvbnRhaW5lck9yUGFyZW50RWxlbWVu
dC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEZvciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRC
YWRHcmFtbWFySW5SYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQW5kUmVw
bGFjZUZvcik6CisgICAgICAgIChXZWJDb3JlOjpzY2FuRm9yVGVsZXBob25lTnVtYmVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJz
KTogUmVzdHJ1Y3V0ZWQgdGhlIGNvZGUgd2l0aCBtYWtlU2NvcGVFeGl0CisgICAgICAgIHRvIGV4
aXQgZWFybHkgaW5zdGVhZCBvZiBuZXN0aW5nIGlmJ3MuIAorICAgICAgICAoV2ViQ29yZTo6Zmlu
ZEZpcnN0TWFya2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25TdGFy
dEhhc01hcmtlckZvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlc29sdmVU
ZXh0Q2hlY2tpbmdUeXBlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnN0cmluZ0Zv
ckNhbmRpZGF0ZVJlcXVlc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250
QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpw
cm9taXNlZEF0dGFjaG1lbnRJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c3R5bGVG
b3JTZWxlY3Rpb25TdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZvbnRGb3JTZWxl
Y3Rpb24pOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAgICogcGFnZS9EcmFn
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZGlzcGF0
Y2hUZXh0SW5wdXRFdmVudEZvcik6CisKIDIwMjEtMDQtMTYgIENvbW1pdCBRdWV1ZSAgPGNvbW1p
dC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjcz
NzMzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwppbmRleCA1YTA5ZjdhN2E5Mzk3OTlmN2ZiNTA5Y2FkYmI0YTE4NGM2MGU5MTU1
Li45N2M5MzY5MTA5MjA3MjVlNWM0YzkyZDc2ZGI2NTI2MWY4ZTg3NTQwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE3IEBACisyMDIxLTA0LTE2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3Jn
PgorCisgICAgICAgIERlcGxveSBSRWYvUmVmUHRyIGluIEVkaXRvcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0NzA4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmVkaXRvclN0YXRlIGNvbnN0KToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OnJlcXVlc3RBdXRvY29ycmVjdGlvbkRhdGEpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6Zm9udEF0U2VsZWN0aW9uKToKKwogMjAyMS0wNC0xNiAgQWRhIENoYW4gIDxhZGEu
Y2hhbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIFdLVUlEZWxlZ2F0ZSBTUEkgZm9yIHN0YXJ0
aW5nIFhSIHNlc3Npb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA5YjNjNDdlNThm
NDhlNjkxMWFlZjVkODUyNDExMzgyNzc2OWI3OTM1Li5hNWUxNmIwN2UxMDFmYTExNjE5ZjJmM2Zh
ZDNmMzQ1MWRmNDNmZjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTcgQEAKKzIwMjEtMDQtMTYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAg
ICAgICAgRGVwbG95IFJFZi9SZWZQdHIgaW4gRWRpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjQ3MDgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAg
ICgtW1dlYkZyYW1lIGZvbnRGb3JTZWxlY3Rpb246XSk6CisgICAgICAgICogV2ViVmlldy9XZWJI
VE1MVmlldy5tbToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3VwZGF0ZUZvbnRQYW5lbF0pOgor
ICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyB1cGRhdGVU
ZXh0VG91Y2hCYXJdKToKKwogMjAyMS0wNC0xNSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVl
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNzYxMDcuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL1Bvc2l0aW9uLmNwcAppbmRleCBlYjZjZGYzZmE3Y2E3ODIyYmM4MWVkZTZhZDUwM2Y2
ZWI3MmMwYTRiLi5mZTdjYjU0YTc5YjIxOTE4YjgwMjQzY2M2NjdmNmM4NTQ3YmRiYzk2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Qb3NpdGlvbi5jcHAKQEAgLTE5Nyw2ICsxOTcsMTYgQEAgVGV4dCogUG9zaXRpb246
OmNvbnRhaW5lclRleHQoKSBjb25zdAogICAgIHJldHVybiBudWxscHRyOwogfQogCitFbGVtZW50
KiBQb3NpdGlvbjo6Y29udGFpbmVyT3JQYXJlbnRFbGVtZW50KCkgY29uc3QKK3sKKyAgICBhdXRv
KiBjb250YWluZXIgPSBjb250YWluZXJOb2RlKCk7CisgICAgaWYgKCFjb250YWluZXIpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChpczxFbGVtZW50Pihjb250YWluZXIpKQorICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4oY29udGFpbmVyKTsKKyAgICByZXR1cm4gY29u
dGFpbmVyLT5wYXJlbnRFbGVtZW50KCk7Cit9CisKIGludCBQb3NpdGlvbjo6Y29tcHV0ZU9mZnNl
dEluQ29udGFpbmVyTm9kZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2FuY2hvck5vZGUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Qb3NpdGlvbi5oCmluZGV4IGE0NDgxM2E2NjdjMTc0YTNmNTIyNjJlOWI0YmYzYWRkNDllMGFh
YzkuLmM3NDkwOWRmOGVjZGRhYzI3OGI2N2ZhNzU3MWVlYzE5NWYxYmI4NTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Q
b3NpdGlvbi5oCkBAIC04Myw2ICs4Myw3IEBAIHB1YmxpYzoKICAgICAvLyB3aWxsIHJldHVybiBp
bWctPnBhcmVudE5vZGUoKSBhbmQgaW1nLT5jb21wdXRlTm9kZUluZGV4KCkgZnJvbSB0aGVzZSBm
dW5jdGlvbnMuCiAgICAgV0VCQ09SRV9FWFBPUlQgTm9kZSogY29udGFpbmVyTm9kZSgpIGNvbnN0
OyAvLyBudWxsIGZvciBhIGJlZm9yZS9hZnRlciBwb3NpdGlvbiBhbmNob3JlZCB0byBhIG5vZGUg
d2l0aCBubyBwYXJlbnQKICAgICBUZXh0KiBjb250YWluZXJUZXh0KCkgY29uc3Q7CisgICAgRWxl
bWVudCogY29udGFpbmVyT3JQYXJlbnRFbGVtZW50KCkgY29uc3Q7CiAKICAgICBpbnQgY29tcHV0
ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpIGNvbnN0OyAgLy8gTyhuKSBmb3IgYmVmb3JlL2FmdGVy
LWFuY2hvcmVkIHBvc2l0aW9ucywgTygxKSBmb3IgcGFyZW50LWFuY2hvcmVkIHBvc2l0aW9ucwog
ICAgIFdFQkNPUkVfRVhQT1JUIFBvc2l0aW9uIHBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpIGNv
bnN0OyAvLyBDb252ZW5pZW5jZSBtZXRob2QgZm9yIERPTSBwb3NpdGlvbnMgdGhhdCBhbHNvIGZp
eGVzIHVwIHNvbWUgcG9zaXRpb25zIGZvciBlZGl0aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAKaW5kZXggNWQzNGIyM2E3NDZkOTFhYTYxN2RmMTEwOTA3NzAxYTZlYTc0ZDJhZi4uZWM0ZDRm
YjA4ZGMwNDY1YTMzODRkYmU0MjdhYjE3MGJhMDIwN2ZiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcApAQCAtMTIwLDYgKzEyMCw3IEBACiAjaW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVk
ZSA8cGFsL0ZpbGVTaXplRm9ybWF0dGVyLmg+CiAjaW5jbHVkZSA8cGFsL3RleHQvS2lsbFJpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KICNpbmNsdWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4K
ICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCkBAIC0yNzMsMTEgKzI3
NCwxMCBAQCBWaXNpYmxlU2VsZWN0aW9uIEVkaXRvcjo6c2VsZWN0aW9uRm9yQ29tbWFuZChFdmVu
dCogZXZlbnQpCiAgICAgICAgIHJldHVybiBzZWxlY3Rpb247CiAgICAgLy8gSWYgdGhlIHRhcmdl
dCBpcyBhIHRleHQgY29udHJvbCwgYW5kIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBpcyBvdXRzaWRl
IG9mIGl0cyBzaGFkb3cgdHJlZSwKICAgICAvLyB0aGVuIHVzZSB0aGUgc2F2ZWQgc2VsZWN0aW9u
IGZvciB0aGF0IHRleHQgY29udHJvbC4KLSAgICBpZiAoaXM8RWxlbWVudD4oZXZlbnQtPnRhcmdl
dCgpKSAmJiBkb3duY2FzdDxFbGVtZW50PigqZXZlbnQtPnRhcmdldCgpKS5pc1RleHRGaWVsZCgp
KSB7Ci0gICAgICAgIGF1dG8mIHRhcmdldCA9IGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50PigqZXZlbnQtPnRhcmdldCgpKTsKKyAgICBpZiAoYXV0byB0YXJnZXQgPSBtYWtlUmVm
UHRyKGV2ZW50LT50YXJnZXQoKSk7IGlzPEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pih0YXJn
ZXQpICYmIGRvd25jYXN0PEVsZW1lbnQ+KCp0YXJnZXQpLmlzVGV4dEZpZWxkKCkpIHsKICAgICAg
ICAgYXV0byBzdGFydCA9IHNlbGVjdGlvbi5zdGFydCgpOwotICAgICAgICBpZiAoc3RhcnQuaXNO
dWxsKCkgfHwgJnRhcmdldCAhPSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2woc3RhcnQpKSB7Ci0g
ICAgICAgICAgICBpZiAoYXV0byByYW5nZSA9IHRhcmdldC5zZWxlY3Rpb24oKSkKKyAgICAgICAg
aWYgKHN0YXJ0LmlzTnVsbCgpIHx8IHRhcmdldCAhPSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wo
c3RhcnQpKSB7CisgICAgICAgICAgICBpZiAoYXV0byByYW5nZSA9IGRvd25jYXN0PEhUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50PigqdGFyZ2V0KS5zZWxlY3Rpb24oKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4geyAqcmFuZ2UsIEFmZmluaXR5OjpEb3duc3RyZWFtLCBzZWxlY3Rpb24uaXNEaXJl
Y3Rpb25hbCgpIH07CiAgICAgICAgIH0KICAgICB9CkBAIC02MDgsNyArNjA4LDcgQEAgdm9pZCBF
ZGl0b3I6OmNsZWFyVGV4dCgpCiAKIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUGxhaW5UZXh0KGNvbnN0
IFN0cmluZyYgcGFzdGluZ1RleHQsIGJvb2wgc21hcnRSZXBsYWNlKQogewotICAgIEVsZW1lbnQq
IHRhcmdldCA9IGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKTsKKyAgICBhdXRvIHRhcmdl
dCA9IGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKTsKICAgICBpZiAoIXRhcmdldCkKICAg
ICAgICAgcmV0dXJuOwogICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChUZXh0RXZlbnQ6OmNyZWF0
ZUZvclBsYWluVGV4dFBhc3RlKGRvY3VtZW50KCkud2luZG93UHJveHkoKSwgcGFzdGluZ1RleHQs
IHNtYXJ0UmVwbGFjZSkpOwpAQCAtNjE2LDcgKzYxNiw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZUFz
UGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgcGFzdGluZ1RleHQsIGJvb2wgc21hcnRSZXBsYWNlKQog
CiB2b2lkIEVkaXRvcjo6cGFzdGVBc0ZyYWdtZW50KFJlZjxEb2N1bWVudEZyYWdtZW50PiYmIHBh
c3RpbmdGcmFnbWVudCwgYm9vbCBzbWFydFJlcGxhY2UsIGJvb2wgbWF0Y2hTdHlsZSwgTWFpbEJs
b2NrcXVvdGVIYW5kbGluZyByZXNwZWN0c01haWxCbG9ja3F1b3RlKQogewotICAgIEVsZW1lbnQq
IHRhcmdldCA9IGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKTsKKyAgICBhdXRvIHRhcmdl
dCA9IGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKTsKICAgICBpZiAoIXRhcmdldCkKICAg
ICAgICAgcmV0dXJuOwogICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChUZXh0RXZlbnQ6OmNyZWF0
ZUZvckZyYWdtZW50UGFzdGUoZG9jdW1lbnQoKS53aW5kb3dQcm94eSgpLCBXVEZNb3ZlKHBhc3Rp
bmdGcmFnbWVudCksIHNtYXJ0UmVwbGFjZSwgbWF0Y2hTdHlsZSwgcmVzcGVjdHNNYWlsQmxvY2tx
dW90ZSkpOwpAQCAtNjYwLDcgKzY2MCw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRGcmFn
bWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgY29uc3QgT3B0aW9uYWw8U2ltCiAgICAg
aWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGF1dG8qIGNo
aWxkID0gZnJhZ21lbnQuZmlyc3RDaGlsZCgpOworICAgIGF1dG8gY2hpbGQgPSBtYWtlUmVmUHRy
KGZyYWdtZW50LmZpcnN0Q2hpbGQoKSk7CiAgICAgaWYgKGlzPENoYXJhY3RlckRhdGE+KGNoaWxk
KSAmJiBmcmFnbWVudC5sYXN0Q2hpbGQoKSA9PSBjaGlsZCkKICAgICAgICAgcmV0dXJuIGNsaWVu
dCgpLT5zaG91bGRJbnNlcnRUZXh0KGRvd25jYXN0PENoYXJhY3RlckRhdGE+KCpjaGlsZCkuZGF0
YSgpLCByZXBsYWNpbmdET01SYW5nZSwgZ2l2ZW5BY3Rpb24pOwogCkBAIC03MTYsNyArNzE2LDcg
QEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRGcmFn
bWVudCYgZnJhZ21lbnQsIFNlbGVjdFJlcGwKICAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIE5vZGUqIG5vZGVUb0NoZWNr
ID0gc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICBhdXRvIG5vZGVUb0NoZWNr
ID0gbWFrZVJlZlB0cihzZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpKTsKICAgICBpZiAo
IW5vZGVUb0NoZWNrKQogICAgICAgICByZXR1cm47CiAKQEAgLTc3MSw5ICs3NzEsOSBAQCBib29s
IEVkaXRvcjo6c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiYgcgogdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50
cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24pCiB7CiAgICAgaWYgKEFY
T2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKLSAgICAgICAgTm9kZSogbm9k
ZSA9IGVuZGluZ1NlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgICAgIGF1
dG8gbm9kZSA9IG1ha2VSZWZQdHIoZW5kaW5nU2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5v
ZGUoKSk7CiAgICAgICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50KCkuZXhp
c3RpbmdBWE9iamVjdENhY2hlKCkpCi0gICAgICAgICAgICBjYWNoZS0+cG9zdE5vdGlmaWNhdGlv
bihub2RlLCBBWE9iamVjdENhY2hlOjpBWFZhbHVlQ2hhbmdlZCwgUG9zdFRhcmdldDo6T2JzZXJ2
YWJsZVBhcmVudCk7CisgICAgICAgICAgICBjYWNoZS0+cG9zdE5vdGlmaWNhdGlvbihub2RlLmdl
dCgpLCBBWE9iamVjdENhY2hlOjpBWFZhbHVlQ2hhbmdlZCwgUG9zdFRhcmdldDo6T2JzZXJ2YWJs
ZVBhcmVudCk7CiAgICAgfQogCiAgICAgdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcodHJ1ZSk7CkBAIC03ODcsMTEgKzc4NywxMSBAQCBib29sIEVkaXRvcjo6aGFzQmlkaVNl
bGVjdGlvbigpIGNvbnN0CiAgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIE5vZGUqIHN0YXJ0Tm9kZTsKKyAgICBSZWZQ
dHI8Tm9kZT4gc3RhcnROb2RlOwogICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFu
Z2UoKSkgewogICAgICAgICBzdGFydE5vZGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCk7Ci0gICAgICAgIE5v
ZGUqIGVuZE5vZGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLnVw
c3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKTsKLSAgICAgICAgaWYgKGVuY2xvc2luZ0Jsb2NrKHN0
YXJ0Tm9kZSkgIT0gZW5jbG9zaW5nQmxvY2soZW5kTm9kZSkpCisgICAgICAgIGF1dG8gZW5kTm9k
ZSA9IG1ha2VSZWZQdHIobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKS51
cHN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCkpOworICAgICAgICBpZiAoZW5jbG9zaW5nQmxvY2so
c3RhcnROb2RlLmdldCgpKSAhPSBlbmNsb3NpbmdCbG9jayhlbmROb2RlLmdldCgpKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UKICAgICAgICAgc3RhcnROb2RlID0gbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZh
bGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CkBAIC03OTksNiArNzk5LDggQEAgYm9vbCBFZGl0b3I6
Omhhc0JpZGlTZWxlY3Rpb24oKSBjb25zdAogICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKKyAgICBTY3JpcHREaXNhbGxvd2VkU2NvcGU6OkluTWFpblRocmVhZCBz
Y3JpcHREaXNhbGxvd2VkU2NvcGU7CisKICAgICBhdXRvIHJlbmRlcmVyID0gc3RhcnROb2RlLT5y
ZW5kZXJlcigpOwogICAgIHdoaWxlIChyZW5kZXJlciAmJiAhaXM8UmVuZGVyQmxvY2tGbG93Pigq
cmVuZGVyZXIpKQogICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJlbnQoKTsKQEAgLTgx
OCw4ICs4MjAsOCBAQCBUcmlTdGF0ZSBFZGl0b3I6OnNlbGVjdGlvblVub3JkZXJlZExpc3RTdGF0
ZSgpIGNvbnN0CiAgICAgICAgIGlmIChlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFnKSkKICAgICAgICAgICAgIHJl
dHVybiBUcmlTdGF0ZTo6VHJ1ZTsKICAgICB9IGVsc2UgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuaXNSYW5nZSgpKSB7Ci0gICAgICAgIGF1dG8qIHN0YXJ0Tm9kZSA9IGVuY2xvc2luZ0VsZW1l
bnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgdWxU
YWcpOwotICAgICAgICBhdXRvKiBlbmROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSwgdWxUYWcpOworICAgICAgICBh
dXRvIHN0YXJ0Tm9kZSA9IG1ha2VSZWZQdHIoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCB1bFRhZykpOworICAgICAgICBh
dXRvIGVuZE5vZGUgPSBtYWtlUmVmUHRyKGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCksIHVsVGFnKSk7CiAgICAgICAgIGlmIChz
dGFydE5vZGUgJiYgZW5kTm9kZSAmJiBzdGFydE5vZGUgPT0gZW5kTm9kZSkKICAgICAgICAgICAg
IHJldHVybiBUcmlTdGF0ZTo6VHJ1ZTsKICAgICB9CkBAIC04MzMsOCArODM1LDggQEAgVHJpU3Rh
dGUgRWRpdG9yOjpzZWxlY3Rpb25PcmRlcmVkTGlzdFN0YXRlKCkgY29uc3QKICAgICAgICAgaWYg
KGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuc3RhcnQoKSwgb2xUYWcpKQogICAgICAgICAgICAgcmV0dXJuIFRyaVN0YXRlOjpUcnVlOwog
ICAgIH0gZWxzZSBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKLSAgICAg
ICAgYXV0byogc3RhcnROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRhZyk7Ci0gICAgICAgIGF1dG8qIGVu
ZE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmVuZCgpLCBvbFRhZyk7CisgICAgICAgIGF1dG8gc3RhcnROb2RlID0gbWFrZVJl
ZlB0cihlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnN0YXJ0KCksIG9sVGFnKSk7CisgICAgICAgIGF1dG8gZW5kTm9kZSA9IG1ha2VSZWZQ
dHIoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5lbmQoKSwgb2xUYWcpKTsKICAgICAgICAgaWYgKHN0YXJ0Tm9kZSAmJiBlbmROb2RlICYm
IHN0YXJ0Tm9kZSA9PSBlbmROb2RlKQogICAgICAgICAgICAgcmV0dXJuIFRyaVN0YXRlOjpUcnVl
OwogICAgIH0KQEAgLTkyMSw5ICs5MjMsOSBAQCB2b2lkIEVkaXRvcjo6Y2xlYXJMYXN0RWRpdENv
bW1hbmQoKQogICAgIG1fbGFzdEVkaXRDb21tYW5kID0gbnVsbHB0cjsKIH0KIAotRWxlbWVudCog
RWRpdG9yOjpmaW5kRXZlbnRUYXJnZXRGcm9tKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbikgY29uc3QKK1JlZlB0cjxFbGVtZW50PiBFZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb20o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKSBjb25zdAogewotICAgIEVsZW1lbnQq
IHRhcmdldCA9IHNlbGVjdGlvbi5zdGFydCgpLmVsZW1lbnQoKTsKKyAgICBhdXRvIHRhcmdldCA9
IG1ha2VSZWZQdHIoc2VsZWN0aW9uLnN0YXJ0KCkuZWxlbWVudCgpKTsKICAgICBpZiAoIXRhcmdl
dCkKICAgICAgICAgdGFyZ2V0ID0gZG9jdW1lbnQoKS5ib2R5T3JGcmFtZXNldCgpOwogICAgIGlm
ICghdGFyZ2V0KQpAQCAtOTMyLDcgKzkzNCw3IEBAIEVsZW1lbnQqIEVkaXRvcjo6ZmluZEV2ZW50
VGFyZ2V0RnJvbShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNvbnN0CiAgICAg
cmV0dXJuIHRhcmdldDsKIH0KIAotRWxlbWVudCogRWRpdG9yOjpmaW5kRXZlbnRUYXJnZXRGcm9t
U2VsZWN0aW9uKCkgY29uc3QKK1JlZlB0cjxFbGVtZW50PiBFZGl0b3I6OmZpbmRFdmVudFRhcmdl
dEZyb21TZWxlY3Rpb24oKSBjb25zdAogewogICAgIHJldHVybiBmaW5kRXZlbnRUYXJnZXRGcm9t
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogfQpAQCAtMTA2OCw4ICsxMDcw
LDggQEAgdm9pZCBFZGl0b3I6Om91dGRlbnQoKQogCiBzdGF0aWMgdm9pZCBub3RpZnlUZXh0RnJv
bUNvbnRyb2xzKEVsZW1lbnQqIHN0YXJ0Um9vdCwgRWxlbWVudCogZW5kUm9vdCkKIHsKLSAgICBI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCogc3RhcnRpbmdUZXh0Q29udHJvbCA9IGVuY2xvc2lu
Z1RleHRGb3JtQ29udHJvbChmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoc3RhcnRSb290KSk7
Ci0gICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIGVuZGluZ1RleHRDb250cm9sID0gZW5j
bG9zaW5nVGV4dEZvcm1Db250cm9sKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShlbmRSb290
KSk7CisgICAgYXV0byBzdGFydGluZ1RleHRDb250cm9sID0gIG1ha2VSZWZQdHIoZW5jbG9zaW5n
VGV4dEZvcm1Db250cm9sKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShzdGFydFJvb3QpKSk7
CisgICAgYXV0byBlbmRpbmdUZXh0Q29udHJvbCA9IG1ha2VSZWZQdHIoZW5jbG9zaW5nVGV4dEZv
cm1Db250cm9sKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShlbmRSb290KSkpOwogICAgIGlm
IChzdGFydGluZ1RleHRDb250cm9sKQogICAgICAgICBzdGFydGluZ1RleHRDb250cm9sLT5kaWRF
ZGl0SW5uZXJUZXh0VmFsdWUoKTsKICAgICBpZiAoZW5kaW5nVGV4dENvbnRyb2wgJiYgc3RhcnRp
bmdUZXh0Q29udHJvbCAhPSBlbmRpbmdUZXh0Q29udHJvbCkKQEAgLTEwOTksNyArMTEwMSw3IEBA
IGJvb2wgRWRpdG9yOjp3aWxsQXBwbHlFZGl0aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5kJiBjb21t
YW5kLCBWZWN0b3I8UmVmUHRyPFN0YXRpCiAgICAgaWYgKCFjb21tYW5kLnNob3VsZERpc3BhdGNo
SW5wdXRFdmVudHMoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBhdXRvKiBjb21wb3Np
dGlvbiA9IGNvbW1hbmQuY29tcG9zaXRpb24oKTsKKyAgICBhdXRvIGNvbXBvc2l0aW9uID0gbWFr
ZVJlZlB0cihjb21tYW5kLmNvbXBvc2l0aW9uKCkpOwogICAgIGlmICghY29tcG9zaXRpb24pCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCkBAIC0xMTE3LDEwICsxMTE5LDEwIEBAIHZvaWQgRWRpdG9y
OjphcHBsaWVkRWRpdGluZyhDb21wb3NpdGVFZGl0Q29tbWFuZCYgY29tbWFuZCkKICAgICBkb2N1
bWVudCgpLnVwZGF0ZUxheW91dCgpOwogCiAgICAgQVNTRVJUKGNvbW1hbmQuY29tcG9zaXRpb24o
KSk7Ci0gICAgYXV0byYgY29tcG9zaXRpb24gPSAqY29tbWFuZC5jb21wb3NpdGlvbigpOworICAg
IGF1dG8gY29tcG9zaXRpb24gPSBtYWtlUmVmKCpjb21tYW5kLmNvbXBvc2l0aW9uKCkpOwogICAg
IFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKGNvbW1hbmQuZW5kaW5nU2VsZWN0aW9uKCkp
OwogCi0gICAgbm90aWZ5VGV4dEZyb21Db250cm9scyhjb21wb3NpdGlvbi5zdGFydGluZ1Jvb3RF
ZGl0YWJsZUVsZW1lbnQoKSwgY29tcG9zaXRpb24uZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVudCgp
KTsKKyAgICBub3RpZnlUZXh0RnJvbUNvbnRyb2xzKGNvbXBvc2l0aW9uLT5zdGFydGluZ1Jvb3RF
ZGl0YWJsZUVsZW1lbnQoKSwgY29tcG9zaXRpb24tPmVuZGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQo
KSk7CiAKICAgICBpZiAoY29tbWFuZC5pc1RvcExldmVsQ29tbWFuZCgpKSB7CiAgICAgICAgIC8v
IERvbid0IGNsZWFyIHRoZSB0eXBpbmcgc3R5bGUgd2l0aCB0aGlzIHNlbGVjdGlvbiBjaGFuZ2Uu
IFdlIGRvIHRob3NlIHRoaW5ncyBlbHNld2hlcmUgaWYgbmVjZXNzYXJ5LgpAQCAtMTEzMiw3ICsx
MTM0LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGxpZWRFZGl0aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5k
JiBjb21tYW5kKQogICAgIH0KIAogICAgIGlmIChjb21tYW5kLnNob3VsZERpc3BhdGNoSW5wdXRF
dmVudHMoKSkKLSAgICAgICAgZGlzcGF0Y2hJbnB1dEV2ZW50cyhjb21wb3NpdGlvbi5zdGFydGlu
Z1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSwgY29tcG9zaXRpb24uZW5kaW5nUm9vdEVkaXRhYmxlRWxl
bWVudCgpLCBjb21tYW5kLmlucHV0RXZlbnRUeXBlTmFtZSgpLCBjb21tYW5kLmlucHV0RXZlbnRE
YXRhKCksIGNvbW1hbmQuaW5wdXRFdmVudERhdGFUcmFuc2ZlcigpKTsKKyAgICAgICAgZGlzcGF0
Y2hJbnB1dEV2ZW50cyhjb21wb3NpdGlvbi0+c3RhcnRpbmdSb290RWRpdGFibGVFbGVtZW50KCks
IGNvbXBvc2l0aW9uLT5lbmRpbmdSb290RWRpdGFibGVFbGVtZW50KCksIGNvbW1hbmQuaW5wdXRF
dmVudFR5cGVOYW1lKCksIGNvbW1hbmQuaW5wdXRFdmVudERhdGEoKSwgY29tbWFuZC5pbnB1dEV2
ZW50RGF0YVRyYW5zZmVyKCkpOwogCiAgICAgaWYgKGNvbW1hbmQuaXNUb3BMZXZlbENvbW1hbmQo
KSkgewogICAgICAgICB1cGRhdGVFZGl0b3JVSU5vd0lmU2NoZWR1bGVkKCk7CkBAIC0xMjkwLDcg
KzEyOTIsNyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50
KGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBzZWxlY3RJbgogICAgIC8vIHRoYXQgaXMgY29udGFp
bmVkIGluIHRoZSBldmVudCB0YXJnZXQuCiAgICAgc2VsZWN0aW9uID0gc2VsZWN0aW9uRm9yQ29t
bWFuZCh0cmlnZ2VyaW5nRXZlbnQpOwogICAgIGlmIChzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFi
bGUoKSkgewotICAgICAgICBpZiAoTm9kZSogc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24uc3Rh
cnQoKS5kZXByZWNhdGVkTm9kZSgpKSB7CisgICAgICAgIGlmIChhdXRvIHNlbGVjdGlvblN0YXJ0
ID0gbWFrZVJlZlB0cihzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKSkgewogICAg
ICAgICAgICAgUmVmPERvY3VtZW50PiBkb2N1bWVudChzZWxlY3Rpb25TdGFydC0+ZG9jdW1lbnQo
KSk7CiAKICAgICAgICAgICAgIC8vIEluc2VydCB0aGUgdGV4dApAQCAtMTQxOSw3ICsxNDIxLDcg
QEAgdm9pZCBFZGl0b3I6OnBlcmZvcm1DdXRPckNvcHkoRWRpdG9yQWN0aW9uU3BlY2lmaWVyIGFj
dGlvbikKICAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkgfHwgKHNlbGVjdGlvbiAmJiBIVE1MRWxlbWVudDo6
aXNJbnNpZGVJbWFnZU92ZXJsYXkoKnNlbGVjdGlvbikpKQogICAgICAgICBQYXN0ZWJvYXJkOjpj
cmVhdGVGb3JDb3B5QW5kUGFzdGUoUGFnZVBhc3RlYm9hcmRDb250ZXh0OjpjcmVhdGUobV9kb2N1
bWVudC5wYWdlSUQoKSkpLT53cml0ZVBsYWluVGV4dChzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNm
ZXIoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFBhc3RlYm9hcmQ6OkNhblNtYXJ0UmVwbGFj
ZSA6IFBhc3RlYm9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFjZSk7CiAgICAgZWxzZSB7Ci0gICAgICAg
IEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IG51bGxwdHI7CisgICAgICAgIFJlZlB0
cjxIVE1MSW1hZ2VFbGVtZW50PiBpbWFnZUVsZW1lbnQ7CiAgICAgICAgIGlmIChhY3Rpb24gPT0g
Q29weUFjdGlvbikKICAgICAgICAgICAgIGltYWdlRWxlbWVudCA9IGltYWdlRWxlbWVudEZyb21J
bWFnZURvY3VtZW50KGRvY3VtZW50KCkpOwogCkBAIC0xNTQ1LDE4ICsxNTQ3LDE1IEBAIHZvaWQg
RWRpdG9yOjpzaW1wbGlmeU1hcmt1cChOb2RlKiBzdGFydE5vZGUsIE5vZGUqIGVuZE5vZGUpCiB7
CiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxOb2Rl
PiBwYXN0RW5kTm9kZTsKICAgICBpZiAoZW5kTm9kZSkgewotICAgICAgICBpZiAoJnN0YXJ0Tm9k
ZS0+ZG9jdW1lbnQoKSAhPSAmZW5kTm9kZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgLy8gY2hlY2sgaWYgc3RhcnQgbm9kZSBpcyBiZWZvcmUgZW5kTm9kZQotICAg
ICAgICBOb2RlKiBub2RlID0gc3RhcnROb2RlOwotICAgICAgICB3aGlsZSAobm9kZSAmJiBub2Rl
ICE9IGVuZE5vZGUpCi0gICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9k
ZSk7Ci0gICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgaWYgKCFpc19sdCh0cmVlT3JkZXIoKnN0
YXJ0Tm9kZSwgKmVuZE5vZGUpKSkKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcGFzdEVu
ZE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCplbmROb2RlKTsKICAgICB9CiAgICAgCi0gICAg
U2ltcGxpZnlNYXJrdXBDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnROb2RlLCBlbmRO
b2RlID8gTm9kZVRyYXZlcnNhbDo6bmV4dCgqZW5kTm9kZSkgOiBudWxscHRyKS0+YXBwbHkoKTsK
KyAgICBTaW1wbGlmeU1hcmt1cENvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydE5vZGUs
IHBhc3RFbmROb2RlLmdldCgpKS0+YXBwbHkoKTsKIH0KIAogdm9pZCBFZGl0b3I6OmNvcHlVUkwo
Y29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpCkBAIC0xNTk0LDcgKzE1OTMsNyBA
QCBQYXN0ZWJvYXJkV3JpdGVyRGF0YTo6VVJMRGF0YSBFZGl0b3I6OnBhc3RlYm9hcmRXcml0ZXJV
UkwoY29uc3QgVVJMJiB1cmwsIGNvbnN0CiAKIHZvaWQgRWRpdG9yOjpjb3B5SW1hZ2UoY29uc3Qg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0KQogewotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSByZXN1bHQu
aW5uZXJOb25TaGFyZWRFbGVtZW50KCk7CisgICAgYXV0byBlbGVtZW50ID0gbWFrZVJlZlB0cihy
ZXN1bHQuaW5uZXJOb25TaGFyZWRFbGVtZW50KCkpOwogICAgIGlmICghZWxlbWVudCkKICAgICAg
ICAgcmV0dXJuOwogCkBAIC0xODc2LDggKzE4NzUsOCBAQCB2b2lkIEVkaXRvcjo6c2V0QmFzZVdy
aXRpbmdEaXJlY3Rpb24oV3JpdGluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pCiAgICAgICAgICYmIGJh
c2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQoKSA9PSBkaXJlY3Rpb24pCiAgICAg
ICAgIHJldHVybjsKICNlbmRpZgotICAgICAgICAKLSAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVu
dCA9IGRvY3VtZW50KCkuZm9jdXNlZEVsZW1lbnQoKTsKKworICAgIGF1dG8gZm9jdXNlZEVsZW1l
bnQgPSBtYWtlUmVmUHRyKGRvY3VtZW50KCkuZm9jdXNlZEVsZW1lbnQoKSk7CiAgICAgaWYgKGZv
Y3VzZWRFbGVtZW50ICYmIGZvY3VzZWRFbGVtZW50LT5pc1RleHRGaWVsZCgpKSB7CiAgICAgICAg
IGlmIChkaXJlY3Rpb24gPT0gV3JpdGluZ0RpcmVjdGlvbjo6TmF0dXJhbCkKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTE5MDQsMTAgKzE5MDMsMTIgQEAgV3JpdGluZ0RpcmVjdGlvbiBFZGl0b3I6
OmJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQoKSBjb25zdAogICAgIGF1dG8g
cmVzdWx0ID0gV3JpdGluZ0RpcmVjdGlvbjo6TGVmdFRvUmlnaHQ7CiAKICAgICBQb3NpdGlvbiBw
b3MgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRl
ZXBFcXVpdmFsZW50KCk7Ci0gICAgTm9kZSogbm9kZSA9IHBvcy5kZXByZWNhdGVkTm9kZSgpOwor
ICAgIGF1dG8gbm9kZSA9IG1ha2VSZWZQdHIocG9zLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIGlm
ICghbm9kZSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAorICAgIFNjcmlwdERpc2FsbG93ZWRT
Y29wZTo6SW5NYWluVGhyZWFkIHNjcmlwdERpc2FsbG93ZWRTY29wZTsKKwogICAgIGF1dG8gcmVu
ZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CkBAIC0yMDc1LDcgKzIwNzYsNyBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9z
aXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxp
bgogICAgIGNsaWVudCgpLT5zdGFydERlbGF5aW5nQW5kQ29hbGVzY2luZ0NvbnRlbnRDaGFuZ2VO
b3RpZmljYXRpb25zKCk7CiAjZW5kaWYKIAotICAgIEVsZW1lbnQqIHRhcmdldCA9IGRvY3VtZW50
KCkuZm9jdXNlZEVsZW1lbnQoKTsKKyAgICBhdXRvIHRhcmdldCA9IG1ha2VSZWZQdHIoZG9jdW1l
bnQoKS5mb2N1c2VkRWxlbWVudCgpKTsKICAgICBpZiAodGFyZ2V0KSB7CiAgICAgICAgIC8vIERp
c3BhdGNoIGFuIGFwcHJvcHJpYXRlIGNvbXBvc2l0aW9uIGV2ZW50IHRvIHRoZSBmb2N1c2VkIG5v
ZGUuCiAgICAgICAgIC8vIFdlIGNoZWNrIHRoZSBjb21wb3NpdGlvbiBzdGF0dXMgYW5kIGNob29z
ZSBhbiBhcHByb3ByaWF0ZSBjb21wb3NpdGlvbiBldmVudCBzaW5jZSB0aGlzCkBAIC0yMTI1LDEz
ICsyMTI2LDEzIEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRl
eHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgICAgIC8vIEZpbmQgb3V0
IHdoYXQgbm9kZSBoYXMgdGhlIGNvbXBvc2l0aW9uIG5vdy4KICAgICAgICAgUG9zaXRpb24gYmFz
ZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuYmFzZSgpLmRvd25zdHJlYW0o
KTsKICAgICAgICAgUG9zaXRpb24gZXh0ZW50ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5leHRlbnQoKTsKLSAgICAgICAgTm9kZSogYmFzZU5vZGUgPSBiYXNlLmRlcHJlY2F0
ZWROb2RlKCk7CisgICAgICAgIGF1dG8gYmFzZU5vZGUgPSBtYWtlUmVmUHRyKGJhc2UuZGVwcmVj
YXRlZE5vZGUoKSk7CiAgICAgICAgIHVuc2lnbmVkIGJhc2VPZmZzZXQgPSBiYXNlLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCk7Ci0gICAgICAgIE5vZGUqIGV4dGVudE5vZGUgPSBleHRlbnQuZGVw
cmVjYXRlZE5vZGUoKTsKKyAgICAgICAgYXV0byBleHRlbnROb2RlID0gbWFrZVJlZlB0cihleHRl
bnQuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIHVuc2lnbmVkIGV4dGVudE9mZnNldCA9IGV4
dGVudC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwogCiAgICAgICAgIGlmIChpczxUZXh0Pihi
YXNlTm9kZSkgJiYgYmFzZU5vZGUgPT0gZXh0ZW50Tm9kZSAmJiBiYXNlT2Zmc2V0ICsgdGV4dC5s
ZW5ndGgoKSA9PSBleHRlbnRPZmZzZXQpIHsKLSAgICAgICAgICAgIG1fY29tcG9zaXRpb25Ob2Rl
ID0gZG93bmNhc3Q8VGV4dD4oYmFzZU5vZGUpOworICAgICAgICAgICAgbV9jb21wb3NpdGlvbk5v
ZGUgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PFRleHQ+KGJhc2VOb2RlKTsKICAgICAgICAgICAgIG1f
Y29tcG9zaXRpb25TdGFydCA9IGJhc2VPZmZzZXQ7CiAgICAgICAgICAgICBtX2NvbXBvc2l0aW9u
RW5kID0gZXh0ZW50T2Zmc2V0OwogICAgICAgICAgICAgbV9jdXN0b21Db21wb3NpdGlvblVuZGVy
bGluZXMgPSB1bmRlcmxpbmVzOwpAQCAtMjIzOSw3ICsyMjQwLDcgQEAgdm9pZCBFZGl0b3I6OmFk
dmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgIH0K
IAogICAgIC8vIHRvcE5vZGUgZGVmaW5lcyB0aGUgd2hvbGUgcmFuZ2Ugd2Ugd2FudCB0byBvcGVy
YXRlIG9uIAotICAgIGF1dG8qIHRvcE5vZGUgPSBoaWdoZXN0RWRpdGFibGVSb290KHBvc2l0aW9u
KTsKKyAgICBhdXRvIHRvcE5vZGUgPSBtYWtlUmVmUHRyKGhpZ2hlc3RFZGl0YWJsZVJvb3QocG9z
aXRpb24pKTsKICAgICBpZiAodG9wTm9kZSkKICAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS5l
bmQgPSBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKCp0b3BOb2RlKTsKIApAQCAt
MjU1MSw4ICsyNTUyLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGlu
Z1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHdvcmRTdGFydCwKICAgICAgICAgICAgIGlm
IChuZXh0UG9zaXRpb24uaXNOdWxsKCkgfHwgbmV4dFBvc2l0aW9uID09IHNwZWxsQ2hlY2tpbmdF
bmQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGF1dG8qIGNvbnRhaW5l
ciA9IG5leHRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLnVwc3RyZWFtKCkuY29udGFpbmVyTm9k
ZSgpOwotICAgICAgICAgICAgaWYgKGF1dG8qIGNvbnRhaW5lckVsZW1lbnQgPSBpczxFbGVtZW50
Pihjb250YWluZXIpID8gZG93bmNhc3Q8RWxlbWVudD4oY29udGFpbmVyKSA6IGNvbnRhaW5lci0+
cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBjb250YWluZXJFbGVtZW50
ID0gbWFrZVJlZlB0cihuZXh0UG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS51cHN0cmVhbSgpLmNv
bnRhaW5lck9yUGFyZW50RWxlbWVudCgpKSkgewogICAgICAgICAgICAgICAgIGlmICghY29udGFp
bmVyRWxlbWVudC0+aXNTcGVsbENoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTI2NjEsMTEgKzI2NjEsMTEgQEAgYm9vbCBFZGl0
b3I6OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoTm9kZSogbm9kZSkgY29uc3QKIHsKICAgICBp
ZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0g
aXM8RWxlbWVudD4oKm5vZGUpID8gZG93bmNhc3Q8RWxlbWVudD4obm9kZSkgOiBub2RlLT5wYXJl
bnRFbGVtZW50KCk7CisgICAgYXV0byBlbGVtZW50ID0gbWFrZVJlZlB0cihpczxFbGVtZW50Pigq
bm9kZSkgPyBkb3duY2FzdDxFbGVtZW50Pihub2RlKSA6IG5vZGUtPnBhcmVudEVsZW1lbnQoKSk7
CiAgICAgaWYgKCFlbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGVsZW1l
bnQtPmlzSW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCkpIHsKLSAgICAgICAgaWYgKEhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50KiB0ZXh0Q29udHJvbCA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChm
aXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoZWxlbWVudCkpKQorICAgICAgICBpZiAoYXV0byB0
ZXh0Q29udHJvbCA9IG1ha2VSZWZQdHIoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKGZpcnN0UG9z
aXRpb25Jbk9yQmVmb3JlTm9kZShlbGVtZW50LmdldCgpKSkpKQogICAgICAgICAgICAgcmV0dXJu
IHRleHRDb250cm9sLT5pc1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CiAgICAgfQogICAgIHJldHVy
biBlbGVtZW50LT5pc1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CkBAIC0yNzA0LDExICsyNzA0LDEx
IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2Vz
KE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIElm
IHdlJ3JlIG5vdCBpbiBhbiBlZGl0YWJsZSBub2RlLCBiYWlsLgotICAgIE5vZGUmIGVkaXRhYmxl
Tm9kZSA9IHNwZWxsaW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgaWYgKCFlZGl0YWJs
ZU5vZGUuaGFzRWRpdGFibGVTdHlsZSgpKQorICAgIGF1dG8gZWRpdGFibGVOb2RlID0gbWFrZVJl
ZihzcGVsbGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcigpKTsKKyAgICBpZiAoIWVkaXRhYmxlTm9k
ZS0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWlzU3Bl
bGxDaGVja2luZ0VuYWJsZWRGb3IoJmVkaXRhYmxlTm9kZSkpCisgICAgaWYgKCFpc1NwZWxsQ2hl
Y2tpbmdFbmFibGVkRm9yKGVkaXRhYmxlTm9kZS5wdHIoKSkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGF1dG8mIHJhbmdlVG9DaGVjayA9IHNob3VsZE1hcmtHcmFtbWFyID8gKmdyYW1tYXJSYW5n
ZSA6ICpzcGVsbGluZ1JhbmdlOwpAQCAtMjkwMCw4ICsyOTAwLDggQEAgdm9pZCBFZGl0b3I6Om1h
cmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBW
ZWN0b3I8VGUKICAgICAgICAgICAgICAgICBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdU
ZXh0Q2hlY2tpbmdQYXJhZ3JhcGgocGFyYWdyYXBoLCByYW5nZVRvUmVwbGFjZSwgcmVwbGFjZW1l
bnQsIHsgcmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCB9KTsKIAogICAgICAgICAgICAgICAg
IGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENh
Y2hlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHJvb3QgPSBtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNhY2hlLT5wb3N0Tm90aWZpY2F0aW9uKHJvb3QsIEFYT2JqZWN0
Q2FjaGU6OkFYQXV0b2NvcnJlY3Rpb25PY2N1cmVkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGF1dG8gcm9vdCA9IG1ha2VSZWZQdHIobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5yb290RWRpdGFibGVFbGVtZW50KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUt
PnBvc3ROb3RpZmljYXRpb24ocm9vdC5nZXQoKSwgQVhPYmplY3RDYWNoZTo6QVhBdXRvY29ycmVj
dGlvbk9jY3VyZWQpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIFNr
aXAgYWxsIG90aGVyIHJlc3VsdHMgZm9yIHRoZSByZXBsYWNlZCB0ZXh0LgpAQCAtMzY3MCw4ICsz
NjcwLDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZERldGVjdFRlbGVwaG9uZU51bWJlcnMoKSBjb25z
dAogc3RhdGljIFZlY3RvcjxTaW1wbGVSYW5nZT4gc2NhbkZvclRlbGVwaG9uZU51bWJlcnMoY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewogICAgIC8vIERvbid0IHNjYW4gZm9yIHBob25lIG51
bWJlcnMgaW5zaWRlIGVkaXRhYmxlIHJlZ2lvbnMuCi0gICAgYXV0byYgc3RhcnROb2RlID0gcmFu
Z2Uuc3RhcnRDb250YWluZXIoKTsKLSAgICBpZiAoc3RhcnROb2RlLmhhc0VkaXRhYmxlU3R5bGUo
KSkKKyAgICBpZiAoYXV0byBzdGFydE5vZGUgPSBtYWtlUmVmUHRyKHJhbmdlLnN0YXJ0Q29udGFp
bmVyKCkpOyBzdGFydE5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIHsg
fTsKICAgICBhdXRvIHRleHQgPSBwbGFpblRleHQocmFuZ2UpOwogICAgIFZlY3RvcjxTaW1wbGVS
YW5nZT4gcmVzdWx0OwpAQCAtMzcwNiwyNyArMzcwNSwzNCBAQCB2b2lkIEVkaXRvcjo6c2NhblNl
bGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2Rl
dGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzLmNsZWFyKCk7CisgICAgCisgICAgYXV0byBub3Rp
ZnlDb250cm9sbGVyID0gbWFrZVNjb3BlRXhpdChbJl0geworICAgICAgICBpZiAoYXV0byogcGFn
ZSA9IG1fZG9jdW1lbnQucGFnZSgpKQorICAgICAgICAgICAgcGFnZS0+c2VydmljZXNPdmVybGF5
Q29udHJvbGxlcigpLnNlbGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hhbmdlZCgpOworICAg
IH0pOwogCi0gICAgYXV0byYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKTsKLSAg
ICBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSkgewotICAgICAgICBpZiAoYXV0byBzZWxlY3RlZFJh
bmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKSkgewotICAgICAgICAgICAg
Ly8gRXh0ZW5kIHRoZSByYW5nZSBhIGZldyBjaGFyYWN0ZXJzIGluIGVhY2ggZGlyZWN0aW9uIHRv
IGRldGVjdCBpbmNvbXBsZXRlbHkgc2VsZWN0ZWQgcGhvbmUgbnVtYmVycy4KLSAgICAgICAgICAg
IGNvbnN0ZXhwciB1bnNpZ25lZCBjaGFyYWN0ZXJzVG9FeHRlbmQgPSAxNTsKLSAgICAgICAgICAg
IGlmIChhdXRvIGV4dGVuZGVkUmFuZ2UgPSBleHRlbmRTZWxlY3Rpb24oKnNlbGVjdGVkUmFuZ2Us
IGNoYXJhY3RlcnNUb0V4dGVuZCkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHJhbmdl
IDogc2NhbkZvclRlbGVwaG9uZU51bWJlcnMoKmV4dGVuZGVkUmFuZ2UpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXaHkgZG8gd2UgZG8gdGhpcyB1bmNvbmRpdGlvbmFsbHkgaW5z
dGVhZCBvZiB3aGVuIG9ubHkgd2hlbiBpdCBvdmVybGFwcyB0aGUgc2VsZWN0aW9uPwotICAgICAg
ICAgICAgICAgICAgICBhZGRNYXJrZXIocmFuZ2UsIERvY3VtZW50TWFya2VyOjpUZWxlcGhvbmVO
dW1iZXIpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgY29uc2lkZXIgcmFuZ2VzIHdp
dGggYSBkZXRlY3RlZCB0ZWxlcGhvbmUgbnVtYmVyIGlmIHRoZXkgb3ZlcmxhcCB3aXRoIHRoZSBz
ZWxlY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgIGlmIChpbnRlcnNlY3RzPENvbXBvc2VkVHJl
ZT4ocmFuZ2UsICpzZWxlY3RlZFJhbmdlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZGV0
ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXMuYXBwZW5kKHJhbmdlKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CisgICAgYXV0byBzZWxlY3Rpb24g
PSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGlmICghc2VsZWN0aW9u
LmlzUmFuZ2UoKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2Rv
Y3VtZW50LnBhZ2UoKSkKLSAgICAgICAgcGFnZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigp
LnNlbGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hhbmdlZCgpOworICAgIGF1dG8gc2VsZWN0
ZWRSYW5nZSA9IHNlbGVjdGlvbi5maXJzdFJhbmdlKCk7CisgICAgaWYgKCFzZWxlY3RlZFJhbmdl
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBFeHRlbmQgdGhlIHJhbmdlIGEgZmV3IGNoYXJh
Y3RlcnMgaW4gZWFjaCBkaXJlY3Rpb24gdG8gZGV0ZWN0IGluY29tcGxldGVseSBzZWxlY3RlZCBw
aG9uZSBudW1iZXJzLgorICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBjaGFyYWN0ZXJzVG9FeHRlbmQg
PSAxNTsKKyAgICBhdXRvIGV4dGVuZGVkUmFuZ2UgPSBleHRlbmRTZWxlY3Rpb24oKnNlbGVjdGVk
UmFuZ2UsIGNoYXJhY3RlcnNUb0V4dGVuZCk7CisgICAgaWYgKCFleHRlbmRlZFJhbmdlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8mIHJhbmdlIDogc2NhbkZvclRlbGVwaG9uZU51
bWJlcnMoKmV4dGVuZGVkUmFuZ2UpKSB7CisgICAgICAgIC8vIEZJWE1FOiBXaHkgZG8gd2UgZG8g
dGhpcyB1bmNvbmRpdGlvbmFsbHkgaW5zdGVhZCBvZiB3aGVuIG9ubHkgd2hlbiBpdCBvdmVybGFw
cyB0aGUgc2VsZWN0aW9uPworICAgICAgICBhZGRNYXJrZXIocmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpUZWxlcGhvbmVOdW1iZXIpOworCisgICAgICAgIC8vIE9ubHkgY29uc2lkZXIgcmFuZ2VzIHdp
dGggYSBkZXRlY3RlZCB0ZWxlcGhvbmUgbnVtYmVyIGlmIHRoZXkgb3ZlcmxhcCB3aXRoIHRoZSBz
ZWxlY3Rpb24uCisgICAgICAgIGlmIChpbnRlcnNlY3RzPENvbXBvc2VkVHJlZT4ocmFuZ2UsICpz
ZWxlY3RlZFJhbmdlKSkKKyAgICAgICAgICAgIG1fZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5n
ZXMuYXBwZW5kKHJhbmdlKTsKKyAgICB9CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoVEVMRVBIT05F
X05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMzgxMiwxNCAr
MzgxOCwxOCBAQCB2b2lkIEVkaXRvcjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKCkKICNlbmRp
ZgogfQogCi1zdGF0aWMgTm9kZSogZmluZEZpcnN0TWFya2FibGUoTm9kZSogbm9kZSkKK3N0YXRp
YyBSZWZQdHI8Tm9kZT4gZmluZEZpcnN0TWFya2FibGUoTm9kZSogc3RhcnRpbmdOb2RlKQogewor
ICAgIGF1dG8gbm9kZSA9IG1ha2VSZWZQdHIoc3RhcnRpbmdOb2RlKTsKICAgICB3aGlsZSAobm9k
ZSkgewotICAgICAgICBpZiAoIW5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCktPmlzVGV4dE9yTGluZUJyZWFr
KCkpCi0gICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpu
b2RlKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuaXNUZXh0RmllbGQoKSkKKyAgICAgICAg
eworICAgICAgICAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJbk1haW5UaHJlYWQgc2NyaXB0
RGlzYWxsb3dlZFNjb3BlOworICAgICAgICAgICAgaWYgKCFub2RlLT5yZW5kZXJlcigpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgaWYgKG5vZGUtPnJlbmRl
cmVyKCktPmlzVGV4dE9yTGluZUJyZWFrKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzPEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pigq
bm9kZSkgJiYgZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmlzVGV4dEZpZWxkKCkpCiAgICAgICAg
ICAgICBub2RlID0gZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCpub2RlKS52
aXNpYmxlUG9zaXRpb25Gb3JJbmRleCgxKS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2Rl
KCk7CiAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmZpcnN0Q2hpbGQoKSkKICAgICAgICAgICAgIG5v
ZGUgPSBub2RlLT5maXJzdENoaWxkKCk7CkBAIC0zODMyLDcgKzM4NDIsNyBAQCBzdGF0aWMgTm9k
ZSogZmluZEZpcnN0TWFya2FibGUoTm9kZSogbm9kZSkKIAogYm9vbCBFZGl0b3I6OnNlbGVjdGlv
blN0YXJ0SGFzTWFya2VyRm9yKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUs
IGludCBmcm9tLCBpbnQgbGVuZ3RoKSBjb25zdAogewotICAgIE5vZGUqIG5vZGUgPSBmaW5kRmly
c3RNYXJrYWJsZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZGVw
cmVjYXRlZE5vZGUoKSk7CisgICAgYXV0byBub2RlID0gZmluZEZpcnN0TWFya2FibGUobV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOwog
ICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zODUxLDcgKzM4NjEs
NyBAQCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gRWRpdG9yOjpyZXNvbHZlVGV4dENoZWNr
aW5nVHlwZU1hc2soY29uc3QgTm9kZSYgcm9vdAogewogI2lmIFVTRShBVVRPTUFUSUNfVEVYVF9S
RVBMQUNFTUVOVCkgJiYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgYm9vbCBvbmx5QWxsb3dz
VGV4dFJlcGxhY2VtZW50ID0gZmFsc2U7Ci0gICAgaWYgKGF1dG8qIGhvc3QgPSByb290RWRpdGFi
bGVFbGVtZW50LnNoYWRvd0hvc3QoKSkKKyAgICBpZiAoYXV0byBob3N0ID0gbWFrZVJlZlB0cihy
b290RWRpdGFibGVFbGVtZW50LnNoYWRvd0hvc3QoKSkpCiAgICAgICAgIG9ubHlBbGxvd3NUZXh0
UmVwbGFjZW1lbnQgPSBpczxIVE1MSW5wdXRFbGVtZW50Pihob3N0KSAmJiBkb3duY2FzdDxIVE1M
SW5wdXRFbGVtZW50PigqaG9zdCkuaXNTcGVsbGNoZWNrRGlzYWJsZWRFeGNlcHRUZXh0UmVwbGFj
ZW1lbnQoKTsKICAgICBpZiAob25seUFsbG93c1RleHRSZXBsYWNlbWVudCkKICAgICAgICAgdGV4
dENoZWNraW5nT3B0aW9ucyA9IHRleHRDaGVja2luZ09wdGlvbnMgJiBUZXh0Q2hlY2tpbmdUeXBl
OjpSZXBsYWNlbWVudDsKQEAgLTM5MTEsOSArMzkyMSw3IEBAIHN0YXRpYyBib29sIGNhbmRpZGF0
ZVdvdWxkUmVwbGFjZVRleHQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogU3Ry
aW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiB7CiAgICAgYXV0
byYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBh
dXRvIHJhbmdlID0gc2VsZWN0aW9uLmlzQ2FyZXQoKQotICAgICAgICA/IHdvcmRSYW5nZUZyb21Q
b3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkKLSAgICAgICAgOiBzZWxlY3Rpb24udG9Ob3JtYWxp
emVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLmlzQ2FyZXQoKSA/IHdvcmRS
YW5nZUZyb21Qb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkgOiBzZWxlY3Rpb24udG9Ob3JtYWxp
emVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4geyB9OwogICAgIGlm
ICghY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChzZWxlY3Rpb24pKQpAQCAtMzk4OSwxNyArMzk5
NywyMSBAQCBzdGF0aWMgVmVjdG9yPFRleHRMaXN0PiBlZGl0YWJsZVRleHRMaXN0c0F0UG9zaXRp
b25JbkRlc2NlbmRpbmdPcmRlcihjb25zdCBQb3NpdAogICAgIHJldHVybiB0ZXh0TGlzdHM7CiB9
CiAKLUZvbnRBdHRyaWJ1dGVzIEVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlvblN0YXJ0
KCkgY29uc3QKK0ZvbnRBdHRyaWJ1dGVzIEVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlv
blN0YXJ0KCkKIHsKLSAgICBGb250QXR0cmlidXRlcyBhdHRyaWJ1dGVzOwotICAgIE5vZGUqIG5v
ZGVUb1JlbW92ZSA9IG51bGxwdHI7Ci0gICAgYXV0byogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlv
blN0YXJ0KG1fZG9jdW1lbnQuZnJhbWUoKSwgbm9kZVRvUmVtb3ZlKTsKLSAgICBpZiAoIXN0eWxl
KSB7CisgICAgUmVmUHRyPE5vZGU+IG5vZGVUb1JlbW92ZTsKKyAgICBhdXRvIG5vZGVSZW1vdmFs
U2NvcGUgPSBXVEY6Om1ha2VTY29wZUV4aXQoWyZub2RlVG9SZW1vdmVdKCkgewogICAgICAgICBp
ZiAobm9kZVRvUmVtb3ZlKQogICAgICAgICAgICAgbm9kZVRvUmVtb3ZlLT5yZW1vdmUoKTsKLSAg
ICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7Ci0gICAgfQorICAgIH0pOworCisgICAgYXV0byogc3R5
bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KG5vZGVUb1JlbW92ZSk7CisgICAgaWYgKCFzdHls
ZSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFNjcmlwdERpc2FsbG93ZWRTY29wZTo6SW5N
YWluVGhyZWFkIHNjcmlwdERpc2FsbG93ZWRTY29wZTsKIAorICAgIEZvbnRBdHRyaWJ1dGVzIGF0
dHJpYnV0ZXM7CiAgICAgcGxhdGZvcm1Gb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQoYXR0
cmlidXRlcywgKnN0eWxlKTsKIAogICAgIC8vIEZJWE1FOiBmb3Igbm93LCBhbHdheXMgcmVwb3J0
IHRoZSBjb2xvcnMgYWZ0ZXIgYXBwbHlpbmcgLWFwcGxlLWNvbG9yLWZpbHRlci4gSW4gZnV0dXJl
IG5vdCBhbGwgY2xpZW50cwpAQCAtNDA4MSw5ICs0MDkzLDYgQEAgRm9udEF0dHJpYnV0ZXMgRWRp
dG9yOjpmb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQoKSBjb25zdAogICAgICAgICAgICAg
YXR0cmlidXRlcy5oYXNVbmRlcmxpbmUgPSB0cnVlOwogICAgIH0KIAotICAgIGlmIChub2RlVG9S
ZW1vdmUpCi0gICAgICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKCk7Ci0KICAgICByZXR1cm4gYXR0
cmlidXRlczsKIH0KIApAQCAtNDExMCw3ICs0MTE5LDcgQEAgUHJvbWlzZWRBdHRhY2htZW50SW5m
byBFZGl0b3I6OnByb21pc2VkQXR0YWNobWVudEluZm8oRWxlbWVudCYgZWxlbWVudCkKICAgICBn
ZXRQYXN0ZWJvYXJkVHlwZXNBbmREYXRhRm9yQXR0YWNobWVudChlbGVtZW50LCBhZGRpdGlvbmFs
VHlwZXMsIGFkZGl0aW9uYWxEYXRhKTsKICNlbmRpZgogCi0gICAgaWYgKGF1dG8qIGZpbGUgPSBh
dHRhY2htZW50LT5maWxlKCkpCisgICAgaWYgKGF1dG8gZmlsZSA9IG1ha2VSZWZQdHIoYXR0YWNo
bWVudC0+ZmlsZSgpKSkKICAgICAgICAgcmV0dXJuIHsgZmlsZS0+dXJsKCksIHBsYXRmb3JtQ29u
dGVudFR5cGVGb3JCbG9iVHlwZShmaWxlLT50eXBlKCkpLCBmaWxlLT5uYW1lKCksIHsgfSwgV1RG
TW92ZShhZGRpdGlvbmFsVHlwZXMpLCBXVEZNb3ZlKGFkZGl0aW9uYWxEYXRhKSB9OwogCiAgICAg
cmV0dXJuIHsgeyB9LCB7IH0sIHsgfSwgYXR0YWNobWVudC0+dW5pcXVlSWRlbnRpZmllcigpLCBX
VEZNb3ZlKGFkZGl0aW9uYWxUeXBlcyksIFdURk1vdmUoYWRkaXRpb25hbERhdGEpIH07CkBAIC00
MjUzLDUzICs0MjYyLDU4IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6OmFkanVzdGVk
U2VsZWN0aW9uUmFuZ2UoKQogfQogCiAvLyBGSVhNRTogVGhpcyBmaWd1cmVzIG91dCB0aGUgY3Vy
cmVudCBzdHlsZSBieSBpbnNlcnRpbmcgYSA8c3Bhbj4hCi1jb25zdCBSZW5kZXJTdHlsZSogRWRp
dG9yOjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0KEZyYW1lKiBmcmFtZSwgTm9kZSomIG5vZGVUb1Jl
bW92ZSkKK2NvbnN0IFJlbmRlclN0eWxlKiBFZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQo
UmVmUHRyPE5vZGU+JiBub2RlVG9SZW1vdmUpCiB7CiAgICAgbm9kZVRvUmVtb3ZlID0gbnVsbHB0
cjsKIAotICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKGRvY3Vt
ZW50KCkuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgUG9zaXRpb24gcG9zaXRpb24gPSBhZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21w
dXRhdGlvbihmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIFBvc2l0aW9uIHBv
c2l0aW9uID0gYWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24oZG9jdW1l
bnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaWYgKCFwb3NpdGlvbi5pc0NhbmRp
ZGF0ZSgpIHx8IHBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxlID0gZnJhbWUtPnNlbGVjdGlvbigp
LnR5cGluZ1N0eWxlKCk7CisgICAgYXV0byB0eXBpbmdTdHlsZSA9IG1ha2VSZWZQdHIoZG9jdW1l
bnQoKS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKTsKICAgICBpZiAoIXR5cGluZ1N0eWxlIHx8
ICF0eXBpbmdTdHlsZS0+c3R5bGUoKSkKICAgICAgICAgcmV0dXJuICZwb3NpdGlvbi5kZXByZWNh
dGVkTm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpOwogCi0gICAgYXV0byBzdHlsZUVsZW1lbnQg
PSBIVE1MU3BhbkVsZW1lbnQ6OmNyZWF0ZSgqZnJhbWUtPmRvY3VtZW50KCkpOworICAgIGF1dG8g
c3R5bGVFbGVtZW50ID0gSFRNTFNwYW5FbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7CiAKICAg
ICBTdHJpbmcgc3R5bGVUZXh0ID0gdHlwaW5nU3R5bGUtPnN0eWxlKCktPmFzVGV4dCgpICsgIiBk
aXNwbGF5OiBpbmxpbmUiOwogICAgIHN0eWxlRWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1l
czo6c3R5bGVBdHRyLCBzdHlsZVRleHQpOwogCi0gICAgc3R5bGVFbGVtZW50LT5hcHBlbmRDaGls
ZChmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlRWRpdGluZ1RleHROb2RlKGVtcHR5U3RyaW5nKCkp
KTsKKyAgICBzdHlsZUVsZW1lbnQtPmFwcGVuZENoaWxkKGRvY3VtZW50KCkuY3JlYXRlRWRpdGlu
Z1RleHROb2RlKGVtcHR5U3RyaW5nKCkpKTsKIAogICAgIGF1dG8gcG9zaXRpb25Ob2RlID0gcG9z
aXRpb24uZGVwcmVjYXRlZE5vZGUoKTsKLSAgICBpZiAoIXBvc2l0aW9uTm9kZSB8fCAhcG9zaXRp
b25Ob2RlLT5wYXJlbnROb2RlKCkgfHwgcG9zaXRpb25Ob2RlLT5wYXJlbnROb2RlKCktPmFwcGVu
ZENoaWxkKHN0eWxlRWxlbWVudCkuaGFzRXhjZXB0aW9uKCkpCisgICAgQVNTRVJUKHBvc2l0aW9u
Tm9kZSk7CisgICAgYXV0byBwYXJlbnQgPSBtYWtlUmVmUHRyKHBvc2l0aW9uTm9kZS0+cGFyZW50
Tm9kZSgpKTsKKyAgICBpZiAoIXBhcmVudCB8fCBwYXJlbnQtPmFwcGVuZENoaWxkKHN0eWxlRWxl
bWVudC5nZXQoKSkuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgbm9kZVRvUmVtb3ZlID0gc3R5bGVFbGVtZW50LnB0cigpOwotICAgIAotICAgIGZyYW1lLT5k
b2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisKKyAgICBkb2N1bWVudCgpLnVwZGF0
ZVN0eWxlSWZOZWVkZWQoKTsKICAgICByZXR1cm4gc3R5bGVFbGVtZW50LT5yZW5kZXJlcigpID8g
JnN0eWxlRWxlbWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKSA6IG51bGxwdHI7CiB9CiAKLWNvbnN0
IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBj
b25zdAorUmVmUHRyPEZvbnQ+IEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0
aXBsZUZvbnRzKQogewogICAgIGhhc011bHRpcGxlRm9udHMgPSBmYWxzZTsKIAogICAgIGlmICgh
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKLSAgICAgICAgTm9kZSogbm9kZVRv
UmVtb3ZlOwotICAgICAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQobV9k
b2N1bWVudC5mcmFtZSgpLCBub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQotCi0g
ICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBudWxscHRyOwotICAgICAgICBpZiAoc3R5bGUpIHsK
LSAgICAgICAgICAgIGZvbnQgPSAmc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsK
LSAgICAgICAgICAgIGlmIChub2RlVG9SZW1vdmUpCi0gICAgICAgICAgICAgICAgbm9kZVRvUmVt
b3ZlLT5yZW1vdmUoKTsKKyAgICAgICAgUmVmUHRyPE5vZGU+IG5vZGVUb1JlbW92ZTsKKyAgICAg
ICAgUmVmUHRyPEZvbnQ+IGZvbnQ7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8qIHN0eWxl
ID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydChub2RlVG9SZW1vdmUpOworICAgICAgICAgICAgaWYg
KCFzdHlsZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIFNj
cmlwdERpc2FsbG93ZWRTY29wZTo6SW5NYWluVGhyZWFkIHNjcmlwdERpc2FsbG93ZWRTY29wZTsK
KyAgICAgICAgICAgIGZvbnQgPSBjb25zdF9jYXN0PEZvbnQqPigmc3R5bGUtPmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnQoKSk7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAobm9kZVRvUmVtb3Zl
KQorICAgICAgICAgICAgbm9kZVRvUmVtb3ZlLT5yZW1vdmUoKTsKKwogICAgICAgICByZXR1cm4g
Zm9udDsKICAgICB9CiAKQEAgLTQzMTMsMTQgKzQzMjcsMTYgQEAgY29uc3QgRm9udCogRWRpdG9y
Ojpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIHJhbmdlLT5zdGFydCA9ICphZGp1c3RlZFN0YXJ0OwogCi0g
ICAgY29uc3QgRm9udCogZm9udCA9IG51bGxwdHI7CisgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3Bl
OjpJbk1haW5UaHJlYWQgc2NyaXB0RGlzYWxsb3dlZFNjb3BlOworCisgICAgUmVmUHRyPEZvbnQ+
IGZvbnQ7CiAgICAgZm9yIChhdXRvJiBub2RlIDogaW50ZXJzZWN0aW5nTm9kZXMoKnJhbmdlKSkg
ewogICAgICAgICBhdXRvIHJlbmRlcmVyID0gbm9kZS5yZW5kZXJlcigpOwogICAgICAgICBpZiAo
IXJlbmRlcmVyKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGF1dG8mIHByaW1hcnlG
b250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwogICAg
ICAgICBpZiAoIWZvbnQpCi0gICAgICAgICAgICBmb250ID0gJnByaW1hcnlGb250OworICAgICAg
ICAgICAgZm9udCA9IGNvbnN0X2Nhc3Q8Rm9udCo+KCZwcmltYXJ5Rm9udCk7CiAgICAgICAgIGVs
c2UgaWYgKGZvbnQgIT0gJnByaW1hcnlGb250KSB7CiAgICAgICAgICAgICBoYXNNdWx0aXBsZUZv
bnRzID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5k
ZXggZjFjMWM1YTVjNTI4MDQ5OWVmZjkyMDBkNThhYzFkNjRiY2RlYjBkZi4uNjhhZGJkNDNjNTdk
OGQwZDJjZWI4M2U5NTMzODQyMTc0Njc3MTAyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBA
IC00NDIsNyArNDQyLDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJNaXNzcGVsbGluZ3NBbmRC
YWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKICAgICB2b2lkIG1hcmtNaXNzcGVs
bGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKIAotICAgIEVsZW1l
bnQqIGZpbmRFdmVudFRhcmdldEZyb20oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
KSBjb25zdDsKKyAgICBSZWZQdHI8RWxlbWVudD4gZmluZEV2ZW50VGFyZ2V0RnJvbShjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJikgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2Vs
ZWN0ZWRUZXh0KCkgY29uc3Q7CiAgICAgU3RyaW5nIHNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2Zl
cigpIGNvbnN0OwpAQCAtNTE2LDkgKzUxNiw5IEBAIHB1YmxpYzoKIAogICAgIFJlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiB3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQoUGFzdGVib2FyZCYsIGNvbnN0
IFNpbXBsZVJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBs
YWluVGV4dCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250KiBmb250Rm9yU2VsZWN0
aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGVGb3JTZWxlY3Rpb25TdGFydChGcmFtZSogLCBO
b2RlICombm9kZVRvUmVtb3ZlKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBGb250QXR0cmlidXRlcyBm
b250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9S
VCBSZWZQdHI8Rm9udD4gZm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGVGb3JTZWxlY3Rpb25T
dGFydChSZWZQdHI8Tm9kZT4mIG5vZGVUb1JlbW92ZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgRm9u
dEF0dHJpYnV0ZXMgZm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlvblN0YXJ0KCk7CiAKICNpZiBQTEFU
Rk9STShDT0NPQSkKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc3RyaW5nU2VsZWN0aW9uRm9y
UGFzdGVib2FyZCgpOwpAQCAtNjA1LDcgKzYwNSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGVk
aXRvclVJVXBkYXRlVGltZXJGaXJlZCgpOwogCi0gICAgRWxlbWVudCogZmluZEV2ZW50VGFyZ2V0
RnJvbVNlbGVjdGlvbigpIGNvbnN0OworICAgIFJlZlB0cjxFbGVtZW50PiBmaW5kRXZlbnRUYXJn
ZXRGcm9tU2VsZWN0aW9uKCkgY29uc3Q7CiAKICAgICBib29sIHVuaWZpZWRUZXh0Q2hlY2tlckVu
YWJsZWQoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRl
eCBjZGQxYmM4ZWMwMGM0MjZkOTlhYmE4ZWNlZmEwMWNjNGIzNjlmZDFiLi40MmJiZTFhYTQ2ZTAw
MWFhNGU4MjhjZTFhNGY4OWI4YTUyODBmNDEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RyYWdDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250
cm9sbGVyLmNwcApAQCAtNTI2LDcgKzUyNiw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmRpc3Bh
dGNoVGV4dElucHV0RXZlbnRGb3IoRnJhbWUqIGlubmVyRnJhbWUsIGNvbnN0IERyYWdEYXRhCiB7
CiAgICAgQVNTRVJUKG1fcGFnZS5kcmFnQ2FyZXRDb250cm9sbGVyKCkuaGFzQ2FyZXQoKSk7CiAg
ICAgU3RyaW5nIHRleHQgPSBtX3BhZ2UuZHJhZ0NhcmV0Q29udHJvbGxlcigpLmlzQ29udGVudFJp
Y2hseUVkaXRhYmxlKCkgPyBlbXB0eVN0cmluZygpIDogZHJhZ0RhdGEuYXNQbGFpblRleHQoKTsK
LSAgICBFbGVtZW50KiB0YXJnZXQgPSBpbm5lckZyYW1lLT5lZGl0b3IoKS5maW5kRXZlbnRUYXJn
ZXRGcm9tKG1fcGFnZS5kcmFnQ2FyZXRDb250cm9sbGVyKCkuY2FyZXRQb3NpdGlvbigpKTsKKyAg
ICBhdXRvIHRhcmdldCA9IGlubmVyRnJhbWUtPmVkaXRvcigpLmZpbmRFdmVudFRhcmdldEZyb20o
bV9wYWdlLmRyYWdDYXJldENvbnRyb2xsZXIoKS5jYXJldFBvc2l0aW9uKCkpOwogICAgIC8vIEZJ
WE1FOiBXaGF0IGd1YXJhbnRlZXMgdGFyZ2V0IGlzIG5vdCBudWxsPwogICAgIGF1dG8gZXZlbnQg
PSBUZXh0RXZlbnQ6OmNyZWF0ZUZvckRyb3AoJmlubmVyRnJhbWUtPndpbmRvd1Byb3h5KCksIHRl
eHQpOwogICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDE0YjEwOWM5ZDA1ODQzZDY4NjRi
ZjNlMGM1NDlkYWQ2ZTI4NGIzOTMuLjQ2NDIxZTQwNmViODM2OWE3OWJiMjBjNDI0Mjc5ZThkODhm
NGVjNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CkBAIC0xMTkzLDcgKzExOTMsNyBAQCBFZGl0b3JTdGF0ZSBXZWJQYWdlOjplZGl0b3JTdGF0ZShT
aG91bGRQZXJmb3JtTGF5b3V0IHNob3VsZFBlcmZvcm1MYXlvdXQpIGNvbnN0CiAgICAgfQogCiAg
ICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwotICAgIGNvbnN0IEVkaXRvciYgZWRpdG9yID0gZnJhbWUtPmVkaXRvcigp
OworICAgIEVkaXRvciYgZWRpdG9yID0gZnJhbWUtPmVkaXRvcigpOwogCiAgICAgcmVzdWx0LnRy
YW5zYWN0aW9uSUQgPSBtX2xhc3RFZGl0b3JTdGF0ZVRyYW5zYWN0aW9uSUQuaW5jcmVtZW50KCk7
CiAgICAgcmVzdWx0LnNlbGVjdGlvbklzTm9uZSA9IHNlbGVjdGlvbi5pc05vbmUoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1t
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5k
ZXggNjBiYzkwMjZiNmYyNjk2ZjQ3Y2VjOTFhN2IyOWYyMmQ0ZjJhZDVmMS4uOTM0Y2JmN2U1YzI5
NDJmZDQ5Y2QzMTMzMmU5OGQ1ZjMyZWU0ZDE5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTIzNDgsNyArMjM0OCw3IEBA
IHZvaWQgV2ViUGFnZTo6cmVxdWVzdEF1dG9jb3JyZWN0aW9uRGF0YShjb25zdCBTdHJpbmcmIHRl
eHRGb3JBdXRvY29ycmVjdGlvbiwgQ29tCiAKICAgICBib29sIG11bHRpcGxlRm9udHMgPSBmYWxz
ZTsKICAgICBDVEZvbnRSZWYgZm9udCA9IG5pbDsKLSAgICBpZiAoYXV0byogY29yZUZvbnQgPSBm
cmFtZS5lZGl0b3IoKS5mb250Rm9yU2VsZWN0aW9uKG11bHRpcGxlRm9udHMpKQorICAgIGlmIChh
dXRvIGNvcmVGb250ID0gZnJhbWUuZWRpdG9yKCkuZm9udEZvclNlbGVjdGlvbihtdWx0aXBsZUZv
bnRzKSkKICAgICAgICAgZm9udCA9IGNvcmVGb250LT5nZXRDVEZvbnQoKTsKIAogICAgIHJlcGx5
KHsgV1RGTW92ZShyb290Vmlld1NlbGVjdGlvblJlY3RzKSAsIChfX2JyaWRnZSBVSUZvbnQgKilm
b250IH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbQppbmRleCA3NGRhNjM1Nzg4MmNkMDEzMDIwODQwOTdmMDY0ZDIxYzNiOTE1ZDA0
Li5mMjI0NjRhNmU1NTA1ZTdkM2I1MTU2YWNlODNhMzA2ZDJjMGM0NmY4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtMzgy
LDcgKzM4Miw3IEBAIHZvaWQgV2ViUGFnZTo6Zm9udEF0U2VsZWN0aW9uKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoY29uc3QgRm9udEluZm8mLCBkb3VibGUsIGJvCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBhdXRvKiBmb250ID0gZnJhbWUuZWRpdG9yKCkuZm9udEZvclNlbGVjdGlvbihz
ZWxlY3Rpb25IYXNNdWx0aXBsZUZvbnRzKTsKKyAgICBhdXRvIGZvbnQgPSBmcmFtZS5lZGl0b3Io
KS5mb250Rm9yU2VsZWN0aW9uKHNlbGVjdGlvbkhhc011bHRpcGxlRm9udHMpOwogICAgIGlmICgh
Zm9udCkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0sIDAsIGZhbHNlKTsKICAgICAg
ICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0K
aW5kZXggMTE0MDM0NjRhZDhmNTdkZWZkOTk1OTIzNWM3NGViMmZkZWMxMmI4MS4uZjc2ZjljMjYz
MTg0OGNjZjgzYTg5OGQ5YWZmNDI4MmJiNmRmMjc3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC0xODI1LDkgKzE4MjUsOCBAQCBzdGF0aWMgV2Vi
RnJhbWVMb2FkVHlwZSB0b1dlYkZyYW1lTG9hZFR5cGUoV2ViQ29yZTo6RnJhbWVMb2FkVHlwZSBm
cmFtZUxvYWRUeXBlKQogICAgIGJvb2wgbXVsdGlwbGVGb250cyA9IGZhbHNlOwogICAgIENURm9u
dFJlZiBmb250ID0gbmlsOwogICAgIGlmIChfcHJpdmF0ZS0+Y29yZUZyYW1lKSB7Ci0gICAgICAg
IGNvbnN0IFdlYkNvcmU6OkZvbnQqIGZkID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCku
Zm9udEZvclNlbGVjdGlvbihtdWx0aXBsZUZvbnRzKTsKLSAgICAgICAgaWYgKGZkKQotICAgICAg
ICAgICAgZm9udCA9IGZkLT5nZXRDVEZvbnQoKTsKKyAgICAgICAgaWYgKGF1dG8gY29yZUZvbnQg
PSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3IoKS5mb250Rm9yU2VsZWN0aW9uKG11bHRpcGxl
Rm9udHMpKQorICAgICAgICAgICAgZm9udCA9IGNvcmVGb250LT5nZXRDVEZvbnQoKTsKICAgICB9
CiAgICAgCiAgICAgaWYgKGhhc011bHRpcGxlRm9udHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQppbmRleCAyYjhhMjgyMGY4MDliOGFiMzk1ZjY2
ZmQ4MDhmN2FkMDhkZWQzYWQzLi5kZDcwMTNjMTliMjEzMzkyOGMxZjdkMWFiNmZlNDcxZDJkNzVm
NDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxW
aWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcu
bW0KQEAgLTU3NDEsOCArNTc0MSw4IEBAIHN0YXRpYyBCT09MIHdyaXRpbmdEaXJlY3Rpb25LZXlC
aW5kaW5nc0VuYWJsZWQoKQogICAgIE5TRm9udCAqZm9udCA9IG5pbDsKICAgICBSZXRhaW5QdHI8
TlNEaWN0aW9uYXJ5PiBhdHRyaWJ1dGVzOwogICAgIGlmIChhdXRvKiBjb3JlRnJhbWUgPSBjb3Jl
KFtzZWxmIF9mcmFtZV0pKSB7Ci0gICAgICAgIGlmIChjb25zdCBXZWJDb3JlOjpGb250KiBmZCA9
IGNvcmVGcmFtZS0+ZWRpdG9yKCkuZm9udEZvclNlbGVjdGlvbihtdWx0aXBsZUZvbnRzKSkKLSAg
ICAgICAgICAgIGZvbnQgPSAoTlNGb250ICopZmQtPnBsYXRmb3JtRGF0YSgpLnJlZ2lzdGVyZWRG
b250KCk7CisgICAgICAgIGlmIChhdXRvIGNvcmVGb250ID0gY29yZUZyYW1lLT5lZGl0b3IoKS5m
b250Rm9yU2VsZWN0aW9uKG11bHRpcGxlRm9udHMpKQorICAgICAgICAgICAgZm9udCA9IChOU0Zv
bnQgKiljb3JlRm9udC0+cGxhdGZvcm1EYXRhKCkucmVnaXN0ZXJlZEZvbnQoKTsKICAgICAgICAg
YXR0cmlidXRlcyA9IGNvcmVGcmFtZS0+ZWRpdG9yKCkuZm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlv
blN0YXJ0KCkuY3JlYXRlRGljdGlvbmFyeSgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4IDViMGVlOGEzYWM4YzMzM2I2ZWUzNDRjZGQ5
YzNiNTU3NjVjMjZmZjAuLmNhMTExNTM0MDEyZWM4MDY0MTgyNDBiZTFhMjk3NmE4MjY0NTU1YmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTk0Nzcs
OCArOTQ3Nyw4IEBAIHN0YXRpYyBOU1RleHRBbGlnbm1lbnQgbnNUZXh0QWxpZ25tZW50RnJvbVJl
bmRlclN0eWxlKGNvbnN0IFdlYkNvcmU6OlJlbmRlclN0eWxlCiAgICAgaWYgKHdlYkhUTUxWaWV3
Ll9jYW5FZGl0UmljaGx5KSB7CiAgICAgICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiA9IGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgICAgIGlmICgh
c2VsZWN0aW9uLmlzTm9uZSgpKSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7Ci0g
ICAgICAgICAgICBpZiAoYXV0byogc3R5bGUgPSBFZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3Rh
cnQoY29yZUZyYW1lLCBub2RlVG9SZW1vdmUpKSB7CisgICAgICAgICAgICBSZWZQdHI8Tm9kZT4g
bm9kZVRvUmVtb3ZlOworICAgICAgICAgICAgaWYgKGF1dG8qIHN0eWxlID0gY29yZUZyYW1lLT5l
ZGl0b3IoKS5zdHlsZUZvclNlbGVjdGlvblN0YXJ0KG5vZGVUb1JlbW92ZSkpIHsKICAgICAgICAg
ICAgICAgICBbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0SXNC
b2xkOmlzRm9udFdlaWdodEJvbGQoc3R5bGUtPmZvbnRDYXNjYWRlKCkud2VpZ2h0KCkpXTsKICAg
ICAgICAgICAgICAgICBbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRU
ZXh0SXNJdGFsaWM6aXNJdGFsaWMoc3R5bGUtPmZvbnRDYXNjYWRlKCkuaXRhbGljKCkpXTsKIApA
QCAtOTQ5NSw3ICs5NDk1LDcgQEAgc3RhdGljIE5TVGV4dEFsaWdubWVudCBuc1RleHRBbGlnbm1l
bnRGcm9tUmVuZGVyU3R5bGUoY29uc3QgV2ViQ29yZTo6UmVuZGVyU3R5bGUKIAogICAgICAgICAg
ICAgICAgIFtfcHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIHNldEN1cnJlbnRU
ZXh0QWxpZ25tZW50Om5zVGV4dEFsaWdubWVudEZyb21SZW5kZXJTdHlsZShzdHlsZSldOwogCi0g
ICAgICAgICAgICAgICAgSFRNTEVsZW1lbnQqIGVuY2xvc2luZ0xpc3RFbGVtZW50ID0gZW5jbG9z
aW5nTGlzdChzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIGVuY2xvc2luZ0xpc3RFbGVtZW50ID0gbWFrZVJlZlB0cihlbmNsb3NpbmdMaXN0
KHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpKTsKICAgICAgICAgICAgICAgICBp
ZiAoZW5jbG9zaW5nTGlzdEVsZW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzPEhU
TUxVTGlzdEVsZW1lbnQ+KCplbmNsb3NpbmdMaXN0RWxlbWVudCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBbW19wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRlbUNvbnRyb2xsZXIgd2ViVGV4dExp
c3RUb3VjaEJhclZpZXdDb250cm9sbGVyXSBzZXRDdXJyZW50TGlzdFR5cGU6V2ViTGlzdFR5cGU6
OlVub3JkZXJlZF07Cg==
</data>
<flag name="commit-queue"
          id="446551"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426308</attachid>
            <date>2021-04-16 18:34:32 -0700</date>
            <delta_ts>2021-04-16 18:59:01 -0700</delta_ts>
            <desc>Fixed release builds</desc>
            <filename>bug-224708-20210416183431.patch</filename>
            <type>text/plain</type>
            <size>43534</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2MTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDkxZmY2MzA1NDc0YzZl
N2Y5MzAyYzM3MTliOGU0NzA0ZmE0NTlkMS4uY2M5ZjA3MzlmODY0MTZhMWRjMTYyNzEzNzJkZGEx
ODhlMDg5ZGVjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDIxLTA0LTE2ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIERlcGxveSBSZWYvUmVmUHRy
IGluIEVkaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI0NzA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgRGVwbG95ZWQgc21hcnQgcG9pbnRlcnMgaW4gV2ViQ29yZTo6RWRpdG9yLgorCisgICAgICAg
IEFsc28gZGVwbG95ZWQgU2NyaXB0RGlzYWxsb3dlZFNjb3BlIGFyb3VuZCB0aGUgY29kZSB3aGlj
aCBhY2Nlc3NlcyB0aGUgcmVuZGVyIHRyZWUuCisKKyAgICAgICAgKiBkb20vUG9zaXRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmNvbnRhaW5lck9yUGFyZW50RWxlbWVudCBj
b25zdCk6IEFkZGVkLgorICAgICAgICAqIGRvbS9Qb3NpdGlvbi5oOgorICAgICAgICAqIGVkaXRp
bmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uRm9yQ29t
bWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlQXNQbGFpblRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZUFzRnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpzaG91bGRJbnNlcnRGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpoYXNCaWRpU2VsZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2Vs
ZWN0aW9uVW5vcmRlcmVkTGlzdFN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6c2VsZWN0aW9uT3JkZXJlZExpc3RTdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6Om5vdGlmeVRleHRGcm9tQ29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3
aWxsQXBwbHlFZGl0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbGll
ZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNl
bmRpbmdUZXh0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwZXJmb3JtQ3V0T3JD
b3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2ltcGxpZnlNYXJrdXApOiBSZXBsYWNl
ZCB0aGUgbWFudWFsIHRyZWUgdHJhdmVyc2FsIGJ5IHRyZWVPcmRlcih+KS4gCisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmNvcHlJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNl
dEJhc2VXcml0aW5nRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YmFzZVdy
aXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OnNldENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2
YW5jZVRvTmV4dE1pc3NwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01p
c3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKTogVXNlIGNvbnRhaW5lck9yUGFyZW50RWxlbWVu
dC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEZvciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRC
YWRHcmFtbWFySW5SYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQW5kUmVw
bGFjZUZvcik6CisgICAgICAgIChXZWJDb3JlOjpzY2FuRm9yVGVsZXBob25lTnVtYmVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJz
KTogUmVzdHJ1Y3V0ZWQgdGhlIGNvZGUgd2l0aCBtYWtlU2NvcGVFeGl0CisgICAgICAgIHRvIGV4
aXQgZWFybHkgaW5zdGVhZCBvZiBuZXN0aW5nIGlmJ3MuIAorICAgICAgICAoV2ViQ29yZTo6Zmlu
ZEZpcnN0TWFya2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25TdGFy
dEhhc01hcmtlckZvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlc29sdmVU
ZXh0Q2hlY2tpbmdUeXBlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnN0cmluZ0Zv
ckNhbmRpZGF0ZVJlcXVlc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250
QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpw
cm9taXNlZEF0dGFjaG1lbnRJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c3R5bGVG
b3JTZWxlY3Rpb25TdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZvbnRGb3JTZWxl
Y3Rpb24pOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAgICogcGFnZS9EcmFn
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZGlzcGF0
Y2hUZXh0SW5wdXRFdmVudEZvcik6CisKIDIwMjEtMDQtMTYgIENvbW1pdCBRdWV1ZSAgPGNvbW1p
dC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjcz
NzMzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwppbmRleCA1YTA5ZjdhN2E5Mzk3OTlmN2ZiNTA5Y2FkYmI0YTE4NGM2MGU5MTU1
Li5jYjkwMDY3ZWQ2YTE2YmNlODQ5ZmE2ZjYxOGYxNjRkMTc3ZDcyZjVlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE3IEBACisyMDIxLTA0LTE2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3Jn
PgorCisgICAgICAgIERlcGxveSBSZWYvUmVmUHRyIGluIEVkaXRvcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0NzA4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmVkaXRvclN0YXRlIGNvbnN0KToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OnJlcXVlc3RBdXRvY29ycmVjdGlvbkRhdGEpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6Zm9udEF0U2VsZWN0aW9uKToKKwogMjAyMS0wNC0xNiAgQWRhIENoYW4gIDxhZGEu
Y2hhbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIFdLVUlEZWxlZ2F0ZSBTUEkgZm9yIHN0YXJ0
aW5nIFhSIHNlc3Npb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA5YjNjNDdlNThm
NDhlNjkxMWFlZjVkODUyNDExMzgyNzc2OWI3OTM1Li45YTMwODI1ZWYzYjM1OGY3ZWZiYjU0NDI3
ODBlMDU3Zjk1M2Q5MDhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTcgQEAKKzIwMjEtMDQtMTYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAg
ICAgICAgRGVwbG95IFJlZi9SZWZQdHIgaW4gRWRpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjQ3MDgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAg
ICgtW1dlYkZyYW1lIGZvbnRGb3JTZWxlY3Rpb246XSk6CisgICAgICAgICogV2ViVmlldy9XZWJI
VE1MVmlldy5tbToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3VwZGF0ZUZvbnRQYW5lbF0pOgor
ICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyB1cGRhdGVU
ZXh0VG91Y2hCYXJdKToKKwogMjAyMS0wNC0xNSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVl
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNzYxMDcuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL1Bvc2l0aW9uLmNwcAppbmRleCBlYjZjZGYzZmE3Y2E3ODIyYmM4MWVkZTZhZDUwM2Y2
ZWI3MmMwYTRiLi5mZTdjYjU0YTc5YjIxOTE4YjgwMjQzY2M2NjdmNmM4NTQ3YmRiYzk2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Qb3NpdGlvbi5jcHAKQEAgLTE5Nyw2ICsxOTcsMTYgQEAgVGV4dCogUG9zaXRpb246
OmNvbnRhaW5lclRleHQoKSBjb25zdAogICAgIHJldHVybiBudWxscHRyOwogfQogCitFbGVtZW50
KiBQb3NpdGlvbjo6Y29udGFpbmVyT3JQYXJlbnRFbGVtZW50KCkgY29uc3QKK3sKKyAgICBhdXRv
KiBjb250YWluZXIgPSBjb250YWluZXJOb2RlKCk7CisgICAgaWYgKCFjb250YWluZXIpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChpczxFbGVtZW50Pihjb250YWluZXIpKQorICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4oY29udGFpbmVyKTsKKyAgICByZXR1cm4gY29u
dGFpbmVyLT5wYXJlbnRFbGVtZW50KCk7Cit9CisKIGludCBQb3NpdGlvbjo6Y29tcHV0ZU9mZnNl
dEluQ29udGFpbmVyTm9kZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2FuY2hvck5vZGUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Qb3NpdGlvbi5oCmluZGV4IGE0NDgxM2E2NjdjMTc0YTNmNTIyNjJlOWI0YmYzYWRkNDllMGFh
YzkuLmM3NDkwOWRmOGVjZGRhYzI3OGI2N2ZhNzU3MWVlYzE5NWYxYmI4NTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Q
b3NpdGlvbi5oCkBAIC04Myw2ICs4Myw3IEBAIHB1YmxpYzoKICAgICAvLyB3aWxsIHJldHVybiBp
bWctPnBhcmVudE5vZGUoKSBhbmQgaW1nLT5jb21wdXRlTm9kZUluZGV4KCkgZnJvbSB0aGVzZSBm
dW5jdGlvbnMuCiAgICAgV0VCQ09SRV9FWFBPUlQgTm9kZSogY29udGFpbmVyTm9kZSgpIGNvbnN0
OyAvLyBudWxsIGZvciBhIGJlZm9yZS9hZnRlciBwb3NpdGlvbiBhbmNob3JlZCB0byBhIG5vZGUg
d2l0aCBubyBwYXJlbnQKICAgICBUZXh0KiBjb250YWluZXJUZXh0KCkgY29uc3Q7CisgICAgRWxl
bWVudCogY29udGFpbmVyT3JQYXJlbnRFbGVtZW50KCkgY29uc3Q7CiAKICAgICBpbnQgY29tcHV0
ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpIGNvbnN0OyAgLy8gTyhuKSBmb3IgYmVmb3JlL2FmdGVy
LWFuY2hvcmVkIHBvc2l0aW9ucywgTygxKSBmb3IgcGFyZW50LWFuY2hvcmVkIHBvc2l0aW9ucwog
ICAgIFdFQkNPUkVfRVhQT1JUIFBvc2l0aW9uIHBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpIGNv
bnN0OyAvLyBDb252ZW5pZW5jZSBtZXRob2QgZm9yIERPTSBwb3NpdGlvbnMgdGhhdCBhbHNvIGZp
eGVzIHVwIHNvbWUgcG9zaXRpb25zIGZvciBlZGl0aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAKaW5kZXggNWQzNGIyM2E3NDZkOTFhYTYxN2RmMTEwOTA3NzAxYTZlYTc0ZDJhZi4uNDY2MDcy
ODZhMjllNWZlNGE3ZTJhNDRhMDFjOTIxNWZiYjU0MzJiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcApAQCAtOTYsNiArOTYsNyBAQAogI2luY2x1ZGUgIlJlcGxhY2VSYW5nZVdpdGhUZXh0
Q29tbWFuZC5oIgogI2luY2x1ZGUgIlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgiCiAjaW5jbHVk
ZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIlNjcmlwdERpc2FsbG93ZWRT
Y29wZS5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YS5oIgogI2luY2x1ZGUg
IlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgpAQCAtMTIwLDYgKzEyMSw3IEBA
CiAjaW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSA8cGFsL0ZpbGVTaXplRm9ybWF0dGVyLmg+
CiAjaW5jbHVkZSA8cGFsL3RleHQvS2lsbFJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4K
ICNpbmNsdWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFy
YWN0ZXJOYW1lcy5oPgogCkBAIC0yNzMsMTEgKzI3NSwxMCBAQCBWaXNpYmxlU2VsZWN0aW9uIEVk
aXRvcjo6c2VsZWN0aW9uRm9yQ29tbWFuZChFdmVudCogZXZlbnQpCiAgICAgICAgIHJldHVybiBz
ZWxlY3Rpb247CiAgICAgLy8gSWYgdGhlIHRhcmdldCBpcyBhIHRleHQgY29udHJvbCwgYW5kIHRo
ZSBjdXJyZW50IHNlbGVjdGlvbiBpcyBvdXRzaWRlIG9mIGl0cyBzaGFkb3cgdHJlZSwKICAgICAv
LyB0aGVuIHVzZSB0aGUgc2F2ZWQgc2VsZWN0aW9uIGZvciB0aGF0IHRleHQgY29udHJvbC4KLSAg
ICBpZiAoaXM8RWxlbWVudD4oZXZlbnQtPnRhcmdldCgpKSAmJiBkb3duY2FzdDxFbGVtZW50Pigq
ZXZlbnQtPnRhcmdldCgpKS5pc1RleHRGaWVsZCgpKSB7Ci0gICAgICAgIGF1dG8mIHRhcmdldCA9
IGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PigqZXZlbnQtPnRhcmdldCgpKTsK
KyAgICBpZiAoYXV0byB0YXJnZXQgPSBtYWtlUmVmUHRyKGV2ZW50LT50YXJnZXQoKSk7IGlzPEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pih0YXJnZXQpICYmIGRvd25jYXN0PEVsZW1lbnQ+KCp0
YXJnZXQpLmlzVGV4dEZpZWxkKCkpIHsKICAgICAgICAgYXV0byBzdGFydCA9IHNlbGVjdGlvbi5z
dGFydCgpOwotICAgICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgJnRhcmdldCAhPSBlbmNsb3Np
bmdUZXh0Rm9ybUNvbnRyb2woc3RhcnQpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byByYW5nZSA9
IHRhcmdldC5zZWxlY3Rpb24oKSkKKyAgICAgICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IHRhcmdl
dCAhPSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2woc3RhcnQpKSB7CisgICAgICAgICAgICBpZiAo
YXV0byByYW5nZSA9IGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PigqdGFyZ2V0
KS5zZWxlY3Rpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4geyAqcmFuZ2UsIEFmZmluaXR5
OjpEb3duc3RyZWFtLCBzZWxlY3Rpb24uaXNEaXJlY3Rpb25hbCgpIH07CiAgICAgICAgIH0KICAg
ICB9CkBAIC02MDgsNyArNjA5LDcgQEAgdm9pZCBFZGl0b3I6OmNsZWFyVGV4dCgpCiAKIHZvaWQg
RWRpdG9yOjpwYXN0ZUFzUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgcGFzdGluZ1RleHQsIGJvb2wg
c21hcnRSZXBsYWNlKQogewotICAgIEVsZW1lbnQqIHRhcmdldCA9IGZpbmRFdmVudFRhcmdldEZy
b21TZWxlY3Rpb24oKTsKKyAgICBhdXRvIHRhcmdldCA9IGZpbmRFdmVudFRhcmdldEZyb21TZWxl
Y3Rpb24oKTsKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0dXJuOwogICAgIHRhcmdldC0+
ZGlzcGF0Y2hFdmVudChUZXh0RXZlbnQ6OmNyZWF0ZUZvclBsYWluVGV4dFBhc3RlKGRvY3VtZW50
KCkud2luZG93UHJveHkoKSwgcGFzdGluZ1RleHQsIHNtYXJ0UmVwbGFjZSkpOwpAQCAtNjE2LDcg
KzYxNyw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgcGFz
dGluZ1RleHQsIGJvb2wgc21hcnRSZXBsYWNlKQogCiB2b2lkIEVkaXRvcjo6cGFzdGVBc0ZyYWdt
ZW50KFJlZjxEb2N1bWVudEZyYWdtZW50PiYmIHBhc3RpbmdGcmFnbWVudCwgYm9vbCBzbWFydFJl
cGxhY2UsIGJvb2wgbWF0Y2hTdHlsZSwgTWFpbEJsb2NrcXVvdGVIYW5kbGluZyByZXNwZWN0c01h
aWxCbG9ja3F1b3RlKQogewotICAgIEVsZW1lbnQqIHRhcmdldCA9IGZpbmRFdmVudFRhcmdldEZy
b21TZWxlY3Rpb24oKTsKKyAgICBhdXRvIHRhcmdldCA9IGZpbmRFdmVudFRhcmdldEZyb21TZWxl
Y3Rpb24oKTsKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0dXJuOwogICAgIHRhcmdldC0+
ZGlzcGF0Y2hFdmVudChUZXh0RXZlbnQ6OmNyZWF0ZUZvckZyYWdtZW50UGFzdGUoZG9jdW1lbnQo
KS53aW5kb3dQcm94eSgpLCBXVEZNb3ZlKHBhc3RpbmdGcmFnbWVudCksIHNtYXJ0UmVwbGFjZSwg
bWF0Y2hTdHlsZSwgcmVzcGVjdHNNYWlsQmxvY2txdW90ZSkpOwpAQCAtNjYwLDcgKzY2MSw3IEBA
IGJvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRGcmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFn
bWVudCwgY29uc3QgT3B0aW9uYWw8U2ltCiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAotICAgIGF1dG8qIGNoaWxkID0gZnJhZ21lbnQuZmlyc3RDaGlsZCgp
OworICAgIGF1dG8gY2hpbGQgPSBtYWtlUmVmUHRyKGZyYWdtZW50LmZpcnN0Q2hpbGQoKSk7CiAg
ICAgaWYgKGlzPENoYXJhY3RlckRhdGE+KGNoaWxkKSAmJiBmcmFnbWVudC5sYXN0Q2hpbGQoKSA9
PSBjaGlsZCkKICAgICAgICAgcmV0dXJuIGNsaWVudCgpLT5zaG91bGRJbnNlcnRUZXh0KGRvd25j
YXN0PENoYXJhY3RlckRhdGE+KCpjaGlsZCkuZGF0YSgpLCByZXBsYWNpbmdET01SYW5nZSwgZ2l2
ZW5BY3Rpb24pOwogCkBAIC03MTYsNyArNzE3LDcgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxl
Y3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIFNlbGVjdFJlcGwK
ICAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIE5vZGUqIG5vZGVUb0NoZWNrID0gc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKTsKKyAgICBhdXRvIG5vZGVUb0NoZWNrID0gbWFrZVJlZlB0cihzZWxlY3Rpb24ucm9v
dEVkaXRhYmxlRWxlbWVudCgpKTsKICAgICBpZiAoIW5vZGVUb0NoZWNrKQogICAgICAgICByZXR1
cm47CiAKQEAgLTc3MSw5ICs3NzIsOSBAQCBib29sIEVkaXRvcjo6c2hvdWxkSW5zZXJ0VGV4dChj
b25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcgogdm9pZCBF
ZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBl
bmRpbmdTZWxlY3Rpb24pCiB7CiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlF
bmFibGVkKCkpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IGVuZGluZ1NlbGVjdGlvbi5zdGFydCgp
LmRlcHJlY2F0ZWROb2RlKCk7CisgICAgICAgIGF1dG8gbm9kZSA9IG1ha2VSZWZQdHIoZW5kaW5n
U2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIGlmIChBWE9iamVj
dENhY2hlKiBjYWNoZSA9IGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCi0gICAg
ICAgICAgICBjYWNoZS0+cG9zdE5vdGlmaWNhdGlvbihub2RlLCBBWE9iamVjdENhY2hlOjpBWFZh
bHVlQ2hhbmdlZCwgUG9zdFRhcmdldDo6T2JzZXJ2YWJsZVBhcmVudCk7CisgICAgICAgICAgICBj
YWNoZS0+cG9zdE5vdGlmaWNhdGlvbihub2RlLmdldCgpLCBBWE9iamVjdENhY2hlOjpBWFZhbHVl
Q2hhbmdlZCwgUG9zdFRhcmdldDo6T2JzZXJ2YWJsZVBhcmVudCk7CiAgICAgfQogCiAgICAgdXBk
YXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcodHJ1ZSk7CkBAIC03ODcsMTEgKzc4
OCwxMSBAQCBib29sIEVkaXRvcjo6aGFzQmlkaVNlbGVjdGlvbigpIGNvbnN0CiAgICAgaWYgKG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIE5vZGUqIHN0YXJ0Tm9kZTsKKyAgICBSZWZQdHI8Tm9kZT4gc3RhcnROb2RlOwogICAgIGlm
IChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewogICAgICAgICBzdGFydE5vZGUg
PSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgp
LmRlcHJlY2F0ZWROb2RlKCk7Ci0gICAgICAgIE5vZGUqIGVuZE5vZGUgPSBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLnVwc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKTsK
LSAgICAgICAgaWYgKGVuY2xvc2luZ0Jsb2NrKHN0YXJ0Tm9kZSkgIT0gZW5jbG9zaW5nQmxvY2so
ZW5kTm9kZSkpCisgICAgICAgIGF1dG8gZW5kTm9kZSA9IG1ha2VSZWZQdHIobV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKS51cHN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCkp
OworICAgICAgICBpZiAoZW5jbG9zaW5nQmxvY2soc3RhcnROb2RlLmdldCgpKSAhPSBlbmNsb3Np
bmdCbG9jayhlbmROb2RlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
IGVsc2UKICAgICAgICAgc3RhcnROb2RlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CkBA
IC03OTksNiArODAwLDggQEAgYm9vbCBFZGl0b3I6Omhhc0JpZGlTZWxlY3Rpb24oKSBjb25zdAog
ICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBTY3JpcHRE
aXNhbGxvd2VkU2NvcGU6OkluTWFpblRocmVhZCBzY3JpcHREaXNhbGxvd2VkU2NvcGU7CisKICAg
ICBhdXRvIHJlbmRlcmVyID0gc3RhcnROb2RlLT5yZW5kZXJlcigpOwogICAgIHdoaWxlIChyZW5k
ZXJlciAmJiAhaXM8UmVuZGVyQmxvY2tGbG93PigqcmVuZGVyZXIpKQogICAgICAgICByZW5kZXJl
ciA9IHJlbmRlcmVyLT5wYXJlbnQoKTsKQEAgLTgxOCw4ICs4MjEsOCBAQCBUcmlTdGF0ZSBFZGl0
b3I6OnNlbGVjdGlvblVub3JkZXJlZExpc3RTdGF0ZSgpIGNvbnN0CiAgICAgICAgIGlmIChlbmNs
b3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0
YXJ0KCksIHVsVGFnKSkKICAgICAgICAgICAgIHJldHVybiBUcmlTdGF0ZTo6VHJ1ZTsKICAgICB9
IGVsc2UgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7Ci0gICAgICAgIGF1
dG8qIHN0YXJ0Tm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgdWxUYWcpOwotICAgICAgICBhdXRvKiBlbmROb2Rl
ID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5lbmQoKSwgdWxUYWcpOworICAgICAgICBhdXRvIHN0YXJ0Tm9kZSA9IG1ha2VSZWZQdHIo
ZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5zdGFydCgpLCB1bFRhZykpOworICAgICAgICBhdXRvIGVuZE5vZGUgPSBtYWtlUmVmUHRyKGVu
Y2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
ZW5kKCksIHVsVGFnKSk7CiAgICAgICAgIGlmIChzdGFydE5vZGUgJiYgZW5kTm9kZSAmJiBzdGFy
dE5vZGUgPT0gZW5kTm9kZSkKICAgICAgICAgICAgIHJldHVybiBUcmlTdGF0ZTo6VHJ1ZTsKICAg
ICB9CkBAIC04MzMsOCArODM2LDggQEAgVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25PcmRlcmVk
TGlzdFN0YXRlKCkgY29uc3QKICAgICAgICAgaWYgKGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgb2xUYWcpKQogICAgICAg
ICAgICAgcmV0dXJuIFRyaVN0YXRlOjpUcnVlOwogICAgIH0gZWxzZSBpZiAobV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKLSAgICAgICAgYXV0byogc3RhcnROb2RlID0gZW5jbG9z
aW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFy
dCgpLCBvbFRhZyk7Ci0gICAgICAgIGF1dG8qIGVuZE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0
aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLCBvbFRhZyk7Cisg
ICAgICAgIGF1dG8gc3RhcnROb2RlID0gbWFrZVJlZlB0cihlbmNsb3NpbmdFbGVtZW50V2l0aFRh
ZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIG9sVGFnKSk7Cisg
ICAgICAgIGF1dG8gZW5kTm9kZSA9IG1ha2VSZWZQdHIoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWco
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSwgb2xUYWcpKTsKICAgICAg
ICAgaWYgKHN0YXJ0Tm9kZSAmJiBlbmROb2RlICYmIHN0YXJ0Tm9kZSA9PSBlbmROb2RlKQogICAg
ICAgICAgICAgcmV0dXJuIFRyaVN0YXRlOjpUcnVlOwogICAgIH0KQEAgLTkyMSw5ICs5MjQsOSBA
QCB2b2lkIEVkaXRvcjo6Y2xlYXJMYXN0RWRpdENvbW1hbmQoKQogICAgIG1fbGFzdEVkaXRDb21t
YW5kID0gbnVsbHB0cjsKIH0KIAotRWxlbWVudCogRWRpdG9yOjpmaW5kRXZlbnRUYXJnZXRGcm9t
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikgY29uc3QKK1JlZlB0cjxFbGVtZW50
PiBFZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb20oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uKSBjb25zdAogewotICAgIEVsZW1lbnQqIHRhcmdldCA9IHNlbGVjdGlvbi5zdGFydCgp
LmVsZW1lbnQoKTsKKyAgICBhdXRvIHRhcmdldCA9IG1ha2VSZWZQdHIoc2VsZWN0aW9uLnN0YXJ0
KCkuZWxlbWVudCgpKTsKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgdGFyZ2V0ID0gZG9jdW1l
bnQoKS5ib2R5T3JGcmFtZXNldCgpOwogICAgIGlmICghdGFyZ2V0KQpAQCAtOTMyLDcgKzkzNSw3
IEBAIEVsZW1lbnQqIEVkaXRvcjo6ZmluZEV2ZW50VGFyZ2V0RnJvbShjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24pIGNvbnN0CiAgICAgcmV0dXJuIHRhcmdldDsKIH0KIAotRWxlbWVu
dCogRWRpdG9yOjpmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCkgY29uc3QKK1JlZlB0cjxF
bGVtZW50PiBFZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSBjb25zdAogewog
ICAgIHJldHVybiBmaW5kRXZlbnRUYXJnZXRGcm9tKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkpOwogfQpAQCAtMTA2OCw4ICsxMDcxLDggQEAgdm9pZCBFZGl0b3I6Om91dGRlbnQo
KQogCiBzdGF0aWMgdm9pZCBub3RpZnlUZXh0RnJvbUNvbnRyb2xzKEVsZW1lbnQqIHN0YXJ0Um9v
dCwgRWxlbWVudCogZW5kUm9vdCkKIHsKLSAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCog
c3RhcnRpbmdUZXh0Q29udHJvbCA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChmaXJzdFBvc2l0
aW9uSW5PckJlZm9yZU5vZGUoc3RhcnRSb290KSk7Ci0gICAgSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQqIGVuZGluZ1RleHRDb250cm9sID0gZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKGZpcnN0
UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShlbmRSb290KSk7CisgICAgYXV0byBzdGFydGluZ1RleHRD
b250cm9sID0gIG1ha2VSZWZQdHIoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKGZpcnN0UG9zaXRp
b25Jbk9yQmVmb3JlTm9kZShzdGFydFJvb3QpKSk7CisgICAgYXV0byBlbmRpbmdUZXh0Q29udHJv
bCA9IG1ha2VSZWZQdHIoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKGZpcnN0UG9zaXRpb25Jbk9y
QmVmb3JlTm9kZShlbmRSb290KSkpOwogICAgIGlmIChzdGFydGluZ1RleHRDb250cm9sKQogICAg
ICAgICBzdGFydGluZ1RleHRDb250cm9sLT5kaWRFZGl0SW5uZXJUZXh0VmFsdWUoKTsKICAgICBp
ZiAoZW5kaW5nVGV4dENvbnRyb2wgJiYgc3RhcnRpbmdUZXh0Q29udHJvbCAhPSBlbmRpbmdUZXh0
Q29udHJvbCkKQEAgLTEwOTksNyArMTEwMiw3IEBAIGJvb2wgRWRpdG9yOjp3aWxsQXBwbHlFZGl0
aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5kJiBjb21tYW5kLCBWZWN0b3I8UmVmUHRyPFN0YXRpCiAg
ICAgaWYgKCFjb21tYW5kLnNob3VsZERpc3BhdGNoSW5wdXRFdmVudHMoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKLSAgICBhdXRvKiBjb21wb3NpdGlvbiA9IGNvbW1hbmQuY29tcG9zaXRpb24o
KTsKKyAgICBhdXRvIGNvbXBvc2l0aW9uID0gbWFrZVJlZlB0cihjb21tYW5kLmNvbXBvc2l0aW9u
KCkpOwogICAgIGlmICghY29tcG9zaXRpb24pCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC0x
MTE3LDEwICsxMTIwLDEwIEBAIHZvaWQgRWRpdG9yOjphcHBsaWVkRWRpdGluZyhDb21wb3NpdGVF
ZGl0Q29tbWFuZCYgY29tbWFuZCkKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOwogCiAg
ICAgQVNTRVJUKGNvbW1hbmQuY29tcG9zaXRpb24oKSk7Ci0gICAgYXV0byYgY29tcG9zaXRpb24g
PSAqY29tbWFuZC5jb21wb3NpdGlvbigpOworICAgIGF1dG8gY29tcG9zaXRpb24gPSBtYWtlUmVm
KCpjb21tYW5kLmNvbXBvc2l0aW9uKCkpOwogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0
aW9uKGNvbW1hbmQuZW5kaW5nU2VsZWN0aW9uKCkpOwogCi0gICAgbm90aWZ5VGV4dEZyb21Db250
cm9scyhjb21wb3NpdGlvbi5zdGFydGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSwgY29tcG9zaXRp
b24uZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVudCgpKTsKKyAgICBub3RpZnlUZXh0RnJvbUNvbnRy
b2xzKGNvbXBvc2l0aW9uLT5zdGFydGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSwgY29tcG9zaXRp
b24tPmVuZGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSk7CiAKICAgICBpZiAoY29tbWFuZC5pc1Rv
cExldmVsQ29tbWFuZCgpKSB7CiAgICAgICAgIC8vIERvbid0IGNsZWFyIHRoZSB0eXBpbmcgc3R5
bGUgd2l0aCB0aGlzIHNlbGVjdGlvbiBjaGFuZ2UuIFdlIGRvIHRob3NlIHRoaW5ncyBlbHNld2hl
cmUgaWYgbmVjZXNzYXJ5LgpAQCAtMTEzMiw3ICsxMTM1LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGxp
ZWRFZGl0aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5kJiBjb21tYW5kKQogICAgIH0KIAogICAgIGlm
IChjb21tYW5kLnNob3VsZERpc3BhdGNoSW5wdXRFdmVudHMoKSkKLSAgICAgICAgZGlzcGF0Y2hJ
bnB1dEV2ZW50cyhjb21wb3NpdGlvbi5zdGFydGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSwgY29t
cG9zaXRpb24uZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVudCgpLCBjb21tYW5kLmlucHV0RXZlbnRU
eXBlTmFtZSgpLCBjb21tYW5kLmlucHV0RXZlbnREYXRhKCksIGNvbW1hbmQuaW5wdXRFdmVudERh
dGFUcmFuc2ZlcigpKTsKKyAgICAgICAgZGlzcGF0Y2hJbnB1dEV2ZW50cyhjb21wb3NpdGlvbi0+
c3RhcnRpbmdSb290RWRpdGFibGVFbGVtZW50KCksIGNvbXBvc2l0aW9uLT5lbmRpbmdSb290RWRp
dGFibGVFbGVtZW50KCksIGNvbW1hbmQuaW5wdXRFdmVudFR5cGVOYW1lKCksIGNvbW1hbmQuaW5w
dXRFdmVudERhdGEoKSwgY29tbWFuZC5pbnB1dEV2ZW50RGF0YVRyYW5zZmVyKCkpOwogCiAgICAg
aWYgKGNvbW1hbmQuaXNUb3BMZXZlbENvbW1hbmQoKSkgewogICAgICAgICB1cGRhdGVFZGl0b3JV
SU5vd0lmU2NoZWR1bGVkKCk7CkBAIC0xMjkwLDcgKzEyOTMsNyBAQCBib29sIEVkaXRvcjo6aW5z
ZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBz
ZWxlY3RJbgogICAgIC8vIHRoYXQgaXMgY29udGFpbmVkIGluIHRoZSBldmVudCB0YXJnZXQuCiAg
ICAgc2VsZWN0aW9uID0gc2VsZWN0aW9uRm9yQ29tbWFuZCh0cmlnZ2VyaW5nRXZlbnQpOwogICAg
IGlmIChzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkgewotICAgICAgICBpZiAoTm9kZSog
c2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKSB7Cisg
ICAgICAgIGlmIChhdXRvIHNlbGVjdGlvblN0YXJ0ID0gbWFrZVJlZlB0cihzZWxlY3Rpb24uc3Rh
cnQoKS5kZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICAgICAgUmVmPERvY3VtZW50PiBkb2N1
bWVudChzZWxlY3Rpb25TdGFydC0+ZG9jdW1lbnQoKSk7CiAKICAgICAgICAgICAgIC8vIEluc2Vy
dCB0aGUgdGV4dApAQCAtMTQxOSw3ICsxNDIyLDcgQEAgdm9pZCBFZGl0b3I6OnBlcmZvcm1DdXRP
ckNvcHkoRWRpdG9yQWN0aW9uU3BlY2lmaWVyIGFjdGlvbikKICAgICBpZiAoZW5jbG9zaW5nVGV4
dEZvcm1Db250cm9sKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkg
fHwgKHNlbGVjdGlvbiAmJiBIVE1MRWxlbWVudDo6aXNJbnNpZGVJbWFnZU92ZXJsYXkoKnNlbGVj
dGlvbikpKQogICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoUGFnZVBh
c3RlYm9hcmRDb250ZXh0OjpjcmVhdGUobV9kb2N1bWVudC5wYWdlSUQoKSkpLT53cml0ZVBsYWlu
VGV4dChzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUo
KSA/IFBhc3RlYm9hcmQ6OkNhblNtYXJ0UmVwbGFjZSA6IFBhc3RlYm9hcmQ6OkNhbm5vdFNtYXJ0
UmVwbGFjZSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxl
bWVudCA9IG51bGxwdHI7CisgICAgICAgIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBpbWFnZUVs
ZW1lbnQ7CiAgICAgICAgIGlmIChhY3Rpb24gPT0gQ29weUFjdGlvbikKICAgICAgICAgICAgIGlt
YWdlRWxlbWVudCA9IGltYWdlRWxlbWVudEZyb21JbWFnZURvY3VtZW50KGRvY3VtZW50KCkpOwog
CkBAIC0xNTQ1LDE4ICsxNTQ4LDE1IEBAIHZvaWQgRWRpdG9yOjpzaW1wbGlmeU1hcmt1cChOb2Rl
KiBzdGFydE5vZGUsIE5vZGUqIGVuZE5vZGUpCiB7CiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAg
ICAgIHJldHVybjsKKworICAgIFJlZlB0cjxOb2RlPiBwYXN0RW5kTm9kZTsKICAgICBpZiAoZW5k
Tm9kZSkgewotICAgICAgICBpZiAoJnN0YXJ0Tm9kZS0+ZG9jdW1lbnQoKSAhPSAmZW5kTm9kZS0+
ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgLy8gY2hlY2sgaWYgc3Rh
cnQgbm9kZSBpcyBiZWZvcmUgZW5kTm9kZQotICAgICAgICBOb2RlKiBub2RlID0gc3RhcnROb2Rl
OwotICAgICAgICB3aGlsZSAobm9kZSAmJiBub2RlICE9IGVuZE5vZGUpCi0gICAgICAgICAgICBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSk7Ci0gICAgICAgIGlmICghbm9kZSkKKyAg
ICAgICAgaWYgKCFpc19sdCh0cmVlT3JkZXIoKnN0YXJ0Tm9kZSwgKmVuZE5vZGUpKSkKICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgcGFzdEVuZE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0
KCplbmROb2RlKTsKICAgICB9CiAgICAgCi0gICAgU2ltcGxpZnlNYXJrdXBDb21tYW5kOjpjcmVh
dGUoZG9jdW1lbnQoKSwgc3RhcnROb2RlLCBlbmROb2RlID8gTm9kZVRyYXZlcnNhbDo6bmV4dCgq
ZW5kTm9kZSkgOiBudWxscHRyKS0+YXBwbHkoKTsKKyAgICBTaW1wbGlmeU1hcmt1cENvbW1hbmQ6
OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydE5vZGUsIHBhc3RFbmROb2RlLmdldCgpKS0+YXBwbHko
KTsKIH0KIAogdm9pZCBFZGl0b3I6OmNvcHlVUkwoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgdGl0bGUpCkBAIC0xNTk0LDcgKzE1OTQsNyBAQCBQYXN0ZWJvYXJkV3JpdGVyRGF0YTo6VVJM
RGF0YSBFZGl0b3I6OnBhc3RlYm9hcmRXcml0ZXJVUkwoY29uc3QgVVJMJiB1cmwsIGNvbnN0CiAK
IHZvaWQgRWRpdG9yOjpjb3B5SW1hZ2UoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQogewot
ICAgIEVsZW1lbnQqIGVsZW1lbnQgPSByZXN1bHQuaW5uZXJOb25TaGFyZWRFbGVtZW50KCk7Cisg
ICAgYXV0byBlbGVtZW50ID0gbWFrZVJlZlB0cihyZXN1bHQuaW5uZXJOb25TaGFyZWRFbGVtZW50
KCkpOwogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xODc2LDggKzE4
NzYsOCBAQCB2b2lkIEVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24oV3JpdGluZ0RpcmVj
dGlvbiBkaXJlY3Rpb24pCiAgICAgICAgICYmIGJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0
aW9uU3RhcnQoKSA9PSBkaXJlY3Rpb24pCiAgICAgICAgIHJldHVybjsKICNlbmRpZgotICAgICAg
ICAKLSAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IGRvY3VtZW50KCkuZm9jdXNlZEVsZW1l
bnQoKTsKKworICAgIGF1dG8gZm9jdXNlZEVsZW1lbnQgPSBtYWtlUmVmUHRyKGRvY3VtZW50KCku
Zm9jdXNlZEVsZW1lbnQoKSk7CiAgICAgaWYgKGZvY3VzZWRFbGVtZW50ICYmIGZvY3VzZWRFbGVt
ZW50LT5pc1RleHRGaWVsZCgpKSB7CiAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gV3JpdGluZ0Rp
cmVjdGlvbjo6TmF0dXJhbCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE5MDQsMTAgKzE5MDQs
MTIgQEAgV3JpdGluZ0RpcmVjdGlvbiBFZGl0b3I6OmJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2Vs
ZWN0aW9uU3RhcnQoKSBjb25zdAogICAgIGF1dG8gcmVzdWx0ID0gV3JpdGluZ0RpcmVjdGlvbjo6
TGVmdFRvUmlnaHQ7CiAKICAgICBQb3NpdGlvbiBwb3MgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgTm9kZSog
bm9kZSA9IHBvcy5kZXByZWNhdGVkTm9kZSgpOworICAgIGF1dG8gbm9kZSA9IG1ha2VSZWZQdHIo
cG9zLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKIAorICAgIFNjcmlwdERpc2FsbG93ZWRTY29wZTo6SW5NYWluVGhyZWFkIHNjcmlwdERp
c2FsbG93ZWRTY29wZTsKKwogICAgIGF1dG8gcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwog
ICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0yMDc1LDcgKzIw
NzcsNyBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBj
b25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbgogICAgIGNsaWVudCgpLT5zdGFydERlbGF5
aW5nQW5kQ29hbGVzY2luZ0NvbnRlbnRDaGFuZ2VOb3RpZmljYXRpb25zKCk7CiAjZW5kaWYKIAot
ICAgIEVsZW1lbnQqIHRhcmdldCA9IGRvY3VtZW50KCkuZm9jdXNlZEVsZW1lbnQoKTsKKyAgICBh
dXRvIHRhcmdldCA9IG1ha2VSZWZQdHIoZG9jdW1lbnQoKS5mb2N1c2VkRWxlbWVudCgpKTsKICAg
ICBpZiAodGFyZ2V0KSB7CiAgICAgICAgIC8vIERpc3BhdGNoIGFuIGFwcHJvcHJpYXRlIGNvbXBv
c2l0aW9uIGV2ZW50IHRvIHRoZSBmb2N1c2VkIG5vZGUuCiAgICAgICAgIC8vIFdlIGNoZWNrIHRo
ZSBjb21wb3NpdGlvbiBzdGF0dXMgYW5kIGNob29zZSBhbiBhcHByb3ByaWF0ZSBjb21wb3NpdGlv
biBldmVudCBzaW5jZSB0aGlzCkBAIC0yMTI1LDEzICsyMTI3LDEzIEBAIHZvaWQgRWRpdG9yOjpz
ZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlv
blVuZGVybGluCiAgICAgICAgIC8vIEZpbmQgb3V0IHdoYXQgbm9kZSBoYXMgdGhlIGNvbXBvc2l0
aW9uIG5vdy4KICAgICAgICAgUG9zaXRpb24gYmFzZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuYmFzZSgpLmRvd25zdHJlYW0oKTsKICAgICAgICAgUG9zaXRpb24gZXh0ZW50
ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5leHRlbnQoKTsKLSAgICAgICAg
Tm9kZSogYmFzZU5vZGUgPSBiYXNlLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgICAgIGF1dG8gYmFz
ZU5vZGUgPSBtYWtlUmVmUHRyKGJhc2UuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIHVuc2ln
bmVkIGJhc2VPZmZzZXQgPSBiYXNlLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7Ci0gICAgICAg
IE5vZGUqIGV4dGVudE5vZGUgPSBleHRlbnQuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICAgICAgYXV0
byBleHRlbnROb2RlID0gbWFrZVJlZlB0cihleHRlbnQuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAg
ICAgIHVuc2lnbmVkIGV4dGVudE9mZnNldCA9IGV4dGVudC5kZXByZWNhdGVkRWRpdGluZ09mZnNl
dCgpOwogCiAgICAgICAgIGlmIChpczxUZXh0PihiYXNlTm9kZSkgJiYgYmFzZU5vZGUgPT0gZXh0
ZW50Tm9kZSAmJiBiYXNlT2Zmc2V0ICsgdGV4dC5sZW5ndGgoKSA9PSBleHRlbnRPZmZzZXQpIHsK
LSAgICAgICAgICAgIG1fY29tcG9zaXRpb25Ob2RlID0gZG93bmNhc3Q8VGV4dD4oYmFzZU5vZGUp
OworICAgICAgICAgICAgbV9jb21wb3NpdGlvbk5vZGUgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PFRl
eHQ+KGJhc2VOb2RlKTsKICAgICAgICAgICAgIG1fY29tcG9zaXRpb25TdGFydCA9IGJhc2VPZmZz
ZXQ7CiAgICAgICAgICAgICBtX2NvbXBvc2l0aW9uRW5kID0gZXh0ZW50T2Zmc2V0OwogICAgICAg
ICAgICAgbV9jdXN0b21Db21wb3NpdGlvblVuZGVybGluZXMgPSB1bmRlcmxpbmVzOwpAQCAtMjIz
OSw3ICsyMjQxLDcgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29s
IHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgIH0KIAogICAgIC8vIHRvcE5vZGUgZGVmaW5lcyB0
aGUgd2hvbGUgcmFuZ2Ugd2Ugd2FudCB0byBvcGVyYXRlIG9uIAotICAgIGF1dG8qIHRvcE5vZGUg
PSBoaWdoZXN0RWRpdGFibGVSb290KHBvc2l0aW9uKTsKKyAgICBhdXRvIHRvcE5vZGUgPSBtYWtl
UmVmUHRyKGhpZ2hlc3RFZGl0YWJsZVJvb3QocG9zaXRpb24pKTsKICAgICBpZiAodG9wTm9kZSkK
ICAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS5lbmQgPSBtYWtlQm91bmRhcnlQb2ludEFmdGVy
Tm9kZUNvbnRlbnRzKCp0b3BOb2RlKTsKIApAQCAtMjU1MSw4ICsyNTUzLDcgQEAgdm9pZCBFZGl0
b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRp
b24mIHdvcmRTdGFydCwKICAgICAgICAgICAgIGlmIChuZXh0UG9zaXRpb24uaXNOdWxsKCkgfHwg
bmV4dFBvc2l0aW9uID09IHNwZWxsQ2hlY2tpbmdFbmQpCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAKLSAgICAgICAgICAgIGF1dG8qIGNvbnRhaW5lciA9IG5leHRQb3NpdGlvbi5kZWVwRXF1aXZh
bGVudCgpLnVwc3RyZWFtKCkuY29udGFpbmVyTm9kZSgpOwotICAgICAgICAgICAgaWYgKGF1dG8q
IGNvbnRhaW5lckVsZW1lbnQgPSBpczxFbGVtZW50Pihjb250YWluZXIpID8gZG93bmNhc3Q8RWxl
bWVudD4oY29udGFpbmVyKSA6IGNvbnRhaW5lci0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAg
ICAgICBpZiAoYXV0byBjb250YWluZXJFbGVtZW50ID0gbWFrZVJlZlB0cihuZXh0UG9zaXRpb24u
ZGVlcEVxdWl2YWxlbnQoKS51cHN0cmVhbSgpLmNvbnRhaW5lck9yUGFyZW50RWxlbWVudCgpKSkg
ewogICAgICAgICAgICAgICAgIGlmICghY29udGFpbmVyRWxlbWVudC0+aXNTcGVsbENoZWNraW5n
RW5hYmxlZCgpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAg
LTI2NjEsMTEgKzI2NjIsMTEgQEAgYm9vbCBFZGl0b3I6OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRG
b3IoTm9kZSogbm9kZSkgY29uc3QKIHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gaXM8RWxlbWVudD4oKm5vZGUpID8gZG93bmNh
c3Q8RWxlbWVudD4obm9kZSkgOiBub2RlLT5wYXJlbnRFbGVtZW50KCk7CisgICAgYXV0byBlbGVt
ZW50ID0gbWFrZVJlZlB0cihpczxFbGVtZW50Pigqbm9kZSkgPyBkb3duY2FzdDxFbGVtZW50Pihu
b2RlKSA6IG5vZGUtPnBhcmVudEVsZW1lbnQoKSk7CiAgICAgaWYgKCFlbGVtZW50KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGVsZW1lbnQtPmlzSW5Vc2VyQWdlbnRTaGFkb3dUcmVl
KCkpIHsKLSAgICAgICAgaWYgKEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0Q29udHJv
bCA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUo
ZWxlbWVudCkpKQorICAgICAgICBpZiAoYXV0byB0ZXh0Q29udHJvbCA9IG1ha2VSZWZQdHIoZW5j
bG9zaW5nVGV4dEZvcm1Db250cm9sKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShlbGVtZW50
LmdldCgpKSkpKQogICAgICAgICAgICAgcmV0dXJuIHRleHRDb250cm9sLT5pc1NwZWxsQ2hlY2tp
bmdFbmFibGVkKCk7CiAgICAgfQogICAgIHJldHVybiBlbGVtZW50LT5pc1NwZWxsQ2hlY2tpbmdF
bmFibGVkKCk7CkBAIC0yNzA0LDExICsyNzA1LDExIEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlz
c3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBl
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIElmIHdlJ3JlIG5vdCBpbiBhbiBlZGl0YWJsZSBu
b2RlLCBiYWlsLgotICAgIE5vZGUmIGVkaXRhYmxlTm9kZSA9IHNwZWxsaW5nUmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKCk7Ci0gICAgaWYgKCFlZGl0YWJsZU5vZGUuaGFzRWRpdGFibGVTdHlsZSgpKQor
ICAgIGF1dG8gZWRpdGFibGVOb2RlID0gbWFrZVJlZihzcGVsbGluZ1JhbmdlLT5zdGFydENvbnRh
aW5lcigpKTsKKyAgICBpZiAoIWVkaXRhYmxlTm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoIWlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoJmVkaXRh
YmxlTm9kZSkpCisgICAgaWYgKCFpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKGVkaXRhYmxlTm9k
ZS5wdHIoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8mIHJhbmdlVG9DaGVjayA9IHNo
b3VsZE1hcmtHcmFtbWFyID8gKmdyYW1tYXJSYW5nZSA6ICpzcGVsbGluZ1JhbmdlOwpAQCAtMjkw
MCw4ICsyOTAxLDggQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxs
Q2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgICAgICAgICBj
b3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgocGFyYWdy
YXBoLCByYW5nZVRvUmVwbGFjZSwgcmVwbGFjZW1lbnQsIHsgcmVzdWx0TG9jYXRpb24sIHJlc3Vs
dExlbmd0aCB9KTsKIAogICAgICAgICAgICAgICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9
IGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKEVsZW1lbnQqIHJvb3QgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLT5w
b3N0Tm90aWZpY2F0aW9uKHJvb3QsIEFYT2JqZWN0Q2FjaGU6OkFYQXV0b2NvcnJlY3Rpb25PY2N1
cmVkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8gcm9vdCA9IG1ha2VSZWZQdHIobV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUtPnBvc3ROb3RpZmljYXRpb24ocm9vdC5nZXQo
KSwgQVhPYmplY3RDYWNoZTo6QVhBdXRvY29ycmVjdGlvbk9jY3VyZWQpOwogICAgICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIFNraXAgYWxsIG90aGVyIHJlc3VsdHMgZm9yIHRo
ZSByZXBsYWNlZCB0ZXh0LgpAQCAtMzY3MCw4ICszNjcxLDcgQEAgYm9vbCBFZGl0b3I6OnNob3Vs
ZERldGVjdFRlbGVwaG9uZU51bWJlcnMoKSBjb25zdAogc3RhdGljIFZlY3RvcjxTaW1wbGVSYW5n
ZT4gc2NhbkZvclRlbGVwaG9uZU51bWJlcnMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewog
ICAgIC8vIERvbid0IHNjYW4gZm9yIHBob25lIG51bWJlcnMgaW5zaWRlIGVkaXRhYmxlIHJlZ2lv
bnMuCi0gICAgYXV0byYgc3RhcnROb2RlID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKTsKLSAgICBp
ZiAoc3RhcnROb2RlLmhhc0VkaXRhYmxlU3R5bGUoKSkKKyAgICBpZiAoYXV0byBzdGFydE5vZGUg
PSBtYWtlUmVmUHRyKHJhbmdlLnN0YXJ0Q29udGFpbmVyKCkpOyBzdGFydE5vZGUtPmhhc0VkaXRh
YmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICBhdXRvIHRleHQgPSBwbGFpblRl
eHQocmFuZ2UpOwogICAgIFZlY3RvcjxTaW1wbGVSYW5nZT4gcmVzdWx0OwpAQCAtMzcwNiwyNyAr
MzcwNiwzNCBAQCB2b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMo
KQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RldGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2Vz
LmNsZWFyKCk7CisgICAgCisgICAgYXV0byBub3RpZnlDb250cm9sbGVyID0gbWFrZVNjb3BlRXhp
dChbJl0geworICAgICAgICBpZiAoYXV0byogcGFnZSA9IG1fZG9jdW1lbnQucGFnZSgpKQorICAg
ICAgICAgICAgcGFnZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGVkVGVsZXBo
b25lTnVtYmVyUmFuZ2VzQ2hhbmdlZCgpOworICAgIH0pOwogCi0gICAgYXV0byYgc2VsZWN0aW9u
ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSkg
ewotICAgICAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigp
LmZpcnN0UmFuZ2UoKSkgewotICAgICAgICAgICAgLy8gRXh0ZW5kIHRoZSByYW5nZSBhIGZldyBj
aGFyYWN0ZXJzIGluIGVhY2ggZGlyZWN0aW9uIHRvIGRldGVjdCBpbmNvbXBsZXRlbHkgc2VsZWN0
ZWQgcGhvbmUgbnVtYmVycy4KLSAgICAgICAgICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBjaGFyYWN0
ZXJzVG9FeHRlbmQgPSAxNTsKLSAgICAgICAgICAgIGlmIChhdXRvIGV4dGVuZGVkUmFuZ2UgPSBl
eHRlbmRTZWxlY3Rpb24oKnNlbGVjdGVkUmFuZ2UsIGNoYXJhY3RlcnNUb0V4dGVuZCkpIHsKLSAg
ICAgICAgICAgICAgICBmb3IgKGF1dG8mIHJhbmdlIDogc2NhbkZvclRlbGVwaG9uZU51bWJlcnMo
KmV4dGVuZGVkUmFuZ2UpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXaHkgZG8g
d2UgZG8gdGhpcyB1bmNvbmRpdGlvbmFsbHkgaW5zdGVhZCBvZiB3aGVuIG9ubHkgd2hlbiBpdCBv
dmVybGFwcyB0aGUgc2VsZWN0aW9uPwotICAgICAgICAgICAgICAgICAgICBhZGRNYXJrZXIocmFu
Z2UsIERvY3VtZW50TWFya2VyOjpUZWxlcGhvbmVOdW1iZXIpOwotCi0gICAgICAgICAgICAgICAg
ICAgIC8vIE9ubHkgY29uc2lkZXIgcmFuZ2VzIHdpdGggYSBkZXRlY3RlZCB0ZWxlcGhvbmUgbnVt
YmVyIGlmIHRoZXkgb3ZlcmxhcCB3aXRoIHRoZSBzZWxlY3Rpb24uCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChpbnRlcnNlY3RzPENvbXBvc2VkVHJlZT4ocmFuZ2UsICpzZWxlY3RlZFJhbmdlKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXMu
YXBwZW5kKHJhbmdlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9CisgICAgYXV0byBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpOworICAgIGlmICghc2VsZWN0aW9uLmlzUmFuZ2UoKSkKKyAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKSkKLSAgICAgICAgcGFn
ZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGVkVGVsZXBob25lTnVtYmVyUmFu
Z2VzQ2hhbmdlZCgpOworICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi5maXJzdFJh
bmdlKCk7CisgICAgaWYgKCFzZWxlY3RlZFJhbmdlKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBFeHRlbmQgdGhlIHJhbmdlIGEgZmV3IGNoYXJhY3RlcnMgaW4gZWFjaCBkaXJlY3Rpb24gdG8g
ZGV0ZWN0IGluY29tcGxldGVseSBzZWxlY3RlZCBwaG9uZSBudW1iZXJzLgorICAgIGNvbnN0ZXhw
ciB1bnNpZ25lZCBjaGFyYWN0ZXJzVG9FeHRlbmQgPSAxNTsKKyAgICBhdXRvIGV4dGVuZGVkUmFu
Z2UgPSBleHRlbmRTZWxlY3Rpb24oKnNlbGVjdGVkUmFuZ2UsIGNoYXJhY3RlcnNUb0V4dGVuZCk7
CisgICAgaWYgKCFleHRlbmRlZFJhbmdlKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1
dG8mIHJhbmdlIDogc2NhbkZvclRlbGVwaG9uZU51bWJlcnMoKmV4dGVuZGVkUmFuZ2UpKSB7Cisg
ICAgICAgIC8vIEZJWE1FOiBXaHkgZG8gd2UgZG8gdGhpcyB1bmNvbmRpdGlvbmFsbHkgaW5zdGVh
ZCBvZiB3aGVuIG9ubHkgd2hlbiBpdCBvdmVybGFwcyB0aGUgc2VsZWN0aW9uPworICAgICAgICBh
ZGRNYXJrZXIocmFuZ2UsIERvY3VtZW50TWFya2VyOjpUZWxlcGhvbmVOdW1iZXIpOworCisgICAg
ICAgIC8vIE9ubHkgY29uc2lkZXIgcmFuZ2VzIHdpdGggYSBkZXRlY3RlZCB0ZWxlcGhvbmUgbnVt
YmVyIGlmIHRoZXkgb3ZlcmxhcCB3aXRoIHRoZSBzZWxlY3Rpb24uCisgICAgICAgIGlmIChpbnRl
cnNlY3RzPENvbXBvc2VkVHJlZT4ocmFuZ2UsICpzZWxlY3RlZFJhbmdlKSkKKyAgICAgICAgICAg
IG1fZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXMuYXBwZW5kKHJhbmdlKTsKKyAgICB9CiB9
CiAKICNlbmRpZiAvLyBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFU
Rk9STShJT1NfRkFNSUxZKQpAQCAtMzgxMiwxNCArMzgxOSwxOCBAQCB2b2lkIEVkaXRvcjo6ZWRp
dG9yVUlVcGRhdGVUaW1lckZpcmVkKCkKICNlbmRpZgogfQogCi1zdGF0aWMgTm9kZSogZmluZEZp
cnN0TWFya2FibGUoTm9kZSogbm9kZSkKK3N0YXRpYyBSZWZQdHI8Tm9kZT4gZmluZEZpcnN0TWFy
a2FibGUoTm9kZSogc3RhcnRpbmdOb2RlKQogeworICAgIGF1dG8gbm9kZSA9IG1ha2VSZWZQdHIo
c3RhcnRpbmdOb2RlKTsKICAgICB3aGlsZSAobm9kZSkgewotICAgICAgICBpZiAoIW5vZGUtPnJl
bmRlcmVyKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaWYgKG5vZGUt
PnJlbmRlcmVyKCktPmlzVGV4dE9yTGluZUJyZWFrKCkpCi0gICAgICAgICAgICByZXR1cm4gbm9k
ZTsKLSAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpub2RlKSAmJiBkb3duY2FzdDxFbGVtZW50Pigq
bm9kZSkuaXNUZXh0RmllbGQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgU2NyaXB0RGlzYWxs
b3dlZFNjb3BlOjpJbk1haW5UaHJlYWQgc2NyaXB0RGlzYWxsb3dlZFNjb3BlOworICAgICAgICAg
ICAgaWYgKCFub2RlLT5yZW5kZXJlcigpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICAgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCktPmlzVGV4dE9yTGluZUJyZWFrKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlz
PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pigqbm9kZSkgJiYgZG93bmNhc3Q8RWxlbWVudD4o
Km5vZGUpLmlzVGV4dEZpZWxkKCkpCiAgICAgICAgICAgICBub2RlID0gZG93bmNhc3Q8SFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQ+KCpub2RlKS52aXNpYmxlUG9zaXRpb25Gb3JJbmRleCgxKS5k
ZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIGVsc2UgaWYgKG5vZGUt
PmZpcnN0Q2hpbGQoKSkKICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5maXJzdENoaWxkKCk7CkBA
IC0zODMyLDcgKzM4NDMsNyBAQCBzdGF0aWMgTm9kZSogZmluZEZpcnN0TWFya2FibGUoTm9kZSog
bm9kZSkKIAogYm9vbCBFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yKERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUsIGludCBmcm9tLCBpbnQgbGVuZ3RoKSBjb25z
dAogewotICAgIE5vZGUqIG5vZGUgPSBmaW5kRmlyc3RNYXJrYWJsZShtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgYXV0byBu
b2RlID0gZmluZEZpcnN0TWFya2FibGUobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCkBAIC0zODUxLDcgKzM4NjIsNyBAQCBPcHRpb25TZXQ8VGV4dENoZWNraW5n
VHlwZT4gRWRpdG9yOjpyZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2soY29uc3QgTm9kZSYgcm9v
dAogewogI2lmIFVTRShBVVRPTUFUSUNfVEVYVF9SRVBMQUNFTUVOVCkgJiYgIVBMQVRGT1JNKElP
U19GQU1JTFkpCiAgICAgYm9vbCBvbmx5QWxsb3dzVGV4dFJlcGxhY2VtZW50ID0gZmFsc2U7Ci0g
ICAgaWYgKGF1dG8qIGhvc3QgPSByb290RWRpdGFibGVFbGVtZW50LnNoYWRvd0hvc3QoKSkKKyAg
ICBpZiAoYXV0byBob3N0ID0gbWFrZVJlZlB0cihyb290RWRpdGFibGVFbGVtZW50LnNoYWRvd0hv
c3QoKSkpCiAgICAgICAgIG9ubHlBbGxvd3NUZXh0UmVwbGFjZW1lbnQgPSBpczxIVE1MSW5wdXRF
bGVtZW50Pihob3N0KSAmJiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqaG9zdCkuaXNTcGVs
bGNoZWNrRGlzYWJsZWRFeGNlcHRUZXh0UmVwbGFjZW1lbnQoKTsKICAgICBpZiAob25seUFsbG93
c1RleHRSZXBsYWNlbWVudCkKICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucyA9IHRleHRDaGVj
a2luZ09wdGlvbnMgJiBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudDsKQEAgLTM5MTEsOSAr
MzkyMiw3IEBAIHN0YXRpYyBib29sIGNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogU3RyaW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlk
YXRlUmVxdWVzdCgpIGNvbnN0CiB7CiAgICAgYXV0byYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLmlzQ2Fy
ZXQoKQotICAgICAgICA/IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkK
LSAgICAgICAgOiBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdl
ID0gc2VsZWN0aW9uLmlzQ2FyZXQoKSA/IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihzZWxlY3Rpb24u
c3RhcnQoKSkgOiBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdl
KQogICAgICAgICByZXR1cm4geyB9OwogICAgIGlmICghY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4
dChzZWxlY3Rpb24pKQpAQCAtMzk4OSwxNyArMzk5OCwyMSBAQCBzdGF0aWMgVmVjdG9yPFRleHRM
aXN0PiBlZGl0YWJsZVRleHRMaXN0c0F0UG9zaXRpb25JbkRlc2NlbmRpbmdPcmRlcihjb25zdCBQ
b3NpdAogICAgIHJldHVybiB0ZXh0TGlzdHM7CiB9CiAKLUZvbnRBdHRyaWJ1dGVzIEVkaXRvcjo6
Zm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlvblN0YXJ0KCkgY29uc3QKK0ZvbnRBdHRyaWJ1dGVzIEVk
aXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlvblN0YXJ0KCkKIHsKLSAgICBGb250QXR0cmli
dXRlcyBhdHRyaWJ1dGVzOwotICAgIE5vZGUqIG5vZGVUb1JlbW92ZSA9IG51bGxwdHI7Ci0gICAg
YXV0byogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KG1fZG9jdW1lbnQuZnJhbWUoKSwg
bm9kZVRvUmVtb3ZlKTsKLSAgICBpZiAoIXN0eWxlKSB7CisgICAgUmVmUHRyPE5vZGU+IG5vZGVU
b1JlbW92ZTsKKyAgICBhdXRvIG5vZGVSZW1vdmFsU2NvcGUgPSBXVEY6Om1ha2VTY29wZUV4aXQo
WyZub2RlVG9SZW1vdmVdKCkgewogICAgICAgICBpZiAobm9kZVRvUmVtb3ZlKQogICAgICAgICAg
ICAgbm9kZVRvUmVtb3ZlLT5yZW1vdmUoKTsKLSAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7Ci0g
ICAgfQorICAgIH0pOworCisgICAgYXV0byogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0
KG5vZGVUb1JlbW92ZSk7CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIFNjcmlwdERpc2FsbG93ZWRTY29wZTo6SW5NYWluVGhyZWFkIHNjcmlwdERpc2FsbG93ZWRT
Y29wZTsKIAorICAgIEZvbnRBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7CiAgICAgcGxhdGZvcm1Gb250
QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQoYXR0cmlidXRlcywgKnN0eWxlKTsKIAogICAgIC8v
IEZJWE1FOiBmb3Igbm93LCBhbHdheXMgcmVwb3J0IHRoZSBjb2xvcnMgYWZ0ZXIgYXBwbHlpbmcg
LWFwcGxlLWNvbG9yLWZpbHRlci4gSW4gZnV0dXJlIG5vdCBhbGwgY2xpZW50cwpAQCAtNDA4MSw5
ICs0MDk0LDYgQEAgRm9udEF0dHJpYnV0ZXMgRWRpdG9yOjpmb250QXR0cmlidXRlc0F0U2VsZWN0
aW9uU3RhcnQoKSBjb25zdAogICAgICAgICAgICAgYXR0cmlidXRlcy5oYXNVbmRlcmxpbmUgPSB0
cnVlOwogICAgIH0KIAotICAgIGlmIChub2RlVG9SZW1vdmUpCi0gICAgICAgIG5vZGVUb1JlbW92
ZS0+cmVtb3ZlKCk7Ci0KICAgICByZXR1cm4gYXR0cmlidXRlczsKIH0KIApAQCAtNDExMCw3ICs0
MTIwLDcgQEAgUHJvbWlzZWRBdHRhY2htZW50SW5mbyBFZGl0b3I6OnByb21pc2VkQXR0YWNobWVu
dEluZm8oRWxlbWVudCYgZWxlbWVudCkKICAgICBnZXRQYXN0ZWJvYXJkVHlwZXNBbmREYXRhRm9y
QXR0YWNobWVudChlbGVtZW50LCBhZGRpdGlvbmFsVHlwZXMsIGFkZGl0aW9uYWxEYXRhKTsKICNl
bmRpZgogCi0gICAgaWYgKGF1dG8qIGZpbGUgPSBhdHRhY2htZW50LT5maWxlKCkpCisgICAgaWYg
KGF1dG8gZmlsZSA9IG1ha2VSZWZQdHIoYXR0YWNobWVudC0+ZmlsZSgpKSkKICAgICAgICAgcmV0
dXJuIHsgZmlsZS0+dXJsKCksIHBsYXRmb3JtQ29udGVudFR5cGVGb3JCbG9iVHlwZShmaWxlLT50
eXBlKCkpLCBmaWxlLT5uYW1lKCksIHsgfSwgV1RGTW92ZShhZGRpdGlvbmFsVHlwZXMpLCBXVEZN
b3ZlKGFkZGl0aW9uYWxEYXRhKSB9OwogCiAgICAgcmV0dXJuIHsgeyB9LCB7IH0sIHsgfSwgYXR0
YWNobWVudC0+dW5pcXVlSWRlbnRpZmllcigpLCBXVEZNb3ZlKGFkZGl0aW9uYWxUeXBlcyksIFdU
Rk1vdmUoYWRkaXRpb25hbERhdGEpIH07CkBAIC00MjUzLDUzICs0MjYzLDU4IEBAIE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiBFZGl0b3I6OmFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKQogfQogCiAvLyBG
SVhNRTogVGhpcyBmaWd1cmVzIG91dCB0aGUgY3VycmVudCBzdHlsZSBieSBpbnNlcnRpbmcgYSA8
c3Bhbj4hCi1jb25zdCBSZW5kZXJTdHlsZSogRWRpdG9yOjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0
KEZyYW1lKiBmcmFtZSwgTm9kZSomIG5vZGVUb1JlbW92ZSkKK2NvbnN0IFJlbmRlclN0eWxlKiBF
ZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoUmVmUHRyPE5vZGU+JiBub2RlVG9SZW1vdmUp
CiB7CiAgICAgbm9kZVRvUmVtb3ZlID0gbnVsbHB0cjsKIAotICAgIGlmIChmcmFtZS0+c2VsZWN0
aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuaXNOb25lKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUG9zaXRpb24gcG9zaXRpb24gPSBhZGp1
c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbihmcmFtZS0+c2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkpOworICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gYWRqdXN0ZWRTZWxlY3Rpb25T
dGFydEZvclN0eWxlQ29tcHV0YXRpb24oZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KSk7CiAgICAgaWYgKCFwb3NpdGlvbi5pc0NhbmRpZGF0ZSgpIHx8IHBvc2l0aW9uLmlzTnVsbCgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5
cGluZ1N0eWxlID0gZnJhbWUtPnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCk7CisgICAgYXV0byB0
eXBpbmdTdHlsZSA9IG1ha2VSZWZQdHIoZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS50eXBpbmdTdHls
ZSgpKTsKICAgICBpZiAoIXR5cGluZ1N0eWxlIHx8ICF0eXBpbmdTdHlsZS0+c3R5bGUoKSkKICAg
ICAgICAgcmV0dXJuICZwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5zdHls
ZSgpOwogCi0gICAgYXV0byBzdHlsZUVsZW1lbnQgPSBIVE1MU3BhbkVsZW1lbnQ6OmNyZWF0ZSgq
ZnJhbWUtPmRvY3VtZW50KCkpOworICAgIGF1dG8gc3R5bGVFbGVtZW50ID0gSFRNTFNwYW5FbGVt
ZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7CiAKICAgICBTdHJpbmcgc3R5bGVUZXh0ID0gdHlwaW5n
U3R5bGUtPnN0eWxlKCktPmFzVGV4dCgpICsgIiBkaXNwbGF5OiBpbmxpbmUiOwogICAgIHN0eWxl
RWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3R5bGVBdHRyLCBzdHlsZVRleHQpOwog
Ci0gICAgc3R5bGVFbGVtZW50LT5hcHBlbmRDaGlsZChmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRl
RWRpdGluZ1RleHROb2RlKGVtcHR5U3RyaW5nKCkpKTsKKyAgICBzdHlsZUVsZW1lbnQtPmFwcGVu
ZENoaWxkKGRvY3VtZW50KCkuY3JlYXRlRWRpdGluZ1RleHROb2RlKGVtcHR5U3RyaW5nKCkpKTsK
IAogICAgIGF1dG8gcG9zaXRpb25Ob2RlID0gcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKTsKLSAg
ICBpZiAoIXBvc2l0aW9uTm9kZSB8fCAhcG9zaXRpb25Ob2RlLT5wYXJlbnROb2RlKCkgfHwgcG9z
aXRpb25Ob2RlLT5wYXJlbnROb2RlKCktPmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCkuaGFzRXhj
ZXB0aW9uKCkpCisgICAgQVNTRVJUKHBvc2l0aW9uTm9kZSk7CisgICAgYXV0byBwYXJlbnQgPSBt
YWtlUmVmUHRyKHBvc2l0aW9uTm9kZS0+cGFyZW50Tm9kZSgpKTsKKyAgICBpZiAoIXBhcmVudCB8
fCBwYXJlbnQtPmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudC5nZXQoKSkuaGFzRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgbm9kZVRvUmVtb3ZlID0gc3R5bGVFbGVt
ZW50LnB0cigpOwotICAgIAotICAgIGZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVl
ZGVkKCk7CisKKyAgICBkb2N1bWVudCgpLnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKICAgICByZXR1
cm4gc3R5bGVFbGVtZW50LT5yZW5kZXJlcigpID8gJnN0eWxlRWxlbWVudC0+cmVuZGVyZXIoKS0+
c3R5bGUoKSA6IG51bGxwdHI7CiB9CiAKLWNvbnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNlbGVj
dGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBjb25zdAorUmVmUHRyPEZvbnQ+IEVkaXRvcjo6
Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKQogewogICAgIGhhc011bHRp
cGxlRm9udHMgPSBmYWxzZTsKIAogICAgIGlmICghbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc1Jh
bmdlKCkpIHsKLSAgICAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOwotICAgICAgICBhdXRvKiBzdHls
ZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5mcmFtZSgpLCBub2RlVG9SZW1v
dmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQotCi0gICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBu
dWxscHRyOwotICAgICAgICBpZiAoc3R5bGUpIHsKLSAgICAgICAgICAgIGZvbnQgPSAmc3R5bGUt
PmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKLSAgICAgICAgICAgIGlmIChub2RlVG9SZW1v
dmUpCi0gICAgICAgICAgICAgICAgbm9kZVRvUmVtb3ZlLT5yZW1vdmUoKTsKKyAgICAgICAgUmVm
UHRyPE5vZGU+IG5vZGVUb1JlbW92ZTsKKyAgICAgICAgUmVmUHRyPEZvbnQ+IGZvbnQ7CisgICAg
ICAgIHsKKyAgICAgICAgICAgIGF1dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydChu
b2RlVG9SZW1vdmUpOworICAgICAgICAgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIFNjcmlwdERpc2FsbG93ZWRTY29wZTo6SW5NYWlu
VGhyZWFkIHNjcmlwdERpc2FsbG93ZWRTY29wZTsKKyAgICAgICAgICAgIGZvbnQgPSBjb25zdF9j
YXN0PEZvbnQqPigmc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKSk7CiAgICAgICAg
IH0KIAorICAgICAgICBpZiAobm9kZVRvUmVtb3ZlKQorICAgICAgICAgICAgbm9kZVRvUmVtb3Zl
LT5yZW1vdmUoKTsKKwogICAgICAgICByZXR1cm4gZm9udDsKICAgICB9CiAKQEAgLTQzMTMsMTQg
KzQzMjgsMTYgQEAgY29uc3QgRm9udCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhh
c011bHRpcGxlRm9udHMpIGNvbnN0CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJhbmdl
LT5zdGFydCA9ICphZGp1c3RlZFN0YXJ0OwogCi0gICAgY29uc3QgRm9udCogZm9udCA9IG51bGxw
dHI7CisgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJbk1haW5UaHJlYWQgc2NyaXB0RGlzYWxs
b3dlZFNjb3BlOworCisgICAgUmVmUHRyPEZvbnQ+IGZvbnQ7CiAgICAgZm9yIChhdXRvJiBub2Rl
IDogaW50ZXJzZWN0aW5nTm9kZXMoKnJhbmdlKSkgewogICAgICAgICBhdXRvIHJlbmRlcmVyID0g
bm9kZS5yZW5kZXJlcigpOwogICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIGF1dG8mIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwogICAgICAgICBpZiAoIWZvbnQpCi0gICAgICAgICAg
ICBmb250ID0gJnByaW1hcnlGb250OworICAgICAgICAgICAgZm9udCA9IGNvbnN0X2Nhc3Q8Rm9u
dCo+KCZwcmltYXJ5Rm9udCk7CiAgICAgICAgIGVsc2UgaWYgKGZvbnQgIT0gJnByaW1hcnlGb250
KSB7CiAgICAgICAgICAgICBoYXNNdWx0aXBsZUZvbnRzID0gdHJ1ZTsKICAgICAgICAgICAgIGJy
ZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXggZjFjMWM1YTVjNTI4MDQ5OWVmZjkyMDBk
NThhYzFkNjRiY2RlYjBkZi4uNjhhZGJkNDNjNTdkOGQwZDJjZWI4M2U5NTMzODQyMTc0Njc3MTAy
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC00NDIsNyArNDQyLDcgQEAgcHVibGljOgog
ICAgIHZvaWQgY2xlYXJNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mKTsKICAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mKTsKIAotICAgIEVsZW1lbnQqIGZpbmRFdmVudFRhcmdldEZyb20oY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKSBjb25zdDsKKyAgICBSZWZQdHI8RWxlbWVu
dD4gZmluZEV2ZW50VGFyZ2V0RnJvbShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgY29uc3Q7CiAK
ICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VsZWN0ZWRUZXh0KCkgY29uc3Q7CiAgICAgU3Ry
aW5nIHNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2ZlcigpIGNvbnN0OwpAQCAtNTE2LDkgKzUxNiw5
IEBAIHB1YmxpYzoKIAogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiB3ZWJDb250ZW50RnJv
bVBhc3RlYm9hcmQoUGFzdGVib2FyZCYsIGNvbnN0IFNpbXBsZVJhbmdlJiBjb250ZXh0LCBib29s
IGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCk7CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCBjb25zdCBGb250KiBmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMp
IGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBjb25zdCBSZW5kZXJTdHlsZSogc3R5
bGVGb3JTZWxlY3Rpb25TdGFydChGcmFtZSogLCBOb2RlICombm9kZVRvUmVtb3ZlKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCBGb250QXR0cmlidXRlcyBmb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3Rh
cnQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Rm9udD4gZm9udEZvclNlbGVj
dGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBS
ZW5kZXJTdHlsZSogc3R5bGVGb3JTZWxlY3Rpb25TdGFydChSZWZQdHI8Tm9kZT4mIG5vZGVUb1Jl
bW92ZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgRm9udEF0dHJpYnV0ZXMgZm9udEF0dHJpYnV0ZXNB
dFNlbGVjdGlvblN0YXJ0KCk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBXRUJDT1JFX0VY
UE9SVCBTdHJpbmcgc3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZCgpOwpAQCAtNjA1LDcgKzYw
NSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCgpOwog
Ci0gICAgRWxlbWVudCogZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpIGNvbnN0OworICAg
IFJlZlB0cjxFbGVtZW50PiBmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCkgY29uc3Q7CiAK
ICAgICBib29sIHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSBjb25zdDsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCBjZGQxYmM4ZWMwMGM0MjZkOTlhYmE4ZWNl
ZmEwMWNjNGIzNjlmZDFiLi40MmJiZTFhYTQ2ZTAwMWFhNGU4MjhjZTFhNGY4OWI4YTUyODBmNDEy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtNTI2LDcgKzUyNiw3
IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmRpc3BhdGNoVGV4dElucHV0RXZlbnRGb3IoRnJhbWUq
IGlubmVyRnJhbWUsIGNvbnN0IERyYWdEYXRhCiB7CiAgICAgQVNTRVJUKG1fcGFnZS5kcmFnQ2Fy
ZXRDb250cm9sbGVyKCkuaGFzQ2FyZXQoKSk7CiAgICAgU3RyaW5nIHRleHQgPSBtX3BhZ2UuZHJh
Z0NhcmV0Q29udHJvbGxlcigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkgPyBlbXB0eVN0cmlu
ZygpIDogZHJhZ0RhdGEuYXNQbGFpblRleHQoKTsKLSAgICBFbGVtZW50KiB0YXJnZXQgPSBpbm5l
ckZyYW1lLT5lZGl0b3IoKS5maW5kRXZlbnRUYXJnZXRGcm9tKG1fcGFnZS5kcmFnQ2FyZXRDb250
cm9sbGVyKCkuY2FyZXRQb3NpdGlvbigpKTsKKyAgICBhdXRvIHRhcmdldCA9IGlubmVyRnJhbWUt
PmVkaXRvcigpLmZpbmRFdmVudFRhcmdldEZyb20obV9wYWdlLmRyYWdDYXJldENvbnRyb2xsZXIo
KS5jYXJldFBvc2l0aW9uKCkpOwogICAgIC8vIEZJWE1FOiBXaGF0IGd1YXJhbnRlZXMgdGFyZ2V0
IGlzIG5vdCBudWxsPwogICAgIGF1dG8gZXZlbnQgPSBUZXh0RXZlbnQ6OmNyZWF0ZUZvckRyb3Ao
JmlubmVyRnJhbWUtPndpbmRvd1Byb3h5KCksIHRleHQpOwogICAgIHRhcmdldC0+ZGlzcGF0Y2hF
dmVudChldmVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCmluZGV4IDE0YjEwOWM5ZDA1ODQzZDY4NjRiZjNlMGM1NDlkYWQ2ZTI4NGIzOTMuLjQ2NDIx
ZTQwNmViODM2OWE3OWJiMjBjNDI0Mjc5ZThkODhmNGVjNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0xMTkzLDcgKzExOTMsNyBAQCBFZGl0
b3JTdGF0ZSBXZWJQYWdlOjplZGl0b3JTdGF0ZShTaG91bGRQZXJmb3JtTGF5b3V0IHNob3VsZFBl
cmZvcm1MYXlvdXQpIGNvbnN0CiAgICAgfQogCiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIGNvbnN0IEVk
aXRvciYgZWRpdG9yID0gZnJhbWUtPmVkaXRvcigpOworICAgIEVkaXRvciYgZWRpdG9yID0gZnJh
bWUtPmVkaXRvcigpOwogCiAgICAgcmVzdWx0LnRyYW5zYWN0aW9uSUQgPSBtX2xhc3RFZGl0b3JT
dGF0ZVRyYW5zYWN0aW9uSUQuaW5jcmVtZW50KCk7CiAgICAgcmVzdWx0LnNlbGVjdGlvbklzTm9u
ZSA9IHNlbGVjdGlvbi5pc05vbmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggNjBiYzkwMjZiNmYyNjk2ZjQ3Y2VjOTFh
N2IyOWYyMmQ0ZjJhZDVmMS4uOTM0Y2JmN2U1YzI5NDJmZDQ5Y2QzMTMzMmU5OGQ1ZjMyZWU0ZDE5
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0KQEAgLTIzNDgsNyArMjM0OCw3IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdEF1dG9j
b3JyZWN0aW9uRGF0YShjb25zdCBTdHJpbmcmIHRleHRGb3JBdXRvY29ycmVjdGlvbiwgQ29tCiAK
ICAgICBib29sIG11bHRpcGxlRm9udHMgPSBmYWxzZTsKICAgICBDVEZvbnRSZWYgZm9udCA9IG5p
bDsKLSAgICBpZiAoYXV0byogY29yZUZvbnQgPSBmcmFtZS5lZGl0b3IoKS5mb250Rm9yU2VsZWN0
aW9uKG11bHRpcGxlRm9udHMpKQorICAgIGlmIChhdXRvIGNvcmVGb250ID0gZnJhbWUuZWRpdG9y
KCkuZm9udEZvclNlbGVjdGlvbihtdWx0aXBsZUZvbnRzKSkKICAgICAgICAgZm9udCA9IGNvcmVG
b250LT5nZXRDVEZvbnQoKTsKIAogICAgIHJlcGx5KHsgV1RGTW92ZShyb290Vmlld1NlbGVjdGlv
blJlY3RzKSAsIChfX2JyaWRnZSBVSUZvbnQgKilmb250IH0pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRleCA3NGRhNjM1Nzg4
MmNkMDEzMDIwODQwOTdmMDY0ZDIxYzNiOTE1ZDA0Li5mMjI0NjRhNmU1NTA1ZTdkM2I1MTU2YWNl
ODNhMzA2ZDJjMGM0NmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvV2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtMzgyLDcgKzM4Miw3IEBAIHZvaWQgV2ViUGFnZTo6
Zm9udEF0U2VsZWN0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRm9udEluZm8mLCBk
b3VibGUsIGJvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvKiBmb250ID0gZnJh
bWUuZWRpdG9yKCkuZm9udEZvclNlbGVjdGlvbihzZWxlY3Rpb25IYXNNdWx0aXBsZUZvbnRzKTsK
KyAgICBhdXRvIGZvbnQgPSBmcmFtZS5lZGl0b3IoKS5mb250Rm9yU2VsZWN0aW9uKHNlbGVjdGlv
bkhhc011bHRpcGxlRm9udHMpOwogICAgIGlmICghZm9udCkgewogICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcih7IH0sIDAsIGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggMTE0MDM0NjRhZDhmNTdkZWZkOTk1
OTIzNWM3NGViMmZkZWMxMmI4MS4uZjc2ZjljMjYzMTg0OGNjZjgzYTg5OGQ5YWZmNDI4MmJiNmRm
Mjc3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFt
ZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBA
IC0xODI1LDkgKzE4MjUsOCBAQCBzdGF0aWMgV2ViRnJhbWVMb2FkVHlwZSB0b1dlYkZyYW1lTG9h
ZFR5cGUoV2ViQ29yZTo6RnJhbWVMb2FkVHlwZSBmcmFtZUxvYWRUeXBlKQogICAgIGJvb2wgbXVs
dGlwbGVGb250cyA9IGZhbHNlOwogICAgIENURm9udFJlZiBmb250ID0gbmlsOwogICAgIGlmIChf
cHJpdmF0ZS0+Y29yZUZyYW1lKSB7Ci0gICAgICAgIGNvbnN0IFdlYkNvcmU6OkZvbnQqIGZkID0g
X3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCkuZm9udEZvclNlbGVjdGlvbihtdWx0aXBsZUZv
bnRzKTsKLSAgICAgICAgaWYgKGZkKQotICAgICAgICAgICAgZm9udCA9IGZkLT5nZXRDVEZvbnQo
KTsKKyAgICAgICAgaWYgKGF1dG8gY29yZUZvbnQgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0
b3IoKS5mb250Rm9yU2VsZWN0aW9uKG11bHRpcGxlRm9udHMpKQorICAgICAgICAgICAgZm9udCA9
IGNvcmVGb250LT5nZXRDVEZvbnQoKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGhhc011bHRpcGxl
Rm9udHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhU
TUxWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5t
bQppbmRleCAyYjhhMjgyMGY4MDliOGFiMzk1ZjY2ZmQ4MDhmN2FkMDhkZWQzYWQzLi5kZDcwMTNj
MTliMjEzMzkyOGMxZjdkMWFiNmZlNDcxZDJkNzVmNDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KQEAgLTU3NDEsOCArNTc0MSw4IEBAIHN0
YXRpYyBCT09MIHdyaXRpbmdEaXJlY3Rpb25LZXlCaW5kaW5nc0VuYWJsZWQoKQogICAgIE5TRm9u
dCAqZm9udCA9IG5pbDsKICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBhdHRyaWJ1dGVzOwog
ICAgIGlmIChhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKSB7Ci0gICAgICAg
IGlmIChjb25zdCBXZWJDb3JlOjpGb250KiBmZCA9IGNvcmVGcmFtZS0+ZWRpdG9yKCkuZm9udEZv
clNlbGVjdGlvbihtdWx0aXBsZUZvbnRzKSkKLSAgICAgICAgICAgIGZvbnQgPSAoTlNGb250ICop
ZmQtPnBsYXRmb3JtRGF0YSgpLnJlZ2lzdGVyZWRGb250KCk7CisgICAgICAgIGlmIChhdXRvIGNv
cmVGb250ID0gY29yZUZyYW1lLT5lZGl0b3IoKS5mb250Rm9yU2VsZWN0aW9uKG11bHRpcGxlRm9u
dHMpKQorICAgICAgICAgICAgZm9udCA9IChOU0ZvbnQgKiljb3JlRm9udC0+cGxhdGZvcm1EYXRh
KCkucmVnaXN0ZXJlZEZvbnQoKTsKICAgICAgICAgYXR0cmlidXRlcyA9IGNvcmVGcmFtZS0+ZWRp
dG9yKCkuZm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlvblN0YXJ0KCkuY3JlYXRlRGljdGlvbmFyeSgp
OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCmlu
ZGV4IDViMGVlOGEzYWM4YzMzM2I2ZWUzNDRjZGQ5YzNiNTU3NjVjMjZmZjAuLmNhMTExNTM0MDEy
ZWM4MDY0MTgyNDBiZTFhMjk3NmE4MjY0NTU1YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTk0NzcsOCArOTQ3Nyw4IEBAIHN0YXRpYyBOU1RleHRB
bGlnbm1lbnQgbnNUZXh0QWxpZ25tZW50RnJvbVJlbmRlclN0eWxlKGNvbnN0IFdlYkNvcmU6OlJl
bmRlclN0eWxlCiAgICAgaWYgKHdlYkhUTUxWaWV3Ll9jYW5FZGl0UmljaGx5KSB7CiAgICAgICAg
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGNvcmVGcmFtZS0+c2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CiAgICAgICAgIGlmICghc2VsZWN0aW9uLmlzTm9uZSgpKSB7Ci0gICAg
ICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7Ci0gICAgICAgICAgICBpZiAoYXV0byogc3R5bGUg
PSBFZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoY29yZUZyYW1lLCBub2RlVG9SZW1vdmUp
KSB7CisgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbm9kZVRvUmVtb3ZlOworICAgICAgICAgICAg
aWYgKGF1dG8qIHN0eWxlID0gY29yZUZyYW1lLT5lZGl0b3IoKS5zdHlsZUZvclNlbGVjdGlvblN0
YXJ0KG5vZGVUb1JlbW92ZSkpIHsKICAgICAgICAgICAgICAgICBbX3ByaXZhdGUtPl90ZXh0VG91
Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0SXNCb2xkOmlzRm9udFdlaWdodEJvbGQoc3R5bGUt
PmZvbnRDYXNjYWRlKCkud2VpZ2h0KCkpXTsKICAgICAgICAgICAgICAgICBbX3ByaXZhdGUtPl90
ZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBzZXRUZXh0SXNJdGFsaWM6aXNJdGFsaWMoc3R5bGUt
PmZvbnRDYXNjYWRlKCkuaXRhbGljKCkpXTsKIApAQCAtOTQ5NSw3ICs5NDk1LDcgQEAgc3RhdGlj
IE5TVGV4dEFsaWdubWVudCBuc1RleHRBbGlnbm1lbnRGcm9tUmVuZGVyU3R5bGUoY29uc3QgV2Vi
Q29yZTo6UmVuZGVyU3R5bGUKIAogICAgICAgICAgICAgICAgIFtfcHJpdmF0ZS0+X3RleHRUb3Vj
aEJhckl0ZW1Db250cm9sbGVyIHNldEN1cnJlbnRUZXh0QWxpZ25tZW50Om5zVGV4dEFsaWdubWVu
dEZyb21SZW5kZXJTdHlsZShzdHlsZSldOwogCi0gICAgICAgICAgICAgICAgSFRNTEVsZW1lbnQq
IGVuY2xvc2luZ0xpc3RFbGVtZW50ID0gZW5jbG9zaW5nTGlzdChzZWxlY3Rpb24uc3RhcnQoKS5k
ZXByZWNhdGVkTm9kZSgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGVuY2xvc2luZ0xpc3RFbGVt
ZW50ID0gbWFrZVJlZlB0cihlbmNsb3NpbmdMaXN0KHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0
ZWROb2RlKCkpKTsKICAgICAgICAgICAgICAgICBpZiAoZW5jbG9zaW5nTGlzdEVsZW1lbnQpIHsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlzPEhUTUxVTGlzdEVsZW1lbnQ+KCplbmNsb3NpbmdM
aXN0RWxlbWVudCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBbW19wcml2YXRlLT5fdGV4dFRv
dWNoQmFySXRlbUNvbnRyb2xsZXIgd2ViVGV4dExpc3RUb3VjaEJhclZpZXdDb250cm9sbGVyXSBz
ZXRDdXJyZW50TGlzdFR5cGU6V2ViTGlzdFR5cGU6OlVub3JkZXJlZF07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426310</attachid>
            <date>2021-04-16 18:59:04 -0700</date>
            <delta_ts>2021-04-16 19:33:03 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-224708-20210416185903.patch</filename>
            <type>text/plain</type>
            <size>43523</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2MTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDkxZmY2MzA1NDc0YzZl
N2Y5MzAyYzM3MTliOGU0NzA0ZmE0NTlkMS4uNmU0OTY0MTVhOWU5Y2Y1NmYwMzZiMzdhODgyODcy
M2RiMTk4MWUzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDIxLTA0LTE2ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIERlcGxveSBSZWYvUmVmUHRy
IGluIEVkaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI0NzA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgV2Vuc29uIEhzaWVoLgorCisgICAgICAg
IERlcGxveWVkIHNtYXJ0IHBvaW50ZXJzIGluIFdlYkNvcmU6OkVkaXRvci4KKworICAgICAgICBB
bHNvIGRlcGxveWVkIFNjcmlwdERpc2FsbG93ZWRTY29wZSBhcm91bmQgdGhlIGNvZGUgd2hpY2gg
YWNjZXNzZXMgdGhlIHJlbmRlciB0cmVlLgorCisgICAgICAgICogZG9tL1Bvc2l0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpjb250YWluZXJPclBhcmVudEVsZW1lbnQgY29u
c3QpOiBBZGRlZC4KKyAgICAgICAgKiBkb20vUG9zaXRpb24uaDoKKyAgICAgICAgKiBlZGl0aW5n
L0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvbkZvckNvbW1h
bmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZUFzUGxhaW5UZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6cGFzdGVBc0ZyYWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6c2hvdWxkSW5zZXJ0RnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
aGFzQmlkaVNlbGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVj
dGlvblVub3JkZXJlZExpc3RTdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnNlbGVjdGlvbk9yZGVyZWRMaXN0U3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpmaW5kRXZlbnRUYXJnZXRGcm9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6ZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
Ojpub3RpZnlUZXh0RnJvbUNvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6d2ls
bEFwcGx5RWRpdGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGxpZWRF
ZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5k
aW5nVGV4dEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGVyZm9ybUN1dE9yQ29w
eSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNpbXBsaWZ5TWFya3VwKTogUmVwbGFjZWQg
dGhlIG1hbnVhbCB0cmVlIHRyYXZlcnNhbCBieSB0cmVlT3JkZXIofikuIAorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpjb3B5SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRC
YXNlV3JpdGluZ0RpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmJhc2VXcml0
aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZXRDb21wb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFkdmFu
Y2VUb05leHRNaXNzcGVsbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNz
cGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZCk6IFVzZSBjb250YWluZXJPclBhcmVudEVsZW1lbnQu
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFk
R3JhbW1hckluUmFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0FuZFJlcGxh
Y2VGb3IpOgorICAgICAgICAoV2ViQ29yZTo6c2NhbkZvclRlbGVwaG9uZU51bWJlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycyk6
IFJlc3RydWN1dGVkIHRoZSBjb2RlIHdpdGggbWFrZVNjb3BlRXhpdAorICAgICAgICB0byBleGl0
IGVhcmx5IGluc3RlYWQgb2YgbmVzdGluZyBpZidzLiAKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRG
aXJzdE1hcmthYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uU3RhcnRI
YXNNYXJrZXJGb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZXNvbHZlVGV4
dENoZWNraW5nVHlwZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzdHJpbmdGb3JD
YW5kaWRhdGVSZXF1ZXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEF0
dHJpYnV0ZXNBdFNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cHJv
bWlzZWRBdHRhY2htZW50SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnN0eWxlRm9y
U2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250Rm9yU2VsZWN0
aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAqIHBhZ2UvRHJhZ0Nv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRpc3BhdGNo
VGV4dElucHV0RXZlbnRGb3IpOgorCiAyMDIxLTA0LTE2ICBDb21taXQgUXVldWUgIDxjb21taXQt
cXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3Mzcz
My4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKaW5kZXggNWEwOWY3YTdhOTM5Nzk5ZjdmYjUwOWNhZGJiNGExODRjNjBlOTE1NS4u
ZTQxZjYzYTExYzhmNjE0MTE1OWEwNzc3Y2QzODM5NjdhYTU5NDQ0YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAyMS0wNC0xNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
KworICAgICAgICBEZXBsb3kgUmVmL1JlZlB0ciBpbiBFZGl0b3IKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDcwOAorCisgICAgICAgIFJldmlld2Vk
IGJ5IFdlbnNvbiBIc2llaC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZWRpdG9yU3RhdGUgY29uc3QpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6cmVxdWVzdEF1dG9jb3JyZWN0aW9uRGF0YSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjpmb250QXRTZWxlY3Rpb24pOgorCiAyMDIxLTA0LTE2ICBBZGEgQ2hhbiAgPGFkYS5jaGFu
QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgV0tVSURlbGVnYXRlIFNQSSBmb3Igc3RhcnRpbmcg
WFIgc2Vzc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IDliM2M0N2U1OGY0OGU2
OTExYWVmNWQ4NTI0MTEzODI3NzY5Yjc5MzUuLjI5MTQyY2U3NTIwNmE1MzY5N2Q2NzQ4NWY5OTRl
N2ZiNDZhZjI3YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBA
QAorMjAyMS0wNC0xNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAg
ICBEZXBsb3kgUmVmL1JlZlB0ciBpbiBFZGl0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDcwOAorCisgICAgICAgIFJldmlld2VkIGJ5IFdlbnNv
biBIc2llaC4KKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dl
YkZyYW1lIGZvbnRGb3JTZWxlY3Rpb246XSk6CisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmll
dy5tbToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3VwZGF0ZUZvbnRQYW5lbF0pOgorICAgICAg
ICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyB1cGRhdGVUZXh0VG91
Y2hCYXJdKToKKwogMjAyMS0wNC0xNSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNzYxMDcuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L1Bvc2l0aW9uLmNwcAppbmRleCBlYjZjZGYzZmE3Y2E3ODIyYmM4MWVkZTZhZDUwM2Y2ZWI3MmMw
YTRiLi5mZTdjYjU0YTc5YjIxOTE4YjgwMjQzY2M2NjdmNmM4NTQ3YmRiYzk2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Qb3NpdGlvbi5jcHAKQEAgLTE5Nyw2ICsxOTcsMTYgQEAgVGV4dCogUG9zaXRpb246OmNvbnRh
aW5lclRleHQoKSBjb25zdAogICAgIHJldHVybiBudWxscHRyOwogfQogCitFbGVtZW50KiBQb3Np
dGlvbjo6Y29udGFpbmVyT3JQYXJlbnRFbGVtZW50KCkgY29uc3QKK3sKKyAgICBhdXRvKiBjb250
YWluZXIgPSBjb250YWluZXJOb2RlKCk7CisgICAgaWYgKCFjb250YWluZXIpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIGlmIChpczxFbGVtZW50Pihjb250YWluZXIpKQorICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4oY29udGFpbmVyKTsKKyAgICByZXR1cm4gY29udGFpbmVy
LT5wYXJlbnRFbGVtZW50KCk7Cit9CisKIGludCBQb3NpdGlvbjo6Y29tcHV0ZU9mZnNldEluQ29u
dGFpbmVyTm9kZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2FuY2hvck5vZGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3Np
dGlvbi5oCmluZGV4IGE0NDgxM2E2NjdjMTc0YTNmNTIyNjJlOWI0YmYzYWRkNDllMGFhYzkuLmM3
NDkwOWRmOGVjZGRhYzI3OGI2N2ZhNzU3MWVlYzE5NWYxYmI4NTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlv
bi5oCkBAIC04Myw2ICs4Myw3IEBAIHB1YmxpYzoKICAgICAvLyB3aWxsIHJldHVybiBpbWctPnBh
cmVudE5vZGUoKSBhbmQgaW1nLT5jb21wdXRlTm9kZUluZGV4KCkgZnJvbSB0aGVzZSBmdW5jdGlv
bnMuCiAgICAgV0VCQ09SRV9FWFBPUlQgTm9kZSogY29udGFpbmVyTm9kZSgpIGNvbnN0OyAvLyBu
dWxsIGZvciBhIGJlZm9yZS9hZnRlciBwb3NpdGlvbiBhbmNob3JlZCB0byBhIG5vZGUgd2l0aCBu
byBwYXJlbnQKICAgICBUZXh0KiBjb250YWluZXJUZXh0KCkgY29uc3Q7CisgICAgRWxlbWVudCog
Y29udGFpbmVyT3JQYXJlbnRFbGVtZW50KCkgY29uc3Q7CiAKICAgICBpbnQgY29tcHV0ZU9mZnNl
dEluQ29udGFpbmVyTm9kZSgpIGNvbnN0OyAgLy8gTyhuKSBmb3IgYmVmb3JlL2FmdGVyLWFuY2hv
cmVkIHBvc2l0aW9ucywgTygxKSBmb3IgcGFyZW50LWFuY2hvcmVkIHBvc2l0aW9ucwogICAgIFdF
QkNPUkVfRVhQT1JUIFBvc2l0aW9uIHBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpIGNvbnN0OyAv
LyBDb252ZW5pZW5jZSBtZXRob2QgZm9yIERPTSBwb3NpdGlvbnMgdGhhdCBhbHNvIGZpeGVzIHVw
IHNvbWUgcG9zaXRpb25zIGZvciBlZGl0aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5k
ZXggNWQzNGIyM2E3NDZkOTFhYTYxN2RmMTEwOTA3NzAxYTZlYTc0ZDJhZi4uN2YwZjAxYmRlODg0
ZmU5MTMzYzBmMWJhZGQxYzQ2YWEzNmZlYzQ1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cApAQCAtOTYsNiArOTYsNyBAQAogI2luY2x1ZGUgIlJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFu
ZC5oIgogI2luY2x1ZGUgIlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgiCiAjaW5jbHVkZSAiUnVu
dGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIlNjcmlwdERpc2FsbG93ZWRTY29wZS5o
IgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YS5oIgogI2luY2x1ZGUgIlNldHRp
bmdzLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgpAQCAtMTIwLDYgKzEyMSw3IEBACiAjaW5j
bHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSA8cGFsL0ZpbGVTaXplRm9ybWF0dGVyLmg+CiAjaW5j
bHVkZSA8cGFsL3RleHQvS2lsbFJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KICNpbmNs
dWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJO
YW1lcy5oPgogCkBAIC0yNzMsMTEgKzI3NSwxMCBAQCBWaXNpYmxlU2VsZWN0aW9uIEVkaXRvcjo6
c2VsZWN0aW9uRm9yQ29tbWFuZChFdmVudCogZXZlbnQpCiAgICAgICAgIHJldHVybiBzZWxlY3Rp
b247CiAgICAgLy8gSWYgdGhlIHRhcmdldCBpcyBhIHRleHQgY29udHJvbCwgYW5kIHRoZSBjdXJy
ZW50IHNlbGVjdGlvbiBpcyBvdXRzaWRlIG9mIGl0cyBzaGFkb3cgdHJlZSwKICAgICAvLyB0aGVu
IHVzZSB0aGUgc2F2ZWQgc2VsZWN0aW9uIGZvciB0aGF0IHRleHQgY29udHJvbC4KLSAgICBpZiAo
aXM8RWxlbWVudD4oZXZlbnQtPnRhcmdldCgpKSAmJiBkb3duY2FzdDxFbGVtZW50PigqZXZlbnQt
PnRhcmdldCgpKS5pc1RleHRGaWVsZCgpKSB7Ci0gICAgICAgIGF1dG8mIHRhcmdldCA9IGRvd25j
YXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PigqZXZlbnQtPnRhcmdldCgpKTsKKyAgICBp
ZiAoYXV0byB0YXJnZXQgPSBtYWtlUmVmUHRyKGV2ZW50LT50YXJnZXQoKSk7IGlzPEhUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50Pih0YXJnZXQpICYmIGRvd25jYXN0PEVsZW1lbnQ+KCp0YXJnZXQp
LmlzVGV4dEZpZWxkKCkpIHsKICAgICAgICAgYXV0byBzdGFydCA9IHNlbGVjdGlvbi5zdGFydCgp
OwotICAgICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgJnRhcmdldCAhPSBlbmNsb3NpbmdUZXh0
Rm9ybUNvbnRyb2woc3RhcnQpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byByYW5nZSA9IHRhcmdl
dC5zZWxlY3Rpb24oKSkKKyAgICAgICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IHRhcmdldCAhPSBl
bmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2woc3RhcnQpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBy
YW5nZSA9IGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PigqdGFyZ2V0KS5zZWxl
Y3Rpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4geyAqcmFuZ2UsIEFmZmluaXR5OjpEb3du
c3RyZWFtLCBzZWxlY3Rpb24uaXNEaXJlY3Rpb25hbCgpIH07CiAgICAgICAgIH0KICAgICB9CkBA
IC02MDgsNyArNjA5LDcgQEAgdm9pZCBFZGl0b3I6OmNsZWFyVGV4dCgpCiAKIHZvaWQgRWRpdG9y
OjpwYXN0ZUFzUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgcGFzdGluZ1RleHQsIGJvb2wgc21hcnRS
ZXBsYWNlKQogewotICAgIEVsZW1lbnQqIHRhcmdldCA9IGZpbmRFdmVudFRhcmdldEZyb21TZWxl
Y3Rpb24oKTsKKyAgICBhdXRvIHRhcmdldCA9IGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24o
KTsKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0dXJuOwogICAgIHRhcmdldC0+ZGlzcGF0
Y2hFdmVudChUZXh0RXZlbnQ6OmNyZWF0ZUZvclBsYWluVGV4dFBhc3RlKGRvY3VtZW50KCkud2lu
ZG93UHJveHkoKSwgcGFzdGluZ1RleHQsIHNtYXJ0UmVwbGFjZSkpOwpAQCAtNjE2LDcgKzYxNyw3
IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgcGFzdGluZ1Rl
eHQsIGJvb2wgc21hcnRSZXBsYWNlKQogCiB2b2lkIEVkaXRvcjo6cGFzdGVBc0ZyYWdtZW50KFJl
ZjxEb2N1bWVudEZyYWdtZW50PiYmIHBhc3RpbmdGcmFnbWVudCwgYm9vbCBzbWFydFJlcGxhY2Us
IGJvb2wgbWF0Y2hTdHlsZSwgTWFpbEJsb2NrcXVvdGVIYW5kbGluZyByZXNwZWN0c01haWxCbG9j
a3F1b3RlKQogewotICAgIEVsZW1lbnQqIHRhcmdldCA9IGZpbmRFdmVudFRhcmdldEZyb21TZWxl
Y3Rpb24oKTsKKyAgICBhdXRvIHRhcmdldCA9IGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24o
KTsKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0dXJuOwogICAgIHRhcmdldC0+ZGlzcGF0
Y2hFdmVudChUZXh0RXZlbnQ6OmNyZWF0ZUZvckZyYWdtZW50UGFzdGUoZG9jdW1lbnQoKS53aW5k
b3dQcm94eSgpLCBXVEZNb3ZlKHBhc3RpbmdGcmFnbWVudCksIHNtYXJ0UmVwbGFjZSwgbWF0Y2hT
dHlsZSwgcmVzcGVjdHNNYWlsQmxvY2txdW90ZSkpOwpAQCAtNjYwLDcgKzY2MSw3IEBAIGJvb2wg
RWRpdG9yOjpzaG91bGRJbnNlcnRGcmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwg
Y29uc3QgT3B0aW9uYWw8U2ltCiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAotICAgIGF1dG8qIGNoaWxkID0gZnJhZ21lbnQuZmlyc3RDaGlsZCgpOworICAg
IGF1dG8gY2hpbGQgPSBtYWtlUmVmUHRyKGZyYWdtZW50LmZpcnN0Q2hpbGQoKSk7CiAgICAgaWYg
KGlzPENoYXJhY3RlckRhdGE+KGNoaWxkKSAmJiBmcmFnbWVudC5sYXN0Q2hpbGQoKSA9PSBjaGls
ZCkKICAgICAgICAgcmV0dXJuIGNsaWVudCgpLT5zaG91bGRJbnNlcnRUZXh0KGRvd25jYXN0PENo
YXJhY3RlckRhdGE+KCpjaGlsZCkuZGF0YSgpLCByZXBsYWNpbmdET01SYW5nZSwgZ2l2ZW5BY3Rp
b24pOwogCkBAIC03MTYsNyArNzE3LDcgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25X
aXRoRnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIFNlbGVjdFJlcGwKICAgICBp
ZiAoIWlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIE5vZGUqIG5vZGVUb0NoZWNrID0gc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQo
KTsKKyAgICBhdXRvIG5vZGVUb0NoZWNrID0gbWFrZVJlZlB0cihzZWxlY3Rpb24ucm9vdEVkaXRh
YmxlRWxlbWVudCgpKTsKICAgICBpZiAoIW5vZGVUb0NoZWNrKQogICAgICAgICByZXR1cm47CiAK
QEAgLTc3MSw5ICs3NzIsOSBAQCBib29sIEVkaXRvcjo6c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBT
dHJpbmcmIHRleHQsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcgogdm9pZCBFZGl0b3I6
OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdT
ZWxlY3Rpb24pCiB7CiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVk
KCkpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IGVuZGluZ1NlbGVjdGlvbi5zdGFydCgpLmRlcHJl
Y2F0ZWROb2RlKCk7CisgICAgICAgIGF1dG8gbm9kZSA9IG1ha2VSZWZQdHIoZW5kaW5nU2VsZWN0
aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIGlmIChBWE9iamVjdENhY2hl
KiBjYWNoZSA9IGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCi0gICAgICAgICAg
ICBjYWNoZS0+cG9zdE5vdGlmaWNhdGlvbihub2RlLCBBWE9iamVjdENhY2hlOjpBWFZhbHVlQ2hh
bmdlZCwgUG9zdFRhcmdldDo6T2JzZXJ2YWJsZVBhcmVudCk7CisgICAgICAgICAgICBjYWNoZS0+
cG9zdE5vdGlmaWNhdGlvbihub2RlLmdldCgpLCBBWE9iamVjdENhY2hlOjpBWFZhbHVlQ2hhbmdl
ZCwgUG9zdFRhcmdldDo6T2JzZXJ2YWJsZVBhcmVudCk7CiAgICAgfQogCiAgICAgdXBkYXRlTWFy
a2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcodHJ1ZSk7CkBAIC03ODcsMTEgKzc4OCwxMSBA
QCBib29sIEVkaXRvcjo6aGFzQmlkaVNlbGVjdGlvbigpIGNvbnN0CiAgICAgaWYgKG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIE5v
ZGUqIHN0YXJ0Tm9kZTsKKyAgICBSZWZQdHI8Tm9kZT4gc3RhcnROb2RlOwogICAgIGlmIChtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewogICAgICAgICBzdGFydE5vZGUgPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgpLmRlcHJl
Y2F0ZWROb2RlKCk7Ci0gICAgICAgIE5vZGUqIGVuZE5vZGUgPSBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLmVuZCgpLnVwc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKTsKLSAgICAg
ICAgaWYgKGVuY2xvc2luZ0Jsb2NrKHN0YXJ0Tm9kZSkgIT0gZW5jbG9zaW5nQmxvY2soZW5kTm9k
ZSkpCisgICAgICAgIGF1dG8gZW5kTm9kZSA9IG1ha2VSZWZQdHIobV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5lbmQoKS51cHN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCkpOworICAg
ICAgICBpZiAoZW5jbG9zaW5nQmxvY2soc3RhcnROb2RlLmdldCgpKSAhPSBlbmNsb3NpbmdCbG9j
ayhlbmROb2RlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UK
ICAgICAgICAgc3RhcnROb2RlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52
aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CkBAIC03OTks
NiArODAwLDggQEAgYm9vbCBFZGl0b3I6Omhhc0JpZGlTZWxlY3Rpb24oKSBjb25zdAogICAgIGlm
ICghc3RhcnROb2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBTY3JpcHREaXNhbGxv
d2VkU2NvcGU6OkluTWFpblRocmVhZCBzY3JpcHREaXNhbGxvd2VkU2NvcGU7CisKICAgICBhdXRv
IHJlbmRlcmVyID0gc3RhcnROb2RlLT5yZW5kZXJlcigpOwogICAgIHdoaWxlIChyZW5kZXJlciAm
JiAhaXM8UmVuZGVyQmxvY2tGbG93PigqcmVuZGVyZXIpKQogICAgICAgICByZW5kZXJlciA9IHJl
bmRlcmVyLT5wYXJlbnQoKTsKQEAgLTgxOCw4ICs4MjEsOCBAQCBUcmlTdGF0ZSBFZGl0b3I6OnNl
bGVjdGlvblVub3JkZXJlZExpc3RTdGF0ZSgpIGNvbnN0CiAgICAgICAgIGlmIChlbmNsb3NpbmdF
bGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCks
IHVsVGFnKSkKICAgICAgICAgICAgIHJldHVybiBUcmlTdGF0ZTo6VHJ1ZTsKICAgICB9IGVsc2Ug
aWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7Ci0gICAgICAgIGF1dG8qIHN0
YXJ0Tm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuc3RhcnQoKSwgdWxUYWcpOwotICAgICAgICBhdXRvKiBlbmROb2RlID0gZW5j
bG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5l
bmQoKSwgdWxUYWcpOworICAgICAgICBhdXRvIHN0YXJ0Tm9kZSA9IG1ha2VSZWZQdHIoZW5jbG9z
aW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFy
dCgpLCB1bFRhZykpOworICAgICAgICBhdXRvIGVuZE5vZGUgPSBtYWtlUmVmUHRyKGVuY2xvc2lu
Z0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCks
IHVsVGFnKSk7CiAgICAgICAgIGlmIChzdGFydE5vZGUgJiYgZW5kTm9kZSAmJiBzdGFydE5vZGUg
PT0gZW5kTm9kZSkKICAgICAgICAgICAgIHJldHVybiBUcmlTdGF0ZTo6VHJ1ZTsKICAgICB9CkBA
IC04MzMsOCArODM2LDggQEAgVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25PcmRlcmVkTGlzdFN0
YXRlKCkgY29uc3QKICAgICAgICAgaWYgKGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgb2xUYWcpKQogICAgICAgICAgICAg
cmV0dXJuIFRyaVN0YXRlOjpUcnVlOwogICAgIH0gZWxzZSBpZiAobV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5pc1JhbmdlKCkpIHsKLSAgICAgICAgYXV0byogc3RhcnROb2RlID0gZW5jbG9zaW5nRWxl
bWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBv
bFRhZyk7Ci0gICAgICAgIGF1dG8qIGVuZE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyht
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLCBvbFRhZyk7CisgICAgICAg
IGF1dG8gc3RhcnROb2RlID0gbWFrZVJlZlB0cihlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIG9sVGFnKSk7CisgICAgICAg
IGF1dG8gZW5kTm9kZSA9IG1ha2VSZWZQdHIoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSwgb2xUYWcpKTsKICAgICAgICAgaWYg
KHN0YXJ0Tm9kZSAmJiBlbmROb2RlICYmIHN0YXJ0Tm9kZSA9PSBlbmROb2RlKQogICAgICAgICAg
ICAgcmV0dXJuIFRyaVN0YXRlOjpUcnVlOwogICAgIH0KQEAgLTkyMSw5ICs5MjQsOSBAQCB2b2lk
IEVkaXRvcjo6Y2xlYXJMYXN0RWRpdENvbW1hbmQoKQogICAgIG1fbGFzdEVkaXRDb21tYW5kID0g
bnVsbHB0cjsKIH0KIAotRWxlbWVudCogRWRpdG9yOjpmaW5kRXZlbnRUYXJnZXRGcm9tKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikgY29uc3QKK1JlZlB0cjxFbGVtZW50PiBFZGl0
b3I6OmZpbmRFdmVudFRhcmdldEZyb20oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
KSBjb25zdAogewotICAgIEVsZW1lbnQqIHRhcmdldCA9IHNlbGVjdGlvbi5zdGFydCgpLmVsZW1l
bnQoKTsKKyAgICBhdXRvIHRhcmdldCA9IG1ha2VSZWZQdHIoc2VsZWN0aW9uLnN0YXJ0KCkuZWxl
bWVudCgpKTsKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgdGFyZ2V0ID0gZG9jdW1lbnQoKS5i
b2R5T3JGcmFtZXNldCgpOwogICAgIGlmICghdGFyZ2V0KQpAQCAtOTMyLDcgKzkzNSw3IEBAIEVs
ZW1lbnQqIEVkaXRvcjo6ZmluZEV2ZW50VGFyZ2V0RnJvbShjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24pIGNvbnN0CiAgICAgcmV0dXJuIHRhcmdldDsKIH0KIAotRWxlbWVudCogRWRp
dG9yOjpmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCkgY29uc3QKK1JlZlB0cjxFbGVtZW50
PiBFZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSBjb25zdAogewogICAgIHJl
dHVybiBmaW5kRXZlbnRUYXJnZXRGcm9tKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkpOwogfQpAQCAtMTA2OCw4ICsxMDcxLDggQEAgdm9pZCBFZGl0b3I6Om91dGRlbnQoKQogCiBz
dGF0aWMgdm9pZCBub3RpZnlUZXh0RnJvbUNvbnRyb2xzKEVsZW1lbnQqIHN0YXJ0Um9vdCwgRWxl
bWVudCogZW5kUm9vdCkKIHsKLSAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCogc3RhcnRp
bmdUZXh0Q29udHJvbCA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChmaXJzdFBvc2l0aW9uSW5P
ckJlZm9yZU5vZGUoc3RhcnRSb290KSk7Ci0gICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQq
IGVuZGluZ1RleHRDb250cm9sID0gZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKGZpcnN0UG9zaXRp
b25Jbk9yQmVmb3JlTm9kZShlbmRSb290KSk7CisgICAgYXV0byBzdGFydGluZ1RleHRDb250cm9s
ID0gIG1ha2VSZWZQdHIoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKGZpcnN0UG9zaXRpb25Jbk9y
QmVmb3JlTm9kZShzdGFydFJvb3QpKSk7CisgICAgYXV0byBlbmRpbmdUZXh0Q29udHJvbCA9IG1h
a2VSZWZQdHIoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3Jl
Tm9kZShlbmRSb290KSkpOwogICAgIGlmIChzdGFydGluZ1RleHRDb250cm9sKQogICAgICAgICBz
dGFydGluZ1RleHRDb250cm9sLT5kaWRFZGl0SW5uZXJUZXh0VmFsdWUoKTsKICAgICBpZiAoZW5k
aW5nVGV4dENvbnRyb2wgJiYgc3RhcnRpbmdUZXh0Q29udHJvbCAhPSBlbmRpbmdUZXh0Q29udHJv
bCkKQEAgLTEwOTksNyArMTEwMiw3IEBAIGJvb2wgRWRpdG9yOjp3aWxsQXBwbHlFZGl0aW5nKENv
bXBvc2l0ZUVkaXRDb21tYW5kJiBjb21tYW5kLCBWZWN0b3I8UmVmUHRyPFN0YXRpCiAgICAgaWYg
KCFjb21tYW5kLnNob3VsZERpc3BhdGNoSW5wdXRFdmVudHMoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBhdXRvKiBjb21wb3NpdGlvbiA9IGNvbW1hbmQuY29tcG9zaXRpb24oKTsKKyAg
ICBhdXRvIGNvbXBvc2l0aW9uID0gbWFrZVJlZlB0cihjb21tYW5kLmNvbXBvc2l0aW9uKCkpOwog
ICAgIGlmICghY29tcG9zaXRpb24pCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC0xMTE3LDEw
ICsxMTIwLDEwIEBAIHZvaWQgRWRpdG9yOjphcHBsaWVkRWRpdGluZyhDb21wb3NpdGVFZGl0Q29t
bWFuZCYgY29tbWFuZCkKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOwogCiAgICAgQVNT
RVJUKGNvbW1hbmQuY29tcG9zaXRpb24oKSk7Ci0gICAgYXV0byYgY29tcG9zaXRpb24gPSAqY29t
bWFuZC5jb21wb3NpdGlvbigpOworICAgIGF1dG8gY29tcG9zaXRpb24gPSBtYWtlUmVmKCpjb21t
YW5kLmNvbXBvc2l0aW9uKCkpOwogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKGNv
bW1hbmQuZW5kaW5nU2VsZWN0aW9uKCkpOwogCi0gICAgbm90aWZ5VGV4dEZyb21Db250cm9scyhj
b21wb3NpdGlvbi5zdGFydGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSwgY29tcG9zaXRpb24uZW5k
aW5nUm9vdEVkaXRhYmxlRWxlbWVudCgpKTsKKyAgICBub3RpZnlUZXh0RnJvbUNvbnRyb2xzKGNv
bXBvc2l0aW9uLT5zdGFydGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSwgY29tcG9zaXRpb24tPmVu
ZGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSk7CiAKICAgICBpZiAoY29tbWFuZC5pc1RvcExldmVs
Q29tbWFuZCgpKSB7CiAgICAgICAgIC8vIERvbid0IGNsZWFyIHRoZSB0eXBpbmcgc3R5bGUgd2l0
aCB0aGlzIHNlbGVjdGlvbiBjaGFuZ2UuIFdlIGRvIHRob3NlIHRoaW5ncyBlbHNld2hlcmUgaWYg
bmVjZXNzYXJ5LgpAQCAtMTEzMiw3ICsxMTM1LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGxpZWRFZGl0
aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5kJiBjb21tYW5kKQogICAgIH0KIAogICAgIGlmIChjb21t
YW5kLnNob3VsZERpc3BhdGNoSW5wdXRFdmVudHMoKSkKLSAgICAgICAgZGlzcGF0Y2hJbnB1dEV2
ZW50cyhjb21wb3NpdGlvbi5zdGFydGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSwgY29tcG9zaXRp
b24uZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVudCgpLCBjb21tYW5kLmlucHV0RXZlbnRUeXBlTmFt
ZSgpLCBjb21tYW5kLmlucHV0RXZlbnREYXRhKCksIGNvbW1hbmQuaW5wdXRFdmVudERhdGFUcmFu
c2ZlcigpKTsKKyAgICAgICAgZGlzcGF0Y2hJbnB1dEV2ZW50cyhjb21wb3NpdGlvbi0+c3RhcnRp
bmdSb290RWRpdGFibGVFbGVtZW50KCksIGNvbXBvc2l0aW9uLT5lbmRpbmdSb290RWRpdGFibGVF
bGVtZW50KCksIGNvbW1hbmQuaW5wdXRFdmVudFR5cGVOYW1lKCksIGNvbW1hbmQuaW5wdXRFdmVu
dERhdGEoKSwgY29tbWFuZC5pbnB1dEV2ZW50RGF0YVRyYW5zZmVyKCkpOwogCiAgICAgaWYgKGNv
bW1hbmQuaXNUb3BMZXZlbENvbW1hbmQoKSkgewogICAgICAgICB1cGRhdGVFZGl0b3JVSU5vd0lm
U2NoZWR1bGVkKCk7CkBAIC0xMjkwLDcgKzEyOTMsNyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0VGV4
dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBzZWxlY3RJ
bgogICAgIC8vIHRoYXQgaXMgY29udGFpbmVkIGluIHRoZSBldmVudCB0YXJnZXQuCiAgICAgc2Vs
ZWN0aW9uID0gc2VsZWN0aW9uRm9yQ29tbWFuZCh0cmlnZ2VyaW5nRXZlbnQpOwogICAgIGlmIChz
ZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkgewotICAgICAgICBpZiAoTm9kZSogc2VsZWN0
aW9uU3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKSB7CisgICAgICAg
IGlmIChhdXRvIHNlbGVjdGlvblN0YXJ0ID0gbWFrZVJlZlB0cihzZWxlY3Rpb24uc3RhcnQoKS5k
ZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICAgICAgUmVmPERvY3VtZW50PiBkb2N1bWVudChz
ZWxlY3Rpb25TdGFydC0+ZG9jdW1lbnQoKSk7CiAKICAgICAgICAgICAgIC8vIEluc2VydCB0aGUg
dGV4dApAQCAtMTQxOSw3ICsxNDIyLDcgQEAgdm9pZCBFZGl0b3I6OnBlcmZvcm1DdXRPckNvcHko
RWRpdG9yQWN0aW9uU3BlY2lmaWVyIGFjdGlvbikKICAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1D
b250cm9sKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkgfHwgKHNl
bGVjdGlvbiAmJiBIVE1MRWxlbWVudDo6aXNJbnNpZGVJbWFnZU92ZXJsYXkoKnNlbGVjdGlvbikp
KQogICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoUGFnZVBhc3RlYm9h
cmRDb250ZXh0OjpjcmVhdGUobV9kb2N1bWVudC5wYWdlSUQoKSkpLT53cml0ZVBsYWluVGV4dChz
ZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFBh
c3RlYm9hcmQ6OkNhblNtYXJ0UmVwbGFjZSA6IFBhc3RlYm9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFj
ZSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9
IG51bGxwdHI7CisgICAgICAgIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBpbWFnZUVsZW1lbnQ7
CiAgICAgICAgIGlmIChhY3Rpb24gPT0gQ29weUFjdGlvbikKICAgICAgICAgICAgIGltYWdlRWxl
bWVudCA9IGltYWdlRWxlbWVudEZyb21JbWFnZURvY3VtZW50KGRvY3VtZW50KCkpOwogCkBAIC0x
NTQ1LDE4ICsxNTQ4LDE1IEBAIHZvaWQgRWRpdG9yOjpzaW1wbGlmeU1hcmt1cChOb2RlKiBzdGFy
dE5vZGUsIE5vZGUqIGVuZE5vZGUpCiB7CiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAgIHJl
dHVybjsKKworICAgIFJlZlB0cjxOb2RlPiBwYXN0RW5kTm9kZTsKICAgICBpZiAoZW5kTm9kZSkg
ewotICAgICAgICBpZiAoJnN0YXJ0Tm9kZS0+ZG9jdW1lbnQoKSAhPSAmZW5kTm9kZS0+ZG9jdW1l
bnQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgLy8gY2hlY2sgaWYgc3RhcnQgbm9k
ZSBpcyBiZWZvcmUgZW5kTm9kZQotICAgICAgICBOb2RlKiBub2RlID0gc3RhcnROb2RlOwotICAg
ICAgICB3aGlsZSAobm9kZSAmJiBub2RlICE9IGVuZE5vZGUpCi0gICAgICAgICAgICBub2RlID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSk7Ci0gICAgICAgIGlmICghbm9kZSkKKyAgICAgICAg
aWYgKCFpc19sdCh0cmVlT3JkZXIoKnN0YXJ0Tm9kZSwgKmVuZE5vZGUpKSkKICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgcGFzdEVuZE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCplbmRO
b2RlKTsKICAgICB9CiAgICAgCi0gICAgU2ltcGxpZnlNYXJrdXBDb21tYW5kOjpjcmVhdGUoZG9j
dW1lbnQoKSwgc3RhcnROb2RlLCBlbmROb2RlID8gTm9kZVRyYXZlcnNhbDo6bmV4dCgqZW5kTm9k
ZSkgOiBudWxscHRyKS0+YXBwbHkoKTsKKyAgICBTaW1wbGlmeU1hcmt1cENvbW1hbmQ6OmNyZWF0
ZShkb2N1bWVudCgpLCBzdGFydE5vZGUsIHBhc3RFbmROb2RlLmdldCgpKS0+YXBwbHkoKTsKIH0K
IAogdm9pZCBFZGl0b3I6OmNvcHlVUkwoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0
bGUpCkBAIC0xNTk0LDcgKzE1OTQsNyBAQCBQYXN0ZWJvYXJkV3JpdGVyRGF0YTo6VVJMRGF0YSBF
ZGl0b3I6OnBhc3RlYm9hcmRXcml0ZXJVUkwoY29uc3QgVVJMJiB1cmwsIGNvbnN0CiAKIHZvaWQg
RWRpdG9yOjpjb3B5SW1hZ2UoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQogewotICAgIEVs
ZW1lbnQqIGVsZW1lbnQgPSByZXN1bHQuaW5uZXJOb25TaGFyZWRFbGVtZW50KCk7CisgICAgYXV0
byBlbGVtZW50ID0gbWFrZVJlZlB0cihyZXN1bHQuaW5uZXJOb25TaGFyZWRFbGVtZW50KCkpOwog
ICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xODc2LDggKzE4NzYsOCBA
QCB2b2lkIEVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24oV3JpdGluZ0RpcmVjdGlvbiBk
aXJlY3Rpb24pCiAgICAgICAgICYmIGJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3Rh
cnQoKSA9PSBkaXJlY3Rpb24pCiAgICAgICAgIHJldHVybjsKICNlbmRpZgotICAgICAgICAKLSAg
ICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IGRvY3VtZW50KCkuZm9jdXNlZEVsZW1lbnQoKTsK
KworICAgIGF1dG8gZm9jdXNlZEVsZW1lbnQgPSBtYWtlUmVmUHRyKGRvY3VtZW50KCkuZm9jdXNl
ZEVsZW1lbnQoKSk7CiAgICAgaWYgKGZvY3VzZWRFbGVtZW50ICYmIGZvY3VzZWRFbGVtZW50LT5p
c1RleHRGaWVsZCgpKSB7CiAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gV3JpdGluZ0RpcmVjdGlv
bjo6TmF0dXJhbCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE5MDQsMTAgKzE5MDQsMTIgQEAg
V3JpdGluZ0RpcmVjdGlvbiBFZGl0b3I6OmJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9u
U3RhcnQoKSBjb25zdAogICAgIGF1dG8gcmVzdWx0ID0gV3JpdGluZ0RpcmVjdGlvbjo6TGVmdFRv
UmlnaHQ7CiAKICAgICBQb3NpdGlvbiBwb3MgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgTm9kZSogbm9kZSA9
IHBvcy5kZXByZWNhdGVkTm9kZSgpOworICAgIGF1dG8gbm9kZSA9IG1ha2VSZWZQdHIocG9zLmRl
cHJlY2F0ZWROb2RlKCkpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
IAorICAgIFNjcmlwdERpc2FsbG93ZWRTY29wZTo6SW5NYWluVGhyZWFkIHNjcmlwdERpc2FsbG93
ZWRTY29wZTsKKwogICAgIGF1dG8gcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgIGlm
ICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0yMDc1LDcgKzIwNzcsNyBA
QCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBW
ZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbgogICAgIGNsaWVudCgpLT5zdGFydERlbGF5aW5nQW5k
Q29hbGVzY2luZ0NvbnRlbnRDaGFuZ2VOb3RpZmljYXRpb25zKCk7CiAjZW5kaWYKIAotICAgIEVs
ZW1lbnQqIHRhcmdldCA9IGRvY3VtZW50KCkuZm9jdXNlZEVsZW1lbnQoKTsKKyAgICBhdXRvIHRh
cmdldCA9IG1ha2VSZWZQdHIoZG9jdW1lbnQoKS5mb2N1c2VkRWxlbWVudCgpKTsKICAgICBpZiAo
dGFyZ2V0KSB7CiAgICAgICAgIC8vIERpc3BhdGNoIGFuIGFwcHJvcHJpYXRlIGNvbXBvc2l0aW9u
IGV2ZW50IHRvIHRoZSBmb2N1c2VkIG5vZGUuCiAgICAgICAgIC8vIFdlIGNoZWNrIHRoZSBjb21w
b3NpdGlvbiBzdGF0dXMgYW5kIGNob29zZSBhbiBhcHByb3ByaWF0ZSBjb21wb3NpdGlvbiBldmVu
dCBzaW5jZSB0aGlzCkBAIC0yMTI1LDEzICsyMTI3LDEzIEBAIHZvaWQgRWRpdG9yOjpzZXRDb21w
b3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVy
bGluCiAgICAgICAgIC8vIEZpbmQgb3V0IHdoYXQgbm9kZSBoYXMgdGhlIGNvbXBvc2l0aW9uIG5v
dy4KICAgICAgICAgUG9zaXRpb24gYmFzZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuYmFzZSgpLmRvd25zdHJlYW0oKTsKICAgICAgICAgUG9zaXRpb24gZXh0ZW50ID0gbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5leHRlbnQoKTsKLSAgICAgICAgTm9kZSog
YmFzZU5vZGUgPSBiYXNlLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgICAgIGF1dG8gYmFzZU5vZGUg
PSBtYWtlUmVmUHRyKGJhc2UuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIHVuc2lnbmVkIGJh
c2VPZmZzZXQgPSBiYXNlLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7Ci0gICAgICAgIE5vZGUq
IGV4dGVudE5vZGUgPSBleHRlbnQuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICAgICAgYXV0byBleHRl
bnROb2RlID0gbWFrZVJlZlB0cihleHRlbnQuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIHVu
c2lnbmVkIGV4dGVudE9mZnNldCA9IGV4dGVudC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwog
CiAgICAgICAgIGlmIChpczxUZXh0PihiYXNlTm9kZSkgJiYgYmFzZU5vZGUgPT0gZXh0ZW50Tm9k
ZSAmJiBiYXNlT2Zmc2V0ICsgdGV4dC5sZW5ndGgoKSA9PSBleHRlbnRPZmZzZXQpIHsKLSAgICAg
ICAgICAgIG1fY29tcG9zaXRpb25Ob2RlID0gZG93bmNhc3Q8VGV4dD4oYmFzZU5vZGUpOworICAg
ICAgICAgICAgbV9jb21wb3NpdGlvbk5vZGUgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PFRleHQ+KGJh
c2VOb2RlKTsKICAgICAgICAgICAgIG1fY29tcG9zaXRpb25TdGFydCA9IGJhc2VPZmZzZXQ7CiAg
ICAgICAgICAgICBtX2NvbXBvc2l0aW9uRW5kID0gZXh0ZW50T2Zmc2V0OwogICAgICAgICAgICAg
bV9jdXN0b21Db21wb3NpdGlvblVuZGVybGluZXMgPSB1bmRlcmxpbmVzOwpAQCAtMjIzOSw3ICsy
MjQxLDcgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0
QmVmb3JlU2VsZWN0aW9uKQogICAgIH0KIAogICAgIC8vIHRvcE5vZGUgZGVmaW5lcyB0aGUgd2hv
bGUgcmFuZ2Ugd2Ugd2FudCB0byBvcGVyYXRlIG9uIAotICAgIGF1dG8qIHRvcE5vZGUgPSBoaWdo
ZXN0RWRpdGFibGVSb290KHBvc2l0aW9uKTsKKyAgICBhdXRvIHRvcE5vZGUgPSBtYWtlUmVmUHRy
KGhpZ2hlc3RFZGl0YWJsZVJvb3QocG9zaXRpb24pKTsKICAgICBpZiAodG9wTm9kZSkKICAgICAg
ICAgc3BlbGxpbmdTZWFyY2hSYW5nZS5lbmQgPSBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNv
bnRlbnRzKCp0b3BOb2RlKTsKIApAQCAtMjU1MSw4ICsyNTUzLDcgQEAgdm9pZCBFZGl0b3I6Om1h
cmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHdv
cmRTdGFydCwKICAgICAgICAgICAgIGlmIChuZXh0UG9zaXRpb24uaXNOdWxsKCkgfHwgbmV4dFBv
c2l0aW9uID09IHNwZWxsQ2hlY2tpbmdFbmQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAg
ICAgICAgICAgIGF1dG8qIGNvbnRhaW5lciA9IG5leHRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgp
LnVwc3RyZWFtKCkuY29udGFpbmVyTm9kZSgpOwotICAgICAgICAgICAgaWYgKGF1dG8qIGNvbnRh
aW5lckVsZW1lbnQgPSBpczxFbGVtZW50Pihjb250YWluZXIpID8gZG93bmNhc3Q8RWxlbWVudD4o
Y29udGFpbmVyKSA6IGNvbnRhaW5lci0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICBp
ZiAoYXV0byBjb250YWluZXJFbGVtZW50ID0gbWFrZVJlZlB0cihuZXh0UG9zaXRpb24uZGVlcEVx
dWl2YWxlbnQoKS51cHN0cmVhbSgpLmNvbnRhaW5lck9yUGFyZW50RWxlbWVudCgpKSkgewogICAg
ICAgICAgICAgICAgIGlmICghY29udGFpbmVyRWxlbWVudC0+aXNTcGVsbENoZWNraW5nRW5hYmxl
ZCgpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTI2NjEs
MTEgKzI2NjIsMTEgQEAgYm9vbCBFZGl0b3I6OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoTm9k
ZSogbm9kZSkgY29uc3QKIHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBFbGVtZW50KiBlbGVtZW50ID0gaXM8RWxlbWVudD4oKm5vZGUpID8gZG93bmNhc3Q8RWxl
bWVudD4obm9kZSkgOiBub2RlLT5wYXJlbnRFbGVtZW50KCk7CisgICAgYXV0byBlbGVtZW50ID0g
bWFrZVJlZlB0cihpczxFbGVtZW50Pigqbm9kZSkgPyBkb3duY2FzdDxFbGVtZW50Pihub2RlKSA6
IG5vZGUtPnBhcmVudEVsZW1lbnQoKSk7CiAgICAgaWYgKCFlbGVtZW50KQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaWYgKGVsZW1lbnQtPmlzSW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCkpIHsK
LSAgICAgICAgaWYgKEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0Q29udHJvbCA9IGVu
Y2xvc2luZ1RleHRGb3JtQ29udHJvbChmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoZWxlbWVu
dCkpKQorICAgICAgICBpZiAoYXV0byB0ZXh0Q29udHJvbCA9IG1ha2VSZWZQdHIoZW5jbG9zaW5n
VGV4dEZvcm1Db250cm9sKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShlbGVtZW50LmdldCgp
KSkpKQogICAgICAgICAgICAgcmV0dXJuIHRleHRDb250cm9sLT5pc1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKCk7CiAgICAgfQogICAgIHJldHVybiBlbGVtZW50LT5pc1NwZWxsQ2hlY2tpbmdFbmFibGVk
KCk7CkBAIC0yNzA0LDExICsyNzA1LDExIEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIElmIHdlJ3JlIG5vdCBpbiBhbiBlZGl0YWJsZSBub2RlLCBi
YWlsLgotICAgIE5vZGUmIGVkaXRhYmxlTm9kZSA9IHNwZWxsaW5nUmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCk7Ci0gICAgaWYgKCFlZGl0YWJsZU5vZGUuaGFzRWRpdGFibGVTdHlsZSgpKQorICAgIGF1
dG8gZWRpdGFibGVOb2RlID0gbWFrZVJlZihzcGVsbGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcigp
KTsKKyAgICBpZiAoIWVkaXRhYmxlTm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoIWlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoJmVkaXRhYmxlTm9k
ZSkpCisgICAgaWYgKCFpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKGVkaXRhYmxlTm9kZS5wdHIo
KSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8mIHJhbmdlVG9DaGVjayA9IHNob3VsZE1h
cmtHcmFtbWFyID8gKmdyYW1tYXJSYW5nZSA6ICpzcGVsbGluZ1JhbmdlOwpAQCAtMjkwMCw4ICsy
OTAxLDggQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgICAgICAgICBjb3JyZWN0
U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgocGFyYWdyYXBoLCBy
YW5nZVRvUmVwbGFjZSwgcmVwbGFjZW1lbnQsIHsgcmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0
aCB9KTsKIAogICAgICAgICAgICAgICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3Vt
ZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KEVsZW1lbnQqIHJvb3QgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLT5wb3N0Tm90
aWZpY2F0aW9uKHJvb3QsIEFYT2JqZWN0Q2FjaGU6OkFYQXV0b2NvcnJlY3Rpb25PY2N1cmVkKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8gcm9vdCA9IG1ha2VSZWZQdHIobV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCkpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgY2FjaGUtPnBvc3ROb3RpZmljYXRpb24ocm9vdC5nZXQoKSwgQVhP
YmplY3RDYWNoZTo6QVhBdXRvY29ycmVjdGlvbk9jY3VyZWQpOwogICAgICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgICAgIC8vIFNraXAgYWxsIG90aGVyIHJlc3VsdHMgZm9yIHRoZSByZXBs
YWNlZCB0ZXh0LgpAQCAtMzY3MCw4ICszNjcxLDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZERldGVj
dFRlbGVwaG9uZU51bWJlcnMoKSBjb25zdAogc3RhdGljIFZlY3RvcjxTaW1wbGVSYW5nZT4gc2Nh
bkZvclRlbGVwaG9uZU51bWJlcnMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewogICAgIC8v
IERvbid0IHNjYW4gZm9yIHBob25lIG51bWJlcnMgaW5zaWRlIGVkaXRhYmxlIHJlZ2lvbnMuCi0g
ICAgYXV0byYgc3RhcnROb2RlID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKTsKLSAgICBpZiAoc3Rh
cnROb2RlLmhhc0VkaXRhYmxlU3R5bGUoKSkKKyAgICBpZiAoYXV0byBzdGFydE5vZGUgPSBtYWtl
UmVmKHJhbmdlLnN0YXJ0Q29udGFpbmVyKCkpOyBzdGFydE5vZGUtPmhhc0VkaXRhYmxlU3R5bGUo
KSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICBhdXRvIHRleHQgPSBwbGFpblRleHQocmFuZ2Up
OwogICAgIFZlY3RvcjxTaW1wbGVSYW5nZT4gcmVzdWx0OwpAQCAtMzcwNiwyNyArMzcwNiwzNCBA
QCB2b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKQogICAgICAg
ICByZXR1cm47CiAKICAgICBtX2RldGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzLmNsZWFyKCk7
CisgICAgCisgICAgYXV0byBub3RpZnlDb250cm9sbGVyID0gbWFrZVNjb3BlRXhpdChbJl0gewor
ICAgICAgICBpZiAoYXV0byogcGFnZSA9IG1fZG9jdW1lbnQucGFnZSgpKQorICAgICAgICAgICAg
cGFnZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGVkVGVsZXBob25lTnVtYmVy
UmFuZ2VzQ2hhbmdlZCgpOworICAgIH0pOwogCi0gICAgYXV0byYgc2VsZWN0aW9uID0gbV9kb2N1
bWVudC5zZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSkgewotICAgICAg
ICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLmZpcnN0UmFu
Z2UoKSkgewotICAgICAgICAgICAgLy8gRXh0ZW5kIHRoZSByYW5nZSBhIGZldyBjaGFyYWN0ZXJz
IGluIGVhY2ggZGlyZWN0aW9uIHRvIGRldGVjdCBpbmNvbXBsZXRlbHkgc2VsZWN0ZWQgcGhvbmUg
bnVtYmVycy4KLSAgICAgICAgICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBjaGFyYWN0ZXJzVG9FeHRl
bmQgPSAxNTsKLSAgICAgICAgICAgIGlmIChhdXRvIGV4dGVuZGVkUmFuZ2UgPSBleHRlbmRTZWxl
Y3Rpb24oKnNlbGVjdGVkUmFuZ2UsIGNoYXJhY3RlcnNUb0V4dGVuZCkpIHsKLSAgICAgICAgICAg
ICAgICBmb3IgKGF1dG8mIHJhbmdlIDogc2NhbkZvclRlbGVwaG9uZU51bWJlcnMoKmV4dGVuZGVk
UmFuZ2UpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXaHkgZG8gd2UgZG8gdGhp
cyB1bmNvbmRpdGlvbmFsbHkgaW5zdGVhZCBvZiB3aGVuIG9ubHkgd2hlbiBpdCBvdmVybGFwcyB0
aGUgc2VsZWN0aW9uPwotICAgICAgICAgICAgICAgICAgICBhZGRNYXJrZXIocmFuZ2UsIERvY3Vt
ZW50TWFya2VyOjpUZWxlcGhvbmVOdW1iZXIpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIE9u
bHkgY29uc2lkZXIgcmFuZ2VzIHdpdGggYSBkZXRlY3RlZCB0ZWxlcGhvbmUgbnVtYmVyIGlmIHRo
ZXkgb3ZlcmxhcCB3aXRoIHRoZSBzZWxlY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgIGlmIChp
bnRlcnNlY3RzPENvbXBvc2VkVHJlZT4ocmFuZ2UsICpzZWxlY3RlZFJhbmdlKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXMuYXBwZW5kKHJh
bmdlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
CisgICAgYXV0byBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OworICAgIGlmICghc2VsZWN0aW9uLmlzUmFuZ2UoKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKGF1dG8qIHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKSkKLSAgICAgICAgcGFnZS0+c2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hhbmdl
ZCgpOworICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi5maXJzdFJhbmdlKCk7Cisg
ICAgaWYgKCFzZWxlY3RlZFJhbmdlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBFeHRlbmQg
dGhlIHJhbmdlIGEgZmV3IGNoYXJhY3RlcnMgaW4gZWFjaCBkaXJlY3Rpb24gdG8gZGV0ZWN0IGlu
Y29tcGxldGVseSBzZWxlY3RlZCBwaG9uZSBudW1iZXJzLgorICAgIGNvbnN0ZXhwciB1bnNpZ25l
ZCBjaGFyYWN0ZXJzVG9FeHRlbmQgPSAxNTsKKyAgICBhdXRvIGV4dGVuZGVkUmFuZ2UgPSBleHRl
bmRTZWxlY3Rpb24oKnNlbGVjdGVkUmFuZ2UsIGNoYXJhY3RlcnNUb0V4dGVuZCk7CisgICAgaWYg
KCFleHRlbmRlZFJhbmdlKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8mIHJhbmdl
IDogc2NhbkZvclRlbGVwaG9uZU51bWJlcnMoKmV4dGVuZGVkUmFuZ2UpKSB7CisgICAgICAgIC8v
IEZJWE1FOiBXaHkgZG8gd2UgZG8gdGhpcyB1bmNvbmRpdGlvbmFsbHkgaW5zdGVhZCBvZiB3aGVu
IG9ubHkgd2hlbiBpdCBvdmVybGFwcyB0aGUgc2VsZWN0aW9uPworICAgICAgICBhZGRNYXJrZXIo
cmFuZ2UsIERvY3VtZW50TWFya2VyOjpUZWxlcGhvbmVOdW1iZXIpOworCisgICAgICAgIC8vIE9u
bHkgY29uc2lkZXIgcmFuZ2VzIHdpdGggYSBkZXRlY3RlZCB0ZWxlcGhvbmUgbnVtYmVyIGlmIHRo
ZXkgb3ZlcmxhcCB3aXRoIHRoZSBzZWxlY3Rpb24uCisgICAgICAgIGlmIChpbnRlcnNlY3RzPENv
bXBvc2VkVHJlZT4ocmFuZ2UsICpzZWxlY3RlZFJhbmdlKSkKKyAgICAgICAgICAgIG1fZGV0ZWN0
ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXMuYXBwZW5kKHJhbmdlKTsKKyAgICB9CiB9CiAKICNlbmRp
ZiAvLyBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFURk9STShJT1Nf
RkFNSUxZKQpAQCAtMzgxMiwxNCArMzgxOSwxOCBAQCB2b2lkIEVkaXRvcjo6ZWRpdG9yVUlVcGRh
dGVUaW1lckZpcmVkKCkKICNlbmRpZgogfQogCi1zdGF0aWMgTm9kZSogZmluZEZpcnN0TWFya2Fi
bGUoTm9kZSogbm9kZSkKK3N0YXRpYyBSZWZQdHI8Tm9kZT4gZmluZEZpcnN0TWFya2FibGUoTm9k
ZSogc3RhcnRpbmdOb2RlKQogeworICAgIGF1dG8gbm9kZSA9IG1ha2VSZWZQdHIoc3RhcnRpbmdO
b2RlKTsKICAgICB3aGlsZSAobm9kZSkgewotICAgICAgICBpZiAoIW5vZGUtPnJlbmRlcmVyKCkp
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaWYgKG5vZGUtPnJlbmRlcmVy
KCktPmlzVGV4dE9yTGluZUJyZWFrKCkpCi0gICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAg
ICAgaWYgKGlzPEVsZW1lbnQ+KCpub2RlKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuaXNU
ZXh0RmllbGQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3Bl
OjpJbk1haW5UaHJlYWQgc2NyaXB0RGlzYWxsb3dlZFNjb3BlOworICAgICAgICAgICAgaWYgKCFu
b2RlLT5yZW5kZXJlcigpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICAgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCktPmlzVGV4dE9yTGluZUJyZWFrKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzPEhUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50Pigqbm9kZSkgJiYgZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmlz
VGV4dEZpZWxkKCkpCiAgICAgICAgICAgICBub2RlID0gZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29u
dHJvbEVsZW1lbnQ+KCpub2RlKS52aXNpYmxlUG9zaXRpb25Gb3JJbmRleCgxKS5kZWVwRXF1aXZh
bGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmZpcnN0Q2hp
bGQoKSkKICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5maXJzdENoaWxkKCk7CkBAIC0zODMyLDcg
KzM4NDMsNyBAQCBzdGF0aWMgTm9kZSogZmluZEZpcnN0TWFya2FibGUoTm9kZSogbm9kZSkKIAog
Ym9vbCBFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yKERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlIG1hcmtlclR5cGUsIGludCBmcm9tLCBpbnQgbGVuZ3RoKSBjb25zdAogewotICAg
IE5vZGUqIG5vZGUgPSBmaW5kRmlyc3RNYXJrYWJsZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgYXV0byBub2RlID0gZmlu
ZEZpcnN0TWFya2FibGUobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgp
LmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCkBAIC0zODUxLDcgKzM4NjIsNyBAQCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gRWRp
dG9yOjpyZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2soY29uc3QgTm9kZSYgcm9vdAogewogI2lm
IFVTRShBVVRPTUFUSUNfVEVYVF9SRVBMQUNFTUVOVCkgJiYgIVBMQVRGT1JNKElPU19GQU1JTFkp
CiAgICAgYm9vbCBvbmx5QWxsb3dzVGV4dFJlcGxhY2VtZW50ID0gZmFsc2U7Ci0gICAgaWYgKGF1
dG8qIGhvc3QgPSByb290RWRpdGFibGVFbGVtZW50LnNoYWRvd0hvc3QoKSkKKyAgICBpZiAoYXV0
byBob3N0ID0gbWFrZVJlZlB0cihyb290RWRpdGFibGVFbGVtZW50LnNoYWRvd0hvc3QoKSkpCiAg
ICAgICAgIG9ubHlBbGxvd3NUZXh0UmVwbGFjZW1lbnQgPSBpczxIVE1MSW5wdXRFbGVtZW50Piho
b3N0KSAmJiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqaG9zdCkuaXNTcGVsbGNoZWNrRGlz
YWJsZWRFeGNlcHRUZXh0UmVwbGFjZW1lbnQoKTsKICAgICBpZiAob25seUFsbG93c1RleHRSZXBs
YWNlbWVudCkKICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucyA9IHRleHRDaGVja2luZ09wdGlv
bnMgJiBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudDsKQEAgLTM5MTEsOSArMzkyMiw3IEBA
IHN0YXRpYyBib29sIGNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uKQogU3RyaW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVz
dCgpIGNvbnN0CiB7CiAgICAgYXV0byYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKTsKLSAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLmlzQ2FyZXQoKQotICAg
ICAgICA/IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkKLSAgICAgICAg
OiBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0
aW9uLmlzQ2FyZXQoKSA/IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkg
OiBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAg
ICByZXR1cm4geyB9OwogICAgIGlmICghY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChzZWxlY3Rp
b24pKQpAQCAtMzk4OSwxNyArMzk5OCwyMSBAQCBzdGF0aWMgVmVjdG9yPFRleHRMaXN0PiBlZGl0
YWJsZVRleHRMaXN0c0F0UG9zaXRpb25JbkRlc2NlbmRpbmdPcmRlcihjb25zdCBQb3NpdAogICAg
IHJldHVybiB0ZXh0TGlzdHM7CiB9CiAKLUZvbnRBdHRyaWJ1dGVzIEVkaXRvcjo6Zm9udEF0dHJp
YnV0ZXNBdFNlbGVjdGlvblN0YXJ0KCkgY29uc3QKK0ZvbnRBdHRyaWJ1dGVzIEVkaXRvcjo6Zm9u
dEF0dHJpYnV0ZXNBdFNlbGVjdGlvblN0YXJ0KCkKIHsKLSAgICBGb250QXR0cmlidXRlcyBhdHRy
aWJ1dGVzOwotICAgIE5vZGUqIG5vZGVUb1JlbW92ZSA9IG51bGxwdHI7Ci0gICAgYXV0byogc3R5
bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KG1fZG9jdW1lbnQuZnJhbWUoKSwgbm9kZVRvUmVt
b3ZlKTsKLSAgICBpZiAoIXN0eWxlKSB7CisgICAgUmVmUHRyPE5vZGU+IG5vZGVUb1JlbW92ZTsK
KyAgICBhdXRvIG5vZGVSZW1vdmFsU2NvcGUgPSBXVEY6Om1ha2VTY29wZUV4aXQoWyZub2RlVG9S
ZW1vdmVdKCkgewogICAgICAgICBpZiAobm9kZVRvUmVtb3ZlKQogICAgICAgICAgICAgbm9kZVRv
UmVtb3ZlLT5yZW1vdmUoKTsKLSAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7Ci0gICAgfQorICAg
IH0pOworCisgICAgYXV0byogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KG5vZGVUb1Jl
bW92ZSk7CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFNjcmlw
dERpc2FsbG93ZWRTY29wZTo6SW5NYWluVGhyZWFkIHNjcmlwdERpc2FsbG93ZWRTY29wZTsKIAor
ICAgIEZvbnRBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7CiAgICAgcGxhdGZvcm1Gb250QXR0cmlidXRl
c0F0U2VsZWN0aW9uU3RhcnQoYXR0cmlidXRlcywgKnN0eWxlKTsKIAogICAgIC8vIEZJWE1FOiBm
b3Igbm93LCBhbHdheXMgcmVwb3J0IHRoZSBjb2xvcnMgYWZ0ZXIgYXBwbHlpbmcgLWFwcGxlLWNv
bG9yLWZpbHRlci4gSW4gZnV0dXJlIG5vdCBhbGwgY2xpZW50cwpAQCAtNDA4MSw5ICs0MDk0LDYg
QEAgRm9udEF0dHJpYnV0ZXMgRWRpdG9yOjpmb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQo
KSBjb25zdAogICAgICAgICAgICAgYXR0cmlidXRlcy5oYXNVbmRlcmxpbmUgPSB0cnVlOwogICAg
IH0KIAotICAgIGlmIChub2RlVG9SZW1vdmUpCi0gICAgICAgIG5vZGVUb1JlbW92ZS0+cmVtb3Zl
KCk7Ci0KICAgICByZXR1cm4gYXR0cmlidXRlczsKIH0KIApAQCAtNDExMCw3ICs0MTIwLDcgQEAg
UHJvbWlzZWRBdHRhY2htZW50SW5mbyBFZGl0b3I6OnByb21pc2VkQXR0YWNobWVudEluZm8oRWxl
bWVudCYgZWxlbWVudCkKICAgICBnZXRQYXN0ZWJvYXJkVHlwZXNBbmREYXRhRm9yQXR0YWNobWVu
dChlbGVtZW50LCBhZGRpdGlvbmFsVHlwZXMsIGFkZGl0aW9uYWxEYXRhKTsKICNlbmRpZgogCi0g
ICAgaWYgKGF1dG8qIGZpbGUgPSBhdHRhY2htZW50LT5maWxlKCkpCisgICAgaWYgKGF1dG8gZmls
ZSA9IG1ha2VSZWZQdHIoYXR0YWNobWVudC0+ZmlsZSgpKSkKICAgICAgICAgcmV0dXJuIHsgZmls
ZS0+dXJsKCksIHBsYXRmb3JtQ29udGVudFR5cGVGb3JCbG9iVHlwZShmaWxlLT50eXBlKCkpLCBm
aWxlLT5uYW1lKCksIHsgfSwgV1RGTW92ZShhZGRpdGlvbmFsVHlwZXMpLCBXVEZNb3ZlKGFkZGl0
aW9uYWxEYXRhKSB9OwogCiAgICAgcmV0dXJuIHsgeyB9LCB7IH0sIHsgfSwgYXR0YWNobWVudC0+
dW5pcXVlSWRlbnRpZmllcigpLCBXVEZNb3ZlKGFkZGl0aW9uYWxUeXBlcyksIFdURk1vdmUoYWRk
aXRpb25hbERhdGEpIH07CkBAIC00MjUzLDUzICs0MjYzLDU4IEBAIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBFZGl0b3I6OmFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKQogfQogCiAvLyBGSVhNRTogVGhp
cyBmaWd1cmVzIG91dCB0aGUgY3VycmVudCBzdHlsZSBieSBpbnNlcnRpbmcgYSA8c3Bhbj4hCi1j
b25zdCBSZW5kZXJTdHlsZSogRWRpdG9yOjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0KEZyYW1lKiBm
cmFtZSwgTm9kZSomIG5vZGVUb1JlbW92ZSkKK2NvbnN0IFJlbmRlclN0eWxlKiBFZGl0b3I6OnN0
eWxlRm9yU2VsZWN0aW9uU3RhcnQoUmVmUHRyPE5vZGU+JiBub2RlVG9SZW1vdmUpCiB7CiAgICAg
bm9kZVRvUmVtb3ZlID0gbnVsbHB0cjsKIAotICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuaXNO
b25lKCkpCisgICAgaWYgKGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgUG9zaXRpb24gcG9zaXRpb24gPSBhZGp1c3RlZFNlbGVj
dGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbihmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkpOworICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gYWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0
eWxlQ29tcHV0YXRpb24oZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAg
aWYgKCFwb3NpdGlvbi5pc0NhbmRpZGF0ZSgpIHx8IHBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxl
ID0gZnJhbWUtPnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCk7CisgICAgYXV0byB0eXBpbmdTdHls
ZSA9IG1ha2VSZWZQdHIoZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKTsKICAg
ICBpZiAoIXR5cGluZ1N0eWxlIHx8ICF0eXBpbmdTdHlsZS0+c3R5bGUoKSkKICAgICAgICAgcmV0
dXJuICZwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpOwogCi0g
ICAgYXV0byBzdHlsZUVsZW1lbnQgPSBIVE1MU3BhbkVsZW1lbnQ6OmNyZWF0ZSgqZnJhbWUtPmRv
Y3VtZW50KCkpOworICAgIGF1dG8gc3R5bGVFbGVtZW50ID0gSFRNTFNwYW5FbGVtZW50OjpjcmVh
dGUoZG9jdW1lbnQoKSk7CiAKICAgICBTdHJpbmcgc3R5bGVUZXh0ID0gdHlwaW5nU3R5bGUtPnN0
eWxlKCktPmFzVGV4dCgpICsgIiBkaXNwbGF5OiBpbmxpbmUiOwogICAgIHN0eWxlRWxlbWVudC0+
c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3R5bGVBdHRyLCBzdHlsZVRleHQpOwogCi0gICAgc3R5
bGVFbGVtZW50LT5hcHBlbmRDaGlsZChmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlRWRpdGluZ1Rl
eHROb2RlKGVtcHR5U3RyaW5nKCkpKTsKKyAgICBzdHlsZUVsZW1lbnQtPmFwcGVuZENoaWxkKGRv
Y3VtZW50KCkuY3JlYXRlRWRpdGluZ1RleHROb2RlKGVtcHR5U3RyaW5nKCkpKTsKIAogICAgIGF1
dG8gcG9zaXRpb25Ob2RlID0gcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKTsKLSAgICBpZiAoIXBv
c2l0aW9uTm9kZSB8fCAhcG9zaXRpb25Ob2RlLT5wYXJlbnROb2RlKCkgfHwgcG9zaXRpb25Ob2Rl
LT5wYXJlbnROb2RlKCktPmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCkuaGFzRXhjZXB0aW9uKCkp
CisgICAgQVNTRVJUKHBvc2l0aW9uTm9kZSk7CisgICAgYXV0byBwYXJlbnQgPSBtYWtlUmVmUHRy
KHBvc2l0aW9uTm9kZS0+cGFyZW50Tm9kZSgpKTsKKyAgICBpZiAoIXBhcmVudCB8fCBwYXJlbnQt
PmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudC5nZXQoKSkuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgbm9kZVRvUmVtb3ZlID0gc3R5bGVFbGVtZW50LnB0cigp
OwotICAgIAotICAgIGZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisK
KyAgICBkb2N1bWVudCgpLnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKICAgICByZXR1cm4gc3R5bGVF
bGVtZW50LT5yZW5kZXJlcigpID8gJnN0eWxlRWxlbWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKSA6
IG51bGxwdHI7CiB9CiAKLWNvbnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29s
JiBoYXNNdWx0aXBsZUZvbnRzKSBjb25zdAorUmVmUHRyPEZvbnQ+IEVkaXRvcjo6Zm9udEZvclNl
bGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKQogewogICAgIGhhc011bHRpcGxlRm9udHMg
PSBmYWxzZTsKIAogICAgIGlmICghbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsK
LSAgICAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOwotICAgICAgICBhdXRvKiBzdHlsZSA9IHN0eWxl
Rm9yU2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5mcmFtZSgpLCBub2RlVG9SZW1vdmUpOyAvLyBz
ZXRzIG5vZGVUb1JlbW92ZQotCi0gICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBudWxscHRyOwot
ICAgICAgICBpZiAoc3R5bGUpIHsKLSAgICAgICAgICAgIGZvbnQgPSAmc3R5bGUtPmZvbnRDYXNj
YWRlKCkucHJpbWFyeUZvbnQoKTsKLSAgICAgICAgICAgIGlmIChub2RlVG9SZW1vdmUpCi0gICAg
ICAgICAgICAgICAgbm9kZVRvUmVtb3ZlLT5yZW1vdmUoKTsKKyAgICAgICAgUmVmUHRyPE5vZGU+
IG5vZGVUb1JlbW92ZTsKKyAgICAgICAgUmVmUHRyPEZvbnQ+IGZvbnQ7CisgICAgICAgIHsKKyAg
ICAgICAgICAgIGF1dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydChub2RlVG9SZW1v
dmUpOworICAgICAgICAgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgICAgIFNjcmlwdERpc2FsbG93ZWRTY29wZTo6SW5NYWluVGhyZWFkIHNj
cmlwdERpc2FsbG93ZWRTY29wZTsKKyAgICAgICAgICAgIGZvbnQgPSBjb25zdF9jYXN0PEZvbnQq
Pigmc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKSk7CiAgICAgICAgIH0KIAorICAg
ICAgICBpZiAobm9kZVRvUmVtb3ZlKQorICAgICAgICAgICAgbm9kZVRvUmVtb3ZlLT5yZW1vdmUo
KTsKKwogICAgICAgICByZXR1cm4gZm9udDsKICAgICB9CiAKQEAgLTQzMTMsMTQgKzQzMjgsMTYg
QEAgY29uc3QgRm9udCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxl
Rm9udHMpIGNvbnN0CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJhbmdlLT5zdGFydCA9
ICphZGp1c3RlZFN0YXJ0OwogCi0gICAgY29uc3QgRm9udCogZm9udCA9IG51bGxwdHI7CisgICAg
U2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJbk1haW5UaHJlYWQgc2NyaXB0RGlzYWxsb3dlZFNjb3Bl
OworCisgICAgUmVmUHRyPEZvbnQ+IGZvbnQ7CiAgICAgZm9yIChhdXRvJiBub2RlIDogaW50ZXJz
ZWN0aW5nTm9kZXMoKnJhbmdlKSkgewogICAgICAgICBhdXRvIHJlbmRlcmVyID0gbm9kZS5yZW5k
ZXJlcigpOwogICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIGF1dG8mIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUo
KS5wcmltYXJ5Rm9udCgpOwogICAgICAgICBpZiAoIWZvbnQpCi0gICAgICAgICAgICBmb250ID0g
JnByaW1hcnlGb250OworICAgICAgICAgICAgZm9udCA9IGNvbnN0X2Nhc3Q8Rm9udCo+KCZwcmlt
YXJ5Rm9udCk7CiAgICAgICAgIGVsc2UgaWYgKGZvbnQgIT0gJnByaW1hcnlGb250KSB7CiAgICAg
ICAgICAgICBoYXNNdWx0aXBsZUZvbnRzID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmgKaW5kZXggZjFjMWM1YTVjNTI4MDQ5OWVmZjkyMDBkNThhYzFkNjRi
Y2RlYjBkZi4uNjhhZGJkNDNjNTdkOGQwZDJjZWI4M2U5NTMzODQyMTc0Njc3MTAyZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5oCkBAIC00NDIsNyArNDQyLDcgQEAgcHVibGljOgogICAgIHZvaWQg
Y2xlYXJNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsK
ICAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mKTsKIAotICAgIEVsZW1lbnQqIGZpbmRFdmVudFRhcmdldEZyb20oY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uKSBjb25zdDsKKyAgICBSZWZQdHI8RWxlbWVudD4gZmluZEV2
ZW50VGFyZ2V0RnJvbShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgY29uc3Q7CiAKICAgICBXRUJD
T1JFX0VYUE9SVCBTdHJpbmcgc2VsZWN0ZWRUZXh0KCkgY29uc3Q7CiAgICAgU3RyaW5nIHNlbGVj
dGVkVGV4dEZvckRhdGFUcmFuc2ZlcigpIGNvbnN0OwpAQCAtNTE2LDkgKzUxNiw5IEBAIHB1Ymxp
YzoKIAogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiB3ZWJDb250ZW50RnJvbVBhc3RlYm9h
cmQoUGFzdGVib2FyZCYsIGNvbnN0IFNpbXBsZVJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxh
aW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBjb25z
dCBGb250KiBmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0Owot
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGVGb3JTZWxl
Y3Rpb25TdGFydChGcmFtZSogLCBOb2RlICombm9kZVRvUmVtb3ZlKTsKLSAgICBXRUJDT1JFX0VY
UE9SVCBGb250QXR0cmlidXRlcyBmb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQoKSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Rm9udD4gZm9udEZvclNlbGVjdGlvbihib29s
JiBoYXNNdWx0aXBsZUZvbnRzKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBSZW5kZXJTdHls
ZSogc3R5bGVGb3JTZWxlY3Rpb25TdGFydChSZWZQdHI8Tm9kZT4mIG5vZGVUb1JlbW92ZSk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgRm9udEF0dHJpYnV0ZXMgZm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlv
blN0YXJ0KCk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJp
bmcgc3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZCgpOwpAQCAtNjA1LDcgKzYwNSw3IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIGVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCgpOwogCi0gICAgRWxl
bWVudCogZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpIGNvbnN0OworICAgIFJlZlB0cjxF
bGVtZW50PiBmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCkgY29uc3Q7CiAKICAgICBib29s
IHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Ry
YWdDb250cm9sbGVyLmNwcAppbmRleCBjZGQxYmM4ZWMwMGM0MjZkOTlhYmE4ZWNlZmEwMWNjNGIz
NjlmZDFiLi40MmJiZTFhYTQ2ZTAwMWFhNGU4MjhjZTFhNGY4OWI4YTUyODBmNDEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtNTI2LDcgKzUyNiw3IEBAIGJvb2wg
RHJhZ0NvbnRyb2xsZXI6OmRpc3BhdGNoVGV4dElucHV0RXZlbnRGb3IoRnJhbWUqIGlubmVyRnJh
bWUsIGNvbnN0IERyYWdEYXRhCiB7CiAgICAgQVNTRVJUKG1fcGFnZS5kcmFnQ2FyZXRDb250cm9s
bGVyKCkuaGFzQ2FyZXQoKSk7CiAgICAgU3RyaW5nIHRleHQgPSBtX3BhZ2UuZHJhZ0NhcmV0Q29u
dHJvbGxlcigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkgPyBlbXB0eVN0cmluZygpIDogZHJh
Z0RhdGEuYXNQbGFpblRleHQoKTsKLSAgICBFbGVtZW50KiB0YXJnZXQgPSBpbm5lckZyYW1lLT5l
ZGl0b3IoKS5maW5kRXZlbnRUYXJnZXRGcm9tKG1fcGFnZS5kcmFnQ2FyZXRDb250cm9sbGVyKCku
Y2FyZXRQb3NpdGlvbigpKTsKKyAgICBhdXRvIHRhcmdldCA9IGlubmVyRnJhbWUtPmVkaXRvcigp
LmZpbmRFdmVudFRhcmdldEZyb20obV9wYWdlLmRyYWdDYXJldENvbnRyb2xsZXIoKS5jYXJldFBv
c2l0aW9uKCkpOwogICAgIC8vIEZJWE1FOiBXaGF0IGd1YXJhbnRlZXMgdGFyZ2V0IGlzIG5vdCBu
dWxsPwogICAgIGF1dG8gZXZlbnQgPSBUZXh0RXZlbnQ6OmNyZWF0ZUZvckRyb3AoJmlubmVyRnJh
bWUtPndpbmRvd1Byb3h5KCksIHRleHQpOwogICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVu
dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4
IDE0YjEwOWM5ZDA1ODQzZDY4NjRiZjNlMGM1NDlkYWQ2ZTI4NGIzOTMuLjdlYTJhOGZlZjQ2OTNh
MWNhMmRlMzc0Mzk2OGFlNDdkZGFkYmUzOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0xMTkzLDcgKzExOTMsNyBAQCBFZGl0b3JTdGF0ZSBX
ZWJQYWdlOjplZGl0b3JTdGF0ZShTaG91bGRQZXJmb3JtTGF5b3V0IHNob3VsZFBlcmZvcm1MYXlv
dXQpIGNvbnN0CiAgICAgfQogCiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
ID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIGNvbnN0IEVkaXRvciYgZWRp
dG9yID0gZnJhbWUtPmVkaXRvcigpOworICAgIGF1dG8mIGVkaXRvciA9IGZyYW1lLT5lZGl0b3Io
KTsKIAogICAgIHJlc3VsdC50cmFuc2FjdGlvbklEID0gbV9sYXN0RWRpdG9yU3RhdGVUcmFuc2Fj
dGlvbklELmluY3JlbWVudCgpOwogICAgIHJlc3VsdC5zZWxlY3Rpb25Jc05vbmUgPSBzZWxlY3Rp
b24uaXNOb25lKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lv
cy9XZWJQYWdlSU9TLm1tCmluZGV4IDYwYmM5MDI2YjZmMjY5NmY0N2NlYzkxYTdiMjlmMjJkNGYy
YWQ1ZjEuLjkzNGNiZjdlNWMyOTQyZmQ0OWNkMzEzMzJlOThkNWYzMmVlNGQxOTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBA
IC0yMzQ4LDcgKzIzNDgsNyBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RBdXRvY29ycmVjdGlvbkRh
dGEoY29uc3QgU3RyaW5nJiB0ZXh0Rm9yQXV0b2NvcnJlY3Rpb24sIENvbQogCiAgICAgYm9vbCBt
dWx0aXBsZUZvbnRzID0gZmFsc2U7CiAgICAgQ1RGb250UmVmIGZvbnQgPSBuaWw7Ci0gICAgaWYg
KGF1dG8qIGNvcmVGb250ID0gZnJhbWUuZWRpdG9yKCkuZm9udEZvclNlbGVjdGlvbihtdWx0aXBs
ZUZvbnRzKSkKKyAgICBpZiAoYXV0byBjb3JlRm9udCA9IGZyYW1lLmVkaXRvcigpLmZvbnRGb3JT
ZWxlY3Rpb24obXVsdGlwbGVGb250cykpCiAgICAgICAgIGZvbnQgPSBjb3JlRm9udC0+Z2V0Q1RG
b250KCk7CiAKICAgICByZXBseSh7IFdURk1vdmUocm9vdFZpZXdTZWxlY3Rpb25SZWN0cykgLCAo
X19icmlkZ2UgVUlGb250ICopZm9udCB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggNzRkYTYzNTc4ODJjZDAxMzAyMDg0
MDk3ZjA2NGQyMWMzYjkxNWQwNC4uZjIyNDY0YTZlNTUwNWU3ZDNiNTE1NmFjZTgzYTMwNmQyYzBj
NDZmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dl
YlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dl
YlBhZ2VNYWMubW0KQEAgLTM4Miw3ICszODIsNyBAQCB2b2lkIFdlYlBhZ2U6OmZvbnRBdFNlbGVj
dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEZvbnRJbmZvJiwgZG91YmxlLCBibwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byogZm9udCA9IGZyYW1lLmVkaXRvcigp
LmZvbnRGb3JTZWxlY3Rpb24oc2VsZWN0aW9uSGFzTXVsdGlwbGVGb250cyk7CisgICAgYXV0byBm
b250ID0gZnJhbWUuZWRpdG9yKCkuZm9udEZvclNlbGVjdGlvbihzZWxlY3Rpb25IYXNNdWx0aXBs
ZUZvbnRzKTsKICAgICBpZiAoIWZvbnQpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9
LCAwLCBmYWxzZSk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IDExNDAzNDY0YWQ4ZjU3ZGVmZDk5NTkyMzVjNzRlYjJm
ZGVjMTJiODEuLmY3NmY5YzI2MzE4NDhjY2Y4M2E4OThkOWFmZjQyODJiYjZkZjI3N2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtMTgyNSw5ICsx
ODI1LDggQEAgc3RhdGljIFdlYkZyYW1lTG9hZFR5cGUgdG9XZWJGcmFtZUxvYWRUeXBlKFdlYkNv
cmU6OkZyYW1lTG9hZFR5cGUgZnJhbWVMb2FkVHlwZSkKICAgICBib29sIG11bHRpcGxlRm9udHMg
PSBmYWxzZTsKICAgICBDVEZvbnRSZWYgZm9udCA9IG5pbDsKICAgICBpZiAoX3ByaXZhdGUtPmNv
cmVGcmFtZSkgewotICAgICAgICBjb25zdCBXZWJDb3JlOjpGb250KiBmZCA9IF9wcml2YXRlLT5j
b3JlRnJhbWUtPmVkaXRvcigpLmZvbnRGb3JTZWxlY3Rpb24obXVsdGlwbGVGb250cyk7Ci0gICAg
ICAgIGlmIChmZCkKLSAgICAgICAgICAgIGZvbnQgPSBmZC0+Z2V0Q1RGb250KCk7CisgICAgICAg
IGlmIChhdXRvIGNvcmVGb250ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCkuZm9udEZv
clNlbGVjdGlvbihtdWx0aXBsZUZvbnRzKSkKKyAgICAgICAgICAgIGZvbnQgPSBjb3JlRm9udC0+
Z2V0Q1RGb250KCk7CiAgICAgfQogICAgIAogICAgIGlmIChoYXNNdWx0aXBsZUZvbnRzKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbSBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KaW5kZXggMmI4
YTI4MjBmODA5YjhhYjM5NWY2NmZkODA4ZjdhZDA4ZGVkM2FkMy4uZGQ3MDEzYzE5YjIxMzM5Mjhj
MWY3ZDFhYjZmZTQ3MWQyZDc1ZjQ1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCkBAIC01NzQxLDggKzU3NDEsOCBAQCBzdGF0aWMgQk9PTCB3
cml0aW5nRGlyZWN0aW9uS2V5QmluZGluZ3NFbmFibGVkKCkKICAgICBOU0ZvbnQgKmZvbnQgPSBu
aWw7CiAgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gYXR0cmlidXRlczsKICAgICBpZiAoYXV0
byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkgewotICAgICAgICBpZiAoY29uc3Qg
V2ViQ29yZTo6Rm9udCogZmQgPSBjb3JlRnJhbWUtPmVkaXRvcigpLmZvbnRGb3JTZWxlY3Rpb24o
bXVsdGlwbGVGb250cykpCi0gICAgICAgICAgICBmb250ID0gKE5TRm9udCAqKWZkLT5wbGF0Zm9y
bURhdGEoKS5yZWdpc3RlcmVkRm9udCgpOworICAgICAgICBpZiAoYXV0byBjb3JlRm9udCA9IGNv
cmVGcmFtZS0+ZWRpdG9yKCkuZm9udEZvclNlbGVjdGlvbihtdWx0aXBsZUZvbnRzKSkKKyAgICAg
ICAgICAgIGZvbnQgPSAoTlNGb250ICopY29yZUZvbnQtPnBsYXRmb3JtRGF0YSgpLnJlZ2lzdGVy
ZWRGb250KCk7CiAgICAgICAgIGF0dHJpYnV0ZXMgPSBjb3JlRnJhbWUtPmVkaXRvcigpLmZvbnRB
dHRyaWJ1dGVzQXRTZWxlY3Rpb25TdGFydCgpLmNyZWF0ZURpY3Rpb25hcnkoKTsKICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCA1YjBlZThh
M2FjOGMzMzNiNmVlMzQ0Y2RkOWMzYjU1NzY1YzI2ZmYwLi5jYTExMTUzNDAxMmVjODA2NDE4MjQw
YmUxYTI5NzZhODI2NDU1NWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJWaWV3Lm1tCkBAIC05NDc3LDggKzk0NzcsOCBAQCBzdGF0aWMgTlNUZXh0QWxpZ25tZW50IG5z
VGV4dEFsaWdubWVudEZyb21SZW5kZXJTdHlsZShjb25zdCBXZWJDb3JlOjpSZW5kZXJTdHlsZQog
ICAgIGlmICh3ZWJIVE1MVmlldy5fY2FuRWRpdFJpY2hseSkgewogICAgICAgICBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwogICAgICAgICBpZiAoIXNlbGVjdGlvbi5pc05vbmUoKSkgewotICAgICAgICAgICAgTm9k
ZSogbm9kZVRvUmVtb3ZlOwotICAgICAgICAgICAgaWYgKGF1dG8qIHN0eWxlID0gRWRpdG9yOjpz
dHlsZUZvclNlbGVjdGlvblN0YXJ0KGNvcmVGcmFtZSwgbm9kZVRvUmVtb3ZlKSkgeworICAgICAg
ICAgICAgUmVmUHRyPE5vZGU+IG5vZGVUb1JlbW92ZTsKKyAgICAgICAgICAgIGlmIChhdXRvKiBz
dHlsZSA9IGNvcmVGcmFtZS0+ZWRpdG9yKCkuc3R5bGVGb3JTZWxlY3Rpb25TdGFydChub2RlVG9S
ZW1vdmUpKSB7CiAgICAgICAgICAgICAgICAgW19wcml2YXRlLT5fdGV4dFRvdWNoQmFySXRlbUNv
bnRyb2xsZXIgc2V0VGV4dElzQm9sZDppc0ZvbnRXZWlnaHRCb2xkKHN0eWxlLT5mb250Q2FzY2Fk
ZSgpLndlaWdodCgpKV07CiAgICAgICAgICAgICAgICAgW19wcml2YXRlLT5fdGV4dFRvdWNoQmFy
SXRlbUNvbnRyb2xsZXIgc2V0VGV4dElzSXRhbGljOmlzSXRhbGljKHN0eWxlLT5mb250Q2FzY2Fk
ZSgpLml0YWxpYygpKV07CiAKQEAgLTk0OTUsNyArOTQ5NSw3IEBAIHN0YXRpYyBOU1RleHRBbGln
bm1lbnQgbnNUZXh0QWxpZ25tZW50RnJvbVJlbmRlclN0eWxlKGNvbnN0IFdlYkNvcmU6OlJlbmRl
clN0eWxlCiAKICAgICAgICAgICAgICAgICBbX3ByaXZhdGUtPl90ZXh0VG91Y2hCYXJJdGVtQ29u
dHJvbGxlciBzZXRDdXJyZW50VGV4dEFsaWdubWVudDpuc1RleHRBbGlnbm1lbnRGcm9tUmVuZGVy
U3R5bGUoc3R5bGUpXTsKIAotICAgICAgICAgICAgICAgIEhUTUxFbGVtZW50KiBlbmNsb3NpbmdM
aXN0RWxlbWVudCA9IGVuY2xvc2luZ0xpc3Qoc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5v
ZGUoKSk7CisgICAgICAgICAgICAgICAgYXV0byBlbmNsb3NpbmdMaXN0RWxlbWVudCA9IG1ha2VS
ZWZQdHIoZW5jbG9zaW5nTGlzdChzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKSk7
CiAgICAgICAgICAgICAgICAgaWYgKGVuY2xvc2luZ0xpc3RFbGVtZW50KSB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChpczxIVE1MVUxpc3RFbGVtZW50PigqZW5jbG9zaW5nTGlzdEVsZW1lbnQp
KQogICAgICAgICAgICAgICAgICAgICAgICAgW1tfcHJpdmF0ZS0+X3RleHRUb3VjaEJhckl0ZW1D
b250cm9sbGVyIHdlYlRleHRMaXN0VG91Y2hCYXJWaWV3Q29udHJvbGxlcl0gc2V0Q3VycmVudExp
c3RUeXBlOldlYkxpc3RUeXBlOjpVbm9yZGVyZWRdOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>