<?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>181910</bug_id>
          
          <creation_ts>2018-01-20 16:58:44 -0800</creation_ts>
          <short_desc>Make garbage collection of MessagePort objects be asynchronous</short_desc>
          <delta_ts>2019-08-07 15:43:26 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>181178</blocked>
    
    <blocked>193184</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>aestes</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>kangil.han</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1391430</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2018-01-20 16:58:44 -0800</bug_when>
    <thetext>Make garbage collection of MessagePort objects be asynchronous</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391431</commentid>
    <comment_count>1</comment_count>
      <attachid>331852</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2018-01-20 17:17:29 -0800</bug_when>
    <thetext>Created attachment 331852
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391441</commentid>
    <comment_count>2</comment_count>
      <attachid>331856</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2018-01-20 20:28:15 -0800</bug_when>
    <thetext>Created attachment 331856
Patch

Maybe fixed the windows builds (Thanks, MSVC)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391444</commentid>
    <comment_count>3</comment_count>
      <attachid>331857</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2018-01-20 20:59:42 -0800</bug_when>
    <thetext>Created attachment 331857
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391446</commentid>
    <comment_count>4</comment_count>
      <attachid>331857</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-20 23:07:54 -0800</bug_when>
    <thetext>Comment on attachment 331857
Patch

Clearing flags on attachment: 331857

Committed r227275: &lt;https://trac.webkit.org/changeset/227275&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391447</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-20 23:07:56 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391448</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-01-20 23:08:23 -0800</bug_when>
    <thetext>&lt;rdar://problem/36703934&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331852</attachid>
            <date>2018-01-20 17:17:29 -0800</date>
            <delta_ts>2018-01-20 20:28:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>32315</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwM2NhNTA4YmQzZS4uNDc5NjNiZjhjOTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NSBAQAorMjAxOC0wMS0yMCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+
CisKKyAgICAgICAgTWFrZSBnYXJiYWdlIGNvbGxlY3Rpb24gb2YgTWVzc2FnZVBvcnQgb2JqZWN0
cyBiZSBhc3luY2hyb25vdXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xODE5MTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBObyBuZXcgdGVzdHMgKENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMsIGluY2x1
ZGluZyBHQy1zcGVjaWZpYyBvbmVzKS4KKworICAgICAgICBUaGUgYmFzaWMgcHJlbWlzZSBoZXJl
IGlzIGFzIGZvbGxvd3M6CisgICAgICAgIC0gWW91IGNhbiBHQyBhIE1lc3NhZ2VQb3J0IHRoYXQg
aXMgY2xvc2VkCisgICAgICAgIC0gWW91IGNhbiBHQyBhIE1lc3NhZ2VQb3J0IHRoYXQgaXMgb3Ro
ZXJ3aXNlIGVsaWdpYmxlIGZvciBHQyBhbmQgaGFzIG5vIG9ubWVzc2FnZSBoYW5kbGVyCisgICAg
ICAgIC0gWW91IGNhbiBHQyBhIE1lc3NhZ2VQb3J0IHRoYXQgaXMgb3RoZXJ3aXNlIGVsaWdpYmxl
IGZvciBHQywgZXZlbiBpZiBpdCBoYXMgYSBtZXNzYWdlIGhhbmRsZXIsCisgICAgICAgICAgYXMg
bG9uZyBhcyB0aGVyZSBhcmUgbm8gbWVzc2FnZXMgaW4gZmxpZ2h0IGJldHdlZW4gaXQgYW5kIHRo
ZSByZW1vdGUgcG9ydCwgYW5kIGFzIGxvbmcgYXMgdGhlCisgICAgICAgICAgcmVtb3RlIHBvcnQg
aXMgb3RoZXJ3aXNlIGVsaWdpYmxlIGZvciBHQy4KKyAgICAgICAgICAKKyAgICAgICAgQSBNZXNz
YWdlUG9ydCBpcyBjb25zaWRlcmVkIGVsaWdpYmxlIGZvciBHQyBvbmNlIGhhc1BlbmRpbmdBY3Rp
dml0eSBpcyBhc2tlZCBvbmNlLgorICAgICAgICAKKyAgICAgICAgQSBNZXNzYWdlUG9ydCBiZWNv
bWVzIG5vLWxvbmdlci1lbGlnaWJsZSBmb3IgR0Mgb25jZSBpdCBpcyB1c2VkIGZvciBzZW5kaW5n
IG9yIHJlY2VpdmluZyBhIG1lc3NhZ2UuCisgICAgICAgIAorICAgICAgICBUaGUgY2hhbmdlcyB0
byBNZXNzYWdlUG9ydC5jcHAgaW1wbGVtZW50IHRoZSBhYm92ZSB3aXRoIGEgdGlueSBsaXR0bGUg
Ym9vbC1kcml2ZW4gc3RhdGUgbWFjaGluZS4KKyAgICAgICAgKiBkb20vTWVzc2FnZVBvcnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OnBvc3RNZXNzYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lc3NhZ2VQb3J0OjpkaXNlbnRhbmdsZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZXNzYWdlUG9ydDo6cmVnaXN0ZXJMb2NhbEFjdGl2aXR5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
c3NhZ2VQb3J0OjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6Y2xvc2Up
OgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OmNvbnRleHREZXN0cm95ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OmRpc3BhdGNoTWVzc2FnZXMpOgorICAgICAgICAo
V2ViQ29yZTo6TWVzc2FnZVBvcnQ6Omhhc1BlbmRpbmdBY3Rpdml0eSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6aXNMb2NhbGx5UmVhY2hhYmxlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0OjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lc3NhZ2VQb3J0OjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBkb20v
TWVzc2FnZVBvcnQuaDoKKworICAgICAgICAtIFJlbW92ZSB0aGUgbG9jayBhbmQgYW55IGJhY2tn
cm91bmQtdGhyZWFkIGNvZGUgcGF0aHMKKyAgICAgICAgLSBBZGQgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKXMgdGhyb3VnaG91dAorICAgICAgICAqIGRvbS9tZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRD
aGFubmVsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbDo6TWVzc2Fn
ZVBvcnRDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbDo6aW5j
bHVkZXNQb3J0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbDo6ZW50YW5n
bGVQb3J0V2l0aFByb2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVs
OjpkaXNlbnRhbmdsZVBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVs
OjpjbG9zZVBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsOjpwb3N0
TWVzc2FnZVRvUmVtb3RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbDo6
dGFrZUFsbE1lc3NhZ2VzRm9yUG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENo
YW5uZWw6OmNoZWNrUmVtb3RlUG9ydEZvckFjdGl2aXR5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
c3NhZ2VQb3J0Q2hhbm5lbDo6aGFzQW55TWVzc2FnZXNQZW5kaW5nT3JJbkZsaWdodCBjb25zdCk6
CisgICAgICAgICogZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWwuaDoKKyAgICAg
ICAgCisgICAgICAgIEFkZCBhIGNhbGxiYWNrIGZvciBhIE1lc3NhZ2VQb3J0Q2hhbm5lbCB0byBn
byBhc2sgdGhlIHJlbW90ZSBNZXNzYWdlUG9ydCBvYmplY3QgYWJvdXQgbG9jYWwgYWN0aXZpdHk6
CisgICAgICAgICogZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlci5o
OgorICAgICAgICAqIGRvbS9tZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXJJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVySW1w
bDo6Y2hlY2tSZW1vdGVQb3J0Rm9yQWN0aXZpdHkpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2Fn
ZVBvcnRDaGFubmVsUHJvdmlkZXJJbXBsOjpjaGVja1Byb2Nlc3NMb2NhbFBvcnRGb3JBY3Rpdml0
eSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlckltcGw6Omhh
c01lc3NhZ2VzRm9yUG9ydHNfdGVtcG9yYXJ5U3luYyk6IERlbGV0ZWQuCisgICAgICAgICogZG9t
L21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlckltcGwuaDoKKyAgICAgICAg
CisgICAgICAgIC0gUmVtb3ZlIHRoZSBsb2NrIGFuZCBhbnkgYmFja2dyb3VuZC10aHJlYWQgY29k
ZSBwYXRocworICAgICAgICAtIEFkZCBBU1NFUlQoaXNNYWluVGhyZWFkKCkpcyB0aHJvdWdob3V0
CisgICAgICAgICogZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeTo6bWVzc2Fn
ZVBvcnRDaGFubmVsQ3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5u
ZWxSZWdpc3RyeTo6bWVzc2FnZVBvcnRDaGFubmVsRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5OjpkaWRFbnRhbmdsZUxvY2FsVG9SZW1vdGUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnk6OmRpZERpc2Vu
dGFuZ2xlTWVzc2FnZVBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVs
UmVnaXN0cnk6OmRpZENsb3NlTWVzc2FnZVBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2Fn
ZVBvcnRDaGFubmVsUmVnaXN0cnk6OmRpZFBvc3RNZXNzYWdlVG9SZW1vdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnk6OnRha2VBbGxNZXNzYWdlc0ZvclBv
cnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnk6OmNoZWNr
UmVtb3RlUG9ydEZvckFjdGl2aXR5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hh
bm5lbFJlZ2lzdHJ5OjpleGlzdGluZ0NoYW5uZWxDb250YWluaW5nUG9ydCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeTo6aGFzTWVzc2FnZXNGb3JQb3J0c190
ZW1wb3JhcnlTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20vbWVzc2FnZXBvcnRzL01lc3Nh
Z2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5Lmg6CisKIDIwMTgtMDEtMTggIEJyYWR5IEVpZHNvbiAgPGJl
aWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgaW4tcHJvY2VzcyBNZXNzYWdlUG9ydHMg
YmUgKG1vc3RseSkgYXN5bmNocm9ub3VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
TWVzc2FnZVBvcnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAppbmRl
eCBhOGQxMzkwODk2NS4uOTNjZGU5Yjk3MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9NZXNzYWdlUG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNw
cApAQCAtMTI0LDYgKzEyNCw4IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IE1lc3NhZ2VQb3J0Ojpwb3N0
TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSBtCiB7CiAgICAgTE9H
KE1lc3NhZ2VQb3J0cywgIkF0dGVtcHRpbmcgdG8gcG9zdCBtZXNzYWdlIHRvIHBvcnQgJXMgKHRv
IGJlIHJlY2VpdmVkIGJ5IHBvcnQgJXMpIiwgbV9pZGVudGlmaWVyLmxvZ1N0cmluZygpLnV0Zjgo
KS5kYXRhKCksIG1fcmVtb3RlSWRlbnRpZmllci5sb2dTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
IAorICAgIHJlZ2lzdGVyTG9jYWxBY3Rpdml0eSgpOworCiAgICAgVmVjdG9yPFJlZlB0cjxNZXNz
YWdlUG9ydD4+IHBvcnRzOwogICAgIGF1dG8gbWVzc2FnZURhdGEgPSBTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmNyZWF0ZShzdGF0ZSwgbWVzc2FnZVZhbHVlLCBXVEZNb3ZlKHRyYW5zZmVyKSwgcG9y
dHMpOwogICAgIGlmIChtZXNzYWdlRGF0YS5oYXNFeGNlcHRpb24oKSkKQEAgLTE1OCw4ICsxNjAs
MTAgQEAgRXhjZXB0aW9uT3I8dm9pZD4gTWVzc2FnZVBvcnQ6OnBvc3RNZXNzYWdlKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIG0KIHZvaWQgTWVzc2FnZVBvcnQ6OmRpc2VudGFu
Z2xlKCkKIHsKICAgICBBU1NFUlQobV9lbnRhbmdsZWQpOwotCiAgICAgbV9lbnRhbmdsZWQgPSBm
YWxzZTsKKworICAgIHJlZ2lzdGVyTG9jYWxBY3Rpdml0eSgpOworCiAgICAgTWVzc2FnZVBvcnRD
aGFubmVsUHJvdmlkZXI6OnNpbmdsZXRvbigpLm1lc3NhZ2VQb3J0RGlzZW50YW5nbGVkKG1faWRl
bnRpZmllcik7CiAKICAgICAvLyBXZSBjYW4ndCByZWNlaXZlIGFueSBtZXNzYWdlcyBvciBnZW5l
cmF0ZSBhbnkgZXZlbnRzIGFmdGVyIHRoaXMsIHNvIHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUg
bGlzdCBvZiBhY3RpdmUgcG9ydHMuCkBAIC0xNzEsNiArMTc1LDEzIEBAIHZvaWQgTWVzc2FnZVBv
cnQ6OmRpc2VudGFuZ2xlKCkKICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBudWxscHRy
OwogfQogCit2b2lkIE1lc3NhZ2VQb3J0OjpyZWdpc3RlckxvY2FsQWN0aXZpdHkoKQoreworICAg
IC8vIEFueSB0aW1lIGNlcnRhaW4gbG9jYWwgb3BlcmF0aW9ucyBoYXBwZW4sIHdlIGRpcnR5IG91
ciBvd24gc3RhdGUgdG8gZGVsYXkgR0MuCisgICAgbV9oYXNIYWRMb2NhbEFjdGl2aXR5U2luY2VM
YXN0Q2hlY2sgPSB0cnVlOworICAgIG1fbWlnaHRCZUVsaWdpYmxlRm9yR0MgPSBmYWxzZTsKK30K
KwogLy8gSW52b2tlZCB0byBub3RpZnkgdXMgdGhhdCB0aGVyZSBhcmUgbWVzc2FnZXMgYXZhaWxh
YmxlIGZvciB0aGlzIHBvcnQuCiAvLyBUaGlzIGNvZGUgbWF5IGJlIGNhbGxlZCBmcm9tIGFub3Ro
ZXIgdGhyZWFkLCBhbmQgc28gc2hvdWxkIG5vdCBjYWxsIGFueSBub24tdGhyZWFkc2FmZSBBUElz
IChpLmUuIHNob3VsZCBub3QgY2FsbCBpbnRvIHRoZSBlbnRhbmdsZWQgY2hhbm5lbCBvciBhY2Nl
c3MgbXV0YWJsZSB2YXJpYWJsZXMpLgogdm9pZCBNZXNzYWdlUG9ydDo6bWVzc2FnZUF2YWlsYWJs
ZSgpCkBAIC0xODksNiArMjAwLDggQEAgdm9pZCBNZXNzYWdlUG9ydDo6c3RhcnQoKQogICAgIGlm
ICghaXNFbnRhbmdsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgcmVnaXN0ZXJMb2NhbEFj
dGl2aXR5KCk7CisKICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKICAgICBp
ZiAobV9zdGFydGVkKQogICAgICAgICByZXR1cm47CkBAIC0xOTksNiArMjEyLDcgQEAgdm9pZCBN
ZXNzYWdlUG9ydDo6c3RhcnQoKQogCiB2b2lkIE1lc3NhZ2VQb3J0OjpjbG9zZSgpCiB7CisgICAg
bV9taWdodEJlRWxpZ2libGVGb3JHQyA9IHRydWU7CiAgICAgaWYgKG1fY2xvc2VkKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTIxMCw2ICsyMjQsOCBAQCB2b2lkIE1lc3NhZ2VQb3J0OjpjbG9zZSgp
CiB2b2lkIE1lc3NhZ2VQb3J0Ojpjb250ZXh0RGVzdHJveWVkKCkKIHsKICAgICBBU1NFUlQobV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KTsKKworICAgIG1fbWlnaHRCZUVsaWdpYmxlRm9yR0MgPSB0
cnVlOwogICAgIGlmICghbV9jbG9zZWQpCiAgICAgICAgIGNsb3NlKCk7CiAKQEAgLTIzMiw2ICsy
NDgsOSBAQCB2b2lkIE1lc3NhZ2VQb3J0OjpkaXNwYXRjaE1lc3NhZ2VzKCkKICAgICAgICAgICAg
IGlmICghbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KQogICAgICAgICAgICAgICAgIHJldHVybjsK
IAorICAgICAgICAgICAgaWYgKCFtZXNzYWdlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
cmVnaXN0ZXJMb2NhbEFjdGl2aXR5KCk7CisKICAgICAgICAgICAgIEFTU0VSVChtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKIAogICAgICAgICAgICAgYm9vbCBj
b250ZXh0SXNXb3JrZXIgPSBpczxXb3JrZXJHbG9iYWxTY29wZT4oKm1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCk7CkBAIC0yNjYsMTIgKzI4NSw1OSBAQCB2b2lkIE1lc3NhZ2VQb3J0OjpkaXNwYXRj
aE1lc3NhZ2VzKCkKIAogYm9vbCBNZXNzYWdlUG9ydDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29u
c3QKIHsKLSAgICAvLyBUaGUgc3BlYyBzYXlzIHRoYXQgZW50YW5nbGVkIG1lc3NhZ2UgcG9ydHMg
c2hvdWxkIGFsd2F5cyBiZSB0cmVhdGVkIGFzIGlmIHRoZXkgaGF2ZSBhIHN0cm9uZyByZWZlcmVu
Y2UuCi0gICAgLy8gV2UnbGwgYWxzbyBzdGlwdWxhdGUgdGhhdCB0aGUgcXVldWUgbmVlZHMgdG8g
YmUgb3BlbiAoaWYgdGhlIGFwcCBkcm9wcyBpdHMgcmVmZXJlbmNlIHRvIHRoZSBwb3J0IGJlZm9y
ZSBzdGFydCgpLWluZyBpdCwgdGhlbiBpdCdzIG5vdCByZWFsbHkgZW50YW5nbGVkIGFzIGl0J3Mg
dW5yZWFjaGFibGUpLgotICAgIGlmIChtX3N0YXJ0ZWQgJiYgaXNFbnRhbmdsZWQoKSAmJiBNZXNz
YWdlUG9ydENoYW5uZWxQcm92aWRlcjo6c2luZ2xldG9uKCkuaGFzTWVzc2FnZXNGb3JQb3J0c190
ZW1wb3JhcnlTeW5jKG1faWRlbnRpZmllciwgbV9yZW1vdGVJZGVudGlmaWVyKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgbV9taWdodEJlRWxpZ2libGVGb3JHQyA9IHRydWU7CisKKyAgICAv
LyBJZiB0aGUgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCBoYXMgYmVlbiBzaHV0IGRvd24gb24gdGhp
cyBvYmplY3QgY2xvc2UoKSdlZCwgd2UgY2FuIEdDLgorICAgIGlmICghbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0IHx8IG1fY2xvc2VkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJ
ZiB0aGlzIG9iamVjdCBoYXMgYmVlbiBpZGxlIHNpbmNlIHRoZSByZW1vdGUgcG9ydCBkZWNsYXJl
ZCBpdHNlbGYgZWxnaWJpbGUgZm9yIEdDLCB3ZSBjYW4gR0MuCisgICAgaWYgKCFtX2hhc0hhZExv
Y2FsQWN0aXZpdHlTaW5jZUxhc3RDaGVjayAmJiBtX2lzUmVtb3RlRWxpZ2libGVGb3JHQykKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gSWYgdGhpcyBNZXNzYWdlUG9ydCBoYXMgbm8g
bWVzc2FnZSBldmVudCBoYW5kbGVyIHRoZW4gdGhlIGV4aXN0ZW5jZSBvZiByZW1vdGUgYWN0aXZp
dHkgY2Fubm90IGtlZXAgaXQgYWxpdmUuCisgICAgaWYgKCFtX2hhc01lc3NhZ2VFdmVudExpc3Rl
bmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZiB3ZSdyZSBub3QgaW4gdGhl
IG1pZGRsZSBvZiBhc2tpbmcgdGhlIHJlbW90ZSBwb3J0IGFib3V0IGNvbGxlY3RhYmlsaXR5LCBk
byBzbyBub3cuCisgICAgaWYgKCFtX2lzQXNraW5nUmVtb3RlQWJvdXRHQykgeworICAgICAgICBN
ZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlcjo6c2luZ2xldG9uKCkuY2hlY2tSZW1vdGVQb3J0Rm9y
QWN0aXZpdHkobV9yZW1vdGVJZGVudGlmaWVyLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpXShNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlcjo6SGFzQWN0aXZpdHkgaGFzQWN0
aXZpdHkpIHsKKyAgICAgICAgICAgIGF1dG8gaW5uZXJIYW5kbGVyID0gW3RoaXMsIG90aGVyUHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXShNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlcjo6
SGFzQWN0aXZpdHkgaGFzQWN0aXZpdHkpIHsKKyAgICAgICAgICAgICAgICBib29sIGhhc0hhZExv
Y2FsQWN0aXZpdHkgPSBtX2hhc0hhZExvY2FsQWN0aXZpdHlTaW5jZUxhc3RDaGVjazsKKyAgICAg
ICAgICAgICAgICBtX2hhc0hhZExvY2FsQWN0aXZpdHlTaW5jZUxhc3RDaGVjayA9IGZhbHNlOwor
CisgICAgICAgICAgICAgICAgaWYgKGhhc0FjdGl2aXR5ID09IE1lc3NhZ2VQb3J0Q2hhbm5lbFBy
b3ZpZGVyOjpIYXNBY3Rpdml0eTo6Tm8gJiYgIWhhc0hhZExvY2FsQWN0aXZpdHkpCisgICAgICAg
ICAgICAgICAgICAgIG1faXNSZW1vdGVFbGlnaWJsZUZvckdDID0gdHJ1ZTsKKworICAgICAgICAg
ICAgICAgIGlmIChoYXNBY3Rpdml0eSA9PSBNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlcjo6SGFz
QWN0aXZpdHk6OlllcykKKyAgICAgICAgICAgICAgICAgICAgbV9pc1JlbW90ZUVsaWdpYmxlRm9y
R0MgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgIG1faXNBc2tpbmdSZW1vdGVBYm91dEdDID0g
ZmFsc2U7CisgICAgICAgICAgICB9OworCisKKyAgICAgICAgICAgIGlmICghbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYg
KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpIHsKKyAgICAgICAg
ICAgICAgICBpbm5lckhhbmRsZXIoaGFzQWN0aXZpdHkpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soW2lubmVySGFuZGxlciA9IFdURk1vdmUoaW5u
ZXJIYW5kbGVyKSwgaGFzQWN0aXZpdHldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSBtdXRhYmxl
IHsKKyAgICAgICAgICAgICAgICBpbm5lckhhbmRsZXIoaGFzQWN0aXZpdHkpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0pOworICAgICAgICBtX2lzQXNraW5nUmVtb3RlQWJvdXRHQyA9IHRy
dWU7CisgICAgfQorCisgICAgLy8gU2luY2Ugd2UgbmVlZCBhbiBhbnN3ZXIgZnJvbSB0aGUgcmVt
b3RlIG9iamVjdCwgd2UgaGF2ZSB0byBwcmV0ZW5kIHdlIGhhdmUgcGVuZGluZyBhY3Rpdml0eSBm
b3Igbm93LgorICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1lc3NhZ2VQb3J0Ojppc0xvY2Fs
bHlSZWFjaGFibGUoKSBjb25zdAoreworICAgIHJldHVybiAhbV9taWdodEJlRWxpZ2libGVGb3JH
QzsKIH0KIAogTWVzc2FnZVBvcnQqIE1lc3NhZ2VQb3J0Ojpsb2NhbGx5RW50YW5nbGVkUG9ydCgp
IGNvbnN0CkBAIC0zMjMsMTEgKzM4OSwyNiBAQCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4g
TWVzc2FnZVBvcnQ6OmVudGFuZ2xlUG9ydHMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgYwogCiBi
b29sIE1lc3NhZ2VQb3J0OjphZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlLCBSZWY8RXZlbnRMaXN0ZW5lcj4mJiBsaXN0ZW5lciwgY29uc3QgQWRkRXZlbnRMaXN0
ZW5lck9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKGxpc3RlbmVyLT5pc0F0dHJpYnV0ZSgp
ICYmIGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubWVzc2FnZUV2ZW50KQotICAgICAgICBzdGFy
dCgpOworICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1lc3NhZ2VFdmVudCkgewor
ICAgICAgICBpZiAobGlzdGVuZXItPmlzQXR0cmlidXRlKCkpCisgICAgICAgICAgICBzdGFydCgp
OworICAgICAgICBtX2hhc01lc3NhZ2VFdmVudExpc3RlbmVyID0gdHJ1ZTsKKyAgICAgICAgcmVn
aXN0ZXJMb2NhbEFjdGl2aXR5KCk7CisgICAgfQorCiAgICAgcmV0dXJuIEV2ZW50VGFyZ2V0V2l0
aElubGluZURhdGE6OmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBXVEZNb3ZlKGxpc3RlbmVy
KSwgb3B0aW9ucyk7CiB9CiAKK2Jvb2wgTWVzc2FnZVBvcnQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIo
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBj
b25zdCBMaXN0ZW5lck9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgYXV0byByZXN1bHQgPSBFdmVu
dFRhcmdldFdpdGhJbmxpbmVEYXRhOjpyZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlz
dGVuZXIsIG9wdGlvbnMpOworCisgICAgaWYgKCFoYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVz
KCkubWVzc2FnZUV2ZW50KSkKKyAgICAgICAgbV9oYXNNZXNzYWdlRXZlbnRMaXN0ZW5lciA9IGZh
bHNlOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogY29uc3QgY2hhciogTWVzc2FnZVBvcnQ6
OmFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdAogewogICAgIHJldHVybiAiTWVzc2FnZVBvcnQi
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaAppbmRleCAxNDVhNWE5Mjk1ZS4uMjQ1YmE4MmQyMTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5oCkBAIC04Myw2ICs4Myw4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHN0b3AoKSBmaW5hbCB7IGNsb3NlKCk7IH0KICAgICBib29sIGhhc1BlbmRpbmdBY3Rp
dml0eSgpIGNvbnN0IGZpbmFsOwogCisgICAgYm9vbCBpc0xvY2FsbHlSZWFjaGFibGUoKSBjb25z
dDsKKwogICAgIC8vIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEuCiAgICAgRXZlbnRUYXJnZXRJ
bnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBNZXNz
YWdlUG9ydEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsgfQogICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBBY3Rp
dmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQpAQCAtOTMsOSArOTUsMTIg
QEAgcHJpdmF0ZToKICAgICBleHBsaWNpdCBNZXNzYWdlUG9ydChTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiBsb2NhbCwgY29uc3QgTWVzc2FnZVBv
cnRJZGVudGlmaWVyJiByZW1vdGUpOwogCiAgICAgYm9vbCBhZGRFdmVudExpc3RlbmVyKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBSZWY8RXZlbnRMaXN0ZW5lcj4mJiwgY29uc3QgQWRk
RXZlbnRMaXN0ZW5lck9wdGlvbnMmKSBmaW5hbDsKKyAgICBib29sIHJlbW92ZUV2ZW50TGlzdGVu
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImLCBjb25zdCBM
aXN0ZW5lck9wdGlvbnMmKSBmaW5hbDsKIAogICAgIHZvaWQgZGlzZW50YW5nbGUoKTsKIAorICAg
IHZvaWQgcmVnaXN0ZXJMb2NhbEFjdGl2aXR5KCk7CisKICAgICAvLyBBIHBvcnQgc3RhcnRzIG91
dCBpdHMgbGlmZSBlbnRhbmdsZWQsIGFuZCByZW1haW5zIGVudGFuZ2xlZCB1bnRpbCBpdCBpcyBj
bG9zZWQgb3IgaXMgY2xvbmVkLgogICAgIGJvb2wgaXNFbnRhbmdsZWQoKSBjb25zdCB7IHJldHVy
biAhbV9jbG9zZWQgJiYgbV9lbnRhbmdsZWQ7IH0KIApAQCAtMTAzLDYgKzEwOCwxMyBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9jbG9zZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9lbnRhbmdsZWQg
eyB0cnVlIH07CiAKKyAgICAvLyBGbGFncyB0byBtYW5hZ2UgcXVlcnlpbmcgdGhlIHJlbW90ZSBw
b3J0IGZvciBHQyBwdXJwb3NlcworICAgIG11dGFibGUgYm9vbCBtX21pZ2h0QmVFbGlnaWJsZUZv
ckdDIHsgZmFsc2UgfTsKKyAgICBtdXRhYmxlIGJvb2wgbV9oYXNIYWRMb2NhbEFjdGl2aXR5U2lu
Y2VMYXN0Q2hlY2sgeyBmYWxzZSB9OworICAgIG11dGFibGUgYm9vbCBtX2lzUmVtb3RlRWxpZ2li
bGVGb3JHQyB7IGZhbHNlIH07CisgICAgbXV0YWJsZSBib29sIG1faXNBc2tpbmdSZW1vdGVBYm91
dEdDIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzTWVzc2FnZUV2ZW50TGlzdGVuZXIgeyBmYWxz
ZSB9OworCiAgICAgTWVzc2FnZVBvcnRJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKICAgICBNZXNz
YWdlUG9ydElkZW50aWZpZXIgbV9yZW1vdGVJZGVudGlmaWVyOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vbWVzc2FnZXBvcnRzL01lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vbWVzc2FnZXBvcnRzL01lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAKaW5kZXgg
ZjAwYmYwYTZiYjQuLjY1ZDdjMzQ1ZjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
bWVzc2FnZXBvcnRzL01lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWwuY3BwCkBAIC0yOCw2ICsyOCw4IEBA
CiAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnRDaGFubmVsUmVn
aXN0cnkuaCIKKyNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KKyNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5LDYgKzQxLDgg
QEAgUmVmPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gTWVzc2FnZVBvcnRDaGFubmVsOjpjcmVhdGUoTWVz
c2FnZVBvcnRDaGFubmVsUmVnaXN0cnkmIHIKIE1lc3NhZ2VQb3J0Q2hhbm5lbDo6TWVzc2FnZVBv
cnRDaGFubmVsKE1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5JiByZWdpc3RyeSwgY29uc3QgTWVz
c2FnZVBvcnRJZGVudGlmaWVyJiBwb3J0MSwgY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiBw
b3J0MikKICAgICA6IG1fcmVnaXN0cnkocmVnaXN0cnkpCiB7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKwogICAgIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOwogCiAgICAgbV9wb3J0
c1swXSA9IHBvcnQxOwpAQCAtNTgsMTQgKzYyLDE0IEBAIE1lc3NhZ2VQb3J0Q2hhbm5lbDo6fk1l
c3NhZ2VQb3J0Q2hhbm5lbCgpCiAKIGJvb2wgTWVzc2FnZVBvcnRDaGFubmVsOjppbmNsdWRlc1Bv
cnQoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiBwb3J0KQogewotICAgIExvY2tlcjxMb2Nr
PiBsb2NrZXIobV9sb2NrKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAgcmV0
dXJuIG1fcG9ydHNbMF0gPT0gcG9ydCB8fCBtX3BvcnRzWzFdID09IHBvcnQ7CiB9CiAKIHZvaWQg
TWVzc2FnZVBvcnRDaGFubmVsOjplbnRhbmdsZVBvcnRXaXRoUHJvY2Vzcyhjb25zdCBNZXNzYWdl
UG9ydElkZW50aWZpZXImIHBvcnQsIFByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3MpCiB7Ci0gICAg
TG9ja2VyPExvY2s+IGxvY2tlcihtX2xvY2spOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAKICAgICBMT0coTWVzc2FnZVBvcnRzLCAiTWVzc2FnZVBvcnRDaGFubmVsICVzICglcCkgZW50
YW5nbGluZyBwb3J0ICVzIiwgbG9nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdGhpcywgcG9ydC5s
b2dTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIApAQCAtNzksNyArODMsNyBAQCB2b2lkIE1lc3Nh
Z2VQb3J0Q2hhbm5lbDo6ZW50YW5nbGVQb3J0V2l0aFByb2Nlc3MoY29uc3QgTWVzc2FnZVBvcnRJ
ZGVudGlmaWVyJiBwbwogCiB2b2lkIE1lc3NhZ2VQb3J0Q2hhbm5lbDo6ZGlzZW50YW5nbGVQb3J0
KGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcG9ydCkKIHsKLSAgICBMb2NrZXI8TG9jaz4g
bG9ja2VyKG1fbG9jayk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAogICAgIExPRyhN
ZXNzYWdlUG9ydHMsICJNZXNzYWdlUG9ydENoYW5uZWwgJXMgKCVwKSBkaXNlbnRhbmdsaW5nIHBv
cnQgJXMiLCBsb2dTdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0aGlzLCBwb3J0LmxvZ1N0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwogCkBAIC05MiwxMiArOTYsMTEgQEAgdm9pZCBNZXNzYWdlUG9ydENo
YW5uZWw6OmRpc2VudGFuZ2xlUG9ydChjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImIHBvcnQp
CiAgICAgLy8gVGhpcyBzZXQgb2Ygc3RlcHMgaXMgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIGxvY2sg
aXMgdW5sb2NrZWQgYmVmb3JlIHRoZQogICAgIC8vIGxhc3QgcmVmIHRvIHRoaXMgb2JqZWN0IGlz
IHJlbGVhc2VkLgogICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUobV9lbnRhbmdsZWRU
b1Byb2Nlc3NQcm90ZWN0b3JzW2ldKTsKLSAgICBsb2NrZXIudW5sb2NrRWFybHkoKTsKIH0KIAog
dm9pZCBNZXNzYWdlUG9ydENoYW5uZWw6OmNsb3NlUG9ydChjb25zdCBNZXNzYWdlUG9ydElkZW50
aWZpZXImIHBvcnQpCiB7Ci0gICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX2xvY2spOworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAKICAgICBBU1NFUlQocG9ydCA9PSBtX3BvcnRzWzBdIHx8
IHBvcnQgPT0gbV9wb3J0c1sxXSk7CiAgICAgc2l6ZV90IGkgPSBwb3J0ID09IG1fcG9ydHNbMF0g
PyAwIDogMTsKQEAgLTExMywxMyArMTE2LDExIEBAIHZvaWQgTWVzc2FnZVBvcnRDaGFubmVsOjpj
bG9zZVBvcnQoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiBwb3J0KQogICAgIG1fcGVuZGlu
Z01lc3NhZ2VQb3J0VHJhbnNmZXJzW2ldLmNsZWFyKCk7CiAgICAgbV9wZW5kaW5nTWVzc2FnZVBy
b3RlY3RvcnNbaV0gPSBudWxscHRyOwogICAgIG1fZW50YW5nbGVkVG9Qcm9jZXNzUHJvdGVjdG9y
c1tpXSA9IG51bGxwdHI7Ci0KLSAgICBsb2NrZXIudW5sb2NrRWFybHkoKTsKIH0KIAogYm9vbCBN
ZXNzYWdlUG9ydENoYW5uZWw6OnBvc3RNZXNzYWdlVG9SZW1vdGUoTWVzc2FnZVdpdGhNZXNzYWdl
UG9ydHMmJiBtZXNzYWdlLCBjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImIHJlbW90ZVRhcmdl
dCkKIHsKLSAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fbG9jayk7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKIAogICAgIEFTU0VSVChyZW1vdGVUYXJnZXQgPT0gbV9wb3J0c1swXSB8fCBy
ZW1vdGVUYXJnZXQgPT0gbV9wb3J0c1sxXSk7CiAgICAgc2l6ZV90IGkgPSByZW1vdGVUYXJnZXQg
PT0gbV9wb3J0c1swXSA/IDAgOiAxOwpAQCAtMTU2LDcgKzE1Nyw3IEBAIGJvb2wgTWVzc2FnZVBv
cnRDaGFubmVsOjpwb3N0TWVzc2FnZVRvUmVtb3RlKE1lc3NhZ2VXaXRoTWVzc2FnZVBvcnRzJiYg
bWVzc2FnZSwKIAogdm9pZCBNZXNzYWdlUG9ydENoYW5uZWw6OnRha2VBbGxNZXNzYWdlc0ZvclBv
cnQoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiBwb3J0LCBGdW5jdGlvbjx2b2lkKFZlY3Rv
cjxNZXNzYWdlV2l0aE1lc3NhZ2VQb3J0cz4mJiwgRnVuY3Rpb248dm9pZCgpPiYmKT4mJiBjYWxs
YmFjaykKIHsKLSAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fbG9jayk7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKIAogICAgIExPRyhNZXNzYWdlUG9ydHMsICJNZXNzYWdlUG9ydENoYW5u
ZWwgJXAgdGFraW5nIGFsbCBtZXNzYWdlcyBmb3IgcG9ydCAlcyIsIHRoaXMsIHBvcnQubG9nU3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKQEAgLTE4MSw3ICsxODIsNiBAQCB2b2lkIE1lc3NhZ2VQ
b3J0Q2hhbm5lbDo6dGFrZUFsbE1lc3NhZ2VzRm9yUG9ydChjb25zdCBNZXNzYWdlUG9ydElkZW50
aWZpZXImIHBvcgogICAgIEhhc2hTZXQ8UmVmUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4+IHRyYW5z
ZmVycmVkUG9ydFByb3RlY3RvcnM7CiAgICAgdHJhbnNmZXJyZWRQb3J0UHJvdGVjdG9ycy5zd2Fw
KG1fcGVuZGluZ01lc3NhZ2VQb3J0VHJhbnNmZXJzW2ldKTsKIAotICAgIGxvY2tlci51bmxvY2tF
YXJseSgpOwogICAgIGNhbGxiYWNrKFdURk1vdmUocmVzdWx0KSwgW3NpemUsIHRoaXMsIHBvcnQs
IHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKG1fcGVuZGluZ01lc3NhZ2VQcm90ZWN0b3JzW2ldKSwg
dHJhbnNmZXJyZWRQb3J0UHJvdGVjdG9ycyA9IFdURk1vdmUodHJhbnNmZXJyZWRQb3J0UHJvdGVj
dG9ycyldIHsKICAgICAgICAgVU5VU0VEX1BBUkFNKHBvcnQpOwogICAgICAgICAtLW1fbWVzc2Fn
ZUJhdGNoZXNJbkZsaWdodDsKQEAgLTE5MCwxMCArMTkwLDUxIEBAIHZvaWQgTWVzc2FnZVBvcnRD
aGFubmVsOjp0YWtlQWxsTWVzc2FnZXNGb3JQb3J0KGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmll
ciYgcG9yCiAgICAgfSk7CiB9CiAKLWJvb2wgTWVzc2FnZVBvcnRDaGFubmVsOjpoYXNBbnlNZXNz
YWdlc1BlbmRpbmdPckluRmxpZ2h0KCkgY29uc3QKK3ZvaWQgTWVzc2FnZVBvcnRDaGFubmVsOjpj
aGVja1JlbW90ZVBvcnRGb3JBY3Rpdml0eShjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImIHJl
bW90ZVBvcnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlk
ZXI6Okhhc0FjdGl2aXR5KT4mJiBjYWxsYmFjaykKIHsKLSAgICBMb2NrZXI8TG9jaz4gbG9ja2Vy
KG1fbG9jayk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQocmVtb3Rl
UG9ydCA9PSBtX3BvcnRzWzBdIHx8IHJlbW90ZVBvcnQgPT0gbV9wb3J0c1sxXSk7CisKKyAgICAv
LyBJZiB0aGUgcmVtb3RlIHBvcnQgaXMgY2xvc2VkIHRoZXJlIGlzIG5vIHBlbmRpbmcgYWN0aXZp
dHkuCisgICAgc2l6ZV90IGkgPSByZW1vdGVQb3J0ID09IG1fcG9ydHNbMF0gPyAwIDogMTsKKyAg
ICBpZiAobV9pc0Nsb3NlZFtpXSkgeworICAgICAgICBjYWxsYmFjayhNZXNzYWdlUG9ydENoYW5u
ZWxQcm92aWRlcjo6SGFzQWN0aXZpdHk6Ok5vKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAor
ICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgbWVzc2FnZXMgaW4gZmxpZ2h0IGJldHdlZW4gdGhlIHBv
cnRzLCB0aGVyZSBpcyBwZW5kaW5nIGFjdGl2aXR5LgorICAgIGlmIChoYXNBbnlNZXNzYWdlc1Bl
bmRpbmdPckluRmxpZ2h0KCkpIHsKKyAgICAgICAgY2FsbGJhY2soTWVzc2FnZVBvcnRDaGFubmVs
UHJvdmlkZXI6Okhhc0FjdGl2aXR5OjpZZXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gSWYgdGhlIHBvcnQgaXMgbm90IGN1cnJlbnRseSBpbiBhIHByb2Nlc3MgdGhlbiBpdCdz
IGJlaW5nIHRyYW5zZmVycmVkIGFzIHBhcnQgb2YgYSBwb3N0TWVzc2FnZS4KKyAgICAvLyBXZSB0
cmVhdCB0aGVzZSBwb3J0cyBhcyBpZiB0aGV5IGRvIGhhdmUgYWN0aXZpdHkgc2luY2UgdGhleSB3
aWxsIGJlIHJldml2ZWQgd2hlbiB0aGUgbWVzc2FnZSBpcyBkZWxpdmVyZWQuCisgICAgaWYgKCFt
X3Byb2Nlc3Nlc1tpXSkgeworICAgICAgICBjYWxsYmFjayhNZXNzYWdlUG9ydENoYW5uZWxQcm92
aWRlcjo6SGFzQWN0aXZpdHk6Olllcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBh
dXRvIG91dGVyQ2FsbGJhY2sgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE1lc3NhZ2VQb3J0Q2hh
bm5lbFByb3ZpZGVyOjpIYXNBY3Rpdml0eSk+IHsgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0gKE1lc3NhZ2VQb3J0Q2hh
bm5lbFByb3ZpZGVyOjpIYXNBY3Rpdml0eSBoYXNBY3Rpdml0eSkgeworICAgICAgICBpZiAoaGFz
QWN0aXZpdHkgPT0gTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXI6Okhhc0FjdGl2aXR5OjpZZXMp
IHsKKyAgICAgICAgICAgIGNhbGxiYWNrKGhhc0FjdGl2aXR5KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZSByZW1vdGUgcG9ydCBzYWlkIGl0IGhh
ZCBubyBhY3Rpdml0eSwgY2hlY2sgYWdhaW4gZm9yIGFueSBtZXNzYWdlcyB0aGF0IG1pZ2h0IGJl
IGluIGZsaWdodC4KKyAgICAgICAgLy8gVGhpcyBpcyBiZWNhdXNlIGl0IG1pZ2h0IGhhdmUgYXN5
bmNocm9ub3VzbHkgc2VudCBhIG1lc3NhZ2UganVzdCBiZWZvcmUgaXQgd2FzIGFza2VkIGFib3V0
IGxvY2FsIGFjdGl2aXR5LgorICAgICAgICBpZiAoaGFzQW55TWVzc2FnZXNQZW5kaW5nT3JJbkZs
aWdodCgpKQorICAgICAgICAgICAgaGFzQWN0aXZpdHkgPSBNZXNzYWdlUG9ydENoYW5uZWxQcm92
aWRlcjo6SGFzQWN0aXZpdHk6OlllczsKKworICAgICAgICBjYWxsYmFjayhoYXNBY3Rpdml0eSk7
CisgICAgfSB9OworCisgICAgTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXI6OnNpbmdsZXRvbigp
LmNoZWNrUHJvY2Vzc0xvY2FsUG9ydEZvckFjdGl2aXR5KHJlbW90ZVBvcnQsICptX3Byb2Nlc3Nl
c1tpXSwgV1RGTW92ZShvdXRlckNhbGxiYWNrKSk7Cit9CisKK2Jvb2wgTWVzc2FnZVBvcnRDaGFu
bmVsOjpoYXNBbnlNZXNzYWdlc1BlbmRpbmdPckluRmxpZ2h0KCkgY29uc3QKK3sKKyAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogICAgIHJldHVybiBtX21lc3NhZ2VCYXRjaGVzSW5GbGlnaHQg
fHwgIW1fcGVuZGluZ01lc3NhZ2VzWzBdLmlzRW1wdHkoKSB8fCAhbV9wZW5kaW5nTWVzc2FnZXNb
MV0uaXNFbXB0eSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWVzc2Fn
ZXBvcnRzL01lc3NhZ2VQb3J0Q2hhbm5lbC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL21lc3NhZ2Vw
b3J0cy9NZXNzYWdlUG9ydENoYW5uZWwuaAppbmRleCAyMTQ2YmQwNWIwOS4uNGYyZTk5OWVmN2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRD
aGFubmVsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9y
dENoYW5uZWwuaApAQCAtMjUsMTEgKzI1LDExIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVk
ZSAiTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXIuaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydElk
ZW50aWZpZXIuaCIKICNpbmNsdWRlICJNZXNzYWdlV2l0aE1lc3NhZ2VQb3J0cy5oIgogI2luY2x1
ZGUgIlByb2Nlc3MuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9M
b2NrLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIApAQCAtNTMsNiArNTMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBwb3N0TWVz
c2FnZVRvUmVtb3RlKE1lc3NhZ2VXaXRoTWVzc2FnZVBvcnRzJiYsIGNvbnN0IE1lc3NhZ2VQb3J0
SWRlbnRpZmllciYgcmVtb3RlVGFyZ2V0KTsKIAogICAgIHZvaWQgdGFrZUFsbE1lc3NhZ2VzRm9y
UG9ydChjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImLCBGdW5jdGlvbjx2b2lkKFZlY3RvcjxN
ZXNzYWdlV2l0aE1lc3NhZ2VQb3J0cz4mJiwgRnVuY3Rpb248dm9pZCgpPiYmKT4mJik7CisgICAg
dm9pZCBjaGVja1JlbW90ZVBvcnRGb3JBY3Rpdml0eShjb25zdCBNZXNzYWdlUG9ydElkZW50aWZp
ZXImLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyOjpI
YXNBY3Rpdml0eSk+JiYgY2FsbGJhY2spOwogCiAgICAgYm9vbCBoYXNBbnlNZXNzYWdlc1BlbmRp
bmdPckluRmxpZ2h0KCkgY29uc3Q7CiAKQEAgLTY1LDEwICs2Niw2IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgTWVzc2FnZVBvcnRDaGFubmVsKE1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5Jiwg
Y29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiBwb3J0MSwgY29uc3QgTWVzc2FnZVBvcnRJZGVu
dGlmaWVyJiBwb3J0Mik7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBsb2NrIGlzIHRvIHRlbXBvcmFy
aWx5IHN1cHBvcnQgc3luY2hyb25vdXMgYmFja2dyb3VuZC10aHJlYWQgR0MuCi0gICAgLy8gSXQg
c2hvdWxkIGJlIHJlbW92ZWQgYW5kIHRoaXMgY2xhc3MgcmVsZWdhdGVkIHRvIG1haW4gdGhyZWFk
IG9ubHkuCi0gICAgbXV0YWJsZSBMb2NrIG1fbG9jazsKLQogICAgIE1lc3NhZ2VQb3J0SWRlbnRp
ZmllciBtX3BvcnRzWzJdOwogICAgIGJvb2wgbV9pc0Nsb3NlZFsyXSB7IGZhbHNlLCBmYWxzZSB9
OwogICAgIHN0ZDo6b3B0aW9uYWw8UHJvY2Vzc0lkZW50aWZpZXI+IG1fcHJvY2Vzc2VzWzJdOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENo
YW5uZWxQcm92aWRlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdl
UG9ydENoYW5uZWxQcm92aWRlci5oCmluZGV4IDkwNDJlMDdiYjdkLi4zODk4NGRhMjI4MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5u
ZWxQcm92aWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9tZXNzYWdlcG9ydHMvTWVzc2Fn
ZVBvcnRDaGFubmVsUHJvdmlkZXIuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UK
IAorI2luY2x1ZGUgIlByb2Nlc3MuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTQwLDYgKzQxLDcgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCB+TWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXIoKSB7IH0KIAorICAgIC8vIE9wZXJhdGlv
bnMgdGhhdCBXZWJQcm9jZXNzZXMgcGVyZm9ybQogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVOZXdN
ZXNzYWdlUG9ydENoYW5uZWwoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiBsb2NhbCwgY29u
c3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiByZW1vdGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
ZW50YW5nbGVMb2NhbFBvcnRJblRoaXNQcm9jZXNzVG9SZW1vdGUoY29uc3QgTWVzc2FnZVBvcnRJ
ZGVudGlmaWVyJiBsb2NhbCwgY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiByZW1vdGUpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgbWVzc2FnZVBvcnREaXNlbnRhbmdsZWQoY29uc3QgTWVzc2Fn
ZVBvcnRJZGVudGlmaWVyJiBsb2NhbCkgPSAwOwpAQCAtNDcsNyArNDksMTQgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCB0YWtlQWxsTWVzc2FnZXNGb3JQb3J0KGNvbnN0IE1lc3NhZ2VQb3J0
SWRlbnRpZmllciYsIEZ1bmN0aW9uPHZvaWQoVmVjdG9yPE1lc3NhZ2VXaXRoTWVzc2FnZVBvcnRz
PiYmLCBGdW5jdGlvbjx2b2lkKCk+JiYpPiYmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHBvc3RN
ZXNzYWdlVG9SZW1vdGUoTWVzc2FnZVdpdGhNZXNzYWdlUG9ydHMmJiwgY29uc3QgTWVzc2FnZVBv
cnRJZGVudGlmaWVyJiByZW1vdGVUYXJnZXQpID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCBoYXNN
ZXNzYWdlc0ZvclBvcnRzX3RlbXBvcmFyeVN5bmMoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVy
JiwgY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJikgPSAwOworICAgIGVudW0gY2xhc3MgSGFz
QWN0aXZpdHkgeworICAgICAgICBZZXMsCisgICAgICAgIE5vLAorICAgIH07CisgICAgdmlydHVh
bCB2b2lkIGNoZWNrUmVtb3RlUG9ydEZvckFjdGl2aXR5KGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRp
ZmllciYgcmVtb3RlVGFyZ2V0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhhc0FjdGl2aXR5KT4m
JiBjYWxsYmFjaykgPSAwOworCisgICAgLy8gT3BlcmF0aW9ucyB0aGF0IHRoZSBjb29yZGluYXRp
bmcgcHJvY2VzcyBwZXJmb3JtcyAoZS5nLiB0aGUgVUlQcm9jZXNzKQorICAgIHZpcnR1YWwgdm9p
ZCBjaGVja1Byb2Nlc3NMb2NhbFBvcnRGb3JBY3Rpdml0eShjb25zdCBNZXNzYWdlUG9ydElkZW50
aWZpZXImLCBQcm9jZXNzSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIYXNBY3Rp
dml0eSk+JiYpID0gMDsKIAogcHJpdmF0ZToKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlckltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlcklt
cGwuY3BwCmluZGV4IGUwYTE0NjMzMTRiLi5mZWRhZmM5YzEyMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlckltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9tZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFu
bmVsUHJvdmlkZXJJbXBsLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIk1lc3NhZ2VQ
b3J0Q2hhbm5lbFByb3ZpZGVySW1wbC5oIgogCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKKyNp
bmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAKQEAgLTk3LDEwICs5OCwzMCBAQCB2b2lk
IE1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVySW1wbDo6dGFrZUFsbE1lc3NhZ2VzRm9yUG9ydChj
b25zdCBNZXNzYWdlUG9ydElkZQogICAgIH0pOwogfQogCi1ib29sIE1lc3NhZ2VQb3J0Q2hhbm5l
bFByb3ZpZGVySW1wbDo6aGFzTWVzc2FnZXNGb3JQb3J0c190ZW1wb3JhcnlTeW5jKGNvbnN0IE1l
c3NhZ2VQb3J0SWRlbnRpZmllciYgcG9ydDEsIGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYg
cG9ydDIpCit2b2lkIE1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVySW1wbDo6Y2hlY2tSZW1vdGVQ
b3J0Rm9yQWN0aXZpdHkoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiByZW1vdGVUYXJnZXQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSGFzQWN0aXZpdHkpPiYmIG91dGVyQ2FsbGJhY2spCiB7
Ci0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHN5bmMgZnVuY3Rpb24gY2FsbCB3aGVuIEdDIGxv
Z2ljIGlzIG1hZGUgYXN5bmNocm9ub3VzLgotICAgIHJldHVybiBtX3JlZ2lzdHJ5Lmhhc01lc3Nh
Z2VzRm9yUG9ydHNfdGVtcG9yYXJ5U3luYyhwb3J0MSwgcG9ydDIpOworICAgIGF1dG8gY2FsbGJh
Y2sgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhhc0FjdGl2aXR5KT4geyBbb3V0ZXJDYWxsYmFj
ayA9IFdURk1vdmUob3V0ZXJDYWxsYmFjayldKEhhc0FjdGl2aXR5IGhhc0FjdGl2aXR5KSB7Cisg
ICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIG91dGVyQ2FsbGJhY2soaGFz
QWN0aXZpdHkpOworICAgIH0gfTsKKworICAgIHBlcmZvcm1BY3Rpb25Pbk1haW5UaHJlYWQoW3Jl
Z2lzdHJ5ID0gJm1fcmVnaXN0cnksIHJlbW90ZVRhcmdldCwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgcmVnaXN0cnktPmNoZWNrUmVtb3RlUG9ydEZv
ckFjdGl2aXR5KHJlbW90ZVRhcmdldCwgV1RGTW92ZShjYWxsYmFjaykpOworICAgIH0pOwogfQog
Cit2b2lkIE1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVySW1wbDo6Y2hlY2tQcm9jZXNzTG9jYWxQ
b3J0Rm9yQWN0aXZpdHkoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBQ
cm9jZXNzSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIYXNBY3Rpdml0eSk+JiYg
Y2FsbGJhY2spCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGF1dG8gcG9y
dCA9IE1lc3NhZ2VQb3J0OjpleGlzdGluZ01lc3NhZ2VQb3J0Rm9ySWRlbnRpZmllcihpZGVudGlm
aWVyKTsKKyAgICBpZiAoIXBvcnQpIHsKKyAgICAgICAgY2FsbGJhY2soTWVzc2FnZVBvcnRDaGFu
bmVsUHJvdmlkZXI6Okhhc0FjdGl2aXR5OjpObyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBjYWxsYmFjayhwb3J0LT5pc0xvY2FsbHlSZWFjaGFibGUoKSA/IEhhc0FjdGl2aXR5OjpZ
ZXMgOiBIYXNBY3Rpdml0eTo6Tm8pOworfQorCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFu
bmVsUHJvdmlkZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vbWVzc2FnZXBvcnRzL01lc3Nh
Z2VQb3J0Q2hhbm5lbFByb3ZpZGVySW1wbC5oCmluZGV4IGRlNzEyOTgwYWQ2Li5iNDc3MWY0ZWZi
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9y
dENoYW5uZWxQcm92aWRlckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vbWVzc2FnZXBv
cnRzL01lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVySW1wbC5oCkBAIC00MSw4ICs0MSw5IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBtZXNzYWdlUG9ydENsb3NlZChjb25zdCBNZXNzYWdlUG9ydElkZW50
aWZpZXImIGxvY2FsKSBmaW5hbDsKICAgICB2b2lkIHBvc3RNZXNzYWdlVG9SZW1vdGUoTWVzc2Fn
ZVdpdGhNZXNzYWdlUG9ydHMmJiwgY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiByZW1vdGVU
YXJnZXQpIGZpbmFsOwogICAgIHZvaWQgdGFrZUFsbE1lc3NhZ2VzRm9yUG9ydChjb25zdCBNZXNz
YWdlUG9ydElkZW50aWZpZXImLCBGdW5jdGlvbjx2b2lkKFZlY3RvcjxNZXNzYWdlV2l0aE1lc3Nh
Z2VQb3J0cz4mJiwgRnVuY3Rpb248dm9pZCgpPiYmKT4mJikgZmluYWw7CisgICAgdm9pZCBjaGVj
a1JlbW90ZVBvcnRGb3JBY3Rpdml0eShjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImIHJlbW90
ZVRhcmdldCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIYXNBY3Rpdml0eSk+JiYgY2FsbGJhY2sp
IGZpbmFsOwogCi0gICAgYm9vbCBoYXNNZXNzYWdlc0ZvclBvcnRzX3RlbXBvcmFyeVN5bmMoY29u
c3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiwgY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJikg
ZmluYWw7CisgICAgdm9pZCBjaGVja1Byb2Nlc3NMb2NhbFBvcnRGb3JBY3Rpdml0eShjb25zdCBN
ZXNzYWdlUG9ydElkZW50aWZpZXImLCBQcm9jZXNzSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChIYXNBY3Rpdml0eSk+JiYpIGZpbmFsOwogCiAgICAgdm9pZCBwZXJmb3JtQWN0aW9u
T25NYWluVGhyZWFkKEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9tZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnkuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxSZWdpc3Ry
eS5jcHAKaW5kZXggNmE4MTEyMzBhMWYuLmJkYmQzZWY0ODk5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vbWVzc2FnZXBvcnRzL01lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vbWVzc2FnZXBvcnRzL01lc3NhZ2VQb3J0Q2hhbm5lbFJl
Z2lzdHJ5LmNwcApAQCAtNDUsNyArNDUsNiBAQCB2b2lkIE1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lz
dHJ5OjpkaWRDcmVhdGVNZXNzYWdlUG9ydENoYW5uZWwoY29uc3QgTWVzc2FnZVBvcnRJZAogCiB2
b2lkIE1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5OjptZXNzYWdlUG9ydENoYW5uZWxDcmVhdGVk
KE1lc3NhZ2VQb3J0Q2hhbm5lbCYgY2hhbm5lbCkKIHsKLSAgICBMb2NrZXI8TG9jaz4gbG9ja2Vy
KG1fb3BlbkNoYW5uZWxzTG9jayk7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAogICAg
IGF1dG8gcmVzdWx0ID0gbV9vcGVuQ2hhbm5lbHMuZW5zdXJlKGNoYW5uZWwucG9ydDEoKSwgW3Ro
aXMsIGNoYW5uZWwgPSAmY2hhbm5lbF0gewpAQCAtNjEsNyArNjAsNiBAQCB2b2lkIE1lc3NhZ2VQ
b3J0Q2hhbm5lbFJlZ2lzdHJ5OjptZXNzYWdlUG9ydENoYW5uZWxDcmVhdGVkKE1lc3NhZ2VQb3J0
Q2hhbm5lbCYgYwogCiB2b2lkIE1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5OjptZXNzYWdlUG9y
dENoYW5uZWxEZXN0cm95ZWQoTWVzc2FnZVBvcnRDaGFubmVsJiBjaGFubmVsKQogewotICAgIExv
Y2tlcjxMb2NrPiBsb2NrZXIobV9vcGVuQ2hhbm5lbHNMb2NrKTsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogCiAgICAgQVNTRVJUKG1fb3BlbkNoYW5uZWxzLmdldChjaGFubmVsLnBvcnQx
KCkpID09ICZjaGFubmVsKTsKQEAgLTc2LDcgKzc0LDYgQEAgdm9pZCBNZXNzYWdlUG9ydENoYW5u
ZWxSZWdpc3RyeTo6bWVzc2FnZVBvcnRDaGFubmVsRGVzdHJveWVkKE1lc3NhZ2VQb3J0Q2hhbm5l
bCYKIHZvaWQgTWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnk6OmRpZEVudGFuZ2xlTG9jYWxUb1Jl
bW90ZShjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImIGxvY2FsLCBjb25zdCBNZXNzYWdlUG9y
dElkZW50aWZpZXImIHJlbW90ZSwgUHJvY2Vzc0lkZW50aWZpZXIgcHJvY2VzcykKIHsKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9vcGVuQ2hh
bm5lbHNMb2NrKTsKIAogICAgIC8vIFRoZSBjaGFubmVsIG1pZ2h0IGJlIGdvbmUgaWYgdGhlIHJl
bW90ZSBzaWRlIHdhcyBjbG9zZWQuCiAgICAgYXV0byogY2hhbm5lbCA9IG1fb3BlbkNoYW5uZWxz
LmdldChsb2NhbCk7CkBAIC05MSwyMSArODgsMTggQEAgdm9pZCBNZXNzYWdlUG9ydENoYW5uZWxS
ZWdpc3RyeTo6ZGlkRW50YW5nbGVMb2NhbFRvUmVtb3RlKGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnQK
IHZvaWQgTWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnk6OmRpZERpc2VudGFuZ2xlTWVzc2FnZVBv
cnQoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiBwb3J0KQogewogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0gICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX29wZW5DaGFubmVsc0xvY2sp
OwogCiAgICAgLy8gVGhlIGNoYW5uZWwgbWlnaHQgYmUgZ29uZSBpZiB0aGUgcmVtb3RlIHNpZGUg
d2FzIGNsb3NlZC4KICAgICBhdXRvKiBjaGFubmVsID0gbV9vcGVuQ2hhbm5lbHMuZ2V0KHBvcnQp
OwogICAgIGlmICghY2hhbm5lbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbG9ja2VyLnVubG9j
a0Vhcmx5KCk7CiAgICAgY2hhbm5lbC0+ZGlzZW50YW5nbGVQb3J0KHBvcnQpOwogfQogCiB2b2lk
IE1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5OjpkaWRDbG9zZU1lc3NhZ2VQb3J0KGNvbnN0IE1l
c3NhZ2VQb3J0SWRlbnRpZmllciYgcG9ydCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9vcGVuQ2hhbm5lbHNMb2NrKTsKIAogICAgIExP
RyhNZXNzYWdlUG9ydHMsICJSZWdpc3RyeTogTWVzc2FnZVBvcnQgJXMgY2xvc2VkIGluIHJlZ2lz
dHJ5IiwgcG9ydC5sb2dTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIApAQCAtMTE4LDcgKzExMiw2
IEBAIHZvaWQgTWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnk6OmRpZENsb3NlTWVzc2FnZVBvcnQo
Y29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyCiAgICAgICAgIExPRyhNZXNzYWdlUG9ydHMsICJS
ZWdpc3RyeTogKE5vdGUpIFRoZSBjaGFubmVsIGNsb3NlZCBmb3IgcG9ydCAlcyBoYWQgbWVzc2Fn
ZXMgcGVuZGluZyBvciBpbiBmbGlnaHQiLCBwb3J0LmxvZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OwogI2VuZGlmCiAKLSAgICBsb2NrZXIudW5sb2NrRWFybHkoKTsKICAgICBjaGFubmVsLT5jbG9z
ZVBvcnQocG9ydCk7CiAKICAgICAvLyBGSVhNRTogV2hlbiBtYWtpbmcgbWVzc2FnZSBwb3J0cyBi
ZSBtdWx0aS1wcm9jZXNzLCB0aGlzIHNob3VsZCBwcm9iYWJseSBwdXNoIGEgbm90aWZpY2F0aW9u
CkBAIC0xMjgsNyArMTIxLDYgQEAgdm9pZCBNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeTo6ZGlk
Q2xvc2VNZXNzYWdlUG9ydChjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXIKIGJvb2wgTWVzc2Fn
ZVBvcnRDaGFubmVsUmVnaXN0cnk6OmRpZFBvc3RNZXNzYWdlVG9SZW1vdGUoTWVzc2FnZVdpdGhN
ZXNzYWdlUG9ydHMmJiBtZXNzYWdlLCBjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImIHJlbW90
ZVRhcmdldCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIExvY2tlcjxMb2Nr
PiBsb2NrZXIobV9vcGVuQ2hhbm5lbHNMb2NrKTsKIAogICAgIExPRyhNZXNzYWdlUG9ydHMsICJS
ZWdpc3RyeTogUG9zdGluZyBtZXNzYWdlIHRvIE1lc3NhZ2VQb3J0ICVzIGluIHJlZ2lzdHJ5Iiwg
cmVtb3RlVGFyZ2V0LmxvZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCkBAIC0xMzksMTQgKzEz
MSwxMiBAQCBib29sIE1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5OjpkaWRQb3N0TWVzc2FnZVRv
UmVtb3RlKE1lc3NhZ2VXaXRoTWVzc2FnZVBvcnRzJgogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgbG9ja2VyLnVubG9ja0Vhcmx5KCk7CiAgICAgcmV0dXJuIGNoYW5uZWwtPnBv
c3RNZXNzYWdlVG9SZW1vdGUoV1RGTW92ZShtZXNzYWdlKSwgcmVtb3RlVGFyZ2V0KTsKIH0KIAog
dm9pZCBNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeTo6dGFrZUFsbE1lc3NhZ2VzRm9yUG9ydChj
b25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImIHBvcnQsIEZ1bmN0aW9uPHZvaWQoVmVjdG9yPE1l
c3NhZ2VXaXRoTWVzc2FnZVBvcnRzPiYmLCBGdW5jdGlvbjx2b2lkKCk+JiYpPiYmIGNhbGxiYWNr
KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgTG9ja2VyPExvY2s+IGxvY2tl
cihtX29wZW5DaGFubmVsc0xvY2spOwogCiAgICAgTE9HKE1lc3NhZ2VQb3J0cywgIlJlZ2lzdHJ5
OiBUYWtpbmcgYWxsIG1lc3NhZ2VzIGZvciBNZXNzYWdlUG9ydCAlcyIsIHBvcnQubG9nU3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CiAKQEAgLTE1NywzNSArMTQ3LDI3IEBAIHZvaWQgTWVzc2FnZVBv
cnRDaGFubmVsUmVnaXN0cnk6OnRha2VBbGxNZXNzYWdlc0ZvclBvcnQoY29uc3QgTWVzc2FnZVBv
cnRJZGVudGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBsb2NrZXIudW5sb2NrRWFy
bHkoKTsKICAgICBjaGFubmVsLT50YWtlQWxsTWVzc2FnZXNGb3JQb3J0KHBvcnQsIFdURk1vdmUo
Y2FsbGJhY2spKTsKIH0KIAotYm9vbCBNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeTo6aGFzTWVz
c2FnZXNGb3JQb3J0c190ZW1wb3JhcnlTeW5jKGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYg
cG9ydDEsIGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcG9ydDIpCit2b2lkIE1lc3NhZ2VQ
b3J0Q2hhbm5lbFJlZ2lzdHJ5OjpjaGVja1JlbW90ZVBvcnRGb3JBY3Rpdml0eShjb25zdCBNZXNz
YWdlUG9ydElkZW50aWZpZXImIHJlbW90ZVRhcmdldCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChN
ZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlcjo6SGFzQWN0aXZpdHkpPiYmIGNhbGxiYWNrKQogewot
ICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBmdW5jdGlvbiAoYW5kIHRoZSBsb2NrKSB3aXRoIGEg
Zm9sbG93dXAgcGF0Y2ggdG8gZG8gYXN5bmMgZ2FyYmFnZSBjb2xsZWN0aW9uCi0gICAgTG9ja2Vy
PExvY2s+IGxvY2tlcihtX29wZW5DaGFubmVsc0xvY2spOwotCi0gICAgYXV0byogY2hhbm5lbDEg
PSBtX29wZW5DaGFubmVscy5nZXQocG9ydDEpOwotICAgIGlmICghY2hhbm5lbDEpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8qIGNoYW5uZWwyID0gbV9vcGVuQ2hhbm5lbHMuZ2V0
KHBvcnQyKTsKLSAgICBBU1NFUlRfVU5VU0VEKGNoYW5uZWwyLCBjaGFubmVsMik7Ci0gICAgaWYg
KCFjaGFubmVsMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CiAKLSAgICBBU1NFUlQoY2hhbm5lbDEgPT0gY2hhbm5lbDIpOworICAgIC8vIFRoZSBj
aGFubmVsIG1pZ2h0IGJlIGdvbmUgaWYgdGhlIHJlbW90ZSBzaWRlIHdhcyBjbG9zZWQuCisgICAg
YXV0byogY2hhbm5lbCA9IG1fb3BlbkNoYW5uZWxzLmdldChyZW1vdGVUYXJnZXQpOworICAgIGlm
ICghY2hhbm5lbCkgeworICAgICAgICBjYWxsYmFjayhNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRl
cjo6SGFzQWN0aXZpdHk6Ok5vKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIHJldHVy
biBjaGFubmVsMS0+aGFzQW55TWVzc2FnZXNQZW5kaW5nT3JJbkZsaWdodCgpOworICAgIGNoYW5u
ZWwtPmNoZWNrUmVtb3RlUG9ydEZvckFjdGl2aXR5KHJlbW90ZVRhcmdldCwgV1RGTW92ZShjYWxs
YmFjaykpOwogfQogCiBNZXNzYWdlUG9ydENoYW5uZWwqIE1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lz
dHJ5OjpleGlzdGluZ0NoYW5uZWxDb250YWluaW5nUG9ydChjb25zdCBNZXNzYWdlUG9ydElkZW50
aWZpZXImIHBvcnQpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIExvY2tl
cjxMb2NrPiBsb2NrZXIobV9vcGVuQ2hhbm5lbHNMb2NrKTsKLQogICAgIHJldHVybiBtX29wZW5D
aGFubmVscy5nZXQocG9ydCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9t
ZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnkuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9tZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnkuaAppbmRleCA0NWQw
YTU3OGZjMi4uZjEwZWNiNTI3MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tZXNz
YWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnkuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vbWVzc2FnZXBvcnRzL01lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5LmgKQEAgLTI2LDYg
KzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnRDaGFubmVsLmgi
CisjaW5jbHVkZSAiTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXIuaCIKICNpbmNsdWRlICJNZXNz
YWdlUG9ydElkZW50aWZpZXIuaCIKICNpbmNsdWRlICJQcm9jZXNzLmgiCiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KQEAgLTQyLDE4ICs0MywxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRDbG9z
ZU1lc3NhZ2VQb3J0KGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgbG9jYWwpOwogICAgIGJv
b2wgZGlkUG9zdE1lc3NhZ2VUb1JlbW90ZShNZXNzYWdlV2l0aE1lc3NhZ2VQb3J0cyYmLCBjb25z
dCBNZXNzYWdlUG9ydElkZW50aWZpZXImIHJlbW90ZVRhcmdldCk7CiAgICAgdm9pZCB0YWtlQWxs
TWVzc2FnZXNGb3JQb3J0KGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYsIEZ1bmN0aW9uPHZv
aWQoVmVjdG9yPE1lc3NhZ2VXaXRoTWVzc2FnZVBvcnRzPiYmLCBGdW5jdGlvbjx2b2lkKCk+JiYp
PiYmKTsKKyAgICB2b2lkIGNoZWNrUmVtb3RlUG9ydEZvckFjdGl2aXR5KGNvbnN0IE1lc3NhZ2VQ
b3J0SWRlbnRpZmllciYgcmVtb3RlVGFyZ2V0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE1lc3Nh
Z2VQb3J0Q2hhbm5lbFByb3ZpZGVyOjpIYXNBY3Rpdml0eSk+JiYgY2FsbGJhY2spOwogCiAgICAg
TWVzc2FnZVBvcnRDaGFubmVsKiBleGlzdGluZ0NoYW5uZWxDb250YWluaW5nUG9ydChjb25zdCBN
ZXNzYWdlUG9ydElkZW50aWZpZXImKTsKLSAgICBib29sIGhhc01lc3NhZ2VzRm9yUG9ydHNfdGVt
cG9yYXJ5U3luYyhjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImLCBjb25zdCBNZXNzYWdlUG9y
dElkZW50aWZpZXImKTsKIAogICAgIHZvaWQgbWVzc2FnZVBvcnRDaGFubmVsQ3JlYXRlZChNZXNz
YWdlUG9ydENoYW5uZWwmKTsKICAgICB2b2lkIG1lc3NhZ2VQb3J0Q2hhbm5lbERlc3Ryb3llZChN
ZXNzYWdlUG9ydENoYW5uZWwmKTsKIAogcHJpdmF0ZToKLQotICAgIC8vIEZJWE1FOiBUaGUgbmVl
ZCBmb3IgdGhlIG9wZW4gY2hhbm5lbHMgbG9jayBpcyB0ZW1wb3JhcnkuCi0gICAgLy8gSXQgc2hv
dWxkIGJlIHJlbW92ZWQgYW5kIHRoaXMgY2xhc3Mgc2hvdWxkIGJlIG1haW4tdGhyZWFkIG9ubHku
Ci0gICAgTG9jayBtX29wZW5DaGFubmVsc0xvY2s7CiAgICAgSGFzaE1hcDxNZXNzYWdlUG9ydElk
ZW50aWZpZXIsIE1lc3NhZ2VQb3J0Q2hhbm5lbCo+IG1fb3BlbkNoYW5uZWxzOwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331856</attachid>
            <date>2018-01-20 20:28:15 -0800</date>
            <delta_ts>2018-01-20 20:59:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>32331</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwM2NhNTA4YmQzZS4uNDc5NjNiZjhjOTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NSBAQAorMjAxOC0wMS0yMCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+
CisKKyAgICAgICAgTWFrZSBnYXJiYWdlIGNvbGxlY3Rpb24gb2YgTWVzc2FnZVBvcnQgb2JqZWN0
cyBiZSBhc3luY2hyb25vdXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xODE5MTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBObyBuZXcgdGVzdHMgKENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMsIGluY2x1
ZGluZyBHQy1zcGVjaWZpYyBvbmVzKS4KKworICAgICAgICBUaGUgYmFzaWMgcHJlbWlzZSBoZXJl
IGlzIGFzIGZvbGxvd3M6CisgICAgICAgIC0gWW91IGNhbiBHQyBhIE1lc3NhZ2VQb3J0IHRoYXQg
aXMgY2xvc2VkCisgICAgICAgIC0gWW91IGNhbiBHQyBhIE1lc3NhZ2VQb3J0IHRoYXQgaXMgb3Ro
ZXJ3aXNlIGVsaWdpYmxlIGZvciBHQyBhbmQgaGFzIG5vIG9ubWVzc2FnZSBoYW5kbGVyCisgICAg
ICAgIC0gWW91IGNhbiBHQyBhIE1lc3NhZ2VQb3J0IHRoYXQgaXMgb3RoZXJ3aXNlIGVsaWdpYmxl
IGZvciBHQywgZXZlbiBpZiBpdCBoYXMgYSBtZXNzYWdlIGhhbmRsZXIsCisgICAgICAgICAgYXMg
bG9uZyBhcyB0aGVyZSBhcmUgbm8gbWVzc2FnZXMgaW4gZmxpZ2h0IGJldHdlZW4gaXQgYW5kIHRo
ZSByZW1vdGUgcG9ydCwgYW5kIGFzIGxvbmcgYXMgdGhlCisgICAgICAgICAgcmVtb3RlIHBvcnQg
aXMgb3RoZXJ3aXNlIGVsaWdpYmxlIGZvciBHQy4KKyAgICAgICAgICAKKyAgICAgICAgQSBNZXNz
YWdlUG9ydCBpcyBjb25zaWRlcmVkIGVsaWdpYmxlIGZvciBHQyBvbmNlIGhhc1BlbmRpbmdBY3Rp
dml0eSBpcyBhc2tlZCBvbmNlLgorICAgICAgICAKKyAgICAgICAgQSBNZXNzYWdlUG9ydCBiZWNv
bWVzIG5vLWxvbmdlci1lbGlnaWJsZSBmb3IgR0Mgb25jZSBpdCBpcyB1c2VkIGZvciBzZW5kaW5n
IG9yIHJlY2VpdmluZyBhIG1lc3NhZ2UuCisgICAgICAgIAorICAgICAgICBUaGUgY2hhbmdlcyB0
byBNZXNzYWdlUG9ydC5jcHAgaW1wbGVtZW50IHRoZSBhYm92ZSB3aXRoIGEgdGlueSBsaXR0bGUg
Ym9vbC1kcml2ZW4gc3RhdGUgbWFjaGluZS4KKyAgICAgICAgKiBkb20vTWVzc2FnZVBvcnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OnBvc3RNZXNzYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lc3NhZ2VQb3J0OjpkaXNlbnRhbmdsZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZXNzYWdlUG9ydDo6cmVnaXN0ZXJMb2NhbEFjdGl2aXR5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
c3NhZ2VQb3J0OjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6Y2xvc2Up
OgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OmNvbnRleHREZXN0cm95ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OmRpc3BhdGNoTWVzc2FnZXMpOgorICAgICAgICAo
V2ViQ29yZTo6TWVzc2FnZVBvcnQ6Omhhc1BlbmRpbmdBY3Rpdml0eSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6aXNMb2NhbGx5UmVhY2hhYmxlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0OjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lc3NhZ2VQb3J0OjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBkb20v
TWVzc2FnZVBvcnQuaDoKKworICAgICAgICAtIFJlbW92ZSB0aGUgbG9jayBhbmQgYW55IGJhY2tn
cm91bmQtdGhyZWFkIGNvZGUgcGF0aHMKKyAgICAgICAgLSBBZGQgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKXMgdGhyb3VnaG91dAorICAgICAgICAqIGRvbS9tZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRD
aGFubmVsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbDo6TWVzc2Fn
ZVBvcnRDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbDo6aW5j
bHVkZXNQb3J0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbDo6ZW50YW5n
bGVQb3J0V2l0aFByb2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVs
OjpkaXNlbnRhbmdsZVBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVs
OjpjbG9zZVBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsOjpwb3N0
TWVzc2FnZVRvUmVtb3RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbDo6
dGFrZUFsbE1lc3NhZ2VzRm9yUG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENo
YW5uZWw6OmNoZWNrUmVtb3RlUG9ydEZvckFjdGl2aXR5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
c3NhZ2VQb3J0Q2hhbm5lbDo6aGFzQW55TWVzc2FnZXNQZW5kaW5nT3JJbkZsaWdodCBjb25zdCk6
CisgICAgICAgICogZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWwuaDoKKyAgICAg
ICAgCisgICAgICAgIEFkZCBhIGNhbGxiYWNrIGZvciBhIE1lc3NhZ2VQb3J0Q2hhbm5lbCB0byBn
byBhc2sgdGhlIHJlbW90ZSBNZXNzYWdlUG9ydCBvYmplY3QgYWJvdXQgbG9jYWwgYWN0aXZpdHk6
CisgICAgICAgICogZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlci5o
OgorICAgICAgICAqIGRvbS9tZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXJJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVySW1w
bDo6Y2hlY2tSZW1vdGVQb3J0Rm9yQWN0aXZpdHkpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2Fn
ZVBvcnRDaGFubmVsUHJvdmlkZXJJbXBsOjpjaGVja1Byb2Nlc3NMb2NhbFBvcnRGb3JBY3Rpdml0
eSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlckltcGw6Omhh
c01lc3NhZ2VzRm9yUG9ydHNfdGVtcG9yYXJ5U3luYyk6IERlbGV0ZWQuCisgICAgICAgICogZG9t
L21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlckltcGwuaDoKKyAgICAgICAg
CisgICAgICAgIC0gUmVtb3ZlIHRoZSBsb2NrIGFuZCBhbnkgYmFja2dyb3VuZC10aHJlYWQgY29k
ZSBwYXRocworICAgICAgICAtIEFkZCBBU1NFUlQoaXNNYWluVGhyZWFkKCkpcyB0aHJvdWdob3V0
CisgICAgICAgICogZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeTo6bWVzc2Fn
ZVBvcnRDaGFubmVsQ3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5u
ZWxSZWdpc3RyeTo6bWVzc2FnZVBvcnRDaGFubmVsRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5OjpkaWRFbnRhbmdsZUxvY2FsVG9SZW1vdGUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnk6OmRpZERpc2Vu
dGFuZ2xlTWVzc2FnZVBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVs
UmVnaXN0cnk6OmRpZENsb3NlTWVzc2FnZVBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2Fn
ZVBvcnRDaGFubmVsUmVnaXN0cnk6OmRpZFBvc3RNZXNzYWdlVG9SZW1vdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnk6OnRha2VBbGxNZXNzYWdlc0ZvclBv
cnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnk6OmNoZWNr
UmVtb3RlUG9ydEZvckFjdGl2aXR5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hh
bm5lbFJlZ2lzdHJ5OjpleGlzdGluZ0NoYW5uZWxDb250YWluaW5nUG9ydCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeTo6aGFzTWVzc2FnZXNGb3JQb3J0c190
ZW1wb3JhcnlTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20vbWVzc2FnZXBvcnRzL01lc3Nh
Z2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5Lmg6CisKIDIwMTgtMDEtMTggIEJyYWR5IEVpZHNvbiAgPGJl
aWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgaW4tcHJvY2VzcyBNZXNzYWdlUG9ydHMg
YmUgKG1vc3RseSkgYXN5bmNocm9ub3VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
TWVzc2FnZVBvcnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAppbmRl
eCBhOGQxMzkwODk2NS4uN2VjMGRkY2JjNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9NZXNzYWdlUG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNw
cApAQCAtMTI0LDYgKzEyNCw4IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IE1lc3NhZ2VQb3J0Ojpwb3N0
TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSBtCiB7CiAgICAgTE9H
KE1lc3NhZ2VQb3J0cywgIkF0dGVtcHRpbmcgdG8gcG9zdCBtZXNzYWdlIHRvIHBvcnQgJXMgKHRv
IGJlIHJlY2VpdmVkIGJ5IHBvcnQgJXMpIiwgbV9pZGVudGlmaWVyLmxvZ1N0cmluZygpLnV0Zjgo
KS5kYXRhKCksIG1fcmVtb3RlSWRlbnRpZmllci5sb2dTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
IAorICAgIHJlZ2lzdGVyTG9jYWxBY3Rpdml0eSgpOworCiAgICAgVmVjdG9yPFJlZlB0cjxNZXNz
YWdlUG9ydD4+IHBvcnRzOwogICAgIGF1dG8gbWVzc2FnZURhdGEgPSBTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmNyZWF0ZShzdGF0ZSwgbWVzc2FnZVZhbHVlLCBXVEZNb3ZlKHRyYW5zZmVyKSwgcG9y
dHMpOwogICAgIGlmIChtZXNzYWdlRGF0YS5oYXNFeGNlcHRpb24oKSkKQEAgLTE1OCw4ICsxNjAs
MTAgQEAgRXhjZXB0aW9uT3I8dm9pZD4gTWVzc2FnZVBvcnQ6OnBvc3RNZXNzYWdlKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIG0KIHZvaWQgTWVzc2FnZVBvcnQ6OmRpc2VudGFu
Z2xlKCkKIHsKICAgICBBU1NFUlQobV9lbnRhbmdsZWQpOwotCiAgICAgbV9lbnRhbmdsZWQgPSBm
YWxzZTsKKworICAgIHJlZ2lzdGVyTG9jYWxBY3Rpdml0eSgpOworCiAgICAgTWVzc2FnZVBvcnRD
aGFubmVsUHJvdmlkZXI6OnNpbmdsZXRvbigpLm1lc3NhZ2VQb3J0RGlzZW50YW5nbGVkKG1faWRl
bnRpZmllcik7CiAKICAgICAvLyBXZSBjYW4ndCByZWNlaXZlIGFueSBtZXNzYWdlcyBvciBnZW5l
cmF0ZSBhbnkgZXZlbnRzIGFmdGVyIHRoaXMsIHNvIHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUg
bGlzdCBvZiBhY3RpdmUgcG9ydHMuCkBAIC0xNzEsNiArMTc1LDEzIEBAIHZvaWQgTWVzc2FnZVBv
cnQ6OmRpc2VudGFuZ2xlKCkKICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBudWxscHRy
OwogfQogCit2b2lkIE1lc3NhZ2VQb3J0OjpyZWdpc3RlckxvY2FsQWN0aXZpdHkoKQoreworICAg
IC8vIEFueSB0aW1lIGNlcnRhaW4gbG9jYWwgb3BlcmF0aW9ucyBoYXBwZW4sIHdlIGRpcnR5IG91
ciBvd24gc3RhdGUgdG8gZGVsYXkgR0MuCisgICAgbV9oYXNIYWRMb2NhbEFjdGl2aXR5U2luY2VM
YXN0Q2hlY2sgPSB0cnVlOworICAgIG1fbWlnaHRCZUVsaWdpYmxlRm9yR0MgPSBmYWxzZTsKK30K
KwogLy8gSW52b2tlZCB0byBub3RpZnkgdXMgdGhhdCB0aGVyZSBhcmUgbWVzc2FnZXMgYXZhaWxh
YmxlIGZvciB0aGlzIHBvcnQuCiAvLyBUaGlzIGNvZGUgbWF5IGJlIGNhbGxlZCBmcm9tIGFub3Ro
ZXIgdGhyZWFkLCBhbmQgc28gc2hvdWxkIG5vdCBjYWxsIGFueSBub24tdGhyZWFkc2FmZSBBUElz
IChpLmUuIHNob3VsZCBub3QgY2FsbCBpbnRvIHRoZSBlbnRhbmdsZWQgY2hhbm5lbCBvciBhY2Nl
c3MgbXV0YWJsZSB2YXJpYWJsZXMpLgogdm9pZCBNZXNzYWdlUG9ydDo6bWVzc2FnZUF2YWlsYWJs
ZSgpCkBAIC0xODksNiArMjAwLDggQEAgdm9pZCBNZXNzYWdlUG9ydDo6c3RhcnQoKQogICAgIGlm
ICghaXNFbnRhbmdsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgcmVnaXN0ZXJMb2NhbEFj
dGl2aXR5KCk7CisKICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKICAgICBp
ZiAobV9zdGFydGVkKQogICAgICAgICByZXR1cm47CkBAIC0xOTksNiArMjEyLDcgQEAgdm9pZCBN
ZXNzYWdlUG9ydDo6c3RhcnQoKQogCiB2b2lkIE1lc3NhZ2VQb3J0OjpjbG9zZSgpCiB7CisgICAg
bV9taWdodEJlRWxpZ2libGVGb3JHQyA9IHRydWU7CiAgICAgaWYgKG1fY2xvc2VkKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTIxMCw2ICsyMjQsOCBAQCB2b2lkIE1lc3NhZ2VQb3J0OjpjbG9zZSgp
CiB2b2lkIE1lc3NhZ2VQb3J0Ojpjb250ZXh0RGVzdHJveWVkKCkKIHsKICAgICBBU1NFUlQobV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KTsKKworICAgIG1fbWlnaHRCZUVsaWdpYmxlRm9yR0MgPSB0
cnVlOwogICAgIGlmICghbV9jbG9zZWQpCiAgICAgICAgIGNsb3NlKCk7CiAKQEAgLTIzMiw2ICsy
NDgsOSBAQCB2b2lkIE1lc3NhZ2VQb3J0OjpkaXNwYXRjaE1lc3NhZ2VzKCkKICAgICAgICAgICAg
IGlmICghbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KQogICAgICAgICAgICAgICAgIHJldHVybjsK
IAorICAgICAgICAgICAgaWYgKCFtZXNzYWdlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
cmVnaXN0ZXJMb2NhbEFjdGl2aXR5KCk7CisKICAgICAgICAgICAgIEFTU0VSVChtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKIAogICAgICAgICAgICAgYm9vbCBj
b250ZXh0SXNXb3JrZXIgPSBpczxXb3JrZXJHbG9iYWxTY29wZT4oKm1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCk7CkBAIC0yNjYsMTIgKzI4NSw1OSBAQCB2b2lkIE1lc3NhZ2VQb3J0OjpkaXNwYXRj
aE1lc3NhZ2VzKCkKIAogYm9vbCBNZXNzYWdlUG9ydDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29u
c3QKIHsKLSAgICAvLyBUaGUgc3BlYyBzYXlzIHRoYXQgZW50YW5nbGVkIG1lc3NhZ2UgcG9ydHMg
c2hvdWxkIGFsd2F5cyBiZSB0cmVhdGVkIGFzIGlmIHRoZXkgaGF2ZSBhIHN0cm9uZyByZWZlcmVu
Y2UuCi0gICAgLy8gV2UnbGwgYWxzbyBzdGlwdWxhdGUgdGhhdCB0aGUgcXVldWUgbmVlZHMgdG8g
YmUgb3BlbiAoaWYgdGhlIGFwcCBkcm9wcyBpdHMgcmVmZXJlbmNlIHRvIHRoZSBwb3J0IGJlZm9y
ZSBzdGFydCgpLWluZyBpdCwgdGhlbiBpdCdzIG5vdCByZWFsbHkgZW50YW5nbGVkIGFzIGl0J3Mg
dW5yZWFjaGFibGUpLgotICAgIGlmIChtX3N0YXJ0ZWQgJiYgaXNFbnRhbmdsZWQoKSAmJiBNZXNz
YWdlUG9ydENoYW5uZWxQcm92aWRlcjo6c2luZ2xldG9uKCkuaGFzTWVzc2FnZXNGb3JQb3J0c190
ZW1wb3JhcnlTeW5jKG1faWRlbnRpZmllciwgbV9yZW1vdGVJZGVudGlmaWVyKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgbV9taWdodEJlRWxpZ2libGVGb3JHQyA9IHRydWU7CisKKyAgICAv
LyBJZiB0aGUgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCBoYXMgYmVlbiBzaHV0IGRvd24gb24gdGhp
cyBvYmplY3QgY2xvc2UoKSdlZCwgd2UgY2FuIEdDLgorICAgIGlmICghbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0IHx8IG1fY2xvc2VkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJ
ZiB0aGlzIG9iamVjdCBoYXMgYmVlbiBpZGxlIHNpbmNlIHRoZSByZW1vdGUgcG9ydCBkZWNsYXJl
ZCBpdHNlbGYgZWxnaWJpbGUgZm9yIEdDLCB3ZSBjYW4gR0MuCisgICAgaWYgKCFtX2hhc0hhZExv
Y2FsQWN0aXZpdHlTaW5jZUxhc3RDaGVjayAmJiBtX2lzUmVtb3RlRWxpZ2libGVGb3JHQykKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gSWYgdGhpcyBNZXNzYWdlUG9ydCBoYXMgbm8g
bWVzc2FnZSBldmVudCBoYW5kbGVyIHRoZW4gdGhlIGV4aXN0ZW5jZSBvZiByZW1vdGUgYWN0aXZp
dHkgY2Fubm90IGtlZXAgaXQgYWxpdmUuCisgICAgaWYgKCFtX2hhc01lc3NhZ2VFdmVudExpc3Rl
bmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZiB3ZSdyZSBub3QgaW4gdGhl
IG1pZGRsZSBvZiBhc2tpbmcgdGhlIHJlbW90ZSBwb3J0IGFib3V0IGNvbGxlY3RhYmlsaXR5LCBk
byBzbyBub3cuCisgICAgaWYgKCFtX2lzQXNraW5nUmVtb3RlQWJvdXRHQykgeworICAgICAgICBN
ZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlcjo6c2luZ2xldG9uKCkuY2hlY2tSZW1vdGVQb3J0Rm9y
QWN0aXZpdHkobV9yZW1vdGVJZGVudGlmaWVyLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpXShNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlcjo6SGFzQWN0aXZpdHkgaGFzQWN0
aXZpdHkpIG11dGFibGUgeworICAgICAgICAgICAgYXV0byBpbm5lckhhbmRsZXIgPSBbdGhpcywg
b3RoZXJQcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0oTWVzc2FnZVBvcnRD
aGFubmVsUHJvdmlkZXI6Okhhc0FjdGl2aXR5IGhhc0FjdGl2aXR5KSB7CisgICAgICAgICAgICAg
ICAgYm9vbCBoYXNIYWRMb2NhbEFjdGl2aXR5ID0gbV9oYXNIYWRMb2NhbEFjdGl2aXR5U2luY2VM
YXN0Q2hlY2s7CisgICAgICAgICAgICAgICAgbV9oYXNIYWRMb2NhbEFjdGl2aXR5U2luY2VMYXN0
Q2hlY2sgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgIGlmIChoYXNBY3Rpdml0eSA9PSBNZXNz
YWdlUG9ydENoYW5uZWxQcm92aWRlcjo6SGFzQWN0aXZpdHk6Ok5vICYmICFoYXNIYWRMb2NhbEFj
dGl2aXR5KQorICAgICAgICAgICAgICAgICAgICBtX2lzUmVtb3RlRWxpZ2libGVGb3JHQyA9IHRy
dWU7CisKKyAgICAgICAgICAgICAgICBpZiAoaGFzQWN0aXZpdHkgPT0gTWVzc2FnZVBvcnRDaGFu
bmVsUHJvdmlkZXI6Okhhc0FjdGl2aXR5OjpZZXMpCisgICAgICAgICAgICAgICAgICAgIG1faXNS
ZW1vdGVFbGlnaWJsZUZvckdDID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBtX2lzQXNraW5n
UmVtb3RlQWJvdXRHQyA9IGZhbHNlOworICAgICAgICAgICAgfTsKKworCisgICAgICAgICAgICBp
ZiAoIW1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVh
ZCgpKSB7CisgICAgICAgICAgICAgICAgaW5uZXJIYW5kbGVyKGhhc0FjdGl2aXR5KTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAKLSAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKFtpbm5lckhhbmRs
ZXIgPSBXVEZNb3ZlKGlubmVySGFuZGxlciksIGhhc0FjdGl2aXR5XShTY3JpcHRFeGVjdXRpb25D
b250ZXh0JikgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgaW5uZXJIYW5kbGVyKGhhc0FjdGl2
aXR5KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICAgICAgbV9pc0Fza2luZ1Jl
bW90ZUFib3V0R0MgPSB0cnVlOworICAgIH0KKworICAgIC8vIFNpbmNlIHdlIG5lZWQgYW4gYW5z
d2VyIGZyb20gdGhlIHJlbW90ZSBvYmplY3QsIHdlIGhhdmUgdG8gcHJldGVuZCB3ZSBoYXZlIHBl
bmRpbmcgYWN0aXZpdHkgZm9yIG5vdy4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNZXNz
YWdlUG9ydDo6aXNMb2NhbGx5UmVhY2hhYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fbWln
aHRCZUVsaWdpYmxlRm9yR0M7CiB9CiAKIE1lc3NhZ2VQb3J0KiBNZXNzYWdlUG9ydDo6bG9jYWxs
eUVudGFuZ2xlZFBvcnQoKSBjb25zdApAQCAtMzIzLDExICszODksMjYgQEAgVmVjdG9yPFJlZlB0
cjxNZXNzYWdlUG9ydD4+IE1lc3NhZ2VQb3J0OjplbnRhbmdsZVBvcnRzKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGMKIAogYm9vbCBNZXNzYWdlUG9ydDo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUmVmPEV2ZW50TGlzdGVuZXI+JiYgbGlzdGVuZXIsIGNv
bnN0IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChsaXN0ZW5l
ci0+aXNBdHRyaWJ1dGUoKSAmJiBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1lc3NhZ2VFdmVu
dCkKLSAgICAgICAgc3RhcnQoKTsKKyAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5t
ZXNzYWdlRXZlbnQpIHsKKyAgICAgICAgaWYgKGxpc3RlbmVyLT5pc0F0dHJpYnV0ZSgpKQorICAg
ICAgICAgICAgc3RhcnQoKTsKKyAgICAgICAgbV9oYXNNZXNzYWdlRXZlbnRMaXN0ZW5lciA9IHRy
dWU7CisgICAgICAgIHJlZ2lzdGVyTG9jYWxBY3Rpdml0eSgpOworICAgIH0KKwogICAgIHJldHVy
biBFdmVudFRhcmdldFdpdGhJbmxpbmVEYXRhOjphZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwg
V1RGTW92ZShsaXN0ZW5lciksIG9wdGlvbnMpOwogfQogCitib29sIE1lc3NhZ2VQb3J0OjpyZW1v
dmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3Rl
bmVyJiBsaXN0ZW5lciwgY29uc3QgTGlzdGVuZXJPcHRpb25zJiBvcHRpb25zKQoreworICAgIGF1
dG8gcmVzdWx0ID0gRXZlbnRUYXJnZXRXaXRoSW5saW5lRGF0YTo6cmVtb3ZlRXZlbnRMaXN0ZW5l
cihldmVudFR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTsKKworICAgIGlmICghaGFzRXZlbnRMaXN0
ZW5lcnMoZXZlbnROYW1lcygpLm1lc3NhZ2VFdmVudCkpCisgICAgICAgIG1faGFzTWVzc2FnZUV2
ZW50TGlzdGVuZXIgPSBmYWxzZTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIGNvbnN0IGNo
YXIqIE1lc3NhZ2VQb3J0OjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKIHsKICAgICByZXR1
cm4gIk1lc3NhZ2VQb3J0IjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdl
UG9ydC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmgKaW5kZXggMTQ1YTVhOTI5
NWUuLjI0NWJhODJkMjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBv
cnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaApAQCAtODMsNiArODMs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdG9wKCkgZmluYWwgeyBjbG9zZSgpOyB9CiAgICAgYm9v
bCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBmaW5hbDsKIAorICAgIGJvb2wgaXNMb2NhbGx5
UmVhY2hhYmxlKCkgY29uc3Q7CisKICAgICAvLyBFdmVudFRhcmdldFdpdGhJbmxpbmVEYXRhLgog
ICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gTWVzc2FnZVBvcnRFdmVudFRhcmdldEludGVyZmFjZVR5cGU7IH0KICAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0K
QEAgLTkzLDkgKzk1LDEyIEBAIHByaXZhdGU6CiAgICAgZXhwbGljaXQgTWVzc2FnZVBvcnQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgbG9jYWws
IGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcmVtb3RlKTsKIAogICAgIGJvb2wgYWRkRXZl
bnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUmVmPEV2ZW50TGlzdGVu
ZXI+JiYsIGNvbnN0IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zJikgZmluYWw7CisgICAgYm9vbCBy
ZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExp
c3RlbmVyJiwgY29uc3QgTGlzdGVuZXJPcHRpb25zJikgZmluYWw7CiAKICAgICB2b2lkIGRpc2Vu
dGFuZ2xlKCk7CiAKKyAgICB2b2lkIHJlZ2lzdGVyTG9jYWxBY3Rpdml0eSgpOworCiAgICAgLy8g
QSBwb3J0IHN0YXJ0cyBvdXQgaXRzIGxpZmUgZW50YW5nbGVkLCBhbmQgcmVtYWlucyBlbnRhbmds
ZWQgdW50aWwgaXQgaXMgY2xvc2VkIG9yIGlzIGNsb25lZC4KICAgICBib29sIGlzRW50YW5nbGVk
KCkgY29uc3QgeyByZXR1cm4gIW1fY2xvc2VkICYmIG1fZW50YW5nbGVkOyB9CiAKQEAgLTEwMyw2
ICsxMDgsMTMgQEAgcHJpdmF0ZToKICAgICBib29sIG1fY2xvc2VkIHsgZmFsc2UgfTsKICAgICBi
b29sIG1fZW50YW5nbGVkIHsgdHJ1ZSB9OwogCisgICAgLy8gRmxhZ3MgdG8gbWFuYWdlIHF1ZXJ5
aW5nIHRoZSByZW1vdGUgcG9ydCBmb3IgR0MgcHVycG9zZXMKKyAgICBtdXRhYmxlIGJvb2wgbV9t
aWdodEJlRWxpZ2libGVGb3JHQyB7IGZhbHNlIH07CisgICAgbXV0YWJsZSBib29sIG1faGFzSGFk
TG9jYWxBY3Rpdml0eVNpbmNlTGFzdENoZWNrIHsgZmFsc2UgfTsKKyAgICBtdXRhYmxlIGJvb2wg
bV9pc1JlbW90ZUVsaWdpYmxlRm9yR0MgeyBmYWxzZSB9OworICAgIG11dGFibGUgYm9vbCBtX2lz
QXNraW5nUmVtb3RlQWJvdXRHQyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc01lc3NhZ2VFdmVu
dExpc3RlbmVyIHsgZmFsc2UgfTsKKwogICAgIE1lc3NhZ2VQb3J0SWRlbnRpZmllciBtX2lkZW50
aWZpZXI7CiAgICAgTWVzc2FnZVBvcnRJZGVudGlmaWVyIG1fcmVtb3RlSWRlbnRpZmllcjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENo
YW5uZWwuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENo
YW5uZWwuY3BwCmluZGV4IGYwMGJmMGE2YmI0Li42NWQ3YzM0NWY4MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9tZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFubmVsLmNwcApA
QCAtMjgsNiArMjgsOCBAQAogCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lc3Nh
Z2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVy
Lmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC0zOSw2ICs0MSw4IEBAIFJlZjxNZXNzYWdlUG9ydENoYW5uZWw+IE1lc3NhZ2VQb3J0Q2hh
bm5lbDo6Y3JlYXRlKE1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5JiByCiBNZXNzYWdlUG9ydENo
YW5uZWw6Ok1lc3NhZ2VQb3J0Q2hhbm5lbChNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeSYgcmVn
aXN0cnksIGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcG9ydDEsIGNvbnN0IE1lc3NhZ2VQ
b3J0SWRlbnRpZmllciYgcG9ydDIpCiAgICAgOiBtX3JlZ2lzdHJ5KHJlZ2lzdHJ5KQogeworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKICAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQo
KTsKIAogICAgIG1fcG9ydHNbMF0gPSBwb3J0MTsKQEAgLTU4LDE0ICs2MiwxNCBAQCBNZXNzYWdl
UG9ydENoYW5uZWw6On5NZXNzYWdlUG9ydENoYW5uZWwoKQogCiBib29sIE1lc3NhZ2VQb3J0Q2hh
bm5lbDo6aW5jbHVkZXNQb3J0KGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcG9ydCkKIHsK
LSAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fbG9jayk7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKIAogICAgIHJldHVybiBtX3BvcnRzWzBdID09IHBvcnQgfHwgbV9wb3J0c1sxXSA9PSBw
b3J0OwogfQogCiB2b2lkIE1lc3NhZ2VQb3J0Q2hhbm5lbDo6ZW50YW5nbGVQb3J0V2l0aFByb2Nl
c3MoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiBwb3J0LCBQcm9jZXNzSWRlbnRpZmllciBw
cm9jZXNzKQogewotICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9sb2NrKTsKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogCiAgICAgTE9HKE1lc3NhZ2VQb3J0cywgIk1lc3NhZ2VQb3J0Q2hh
bm5lbCAlcyAoJXApIGVudGFuZ2xpbmcgcG9ydCAlcyIsIGxvZ1N0cmluZygpLnV0ZjgoKS5kYXRh
KCksIHRoaXMsIHBvcnQubG9nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKQEAgLTc5LDcgKzgz
LDcgQEAgdm9pZCBNZXNzYWdlUG9ydENoYW5uZWw6OmVudGFuZ2xlUG9ydFdpdGhQcm9jZXNzKGNv
bnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcG8KIAogdm9pZCBNZXNzYWdlUG9ydENoYW5uZWw6
OmRpc2VudGFuZ2xlUG9ydChjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImIHBvcnQpCiB7Ci0g
ICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX2xvY2spOworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CiAKICAgICBMT0coTWVzc2FnZVBvcnRzLCAiTWVzc2FnZVBvcnRDaGFubmVsICVzICglcCkg
ZGlzZW50YW5nbGluZyBwb3J0ICVzIiwgbG9nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdGhpcywg
cG9ydC5sb2dTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIApAQCAtOTIsMTIgKzk2LDExIEBAIHZv
aWQgTWVzc2FnZVBvcnRDaGFubmVsOjpkaXNlbnRhbmdsZVBvcnQoY29uc3QgTWVzc2FnZVBvcnRJ
ZGVudGlmaWVyJiBwb3J0KQogICAgIC8vIFRoaXMgc2V0IG9mIHN0ZXBzIGlzIHRvIGd1YXJhbnRl
ZSB0aGF0IHRoZSBsb2NrIGlzIHVubG9ja2VkIGJlZm9yZSB0aGUKICAgICAvLyBsYXN0IHJlZiB0
byB0aGlzIG9iamVjdCBpcyByZWxlYXNlZC4KICAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBXVEZN
b3ZlKG1fZW50YW5nbGVkVG9Qcm9jZXNzUHJvdGVjdG9yc1tpXSk7Ci0gICAgbG9ja2VyLnVubG9j
a0Vhcmx5KCk7CiB9CiAKIHZvaWQgTWVzc2FnZVBvcnRDaGFubmVsOjpjbG9zZVBvcnQoY29uc3Qg
TWVzc2FnZVBvcnRJZGVudGlmaWVyJiBwb3J0KQogewotICAgIExvY2tlcjxMb2NrPiBsb2NrZXIo
bV9sb2NrKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAgQVNTRVJUKHBvcnQg
PT0gbV9wb3J0c1swXSB8fCBwb3J0ID09IG1fcG9ydHNbMV0pOwogICAgIHNpemVfdCBpID0gcG9y
dCA9PSBtX3BvcnRzWzBdID8gMCA6IDE7CkBAIC0xMTMsMTMgKzExNiwxMSBAQCB2b2lkIE1lc3Nh
Z2VQb3J0Q2hhbm5lbDo6Y2xvc2VQb3J0KGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcG9y
dCkKICAgICBtX3BlbmRpbmdNZXNzYWdlUG9ydFRyYW5zZmVyc1tpXS5jbGVhcigpOwogICAgIG1f
cGVuZGluZ01lc3NhZ2VQcm90ZWN0b3JzW2ldID0gbnVsbHB0cjsKICAgICBtX2VudGFuZ2xlZFRv
UHJvY2Vzc1Byb3RlY3RvcnNbaV0gPSBudWxscHRyOwotCi0gICAgbG9ja2VyLnVubG9ja0Vhcmx5
KCk7CiB9CiAKIGJvb2wgTWVzc2FnZVBvcnRDaGFubmVsOjpwb3N0TWVzc2FnZVRvUmVtb3RlKE1l
c3NhZ2VXaXRoTWVzc2FnZVBvcnRzJiYgbWVzc2FnZSwgY29uc3QgTWVzc2FnZVBvcnRJZGVudGlm
aWVyJiByZW1vdGVUYXJnZXQpCiB7Ci0gICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX2xvY2spOwor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKICAgICBBU1NFUlQocmVtb3RlVGFyZ2V0ID09
IG1fcG9ydHNbMF0gfHwgcmVtb3RlVGFyZ2V0ID09IG1fcG9ydHNbMV0pOwogICAgIHNpemVfdCBp
ID0gcmVtb3RlVGFyZ2V0ID09IG1fcG9ydHNbMF0gPyAwIDogMTsKQEAgLTE1Niw3ICsxNTcsNyBA
QCBib29sIE1lc3NhZ2VQb3J0Q2hhbm5lbDo6cG9zdE1lc3NhZ2VUb1JlbW90ZShNZXNzYWdlV2l0
aE1lc3NhZ2VQb3J0cyYmIG1lc3NhZ2UsCiAKIHZvaWQgTWVzc2FnZVBvcnRDaGFubmVsOjp0YWtl
QWxsTWVzc2FnZXNGb3JQb3J0KGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcG9ydCwgRnVu
Y3Rpb248dm9pZChWZWN0b3I8TWVzc2FnZVdpdGhNZXNzYWdlUG9ydHM+JiYsIEZ1bmN0aW9uPHZv
aWQoKT4mJik+JiYgY2FsbGJhY2spCiB7Ci0gICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX2xvY2sp
OworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKICAgICBMT0coTWVzc2FnZVBvcnRzLCAi
TWVzc2FnZVBvcnRDaGFubmVsICVwIHRha2luZyBhbGwgbWVzc2FnZXMgZm9yIHBvcnQgJXMiLCB0
aGlzLCBwb3J0LmxvZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCkBAIC0xODEsNyArMTgyLDYg
QEAgdm9pZCBNZXNzYWdlUG9ydENoYW5uZWw6OnRha2VBbGxNZXNzYWdlc0ZvclBvcnQoY29uc3Qg
TWVzc2FnZVBvcnRJZGVudGlmaWVyJiBwb3IKICAgICBIYXNoU2V0PFJlZlB0cjxNZXNzYWdlUG9y
dENoYW5uZWw+PiB0cmFuc2ZlcnJlZFBvcnRQcm90ZWN0b3JzOwogICAgIHRyYW5zZmVycmVkUG9y
dFByb3RlY3RvcnMuc3dhcChtX3BlbmRpbmdNZXNzYWdlUG9ydFRyYW5zZmVyc1tpXSk7CiAKLSAg
ICBsb2NrZXIudW5sb2NrRWFybHkoKTsKICAgICBjYWxsYmFjayhXVEZNb3ZlKHJlc3VsdCksIFtz
aXplLCB0aGlzLCBwb3J0LCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShtX3BlbmRpbmdNZXNzYWdl
UHJvdGVjdG9yc1tpXSksIHRyYW5zZmVycmVkUG9ydFByb3RlY3RvcnMgPSBXVEZNb3ZlKHRyYW5z
ZmVycmVkUG9ydFByb3RlY3RvcnMpXSB7CiAgICAgICAgIFVOVVNFRF9QQVJBTShwb3J0KTsKICAg
ICAgICAgLS1tX21lc3NhZ2VCYXRjaGVzSW5GbGlnaHQ7CkBAIC0xOTAsMTAgKzE5MCw1MSBAQCB2
b2lkIE1lc3NhZ2VQb3J0Q2hhbm5lbDo6dGFrZUFsbE1lc3NhZ2VzRm9yUG9ydChjb25zdCBNZXNz
YWdlUG9ydElkZW50aWZpZXImIHBvcgogICAgIH0pOwogfQogCi1ib29sIE1lc3NhZ2VQb3J0Q2hh
bm5lbDo6aGFzQW55TWVzc2FnZXNQZW5kaW5nT3JJbkZsaWdodCgpIGNvbnN0Cit2b2lkIE1lc3Nh
Z2VQb3J0Q2hhbm5lbDo6Y2hlY2tSZW1vdGVQb3J0Rm9yQWN0aXZpdHkoY29uc3QgTWVzc2FnZVBv
cnRJZGVudGlmaWVyJiByZW1vdGVQb3J0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE1lc3NhZ2VQ
b3J0Q2hhbm5lbFByb3ZpZGVyOjpIYXNBY3Rpdml0eSk+JiYgY2FsbGJhY2spCiB7Ci0gICAgTG9j
a2VyPExvY2s+IGxvY2tlcihtX2xvY2spOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgQVNTRVJUKHJlbW90ZVBvcnQgPT0gbV9wb3J0c1swXSB8fCByZW1vdGVQb3J0ID09IG1fcG9y
dHNbMV0pOworCisgICAgLy8gSWYgdGhlIHJlbW90ZSBwb3J0IGlzIGNsb3NlZCB0aGVyZSBpcyBu
byBwZW5kaW5nIGFjdGl2aXR5LgorICAgIHNpemVfdCBpID0gcmVtb3RlUG9ydCA9PSBtX3BvcnRz
WzBdID8gMCA6IDE7CisgICAgaWYgKG1faXNDbG9zZWRbaV0pIHsKKyAgICAgICAgY2FsbGJhY2so
TWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXI6Okhhc0FjdGl2aXR5OjpObyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAKKyAgICAvLyBJZiB0aGVyZSBhcmUgYW55IG1lc3NhZ2VzIGluIGZsaWdo
dCBiZXR3ZWVuIHRoZSBwb3J0cywgdGhlcmUgaXMgcGVuZGluZyBhY3Rpdml0eS4KKyAgICBpZiAo
aGFzQW55TWVzc2FnZXNQZW5kaW5nT3JJbkZsaWdodCgpKSB7CisgICAgICAgIGNhbGxiYWNrKE1l
c3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyOjpIYXNBY3Rpdml0eTo6WWVzKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIElmIHRoZSBwb3J0IGlzIG5vdCBjdXJyZW50bHkgaW4gYSBw
cm9jZXNzIHRoZW4gaXQncyBiZWluZyB0cmFuc2ZlcnJlZCBhcyBwYXJ0IG9mIGEgcG9zdE1lc3Nh
Z2UuCisgICAgLy8gV2UgdHJlYXQgdGhlc2UgcG9ydHMgYXMgaWYgdGhleSBkbyBoYXZlIGFjdGl2
aXR5IHNpbmNlIHRoZXkgd2lsbCBiZSByZXZpdmVkIHdoZW4gdGhlIG1lc3NhZ2UgaXMgZGVsaXZl
cmVkLgorICAgIGlmICghbV9wcm9jZXNzZXNbaV0pIHsKKyAgICAgICAgY2FsbGJhY2soTWVzc2Fn
ZVBvcnRDaGFubmVsUHJvdmlkZXI6Okhhc0FjdGl2aXR5OjpZZXMpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgYXV0byBvdXRlckNhbGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlcjo6SGFzQWN0aXZpdHkpPiB7IFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayld
IChNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlcjo6SGFzQWN0aXZpdHkgaGFzQWN0aXZpdHkpIHsK
KyAgICAgICAgaWYgKGhhc0FjdGl2aXR5ID09IE1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyOjpI
YXNBY3Rpdml0eTo6WWVzKSB7CisgICAgICAgICAgICBjYWxsYmFjayhoYXNBY3Rpdml0eSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB0aGUgcmVtb3Rl
IHBvcnQgc2FpZCBpdCBoYWQgbm8gYWN0aXZpdHksIGNoZWNrIGFnYWluIGZvciBhbnkgbWVzc2Fn
ZXMgdGhhdCBtaWdodCBiZSBpbiBmbGlnaHQuCisgICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSBp
dCBtaWdodCBoYXZlIGFzeW5jaHJvbm91c2x5IHNlbnQgYSBtZXNzYWdlIGp1c3QgYmVmb3JlIGl0
IHdhcyBhc2tlZCBhYm91dCBsb2NhbCBhY3Rpdml0eS4KKyAgICAgICAgaWYgKGhhc0FueU1lc3Nh
Z2VzUGVuZGluZ09ySW5GbGlnaHQoKSkKKyAgICAgICAgICAgIGhhc0FjdGl2aXR5ID0gTWVzc2Fn
ZVBvcnRDaGFubmVsUHJvdmlkZXI6Okhhc0FjdGl2aXR5OjpZZXM7CisKKyAgICAgICAgY2FsbGJh
Y2soaGFzQWN0aXZpdHkpOworICAgIH0gfTsKKworICAgIE1lc3NhZ2VQb3J0Q2hhbm5lbFByb3Zp
ZGVyOjpzaW5nbGV0b24oKS5jaGVja1Byb2Nlc3NMb2NhbFBvcnRGb3JBY3Rpdml0eShyZW1vdGVQ
b3J0LCAqbV9wcm9jZXNzZXNbaV0sIFdURk1vdmUob3V0ZXJDYWxsYmFjaykpOworfQorCitib29s
IE1lc3NhZ2VQb3J0Q2hhbm5lbDo6aGFzQW55TWVzc2FnZXNQZW5kaW5nT3JJbkZsaWdodCgpIGNv
bnN0Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICByZXR1cm4gbV9tZXNzYWdl
QmF0Y2hlc0luRmxpZ2h0IHx8ICFtX3BlbmRpbmdNZXNzYWdlc1swXS5pc0VtcHR5KCkgfHwgIW1f
cGVuZGluZ01lc3NhZ2VzWzFdLmlzRW1wdHkoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWwuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9tZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFubmVsLmgKaW5kZXggMjE0NmJkMDVi
MDkuLjRmMmU5OTllZjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWVzc2FnZXBv
cnRzL01lc3NhZ2VQb3J0Q2hhbm5lbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9tZXNzYWdl
cG9ydHMvTWVzc2FnZVBvcnRDaGFubmVsLmgKQEAgLTI1LDExICsyNSwxMSBAQAogCiAjcHJhZ21h
IG9uY2UKIAorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyLmgiCiAjaW5jbHVk
ZSAiTWVzc2FnZVBvcnRJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVdpdGhNZXNzYWdl
UG9ydHMuaCIKICNpbmNsdWRlICJQcm9jZXNzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
LSNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgog
ICAgIGJvb2wgcG9zdE1lc3NhZ2VUb1JlbW90ZShNZXNzYWdlV2l0aE1lc3NhZ2VQb3J0cyYmLCBj
b25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImIHJlbW90ZVRhcmdldCk7CiAKICAgICB2b2lkIHRh
a2VBbGxNZXNzYWdlc0ZvclBvcnQoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiwgRnVuY3Rp
b248dm9pZChWZWN0b3I8TWVzc2FnZVdpdGhNZXNzYWdlUG9ydHM+JiYsIEZ1bmN0aW9uPHZvaWQo
KT4mJik+JiYpOworICAgIHZvaWQgY2hlY2tSZW1vdGVQb3J0Rm9yQWN0aXZpdHkoY29uc3QgTWVz
c2FnZVBvcnRJZGVudGlmaWVyJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChNZXNzYWdlUG9ydENo
YW5uZWxQcm92aWRlcjo6SGFzQWN0aXZpdHkpPiYmIGNhbGxiYWNrKTsKIAogICAgIGJvb2wgaGFz
QW55TWVzc2FnZXNQZW5kaW5nT3JJbkZsaWdodCgpIGNvbnN0OwogCkBAIC02NSwxMCArNjYsNiBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIE1lc3NhZ2VQb3J0Q2hhbm5lbChNZXNzYWdlUG9ydENo
YW5uZWxSZWdpc3RyeSYsIGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcG9ydDEsIGNvbnN0
IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcG9ydDIpOwogCi0gICAgLy8gRklYTUU6IFRoaXMgbG9j
ayBpcyB0byB0ZW1wb3JhcmlseSBzdXBwb3J0IHN5bmNocm9ub3VzIGJhY2tncm91bmQtdGhyZWFk
IEdDLgotICAgIC8vIEl0IHNob3VsZCBiZSByZW1vdmVkIGFuZCB0aGlzIGNsYXNzIHJlbGVnYXRl
ZCB0byBtYWluIHRocmVhZCBvbmx5LgotICAgIG11dGFibGUgTG9jayBtX2xvY2s7Ci0KICAgICBN
ZXNzYWdlUG9ydElkZW50aWZpZXIgbV9wb3J0c1syXTsKICAgICBib29sIG1faXNDbG9zZWRbMl0g
eyBmYWxzZSwgZmFsc2UgfTsKICAgICBzdGQ6Om9wdGlvbmFsPFByb2Nlc3NJZGVudGlmaWVyPiBt
X3Byb2Nlc3Nlc1syXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tZXNzYWdlcG9y
dHMvTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9tZXNz
YWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXIuaAppbmRleCA5MDQyZTA3YmI3ZC4u
Mzg5ODRkYTIyODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tZXNzYWdlcG9ydHMv
TWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vbWVz
c2FnZXBvcnRzL01lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyLmgKQEAgLTI1LDYgKzI1LDcgQEAK
IAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJQcm9jZXNzLmgiCiAjaW5jbHVkZSA8d3RmL0Z1
bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00MCw2ICs0MSw3IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgfk1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyKCkgeyB9CiAK
KyAgICAvLyBPcGVyYXRpb25zIHRoYXQgV2ViUHJvY2Vzc2VzIHBlcmZvcm0KICAgICB2aXJ0dWFs
IHZvaWQgY3JlYXRlTmV3TWVzc2FnZVBvcnRDaGFubmVsKGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRp
ZmllciYgbG9jYWwsIGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcmVtb3RlKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIGVudGFuZ2xlTG9jYWxQb3J0SW5UaGlzUHJvY2Vzc1RvUmVtb3RlKGNv
bnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgbG9jYWwsIGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRp
ZmllciYgcmVtb3RlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIG1lc3NhZ2VQb3J0RGlzZW50YW5n
bGVkKGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgbG9jYWwpID0gMDsKQEAgLTQ3LDcgKzQ5
LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdGFrZUFsbE1lc3NhZ2VzRm9yUG9ydChj
b25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImLCBGdW5jdGlvbjx2b2lkKFZlY3RvcjxNZXNzYWdl
V2l0aE1lc3NhZ2VQb3J0cz4mJiwgRnVuY3Rpb248dm9pZCgpPiYmKT4mJikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRvUmVtb3RlKE1lc3NhZ2VXaXRoTWVzc2FnZVBvcnRzJiYs
IGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcmVtb3RlVGFyZ2V0KSA9IDA7CiAKLSAgICB2
aXJ0dWFsIGJvb2wgaGFzTWVzc2FnZXNGb3JQb3J0c190ZW1wb3JhcnlTeW5jKGNvbnN0IE1lc3Nh
Z2VQb3J0SWRlbnRpZmllciYsIGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYpID0gMDsKKyAg
ICBlbnVtIGNsYXNzIEhhc0FjdGl2aXR5IHsKKyAgICAgICAgWWVzLAorICAgICAgICBObywKKyAg
ICB9OworICAgIHZpcnR1YWwgdm9pZCBjaGVja1JlbW90ZVBvcnRGb3JBY3Rpdml0eShjb25zdCBN
ZXNzYWdlUG9ydElkZW50aWZpZXImIHJlbW90ZVRhcmdldCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChIYXNBY3Rpdml0eSk+JiYgY2FsbGJhY2spID0gMDsKKworICAgIC8vIE9wZXJhdGlvbnMgdGhh
dCB0aGUgY29vcmRpbmF0aW5nIHByb2Nlc3MgcGVyZm9ybXMgKGUuZy4gdGhlIFVJUHJvY2VzcykK
KyAgICB2aXJ0dWFsIHZvaWQgY2hlY2tQcm9jZXNzTG9jYWxQb3J0Rm9yQWN0aXZpdHkoY29uc3Qg
TWVzc2FnZVBvcnRJZGVudGlmaWVyJiwgUHJvY2Vzc0lkZW50aWZpZXIsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoSGFzQWN0aXZpdHkpPiYmKSA9IDA7CiAKIHByaXZhdGU6CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9tZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlk
ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9tZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRD
aGFubmVsUHJvdmlkZXJJbXBsLmNwcAppbmRleCBlMGExNDYzMzE0Yi4uZmVkYWZjOWMxMjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFu
bmVsUHJvdmlkZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vbWVzc2FnZXBvcnRz
L01lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVySW1wbC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNp
bmNsdWRlICJNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlckltcGwuaCIKIAogI2luY2x1ZGUgIk1l
c3NhZ2VQb3J0LmgiCisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogCkBAIC05Nywx
MCArOTgsMzAgQEAgdm9pZCBNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlckltcGw6OnRha2VBbGxN
ZXNzYWdlc0ZvclBvcnQoY29uc3QgTWVzc2FnZVBvcnRJZGUKICAgICB9KTsKIH0KIAotYm9vbCBN
ZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlckltcGw6Omhhc01lc3NhZ2VzRm9yUG9ydHNfdGVtcG9y
YXJ5U3luYyhjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImIHBvcnQxLCBjb25zdCBNZXNzYWdl
UG9ydElkZW50aWZpZXImIHBvcnQyKQordm9pZCBNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlcklt
cGw6OmNoZWNrUmVtb3RlUG9ydEZvckFjdGl2aXR5KGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmll
ciYgcmVtb3RlVGFyZ2V0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhhc0FjdGl2aXR5KT4mJiBv
dXRlckNhbGxiYWNrKQogewotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBzeW5jIGZ1bmN0aW9u
IGNhbGwgd2hlbiBHQyBsb2dpYyBpcyBtYWRlIGFzeW5jaHJvbm91cy4KLSAgICByZXR1cm4gbV9y
ZWdpc3RyeS5oYXNNZXNzYWdlc0ZvclBvcnRzX3RlbXBvcmFyeVN5bmMocG9ydDEsIHBvcnQyKTsK
KyAgICBhdXRvIGNhbGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIYXNBY3Rpdml0eSk+
IHsgW291dGVyQ2FsbGJhY2sgPSBXVEZNb3ZlKG91dGVyQ2FsbGJhY2spXShIYXNBY3Rpdml0eSBo
YXNBY3Rpdml0eSkgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBv
dXRlckNhbGxiYWNrKGhhc0FjdGl2aXR5KTsKKyAgICB9IH07CisKKyAgICBwZXJmb3JtQWN0aW9u
T25NYWluVGhyZWFkKFtyZWdpc3RyeSA9ICZtX3JlZ2lzdHJ5LCByZW1vdGVUYXJnZXQsIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgICAgIHJlZ2lzdHJ5LT5j
aGVja1JlbW90ZVBvcnRGb3JBY3Rpdml0eShyZW1vdGVUYXJnZXQsIFdURk1vdmUoY2FsbGJhY2sp
KTsKKyAgICB9KTsKIH0KIAordm9pZCBNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlckltcGw6OmNo
ZWNrUHJvY2Vzc0xvY2FsUG9ydEZvckFjdGl2aXR5KGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmll
ciYgaWRlbnRpZmllciwgUHJvY2Vzc0lkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
SGFzQWN0aXZpdHkpPiYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisKKyAgICBhdXRvIHBvcnQgPSBNZXNzYWdlUG9ydDo6ZXhpc3RpbmdNZXNzYWdlUG9ydEZvcklk
ZW50aWZpZXIoaWRlbnRpZmllcik7CisgICAgaWYgKCFwb3J0KSB7CisgICAgICAgIGNhbGxiYWNr
KE1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyOjpIYXNBY3Rpdml0eTo6Tm8pOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgY2FsbGJhY2socG9ydC0+aXNMb2NhbGx5UmVhY2hhYmxlKCkg
PyBIYXNBY3Rpdml0eTo6WWVzIDogSGFzQWN0aXZpdHk6Ok5vKTsKK30KKworCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWVzc2FnZXBvcnRz
L01lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL21l
c3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlckltcGwuaAppbmRleCBkZTcxMjk4
MGFkNi4uYjQ3NzFmNGVmYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tZXNzYWdl
cG9ydHMvTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlckltcGwuaApAQCAt
NDEsOCArNDEsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgbWVzc2FnZVBvcnRDbG9zZWQoY29uc3Qg
TWVzc2FnZVBvcnRJZGVudGlmaWVyJiBsb2NhbCkgZmluYWw7CiAgICAgdm9pZCBwb3N0TWVzc2Fn
ZVRvUmVtb3RlKE1lc3NhZ2VXaXRoTWVzc2FnZVBvcnRzJiYsIGNvbnN0IE1lc3NhZ2VQb3J0SWRl
bnRpZmllciYgcmVtb3RlVGFyZ2V0KSBmaW5hbDsKICAgICB2b2lkIHRha2VBbGxNZXNzYWdlc0Zv
clBvcnQoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiwgRnVuY3Rpb248dm9pZChWZWN0b3I8
TWVzc2FnZVdpdGhNZXNzYWdlUG9ydHM+JiYsIEZ1bmN0aW9uPHZvaWQoKT4mJik+JiYpIGZpbmFs
OworICAgIHZvaWQgY2hlY2tSZW1vdGVQb3J0Rm9yQWN0aXZpdHkoY29uc3QgTWVzc2FnZVBvcnRJ
ZGVudGlmaWVyJiByZW1vdGVUYXJnZXQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSGFzQWN0aXZp
dHkpPiYmIGNhbGxiYWNrKSBmaW5hbDsKIAotICAgIGJvb2wgaGFzTWVzc2FnZXNGb3JQb3J0c190
ZW1wb3JhcnlTeW5jKGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYsIGNvbnN0IE1lc3NhZ2VQ
b3J0SWRlbnRpZmllciYpIGZpbmFsOworICAgIHZvaWQgY2hlY2tQcm9jZXNzTG9jYWxQb3J0Rm9y
QWN0aXZpdHkoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiwgUHJvY2Vzc0lkZW50aWZpZXIs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSGFzQWN0aXZpdHkpPiYmKSBmaW5hbDsKIAogICAgIHZv
aWQgcGVyZm9ybUFjdGlvbk9uTWFpblRocmVhZChGdW5jdGlvbjx2b2lkKCk+JiYpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWVzc2FnZXBvcnRzL01lc3NhZ2VQb3J0Q2hhbm5l
bFJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9tZXNzYWdlcG9ydHMvTWVzc2FnZVBv
cnRDaGFubmVsUmVnaXN0cnkuY3BwCmluZGV4IDZhODExMjMwYTFmLi5iZGJkM2VmNDg5OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5u
ZWxSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNz
YWdlUG9ydENoYW5uZWxSZWdpc3RyeS5jcHAKQEAgLTQ1LDcgKzQ1LDYgQEAgdm9pZCBNZXNzYWdl
UG9ydENoYW5uZWxSZWdpc3RyeTo6ZGlkQ3JlYXRlTWVzc2FnZVBvcnRDaGFubmVsKGNvbnN0IE1l
c3NhZ2VQb3J0SWQKIAogdm9pZCBNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeTo6bWVzc2FnZVBv
cnRDaGFubmVsQ3JlYXRlZChNZXNzYWdlUG9ydENoYW5uZWwmIGNoYW5uZWwpCiB7Ci0gICAgTG9j
a2VyPExvY2s+IGxvY2tlcihtX29wZW5DaGFubmVsc0xvY2spOwogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fb3BlbkNoYW5uZWxzLmVuc3VyZShjaGFu
bmVsLnBvcnQxKCksIFt0aGlzLCBjaGFubmVsID0gJmNoYW5uZWxdIHsKQEAgLTYxLDcgKzYwLDYg
QEAgdm9pZCBNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeTo6bWVzc2FnZVBvcnRDaGFubmVsQ3Jl
YXRlZChNZXNzYWdlUG9ydENoYW5uZWwmIGMKIAogdm9pZCBNZXNzYWdlUG9ydENoYW5uZWxSZWdp
c3RyeTo6bWVzc2FnZVBvcnRDaGFubmVsRGVzdHJveWVkKE1lc3NhZ2VQb3J0Q2hhbm5lbCYgY2hh
bm5lbCkKIHsKLSAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fb3BlbkNoYW5uZWxzTG9jayk7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAogICAgIEFTU0VSVChtX29wZW5DaGFubmVscy5n
ZXQoY2hhbm5lbC5wb3J0MSgpKSA9PSAmY2hhbm5lbCk7CkBAIC03Niw3ICs3NCw2IEBAIHZvaWQg
TWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnk6Om1lc3NhZ2VQb3J0Q2hhbm5lbERlc3Ryb3llZChN
ZXNzYWdlUG9ydENoYW5uZWwmCiB2b2lkIE1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5OjpkaWRF
bnRhbmdsZUxvY2FsVG9SZW1vdGUoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiBsb2NhbCwg
Y29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiByZW1vdGUsIFByb2Nlc3NJZGVudGlmaWVyIHBy
b2Nlc3MpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBMb2NrZXI8TG9jaz4g
bG9ja2VyKG1fb3BlbkNoYW5uZWxzTG9jayk7CiAKICAgICAvLyBUaGUgY2hhbm5lbCBtaWdodCBi
ZSBnb25lIGlmIHRoZSByZW1vdGUgc2lkZSB3YXMgY2xvc2VkLgogICAgIGF1dG8qIGNoYW5uZWwg
PSBtX29wZW5DaGFubmVscy5nZXQobG9jYWwpOwpAQCAtOTEsMjEgKzg4LDE4IEBAIHZvaWQgTWVz
c2FnZVBvcnRDaGFubmVsUmVnaXN0cnk6OmRpZEVudGFuZ2xlTG9jYWxUb1JlbW90ZShjb25zdCBN
ZXNzYWdlUG9ydElkZW50CiB2b2lkIE1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5OjpkaWREaXNl
bnRhbmdsZU1lc3NhZ2VQb3J0KGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcG9ydCkKIHsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9v
cGVuQ2hhbm5lbHNMb2NrKTsKIAogICAgIC8vIFRoZSBjaGFubmVsIG1pZ2h0IGJlIGdvbmUgaWYg
dGhlIHJlbW90ZSBzaWRlIHdhcyBjbG9zZWQuCiAgICAgYXV0byogY2hhbm5lbCA9IG1fb3BlbkNo
YW5uZWxzLmdldChwb3J0KTsKICAgICBpZiAoIWNoYW5uZWwpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGxvY2tlci51bmxvY2tFYXJseSgpOwogICAgIGNoYW5uZWwtPmRpc2VudGFuZ2xlUG9ydChw
b3J0KTsKIH0KIAogdm9pZCBNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeTo6ZGlkQ2xvc2VNZXNz
YWdlUG9ydChjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImIHBvcnQpCiB7CiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLSAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fb3BlbkNoYW5uZWxz
TG9jayk7CiAKICAgICBMT0coTWVzc2FnZVBvcnRzLCAiUmVnaXN0cnk6IE1lc3NhZ2VQb3J0ICVz
IGNsb3NlZCBpbiByZWdpc3RyeSIsIHBvcnQubG9nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAK
QEAgLTExOCw3ICsxMTIsNiBAQCB2b2lkIE1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5OjpkaWRD
bG9zZU1lc3NhZ2VQb3J0KGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllcgogICAgICAgICBMT0co
TWVzc2FnZVBvcnRzLCAiUmVnaXN0cnk6IChOb3RlKSBUaGUgY2hhbm5lbCBjbG9zZWQgZm9yIHBv
cnQgJXMgaGFkIG1lc3NhZ2VzIHBlbmRpbmcgb3IgaW4gZmxpZ2h0IiwgcG9ydC5sb2dTdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKICNlbmRpZgogCi0gICAgbG9ja2VyLnVubG9ja0Vhcmx5KCk7CiAg
ICAgY2hhbm5lbC0+Y2xvc2VQb3J0KHBvcnQpOwogCiAgICAgLy8gRklYTUU6IFdoZW4gbWFraW5n
IG1lc3NhZ2UgcG9ydHMgYmUgbXVsdGktcHJvY2VzcywgdGhpcyBzaG91bGQgcHJvYmFibHkgcHVz
aCBhIG5vdGlmaWNhdGlvbgpAQCAtMTI4LDcgKzEyMSw2IEBAIHZvaWQgTWVzc2FnZVBvcnRDaGFu
bmVsUmVnaXN0cnk6OmRpZENsb3NlTWVzc2FnZVBvcnQoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlm
aWVyCiBib29sIE1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5OjpkaWRQb3N0TWVzc2FnZVRvUmVt
b3RlKE1lc3NhZ2VXaXRoTWVzc2FnZVBvcnRzJiYgbWVzc2FnZSwgY29uc3QgTWVzc2FnZVBvcnRJ
ZGVudGlmaWVyJiByZW1vdGVUYXJnZXQpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
LSAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fb3BlbkNoYW5uZWxzTG9jayk7CiAKICAgICBMT0co
TWVzc2FnZVBvcnRzLCAiUmVnaXN0cnk6IFBvc3RpbmcgbWVzc2FnZSB0byBNZXNzYWdlUG9ydCAl
cyBpbiByZWdpc3RyeSIsIHJlbW90ZVRhcmdldC5sb2dTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
IApAQCAtMTM5LDE0ICsxMzEsMTIgQEAgYm9vbCBNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeTo6
ZGlkUG9zdE1lc3NhZ2VUb1JlbW90ZShNZXNzYWdlV2l0aE1lc3NhZ2VQb3J0cyYKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGxvY2tlci51bmxvY2tFYXJseSgpOwogICAgIHJl
dHVybiBjaGFubmVsLT5wb3N0TWVzc2FnZVRvUmVtb3RlKFdURk1vdmUobWVzc2FnZSksIHJlbW90
ZVRhcmdldCk7CiB9CiAKIHZvaWQgTWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnk6OnRha2VBbGxN
ZXNzYWdlc0ZvclBvcnQoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiBwb3J0LCBGdW5jdGlv
bjx2b2lkKFZlY3RvcjxNZXNzYWdlV2l0aE1lc3NhZ2VQb3J0cz4mJiwgRnVuY3Rpb248dm9pZCgp
PiYmKT4mJiBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIExv
Y2tlcjxMb2NrPiBsb2NrZXIobV9vcGVuQ2hhbm5lbHNMb2NrKTsKIAogICAgIExPRyhNZXNzYWdl
UG9ydHMsICJSZWdpc3RyeTogVGFraW5nIGFsbCBtZXNzYWdlcyBmb3IgTWVzc2FnZVBvcnQgJXMi
LCBwb3J0LmxvZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCkBAIC0xNTcsMzUgKzE0NywyNyBA
QCB2b2lkIE1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5Ojp0YWtlQWxsTWVzc2FnZXNGb3JQb3J0
KGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
bG9ja2VyLnVubG9ja0Vhcmx5KCk7CiAgICAgY2hhbm5lbC0+dGFrZUFsbE1lc3NhZ2VzRm9yUG9y
dChwb3J0LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKLWJvb2wgTWVzc2FnZVBvcnRDaGFubmVs
UmVnaXN0cnk6Omhhc01lc3NhZ2VzRm9yUG9ydHNfdGVtcG9yYXJ5U3luYyhjb25zdCBNZXNzYWdl
UG9ydElkZW50aWZpZXImIHBvcnQxLCBjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImIHBvcnQy
KQordm9pZCBNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeTo6Y2hlY2tSZW1vdGVQb3J0Rm9yQWN0
aXZpdHkoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiByZW1vdGVUYXJnZXQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXI6Okhhc0FjdGl2aXR5KT4m
JiBjYWxsYmFjaykKIHsKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgZnVuY3Rpb24gKGFuZCB0
aGUgbG9jaykgd2l0aCBhIGZvbGxvd3VwIHBhdGNoIHRvIGRvIGFzeW5jIGdhcmJhZ2UgY29sbGVj
dGlvbgotICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9vcGVuQ2hhbm5lbHNMb2NrKTsKLQotICAg
IGF1dG8qIGNoYW5uZWwxID0gbV9vcGVuQ2hhbm5lbHMuZ2V0KHBvcnQxKTsKLSAgICBpZiAoIWNo
YW5uZWwxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvKiBjaGFubmVsMiA9IG1f
b3BlbkNoYW5uZWxzLmdldChwb3J0Mik7Ci0gICAgQVNTRVJUX1VOVVNFRChjaGFubmVsMiwgY2hh
bm5lbDIpOwotICAgIGlmICghY2hhbm5lbDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgQVNTRVJUKGNoYW5uZWwxID09IGNoYW5uZWwy
KTsKKyAgICAvLyBUaGUgY2hhbm5lbCBtaWdodCBiZSBnb25lIGlmIHRoZSByZW1vdGUgc2lkZSB3
YXMgY2xvc2VkLgorICAgIGF1dG8qIGNoYW5uZWwgPSBtX29wZW5DaGFubmVscy5nZXQocmVtb3Rl
VGFyZ2V0KTsKKyAgICBpZiAoIWNoYW5uZWwpIHsKKyAgICAgICAgY2FsbGJhY2soTWVzc2FnZVBv
cnRDaGFubmVsUHJvdmlkZXI6Okhhc0FjdGl2aXR5OjpObyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKLSAgICByZXR1cm4gY2hhbm5lbDEtPmhhc0FueU1lc3NhZ2VzUGVuZGluZ09ySW5GbGln
aHQoKTsKKyAgICBjaGFubmVsLT5jaGVja1JlbW90ZVBvcnRGb3JBY3Rpdml0eShyZW1vdGVUYXJn
ZXQsIFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAogTWVzc2FnZVBvcnRDaGFubmVsKiBNZXNzYWdl
UG9ydENoYW5uZWxSZWdpc3RyeTo6ZXhpc3RpbmdDaGFubmVsQ29udGFpbmluZ1BvcnQoY29uc3Qg
TWVzc2FnZVBvcnRJZGVudGlmaWVyJiBwb3J0KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CiAKLSAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fb3BlbkNoYW5uZWxzTG9jayk7Ci0KICAg
ICByZXR1cm4gbV9vcGVuQ2hhbm5lbHMuZ2V0KHBvcnQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vbWVzc2FnZXBvcnRzL01lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vbWVzc2FnZXBvcnRzL01lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lz
dHJ5LmgKaW5kZXggNDVkMGE1NzhmYzIuLmYxMGVjYjUyNzA1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vbWVzc2FnZXBvcnRzL01lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxSZWdp
c3RyeS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIk1lc3Nh
Z2VQb3J0Q2hhbm5lbC5oIgorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyLmgi
CiAjaW5jbHVkZSAiTWVzc2FnZVBvcnRJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiUHJvY2Vzcy5o
IgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC00MiwxOCArNDMsMTQgQEAgcHVibGljOgog
ICAgIHZvaWQgZGlkQ2xvc2VNZXNzYWdlUG9ydChjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXIm
IGxvY2FsKTsKICAgICBib29sIGRpZFBvc3RNZXNzYWdlVG9SZW1vdGUoTWVzc2FnZVdpdGhNZXNz
YWdlUG9ydHMmJiwgY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiByZW1vdGVUYXJnZXQpOwog
ICAgIHZvaWQgdGFrZUFsbE1lc3NhZ2VzRm9yUG9ydChjb25zdCBNZXNzYWdlUG9ydElkZW50aWZp
ZXImLCBGdW5jdGlvbjx2b2lkKFZlY3RvcjxNZXNzYWdlV2l0aE1lc3NhZ2VQb3J0cz4mJiwgRnVu
Y3Rpb248dm9pZCgpPiYmKT4mJik7CisgICAgdm9pZCBjaGVja1JlbW90ZVBvcnRGb3JBY3Rpdml0
eShjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImIHJlbW90ZVRhcmdldCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlcjo6SGFzQWN0aXZpdHkpPiYmIGNh
bGxiYWNrKTsKIAogICAgIE1lc3NhZ2VQb3J0Q2hhbm5lbCogZXhpc3RpbmdDaGFubmVsQ29udGFp
bmluZ1BvcnQoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJik7Ci0gICAgYm9vbCBoYXNNZXNz
YWdlc0ZvclBvcnRzX3RlbXBvcmFyeVN5bmMoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiwg
Y29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJik7CiAKICAgICB2b2lkIG1lc3NhZ2VQb3J0Q2hh
bm5lbENyZWF0ZWQoTWVzc2FnZVBvcnRDaGFubmVsJik7CiAgICAgdm9pZCBtZXNzYWdlUG9ydENo
YW5uZWxEZXN0cm95ZWQoTWVzc2FnZVBvcnRDaGFubmVsJik7CiAKIHByaXZhdGU6Ci0KLSAgICAv
LyBGSVhNRTogVGhlIG5lZWQgZm9yIHRoZSBvcGVuIGNoYW5uZWxzIGxvY2sgaXMgdGVtcG9yYXJ5
LgotICAgIC8vIEl0IHNob3VsZCBiZSByZW1vdmVkIGFuZCB0aGlzIGNsYXNzIHNob3VsZCBiZSBt
YWluLXRocmVhZCBvbmx5LgotICAgIExvY2sgbV9vcGVuQ2hhbm5lbHNMb2NrOwogICAgIEhhc2hN
YXA8TWVzc2FnZVBvcnRJZGVudGlmaWVyLCBNZXNzYWdlUG9ydENoYW5uZWwqPiBtX29wZW5DaGFu
bmVsczsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331857</attachid>
            <date>2018-01-20 20:59:42 -0800</date>
            <delta_ts>2018-01-20 23:07:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181910-20180120205941.patch</filename>
            <type>text/plain</type>
            <size>32915</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI3Mjc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWQxZDAwMTM0MmJkZTU0
YTU0ZDRiODE0M2IyYmQ1YTgwZGIzMWRkZi4uYmMyZWMzMmMyYWU2NjljNjcwNGY4N2Q4ZmYxZTgx
YWIyZTkzNDUyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1IEBACisyMDE4LTAxLTIwICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIGdhcmJhZ2UgY29s
bGVjdGlvbiBvZiBNZXNzYWdlUG9ydCBvYmplY3RzIGJlIGFzeW5jaHJvbm91cy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTkxMAorCisgICAgICAg
IFJldmlld2VkIGJ5IEFuZHkgRXN0ZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChDb3ZlcmVk
IGJ5IGV4aXN0aW5nIHRlc3RzLCBpbmNsdWRpbmcgR0Mtc3BlY2lmaWMgb25lcykuCisKKyAgICAg
ICAgVGhlIGJhc2ljIHByZW1pc2UgaGVyZSBpcyBhcyBmb2xsb3dzOgorICAgICAgICAtIFlvdSBj
YW4gKmFsd2F5cyogR0MgYSBNZXNzYWdlUG9ydCB0aGF0IGlzIGNsb3NlZAorICAgICAgICAtIFlv
dSBjYW4gKmFsd2F5cyogR0MgYSBNZXNzYWdlUG9ydCB0aGF0IGhhcyBubyBvbm1lc3NhZ2UgaGFu
ZGxlciwgYXMgaW5jb21pbmcgbWVzc2FnZXMgY2Fubm90IAorICAgICAgICAgIHBvc3NpYmx5IHJl
dml2ZSBpdC4KKyAgICAgICAgLSBZb3UgY2FuIEdDIGEgTWVzc2FnZVBvcnQsIGV2ZW4gaWYgaXQg
aGFzIGEgbWVzc2FnZSBoYW5kbGVyLCBhcyBsb25nIGFzIHRoZXJlIGFyZSBubyBtZXNzYWdlcyAK
KyAgICAgICAgICBpbiBmbGlnaHQgYmV0d2VlbiBpdCBhbmQgdGhlIHJlbW90ZSBwb3J0LCBhbmQg
YXMgbG9uZyBhcyB0aGUgcmVtb3RlIHBvcnQgaXMgIm1heWJlIGVsaWdpYmxlIGZvciBHQy4iCisg
ICAgICAgICAgCisgICAgICAgIEEgTWVzc2FnZVBvcnQgaXMgY29uc2lkZXJlZCAibWF5YmUgZWxp
Z2libGUgZm9yIEdDIiBvbmNlIGhhc1BlbmRpbmdBY3Rpdml0eSBpcyBhc2tlZCBvbmNlLgorICAg
ICAgICAKKyAgICAgICAgQSBNZXNzYWdlUG9ydCBsb3NlcyAibWF5YmUgZWxpZ2libGUgZm9yIEdD
IiBzdGF0dXMgb25jZSBpdCBpcyB1c2VkIGZvciBzZW5kaW5nIG9yIHJlY2VpdmluZyBhIG1lc3Nh
Z2UuCisgICAgICAgIAorICAgICAgICBUaGUgY2hhbmdlcyB0byBNZXNzYWdlUG9ydC5jcHAgaW1w
bGVtZW50IHRoZSBhYm92ZSB3aXRoIGEgdGlueSBsaXR0bGUgYm9vbC1kcml2ZW4gc3RhdGUgbWFj
aGluZS4KKyAgICAgICAgKiBkb20vTWVzc2FnZVBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWVzc2FnZVBvcnQ6OnBvc3RNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0
OjpkaXNlbnRhbmdsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6cmVnaXN0ZXJM
b2NhbEFjdGl2aXR5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0OjpzdGFydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6
TWVzc2FnZVBvcnQ6OmNvbnRleHREZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2Fn
ZVBvcnQ6OmRpc3BhdGNoTWVzc2FnZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6
Omhhc1BlbmRpbmdBY3Rpdml0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9y
dDo6aXNMb2NhbGx5UmVhY2hhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQ
b3J0OjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Ojpy
ZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBkb20vTWVzc2FnZVBvcnQuaDoKKworICAg
ICAgICAtIFJlbW92ZSB0aGUgbG9jayBhbmQgYW55IGJhY2tncm91bmQtdGhyZWFkIGNvZGUgcGF0
aHMKKyAgICAgICAgLSBBZGQgQVNTRVJUKGlzTWFpblRocmVhZCgpKXMgdGhyb3VnaG91dAorICAg
ICAgICAqIGRvbS9tZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFubmVsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbDo6TWVzc2FnZVBvcnRDaGFubmVsKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbDo6aW5jbHVkZXNQb3J0KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbDo6ZW50YW5nbGVQb3J0V2l0aFByb2Nlc3MpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsOjpkaXNlbnRhbmdsZVBvcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsOjpjbG9zZVBvcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsOjpwb3N0TWVzc2FnZVRvUmVtb3RlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbDo6dGFrZUFsbE1lc3NhZ2VzRm9yUG9y
dCk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWw6OmNoZWNrUmVtb3RlUG9y
dEZvckFjdGl2aXR5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbDo6aGFz
QW55TWVzc2FnZXNQZW5kaW5nT3JJbkZsaWdodCBjb25zdCk6CisgICAgICAgICogZG9tL21lc3Nh
Z2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWwuaDoKKyAgICAgICAgCisgICAgICAgIEFkZCBhIGNh
bGxiYWNrIGZvciBhIE1lc3NhZ2VQb3J0Q2hhbm5lbCB0byBnbyBhc2sgdGhlIHJlbW90ZSBNZXNz
YWdlUG9ydCBvYmplY3QgYWJvdXQgbG9jYWwgYWN0aXZpdHk6CisgICAgICAgICogZG9tL21lc3Nh
Z2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlci5oOgorICAgICAgICAqIGRvbS9tZXNz
YWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXJJbXBsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVySW1wbDo6Y2hlY2tSZW1vdGVQb3J0Rm9y
QWN0aXZpdHkpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXJJ
bXBsOjpjaGVja1Byb2Nlc3NMb2NhbFBvcnRGb3JBY3Rpdml0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlckltcGw6Omhhc01lc3NhZ2VzRm9yUG9ydHNfdGVt
cG9yYXJ5U3luYyk6IERlbGV0ZWQuCisgICAgICAgICogZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdl
UG9ydENoYW5uZWxQcm92aWRlckltcGwuaDoKKyAgICAgICAgCisgICAgICAgIC0gUmVtb3ZlIHRo
ZSBsb2NrIGFuZCBhbnkgYmFja2dyb3VuZC10aHJlYWQgY29kZSBwYXRocworICAgICAgICAtIEFk
ZCBBU1NFUlQoaXNNYWluVGhyZWFkKCkpcyB0aHJvdWdob3V0CisgICAgICAgICogZG9tL21lc3Nh
Z2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeTo6bWVzc2FnZVBvcnRDaGFubmVsQ3JlYXRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeTo6bWVzc2FnZVBv
cnRDaGFubmVsRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5l
bFJlZ2lzdHJ5OjpkaWRFbnRhbmdsZUxvY2FsVG9SZW1vdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnk6OmRpZERpc2VudGFuZ2xlTWVzc2FnZVBvcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnk6OmRpZENsb3NlTWVz
c2FnZVBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnk6
OmRpZFBvc3RNZXNzYWdlVG9SZW1vdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRD
aGFubmVsUmVnaXN0cnk6OnRha2VBbGxNZXNzYWdlc0ZvclBvcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnk6OmNoZWNrUmVtb3RlUG9ydEZvckFjdGl2aXR5
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5OjpleGlzdGlu
Z0NoYW5uZWxDb250YWluaW5nUG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENo
YW5uZWxSZWdpc3RyeTo6aGFzTWVzc2FnZXNGb3JQb3J0c190ZW1wb3JhcnlTeW5jKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBkb20vbWVzc2FnZXBvcnRzL01lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5
Lmg6CisKIDIwMTgtMDEtMjAgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAg
ICAgIFtBcHBsZSBQYXldIFN0b3AgZWFnZXJseSBsb2FkaW5nIFBhc3NLaXQuZnJhbWV3b3JrCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAppbmRleCBhOGQxMzkwODk2NWJmNTAwNTQ4MDM4Yjk0
ZmRkNTZlMGQ5YTliZGYxLi43ZWMwZGRjYmM1YWRjNzU0YmU3YjEyMmNmYzQzYmMwNGNkMmJkOGQy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAKQEAgLTEyNCw2ICsxMjQsOCBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBNZXNzYWdlUG9ydDo6cG9zdE1lc3NhZ2UoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgbQogewogICAgIExPRyhNZXNzYWdlUG9ydHMsICJBdHRlbXB0aW5n
IHRvIHBvc3QgbWVzc2FnZSB0byBwb3J0ICVzICh0byBiZSByZWNlaXZlZCBieSBwb3J0ICVzKSIs
IG1faWRlbnRpZmllci5sb2dTdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBtX3JlbW90ZUlkZW50aWZp
ZXIubG9nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKKyAgICByZWdpc3RlckxvY2FsQWN0aXZp
dHkoKTsKKwogICAgIFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiBwb3J0czsKICAgICBhdXRv
IG1lc3NhZ2VEYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIG1lc3Nh
Z2VWYWx1ZSwgV1RGTW92ZSh0cmFuc2ZlciksIHBvcnRzKTsKICAgICBpZiAobWVzc2FnZURhdGEu
aGFzRXhjZXB0aW9uKCkpCkBAIC0xNTgsOCArMTYwLDEwIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IE1l
c3NhZ2VQb3J0Ojpwb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSBtCiB2b2lkIE1lc3NhZ2VQb3J0OjpkaXNlbnRhbmdsZSgpCiB7CiAgICAgQVNTRVJUKG1fZW50
YW5nbGVkKTsKLQogICAgIG1fZW50YW5nbGVkID0gZmFsc2U7CisKKyAgICByZWdpc3RlckxvY2Fs
QWN0aXZpdHkoKTsKKwogICAgIE1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyOjpzaW5nbGV0b24o
KS5tZXNzYWdlUG9ydERpc2VudGFuZ2xlZChtX2lkZW50aWZpZXIpOwogCiAgICAgLy8gV2UgY2Fu
J3QgcmVjZWl2ZSBhbnkgbWVzc2FnZXMgb3IgZ2VuZXJhdGUgYW55IGV2ZW50cyBhZnRlciB0aGlz
LCBzbyByZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIGxpc3Qgb2YgYWN0aXZlIHBvcnRzLgpAQCAt
MTcxLDYgKzE3NSwxMyBAQCB2b2lkIE1lc3NhZ2VQb3J0OjpkaXNlbnRhbmdsZSgpCiAgICAgbV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0ID0gbnVsbHB0cjsKIH0KIAordm9pZCBNZXNzYWdlUG9ydDo6
cmVnaXN0ZXJMb2NhbEFjdGl2aXR5KCkKK3sKKyAgICAvLyBBbnkgdGltZSBjZXJ0YWluIGxvY2Fs
IG9wZXJhdGlvbnMgaGFwcGVuLCB3ZSBkaXJ0eSBvdXIgb3duIHN0YXRlIHRvIGRlbGF5IEdDLgor
ICAgIG1faGFzSGFkTG9jYWxBY3Rpdml0eVNpbmNlTGFzdENoZWNrID0gdHJ1ZTsKKyAgICBtX21p
Z2h0QmVFbGlnaWJsZUZvckdDID0gZmFsc2U7Cit9CisKIC8vIEludm9rZWQgdG8gbm90aWZ5IHVz
IHRoYXQgdGhlcmUgYXJlIG1lc3NhZ2VzIGF2YWlsYWJsZSBmb3IgdGhpcyBwb3J0LgogLy8gVGhp
cyBjb2RlIG1heSBiZSBjYWxsZWQgZnJvbSBhbm90aGVyIHRocmVhZCwgYW5kIHNvIHNob3VsZCBu
b3QgY2FsbCBhbnkgbm9uLXRocmVhZHNhZmUgQVBJcyAoaS5lLiBzaG91bGQgbm90IGNhbGwgaW50
byB0aGUgZW50YW5nbGVkIGNoYW5uZWwgb3IgYWNjZXNzIG11dGFibGUgdmFyaWFibGVzKS4KIHZv
aWQgTWVzc2FnZVBvcnQ6Om1lc3NhZ2VBdmFpbGFibGUoKQpAQCAtMTg5LDYgKzIwMCw4IEBAIHZv
aWQgTWVzc2FnZVBvcnQ6OnN0YXJ0KCkKICAgICBpZiAoIWlzRW50YW5nbGVkKCkpCiAgICAgICAg
IHJldHVybjsKIAorICAgIHJlZ2lzdGVyTG9jYWxBY3Rpdml0eSgpOworCiAgICAgQVNTRVJUKG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgaWYgKG1fc3RhcnRlZCkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTk5LDYgKzIxMiw3IEBAIHZvaWQgTWVzc2FnZVBvcnQ6OnN0YXJ0KCkKIAogdm9p
ZCBNZXNzYWdlUG9ydDo6Y2xvc2UoKQogeworICAgIG1fbWlnaHRCZUVsaWdpYmxlRm9yR0MgPSB0
cnVlOwogICAgIGlmIChtX2Nsb3NlZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMTAsNiArMjI0
LDggQEAgdm9pZCBNZXNzYWdlUG9ydDo6Y2xvc2UoKQogdm9pZCBNZXNzYWdlUG9ydDo6Y29udGV4
dERlc3Ryb3llZCgpCiB7CiAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CisK
KyAgICBtX21pZ2h0QmVFbGlnaWJsZUZvckdDID0gdHJ1ZTsKICAgICBpZiAoIW1fY2xvc2VkKQog
ICAgICAgICBjbG9zZSgpOwogCkBAIC0yMzIsNiArMjQ4LDkgQEAgdm9pZCBNZXNzYWdlUG9ydDo6
ZGlzcGF0Y2hNZXNzYWdlcygpCiAgICAgICAgICAgICBpZiAoIW1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAgICAgIGlmICghbWVzc2Fn
ZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJlZ2lzdGVyTG9jYWxBY3Rpdml0eSgpOwor
CiAgICAgICAgICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRU
aHJlYWQoKSk7CiAKICAgICAgICAgICAgIGJvb2wgY29udGV4dElzV29ya2VyID0gaXM8V29ya2Vy
R2xvYmFsU2NvcGU+KCptX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwpAQCAtMjY2LDEyICsyODUs
NTkgQEAgdm9pZCBNZXNzYWdlUG9ydDo6ZGlzcGF0Y2hNZXNzYWdlcygpCiAKIGJvb2wgTWVzc2Fn
ZVBvcnQ6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0CiB7Ci0gICAgLy8gVGhlIHNwZWMgc2F5
cyB0aGF0IGVudGFuZ2xlZCBtZXNzYWdlIHBvcnRzIHNob3VsZCBhbHdheXMgYmUgdHJlYXRlZCBh
cyBpZiB0aGV5IGhhdmUgYSBzdHJvbmcgcmVmZXJlbmNlLgotICAgIC8vIFdlJ2xsIGFsc28gc3Rp
cHVsYXRlIHRoYXQgdGhlIHF1ZXVlIG5lZWRzIHRvIGJlIG9wZW4gKGlmIHRoZSBhcHAgZHJvcHMg
aXRzIHJlZmVyZW5jZSB0byB0aGUgcG9ydCBiZWZvcmUgc3RhcnQoKS1pbmcgaXQsIHRoZW4gaXQn
cyBub3QgcmVhbGx5IGVudGFuZ2xlZCBhcyBpdCdzIHVucmVhY2hhYmxlKS4KLSAgICBpZiAobV9z
dGFydGVkICYmIGlzRW50YW5nbGVkKCkgJiYgTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXI6OnNp
bmdsZXRvbigpLmhhc01lc3NhZ2VzRm9yUG9ydHNfdGVtcG9yYXJ5U3luYyhtX2lkZW50aWZpZXIs
IG1fcmVtb3RlSWRlbnRpZmllcikpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIG1fbWlnaHRC
ZUVsaWdpYmxlRm9yR0MgPSB0cnVlOworCisgICAgLy8gSWYgdGhlIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQgaGFzIGJlZW4gc2h1dCBkb3duIG9uIHRoaXMgb2JqZWN0IGNsb3NlKCknZWQsIHdlIGNh
biBHQy4KKyAgICBpZiAoIW1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCB8fCBtX2Nsb3NlZCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gSWYgdGhpcyBvYmplY3QgaGFzIGJlZW4gaWRs
ZSBzaW5jZSB0aGUgcmVtb3RlIHBvcnQgZGVjbGFyZWQgaXRzZWxmIGVsZ2liaWxlIGZvciBHQywg
d2UgY2FuIEdDLgorICAgIGlmICghbV9oYXNIYWRMb2NhbEFjdGl2aXR5U2luY2VMYXN0Q2hlY2sg
JiYgbV9pc1JlbW90ZUVsaWdpYmxlRm9yR0MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IC8vIElmIHRoaXMgTWVzc2FnZVBvcnQgaGFzIG5vIG1lc3NhZ2UgZXZlbnQgaGFuZGxlciB0aGVu
IHRoZSBleGlzdGVuY2Ugb2YgcmVtb3RlIGFjdGl2aXR5IGNhbm5vdCBrZWVwIGl0IGFsaXZlLgor
ICAgIGlmICghbV9oYXNNZXNzYWdlRXZlbnRMaXN0ZW5lcikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gSWYgd2UncmUgbm90IGluIHRoZSBtaWRkbGUgb2YgYXNraW5nIHRoZSByZW1v
dGUgcG9ydCBhYm91dCBjb2xsZWN0YWJpbGl0eSwgZG8gc28gbm93LgorICAgIGlmICghbV9pc0Fz
a2luZ1JlbW90ZUFib3V0R0MpIHsKKyAgICAgICAgTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXI6
OnNpbmdsZXRvbigpLmNoZWNrUmVtb3RlUG9ydEZvckFjdGl2aXR5KG1fcmVtb3RlSWRlbnRpZmll
ciwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oTWVzc2FnZVBvcnRDaGFu
bmVsUHJvdmlkZXI6Okhhc0FjdGl2aXR5IGhhc0FjdGl2aXR5KSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgIGF1dG8gaW5uZXJIYW5kbGVyID0gW3RoaXMsIG90aGVyUHJvdGVjdGVkVGhpcyA9IFdURk1v
dmUocHJvdGVjdGVkVGhpcyldKE1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyOjpIYXNBY3Rpdml0
eSBoYXNBY3Rpdml0eSkgeworICAgICAgICAgICAgICAgIGJvb2wgaGFzSGFkTG9jYWxBY3Rpdml0
eSA9IG1faGFzSGFkTG9jYWxBY3Rpdml0eVNpbmNlTGFzdENoZWNrOworICAgICAgICAgICAgICAg
IG1faGFzSGFkTG9jYWxBY3Rpdml0eVNpbmNlTGFzdENoZWNrID0gZmFsc2U7CisKKyAgICAgICAg
ICAgICAgICBpZiAoaGFzQWN0aXZpdHkgPT0gTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXI6Okhh
c0FjdGl2aXR5OjpObyAmJiAhaGFzSGFkTG9jYWxBY3Rpdml0eSkKKyAgICAgICAgICAgICAgICAg
ICAgbV9pc1JlbW90ZUVsaWdpYmxlRm9yR0MgPSB0cnVlOworCisgICAgICAgICAgICAgICAgaWYg
KGhhc0FjdGl2aXR5ID09IE1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyOjpIYXNBY3Rpdml0eTo6
WWVzKQorICAgICAgICAgICAgICAgICAgICBtX2lzUmVtb3RlRWxpZ2libGVGb3JHQyA9IGZhbHNl
OworCisgICAgICAgICAgICAgICAgbV9pc0Fza2luZ1JlbW90ZUFib3V0R0MgPSBmYWxzZTsKKyAg
ICAgICAgICAgIH07CisKKworICAgICAgICAgICAgaWYgKCFtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAobV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSkgeworICAgICAgICAgICAgICAgIGlu
bmVySGFuZGxlcihoYXNBY3Rpdml0eSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQogCi0gICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5wb3N0VGFzayhbaW5uZXJIYW5kbGVyID0gV1RGTW92ZShpbm5lckhhbmRsZXIp
LCBoYXNBY3Rpdml0eV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIG11dGFibGUgeworICAgICAg
ICAgICAgICAgIGlubmVySGFuZGxlcihoYXNBY3Rpdml0eSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfSk7CisgICAgICAgIG1faXNBc2tpbmdSZW1vdGVBYm91dEdDID0gdHJ1ZTsKKyAgICB9
CisKKyAgICAvLyBTaW5jZSB3ZSBuZWVkIGFuIGFuc3dlciBmcm9tIHRoZSByZW1vdGUgb2JqZWN0
LCB3ZSBoYXZlIHRvIHByZXRlbmQgd2UgaGF2ZSBwZW5kaW5nIGFjdGl2aXR5IGZvciBub3cuCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTWVzc2FnZVBvcnQ6OmlzTG9jYWxseVJlYWNoYWJs
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX21pZ2h0QmVFbGlnaWJsZUZvckdDOwogfQogCiBN
ZXNzYWdlUG9ydCogTWVzc2FnZVBvcnQ6OmxvY2FsbHlFbnRhbmdsZWRQb3J0KCkgY29uc3QKQEAg
LTMyMywxMSArMzg5LDI2IEBAIFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiBNZXNzYWdlUG9y
dDo6ZW50YW5nbGVQb3J0cyhTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjCiAKIGJvb2wgTWVzc2Fn
ZVBvcnQ6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFJl
ZjxFdmVudExpc3RlbmVyPiYmIGxpc3RlbmVyLCBjb25zdCBBZGRFdmVudExpc3RlbmVyT3B0aW9u
cyYgb3B0aW9ucykKIHsKLSAgICBpZiAobGlzdGVuZXItPmlzQXR0cmlidXRlKCkgJiYgZXZlbnRU
eXBlID09IGV2ZW50TmFtZXMoKS5tZXNzYWdlRXZlbnQpCi0gICAgICAgIHN0YXJ0KCk7CisgICAg
aWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubWVzc2FnZUV2ZW50KSB7CisgICAgICAgIGlm
IChsaXN0ZW5lci0+aXNBdHRyaWJ1dGUoKSkKKyAgICAgICAgICAgIHN0YXJ0KCk7CisgICAgICAg
IG1faGFzTWVzc2FnZUV2ZW50TGlzdGVuZXIgPSB0cnVlOworICAgICAgICByZWdpc3RlckxvY2Fs
QWN0aXZpdHkoKTsKKyAgICB9CisKICAgICByZXR1cm4gRXZlbnRUYXJnZXRXaXRoSW5saW5lRGF0
YTo6YWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIFdURk1vdmUobGlzdGVuZXIpLCBvcHRpb25z
KTsKIH0KIAorYm9vbCBNZXNzYWdlUG9ydDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGNvbnN0IExpc3Rl
bmVyT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBhdXRvIHJlc3VsdCA9IEV2ZW50VGFyZ2V0V2l0
aElubGluZURhdGE6OnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgb3B0
aW9ucyk7CisKKyAgICBpZiAoIWhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5tZXNzYWdl
RXZlbnQpKQorICAgICAgICBtX2hhc01lc3NhZ2VFdmVudExpc3RlbmVyID0gZmFsc2U7CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCiBjb25zdCBjaGFyKiBNZXNzYWdlUG9ydDo6YWN0aXZlRE9N
T2JqZWN0TmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICJNZXNzYWdlUG9ydCI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9NZXNzYWdlUG9ydC5oCmluZGV4IDE0NWE1YTkyOTVlN2Q0OWQ5MjQ0MDQ2ZmVkOGQ1MmE2NDlh
YzkwY2MuLjI0NWJhODJkMjExNDNkYjM4MDRiODg1NDg4MGQ1NGJjYTE4NDcwMzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9NZXNzYWdlUG9ydC5oCkBAIC04Myw2ICs4Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0
b3AoKSBmaW5hbCB7IGNsb3NlKCk7IH0KICAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNv
bnN0IGZpbmFsOwogCisgICAgYm9vbCBpc0xvY2FsbHlSZWFjaGFibGUoKSBjb25zdDsKKwogICAg
IC8vIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEuCiAgICAgRXZlbnRUYXJnZXRJbnRlcmZhY2Ug
ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBNZXNzYWdlUG9ydEV2
ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsgfQogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBBY3RpdmVET01PYmpl
Y3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQpAQCAtOTMsOSArOTUsMTIgQEAgcHJpdmF0
ZToKICAgICBleHBsaWNpdCBNZXNzYWdlUG9ydChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29u
c3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiBsb2NhbCwgY29uc3QgTWVzc2FnZVBvcnRJZGVudGlm
aWVyJiByZW1vdGUpOwogCiAgICAgYm9vbCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlLCBSZWY8RXZlbnRMaXN0ZW5lcj4mJiwgY29uc3QgQWRkRXZlbnRMaXN0
ZW5lck9wdGlvbnMmKSBmaW5hbDsKKyAgICBib29sIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImLCBjb25zdCBMaXN0ZW5lck9w
dGlvbnMmKSBmaW5hbDsKIAogICAgIHZvaWQgZGlzZW50YW5nbGUoKTsKIAorICAgIHZvaWQgcmVn
aXN0ZXJMb2NhbEFjdGl2aXR5KCk7CisKICAgICAvLyBBIHBvcnQgc3RhcnRzIG91dCBpdHMgbGlm
ZSBlbnRhbmdsZWQsIGFuZCByZW1haW5zIGVudGFuZ2xlZCB1bnRpbCBpdCBpcyBjbG9zZWQgb3Ig
aXMgY2xvbmVkLgogICAgIGJvb2wgaXNFbnRhbmdsZWQoKSBjb25zdCB7IHJldHVybiAhbV9jbG9z
ZWQgJiYgbV9lbnRhbmdsZWQ7IH0KIApAQCAtMTAzLDYgKzEwOCwxMyBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9jbG9zZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9lbnRhbmdsZWQgeyB0cnVlIH07
CiAKKyAgICAvLyBGbGFncyB0byBtYW5hZ2UgcXVlcnlpbmcgdGhlIHJlbW90ZSBwb3J0IGZvciBH
QyBwdXJwb3NlcworICAgIG11dGFibGUgYm9vbCBtX21pZ2h0QmVFbGlnaWJsZUZvckdDIHsgZmFs
c2UgfTsKKyAgICBtdXRhYmxlIGJvb2wgbV9oYXNIYWRMb2NhbEFjdGl2aXR5U2luY2VMYXN0Q2hl
Y2sgeyBmYWxzZSB9OworICAgIG11dGFibGUgYm9vbCBtX2lzUmVtb3RlRWxpZ2libGVGb3JHQyB7
IGZhbHNlIH07CisgICAgbXV0YWJsZSBib29sIG1faXNBc2tpbmdSZW1vdGVBYm91dEdDIHsgZmFs
c2UgfTsKKyAgICBib29sIG1faGFzTWVzc2FnZUV2ZW50TGlzdGVuZXIgeyBmYWxzZSB9OworCiAg
ICAgTWVzc2FnZVBvcnRJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKICAgICBNZXNzYWdlUG9ydElk
ZW50aWZpZXIgbV9yZW1vdGVJZGVudGlmaWVyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vbWVzc2FnZXBvcnRzL01lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vbWVzc2FnZXBvcnRzL01lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAKaW5kZXggODcwMzQwOWVm
NDU3YjczY2M5OGEwZGExMjQ4ZmZkNTBjYjI4ZGQ3My4uNGRjYWMwZjM3ZmYyYjYxOWVhN2E3ZjYy
YWMzNWYyMGE3ZjhiNmE5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL21lc3NhZ2Vw
b3J0cy9NZXNzYWdlUG9ydENoYW5uZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9tZXNz
YWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFubmVsLmNwcApAQCAtMjgsNiArMjgsOCBAQAogCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5Lmgi
CisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOSw2ICs0MSw4IEBAIFJlZjxN
ZXNzYWdlUG9ydENoYW5uZWw+IE1lc3NhZ2VQb3J0Q2hhbm5lbDo6Y3JlYXRlKE1lc3NhZ2VQb3J0
Q2hhbm5lbFJlZ2lzdHJ5JiByCiBNZXNzYWdlUG9ydENoYW5uZWw6Ok1lc3NhZ2VQb3J0Q2hhbm5l
bChNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeSYgcmVnaXN0cnksIGNvbnN0IE1lc3NhZ2VQb3J0
SWRlbnRpZmllciYgcG9ydDEsIGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcG9ydDIpCiAg
ICAgOiBtX3JlZ2lzdHJ5KHJlZ2lzdHJ5KQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisKICAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKIAogICAgIG1fcG9ydHNbMF0gPSBw
b3J0MTsKQEAgLTU4LDE0ICs2MiwxNCBAQCBNZXNzYWdlUG9ydENoYW5uZWw6On5NZXNzYWdlUG9y
dENoYW5uZWwoKQogCiBib29sIE1lc3NhZ2VQb3J0Q2hhbm5lbDo6aW5jbHVkZXNQb3J0KGNvbnN0
IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcG9ydCkKIHsKLSAgICBMb2NrZXI8TG9jaz4gbG9ja2Vy
KG1fbG9jayk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAogICAgIHJldHVybiBtX3Bv
cnRzWzBdID09IHBvcnQgfHwgbV9wb3J0c1sxXSA9PSBwb3J0OwogfQogCiB2b2lkIE1lc3NhZ2VQ
b3J0Q2hhbm5lbDo6ZW50YW5nbGVQb3J0V2l0aFByb2Nlc3MoY29uc3QgTWVzc2FnZVBvcnRJZGVu
dGlmaWVyJiBwb3J0LCBQcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzKQogewotICAgIExvY2tlcjxM
b2NrPiBsb2NrZXIobV9sb2NrKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAg
TE9HKE1lc3NhZ2VQb3J0cywgIk1lc3NhZ2VQb3J0Q2hhbm5lbCAlcyAoJXApIGVudGFuZ2xpbmcg
cG9ydCAlcyIsIGxvZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRoaXMsIHBvcnQubG9nU3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CiAKQEAgLTc5LDcgKzgzLDcgQEAgdm9pZCBNZXNzYWdlUG9ydENo
YW5uZWw6OmVudGFuZ2xlUG9ydFdpdGhQcm9jZXNzKGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmll
ciYgcG8KIAogdm9pZCBNZXNzYWdlUG9ydENoYW5uZWw6OmRpc2VudGFuZ2xlUG9ydChjb25zdCBN
ZXNzYWdlUG9ydElkZW50aWZpZXImIHBvcnQpCiB7Ci0gICAgTG9ja2VyPExvY2s+IGxvY2tlciht
X2xvY2spOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKICAgICBMT0coTWVzc2FnZVBv
cnRzLCAiTWVzc2FnZVBvcnRDaGFubmVsICVzICglcCkgZGlzZW50YW5nbGluZyBwb3J0ICVzIiwg
bG9nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdGhpcywgcG9ydC5sb2dTdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKIApAQCAtOTIsMTIgKzk2LDExIEBAIHZvaWQgTWVzc2FnZVBvcnRDaGFubmVsOjpk
aXNlbnRhbmdsZVBvcnQoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiBwb3J0KQogICAgIC8v
IFRoaXMgc2V0IG9mIHN0ZXBzIGlzIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSBsb2NrIGlzIHVubG9j
a2VkIGJlZm9yZSB0aGUKICAgICAvLyBsYXN0IHJlZiB0byB0aGlzIG9iamVjdCBpcyByZWxlYXNl
ZC4KICAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKG1fZW50YW5nbGVkVG9Qcm9jZXNz
UHJvdGVjdG9yc1tpXSk7Ci0gICAgbG9ja2VyLnVubG9ja0Vhcmx5KCk7CiB9CiAKIHZvaWQgTWVz
c2FnZVBvcnRDaGFubmVsOjpjbG9zZVBvcnQoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiBw
b3J0KQogewotICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9sb2NrKTsKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogCiAgICAgQVNTRVJUKHBvcnQgPT0gbV9wb3J0c1swXSB8fCBwb3J0ID09
IG1fcG9ydHNbMV0pOwogICAgIHNpemVfdCBpID0gcG9ydCA9PSBtX3BvcnRzWzBdID8gMCA6IDE7
CkBAIC0xMTMsMTMgKzExNiwxMSBAQCB2b2lkIE1lc3NhZ2VQb3J0Q2hhbm5lbDo6Y2xvc2VQb3J0
KGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcG9ydCkKICAgICBtX3BlbmRpbmdNZXNzYWdl
UG9ydFRyYW5zZmVyc1tpXS5jbGVhcigpOwogICAgIG1fcGVuZGluZ01lc3NhZ2VQcm90ZWN0b3Jz
W2ldID0gbnVsbHB0cjsKICAgICBtX2VudGFuZ2xlZFRvUHJvY2Vzc1Byb3RlY3RvcnNbaV0gPSBu
dWxscHRyOwotCi0gICAgbG9ja2VyLnVubG9ja0Vhcmx5KCk7CiB9CiAKIGJvb2wgTWVzc2FnZVBv
cnRDaGFubmVsOjpwb3N0TWVzc2FnZVRvUmVtb3RlKE1lc3NhZ2VXaXRoTWVzc2FnZVBvcnRzJiYg
bWVzc2FnZSwgY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiByZW1vdGVUYXJnZXQpCiB7Ci0g
ICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX2xvY2spOworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CiAKICAgICBBU1NFUlQocmVtb3RlVGFyZ2V0ID09IG1fcG9ydHNbMF0gfHwgcmVtb3RlVGFy
Z2V0ID09IG1fcG9ydHNbMV0pOwogICAgIHNpemVfdCBpID0gcmVtb3RlVGFyZ2V0ID09IG1fcG9y
dHNbMF0gPyAwIDogMTsKQEAgLTE1Niw3ICsxNTcsNyBAQCBib29sIE1lc3NhZ2VQb3J0Q2hhbm5l
bDo6cG9zdE1lc3NhZ2VUb1JlbW90ZShNZXNzYWdlV2l0aE1lc3NhZ2VQb3J0cyYmIG1lc3NhZ2Us
CiAKIHZvaWQgTWVzc2FnZVBvcnRDaGFubmVsOjp0YWtlQWxsTWVzc2FnZXNGb3JQb3J0KGNvbnN0
IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcG9ydCwgRnVuY3Rpb248dm9pZChWZWN0b3I8TWVzc2Fn
ZVdpdGhNZXNzYWdlUG9ydHM+JiYsIEZ1bmN0aW9uPHZvaWQoKT4mJik+JiYgY2FsbGJhY2spCiB7
Ci0gICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX2xvY2spOworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CiAKICAgICBMT0coTWVzc2FnZVBvcnRzLCAiTWVzc2FnZVBvcnRDaGFubmVsICVwIHRh
a2luZyBhbGwgbWVzc2FnZXMgZm9yIHBvcnQgJXMiLCB0aGlzLCBwb3J0LmxvZ1N0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOwogCkBAIC0xODEsNyArMTgyLDYgQEAgdm9pZCBNZXNzYWdlUG9ydENoYW5u
ZWw6OnRha2VBbGxNZXNzYWdlc0ZvclBvcnQoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiBw
b3IKICAgICBIYXNoU2V0PFJlZlB0cjxNZXNzYWdlUG9ydENoYW5uZWw+PiB0cmFuc2ZlcnJlZFBv
cnRQcm90ZWN0b3JzOwogICAgIHRyYW5zZmVycmVkUG9ydFByb3RlY3RvcnMuc3dhcChtX3BlbmRp
bmdNZXNzYWdlUG9ydFRyYW5zZmVyc1tpXSk7CiAKLSAgICBsb2NrZXIudW5sb2NrRWFybHkoKTsK
ICAgICBjYWxsYmFjayhXVEZNb3ZlKHJlc3VsdCksIFtzaXplLCB0aGlzLCBwb3J0LCBwcm90ZWN0
ZWRUaGlzID0gV1RGTW92ZShtX3BlbmRpbmdNZXNzYWdlUHJvdGVjdG9yc1tpXSksIHRyYW5zZmVy
cmVkUG9ydFByb3RlY3RvcnMgPSBXVEZNb3ZlKHRyYW5zZmVycmVkUG9ydFByb3RlY3RvcnMpXSB7
CiAgICAgICAgIFVOVVNFRF9QQVJBTShwb3J0KTsKICNpZiBMT0dfRElTQUJMRUQKQEAgLTE5Mywx
MCArMTkzLDUxIEBAIHZvaWQgTWVzc2FnZVBvcnRDaGFubmVsOjp0YWtlQWxsTWVzc2FnZXNGb3JQ
b3J0KGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcG9yCiAgICAgfSk7CiB9CiAKLWJvb2wg
TWVzc2FnZVBvcnRDaGFubmVsOjpoYXNBbnlNZXNzYWdlc1BlbmRpbmdPckluRmxpZ2h0KCkgY29u
c3QKK3ZvaWQgTWVzc2FnZVBvcnRDaGFubmVsOjpjaGVja1JlbW90ZVBvcnRGb3JBY3Rpdml0eShj
b25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImIHJlbW90ZVBvcnQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXI6Okhhc0FjdGl2aXR5KT4mJiBjYWxsYmFj
aykKIHsKLSAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fbG9jayk7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICBBU1NFUlQocmVtb3RlUG9ydCA9PSBtX3BvcnRzWzBdIHx8IHJlbW90
ZVBvcnQgPT0gbV9wb3J0c1sxXSk7CisKKyAgICAvLyBJZiB0aGUgcmVtb3RlIHBvcnQgaXMgY2xv
c2VkIHRoZXJlIGlzIG5vIHBlbmRpbmcgYWN0aXZpdHkuCisgICAgc2l6ZV90IGkgPSByZW1vdGVQ
b3J0ID09IG1fcG9ydHNbMF0gPyAwIDogMTsKKyAgICBpZiAobV9pc0Nsb3NlZFtpXSkgeworICAg
ICAgICBjYWxsYmFjayhNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlcjo6SGFzQWN0aXZpdHk6Ok5v
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAorICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgbWVz
c2FnZXMgaW4gZmxpZ2h0IGJldHdlZW4gdGhlIHBvcnRzLCB0aGVyZSBpcyBwZW5kaW5nIGFjdGl2
aXR5LgorICAgIGlmIChoYXNBbnlNZXNzYWdlc1BlbmRpbmdPckluRmxpZ2h0KCkpIHsKKyAgICAg
ICAgY2FsbGJhY2soTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXI6Okhhc0FjdGl2aXR5OjpZZXMp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSWYgdGhlIHBvcnQgaXMgbm90IGN1
cnJlbnRseSBpbiBhIHByb2Nlc3MgdGhlbiBpdCdzIGJlaW5nIHRyYW5zZmVycmVkIGFzIHBhcnQg
b2YgYSBwb3N0TWVzc2FnZS4KKyAgICAvLyBXZSB0cmVhdCB0aGVzZSBwb3J0cyBhcyBpZiB0aGV5
IGRvIGhhdmUgYWN0aXZpdHkgc2luY2UgdGhleSB3aWxsIGJlIHJldml2ZWQgd2hlbiB0aGUgbWVz
c2FnZSBpcyBkZWxpdmVyZWQuCisgICAgaWYgKCFtX3Byb2Nlc3Nlc1tpXSkgeworICAgICAgICBj
YWxsYmFjayhNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlcjo6SGFzQWN0aXZpdHk6Olllcyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIG91dGVyQ2FsbGJhY2sgPSBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKE1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyOjpIYXNBY3Rpdml0eSk+
IHsgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKV0gKE1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyOjpIYXNBY3Rpdml0eSBo
YXNBY3Rpdml0eSkgeworICAgICAgICBpZiAoaGFzQWN0aXZpdHkgPT0gTWVzc2FnZVBvcnRDaGFu
bmVsUHJvdmlkZXI6Okhhc0FjdGl2aXR5OjpZZXMpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKGhh
c0FjdGl2aXR5KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IElmIHRoZSByZW1vdGUgcG9ydCBzYWlkIGl0IGhhZCBubyBhY3Rpdml0eSwgY2hlY2sgYWdhaW4g
Zm9yIGFueSBtZXNzYWdlcyB0aGF0IG1pZ2h0IGJlIGluIGZsaWdodC4KKyAgICAgICAgLy8gVGhp
cyBpcyBiZWNhdXNlIGl0IG1pZ2h0IGhhdmUgYXN5bmNocm9ub3VzbHkgc2VudCBhIG1lc3NhZ2Ug
anVzdCBiZWZvcmUgaXQgd2FzIGFza2VkIGFib3V0IGxvY2FsIGFjdGl2aXR5LgorICAgICAgICBp
ZiAoaGFzQW55TWVzc2FnZXNQZW5kaW5nT3JJbkZsaWdodCgpKQorICAgICAgICAgICAgaGFzQWN0
aXZpdHkgPSBNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlcjo6SGFzQWN0aXZpdHk6OlllczsKKwor
ICAgICAgICBjYWxsYmFjayhoYXNBY3Rpdml0eSk7CisgICAgfSB9OworCisgICAgTWVzc2FnZVBv
cnRDaGFubmVsUHJvdmlkZXI6OnNpbmdsZXRvbigpLmNoZWNrUHJvY2Vzc0xvY2FsUG9ydEZvckFj
dGl2aXR5KHJlbW90ZVBvcnQsICptX3Byb2Nlc3Nlc1tpXSwgV1RGTW92ZShvdXRlckNhbGxiYWNr
KSk7Cit9CisKK2Jvb2wgTWVzc2FnZVBvcnRDaGFubmVsOjpoYXNBbnlNZXNzYWdlc1BlbmRpbmdP
ckluRmxpZ2h0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIHJl
dHVybiBtX21lc3NhZ2VCYXRjaGVzSW5GbGlnaHQgfHwgIW1fcGVuZGluZ01lc3NhZ2VzWzBdLmlz
RW1wdHkoKSB8fCAhbV9wZW5kaW5nTWVzc2FnZXNbMV0uaXNFbXB0eSgpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWVzc2FnZXBvcnRzL01lc3NhZ2VQb3J0Q2hhbm5lbC5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWwuaApp
bmRleCAyMTQ2YmQwNWIwOWI2ZjA0NjRjZWIxNWE2ZmFkMjBiMjVlOThiNWFjLi40ZjJlOTk5ZWY3
YWM0NWRkMWRhODllOGRiZjA5MGU4Y2E3MWMzNWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vbWVzc2FnZXBvcnRzL01lc3NhZ2VQb3J0Q2hhbm5lbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9tZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFubmVsLmgKQEAgLTI1LDExICsyNSwx
MSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0Q2hhbm5lbFByb3Zp
ZGVyLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnRJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiTWVz
c2FnZVdpdGhNZXNzYWdlUG9ydHMuaCIKICNpbmNsdWRlICJQcm9jZXNzLmgiCiAjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTUzLDYgKzUz
LDcgQEAgcHVibGljOgogICAgIGJvb2wgcG9zdE1lc3NhZ2VUb1JlbW90ZShNZXNzYWdlV2l0aE1l
c3NhZ2VQb3J0cyYmLCBjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImIHJlbW90ZVRhcmdldCk7
CiAKICAgICB2b2lkIHRha2VBbGxNZXNzYWdlc0ZvclBvcnQoY29uc3QgTWVzc2FnZVBvcnRJZGVu
dGlmaWVyJiwgRnVuY3Rpb248dm9pZChWZWN0b3I8TWVzc2FnZVdpdGhNZXNzYWdlUG9ydHM+JiYs
IEZ1bmN0aW9uPHZvaWQoKT4mJik+JiYpOworICAgIHZvaWQgY2hlY2tSZW1vdGVQb3J0Rm9yQWN0
aXZpdHkoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlcjo6SGFzQWN0aXZpdHkpPiYmIGNhbGxiYWNrKTsK
IAogICAgIGJvb2wgaGFzQW55TWVzc2FnZXNQZW5kaW5nT3JJbkZsaWdodCgpIGNvbnN0OwogCkBA
IC02NSwxMCArNjYsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIE1lc3NhZ2VQb3J0Q2hhbm5l
bChNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeSYsIGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmll
ciYgcG9ydDEsIGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcG9ydDIpOwogCi0gICAgLy8g
RklYTUU6IFRoaXMgbG9jayBpcyB0byB0ZW1wb3JhcmlseSBzdXBwb3J0IHN5bmNocm9ub3VzIGJh
Y2tncm91bmQtdGhyZWFkIEdDLgotICAgIC8vIEl0IHNob3VsZCBiZSByZW1vdmVkIGFuZCB0aGlz
IGNsYXNzIHJlbGVnYXRlZCB0byBtYWluIHRocmVhZCBvbmx5LgotICAgIG11dGFibGUgTG9jayBt
X2xvY2s7Ci0KICAgICBNZXNzYWdlUG9ydElkZW50aWZpZXIgbV9wb3J0c1syXTsKICAgICBib29s
IG1faXNDbG9zZWRbMl0geyBmYWxzZSwgZmFsc2UgfTsKICAgICBzdGQ6Om9wdGlvbmFsPFByb2Nl
c3NJZGVudGlmaWVyPiBtX3Byb2Nlc3Nlc1syXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9tZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9tZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXIuaAppbmRl
eCA5MDQyZTA3YmI3ZDBhM2YzODE1ZWQ0MmFiYjVmN2IyY2Q4NjJhMDc0Li4zODk4NGRhMjI4Mjc3
NjkzMDFkMDE2MDNiY2VjYmE1MDM2ZTg4NTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vbWVzc2FnZXBvcnRzL01lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlci5oCkBA
IC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiUHJvY2Vzcy5oIgog
I2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAt
NDAsNiArNDEsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5NZXNzYWdlUG9ydENoYW5uZWxQ
cm92aWRlcigpIHsgfQogCisgICAgLy8gT3BlcmF0aW9ucyB0aGF0IFdlYlByb2Nlc3NlcyBwZXJm
b3JtCiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZU5ld01lc3NhZ2VQb3J0Q2hhbm5lbChjb25zdCBN
ZXNzYWdlUG9ydElkZW50aWZpZXImIGxvY2FsLCBjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXIm
IHJlbW90ZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBlbnRhbmdsZUxvY2FsUG9ydEluVGhpc1By
b2Nlc3NUb1JlbW90ZShjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImIGxvY2FsLCBjb25zdCBN
ZXNzYWdlUG9ydElkZW50aWZpZXImIHJlbW90ZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBtZXNz
YWdlUG9ydERpc2VudGFuZ2xlZChjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImIGxvY2FsKSA9
IDA7CkBAIC00Nyw3ICs0OSwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHRha2VBbGxN
ZXNzYWdlc0ZvclBvcnQoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiwgRnVuY3Rpb248dm9p
ZChWZWN0b3I8TWVzc2FnZVdpdGhNZXNzYWdlUG9ydHM+JiYsIEZ1bmN0aW9uPHZvaWQoKT4mJik+
JiYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1JlbW90ZShNZXNzYWdlV2l0
aE1lc3NhZ2VQb3J0cyYmLCBjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImIHJlbW90ZVRhcmdl
dCkgPSAwOwogCi0gICAgdmlydHVhbCBib29sIGhhc01lc3NhZ2VzRm9yUG9ydHNfdGVtcG9yYXJ5
U3luYyhjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImLCBjb25zdCBNZXNzYWdlUG9ydElkZW50
aWZpZXImKSA9IDA7CisgICAgZW51bSBjbGFzcyBIYXNBY3Rpdml0eSB7CisgICAgICAgIFllcywK
KyAgICAgICAgTm8sCisgICAgfTsKKyAgICB2aXJ0dWFsIHZvaWQgY2hlY2tSZW1vdGVQb3J0Rm9y
QWN0aXZpdHkoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiByZW1vdGVUYXJnZXQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoSGFzQWN0aXZpdHkpPiYmIGNhbGxiYWNrKSA9IDA7CisKKyAgICAv
LyBPcGVyYXRpb25zIHRoYXQgdGhlIGNvb3JkaW5hdGluZyBwcm9jZXNzIHBlcmZvcm1zIChlLmcu
IHRoZSBVSVByb2Nlc3MpCisgICAgdmlydHVhbCB2b2lkIGNoZWNrUHJvY2Vzc0xvY2FsUG9ydEZv
ckFjdGl2aXR5KGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYsIFByb2Nlc3NJZGVudGlmaWVy
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhhc0FjdGl2aXR5KT4mJikgPSAwOwogCiBwcml2YXRl
OgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWVzc2FnZXBvcnRzL01lc3NhZ2VQ
b3J0Q2hhbm5lbFByb3ZpZGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vbWVzc2FnZXBv
cnRzL01lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVySW1wbC5jcHAKaW5kZXggZTBhMTQ2MzMxNGIx
OTNmNGEyMDlmZDk3NTY5NDdjYmQ0M2Y5OGYyNi4uZmVkYWZjOWMxMjI2MmQ5YzUyODcwMTA3NjVm
Y2Y1MTRkNDhlNGMyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL21lc3NhZ2Vwb3J0
cy9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9tZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXJJbXBsLmNwcApAQCAt
MjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIk1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVySW1wbC5o
IgogCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKKyNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhh
bmRsZXIuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9SdW5M
b29wLmg+CiAKQEAgLTk3LDEwICs5OCwzMCBAQCB2b2lkIE1lc3NhZ2VQb3J0Q2hhbm5lbFByb3Zp
ZGVySW1wbDo6dGFrZUFsbE1lc3NhZ2VzRm9yUG9ydChjb25zdCBNZXNzYWdlUG9ydElkZQogICAg
IH0pOwogfQogCi1ib29sIE1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVySW1wbDo6aGFzTWVzc2Fn
ZXNGb3JQb3J0c190ZW1wb3JhcnlTeW5jKGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcG9y
dDEsIGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcG9ydDIpCit2b2lkIE1lc3NhZ2VQb3J0
Q2hhbm5lbFByb3ZpZGVySW1wbDo6Y2hlY2tSZW1vdGVQb3J0Rm9yQWN0aXZpdHkoY29uc3QgTWVz
c2FnZVBvcnRJZGVudGlmaWVyJiByZW1vdGVUYXJnZXQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
SGFzQWN0aXZpdHkpPiYmIG91dGVyQ2FsbGJhY2spCiB7Ci0gICAgLy8gRklYTUU6IFJlbW92ZSB0
aGlzIHN5bmMgZnVuY3Rpb24gY2FsbCB3aGVuIEdDIGxvZ2ljIGlzIG1hZGUgYXN5bmNocm9ub3Vz
LgotICAgIHJldHVybiBtX3JlZ2lzdHJ5Lmhhc01lc3NhZ2VzRm9yUG9ydHNfdGVtcG9yYXJ5U3lu
Yyhwb3J0MSwgcG9ydDIpOworICAgIGF1dG8gY2FsbGJhY2sgPSBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKEhhc0FjdGl2aXR5KT4geyBbb3V0ZXJDYWxsYmFjayA9IFdURk1vdmUob3V0ZXJDYWxsYmFj
ayldKEhhc0FjdGl2aXR5IGhhc0FjdGl2aXR5KSB7CisgICAgICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgICAgIG91dGVyQ2FsbGJhY2soaGFzQWN0aXZpdHkpOworICAgIH0gfTsKKwor
ICAgIHBlcmZvcm1BY3Rpb25Pbk1haW5UaHJlYWQoW3JlZ2lzdHJ5ID0gJm1fcmVnaXN0cnksIHJl
bW90ZVRhcmdldCwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgcmVnaXN0cnktPmNoZWNrUmVtb3RlUG9ydEZvckFjdGl2aXR5KHJlbW90ZVRhcmdldCwg
V1RGTW92ZShjYWxsYmFjaykpOworICAgIH0pOwogfQogCit2b2lkIE1lc3NhZ2VQb3J0Q2hhbm5l
bFByb3ZpZGVySW1wbDo6Y2hlY2tQcm9jZXNzTG9jYWxQb3J0Rm9yQWN0aXZpdHkoY29uc3QgTWVz
c2FnZVBvcnRJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBQcm9jZXNzSWRlbnRpZmllciwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChIYXNBY3Rpdml0eSk+JiYgY2FsbGJhY2spCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKworICAgIGF1dG8gcG9ydCA9IE1lc3NhZ2VQb3J0OjpleGlzdGlu
Z01lc3NhZ2VQb3J0Rm9ySWRlbnRpZmllcihpZGVudGlmaWVyKTsKKyAgICBpZiAoIXBvcnQpIHsK
KyAgICAgICAgY2FsbGJhY2soTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXI6Okhhc0FjdGl2aXR5
OjpObyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYWxsYmFjayhwb3J0LT5pc0xv
Y2FsbHlSZWFjaGFibGUoKSA/IEhhc0FjdGl2aXR5OjpZZXMgOiBIYXNBY3Rpdml0eTo6Tm8pOwor
fQorCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9tZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXJJbXBsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vbWVzc2FnZXBvcnRzL01lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVySW1w
bC5oCmluZGV4IGRlNzEyOTgwYWQ2NjBlNGY0ZWFmY2NiYjMxZmFlYzM2ODRmN2IwYzEuLmI0Nzcx
ZjRlZmJiZjNiYjVmMDRlMWRmNjI2MjZjMzg1NjJiZTE3MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9tZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXJJbXBsLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxQ
cm92aWRlckltcGwuaApAQCAtNDEsOCArNDEsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgbWVzc2Fn
ZVBvcnRDbG9zZWQoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiBsb2NhbCkgZmluYWw7CiAg
ICAgdm9pZCBwb3N0TWVzc2FnZVRvUmVtb3RlKE1lc3NhZ2VXaXRoTWVzc2FnZVBvcnRzJiYsIGNv
bnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcmVtb3RlVGFyZ2V0KSBmaW5hbDsKICAgICB2b2lk
IHRha2VBbGxNZXNzYWdlc0ZvclBvcnQoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiwgRnVu
Y3Rpb248dm9pZChWZWN0b3I8TWVzc2FnZVdpdGhNZXNzYWdlUG9ydHM+JiYsIEZ1bmN0aW9uPHZv
aWQoKT4mJik+JiYpIGZpbmFsOworICAgIHZvaWQgY2hlY2tSZW1vdGVQb3J0Rm9yQWN0aXZpdHko
Y29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiByZW1vdGVUYXJnZXQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoSGFzQWN0aXZpdHkpPiYmIGNhbGxiYWNrKSBmaW5hbDsKIAotICAgIGJvb2wgaGFz
TWVzc2FnZXNGb3JQb3J0c190ZW1wb3JhcnlTeW5jKGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmll
ciYsIGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYpIGZpbmFsOworICAgIHZvaWQgY2hlY2tQ
cm9jZXNzTG9jYWxQb3J0Rm9yQWN0aXZpdHkoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiwg
UHJvY2Vzc0lkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSGFzQWN0aXZpdHkpPiYm
KSBmaW5hbDsKIAogICAgIHZvaWQgcGVyZm9ybUFjdGlvbk9uTWFpblRocmVhZChGdW5jdGlvbjx2
b2lkKCk+JiYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWVzc2FnZXBvcnRz
L01lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9tZXNz
YWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnkuY3BwCmluZGV4IDc1NzI2MTA2NmY3
MjZkYmMyNjAwYjQ3N2U1OWVjMTI4ZWRjNjkwNDMuLmM3N2E4ZmYwMTc5ZGMxMGQxZjQ3ZWYwOTVh
YzYyOTBlYWFlY2U1MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tZXNzYWdlcG9y
dHMvTWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9tZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnkuY3BwCkBAIC00NSw3ICs0
NSw2IEBAIHZvaWQgTWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnk6OmRpZENyZWF0ZU1lc3NhZ2VQ
b3J0Q2hhbm5lbChjb25zdCBNZXNzYWdlUG9ydElkCiAKIHZvaWQgTWVzc2FnZVBvcnRDaGFubmVs
UmVnaXN0cnk6Om1lc3NhZ2VQb3J0Q2hhbm5lbENyZWF0ZWQoTWVzc2FnZVBvcnRDaGFubmVsJiBj
aGFubmVsKQogewotICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9vcGVuQ2hhbm5lbHNMb2NrKTsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAgYXV0byByZXN1bHQgPSBtX29wZW5D
aGFubmVscy5lbnN1cmUoY2hhbm5lbC5wb3J0MSgpLCBbY2hhbm5lbCA9ICZjaGFubmVsXSB7CkBA
IC02MSw3ICs2MCw2IEBAIHZvaWQgTWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnk6Om1lc3NhZ2VQ
b3J0Q2hhbm5lbENyZWF0ZWQoTWVzc2FnZVBvcnRDaGFubmVsJiBjCiAKIHZvaWQgTWVzc2FnZVBv
cnRDaGFubmVsUmVnaXN0cnk6Om1lc3NhZ2VQb3J0Q2hhbm5lbERlc3Ryb3llZChNZXNzYWdlUG9y
dENoYW5uZWwmIGNoYW5uZWwpCiB7Ci0gICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX29wZW5DaGFu
bmVsc0xvY2spOwogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKICAgICBBU1NFUlQobV9v
cGVuQ2hhbm5lbHMuZ2V0KGNoYW5uZWwucG9ydDEoKSkgPT0gJmNoYW5uZWwpOwpAQCAtNzYsNyAr
NzQsNiBAQCB2b2lkIE1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5OjptZXNzYWdlUG9ydENoYW5u
ZWxEZXN0cm95ZWQoTWVzc2FnZVBvcnRDaGFubmVsJgogdm9pZCBNZXNzYWdlUG9ydENoYW5uZWxS
ZWdpc3RyeTo6ZGlkRW50YW5nbGVMb2NhbFRvUmVtb3RlKGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRp
ZmllciYgbG9jYWwsIGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcmVtb3RlLCBQcm9jZXNz
SWRlbnRpZmllciBwcm9jZXNzKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAg
TG9ja2VyPExvY2s+IGxvY2tlcihtX29wZW5DaGFubmVsc0xvY2spOwogCiAgICAgLy8gVGhlIGNo
YW5uZWwgbWlnaHQgYmUgZ29uZSBpZiB0aGUgcmVtb3RlIHNpZGUgd2FzIGNsb3NlZC4KICAgICBh
dXRvKiBjaGFubmVsID0gbV9vcGVuQ2hhbm5lbHMuZ2V0KGxvY2FsKTsKQEAgLTkxLDIxICs4OCwx
OCBAQCB2b2lkIE1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5OjpkaWRFbnRhbmdsZUxvY2FsVG9S
ZW1vdGUoY29uc3QgTWVzc2FnZVBvcnRJZGVudAogdm9pZCBNZXNzYWdlUG9ydENoYW5uZWxSZWdp
c3RyeTo6ZGlkRGlzZW50YW5nbGVNZXNzYWdlUG9ydChjb25zdCBNZXNzYWdlUG9ydElkZW50aWZp
ZXImIHBvcnQpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBMb2NrZXI8TG9j
az4gbG9ja2VyKG1fb3BlbkNoYW5uZWxzTG9jayk7CiAKICAgICAvLyBUaGUgY2hhbm5lbCBtaWdo
dCBiZSBnb25lIGlmIHRoZSByZW1vdGUgc2lkZSB3YXMgY2xvc2VkLgogICAgIGF1dG8qIGNoYW5u
ZWwgPSBtX29wZW5DaGFubmVscy5nZXQocG9ydCk7CiAgICAgaWYgKCFjaGFubmVsKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBsb2NrZXIudW5sb2NrRWFybHkoKTsKICAgICBjaGFubmVsLT5kaXNl
bnRhbmdsZVBvcnQocG9ydCk7CiB9CiAKIHZvaWQgTWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnk6
OmRpZENsb3NlTWVzc2FnZVBvcnQoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiBwb3J0KQog
ewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgTG9ja2VyPExvY2s+IGxvY2tlciht
X29wZW5DaGFubmVsc0xvY2spOwogCiAgICAgTE9HKE1lc3NhZ2VQb3J0cywgIlJlZ2lzdHJ5OiBN
ZXNzYWdlUG9ydCAlcyBjbG9zZWQgaW4gcmVnaXN0cnkiLCBwb3J0LmxvZ1N0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwogCkBAIC0xMTgsNyArMTEyLDYgQEAgdm9pZCBNZXNzYWdlUG9ydENoYW5uZWxS
ZWdpc3RyeTo6ZGlkQ2xvc2VNZXNzYWdlUG9ydChjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXIK
ICAgICAgICAgTE9HKE1lc3NhZ2VQb3J0cywgIlJlZ2lzdHJ5OiAoTm90ZSkgVGhlIGNoYW5uZWwg
Y2xvc2VkIGZvciBwb3J0ICVzIGhhZCBtZXNzYWdlcyBwZW5kaW5nIG9yIGluIGZsaWdodCIsIHBv
cnQubG9nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAjZW5kaWYKIAotICAgIGxvY2tlci51bmxv
Y2tFYXJseSgpOwogICAgIGNoYW5uZWwtPmNsb3NlUG9ydChwb3J0KTsKIAogICAgIC8vIEZJWE1F
OiBXaGVuIG1ha2luZyBtZXNzYWdlIHBvcnRzIGJlIG11bHRpLXByb2Nlc3MsIHRoaXMgc2hvdWxk
IHByb2JhYmx5IHB1c2ggYSBub3RpZmljYXRpb24KQEAgLTEyOCw3ICsxMjEsNiBAQCB2b2lkIE1l
c3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5OjpkaWRDbG9zZU1lc3NhZ2VQb3J0KGNvbnN0IE1lc3Nh
Z2VQb3J0SWRlbnRpZmllcgogYm9vbCBNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeTo6ZGlkUG9z
dE1lc3NhZ2VUb1JlbW90ZShNZXNzYWdlV2l0aE1lc3NhZ2VQb3J0cyYmIG1lc3NhZ2UsIGNvbnN0
IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcmVtb3RlVGFyZ2V0KQogewogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0gICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX29wZW5DaGFubmVsc0xvY2sp
OwogCiAgICAgTE9HKE1lc3NhZ2VQb3J0cywgIlJlZ2lzdHJ5OiBQb3N0aW5nIG1lc3NhZ2UgdG8g
TWVzc2FnZVBvcnQgJXMgaW4gcmVnaXN0cnkiLCByZW1vdGVUYXJnZXQubG9nU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7CiAKQEAgLTEzOSwxNCArMTMxLDEyIEBAIGJvb2wgTWVzc2FnZVBvcnRDaGFu
bmVsUmVnaXN0cnk6OmRpZFBvc3RNZXNzYWdlVG9SZW1vdGUoTWVzc2FnZVdpdGhNZXNzYWdlUG9y
dHMmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBsb2NrZXIudW5sb2NrRWFy
bHkoKTsKICAgICByZXR1cm4gY2hhbm5lbC0+cG9zdE1lc3NhZ2VUb1JlbW90ZShXVEZNb3ZlKG1l
c3NhZ2UpLCByZW1vdGVUYXJnZXQpOwogfQogCiB2b2lkIE1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lz
dHJ5Ojp0YWtlQWxsTWVzc2FnZXNGb3JQb3J0KGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYg
cG9ydCwgRnVuY3Rpb248dm9pZChWZWN0b3I8TWVzc2FnZVdpdGhNZXNzYWdlUG9ydHM+JiYsIEZ1
bmN0aW9uPHZvaWQoKT4mJik+JiYgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLSAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fb3BlbkNoYW5uZWxzTG9jayk7CiAKICAg
ICBMT0coTWVzc2FnZVBvcnRzLCAiUmVnaXN0cnk6IFRha2luZyBhbGwgbWVzc2FnZXMgZm9yIE1l
c3NhZ2VQb3J0ICVzIiwgcG9ydC5sb2dTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIApAQCAtMTU3
LDM1ICsxNDcsMjcgQEAgdm9pZCBNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeTo6dGFrZUFsbE1l
c3NhZ2VzRm9yUG9ydChjb25zdCBNZXNzYWdlUG9ydElkZW50aWYKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGxvY2tlci51bmxvY2tFYXJseSgpOwogICAgIGNoYW5uZWwtPnRha2VBbGxN
ZXNzYWdlc0ZvclBvcnQocG9ydCwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCi1ib29sIE1lc3Nh
Z2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5OjpoYXNNZXNzYWdlc0ZvclBvcnRzX3RlbXBvcmFyeVN5bmMo
Y29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiBwb3J0MSwgY29uc3QgTWVzc2FnZVBvcnRJZGVu
dGlmaWVyJiBwb3J0MikKK3ZvaWQgTWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnk6OmNoZWNrUmVt
b3RlUG9ydEZvckFjdGl2aXR5KGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcmVtb3RlVGFy
Z2V0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyOjpI
YXNBY3Rpdml0eSk+JiYgY2FsbGJhY2spCiB7Ci0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGZ1
bmN0aW9uIChhbmQgdGhlIGxvY2spIHdpdGggYSBmb2xsb3d1cCBwYXRjaCB0byBkbyBhc3luYyBn
YXJiYWdlIGNvbGxlY3Rpb24KLSAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fb3BlbkNoYW5uZWxz
TG9jayk7Ci0KLSAgICBhdXRvKiBjaGFubmVsMSA9IG1fb3BlbkNoYW5uZWxzLmdldChwb3J0MSk7
Ci0gICAgaWYgKCFjaGFubmVsMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byog
Y2hhbm5lbDIgPSBtX29wZW5DaGFubmVscy5nZXQocG9ydDIpOwotICAgIEFTU0VSVF9VTlVTRUQo
Y2hhbm5lbDIsIGNoYW5uZWwyKTsKLSAgICBpZiAoIWNoYW5uZWwyKQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIEFTU0VSVChjaGFubmVs
MSA9PSBjaGFubmVsMik7CisgICAgLy8gVGhlIGNoYW5uZWwgbWlnaHQgYmUgZ29uZSBpZiB0aGUg
cmVtb3RlIHNpZGUgd2FzIGNsb3NlZC4KKyAgICBhdXRvKiBjaGFubmVsID0gbV9vcGVuQ2hhbm5l
bHMuZ2V0KHJlbW90ZVRhcmdldCk7CisgICAgaWYgKCFjaGFubmVsKSB7CisgICAgICAgIGNhbGxi
YWNrKE1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyOjpIYXNBY3Rpdml0eTo6Tm8pOworICAgICAg
ICByZXR1cm47CisgICAgfQogCi0gICAgcmV0dXJuIGNoYW5uZWwxLT5oYXNBbnlNZXNzYWdlc1Bl
bmRpbmdPckluRmxpZ2h0KCk7CisgICAgY2hhbm5lbC0+Y2hlY2tSZW1vdGVQb3J0Rm9yQWN0aXZp
dHkocmVtb3RlVGFyZ2V0LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKIE1lc3NhZ2VQb3J0Q2hh
bm5lbCogTWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnk6OmV4aXN0aW5nQ2hhbm5lbENvbnRhaW5p
bmdQb3J0KGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcG9ydCkKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogCi0gICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX29wZW5DaGFubmVs
c0xvY2spOwotCiAgICAgcmV0dXJuIG1fb3BlbkNoYW5uZWxzLmdldChwb3J0KTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5u
ZWxSZWdpc3RyeS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9y
dENoYW5uZWxSZWdpc3RyeS5oCmluZGV4IDQ1ZDBhNTc4ZmMyMjlkOTgxZWIyZWQzNjJkNmY0Yjg1
NjgzODA4NDQuLmYxMGVjYjUyNzA1MjMxMzY0YTMxZjNjOGUzMjY5YjBmODc5ZjVjYzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFubmVs
UmVnaXN0cnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vbWVzc2FnZXBvcnRzL01lc3NhZ2VQ
b3J0Q2hhbm5lbFJlZ2lzdHJ5LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiTWVzc2FnZVBvcnRDaGFubmVsLmgiCisjaW5jbHVkZSAiTWVzc2FnZVBvcnRDaGFu
bmVsUHJvdmlkZXIuaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydElkZW50aWZpZXIuaCIKICNpbmNs
dWRlICJQcm9jZXNzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTQyLDE4ICs0Mywx
NCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRDbG9zZU1lc3NhZ2VQb3J0KGNvbnN0IE1lc3NhZ2VQ
b3J0SWRlbnRpZmllciYgbG9jYWwpOwogICAgIGJvb2wgZGlkUG9zdE1lc3NhZ2VUb1JlbW90ZShN
ZXNzYWdlV2l0aE1lc3NhZ2VQb3J0cyYmLCBjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImIHJl
bW90ZVRhcmdldCk7CiAgICAgdm9pZCB0YWtlQWxsTWVzc2FnZXNGb3JQb3J0KGNvbnN0IE1lc3Nh
Z2VQb3J0SWRlbnRpZmllciYsIEZ1bmN0aW9uPHZvaWQoVmVjdG9yPE1lc3NhZ2VXaXRoTWVzc2Fn
ZVBvcnRzPiYmLCBGdW5jdGlvbjx2b2lkKCk+JiYpPiYmKTsKKyAgICB2b2lkIGNoZWNrUmVtb3Rl
UG9ydEZvckFjdGl2aXR5KGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgcmVtb3RlVGFyZ2V0
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyOjpIYXNB
Y3Rpdml0eSk+JiYgY2FsbGJhY2spOwogCiAgICAgTWVzc2FnZVBvcnRDaGFubmVsKiBleGlzdGlu
Z0NoYW5uZWxDb250YWluaW5nUG9ydChjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImKTsKLSAg
ICBib29sIGhhc01lc3NhZ2VzRm9yUG9ydHNfdGVtcG9yYXJ5U3luYyhjb25zdCBNZXNzYWdlUG9y
dElkZW50aWZpZXImLCBjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImKTsKIAogICAgIHZvaWQg
bWVzc2FnZVBvcnRDaGFubmVsQ3JlYXRlZChNZXNzYWdlUG9ydENoYW5uZWwmKTsKICAgICB2b2lk
IG1lc3NhZ2VQb3J0Q2hhbm5lbERlc3Ryb3llZChNZXNzYWdlUG9ydENoYW5uZWwmKTsKIAogcHJp
dmF0ZToKLQotICAgIC8vIEZJWE1FOiBUaGUgbmVlZCBmb3IgdGhlIG9wZW4gY2hhbm5lbHMgbG9j
ayBpcyB0ZW1wb3JhcnkuCi0gICAgLy8gSXQgc2hvdWxkIGJlIHJlbW92ZWQgYW5kIHRoaXMgY2xh
c3Mgc2hvdWxkIGJlIG1haW4tdGhyZWFkIG9ubHkuCi0gICAgTG9jayBtX29wZW5DaGFubmVsc0xv
Y2s7CiAgICAgSGFzaE1hcDxNZXNzYWdlUG9ydElkZW50aWZpZXIsIE1lc3NhZ2VQb3J0Q2hhbm5l
bCo+IG1fb3BlbkNoYW5uZWxzOwogfTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>