<?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>24921</bug_id>
          
          <creation_ts>2009-03-29 08:45:04 -0700</creation_ts>
          <short_desc>remove include of HTMLFormElement.h from Document.h</short_desc>
          <delta_ts>2019-02-06 09:03:55 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>cdumez</cc>
    
    <cc>zwarich</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>115731</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-03-29 08:45:04 -0700</bug_when>
    <thetext>At the moment, any change to HTMLFormElement.h recompiles every file that includes Document.h. That&apos;s no good, and this is easy to fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115734</commentid>
    <comment_count>1</comment_count>
      <attachid>29045</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-03-29 09:05:36 -0700</bug_when>
    <thetext>Created attachment 29045
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115741</commentid>
    <comment_count>2</comment_count>
      <attachid>29045</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2009-03-29 09:55:45 -0700</bug_when>
    <thetext>Comment on attachment 29045
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115756</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-03-29 12:27:28 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/42084</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503066</commentid>
    <comment_count>4</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-02-06 09:03:55 -0800</bug_when>
    <thetext>Mass moving XML DOM bugs to the &quot;DOM&quot; Component.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29045</attachid>
            <date>2009-03-29 09:05:36 -0700</date>
            <delta_ts>2009-03-29 09:55:45 -0700</delta_ts>
            <desc>patch</desc>
            <filename>CheckedButtonPatch.txt</filename>
            <type>text/plain</type>
            <size>86402</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MjA4MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjYgQEAKKzIwMDktMDMtMjkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAy
NDkyMTogcmVtb3ZlIGluY2x1ZGUgb2YgSFRNTEZvcm1FbGVtZW50LmggZnJvbSBEb2N1bWVudC5o
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDkyMQor
CisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZGVkIENoZWNrZWRSYWRpb0J1dHRvbnMgc291
cmNlIGZpbGVzLgorICAgICAgICAqIFdlYkNvcmUuc2NvbnM6IERpdHRvLgorICAgICAgICAqIFdl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmVTb3VyY2Vz
LmJrbDogRGl0dG8uCisKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL1B1YmxpY0RPTUludGVyZmFj
ZXMuaDogQ2hhbmdlZCB0eXBlIG9mIHBhcmVudEVsZW1lbnQgdG8gRWxlbWVudC4KKworICAgICAg
ICAqIGRvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9odG1s
L0hUTUxGb3JtRWxlbWVudC5jcHAuCisgICAgICAgIFJlbW92ZWQgYWxsIHRoZSBjb2RlIGV4Y2Vw
dCBmb3IgQ2hlY2tlZFJhZGlvQnV0dG9ucywgYW5kIG1vdmVkIHRoYXQgb3V0IHRvIGJlCisgICAg
ICAgIGEgbmFtZXNwYWNlLWxldmVsIGNsYXNzIGluc3RlYWQgb2YgYSBtZW1iZXIgb2YgSFRNTEZv
cm1FbGVtZW50LgorCisgICAgICAgICogZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuaDogQ29waWVk
IGZyb20gV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oLgorICAgICAgICBSZW1vdmVkIGFs
bCB0aGUgY29kZSBleGNlcHQgZm9yIENoZWNrZWRSYWRpb0J1dHRvbnMsIGFuZCBtb3ZlZCB0aGF0
IG91dCB0byBiZQorICAgICAgICBhIG5hbWVzcGFjZS1sZXZlbCBjbGFzcyBpbnN0ZWFkIG9mIGEg
bWVtYmVyIG9mIEhUTUxGb3JtRWxlbWVudC4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOiBS
ZW1vdmVkIHVubmVlZGVkIGluY2x1ZGVzLCBpbmNsdWRpbmcgSFRNTEZvcm1FbGVtZW50LmguCisg
ICAgICAgIEFkZGVkIGluY2x1ZGUgb2YgQ2hlY2tlZFJhZGlvQnV0dG9ucy5oLiBDaGFuZ2VkIHVz
ZXMgb2YgQ2hlY2tlZFJhZGlvQnV0dG9ucworICAgICAgICBjbGFzcyB0byB1c2UgYSBuYW1lc3Bh
Y2UtbGV2ZWwgY2xhc3MgaW5zdGVhZCBvZiBhIG1lbWJlciBvZiBIVE1MRm9ybUVsZW1lbnQuCisK
KyAgICAgICAgKiBkb20vTm9kZS5pZGw6IENoYW5nZWQgdGhlIHR5cGUgb2YgcGFyZW50RWxlbWVu
dCBmcm9tIE5vZGUgdG8gRWxlbWVudCBmb3IKKyAgICAgICAgdHdvIHJlYXNvbnMuIDEpIE5vZGUg
d2FzIGluY29ycmVjdCwgc2luY2UgcGFyZW50RWxlbWVudCByZXR1cm5zIGFuIEVsZW1lbnQuCisg
ICAgICAgIDIpIFRoZSBiaW5kaW5ncyB3b24ndCBjb21waWxlIGFueSBtb3JlIHVubGVzcyB0aGV5
IGtub3cgcGFyZW50RWxlbWVudCdzCisgICAgICAgIHJldHVybiB2YWx1ZSBpcyBhbiBFbGVtZW50
IGR1ZSB0byBpbmNsdWRlIGNoYW5nZXMuCisKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVu
dC5jcHA6IE1vdmVkIGRlZmluaXRpb25zIG9mIHRoZSBmdW5jdGlvbnMgaW4gdGhlCisgICAgICAg
IENoZWNrZWRSYWRpb0J1dHRvbnMgY2xhc3MgdG8gdGhlIG5ldyBDaGVja2VkUmFkaW9CdXR0b25z
LmNwcC4KKworICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50Lmg6IE1vdmVkIGRlZmluaXRp
b24gb2YgdGhlIENoZWNrZWRSYWRpb0J1dHRvbnMKKyAgICAgICAgY2xhc3MgdG8gdGhlIG5ldyBD
aGVja2VkUmFkaW9CdXR0b25zLmguCisKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2hlY2tlZFJhZGlvQnV0dG9ucyk6IENoYW5nZWQgdXNl
IG9mIENoZWNrZWRSYWRpb0J1dHRvbnMKKyAgICAgICAgY2xhc3MgdG8gdXNlIGEgbmFtZXNwYWNl
LWxldmVsIGNsYXNzIGluc3RlYWQgb2YgYSBtZW1iZXIgb2YgSFRNTEZvcm1FbGVtZW50LgorCisg
ICAgICAgICogcGFnZS9DaHJvbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lOjpjcmVh
dGVXaW5kb3cpOiBUd2Vha2VkIGZvcm1hdHRpbmcuCisKKyAgICAgICAgKiBjc3MvQ1NTR3JhbW1h
ci55OiBBZGRlZCBuZXdseS1uZWVkZWQgaW5jbHVkZS4KKyAgICAgICAgKiBkb20vUmFuZ2UuY3Bw
OiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwOiBE
aXR0by4KKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDogRGl0dG8u
CisgICAgICAgICogZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcDogRGl0dG8uCisg
ICAgICAgICogZWRpdGluZy9Nb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwOiBEaXR0by4KKyAg
ICAgICAgKiBlZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwOiBEaXR0by4KKyAgICAgICAg
KiBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHA6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvVmlz
aWJsZVBvc2l0aW9uLmNwcDogRGl0dG8uCisgICAgICAgICogbG9hZGVyL0RvY0xvYWRlci5jcHA6
IERpdHRvLgorICAgICAgICAqIHBhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6IERp
dHRvLgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHA6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHA6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDogRGl0dG8u
CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmNwcDogRGl0dG8uCisgICAgICAg
ICogc3RvcmFnZS9TZXNzaW9uU3RvcmFnZUFyZWEuY3BwOiBEaXR0by4KKwogMjAwOS0wMy0yOSAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFu
IEJlcm5zdGVpbi4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNDIwNzkpCisrKyBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC01NjAsNiArNTYwLDggQEAgd2ViY29yZV9zb3Vy
Y2VzICs9IFwKIAlXZWJDb3JlL2RvbS9DU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbi5oIFwK
IAlXZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcCBcCiAJV2ViQ29yZS9kb20vQ2hhcmFjdGVy
RGF0YS5oIFwKKwlXZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcCBcCisJV2ViQ29y
ZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5oIFwKIAlXZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0
LmNwcCBcCiAJV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5oIFwKIAlXZWJDb3JlL2RvbS9DbGFz
c05hbWVzLmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuc2NvbnMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9XZWJDb3JlLnNjb25zCShyZXZpc2lvbiA0MjA3OSkKKysrIFdlYkNvcmUvV2ViQ29y
ZS5zY29ucwkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBAQCBzb3VyY2VzWydkb20nXSA9
IFsKICAgICAnZG9tL0JlZm9yZVVubG9hZEV2ZW50LmNwcCcsCiAgICAgJ2RvbS9DREFUQVNlY3Rp
b24uY3BwJywKICAgICAnZG9tL0NoYXJhY3RlckRhdGEuY3BwJywKKyAgICAnZG9tL0NoZWNrZWRS
YWRpb0J1dHRvbnMuY3BwJywKICAgICAnZG9tL0NoaWxkTm9kZUxpc3QuY3BwJywKICAgICAnZG9t
L0NsYXNzTmFtZXMuY3BwJywKICAgICAnZG9tL0NsYXNzTm9kZUxpc3QuY3BwJywKSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZVNv
dXJjZXMuYmtsCShyZXZpc2lvbiA0MjA3OSkKKysrIFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmts
CSh3b3JraW5nIGNvcHkpCkBAIC00MDEsNiArNDAxLDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRo
ZSBsaXN0IG9mIGZpbGVzIG5lZQogICAgICAgICBkb20vQ0RBVEFTZWN0aW9uLmNwcAogICAgICAg
ICBkb20vQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24uY3BwCiAgICAgICAgIGRvbS9DaGFy
YWN0ZXJEYXRhLmNwcAorICAgICAgICBkb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAKICAgICAg
ICAgZG9tL0NoaWxkTm9kZUxpc3QuY3BwCiAgICAgICAgIGRvbS9DbGFzc05hbWVzLmNwcAogICAg
ICAgICBkb20vQ2xhc3NOb2RlTGlzdC5jcHAKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagkocmV2aXNpb24gNDIwNzkpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg0Niw2ICsxMDg0NiwyMiBAQAogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cQ2hl
Y2tlZFJhZGlvQnV0dG9ucy5jcHAiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQor
CQkJCQlOYW1lPSJSZWxlYXNlX1BHT3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJ
CQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRp
b249InRydWUiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmls
ZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxDaGVja2VkUmFkaW9CdXR0
b25zLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRo
PSIuLlxkb21cQ2hpbGROb2RlTGlzdC5jcHAiDQogCQkJCT4NCiAJCQkJPEZpbGVDb25maWd1cmF0
aW9uDQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDQyMDc5KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTIwODcsNiArMjA4Nyw4IEBACiAJCTkzRjE5QjE1MDgyNDVF
NTkwMDFFOUFCQyAvKiBDb2NvYS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNUMyODY5NTAyODQ2RENEMDE4NjM1Q0EgLyogQ29jb2Eu
ZnJhbWV3b3JrICovOyB9OwogCQk5M0YxOUIxNjA4MjQ1RTU5MDAxRTlBQkMgLyogSmF2YVNjcmlw
dENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjgyMTYyOTkwMjlGNEZCNTAxMDAwMTMxIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1l
d29yayAqLzsgfTsKIAkJOTNGMTlCMTcwODI0NUU1OTAwMUU5QUJDIC8qIGxpYmljdWNvcmUuZHls
aWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Yx
RDMxQTA1NThDQzVDMDA4MjFCQzAgLyogbGliaWN1Y29yZS5keWxpYiAqLzsgfTsKKwkJOTNGOTI1
NDMwRjdFRjVCODAwN0UzN0M5IC8qIENoZWNrZWRSYWRpb0J1dHRvbnMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjkyNTQxMEY3RUY1QjgwMDdFMzdD
OSAvKiBDaGVja2VkUmFkaW9CdXR0b25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJOTNGOTI1NDQwRjdFRjVCODAwN0UzN0M5IC8qIENoZWNrZWRS
YWRpb0J1dHRvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTNGOTI1NDIwRjdFRjVCODAwN0UzN0M5IC8qIENoZWNrZWRSYWRpb0J1dHRvbnMuY3Bw
ICovOyB9OwogCQk5M0Y5QjY1NjBCQTBGMzVFMDA4NTQwNjQgLyogRE9NSFRNTENhbnZhc0VsZW1l
bnQuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzRjlCNjUzMEJBMEYzNUUwMDg1NDA2NCAvKiBET01IVE1MQ2FudmFzRWxlbWVu
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTkzRjlCNjU3MEJB
MEYzNUUwMDg1NDA2NCAvKiBET01IVE1MQ2FudmFzRWxlbWVudC5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjlCNjU0MEJBMEYzNUUwMDg1NDA2NCAv
KiBET01IVE1MQ2FudmFzRWxlbWVudC5tbSAqLzsgfTsKIAkJOTNGOUI2NTgwQkEwRjM1RTAwODU0
MDY0IC8qIERPTUhUTUxDYW52YXNFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjlCNjU1MEJBMEYzNUUwMDg1NDA2NCAvKiBE
T01IVE1MQ2FudmFzRWxlbWVudEludGVybmFsLmggKi87IH07CkBAIC02OTYxLDYgKzY5NjMsOCBA
QAogCQk5M0Y4QjMwNjBBMzAwRkVBMDBGNjFBQjggLyogQ29kZUdlbmVyYXRvckpTLnBtICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5zY3JpcHQucGVybDsgbmFtZSA9IENvZGVHZW5lcmF0b3JKUy5wbTsgcGF0aCA9
IC4uL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5M0Y4QjMwNzBBMzAwRkVBMDBGNjFBQjggLyogZ2VuZXJhdGUtYmluZGluZ3MucGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LnNjcmlwdC5wZXJsOyBuYW1lID0gImdlbmVyYXRlLWJpbmRpbmdzLnBsIjsg
cGF0aCA9ICJzY3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdzLnBsIjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTNGOEIzMDgwQTMwMEZFQTAwRjYxQUI4IC8qIElETFN0cnVjdHVyZS5wbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQuc2NyaXB0LnBlcmw7IG5hbWUgPSBJRExTdHJ1Y3R1cmUucG07IHBhdGgg
PSBzY3JpcHRzL0lETFN0cnVjdHVyZS5wbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
OTNGOTI1NDEwRjdFRjVCODAwN0UzN0M5IC8qIENoZWNrZWRSYWRpb0J1dHRvbnMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hlY2tlZFJhZGlvQnV0dG9ucy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5M0Y5MjU0MjBGN0VGNUI4MDA3RTM3QzkgLyogQ2hlY2tl
ZFJhZGlvQnV0dG9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBD
aGVja2VkUmFkaW9CdXR0b25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNG
OUI2NTMwQkEwRjM1RTAwODU0MDY0IC8qIERPTUhUTUxDYW52YXNFbGVtZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUhUTUxDYW52YXNFbGVtZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRjlCNjU0MEJBMEYzNUUwMDg1NDA2NCAvKiBET01IVE1M
Q2FudmFzRWxlbWVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IERPTUhUTUxDYW52YXNFbGVtZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
M0Y5QjY1NTBCQTBGMzVFMDA4NTQwNjQgLyogRE9NSFRNTENhbnZhc0VsZW1lbnRJbnRlcm5hbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01IVE1MQ2FudmFzRWxlbWVudElu
dGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDMzNiw2ICsxNDM0MCw4
IEBACiAJCQkJNjU1MEI2OTUwOTlERjAyNzAwOTBENzgxIC8qIENoYXJhY3RlckRhdGEuY3BwICov
LAogCQkJCTY1NTBCNjk2MDk5REYwMjcwMDkwRDc4MSAvKiBDaGFyYWN0ZXJEYXRhLmggKi8sCiAJ
CQkJOTNFRUMxRTYwOUMyODc3NzAwQzUxNUQxIC8qIENoYXJhY3RlckRhdGEuaWRsICovLAorCQkJ
CTkzRjkyNTQxMEY3RUY1QjgwMDdFMzdDOSAvKiBDaGVja2VkUmFkaW9CdXR0b25zLmggKi8sCisJ
CQkJOTNGOTI1NDIwRjdFRjVCODAwN0UzN0M5IC8qIENoZWNrZWRSYWRpb0J1dHRvbnMuY3BwICov
LAogCQkJCUE4MTg3MjFBMDk3N0QzQzAwMDU4MjZEOSAvKiBDaGlsZE5vZGVMaXN0LmNwcCAqLywK
IAkJCQlBODE4NzIxNTA5NzdEM0MwMDA1ODI2RDkgLyogQ2hpbGROb2RlTGlzdC5oICovLAogCQkJ
CUJDNEJGOUUyMEQxMUUxMzMwMDdEMjQ3RiAvKiBDbGFzc05hbWVzLmNwcCAqLywKQEAgLTE2Nzkx
LDYgKzE2Nzk3LDcgQEAKIAkJCQlGRTZGRDQ4RTBGNjc2RTkzMDAwOTI4NzMgLyogSlNDb29yZGlu
YXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUM2M0EyNDgwRjcxNjQ2NjAwQzA5RDVBIC8qIFJ1
bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1RjQ1NDMwRjdDM0I1RjAwRDdDMUZC
IC8qIEpTTGF6eUV2ZW50TGlzdGVuZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzRjkyNTQzMEY3
RUY1QjgwMDdFMzdDOSAvKiBDaGVja2VkUmFkaW9CdXR0b25zLmggaW4gSGVhZGVycyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAg
LTE4Nzk3LDYgKzE4ODA0LDcgQEAKIAkJCQlGRTZGRDQ4RDBGNjc2RTkzMDAwOTI4NzMgLyogSlND
b29yZGluYXRlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzYzQTI0OTBGNzE2NDY2MDBDMDlE
NUEgLyogUnVuTG9vcFRpbWVyQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM1RjQ1NDIwRjdD
M0I1RjAwRDdDMUZCIC8qIEpTTGF6eUV2ZW50TGlzdGVuZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJOTNGOTI1NDQwRjdFRjVCODAwN0UzN0M5IC8qIENoZWNrZWRSYWRpb0J1dHRvbnMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29iamMvUHVibGljRE9NSW50ZXJm
YWNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9QdWJsaWNET01JbnRl
cmZhY2VzLmgJKHJldmlzaW9uIDQyMDc5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1B1Ymxp
Y0RPTUludGVyZmFjZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjc1LDcgKzI3NSw3IEBACiBAcHJv
cGVydHkocmVhZG9ubHksIGNvcHkpIE5TU3RyaW5nICpsb2NhbE5hbWU7CiBAcHJvcGVydHkoY29w
eSkgTlNTdHJpbmcgKnRleHRDb250ZW50IEFWQUlMQUJMRV9XRUJLSVRfVkVSU0lPTl8zXzBfQU5E
X0xBVEVSOwogQHByb3BlcnR5KHJlYWRvbmx5LCBjb3B5KSBOU1N0cmluZyAqYmFzZVVSSSBBVkFJ
TEFCTEVfV0VCS0lUX1ZFUlNJT05fM18wX0FORF9MQVRFUjsKLUBwcm9wZXJ0eShyZWFkb25seSwg
cmV0YWluKSBET01Ob2RlICpwYXJlbnRFbGVtZW50IEFWQUlMQUJMRV9XRUJLSVRfVkVSU0lPTl8z
XzBfQU5EX0xBVEVSOworQHByb3BlcnR5KHJlYWRvbmx5LCByZXRhaW4pIERPTUVsZW1lbnQgKnBh
cmVudEVsZW1lbnQgQVZBSUxBQkxFX1dFQktJVF9WRVJTSU9OXzNfMF9BTkRfTEFURVI7CiBAcHJv
cGVydHkocmVhZG9ubHkpIEJPT0wgaXNDb250ZW50RWRpdGFibGUgQVZBSUxBQkxFX1dFQktJVF9W
RVJTSU9OXzNfMF9BTkRfTEFURVI7CiAtIChET01Ob2RlICopaW5zZXJ0QmVmb3JlOihET01Ob2Rl
ICopbmV3Q2hpbGQgOihET01Ob2RlICopcmVmQ2hpbGQ7CiAtIChET01Ob2RlICopaW5zZXJ0QmVm
b3JlOihET01Ob2RlICopbmV3Q2hpbGQgcmVmQ2hpbGQ6KERPTU5vZGUgKilyZWZDaGlsZCBBVkFJ
TEFCTEVfV0VCS0lUX1ZFUlNJT05fM18wX0FORF9MQVRFUjsKSW5kZXg6IFdlYkNvcmUvY3NzL0NT
U0dyYW1tYXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkJKHJldmlz
aW9uIDQyMDc5KQorKysgV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlICJDU1NNZWRpYVJ1bGUuaCIKICNpbmNsdWRlICJD
U1NQYXJzZXIuaCIKKyNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgogI2luY2x1ZGUgIkNT
U1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgogI2luY2x1ZGUgIkNT
U1NlbGVjdG9yLmgiCkluZGV4OiBXZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcAkocmV2aXNp
b24gNDIwNzMpCShmcm9tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOjQyMDczKQor
KysgV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25v
bGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlz
dG9Aa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJA
a2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgKEMpIDIwMDYgQWxl
eGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgorCisjaW5jbHVkZSAiQ1NTSGVscGVyLmgiCisj
aW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGaWxlTGlzdC5o
IgorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJGb3JtRGF0YS5oIgorI2luY2x1
ZGUgIkZvcm1EYXRhTGlzdC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKKyNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUNv
bGxlY3Rpb24uaCIKKyNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRN
TElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk1JTUVU
eXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dENv
bnRyb2wuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvUmFu
ZG9tTnVtYmVyLmg+CisKKyNpbmNsdWRlIDxsaW1pdHM+CisKKyNpZiBQTEFURk9STShXWCkKKyNp
bmNsdWRlIDx3eC9kZWZzLmg+CisjaW5jbHVkZSA8d3gvZmlsZW5hbWUuaD4KKyNlbmRpZgorCisj
aWYgUExBVEZPUk0oV0lOX09TKQorI2luY2x1ZGUgPHNobHdhcGkuaD4KKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK3N0YXRpYyBp
bnQ2NF90IGdlbmVyYXRlRm9ybURhdGFJZGVudGlmaWVyKCkKK3sKKyAgICAvLyBJbml0aWFsaXpl
IHRvIHRoZSBjdXJyZW50IHRpbWUgdG8gcmVkdWNlIHRoZSBsaWtlbGlob29kIG9mIGdlbmVyYXRp
bmcKKyAgICAvLyBpZGVudGlmaWVycyB0aGF0IG92ZXJsYXAgd2l0aCB0aG9zZSBmcm9tIHBhc3Qv
ZnV0dXJlIGJyb3dzZXIgc2Vzc2lvbnMuCisgICAgc3RhdGljIGludDY0X3QgbmV4dElkZW50aWZp
ZXIgPSBzdGF0aWNfY2FzdDxpbnQ2NF90PihjdXJyZW50VGltZSgpICogMTAwMDAwMC4wKTsKKyAg
ICByZXR1cm4gKytuZXh0SWRlbnRpZmllcjsKK30KKworSFRNTEZvcm1FbGVtZW50OjpIVE1MRm9y
bUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKKyAg
ICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICAsIG1fZWxlbWVudEFsaWFzZXMoMCkK
KyAgICAsIGNvbGxlY3Rpb25JbmZvKDApCisgICAgLCBtX2F1dG9jb21wbGV0ZSh0cnVlKQorICAg
ICwgbV9pbnN1Ym1pdChmYWxzZSkKKyAgICAsIG1fZG9pbmdzdWJtaXQoZmFsc2UpCisgICAgLCBt
X2lucmVzZXQoZmFsc2UpCisgICAgLCBtX21hbGZvcm1lZChmYWxzZSkKK3sKKyAgICBBU1NFUlQo
aGFzVGFnTmFtZShmb3JtVGFnKSk7Cit9CisKK0hUTUxGb3JtRWxlbWVudDo6fkhUTUxGb3JtRWxl
bWVudCgpCit7CisgICAgaWYgKCFtX2F1dG9jb21wbGV0ZSkKKyAgICAgICAgZG9jdW1lbnQoKS0+
dW5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0aGlzKTsKKworICAgIGRl
bGV0ZSBtX2VsZW1lbnRBbGlhc2VzOworICAgIGRlbGV0ZSBjb2xsZWN0aW9uSW5mbzsKKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtRWxlbWVudHMuc2l6ZSgpOyArK2kpCisgICAg
ICAgIGZvcm1FbGVtZW50c1tpXS0+Zm9ybURlc3Ryb3llZCgpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBpbWdFbGVtZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgaW1nRWxlbWVudHNb
aV0tPm1fZm9ybSA9IDA7Cit9CisKK2Jvb2wgSFRNTEZvcm1FbGVtZW50Ojpmb3JtV291bGRIYXZl
U2VjdXJlU3VibWlzc2lvbihjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICByZXR1cm4gZG9jdW1l
bnQoKS0+Y29tcGxldGVVUkwodXJsKS5wcm90b2NvbElzKCJodHRwcyIpOworfQorCit2b2lkIEhU
TUxGb3JtRWxlbWVudDo6YXR0YWNoKCkKK3sKKyAgICBIVE1MRWxlbWVudDo6YXR0YWNoKCk7Cit9
CisKK3ZvaWQgSFRNTEZvcm1FbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCit7CisgICAg
aWYgKGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCisgICAgICAgIHN0YXRpY19jYXN0PEhU
TUxEb2N1bWVudCo+KGRvY3VtZW50KCkpLT5hZGROYW1lZEl0ZW0obV9uYW1lKTsKKworICAgIEhU
TUxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOworfQorCit2b2lkIEhUTUxGb3JtRWxl
bWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCit7CisgICAgaWYgKGRvY3VtZW50KCktPmlzSFRN
TERvY3VtZW50KCkpCisgICAgICAgIHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGRvY3VtZW50
KCkpLT5yZW1vdmVOYW1lZEl0ZW0obV9uYW1lKTsKKyAgIAorICAgIEhUTUxFbGVtZW50OjpyZW1v
dmVkRnJvbURvY3VtZW50KCk7Cit9CisKK3ZvaWQgSFRNTEZvcm1FbGVtZW50OjpoYW5kbGVMb2Nh
bEV2ZW50cyhFdmVudCogZXZlbnQsIGJvb2wgdXNlQ2FwdHVyZSkKK3sKKyAgICBOb2RlKiB0YXJn
ZXROb2RlID0gZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKTsKKyAgICBpZiAoIXVzZUNhcHR1cmUg
JiYgdGFyZ2V0Tm9kZSAmJiB0YXJnZXROb2RlICE9IHRoaXMgJiYgKGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLnN1Ym1pdEV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
LnJlc2V0RXZlbnQpKSB7CisgICAgICAgIGV2ZW50LT5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBIVE1MRWxlbWVudDo6aGFuZGxlTG9jYWxFdmVudHMoZXZl
bnQsIHVzZUNhcHR1cmUpOworfQorCit1bnNpZ25lZCBIVE1MRm9ybUVsZW1lbnQ6Omxlbmd0aCgp
IGNvbnN0Cit7CisgICAgaW50IGxlbiA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGZvcm1FbGVtZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKGZvcm1FbGVtZW50c1tpXS0+
aXNFbnVtZXJhdGFibGUoKSkKKyAgICAgICAgICAgICsrbGVuOworCisgICAgcmV0dXJuIGxlbjsK
K30KKworTm9kZSogSFRNTEZvcm1FbGVtZW50OjppdGVtKHVuc2lnbmVkIGluZGV4KQoreworICAg
IHJldHVybiBlbGVtZW50cygpLT5pdGVtKGluZGV4KTsKK30KKwordm9pZCBIVE1MRm9ybUVsZW1l
bnQ6OnN1Ym1pdENsaWNrKEV2ZW50KiBldmVudCkKK3sKKyAgICBib29sIHN1Ym1pdEZvdW5kID0g
ZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1FbGVtZW50cy5zaXplKCk7
ICsraSkgeworICAgICAgICBpZiAoZm9ybUVsZW1lbnRzW2ldLT5oYXNMb2NhbE5hbWUoaW5wdXRU
YWcpKSB7CisgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nh
c3Q8SFRNTElucHV0RWxlbWVudCo+KGZvcm1FbGVtZW50c1tpXSk7CisgICAgICAgICAgICBpZiAo
ZWxlbWVudC0+aXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkgJiYgZWxlbWVudC0+cmVuZGVyZXIo
KSkgeworICAgICAgICAgICAgICAgIHN1Ym1pdEZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBlbGVtZW50LT5kaXNwYXRjaFNpbXVsYXRlZENsaWNrKGV2ZW50KTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIXN1Ym1p
dEZvdW5kKSAvLyBzdWJtaXQgdGhlIGZvcm0gd2l0aG91dCBhIHN1Ym1pdCBvciBpbWFnZSBpbnB1
dAorICAgICAgICBwcmVwYXJlU3VibWl0KGV2ZW50KTsKK30KKworVGV4dEVuY29kaW5nIEhUTUxG
b3JtRWxlbWVudDo6ZGF0YUVuY29kaW5nKCkgY29uc3QKK3sKKyAgICBpZiAoaXNNYWlsdG9Gb3Jt
KCkpCisgICAgICAgIHJldHVybiBVVEY4RW5jb2RpbmcoKTsKKworICAgIHJldHVybiBtX2Zvcm1E
YXRhQnVpbGRlci5kYXRhRW5jb2RpbmcoZG9jdW1lbnQoKSk7Cit9CisKK1Bhc3NSZWZQdHI8Rm9y
bURhdGE+IEhUTUxGb3JtRWxlbWVudDo6Y3JlYXRlRm9ybURhdGEoY29uc3QgQ1N0cmluZyYgYm91
bmRhcnkpCit7CisgICAgVmVjdG9yPGNoYXI+IGVuY29kZWREYXRhOworICAgIFRleHRFbmNvZGlu
ZyBlbmNvZGluZyA9IGRhdGFFbmNvZGluZygpLmVuY29kaW5nRm9yRm9ybVN1Ym1pc3Npb24oKTsK
KworICAgIFJlZlB0cjxGb3JtRGF0YT4gcmVzdWx0ID0gRm9ybURhdGE6OmNyZWF0ZSgpOworCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1FbGVtZW50cy5zaXplKCk7ICsraSkgewor
ICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBjb250cm9sID0gZm9ybUVsZW1lbnRzW2ld
OworICAgICAgICBGb3JtRGF0YUxpc3QgbGlzdChlbmNvZGluZyk7CisKKyAgICAgICAgaWYgKCFj
b250cm9sLT5kaXNhYmxlZCgpICYmIGNvbnRyb2wtPmFwcGVuZEZvcm1EYXRhKGxpc3QsIG1fZm9y
bURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgpKSkgeworICAgICAgICAgICAgc2l6ZV90IGZv
cm1EYXRhTGlzdFNpemUgPSBsaXN0Lmxpc3QoKS5zaXplKCk7CisgICAgICAgICAgICBBU1NFUlQo
Zm9ybURhdGFMaXN0U2l6ZSAlIDIgPT0gMCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0g
MDsgaiA8IGZvcm1EYXRhTGlzdFNpemU7IGogKz0gMikgeworICAgICAgICAgICAgICAgIGNvbnN0
IEZvcm1EYXRhTGlzdDo6SXRlbSYga2V5ID0gbGlzdC5saXN0KClbal07CisgICAgICAgICAgICAg
ICAgY29uc3QgRm9ybURhdGFMaXN0OjpJdGVtJiB2YWx1ZSA9IGxpc3QubGlzdCgpW2ogKyAxXTsK
KyAgICAgICAgICAgICAgICBpZiAoIW1fZm9ybURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE9taXQgdGhlIG5hbWUgImlzaW5kZXgiIGlmIGl0
J3MgdGhlIGZpcnN0IGZvcm0gZGF0YSBlbGVtZW50LgorICAgICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogV2h5IGlzIHRoaXMgYSBnb29kIHJ1bGU/IElzIHRoaXMgb2Jzb2xldGUgbm93PworICAg
ICAgICAgICAgICAgICAgICBpZiAoZW5jb2RlZERhdGEuaXNFbXB0eSgpICYmIGtleS5kYXRhKCkg
PT0gImlzaW5kZXgiKQorICAgICAgICAgICAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjpl
bmNvZGVTdHJpbmdBc0Zvcm1EYXRhKGVuY29kZWREYXRhLCB2YWx1ZS5kYXRhKCkpOworICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBtX2Zvcm1EYXRhQnVp
bGRlci5hZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKGVuY29kZWREYXRhLCBrZXkuZGF0YSgpLCB2
YWx1ZS5kYXRhKCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIFZlY3RvcjxjaGFyPiBoZWFkZXI7CisgICAgICAgICAgICAgICAgICAgIG1fZm9ybURhdGFC
dWlsZGVyLmJlZ2luTXVsdGlQYXJ0SGVhZGVyKGhlYWRlciwgYm91bmRhcnksIGtleS5kYXRhKCkp
OworCisgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBjdXJyZW50IHR5cGUgaXMgRklMRSwgdGhl
biB3ZSBhbHNvIG5lZWQgdG8gaW5jbHVkZSB0aGUgZmlsZW5hbWUKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHZhbHVlLmZpbGUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3Ry
aW5nJiBwYXRoID0gdmFsdWUuZmlsZSgpLT5wYXRoKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBTdHJpbmcgZmlsZU5hbWUgPSB2YWx1ZS5maWxlKCktPmZpbGVOYW1lKCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIExldCB0aGUgYXBwbGljYXRpb24gc3BlY2lmeSBhIGZpbGVuYW1l
IGlmIGl0J3MgZ29pbmcgdG8gZ2VuZXJhdGUgYSByZXBsYWNlbWVudCBmaWxlIGZvciB0aGUgdXBs
b2FkLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFn
ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBnZW5lcmF0ZWRG
aWxlTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkR2VuZXJhdGVG
aWxlID0gcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5zaG91bGRSZXBsYWNlV2l0aEdlbmVyYXRl
ZEZpbGVGb3JVcGxvYWQocGF0aCwgZ2VuZXJhdGVkRmlsZU5hbWUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkR2VuZXJhdGVGaWxlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgPSBnZW5lcmF0ZWRGaWxlTmFtZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gaW5jbHVkZSB0aGUgZmlsZW5hbWU9
Ii4uIiBwYXJ0IGluIHRoZSBoZWFkZXIsIGV2ZW4gaWYgdGhlIGZpbGVuYW1lIGlzIGVtcHR5Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2Zvcm1EYXRhQnVpbGRlci5hZGRGaWxlbmFtZVRvTXVs
dGlQYXJ0SGVhZGVyKGhlYWRlciwgZW5jb2RpbmcsIGZpbGVOYW1lKTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFmaWxlTmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogVGhlIE1JTUVUeXBlUmVnaXN0cnkgZnVuY3Rpb24ncyBuYW1l
IG1ha2VzIGl0IHNvdW5kIGxpa2UgaXQgdGFrZXMgYSBwYXRoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIG5vdCBqdXN0IGEgYmFzZW5hbWUuIEJ1dCBmaWxlbmFtZSBpcyBub3QgdGhl
IHBhdGguIEJ1dCBub3RlIHRoYXQgaXQncyBub3Qgc2FmZSB0bworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGp1c3QgdXNlIHBhdGggaW5zdGVhZCBzaW5jZSBpbiB0aGUgZ2VuZXJhdGVk
LWZpbGUgY2FzZSBpdCB3aWxsIG5vdCByZWZsZWN0IHRoZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIE1JTUUgdHlwZSBvZiB0aGUgZ2VuZXJhdGVkIGZpbGUuCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlN
RVR5cGVGb3JQYXRoKGZpbGVOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IW1pbWVUeXBlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9m
b3JtRGF0YUJ1aWxkZXIuYWRkQ29udGVudFR5cGVUb011bHRpUGFydEhlYWRlcihoZWFkZXIsIG1p
bWVUeXBlLmxhdGluMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIG1fZm9ybURhdGFCdWlsZGVyLmZpbmlz
aE11bHRpUGFydEhlYWRlcihoZWFkZXIpOworCisgICAgICAgICAgICAgICAgICAgIC8vIEFwcGVu
ZCBib2R5CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kRGF0YShoZWFkZXIuZGF0
YSgpLCBoZWFkZXIuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNpemVfdCBkYXRh
U2l6ZSA9IHZhbHVlLmRhdGEoKS5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC0+YXBwZW5kRGF0YSh2YWx1ZS5kYXRhKCkuZGF0YSgpLCBkYXRhU2l6ZSk7CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmZpbGUoKSAmJiAhdmFsdWUuZmlsZSgpLT5wYXRo
KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmRGaWxl
KHZhbHVlLmZpbGUoKS0+cGF0aCgpLCBzaG91bGRHZW5lcmF0ZUZpbGUpOworCisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC0+YXBwZW5kRGF0YSgiXHJcbiIsIDIpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX2Zvcm1EYXRh
QnVpbGRlci5pc011bHRpUGFydEZvcm0oKSkKKyAgICAgICAgbV9mb3JtRGF0YUJ1aWxkZXIuYWRk
Qm91bmRhcnlUb011bHRpUGFydEhlYWRlcihlbmNvZGVkRGF0YSwgYm91bmRhcnksIHRydWUpOwor
CisgICAgcmVzdWx0LT5hcHBlbmREYXRhKGVuY29kZWREYXRhLmRhdGEoKSwgZW5jb2RlZERhdGEu
c2l6ZSgpKTsKKworICAgIHJlc3VsdC0+c2V0SWRlbnRpZmllcihnZW5lcmF0ZUZvcm1EYXRhSWRl
bnRpZmllcigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIEhUTUxGb3JtRWxlbWVu
dDo6aXNNYWlsdG9Gb3JtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcHJvdG9jb2xJcyhtX3VybCwg
Im1haWx0byIpOworfQorCitib29sIEhUTUxGb3JtRWxlbWVudDo6cHJlcGFyZVN1Ym1pdChFdmVu
dCogZXZlbnQpCit7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAg
ICBpZiAobV9pbnN1Ym1pdCB8fCAhZnJhbWUpCisgICAgICAgIHJldHVybiBtX2luc3VibWl0Owor
CisgICAgbV9pbnN1Ym1pdCA9IHRydWU7CisgICAgbV9kb2luZ3N1Ym1pdCA9IGZhbHNlOworCisg
ICAgaWYgKGRpc3BhdGNoRXZlbnRGb3JUeXBlKGV2ZW50TmFtZXMoKS5zdWJtaXRFdmVudCwgdHJ1
ZSwgdHJ1ZSkgJiYgIW1fZG9pbmdzdWJtaXQpCisgICAgICAgIG1fZG9pbmdzdWJtaXQgPSB0cnVl
OworCisgICAgbV9pbnN1Ym1pdCA9IGZhbHNlOworCisgICAgaWYgKG1fZG9pbmdzdWJtaXQpCisg
ICAgICAgIHN1Ym1pdChldmVudCwgdHJ1ZSk7CisKKyAgICByZXR1cm4gbV9kb2luZ3N1Ym1pdDsK
K30KKworc3RhdGljIHZvaWQgdHJhbnNmZXJNYWlsdG9Qb3N0Rm9ybURhdGFUb1VSTChSZWZQdHI8
Rm9ybURhdGE+JiBkYXRhLCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmdUeXBlKQor
eworICAgIFN0cmluZyBib2R5ID0gZGF0YS0+ZmxhdHRlblRvU3RyaW5nKCk7CisgICAgZGF0YSA9
IEZvcm1EYXRhOjpjcmVhdGUoKTsKKworICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShlbmNvZGlu
Z1R5cGUsICJ0ZXh0L3BsYWluIikpIHsKKyAgICAgICAgLy8gQ29udmVudGlvbiBzZWVtcyB0byBi
ZSB0byBkZWNvZGUsIGFuZCBzLyYvXHJcbi8uIEFsc28sIHNwYWNlcyBhcmUgZW5jb2RlZCBhcyAl
MjAuCisgICAgICAgIGJvZHkgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoYm9keS5yZXBsYWNl
KCcmJywgIlxyXG4iKS5yZXBsYWNlKCcrJywgJyAnKSArICJcclxuIik7CisgICAgfQorCisgICAg
VmVjdG9yPGNoYXI+IGJvZHlEYXRhOworICAgIGJvZHlEYXRhLmFwcGVuZCgiYm9keT0iLCA1KTsK
KyAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoYm9keURhdGEsIGJv
ZHkudXRmOCgpKTsKKyAgICBib2R5ID0gU3RyaW5nKGJvZHlEYXRhLmRhdGEoKSwgYm9keURhdGEu
c2l6ZSgpKS5yZXBsYWNlKCcrJywgIiUyMCIpOworCisgICAgU3RyaW5nIHF1ZXJ5ID0gdXJsLnF1
ZXJ5KCk7CisgICAgaWYgKCFxdWVyeS5pc0VtcHR5KCkpCisgICAgICAgIHF1ZXJ5LmFwcGVuZCgn
JicpOworICAgIHF1ZXJ5LmFwcGVuZChib2R5KTsKKyAgICB1cmwuc2V0UXVlcnkocXVlcnkpOwor
fQorCit2b2lkIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0KEV2ZW50KiBldmVudCwgYm9vbCBhY3Rp
dmF0ZVN1Ym1pdEJ1dHRvbiwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRM
aXN0KQoreworICAgIEZyYW1lVmlldyogdmlldyA9IGRvY3VtZW50KCktPnZpZXcoKTsKKyAgICBG
cmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmICghdmlldyB8fCAhZnJh
bWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2luc3VibWl0KSB7CisgICAgICAgIG1f
ZG9pbmdzdWJtaXQgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9pbnN1
Ym1pdCA9IHRydWU7CisKKyAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBmaXJzdFN1Y2Nlc3Nm
dWxTdWJtaXRCdXR0b24gPSAwOworICAgIGJvb2wgbmVlZEJ1dHRvbkFjdGl2YXRpb24gPSBhY3Rp
dmF0ZVN1Ym1pdEJ1dHRvbjsgLy8gZG8gd2UgbmVlZCB0byBhY3RpdmF0ZSBhIHN1Ym1pdCBidXR0
b24/CisgICAgCisgICAgZnJhbWUtPmxvYWRlcigpLT5jbGVhclJlY29yZGVkRm9ybVZhbHVlcygp
OworICAgIGZyYW1lLT5sb2FkZXIoKS0+c2V0Rm9ybUFib3V0VG9CZVN1Ym1pdHRlZCh0aGlzKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybUVsZW1lbnRzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBmb3JtRWxlbWVudHNb
aV07CisgICAgICAgIGlmIChjb250cm9sLT5oYXNMb2NhbE5hbWUoaW5wdXRUYWcpKSB7CisgICAg
ICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQqPihjb250cm9sKTsKKyAgICAgICAgICAgIGlmIChpbnB1dC0+aXNUZXh0RmllbGQoKSkg
eworICAgICAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+cmVjb3JkRm9ybVZhbHVlKGlucHV0
LT5uYW1lKCksIGlucHV0LT52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXQtPmlz
U2VhcmNoRmllbGQoKSkKKyAgICAgICAgICAgICAgICAgICAgaW5wdXQtPmFkZFNlYXJjaFJlc3Vs
dCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChuZWVkQnV0dG9uQWN0
aXZhdGlvbikgeworICAgICAgICAgICAgaWYgKGNvbnRyb2wtPmlzQWN0aXZhdGVkU3VibWl0KCkp
CisgICAgICAgICAgICAgICAgbmVlZEJ1dHRvbkFjdGl2YXRpb24gPSBmYWxzZTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGZpcnN0U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbiA9PSAwICYmIGNvbnRyb2wt
PmlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpKQorICAgICAgICAgICAgICAgIGZpcnN0U3VjY2Vz
c2Z1bFN1Ym1pdEJ1dHRvbiA9IGNvbnRyb2w7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
bmVlZEJ1dHRvbkFjdGl2YXRpb24gJiYgZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0dG9uKQorICAg
ICAgICBmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24tPnNldEFjdGl2YXRlZFN1Ym1pdCh0cnVl
KTsKKyAgICAKKyAgICBpZiAobV91cmwuaXNFbXB0eSgpKQorICAgICAgICBtX3VybCA9IGRvY3Vt
ZW50KCktPnVybCgpLnN0cmluZygpOworCisgICAgaWYgKG1fZm9ybURhdGFCdWlsZGVyLmlzUG9z
dE1ldGhvZCgpKSB7CisgICAgICAgIGlmIChtX2Zvcm1EYXRhQnVpbGRlci5pc011bHRpUGFydEZv
cm0oKSAmJiBpc01haWx0b0Zvcm0oKSkgeworICAgICAgICAgICAgc2V0RW5jdHlwZSgiYXBwbGlj
YXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7CisgICAgICAgICAgICBBU1NFUlQoIW1fZm9y
bURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICghbV9mb3JtRGF0YUJ1aWxkZXIuaXNNdWx0aVBhcnRGb3JtKCkpIHsKKyAgICAgICAgICAgIFJl
ZlB0cjxGb3JtRGF0YT4gZGF0YSA9IGNyZWF0ZUZvcm1EYXRhKENTdHJpbmcoKSk7CisKKyAgICAg
ICAgICAgIGlmIChpc01haWx0b0Zvcm0oKSkgeworICAgICAgICAgICAgICAgIC8vIENvbnZlcnQg
dGhlIGZvcm0gZGF0YSBpbnRvIGEgc3RyaW5nIHRoYXQgd2UgcHV0IGludG8gdGhlIFVSTC4KKyAg
ICAgICAgICAgICAgICBLVVJMIHVybCA9IGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKG1fdXJsKTsK
KyAgICAgICAgICAgICAgICB0cmFuc2Zlck1haWx0b1Bvc3RGb3JtRGF0YVRvVVJMKGRhdGEsIHVy
bCwgbV9mb3JtRGF0YUJ1aWxkZXIuZW5jb2RpbmdUeXBlKCkpOworICAgICAgICAgICAgICAgIG1f
dXJsID0gdXJsLnN0cmluZygpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmcmFtZS0+
bG9hZGVyKCktPnN1Ym1pdEZvcm0oIlBPU1QiLCBtX3VybCwgZGF0YS5yZWxlYXNlKCksIG1fdGFy
Z2V0LCBtX2Zvcm1EYXRhQnVpbGRlci5lbmNvZGluZ1R5cGUoKSwgU3RyaW5nKCksIGV2ZW50LCBs
b2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBWZWN0b3I8Y2hhcj4gYm91bmRhcnkgPSBtX2Zvcm1EYXRhQnVpbGRlci5nZW5lcmF0
ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKCk7CisgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnN1
Ym1pdEZvcm0oIlBPU1QiLCBtX3VybCwgY3JlYXRlRm9ybURhdGEoYm91bmRhcnkuZGF0YSgpKSwg
bV90YXJnZXQsIG1fZm9ybURhdGFCdWlsZGVyLmVuY29kaW5nVHlwZSgpLCBib3VuZGFyeS5kYXRh
KCksIGV2ZW50LCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBtX2Zvcm1EYXRhQnVpbGRlci5zZXRJc011bHRpUGFydEZv
cm0oZmFsc2UpOworICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnN1Ym1pdEZvcm0oIkdFVCIsIG1f
dXJsLCBjcmVhdGVGb3JtRGF0YShDU3RyaW5nKCkpLCBtX3RhcmdldCwgU3RyaW5nKCksIFN0cmlu
ZygpLCBldmVudCwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QpOworICAgIH0KKwor
ICAgIGlmIChuZWVkQnV0dG9uQWN0aXZhdGlvbiAmJiBmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRCdXR0
b24pCisgICAgICAgIGZpcnN0U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbi0+c2V0QWN0aXZhdGVkU3Vi
bWl0KGZhbHNlKTsKKyAgICAKKyAgICBtX2RvaW5nc3VibWl0ID0gbV9pbnN1Ym1pdCA9IGZhbHNl
OworfQorCit2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVzZXQoKQoreworICAgIEZyYW1lKiBmcmFt
ZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKG1faW5yZXNldCB8fCAhZnJhbWUpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1faW5yZXNldCA9IHRydWU7CisKKyAgICAvLyAjIyMgRE9N
MiBsYWJlbHMgdGhpcyBldmVudCBhcyBub3QgY2FuY2VsYWJsZSwgaG93ZXZlcgorICAgIC8vIGNv
bW1vbiBicm93c2Vycyggc2ljayEgKSBhbGxvdyBpdCBiZSBjYW5jZWxsZWQuCisgICAgaWYgKCAh
ZGlzcGF0Y2hFdmVudEZvclR5cGUoZXZlbnROYW1lcygpLnJlc2V0RXZlbnQsdHJ1ZSwgdHJ1ZSkg
KSB7CisgICAgICAgIG1faW5yZXNldCA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1FbGVtZW50cy5zaXplKCk7ICsraSkK
KyAgICAgICAgZm9ybUVsZW1lbnRzW2ldLT5yZXNldCgpOworCisgICAgbV9pbnJlc2V0ID0gZmFs
c2U7Cit9CisKK3ZvaWQgSFRNTEZvcm1FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUqIGF0dHIpCit7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBhY3Rpb25BdHRy
KQorICAgICAgICBtX3VybCA9IHBhcnNlVVJMKGF0dHItPnZhbHVlKCkpOworICAgIGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSB0YXJnZXRBdHRyKQorICAgICAgICBtX3RhcmdldCA9IGF0dHItPnZh
bHVlKCk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG1ldGhvZEF0dHIpCisgICAgICAg
IG1fZm9ybURhdGFCdWlsZGVyLnBhcnNlTWV0aG9kVHlwZShhdHRyLT52YWx1ZSgpKTsKKyAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gZW5jdHlwZUF0dHIpCisgICAgICAgIG1fZm9ybURhdGFC
dWlsZGVyLnBhcnNlRW5jb2RpbmdUeXBlKGF0dHItPnZhbHVlKCkpOworICAgIGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBhY2NlcHRfY2hhcnNldEF0dHIpCisgICAgICAgIC8vIHNwYWNlIHNlcGFy
YXRlZCBsaXN0IG9mIGNoYXJzZXRzIHRoZSBzZXJ2ZXIKKyAgICAgICAgLy8gYWNjZXB0cyAtIHNl
ZSByZmMyMDQ1CisgICAgICAgIG1fZm9ybURhdGFCdWlsZGVyLnNldEFjY2VwdENoYXJzZXQoYXR0
ci0+dmFsdWUoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFjY2VwdEF0dHIpIHsK
KyAgICAgICAgLy8gaWdub3JlIHRoaXMgb25lIGZvciB0aGUgbW9tZW50Li4uCisgICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gYXV0b2NvbXBsZXRlQXR0cikgeworICAgICAgICBtX2F1dG9j
b21wbGV0ZSA9ICFlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAib2ZmIik7CisgICAg
ICAgIGlmICghbV9hdXRvY29tcGxldGUpCisgICAgICAgICAgICBkb2N1bWVudCgpLT5yZWdpc3Rl
ckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0aGlzKTsgICAgCisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JEb2N1bWVudEFjdGl2YXRpb25D
YWxsYmFja3ModGhpcyk7CisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25zdWJtaXRB
dHRyKQorICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShl
dmVudE5hbWVzKCkuc3VibWl0RXZlbnQsIGF0dHIpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBvbnJlc2V0QXR0cikKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVB
bmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLnJlc2V0RXZlbnQsIGF0dHIpOworICAgIGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBuYW1lQXR0cikgeworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IG5ld05hbWUgPSBhdHRyLT52YWx1ZSgpOworICAgICAgICBpZiAoaW5Eb2N1bWVudCgpICYmIGRv
Y3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsKKyAgICAgICAgICAgIEhUTUxEb2N1bWVudCog
ZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPih0aGlzLT5kb2N1bWVudCgpKTsK
KyAgICAgICAgICAgIGRvY3VtZW50LT5yZW1vdmVOYW1lZEl0ZW0obV9uYW1lKTsKKyAgICAgICAg
ICAgIGRvY3VtZW50LT5hZGROYW1lZEl0ZW0obmV3TmFtZSk7CisgICAgICAgIH0KKyAgICAgICAg
bV9uYW1lID0gbmV3TmFtZTsKKyAgICB9IGVsc2UKKyAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOworfQorCit0ZW1wbGF0ZTxjbGFzcyBULCBzaXplX3Qgbj4g
c3RhdGljIHZvaWQgcmVtb3ZlRnJvbVZlY3RvcihWZWN0b3I8VCosIG4+ICYgdmVjLCBUKiBpdGVt
KQoreworICAgIHNpemVfdCBzaXplID0gdmVjLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSAhPSBzaXplOyArK2kpCisgICAgICAgIGlmICh2ZWNbaV0gPT0gaXRlbSkgeworICAgICAg
ICAgICAgdmVjLnJlbW92ZShpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cit9CisK
K3Vuc2lnbmVkIEhUTUxGb3JtRWxlbWVudDo6Zm9ybUVsZW1lbnRJbmRleChIVE1MRm9ybUNvbnRy
b2xFbGVtZW50KiBlKQoreworICAgIC8vIENoZWNrIGZvciB0aGUgc3BlY2lhbCBjYXNlIHdoZXJl
IHRoaXMgZWxlbWVudCBpcyB0aGUgdmVyeSBsYXN0IHRoaW5nIGluCisgICAgLy8gdGhlIGZvcm0n
cyB0cmVlIG9mIGNoaWxkcmVuOyB3ZSBkb24ndCB3YW50IHRvIHdhbGsgdGhlIGVudGlyZSB0cmVl
IGluIHRoYXQKKyAgICAvLyBjb21tb24gY2FzZSB0aGF0IG9jY3VycyBkdXJpbmcgcGFyc2luZzsg
aW5zdGVhZCB3ZSdsbCBqdXN0IHJldHVybiBhIHZhbHVlCisgICAgLy8gdGhhdCBzYXlzICJhZGQg
dGhpcyBmb3JtIGVsZW1lbnQgdG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkiLgorICAgIGlmIChlLT50
cmF2ZXJzZU5leHROb2RlKHRoaXMpKSB7CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAg
ICBmb3IgKE5vZGUqIG5vZGUgPSB0aGlzOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0
Tm9kZSh0aGlzKSkgeworICAgICAgICAgICAgaWYgKG5vZGUgPT0gZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gaTsKKyAgICAgICAgICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkKKyAgICAg
ICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5pc0Zvcm1Db250
cm9sRWxlbWVudCgpCisgICAgICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQqPihub2RlKS0+Zm9ybSgpID09IHRoaXMpCisgICAgICAgICAgICAgICAg
KytpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmb3JtRWxlbWVudHMuc2l6ZSgpOwor
fQorCit2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVnaXN0ZXJGb3JtRWxlbWVudChIVE1MRm9ybUNv
bnRyb2xFbGVtZW50KiBlKQoreworICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMo
KS5yZW1vdmVCdXR0b24oZSk7CisgICAgbV9jaGVja2VkUmFkaW9CdXR0b25zLmFkZEJ1dHRvbihl
KTsKKyAgICBmb3JtRWxlbWVudHMuaW5zZXJ0KGZvcm1FbGVtZW50SW5kZXgoZSksIGUpOworfQor
Cit2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVtb3ZlRm9ybUVsZW1lbnQoSFRNTEZvcm1Db250cm9s
RWxlbWVudCogZSkKK3sKKyAgICBtX2NoZWNrZWRSYWRpb0J1dHRvbnMucmVtb3ZlQnV0dG9uKGUp
OworICAgIHJlbW92ZUZyb21WZWN0b3IoZm9ybUVsZW1lbnRzLCBlKTsKK30KKworYm9vbCBIVE1M
Rm9ybUVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikgY29uc3QKK3sKKyAg
ICByZXR1cm4gYXR0ci0+bmFtZSgpID09IGFjdGlvbkF0dHI7Cit9CisKK3ZvaWQgSFRNTEZvcm1F
bGVtZW50OjpyZWdpc3RlckltZ0VsZW1lbnQoSFRNTEltYWdlRWxlbWVudCogZSkKK3sKKyAgICBp
bWdFbGVtZW50cy5hcHBlbmQoZSk7Cit9CisKK3ZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZW1vdmVJ
bWdFbGVtZW50KEhUTUxJbWFnZUVsZW1lbnQqIGUpCit7CisgICAgcmVtb3ZlRnJvbVZlY3Rvcihp
bWdFbGVtZW50cywgZSk7Cit9CisKK1Bhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IEhUTUxGb3Jt
RWxlbWVudDo6ZWxlbWVudHMoKQoreworICAgIHJldHVybiBIVE1MRm9ybUNvbGxlY3Rpb246OmNy
ZWF0ZSh0aGlzKTsKK30KKworU3RyaW5nIEhUTUxGb3JtRWxlbWVudDo6bmFtZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShuYW1lQXR0cik7Cit9CisKK3ZvaWQgSFRNTEZvcm1F
bGVtZW50OjpzZXROYW1lKGNvbnN0IFN0cmluZyAmdmFsdWUpCit7CisgICAgc2V0QXR0cmlidXRl
KG5hbWVBdHRyLCB2YWx1ZSk7Cit9CisKK3ZvaWQgSFRNTEZvcm1FbGVtZW50OjpzZXRBY2NlcHRD
aGFyc2V0KGNvbnN0IFN0cmluZyAmdmFsdWUpCit7CisgICAgc2V0QXR0cmlidXRlKGFjY2VwdF9j
aGFyc2V0QXR0ciwgdmFsdWUpOworfQorCitTdHJpbmcgSFRNTEZvcm1FbGVtZW50OjphY3Rpb24o
KSBjb25zdAoreworICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYWN0aW9uQXR0cik7Cit9CisKK3Zv
aWQgSFRNTEZvcm1FbGVtZW50OjpzZXRBY3Rpb24oY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3sKKyAg
ICBzZXRBdHRyaWJ1dGUoYWN0aW9uQXR0ciwgdmFsdWUpOworfQorCit2b2lkIEhUTUxGb3JtRWxl
bWVudDo6c2V0RW5jdHlwZShjb25zdCBTdHJpbmcgJnZhbHVlKQoreworICAgIHNldEF0dHJpYnV0
ZShlbmN0eXBlQXR0ciwgdmFsdWUpOworfQorCitTdHJpbmcgSFRNTEZvcm1FbGVtZW50OjptZXRo
b2QoKSBjb25zdAoreworICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobWV0aG9kQXR0cik7Cit9CisK
K3ZvaWQgSFRNTEZvcm1FbGVtZW50OjpzZXRNZXRob2QoY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3sK
KyAgICBzZXRBdHRyaWJ1dGUobWV0aG9kQXR0ciwgdmFsdWUpOworfQorCitTdHJpbmcgSFRNTEZv
cm1FbGVtZW50Ojp0YXJnZXQoKSBjb25zdAoreworICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodGFy
Z2V0QXR0cik7Cit9CisKK3ZvaWQgSFRNTEZvcm1FbGVtZW50OjpzZXRUYXJnZXQoY29uc3QgU3Ry
aW5nICZ2YWx1ZSkKK3sKKyAgICBzZXRBdHRyaWJ1dGUodGFyZ2V0QXR0ciwgdmFsdWUpOworfQor
CitQYXNzUmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+IEhUTUxGb3JtRWxlbWVudDo6ZWxl
bWVudEZvckFsaWFzKGNvbnN0IEF0b21pY1N0cmluZyYgYWxpYXMpCit7CisgICAgaWYgKGFsaWFz
LmlzRW1wdHkoKSB8fCAhbV9lbGVtZW50QWxpYXNlcykKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIG1fZWxlbWVudEFsaWFzZXMtPmdldChhbGlhcy5pbXBsKCkpOworfQorCit2b2lkIEhU
TUxGb3JtRWxlbWVudDo6YWRkRWxlbWVudEFsaWFzKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVs
ZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgYWxpYXMpCit7CisgICAgaWYgKGFsaWFzLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghbV9lbGVtZW50QWxpYXNlcykKKyAgICAg
ICAgbV9lbGVtZW50QWxpYXNlcyA9IG5ldyBBbGlhc01hcDsKKyAgICBtX2VsZW1lbnRBbGlhc2Vz
LT5zZXQoYWxpYXMuaW1wbCgpLCBlbGVtZW50KTsKK30KKwordm9pZCBIVE1MRm9ybUVsZW1lbnQ6
OmdldE5hbWVkRWxlbWVudHMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBWZWN0b3I8UmVmUHRy
PE5vZGU+ID4mIG5hbWVkSXRlbXMpCit7CisgICAgZWxlbWVudHMoKS0+bmFtZWRJdGVtcyhuYW1l
LCBuYW1lZEl0ZW1zKTsKKworICAgIC8vIHNlZSBpZiB3ZSBoYXZlIHNlZW4gc29tZXRoaW5nIHdp
dGggdGhpcyBuYW1lIGJlZm9yZQorICAgIFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiBh
bGlhc0VsZW07CisgICAgaWYgKGFsaWFzRWxlbSA9IGVsZW1lbnRGb3JBbGlhcyhuYW1lKSkgewor
ICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgbiA9IDA7
IG4gPCBuYW1lZEl0ZW1zLnNpemUoKTsgbisrKSB7CisgICAgICAgICAgICBpZiAobmFtZWRJdGVt
c1tuXSA9PSBhbGlhc0VsZW0uZ2V0KCkpIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgIC8vIHdlIGhhdmUgc2VlbiBpdCBiZWZvcmUgYnV0
IGl0IGlzIGdvbmUgbm93LiBzdGlsbCwgd2UgbmVlZCB0byByZXR1cm4gaXQuCisgICAgICAgICAg
ICBuYW1lZEl0ZW1zLmFwcGVuZChhbGlhc0VsZW0uZ2V0KCkpOworICAgIH0KKyAgICAvLyBuYW1l
IGhhcyBiZWVuIGFjY2Vzc2VkLCByZW1lbWJlciBpdAorICAgIGlmIChuYW1lZEl0ZW1zLnNpemUo
KSAmJiBhbGlhc0VsZW0gIT0gbmFtZWRJdGVtcy5maXJzdCgpKQorICAgICAgICBhZGRFbGVtZW50
QWxpYXMoc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KG5hbWVkSXRlbXMuZmly
c3QoKS5nZXQoKSksIG5hbWUpOyAgICAgICAgCit9CisKK3ZvaWQgSFRNTEZvcm1FbGVtZW50Ojpk
b2N1bWVudERpZEJlY29tZUFjdGl2ZSgpCit7CisgICAgQVNTRVJUKCFtX2F1dG9jb21wbGV0ZSk7
CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1FbGVtZW50cy5zaXplKCk7
ICsraSkKKyAgICAgICAgZm9ybUVsZW1lbnRzW2ldLT5yZXNldCgpOworfQorCit2b2lkIEhUTUxG
b3JtRWxlbWVudDo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKQoreworICAgIGlmICghbV9h
dXRvY29tcGxldGUpCisgICAgICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JEb2N1bWVudEFj
dGl2YXRpb25DYWxsYmFja3ModGhpcyk7Cit9CisKK3ZvaWQgSFRNTEZvcm1FbGVtZW50OjpkaWRN
b3ZlVG9OZXdPd25lckRvY3VtZW50KCkKK3sKKyAgICBpZihtX2F1dG9jb21wbGV0ZSkKKyAgICAg
ICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JEb2N1bWVudEFjdGl2YXRpb25DYWxsYmFja3ModGhp
cyk7Cit9CisKK3ZvaWQgSFRNTEZvcm1FbGVtZW50OjpDaGVja2VkUmFkaW9CdXR0b25zOjphZGRC
dXR0b24oSFRNTEZvcm1Db250cm9sRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICAvLyBXZSBvbmx5
IHdhbnQgdG8gYWRkIHJhZGlvIGJ1dHRvbnMuCisgICAgaWYgKCFlbGVtZW50LT5pc1JhZGlvQnV0
dG9uKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdpdGhvdXQgYSBuYW1lLCB0aGVyZSBp
cyBubyBncm91cC4KKyAgICBpZiAoZWxlbWVudC0+bmFtZSgpLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gc3RhdGljX2Nh
c3Q8SFRNTElucHV0RWxlbWVudCo+KGVsZW1lbnQpOworCisgICAgLy8gV2Ugb25seSB0cmFjayBj
aGVja2VkIGJ1dHRvbnMuCisgICAgaWYgKCFpbnB1dEVsZW1lbnQtPmNoZWNrZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCFtX25hbWVUb0NoZWNrZWRSYWRpb0J1dHRvbk1hcCkKKyAg
ICAgICAgbV9uYW1lVG9DaGVja2VkUmFkaW9CdXR0b25NYXAuc2V0KG5ldyBOYW1lVG9JbnB1dE1h
cCk7CisKKyAgICBwYWlyPE5hbWVUb0lucHV0TWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0g
bV9uYW1lVG9DaGVja2VkUmFkaW9CdXR0b25NYXAtPmFkZChlbGVtZW50LT5uYW1lKCkuaW1wbCgp
LCBpbnB1dEVsZW1lbnQpOworICAgIGlmIChyZXN1bHQuc2Vjb25kKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgSFRNTElucHV0RWxlbWVudCogb2xkQ2hlY2tlZEJ1dHRvbiA9IHJlc3VsdC5m
aXJzdC0+c2Vjb25kOworICAgIGlmIChvbGRDaGVja2VkQnV0dG9uID09IGlucHV0RWxlbWVudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgcmVzdWx0LmZpcnN0LT5zZWNvbmQgPSBpbnB1dEVsZW1l
bnQ7CisgICAgb2xkQ2hlY2tlZEJ1dHRvbi0+c2V0Q2hlY2tlZChmYWxzZSk7Cit9CisKK0hUTUxJ
bnB1dEVsZW1lbnQqIEhUTUxGb3JtRWxlbWVudDo6Q2hlY2tlZFJhZGlvQnV0dG9uczo6Y2hlY2tl
ZEJ1dHRvbkZvckdyb3VwKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fbmFtZVRvQ2hlY2tlZFJhZGlvQnV0dG9uTWFwKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICAKKyAgICByZXR1cm4gbV9uYW1lVG9DaGVja2VkUmFkaW9CdXR0b25NYXAtPmdldChuYW1lLmlt
cGwoKSk7Cit9CisKK3ZvaWQgSFRNTEZvcm1FbGVtZW50OjpDaGVja2VkUmFkaW9CdXR0b25zOjpy
ZW1vdmVCdXR0b24oSFRNTEZvcm1Db250cm9sRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBpZiAo
ZWxlbWVudC0+bmFtZSgpLmlzRW1wdHkoKSB8fCAhbV9uYW1lVG9DaGVja2VkUmFkaW9CdXR0b25N
YXApCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBOYW1lVG9JbnB1dE1hcDo6aXRlcmF0b3Ig
aXQgPSBtX25hbWVUb0NoZWNrZWRSYWRpb0J1dHRvbk1hcC0+ZmluZChlbGVtZW50LT5uYW1lKCku
aW1wbCgpKTsKKyAgICBpZiAoaXQgPT0gbV9uYW1lVG9DaGVja2VkUmFkaW9CdXR0b25NYXAtPmVu
ZCgpIHx8IGl0LT5zZWNvbmQgIT0gZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdG9JbnB1dEVsZW1lbnQoZWxlbWVudCk7Cisg
ICAgQVNTRVJUX1VOVVNFRChpbnB1dEVsZW1lbnQsIGlucHV0RWxlbWVudCk7CisgICAgQVNTRVJU
KGlucHV0RWxlbWVudC0+aXNDaGVja2VkKCkpOworICAgIEFTU0VSVChlbGVtZW50LT5pc1JhZGlv
QnV0dG9uKCkpOworCisgICAgbV9uYW1lVG9DaGVja2VkUmFkaW9CdXR0b25NYXAtPnJlbW92ZShp
dCk7CisgICAgaWYgKG1fbmFtZVRvQ2hlY2tlZFJhZGlvQnV0dG9uTWFwLT5pc0VtcHR5KCkpCisg
ICAgICAgIG1fbmFtZVRvQ2hlY2tlZFJhZGlvQnV0dG9uTWFwLmNsZWFyKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcAkocmV2aXNpb24g
NDIwNzMpCisrKyBXZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw5ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9s
bCAoa25vbGxAa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAo
a29pdmlzdG9Aa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11
ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgICAgICAgICAgKEMpIDIw
MDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQorICogQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjMsNTkyICsxOSwxMyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJDaGVja2VkUmFkaW9C
dXR0b25zLmgiCiAKLSNpbmNsdWRlICJDU1NIZWxwZXIuaCIKLSNpbmNsdWRlICJDaHJvbWVDbGll
bnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV2ZW50LmgiCi0jaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkZpbGVMaXN0LmgiCi0jaW5jbHVkZSAiRmlsZVN5
c3RlbS5oIgotI2luY2x1ZGUgIkZvcm1EYXRhLmgiCi0jaW5jbHVkZSAiRm9ybURhdGFMaXN0Lmgi
Ci0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUg
IkhUTUxEb2N1bWVudC5oIgotI2luY2x1ZGUgIkhUTUxGb3JtQ29sbGVjdGlvbi5oIgotI2luY2x1
ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCi0j
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2lu
Y2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgotI2luY2x1ZGUg
PHd0Zi9DdXJyZW50VGltZS5oPgotI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXIuaD4KLQotI2lu
Y2x1ZGUgPGxpbWl0cz4KLQotI2lmIFBMQVRGT1JNKFdYKQotI2luY2x1ZGUgPHd4L2RlZnMuaD4K
LSNpbmNsdWRlIDx3eC9maWxlbmFtZS5oPgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU5fT1Mp
Ci0jaW5jbHVkZSA8c2hsd2FwaS5oPgotI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLQotc3RhdGljIGludDY0X3QgZ2VuZXJhdGVGb3Jt
RGF0YUlkZW50aWZpZXIoKQotewotICAgIC8vIEluaXRpYWxpemUgdG8gdGhlIGN1cnJlbnQgdGlt
ZSB0byByZWR1Y2UgdGhlIGxpa2VsaWhvb2Qgb2YgZ2VuZXJhdGluZwotICAgIC8vIGlkZW50aWZp
ZXJzIHRoYXQgb3ZlcmxhcCB3aXRoIHRob3NlIGZyb20gcGFzdC9mdXR1cmUgYnJvd3NlciBzZXNz
aW9ucy4KLSAgICBzdGF0aWMgaW50NjRfdCBuZXh0SWRlbnRpZmllciA9IHN0YXRpY19jYXN0PGlu
dDY0X3Q+KGN1cnJlbnRUaW1lKCkgKiAxMDAwMDAwLjApOwotICAgIHJldHVybiArK25leHRJZGVu
dGlmaWVyOwotfQotCi1IVE1MRm9ybUVsZW1lbnQ6OkhUTUxGb3JtRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQotICAgIDogSFRNTEVsZW1lbnQodGFn
TmFtZSwgZG9jKQotICAgICwgbV9lbGVtZW50QWxpYXNlcygwKQotICAgICwgY29sbGVjdGlvbklu
Zm8oMCkKLSAgICAsIG1fYXV0b2NvbXBsZXRlKHRydWUpCi0gICAgLCBtX2luc3VibWl0KGZhbHNl
KQotICAgICwgbV9kb2luZ3N1Ym1pdChmYWxzZSkKLSAgICAsIG1faW5yZXNldChmYWxzZSkKLSAg
ICAsIG1fbWFsZm9ybWVkKGZhbHNlKQotewotICAgIEFTU0VSVChoYXNUYWdOYW1lKGZvcm1UYWcp
KTsKLX0KLQotSFRNTEZvcm1FbGVtZW50Ojp+SFRNTEZvcm1FbGVtZW50KCkKLXsKLSAgICBpZiAo
IW1fYXV0b2NvbXBsZXRlKQotICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yRG9jdW1l
bnRBY3RpdmF0aW9uQ2FsbGJhY2tzKHRoaXMpOwotCi0gICAgZGVsZXRlIG1fZWxlbWVudEFsaWFz
ZXM7Ci0gICAgZGVsZXRlIGNvbGxlY3Rpb25JbmZvOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGZvcm1FbGVtZW50cy5zaXplKCk7ICsraSkKLSAgICAgICAgZm9ybUVsZW1lbnRzW2ld
LT5mb3JtRGVzdHJveWVkKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGltZ0VsZW1l
bnRzLnNpemUoKTsgKytpKQotICAgICAgICBpbWdFbGVtZW50c1tpXS0+bV9mb3JtID0gMDsKLX0K
LQotYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OmZvcm1Xb3VsZEhhdmVTZWN1cmVTdWJtaXNzaW9uKGNv
bnN0IFN0cmluZyYgdXJsKQotewotICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1
cmwpLnByb3RvY29sSXMoImh0dHBzIik7Ci19Ci0KLXZvaWQgSFRNTEZvcm1FbGVtZW50OjphdHRh
Y2goKQotewotICAgIEhUTUxFbGVtZW50OjphdHRhY2goKTsKLX0KLQotdm9pZCBIVE1MRm9ybUVs
ZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKLXsKLSAgICBpZiAoZG9jdW1lbnQoKS0+aXNI
VE1MRG9jdW1lbnQoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oZG9jdW1l
bnQoKSktPmFkZE5hbWVkSXRlbShtX25hbWUpOwotCi0gICAgSFRNTEVsZW1lbnQ6Omluc2VydGVk
SW50b0RvY3VtZW50KCk7Ci19Ci0KLXZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZW1vdmVkRnJvbURv
Y3VtZW50KCkKLXsKLSAgICBpZiAoZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAg
ICAgc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oZG9jdW1lbnQoKSktPnJlbW92ZU5hbWVkSXRl
bShtX25hbWUpOwotICAgCi0gICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsK
LX0KLQotdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50KiBldmVu
dCwgYm9vbCB1c2VDYXB0dXJlKQotewotICAgIE5vZGUqIHRhcmdldE5vZGUgPSBldmVudC0+dGFy
Z2V0KCktPnRvTm9kZSgpOwotICAgIGlmICghdXNlQ2FwdHVyZSAmJiB0YXJnZXROb2RlICYmIHRh
cmdldE5vZGUgIT0gdGhpcyAmJiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuc3VibWl0
RXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkucmVzZXRFdmVudCkpIHsKLSAg
ICAgICAgZXZlbnQtPnN0b3BQcm9wYWdhdGlvbigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIEhUTUxFbGVtZW50OjpoYW5kbGVMb2NhbEV2ZW50cyhldmVudCwgdXNlQ2FwdHVyZSk7Ci19
Ci0KLXVuc2lnbmVkIEhUTUxGb3JtRWxlbWVudDo6bGVuZ3RoKCkgY29uc3QKLXsKLSAgICBpbnQg
bGVuID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybUVsZW1lbnRzLnNpemUo
KTsgKytpKQotICAgICAgICBpZiAoZm9ybUVsZW1lbnRzW2ldLT5pc0VudW1lcmF0YWJsZSgpKQot
ICAgICAgICAgICAgKytsZW47Ci0KLSAgICByZXR1cm4gbGVuOwotfQotCi1Ob2RlKiBIVE1MRm9y
bUVsZW1lbnQ6Oml0ZW0odW5zaWduZWQgaW5kZXgpCi17Ci0gICAgcmV0dXJuIGVsZW1lbnRzKCkt
Pml0ZW0oaW5kZXgpOwotfQotCi12b2lkIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0Q2xpY2soRXZl
bnQqIGV2ZW50KQotewotICAgIGJvb2wgc3VibWl0Rm91bmQgPSBmYWxzZTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZm9ybUVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlm
IChmb3JtRWxlbWVudHNbaV0tPmhhc0xvY2FsTmFtZShpbnB1dFRhZykpIHsKLSAgICAgICAgICAg
IEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50
Kj4oZm9ybUVsZW1lbnRzW2ldKTsKLSAgICAgICAgICAgIGlmIChlbGVtZW50LT5pc1N1Y2Nlc3Nm
dWxTdWJtaXRCdXR0b24oKSAmJiBlbGVtZW50LT5yZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICAg
ICAgc3VibWl0Rm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGVsZW1lbnQtPmRpc3BhdGNo
U2ltdWxhdGVkQ2xpY2soZXZlbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGlmICghc3VibWl0Rm91bmQpIC8vIHN1Ym1pdCB0
aGUgZm9ybSB3aXRob3V0IGEgc3VibWl0IG9yIGltYWdlIGlucHV0Ci0gICAgICAgIHByZXBhcmVT
dWJtaXQoZXZlbnQpOwotfQotCi1UZXh0RW5jb2RpbmcgSFRNTEZvcm1FbGVtZW50OjpkYXRhRW5j
b2RpbmcoKSBjb25zdAotewotICAgIGlmIChpc01haWx0b0Zvcm0oKSkKLSAgICAgICAgcmV0dXJu
IFVURjhFbmNvZGluZygpOwotCi0gICAgcmV0dXJuIG1fZm9ybURhdGFCdWlsZGVyLmRhdGFFbmNv
ZGluZyhkb2N1bWVudCgpKTsKLX0KLQotUGFzc1JlZlB0cjxGb3JtRGF0YT4gSFRNTEZvcm1FbGVt
ZW50OjpjcmVhdGVGb3JtRGF0YShjb25zdCBDU3RyaW5nJiBib3VuZGFyeSkKLXsKLSAgICBWZWN0
b3I8Y2hhcj4gZW5jb2RlZERhdGE7Ci0gICAgVGV4dEVuY29kaW5nIGVuY29kaW5nID0gZGF0YUVu
Y29kaW5nKCkuZW5jb2RpbmdGb3JGb3JtU3VibWlzc2lvbigpOwotCi0gICAgUmVmUHRyPEZvcm1E
YXRhPiByZXN1bHQgPSBGb3JtRGF0YTo6Y3JlYXRlKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZm9ybUVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBmb3JtRWxlbWVudHNbaV07Ci0gICAgICAgIEZvcm1EYXRh
TGlzdCBsaXN0KGVuY29kaW5nKTsKLQotICAgICAgICBpZiAoIWNvbnRyb2wtPmRpc2FibGVkKCkg
JiYgY29udHJvbC0+YXBwZW5kRm9ybURhdGEobGlzdCwgbV9mb3JtRGF0YUJ1aWxkZXIuaXNNdWx0
aVBhcnRGb3JtKCkpKSB7Ci0gICAgICAgICAgICBzaXplX3QgZm9ybURhdGFMaXN0U2l6ZSA9IGxp
c3QubGlzdCgpLnNpemUoKTsKLSAgICAgICAgICAgIEFTU0VSVChmb3JtRGF0YUxpc3RTaXplICUg
MiA9PSAwKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgZm9ybURhdGFMaXN0
U2l6ZTsgaiArPSAyKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgRm9ybURhdGFMaXN0OjpJdGVt
JiBrZXkgPSBsaXN0Lmxpc3QoKVtqXTsKLSAgICAgICAgICAgICAgICBjb25zdCBGb3JtRGF0YUxp
c3Q6Okl0ZW0mIHZhbHVlID0gbGlzdC5saXN0KClbaiArIDFdOwotICAgICAgICAgICAgICAgIGlm
ICghbV9mb3JtRGF0YUJ1aWxkZXIuaXNNdWx0aVBhcnRGb3JtKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gT21pdCB0aGUgbmFtZSAiaXNpbmRleCIgaWYgaXQncyB0aGUgZmlyc3QgZm9ybSBk
YXRhIGVsZW1lbnQuCi0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBh
IGdvb2QgcnVsZT8gSXMgdGhpcyBvYnNvbGV0ZSBub3c/Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChlbmNvZGVkRGF0YS5pc0VtcHR5KCkgJiYga2V5LmRhdGEoKSA9PSAiaXNpbmRleCIpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURh
dGEoZW5jb2RlZERhdGEsIHZhbHVlLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fZm9ybURhdGFCdWlsZGVyLmFkZEtleVZhbHVlUGFp
ckFzRm9ybURhdGEoZW5jb2RlZERhdGEsIGtleS5kYXRhKCksIHZhbHVlLmRhdGEoKSk7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGhl
YWRlcjsKLSAgICAgICAgICAgICAgICAgICAgbV9mb3JtRGF0YUJ1aWxkZXIuYmVnaW5NdWx0aVBh
cnRIZWFkZXIoaGVhZGVyLCBib3VuZGFyeSwga2V5LmRhdGEoKSk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gaWYgdGhlIGN1cnJlbnQgdHlwZSBpcyBGSUxFLCB0aGVuIHdlIGFsc28gbmVlZCB0byBp
bmNsdWRlIHRoZSBmaWxlbmFtZQotICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuZmlsZSgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSB2YWx1ZS5m
aWxlKCktPnBhdGgoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBmaWxlTmFtZSA9
IHZhbHVlLmZpbGUoKS0+ZmlsZU5hbWUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
TGV0IHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZ5IGEgZmlsZW5hbWUgaWYgaXQncyBnb2luZyB0byBn
ZW5lcmF0ZSBhIHJlcGxhY2VtZW50IGZpbGUgZm9yIHRoZSB1cGxvYWQuCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLT5wYWdlKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGdlbmVyYXRlZEZpbGVOYW1lOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRHZW5lcmF0ZUZpbGUgPSBwYWdlLT5jaHJvbWUo
KS0+Y2xpZW50KCktPnNob3VsZFJlcGxhY2VXaXRoR2VuZXJhdGVkRmlsZUZvclVwbG9hZChwYXRo
LCBnZW5lcmF0ZWRGaWxlTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChzaG91bGRHZW5lcmF0ZUZpbGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaWxlTmFtZSA9IGdlbmVyYXRlZEZpbGVOYW1lOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gV2UgaGF2ZSB0byBpbmNsdWRlIHRoZSBmaWxlbmFtZT0iLi4iIHBhcnQgaW4gdGhlIGhl
YWRlciwgZXZlbiBpZiB0aGUgZmlsZW5hbWUgaXMgZW1wdHkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZm9ybURhdGFCdWlsZGVyLmFkZEZpbGVuYW1lVG9NdWx0aVBhcnRIZWFkZXIoaGVhZGVy
LCBlbmNvZGluZywgZmlsZU5hbWUpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZp
bGVOYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBUaGUgTUlNRVR5cGVSZWdpc3RyeSBmdW5jdGlvbidzIG5hbWUgbWFrZXMgaXQgc291bmQgbGlr
ZSBpdCB0YWtlcyBhIHBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90IGp1
c3QgYSBiYXNlbmFtZS4gQnV0IGZpbGVuYW1lIGlzIG5vdCB0aGUgcGF0aC4gQnV0IG5vdGUgdGhh
dCBpdCdzIG5vdCBzYWZlIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCB1
c2UgcGF0aCBpbnN0ZWFkIHNpbmNlIGluIHRoZSBnZW5lcmF0ZWQtZmlsZSBjYXNlIGl0IHdpbGwg
bm90IHJlZmxlY3QgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTUlNRSB0eXBl
IG9mIHRoZSBnZW5lcmF0ZWQgZmlsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJp
bmcgbWltZVR5cGUgPSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgoZmlsZU5h
bWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWltZVR5cGUuaXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Zvcm1EYXRhQnVpbGRlci5hZGRD
b250ZW50VHlwZVRvTXVsdGlQYXJ0SGVhZGVyKGhlYWRlciwgbWltZVR5cGUubGF0aW4xKCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgbV9mb3JtRGF0YUJ1aWxkZXIuZmluaXNoTXVsdGlQYXJ0SGVhZGVyKGhl
YWRlcik7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gQXBwZW5kIGJvZHkKLSAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LT5hcHBlbmREYXRhKGhlYWRlci5kYXRhKCksIGhlYWRlci5zaXplKCkp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoc2l6ZV90IGRhdGFTaXplID0gdmFsdWUuZGF0YSgp
Lmxlbmd0aCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmREYXRhKHZh
bHVlLmRhdGEoKS5kYXRhKCksIGRhdGFTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAodmFsdWUuZmlsZSgpICYmICF2YWx1ZS5maWxlKCktPnBhdGgoKS5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZEZpbGUodmFsdWUuZmlsZSgpLT5wYXRo
KCksIHNob3VsZEdlbmVyYXRlRmlsZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5h
cHBlbmREYXRhKCJcclxuIiwgMik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1fZm9ybURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0
Rm9ybSgpKQotICAgICAgICBtX2Zvcm1EYXRhQnVpbGRlci5hZGRCb3VuZGFyeVRvTXVsdGlQYXJ0
SGVhZGVyKGVuY29kZWREYXRhLCBib3VuZGFyeSwgdHJ1ZSk7Ci0KLSAgICByZXN1bHQtPmFwcGVu
ZERhdGEoZW5jb2RlZERhdGEuZGF0YSgpLCBlbmNvZGVkRGF0YS5zaXplKCkpOwotCi0gICAgcmVz
dWx0LT5zZXRJZGVudGlmaWVyKGdlbmVyYXRlRm9ybURhdGFJZGVudGlmaWVyKCkpOwotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgSFRNTEZvcm1FbGVtZW50Ojppc01haWx0b0Zvcm0oKSBj
b25zdAotewotICAgIHJldHVybiBwcm90b2NvbElzKG1fdXJsLCAibWFpbHRvIik7Ci19Ci0KLWJv
b2wgSFRNTEZvcm1FbGVtZW50OjpwcmVwYXJlU3VibWl0KEV2ZW50KiBldmVudCkKLXsKLSAgICBG
cmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIGlmIChtX2luc3VibWl0IHx8
ICFmcmFtZSkKLSAgICAgICAgcmV0dXJuIG1faW5zdWJtaXQ7Ci0KLSAgICBtX2luc3VibWl0ID0g
dHJ1ZTsKLSAgICBtX2RvaW5nc3VibWl0ID0gZmFsc2U7Ci0KLSAgICBpZiAoZGlzcGF0Y2hFdmVu
dEZvclR5cGUoZXZlbnROYW1lcygpLnN1Ym1pdEV2ZW50LCB0cnVlLCB0cnVlKSAmJiAhbV9kb2lu
Z3N1Ym1pdCkKLSAgICAgICAgbV9kb2luZ3N1Ym1pdCA9IHRydWU7Ci0KLSAgICBtX2luc3VibWl0
ID0gZmFsc2U7Ci0KLSAgICBpZiAobV9kb2luZ3N1Ym1pdCkKLSAgICAgICAgc3VibWl0KGV2ZW50
LCB0cnVlKTsKLQotICAgIHJldHVybiBtX2RvaW5nc3VibWl0OwotfQotCi1zdGF0aWMgdm9pZCB0
cmFuc2Zlck1haWx0b1Bvc3RGb3JtRGF0YVRvVVJMKFJlZlB0cjxGb3JtRGF0YT4mIGRhdGEsIEtV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiBlbmNvZGluZ1R5cGUpCi17Ci0gICAgU3RyaW5nIGJvZHkg
PSBkYXRhLT5mbGF0dGVuVG9TdHJpbmcoKTsKLSAgICBkYXRhID0gRm9ybURhdGE6OmNyZWF0ZSgp
OwotCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGVuY29kaW5nVHlwZSwgInRleHQvcGxhaW4i
KSkgewotICAgICAgICAvLyBDb252ZW50aW9uIHNlZW1zIHRvIGJlIHRvIGRlY29kZSwgYW5kIHMv
Ji9cclxuLy4gQWxzbywgc3BhY2VzIGFyZSBlbmNvZGVkIGFzICUyMC4KLSAgICAgICAgYm9keSA9
IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhib2R5LnJlcGxhY2UoJyYnLCAiXHJcbiIpLnJlcGxh
Y2UoJysnLCAnICcpICsgIlxyXG4iKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8Y2hhcj4gYm9keURh
dGE7Ci0gICAgYm9keURhdGEuYXBwZW5kKCJib2R5PSIsIDUpOwotICAgIEZvcm1EYXRhQnVpbGRl
cjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YShib2R5RGF0YSwgYm9keS51dGY4KCkpOwotICAgIGJv
ZHkgPSBTdHJpbmcoYm9keURhdGEuZGF0YSgpLCBib2R5RGF0YS5zaXplKCkpLnJlcGxhY2UoJysn
LCAiJTIwIik7Ci0KLSAgICBTdHJpbmcgcXVlcnkgPSB1cmwucXVlcnkoKTsKLSAgICBpZiAoIXF1
ZXJ5LmlzRW1wdHkoKSkKLSAgICAgICAgcXVlcnkuYXBwZW5kKCcmJyk7Ci0gICAgcXVlcnkuYXBw
ZW5kKGJvZHkpOwotICAgIHVybC5zZXRRdWVyeShxdWVyeSk7Ci19Ci0KLXZvaWQgSFRNTEZvcm1F
bGVtZW50OjpzdWJtaXQoRXZlbnQqIGV2ZW50LCBib29sIGFjdGl2YXRlU3VibWl0QnV0dG9uLCBi
b29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QpCi17Ci0gICAgRnJhbWVW
aWV3KiB2aWV3ID0gZG9jdW1lbnQoKS0+dmlldygpOwotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3Vt
ZW50KCktPmZyYW1lKCk7Ci0gICAgaWYgKCF2aWV3IHx8ICFmcmFtZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1faW5zdWJtaXQpIHsKLSAgICAgICAgbV9kb2luZ3N1Ym1pdCA9IHRydWU7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2luc3VibWl0ID0gdHJ1ZTsKLQotICAg
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGZpcnN0U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbiA9IDA7
Ci0gICAgYm9vbCBuZWVkQnV0dG9uQWN0aXZhdGlvbiA9IGFjdGl2YXRlU3VibWl0QnV0dG9uOyAv
LyBkbyB3ZSBuZWVkIHRvIGFjdGl2YXRlIGEgc3VibWl0IGJ1dHRvbj8KLSAgICAKLSAgICBmcmFt
ZS0+bG9hZGVyKCktPmNsZWFyUmVjb3JkZWRGb3JtVmFsdWVzKCk7Ci0gICAgZnJhbWUtPmxvYWRl
cigpLT5zZXRGb3JtQWJvdXRUb0JlU3VibWl0dGVkKHRoaXMpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBmb3JtRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSFRNTEZvcm1D
b250cm9sRWxlbWVudCogY29udHJvbCA9IGZvcm1FbGVtZW50c1tpXTsKLSAgICAgICAgaWYgKGNv
bnRyb2wtPmhhc0xvY2FsTmFtZShpbnB1dFRhZykpIHsKLSAgICAgICAgICAgIEhUTUxJbnB1dEVs
ZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGNvbnRyb2wpOwot
ICAgICAgICAgICAgaWYgKGlucHV0LT5pc1RleHRGaWVsZCgpKSB7Ci0gICAgICAgICAgICAgICAg
ZnJhbWUtPmxvYWRlcigpLT5yZWNvcmRGb3JtVmFsdWUoaW5wdXQtPm5hbWUoKSwgaW5wdXQtPnZh
bHVlKCkpOwotICAgICAgICAgICAgICAgIGlmIChpbnB1dC0+aXNTZWFyY2hGaWVsZCgpKQotICAg
ICAgICAgICAgICAgICAgICBpbnB1dC0+YWRkU2VhcmNoUmVzdWx0KCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG5lZWRCdXR0b25BY3RpdmF0aW9uKSB7Ci0gICAgICAg
ICAgICBpZiAoY29udHJvbC0+aXNBY3RpdmF0ZWRTdWJtaXQoKSkKLSAgICAgICAgICAgICAgICBu
ZWVkQnV0dG9uQWN0aXZhdGlvbiA9IGZhbHNlOwotICAgICAgICAgICAgZWxzZSBpZiAoZmlyc3RT
dWNjZXNzZnVsU3VibWl0QnV0dG9uID09IDAgJiYgY29udHJvbC0+aXNTdWNjZXNzZnVsU3VibWl0
QnV0dG9uKCkpCi0gICAgICAgICAgICAgICAgZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0dG9uID0g
Y29udHJvbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChuZWVkQnV0dG9uQWN0aXZhdGlv
biAmJiBmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24pCi0gICAgICAgIGZpcnN0U3VjY2Vzc2Z1
bFN1Ym1pdEJ1dHRvbi0+c2V0QWN0aXZhdGVkU3VibWl0KHRydWUpOwotICAgIAotICAgIGlmICht
X3VybC5pc0VtcHR5KCkpCi0gICAgICAgIG1fdXJsID0gZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5n
KCk7Ci0KLSAgICBpZiAobV9mb3JtRGF0YUJ1aWxkZXIuaXNQb3N0TWV0aG9kKCkpIHsKLSAgICAg
ICAgaWYgKG1fZm9ybURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgpICYmIGlzTWFpbHRvRm9y
bSgpKSB7Ci0gICAgICAgICAgICBzZXRFbmN0eXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVy
bGVuY29kZWQiKTsKLSAgICAgICAgICAgIEFTU0VSVCghbV9mb3JtRGF0YUJ1aWxkZXIuaXNNdWx0
aVBhcnRGb3JtKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtX2Zvcm1EYXRhQnVpbGRl
ci5pc011bHRpUGFydEZvcm0oKSkgewotICAgICAgICAgICAgUmVmUHRyPEZvcm1EYXRhPiBkYXRh
ID0gY3JlYXRlRm9ybURhdGEoQ1N0cmluZygpKTsKLQotICAgICAgICAgICAgaWYgKGlzTWFpbHRv
Rm9ybSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgZm9ybSBkYXRhIGludG8g
YSBzdHJpbmcgdGhhdCB3ZSBwdXQgaW50byB0aGUgVVJMLgotICAgICAgICAgICAgICAgIEtVUkwg
dXJsID0gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwobV91cmwpOwotICAgICAgICAgICAgICAgIHRy
YW5zZmVyTWFpbHRvUG9zdEZvcm1EYXRhVG9VUkwoZGF0YSwgdXJsLCBtX2Zvcm1EYXRhQnVpbGRl
ci5lbmNvZGluZ1R5cGUoKSk7Ci0gICAgICAgICAgICAgICAgbV91cmwgPSB1cmwuc3RyaW5nKCk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c3VibWl0Rm9y
bSgiUE9TVCIsIG1fdXJsLCBkYXRhLnJlbGVhc2UoKSwgbV90YXJnZXQsIG1fZm9ybURhdGFCdWls
ZGVyLmVuY29kaW5nVHlwZSgpLCBTdHJpbmcoKSwgZXZlbnQsIGxvY2tIaXN0b3J5LCBsb2NrQmFj
a0ZvcndhcmRMaXN0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFZlY3RvcjxjaGFy
PiBib3VuZGFyeSA9IG1fZm9ybURhdGFCdWlsZGVyLmdlbmVyYXRlVW5pcXVlQm91bmRhcnlTdHJp
bmcoKTsKLSAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c3VibWl0Rm9ybSgiUE9TVCIsIG1f
dXJsLCBjcmVhdGVGb3JtRGF0YShib3VuZGFyeS5kYXRhKCkpLCBtX3RhcmdldCwgbV9mb3JtRGF0
YUJ1aWxkZXIuZW5jb2RpbmdUeXBlKCksIGJvdW5kYXJ5LmRhdGEoKSwgZXZlbnQsIGxvY2tIaXN0
b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIG1fZm9ybURhdGFCdWlsZGVyLnNldElzTXVsdGlQYXJ0Rm9ybShmYWxzZSk7Ci0gICAgICAg
IGZyYW1lLT5sb2FkZXIoKS0+c3VibWl0Rm9ybSgiR0VUIiwgbV91cmwsIGNyZWF0ZUZvcm1EYXRh
KENTdHJpbmcoKSksIG1fdGFyZ2V0LCBTdHJpbmcoKSwgU3RyaW5nKCksIGV2ZW50LCBsb2NrSGlz
dG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCk7Ci0gICAgfQotCi0gICAgaWYgKG5lZWRCdXR0b25B
Y3RpdmF0aW9uICYmIGZpcnN0U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbikKLSAgICAgICAgZmlyc3RT
dWNjZXNzZnVsU3VibWl0QnV0dG9uLT5zZXRBY3RpdmF0ZWRTdWJtaXQoZmFsc2UpOwotICAgIAot
ICAgIG1fZG9pbmdzdWJtaXQgPSBtX2luc3VibWl0ID0gZmFsc2U7Ci19Ci0KLXZvaWQgSFRNTEZv
cm1FbGVtZW50OjpyZXNldCgpCi17Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJh
bWUoKTsKLSAgICBpZiAobV9pbnJlc2V0IHx8ICFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9pbnJlc2V0ID0gdHJ1ZTsKLQotICAgIC8vICMjIyBET00yIGxhYmVscyB0aGlzIGV2ZW50
IGFzIG5vdCBjYW5jZWxhYmxlLCBob3dldmVyCi0gICAgLy8gY29tbW9uIGJyb3dzZXJzKCBzaWNr
ISApIGFsbG93IGl0IGJlIGNhbmNlbGxlZC4KLSAgICBpZiAoICFkaXNwYXRjaEV2ZW50Rm9yVHlw
ZShldmVudE5hbWVzKCkucmVzZXRFdmVudCx0cnVlLCB0cnVlKSApIHsKLSAgICAgICAgbV9pbnJl
c2V0ID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZm9ybUVsZW1lbnRzLnNpemUoKTsgKytpKQotICAgICAgICBmb3JtRWxlbWVu
dHNbaV0tPnJlc2V0KCk7Ci0KLSAgICBtX2lucmVzZXQgPSBmYWxzZTsKLX0KLQotdm9pZCBIVE1M
Rm9ybUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikK
LXsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IGFjdGlvbkF0dHIpCi0gICAgICAgIG1fdXJsID0g
cGFyc2VVUkwoYXR0ci0+dmFsdWUoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHRh
cmdldEF0dHIpCi0gICAgICAgIG1fdGFyZ2V0ID0gYXR0ci0+dmFsdWUoKTsKLSAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gbWV0aG9kQXR0cikKLSAgICAgICAgbV9mb3JtRGF0YUJ1aWxkZXIu
cGFyc2VNZXRob2RUeXBlKGF0dHItPnZhbHVlKCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBlbmN0eXBlQXR0cikKLSAgICAgICAgbV9mb3JtRGF0YUJ1aWxkZXIucGFyc2VFbmNvZGlu
Z1R5cGUoYXR0ci0+dmFsdWUoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFjY2Vw
dF9jaGFyc2V0QXR0cikKLSAgICAgICAgLy8gc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2hhcnNl
dHMgdGhlIHNlcnZlcgotICAgICAgICAvLyBhY2NlcHRzIC0gc2VlIHJmYzIwNDUKLSAgICAgICAg
bV9mb3JtRGF0YUJ1aWxkZXIuc2V0QWNjZXB0Q2hhcnNldChhdHRyLT52YWx1ZSgpKTsKLSAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWNjZXB0QXR0cikgewotICAgICAgICAvLyBpZ25vcmUg
dGhpcyBvbmUgZm9yIHRoZSBtb21lbnQuLi4KLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBhdXRvY29tcGxldGVBdHRyKSB7Ci0gICAgICAgIG1fYXV0b2NvbXBsZXRlID0gIWVxdWFsSWdu
b3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJvZmYiKTsKLSAgICAgICAgaWYgKCFtX2F1dG9jb21w
bGV0ZSkKLSAgICAgICAgICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9yRG9jdW1lbnRBY3RpdmF0
aW9uQ2FsbGJhY2tzKHRoaXMpOyAgICAKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZG9jdW1l
bnQoKS0+dW5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0aGlzKTsKLSAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnN1Ym1pdEF0dHIpCi0gICAgICAgIHNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5zdWJtaXRF
dmVudCwgYXR0cik7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ucmVzZXRBdHRyKQot
ICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5h
bWVzKCkucmVzZXRFdmVudCwgYXR0cik7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5h
bWVBdHRyKSB7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3TmFtZSA9IGF0dHItPnZh
bHVlKCk7Ci0gICAgICAgIGlmIChpbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS0+aXNIVE1MRG9j
dW1lbnQoKSkgewotICAgICAgICAgICAgSFRNTERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19j
YXN0PEhUTUxEb2N1bWVudCo+KHRoaXMtPmRvY3VtZW50KCkpOwotICAgICAgICAgICAgZG9jdW1l
bnQtPnJlbW92ZU5hbWVkSXRlbShtX25hbWUpOwotICAgICAgICAgICAgZG9jdW1lbnQtPmFkZE5h
bWVkSXRlbShuZXdOYW1lKTsKLSAgICAgICAgfQotICAgICAgICBtX25hbWUgPSBuZXdOYW1lOwot
ICAgIH0gZWxzZQotICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cik7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIFQsIHNpemVfdCBuPiBzdGF0aWMgdm9pZCByZW1vdmVG
cm9tVmVjdG9yKFZlY3RvcjxUKiwgbj4gJiB2ZWMsIFQqIGl0ZW0pCi17Ci0gICAgc2l6ZV90IHNp
emUgPSB2ZWMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IHNpemU7ICsraSkK
LSAgICAgICAgaWYgKHZlY1tpXSA9PSBpdGVtKSB7Ci0gICAgICAgICAgICB2ZWMucmVtb3ZlKGkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLX0KLQotdW5zaWduZWQgSFRNTEZvcm1F
bGVtZW50Ojpmb3JtRWxlbWVudEluZGV4KEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGUpCi17Ci0g
ICAgLy8gQ2hlY2sgZm9yIHRoZSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhpcyBlbGVtZW50IGlzIHRo
ZSB2ZXJ5IGxhc3QgdGhpbmcgaW4KLSAgICAvLyB0aGUgZm9ybSdzIHRyZWUgb2YgY2hpbGRyZW47
IHdlIGRvbid0IHdhbnQgdG8gd2FsayB0aGUgZW50aXJlIHRyZWUgaW4gdGhhdAotICAgIC8vIGNv
bW1vbiBjYXNlIHRoYXQgb2NjdXJzIGR1cmluZyBwYXJzaW5nOyBpbnN0ZWFkIHdlJ2xsIGp1c3Qg
cmV0dXJuIGEgdmFsdWUKLSAgICAvLyB0aGF0IHNheXMgImFkZCB0aGlzIGZvcm0gZWxlbWVudCB0
byB0aGUgZW5kIG9mIHRoZSBhcnJheSIuCi0gICAgaWYgKGUtPnRyYXZlcnNlTmV4dE5vZGUodGhp
cykpIHsKLSAgICAgICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgICAgIGZvciAoTm9kZSogbm9kZSA9
IHRoaXM7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHRoaXMpKSB7Ci0gICAg
ICAgICAgICBpZiAobm9kZSA9PSBlKQotICAgICAgICAgICAgICAgIHJldHVybiBpOwotICAgICAg
ICAgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKQotICAgICAgICAgICAgICAgICAgICAmJiBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkKLSAgICAg
ICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KG5v
ZGUpLT5mb3JtKCkgPT0gdGhpcykKLSAgICAgICAgICAgICAgICArK2k7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgcmV0dXJuIGZvcm1FbGVtZW50cy5zaXplKCk7Ci19Ci0KLXZvaWQgSFRNTEZvcm1F
bGVtZW50OjpyZWdpc3RlckZvcm1FbGVtZW50KEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGUpCi17
Ci0gICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLnJlbW92ZUJ1dHRvbihlKTsK
LSAgICBtX2NoZWNrZWRSYWRpb0J1dHRvbnMuYWRkQnV0dG9uKGUpOwotICAgIGZvcm1FbGVtZW50
cy5pbnNlcnQoZm9ybUVsZW1lbnRJbmRleChlKSwgZSk7Ci19Ci0KLXZvaWQgSFRNTEZvcm1FbGVt
ZW50OjpyZW1vdmVGb3JtRWxlbWVudChIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlKQotewotICAg
IG1fY2hlY2tlZFJhZGlvQnV0dG9ucy5yZW1vdmVCdXR0b24oZSk7Ci0gICAgcmVtb3ZlRnJvbVZl
Y3Rvcihmb3JtRWxlbWVudHMsIGUpOwotfQotCi1ib29sIEhUTUxGb3JtRWxlbWVudDo6aXNVUkxB
dHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKSBjb25zdAotewotICAgIHJldHVybiBhdHRyLT5uYW1l
KCkgPT0gYWN0aW9uQXR0cjsKLX0KLQotdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlZ2lzdGVySW1n
RWxlbWVudChIVE1MSW1hZ2VFbGVtZW50KiBlKQotewotICAgIGltZ0VsZW1lbnRzLmFwcGVuZChl
KTsKLX0KLQotdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlbW92ZUltZ0VsZW1lbnQoSFRNTEltYWdl
RWxlbWVudCogZSkKLXsKLSAgICByZW1vdmVGcm9tVmVjdG9yKGltZ0VsZW1lbnRzLCBlKTsKLX0K
LQotUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gSFRNTEZvcm1FbGVtZW50OjplbGVtZW50cygp
Ci17Ci0gICAgcmV0dXJuIEhUTUxGb3JtQ29sbGVjdGlvbjo6Y3JlYXRlKHRoaXMpOwotfQotCi1T
dHJpbmcgSFRNTEZvcm1FbGVtZW50OjpuYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0
cmlidXRlKG5hbWVBdHRyKTsKLX0KLQotdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnNldE5hbWUoY29u
c3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobmFtZUF0dHIsIHZhbHVlKTsK
LX0KLQotdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnNldEFjY2VwdENoYXJzZXQoY29uc3QgU3RyaW5n
ICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoYWNjZXB0X2NoYXJzZXRBdHRyLCB2YWx1ZSk7
Ci19Ci0KLVN0cmluZyBIVE1MRm9ybUVsZW1lbnQ6OmFjdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGdldEF0dHJpYnV0ZShhY3Rpb25BdHRyKTsKLX0KLQotdm9pZCBIVE1MRm9ybUVsZW1lbnQ6
OnNldEFjdGlvbihjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShhY3Rp
b25BdHRyLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgSFRNTEZvcm1FbGVtZW50OjpzZXRFbmN0eXBlKGNv
bnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGVuY3R5cGVBdHRyLCB2YWx1
ZSk7Ci19Ci0KLVN0cmluZyBIVE1MRm9ybUVsZW1lbnQ6Om1ldGhvZCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShtZXRob2RBdHRyKTsKLX0KLQotdm9pZCBIVE1MRm9ybUVsZW1l
bnQ6OnNldE1ldGhvZChjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSht
ZXRob2RBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MRm9ybUVsZW1lbnQ6OnRhcmdldCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0YXJnZXRBdHRyKTsKLX0KLQotdm9p
ZCBIVE1MRm9ybUVsZW1lbnQ6OnNldFRhcmdldChjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAg
IHNldEF0dHJpYnV0ZSh0YXJnZXRBdHRyLCB2YWx1ZSk7Ci19Ci0KLVBhc3NSZWZQdHI8SFRNTEZv
cm1Db250cm9sRWxlbWVudD4gSFRNTEZvcm1FbGVtZW50OjplbGVtZW50Rm9yQWxpYXMoY29uc3Qg
QXRvbWljU3RyaW5nJiBhbGlhcykKLXsKLSAgICBpZiAoYWxpYXMuaXNFbXB0eSgpIHx8ICFtX2Vs
ZW1lbnRBbGlhc2VzKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9lbGVtZW50QWxp
YXNlcy0+Z2V0KGFsaWFzLmltcGwoKSk7Ci19Ci0KLXZvaWQgSFRNTEZvcm1FbGVtZW50OjphZGRF
bGVtZW50QWxpYXMoSFRNTEZvcm1Db250cm9sRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXRvbWlj
U3RyaW5nJiBhbGlhcykKLXsKLSAgICBpZiAoYWxpYXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKCFtX2VsZW1lbnRBbGlhc2VzKQotICAgICAgICBtX2VsZW1lbnRBbGlhc2Vz
ID0gbmV3IEFsaWFzTWFwOwotICAgIG1fZWxlbWVudEFsaWFzZXMtPnNldChhbGlhcy5pbXBsKCks
IGVsZW1lbnQpOwotfQotCi12b2lkIEhUTUxGb3JtRWxlbWVudDo6Z2V0TmFtZWRFbGVtZW50cyhj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgbmFtZWRJdGVt
cykKLXsKLSAgICBlbGVtZW50cygpLT5uYW1lZEl0ZW1zKG5hbWUsIG5hbWVkSXRlbXMpOwotCi0g
ICAgLy8gc2VlIGlmIHdlIGhhdmUgc2VlbiBzb21ldGhpbmcgd2l0aCB0aGlzIG5hbWUgYmVmb3Jl
Ci0gICAgUmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+IGFsaWFzRWxlbTsKLSAgICBpZiAo
YWxpYXNFbGVtID0gZWxlbWVudEZvckFsaWFzKG5hbWUpKSB7Ci0gICAgICAgIGJvb2wgZm91bmQg
PSBmYWxzZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IG5hbWVkSXRlbXMuc2l6
ZSgpOyBuKyspIHsKLSAgICAgICAgICAgIGlmIChuYW1lZEl0ZW1zW25dID09IGFsaWFzRWxlbS5n
ZXQoKSkgewotICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIWZvdW5kKQotICAg
ICAgICAgICAgLy8gd2UgaGF2ZSBzZWVuIGl0IGJlZm9yZSBidXQgaXQgaXMgZ29uZSBub3cuIHN0
aWxsLCB3ZSBuZWVkIHRvIHJldHVybiBpdC4KLSAgICAgICAgICAgIG5hbWVkSXRlbXMuYXBwZW5k
KGFsaWFzRWxlbS5nZXQoKSk7Ci0gICAgfQotICAgIC8vIG5hbWUgaGFzIGJlZW4gYWNjZXNzZWQs
IHJlbWVtYmVyIGl0Ci0gICAgaWYgKG5hbWVkSXRlbXMuc2l6ZSgpICYmIGFsaWFzRWxlbSAhPSBu
YW1lZEl0ZW1zLmZpcnN0KCkpCi0gICAgICAgIGFkZEVsZW1lbnRBbGlhcyhzdGF0aWNfY2FzdDxI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4obmFtZWRJdGVtcy5maXJzdCgpLmdldCgpKSwgbmFtZSk7
ICAgICAgICAKLX0KLQotdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmRvY3VtZW50RGlkQmVjb21lQWN0
aXZlKCkKLXsKLSAgICBBU1NFUlQoIW1fYXV0b2NvbXBsZXRlKTsKLSAgICAKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZm9ybUVsZW1lbnRzLnNpemUoKTsgKytpKQotICAgICAgICBmb3Jt
RWxlbWVudHNbaV0tPnJlc2V0KCk7Ci19Ci0KLXZvaWQgSFRNTEZvcm1FbGVtZW50Ojp3aWxsTW92
ZVRvTmV3T3duZXJEb2N1bWVudCgpCi17Ci0gICAgaWYgKCFtX2F1dG9jb21wbGV0ZSkKLSAgICAg
ICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0
aGlzKTsKLX0KLQotdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmRpZE1vdmVUb05ld093bmVyRG9jdW1l
bnQoKQotewotICAgIGlmKG1fYXV0b2NvbXBsZXRlKQotICAgICAgICBkb2N1bWVudCgpLT5yZWdp
c3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0aGlzKTsKLX0KLQotdm9pZCBIVE1M
Rm9ybUVsZW1lbnQ6OkNoZWNrZWRSYWRpb0J1dHRvbnM6OmFkZEJ1dHRvbihIVE1MRm9ybUNvbnRy
b2xFbGVtZW50KiBlbGVtZW50KQordm9pZCBDaGVja2VkUmFkaW9CdXR0b25zOjphZGRCdXR0b24o
SFRNTEZvcm1Db250cm9sRWxlbWVudCogZWxlbWVudCkKIHsKICAgICAvLyBXZSBvbmx5IHdhbnQg
dG8gYWRkIHJhZGlvIGJ1dHRvbnMuCiAgICAgaWYgKCFlbGVtZW50LT5pc1JhZGlvQnV0dG9uKCkp
CkBAIC02MzksNyArNTYsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6Q2hlY2tlZFJhZGlvQnV0
dG9uCiAgICAgb2xkQ2hlY2tlZEJ1dHRvbi0+c2V0Q2hlY2tlZChmYWxzZSk7CiB9CiAKLUhUTUxJ
bnB1dEVsZW1lbnQqIEhUTUxGb3JtRWxlbWVudDo6Q2hlY2tlZFJhZGlvQnV0dG9uczo6Y2hlY2tl
ZEJ1dHRvbkZvckdyb3VwKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKK0hUTUxJbnB1
dEVsZW1lbnQqIENoZWNrZWRSYWRpb0J1dHRvbnM6OmNoZWNrZWRCdXR0b25Gb3JHcm91cChjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0CiB7CiAgICAgaWYgKCFtX25hbWVUb0NoZWNrZWRS
YWRpb0J1dHRvbk1hcCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC02NDcsNyArNjQsNyBAQCBIVE1M
SW5wdXRFbGVtZW50KiBIVE1MRm9ybUVsZW1lbnQ6OkNoZWNrCiAgICAgcmV0dXJuIG1fbmFtZVRv
Q2hlY2tlZFJhZGlvQnV0dG9uTWFwLT5nZXQobmFtZS5pbXBsKCkpOwogfQogCi12b2lkIEhUTUxG
b3JtRWxlbWVudDo6Q2hlY2tlZFJhZGlvQnV0dG9uczo6cmVtb3ZlQnV0dG9uKEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIENoZWNrZWRSYWRpb0J1dHRvbnM6OnJlbW92ZUJ1
dHRvbihIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlbGVtZW50KQogewogICAgIGlmIChlbGVtZW50
LT5uYW1lKCkuaXNFbXB0eSgpIHx8ICFtX25hbWVUb0NoZWNrZWRSYWRpb0J1dHRvbk1hcCkKICAg
ICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuaAkocmV2aXNpb24g
NDIwNzMpCShmcm9tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaDo0MjA3MykKKysrIFdl
YkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQorICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3Jn
KQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgSFRNTEZvcm1FbGVtZW50X2gKKyNk
ZWZpbmUgSFRNTEZvcm1FbGVtZW50X2gKKworI2luY2x1ZGUgIkZvcm1EYXRhQnVpbGRlci5oIgor
I2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiIAorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisK
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
RXZlbnQ7CitjbGFzcyBGb3JtRGF0YTsKK2NsYXNzIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ7Citj
bGFzcyBIVE1MSW1hZ2VFbGVtZW50OworY2xhc3MgSFRNTElucHV0RWxlbWVudDsKK2NsYXNzIEhU
TUxGb3JtQ29sbGVjdGlvbjsKK2NsYXNzIFRleHRFbmNvZGluZzsKKworY2xhc3MgSFRNTEZvcm1F
bGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsgCitwdWJsaWM6CisgICAgSFRNTEZvcm1FbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworICAgIHZpcnR1YWwgfkhUTUxG
b3JtRWxlbWVudCgpOworCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVt
ZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGlu
dCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDM7IH0KKworICAgIHZpcnR1YWwgdm9pZCBh
dHRhY2goKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOworIAorICAgIHZpcnR1YWwgdm9pZCBo
YW5kbGVMb2NhbEV2ZW50cyhFdmVudCosIGJvb2wgdXNlQ2FwdHVyZSk7CisgICAgIAorICAgIFBh
c3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGVsZW1lbnRzKCk7CisgICAgdm9pZCBnZXROYW1lZEVs
ZW1lbnRzKGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYpOworICAg
IAorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgIE5vZGUqIGl0ZW0odW5zaWduZWQg
aW5kZXgpOworCisgICAgU3RyaW5nIGVuY3R5cGUoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1EYXRh
QnVpbGRlci5lbmNvZGluZ1R5cGUoKTsgfQorICAgIHZvaWQgc2V0RW5jdHlwZShjb25zdCBTdHJp
bmcmKTsKKworICAgIFN0cmluZyBlbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybURhdGFC
dWlsZGVyLmVuY29kaW5nVHlwZSgpOyB9CisgICAgdm9pZCBzZXRFbmNvZGluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKSB7IHNldEVuY3R5cGUodmFsdWUpOyB9CisKKyAgICBib29sIGF1dG9Db21wbGV0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0b2NvbXBsZXRlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CisKKyAgICB2b2lkIHJlZ2lz
dGVyRm9ybUVsZW1lbnQoSFRNTEZvcm1Db250cm9sRWxlbWVudCopOworICAgIHZvaWQgcmVtb3Zl
Rm9ybUVsZW1lbnQoSFRNTEZvcm1Db250cm9sRWxlbWVudCopOworICAgIHZvaWQgcmVnaXN0ZXJJ
bWdFbGVtZW50KEhUTUxJbWFnZUVsZW1lbnQqKTsKKyAgICB2b2lkIHJlbW92ZUltZ0VsZW1lbnQo
SFRNTEltYWdlRWxlbWVudCopOworCisgICAgYm9vbCBwcmVwYXJlU3VibWl0KEV2ZW50Kik7Cisg
ICAgdm9pZCBzdWJtaXQoRXZlbnQqID0gMCwgYm9vbCBhY3RpdmF0ZVN1Ym1pdEJ1dHRvbiA9IGZh
bHNlLCBib29sIGxvY2tIaXN0b3J5ID0gZmFsc2UsIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCA9
IGZhbHNlKTsKKyAgICB2b2lkIHJlc2V0KCk7CisKKyAgICAvLyBVc2VkIHRvIGluZGljYXRlIGEg
bWFsZm9ybWVkIHN0YXRlIHRvIGtlZXAgZnJvbSBhcHBseWluZyB0aGUgYm90dG9tIG1hcmdpbiBv
ZiB0aGUgZm9ybS4KKyAgICB2b2lkIHNldE1hbGZvcm1lZChib29sIG1hbGZvcm1lZCkgeyBtX21h
bGZvcm1lZCA9IG1hbGZvcm1lZDsgfQorICAgIGJvb2wgaXNNYWxmb3JtZWQoKSBjb25zdCB7IHJl
dHVybiBtX21hbGZvcm1lZDsgfQorCisgICAgdmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0
dHJpYnV0ZSopIGNvbnN0OworICAgIAorICAgIHZvaWQgc3VibWl0Q2xpY2soRXZlbnQqKTsKKyAg
ICBib29sIGZvcm1Xb3VsZEhhdmVTZWN1cmVTdWJtaXNzaW9uKGNvbnN0IFN0cmluZyYgdXJsKTsK
KworICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmlu
ZyYpOworCisgICAgU3RyaW5nIGFjY2VwdENoYXJzZXQoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1E
YXRhQnVpbGRlci5hY2NlcHRDaGFyc2V0KCk7IH0KKyAgICB2b2lkIHNldEFjY2VwdENoYXJzZXQo
Y29uc3QgU3RyaW5nJik7CisKKyAgICBTdHJpbmcgYWN0aW9uKCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRBY3Rpb24oY29uc3QgU3RyaW5nJik7CisKKyAgICBTdHJpbmcgbWV0aG9kKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRNZXRob2QoY29uc3QgU3RyaW5nJik7CisKKyAgICB2aXJ0dWFsIFN0cmluZyB0
YXJnZXQoKSBjb25zdDsKKyAgICB2b2lkIHNldFRhcmdldChjb25zdCBTdHJpbmcmKTsKKyAgICAK
KyAgICBQYXNzUmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+IGVsZW1lbnRGb3JBbGlhcyhj
b25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICB2b2lkIGFkZEVsZW1lbnRBbGlhcyhIVE1MRm9ybUNv
bnRyb2xFbGVtZW50KiwgY29uc3QgQXRvbWljU3RyaW5nJiBhbGlhcyk7CisKKyAgICAvLyBGSVhN
RTogQ2hhbmdlIHRoaXMgdG8gYmUgcHJpdmF0ZSBhZnRlciBnZXR0aW5nIHJpZCBvZiBhbGwgdGhl
IGNsaWVudHMuCisgICAgVmVjdG9yPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPiBmb3JtRWxlbWVu
dHM7CisKKyAgICBjbGFzcyBDaGVja2VkUmFkaW9CdXR0b25zIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIHZvaWQgYWRkQnV0dG9uKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqKTsKKyAgICAgICAgdm9p
ZCByZW1vdmVCdXR0b24oSFRNTEZvcm1Db250cm9sRWxlbWVudCopOworICAgICAgICBIVE1MSW5w
dXRFbGVtZW50KiBjaGVja2VkQnV0dG9uRm9yR3JvdXAoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
KSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNT
dHJpbmdJbXBsKiwgSFRNTElucHV0RWxlbWVudCo+IE5hbWVUb0lucHV0TWFwOworICAgICAgICBP
d25QdHI8TmFtZVRvSW5wdXRNYXA+IG1fbmFtZVRvQ2hlY2tlZFJhZGlvQnV0dG9uTWFwOworICAg
IH07CisgICAgCisgICAgQ2hlY2tlZFJhZGlvQnV0dG9ucyYgY2hlY2tlZFJhZGlvQnV0dG9ucygp
IHsgcmV0dXJuIG1fY2hlY2tlZFJhZGlvQnV0dG9uczsgfQorICAgIAorICAgIHZpcnR1YWwgdm9p
ZCBkb2N1bWVudERpZEJlY29tZUFjdGl2ZSgpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2
b2lkIHdpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CisgICAgdmlydHVhbCB2b2lkIGRpZE1v
dmVUb05ld093bmVyRG9jdW1lbnQoKTsKKworcHJpdmF0ZToKKyAgICBib29sIGlzTWFpbHRvRm9y
bSgpIGNvbnN0OworICAgIFRleHRFbmNvZGluZyBkYXRhRW5jb2RpbmcoKSBjb25zdDsKKyAgICBQ
YXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGVGb3JtRGF0YShjb25zdCBDU3RyaW5nJiBib3VuZGFy
eSk7CisgICAgdW5zaWduZWQgZm9ybUVsZW1lbnRJbmRleChIVE1MRm9ybUNvbnRyb2xFbGVtZW50
Kik7CisKKyAgICBmcmllbmQgY2xhc3MgSFRNTEZvcm1Db2xsZWN0aW9uOworCisgICAgdHlwZWRl
ZiBIYXNoTWFwPFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiwgUmVmUHRyPEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ+ID4gQWxpYXNNYXA7CisKKyAgICBGb3JtRGF0YUJ1aWxkZXIgbV9mb3JtRGF0YUJ1
aWxkZXI7CisgICAgQWxpYXNNYXAqIG1fZWxlbWVudEFsaWFzZXM7CisgICAgSFRNTENvbGxlY3Rp
b246OkNvbGxlY3Rpb25JbmZvKiBjb2xsZWN0aW9uSW5mbzsKKworICAgIENoZWNrZWRSYWRpb0J1
dHRvbnMgbV9jaGVja2VkUmFkaW9CdXR0b25zOworICAgIAorICAgIFZlY3RvcjxIVE1MSW1hZ2VF
bGVtZW50Kj4gaW1nRWxlbWVudHM7CisgICAgU3RyaW5nIG1fdXJsOworICAgIFN0cmluZyBtX3Rh
cmdldDsKKyAgICBib29sIG1fYXV0b2NvbXBsZXRlIDogMTsKKyAgICBib29sIG1faW5zdWJtaXQg
OiAxOworICAgIGJvb2wgbV9kb2luZ3N1Ym1pdCA6IDE7CisgICAgYm9vbCBtX2lucmVzZXQgOiAx
OworICAgIGJvb2wgbV9tYWxmb3JtZWQgOiAxOworICAgIEF0b21pY1N0cmluZyBtX25hbWU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBIVE1MRm9ybUVsZW1lbnRf
aApJbmRleDogV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuaAkocmV2aXNpb24gNDIwNzMpCisrKyBX
ZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOCAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCi0gKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5v
cmcpCi0gKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjEsMTQwICsxOCwzMCBAQAogICoKICAqLwogCi0jaWZuZGVmIEhUTUxGb3JtRWxlbWVudF9oCi0j
ZGVmaW5lIEhUTUxGb3JtRWxlbWVudF9oCi0KLSNpbmNsdWRlICJGb3JtRGF0YUJ1aWxkZXIuaCIK
LSNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIiAKLSNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgor
I2lmbmRlZiBDaGVja2VkUmFkaW9CdXR0b25zX2gKKyNkZWZpbmUgQ2hlY2tlZFJhZGlvQnV0dG9u
c19oCiAKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBFdmVudDsKLWNsYXNzIEZvcm1EYXRhOwot
Y2xhc3MgSFRNTEZvcm1Db250cm9sRWxlbWVudDsKLWNsYXNzIEhUTUxJbWFnZUVsZW1lbnQ7Citj
bGFzcyBBdG9taWNTdHJpbmc7CitjbGFzcyBBdG9taWNTdHJpbmdJbXBsOwogY2xhc3MgSFRNTElu
cHV0RWxlbWVudDsKLWNsYXNzIEhUTUxGb3JtQ29sbGVjdGlvbjsKLWNsYXNzIFRleHRFbmNvZGlu
ZzsKK2NsYXNzIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ7CiAKLWNsYXNzIEhUTUxGb3JtRWxlbWVu
dCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7IAorY2xhc3MgQ2hlY2tlZFJhZGlvQnV0dG9ucyB7CiBw
dWJsaWM6Ci0gICAgSFRNTEZvcm1FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVu
dCopOwotICAgIHZpcnR1YWwgfkhUTUxGb3JtRWxlbWVudCgpOwotCi0gICAgdmlydHVhbCBIVE1M
VGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVx
dWlyZWQ7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDM7
IH0KLQotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0
ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgp
OwotIAotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCosIGJvb2wgdXNl
Q2FwdHVyZSk7Ci0gICAgIAotICAgIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGVsZW1lbnRz
KCk7Ci0gICAgdm9pZCBnZXROYW1lZEVsZW1lbnRzKGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3Rv
cjxSZWZQdHI8Tm9kZT4gPiYpOwotICAgIAotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0Owot
ICAgIE5vZGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpOwotCi0gICAgU3RyaW5nIGVuY3R5cGUoKSBj
b25zdCB7IHJldHVybiBtX2Zvcm1EYXRhQnVpbGRlci5lbmNvZGluZ1R5cGUoKTsgfQotICAgIHZv
aWQgc2V0RW5jdHlwZShjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBlbmNvZGluZygpIGNv
bnN0IHsgcmV0dXJuIG1fZm9ybURhdGFCdWlsZGVyLmVuY29kaW5nVHlwZSgpOyB9Ci0gICAgdm9p
ZCBzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmIHZhbHVlKSB7IHNldEVuY3R5cGUodmFsdWUpOyB9
Ci0KLSAgICBib29sIGF1dG9Db21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0b2NvbXBsZXRl
OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlKik7Ci0KLSAgICB2b2lkIHJlZ2lzdGVyRm9ybUVsZW1lbnQoSFRNTEZvcm1Db250cm9sRWxl
bWVudCopOwotICAgIHZvaWQgcmVtb3ZlRm9ybUVsZW1lbnQoSFRNTEZvcm1Db250cm9sRWxlbWVu
dCopOwotICAgIHZvaWQgcmVnaXN0ZXJJbWdFbGVtZW50KEhUTUxJbWFnZUVsZW1lbnQqKTsKLSAg
ICB2b2lkIHJlbW92ZUltZ0VsZW1lbnQoSFRNTEltYWdlRWxlbWVudCopOwotCi0gICAgYm9vbCBw
cmVwYXJlU3VibWl0KEV2ZW50Kik7Ci0gICAgdm9pZCBzdWJtaXQoRXZlbnQqID0gMCwgYm9vbCBh
Y3RpdmF0ZVN1Ym1pdEJ1dHRvbiA9IGZhbHNlLCBib29sIGxvY2tIaXN0b3J5ID0gZmFsc2UsIGJv
b2wgbG9ja0JhY2tGb3J3YXJkTGlzdCA9IGZhbHNlKTsKLSAgICB2b2lkIHJlc2V0KCk7Ci0KLSAg
ICAvLyBVc2VkIHRvIGluZGljYXRlIGEgbWFsZm9ybWVkIHN0YXRlIHRvIGtlZXAgZnJvbSBhcHBs
eWluZyB0aGUgYm90dG9tIG1hcmdpbiBvZiB0aGUgZm9ybS4KLSAgICB2b2lkIHNldE1hbGZvcm1l
ZChib29sIG1hbGZvcm1lZCkgeyBtX21hbGZvcm1lZCA9IG1hbGZvcm1lZDsgfQotICAgIGJvb2wg
aXNNYWxmb3JtZWQoKSBjb25zdCB7IHJldHVybiBtX21hbGZvcm1lZDsgfQotCi0gICAgdmlydHVh
bCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwotICAgIAotICAgIHZvaWQg
c3VibWl0Q2xpY2soRXZlbnQqKTsKLSAgICBib29sIGZvcm1Xb3VsZEhhdmVTZWN1cmVTdWJtaXNz
aW9uKGNvbnN0IFN0cmluZyYgdXJsKTsKLQotICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIGFjY2VwdENoYXJzZXQo
KSBjb25zdCB7IHJldHVybiBtX2Zvcm1EYXRhQnVpbGRlci5hY2NlcHRDaGFyc2V0KCk7IH0KLSAg
ICB2b2lkIHNldEFjY2VwdENoYXJzZXQoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgYWN0
aW9uKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBY3Rpb24oY29uc3QgU3RyaW5nJik7Ci0KLSAgICBT
dHJpbmcgbWV0aG9kKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRNZXRob2QoY29uc3QgU3RyaW5nJik7
Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyB0YXJnZXQoKSBjb25zdDsKLSAgICB2b2lkIHNldFRhcmdl
dChjb25zdCBTdHJpbmcmKTsKLSAgICAKLSAgICBQYXNzUmVmUHRyPEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ+IGVsZW1lbnRGb3JBbGlhcyhjb25zdCBBdG9taWNTdHJpbmcmKTsKLSAgICB2b2lkIGFk
ZEVsZW1lbnRBbGlhcyhIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiwgY29uc3QgQXRvbWljU3RyaW5n
JiBhbGlhcyk7Ci0KLSAgICAvLyBGSVhNRTogQ2hhbmdlIHRoaXMgdG8gYmUgcHJpdmF0ZSBhZnRl
ciBnZXR0aW5nIHJpZCBvZiBhbGwgdGhlIGNsaWVudHMuCi0gICAgVmVjdG9yPEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqPiBmb3JtRWxlbWVudHM7Ci0KLSAgICBjbGFzcyBDaGVja2VkUmFkaW9CdXR0
b25zIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZvaWQgYWRkQnV0dG9uKEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQqKTsKLSAgICAgICAgdm9pZCByZW1vdmVCdXR0b24oSFRNTEZvcm1Db250cm9sRWxl
bWVudCopOwotICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBjaGVja2VkQnV0dG9uRm9yR3JvdXAo
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgSFRNTElucHV0RWxlbWVudCo+IE5h
bWVUb0lucHV0TWFwOwotICAgICAgICBPd25QdHI8TmFtZVRvSW5wdXRNYXA+IG1fbmFtZVRvQ2hl
Y2tlZFJhZGlvQnV0dG9uTWFwOwotICAgIH07Ci0gICAgCi0gICAgQ2hlY2tlZFJhZGlvQnV0dG9u
cyYgY2hlY2tlZFJhZGlvQnV0dG9ucygpIHsgcmV0dXJuIG1fY2hlY2tlZFJhZGlvQnV0dG9uczsg
fQotICAgIAotICAgIHZpcnR1YWwgdm9pZCBkb2N1bWVudERpZEJlY29tZUFjdGl2ZSgpOwotCi1w
cm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7
Ci0gICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKKyAgICB2b2lk
IGFkZEJ1dHRvbihIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kik7CisgICAgdm9pZCByZW1vdmVCdXR0
b24oSFRNTEZvcm1Db250cm9sRWxlbWVudCopOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGNoZWNr
ZWRCdXR0b25Gb3JHcm91cChjb25zdCBBdG9taWNTdHJpbmcmIGdyb3VwTmFtZSkgY29uc3Q7CiAK
IHByaXZhdGU6Ci0gICAgYm9vbCBpc01haWx0b0Zvcm0oKSBjb25zdDsKLSAgICBUZXh0RW5jb2Rp
bmcgZGF0YUVuY29kaW5nKCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRl
Rm9ybURhdGEoY29uc3QgQ1N0cmluZyYgYm91bmRhcnkpOwotICAgIHVuc2lnbmVkIGZvcm1FbGVt
ZW50SW5kZXgoSFRNTEZvcm1Db250cm9sRWxlbWVudCopOwotCi0gICAgZnJpZW5kIGNsYXNzIEhU
TUxGb3JtQ29sbGVjdGlvbjsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8QXRvbWljU3Ry
aW5nSW1wbD4sIFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+IEFsaWFzTWFwOwotCi0g
ICAgRm9ybURhdGFCdWlsZGVyIG1fZm9ybURhdGFCdWlsZGVyOwotICAgIEFsaWFzTWFwKiBtX2Vs
ZW1lbnRBbGlhc2VzOwotICAgIEhUTUxDb2xsZWN0aW9uOjpDb2xsZWN0aW9uSW5mbyogY29sbGVj
dGlvbkluZm87Ci0KLSAgICBDaGVja2VkUmFkaW9CdXR0b25zIG1fY2hlY2tlZFJhZGlvQnV0dG9u
czsKLSAgICAKLSAgICBWZWN0b3I8SFRNTEltYWdlRWxlbWVudCo+IGltZ0VsZW1lbnRzOwotICAg
IFN0cmluZyBtX3VybDsKLSAgICBTdHJpbmcgbV90YXJnZXQ7Ci0gICAgYm9vbCBtX2F1dG9jb21w
bGV0ZSA6IDE7Ci0gICAgYm9vbCBtX2luc3VibWl0IDogMTsKLSAgICBib29sIG1fZG9pbmdzdWJt
aXQgOiAxOwotICAgIGJvb2wgbV9pbnJlc2V0IDogMTsKLSAgICBib29sIG1fbWFsZm9ybWVkIDog
MTsKLSAgICBBdG9taWNTdHJpbmcgbV9uYW1lOworICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNT
dHJpbmdJbXBsKiwgSFRNTElucHV0RWxlbWVudCo+IE5hbWVUb0lucHV0TWFwOworICAgIE93blB0
cjxOYW1lVG9JbnB1dE1hcD4gbV9uYW1lVG9DaGVja2VkUmFkaW9CdXR0b25NYXA7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBIVE1MRm9ybUVsZW1lbnRfaAorI2Vu
ZGlmIC8vIENoZWNrZWRSYWRpb0J1dHRvbnNfaApJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiA0MjA3OSkK
KysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDE1ICsyNywx
MiBAQAogI2RlZmluZSBEb2N1bWVudF9oCiAKICNpbmNsdWRlICJBdHRyLmgiCisjaW5jbHVkZSAi
Q2hlY2tlZFJhZGlvQnV0dG9ucy5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnRNYXJrZXIuaCIKICNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgotI2luY2x1ZGUgIkhU
TUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNp
bmNsdWRlICJTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDx3dGYv
SGFzaENvdW50ZWRTZXQuaD4KLSNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KIAogLy8gRklY
TUU6IFdlIHNob3VsZCBtb3ZlIE1hYyBvZmYgb2YgdGhlIG9sZCBGcmFtZS1iYXNlZCB1c2VyIHN0
eWxlc2hlZXQgbG9hZGluZwogLy8gY29kZSBhbmQgb250byB0aGUgbmV3IGNvZGUgaW4gUGFnZS4g
V2UgY2FuJ3QgZG8gdGhhdCB1bnRpbCB0aGUgY29kZSBpbiBQYWdlCkBAIC00OSw4ICs0Niw2IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBBWE9iamVjdENhY2hlOwotICAgIGNs
YXNzIEF0dHI7Ci0gICAgY2xhc3MgQXR0cmlidXRlOwogICAgIGNsYXNzIENEQVRBU2VjdGlvbjsK
ICAgICBjbGFzcyBDYWNoZWRDU1NTdHlsZVNoZWV0OwogICAgIGNsYXNzIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDsKQEAgLTk4OCw3ICs5ODMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWdpc3Rl
ckRpc2Nvbm5lY3RlZE5vZGVXaXRoRXZlbnRMaXN0ZW5lcnMoTm9kZSopOwogICAgIHZvaWQgdW5y
ZWdpc3RlckRpc2Nvbm5lY3RlZE5vZGVXaXRoRXZlbnRMaXN0ZW5lcnMoTm9kZSopOwogICAgIAot
ICAgIEhUTUxGb3JtRWxlbWVudDo6Q2hlY2tlZFJhZGlvQnV0dG9ucyYgY2hlY2tlZFJhZGlvQnV0
dG9ucygpIHsgcmV0dXJuIG1fY2hlY2tlZFJhZGlvQnV0dG9uczsgfQorICAgIENoZWNrZWRSYWRp
b0J1dHRvbnMmIGNoZWNrZWRSYWRpb0J1dHRvbnMoKSB7IHJldHVybiBtX2NoZWNrZWRSYWRpb0J1
dHRvbnM7IH0KICAgICAKICNpZiBFTkFCTEUoU1ZHKQogICAgIGNvbnN0IFNWR0RvY3VtZW50RXh0
ZW5zaW9ucyogc3ZnRXh0ZW5zaW9ucygpOwpAQCAtMTA0OCw3ICsxMDQzLDcgQEAgcHJpdmF0ZToK
ICAgICAKICAgICBpbnQgbV9zZWxmT25seVJlZkNvdW50OwogCi0gICAgSFRNTEZvcm1FbGVtZW50
OjpDaGVja2VkUmFkaW9CdXR0b25zIG1fY2hlY2tlZFJhZGlvQnV0dG9uczsKKyAgICBDaGVja2Vk
UmFkaW9CdXR0b25zIG1fY2hlY2tlZFJhZGlvQnV0dG9uczsKIAogICAgIHR5cGVkZWYgSGFzaE1h
cDxBdG9taWNTdHJpbmdJbXBsKiwgSFRNTENvbGxlY3Rpb246OkNvbGxlY3Rpb25JbmZvKj4gTmFt
ZWRDb2xsZWN0aW9uTWFwOwogICAgIEhUTUxDb2xsZWN0aW9uOjpDb2xsZWN0aW9uSW5mbyBtX2Nv
bGxlY3Rpb25JbmZvW0hUTUxDb2xsZWN0aW9uOjpOdW1Vbm5hbWVkRG9jdW1lbnRDYWNoZWRUeXBl
c107CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Ob2RlLmlkbAkocmV2aXNpb24gNDIwNzkpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmlkbAkod29y
a2luZyBjb3B5KQpAQCAtMTI1LDggKzEyNSw4IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgRE9N
VXNlckRhdGEgICAgICAgIGdldFVzZXJEYXRhKGluIERPTVN0cmluZyBrZXkpOwogI2VuZGlmIC8q
IDAgKi8KIAotICAgICAgICAvLyBJRSBleHRlbnRpb25zCi0gICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBOb2RlICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQ7CisgICAgICAgIC8vIElFIGV4dGVu
c2lvbnMKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEVsZW1lbnQgICAgICAgICAgcGFyZW50
RWxlbWVudDsKIAogI2lmIGRlZmluZWQoTEFOR1VBR0VfT0JKRUNUSVZFX0MpCiAgICAgICAgIC8v
IE9iamVjdGl2ZS1DIGV4dGVuc2lvbnMKSW5kZXg6IFdlYkNvcmUvZG9tL1JhbmdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHJldmlzaW9uIDQyMDc5KQorKysgV2Vi
Q29yZS9kb20vUmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNp
bmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9kZVdpdGhJbmRleC5oIgogI2luY2x1ZGUg
IlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIlRleHQuaCIKSW5kZXg6IFdlYkNv
cmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2VkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDQyMDc5KQor
KysgV2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiwxMiArMjYsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJC
cmVha0Jsb2NrcXVvdGVDb21tYW5kLmgiCiAKLSNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJSZW5k
ZXJMaXN0SXRlbS5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRp
b24uaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgotI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVt
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9lZGl0aW5nL0NvbXBv
c2l0ZUVkaXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQ29tcG9z
aXRlRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiA0MjA3OSkKKysrIFdlYkNvcmUvZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNp
bmNsdWRlICJFZGl0b3JJbnNlcnRBY3Rpb24uaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5j
bHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJ
bmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5oIgpJ
bmRleDogV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAkocmV2aXNp
b24gNDIwNzkpCisrKyBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAKIAogI2luY2x1ZGUgIkNTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
T2JqZWN0LmgiCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExl
dmVsLmNwcAkocmV2aXNpb24gNDIwNzkpCisrKyBXZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0
aW9uTGlzdExldmVsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1
ZGUgIk1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
LSNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1M
RWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlNlbGVjdGlv
bkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgpJbmRleDogV2ViQ29yZS9l
ZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRp
dGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcAkocmV2aXNpb24gNDIwNzkpCisrKyBXZWJDb3Jl
L2VkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDcgQEAKICNpbmNsdWRlICJSZW1vdmVGb3JtYXRDb21tYW5kLmgiCiAKICNpbmNsdWRlICJD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkocmV2
aXNpb24gNDIwNzkpCisrKyBXZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogCiAjaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgImh0bWxlZGl0
aW5nLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgpJbmRleDogV2ViQ29yZS9lZGl0aW5n
L1Zpc2libGVQb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVQb3NpdGlvbi5jcHAJKHJldmlzaW9uIDQyMDc5KQorKysgV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVQb3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAKIAogI2luY2x1
ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkVsZW1lbnQu
aCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gNDIw
NzkpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjA4LDYyICs2MDgsNCBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6ZGlkTW92ZVRvTmV3T3du
ZXJECiAgICAgICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9yRG9jdW1lbnRBY3RpdmF0aW9uQ2Fs
bGJhY2tzKHRoaXMpOwogfQogCi12b2lkIEhUTUxGb3JtRWxlbWVudDo6Q2hlY2tlZFJhZGlvQnV0
dG9uczo6YWRkQnV0dG9uKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAg
Ly8gV2Ugb25seSB3YW50IHRvIGFkZCByYWRpbyBidXR0b25zLgotICAgIGlmICghZWxlbWVudC0+
aXNSYWRpb0J1dHRvbigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXaXRob3V0IGEgbmFt
ZSwgdGhlcmUgaXMgbm8gZ3JvdXAuCi0gICAgaWYgKGVsZW1lbnQtPm5hbWUoKS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9
IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihlbGVtZW50KTsKLQotICAgIC8vIFdlIG9u
bHkgdHJhY2sgY2hlY2tlZCBidXR0b25zLgotICAgIGlmICghaW5wdXRFbGVtZW50LT5jaGVja2Vk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9uYW1lVG9DaGVja2VkUmFkaW9CdXR0
b25NYXApCi0gICAgICAgIG1fbmFtZVRvQ2hlY2tlZFJhZGlvQnV0dG9uTWFwLnNldChuZXcgTmFt
ZVRvSW5wdXRNYXApOwotCi0gICAgcGFpcjxOYW1lVG9JbnB1dE1hcDo6aXRlcmF0b3IsIGJvb2w+
IHJlc3VsdCA9IG1fbmFtZVRvQ2hlY2tlZFJhZGlvQnV0dG9uTWFwLT5hZGQoZWxlbWVudC0+bmFt
ZSgpLmltcGwoKSwgaW5wdXRFbGVtZW50KTsKLSAgICBpZiAocmVzdWx0LnNlY29uZCkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIG9sZENoZWNrZWRCdXR0b24g
PSByZXN1bHQuZmlyc3QtPnNlY29uZDsKLSAgICBpZiAob2xkQ2hlY2tlZEJ1dHRvbiA9PSBpbnB1
dEVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlc3VsdC5maXJzdC0+c2Vjb25kID0g
aW5wdXRFbGVtZW50OwotICAgIG9sZENoZWNrZWRCdXR0b24tPnNldENoZWNrZWQoZmFsc2UpOwot
fQotCi1IVE1MSW5wdXRFbGVtZW50KiBIVE1MRm9ybUVsZW1lbnQ6OkNoZWNrZWRSYWRpb0J1dHRv
bnM6OmNoZWNrZWRCdXR0b25Gb3JHcm91cChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0
Ci17Ci0gICAgaWYgKCFtX25hbWVUb0NoZWNrZWRSYWRpb0J1dHRvbk1hcCkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIG1fbmFtZVRvQ2hlY2tlZFJhZGlvQnV0dG9uTWFwLT5n
ZXQobmFtZS5pbXBsKCkpOwotfQotCi12b2lkIEhUTUxGb3JtRWxlbWVudDo6Q2hlY2tlZFJhZGlv
QnV0dG9uczo6cmVtb3ZlQnV0dG9uKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsZW1lbnQpCi17
Ci0gICAgaWYgKGVsZW1lbnQtPm5hbWUoKS5pc0VtcHR5KCkgfHwgIW1fbmFtZVRvQ2hlY2tlZFJh
ZGlvQnV0dG9uTWFwKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgTmFtZVRvSW5wdXRNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9uYW1lVG9DaGVja2VkUmFkaW9CdXR0b25NYXAtPmZpbmQoZWxlbWVu
dC0+bmFtZSgpLmltcGwoKSk7Ci0gICAgaWYgKGl0ID09IG1fbmFtZVRvQ2hlY2tlZFJhZGlvQnV0
dG9uTWFwLT5lbmQoKSB8fCBpdC0+c2Vjb25kICE9IGVsZW1lbnQpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRvSW5wdXRFbGVtZW50KGVs
ZW1lbnQpOwotICAgIEFTU0VSVF9VTlVTRUQoaW5wdXRFbGVtZW50LCBpbnB1dEVsZW1lbnQpOwot
ICAgIEFTU0VSVChpbnB1dEVsZW1lbnQtPmlzQ2hlY2tlZCgpKTsKLSAgICBBU1NFUlQoZWxlbWVu
dC0+aXNSYWRpb0J1dHRvbigpKTsKLQotICAgIG1fbmFtZVRvQ2hlY2tlZFJhZGlvQnV0dG9uTWFw
LT5yZW1vdmUoaXQpOwotICAgIGlmIChtX25hbWVUb0NoZWNrZWRSYWRpb0J1dHRvbk1hcC0+aXNF
bXB0eSgpKQotICAgICAgICBtX25hbWVUb0NoZWNrZWRSYWRpb0J1dHRvbk1hcC5jbGVhcigpOwot
fQotCiB9IC8vIG5hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAkocmV2aXNpb24g
NDIwNzkpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxA
a2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9A
a2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2Rl
Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw2ICsyNCw3IEBACiAjaWZuZGVmIEhUTUxGb3JtRWxl
bWVudF9oCiAjZGVmaW5lIEhUTUxGb3JtRWxlbWVudF9oCiAKKyNpbmNsdWRlICJDaGVja2VkUmFk
aW9CdXR0b25zLmgiCiAjaW5jbHVkZSAiRm9ybURhdGFCdWlsZGVyLmgiCiAjaW5jbHVkZSAiSFRN
TENvbGxlY3Rpb24uaCIgCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKQEAgLTEwOSwxNyArMTEw
LDYgQEAgcHVibGljOgogICAgIC8vIEZJWE1FOiBDaGFuZ2UgdGhpcyB0byBiZSBwcml2YXRlIGFm
dGVyIGdldHRpbmcgcmlkIG9mIGFsbCB0aGUgY2xpZW50cy4KICAgICBWZWN0b3I8SFRNTEZvcm1D
b250cm9sRWxlbWVudCo+IGZvcm1FbGVtZW50czsKIAotICAgIGNsYXNzIENoZWNrZWRSYWRpb0J1
dHRvbnMgewotICAgIHB1YmxpYzoKLSAgICAgICAgdm9pZCBhZGRCdXR0b24oSFRNTEZvcm1Db250
cm9sRWxlbWVudCopOwotICAgICAgICB2b2lkIHJlbW92ZUJ1dHRvbihIVE1MRm9ybUNvbnRyb2xF
bGVtZW50Kik7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGNoZWNrZWRCdXR0b25Gb3JHcm91
cChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBIVE1MSW5wdXRFbGVtZW50Kj4g
TmFtZVRvSW5wdXRNYXA7Ci0gICAgICAgIE93blB0cjxOYW1lVG9JbnB1dE1hcD4gbV9uYW1lVG9D
aGVja2VkUmFkaW9CdXR0b25NYXA7Ci0gICAgfTsKLSAgICAKICAgICBDaGVja2VkUmFkaW9CdXR0
b25zJiBjaGVja2VkUmFkaW9CdXR0b25zKCkgeyByZXR1cm4gbV9jaGVja2VkUmFkaW9CdXR0b25z
OyB9CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGRvY3VtZW50RGlkQmVjb21lQWN0aXZlKCk7Cklu
ZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0MjA3OSkKKysrIFdlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDggKzEx
Myw3IEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6YXV0b0NvbXBsZXRlKCkgY28KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotCi1zdGF0aWMgaW5saW5lIEhUTUxGb3JtRWxlbWVudDo6Q2hlY2tlZFJh
ZGlvQnV0dG9ucyYgY2hlY2tlZFJhZGlvQnV0dG9ucyhjb25zdCBIVE1MSW5wdXRFbGVtZW50ICpl
bGVtZW50KQorc3RhdGljIGlubGluZSBDaGVja2VkUmFkaW9CdXR0b25zJiBjaGVja2VkUmFkaW9C
dXR0b25zKGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQgKmVsZW1lbnQpCiB7CiAgICAgaWYgKEhUTUxG
b3JtRWxlbWVudCogZm9ybSA9IGVsZW1lbnQtPmZvcm0oKSkKICAgICAgICAgcmV0dXJuIGZvcm0t
PmNoZWNrZWRSYWRpb0J1dHRvbnMoKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY0xvYWRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jTG9hZGVyLmNwcAkocmV2aXNpb24g
NDIwNzkpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAibG9h
ZGVyLmgiCkluZGV4OiBXZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
CShyZXZpc2lvbiA0MjA3OSkKKysrIFdlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJIVE1MQXJlYUVsZW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVFbGVt
ZW50QmFzZS5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
SW5wdXRFbGVtZW50LmgiCkluZGV4OiBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkocmV2aXNpb24gNDIwNzkpCisrKyBXZWJDb3Jl
L3BhZ2UvQ2hyb21lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDEzICsxNTIsMTQgQEAgdm9p
ZCBDaHJvbWU6OnRha2VGb2N1cyhGb2N1c0RpcmVjdGlvbiBkaQogUGFnZSogQ2hyb21lOjpjcmVh
dGVXaW5kb3coRnJhbWUqIGZyYW1lLCBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiByZXF1ZXN0LCBj
b25zdCBXaW5kb3dGZWF0dXJlcyYgZmVhdHVyZXMpIGNvbnN0CiB7CiAgICAgUGFnZSogbmV3UGFn
ZSA9IG1fY2xpZW50LT5jcmVhdGVXaW5kb3coZnJhbWUsIHJlcXVlc3QsIGZlYXR1cmVzKTsKKwog
I2lmIEVOQUJMRShET01fU1RPUkFHRSkKLSAgICAKICAgICBpZiAobmV3UGFnZSkgewogICAgICAg
ICBpZiAoU2Vzc2lvblN0b3JhZ2UqIG9sZFNlc3Npb25TdG9yYWdlID0gbV9wYWdlLT5zZXNzaW9u
U3RvcmFnZShmYWxzZSkpCi0gICAgICAgICAgICAgICAgbmV3UGFnZS0+c2V0U2Vzc2lvblN0b3Jh
Z2Uob2xkU2Vzc2lvblN0b3JhZ2UtPmNvcHkobmV3UGFnZSkpOworICAgICAgICAgICAgbmV3UGFn
ZS0+c2V0U2Vzc2lvblN0b3JhZ2Uob2xkU2Vzc2lvblN0b3JhZ2UtPmNvcHkobmV3UGFnZSkpOwog
ICAgIH0KICNlbmRpZgorCiAgICAgcmV0dXJuIG5ld1BhZ2U7CiB9CiAKSW5kZXg6IFdlYkNvcmUv
cGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlz
aW9uIDQyMDc5KQorKysgV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSwxNCArMjEsMTQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAK
KyNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5j
bHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDbGllbnQuaCIKICNp
bmNsdWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVj
dG9yLmgiCi0jaW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiRE9NV2luZG93Lmgi
CiAjaW5jbHVkZSAiRHJhZ0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIK
ICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1
ZGUgIkZvY3VzQ29udHJvbGxlci5oIgpAQCAtMzYsMjEgKzM2LDIyIEBACiAjaW5jbHVkZSAiRnJh
bWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNp
bmNsdWRlICJOZXR3b3JrU3RhdGVOb3RpZmllci5oIgogI2luY2x1ZGUgIk5hdmlnYXRvci5oIgor
I2luY2x1ZGUgIk5ldHdvcmtTdGF0ZU5vdGlmaWVyLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgi
CiAjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgog
I2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgorI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
ICNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5o
IgogI2luY2x1ZGUgIldpZGdldC5oIgotI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50
ZXIuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCShyZXZpc2lvbiA0MjA3OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDQyMDc5KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0
Niw3IEBACiAKICNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1l
cy5oIgorI2luY2x1ZGUgIkNTU1N0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJDU1NTdHls
ZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVudEhhbmRs
ZXIuaCIKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiA0MjA3OSkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4
ICsyNiw5IEBACiAjZGVmaW5lIFJlbmRlck9iamVjdF9oCiAKICNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZUNsaWVudC5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1
ZGUgIlJlbmRlck9iamVjdENoaWxkTGlzdC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAj
aW5jbHVkZSAiVGV4dEFmZmluaXR5LmgiCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9y
YWdlQXJlYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFy
ZWEuY3BwCShyZXZpc2lvbiA0MjA3OSkKKysrIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VB
cmVhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkV2ZW50
TmFtZXMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2lu
Y2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiTG9jYWxTdG9yYWdlLmgiCiAjaW5jbHVk
ZSAiTG9jYWxTdG9yYWdlVGFzay5oIgogI2luY2x1ZGUgIkxvY2FsU3RvcmFnZVRocmVhZC5oIgpJ
bmRleDogV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlQXJlYS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlQXJlYS5jcHAJKHJldmlzaW9uIDQyMDc5
KQorKysgV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlQXJlYS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1
ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNDIwODEpCisrKyBXZWJLaXQv
bWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExIEBACisyMDA5LTAzLTI5
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsdWdpbnMvV2ViTnVsbFBsdWdpblZpZXcubW06
IEFkZGVkIG5vdy1uZWVkZWQgaW5jbHVkZXMuCisgICAgICAgICogV2ViVmlldy9XZWJIVE1MUmVw
cmVzZW50YXRpb24ubW06IERpdHRvLgorICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFZpZXcubW06
IERpdHRvLgorCiAyMDA5LTAzLTI3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNv
bT4KIAogICAgICAgICAqIE1pZ3JhdGVIZWFkZXJzLm1ha2U6IFJlbW92ZSBET01IVE1MQm9keUVs
ZW1lbnRQcml2YXRlLmggc2luY2UgaXQKSW5kZXg6IFdlYktpdC9tYWMvUGx1Z2lucy9XZWJOdWxs
UGx1Z2luVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1BsdWdpbnMvV2ViTnVsbFBs
dWdpblZpZXcubW0JKHJldmlzaW9uIDQyMDc5KQorKysgV2ViS2l0L21hYy9QbHVnaW5zL1dlYk51
bGxQbHVnaW5WaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0
ICJXZWJGcmFtZUludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKICNpbXBv
cnQgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRWxlbWVudC5oPgogCiBA
aW1wbGVtZW50YXRpb24gV2ViTnVsbFBsdWdpblZpZXcKIApJbmRleDogV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dl
YlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tCShyZXZpc2lvbiA0MjA3OSkKKysrIFdlYktp
dC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0JKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDYgKzQ3LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KICNpbXBvcnQg
PFdlYkNvcmUvRnJhbWVMb2FkZXJDbGllbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTEZvcm1D
b250cm9sRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MRm9ybUVsZW1lbnQuaD4KICNp
bXBvcnQgPFdlYkNvcmUvSFRNTElucHV0RWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1M
TmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgpJbmRleDogV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMv
V2ViVmlldy9XZWJIVE1MVmlldy5tbQkocmV2aXNpb24gNDIwNzkpCisrKyBXZWJLaXQvbWFjL1dl
YlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAKICNp
bXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NUmFuZ2VJbnRlcm5hbC5oIgog
I2ltcG9ydCAiV2ViQXJjaGl2ZS5oIgotI2ltcG9ydCAiV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lmgi
CiAjaW1wb3J0ICJXZWJDbGlwVmlldy5oIgogI2ltcG9ydCAiV2ViRE9NT3BlcmF0aW9uc1ByaXZh
dGUuaCIKICNpbXBvcnQgIldlYkRhdGFTb3VyY2VJbnRlcm5hbC5oIgpAQCAtNTAsNyArNDksNiBA
QAogI2ltcG9ydCAiV2ViS2l0TlNTdHJpbmdFeHRyYXMuaCIKICNpbXBvcnQgIldlYktpdFZlcnNp
b25DaGVja3MuaCIKICNpbXBvcnQgIldlYkxvY2FsaXphYmxlU3RyaW5ncy5oIgotI2ltcG9ydCAi
V2ViTm9kZUhpZ2hsaWdodC5oIgogI2ltcG9ydCAiV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFz
LmgiCiAjaW1wb3J0ICJXZWJOU0V2ZW50RXh0cmFzLmgiCiAjaW1wb3J0ICJXZWJOU0ZpbGVNYW5h
Z2VyRXh0cmFzLmgiCkBAIC02MCw2ICs1OCw4IEBACiAjaW1wb3J0ICJXZWJOU1ByaW50T3BlcmF0
aW9uRXh0cmFzLmgiCiAjaW1wb3J0ICJXZWJOU1VSTEV4dHJhcy5oIgogI2ltcG9ydCAiV2ViTlNW
aWV3RXh0cmFzLmgiCisjaW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdpblZpZXcuaCIKKyNpbXBvcnQg
IldlYk5vZGVIaWdobGlnaHQuaCIKICNpbXBvcnQgIldlYlBsdWdpbkNvbnRyb2xsZXIuaCIKICNp
bXBvcnQgIldlYlByZWZlcmVuY2VzLmgiCiAjaW1wb3J0ICJXZWJQcmVmZXJlbmNlc1ByaXZhdGUu
aCIKQEAgLTcwLDcgKzcwLDcgQEAKICNpbXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgogI2ltcG9y
dCA8QXBwS2l0L05TQWNjZXNzaWJpbGl0eS5oPgogI2ltcG9ydCA8QXBwbGljYXRpb25TZXJ2aWNl
cy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Ci0jaW1wb3J0IDxkbGZjbi5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9DYWNo
ZWRJbWFnZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9DYWNoZWRSZXNvdXJjZUNsaWVudC5oPgogI2lt
cG9ydCA8V2ViQ29yZS9Db2xvck1hYy5oPgpAQCAtNzgsMTkgKzc4LDE5IEBACiAjaW1wb3J0IDxX
ZWJDb3JlL0NvbnRleHRNZW51Q29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVu
dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudEZyYWdtZW50Lmg+CisjaW1wb3J0IDxXZWJD
b3JlL0RyYWdDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0VkaXRvci5oPgogI2ltcG9y
dCA8V2ViQ29yZS9FZGl0b3JEZWxldGVBY3Rpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvRWxlbWVu
dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9FdmVudEhhbmRsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUv
RXhjZXB0aW9uSGFuZGxlcnMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRHJhZ0NvbnRyb2xsZXIuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvY3VzQ29u
dHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9G
cmFtZUxvYWRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvSGl0VGVzdFJlc3VsdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9JbWFnZS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xl
Z2FjeVdlYkFyY2hpdmUuaD4KQEAgLTExMCw2ICsxMTAsNyBAQAogI2ltcG9ydCA8V2ViS2l0L0RP
TUV4dGVuc2lvbnMuaD4KICNpbXBvcnQgPFdlYktpdC9ET01Qcml2YXRlLmg+CiAjaW1wb3J0IDxX
ZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKyNpbXBvcnQgPGRsZmNuLmg+CiAjaW1wb3J0IDxsaW1p
dHM+CiAjaW1wb3J0IDxydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KIAo=
</data>
<flag name="review"
          id="14383"
          type_id="1"
          status="+"
          setter="zwarich"
    />
          </attachment>
      

    </bug>

</bugzilla>