<?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>173941</bug_id>
          
          <creation_ts>2017-06-28 15:02:16 -0700</creation_ts>
          <short_desc>VMTraps has some races</short_desc>
          <delta_ts>2017-06-29 11:35:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Miller">keith_miller</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>buildbot</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1323693</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-06-28 15:02:16 -0700</bug_when>
    <thetext>VMTraps has some races</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323727</commentid>
    <comment_count>1</comment_count>
      <attachid>314066</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-06-28 16:26:24 -0700</bug_when>
    <thetext>Created attachment 314066
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323730</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-28 16:28:29 -0700</bug_when>
    <thetext>Attachment 314066 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/VMTraps.cpp:311:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323740</commentid>
    <comment_count>3</comment_count>
      <attachid>314069</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-06-28 16:52:05 -0700</bug_when>
    <thetext>Created attachment 314069
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323741</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-28 16:53:45 -0700</bug_when>
    <thetext>Attachment 314069 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/VMTraps.cpp:310:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323806</commentid>
    <comment_count>5</comment_count>
      <attachid>314096</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-06-28 19:52:45 -0700</bug_when>
    <thetext>Created attachment 314096
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323808</commentid>
    <comment_count>6</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-28 19:56:19 -0700</bug_when>
    <thetext>Attachment 314096 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/VMTraps.cpp:310:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323973</commentid>
    <comment_count>7</comment_count>
      <attachid>314096</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-06-29 10:21:19 -0700</bug_when>
    <thetext>Comment on attachment 314096
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=314096&amp;action=review

r=me

&gt; Source/JavaScriptCore/runtime/VMTraps.cpp:275
&gt; +                    // FIXME: We need to use the machine threads because it is the only non-TLS source
&gt; +                    // for the stack bounds of this thread. We should keep in on the WTF::Thread instead.

Add bug id for this FIXME.

&gt; Source/JavaScriptCore/runtime/VMTraps.cpp:292
&gt; +        

nit: Revert whitespace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323983</commentid>
    <comment_count>8</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-06-29 10:35:04 -0700</bug_when>
    <thetext>Committed r218936: &lt;http://trac.webkit.org/changeset/218936&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324012</commentid>
    <comment_count>9</comment_count>
      <attachid>314096</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-06-29 11:35:31 -0700</bug_when>
    <thetext>Comment on attachment 314096
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=314096&amp;action=review

LGTM too. Just a few comments.

&gt; Source/JavaScriptCore/dfg/DFGCommonData.cpp:108
&gt; +        LockHolder locker(pcCodeBlockMapLock);
&gt; +        auto&amp; map = pcCodeBlockMap(locker);
&gt; +        for (auto&amp; jumpReplacement : jumpReplacements)
&gt; +            map.remove(jumpReplacement.dataLocation());

You should make a function for this since it&apos;s duplicated below.

&gt; Source/JavaScriptCore/dfg/DFGCommonData.cpp:160
&gt; +    if (result == map.end())
&gt; +        return nullptr;

Seems like this should be a RELEASE_ASSERT(result != map.end()) since we always assume we find it.

&gt; Source/JavaScriptCore/runtime/VMTraps.cpp:113
&gt; +    auto codeBlockSetLocker = isJITPC(trapPC) ? holdLock(lock) : tryHoldLock(lock);

isJITPC should be (isJITPC || isLLIntPC)

Maybe it&apos;s worth making a function for this since you use this general concept in another place too.

&gt; Source/JavaScriptCore/runtime/VMTraps.cpp:208
&gt; +                SignalContext context(registers);

It seems sketchy to do the below work on a different thread than the execution thread. To be super duper safe, I&apos;d just return to a thunk that did this for you.

&gt; Source/JavaScriptCore/runtime/VMTraps.cpp:284
&gt; +                            stackBounds = StackBounds(machineThread-&gt;stackBase(), machineThread-&gt;stackEnd());

why can&apos;t you just get this from the VM?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314066</attachid>
            <date>2017-06-28 16:26:24 -0700</date>
            <delta_ts>2017-06-28 16:52:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173941-20170628162622.patch</filename>
            <type>text/plain</type>
            <size>40885</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE4ODM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
Y2FmZmRjOWE0ZTc4YzVjMDA1ZjQ5ZTA4ZDJiZDQ3NDFhNGIzNDY4Li43NjQyYzk2OGExODRjMmY1
NmZmZjFlNjc3MmE5ODdiNTExY2E5NTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NiBAQAorMjAxNy0wNi0yOCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBWTVRyYXBzIGhhcyBzb21lIHJhY2VzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM5NDEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHJlZmFjdG9ycyBtdWNo
IG9mIHRoZSBWTVRyYXBzIEFQSS4KKworICAgICAgICBPbiB0aGUgbWVzc2FnZSBzZW5kaW5nIHNp
ZGU6CisKKyAgICAgICAgMSkgTm8gbG9uZ2VyIHVzZXMgdGhlIFlhcnIgSklUIGNoZWNrIHRvIGRl
dGVybWluZSBpZiB3ZSBhcmUgaW4KKyAgICAgICAgUmVnRXhwIGNvZGUuIFRoYXQgd2FzIHVuc291
bmQgYmVjYXVzZSBSZWdFeHAgSklUIGNvZGUgY2FuIGJlIHJ1bgorICAgICAgICBvbiBjb21waWxh
dGlvbiB0aHJlYWRzLiAgSW5zdGVhZCBpdCBsb29rcyBhdCB0aGUgY3VycmVudCBmcmFtZSdzCisg
ICAgICAgIGNvZGUgYmxvY2sgc2xvdCBhbmQgY2hlY2tzIGlmIGl0IGlzIHZhbGlkLCB3aGljaCBp
cyB0aGUgc2FtZSBhcworICAgICAgICB3aGF0IGl0IGRpZCBmb3IgSklUIGNvZGUgcHJldmlvdXNs
eS4KKworICAgICAgICAyKSBPbmx5IGhhdmUgb25lIHNpZ25hbCBzZW5kZXIgdGhyZWFkLCBwcmV2
aW91c2x5LCB0aGVyZSBjb3VsZCBiZQorICAgICAgICBtYW55IGF0IG9uY2UsIHdoaWNoIGNhdXNl
ZCBzb21lIGRhdGEgcmFjZXMuIEFkZGl0aW9uYWxseSwgdGhlCisgICAgICAgIHNpZ25hbCBzZW5k
ZXIgdGhyZWFkIGlzIGFuIGF1dG9tYXRpYyB0aHJlYWQgc28gaXQgd2lsbCBkZWFsbG9jYXRlCisg
ICAgICAgIGl0c2VsZiB3aGVuIG5vdCBpbiB1c2UuCisKKyAgICAgICAgT24gdGhlIFZNVHJhcHMg
YnJlYWtwb2ludCBzaWRlOgorCisgICAgICAgIDEpIFdlIG5vdyBoYXZlIGEgdHJ1ZSBtYXBwaW5n
IG9mIGlmIHdlIGhpdCBhIGJyZWFrcG9pbnQgaW5zdGVhZCBvZgorICAgICAgICBhIEpJVCBhc3Nl
cnRpb24uIFNvIHRoZSBleGNlcHRpb24gaGFuZGxlciB3b24ndCBlYXQgSklUIGFzc2VydGlvbnMK
KyAgICAgICAgYW55bW9yZS4KKworICAgICAgICAyKSBJdCBqZXR0aXNvbnMgYWxsIENvZGVCbG9j
a3MgdGhhdCBoYXZlIFZNVHJhcHMgYnJlYWtwb2ludHMgb24KKyAgICAgICAgdGhlbSBpbnN0ZWFk
IG9mIGV2ZXJ5IENvZGVCbG9jayBvbiB0aGUgc3RhY2suIFRoaXMgYm90aCBwcmV2ZW50cworICAg
ICAgICB1cyBmcm9tIGhpdHRpbmcgc3RhbGUgVk1UcmFwcyBicmVha3BvaW50cyBhbmQgYWxzbyBk
b2Vzbid0IE9TUgorICAgICAgICBjb2RlYmxvY2tzIHRoYXQgb3RoZXJ3aXNlIGRvbid0IG5lZWQg
dG8gYmUgamV0dGlzb25lZC4KKworICAgICAgICAzKSBUaGUgb2xkIGV4Y2VwdGlvbiBoYW5kbGVy
IGNvdWxkIHRoZW9yZXRpY2FsbHkgZmFpbCBmb3IgYSBjb3VwbGUKKyAgICAgICAgb2YgcmVhc29u
cyB0aGVuIHJlc3VtZSBleGVjdXRpb24gd2l0aCBhIGNsb2JiZXJlZCBpbnN0cnVjdGlvbgorICAg
ICAgICBzZXQuIFRoaXMgcGF0Y2ggd2lsbCBraWxsIHRoZSBwcm9ncmFtIGlmIHRoZSBleGNlcHRp
b24gaGFuZGxlcgorICAgICAgICB3b3VsZCBmYWlsLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxz
byByZWZhY3RvcnMgc29tZSBvZiB0aGUganNjLmNwcCBmdW5jdGlvbnMgdG8gdGFrZSB0aGUKKyAg
ICAgICAgQ29tbWFuZExpbmUgb3B0aW9ucyBvYmplY3QgaW5zdGVhZCBvZiBpbmRpdmlkdWFsIG9w
dGlvbnMuIEFsc28sIHRoZXJlCisgICAgICAgIGlzIGEgbmV3IGNvbW1hbmQgbGluZSBvcHRpb24g
dGhhdCBtYWtlcyBleGNlcHRpb25zIGR1ZSB0byB3YXRjaGRvZworICAgICAgICB0aW1lb3V0cyBh
biBhY2NlcHRhYmxlIHJlc3VsdC4KKworICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLmM6Cisg
ICAgICAgIChtYWluKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6Omluc3RhbGxWTVRyYXBCcmVha3BvaW50cyk6CisgICAgICAgICog
ZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnBjQ29kZUJsb2NrTWFw
KToKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjppbnZhbGlkYXRlKToKKyAgICAgICAg
KEpTQzo6REZHOjpDb21tb25EYXRhOjp+Q29tbW9uRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6
Q29tbW9uRGF0YTo6aW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKToKKyAgICAgICAgKEpTQzo6REZH
Ojpjb2RlQmxvY2tGb3JWTVRyYXBQQyk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuaDoK
KyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25Eb2xsYXJBZ2VudFN0YXJ0KToK
KyAgICAgICAgKGNoZWNrVW5jYXVnaHRFeGNlcHRpb24pOgorICAgICAgICAoY2hlY2tFeGNlcHRp
b24pOgorICAgICAgICAocnVuV2l0aE9wdGlvbnMpOgorICAgICAgICAocHJpbnRVc2FnZVN0YXRl
bWVudCk6CisgICAgICAgIChDb21tYW5kTGluZTo6cGFyc2VBcmd1bWVudHMpOgorICAgICAgICAo
anNjbWFpbik6CisgICAgICAgIChydW5XaXRoU2NyaXB0cyk6IERlbGV0ZWQuCisgICAgICAgICog
cnVudGltZS9KU0xvY2suY3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OmRpZEFjcXVpcmVMb2Nr
KToKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgorICAgICAgICAoSlNDOjpzYW5pdGl6
ZWRUb3BDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjp0cnlJbnN0YWxsVHJhcEJy
ZWFrcG9pbnRzKToKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6d2lsbERlc3Ryb3lWTSk6CisgICAg
ICAgIChKU0M6OlZNVHJhcHM6OmZpcmVUcmFwKToKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6aGFu
ZGxlVHJhcHMpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjpWTVRyYXBzKToKKyAgICAgICAgKEpT
Qzo6Vk1UcmFwczo6flZNVHJhcHMpOgorICAgICAgICAoSlNDOjpmaW5kQWN0aXZlVk1BbmRTdGFj
a0JvdW5kcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Omluc3RhbGxTaWduYWxIYW5kbGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6YWRkU2lnbmFsU2VuZGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6cmVtb3ZlU2lnbmFsU2VuZGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Vk1UcmFwczo6U2lnbmFsU2VuZGVyOjp3aWxsRGVzdHJveVZNKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6U2lnbmFsU2VuZGVyOjpzZW5kKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuaDoKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6
flZNVHJhcHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWTVRyYXBzOjpTaWduYWxTZW5kZXI6
OlNpZ25hbFNlbmRlcik6IERlbGV0ZWQuCisKIDIwMTctMDYtMjYgIFNhYW0gQmFyYXRpICA8c2Jh
cmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVnRXhwUHJvdG90eXBlLmpzIGJ1aWx0aW4gdXNl
cyBmb3Itb2YgaXRlcmF0aW9uIHdoaWNoIGlzIGFsbW9zdCBjZXJ0YWlubHkgaW5jb3JyZWN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCmluZGV4IDlkM2I0NTYyOWY1
YzFmYWNjODEwOTkxOTgzNjRkZjE1OTZjOWYzZDcuLmYxMmNjMmVlMjFiMzhlOGFlMGZmMjQ0ZWVk
MTk1M2YzMjNiM2M1MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVz
dHMvdGVzdGFwaS5jCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFw
aS5jCkBAIC0xMzQ4LDcgKzEzNDgsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltd
KQogICAgIDo6U2V0RXJyb3JNb2RlKDApOwogI2VuZGlmCiAKLSAgICB0ZXN0RXhlY3V0aW9uVGlt
ZUxpbWl0KCk7CiAgICAgdGVzdENvbXBhcmVBbmRTd2FwKCk7CiAgICAgc3RhcnRNdWx0aXRocmVh
ZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCBiYjRlYmZjYjU0NzQ5OGZlZWU5N2Q4Zjg4Nzg2Y2Mw
YzEwYmQ2Y2ZhLi42MGRlZjY1NTZjYWE0YWFmNzJkNTQ1ODc3ZTI3Y2MyZTAyMWFlYjNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtMzAwNSw5
ICszMDA1LDEwIEBAIGJvb2wgQ29kZUJsb2NrOjppbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKQog
ICAgIC8vIHdlIHNob3VsZCBub3QgcGVydHVyYiB0aGUgcmVmQ291bnQgb2YgbV9qaXRDb2RlLgog
ICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5pbnN0YWxsVk1UcmFwQnJl
YWtwb2ludHMoKTsKKyAgICBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5pbnN0YWxsVk1UcmFwQnJl
YWtwb2ludHModGhpcyk7CiAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQorICAgIFVOUkVBQ0hBQkxF
X0ZPUl9QTEFURk9STSgpOwogICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKaW5kZXggY2QxZTVlZmY4Y2E1Njc0
Y2JhM2FhYmQ3ZmUxODM1ODQzYmVmNTYyMS4uYzAyY2Q1MTcxYjM2ODcwZjM5Nzg5NzQyZmVlMjE2
YjhiMWVjOWU5MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21t
b25EYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEu
Y3BwCkBAIC0zNiw2ICszNiw4IEBACiAjaW5jbHVkZSAiVHJhY2tlZFJlZmVyZW5jZXMuaCIKICNp
bmNsdWRlICJWTS5oIgogCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBDb21tb25EYXRhOjpub3RpZnlDb21w
aWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKFBsYW4mIHBsYW4sIENvZGVCbG9jayogY29kZUJsb2Nr
LCBOb2RlKiBub2RlKQpAQCAtODcsMjMgKzg5LDc1IEBAIHZvaWQgQ29tbW9uRGF0YTo6c2hyaW5r
VG9GaXQoKQogICAgIHRyYW5zaXRpb25zLnNocmlua1RvRml0KCk7CiB9CiAKK3N0YXRpYyBTdGF0
aWNMb2NrIHBjQ29kZUJsb2NrTWFwTG9jazsKK2lubGluZSBIYXNoTWFwPHZvaWQqLCBDb2RlQmxv
Y2sqPiYgcGNDb2RlQmxvY2tNYXAoQWJzdHJhY3RMb2NrZXImKQoreworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxIYXNoTWFwPHZvaWQqLCBDb2RlQmxvY2sqPj4gcGNDb2RlQmxvY2tNYXA7Cisg
ICAgcmV0dXJuIHBjQ29kZUJsb2NrTWFwOworfQorCiBib29sIENvbW1vbkRhdGE6OmludmFsaWRh
dGUoKQogewogICAgIGlmICghaXNTdGlsbFZhbGlkKQogICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAoVU5MSUtFTFkoaGFzVk1UcmFwc0JyZWFrcG9pbnRzSW5zdGFsbGVkKSkgeworICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihwY0NvZGVCbG9ja01hcExvY2spOworICAgICAgICBhdXRv
JiBtYXAgPSBwY0NvZGVCbG9ja01hcChsb2NrZXIpOworICAgICAgICBmb3IgKGF1dG8mIGp1bXBS
ZXBsYWNlbWVudCA6IGp1bXBSZXBsYWNlbWVudHMpCisgICAgICAgICAgICBtYXAucmVtb3ZlKGp1
bXBSZXBsYWNlbWVudC5kYXRhTG9jYXRpb24oKSk7CisgICAgICAgIGhhc1ZNVHJhcHNCcmVha3Bv
aW50c0luc3RhbGxlZCA9IGZhbHNlOworICAgIH0KKwogICAgIGZvciAodW5zaWduZWQgaSA9IGp1
bXBSZXBsYWNlbWVudHMuc2l6ZSgpOyBpLS07KQogICAgICAgICBqdW1wUmVwbGFjZW1lbnRzW2ld
LmZpcmUoKTsKICAgICBpc1N0aWxsVmFsaWQgPSBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBDb21tb25EYXRhOjppbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKQorQ29tbW9uRGF0
YTo6fkNvbW1vbkRhdGEoKQogeworICAgIGlmIChVTkxJS0VMWShoYXNWTVRyYXBzQnJlYWtwb2lu
dHNJbnN0YWxsZWQpKSB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHBjQ29kZUJsb2NrTWFw
TG9jayk7CisgICAgICAgIGF1dG8mIG1hcCA9IHBjQ29kZUJsb2NrTWFwKGxvY2tlcik7CisgICAg
ICAgIGZvciAoYXV0byYganVtcFJlcGxhY2VtZW50IDoganVtcFJlcGxhY2VtZW50cykKKyAgICAg
ICAgICAgIG1hcC5yZW1vdmUoanVtcFJlcGxhY2VtZW50LmRhdGFMb2NhdGlvbigpKTsKKyAgICB9
Cit9CisKK3ZvaWQgQ29tbW9uRGF0YTo6aW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKENvZGVCbG9j
ayogb3duZXIpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIocGNDb2RlQmxvY2tNYXBMb2NrKTsK
ICAgICBpZiAoIWlzU3RpbGxWYWxpZCB8fCBoYXNWTVRyYXBzQnJlYWtwb2ludHNJbnN0YWxsZWQp
CiAgICAgICAgIHJldHVybjsKICAgICBoYXNWTVRyYXBzQnJlYWtwb2ludHNJbnN0YWxsZWQgPSB0
cnVlOwotICAgIGZvciAodW5zaWduZWQgaSA9IGp1bXBSZXBsYWNlbWVudHMuc2l6ZSgpOyBpLS07
KQotICAgICAgICBqdW1wUmVwbGFjZW1lbnRzW2ldLmluc3RhbGxWTVRyYXBCcmVha3BvaW50KCk7
CisKKyAgICBhdXRvJiBtYXAgPSBwY0NvZGVCbG9ja01hcChsb2NrZXIpOworI2lmICFkZWZpbmVk
KE5ERUJVRykKKyAgICAvLyBXZSBuZWVkIHRvIGJlIGFibGUgdG8gaGFuZGxlIG1vcmUgdGhhbiBv
bmUgaW52YWxpZGF0aW9uIHBvaW50IGF0IHRoZSBzYW1lIHBjCisgICAgLy8gYnV0IHdlIHdhbnQg
dG8gbWFrZSBzdXJlIHdlIGRvbid0IGZvcmdldCB0byByZW1vdmUgYSBwYyBmcm9tIHRoZSBtYXAu
CisgICAgSGFzaFNldDx2b2lkKj4gbmV3UmVwbGFjZW1lbnRzOworI2VuZGlmCisgICAgZm9yIChh
dXRvJiBqdW1wUmVwbGFjZW1lbnQgOiBqdW1wUmVwbGFjZW1lbnRzKSB7CisgICAgICAgIGp1bXBS
ZXBsYWNlbWVudC5pbnN0YWxsVk1UcmFwQnJlYWtwb2ludCgpOworICAgICAgICB2b2lkKiBzb3Vy
Y2UgPSBqdW1wUmVwbGFjZW1lbnQuZGF0YUxvY2F0aW9uKCk7CisgICAgICAgIGF1dG8gcmVzdWx0
ID0gbWFwLmFkZChzb3VyY2UsIG93bmVyKTsKKyNpZiAhZGVmaW5lZChOREVCVUcpCisgICAgICAg
IEFTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSB8fCBuZXdSZXBsYWNlbWVudHMuY29udGFpbnMoc291
cmNlKSk7CisgICAgICAgIG5ld1JlcGxhY2VtZW50cy5hZGQoc291cmNlKTsKKyNlbmRpZgorICAg
IH0KK30KKworQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3JWTVRyYXBQQyh2b2lkKiBwYykKK3sKKyAg
ICBBU1NFUlQoaXNKSVRQQyhwYykpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKHBjQ29kZUJsb2Nr
TWFwTG9jayk7CisgICAgYXV0byYgbWFwID0gcGNDb2RlQmxvY2tNYXAobG9ja2VyKTsKKyAgICBh
dXRvIHJlc3VsdCA9IG1hcC5maW5kKHBjKTsKKyAgICBpZiAocmVzdWx0ID09IG1hcC5lbmQoKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiB9CiAK
IGJvb2wgQ29tbW9uRGF0YTo6aXNWTVRyYXBCcmVha3BvaW50KHZvaWQqIGFkZHJlc3MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCmluZGV4IGZkZTA3NDcyYjkyNDI4
OWU5MTEyNWMzYTZlYWNkNDhkNWM2YTZmYWIuLjI5NGMxMWZlOWUxMTBhZmMxODU5YjEzN2NkNWMz
Y2Y2Y2YyM2IyMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uRGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5o
CkBAIC03NSw2ICs3NSw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBmcmFtZVJlZ2lzdGVyQ291bnQo
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQogICAgICAgICAsIHJlcXVpcmVk
UmVnaXN0ZXJDb3VudEZvckV4aXQoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
KQogICAgIHsgfQorICAgIH5Db21tb25EYXRhKCk7CiAgICAgCiAgICAgdm9pZCBub3RpZnlDb21w
aWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKFBsYW4mLCBDb2RlQmxvY2sqLCBOb2RlKik7CiAgICAg
Q2FsbFNpdGVJbmRleCBhZGRDb2RlT3JpZ2luKENvZGVPcmlnaW4pOwpAQCAtODYsNyArODcsNyBA
QCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpbnZhbGlkYXRlKCk7IC8vIFJldHVybnMgdHJ1ZSBp
ZiB3ZSBkaWQgaW52YWxpZGF0ZSwgb3IgZmFsc2UgaWYgdGhlIGNvZGUgYmxvY2sgd2FzIGFscmVh
ZHkgaW52YWxpZGF0ZWQuCiAgICAgYm9vbCBoYXNJbnN0YWxsZWRWTVRyYXBzQnJlYWtwb2ludHMo
KSBjb25zdCB7IHJldHVybiBpc1N0aWxsVmFsaWQgJiYgaGFzVk1UcmFwc0JyZWFrcG9pbnRzSW5z
dGFsbGVkOyB9Ci0gICAgdm9pZCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKKyAgICB2b2lk
IGluc3RhbGxWTVRyYXBCcmVha3BvaW50cyhDb2RlQmxvY2sqIG93bmVyKTsKICAgICBib29sIGlz
Vk1UcmFwQnJlYWtwb2ludCh2b2lkKiBhZGRyZXNzKTsKIAogICAgIHVuc2lnbmVkIHJlcXVpcmVk
UmVnaXN0ZXJDb3VudEZvckV4ZWN1dGlvbkFuZEV4aXQoKSBjb25zdApAQCAtMTI4LDYgKzEyOSw4
IEBAIHByaXZhdGU6CiAKIH07CiAKK0NvZGVCbG9jayogY29kZUJsb2NrRm9yVk1UcmFwUEModm9p
ZCogcGMpOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggYTcxZmU3NjNhYzk0YzNkZDYzM2ZmNzRk
MWQ2ZDVjOTE1YTg5ZTU2Ni4uYWFkYzE0MjNhMjRiNGMzY2VhMzY2MzVlMGM5ZDU2NDY5ZDQyMWFi
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTk4Niw3ICs5ODYsNyBAQCBjbGFzcyBXb3JrZXJz
OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogaW50IHJ1bkpTQyhDb21tYW5kTGluZSwgYm9v
bCBpc1dvcmtlciwgY29uc3QgRnVuYyYpOwotc3RhdGljIHZvaWQgY2hlY2tFeGNlcHRpb24oR2xv
YmFsT2JqZWN0KiwgYm9vbCBpc0xhc3RGaWxlLCBib29sIGhhc0V4Y2VwdGlvbiwgSlNWYWx1ZSwg
Y29uc3QgU3RyaW5nJiB1bmNhdWdodEV4Y2VwdGlvbk5hbWUsIGJvb2wgYWx3YXlzRHVtcFVuY2F1
Z2h0RXhjZXB0aW9uLCBib29sIGR1bXAsIGJvb2wmIHN1Y2Nlc3MpOworc3RhdGljIHZvaWQgY2hl
Y2tFeGNlcHRpb24oR2xvYmFsT2JqZWN0KiwgYm9vbCBpc0xhc3RGaWxlLCBib29sIGhhc0V4Y2Vw
dGlvbiwgSlNWYWx1ZSwgQ29tbWFuZExpbmUmLCBib29sJiBzdWNjZXNzKTsKIAogY2xhc3MgTWVz
c2FnZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNZXNzYWdlPiB7CiBwdWJsaWM6CkBA
IC0xMjEwLDYgKzEyMTAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBtX3Byb2ZpbGUgeyBmYWxzZSB9
OwogICAgIFN0cmluZyBtX3Byb2ZpbGVyT3V0cHV0OwogICAgIFN0cmluZyBtX3VuY2F1Z2h0RXhj
ZXB0aW9uTmFtZTsKKyAgICBib29sIG1fdHJlYXRXYXRjaGRvZ0V4Y2VwdGlvbkFzU3VjY2VzcyB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX2Fsd2F5c0R1bXBVbmNhdWdodEV4Y2VwdGlvbiB7IGZhbHNl
IH07CiAgICAgYm9vbCBtX2R1bXBTYW1wbGluZ1Byb2ZpbGVyRGF0YSB7IGZhbHNlIH07CiAgICAg
Ym9vbCBtX2VuYWJsZVJlbW90ZURlYnVnZ2luZyB7IGZhbHNlIH07CkBAIC0yNjE3LDcgKzI2MTgs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRG9sbGFyQWdlbnRTdGFy
dChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGV2YWx1YXRl
KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBtYWtlU291cmNlKHNvdXJjZUNvZGUsIFNvdXJj
ZU9yaWdpbihBU0NJSUxpdGVyYWwoIndvcmtlciIpKSksIEpTVmFsdWUoKSwgZXZhbHVhdGlvbkV4
Y2VwdGlvbik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKQog
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFs
dWUoKTsKLSAgICAgICAgICAgICAgICAgICAgY2hlY2tFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0
cnVlLCBldmFsdWF0aW9uRXhjZXB0aW9uLCByZXN1bHQsIFN0cmluZygpLCBmYWxzZSwgZmFsc2Us
IHN1Y2Nlc3MpOworICAgICAgICAgICAgICAgICAgICBjaGVja0V4Y2VwdGlvbihnbG9iYWxPYmpl
Y3QsIHRydWUsIGV2YWx1YXRpb25FeGNlcHRpb24sIHJlc3VsdCwgY29tbWFuZExpbmUsIHN1Y2Nl
c3MpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBleGl0KDEpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzczsKQEAg
LTMyOTIsOCArMzI5Myw5IEBAIHN0YXRpYyB2b2lkIGR1bXBFeGNlcHRpb24oR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgZXhjZXB0aW9uKQogI3VuZGVmIENIRUNLX0VYQ0VQVElP
TgogfQogCi1zdGF0aWMgYm9vbCBjaGVja1VuY2F1Z2h0RXhjZXB0aW9uKFZNJiB2bSwgR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgZXhjZXB0aW9uLCBjb25zdCBTdHJpbmcmIGV4
cGVjdGVkRXhjZXB0aW9uTmFtZSwgYm9vbCBhbHdheXNEdW1wRXhjZXB0aW9uKQorc3RhdGljIGJv
b2wgY2hlY2tVbmNhdWdodEV4Y2VwdGlvbihWTSYgdm0sIEdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIGV4Y2VwdGlvbiwgQ29tbWFuZExpbmUmIG9wdGlvbnMpCiB7CisgICAgY29u
c3QgU3RyaW5nJiBleHBlY3RlZEV4Y2VwdGlvbk5hbWUgPSBvcHRpb25zLm1fdW5jYXVnaHRFeGNl
cHRpb25OYW1lOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAg
ICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIGlmICghZXhjZXB0aW9uKSB7CkBAIC0zMzE0
LDcgKzMzMTYsNyBAQCBzdGF0aWMgYm9vbCBjaGVja1VuY2F1Z2h0RXhjZXB0aW9uKFZNJiB2bSwg
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgZQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIGlmIChpc0luc3RhbmNlT2ZFeHBlY3RlZEV4Y2VwdGlvbikgewotICAg
ICAgICBpZiAoYWx3YXlzRHVtcEV4Y2VwdGlvbikKKyAgICAgICAgaWYgKG9wdGlvbnMubV9hbHdh
eXNEdW1wVW5jYXVnaHRFeGNlcHRpb24pCiAgICAgICAgICAgICBkdW1wRXhjZXB0aW9uKGdsb2Jh
bE9iamVjdCwgZXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzMy
NCwyNSArMzMyNiwzMiBAQCBzdGF0aWMgYm9vbCBjaGVja1VuY2F1Z2h0RXhjZXB0aW9uKFZNJiB2
bSwgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgZQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotc3RhdGljIHZvaWQgY2hlY2tFeGNlcHRpb24oR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGJvb2wgaXNMYXN0RmlsZSwgYm9vbCBoYXNFeGNlcHRpb24sIEpTVmFsdWUgdmFsdWUs
IGNvbnN0IFN0cmluZyYgdW5jYXVnaHRFeGNlcHRpb25OYW1lLCBib29sIGFsd2F5c0R1bXBVbmNh
dWdodEV4Y2VwdGlvbiwgYm9vbCBkdW1wLCBib29sJiBzdWNjZXNzKQorc3RhdGljIHZvaWQgY2hl
Y2tFeGNlcHRpb24oR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGJvb2wgaXNMYXN0RmlsZSwg
Ym9vbCBoYXNFeGNlcHRpb24sIEpTVmFsdWUgdmFsdWUsIENvbW1hbmRMaW5lJiBvcHRpb25zLCBi
b29sJiBzdWNjZXNzKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBp
ZiAoIXVuY2F1Z2h0RXhjZXB0aW9uTmFtZSB8fCAhaXNMYXN0RmlsZSkgeworCisgICAgaWYgKG9w
dGlvbnMubV90cmVhdFdhdGNoZG9nRXhjZXB0aW9uQXNTdWNjZXNzICYmIHZhbHVlLmluaGVyaXRz
KHZtLCBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmluZm8oKSkpIHsKKyAgICAgICAgQVNTRVJU
KGhhc0V4Y2VwdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW9wdGlv
bnMubV91bmNhdWdodEV4Y2VwdGlvbk5hbWUgfHwgIWlzTGFzdEZpbGUpIHsKICAgICAgICAgc3Vj
Y2VzcyA9IHN1Y2Nlc3MgJiYgIWhhc0V4Y2VwdGlvbjsKLSAgICAgICAgaWYgKGR1bXAgJiYgIWhh
c0V4Y2VwdGlvbikKKyAgICAgICAgaWYgKG9wdGlvbnMubV9kdW1wICYmICFoYXNFeGNlcHRpb24p
CiAgICAgICAgICAgICBwcmludGYoIkVuZDogJXNcbiIsIHZhbHVlLnRvV1RGU3RyaW5nKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgaWYgKGhhc0V4
Y2VwdGlvbikKICAgICAgICAgICAgIGR1bXBFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7
CiAgICAgfSBlbHNlCi0gICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmIGNoZWNrVW5jYXVnaHRF
eGNlcHRpb24odm0sIGdsb2JhbE9iamVjdCwgKGhhc0V4Y2VwdGlvbikgPyB2YWx1ZSA6IEpTVmFs
dWUoKSwgdW5jYXVnaHRFeGNlcHRpb25OYW1lLCBhbHdheXNEdW1wVW5jYXVnaHRFeGNlcHRpb24p
OworICAgICAgICBzdWNjZXNzID0gc3VjY2VzcyAmJiBjaGVja1VuY2F1Z2h0RXhjZXB0aW9uKHZt
LCBnbG9iYWxPYmplY3QsIChoYXNFeGNlcHRpb24pID8gdmFsdWUgOiBKU1ZhbHVlKCksIG9wdGlv
bnMpOwogfQogCi1zdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgY29uc3QgVmVjdG9yPFNjcmlwdD4mIHNjcmlwdHMsIGNvbnN0IFN0cmluZyYgdW5j
YXVnaHRFeGNlcHRpb25OYW1lLCBib29sIGFsd2F5c0R1bXBVbmNhdWdodEV4Y2VwdGlvbiwgYm9v
bCBkdW1wLCBib29sIG1vZHVsZSkKK3N0YXRpYyBib29sIHJ1bldpdGhPcHRpb25zKEdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDb21tYW5kTGluZSYgb3B0aW9ucykKIHsKKyAgICBWZWN0b3I8
U2NyaXB0PiYgc2NyaXB0cyA9IG9wdGlvbnMubV9zY3JpcHRzOwogICAgIFN0cmluZyBmaWxlTmFt
ZTsKICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0QnVmZmVyOwogCi0gICAgaWYgKGR1bXApCisgICAg
aWYgKG9wdGlvbnMubV9kdW1wKQogICAgICAgICBKU0M6Ok9wdGlvbnM6OmR1bXBHZW5lcmF0ZWRC
eXRlY29kZXMoKSA9IHRydWU7CiAKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkBA
IC0zMzU1LDcgKzMzNjQsNyBAQCBzdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFNjcmlwdD4mIHNjcgogCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzY3JpcHRzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIEpTSW50ZXJu
YWxQcm9taXNlKiBwcm9taXNlID0gbnVsbHB0cjsKLSAgICAgICAgYm9vbCBpc01vZHVsZSA9IG1v
ZHVsZSB8fCBzY3JpcHRzW2ldLnNjcmlwdFR5cGUgPT0gU2NyaXB0OjpTY3JpcHRUeXBlOjpNb2R1
bGU7CisgICAgICAgIGJvb2wgaXNNb2R1bGUgPSBvcHRpb25zLm1fbW9kdWxlIHx8IHNjcmlwdHNb
aV0uc2NyaXB0VHlwZSA9PSBTY3JpcHQ6OlNjcmlwdFR5cGU6Ok1vZHVsZTsKICAgICAgICAgaWYg
KHNjcmlwdHNbaV0uY29kZVNvdXJjZSA9PSBTY3JpcHQ6OkNvZGVTb3VyY2U6OkZpbGUpIHsKICAg
ICAgICAgICAgIGZpbGVOYW1lID0gc2NyaXB0c1tpXS5hcmd1bWVudDsKICAgICAgICAgICAgIGlm
IChzY3JpcHRzW2ldLnN0cmljdE1vZGUgPT0gU2NyaXB0OjpTdHJpY3RNb2RlOjpTdHJpY3QpCkBA
IC0zMzgyLDEyICszMzkxLDEyIEBAIHN0YXRpYyBib29sIHJ1bldpdGhTY3JpcHRzKEdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8U2NyaXB0PiYgc2NyCiAgICAgICAgICAg
ICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgICAgICAgICBKU0Z1bmN0aW9uKiBmdWxm
aWxsSGFuZGxlciA9IEpTTmF0aXZlU3RkRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCAxLCBTdHJpbmcoKSwgWyYsIGlzTGFzdEZpbGVdKEV4ZWNTdGF0ZSogZXhlYykgewotICAgICAg
ICAgICAgICAgIGNoZWNrRXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgaXNMYXN0RmlsZSwgZmFsc2Us
IGV4ZWMtPmFyZ3VtZW50KDApLCB1bmNhdWdodEV4Y2VwdGlvbk5hbWUsIGFsd2F5c0R1bXBVbmNh
dWdodEV4Y2VwdGlvbiwgZHVtcCwgc3VjY2Vzcyk7CisgICAgICAgICAgICAgICAgY2hlY2tFeGNl
cHRpb24oZ2xvYmFsT2JqZWN0LCBpc0xhc3RGaWxlLCBmYWxzZSwgZXhlYy0+YXJndW1lbnQoMCks
IG9wdGlvbnMsIHN1Y2Nlc3MpOwogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgSlNGdW5j
dGlvbiogcmVqZWN0SGFuZGxlciA9IEpTTmF0aXZlU3RkRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCAxLCBTdHJpbmcoKSwgWyYsIGlzTGFzdEZpbGVdKEV4ZWNTdGF0ZSogZXhlYykg
ewotICAgICAgICAgICAgICAgIGNoZWNrRXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgaXNMYXN0Rmls
ZSwgdHJ1ZSwgZXhlYy0+YXJndW1lbnQoMCksIHVuY2F1Z2h0RXhjZXB0aW9uTmFtZSwgYWx3YXlz
RHVtcFVuY2F1Z2h0RXhjZXB0aW9uLCBkdW1wLCBzdWNjZXNzKTsKKyAgICAgICAgICAgICAgICBj
aGVja0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIGlzTGFzdEZpbGUsIHRydWUsIGV4ZWMtPmFyZ3Vt
ZW50KDApLCBvcHRpb25zLCBzdWNjZXNzKTsKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgfSk7CiAKQEAgLTM0MDAsNyAr
MzQwOSw3IEBAIHN0YXRpYyBib29sIHJ1bldpdGhTY3JpcHRzKEdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBWZWN0b3I8U2NyaXB0PiYgc2NyCiAgICAgICAgICAgICBzY29wZS5hc3Nl
cnROb0V4Y2VwdGlvbigpOwogICAgICAgICAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCiAg
ICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBldmFsdWF0aW9uRXhjZXB0aW9uLT52YWx1ZSgp
OwotICAgICAgICAgICAgY2hlY2tFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBpc0xhc3RGaWxlLCBl
dmFsdWF0aW9uRXhjZXB0aW9uLCByZXR1cm5WYWx1ZSwgdW5jYXVnaHRFeGNlcHRpb25OYW1lLCBh
bHdheXNEdW1wVW5jYXVnaHRFeGNlcHRpb24sIGR1bXAsIHN1Y2Nlc3MpOworICAgICAgICAgICAg
Y2hlY2tFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBpc0xhc3RGaWxlLCBldmFsdWF0aW9uRXhjZXB0
aW9uLCByZXR1cm5WYWx1ZSwgb3B0aW9ucywgc3VjY2Vzcyk7CiAgICAgICAgIH0KIAogICAgICAg
ICBzY3JpcHRCdWZmZXIuY2xlYXIoKTsKQEAgLTM1MDIsNiArMzUxMSw3IEBAIHN0YXRpYyBOT19S
RVRVUk4gdm9pZCBwcmludFVzYWdlU3RhdGVtZW50KGJvb2wgaGVscCA9IGZhbHNlKQogICAgIGZw
cmludGYoc3RkZXJyLCAiICAtLXN0cmljdC1maWxlPTxmaWxlPiAgICAgICBQYXJzZSB0aGUgZ2l2
ZW4gZmlsZSBhcyBpZiBpdCB3ZXJlIGluIHN0cmljdCBtb2RlICh0aGlzIG9wdGlvbiBtYXkgYmUg
cGFzc2VkIG1vcmUgdGhhbiBvbmNlKVxuIik7CiAgICAgZnByaW50ZihzdGRlcnIsICIgIC0tbW9k
dWxlLWZpbGU9PGZpbGU+ICAgICAgIFBhcnNlIGFuZCBldmFsdWF0ZSB0aGUgZ2l2ZW4gZmlsZSBh
cyBtb2R1bGUgKHRoaXMgb3B0aW9uIG1heSBiZSBwYXNzZWQgbW9yZSB0aGFuIG9uY2UpXG4iKTsK
ICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLS1leGNlcHRpb249PG5hbWU+ICAgICAgICAgQ2hlY2sg
dGhlIGxhc3Qgc2NyaXB0IGV4aXRzIHdpdGggYW4gdW5jYXVnaHQgZXhjZXB0aW9uIHdpdGggdGhl
IHNwZWNpZmllZCBuYW1lXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLS13YXRjaGRvZy1l
eGNlcHRpb24tb2sgICAgVW5jYXVnaHQgd2F0Y2hkb2cgZXhjZXB0aW9ucyBleGl0IHdpdGggc3Vj
Y2Vzc1xuIik7CiAgICAgZnByaW50ZihzdGRlcnIsICIgIC0tZHVtcEV4Y2VwdGlvbiAgICAgICAg
ICAgIER1bXAgdW5jYXVnaHQgZXhjZXB0aW9uIHRleHRcbiIpOwogICAgIGZwcmludGYoc3RkZXJy
LCAiICAtLW9wdGlvbnMgICAgICAgICAgICAgICAgICBEdW1wcyBhbGwgSlNDIFZNIG9wdGlvbnMg
YW5kIGV4aXRzXG4iKTsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLS1kdW1wT3B0aW9ucyAgICAg
ICAgICAgICAgRHVtcHMgYWxsIG5vbi1kZWZhdWx0IEpTQyBWTSBvcHRpb25zIGJlZm9yZSBjb250
aW51aW5nXG4iKTsKQEAgLTM2MzEsNiArMzY0MSwxMSBAQCB2b2lkIENvbW1hbmRMaW5lOjpwYXJz
ZUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQogCisgICAgICAgIGlmICghc3RyY21wKGFyZywgIi0td2F0Y2hkb2ctZXhjZXB0
aW9uLW9rIikpIHsKKyAgICAgICAgICAgIG1fdHJlYXRXYXRjaGRvZ0V4Y2VwdGlvbkFzU3VjY2Vz
cyA9IHRydWU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCiAgICAgICAgIC8v
IFNlZSBpZiB0aGUgLS0gb3B0aW9uIGlzIGEgSlNDIFZNIG9wdGlvbi4KICAgICAgICAgaWYgKHN0
cnN0cihhcmcsICItLSIpID09IGFyZykgewogICAgICAgICAgICAgaWYgKCFKU0M6Ok9wdGlvbnM6
OnNldE9wdGlvbigmYXJnWzJdKSkgewpAQCAtMzc3OCw3ICszNzkzLDcgQEAgaW50IGpzY21haW4o
aW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIHJlc3VsdCA9IHJ1bkpTQygKICAgICAgICAgb3B0
aW9ucywgZmFsc2UsCiAgICAgICAgIFsmXSAoVk0mLCBHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkgewotICAgICAgICAgICAgcmV0dXJuIHJ1bldpdGhTY3JpcHRzKGdsb2JhbE9iamVjdCwgb3B0
aW9ucy5tX3NjcmlwdHMsIG9wdGlvbnMubV91bmNhdWdodEV4Y2VwdGlvbk5hbWUsIG9wdGlvbnMu
bV9hbHdheXNEdW1wVW5jYXVnaHRFeGNlcHRpb24sIG9wdGlvbnMubV9kdW1wLCBvcHRpb25zLm1f
bW9kdWxlKTsKKyAgICAgICAgICAgIHJldHVybiBydW5XaXRoT3B0aW9ucyhnbG9iYWxPYmplY3Qs
IG9wdGlvbnMpOwogICAgICAgICB9KTsKIAogICAgIHByaW50U3VwZXJTYW1wbGVyU3RhdGUoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCmluZGV4IDMxZTJkYjQwYjIx
NmVhYTJiMTE0MjRiODAzZmI3ZjkxZGQ0ZTI2MWYuLmY4MzUxMmY0NTVmOTc1NDA4MTgzZDZkMzA4
MzQ0MTllZDg1NTc3YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNw
cApAQCAtMTU0LDEwICsxNTQsMTAgQEAgdm9pZCBKU0xvY2s6OmRpZEFjcXVpcmVMb2NrKCkKICAg
ICByZWdpc3RlclRocmVhZEZvck1hY2hFeGNlcHRpb25IYW5kbGluZygmVGhyZWFkOjpjdXJyZW50
KCkpOwogI2VuZGlmCiAKKyAgICAvLyBOb3RlOiBldmVyeXRoaW5nIGJlbG93IG11c3QgY29tZSBh
ZnRlciBhZGRDdXJyZW50VGhyZWFkKCkuCiAgICAgbV92bS0+dHJhcHMoKS5ub3RpZnlHcmFiQWxs
TG9ja3MoKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKLSAgICAvLyBOb3RlOiB0
aGlzIG11c3QgY29tZSBhZnRlciBhZGRDdXJyZW50VGhyZWFkKCkuCiAgICAgaWYgKFNhbXBsaW5n
UHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpCiAg
ICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPm5vdGljZUpTTG9ja0FjcXVpc2l0aW9uKCk7CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKaW5kZXggNDRkNTNl
YWZlYzUwMjVjNmZhZGY5YzYwNjQwMTBhZDY5NGFjOGY5ZS4uYWE2NDc3YjYyOGZhM2ZiZTYyMTli
ZGY3OTI1MjlmNWQ2NDI0MTUxYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk1UcmFwcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1U
cmFwcy5jcHAKQEAgLTcyLDgzICs3Miw3IEBAIGlubGluZSBzdGF0aWMgYm9vbCB2bUlzSW5hY3Rp
dmUoVk0mIHZtKQogICAgIHJldHVybiAhdm0uZW50cnlTY29wZSAmJiAhdm0ub3duZXJUaHJlYWQo
KTsKIH0KIAotc3RydWN0IFZNQW5kU3RhY2tCb3VuZHMgewotICAgIFZNKiB2bTsKLSAgICBTdGFj
a0JvdW5kcyBzdGFja0JvdW5kczsKLX07Ci0KLXN0YXRpYyBFeHBlY3RlZDxWTUFuZFN0YWNrQm91
bmRzLCBWTVRyYXBzOjpFcnJvcj4gZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoU2lnbmFsQ29u
dGV4dCYgY29udGV4dCkKLXsKLSAgICBWTUluc3BlY3RvciYgaW5zcGVjdG9yID0gVk1JbnNwZWN0
b3I6Omluc3RhbmNlKCk7Ci0gICAgYXV0byBsb2NrZXIgPSB0cnlIb2xkTG9jayhpbnNwZWN0b3Iu
Z2V0TG9jaygpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWxvY2tlcikpCi0gICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChWTVRyYXBzOjpFcnJvcjo6TG9ja1VuYXZhaWxhYmxlKTsKLSAgICAKLSAg
ICBWTSogYWN0aXZlVk0gPSBudWxscHRyOwotICAgIFN0YWNrQm91bmRzIHN0YWNrQm91bmRzID0g
U3RhY2tCb3VuZHM6OmVtcHR5Qm91bmRzKCk7Ci0gICAgdm9pZCogc3RhY2tQb2ludGVyID0gY29u
dGV4dC5zdGFja1BvaW50ZXI7Ci0gICAgYm9vbCB1bmFibGVUb0FjcXVpcmVNYWNoaW5lVGhyZWFk
c0xvY2sgPSBmYWxzZTsKLSAgICBpbnNwZWN0b3IuaXRlcmF0ZShsb2NrZXIsIFsmXSAoVk0mIHZt
KSB7Ci0gICAgICAgIGlmICh2bUlzSW5hY3RpdmUodm0pKQotICAgICAgICAgICAgcmV0dXJuIFZN
SW5zcGVjdG9yOjpGdW5jdG9yU3RhdHVzOjpDb250aW51ZTsKLQotICAgICAgICBhdXRvJiBtYWNo
aW5lVGhyZWFkcyA9IHZtLmhlYXAubWFjaGluZVRocmVhZHMoKTsKLSAgICAgICAgYXV0byBtYWNo
aW5lVGhyZWFkc0xvY2tlciA9IHRyeUhvbGRMb2NrKG1hY2hpbmVUaHJlYWRzLmdldExvY2soKSk7
Ci0gICAgICAgIGlmIChVTkxJS0VMWSghbWFjaGluZVRocmVhZHNMb2NrZXIpKSB7Ci0gICAgICAg
ICAgICB1bmFibGVUb0FjcXVpcmVNYWNoaW5lVGhyZWFkc0xvY2sgPSB0cnVlOwotICAgICAgICAg
ICAgcmV0dXJuIFZNSW5zcGVjdG9yOjpGdW5jdG9yU3RhdHVzOjpDb250aW51ZTsgLy8gVHJ5IG5l
eHQgVk0uCi0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBhdXRvJiB0aHJlYWRMaXN0ID0gbWFj
aGluZVRocmVhZHMudGhyZWFkc0xpc3RIZWFkKG1hY2hpbmVUaHJlYWRzTG9ja2VyKTsKLSAgICAg
ICAgZm9yIChNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZCogdGhyZWFkID0gdGhyZWFkTGlz
dC5oZWFkKCk7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KCkpIHsKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHRocmVhZC0+c3RhY2tCYXNlKCkpOwotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQodGhyZWFkLT5zdGFja0VuZCgpKTsKLSAgICAgICAgICAgIGlmIChzdGFja1BvaW50
ZXIgPD0gdGhyZWFkLT5zdGFja0Jhc2UoKSAmJiBzdGFja1BvaW50ZXIgPj0gdGhyZWFkLT5zdGFj
a0VuZCgpKSB7Ci0gICAgICAgICAgICAgICAgYWN0aXZlVk0gPSAmdm07Ci0gICAgICAgICAgICAg
ICAgc3RhY2tCb3VuZHMgPSBTdGFja0JvdW5kcyh0aHJlYWQtPnN0YWNrQmFzZSgpLCB0aHJlYWQt
PnN0YWNrRW5kKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBWTUluc3BlY3Rvcjo6RnVuY3Rv
clN0YXR1czo6RG9uZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
Vk1JbnNwZWN0b3I6OkZ1bmN0b3JTdGF0dXM6OkNvbnRpbnVlOwotICAgIH0pOwotCi0gICAgaWYg
KCFhY3RpdmVWTSAmJiB1bmFibGVUb0FjcXVpcmVNYWNoaW5lVGhyZWFkc0xvY2spCi0gICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChWTVRyYXBzOjpFcnJvcjo6TG9ja1VuYXZhaWxhYmxlKTsK
LSAgICByZXR1cm4gVk1BbmRTdGFja0JvdW5kcyB7IGFjdGl2ZVZNLCBzdGFja0JvdW5kcyB9Owot
fQotCi1zdGF0aWMgdm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcigpCi17Ci0gICAgaW5zdGFsbFNp
Z25hbEhhbmRsZXIoU2lnbmFsOjpCYWRBY2Nlc3MsIFtdIChTaWduYWwsIFNpZ0luZm8mLCBQbGF0
Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzKSAtPiBTaWduYWxBY3Rpb24gewotICAgICAgICBTaWdu
YWxDb250ZXh0IGNvbnRleHQocmVnaXN0ZXJzKTsKLQotICAgICAgICBpZiAoIWlzSklUUEMoY29u
dGV4dC50cmFwUEMpKQotICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxl
ZDsKLQotICAgICAgICAvLyBGSVhNRTogVGhpcyBjdXJyZW50bHkgZWF0cyBhbGwgdHJhcHMgaW5j
bHVkaW5nIGppdCBhc3NlcnRzIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhpcwotICAgICAgICAvLyBh
bHdheXMgd29ya3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzEw
MzkKLSAgICAgICAgYXV0byBhY3RpdmVWTUFuZFN0YWNrQm91bmRzID0gZmluZEFjdGl2ZVZNQW5k
U3RhY2tCb3VuZHMoY29udGV4dCk7Ci0gICAgICAgIGlmICghYWN0aXZlVk1BbmRTdGFja0JvdW5k
cykKLSAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246OkhhbmRsZWQ7IC8vIExldCB0aGUg
U2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRlci4KLQotICAgICAgICBWTSogdm0gPSBhY3RpdmVW
TUFuZFN0YWNrQm91bmRzLnZhbHVlKCkudm07Ci0gICAgICAgIGlmICh2bSkgewotICAgICAgICAg
ICAgVk1UcmFwcyYgdHJhcHMgPSB2bS0+dHJhcHMoKTsKLSAgICAgICAgICAgIGlmICghdHJhcHMu
bmVlZFRyYXBIYW5kbGluZygpKQotICAgICAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246
OkhhbmRsZWQ7IC8vIFRoZSBwb2xsaW5nIGNvZGUgYmVhdCB1cyB0byBoYW5kbGluZyB0aGUgdHJh
cCBhbHJlYWR5LgotCi0gICAgICAgICAgICBhdXRvIGV4cGVjdGVkU3VjY2VzcyA9IHRyYXBzLnRy
eUpldHRpc29uQ29kZUJsb2Nrc09uU3RhY2soY29udGV4dCk7Ci0gICAgICAgICAgICBpZiAoIWV4
cGVjdGVkU3VjY2VzcykKLSAgICAgICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpIYW5k
bGVkOyAvLyBMZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkgYWdhaW4gbGF0ZXIuCi0gICAgICAgICAg
ICBpZiAoZXhwZWN0ZWRTdWNjZXNzLnZhbHVlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNp
Z25hbEFjdGlvbjo6SGFuZGxlZDsgLy8gV2UndmUgc3VjY2VzcyBqZXR0aXNvbiB0aGUgY29kZUJs
b2Nrcy4KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246OkhhbmRsZWQ7
Ci0gICAgfSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgc3RhdGljIENhbGxGcmFtZSogc2FuaXRpemVk
VG9wQ2FsbEZyYW1lKENhbGxGcmFtZSogdG9wQ2FsbEZyYW1lKQoraW5saW5lIENhbGxGcmFtZSog
c2FuaXRpemVkVG9wQ2FsbEZyYW1lKENhbGxGcmFtZSogdG9wQ2FsbEZyYW1lKQogewogI2lmICFk
ZWZpbmVkKE5ERUJVRykgJiYgIUNQVShBUk0pICYmICFDUFUoTUlQUykKICAgICAvLyBwcmVwYXJl
Rm9yRXh0ZXJuYWxDYWxsKCkgaW4gREZHU3BlY3VsYXRpdmVKSVQuaCBtYXkgc2V0IHRvcENhbGxG
cmFtZSB0byBhIGJhZCB3b3JkCkBAIC0xODMsMjggKzEwNywxNyBAQCB2b2lkIFZNVHJhcHM6OnRy
eUluc3RhbGxUcmFwQnJlYWtwb2ludHMoU2lnbmFsQ29udGV4dCYgY29udGV4dCwgU3RhY2tCb3Vu
ZHMgc3RhYwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSByZWludGVycHJldF9jYXN0PENh
bGxGcmFtZSo+KGNvbnRleHQuZnJhbWVQb2ludGVyKTsKIAotICAgIGF1dG8gY29kZUJsb2NrU2V0
TG9ja2VyID0gdHJ5SG9sZExvY2sodm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5nZXRMb2NrKCkpOwor
ICAgIGF1dG8mIGxvY2sgPSB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmdldExvY2soKTsKKyAgICAv
LyBJZiB0aGUgdGFyZ2V0IHRocmVhZCBpcyBpbiBDKysgY29kZSBpdCBtaWdodCBiZSBob2xkaW5n
IHRoZSBjb2RlQmxvY2tTZXQgbG9jay4KKyAgICAvLyBpZiBpdCdzIGluIEpJVCBjb2RlIHRoZW4g
aXQgY2Fubm90IGJlIGhvbGRpbmcgdGhhdCBsb2NrIGJ1dCB0aGUgR0MgbWlnaHQgYmUuCisgICAg
YXV0byBjb2RlQmxvY2tTZXRMb2NrZXIgPSBpc0pJVFBDKHRyYXBQQykgPyBob2xkTG9jayhsb2Nr
KSA6IHRyeUhvbGRMb2NrKGxvY2spOwogICAgIGlmICghY29kZUJsb2NrU2V0TG9ja2VyKQogICAg
ICAgICByZXR1cm47IC8vIExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRlci4KIAot
ICAgIHsKLSAgICAgICAgYXV0byYgYWxsb2NhdG9yID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2lu
Z2xldG9uKCk7Ci0gICAgICAgIGF1dG8gYWxsb2NhdG9yTG9ja2VyID0gdHJ5SG9sZExvY2soYWxs
b2NhdG9yLmdldExvY2soKSk7Ci0gICAgICAgIGlmICghYWxsb2NhdG9yTG9ja2VyKQotICAgICAg
ICAgICAgcmV0dXJuOyAvLyBMZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkgYWdhaW4gbGF0ZXIuCi0K
LSAgICAgICAgaWYgKGFsbG9jYXRvci5pc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShhbGxvY2F0b3JM
b2NrZXIsIHRyYXBQQykpIHsKLSAgICAgICAgICAgIGlmICh2bS5pc0V4ZWN1dGluZ0luUmVnRXhw
SklUKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGlzIGJlY2F1c2UgYSBy
ZWdFeHBKSVQgZnJhbWUgaXNuJ3QgYSBKUyBmcmFtZS4KLSAgICAgICAgICAgICAgICBjYWxsRnJh
bWUgPSBzYW5pdGl6ZWRUb3BDYWxsRnJhbWUodm0udG9wQ2FsbEZyYW1lKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIGlmIChMTEludDo6aXNMTEludFBDKHRyYXBQQykpIHsKLSAgICAg
ICAgICAgIC8vIFRoZSBmcmFtZVBvaW50ZXIgcHJvYmFibHkgaGFzIHRoZSBjYWxsRnJhbWUuIFdl
J3JlIGdvb2QgdG8gZ28uCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSByZXNv
cnQgdG8gdG9wQ2FsbEZyYW1lIHRvIHNlZSBpZiB3ZSBjYW4gZ2V0IGFueXRoaW5nCi0gICAgICAg
ICAgICAvLyB1c2VmdWwuIFdlIHVzdWFsbHkgZ2V0IGhlcmUgd2hlbiB3ZSdyZSBleGVjdXRpbmcg
QyBjb2RlLgotICAgICAgICAgICAgY2FsbEZyYW1lID0gc2FuaXRpemVkVG9wQ2FsbEZyYW1lKHZt
LnRvcENhbGxGcmFtZSk7Ci0gICAgICAgIH0KKyAgICBpZiAoIWlzSklUUEModHJhcFBDKSAmJiAh
TExJbnQ6OmlzTExJbnRQQyh0cmFwUEMpKSB7CisgICAgICAgIC8vIFdlIHJlc29ydCB0byB0b3BD
YWxsRnJhbWUgdG8gc2VlIGlmIHdlIGNhbiBnZXQgYW55dGhpbmcKKyAgICAgICAgLy8gdXNlZnVs
LiBXZSB1c3VhbGx5IGdldCBoZXJlIHdoZW4gd2UncmUgZXhlY3V0aW5nIEMgY29kZS4KKyAgICAg
ICAgY2FsbEZyYW1lID0gc2FuaXRpemVkVG9wQ2FsbEZyYW1lKHZtLnRvcENhbGxGcmFtZSk7CiAg
ICAgfQogCiAgICAgQ29kZUJsb2NrKiBmb3VuZENvZGVCbG9jayA9IG51bGxwdHI7CkBAIC0yNDAs
NyArMTUzLDcgQEAgdm9pZCBWTVRyYXBzOjp0cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKFNpZ25h
bENvbnRleHQmIGNvbnRleHQsIFN0YWNrQm91bmRzIHN0YWMKICAgICB9CiAKICAgICBpZiAoSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGZvdW5kQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7Ci0gICAg
ICAgIGF1dG8gbG9ja2VyID0gdHJ5SG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgYXV0byBsb2Nr
ZXIgPSB0cnlIb2xkTG9jaygqbV9sb2NrKTsKICAgICAgICAgaWYgKCFsb2NrZXIpCiAgICAgICAg
ICAgICByZXR1cm47IC8vIExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRlci4KIApA
QCAtMjUwLDQ1ICsxNjMsNiBAQCB2b2lkIFZNVHJhcHM6OnRyeUluc3RhbGxUcmFwQnJlYWtwb2lu
dHMoU2lnbmFsQ29udGV4dCYgY29udGV4dCwgU3RhY2tCb3VuZHMgc3RhYwogICAgIH0KIH0KIAot
YXV0byBWTVRyYXBzOjp0cnlKZXR0aXNvbkNvZGVCbG9ja3NPblN0YWNrKFNpZ25hbENvbnRleHQm
IGNvbnRleHQpIC0+IEV4cGVjdGVkPGJvb2wsIEVycm9yPgotewotICAgIFZNJiB2bSA9IHRoaXMt
PnZtKCk7Ci0gICAgYXV0byBjb2RlQmxvY2tTZXRMb2NrZXIgPSB0cnlIb2xkTG9jayh2bS5oZWFw
LmNvZGVCbG9ja1NldCgpLmdldExvY2soKSk7Ci0gICAgaWYgKCFjb2RlQmxvY2tTZXRMb2NrZXIp
Ci0gICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcjo6TG9ja1VuYXZhaWxhYmxlKTsK
LQotICAgIENhbGxGcmFtZSogdG9wQ2FsbEZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxDYWxsRnJh
bWUqPihjb250ZXh0LmZyYW1lUG9pbnRlcik7Ci0gICAgdm9pZCogdHJhcFBDID0gY29udGV4dC50
cmFwUEM7Ci0gICAgYm9vbCB0cmFwUENJc1ZNVHJhcCA9IGZhbHNlOwotICAgIAotICAgIHZtLmhl
YXAuZm9yRWFjaENvZGVCbG9ja0lnbm9yaW5nSklUUGxhbnMoY29kZUJsb2NrU2V0TG9ja2VyLCBb
Jl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7Ci0gICAgICAgIGlmICghY29kZUJsb2NrLT5oYXNJ
bnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBOb3QgZm91bmQgeWV0LgotCi0gICAgICAgIEpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2st
PmppdENvZGUoKS5nZXQoKTsKLSAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChqaXRDb2RlLT5qaXRUeXBlKCkpKTsKLSAgICAgICAgaWYgKGppdENvZGUtPmRmZ0NvbW1vbigp
LT5pc1ZNVHJhcEJyZWFrcG9pbnQodHJhcFBDKSkgewotICAgICAgICAgICAgdHJhcFBDSXNWTVRy
YXAgPSB0cnVlOwotICAgICAgICAgICAgLy8gQXQgdGhlIGNvZGVCbG9jayB0cmFwIHBvaW50LCB3
ZSdyZSBndWFyYW50ZWVkIHRoYXQ6Ci0gICAgICAgICAgICAvLyAxLiB0aGUgcGMgaXMgbm90IGlu
IHRoZSBtaWRkbGUgb2YgYW55IHJhbmdlIG9mIEpJVCBjb2RlIHdoaWNoIGludmFsaWRhdGlvbiBw
b2ludHMKLSAgICAgICAgICAgIC8vICAgIG1heSB3cml0ZSBvdmVyLiBIZW5jZSwgaXQncyBub3cg
c2FmZSB0byBwYXRjaCB0aG9zZSBpbnZhbGlkYXRpb24gcG9pbnRzIGFuZAotICAgICAgICAgICAg
Ly8gICAgamV0dGlzb24gdGhlIGNvZGVCbG9ja3MuCi0gICAgICAgICAgICAvLyAyLiBUaGUgdG9w
IGZyYW1lIG11c3QgYmUgYW4gb3B0aW1pemVkIEpTIGZyYW1lLgotICAgICAgICAgICAgQVNTRVJU
KGNvZGVCbG9jayA9PSB0b3BDYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKLSAgICAgICAgICAgIGNv
ZGVCbG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9WTVRyYXBzKTsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBOb3QgZm91bmQgeWV0LgotICAgIH0pOwotCi0gICAgaWYgKCF0cmFwUENJc1ZNVHJhcCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW52YWxpZGF0ZUNvZGVCbG9ja3NPblN0YWNrKGNv
ZGVCbG9ja1NldExvY2tlciwgdG9wQ2FsbEZyYW1lKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQog
dm9pZCBWTVRyYXBzOjppbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhY2soKQogewogICAgIGludmFs
aWRhdGVDb2RlQmxvY2tzT25TdGFjayh2bSgpLnRvcENhbGxGcmFtZSk7CkBAIC0zMjEsMTA1ICsx
OTUsMTM2IEBAIHZvaWQgVk1UcmFwczo6aW52YWxpZGF0ZUNvZGVCbG9ja3NPblN0YWNrKExvY2tl
cjxMb2NrPiYsIEV4ZWNTdGF0ZSogdG9wQ2FsbEZyYW1lCiAgICAgfQogfQogCi0jZW5kaWYgLy8g
RU5BQkxFKFNJR05BTF9CQVNFRF9WTV9UUkFQUykKLQotdm9pZCBWTVRyYXBzOjp3aWxsRGVzdHJv
eVZNKCkKLXsKLSAgICBtX2lzU2h1dHRpbmdEb3duID0gdHJ1ZTsKLSAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOwotI2lmIEVOQUJMRShTSUdOQUxfQkFTRURfVk1fVFJBUFMpCi0gICAgd2hpbGUg
KCFtX3NpZ25hbFNlbmRlcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFJlZlB0cjxTaWduYWxTZW5k
ZXI+IHNlbmRlcjsKLSAgICAgICAgewotICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBi
ZSBob2xkaW5nIHRoZSBWTVRyYXBzIGxvY2sgd2hlbiBjYWxsaW5nCi0gICAgICAgICAgICAvLyBT
aWduYWxTZW5kZXI6OndpbGxEZXN0cm95Vk0oKSBiZWNhdXNlIFNpZ25hbFNlbmRlcjo6d2lsbERl
c3Ryb3lWTSgpCi0gICAgICAgICAgICAvLyB3aWxsIGFjcXVpcmUgdGhlIFNpZ25hbFNlbmRlciBs
b2NrLCBhbmQgU2lnbmFsU2VuZGVyOjpzZW5kKCkgbmVlZHMKLSAgICAgICAgICAgIC8vIHRvIGFj
cXVpcmUgdGhlc2UgbG9ja3MgaW4gdGhlIG9wcG9zaXRlIG9yZGVyLgotICAgICAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAgICAgICAgICAgc2VuZGVyID0gbV9zaWdu
YWxTZW5kZXJzLnRha2VBbnkoKTsKLSAgICAgICAgICAgIGlmICghc2VuZGVyKQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHNlbmRlci0+d2lsbERlc3Ryb3lWTSgp
OworY2xhc3MgVk1UcmFwczo6U2lnbmFsU2VuZGVyIGZpbmFsIDogcHVibGljIEF1dG9tYXRpY1Ro
cmVhZCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEF1dG9tYXRpY1RocmVhZDsKKyAgICBT
aWduYWxTZW5kZXIoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgVk0mIHZtKQorICAgICAg
ICA6IEJhc2UobG9ja2VyLCB2bS50cmFwcygpLm1fbG9jaywgdm0udHJhcHMoKS5tX3RyYXBTZXQp
CisgICAgICAgICwgbV92bSh2bSkKKyAgICB7CisgICAgICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxh
ZyBvbmNlOworICAgICAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7CisgICAgICAgICAgICBp
bnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OkJhZEFjY2VzcywgW10gKFNpZ25hbCwgU2lnSW5m
byYsIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpIC0+IFNpZ25hbEFjdGlvbiB7CisgICAg
ICAgICAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHJlZ2lzdGVycyk7CisKKyAgICAgICAg
ICAgICAgICBpZiAoIWlzSklUUEMoY29udGV4dC50cmFwUEMpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gU2lnbmFsQWN0aW9uOjpOb3RIYW5kbGVkOworCisgICAgICAgICAgICAgICAgQ29k
ZUJsb2NrKiBjdXJyZW50Q29kZUJsb2NrID0gREZHOjpjb2RlQmxvY2tGb3JWTVRyYXBQQyhjb250
ZXh0LnRyYXBQQyk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRDb2RlQmxvY2stPmhh
c0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkpOworICAgICAgICAgICAgICAgIFZNJiB2bSA9
ICpjdXJyZW50Q29kZUJsb2NrLT52bSgpOworICAgICAgICAgICAgICAgIFZNVHJhcHMmIHRyYXBz
ID0gdm0udHJhcHMoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodHJhcHMubmVlZFRyYXBIYW5k
bGluZygpKTsgLy8gV2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSBqZXR0aXNvbmVkIHRoaXMgY29kZSBi
bG9jayB3aGVuIHdlIGhhbmRsZWQgdGhlIHRyYXAuCisKKyAgICAgICAgICAgICAgICAvLyBXZSBh
cmUgaW4gSklUIGNvZGUgc28gaXQncyBzYWZlIHRvIGFxdWlyZSB0aGlzIGxvY2suCisgICAgICAg
ICAgICAgICAgYXV0byBjb2RlQmxvY2tTZXRMb2NrZXIgPSBob2xkTG9jayh2bS5oZWFwLmNvZGVC
bG9ja1NldCgpLmdldExvY2soKSk7CisgICAgICAgICAgICAgICAgYm9vbCBzYXdDdXJyZW50Q29k
ZUJsb2NrID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdm0uaGVhcC5mb3JFYWNoQ29kZUJsb2Nr
SWdub3JpbmdKSVRQbGFucyhjb2RlQmxvY2tTZXRMb2NrZXIsIFsmXSAoQ29kZUJsb2NrKiBjb2Rl
QmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBqZXR0aXNvbiBhbGwg
Y29kZSBibG9ja3MgdGhhdCBoYXZlIHZtIHRyYXBzIGJyZWFrcG9pbnRzLCBvdGhlcndpc2Ugd2Ug
Y291bGQgaGl0IHRoZW0gbGF0ZXIuCisgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlQmxvY2st
Pmhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChjdXJyZW50Q29kZUJsb2NrID09IGNvZGVCbG9jaykKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzYXdDdXJyZW50Q29kZUJsb2NrID0gdHJ1ZTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgY29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1ZNVHJh
cHMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChzYXdDdXJyZW50Q29kZUJsb2NrKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICByZXR1cm4gU2lnbmFsQWN0aW9uOjpIYW5kbGVkOyAvLyBXZSd2ZSBzdWNjZXNzZnVsbHkgamV0
dGlzb25lZCB0aGUgY29kZUJsb2Nrcy4KKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKICAg
ICB9Ci0gICAgQVNTRVJUKG1fc2lnbmFsU2VuZGVycy5pc0VtcHR5KCkpOwotI2VuZGlmCi19CiAK
LSNpZiBFTkFCTEUoU0lHTkFMX0JBU0VEX1ZNX1RSQVBTKQotdm9pZCBWTVRyYXBzOjphZGRTaWdu
YWxTZW5kZXIoVk1UcmFwczo6U2lnbmFsU2VuZGVyKiBzZW5kZXIpCi17Ci0gICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAgIG1fc2lnbmFsU2VuZGVycy5hZGQoc2VuZGVyKTsK
LX0KKyAgICBWTVRyYXBzJiB0cmFwcygpIHsgcmV0dXJuIG1fdm0udHJhcHMoKTsgfQogCi12b2lk
IFZNVHJhcHM6OnJlbW92ZVNpZ25hbFNlbmRlcihWTVRyYXBzOjpTaWduYWxTZW5kZXIqIHNlbmRl
cikKLXsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgbV9zaWduYWxT
ZW5kZXJzLnJlbW92ZShzZW5kZXIpOwotfQorcHJvdGVjdGVkOgorICAgIFBvbGxSZXN1bHQgcG9s
bChjb25zdCBBYnN0cmFjdExvY2tlciYpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAodHJh
cHMoKS5tX2lzU2h1dHRpbmdEb3duKQorICAgICAgICAgICAgcmV0dXJuIFBvbGxSZXN1bHQ6OlN0
b3A7CiAKLXZvaWQgVk1UcmFwczo6U2lnbmFsU2VuZGVyOjp3aWxsRGVzdHJveVZNKCkKLXsKLSAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgbV92bSA9IG51bGxwdHI7Ci19
CisgICAgICAgIGlmICghdHJhcHMoKS5uZWVkVHJhcEhhbmRsaW5nKCkpCisgICAgICAgICAgICBy
ZXR1cm4gUG9sbFJlc3VsdDo6V2FpdDsKIAotdm9pZCBWTVRyYXBzOjpTaWduYWxTZW5kZXI6OnNl
bmQoKQotewotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOwotICAgIHN0ZDo6Y2FsbF9v
bmNlKG9uY2UsIFtdIHsKLSAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoKTsKLSAgICB9KTsK
KyAgICAgICAgLy8gV2Uga25vdyB0aGF0IG5vIHRyYXAgY291bGQgaGF2ZSBiZWVuIHByb2Nlc3Nl
ZCBhbmQgcmUtYWRkZWQgYmVjYXVzZSB3ZSBhcmUgaG9sZGluZyB0aGUgbG9jay4KKyAgICAgICAg
aWYgKHZtSXNJbmFjdGl2ZShtX3ZtKSkKKyAgICAgICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpX
YWl0OworICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6V29yazsKKyAgICB9CisKKyAgICBXb3Jr
UmVzdWx0IHdvcmsoKSBvdmVycmlkZQorICAgIHsKIAotICAgIHdoaWxlICh0cnVlKSB7CiAgICAg
ICAgIC8vIFdlIG5lZWQgYSBuZXN0ZWQgc2NvcGUgc28gdGhhdCB3ZSdsbCByZWxlYXNlIHRoZSBs
b2NrIGJlZm9yZSB3ZSBzbGVlcCBiZWxvdy4KLSAgICAgICAgewotICAgICAgICAgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAgICAgICAgICAgaWYgKCFtX3ZtKQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBWTSYgdm0gPSAqbV92bTsKLSAgICAgICAg
ICAgIGF1dG8gb3B0aW9uYWxPd25lclRocmVhZCA9IHZtLm93bmVyVGhyZWFkKCk7Ci0gICAgICAg
ICAgICBpZiAob3B0aW9uYWxPd25lclRocmVhZCkgewotICAgICAgICAgICAgICAgIHNlbmRNZXNz
YWdlKCpvcHRpb25hbE93bmVyVGhyZWFkLnZhbHVlKCkuZ2V0KCksIFtdIChQbGF0Zm9ybVJlZ2lz
dGVycyYgcmVnaXN0ZXJzKSAtPiB2b2lkIHsKLSAgICAgICAgICAgICAgICAgICAgU2lnbmFsQ29u
dGV4dCBjb250ZXh0KHJlZ2lzdGVycyk7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gYWN0aXZl
Vk1BbmRTdGFja0JvdW5kcyA9IGZpbmRBY3RpdmVWTUFuZFN0YWNrQm91bmRzKGNvbnRleHQpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aXZlVk1BbmRTdGFja0JvdW5kcykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgVk0qIHZtID0gYWN0aXZlVk1BbmRTdGFja0JvdW5kcy52YWx1ZSgp
LnZtOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZtKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU3RhY2tCb3VuZHMgc3RhY2tCb3VuZHMgPSBhY3RpdmVWTUFuZFN0YWNrQm91
bmRzLnZhbHVlKCkuc3RhY2tCb3VuZHM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVk1U
cmFwcyYgdHJhcHMgPSB2bS0+dHJhcHMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodHJhcHMubmVlZFRyYXBIYW5kbGluZygpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0cmFwcy50cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKGNvbnRleHQsIHN0YWNrQm91bmRz
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgVk0mIHZtID0gbV92bTsKKwor
ICAgICAgICBhdXRvIG9wdGlvbmFsT3duZXJUaHJlYWQgPSB2bS5vd25lclRocmVhZCgpOworICAg
ICAgICBpZiAob3B0aW9uYWxPd25lclRocmVhZCkgeworICAgICAgICAgICAgc2VuZE1lc3NhZ2Uo
Km9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUoKS5nZXQoKSwgWyZdIChQbGF0Zm9ybVJlZ2lzdGVy
cyYgcmVnaXN0ZXJzKSAtPiB2b2lkIHsKKyAgICAgICAgICAgICAgICBTaWduYWxDb250ZXh0IGNv
bnRleHQocmVnaXN0ZXJzKTsKKworICAgICAgICAgICAgICAgIGF1dG8gb3duZXJUaHJlYWQgPSB2
bS5hcGlMb2NrKCkub3duZXJUaHJlYWQoKTsKKyAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBt
ZXNzIHdpdGggYSB0aHJlYWQgdW5sZXNzIGl0J3MgdGhlIG9uZSB3ZSBzdXNwZW5kZWQuCisgICAg
ICAgICAgICAgICAgaWYgKCFvd25lclRocmVhZCB8fCBvd25lclRocmVhZCAhPSBvcHRpb25hbE93
bmVyVGhyZWFkKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAg
ICBUaHJlYWQmIHRocmVhZCA9ICpvd25lclRocmVhZC0+Z2V0KCk7CisgICAgICAgICAgICAgICAg
U3RhY2tCb3VuZHMgc3RhY2tCb3VuZHMgPSBTdGFja0JvdW5kczo6ZW1wdHlCb3VuZHMoKTsKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRv
IHVzZSB0aGUgbWFjaGluZSB0aHJlYWRzIGJlY2F1c2UgaXQgaXMgdGhlIG9ubHkgbm9uLVRMUyBz
b3VyY2UKKyAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHRoZSBzdGFjayBib3VuZHMgb2YgdGhp
cyB0aHJlYWQuIFdlIHNob3VsZCBrZWVwIGluIG9uIHRoZSBXVEY6OlRocmVhZCBpbnN0ZWFkLgor
ICAgICAgICAgICAgICAgICAgICBNYWNoaW5lVGhyZWFkcyYgbWFjaGluZVRocmVhZHMgPSB2bS5o
ZWFwLm1hY2hpbmVUaHJlYWRzKCk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gbWFjaGluZVRo
cmVhZHNMb2NrID0gdHJ5SG9sZExvY2sobWFjaGluZVRocmVhZHMuZ2V0TG9jaygpKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFtYWNoaW5lVGhyZWFkc0xvY2spCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47IC8vIFRyeSBhZ2FpbiBsYXRlci4KKworICAgICAgICAgICAgICAgICAg
ICBhdXRvJiB0aHJlYWRMaXN0ID0gbWFjaGluZVRocmVhZHMudGhyZWFkc0xpc3RIZWFkKG1hY2hp
bmVUaHJlYWRzTG9jayk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoTWFjaGluZVRocmVhZHM6
Ok1hY2hpbmVUaHJlYWQqIG1hY2hpbmVUaHJlYWQgPSB0aHJlYWRMaXN0LmhlYWQoKTsgbWFjaGlu
ZVRocmVhZDsgbWFjaGluZVRocmVhZCA9IG1hY2hpbmVUaHJlYWQtPm5leHQoKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG1hY2hpbmVUaHJlYWQtPm1fdGhyZWFkLmdldCgpID09IHRo
cmVhZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0JvdW5kcyA9IFN0YWNrQm91
bmRzKG1hY2hpbmVUaHJlYWQtPnN0YWNrQmFzZSgpLCBtYWNoaW5lVGhyZWFkLT5zdGFja0VuZCgp
KTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodm1Jc0luYWN0
aXZlKHZtKSkKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIXN0YWNrQm91bmRzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBWTVRyYXBzOjpNYXNrIG1hc2sobV9ldmVudFR5cGUpOwotICAgICAgICAg
ICAgaWYgKCF2bS5uZWVkVHJhcEhhbmRsaW5nKG1hc2spKQotICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIHZtLnRyYXBzKCkudHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyhj
b250ZXh0LCBzdGFja0JvdW5kcyk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQotCisgICAg
ICAgIAogICAgICAgICBzbGVlcE1TKDEpOworICAgICAgICByZXR1cm4gV29ya1Jlc3VsdDo6Q29u
dGludWU7CiAgICAgfQorICAgIAorcHJpdmF0ZToKKworICAgIFZNJiBtX3ZtOworfTsKIAotICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICBpZiAobV92bSkKLSAgICAgICAg
bV92bS0+dHJhcHMoKS5yZW1vdmVTaWduYWxTZW5kZXIodGhpcyk7Ci19CiAjZW5kaWYgLy8gRU5B
QkxFKFNJR05BTF9CQVNFRF9WTV9UUkFQUykKIAordm9pZCBWTVRyYXBzOjp3aWxsRGVzdHJveVZN
KCkKK3sKKyAgICBtX2lzU2h1dHRpbmdEb3duID0gdHJ1ZTsKKyAgICBXVEY6OnN0b3JlU3RvcmVG
ZW5jZSgpOworI2lmIEVOQUJMRShTSUdOQUxfQkFTRURfVk1fVFJBUFMpCisgICAgaWYgKG1fc2ln
bmFsU2VuZGVyKSB7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2soKm1fbG9jayk7CisgICAgICAgICAgICBpZiAoIW1fc2lnbmFsU2VuZGVyLT50cnlTdG9wKGxv
Y2tlcikpCisgICAgICAgICAgICAgICAgbV90cmFwU2V0LT5ub3RpZnlBbGwobG9ja2VyKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkKKyAgICAgICAgICAgIG1fc2ln
bmFsU2VuZGVyLT5qb2luKCk7CisgICAgICAgIG1fc2lnbmFsU2VuZGVyID0gbnVsbHB0cjsKKyAg
ICB9CisjZW5kaWYKK30KKwogdm9pZCBWTVRyYXBzOjpmaXJlVHJhcChWTVRyYXBzOjpFdmVudFR5
cGUgZXZlbnRUeXBlKQogewogICAgIEFTU0VSVCghdm0oKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5n
QVBJTG9jaygpKTsKICAgICB7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2Nr
KTsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jaygqbV9sb2NrKTsKICAgICAgICAgQVNT
RVJUKCFtX2lzU2h1dHRpbmdEb3duKTsKICAgICAgICAgc2V0VHJhcEZvckV2ZW50KGxvY2tlciwg
ZXZlbnRUeXBlKTsKICAgICAgICAgbV9uZWVkVG9JbnZhbGlkYXRlZENvZGVCbG9ja3MgPSB0cnVl
OwpAQCAtNDMwLDExICszMzUsMTAgQEAgdm9pZCBWTVRyYXBzOjpmaXJlVHJhcChWTVRyYXBzOjpF
dmVudFR5cGUgZXZlbnRUeXBlKQogICAgICAgICAvLyBzZW5kU2lnbmFsKCkgY2FuIGxvb3AgdW50
aWwgaXQgaGFzIGNvbmZpcm1hdGlvbiB0aGF0IHRoZSBtdXRhdG9yIHRocmVhZAogICAgICAgICAv
LyBoYXMgcmVjZWl2ZWQgdGhlIHRyYXAgcmVxdWVzdC4gV2UnbGwgY2FsbCBpdCBmcm9tIGFub3Ro
ZXIgdHJhcCBzbyB0aGF0CiAgICAgICAgIC8vIGZpcmVUcmFwKCkgZG9lcyBub3QgYmxvY2suCi0g
ICAgICAgIFJlZlB0cjxTaWduYWxTZW5kZXI+IHNlbmRlciA9IGFkb3B0UmVmKG5ldyBTaWduYWxT
ZW5kZXIodm0oKSwgZXZlbnRUeXBlKSk7Ci0gICAgICAgIGFkZFNpZ25hbFNlbmRlcihzZW5kZXIu
Z2V0KCkpOwotICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgianNjLnZtdHJhcHMuc2lnbmFsbGluZy50
aHJlYWQiLCBbc2VuZGVyXSB7Ci0gICAgICAgICAgICBzZW5kZXItPnNlbmQoKTsKLSAgICAgICAg
fSk7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soKm1fbG9jayk7CisgICAgICAgIGlm
ICghbV9zaWduYWxTZW5kZXIpCisgICAgICAgICAgICBtX3NpZ25hbFNlbmRlciA9IGFkb3B0UmVm
KG5ldyBTaWduYWxTZW5kZXIobG9ja2VyLCB2bSgpKSk7CisgICAgICAgIG1fdHJhcFNldC0+bm90
aWZ5QWxsKGxvY2tlcik7CiAgICAgfQogI2VuZGlmCiB9CkBAIC00NDQsNiArMzQ4LDE2IEBAIHZv
aWQgVk1UcmFwczo6aGFuZGxlVHJhcHMoRXhlY1N0YXRlKiBleGVjLCBWTVRyYXBzOjpNYXNrIG1h
c2spCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKKyAgICB7CisgICAgICAgIGF1dG8gY29kZUJsb2NrU2V0TG9ja2Vy
ID0gaG9sZExvY2sodm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5nZXRMb2NrKCkpOworICAgICAgICB2
bS5oZWFwLmZvckVhY2hDb2RlQmxvY2tJZ25vcmluZ0pJVFBsYW5zKGNvZGVCbG9ja1NldExvY2tl
ciwgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgeworICAgICAgICAgICAgLy8gV2Ugd2FudCB0
byBqZXR0aXNvbiBhbGwgY29kZSBibG9ja3MgdGhhdCBoYXZlIHZtIHRyYXBzIGJyZWFrcG9pbnRz
LCBvdGhlcndpc2Ugd2UgY291bGQgaGl0IHRoZW0gbGF0ZXIuCisgICAgICAgICAgICBpZiAoY29k
ZUJsb2NrLT5oYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpKQorICAgICAgICAgICAgICAg
IGNvZGVCbG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9WTVRyYXBzKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSk7CisgICAgfQorCiAgICAgQVNTRVJU
KG5lZWRUcmFwSGFuZGxpbmcobWFzaykpOwogICAgIHdoaWxlIChuZWVkVHJhcEhhbmRsaW5nKG1h
c2spKSB7CiAgICAgICAgIGF1dG8gZXZlbnRUeXBlID0gdGFrZVRvcFByaW9yaXR5VHJhcChtYXNr
KTsKQEAgLTQ2MCw3ICszNzQsNiBAQCB2b2lkIFZNVHJhcHM6OmhhbmRsZVRyYXBzKEV4ZWNTdGF0
ZSogZXhlYywgVk1UcmFwczo6TWFzayBtYXNrKQogICAgICAgICAgICAgRkFMTFRIUk9VR0g7CiAK
ICAgICAgICAgY2FzZSBOZWVkVGVybWluYXRpb246Ci0gICAgICAgICAgICBpbnZhbGlkYXRlQ29k
ZUJsb2Nrc09uU3RhY2soZXhlYyk7CiAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBz
Y29wZSwgY3JlYXRlVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbigmdm0pKTsKICAgICAgICAg
ICAgIHJldHVybjsKIApAQCAtNDcyLDcgKzM4NSw3IEBAIHZvaWQgVk1UcmFwczo6aGFuZGxlVHJh
cHMoRXhlY1N0YXRlKiBleGVjLCBWTVRyYXBzOjpNYXNrIG1hc2spCiAKIGF1dG8gVk1UcmFwczo6
dGFrZVRvcFByaW9yaXR5VHJhcChWTVRyYXBzOjpNYXNrIG1hc2spIC0+IEV2ZW50VHlwZQogewot
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKCptX2xvY2spOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTnVtYmVyT2ZFdmVudFR5
cGVzOyArK2kpIHsKICAgICAgICAgRXZlbnRUeXBlIGV2ZW50VHlwZSA9IHN0YXRpY19jYXN0PEV2
ZW50VHlwZT4oaSk7CiAgICAgICAgIGlmIChoYXNUcmFwRm9yRXZlbnQobG9ja2VyLCBldmVudFR5
cGUsIG1hc2spKSB7CkBAIC00ODMsNCArMzk2LDE3IEBAIGF1dG8gVk1UcmFwczo6dGFrZVRvcFBy
aW9yaXR5VHJhcChWTVRyYXBzOjpNYXNrIG1hc2spIC0+IEV2ZW50VHlwZQogICAgIHJldHVybiBJ
bnZhbGlkOwogfQogCitWTVRyYXBzOjpWTVRyYXBzKCkKKyAgICA6IG1fbG9jayhCb3g8TG9jaz46
OmNyZWF0ZSgpKQorICAgICwgbV90cmFwU2V0KEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6Y3Jl
YXRlKCkpCit7Cit9CisKK1ZNVHJhcHM6On5WTVRyYXBzKCkKK3sKKyNpZiBFTkFCTEUoU0lHTkFM
X0JBU0VEX1ZNX1RSQVBTKQorICAgIEFTU0VSVCghbV9zaWduYWxTZW5kZXIpOworI2VuZGlmCit9
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk1UcmFwcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFw
cy5oCmluZGV4IDliNzI2NDdhYjI2MjNlYjFjODgyZTAyNjM2ZjRiMWMwYjJhMDIzZjguLjliMDZj
ZGQxMmRiNTllMmEwNzQ0NTM4MTI3OWJiNzRmMTM2MmMwNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTVRyYXBzLmgKQEAgLTI1LDYgKzI1LDggQEAKIAogI3ByYWdtYSBvbmNlCiAK
KyNpbmNsdWRlIDx3dGYvQXV0b21hdGljVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL0JveC5oPgog
I2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL0xvY2suaD4KQEAgLTg2LDEyICs4OCw4IEBAIHB1YmxpYzoKICAgICAgICAgQml0
RmllbGQgbV9tYXNrOwogICAgIH07CiAKLSAgICB+Vk1UcmFwcygpCi0gICAgewotI2lmIEVOQUJM
RShTSUdOQUxfQkFTRURfVk1fVFJBUFMpCi0gICAgICAgIEFTU0VSVChtX3NpZ25hbFNlbmRlcnMu
aXNFbXB0eSgpKTsKLSNlbmRpZgotICAgIH0KKyAgICB+Vk1UcmFwcygpOworICAgIFZNVHJhcHMo
KTsKIAogICAgIHZvaWQgd2lsbERlc3Ryb3lWTSgpOwogCkBAIC0xMTAsNyArMTA4LDYgQEAgcHVi
bGljOgogICAgIHZvaWQgaGFuZGxlVHJhcHMoRXhlY1N0YXRlKiwgVk1UcmFwczo6TWFzayk7CiAK
ICAgICB2b2lkIHRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMoc3RydWN0IFNpZ25hbENvbnRleHQm
LCBTdGFja0JvdW5kcyk7Ci0gICAgRXhwZWN0ZWQ8Ym9vbCwgRXJyb3I+IHRyeUpldHRpc29uQ29k
ZUJsb2Nrc09uU3RhY2soc3RydWN0IFNpZ25hbENvbnRleHQmKTsKIAogcHJpdmF0ZToKICAgICBW
TSYgdm0oKSBjb25zdDsKQEAgLTEzNCwyMSArMTMxLDggQEAgcHJpdmF0ZToKICAgICBFdmVudFR5
cGUgdGFrZVRvcFByaW9yaXR5VHJhcChNYXNrKTsKIAogI2lmIEVOQUJMRShTSUdOQUxfQkFTRURf
Vk1fVFJBUFMpCi0gICAgY2xhc3MgU2lnbmFsU2VuZGVyIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPFNpZ25hbFNlbmRlcj4gewotICAgIHB1YmxpYzoKLSAgICAgICAgU2lnbmFsU2VuZGVy
KFZNJiB2bSwgRXZlbnRUeXBlIGV2ZW50VHlwZSkKLSAgICAgICAgICAgIDogbV92bSgmdm0pCi0g
ICAgICAgICAgICAsIG1fZXZlbnRUeXBlKGV2ZW50VHlwZSkKLSAgICAgICAgeyB9Ci0KLSAgICAg
ICAgdm9pZCB3aWxsRGVzdHJveVZNKCk7Ci0gICAgICAgIHZvaWQgc2VuZCgpOwotCi0gICAgcHJp
dmF0ZToKLSAgICAgICAgTG9jayBtX2xvY2s7Ci0gICAgICAgIFZNKiBtX3ZtOwotICAgICAgICBF
dmVudFR5cGUgbV9ldmVudFR5cGU7Ci0gICAgfTsKKyAgICBjbGFzcyBTaWduYWxTZW5kZXI7Cisg
ICAgZnJpZW5kIGNsYXNzIFNpZ25hbFNlbmRlcjsKIAogICAgIHZvaWQgaW52YWxpZGF0ZUNvZGVC
bG9ja3NPblN0YWNrKCk7CiAgICAgdm9pZCBpbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhY2soRXhl
Y1N0YXRlKiB0b3BDYWxsRnJhbWUpOwpAQCAtMTYxLDcgKzE0NSw4IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBpbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhY2soRXhlY1N0YXRlKikgeyB9CiAjZW5kaWYK
IAotICAgIExvY2sgbV9sb2NrOworICAgIEJveDxMb2NrPiBtX2xvY2s7CisgICAgUmVmUHRyPEF1
dG9tYXRpY1RocmVhZENvbmRpdGlvbj4gbV90cmFwU2V0OwogICAgIHVuaW9uIHsKICAgICAgICAg
Qml0RmllbGQgbV9uZWVkVHJhcEhhbmRsaW5nIHsgMCB9OwogICAgICAgICBCaXRGaWVsZCBtX3Ry
YXBzQml0RmllbGQ7CkBAIC0xNzAsNyArMTU1LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNT
aHV0dGluZ0Rvd24geyBmYWxzZSB9OwogCiAjaWYgRU5BQkxFKFNJR05BTF9CQVNFRF9WTV9UUkFQ
UykKLSAgICBIYXNoU2V0PFJlZlB0cjxTaWduYWxTZW5kZXI+PiBtX3NpZ25hbFNlbmRlcnM7Cisg
ICAgUmVmUHRyPFNpZ25hbFNlbmRlcj4gbV9zaWduYWxTZW5kZXI7CiAjZW5kaWYKIAogICAgIGZy
aWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDFhYjk1ODljYTI3ODgxODY2ZjRmZjhhYjUx
MTU2MDcwZDdjYjhlNy4uYmVlN2U2YTcwN2IwYTM4YTc4MGE4NjFkOGNjZWE0NmU0OTNmZjEwZiAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1IEBACisyMDE3LTA2LTI4ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUu
Y29tPgorCisgICAgICAgIFZNVHJhcHMgaGFzIHNvbWUgcmFjZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Mzk0MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBuZXcgdGVzdGluZyBtb2RlIGZvciB0
ZXN0aW5nIHRoZSBXYXRjaGRvZyB3aXRoIG91ciBzdHJlc3MKKyAgICAgICAgdGVzdHMuCisKKyAg
ICAgICAgKiBTY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzOgorCiAyMDE3LTA2LTI2ICBKb25h
dGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBy
b2xsaW5nIG91dCByMjE4NzgzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0
cmVzcy10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKaW5kZXggYzA5
ZjIxODUyMzc5ZDMzZDhmZjcyN2RiYWE5N2NjYTAxY2VkOTdhMy4uYWY2ZjcxNTJkZjAyYWU0ZDk5
OWVjMjk2OTg3ZmI2NjYyOTg4MDQ3YyAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tanNj
LXN0cmVzcy10ZXN0cworKysgYi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCkBA
IC04OTAsNiArODkwLDExIEBAIGRlZiBydW5GVExFYWdlcigqb3B0aW9uYWxUZXN0U3BlY2lmaWNP
cHRpb25zKQogICAgIHJ1bigiZnRsLWVhZ2VyIiwgIi0tYWlyRm9yY2VCcmlnZ3NBbGxvY2F0b3I9
dHJ1ZSIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TICsgQ09MTEVDVF9DT05USU5VT1VT
TFlfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAorZGVmIHJ1
bkZUTEVhZ2VyV2F0Y2hkb2coKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKKyAgICB0aW1l
b3V0ID0gcmFuZCgxMDApCisgICAgcnVuKCJmdGwtZWFnZXItd2F0Y2hkb2ctI3t0aW1lb3V0fSIs
ICItLXdhdGNoZG9nPSN7dGltZW91dH0iLCAiLS13YXRjaGRvZy1leGNlcHRpb24tb2siLCAqKEZU
TF9PUFRJT05TICsgRUFHRVJfT1BUSU9OUyArIENPTExFQ1RfQ09OVElOVU9VU0xZX09QVElPTlMg
KyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorZW5kCisKIGRlZiBydW5GVExFYWdlck5v
Q0pJVFZhbGlkYXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiAgICAgcnVuKCJmdGwt
ZWFnZXItbm8tY2ppdCIsICItLXZhbGlkYXRlR3JhcGg9dHJ1ZSIsICItLWFpckZvcmNlSVJDQWxs
b2NhdG9yPXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgRUFHRVJfT1BU
SU9OUyArIENPTExFQ1RfQ09OVElOVU9VU0xZX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMpKQogZW5kCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314069</attachid>
            <date>2017-06-28 16:52:05 -0700</date>
            <delta_ts>2017-06-28 19:52:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173941-20170628165204.patch</filename>
            <type>text/plain</type>
            <size>40844</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE4ODM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
Y2FmZmRjOWE0ZTc4YzVjMDA1ZjQ5ZTA4ZDJiZDQ3NDFhNGIzNDY4Li43NjQyYzk2OGExODRjMmY1
NmZmZjFlNjc3MmE5ODdiNTExY2E5NTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NiBAQAorMjAxNy0wNi0yOCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBWTVRyYXBzIGhhcyBzb21lIHJhY2VzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM5NDEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHJlZmFjdG9ycyBtdWNo
IG9mIHRoZSBWTVRyYXBzIEFQSS4KKworICAgICAgICBPbiB0aGUgbWVzc2FnZSBzZW5kaW5nIHNp
ZGU6CisKKyAgICAgICAgMSkgTm8gbG9uZ2VyIHVzZXMgdGhlIFlhcnIgSklUIGNoZWNrIHRvIGRl
dGVybWluZSBpZiB3ZSBhcmUgaW4KKyAgICAgICAgUmVnRXhwIGNvZGUuIFRoYXQgd2FzIHVuc291
bmQgYmVjYXVzZSBSZWdFeHAgSklUIGNvZGUgY2FuIGJlIHJ1bgorICAgICAgICBvbiBjb21waWxh
dGlvbiB0aHJlYWRzLiAgSW5zdGVhZCBpdCBsb29rcyBhdCB0aGUgY3VycmVudCBmcmFtZSdzCisg
ICAgICAgIGNvZGUgYmxvY2sgc2xvdCBhbmQgY2hlY2tzIGlmIGl0IGlzIHZhbGlkLCB3aGljaCBp
cyB0aGUgc2FtZSBhcworICAgICAgICB3aGF0IGl0IGRpZCBmb3IgSklUIGNvZGUgcHJldmlvdXNs
eS4KKworICAgICAgICAyKSBPbmx5IGhhdmUgb25lIHNpZ25hbCBzZW5kZXIgdGhyZWFkLCBwcmV2
aW91c2x5LCB0aGVyZSBjb3VsZCBiZQorICAgICAgICBtYW55IGF0IG9uY2UsIHdoaWNoIGNhdXNl
ZCBzb21lIGRhdGEgcmFjZXMuIEFkZGl0aW9uYWxseSwgdGhlCisgICAgICAgIHNpZ25hbCBzZW5k
ZXIgdGhyZWFkIGlzIGFuIGF1dG9tYXRpYyB0aHJlYWQgc28gaXQgd2lsbCBkZWFsbG9jYXRlCisg
ICAgICAgIGl0c2VsZiB3aGVuIG5vdCBpbiB1c2UuCisKKyAgICAgICAgT24gdGhlIFZNVHJhcHMg
YnJlYWtwb2ludCBzaWRlOgorCisgICAgICAgIDEpIFdlIG5vdyBoYXZlIGEgdHJ1ZSBtYXBwaW5n
IG9mIGlmIHdlIGhpdCBhIGJyZWFrcG9pbnQgaW5zdGVhZCBvZgorICAgICAgICBhIEpJVCBhc3Nl
cnRpb24uIFNvIHRoZSBleGNlcHRpb24gaGFuZGxlciB3b24ndCBlYXQgSklUIGFzc2VydGlvbnMK
KyAgICAgICAgYW55bW9yZS4KKworICAgICAgICAyKSBJdCBqZXR0aXNvbnMgYWxsIENvZGVCbG9j
a3MgdGhhdCBoYXZlIFZNVHJhcHMgYnJlYWtwb2ludHMgb24KKyAgICAgICAgdGhlbSBpbnN0ZWFk
IG9mIGV2ZXJ5IENvZGVCbG9jayBvbiB0aGUgc3RhY2suIFRoaXMgYm90aCBwcmV2ZW50cworICAg
ICAgICB1cyBmcm9tIGhpdHRpbmcgc3RhbGUgVk1UcmFwcyBicmVha3BvaW50cyBhbmQgYWxzbyBk
b2Vzbid0IE9TUgorICAgICAgICBjb2RlYmxvY2tzIHRoYXQgb3RoZXJ3aXNlIGRvbid0IG5lZWQg
dG8gYmUgamV0dGlzb25lZC4KKworICAgICAgICAzKSBUaGUgb2xkIGV4Y2VwdGlvbiBoYW5kbGVy
IGNvdWxkIHRoZW9yZXRpY2FsbHkgZmFpbCBmb3IgYSBjb3VwbGUKKyAgICAgICAgb2YgcmVhc29u
cyB0aGVuIHJlc3VtZSBleGVjdXRpb24gd2l0aCBhIGNsb2JiZXJlZCBpbnN0cnVjdGlvbgorICAg
ICAgICBzZXQuIFRoaXMgcGF0Y2ggd2lsbCBraWxsIHRoZSBwcm9ncmFtIGlmIHRoZSBleGNlcHRp
b24gaGFuZGxlcgorICAgICAgICB3b3VsZCBmYWlsLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxz
byByZWZhY3RvcnMgc29tZSBvZiB0aGUganNjLmNwcCBmdW5jdGlvbnMgdG8gdGFrZSB0aGUKKyAg
ICAgICAgQ29tbWFuZExpbmUgb3B0aW9ucyBvYmplY3QgaW5zdGVhZCBvZiBpbmRpdmlkdWFsIG9w
dGlvbnMuIEFsc28sIHRoZXJlCisgICAgICAgIGlzIGEgbmV3IGNvbW1hbmQgbGluZSBvcHRpb24g
dGhhdCBtYWtlcyBleGNlcHRpb25zIGR1ZSB0byB3YXRjaGRvZworICAgICAgICB0aW1lb3V0cyBh
biBhY2NlcHRhYmxlIHJlc3VsdC4KKworICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLmM6Cisg
ICAgICAgIChtYWluKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6Omluc3RhbGxWTVRyYXBCcmVha3BvaW50cyk6CisgICAgICAgICog
ZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnBjQ29kZUJsb2NrTWFw
KToKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjppbnZhbGlkYXRlKToKKyAgICAgICAg
KEpTQzo6REZHOjpDb21tb25EYXRhOjp+Q29tbW9uRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6
Q29tbW9uRGF0YTo6aW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKToKKyAgICAgICAgKEpTQzo6REZH
Ojpjb2RlQmxvY2tGb3JWTVRyYXBQQyk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuaDoK
KyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25Eb2xsYXJBZ2VudFN0YXJ0KToK
KyAgICAgICAgKGNoZWNrVW5jYXVnaHRFeGNlcHRpb24pOgorICAgICAgICAoY2hlY2tFeGNlcHRp
b24pOgorICAgICAgICAocnVuV2l0aE9wdGlvbnMpOgorICAgICAgICAocHJpbnRVc2FnZVN0YXRl
bWVudCk6CisgICAgICAgIChDb21tYW5kTGluZTo6cGFyc2VBcmd1bWVudHMpOgorICAgICAgICAo
anNjbWFpbik6CisgICAgICAgIChydW5XaXRoU2NyaXB0cyk6IERlbGV0ZWQuCisgICAgICAgICog
cnVudGltZS9KU0xvY2suY3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OmRpZEFjcXVpcmVMb2Nr
KToKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgorICAgICAgICAoSlNDOjpzYW5pdGl6
ZWRUb3BDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjp0cnlJbnN0YWxsVHJhcEJy
ZWFrcG9pbnRzKToKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6d2lsbERlc3Ryb3lWTSk6CisgICAg
ICAgIChKU0M6OlZNVHJhcHM6OmZpcmVUcmFwKToKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6aGFu
ZGxlVHJhcHMpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjpWTVRyYXBzKToKKyAgICAgICAgKEpT
Qzo6Vk1UcmFwczo6flZNVHJhcHMpOgorICAgICAgICAoSlNDOjpmaW5kQWN0aXZlVk1BbmRTdGFj
a0JvdW5kcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Omluc3RhbGxTaWduYWxIYW5kbGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6YWRkU2lnbmFsU2VuZGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6cmVtb3ZlU2lnbmFsU2VuZGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Vk1UcmFwczo6U2lnbmFsU2VuZGVyOjp3aWxsRGVzdHJveVZNKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6U2lnbmFsU2VuZGVyOjpzZW5kKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuaDoKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6
flZNVHJhcHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWTVRyYXBzOjpTaWduYWxTZW5kZXI6
OlNpZ25hbFNlbmRlcik6IERlbGV0ZWQuCisKIDIwMTctMDYtMjYgIFNhYW0gQmFyYXRpICA8c2Jh
cmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVnRXhwUHJvdG90eXBlLmpzIGJ1aWx0aW4gdXNl
cyBmb3Itb2YgaXRlcmF0aW9uIHdoaWNoIGlzIGFsbW9zdCBjZXJ0YWlubHkgaW5jb3JyZWN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCmluZGV4IDlkM2I0NTYyOWY1
YzFmYWNjODEwOTkxOTgzNjRkZjE1OTZjOWYzZDcuLmYxMmNjMmVlMjFiMzhlOGFlMGZmMjQ0ZWVk
MTk1M2YzMjNiM2M1MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVz
dHMvdGVzdGFwaS5jCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFw
aS5jCkBAIC0xMzQ4LDcgKzEzNDgsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltd
KQogICAgIDo6U2V0RXJyb3JNb2RlKDApOwogI2VuZGlmCiAKLSAgICB0ZXN0RXhlY3V0aW9uVGlt
ZUxpbWl0KCk7CiAgICAgdGVzdENvbXBhcmVBbmRTd2FwKCk7CiAgICAgc3RhcnRNdWx0aXRocmVh
ZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCBiYjRlYmZjYjU0NzQ5OGZlZWU5N2Q4Zjg4Nzg2Y2Mw
YzEwYmQ2Y2ZhLi42MGRlZjY1NTZjYWE0YWFmNzJkNTQ1ODc3ZTI3Y2MyZTAyMWFlYjNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtMzAwNSw5
ICszMDA1LDEwIEBAIGJvb2wgQ29kZUJsb2NrOjppbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKQog
ICAgIC8vIHdlIHNob3VsZCBub3QgcGVydHVyYiB0aGUgcmVmQ291bnQgb2YgbV9qaXRDb2RlLgog
ICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5pbnN0YWxsVk1UcmFwQnJl
YWtwb2ludHMoKTsKKyAgICBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5pbnN0YWxsVk1UcmFwQnJl
YWtwb2ludHModGhpcyk7CiAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQorICAgIFVOUkVBQ0hBQkxF
X0ZPUl9QTEFURk9STSgpOwogICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKaW5kZXggY2QxZTVlZmY4Y2E1Njc0
Y2JhM2FhYmQ3ZmUxODM1ODQzYmVmNTYyMS4uYzAyY2Q1MTcxYjM2ODcwZjM5Nzg5NzQyZmVlMjE2
YjhiMWVjOWU5MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21t
b25EYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEu
Y3BwCkBAIC0zNiw2ICszNiw4IEBACiAjaW5jbHVkZSAiVHJhY2tlZFJlZmVyZW5jZXMuaCIKICNp
bmNsdWRlICJWTS5oIgogCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBDb21tb25EYXRhOjpub3RpZnlDb21w
aWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKFBsYW4mIHBsYW4sIENvZGVCbG9jayogY29kZUJsb2Nr
LCBOb2RlKiBub2RlKQpAQCAtODcsMjMgKzg5LDc1IEBAIHZvaWQgQ29tbW9uRGF0YTo6c2hyaW5r
VG9GaXQoKQogICAgIHRyYW5zaXRpb25zLnNocmlua1RvRml0KCk7CiB9CiAKK3N0YXRpYyBTdGF0
aWNMb2NrIHBjQ29kZUJsb2NrTWFwTG9jazsKK2lubGluZSBIYXNoTWFwPHZvaWQqLCBDb2RlQmxv
Y2sqPiYgcGNDb2RlQmxvY2tNYXAoQWJzdHJhY3RMb2NrZXImKQoreworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxIYXNoTWFwPHZvaWQqLCBDb2RlQmxvY2sqPj4gcGNDb2RlQmxvY2tNYXA7Cisg
ICAgcmV0dXJuIHBjQ29kZUJsb2NrTWFwOworfQorCiBib29sIENvbW1vbkRhdGE6OmludmFsaWRh
dGUoKQogewogICAgIGlmICghaXNTdGlsbFZhbGlkKQogICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAoVU5MSUtFTFkoaGFzVk1UcmFwc0JyZWFrcG9pbnRzSW5zdGFsbGVkKSkgeworICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihwY0NvZGVCbG9ja01hcExvY2spOworICAgICAgICBhdXRv
JiBtYXAgPSBwY0NvZGVCbG9ja01hcChsb2NrZXIpOworICAgICAgICBmb3IgKGF1dG8mIGp1bXBS
ZXBsYWNlbWVudCA6IGp1bXBSZXBsYWNlbWVudHMpCisgICAgICAgICAgICBtYXAucmVtb3ZlKGp1
bXBSZXBsYWNlbWVudC5kYXRhTG9jYXRpb24oKSk7CisgICAgICAgIGhhc1ZNVHJhcHNCcmVha3Bv
aW50c0luc3RhbGxlZCA9IGZhbHNlOworICAgIH0KKwogICAgIGZvciAodW5zaWduZWQgaSA9IGp1
bXBSZXBsYWNlbWVudHMuc2l6ZSgpOyBpLS07KQogICAgICAgICBqdW1wUmVwbGFjZW1lbnRzW2ld
LmZpcmUoKTsKICAgICBpc1N0aWxsVmFsaWQgPSBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBDb21tb25EYXRhOjppbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKQorQ29tbW9uRGF0
YTo6fkNvbW1vbkRhdGEoKQogeworICAgIGlmIChVTkxJS0VMWShoYXNWTVRyYXBzQnJlYWtwb2lu
dHNJbnN0YWxsZWQpKSB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHBjQ29kZUJsb2NrTWFw
TG9jayk7CisgICAgICAgIGF1dG8mIG1hcCA9IHBjQ29kZUJsb2NrTWFwKGxvY2tlcik7CisgICAg
ICAgIGZvciAoYXV0byYganVtcFJlcGxhY2VtZW50IDoganVtcFJlcGxhY2VtZW50cykKKyAgICAg
ICAgICAgIG1hcC5yZW1vdmUoanVtcFJlcGxhY2VtZW50LmRhdGFMb2NhdGlvbigpKTsKKyAgICB9
Cit9CisKK3ZvaWQgQ29tbW9uRGF0YTo6aW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKENvZGVCbG9j
ayogb3duZXIpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIocGNDb2RlQmxvY2tNYXBMb2NrKTsK
ICAgICBpZiAoIWlzU3RpbGxWYWxpZCB8fCBoYXNWTVRyYXBzQnJlYWtwb2ludHNJbnN0YWxsZWQp
CiAgICAgICAgIHJldHVybjsKICAgICBoYXNWTVRyYXBzQnJlYWtwb2ludHNJbnN0YWxsZWQgPSB0
cnVlOwotICAgIGZvciAodW5zaWduZWQgaSA9IGp1bXBSZXBsYWNlbWVudHMuc2l6ZSgpOyBpLS07
KQotICAgICAgICBqdW1wUmVwbGFjZW1lbnRzW2ldLmluc3RhbGxWTVRyYXBCcmVha3BvaW50KCk7
CisKKyAgICBhdXRvJiBtYXAgPSBwY0NvZGVCbG9ja01hcChsb2NrZXIpOworI2lmICFkZWZpbmVk
KE5ERUJVRykKKyAgICAvLyBXZSBuZWVkIHRvIGJlIGFibGUgdG8gaGFuZGxlIG1vcmUgdGhhbiBv
bmUgaW52YWxpZGF0aW9uIHBvaW50IGF0IHRoZSBzYW1lIHBjCisgICAgLy8gYnV0IHdlIHdhbnQg
dG8gbWFrZSBzdXJlIHdlIGRvbid0IGZvcmdldCB0byByZW1vdmUgYSBwYyBmcm9tIHRoZSBtYXAu
CisgICAgSGFzaFNldDx2b2lkKj4gbmV3UmVwbGFjZW1lbnRzOworI2VuZGlmCisgICAgZm9yIChh
dXRvJiBqdW1wUmVwbGFjZW1lbnQgOiBqdW1wUmVwbGFjZW1lbnRzKSB7CisgICAgICAgIGp1bXBS
ZXBsYWNlbWVudC5pbnN0YWxsVk1UcmFwQnJlYWtwb2ludCgpOworICAgICAgICB2b2lkKiBzb3Vy
Y2UgPSBqdW1wUmVwbGFjZW1lbnQuZGF0YUxvY2F0aW9uKCk7CisgICAgICAgIGF1dG8gcmVzdWx0
ID0gbWFwLmFkZChzb3VyY2UsIG93bmVyKTsKKyNpZiAhZGVmaW5lZChOREVCVUcpCisgICAgICAg
IEFTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSB8fCBuZXdSZXBsYWNlbWVudHMuY29udGFpbnMoc291
cmNlKSk7CisgICAgICAgIG5ld1JlcGxhY2VtZW50cy5hZGQoc291cmNlKTsKKyNlbmRpZgorICAg
IH0KK30KKworQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3JWTVRyYXBQQyh2b2lkKiBwYykKK3sKKyAg
ICBBU1NFUlQoaXNKSVRQQyhwYykpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKHBjQ29kZUJsb2Nr
TWFwTG9jayk7CisgICAgYXV0byYgbWFwID0gcGNDb2RlQmxvY2tNYXAobG9ja2VyKTsKKyAgICBh
dXRvIHJlc3VsdCA9IG1hcC5maW5kKHBjKTsKKyAgICBpZiAocmVzdWx0ID09IG1hcC5lbmQoKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiB9CiAK
IGJvb2wgQ29tbW9uRGF0YTo6aXNWTVRyYXBCcmVha3BvaW50KHZvaWQqIGFkZHJlc3MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCmluZGV4IGZkZTA3NDcyYjkyNDI4
OWU5MTEyNWMzYTZlYWNkNDhkNWM2YTZmYWIuLjI5NGMxMWZlOWUxMTBhZmMxODU5YjEzN2NkNWMz
Y2Y2Y2YyM2IyMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uRGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5o
CkBAIC03NSw2ICs3NSw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBmcmFtZVJlZ2lzdGVyQ291bnQo
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQogICAgICAgICAsIHJlcXVpcmVk
UmVnaXN0ZXJDb3VudEZvckV4aXQoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
KQogICAgIHsgfQorICAgIH5Db21tb25EYXRhKCk7CiAgICAgCiAgICAgdm9pZCBub3RpZnlDb21w
aWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKFBsYW4mLCBDb2RlQmxvY2sqLCBOb2RlKik7CiAgICAg
Q2FsbFNpdGVJbmRleCBhZGRDb2RlT3JpZ2luKENvZGVPcmlnaW4pOwpAQCAtODYsNyArODcsNyBA
QCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpbnZhbGlkYXRlKCk7IC8vIFJldHVybnMgdHJ1ZSBp
ZiB3ZSBkaWQgaW52YWxpZGF0ZSwgb3IgZmFsc2UgaWYgdGhlIGNvZGUgYmxvY2sgd2FzIGFscmVh
ZHkgaW52YWxpZGF0ZWQuCiAgICAgYm9vbCBoYXNJbnN0YWxsZWRWTVRyYXBzQnJlYWtwb2ludHMo
KSBjb25zdCB7IHJldHVybiBpc1N0aWxsVmFsaWQgJiYgaGFzVk1UcmFwc0JyZWFrcG9pbnRzSW5z
dGFsbGVkOyB9Ci0gICAgdm9pZCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKKyAgICB2b2lk
IGluc3RhbGxWTVRyYXBCcmVha3BvaW50cyhDb2RlQmxvY2sqIG93bmVyKTsKICAgICBib29sIGlz
Vk1UcmFwQnJlYWtwb2ludCh2b2lkKiBhZGRyZXNzKTsKIAogICAgIHVuc2lnbmVkIHJlcXVpcmVk
UmVnaXN0ZXJDb3VudEZvckV4ZWN1dGlvbkFuZEV4aXQoKSBjb25zdApAQCAtMTI4LDYgKzEyOSw4
IEBAIHByaXZhdGU6CiAKIH07CiAKK0NvZGVCbG9jayogY29kZUJsb2NrRm9yVk1UcmFwUEModm9p
ZCogcGMpOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggYTcxZmU3NjNhYzk0YzNkZDYzM2ZmNzRk
MWQ2ZDVjOTE1YTg5ZTU2Ni4uYWFkYzE0MjNhMjRiNGMzY2VhMzY2MzVlMGM5ZDU2NDY5ZDQyMWFi
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTk4Niw3ICs5ODYsNyBAQCBjbGFzcyBXb3JrZXJz
OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogaW50IHJ1bkpTQyhDb21tYW5kTGluZSwgYm9v
bCBpc1dvcmtlciwgY29uc3QgRnVuYyYpOwotc3RhdGljIHZvaWQgY2hlY2tFeGNlcHRpb24oR2xv
YmFsT2JqZWN0KiwgYm9vbCBpc0xhc3RGaWxlLCBib29sIGhhc0V4Y2VwdGlvbiwgSlNWYWx1ZSwg
Y29uc3QgU3RyaW5nJiB1bmNhdWdodEV4Y2VwdGlvbk5hbWUsIGJvb2wgYWx3YXlzRHVtcFVuY2F1
Z2h0RXhjZXB0aW9uLCBib29sIGR1bXAsIGJvb2wmIHN1Y2Nlc3MpOworc3RhdGljIHZvaWQgY2hl
Y2tFeGNlcHRpb24oR2xvYmFsT2JqZWN0KiwgYm9vbCBpc0xhc3RGaWxlLCBib29sIGhhc0V4Y2Vw
dGlvbiwgSlNWYWx1ZSwgQ29tbWFuZExpbmUmLCBib29sJiBzdWNjZXNzKTsKIAogY2xhc3MgTWVz
c2FnZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNZXNzYWdlPiB7CiBwdWJsaWM6CkBA
IC0xMjEwLDYgKzEyMTAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBtX3Byb2ZpbGUgeyBmYWxzZSB9
OwogICAgIFN0cmluZyBtX3Byb2ZpbGVyT3V0cHV0OwogICAgIFN0cmluZyBtX3VuY2F1Z2h0RXhj
ZXB0aW9uTmFtZTsKKyAgICBib29sIG1fdHJlYXRXYXRjaGRvZ0V4Y2VwdGlvbkFzU3VjY2VzcyB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX2Fsd2F5c0R1bXBVbmNhdWdodEV4Y2VwdGlvbiB7IGZhbHNl
IH07CiAgICAgYm9vbCBtX2R1bXBTYW1wbGluZ1Byb2ZpbGVyRGF0YSB7IGZhbHNlIH07CiAgICAg
Ym9vbCBtX2VuYWJsZVJlbW90ZURlYnVnZ2luZyB7IGZhbHNlIH07CkBAIC0yNjE3LDcgKzI2MTgs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRG9sbGFyQWdlbnRTdGFy
dChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGV2YWx1YXRl
KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBtYWtlU291cmNlKHNvdXJjZUNvZGUsIFNvdXJj
ZU9yaWdpbihBU0NJSUxpdGVyYWwoIndvcmtlciIpKSksIEpTVmFsdWUoKSwgZXZhbHVhdGlvbkV4
Y2VwdGlvbik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKQog
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFs
dWUoKTsKLSAgICAgICAgICAgICAgICAgICAgY2hlY2tFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0
cnVlLCBldmFsdWF0aW9uRXhjZXB0aW9uLCByZXN1bHQsIFN0cmluZygpLCBmYWxzZSwgZmFsc2Us
IHN1Y2Nlc3MpOworICAgICAgICAgICAgICAgICAgICBjaGVja0V4Y2VwdGlvbihnbG9iYWxPYmpl
Y3QsIHRydWUsIGV2YWx1YXRpb25FeGNlcHRpb24sIHJlc3VsdCwgY29tbWFuZExpbmUsIHN1Y2Nl
c3MpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBleGl0KDEpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzczsKQEAg
LTMyOTIsOCArMzI5Myw5IEBAIHN0YXRpYyB2b2lkIGR1bXBFeGNlcHRpb24oR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgZXhjZXB0aW9uKQogI3VuZGVmIENIRUNLX0VYQ0VQVElP
TgogfQogCi1zdGF0aWMgYm9vbCBjaGVja1VuY2F1Z2h0RXhjZXB0aW9uKFZNJiB2bSwgR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgZXhjZXB0aW9uLCBjb25zdCBTdHJpbmcmIGV4
cGVjdGVkRXhjZXB0aW9uTmFtZSwgYm9vbCBhbHdheXNEdW1wRXhjZXB0aW9uKQorc3RhdGljIGJv
b2wgY2hlY2tVbmNhdWdodEV4Y2VwdGlvbihWTSYgdm0sIEdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIGV4Y2VwdGlvbiwgQ29tbWFuZExpbmUmIG9wdGlvbnMpCiB7CisgICAgY29u
c3QgU3RyaW5nJiBleHBlY3RlZEV4Y2VwdGlvbk5hbWUgPSBvcHRpb25zLm1fdW5jYXVnaHRFeGNl
cHRpb25OYW1lOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAg
ICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIGlmICghZXhjZXB0aW9uKSB7CkBAIC0zMzE0
LDcgKzMzMTYsNyBAQCBzdGF0aWMgYm9vbCBjaGVja1VuY2F1Z2h0RXhjZXB0aW9uKFZNJiB2bSwg
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgZQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIGlmIChpc0luc3RhbmNlT2ZFeHBlY3RlZEV4Y2VwdGlvbikgewotICAg
ICAgICBpZiAoYWx3YXlzRHVtcEV4Y2VwdGlvbikKKyAgICAgICAgaWYgKG9wdGlvbnMubV9hbHdh
eXNEdW1wVW5jYXVnaHRFeGNlcHRpb24pCiAgICAgICAgICAgICBkdW1wRXhjZXB0aW9uKGdsb2Jh
bE9iamVjdCwgZXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzMy
NCwyNSArMzMyNiwzMiBAQCBzdGF0aWMgYm9vbCBjaGVja1VuY2F1Z2h0RXhjZXB0aW9uKFZNJiB2
bSwgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgZQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotc3RhdGljIHZvaWQgY2hlY2tFeGNlcHRpb24oR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGJvb2wgaXNMYXN0RmlsZSwgYm9vbCBoYXNFeGNlcHRpb24sIEpTVmFsdWUgdmFsdWUs
IGNvbnN0IFN0cmluZyYgdW5jYXVnaHRFeGNlcHRpb25OYW1lLCBib29sIGFsd2F5c0R1bXBVbmNh
dWdodEV4Y2VwdGlvbiwgYm9vbCBkdW1wLCBib29sJiBzdWNjZXNzKQorc3RhdGljIHZvaWQgY2hl
Y2tFeGNlcHRpb24oR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGJvb2wgaXNMYXN0RmlsZSwg
Ym9vbCBoYXNFeGNlcHRpb24sIEpTVmFsdWUgdmFsdWUsIENvbW1hbmRMaW5lJiBvcHRpb25zLCBi
b29sJiBzdWNjZXNzKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBp
ZiAoIXVuY2F1Z2h0RXhjZXB0aW9uTmFtZSB8fCAhaXNMYXN0RmlsZSkgeworCisgICAgaWYgKG9w
dGlvbnMubV90cmVhdFdhdGNoZG9nRXhjZXB0aW9uQXNTdWNjZXNzICYmIHZhbHVlLmluaGVyaXRz
KHZtLCBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmluZm8oKSkpIHsKKyAgICAgICAgQVNTRVJU
KGhhc0V4Y2VwdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW9wdGlv
bnMubV91bmNhdWdodEV4Y2VwdGlvbk5hbWUgfHwgIWlzTGFzdEZpbGUpIHsKICAgICAgICAgc3Vj
Y2VzcyA9IHN1Y2Nlc3MgJiYgIWhhc0V4Y2VwdGlvbjsKLSAgICAgICAgaWYgKGR1bXAgJiYgIWhh
c0V4Y2VwdGlvbikKKyAgICAgICAgaWYgKG9wdGlvbnMubV9kdW1wICYmICFoYXNFeGNlcHRpb24p
CiAgICAgICAgICAgICBwcmludGYoIkVuZDogJXNcbiIsIHZhbHVlLnRvV1RGU3RyaW5nKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgaWYgKGhhc0V4
Y2VwdGlvbikKICAgICAgICAgICAgIGR1bXBFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7
CiAgICAgfSBlbHNlCi0gICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmIGNoZWNrVW5jYXVnaHRF
eGNlcHRpb24odm0sIGdsb2JhbE9iamVjdCwgKGhhc0V4Y2VwdGlvbikgPyB2YWx1ZSA6IEpTVmFs
dWUoKSwgdW5jYXVnaHRFeGNlcHRpb25OYW1lLCBhbHdheXNEdW1wVW5jYXVnaHRFeGNlcHRpb24p
OworICAgICAgICBzdWNjZXNzID0gc3VjY2VzcyAmJiBjaGVja1VuY2F1Z2h0RXhjZXB0aW9uKHZt
LCBnbG9iYWxPYmplY3QsIChoYXNFeGNlcHRpb24pID8gdmFsdWUgOiBKU1ZhbHVlKCksIG9wdGlv
bnMpOwogfQogCi1zdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgY29uc3QgVmVjdG9yPFNjcmlwdD4mIHNjcmlwdHMsIGNvbnN0IFN0cmluZyYgdW5j
YXVnaHRFeGNlcHRpb25OYW1lLCBib29sIGFsd2F5c0R1bXBVbmNhdWdodEV4Y2VwdGlvbiwgYm9v
bCBkdW1wLCBib29sIG1vZHVsZSkKK3N0YXRpYyBib29sIHJ1bldpdGhPcHRpb25zKEdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDb21tYW5kTGluZSYgb3B0aW9ucykKIHsKKyAgICBWZWN0b3I8
U2NyaXB0PiYgc2NyaXB0cyA9IG9wdGlvbnMubV9zY3JpcHRzOwogICAgIFN0cmluZyBmaWxlTmFt
ZTsKICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0QnVmZmVyOwogCi0gICAgaWYgKGR1bXApCisgICAg
aWYgKG9wdGlvbnMubV9kdW1wKQogICAgICAgICBKU0M6Ok9wdGlvbnM6OmR1bXBHZW5lcmF0ZWRC
eXRlY29kZXMoKSA9IHRydWU7CiAKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkBA
IC0zMzU1LDcgKzMzNjQsNyBAQCBzdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFNjcmlwdD4mIHNjcgogCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzY3JpcHRzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIEpTSW50ZXJu
YWxQcm9taXNlKiBwcm9taXNlID0gbnVsbHB0cjsKLSAgICAgICAgYm9vbCBpc01vZHVsZSA9IG1v
ZHVsZSB8fCBzY3JpcHRzW2ldLnNjcmlwdFR5cGUgPT0gU2NyaXB0OjpTY3JpcHRUeXBlOjpNb2R1
bGU7CisgICAgICAgIGJvb2wgaXNNb2R1bGUgPSBvcHRpb25zLm1fbW9kdWxlIHx8IHNjcmlwdHNb
aV0uc2NyaXB0VHlwZSA9PSBTY3JpcHQ6OlNjcmlwdFR5cGU6Ok1vZHVsZTsKICAgICAgICAgaWYg
KHNjcmlwdHNbaV0uY29kZVNvdXJjZSA9PSBTY3JpcHQ6OkNvZGVTb3VyY2U6OkZpbGUpIHsKICAg
ICAgICAgICAgIGZpbGVOYW1lID0gc2NyaXB0c1tpXS5hcmd1bWVudDsKICAgICAgICAgICAgIGlm
IChzY3JpcHRzW2ldLnN0cmljdE1vZGUgPT0gU2NyaXB0OjpTdHJpY3RNb2RlOjpTdHJpY3QpCkBA
IC0zMzgyLDEyICszMzkxLDEyIEBAIHN0YXRpYyBib29sIHJ1bldpdGhTY3JpcHRzKEdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8U2NyaXB0PiYgc2NyCiAgICAgICAgICAg
ICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgICAgICAgICBKU0Z1bmN0aW9uKiBmdWxm
aWxsSGFuZGxlciA9IEpTTmF0aXZlU3RkRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCAxLCBTdHJpbmcoKSwgWyYsIGlzTGFzdEZpbGVdKEV4ZWNTdGF0ZSogZXhlYykgewotICAgICAg
ICAgICAgICAgIGNoZWNrRXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgaXNMYXN0RmlsZSwgZmFsc2Us
IGV4ZWMtPmFyZ3VtZW50KDApLCB1bmNhdWdodEV4Y2VwdGlvbk5hbWUsIGFsd2F5c0R1bXBVbmNh
dWdodEV4Y2VwdGlvbiwgZHVtcCwgc3VjY2Vzcyk7CisgICAgICAgICAgICAgICAgY2hlY2tFeGNl
cHRpb24oZ2xvYmFsT2JqZWN0LCBpc0xhc3RGaWxlLCBmYWxzZSwgZXhlYy0+YXJndW1lbnQoMCks
IG9wdGlvbnMsIHN1Y2Nlc3MpOwogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgSlNGdW5j
dGlvbiogcmVqZWN0SGFuZGxlciA9IEpTTmF0aXZlU3RkRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCAxLCBTdHJpbmcoKSwgWyYsIGlzTGFzdEZpbGVdKEV4ZWNTdGF0ZSogZXhlYykg
ewotICAgICAgICAgICAgICAgIGNoZWNrRXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgaXNMYXN0Rmls
ZSwgdHJ1ZSwgZXhlYy0+YXJndW1lbnQoMCksIHVuY2F1Z2h0RXhjZXB0aW9uTmFtZSwgYWx3YXlz
RHVtcFVuY2F1Z2h0RXhjZXB0aW9uLCBkdW1wLCBzdWNjZXNzKTsKKyAgICAgICAgICAgICAgICBj
aGVja0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIGlzTGFzdEZpbGUsIHRydWUsIGV4ZWMtPmFyZ3Vt
ZW50KDApLCBvcHRpb25zLCBzdWNjZXNzKTsKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgfSk7CiAKQEAgLTM0MDAsNyAr
MzQwOSw3IEBAIHN0YXRpYyBib29sIHJ1bldpdGhTY3JpcHRzKEdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBWZWN0b3I8U2NyaXB0PiYgc2NyCiAgICAgICAgICAgICBzY29wZS5hc3Nl
cnROb0V4Y2VwdGlvbigpOwogICAgICAgICAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCiAg
ICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBldmFsdWF0aW9uRXhjZXB0aW9uLT52YWx1ZSgp
OwotICAgICAgICAgICAgY2hlY2tFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBpc0xhc3RGaWxlLCBl
dmFsdWF0aW9uRXhjZXB0aW9uLCByZXR1cm5WYWx1ZSwgdW5jYXVnaHRFeGNlcHRpb25OYW1lLCBh
bHdheXNEdW1wVW5jYXVnaHRFeGNlcHRpb24sIGR1bXAsIHN1Y2Nlc3MpOworICAgICAgICAgICAg
Y2hlY2tFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBpc0xhc3RGaWxlLCBldmFsdWF0aW9uRXhjZXB0
aW9uLCByZXR1cm5WYWx1ZSwgb3B0aW9ucywgc3VjY2Vzcyk7CiAgICAgICAgIH0KIAogICAgICAg
ICBzY3JpcHRCdWZmZXIuY2xlYXIoKTsKQEAgLTM1MDIsNiArMzUxMSw3IEBAIHN0YXRpYyBOT19S
RVRVUk4gdm9pZCBwcmludFVzYWdlU3RhdGVtZW50KGJvb2wgaGVscCA9IGZhbHNlKQogICAgIGZw
cmludGYoc3RkZXJyLCAiICAtLXN0cmljdC1maWxlPTxmaWxlPiAgICAgICBQYXJzZSB0aGUgZ2l2
ZW4gZmlsZSBhcyBpZiBpdCB3ZXJlIGluIHN0cmljdCBtb2RlICh0aGlzIG9wdGlvbiBtYXkgYmUg
cGFzc2VkIG1vcmUgdGhhbiBvbmNlKVxuIik7CiAgICAgZnByaW50ZihzdGRlcnIsICIgIC0tbW9k
dWxlLWZpbGU9PGZpbGU+ICAgICAgIFBhcnNlIGFuZCBldmFsdWF0ZSB0aGUgZ2l2ZW4gZmlsZSBh
cyBtb2R1bGUgKHRoaXMgb3B0aW9uIG1heSBiZSBwYXNzZWQgbW9yZSB0aGFuIG9uY2UpXG4iKTsK
ICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLS1leGNlcHRpb249PG5hbWU+ICAgICAgICAgQ2hlY2sg
dGhlIGxhc3Qgc2NyaXB0IGV4aXRzIHdpdGggYW4gdW5jYXVnaHQgZXhjZXB0aW9uIHdpdGggdGhl
IHNwZWNpZmllZCBuYW1lXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLS13YXRjaGRvZy1l
eGNlcHRpb24tb2sgICAgVW5jYXVnaHQgd2F0Y2hkb2cgZXhjZXB0aW9ucyBleGl0IHdpdGggc3Vj
Y2Vzc1xuIik7CiAgICAgZnByaW50ZihzdGRlcnIsICIgIC0tZHVtcEV4Y2VwdGlvbiAgICAgICAg
ICAgIER1bXAgdW5jYXVnaHQgZXhjZXB0aW9uIHRleHRcbiIpOwogICAgIGZwcmludGYoc3RkZXJy
LCAiICAtLW9wdGlvbnMgICAgICAgICAgICAgICAgICBEdW1wcyBhbGwgSlNDIFZNIG9wdGlvbnMg
YW5kIGV4aXRzXG4iKTsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLS1kdW1wT3B0aW9ucyAgICAg
ICAgICAgICAgRHVtcHMgYWxsIG5vbi1kZWZhdWx0IEpTQyBWTSBvcHRpb25zIGJlZm9yZSBjb250
aW51aW5nXG4iKTsKQEAgLTM2MzEsNiArMzY0MSwxMSBAQCB2b2lkIENvbW1hbmRMaW5lOjpwYXJz
ZUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQogCisgICAgICAgIGlmICghc3RyY21wKGFyZywgIi0td2F0Y2hkb2ctZXhjZXB0
aW9uLW9rIikpIHsKKyAgICAgICAgICAgIG1fdHJlYXRXYXRjaGRvZ0V4Y2VwdGlvbkFzU3VjY2Vz
cyA9IHRydWU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCiAgICAgICAgIC8v
IFNlZSBpZiB0aGUgLS0gb3B0aW9uIGlzIGEgSlNDIFZNIG9wdGlvbi4KICAgICAgICAgaWYgKHN0
cnN0cihhcmcsICItLSIpID09IGFyZykgewogICAgICAgICAgICAgaWYgKCFKU0M6Ok9wdGlvbnM6
OnNldE9wdGlvbigmYXJnWzJdKSkgewpAQCAtMzc3OCw3ICszNzkzLDcgQEAgaW50IGpzY21haW4o
aW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIHJlc3VsdCA9IHJ1bkpTQygKICAgICAgICAgb3B0
aW9ucywgZmFsc2UsCiAgICAgICAgIFsmXSAoVk0mLCBHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkgewotICAgICAgICAgICAgcmV0dXJuIHJ1bldpdGhTY3JpcHRzKGdsb2JhbE9iamVjdCwgb3B0
aW9ucy5tX3NjcmlwdHMsIG9wdGlvbnMubV91bmNhdWdodEV4Y2VwdGlvbk5hbWUsIG9wdGlvbnMu
bV9hbHdheXNEdW1wVW5jYXVnaHRFeGNlcHRpb24sIG9wdGlvbnMubV9kdW1wLCBvcHRpb25zLm1f
bW9kdWxlKTsKKyAgICAgICAgICAgIHJldHVybiBydW5XaXRoT3B0aW9ucyhnbG9iYWxPYmplY3Qs
IG9wdGlvbnMpOwogICAgICAgICB9KTsKIAogICAgIHByaW50U3VwZXJTYW1wbGVyU3RhdGUoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCmluZGV4IDMxZTJkYjQwYjIx
NmVhYTJiMTE0MjRiODAzZmI3ZjkxZGQ0ZTI2MWYuLmY4MzUxMmY0NTVmOTc1NDA4MTgzZDZkMzA4
MzQ0MTllZDg1NTc3YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNw
cApAQCAtMTU0LDEwICsxNTQsMTAgQEAgdm9pZCBKU0xvY2s6OmRpZEFjcXVpcmVMb2NrKCkKICAg
ICByZWdpc3RlclRocmVhZEZvck1hY2hFeGNlcHRpb25IYW5kbGluZygmVGhyZWFkOjpjdXJyZW50
KCkpOwogI2VuZGlmCiAKKyAgICAvLyBOb3RlOiBldmVyeXRoaW5nIGJlbG93IG11c3QgY29tZSBh
ZnRlciBhZGRDdXJyZW50VGhyZWFkKCkuCiAgICAgbV92bS0+dHJhcHMoKS5ub3RpZnlHcmFiQWxs
TG9ja3MoKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKLSAgICAvLyBOb3RlOiB0
aGlzIG11c3QgY29tZSBhZnRlciBhZGRDdXJyZW50VGhyZWFkKCkuCiAgICAgaWYgKFNhbXBsaW5n
UHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpCiAg
ICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPm5vdGljZUpTTG9ja0FjcXVpc2l0aW9uKCk7CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKaW5kZXggNDRkNTNl
YWZlYzUwMjVjNmZhZGY5YzYwNjQwMTBhZDY5NGFjOGY5ZS4uY2ZlZGY4Y2VhMWU0OTk5MjI4NWYy
MmFkMTk2NWMwNzJjMWEwNjNmZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk1UcmFwcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1U
cmFwcy5jcHAKQEAgLTcyLDgzICs3Miw3IEBAIGlubGluZSBzdGF0aWMgYm9vbCB2bUlzSW5hY3Rp
dmUoVk0mIHZtKQogICAgIHJldHVybiAhdm0uZW50cnlTY29wZSAmJiAhdm0ub3duZXJUaHJlYWQo
KTsKIH0KIAotc3RydWN0IFZNQW5kU3RhY2tCb3VuZHMgewotICAgIFZNKiB2bTsKLSAgICBTdGFj
a0JvdW5kcyBzdGFja0JvdW5kczsKLX07Ci0KLXN0YXRpYyBFeHBlY3RlZDxWTUFuZFN0YWNrQm91
bmRzLCBWTVRyYXBzOjpFcnJvcj4gZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoU2lnbmFsQ29u
dGV4dCYgY29udGV4dCkKLXsKLSAgICBWTUluc3BlY3RvciYgaW5zcGVjdG9yID0gVk1JbnNwZWN0
b3I6Omluc3RhbmNlKCk7Ci0gICAgYXV0byBsb2NrZXIgPSB0cnlIb2xkTG9jayhpbnNwZWN0b3Iu
Z2V0TG9jaygpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWxvY2tlcikpCi0gICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChWTVRyYXBzOjpFcnJvcjo6TG9ja1VuYXZhaWxhYmxlKTsKLSAgICAKLSAg
ICBWTSogYWN0aXZlVk0gPSBudWxscHRyOwotICAgIFN0YWNrQm91bmRzIHN0YWNrQm91bmRzID0g
U3RhY2tCb3VuZHM6OmVtcHR5Qm91bmRzKCk7Ci0gICAgdm9pZCogc3RhY2tQb2ludGVyID0gY29u
dGV4dC5zdGFja1BvaW50ZXI7Ci0gICAgYm9vbCB1bmFibGVUb0FjcXVpcmVNYWNoaW5lVGhyZWFk
c0xvY2sgPSBmYWxzZTsKLSAgICBpbnNwZWN0b3IuaXRlcmF0ZShsb2NrZXIsIFsmXSAoVk0mIHZt
KSB7Ci0gICAgICAgIGlmICh2bUlzSW5hY3RpdmUodm0pKQotICAgICAgICAgICAgcmV0dXJuIFZN
SW5zcGVjdG9yOjpGdW5jdG9yU3RhdHVzOjpDb250aW51ZTsKLQotICAgICAgICBhdXRvJiBtYWNo
aW5lVGhyZWFkcyA9IHZtLmhlYXAubWFjaGluZVRocmVhZHMoKTsKLSAgICAgICAgYXV0byBtYWNo
aW5lVGhyZWFkc0xvY2tlciA9IHRyeUhvbGRMb2NrKG1hY2hpbmVUaHJlYWRzLmdldExvY2soKSk7
Ci0gICAgICAgIGlmIChVTkxJS0VMWSghbWFjaGluZVRocmVhZHNMb2NrZXIpKSB7Ci0gICAgICAg
ICAgICB1bmFibGVUb0FjcXVpcmVNYWNoaW5lVGhyZWFkc0xvY2sgPSB0cnVlOwotICAgICAgICAg
ICAgcmV0dXJuIFZNSW5zcGVjdG9yOjpGdW5jdG9yU3RhdHVzOjpDb250aW51ZTsgLy8gVHJ5IG5l
eHQgVk0uCi0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBhdXRvJiB0aHJlYWRMaXN0ID0gbWFj
aGluZVRocmVhZHMudGhyZWFkc0xpc3RIZWFkKG1hY2hpbmVUaHJlYWRzTG9ja2VyKTsKLSAgICAg
ICAgZm9yIChNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZCogdGhyZWFkID0gdGhyZWFkTGlz
dC5oZWFkKCk7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KCkpIHsKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHRocmVhZC0+c3RhY2tCYXNlKCkpOwotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQodGhyZWFkLT5zdGFja0VuZCgpKTsKLSAgICAgICAgICAgIGlmIChzdGFja1BvaW50
ZXIgPD0gdGhyZWFkLT5zdGFja0Jhc2UoKSAmJiBzdGFja1BvaW50ZXIgPj0gdGhyZWFkLT5zdGFj
a0VuZCgpKSB7Ci0gICAgICAgICAgICAgICAgYWN0aXZlVk0gPSAmdm07Ci0gICAgICAgICAgICAg
ICAgc3RhY2tCb3VuZHMgPSBTdGFja0JvdW5kcyh0aHJlYWQtPnN0YWNrQmFzZSgpLCB0aHJlYWQt
PnN0YWNrRW5kKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBWTUluc3BlY3Rvcjo6RnVuY3Rv
clN0YXR1czo6RG9uZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
Vk1JbnNwZWN0b3I6OkZ1bmN0b3JTdGF0dXM6OkNvbnRpbnVlOwotICAgIH0pOwotCi0gICAgaWYg
KCFhY3RpdmVWTSAmJiB1bmFibGVUb0FjcXVpcmVNYWNoaW5lVGhyZWFkc0xvY2spCi0gICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChWTVRyYXBzOjpFcnJvcjo6TG9ja1VuYXZhaWxhYmxlKTsK
LSAgICByZXR1cm4gVk1BbmRTdGFja0JvdW5kcyB7IGFjdGl2ZVZNLCBzdGFja0JvdW5kcyB9Owot
fQotCi1zdGF0aWMgdm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcigpCi17Ci0gICAgaW5zdGFsbFNp
Z25hbEhhbmRsZXIoU2lnbmFsOjpCYWRBY2Nlc3MsIFtdIChTaWduYWwsIFNpZ0luZm8mLCBQbGF0
Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzKSAtPiBTaWduYWxBY3Rpb24gewotICAgICAgICBTaWdu
YWxDb250ZXh0IGNvbnRleHQocmVnaXN0ZXJzKTsKLQotICAgICAgICBpZiAoIWlzSklUUEMoY29u
dGV4dC50cmFwUEMpKQotICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxl
ZDsKLQotICAgICAgICAvLyBGSVhNRTogVGhpcyBjdXJyZW50bHkgZWF0cyBhbGwgdHJhcHMgaW5j
bHVkaW5nIGppdCBhc3NlcnRzIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhpcwotICAgICAgICAvLyBh
bHdheXMgd29ya3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzEw
MzkKLSAgICAgICAgYXV0byBhY3RpdmVWTUFuZFN0YWNrQm91bmRzID0gZmluZEFjdGl2ZVZNQW5k
U3RhY2tCb3VuZHMoY29udGV4dCk7Ci0gICAgICAgIGlmICghYWN0aXZlVk1BbmRTdGFja0JvdW5k
cykKLSAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246OkhhbmRsZWQ7IC8vIExldCB0aGUg
U2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRlci4KLQotICAgICAgICBWTSogdm0gPSBhY3RpdmVW
TUFuZFN0YWNrQm91bmRzLnZhbHVlKCkudm07Ci0gICAgICAgIGlmICh2bSkgewotICAgICAgICAg
ICAgVk1UcmFwcyYgdHJhcHMgPSB2bS0+dHJhcHMoKTsKLSAgICAgICAgICAgIGlmICghdHJhcHMu
bmVlZFRyYXBIYW5kbGluZygpKQotICAgICAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246
OkhhbmRsZWQ7IC8vIFRoZSBwb2xsaW5nIGNvZGUgYmVhdCB1cyB0byBoYW5kbGluZyB0aGUgdHJh
cCBhbHJlYWR5LgotCi0gICAgICAgICAgICBhdXRvIGV4cGVjdGVkU3VjY2VzcyA9IHRyYXBzLnRy
eUpldHRpc29uQ29kZUJsb2Nrc09uU3RhY2soY29udGV4dCk7Ci0gICAgICAgICAgICBpZiAoIWV4
cGVjdGVkU3VjY2VzcykKLSAgICAgICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpIYW5k
bGVkOyAvLyBMZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkgYWdhaW4gbGF0ZXIuCi0gICAgICAgICAg
ICBpZiAoZXhwZWN0ZWRTdWNjZXNzLnZhbHVlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNp
Z25hbEFjdGlvbjo6SGFuZGxlZDsgLy8gV2UndmUgc3VjY2VzcyBqZXR0aXNvbiB0aGUgY29kZUJs
b2Nrcy4KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246OkhhbmRsZWQ7
Ci0gICAgfSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgc3RhdGljIENhbGxGcmFtZSogc2FuaXRpemVk
VG9wQ2FsbEZyYW1lKENhbGxGcmFtZSogdG9wQ2FsbEZyYW1lKQoraW5saW5lIENhbGxGcmFtZSog
c2FuaXRpemVkVG9wQ2FsbEZyYW1lKENhbGxGcmFtZSogdG9wQ2FsbEZyYW1lKQogewogI2lmICFk
ZWZpbmVkKE5ERUJVRykgJiYgIUNQVShBUk0pICYmICFDUFUoTUlQUykKICAgICAvLyBwcmVwYXJl
Rm9yRXh0ZXJuYWxDYWxsKCkgaW4gREZHU3BlY3VsYXRpdmVKSVQuaCBtYXkgc2V0IHRvcENhbGxG
cmFtZSB0byBhIGJhZCB3b3JkCkBAIC0xODMsMjggKzEwNywxNyBAQCB2b2lkIFZNVHJhcHM6OnRy
eUluc3RhbGxUcmFwQnJlYWtwb2ludHMoU2lnbmFsQ29udGV4dCYgY29udGV4dCwgU3RhY2tCb3Vu
ZHMgc3RhYwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSByZWludGVycHJldF9jYXN0PENh
bGxGcmFtZSo+KGNvbnRleHQuZnJhbWVQb2ludGVyKTsKIAotICAgIGF1dG8gY29kZUJsb2NrU2V0
TG9ja2VyID0gdHJ5SG9sZExvY2sodm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5nZXRMb2NrKCkpOwor
ICAgIGF1dG8mIGxvY2sgPSB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmdldExvY2soKTsKKyAgICAv
LyBJZiB0aGUgdGFyZ2V0IHRocmVhZCBpcyBpbiBDKysgY29kZSBpdCBtaWdodCBiZSBob2xkaW5n
IHRoZSBjb2RlQmxvY2tTZXQgbG9jay4KKyAgICAvLyBpZiBpdCdzIGluIEpJVCBjb2RlIHRoZW4g
aXQgY2Fubm90IGJlIGhvbGRpbmcgdGhhdCBsb2NrIGJ1dCB0aGUgR0MgbWlnaHQgYmUuCisgICAg
YXV0byBjb2RlQmxvY2tTZXRMb2NrZXIgPSBpc0pJVFBDKHRyYXBQQykgPyBob2xkTG9jayhsb2Nr
KSA6IHRyeUhvbGRMb2NrKGxvY2spOwogICAgIGlmICghY29kZUJsb2NrU2V0TG9ja2VyKQogICAg
ICAgICByZXR1cm47IC8vIExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRlci4KIAot
ICAgIHsKLSAgICAgICAgYXV0byYgYWxsb2NhdG9yID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2lu
Z2xldG9uKCk7Ci0gICAgICAgIGF1dG8gYWxsb2NhdG9yTG9ja2VyID0gdHJ5SG9sZExvY2soYWxs
b2NhdG9yLmdldExvY2soKSk7Ci0gICAgICAgIGlmICghYWxsb2NhdG9yTG9ja2VyKQotICAgICAg
ICAgICAgcmV0dXJuOyAvLyBMZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkgYWdhaW4gbGF0ZXIuCi0K
LSAgICAgICAgaWYgKGFsbG9jYXRvci5pc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShhbGxvY2F0b3JM
b2NrZXIsIHRyYXBQQykpIHsKLSAgICAgICAgICAgIGlmICh2bS5pc0V4ZWN1dGluZ0luUmVnRXhw
SklUKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGlzIGJlY2F1c2UgYSBy
ZWdFeHBKSVQgZnJhbWUgaXNuJ3QgYSBKUyBmcmFtZS4KLSAgICAgICAgICAgICAgICBjYWxsRnJh
bWUgPSBzYW5pdGl6ZWRUb3BDYWxsRnJhbWUodm0udG9wQ2FsbEZyYW1lKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIGlmIChMTEludDo6aXNMTEludFBDKHRyYXBQQykpIHsKLSAgICAg
ICAgICAgIC8vIFRoZSBmcmFtZVBvaW50ZXIgcHJvYmFibHkgaGFzIHRoZSBjYWxsRnJhbWUuIFdl
J3JlIGdvb2QgdG8gZ28uCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSByZXNv
cnQgdG8gdG9wQ2FsbEZyYW1lIHRvIHNlZSBpZiB3ZSBjYW4gZ2V0IGFueXRoaW5nCi0gICAgICAg
ICAgICAvLyB1c2VmdWwuIFdlIHVzdWFsbHkgZ2V0IGhlcmUgd2hlbiB3ZSdyZSBleGVjdXRpbmcg
QyBjb2RlLgotICAgICAgICAgICAgY2FsbEZyYW1lID0gc2FuaXRpemVkVG9wQ2FsbEZyYW1lKHZt
LnRvcENhbGxGcmFtZSk7Ci0gICAgICAgIH0KKyAgICBpZiAoIWlzSklUUEModHJhcFBDKSAmJiAh
TExJbnQ6OmlzTExJbnRQQyh0cmFwUEMpKSB7CisgICAgICAgIC8vIFdlIHJlc29ydCB0byB0b3BD
YWxsRnJhbWUgdG8gc2VlIGlmIHdlIGNhbiBnZXQgYW55dGhpbmcKKyAgICAgICAgLy8gdXNlZnVs
LiBXZSB1c3VhbGx5IGdldCBoZXJlIHdoZW4gd2UncmUgZXhlY3V0aW5nIEMgY29kZS4KKyAgICAg
ICAgY2FsbEZyYW1lID0gc2FuaXRpemVkVG9wQ2FsbEZyYW1lKHZtLnRvcENhbGxGcmFtZSk7CiAg
ICAgfQogCiAgICAgQ29kZUJsb2NrKiBmb3VuZENvZGVCbG9jayA9IG51bGxwdHI7CkBAIC0yNDAs
NyArMTUzLDcgQEAgdm9pZCBWTVRyYXBzOjp0cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKFNpZ25h
bENvbnRleHQmIGNvbnRleHQsIFN0YWNrQm91bmRzIHN0YWMKICAgICB9CiAKICAgICBpZiAoSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGZvdW5kQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7Ci0gICAg
ICAgIGF1dG8gbG9ja2VyID0gdHJ5SG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgYXV0byBsb2Nr
ZXIgPSB0cnlIb2xkTG9jaygqbV9sb2NrKTsKICAgICAgICAgaWYgKCFsb2NrZXIpCiAgICAgICAg
ICAgICByZXR1cm47IC8vIExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRlci4KIApA
QCAtMjUwLDQ1ICsxNjMsNiBAQCB2b2lkIFZNVHJhcHM6OnRyeUluc3RhbGxUcmFwQnJlYWtwb2lu
dHMoU2lnbmFsQ29udGV4dCYgY29udGV4dCwgU3RhY2tCb3VuZHMgc3RhYwogICAgIH0KIH0KIAot
YXV0byBWTVRyYXBzOjp0cnlKZXR0aXNvbkNvZGVCbG9ja3NPblN0YWNrKFNpZ25hbENvbnRleHQm
IGNvbnRleHQpIC0+IEV4cGVjdGVkPGJvb2wsIEVycm9yPgotewotICAgIFZNJiB2bSA9IHRoaXMt
PnZtKCk7Ci0gICAgYXV0byBjb2RlQmxvY2tTZXRMb2NrZXIgPSB0cnlIb2xkTG9jayh2bS5oZWFw
LmNvZGVCbG9ja1NldCgpLmdldExvY2soKSk7Ci0gICAgaWYgKCFjb2RlQmxvY2tTZXRMb2NrZXIp
Ci0gICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcjo6TG9ja1VuYXZhaWxhYmxlKTsK
LQotICAgIENhbGxGcmFtZSogdG9wQ2FsbEZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxDYWxsRnJh
bWUqPihjb250ZXh0LmZyYW1lUG9pbnRlcik7Ci0gICAgdm9pZCogdHJhcFBDID0gY29udGV4dC50
cmFwUEM7Ci0gICAgYm9vbCB0cmFwUENJc1ZNVHJhcCA9IGZhbHNlOwotICAgIAotICAgIHZtLmhl
YXAuZm9yRWFjaENvZGVCbG9ja0lnbm9yaW5nSklUUGxhbnMoY29kZUJsb2NrU2V0TG9ja2VyLCBb
Jl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7Ci0gICAgICAgIGlmICghY29kZUJsb2NrLT5oYXNJ
bnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBOb3QgZm91bmQgeWV0LgotCi0gICAgICAgIEpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2st
PmppdENvZGUoKS5nZXQoKTsKLSAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChqaXRDb2RlLT5qaXRUeXBlKCkpKTsKLSAgICAgICAgaWYgKGppdENvZGUtPmRmZ0NvbW1vbigp
LT5pc1ZNVHJhcEJyZWFrcG9pbnQodHJhcFBDKSkgewotICAgICAgICAgICAgdHJhcFBDSXNWTVRy
YXAgPSB0cnVlOwotICAgICAgICAgICAgLy8gQXQgdGhlIGNvZGVCbG9jayB0cmFwIHBvaW50LCB3
ZSdyZSBndWFyYW50ZWVkIHRoYXQ6Ci0gICAgICAgICAgICAvLyAxLiB0aGUgcGMgaXMgbm90IGlu
IHRoZSBtaWRkbGUgb2YgYW55IHJhbmdlIG9mIEpJVCBjb2RlIHdoaWNoIGludmFsaWRhdGlvbiBw
b2ludHMKLSAgICAgICAgICAgIC8vICAgIG1heSB3cml0ZSBvdmVyLiBIZW5jZSwgaXQncyBub3cg
c2FmZSB0byBwYXRjaCB0aG9zZSBpbnZhbGlkYXRpb24gcG9pbnRzIGFuZAotICAgICAgICAgICAg
Ly8gICAgamV0dGlzb24gdGhlIGNvZGVCbG9ja3MuCi0gICAgICAgICAgICAvLyAyLiBUaGUgdG9w
IGZyYW1lIG11c3QgYmUgYW4gb3B0aW1pemVkIEpTIGZyYW1lLgotICAgICAgICAgICAgQVNTRVJU
KGNvZGVCbG9jayA9PSB0b3BDYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKLSAgICAgICAgICAgIGNv
ZGVCbG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9WTVRyYXBzKTsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBOb3QgZm91bmQgeWV0LgotICAgIH0pOwotCi0gICAgaWYgKCF0cmFwUENJc1ZNVHJhcCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW52YWxpZGF0ZUNvZGVCbG9ja3NPblN0YWNrKGNv
ZGVCbG9ja1NldExvY2tlciwgdG9wQ2FsbEZyYW1lKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQog
dm9pZCBWTVRyYXBzOjppbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhY2soKQogewogICAgIGludmFs
aWRhdGVDb2RlQmxvY2tzT25TdGFjayh2bSgpLnRvcENhbGxGcmFtZSk7CkBAIC0zMjEsMTA1ICsx
OTUsMTM1IEBAIHZvaWQgVk1UcmFwczo6aW52YWxpZGF0ZUNvZGVCbG9ja3NPblN0YWNrKExvY2tl
cjxMb2NrPiYsIEV4ZWNTdGF0ZSogdG9wQ2FsbEZyYW1lCiAgICAgfQogfQogCi0jZW5kaWYgLy8g
RU5BQkxFKFNJR05BTF9CQVNFRF9WTV9UUkFQUykKLQotdm9pZCBWTVRyYXBzOjp3aWxsRGVzdHJv
eVZNKCkKLXsKLSAgICBtX2lzU2h1dHRpbmdEb3duID0gdHJ1ZTsKLSAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOwotI2lmIEVOQUJMRShTSUdOQUxfQkFTRURfVk1fVFJBUFMpCi0gICAgd2hpbGUg
KCFtX3NpZ25hbFNlbmRlcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFJlZlB0cjxTaWduYWxTZW5k
ZXI+IHNlbmRlcjsKLSAgICAgICAgewotICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBi
ZSBob2xkaW5nIHRoZSBWTVRyYXBzIGxvY2sgd2hlbiBjYWxsaW5nCi0gICAgICAgICAgICAvLyBT
aWduYWxTZW5kZXI6OndpbGxEZXN0cm95Vk0oKSBiZWNhdXNlIFNpZ25hbFNlbmRlcjo6d2lsbERl
c3Ryb3lWTSgpCi0gICAgICAgICAgICAvLyB3aWxsIGFjcXVpcmUgdGhlIFNpZ25hbFNlbmRlciBs
b2NrLCBhbmQgU2lnbmFsU2VuZGVyOjpzZW5kKCkgbmVlZHMKLSAgICAgICAgICAgIC8vIHRvIGFj
cXVpcmUgdGhlc2UgbG9ja3MgaW4gdGhlIG9wcG9zaXRlIG9yZGVyLgotICAgICAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAgICAgICAgICAgc2VuZGVyID0gbV9zaWdu
YWxTZW5kZXJzLnRha2VBbnkoKTsKLSAgICAgICAgICAgIGlmICghc2VuZGVyKQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHNlbmRlci0+d2lsbERlc3Ryb3lWTSgp
OworY2xhc3MgVk1UcmFwczo6U2lnbmFsU2VuZGVyIGZpbmFsIDogcHVibGljIEF1dG9tYXRpY1Ro
cmVhZCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEF1dG9tYXRpY1RocmVhZDsKKyAgICBT
aWduYWxTZW5kZXIoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgVk0mIHZtKQorICAgICAg
ICA6IEJhc2UobG9ja2VyLCB2bS50cmFwcygpLm1fbG9jaywgdm0udHJhcHMoKS5tX3RyYXBTZXQp
CisgICAgICAgICwgbV92bSh2bSkKKyAgICB7CisgICAgICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxh
ZyBvbmNlOworICAgICAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7CisgICAgICAgICAgICBp
bnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OkJhZEFjY2VzcywgW10gKFNpZ25hbCwgU2lnSW5m
byYsIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpIC0+IFNpZ25hbEFjdGlvbiB7CisgICAg
ICAgICAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHJlZ2lzdGVycyk7CisKKyAgICAgICAg
ICAgICAgICBpZiAoIWlzSklUUEMoY29udGV4dC50cmFwUEMpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gU2lnbmFsQWN0aW9uOjpOb3RIYW5kbGVkOworCisgICAgICAgICAgICAgICAgQ29k
ZUJsb2NrKiBjdXJyZW50Q29kZUJsb2NrID0gREZHOjpjb2RlQmxvY2tGb3JWTVRyYXBQQyhjb250
ZXh0LnRyYXBQQyk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRDb2RlQmxvY2stPmhh
c0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkpOworICAgICAgICAgICAgICAgIFZNJiB2bSA9
ICpjdXJyZW50Q29kZUJsb2NrLT52bSgpOworICAgICAgICAgICAgICAgIEFTU0VSVCh2bS50cmFw
cygpLm5lZWRUcmFwSGFuZGxpbmcoKSk7IC8vIFdlIHNob3VsZCBoYXZlIGFscmVhZHkgamV0dGlz
b25lZCB0aGlzIGNvZGUgYmxvY2sgd2hlbiB3ZSBoYW5kbGVkIHRoZSB0cmFwLgorCisgICAgICAg
ICAgICAgICAgLy8gV2UgYXJlIGluIEpJVCBjb2RlIHNvIGl0J3Mgc2FmZSB0byBhcXVpcmUgdGhp
cyBsb2NrLgorICAgICAgICAgICAgICAgIGF1dG8gY29kZUJsb2NrU2V0TG9ja2VyID0gaG9sZExv
Y2sodm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5nZXRMb2NrKCkpOworICAgICAgICAgICAgICAgIGJv
b2wgc2F3Q3VycmVudENvZGVCbG9jayA9IGZhbHNlOworICAgICAgICAgICAgICAgIHZtLmhlYXAu
Zm9yRWFjaENvZGVCbG9ja0lnbm9yaW5nSklUUGxhbnMoY29kZUJsb2NrU2V0TG9ja2VyLCBbJl0g
KENvZGVCbG9jayogY29kZUJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIHdhbnQg
dG8gamV0dGlzb24gYWxsIGNvZGUgYmxvY2tzIHRoYXQgaGF2ZSB2bSB0cmFwcyBicmVha3BvaW50
cywgb3RoZXJ3aXNlIHdlIGNvdWxkIGhpdCB0aGVtIGxhdGVyLgorICAgICAgICAgICAgICAgICAg
ICBpZiAoY29kZUJsb2NrLT5oYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudENvZGVCbG9jayA9PSBjb2RlQmxvY2spCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F3Q3VycmVudENvZGVCbG9jayA9IHRydWU7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jay0+amV0dGlzb24oUHJvZmlsZXI6Okpl
dHRpc29uRHVlVG9WTVRyYXBzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoc2F3Q3VycmVudENvZGVCbG9jayk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6SGFuZGxlZDsgLy8gV2UndmUg
c3VjY2Vzc2Z1bGx5IGpldHRpc29uZWQgdGhlIGNvZGVCbG9ja3MuCisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfSk7CiAgICAgfQotICAgIEFTU0VSVChtX3NpZ25hbFNlbmRlcnMuaXNFbXB0eSgp
KTsKLSNlbmRpZgotfQogCi0jaWYgRU5BQkxFKFNJR05BTF9CQVNFRF9WTV9UUkFQUykKLXZvaWQg
Vk1UcmFwczo6YWRkU2lnbmFsU2VuZGVyKFZNVHJhcHM6OlNpZ25hbFNlbmRlciogc2VuZGVyKQot
ewotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICBtX3NpZ25hbFNlbmRl
cnMuYWRkKHNlbmRlcik7Ci19CisgICAgVk1UcmFwcyYgdHJhcHMoKSB7IHJldHVybiBtX3ZtLnRy
YXBzKCk7IH0KIAotdm9pZCBWTVRyYXBzOjpyZW1vdmVTaWduYWxTZW5kZXIoVk1UcmFwczo6U2ln
bmFsU2VuZGVyKiBzZW5kZXIpCi17Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OwotICAgIG1fc2lnbmFsU2VuZGVycy5yZW1vdmUoc2VuZGVyKTsKLX0KK3Byb3RlY3RlZDoKKyAg
ICBQb2xsUmVzdWx0IHBvbGwoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgaWYgKHRyYXBzKCkubV9pc1NodXR0aW5nRG93bikKKyAgICAgICAgICAgIHJldHVy
biBQb2xsUmVzdWx0OjpTdG9wOwogCi12b2lkIFZNVHJhcHM6OlNpZ25hbFNlbmRlcjo6d2lsbERl
c3Ryb3lWTSgpCi17Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAgIG1f
dm0gPSBudWxscHRyOwotfQorICAgICAgICBpZiAoIXRyYXBzKCkubmVlZFRyYXBIYW5kbGluZygp
KQorICAgICAgICAgICAgcmV0dXJuIFBvbGxSZXN1bHQ6OldhaXQ7CiAKLXZvaWQgVk1UcmFwczo6
U2lnbmFsU2VuZGVyOjpzZW5kKCkKLXsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsK
LSAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7Ci0gICAgICAgIGluc3RhbGxTaWduYWxIYW5k
bGVyKCk7Ci0gICAgfSk7CisgICAgICAgIC8vIFdlIGtub3cgdGhhdCBubyB0cmFwIGNvdWxkIGhh
dmUgYmVlbiBwcm9jZXNzZWQgYW5kIHJlLWFkZGVkIGJlY2F1c2Ugd2UgYXJlIGhvbGRpbmcgdGhl
IGxvY2suCisgICAgICAgIGlmICh2bUlzSW5hY3RpdmUobV92bSkpCisgICAgICAgICAgICByZXR1
cm4gUG9sbFJlc3VsdDo6V2FpdDsKKyAgICAgICAgcmV0dXJuIFBvbGxSZXN1bHQ6Oldvcms7Cisg
ICAgfQorCisgICAgV29ya1Jlc3VsdCB3b3JrKCkgb3ZlcnJpZGUKKyAgICB7CiAKLSAgICB3aGls
ZSAodHJ1ZSkgewogICAgICAgICAvLyBXZSBuZWVkIGEgbmVzdGVkIHNjb3BlIHNvIHRoYXQgd2Un
bGwgcmVsZWFzZSB0aGUgbG9jayBiZWZvcmUgd2Ugc2xlZXAgYmVsb3cuCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAgIGlm
ICghbV92bSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgVk0mIHZtID0g
Km1fdm07Ci0gICAgICAgICAgICBhdXRvIG9wdGlvbmFsT3duZXJUaHJlYWQgPSB2bS5vd25lclRo
cmVhZCgpOwotICAgICAgICAgICAgaWYgKG9wdGlvbmFsT3duZXJUaHJlYWQpIHsKLSAgICAgICAg
ICAgICAgICBzZW5kTWVzc2FnZSgqb3B0aW9uYWxPd25lclRocmVhZC52YWx1ZSgpLmdldCgpLCBb
XSAoUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykgLT4gdm9pZCB7Ci0gICAgICAgICAgICAg
ICAgICAgIFNpZ25hbENvbnRleHQgY29udGV4dChyZWdpc3RlcnMpOwotICAgICAgICAgICAgICAg
ICAgICBhdXRvIGFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMgPSBmaW5kQWN0aXZlVk1BbmRTdGFja0Jv
dW5kcyhjb250ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZVZNQW5kU3RhY2tC
b3VuZHMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZNKiB2bSA9IGFjdGl2ZVZNQW5kU3Rh
Y2tCb3VuZHMudmFsdWUoKS52bTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2bSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQm91bmRzIHN0YWNrQm91bmRzID0gYWN0
aXZlVk1BbmRTdGFja0JvdW5kcy52YWx1ZSgpLnN0YWNrQm91bmRzOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFZNVHJhcHMmIHRyYXBzID0gdm0tPnRyYXBzKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHRyYXBzLm5lZWRUcmFwSGFuZGxpbmcoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHJhcHMudHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyhjb250
ZXh0LCBzdGFja0JvdW5kcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIFZN
JiB2bSA9IG1fdm07CisKKyAgICAgICAgYXV0byBvcHRpb25hbE93bmVyVGhyZWFkID0gdm0ub3du
ZXJUaHJlYWQoKTsKKyAgICAgICAgaWYgKG9wdGlvbmFsT3duZXJUaHJlYWQpIHsKKyAgICAgICAg
ICAgIHNlbmRNZXNzYWdlKCpvcHRpb25hbE93bmVyVGhyZWFkLnZhbHVlKCkuZ2V0KCksIFsmXSAo
UGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykgLT4gdm9pZCB7CisgICAgICAgICAgICAgICAg
U2lnbmFsQ29udGV4dCBjb250ZXh0KHJlZ2lzdGVycyk7CisKKyAgICAgICAgICAgICAgICBhdXRv
IG93bmVyVGhyZWFkID0gdm0uYXBpTG9jaygpLm93bmVyVGhyZWFkKCk7CisgICAgICAgICAgICAg
ICAgLy8gV2UgY2FuJ3QgbWVzcyB3aXRoIGEgdGhyZWFkIHVubGVzcyBpdCdzIHRoZSBvbmUgd2Ug
c3VzcGVuZGVkLgorICAgICAgICAgICAgICAgIGlmICghb3duZXJUaHJlYWQgfHwgb3duZXJUaHJl
YWQgIT0gb3B0aW9uYWxPd25lclRocmVhZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgICAgICAgICAgVGhyZWFkJiB0aHJlYWQgPSAqb3duZXJUaHJlYWQtPmdldCgpOwor
ICAgICAgICAgICAgICAgIFN0YWNrQm91bmRzIHN0YWNrQm91bmRzID0gU3RhY2tCb3VuZHM6OmVt
cHR5Qm91bmRzKCk7CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogV2UgbmVlZCB0byB1c2UgdGhlIG1hY2hpbmUgdGhyZWFkcyBiZWNhdXNlIGl0IGlzIHRo
ZSBvbmx5IG5vbi1UTFMgc291cmNlCisgICAgICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgc3Rh
Y2sgYm91bmRzIG9mIHRoaXMgdGhyZWFkLiBXZSBzaG91bGQga2VlcCBpbiBvbiB0aGUgV1RGOjpU
aHJlYWQgaW5zdGVhZC4KKyAgICAgICAgICAgICAgICAgICAgTWFjaGluZVRocmVhZHMmIG1hY2hp
bmVUaHJlYWRzID0gdm0uaGVhcC5tYWNoaW5lVGhyZWFkcygpOworICAgICAgICAgICAgICAgICAg
ICBhdXRvIG1hY2hpbmVUaHJlYWRzTG9jayA9IHRyeUhvbGRMb2NrKG1hY2hpbmVUaHJlYWRzLmdl
dExvY2soKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghbWFjaGluZVRocmVhZHNMb2NrKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBUcnkgYWdhaW4gbGF0ZXIuCisKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byYgdGhyZWFkTGlzdCA9IG1hY2hpbmVUaHJlYWRzLnRocmVh
ZHNMaXN0SGVhZChtYWNoaW5lVGhyZWFkc0xvY2spOworICAgICAgICAgICAgICAgICAgICBmb3Ig
KE1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkKiBtYWNoaW5lVGhyZWFkID0gdGhyZWFkTGlz
dC5oZWFkKCk7IG1hY2hpbmVUaHJlYWQ7IG1hY2hpbmVUaHJlYWQgPSBtYWNoaW5lVGhyZWFkLT5u
ZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYWNoaW5lVGhyZWFkLT5tX3Ro
cmVhZC5nZXQoKSA9PSB0aHJlYWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tC
b3VuZHMgPSBTdGFja0JvdW5kcyhtYWNoaW5lVGhyZWFkLT5zdGFja0Jhc2UoKSwgbWFjaGluZVRo
cmVhZC0+c3RhY2tFbmQoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKHZtSXNJbmFjdGl2ZSh2bSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFzdGFja0JvdW5kcy5pc0VtcHR5KCkpOworICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgVk1UcmFwczo6TWFzayBtYXNrKG1fZXZlbnRU
eXBlKTsKLSAgICAgICAgICAgIGlmICghdm0ubmVlZFRyYXBIYW5kbGluZyhtYXNrKSkKLSAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB2bS50cmFwcygpLnRyeUluc3RhbGxU
cmFwQnJlYWtwb2ludHMoY29udGV4dCwgc3RhY2tCb3VuZHMpOworICAgICAgICAgICAgfSk7CiAg
ICAgICAgIH0KLQorICAgICAgICAKICAgICAgICAgc2xlZXBNUygxKTsKKyAgICAgICAgcmV0dXJu
IFdvcmtSZXN1bHQ6OkNvbnRpbnVlOwogICAgIH0KKyAgICAKK3ByaXZhdGU6CisKKyAgICBWTSYg
bV92bTsKK307CiAKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgaWYg
KG1fdm0pCi0gICAgICAgIG1fdm0tPnRyYXBzKCkucmVtb3ZlU2lnbmFsU2VuZGVyKHRoaXMpOwot
fQogI2VuZGlmIC8vIEVOQUJMRShTSUdOQUxfQkFTRURfVk1fVFJBUFMpCiAKK3ZvaWQgVk1UcmFw
czo6d2lsbERlc3Ryb3lWTSgpCit7CisgICAgbV9pc1NodXR0aW5nRG93biA9IHRydWU7CisgICAg
V1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyNpZiBFTkFCTEUoU0lHTkFMX0JBU0VEX1ZNX1RSQVBT
KQorICAgIGlmIChtX3NpZ25hbFNlbmRlcikgeworICAgICAgICB7CisgICAgICAgICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKCptX2xvY2spOworICAgICAgICAgICAgaWYgKCFtX3NpZ25hbFNl
bmRlci0+dHJ5U3RvcChsb2NrZXIpKQorICAgICAgICAgICAgICAgIG1fdHJhcFNldC0+bm90aWZ5
QWxsKGxvY2tlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpCisg
ICAgICAgICAgICBtX3NpZ25hbFNlbmRlci0+am9pbigpOworICAgICAgICBtX3NpZ25hbFNlbmRl
ciA9IG51bGxwdHI7CisgICAgfQorI2VuZGlmCit9CisKIHZvaWQgVk1UcmFwczo6ZmlyZVRyYXAo
Vk1UcmFwczo6RXZlbnRUeXBlIGV2ZW50VHlwZSkKIHsKICAgICBBU1NFUlQoIXZtKCkuY3VycmVu
dFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAgewotICAgICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soKm1fbG9j
ayk7CiAgICAgICAgIEFTU0VSVCghbV9pc1NodXR0aW5nRG93bik7CiAgICAgICAgIHNldFRyYXBG
b3JFdmVudChsb2NrZXIsIGV2ZW50VHlwZSk7CiAgICAgICAgIG1fbmVlZFRvSW52YWxpZGF0ZWRD
b2RlQmxvY2tzID0gdHJ1ZTsKQEAgLTQzMCwxMSArMzM0LDEwIEBAIHZvaWQgVk1UcmFwczo6Zmly
ZVRyYXAoVk1UcmFwczo6RXZlbnRUeXBlIGV2ZW50VHlwZSkKICAgICAgICAgLy8gc2VuZFNpZ25h
bCgpIGNhbiBsb29wIHVudGlsIGl0IGhhcyBjb25maXJtYXRpb24gdGhhdCB0aGUgbXV0YXRvciB0
aHJlYWQKICAgICAgICAgLy8gaGFzIHJlY2VpdmVkIHRoZSB0cmFwIHJlcXVlc3QuIFdlJ2xsIGNh
bGwgaXQgZnJvbSBhbm90aGVyIHRyYXAgc28gdGhhdAogICAgICAgICAvLyBmaXJlVHJhcCgpIGRv
ZXMgbm90IGJsb2NrLgotICAgICAgICBSZWZQdHI8U2lnbmFsU2VuZGVyPiBzZW5kZXIgPSBhZG9w
dFJlZihuZXcgU2lnbmFsU2VuZGVyKHZtKCksIGV2ZW50VHlwZSkpOwotICAgICAgICBhZGRTaWdu
YWxTZW5kZXIoc2VuZGVyLmdldCgpKTsKLSAgICAgICAgVGhyZWFkOjpjcmVhdGUoImpzYy52bXRy
YXBzLnNpZ25hbGxpbmcudGhyZWFkIiwgW3NlbmRlcl0gewotICAgICAgICAgICAgc2VuZGVyLT5z
ZW5kKCk7Ci0gICAgICAgIH0pOworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKCptX2xv
Y2spOworICAgICAgICBpZiAoIW1fc2lnbmFsU2VuZGVyKQorICAgICAgICAgICAgbV9zaWduYWxT
ZW5kZXIgPSBhZG9wdFJlZihuZXcgU2lnbmFsU2VuZGVyKGxvY2tlciwgdm0oKSkpOworICAgICAg
ICBtX3RyYXBTZXQtPm5vdGlmeUFsbChsb2NrZXIpOwogICAgIH0KICNlbmRpZgogfQpAQCAtNDQ0
LDYgKzM0NywxNiBAQCB2b2lkIFZNVHJhcHM6OmhhbmRsZVRyYXBzKEV4ZWNTdGF0ZSogZXhlYywg
Vk1UcmFwczo6TWFzayBtYXNrKQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCisgICAgeworICAgICAgICBhdXRvIGNv
ZGVCbG9ja1NldExvY2tlciA9IGhvbGRMb2NrKHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuZ2V0TG9j
aygpKTsKKyAgICAgICAgdm0uaGVhcC5mb3JFYWNoQ29kZUJsb2NrSWdub3JpbmdKSVRQbGFucyhj
b2RlQmxvY2tTZXRMb2NrZXIsIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKKyAgICAgICAg
ICAgIC8vIFdlIHdhbnQgdG8gamV0dGlzb24gYWxsIGNvZGUgYmxvY2tzIHRoYXQgaGF2ZSB2bSB0
cmFwcyBicmVha3BvaW50cywgb3RoZXJ3aXNlIHdlIGNvdWxkIGhpdCB0aGVtIGxhdGVyLgorICAg
ICAgICAgICAgaWYgKGNvZGVCbG9jay0+aGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSkK
KyAgICAgICAgICAgICAgICBjb2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1
ZVRvVk1UcmFwcyk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0pOworICAg
IH0KKwogICAgIEFTU0VSVChuZWVkVHJhcEhhbmRsaW5nKG1hc2spKTsKICAgICB3aGlsZSAobmVl
ZFRyYXBIYW5kbGluZyhtYXNrKSkgewogICAgICAgICBhdXRvIGV2ZW50VHlwZSA9IHRha2VUb3BQ
cmlvcml0eVRyYXAobWFzayk7CkBAIC00NjAsNyArMzczLDYgQEAgdm9pZCBWTVRyYXBzOjpoYW5k
bGVUcmFwcyhFeGVjU3RhdGUqIGV4ZWMsIFZNVHJhcHM6Ok1hc2sgbWFzaykKICAgICAgICAgICAg
IEZBTExUSFJPVUdIOwogCiAgICAgICAgIGNhc2UgTmVlZFRlcm1pbmF0aW9uOgotICAgICAgICAg
ICAgaW52YWxpZGF0ZUNvZGVCbG9ja3NPblN0YWNrKGV4ZWMpOwogICAgICAgICAgICAgdGhyb3dF
eGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVRlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24o
JnZtKSk7CiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTQ3Miw3ICszODQsNyBAQCB2b2lkIFZN
VHJhcHM6OmhhbmRsZVRyYXBzKEV4ZWNTdGF0ZSogZXhlYywgVk1UcmFwczo6TWFzayBtYXNrKQog
CiBhdXRvIFZNVHJhcHM6OnRha2VUb3BQcmlvcml0eVRyYXAoVk1UcmFwczo6TWFzayBtYXNrKSAt
PiBFdmVudFR5cGUKIHsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jaygqbV9sb2NrKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8
IE51bWJlck9mRXZlbnRUeXBlczsgKytpKSB7CiAgICAgICAgIEV2ZW50VHlwZSBldmVudFR5cGUg
PSBzdGF0aWNfY2FzdDxFdmVudFR5cGU+KGkpOwogICAgICAgICBpZiAoaGFzVHJhcEZvckV2ZW50
KGxvY2tlciwgZXZlbnRUeXBlLCBtYXNrKSkgewpAQCAtNDgzLDQgKzM5NSwxNyBAQCBhdXRvIFZN
VHJhcHM6OnRha2VUb3BQcmlvcml0eVRyYXAoVk1UcmFwczo6TWFzayBtYXNrKSAtPiBFdmVudFR5
cGUKICAgICByZXR1cm4gSW52YWxpZDsKIH0KIAorVk1UcmFwczo6Vk1UcmFwcygpCisgICAgOiBt
X2xvY2soQm94PExvY2s+OjpjcmVhdGUoKSkKKyAgICAsIG1fdHJhcFNldChBdXRvbWF0aWNUaHJl
YWRDb25kaXRpb246OmNyZWF0ZSgpKQoreworfQorCitWTVRyYXBzOjp+Vk1UcmFwcygpCit7Cisj
aWYgRU5BQkxFKFNJR05BTF9CQVNFRF9WTV9UUkFQUykKKyAgICBBU1NFUlQoIW1fc2lnbmFsU2Vu
ZGVyKTsKKyNlbmRpZgorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNVHJhcHMuaAppbmRleCA5YjcyNjQ3YWIyNjIzZWIxYzg4MmUwMjYzNmY0YjFj
MGIyYTAyM2Y4Li45YjA2Y2RkMTJkYjU5ZTJhMDc0NDUzODEyNzliYjc0ZjEzNjJjMDQ3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5oCkBAIC0yNSw2ICsyNSw4IEBACiAK
ICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8d3RmL0F1dG9tYXRpY1RocmVhZC5oPgorI2luY2x1
ZGUgPHd0Zi9Cb3guaD4KICNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CkBAIC04NiwxMiArODgsOCBAQCBwdWJs
aWM6CiAgICAgICAgIEJpdEZpZWxkIG1fbWFzazsKICAgICB9OwogCi0gICAgflZNVHJhcHMoKQot
ICAgIHsKLSNpZiBFTkFCTEUoU0lHTkFMX0JBU0VEX1ZNX1RSQVBTKQotICAgICAgICBBU1NFUlQo
bV9zaWduYWxTZW5kZXJzLmlzRW1wdHkoKSk7Ci0jZW5kaWYKLSAgICB9CisgICAgflZNVHJhcHMo
KTsKKyAgICBWTVRyYXBzKCk7CiAKICAgICB2b2lkIHdpbGxEZXN0cm95Vk0oKTsKIApAQCAtMTEw
LDcgKzEwOCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGhhbmRsZVRyYXBzKEV4ZWNTdGF0ZSosIFZN
VHJhcHM6Ok1hc2spOwogCiAgICAgdm9pZCB0cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKHN0cnVj
dCBTaWduYWxDb250ZXh0JiwgU3RhY2tCb3VuZHMpOwotICAgIEV4cGVjdGVkPGJvb2wsIEVycm9y
PiB0cnlKZXR0aXNvbkNvZGVCbG9ja3NPblN0YWNrKHN0cnVjdCBTaWduYWxDb250ZXh0Jik7CiAK
IHByaXZhdGU6CiAgICAgVk0mIHZtKCkgY29uc3Q7CkBAIC0xMzQsMjEgKzEzMSw4IEBAIHByaXZh
dGU6CiAgICAgRXZlbnRUeXBlIHRha2VUb3BQcmlvcml0eVRyYXAoTWFzayk7CiAKICNpZiBFTkFC
TEUoU0lHTkFMX0JBU0VEX1ZNX1RSQVBTKQotICAgIGNsYXNzIFNpZ25hbFNlbmRlciA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTaWduYWxTZW5kZXI+IHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIFNpZ25hbFNlbmRlcihWTSYgdm0sIEV2ZW50VHlwZSBldmVudFR5cGUpCi0gICAgICAgICAg
ICA6IG1fdm0oJnZtKQotICAgICAgICAgICAgLCBtX2V2ZW50VHlwZShldmVudFR5cGUpCi0gICAg
ICAgIHsgfQotCi0gICAgICAgIHZvaWQgd2lsbERlc3Ryb3lWTSgpOwotICAgICAgICB2b2lkIHNl
bmQoKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIExvY2sgbV9sb2NrOwotICAgICAgICBWTSog
bV92bTsKLSAgICAgICAgRXZlbnRUeXBlIG1fZXZlbnRUeXBlOwotICAgIH07CisgICAgY2xhc3Mg
U2lnbmFsU2VuZGVyOworICAgIGZyaWVuZCBjbGFzcyBTaWduYWxTZW5kZXI7CiAKICAgICB2b2lk
IGludmFsaWRhdGVDb2RlQmxvY2tzT25TdGFjaygpOwogICAgIHZvaWQgaW52YWxpZGF0ZUNvZGVC
bG9ja3NPblN0YWNrKEV4ZWNTdGF0ZSogdG9wQ2FsbEZyYW1lKTsKQEAgLTE2MSw3ICsxNDUsOCBA
QCBwcml2YXRlOgogICAgIHZvaWQgaW52YWxpZGF0ZUNvZGVCbG9ja3NPblN0YWNrKEV4ZWNTdGF0
ZSopIHsgfQogI2VuZGlmCiAKLSAgICBMb2NrIG1fbG9jazsKKyAgICBCb3g8TG9jaz4gbV9sb2Nr
OworICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IG1fdHJhcFNldDsKICAgICB1
bmlvbiB7CiAgICAgICAgIEJpdEZpZWxkIG1fbmVlZFRyYXBIYW5kbGluZyB7IDAgfTsKICAgICAg
ICAgQml0RmllbGQgbV90cmFwc0JpdEZpZWxkOwpAQCAtMTcwLDcgKzE1NSw3IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX2lzU2h1dHRpbmdEb3duIHsgZmFsc2UgfTsKIAogI2lmIEVOQUJMRShTSUdO
QUxfQkFTRURfVk1fVFJBUFMpCi0gICAgSGFzaFNldDxSZWZQdHI8U2lnbmFsU2VuZGVyPj4gbV9z
aWduYWxTZW5kZXJzOworICAgIFJlZlB0cjxTaWduYWxTZW5kZXI+IG1fc2lnbmFsU2VuZGVyOwog
I2VuZGlmCiAKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDAxYWI5NTg5Y2Ey
Nzg4MTg2NmY0ZmY4YWI1MTE1NjA3MGQ3Y2I4ZTcuLmJlZTdlNmE3MDdiMGEzOGE3ODBhODYxZDhj
Y2VhNDZlNDkzZmYxMGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxNy0wNi0yOCAgS2VpdGggTWlsbGVyICA8a2Vp
dGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBWTVRyYXBzIGhhcyBzb21lIHJhY2VzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM5NDEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgbmV3IHRl
c3RpbmcgbW9kZSBmb3IgdGVzdGluZyB0aGUgV2F0Y2hkb2cgd2l0aCBvdXIgc3RyZXNzCisgICAg
ICAgIHRlc3RzLgorCisgICAgICAgICogU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0czoKKwog
MjAxNy0wNi0yNiAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIxODc4My4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNz
LXRlc3RzCmluZGV4IGMwOWYyMTg1MjM3OWQzM2Q4ZmY3MjdkYmFhOTdjY2EwMWNlZDk3YTMuLmFm
NmY3MTUyZGYwMmFlNGQ5OTllYzI5Njk4N2ZiNjY2Mjk4ODA0N2MgMTAwNzU1Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNj
LXN0cmVzcy10ZXN0cwpAQCAtODkwLDYgKzg5MCwxMSBAQCBkZWYgcnVuRlRMRWFnZXIoKm9wdGlv
bmFsVGVzdFNwZWNpZmljT3B0aW9ucykKICAgICBydW4oImZ0bC1lYWdlciIsICItLWFpckZvcmNl
QnJpZ2dzQWxsb2NhdG9yPXRydWUiLCAqKEZUTF9PUFRJT05TICsgRUFHRVJfT1BUSU9OUyArIENP
TExFQ1RfQ09OVElOVU9VU0xZX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMp
KQogZW5kCiAKK2RlZiBydW5GVExFYWdlcldhdGNoZG9nKCpvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvbnMpCisgICAgdGltZW91dCA9IHJhbmQoMTAwKQorICAgIHJ1bigiZnRsLWVhZ2VyLXdhdGNo
ZG9nLSN7dGltZW91dH0iLCAiLS13YXRjaGRvZz0je3RpbWVvdXR9IiwgIi0td2F0Y2hkb2ctZXhj
ZXB0aW9uLW9rIiwgKihGVExfT1BUSU9OUyArIEVBR0VSX09QVElPTlMgKyBDT0xMRUNUX0NPTlRJ
TlVPVVNMWV9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKK2VuZAorCiBk
ZWYgcnVuRlRMRWFnZXJOb0NKSVRWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25z
KQogICAgIHJ1bigiZnRsLWVhZ2VyLW5vLWNqaXQiLCAiLS12YWxpZGF0ZUdyYXBoPXRydWUiLCAi
LS1haXJGb3JjZUlSQ0FsbG9jYXRvcj10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BU
SU9OUyArIEVBR0VSX09QVElPTlMgKyBDT0xMRUNUX0NPTlRJTlVPVVNMWV9PUFRJT05TICsgb3B0
aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314096</attachid>
            <date>2017-06-28 19:52:45 -0700</date>
            <delta_ts>2017-06-29 10:21:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173941-20170628195243.patch</filename>
            <type>text/plain</type>
            <size>40875</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE4ODM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
Y2FmZmRjOWE0ZTc4YzVjMDA1ZjQ5ZTA4ZDJiZDQ3NDFhNGIzNDY4Li43NjQyYzk2OGExODRjMmY1
NmZmZjFlNjc3MmE5ODdiNTExY2E5NTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NiBAQAorMjAxNy0wNi0yOCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBWTVRyYXBzIGhhcyBzb21lIHJhY2VzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM5NDEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHJlZmFjdG9ycyBtdWNo
IG9mIHRoZSBWTVRyYXBzIEFQSS4KKworICAgICAgICBPbiB0aGUgbWVzc2FnZSBzZW5kaW5nIHNp
ZGU6CisKKyAgICAgICAgMSkgTm8gbG9uZ2VyIHVzZXMgdGhlIFlhcnIgSklUIGNoZWNrIHRvIGRl
dGVybWluZSBpZiB3ZSBhcmUgaW4KKyAgICAgICAgUmVnRXhwIGNvZGUuIFRoYXQgd2FzIHVuc291
bmQgYmVjYXVzZSBSZWdFeHAgSklUIGNvZGUgY2FuIGJlIHJ1bgorICAgICAgICBvbiBjb21waWxh
dGlvbiB0aHJlYWRzLiAgSW5zdGVhZCBpdCBsb29rcyBhdCB0aGUgY3VycmVudCBmcmFtZSdzCisg
ICAgICAgIGNvZGUgYmxvY2sgc2xvdCBhbmQgY2hlY2tzIGlmIGl0IGlzIHZhbGlkLCB3aGljaCBp
cyB0aGUgc2FtZSBhcworICAgICAgICB3aGF0IGl0IGRpZCBmb3IgSklUIGNvZGUgcHJldmlvdXNs
eS4KKworICAgICAgICAyKSBPbmx5IGhhdmUgb25lIHNpZ25hbCBzZW5kZXIgdGhyZWFkLCBwcmV2
aW91c2x5LCB0aGVyZSBjb3VsZCBiZQorICAgICAgICBtYW55IGF0IG9uY2UsIHdoaWNoIGNhdXNl
ZCBzb21lIGRhdGEgcmFjZXMuIEFkZGl0aW9uYWxseSwgdGhlCisgICAgICAgIHNpZ25hbCBzZW5k
ZXIgdGhyZWFkIGlzIGFuIGF1dG9tYXRpYyB0aHJlYWQgc28gaXQgd2lsbCBkZWFsbG9jYXRlCisg
ICAgICAgIGl0c2VsZiB3aGVuIG5vdCBpbiB1c2UuCisKKyAgICAgICAgT24gdGhlIFZNVHJhcHMg
YnJlYWtwb2ludCBzaWRlOgorCisgICAgICAgIDEpIFdlIG5vdyBoYXZlIGEgdHJ1ZSBtYXBwaW5n
IG9mIGlmIHdlIGhpdCBhIGJyZWFrcG9pbnQgaW5zdGVhZCBvZgorICAgICAgICBhIEpJVCBhc3Nl
cnRpb24uIFNvIHRoZSBleGNlcHRpb24gaGFuZGxlciB3b24ndCBlYXQgSklUIGFzc2VydGlvbnMK
KyAgICAgICAgYW55bW9yZS4KKworICAgICAgICAyKSBJdCBqZXR0aXNvbnMgYWxsIENvZGVCbG9j
a3MgdGhhdCBoYXZlIFZNVHJhcHMgYnJlYWtwb2ludHMgb24KKyAgICAgICAgdGhlbSBpbnN0ZWFk
IG9mIGV2ZXJ5IENvZGVCbG9jayBvbiB0aGUgc3RhY2suIFRoaXMgYm90aCBwcmV2ZW50cworICAg
ICAgICB1cyBmcm9tIGhpdHRpbmcgc3RhbGUgVk1UcmFwcyBicmVha3BvaW50cyBhbmQgYWxzbyBk
b2Vzbid0IE9TUgorICAgICAgICBjb2RlYmxvY2tzIHRoYXQgb3RoZXJ3aXNlIGRvbid0IG5lZWQg
dG8gYmUgamV0dGlzb25lZC4KKworICAgICAgICAzKSBUaGUgb2xkIGV4Y2VwdGlvbiBoYW5kbGVy
IGNvdWxkIHRoZW9yZXRpY2FsbHkgZmFpbCBmb3IgYSBjb3VwbGUKKyAgICAgICAgb2YgcmVhc29u
cyB0aGVuIHJlc3VtZSBleGVjdXRpb24gd2l0aCBhIGNsb2JiZXJlZCBpbnN0cnVjdGlvbgorICAg
ICAgICBzZXQuIFRoaXMgcGF0Y2ggd2lsbCBraWxsIHRoZSBwcm9ncmFtIGlmIHRoZSBleGNlcHRp
b24gaGFuZGxlcgorICAgICAgICB3b3VsZCBmYWlsLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxz
byByZWZhY3RvcnMgc29tZSBvZiB0aGUganNjLmNwcCBmdW5jdGlvbnMgdG8gdGFrZSB0aGUKKyAg
ICAgICAgQ29tbWFuZExpbmUgb3B0aW9ucyBvYmplY3QgaW5zdGVhZCBvZiBpbmRpdmlkdWFsIG9w
dGlvbnMuIEFsc28sIHRoZXJlCisgICAgICAgIGlzIGEgbmV3IGNvbW1hbmQgbGluZSBvcHRpb24g
dGhhdCBtYWtlcyBleGNlcHRpb25zIGR1ZSB0byB3YXRjaGRvZworICAgICAgICB0aW1lb3V0cyBh
biBhY2NlcHRhYmxlIHJlc3VsdC4KKworICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLmM6Cisg
ICAgICAgIChtYWluKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6Omluc3RhbGxWTVRyYXBCcmVha3BvaW50cyk6CisgICAgICAgICog
ZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnBjQ29kZUJsb2NrTWFw
KToKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjppbnZhbGlkYXRlKToKKyAgICAgICAg
KEpTQzo6REZHOjpDb21tb25EYXRhOjp+Q29tbW9uRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6
Q29tbW9uRGF0YTo6aW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKToKKyAgICAgICAgKEpTQzo6REZH
Ojpjb2RlQmxvY2tGb3JWTVRyYXBQQyk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuaDoK
KyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25Eb2xsYXJBZ2VudFN0YXJ0KToK
KyAgICAgICAgKGNoZWNrVW5jYXVnaHRFeGNlcHRpb24pOgorICAgICAgICAoY2hlY2tFeGNlcHRp
b24pOgorICAgICAgICAocnVuV2l0aE9wdGlvbnMpOgorICAgICAgICAocHJpbnRVc2FnZVN0YXRl
bWVudCk6CisgICAgICAgIChDb21tYW5kTGluZTo6cGFyc2VBcmd1bWVudHMpOgorICAgICAgICAo
anNjbWFpbik6CisgICAgICAgIChydW5XaXRoU2NyaXB0cyk6IERlbGV0ZWQuCisgICAgICAgICog
cnVudGltZS9KU0xvY2suY3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OmRpZEFjcXVpcmVMb2Nr
KToKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgorICAgICAgICAoSlNDOjpzYW5pdGl6
ZWRUb3BDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjp0cnlJbnN0YWxsVHJhcEJy
ZWFrcG9pbnRzKToKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6d2lsbERlc3Ryb3lWTSk6CisgICAg
ICAgIChKU0M6OlZNVHJhcHM6OmZpcmVUcmFwKToKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6aGFu
ZGxlVHJhcHMpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjpWTVRyYXBzKToKKyAgICAgICAgKEpT
Qzo6Vk1UcmFwczo6flZNVHJhcHMpOgorICAgICAgICAoSlNDOjpmaW5kQWN0aXZlVk1BbmRTdGFj
a0JvdW5kcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Omluc3RhbGxTaWduYWxIYW5kbGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6YWRkU2lnbmFsU2VuZGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6cmVtb3ZlU2lnbmFsU2VuZGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Vk1UcmFwczo6U2lnbmFsU2VuZGVyOjp3aWxsRGVzdHJveVZNKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6U2lnbmFsU2VuZGVyOjpzZW5kKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuaDoKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6
flZNVHJhcHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWTVRyYXBzOjpTaWduYWxTZW5kZXI6
OlNpZ25hbFNlbmRlcik6IERlbGV0ZWQuCisKIDIwMTctMDYtMjYgIFNhYW0gQmFyYXRpICA8c2Jh
cmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVnRXhwUHJvdG90eXBlLmpzIGJ1aWx0aW4gdXNl
cyBmb3Itb2YgaXRlcmF0aW9uIHdoaWNoIGlzIGFsbW9zdCBjZXJ0YWlubHkgaW5jb3JyZWN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCmluZGV4IDlkM2I0NTYyOWY1
YzFmYWNjODEwOTkxOTgzNjRkZjE1OTZjOWYzZDcuLmYxMmNjMmVlMjFiMzhlOGFlMGZmMjQ0ZWVk
MTk1M2YzMjNiM2M1MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVz
dHMvdGVzdGFwaS5jCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFw
aS5jCkBAIC0xMzQ4LDcgKzEzNDgsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltd
KQogICAgIDo6U2V0RXJyb3JNb2RlKDApOwogI2VuZGlmCiAKLSAgICB0ZXN0RXhlY3V0aW9uVGlt
ZUxpbWl0KCk7CiAgICAgdGVzdENvbXBhcmVBbmRTd2FwKCk7CiAgICAgc3RhcnRNdWx0aXRocmVh
ZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCBiYjRlYmZjYjU0NzQ5OGZlZWU5N2Q4Zjg4Nzg2Y2Mw
YzEwYmQ2Y2ZhLi42MGRlZjY1NTZjYWE0YWFmNzJkNTQ1ODc3ZTI3Y2MyZTAyMWFlYjNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtMzAwNSw5
ICszMDA1LDEwIEBAIGJvb2wgQ29kZUJsb2NrOjppbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKQog
ICAgIC8vIHdlIHNob3VsZCBub3QgcGVydHVyYiB0aGUgcmVmQ291bnQgb2YgbV9qaXRDb2RlLgog
ICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5pbnN0YWxsVk1UcmFwQnJl
YWtwb2ludHMoKTsKKyAgICBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5pbnN0YWxsVk1UcmFwQnJl
YWtwb2ludHModGhpcyk7CiAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQorICAgIFVOUkVBQ0hBQkxF
X0ZPUl9QTEFURk9STSgpOwogICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKaW5kZXggY2QxZTVlZmY4Y2E1Njc0
Y2JhM2FhYmQ3ZmUxODM1ODQzYmVmNTYyMS4uOTYxNDc1Y2JkM2M3NDEyMjY3ZjhjMDc5YWIzZmNi
OTBlZDMyOWJjYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21t
b25EYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEu
Y3BwCkBAIC0zNiw2ICszNiw4IEBACiAjaW5jbHVkZSAiVHJhY2tlZFJlZmVyZW5jZXMuaCIKICNp
bmNsdWRlICJWTS5oIgogCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBDb21tb25EYXRhOjpub3RpZnlDb21w
aWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKFBsYW4mIHBsYW4sIENvZGVCbG9jayogY29kZUJsb2Nr
LCBOb2RlKiBub2RlKQpAQCAtODcsMjMgKzg5LDc2IEBAIHZvaWQgQ29tbW9uRGF0YTo6c2hyaW5r
VG9GaXQoKQogICAgIHRyYW5zaXRpb25zLnNocmlua1RvRml0KCk7CiB9CiAKK3N0YXRpYyBTdGF0
aWNMb2NrIHBjQ29kZUJsb2NrTWFwTG9jazsKK2lubGluZSBIYXNoTWFwPHZvaWQqLCBDb2RlQmxv
Y2sqPiYgcGNDb2RlQmxvY2tNYXAoQWJzdHJhY3RMb2NrZXImKQoreworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxIYXNoTWFwPHZvaWQqLCBDb2RlQmxvY2sqPj4gcGNDb2RlQmxvY2tNYXA7Cisg
ICAgcmV0dXJuIHBjQ29kZUJsb2NrTWFwOworfQorCiBib29sIENvbW1vbkRhdGE6OmludmFsaWRh
dGUoKQogewogICAgIGlmICghaXNTdGlsbFZhbGlkKQogICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAoVU5MSUtFTFkoaGFzVk1UcmFwc0JyZWFrcG9pbnRzSW5zdGFsbGVkKSkgeworICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihwY0NvZGVCbG9ja01hcExvY2spOworICAgICAgICBhdXRv
JiBtYXAgPSBwY0NvZGVCbG9ja01hcChsb2NrZXIpOworICAgICAgICBmb3IgKGF1dG8mIGp1bXBS
ZXBsYWNlbWVudCA6IGp1bXBSZXBsYWNlbWVudHMpCisgICAgICAgICAgICBtYXAucmVtb3ZlKGp1
bXBSZXBsYWNlbWVudC5kYXRhTG9jYXRpb24oKSk7CisgICAgICAgIGhhc1ZNVHJhcHNCcmVha3Bv
aW50c0luc3RhbGxlZCA9IGZhbHNlOworICAgIH0KKwogICAgIGZvciAodW5zaWduZWQgaSA9IGp1
bXBSZXBsYWNlbWVudHMuc2l6ZSgpOyBpLS07KQogICAgICAgICBqdW1wUmVwbGFjZW1lbnRzW2ld
LmZpcmUoKTsKICAgICBpc1N0aWxsVmFsaWQgPSBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBDb21tb25EYXRhOjppbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKQorQ29tbW9uRGF0
YTo6fkNvbW1vbkRhdGEoKQogeworICAgIGlmIChVTkxJS0VMWShoYXNWTVRyYXBzQnJlYWtwb2lu
dHNJbnN0YWxsZWQpKSB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHBjQ29kZUJsb2NrTWFw
TG9jayk7CisgICAgICAgIGF1dG8mIG1hcCA9IHBjQ29kZUJsb2NrTWFwKGxvY2tlcik7CisgICAg
ICAgIGZvciAoYXV0byYganVtcFJlcGxhY2VtZW50IDoganVtcFJlcGxhY2VtZW50cykKKyAgICAg
ICAgICAgIG1hcC5yZW1vdmUoanVtcFJlcGxhY2VtZW50LmRhdGFMb2NhdGlvbigpKTsKKyAgICB9
Cit9CisKK3ZvaWQgQ29tbW9uRGF0YTo6aW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKENvZGVCbG9j
ayogb3duZXIpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIocGNDb2RlQmxvY2tNYXBMb2NrKTsK
ICAgICBpZiAoIWlzU3RpbGxWYWxpZCB8fCBoYXNWTVRyYXBzQnJlYWtwb2ludHNJbnN0YWxsZWQp
CiAgICAgICAgIHJldHVybjsKICAgICBoYXNWTVRyYXBzQnJlYWtwb2ludHNJbnN0YWxsZWQgPSB0
cnVlOwotICAgIGZvciAodW5zaWduZWQgaSA9IGp1bXBSZXBsYWNlbWVudHMuc2l6ZSgpOyBpLS07
KQotICAgICAgICBqdW1wUmVwbGFjZW1lbnRzW2ldLmluc3RhbGxWTVRyYXBCcmVha3BvaW50KCk7
CisKKyAgICBhdXRvJiBtYXAgPSBwY0NvZGVCbG9ja01hcChsb2NrZXIpOworI2lmICFkZWZpbmVk
KE5ERUJVRykKKyAgICAvLyBXZSBuZWVkIHRvIGJlIGFibGUgdG8gaGFuZGxlIG1vcmUgdGhhbiBv
bmUgaW52YWxpZGF0aW9uIHBvaW50IGF0IHRoZSBzYW1lIHBjCisgICAgLy8gYnV0IHdlIHdhbnQg
dG8gbWFrZSBzdXJlIHdlIGRvbid0IGZvcmdldCB0byByZW1vdmUgYSBwYyBmcm9tIHRoZSBtYXAu
CisgICAgSGFzaFNldDx2b2lkKj4gbmV3UmVwbGFjZW1lbnRzOworI2VuZGlmCisgICAgZm9yIChh
dXRvJiBqdW1wUmVwbGFjZW1lbnQgOiBqdW1wUmVwbGFjZW1lbnRzKSB7CisgICAgICAgIGp1bXBS
ZXBsYWNlbWVudC5pbnN0YWxsVk1UcmFwQnJlYWtwb2ludCgpOworICAgICAgICB2b2lkKiBzb3Vy
Y2UgPSBqdW1wUmVwbGFjZW1lbnQuZGF0YUxvY2F0aW9uKCk7CisgICAgICAgIGF1dG8gcmVzdWx0
ID0gbWFwLmFkZChzb3VyY2UsIG93bmVyKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7
CisjaWYgIWRlZmluZWQoTkRFQlVHKQorICAgICAgICBBU1NFUlQocmVzdWx0LmlzTmV3RW50cnkg
fHwgbmV3UmVwbGFjZW1lbnRzLmNvbnRhaW5zKHNvdXJjZSkpOworICAgICAgICBuZXdSZXBsYWNl
bWVudHMuYWRkKHNvdXJjZSk7CisjZW5kaWYKKyAgICB9Cit9CisKK0NvZGVCbG9jayogY29kZUJs
b2NrRm9yVk1UcmFwUEModm9pZCogcGMpCit7CisgICAgQVNTRVJUKGlzSklUUEMocGMpKTsKKyAg
ICBMb2NrSG9sZGVyIGxvY2tlcihwY0NvZGVCbG9ja01hcExvY2spOworICAgIGF1dG8mIG1hcCA9
IHBjQ29kZUJsb2NrTWFwKGxvY2tlcik7CisgICAgYXV0byByZXN1bHQgPSBtYXAuZmluZChwYyk7
CisgICAgaWYgKHJlc3VsdCA9PSBtYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogfQogCiBib29sIENvbW1vbkRhdGE6OmlzVk1UcmFw
QnJlYWtwb2ludCh2b2lkKiBhZGRyZXNzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb25EYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbkRhdGEuaAppbmRleCBmZGUwNzQ3MmI5MjQyODllOTExMjVjM2E2ZWFjZDQ4ZDVjNmE2ZmFi
Li4yOTRjMTFmZTllMTEwYWZjMTg1OWIxMzdjZDVjM2NmNmNmMjNiMjI4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaApAQCAtNzUsNiArNzUsNyBAQCBwdWJsaWM6
CiAgICAgICAgICwgZnJhbWVSZWdpc3RlckNvdW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKSkKICAgICAgICAgLCByZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0KHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICB7IH0KKyAgICB+Q29tbW9uRGF0
YSgpOwogICAgIAogICAgIHZvaWQgbm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNpdGlvbihQ
bGFuJiwgQ29kZUJsb2NrKiwgTm9kZSopOwogICAgIENhbGxTaXRlSW5kZXggYWRkQ29kZU9yaWdp
bihDb2RlT3JpZ2luKTsKQEAgLTg2LDcgKzg3LDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wg
aW52YWxpZGF0ZSgpOyAvLyBSZXR1cm5zIHRydWUgaWYgd2UgZGlkIGludmFsaWRhdGUsIG9yIGZh
bHNlIGlmIHRoZSBjb2RlIGJsb2NrIHdhcyBhbHJlYWR5IGludmFsaWRhdGVkLgogICAgIGJvb2wg
aGFzSW5zdGFsbGVkVk1UcmFwc0JyZWFrcG9pbnRzKCkgY29uc3QgeyByZXR1cm4gaXNTdGlsbFZh
bGlkICYmIGhhc1ZNVHJhcHNCcmVha3BvaW50c0luc3RhbGxlZDsgfQotICAgIHZvaWQgaW5zdGFs
bFZNVHJhcEJyZWFrcG9pbnRzKCk7CisgICAgdm9pZCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMo
Q29kZUJsb2NrKiBvd25lcik7CiAgICAgYm9vbCBpc1ZNVHJhcEJyZWFrcG9pbnQodm9pZCogYWRk
cmVzcyk7CiAKICAgICB1bnNpZ25lZCByZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGVjdXRpb25B
bmRFeGl0KCkgY29uc3QKQEAgLTEyOCw2ICsxMjksOCBAQCBwcml2YXRlOgogCiB9OwogCitDb2Rl
QmxvY2sqIGNvZGVCbG9ja0ZvclZNVHJhcFBDKHZvaWQqIHBjKTsKKwogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
CmluZGV4IGE3MWZlNzYzYWM5NGMzZGQ2MzNmZjc0ZDFkNmQ1YzkxNWE4OWU1NjYuLmFhZGMxNDIz
YTI0YjRjM2NlYTM2NjM1ZTBjOWQ1NjQ2OWQ0MjFhYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBA
IC05ODYsNyArOTg2LDcgQEAgY2xhc3MgV29ya2VyczsKIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KIGludCBydW5KU0MoQ29tbWFuZExpbmUsIGJvb2wgaXNXb3JrZXIsIGNvbnN0IEZ1bmMmKTsK
LXN0YXRpYyB2b2lkIGNoZWNrRXhjZXB0aW9uKEdsb2JhbE9iamVjdCosIGJvb2wgaXNMYXN0Rmls
ZSwgYm9vbCBoYXNFeGNlcHRpb24sIEpTVmFsdWUsIGNvbnN0IFN0cmluZyYgdW5jYXVnaHRFeGNl
cHRpb25OYW1lLCBib29sIGFsd2F5c0R1bXBVbmNhdWdodEV4Y2VwdGlvbiwgYm9vbCBkdW1wLCBi
b29sJiBzdWNjZXNzKTsKK3N0YXRpYyB2b2lkIGNoZWNrRXhjZXB0aW9uKEdsb2JhbE9iamVjdCos
IGJvb2wgaXNMYXN0RmlsZSwgYm9vbCBoYXNFeGNlcHRpb24sIEpTVmFsdWUsIENvbW1hbmRMaW5l
JiwgYm9vbCYgc3VjY2Vzcyk7CiAKIGNsYXNzIE1lc3NhZ2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8TWVzc2FnZT4gewogcHVibGljOgpAQCAtMTIxMCw2ICsxMjEwLDcgQEAgcHVibGlj
OgogICAgIGJvb2wgbV9wcm9maWxlIHsgZmFsc2UgfTsKICAgICBTdHJpbmcgbV9wcm9maWxlck91
dHB1dDsKICAgICBTdHJpbmcgbV91bmNhdWdodEV4Y2VwdGlvbk5hbWU7CisgICAgYm9vbCBtX3Ry
ZWF0V2F0Y2hkb2dFeGNlcHRpb25Bc1N1Y2Nlc3MgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9hbHdh
eXNEdW1wVW5jYXVnaHRFeGNlcHRpb24geyBmYWxzZSB9OwogICAgIGJvb2wgbV9kdW1wU2FtcGxp
bmdQcm9maWxlckRhdGEgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9lbmFibGVSZW1vdGVEZWJ1Z2dp
bmcgeyBmYWxzZSB9OwpAQCAtMjYxNyw3ICsyNjE4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkRvbGxhckFnZW50U3RhcnQoRXhlY1N0YXRlKiBleGVjKQogICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KSwgbWFrZVNvdXJjZShzb3VyY2VDb2RlLCBTb3VyY2VPcmlnaW4oQVNDSUlMaXRlcmFsKCJ3b3Jr
ZXIiKSkpLCBKU1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRpb24pOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9IGV2YWx1YXRpb25FeGNlcHRpb24tPnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAg
IGNoZWNrRXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdHJ1ZSwgZXZhbHVhdGlvbkV4Y2VwdGlvbiwg
cmVzdWx0LCBTdHJpbmcoKSwgZmFsc2UsIGZhbHNlLCBzdWNjZXNzKTsKKyAgICAgICAgICAgICAg
ICAgICAgY2hlY2tFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0cnVlLCBldmFsdWF0aW9uRXhjZXB0
aW9uLCByZXN1bHQsIGNvbW1hbmRMaW5lLCBzdWNjZXNzKTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKCFzdWNjZXNzKQogICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7CkBAIC0zMjkyLDggKzMyOTMsOSBAQCBzdGF0aWMg
dm9pZCBkdW1wRXhjZXB0aW9uKEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGV4
Y2VwdGlvbikKICN1bmRlZiBDSEVDS19FWENFUFRJT04KIH0KIAotc3RhdGljIGJvb2wgY2hlY2tV
bmNhdWdodEV4Y2VwdGlvbihWTSYgdm0sIEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIGV4Y2VwdGlvbiwgY29uc3QgU3RyaW5nJiBleHBlY3RlZEV4Y2VwdGlvbk5hbWUsIGJvb2wg
YWx3YXlzRHVtcEV4Y2VwdGlvbikKK3N0YXRpYyBib29sIGNoZWNrVW5jYXVnaHRFeGNlcHRpb24o
Vk0mIHZtLCBHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBleGNlcHRpb24sIENv
bW1hbmRMaW5lJiBvcHRpb25zKQogeworICAgIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRFeGNlcHRp
b25OYW1lID0gb3B0aW9ucy5tX3VuY2F1Z2h0RXhjZXB0aW9uTmFtZTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsK
ICAgICBpZiAoIWV4Y2VwdGlvbikgewpAQCAtMzMxNCw3ICszMzE2LDcgQEAgc3RhdGljIGJvb2wg
Y2hlY2tVbmNhdWdodEV4Y2VwdGlvbihWTSYgdm0sIEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIGUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAoaXNJbnN0
YW5jZU9mRXhwZWN0ZWRFeGNlcHRpb24pIHsKLSAgICAgICAgaWYgKGFsd2F5c0R1bXBFeGNlcHRp
b24pCisgICAgICAgIGlmIChvcHRpb25zLm1fYWx3YXlzRHVtcFVuY2F1Z2h0RXhjZXB0aW9uKQog
ICAgICAgICAgICAgZHVtcEV4Y2VwdGlvbihnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbik7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTMzMjQsMjUgKzMzMjYsMzIgQEAgc3RhdGljIGJv
b2wgY2hlY2tVbmNhdWdodEV4Y2VwdGlvbihWTSYgdm0sIEdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkIGNoZWNr
RXhjZXB0aW9uKEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBib29sIGlzTGFzdEZpbGUsIGJv
b2wgaGFzRXhjZXB0aW9uLCBKU1ZhbHVlIHZhbHVlLCBjb25zdCBTdHJpbmcmIHVuY2F1Z2h0RXhj
ZXB0aW9uTmFtZSwgYm9vbCBhbHdheXNEdW1wVW5jYXVnaHRFeGNlcHRpb24sIGJvb2wgZHVtcCwg
Ym9vbCYgc3VjY2VzcykKK3N0YXRpYyB2b2lkIGNoZWNrRXhjZXB0aW9uKEdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBib29sIGlzTGFzdEZpbGUsIGJvb2wgaGFzRXhjZXB0aW9uLCBKU1ZhbHVl
IHZhbHVlLCBDb21tYW5kTGluZSYgb3B0aW9ucywgYm9vbCYgc3VjY2VzcykKIHsKICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgaWYgKCF1bmNhdWdodEV4Y2VwdGlvbk5hbWUg
fHwgIWlzTGFzdEZpbGUpIHsKKworICAgIGlmIChvcHRpb25zLm1fdHJlYXRXYXRjaGRvZ0V4Y2Vw
dGlvbkFzU3VjY2VzcyAmJiB2YWx1ZS5pbmhlcml0cyh2bSwgVGVybWluYXRlZEV4ZWN1dGlvbkVy
cm9yOjppbmZvKCkpKSB7CisgICAgICAgIEFTU0VSVChoYXNFeGNlcHRpb24pOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKCFvcHRpb25zLm1fdW5jYXVnaHRFeGNlcHRpb25OYW1l
IHx8ICFpc0xhc3RGaWxlKSB7CiAgICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmICFoYXNFeGNl
cHRpb247Ci0gICAgICAgIGlmIChkdW1wICYmICFoYXNFeGNlcHRpb24pCisgICAgICAgIGlmIChv
cHRpb25zLm1fZHVtcCAmJiAhaGFzRXhjZXB0aW9uKQogICAgICAgICAgICAgcHJpbnRmKCJFbmQ6
ICVzXG4iLCB2YWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRm
OCgpLmRhdGEoKSk7CiAgICAgICAgIGlmIChoYXNFeGNlcHRpb24pCiAgICAgICAgICAgICBkdW1w
RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBzdWNj
ZXNzID0gc3VjY2VzcyAmJiBjaGVja1VuY2F1Z2h0RXhjZXB0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
IChoYXNFeGNlcHRpb24pID8gdmFsdWUgOiBKU1ZhbHVlKCksIHVuY2F1Z2h0RXhjZXB0aW9uTmFt
ZSwgYWx3YXlzRHVtcFVuY2F1Z2h0RXhjZXB0aW9uKTsKKyAgICAgICAgc3VjY2VzcyA9IHN1Y2Nl
c3MgJiYgY2hlY2tVbmNhdWdodEV4Y2VwdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCAoaGFzRXhjZXB0
aW9uKSA/IHZhbHVlIDogSlNWYWx1ZSgpLCBvcHRpb25zKTsKIH0KIAotc3RhdGljIGJvb2wgcnVu
V2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxTY3Jp
cHQ+JiBzY3JpcHRzLCBjb25zdCBTdHJpbmcmIHVuY2F1Z2h0RXhjZXB0aW9uTmFtZSwgYm9vbCBh
bHdheXNEdW1wVW5jYXVnaHRFeGNlcHRpb24sIGJvb2wgZHVtcCwgYm9vbCBtb2R1bGUpCitzdGF0
aWMgYm9vbCBydW5XaXRoT3B0aW9ucyhHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29tbWFu
ZExpbmUmIG9wdGlvbnMpCiB7CisgICAgVmVjdG9yPFNjcmlwdD4mIHNjcmlwdHMgPSBvcHRpb25z
Lm1fc2NyaXB0czsKICAgICBTdHJpbmcgZmlsZU5hbWU7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlw
dEJ1ZmZlcjsKIAotICAgIGlmIChkdW1wKQorICAgIGlmIChvcHRpb25zLm1fZHVtcCkKICAgICAg
ICAgSlNDOjpPcHRpb25zOjpkdW1wR2VuZXJhdGVkQnl0ZWNvZGVzKCkgPSB0cnVlOwogCiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpAQCAtMzM1NSw3ICszMzY0LDcgQEAgc3RhdGlj
IGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZl
Y3RvcjxTY3JpcHQ+JiBzY3IKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2NyaXB0cy5z
aXplKCk7IGkrKykgewogICAgICAgICBKU0ludGVybmFsUHJvbWlzZSogcHJvbWlzZSA9IG51bGxw
dHI7Ci0gICAgICAgIGJvb2wgaXNNb2R1bGUgPSBtb2R1bGUgfHwgc2NyaXB0c1tpXS5zY3JpcHRU
eXBlID09IFNjcmlwdDo6U2NyaXB0VHlwZTo6TW9kdWxlOworICAgICAgICBib29sIGlzTW9kdWxl
ID0gb3B0aW9ucy5tX21vZHVsZSB8fCBzY3JpcHRzW2ldLnNjcmlwdFR5cGUgPT0gU2NyaXB0OjpT
Y3JpcHRUeXBlOjpNb2R1bGU7CiAgICAgICAgIGlmIChzY3JpcHRzW2ldLmNvZGVTb3VyY2UgPT0g
U2NyaXB0OjpDb2RlU291cmNlOjpGaWxlKSB7CiAgICAgICAgICAgICBmaWxlTmFtZSA9IHNjcmlw
dHNbaV0uYXJndW1lbnQ7CiAgICAgICAgICAgICBpZiAoc2NyaXB0c1tpXS5zdHJpY3RNb2RlID09
IFNjcmlwdDo6U3RyaWN0TW9kZTo6U3RyaWN0KQpAQCAtMzM4MiwxMiArMzM5MSwxMiBAQCBzdGF0
aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3Qg
VmVjdG9yPFNjcmlwdD4mIHNjcgogICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsK
IAogICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVsZmlsbEhhbmRsZXIgPSBKU05hdGl2ZVN0ZEZ1
bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwgU3RyaW5nKCksIFsmLCBpc0xhc3RG
aWxlXShFeGVjU3RhdGUqIGV4ZWMpIHsKLSAgICAgICAgICAgICAgICBjaGVja0V4Y2VwdGlvbihn
bG9iYWxPYmplY3QsIGlzTGFzdEZpbGUsIGZhbHNlLCBleGVjLT5hcmd1bWVudCgwKSwgdW5jYXVn
aHRFeGNlcHRpb25OYW1lLCBhbHdheXNEdW1wVW5jYXVnaHRFeGNlcHRpb24sIGR1bXAsIHN1Y2Nl
c3MpOworICAgICAgICAgICAgICAgIGNoZWNrRXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgaXNMYXN0
RmlsZSwgZmFsc2UsIGV4ZWMtPmFyZ3VtZW50KDApLCBvcHRpb25zLCBzdWNjZXNzKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAg
ICAgICAgfSk7CiAKICAgICAgICAgICAgIEpTRnVuY3Rpb24qIHJlamVjdEhhbmRsZXIgPSBKU05h
dGl2ZVN0ZEZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwgU3RyaW5nKCksIFsm
LCBpc0xhc3RGaWxlXShFeGVjU3RhdGUqIGV4ZWMpIHsKLSAgICAgICAgICAgICAgICBjaGVja0V4
Y2VwdGlvbihnbG9iYWxPYmplY3QsIGlzTGFzdEZpbGUsIHRydWUsIGV4ZWMtPmFyZ3VtZW50KDAp
LCB1bmNhdWdodEV4Y2VwdGlvbk5hbWUsIGFsd2F5c0R1bXBVbmNhdWdodEV4Y2VwdGlvbiwgZHVt
cCwgc3VjY2Vzcyk7CisgICAgICAgICAgICAgICAgY2hlY2tFeGNlcHRpb24oZ2xvYmFsT2JqZWN0
LCBpc0xhc3RGaWxlLCB0cnVlLCBleGVjLT5hcmd1bWVudCgwKSwgb3B0aW9ucywgc3VjY2Vzcyk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICAgICAgICAgIH0pOwogCkBAIC0zNDAwLDcgKzM0MDksNyBAQCBzdGF0aWMgYm9vbCBydW5X
aXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFNjcmlw
dD4mIHNjcgogICAgICAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICAgICAg
ICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKQogICAgICAgICAgICAgICAgIHJldHVyblZhbHVl
ID0gZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFsdWUoKTsKLSAgICAgICAgICAgIGNoZWNrRXhjZXB0
aW9uKGdsb2JhbE9iamVjdCwgaXNMYXN0RmlsZSwgZXZhbHVhdGlvbkV4Y2VwdGlvbiwgcmV0dXJu
VmFsdWUsIHVuY2F1Z2h0RXhjZXB0aW9uTmFtZSwgYWx3YXlzRHVtcFVuY2F1Z2h0RXhjZXB0aW9u
LCBkdW1wLCBzdWNjZXNzKTsKKyAgICAgICAgICAgIGNoZWNrRXhjZXB0aW9uKGdsb2JhbE9iamVj
dCwgaXNMYXN0RmlsZSwgZXZhbHVhdGlvbkV4Y2VwdGlvbiwgcmV0dXJuVmFsdWUsIG9wdGlvbnMs
IHN1Y2Nlc3MpOwogICAgICAgICB9CiAKICAgICAgICAgc2NyaXB0QnVmZmVyLmNsZWFyKCk7CkBA
IC0zNTAyLDYgKzM1MTEsNyBAQCBzdGF0aWMgTk9fUkVUVVJOIHZvaWQgcHJpbnRVc2FnZVN0YXRl
bWVudChib29sIGhlbHAgPSBmYWxzZSkKICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLS1zdHJpY3Qt
ZmlsZT08ZmlsZT4gICAgICAgUGFyc2UgdGhlIGdpdmVuIGZpbGUgYXMgaWYgaXQgd2VyZSBpbiBz
dHJpY3QgbW9kZSAodGhpcyBvcHRpb24gbWF5IGJlIHBhc3NlZCBtb3JlIHRoYW4gb25jZSlcbiIp
OwogICAgIGZwcmludGYoc3RkZXJyLCAiICAtLW1vZHVsZS1maWxlPTxmaWxlPiAgICAgICBQYXJz
ZSBhbmQgZXZhbHVhdGUgdGhlIGdpdmVuIGZpbGUgYXMgbW9kdWxlICh0aGlzIG9wdGlvbiBtYXkg
YmUgcGFzc2VkIG1vcmUgdGhhbiBvbmNlKVxuIik7CiAgICAgZnByaW50ZihzdGRlcnIsICIgIC0t
ZXhjZXB0aW9uPTxuYW1lPiAgICAgICAgIENoZWNrIHRoZSBsYXN0IHNjcmlwdCBleGl0cyB3aXRo
IGFuIHVuY2F1Z2h0IGV4Y2VwdGlvbiB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZVxuIik7CisgICAg
ZnByaW50ZihzdGRlcnIsICIgIC0td2F0Y2hkb2ctZXhjZXB0aW9uLW9rICAgIFVuY2F1Z2h0IHdh
dGNoZG9nIGV4Y2VwdGlvbnMgZXhpdCB3aXRoIHN1Y2Nlc3NcbiIpOwogICAgIGZwcmludGYoc3Rk
ZXJyLCAiICAtLWR1bXBFeGNlcHRpb24gICAgICAgICAgICBEdW1wIHVuY2F1Z2h0IGV4Y2VwdGlv
biB0ZXh0XG4iKTsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLS1vcHRpb25zICAgICAgICAgICAg
ICAgICAgRHVtcHMgYWxsIEpTQyBWTSBvcHRpb25zIGFuZCBleGl0c1xuIik7CiAgICAgZnByaW50
ZihzdGRlcnIsICIgIC0tZHVtcE9wdGlvbnMgICAgICAgICAgICAgIER1bXBzIGFsbCBub24tZGVm
YXVsdCBKU0MgVk0gb3B0aW9ucyBiZWZvcmUgY29udGludWluZ1xuIik7CkBAIC0zNjMxLDYgKzM2
NDEsMTEgQEAgdm9pZCBDb21tYW5kTGluZTo6cGFyc2VBcmd1bWVudHMoaW50IGFyZ2MsIGNoYXIq
KiBhcmd2KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAo
IXN0cmNtcChhcmcsICItLXdhdGNoZG9nLWV4Y2VwdGlvbi1vayIpKSB7CisgICAgICAgICAgICBt
X3RyZWF0V2F0Y2hkb2dFeGNlcHRpb25Bc1N1Y2Nlc3MgPSB0cnVlOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKwogICAgICAgICAvLyBTZWUgaWYgdGhlIC0tIG9wdGlvbiBpcyBh
IEpTQyBWTSBvcHRpb24uCiAgICAgICAgIGlmIChzdHJzdHIoYXJnLCAiLS0iKSA9PSBhcmcpIHsK
ICAgICAgICAgICAgIGlmICghSlNDOjpPcHRpb25zOjpzZXRPcHRpb24oJmFyZ1syXSkpIHsKQEAg
LTM3NzgsNyArMzc5Myw3IEBAIGludCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAg
ICByZXN1bHQgPSBydW5KU0MoCiAgICAgICAgIG9wdGlvbnMsIGZhbHNlLAogICAgICAgICBbJl0g
KFZNJiwgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIHsKLSAgICAgICAgICAgIHJldHVybiBy
dW5XaXRoU2NyaXB0cyhnbG9iYWxPYmplY3QsIG9wdGlvbnMubV9zY3JpcHRzLCBvcHRpb25zLm1f
dW5jYXVnaHRFeGNlcHRpb25OYW1lLCBvcHRpb25zLm1fYWx3YXlzRHVtcFVuY2F1Z2h0RXhjZXB0
aW9uLCBvcHRpb25zLm1fZHVtcCwgb3B0aW9ucy5tX21vZHVsZSk7CisgICAgICAgICAgICByZXR1
cm4gcnVuV2l0aE9wdGlvbnMoZ2xvYmFsT2JqZWN0LCBvcHRpb25zKTsKICAgICAgICAgfSk7CiAK
ICAgICBwcmludFN1cGVyU2FtcGxlclN0YXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNMb2NrLmNwcAppbmRleCAzMWUyZGI0MGIyMTZlYWEyYjExNDI0YjgwM2ZiN2Y5MWRkNGUy
NjFmLi5mODM1MTJmNDU1Zjk3NTQwODE4M2Q2ZDMwODM0NDE5ZWQ4NTU3N2I0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKQEAgLTE1NCwxMCArMTU0LDEwIEBAIHZv
aWQgSlNMb2NrOjpkaWRBY3F1aXJlTG9jaygpCiAgICAgcmVnaXN0ZXJUaHJlYWRGb3JNYWNoRXhj
ZXB0aW9uSGFuZGxpbmcoJlRocmVhZDo6Y3VycmVudCgpKTsKICNlbmRpZgogCisgICAgLy8gTm90
ZTogZXZlcnl0aGluZyBiZWxvdyBtdXN0IGNvbWUgYWZ0ZXIgYWRkQ3VycmVudFRocmVhZCgpLgog
ICAgIG1fdm0tPnRyYXBzKCkubm90aWZ5R3JhYkFsbExvY2tzKCk7CiAKICNpZiBFTkFCTEUoU0FN
UExJTkdfUFJPRklMRVIpCi0gICAgLy8gTm90ZTogdGhpcyBtdXN0IGNvbWUgYWZ0ZXIgYWRkQ3Vy
cmVudFRocmVhZCgpLgogICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVy
ID0gbV92bS0+c2FtcGxpbmdQcm9maWxlcigpKQogICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5u
b3RpY2VKU0xvY2tBY3F1aXNpdGlvbigpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNVHJhcHMuY3BwCmluZGV4IDQ0ZDUzZWFmZWM1MDI1YzZmYWRmOWM2MDY0MDEwYWQ2
OTRhYzhmOWUuLmNmZWRmOGNlYTFlNDk5OTIyODVmMjJhZDE5NjVjMDcyYzFhMDYzZmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCkBAIC03Miw4MyArNzIsNyBA
QCBpbmxpbmUgc3RhdGljIGJvb2wgdm1Jc0luYWN0aXZlKFZNJiB2bSkKICAgICByZXR1cm4gIXZt
LmVudHJ5U2NvcGUgJiYgIXZtLm93bmVyVGhyZWFkKCk7CiB9CiAKLXN0cnVjdCBWTUFuZFN0YWNr
Qm91bmRzIHsKLSAgICBWTSogdm07Ci0gICAgU3RhY2tCb3VuZHMgc3RhY2tCb3VuZHM7Ci19Owot
Ci1zdGF0aWMgRXhwZWN0ZWQ8Vk1BbmRTdGFja0JvdW5kcywgVk1UcmFwczo6RXJyb3I+IGZpbmRB
Y3RpdmVWTUFuZFN0YWNrQm91bmRzKFNpZ25hbENvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgVk1J
bnNwZWN0b3ImIGluc3BlY3RvciA9IFZNSW5zcGVjdG9yOjppbnN0YW5jZSgpOwotICAgIGF1dG8g
bG9ja2VyID0gdHJ5SG9sZExvY2soaW5zcGVjdG9yLmdldExvY2soKSk7Ci0gICAgaWYgKFVOTElL
RUxZKCFsb2NrZXIpKQotICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoVk1UcmFwczo6RXJy
b3I6OkxvY2tVbmF2YWlsYWJsZSk7Ci0gICAgCi0gICAgVk0qIGFjdGl2ZVZNID0gbnVsbHB0cjsK
LSAgICBTdGFja0JvdW5kcyBzdGFja0JvdW5kcyA9IFN0YWNrQm91bmRzOjplbXB0eUJvdW5kcygp
OwotICAgIHZvaWQqIHN0YWNrUG9pbnRlciA9IGNvbnRleHQuc3RhY2tQb2ludGVyOwotICAgIGJv
b2wgdW5hYmxlVG9BY3F1aXJlTWFjaGluZVRocmVhZHNMb2NrID0gZmFsc2U7Ci0gICAgaW5zcGVj
dG9yLml0ZXJhdGUobG9ja2VyLCBbJl0gKFZNJiB2bSkgewotICAgICAgICBpZiAodm1Jc0luYWN0
aXZlKHZtKSkKLSAgICAgICAgICAgIHJldHVybiBWTUluc3BlY3Rvcjo6RnVuY3RvclN0YXR1czo6
Q29udGludWU7Ci0KLSAgICAgICAgYXV0byYgbWFjaGluZVRocmVhZHMgPSB2bS5oZWFwLm1hY2hp
bmVUaHJlYWRzKCk7Ci0gICAgICAgIGF1dG8gbWFjaGluZVRocmVhZHNMb2NrZXIgPSB0cnlIb2xk
TG9jayhtYWNoaW5lVGhyZWFkcy5nZXRMb2NrKCkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIW1h
Y2hpbmVUaHJlYWRzTG9ja2VyKSkgewotICAgICAgICAgICAgdW5hYmxlVG9BY3F1aXJlTWFjaGlu
ZVRocmVhZHNMb2NrID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBWTUluc3BlY3Rvcjo6RnVu
Y3RvclN0YXR1czo6Q29udGludWU7IC8vIFRyeSBuZXh0IFZNLgotICAgICAgICB9Ci0KLSAgICAg
ICAgY29uc3QgYXV0byYgdGhyZWFkTGlzdCA9IG1hY2hpbmVUaHJlYWRzLnRocmVhZHNMaXN0SGVh
ZChtYWNoaW5lVGhyZWFkc0xvY2tlcik7Ci0gICAgICAgIGZvciAoTWFjaGluZVRocmVhZHM6Ok1h
Y2hpbmVUaHJlYWQqIHRocmVhZCA9IHRocmVhZExpc3QuaGVhZCgpOyB0aHJlYWQ7IHRocmVhZCA9
IHRocmVhZC0+bmV4dCgpKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aHJlYWQtPnN0
YWNrQmFzZSgpKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRocmVhZC0+c3RhY2tFbmQo
KSk7Ci0gICAgICAgICAgICBpZiAoc3RhY2tQb2ludGVyIDw9IHRocmVhZC0+c3RhY2tCYXNlKCkg
JiYgc3RhY2tQb2ludGVyID49IHRocmVhZC0+c3RhY2tFbmQoKSkgewotICAgICAgICAgICAgICAg
IGFjdGl2ZVZNID0gJnZtOwotICAgICAgICAgICAgICAgIHN0YWNrQm91bmRzID0gU3RhY2tCb3Vu
ZHModGhyZWFkLT5zdGFja0Jhc2UoKSwgdGhyZWFkLT5zdGFja0VuZCgpKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gVk1JbnNwZWN0b3I6OkZ1bmN0b3JTdGF0dXM6OkRvbmU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFZNSW5zcGVjdG9yOjpGdW5jdG9yU3RhdHVz
OjpDb250aW51ZTsKLSAgICB9KTsKLQotICAgIGlmICghYWN0aXZlVk0gJiYgdW5hYmxlVG9BY3F1
aXJlTWFjaGluZVRocmVhZHNMb2NrKQotICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoVk1U
cmFwczo6RXJyb3I6OkxvY2tVbmF2YWlsYWJsZSk7Ci0gICAgcmV0dXJuIFZNQW5kU3RhY2tCb3Vu
ZHMgeyBhY3RpdmVWTSwgc3RhY2tCb3VuZHMgfTsKLX0KLQotc3RhdGljIHZvaWQgaW5zdGFsbFNp
Z25hbEhhbmRsZXIoKQotewotICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6QmFkQWNj
ZXNzLCBbXSAoU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykg
LT4gU2lnbmFsQWN0aW9uIHsKLSAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHJlZ2lzdGVy
cyk7Ci0KLSAgICAgICAgaWYgKCFpc0pJVFBDKGNvbnRleHQudHJhcFBDKSkKLSAgICAgICAgICAg
IHJldHVybiBTaWduYWxBY3Rpb246Ok5vdEhhbmRsZWQ7Ci0KLSAgICAgICAgLy8gRklYTUU6IFRo
aXMgY3VycmVudGx5IGVhdHMgYWxsIHRyYXBzIGluY2x1ZGluZyBqaXQgYXNzZXJ0cyB3ZSBzaG91
bGQgbWFrZSBzdXJlIHRoaXMKLSAgICAgICAgLy8gYWx3YXlzIHdvcmtzLiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxMDM5Ci0gICAgICAgIGF1dG8gYWN0aXZlVk1B
bmRTdGFja0JvdW5kcyA9IGZpbmRBY3RpdmVWTUFuZFN0YWNrQm91bmRzKGNvbnRleHQpOwotICAg
ICAgICBpZiAoIWFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMpCi0gICAgICAgICAgICByZXR1cm4gU2ln
bmFsQWN0aW9uOjpIYW5kbGVkOyAvLyBMZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkgYWdhaW4gbGF0
ZXIuCi0KLSAgICAgICAgVk0qIHZtID0gYWN0aXZlVk1BbmRTdGFja0JvdW5kcy52YWx1ZSgpLnZt
OwotICAgICAgICBpZiAodm0pIHsKLSAgICAgICAgICAgIFZNVHJhcHMmIHRyYXBzID0gdm0tPnRy
YXBzKCk7Ci0gICAgICAgICAgICBpZiAoIXRyYXBzLm5lZWRUcmFwSGFuZGxpbmcoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpIYW5kbGVkOyAvLyBUaGUgcG9sbGluZyBj
b2RlIGJlYXQgdXMgdG8gaGFuZGxpbmcgdGhlIHRyYXAgYWxyZWFkeS4KLQotICAgICAgICAgICAg
YXV0byBleHBlY3RlZFN1Y2Nlc3MgPSB0cmFwcy50cnlKZXR0aXNvbkNvZGVCbG9ja3NPblN0YWNr
KGNvbnRleHQpOwotICAgICAgICAgICAgaWYgKCFleHBlY3RlZFN1Y2Nlc3MpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6SGFuZGxlZDsgLy8gTGV0IHRoZSBTaWduYWxTZW5k
ZXIgdHJ5IGFnYWluIGxhdGVyLgotICAgICAgICAgICAgaWYgKGV4cGVjdGVkU3VjY2Vzcy52YWx1
ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246OkhhbmRsZWQ7IC8vIFdl
J3ZlIHN1Y2Nlc3MgamV0dGlzb24gdGhlIGNvZGVCbG9ja3MuCi0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gU2lnbmFsQWN0aW9uOjpIYW5kbGVkOwotICAgIH0pOwotfQotCi1BTFdBWVNfSU5M
SU5FIHN0YXRpYyBDYWxsRnJhbWUqIHNhbml0aXplZFRvcENhbGxGcmFtZShDYWxsRnJhbWUqIHRv
cENhbGxGcmFtZSkKK2lubGluZSBDYWxsRnJhbWUqIHNhbml0aXplZFRvcENhbGxGcmFtZShDYWxs
RnJhbWUqIHRvcENhbGxGcmFtZSkKIHsKICNpZiAhZGVmaW5lZChOREVCVUcpICYmICFDUFUoQVJN
KSAmJiAhQ1BVKE1JUFMpCiAgICAgLy8gcHJlcGFyZUZvckV4dGVybmFsQ2FsbCgpIGluIERGR1Nw
ZWN1bGF0aXZlSklULmggbWF5IHNldCB0b3BDYWxsRnJhbWUgdG8gYSBiYWQgd29yZApAQCAtMTgz
LDI4ICsxMDcsMTcgQEAgdm9pZCBWTVRyYXBzOjp0cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKFNp
Z25hbENvbnRleHQmIGNvbnRleHQsIFN0YWNrQm91bmRzIHN0YWMKIAogICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxDYWxsRnJhbWUqPihjb250ZXh0LmZyYW1lUG9p
bnRlcik7CiAKLSAgICBhdXRvIGNvZGVCbG9ja1NldExvY2tlciA9IHRyeUhvbGRMb2NrKHZtLmhl
YXAuY29kZUJsb2NrU2V0KCkuZ2V0TG9jaygpKTsKKyAgICBhdXRvJiBsb2NrID0gdm0uaGVhcC5j
b2RlQmxvY2tTZXQoKS5nZXRMb2NrKCk7CisgICAgLy8gSWYgdGhlIHRhcmdldCB0aHJlYWQgaXMg
aW4gQysrIGNvZGUgaXQgbWlnaHQgYmUgaG9sZGluZyB0aGUgY29kZUJsb2NrU2V0IGxvY2suCisg
ICAgLy8gaWYgaXQncyBpbiBKSVQgY29kZSB0aGVuIGl0IGNhbm5vdCBiZSBob2xkaW5nIHRoYXQg
bG9jayBidXQgdGhlIEdDIG1pZ2h0IGJlLgorICAgIGF1dG8gY29kZUJsb2NrU2V0TG9ja2VyID0g
aXNKSVRQQyh0cmFwUEMpID8gaG9sZExvY2sobG9jaykgOiB0cnlIb2xkTG9jayhsb2NrKTsKICAg
ICBpZiAoIWNvZGVCbG9ja1NldExvY2tlcikKICAgICAgICAgcmV0dXJuOyAvLyBMZXQgdGhlIFNp
Z25hbFNlbmRlciB0cnkgYWdhaW4gbGF0ZXIuCiAKLSAgICB7Ci0gICAgICAgIGF1dG8mIGFsbG9j
YXRvciA9IEV4ZWN1dGFibGVBbGxvY2F0b3I6OnNpbmdsZXRvbigpOwotICAgICAgICBhdXRvIGFs
bG9jYXRvckxvY2tlciA9IHRyeUhvbGRMb2NrKGFsbG9jYXRvci5nZXRMb2NrKCkpOwotICAgICAg
ICBpZiAoIWFsbG9jYXRvckxvY2tlcikKLSAgICAgICAgICAgIHJldHVybjsgLy8gTGV0IHRoZSBT
aWduYWxTZW5kZXIgdHJ5IGFnYWluIGxhdGVyLgotCi0gICAgICAgIGlmIChhbGxvY2F0b3IuaXNW
YWxpZEV4ZWN1dGFibGVNZW1vcnkoYWxsb2NhdG9yTG9ja2VyLCB0cmFwUEMpKSB7Ci0gICAgICAg
ICAgICBpZiAodm0uaXNFeGVjdXRpbmdJblJlZ0V4cEpJVCkgewotICAgICAgICAgICAgICAgIC8v
IFdlIG5lZWQgdG8gZG8gdGhpcyBiZWNhdXNlIGEgcmVnRXhwSklUIGZyYW1lIGlzbid0IGEgSlMg
ZnJhbWUuCi0gICAgICAgICAgICAgICAgY2FsbEZyYW1lID0gc2FuaXRpemVkVG9wQ2FsbEZyYW1l
KHZtLnRvcENhbGxGcmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoTExJ
bnQ6OmlzTExJbnRQQyh0cmFwUEMpKSB7Ci0gICAgICAgICAgICAvLyBUaGUgZnJhbWVQb2ludGVy
IHByb2JhYmx5IGhhcyB0aGUgY2FsbEZyYW1lLiBXZSdyZSBnb29kIHRvIGdvLgotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgLy8gV2UgcmVzb3J0IHRvIHRvcENhbGxGcmFtZSB0byBzZWUg
aWYgd2UgY2FuIGdldCBhbnl0aGluZwotICAgICAgICAgICAgLy8gdXNlZnVsLiBXZSB1c3VhbGx5
IGdldCBoZXJlIHdoZW4gd2UncmUgZXhlY3V0aW5nIEMgY29kZS4KLSAgICAgICAgICAgIGNhbGxG
cmFtZSA9IHNhbml0aXplZFRvcENhbGxGcmFtZSh2bS50b3BDYWxsRnJhbWUpOwotICAgICAgICB9
CisgICAgaWYgKCFpc0pJVFBDKHRyYXBQQykgJiYgIUxMSW50Ojppc0xMSW50UEModHJhcFBDKSkg
eworICAgICAgICAvLyBXZSByZXNvcnQgdG8gdG9wQ2FsbEZyYW1lIHRvIHNlZSBpZiB3ZSBjYW4g
Z2V0IGFueXRoaW5nCisgICAgICAgIC8vIHVzZWZ1bC4gV2UgdXN1YWxseSBnZXQgaGVyZSB3aGVu
IHdlJ3JlIGV4ZWN1dGluZyBDIGNvZGUuCisgICAgICAgIGNhbGxGcmFtZSA9IHNhbml0aXplZFRv
cENhbGxGcmFtZSh2bS50b3BDYWxsRnJhbWUpOwogICAgIH0KIAogICAgIENvZGVCbG9jayogZm91
bmRDb2RlQmxvY2sgPSBudWxscHRyOwpAQCAtMjQwLDcgKzE1Myw3IEBAIHZvaWQgVk1UcmFwczo6
dHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyhTaWduYWxDb250ZXh0JiBjb250ZXh0LCBTdGFja0Jv
dW5kcyBzdGFjCiAgICAgfQogCiAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChmb3Vu
ZENvZGVCbG9jay0+aml0VHlwZSgpKSkgewotICAgICAgICBhdXRvIGxvY2tlciA9IHRyeUhvbGRM
b2NrKG1fbG9jayk7CisgICAgICAgIGF1dG8gbG9ja2VyID0gdHJ5SG9sZExvY2soKm1fbG9jayk7
CiAgICAgICAgIGlmICghbG9ja2VyKQogICAgICAgICAgICAgcmV0dXJuOyAvLyBMZXQgdGhlIFNp
Z25hbFNlbmRlciB0cnkgYWdhaW4gbGF0ZXIuCiAKQEAgLTI1MCw0NSArMTYzLDYgQEAgdm9pZCBW
TVRyYXBzOjp0cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKFNpZ25hbENvbnRleHQmIGNvbnRleHQs
IFN0YWNrQm91bmRzIHN0YWMKICAgICB9CiB9CiAKLWF1dG8gVk1UcmFwczo6dHJ5SmV0dGlzb25D
b2RlQmxvY2tzT25TdGFjayhTaWduYWxDb250ZXh0JiBjb250ZXh0KSAtPiBFeHBlY3RlZDxib29s
LCBFcnJvcj4KLXsKLSAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwotICAgIGF1dG8gY29kZUJsb2Nr
U2V0TG9ja2VyID0gdHJ5SG9sZExvY2sodm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5nZXRMb2NrKCkp
OwotICAgIGlmICghY29kZUJsb2NrU2V0TG9ja2VyKQotICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoRXJyb3I6OkxvY2tVbmF2YWlsYWJsZSk7Ci0KLSAgICBDYWxsRnJhbWUqIHRvcENhbGxG
cmFtZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEZyYW1lKj4oY29udGV4dC5mcmFtZVBvaW50ZXIp
OwotICAgIHZvaWQqIHRyYXBQQyA9IGNvbnRleHQudHJhcFBDOwotICAgIGJvb2wgdHJhcFBDSXNW
TVRyYXAgPSBmYWxzZTsKLSAgICAKLSAgICB2bS5oZWFwLmZvckVhY2hDb2RlQmxvY2tJZ25vcmlu
Z0pJVFBsYW5zKGNvZGVCbG9ja1NldExvY2tlciwgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykg
ewotICAgICAgICBpZiAoIWNvZGVCbG9jay0+aGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMo
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gTm90IGZvdW5kIHlldC4KLQotICAgICAg
ICBKSVRDb2RlKiBqaXRDb2RlID0gY29kZUJsb2NrLT5qaXRDb2RlKCkuZ2V0KCk7Ci0gICAgICAg
IEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0Q29kZS0+aml0VHlwZSgpKSk7Ci0g
ICAgICAgIGlmIChqaXRDb2RlLT5kZmdDb21tb24oKS0+aXNWTVRyYXBCcmVha3BvaW50KHRyYXBQ
QykpIHsKLSAgICAgICAgICAgIHRyYXBQQ0lzVk1UcmFwID0gdHJ1ZTsKLSAgICAgICAgICAgIC8v
IEF0IHRoZSBjb2RlQmxvY2sgdHJhcCBwb2ludCwgd2UncmUgZ3VhcmFudGVlZCB0aGF0OgotICAg
ICAgICAgICAgLy8gMS4gdGhlIHBjIGlzIG5vdCBpbiB0aGUgbWlkZGxlIG9mIGFueSByYW5nZSBv
ZiBKSVQgY29kZSB3aGljaCBpbnZhbGlkYXRpb24gcG9pbnRzCi0gICAgICAgICAgICAvLyAgICBt
YXkgd3JpdGUgb3Zlci4gSGVuY2UsIGl0J3Mgbm93IHNhZmUgdG8gcGF0Y2ggdGhvc2UgaW52YWxp
ZGF0aW9uIHBvaW50cyBhbmQKLSAgICAgICAgICAgIC8vICAgIGpldHRpc29uIHRoZSBjb2RlQmxv
Y2tzLgotICAgICAgICAgICAgLy8gMi4gVGhlIHRvcCBmcmFtZSBtdXN0IGJlIGFuIG9wdGltaXpl
ZCBKUyBmcmFtZS4KLSAgICAgICAgICAgIEFTU0VSVChjb2RlQmxvY2sgPT0gdG9wQ2FsbEZyYW1l
LT5jb2RlQmxvY2soKSk7Ci0gICAgICAgICAgICBjb2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVy
OjpKZXR0aXNvbkR1ZVRvVk1UcmFwcyk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gTm90IGZvdW5kIHlldC4KLSAgICB9KTsK
LQotICAgIGlmICghdHJhcFBDSXNWTVRyYXApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGludmFsaWRhdGVDb2RlQmxvY2tzT25TdGFjayhjb2RlQmxvY2tTZXRMb2NrZXIsIHRvcENhbGxG
cmFtZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHZvaWQgVk1UcmFwczo6aW52YWxpZGF0ZUNv
ZGVCbG9ja3NPblN0YWNrKCkKIHsKICAgICBpbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhY2sodm0o
KS50b3BDYWxsRnJhbWUpOwpAQCAtMzIxLDEwNSArMTk1LDEzNSBAQCB2b2lkIFZNVHJhcHM6Omlu
dmFsaWRhdGVDb2RlQmxvY2tzT25TdGFjayhMb2NrZXI8TG9jaz4mLCBFeGVjU3RhdGUqIHRvcENh
bGxGcmFtZQogICAgIH0KIH0KIAotI2VuZGlmIC8vIEVOQUJMRShTSUdOQUxfQkFTRURfVk1fVFJB
UFMpCi0KLXZvaWQgVk1UcmFwczo6d2lsbERlc3Ryb3lWTSgpCi17Ci0gICAgbV9pc1NodXR0aW5n
RG93biA9IHRydWU7Ci0gICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSNpZiBFTkFCTEUoU0lH
TkFMX0JBU0VEX1ZNX1RSQVBTKQotICAgIHdoaWxlICghbV9zaWduYWxTZW5kZXJzLmlzRW1wdHko
KSkgewotICAgICAgICBSZWZQdHI8U2lnbmFsU2VuZGVyPiBzZW5kZXI7Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gYmUgaG9sZGluZyB0aGUgVk1UcmFwcyBsb2Nr
IHdoZW4gY2FsbGluZwotICAgICAgICAgICAgLy8gU2lnbmFsU2VuZGVyOjp3aWxsRGVzdHJveVZN
KCkgYmVjYXVzZSBTaWduYWxTZW5kZXI6OndpbGxEZXN0cm95Vk0oKQotICAgICAgICAgICAgLy8g
d2lsbCBhY3F1aXJlIHRoZSBTaWduYWxTZW5kZXIgbG9jaywgYW5kIFNpZ25hbFNlbmRlcjo6c2Vu
ZCgpIG5lZWRzCi0gICAgICAgICAgICAvLyB0byBhY3F1aXJlIHRoZXNlIGxvY2tzIGluIHRoZSBv
cHBvc2l0ZSBvcmRlci4KLSAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2Nr
KTsKLSAgICAgICAgICAgIHNlbmRlciA9IG1fc2lnbmFsU2VuZGVycy50YWtlQW55KCk7Ci0gICAg
ICAgICAgICBpZiAoIXNlbmRlcikKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBzZW5kZXItPndpbGxEZXN0cm95Vk0oKTsKK2NsYXNzIFZNVHJhcHM6OlNpZ25hbFNl
bmRlciBmaW5hbCA6IHB1YmxpYyBBdXRvbWF0aWNUaHJlYWQgeworcHVibGljOgorICAgIHVzaW5n
IEJhc2UgPSBBdXRvbWF0aWNUaHJlYWQ7CisgICAgU2lnbmFsU2VuZGVyKGNvbnN0IEFic3RyYWN0
TG9ja2VyJiBsb2NrZXIsIFZNJiB2bSkKKyAgICAgICAgOiBCYXNlKGxvY2tlciwgdm0udHJhcHMo
KS5tX2xvY2ssIHZtLnRyYXBzKCkubV90cmFwU2V0KQorICAgICAgICAsIG1fdm0odm0pCisgICAg
eworICAgICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICAgICAgc3RkOjpjYWxs
X29uY2Uob25jZSwgW10geworICAgICAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFs
OjpCYWRBY2Nlc3MsIFtdIChTaWduYWwsIFNpZ0luZm8mLCBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVn
aXN0ZXJzKSAtPiBTaWduYWxBY3Rpb24geworICAgICAgICAgICAgICAgIFNpZ25hbENvbnRleHQg
Y29udGV4dChyZWdpc3RlcnMpOworCisgICAgICAgICAgICAgICAgaWYgKCFpc0pJVFBDKGNvbnRl
eHQudHJhcFBDKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90
SGFuZGxlZDsKKworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY3VycmVudENvZGVCbG9jayA9
IERGRzo6Y29kZUJsb2NrRm9yVk1UcmFwUEMoY29udGV4dC50cmFwUEMpOworICAgICAgICAgICAg
ICAgIEFTU0VSVChjdXJyZW50Q29kZUJsb2NrLT5oYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50
cygpKTsKKyAgICAgICAgICAgICAgICBWTSYgdm0gPSAqY3VycmVudENvZGVCbG9jay0+dm0oKTsK
KyAgICAgICAgICAgICAgICBBU1NFUlQodm0udHJhcHMoKS5uZWVkVHJhcEhhbmRsaW5nKCkpOyAv
LyBXZSBzaG91bGQgaGF2ZSBhbHJlYWR5IGpldHRpc29uZWQgdGhpcyBjb2RlIGJsb2NrIHdoZW4g
d2UgaGFuZGxlZCB0aGUgdHJhcC4KKworICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBpbiBKSVQg
Y29kZSBzbyBpdCdzIHNhZmUgdG8gYXF1aXJlIHRoaXMgbG9jay4KKyAgICAgICAgICAgICAgICBh
dXRvIGNvZGVCbG9ja1NldExvY2tlciA9IGhvbGRMb2NrKHZtLmhlYXAuY29kZUJsb2NrU2V0KCku
Z2V0TG9jaygpKTsKKyAgICAgICAgICAgICAgICBib29sIHNhd0N1cnJlbnRDb2RlQmxvY2sgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICB2bS5oZWFwLmZvckVhY2hDb2RlQmxvY2tJZ25vcmluZ0pJ
VFBsYW5zKGNvZGVCbG9ja1NldExvY2tlciwgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewor
ICAgICAgICAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGpldHRpc29uIGFsbCBjb2RlIGJsb2Nr
cyB0aGF0IGhhdmUgdm0gdHJhcHMgYnJlYWtwb2ludHMsIG90aGVyd2lzZSB3ZSBjb3VsZCBoaXQg
dGhlbSBsYXRlci4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+aGFzSW5zdGFs
bGVkVk1UcmFwQnJlYWtwb2ludHMoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1
cnJlbnRDb2RlQmxvY2sgPT0gY29kZUJsb2NrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNhd0N1cnJlbnRDb2RlQmxvY2sgPSB0cnVlOworCisgICAgICAgICAgICAgICAgICAgICAgICBj
b2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVk1UcmFwcyk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNhd0N1cnJl
bnRDb2RlQmxvY2spOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVybiBT
aWduYWxBY3Rpb246OkhhbmRsZWQ7IC8vIFdlJ3ZlIHN1Y2Nlc3NmdWxseSBqZXR0aXNvbmVkIHRo
ZSBjb2RlQmxvY2tzLgorICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOwogICAgIH0KLSAgICBB
U1NFUlQobV9zaWduYWxTZW5kZXJzLmlzRW1wdHkoKSk7Ci0jZW5kaWYKLX0KIAotI2lmIEVOQUJM
RShTSUdOQUxfQkFTRURfVk1fVFJBUFMpCi12b2lkIFZNVHJhcHM6OmFkZFNpZ25hbFNlbmRlcihW
TVRyYXBzOjpTaWduYWxTZW5kZXIqIHNlbmRlcikKLXsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKG1fbG9jayk7Ci0gICAgbV9zaWduYWxTZW5kZXJzLmFkZChzZW5kZXIpOwotfQorICAgIFZN
VHJhcHMmIHRyYXBzKCkgeyByZXR1cm4gbV92bS50cmFwcygpOyB9CiAKLXZvaWQgVk1UcmFwczo6
cmVtb3ZlU2lnbmFsU2VuZGVyKFZNVHJhcHM6OlNpZ25hbFNlbmRlciogc2VuZGVyKQotewotICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICBtX3NpZ25hbFNlbmRlcnMucmVt
b3ZlKHNlbmRlcik7Ci19Citwcm90ZWN0ZWQ6CisgICAgUG9sbFJlc3VsdCBwb2xsKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICh0cmFwcygpLm1faXNT
aHV0dGluZ0Rvd24pCisgICAgICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6U3RvcDsKIAotdm9p
ZCBWTVRyYXBzOjpTaWduYWxTZW5kZXI6OndpbGxEZXN0cm95Vk0oKQotewotICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICBtX3ZtID0gbnVsbHB0cjsKLX0KKyAgICAgICAg
aWYgKCF0cmFwcygpLm5lZWRUcmFwSGFuZGxpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBQb2xs
UmVzdWx0OjpXYWl0OwogCi12b2lkIFZNVHJhcHM6OlNpZ25hbFNlbmRlcjo6c2VuZCgpCi17Ci0g
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7Ci0gICAgc3RkOjpjYWxsX29uY2Uob25jZSwg
W10gewotICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcigpOwotICAgIH0pOworICAgICAgICAv
LyBXZSBrbm93IHRoYXQgbm8gdHJhcCBjb3VsZCBoYXZlIGJlZW4gcHJvY2Vzc2VkIGFuZCByZS1h
ZGRlZCBiZWNhdXNlIHdlIGFyZSBob2xkaW5nIHRoZSBsb2NrLgorICAgICAgICBpZiAodm1Jc0lu
YWN0aXZlKG1fdm0pKQorICAgICAgICAgICAgcmV0dXJuIFBvbGxSZXN1bHQ6OldhaXQ7CisgICAg
ICAgIHJldHVybiBQb2xsUmVzdWx0OjpXb3JrOworICAgIH0KKworICAgIFdvcmtSZXN1bHQgd29y
aygpIG92ZXJyaWRlCisgICAgewogCi0gICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgLy8gV2Ug
bmVlZCBhIG5lc3RlZCBzY29wZSBzbyB0aGF0IHdlJ2xsIHJlbGVhc2UgdGhlIGxvY2sgYmVmb3Jl
IHdlIHNsZWVwIGJlbG93LgotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1fbG9jayk7Ci0gICAgICAgICAgICBpZiAoIW1fdm0pCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgICAgIFZNJiB2bSA9ICptX3ZtOwotICAgICAgICAgICAgYXV0byBv
cHRpb25hbE93bmVyVGhyZWFkID0gdm0ub3duZXJUaHJlYWQoKTsKLSAgICAgICAgICAgIGlmIChv
cHRpb25hbE93bmVyVGhyZWFkKSB7Ci0gICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoKm9wdGlv
bmFsT3duZXJUaHJlYWQudmFsdWUoKS5nZXQoKSwgW10gKFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdp
c3RlcnMpIC0+IHZvaWQgewotICAgICAgICAgICAgICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRl
eHQocmVnaXN0ZXJzKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBhY3RpdmVWTUFuZFN0YWNr
Qm91bmRzID0gZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoY29udGV4dCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChhY3RpdmVWTUFuZFN0YWNrQm91bmRzKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBWTSogdm0gPSBhY3RpdmVWTUFuZFN0YWNrQm91bmRzLnZhbHVlKCkudm07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodm0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTdGFja0JvdW5kcyBzdGFja0JvdW5kcyA9IGFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMudmFsdWUo
KS5zdGFja0JvdW5kczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWTVRyYXBzJiB0cmFw
cyA9IHZtLT50cmFwcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFwcy5u
ZWVkVHJhcEhhbmRsaW5nKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYXBz
LnRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMoY29udGV4dCwgc3RhY2tCb3VuZHMpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICBWTSYgdm0gPSBtX3ZtOworCisgICAgICAgIGF1
dG8gb3B0aW9uYWxPd25lclRocmVhZCA9IHZtLm93bmVyVGhyZWFkKCk7CisgICAgICAgIGlmIChv
cHRpb25hbE93bmVyVGhyZWFkKSB7CisgICAgICAgICAgICBzZW5kTWVzc2FnZSgqb3B0aW9uYWxP
d25lclRocmVhZC52YWx1ZSgpLmdldCgpLCBbJl0gKFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3Rl
cnMpIC0+IHZvaWQgeworICAgICAgICAgICAgICAgIFNpZ25hbENvbnRleHQgY29udGV4dChyZWdp
c3RlcnMpOworCisgICAgICAgICAgICAgICAgYXV0byBvd25lclRocmVhZCA9IHZtLmFwaUxvY2so
KS5vd25lclRocmVhZCgpOworICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IG1lc3Mgd2l0aCBh
IHRocmVhZCB1bmxlc3MgaXQncyB0aGUgb25lIHdlIHN1c3BlbmRlZC4KKyAgICAgICAgICAgICAg
ICBpZiAoIW93bmVyVGhyZWFkIHx8IG93bmVyVGhyZWFkICE9IG9wdGlvbmFsT3duZXJUaHJlYWQp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIFRocmVhZCYg
dGhyZWFkID0gKm93bmVyVGhyZWFkLT5nZXQoKTsKKyAgICAgICAgICAgICAgICBTdGFja0JvdW5k
cyBzdGFja0JvdW5kcyA9IFN0YWNrQm91bmRzOjplbXB0eUJvdW5kcygpOworICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gdXNlIHRoZSBt
YWNoaW5lIHRocmVhZHMgYmVjYXVzZSBpdCBpcyB0aGUgb25seSBub24tVExTIHNvdXJjZQorICAg
ICAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIHN0YWNrIGJvdW5kcyBvZiB0aGlzIHRocmVhZC4g
V2Ugc2hvdWxkIGtlZXAgaW4gb24gdGhlIFdURjo6VGhyZWFkIGluc3RlYWQuCisgICAgICAgICAg
ICAgICAgICAgIE1hY2hpbmVUaHJlYWRzJiBtYWNoaW5lVGhyZWFkcyA9IHZtLmhlYXAubWFjaGlu
ZVRocmVhZHMoKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBtYWNoaW5lVGhyZWFkc0xvY2sg
PSB0cnlIb2xkTG9jayhtYWNoaW5lVGhyZWFkcy5nZXRMb2NrKCkpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIW1hY2hpbmVUaHJlYWRzTG9jaykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsgLy8gVHJ5IGFnYWluIGxhdGVyLgorCisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHRo
cmVhZExpc3QgPSBtYWNoaW5lVGhyZWFkcy50aHJlYWRzTGlzdEhlYWQobWFjaGluZVRocmVhZHNM
b2NrKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRo
cmVhZCogbWFjaGluZVRocmVhZCA9IHRocmVhZExpc3QuaGVhZCgpOyBtYWNoaW5lVGhyZWFkOyBt
YWNoaW5lVGhyZWFkID0gbWFjaGluZVRocmVhZC0+bmV4dCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobWFjaGluZVRocmVhZC0+bV90aHJlYWQuZ2V0KCkgPT0gdGhyZWFkKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQm91bmRzID0gU3RhY2tCb3VuZHMobWFjaGlu
ZVRocmVhZC0+c3RhY2tCYXNlKCksIG1hY2hpbmVUaHJlYWQtPnN0YWNrRW5kKCkpOwogICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh2bUlzSW5hY3RpdmUodm0pKQot
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VCghc3RhY2tCb3VuZHMuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIFZNVHJhcHM6Ok1hc2sgbWFzayhtX2V2ZW50VHlwZSk7Ci0gICAgICAgICAgICBpZiAoIXZt
Lm5lZWRUcmFwSGFuZGxpbmcobWFzaykpCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgdm0udHJhcHMoKS50cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKGNvbnRleHQsIHN0
YWNrQm91bmRzKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9Ci0KKyAgICAgICAgCiAgICAg
ICAgIHNsZWVwTVMoMSk7CisgICAgICAgIHJldHVybiBXb3JrUmVzdWx0OjpDb250aW51ZTsKICAg
ICB9CisgICAgCitwcml2YXRlOgorCisgICAgVk0mIG1fdm07Cit9OwogCi0gICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAgIGlmIChtX3ZtKQotICAgICAgICBtX3ZtLT50cmFw
cygpLnJlbW92ZVNpZ25hbFNlbmRlcih0aGlzKTsKLX0KICNlbmRpZiAvLyBFTkFCTEUoU0lHTkFM
X0JBU0VEX1ZNX1RSQVBTKQogCit2b2lkIFZNVHJhcHM6OndpbGxEZXN0cm95Vk0oKQoreworICAg
IG1faXNTaHV0dGluZ0Rvd24gPSB0cnVlOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Cisj
aWYgRU5BQkxFKFNJR05BTF9CQVNFRF9WTV9UUkFQUykKKyAgICBpZiAobV9zaWduYWxTZW5kZXIp
IHsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jaygqbV9sb2Nr
KTsKKyAgICAgICAgICAgIGlmICghbV9zaWduYWxTZW5kZXItPnRyeVN0b3AobG9ja2VyKSkKKyAg
ICAgICAgICAgICAgICBtX3RyYXBTZXQtPm5vdGlmeUFsbChsb2NrZXIpOworICAgICAgICB9Cisg
ICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICAgICAgbV9zaWduYWxTZW5kZXIt
PmpvaW4oKTsKKyAgICAgICAgbV9zaWduYWxTZW5kZXIgPSBudWxscHRyOworICAgIH0KKyNlbmRp
ZgorfQorCiB2b2lkIFZNVHJhcHM6OmZpcmVUcmFwKFZNVHJhcHM6OkV2ZW50VHlwZSBldmVudFR5
cGUpCiB7CiAgICAgQVNTRVJUKCF2bSgpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkp
OwogICAgIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKCptX2xvY2spOwogICAgICAgICBBU1NFUlQoIW1faXNT
aHV0dGluZ0Rvd24pOwogICAgICAgICBzZXRUcmFwRm9yRXZlbnQobG9ja2VyLCBldmVudFR5cGUp
OwogICAgICAgICBtX25lZWRUb0ludmFsaWRhdGVkQ29kZUJsb2NrcyA9IHRydWU7CkBAIC00MzAs
MTEgKzMzNCwxMCBAQCB2b2lkIFZNVHJhcHM6OmZpcmVUcmFwKFZNVHJhcHM6OkV2ZW50VHlwZSBl
dmVudFR5cGUpCiAgICAgICAgIC8vIHNlbmRTaWduYWwoKSBjYW4gbG9vcCB1bnRpbCBpdCBoYXMg
Y29uZmlybWF0aW9uIHRoYXQgdGhlIG11dGF0b3IgdGhyZWFkCiAgICAgICAgIC8vIGhhcyByZWNl
aXZlZCB0aGUgdHJhcCByZXF1ZXN0LiBXZSdsbCBjYWxsIGl0IGZyb20gYW5vdGhlciB0cmFwIHNv
IHRoYXQKICAgICAgICAgLy8gZmlyZVRyYXAoKSBkb2VzIG5vdCBibG9jay4KLSAgICAgICAgUmVm
UHRyPFNpZ25hbFNlbmRlcj4gc2VuZGVyID0gYWRvcHRSZWYobmV3IFNpZ25hbFNlbmRlcih2bSgp
LCBldmVudFR5cGUpKTsKLSAgICAgICAgYWRkU2lnbmFsU2VuZGVyKHNlbmRlci5nZXQoKSk7Ci0g
ICAgICAgIFRocmVhZDo6Y3JlYXRlKCJqc2Mudm10cmFwcy5zaWduYWxsaW5nLnRocmVhZCIsIFtz
ZW5kZXJdIHsKLSAgICAgICAgICAgIHNlbmRlci0+c2VuZCgpOwotICAgICAgICB9KTsKKyAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jaygqbV9sb2NrKTsKKyAgICAgICAgaWYgKCFtX3NpZ25h
bFNlbmRlcikKKyAgICAgICAgICAgIG1fc2lnbmFsU2VuZGVyID0gYWRvcHRSZWYobmV3IFNpZ25h
bFNlbmRlcihsb2NrZXIsIHZtKCkpKTsKKyAgICAgICAgbV90cmFwU2V0LT5ub3RpZnlBbGwobG9j
a2VyKTsKICAgICB9CiAjZW5kaWYKIH0KQEAgLTQ0NCw2ICszNDcsMTYgQEAgdm9pZCBWTVRyYXBz
OjpoYW5kbGVUcmFwcyhFeGVjU3RhdGUqIGV4ZWMsIFZNVHJhcHM6Ok1hc2sgbWFzaykKICAgICBW
TSYgdm0gPSB0aGlzLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAorICAgIHsKKyAgICAgICAgYXV0byBjb2RlQmxvY2tTZXRMb2NrZXIgPSBob2xkTG9j
ayh2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmdldExvY2soKSk7CisgICAgICAgIHZtLmhlYXAuZm9y
RWFjaENvZGVCbG9ja0lnbm9yaW5nSklUUGxhbnMoY29kZUJsb2NrU2V0TG9ja2VyLCBbJl0gKENv
ZGVCbG9jayogY29kZUJsb2NrKSB7CisgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGpldHRpc29u
IGFsbCBjb2RlIGJsb2NrcyB0aGF0IGhhdmUgdm0gdHJhcHMgYnJlYWtwb2ludHMsIG90aGVyd2lz
ZSB3ZSBjb3VsZCBoaXQgdGhlbSBsYXRlci4KKyAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPmhh
c0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkpCisgICAgICAgICAgICAgICAgY29kZUJsb2Nr
LT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1ZNVHJhcHMpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9KTsKKyAgICB9CisKICAgICBBU1NFUlQobmVlZFRyYXBI
YW5kbGluZyhtYXNrKSk7CiAgICAgd2hpbGUgKG5lZWRUcmFwSGFuZGxpbmcobWFzaykpIHsKICAg
ICAgICAgYXV0byBldmVudFR5cGUgPSB0YWtlVG9wUHJpb3JpdHlUcmFwKG1hc2spOwpAQCAtNDYw
LDcgKzM3Myw2IEBAIHZvaWQgVk1UcmFwczo6aGFuZGxlVHJhcHMoRXhlY1N0YXRlKiBleGVjLCBW
TVRyYXBzOjpNYXNrIG1hc2spCiAgICAgICAgICAgICBGQUxMVEhST1VHSDsKIAogICAgICAgICBj
YXNlIE5lZWRUZXJtaW5hdGlvbjoKLSAgICAgICAgICAgIGludmFsaWRhdGVDb2RlQmxvY2tzT25T
dGFjayhleGVjKTsKICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVh
dGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKCZ2bSkpOwogICAgICAgICAgICAgcmV0dXJu
OwogCkBAIC00NzIsNyArMzg0LDcgQEAgdm9pZCBWTVRyYXBzOjpoYW5kbGVUcmFwcyhFeGVjU3Rh
dGUqIGV4ZWMsIFZNVHJhcHM6Ok1hc2sgbWFzaykKIAogYXV0byBWTVRyYXBzOjp0YWtlVG9wUHJp
b3JpdHlUcmFwKFZNVHJhcHM6Ok1hc2sgbWFzaykgLT4gRXZlbnRUeXBlCiB7Ci0gICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soKm1f
bG9jayk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOdW1iZXJPZkV2ZW50VHlwZXM7ICsraSkg
ewogICAgICAgICBFdmVudFR5cGUgZXZlbnRUeXBlID0gc3RhdGljX2Nhc3Q8RXZlbnRUeXBlPihp
KTsKICAgICAgICAgaWYgKGhhc1RyYXBGb3JFdmVudChsb2NrZXIsIGV2ZW50VHlwZSwgbWFzaykp
IHsKQEAgLTQ4Myw0ICszOTUsMTcgQEAgYXV0byBWTVRyYXBzOjp0YWtlVG9wUHJpb3JpdHlUcmFw
KFZNVHJhcHM6Ok1hc2sgbWFzaykgLT4gRXZlbnRUeXBlCiAgICAgcmV0dXJuIEludmFsaWQ7CiB9
CiAKK1ZNVHJhcHM6OlZNVHJhcHMoKQorICAgIDogbV9sb2NrKEJveDxMb2NrPjo6Y3JlYXRlKCkp
CisgICAgLCBtX3RyYXBTZXQoQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpjcmVhdGUoKSkKK3sK
K30KKworVk1UcmFwczo6flZNVHJhcHMoKQoreworI2lmIEVOQUJMRShTSUdOQUxfQkFTRURfVk1f
VFJBUFMpCisgICAgQVNTRVJUKCFtX3NpZ25hbFNlbmRlcik7CisjZW5kaWYKK30KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TVRyYXBzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmgKaW5kZXgg
OWI3MjY0N2FiMjYyM2ViMWM4ODJlMDI2MzZmNGIxYzBiMmEwMjNmOC4uOWIwNmNkZDEyZGI1OWUy
YTA3NDQ1MzgxMjc5YmI3NGYxMzYyYzA0NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk1UcmFwcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNVHJhcHMuaApAQCAtMjUsNiArMjUsOCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUg
PHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVkZSA8
d3RmL0V4cGVjdGVkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYv
TG9jay5oPgpAQCAtODYsMTIgKzg4LDggQEAgcHVibGljOgogICAgICAgICBCaXRGaWVsZCBtX21h
c2s7CiAgICAgfTsKIAotICAgIH5WTVRyYXBzKCkKLSAgICB7Ci0jaWYgRU5BQkxFKFNJR05BTF9C
QVNFRF9WTV9UUkFQUykKLSAgICAgICAgQVNTRVJUKG1fc2lnbmFsU2VuZGVycy5pc0VtcHR5KCkp
OwotI2VuZGlmCi0gICAgfQorICAgIH5WTVRyYXBzKCk7CisgICAgVk1UcmFwcygpOwogCiAgICAg
dm9pZCB3aWxsRGVzdHJveVZNKCk7CiAKQEAgLTExMCw3ICsxMDgsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBoYW5kbGVUcmFwcyhFeGVjU3RhdGUqLCBWTVRyYXBzOjpNYXNrKTsKIAogICAgIHZvaWQg
dHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyhzdHJ1Y3QgU2lnbmFsQ29udGV4dCYsIFN0YWNrQm91
bmRzKTsKLSAgICBFeHBlY3RlZDxib29sLCBFcnJvcj4gdHJ5SmV0dGlzb25Db2RlQmxvY2tzT25T
dGFjayhzdHJ1Y3QgU2lnbmFsQ29udGV4dCYpOwogCiBwcml2YXRlOgogICAgIFZNJiB2bSgpIGNv
bnN0OwpAQCAtMTM0LDIxICsxMzEsOCBAQCBwcml2YXRlOgogICAgIEV2ZW50VHlwZSB0YWtlVG9w
UHJpb3JpdHlUcmFwKE1hc2spOwogCiAjaWYgRU5BQkxFKFNJR05BTF9CQVNFRF9WTV9UUkFQUykK
LSAgICBjbGFzcyBTaWduYWxTZW5kZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2ln
bmFsU2VuZGVyPiB7Ci0gICAgcHVibGljOgotICAgICAgICBTaWduYWxTZW5kZXIoVk0mIHZtLCBF
dmVudFR5cGUgZXZlbnRUeXBlKQotICAgICAgICAgICAgOiBtX3ZtKCZ2bSkKLSAgICAgICAgICAg
ICwgbV9ldmVudFR5cGUoZXZlbnRUeXBlKQotICAgICAgICB7IH0KLQotICAgICAgICB2b2lkIHdp
bGxEZXN0cm95Vk0oKTsKLSAgICAgICAgdm9pZCBzZW5kKCk7Ci0KLSAgICBwcml2YXRlOgotICAg
ICAgICBMb2NrIG1fbG9jazsKLSAgICAgICAgVk0qIG1fdm07Ci0gICAgICAgIEV2ZW50VHlwZSBt
X2V2ZW50VHlwZTsKLSAgICB9OworICAgIGNsYXNzIFNpZ25hbFNlbmRlcjsKKyAgICBmcmllbmQg
Y2xhc3MgU2lnbmFsU2VuZGVyOwogCiAgICAgdm9pZCBpbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3Rh
Y2soKTsKICAgICB2b2lkIGludmFsaWRhdGVDb2RlQmxvY2tzT25TdGFjayhFeGVjU3RhdGUqIHRv
cENhbGxGcmFtZSk7CkBAIC0xNjEsNyArMTQ1LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGludmFs
aWRhdGVDb2RlQmxvY2tzT25TdGFjayhFeGVjU3RhdGUqKSB7IH0KICNlbmRpZgogCi0gICAgTG9j
ayBtX2xvY2s7CisgICAgQm94PExvY2s+IG1fbG9jazsKKyAgICBSZWZQdHI8QXV0b21hdGljVGhy
ZWFkQ29uZGl0aW9uPiBtX3RyYXBTZXQ7CiAgICAgdW5pb24gewogICAgICAgICBCaXRGaWVsZCBt
X25lZWRUcmFwSGFuZGxpbmcgeyAwIH07CiAgICAgICAgIEJpdEZpZWxkIG1fdHJhcHNCaXRGaWVs
ZDsKQEAgLTE3MCw3ICsxNTUsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1NodXR0aW5nRG93
biB7IGZhbHNlIH07CiAKICNpZiBFTkFCTEUoU0lHTkFMX0JBU0VEX1ZNX1RSQVBTKQotICAgIEhh
c2hTZXQ8UmVmUHRyPFNpZ25hbFNlbmRlcj4+IG1fc2lnbmFsU2VuZGVyczsKKyAgICBSZWZQdHI8
U2lnbmFsU2VuZGVyPiBtX3NpZ25hbFNlbmRlcjsKICNlbmRpZgogCiAgICAgZnJpZW5kIGNsYXNz
IExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCAwMWFiOTU4OWNhMjc4ODE4NjZmNGZmOGFiNTExNTYwNzBkN2Ni
OGU3Li5iZWU3ZTZhNzA3YjBhMzhhNzgwYTg2MWQ4Y2NlYTQ2ZTQ5M2ZmMTBmIDEwMDY0NAotLS0g
YS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTctMDYtMjggIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAg
ICAgICAgVk1UcmFwcyBoYXMgc29tZSByYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczOTQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIG5ldyB0ZXN0aW5nIG1vZGUgZm9yIHRlc3RpbmcgdGhl
IFdhdGNoZG9nIHdpdGggb3VyIHN0cmVzcworICAgICAgICB0ZXN0cy4KKworICAgICAgICAqIFNj
cmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHM6CisKIDIwMTctMDYtMjYgIEpvbmF0aGFuIEJlZGFy
ZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0
IHIyMTg3ODMuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3Rz
IGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwppbmRleCBjMDlmMjE4NTIzNzlk
MzNkOGZmNzI3ZGJhYTk3Y2NhMDFjZWQ5N2EzLi5hZjZmNzE1MmRmMDJhZTRkOTk5ZWMyOTY5ODdm
YjY2NjI5ODgwNDdjIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRl
c3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKQEAgLTg5MCw2ICs4
OTAsMTEgQEAgZGVmIHJ1bkZUTEVhZ2VyKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiAg
ICAgcnVuKCJmdGwtZWFnZXIiLCAiLS1haXJGb3JjZUJyaWdnc0FsbG9jYXRvcj10cnVlIiwgKihG
VExfT1BUSU9OUyArIEVBR0VSX09QVElPTlMgKyBDT0xMRUNUX0NPTlRJTlVPVVNMWV9PUFRJT05T
ICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCitkZWYgcnVuRlRMRWFnZXJX
YXRjaGRvZygqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQorICAgIHRpbWVvdXQgPSByYW5k
KDEwMCkKKyAgICBydW4oImZ0bC1lYWdlci13YXRjaGRvZy0je3RpbWVvdXR9IiwgIi0td2F0Y2hk
b2c9I3t0aW1lb3V0fSIsICItLXdhdGNoZG9nLWV4Y2VwdGlvbi1vayIsICooRlRMX09QVElPTlMg
KyBFQUdFUl9PUFRJT05TICsgQ09MTEVDVF9DT05USU5VT1VTTFlfT1BUSU9OUyArIG9wdGlvbmFs
VGVzdFNwZWNpZmljT3B0aW9ucykpCitlbmQKKwogZGVmIHJ1bkZUTEVhZ2VyTm9DSklUVmFsaWRh
dGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKICAgICBydW4oImZ0bC1lYWdlci1uby1j
aml0IiwgIi0tdmFsaWRhdGVHcmFwaD10cnVlIiwgIi0tYWlyRm9yY2VJUkNBbGxvY2F0b3I9dHJ1
ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBFQUdFUl9PUFRJT05TICsgQ09M
TEVDVF9DT05USU5VT1VTTFlfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykp
CiBlbmQK
</data>
<flag name="review"
          id="334984"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
      

    </bug>

</bugzilla>