<?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>204448</bug_id>
          
          <creation_ts>2019-11-21 01:38:58 -0800</creation_ts>
          <short_desc>Optimize dynamic media queries</short_desc>
          <delta_ts>2019-12-20 08:52:08 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</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>
          <dependson>204449</dependson>
    
    <dependson>205263</dependson>
    
    <dependson>205264</dependson>
    
    <dependson>205391</dependson>
    
    <dependson>205392</dependson>
    
    <dependson>205406</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>emilio</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1592317</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-21 01:38:58 -0800</bug_when>
    <thetext>All media queries currently force full style resolver rebuild when a query evaluation changes (for example viewport queries on window resizing or device rotation). This is very inefficient. We should treat media queries more like selectors, avoid rebuilds, and only perform the needed style recalcs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592366</commentid>
    <comment_count>1</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-21 07:35:05 -0800</bug_when>
    <thetext>&lt;rdar://problem/40768292&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598310</commentid>
    <comment_count>2</comment_count>
      <attachid>385595</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-12-13 05:42:33 -0800</bug_when>
    <thetext>Created attachment 385595
wip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598378</commentid>
    <comment_count>3</comment_count>
      <attachid>385611</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-12-13 09:42:13 -0800</bug_when>
    <thetext>Created attachment 385611
wip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600744</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-12-20 08:52:08 -0800</bug_when>
    <thetext>This is done.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385595</attachid>
            <date>2019-12-13 05:42:33 -0800</date>
            <delta_ts>2019-12-13 09:42:13 -0800</delta_ts>
            <desc>wip</desc>
            <filename>rule-dynamic-media-query.patch</filename>
            <type>text/plain</type>
            <size>31849</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5j
cHAKaW5kZXggMWM0ZTM2ZjE0OTYuLjNiYmM1MTAyMzllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcApAQCAtMjQzMyw5ICsyNDMz
LDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpwcm9wZXJ0eVZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwKICAgICAgICAgc3R5bGUgPSBjb21wdXRlUmVu
ZGVyU3R5bGVGb3JQcm9wZXJ0eSgqc3R5bGVkRWxlbWVudCwgbV9wc2V1ZG9FbGVtZW50U3BlY2lm
aWVyLCBwcm9wZXJ0eUlELCBvd25lZFN0eWxlKTsKIAogICAgICAgICAvLyBGSVhNRTogU29tZSBv
ZiB0aGVzZSBjYXNlcyBjb3VsZCBiZSBuYXJyb3dlZCBkb3duIG9yIG9wdGltaXplZCBiZXR0ZXIu
Ci0gICAgICAgIGZvcmNlRnVsbExheW91dCA9IGlzTGF5b3V0RGVwZW5kZW50KHByb3BlcnR5SUQs
IHN0eWxlLCByZW5kZXJlcikKLSAgICAgICAgICAgIHx8IHN0eWxlZEVsZW1lbnQtPmlzSW5TaGFk
b3dUcmVlKCkKLSAgICAgICAgICAgIHx8IChkb2N1bWVudC5zdHlsZVNjb3BlKCkucmVzb2x2ZXJJ
ZkV4aXN0cygpICYmIGRvY3VtZW50LnN0eWxlU2NvcGUoKS5yZXNvbHZlcklmRXhpc3RzKCktPmhh
c1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzKCkgJiYgZG9jdW1lbnQub3duZXJFbGVtZW50
KCkpOworICAgICAgICBmb3JjZUZ1bGxMYXlvdXQgPSBpc0xheW91dERlcGVuZGVudChwcm9wZXJ0
eUlELCBzdHlsZSwgcmVuZGVyZXIpIHx8IHN0eWxlZEVsZW1lbnQtPmlzSW5TaGFkb3dUcmVlKCk7
CiAKICAgICAgICAgaWYgKGZvcmNlRnVsbExheW91dCkgewogICAgICAgICAgICAgZG9jdW1lbnQu
dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAKaW5kZXggMDY5NDU0OTJlMDYuLmRjYTkyMDllZWJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCkBAIC0xNDUs
NyArMTQ1LDcgQEAgc3RhdGljIGJvb2wgYXBwbHlSZXN0cmljdG9yKE1lZGlhUXVlcnk6OlJlc3Ry
aWN0b3IgciwgYm9vbCB2YWx1ZSkKICAgICByZXR1cm4gciA9PSBNZWRpYVF1ZXJ5OjpOb3QgPyAh
dmFsdWUgOiB2YWx1ZTsKIH0KIAotYm9vbCBNZWRpYVF1ZXJ5RXZhbHVhdG9yOjpldmFsdWF0ZShj
b25zdCBNZWRpYVF1ZXJ5U2V0JiBxdWVyeVNldCwgTWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzKiBk
eW5hbWljUmVzdWx0cykgY29uc3QKK2Jvb2wgTWVkaWFRdWVyeUV2YWx1YXRvcjo6ZXZhbHVhdGUo
Y29uc3QgTWVkaWFRdWVyeVNldCYgcXVlcnlTZXQsIE1lZGlhUXVlcnlEeW5hbWljUmVzdWx0cyog
ZHluYW1pY1Jlc3VsdHMsIE1vZGUgbW9kZSkgY29uc3QKIHsKICAgICBMT0dfV0lUSF9TVFJFQU0o
TWVkaWFRdWVyaWVzLCBzdHJlYW0gPDwgIk1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWx1YXRlIG9u
ICIgPDwgKG1fZG9jdW1lbnQgPyBtX2RvY3VtZW50LT51cmwoKS5zdHJpbmcoKSA6IGVtcHR5U3Ry
aW5nKCkpKTsKIApAQCAtMTY2LDIyICsxNjYsMzQgQEAgYm9vbCBNZWRpYVF1ZXJ5RXZhbHVhdG9y
OjpldmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5U2V0JiBxdWVyeVNldCwgTWVkaWFRdWVyeUR5bmEK
ICAgICAgICAgaWYgKG1lZGlhVHlwZU1hdGNoKHF1ZXJ5Lm1lZGlhVHlwZSgpKSkgewogICAgICAg
ICAgICAgYXV0byYgZXhwcmVzc2lvbnMgPSBxdWVyeS5leHByZXNzaW9ucygpOwogICAgICAgICAg
ICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGV4cHJlc3Npb25zLCBzdG9wIGlmIGFueSBvZiB0aGVtIGV2
YWwgdG8gZmFsc2UgKEFORCBzZW1hbnRpY3MpLgorICAgICAgICAgICAgYm9vbCBpc0R5bmFtaWMg
PSBmYWxzZTsKICAgICAgICAgICAgIHNpemVfdCBqID0gMDsKICAgICAgICAgICAgIGZvciAoOyBq
IDwgZXhwcmVzc2lvbnMuc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICBib29sIGV4cHJl
c3Npb25SZXN1bHQgPSBldmFsdWF0ZShleHByZXNzaW9uc1tqXSk7CiAgICAgICAgICAgICAgICAg
aWYgKGR5bmFtaWNSZXN1bHRzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc1ZpZXdwb3J0
RGVwZW5kZW50KGV4cHJlc3Npb25zW2pdLm1lZGlhRmVhdHVyZSgpKSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzVmlld3BvcnREZXBlbmRlbnQoZXhwcmVzc2lvbnNbal0ubWVkaWFGZWF0dXJl
KCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpc0R5bmFtaWMgPSB0cnVlOwogICAgICAg
ICAgICAgICAgICAgICAgICAgZHluYW1pY1Jlc3VsdHMtPnZpZXdwb3J0LmFwcGVuZCh7IGV4cHJl
c3Npb25zW2pdLCBleHByZXNzaW9uUmVzdWx0IH0pOwotICAgICAgICAgICAgICAgICAgICBpZiAo
aXNBcHBlYXJhbmNlRGVwZW5kZW50KGV4cHJlc3Npb25zW2pdLm1lZGlhRmVhdHVyZSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcHBlYXJhbmNl
RGVwZW5kZW50KGV4cHJlc3Npb25zW2pdLm1lZGlhRmVhdHVyZSgpKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaXNEeW5hbWljID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGR5
bmFtaWNSZXN1bHRzLT5hcHBlYXJhbmNlLmFwcGVuZCh7IGV4cHJlc3Npb25zW2pdLCBleHByZXNz
aW9uUmVzdWx0IH0pOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXNBY2Nlc3NpYmlsaXR5U2V0
dGluZ3NEZXBlbmRlbnQoZXhwcmVzc2lvbnNbal0ubWVkaWFGZWF0dXJlKCkpKQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0FjY2Vzc2liaWxpdHlTZXR0
aW5nc0RlcGVuZGVudChleHByZXNzaW9uc1tqXS5tZWRpYUZlYXR1cmUoKSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlzRHluYW1pYyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBkeW5hbWljUmVzdWx0cy0+YWNjZXNzaWJpbGl0eVNldHRpbmdzLmFwcGVuZCh7IGV4cHJlc3Np
b25zW2pdLCBleHByZXNzaW9uUmVzdWx0IH0pOworICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKCFleHByZXNzaW9uUmVzdWx0KQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAg
aWYgKG1vZGUgPT0gTW9kZTo6QWx3YXlzTWF0Y2hEeW5hbWljICYmIGlzRHluYW1pYykgeworICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8vIEFzc3VtZSB0cnVlIGlmIHdlIGFyZSBhdCB0
aGUgZW5kIG9mIHRoZSBsaXN0LCBvdGhlcndpc2UgYXNzdW1lIGZhbHNlLgogICAgICAgICAgICAg
cmVzdWx0ID0gYXBwbHlSZXN0cmljdG9yKHF1ZXJ5LnJlc3RyaWN0b3IoKSwgZXhwcmVzc2lvbnMu
c2l6ZSgpID09IGopOwogICAgICAgICB9IGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVy
eUV2YWx1YXRvci5oCmluZGV4IDNhZDk5OGNiYWNkLi41ZGU4NWM3Y2NjYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oCkBAIC04Myw3ICs4Myw4IEBAIHB1YmxpYzoK
ICAgICBib29sIGV2YWx1YXRlKGNvbnN0IE1lZGlhUXVlcnlFeHByZXNzaW9uJikgY29uc3Q7CiAg
ICAgYm9vbCBldmFsdWF0ZUZvckNoYW5nZXMoY29uc3QgTWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRz
JikgY29uc3Q7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGV2YWx1YXRlKGNvbnN0IE1lZGlh
UXVlcnlTZXQmLCBNZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMqID0gbnVsbHB0cikgY29uc3Q7Cisg
ICAgZW51bSBjbGFzcyBNb2RlIHsgTm9ybWFsLCBBbHdheXNNYXRjaER5bmFtaWMgfTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBib29sIGV2YWx1YXRlKGNvbnN0IE1lZGlhUXVlcnlTZXQmLCBNZWRpYVF1
ZXJ5RHluYW1pY1Jlc3VsdHMqID0gbnVsbHB0ciwgTW9kZSA9IE1vZGU6Ok5vcm1hbCkgY29uc3Q7
CiAKICAgICBzdGF0aWMgYm9vbCBtZWRpYUF0dHJpYnV0ZU1hdGNoZXMoRG9jdW1lbnQmLCBjb25z
dCBTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3R5bGUvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvRWxl
bWVudFJ1bGVDb2xsZWN0b3IuY3BwCmluZGV4IGQ3MDY4ZDU5YTljLi4zYmFmYjIwZjYwZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcApAQCAtNTI0
LDYgKzUyNCw5IEBAIHZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OmNvbGxlY3RNYXRjaGluZ1J1
bGVzRm9yTGlzdChjb25zdCBSdWxlU2V0OjpSdWxlRGF0YVZlCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMCwgc2l6ZSA9IHJ1bGVzLT5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgY29u
c3QgYXV0byYgcnVsZURhdGEgPSBydWxlcy0+ZGF0YSgpW2ldOwogCisgICAgICAgIGlmICghcnVs
ZURhdGEuaXNFbmFibGVkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKwogICAgICAgICBpZiAo
IXJ1bGVEYXRhLmNhbk1hdGNoUHNldWRvRWxlbWVudCgpICYmIG1fcHNldWRvRWxlbWVudFJlcXVl
c3QucHNldWRvSWQgIT0gUHNldWRvSWQ6Ok5vbmUpCiAgICAgICAgICAgICBjb250aW51ZTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZURhdGEuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3R5bGUvUnVsZURhdGEuY3BwCmluZGV4IGYzNDRkYjk5NjE2Li42YTMwMWRmOGYyNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZURhdGEuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1J1bGVEYXRhLmNwcApAQCAtMTY5LDYgKzE2OSw3IEBAIFJ1bGVEYXRh
OjpSdWxlRGF0YShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIHVuc2ln
bmVkIHNlbGVjdG9yTGlzCiAgICAgLCBtX2NvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3Rv
cihjb21wdXRlQ29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKCpzZWxlY3RvcigpKSkK
ICAgICAsIG1fbGlua01hdGNoVHlwZShTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtNYXRj
aFR5cGUoc2VsZWN0b3IoKSkpCiAgICAgLCBtX3Byb3BlcnR5V2hpdGVsaXN0VHlwZShkZXRlcm1p
bmVQcm9wZXJ0eVdoaXRlbGlzdFR5cGUoc2VsZWN0b3IoKSkpCisgICAgLCBtX2lzRW5hYmxlZCh0
cnVlKQogICAgICwgbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKFNlbGVjdG9y
RmlsdGVyOjpjb2xsZWN0SGFzaGVzKCpzZWxlY3RvcigpKSkKIHsKICAgICBBU1NFUlQobV9wb3Np
dGlvbiA9PSBwb3NpdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxl
RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZURhdGEuaAppbmRleCAxZmI2YTcxZTk1
Mi4uYTNhNjAxMDJlZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVEYXRh
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZURhdGEuaApAQCAtNjAsNiArNjAsOSBA
QCBwdWJsaWM6CiAgICAgYm9vbCBjb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSBj
b25zdCB7IHJldHVybiBtX2NvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcjsgfQogICAg
IHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2xpbmtNYXRjaFR5cGU7
IH0KICAgICBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgcHJvcGVydHlXaGl0ZWxpc3RUeXBlKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UHJvcGVydHlXaGl0ZWxpc3RUeXBlPihtX3Byb3BlcnR5
V2hpdGVsaXN0VHlwZSk7IH0KKyAgICBib29sIGlzRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNFbmFibGVkOyB9CisgICAgdm9pZCBzZXRFbmFibGVkKGJvb2wgdmFsdWUpIHsgbV9pc0VuYWJs
ZWQgPSB2YWx1ZTsgfQorCiAgICAgY29uc3QgU2VsZWN0b3JGaWx0ZXI6Okhhc2hlcyYgZGVzY2Vu
ZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hlcygpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY2VuZGFu
dFNlbGVjdG9ySWRlbnRpZmllckhhc2hlczsgfQogCiAgICAgdm9pZCBkaXNhYmxlU2VsZWN0b3JG
aWx0ZXJpbmcoKSB7IG1fZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hlc1swXSA9IDA7
IH0KQEAgLTc2LDYgKzc5LDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2NvbnRhaW5zVW5j
b21tb25BdHRyaWJ1dGVTZWxlY3RvciA6IDE7CiAgICAgdW5zaWduZWQgbV9saW5rTWF0Y2hUeXBl
IDogMjsgLy8gIFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNoTWFzawogICAgIHVuc2lnbmVkIG1f
cHJvcGVydHlXaGl0ZWxpc3RUeXBlIDogMjsKKyAgICB1bnNpZ25lZCBtX2lzRW5hYmxlZCA6IDE7
CiAgICAgU2VsZWN0b3JGaWx0ZXI6Okhhc2hlcyBtX2Rlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZp
ZXJIYXNoZXM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXQuY3BwCmluZGV4IDk3MDJhM2VjNmQ1
Li42NDFmYmY5NzMxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5jcHAKQEAgLTI2MCw2MyArMjYw
LDE3NSBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoU3R5bGVSdWxlKiBydWxlLCB1bnNpZ25lZCBz
ZWxlY3RvckluZGV4LCB1bnNpZ25lZCBzZWxlY3RvcgogICAgIG1fdW5pdmVyc2FsUnVsZXMuYXBw
ZW5kKHJ1bGVEYXRhKTsKIH0KIAotdm9pZCBSdWxlU2V0OjphZGRQYWdlUnVsZShTdHlsZVJ1bGVQ
YWdlKiBydWxlKQordm9pZCBSdWxlU2V0OjphZGRQYWdlUnVsZShTdHlsZVJ1bGVQYWdlJiBydWxl
KQogewotICAgIG1fcGFnZVJ1bGVzLmFwcGVuZChydWxlKTsKKyAgICBtX3BhZ2VSdWxlcy5hcHBl
bmQoJnJ1bGUpOwogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZENoaWxkUnVsZXMoY29uc3QgVmVjdG9y
PFJlZlB0cjxTdHlsZVJ1bGVCYXNlPj4mIHJ1bGVzLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9y
JiBtZWRpdW0sIFJlc29sdmVyKiByZXNvbHZlciwgTWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzJiBt
ZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMpCit2b2lkIFJ1bGVTZXQ6OmFkZENoaWxkUnVsZXMoY29u
c3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPj4mIHJ1bGVzLCBNZWRpYVF1ZXJ5Q29sbGVj
dG9yJiBtZWRpYVF1ZXJ5Q29sbGVjdG9yLCBSZXNvbHZlciogcmVzb2x2ZXIsIEFkZFJ1bGVzTW9k
ZSBtb2RlKQogewogICAgIGZvciAoYXV0byYgcnVsZSA6IHJ1bGVzKSB7Ci0gICAgICAgIGlmIChp
czxTdHlsZVJ1bGU+KCpydWxlKSkKLSAgICAgICAgICAgIGFkZFN0eWxlUnVsZShkb3duY2FzdDxT
dHlsZVJ1bGU+KHJ1bGUuZ2V0KCkpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8U3R5bGVSdWxlUGFn
ZT4oKnJ1bGUpKQotICAgICAgICAgICAgYWRkUGFnZVJ1bGUoZG93bmNhc3Q8U3R5bGVSdWxlUGFn
ZT4ocnVsZS5nZXQoKSkpOwotICAgICAgICBlbHNlIGlmIChpczxTdHlsZVJ1bGVNZWRpYT4oKnJ1
bGUpKSB7CisgICAgICAgIGlmIChtb2RlID09IEFkZFJ1bGVzTW9kZTo6UmVzb2x2ZXJNdXRhdGlv
blNjYW4gJiYgbWVkaWFRdWVyeUNvbGxlY3Rvci5kaWRNdXRhdGVSZXNvbHZlcldpdGhpbkR5bmFt
aWNNZWRpYVF1ZXJ5KQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzPFN0eWxl
UnVsZT4oKnJ1bGUpKSB7CisgICAgICAgICAgICBpZiAobW9kZSA9PSBBZGRSdWxlc01vZGU6Ok5v
cm1hbCkKKyAgICAgICAgICAgICAgICBhZGRTdHlsZVJ1bGUoZG93bmNhc3Q8U3R5bGVSdWxlPigq
cnVsZSksIG1lZGlhUXVlcnlDb2xsZWN0b3IpOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGlzPFN0eWxlUnVsZVBhZ2U+KCpydWxlKSkgeworICAgICAgICAg
ICAgaWYgKG1vZGUgPT0gQWRkUnVsZXNNb2RlOjpOb3JtYWwpCisgICAgICAgICAgICAgICAgYWRk
UGFnZVJ1bGUoZG93bmNhc3Q8U3R5bGVSdWxlUGFnZT4oKnJ1bGUpKTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChpczxTdHlsZVJ1bGVNZWRpYT4oKnJ1bGUp
KSB7CiAgICAgICAgICAgICBhdXRvJiBtZWRpYVJ1bGUgPSBkb3duY2FzdDxTdHlsZVJ1bGVNZWRp
YT4oKnJ1bGUpOwotICAgICAgICAgICAgaWYgKCghbWVkaWFSdWxlLm1lZGlhUXVlcmllcygpIHx8
IG1lZGl1bS5ldmFsdWF0ZSgqbWVkaWFSdWxlLm1lZGlhUXVlcmllcygpLCAmbWVkaWFRdWVyeUR5
bmFtaWNSZXN1bHRzKSkpCi0gICAgICAgICAgICAgICAgYWRkQ2hpbGRSdWxlcyhtZWRpYVJ1bGUu
Y2hpbGRSdWxlcygpLCBtZWRpdW0sIHJlc29sdmVyLCBtZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMp
OwotICAgICAgICB9IGVsc2UgaWYgKGlzPFN0eWxlUnVsZUZvbnRGYWNlPigqcnVsZSkgJiYgcmVz
b2x2ZXIpIHsKKyAgICAgICAgICAgIGlmIChtZWRpYVF1ZXJ5Q29sbGVjdG9yLnB1c2hBbmRFdmFs
dWF0ZShtZWRpYVJ1bGUubWVkaWFRdWVyaWVzKCkpKSB7CisgICAgICAgICAgICAgICAgYWRkQ2hp
bGRSdWxlcyhtZWRpYVJ1bGUuY2hpbGRSdWxlcygpLCBtZWRpYVF1ZXJ5Q29sbGVjdG9yLCByZXNv
bHZlciwgbW9kZSk7CisgICAgICAgICAgICAgICAgbWVkaWFRdWVyeUNvbGxlY3Rvci5wb3AobWVk
aWFSdWxlLm1lZGlhUXVlcmllcygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisgICAgICAgIGlmIChpczxTdHlsZVJ1bGVGb250RmFjZT4oKnJ1bGUp
KSB7CiAgICAgICAgICAgICAvLyBBZGQgdGhpcyBmb250IGZhY2UgdG8gb3VyIHNldC4KLSAgICAg
ICAgICAgIHJlc29sdmVyLT5kb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpLmFkZEZvbnRGYWNlUnVs
ZShkb3duY2FzdDxTdHlsZVJ1bGVGb250RmFjZT4oKnJ1bGUuZ2V0KCkpLCBmYWxzZSk7Ci0gICAg
ICAgICAgICByZXNvbHZlci0+aW52YWxpZGF0ZU1hdGNoZWREZWNsYXJhdGlvbnNDYWNoZSgpOwot
ICAgICAgICB9IGVsc2UgaWYgKGlzPFN0eWxlUnVsZUtleWZyYW1lcz4oKnJ1bGUpICYmIHJlc29s
dmVyKQotICAgICAgICAgICAgcmVzb2x2ZXItPmFkZEtleWZyYW1lU3R5bGUoZG93bmNhc3Q8U3R5
bGVSdWxlS2V5ZnJhbWVzPigqcnVsZSkpOwotICAgICAgICBlbHNlIGlmIChpczxTdHlsZVJ1bGVT
dXBwb3J0cz4oKnJ1bGUpICYmIGRvd25jYXN0PFN0eWxlUnVsZVN1cHBvcnRzPigqcnVsZSkuY29u
ZGl0aW9uSXNTdXBwb3J0ZWQoKSkKLSAgICAgICAgICAgIGFkZENoaWxkUnVsZXMoZG93bmNhc3Q8
U3R5bGVSdWxlU3VwcG9ydHM+KCpydWxlKS5jaGlsZFJ1bGVzKCksIG1lZGl1bSwgcmVzb2x2ZXIs
IG1lZGlhUXVlcnlEeW5hbWljUmVzdWx0cyk7CisgICAgICAgICAgICBpZiAocmVzb2x2ZXIpIHsK
KyAgICAgICAgICAgICAgICByZXNvbHZlci0+ZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKS5hZGRG
b250RmFjZVJ1bGUoZG93bmNhc3Q8U3R5bGVSdWxlRm9udEZhY2U+KCpydWxlLmdldCgpKSwgZmFs
c2UpOworICAgICAgICAgICAgICAgIHJlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hlZERlY2xhcmF0
aW9uc0NhY2hlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZWRpYVF1ZXJ5Q29sbGVj
dG9yLmRpZE11dGF0ZVJlc29sdmVyKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoaXM8U3R5bGVSdWxlS2V5ZnJhbWVzPigqcnVsZSkpIHsKKyAgICAgICAg
ICAgIGlmIChyZXNvbHZlcikKKyAgICAgICAgICAgICAgICByZXNvbHZlci0+YWRkS2V5ZnJhbWVT
dHlsZShkb3duY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXM+KCpydWxlKSk7CisgICAgICAgICAgICBt
ZWRpYVF1ZXJ5Q29sbGVjdG9yLmRpZE11dGF0ZVJlc29sdmVyKCk7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXM8U3R5bGVSdWxlU3VwcG9ydHM+KCpydWxl
KSAmJiBkb3duY2FzdDxTdHlsZVJ1bGVTdXBwb3J0cz4oKnJ1bGUpLmNvbmRpdGlvbklzU3VwcG9y
dGVkKCkpIHsKKyAgICAgICAgICAgIGFkZENoaWxkUnVsZXMoZG93bmNhc3Q8U3R5bGVSdWxlU3Vw
cG9ydHM+KCpydWxlKS5jaGlsZFJ1bGVzKCksIG1lZGlhUXVlcnlDb2xsZWN0b3IsIHJlc29sdmVy
LCBtb2RlKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAjaWYgRU5BQkxFKENT
U19ERVZJQ0VfQURBUFRBVElPTikKLSAgICAgICAgZWxzZSBpZiAoaXM8U3R5bGVSdWxlVmlld3Bv
cnQ+KCpydWxlKSAmJiByZXNvbHZlcikKLSAgICAgICAgICAgIHJlc29sdmVyLT52aWV3cG9ydFN0
eWxlUmVzb2x2ZXIoKS0+YWRkVmlld3BvcnRSdWxlKGRvd25jYXN0PFN0eWxlUnVsZVZpZXdwb3J0
PihydWxlLmdldCgpKSk7CisgICAgICAgIGlmIChpczxTdHlsZVJ1bGVWaWV3cG9ydD4oKnJ1bGUp
KSB7CisgICAgICAgICAgICBpZiAocmVzb2x2ZXIpCisgICAgICAgICAgICAgICAgcmVzb2x2ZXIt
PnZpZXdwb3J0U3R5bGVSZXNvbHZlcigpLT5hZGRWaWV3cG9ydFJ1bGUoZG93bmNhc3Q8U3R5bGVS
dWxlVmlld3BvcnQ+KHJ1bGUuZ2V0KCkpKTsKKyAgICAgICAgICAgIG1lZGlhUXVlcnlDb2xsZWN0
b3IuZGlkTXV0YXRlUmVzb2x2ZXIoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CiAjZW5kaWYKICAgICB9CiB9CiAKLXZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoU3R5
bGVTaGVldENvbnRlbnRzJiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgbWVkaWFR
dWVyeUV2YWx1YXRvciwgUmVzb2x2ZXIqIHJlc29sdmVyKQordm9pZCBSdWxlU2V0OjphZGRSdWxl
c0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVudHMmIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZh
bHVhdG9yJiBldmFsdWF0b3IpCiB7Ci0gICAgTWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzIG1lZGlh
UXVlcnlEeW5hbWljUmVzdWx0czsKKyAgICBhdXRvIG1lZGlhUXVlcnlDb2xsZWN0b3IgPSBNZWRp
YVF1ZXJ5Q29sbGVjdG9yIHsgZXZhbHVhdG9yIH07CisgICAgYWRkUnVsZXNGcm9tU2hlZXQoc2hl
ZXQsIG1lZGlhUXVlcnlDb2xsZWN0b3IsIG51bGxwdHIsIEFkZFJ1bGVzTW9kZTo6Tm9ybWFsKTsK
K30KIAordm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVudHMm
IHNoZWV0LCBNZWRpYVF1ZXJ5U2V0KiBzaGVldFF1ZXJ5LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVh
dG9yJiBldmFsdWF0b3IsIFN0eWxlOjpSZXNvbHZlciYgcmVzb2x2ZXIpCit7CisgICAgYXV0byBj
YW5Vc2VEeW5hbWljTWVkaWFRdWVyeVJlc29sdXRpb24gPSBbJl0geworICAgICAgICBhdXRvIG1l
ZGlhUXVlcnlDb2xsZWN0b3IgPSBNZWRpYVF1ZXJ5Q29sbGVjdG9yIHsgZXZhbHVhdG9yLCB0cnVl
IH07CisgICAgICAgIGlmIChtZWRpYVF1ZXJ5Q29sbGVjdG9yLnB1c2hBbmRFdmFsdWF0ZShzaGVl
dFF1ZXJ5KSkgeworICAgICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQsIG1lZGlhUXVl
cnlDb2xsZWN0b3IsIG51bGxwdHIsIEFkZFJ1bGVzTW9kZTo6UmVzb2x2ZXJNdXRhdGlvblNjYW4p
OworICAgICAgICAgICAgcmV0dXJuICFtZWRpYVF1ZXJ5Q29sbGVjdG9yLmRpZE11dGF0ZVJlc29s
dmVyV2l0aGluRHluYW1pY01lZGlhUXVlcnk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfSgpOworCisgICAgYXV0byBtZWRpYVF1ZXJ5Q29sbGVjdG9yID0gTWVkaWFRdWVy
eUNvbGxlY3RvciB7IGV2YWx1YXRvciwgY2FuVXNlRHluYW1pY01lZGlhUXVlcnlSZXNvbHV0aW9u
IH07CisKKyAgICBpZiAobWVkaWFRdWVyeUNvbGxlY3Rvci5wdXNoQW5kRXZhbHVhdGUoc2hlZXRR
dWVyeSkpIHsKKyAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQsIG1lZGlhUXVlcnlDb2xs
ZWN0b3IsICZyZXNvbHZlciwgQWRkUnVsZXNNb2RlOjpOb3JtYWwpOworICAgICAgICBtZWRpYVF1
ZXJ5Q29sbGVjdG9yLnBvcChzaGVldFF1ZXJ5KTsKKyAgICB9CisKKyAgICBtX2R5bmFtaWNNZWRp
YVF1ZXJ5UnVsZXMuYXBwZW5kVmVjdG9yKFdURk1vdmUobWVkaWFRdWVyeUNvbGxlY3Rvci5keW5h
bWljTWVkaWFRdWVyeVJ1bGVzKSk7CisKKyAgICBldmFsdXRlRHluYW1pY01lZGlhUXVlcnlSdWxl
cyhldmFsdWF0b3IpOworfQorCit2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxl
U2hlZXRDb250ZW50cyYgc2hlZXQsIE1lZGlhUXVlcnlDb2xsZWN0b3ImIG1lZGlhUXVlcnlDb2xs
ZWN0b3IsIFJlc29sdmVyKiByZXNvbHZlciwgQWRkUnVsZXNNb2RlIG1vZGUpCit7CiAgICAgZm9y
IChhdXRvJiBydWxlIDogc2hlZXQuaW1wb3J0UnVsZXMoKSkgewogICAgICAgICBpZiAoIXJ1bGUt
PnN0eWxlU2hlZXQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAocnVsZS0+
bWVkaWFRdWVyaWVzKCkgJiYgIW1lZGlhUXVlcnlFdmFsdWF0b3IuZXZhbHVhdGUoKnJ1bGUtPm1l
ZGlhUXVlcmllcygpLCAmbWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBhZGRSdWxlc0Zyb21TaGVldCgqcnVsZS0+c3R5bGVTaGVldCgpLCBt
ZWRpYVF1ZXJ5RXZhbHVhdG9yLCByZXNvbHZlcik7Ci0gICAgfQogCi0gICAgYWRkQ2hpbGRSdWxl
cyhzaGVldC5jaGlsZFJ1bGVzKCksIG1lZGlhUXVlcnlFdmFsdWF0b3IsIHJlc29sdmVyLCBtZWRp
YVF1ZXJ5RHluYW1pY1Jlc3VsdHMpOworICAgICAgICBpZiAobWVkaWFRdWVyeUNvbGxlY3Rvci5w
dXNoQW5kRXZhbHVhdGUocnVsZS0+bWVkaWFRdWVyaWVzKCkpKSB7CisgICAgICAgICAgICBhZGRS
dWxlc0Zyb21TaGVldCgqcnVsZS0+c3R5bGVTaGVldCgpLCBtZWRpYVF1ZXJ5Q29sbGVjdG9yLCBy
ZXNvbHZlciwgbW9kZSk7CisgICAgICAgICAgICBtZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcChydWxl
LT5tZWRpYVF1ZXJpZXMoKSk7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBpZiAocmVzb2x2ZXIp
Ci0gICAgICAgIHJlc29sdmVyLT5hZGRNZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMobWVkaWFRdWVy
eUR5bmFtaWNSZXN1bHRzKTsKKyAgICBhZGRDaGlsZFJ1bGVzKHNoZWV0LmNoaWxkUnVsZXMoKSwg
bWVkaWFRdWVyeUNvbGxlY3RvciwgcmVzb2x2ZXIsIG1vZGUpOwogCi0gICAgaWYgKG1fYXV0b1No
cmlua1RvRml0RW5hYmxlZCkKKyAgICBpZiAobV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkICYmIG1v
ZGUgPT0gQWRkUnVsZXNNb2RlOjpOb3JtYWwpCiAgICAgICAgIHNocmlua1RvRml0KCk7CiB9CiAK
LXZvaWQgUnVsZVNldDo6YWRkU3R5bGVSdWxlKFN0eWxlUnVsZSogcnVsZSkKK3ZvaWQgUnVsZVNl
dDo6YWRkU3R5bGVSdWxlKFN0eWxlUnVsZSYgcnVsZSwgTWVkaWFRdWVyeUNvbGxlY3RvciYgbWVk
aWFRdWVyeUNvbGxlY3RvcikKIHsKICAgICB1bnNpZ25lZCBzZWxlY3Rvckxpc3RJbmRleCA9IDA7
Ci0gICAgZm9yIChzaXplX3Qgc2VsZWN0b3JJbmRleCA9IDA7IHNlbGVjdG9ySW5kZXggIT0gbm90
Rm91bmQ7IHNlbGVjdG9ySW5kZXggPSBydWxlLT5zZWxlY3Rvckxpc3QoKS5pbmRleE9mTmV4dFNl
bGVjdG9yQWZ0ZXIoc2VsZWN0b3JJbmRleCkpCi0gICAgICAgIGFkZFJ1bGUocnVsZSwgc2VsZWN0
b3JJbmRleCwgc2VsZWN0b3JMaXN0SW5kZXgrKyk7CisgICAgZm9yIChzaXplX3Qgc2VsZWN0b3JJ
bmRleCA9IDA7IHNlbGVjdG9ySW5kZXggIT0gbm90Rm91bmQ7IHNlbGVjdG9ySW5kZXggPSBydWxl
LnNlbGVjdG9yTGlzdCgpLmluZGV4T2ZOZXh0U2VsZWN0b3JBZnRlcihzZWxlY3RvckluZGV4KSkg
eworICAgICAgICBtZWRpYVF1ZXJ5Q29sbGVjdG9yLmFkZFJ1bGVJbmRleElmTmVlZGVkKG1fcnVs
ZUNvdW50KTsKKyAgICAgICAgYWRkUnVsZSgmcnVsZSwgc2VsZWN0b3JJbmRleCwgc2VsZWN0b3JM
aXN0SW5kZXgrKyk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvbj4KK3Zv
aWQgUnVsZVNldDo6dHJhdmVyc2VSdWxlRGF0YXMoRnVuY3Rpb24mJiBmdW5jdGlvbikKK3sKKyAg
ICBhdXRvIHRyYXZlcnNlVmVjdG9yID0gWyZdKGF1dG8mIHZlY3RvcikgeworICAgICAgICBmb3Ig
KGF1dG8mIHJ1bGVEYXRhIDogdmVjdG9yKQorICAgICAgICAgICAgZnVuY3Rpb24ocnVsZURhdGEp
OworICAgIH07CisKKyAgICBhdXRvIHRyYXZlcnNlTWFwID0gWyZdKGF1dG8mIG1hcCkgeworICAg
ICAgICBmb3IgKGF1dG8mIHJ1bGVEYXRhcyA6IG1hcC52YWx1ZXMoKSkKKyAgICAgICAgICAgIHRy
YXZlcnNlVmVjdG9yKCpydWxlRGF0YXMpOworICAgIH07CisKKyAgICB0cmF2ZXJzZU1hcChtX2lk
UnVsZXMpOworICAgIHRyYXZlcnNlTWFwKG1fY2xhc3NSdWxlcyk7CisgICAgdHJhdmVyc2VNYXAo
bV90YWdMb2NhbE5hbWVSdWxlcyk7CisgICAgdHJhdmVyc2VNYXAobV90YWdMb3dlcmNhc2VMb2Nh
bE5hbWVSdWxlcyk7CisgICAgdHJhdmVyc2VNYXAobV9zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMp
OworICAgIHRyYXZlcnNlVmVjdG9yKG1fbGlua1BzZXVkb0NsYXNzUnVsZXMpOworI2lmIEVOQUJM
RShWSURFT19UUkFDSykKKyAgICB0cmF2ZXJzZVZlY3RvcihtX2N1ZVBzZXVkb1J1bGVzKTsKKyNl
bmRpZgorICAgIHRyYXZlcnNlVmVjdG9yKG1faG9zdFBzZXVkb0NsYXNzUnVsZXMpOworICAgIHRy
YXZlcnNlVmVjdG9yKG1fc2xvdHRlZFBzZXVkb0VsZW1lbnRSdWxlcyk7CisgICAgdHJhdmVyc2VW
ZWN0b3IobV9wYXJ0UHNldWRvRWxlbWVudFJ1bGVzKTsKKyAgICB0cmF2ZXJzZVZlY3RvcihtX2Zv
Y3VzUHNldWRvQ2xhc3NSdWxlcyk7CisgICAgdHJhdmVyc2VWZWN0b3IobV91bml2ZXJzYWxSdWxl
cyk7Cit9CisKK2Jvb2wgUnVsZVNldDo6ZXZhbHV0ZUR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMoY29u
c3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgZXZhbHVhdG9yKQoreworICAgIGJvb2wgY2hhbmdlcyA9
IGZhbHNlOworICAgIGZvciAoYXV0byYgZHluYW1pY1J1bGVzIDogbV9keW5hbWljTWVkaWFRdWVy
eVJ1bGVzKSB7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgZm9yIChhdXRv
JiBzZXQgOiBkeW5hbWljUnVsZXMubWVkaWFRdWVyeVNldHMpIHsKKyAgICAgICAgICAgIGlmICgh
ZXZhbHVhdG9yLmV2YWx1YXRlKHNldC5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGlmIChyZXN1bHQgIT0gZHluYW1pY1J1bGVzLnJlc3VsdCkgeworICAgICAg
ICAgICAgZHluYW1pY1J1bGVzLnJlc3VsdCA9IHJlc3VsdDsKKworICAgICAgICAgICAgdHJhdmVy
c2VSdWxlRGF0YXMoWyZdKFJ1bGVEYXRhJiBydWxlRGF0YSkgeworICAgICAgICAgICAgICAgIGlm
ICghZHluYW1pY1J1bGVzLmFmZmVjdGVkUnVsZUluZGV4ZXMuY29udGFpbnMocnVsZURhdGEucG9z
aXRpb24oKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBy
dWxlRGF0YS5zZXRFbmFibGVkKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgY2hhbmdlcyA9IHRy
dWU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBjaGFu
Z2VzOwogfQogCiBib29sIFJ1bGVTZXQ6Omhhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcygpIGNv
bnN0CkBAIC0zNTUsNSArNDY3LDU4IEBAIHZvaWQgUnVsZVNldDo6c2hyaW5rVG9GaXQoKQogICAg
IG1fZmVhdHVyZXMuc2hyaW5rVG9GaXQoKTsKIH0KIAorUnVsZVNldDo6TWVkaWFRdWVyeUNvbGxl
Y3Rvcjo6fk1lZGlhUXVlcnlDb2xsZWN0b3IoKSA9IGRlZmF1bHQ7CisKK2Jvb2wgUnVsZVNldDo6
TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cHVzaEFuZEV2YWx1YXRlKE1lZGlhUXVlcnlTZXQqIHNldCkK
K3sKKyAgICBpZiAoIXNldCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBPbmx5IGV2
YWx1YXRlIHN0YXRpYyBleHByZXNzaW9ucyB0aGF0IHJlcXVpcmUgc3R5bGUgcmVidWlsZC4KKyAg
ICBNZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMgcmVzdWx0czsKKyAgICBhdXRvIG1vZGUgPSBjb2xs
ZWN0RHluYW1pYyA/IE1lZGlhUXVlcnlFdmFsdWF0b3I6Ok1vZGU6OkFsd2F5c01hdGNoRHluYW1p
YyA6IE1lZGlhUXVlcnlFdmFsdWF0b3I6Ok1vZGU6Ok5vcm1hbDsKKyAgICBpZiAoIWV2YWx1YXRv
ci5ldmFsdWF0ZSgqc2V0LCAmcmVzdWx0cywgbW9kZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmICghcmVzdWx0cy5pc0VtcHR5KCkpCisgICAgICAgIGR5bmFtaWNDb250ZXh0U3Rh
Y2suYXBwZW5kKHsgKnNldCB9KTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJ1bGVT
ZXQ6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OnBvcChNZWRpYVF1ZXJ5U2V0KiBzZXQpCit7CisgICAg
aWYgKCFzZXQgfHwgZHluYW1pY0NvbnRleHRTdGFjay5pc0VtcHR5KCkgfHwgc2V0ICE9ICZkeW5h
bWljQ29udGV4dFN0YWNrLmxhc3QoKS5zZXQuZ2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghZHluYW1pY0NvbnRleHRTdGFjay5sYXN0KCkuYWZmZWN0ZWRSdWxlSW5kZXhlcy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgRHluYW1pY01lZGlhUXVlcnlSdWxlcyBydWxlczsKKyAgICAgICAg
Zm9yIChhdXRvJiBjb250ZXh0IDogZHluYW1pY0NvbnRleHRTdGFjaykKKyAgICAgICAgICAgIHJ1
bGVzLm1lZGlhUXVlcnlTZXRzLmFwcGVuZChjb250ZXh0LnNldC5nZXQoKSk7CisKKyAgICAgICAg
YXV0byYgdG9BZGQgPSBkeW5hbWljQ29udGV4dFN0YWNrLmxhc3QoKS5hZmZlY3RlZFJ1bGVJbmRl
eGVzOworICAgICAgICBydWxlcy5hZmZlY3RlZFJ1bGVJbmRleGVzLmFkZCh0b0FkZC5iZWdpbigp
LCB0b0FkZC5lbmQoKSk7CisKKyAgICAgICAgZHluYW1pY01lZGlhUXVlcnlSdWxlcy5hcHBlbmQo
V1RGTW92ZShydWxlcykpOworICAgIH0KKworICAgIGR5bmFtaWNDb250ZXh0U3RhY2sucmVtb3Zl
TGFzdCgpOworfQorCit2b2lkIFJ1bGVTZXQ6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OmRpZE11dGF0
ZVJlc29sdmVyKCkKK3sKKyAgICBpZiAoZHluYW1pY0NvbnRleHRTdGFjay5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBkaWRNdXRhdGVSZXNvbHZlcldpdGhpbkR5bmFtaWNNZWRpYVF1
ZXJ5ID0gdHJ1ZTsKK30KKwordm9pZCBSdWxlU2V0OjpNZWRpYVF1ZXJ5Q29sbGVjdG9yOjphZGRS
dWxlSW5kZXhJZk5lZWRlZChzaXplX3QgaW5kZXgpCit7CisgICAgaWYgKGR5bmFtaWNDb250ZXh0
U3RhY2suaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgZHluYW1pY0NvbnRleHRTdGFj
ay5sYXN0KCkuYWZmZWN0ZWRSdWxlSW5kZXhlcy5hcHBlbmQoaW5kZXgpOworfQorCisKIH0gLy8g
bmFtZXNwYWNlIFN0eWxlCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0
LmgKaW5kZXggOGNmZTVjYmI1ZmYuLmUzY2YwNDM0OTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9SdWxlU2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5o
CkBAIC0yMSw2ICsyMSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiTWVkaWFMaXN0
LmgiCiAjaW5jbHVkZSAiUnVsZURhdGEuaCIKICNpbmNsdWRlICJSdWxlRmVhdHVyZS5oIgogI2lu
Y2x1ZGUgIlNlbGVjdG9yQ29tcGlsZXIuaCIKQEAgLTM1LDcgKzM2LDYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgQ1NTU2VsZWN0b3I7CiBjbGFzcyBNZWRpYVF1ZXJ5RXZhbHVhdG9yOwog
Y2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwotc3RydWN0IE1lZGlhUXVlcnlEeW5hbWljUmVzdWx0
czsKIAogbmFtZXNwYWNlIFN0eWxlIHsKIApAQCAtNjIsMTUgKzYyLDQ1IEBAIHB1YmxpYzoKICAg
ICB0eXBlZGVmIFZlY3RvcjxSdWxlRGF0YSwgMT4gUnVsZURhdGFWZWN0b3I7CiAgICAgdHlwZWRl
ZiBIYXNoTWFwPEF0b21TdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxSdWxlRGF0YVZlY3Rvcj4+IEF0
b21SdWxlTWFwOwogCi0gICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVu
dHMmLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgU3R5bGU6OlJlc29sdmVyKiA9IG51bGxw
dHIpOworICAgIHN0cnVjdCBEeW5hbWljTWVkaWFRdWVyeVJ1bGVzIHsKKyAgICAgICAgVmVjdG9y
PFJlZjxNZWRpYVF1ZXJ5U2V0Pj4gbWVkaWFRdWVyeVNldHM7CisgICAgICAgIEhhc2hTZXQ8c2l6
ZV90LCBEZWZhdWx0SGFzaDxzaXplX3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlI
YXNoVHJhaXRzPHNpemVfdD4+IGFmZmVjdGVkUnVsZUluZGV4ZXM7CisgICAgICAgIGJvb2wgcmVz
dWx0IHsgdHJ1ZSB9OworICAgIH07CisKKyAgICBzdHJ1Y3QgTWVkaWFRdWVyeUNvbGxlY3RvciB7
CisgICAgICAgIH5NZWRpYVF1ZXJ5Q29sbGVjdG9yKCk7CisKKyAgICAgICAgY29uc3QgTWVkaWFR
dWVyeUV2YWx1YXRvciYgZXZhbHVhdG9yOworICAgICAgICBjb25zdCBib29sIGNvbGxlY3REeW5h
bWljIHsgZmFsc2UgfTsKKworICAgICAgICBzdHJ1Y3QgRHluYW1pY0NvbnRleHQgeworICAgICAg
ICAgICAgUmVmPE1lZGlhUXVlcnlTZXQ+IHNldDsKKyAgICAgICAgICAgIFZlY3RvcjxzaXplX3Q+
IGFmZmVjdGVkUnVsZUluZGV4ZXMgeyB9OworICAgICAgICB9OworICAgICAgICBWZWN0b3I8RHlu
YW1pY0NvbnRleHQ+IGR5bmFtaWNDb250ZXh0U3RhY2sgeyB9OworCisgICAgICAgIFZlY3RvcjxE
eW5hbWljTWVkaWFRdWVyeVJ1bGVzPiBkeW5hbWljTWVkaWFRdWVyeVJ1bGVzIHsgfTsKKyAgICAg
ICAgYm9vbCBkaWRNdXRhdGVSZXNvbHZlcldpdGhpbkR5bmFtaWNNZWRpYVF1ZXJ5IHsgZmFsc2Ug
fTsKIAotICAgIHZvaWQgYWRkU3R5bGVSdWxlKFN0eWxlUnVsZSopOworICAgICAgICBib29sIHB1
c2hBbmRFdmFsdWF0ZShNZWRpYVF1ZXJ5U2V0Kik7CisgICAgICAgIHZvaWQgcG9wKE1lZGlhUXVl
cnlTZXQqKTsKKyAgICAgICAgdm9pZCBkaWRNdXRhdGVSZXNvbHZlcigpOworICAgICAgICB2b2lk
IGFkZFJ1bGVJbmRleElmTmVlZGVkKHNpemVfdCk7CisgICAgfTsKKworICAgIHZvaWQgYWRkUnVs
ZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzJiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRv
ciYpOworICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzJiwgTWVk
aWFRdWVyeVNldCogc2hlZXRRdWVyeSwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYsIFN0eWxl
OjpSZXNvbHZlciYpOworCisgICAgdm9pZCBhZGRTdHlsZVJ1bGUoU3R5bGVSdWxlJiwgTWVkaWFR
dWVyeUNvbGxlY3RvciYpOwogICAgIHZvaWQgYWRkUnVsZShTdHlsZVJ1bGUqLCB1bnNpZ25lZCBz
ZWxlY3RvckluZGV4LCB1bnNpZ25lZCBzZWxlY3Rvckxpc3RJbmRleCk7Ci0gICAgdm9pZCBhZGRQ
YWdlUnVsZShTdHlsZVJ1bGVQYWdlKik7CisgICAgdm9pZCBhZGRQYWdlUnVsZShTdHlsZVJ1bGVQ
YWdlJik7CiAgICAgdm9pZCBhZGRUb1J1bGVTZXQoY29uc3QgQXRvbVN0cmluZyYga2V5LCBBdG9t
UnVsZU1hcCYsIGNvbnN0IFJ1bGVEYXRhJik7CiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwogICAg
IHZvaWQgZGlzYWJsZUF1dG9TaHJpbmtUb0ZpdCgpIHsgbV9hdXRvU2hyaW5rVG9GaXRFbmFibGVk
ID0gZmFsc2U7IH0KIAorICAgIGJvb2wgZXZhbHV0ZUR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMoY29u
c3QgTWVkaWFRdWVyeUV2YWx1YXRvciYpOworCiAgICAgY29uc3QgUnVsZUZlYXR1cmVTZXQmIGZl
YXR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlczsgfQogCiAgICAgY29uc3QgUnVsZURh
dGFWZWN0b3IqIGlkUnVsZXMoY29uc3QgQXRvbVN0cmluZyYga2V5KSBjb25zdCB7IHJldHVybiBt
X2lkUnVsZXMuZ2V0KGtleSk7IH0KQEAgLTk1LDcgKzEyNSwxMSBAQCBwdWJsaWM6CiAgICAgYm9v
bCBoYXNIb3N0UHNldWRvQ2xhc3NSdWxlc01hdGNoaW5nSW5TaGFkb3dUcmVlKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXNIb3N0UHNldWRvQ2xhc3NSdWxlc01hdGNoaW5nSW5TaGFkb3dUcmVlOyB9CiAK
IHByaXZhdGU6Ci0gICAgdm9pZCBhZGRDaGlsZFJ1bGVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5
bGVSdWxlQmFzZT4+JiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgbWVkaXVtLCBTdHlsZTo6
UmVzb2x2ZXIqLCBNZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMmKTsKKyAgICBlbnVtIGNsYXNzIEFk
ZFJ1bGVzTW9kZSB7IE5vcm1hbCwgUmVzb2x2ZXJNdXRhdGlvblNjYW4gfTsKKyAgICB2b2lkIGFk
ZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyYsIE1lZGlhUXVlcnlDb2xsZWN0b3Im
LCBTdHlsZTo6UmVzb2x2ZXIqLCBBZGRSdWxlc01vZGUpOworICAgIHZvaWQgYWRkQ2hpbGRSdWxl
cyhjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiYsIE1lZGlhUXVlcnlDb2xsZWN0
b3ImLCBTdHlsZTo6UmVzb2x2ZXIqLCBBZGRSdWxlc01vZGUpOworCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rpb24+IHZvaWQgdHJhdmVyc2VSdWxlRGF0YXMoRnVuY3Rpb24mJik7CiAKICAg
ICBBdG9tUnVsZU1hcCBtX2lkUnVsZXM7CiAgICAgQXRvbVJ1bGVNYXAgbV9jbGFzc1J1bGVzOwpA
QCAtMTE2LDYgKzE1MCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc0hvc3RQc2V1ZG9DbGFz
c1J1bGVzTWF0Y2hpbmdJblNoYWRvd1RyZWUgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9hdXRvU2hy
aW5rVG9GaXRFbmFibGVkIHsgdHJ1ZSB9OwogICAgIFJ1bGVGZWF0dXJlU2V0IG1fZmVhdHVyZXM7
CisgICAgVmVjdG9yPER5bmFtaWNNZWRpYVF1ZXJ5UnVsZXM+IG1fZHluYW1pY01lZGlhUXVlcnlS
dWxlczsKIH07CiAKIGlubGluZSBjb25zdCBSdWxlU2V0OjpSdWxlRGF0YVZlY3RvciogUnVsZVNl
dDo6dGFnUnVsZXMoY29uc3QgQXRvbVN0cmluZyYga2V5LCBib29sIGlzSFRNTE5hbWUpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDg4ZDRkMWQzZjU0Li40
MGM4NTViODI5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTYw
MiwzOSArNjAyLDE5IEBAIHZvaWQgUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoU3Rh
dGUmIHN0YXRlLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1CiAgICAgICAgIG1fbWF0Y2hl
ZERlY2xhcmF0aW9uc0NhY2hlLmFkZChzdHlsZSwgcGFyZW50U3R5bGUsIGNhY2hlSGFzaCwgbWF0
Y2hSZXN1bHQpOwogfQogCi12b2lkIFJlc29sdmVyOjphZGRNZWRpYVF1ZXJ5RHluYW1pY1Jlc3Vs
dHMoY29uc3QgTWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzJiByZXN1bHRzKQorYm9vbCBSZXNvbHZl
cjo6ZXZhbHVhdGVNZWRpYVF1ZXJpZXNBZmZlY3RlZEJ5Vmlld3BvcnRDaGFuZ2UoKQogewotICAg
IG1fbWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzLmFwcGVuZChyZXN1bHRzKTsKKyAgICByZXR1cm4g
bV9ydWxlU2V0cy5ldmFsdXRlRHluYW1pY01lZGlhUXVlcnlSdWxlcyhtX21lZGlhUXVlcnlFdmFs
dWF0b3IpOwogfQogCi1ib29sIFJlc29sdmVyOjpoYXNNZWRpYVF1ZXJpZXNBZmZlY3RlZEJ5Vmll
d3BvcnRDaGFuZ2UoKSBjb25zdAorYm9vbCBSZXNvbHZlcjo6ZXZhbHVhdGVNZWRpYVF1ZXJpZXNB
ZmZlY3RlZEJ5QWNjZXNzaWJpbGl0eVNldHRpbmdzQ2hhbmdlKCkKIHsKLSAgICBMT0coTWVkaWFR
dWVyaWVzLCAiU3R5bGU6OlJlc29sdmVyOjpoYXNNZWRpYVF1ZXJpZXNBZmZlY3RlZEJ5Vmlld3Bv
cnRDaGFuZ2UgZXZhbHVhdGluZyBxdWVyaWVzIik7Ci0gICAgZm9yIChhdXRvJiByZXN1bHQgOiBt
X21lZGlhUXVlcnlEeW5hbWljUmVzdWx0cy52aWV3cG9ydCkgewotICAgICAgICBpZiAobV9tZWRp
YVF1ZXJ5RXZhbHVhdG9yLmV2YWx1YXRlKHJlc3VsdC5leHByZXNzaW9uKSAhPSByZXN1bHQucmVz
dWx0KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCBSZXNvbHZlcjo6aGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeUFjY2Vzc2liaWxp
dHlTZXR0aW5nc0NoYW5nZSgpIGNvbnN0Ci17Ci0gICAgTE9HKE1lZGlhUXVlcmllcywgIlN0eWxl
OjpSZXNvbHZlcjo6aGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeUFjY2Vzc2liaWxpdHlTZXR0aW5n
c0NoYW5nZSBldmFsdWF0aW5nIHF1ZXJpZXMiKTsKLSAgICBmb3IgKGF1dG8mIHJlc3VsdCA6IG1f
bWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzLmFjY2Vzc2liaWxpdHlTZXR0aW5ncykgewotICAgICAg
ICBpZiAobV9tZWRpYVF1ZXJ5RXZhbHVhdG9yLmV2YWx1YXRlKHJlc3VsdC5leHByZXNzaW9uKSAh
PSByZXN1bHQucmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9ydWxlU2V0cy5ldmFsdXRlRHluYW1pY01lZGlhUXVl
cnlSdWxlcyhtX21lZGlhUXVlcnlFdmFsdWF0b3IpOwogfQogCi1ib29sIFJlc29sdmVyOjpoYXNN
ZWRpYVF1ZXJpZXNBZmZlY3RlZEJ5QXBwZWFyYW5jZUNoYW5nZSgpIGNvbnN0Citib29sIFJlc29s
dmVyOjpldmFsdWF0ZU1lZGlhUXVlcmllc0FmZmVjdGVkQnlBcHBlYXJhbmNlQ2hhbmdlKCkKIHsK
LSAgICBMT0coTWVkaWFRdWVyaWVzLCAiU3R5bGU6OlJlc29sdmVyOjpoYXNNZWRpYVF1ZXJpZXNB
ZmZlY3RlZEJ5QXBwZWFyYW5jZUNoYW5nZSBldmFsdWF0aW5nIHF1ZXJpZXMiKTsKLSAgICBmb3Ig
KGF1dG8mIHJlc3VsdCA6IG1fbWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzLmFwcGVhcmFuY2UpIHsK
LSAgICAgICAgaWYgKG1fbWVkaWFRdWVyeUV2YWx1YXRvci5ldmFsdWF0ZShyZXN1bHQuZXhwcmVz
c2lvbikgIT0gcmVzdWx0LnJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fcnVsZVNldHMuZXZhbHV0ZUR5bmFtaWNN
ZWRpYVF1ZXJ5UnVsZXMobV9tZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgU3R5bGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZXIuaAppbmRleCBlN2UzZjc3MDFl
NS4uZTAxZjBiZjBlMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVz
b2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVyLmgKQEAgLTEz
MSwxNSArMTMxLDkgQEAgcHVibGljOgogICAgIFZpZXdwb3J0U3R5bGVSZXNvbHZlciogdmlld3Bv
cnRTdHlsZVJlc29sdmVyKCkgeyByZXR1cm4gbV92aWV3cG9ydFN0eWxlUmVzb2x2ZXIuZ2V0KCk7
IH0KICNlbmRpZgogCi0gICAgdm9pZCBhZGRNZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMoY29uc3Qg
TWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzJik7Ci0gICAgYm9vbCBoYXNWaWV3cG9ydERlcGVuZGVu
dE1lZGlhUXVlcmllcygpIGNvbnN0IHsgcmV0dXJuICFtX21lZGlhUXVlcnlEeW5hbWljUmVzdWx0
cy52aWV3cG9ydC5pc0VtcHR5KCk7IH0KLSAgICBib29sIGhhc01lZGlhUXVlcmllc0FmZmVjdGVk
QnlWaWV3cG9ydENoYW5nZSgpIGNvbnN0OwotCi0gICAgYm9vbCBoYXNBY2Nlc3NpYmlsaXR5U2V0
dGluZ3NEZXBlbmRlbnRNZWRpYVF1ZXJpZXMoKSBjb25zdCB7IHJldHVybiAhbV9tZWRpYVF1ZXJ5
RHluYW1pY1Jlc3VsdHMuYWNjZXNzaWJpbGl0eVNldHRpbmdzLmlzRW1wdHkoKTsgfQotICAgIGJv
b2wgaGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeUFjY2Vzc2liaWxpdHlTZXR0aW5nc0NoYW5nZSgp
IGNvbnN0OwotCi0gICAgYm9vbCBoYXNBcHBlYXJhbmNlRGVwZW5kZW50TWVkaWFRdWVyaWVzKCkg
Y29uc3QgeyByZXR1cm4gIW1fbWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzLmFwcGVhcmFuY2UuaXNF
bXB0eSgpOyB9Ci0gICAgYm9vbCBoYXNNZWRpYVF1ZXJpZXNBZmZlY3RlZEJ5QXBwZWFyYW5jZUNo
YW5nZSgpIGNvbnN0OworICAgIGJvb2wgZXZhbHVhdGVNZWRpYVF1ZXJpZXNBZmZlY3RlZEJ5Vmll
d3BvcnRDaGFuZ2UoKTsKKyAgICBib29sIGV2YWx1YXRlTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeUFj
Y2Vzc2liaWxpdHlTZXR0aW5nc0NoYW5nZSgpOworICAgIGJvb2wgZXZhbHVhdGVNZWRpYVF1ZXJp
ZXNBZmZlY3RlZEJ5QXBwZWFyYW5jZUNoYW5nZSgpOwogCiAgICAgdm9pZCBhZGRLZXlmcmFtZVN0
eWxlKFJlZjxTdHlsZVJ1bGVLZXlmcmFtZXM+JiYpOwogCkBAIC0yMDAsOCArMTk0LDYgQEAgcHJp
dmF0ZToKIAogICAgIFJlbmRlclN0eWxlKiBtX292ZXJyaWRlRG9jdW1lbnRFbGVtZW50U3R5bGUg
eyBudWxscHRyIH07CiAKLSAgICBNZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMgbV9tZWRpYVF1ZXJ5
RHluYW1pY1Jlc3VsdHM7Ci0KICNpZiBFTkFCTEUoQ1NTX0RFVklDRV9BREFQVEFUSU9OKQogICAg
IFJlZlB0cjxWaWV3cG9ydFN0eWxlUmVzb2x2ZXI+IG1fdmlld3BvcnRTdHlsZVJlc29sdmVyOwog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUuY3BwCmluZGV4IDNjOWZkODhhMmNiLi4w
OTg3ODA4MzJjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5jcHAKQEAgLTYyMiwyMSAr
NjIyLDIxIEBAIHZvaWQgU2NvcGU6OnNjaGVkdWxlVXBkYXRlKFVwZGF0ZVR5cGUgdXBkYXRlKQog
dm9pZCBTY29wZTo6ZXZhbHVhdGVNZWRpYVF1ZXJpZXNGb3JWaWV3cG9ydENoYW5nZSgpCiB7CiAg
ICAgZXZhbHVhdGVNZWRpYVF1ZXJpZXMoW10gKFJlc29sdmVyJiByZXNvbHZlcikgewotICAgICAg
ICByZXR1cm4gcmVzb2x2ZXIuaGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeVZpZXdwb3J0Q2hhbmdl
KCk7CisgICAgICAgIHJldHVybiByZXNvbHZlci5ldmFsdWF0ZU1lZGlhUXVlcmllc0FmZmVjdGVk
QnlWaWV3cG9ydENoYW5nZSgpOwogICAgIH0pOwogfQogCiB2b2lkIFNjb3BlOjpldmFsdWF0ZU1l
ZGlhUXVlcmllc0ZvckFjY2Vzc2liaWxpdHlTZXR0aW5nc0NoYW5nZSgpCiB7CiAgICAgZXZhbHVh
dGVNZWRpYVF1ZXJpZXMoW10gKFJlc29sdmVyJiByZXNvbHZlcikgewotICAgICAgICByZXR1cm4g
cmVzb2x2ZXIuaGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeUFjY2Vzc2liaWxpdHlTZXR0aW5nc0No
YW5nZSgpOworICAgICAgICByZXR1cm4gcmVzb2x2ZXIuZXZhbHVhdGVNZWRpYVF1ZXJpZXNBZmZl
Y3RlZEJ5QWNjZXNzaWJpbGl0eVNldHRpbmdzQ2hhbmdlKCk7CiAgICAgfSk7CiB9CiAKIHZvaWQg
U2NvcGU6OmV2YWx1YXRlTWVkaWFRdWVyaWVzRm9yQXBwZWFyYW5jZUNoYW5nZSgpCiB7CiAgICAg
ZXZhbHVhdGVNZWRpYVF1ZXJpZXMoW10gKFJlc29sdmVyJiByZXNvbHZlcikgewotICAgICAgICBy
ZXR1cm4gcmVzb2x2ZXIuaGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeUFwcGVhcmFuY2VDaGFuZ2Uo
KTsKKyAgICAgICAgcmV0dXJuIHJlc29sdmVyLmV2YWx1YXRlTWVkaWFRdWVyaWVzQWZmZWN0ZWRC
eUFwcGVhcmFuY2VDaGFuZ2UoKTsKICAgICB9KTsKIH0KIApAQCAtNjUyLDcgKzY1MiwxMSBAQCB2
b2lkIFNjb3BlOjpldmFsdWF0ZU1lZGlhUXVlcmllcyhUZXN0RnVuY3Rpb24mJiB0ZXN0RnVuY3Rp
b24pCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXRlc3RGdW5jdGlvbigqcmVzb2x2ZXIpKQog
ICAgICAgICByZXR1cm47Ci0gICAgc2NoZWR1bGVVcGRhdGUoVXBkYXRlVHlwZTo6Q29udGVudHNP
ckludGVycHJldGF0aW9uKTsKKworICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBoYXZlIGFuIGludmFs
aWRhdGlvbiBydWxlc2V0IGZvciBydWxlcyBpbnNpZGUgZHluYW1pYyBtZWRpYSBxdWVyaWVzLgor
ICAgIGlmIChhdXRvKiBkb2N1bWVudEVsZW1lbnQgPSBtX2RvY3VtZW50LmRvY3VtZW50RWxlbWVu
dCgpKQorICAgICAgICBkb2N1bWVudEVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUo
KTsKKwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bWVkaWFRdWVyeVJlc3VsdENoYW5n
ZWQobV9kb2N1bWVudCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlU2NvcGVSdWxlU2V0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlUnVs
ZVNldHMuY3BwCmluZGV4IDhlMDRkNzBmNjgyLi4zZjM4ZTlmZTY2NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZVJ1bGVTZXRzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuY3BwCkBAIC03MCwxOCArNzAsMTEgQEAgdm9p
ZCBTY29wZVJ1bGVTZXRzOjp1cGRhdGVVc2VyQWdlbnRNZWRpYVF1ZXJ5U3R5bGVJZk5lZWRlZCgp
IGNvbnN0CiAgICAgICAgIHJldHVybjsKICAgICBtX3VzZXJBZ2VudE1lZGlhUXVlcnlSdWxlQ291
bnRPblVwZGF0ZSA9IHJ1bGVDb3VudDsKIAotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBib29s
IGhhZFZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzID0gbV9zdHlsZVJlc29sdmVyLmhhc1Zp
ZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzKCk7Ci0jZW5kaWYKLQogICAgIC8vIE1lZGlhIHF1
ZXJpZXMgb24gdXNlciBhZ2VudCBzaGVldCBuZWVkIHRvIGV2YWx1YXRlZCBpbiBkb2N1bWVudCBj
b250ZXh0LiBUaGV5IGJlaGF2ZSBsaWtlIGF1dGhvciBzaGVldHMgaW4gdGhpcyByZXNwZWN0Lgog
ICAgIGF1dG8mIG1lZGlhUXVlcnlFdmFsdWF0b3IgPSBtX3N0eWxlUmVzb2x2ZXIubWVkaWFRdWVy
eUV2YWx1YXRvcigpOwogICAgIG1fdXNlckFnZW50TWVkaWFRdWVyeVN0eWxlID0gbWFrZVVuaXF1
ZTxSdWxlU2V0PigpOwogICAgIAotICAgIG1fdXNlckFnZW50TWVkaWFRdWVyeVN0eWxlLT5hZGRS
dWxlc0Zyb21TaGVldCgqVXNlckFnZW50U3R5bGU6Om1lZGlhUXVlcnlTdHlsZVNoZWV0LCBtZWRp
YVF1ZXJ5RXZhbHVhdG9yLCAmbV9zdHlsZVJlc29sdmVyKTsKLQotICAgIC8vIFZpZXdwb3J0IGRl
cGVuZGVudCBxdWVyaWVzIGFyZSBjdXJyZW50bHkgdG9vIGluZWZmaWNpZW50IHRvIGFsbG93IG9u
IFVBIHNoZWV0LgotICAgIEFTU0VSVCghbV9zdHlsZVJlc29sdmVyLmhhc1ZpZXdwb3J0RGVwZW5k
ZW50TWVkaWFRdWVyaWVzKCkgfHwgaGFkVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXMpOwor
ICAgIG1fdXNlckFnZW50TWVkaWFRdWVyeVN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldCgqVXNlckFn
ZW50U3R5bGU6Om1lZGlhUXVlcnlTdHlsZVNoZWV0LCBudWxscHRyLCBtZWRpYVF1ZXJ5RXZhbHVh
dG9yLCBtX3N0eWxlUmVzb2x2ZXIpOwogfQogCiBSdWxlU2V0KiBTY29wZVJ1bGVTZXRzOjp1c2Vy
U3R5bGUoKSBjb25zdApAQCAtOTcsNyArOTAsNyBAQCB2b2lkIFNjb3BlUnVsZVNldHM6OmluaXRp
YWxpemVVc2VyU3R5bGUoKQogICAgIGF1dG8mIG1lZGlhUXVlcnlFdmFsdWF0b3IgPSBtX3N0eWxl
UmVzb2x2ZXIubWVkaWFRdWVyeUV2YWx1YXRvcigpOwogICAgIGF1dG8gdGVtcFVzZXJTdHlsZSA9
IG1ha2VVbmlxdWU8UnVsZVNldD4oKTsKICAgICBpZiAoQ1NTU3R5bGVTaGVldCogcGFnZVVzZXJT
aGVldCA9IGV4dGVuc2lvblN0eWxlU2hlZXRzLnBhZ2VVc2VyU2hlZXQoKSkKLSAgICAgICAgdGVt
cFVzZXJTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocGFnZVVzZXJTaGVldC0+Y29udGVudHMoKSwg
bWVkaWFRdWVyeUV2YWx1YXRvciwgJm1fc3R5bGVSZXNvbHZlcik7CisgICAgICAgIHRlbXBVc2Vy
U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VVc2VyU2hlZXQtPmNvbnRlbnRzKCksIG51bGxw
dHIsIG1lZGlhUXVlcnlFdmFsdWF0b3IsIG1fc3R5bGVSZXNvbHZlcik7CiAgICAgY29sbGVjdFJ1
bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhleHRlbnNpb25TdHlsZVNoZWV0cy5pbmplY3RlZFVzZXJT
dHlsZVNoZWV0cygpLCAqdGVtcFVzZXJTdHlsZSwgbWVkaWFRdWVyeUV2YWx1YXRvcik7CiAgICAg
Y29sbGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhleHRlbnNpb25TdHlsZVNoZWV0cy5kb2N1
bWVudFVzZXJTdHlsZVNoZWV0cygpLCAqdGVtcFVzZXJTdHlsZSwgbWVkaWFRdWVyeUV2YWx1YXRv
cik7CiAgICAgaWYgKHRlbXBVc2VyU3R5bGUtPnJ1bGVDb3VudCgpID4gMCB8fCB0ZW1wVXNlclN0
eWxlLT5wYWdlUnVsZXMoKS5zaXplKCkgPiAwKQpAQCAtMTA4LDcgKzEwMSw3IEBAIHZvaWQgU2Nv
cGVSdWxlU2V0czo6Y29sbGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8
UmVmUHRyPENTU1N0eWxlCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZXJTaGVl
dHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgQVNTRVJUKHVzZXJTaGVldHNbaV0tPmNvbnRlbnRz
KCkuaXNVc2VyU3R5bGVTaGVldCgpKTsKLSAgICAgICAgdXNlclN0eWxlLmFkZFJ1bGVzRnJvbVNo
ZWV0KHVzZXJTaGVldHNbaV0tPmNvbnRlbnRzKCksIG1lZGl1bSwgJm1fc3R5bGVSZXNvbHZlcik7
CisgICAgICAgIHVzZXJTdHlsZS5hZGRSdWxlc0Zyb21TaGVldCh1c2VyU2hlZXRzW2ldLT5jb250
ZW50cygpLCBudWxscHRyLCBtZWRpdW0sIG1fc3R5bGVSZXNvbHZlcik7CiAgICAgfQogfQogCkBA
IC0xMzEsNiArMTI0LDE5IEBAIHZvaWQgU2NvcGVSdWxlU2V0czo6cmVzZXRBdXRob3JTdHlsZSgp
CiAgICAgbV9hdXRob3JTdHlsZS0+ZGlzYWJsZUF1dG9TaHJpbmtUb0ZpdCgpOwogfQogCitib29s
IFNjb3BlUnVsZVNldHM6OmV2YWx1dGVEeW5hbWljTWVkaWFRdWVyeVJ1bGVzKGNvbnN0IE1lZGlh
UXVlcnlFdmFsdWF0b3ImIGV2YWx1YXRvcikKK3sKKyAgICBib29sIGNoYW5nZXMgPSBtX2F1dGhv
clN0eWxlLT5ldmFsdXRlRHluYW1pY01lZGlhUXVlcnlSdWxlcyhldmFsdWF0b3IpOworCisgICAg
aWYgKG1fdXNlclN0eWxlKQorICAgICAgICBjaGFuZ2VzIHw9IG1fdXNlclN0eWxlLT5ldmFsdXRl
RHluYW1pY01lZGlhUXVlcnlSdWxlcyhldmFsdWF0b3IpOworCisgICAgaWYgKG1fdXNlckFnZW50
TWVkaWFRdWVyeVN0eWxlKQorICAgICAgICBjaGFuZ2VzIHw9IG1fdXNlckFnZW50TWVkaWFRdWVy
eVN0eWxlLT5ldmFsdXRlRHluYW1pY01lZGlhUXVlcnlSdWxlcyhldmFsdWF0b3IpOworCisgICAg
cmV0dXJuIGNoYW5nZXM7Cit9CisKIHZvaWQgU2NvcGVSdWxlU2V0czo6cmVzZXRVc2VyQWdlbnRN
ZWRpYVF1ZXJ5U3R5bGUoKQogewogICAgIG1fdXNlckFnZW50TWVkaWFRdWVyeVN0eWxlID0gbnVs
bHB0cjsKQEAgLTEzOCwyMCArMTQ0LDEyIEBAIHZvaWQgU2NvcGVSdWxlU2V0czo6cmVzZXRVc2Vy
QWdlbnRNZWRpYVF1ZXJ5U3R5bGUoKQogCiB2b2lkIFNjb3BlUnVsZVNldHM6OmFwcGVuZEF1dGhv
clN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBzdHlsZVNo
ZWV0cywgTWVkaWFRdWVyeUV2YWx1YXRvciogbWVkaXVtLCBJbnNwZWN0b3JDU1NPTVdyYXBwZXJz
JiBpbnNwZWN0b3JDU1NPTVdyYXBwZXJzKQogewotICAgIC8vIFRoaXMgaGFuZGxlcyBzaGVldHMg
YWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgc3R5bGVzaGVldCBsaXN0IG9ubHkuIEluIG90aGVyIGNh
c2VzIHRoZSBzdHlsZSByZXNvbHZlcgotICAgIC8vIG5lZWRzIHRvIGJlIHJlY29uc3RydWN0ZWQu
IFRvIGhhbmRsZSBpbnNlcnRpb25zIHRvbyB0aGUgcnVsZSBvcmRlciBudW1iZXJzIHdvdWxkIG5l
ZWQgdG8gYmUgdXBkYXRlZC4KLSAgICBNZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMgbWVkaWFRdWVy
eUR5bmFtaWNSZXN1bHRzOwotCiAgICAgZm9yIChhdXRvJiBjc3NTaGVldCA6IHN0eWxlU2hlZXRz
KSB7CiAgICAgICAgIEFTU0VSVCghY3NzU2hlZXQtPmRpc2FibGVkKCkpOwotICAgICAgICBpZiAo
Y3NzU2hlZXQtPm1lZGlhUXVlcmllcygpICYmICFtZWRpdW0tPmV2YWx1YXRlKCpjc3NTaGVldC0+
bWVkaWFRdWVyaWVzKCksICZtZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KGNzc1No
ZWV0LT5jb250ZW50cygpLCAqbWVkaXVtLCAmbV9zdHlsZVJlc29sdmVyKTsKKyAgICAgICAgbV9h
dXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoY3NzU2hlZXQtPmNvbnRlbnRzKCksIGNzc1No
ZWV0LT5tZWRpYVF1ZXJpZXMoKSwgKm1lZGl1bSwgbV9zdHlsZVJlc29sdmVyKTsKICAgICAgICAg
aW5zcGVjdG9yQ1NTT01XcmFwcGVycy5jb2xsZWN0RnJvbVN0eWxlU2hlZXRJZk5lZWRlZChjc3NT
aGVldC5nZXQoKSk7CiAgICAgfQogCi0gICAgbV9zdHlsZVJlc29sdmVyLmFkZE1lZGlhUXVlcnlE
eW5hbWljUmVzdWx0cyhtZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMpOwotCiAgICAgbV9hdXRob3JT
dHlsZS0+c2hyaW5rVG9GaXQoKTsKICAgICBjb2xsZWN0RmVhdHVyZXMoKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGVSdWxlU2V0cy5oIGIvU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVTY29wZVJ1bGVTZXRzLmgKaW5kZXggNGI3YWE3ZjIxNzMuLmZjNDQ0
Yjc1OWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlUnVsZVNl
dHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuaApAQCAt
NzYsNiArNzYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNldEF1dGhvclN0eWxlKCk7CiAgICAg
dm9pZCBhcHBlbmRBdXRob3JTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxl
U2hlZXQ+PiYsIE1lZGlhUXVlcnlFdmFsdWF0b3IqLCBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzJik7
CiAKKyAgICBib29sIGV2YWx1dGVEeW5hbWljTWVkaWFRdWVyeVJ1bGVzKGNvbnN0IE1lZGlhUXVl
cnlFdmFsdWF0b3ImKTsKICAgICB2b2lkIHJlc2V0VXNlckFnZW50TWVkaWFRdWVyeVN0eWxlKCk7
CiAKICAgICBSdWxlRmVhdHVyZVNldCYgbXV0YWJsZUZlYXR1cmVzKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385611</attachid>
            <date>2019-12-13 09:42:13 -0800</date>
            <delta_ts>2019-12-16 04:31:02 -0800</delta_ts>
            <desc>wip</desc>
            <filename>rule-dynamic-media-query-2.patch</filename>
            <type>text/plain</type>
            <size>32583</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAppbmRleCAwNjk0NTQ5
MmUwNi4uMzI4NzBmMmI3MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1
ZXJ5RXZhbHVhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1
YXRvci5jcHAKQEAgLTE0NSw3ICsxNDUsNyBAQCBzdGF0aWMgYm9vbCBhcHBseVJlc3RyaWN0b3Io
TWVkaWFRdWVyeTo6UmVzdHJpY3RvciByLCBib29sIHZhbHVlKQogICAgIHJldHVybiByID09IE1l
ZGlhUXVlcnk6Ok5vdCA/ICF2YWx1ZSA6IHZhbHVlOwogfQogCi1ib29sIE1lZGlhUXVlcnlFdmFs
dWF0b3I6OmV2YWx1YXRlKGNvbnN0IE1lZGlhUXVlcnlTZXQmIHF1ZXJ5U2V0LCBNZWRpYVF1ZXJ5
RHluYW1pY1Jlc3VsdHMqIGR5bmFtaWNSZXN1bHRzKSBjb25zdAorYm9vbCBNZWRpYVF1ZXJ5RXZh
bHVhdG9yOjpldmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5U2V0JiBxdWVyeVNldCwgTWVkaWFRdWVy
eUR5bmFtaWNSZXN1bHRzKiBkeW5hbWljUmVzdWx0cywgTW9kZSBtb2RlKSBjb25zdAogewogICAg
IExPR19XSVRIX1NUUkVBTShNZWRpYVF1ZXJpZXMsIHN0cmVhbSA8PCAiTWVkaWFRdWVyeUV2YWx1
YXRvcjo6ZXZhbHVhdGUgb24gIiA8PCAobV9kb2N1bWVudCA/IG1fZG9jdW1lbnQtPnVybCgpLnN0
cmluZygpIDogZW1wdHlTdHJpbmcoKSkpOwogCkBAIC0xNjYsMjIgKzE2NiwzNiBAQCBib29sIE1l
ZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWx1YXRlKGNvbnN0IE1lZGlhUXVlcnlTZXQmIHF1ZXJ5U2V0
LCBNZWRpYVF1ZXJ5RHluYQogICAgICAgICBpZiAobWVkaWFUeXBlTWF0Y2gocXVlcnkubWVkaWFU
eXBlKCkpKSB7CiAgICAgICAgICAgICBhdXRvJiBleHByZXNzaW9ucyA9IHF1ZXJ5LmV4cHJlc3Np
b25zKCk7CiAgICAgICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggZXhwcmVzc2lvbnMsIHN0b3Ag
aWYgYW55IG9mIHRoZW0gZXZhbCB0byBmYWxzZSAoQU5EIHNlbWFudGljcykuCisgICAgICAgICAg
ICBib29sIGlzRHluYW1pYyA9IGZhbHNlOwogICAgICAgICAgICAgc2l6ZV90IGogPSAwOwogICAg
ICAgICAgICAgZm9yICg7IGogPCBleHByZXNzaW9ucy5zaXplKCk7ICsraikgewogICAgICAgICAg
ICAgICAgIGJvb2wgZXhwcmVzc2lvblJlc3VsdCA9IGV2YWx1YXRlKGV4cHJlc3Npb25zW2pdKTsK
ICAgICAgICAgICAgICAgICBpZiAoZHluYW1pY1Jlc3VsdHMpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzVmlld3BvcnREZXBlbmRlbnQoZXhwcmVzc2lvbnNbal0ubWVkaWFGZWF0dXJlKCkp
KQorICAgICAgICAgICAgICAgICAgICBpZiAoaXNWaWV3cG9ydERlcGVuZGVudChleHByZXNzaW9u
c1tqXS5tZWRpYUZlYXR1cmUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzRHluYW1p
YyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljUmVzdWx0cy0+dmlld3Bv
cnQuYXBwZW5kKHsgZXhwcmVzc2lvbnNbal0sIGV4cHJlc3Npb25SZXN1bHQgfSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChpc0FwcGVhcmFuY2VEZXBlbmRlbnQoZXhwcmVzc2lvbnNbal0ubWVk
aWFGZWF0dXJlKCkpKQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGlmIChpc0FwcGVhcmFuY2VEZXBlbmRlbnQoZXhwcmVzc2lvbnNbal0ubWVkaWFGZWF0dXJlKCkp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpc0R5bmFtaWMgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICAgICAgZHluYW1pY1Jlc3VsdHMtPmFwcGVhcmFuY2UuYXBwZW5kKHsgZXhwcmVz
c2lvbnNbal0sIGV4cHJlc3Npb25SZXN1bHQgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChp
c0FjY2Vzc2liaWxpdHlTZXR0aW5nc0RlcGVuZGVudChleHByZXNzaW9uc1tqXS5tZWRpYUZlYXR1
cmUoKSkpCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGlz
QWNjZXNzaWJpbGl0eVNldHRpbmdzRGVwZW5kZW50KGV4cHJlc3Npb25zW2pdLm1lZGlhRmVhdHVy
ZSgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaXNEeW5hbWljID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGR5bmFtaWNSZXN1bHRzLT5hY2Nlc3NpYmlsaXR5U2V0dGluZ3Mu
YXBwZW5kKHsgZXhwcmVzc2lvbnNbal0sIGV4cHJlc3Npb25SZXN1bHQgfSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG1vZGUg
PT0gTW9kZTo6QWx3YXlzTWF0Y2hEeW5hbWljICYmIGlzRHluYW1pYykKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgICAgICBpZiAoIWV4cHJlc3Npb25SZXN1bHQp
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCisgICAgICAgICAg
ICBpZiAobW9kZSA9PSBNb2RlOjpBbHdheXNNYXRjaER5bmFtaWMgJiYgaXNEeW5hbWljKSB7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgLy8gQXNzdW1lIHRydWUgaWYgd2UgYXJlIGF0
IHRoZSBlbmQgb2YgdGhlIGxpc3QsIG90aGVyd2lzZSBhc3N1bWUgZmFsc2UuCiAgICAgICAgICAg
ICByZXN1bHQgPSBhcHBseVJlc3RyaWN0b3IocXVlcnkucmVzdHJpY3RvcigpLCBleHByZXNzaW9u
cy5zaXplKCkgPT0gaik7CiAgICAgICAgIH0gZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1
ZXJ5RXZhbHVhdG9yLmgKaW5kZXggM2FkOTk4Y2JhY2QuLjVkZTg1YzdjY2NiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmgKQEAgLTgzLDcgKzgzLDggQEAgcHVibGlj
OgogICAgIGJvb2wgZXZhbHVhdGUoY29uc3QgTWVkaWFRdWVyeUV4cHJlc3Npb24mKSBjb25zdDsK
ICAgICBib29sIGV2YWx1YXRlRm9yQ2hhbmdlcyhjb25zdCBNZWRpYVF1ZXJ5RHluYW1pY1Jlc3Vs
dHMmKSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXZhbHVhdGUoY29uc3QgTWVk
aWFRdWVyeVNldCYsIE1lZGlhUXVlcnlEeW5hbWljUmVzdWx0cyogPSBudWxscHRyKSBjb25zdDsK
KyAgICBlbnVtIGNsYXNzIE1vZGUgeyBOb3JtYWwsIEFsd2F5c01hdGNoRHluYW1pYyB9OworICAg
IFdFQkNPUkVfRVhQT1JUIGJvb2wgZXZhbHVhdGUoY29uc3QgTWVkaWFRdWVyeVNldCYsIE1lZGlh
UXVlcnlEeW5hbWljUmVzdWx0cyogPSBudWxscHRyLCBNb2RlID0gTW9kZTo6Tm9ybWFsKSBjb25z
dDsKIAogICAgIHN0YXRpYyBib29sIG1lZGlhQXR0cmlidXRlTWF0Y2hlcyhEb2N1bWVudCYsIGNv
bnN0IFN0cmluZyYgYXR0cmlidXRlVmFsdWUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9F
bGVtZW50UnVsZUNvbGxlY3Rvci5jcHAKaW5kZXggZDcwNjhkNTlhOWMuLjNiYWZiMjBmNjBmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCkBAIC01
MjQsNiArNTI0LDkgQEAgdm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6Y29sbGVjdE1hdGNoaW5n
UnVsZXNGb3JMaXN0KGNvbnN0IFJ1bGVTZXQ6OlJ1bGVEYXRhVmUKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwLCBzaXplID0gcnVsZXMtPnNpemUoKTsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBj
b25zdCBhdXRvJiBydWxlRGF0YSA9IHJ1bGVzLT5kYXRhKClbaV07CiAKKyAgICAgICAgaWYgKCFy
dWxlRGF0YS5pc0VuYWJsZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIGlm
ICghcnVsZURhdGEuY2FuTWF0Y2hQc2V1ZG9FbGVtZW50KCkgJiYgbV9wc2V1ZG9FbGVtZW50UmVx
dWVzdC5wc2V1ZG9JZCAhPSBQc2V1ZG9JZDo6Tm9uZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlRGF0YS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9SdWxlRGF0YS5jcHAKaW5kZXggZjM0NGRiOTk2MTYuLjZhMzAxZGY4ZjI2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlRGF0YS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3R5bGUvUnVsZURhdGEuY3BwCkBAIC0xNjksNiArMTY5LDcgQEAgUnVsZURh
dGE6OlJ1bGVEYXRhKFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5z
aWduZWQgc2VsZWN0b3JMaXMKICAgICAsIG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVj
dG9yKGNvbXB1dGVDb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKnNlbGVjdG9yKCkp
KQogICAgICwgbV9saW5rTWF0Y2hUeXBlKFNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua01h
dGNoVHlwZShzZWxlY3RvcigpKSkKICAgICAsIG1fcHJvcGVydHlXaGl0ZWxpc3RUeXBlKGRldGVy
bWluZVByb3BlcnR5V2hpdGVsaXN0VHlwZShzZWxlY3RvcigpKSkKKyAgICAsIG1faXNFbmFibGVk
KHRydWUpCiAgICAgLCBtX2Rlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMoU2VsZWN0
b3JGaWx0ZXI6OmNvbGxlY3RIYXNoZXMoKnNlbGVjdG9yKCkpKQogewogICAgIEFTU0VSVChtX3Bv
c2l0aW9uID09IHBvc2l0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1
bGVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlRGF0YS5oCmluZGV4IDFmYjZhNzFl
OTUyLi5hM2E2MDEwMmVlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZURh
dGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlRGF0YS5oCkBAIC02MCw2ICs2MCw5
IEBAIHB1YmxpYzoKICAgICBib29sIGNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3Rvcigp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yOyB9CiAg
ICAgdW5zaWduZWQgbGlua01hdGNoVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlua01hdGNoVHlw
ZTsgfQogICAgIFByb3BlcnR5V2hpdGVsaXN0VHlwZSBwcm9wZXJ0eVdoaXRlbGlzdFR5cGUoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+KG1fcHJvcGVy
dHlXaGl0ZWxpc3RUeXBlKTsgfQorICAgIGJvb2wgaXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4g
bV9pc0VuYWJsZWQ7IH0KKyAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCB2YWx1ZSkgeyBtX2lzRW5h
YmxlZCA9IHZhbHVlOyB9CisKICAgICBjb25zdCBTZWxlY3RvckZpbHRlcjo6SGFzaGVzJiBkZXNj
ZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKCkgY29uc3QgeyByZXR1cm4gbV9kZXNjZW5k
YW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzOyB9CiAKICAgICB2b2lkIGRpc2FibGVTZWxlY3Rv
ckZpbHRlcmluZygpIHsgbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzWzBdID0g
MDsgfQpAQCAtNzYsNiArNzksNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fY29udGFpbnNV
bmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yIDogMTsKICAgICB1bnNpZ25lZCBtX2xpbmtNYXRjaFR5
cGUgOiAyOyAvLyAgU2VsZWN0b3JDaGVja2VyOjpMaW5rTWF0Y2hNYXNrCiAgICAgdW5zaWduZWQg
bV9wcm9wZXJ0eVdoaXRlbGlzdFR5cGUgOiAyOworICAgIHVuc2lnbmVkIG1faXNFbmFibGVkIDog
MTsKICAgICBTZWxlY3RvckZpbHRlcjo6SGFzaGVzIG1fZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRp
Zmllckhhc2hlczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVT
ZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5jcHAKaW5kZXggOTcwMmEzZWM2
ZDUuLmYwMzdlYTA2MDI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0LmNwcApAQCAtMjYwLDYzICsy
NjAsMTc2IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVk
IHNlbGVjdG9ySW5kZXgsIHVuc2lnbmVkIHNlbGVjdG9yCiAgICAgbV91bml2ZXJzYWxSdWxlcy5h
cHBlbmQocnVsZURhdGEpOwogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZFBhZ2VSdWxlKFN0eWxlUnVs
ZVBhZ2UqIHJ1bGUpCit2b2lkIFJ1bGVTZXQ6OmFkZFBhZ2VSdWxlKFN0eWxlUnVsZVBhZ2UmIHJ1
bGUpCiB7Ci0gICAgbV9wYWdlUnVsZXMuYXBwZW5kKHJ1bGUpOworICAgIG1fcGFnZVJ1bGVzLmFw
cGVuZCgmcnVsZSk7CiB9CiAKLXZvaWQgUnVsZVNldDo6YWRkQ2hpbGRSdWxlcyhjb25zdCBWZWN0
b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiYgcnVsZXMsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0
b3ImIG1lZGl1bSwgUmVzb2x2ZXIqIHJlc29sdmVyLCBNZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMm
IG1lZGlhUXVlcnlEeW5hbWljUmVzdWx0cykKK3ZvaWQgUnVsZVNldDo6YWRkQ2hpbGRSdWxlcyhj
b25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiYgcnVsZXMsIE1lZGlhUXVlcnlDb2xs
ZWN0b3ImIG1lZGlhUXVlcnlDb2xsZWN0b3IsIFJlc29sdmVyKiByZXNvbHZlciwgQWRkUnVsZXNN
b2RlIG1vZGUpCiB7CiAgICAgZm9yIChhdXRvJiBydWxlIDogcnVsZXMpIHsKLSAgICAgICAgaWYg
KGlzPFN0eWxlUnVsZT4oKnJ1bGUpKQotICAgICAgICAgICAgYWRkU3R5bGVSdWxlKGRvd25jYXN0
PFN0eWxlUnVsZT4ocnVsZS5nZXQoKSkpOwotICAgICAgICBlbHNlIGlmIChpczxTdHlsZVJ1bGVQ
YWdlPigqcnVsZSkpCi0gICAgICAgICAgICBhZGRQYWdlUnVsZShkb3duY2FzdDxTdHlsZVJ1bGVQ
YWdlPihydWxlLmdldCgpKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPFN0eWxlUnVsZU1lZGlhPigq
cnVsZSkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gQWRkUnVsZXNNb2RlOjpSZXNvbHZlck11dGF0
aW9uU2NhbiAmJiBtZWRpYVF1ZXJ5Q29sbGVjdG9yLmRpZE11dGF0ZVJlc29sdmVyV2l0aGluRHlu
YW1pY01lZGlhUXVlcnkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoaXM8U3R5
bGVSdWxlPigqcnVsZSkpIHsKKyAgICAgICAgICAgIGlmIChtb2RlID09IEFkZFJ1bGVzTW9kZTo6
Tm9ybWFsKQorICAgICAgICAgICAgICAgIGFkZFN0eWxlUnVsZShkb3duY2FzdDxTdHlsZVJ1bGU+
KCpydWxlKSwgbWVkaWFRdWVyeUNvbGxlY3Rvcik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoaXM8U3R5bGVSdWxlUGFnZT4oKnJ1bGUpKSB7CisgICAgICAg
ICAgICBpZiAobW9kZSA9PSBBZGRSdWxlc01vZGU6Ok5vcm1hbCkKKyAgICAgICAgICAgICAgICBh
ZGRQYWdlUnVsZShkb3duY2FzdDxTdHlsZVJ1bGVQYWdlPigqcnVsZSkpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzPFN0eWxlUnVsZU1lZGlhPigqcnVs
ZSkpIHsKICAgICAgICAgICAgIGF1dG8mIG1lZGlhUnVsZSA9IGRvd25jYXN0PFN0eWxlUnVsZU1l
ZGlhPigqcnVsZSk7Ci0gICAgICAgICAgICBpZiAoKCFtZWRpYVJ1bGUubWVkaWFRdWVyaWVzKCkg
fHwgbWVkaXVtLmV2YWx1YXRlKCptZWRpYVJ1bGUubWVkaWFRdWVyaWVzKCksICZtZWRpYVF1ZXJ5
RHluYW1pY1Jlc3VsdHMpKSkKLSAgICAgICAgICAgICAgICBhZGRDaGlsZFJ1bGVzKG1lZGlhUnVs
ZS5jaGlsZFJ1bGVzKCksIG1lZGl1bSwgcmVzb2x2ZXIsIG1lZGlhUXVlcnlEeW5hbWljUmVzdWx0
cyk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXM8U3R5bGVSdWxlRm9udEZhY2U+KCpydWxlKSAmJiBy
ZXNvbHZlcikgeworICAgICAgICAgICAgaWYgKG1lZGlhUXVlcnlDb2xsZWN0b3IucHVzaEFuZEV2
YWx1YXRlKG1lZGlhUnVsZS5tZWRpYVF1ZXJpZXMoKSkpIHsKKyAgICAgICAgICAgICAgICBhZGRD
aGlsZFJ1bGVzKG1lZGlhUnVsZS5jaGlsZFJ1bGVzKCksIG1lZGlhUXVlcnlDb2xsZWN0b3IsIHJl
c29sdmVyLCBtb2RlKTsKKyAgICAgICAgICAgICAgICBtZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcCht
ZWRpYVJ1bGUubWVkaWFRdWVyaWVzKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzPFN0eWxlUnVsZUZvbnRGYWNlPigqcnVs
ZSkpIHsKICAgICAgICAgICAgIC8vIEFkZCB0aGlzIGZvbnQgZmFjZSB0byBvdXIgc2V0LgotICAg
ICAgICAgICAgcmVzb2x2ZXItPmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkuYWRkRm9udEZhY2VS
dWxlKGRvd25jYXN0PFN0eWxlUnVsZUZvbnRGYWNlPigqcnVsZS5nZXQoKSksIGZhbHNlKTsKLSAg
ICAgICAgICAgIHJlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlKCk7
Ci0gICAgICAgIH0gZWxzZSBpZiAoaXM8U3R5bGVSdWxlS2V5ZnJhbWVzPigqcnVsZSkgJiYgcmVz
b2x2ZXIpCi0gICAgICAgICAgICByZXNvbHZlci0+YWRkS2V5ZnJhbWVTdHlsZShkb3duY2FzdDxT
dHlsZVJ1bGVLZXlmcmFtZXM+KCpydWxlKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPFN0eWxlUnVs
ZVN1cHBvcnRzPigqcnVsZSkgJiYgZG93bmNhc3Q8U3R5bGVSdWxlU3VwcG9ydHM+KCpydWxlKS5j
b25kaXRpb25Jc1N1cHBvcnRlZCgpKQotICAgICAgICAgICAgYWRkQ2hpbGRSdWxlcyhkb3duY2Fz
dDxTdHlsZVJ1bGVTdXBwb3J0cz4oKnJ1bGUpLmNoaWxkUnVsZXMoKSwgbWVkaXVtLCByZXNvbHZl
ciwgbWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzKTsKKyAgICAgICAgICAgIGlmIChyZXNvbHZlcikg
eworICAgICAgICAgICAgICAgIHJlc29sdmVyLT5kb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpLmFk
ZEZvbnRGYWNlUnVsZShkb3duY2FzdDxTdHlsZVJ1bGVGb250RmFjZT4oKnJ1bGUuZ2V0KCkpLCBm
YWxzZSk7CisgICAgICAgICAgICAgICAgcmVzb2x2ZXItPmludmFsaWRhdGVNYXRjaGVkRGVjbGFy
YXRpb25zQ2FjaGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lZGlhUXVlcnlDb2xs
ZWN0b3IuZGlkTXV0YXRlUmVzb2x2ZXIoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisgICAgICAgIGlmIChpczxTdHlsZVJ1bGVLZXlmcmFtZXM+KCpydWxlKSkgeworICAgICAg
ICAgICAgaWYgKHJlc29sdmVyKQorICAgICAgICAgICAgICAgIHJlc29sdmVyLT5hZGRLZXlmcmFt
ZVN0eWxlKGRvd25jYXN0PFN0eWxlUnVsZUtleWZyYW1lcz4oKnJ1bGUpKTsKKyAgICAgICAgICAg
IG1lZGlhUXVlcnlDb2xsZWN0b3IuZGlkTXV0YXRlUmVzb2x2ZXIoKTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChpczxTdHlsZVJ1bGVTdXBwb3J0cz4oKnJ1
bGUpICYmIGRvd25jYXN0PFN0eWxlUnVsZVN1cHBvcnRzPigqcnVsZSkuY29uZGl0aW9uSXNTdXBw
b3J0ZWQoKSkgeworICAgICAgICAgICAgYWRkQ2hpbGRSdWxlcyhkb3duY2FzdDxTdHlsZVJ1bGVT
dXBwb3J0cz4oKnJ1bGUpLmNoaWxkUnVsZXMoKSwgbWVkaWFRdWVyeUNvbGxlY3RvciwgcmVzb2x2
ZXIsIG1vZGUpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KICNpZiBFTkFCTEUo
Q1NTX0RFVklDRV9BREFQVEFUSU9OKQotICAgICAgICBlbHNlIGlmIChpczxTdHlsZVJ1bGVWaWV3
cG9ydD4oKnJ1bGUpICYmIHJlc29sdmVyKQotICAgICAgICAgICAgcmVzb2x2ZXItPnZpZXdwb3J0
U3R5bGVSZXNvbHZlcigpLT5hZGRWaWV3cG9ydFJ1bGUoZG93bmNhc3Q8U3R5bGVSdWxlVmlld3Bv
cnQ+KHJ1bGUuZ2V0KCkpKTsKKyAgICAgICAgaWYgKGlzPFN0eWxlUnVsZVZpZXdwb3J0PigqcnVs
ZSkpIHsKKyAgICAgICAgICAgIGlmIChyZXNvbHZlcikKKyAgICAgICAgICAgICAgICByZXNvbHZl
ci0+dmlld3BvcnRTdHlsZVJlc29sdmVyKCktPmFkZFZpZXdwb3J0UnVsZShkb3duY2FzdDxTdHls
ZVJ1bGVWaWV3cG9ydD4ocnVsZS5nZXQoKSkpOworICAgICAgICAgICAgbWVkaWFRdWVyeUNvbGxl
Y3Rvci5kaWRNdXRhdGVSZXNvbHZlcigpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KICNlbmRpZgogICAgIH0KIH0KIAotdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChT
dHlsZVNoZWV0Q29udGVudHMmIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRp
YVF1ZXJ5RXZhbHVhdG9yLCBSZXNvbHZlciogcmVzb2x2ZXIpCit2b2lkIFJ1bGVTZXQ6OmFkZFJ1
bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyYgc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlF
dmFsdWF0b3ImIGV2YWx1YXRvcikKK3sKKyAgICBhdXRvIG1lZGlhUXVlcnlDb2xsZWN0b3IgPSBN
ZWRpYVF1ZXJ5Q29sbGVjdG9yIHsgZXZhbHVhdG9yIH07CisgICAgYWRkUnVsZXNGcm9tU2hlZXQo
c2hlZXQsIG1lZGlhUXVlcnlDb2xsZWN0b3IsIG51bGxwdHIsIEFkZFJ1bGVzTW9kZTo6Tm9ybWFs
KTsKK30KKwordm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVu
dHMmIHNoZWV0LCBNZWRpYVF1ZXJ5U2V0KiBzaGVldFF1ZXJ5LCBjb25zdCBNZWRpYVF1ZXJ5RXZh
bHVhdG9yJiBldmFsdWF0b3IsIFN0eWxlOjpSZXNvbHZlciYgcmVzb2x2ZXIpCiB7Ci0gICAgTWVk
aWFRdWVyeUR5bmFtaWNSZXN1bHRzIG1lZGlhUXVlcnlEeW5hbWljUmVzdWx0czsKKyAgICBhdXRv
IGNhblVzZUR5bmFtaWNNZWRpYVF1ZXJ5UmVzb2x1dGlvbiA9IFsmXSB7CisgICAgICAgIGF1dG8g
bWVkaWFRdWVyeUNvbGxlY3RvciA9IE1lZGlhUXVlcnlDb2xsZWN0b3IgeyBldmFsdWF0b3IsIHRy
dWUgfTsKKyAgICAgICAgaWYgKG1lZGlhUXVlcnlDb2xsZWN0b3IucHVzaEFuZEV2YWx1YXRlKHNo
ZWV0UXVlcnkpKQorICAgICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQsIG1lZGlhUXVl
cnlDb2xsZWN0b3IsIG51bGxwdHIsIEFkZFJ1bGVzTW9kZTo6UmVzb2x2ZXJNdXRhdGlvblNjYW4p
OworICAgICAgICByZXR1cm4gIW1lZGlhUXVlcnlDb2xsZWN0b3IuZGlkTXV0YXRlUmVzb2x2ZXJX
aXRoaW5EeW5hbWljTWVkaWFRdWVyeTsKKyAgICB9KCk7CisKKyAgICBhdXRvIG1lZGlhUXVlcnlD
b2xsZWN0b3IgPSBNZWRpYVF1ZXJ5Q29sbGVjdG9yIHsgZXZhbHVhdG9yLCBjYW5Vc2VEeW5hbWlj
TWVkaWFRdWVyeVJlc29sdXRpb24gfTsKKworICAgIGlmIChtZWRpYVF1ZXJ5Q29sbGVjdG9yLnB1
c2hBbmRFdmFsdWF0ZShzaGVldFF1ZXJ5KSkgeworICAgICAgICBhZGRSdWxlc0Zyb21TaGVldChz
aGVldCwgbWVkaWFRdWVyeUNvbGxlY3RvciwgJnJlc29sdmVyLCBBZGRSdWxlc01vZGU6Ok5vcm1h
bCk7CisgICAgICAgIG1lZGlhUXVlcnlDb2xsZWN0b3IucG9wKHNoZWV0UXVlcnkpOworICAgIH0K
KworICAgIG1faGFzVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXMgPSBtZWRpYVF1ZXJ5Q29s
bGVjdG9yLmhhc1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzOworICAgIG1fZHluYW1pY01l
ZGlhUXVlcnlSdWxlcy5hcHBlbmRWZWN0b3IoV1RGTW92ZShtZWRpYVF1ZXJ5Q29sbGVjdG9yLmR5
bmFtaWNNZWRpYVF1ZXJ5UnVsZXMpKTsKKworICAgIGV2YWx1dGVEeW5hbWljTWVkaWFRdWVyeVJ1
bGVzKGV2YWx1YXRvcik7Cit9CiAKK3ZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoU3R5
bGVTaGVldENvbnRlbnRzJiBzaGVldCwgTWVkaWFRdWVyeUNvbGxlY3RvciYgbWVkaWFRdWVyeUNv
bGxlY3RvciwgUmVzb2x2ZXIqIHJlc29sdmVyLCBBZGRSdWxlc01vZGUgbW9kZSkKK3sKICAgICBm
b3IgKGF1dG8mIHJ1bGUgOiBzaGVldC5pbXBvcnRSdWxlcygpKSB7CiAgICAgICAgIGlmICghcnVs
ZS0+c3R5bGVTaGVldCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChydWxl
LT5tZWRpYVF1ZXJpZXMoKSAmJiAhbWVkaWFRdWVyeUV2YWx1YXRvci5ldmFsdWF0ZSgqcnVsZS0+
bWVkaWFRdWVyaWVzKCksICZtZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0KCpydWxlLT5zdHlsZVNoZWV0KCks
IG1lZGlhUXVlcnlFdmFsdWF0b3IsIHJlc29sdmVyKTsKLSAgICB9CiAKLSAgICBhZGRDaGlsZFJ1
bGVzKHNoZWV0LmNoaWxkUnVsZXMoKSwgbWVkaWFRdWVyeUV2YWx1YXRvciwgcmVzb2x2ZXIsIG1l
ZGlhUXVlcnlEeW5hbWljUmVzdWx0cyk7CisgICAgICAgIGlmIChtZWRpYVF1ZXJ5Q29sbGVjdG9y
LnB1c2hBbmRFdmFsdWF0ZShydWxlLT5tZWRpYVF1ZXJpZXMoKSkpIHsKKyAgICAgICAgICAgIGFk
ZFJ1bGVzRnJvbVNoZWV0KCpydWxlLT5zdHlsZVNoZWV0KCksIG1lZGlhUXVlcnlDb2xsZWN0b3Is
IHJlc29sdmVyLCBtb2RlKTsKKyAgICAgICAgICAgIG1lZGlhUXVlcnlDb2xsZWN0b3IucG9wKHJ1
bGUtPm1lZGlhUXVlcmllcygpKTsKKyAgICAgICAgfQorICAgIH0KIAotICAgIGlmIChyZXNvbHZl
cikKLSAgICAgICAgcmVzb2x2ZXItPmFkZE1lZGlhUXVlcnlEeW5hbWljUmVzdWx0cyhtZWRpYVF1
ZXJ5RHluYW1pY1Jlc3VsdHMpOworICAgIGFkZENoaWxkUnVsZXMoc2hlZXQuY2hpbGRSdWxlcygp
LCBtZWRpYVF1ZXJ5Q29sbGVjdG9yLCByZXNvbHZlciwgbW9kZSk7CiAKLSAgICBpZiAobV9hdXRv
U2hyaW5rVG9GaXRFbmFibGVkKQorICAgIGlmIChtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQgJiYg
bW9kZSA9PSBBZGRSdWxlc01vZGU6Ok5vcm1hbCkKICAgICAgICAgc2hyaW5rVG9GaXQoKTsKIH0K
IAotdm9pZCBSdWxlU2V0OjphZGRTdHlsZVJ1bGUoU3R5bGVSdWxlKiBydWxlKQordm9pZCBSdWxl
U2V0OjphZGRTdHlsZVJ1bGUoU3R5bGVSdWxlJiBydWxlLCBNZWRpYVF1ZXJ5Q29sbGVjdG9yJiBt
ZWRpYVF1ZXJ5Q29sbGVjdG9yKQogewogICAgIHVuc2lnbmVkIHNlbGVjdG9yTGlzdEluZGV4ID0g
MDsKLSAgICBmb3IgKHNpemVfdCBzZWxlY3RvckluZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAhPSBu
b3RGb3VuZDsgc2VsZWN0b3JJbmRleCA9IHJ1bGUtPnNlbGVjdG9yTGlzdCgpLmluZGV4T2ZOZXh0
U2VsZWN0b3JBZnRlcihzZWxlY3RvckluZGV4KSkKLSAgICAgICAgYWRkUnVsZShydWxlLCBzZWxl
Y3RvckluZGV4LCBzZWxlY3Rvckxpc3RJbmRleCsrKTsKKyAgICBmb3IgKHNpemVfdCBzZWxlY3Rv
ckluZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAhPSBub3RGb3VuZDsgc2VsZWN0b3JJbmRleCA9IHJ1
bGUuc2VsZWN0b3JMaXN0KCkuaW5kZXhPZk5leHRTZWxlY3RvckFmdGVyKHNlbGVjdG9ySW5kZXgp
KSB7CisgICAgICAgIG1lZGlhUXVlcnlDb2xsZWN0b3IuYWRkUnVsZUluZGV4SWZOZWVkZWQobV9y
dWxlQ291bnQpOworICAgICAgICBhZGRSdWxlKCZydWxlLCBzZWxlY3RvckluZGV4LCBzZWxlY3Rv
ckxpc3RJbmRleCsrKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uPgor
dm9pZCBSdWxlU2V0Ojp0cmF2ZXJzZVJ1bGVEYXRhcyhGdW5jdGlvbiYmIGZ1bmN0aW9uKQorewor
ICAgIGF1dG8gdHJhdmVyc2VWZWN0b3IgPSBbJl0oYXV0byYgdmVjdG9yKSB7CisgICAgICAgIGZv
ciAoYXV0byYgcnVsZURhdGEgOiB2ZWN0b3IpCisgICAgICAgICAgICBmdW5jdGlvbihydWxlRGF0
YSk7CisgICAgfTsKKworICAgIGF1dG8gdHJhdmVyc2VNYXAgPSBbJl0oYXV0byYgbWFwKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcnVsZURhdGFzIDogbWFwLnZhbHVlcygpKQorICAgICAgICAgICAg
dHJhdmVyc2VWZWN0b3IoKnJ1bGVEYXRhcyk7CisgICAgfTsKKworICAgIHRyYXZlcnNlTWFwKG1f
aWRSdWxlcyk7CisgICAgdHJhdmVyc2VNYXAobV9jbGFzc1J1bGVzKTsKKyAgICB0cmF2ZXJzZU1h
cChtX3RhZ0xvY2FsTmFtZVJ1bGVzKTsKKyAgICB0cmF2ZXJzZU1hcChtX3RhZ0xvd2VyY2FzZUxv
Y2FsTmFtZVJ1bGVzKTsKKyAgICB0cmF2ZXJzZU1hcChtX3NoYWRvd1BzZXVkb0VsZW1lbnRSdWxl
cyk7CisgICAgdHJhdmVyc2VWZWN0b3IobV9saW5rUHNldWRvQ2xhc3NSdWxlcyk7CisjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQorICAgIHRyYXZlcnNlVmVjdG9yKG1fY3VlUHNldWRvUnVsZXMpOwor
I2VuZGlmCisgICAgdHJhdmVyc2VWZWN0b3IobV9ob3N0UHNldWRvQ2xhc3NSdWxlcyk7CisgICAg
dHJhdmVyc2VWZWN0b3IobV9zbG90dGVkUHNldWRvRWxlbWVudFJ1bGVzKTsKKyAgICB0cmF2ZXJz
ZVZlY3RvcihtX3BhcnRQc2V1ZG9FbGVtZW50UnVsZXMpOworICAgIHRyYXZlcnNlVmVjdG9yKG1f
Zm9jdXNQc2V1ZG9DbGFzc1J1bGVzKTsKKyAgICB0cmF2ZXJzZVZlY3RvcihtX3VuaXZlcnNhbFJ1
bGVzKTsKK30KKworUnVsZVNldDo6TWVkaWFRdWVyeVN0eWxlVXBkYXRlVHlwZSBSdWxlU2V0Ojpl
dmFsdXRlRHluYW1pY01lZGlhUXVlcnlSdWxlcyhjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBl
dmFsdWF0b3IpCit7CisgICAgYm9vbCBjaGFuZ2VzID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBk
eW5hbWljUnVsZXMgOiBtX2R5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMpIHsKKyAgICAgICAgYm9vbCBy
ZXN1bHQgPSB0cnVlOworICAgICAgICBmb3IgKGF1dG8mIHNldCA6IGR5bmFtaWNSdWxlcy5tZWRp
YVF1ZXJ5U2V0cykgeworICAgICAgICAgICAgaWYgKCFldmFsdWF0b3IuZXZhbHVhdGUoc2V0Lmdl
dCgpKSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlc3VsdCAh
PSBkeW5hbWljUnVsZXMucmVzdWx0KSB7CisgICAgICAgICAgICBkeW5hbWljUnVsZXMucmVzdWx0
ID0gcmVzdWx0OworICAgICAgICAgICAgaWYgKGR5bmFtaWNSdWxlcy5yZXF1aXJlc0Z1bGxSZXNl
dCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVkaWFRdWVyeVN0eWxlVXBkYXRlVHlwZTo6UmVz
ZXQ7CisKKyAgICAgICAgICAgIHRyYXZlcnNlUnVsZURhdGFzKFsmXShSdWxlRGF0YSYgcnVsZURh
dGEpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWR5bmFtaWNSdWxlcy5hZmZlY3RlZFJ1bGVJbmRl
eGVzLmNvbnRhaW5zKHJ1bGVEYXRhLnBvc2l0aW9uKCkpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgcnVsZURhdGEuc2V0RW5hYmxlZChyZXN1bHQpOworICAg
ICAgICAgICAgICAgIGNoYW5nZXMgPSB0cnVlOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gY2hhbmdlcyA/IE1lZGlhUXVlcnlTdHlsZVVwZGF0ZVR5cGU6
OlJlc29sdmUgOiBNZWRpYVF1ZXJ5U3R5bGVVcGRhdGVUeXBlOjpOb25lOwogfQogCiBib29sIFJ1
bGVTZXQ6Omhhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcygpIGNvbnN0CkBAIC0zNTUsNSArNDY4
LDY3IEBAIHZvaWQgUnVsZVNldDo6c2hyaW5rVG9GaXQoKQogICAgIG1fZmVhdHVyZXMuc2hyaW5r
VG9GaXQoKTsKIH0KIAorUnVsZVNldDo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6fk1lZGlhUXVlcnlD
b2xsZWN0b3IoKSA9IGRlZmF1bHQ7CisKK2Jvb2wgUnVsZVNldDo6TWVkaWFRdWVyeUNvbGxlY3Rv
cjo6cHVzaEFuZEV2YWx1YXRlKE1lZGlhUXVlcnlTZXQqIHNldCkKK3sKKyAgICBpZiAoIXNldCkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBPbmx5IGV2YWx1YXRlIHN0YXRpYyBleHBy
ZXNzaW9ucyB0aGF0IHJlcXVpcmUgc3R5bGUgcmVidWlsZC4KKyAgICBNZWRpYVF1ZXJ5RHluYW1p
Y1Jlc3VsdHMgZHluYW1pY1Jlc3VsdHM7CisgICAgYXV0byBtb2RlID0gY29sbGVjdER5bmFtaWMg
PyBNZWRpYVF1ZXJ5RXZhbHVhdG9yOjpNb2RlOjpBbHdheXNNYXRjaER5bmFtaWMgOiBNZWRpYVF1
ZXJ5RXZhbHVhdG9yOjpNb2RlOjpOb3JtYWw7CisKKyAgICBib29sIHJlc3VsdCA9IGV2YWx1YXRv
ci5ldmFsdWF0ZSgqc2V0LCAmZHluYW1pY1Jlc3VsdHMsIG1vZGUpOworCisgICAgaWYgKCFkeW5h
bWljUmVzdWx0cy52aWV3cG9ydC5pc0VtcHR5KCkpCisgICAgICAgIGhhc1ZpZXdwb3J0RGVwZW5k
ZW50TWVkaWFRdWVyaWVzID0gdHJ1ZTsKKworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoIWR5bmFtaWNSZXN1bHRzLmlzRW1wdHkoKSkKKyAgICAgICAg
ZHluYW1pY0NvbnRleHRTdGFjay5hcHBlbmQoeyAqc2V0IH0pOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgUnVsZVNldDo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cG9wKE1lZGlhUXVlcnlT
ZXQqIHNldCkKK3sKKyAgICBpZiAoIXNldCB8fCBkeW5hbWljQ29udGV4dFN0YWNrLmlzRW1wdHko
KSB8fCBzZXQgIT0gJmR5bmFtaWNDb250ZXh0U3RhY2subGFzdCgpLnNldC5nZXQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCFkeW5hbWljQ29udGV4dFN0YWNrLmxhc3QoKS5hZmZlY3Rl
ZFJ1bGVJbmRleGVzLmlzRW1wdHkoKSkgeworICAgICAgICBEeW5hbWljTWVkaWFRdWVyeVJ1bGVz
IHJ1bGVzOworICAgICAgICBmb3IgKGF1dG8mIGNvbnRleHQgOiBkeW5hbWljQ29udGV4dFN0YWNr
KQorICAgICAgICAgICAgcnVsZXMubWVkaWFRdWVyeVNldHMuYXBwZW5kKGNvbnRleHQuc2V0Lmdl
dCgpKTsKKworICAgICAgICBpZiAoY29sbGVjdER5bmFtaWMpIHsKKyAgICAgICAgICAgIGF1dG8m
IHRvQWRkID0gZHluYW1pY0NvbnRleHRTdGFjay5sYXN0KCkuYWZmZWN0ZWRSdWxlSW5kZXhlczsK
KyAgICAgICAgICAgIHJ1bGVzLmFmZmVjdGVkUnVsZUluZGV4ZXMuYWRkKHRvQWRkLmJlZ2luKCks
IHRvQWRkLmVuZCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBydWxlcy5yZXF1aXJl
c0Z1bGxSZXNldCA9IHRydWU7CisKKyAgICAgICAgZHluYW1pY01lZGlhUXVlcnlSdWxlcy5hcHBl
bmQoV1RGTW92ZShydWxlcykpOworICAgIH0KKworICAgIGR5bmFtaWNDb250ZXh0U3RhY2sucmVt
b3ZlTGFzdCgpOworfQorCit2b2lkIFJ1bGVTZXQ6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OmRpZE11
dGF0ZVJlc29sdmVyKCkKK3sKKyAgICBpZiAoZHluYW1pY0NvbnRleHRTdGFjay5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKyAgICBkaWRNdXRhdGVSZXNvbHZlcldpdGhpbkR5bmFtaWNNZWRp
YVF1ZXJ5ID0gdHJ1ZTsKK30KKwordm9pZCBSdWxlU2V0OjpNZWRpYVF1ZXJ5Q29sbGVjdG9yOjph
ZGRSdWxlSW5kZXhJZk5lZWRlZChzaXplX3QgaW5kZXgpCit7CisgICAgaWYgKGR5bmFtaWNDb250
ZXh0U3RhY2suaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgZHluYW1pY0NvbnRleHRT
dGFjay5sYXN0KCkuYWZmZWN0ZWRSdWxlSW5kZXhlcy5hcHBlbmQoaW5kZXgpOworfQorCisKIH0g
Ly8gbmFtZXNwYWNlIFN0eWxlCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxl
U2V0LmgKaW5kZXggOGNmZTVjYmI1ZmYuLjQ5OTk4NjhjODVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9SdWxlU2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNl
dC5oCkBAIC0yMSw2ICsyMSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiTWVkaWFM
aXN0LmgiCiAjaW5jbHVkZSAiUnVsZURhdGEuaCIKICNpbmNsdWRlICJSdWxlRmVhdHVyZS5oIgog
I2luY2x1ZGUgIlNlbGVjdG9yQ29tcGlsZXIuaCIKQEAgLTM1LDcgKzM2LDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgQ1NTU2VsZWN0b3I7CiBjbGFzcyBNZWRpYVF1ZXJ5RXZhbHVhdG9y
OwogY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwotc3RydWN0IE1lZGlhUXVlcnlEeW5hbWljUmVz
dWx0czsKIAogbmFtZXNwYWNlIFN0eWxlIHsKIApAQCAtNjIsMTUgKzYyLDUwIEBAIHB1YmxpYzoK
ICAgICB0eXBlZGVmIFZlY3RvcjxSdWxlRGF0YSwgMT4gUnVsZURhdGFWZWN0b3I7CiAgICAgdHlw
ZWRlZiBIYXNoTWFwPEF0b21TdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxSdWxlRGF0YVZlY3Rvcj4+
IEF0b21SdWxlTWFwOwogCi0gICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29u
dGVudHMmLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgU3R5bGU6OlJlc29sdmVyKiA9IG51
bGxwdHIpOworICAgIHN0cnVjdCBEeW5hbWljTWVkaWFRdWVyeVJ1bGVzIHsKKyAgICAgICAgVmVj
dG9yPFJlZjxNZWRpYVF1ZXJ5U2V0Pj4gbWVkaWFRdWVyeVNldHM7CisgICAgICAgIEhhc2hTZXQ8
c2l6ZV90LCBEZWZhdWx0SGFzaDxzaXplX3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPHNpemVfdD4+IGFmZmVjdGVkUnVsZUluZGV4ZXM7CisgICAgICAgIGJvb2wg
cmVxdWlyZXNGdWxsUmVzZXQgeyBmYWxzZSB9OworICAgICAgICBib29sIHJlc3VsdCB7IHRydWUg
fTsKKyAgICB9OworCisgICAgc3RydWN0IE1lZGlhUXVlcnlDb2xsZWN0b3IgeworICAgICAgICB+
TWVkaWFRdWVyeUNvbGxlY3RvcigpOworCisgICAgICAgIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0
b3ImIGV2YWx1YXRvcjsKKyAgICAgICAgY29uc3QgYm9vbCBjb2xsZWN0RHluYW1pYyB7IGZhbHNl
IH07CiAKLSAgICB2b2lkIGFkZFN0eWxlUnVsZShTdHlsZVJ1bGUqKTsKKyAgICAgICAgc3RydWN0
IER5bmFtaWNDb250ZXh0IHsKKyAgICAgICAgICAgIFJlZjxNZWRpYVF1ZXJ5U2V0PiBzZXQ7Cisg
ICAgICAgICAgICBWZWN0b3I8c2l6ZV90PiBhZmZlY3RlZFJ1bGVJbmRleGVzIHsgfTsKKyAgICAg
ICAgfTsKKyAgICAgICAgVmVjdG9yPER5bmFtaWNDb250ZXh0PiBkeW5hbWljQ29udGV4dFN0YWNr
IHsgfTsKKworICAgICAgICBWZWN0b3I8RHluYW1pY01lZGlhUXVlcnlSdWxlcz4gZHluYW1pY01l
ZGlhUXVlcnlSdWxlcyB7IH07CisgICAgICAgIGJvb2wgZGlkTXV0YXRlUmVzb2x2ZXJXaXRoaW5E
eW5hbWljTWVkaWFRdWVyeSB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgaGFzVmlld3BvcnREZXBl
bmRlbnRNZWRpYVF1ZXJpZXMgeyBmYWxzZSB9OworCisgICAgICAgIGJvb2wgcHVzaEFuZEV2YWx1
YXRlKE1lZGlhUXVlcnlTZXQqKTsKKyAgICAgICAgdm9pZCBwb3AoTWVkaWFRdWVyeVNldCopOwor
ICAgICAgICB2b2lkIGRpZE11dGF0ZVJlc29sdmVyKCk7CisgICAgICAgIHZvaWQgYWRkUnVsZUlu
ZGV4SWZOZWVkZWQoc2l6ZV90KTsKKyAgICB9OworCisgICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVl
dChTdHlsZVNoZWV0Q29udGVudHMmLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJik7CisgICAg
dm9pZCBhZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVudHMmLCBNZWRpYVF1ZXJ5U2V0
KiBzaGVldFF1ZXJ5LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgU3R5bGU6OlJlc29sdmVy
Jik7CisKKyAgICB2b2lkIGFkZFN0eWxlUnVsZShTdHlsZVJ1bGUmLCBNZWRpYVF1ZXJ5Q29sbGVj
dG9yJik7CiAgICAgdm9pZCBhZGRSdWxlKFN0eWxlUnVsZSosIHVuc2lnbmVkIHNlbGVjdG9ySW5k
ZXgsIHVuc2lnbmVkIHNlbGVjdG9yTGlzdEluZGV4KTsKLSAgICB2b2lkIGFkZFBhZ2VSdWxlKFN0
eWxlUnVsZVBhZ2UqKTsKKyAgICB2b2lkIGFkZFBhZ2VSdWxlKFN0eWxlUnVsZVBhZ2UmKTsKICAg
ICB2b2lkIGFkZFRvUnVsZVNldChjb25zdCBBdG9tU3RyaW5nJiBrZXksIEF0b21SdWxlTWFwJiwg
Y29uc3QgUnVsZURhdGEmKTsKICAgICB2b2lkIHNocmlua1RvRml0KCk7CiAgICAgdm9pZCBkaXNh
YmxlQXV0b1Nocmlua1RvRml0KCkgeyBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQgPSBmYWxzZTsg
fQogCisgICAgYm9vbCBoYXNWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcmllcygpIGNvbnN0IHsg
cmV0dXJuIG1faGFzVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXM7IH0KKworICAgIGVudW0g
Y2xhc3MgTWVkaWFRdWVyeVN0eWxlVXBkYXRlVHlwZSB7IE5vbmUsIFJlc29sdmUsIFJlc2V0IH07
CisgICAgTWVkaWFRdWVyeVN0eWxlVXBkYXRlVHlwZSBldmFsdXRlRHluYW1pY01lZGlhUXVlcnlS
dWxlcyhjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJik7CisKICAgICBjb25zdCBSdWxlRmVhdHVy
ZVNldCYgZmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzOyB9CiAKICAgICBjb25z
dCBSdWxlRGF0YVZlY3RvciogaWRSdWxlcyhjb25zdCBBdG9tU3RyaW5nJiBrZXkpIGNvbnN0IHsg
cmV0dXJuIG1faWRSdWxlcy5nZXQoa2V5KTsgfQpAQCAtOTUsNyArMTMwLDExIEBAIHB1YmxpYzoK
ICAgICBib29sIGhhc0hvc3RQc2V1ZG9DbGFzc1J1bGVzTWF0Y2hpbmdJblNoYWRvd1RyZWUoKSBj
b25zdCB7IHJldHVybiBtX2hhc0hvc3RQc2V1ZG9DbGFzc1J1bGVzTWF0Y2hpbmdJblNoYWRvd1Ry
ZWU7IH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIGFkZENoaWxkUnVsZXMoY29uc3QgVmVjdG9yPFJl
ZlB0cjxTdHlsZVJ1bGVCYXNlPj4mLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRpdW0s
IFN0eWxlOjpSZXNvbHZlciosIE1lZGlhUXVlcnlEeW5hbWljUmVzdWx0cyYpOworICAgIGVudW0g
Y2xhc3MgQWRkUnVsZXNNb2RlIHsgTm9ybWFsLCBSZXNvbHZlck11dGF0aW9uU2NhbiB9OworICAg
IHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzJiwgTWVkaWFRdWVyeUNv
bGxlY3RvciYsIFN0eWxlOjpSZXNvbHZlciosIEFkZFJ1bGVzTW9kZSk7CisgICAgdm9pZCBhZGRD
aGlsZFJ1bGVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4+JiwgTWVkaWFRdWVy
eUNvbGxlY3RvciYsIFN0eWxlOjpSZXNvbHZlciosIEFkZFJ1bGVzTW9kZSk7CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdGlvbj4gdm9pZCB0cmF2ZXJzZVJ1bGVEYXRhcyhGdW5jdGlvbiYm
KTsKIAogICAgIEF0b21SdWxlTWFwIG1faWRSdWxlczsKICAgICBBdG9tUnVsZU1hcCBtX2NsYXNz
UnVsZXM7CkBAIC0xMTYsNiArMTU1LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1faGFzSG9zdFBz
ZXVkb0NsYXNzUnVsZXNNYXRjaGluZ0luU2hhZG93VHJlZSB7IGZhbHNlIH07CiAgICAgYm9vbCBt
X2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQgeyB0cnVlIH07CiAgICAgUnVsZUZlYXR1cmVTZXQgbV9m
ZWF0dXJlczsKKyAgICBib29sIG1faGFzVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXMgeyBm
YWxzZSB9OworICAgIFZlY3RvcjxEeW5hbWljTWVkaWFRdWVyeVJ1bGVzPiBtX2R5bmFtaWNNZWRp
YVF1ZXJ5UnVsZXM7CiB9OwogCiBpbmxpbmUgY29uc3QgUnVsZVNldDo6UnVsZURhdGFWZWN0b3Iq
IFJ1bGVTZXQ6OnRhZ1J1bGVzKGNvbnN0IEF0b21TdHJpbmcmIGtleSwgYm9vbCBpc0hUTUxOYW1l
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVyLmNwcAppbmRleCA4OGQ0ZDFk
M2Y1NC4uMzU5NDRkMTg2ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
UmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZXIuY3Bw
CkBAIC02MDIsMzkgKzYwMiwxNCBAQCB2b2lkIFJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0
aWVzKFN0YXRlJiBzdGF0ZSwgY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdQogICAgICAgICBt
X21hdGNoZWREZWNsYXJhdGlvbnNDYWNoZS5hZGQoc3R5bGUsIHBhcmVudFN0eWxlLCBjYWNoZUhh
c2gsIG1hdGNoUmVzdWx0KTsKIH0KIAotdm9pZCBSZXNvbHZlcjo6YWRkTWVkaWFRdWVyeUR5bmFt
aWNSZXN1bHRzKGNvbnN0IE1lZGlhUXVlcnlEeW5hbWljUmVzdWx0cyYgcmVzdWx0cykKK2Jvb2wg
UmVzb2x2ZXI6Omhhc1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzKCkgY29uc3QKIHsKLSAg
ICBtX21lZGlhUXVlcnlEeW5hbWljUmVzdWx0cy5hcHBlbmQocmVzdWx0cyk7CisgICAgcmV0dXJu
IG1fcnVsZVNldHMuaGFzVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXMoKTsKIH0KIAotYm9v
bCBSZXNvbHZlcjo6aGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeVZpZXdwb3J0Q2hhbmdlKCkgY29u
c3QKK1J1bGVTZXQ6Ok1lZGlhUXVlcnlTdHlsZVVwZGF0ZVR5cGUgUmVzb2x2ZXI6OmV2YWx1YXRl
RHluYW1pY01lZGlhUXVlcmllcygpCiB7Ci0gICAgTE9HKE1lZGlhUXVlcmllcywgIlN0eWxlOjpS
ZXNvbHZlcjo6aGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeVZpZXdwb3J0Q2hhbmdlIGV2YWx1YXRp
bmcgcXVlcmllcyIpOwotICAgIGZvciAoYXV0byYgcmVzdWx0IDogbV9tZWRpYVF1ZXJ5RHluYW1p
Y1Jlc3VsdHMudmlld3BvcnQpIHsKLSAgICAgICAgaWYgKG1fbWVkaWFRdWVyeUV2YWx1YXRvci5l
dmFsdWF0ZShyZXN1bHQuZXhwcmVzc2lvbikgIT0gcmVzdWx0LnJlc3VsdCkKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVzb2x2
ZXI6Omhhc01lZGlhUXVlcmllc0FmZmVjdGVkQnlBY2Nlc3NpYmlsaXR5U2V0dGluZ3NDaGFuZ2Uo
KSBjb25zdAotewotICAgIExPRyhNZWRpYVF1ZXJpZXMsICJTdHlsZTo6UmVzb2x2ZXI6Omhhc01l
ZGlhUXVlcmllc0FmZmVjdGVkQnlBY2Nlc3NpYmlsaXR5U2V0dGluZ3NDaGFuZ2UgZXZhbHVhdGlu
ZyBxdWVyaWVzIik7Ci0gICAgZm9yIChhdXRvJiByZXN1bHQgOiBtX21lZGlhUXVlcnlEeW5hbWlj
UmVzdWx0cy5hY2Nlc3NpYmlsaXR5U2V0dGluZ3MpIHsKLSAgICAgICAgaWYgKG1fbWVkaWFRdWVy
eUV2YWx1YXRvci5ldmFsdWF0ZShyZXN1bHQuZXhwcmVzc2lvbikgIT0gcmVzdWx0LnJlc3VsdCkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgUmVzb2x2ZXI6Omhhc01lZGlhUXVlcmllc0FmZmVjdGVkQnlBcHBlYXJhbmNlQ2hhbmdl
KCkgY29uc3QKLXsKLSAgICBMT0coTWVkaWFRdWVyaWVzLCAiU3R5bGU6OlJlc29sdmVyOjpoYXNN
ZWRpYVF1ZXJpZXNBZmZlY3RlZEJ5QXBwZWFyYW5jZUNoYW5nZSBldmFsdWF0aW5nIHF1ZXJpZXMi
KTsKLSAgICBmb3IgKGF1dG8mIHJlc3VsdCA6IG1fbWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzLmFw
cGVhcmFuY2UpIHsKLSAgICAgICAgaWYgKG1fbWVkaWFRdWVyeUV2YWx1YXRvci5ldmFsdWF0ZShy
ZXN1bHQuZXhwcmVzc2lvbikgIT0gcmVzdWx0LnJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fcnVsZVNldHMuZXZh
bHV0ZUR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMobV9tZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgU3R5bGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZXIuaAppbmRl
eCBlN2UzZjc3MDFlNS4uMmVkNWZlODVjOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0
eWxlL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29s
dmVyLmgKQEAgLTEzMSwxNSArMTMxLDggQEAgcHVibGljOgogICAgIFZpZXdwb3J0U3R5bGVSZXNv
bHZlciogdmlld3BvcnRTdHlsZVJlc29sdmVyKCkgeyByZXR1cm4gbV92aWV3cG9ydFN0eWxlUmVz
b2x2ZXIuZ2V0KCk7IH0KICNlbmRpZgogCi0gICAgdm9pZCBhZGRNZWRpYVF1ZXJ5RHluYW1pY1Jl
c3VsdHMoY29uc3QgTWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzJik7Ci0gICAgYm9vbCBoYXNWaWV3
cG9ydERlcGVuZGVudE1lZGlhUXVlcmllcygpIGNvbnN0IHsgcmV0dXJuICFtX21lZGlhUXVlcnlE
eW5hbWljUmVzdWx0cy52aWV3cG9ydC5pc0VtcHR5KCk7IH0KLSAgICBib29sIGhhc01lZGlhUXVl
cmllc0FmZmVjdGVkQnlWaWV3cG9ydENoYW5nZSgpIGNvbnN0OwotCi0gICAgYm9vbCBoYXNBY2Nl
c3NpYmlsaXR5U2V0dGluZ3NEZXBlbmRlbnRNZWRpYVF1ZXJpZXMoKSBjb25zdCB7IHJldHVybiAh
bV9tZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMuYWNjZXNzaWJpbGl0eVNldHRpbmdzLmlzRW1wdHko
KTsgfQotICAgIGJvb2wgaGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeUFjY2Vzc2liaWxpdHlTZXR0
aW5nc0NoYW5nZSgpIGNvbnN0OwotCi0gICAgYm9vbCBoYXNBcHBlYXJhbmNlRGVwZW5kZW50TWVk
aWFRdWVyaWVzKCkgY29uc3QgeyByZXR1cm4gIW1fbWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzLmFw
cGVhcmFuY2UuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBoYXNNZWRpYVF1ZXJpZXNBZmZlY3RlZEJ5
QXBwZWFyYW5jZUNoYW5nZSgpIGNvbnN0OworICAgIGJvb2wgaGFzVmlld3BvcnREZXBlbmRlbnRN
ZWRpYVF1ZXJpZXMoKSBjb25zdDsKKyAgICBSdWxlU2V0OjpNZWRpYVF1ZXJ5U3R5bGVVcGRhdGVU
eXBlIGV2YWx1YXRlRHluYW1pY01lZGlhUXVlcmllcygpOwogCiAgICAgdm9pZCBhZGRLZXlmcmFt
ZVN0eWxlKFJlZjxTdHlsZVJ1bGVLZXlmcmFtZXM+JiYpOwogCkBAIC0yMDAsOCArMTkzLDYgQEAg
cHJpdmF0ZToKIAogICAgIFJlbmRlclN0eWxlKiBtX292ZXJyaWRlRG9jdW1lbnRFbGVtZW50U3R5
bGUgeyBudWxscHRyIH07CiAKLSAgICBNZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMgbV9tZWRpYVF1
ZXJ5RHluYW1pY1Jlc3VsdHM7Ci0KICNpZiBFTkFCTEUoQ1NTX0RFVklDRV9BREFQVEFUSU9OKQog
ICAgIFJlZlB0cjxWaWV3cG9ydFN0eWxlUmVzb2x2ZXI+IG1fdmlld3BvcnRTdHlsZVJlc29sdmVy
OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUuY3BwCmluZGV4IDNjOWZkODhhMmNi
Li5hOTM0ODExODA2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29w
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5jcHAKQEAgLTYyMiwy
MSArNjIyLDIxIEBAIHZvaWQgU2NvcGU6OnNjaGVkdWxlVXBkYXRlKFVwZGF0ZVR5cGUgdXBkYXRl
KQogdm9pZCBTY29wZTo6ZXZhbHVhdGVNZWRpYVF1ZXJpZXNGb3JWaWV3cG9ydENoYW5nZSgpCiB7
CiAgICAgZXZhbHVhdGVNZWRpYVF1ZXJpZXMoW10gKFJlc29sdmVyJiByZXNvbHZlcikgewotICAg
ICAgICByZXR1cm4gcmVzb2x2ZXIuaGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeVZpZXdwb3J0Q2hh
bmdlKCk7CisgICAgICAgIHJldHVybiByZXNvbHZlci5ldmFsdWF0ZUR5bmFtaWNNZWRpYVF1ZXJp
ZXMoKTsKICAgICB9KTsKIH0KIAogdm9pZCBTY29wZTo6ZXZhbHVhdGVNZWRpYVF1ZXJpZXNGb3JB
Y2Nlc3NpYmlsaXR5U2V0dGluZ3NDaGFuZ2UoKQogewogICAgIGV2YWx1YXRlTWVkaWFRdWVyaWVz
KFtdIChSZXNvbHZlciYgcmVzb2x2ZXIpIHsKLSAgICAgICAgcmV0dXJuIHJlc29sdmVyLmhhc01l
ZGlhUXVlcmllc0FmZmVjdGVkQnlBY2Nlc3NpYmlsaXR5U2V0dGluZ3NDaGFuZ2UoKTsKKyAgICAg
ICAgcmV0dXJuIHJlc29sdmVyLmV2YWx1YXRlRHluYW1pY01lZGlhUXVlcmllcygpOwogICAgIH0p
OwogfQogCiB2b2lkIFNjb3BlOjpldmFsdWF0ZU1lZGlhUXVlcmllc0ZvckFwcGVhcmFuY2VDaGFu
Z2UoKQogewogICAgIGV2YWx1YXRlTWVkaWFRdWVyaWVzKFtdIChSZXNvbHZlciYgcmVzb2x2ZXIp
IHsKLSAgICAgICAgcmV0dXJuIHJlc29sdmVyLmhhc01lZGlhUXVlcmllc0FmZmVjdGVkQnlBcHBl
YXJhbmNlQ2hhbmdlKCk7CisgICAgICAgIHJldHVybiByZXNvbHZlci5ldmFsdWF0ZUR5bmFtaWNN
ZWRpYVF1ZXJpZXMoKTsKICAgICB9KTsKIH0KIApAQCAtNjUwLDkgKzY1MCwyMiBAQCB2b2lkIFNj
b3BlOjpldmFsdWF0ZU1lZGlhUXVlcmllcyhUZXN0RnVuY3Rpb24mJiB0ZXN0RnVuY3Rpb24pCiAg
ICAgYXV0byogcmVzb2x2ZXIgPSByZXNvbHZlcklmRXhpc3RzKCk7CiAgICAgaWYgKCFyZXNvbHZl
cikKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghdGVzdEZ1bmN0aW9uKCpyZXNvbHZlcikpCisK
KyAgICBhdXRvIHVwZGF0ZVR5cGUgPSB0ZXN0RnVuY3Rpb24oKnJlc29sdmVyKTsKKworICAgIHN3
aXRjaCAodXBkYXRlVHlwZSkgeworICAgIGNhc2UgUnVsZVNldDo6TWVkaWFRdWVyeVN0eWxlVXBk
YXRlVHlwZTo6Tm9uZToKICAgICAgICAgcmV0dXJuOwotICAgIHNjaGVkdWxlVXBkYXRlKFVwZGF0
ZVR5cGU6OkNvbnRlbnRzT3JJbnRlcnByZXRhdGlvbik7CisgICAgY2FzZSBSdWxlU2V0OjpNZWRp
YVF1ZXJ5U3R5bGVVcGRhdGVUeXBlOjpSZXNvbHZlOgorICAgICAgICAvLyBGSVhNRTogV2UgY291
bGQgaGF2ZSBhbiBpbnZhbGlkYXRpb24gcnVsZXNldCBmb3IgcnVsZXMgaW5zaWRlIGR5bmFtaWMg
bWVkaWEgcXVlcmllcy4KKyAgICAgICAgaWYgKGF1dG8qIGRvY3VtZW50RWxlbWVudCA9IG1fZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAgICAgICBkb2N1bWVudEVsZW1lbnQtPmlu
dmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSdWxl
U2V0OjpNZWRpYVF1ZXJ5U3R5bGVVcGRhdGVUeXBlOjpSZXNldDoKKyAgICAgICAgc2NoZWR1bGVV
cGRhdGUoVXBkYXRlVHlwZTo6Q29udGVudHNPckludGVycHJldGF0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjptZWRpYVF1ZXJ5UmVz
dWx0Q2hhbmdlZChtX2RvY3VtZW50KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3R5bGUvU3R5bGVTY29wZVJ1bGVTZXRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
U2NvcGVSdWxlU2V0cy5jcHAKaW5kZXggOGUwNGQ3MGY2ODIuLjI4MGRjMGQ2YTk1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGVSdWxlU2V0cy5jcHAKQEAgLTcwLDE4ICs3MCwx
MSBAQCB2b2lkIFNjb3BlUnVsZVNldHM6OnVwZGF0ZVVzZXJBZ2VudE1lZGlhUXVlcnlTdHlsZUlm
TmVlZGVkKCkgY29uc3QKICAgICAgICAgcmV0dXJuOwogICAgIG1fdXNlckFnZW50TWVkaWFRdWVy
eVJ1bGVDb3VudE9uVXBkYXRlID0gcnVsZUNvdW50OwogCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAot
ICAgIGJvb2wgaGFkVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXMgPSBtX3N0eWxlUmVzb2x2
ZXIuaGFzVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXMoKTsKLSNlbmRpZgotCiAgICAgLy8g
TWVkaWEgcXVlcmllcyBvbiB1c2VyIGFnZW50IHNoZWV0IG5lZWQgdG8gZXZhbHVhdGVkIGluIGRv
Y3VtZW50IGNvbnRleHQuIFRoZXkgYmVoYXZlIGxpa2UgYXV0aG9yIHNoZWV0cyBpbiB0aGlzIHJl
c3BlY3QuCiAgICAgYXV0byYgbWVkaWFRdWVyeUV2YWx1YXRvciA9IG1fc3R5bGVSZXNvbHZlci5t
ZWRpYVF1ZXJ5RXZhbHVhdG9yKCk7CiAgICAgbV91c2VyQWdlbnRNZWRpYVF1ZXJ5U3R5bGUgPSBt
YWtlVW5pcXVlPFJ1bGVTZXQ+KCk7CiAgICAgCi0gICAgbV91c2VyQWdlbnRNZWRpYVF1ZXJ5U3R5
bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KCpVc2VyQWdlbnRTdHlsZTo6bWVkaWFRdWVyeVN0eWxlU2hl
ZXQsIG1lZGlhUXVlcnlFdmFsdWF0b3IsICZtX3N0eWxlUmVzb2x2ZXIpOwotCi0gICAgLy8gVmll
d3BvcnQgZGVwZW5kZW50IHF1ZXJpZXMgYXJlIGN1cnJlbnRseSB0b28gaW5lZmZpY2llbnQgdG8g
YWxsb3cgb24gVUEgc2hlZXQuCi0gICAgQVNTRVJUKCFtX3N0eWxlUmVzb2x2ZXIuaGFzVmlld3Bv
cnREZXBlbmRlbnRNZWRpYVF1ZXJpZXMoKSB8fCBoYWRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVl
cmllcyk7CisgICAgbV91c2VyQWdlbnRNZWRpYVF1ZXJ5U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0
KCpVc2VyQWdlbnRTdHlsZTo6bWVkaWFRdWVyeVN0eWxlU2hlZXQsIG51bGxwdHIsIG1lZGlhUXVl
cnlFdmFsdWF0b3IsIG1fc3R5bGVSZXNvbHZlcik7CiB9CiAKIFJ1bGVTZXQqIFNjb3BlUnVsZVNl
dHM6OnVzZXJTdHlsZSgpIGNvbnN0CkBAIC05Nyw3ICs5MCw3IEBAIHZvaWQgU2NvcGVSdWxlU2V0
czo6aW5pdGlhbGl6ZVVzZXJTdHlsZSgpCiAgICAgYXV0byYgbWVkaWFRdWVyeUV2YWx1YXRvciA9
IG1fc3R5bGVSZXNvbHZlci5tZWRpYVF1ZXJ5RXZhbHVhdG9yKCk7CiAgICAgYXV0byB0ZW1wVXNl
clN0eWxlID0gbWFrZVVuaXF1ZTxSdWxlU2V0PigpOwogICAgIGlmIChDU1NTdHlsZVNoZWV0KiBw
YWdlVXNlclNoZWV0ID0gZXh0ZW5zaW9uU3R5bGVTaGVldHMucGFnZVVzZXJTaGVldCgpKQotICAg
ICAgICB0ZW1wVXNlclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChwYWdlVXNlclNoZWV0LT5jb250
ZW50cygpLCBtZWRpYVF1ZXJ5RXZhbHVhdG9yLCAmbV9zdHlsZVJlc29sdmVyKTsKKyAgICAgICAg
dGVtcFVzZXJTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocGFnZVVzZXJTaGVldC0+Y29udGVudHMo
KSwgbnVsbHB0ciwgbWVkaWFRdWVyeUV2YWx1YXRvciwgbV9zdHlsZVJlc29sdmVyKTsKICAgICBj
b2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKGV4dGVuc2lvblN0eWxlU2hlZXRzLmluamVj
dGVkVXNlclN0eWxlU2hlZXRzKCksICp0ZW1wVXNlclN0eWxlLCBtZWRpYVF1ZXJ5RXZhbHVhdG9y
KTsKICAgICBjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKGV4dGVuc2lvblN0eWxlU2hl
ZXRzLmRvY3VtZW50VXNlclN0eWxlU2hlZXRzKCksICp0ZW1wVXNlclN0eWxlLCBtZWRpYVF1ZXJ5
RXZhbHVhdG9yKTsKICAgICBpZiAodGVtcFVzZXJTdHlsZS0+cnVsZUNvdW50KCkgPiAwIHx8IHRl
bXBVc2VyU3R5bGUtPnBhZ2VSdWxlcygpLnNpemUoKSA+IDApCkBAIC0xMDgsNyArMTAxLDcgQEAg
dm9pZCBTY29wZVJ1bGVTZXRzOjpjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKGNvbnN0
IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGUKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dXNlclNoZWV0cy5zaXplKCk7ICsraSkgewogICAgICAgICBBU1NFUlQodXNlclNoZWV0c1tpXS0+
Y29udGVudHMoKS5pc1VzZXJTdHlsZVNoZWV0KCkpOwotICAgICAgICB1c2VyU3R5bGUuYWRkUnVs
ZXNGcm9tU2hlZXQodXNlclNoZWV0c1tpXS0+Y29udGVudHMoKSwgbWVkaXVtLCAmbV9zdHlsZVJl
c29sdmVyKTsKKyAgICAgICAgdXNlclN0eWxlLmFkZFJ1bGVzRnJvbVNoZWV0KHVzZXJTaGVldHNb
aV0tPmNvbnRlbnRzKCksIG51bGxwdHIsIG1lZGl1bSwgbV9zdHlsZVJlc29sdmVyKTsKICAgICB9
CiB9CiAKQEAgLTEzNiwyMiArMTI5LDQ5IEBAIHZvaWQgU2NvcGVSdWxlU2V0czo6cmVzZXRVc2Vy
QWdlbnRNZWRpYVF1ZXJ5U3R5bGUoKQogICAgIG1fdXNlckFnZW50TWVkaWFRdWVyeVN0eWxlID0g
bnVsbHB0cjsKIH0KIAotdm9pZCBTY29wZVJ1bGVTZXRzOjphcHBlbmRBdXRob3JTdHlsZVNoZWV0
cyhjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgc3R5bGVTaGVldHMsIE1lZGlh
UXVlcnlFdmFsdWF0b3IqIG1lZGl1bSwgSW5zcGVjdG9yQ1NTT01XcmFwcGVycyYgaW5zcGVjdG9y
Q1NTT01XcmFwcGVycykKK2Jvb2wgU2NvcGVSdWxlU2V0czo6aGFzVmlld3BvcnREZXBlbmRlbnRN
ZWRpYVF1ZXJpZXMoKSBjb25zdAoreworICAgIGlmIChtX2F1dGhvclN0eWxlLT5oYXNWaWV3cG9y
dERlcGVuZGVudE1lZGlhUXVlcmllcygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAo
bV91c2VyU3R5bGUgJiYgbV91c2VyU3R5bGUtPmhhc1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVy
aWVzKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChtX3VzZXJBZ2VudE1lZGlhUXVl
cnlTdHlsZSAmJiBtX3VzZXJBZ2VudE1lZGlhUXVlcnlTdHlsZS0+aGFzVmlld3BvcnREZXBlbmRl
bnRNZWRpYVF1ZXJpZXMoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK1J1bGVTZXQ6Ok1lZGlhUXVlcnlTdHlsZVVwZGF0ZVR5cGUgU2NvcGVSdWxlU2V0
czo6ZXZhbHV0ZUR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMoY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRv
ciYgZXZhbHVhdG9yKQogewotICAgIC8vIFRoaXMgaGFuZGxlcyBzaGVldHMgYWRkZWQgdG8gdGhl
IGVuZCBvZiB0aGUgc3R5bGVzaGVldCBsaXN0IG9ubHkuIEluIG90aGVyIGNhc2VzIHRoZSBzdHls
ZSByZXNvbHZlcgotICAgIC8vIG5lZWRzIHRvIGJlIHJlY29uc3RydWN0ZWQuIFRvIGhhbmRsZSBp
bnNlcnRpb25zIHRvbyB0aGUgcnVsZSBvcmRlciBudW1iZXJzIHdvdWxkIG5lZWQgdG8gYmUgdXBk
YXRlZC4KLSAgICBNZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMgbWVkaWFRdWVyeUR5bmFtaWNSZXN1
bHRzOworICAgIGF1dG8gdXBkYXRlVHlwZSA9IFJ1bGVTZXQ6Ok1lZGlhUXVlcnlTdHlsZVVwZGF0
ZVR5cGU6Ok5vbmU7CisKKyAgICBhdXRvIGV2YWx1YXRlID0gWyZdKGF1dG8mIHJ1bGVTZXQpIHsK
KyAgICAgICAgaWYgKCFydWxlU2V0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBhdXRvIG5ld1VwZGF0ZVR5cGUgPSBydWxlU2V0LT5ldmFsdXRlRHluYW1pY01lZGlhUXVlcnlS
dWxlcyhldmFsdWF0b3IpOworICAgICAgICBpZiAobmV3VXBkYXRlVHlwZSA+IHVwZGF0ZVR5cGUp
CisgICAgICAgICAgICB1cGRhdGVUeXBlID0gbmV3VXBkYXRlVHlwZTsKKyAgICAgICAgcmV0dXJu
IHVwZGF0ZVR5cGUgPT0gUnVsZVNldDo6TWVkaWFRdWVyeVN0eWxlVXBkYXRlVHlwZTo6UmVzZXQ7
CisgICAgfTsKKworICAgIGlmIChldmFsdWF0ZShtX2F1dGhvclN0eWxlKSkKKyAgICAgICAgcmV0
dXJuIHVwZGF0ZVR5cGU7CisKKyAgICBpZiAoZXZhbHVhdGUobV91c2VyU3R5bGUpKQorICAgICAg
ICByZXR1cm4gdXBkYXRlVHlwZTsKKworICAgIGV2YWx1YXRlKG1fdXNlckFnZW50TWVkaWFRdWVy
eVN0eWxlKTsKKyAgICByZXR1cm4gdXBkYXRlVHlwZTsKK30KIAordm9pZCBTY29wZVJ1bGVTZXRz
OjphcHBlbmRBdXRob3JTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hl
ZXQ+PiYgc3R5bGVTaGVldHMsIE1lZGlhUXVlcnlFdmFsdWF0b3IqIG1lZGl1bSwgSW5zcGVjdG9y
Q1NTT01XcmFwcGVycyYgaW5zcGVjdG9yQ1NTT01XcmFwcGVycykKK3sKICAgICBmb3IgKGF1dG8m
IGNzc1NoZWV0IDogc3R5bGVTaGVldHMpIHsKICAgICAgICAgQVNTRVJUKCFjc3NTaGVldC0+ZGlz
YWJsZWQoKSk7Ci0gICAgICAgIGlmIChjc3NTaGVldC0+bWVkaWFRdWVyaWVzKCkgJiYgIW1lZGl1
bS0+ZXZhbHVhdGUoKmNzc1NoZWV0LT5tZWRpYVF1ZXJpZXMoKSwgJm1lZGlhUXVlcnlEeW5hbWlj
UmVzdWx0cykpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV9hdXRob3JTdHlsZS0+
YWRkUnVsZXNGcm9tU2hlZXQoY3NzU2hlZXQtPmNvbnRlbnRzKCksICptZWRpdW0sICZtX3N0eWxl
UmVzb2x2ZXIpOworICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChjc3NT
aGVldC0+Y29udGVudHMoKSwgY3NzU2hlZXQtPm1lZGlhUXVlcmllcygpLCAqbWVkaXVtLCBtX3N0
eWxlUmVzb2x2ZXIpOwogICAgICAgICBpbnNwZWN0b3JDU1NPTVdyYXBwZXJzLmNvbGxlY3RGcm9t
U3R5bGVTaGVldElmTmVlZGVkKGNzc1NoZWV0LmdldCgpKTsKICAgICB9CiAKLSAgICBtX3N0eWxl
UmVzb2x2ZXIuYWRkTWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzKG1lZGlhUXVlcnlEeW5hbWljUmVz
dWx0cyk7Ci0KICAgICBtX2F1dGhvclN0eWxlLT5zaHJpbmtUb0ZpdCgpOwogICAgIGNvbGxlY3RG
ZWF0dXJlcygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29w
ZVJ1bGVTZXRzLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuaApp
bmRleCA0YjdhYTdmMjE3My4uNDRiNWM1OTYyNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlU2NvcGVSdWxlU2V0cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlU2NvcGVSdWxlU2V0cy5oCkBAIC03OCw2ICs3OCw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
cmVzZXRVc2VyQWdlbnRNZWRpYVF1ZXJ5U3R5bGUoKTsKIAorICAgIGJvb2wgaGFzVmlld3BvcnRE
ZXBlbmRlbnRNZWRpYVF1ZXJpZXMoKSBjb25zdDsKKyAgICBSdWxlU2V0OjpNZWRpYVF1ZXJ5U3R5
bGVVcGRhdGVUeXBlIGV2YWx1dGVEeW5hbWljTWVkaWFRdWVyeVJ1bGVzKGNvbnN0IE1lZGlhUXVl
cnlFdmFsdWF0b3ImKTsKKwogICAgIFJ1bGVGZWF0dXJlU2V0JiBtdXRhYmxlRmVhdHVyZXMoKTsK
IAogICAgIGJvb2wmIGlzSW52YWxpZGF0aW5nU3R5bGVXaXRoUnVsZVNldHMoKSB7IHJldHVybiBt
X2lzSW52YWxpZGF0aW5nU3R5bGVXaXRoUnVsZVNldHM7IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>