<?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>166671</bug_id>
          
          <creation_ts>2017-01-03 17:01:02 -0800</creation_ts>
          <short_desc>Remove final custom binding from IDBRequest</short_desc>
          <delta_ts>2017-01-04 09:49:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Bindings</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="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>cdumez</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1263614</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-01-03 17:01:02 -0800</bug_when>
    <thetext>Remove final custom binding from IDBRequest</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263615</commentid>
    <comment_count>1</comment_count>
      <attachid>297970</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-01-03 17:05:09 -0800</bug_when>
    <thetext>Created attachment 297970
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263619</commentid>
    <comment_count>2</comment_count>
      <attachid>297972</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-01-03 17:15:37 -0800</bug_when>
    <thetext>Created attachment 297972
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263623</commentid>
    <comment_count>3</comment_count>
      <attachid>297973</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-01-03 17:16:32 -0800</bug_when>
    <thetext>Created attachment 297973
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263631</commentid>
    <comment_count>4</comment_count>
      <attachid>297977</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-01-03 17:29:52 -0800</bug_when>
    <thetext>Created attachment 297977
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263695</commentid>
    <comment_count>5</comment_count>
      <attachid>297977</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-01-03 22:57:49 -0800</bug_when>
    <thetext>Comment on attachment 297977
Patch

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

r=me

&gt; Source/WebCore/Modules/indexeddb/IDBRequest.cpp:149
&gt; +            [] (RefPtr&lt;IDBCursor&gt;&amp; cursor) { cursor-&gt;clearRequest(); },

You have several uses of Variant&lt;RefPtr&lt;Something&gt;, etc.&gt; that use the RefPtr without checking if it&apos;s null in this patch.  Could they become Variant&lt;Ref&lt;Something&gt;, etc.&gt;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263709</commentid>
    <comment_count>6</comment_count>
      <attachid>297977</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-01-03 23:59:57 -0800</bug_when>
    <thetext>Comment on attachment 297977
Patch

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

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBRequest.cpp:149
&gt;&gt; +            [] (RefPtr&lt;IDBCursor&gt;&amp; cursor) { cursor-&gt;clearRequest(); },
&gt; 
&gt; You have several uses of Variant&lt;RefPtr&lt;Something&gt;, etc.&gt; that use the RefPtr without checking if it&apos;s null in this patch.  Could they become Variant&lt;Ref&lt;Something&gt;, etc.&gt;?

Currently they can’t, but this is something Sam would like to fix eventually.

Sam, why RefPtr&amp; here rather than const RefPtr&amp;?

&gt; Source/WebCore/Modules/indexeddb/IDBRequest.cpp:454
&gt; +        [] (RefPtr&lt;IDBCursor&gt;&amp; cursor) -&gt; IDBCursor* { return cursor.get(); },

Why not const RefPtr&amp;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263790</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-01-04 09:49:54 -0800</bug_when>
    <thetext>Committed r210275: &lt;http://trac.webkit.org/changeset/210275&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297970</attachid>
            <date>2017-01-03 17:05:09 -0800</date>
            <delta_ts>2017-01-03 17:15:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-166671-20170103170344.patch</filename>
            <type>text/plain</type>
            <size>27285</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMDI1OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE3LTAxLTAzICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIGZpbmFsIGN1c3RvbSBiaW5k
aW5nIGZyb20gSURCUmVxdWVzdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY2NjcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIFJlbW92ZSBKU0lEQlJlcXVlc3RDdXN0b20uY3Bw
CisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwOiBSZW1vdmVk
LgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlJlcXVlc3Q6On5JREJSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnJl
c3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzZXRTb3VyY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c291cmNlT2JqZWN0U3RvcmVJZGVudGlmaWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNvdXJjZUluZGV4SWRlbnRpZmllcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpyZXF1ZXN0ZWRJbmRleFJlY29yZFR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c2V0UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlJlcXVlc3Q6OnNldFJlc3VsdFRvU3RydWN0dXJlZENsb25lKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlJlcXVlc3Q6OnNldFJlc3VsdFRvVW5kZWZpbmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlJlcXVlc3Q6OnJlc3VsdEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0
Ojp3aWxsSXRlcmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpkaWRP
cGVuT3JJdGVyYXRlQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNvdXJj
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpjbGVhclJlc3VsdCk6
IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlJlcXVlc3Q6OmN1cnNvclJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXF1ZXN0OjpkYXRhYmFzZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXF1ZXN0OjpzY3JpcHRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICBSZXBsYWNlIG11bHRpcGxl
IG1lbWJlciB2YXJpYWJsZXMgd2l0aCBWYXJpYW50cyBmb3Igc291cmNlIGFuZCByZXN1bHQuIEFk
ZCBhIHJlc3VsdAorICAgICAgICBtZW1iZXIgZnVuY3Rpb24gdGhhdCBwcm9wZXJseSBzZXRzIGFu
IGV4Y2VwdGlvbiBpZiBub3QgImRvbmUiLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCUmVxdWVzdC5pZGw6CisgICAgICAgIFJlbW92ZSBDdXN0b21HZXR0ZXIgYW5ub3RhdGlvbiBh
bmQgYWRkIHR5cGUuCisKKyAgICAgICAgKiBiaW5kaW5ncy9nZW5lcmljL0lETFR5cGVzLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpJRExBbnk6Om51bGxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
RExBbnk6OmlzTnVsbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OklETEFueTo6ZXh0cmFjdFZh
bHVlRnJvbU51bGxhYmxlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnZlcnRlcjxJRExBbnk+Ojpjb252ZXJ0KToKKyAgICAgICAg
Rmxlc2ggb3V0IElETEFueSB0byBiZSBpbXBsZW1lbnRlZCBhcyBhIFN0cm9uZzxVbmtub3duPiB3
aGVuIHVzZWQgaW4gYWdncmVnYXRlIHR5cGVzLAorICAgICAgICBidXQgc3RpbGwgd29yayB3aXRo
IEpTVmFsdWUgd2hlbiBwYXNzaW5nIGFzIGEgcGFyYW1ldGVyLgorCisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcDoKKyAgICAgICAgVXBkYXRlIGZvciBuZXcg
cmV0dXJuIHZhbHVlIG9mIElEQlJlcXVlc3Q6OnJlc3VsdCgpLgorCiAyMDE3LTAxLTAzICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgU2hhcmVkQnVmZmVy
TWFjLm1tIHRvIFNoYXJlZEJ1ZmZlckNvY29hLm1tCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMjEwMjU4KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTExNDgsNyArMTE0OCw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBi
aW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9q
cy9KU0lEQkluZGV4Q3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVD
dXN0b20uY3BwCi0gICAgYmluZGluZ3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcAogICAgIGJp
bmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNJ
bWFnZURhdGFDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhv
c3RDdXN0b20uY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJS
ZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJSZXF1ZXN0LmNwcAkocmV2aXNpb24gMjEwMjU4KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkx
LDcgQEAgSURCUmVxdWVzdDo6SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25DbwogICAgIDogSURC
QWN0aXZlRE9NT2JqZWN0KCZjb250ZXh0KQogICAgICwgbV90cmFuc2FjdGlvbigmdHJhbnNhY3Rp
b24pCiAgICAgLCBtX3Jlc291cmNlSWRlbnRpZmllcih0cmFuc2FjdGlvbi5jb25uZWN0aW9uUHJv
eHkoKSkKLSAgICAsIG1fb2JqZWN0U3RvcmVTb3VyY2UoJm9iamVjdFN0b3JlKQorICAgICwgbV9z
b3VyY2UoJm9iamVjdFN0b3JlKQogICAgICwgbV9jb25uZWN0aW9uUHJveHkodHJhbnNhY3Rpb24u
ZGF0YWJhc2UoKS5jb25uZWN0aW9uUHJveHkoKSkKIHsKICAgICBzdXNwZW5kSWZOZWVkZWQoKTsK
QEAgLTEwNyw4ICsxMDcsNyBAQCBJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlv
bkNvCiAgICAgc3VzcGVuZElmTmVlZGVkKCk7CiAKICAgICBXVEY6OnN3aXRjaE9uKGN1cnNvci5z
b3VyY2UoKSwKLSAgICAgICAgW3RoaXNdIChjb25zdCBSZWZQdHI8SURCSW5kZXg+JiBpbmRleCkg
eyB0aGlzLT5tX2luZGV4U291cmNlID0gaW5kZXg7IH0sCi0gICAgICAgIFt0aGlzXSAoY29uc3Qg
UmVmUHRyPElEQk9iamVjdFN0b3JlPiYgb2JqZWN0U3RvcmUpIHsgdGhpcy0+bV9vYmplY3RTdG9y
ZVNvdXJjZSA9IG9iamVjdFN0b3JlOyB9CisgICAgICAgIFt0aGlzXSAoY29uc3QgYXV0byYgdmFs
dWUpIHsgdGhpcy0+bV9zb3VyY2UgPSBJREJSZXF1ZXN0OjpTb3VyY2UgeyB2YWx1ZSB9OyB9CiAg
ICAgKTsKIAogICAgIGN1cnNvci5zZXRSZXF1ZXN0KCp0aGlzKTsKQEAgLTExOCw3ICsxMTcsNyBA
QCBJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvCiAgICAgOiBJREJBY3Rp
dmVET01PYmplY3QoJmNvbnRleHQpCiAgICAgLCBtX3RyYW5zYWN0aW9uKCZ0cmFuc2FjdGlvbikK
ICAgICAsIG1fcmVzb3VyY2VJZGVudGlmaWVyKHRyYW5zYWN0aW9uLmNvbm5lY3Rpb25Qcm94eSgp
KQotICAgICwgbV9pbmRleFNvdXJjZSgmaW5kZXgpCisgICAgLCBtX3NvdXJjZSgmaW5kZXgpCiAg
ICAgLCBtX2Nvbm5lY3Rpb25Qcm94eSh0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmNvbm5lY3Rpb25Q
cm94eSgpKQogewogICAgIHN1c3BlbmRJZk5lZWRlZCgpOwpAQCAtMTI4LDcgKzEyNyw3IEBAIElE
QlJlcXVlc3Q6OklEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ28KICAgICA6IElEQkFjdGl2ZURP
TU9iamVjdCgmY29udGV4dCkKICAgICAsIG1fdHJhbnNhY3Rpb24oJnRyYW5zYWN0aW9uKQogICAg
ICwgbV9yZXNvdXJjZUlkZW50aWZpZXIodHJhbnNhY3Rpb24uY29ubmVjdGlvblByb3h5KCkpCi0g
ICAgLCBtX29iamVjdFN0b3JlU291cmNlKCZvYmplY3RTdG9yZSkKKyAgICAsIG1fc291cmNlKCZv
YmplY3RTdG9yZSkKICAgICAsIG1fcmVxdWVzdGVkT2JqZWN0U3RvcmVSZWNvcmRUeXBlKHR5cGUp
CiAgICAgLCBtX2Nvbm5lY3Rpb25Qcm94eSh0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmNvbm5lY3Rp
b25Qcm94eSgpKQogewpAQCAtMTQ1LDggKzE0NCwyMCBAQCBJREJSZXF1ZXN0Ojp+SURCUmVxdWVz
dCgpCiB7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBvcmlnaW5UaHJlYWRJRCgpKTsK
IAotICAgIGlmIChtX2N1cnNvclJlc3VsdCkKLSAgICAgICAgbV9jdXJzb3JSZXN1bHQtPmNsZWFy
UmVxdWVzdCgpOworICAgIGlmIChtX3Jlc3VsdCkgeworICAgICAgICBXVEY6OnN3aXRjaE9uKG1f
cmVzdWx0LnZhbHVlKCksCisgICAgICAgICAgICBbXSAoUmVmUHRyPElEQkN1cnNvcj4mIGN1cnNv
cikgeyBjdXJzb3ItPmNsZWFyUmVxdWVzdCgpOyB9LAorICAgICAgICAgICAgW10gKGNvbnN0IGF1
dG8mKSB7IH0KKyAgICAgICAgKTsKKyAgICB9Cit9CisKK0V4Y2VwdGlvbk9yPHN0ZDo6b3B0aW9u
YWw8SURCUmVxdWVzdDo6UmVzdWx0Pj4gSURCUmVxdWVzdDo6cmVzdWx0KCkgY29uc3QKK3sKKyAg
ICBpZiAoIWlzRG9uZSgpKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSURCRGF0YWJhc2VF
eGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byByZWFk
IHRoZSAncmVzdWx0JyBwcm9wZXJ0eSBmcm9tICdJREJSZXF1ZXN0JzogVGhlIHJlcXVlc3QgaGFz
IG5vdCBmaW5pc2hlZC4iKSB9OworCisgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SURCUmVxdWVz
dDo6UmVzdWx0PiB7IG1fcmVzdWx0IH07CiB9CiAKIEV4Y2VwdGlvbk9yPERPTUVycm9yKj4gSURC
UmVxdWVzdDo6ZXJyb3IoKSBjb25zdApAQCAtMTU5LDI5ICsxNzAsMTUgQEAgRXhjZXB0aW9uT3I8
RE9NRXJyb3IqPiBJREJSZXF1ZXN0OjplcnJvcgogICAgIHJldHVybiBtX2RvbUVycm9yLmdldCgp
OwogfQogCi1zdGQ6Om9wdGlvbmFsPElEQlJlcXVlc3Q6OlNvdXJjZT4gSURCUmVxdWVzdDo6c291
cmNlKCkgY29uc3QKLXsKLSAgICBpZiAobV9jdXJzb3JTb3VyY2UpCi0gICAgICAgIHJldHVybiBT
b3VyY2UgeyBtX2N1cnNvclNvdXJjZSB9OwotICAgIGlmIChtX2luZGV4U291cmNlKQotICAgICAg
ICByZXR1cm4gU291cmNlIHsgbV9pbmRleFNvdXJjZSB9OwotICAgIGlmIChtX29iamVjdFN0b3Jl
U291cmNlKQotICAgICAgICByZXR1cm4gU291cmNlIHsgbV9vYmplY3RTdG9yZVNvdXJjZSB9Owot
Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQogdm9pZCBJREJSZXF1ZXN0OjpzZXRTb3Vy
Y2UoSURCQ3Vyc29yJiBjdXJzb3IpCiB7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBv
cmlnaW5UaHJlYWRJRCgpKTsKICAgICBBU1NFUlQoIW1fY3Vyc29yUmVxdWVzdE5vdGlmaWVyKTsK
IAotICAgIG1fb2JqZWN0U3RvcmVTb3VyY2UgPSBudWxscHRyOwotICAgIG1faW5kZXhTb3VyY2Ug
PSBudWxscHRyOwotICAgIG1fY3Vyc29yU291cmNlID0gJmN1cnNvcjsKKyAgICBtX3NvdXJjZSA9
IFNvdXJjZSB7ICZjdXJzb3IgfTsKICAgICBtX2N1cnNvclJlcXVlc3ROb3RpZmllciA9IHN0ZDo6
bWFrZV91bmlxdWU8U2NvcGVHdWFyZD4oW3RoaXNdKCkgewotICAgICAgICBBU1NFUlQobV9jdXJz
b3JTb3VyY2UpOwotICAgICAgICBtX2N1cnNvclNvdXJjZS0+ZGVjcmVtZW50T3V0c3RhbmRpbmdS
ZXF1ZXN0Q291bnQoKTsKKyAgICAgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVm
UHRyPElEQkN1cnNvcj4+KG1fc291cmNlLnZhbHVlKCkpKTsKKyAgICAgICAgV1RGOjpnZXQ8UmVm
UHRyPElEQkN1cnNvcj4+KG1fc291cmNlLnZhbHVlKCkpLT5kZWNyZW1lbnRPdXRzdGFuZGluZ1Jl
cXVlc3RDb3VudCgpOwogICAgIH0pOwogfQogCkBAIC0yMDUsMjAgKzIwMiwyOCBAQCB1aW50NjRf
dCBJREJSZXF1ZXN0Ojpzb3VyY2VPYmplY3RTdG9yZUlkCiB7CiAgICAgQVNTRVJUKGN1cnJlbnRU
aHJlYWQoKSA9PSBvcmlnaW5UaHJlYWRJRCgpKTsKIAotICAgIGlmIChtX29iamVjdFN0b3JlU291
cmNlKQotICAgICAgICByZXR1cm4gbV9vYmplY3RTdG9yZVNvdXJjZS0+aW5mbygpLmlkZW50aWZp
ZXIoKTsKLSAgICBpZiAobV9pbmRleFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIG1faW5kZXhTb3Vy
Y2UtPmluZm8oKS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKTsKLSAgICByZXR1cm4gMDsKKyAgICBp
ZiAoIW1fc291cmNlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBXVEY6OnN3aXRj
aE9uKG1fc291cmNlLnZhbHVlKCksCisgICAgICAgIFtdIChjb25zdCBSZWZQdHI8SURCT2JqZWN0
U3RvcmU+JiBvYmplY3RTdG9yZSkgeyByZXR1cm4gb2JqZWN0U3RvcmUtPmluZm8oKS5pZGVudGlm
aWVyKCk7IH0sCisgICAgICAgIFtdIChjb25zdCBSZWZQdHI8SURCSW5kZXg+JiBpbmRleCkgeyBy
ZXR1cm4gaW5kZXgtPmluZm8oKS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKTsgfSwKKyAgICAgICAg
W10gKGNvbnN0IFJlZlB0cjxJREJDdXJzb3I+JikgeyByZXR1cm4gMDsgfQorICAgICk7CiB9CiAK
IHVpbnQ2NF90IElEQlJlcXVlc3Q6OnNvdXJjZUluZGV4SWRlbnRpZmllcigpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBvcmlnaW5UaHJlYWRJRCgpKTsKIAotICAgIGlm
ICghbV9pbmRleFNvdXJjZSkKKyAgICBpZiAoIW1fc291cmNlKQogICAgICAgICByZXR1cm4gMDsK
LSAgICByZXR1cm4gbV9pbmRleFNvdXJjZS0+aW5mbygpLmlkZW50aWZpZXIoKTsKKworICAgIHJl
dHVybiBXVEY6OnN3aXRjaE9uKG1fc291cmNlLnZhbHVlKCksCisgICAgICAgIFtdIChjb25zdCBS
ZWZQdHI8SURCT2JqZWN0U3RvcmU+JikgeyByZXR1cm4gMDsgfSwKKyAgICAgICAgW10gKGNvbnN0
IFJlZlB0cjxJREJJbmRleD4mIGluZGV4KSB7IHJldHVybiBpbmRleC0+aW5mbygpLmlkZW50aWZp
ZXIoKTsgfSwKKyAgICAgICAgW10gKGNvbnN0IFJlZlB0cjxJREJDdXJzb3I+JikgeyByZXR1cm4g
MDsgfQorICAgICk7CiB9CiAKIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVSZWNvcmRUeXBlIElEQlJl
cXVlc3Q6OnJlcXVlc3RlZE9iamVjdFN0b3JlUmVjb3JkVHlwZSgpIGNvbnN0CkBAIC0yMzEsNyAr
MjM2LDggQEAgSW5kZXhlZERCOjpPYmplY3RTdG9yZVJlY29yZFR5cGUgSURCUmVxdQogSW5kZXhl
ZERCOjpJbmRleFJlY29yZFR5cGUgSURCUmVxdWVzdDo6cmVxdWVzdGVkSW5kZXhSZWNvcmRUeXBl
KCkgY29uc3QKIHsKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG9yaWdpblRocmVhZElE
KCkpOwotICAgIEFTU0VSVChtX2luZGV4U291cmNlKTsKKyAgICBBU1NFUlQobV9zb3VyY2UpOwor
ICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxJREJJbmRleD4+KG1fc291
cmNlLnZhbHVlKCkpKTsKIAogICAgIHJldHVybiBtX3JlcXVlc3RlZEluZGV4UmVjb3JkVHlwZTsK
IH0KQEAgLTM2Miw4ICszNjgsNyBAQCB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdChjb25zdCBJ
REJLZXlECiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm47CiAKLSAgICBjbGVhclJlc3Vs
dCgpOwotICAgIG1fc2NyaXB0UmVzdWx0ID0geyBjb250ZXh0LT52bSgpLCBpZGJLZXlEYXRhVG9T
Y3JpcHRWYWx1ZSgqZXhlYywga2V5RGF0YSkgfTsKKyAgICBtX3Jlc3VsdCA9IFJlc3VsdCB7IEpT
Qzo6U3Ryb25nPEpTQzo6VW5rbm93bj4geyBjb250ZXh0LT52bSgpLCBpZGJLZXlEYXRhVG9TY3Jp
cHRWYWx1ZSgqZXhlYywga2V5RGF0YSkgfSB9OwogfQogCiB2b2lkIElEQlJlcXVlc3Q6OnNldFJl
c3VsdChjb25zdCBWZWN0b3I8SURCS2V5RGF0YT4mIGtleURhdGFzKQpAQCAtMzc4LDEwICszODMs
OSBAQCB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdChjb25zdCBWZWN0b3I8CiAgICAgaWYgKCFz
dGF0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2xlYXJSZXN1bHQoKTsKIAogICAgIExvY2tl
cjxKU0xvY2s+IGxvY2tlcihjb250ZXh0LT52bSgpLmFwaUxvY2soKSk7Ci0gICAgbV9zY3JpcHRS
ZXN1bHQgPSB7IGNvbnRleHQtPnZtKCksIHRvSlMoc3RhdGUsIGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBrZXlEYXRhcykgfTsKKyAgICBt
X3Jlc3VsdCA9IFJlc3VsdCB7IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4geyBjb250ZXh0LT52
bSgpLCB0b0pTKHN0YXRlLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKSwga2V5RGF0YXMpIH0gfTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0Ojpz
ZXRSZXN1bHQoY29uc3QgVmVjdG9yPElEQlZhbHVlPiYgdmFsdWVzKQpAQCAtMzk2LDEwICs0MDAs
OCBAQCB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdChjb25zdCBWZWN0b3I8CiAgICAgaWYgKCFl
eGVjKQogICAgICAgICByZXR1cm47CiAKLSAgICBjbGVhclJlc3VsdCgpOwotCiAgICAgTG9ja2Vy
PEpTTG9jaz4gbG9ja2VyKGNvbnRleHQtPnZtKCkuYXBpTG9jaygpKTsKLSAgICBtX3NjcmlwdFJl
c3VsdCA9IHsgY29udGV4dC0+dm0oKSwgdG9KUyhleGVjLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCB2YWx1ZXMpIH07CisgICAgbV9yZXN1
bHQgPSBSZXN1bHQgeyBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+IHsgY29udGV4dC0+dm0oKSwg
dG9KUyhleGVjLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCkpLCB2YWx1ZXMpIH0gfTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQo
dWludDY0X3QgbnVtYmVyKQpAQCAtNDEwLDggKzQxMiw3IEBAIHZvaWQgSURCUmVxdWVzdDo6c2V0
UmVzdWx0KHVpbnQ2NF90IG51bWIKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGNsZWFyUmVzdWx0KCk7Ci0gICAgbV9zY3JpcHRSZXN1bHQgPSB7IGNvbnRleHQtPnZt
KCksIEpTQzo6anNOdW1iZXIobnVtYmVyKSB9OworICAgIG1fcmVzdWx0ID0gUmVzdWx0IHsgSlND
OjpTdHJvbmc8SlNDOjpVbmtub3duPiB7IGNvbnRleHQtPnZtKCksIEpTQzo6anNOdW1iZXIobnVt
YmVyKSB9IH07CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xv
bmUoY29uc3QgSURCVmFsdWUmIHZhbHVlKQpAQCAtNDI4LDE3ICs0MjksNyBAQCB2b2lkIElEQlJl
cXVlc3Q6OnNldFJlc3VsdFRvU3RydWN0dXJlZENsCiAgICAgaWYgKCFleGVjKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBjbGVhclJlc3VsdCgpOwotICAgIG1fc2NyaXB0UmVzdWx0ID0geyBjb250
ZXh0LT52bSgpLCBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKCpleGVjLCB2YWx1ZSkgfTsK
LX0KLQotdm9pZCBJREJSZXF1ZXN0OjpjbGVhclJlc3VsdCgpCi17Ci0gICAgQVNTRVJUKGN1cnJl
bnRUaHJlYWQoKSA9PSBvcmlnaW5UaHJlYWRJRCgpKTsKLQotICAgIG1fc2NyaXB0UmVzdWx0ID0g
eyB9OwotICAgIG1fY3Vyc29yUmVzdWx0ID0gbnVsbHB0cjsKLSAgICBtX2RhdGFiYXNlUmVzdWx0
ID0gbnVsbHB0cjsKKyAgICBtX3Jlc3VsdCA9IFJlc3VsdCB7IEpTQzo6U3Ryb25nPEpTQzo6VW5r
bm93bj4geyBjb250ZXh0LT52bSgpLCBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKCpleGVj
LCB2YWx1ZSkgfSB9OwogfQogCiB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdFRvVW5kZWZpbmVk
KCkKQEAgLTQ0OSwxNSArNDQwLDIwIEBAIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9VbmRl
ZmluZWQoKQogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2xlYXJS
ZXN1bHQoKTsKLSAgICBtX3NjcmlwdFJlc3VsdCA9IHsgY29udGV4dC0+dm0oKSwgSlNDOjpqc1Vu
ZGVmaW5lZCgpIH07CisgICAgbV9yZXN1bHQgPSBSZXN1bHQgeyBKU0M6OlN0cm9uZzxKU0M6OlVu
a25vd24+IHsgY29udGV4dC0+dm0oKSwgSlNDOjpqc1VuZGVmaW5lZCgpIH0gfTsKIH0KIAogSURC
Q3Vyc29yKiBJREJSZXF1ZXN0OjpyZXN1bHRDdXJzb3IoKQogewogICAgIEFTU0VSVChjdXJyZW50
VGhyZWFkKCkgPT0gb3JpZ2luVGhyZWFkSUQoKSk7CiAKLSAgICByZXR1cm4gbV9jdXJzb3JSZXN1
bHQuZ2V0KCk7CisgICAgaWYgKCFtX3Jlc3VsdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3Jlc3VsdC52YWx1ZSgpLAorICAgICAgICBbXSAo
UmVmUHRyPElEQkN1cnNvcj4mIGN1cnNvcikgLT4gSURCQ3Vyc29yKiB7IHJldHVybiBjdXJzb3Iu
Z2V0KCk7IH0sCisgICAgICAgIFtdIChjb25zdCBhdXRvJikgLT4gSURCQ3Vyc29yKiB7IHJldHVy
biBudWxscHRyOyB9CisgICAgKTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0Ojp3aWxsSXRlcmF0ZUN1
cnNvcihJREJDdXJzb3ImIGN1cnNvcikKQEAgLTQ3Miw3ICs0NjgsNyBAQCB2b2lkIElEQlJlcXVl
c3Q6OndpbGxJdGVyYXRlQ3Vyc29yKElEQkN1CiAKICAgICBtX3BlbmRpbmdDdXJzb3IgPSAmY3Vy
c29yOwogICAgIG1faGFzUGVuZGluZ0FjdGl2aXR5ID0gdHJ1ZTsKLSAgICBjbGVhclJlc3VsdCgp
OworICAgIG1fcmVzdWx0ID0gc3RkOjpudWxsb3B0OwogICAgIG1fcmVhZHlTdGF0ZSA9IFJlYWR5
U3RhdGU6OlBlbmRpbmc7CiAgICAgbV9kb21FcnJvciA9IG51bGxwdHI7CiAgICAgbV9pZGJFcnJv
ciA9IHsgfTsKQEAgLTQ4NywxMiArNDgzLDEyIEBAIHZvaWQgSURCUmVxdWVzdDo6ZGlkT3Blbk9y
SXRlcmF0ZUN1cnNvcigKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG9yaWdpblRocmVh
ZElEKCkpOwogICAgIEFTU0VSVChtX3BlbmRpbmdDdXJzb3IpOwogCi0gICAgY2xlYXJSZXN1bHQo
KTsKKyAgICBtX3Jlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKIAogICAgIGlmIChyZXN1bHREYXRhLnR5
cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpJdGVyYXRlQ3Vyc29yU3VjY2VzcyB8fCByZXN1bHREYXRh
LnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpPcGVuQ3Vyc29yU3VjY2VzcykgewogICAgICAgICBt
X3BlbmRpbmdDdXJzb3ItPnNldEdldFJlc3VsdCgqdGhpcywgcmVzdWx0RGF0YS5nZXRSZXN1bHQo
KSk7CiAgICAgICAgIGlmIChyZXN1bHREYXRhLmdldFJlc3VsdCgpLmlzRGVmaW5lZCgpKQotICAg
ICAgICAgICAgbV9jdXJzb3JSZXN1bHQgPSBtX3BlbmRpbmdDdXJzb3I7CisgICAgICAgICAgICBt
X3Jlc3VsdCA9IFJlc3VsdCB7IG1fcGVuZGluZ0N1cnNvciB9OwogICAgIH0KIAogICAgIG1fY3Vy
c29yUmVxdWVzdE5vdGlmaWVyID0gbnVsbHB0cjsKQEAgLTUzNyw4ICs1MzMsNyBAQCB2b2lkIElE
QlJlcXVlc3Q6OnNldFJlc3VsdChSZWY8SURCRGF0YWJhCiB7CiAgICAgQVNTRVJUKGN1cnJlbnRU
aHJlYWQoKSA9PSBvcmlnaW5UaHJlYWRJRCgpKTsKIAotICAgIGNsZWFyUmVzdWx0KCk7Ci0gICAg
bV9kYXRhYmFzZVJlc3VsdCA9IFdURk1vdmUoZGF0YWJhc2UpOworICAgIG1fcmVzdWx0ID0gUmVz
dWx0IHsgUmVmUHRyPElEQkRhdGFiYXNlPiB7IFdURk1vdmUoZGF0YWJhc2UpIH0gfTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlJlcXVlc3QuaAkocmV2aXNpb24gMjEwMjU4KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nywx
MiArNjcsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+SURCUmVxdWVzdCgpOwogCi0gICAg
SURCQ3Vyc29yKiBjdXJzb3JSZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX2N1cnNvclJlc3VsdC5n
ZXQoKTsgfQotICAgIElEQkRhdGFiYXNlKiBkYXRhYmFzZVJlc3VsdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YWJhc2VSZXN1bHQuZ2V0KCk7IH0KLSAgICBKU0M6OkpTVmFsdWUgc2NyaXB0UmVzdWx0
KCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHRSZXN1bHQuZ2V0KCk7IH0KKyAgICB1c2luZyBSZXN1
bHQgPSBWYXJpYW50PFJlZlB0cjxJREJDdXJzb3I+LCBSZWZQdHI8SURCRGF0YWJhc2U+LCBKU0M6
OlN0cm9uZzxKU0M6OlVua25vd24+PjsKKyAgICBFeGNlcHRpb25PcjxzdGQ6Om9wdGlvbmFsPFJl
c3VsdD4+IHJlc3VsdCgpIGNvbnN0OwogCiAgICAgdXNpbmcgU291cmNlID0gVmFyaWFudDxSZWZQ
dHI8SURCT2JqZWN0U3RvcmU+LCBSZWZQdHI8SURCSW5kZXg+LCBSZWZQdHI8SURCQ3Vyc29yPj47
Ci0gICAgc3RkOjpvcHRpb25hbDxTb3VyY2U+IHNvdXJjZSgpIGNvbnN0OworICAgIGNvbnN0IHN0
ZDo6b3B0aW9uYWw8U291cmNlPiYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0K
IAogICAgIEV4Y2VwdGlvbk9yPERPTUVycm9yKj4gZXJyb3IoKSBjb25zdDsKIApAQCAtMTQxLDgg
KzE0MCw2IEBAIHByaXZhdGU6CiAgICAgSURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiwgSURCT2JqZWN0U3RvcmUmLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlUmVjb3JkVHlwZSwgSURC
VHJhbnNhY3Rpb24mKTsKICAgICBJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJ
REJJbmRleCYsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlLCBJREJUcmFuc2FjdGlvbiYpOwog
Ci0gICAgdm9pZCBjbGVhclJlc3VsdCgpOwotCiAgICAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZl
bnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGNvbnN0IGNoYXIqIGFj
dGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBmaW5hbDsKQEAgLTE2MSwxOCArMTU4LDExIEBAIHBy
aXZhdGU6CiAKICAgICBJREJDdXJzb3IqIHJlc3VsdEN1cnNvcigpOwogCi0gICAgLy8gQ291bGQg
Y29uc2lkZXIgc3RvcmluZyB0aGVzZSB0aHJlZSBpbiBhIHVuaW9uIG9yIHVuaW9uLWxpa2UgY2xh
c3MgaW5zdGVhZC4KLSAgICBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+IG1fc2NyaXB0UmVzdWx0
OwotICAgIFJlZlB0cjxJREJDdXJzb3I+IG1fY3Vyc29yUmVzdWx0OwotICAgIFJlZlB0cjxJREJE
YXRhYmFzZT4gbV9kYXRhYmFzZVJlc3VsdDsKLQogICAgIElEQkVycm9yIG1faWRiRXJyb3I7CiAg
ICAgSURCUmVzb3VyY2VJZGVudGlmaWVyIG1fcmVzb3VyY2VJZGVudGlmaWVyOwogCi0gICAgLy8g
Q291bGQgY29uc2lkZXIgc3RvcmluZyB0aGVzZSB0aHJlZSBpbiBhIHVuaW9uIG9yIHVuaW9uLWxp
a2UgY2xhc3MgaW5zdGVhZC4KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG1fb2JqZWN0U3Rv
cmVTb3VyY2U7Ci0gICAgUmVmUHRyPElEQkluZGV4PiBtX2luZGV4U291cmNlOwotICAgIFJlZlB0
cjxJREJDdXJzb3I+IG1fY3Vyc29yU291cmNlOworICAgIHN0ZDo6b3B0aW9uYWw8UmVzdWx0PiBt
X3Jlc3VsdDsKKyAgICBzdGQ6Om9wdGlvbmFsPFNvdXJjZT4gbV9zb3VyY2U7CiAKICAgICBib29s
IG1faGFzUGVuZGluZ0FjdGl2aXR5IHsgdHJ1ZSB9OwogICAgIEluZGV4ZWREQjo6T2JqZWN0U3Rv
cmVSZWNvcmRUeXBlIG1fcmVxdWVzdGVkT2JqZWN0U3RvcmVSZWNvcmRUeXBlIHsgSW5kZXhlZERC
OjpPYmplY3RTdG9yZVJlY29yZFR5cGU6OlZhbHVlT25seSB9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwJKHJldmlzaW9uIDIxMDI1
OCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAgICAgR2VuZXJhdGVJc1JlYWNoYWJsZT1J
bXBsLAogICAgIFNraXBWVGFibGVWYWxpZGF0aW9uLAogXSBpbnRlcmZhY2UgSURCUmVxdWVzdCA6
IEV2ZW50VGFyZ2V0IHsKLSAgICBbQ3VzdG9tR2V0dGVyLCBHZXR0ZXJNYXlUaHJvd0V4Y2VwdGlv
bl0gcmVhZG9ubHkgYXR0cmlidXRlIGFueSByZXN1bHQ7CisgICAgW0dldHRlck1heVRocm93RXhj
ZXB0aW9uXSByZWFkb25seSBhdHRyaWJ1dGUgKElEQkN1cnNvciBvciBJREJEYXRhYmFzZSBvciBh
bnkpPyByZXN1bHQ7CiAgICAgW0dldHRlck1heVRocm93RXhjZXB0aW9uXSByZWFkb25seSBhdHRy
aWJ1dGUgRE9NRXJyb3I/IGVycm9yOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSAoSURCT2JqZWN0
U3RvcmUgb3IgSURCSW5kZXggb3IgSURCQ3Vyc29yKT8gc291cmNlOwogICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBJREJUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxMDI1
OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjg5OCw3ICsyODk4LDYgQEAKIAkJN0NEMEJBMDUxQjhGNzlDOTAw
NUNFQkJFIC8qIEFjdGl2ZURPTUNhbGxiYWNrTWljcm90YXNrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0QwQkEwMzFCOEY3OUM5MDA1Q0VCQkUgLyog
QWN0aXZlRE9NQ2FsbGJhY2tNaWNyb3Rhc2suaCAqLzsgfTsKIAkJN0NENDk0Q0MxQTg2RUIxRDAw
MEE4N0VDIC8qIFJlbmRlckF0dGFjaG1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0NENDk0Q0ExQTg2RUIxRDAwMEE4N0VDIC8qIFJlbmRlckF0
dGFjaG1lbnQuY3BwICovOyB9OwogCQk3Q0Q0OTRDRDFBODZFQjFEMDAwQTg3RUMgLyogUmVuZGVy
QXR0YWNobWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0NENDk0Q0IxQTg2RUIxRDAwMEE4N0VDIC8qIFJlbmRlckF0dGFjaG1lbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk3Q0Q2ODY1NjFFMEUy
NkQzMDBFOTdBQTcgLyogSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRDY4NjU1MUUwRTI2RDMwMEU5N0FBNyAvKiBK
U0lEQlJlcXVlc3RDdXN0b20uY3BwICovOyB9OwogCQk3Q0U1OEQ0QTFERDY0QTVCMDAxMjg1NTIg
LyogU1ZHUG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDRTU4RDQ5MURENjRBNUIwMDEyODU1MiAvKiBTVkdQb2ludC5oICovOyB9OwogCQk3Q0U1
OEQ0RTFERDY5NEZFMDAxMjg1NTIgLyogU1ZHUmVjdFRyYWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNThENEQxREQ2OTRGRTAwMTI4NTUyIC8q
IFNWR1JlY3RUcmFpdHMuaCAqLzsgfTsKIAkJN0NFNThENTAxREQ2OUExRTAwMTI4NTUyIC8qIFNW
R051bWJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0NFNThENEYxREQ2OUExRTAwMTI4NTUyIC8qIFNWR051bWJlci5oICovOyB9OwpAQCAtMTA0MDUs
NyArMTA0MDQsNiBAQAogCQk3Q0QwQkEwMzFCOEY3OUM5MDA1Q0VCQkUgLyogQWN0aXZlRE9NQ2Fs
bGJhY2tNaWNyb3Rhc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWN0aXZl
RE9NQ2FsbGJhY2tNaWNyb3Rhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NE
NDk0Q0ExQTg2RUIxRDAwMEE4N0VDIC8qIFJlbmRlckF0dGFjaG1lbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyQXR0YWNobWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRDQ5NENCMUE4NkVCMUQwMDBBODdFQyAvKiBSZW5kZXJB
dHRhY2htZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckF0dGFj
aG1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0NENjg2NTUxRTBFMjZEMzAw
RTk3QUE3IC8qIEpTSURCUmVxdWVzdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0lEQlJlcXVlc3RDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3Q0U1OEQ0OTFERDY0QTVCMDAxMjg1NTIgLyogU1ZHUG9pbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0NFNThENEQxREQ2OTRGRTAwMTI4NTUyIC8qIFNWR1JlY3RUcmFpdHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUmVjdFRyYWl0cy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0U1OEQ0RjFERDY5QTFFMDAxMjg1NTIgLyogU1ZHTnVt
YmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR051bWJlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIxMzMsNyArMjIxMzEsNiBAQAogCQkJCUJDMTdG
OTY1MEI2NEVCQjgwMDRBNjVDQiAvKiBKU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcCAqLywK
IAkJCQlBQjRDQjRFQTBCOEJEQTNEMDA5RjQwQjAgLyogSlNIVE1MU2VsZWN0RWxlbWVudEN1c3Rv
bS5oICovLAogCQkJCUQ2Rjc5NjBDMTY2RkZFQ0UwMDc2REQxOCAvKiBKU0hUTUxUZW1wbGF0ZUVs
ZW1lbnRDdXN0b20uY3BwICovLAotCQkJCTdDRDY4NjU1MUUwRTI2RDMwMEU5N0FBNyAvKiBKU0lE
QlJlcXVlc3RDdXN0b20uY3BwICovLAogCQkJCTdBNzRFQ0JDMTAxODM5REEwMEJGOTM5RSAvKiBK
U0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAgKi8sCiAJCQkJQkNFMUM0M0YwRDk4MzBG
NDAwM0IwMkYyIC8qIEpTTG9jYXRpb25DdXN0b20uY3BwICovLAogCQkJCTJEOUJGNzQ4MURCRkRE
RjgwMDdBN0Q5OSAvKiBKU01lZGlhS2V5U2Vzc2lvbkN1c3RvbS5jcHAgKi8sCkBAIC0zMTc0MSw3
ICszMTczOCw2IEBACiAJCQkJNDlDN0I5RDkxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVy
YnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QzdCOURGMTA0MkQzMkYwMDA5RDQ0NyAv
KiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRDNGM0QzNjkx
QTY5QjdCMDAwNTlGQzJCIC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJN0NENjg2NTYxRTBFMjZEMzAwRTk3QUE3IC8qIEpTSURCUmVxdWVzdEN1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2Rjk5NUEyMTFBNzA3OEIxMDBBNzM1RjQgLyogV2Vi
R0xTYW1wbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QzdCOUUyMTA0MkQzMkYwMDA5RDQ0
NyAvKiBXZWJHTFNoYWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMDhDRjE1NDE1MkI3N0Iz
MDA5QzU3NzUgLyogV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0lETFR5cGVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9JRExUeXBlcy5oCShyZXZp
c2lvbiAyMTAyNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0lETFR5cGVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNp
bmNsdWRlIDxoZWFwL0hhbmRsZVR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL0JyaWdhbmQuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAg
LTU5LDcgKzYwLDE0IEBAIHN0cnVjdCBJRExVbnN1cHBvcnRlZFR5cGUgOiBJRExUeXBlPHZvaWQK
IC8vIElETE51bGwgaXMgYSBzcGVjaWFsIHR5cGUgZm9yIHVzZSBhcyBhIHN1YnR5cGUgaW4gYW4g
SURMVW5pb24gdGhhdCBpcyBudWxsYWJsZS4KIHN0cnVjdCBJRExOdWxsIDogSURMVHlwZTxzdGQ6
Om51bGxwdHJfdD4geyB9OwogCi1zdHJ1Y3QgSURMQW55IDogSURMVHlwZTxKU0M6OkpTVmFsdWU+
IHsgfTsKK3N0cnVjdCBJRExBbnkgOiBJRExUeXBlPEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4+
IHsKKyAgICB1c2luZyBQYXJhbWV0ZXJUeXBlID0gSlNDOjpKU1ZhbHVlOworCisgICAgdXNpbmcg
TnVsbGFibGVUeXBlID0gSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPjsKKyAgICBzdGF0aWMgaW5s
aW5lIHN0ZDo6bnVsbHB0cl90IG51bGxWYWx1ZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgaW5saW5lIGJvb2wgaXNOdWxsVmFsdWUoVSYmIHZh
bHVlKSB7IHJldHVybiAhdmFsdWU7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMg
aW5saW5lIFUmJiBleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoVSYmIHZhbHVlKSB7IHJldHVybiBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpOyB9Cit9OwogCiBzdHJ1Y3QgSURMQm9vbGVhbiA6IElETFR5
cGU8Ym9vbD4geyB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNv
bnZlcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNv
bnZlcnQuaAkocmV2aXNpb24gMjEwMjU4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01Db252ZXJ0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNCwxMCArMjE0LDE3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0Q29udmUKIC8vIE1BUks6IEFueSB0eXBlCiAK
IHRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExBbnk+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSlNDOjpKU1ZhbHVlOwor
ICAgIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9CisK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpV
bmtub3duPiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7CisgICAg
fQogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQW55PiB7CkBAIC0yNTEs
NiArMjU4LDExIEBAIG5hbWVzcGFjZSBEZXRhaWwgewogICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZl
cnNpb25UeXBlPElETEludGVyZmFjZTxUPj4gewogICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5h
bWUgQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7CiAgICAgfTsKKworICAg
IHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExBbnk+IHsK
KyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExBbnk+OjpSZXR1cm5U
eXBlOworICAgIH07CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMTnVsbGFibGU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gewpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20u
Y3BwCShyZXZpc2lvbiAyMTAyNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lE
QlJlcXVlc3RDdXN0b20uY3BwCShub25leGlzdGVudCkKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU0lEQlJlcXVlc3QuaCIKLQot
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSlNJREJDdXJzb3IuaCIK
LSNpbmNsdWRlICJKU0lEQkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiSlNJREJJbmRleC5oIgotI2lu
Y2x1ZGUgIkpTSURCT2JqZWN0U3RvcmUuaCIKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1KU1ZhbHVlIEpTSURCUmVxdWVzdDo6cmVzdWx0KEV4ZWNTdGF0
ZSYgc3RhdGUpIGNvbnN0Ci17Ci0gICAgYXV0byYgcmVxdWVzdCA9IHdyYXBwZWQoKTsKLQotICAg
IGlmICghcmVxdWVzdC5pc0RvbmUoKSkgewotICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7
Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAg
cHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgRXhjZXB0aW9uIHsgSURCRGF0YWJhc2VF
eGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byByZWFk
IHRoZSAncmVzdWx0JyBwcm9wZXJ0eSBmcm9tICdJREJSZXF1ZXN0JzogVGhlIHJlcXVlc3QgaGFz
IG5vdCBmaW5pc2hlZC4iKSB9KTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICBp
ZiAoYXV0byogY3Vyc29yID0gcmVxdWVzdC5jdXJzb3JSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJu
IHRvSlMoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgKmN1cnNvcik7Ci0gICAgaWYgKGF1dG8qIGRh
dGFiYXNlID0gcmVxdWVzdC5kYXRhYmFzZVJlc3VsdCgpKQotICAgICAgICByZXR1cm4gdG9KUygm
c3RhdGUsIGdsb2JhbE9iamVjdCgpLCAqZGF0YWJhc2UpOwotICAgIGlmIChhdXRvIHJlc3VsdCA9
IHJlcXVlc3Quc2NyaXB0UmVzdWx0KCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgcmV0
dXJuIGpzTnVsbCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAkocmV2aXNpb24gMjEwMjU4KQor
KysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIzLDE3ICsxMjMsMjAgQEAgcHVibGljOgogICAgICAgICB9CiAK
ICAgICAgICAgYXV0byYgcmVxdWVzdCA9IHN0YXRpY19jYXN0PElEQk9wZW5EQlJlcXVlc3QmPigq
ZXZlbnQtPnRhcmdldCgpKTsKLSAgICAgICAgaWYgKCFyZXF1ZXN0LmlzRG9uZSgpKSB7CisKKyAg
ICAgICAgYXV0byByZXN1bHQgPSByZXF1ZXN0LnJlc3VsdCgpOworICAgICAgICBpZiAocmVzdWx0
Lmhhc0V4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICBtX2V4ZWN1dGFibGVXaXRoRGF0YWJhc2Ut
PnJlcXVlc3RDYWxsYmFjaygpLnNlbmRGYWlsdXJlKCJDb3VsZCBub3QgZ2V0IHJlc3VsdCBpbiBj
YWxsYmFjay4iKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGF1
dG8gZGF0YWJhc2VSZXN1bHQgPSByZXF1ZXN0LmRhdGFiYXNlUmVzdWx0KCk7Ci0gICAgICAgIGlm
ICghZGF0YWJhc2VSZXN1bHQpIHsKKyAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IHJlc3VsdC5y
ZWxlYXNlUmV0dXJuVmFsdWUoKTsKKyAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSB8fCAhV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCRGF0YWJhc2U+PihyZXN1bHRWYWx1ZS52YWx1ZSgp
KSkgewogICAgICAgICAgICAgbV9leGVjdXRhYmxlV2l0aERhdGFiYXNlLT5yZXF1ZXN0Q2FsbGJh
Y2soKS5zZW5kRmFpbHVyZSgiVW5leHBlY3RlZCByZXN1bHQgdHlwZS4iKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIGF1dG8gZGF0YWJhc2VSZXN1bHQgPSBXVEY6
OmdldDxSZWZQdHI8SURCRGF0YWJhc2U+PihyZXN1bHRWYWx1ZS52YWx1ZSgpKTsKICAgICAgICAg
bV9leGVjdXRhYmxlV2l0aERhdGFiYXNlLT5leGVjdXRlKCpkYXRhYmFzZVJlc3VsdCk7CiAgICAg
ICAgIGRhdGFiYXNlUmVzdWx0LT5jbG9zZSgpOwogICAgIH0KQEAgLTM2MiwyNiArMzY1LDIzIEBA
IHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAgIGF1dG8mIHJlcXVlc3QgPSBzdGF0aWNfY2Fz
dDxJREJSZXF1ZXN0Jj4oKmV2ZW50LT50YXJnZXQoKSk7Ci0gICAgICAgIGlmICghcmVxdWVzdC5p
c0RvbmUoKSkgeworCisgICAgICAgIGF1dG8gcmVzdWx0ID0gcmVxdWVzdC5yZXN1bHQoKTsKKyAg
ICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewogICAgICAgICAgICAgbV9yZXF1ZXN0
Q2FsbGJhY2stPnNlbmRGYWlsdXJlKCJDb3VsZCBub3QgZ2V0IHJlc3VsdCBpbiBjYWxsYmFjay4i
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYg
KHJlcXVlc3Quc2NyaXB0UmVzdWx0KCkpIHsKLSAgICAgICAgICAgIGVuZChmYWxzZSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGF1dG8qIGN1cnNv
clJlc3VsdCA9IHJlcXVlc3QuY3Vyc29yUmVzdWx0KCk7Ci0gICAgICAgIGlmICghY3Vyc29yUmVz
dWx0KSB7CisgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSByZXN1bHQucmVsZWFzZVJldHVyblZh
bHVlKCk7CisgICAgICAgIGlmICghcmVzdWx0VmFsdWUgfHwgIVdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8UmVmUHRyPElEQkN1cnNvcj4+KHJlc3VsdFZhbHVlLnZhbHVlKCkpKSB7CiAgICAgICAgICAg
ICBlbmQoZmFsc2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAg
YXV0byYgY3Vyc29yID0gKmN1cnNvclJlc3VsdDsKKyAgICAgICAgYXV0byBjdXJzb3IgPSBXVEY6
OmdldDxSZWZQdHI8SURCQ3Vyc29yPj4ocmVzdWx0VmFsdWUudmFsdWUoKSk7CiAKICAgICAgICAg
aWYgKG1fc2tpcENvdW50KSB7Ci0gICAgICAgICAgICBpZiAoY3Vyc29yLmFkdmFuY2UobV9za2lw
Q291bnQpLmhhc0V4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKGN1cnNvci0+YWR2YW5jZSht
X3NraXBDb3VudCkuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgbV9yZXF1ZXN0Q2Fs
bGJhY2stPnNlbmRGYWlsdXJlKCJDb3VsZCBub3QgYWR2YW5jZSBjdXJzb3IuIik7CiAgICAgICAg
ICAgICBtX3NraXBDb3VudCA9IDA7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0zOTMsNyArMzkz
LDcgQEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgLy8gQ29udGludWUgY3Vyc29yIGJl
Zm9yZSBtYWtpbmcgaW5qZWN0ZWQgc2NyaXB0IGNhbGxzLCBvdGhlcndpc2UgdHJhbnNhY3Rpb24g
bWlnaHQgYmUgZmluaXNoZWQuCi0gICAgICAgIGlmIChjdXJzb3IuY29udGludWVGdW5jdGlvbihu
dWxscHRyKS5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICBpZiAoY3Vyc29yLT5jb250aW51ZUZ1
bmN0aW9uKG51bGxwdHIpLmhhc0V4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICBtX3JlcXVlc3RD
YWxsYmFjay0+c2VuZEZhaWx1cmUoIkNvdWxkIG5vdCBjb250aW51ZSBjdXJzb3IuIik7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTQwMyw5ICs0MDMsOSBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgYXV0byBkYXRhRW50cnkgPSBEYXRhRW50cnk6
OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0S2V5KG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVj
dChjdXJzb3Iua2V5KCksIFN0cmluZygpLCB0cnVlKSkKLSAgICAgICAgICAgIC5zZXRQcmltYXJ5
S2V5KG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChjdXJzb3IucHJpbWFyeUtleSgpLCBTdHJp
bmcoKSwgdHJ1ZSkpCi0gICAgICAgICAgICAuc2V0VmFsdWUobV9pbmplY3RlZFNjcmlwdC53cmFw
T2JqZWN0KGN1cnNvci52YWx1ZSgpLCBTdHJpbmcoKSwgdHJ1ZSkpCisgICAgICAgICAgICAuc2V0
S2V5KG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChjdXJzb3ItPmtleSgpLCBTdHJpbmcoKSwg
dHJ1ZSkpCisgICAgICAgICAgICAuc2V0UHJpbWFyeUtleShtX2luamVjdGVkU2NyaXB0LndyYXBP
YmplY3QoY3Vyc29yLT5wcmltYXJ5S2V5KCksIFN0cmluZygpLCB0cnVlKSkKKyAgICAgICAgICAg
IC5zZXRWYWx1ZShtX2luamVjdGVkU2NyaXB0LndyYXBPYmplY3QoY3Vyc29yLT52YWx1ZSgpLCBT
dHJpbmcoKSwgdHJ1ZSkpCiAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICBtX3Jlc3Vs
dC0+YWRkSXRlbShXVEZNb3ZlKGRhdGFFbnRyeSkpOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297972</attachid>
            <date>2017-01-03 17:15:37 -0800</date>
            <delta_ts>2017-01-03 17:16:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-166671-20170103171411.patch</filename>
            <type>text/plain</type>
            <size>27476</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMDI1OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE3LTAxLTAzICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIGZpbmFsIGN1c3RvbSBiaW5k
aW5nIGZyb20gSURCUmVxdWVzdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY2NjcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIFJlbW92ZSBKU0lEQlJlcXVlc3RDdXN0b20uY3Bw
CisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwOiBSZW1vdmVk
LgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlJlcXVlc3Q6On5JREJSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnJl
c3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzZXRTb3VyY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c291cmNlT2JqZWN0U3RvcmVJZGVudGlmaWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNvdXJjZUluZGV4SWRlbnRpZmllcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpyZXF1ZXN0ZWRJbmRleFJlY29yZFR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c2V0UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlJlcXVlc3Q6OnNldFJlc3VsdFRvU3RydWN0dXJlZENsb25lKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlJlcXVlc3Q6OnNldFJlc3VsdFRvVW5kZWZpbmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlJlcXVlc3Q6OnJlc3VsdEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0
Ojp3aWxsSXRlcmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpkaWRP
cGVuT3JJdGVyYXRlQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNvdXJj
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpjbGVhclJlc3VsdCk6
IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlJlcXVlc3Q6OmN1cnNvclJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXF1ZXN0OjpkYXRhYmFzZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXF1ZXN0OjpzY3JpcHRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICBSZXBsYWNlIG11bHRpcGxl
IG1lbWJlciB2YXJpYWJsZXMgd2l0aCBWYXJpYW50cyBmb3Igc291cmNlIGFuZCByZXN1bHQuIEFk
ZCBhIHJlc3VsdAorICAgICAgICBtZW1iZXIgZnVuY3Rpb24gdGhhdCBwcm9wZXJseSBzZXRzIGFu
IGV4Y2VwdGlvbiBpZiBub3QgImRvbmUiLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCUmVxdWVzdC5pZGw6CisgICAgICAgIFJlbW92ZSBDdXN0b21HZXR0ZXIgYW5ub3RhdGlvbiBh
bmQgYWRkIHR5cGUuCisKKyAgICAgICAgKiBiaW5kaW5ncy9nZW5lcmljL0lETFR5cGVzLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpJRExBbnk6Om51bGxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
RExBbnk6OmlzTnVsbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OklETEFueTo6ZXh0cmFjdFZh
bHVlRnJvbU51bGxhYmxlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnZlcnRlcjxJRExBbnk+Ojpjb252ZXJ0KToKKyAgICAgICAg
Rmxlc2ggb3V0IElETEFueSB0byBiZSBpbXBsZW1lbnRlZCBhcyBhIFN0cm9uZzxVbmtub3duPiB3
aGVuIHVzZWQgaW4gYWdncmVnYXRlIHR5cGVzLAorICAgICAgICBidXQgc3RpbGwgd29yayB3aXRo
IEpTVmFsdWUgd2hlbiBwYXNzaW5nIGFzIGEgcGFyYW1ldGVyLgorCisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcDoKKyAgICAgICAgVXBkYXRlIGZvciBuZXcg
cmV0dXJuIHZhbHVlIG9mIElEQlJlcXVlc3Q6OnJlc3VsdCgpLgorCiAyMDE3LTAxLTAzICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgU2hhcmVkQnVmZmVy
TWFjLm1tIHRvIFNoYXJlZEJ1ZmZlckNvY29hLm1tCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMjEwMjU4KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTExNDgsNyArMTE0OCw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBi
aW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9q
cy9KU0lEQkluZGV4Q3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVD
dXN0b20uY3BwCi0gICAgYmluZGluZ3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcAogICAgIGJp
bmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNJ
bWFnZURhdGFDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhv
c3RDdXN0b20uY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJS
ZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJSZXF1ZXN0LmNwcAkocmV2aXNpb24gMjEwMjU4KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkx
LDcgQEAgSURCUmVxdWVzdDo6SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25DbwogICAgIDogSURC
QWN0aXZlRE9NT2JqZWN0KCZjb250ZXh0KQogICAgICwgbV90cmFuc2FjdGlvbigmdHJhbnNhY3Rp
b24pCiAgICAgLCBtX3Jlc291cmNlSWRlbnRpZmllcih0cmFuc2FjdGlvbi5jb25uZWN0aW9uUHJv
eHkoKSkKLSAgICAsIG1fb2JqZWN0U3RvcmVTb3VyY2UoJm9iamVjdFN0b3JlKQorICAgICwgbV9z
b3VyY2UoJm9iamVjdFN0b3JlKQogICAgICwgbV9jb25uZWN0aW9uUHJveHkodHJhbnNhY3Rpb24u
ZGF0YWJhc2UoKS5jb25uZWN0aW9uUHJveHkoKSkKIHsKICAgICBzdXNwZW5kSWZOZWVkZWQoKTsK
QEAgLTEwNyw4ICsxMDcsNyBAQCBJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlv
bkNvCiAgICAgc3VzcGVuZElmTmVlZGVkKCk7CiAKICAgICBXVEY6OnN3aXRjaE9uKGN1cnNvci5z
b3VyY2UoKSwKLSAgICAgICAgW3RoaXNdIChjb25zdCBSZWZQdHI8SURCSW5kZXg+JiBpbmRleCkg
eyB0aGlzLT5tX2luZGV4U291cmNlID0gaW5kZXg7IH0sCi0gICAgICAgIFt0aGlzXSAoY29uc3Qg
UmVmUHRyPElEQk9iamVjdFN0b3JlPiYgb2JqZWN0U3RvcmUpIHsgdGhpcy0+bV9vYmplY3RTdG9y
ZVNvdXJjZSA9IG9iamVjdFN0b3JlOyB9CisgICAgICAgIFt0aGlzXSAoY29uc3QgYXV0byYgdmFs
dWUpIHsgdGhpcy0+bV9zb3VyY2UgPSBJREJSZXF1ZXN0OjpTb3VyY2UgeyB2YWx1ZSB9OyB9CiAg
ICAgKTsKIAogICAgIGN1cnNvci5zZXRSZXF1ZXN0KCp0aGlzKTsKQEAgLTExOCw3ICsxMTcsNyBA
QCBJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvCiAgICAgOiBJREJBY3Rp
dmVET01PYmplY3QoJmNvbnRleHQpCiAgICAgLCBtX3RyYW5zYWN0aW9uKCZ0cmFuc2FjdGlvbikK
ICAgICAsIG1fcmVzb3VyY2VJZGVudGlmaWVyKHRyYW5zYWN0aW9uLmNvbm5lY3Rpb25Qcm94eSgp
KQotICAgICwgbV9pbmRleFNvdXJjZSgmaW5kZXgpCisgICAgLCBtX3NvdXJjZSgmaW5kZXgpCiAg
ICAgLCBtX2Nvbm5lY3Rpb25Qcm94eSh0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmNvbm5lY3Rpb25Q
cm94eSgpKQogewogICAgIHN1c3BlbmRJZk5lZWRlZCgpOwpAQCAtMTI4LDcgKzEyNyw3IEBAIElE
QlJlcXVlc3Q6OklEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ28KICAgICA6IElEQkFjdGl2ZURP
TU9iamVjdCgmY29udGV4dCkKICAgICAsIG1fdHJhbnNhY3Rpb24oJnRyYW5zYWN0aW9uKQogICAg
ICwgbV9yZXNvdXJjZUlkZW50aWZpZXIodHJhbnNhY3Rpb24uY29ubmVjdGlvblByb3h5KCkpCi0g
ICAgLCBtX29iamVjdFN0b3JlU291cmNlKCZvYmplY3RTdG9yZSkKKyAgICAsIG1fc291cmNlKCZv
YmplY3RTdG9yZSkKICAgICAsIG1fcmVxdWVzdGVkT2JqZWN0U3RvcmVSZWNvcmRUeXBlKHR5cGUp
CiAgICAgLCBtX2Nvbm5lY3Rpb25Qcm94eSh0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmNvbm5lY3Rp
b25Qcm94eSgpKQogewpAQCAtMTQ1LDggKzE0NCwyMCBAQCBJREJSZXF1ZXN0Ojp+SURCUmVxdWVz
dCgpCiB7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBvcmlnaW5UaHJlYWRJRCgpKTsK
IAotICAgIGlmIChtX2N1cnNvclJlc3VsdCkKLSAgICAgICAgbV9jdXJzb3JSZXN1bHQtPmNsZWFy
UmVxdWVzdCgpOworICAgIGlmIChtX3Jlc3VsdCkgeworICAgICAgICBXVEY6OnN3aXRjaE9uKG1f
cmVzdWx0LnZhbHVlKCksCisgICAgICAgICAgICBbXSAoUmVmUHRyPElEQkN1cnNvcj4mIGN1cnNv
cikgeyBjdXJzb3ItPmNsZWFyUmVxdWVzdCgpOyB9LAorICAgICAgICAgICAgW10gKGNvbnN0IGF1
dG8mKSB7IH0KKyAgICAgICAgKTsKKyAgICB9Cit9CisKK0V4Y2VwdGlvbk9yPHN0ZDo6b3B0aW9u
YWw8SURCUmVxdWVzdDo6UmVzdWx0Pj4gSURCUmVxdWVzdDo6cmVzdWx0KCkgY29uc3QKK3sKKyAg
ICBpZiAoIWlzRG9uZSgpKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSURCRGF0YWJhc2VF
eGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byByZWFk
IHRoZSAncmVzdWx0JyBwcm9wZXJ0eSBmcm9tICdJREJSZXF1ZXN0JzogVGhlIHJlcXVlc3QgaGFz
IG5vdCBmaW5pc2hlZC4iKSB9OworCisgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SURCUmVxdWVz
dDo6UmVzdWx0PiB7IG1fcmVzdWx0IH07CiB9CiAKIEV4Y2VwdGlvbk9yPERPTUVycm9yKj4gSURC
UmVxdWVzdDo6ZXJyb3IoKSBjb25zdApAQCAtMTU5LDI5ICsxNzAsMTUgQEAgRXhjZXB0aW9uT3I8
RE9NRXJyb3IqPiBJREJSZXF1ZXN0OjplcnJvcgogICAgIHJldHVybiBtX2RvbUVycm9yLmdldCgp
OwogfQogCi1zdGQ6Om9wdGlvbmFsPElEQlJlcXVlc3Q6OlNvdXJjZT4gSURCUmVxdWVzdDo6c291
cmNlKCkgY29uc3QKLXsKLSAgICBpZiAobV9jdXJzb3JTb3VyY2UpCi0gICAgICAgIHJldHVybiBT
b3VyY2UgeyBtX2N1cnNvclNvdXJjZSB9OwotICAgIGlmIChtX2luZGV4U291cmNlKQotICAgICAg
ICByZXR1cm4gU291cmNlIHsgbV9pbmRleFNvdXJjZSB9OwotICAgIGlmIChtX29iamVjdFN0b3Jl
U291cmNlKQotICAgICAgICByZXR1cm4gU291cmNlIHsgbV9vYmplY3RTdG9yZVNvdXJjZSB9Owot
Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQogdm9pZCBJREJSZXF1ZXN0OjpzZXRTb3Vy
Y2UoSURCQ3Vyc29yJiBjdXJzb3IpCiB7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBv
cmlnaW5UaHJlYWRJRCgpKTsKICAgICBBU1NFUlQoIW1fY3Vyc29yUmVxdWVzdE5vdGlmaWVyKTsK
IAotICAgIG1fb2JqZWN0U3RvcmVTb3VyY2UgPSBudWxscHRyOwotICAgIG1faW5kZXhTb3VyY2Ug
PSBudWxscHRyOwotICAgIG1fY3Vyc29yU291cmNlID0gJmN1cnNvcjsKKyAgICBtX3NvdXJjZSA9
IFNvdXJjZSB7ICZjdXJzb3IgfTsKICAgICBtX2N1cnNvclJlcXVlc3ROb3RpZmllciA9IHN0ZDo6
bWFrZV91bmlxdWU8U2NvcGVHdWFyZD4oW3RoaXNdKCkgewotICAgICAgICBBU1NFUlQobV9jdXJz
b3JTb3VyY2UpOwotICAgICAgICBtX2N1cnNvclNvdXJjZS0+ZGVjcmVtZW50T3V0c3RhbmRpbmdS
ZXF1ZXN0Q291bnQoKTsKKyAgICAgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVm
UHRyPElEQkN1cnNvcj4+KG1fc291cmNlLnZhbHVlKCkpKTsKKyAgICAgICAgV1RGOjpnZXQ8UmVm
UHRyPElEQkN1cnNvcj4+KG1fc291cmNlLnZhbHVlKCkpLT5kZWNyZW1lbnRPdXRzdGFuZGluZ1Jl
cXVlc3RDb3VudCgpOwogICAgIH0pOwogfQogCkBAIC0yMDUsMjAgKzIwMiwyOCBAQCB1aW50NjRf
dCBJREJSZXF1ZXN0Ojpzb3VyY2VPYmplY3RTdG9yZUlkCiB7CiAgICAgQVNTRVJUKGN1cnJlbnRU
aHJlYWQoKSA9PSBvcmlnaW5UaHJlYWRJRCgpKTsKIAotICAgIGlmIChtX29iamVjdFN0b3JlU291
cmNlKQotICAgICAgICByZXR1cm4gbV9vYmplY3RTdG9yZVNvdXJjZS0+aW5mbygpLmlkZW50aWZp
ZXIoKTsKLSAgICBpZiAobV9pbmRleFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIG1faW5kZXhTb3Vy
Y2UtPmluZm8oKS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKTsKLSAgICByZXR1cm4gMDsKKyAgICBp
ZiAoIW1fc291cmNlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBXVEY6OnN3aXRj
aE9uKG1fc291cmNlLnZhbHVlKCksCisgICAgICAgIFtdIChjb25zdCBSZWZQdHI8SURCT2JqZWN0
U3RvcmU+JiBvYmplY3RTdG9yZSkgeyByZXR1cm4gb2JqZWN0U3RvcmUtPmluZm8oKS5pZGVudGlm
aWVyKCk7IH0sCisgICAgICAgIFtdIChjb25zdCBSZWZQdHI8SURCSW5kZXg+JiBpbmRleCkgeyBy
ZXR1cm4gaW5kZXgtPmluZm8oKS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKTsgfSwKKyAgICAgICAg
W10gKGNvbnN0IFJlZlB0cjxJREJDdXJzb3I+JikgeyByZXR1cm4gMDsgfQorICAgICk7CiB9CiAK
IHVpbnQ2NF90IElEQlJlcXVlc3Q6OnNvdXJjZUluZGV4SWRlbnRpZmllcigpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBvcmlnaW5UaHJlYWRJRCgpKTsKIAotICAgIGlm
ICghbV9pbmRleFNvdXJjZSkKKyAgICBpZiAoIW1fc291cmNlKQogICAgICAgICByZXR1cm4gMDsK
LSAgICByZXR1cm4gbV9pbmRleFNvdXJjZS0+aW5mbygpLmlkZW50aWZpZXIoKTsKKworICAgIHJl
dHVybiBXVEY6OnN3aXRjaE9uKG1fc291cmNlLnZhbHVlKCksCisgICAgICAgIFtdIChjb25zdCBS
ZWZQdHI8SURCT2JqZWN0U3RvcmU+JikgeyByZXR1cm4gMDsgfSwKKyAgICAgICAgW10gKGNvbnN0
IFJlZlB0cjxJREJJbmRleD4mIGluZGV4KSB7IHJldHVybiBpbmRleC0+aW5mbygpLmlkZW50aWZp
ZXIoKTsgfSwKKyAgICAgICAgW10gKGNvbnN0IFJlZlB0cjxJREJDdXJzb3I+JikgeyByZXR1cm4g
MDsgfQorICAgICk7CiB9CiAKIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVSZWNvcmRUeXBlIElEQlJl
cXVlc3Q6OnJlcXVlc3RlZE9iamVjdFN0b3JlUmVjb3JkVHlwZSgpIGNvbnN0CkBAIC0yMzEsNyAr
MjM2LDggQEAgSW5kZXhlZERCOjpPYmplY3RTdG9yZVJlY29yZFR5cGUgSURCUmVxdQogSW5kZXhl
ZERCOjpJbmRleFJlY29yZFR5cGUgSURCUmVxdWVzdDo6cmVxdWVzdGVkSW5kZXhSZWNvcmRUeXBl
KCkgY29uc3QKIHsKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG9yaWdpblRocmVhZElE
KCkpOwotICAgIEFTU0VSVChtX2luZGV4U291cmNlKTsKKyAgICBBU1NFUlQobV9zb3VyY2UpOwor
ICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxJREJJbmRleD4+KG1fc291
cmNlLnZhbHVlKCkpKTsKIAogICAgIHJldHVybiBtX3JlcXVlc3RlZEluZGV4UmVjb3JkVHlwZTsK
IH0KQEAgLTM2Miw4ICszNjgsNyBAQCB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdChjb25zdCBJ
REJLZXlECiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm47CiAKLSAgICBjbGVhclJlc3Vs
dCgpOwotICAgIG1fc2NyaXB0UmVzdWx0ID0geyBjb250ZXh0LT52bSgpLCBpZGJLZXlEYXRhVG9T
Y3JpcHRWYWx1ZSgqZXhlYywga2V5RGF0YSkgfTsKKyAgICBtX3Jlc3VsdCA9IFJlc3VsdCB7IEpT
Qzo6U3Ryb25nPEpTQzo6VW5rbm93bj4geyBjb250ZXh0LT52bSgpLCBpZGJLZXlEYXRhVG9TY3Jp
cHRWYWx1ZSgqZXhlYywga2V5RGF0YSkgfSB9OwogfQogCiB2b2lkIElEQlJlcXVlc3Q6OnNldFJl
c3VsdChjb25zdCBWZWN0b3I8SURCS2V5RGF0YT4mIGtleURhdGFzKQpAQCAtMzc4LDEwICszODMs
OSBAQCB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdChjb25zdCBWZWN0b3I8CiAgICAgaWYgKCFz
dGF0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2xlYXJSZXN1bHQoKTsKIAogICAgIExvY2tl
cjxKU0xvY2s+IGxvY2tlcihjb250ZXh0LT52bSgpLmFwaUxvY2soKSk7Ci0gICAgbV9zY3JpcHRS
ZXN1bHQgPSB7IGNvbnRleHQtPnZtKCksIHRvSlMoc3RhdGUsIGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBrZXlEYXRhcykgfTsKKyAgICBt
X3Jlc3VsdCA9IFJlc3VsdCB7IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4geyBjb250ZXh0LT52
bSgpLCB0b0pTKHN0YXRlLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKSwga2V5RGF0YXMpIH0gfTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0Ojpz
ZXRSZXN1bHQoY29uc3QgVmVjdG9yPElEQlZhbHVlPiYgdmFsdWVzKQpAQCAtMzk2LDEwICs0MDAs
OCBAQCB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdChjb25zdCBWZWN0b3I8CiAgICAgaWYgKCFl
eGVjKQogICAgICAgICByZXR1cm47CiAKLSAgICBjbGVhclJlc3VsdCgpOwotCiAgICAgTG9ja2Vy
PEpTTG9jaz4gbG9ja2VyKGNvbnRleHQtPnZtKCkuYXBpTG9jaygpKTsKLSAgICBtX3NjcmlwdFJl
c3VsdCA9IHsgY29udGV4dC0+dm0oKSwgdG9KUyhleGVjLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCB2YWx1ZXMpIH07CisgICAgbV9yZXN1
bHQgPSBSZXN1bHQgeyBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+IHsgY29udGV4dC0+dm0oKSwg
dG9KUyhleGVjLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCkpLCB2YWx1ZXMpIH0gfTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQo
dWludDY0X3QgbnVtYmVyKQpAQCAtNDEwLDggKzQxMiw3IEBAIHZvaWQgSURCUmVxdWVzdDo6c2V0
UmVzdWx0KHVpbnQ2NF90IG51bWIKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGNsZWFyUmVzdWx0KCk7Ci0gICAgbV9zY3JpcHRSZXN1bHQgPSB7IGNvbnRleHQtPnZt
KCksIEpTQzo6anNOdW1iZXIobnVtYmVyKSB9OworICAgIG1fcmVzdWx0ID0gUmVzdWx0IHsgSlND
OjpTdHJvbmc8SlNDOjpVbmtub3duPiB7IGNvbnRleHQtPnZtKCksIEpTQzo6anNOdW1iZXIobnVt
YmVyKSB9IH07CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xv
bmUoY29uc3QgSURCVmFsdWUmIHZhbHVlKQpAQCAtNDI4LDE3ICs0MjksNyBAQCB2b2lkIElEQlJl
cXVlc3Q6OnNldFJlc3VsdFRvU3RydWN0dXJlZENsCiAgICAgaWYgKCFleGVjKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBjbGVhclJlc3VsdCgpOwotICAgIG1fc2NyaXB0UmVzdWx0ID0geyBjb250
ZXh0LT52bSgpLCBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKCpleGVjLCB2YWx1ZSkgfTsK
LX0KLQotdm9pZCBJREJSZXF1ZXN0OjpjbGVhclJlc3VsdCgpCi17Ci0gICAgQVNTRVJUKGN1cnJl
bnRUaHJlYWQoKSA9PSBvcmlnaW5UaHJlYWRJRCgpKTsKLQotICAgIG1fc2NyaXB0UmVzdWx0ID0g
eyB9OwotICAgIG1fY3Vyc29yUmVzdWx0ID0gbnVsbHB0cjsKLSAgICBtX2RhdGFiYXNlUmVzdWx0
ID0gbnVsbHB0cjsKKyAgICBtX3Jlc3VsdCA9IFJlc3VsdCB7IEpTQzo6U3Ryb25nPEpTQzo6VW5r
bm93bj4geyBjb250ZXh0LT52bSgpLCBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKCpleGVj
LCB2YWx1ZSkgfSB9OwogfQogCiB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdFRvVW5kZWZpbmVk
KCkKQEAgLTQ0OSwxNSArNDQwLDIwIEBAIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9VbmRl
ZmluZWQoKQogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2xlYXJS
ZXN1bHQoKTsKLSAgICBtX3NjcmlwdFJlc3VsdCA9IHsgY29udGV4dC0+dm0oKSwgSlNDOjpqc1Vu
ZGVmaW5lZCgpIH07CisgICAgbV9yZXN1bHQgPSBSZXN1bHQgeyBKU0M6OlN0cm9uZzxKU0M6OlVu
a25vd24+IHsgY29udGV4dC0+dm0oKSwgSlNDOjpqc1VuZGVmaW5lZCgpIH0gfTsKIH0KIAogSURC
Q3Vyc29yKiBJREJSZXF1ZXN0OjpyZXN1bHRDdXJzb3IoKQogewogICAgIEFTU0VSVChjdXJyZW50
VGhyZWFkKCkgPT0gb3JpZ2luVGhyZWFkSUQoKSk7CiAKLSAgICByZXR1cm4gbV9jdXJzb3JSZXN1
bHQuZ2V0KCk7CisgICAgaWYgKCFtX3Jlc3VsdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3Jlc3VsdC52YWx1ZSgpLAorICAgICAgICBbXSAo
UmVmUHRyPElEQkN1cnNvcj4mIGN1cnNvcikgLT4gSURCQ3Vyc29yKiB7IHJldHVybiBjdXJzb3Iu
Z2V0KCk7IH0sCisgICAgICAgIFtdIChjb25zdCBhdXRvJikgLT4gSURCQ3Vyc29yKiB7IHJldHVy
biBudWxscHRyOyB9CisgICAgKTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0Ojp3aWxsSXRlcmF0ZUN1
cnNvcihJREJDdXJzb3ImIGN1cnNvcikKQEAgLTQ3Miw3ICs0NjgsNyBAQCB2b2lkIElEQlJlcXVl
c3Q6OndpbGxJdGVyYXRlQ3Vyc29yKElEQkN1CiAKICAgICBtX3BlbmRpbmdDdXJzb3IgPSAmY3Vy
c29yOwogICAgIG1faGFzUGVuZGluZ0FjdGl2aXR5ID0gdHJ1ZTsKLSAgICBjbGVhclJlc3VsdCgp
OworICAgIG1fcmVzdWx0ID0gc3RkOjpudWxsb3B0OwogICAgIG1fcmVhZHlTdGF0ZSA9IFJlYWR5
U3RhdGU6OlBlbmRpbmc7CiAgICAgbV9kb21FcnJvciA9IG51bGxwdHI7CiAgICAgbV9pZGJFcnJv
ciA9IHsgfTsKQEAgLTQ4NywxMiArNDgzLDEyIEBAIHZvaWQgSURCUmVxdWVzdDo6ZGlkT3Blbk9y
SXRlcmF0ZUN1cnNvcigKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG9yaWdpblRocmVh
ZElEKCkpOwogICAgIEFTU0VSVChtX3BlbmRpbmdDdXJzb3IpOwogCi0gICAgY2xlYXJSZXN1bHQo
KTsKKyAgICBtX3Jlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKIAogICAgIGlmIChyZXN1bHREYXRhLnR5
cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpJdGVyYXRlQ3Vyc29yU3VjY2VzcyB8fCByZXN1bHREYXRh
LnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpPcGVuQ3Vyc29yU3VjY2VzcykgewogICAgICAgICBt
X3BlbmRpbmdDdXJzb3ItPnNldEdldFJlc3VsdCgqdGhpcywgcmVzdWx0RGF0YS5nZXRSZXN1bHQo
KSk7CiAgICAgICAgIGlmIChyZXN1bHREYXRhLmdldFJlc3VsdCgpLmlzRGVmaW5lZCgpKQotICAg
ICAgICAgICAgbV9jdXJzb3JSZXN1bHQgPSBtX3BlbmRpbmdDdXJzb3I7CisgICAgICAgICAgICBt
X3Jlc3VsdCA9IFJlc3VsdCB7IG1fcGVuZGluZ0N1cnNvciB9OwogICAgIH0KIAogICAgIG1fY3Vy
c29yUmVxdWVzdE5vdGlmaWVyID0gbnVsbHB0cjsKQEAgLTUzNyw4ICs1MzMsNyBAQCB2b2lkIElE
QlJlcXVlc3Q6OnNldFJlc3VsdChSZWY8SURCRGF0YWJhCiB7CiAgICAgQVNTRVJUKGN1cnJlbnRU
aHJlYWQoKSA9PSBvcmlnaW5UaHJlYWRJRCgpKTsKIAotICAgIGNsZWFyUmVzdWx0KCk7Ci0gICAg
bV9kYXRhYmFzZVJlc3VsdCA9IFdURk1vdmUoZGF0YWJhc2UpOworICAgIG1fcmVzdWx0ID0gUmVz
dWx0IHsgUmVmUHRyPElEQkRhdGFiYXNlPiB7IFdURk1vdmUoZGF0YWJhc2UpIH0gfTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlJlcXVlc3QuaAkocmV2aXNpb24gMjEwMjU4KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nywx
MiArNjcsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+SURCUmVxdWVzdCgpOwogCi0gICAg
SURCQ3Vyc29yKiBjdXJzb3JSZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX2N1cnNvclJlc3VsdC5n
ZXQoKTsgfQotICAgIElEQkRhdGFiYXNlKiBkYXRhYmFzZVJlc3VsdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YWJhc2VSZXN1bHQuZ2V0KCk7IH0KLSAgICBKU0M6OkpTVmFsdWUgc2NyaXB0UmVzdWx0
KCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHRSZXN1bHQuZ2V0KCk7IH0KKyAgICB1c2luZyBSZXN1
bHQgPSBWYXJpYW50PFJlZlB0cjxJREJDdXJzb3I+LCBSZWZQdHI8SURCRGF0YWJhc2U+LCBKU0M6
OlN0cm9uZzxKU0M6OlVua25vd24+PjsKKyAgICBFeGNlcHRpb25PcjxzdGQ6Om9wdGlvbmFsPFJl
c3VsdD4+IHJlc3VsdCgpIGNvbnN0OwogCiAgICAgdXNpbmcgU291cmNlID0gVmFyaWFudDxSZWZQ
dHI8SURCT2JqZWN0U3RvcmU+LCBSZWZQdHI8SURCSW5kZXg+LCBSZWZQdHI8SURCQ3Vyc29yPj47
Ci0gICAgc3RkOjpvcHRpb25hbDxTb3VyY2U+IHNvdXJjZSgpIGNvbnN0OworICAgIGNvbnN0IHN0
ZDo6b3B0aW9uYWw8U291cmNlPiYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0K
IAogICAgIEV4Y2VwdGlvbk9yPERPTUVycm9yKj4gZXJyb3IoKSBjb25zdDsKIApAQCAtMTQxLDgg
KzE0MCw2IEBAIHByaXZhdGU6CiAgICAgSURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiwgSURCT2JqZWN0U3RvcmUmLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlUmVjb3JkVHlwZSwgSURC
VHJhbnNhY3Rpb24mKTsKICAgICBJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJ
REJJbmRleCYsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlLCBJREJUcmFuc2FjdGlvbiYpOwog
Ci0gICAgdm9pZCBjbGVhclJlc3VsdCgpOwotCiAgICAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZl
bnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGNvbnN0IGNoYXIqIGFj
dGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBmaW5hbDsKQEAgLTE2MSwxOCArMTU4LDExIEBAIHBy
aXZhdGU6CiAKICAgICBJREJDdXJzb3IqIHJlc3VsdEN1cnNvcigpOwogCi0gICAgLy8gQ291bGQg
Y29uc2lkZXIgc3RvcmluZyB0aGVzZSB0aHJlZSBpbiBhIHVuaW9uIG9yIHVuaW9uLWxpa2UgY2xh
c3MgaW5zdGVhZC4KLSAgICBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+IG1fc2NyaXB0UmVzdWx0
OwotICAgIFJlZlB0cjxJREJDdXJzb3I+IG1fY3Vyc29yUmVzdWx0OwotICAgIFJlZlB0cjxJREJE
YXRhYmFzZT4gbV9kYXRhYmFzZVJlc3VsdDsKLQogICAgIElEQkVycm9yIG1faWRiRXJyb3I7CiAg
ICAgSURCUmVzb3VyY2VJZGVudGlmaWVyIG1fcmVzb3VyY2VJZGVudGlmaWVyOwogCi0gICAgLy8g
Q291bGQgY29uc2lkZXIgc3RvcmluZyB0aGVzZSB0aHJlZSBpbiBhIHVuaW9uIG9yIHVuaW9uLWxp
a2UgY2xhc3MgaW5zdGVhZC4KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG1fb2JqZWN0U3Rv
cmVTb3VyY2U7Ci0gICAgUmVmUHRyPElEQkluZGV4PiBtX2luZGV4U291cmNlOwotICAgIFJlZlB0
cjxJREJDdXJzb3I+IG1fY3Vyc29yU291cmNlOworICAgIHN0ZDo6b3B0aW9uYWw8UmVzdWx0PiBt
X3Jlc3VsdDsKKyAgICBzdGQ6Om9wdGlvbmFsPFNvdXJjZT4gbV9zb3VyY2U7CiAKICAgICBib29s
IG1faGFzUGVuZGluZ0FjdGl2aXR5IHsgdHJ1ZSB9OwogICAgIEluZGV4ZWREQjo6T2JqZWN0U3Rv
cmVSZWNvcmRUeXBlIG1fcmVxdWVzdGVkT2JqZWN0U3RvcmVSZWNvcmRUeXBlIHsgSW5kZXhlZERC
OjpPYmplY3RTdG9yZVJlY29yZFR5cGU6OlZhbHVlT25seSB9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwJKHJldmlzaW9uIDIxMDI1
OCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAgICAgR2VuZXJhdGVJc1JlYWNoYWJsZT1J
bXBsLAogICAgIFNraXBWVGFibGVWYWxpZGF0aW9uLAogXSBpbnRlcmZhY2UgSURCUmVxdWVzdCA6
IEV2ZW50VGFyZ2V0IHsKLSAgICBbQ3VzdG9tR2V0dGVyLCBHZXR0ZXJNYXlUaHJvd0V4Y2VwdGlv
bl0gcmVhZG9ubHkgYXR0cmlidXRlIGFueSByZXN1bHQ7CisgICAgW0dldHRlck1heVRocm93RXhj
ZXB0aW9uXSByZWFkb25seSBhdHRyaWJ1dGUgKElEQkN1cnNvciBvciBJREJEYXRhYmFzZSBvciBh
bnkpPyByZXN1bHQ7CiAgICAgW0dldHRlck1heVRocm93RXhjZXB0aW9uXSByZWFkb25seSBhdHRy
aWJ1dGUgRE9NRXJyb3I/IGVycm9yOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSAoSURCT2JqZWN0
U3RvcmUgb3IgSURCSW5kZXggb3IgSURCQ3Vyc29yKT8gc291cmNlOwogICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBJREJUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxMDI1
OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjg5OCw3ICsyODk4LDYgQEAKIAkJN0NEMEJBMDUxQjhGNzlDOTAw
NUNFQkJFIC8qIEFjdGl2ZURPTUNhbGxiYWNrTWljcm90YXNrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0QwQkEwMzFCOEY3OUM5MDA1Q0VCQkUgLyog
QWN0aXZlRE9NQ2FsbGJhY2tNaWNyb3Rhc2suaCAqLzsgfTsKIAkJN0NENDk0Q0MxQTg2RUIxRDAw
MEE4N0VDIC8qIFJlbmRlckF0dGFjaG1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0NENDk0Q0ExQTg2RUIxRDAwMEE4N0VDIC8qIFJlbmRlckF0
dGFjaG1lbnQuY3BwICovOyB9OwogCQk3Q0Q0OTRDRDFBODZFQjFEMDAwQTg3RUMgLyogUmVuZGVy
QXR0YWNobWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0NENDk0Q0IxQTg2RUIxRDAwMEE4N0VDIC8qIFJlbmRlckF0dGFjaG1lbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk3Q0Q2ODY1NjFFMEUy
NkQzMDBFOTdBQTcgLyogSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRDY4NjU1MUUwRTI2RDMwMEU5N0FBNyAvKiBK
U0lEQlJlcXVlc3RDdXN0b20uY3BwICovOyB9OwogCQk3Q0U1OEQ0QTFERDY0QTVCMDAxMjg1NTIg
LyogU1ZHUG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDRTU4RDQ5MURENjRBNUIwMDEyODU1MiAvKiBTVkdQb2ludC5oICovOyB9OwogCQk3Q0U1
OEQ0RTFERDY5NEZFMDAxMjg1NTIgLyogU1ZHUmVjdFRyYWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNThENEQxREQ2OTRGRTAwMTI4NTUyIC8q
IFNWR1JlY3RUcmFpdHMuaCAqLzsgfTsKIAkJN0NFNThENTAxREQ2OUExRTAwMTI4NTUyIC8qIFNW
R051bWJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0NFNThENEYxREQ2OUExRTAwMTI4NTUyIC8qIFNWR051bWJlci5oICovOyB9OwpAQCAtMTA0MDUs
NyArMTA0MDQsNiBAQAogCQk3Q0QwQkEwMzFCOEY3OUM5MDA1Q0VCQkUgLyogQWN0aXZlRE9NQ2Fs
bGJhY2tNaWNyb3Rhc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWN0aXZl
RE9NQ2FsbGJhY2tNaWNyb3Rhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NE
NDk0Q0ExQTg2RUIxRDAwMEE4N0VDIC8qIFJlbmRlckF0dGFjaG1lbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyQXR0YWNobWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRDQ5NENCMUE4NkVCMUQwMDBBODdFQyAvKiBSZW5kZXJB
dHRhY2htZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckF0dGFj
aG1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0NENjg2NTUxRTBFMjZEMzAw
RTk3QUE3IC8qIEpTSURCUmVxdWVzdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0lEQlJlcXVlc3RDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3Q0U1OEQ0OTFERDY0QTVCMDAxMjg1NTIgLyogU1ZHUG9pbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0NFNThENEQxREQ2OTRGRTAwMTI4NTUyIC8qIFNWR1JlY3RUcmFpdHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUmVjdFRyYWl0cy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0U1OEQ0RjFERDY5QTFFMDAxMjg1NTIgLyogU1ZHTnVt
YmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR051bWJlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIxMzMsNyArMjIxMzEsNiBAQAogCQkJCUJDMTdG
OTY1MEI2NEVCQjgwMDRBNjVDQiAvKiBKU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcCAqLywK
IAkJCQlBQjRDQjRFQTBCOEJEQTNEMDA5RjQwQjAgLyogSlNIVE1MU2VsZWN0RWxlbWVudEN1c3Rv
bS5oICovLAogCQkJCUQ2Rjc5NjBDMTY2RkZFQ0UwMDc2REQxOCAvKiBKU0hUTUxUZW1wbGF0ZUVs
ZW1lbnRDdXN0b20uY3BwICovLAotCQkJCTdDRDY4NjU1MUUwRTI2RDMwMEU5N0FBNyAvKiBKU0lE
QlJlcXVlc3RDdXN0b20uY3BwICovLAogCQkJCTdBNzRFQ0JDMTAxODM5REEwMEJGOTM5RSAvKiBK
U0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAgKi8sCiAJCQkJQkNFMUM0M0YwRDk4MzBG
NDAwM0IwMkYyIC8qIEpTTG9jYXRpb25DdXN0b20uY3BwICovLAogCQkJCTJEOUJGNzQ4MURCRkRE
RjgwMDdBN0Q5OSAvKiBKU01lZGlhS2V5U2Vzc2lvbkN1c3RvbS5jcHAgKi8sCkBAIC0zMTc0MSw3
ICszMTczOCw2IEBACiAJCQkJNDlDN0I5RDkxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVy
YnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QzdCOURGMTA0MkQzMkYwMDA5RDQ0NyAv
KiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRDNGM0QzNjkx
QTY5QjdCMDAwNTlGQzJCIC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJN0NENjg2NTYxRTBFMjZEMzAwRTk3QUE3IC8qIEpTSURCUmVxdWVzdEN1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2Rjk5NUEyMTFBNzA3OEIxMDBBNzM1RjQgLyogV2Vi
R0xTYW1wbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QzdCOUUyMTA0MkQzMkYwMDA5RDQ0
NyAvKiBXZWJHTFNoYWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMDhDRjE1NDE1MkI3N0Iz
MDA5QzU3NzUgLyogV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0lETFR5cGVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9JRExUeXBlcy5oCShyZXZp
c2lvbiAyMTAyNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0lETFR5cGVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNp
bmNsdWRlIDxoZWFwL0hhbmRsZVR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL0JyaWdhbmQuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAg
LTU5LDcgKzYwLDE0IEBAIHN0cnVjdCBJRExVbnN1cHBvcnRlZFR5cGUgOiBJRExUeXBlPHZvaWQK
IC8vIElETE51bGwgaXMgYSBzcGVjaWFsIHR5cGUgZm9yIHVzZSBhcyBhIHN1YnR5cGUgaW4gYW4g
SURMVW5pb24gdGhhdCBpcyBudWxsYWJsZS4KIHN0cnVjdCBJRExOdWxsIDogSURMVHlwZTxzdGQ6
Om51bGxwdHJfdD4geyB9OwogCi1zdHJ1Y3QgSURMQW55IDogSURMVHlwZTxKU0M6OkpTVmFsdWU+
IHsgfTsKK3N0cnVjdCBJRExBbnkgOiBJRExUeXBlPEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4+
IHsKKyAgICB1c2luZyBQYXJhbWV0ZXJUeXBlID0gSlNDOjpKU1ZhbHVlOworCisgICAgdXNpbmcg
TnVsbGFibGVUeXBlID0gSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPjsKKyAgICBzdGF0aWMgaW5s
aW5lIHN0ZDo6bnVsbHB0cl90IG51bGxWYWx1ZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgaW5saW5lIGJvb2wgaXNOdWxsVmFsdWUoVSYmIHZh
bHVlKSB7IHJldHVybiAhdmFsdWU7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMg
aW5saW5lIFUmJiBleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoVSYmIHZhbHVlKSB7IHJldHVybiBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpOyB9Cit9OwogCiBzdHJ1Y3QgSURMQm9vbGVhbiA6IElETFR5
cGU8Ym9vbD4geyB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNv
bnZlcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNv
bnZlcnQuaAkocmV2aXNpb24gMjEwMjU4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01Db252ZXJ0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRl
ICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWUuaD4KICNpbmNs
dWRlIDxydW50aW1lL0pTT05PYmplY3QuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjE0
LDEwICsyMTUsMTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRDb252ZQog
Ly8gTUFSSzogQW55IHR5cGUKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFueT4g
OiBEZWZhdWx0Q29udmVydGVyPElETEFueT4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBl
bmFtZSBKU0M6OkpTVmFsdWU7CisgICAgCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgcmV0
dXJuIHZhbHVlOwogICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25z
dCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biB2YWx1ZS5nZXQoKTsKKyAgICB9CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExBbnk+IHsKQEAgLTI1MSw2ICsyNTksMTEgQEAgbmFtZXNwYWNlIERldGFpbCB7CiAgICAg
c3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+PiB7CiAgICAgICAg
IHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6UmV0dXJu
VHlwZTsKICAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZl
cnNpb25UeXBlPElETEFueT4geworICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVy
dGVyPElETEFueT46OlJldHVyblR5cGU7CisgICAgfTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TE51bGxhYmxlPFQ+PiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlJl
cXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSURCUmVxdWVzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDIxMDI1OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSURCUmVxdWVzdEN1c3RvbS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAt
MSw2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkpTSURCUmVxdWVzdC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNs
dWRlICJKU0lEQkN1cnNvci5oIgotI2luY2x1ZGUgIkpTSURCRGF0YWJhc2UuaCIKLSNpbmNsdWRl
ICJKU0lEQkluZGV4LmgiCi0jaW5jbHVkZSAiSlNJREJPYmplY3RTdG9yZS5oIgotCi11c2luZyBu
YW1lc3BhY2UgSlNDOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUpTVmFsdWUgSlNJREJSZXF1
ZXN0OjpyZXN1bHQoRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKLXsKLSAgICBhdXRvJiByZXF1ZXN0
ID0gd3JhcHBlZCgpOwotCi0gICAgaWYgKCFyZXF1ZXN0LmlzRG9uZSgpKSB7Ci0gICAgICAgIGF1
dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCBFeGNl
cHRpb24geyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0
ZXJhbCgiRmFpbGVkIHRvIHJlYWQgdGhlICdyZXN1bHQnIHByb3BlcnR5IGZyb20gJ0lEQlJlcXVl
c3QnOiBUaGUgcmVxdWVzdCBoYXMgbm90IGZpbmlzaGVkLiIpIH0pOwotICAgICAgICByZXR1cm4g
eyB9OwotICAgIH0KLQotICAgIGlmIChhdXRvKiBjdXJzb3IgPSByZXF1ZXN0LmN1cnNvclJlc3Vs
dCgpKQotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCAqY3Vyc29y
KTsKLSAgICBpZiAoYXV0byogZGF0YWJhc2UgPSByZXF1ZXN0LmRhdGFiYXNlUmVzdWx0KCkpCi0g
ICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksICpkYXRhYmFzZSk7Ci0g
ICAgaWYgKGF1dG8gcmVzdWx0ID0gcmVxdWVzdC5zY3JpcHRSZXN1bHQoKSkKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICByZXR1cm4ganNOdWxsKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3Bw
CShyZXZpc2lvbiAyMTAyNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
SW5kZXhlZERCQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsMTcgKzEyMywyMCBAQCBw
dWJsaWM6CiAgICAgICAgIH0KIAogICAgICAgICBhdXRvJiByZXF1ZXN0ID0gc3RhdGljX2Nhc3Q8
SURCT3BlbkRCUmVxdWVzdCY+KCpldmVudC0+dGFyZ2V0KCkpOwotICAgICAgICBpZiAoIXJlcXVl
c3QuaXNEb25lKCkpIHsKKworICAgICAgICBhdXRvIHJlc3VsdCA9IHJlcXVlc3QucmVzdWx0KCk7
CisgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKICAgICAgICAgICAgIG1fZXhl
Y3V0YWJsZVdpdGhEYXRhYmFzZS0+cmVxdWVzdENhbGxiYWNrKCkuc2VuZEZhaWx1cmUoIkNvdWxk
IG5vdCBnZXQgcmVzdWx0IGluIGNhbGxiYWNrLiIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKLSAgICAgICAgYXV0byBkYXRhYmFzZVJlc3VsdCA9IHJlcXVlc3QuZGF0YWJhc2VS
ZXN1bHQoKTsKLSAgICAgICAgaWYgKCFkYXRhYmFzZVJlc3VsdCkgeworICAgICAgICBhdXRvIHJl
c3VsdFZhbHVlID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOworICAgICAgICBpZiAoIXJl
c3VsdFZhbHVlIHx8ICFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxJREJEYXRhYmFzZT4+
KHJlc3VsdFZhbHVlLnZhbHVlKCkpKSB7CiAgICAgICAgICAgICBtX2V4ZWN1dGFibGVXaXRoRGF0
YWJhc2UtPnJlcXVlc3RDYWxsYmFjaygpLnNlbmRGYWlsdXJlKCJVbmV4cGVjdGVkIHJlc3VsdCB0
eXBlLiIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKKyAgICAgICAgYXV0byBk
YXRhYmFzZVJlc3VsdCA9IFdURjo6Z2V0PFJlZlB0cjxJREJEYXRhYmFzZT4+KHJlc3VsdFZhbHVl
LnZhbHVlKCkpOwogICAgICAgICBtX2V4ZWN1dGFibGVXaXRoRGF0YWJhc2UtPmV4ZWN1dGUoKmRh
dGFiYXNlUmVzdWx0KTsKICAgICAgICAgZGF0YWJhc2VSZXN1bHQtPmNsb3NlKCk7CiAgICAgfQpA
QCAtMzYyLDI2ICszNjUsMjMgQEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgYXV0byYg
cmVxdWVzdCA9IHN0YXRpY19jYXN0PElEQlJlcXVlc3QmPigqZXZlbnQtPnRhcmdldCgpKTsKLSAg
ICAgICAgaWYgKCFyZXF1ZXN0LmlzRG9uZSgpKSB7CisKKyAgICAgICAgYXV0byByZXN1bHQgPSBy
ZXF1ZXN0LnJlc3VsdCgpOworICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CiAg
ICAgICAgICAgICBtX3JlcXVlc3RDYWxsYmFjay0+c2VuZEZhaWx1cmUoIkNvdWxkIG5vdCBnZXQg
cmVzdWx0IGluIGNhbGxiYWNrLiIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBpZiAocmVxdWVzdC5zY3JpcHRSZXN1bHQoKSkgewotICAgICAgICAg
ICAgZW5kKGZhbHNlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgYXV0byogY3Vyc29yUmVzdWx0ID0gcmVxdWVzdC5jdXJzb3JSZXN1bHQoKTsKLSAg
ICAgICAgaWYgKCFjdXJzb3JSZXN1bHQpIHsKKyAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IHJl
c3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKKyAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSB8fCAh
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCQ3Vyc29yPj4ocmVzdWx0VmFsdWUudmFs
dWUoKSkpIHsKICAgICAgICAgICAgIGVuZChmYWxzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAotICAgICAgICBhdXRvJiBjdXJzb3IgPSAqY3Vyc29yUmVzdWx0OworICAgICAg
ICBhdXRvIGN1cnNvciA9IFdURjo6Z2V0PFJlZlB0cjxJREJDdXJzb3I+PihyZXN1bHRWYWx1ZS52
YWx1ZSgpKTsKIAogICAgICAgICBpZiAobV9za2lwQ291bnQpIHsKLSAgICAgICAgICAgIGlmIChj
dXJzb3IuYWR2YW5jZShtX3NraXBDb3VudCkuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBp
ZiAoY3Vyc29yLT5hZHZhbmNlKG1fc2tpcENvdW50KS5oYXNFeGNlcHRpb24oKSkKICAgICAgICAg
ICAgICAgICBtX3JlcXVlc3RDYWxsYmFjay0+c2VuZEZhaWx1cmUoIkNvdWxkIG5vdCBhZHZhbmNl
IGN1cnNvci4iKTsKICAgICAgICAgICAgIG1fc2tpcENvdW50ID0gMDsKICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTM5Myw3ICszOTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAogICAgICAgICAv
LyBDb250aW51ZSBjdXJzb3IgYmVmb3JlIG1ha2luZyBpbmplY3RlZCBzY3JpcHQgY2FsbHMsIG90
aGVyd2lzZSB0cmFuc2FjdGlvbiBtaWdodCBiZSBmaW5pc2hlZC4KLSAgICAgICAgaWYgKGN1cnNv
ci5jb250aW51ZUZ1bmN0aW9uKG51bGxwdHIpLmhhc0V4Y2VwdGlvbigpKSB7CisgICAgICAgIGlm
IChjdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24obnVsbHB0cikuaGFzRXhjZXB0aW9uKCkpIHsKICAg
ICAgICAgICAgIG1fcmVxdWVzdENhbGxiYWNrLT5zZW5kRmFpbHVyZSgiQ291bGQgbm90IGNvbnRp
bnVlIGN1cnNvci4iKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNDAzLDkg
KzQwMyw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBhdXRvIGRh
dGFFbnRyeSA9IERhdGFFbnRyeTo6Y3JlYXRlKCkKLSAgICAgICAgICAgIC5zZXRLZXkobV9pbmpl
Y3RlZFNjcmlwdC53cmFwT2JqZWN0KGN1cnNvci5rZXkoKSwgU3RyaW5nKCksIHRydWUpKQotICAg
ICAgICAgICAgLnNldFByaW1hcnlLZXkobV9pbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGN1cnNv
ci5wcmltYXJ5S2V5KCksIFN0cmluZygpLCB0cnVlKSkKLSAgICAgICAgICAgIC5zZXRWYWx1ZSht
X2luamVjdGVkU2NyaXB0LndyYXBPYmplY3QoY3Vyc29yLnZhbHVlKCksIFN0cmluZygpLCB0cnVl
KSkKKyAgICAgICAgICAgIC5zZXRLZXkobV9pbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGN1cnNv
ci0+a2V5KCksIFN0cmluZygpLCB0cnVlKSkKKyAgICAgICAgICAgIC5zZXRQcmltYXJ5S2V5KG1f
aW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChjdXJzb3ItPnByaW1hcnlLZXkoKSwgU3RyaW5nKCks
IHRydWUpKQorICAgICAgICAgICAgLnNldFZhbHVlKG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVj
dChjdXJzb3ItPnZhbHVlKCksIFN0cmluZygpLCB0cnVlKSkKICAgICAgICAgICAgIC5yZWxlYXNl
KCk7CiAgICAgICAgIG1fcmVzdWx0LT5hZGRJdGVtKFdURk1vdmUoZGF0YUVudHJ5KSk7CiAgICAg
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297973</attachid>
            <date>2017-01-03 17:16:32 -0800</date>
            <delta_ts>2017-01-03 17:29:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-166671-20170103171506.patch</filename>
            <type>text/plain</type>
            <size>27276</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMDI1OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE3LTAxLTAzICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIGZpbmFsIGN1c3RvbSBiaW5k
aW5nIGZyb20gSURCUmVxdWVzdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY2NjcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIFJlbW92ZSBKU0lEQlJlcXVlc3RDdXN0b20uY3Bw
CisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwOiBSZW1vdmVk
LgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlJlcXVlc3Q6On5JREJSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnJl
c3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzZXRTb3VyY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c291cmNlT2JqZWN0U3RvcmVJZGVudGlmaWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNvdXJjZUluZGV4SWRlbnRpZmllcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpyZXF1ZXN0ZWRJbmRleFJlY29yZFR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c2V0UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlJlcXVlc3Q6OnNldFJlc3VsdFRvU3RydWN0dXJlZENsb25lKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlJlcXVlc3Q6OnNldFJlc3VsdFRvVW5kZWZpbmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlJlcXVlc3Q6OnJlc3VsdEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0
Ojp3aWxsSXRlcmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpkaWRP
cGVuT3JJdGVyYXRlQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNvdXJj
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpjbGVhclJlc3VsdCk6
IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlJlcXVlc3Q6OmN1cnNvclJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXF1ZXN0OjpkYXRhYmFzZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXF1ZXN0OjpzY3JpcHRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICBSZXBsYWNlIG11bHRpcGxl
IG1lbWJlciB2YXJpYWJsZXMgd2l0aCBWYXJpYW50cyBmb3Igc291cmNlIGFuZCByZXN1bHQuIEFk
ZCBhIHJlc3VsdAorICAgICAgICBtZW1iZXIgZnVuY3Rpb24gdGhhdCBwcm9wZXJseSBzZXRzIGFu
IGV4Y2VwdGlvbiBpZiBub3QgImRvbmUiLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCUmVxdWVzdC5pZGw6CisgICAgICAgIFJlbW92ZSBDdXN0b21HZXR0ZXIgYW5ub3RhdGlvbiBh
bmQgYWRkIHR5cGUuCisKKyAgICAgICAgKiBiaW5kaW5ncy9nZW5lcmljL0lETFR5cGVzLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpJRExBbnk6Om51bGxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
RExBbnk6OmlzTnVsbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OklETEFueTo6ZXh0cmFjdFZh
bHVlRnJvbU51bGxhYmxlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnZlcnRlcjxJRExBbnk+Ojpjb252ZXJ0KToKKyAgICAgICAg
Rmxlc2ggb3V0IElETEFueSB0byBiZSBpbXBsZW1lbnRlZCBhcyBhIFN0cm9uZzxVbmtub3duPiB3
aGVuIHVzZWQgaW4gYWdncmVnYXRlIHR5cGVzLAorICAgICAgICBidXQgc3RpbGwgd29yayB3aXRo
IEpTVmFsdWUgd2hlbiBwYXNzaW5nIGFzIGEgcGFyYW1ldGVyLgorCisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcDoKKyAgICAgICAgVXBkYXRlIGZvciBuZXcg
cmV0dXJuIHZhbHVlIG9mIElEQlJlcXVlc3Q6OnJlc3VsdCgpLgorCiAyMDE3LTAxLTAzICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgU2hhcmVkQnVmZmVy
TWFjLm1tIHRvIFNoYXJlZEJ1ZmZlckNvY29hLm1tCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMjEwMjU4KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTExNDgsNyArMTE0OCw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBi
aW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9q
cy9KU0lEQkluZGV4Q3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVD
dXN0b20uY3BwCi0gICAgYmluZGluZ3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcAogICAgIGJp
bmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNJ
bWFnZURhdGFDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhv
c3RDdXN0b20uY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJS
ZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJSZXF1ZXN0LmNwcAkocmV2aXNpb24gMjEwMjU4KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkx
LDcgQEAgSURCUmVxdWVzdDo6SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25DbwogICAgIDogSURC
QWN0aXZlRE9NT2JqZWN0KCZjb250ZXh0KQogICAgICwgbV90cmFuc2FjdGlvbigmdHJhbnNhY3Rp
b24pCiAgICAgLCBtX3Jlc291cmNlSWRlbnRpZmllcih0cmFuc2FjdGlvbi5jb25uZWN0aW9uUHJv
eHkoKSkKLSAgICAsIG1fb2JqZWN0U3RvcmVTb3VyY2UoJm9iamVjdFN0b3JlKQorICAgICwgbV9z
b3VyY2UoJm9iamVjdFN0b3JlKQogICAgICwgbV9jb25uZWN0aW9uUHJveHkodHJhbnNhY3Rpb24u
ZGF0YWJhc2UoKS5jb25uZWN0aW9uUHJveHkoKSkKIHsKICAgICBzdXNwZW5kSWZOZWVkZWQoKTsK
QEAgLTEwNyw4ICsxMDcsNyBAQCBJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlv
bkNvCiAgICAgc3VzcGVuZElmTmVlZGVkKCk7CiAKICAgICBXVEY6OnN3aXRjaE9uKGN1cnNvci5z
b3VyY2UoKSwKLSAgICAgICAgW3RoaXNdIChjb25zdCBSZWZQdHI8SURCSW5kZXg+JiBpbmRleCkg
eyB0aGlzLT5tX2luZGV4U291cmNlID0gaW5kZXg7IH0sCi0gICAgICAgIFt0aGlzXSAoY29uc3Qg
UmVmUHRyPElEQk9iamVjdFN0b3JlPiYgb2JqZWN0U3RvcmUpIHsgdGhpcy0+bV9vYmplY3RTdG9y
ZVNvdXJjZSA9IG9iamVjdFN0b3JlOyB9CisgICAgICAgIFt0aGlzXSAoY29uc3QgYXV0byYgdmFs
dWUpIHsgdGhpcy0+bV9zb3VyY2UgPSBJREJSZXF1ZXN0OjpTb3VyY2UgeyB2YWx1ZSB9OyB9CiAg
ICAgKTsKIAogICAgIGN1cnNvci5zZXRSZXF1ZXN0KCp0aGlzKTsKQEAgLTExOCw3ICsxMTcsNyBA
QCBJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvCiAgICAgOiBJREJBY3Rp
dmVET01PYmplY3QoJmNvbnRleHQpCiAgICAgLCBtX3RyYW5zYWN0aW9uKCZ0cmFuc2FjdGlvbikK
ICAgICAsIG1fcmVzb3VyY2VJZGVudGlmaWVyKHRyYW5zYWN0aW9uLmNvbm5lY3Rpb25Qcm94eSgp
KQotICAgICwgbV9pbmRleFNvdXJjZSgmaW5kZXgpCisgICAgLCBtX3NvdXJjZSgmaW5kZXgpCiAg
ICAgLCBtX2Nvbm5lY3Rpb25Qcm94eSh0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmNvbm5lY3Rpb25Q
cm94eSgpKQogewogICAgIHN1c3BlbmRJZk5lZWRlZCgpOwpAQCAtMTI4LDcgKzEyNyw3IEBAIElE
QlJlcXVlc3Q6OklEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ28KICAgICA6IElEQkFjdGl2ZURP
TU9iamVjdCgmY29udGV4dCkKICAgICAsIG1fdHJhbnNhY3Rpb24oJnRyYW5zYWN0aW9uKQogICAg
ICwgbV9yZXNvdXJjZUlkZW50aWZpZXIodHJhbnNhY3Rpb24uY29ubmVjdGlvblByb3h5KCkpCi0g
ICAgLCBtX29iamVjdFN0b3JlU291cmNlKCZvYmplY3RTdG9yZSkKKyAgICAsIG1fc291cmNlKCZv
YmplY3RTdG9yZSkKICAgICAsIG1fcmVxdWVzdGVkT2JqZWN0U3RvcmVSZWNvcmRUeXBlKHR5cGUp
CiAgICAgLCBtX2Nvbm5lY3Rpb25Qcm94eSh0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmNvbm5lY3Rp
b25Qcm94eSgpKQogewpAQCAtMTQ1LDggKzE0NCwyMCBAQCBJREJSZXF1ZXN0Ojp+SURCUmVxdWVz
dCgpCiB7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBvcmlnaW5UaHJlYWRJRCgpKTsK
IAotICAgIGlmIChtX2N1cnNvclJlc3VsdCkKLSAgICAgICAgbV9jdXJzb3JSZXN1bHQtPmNsZWFy
UmVxdWVzdCgpOworICAgIGlmIChtX3Jlc3VsdCkgeworICAgICAgICBXVEY6OnN3aXRjaE9uKG1f
cmVzdWx0LnZhbHVlKCksCisgICAgICAgICAgICBbXSAoUmVmUHRyPElEQkN1cnNvcj4mIGN1cnNv
cikgeyBjdXJzb3ItPmNsZWFyUmVxdWVzdCgpOyB9LAorICAgICAgICAgICAgW10gKGNvbnN0IGF1
dG8mKSB7IH0KKyAgICAgICAgKTsKKyAgICB9Cit9CisKK0V4Y2VwdGlvbk9yPHN0ZDo6b3B0aW9u
YWw8SURCUmVxdWVzdDo6UmVzdWx0Pj4gSURCUmVxdWVzdDo6cmVzdWx0KCkgY29uc3QKK3sKKyAg
ICBpZiAoIWlzRG9uZSgpKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSURCRGF0YWJhc2VF
eGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byByZWFk
IHRoZSAncmVzdWx0JyBwcm9wZXJ0eSBmcm9tICdJREJSZXF1ZXN0JzogVGhlIHJlcXVlc3QgaGFz
IG5vdCBmaW5pc2hlZC4iKSB9OworCisgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SURCUmVxdWVz
dDo6UmVzdWx0PiB7IG1fcmVzdWx0IH07CiB9CiAKIEV4Y2VwdGlvbk9yPERPTUVycm9yKj4gSURC
UmVxdWVzdDo6ZXJyb3IoKSBjb25zdApAQCAtMTU5LDI5ICsxNzAsMTUgQEAgRXhjZXB0aW9uT3I8
RE9NRXJyb3IqPiBJREJSZXF1ZXN0OjplcnJvcgogICAgIHJldHVybiBtX2RvbUVycm9yLmdldCgp
OwogfQogCi1zdGQ6Om9wdGlvbmFsPElEQlJlcXVlc3Q6OlNvdXJjZT4gSURCUmVxdWVzdDo6c291
cmNlKCkgY29uc3QKLXsKLSAgICBpZiAobV9jdXJzb3JTb3VyY2UpCi0gICAgICAgIHJldHVybiBT
b3VyY2UgeyBtX2N1cnNvclNvdXJjZSB9OwotICAgIGlmIChtX2luZGV4U291cmNlKQotICAgICAg
ICByZXR1cm4gU291cmNlIHsgbV9pbmRleFNvdXJjZSB9OwotICAgIGlmIChtX29iamVjdFN0b3Jl
U291cmNlKQotICAgICAgICByZXR1cm4gU291cmNlIHsgbV9vYmplY3RTdG9yZVNvdXJjZSB9Owot
Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQogdm9pZCBJREJSZXF1ZXN0OjpzZXRTb3Vy
Y2UoSURCQ3Vyc29yJiBjdXJzb3IpCiB7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBv
cmlnaW5UaHJlYWRJRCgpKTsKICAgICBBU1NFUlQoIW1fY3Vyc29yUmVxdWVzdE5vdGlmaWVyKTsK
IAotICAgIG1fb2JqZWN0U3RvcmVTb3VyY2UgPSBudWxscHRyOwotICAgIG1faW5kZXhTb3VyY2Ug
PSBudWxscHRyOwotICAgIG1fY3Vyc29yU291cmNlID0gJmN1cnNvcjsKKyAgICBtX3NvdXJjZSA9
IFNvdXJjZSB7ICZjdXJzb3IgfTsKICAgICBtX2N1cnNvclJlcXVlc3ROb3RpZmllciA9IHN0ZDo6
bWFrZV91bmlxdWU8U2NvcGVHdWFyZD4oW3RoaXNdKCkgewotICAgICAgICBBU1NFUlQobV9jdXJz
b3JTb3VyY2UpOwotICAgICAgICBtX2N1cnNvclNvdXJjZS0+ZGVjcmVtZW50T3V0c3RhbmRpbmdS
ZXF1ZXN0Q291bnQoKTsKKyAgICAgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVm
UHRyPElEQkN1cnNvcj4+KG1fc291cmNlLnZhbHVlKCkpKTsKKyAgICAgICAgV1RGOjpnZXQ8UmVm
UHRyPElEQkN1cnNvcj4+KG1fc291cmNlLnZhbHVlKCkpLT5kZWNyZW1lbnRPdXRzdGFuZGluZ1Jl
cXVlc3RDb3VudCgpOwogICAgIH0pOwogfQogCkBAIC0yMDUsMjAgKzIwMiwyOCBAQCB1aW50NjRf
dCBJREJSZXF1ZXN0Ojpzb3VyY2VPYmplY3RTdG9yZUlkCiB7CiAgICAgQVNTRVJUKGN1cnJlbnRU
aHJlYWQoKSA9PSBvcmlnaW5UaHJlYWRJRCgpKTsKIAotICAgIGlmIChtX29iamVjdFN0b3JlU291
cmNlKQotICAgICAgICByZXR1cm4gbV9vYmplY3RTdG9yZVNvdXJjZS0+aW5mbygpLmlkZW50aWZp
ZXIoKTsKLSAgICBpZiAobV9pbmRleFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIG1faW5kZXhTb3Vy
Y2UtPmluZm8oKS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKTsKLSAgICByZXR1cm4gMDsKKyAgICBp
ZiAoIW1fc291cmNlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBXVEY6OnN3aXRj
aE9uKG1fc291cmNlLnZhbHVlKCksCisgICAgICAgIFtdIChjb25zdCBSZWZQdHI8SURCT2JqZWN0
U3RvcmU+JiBvYmplY3RTdG9yZSkgeyByZXR1cm4gb2JqZWN0U3RvcmUtPmluZm8oKS5pZGVudGlm
aWVyKCk7IH0sCisgICAgICAgIFtdIChjb25zdCBSZWZQdHI8SURCSW5kZXg+JiBpbmRleCkgeyBy
ZXR1cm4gaW5kZXgtPmluZm8oKS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKTsgfSwKKyAgICAgICAg
W10gKGNvbnN0IFJlZlB0cjxJREJDdXJzb3I+JikgeyByZXR1cm4gMDsgfQorICAgICk7CiB9CiAK
IHVpbnQ2NF90IElEQlJlcXVlc3Q6OnNvdXJjZUluZGV4SWRlbnRpZmllcigpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBvcmlnaW5UaHJlYWRJRCgpKTsKIAotICAgIGlm
ICghbV9pbmRleFNvdXJjZSkKKyAgICBpZiAoIW1fc291cmNlKQogICAgICAgICByZXR1cm4gMDsK
LSAgICByZXR1cm4gbV9pbmRleFNvdXJjZS0+aW5mbygpLmlkZW50aWZpZXIoKTsKKworICAgIHJl
dHVybiBXVEY6OnN3aXRjaE9uKG1fc291cmNlLnZhbHVlKCksCisgICAgICAgIFtdIChjb25zdCBS
ZWZQdHI8SURCT2JqZWN0U3RvcmU+JikgeyByZXR1cm4gMDsgfSwKKyAgICAgICAgW10gKGNvbnN0
IFJlZlB0cjxJREJJbmRleD4mIGluZGV4KSB7IHJldHVybiBpbmRleC0+aW5mbygpLmlkZW50aWZp
ZXIoKTsgfSwKKyAgICAgICAgW10gKGNvbnN0IFJlZlB0cjxJREJDdXJzb3I+JikgeyByZXR1cm4g
MDsgfQorICAgICk7CiB9CiAKIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVSZWNvcmRUeXBlIElEQlJl
cXVlc3Q6OnJlcXVlc3RlZE9iamVjdFN0b3JlUmVjb3JkVHlwZSgpIGNvbnN0CkBAIC0yMzEsNyAr
MjM2LDggQEAgSW5kZXhlZERCOjpPYmplY3RTdG9yZVJlY29yZFR5cGUgSURCUmVxdQogSW5kZXhl
ZERCOjpJbmRleFJlY29yZFR5cGUgSURCUmVxdWVzdDo6cmVxdWVzdGVkSW5kZXhSZWNvcmRUeXBl
KCkgY29uc3QKIHsKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG9yaWdpblRocmVhZElE
KCkpOwotICAgIEFTU0VSVChtX2luZGV4U291cmNlKTsKKyAgICBBU1NFUlQobV9zb3VyY2UpOwor
ICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxJREJJbmRleD4+KG1fc291
cmNlLnZhbHVlKCkpKTsKIAogICAgIHJldHVybiBtX3JlcXVlc3RlZEluZGV4UmVjb3JkVHlwZTsK
IH0KQEAgLTM2Miw4ICszNjgsNyBAQCB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdChjb25zdCBJ
REJLZXlECiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm47CiAKLSAgICBjbGVhclJlc3Vs
dCgpOwotICAgIG1fc2NyaXB0UmVzdWx0ID0geyBjb250ZXh0LT52bSgpLCBpZGJLZXlEYXRhVG9T
Y3JpcHRWYWx1ZSgqZXhlYywga2V5RGF0YSkgfTsKKyAgICBtX3Jlc3VsdCA9IFJlc3VsdCB7IEpT
Qzo6U3Ryb25nPEpTQzo6VW5rbm93bj4geyBjb250ZXh0LT52bSgpLCBpZGJLZXlEYXRhVG9TY3Jp
cHRWYWx1ZSgqZXhlYywga2V5RGF0YSkgfSB9OwogfQogCiB2b2lkIElEQlJlcXVlc3Q6OnNldFJl
c3VsdChjb25zdCBWZWN0b3I8SURCS2V5RGF0YT4mIGtleURhdGFzKQpAQCAtMzc4LDEwICszODMs
OSBAQCB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdChjb25zdCBWZWN0b3I8CiAgICAgaWYgKCFz
dGF0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2xlYXJSZXN1bHQoKTsKIAogICAgIExvY2tl
cjxKU0xvY2s+IGxvY2tlcihjb250ZXh0LT52bSgpLmFwaUxvY2soKSk7Ci0gICAgbV9zY3JpcHRS
ZXN1bHQgPSB7IGNvbnRleHQtPnZtKCksIHRvSlMoc3RhdGUsIGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBrZXlEYXRhcykgfTsKKyAgICBt
X3Jlc3VsdCA9IFJlc3VsdCB7IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4geyBjb250ZXh0LT52
bSgpLCB0b0pTKHN0YXRlLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKSwga2V5RGF0YXMpIH0gfTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0Ojpz
ZXRSZXN1bHQoY29uc3QgVmVjdG9yPElEQlZhbHVlPiYgdmFsdWVzKQpAQCAtMzk2LDEwICs0MDAs
OCBAQCB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdChjb25zdCBWZWN0b3I8CiAgICAgaWYgKCFl
eGVjKQogICAgICAgICByZXR1cm47CiAKLSAgICBjbGVhclJlc3VsdCgpOwotCiAgICAgTG9ja2Vy
PEpTTG9jaz4gbG9ja2VyKGNvbnRleHQtPnZtKCkuYXBpTG9jaygpKTsKLSAgICBtX3NjcmlwdFJl
c3VsdCA9IHsgY29udGV4dC0+dm0oKSwgdG9KUyhleGVjLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCB2YWx1ZXMpIH07CisgICAgbV9yZXN1
bHQgPSBSZXN1bHQgeyBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+IHsgY29udGV4dC0+dm0oKSwg
dG9KUyhleGVjLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCkpLCB2YWx1ZXMpIH0gfTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQo
dWludDY0X3QgbnVtYmVyKQpAQCAtNDEwLDggKzQxMiw3IEBAIHZvaWQgSURCUmVxdWVzdDo6c2V0
UmVzdWx0KHVpbnQ2NF90IG51bWIKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGNsZWFyUmVzdWx0KCk7Ci0gICAgbV9zY3JpcHRSZXN1bHQgPSB7IGNvbnRleHQtPnZt
KCksIEpTQzo6anNOdW1iZXIobnVtYmVyKSB9OworICAgIG1fcmVzdWx0ID0gUmVzdWx0IHsgSlND
OjpTdHJvbmc8SlNDOjpVbmtub3duPiB7IGNvbnRleHQtPnZtKCksIEpTQzo6anNOdW1iZXIobnVt
YmVyKSB9IH07CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xv
bmUoY29uc3QgSURCVmFsdWUmIHZhbHVlKQpAQCAtNDI4LDE3ICs0MjksNyBAQCB2b2lkIElEQlJl
cXVlc3Q6OnNldFJlc3VsdFRvU3RydWN0dXJlZENsCiAgICAgaWYgKCFleGVjKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBjbGVhclJlc3VsdCgpOwotICAgIG1fc2NyaXB0UmVzdWx0ID0geyBjb250
ZXh0LT52bSgpLCBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKCpleGVjLCB2YWx1ZSkgfTsK
LX0KLQotdm9pZCBJREJSZXF1ZXN0OjpjbGVhclJlc3VsdCgpCi17Ci0gICAgQVNTRVJUKGN1cnJl
bnRUaHJlYWQoKSA9PSBvcmlnaW5UaHJlYWRJRCgpKTsKLQotICAgIG1fc2NyaXB0UmVzdWx0ID0g
eyB9OwotICAgIG1fY3Vyc29yUmVzdWx0ID0gbnVsbHB0cjsKLSAgICBtX2RhdGFiYXNlUmVzdWx0
ID0gbnVsbHB0cjsKKyAgICBtX3Jlc3VsdCA9IFJlc3VsdCB7IEpTQzo6U3Ryb25nPEpTQzo6VW5r
bm93bj4geyBjb250ZXh0LT52bSgpLCBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKCpleGVj
LCB2YWx1ZSkgfSB9OwogfQogCiB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdFRvVW5kZWZpbmVk
KCkKQEAgLTQ0OSwxNSArNDQwLDIwIEBAIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9VbmRl
ZmluZWQoKQogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2xlYXJS
ZXN1bHQoKTsKLSAgICBtX3NjcmlwdFJlc3VsdCA9IHsgY29udGV4dC0+dm0oKSwgSlNDOjpqc1Vu
ZGVmaW5lZCgpIH07CisgICAgbV9yZXN1bHQgPSBSZXN1bHQgeyBKU0M6OlN0cm9uZzxKU0M6OlVu
a25vd24+IHsgY29udGV4dC0+dm0oKSwgSlNDOjpqc1VuZGVmaW5lZCgpIH0gfTsKIH0KIAogSURC
Q3Vyc29yKiBJREJSZXF1ZXN0OjpyZXN1bHRDdXJzb3IoKQogewogICAgIEFTU0VSVChjdXJyZW50
VGhyZWFkKCkgPT0gb3JpZ2luVGhyZWFkSUQoKSk7CiAKLSAgICByZXR1cm4gbV9jdXJzb3JSZXN1
bHQuZ2V0KCk7CisgICAgaWYgKCFtX3Jlc3VsdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3Jlc3VsdC52YWx1ZSgpLAorICAgICAgICBbXSAo
UmVmUHRyPElEQkN1cnNvcj4mIGN1cnNvcikgLT4gSURCQ3Vyc29yKiB7IHJldHVybiBjdXJzb3Iu
Z2V0KCk7IH0sCisgICAgICAgIFtdIChjb25zdCBhdXRvJikgLT4gSURCQ3Vyc29yKiB7IHJldHVy
biBudWxscHRyOyB9CisgICAgKTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0Ojp3aWxsSXRlcmF0ZUN1
cnNvcihJREJDdXJzb3ImIGN1cnNvcikKQEAgLTQ3Miw3ICs0NjgsNyBAQCB2b2lkIElEQlJlcXVl
c3Q6OndpbGxJdGVyYXRlQ3Vyc29yKElEQkN1CiAKICAgICBtX3BlbmRpbmdDdXJzb3IgPSAmY3Vy
c29yOwogICAgIG1faGFzUGVuZGluZ0FjdGl2aXR5ID0gdHJ1ZTsKLSAgICBjbGVhclJlc3VsdCgp
OworICAgIG1fcmVzdWx0ID0gc3RkOjpudWxsb3B0OwogICAgIG1fcmVhZHlTdGF0ZSA9IFJlYWR5
U3RhdGU6OlBlbmRpbmc7CiAgICAgbV9kb21FcnJvciA9IG51bGxwdHI7CiAgICAgbV9pZGJFcnJv
ciA9IHsgfTsKQEAgLTQ4NywxMiArNDgzLDEyIEBAIHZvaWQgSURCUmVxdWVzdDo6ZGlkT3Blbk9y
SXRlcmF0ZUN1cnNvcigKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG9yaWdpblRocmVh
ZElEKCkpOwogICAgIEFTU0VSVChtX3BlbmRpbmdDdXJzb3IpOwogCi0gICAgY2xlYXJSZXN1bHQo
KTsKKyAgICBtX3Jlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKIAogICAgIGlmIChyZXN1bHREYXRhLnR5
cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpJdGVyYXRlQ3Vyc29yU3VjY2VzcyB8fCByZXN1bHREYXRh
LnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpPcGVuQ3Vyc29yU3VjY2VzcykgewogICAgICAgICBt
X3BlbmRpbmdDdXJzb3ItPnNldEdldFJlc3VsdCgqdGhpcywgcmVzdWx0RGF0YS5nZXRSZXN1bHQo
KSk7CiAgICAgICAgIGlmIChyZXN1bHREYXRhLmdldFJlc3VsdCgpLmlzRGVmaW5lZCgpKQotICAg
ICAgICAgICAgbV9jdXJzb3JSZXN1bHQgPSBtX3BlbmRpbmdDdXJzb3I7CisgICAgICAgICAgICBt
X3Jlc3VsdCA9IFJlc3VsdCB7IG1fcGVuZGluZ0N1cnNvciB9OwogICAgIH0KIAogICAgIG1fY3Vy
c29yUmVxdWVzdE5vdGlmaWVyID0gbnVsbHB0cjsKQEAgLTUzNyw4ICs1MzMsNyBAQCB2b2lkIElE
QlJlcXVlc3Q6OnNldFJlc3VsdChSZWY8SURCRGF0YWJhCiB7CiAgICAgQVNTRVJUKGN1cnJlbnRU
aHJlYWQoKSA9PSBvcmlnaW5UaHJlYWRJRCgpKTsKIAotICAgIGNsZWFyUmVzdWx0KCk7Ci0gICAg
bV9kYXRhYmFzZVJlc3VsdCA9IFdURk1vdmUoZGF0YWJhc2UpOworICAgIG1fcmVzdWx0ID0gUmVz
dWx0IHsgUmVmUHRyPElEQkRhdGFiYXNlPiB7IFdURk1vdmUoZGF0YWJhc2UpIH0gfTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlJlcXVlc3QuaAkocmV2aXNpb24gMjEwMjU4KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nywx
MiArNjcsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+SURCUmVxdWVzdCgpOwogCi0gICAg
SURCQ3Vyc29yKiBjdXJzb3JSZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX2N1cnNvclJlc3VsdC5n
ZXQoKTsgfQotICAgIElEQkRhdGFiYXNlKiBkYXRhYmFzZVJlc3VsdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YWJhc2VSZXN1bHQuZ2V0KCk7IH0KLSAgICBKU0M6OkpTVmFsdWUgc2NyaXB0UmVzdWx0
KCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHRSZXN1bHQuZ2V0KCk7IH0KKyAgICB1c2luZyBSZXN1
bHQgPSBWYXJpYW50PFJlZlB0cjxJREJDdXJzb3I+LCBSZWZQdHI8SURCRGF0YWJhc2U+LCBKU0M6
OlN0cm9uZzxKU0M6OlVua25vd24+PjsKKyAgICBFeGNlcHRpb25PcjxzdGQ6Om9wdGlvbmFsPFJl
c3VsdD4+IHJlc3VsdCgpIGNvbnN0OwogCiAgICAgdXNpbmcgU291cmNlID0gVmFyaWFudDxSZWZQ
dHI8SURCT2JqZWN0U3RvcmU+LCBSZWZQdHI8SURCSW5kZXg+LCBSZWZQdHI8SURCQ3Vyc29yPj47
Ci0gICAgc3RkOjpvcHRpb25hbDxTb3VyY2U+IHNvdXJjZSgpIGNvbnN0OworICAgIGNvbnN0IHN0
ZDo6b3B0aW9uYWw8U291cmNlPiYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0K
IAogICAgIEV4Y2VwdGlvbk9yPERPTUVycm9yKj4gZXJyb3IoKSBjb25zdDsKIApAQCAtMTQxLDgg
KzE0MCw2IEBAIHByaXZhdGU6CiAgICAgSURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiwgSURCT2JqZWN0U3RvcmUmLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlUmVjb3JkVHlwZSwgSURC
VHJhbnNhY3Rpb24mKTsKICAgICBJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJ
REJJbmRleCYsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlLCBJREJUcmFuc2FjdGlvbiYpOwog
Ci0gICAgdm9pZCBjbGVhclJlc3VsdCgpOwotCiAgICAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZl
bnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGNvbnN0IGNoYXIqIGFj
dGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBmaW5hbDsKQEAgLTE2MSwxOCArMTU4LDExIEBAIHBy
aXZhdGU6CiAKICAgICBJREJDdXJzb3IqIHJlc3VsdEN1cnNvcigpOwogCi0gICAgLy8gQ291bGQg
Y29uc2lkZXIgc3RvcmluZyB0aGVzZSB0aHJlZSBpbiBhIHVuaW9uIG9yIHVuaW9uLWxpa2UgY2xh
c3MgaW5zdGVhZC4KLSAgICBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+IG1fc2NyaXB0UmVzdWx0
OwotICAgIFJlZlB0cjxJREJDdXJzb3I+IG1fY3Vyc29yUmVzdWx0OwotICAgIFJlZlB0cjxJREJE
YXRhYmFzZT4gbV9kYXRhYmFzZVJlc3VsdDsKLQogICAgIElEQkVycm9yIG1faWRiRXJyb3I7CiAg
ICAgSURCUmVzb3VyY2VJZGVudGlmaWVyIG1fcmVzb3VyY2VJZGVudGlmaWVyOwogCi0gICAgLy8g
Q291bGQgY29uc2lkZXIgc3RvcmluZyB0aGVzZSB0aHJlZSBpbiBhIHVuaW9uIG9yIHVuaW9uLWxp
a2UgY2xhc3MgaW5zdGVhZC4KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG1fb2JqZWN0U3Rv
cmVTb3VyY2U7Ci0gICAgUmVmUHRyPElEQkluZGV4PiBtX2luZGV4U291cmNlOwotICAgIFJlZlB0
cjxJREJDdXJzb3I+IG1fY3Vyc29yU291cmNlOworICAgIHN0ZDo6b3B0aW9uYWw8UmVzdWx0PiBt
X3Jlc3VsdDsKKyAgICBzdGQ6Om9wdGlvbmFsPFNvdXJjZT4gbV9zb3VyY2U7CiAKICAgICBib29s
IG1faGFzUGVuZGluZ0FjdGl2aXR5IHsgdHJ1ZSB9OwogICAgIEluZGV4ZWREQjo6T2JqZWN0U3Rv
cmVSZWNvcmRUeXBlIG1fcmVxdWVzdGVkT2JqZWN0U3RvcmVSZWNvcmRUeXBlIHsgSW5kZXhlZERC
OjpPYmplY3RTdG9yZVJlY29yZFR5cGU6OlZhbHVlT25seSB9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwJKHJldmlzaW9uIDIxMDI1
OCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAgICAgR2VuZXJhdGVJc1JlYWNoYWJsZT1J
bXBsLAogICAgIFNraXBWVGFibGVWYWxpZGF0aW9uLAogXSBpbnRlcmZhY2UgSURCUmVxdWVzdCA6
IEV2ZW50VGFyZ2V0IHsKLSAgICBbQ3VzdG9tR2V0dGVyLCBHZXR0ZXJNYXlUaHJvd0V4Y2VwdGlv
bl0gcmVhZG9ubHkgYXR0cmlidXRlIGFueSByZXN1bHQ7CisgICAgW0dldHRlck1heVRocm93RXhj
ZXB0aW9uXSByZWFkb25seSBhdHRyaWJ1dGUgKElEQkN1cnNvciBvciBJREJEYXRhYmFzZSBvciBh
bnkpPyByZXN1bHQ7CiAgICAgW0dldHRlck1heVRocm93RXhjZXB0aW9uXSByZWFkb25seSBhdHRy
aWJ1dGUgRE9NRXJyb3I/IGVycm9yOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSAoSURCT2JqZWN0
U3RvcmUgb3IgSURCSW5kZXggb3IgSURCQ3Vyc29yKT8gc291cmNlOwogICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBJREJUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxMDI1
OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjg5OCw3ICsyODk4LDYgQEAKIAkJN0NEMEJBMDUxQjhGNzlDOTAw
NUNFQkJFIC8qIEFjdGl2ZURPTUNhbGxiYWNrTWljcm90YXNrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0QwQkEwMzFCOEY3OUM5MDA1Q0VCQkUgLyog
QWN0aXZlRE9NQ2FsbGJhY2tNaWNyb3Rhc2suaCAqLzsgfTsKIAkJN0NENDk0Q0MxQTg2RUIxRDAw
MEE4N0VDIC8qIFJlbmRlckF0dGFjaG1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0NENDk0Q0ExQTg2RUIxRDAwMEE4N0VDIC8qIFJlbmRlckF0
dGFjaG1lbnQuY3BwICovOyB9OwogCQk3Q0Q0OTRDRDFBODZFQjFEMDAwQTg3RUMgLyogUmVuZGVy
QXR0YWNobWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0NENDk0Q0IxQTg2RUIxRDAwMEE4N0VDIC8qIFJlbmRlckF0dGFjaG1lbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk3Q0Q2ODY1NjFFMEUy
NkQzMDBFOTdBQTcgLyogSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRDY4NjU1MUUwRTI2RDMwMEU5N0FBNyAvKiBK
U0lEQlJlcXVlc3RDdXN0b20uY3BwICovOyB9OwogCQk3Q0U1OEQ0QTFERDY0QTVCMDAxMjg1NTIg
LyogU1ZHUG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDRTU4RDQ5MURENjRBNUIwMDEyODU1MiAvKiBTVkdQb2ludC5oICovOyB9OwogCQk3Q0U1
OEQ0RTFERDY5NEZFMDAxMjg1NTIgLyogU1ZHUmVjdFRyYWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNThENEQxREQ2OTRGRTAwMTI4NTUyIC8q
IFNWR1JlY3RUcmFpdHMuaCAqLzsgfTsKIAkJN0NFNThENTAxREQ2OUExRTAwMTI4NTUyIC8qIFNW
R051bWJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0NFNThENEYxREQ2OUExRTAwMTI4NTUyIC8qIFNWR051bWJlci5oICovOyB9OwpAQCAtMTA0MDUs
NyArMTA0MDQsNiBAQAogCQk3Q0QwQkEwMzFCOEY3OUM5MDA1Q0VCQkUgLyogQWN0aXZlRE9NQ2Fs
bGJhY2tNaWNyb3Rhc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWN0aXZl
RE9NQ2FsbGJhY2tNaWNyb3Rhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NE
NDk0Q0ExQTg2RUIxRDAwMEE4N0VDIC8qIFJlbmRlckF0dGFjaG1lbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyQXR0YWNobWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRDQ5NENCMUE4NkVCMUQwMDBBODdFQyAvKiBSZW5kZXJB
dHRhY2htZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckF0dGFj
aG1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0NENjg2NTUxRTBFMjZEMzAw
RTk3QUE3IC8qIEpTSURCUmVxdWVzdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0lEQlJlcXVlc3RDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3Q0U1OEQ0OTFERDY0QTVCMDAxMjg1NTIgLyogU1ZHUG9pbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0NFNThENEQxREQ2OTRGRTAwMTI4NTUyIC8qIFNWR1JlY3RUcmFpdHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUmVjdFRyYWl0cy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0U1OEQ0RjFERDY5QTFFMDAxMjg1NTIgLyogU1ZHTnVt
YmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR051bWJlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIxMzMsNyArMjIxMzEsNiBAQAogCQkJCUJDMTdG
OTY1MEI2NEVCQjgwMDRBNjVDQiAvKiBKU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcCAqLywK
IAkJCQlBQjRDQjRFQTBCOEJEQTNEMDA5RjQwQjAgLyogSlNIVE1MU2VsZWN0RWxlbWVudEN1c3Rv
bS5oICovLAogCQkJCUQ2Rjc5NjBDMTY2RkZFQ0UwMDc2REQxOCAvKiBKU0hUTUxUZW1wbGF0ZUVs
ZW1lbnRDdXN0b20uY3BwICovLAotCQkJCTdDRDY4NjU1MUUwRTI2RDMwMEU5N0FBNyAvKiBKU0lE
QlJlcXVlc3RDdXN0b20uY3BwICovLAogCQkJCTdBNzRFQ0JDMTAxODM5REEwMEJGOTM5RSAvKiBK
U0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAgKi8sCiAJCQkJQkNFMUM0M0YwRDk4MzBG
NDAwM0IwMkYyIC8qIEpTTG9jYXRpb25DdXN0b20uY3BwICovLAogCQkJCTJEOUJGNzQ4MURCRkRE
RjgwMDdBN0Q5OSAvKiBKU01lZGlhS2V5U2Vzc2lvbkN1c3RvbS5jcHAgKi8sCkBAIC0zMTc0MSw3
ICszMTczOCw2IEBACiAJCQkJNDlDN0I5RDkxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVy
YnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QzdCOURGMTA0MkQzMkYwMDA5RDQ0NyAv
KiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRDNGM0QzNjkx
QTY5QjdCMDAwNTlGQzJCIC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJN0NENjg2NTYxRTBFMjZEMzAwRTk3QUE3IC8qIEpTSURCUmVxdWVzdEN1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2Rjk5NUEyMTFBNzA3OEIxMDBBNzM1RjQgLyogV2Vi
R0xTYW1wbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QzdCOUUyMTA0MkQzMkYwMDA5RDQ0
NyAvKiBXZWJHTFNoYWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMDhDRjE1NDE1MkI3N0Iz
MDA5QzU3NzUgLyogV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0lETFR5cGVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9JRExUeXBlcy5oCShyZXZp
c2lvbiAyMTAyNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0lETFR5cGVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNp
bmNsdWRlIDxoZWFwL0hhbmRsZVR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL0JyaWdhbmQuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAg
LTU5LDcgKzYwLDE0IEBAIHN0cnVjdCBJRExVbnN1cHBvcnRlZFR5cGUgOiBJRExUeXBlPHZvaWQK
IC8vIElETE51bGwgaXMgYSBzcGVjaWFsIHR5cGUgZm9yIHVzZSBhcyBhIHN1YnR5cGUgaW4gYW4g
SURMVW5pb24gdGhhdCBpcyBudWxsYWJsZS4KIHN0cnVjdCBJRExOdWxsIDogSURMVHlwZTxzdGQ6
Om51bGxwdHJfdD4geyB9OwogCi1zdHJ1Y3QgSURMQW55IDogSURMVHlwZTxKU0M6OkpTVmFsdWU+
IHsgfTsKK3N0cnVjdCBJRExBbnkgOiBJRExUeXBlPEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4+
IHsKKyAgICB1c2luZyBQYXJhbWV0ZXJUeXBlID0gSlNDOjpKU1ZhbHVlOworCisgICAgdXNpbmcg
TnVsbGFibGVUeXBlID0gSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPjsKKyAgICBzdGF0aWMgaW5s
aW5lIHN0ZDo6bnVsbHB0cl90IG51bGxWYWx1ZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgaW5saW5lIGJvb2wgaXNOdWxsVmFsdWUoVSYmIHZh
bHVlKSB7IHJldHVybiAhdmFsdWU7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMg
aW5saW5lIFUmJiBleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoVSYmIHZhbHVlKSB7IHJldHVybiBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpOyB9Cit9OwogCiBzdHJ1Y3QgSURMQm9vbGVhbiA6IElETFR5
cGU8Ym9vbD4geyB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNv
bnZlcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNv
bnZlcnQuaAkocmV2aXNpb24gMjEwMjU4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01Db252ZXJ0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNCwxMCArMjE0LDE3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0Q29udmUKIC8vIE1BUks6IEFueSB0eXBlCiAK
IHRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExBbnk+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gSlNDOjpKU1ZhbHVlOworICAgIAogICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7CisgICAgfQogfTsKIAog
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQW55PiB7CkBAIC0yNTEsNiArMjU4LDEx
IEBAIG5hbWVzcGFjZSBEZXRhaWwgewogICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBl
PElETEludGVyZmFjZTxUPj4gewogICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVy
dGVyPElETEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7CiAgICAgfTsKKworICAgIHRlbXBsYXRl
PD4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExBbnk+IHsKKyAgICAgICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExBbnk+OjpSZXR1cm5UeXBlOworICAg
IH07CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbGFi
bGU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gewpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwCShyZXZp
c2lvbiAyMTAyNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RD
dXN0b20uY3BwCShub25leGlzdGVudCkKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU0lEQlJlcXVlc3QuaCIKLQotI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSlNJREJDdXJzb3IuaCIKLSNpbmNsdWRl
ICJKU0lEQkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiSlNJREJJbmRleC5oIgotI2luY2x1ZGUgIkpT
SURCT2JqZWN0U3RvcmUuaCIKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1KU1ZhbHVlIEpTSURCUmVxdWVzdDo6cmVzdWx0KEV4ZWNTdGF0ZSYgc3RhdGUp
IGNvbnN0Ci17Ci0gICAgYXV0byYgcmVxdWVzdCA9IHdyYXBwZWQoKTsKLQotICAgIGlmICghcmVx
dWVzdC5pc0RvbmUoKSkgewotICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgcHJvcGFnYXRl
RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgRXhjZXB0aW9uIHsgSURCRGF0YWJhc2VFeGNlcHRpb246
OkludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byByZWFkIHRoZSAncmVz
dWx0JyBwcm9wZXJ0eSBmcm9tICdJREJSZXF1ZXN0JzogVGhlIHJlcXVlc3QgaGFzIG5vdCBmaW5p
c2hlZC4iKSB9KTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byog
Y3Vyc29yID0gcmVxdWVzdC5jdXJzb3JSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0
YXRlLCBnbG9iYWxPYmplY3QoKSwgKmN1cnNvcik7Ci0gICAgaWYgKGF1dG8qIGRhdGFiYXNlID0g
cmVxdWVzdC5kYXRhYmFzZVJlc3VsdCgpKQotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGds
b2JhbE9iamVjdCgpLCAqZGF0YWJhc2UpOwotICAgIGlmIChhdXRvIHJlc3VsdCA9IHJlcXVlc3Qu
c2NyaXB0UmVzdWx0KCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgcmV0dXJuIGpzTnVs
bCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJ
bmRleGVkREJBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAkocmV2aXNpb24gMjEwMjU4KQorKysgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTIzLDE3ICsxMjMsMjAgQEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAg
YXV0byYgcmVxdWVzdCA9IHN0YXRpY19jYXN0PElEQk9wZW5EQlJlcXVlc3QmPigqZXZlbnQtPnRh
cmdldCgpKTsKLSAgICAgICAgaWYgKCFyZXF1ZXN0LmlzRG9uZSgpKSB7CisKKyAgICAgICAgYXV0
byByZXN1bHQgPSByZXF1ZXN0LnJlc3VsdCgpOworICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKSB7CiAgICAgICAgICAgICBtX2V4ZWN1dGFibGVXaXRoRGF0YWJhc2UtPnJlcXVlc3RD
YWxsYmFjaygpLnNlbmRGYWlsdXJlKCJDb3VsZCBub3QgZ2V0IHJlc3VsdCBpbiBjYWxsYmFjay4i
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gZGF0YWJh
c2VSZXN1bHQgPSByZXF1ZXN0LmRhdGFiYXNlUmVzdWx0KCk7Ci0gICAgICAgIGlmICghZGF0YWJh
c2VSZXN1bHQpIHsKKyAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IHJlc3VsdC5yZWxlYXNlUmV0
dXJuVmFsdWUoKTsKKyAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSB8fCAhV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxSZWZQdHI8SURCRGF0YWJhc2U+PihyZXN1bHRWYWx1ZS52YWx1ZSgpKSkgewogICAg
ICAgICAgICAgbV9leGVjdXRhYmxlV2l0aERhdGFiYXNlLT5yZXF1ZXN0Q2FsbGJhY2soKS5zZW5k
RmFpbHVyZSgiVW5leHBlY3RlZCByZXN1bHQgdHlwZS4iKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCisgICAgICAgIGF1dG8gZGF0YWJhc2VSZXN1bHQgPSBXVEY6OmdldDxSZWZQ
dHI8SURCRGF0YWJhc2U+PihyZXN1bHRWYWx1ZS52YWx1ZSgpKTsKICAgICAgICAgbV9leGVjdXRh
YmxlV2l0aERhdGFiYXNlLT5leGVjdXRlKCpkYXRhYmFzZVJlc3VsdCk7CiAgICAgICAgIGRhdGFi
YXNlUmVzdWx0LT5jbG9zZSgpOwogICAgIH0KQEAgLTM2MiwyNiArMzY1LDIzIEBAIHB1YmxpYzoK
ICAgICAgICAgfQogCiAgICAgICAgIGF1dG8mIHJlcXVlc3QgPSBzdGF0aWNfY2FzdDxJREJSZXF1
ZXN0Jj4oKmV2ZW50LT50YXJnZXQoKSk7Ci0gICAgICAgIGlmICghcmVxdWVzdC5pc0RvbmUoKSkg
eworCisgICAgICAgIGF1dG8gcmVzdWx0ID0gcmVxdWVzdC5yZXN1bHQoKTsKKyAgICAgICAgaWYg
KHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewogICAgICAgICAgICAgbV9yZXF1ZXN0Q2FsbGJhY2st
PnNlbmRGYWlsdXJlKCJDb3VsZCBub3QgZ2V0IHJlc3VsdCBpbiBjYWxsYmFjay4iKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKHJlcXVlc3Qu
c2NyaXB0UmVzdWx0KCkpIHsKLSAgICAgICAgICAgIGVuZChmYWxzZSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGF1dG8qIGN1cnNvclJlc3VsdCA9
IHJlcXVlc3QuY3Vyc29yUmVzdWx0KCk7Ci0gICAgICAgIGlmICghY3Vyc29yUmVzdWx0KSB7Cisg
ICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7Cisg
ICAgICAgIGlmICghcmVzdWx0VmFsdWUgfHwgIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRy
PElEQkN1cnNvcj4+KHJlc3VsdFZhbHVlLnZhbHVlKCkpKSB7CiAgICAgICAgICAgICBlbmQoZmFs
c2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byYgY3Vy
c29yID0gKmN1cnNvclJlc3VsdDsKKyAgICAgICAgYXV0byBjdXJzb3IgPSBXVEY6OmdldDxSZWZQ
dHI8SURCQ3Vyc29yPj4ocmVzdWx0VmFsdWUudmFsdWUoKSk7CiAKICAgICAgICAgaWYgKG1fc2tp
cENvdW50KSB7Ci0gICAgICAgICAgICBpZiAoY3Vyc29yLmFkdmFuY2UobV9za2lwQ291bnQpLmhh
c0V4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKGN1cnNvci0+YWR2YW5jZShtX3NraXBDb3Vu
dCkuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgbV9yZXF1ZXN0Q2FsbGJhY2stPnNl
bmRGYWlsdXJlKCJDb3VsZCBub3QgYWR2YW5jZSBjdXJzb3IuIik7CiAgICAgICAgICAgICBtX3Nr
aXBDb3VudCA9IDA7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0zOTMsNyArMzkzLDcgQEAgcHVi
bGljOgogICAgICAgICB9CiAKICAgICAgICAgLy8gQ29udGludWUgY3Vyc29yIGJlZm9yZSBtYWtp
bmcgaW5qZWN0ZWQgc2NyaXB0IGNhbGxzLCBvdGhlcndpc2UgdHJhbnNhY3Rpb24gbWlnaHQgYmUg
ZmluaXNoZWQuCi0gICAgICAgIGlmIChjdXJzb3IuY29udGludWVGdW5jdGlvbihudWxscHRyKS5o
YXNFeGNlcHRpb24oKSkgeworICAgICAgICBpZiAoY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKG51
bGxwdHIpLmhhc0V4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICBtX3JlcXVlc3RDYWxsYmFjay0+
c2VuZEZhaWx1cmUoIkNvdWxkIG5vdCBjb250aW51ZSBjdXJzb3IuIik7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KQEAgLTQwMyw5ICs0MDMsOSBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICByZXR1cm47CiAKICAgICAgICAgYXV0byBkYXRhRW50cnkgPSBEYXRhRW50cnk6OmNyZWF0ZSgp
Ci0gICAgICAgICAgICAuc2V0S2V5KG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChjdXJzb3Iu
a2V5KCksIFN0cmluZygpLCB0cnVlKSkKLSAgICAgICAgICAgIC5zZXRQcmltYXJ5S2V5KG1faW5q
ZWN0ZWRTY3JpcHQud3JhcE9iamVjdChjdXJzb3IucHJpbWFyeUtleSgpLCBTdHJpbmcoKSwgdHJ1
ZSkpCi0gICAgICAgICAgICAuc2V0VmFsdWUobV9pbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGN1
cnNvci52YWx1ZSgpLCBTdHJpbmcoKSwgdHJ1ZSkpCisgICAgICAgICAgICAuc2V0S2V5KG1faW5q
ZWN0ZWRTY3JpcHQud3JhcE9iamVjdChjdXJzb3ItPmtleSgpLCBTdHJpbmcoKSwgdHJ1ZSkpCisg
ICAgICAgICAgICAuc2V0UHJpbWFyeUtleShtX2luamVjdGVkU2NyaXB0LndyYXBPYmplY3QoY3Vy
c29yLT5wcmltYXJ5S2V5KCksIFN0cmluZygpLCB0cnVlKSkKKyAgICAgICAgICAgIC5zZXRWYWx1
ZShtX2luamVjdGVkU2NyaXB0LndyYXBPYmplY3QoY3Vyc29yLT52YWx1ZSgpLCBTdHJpbmcoKSwg
dHJ1ZSkpCiAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICBtX3Jlc3VsdC0+YWRkSXRl
bShXVEZNb3ZlKGRhdGFFbnRyeSkpOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297977</attachid>
            <date>2017-01-03 17:29:52 -0800</date>
            <delta_ts>2017-01-03 22:57:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-166671-20170103172826.patch</filename>
            <type>text/plain</type>
            <size>27312</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMDI1OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE3LTAxLTAzICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIGZpbmFsIGN1c3RvbSBiaW5k
aW5nIGZyb20gSURCUmVxdWVzdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY2NjcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIFJlbW92ZSBKU0lEQlJlcXVlc3RDdXN0b20uY3Bw
CisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwOiBSZW1vdmVk
LgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlJlcXVlc3Q6On5JREJSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnJl
c3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzZXRTb3VyY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c291cmNlT2JqZWN0U3RvcmVJZGVudGlmaWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNvdXJjZUluZGV4SWRlbnRpZmllcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpyZXF1ZXN0ZWRJbmRleFJlY29yZFR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c2V0UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlJlcXVlc3Q6OnNldFJlc3VsdFRvU3RydWN0dXJlZENsb25lKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlJlcXVlc3Q6OnNldFJlc3VsdFRvVW5kZWZpbmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlJlcXVlc3Q6OnJlc3VsdEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0
Ojp3aWxsSXRlcmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpkaWRP
cGVuT3JJdGVyYXRlQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNvdXJj
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpjbGVhclJlc3VsdCk6
IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlJlcXVlc3Q6OmN1cnNvclJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXF1ZXN0OjpkYXRhYmFzZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXF1ZXN0OjpzY3JpcHRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICBSZXBsYWNlIG11bHRpcGxl
IG1lbWJlciB2YXJpYWJsZXMgd2l0aCBWYXJpYW50cyBmb3Igc291cmNlIGFuZCByZXN1bHQuIEFk
ZCBhIHJlc3VsdAorICAgICAgICBtZW1iZXIgZnVuY3Rpb24gdGhhdCBwcm9wZXJseSBzZXRzIGFu
IGV4Y2VwdGlvbiBpZiBub3QgImRvbmUiLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCUmVxdWVzdC5pZGw6CisgICAgICAgIFJlbW92ZSBDdXN0b21HZXR0ZXIgYW5ub3RhdGlvbiBh
bmQgYWRkIHR5cGUuCisKKyAgICAgICAgKiBiaW5kaW5ncy9nZW5lcmljL0lETFR5cGVzLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpJRExBbnk6Om51bGxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
RExBbnk6OmlzTnVsbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OklETEFueTo6ZXh0cmFjdFZh
bHVlRnJvbU51bGxhYmxlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnZlcnRlcjxJRExBbnk+Ojpjb252ZXJ0KToKKyAgICAgICAg
Rmxlc2ggb3V0IElETEFueSB0byBiZSBpbXBsZW1lbnRlZCBhcyBhIFN0cm9uZzxVbmtub3duPiB3
aGVuIHVzZWQgaW4gYWdncmVnYXRlIHR5cGVzLAorICAgICAgICBidXQgc3RpbGwgd29yayB3aXRo
IEpTVmFsdWUgd2hlbiBwYXNzaW5nIGFzIGEgcGFyYW1ldGVyLgorCisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcDoKKyAgICAgICAgVXBkYXRlIGZvciBuZXcg
cmV0dXJuIHZhbHVlIG9mIElEQlJlcXVlc3Q6OnJlc3VsdCgpLgorCiAyMDE3LTAxLTAzICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgU2hhcmVkQnVmZmVy
TWFjLm1tIHRvIFNoYXJlZEJ1ZmZlckNvY29hLm1tCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMjEwMjU4KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTExNDgsNyArMTE0OCw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBi
aW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9q
cy9KU0lEQkluZGV4Q3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVD
dXN0b20uY3BwCi0gICAgYmluZGluZ3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcAogICAgIGJp
bmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNJ
bWFnZURhdGFDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhv
c3RDdXN0b20uY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJS
ZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJSZXF1ZXN0LmNwcAkocmV2aXNpb24gMjEwMjU4KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkx
LDcgQEAgSURCUmVxdWVzdDo6SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25DbwogICAgIDogSURC
QWN0aXZlRE9NT2JqZWN0KCZjb250ZXh0KQogICAgICwgbV90cmFuc2FjdGlvbigmdHJhbnNhY3Rp
b24pCiAgICAgLCBtX3Jlc291cmNlSWRlbnRpZmllcih0cmFuc2FjdGlvbi5jb25uZWN0aW9uUHJv
eHkoKSkKLSAgICAsIG1fb2JqZWN0U3RvcmVTb3VyY2UoJm9iamVjdFN0b3JlKQorICAgICwgbV9z
b3VyY2UoJm9iamVjdFN0b3JlKQogICAgICwgbV9jb25uZWN0aW9uUHJveHkodHJhbnNhY3Rpb24u
ZGF0YWJhc2UoKS5jb25uZWN0aW9uUHJveHkoKSkKIHsKICAgICBzdXNwZW5kSWZOZWVkZWQoKTsK
QEAgLTEwNyw4ICsxMDcsNyBAQCBJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlv
bkNvCiAgICAgc3VzcGVuZElmTmVlZGVkKCk7CiAKICAgICBXVEY6OnN3aXRjaE9uKGN1cnNvci5z
b3VyY2UoKSwKLSAgICAgICAgW3RoaXNdIChjb25zdCBSZWZQdHI8SURCSW5kZXg+JiBpbmRleCkg
eyB0aGlzLT5tX2luZGV4U291cmNlID0gaW5kZXg7IH0sCi0gICAgICAgIFt0aGlzXSAoY29uc3Qg
UmVmUHRyPElEQk9iamVjdFN0b3JlPiYgb2JqZWN0U3RvcmUpIHsgdGhpcy0+bV9vYmplY3RTdG9y
ZVNvdXJjZSA9IG9iamVjdFN0b3JlOyB9CisgICAgICAgIFt0aGlzXSAoY29uc3QgYXV0byYgdmFs
dWUpIHsgdGhpcy0+bV9zb3VyY2UgPSBJREJSZXF1ZXN0OjpTb3VyY2UgeyB2YWx1ZSB9OyB9CiAg
ICAgKTsKIAogICAgIGN1cnNvci5zZXRSZXF1ZXN0KCp0aGlzKTsKQEAgLTExOCw3ICsxMTcsNyBA
QCBJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvCiAgICAgOiBJREJBY3Rp
dmVET01PYmplY3QoJmNvbnRleHQpCiAgICAgLCBtX3RyYW5zYWN0aW9uKCZ0cmFuc2FjdGlvbikK
ICAgICAsIG1fcmVzb3VyY2VJZGVudGlmaWVyKHRyYW5zYWN0aW9uLmNvbm5lY3Rpb25Qcm94eSgp
KQotICAgICwgbV9pbmRleFNvdXJjZSgmaW5kZXgpCisgICAgLCBtX3NvdXJjZSgmaW5kZXgpCiAg
ICAgLCBtX2Nvbm5lY3Rpb25Qcm94eSh0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmNvbm5lY3Rpb25Q
cm94eSgpKQogewogICAgIHN1c3BlbmRJZk5lZWRlZCgpOwpAQCAtMTI4LDcgKzEyNyw3IEBAIElE
QlJlcXVlc3Q6OklEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ28KICAgICA6IElEQkFjdGl2ZURP
TU9iamVjdCgmY29udGV4dCkKICAgICAsIG1fdHJhbnNhY3Rpb24oJnRyYW5zYWN0aW9uKQogICAg
ICwgbV9yZXNvdXJjZUlkZW50aWZpZXIodHJhbnNhY3Rpb24uY29ubmVjdGlvblByb3h5KCkpCi0g
ICAgLCBtX29iamVjdFN0b3JlU291cmNlKCZvYmplY3RTdG9yZSkKKyAgICAsIG1fc291cmNlKCZv
YmplY3RTdG9yZSkKICAgICAsIG1fcmVxdWVzdGVkT2JqZWN0U3RvcmVSZWNvcmRUeXBlKHR5cGUp
CiAgICAgLCBtX2Nvbm5lY3Rpb25Qcm94eSh0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmNvbm5lY3Rp
b25Qcm94eSgpKQogewpAQCAtMTQ1LDggKzE0NCwyMCBAQCBJREJSZXF1ZXN0Ojp+SURCUmVxdWVz
dCgpCiB7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBvcmlnaW5UaHJlYWRJRCgpKTsK
IAotICAgIGlmIChtX2N1cnNvclJlc3VsdCkKLSAgICAgICAgbV9jdXJzb3JSZXN1bHQtPmNsZWFy
UmVxdWVzdCgpOworICAgIGlmIChtX3Jlc3VsdCkgeworICAgICAgICBXVEY6OnN3aXRjaE9uKG1f
cmVzdWx0LnZhbHVlKCksCisgICAgICAgICAgICBbXSAoUmVmUHRyPElEQkN1cnNvcj4mIGN1cnNv
cikgeyBjdXJzb3ItPmNsZWFyUmVxdWVzdCgpOyB9LAorICAgICAgICAgICAgW10gKGNvbnN0IGF1
dG8mKSB7IH0KKyAgICAgICAgKTsKKyAgICB9Cit9CisKK0V4Y2VwdGlvbk9yPHN0ZDo6b3B0aW9u
YWw8SURCUmVxdWVzdDo6UmVzdWx0Pj4gSURCUmVxdWVzdDo6cmVzdWx0KCkgY29uc3QKK3sKKyAg
ICBpZiAoIWlzRG9uZSgpKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSURCRGF0YWJhc2VF
eGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byByZWFk
IHRoZSAncmVzdWx0JyBwcm9wZXJ0eSBmcm9tICdJREJSZXF1ZXN0JzogVGhlIHJlcXVlc3QgaGFz
IG5vdCBmaW5pc2hlZC4iKSB9OworCisgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SURCUmVxdWVz
dDo6UmVzdWx0PiB7IG1fcmVzdWx0IH07CiB9CiAKIEV4Y2VwdGlvbk9yPERPTUVycm9yKj4gSURC
UmVxdWVzdDo6ZXJyb3IoKSBjb25zdApAQCAtMTU5LDI5ICsxNzAsMTUgQEAgRXhjZXB0aW9uT3I8
RE9NRXJyb3IqPiBJREJSZXF1ZXN0OjplcnJvcgogICAgIHJldHVybiBtX2RvbUVycm9yLmdldCgp
OwogfQogCi1zdGQ6Om9wdGlvbmFsPElEQlJlcXVlc3Q6OlNvdXJjZT4gSURCUmVxdWVzdDo6c291
cmNlKCkgY29uc3QKLXsKLSAgICBpZiAobV9jdXJzb3JTb3VyY2UpCi0gICAgICAgIHJldHVybiBT
b3VyY2UgeyBtX2N1cnNvclNvdXJjZSB9OwotICAgIGlmIChtX2luZGV4U291cmNlKQotICAgICAg
ICByZXR1cm4gU291cmNlIHsgbV9pbmRleFNvdXJjZSB9OwotICAgIGlmIChtX29iamVjdFN0b3Jl
U291cmNlKQotICAgICAgICByZXR1cm4gU291cmNlIHsgbV9vYmplY3RTdG9yZVNvdXJjZSB9Owot
Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQogdm9pZCBJREJSZXF1ZXN0OjpzZXRTb3Vy
Y2UoSURCQ3Vyc29yJiBjdXJzb3IpCiB7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBv
cmlnaW5UaHJlYWRJRCgpKTsKICAgICBBU1NFUlQoIW1fY3Vyc29yUmVxdWVzdE5vdGlmaWVyKTsK
IAotICAgIG1fb2JqZWN0U3RvcmVTb3VyY2UgPSBudWxscHRyOwotICAgIG1faW5kZXhTb3VyY2Ug
PSBudWxscHRyOwotICAgIG1fY3Vyc29yU291cmNlID0gJmN1cnNvcjsKKyAgICBtX3NvdXJjZSA9
IFNvdXJjZSB7ICZjdXJzb3IgfTsKICAgICBtX2N1cnNvclJlcXVlc3ROb3RpZmllciA9IHN0ZDo6
bWFrZV91bmlxdWU8U2NvcGVHdWFyZD4oW3RoaXNdKCkgewotICAgICAgICBBU1NFUlQobV9jdXJz
b3JTb3VyY2UpOwotICAgICAgICBtX2N1cnNvclNvdXJjZS0+ZGVjcmVtZW50T3V0c3RhbmRpbmdS
ZXF1ZXN0Q291bnQoKTsKKyAgICAgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVm
UHRyPElEQkN1cnNvcj4+KG1fc291cmNlLnZhbHVlKCkpKTsKKyAgICAgICAgV1RGOjpnZXQ8UmVm
UHRyPElEQkN1cnNvcj4+KG1fc291cmNlLnZhbHVlKCkpLT5kZWNyZW1lbnRPdXRzdGFuZGluZ1Jl
cXVlc3RDb3VudCgpOwogICAgIH0pOwogfQogCkBAIC0yMDUsMjAgKzIwMiwyOCBAQCB1aW50NjRf
dCBJREJSZXF1ZXN0Ojpzb3VyY2VPYmplY3RTdG9yZUlkCiB7CiAgICAgQVNTRVJUKGN1cnJlbnRU
aHJlYWQoKSA9PSBvcmlnaW5UaHJlYWRJRCgpKTsKIAotICAgIGlmIChtX29iamVjdFN0b3JlU291
cmNlKQotICAgICAgICByZXR1cm4gbV9vYmplY3RTdG9yZVNvdXJjZS0+aW5mbygpLmlkZW50aWZp
ZXIoKTsKLSAgICBpZiAobV9pbmRleFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIG1faW5kZXhTb3Vy
Y2UtPmluZm8oKS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKTsKLSAgICByZXR1cm4gMDsKKyAgICBp
ZiAoIW1fc291cmNlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBXVEY6OnN3aXRj
aE9uKG1fc291cmNlLnZhbHVlKCksCisgICAgICAgIFtdIChjb25zdCBSZWZQdHI8SURCT2JqZWN0
U3RvcmU+JiBvYmplY3RTdG9yZSkgeyByZXR1cm4gb2JqZWN0U3RvcmUtPmluZm8oKS5pZGVudGlm
aWVyKCk7IH0sCisgICAgICAgIFtdIChjb25zdCBSZWZQdHI8SURCSW5kZXg+JiBpbmRleCkgeyBy
ZXR1cm4gaW5kZXgtPmluZm8oKS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKTsgfSwKKyAgICAgICAg
W10gKGNvbnN0IFJlZlB0cjxJREJDdXJzb3I+JikgeyByZXR1cm4gMDsgfQorICAgICk7CiB9CiAK
IHVpbnQ2NF90IElEQlJlcXVlc3Q6OnNvdXJjZUluZGV4SWRlbnRpZmllcigpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBvcmlnaW5UaHJlYWRJRCgpKTsKIAotICAgIGlm
ICghbV9pbmRleFNvdXJjZSkKKyAgICBpZiAoIW1fc291cmNlKQogICAgICAgICByZXR1cm4gMDsK
LSAgICByZXR1cm4gbV9pbmRleFNvdXJjZS0+aW5mbygpLmlkZW50aWZpZXIoKTsKKworICAgIHJl
dHVybiBXVEY6OnN3aXRjaE9uKG1fc291cmNlLnZhbHVlKCksCisgICAgICAgIFtdIChjb25zdCBS
ZWZQdHI8SURCT2JqZWN0U3RvcmU+JikgLT4gdWludDY0X3QgeyByZXR1cm4gMDsgfSwKKyAgICAg
ICAgW10gKGNvbnN0IFJlZlB0cjxJREJJbmRleD4mIGluZGV4KSAtPiB1aW50NjRfdCB7IHJldHVy
biBpbmRleC0+aW5mbygpLmlkZW50aWZpZXIoKTsgfSwKKyAgICAgICAgW10gKGNvbnN0IFJlZlB0
cjxJREJDdXJzb3I+JikgLT4gdWludDY0X3QgeyByZXR1cm4gMDsgfQorICAgICk7CiB9CiAKIElu
ZGV4ZWREQjo6T2JqZWN0U3RvcmVSZWNvcmRUeXBlIElEQlJlcXVlc3Q6OnJlcXVlc3RlZE9iamVj
dFN0b3JlUmVjb3JkVHlwZSgpIGNvbnN0CkBAIC0yMzEsNyArMjM2LDggQEAgSW5kZXhlZERCOjpP
YmplY3RTdG9yZVJlY29yZFR5cGUgSURCUmVxdQogSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUg
SURCUmVxdWVzdDo6cmVxdWVzdGVkSW5kZXhSZWNvcmRUeXBlKCkgY29uc3QKIHsKICAgICBBU1NF
UlQoY3VycmVudFRocmVhZCgpID09IG9yaWdpblRocmVhZElEKCkpOwotICAgIEFTU0VSVChtX2lu
ZGV4U291cmNlKTsKKyAgICBBU1NFUlQobV9zb3VyY2UpOworICAgIEFTU0VSVChXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPFJlZlB0cjxJREJJbmRleD4+KG1fc291cmNlLnZhbHVlKCkpKTsKIAogICAg
IHJldHVybiBtX3JlcXVlc3RlZEluZGV4UmVjb3JkVHlwZTsKIH0KQEAgLTM2Miw4ICszNjgsNyBA
QCB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdChjb25zdCBJREJLZXlECiAgICAgaWYgKCFleGVj
KQogICAgICAgICByZXR1cm47CiAKLSAgICBjbGVhclJlc3VsdCgpOwotICAgIG1fc2NyaXB0UmVz
dWx0ID0geyBjb250ZXh0LT52bSgpLCBpZGJLZXlEYXRhVG9TY3JpcHRWYWx1ZSgqZXhlYywga2V5
RGF0YSkgfTsKKyAgICBtX3Jlc3VsdCA9IFJlc3VsdCB7IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93
bj4geyBjb250ZXh0LT52bSgpLCBpZGJLZXlEYXRhVG9TY3JpcHRWYWx1ZSgqZXhlYywga2V5RGF0
YSkgfSB9OwogfQogCiB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdChjb25zdCBWZWN0b3I8SURC
S2V5RGF0YT4mIGtleURhdGFzKQpAQCAtMzc4LDEwICszODMsOSBAQCB2b2lkIElEQlJlcXVlc3Q6
OnNldFJlc3VsdChjb25zdCBWZWN0b3I8CiAgICAgaWYgKCFzdGF0ZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgY2xlYXJSZXN1bHQoKTsKIAogICAgIExvY2tlcjxKU0xvY2s+IGxvY2tlcihjb250
ZXh0LT52bSgpLmFwaUxvY2soKSk7Ci0gICAgbV9zY3JpcHRSZXN1bHQgPSB7IGNvbnRleHQtPnZt
KCksIHRvSlMoc3RhdGUsIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpLCBrZXlEYXRhcykgfTsKKyAgICBtX3Jlc3VsdCA9IFJlc3VsdCB7IEpT
Qzo6U3Ryb25nPEpTQzo6VW5rbm93bj4geyBjb250ZXh0LT52bSgpLCB0b0pTKHN0YXRlLCBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwga2V5
RGF0YXMpIH0gfTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQoY29uc3QgVmVjdG9y
PElEQlZhbHVlPiYgdmFsdWVzKQpAQCAtMzk2LDEwICs0MDAsOCBAQCB2b2lkIElEQlJlcXVlc3Q6
OnNldFJlc3VsdChjb25zdCBWZWN0b3I8CiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm47
CiAKLSAgICBjbGVhclJlc3VsdCgpOwotCiAgICAgTG9ja2VyPEpTTG9jaz4gbG9ja2VyKGNvbnRl
eHQtPnZtKCkuYXBpTG9jaygpKTsKLSAgICBtX3NjcmlwdFJlc3VsdCA9IHsgY29udGV4dC0+dm0o
KSwgdG9KUyhleGVjLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpLCB2YWx1ZXMpIH07CisgICAgbV9yZXN1bHQgPSBSZXN1bHQgeyBKU0M6OlN0
cm9uZzxKU0M6OlVua25vd24+IHsgY29udGV4dC0+dm0oKSwgdG9KUyhleGVjLCBqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCB2YWx1ZXMpIH0g
fTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQodWludDY0X3QgbnVtYmVyKQpAQCAt
NDEwLDggKzQxMiw3IEBAIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0KHVpbnQ2NF90IG51bWIK
ICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNsZWFyUmVzdWx0KCk7
Ci0gICAgbV9zY3JpcHRSZXN1bHQgPSB7IGNvbnRleHQtPnZtKCksIEpTQzo6anNOdW1iZXIobnVt
YmVyKSB9OworICAgIG1fcmVzdWx0ID0gUmVzdWx0IHsgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3du
PiB7IGNvbnRleHQtPnZtKCksIEpTQzo6anNOdW1iZXIobnVtYmVyKSB9IH07CiB9CiAKIHZvaWQg
SURCUmVxdWVzdDo6c2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUoY29uc3QgSURCVmFsdWUmIHZh
bHVlKQpAQCAtNDI4LDE3ICs0MjksNyBAQCB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdFRvU3Ry
dWN0dXJlZENsCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm47CiAKLSAgICBjbGVhclJl
c3VsdCgpOwotICAgIG1fc2NyaXB0UmVzdWx0ID0geyBjb250ZXh0LT52bSgpLCBkZXNlcmlhbGl6
ZUlEQlZhbHVlVG9KU1ZhbHVlKCpleGVjLCB2YWx1ZSkgfTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0
OjpjbGVhclJlc3VsdCgpCi17Ci0gICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBvcmlnaW5U
aHJlYWRJRCgpKTsKLQotICAgIG1fc2NyaXB0UmVzdWx0ID0geyB9OwotICAgIG1fY3Vyc29yUmVz
dWx0ID0gbnVsbHB0cjsKLSAgICBtX2RhdGFiYXNlUmVzdWx0ID0gbnVsbHB0cjsKKyAgICBtX3Jl
c3VsdCA9IFJlc3VsdCB7IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4geyBjb250ZXh0LT52bSgp
LCBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKCpleGVjLCB2YWx1ZSkgfSB9OwogfQogCiB2
b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdFRvVW5kZWZpbmVkKCkKQEAgLTQ0OSwxNSArNDQwLDIw
IEBAIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9VbmRlZmluZWQoKQogICAgIGlmICghY29u
dGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2xlYXJSZXN1bHQoKTsKLSAgICBtX3Njcmlw
dFJlc3VsdCA9IHsgY29udGV4dC0+dm0oKSwgSlNDOjpqc1VuZGVmaW5lZCgpIH07CisgICAgbV9y
ZXN1bHQgPSBSZXN1bHQgeyBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+IHsgY29udGV4dC0+dm0o
KSwgSlNDOjpqc1VuZGVmaW5lZCgpIH0gfTsKIH0KIAogSURCQ3Vyc29yKiBJREJSZXF1ZXN0Ojpy
ZXN1bHRDdXJzb3IoKQogewogICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gb3JpZ2luVGhy
ZWFkSUQoKSk7CiAKLSAgICByZXR1cm4gbV9jdXJzb3JSZXN1bHQuZ2V0KCk7CisgICAgaWYgKCFt
X3Jlc3VsdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gV1RGOjpzd2l0
Y2hPbihtX3Jlc3VsdC52YWx1ZSgpLAorICAgICAgICBbXSAoUmVmUHRyPElEQkN1cnNvcj4mIGN1
cnNvcikgLT4gSURCQ3Vyc29yKiB7IHJldHVybiBjdXJzb3IuZ2V0KCk7IH0sCisgICAgICAgIFtd
IChjb25zdCBhdXRvJikgLT4gSURCQ3Vyc29yKiB7IHJldHVybiBudWxscHRyOyB9CisgICAgKTsK
IH0KIAogdm9pZCBJREJSZXF1ZXN0Ojp3aWxsSXRlcmF0ZUN1cnNvcihJREJDdXJzb3ImIGN1cnNv
cikKQEAgLTQ3Miw3ICs0NjgsNyBAQCB2b2lkIElEQlJlcXVlc3Q6OndpbGxJdGVyYXRlQ3Vyc29y
KElEQkN1CiAKICAgICBtX3BlbmRpbmdDdXJzb3IgPSAmY3Vyc29yOwogICAgIG1faGFzUGVuZGlu
Z0FjdGl2aXR5ID0gdHJ1ZTsKLSAgICBjbGVhclJlc3VsdCgpOworICAgIG1fcmVzdWx0ID0gc3Rk
OjpudWxsb3B0OwogICAgIG1fcmVhZHlTdGF0ZSA9IFJlYWR5U3RhdGU6OlBlbmRpbmc7CiAgICAg
bV9kb21FcnJvciA9IG51bGxwdHI7CiAgICAgbV9pZGJFcnJvciA9IHsgfTsKQEAgLTQ4NywxMiAr
NDgzLDEyIEBAIHZvaWQgSURCUmVxdWVzdDo6ZGlkT3Blbk9ySXRlcmF0ZUN1cnNvcigKICAgICBB
U1NFUlQoY3VycmVudFRocmVhZCgpID09IG9yaWdpblRocmVhZElEKCkpOwogICAgIEFTU0VSVCht
X3BlbmRpbmdDdXJzb3IpOwogCi0gICAgY2xlYXJSZXN1bHQoKTsKKyAgICBtX3Jlc3VsdCA9IHN0
ZDo6bnVsbG9wdDsKIAogICAgIGlmIChyZXN1bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRUeXBl
OjpJdGVyYXRlQ3Vyc29yU3VjY2VzcyB8fCByZXN1bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRU
eXBlOjpPcGVuQ3Vyc29yU3VjY2VzcykgewogICAgICAgICBtX3BlbmRpbmdDdXJzb3ItPnNldEdl
dFJlc3VsdCgqdGhpcywgcmVzdWx0RGF0YS5nZXRSZXN1bHQoKSk7CiAgICAgICAgIGlmIChyZXN1
bHREYXRhLmdldFJlc3VsdCgpLmlzRGVmaW5lZCgpKQotICAgICAgICAgICAgbV9jdXJzb3JSZXN1
bHQgPSBtX3BlbmRpbmdDdXJzb3I7CisgICAgICAgICAgICBtX3Jlc3VsdCA9IFJlc3VsdCB7IG1f
cGVuZGluZ0N1cnNvciB9OwogICAgIH0KIAogICAgIG1fY3Vyc29yUmVxdWVzdE5vdGlmaWVyID0g
bnVsbHB0cjsKQEAgLTUzNyw4ICs1MzMsNyBAQCB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdChS
ZWY8SURCRGF0YWJhCiB7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBvcmlnaW5UaHJl
YWRJRCgpKTsKIAotICAgIGNsZWFyUmVzdWx0KCk7Ci0gICAgbV9kYXRhYmFzZVJlc3VsdCA9IFdU
Rk1vdmUoZGF0YWJhc2UpOworICAgIG1fcmVzdWx0ID0gUmVzdWx0IHsgUmVmUHRyPElEQkRhdGFi
YXNlPiB7IFdURk1vdmUoZGF0YWJhc2UpIH0gfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3Qu
aAkocmV2aXNpb24gMjEwMjU4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NywxMiArNjcsMTEgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB+SURCUmVxdWVzdCgpOwogCi0gICAgSURCQ3Vyc29yKiBjdXJzb3JSZXN1
bHQoKSBjb25zdCB7IHJldHVybiBtX2N1cnNvclJlc3VsdC5nZXQoKTsgfQotICAgIElEQkRhdGFi
YXNlKiBkYXRhYmFzZVJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2VSZXN1bHQuZ2V0
KCk7IH0KLSAgICBKU0M6OkpTVmFsdWUgc2NyaXB0UmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9z
Y3JpcHRSZXN1bHQuZ2V0KCk7IH0KKyAgICB1c2luZyBSZXN1bHQgPSBWYXJpYW50PFJlZlB0cjxJ
REJDdXJzb3I+LCBSZWZQdHI8SURCRGF0YWJhc2U+LCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+
PjsKKyAgICBFeGNlcHRpb25PcjxzdGQ6Om9wdGlvbmFsPFJlc3VsdD4+IHJlc3VsdCgpIGNvbnN0
OwogCiAgICAgdXNpbmcgU291cmNlID0gVmFyaWFudDxSZWZQdHI8SURCT2JqZWN0U3RvcmU+LCBS
ZWZQdHI8SURCSW5kZXg+LCBSZWZQdHI8SURCQ3Vyc29yPj47Ci0gICAgc3RkOjpvcHRpb25hbDxT
b3VyY2U+IHNvdXJjZSgpIGNvbnN0OworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8U291cmNlPiYg
c291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KIAogICAgIEV4Y2VwdGlvbk9yPERP
TUVycm9yKj4gZXJyb3IoKSBjb25zdDsKIApAQCAtMTQxLDggKzE0MCw2IEBAIHByaXZhdGU6CiAg
ICAgSURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCT2JqZWN0U3RvcmUmLCBJ
bmRleGVkREI6Ok9iamVjdFN0b3JlUmVjb3JkVHlwZSwgSURCVHJhbnNhY3Rpb24mKTsKICAgICBJ
REJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJJbmRleCYsIEluZGV4ZWREQjo6
SW5kZXhSZWNvcmRUeXBlLCBJREJUcmFuc2FjdGlvbiYpOwogCi0gICAgdm9pZCBjbGVhclJlc3Vs
dCgpOwotCiAgICAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBj
b25zdCBvdmVycmlkZTsKIAogICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBj
b25zdCBmaW5hbDsKQEAgLTE2MSwxOCArMTU4LDExIEBAIHByaXZhdGU6CiAKICAgICBJREJDdXJz
b3IqIHJlc3VsdEN1cnNvcigpOwogCi0gICAgLy8gQ291bGQgY29uc2lkZXIgc3RvcmluZyB0aGVz
ZSB0aHJlZSBpbiBhIHVuaW9uIG9yIHVuaW9uLWxpa2UgY2xhc3MgaW5zdGVhZC4KLSAgICBKU0M6
OlN0cm9uZzxKU0M6OlVua25vd24+IG1fc2NyaXB0UmVzdWx0OwotICAgIFJlZlB0cjxJREJDdXJz
b3I+IG1fY3Vyc29yUmVzdWx0OwotICAgIFJlZlB0cjxJREJEYXRhYmFzZT4gbV9kYXRhYmFzZVJl
c3VsdDsKLQogICAgIElEQkVycm9yIG1faWRiRXJyb3I7CiAgICAgSURCUmVzb3VyY2VJZGVudGlm
aWVyIG1fcmVzb3VyY2VJZGVudGlmaWVyOwogCi0gICAgLy8gQ291bGQgY29uc2lkZXIgc3Rvcmlu
ZyB0aGVzZSB0aHJlZSBpbiBhIHVuaW9uIG9yIHVuaW9uLWxpa2UgY2xhc3MgaW5zdGVhZC4KLSAg
ICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG1fb2JqZWN0U3RvcmVTb3VyY2U7Ci0gICAgUmVmUHRy
PElEQkluZGV4PiBtX2luZGV4U291cmNlOwotICAgIFJlZlB0cjxJREJDdXJzb3I+IG1fY3Vyc29y
U291cmNlOworICAgIHN0ZDo6b3B0aW9uYWw8UmVzdWx0PiBtX3Jlc3VsdDsKKyAgICBzdGQ6Om9w
dGlvbmFsPFNvdXJjZT4gbV9zb3VyY2U7CiAKICAgICBib29sIG1faGFzUGVuZGluZ0FjdGl2aXR5
IHsgdHJ1ZSB9OwogICAgIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVSZWNvcmRUeXBlIG1fcmVxdWVz
dGVkT2JqZWN0U3RvcmVSZWNvcmRUeXBlIHsgSW5kZXhlZERCOjpPYmplY3RTdG9yZVJlY29yZFR5
cGU6OlZhbHVlT25seSB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCUmVxdWVzdC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCUmVxdWVzdC5pZGwJKHJldmlzaW9uIDIxMDI1OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3
ICszNCw3IEBACiAgICAgR2VuZXJhdGVJc1JlYWNoYWJsZT1JbXBsLAogICAgIFNraXBWVGFibGVW
YWxpZGF0aW9uLAogXSBpbnRlcmZhY2UgSURCUmVxdWVzdCA6IEV2ZW50VGFyZ2V0IHsKLSAgICBb
Q3VzdG9tR2V0dGVyLCBHZXR0ZXJNYXlUaHJvd0V4Y2VwdGlvbl0gcmVhZG9ubHkgYXR0cmlidXRl
IGFueSByZXN1bHQ7CisgICAgW0dldHRlck1heVRocm93RXhjZXB0aW9uXSByZWFkb25seSBhdHRy
aWJ1dGUgKElEQkN1cnNvciBvciBJREJEYXRhYmFzZSBvciBhbnkpPyByZXN1bHQ7CiAgICAgW0dl
dHRlck1heVRocm93RXhjZXB0aW9uXSByZWFkb25seSBhdHRyaWJ1dGUgRE9NRXJyb3I/IGVycm9y
OwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSAoSURCT2JqZWN0U3RvcmUgb3IgSURCSW5kZXggb3Ig
SURCQ3Vyc29yKT8gc291cmNlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJUcmFuc2FjdGlv
biB0cmFuc2FjdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxMDI1OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjg5
OCw3ICsyODk4LDYgQEAKIAkJN0NEMEJBMDUxQjhGNzlDOTAwNUNFQkJFIC8qIEFjdGl2ZURPTUNh
bGxiYWNrTWljcm90YXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3Q0QwQkEwMzFCOEY3OUM5MDA1Q0VCQkUgLyogQWN0aXZlRE9NQ2FsbGJhY2tNaWNy
b3Rhc2suaCAqLzsgfTsKIAkJN0NENDk0Q0MxQTg2RUIxRDAwMEE4N0VDIC8qIFJlbmRlckF0dGFj
aG1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0NENDk0Q0ExQTg2RUIxRDAwMEE4N0VDIC8qIFJlbmRlckF0dGFjaG1lbnQuY3BwICovOyB9Owog
CQk3Q0Q0OTRDRDFBODZFQjFEMDAwQTg3RUMgLyogUmVuZGVyQXR0YWNobWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NENDk0Q0IxQTg2RUIxRDAw
MEE4N0VDIC8qIFJlbmRlckF0dGFjaG1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQk3Q0Q2ODY1NjFFMEUyNkQzMDBFOTdBQTcgLyogSlNJREJS
ZXF1ZXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdDRDY4NjU1MUUwRTI2RDMwMEU5N0FBNyAvKiBKU0lEQlJlcXVlc3RDdXN0b20uY3Bw
ICovOyB9OwogCQk3Q0U1OEQ0QTFERDY0QTVCMDAxMjg1NTIgLyogU1ZHUG9pbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRTU4RDQ5MURENjRBNUIw
MDEyODU1MiAvKiBTVkdQb2ludC5oICovOyB9OwogCQk3Q0U1OEQ0RTFERDY5NEZFMDAxMjg1NTIg
LyogU1ZHUmVjdFRyYWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0NFNThENEQxREQ2OTRGRTAwMTI4NTUyIC8qIFNWR1JlY3RUcmFpdHMuaCAqLzsg
fTsKIAkJN0NFNThENTAxREQ2OUExRTAwMTI4NTUyIC8qIFNWR051bWJlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNThENEYxREQ2OUExRTAwMTI4
NTUyIC8qIFNWR051bWJlci5oICovOyB9OwpAQCAtMTA0MDUsNyArMTA0MDQsNiBAQAogCQk3Q0Qw
QkEwMzFCOEY3OUM5MDA1Q0VCQkUgLyogQWN0aXZlRE9NQ2FsbGJhY2tNaWNyb3Rhc2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWN0aXZlRE9NQ2FsbGJhY2tNaWNyb3Rhc2su
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NENDk0Q0ExQTg2RUIxRDAwMEE4N0VD
IC8qIFJlbmRlckF0dGFjaG1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVuZGVyQXR0YWNobWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdDRDQ5NENCMUE4NkVCMUQwMDBBODdFQyAvKiBSZW5kZXJBdHRhY2htZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckF0dGFjaG1lbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJN0NENjg2NTUxRTBFMjZEMzAwRTk3QUE3IC8qIEpTSURCUmVxdWVz
dEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0lEQlJl
cXVlc3RDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0U1OEQ0OTFE
RDY0QTVCMDAxMjg1NTIgLyogU1ZHUG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU1ZHUG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NFNThENEQx
REQ2OTRGRTAwMTI4NTUyIC8qIFNWR1JlY3RUcmFpdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU1ZHUmVjdFRyYWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3Q0U1OEQ0RjFERDY5QTFFMDAxMjg1NTIgLyogU1ZHTnVtYmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNWR051bWJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjIxMzMsNyArMjIxMzEsNiBAQAogCQkJCUJDMTdGOTY1MEI2NEVCQjgwMDRBNjVDQiAv
KiBKU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcCAqLywKIAkJCQlBQjRDQjRFQTBCOEJEQTNE
MDA5RjQwQjAgLyogSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5oICovLAogCQkJCUQ2Rjc5NjBD
MTY2RkZFQ0UwMDc2REQxOCAvKiBKU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwICovLAot
CQkJCTdDRDY4NjU1MUUwRTI2RDMwMEU5N0FBNyAvKiBKU0lEQlJlcXVlc3RDdXN0b20uY3BwICov
LAogCQkJCTdBNzRFQ0JDMTAxODM5REEwMEJGOTM5RSAvKiBKU0luc3BlY3RvckZyb250ZW5kSG9z
dEN1c3RvbS5jcHAgKi8sCiAJCQkJQkNFMUM0M0YwRDk4MzBGNDAwM0IwMkYyIC8qIEpTTG9jYXRp
b25DdXN0b20uY3BwICovLAogCQkJCTJEOUJGNzQ4MURCRkRERjgwMDdBN0Q5OSAvKiBKU01lZGlh
S2V5U2Vzc2lvbkN1c3RvbS5jcHAgKi8sCkBAIC0zMTc0MSw3ICszMTczOCw2IEBACiAJCQkJNDlD
N0I5RDkxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyYnVmZmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTQ5QzdCOURGMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRDNGM0QzNjkxQTY5QjdCMDAwNTlGQzJCIC8qIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJN0NENjg2NTYx
RTBFMjZEMzAwRTk3QUE3IC8qIEpTSURCUmVxdWVzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk2Rjk5NUEyMTFBNzA3OEIxMDBBNzM1RjQgLyogV2ViR0xTYW1wbGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTQ5QzdCOUUyMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBMDhDRjE1NDE1MkI3N0IzMDA5QzU3NzUgLyogV2ViR0xTaGFk
ZXJQcmVjaXNpb25Gb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9nZW5lcmljL0lETFR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvZ2VuZXJpYy9JRExUeXBlcy5oCShyZXZpc2lvbiAyMTAyNTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0lETFR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlIDxoZWFwL0hhbmRsZVR5
cGVzLmg+CiAjaW5jbHVkZSA8d3RmL0JyaWdhbmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTU5LDcgKzYwLDE0IEBAIHN0cnVj
dCBJRExVbnN1cHBvcnRlZFR5cGUgOiBJRExUeXBlPHZvaWQKIC8vIElETE51bGwgaXMgYSBzcGVj
aWFsIHR5cGUgZm9yIHVzZSBhcyBhIHN1YnR5cGUgaW4gYW4gSURMVW5pb24gdGhhdCBpcyBudWxs
YWJsZS4KIHN0cnVjdCBJRExOdWxsIDogSURMVHlwZTxzdGQ6Om51bGxwdHJfdD4geyB9OwogCi1z
dHJ1Y3QgSURMQW55IDogSURMVHlwZTxKU0M6OkpTVmFsdWU+IHsgfTsKK3N0cnVjdCBJRExBbnkg
OiBJRExUeXBlPEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4+IHsKKyAgICB1c2luZyBQYXJhbWV0
ZXJUeXBlID0gSlNDOjpKU1ZhbHVlOworCisgICAgdXNpbmcgTnVsbGFibGVUeXBlID0gSlNDOjpT
dHJvbmc8SlNDOjpVbmtub3duPjsKKyAgICBzdGF0aWMgaW5saW5lIHN0ZDo6bnVsbHB0cl90IG51
bGxWYWx1ZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBz
dGF0aWMgaW5saW5lIGJvb2wgaXNOdWxsVmFsdWUoVSYmIHZhbHVlKSB7IHJldHVybiAhdmFsdWU7
IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgaW5saW5lIFUmJiBleHRyYWN0VmFs
dWVGcm9tTnVsbGFibGUoVSYmIHZhbHVlKSB7IHJldHVybiBzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
OyB9Cit9OwogCiBzdHJ1Y3QgSURMQm9vbGVhbiA6IElETFR5cGU8Ym9vbD4geyB9OwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaAkocmV2aXNpb24gMjEw
MjU4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTIxNCwxMCArMjE0LDE3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBEZWZhdWx0Q29udmUKIC8vIE1BUks6IEFueSB0eXBlCiAKIHRlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRlcjxJRExBbnk+IHsKKyAgICB1c2luZyBS
ZXR1cm5UeXBlID0gSlNDOjpKU1ZhbHVlOworICAgIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAg
ICAgIHJldHVybiB2YWx1ZTsKICAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gdmFsdWUuZ2V0KCk7CisgICAgfQogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMQW55PiB7CkBAIC0yNTEsNiArMjU4LDExIEBAIG5hbWVzcGFjZSBEZXRhaWwg
ewogICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEludGVyZmFjZTxUPj4gewog
ICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEludGVyZmFjZTxUPj46
OlJldHVyblR5cGU7CiAgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgTnVsbGFi
bGVDb252ZXJzaW9uVHlwZTxJRExBbnk+IHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1l
IENvbnZlcnRlcjxJRExBbnk+OjpSZXR1cm5UeXBlOworICAgIH07CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExOdWxsYWJsZTxUPj4gewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJREJSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyMTAyNTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwCShub25leGlzdGVu
dCkKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJKU0lEQlJlcXVlc3QuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQot
Ci0jaW5jbHVkZSAiSlNJREJDdXJzb3IuaCIKLSNpbmNsdWRlICJKU0lEQkRhdGFiYXNlLmgiCi0j
aW5jbHVkZSAiSlNJREJJbmRleC5oIgotI2luY2x1ZGUgIkpTSURCT2JqZWN0U3RvcmUuaCIKLQot
dXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1KU1ZhbHVlIEpT
SURCUmVxdWVzdDo6cmVzdWx0KEV4ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0Ci17Ci0gICAgYXV0byYg
cmVxdWVzdCA9IHdyYXBwZWQoKTsKLQotICAgIGlmICghcmVxdWVzdC5pc0RvbmUoKSkgewotICAg
ICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCBzY29w
ZSwgRXhjZXB0aW9uIHsgSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yLCBB
U0NJSUxpdGVyYWwoIkZhaWxlZCB0byByZWFkIHRoZSAncmVzdWx0JyBwcm9wZXJ0eSBmcm9tICdJ
REJSZXF1ZXN0JzogVGhlIHJlcXVlc3QgaGFzIG5vdCBmaW5pc2hlZC4iKSB9KTsKLSAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byogY3Vyc29yID0gcmVxdWVzdC5jdXJz
b3JSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwg
KmN1cnNvcik7Ci0gICAgaWYgKGF1dG8qIGRhdGFiYXNlID0gcmVxdWVzdC5kYXRhYmFzZVJlc3Vs
dCgpKQotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCAqZGF0YWJh
c2UpOwotICAgIGlmIChhdXRvIHJlc3VsdCA9IHJlcXVlc3Quc2NyaXB0UmVzdWx0KCkpCi0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgcmV0dXJuIGpzTnVsbCgpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFn
ZW50LmNwcAkocmV2aXNpb24gMjEwMjU4KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDE3ICsxMjMs
MjAgQEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgYXV0byYgcmVxdWVzdCA9IHN0YXRp
Y19jYXN0PElEQk9wZW5EQlJlcXVlc3QmPigqZXZlbnQtPnRhcmdldCgpKTsKLSAgICAgICAgaWYg
KCFyZXF1ZXN0LmlzRG9uZSgpKSB7CisKKyAgICAgICAgYXV0byByZXN1bHQgPSByZXF1ZXN0LnJl
c3VsdCgpOworICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CiAgICAgICAgICAg
ICBtX2V4ZWN1dGFibGVXaXRoRGF0YWJhc2UtPnJlcXVlc3RDYWxsYmFjaygpLnNlbmRGYWlsdXJl
KCJDb3VsZCBub3QgZ2V0IHJlc3VsdCBpbiBjYWxsYmFjay4iKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gZGF0YWJhc2VSZXN1bHQgPSByZXF1ZXN0LmRh
dGFiYXNlUmVzdWx0KCk7Ci0gICAgICAgIGlmICghZGF0YWJhc2VSZXN1bHQpIHsKKyAgICAgICAg
YXV0byByZXN1bHRWYWx1ZSA9IHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKKyAgICAgICAg
aWYgKCFyZXN1bHRWYWx1ZSB8fCAhV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCRGF0
YWJhc2U+PihyZXN1bHRWYWx1ZS52YWx1ZSgpKSkgewogICAgICAgICAgICAgbV9leGVjdXRhYmxl
V2l0aERhdGFiYXNlLT5yZXF1ZXN0Q2FsbGJhY2soKS5zZW5kRmFpbHVyZSgiVW5leHBlY3RlZCBy
ZXN1bHQgdHlwZS4iKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAgICAg
IGF1dG8gZGF0YWJhc2VSZXN1bHQgPSBXVEY6OmdldDxSZWZQdHI8SURCRGF0YWJhc2U+PihyZXN1
bHRWYWx1ZS52YWx1ZSgpKTsKICAgICAgICAgbV9leGVjdXRhYmxlV2l0aERhdGFiYXNlLT5leGVj
dXRlKCpkYXRhYmFzZVJlc3VsdCk7CiAgICAgICAgIGRhdGFiYXNlUmVzdWx0LT5jbG9zZSgpOwog
ICAgIH0KQEAgLTM2MiwyNiArMzY1LDIzIEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAg
IGF1dG8mIHJlcXVlc3QgPSBzdGF0aWNfY2FzdDxJREJSZXF1ZXN0Jj4oKmV2ZW50LT50YXJnZXQo
KSk7Ci0gICAgICAgIGlmICghcmVxdWVzdC5pc0RvbmUoKSkgeworCisgICAgICAgIGF1dG8gcmVz
dWx0ID0gcmVxdWVzdC5yZXN1bHQoKTsKKyAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24o
KSkgewogICAgICAgICAgICAgbV9yZXF1ZXN0Q2FsbGJhY2stPnNlbmRGYWlsdXJlKCJDb3VsZCBu
b3QgZ2V0IHJlc3VsdCBpbiBjYWxsYmFjay4iKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKHJlcXVlc3Quc2NyaXB0UmVzdWx0KCkpIHsKLSAg
ICAgICAgICAgIGVuZChmYWxzZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIGF1dG8qIGN1cnNvclJlc3VsdCA9IHJlcXVlc3QuY3Vyc29yUmVzdWx0
KCk7Ci0gICAgICAgIGlmICghY3Vyc29yUmVzdWx0KSB7CisgICAgICAgIGF1dG8gcmVzdWx0VmFs
dWUgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7CisgICAgICAgIGlmICghcmVzdWx0VmFs
dWUgfHwgIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPElEQkN1cnNvcj4+KHJlc3VsdFZh
bHVlLnZhbHVlKCkpKSB7CiAgICAgICAgICAgICBlbmQoZmFsc2UpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byYgY3Vyc29yID0gKmN1cnNvclJlc3VsdDsK
KyAgICAgICAgYXV0byBjdXJzb3IgPSBXVEY6OmdldDxSZWZQdHI8SURCQ3Vyc29yPj4ocmVzdWx0
VmFsdWUudmFsdWUoKSk7CiAKICAgICAgICAgaWYgKG1fc2tpcENvdW50KSB7Ci0gICAgICAgICAg
ICBpZiAoY3Vyc29yLmFkdmFuY2UobV9za2lwQ291bnQpLmhhc0V4Y2VwdGlvbigpKQorICAgICAg
ICAgICAgaWYgKGN1cnNvci0+YWR2YW5jZShtX3NraXBDb3VudCkuaGFzRXhjZXB0aW9uKCkpCiAg
ICAgICAgICAgICAgICAgbV9yZXF1ZXN0Q2FsbGJhY2stPnNlbmRGYWlsdXJlKCJDb3VsZCBub3Qg
YWR2YW5jZSBjdXJzb3IuIik7CiAgICAgICAgICAgICBtX3NraXBDb3VudCA9IDA7CiAgICAgICAg
ICAgICByZXR1cm47CkBAIC0zOTMsNyArMzkzLDcgQEAgcHVibGljOgogICAgICAgICB9CiAKICAg
ICAgICAgLy8gQ29udGludWUgY3Vyc29yIGJlZm9yZSBtYWtpbmcgaW5qZWN0ZWQgc2NyaXB0IGNh
bGxzLCBvdGhlcndpc2UgdHJhbnNhY3Rpb24gbWlnaHQgYmUgZmluaXNoZWQuCi0gICAgICAgIGlm
IChjdXJzb3IuY29udGludWVGdW5jdGlvbihudWxscHRyKS5oYXNFeGNlcHRpb24oKSkgeworICAg
ICAgICBpZiAoY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKG51bGxwdHIpLmhhc0V4Y2VwdGlvbigp
KSB7CiAgICAgICAgICAgICBtX3JlcXVlc3RDYWxsYmFjay0+c2VuZEZhaWx1cmUoIkNvdWxkIG5v
dCBjb250aW51ZSBjdXJzb3IuIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAg
LTQwMyw5ICs0MDMsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAg
YXV0byBkYXRhRW50cnkgPSBEYXRhRW50cnk6OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0S2V5
KG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChjdXJzb3Iua2V5KCksIFN0cmluZygpLCB0cnVl
KSkKLSAgICAgICAgICAgIC5zZXRQcmltYXJ5S2V5KG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVj
dChjdXJzb3IucHJpbWFyeUtleSgpLCBTdHJpbmcoKSwgdHJ1ZSkpCi0gICAgICAgICAgICAuc2V0
VmFsdWUobV9pbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGN1cnNvci52YWx1ZSgpLCBTdHJpbmco
KSwgdHJ1ZSkpCisgICAgICAgICAgICAuc2V0S2V5KG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVj
dChjdXJzb3ItPmtleSgpLCBTdHJpbmcoKSwgdHJ1ZSkpCisgICAgICAgICAgICAuc2V0UHJpbWFy
eUtleShtX2luamVjdGVkU2NyaXB0LndyYXBPYmplY3QoY3Vyc29yLT5wcmltYXJ5S2V5KCksIFN0
cmluZygpLCB0cnVlKSkKKyAgICAgICAgICAgIC5zZXRWYWx1ZShtX2luamVjdGVkU2NyaXB0Lndy
YXBPYmplY3QoY3Vyc29yLT52YWx1ZSgpLCBTdHJpbmcoKSwgdHJ1ZSkpCiAgICAgICAgICAgICAu
cmVsZWFzZSgpOwogICAgICAgICBtX3Jlc3VsdC0+YWRkSXRlbShXVEZNb3ZlKGRhdGFFbnRyeSkp
OwogICAgIH0K
</data>
<flag name="review"
          id="320238"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>