<?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>152874</bug_id>
          
          <creation_ts>2016-01-07 17:09:43 -0800</creation_ts>
          <short_desc>[XSS Auditor] Extract attribute truncation logic and formalize string canonicalization</short_desc>
          <delta_ts>2016-01-14 13:40:28 -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>WebCore Misc.</component>
          <version>WebKit Local Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>BlinkMergeCandidate, XSSAuditor</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1153695</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-01-07 17:09:43 -0800</bug_when>
    <thetext>Blink Code Review: &lt;https://codereview.chromium.org/338193002/&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153697</commentid>
    <comment_count>1</comment_count>
      <attachid>268513</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-01-07 17:11:37 -0800</bug_when>
    <thetext>Created attachment 268513
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155200</commentid>
    <comment_count>2</comment_count>
      <attachid>268513</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-01-13 13:17:02 -0800</bug_when>
    <thetext>Comment on attachment 268513
Patch

I assume there are no new tests because this is just a refactoring?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155204</commentid>
    <comment_count>3</comment_count>
      <attachid>268513</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-01-13 13:19:11 -0800</bug_when>
    <thetext>Comment on attachment 268513
Patch

The patch looks reasonable, but please make sure tests pass before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155558</commentid>
    <comment_count>4</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-01-14 13:40:28 -0800</bug_when>
    <thetext>Committed r195074: &lt;http://trac.webkit.org/changeset/195074&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268513</attachid>
            <date>2016-01-07 17:11:37 -0800</date>
            <delta_ts>2016-01-13 13:19:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152874-20160107171105.patch</filename>
            <type>text/plain</type>
            <size>25907</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0NzQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWExZWU4YWIxMDgyZDUw
ZDliZjc0N2E5ODQ0ZjdkNWI2NDAxZGJiYi4uNDM5ZTNmYzRmY2ViYjY1YTUxY2JiMDlkNjk3ZTVm
OTVmMzc1M2E4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ5IEBACiAyMDE2LTAxLTA3ICBEYW5p
ZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAorICAgICAgICBbWFNTIEF1ZGl0b3JdIEV4
dHJhY3QgYXR0cmlidXRlIHRydW5jYXRpb24gbG9naWMgYW5kIGZvcm1hbGl6ZSBzdHJpbmcgY2Fu
b25pY2FsaXphdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUyODc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRGVyaXZlZCBmcm9tIEJsaW5rIHBhdGNoIChieSBUb20gU2VwZXogPHRzZXBlekBjaHJv
bWl1bS5vcmc+KToKKyAgICAgICAgPGh0dHBzOi8vc3JjLmNocm9taXVtLm9yZy92aWV3dmMvYmxp
bms/cmV2aXNpb249MTc2MzM5JnZpZXc9cmV2aXNpb24+CisKKyAgICAgICAgRXh0cmFjdCB0aGUg
c3JjLWxpa2UgYW5kIHNjcmlwdC1saWtlIGF0dHJpYnV0ZSB0cnVuY2F0aW9uIGxvZ2ljIGludG8g
aW5kZXBlbmRlbnQgZnVuY3Rpb25zCisgICAgICAgIHRvd2FyZHMgbWFraW5nIGl0IG1vcmUgc3Ry
YWlnaHRmb3J3YXJkIHRvIHJlLXB1cnBvc2UgdGhpcyBsb2dpYy4gQWRkaXRpb25hbGx5LCBmb3Jt
YWxpemUgdGhlCisgICAgICAgIGNvbmNlcHQgb2Ygc3RyaW5nIGNhbm9uaWNhbGl6YXRpb24gYXMg
YSBtZW1iZXIgZnVuY3Rpb24gdGhhdCBjb25zb2xpZGF0ZXMgdGhlIHByb2Nlc3Mgb2YKKyAgICAg
ICAgZGVjb2RpbmcgVVJMIGVzY2FwZSBzZXF1ZW5jZXMsIHRydW5jYXRpbmcgdGhlIGRlY29kZWQg
c3RyaW5nIChpZiBhcHBsaWNhYmxlKSwgYW5kIHJlbW92aW5nCisgICAgICAgIGNoYXJhY3RlcnMg
dGhhdCBhcmUgY29uc2lkZXJlZCBub2lzZS4KKworICAgICAgICAqIGh0bWwvcGFyc2VyL1hTU0F1
ZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dHJ1bmNhdGVGb3JTcmNMaWtlQXR0cmlidXRl
KTogRXh0cmFjdGVkIGZyb20gWFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JBdHRyaWJ1dGUo
KS4KKyAgICAgICAgKFdlYkNvcmU6OnRydW5jYXRlRm9yU2NyaXB0TGlrZUF0dHJpYnV0ZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6aW5pdCk6IFdyaXRlIGluIHRlcm1z
IG9mIFhTU0F1ZGl0b3I6OmNhbm9uaWNhbGl6ZSgpLgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVk
aXRvcjo6ZmlsdGVyQ2hhcmFjdGVyVG9rZW4pOiBVcGRhdGVkIHRvIG1ha2UgdXNlIG9mIGZvcm1h
bGl6ZWQgY2Fub25pY2FsaXphdGlvbiBtZXRob2RzLgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVk
aXRvcjo6ZmlsdGVyU2NyaXB0VG9rZW4pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1
ZGl0b3I6OmZpbHRlck9iamVjdFRva2VuKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpYU1NB
dWRpdG9yOjpmaWx0ZXJQYXJhbVRva2VuKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpYU1NB
dWRpdG9yOjpmaWx0ZXJFbWJlZFRva2VuKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpYU1NB
dWRpdG9yOjpmaWx0ZXJBcHBsZXRUb2tlbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6WFNT
QXVkaXRvcjo6ZmlsdGVyRnJhbWVUb2tlbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6WFNT
QXVkaXRvcjo6ZmlsdGVySW5wdXRUb2tlbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6WFNT
QXVkaXRvcjo6ZmlsdGVyQnV0dG9uVG9rZW4pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlhT
U0F1ZGl0b3I6OmVyYXNlRGFuZ2Vyb3VzQXR0cmlidXRlc0lmSW5qZWN0ZWQpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCk6IFVw
ZGF0ZWQgY29kZSB0byB1c2UgZWFybHkgcmV0dXJuIHN0eWxlIGFuZCBhdm9pZCBhbiB1bm5lY2Vz
c2FyeSBzdHJpbmcKKyAgICAgICAgY29tcGFyaXNvbiB3aGVuIHdlIGtub3cgdGhhdCBhIHNyYyBh
dHRyaWJ1dGUgd2FzIGluamVjdGVkLgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6Y2Fu
b25pY2FsaXplZFNuaXBwZXRGb3JUYWdOYW1lKTogUmVuYW1lZDsgZm9ybWVybHkga25vd24gYXMg
WFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JOYW1lKCkuIFVwZGF0ZWQKKyAgICAgICAgdG8g
bWFrZSB1c2Ugb2YgWFNTQXVkaXRvcjo6Y2Fub25pY2FsaXplKCkuCisgICAgICAgIChXZWJDb3Jl
OjpYU1NBdWRpdG9yOjpzbmlwcGV0RnJvbUF0dHJpYnV0ZSk6IFJlbmFtZWQ7IGZvcm1lcmx5IGtu
b3duIGFzIFhTU0F1ZGl0b3I6OmRlY29kZWRTbmlwcGV0Rm9yQXR0cmlidXRlKCkuIE1vdmVkCisg
ICAgICAgIHRydW5jYXRpb24gbG9naWMgZnJvbSBoZXJlIHRvIFdlYkNvcmU6OnRydW5jYXRlRm9y
e1NjcmlwdCwgU3JjfUxpa2VBdHRyaWJ1dGUuCisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9y
OjpjYW5vbmljYWxpemUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmNh
bm9uaWNhbGl6ZWRTbmlwcGV0Rm9ySmF2YVNjcmlwdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Y2Fub25pY2FsaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6
OmRlY29kZWRTbmlwcGV0Rm9yTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpYU1NB
dWRpdG9yOjpkZWNvZGVkU25pcHBldEZvckF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpYU1NBdWRpdG9yOjpkZWNvZGVkU25pcHBldEZvckphdmFTY3JpcHQpOiBEZWxldGVk
LgorICAgICAgICAqIGh0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuaDogRGVmaW5lIGVudW0gY2xhc3Mg
Zm9yIHRoZSB2YXJpb3VzIGF0dHJpYnV0ZSB0cnVuY2F0aW9uIHN0eWxlcy4KKworMjAxNi0wMS0w
NyAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CisKICAgICAgICAgW1hTUyBBdWRp
dG9yXSBEbyBub3QgaW5jbHVkZSB0cmFpbGluZyBjb21tZW50IGNoYXJhY3RlcnMgaW4gSmF2YVNj
cmlwdCBzbmlwcGV0cwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUyODczCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hT
U0F1ZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHAK
aW5kZXggNWMxOWE5YTg3MGFlYjRkYTA4YzJlMGQ3MDJmMmI4OWZlOWFmMzdmNC4uMGJhMjg3M2Rl
NjU1ZDdhM2Y5MzIxMDA4ZWM4MGE2ODFlNDBlNzE5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvWFNTQXVkaXRvci5jcHAKQEAgLTYyLDExICs2Miw2IEBAIHN0YXRpYyBib29sIGlzTm9u
Q2Fub25pY2FsQ2hhcmFjdGVyKFVDaGFyIGMpCiAgICAgcmV0dXJuIChjID09ICdcXCcgfHwgYyA9
PSAnMCcgfHwgYyA9PSAnXDAnIHx8IGMgPT0gJy8nIHx8IGMgPj0gMTI3KTsKIH0KIAotc3RhdGlj
IFN0cmluZyBjYW5vbmljYWxpemUoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgcmV0dXJu
IHN0cmluZy5yZW1vdmVDaGFyYWN0ZXJzKCZpc05vbkNhbm9uaWNhbENoYXJhY3Rlcik7Ci19Ci0K
IHN0YXRpYyBib29sIGlzUmVxdWlyZWRGb3JJbmplY3Rpb24oVUNoYXIgYykKIHsKICAgICByZXR1
cm4gKGMgPT0gJ1wnJyB8fCBjID09ICciJyB8fCBjID09ICc8JyB8fCBjID09ICc+Jyk7CkBAIC0x
NzksNiArMTc0LDU3IEBAIHN0YXRpYyBTdHJpbmcgZnVsbHlEZWNvZGVTdHJpbmcoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpCiAgICAgcmV0dXJuIHdvcmtp
bmdTdHJpbmc7CiB9CiAKK3N0YXRpYyB2b2lkIHRydW5jYXRlRm9yU3JjTGlrZUF0dHJpYnV0ZShT
dHJpbmcmIGRlY29kZWRTbmlwcGV0KQoreworICAgIC8vIEluIEhUVFAgVVJMcywgY2hhcmFjdGVy
cyBmb2xsb3dpbmcgdGhlIGZpcnN0ID8sICMsIG9yIHRoaXJkIHNsYXNoIG1heSBjb21lIGZyb20K
KyAgICAvLyB0aGUgcGFnZSBpdHNlbGYgYW5kIGNhbiBiZSBtZXJlbHkgaWdub3JlZCBieSBhbiBh
dHRhY2tlcidzIHNlcnZlciB3aGVuIGEgcmVtb3RlCisgICAgLy8gc2NyaXB0IG9yIHNjcmlwdC1s
aWtlIHJlc291cmNlIGlzIHJlcXVlc3RlZC4gSW4gREFUQSBVUkxTLCB0aGUgcGF5bG9hZCBzdGFy
dHMgYXQKKyAgICAvLyB0aGUgZmlyc3QgY29tbWEsIGFuZCB0aGUgdGhlIGZpcnN0IC8qLCAvLywg
b3IgPCEtLSBtYXkgaW50cm9kdWNlIGEgY29tbWVudC4gQ2hhcmFjdGVycworICAgIC8vIGZvbGxv
d2luZyB0aGlzIG1heSBjb21lIGZyb20gdGhlIHBhZ2UgaXRzZWxmIGFuZCBtYXkgYmUgaWdub3Jl
ZCB3aGVuIHRoZSBzY3JpcHQgaXMKKyAgICAvLyBleGVjdXRlZC4gRm9yIHNpbXBsaWNpdHksIHdl
IGRvbid0IGRpZmZlcmVudGlhdGUgYmFzZWQgb24gVVJMIHNjaGVtZSwgYW5kIHN0b3AgYXQKKyAg
ICAvLyB0aGUgZmlyc3QgIyBvciA/LCB0aGUgdGhpcmQgc2xhc2gsIG9yIHRoZSBmaXJzdCBzbGFz
aCBvciA8IG9uY2UgYSBjb21tYSBpcyBzZWVuLgorICAgIGludCBzbGFzaENvdW50ID0gMDsKKyAg
ICBib29sIGNvbW1hU2VlbiA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGN1cnJlbnRMZW5ndGgg
PSAwOyBjdXJyZW50TGVuZ3RoIDwgZGVjb2RlZFNuaXBwZXQubGVuZ3RoKCk7ICsrY3VycmVudExl
bmd0aCkgeworICAgICAgICBVQ2hhciBjdXJyZW50Q2hhciA9IGRlY29kZWRTbmlwcGV0W2N1cnJl
bnRMZW5ndGhdOworICAgICAgICBpZiAoY3VycmVudENoYXIgPT0gJz8nCisgICAgICAgICAgICB8
fCBjdXJyZW50Q2hhciA9PSAnIycKKyAgICAgICAgICAgIHx8ICgoY3VycmVudENoYXIgPT0gJy8n
IHx8IGN1cnJlbnRDaGFyID09ICdcXCcpICYmIChjb21tYVNlZW4gfHwgKytzbGFzaENvdW50ID4g
MikpCisgICAgICAgICAgICB8fCAoY3VycmVudENoYXIgPT0gJzwnICYmIGNvbW1hU2VlbikpIHsK
KyAgICAgICAgICAgIGRlY29kZWRTbmlwcGV0LnRydW5jYXRlKGN1cnJlbnRMZW5ndGgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChjdXJyZW50Q2hhciA9PSAn
LCcpCisgICAgICAgICAgICBjb21tYVNlZW4gPSB0cnVlOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgdHJ1bmNhdGVGb3JTY3JpcHRMaWtlQXR0cmlidXRlKFN0cmluZyYgZGVjb2RlZFNuaXBwZXQp
Cit7CisgICAgLy8gQmV3YXJlIG9mIHRyYWlsaW5nIGNoYXJhY3RlcnMgd2hpY2ggY2FtZSBmcm9t
IHRoZSBwYWdlIGl0c2VsZiwgbm90IHRoZQorICAgIC8vIGluamVjdGVkIHZlY3Rvci4gRXhjbHVk
aW5nIHRoZSB0ZXJtaW5hdGluZyBjaGFyYWN0ZXIgY292ZXJzIGNvbW1vbiBjYXNlcworICAgIC8v
IHdoZXJlIHRoZSBwYWdlIGltbWVkaWF0ZWx5IGVuZHMgdGhlIGF0dHJpYnV0ZSwgYnV0IGRvZXNu
J3QgY292ZXIgbW9yZQorICAgIC8vIGNvbXBsZXggY2FzZXMgd2hlcmUgdGhlcmUgaXMgb3RoZXIg
cGFnZSBkYXRhIGZvbGxvd2luZyB0aGUgaW5qZWN0aW9uLgorICAgIC8vIEdlbmVyYWxseSwgdGhl
c2Ugd29uJ3QgcGFyc2UgYXMgSmF2YVNjcmlwdCwgc28gdGhlIGluamVjdGVkIHZlY3RvcgorICAg
IC8vIHR5cGljYWxseSBleGNsdWRlcyB0aGVtIGZyb20gY29uc2lkZXJhdGlvbiB2aWEgYSBzaW5n
bGUtbGluZSBjb21tZW50IG9yCisgICAgLy8gYnkgZW5jbG9zaW5nIHRoZW0gaW4gYSBzdHJpbmcg
bGl0ZXJhbCB0ZXJtaW5hdGVkIGxhdGVyIGJ5IHRoZSBwYWdlJ3Mgb3duCisgICAgLy8gY2xvc2lu
ZyBwdW5jdHVhdGlvbi4gU2luY2UgdGhlIHNuaXBwZXQgaGFzIG5vdCBiZWVuIHBhcnNlZCwgdGhl
IHZlY3RvcgorICAgIC8vIG1heSBhbHNvIHRyeSB0byBpbnRyb2R1Y2UgdGhlc2UgdmlhIGVudGl0
aWVzLiBBcyBhIHJlc3VsdCwgd2UnZCBsaWtlIHRvCisgICAgLy8gc3RvcCBiZWZvcmUgdGhlIGZp
cnN0ICIvLyIsIHRoZSBmaXJzdCA8IS0tLCB0aGUgZmlyc3QgZW50aXR5LCBvciB0aGUgZmlyc3QK
KyAgICAvLyBxdW90ZSBub3QgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBmaXJzdCBlcXVhbHMg
c2lnbiAodGFraW5nIHdoaXRlc3BhY2UKKyAgICAvLyBpbnRvIGNvbnNpZGVyYXRpb24pLiBUbyBr
ZWVwIHRoaW5ncyBzaW1wbGVyLCB3ZSBkb24ndCB0cnkgdG8gZGlzdGluZ3Vpc2gKKyAgICAvLyBi
ZXR3ZWVuIGVudGl0eS1pbnRyb2R1Y2luZyBhbXBlcnNhbmRzIHZzLiBvdGhlciB1c2VzLCBub3Ig
ZG8gd2UgYm90aGVyIHRvCisgICAgLy8gY2hlY2sgZm9yIGEgc2Vjb25kIHNsYXNoIGZvciBhIGNv
bW1lbnQsIG5vciBkbyB3ZSBib3RoZXIgdG8gY2hlY2sgZm9yCisgICAgLy8gIS0tIGZvbGxvd2lu
ZyBhIGxlc3MtdGhhbiBzaWduLiBXZSBzdG9wIGluc3RlYWQgb24gYW55IGFtcGVyc2FuZAorICAg
IC8vIHNsYXNoLCBvciBsZXNzLXRoYW4gc2lnbi4KKyAgICBzaXplX3QgcG9zaXRpb24gPSAwOwor
ICAgIGlmICgocG9zaXRpb24gPSBkZWNvZGVkU25pcHBldC5maW5kKCc9JykpICE9IG5vdEZvdW5k
CisgICAgICAgICYmIChwb3NpdGlvbiA9IGRlY29kZWRTbmlwcGV0LmZpbmQoaXNOb3RIVE1MU3Bh
Y2UsIHBvc2l0aW9uICsgMSkpICE9IG5vdEZvdW5kCisgICAgICAgICYmIChwb3NpdGlvbiA9IGRl
Y29kZWRTbmlwcGV0LmZpbmQoaXNUZXJtaW5hdGluZ0NoYXJhY3RlciwgaXNIVE1MUXVvdGUoZGVj
b2RlZFNuaXBwZXRbcG9zaXRpb25dKSA/IHBvc2l0aW9uICsgMSA6IHBvc2l0aW9uKSkgIT0gbm90
Rm91bmQpIHsKKyAgICAgICAgZGVjb2RlZFNuaXBwZXQudHJ1bmNhdGUocG9zaXRpb24pOworICAg
IH0KK30KKwogc3RhdGljIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVmbGVjdGVkWFNTRGlzcG9z
aXRpb24gY29tYmluZVhTU1Byb3RlY3Rpb25IZWFkZXJBbmRDU1AoQ29udGVudFNlY3VyaXR5UG9s
aWN5OjpSZWZsZWN0ZWRYU1NEaXNwb3NpdGlvbiB4c3NQcm90ZWN0aW9uLCBDb250ZW50U2VjdXJp
dHlQb2xpY3k6OlJlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9uIHJlZmxlY3RlZFhTUykKIHsKICAgICBD
b250ZW50U2VjdXJpdHlQb2xpY3k6OlJlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9uIHJlc3VsdCA9IHN0
ZDo6bWF4KHhzc1Byb3RlY3Rpb24sIHJlZmxlY3RlZFhTUyk7CkBAIC0yNjgsNyArMzE0LDcgQEAg
dm9pZCBYU1NBdWRpdG9yOjppbml0KERvY3VtZW50KiBkb2N1bWVudCwgWFNTQXVkaXRvckRlbGVn
YXRlKiBhdWRpdG9yRGVsZWdhdGUpCiAgICAgaWYgKGRvY3VtZW50LT5kZWNvZGVyKCkpCiAgICAg
ICAgIG1fZW5jb2RpbmcgPSBkb2N1bWVudC0+ZGVjb2RlcigpLT5lbmNvZGluZygpOwogCi0gICAg
bV9kZWNvZGVkVVJMID0gY2Fub25pY2FsaXplKGZ1bGx5RGVjb2RlU3RyaW5nKG1fZG9jdW1lbnRV
Ukwuc3RyaW5nKCksIG1fZW5jb2RpbmcpKTsKKyAgICBtX2RlY29kZWRVUkwgPSBjYW5vbmljYWxp
emUobV9kb2N1bWVudFVSTC5zdHJpbmcoKSwgVHJ1bmNhdGlvblN0eWxlOjpOb25lKTsKICAgICBp
ZiAobV9kZWNvZGVkVVJMLmZpbmQoaXNSZXF1aXJlZEZvckluamVjdGlvbikgPT0gbm90Rm91bmQp
CiAgICAgICAgIG1fZGVjb2RlZFVSTCA9IFN0cmluZygpOwogCkBAIC0zMDYsNyArMzUyLDcgQEAg
dm9pZCBYU1NBdWRpdG9yOjppbml0KERvY3VtZW50KiBkb2N1bWVudCwgWFNTQXVkaXRvckRlbGVn
YXRlKiBhdWRpdG9yRGVsZWdhdGUpCiAgICAgICAgIGlmIChodHRwQm9keSAmJiAhaHR0cEJvZHkt
PmlzRW1wdHkoKSkgewogICAgICAgICAgICAgaHR0cEJvZHlBc1N0cmluZyA9IGh0dHBCb2R5LT5m
bGF0dGVuVG9TdHJpbmcoKTsKICAgICAgICAgICAgIGlmICghaHR0cEJvZHlBc1N0cmluZy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgICAgICBtX2RlY29kZWRIVFRQQm9keSA9IGNhbm9uaWNhbGl6
ZShmdWxseURlY29kZVN0cmluZyhodHRwQm9keUFzU3RyaW5nLCBtX2VuY29kaW5nKSk7CisgICAg
ICAgICAgICAgICAgbV9kZWNvZGVkSFRUUEJvZHkgPSBjYW5vbmljYWxpemUoaHR0cEJvZHlBc1N0
cmluZywgVHJ1bmNhdGlvblN0eWxlOjpOb25lKTsKICAgICAgICAgICAgICAgICBpZiAobV9kZWNv
ZGVkSFRUUEJvZHkuZmluZChpc1JlcXVpcmVkRm9ySW5qZWN0aW9uKSA9PSBub3RGb3VuZCkKICAg
ICAgICAgICAgICAgICAgICAgbV9kZWNvZGVkSFRUUEJvZHkgPSBTdHJpbmcoKTsKICAgICAgICAg
ICAgICAgICBpZiAobV9kZWNvZGVkSFRUUEJvZHkubGVuZ3RoKCkgPj0gbWluaW11bUxlbmd0aEZv
clN1ZmZpeFRyZWUpCkBAIC0zODgsNyArNDM0LDcgQEAgdm9pZCBYU1NBdWRpdG9yOjpmaWx0ZXJF
bmRUb2tlbihjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmIHJlcXVlc3QpCiBib29sIFhTU0F1ZGl0
b3I6OmZpbHRlckNoYXJhY3RlclRva2VuKGNvbnN0IEZpbHRlclRva2VuUmVxdWVzdCYgcmVxdWVz
dCkKIHsKICAgICBBU1NFUlQobV9zY3JpcHRUYWdOZXN0aW5nTGV2ZWwpOwotICAgIGlmIChtX3dh
c1NjcmlwdFRhZ0ZvdW5kSW5SZXF1ZXN0ICYmIGlzQ29udGFpbmVkSW5SZXF1ZXN0KGRlY29kZWRT
bmlwcGV0Rm9ySmF2YVNjcmlwdChyZXF1ZXN0KSkpIHsKKyAgICBpZiAobV93YXNTY3JpcHRUYWdG
b3VuZEluUmVxdWVzdCAmJiBpc0NvbnRhaW5lZEluUmVxdWVzdChjYW5vbmljYWxpemVkU25pcHBl
dEZvckphdmFTY3JpcHQocmVxdWVzdCkpKSB7CiAgICAgICAgIHJlcXVlc3QudG9rZW4uY2xlYXIo
KTsKICAgICAgICAgTENoYXIgc3BhY2UgPSAnICc7CiAgICAgICAgIHJlcXVlc3QudG9rZW4uYXBw
ZW5kVG9DaGFyYWN0ZXIoc3BhY2UpOyAvLyBUZWNobmljYWxseSwgY2hhcmFjdGVyIHRva2VucyBj
YW4ndCBiZSBlbXB0eS4KQEAgLTQwMiwxMiArNDQ4LDEyIEBAIGJvb2wgWFNTQXVkaXRvcjo6Zmls
dGVyU2NyaXB0VG9rZW4oY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0JiByZXF1ZXN0KQogICAgIEFT
U0VSVChyZXF1ZXN0LnRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKTsKICAgICBB
U1NFUlQoaGFzTmFtZShyZXF1ZXN0LnRva2VuLCBzY3JpcHRUYWcpKTsKIAotICAgIG1fd2FzU2Ny
aXB0VGFnRm91bmRJblJlcXVlc3QgPSBpc0NvbnRhaW5lZEluUmVxdWVzdChkZWNvZGVkU25pcHBl
dEZvck5hbWUocmVxdWVzdCkpOworICAgIG1fd2FzU2NyaXB0VGFnRm91bmRJblJlcXVlc3QgPSBp
c0NvbnRhaW5lZEluUmVxdWVzdChjYW5vbmljYWxpemVkU25pcHBldEZvclRhZ05hbWUocmVxdWVz
dCkpOwogCiAgICAgYm9vbCBkaWRCbG9ja1NjcmlwdCA9IGZhbHNlOwogICAgIGlmIChtX3dhc1Nj
cmlwdFRhZ0ZvdW5kSW5SZXF1ZXN0KSB7Ci0gICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNl
QXR0cmlidXRlSWZJbmplY3RlZChyZXF1ZXN0LCBzcmNBdHRyLCBibGFua1VSTCgpLnN0cmluZygp
LCBTcmNMaWtlQXR0cmlidXRlKTsKLSAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRy
aWJ1dGVJZkluamVjdGVkKHJlcXVlc3QsIFhMaW5rTmFtZXM6OmhyZWZBdHRyLCBibGFua1VSTCgp
LnN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRlKTsKKyAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0g
ZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHJlcXVlc3QsIHNyY0F0dHIsIGJsYW5rVVJMKCkuc3Ry
aW5nKCksIFRydW5jYXRpb25TdHlsZTo6U3JjTGlrZUF0dHJpYnV0ZSk7CisgICAgICAgIGRpZEJs
b2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZChyZXF1ZXN0LCBYTGlua05hbWVz
OjpocmVmQXR0ciwgYmxhbmtVUkwoKS5zdHJpbmcoKSwgVHJ1bmNhdGlvblN0eWxlOjpTcmNMaWtl
QXR0cmlidXRlKTsKICAgICB9CiAKICAgICByZXR1cm4gZGlkQmxvY2tTY3JpcHQ7CkBAIC00MTks
OCArNDY1LDggQEAgYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJPYmplY3RUb2tlbihjb25zdCBGaWx0
ZXJUb2tlblJlcXVlc3QmIHJlcXVlc3QpCiAgICAgQVNTRVJUKGhhc05hbWUocmVxdWVzdC50b2tl
biwgb2JqZWN0VGFnKSk7CiAKICAgICBib29sIGRpZEJsb2NrU2NyaXB0ID0gZmFsc2U7Ci0gICAg
aWYgKGlzQ29udGFpbmVkSW5SZXF1ZXN0KGRlY29kZWRTbmlwcGV0Rm9yTmFtZShyZXF1ZXN0KSkp
IHsKLSAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHJl
cXVlc3QsIGRhdGFBdHRyLCBibGFua1VSTCgpLnN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRlKTsK
KyAgICBpZiAoaXNDb250YWluZWRJblJlcXVlc3QoY2Fub25pY2FsaXplZFNuaXBwZXRGb3JUYWdO
YW1lKHJlcXVlc3QpKSkgeworICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0
ZUlmSW5qZWN0ZWQocmVxdWVzdCwgZGF0YUF0dHIsIGJsYW5rVVJMKCkuc3RyaW5nKCksIFRydW5j
YXRpb25TdHlsZTo6U3JjTGlrZUF0dHJpYnV0ZSk7CiAgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9
IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZChyZXF1ZXN0LCB0eXBlQXR0cik7CiAgICAgICAgIGRp
ZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZChyZXF1ZXN0LCBjbGFzc2lk
QXR0cik7CiAgICAgfQpAQCAtNDQwLDcgKzQ4Niw3IEBAIGJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVy
UGFyYW1Ub2tlbihjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmIHJlcXVlc3QpCiAgICAgaWYgKCFI
VE1MUGFyYW1FbGVtZW50Ojppc1VSTFBhcmFtZXRlcihTdHJpbmcobmFtZUF0dHJpYnV0ZS52YWx1
ZSkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gZXJhc2VBdHRyaWJ1dGVJ
ZkluamVjdGVkKHJlcXVlc3QsIHZhbHVlQXR0ciwgYmxhbmtVUkwoKS5zdHJpbmcoKSwgU3JjTGlr
ZUF0dHJpYnV0ZSk7CisgICAgcmV0dXJuIGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZChyZXF1ZXN0
LCB2YWx1ZUF0dHIsIGJsYW5rVVJMKCkuc3RyaW5nKCksIFRydW5jYXRpb25TdHlsZTo6U3JjTGlr
ZUF0dHJpYnV0ZSk7CiB9CiAKIGJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyRW1iZWRUb2tlbihjb25z
dCBGaWx0ZXJUb2tlblJlcXVlc3QmIHJlcXVlc3QpCkBAIC00NDksOSArNDk1LDkgQEAgYm9vbCBY
U1NBdWRpdG9yOjpmaWx0ZXJFbWJlZFRva2VuKGNvbnN0IEZpbHRlclRva2VuUmVxdWVzdCYgcmVx
dWVzdCkKICAgICBBU1NFUlQoaGFzTmFtZShyZXF1ZXN0LnRva2VuLCBlbWJlZFRhZykpOwogCiAg
ICAgYm9vbCBkaWRCbG9ja1NjcmlwdCA9IGZhbHNlOwotICAgIGlmIChpc0NvbnRhaW5lZEluUmVx
dWVzdChkZWNvZGVkU25pcHBldEZvck5hbWUocmVxdWVzdCkpKSB7Ci0gICAgICAgIGRpZEJsb2Nr
U2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZChyZXF1ZXN0LCBjb2RlQXR0ciwgU3Ry
aW5nKCksIFNyY0xpa2VBdHRyaWJ1dGUpOwotICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFz
ZUF0dHJpYnV0ZUlmSW5qZWN0ZWQocmVxdWVzdCwgc3JjQXR0ciwgYmxhbmtVUkwoKS5zdHJpbmco
KSwgU3JjTGlrZUF0dHJpYnV0ZSk7CisgICAgaWYgKGlzQ29udGFpbmVkSW5SZXF1ZXN0KGNhbm9u
aWNhbGl6ZWRTbmlwcGV0Rm9yVGFnTmFtZShyZXF1ZXN0KSkpIHsKKyAgICAgICAgZGlkQmxvY2tT
Y3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHJlcXVlc3QsIGNvZGVBdHRyLCBTdHJp
bmcoKSwgVHJ1bmNhdGlvblN0eWxlOjpTcmNMaWtlQXR0cmlidXRlKTsKKyAgICAgICAgZGlkQmxv
Y2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHJlcXVlc3QsIHNyY0F0dHIsIGJs
YW5rVVJMKCkuc3RyaW5nKCksIFRydW5jYXRpb25TdHlsZTo6U3JjTGlrZUF0dHJpYnV0ZSk7CiAg
ICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZChyZXF1ZXN0
LCB0eXBlQXR0cik7CiAgICAgfQogICAgIHJldHVybiBkaWRCbG9ja1NjcmlwdDsKQEAgLTQ2Myw4
ICs1MDksOCBAQCBib29sIFhTU0F1ZGl0b3I6OmZpbHRlckFwcGxldFRva2VuKGNvbnN0IEZpbHRl
clRva2VuUmVxdWVzdCYgcmVxdWVzdCkKICAgICBBU1NFUlQoaGFzTmFtZShyZXF1ZXN0LnRva2Vu
LCBhcHBsZXRUYWcpKTsKIAogICAgIGJvb2wgZGlkQmxvY2tTY3JpcHQgPSBmYWxzZTsKLSAgICBp
ZiAoaXNDb250YWluZWRJblJlcXVlc3QoZGVjb2RlZFNuaXBwZXRGb3JOYW1lKHJlcXVlc3QpKSkg
ewotICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQocmVx
dWVzdCwgY29kZUF0dHIsIFN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRlKTsKKyAgICBpZiAoaXND
b250YWluZWRJblJlcXVlc3QoY2Fub25pY2FsaXplZFNuaXBwZXRGb3JUYWdOYW1lKHJlcXVlc3Qp
KSkgeworICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQo
cmVxdWVzdCwgY29kZUF0dHIsIFN0cmluZygpLCBUcnVuY2F0aW9uU3R5bGU6OlNyY0xpa2VBdHRy
aWJ1dGUpOwogICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0
ZWQocmVxdWVzdCwgb2JqZWN0QXR0cik7CiAgICAgfQogICAgIHJldHVybiBkaWRCbG9ja1Njcmlw
dDsKQEAgLTQ3NSw5ICs1MjEsOSBAQCBib29sIFhTU0F1ZGl0b3I6OmZpbHRlckZyYW1lVG9rZW4o
Y29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0JiByZXF1ZXN0KQogICAgIEFTU0VSVChyZXF1ZXN0LnRv
a2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKTsKICAgICBBU1NFUlQoaGFzTmFtZShy
ZXF1ZXN0LnRva2VuLCBpZnJhbWVUYWcpIHx8IGhhc05hbWUocmVxdWVzdC50b2tlbiwgZnJhbWVU
YWcpKTsKIAotICAgIGJvb2wgZGlkQmxvY2tTY3JpcHQgPSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0
ZWQocmVxdWVzdCwgc3JjZG9jQXR0ciwgU3RyaW5nKCksIFNjcmlwdExpa2VBdHRyaWJ1dGUpOwot
ICAgIGlmIChpc0NvbnRhaW5lZEluUmVxdWVzdChkZWNvZGVkU25pcHBldEZvck5hbWUocmVxdWVz
dCkpKQotICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQo
cmVxdWVzdCwgc3JjQXR0ciwgU3RyaW5nKCksIFNyY0xpa2VBdHRyaWJ1dGUpOworICAgIGJvb2wg
ZGlkQmxvY2tTY3JpcHQgPSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQocmVxdWVzdCwgc3JjZG9j
QXR0ciwgU3RyaW5nKCksIFRydW5jYXRpb25TdHlsZTo6U2NyaXB0TGlrZUF0dHJpYnV0ZSk7Cisg
ICAgaWYgKGlzQ29udGFpbmVkSW5SZXF1ZXN0KGNhbm9uaWNhbGl6ZWRTbmlwcGV0Rm9yVGFnTmFt
ZShyZXF1ZXN0KSkpCisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJ
bmplY3RlZChyZXF1ZXN0LCBzcmNBdHRyLCBTdHJpbmcoKSwgVHJ1bmNhdGlvblN0eWxlOjpTcmNM
aWtlQXR0cmlidXRlKTsKIAogICAgIHJldHVybiBkaWRCbG9ja1NjcmlwdDsKIH0KQEAgLTUxMSw3
ICs1NTcsNyBAQCBib29sIFhTU0F1ZGl0b3I6OmZpbHRlcklucHV0VG9rZW4oY29uc3QgRmlsdGVy
VG9rZW5SZXF1ZXN0JiByZXF1ZXN0KQogICAgIEFTU0VSVChyZXF1ZXN0LnRva2VuLnR5cGUoKSA9
PSBIVE1MVG9rZW46OlN0YXJ0VGFnKTsKICAgICBBU1NFUlQoaGFzTmFtZShyZXF1ZXN0LnRva2Vu
LCBpbnB1dFRhZykpOwogCi0gICAgcmV0dXJuIGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZChyZXF1
ZXN0LCBmb3JtYWN0aW9uQXR0ciwgYmxhbmtVUkwoKS5zdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0
ZSk7CisgICAgcmV0dXJuIGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZChyZXF1ZXN0LCBmb3JtYWN0
aW9uQXR0ciwgYmxhbmtVUkwoKS5zdHJpbmcoKSwgVHJ1bmNhdGlvblN0eWxlOjpTcmNMaWtlQXR0
cmlidXRlKTsKIH0KIAogYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJCdXR0b25Ub2tlbihjb25zdCBG
aWx0ZXJUb2tlblJlcXVlc3QmIHJlcXVlc3QpCkBAIC01MTksNyArNTY1LDcgQEAgYm9vbCBYU1NB
dWRpdG9yOjpmaWx0ZXJCdXR0b25Ub2tlbihjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmIHJlcXVl
c3QpCiAgICAgQVNTRVJUKHJlcXVlc3QudG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6U3RhcnRU
YWcpOwogICAgIEFTU0VSVChoYXNOYW1lKHJlcXVlc3QudG9rZW4sIGJ1dHRvblRhZykpOwogCi0g
ICAgcmV0dXJuIGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZChyZXF1ZXN0LCBmb3JtYWN0aW9uQXR0
ciwgYmxhbmtVUkwoKS5zdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7CisgICAgcmV0dXJuIGVy
YXNlQXR0cmlidXRlSWZJbmplY3RlZChyZXF1ZXN0LCBmb3JtYWN0aW9uQXR0ciwgYmxhbmtVUkwo
KS5zdHJpbmcoKSwgVHJ1bmNhdGlvblN0eWxlOjpTcmNMaWtlQXR0cmlidXRlKTsKIH0KIAogYm9v
bCBYU1NBdWRpdG9yOjplcmFzZURhbmdlcm91c0F0dHJpYnV0ZXNJZkluamVjdGVkKGNvbnN0IEZp
bHRlclRva2VuUmVxdWVzdCYgcmVxdWVzdCkKQEAgLTUzNSw3ICs1ODEsNyBAQCBib29sIFhTU0F1
ZGl0b3I6OmVyYXNlRGFuZ2Vyb3VzQXR0cmlidXRlc0lmSW5qZWN0ZWQoY29uc3QgRmlsdGVyVG9r
ZW5SZXF1ZXN0JiByZQogICAgICAgICBib29sIHZhbHVlQ29udGFpbnNKYXZhU2NyaXB0VVJMID0g
KCFpc0lubGluZUV2ZW50SGFuZGxlciAmJiBwcm90b2NvbElzSmF2YVNjcmlwdChzdHJpcHBlZFZh
bHVlKSkgfHwgKGlzU2VtaWNvbG9uU2VwYXJhdGVkQXR0cmlidXRlKGF0dHJpYnV0ZSkgJiYgc2Vt
aWNvbG9uU2VwYXJhdGVkVmFsdWVDb250YWluc0phdmFTY3JpcHRVUkwoc3RyaXBwZWRWYWx1ZSkp
OwogICAgICAgICBpZiAoIWlzSW5saW5lRXZlbnRIYW5kbGVyICYmICF2YWx1ZUNvbnRhaW5zSmF2
YVNjcmlwdFVSTCkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIWlzQ29udGFp
bmVkSW5SZXF1ZXN0KGRlY29kZWRTbmlwcGV0Rm9yQXR0cmlidXRlKHJlcXVlc3QsIGF0dHJpYnV0
ZSwgU2NyaXB0TGlrZUF0dHJpYnV0ZSkpKQorICAgICAgICBpZiAoIWlzQ29udGFpbmVkSW5SZXF1
ZXN0KGNhbm9uaWNhbGl6ZShzbmlwcGV0RnJvbUF0dHJpYnV0ZShyZXF1ZXN0LCBhdHRyaWJ1dGUp
LCBUcnVuY2F0aW9uU3R5bGU6OlNjcmlwdExpa2VBdHRyaWJ1dGUpKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICByZXF1ZXN0LnRva2VuLmVyYXNlVmFsdWVPZkF0dHJpYnV0ZShpKTsK
ICAgICAgICAgaWYgKHZhbHVlQ29udGFpbnNKYXZhU2NyaXB0VVJMKQpAQCAtNTQ1LDk0ICs1OTEs
NTkgQEAgYm9vbCBYU1NBdWRpdG9yOjplcmFzZURhbmdlcm91c0F0dHJpYnV0ZXNJZkluamVjdGVk
KGNvbnN0IEZpbHRlclRva2VuUmVxdWVzdCYgcmUKICAgICByZXR1cm4gZGlkQmxvY2tTY3JpcHQ7
CiB9CiAKLWJvb2wgWFNTQXVkaXRvcjo6ZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKGNvbnN0IEZp
bHRlclRva2VuUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRl
TmFtZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFZhbHVlLCBBdHRyaWJ1dGVLaW5kIHRyZWF0
bWVudCkKK2Jvb2wgWFNTQXVkaXRvcjo6ZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKGNvbnN0IEZp
bHRlclRva2VuUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRl
TmFtZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFZhbHVlLCBUcnVuY2F0aW9uU3R5bGUgdHJ1
bmNhdGlvblN0eWxlKQogewogICAgIHNpemVfdCBpbmRleE9mQXR0cmlidXRlID0gMDsKLSAgICBp
ZiAoZmluZEF0dHJpYnV0ZVdpdGhOYW1lKHJlcXVlc3QudG9rZW4sIGF0dHJpYnV0ZU5hbWUsIGlu
ZGV4T2ZBdHRyaWJ1dGUpKSB7Ci0gICAgICAgIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlJiBh
dHRyaWJ1dGUgPSByZXF1ZXN0LnRva2VuLmF0dHJpYnV0ZXMoKS5hdChpbmRleE9mQXR0cmlidXRl
KTsKLSAgICAgICAgaWYgKGlzQ29udGFpbmVkSW5SZXF1ZXN0KGRlY29kZWRTbmlwcGV0Rm9yQXR0
cmlidXRlKHJlcXVlc3QsIGF0dHJpYnV0ZSwgdHJlYXRtZW50KSkpIHsKLSAgICAgICAgICAgIGlm
ICh0aHJlYWRTYWZlTWF0Y2goYXR0cmlidXRlTmFtZSwgc3JjQXR0cikgJiYgaXNMaWtlbHlTYWZl
UmVzb3VyY2UoU3RyaW5nKGF0dHJpYnV0ZS52YWx1ZSkpKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIGlmICh0aHJlYWRTYWZlTWF0Y2goYXR0cmlidXRlTmFtZSwg
aHR0cF9lcXVpdkF0dHIpICYmICFpc0Rhbmdlcm91c0hUVFBFcXVpdihTdHJpbmcoYXR0cmlidXRl
LnZhbHVlKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmVx
dWVzdC50b2tlbi5lcmFzZVZhbHVlT2ZBdHRyaWJ1dGUoaW5kZXhPZkF0dHJpYnV0ZSk7Ci0gICAg
ICAgICAgICBpZiAoIXJlcGxhY2VtZW50VmFsdWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAg
IHJlcXVlc3QudG9rZW4uYXBwZW5kVG9BdHRyaWJ1dGVWYWx1ZShpbmRleE9mQXR0cmlidXRlLCBy
ZXBsYWNlbWVudFZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Cisg
ICAgaWYgKCFmaW5kQXR0cmlidXRlV2l0aE5hbWUocmVxdWVzdC50b2tlbiwgYXR0cmlidXRlTmFt
ZSwgaW5kZXhPZkF0dHJpYnV0ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0
IEhUTUxUb2tlbjo6QXR0cmlidXRlJiBhdHRyaWJ1dGUgPSByZXF1ZXN0LnRva2VuLmF0dHJpYnV0
ZXMoKS5hdChpbmRleE9mQXR0cmlidXRlKTsKKyAgICBpZiAoIWlzQ29udGFpbmVkSW5SZXF1ZXN0
KGNhbm9uaWNhbGl6ZShzbmlwcGV0RnJvbUF0dHJpYnV0ZShyZXF1ZXN0LCBhdHRyaWJ1dGUpLCB0
cnVuY2F0aW9uU3R5bGUpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHRocmVh
ZFNhZmVNYXRjaChhdHRyaWJ1dGVOYW1lLCBzcmNBdHRyKSkgeworICAgICAgICBpZiAoaXNMaWtl
bHlTYWZlUmVzb3VyY2UoU3RyaW5nKGF0dHJpYnV0ZS52YWx1ZSkpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0gZWxzZSBpZiAodGhyZWFkU2FmZU1hdGNoKGF0dHJpYnV0ZU5hbWUs
IGh0dHBfZXF1aXZBdHRyKSkgeworICAgICAgICBpZiAoIWlzRGFuZ2Vyb3VzSFRUUEVxdWl2KFN0
cmluZyhhdHRyaWJ1dGUudmFsdWUpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVxdWVzdC50b2tlbi5lcmFzZVZhbHVlT2ZBdHRy
aWJ1dGUoaW5kZXhPZkF0dHJpYnV0ZSk7CisgICAgaWYgKCFyZXBsYWNlbWVudFZhbHVlLmlzRW1w
dHkoKSkKKyAgICAgICAgcmVxdWVzdC50b2tlbi5hcHBlbmRUb0F0dHJpYnV0ZVZhbHVlKGluZGV4
T2ZBdHRyaWJ1dGUsIHJlcGxhY2VtZW50VmFsdWUpOworICAgIHJldHVybiB0cnVlOwogfQogCi1T
dHJpbmcgWFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JOYW1lKGNvbnN0IEZpbHRlclRva2Vu
UmVxdWVzdCYgcmVxdWVzdCkKK1N0cmluZyBYU1NBdWRpdG9yOjpjYW5vbmljYWxpemVkU25pcHBl
dEZvclRhZ05hbWUoY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0JiByZXF1ZXN0KQogewogICAgIC8v
IEdyYWIgYSBmaXhlZCBudW1iZXIgb2YgY2hhcmFjdGVycyBlcXVhbCB0byB0aGUgbGVuZ3RoIG9m
IHRoZSB0b2tlbidzIG5hbWUgcGx1cyBvbmUgKHRvIGFjY291bnQgZm9yIHRoZSAiPCIpLgotICAg
IHJldHVybiBjYW5vbmljYWxpemUoZnVsbHlEZWNvZGVTdHJpbmcocmVxdWVzdC5zb3VyY2VUcmFj
a2VyLnNvdXJjZShyZXF1ZXN0LnRva2VuKSwgbV9lbmNvZGluZykuc3Vic3RyaW5nKDAsIHJlcXVl
c3QudG9rZW4ubmFtZSgpLnNpemUoKSArIDEpKTsKKyAgICByZXR1cm4gY2Fub25pY2FsaXplKHJl
cXVlc3Quc291cmNlVHJhY2tlci5zb3VyY2UocmVxdWVzdC50b2tlbikuc3Vic3RyaW5nKDAsIHJl
cXVlc3QudG9rZW4ubmFtZSgpLnNpemUoKSArIDEpLCBUcnVuY2F0aW9uU3R5bGU6Ok5vbmUpOwog
fQogCi1TdHJpbmcgWFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JBdHRyaWJ1dGUoY29uc3Qg
RmlsdGVyVG9rZW5SZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZSYg
YXR0cmlidXRlLCBBdHRyaWJ1dGVLaW5kIHRyZWF0bWVudCkKK1N0cmluZyBYU1NBdWRpdG9yOjpz
bmlwcGV0RnJvbUF0dHJpYnV0ZShjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlJiBhdHRyaWJ1dGUpCiB7CiAgICAgLy8gVGhlIHJhbmdl
IGRvZXNuJ3QgaW5jbHVkZSB0aGUgY2hhcmFjdGVyIHdoaWNoIHRlcm1pbmF0ZXMgdGhlIHZhbHVl
LiBTbywKICAgICAvLyBmb3IgYW4gaW5wdXQgb2YgfG5hbWU9InZhbHVlInwsIHRoZSBzbmlwcGV0
IGlzIHxuYW1lPSJ2YWx1ZXwuIEZvciBhbgogICAgIC8vIHVucXVvdGVkIGlucHV0IG9mIHxuYW1l
PXZhbHVlIHwsIHRoZSBzbmlwcGV0IGlzIHxuYW1lPXZhbHVlfC4KICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIGdyYWIgb25lIGNoYXJhY3RlciBiZWZvcmUgdGhlIG5hbWUgYWxzby4KLSAgICB1bnNp
Z25lZCBzdGFydCA9IGF0dHJpYnV0ZS5zdGFydE9mZnNldDsKLSAgICB1bnNpZ25lZCBlbmQgPSBh
dHRyaWJ1dGUuZW5kT2Zmc2V0OwotCi0gICAgLy8gV2UgZGVmZXIgY2Fub25pY2FsaXppbmcgdGhl
IGRlY29kZWQgc3RyaW5nIGhlcmUgdG8gcHJlc2VydmUgZW1iZWRkZWQgc2xhc2hlcyAoaWYgYW55
KSB0aGF0Ci0gICAgLy8gbWF5IGxlYWQgdXMgdG8gdHJ1bmNhdGUgdGhlIHN0cmluZy4KLSAgICBT
dHJpbmcgZGVjb2RlZFNuaXBwZXQgPSBmdWxseURlY29kZVN0cmluZyhyZXF1ZXN0LnNvdXJjZVRy
YWNrZXIuc291cmNlKHJlcXVlc3QudG9rZW4sIHN0YXJ0LCBlbmQpLCBtX2VuY29kaW5nKTsKLSAg
ICBkZWNvZGVkU25pcHBldC50cnVuY2F0ZShrTWF4aW11bUZyYWdtZW50TGVuZ3RoVGFyZ2V0KTsK
LSAgICBpZiAodHJlYXRtZW50ID09IFNyY0xpa2VBdHRyaWJ1dGUpIHsKLSAgICAgICAgaW50IHNs
YXNoQ291bnQgPSAwOwotICAgICAgICBib29sIGNvbW1hU2VlbiA9IGZhbHNlOwotICAgICAgICAv
LyBJbiBIVFRQIFVSTHMsIGNoYXJhY3RlcnMgZm9sbG93aW5nIHRoZSBmaXJzdCA/LCAjLCBvciB0
aGlyZCBzbGFzaCBtYXkgY29tZSBmcm9tIAotICAgICAgICAvLyB0aGUgcGFnZSBpdHNlbGYgYW5k
IGNhbiBiZSBtZXJlbHkgaWdub3JlZCBieSBhbiBhdHRhY2tlcidzIHNlcnZlciB3aGVuIGEgcmVt
b3RlCi0gICAgICAgIC8vIHNjcmlwdCBvciBzY3JpcHQtbGlrZSByZXNvdXJjZSBpcyByZXF1ZXN0
ZWQuIEluIERBVEEgVVJMUywgdGhlIHBheWxvYWQgc3RhcnRzIGF0Ci0gICAgICAgIC8vIHRoZSBm
aXJzdCBjb21tYSwgYW5kIHRoZSB0aGUgZmlyc3QgLyosIC8vLCBvciA8IS0tIG1heSBpbnRyb2R1
Y2UgYSBjb21tZW50LiBDaGFyYWN0ZXJzCi0gICAgICAgIC8vIGZvbGxvd2luZyB0aGlzIG1heSBj
b21lIGZyb20gdGhlIHBhZ2UgaXRzZWxmIGFuZCBtYXkgYmUgaWdub3JlZCB3aGVuIHRoZSBzY3Jp
cHQgaXMKLSAgICAgICAgLy8gZXhlY3V0ZWQuIEZvciBzaW1wbGljaXR5LCB3ZSBkb24ndCBkaWZm
ZXJlbnRpYXRlIGJhc2VkIG9uIFVSTCBzY2hlbWUsIGFuZCBzdG9wIGF0Ci0gICAgICAgIC8vIHRo
ZSBmaXJzdCAjIG9yID8sIHRoZSB0aGlyZCBzbGFzaCwgb3IgdGhlIGZpcnN0IHNsYXNoIG9yIDwg
b25jZSBhIGNvbW1hIGlzIHNlZW4uCi0gICAgICAgIGZvciAoc2l6ZV90IGN1cnJlbnRMZW5ndGgg
PSAwOyBjdXJyZW50TGVuZ3RoIDwgZGVjb2RlZFNuaXBwZXQubGVuZ3RoKCk7ICsrY3VycmVudExl
bmd0aCkgewotICAgICAgICAgICAgVUNoYXIgY3VycmVudENoYXIgPSBkZWNvZGVkU25pcHBldFtj
dXJyZW50TGVuZ3RoXTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50Q2hhciA9PSAnPycKLSAgICAg
ICAgICAgICAgICB8fCBjdXJyZW50Q2hhciA9PSAnIycKLSAgICAgICAgICAgICAgICB8fCAoKGN1
cnJlbnRDaGFyID09ICcvJyB8fCBjdXJyZW50Q2hhciA9PSAnXFwnKSAmJiAoY29tbWFTZWVuIHx8
ICsrc2xhc2hDb3VudCA+IDIpKQotICAgICAgICAgICAgICAgIHx8IChjdXJyZW50Q2hhciA9PSAn
PCcgJiYgY29tbWFTZWVuKSkgewotICAgICAgICAgICAgICAgIGRlY29kZWRTbmlwcGV0LnRydW5j
YXRlKGN1cnJlbnRMZW5ndGgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKGN1cnJlbnRDaGFyID09ICcsJykKLSAgICAgICAgICAgICAgICBj
b21tYVNlZW4gPSB0cnVlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICh0cmVhdG1lbnQgPT0g
U2NyaXB0TGlrZUF0dHJpYnV0ZSkgewotICAgICAgICAvLyBCZXdhcmUgb2YgdHJhaWxpbmcgY2hh
cmFjdGVycyB3aGljaCBjYW1lIGZyb20gdGhlIHBhZ2UgaXRzZWxmLCBub3QgdGhlIAotICAgICAg
ICAvLyBpbmplY3RlZCB2ZWN0b3IuIEV4Y2x1ZGluZyB0aGUgdGVybWluYXRpbmcgY2hhcmFjdGVy
IGNvdmVycyBjb21tb24gY2FzZXMKLSAgICAgICAgLy8gd2hlcmUgdGhlIHBhZ2UgaW1tZWRpYXRl
bHkgZW5kcyB0aGUgYXR0cmlidXRlLCBidXQgZG9lc24ndCBjb3ZlciBtb3JlCi0gICAgICAgIC8v
IGNvbXBsZXggY2FzZXMgd2hlcmUgdGhlcmUgaXMgb3RoZXIgcGFnZSBkYXRhIGZvbGxvd2luZyB0
aGUgaW5qZWN0aW9uLiAKLSAgICAgICAgLy8gR2VuZXJhbGx5LCB0aGVzZSB3b24ndCBwYXJzZSBh
cyBqYXZhc2NyaXB0LCBzbyB0aGUgaW5qZWN0ZWQgdmVjdG9yCi0gICAgICAgIC8vIHR5cGljYWxs
eSBleGNsdWRlcyB0aGVtIGZyb20gY29uc2lkZXJhdGlvbiB2aWEgYSBzaW5nbGUtbGluZSBjb21t
ZW50IG9yCi0gICAgICAgIC8vIGJ5IGVuY2xvc2luZyB0aGVtIGluIGEgc3RyaW5nIGxpdGVyYWwg
dGVybWluYXRlZCBsYXRlciBieSB0aGUgcGFnZSdzIG93bgotICAgICAgICAvLyBjbG9zaW5nIHB1
bmN0dWF0aW9uLiBTaW5jZSB0aGUgc25pcHBldCBoYXMgbm90IGJlZW4gcGFyc2VkLCB0aGUgdmVj
dG9yCi0gICAgICAgIC8vIG1heSBhbHNvIHRyeSB0byBpbnRyb2R1Y2UgdGhlc2UgdmlhIGVudGl0
aWVzLiBBcyBhIHJlc3VsdCwgd2UnZCBsaWtlIHRvCi0gICAgICAgIC8vIHN0b3AgYmVmb3JlIHRo
ZSBmaXJzdCAiLy8iLCB0aGUgZmlyc3QgPCEtLSwgdGhlIGZpcnN0IGVudGl0eSwgb3IgdGhlIGZp
cnN0Ci0gICAgICAgIC8vIHF1b3RlIG5vdCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGZpcnN0
IGVxdWFscyBzaWduICh0YWtpbmcgd2hpdGVzcGFjZQotICAgICAgICAvLyBpbnRvIGNvbnNpZGVy
YXRpb24pLiBUbyBrZWVwIHRoaW5ncyBzaW1wbGVyLCB3ZSBkb24ndCB0cnkgdG8gZGlzdGluZ3Vp
c2gKLSAgICAgICAgLy8gYmV0d2VlbiBlbnRpdHktaW50cm9kdWNpbmcgYW1wZXJhbmRzIHZzLiBv
dGhlciB1c2VzLCBub3IgZG8gd2UgYm90aGVyIHRvCi0gICAgICAgIC8vIGNoZWNrIGZvciBhIHNl
Y29uZCBzbGFzaCBmb3IgYSBjb21tZW50LCBub3IgZG8gd2UgYm90aGVyIHRvIGNoZWNrIGZvcgot
ICAgICAgICAvLyAhLS0gZm9sbG93aW5nIGEgbGVzcy10aGFuIHNpZ24uIFdlIHN0b3AgaW5zdGVh
ZCBvbiBhbnkgYW1wZXJzYW5kCi0gICAgICAgIC8vIHNsYXNoLCBvciBsZXNzLXRoYW4gc2lnbi4K
LSAgICAgICAgc2l6ZV90IHBvc2l0aW9uID0gMDsKLSAgICAgICAgaWYgKChwb3NpdGlvbiA9IGRl
Y29kZWRTbmlwcGV0LmZpbmQoJz0nKSkgIT0gbm90Rm91bmQKLSAgICAgICAgICAgICYmIChwb3Np
dGlvbiA9IGRlY29kZWRTbmlwcGV0LmZpbmQoaXNOb3RIVE1MU3BhY2UsIHBvc2l0aW9uICsgMSkp
ICE9IG5vdEZvdW5kCi0gICAgICAgICAgICAmJiAocG9zaXRpb24gPSBkZWNvZGVkU25pcHBldC5m
aW5kKGlzVGVybWluYXRpbmdDaGFyYWN0ZXIsIGlzSFRNTFF1b3RlKGRlY29kZWRTbmlwcGV0W3Bv
c2l0aW9uXSkgPyBwb3NpdGlvbiArIDEgOiBwb3NpdGlvbikpICE9IG5vdEZvdW5kKSB7Ci0gICAg
ICAgICAgICBkZWNvZGVkU25pcHBldC50cnVuY2F0ZShwb3NpdGlvbik7Ci0gICAgICAgIH0KKyAg
ICByZXR1cm4gcmVxdWVzdC5zb3VyY2VUcmFja2VyLnNvdXJjZShyZXF1ZXN0LnRva2VuLCBhdHRy
aWJ1dGUuc3RhcnRPZmZzZXQsIGF0dHJpYnV0ZS5lbmRPZmZzZXQpOworfQorCitTdHJpbmcgWFNT
QXVkaXRvcjo6Y2Fub25pY2FsaXplKGNvbnN0IFN0cmluZyYgc25pcHBldCwgVHJ1bmNhdGlvblN0
eWxlIHRydW5jYXRpb25TdHlsZSkKK3sKKyAgICBTdHJpbmcgZGVjb2RlZFNuaXBwZXQgPSBmdWxs
eURlY29kZVN0cmluZyhzbmlwcGV0LCBtX2VuY29kaW5nKTsKKyAgICBpZiAodHJ1bmNhdGlvblN0
eWxlICE9IFRydW5jYXRpb25TdHlsZTo6Tm9uZSkgeworICAgICAgICBkZWNvZGVkU25pcHBldC50
cnVuY2F0ZShrTWF4aW11bUZyYWdtZW50TGVuZ3RoVGFyZ2V0KTsKKyAgICAgICAgaWYgKHRydW5j
YXRpb25TdHlsZSA9PSBUcnVuY2F0aW9uU3R5bGU6OlNyY0xpa2VBdHRyaWJ1dGUpCisgICAgICAg
ICAgICB0cnVuY2F0ZUZvclNyY0xpa2VBdHRyaWJ1dGUoZGVjb2RlZFNuaXBwZXQpOworICAgICAg
ICBlbHNlIGlmICh0cnVuY2F0aW9uU3R5bGUgPT0gVHJ1bmNhdGlvblN0eWxlOjpTY3JpcHRMaWtl
QXR0cmlidXRlKQorICAgICAgICAgICAgdHJ1bmNhdGVGb3JTY3JpcHRMaWtlQXR0cmlidXRlKGRl
Y29kZWRTbmlwcGV0KTsKICAgICB9Ci0gICAgcmV0dXJuIGNhbm9uaWNhbGl6ZShkZWNvZGVkU25p
cHBldCk7CisgICAgcmV0dXJuIGRlY29kZWRTbmlwcGV0LnJlbW92ZUNoYXJhY3RlcnMoJmlzTm9u
Q2Fub25pY2FsQ2hhcmFjdGVyKTsKIH0KIAotU3RyaW5nIFhTU0F1ZGl0b3I6OmRlY29kZWRTbmlw
cGV0Rm9ySmF2YVNjcmlwdChjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmIHJlcXVlc3QpCitTdHJp
bmcgWFNTQXVkaXRvcjo6Y2Fub25pY2FsaXplZFNuaXBwZXRGb3JKYXZhU2NyaXB0KGNvbnN0IEZp
bHRlclRva2VuUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBTdHJpbmcgc3RyaW5nID0gcmVxdWVz
dC5zb3VyY2VUcmFja2VyLnNvdXJjZShyZXF1ZXN0LnRva2VuKTsKICAgICBzaXplX3Qgc3RhcnRQ
b3NpdGlvbiA9IDA7CkBAIC02ODYsNyArNjk3LDYgQEAgU3RyaW5nIFhTU0F1ZGl0b3I6OmRlY29k
ZWRTbmlwcGV0Rm9ySmF2YVNjcmlwdChjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmIHJlcXVlc3QK
ICAgICAgICAgICAgICAgICBmb3VuZFBvc2l0aW9uID0gbGFzdE5vblNwYWNlUG9zaXRpb247CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGlmIChm
b3VuZFBvc2l0aW9uID4gc3RhcnRQb3NpdGlvbiArIGtNYXhpbXVtRnJhZ21lbnRMZW5ndGhUYXJn
ZXQpIHsKICAgICAgICAgICAgICAgICAvLyBBZnRlciBoaXR0aW5nIHRoZSBsZW5ndGggdGFyZ2V0
LCB3ZSBjYW4gb25seSBzdG9wIGF0IGEgcG9pbnQgd2hlcmUgd2Uga25vdyB3ZSBhcmUKICAgICAg
ICAgICAgICAgICAvLyBub3QgaW4gdGhlIG1pZGRsZSBvZiBhICUtZXNjYXBlIHNlcXVlbmNlLiBG
b3IgdGhlIHNha2Ugb2Ygc2ltcGxpY2l0eSwgYXBwcm94aW1hdGUKQEAgLTcwMCw3ICs3MTAsNyBA
QCBTdHJpbmcgWFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JKYXZhU2NyaXB0KGNvbnN0IEZp
bHRlclRva2VuUmVxdWVzdCYgcmVxdWVzdAogICAgICAgICAgICAgICAgIGxhc3ROb25TcGFjZVBv
c2l0aW9uID0gZm91bmRQb3NpdGlvbjsKICAgICAgICAgfQogCi0gICAgICAgIHJlc3VsdCA9IGNh
bm9uaWNhbGl6ZShmdWxseURlY29kZVN0cmluZyhzdHJpbmcuc3Vic3RyaW5nKHN0YXJ0UG9zaXRp
b24sIGZvdW5kUG9zaXRpb24gLSBzdGFydFBvc2l0aW9uKSwgbV9lbmNvZGluZykpOworICAgICAg
ICByZXN1bHQgPSBjYW5vbmljYWxpemUoc3RyaW5nLnN1YnN0cmluZyhzdGFydFBvc2l0aW9uLCBm
b3VuZFBvc2l0aW9uIC0gc3RhcnRQb3NpdGlvbiksIFRydW5jYXRpb25TdHlsZTo6Tm9uZSk7CiAg
ICAgICAgIHN0YXJ0UG9zaXRpb24gPSBmb3VuZFBvc2l0aW9uICsgMTsKICAgICB9CiAgICAgcmV0
dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1
ZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuaAppbmRleCAw
YzUxNmQ5MWIzMGYzOGI2OTc0OGVkMzNiMDNkNjk0OTQ0ZTM0OWQwLi5mNDdiNjdjZjI3NzliZDM4
Mjc2YjAzZDdlMjdiN2YwMjc4MDViZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9YU1NBdWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNT
QXVkaXRvci5oCkBAIC03MCw3ICs3MCw4IEBAIHByaXZhdGU6CiAgICAgICAgIEluaXRpYWxpemVk
CiAgICAgfTsKIAotICAgIGVudW0gQXR0cmlidXRlS2luZCB7CisgICAgZW51bSBjbGFzcyBUcnVu
Y2F0aW9uU3R5bGUgeworICAgICAgICBOb25lLAogICAgICAgICBOb3JtYWxBdHRyaWJ1dGUsCiAg
ICAgICAgIFNyY0xpa2VBdHRyaWJ1dGUsCiAgICAgICAgIFNjcmlwdExpa2VBdHRyaWJ1dGUKQEAg
LTkyLDEyICs5MywxMiBAQCBwcml2YXRlOgogICAgIGJvb2wgZmlsdGVyQnV0dG9uVG9rZW4oY29u
c3QgRmlsdGVyVG9rZW5SZXF1ZXN0Jik7CiAKICAgICBib29sIGVyYXNlRGFuZ2Vyb3VzQXR0cmli
dXRlc0lmSW5qZWN0ZWQoY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0Jik7Ci0gICAgYm9vbCBlcmFz
ZUF0dHJpYnV0ZUlmSW5qZWN0ZWQoY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0JiwgY29uc3QgUXVh
bGlmaWVkTmFtZSYsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRWYWx1ZSA9IFN0cmluZygpLCBB
dHRyaWJ1dGVLaW5kIHRyZWF0bWVudCA9IE5vcm1hbEF0dHJpYnV0ZSk7CisgICAgYm9vbCBlcmFz
ZUF0dHJpYnV0ZUlmSW5qZWN0ZWQoY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0JiwgY29uc3QgUXVh
bGlmaWVkTmFtZSYsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRWYWx1ZSA9IFN0cmluZygpLCBU
cnVuY2F0aW9uU3R5bGUgPSBUcnVuY2F0aW9uU3R5bGU6Ok5vcm1hbEF0dHJpYnV0ZSk7CiAKLSAg
ICBTdHJpbmcgZGVjb2RlZFNuaXBwZXRGb3JUb2tlbihjb25zdCBIVE1MVG9rZW4mKTsKLSAgICBT
dHJpbmcgZGVjb2RlZFNuaXBwZXRGb3JOYW1lKGNvbnN0IEZpbHRlclRva2VuUmVxdWVzdCYpOwot
ICAgIFN0cmluZyBkZWNvZGVkU25pcHBldEZvckF0dHJpYnV0ZShjb25zdCBGaWx0ZXJUb2tlblJl
cXVlc3QmLCBjb25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZSYsIEF0dHJpYnV0ZUtpbmQgdHJlYXRt
ZW50ID0gTm9ybWFsQXR0cmlidXRlKTsKLSAgICBTdHJpbmcgZGVjb2RlZFNuaXBwZXRGb3JKYXZh
U2NyaXB0KGNvbnN0IEZpbHRlclRva2VuUmVxdWVzdCYpOworICAgIFN0cmluZyBjYW5vbmljYWxp
emVkU25pcHBldEZvclRhZ05hbWUoY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0Jik7CisgICAgU3Ry
aW5nIGNhbm9uaWNhbGl6ZWRTbmlwcGV0Rm9ySmF2YVNjcmlwdChjb25zdCBGaWx0ZXJUb2tlblJl
cXVlc3QmKTsKKyAgICBTdHJpbmcgc25pcHBldEZyb21BdHRyaWJ1dGUoY29uc3QgRmlsdGVyVG9r
ZW5SZXF1ZXN0JiwgY29uc3QgSFRNTFRva2VuOjpBdHRyaWJ1dGUmKTsKKyAgICBTdHJpbmcgY2Fu
b25pY2FsaXplKGNvbnN0IFN0cmluZyYsIFRydW5jYXRpb25TdHlsZSk7CiAKICAgICBib29sIGlz
Q29udGFpbmVkSW5SZXF1ZXN0KGNvbnN0IFN0cmluZyYpOwogICAgIGJvb2wgaXNMaWtlbHlTYWZl
UmVzb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwpOwo=
</data>
<flag name="review"
          id="293483"
          type_id="1"
          status="+"
          setter="bfulgham"
    />
    <flag name="commit-queue"
          id="293868"
          type_id="3"
          status="-"
          setter="bfulgham"
    />
          </attachment>
      

    </bug>

</bugzilla>