<?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>24937</bug_id>
          
          <creation_ts>2009-03-30 09:53:52 -0700</creation_ts>
          <short_desc>NamedNodeMap and NamedAttrMap should not be separate classes</short_desc>
          <delta_ts>2019-02-06 09:03:13 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>aroben</cc>
    
    <cc>cdumez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>115832</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-03-30 09:53:52 -0700</bug_when>
    <thetext>There&apos;s an abstraction in WebCore that&apos;s not needed. The only kind of NamedNodeMap we support is a NamedAttrMap. This should be removed. It&apos;s causing problems and costing us unnecessary runtime overhead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115834</commentid>
    <comment_count>1</comment_count>
      <attachid>29074</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-03-30 10:04:55 -0700</bug_when>
    <thetext>Created attachment 29074
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115835</commentid>
    <comment_count>2</comment_count>
      <attachid>29074</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-03-30 10:06:37 -0700</bug_when>
    <thetext>Comment on attachment 29074
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115842</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-03-30 10:27:06 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/42107</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502927</commentid>
    <comment_count>4</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-02-06 09:03:13 -0800</bug_when>
    <thetext>Mass moving XML DOM bugs to the &quot;DOM&quot; Component.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29074</attachid>
            <date>2009-03-30 10:04:55 -0700</date>
            <delta_ts>2009-03-30 10:06:37 -0700</delta_ts>
            <desc>patch</desc>
            <filename>NamedAttrMapPatch.txt</filename>
            <type>text/plain</type>
            <size>42052</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MjEwNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTEgQEAKKzIwMDktMDMtMzAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAy
NDkzNzogTmFtZWROb2RlTWFwIGFuZCBOYW1lZEF0dHJNYXAgc2hvdWxkIG5vdCBiZSBzZXBhcmF0
ZSBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNDkzNworCisgICAgICAgIEFsc28gc2hvdWxkIGZpeCB0aGUgV2luZG93cyBDT00gYmluZGlu
Z3MgYnVpbGQuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bTogUmVtb3ZlZCBzcGVjaWFsIGNhc2UgZm9yIE5hbWVkTm9kZU1hcC4KKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JPYmpDLnBtOiBEaXR0by4KKworICAgICAgICAqIGRv
bS9OYW1lZEF0dHJNYXAuaDogUmVuYW1lZCBjbGFzcyBmcm9tIE5hbWVkQXR0ck1hcCB0bworICAg
ICAgICBOYW1lZE5vZGVNYXAgYW5kIHJlbW92ZWQgTmFtZWROb2RlTWFwIGJhc2UgY2xhc3MuIE1h
ZGUgdGhlIE5hbWVkTm9kZU1hcAorICAgICAgICBmdW5jdGlvbnMgYWxsIHB1YmxpYyBhbmQgbm9u
LXZpcnR1YWwuIFJlbW92ZWQgdmlydHVhbExlbmd0aC4KKworICAgICAgICAqIGRvbS9OYW1lZE5v
ZGVNYXAuaDogUmVwbGFjZWQgZmlsZSB3aXRoIGp1c3QgYW4gaW5jbHVkZQorICAgICAgICBvZiBO
YW1lZEF0dHJNYXAuaC4gQXMgYSBmb2xsb3cgdXAgd2Ugd2lsbCByZW5hbWUgdGhlIE5hbWVkQXR0
ck1hcAorICAgICAgICBmaWxlcyBhbmQgcmVtb3ZlIHRoaXMgZmlsZS4KKworICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwOiBSZW5hbWVkIGZyb20gTmFtZWRB
dHRyTWFwIHRvIE5hbWVkTm9kZU1hcC4KKyAgICAgICAgKiBkb20vQXR0ci5oOiBEaXR0by4KKyAg
ICAgICAgKiBkb20vQXR0cmlidXRlLmg6IERpdHRvLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aW1wb3J0Tm9kZSk6IERpdHRvLgorICAg
ICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmF0dHJp
YnV0ZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEF0dHJpYnV0ZU1h
cCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y3JlYXRlQXR0cmlidXRlTWFw
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVu
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVu
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6b3BlblRhZ1N0YXJ0VG9TdHJp
bmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZU5v
ZGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmdldEF0dHJpYnV0ZU5vZGUp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmdldEF0dHJpYnV0ZU5vZGVOUyk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aGFzQXR0cmlidXRlKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpoYXNBdHRyaWJ1dGVOUyk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudDo6bm9ybWFsaXplQXR0cmlidXRlcyk6IERpdHRvLgorICAg
ICAgICAqIGRvbS9FbGVtZW50Lmg6IERpdHRvLgorICAgICAgICAqIGRvbS9OYW1lZEF0dHJNYXAu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TmFtZWROb2RlTWFwOjpkZXRhY2hBdHRyaWJ1dGVzRnJv
bUVsZW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6fk5hbWVk
Tm9kZU1hcCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TmFtZWROb2RlTWFwOjppc01hcHBl
ZEF0dHJpYnV0ZU1hcCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TmFtZWROb2RlTWFwOjpn
ZXROYW1lZEl0ZW0pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6Z2V0
TmFtZWRJdGVtTlMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6cmVt
b3ZlTmFtZWRJdGVtKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OnJl
bW92ZU5hbWVkSXRlbU5TKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6
OnNldE5hbWVkSXRlbSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TmFtZWROb2RlTWFwOjpp
dGVtKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OmdldEF0dHJpYnV0
ZUl0ZW0pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6Y2xlYXJBdHRy
aWJ1dGVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OmRldGFjaEZy
b21FbGVtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OnNldEF0
dHJpYnV0ZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6YWRkQXR0
cmlidXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OnJlbW92ZUF0
dHJpYnV0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TmFtZWROb2RlTWFwOjptYXBzRXF1
aXZhbGVudCk6IERpdHRvLgorICAgICAgICAqIGRvbS9OYW1lZE1hcHBlZEF0dHJNYXAuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TmFtZWRNYXBwZWRBdHRyTWFwOjpjbGVhckF0dHJpYnV0ZXMpOiBE
aXR0by4KKyAgICAgICAgKiBkb20vTmFtZWRNYXBwZWRBdHRyTWFwLmg6CisgICAgICAgIChXZWJD
b3JlOjpOYW1lZE1hcHBlZEF0dHJNYXA6Ok5hbWVkTWFwcGVkQXR0ck1hcCk6IERpdHRvLgorICAg
ICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmR1bXBTdGF0aXN0
aWNzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc0VxdWFsTm9kZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aXNEZWZhdWx0TmFtZXNwYWNlKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpOb2RlOjpsb29rdXBOYW1lc3BhY2VVUkkpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGU6Omxvb2t1cE5hbWVzcGFjZVByZWZpeCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6Y29tcGFyZURvY3VtZW50UG9zaXRpb24pOiBEaXR0by4KKyAgICAg
ICAgKiBkb20vTm9kZS5oOiBEaXR0by4KKyAgICAgICAgKiBkb20vWE1MVG9rZW5pemVyTGlieG1s
Mi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6OlhNTFRva2VuaXplcik6IERp
dHRvLgorICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6aXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNPclVuc3R5bGVTdHlsZVNwYW4pOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OmlzRW1wdHlGb250VGFnKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjphcmVJZGVudGljYWxFbGVtZW50cyk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcv
bWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFN0YXJ0TWFya3VwKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpjb21wbGV0ZVVSTHMpOiBEaXR0by4KKyAgICAgICAgKiBodG1s
L0hUTUxQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6aGFuZGxlRXJy
b3IpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRhdGVXaWRnZXQpOiBEaXR0by4K
KyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oOgorICAgICAgICAoV2ViQ29yZTo6
c3luY2hyb25pemVQcm9wZXJ0eSk6IERpdHRvLgorICAgICAgICAqIHhtbC9YUGF0aEZ1bmN0aW9u
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuTGFuZzo6ZXZhbHVhdGUpOiBEaXR0
by4KKyAgICAgICAgKiB4bWwvWFBhdGhTdGVwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRo
OjpTdGVwOjpub2Rlc0luQXhpcyk6IERpdHRvLgorCiAyMDA5LTAzLTMwICBHdXN0YXZvIE5vcm9u
aGEgU2lsdmEgIDxndXN0YXZvLm5vcm9uaGFAY29sbGFib3JhLmNvLnVrPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEhvbGdlciBGcmV5dGhlci4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNO
YW1lZE5vZGVzQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gNDIxMDYpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCiAjaW5jbHVkZSAiRWxl
bWVudC5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgotI2luY2x1ZGUgIk5hbWVkQXR0ck1hcC5oIgor
I2luY2x1ZGUgIk5hbWVkTm9kZU1hcC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24g
NDIxMDYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjg3LDEwICsxNjg3LDYgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQog
ICAgICAgICAkaW1wbEluY2x1ZGVzeyJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIn0gPSAx
OwogICAgIH0KIAotICAgIGlmICgkdHlwZSBlcSAiTmFtZWROb2RlTWFwIikgewotICAgICAgICAk
aW1wbEluY2x1ZGVzeyJOYW1lZEF0dHJNYXAuaCJ9ID0gMTsKLSAgICB9Ci0KICAgICBpZiAoJHR5
cGUgZXEgIk5vZGVMaXN0IikgewogICAgICAgICAkaW1wbEluY2x1ZGVzeyJOYW1lTm9kZUxpc3Qu
aCJ9ID0gMTsKICAgICB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvck9iakMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JPYmpDLnBtCShyZXZpc2lvbiA0MjEwNikKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yT2JqQy5wbQkod29ya2luZyBjb3B5KQpAQCAtNjY3LDcgKzY2Nyw2
IEBAIHN1YiBBZGRJbmNsdWRlc0ZvclR5cGUKIAogICAgICMgRklYTUU6IHdvbid0IGNvbXBpbGUg
d2l0aG91dCB0aGVzZQogICAgICRpbXBsSW5jbHVkZXN7IkNTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uLmgifSA9IDEgaWYgJHR5cGUgZXEgIkNTU1N0eWxlRGVjbGFyYXRpb24iOwotICAgICRpbXBs
SW5jbHVkZXN7Ik5hbWVkQXR0ck1hcC5oIn0gPSAxIGlmICR0eXBlIGVxICJOYW1lZE5vZGVNYXAi
OwogICAgICRpbXBsSW5jbHVkZXN7Ik5hbWVOb2RlTGlzdC5oIn0gPSAxIGlmICR0eXBlIGVxICJO
b2RlTGlzdCI7CiAKICAgICAjIERlZmF1bHQsIGluY2x1ZGUgdGhlIHNhbWUgbmFtZWQgZmlsZSAo
dGhlIGltcGxlbWVudGF0aW9uKSBhbmQgdGhlIHNhbWUgbmFtZSBwcmVmaXhlZCB3aXRoICJET00i
LiAKSW5kZXg6IFdlYkNvcmUvZG9tL0F0dHIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9B
dHRyLmgJKHJldmlzaW9uIDQyMTA2KQorKysgV2ViQ29yZS9kb20vQXR0ci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIGRlc3RydWN0aW9u
LiBob3dldmVyLCB0aGlzIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCiAKIGNsYXNzIEF0dHIgOiBw
dWJsaWMgQ29udGFpbmVyTm9kZSB7Ci0gICAgZnJpZW5kIGNsYXNzIE5hbWVkQXR0ck1hcDsKKyAg
ICBmcmllbmQgY2xhc3MgTmFtZWROb2RlTWFwOwogcHVibGljOgogICAgIEF0dHIoRWxlbWVudCos
IERvY3VtZW50KiwgUGFzc1JlZlB0cjxBdHRyaWJ1dGU+KTsKICAgICB+QXR0cigpOwpJbmRleDog
V2ViQ29yZS9kb20vQXR0cmlidXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQXR0cmli
dXRlLmgJKHJldmlzaW9uIDQyMTA2KQorKysgV2ViQ29yZS9kb20vQXR0cmlidXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDE0ICszMiwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBB
dHRyOwogY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBO
YW1lZEF0dHJNYXA7CitjbGFzcyBOYW1lZE5vZGVNYXA7CiAKIC8vIFRoaXMgaGFzIG5vIGNvdW50
ZXJwYXJ0IGluIERPTS4KIC8vIEl0IGlzIGFuIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRo
ZSBub2RlIHZhbHVlIG9mIGFuIEF0dHIuCiAvLyBUaGUgYWN0dWFsIEF0dHIgd2l0aCBpdHMgdmFs
dWUgYXMgYSBUZXh0IGNoaWxkIGlzIGFsbG9jYXRlZCBvbmx5IGlmIG5lZWRlZC4KIGNsYXNzIEF0
dHJpYnV0ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEF0dHJpYnV0ZT4gewogICAgIGZyaWVuZCBjbGFz
cyBBdHRyOwotICAgIGZyaWVuZCBjbGFzcyBOYW1lZEF0dHJNYXA7CisgICAgZnJpZW5kIGNsYXNz
IE5hbWVkTm9kZU1hcDsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdHRyaWJ1dGU+
IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZh
bHVlKQogICAgIHsKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDQyMTA2KQorKysgV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MzQsNyArNjM0LDcgQEAgUGFzc1Jl
ZlB0cjxOb2RlPiBEb2N1bWVudDo6aW1wb3J0Tm9kZShObwogICAgICAgICAgICAgaWYgKGVjKQog
ICAgICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgICAgICBOYW1lZEF0dHJNYXAqIGF0
dHJzID0gb2xkRWxlbWVudC0+YXR0cmlidXRlcyh0cnVlKTsKKyAgICAgICAgICAgIE5hbWVkTm9k
ZU1hcCogYXR0cnMgPSBvbGRFbGVtZW50LT5hdHRyaWJ1dGVzKHRydWUpOwogICAgICAgICAgICAg
aWYgKGF0dHJzKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXR0cnMtPmxl
bmd0aCgpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgewpJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDQyMTA2KQorKysgV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgotI2luY2x1ZGUgIk5hbWVkQXR0ck1hcC5oIgorI2luY2x1ZGUgIk5hbWVkTm9kZU1hcC5oIgog
I2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgpAQCAtMTQwLDEyICsxNDAsMTIgQEAgdm9pZCBFbGVtZW50OjpzZXRCb29s
ZWFuQXR0cmlidXRlKGNvbnN0IAogfQogCiAvLyBWaXJ0dWFsIGZ1bmN0aW9uLCBkZWZpbmVkIGlu
IGJhc2UgY2xhc3MuCi1OYW1lZEF0dHJNYXAqIEVsZW1lbnQ6OmF0dHJpYnV0ZXMoKSBjb25zdAor
TmFtZWROb2RlTWFwKiBFbGVtZW50OjphdHRyaWJ1dGVzKCkgY29uc3QKIHsKICAgICByZXR1cm4g
YXR0cmlidXRlcyhmYWxzZSk7CiB9CiAKLU5hbWVkQXR0ck1hcCogRWxlbWVudDo6YXR0cmlidXRl
cyhib29sIHJlYWRvbmx5KSBjb25zdAorTmFtZWROb2RlTWFwKiBFbGVtZW50OjphdHRyaWJ1dGVz
KGJvb2wgcmVhZG9ubHkpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2lzU3R5bGVBdHRyaWJ1dGVWYWxp
ZCkKICAgICAgICAgdXBkYXRlU3R5bGVBdHRyaWJ1dGUoKTsKQEAgLTU2Niw3ICs1NjYsNyBAQCB2
b2lkIEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlCiAgICAgfQogfQogCi12b2lk
IEVsZW1lbnQ6OnNldEF0dHJpYnV0ZU1hcChQYXNzUmVmUHRyPE5hbWVkQXR0ck1hcD4gbGlzdCkK
K3ZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlTWFwKFBhc3NSZWZQdHI8TmFtZWROb2RlTWFwPiBs
aXN0KQogewogICAgIGRvY3VtZW50KCktPmluY0RPTVRyZWVWZXJzaW9uKCk7CiAKQEAgLTY0NCw3
ICs2NDQsNyBAQCBLVVJMIEVsZW1lbnQ6OmJhc2VVUkkoKSBjb25zdAogCiB2b2lkIEVsZW1lbnQ6
OmNyZWF0ZUF0dHJpYnV0ZU1hcCgpIGNvbnN0CiB7Ci0gICAgbmFtZWRBdHRyTWFwID0gTmFtZWRB
dHRyTWFwOjpjcmVhdGUoY29uc3RfY2FzdDxFbGVtZW50Kj4odGhpcykpOworICAgIG5hbWVkQXR0
ck1hcCA9IE5hbWVkTm9kZU1hcDo6Y3JlYXRlKGNvbnN0X2Nhc3Q8RWxlbWVudCo+KHRoaXMpKTsK
IH0KIAogYm9vbCBFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25zdApAQCAt
Njc3LDcgKzY3Nyw3IEBAIHZvaWQgRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogICAg
IENvbnRhaW5lck5vZGU6Omluc2VydGVkSW50b0RvY3VtZW50KCk7CiAKICAgICBpZiAoaGFzSUQo
KSkgewotICAgICAgICBpZiAoTmFtZWRBdHRyTWFwKiBhdHRycyA9IG5hbWVkQXR0ck1hcC5nZXQo
KSkgeworICAgICAgICBpZiAoTmFtZWROb2RlTWFwKiBhdHRycyA9IG5hbWVkQXR0ck1hcC5nZXQo
KSkgewogICAgICAgICAgICAgQXR0cmlidXRlKiBpZEl0ZW0gPSBhdHRycy0+Z2V0QXR0cmlidXRl
SXRlbShpZEF0dHIpOwogICAgICAgICAgICAgaWYgKGlkSXRlbSAmJiAhaWRJdGVtLT5pc051bGwo
KSkKICAgICAgICAgICAgICAgICB1cGRhdGVJZChudWxsQXRvbSwgaWRJdGVtLT52YWx1ZSgpKTsK
QEAgLTY4OCw3ICs2ODgsNyBAQCB2b2lkIEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkK
IHZvaWQgRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCiB7CiAgICAgaWYgKGhhc0lEKCkp
IHsKLSAgICAgICAgaWYgKE5hbWVkQXR0ck1hcCogYXR0cnMgPSBuYW1lZEF0dHJNYXAuZ2V0KCkp
IHsKKyAgICAgICAgaWYgKE5hbWVkTm9kZU1hcCogYXR0cnMgPSBuYW1lZEF0dHJNYXAuZ2V0KCkp
IHsKICAgICAgICAgICAgIEF0dHJpYnV0ZSogaWRJdGVtID0gYXR0cnMtPmdldEF0dHJpYnV0ZUl0
ZW0oaWRBdHRyKTsKICAgICAgICAgICAgIGlmIChpZEl0ZW0gJiYgIWlkSXRlbS0+aXNOdWxsKCkp
CiAgICAgICAgICAgICAgICAgdXBkYXRlSWQoaWRJdGVtLT52YWx1ZSgpLCBudWxsQXRvbSk7CkBA
IC05NDgsNyArOTQ4LDcgQEAgU3RyaW5nIEVsZW1lbnQ6Om9wZW5UYWdTdGFydFRvU3RyaW5nKCkg
YwogewogICAgIFN0cmluZyByZXN1bHQgPSAiPCIgKyBub2RlTmFtZSgpOwogCi0gICAgTmFtZWRB
dHRyTWFwICphdHRyTWFwID0gYXR0cmlidXRlcyh0cnVlKTsKKyAgICBOYW1lZE5vZGVNYXAqIGF0
dHJNYXAgPSBhdHRyaWJ1dGVzKHRydWUpOwogCiAgICAgaWYgKGF0dHJNYXApIHsKICAgICAgICAg
dW5zaWduZWQgbnVtQXR0cnMgPSBhdHRyTWFwLT5sZW5ndGgoKTsKQEAgLTEwNDgsNyArMTA0OCw3
IEBAIFBhc3NSZWZQdHI8QXR0cj4gRWxlbWVudDo6cmVtb3ZlQXR0cmlidXQKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQogCi0gICAgTmFtZWRBdHRyTWFwICphdHRycyA9IGF0dHJpYnV0ZXModHJ1
ZSk7CisgICAgTmFtZWROb2RlTWFwKiBhdHRycyA9IGF0dHJpYnV0ZXModHJ1ZSk7CiAgICAgaWYg
KCFhdHRycykKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTEwODMsNyArMTA4Myw3IEBAIHZvaWQg
RWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlTlMoY29uc3QgU3QKIAogUGFzc1JlZlB0cjxBdHRyPiBF
bGVtZW50OjpnZXRBdHRyaWJ1dGVOb2RlKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBOYW1l
ZEF0dHJNYXAqIGF0dHJzID0gYXR0cmlidXRlcyh0cnVlKTsKKyAgICBOYW1lZE5vZGVNYXAqIGF0
dHJzID0gYXR0cmlidXRlcyh0cnVlKTsKICAgICBpZiAoIWF0dHJzKQogICAgICAgICByZXR1cm4g
MDsKICAgICBTdHJpbmcgbG9jYWxOYW1lID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSh0aGlz
KSA/IG5hbWUubG93ZXIoKSA6IG5hbWU7CkBAIC0xMDkyLDcgKzEwOTIsNyBAQCBQYXNzUmVmUHRy
PEF0dHI+IEVsZW1lbnQ6OmdldEF0dHJpYnV0ZU5vCiAKIFBhc3NSZWZQdHI8QXR0cj4gRWxlbWVu
dDo6Z2V0QXR0cmlidXRlTm9kZU5TKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBT
dHJpbmcmIGxvY2FsTmFtZSkKIHsKLSAgICBOYW1lZEF0dHJNYXAqIGF0dHJzID0gYXR0cmlidXRl
cyh0cnVlKTsKKyAgICBOYW1lZE5vZGVNYXAqIGF0dHJzID0gYXR0cmlidXRlcyh0cnVlKTsKICAg
ICBpZiAoIWF0dHJzKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gc3RhdGljX3BvaW50
ZXJfY2FzdDxBdHRyPihhdHRycy0+Z2V0TmFtZWRJdGVtKFF1YWxpZmllZE5hbWUobnVsbEF0b20s
IGxvY2FsTmFtZSwgbmFtZXNwYWNlVVJJKSkpOwpAQCAtMTEwMCw3ICsxMTAwLDcgQEAgUGFzc1Jl
ZlB0cjxBdHRyPiBFbGVtZW50OjpnZXRBdHRyaWJ1dGVObwogCiBib29sIEVsZW1lbnQ6Omhhc0F0
dHJpYnV0ZShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0gICAgTmFtZWRBdHRyTWFwKiBh
dHRycyA9IGF0dHJpYnV0ZXModHJ1ZSk7CisgICAgTmFtZWROb2RlTWFwKiBhdHRycyA9IGF0dHJp
YnV0ZXModHJ1ZSk7CiAgICAgaWYgKCFhdHRycykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC0xMTEyLDcgKzExMTIsNyBAQCBib29sIEVsZW1lbnQ6Omhhc0F0dHJpYnV0ZShjb25zdCBTdHJp
bmcmCiAKIGJvb2wgRWxlbWVudDo6aGFzQXR0cmlidXRlTlMoY29uc3QgU3RyaW5nJiBuYW1lc3Bh
Y2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lKSBjb25zdAogewotICAgIE5hbWVkQXR0ck1h
cCogYXR0cnMgPSBhdHRyaWJ1dGVzKHRydWUpOworICAgIE5hbWVkTm9kZU1hcCogYXR0cnMgPSBh
dHRyaWJ1dGVzKHRydWUpOwogICAgIGlmICghYXR0cnMpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICByZXR1cm4gYXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0oUXVhbGlmaWVkTmFtZShudWxsQXRv
bSwgbG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkpKTsKQEAgLTEyNDYsNyArMTI0Niw3IEBAIHZvaWQg
RWxlbWVudDo6Y2FuY2VsRm9jdXNBcHBlYXJhbmNlVXBkYXQKIHZvaWQgRWxlbWVudDo6bm9ybWFs
aXplQXR0cmlidXRlcygpCiB7CiAgICAgLy8gTm9ybWFsaXplIGF0dHJpYnV0ZXMuCi0gICAgTmFt
ZWRBdHRyTWFwKiBhdHRycyA9IGF0dHJpYnV0ZXModHJ1ZSk7CisgICAgTmFtZWROb2RlTWFwKiBh
dHRycyA9IGF0dHJpYnV0ZXModHJ1ZSk7CiAgICAgaWYgKCFhdHRycykKICAgICAgICAgcmV0dXJu
OwogICAgIHVuc2lnbmVkIG51bUF0dHJzID0gYXR0cnMtPmxlbmd0aCgpOwpJbmRleDogV2ViQ29y
ZS9kb20vRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQuaAkocmV2
aXNpb24gNDIxMDYpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDEwICszNCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBdHRyOwogY2xhc3Mg
QXR0cmlidXRlOwogY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKLWNsYXNzIEVsZW1lbnRSYXJl
RGF0YTsKLWNsYXNzIEludFNpemU7CiBjbGFzcyBDbGllbnRSZWN0OwogY2xhc3MgQ2xpZW50UmVj
dExpc3Q7CitjbGFzcyBFbGVtZW50UmFyZURhdGE7CitjbGFzcyBJbnRTaXplOwogCiBjbGFzcyBF
bGVtZW50IDogcHVibGljIENvbnRhaW5lck5vZGUgewogcHVibGljOgpAQCAtMTM0LDE0ICsxMzQs
MTQgQEAgcHVibGljOgogICAgIHZvaWQgc2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKICAgICB2b2lkIHNldEJvb2xlYW5BdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgYm9vbCk7CiAKLSAgICB2aXJ0dWFsIE5hbWVk
QXR0ck1hcCogYXR0cmlidXRlcygpIGNvbnN0OwotICAgIE5hbWVkQXR0ck1hcCogYXR0cmlidXRl
cyhib29sIHJlYWRvbmx5KSBjb25zdDsKKyAgICB2aXJ0dWFsIE5hbWVkTm9kZU1hcCogYXR0cmli
dXRlcygpIGNvbnN0OworICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyhib29sIHJlYWRvbmx5
KSBjb25zdDsKIAogICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuZXZlciBhbiBhdHRy
aWJ1dGUgaXMgYWRkZWQsIGNoYW5nZWQgb3IgcmVtb3ZlZC4KICAgICB2aXJ0dWFsIHZvaWQgYXR0
cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqLCBib29sIHByZXNlcnZlRGVjbHMgPSBmYWxzZSk7CiAK
ICAgICAvLyBub3QgcGFydCBvZiB0aGUgRE9NCi0gICAgdm9pZCBzZXRBdHRyaWJ1dGVNYXAoUGFz
c1JlZlB0cjxOYW1lZEF0dHJNYXA+KTsKKyAgICB2b2lkIHNldEF0dHJpYnV0ZU1hcChQYXNzUmVm
UHRyPE5hbWVkTm9kZU1hcD4pOwogCiAgICAgdmlydHVhbCB2b2lkIGNvcHlOb25BdHRyaWJ1dGVQ
cm9wZXJ0aWVzKGNvbnN0IEVsZW1lbnQqIC8qc291cmNlKi8pIHsgfQogCkBAIC0yMzAsNyArMjMw
LDcgQEAgcHJvdGVjdGVkOgogICAgIEVsZW1lbnRSYXJlRGF0YSogcmFyZURhdGEoKSBjb25zdDsK
ICAgICBFbGVtZW50UmFyZURhdGEqIGVuc3VyZVJhcmVEYXRhKCk7CiAgICAgCi0gICAgbXV0YWJs
ZSBSZWZQdHI8TmFtZWRBdHRyTWFwPiBuYW1lZEF0dHJNYXA7CisgICAgbXV0YWJsZSBSZWZQdHI8
TmFtZWROb2RlTWFwPiBuYW1lZEF0dHJNYXA7CiB9OwogICAgIAogaW5saW5lIGJvb2wgTm9kZTo6
aGFzVGFnTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdApAQCAtMjQzLDcgKzI0
Myw3IEBAIGlubGluZSBib29sIE5vZGU6Omhhc0F0dHJpYnV0ZXMoKSBjb25zdAogICAgIHJldHVy
biBpc0VsZW1lbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8Y29uc3QgRWxlbWVudCo+KHRoaXMpLT5o
YXNBdHRyaWJ1dGVzKCk7CiB9CiAKLWlubGluZSBOYW1lZEF0dHJNYXAqIE5vZGU6OmF0dHJpYnV0
ZXMoKSBjb25zdAoraW5saW5lIE5hbWVkTm9kZU1hcCogTm9kZTo6YXR0cmlidXRlcygpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGlzRWxlbWVudE5vZGUoKSA/IHN0YXRpY19jYXN0PGNvbnN0IEVsZW1l
bnQqPih0aGlzKS0+YXR0cmlidXRlcygpIDogMDsKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL05hbWVk
QXR0ck1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTmFtZWRBdHRyTWFwLmNwcAko
cmV2aXNpb24gNDIxMDYpCisrKyBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIk5hbWVkQXR0ck1hcC5oIgorI2luY2x1ZGUgIk5hbWVkTm9kZU1hcC5oIgogCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCkBAIC0zOSw3ICszOSw3IEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGUKICAgICByZXR1cm4gZSAm
JiBlLT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpICYmIGUtPmlzSFRNTEVsZW1lbnQoKTsK
IH0KIAotaW5saW5lIHZvaWQgTmFtZWRBdHRyTWFwOjpkZXRhY2hBdHRyaWJ1dGVzRnJvbUVsZW1l
bnQoKQoraW5saW5lIHZvaWQgTmFtZWROb2RlTWFwOjpkZXRhY2hBdHRyaWJ1dGVzRnJvbUVsZW1l
bnQoKQogewogICAgIHNpemVfdCBzaXplID0gbV9hdHRyaWJ1dGVzLnNpemUoKTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykgewpAQCAtNDgsMTcgKzQ4LDE3IEBAIGlubGlu
ZSB2b2lkIE5hbWVkQXR0ck1hcDo6ZGV0YWNoQXR0cmlidXQKICAgICB9CiB9CiAKLU5hbWVkQXR0
ck1hcDo6fk5hbWVkQXR0ck1hcCgpCitOYW1lZE5vZGVNYXA6On5OYW1lZE5vZGVNYXAoKQogewog
ICAgIGRldGFjaEF0dHJpYnV0ZXNGcm9tRWxlbWVudCgpOwogfQogCi1ib29sIE5hbWVkQXR0ck1h
cDo6aXNNYXBwZWRBdHRyaWJ1dGVNYXAoKSBjb25zdAorYm9vbCBOYW1lZE5vZGVNYXA6OmlzTWFw
cGVkQXR0cmlidXRlTWFwKCkgY29uc3QKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVBhc3NS
ZWZQdHI8Tm9kZT4gTmFtZWRBdHRyTWFwOjpnZXROYW1lZEl0ZW0oY29uc3QgU3RyaW5nJiBuYW1l
KSBjb25zdAorUGFzc1JlZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6OmdldE5hbWVkSXRlbShjb25z
dCBTdHJpbmcmIG5hbWUpIGNvbnN0CiB7CiAgICAgQXR0cmlidXRlKiBhID0gZ2V0QXR0cmlidXRl
SXRlbShuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKG1fZWxlbWVudCkpOwogICAgIGlm
ICghYSkKQEAgLTY3LDEyICs2NywxMiBAQCBQYXNzUmVmUHRyPE5vZGU+IE5hbWVkQXR0ck1hcDo6
Z2V0TmFtZWRJCiAgICAgcmV0dXJuIGEtPmNyZWF0ZUF0dHJJZk5lZWRlZChtX2VsZW1lbnQpOwog
fQogCi1QYXNzUmVmUHRyPE5vZGU+IE5hbWVkQXR0ck1hcDo6Z2V0TmFtZWRJdGVtTlMoY29uc3Qg
U3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lKSBjb25zdAorUGFz
c1JlZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6OmdldE5hbWVkSXRlbU5TKGNvbnN0IFN0cmluZyYg
bmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSkgY29uc3QKIHsKICAgICByZXR1
cm4gZ2V0TmFtZWRJdGVtKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZSwgbmFtZXNw
YWNlVVJJKSk7CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZT4gTmFtZWRBdHRyTWFwOjpyZW1vdmVOYW1l
ZEl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8
Tm9kZT4gTmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBdHRyaWJ1dGUqIGEgPSBnZXRBdHRyaWJ1dGVJdGVt
KG5hbWUsIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UobV9lbGVtZW50KSk7CiAgICAgaWYgKCFh
KSB7CkBAIC04MywxMiArODMsMTIgQEAgUGFzc1JlZlB0cjxOb2RlPiBOYW1lZEF0dHJNYXA6OnJl
bW92ZU5hbQogICAgIHJldHVybiByZW1vdmVOYW1lZEl0ZW0oYS0+bmFtZSgpLCBlYyk7CiB9CiAK
LVBhc3NSZWZQdHI8Tm9kZT4gTmFtZWRBdHRyTWFwOjpyZW1vdmVOYW1lZEl0ZW1OUyhjb25zdCBT
dHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQorUGFzc1JlZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6OnJlbW92ZU5hbWVkSXRlbU5T
KGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgcmV0dXJuIHJlbW92ZU5hbWVkSXRlbShRdWFsaWZpZWRO
YW1lKG51bGxBdG9tLCBsb2NhbE5hbWUsIG5hbWVzcGFjZVVSSSksIGVjKTsKIH0KIAotUGFzc1Jl
ZlB0cjxOb2RlPiBOYW1lZEF0dHJNYXA6OmdldE5hbWVkSXRlbShjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lKSBjb25zdAorUGFzc1JlZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6OmdldE5hbWVkSXRl
bShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAogewogICAgIEF0dHJpYnV0ZSogYSA9
IGdldEF0dHJpYnV0ZUl0ZW0obmFtZSk7CiAgICAgaWYgKCFhKQpAQCAtOTcsNyArOTcsNyBAQCBQ
YXNzUmVmUHRyPE5vZGU+IE5hbWVkQXR0ck1hcDo6Z2V0TmFtZWRJCiAgICAgcmV0dXJuIGEtPmNy
ZWF0ZUF0dHJJZk5lZWRlZChtX2VsZW1lbnQpOwogfQogCi1QYXNzUmVmUHRyPE5vZGU+IE5hbWVk
QXR0ck1hcDo6c2V0TmFtZWRJdGVtKE5vZGUqIGFyZywgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNz
UmVmUHRyPE5vZGU+IE5hbWVkTm9kZU1hcDo6c2V0TmFtZWRJdGVtKE5vZGUqIGFyZywgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFtX2VsZW1lbnQgfHwgIWFyZykgewogICAgICAgICBl
YyA9IE5PVF9GT1VORF9FUlI7CkBAIC0xNDYsNyArMTQ2LDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBO
YW1lZEF0dHJNYXA6OnNldE5hbWVkSQogLy8gVGhlIERPTTIgc3BlYyBkb2Vzbid0IHNheSB0aGF0
IHJlbW92ZUF0dHJpYnV0ZVtOU10gdGhyb3dzIE5PVF9GT1VORF9FUlIKIC8vIGlmIHRoZSBhdHRy
aWJ1dGUgaXMgbm90IGZvdW5kLCBidXQgYXQgdGhpcyBsZXZlbCB3ZSBoYXZlIHRvIHRocm93IE5P
VF9GT1VORF9FUlIKIC8vIGJlY2F1c2Ugb2YgcmVtb3ZlTmFtZWRJdGVtLCByZW1vdmVOYW1lZEl0
ZW1OUywgYW5kIHJlbW92ZUF0dHJpYnV0ZU5vZGUuCi1QYXNzUmVmUHRyPE5vZGU+IE5hbWVkQXR0
ck1hcDo6cmVtb3ZlTmFtZWRJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQorUGFzc1JlZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6OnJlbW92ZU5hbWVkSXRl
bShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBB
dHRyaWJ1dGUqIGEgPSBnZXRBdHRyaWJ1dGVJdGVtKG5hbWUpOwogICAgIGlmICghYSkgewpAQCAt
MTYzLDcgKzE2Myw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gTmFtZWRBdHRyTWFwOjpyZW1vdmVOYW0K
ICAgICByZXR1cm4gci5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZT4gTmFtZWRBdHRy
TWFwOjppdGVtICh1bnNpZ25lZCBpbmRleCkgY29uc3QKK1Bhc3NSZWZQdHI8Tm9kZT4gTmFtZWRO
b2RlTWFwOjppdGVtICh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKICAgICBpZiAoaW5kZXggPj0g
bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTczLDcgKzE3Myw3IEBAIFBhc3NSZWZQ
dHI8Tm9kZT4gTmFtZWRBdHRyTWFwOjppdGVtICh1bnMKIAogLy8gV2UgdXNlIGEgYm9vbGVhbiBw
YXJhbWV0ZXIgaW5zdGVhZCBvZiBjYWxsaW5nIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2Ugc28g
dGhhdCB0aGUgY2FsbGVyCiAvLyBjYW4gdHVuZSB0aGUgYmVoYXZpb3VyIChoYXNBdHRyaWJ1dGUg
aXMgY2FzZSBzZW5zaXRpdmUgd2hlcmVhcyBnZXRBdHRyaWJ1dGUgaXMgbm90KS4KLUF0dHJpYnV0
ZSogTmFtZWRBdHRyTWFwOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9v
bCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSBjb25zdAorQXR0cmlidXRlKiBOYW1lZE5vZGVN
YXA6OmdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9y
ZUF0dHJpYnV0ZUNhc2UpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgbGVuID0gbGVuZ3RoKCk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CkBAIC0xODcsNyArMTg3LDcg
QEAgQXR0cmlidXRlKiBOYW1lZEF0dHJNYXA6OmdldEF0dHJpYnV0ZUl0ZQogICAgIHJldHVybiAw
OwogfQogCi1BdHRyaWJ1dGUqIE5hbWVkQXR0ck1hcDo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBR
dWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAorQXR0cmlidXRlKiBOYW1lZE5vZGVNYXA6OmdldEF0
dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKIHsKICAgICB1bnNp
Z25lZCBsZW4gPSBsZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyAr
K2kpIHsKQEAgLTE5NywyMSArMTk3LDIxIEBAIEF0dHJpYnV0ZSogTmFtZWRBdHRyTWFwOjpnZXRB
dHRyaWJ1dGVJdGUKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBOYW1lZEF0dHJNYXA6OmNsZWFy
QXR0cmlidXRlcygpCit2b2lkIE5hbWVkTm9kZU1hcDo6Y2xlYXJBdHRyaWJ1dGVzKCkKIHsKICAg
ICBkZXRhY2hBdHRyaWJ1dGVzRnJvbUVsZW1lbnQoKTsKICAgICBtX2F0dHJpYnV0ZXMuY2xlYXIo
KTsKIH0KIAotdm9pZCBOYW1lZEF0dHJNYXA6OmRldGFjaEZyb21FbGVtZW50KCkKK3ZvaWQgTmFt
ZWROb2RlTWFwOjpkZXRhY2hGcm9tRWxlbWVudCgpCiB7Ci0gICAgLy8gd2UgYWxsb3cgYSBOYW1l
ZEF0dHJNYXAgdy9vIGFuIGVsZW1lbnQgaW4gY2FzZSBzb21lb25lIHN0aWxsIGhhcyBhIHJlZmVy
ZW5jZQorICAgIC8vIHdlIGFsbG93IGEgTmFtZWROb2RlTWFwIHcvbyBhbiBlbGVtZW50IGluIGNh
c2Ugc29tZW9uZSBzdGlsbCBoYXMgYSByZWZlcmVuY2UKICAgICAvLyB0byBpZiBhZnRlciB0aGUg
ZWxlbWVudCBnZXRzIGRlbGV0ZWQgLSBidXQgdGhlIG1hcCBpcyBub3cgaW52YWxpZAogICAgIG1f
ZWxlbWVudCA9IDA7CiAgICAgZGV0YWNoQXR0cmlidXRlc0Zyb21FbGVtZW50KCk7CiB9CiAKLXZv
aWQgTmFtZWRBdHRyTWFwOjpzZXRBdHRyaWJ1dGVzKGNvbnN0IE5hbWVkQXR0ck1hcCYgb3RoZXIp
Cit2b2lkIE5hbWVkTm9kZU1hcDo6c2V0QXR0cmlidXRlcyhjb25zdCBOYW1lZE5vZGVNYXAmIG90
aGVyKQogewogICAgIC8vIGNsb25lIGFsbCBhdHRyaWJ1dGVzIGluIHRoZSBvdGhlciBtYXAsIGJ1
dCBhdHRhY2ggdG8gb3VyIGVsZW1lbnQKICAgICBpZiAoIW1fZWxlbWVudCkKQEAgLTIzMywxMyAr
MjMzLDEzIEBAIHZvaWQgTmFtZWRBdHRyTWFwOjpzZXRBdHRyaWJ1dGVzKGNvbnN0IE4KIAogICAg
IC8vIEZJWE1FOiBUaGlzIGlzIHdhc3RlZnVsLiAgVGhlIGNsYXNzIGxpc3QgY291bGQgYmUgcHJl
c2VydmVkIG9uIGEgY29weSwgYW5kIHdlCiAgICAgLy8gd291bGRuJ3QgaGF2ZSB0byB3YXN0ZSB0
aW1lIHJlcGFyc2luZyB0aGUgYXR0cmlidXRlLgotICAgIC8vIFRoZSBkZXJpdmVkIGNsYXNzLCBI
VE1MTmFtZWRBdHRyTWFwLCB3aGljaCBtYW5hZ2VzIGEgcGFyc2VkIGNsYXNzIGxpc3QgZm9yIHRo
ZSBDTEFTUyBhdHRyaWJ1dGUsCisgICAgLy8gVGhlIGRlcml2ZWQgY2xhc3MsIEhUTUxOYW1lZE5v
ZGVNYXAsIHdoaWNoIG1hbmFnZXMgYSBwYXJzZWQgY2xhc3MgbGlzdCBmb3IgdGhlIENMQVNTIGF0
dHJpYnV0ZSwKICAgICAvLyB3aWxsIHVwZGF0ZSBpdHMgbWVtYmVyIHZhcmlhYmxlIHdoZW4gcGFy
c2UgYXR0cmlidXRlIGlzIGNhbGxlZC4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmV3
TGVuZ3RoOyBpKyspCiAgICAgICAgIG1fZWxlbWVudC0+YXR0cmlidXRlQ2hhbmdlZChtX2F0dHJp
YnV0ZXNbaV0uZ2V0KCksIHRydWUpOwogfQogCi12b2lkIE5hbWVkQXR0ck1hcDo6YWRkQXR0cmli
dXRlKFBhc3NSZWZQdHI8QXR0cmlidXRlPiBwcnBBdHRyaWJ1dGUpCit2b2lkIE5hbWVkTm9kZU1h
cDo6YWRkQXR0cmlidXRlKFBhc3NSZWZQdHI8QXR0cmlidXRlPiBwcnBBdHRyaWJ1dGUpCiB7CiAg
ICAgUmVmUHRyPEF0dHJpYnV0ZT4gYXR0cmlidXRlID0gcHJwQXR0cmlidXRlOwogICAgIApAQCAt
MjYxLDcgKzI2MSw3IEBAIHZvaWQgTmFtZWRBdHRyTWFwOjphZGRBdHRyaWJ1dGUoUGFzc1JlZlAK
ICAgICB9CiB9CiAKLXZvaWQgTmFtZWRBdHRyTWFwOjpyZW1vdmVBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSkKK3ZvaWQgTmFtZWROb2RlTWFwOjpyZW1vdmVBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKIHsKICAgICB1bnNpZ25lZCBsZW4gPSBsZW5ndGgoKTsK
ICAgICB1bnNpZ25lZCBpbmRleCA9IGxlbiArIDE7CkBAIC0yOTUsNyArMjk1LDcgQEAgdm9pZCBO
YW1lZEF0dHJNYXA6OnJlbW92ZUF0dHJpYnV0ZShjb25zdAogICAgIH0KIH0KIAotYm9vbCBOYW1l
ZEF0dHJNYXA6Om1hcHNFcXVpdmFsZW50KGNvbnN0IE5hbWVkQXR0ck1hcCogb3RoZXJNYXApIGNv
bnN0Citib29sIE5hbWVkTm9kZU1hcDo6bWFwc0VxdWl2YWxlbnQoY29uc3QgTmFtZWROb2RlTWFw
KiBvdGhlck1hcCkgY29uc3QKIHsKICAgICBpZiAoIW90aGVyTWFwKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0zMTUsOSArMzE1LDQgQEAgYm9vbCBOYW1lZEF0dHJNYXA6Om1hcHNFcXVpdmFs
ZW50KGNvbnN0IAogICAgIHJldHVybiB0cnVlOwogfQogCi1zaXplX3QgTmFtZWRBdHRyTWFwOjp2
aXJ0dWFsTGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGVuZ3RoKCk7Ci19Ci0KIH0KSW5k
ZXg6IFdlYkNvcmUvZG9tL05hbWVkQXR0ck1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9t
L05hbWVkQXR0ck1hcC5oCShyZXZpc2lvbiA0MjEwNikKKysrIFdlYkNvcmUvZG9tL05hbWVkQXR0
ck1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw2IEBACiAjZGVmaW5lIE5hbWVkQXR0
ck1hcF9oCiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJOYW1lZE5vZGVNYXAu
aCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKICNpZmRlZiBfX09CSkNfXwogI2RlZmluZSBp
ZCBpZF9BVk9JRF9LRVlXT1JECkBAIC0zNSwyNyArMzMsNDggQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi0vLyB0aGUgbWFwIG9mIGF0dHJpYnV0ZXMgb2YgYW4gZWxlbWVudAotY2xhc3MgTmFt
ZWRBdHRyTWFwIDogcHVibGljIE5hbWVkTm9kZU1hcCB7CitjbGFzcyBOb2RlOworCit0eXBlZGVm
IGludCBFeGNlcHRpb25Db2RlOworCitjbGFzcyBOYW1lZE5vZGVNYXAgOiBwdWJsaWMgUmVmQ291
bnRlZDxOYW1lZE5vZGVNYXA+IHsKICAgICBmcmllbmQgY2xhc3MgRWxlbWVudDsKKwogcHJvdGVj
dGVkOgotICAgIE5hbWVkQXR0ck1hcChFbGVtZW50KiBlbGVtZW50KSA6IG1fZWxlbWVudChlbGVt
ZW50KSB7IH0KKyAgICBOYW1lZE5vZGVNYXAoRWxlbWVudCogZWxlbWVudCkgOiBtX2VsZW1lbnQo
ZWxlbWVudCkgeyB9CisKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxOYW1lZEF0dHJN
YXA+IGNyZWF0ZShFbGVtZW50KiBlbGVtZW50KSB7IHJldHVybiBhZG9wdFJlZihuZXcgTmFtZWRB
dHRyTWFwKGVsZW1lbnQpKTsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE5hbWVkTm9kZU1hcD4g
Y3JlYXRlKEVsZW1lbnQqIGVsZW1lbnQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBOYW1lZE5vZGVN
YXAoZWxlbWVudCkpOyB9CiAKLSAgICB2aXJ0dWFsIH5OYW1lZEF0dHJNYXAoKTsKKyAgICB2aXJ0
dWFsIH5OYW1lZE5vZGVNYXAoKTsKIAotICAgIHZvaWQgc2V0QXR0cmlidXRlcyhjb25zdCBOYW1l
ZEF0dHJNYXAmKTsKKyAgICAvLyBQdWJsaWMgRE9NIGludGVyZmFjZS4KIAorICAgIFBhc3NSZWZQ
dHI8Tm9kZT4gZ2V0TmFtZWRJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CisgICAgUGFz
c1JlZlB0cjxOb2RlPiByZW1vdmVOYW1lZEl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJik7CisKKyAgICBQYXNzUmVmUHRyPE5vZGU+IGdldE5hbWVkSXRlbU5TKGNvbnN0IFN0
cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSkgY29uc3Q7CisgICAg
UGFzc1JlZlB0cjxOb2RlPiByZW1vdmVOYW1lZEl0ZW1OUyhjb25zdCBTdHJpbmcmIG5hbWVzcGFj
ZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIFBh
c3NSZWZQdHI8Tm9kZT4gZ2V0TmFtZWRJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNv
bnN0OworICAgIFBhc3NSZWZQdHI8Tm9kZT4gcmVtb3ZlTmFtZWRJdGVtKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPE5vZGU+IHNldE5h
bWVkSXRlbShOb2RlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8Tm9kZT4gc2V0
TmFtZWRJdGVtTlMoTm9kZSogbm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIHNldE5h
bWVkSXRlbShub2RlLCBlYyk7IH0KKworICAgIFBhc3NSZWZQdHI8Tm9kZT4gaXRlbSh1bnNpZ25l
ZCBpbmRleCkgY29uc3Q7CiAgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0
cmlidXRlcy5zaXplKCk7IH0KKworICAgIC8vIEludGVybmFsIGludGVyZmFjZS4KKworICAgIHZv
aWQgc2V0QXR0cmlidXRlcyhjb25zdCBOYW1lZE5vZGVNYXAmKTsKKwogICAgIEF0dHJpYnV0ZSog
YXR0cmlidXRlSXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVz
W2luZGV4XS5nZXQoKTsgfQogICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBR
dWFsaWZpZWROYW1lJikgY29uc3Q7CiAKICAgICB2b2lkIHNocmlua1RvTGVuZ3RoKCkgeyBtX2F0
dHJpYnV0ZXMuc2hyaW5rQ2FwYWNpdHkobGVuZ3RoKCkpOyB9CiAgICAgdm9pZCByZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHVuc2lnbmVkIGNhcGFjaXR5KSB7IG1fYXR0cmlidXRlcy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KGNhcGFjaXR5KTsgfQogCi0gICAgLy8gdXNlZCBkdXJpbmcgcGFyc2luZzog
b25seSBpbnNlcnRzIGlmIG5vdCBhbHJlYWR5IHRoZXJlCi0gICAgLy8gbm8gZXJyb3IgY2hlY2tp
bmchCisgICAgLy8gVXNlZCBkdXJpbmcgcGFyc2luZzogb25seSBpbnNlcnRzIGlmIG5vdCBhbHJl
YWR5IHRoZXJlLiBObyBlcnJvciBjaGVja2luZyEKICAgICB2b2lkIGluc2VydEF0dHJpYnV0ZShQ
YXNzUmVmUHRyPEF0dHJpYnV0ZT4gbmV3QXR0cmlidXRlLCBib29sIGFsbG93RHVwbGljYXRlcykK
ICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9lbGVtZW50KTsKQEAgLTY0LDExICs4MywxMSBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgdmlydHVhbCBib29sIGlzTWFwcGVkQXR0cmlidXRlTWFwKCkg
Y29uc3Q7Ci0gICAgCisKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkKCkgY29uc3QgeyByZXR1
cm4gbV9pZDsgfQogICAgIHZvaWQgc2V0SUQoY29uc3QgQXRvbWljU3RyaW5nJiBuZXdJZCkgeyBt
X2lkID0gbmV3SWQ7IH0KIAotICAgIGJvb2wgbWFwc0VxdWl2YWxlbnQoY29uc3QgTmFtZWRBdHRy
TWFwKiBvdGhlck1hcCkgY29uc3Q7CisgICAgYm9vbCBtYXBzRXF1aXZhbGVudChjb25zdCBOYW1l
ZE5vZGVNYXAqIG90aGVyTWFwKSBjb25zdDsKIAogICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBkbyBu
byBlcnJvciBjaGVja2luZy4KICAgICB2b2lkIGFkZEF0dHJpYnV0ZShQYXNzUmVmUHRyPEF0dHJp
YnV0ZT4pOwpAQCAtODQsMTkgKzEwMyw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZXRhY2hGcm9t
RWxlbWVudCgpOwogICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBTdHJpbmcm
IG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3Q7CiAKLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8Tm9kZT4gZ2V0TmFtZWRJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSkgY29u
c3Q7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+IHJlbW92ZU5hbWVkSXRlbShjb25zdCBT
dHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxO
b2RlPiBnZXROYW1lZEl0ZW1OUyhjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3Ry
aW5nJiBsb2NhbE5hbWUpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlPiByZW1v
dmVOYW1lZEl0ZW1OUyhjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBs
b2NhbE5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2Rl
PiBnZXROYW1lZEl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3Q7Ci0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPE5vZGU+IHJlbW92ZU5hbWVkSXRlbShjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+IHNl
dE5hbWVkSXRlbShOb2RlKiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPE5vZGU+IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwotICAgIHZpcnR1YWwgc2l6ZV90
IHZpcnR1YWxMZW5ndGgoKSBjb25zdDsKLQogICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKICAgICBW
ZWN0b3I8UmVmUHRyPEF0dHJpYnV0ZT4gPiBtX2F0dHJpYnV0ZXM7CiAgICAgQXRvbWljU3RyaW5n
IG1faWQ7CkluZGV4OiBXZWJDb3JlL2RvbS9OYW1lZE1hcHBlZEF0dHJNYXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL05hbWVkTWFwcGVkQXR0ck1hcC5jcHAJKHJldmlzaW9uIDQyMTA2
KQorKysgV2ViQ29yZS9kb20vTmFtZWRNYXBwZWRBdHRyTWFwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNyArMzQsNyBAQCB2b2lkIE5hbWVkTWFwcGVkQXR0ck1hcDo6Y2xlYXJBdHRyaWJ1dGVz
CiB7CiAgICAgbV9jbGFzc05hbWVzLmNsZWFyKCk7CiAgICAgbV9tYXBwZWRBdHRyaWJ1dGVDb3Vu
dCA9IDA7Ci0gICAgTmFtZWRBdHRyTWFwOjpjbGVhckF0dHJpYnV0ZXMoKTsKKyAgICBOYW1lZE5v
ZGVNYXA6OmNsZWFyQXR0cmlidXRlcygpOwogfQogCiBib29sIE5hbWVkTWFwcGVkQXR0ck1hcDo6
aXNNYXBwZWRBdHRyaWJ1dGVNYXAoKSBjb25zdApJbmRleDogV2ViQ29yZS9kb20vTmFtZWRNYXBw
ZWRBdHRyTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTmFtZWRNYXBwZWRBdHRyTWFw
LmgJKHJldmlzaW9uIDQyMTA2KQorKysgV2ViQ29yZS9kb20vTmFtZWRNYXBwZWRBdHRyTWFwLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDExICsyOCwxMSBAQAogCiAjaW5jbHVkZSAiQ2xhc3NOYW1l
cy5oIgogI2luY2x1ZGUgIk1hcHBlZEF0dHJpYnV0ZS5oIiAvLyBUaGlzIGhlYWRlciBpcyBub3Qg
cmVxdWlyZWQgZm9yIHRoZSBOYW1lZE1hcHBlZEF0dHJNYXAgZGVmaW5pdGlvbi4gU2hvdWxkIHJl
bW92ZSBpdC4KLSNpbmNsdWRlICJOYW1lZEF0dHJNYXAuaCIKKyNpbmNsdWRlICJOYW1lZE5vZGVN
YXAuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBOYW1lZE1hcHBlZEF0dHJNYXAg
OiBwdWJsaWMgTmFtZWRBdHRyTWFwIHsKK2NsYXNzIE5hbWVkTWFwcGVkQXR0ck1hcCA6IHB1Ymxp
YyBOYW1lZE5vZGVNYXAgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPE5hbWVkTWFw
cGVkQXR0ck1hcD4gY3JlYXRlKEVsZW1lbnQqIGVsZW1lbnQgPSAwKSB7IHJldHVybiBhZG9wdFJl
ZihuZXcgTmFtZWRNYXBwZWRBdHRyTWFwKGVsZW1lbnQpKTsgfQogCkBAIC00Nyw3ICs0Nyw3IEBA
IHB1YmxpYzoKICAgICBib29sIG1hcHNFcXVpdmFsZW50KGNvbnN0IE5hbWVkTWFwcGVkQXR0ck1h
cCopIGNvbnN0OwogCiBwcml2YXRlOgotICAgIE5hbWVkTWFwcGVkQXR0ck1hcChFbGVtZW50KiBl
bGVtZW50KSA6IE5hbWVkQXR0ck1hcChlbGVtZW50KSwgbV9tYXBwZWRBdHRyaWJ1dGVDb3VudCgw
KSB7IH0KKyAgICBOYW1lZE1hcHBlZEF0dHJNYXAoRWxlbWVudCogZWxlbWVudCkgOiBOYW1lZE5v
ZGVNYXAoZWxlbWVudCksIG1fbWFwcGVkQXR0cmlidXRlQ291bnQoMCkgeyB9CiAKICAgICB2aXJ0
dWFsIHZvaWQgY2xlYXJBdHRyaWJ1dGVzKCk7CiAgICAgdmlydHVhbCBib29sIGlzTWFwcGVkQXR0
cmlidXRlTWFwKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaAkocmV2aXNpb24gNDIxMDYpCisr
KyBXZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMSBA
QAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9y
IEtERS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKLSAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9y
ZykKLSAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykK
LSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lm
bmRlZiBOYW1lZE5vZGVNYXBfaAotI2RlZmluZSBOYW1lZE5vZGVNYXBfaAotCi0jaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIE5vZGU7Ci1jbGFzcyBRdWFsaWZpZWROYW1lOwotY2xhc3Mg
U3RyaW5nOwotCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCi0vLyBHZW5lcmljIE5hbWVk
Tm9kZU1hcCBpbnRlcmZhY2UKLS8vIE90aGVyIGNsYXNzZXMgaW1wbGVtZW50IHRoaXMgZm9yIG1v
cmUgc3BlY2lmaWMgc2l0dWF0aW9ucyBlLmcuIGF0dHJpYnV0ZXMgb2YgYW4gZWxlbWVudC4KLWNs
YXNzIE5hbWVkTm9kZU1hcCA6IHB1YmxpYyBSZWZDb3VudGVkPE5hbWVkTm9kZU1hcD4gewotcHVi
bGljOgotICAgIHZpcnR1YWwgfk5hbWVkTm9kZU1hcCgpIHsgfQotCi0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPE5vZGU+IGdldE5hbWVkSXRlbShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZT4gcmVtb3ZlTmFtZWRJdGVtKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxO
b2RlPiBnZXROYW1lZEl0ZW1OUyhjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3Ry
aW5nJiBsb2NhbE5hbWUpIGNvbnN0ID0gMDsKLSAgICBQYXNzUmVmUHRyPE5vZGU+IHNldE5hbWVk
SXRlbU5TKE5vZGUqIGFyZywgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIHNldE5hbWVkSXRl
bShhcmcsIGVjKTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlPiByZW1vdmVOYW1lZEl0
ZW1OUyhjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUs
IEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0KLSAgICAvLyBET00gbWV0aG9kcyAmIGF0dHJpYnV0ZXMg
Zm9yIE5hbWVkTm9kZU1hcAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlPiBnZXROYW1lZEl0
ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8Tm9kZT4gcmVtb3ZlTmFtZWRJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lLCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2Rl
PiBzZXROYW1lZEl0ZW0oTm9kZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0KLSAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8Tm9kZT4gaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgPSAwOwotICAgIHNp
emVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsTGVuZ3RoKCk7IH0KLQotcHJpdmF0
ZToKLSAgICB2aXJ0dWFsIHNpemVfdCB2aXJ0dWFsTGVuZ3RoKCkgY29uc3QgPSAwOwotfTsKLQot
fSAvL25hbWVzcGFjZQotCi0jZW5kaWYKKyNpbmNsdWRlICJOYW1lZEF0dHJNYXAuaCIKSW5kZXg6
IFdlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuY3Bw
CShyZXZpc2lvbiA0MjEwNikKKysrIFdlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NCw3ICs1NCw3IEBACiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk11
dGF0aW9uRXZlbnQuaCIKICNpbmNsdWRlICJOYW1lTm9kZUxpc3QuaCIKLSNpbmNsdWRlICJOYW1l
ZEF0dHJNYXAuaCIKKyNpbmNsdWRlICJOYW1lZE5vZGVNYXAuaCIKICNpbmNsdWRlICJOb2RlUmFy
ZURhdGEuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50
LmgiCkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBOb2RlOjpkdW1wU3RhdGlzdGljcygpCiAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5maXJzdC0+c2Vjb25kKys7CiAKICAgICAgICAgICAgICAg
ICAvLyBBdHRyaWJ1dGVNYXAgc3RhdHMKLSAgICAgICAgICAgICAgICBpZiAoTmFtZWRBdHRyTWFw
KiBhdHRyTWFwID0gZWxlbWVudC0+YXR0cmlidXRlcyh0cnVlKSkgeworICAgICAgICAgICAgICAg
IGlmIChOYW1lZE5vZGVNYXAqIGF0dHJNYXAgPSBlbGVtZW50LT5hdHRyaWJ1dGVzKHRydWUpKSB7
CiAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgKz0gYXR0ck1hcC0+bGVuZ3RoKCk7CiAg
ICAgICAgICAgICAgICAgICAgICsrYXR0ck1hcHM7CiAgICAgICAgICAgICAgICAgICAgIGlmIChh
dHRyTWFwLT5pc01hcHBlZEF0dHJpYnV0ZU1hcCgpKQpAQCAtMjQ5LDcgKzI0OSw3IEBAIHZvaWQg
Tm9kZTo6ZHVtcFN0YXRpc3RpY3MoKQogICAgIHByaW50ZigiICBOdW1iZXIgb2YgTWFwcGVkQXR0
cmlidXRlczogJXp1IFslenVdXG4iLCBtYXBwZWRBdHRyaWJ1dGVzLCBzaXplb2YoTWFwcGVkQXR0
cmlidXRlKSk7CiAgICAgcHJpbnRmKCIgIE51bWJlciBvZiBNYXBwZWRBdHRyaWJ1dGVzIHdpdGgg
YSBTdHlsZURlY2xhcmF0aW9uOiAlenVcbiIsIG1hcHBlZEF0dHJpYnV0ZXNXaXRoU3R5bGVEZWNs
KTsKICAgICBwcmludGYoIiAgTnVtYmVyIG9mIEF0dHJpYnV0ZXMgd2l0aCBhbiBBdHRyOiAlenVc
biIsIGF0dHJpYnV0ZXNXaXRoQXR0cik7Ci0gICAgcHJpbnRmKCIgIE51bWJlciBvZiBOYW1lZEF0
dHJNYXBzOiAlenVcbiIsIGF0dHJNYXBzKTsKKyAgICBwcmludGYoIiAgTnVtYmVyIG9mIE5hbWVk
Tm9kZU1hcHM6ICV6dVxuIiwgYXR0ck1hcHMpOwogICAgIHByaW50ZigiICBOdW1iZXIgb2YgTmFt
ZWRNYXBwZWRBdHRyTWFwOiAlenVcbiIsIG1hcHBlZEF0dHJNYXBzKTsKICNlbmRpZgogfQpAQCAt
MTYxMyw4ICsxNjEzLDggQEAgYm9vbCBOb2RlOjppc0VxdWFsTm9kZShOb2RlICpvdGhlcikgY29u
cwogICAgIGlmIChub2RlVmFsdWUoKSAhPSBvdGhlci0+bm9kZVZhbHVlKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAKLSAgICBOYW1lZEF0dHJNYXAgKmF0dHJzID0gYXR0cmlidXRlcygp
OwotICAgIE5hbWVkQXR0ck1hcCAqb3RoZXJBdHRycyA9IG90aGVyLT5hdHRyaWJ1dGVzKCk7Cisg
ICAgTmFtZWROb2RlTWFwICphdHRycyA9IGF0dHJpYnV0ZXMoKTsKKyAgICBOYW1lZE5vZGVNYXAg
Km90aGVyQXR0cnMgPSBvdGhlci0+YXR0cmlidXRlcygpOwogICAgIAogICAgIGlmICghYXR0cnMg
JiYgb3RoZXJBdHRycykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY1NSw3ICsxNjU1LDcg
QEAgYm9vbCBOb2RlOjppc0RlZmF1bHROYW1lc3BhY2UoY29uc3QgQXRvbQogICAgICAgICAgICAg
ICAgIHJldHVybiBlbGVtLT5uYW1lc3BhY2VVUkkoKSA9PSBuYW1lc3BhY2VVUkk7CiAKICAgICAg
ICAgICAgIGlmIChlbGVtLT5oYXNBdHRyaWJ1dGVzKCkpIHsKLSAgICAgICAgICAgICAgICBOYW1l
ZEF0dHJNYXAgKmF0dHJzID0gZWxlbS0+YXR0cmlidXRlcygpOworICAgICAgICAgICAgICAgIE5h
bWVkTm9kZU1hcCAqYXR0cnMgPSBlbGVtLT5hdHRyaWJ1dGVzKCk7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJzLT5sZW5ndGgo
KTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSAqYXR0ciA9IGF0dHJzLT5h
dHRyaWJ1dGVJdGVtKGkpOwpAQCAtMTc0MSw3ICsxNzQxLDcgQEAgU3RyaW5nIE5vZGU6Omxvb2t1
cE5hbWVzcGFjZVVSSShjb25zdCBTdAogICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLT5uYW1l
c3BhY2VVUkkoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGVsZW0tPmhhc0F0dHJp
YnV0ZXMoKSkgewotICAgICAgICAgICAgICAgIE5hbWVkQXR0ck1hcCAqYXR0cnMgPSBlbGVtLT5h
dHRyaWJ1dGVzKCk7CisgICAgICAgICAgICAgICAgTmFtZWROb2RlTWFwICphdHRycyA9IGVsZW0t
PmF0dHJpYnV0ZXMoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYXR0cnMtPmxlbmd0aCgpOyBpKyspIHsKICAgICAgICAgICAgICAg
ICAgICAgQXR0cmlidXRlICphdHRyID0gYXR0cnMtPmF0dHJpYnV0ZUl0ZW0oaSk7CkBAIC0xNzk2
LDcgKzE3OTYsNyBAQCBTdHJpbmcgTm9kZTo6bG9va3VwTmFtZXNwYWNlUHJlZml4KGNvbnN0CiAg
ICAgICAgIHJldHVybiBwcmVmaXgoKTsKICAgICAKICAgICBpZiAoaGFzQXR0cmlidXRlcygpKSB7
Ci0gICAgICAgIE5hbWVkQXR0ck1hcCAqYXR0cnMgPSBhdHRyaWJ1dGVzKCk7CisgICAgICAgIE5h
bWVkTm9kZU1hcCAqYXR0cnMgPSBhdHRyaWJ1dGVzKCk7CiAgICAgICAgIAogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cnMtPmxlbmd0aCgpOyBpKyspIHsKICAgICAgICAgICAg
IEF0dHJpYnV0ZSAqYXR0ciA9IGF0dHJzLT5hdHRyaWJ1dGVJdGVtKGkpOwpAQCAtMTkzNyw3ICsx
OTM3LDcgQEAgdW5zaWduZWQgc2hvcnQgTm9kZTo6Y29tcGFyZURvY3VtZW50UG9zaQogICAgIGlm
IChhdHRyMSAmJiBhdHRyMiAmJiBzdGFydDEgPT0gc3RhcnQyICYmIHN0YXJ0MSkgewogICAgICAg
ICAvLyBXZSBhcmUgY29tcGFyaW5nIHR3byBhdHRyaWJ1dGVzIG9uIHRoZSBzYW1lIG5vZGUuICBD
cmF3bCBvdXIgYXR0cmlidXRlIG1hcAogICAgICAgICAvLyBhbmQgc2VlIHdoaWNoIG9uZSB3ZSBo
aXQgZmlyc3QuCi0gICAgICAgIE5hbWVkQXR0ck1hcCogbWFwID0gYXR0cjEtPm93bmVyRWxlbWVu
dCgpLT5hdHRyaWJ1dGVzKHRydWUpOworICAgICAgICBOYW1lZE5vZGVNYXAqIG1hcCA9IGF0dHIx
LT5vd25lckVsZW1lbnQoKS0+YXR0cmlidXRlcyh0cnVlKTsKICAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gbWFwLT5sZW5ndGgoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7CiAgICAgICAgICAgICAvLyBJZiBuZWl0aGVyIG9mIHRoZSB0d28gZGV0ZXJt
aW5pbmcgbm9kZXMgaXMgYSBjaGlsZCBub2RlIGFuZCBub2RlVHlwZSBpcyB0aGUgc2FtZSBmb3Ig
Ym90aCBkZXRlcm1pbmluZyBub2RlcywgdGhlbiBhbiAKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDQyMTA2KQorKysg
V2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIGNsYXNz
IEZyYW1lOwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEtleWJvYXJkRXZlbnQ7CiBjbGFzcyBOU1Jl
c29sdmVyOwotY2xhc3MgTmFtZWRBdHRyTWFwOworY2xhc3MgTmFtZWROb2RlTWFwOwogY2xhc3Mg
Tm9kZUxpc3Q7CiBjbGFzcyBOb2RlUmFyZURhdGE7CiBjbGFzcyBQbGF0Zm9ybUtleWJvYXJkRXZl
bnQ7CkBAIC0xMjYsNyArMTI2LDcgQEAgcHVibGljOgogICAgIE5vZGUqIGZpcnN0Q2hpbGQoKSBj
b25zdCB7IHJldHVybiBpc0NvbnRhaW5lck5vZGUoKSA/IGNvbnRhaW5lckZpcnN0Q2hpbGQoKSA6
IDA7IH0KICAgICBOb2RlKiBsYXN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBpc0NvbnRhaW5lck5v
ZGUoKSA/IGNvbnRhaW5lckxhc3RDaGlsZCgpIDogMDsgfQogICAgIGJvb2wgaGFzQXR0cmlidXRl
cygpIGNvbnN0OwotICAgIE5hbWVkQXR0ck1hcCogYXR0cmlidXRlcygpIGNvbnN0OworICAgIE5h
bWVkTm9kZU1hcCogYXR0cmlidXRlcygpIGNvbnN0OwogCiAgICAgdmlydHVhbCBLVVJMIGJhc2VV
UkkoKSBjb25zdDsKICAgICAKSW5kZXg6IFdlYkNvcmUvZG9tL1hNTFRva2VuaXplckxpYnhtbDIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplckxpYnhtbDIuY3BwCShy
ZXZpc2lvbiA0MjEwNikKKysrIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplckxpYnhtbDIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01ODMsNyArNTgzLDcgQEAgWE1MVG9rZW5pemVyOjpYTUxUb2tlbml6
ZXIoRG9jdW1lbnRGcmFnbQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgZm9yIChFbGVtZW50
KiBlbGVtZW50ID0gZWxlbVN0YWNrLmxhc3QoKTsgIWVsZW1TdGFjay5pc0VtcHR5KCk7IGVsZW1T
dGFjay5yZW1vdmVMYXN0KCkpIHsKLSAgICAgICAgaWYgKE5hbWVkQXR0ck1hcCogYXR0cnMgPSBl
bGVtZW50LT5hdHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgaWYgKE5hbWVkTm9kZU1hcCogYXR0cnMg
PSBlbGVtZW50LT5hdHRyaWJ1dGVzKCkpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBhdHRycy0+bGVuZ3RoKCk7IGkrKykgewogICAgICAgICAgICAgICAgIEF0dHJpYnV0
ZSogYXR0ciA9IGF0dHJzLT5hdHRyaWJ1dGVJdGVtKGkpOwogICAgICAgICAgICAgICAgIGlmIChh
dHRyLT5sb2NhbE5hbWUoKSA9PSAieG1sbnMiKQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0FwcGx5
U3R5bGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuY3BwCShyZXZpc2lvbiA0MjEwNikKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0
eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NSw3ICsyNjUsNyBAQCBzdGF0aWMg
Ym9vbCBpc1NwYW5XaXRob3V0QXR0cmlidXRlc09yVW5zCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGNvbnN0IEhUTUxFbGVtZW50KiBlbGVtID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVs
ZW1lbnQqPihub2RlKTsKLSAgICBOYW1lZEF0dHJNYXAqIGF0dHJpYnV0ZXMgPSBlbGVtLT5hdHRy
aWJ1dGVzKHRydWUpOyAvLyByZWFkb25seQorICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9
IGVsZW0tPmF0dHJpYnV0ZXModHJ1ZSk7IC8vIHJlYWRvbmx5CiAgICAgaWYgKGF0dHJpYnV0ZXMt
Pmxlbmd0aCgpID09IDApCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC0yNzgsNyArMjc4LDcg
QEAgc3RhdGljIGJvb2wgaXNFbXB0eUZvbnRUYWcoY29uc3QgTm9kZSAqbgogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBjb25zdCBFbGVtZW50ICplbGVtID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
RWxlbWVudCAqPihub2RlKTsKLSAgICBOYW1lZEF0dHJNYXAgKm1hcCA9IGVsZW0tPmF0dHJpYnV0
ZXModHJ1ZSk7IC8vIHRydWUgZm9yIHJlYWQtb25seQorICAgIE5hbWVkTm9kZU1hcCAqbWFwID0g
ZWxlbS0+YXR0cmlidXRlcyh0cnVlKTsgLy8gdHJ1ZSBmb3IgcmVhZC1vbmx5CiAgICAgcmV0dXJu
ICghbWFwIHx8IG1hcC0+bGVuZ3RoKCkgPT0gMSkgJiYgZWxlbS0+Z2V0QXR0cmlidXRlKGNsYXNz
QXR0cikgPT0gc3R5bGVTcGFuQ2xhc3NTdHJpbmcoKTsKIH0KIApAQCAtMTM1Nyw4ICsxMzU3LDgg
QEAgc3RhdGljIGJvb2wgYXJlSWRlbnRpY2FsRWxlbWVudHMoTm9kZSAqZgogICAgIGlmICghZmly
c3RFbGVtZW50LT50YWdRTmFtZSgpLm1hdGNoZXMoc2Vjb25kRWxlbWVudC0+dGFnUU5hbWUoKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIE5hbWVkQXR0ck1hcCAqZmlyc3RNYXAgPSBm
aXJzdEVsZW1lbnQtPmF0dHJpYnV0ZXMoKTsKLSAgICBOYW1lZEF0dHJNYXAgKnNlY29uZE1hcCA9
IHNlY29uZEVsZW1lbnQtPmF0dHJpYnV0ZXMoKTsKKyAgICBOYW1lZE5vZGVNYXAgKmZpcnN0TWFw
ID0gZmlyc3RFbGVtZW50LT5hdHRyaWJ1dGVzKCk7CisgICAgTmFtZWROb2RlTWFwICpzZWNvbmRN
YXAgPSBzZWNvbmRFbGVtZW50LT5hdHRyaWJ1dGVzKCk7CiAKICAgICB1bnNpZ25lZCBmaXJzdExl
bmd0aCA9IGZpcnN0TWFwLT5sZW5ndGgoKTsKIApJbmRleDogV2ViQ29yZS9lZGl0aW5nL21hcmt1
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9u
IDQyMTA2KQorKysgV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQzOSw3ICs0MzksNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTdGFydE1hcmt1cChWZWN0b3I8VUNo
CiAgICAgICAgICAgICBjb25zdCBFbGVtZW50KiBlbCA9IHN0YXRpY19jYXN0PGNvbnN0IEVsZW1l
bnQqPihub2RlKTsKICAgICAgICAgICAgIGJvb2wgY29udmVydCA9IGNvbnZlcnRCbG9ja3NUb0lu
bGluZXMgJiYgaXNCbG9jayhjb25zdF9jYXN0PE5vZGUqPihub2RlKSk7CiAgICAgICAgICAgICBh
cHBlbmQocmVzdWx0LCBlbC0+bm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpKTsKLSAgICAgICAgICAg
IE5hbWVkQXR0ck1hcCAqYXR0cnMgPSBlbC0+YXR0cmlidXRlcygpOworICAgICAgICAgICAgTmFt
ZWROb2RlTWFwICphdHRycyA9IGVsLT5hdHRyaWJ1dGVzKCk7CiAgICAgICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBhdHRycy0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBpZiAoIWRvY3VtZW50SXNI
VE1MICYmIG5hbWVzcGFjZXMgJiYgc2hvdWxkQWRkTmFtZXNwYWNlRWxlbShlbCkpCiAgICAgICAg
ICAgICAgICAgYXBwZW5kTmFtZXNwYWNlKHJlc3VsdCwgZWwtPnByZWZpeCgpLCBlbC0+bmFtZXNw
YWNlVVJJKCksICpuYW1lc3BhY2VzKTsKQEAgLTY0Miw3ICs2NDIsNyBAQCBzdGF0aWMgdm9pZCBj
b21wbGV0ZVVSTHMoTm9kZSogbm9kZSwgY29uCiAgICAgZm9yIChOb2RlKiBuID0gbm9kZTsgbiAh
PSBlbmQ7IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKICAgICAgICAgaWYgKG4tPmlzRWxl
bWVudE5vZGUoKSkgewogICAgICAgICAgICAgRWxlbWVudCogZSA9IHN0YXRpY19jYXN0PEVsZW1l
bnQqPihuKTsKLSAgICAgICAgICAgIE5hbWVkQXR0ck1hcCogYXR0cnMgPSBlLT5hdHRyaWJ1dGVz
KCk7CisgICAgICAgICAgICBOYW1lZE5vZGVNYXAqIGF0dHJzID0gZS0+YXR0cmlidXRlcygpOwog
ICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXR0cnMtPmxlbmd0aCgpOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAg
ICAgQXR0cmlidXRlKiBhdHRyID0gYXR0cnMtPmF0dHJpYnV0ZUl0ZW0oaSk7CkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQ
YXJzZXIuY3BwCShyZXZpc2lvbiA0MjEwNikKKysrIFdlYkNvcmUvaHRtbC9IVE1MUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDE3LDkgKzQxNyw5IEBAIGJvb2wgSFRNTFBhcnNlcjo6aGFu
ZGxlRXJyb3IoTm9kZSogbiwgYm8KICAgICAgICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoUmVk
dW5kYW50SFRNTEJvZHlFcnJvciwgJmxvY2FsTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIC8v
IHdlIGhhdmUgYW5vdGhlciA8SFRNTD4gZWxlbWVudC4uLi4gYXBwbHkgYXR0cmlidXRlcyB0byBl
eGlzdGluZyBvbmUKICAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IG92
ZXJ3cml0ZSBhbHJlYWR5IGV4aXN0aW5nIGF0dHJpYnV0ZXMKLSAgICAgICAgICAgICAgICAgICAg
TmFtZWRBdHRyTWFwKiBtYXAgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmF0dHJpYnV0ZXMo
dHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIE5hbWVkTm9kZU1hcCogbWFwID0gc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KG4pLT5hdHRyaWJ1dGVzKHRydWUpOwogICAgICAgICAgICAgICAgICAgICBF
bGVtZW50KiBleGlzdGluZ0hUTUwgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obV9kb2N1bWVudC0+
ZG9jdW1lbnRFbGVtZW50KCkpOwotICAgICAgICAgICAgICAgICAgICBOYW1lZEF0dHJNYXAqIGJt
YXAgPSBleGlzdGluZ0hUTUwtPmF0dHJpYnV0ZXMoZmFsc2UpOworICAgICAgICAgICAgICAgICAg
ICBOYW1lZE5vZGVNYXAqIGJtYXAgPSBleGlzdGluZ0hUTUwtPmF0dHJpYnV0ZXMoZmFsc2UpOwog
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGwgPSAwOyBtYXAgJiYgbCA8IG1hcC0+
bGVuZ3RoKCk7ICsrbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlKiBpdCA9
IG1hcC0+YXR0cmlidXRlSXRlbShsKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYm1h
cC0+Z2V0QXR0cmlidXRlSXRlbShpdC0+bmFtZSgpKSkKQEAgLTQ2MSw5ICs0NjEsOSBAQCBib29s
IEhUTUxQYXJzZXI6OmhhbmRsZUVycm9yKE5vZGUqIG4sIGJvCiAgICAgICAgICAgICAgICAgLy8g
bWFrZSBzdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBhbHJlYWR5IGV4aXN0aW5nIGF0dHJpYnV0ZXMK
ICAgICAgICAgICAgICAgICAvLyBzb21lIHNpdGVzIHVzZSA8Ym9keSBiZ2NvbG9yPXJpZ2h0Y29s
b3I+Li4uPGJvZHkgYmdjb2xvcj13cm9uZ2NvbG9yPgogICAgICAgICAgICAgICAgIHJlcG9ydEVy
cm9yKFJlZHVuZGFudEhUTUxCb2R5RXJyb3IsICZsb2NhbE5hbWUpOwotICAgICAgICAgICAgICAg
IE5hbWVkQXR0ck1hcCogbWFwID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5hdHRyaWJ1dGVz
KHRydWUpOworICAgICAgICAgICAgICAgIE5hbWVkTm9kZU1hcCogbWFwID0gc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG4pLT5hdHRyaWJ1dGVzKHRydWUpOwogICAgICAgICAgICAgICAgIEVsZW1lbnQq
IGV4aXN0aW5nQm9keSA9IG1fZG9jdW1lbnQtPmJvZHkoKTsKLSAgICAgICAgICAgICAgICBOYW1l
ZEF0dHJNYXAqIGJtYXAgPSBleGlzdGluZ0JvZHktPmF0dHJpYnV0ZXMoZmFsc2UpOworICAgICAg
ICAgICAgICAgIE5hbWVkTm9kZU1hcCogYm1hcCA9IGV4aXN0aW5nQm9keS0+YXR0cmlidXRlcyhm
YWxzZSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsID0gMDsgbWFwICYmIGwgPCBt
YXAtPmxlbmd0aCgpOyArK2wpIHsKICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlKiBpdCA9
IG1hcC0+YXR0cmlidXRlSXRlbShsKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFibWFwLT5n
ZXRBdHRyaWJ1dGVJdGVtKGl0LT5uYW1lKCkpKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUGFydE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UGFydE9iamVjdC5jcHAJKHJldmlzaW9uIDQyMTA2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUGFydE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lk
IFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldChib29sCiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIC8vIFR1cm4gdGhlIGF0dHJpYnV0ZXMgb2YgZWl0aGVyIHRoZSBFTUJFRCB0YWcg
b3IgT0JKRUNUIHRhZyBpbnRvIGFycmF5cywgYnV0IGRvbid0IG92ZXJyaWRlIFBBUkFNIHZhbHVl
cy4KLSAgICAgICAgTmFtZWRBdHRyTWFwKiBhdHRyaWJ1dGVzID0gZW1iZWRPck9iamVjdC0+YXR0
cmlidXRlcygpOworICAgICAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSBlbWJlZE9yT2Jq
ZWN0LT5hdHRyaWJ1dGVzKCk7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7CiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cmlidXRlcy0+bGVuZ3RoKCk7ICsraSkgewog
ICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSogaXQgPSBhdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVt
KGkpOwpAQCAtMjgwLDcgKzI4MCw3IEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lk
Z2V0KGJvb2wKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAvLyBhZGQgYWxsIGF0dHJp
YnV0ZXMgc2V0IG9uIHRoZSBlbWJlZCBvYmplY3QKLSAgICAgICAgTmFtZWRBdHRyTWFwKiBhID0g
by0+YXR0cmlidXRlcygpOworICAgICAgICBOYW1lZE5vZGVNYXAqIGEgPSBvLT5hdHRyaWJ1dGVz
KCk7CiAgICAgICAgIGlmIChhKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYS0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSogaXQgPSBh
LT5hdHRyaWJ1dGVJdGVtKGkpOwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQcm9wZXJ0
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUHJvcGVydHkuaAkocmV2
aXNpb24gNDIxMDYpCisrKyBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFByb3BlcnR5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQzMCw3ICs0MzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgewog
ICAgICAgICBBdG9taWNTdHJpbmcgdmFsdWUoU1ZHQW5pbWF0ZWRUeXBlVmFsdWU8RGVjb3JhdGVk
VHlwZT46OnRvU3RyaW5nKGJhc2VWYWx1ZSkpOwogCi0gICAgICAgIE5hbWVkQXR0ck1hcCogbmFt
ZWRBdHRyTWFwID0gb3duZXJFbGVtZW50LT5hdHRyaWJ1dGVzKGZhbHNlKTsgCisgICAgICAgIE5h
bWVkTm9kZU1hcCogbmFtZWRBdHRyTWFwID0gb3duZXJFbGVtZW50LT5hdHRyaWJ1dGVzKGZhbHNl
KTsgCiAgICAgICAgIEF0dHJpYnV0ZSogb2xkID0gbmFtZWRBdHRyTWFwLT5nZXRBdHRyaWJ1dGVJ
dGVtKGF0dHJpYnV0ZU5hbWUpOwogICAgICAgICBpZiAob2xkICYmIHZhbHVlLmlzTnVsbCgpKSAK
ICAgICAgICAgICAgIG5hbWVkQXR0ck1hcC0+cmVtb3ZlQXR0cmlidXRlKG9sZC0+bmFtZSgpKTsg
CkluZGV4OiBXZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiA0MjEwNikKKysrIFdlYkNvcmUv
eG1sL1hQYXRoRnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAog
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAi
TmFtZWRBdHRyTWFwLmgiCisjaW5jbHVkZSAiTmFtZWROb2RlTWFwLmgiCiAjaW5jbHVkZSAiWE1M
TmFtZXMuaCIKICNpbmNsdWRlICJYUGF0aFV0aWwuaCIKICNpbmNsdWRlICJYUGF0aFZhbHVlLmgi
CkBAIC01MzcsNyArNTM3LDcgQEAgVmFsdWUgRnVuTGFuZzo6ZXZhbHVhdGUoKSBjb25zdAogICAg
IEF0dHJpYnV0ZSogbGFuZ3VhZ2VBdHRyaWJ1dGUgPSAwOwogICAgIE5vZGUqIG5vZGUgPSBldmFs
dWF0aW9uQ29udGV4dCgpLm5vZGUuZ2V0KCk7CiAgICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAg
TmFtZWRBdHRyTWFwKiBhdHRycyA9IG5vZGUtPmF0dHJpYnV0ZXMoKTsKKyAgICAgICAgTmFtZWRO
b2RlTWFwKiBhdHRycyA9IG5vZGUtPmF0dHJpYnV0ZXMoKTsKICAgICAgICAgaWYgKGF0dHJzKQog
ICAgICAgICAgICAgbGFuZ3VhZ2VBdHRyaWJ1dGUgPSBhdHRycy0+Z2V0QXR0cmlidXRlSXRlbShY
TUxOYW1lczo6bGFuZ0F0dHIpOwogICAgICAgICBpZiAobGFuZ3VhZ2VBdHRyaWJ1dGUpCkluZGV4
OiBXZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hQ
YXRoU3RlcC5jcHAJKHJldmlzaW9uIDQyMTA2KQorKysgV2ViQ29yZS94bWwvWFBhdGhTdGVwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiTmFtZWRBdHRyTWFwLmgiCisjaW5j
bHVkZSAiTmFtZWROb2RlTWFwLmgiCiAjaW5jbHVkZSAiWFBhdGhOU1Jlc29sdmVyLmgiCiAjaW5j
bHVkZSAiWFBhdGhQYXJzZXIuaCIKICNpbmNsdWRlICJYUGF0aFV0aWwuaCIKQEAgLTE4Nyw3ICsx
ODcsNyBAQCB2b2lkIFN0ZXA6Om5vZGVzSW5BeGlzKE5vZGUqIGNvbnRleHQsIE5vCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBOYW1lZEF0dHJNYXAqIGF0dHJzID0gY29udGV4dC0+YXR0cmlidXRlcygpOworICAgICAgICAg
ICAgTmFtZWROb2RlTWFwKiBhdHRycyA9IGNvbnRleHQtPmF0dHJpYnV0ZXMoKTsKICAgICAgICAg
ICAgIGlmICghYXR0cnMpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCg==
</data>
<flag name="review"
          id="14390"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>