<?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>165982</bug_id>
          
          <creation_ts>2016-12-16 18:31:19 -0800</creation_ts>
          <short_desc>WebAssembly: Implement the WebAssembly.instantiate API</short_desc>
          <delta_ts>2017-03-06 23:39:42 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>169187</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1260845</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-16 18:31:19 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1261756</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-12-20 14:19:01 -0800</bug_when>
    <thetext>&lt;rdar://problem/29760110&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283359</commentid>
    <comment_count>2</comment_count>
      <attachid>303376</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-03 18:47:51 -0800</bug_when>
    <thetext>Created attachment 303376
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283610</commentid>
    <comment_count>3</comment_count>
      <attachid>303461</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-05 12:01:35 -0800</bug_when>
    <thetext>Created attachment 303461
WIP

Need to write tests still. I think the API is done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283614</commentid>
    <comment_count>4</comment_count>
      <attachid>303462</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-05 12:23:40 -0800</bug_when>
    <thetext>Created attachment 303462
WIP

Now with tests. I need to write a changelog still.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283622</commentid>
    <comment_count>5</comment_count>
      <attachid>303464</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-05 14:01:56 -0800</bug_when>
    <thetext>Created attachment 303464
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283623</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-05 14:04:12 -0800</bug_when>
    <thetext>Attachment 303464 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:73:  Missing space inside { }.  [whitespace/braces] [5]
Total errors found: 1 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283929</commentid>
    <comment_count>7</comment_count>
      <attachid>303464</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-06 13:59:54 -0800</bug_when>
    <thetext>Comment on attachment 303464
patch

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

r=me with some comments.

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:117
&gt; +            throwException(exec, throwScope, createTypeError(exec, ASCIILiteral(&quot;import must be an object&quot;), defaultSourceAppender, runtimeTypeForValue(importModuleValue)));
&gt; +            return nullptr;

you could make a lambda like

auto throw = [&amp;] (Error* error) {
    throwException(exec, throwScope, error);
    return nullptr;
};

then do:

if (!importModuleValue.isObject())
    return throw(createTypeError(exec, ASCIILiteral(&quot;import must be an object&quot;), defaultSourceAppender, runtimeTypeForValue(importModuleValue)));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283933</commentid>
    <comment_count>8</comment_count>
      <attachid>303464</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-06 14:04:33 -0800</bug_when>
    <thetext>Comment on attachment 303464
patch

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

&gt; Source/JavaScriptCore/wasm/JSWebAssembly.cpp:102
&gt; +        module = WebAssemblyModuleConstructor::createModule(exec, firstArgument, exec-&gt;lexicalGlobalObject()-&gt;WebAssemblyModuleStructure());

I think we should pass the mode here if we are given a memory import.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283958</commentid>
    <comment_count>9</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-06 14:24:20 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 303464 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=303464&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/wasm/JSWebAssembly.cpp:102
&gt; &gt; +        module = WebAssemblyModuleConstructor::createModule(exec, firstArgument, exec-&gt;lexicalGlobalObject()-&gt;WebAssemblyModuleStructure());
&gt; 
&gt; I think we should pass the mode here if we are given a memory import.

We should do this in a follow up since it&apos;s non trivial. I filed:
https://bugs.webkit.org/show_bug.cgi?id=169218</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283959</commentid>
    <comment_count>10</comment_count>
      <attachid>303464</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-06 14:24:59 -0800</bug_when>
    <thetext>Comment on attachment 303464
patch

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

&gt;&gt; Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:117
&gt;&gt; +            return nullptr;
&gt; 
&gt; you could make a lambda like
&gt; 
&gt; auto throw = [&amp;] (Error* error) {
&gt;     throwException(exec, throwScope, error);
&gt;     return nullptr;
&gt; };
&gt; 
&gt; then do:
&gt; 
&gt; if (!importModuleValue.isObject())
&gt;     return throw(createTypeError(exec, ASCIILiteral(&quot;import must be an object&quot;), defaultSourceAppender, runtimeTypeForValue(importModuleValue)));

Sounds good. Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284229</commentid>
    <comment_count>11</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-06 23:39:42 -0800</bug_when>
    <thetext>landed in:
https://trac.webkit.org/changeset/213506</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303376</attachid>
            <date>2017-03-03 18:47:51 -0800</date>
            <delta_ts>2017-03-05 12:01:35 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>27664</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMTMzNzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyMyw3ICsxMDIzLDcgQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZW9wdGltaXphdGlvblJldHJ5Q291bnQoRXhl
Y1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblRy
YW5zZmVyQXJyYXlCdWZmZXIoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkZhaWxOZXh0TmV3Q29kZUJsb2NrKEV4ZWNTdGF0ZSopOwotc3Rh
dGljIE5PX1JFVFVSTl9XSVRIX1ZBTFVFIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25RdWl0KEV4ZWNTdGF0ZSopOworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25RdWl0KEV4ZWNTdGF0ZSopOwogc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JB
U0ggRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkFib3J0KEV4ZWNTdGF0ZSop
Owogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GYWxzZTEoRXhl
Y1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZh
bHNlMihFeGVjU3RhdGUqKTsKQEAgLTI3MjIsNiArMjcyMiw4IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25GYWkKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvblF1aXQoRXhlY1N0YXRlKikKIHsKKyAgICBkYXRhTG9nTG4oIkV4aXRpbmchIik7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBqc2NFeGl0KEVY
SVRfU1VDQ0VTUyk7CiAKICNpZiBDT01QSUxFUihNU1ZDKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAJKHJldmlzaW9uIDIxMzM3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
UHJvbWlzZURlZmVycmVkLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUhlbHBlcnMuaCIKKyNp
bmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIldhc21QbGFuLmgiCiAjaW5j
bHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oIgogCkBAIC00Miw2ICs0Myw3IEBA
IFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRSgKIAogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyhFeGVjU3RhdGUqKTsKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlDb21waWxlRnVuYyhFeGVjU3Rh
dGUqKTsKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlJbnN0YW50aWF0
ZUZ1bmMoRXhlY1N0YXRlKik7CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNz
ZW1ibHlDb21waWxlRnVuYyhFeGVjU3RhdGUqIGV4ZWMpCiB7CkBAIC02NCw2ICs2Niw0NyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShwcm9taXNlLT5wcm9taXNlKCkpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHdlYkFzc2VtYmx5SW5zdGFudGlhdGVGdW5jKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gY2F0Y2hTY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOworCisgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UgPSBKU1By
b21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihjYXRjaFNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KworICAgIC8vIEZJWE1FOiBzdXBwb3J0IHRoZSBub24gYXJyYXkgYnVmZmVyIG92ZXJmbG9hZCBv
ZiB0aGlzLgorICAgIEpTVmFsdWUgbW9kdWxlID0gV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rv
cjo6Y3JlYXRlTW9kdWxlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNz
ZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSk7CisgICAgaWYgKEV4Y2VwdGlvbiogZXhjZXB0aW9uID0g
Y2F0Y2hTY29wZS5leGNlcHRpb24oKSkgeworICAgICAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CisgICAgICAgIHByb21pc2UtPnJlamVjdChleGVjLCBleGNlcHRpb24tPnZhbHVlKCkp
OworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb21pc2UtPnByb21pc2UoKSk7Cisg
ICAgfQorCisKKyAgICBKU1ZhbHVlIGltcG9ydEFyZ3VtZW50ID0gZXhlYy0+YXJndW1lbnQoMSk7
CisgICAgSlNPYmplY3QqIGltcG9ydE9iamVjdCA9IGltcG9ydEFyZ3VtZW50LmdldE9iamVjdCgp
OworICAgIGlmICghaW1wb3J0QXJndW1lbnQuaXNVbmRlZmluZWQoKSAmJiAhaW1wb3J0T2JqZWN0
KSB7CisgICAgICAgIHByb21pc2UtPnJlamVjdChleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywK
KyAgICAgICAgICAgIEFTQ0lJTGl0ZXJhbCgic2Vjb25kIGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5
Lmluc3RhbnRpYXRlIG11c3QgYmUgdW5kZWZpbmVkIG9yIGFuIE9iamVjdCIpLCBkZWZhdWx0U291
cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0QXJndW1lbnQpKSk7CisgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocHJvbWlzZS0+cHJvbWlzZSgpKTsKKyAgICB9CisK
KyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gV2ViQXNzZW1ibHlJbnN0YW5j
ZUNvbnN0cnVjdG9yOjpjcmVhdGVJbnN0YW5jZShleGVjLCBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1v
ZHVsZSo+KG1vZHVsZSksIGltcG9ydE9iamVjdCk7CisgICAgaWYgKEV4Y2VwdGlvbiogZXhjZXB0
aW9uID0gY2F0Y2hTY29wZS5leGNlcHRpb24oKSkgeworICAgICAgICBjYXRjaFNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CisgICAgICAgIHByb21pc2UtPnJlamVjdChleGVjLCBleGNlcHRpb24tPnZh
bHVlKCkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb21pc2UtPnByb21pc2Uo
KSk7CisgICAgfQorCisgICAgZGF0YUxvZ0xuKCJDcmVhdGluZyBpbnN0YW5jZS9tb2R1bGUgcHJv
bWlzZSEiKTsKKyAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhl
Yyk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCBBU0NJSUxpdGVyYWwoIm1vZHVsZSIpKSwgbW9kdWxlKTsKKyAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgiaW5zdGFuY2Ui
KSksIGluc3RhbmNlKTsKKyAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIHJlc3VsdCk7CisKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb21pc2UtPnByb21pc2UoKSk7Cit9CisKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlWYWxpZGF0ZUZ1bmMoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkBAIC05OSw2ICsxNDIsNyBAQCB2
b2lkIEpTV2ViQXNzZW1ibHk6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgQVNTRVJUKGluaGVy
aXRzKHZtLCBpbmZvKCkpKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJ
VElPTigidmFsaWRhdGUiLCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYywgRG9udEVudW0sIDEpOwog
ICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKCJjb21waWxlIiwgd2Vi
QXNzZW1ibHlDb21waWxlRnVuYywgRG9udEVudW0sIDEpOworICAgIEpTQ19OQVRJVkVfRlVOQ1RJ
T05fV0lUSE9VVF9UUkFOU0lUSU9OKCJpbnN0YW50aWF0ZSIsIHdlYkFzc2VtYmx5SW5zdGFudGlh
dGVGdW5jLCBEb250RW51bSwgMSk7CiB9CiAKIEpTV2ViQXNzZW1ibHk6OkpTV2ViQXNzZW1ibHko
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Gb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRm9ybWF0LmgJKHJldmlzaW9uIDIxMzM3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Gb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDcgKzE4OSwxMSBA
QCBzdHJ1Y3QgU2VnbWVudCB7CiB9OwogCiBzdHJ1Y3QgRWxlbWVudCB7Ci0gICAgdWludDMyX3Qg
b2Zmc2V0OworICAgIEVsZW1lbnQoSTMySW5pdEV4cHIgb2Zmc2V0KQorICAgICAgICA6IG9mZnNl
dChvZmZzZXQpCisgICAgeyB9CisKKyAgICBJMzJJbml0RXhwciBvZmZzZXQ7CiAgICAgVmVjdG9y
PHVpbnQzMl90PiBmdW5jdGlvbkluZGljZXM7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAkocmV2aXNpb24gMjEzMzc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzMSwxOSArNDMxLDIwIEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUVs
ZW1lbnQoKSAtPiBQYXIKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jlc3VsdC5tb2R1bGUt
PmVsZW1lbnRzLnRyeVJlc2VydmVDYXBhY2l0eShlbGVtZW50Q291bnQpLCAiY2FuJ3QgYWxsb2Nh
dGUgbWVtb3J5IGZvciAiLCBlbGVtZW50Q291bnQsICIgRWxlbWVudHMiKTsKICAgICBmb3IgKHVu
c2lnbmVkIGVsZW1lbnROdW0gPSAwOyBlbGVtZW50TnVtIDwgZWxlbWVudENvdW50OyArK2VsZW1l
bnROdW0pIHsKICAgICAgICAgdWludDMyX3QgdGFibGVJbmRleDsKLSAgICAgICAgdWludDY0X3Qg
b2Zmc2V0OworICAgICAgICB1aW50NjRfdCBpbml0RXhwckJpdHM7CiAgICAgICAgIHVpbnQ4X3Qg
aW5pdE9wY29kZTsKICAgICAgICAgdWludDMyX3QgaW5kZXhDb3VudDsKIAogICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0YWJsZUluZGV4KSwgImNhbid0IGdldCAi
LCBlbGVtZW50TnVtLCAidGggRWxlbWVudCB0YWJsZSBpbmRleCIpOwogICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKHRhYmxlSW5kZXgsICJFbGVtZW50IHNlY3Rpb24gY2FuIG9ubHkgaGF2ZSBv
bmUgVGFibGUgZm9yIG5vdyIpOwogICAgICAgICBUeXBlIGluaXRFeHByVHlwZTsKLSAgICAgICAg
V0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIG9mZnNl
dCwgaW5pdEV4cHJUeXBlKSk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5pdE9wY29k
ZSAhPSBPcFR5cGU6OkkzMkNvbnN0LCAiRWxlbWVudCBzZWN0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBu
b24taTMyIGluaXRfZXhwciBvcGNvZGUgZm9yIG5vdywgZ290ICIsIGluaXRPcGNvZGUpOworICAg
ICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlSW5pdEV4cHIoaW5pdE9wY29kZSwg
aW5pdEV4cHJCaXRzLCBpbml0RXhwclR5cGUpKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
Rihpbml0RXhwclR5cGUgIT0gSTMyLCBlbGVtZW50TnVtLCAidGggRWxlbWVudCBpbml0X2V4cHIg
bXVzdCBwcm9kdWNlIGFuIGkzMiIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhclVJbnQzMihpbmRleENvdW50KSwgImNhbid0IGdldCAiLCBlbGVtZW50TnVtLCAidGggaW5k
ZXggY291bnQgZm9yIEVsZW1lbnQgc2VjdGlvbiIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKGluZGV4Q291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAi
RWxlbWVudCBzZWN0aW9uJ3MgIiwgZWxlbWVudE51bSwgInRoIGluZGV4IGNvdW50IGlzIHRvbyBi
aWcgIiwgaW5kZXhDb3VudCk7CiAKICAgICAgICAgQVNTRVJUKCEhbV9yZXN1bHQubW9kdWxlLT50
YWJsZUluZm9ybWF0aW9uKTsKKyAgICAgICAgLyoKICAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8
dWludDMyX3Q+IG1heGltdW0gPSBtX3Jlc3VsdC5tb2R1bGUtPnRhYmxlSW5mb3JtYXRpb24ubWF4
aW11bSgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIGluZGV4Q291bnQgYmVpbmcg
emVybyBiZSBhIHZhbGlkYXRpb24gZXJyb3I/CiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1ODI2CkBAIC00NTUsMTIgKzQ1NiwxMSBAQCBh
dXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KCkgLT4gUGFyCiAgICAgICAgICAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihsYXN0V3JpdHRlbkluZGV4ID49IHN0YXRpY19jYXN0PHVpbnQ2
NF90PigqbWF4aW11bSksICJFbGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVtLCAidGggZWxl
bWVudCB3cml0ZXMgdG8gaW5kZXggIiwgbGFzdFdyaXR0ZW5JbmRleCwgIiB3aGljaCBleGNlZWRz
IHRoZSBtYXhpbXVtICIsICptYXhpbXVtKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAg
ICAgICAqLwogCi0gICAgICAgIEVsZW1lbnQgZWxlbWVudDsKKyAgICAgICAgRWxlbWVudCBlbGVt
ZW50IHsgbWFrZUkzMkluaXRFeHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cykgfTsKICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighZWxlbWVudC5mdW5jdGlvbkluZGljZXMudHJ5UmVzZXJ2
ZUNhcGFjaXR5KGluZGV4Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCBpbmRl
eENvdW50LCAiIEVsZW1lbnQgaW5kaWNlcyIpOwogCi0gICAgICAgIGVsZW1lbnQub2Zmc2V0ID0g
b2Zmc2V0OwotCiAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGluZGV4
Q291bnQ7ICsraW5kZXgpIHsKICAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CiAg
ICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvbklu
ZGV4KSwgImNhbid0IGdldCBFbGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVtLCAidGggZWxl
bWVudCdzICIsIGluZGV4LCAidGggaW5kZXgiKTsKQEAgLTUzNiwxMiArNTM2LDEzIEBAIGF1dG8g
TW9kdWxlUGFyc2VyOjpwYXJzZUluaXRFeHByKHVpbnQ4X3QKICAgICBjYXNlIEdldEdsb2JhbDog
ewogICAgICAgICB1aW50MzJfdCBpbmRleDsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYXJVSW50MzIoaW5kZXgpLCAiY2FuJ3QgZ2V0IGdldF9nbG9iYWwncyBpbmRleCIpOwot
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1fcmVzdWx0Lm1vZHVsZS0+aW1w
b3J0cy5zaXplKCksICJnZXRfZ2xvYmFsJ3MgaW5kZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUg
bnVtYmVyIG9mIGltcG9ydHMgIiwgbV9yZXN1bHQubW9kdWxlLT5pbXBvcnRzLnNpemUoKSk7Ci0g
ICAgICAgIGNvbnN0IEltcG9ydCYgaW1wb3J0ID0gbV9yZXN1bHQubW9kdWxlLT5pbXBvcnRzW2lu
ZGV4XTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX3Jlc3VsdC5tb2R1bGUtPmltcG9y
dHNbaW5kZXhdLmtpbmQgIT0gRXh0ZXJuYWxLaW5kOjpHbG9iYWwsICJnZXRfZ2xvYmFsJ3MgaW1w
b3J0IGtpbmQgaXMgIiwgbV9yZXN1bHQubW9kdWxlLT5pbXBvcnRzW2luZGV4XS5raW5kLCAiIHNo
b3VsZCBiZSBnbG9iYWwiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbXBvcnQua2lu
ZEluZGV4ID49IG1fcmVzdWx0Lm1vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCwgImdldF9nbG9i
YWwgaW1wb3J0IGtpbmQgaW5kZXggIiwgaW1wb3J0LmtpbmRJbmRleCwgIiBleGNlZWRzIHRoZSBm
aXJzdCBpbnRlcm5hbCBnbG9iYWwgIiwgbV9yZXN1bHQubW9kdWxlLT5maXJzdEludGVybmFsR2xv
YmFsKTsKKyAgICAgICAgLy9XQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1fcmVzdWx0Lm1v
ZHVsZS0+aW1wb3J0cy5zaXplKCksICJnZXRfZ2xvYmFsJ3MgaW5kZXggIiwgaW5kZXgsICIgZXhj
ZWVkcyB0aGUgbnVtYmVyIG9mIGltcG9ydHMgIiwgbV9yZXN1bHQubW9kdWxlLT5pbXBvcnRzLnNp
emUoKSk7CisgICAgICAgIC8vY29uc3QgSW1wb3J0JiBpbXBvcnQgPSBtX3Jlc3VsdC5tb2R1bGUt
PmltcG9ydHNbaW5kZXhdOworICAgICAgICAvL1dBU01fUEFSU0VSX0ZBSUxfSUYobV9yZXN1bHQu
bW9kdWxlLT5pbXBvcnRzW2luZGV4XS5raW5kICE9IEV4dGVybmFsS2luZDo6R2xvYmFsLCAiZ2V0
X2dsb2JhbCdzIGltcG9ydCBraW5kIGlzICIsIG1fcmVzdWx0Lm1vZHVsZS0+aW1wb3J0c1tpbmRl
eF0ua2luZCwgIiBzaG91bGQgYmUgZ2xvYmFsIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoaW5kZXggPj0gbV9yZXN1bHQubW9kdWxlLT5nbG9iYWxzLnNpemUoKSwgImdldF9nbG9iYWwn
cyBpbmRleCAiLCBpbmRleCwgIiBleGNlZWRzIHRoZSBudW1iZXIgb2YgaW1wb3J0cyAiLCBtX3Jl
c3VsdC5tb2R1bGUtPmdsb2JhbHMuc2l6ZSgpKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihpbmRleCA+PSBtX3Jlc3VsdC5tb2R1bGUtPmZpcnN0SW50ZXJuYWxHbG9iYWwsICJnZXRfZ2xv
YmFsIGltcG9ydCBraW5kIGluZGV4ICIsIGluZGV4LCAiIGV4Y2VlZHMgdGhlIGZpcnN0IGludGVy
bmFsIGdsb2JhbCAiLCBtX3Jlc3VsdC5tb2R1bGUtPmZpcnN0SW50ZXJuYWxHbG9iYWwpOwogCi0g
ICAgICAgIEFTU0VSVChtX3Jlc3VsdC5tb2R1bGUtPmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0u
bXV0YWJpbGl0eSA9PSBHbG9iYWw6OkltbXV0YWJsZSk7CisgICAgICAgIEFTU0VSVChtX3Jlc3Vs
dC5tb2R1bGUtPmdsb2JhbHNbaW5kZXhdLm11dGFiaWxpdHkgPT0gR2xvYmFsOjpJbW11dGFibGUp
OwogICAgICAgICByZXN1bHRUeXBlID0gbV9yZXN1bHQubW9kdWxlLT5nbG9iYWxzW2luZGV4XS50
eXBlOwogICAgICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBpbmRleDsKICAgICAgICAgYnJlYWs7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjEzMzc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDYgKzQ4LDcgQEAgY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5RnVuY3Rpb246OnNfaQogCiBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlGdW5jdGlv
bihFeGVjU3RhdGUqIGV4ZWMpCiB7CisKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBXZWJBc3NlbWJseUZ1bmN0
aW9uKiB3YXNtRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPih2
bSwgZXhlYy0+anNDYWxsZWUoKSk7CkBAIC0xMTgsNiArMTE5LDcgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogcHJl
dkpTV2ViQXNzZW1ibHlJbnN0YW5jZSA9IHZtLnRvcEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsKICAg
ICB2bS50b3BKU1dlYkFzc2VtYmx5SW5zdGFuY2UgPSB3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCk7
CiAgICAgQVNTRVJUKHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKSk7CisgICAgZGF0YUxvZ0xuKCJD
YWxsaW5nIHdhc20gZnVuY3Rpb24hIik7CiAgICAgRW5jb2RlZEpTVmFsdWUgcmF3UmVzdWx0ID0g
dm1FbnRyeVRvV2FzbSh3YXNtRnVuY3Rpb24tPmpzRW50cnlwb2ludCgpLCAmdm0sICZwcm90b0Nh
bGxGcmFtZSk7CiAgICAgdm0udG9wSlNXZWJBc3NlbWJseUluc3RhbmNlID0gcHJldkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTMzNzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywzMyArNTcsNDUgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogewogICAgIGF1dG8mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRv
KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAKICAgICAvLyBJ
ZiBtb2R1bGVPYmplY3QgaXMgbm90IGEgV2ViQXNzZW1ibHkuTW9kdWxlIGluc3RhbmNlLCBhIFR5
cGVFcnJvciBpcyB0aHJvd24uCiAgICAgSlNXZWJBc3NlbWJseU1vZHVsZSoganNNb2R1bGUgPSBq
c0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPih2bSwgZXhlYy0+YXJndW1lbnQoMCkp
OwogICAgIGlmICghanNNb2R1bGUpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhy
b3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJ
TGl0ZXJhbCgiZmlyc3QgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSBh
IFdlYkFzc2VtYmx5Lk1vZHVsZSIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBl
Rm9yVmFsdWUoZXhlYy0+YXJndW1lbnQoMCkpKSkpOwotICAgIGNvbnN0IFdhc206Ok1vZHVsZUlu
Zm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9IGpzTW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlv
bigpOwogCiAgICAgLy8gSWYgdGhlIGltcG9ydE9iamVjdCBwYXJhbWV0ZXIgaXMgbm90IHVuZGVm
aW5lZCBhbmQgVHlwZShpbXBvcnRPYmplY3QpIGlzIG5vdCBPYmplY3QsIGEgVHlwZUVycm9yIGlz
IHRocm93bi4KICAgICBKU1ZhbHVlIGltcG9ydEFyZ3VtZW50ID0gZXhlYy0+YXJndW1lbnQoMSk7
CiAgICAgSlNPYmplY3QqIGltcG9ydE9iamVjdCA9IGltcG9ydEFyZ3VtZW50LmdldE9iamVjdCgp
OwogICAgIGlmICghaW1wb3J0QXJndW1lbnQuaXNVbmRlZmluZWQoKSAmJiAhaW1wb3J0T2JqZWN0
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRo
cm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoInNlY29uZCBhcmd1
bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIHVuZGVmaW5lZCBvciBhbiBPYmpl
Y3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydEFy
Z3VtZW50KSkpKTsKKyAgICAKKyAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlSW5z
dGFuY2UoZXhlYywganNNb2R1bGUsIGltcG9ydE9iamVjdCkpOworfQorCitKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqIFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlSW5zdGFuY2Uo
RXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBqc01vZHVsZSwgSlNPYmplY3Qq
IGltcG9ydE9iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogZ2xvYmFsT2Jq
ZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworCisgICAgY29uc3QgV2FzbTo6TW9k
dWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0ganNNb2R1bGUtPm1vZHVsZUluZm9y
bWF0aW9uKCk7CiAKICAgICAvLyBJZiB0aGUgbGlzdCBvZiBtb2R1bGUuaW1wb3J0cyBpcyBub3Qg
ZW1wdHkgYW5kIFR5cGUoaW1wb3J0T2JqZWN0KSBpcyBub3QgT2JqZWN0LCBhIFR5cGVFcnJvciBp
cyB0aHJvd24uCi0gICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydHMuc2l6ZSgpICYmICFp
bXBvcnRPYmplY3QpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRp
b24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgi
c2Vjb25kIGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgT2JqZWN0IGJl
Y2F1c2UgdGhlIFdlYkFzc2VtYmx5Lk1vZHVsZSBoYXMgaW1wb3J0cyIpLCBkZWZhdWx0U291cmNl
QXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0QXJndW1lbnQpKSkpOworICAgIGlm
IChtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRzLnNpemUoKSAmJiAhaW1wb3J0T2JqZWN0KSB7Cisg
ICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCBBU0NJSUxpdGVyYWwoImNhbid0IG1ha2UgV2ViQXNzZW1ibHkuSW5zdGFuY2UgYmVjYXVz
ZSB0aGVyZSBpcyBubyBpbXBvcnRzIE9iamVjdCBhbmQgdGhlIFdlYkFzc2VtYmx5Lk1vZHVsZSBy
ZXF1aXJlcyBpbXBvcnRzIikpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQogCiAg
ICAgSWRlbnRpZmllciBtb2R1bGVLZXkgPSBJZGVudGlmaWVyOjpmcm9tVWlkKFByaXZhdGVOYW1l
KFByaXZhdGVOYW1lOjpEZXNjcmlwdGlvbiwgIldlYkFzc2VtYmx5SW5zdGFuY2UiKSk7CiAgICAg
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCA9IFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpjcmVhdGUoZXhlYywgdm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmRTdHJ1Y3R1cmUoKSwgbW9kdWxlS2V5LCBtb2R1bGVJbmZvcm1hdGlvbik7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogCiAgICAgU3RydWN0dXJlKiBp
bnN0YW5jZVN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0
dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPldlYkFzc2VtYmx5SW5z
dGFuY2VTdHJ1Y3R1cmUoKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51
bGxwdHIpOwogCiAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBpbnN0YW5jZVN0cnVjdHVyZSwganNNb2R1bGUsIG1v
ZHVsZVJlY29yZC0+Z2V0TW9kdWxlTmFtZXNwYWNlKGV4ZWMpKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CiAgICAgewogICAgICAgICAvLyBBbHdheXMgc3Rh
cnQgd2l0aCBhIGR1bW15IE1lbW9yeSwgc28gdGhhdCB3YXNtIC0+IHdhc20gdGh1bmtzIGF2b2lk
IGNoZWNraW5nIGZvciBhIG51bGxwdHIgTWVtb3J5IHdoZW4gdHJ5aW5nIHRvIHNldCBwaW5uZWQg
cmVnaXN0ZXJzLgogICAgICAgICBXYXNtOjpNZW1vcnkgbWVtb3J5OwpAQCAtMTAxLDMwICsxMTMs
MzYgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgIGZvciAo
YXV0byYgaW1wb3J0IDogbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0cykgewogICAgICAgICAvLyAx
LiBMZXQgbyBiZSB0aGUgcmVzdWx0YW50IHZhbHVlIG9mIHBlcmZvcm1pbmcgR2V0KGltcG9ydE9i
amVjdCwgaS5tb2R1bGVfbmFtZSkuCiAgICAgICAgIEpTVmFsdWUgaW1wb3J0TW9kdWxlVmFsdWUg
PSBpbXBvcnRPYmplY3QtPmdldChleGVjLCBpbXBvcnQubW9kdWxlKTsKLSAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKICAgICAgICAgLy8gMi4gSWYg
VHlwZShvKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgaWYgKCFp
bXBvcnRNb2R1bGVWYWx1ZS5pc09iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3Io
ZXhlYywgQVNDSUlMaXRlcmFsKCJpbXBvcnQgbXVzdCBiZSBhbiBvYmplY3QiKSwgZGVmYXVsdFNv
dXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydE1vZHVsZVZhbHVlKSkpKTsK
KyAgICAgICAgaWYgKCFpbXBvcnRNb2R1bGVWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
QVNDSUlMaXRlcmFsKCJpbXBvcnQgbXVzdCBiZSBhbiBvYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFw
cGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydE1vZHVsZVZhbHVlKSkpOworICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KIAogICAgICAgICAvLyAzLiBMZXQgdiBi
ZSB0aGUgdmFsdWUgb2YgcGVyZm9ybWluZyBHZXQobywgaS5pdGVtX25hbWUpCiAgICAgICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihpbXBvcnRNb2R1bGVWYWx1ZSk7CiAg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBpbXBvcnQuZmllbGQpOwot
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogCiAg
ICAgICAgIHN3aXRjaCAoaW1wb3J0LmtpbmQpIHsKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5h
bEtpbmQ6OkZ1bmN0aW9uOiB7CiAgICAgICAgICAgICAvLyA0LiBJZiBpIGlzIGEgZnVuY3Rpb24g
aW1wb3J0OgogICAgICAgICAgICAgLy8gaS4gSWYgSXNDYWxsYWJsZSh2KSBpcyBmYWxzZSwgdGhy
b3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCi0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzRnVu
Y3Rpb24oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhl
Yywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0IGZ1bmN0aW9uIG11c3QgYmUgY2FsbGFibGUiKSkp
KTsKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7CisgICAgICAgICAgICAg
ICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxp
bmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnQgZnVuY3Rpb24gbXVzdCBiZSBj
YWxsYWJsZSIpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKICAgICAgICAg
ICAgIC8vIGlpLiBJZiB2IGlzIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3Q6CiAg
ICAgICAgICAgICBpZiAoV2ViQXNzZW1ibHlGdW5jdGlvbiogaW1wb3J0ZWRFeHBvcnQgPSBqc0R5
bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPih2bSwgY2VsbCkpIHsKICAgICAgICAgICAg
ICAgICAvLyBhLiBJZiB0aGUgc2lnbmF0dXJlIG9mIHYgZG9lcyBub3QgbWF0Y2ggdGhlIHNpZ25h
dHVyZSBvZiBpLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KICAgICAgICAgICAgICAg
ICBXYXNtOjpTaWduYXR1cmVJbmRleCBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0gaW1wb3J0ZWRF
eHBvcnQtPnNpZ25hdHVyZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJl
SW5kZXggZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1
bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tpbXBvcnQua2luZEluZGV4XTsKLSAgICAgICAgICAgICAg
ICBpZiAoaW1wb3J0ZWRTaWduYXR1cmVJbmRleCAhPSBleHBlY3RlZFNpZ25hdHVyZUluZGV4KQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9u
KGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0s
IEFTQ0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZnVuY3Rpb24ncyBzaWduYXR1cmUgZG9lc24ndCBtYXRj
aCB0aGUgcHJvdmlkZWQgV2ViQXNzZW1ibHkgZnVuY3Rpb24ncyBzaWduYXR1cmUiKSkpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoaW1wb3J0ZWRTaWduYXR1cmVJbmRleCAhPSBleHBlY3RlZFNpZ25h
dHVyZUluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRo
cm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0
ZXJhbCgiaW1wb3J0ZWQgZnVuY3Rpb24ncyBzaWduYXR1cmUgZG9lc24ndCBtYXRjaCB0aGUgcHJv
dmlkZWQgV2ViQXNzZW1ibHkgZnVuY3Rpb24ncyBzaWduYXR1cmUiKSkpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgLy8gYi4gTGV0IGNsb3N1cmUgYmUgdi5bW0Nsb3N1cmVdXS4KICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIC8vIGlpaS4gT3RoZXJ3aXNlOgpAQCAtMTQyLDIzICsxNjAsMjcgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICAgICAgaGFzVGFibGVJ
bXBvcnQgPSB0cnVlOwogICAgICAgICAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IGpz
RHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4odm0sIHZhbHVlKTsKICAgICAgICAgICAg
IC8vIGkuIElmIHYgaXMgbm90IGEgV2ViQXNzZW1ibHkuVGFibGUgb2JqZWN0LCB0aHJvdyBhIFdl
YkFzc2VtYmx5LkxpbmtFcnJvci4KLSAgICAgICAgICAgIGlmICghdGFibGUpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Nj
b3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwo
IlRhYmxlIGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFibGUiKSkp
KTsKKyAgICAgICAgICAgIGlmICghdGFibGUpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0V4Y2Vw
dGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMs
IHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2Vi
QXNzZW1ibHkuVGFibGUiKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICB1aW50MzJfdCBleHBlY3RlZEluaXRpYWwgPSBtb2R1
bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmluaXRpYWwoKTsKICAgICAgICAgICAgIHVp
bnQzMl90IGFjdHVhbEluaXRpYWwgPSB0YWJsZS0+c2l6ZSgpOwotICAgICAgICAgICAgaWYgKGFj
dHVhbEluaXRpYWwgPCBleHBlY3RlZEluaXRpYWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dl
YkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBw
cm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0b28gc21hbGwiKSkpKTsKKyAgICAgICAgICAg
IGlmIChhY3R1YWxJbml0aWFsIDwgZXhwZWN0ZWRJbml0aWFsKSB7CisgICAgICAgICAgICAgICAg
dGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtF
cnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJUYWJsZSBpbXBvcnQgcHJvdmlkZWQgYW4gJ2lu
aXRpYWwnIHRoYXQgaXMgdG9vIHNtYWxsIikpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWlu
dDMyX3Q+IGV4cGVjdGVkTWF4aW11bSA9IG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRp
b24ubWF4aW11bSgpKSB7CiAgICAgICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4g
YWN0dWFsTWF4aW11bSA9IHRhYmxlLT5tYXhpbXVtKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFh
Y3R1YWxNYXhpbXVtKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Nj
b3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwo
IlRhYmxlIGltcG9ydCBkb2VzIG5vdCBoYXZlIGEgJ21heGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJl
cXVpcmVzIHRoYXQgaXQgZG9lcyIpKSkpOworICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2Vw
dGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMs
IHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBkb2VzIG5vdCBoYXZlIGEgJ21heGltdW0n
IGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVzIHRoYXQgaXQgZG9lcyIpKSk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBpZiAoKmFjdHVhbE1heGltdW0gPiAqZXhwZWN0ZWRNYXhpbXVtKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vy
cm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIkltcG9ydGVkIFRhYmxlJ3MgJ21heGltdW0nIGlz
IGxhcmdlciB0aGFuIHRoZSBtb2R1bGUncyBleHBlY3RlZCAnbWF4aW11bSciKSkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNX
ZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJJbXBvcnRlZCBUYWJs
ZSdzICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGlt
dW0nIikpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC0xNzQsMjQgKzE5NiwyOCBAQCBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgICAgICBoYXNNZW1vcnlJbXBv
cnQgPSB0cnVlOwogICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5ID0ganNE
eW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TWVtb3J5Kj4odm0sIHZhbHVlKTsKICAgICAgICAgICAg
IC8vIGkuIElmIHYgaXMgbm90IGEgV2ViQXNzZW1ibHkuTWVtb3J5IG9iamVjdCwgdGhyb3cgYSBX
ZWJBc3NlbWJseS5MaW5rRXJyb3IuCi0gICAgICAgICAgICBpZiAoIW1lbW9yeSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93
U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJh
bCgiTWVtb3J5IGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuTWVtb3J5
IikpKSk7CisgICAgICAgICAgICBpZiAoIW1lbW9yeSkgeworICAgICAgICAgICAgICAgIHRocm93
RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3Io
ZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ug
b2YgV2ViQXNzZW1ibHkuTWVtb3J5IikpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGV4cGVjdGVk
SW5pdGlhbCA9IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCk7CiAgICAgICAgICAg
ICBXYXNtOjpQYWdlQ291bnQgYWN0dWFsSW5pdGlhbCA9IG1lbW9yeS0+bWVtb3J5KCktPmluaXRp
YWwoKTsKLSAgICAgICAgICAgIGlmIChhY3R1YWxJbml0aWFsIDwgZXhwZWN0ZWRJbml0aWFsKQot
ICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhl
YywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVND
SUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRv
byBzbWFsbCIpKSkpOworICAgICAgICAgICAgaWYgKGFjdHVhbEluaXRpYWwgPCBleHBlY3RlZElu
aXRpYWwpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3Bl
LCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1l
bW9yeSBpbXBvcnQgcHJvdmlkZWQgYW4gJ2luaXRpYWwnIHRoYXQgaXMgdG9vIHNtYWxsIikpKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgaWYgKFdhc206OlBhZ2VDb3VudCBleHBlY3RlZE1heGltdW0gPSBtb2R1bGVJbmZvcm1h
dGlvbi5tZW1vcnkubWF4aW11bSgpKSB7CiAgICAgICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50
IGFjdHVhbE1heGltdW0gPSBtZW1vcnktPm1lbW9yeSgpLT5tYXhpbXVtKCk7CiAgICAgICAgICAg
ICAgICAgaWYgKCFhY3R1YWxNYXhpbXVtKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihl
eGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBB
U0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgZGlkIG5vdCBoYXZlIGEgJ21heGltdW0nIGJ1dCB0
aGUgbW9kdWxlIHJlcXVpcmVzIHRoYXQgaXQgZG9lcyIpKSkpOworICAgICAgICAgICAgICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlu
a0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgZGlkIG5vdCBoYXZl
IGEgJ21heGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVzIHRoYXQgaXQgZG9lcyIpKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgICAgIGlmIChhY3R1YWxNYXhpbXVtID4gZXhwZWN0ZWRNYXhpbXVtKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoCi0gICAgICAgICAgICAg
ICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFz
c2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnRzICdt
YXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGltdW0nIikp
KSk7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUs
IGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVt
b3J5IGltcG9ydHMgJ21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1bGUncyBleHBlY3Rl
ZCAnbWF4aW11bSciKSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBpaS4gQXBwZW5k
IHYgdG8gbWVtb3JpZXMuCkBAIC0yMDQsMTAgKzIzMCwxNCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgICAgICAvLyBpLiBJZiBpIGlzIG5vdCBhbiBp
bW11dGFibGUgZ2xvYmFsLCB0aHJvdyBhIFR5cGVFcnJvci4KICAgICAgICAgICAgIEFTU0VSVCht
b2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLm11dGFiaWxpdHkgPT0g
V2FzbTo6R2xvYmFsOjpJbW11dGFibGUpOwogICAgICAgICAgICAgLy8gaWkuIElmIHRoZSBnbG9i
YWxfdHlwZSBvZiBpIGlzIGk2NCBvciBUeXBlKHYpIGlzIG5vdCBOdW1iZXIsIHRocm93IGEgV2Vi
QXNzZW1ibHkuTGlua0Vycm9yLgotICAgICAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLmds
b2JhbHNbaW1wb3J0LmtpbmRJbmRleF0udHlwZSA9PSBXYXNtOjpJNjQpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3Bl
LCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImlt
cG9ydGVkIGdsb2JhbCBjYW5ub3QgYmUgYW4gaTY0IikpKSk7Ci0gICAgICAgICAgICBpZiAoIXZh
bHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vy
cm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydGVkIGdsb2JhbCBtdXN0IGJlIGEgbnVt
YmVyIikpKSk7CisgICAgICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBv
cnQua2luZEluZGV4XS50eXBlID09IFdhc206Okk2NCkgeworICAgICAgICAgICAgICAgIHRocm93
RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3Io
ZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZ2xvYmFsIGNhbm5vdCBiZSBhbiBpNjQi
KSkpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dF
eGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihl
eGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBnbG9iYWwgbXVzdCBiZSBhIG51bWJlciIp
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAvLyBpaWkuIEFwcGVuZCBUb1dlYkFzc2VtYmx5VmFsdWUodikgdG8gaW1wb3J0cy4K
ICAgICAgICAgICAgIHN3aXRjaCAobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQua2lu
ZEluZGV4XS50eXBlKSB7CiAgICAgICAgICAgICBjYXNlIFdhc206OkkzMjoKQEAgLTIzOSw4ICsy
NjksMTAgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAg
ICAgICAgLy8gV2UgY3JlYXRlIGEgbWVtb3J5IHdoZW4gaXQncyBhIG1lbW9yeSBkZWZpbml0aW9u
LgogICAgICAgICAgICAgYm9vbCBmYWlsZWQ7CiAgICAgICAgICAgICBXYXNtOjpNZW1vcnkgbWVt
b3J5KG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9u
Lm1lbW9yeS5tYXhpbXVtKCksIGZhaWxlZCk7Ci0gICAgICAgICAgICBpZiAoZmFpbGVkKQotICAg
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywg
dGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSkpOworICAgICAgICAgICAg
aWYgKGZhaWxlZCkgeworICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93
U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpOworICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICAgICAgfQogICAgICAgICAgICAgaW5zdGFuY2UtPnNldE1l
bW9yeSh2bSwKICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSh2bSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgp
LCBXVEZNb3ZlKG1lbW9yeSkpKTsKICAgICAgICAgfQpAQCAtMjgwLDE1ICszMTIsMTUgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgIH0KIAogICAgIG1vZHVs
ZVJlY29yZC0+bGluayhleGVjLCBpbnN0YW5jZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIG51bGxwdHIpOwogCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIG1vZHVsZVJl
Y29yZC0+ZHVtcCgpOwogICAgIEpTVmFsdWUgc3RhcnRSZXN1bHQgPSBtb2R1bGVSZWNvcmQtPmV2
YWx1YXRlKGV4ZWMpOwogICAgIFVOVVNFRF9QQVJBTShzdGFydFJlc3VsdCk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShpbnN0YW5jZSk7CisgICAgcmV0dXJuIGluc3RhbmNlOwogfQogCiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseUluc3RhbmNlKEV4ZWNT
dGF0ZSogc3RhdGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUluc3RhbmNlQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuaAkocmV2aXNpb24g
MjEzMzc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0
YW5jZUNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEpTV2ViQXNzZW1ibHlNb2R1bGU7CiBjbGFzcyBXZWJBc3Nl
bWJseUluc3RhbmNlUHJvdG90eXBlOwogCiBjbGFzcyBXZWJBc3NlbWJseUluc3RhbmNlQ29uc3Ry
dWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CkBAIC00NCw2ICs0NSw4IEBAIHB1Ymxp
YzoKIAogICAgIERFQ0xBUkVfSU5GTzsKIAorICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIGNyZWF0ZUluc3RhbmNlKEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBKU09i
amVjdCogaW1wb3J0T2JqZWN0KTsKKwogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mLCBXZWJBc3NlbWJseUluc3RhbmNlUHJvdG90eXBlKik7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJl
Y29yZC5jcHAJKHJldmlzaW9uIDIxMzM3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDcg
KzIyMiwxMyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0CiAgICAg
ICAgICAgICBpZiAoIWVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzLnNpemUoKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgdWludDMyX3QgdGFibGVJbmRleCA9IGVsZW1l
bnQub2Zmc2V0OworICAgICAgICAgICAgdWludDMyX3QgdGFibGVJbmRleDsKKworICAgICAgICAg
ICAgaWYgKGVsZW1lbnQub2Zmc2V0LmlzR2xvYmFsSW1wb3J0KCkpCisgICAgICAgICAgICAgICAg
dGFibGVJbmRleCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2luc3RhbmNlLT5sb2FkSTMyR2xv
YmFsKGVsZW1lbnQub2Zmc2V0Lmdsb2JhbEltcG9ydEluZGV4KCkpKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICB0YWJsZUluZGV4ID0gZWxlbWVudC5vZmZzZXQuY29uc3RWYWx1
ZSgpOworCiAgICAgICAgICAgICB1aW50NjRfdCBsYXN0V3JpdHRlbkluZGV4ID0gc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KHRhYmxlSW5kZXgpICsgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGVsZW1lbnQu
ZnVuY3Rpb25JbmRpY2VzLnNpemUoKSkgLSAxOwogICAgICAgICAgICAgaWYgKGxhc3RXcml0dGVu
SW5kZXggPj0gdGFibGUtPnNpemUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNl
cHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKHN0YXRlLCB2
bSwgQVNDSUlMaXRlcmFsKCJFbGVtZW50IGlzIHRyeWluZyB0byBzZXQgYW4gb3V0IG9mIGJvdW5k
cyB0YWJsZSBpbmRleCIpKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303461</attachid>
            <date>2017-03-05 12:01:35 -0800</date>
            <delta_ts>2017-03-05 12:23:40 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>22679</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuY3BwCShy
ZXZpc2lvbiAyMTM0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2Vt
Ymx5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKICNpbmNsdWRlICJKU1Byb21pc2VEZWZlcnJlZC5oIgogI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNs
dWRlICJXYXNtUGxhbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3Iu
aCIKIApAQCAtNDIsNiArNDMsNyBAQCBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVD
VElCTEUoCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlWYWxpZGF0
ZUZ1bmMoRXhlY1N0YXRlKik7CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2Vt
Ymx5Q29tcGlsZUZ1bmMoRXhlY1N0YXRlKik7CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHdlYkFzc2VtYmx5SW5zdGFudGlhdGVGdW5jKEV4ZWNTdGF0ZSopOwogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5Q29tcGlsZUZ1bmMoRXhlY1N0YXRlKiBleGVjKQog
ewpAQCAtNTMsNyArNTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2Vt
Ymx5CiAKICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHRydWx5IGFzeW5jaHJvbm91czoKICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDE2Ci0gICAgSlNW
YWx1ZSBtb2R1bGUgPSBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUo
ZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1vZHVsZVN0cnVj
dHVyZSgpKTsKKyAgICBKU1ZhbHVlIG1vZHVsZSA9IFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0
b3I6OmNyZWF0ZU1vZHVsZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpKTsKICAgICBpZiAoRXhj
ZXB0aW9uKiBleGNlcHRpb24gPSBjYXRjaFNjb3BlLmV4Y2VwdGlvbigpKSB7CiAgICAgICAgIGNh
dGNoU2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcHJvbWlzZS0+cmVqZWN0KGV4ZWMs
IGV4Y2VwdGlvbi0+dmFsdWUoKSk7CkBAIC02NCw2ICs2Niw1OSBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwcm9t
aXNlLT5wcm9taXNlKCkpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFz
c2VtYmx5SW5zdGFudGlhdGVGdW5jKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gY2F0Y2hTY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OworCisgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UgPSBKU1Byb21pc2VEZWZlcnJlZDo6
Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihjYXRjaFNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKworICAgIGF1dG8gcmVq
ZWN0ID0gWyZdICgpIHsKKyAgICAgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBjYXRjaFNjb3Bl
LmV4Y2VwdGlvbigpOworICAgICAgICBBU1NFUlQoZXhjZXB0aW9uKTsKKyAgICAgICAgY2F0Y2hT
Y29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBwcm9taXNlLT5yZWplY3QoZXhlYywgZXhj
ZXB0aW9uLT52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwcm9taXNl
LT5wcm9taXNlKCkpOworICAgIH07CisKKyAgICBKU1ZhbHVlIGZpcnN0QXJndW1lbnQgPSBleGVj
LT5hcmd1bWVudCgwKTsKKyAgICBKU1ZhbHVlIG1vZHVsZTsKKyAgICBib29sIGZpcnN0QXJndW1l
bnRJc01vZHVsZSA9IGZhbHNlOworICAgIGlmIChmaXJzdEFyZ3VtZW50LmluaGVyaXRzKHZtLCBK
U1dlYkFzc2VtYmx5TW9kdWxlOjppbmZvKCkpKSB7CisgICAgICAgIGZpcnN0QXJndW1lbnRJc01v
ZHVsZSA9IHRydWU7CisgICAgICAgIG1vZHVsZSA9IGZpcnN0QXJndW1lbnQ7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgbW9kdWxlID0gV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRl
TW9kdWxlKGV4ZWMsIGZpcnN0QXJndW1lbnQsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
V2ViQXNzZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSk7CisgICAgICAgIGlmIChjYXRjaFNjb3BlLmV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdCgpOworICAgIH0KKworICAgIEpT
VmFsdWUgaW1wb3J0QXJndW1lbnQgPSBleGVjLT5hcmd1bWVudCgxKTsKKyAgICBKU09iamVjdCog
aW1wb3J0T2JqZWN0ID0gaW1wb3J0QXJndW1lbnQuZ2V0T2JqZWN0KCk7CisgICAgaWYgKCFpbXBv
cnRBcmd1bWVudC5pc1VuZGVmaW5lZCgpICYmICFpbXBvcnRPYmplY3QpIHsKKyAgICAgICAgcHJv
bWlzZS0+cmVqZWN0KGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLAorICAgICAgICAgICAgQVND
SUlMaXRlcmFsKCJzZWNvbmQgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUgbXVz
dCBiZSB1bmRlZmluZWQgb3IgYW4gT2JqZWN0IiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVu
dGltZVR5cGVGb3JWYWx1ZShpbXBvcnRBcmd1bWVudCkpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShwcm9taXNlLT5wcm9taXNlKCkpOworICAgIH0KKworICAgIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSogaW5zdGFuY2UgPSBXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3I6OmNy
ZWF0ZUluc3RhbmNlKGV4ZWMsIGpzQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4obW9kdWxlKSwg
aW1wb3J0T2JqZWN0KTsKKyAgICBpZiAoY2F0Y2hTY29wZS5leGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIHJlamVjdCgpOworCisgICAgaWYgKGZpcnN0QXJndW1lbnRJc01vZHVsZSkKKyAgICAg
ICAgcHJvbWlzZS0+cmVzb2x2ZShleGVjLCBpbnN0YW5jZSk7CisgICAgZWxzZSB7CisgICAgICAg
IEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKKyAgICAgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxp
dGVyYWwoIm1vZHVsZSIpKSwgbW9kdWxlKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoImluc3RhbmNlIikpLCBp
bnN0YW5jZSk7CisgICAgICAgIHByb21pc2UtPnJlc29sdmUoZXhlYywgcmVzdWx0KTsKKyAgICB9
CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb21pc2UtPnByb21pc2UoKSk7CisKK30K
KwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyhF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKQEAgLTk5LDYgKzE1
NCw3IEBAIHZvaWQgSlNXZWJBc3NlbWJseTo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICBBU1NF
UlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9V
VF9UUkFOU0lUSU9OKCJ2YWxpZGF0ZSIsIHdlYkFzc2VtYmx5VmFsaWRhdGVGdW5jLCBEb250RW51
bSwgMSk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04oImNvbXBp
bGUiLCB3ZWJBc3NlbWJseUNvbXBpbGVGdW5jLCBEb250RW51bSwgMSk7CisgICAgSlNDX05BVElW
RV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04oImluc3RhbnRpYXRlIiwgd2ViQXNzZW1ibHlJ
bnN0YW50aWF0ZUZ1bmMsIERvbnRFbnVtLCAxKTsKIH0KIAogSlNXZWJBc3NlbWJseTo6SlNXZWJB
c3NlbWJseShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3Rh
bmNlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTM0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NywzMyArNTcsNDUgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29ucwogewogICAgIGF1dG8mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBnbG9iYWxPYmplY3Qg
PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAKICAgICAvLyBJZiBtb2R1bGVPYmplY3Qg
aXMgbm90IGEgV2ViQXNzZW1ibHkuTW9kdWxlIGluc3RhbmNlLCBhIFR5cGVFcnJvciBpcyB0aHJv
d24uCiAgICAgSlNXZWJBc3NlbWJseU1vZHVsZSoganNNb2R1bGUgPSBqc0R5bmFtaWNDYXN0PEpT
V2ViQXNzZW1ibHlNb2R1bGUqPih2bSwgZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmICghanNN
b2R1bGUpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhl
YywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiZmlyc3Qg
YXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSBhIFdlYkFzc2VtYmx5Lk1v
ZHVsZSIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoZXhlYy0+
YXJndW1lbnQoMCkpKSkpOwotICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1
bGVJbmZvcm1hdGlvbiA9IGpzTW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpOwogCiAgICAgLy8g
SWYgdGhlIGltcG9ydE9iamVjdCBwYXJhbWV0ZXIgaXMgbm90IHVuZGVmaW5lZCBhbmQgVHlwZShp
bXBvcnRPYmplY3QpIGlzIG5vdCBPYmplY3QsIGEgVHlwZUVycm9yIGlzIHRocm93bi4KICAgICBK
U1ZhbHVlIGltcG9ydEFyZ3VtZW50ID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAgSlNPYmplY3Qq
IGltcG9ydE9iamVjdCA9IGltcG9ydEFyZ3VtZW50LmdldE9iamVjdCgpOwogICAgIGlmICghaW1w
b3J0QXJndW1lbnQuaXNVbmRlZmluZWQoKSAmJiAhaW1wb3J0T2JqZWN0KQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0
ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoInNlY29uZCBhcmd1bWVudCB0byBXZWJBc3Nl
bWJseS5JbnN0YW5jZSBtdXN0IGJlIHVuZGVmaW5lZCBvciBhbiBPYmplY3QiKSwgZGVmYXVsdFNv
dXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydEFyZ3VtZW50KSkpKTsKKyAg
ICAKKyAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlSW5zdGFuY2UoZXhlYywganNN
b2R1bGUsIGltcG9ydE9iamVjdCkpOworfQorCitKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIFdlYkFz
c2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVj
LCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBqc01vZHVsZSwgSlNPYmplY3QqIGltcG9ydE9iamVjdCkK
K3sKKyAgICBhdXRvJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpOworCisgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24m
IG1vZHVsZUluZm9ybWF0aW9uID0ganNNb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7CiAKICAg
ICAvLyBJZiB0aGUgbGlzdCBvZiBtb2R1bGUuaW1wb3J0cyBpcyBub3QgZW1wdHkgYW5kIFR5cGUo
aW1wb3J0T2JqZWN0KSBpcyBub3QgT2JqZWN0LCBhIFR5cGVFcnJvciBpcyB0aHJvd24uCi0gICAg
aWYgKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydHMuc2l6ZSgpICYmICFpbXBvcnRPYmplY3QpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgic2Vjb25kIGFyZ3VtZW50
IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgT2JqZWN0IGJlY2F1c2UgdGhlIFdlYkFz
c2VtYmx5Lk1vZHVsZSBoYXMgaW1wb3J0cyIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRp
bWVUeXBlRm9yVmFsdWUoaW1wb3J0QXJndW1lbnQpKSkpOworICAgIGlmIChtb2R1bGVJbmZvcm1h
dGlvbi5pbXBvcnRzLnNpemUoKSAmJiAhaW1wb3J0T2JqZWN0KSB7CisgICAgICAgIHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVy
YWwoImNhbid0IG1ha2UgV2ViQXNzZW1ibHkuSW5zdGFuY2UgYmVjYXVzZSB0aGVyZSBpcyBubyBp
bXBvcnRzIE9iamVjdCBhbmQgdGhlIFdlYkFzc2VtYmx5Lk1vZHVsZSByZXF1aXJlcyBpbXBvcnRz
IikpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQogCiAgICAgSWRlbnRpZmllciBt
b2R1bGVLZXkgPSBJZGVudGlmaWVyOjpmcm9tVWlkKFByaXZhdGVOYW1lKFByaXZhdGVOYW1lOjpE
ZXNjcmlwdGlvbiwgIldlYkFzc2VtYmx5SW5zdGFuY2UiKSk7CiAgICAgV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQqIG1vZHVsZVJlY29yZCA9IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpjcmVhdGUo
ZXhlYywgdm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTdHJ1Y3R1cmUo
KSwgbW9kdWxlS2V5LCBtb2R1bGVJbmZvcm1hdGlvbik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIG51bGxwdHIpOwogCiAgICAgU3RydWN0dXJlKiBpbnN0YW5jZVN0cnVjdHVy
ZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMt
Pm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPldlYkFzc2VtYmx5SW5zdGFuY2VTdHJ1Y3R1cmUo
KSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogCiAgICAg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
Y3JlYXRlKHZtLCBpbnN0YW5jZVN0cnVjdHVyZSwganNNb2R1bGUsIG1vZHVsZVJlY29yZC0+Z2V0
TW9kdWxlTmFtZXNwYWNlKGV4ZWMpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgbnVsbHB0cik7CiAKIAogICAgIC8vIExldCBmdW5jcywgbWVtb3JpZXMgYW5kIHRhYmxlcyBi
ZSBpbml0aWFsbHktZW1wdHkgbGlzdHMgb2YgY2FsbGFibGUgSmF2YVNjcmlwdCBvYmplY3RzLCBX
ZWJBc3NlbWJseS5NZW1vcnkgb2JqZWN0cyBhbmQgV2ViQXNzZW1ibHkuVGFibGUgb2JqZWN0cywg
cmVzcGVjdGl2ZWx5LgpAQCAtOTcsMzAgKzEwOSwzNiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgZm9yIChhdXRvJiBpbXBvcnQgOiBtb2R1bGVJbmZvcm1h
dGlvbi5pbXBvcnRzKSB7CiAgICAgICAgIC8vIDEuIExldCBvIGJlIHRoZSByZXN1bHRhbnQgdmFs
dWUgb2YgcGVyZm9ybWluZyBHZXQoaW1wb3J0T2JqZWN0LCBpLm1vZHVsZV9uYW1lKS4KICAgICAg
ICAgSlNWYWx1ZSBpbXBvcnRNb2R1bGVWYWx1ZSA9IGltcG9ydE9iamVjdC0+Z2V0KGV4ZWMsIGlt
cG9ydC5tb2R1bGUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IG51bGxwdHIpOwogICAgICAgICAvLyAyLiBJZiBUeXBlKG8pIGlzIG5vdCBPYmplY3QsIHRocm93
IGEgVHlwZUVycm9yLgotICAgICAgICBpZiAoIWltcG9ydE1vZHVsZVZhbHVlLmlzT2JqZWN0KCkp
Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMs
IHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImltcG9ydCBt
dXN0IGJlIGFuIG9iamVjdCIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9y
VmFsdWUoaW1wb3J0TW9kdWxlVmFsdWUpKSkpOworICAgICAgICBpZiAoIWltcG9ydE1vZHVsZVZh
bHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93
U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImltcG9ydCBtdXN0IGJl
IGFuIG9iamVjdCIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUo
aW1wb3J0TW9kdWxlVmFsdWUpKSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgfQogCiAgICAgICAgIC8vIDMuIExldCB2IGJlIHRoZSB2YWx1ZSBvZiBwZXJmb3JtaW5nIEdl
dChvLCBpLml0ZW1fbmFtZSkKICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxKU09i
amVjdCo+KGltcG9ydE1vZHVsZVZhbHVlKTsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVj
dC0+Z2V0KGV4ZWMsIGltcG9ydC5maWVsZCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgbnVsbHB0cik7CiAKICAgICAgICAgc3dpdGNoIChpbXBvcnQua2luZCkg
ewogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6RnVuY3Rpb246IHsKICAgICAgICAg
ICAgIC8vIDQuIElmIGkgaXMgYSBmdW5jdGlvbiBpbXBvcnQ6CiAgICAgICAgICAgICAvLyBpLiBJ
ZiBJc0NhbGxhYmxlKHYpIGlzIGZhbHNlLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4K
LSAgICAgICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3Jl
YXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnQg
ZnVuY3Rpb24gbXVzdCBiZSBjYWxsYWJsZSIpKSkpOworICAgICAgICAgICAgaWYgKCF2YWx1ZS5p
c0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJv
d1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVy
YWwoImltcG9ydCBmdW5jdGlvbiBtdXN0IGJlIGNhbGxhYmxlIikpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIEpTQ2VsbCogY2Vs
bCA9IHZhbHVlLmFzQ2VsbCgpOwogICAgICAgICAgICAgLy8gaWkuIElmIHYgaXMgYW4gRXhwb3J0
ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdDoKICAgICAgICAgICAgIGlmIChXZWJBc3NlbWJseUZ1
bmN0aW9uKiBpbXBvcnRlZEV4cG9ydCA9IGpzRHluYW1pY0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlv
bio+KHZtLCBjZWxsKSkgewogICAgICAgICAgICAgICAgIC8vIGEuIElmIHRoZSBzaWduYXR1cmUg
b2YgdiBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIG9mIGksIHRocm93IGEgV2ViQXNzZW1i
bHkuTGlua0Vycm9yLgogICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IGltcG9y
dGVkU2lnbmF0dXJlSW5kZXggPSBpbXBvcnRlZEV4cG9ydC0+c2lnbmF0dXJlSW5kZXgoKTsKICAg
ICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBleHBlY3RlZFNpZ25hdHVyZUluZGV4
ID0gbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2ltcG9y
dC5raW5kSW5kZXhdOwotICAgICAgICAgICAgICAgIGlmIChpbXBvcnRlZFNpZ25hdHVyZUluZGV4
ICE9IGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNX
ZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBmdW5j
dGlvbidzIHNpZ25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBwcm92aWRlZCBXZWJBc3NlbWJseSBm
dW5jdGlvbidzIHNpZ25hdHVyZSIpKSkpOworICAgICAgICAgICAgICAgIGlmIChpbXBvcnRlZFNp
Z25hdHVyZUluZGV4ICE9IGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJs
eUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBmdW5jdGlvbidzIHNp
Z25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBwcm92aWRlZCBXZWJBc3NlbWJseSBmdW5jdGlvbidz
IHNpZ25hdHVyZSIpKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvLyBiLiBMZXQgY2xvc3VyZSBiZSB2Lltb
Q2xvc3VyZV1dLgogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gaWlpLiBPdGhlcndpc2U6
CkBAIC0xMzgsMjMgKzE1NiwyNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zCiAgICAgICAgICAgICBoYXNUYWJsZUltcG9ydCA9IHRydWU7CiAgICAgICAgICAgICBK
U1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5VGFi
bGUqPih2bSwgdmFsdWUpOwogICAgICAgICAgICAgLy8gaS4gSWYgdiBpcyBub3QgYSBXZWJBc3Nl
bWJseS5UYWJsZSBvYmplY3QsIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgotICAgICAg
ICAgICAgaWYgKCF0YWJsZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5r
RXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IGlzIG5vdCBhbiBpbnN0
YW5jZSBvZiBXZWJBc3NlbWJseS5UYWJsZSIpKSkpOworICAgICAgICAgICAgaWYgKCF0YWJsZSkg
eworICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0
ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1w
b3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5UYWJsZSIpKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHVp
bnQzMl90IGV4cGVjdGVkSW5pdGlhbCA9IG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRp
b24uaW5pdGlhbCgpOwogICAgICAgICAgICAgdWludDMyX3QgYWN0dWFsSW5pdGlhbCA9IHRhYmxl
LT5zaXplKCk7Ci0gICAgICAgICAgICBpZiAoYWN0dWFsSW5pdGlhbCA8IGV4cGVjdGVkSW5pdGlh
bCkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9u
KGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0s
IEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0IGlz
IHRvbyBzbWFsbCIpKSkpOworICAgICAgICAgICAgaWYgKGFjdHVhbEluaXRpYWwgPCBleHBlY3Rl
ZEluaXRpYWwpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Nj
b3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwo
IlRhYmxlIGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0b28gc21hbGwiKSkp
OworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gZXhwZWN0ZWRNYXhpbXVtID0gbW9k
dWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5tYXhpbXVtKCkpIHsKICAgICAgICAgICAg
ICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBhY3R1YWxNYXhpbXVtID0gdGFibGUtPm1heGlt
dW0oKTsKICAgICAgICAgICAgICAgICBpZiAoIWFjdHVhbE1heGltdW0pIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSgKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5r
RXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IGRvZXMgbm90IGhhdmUg
YSAnbWF4aW11bScgYnV0IHRoZSBtb2R1bGUgcmVxdWlyZXMgdGhhdCBpdCBkb2VzIikpKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0
ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1w
b3J0IGRvZXMgbm90IGhhdmUgYSAnbWF4aW11bScgYnV0IHRoZSBtb2R1bGUgcmVxdWlyZXMgdGhh
dCBpdCBkb2VzIikpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICgqYWN0dWFsTWF4aW11bSA+ICpleHBl
Y3RlZE1heGltdW0pIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2Nv
cGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgi
SW1wb3J0ZWQgVGFibGUncyAnbWF4aW11bScgaXMgbGFyZ2VyIHRoYW4gdGhlIG1vZHVsZSdzIGV4
cGVjdGVkICdtYXhpbXVtJyIpKSkpOworICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZt
LCBBU0NJSUxpdGVyYWwoIkltcG9ydGVkIFRhYmxlJ3MgJ21heGltdW0nIGlzIGxhcmdlciB0aGFu
IHRoZSBtb2R1bGUncyBleHBlY3RlZCAnbWF4aW11bSciKSkpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAg
LTE3MCwzMSArMTkyLDM1IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnMKICAgICAgICAgICAgIGhhc01lbW9yeUltcG9ydCA9IHRydWU7CiAgICAgICAgICAgICBKU1dl
YkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNZW1v
cnkqPih2bSwgdmFsdWUpOwogICAgICAgICAgICAgLy8gaS4gSWYgdiBpcyBub3QgYSBXZWJBc3Nl
bWJseS5NZW1vcnkgb2JqZWN0LCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KLSAgICAg
ICAgICAgIGlmICghbWVtb3J5KQotICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxp
bmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IGlzIG5vdCBhbiBp
bnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnkiKSkpKTsKKyAgICAgICAgICAgIGlmICghbWVt
b3J5KSB7CisgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwg
Y3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1v
cnkgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnkiKSkpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBXYXNtOjpQYWdlQ291bnQgZXhwZWN0ZWRJbml0aWFsID0gbW9kdWxlSW5mb3JtYXRpb24u
bWVtb3J5LmluaXRpYWwoKTsKICAgICAgICAgICAgIFdhc206OlBhZ2VDb3VudCBhY3R1YWxJbml0
aWFsID0gbWVtb3J5LT5tZW1vcnkoKS5pbml0aWFsKCk7Ci0gICAgICAgICAgICBpZiAoYWN0dWFs
SW5pdGlhbCA8IGV4cGVjdGVkSW5pdGlhbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNz
ZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBwcm92
aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0b28gc21hbGwiKSkpKTsKKyAgICAgICAgICAgIGlm
IChhY3R1YWxJbml0aWFsIDwgZXhwZWN0ZWRJbml0aWFsKSB7CisgICAgICAgICAgICAgICAgdGhy
b3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJv
cihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0
aWFsJyB0aGF0IGlzIHRvbyBzbWFsbCIpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChXYXNtOjpQYWdlQ291bnQgZXhw
ZWN0ZWRNYXhpbXVtID0gbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0oKSkgewogICAg
ICAgICAgICAgICAgIFdhc206OlBhZ2VDb3VudCBhY3R1YWxNYXhpbXVtID0gbWVtb3J5LT5tZW1v
cnkoKS5tYXhpbXVtKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFhY3R1YWxNYXhpbXVtKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoCi0gICAgICAgICAgICAg
ICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFz
c2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgZGlk
IG5vdCBoYXZlIGEgJ21heGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVzIHRoYXQgaXQgZG9l
cyIpKSkpOworICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Nj
b3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwo
Ik1lbW9yeSBpbXBvcnQgZGlkIG5vdCBoYXZlIGEgJ21heGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJl
cXVpcmVzIHRoYXQgaXQgZG9lcyIpKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChhY3R1YWxNYXhp
bXVtID4gZXhwZWN0ZWRNYXhpbXVtKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVj
LCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJ
SUxpdGVyYWwoIk1lbW9yeSBpbXBvcnRzICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9k
dWxlJ3MgZXhwZWN0ZWQgJ21heGltdW0nIikpKSk7CisgICAgICAgICAgICAgICAgICAgIHRocm93
RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3Io
ZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydHMgJ21heGltdW0nIGlzIGxhcmdl
ciB0aGFuIHRoZSBtb2R1bGUncyBleHBlY3RlZCAnbWF4aW11bSciKSkpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIC8vIGlpLiBBcHBlbmQgdiB0byBtZW1vcmllcy4KICAgICAgICAgICAg
IC8vIGlpaS4gQXBwZW5kIHYuW1tNZW1vcnldXSB0byBpbXBvcnRzLgogICAgICAgICAgICAgaW5z
dGFuY2UtPnNldE1lbW9yeSh2bSwgZXhlYywgbWVtb3J5KTsKLSAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Okdsb2JhbDog
ewpAQCAtMjAyLDEwICsyMjgsMTQgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29ucwogICAgICAgICAgICAgLy8gaS4gSWYgaSBpcyBub3QgYW4gaW1tdXRhYmxlIGdsb2Jh
bCwgdGhyb3cgYSBUeXBlRXJyb3IuCiAgICAgICAgICAgICBBU1NFUlQobW9kdWxlSW5mb3JtYXRp
b24uZ2xvYmFsc1tpbXBvcnQua2luZEluZGV4XS5tdXRhYmlsaXR5ID09IFdhc206Okdsb2JhbDo6
SW1tdXRhYmxlKTsKICAgICAgICAgICAgIC8vIGlpLiBJZiB0aGUgZ2xvYmFsX3R5cGUgb2YgaSBp
cyBpNjQgb3IgVHlwZSh2KSBpcyBub3QgTnVtYmVyLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtF
cnJvci4KLSAgICAgICAgICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5r
aW5kSW5kZXhdLnR5cGUgPT0gV2FzbTo6STY0KQotICAgICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJB
c3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBnbG9iYWwg
Y2Fubm90IGJlIGFuIGk2NCIpKSkpOwotICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigp
KQotICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24o
ZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwg
QVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBnbG9iYWwgbXVzdCBiZSBhIG51bWJlciIpKSkpOworICAg
ICAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0u
dHlwZSA9PSBXYXNtOjpJNjQpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVj
LCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJ
SUxpdGVyYWwoImltcG9ydGVkIGdsb2JhbCBjYW5ub3QgYmUgYW4gaTY0IikpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgh
dmFsdWUuaXNOdW1iZXIoKSkgeworICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMs
IHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJ
TGl0ZXJhbCgiaW1wb3J0ZWQgZ2xvYmFsIG11c3QgYmUgYSBudW1iZXIiKSkpOworICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gaWlp
LiBBcHBlbmQgVG9XZWJBc3NlbWJseVZhbHVlKHYpIHRvIGltcG9ydHMuCiAgICAgICAgICAgICBz
d2l0Y2ggKG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0udHlwZSkg
ewogICAgICAgICAgICAgY2FzZSBXYXNtOjpJMzI6CkBAIC0yNDAsMTIgKzI3MCwxNCBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgICAgICAgICAgbWVt
b3J5ID0ganNNb2R1bGUtPnRha2VSZXNlcnZlZE1lbW9yeSgpOwogICAgICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICAgICAgbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUodm0sIG1vZHVs
ZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5t
YXhpbXVtKCkpOwotICAgICAgICAgICAgICAgIGlmICghbWVtb3J5KQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2Nv
cGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpKTsKKyAgICAgICAgICAgICAgICBpZiAo
IW1lbW9yeSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJv
d1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaW5zdGFuY2UtPnNldE1lbW9yeSh2bSwgZXhlYywKICAgICAgICAgICAgICAgICBK
U1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgbWVtb3J5LnJlbGVhc2VOb25OdWxsKCkp
KTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51
bGxwdHIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yODgsMTUgKzMyMCwxNSBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgfQogCiAgICAgbW9kdWxlUmVj
b3JkLT5saW5rKGV4ZWMsIGluc3RhbmNlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgbnVsbHB0cik7CiAKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgbW9kdWxlUmVjb3Jk
LT5kdW1wKCk7CiAgICAgSlNWYWx1ZSBzdGFydFJlc3VsdCA9IG1vZHVsZVJlY29yZC0+ZXZhbHVh
dGUoZXhlYyk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXJ0UmVzdWx0KTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGluc3RhbmNlKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7CiB9CiAKIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5SW5zdGFuY2UoRXhlY1N0YXRl
KiBzdGF0ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
SW5zdGFuY2VDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAyMTM0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNl
Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAorY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZTsKIGNsYXNzIFdlYkFzc2VtYmx5
SW5zdGFuY2VQcm90b3R5cGU7CiAKIGNsYXNzIFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rv
ciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKQEAgLTQ0LDYgKzQ1LDggQEAgcHVibGljOgog
CiAgICAgREVDTEFSRV9JTkZPOwogCisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSog
Y3JlYXRlSW5zdGFuY2UoRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEpTT2JqZWN0
KiBpbXBvcnRPYmplY3QpOworCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYsIFdlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUqKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVD
b25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxMzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02MCw3ICs2MCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnMKICAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFz
c1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5XZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHRocm93U2NvcGUucmVs
ZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoV2ViQXNzZW1ibHlNb2R1bGVDb25z
dHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKGV4ZWMsIHN0cnVjdHVyZSkpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKGV4
ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBzdHJ1Y3R1cmUpKTsKIH0KIAogc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlNb2R1bGUoRXhlY1N0YXRlKiBz
dGF0ZSkKQEAgLTcwLDE0ICs3MCwxNCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjYWxsCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fu
bm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIldlYkFzc2VtYmx5
Lk1vZHVsZSIpKTsKIH0KIAotSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpj
cmVhdGVNb2R1bGUoRXhlY1N0YXRlKiBzdGF0ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitKU1Zh
bHVlIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlIG1heWJlQnVmZmVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBzaXplX3QgYnl0ZU9mZnNldDsKICAgICBzaXplX3QgYnl0ZVNpemU7
Ci0gICAgdWludDhfdCogYmFzZSA9IGdldFdhc21CdWZmZXJGcm9tVmFsdWUoc3RhdGUsIHN0YXRl
LT5hcmd1bWVudCgwKSwgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOworICAgIHVpbnQ4X3QqIGJhc2Ug
PSBnZXRXYXNtQnVmZmVyRnJvbVZhbHVlKHN0YXRlLCBtYXliZUJ1ZmZlciwgYnl0ZU9mZnNldCwg
Ynl0ZVNpemUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBz
Y29wZS5yZWxlYXNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAy
MTM0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVs
ZUNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgog
CiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgc3RhdGljIEpTVmFsdWUgY3JlYXRlTW9kdWxlKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBKU1ZhbHVlIGNyZWF0ZU1vZHVsZShF
eGVjU3RhdGUqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqKTsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mLCBXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZSopOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303462</attachid>
            <date>2017-03-05 12:23:40 -0800</date>
            <delta_ts>2017-03-05 14:01:56 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>29216</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWluc3RhbnRpYXRlLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWluc3RhbnRpYXRl
LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWlu
c3RhbnRpYXRlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE2IEBACitpbXBvcnQgKiBh
cyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1
aWxkZXIuanMnOworCit7CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAg
ICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAg
ICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgICAg
LkVuZCgpCisgICAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIs
IHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0
KDEpCisgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgIC5FbmQoKTsKKworICAgIGNvbnN0
IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKworICAgIGxldCBkb25lID0gZmFs
c2U7CisgICAgYXN5bmMgZnVuY3Rpb24gdGVzdCgpIHsKKyAgICAgICAgbGV0IHttb2R1bGUsIGlu
c3RhbmNlfSA9IGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGJpbik7CisgICAgICAgIGFz
c2VydC50cnV0aHkobW9kdWxlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuTW9kdWxlKTsKKyAgICAg
ICAgYXNzZXJ0LnRydXRoeShpbnN0YW5jZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lkluc3RhbmNl
KTsKKyAgICAgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuZm9vKDIwKSwgMSk7CisgICAg
ICAgIGRvbmUgPSB0cnVlOworICAgIH0KKworICAgIHRlc3QoKTsKKyAgICBkcmFpbk1pY3JvdGFz
a3MoKTsKKyAgICBhc3NlcnQudHJ1dGh5KGRvbmUpOworfQorCit7CisgICAgY29uc3QgYnVpbGRl
ciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgICAu
RnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgICAuRnVu
Y3Rpb24oImZvbyIpCisgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgLkNvZGUoKQorICAgICAg
ICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAg
ICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAgIC5FbmQoKTsKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQo
KTsKKworICAgIGxldCBkb25lID0gZmFsc2U7CisgICAgYXN5bmMgZnVuY3Rpb24gdGVzdCgpIHsK
KyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGxldCB7bW9kdWxlLCBpbnN0YW5jZX0gPSBhd2Fp
dCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIG51bGwpOworICAgICAgICB9IGNhdGNoKGUp
IHsKKyAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJzZWNvbmQgYXJndW1lbnQgdG8g
V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUgbXVzdCBiZSB1bmRlZmluZWQgb3IgYW4gT2JqZWN0IChl
dmFsdWF0aW5nICdXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIG51bGwpJykiKTsKKyAgICAg
ICAgfQorICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9CisKKyAgICB0ZXN0KCk7CisgICAgZHJh
aW5NaWNyb3Rhc2tzKCk7CisgICAgYXNzZXJ0LnRydXRoeShkb25lKTsKK30KKworeworICAgIGNv
bnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgICAuVHlwZSgpLkVuZCgpCisg
ICAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAgIC5FbmQoKQorICAgICAgICAgIC5Db2Rl
KCkKKyAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7IHBhcmFtczogW10sIHJldDogImkz
MiIgfSkKKyAgICAgICAgICAgICAgICAgIC5GMzJDb25zdCgxKQorICAgICAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgICAuRW5kKCk7CisKKyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2Vt
Ymx5KCkuZ2V0KCk7CisKKyAgICBsZXQgZG9uZSA9IGZhbHNlOworICAgIGFzeW5jIGZ1bmN0aW9u
IHRlc3QoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBsZXQge21vZHVsZSwgaW5zdGFu
Y2V9ID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluKTsKKyAgICAgICAgfSBjYXRj
aChlKSB7CisgICAgICAgICAgICBhc3NlcnQudHJ1dGh5KGUgaW5zdGFuY2VvZiBXZWJBc3NlbWJs
eS5Db21waWxlRXJyb3IpOworICAgICAgICAgICAgYXNzZXJ0LmVxKGUubWVzc2FnZSwgIldlYkFz
c2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHZhbGlkYXRlOiBjb250cm9sIGZsb3cgcmV0dXJucyB3aXRo
IHVuZXhwZWN0ZWQgdHlwZSwgaW4gZnVuY3Rpb24gYXQgaW5kZXggMCAoZXZhbHVhdGluZyAnV2Vi
QXNzZW1ibHkuaW5zdGFudGlhdGUoYmluKScpIik7CisgICAgICAgIH0KKyAgICAgICAgZG9uZSA9
IHRydWU7CisgICAgfQorCisgICAgdGVzdCgpOworICAgIGRyYWluTWljcm90YXNrcygpOworICAg
IGFzc2VydC50cnV0aHkoZG9uZSk7Cit9CisKK3sKKyAgICBjb25zdCBidWlsZGVyID0gKG5ldyBC
dWlsZGVyKCkpCisgICAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAgIC5JbXBvcnQoKS5N
ZW1vcnkoImltcCIsICJtZW1vcnkiLCB7aW5pdGlhbDoxMDB9KS5FbmQoKQorICAgICAgICAgIC5G
dW5jdGlvbigpLkVuZCgpCisgICAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAgIC5GdW5j
dGlvbigiZm9vIikKKyAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAuQ29kZSgpCisgICAgICAg
ICAgICAgIC5GdW5jdGlvbigiZm9vIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAg
ICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
ICAgLkVuZCgpOworCisgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgp
OworCisgICAgbGV0IGRvbmUgPSBmYWxzZTsKKyAgICBhc3luYyBmdW5jdGlvbiB0ZXN0KCkgewor
ICAgICAgICB0cnkgeworICAgICAgICAgICAgbGV0IHttb2R1bGUsIGluc3RhbmNlfSA9IGF3YWl0
IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGJpbiwge2ltcDoge21lbW9yeTogMjB9fSk7CisgICAg
ICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgYXNzZXJ0LmVxKGUubWVzc2FnZSwgIk1lbW9y
eSBpbXBvcnQgaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5Lk1lbW9yeSAoZXZhbHVh
dGluZyAnV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluLCB7aW1wOiB7bWVtb3J5OiAyMH19KScp
Iik7CisgICAgICAgIH0KKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfQorCisgICAgdGVzdCgp
OworICAgIGRyYWluTWljcm90YXNrcygpOworICAgIGFzc2VydC50cnV0aHkoZG9uZSk7Cit9CisK
K3sKKyAgICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgICAgLlR5cGUo
KS5FbmQoKQorICAgICAgICAgIC5JbXBvcnQoKS5NZW1vcnkoImltcCIsICJtZW1vcnkiLCB7aW5p
dGlhbDoxMDB9KS5FbmQoKQorICAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgICAg
LkV4cG9ydCgpCisgICAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgeyBw
YXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkK
KyAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgLkVuZCgpOworCisgICAgY29uc3QgYmlu
ID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworCisgICAgbGV0IGRvbmUgPSBmYWxzZTsK
KyAgICBhc3luYyBmdW5jdGlvbiB0ZXN0KCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAg
Y29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgICAgICAgICAg
bGV0IGluc3RhbmNlID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluLCB7aW1wOiB7
bWVtb3J5OiAyMH19KTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICBhc3NlcnQu
ZXEoZS5tZXNzYWdlLCAiTWVtb3J5IGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNz
ZW1ibHkuTWVtb3J5IChldmFsdWF0aW5nICdXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIHtp
bXA6IHttZW1vcnk6IDIwfX0pJykiKTsKKyAgICAgICAgfQorICAgICAgICBkb25lID0gdHJ1ZTsK
KyAgICB9CisKKyAgICB0ZXN0KCk7CisgICAgZHJhaW5NaWNyb3Rhc2tzKCk7CisgICAgYXNzZXJ0
LnRydXRoeShkb25lKTsKK30KKworeworICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIo
KSkKKyAgICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkK
KyAgICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAg
ICAgICAgIC5FbmQoKQorICAgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgICAgLkZ1bmN0aW9u
KCJmb28iLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAgIC5J
MzJDb25zdCgxKQorICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAuRW5kKCk7CisKKyAg
ICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisKKyAgICBsZXQgZG9u
ZSA9IGZhbHNlOworICAgIGFzeW5jIGZ1bmN0aW9uIHRlc3QoKSB7CisgICAgICAgIGxldCBtb2R1
bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgICAgIGxldCBpbnN0YW5jZSA9
IGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKG1vZHVsZSk7CisgICAgICAgIGFzc2VydC50
cnV0aHkoaW5zdGFuY2UgaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5JbnN0YW5jZSk7CisgICAgICAg
IGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmZvbygyMCksIDEpOworICAgICAgICBkb25lID0g
dHJ1ZTsKKyAgICB9CisKKyAgICB0ZXN0KCk7CisgICAgZHJhaW5NaWNyb3Rhc2tzKCk7CisgICAg
YXNzZXJ0LnRydXRoeShkb25lKTsKK30KKworeworICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1
aWxkZXIoKSkKKyAgICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgICAgLkltcG9ydCgpLk1l
bW9yeSgiaW1wIiwgIm1lbW9yeSIsIHtpbml0aWFsOjEwMH0pLkVuZCgpCisgICAgICAgICAgLkZ1
bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgICAgLkZ1bmN0
aW9uKCJmb28iKQorICAgICAgICAgIC5FbmQoKQorICAgICAgICAgIC5Db2RlKCkKKyAgICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAg
ICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
ICAuRW5kKCk7CisKKyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7
CisKKyAgICBsZXQgZG9uZSA9IGZhbHNlOworICAgIGFzeW5jIGZ1bmN0aW9uIHRlc3QoKSB7Cisg
ICAgICAgIHRyeSB7CisgICAgICAgICAgICBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZSgy
NSk7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgLy8gRklYTUU6IEJldHRlciBl
cnJvciBtZXNzYWdlIGhlcmUuCisgICAgICAgICAgICBhc3NlcnQuZXEoZS5tZXNzYWdlLCAiZmly
c3QgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheUJ1ZmZlclZpZXcgb3IgYW4gQXJyYXlCdWZmZXIg
KGV2YWx1YXRpbmcgJ1dlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKDI1KScpIik7CisgICAgICAgIH0K
KyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfQorCisgICAgdGVzdCgpOworICAgIGRyYWluTWlj
cm90YXNrcygpOworICAgIGFzc2VydC50cnV0aHkoZG9uZSk7Cit9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmNwcAkocmV2aXNpb24gMjEzNDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiSlNQcm9taXNlRGVmZXJyZWQuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SGVscGVycy5o
IgorI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiV2FzbVBsYW4uaCIK
ICNpbmNsdWRlICJXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgiCiAKQEAgLTQyLDYgKzQz
LDcgQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKEV4ZWNTdGF0ZSop
OwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUNvbXBpbGVGdW5jKEV4
ZWNTdGF0ZSopOworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUluc3Rh
bnRpYXRlRnVuYyhFeGVjU3RhdGUqKTsKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3
ZWJBc3NlbWJseUNvbXBpbGVGdW5jKEV4ZWNTdGF0ZSogZXhlYykKIHsKQEAgLTUzLDcgKzU1LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseQogCiAgICAgLy8gRklY
TUU6IE1ha2UgdGhpcyB0cnVseSBhc3luY2hyb25vdXM6CiAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjAxNgotICAgIEpTVmFsdWUgbW9kdWxlID0gV2Vi
QXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKGV4ZWMsIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSk7CisgICAgSlNW
YWx1ZSBtb2R1bGUgPSBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUo
ZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2Vi
QXNzZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSk7CiAgICAgaWYgKEV4Y2VwdGlvbiogZXhjZXB0aW9u
ID0gY2F0Y2hTY29wZS5leGNlcHRpb24oKSkgewogICAgICAgICBjYXRjaFNjb3BlLmNsZWFyRXhj
ZXB0aW9uKCk7CiAgICAgICAgIHByb21pc2UtPnJlamVjdChleGVjLCBleGNlcHRpb24tPnZhbHVl
KCkpOwpAQCAtNjQsNiArNjYsNTkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJB
c3NlbWJseQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocHJvbWlzZS0+cHJvbWlzZSgpKTsK
IH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUluc3RhbnRpYXRl
RnVuYyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIGNhdGNoU2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgIEpTUHJvbWlz
ZURlZmVycmVkKiBwcm9taXNlID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oY2F0Y2hT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisKKyAgICBhdXRvIHJlamVjdCA9IFsmXSAoKSB7Cisg
ICAgICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gY2F0Y2hTY29wZS5leGNlcHRpb24oKTsKKyAg
ICAgICAgQVNTRVJUKGV4Y2VwdGlvbik7CisgICAgICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKKyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbi0+dmFsdWUoKSk7
CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocHJvbWlzZS0+cHJvbWlzZSgpKTsKKyAg
ICB9OworCisgICAgSlNWYWx1ZSBpbXBvcnRBcmd1bWVudCA9IGV4ZWMtPmFyZ3VtZW50KDEpOwor
ICAgIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QgPSBpbXBvcnRBcmd1bWVudC5nZXRPYmplY3QoKTsK
KyAgICBpZiAoIWltcG9ydEFyZ3VtZW50LmlzVW5kZWZpbmVkKCkgJiYgIWltcG9ydE9iamVjdCkg
eworICAgICAgICBwcm9taXNlLT5yZWplY3QoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsCisg
ICAgICAgICAgICBBU0NJSUxpdGVyYWwoInNlY29uZCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5p
bnN0YW50aWF0ZSBtdXN0IGJlIHVuZGVmaW5lZCBvciBhbiBPYmplY3QiKSwgZGVmYXVsdFNvdXJj
ZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydEFyZ3VtZW50KSkpOworICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb21pc2UtPnByb21pc2UoKSk7CisgICAgfQorCisg
ICAgSlNWYWx1ZSBmaXJzdEFyZ3VtZW50ID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgSlNWYWx1
ZSBtb2R1bGU7CisgICAgYm9vbCBmaXJzdEFyZ3VtZW50SXNNb2R1bGUgPSBmYWxzZTsKKyAgICBp
ZiAoZmlyc3RBcmd1bWVudC5pbmhlcml0cyh2bSwgSlNXZWJBc3NlbWJseU1vZHVsZTo6aW5mbygp
KSkgeworICAgICAgICBmaXJzdEFyZ3VtZW50SXNNb2R1bGUgPSB0cnVlOworICAgICAgICBtb2R1
bGUgPSBmaXJzdEFyZ3VtZW50OworICAgIH0gZWxzZSB7CisgICAgICAgIG1vZHVsZSA9IFdlYkFz
c2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShleGVjLCBmaXJzdEFyZ3VtZW50
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TW9kdWxlU3RydWN0dXJl
KCkpOworICAgICAgICBpZiAoY2F0Y2hTY29wZS5leGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJl
dHVybiByZWplY3QoKTsKKyAgICB9CisKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3Rh
bmNlID0gV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpjcmVhdGVJbnN0YW5jZShleGVj
LCBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KG1vZHVsZSksIGltcG9ydE9iamVjdCwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUluc3RhbmNlU3RydWN0dXJlKCkp
OworICAgIGlmIChjYXRjaFNjb3BlLmV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gcmVqZWN0
KCk7CisKKyAgICBpZiAoZmlyc3RBcmd1bWVudElzTW9kdWxlKQorICAgICAgICBwcm9taXNlLT5y
ZXNvbHZlKGV4ZWMsIGluc3RhbmNlKTsKKyAgICBlbHNlIHsKKyAgICAgICAgSlNPYmplY3QqIHJl
c3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOworICAgICAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgibW9kdWxl
IikpLCBtb2R1bGUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgiaW5zdGFuY2UiKSksIGluc3RhbmNlKTsKKyAg
ICAgICAgcHJvbWlzZS0+cmVzb2x2ZShleGVjLCByZXN1bHQpOworICAgIH0KKworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocHJvbWlzZS0+cHJvbWlzZSgpKTsKKworfQorCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpAQCAtOTksNiArMTU0LDcgQEAgdm9pZCBK
U1dlYkFzc2VtYmx5OjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgIEFTU0VSVChpbmhlcml0cyh2
bSwgaW5mbygpKSk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04o
InZhbGlkYXRlIiwgd2ViQXNzZW1ibHlWYWxpZGF0ZUZ1bmMsIERvbnRFbnVtLCAxKTsKICAgICBK
U0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTigiY29tcGlsZSIsIHdlYkFzc2Vt
Ymx5Q29tcGlsZUZ1bmMsIERvbnRFbnVtLCAxKTsKKyAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJ
VEhPVVRfVFJBTlNJVElPTigiaW5zdGFudGlhdGUiLCB3ZWJBc3NlbWJseUluc3RhbnRpYXRlRnVu
YywgRG9udEVudW0sIDEpOwogfQogCiBKU1dlYkFzc2VtYmx5OjpKU1dlYkFzc2VtYmx5KFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rv
ci5jcHAJKHJldmlzaW9uIDIxMzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3
LDMzICs1Nyw0NiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiB7
CiAgICAgYXV0byYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKTsKIAogICAgIC8vIElmIG1vZHVsZU9iamVjdCBpcyBub3QgYSBXZWJB
c3NlbWJseS5Nb2R1bGUgaW5zdGFuY2UsIGEgVHlwZUVycm9yIGlzIHRocm93bi4KICAgICBKU1dl
YkFzc2VtYmx5TW9kdWxlKiBqc01vZHVsZSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1v
ZHVsZSo+KHZtLCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKCFqc01vZHVsZSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3Bl
LCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJmaXJzdCBhcmd1bWVudCB0byBX
ZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIGEgV2ViQXNzZW1ibHkuTW9kdWxlIiksIGRlZmF1
bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShleGVjLT5hcmd1bWVudCgwKSkp
KSk7Ci0gICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9u
ID0ganNNb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7CiAKICAgICAvLyBJZiB0aGUgaW1wb3J0
T2JqZWN0IHBhcmFtZXRlciBpcyBub3QgdW5kZWZpbmVkIGFuZCBUeXBlKGltcG9ydE9iamVjdCkg
aXMgbm90IE9iamVjdCwgYSBUeXBlRXJyb3IgaXMgdGhyb3duLgogICAgIEpTVmFsdWUgaW1wb3J0
QXJndW1lbnQgPSBleGVjLT5hcmd1bWVudCgxKTsKICAgICBKU09iamVjdCogaW1wb3J0T2JqZWN0
ID0gaW1wb3J0QXJndW1lbnQuZ2V0T2JqZWN0KCk7CiAgICAgaWYgKCFpbXBvcnRBcmd1bWVudC5p
c1VuZGVmaW5lZCgpICYmICFpbXBvcnRPYmplY3QpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4
ZWMsIEFTQ0lJTGl0ZXJhbCgic2Vjb25kIGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNl
IG11c3QgYmUgdW5kZWZpbmVkIG9yIGFuIE9iamVjdCIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIs
IHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0QXJndW1lbnQpKSkpOworICAgIAorICAgIFN0cnVj
dHVyZSogaW5zdGFuY2VTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFz
c1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5XZWJBc3NlbWJseUluc3RhbmNlU3RydWN0dXJlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwge30pOworCisgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3I6
OmNyZWF0ZUluc3RhbmNlKGV4ZWMsIGpzTW9kdWxlLCBpbXBvcnRPYmplY3QsIGluc3RhbmNlU3Ry
dWN0dXJlKSk7Cit9CisKK0pTV2ViQXNzZW1ibHlJbnN0YW5jZSogV2ViQXNzZW1ibHlJbnN0YW5j
ZUNvbnN0cnVjdG9yOjpjcmVhdGVJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1i
bHlNb2R1bGUqIGpzTW9kdWxlLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBTdHJ1Y3R1cmUqIGlu
c3RhbmNlU3RydWN0dXJlKQoreworICAgIGF1dG8mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBnbG9iYWxP
YmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisKKyAgICBjb25zdCBXYXNtOjpN
b2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBqc01vZHVsZS0+bW9kdWxlSW5m
b3JtYXRpb24oKTsKIAogICAgIC8vIElmIHRoZSBsaXN0IG9mIG1vZHVsZS5pbXBvcnRzIGlzIG5v
dCBlbXB0eSBhbmQgVHlwZShpbXBvcnRPYmplY3QpIGlzIG5vdCBPYmplY3QsIGEgVHlwZUVycm9y
IGlzIHRocm93bi4KLSAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0cy5zaXplKCkgJiYg
IWltcG9ydE9iamVjdCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2Vw
dGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFs
KCJzZWNvbmQgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSBPYmplY3Qg
YmVjYXVzZSB0aGUgV2ViQXNzZW1ibHkuTW9kdWxlIGhhcyBpbXBvcnRzIiksIGRlZmF1bHRTb3Vy
Y2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShpbXBvcnRBcmd1bWVudCkpKSk7CisgICAg
aWYgKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydHMuc2l6ZSgpICYmICFpbXBvcnRPYmplY3QpIHsK
KyAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiY2FuJ3QgbWFrZSBXZWJBc3NlbWJseS5JbnN0YW5jZSBiZWNh
dXNlIHRoZXJlIGlzIG5vIGltcG9ydHMgT2JqZWN0IGFuZCB0aGUgV2ViQXNzZW1ibHkuTW9kdWxl
IHJlcXVpcmVzIGltcG9ydHMiKSkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CiAK
ICAgICBJZGVudGlmaWVyIG1vZHVsZUtleSA9IElkZW50aWZpZXI6OmZyb21VaWQoUHJpdmF0ZU5h
bWUoUHJpdmF0ZU5hbWU6OkRlc2NyaXB0aW9uLCAiV2ViQXNzZW1ibHlJbnN0YW5jZSIpKTsKICAg
ICBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkID0gV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQ6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseU1vZHVs
ZVJlY29yZFN0cnVjdHVyZSgpLCBtb2R1bGVLZXksIG1vZHVsZUluZm9ybWF0aW9uKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CiAKLSAgICBTdHJ1Y3R1cmUq
IGluc3RhbmNlU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1
Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+V2ViQXNzZW1ibHlJ
bnN0YW5jZVN0cnVjdHVyZSgpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5j
ZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBpbnN0YW5jZVN0cnVjdHVyZSwg
anNNb2R1bGUsIG1vZHVsZVJlY29yZC0+Z2V0TW9kdWxlTmFtZXNwYWNlKGV4ZWMpKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CiAKIAogICAgIC8vIExldCBm
dW5jcywgbWVtb3JpZXMgYW5kIHRhYmxlcyBiZSBpbml0aWFsbHktZW1wdHkgbGlzdHMgb2YgY2Fs
bGFibGUgSmF2YVNjcmlwdCBvYmplY3RzLCBXZWJBc3NlbWJseS5NZW1vcnkgb2JqZWN0cyBhbmQg
V2ViQXNzZW1ibHkuVGFibGUgb2JqZWN0cywgcmVzcGVjdGl2ZWx5LgpAQCAtOTcsMzAgKzExMCwz
NiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgZm9yIChh
dXRvJiBpbXBvcnQgOiBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRzKSB7CiAgICAgICAgIC8vIDEu
IExldCBvIGJlIHRoZSByZXN1bHRhbnQgdmFsdWUgb2YgcGVyZm9ybWluZyBHZXQoaW1wb3J0T2Jq
ZWN0LCBpLm1vZHVsZV9uYW1lKS4KICAgICAgICAgSlNWYWx1ZSBpbXBvcnRNb2R1bGVWYWx1ZSA9
IGltcG9ydE9iamVjdC0+Z2V0KGV4ZWMsIGltcG9ydC5tb2R1bGUpOwotICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogICAgICAgICAvLyAyLiBJZiBU
eXBlKG8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLgotICAgICAgICBpZiAoIWlt
cG9ydE1vZHVsZVZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCBBU0NJSUxpdGVyYWwoImltcG9ydCBtdXN0IGJlIGFuIG9iamVjdCIpLCBkZWZhdWx0U291
cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0TW9kdWxlVmFsdWUpKSkpOwor
ICAgICAgICBpZiAoIWltcG9ydE1vZHVsZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAg
IHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBB
U0NJSUxpdGVyYWwoImltcG9ydCBtdXN0IGJlIGFuIG9iamVjdCIpLCBkZWZhdWx0U291cmNlQXBw
ZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0TW9kdWxlVmFsdWUpKSk7CisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIDMuIExldCB2IGJl
IHRoZSB2YWx1ZSBvZiBwZXJmb3JtaW5nIEdldChvLCBpLml0ZW1fbmFtZSkKICAgICAgICAgSlNP
YmplY3QqIG9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGltcG9ydE1vZHVsZVZhbHVlKTsKICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIGltcG9ydC5maWVsZCk7Ci0g
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CiAKICAg
ICAgICAgc3dpdGNoIChpbXBvcnQua2luZCkgewogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFs
S2luZDo6RnVuY3Rpb246IHsKICAgICAgICAgICAgIC8vIDQuIElmIGkgaXMgYSBmdW5jdGlvbiBp
bXBvcnQ6CiAgICAgICAgICAgICAvLyBpLiBJZiBJc0NhbGxhYmxlKHYpIGlzIGZhbHNlLCB0aHJv
dyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KLSAgICAgICAgICAgIGlmICghdmFsdWUuaXNGdW5j
dGlvbigpKQotICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNl
cHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVj
LCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnQgZnVuY3Rpb24gbXVzdCBiZSBjYWxsYWJsZSIpKSkp
OworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlu
a0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydCBmdW5jdGlvbiBtdXN0IGJlIGNh
bGxhYmxlIikpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAg
IH0KICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwogICAgICAgICAg
ICAgLy8gaWkuIElmIHYgaXMgYW4gRXhwb3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdDoKICAg
ICAgICAgICAgIGlmIChXZWJBc3NlbWJseUZ1bmN0aW9uKiBpbXBvcnRlZEV4cG9ydCA9IGpzRHlu
YW1pY0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KHZtLCBjZWxsKSkgewogICAgICAgICAgICAg
ICAgIC8vIGEuIElmIHRoZSBzaWduYXR1cmUgb2YgdiBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0
dXJlIG9mIGksIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgogICAgICAgICAgICAgICAg
IFdhc206OlNpZ25hdHVyZUluZGV4IGltcG9ydGVkU2lnbmF0dXJlSW5kZXggPSBpbXBvcnRlZEV4
cG9ydC0+c2lnbmF0dXJlSW5kZXgoKTsKICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJ
bmRleCBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0gbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVu
Y3Rpb25TaWduYXR1cmVJbmRpY2VzW2ltcG9ydC5raW5kSW5kZXhdOwotICAgICAgICAgICAgICAg
IGlmIChpbXBvcnRlZFNpZ25hdHVyZUluZGV4ICE9IGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24o
ZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwg
QVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBmdW5jdGlvbidzIHNpZ25hdHVyZSBkb2Vzbid0IG1hdGNo
IHRoZSBwcm92aWRlZCBXZWJBc3NlbWJseSBmdW5jdGlvbidzIHNpZ25hdHVyZSIpKSkpOworICAg
ICAgICAgICAgICAgIGlmIChpbXBvcnRlZFNpZ25hdHVyZUluZGV4ICE9IGV4cGVjdGVkU2lnbmF0
dXJlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhy
b3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRl
cmFsKCJpbXBvcnRlZCBmdW5jdGlvbidzIHNpZ25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBwcm92
aWRlZCBXZWJBc3NlbWJseSBmdW5jdGlvbidzIHNpZ25hdHVyZSIpKSk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAvLyBiLiBMZXQgY2xvc3VyZSBiZSB2LltbQ2xvc3VyZV1dLgogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgLy8gaWlpLiBPdGhlcndpc2U6CkBAIC0xMzgsMjMgKzE1NywyNyBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgICAgICBoYXNUYWJsZUlt
cG9ydCA9IHRydWU7CiAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0ganNE
eW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5VGFibGUqPih2bSwgdmFsdWUpOwogICAgICAgICAgICAg
Ly8gaS4gSWYgdiBpcyBub3QgYSBXZWJBc3NlbWJseS5UYWJsZSBvYmplY3QsIHRocm93IGEgV2Vi
QXNzZW1ibHkuTGlua0Vycm9yLgotICAgICAgICAgICAgaWYgKCF0YWJsZSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2Nv
cGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgi
VGFibGUgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5UYWJsZSIpKSkp
OworICAgICAgICAgICAgaWYgKCF0YWJsZSkgeworICAgICAgICAgICAgICAgIHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywg
dm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJB
c3NlbWJseS5UYWJsZSIpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIHVpbnQzMl90IGV4cGVjdGVkSW5pdGlhbCA9IG1vZHVs
ZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgpOwogICAgICAgICAgICAgdWlu
dDMyX3QgYWN0dWFsSW5pdGlhbCA9IHRhYmxlLT5zaXplKCk7Ci0gICAgICAgICAgICBpZiAoYWN0
dWFsSW5pdGlhbCA8IGV4cGVjdGVkSW5pdGlhbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2Vi
QXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IHBy
b3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRvbyBzbWFsbCIpKSkpOworICAgICAgICAgICAg
aWYgKGFjdHVhbEluaXRpYWwgPCBleHBlY3RlZEluaXRpYWwpIHsKKyAgICAgICAgICAgICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vy
cm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBwcm92aWRlZCBhbiAnaW5p
dGlhbCcgdGhhdCBpcyB0b28gc21hbGwiKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50
MzJfdD4gZXhwZWN0ZWRNYXhpbXVtID0gbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlv
bi5tYXhpbXVtKCkpIHsKICAgICAgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBh
Y3R1YWxNYXhpbXVtID0gdGFibGUtPm1heGltdW0oKTsKICAgICAgICAgICAgICAgICBpZiAoIWFj
dHVhbE1heGltdW0pIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2Nv
cGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgi
VGFibGUgaW1wb3J0IGRvZXMgbm90IGhhdmUgYSAnbWF4aW11bScgYnV0IHRoZSBtb2R1bGUgcmVx
dWlyZXMgdGhhdCBpdCBkb2VzIikpKSk7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywg
dm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IGRvZXMgbm90IGhhdmUgYSAnbWF4aW11bScg
YnV0IHRoZSBtb2R1bGUgcmVxdWlyZXMgdGhhdCBpdCBkb2VzIikpKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGlmICgqYWN0dWFsTWF4aW11bSA+ICpleHBlY3RlZE1heGltdW0pIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIHRo
cm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJy
b3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiSW1wb3J0ZWQgVGFibGUncyAnbWF4aW11bScgaXMg
bGFyZ2VyIHRoYW4gdGhlIG1vZHVsZSdzIGV4cGVjdGVkICdtYXhpbXVtJyIpKSkpOworICAgICAg
ICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dl
YkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIkltcG9ydGVkIFRhYmxl
J3MgJ21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1bGUncyBleHBlY3RlZCAnbWF4aW11
bSciKSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTE3MCwzMSArMTkzLDM1IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgICAgIGhhc01lbW9yeUltcG9y
dCA9IHRydWU7CiAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSBqc0R5
bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNZW1vcnkqPih2bSwgdmFsdWUpOwogICAgICAgICAgICAg
Ly8gaS4gSWYgdiBpcyBub3QgYSBXZWJBc3NlbWJseS5NZW1vcnkgb2JqZWN0LCB0aHJvdyBhIFdl
YkFzc2VtYmx5LkxpbmtFcnJvci4KLSAgICAgICAgICAgIGlmICghbWVtb3J5KQotICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFs
KCJNZW1vcnkgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnki
KSkpKTsKKyAgICAgICAgICAgIGlmICghbWVtb3J5KSB7CisgICAgICAgICAgICAgICAgdGhyb3dF
eGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihl
eGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBv
ZiBXZWJBc3NlbWJseS5NZW1vcnkiKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgZXhwZWN0ZWRJ
bml0aWFsID0gbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmluaXRpYWwoKTsKICAgICAgICAgICAg
IFdhc206OlBhZ2VDb3VudCBhY3R1YWxJbml0aWFsID0gbWVtb3J5LT5tZW1vcnkoKS5pbml0aWFs
KCk7Ci0gICAgICAgICAgICBpZiAoYWN0dWFsSW5pdGlhbCA8IGV4cGVjdGVkSW5pdGlhbCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMs
IHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJ
TGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0b28g
c21hbGwiKSkpKTsKKyAgICAgICAgICAgIGlmIChhY3R1YWxJbml0aWFsIDwgZXhwZWN0ZWRJbml0
aWFsKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwg
Y3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1v
cnkgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRvbyBzbWFsbCIpKSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIGlmIChXYXNtOjpQYWdlQ291bnQgZXhwZWN0ZWRNYXhpbXVtID0gbW9kdWxlSW5mb3JtYXRp
b24ubWVtb3J5Lm1heGltdW0oKSkgewogICAgICAgICAgICAgICAgIFdhc206OlBhZ2VDb3VudCBh
Y3R1YWxNYXhpbXVtID0gbWVtb3J5LT5tZW1vcnkoKS5tYXhpbXVtKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKCFhY3R1YWxNYXhpbXVtKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVj
LCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJ
SUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgZGlkIG5vdCBoYXZlIGEgJ21heGltdW0nIGJ1dCB0aGUg
bW9kdWxlIHJlcXVpcmVzIHRoYXQgaXQgZG9lcyIpKSkpOworICAgICAgICAgICAgICAgICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vy
cm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgZGlkIG5vdCBoYXZlIGEg
J21heGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVzIHRoYXQgaXQgZG9lcyIpKSk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgICAgIGlmIChhY3R1YWxNYXhpbXVtID4gZXhwZWN0ZWRNYXhpbXVtKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoCi0gICAgICAgICAgICAgICAg
ICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnRzICdtYXhp
bXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGltdW0nIikpKSk7
CisgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNy
ZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5
IGltcG9ydHMgJ21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1bGUncyBleHBlY3RlZCAn
bWF4aW11bSciKSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIGlpLiBBcHBlbmQg
diB0byBtZW1vcmllcy4KICAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYuW1tNZW1vcnldXSB0
byBpbXBvcnRzLgogICAgICAgICAgICAgaW5zdGFuY2UtPnNldE1lbW9yeSh2bSwgZXhlYywgbWVt
b3J5KTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IG51bGxwdHIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBX
YXNtOjpFeHRlcm5hbEtpbmQ6Okdsb2JhbDogewpAQCAtMjAyLDEwICsyMjksMTQgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICAgICAgLy8gaS4gSWYg
aSBpcyBub3QgYW4gaW1tdXRhYmxlIGdsb2JhbCwgdGhyb3cgYSBUeXBlRXJyb3IuCiAgICAgICAg
ICAgICBBU1NFUlQobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQua2luZEluZGV4XS5t
dXRhYmlsaXR5ID09IFdhc206Okdsb2JhbDo6SW1tdXRhYmxlKTsKICAgICAgICAgICAgIC8vIGlp
LiBJZiB0aGUgZ2xvYmFsX3R5cGUgb2YgaSBpcyBpNjQgb3IgVHlwZSh2KSBpcyBub3QgTnVtYmVy
LCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KLSAgICAgICAgICAgIGlmIChtb2R1bGVJ
bmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLnR5cGUgPT0gV2FzbTo6STY0KQot
ICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhl
YywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVND
SUlMaXRlcmFsKCJpbXBvcnRlZCBnbG9iYWwgY2Fubm90IGJlIGFuIGk2NCIpKSkpOwotICAgICAg
ICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJB
c3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBnbG9iYWwg
bXVzdCBiZSBhIG51bWJlciIpKSkpOworICAgICAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9u
Lmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0udHlwZSA9PSBXYXNtOjpJNjQpIHsKKyAgICAgICAg
ICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydGVkIGdsb2JhbCBjYW5u
b3QgYmUgYW4gaTY0IikpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkgeworICAgICAgICAg
ICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1i
bHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZ2xvYmFsIG11c3Qg
YmUgYSBudW1iZXIiKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgLy8gaWlpLiBBcHBlbmQgVG9XZWJBc3NlbWJseVZhbHVlKHYp
IHRvIGltcG9ydHMuCiAgICAgICAgICAgICBzd2l0Y2ggKG1vZHVsZUluZm9ybWF0aW9uLmdsb2Jh
bHNbaW1wb3J0LmtpbmRJbmRleF0udHlwZSkgewogICAgICAgICAgICAgY2FzZSBXYXNtOjpJMzI6
CkBAIC0yNDAsMTIgKzI3MSwxNCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zCiAgICAgICAgICAgICAgICAgbWVtb3J5ID0ganNNb2R1bGUtPnRha2VSZXNlcnZlZE1l
bW9yeSgpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgbWVtb3J5ID0gV2Fz
bTo6TWVtb3J5OjpjcmVhdGUodm0sIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCks
IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkpOwotICAgICAgICAgICAgICAgIGlm
ICghbWVtb3J5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRo
cm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhl
YykpKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1lbW9yeSkgeworICAgICAgICAgICAgICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9y
KGV4ZWMpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaW5zdGFuY2UtPnNldE1lbW9yeSh2
bSwgZXhlYywKICAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0s
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUo
KSwgbWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogICAgICAgICB9CiAgICAgfQogCkBA
IC0yODgsMTUgKzMyMSwxNSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zCiAgICAgfQogCiAgICAgbW9kdWxlUmVjb3JkLT5saW5rKGV4ZWMsIGluc3RhbmNlKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CiAKICAgICBpZiAodmVy
Ym9zZSkKICAgICAgICAgbW9kdWxlUmVjb3JkLT5kdW1wKCk7CiAgICAgSlNWYWx1ZSBzdGFydFJl
c3VsdCA9IG1vZHVsZVJlY29yZC0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXJ0UmVzdWx0KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7
CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGluc3RhbmNlKTsKKyAgICByZXR1cm4gaW5z
dGFuY2U7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dl
YkFzc2VtYmx5SW5zdGFuY2UoRXhlY1N0YXRlKiBzdGF0ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VD
b25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAyMTM0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSlNXZWJBc3NlbWJs
eU1vZHVsZTsKIGNsYXNzIFdlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGU7CiAKIGNsYXNzIFdl
YkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsK
QEAgLTQ0LDYgKzQ1LDggQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogCisgICAgc3Rh
dGljIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogY3JlYXRlSW5zdGFuY2UoRXhlY1N0YXRlKiwgSlNX
ZWJBc3NlbWJseU1vZHVsZSosIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFN0cnVjdHVyZSopOwor
CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFdlYkFzc2VtYmx5SW5z
dGFuY2VQcm90b3R5cGUqKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDIxMzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICBhdXRvKiBzdHJ1
Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBl
eGVjLT5uZXdUYXJnZXQoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJs
eU1vZHVsZVN0cnVjdHVyZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9k
dWxlKGV4ZWMsIHN0cnVjdHVyZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoV2ViQXNz
ZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50
KDApLCBzdHJ1Y3R1cmUpKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY2FsbEpTV2ViQXNzZW1ibHlNb2R1bGUoRXhlY1N0YXRlKiBzdGF0ZSkKQEAgLTcwLDE0ICs3
MCwxNCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0
aW9uVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIldlYkFzc2VtYmx5Lk1vZHVsZSIpKTsKIH0KIAot
SlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoRXhlY1N0
YXRlKiBzdGF0ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitKU1ZhbHVlIFdlYkFzc2VtYmx5TW9k
dWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIG1h
eWJlQnVmZmVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBz
aXplX3QgYnl0ZU9mZnNldDsKICAgICBzaXplX3QgYnl0ZVNpemU7Ci0gICAgdWludDhfdCogYmFz
ZSA9IGdldFdhc21CdWZmZXJGcm9tVmFsdWUoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgYnl0
ZU9mZnNldCwgYnl0ZVNpemUpOworICAgIHVpbnQ4X3QqIGJhc2UgPSBnZXRXYXNtQnVmZmVyRnJv
bVZhbHVlKHN0YXRlLCBtYXliZUJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBzY29wZS5yZWxlYXNlKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0
cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAyMTM0MzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZP
OwogCi0gICAgc3RhdGljIEpTVmFsdWUgY3JlYXRlTW9kdWxlKEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSopOworICAgIHN0YXRpYyBKU1ZhbHVlIGNyZWF0ZU1vZHVsZShFeGVjU3RhdGUqLCBKU1ZhbHVl
LCBTdHJ1Y3R1cmUqKTsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
LCBXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZSopOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303464</attachid>
            <date>2017-03-05 14:01:56 -0800</date>
            <delta_ts>2017-03-06 13:59:54 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>31665</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTM0MzcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2IEBACisyMDE3LTAzLTA1ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBJbXBsZW1lbnQgdGhlIFdlYkFzc2VtYmx5Lmlu
c3RhbnRpYXRlIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY1OTgyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yOTc2MDExMD4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdhc20vanMtYXBpL3dl
Yi1hc3NlbWJseS1pbnN0YW50aWF0ZS5qczogQWRkZWQuCisgICAgICAgIChhc3luYy50ZXN0KToK
KyAgICAgICAgKGFzc2VydC50cnV0aHkuYXN5bmMudGVzdCk6CisgICAgICAgIChhc3NlcnQudHJ1
dGh5KToKKwogMjAxNy0wMy0wMiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNv
bT4KIAogICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uIHNob3VsZCBoYXZlIEZ1bmN0aW9uLnBy
b3RvdHlwZSBhcyBpdHMgcHJvdG90eXBlCkluZGV4OiBKU1Rlc3RzL3dhc20vanMtYXBpL3dlYi1h
c3NlbWJseS1pbnN0YW50aWF0ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vanMtYXBp
L3dlYi1hc3NlbWJseS1pbnN0YW50aWF0ZS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3dh
c20vanMtYXBpL3dlYi1hc3NlbWJseS1pbnN0YW50aWF0ZS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDIxOSBAQAoraW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7Citp
bXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKKworYXNzZXJ0LnRydXRoeShXZWJB
c3NlbWJseS5pbnN0YW50aWF0ZSBpbnN0YW5jZW9mIEZ1bmN0aW9uKTsKK2Fzc2VydC5lcShXZWJB
c3NlbWJseS5pbnN0YW50aWF0ZS5sZW5ndGgsIDEpOworCit7CisgICAgY29uc3QgYnVpbGRlciA9
IChuZXcgQnVpbGRlcigpKQorICAgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgICAuRnVu
Y3Rpb24oKS5FbmQoKQorICAgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgICAuRnVuY3Rp
b24oImZvbyIpCisgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgLkNvZGUoKQorICAgICAgICAg
ICAgICAuRnVuY3Rpb24oImZvbyIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAg
ICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAg
IC5FbmQoKTsKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsK
KworICAgIGxldCBkb25lID0gZmFsc2U7CisgICAgYXN5bmMgZnVuY3Rpb24gdGVzdCgpIHsKKyAg
ICAgICAgbGV0IHttb2R1bGUsIGluc3RhbmNlfSA9IGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRp
YXRlKGJpbik7CisgICAgICAgIGFzc2VydC50cnV0aHkobW9kdWxlIGluc3RhbmNlb2YgV2ViQXNz
ZW1ibHkuTW9kdWxlKTsKKyAgICAgICAgYXNzZXJ0LnRydXRoeShpbnN0YW5jZSBpbnN0YW5jZW9m
IFdlYkFzc2VtYmx5Lkluc3RhbmNlKTsKKyAgICAgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9y
dHMuZm9vKDIwKSwgMSk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH0KKworICAgIHRlc3Qo
KTsKKyAgICBkcmFpbk1pY3JvdGFza3MoKTsKKyAgICBhc3NlcnQudHJ1dGh5KGRvbmUpOworfQor
Cit7CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAgIC5UeXBl
KCkuRW5kKCkKKyAgICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAgIC5FeHBvcnQo
KQorICAgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgICAgLkVuZCgpCisgICAg
ICAgICAgLkNvZGUoKQorICAgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHsgcGFyYW1zOiBb
XSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAg
ICAgICAgIC5FbmQoKQorICAgICAgICAgIC5FbmQoKTsKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKworICAgIGxldCBkb25lID0gZmFsc2U7CisgICAgYXN5
bmMgZnVuY3Rpb24gdGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGxldCB7bW9k
dWxlLCBpbnN0YW5jZX0gPSBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIG51bGwp
OworICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2Us
ICJzZWNvbmQgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUgbXVzdCBiZSB1bmRl
ZmluZWQgb3IgYW4gT2JqZWN0IChldmFsdWF0aW5nICdXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShi
aW4sIG51bGwpJykiKTsKKyAgICAgICAgfQorICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9CisK
KyAgICB0ZXN0KCk7CisgICAgZHJhaW5NaWNyb3Rhc2tzKCk7CisgICAgYXNzZXJ0LnRydXRoeShk
b25lKTsKK30KKworeworICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAg
ICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAg
ICAuRXhwb3J0KCkKKyAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAgIC5F
bmQoKQorICAgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7
IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAgIC5GMzJDb25zdCgx
KQorICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAuRW5kKCk7CisKKyAgICBjb25zdCBi
aW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisKKyAgICBsZXQgZG9uZSA9IGZhbHNl
OworICAgIGFzeW5jIGZ1bmN0aW9uIHRlc3QoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICBsZXQge21vZHVsZSwgaW5zdGFuY2V9ID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUo
YmluKTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICBhc3NlcnQudHJ1dGh5KGUg
aW5zdGFuY2VvZiBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IpOworICAgICAgICAgICAgYXNzZXJ0
LmVxKGUubWVzc2FnZSwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHZhbGlkYXRlOiBjb250
cm9sIGZsb3cgcmV0dXJucyB3aXRoIHVuZXhwZWN0ZWQgdHlwZSwgaW4gZnVuY3Rpb24gYXQgaW5k
ZXggMCAoZXZhbHVhdGluZyAnV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluKScpIik7CisgICAg
ICAgIH0KKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfQorCisgICAgdGVzdCgpOworICAgIGRy
YWluTWljcm90YXNrcygpOworICAgIGFzc2VydC50cnV0aHkoZG9uZSk7Cit9CisKK3sKKyAgICBj
b25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgICAgLlR5cGUoKS5FbmQoKQor
ICAgICAgICAgIC5JbXBvcnQoKS5NZW1vcnkoImltcCIsICJtZW1vcnkiLCB7aW5pdGlhbDoxMDB9
KS5FbmQoKQorICAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgICAgLkV4cG9ydCgp
CisgICAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgICAuQ29kZSgpCisgICAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgeyBwYXJhbXM6IFtd
LCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgICAgLkVuZCgpOworCisgICAgY29uc3QgYmluID0gYnVpbGRl
ci5XZWJBc3NlbWJseSgpLmdldCgpOworCisgICAgbGV0IGRvbmUgPSBmYWxzZTsKKyAgICBhc3lu
YyBmdW5jdGlvbiB0ZXN0KCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbGV0IHttb2R1
bGUsIGluc3RhbmNlfSA9IGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGJpbiwge2ltcDog
e21lbW9yeTogMjB9fSk7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgYXNzZXJ0
LmVxKGUubWVzc2FnZSwgIk1lbW9yeSBpbXBvcnQgaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFz
c2VtYmx5Lk1lbW9yeSAoZXZhbHVhdGluZyAnV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluLCB7
aW1wOiB7bWVtb3J5OiAyMH19KScpIik7CisgICAgICAgIH0KKyAgICAgICAgZG9uZSA9IHRydWU7
CisgICAgfQorCisgICAgdGVzdCgpOworICAgIGRyYWluTWljcm90YXNrcygpOworICAgIGFzc2Vy
dC50cnV0aHkoZG9uZSk7Cit9CisKK3sKKyAgICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVy
KCkpCisgICAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAgIC5JbXBvcnQoKS5NZW1vcnko
ImltcCIsICJtZW1vcnkiLCB7aW5pdGlhbDoxMDB9KS5FbmQoKQorICAgICAgICAgIC5GdW5jdGlv
bigpLkVuZCgpCisgICAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAgIC5GdW5jdGlvbigi
Zm9vIikKKyAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAg
IC5GdW5jdGlvbigiZm9vIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAg
ICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgLkVu
ZCgpOworCisgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworCisg
ICAgbGV0IGRvbmUgPSBmYWxzZTsKKyAgICBhc3luYyBmdW5jdGlvbiB0ZXN0KCkgeworICAgICAg
ICB0cnkgeworICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShiaW4pOworICAgICAgICAgICAgbGV0IGluc3RhbmNlID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5z
dGFudGlhdGUoYmluLCB7aW1wOiB7bWVtb3J5OiAyMH19KTsKKyAgICAgICAgfSBjYXRjaChlKSB7
CisgICAgICAgICAgICBhc3NlcnQuZXEoZS5tZXNzYWdlLCAiTWVtb3J5IGltcG9ydCBpcyBub3Qg
YW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuTWVtb3J5IChldmFsdWF0aW5nICdXZWJBc3NlbWJs
eS5pbnN0YW50aWF0ZShiaW4sIHtpbXA6IHttZW1vcnk6IDIwfX0pJykiKTsKKyAgICAgICAgfQor
ICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9CisKKyAgICB0ZXN0KCk7CisgICAgZHJhaW5NaWNy
b3Rhc2tzKCk7CisgICAgYXNzZXJ0LnRydXRoeShkb25lKTsKK30KKworeworICAgIGNvbnN0IGJ1
aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAg
ICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgICAg
LkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAgIC5FbmQoKQorICAgICAgICAgIC5Db2RlKCkKKyAg
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkK
KyAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgICAuRW5kKCk7CisKKyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCku
Z2V0KCk7CisKKyAgICBsZXQgZG9uZSA9IGZhbHNlOworICAgIGFzeW5jIGZ1bmN0aW9uIHRlc3Qo
KSB7CisgICAgICAgIGxldCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7Cisg
ICAgICAgIGxldCBpbnN0YW5jZSA9IGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKG1vZHVs
ZSk7CisgICAgICAgIGFzc2VydC50cnV0aHkoaW5zdGFuY2UgaW5zdGFuY2VvZiBXZWJBc3NlbWJs
eS5JbnN0YW5jZSk7CisgICAgICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmZvbygyMCks
IDEpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9CisKKyAgICB0ZXN0KCk7CisgICAgZHJh
aW5NaWNyb3Rhc2tzKCk7CisgICAgYXNzZXJ0LnRydXRoeShkb25lKTsKK30KKworeworICAgIGNv
bnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgICAuVHlwZSgpLkVuZCgpCisg
ICAgICAgICAgLkltcG9ydCgpLk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIHtpbml0aWFsOjEwMH0p
LkVuZCgpCisgICAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAuRXhwb3J0KCkK
KyAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAgIC5Db2RlKCkKKyAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7IHBhcmFtczogW10s
IHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAg
ICAgICAuRW5kKCkKKyAgICAgICAgICAuRW5kKCk7CisKKyAgICBjb25zdCBiaW4gPSBidWlsZGVy
LldlYkFzc2VtYmx5KCkuZ2V0KCk7CisKKyAgICBsZXQgZG9uZSA9IGZhbHNlOworICAgIGFzeW5j
IGZ1bmN0aW9uIHRlc3QoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBhd2FpdCBXZWJB
c3NlbWJseS5pbnN0YW50aWF0ZSgyNSk7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAg
ICAgLy8gRklYTUU6IEJldHRlciBlcnJvciBtZXNzYWdlIGhlcmUuCisgICAgICAgICAgICBhc3Nl
cnQuZXEoZS5tZXNzYWdlLCAiZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheUJ1ZmZlclZp
ZXcgb3IgYW4gQXJyYXlCdWZmZXIgKGV2YWx1YXRpbmcgJ1dlYkFzc2VtYmx5Lmluc3RhbnRpYXRl
KDI1KScpIik7CisgICAgICAgIH0KKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfQorCisgICAg
dGVzdCgpOworICAgIGRyYWluTWljcm90YXNrcygpOworICAgIGFzc2VydC50cnV0aHkoZG9uZSk7
Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzQzNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
MCBAQAorMjAxNy0wMy0wNSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAg
ICAgICBXZWJBc3NlbWJseTogSW1wbGVtZW50IHRoZSBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZSBB
UEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTk4
MgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjk3NjAxMTA+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0IGZv
cndhcmQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlCisgICAg
ICAgIEFQSTogaHR0cHM6Ly9naXRodWIuY29tL1dlYkFzc2VtYmx5L2Rlc2lnbi9ibG9iL21hc3Rl
ci9KUy5tZCN3ZWJhc3NlbWJseWluc3RhbnRpYXRlCisgICAgICAgIAorICAgICAgICBJIGltcGxl
bWVudGVkIHRoZSBBUEkgaW4gYSBzeW5jaHJvbm91cyBtYW5uZXIuIFdlIHNob3VsZCBtYWtlIGl0
CisgICAgICAgIGFzeW5jaHJvbm91czogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2OTE4NworCisgICAgICAgICogd2FzbS9KU1dlYkFzc2VtYmx5LmNwcDoKKyAgICAg
ICAgKEpTQzo6d2ViQXNzZW1ibHlDb21waWxlRnVuYyk6CisgICAgICAgIChKU0M6OndlYkFzc2Vt
Ymx5SW5zdGFudGlhdGVGdW5jKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseTo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKToK
KyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpjcmVhdGVJbnN0
YW5jZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3Iu
aDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TW9kdWxlKToKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKToKKyAgICAgICAg
KiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaDoKKwogMjAxNy0wMy0wNSAg
WXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDT25s
eV1bR1RLXSBTdXBwcmVzcyB3YXJuaW5ncyBvbiByZXR1cm4gdHlwZSBpbiBCMyBhbmQgV0FTTQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAJKHJl
dmlzaW9uIDIxMzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1i
bHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTUHJvbWlzZURlZmVycmVkLmgiCiAjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUhlbHBlcnMuaCIKKyNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1
ZGUgIldhc21QbGFuLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5o
IgogCkBAIC00Miw2ICs0Myw3IEBAIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNU
SUJMRSgKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVZhbGlkYXRl
RnVuYyhFeGVjU3RhdGUqKTsKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1i
bHlDb21waWxlRnVuYyhFeGVjU3RhdGUqKTsKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
d2ViQXNzZW1ibHlJbnN0YW50aWF0ZUZ1bmMoRXhlY1N0YXRlKik7CiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlDb21waWxlRnVuYyhFeGVjU3RhdGUqIGV4ZWMpCiB7
CkBAIC01Myw3ICs1NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1i
bHkKIAogICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgdHJ1bHkgYXN5bmNocm9ub3VzOgogICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYwMTYKLSAgICBKU1Zh
bHVlIG1vZHVsZSA9IFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShl
eGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TW9kdWxlU3RydWN0
dXJlKCkpOworICAgIEpTVmFsdWUgbW9kdWxlID0gV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rv
cjo6Y3JlYXRlTW9kdWxlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TW9kdWxlU3RydWN0dXJlKCkpOwogICAgIGlmIChFeGNl
cHRpb24qIGV4Y2VwdGlvbiA9IGNhdGNoU2NvcGUuZXhjZXB0aW9uKCkpIHsKICAgICAgICAgY2F0
Y2hTY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICBwcm9taXNlLT5yZWplY3QoZXhlYywg
ZXhjZXB0aW9uLT52YWx1ZSgpKTsKQEAgLTY0LDYgKzY2LDYwIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgd2ViQXNzZW1ibHkKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb21p
c2UtPnByb21pc2UoKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNz
ZW1ibHlJbnN0YW50aWF0ZUZ1bmMoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBjYXRjaFNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7
CisKKyAgICAvLyBGSVhNRTogTWFrZSB0aGlzIEFQSSB0cnVseSBhc3luY2hyb25vdXM6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjkxODcKKworICAgIEpTUHJvbWlz
ZURlZmVycmVkKiBwcm9taXNlID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oY2F0Y2hT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisKKyAgICBhdXRvIHJlamVjdCA9IFsmXSAoKSB7Cisg
ICAgICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gY2F0Y2hTY29wZS5leGNlcHRpb24oKTsKKyAg
ICAgICAgQVNTRVJUKGV4Y2VwdGlvbik7CisgICAgICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKKyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbi0+dmFsdWUoKSk7
CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocHJvbWlzZS0+cHJvbWlzZSgpKTsKKyAg
ICB9OworCisgICAgSlNWYWx1ZSBpbXBvcnRBcmd1bWVudCA9IGV4ZWMtPmFyZ3VtZW50KDEpOwor
ICAgIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QgPSBpbXBvcnRBcmd1bWVudC5nZXRPYmplY3QoKTsK
KyAgICBpZiAoIWltcG9ydEFyZ3VtZW50LmlzVW5kZWZpbmVkKCkgJiYgIWltcG9ydE9iamVjdCkg
eworICAgICAgICBwcm9taXNlLT5yZWplY3QoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsCisg
ICAgICAgICAgICBBU0NJSUxpdGVyYWwoInNlY29uZCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5p
bnN0YW50aWF0ZSBtdXN0IGJlIHVuZGVmaW5lZCBvciBhbiBPYmplY3QiKSwgZGVmYXVsdFNvdXJj
ZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydEFyZ3VtZW50KSkpOworICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb21pc2UtPnByb21pc2UoKSk7CisgICAgfQorCisg
ICAgSlNWYWx1ZSBmaXJzdEFyZ3VtZW50ID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgSlNWYWx1
ZSBtb2R1bGU7CisgICAgYm9vbCBmaXJzdEFyZ3VtZW50SXNNb2R1bGUgPSBmYWxzZTsKKyAgICBp
ZiAoZmlyc3RBcmd1bWVudC5pbmhlcml0cyh2bSwgSlNXZWJBc3NlbWJseU1vZHVsZTo6aW5mbygp
KSkgeworICAgICAgICBmaXJzdEFyZ3VtZW50SXNNb2R1bGUgPSB0cnVlOworICAgICAgICBtb2R1
bGUgPSBmaXJzdEFyZ3VtZW50OworICAgIH0gZWxzZSB7CisgICAgICAgIG1vZHVsZSA9IFdlYkFz
c2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShleGVjLCBmaXJzdEFyZ3VtZW50
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TW9kdWxlU3RydWN0dXJl
KCkpOworICAgICAgICBpZiAoY2F0Y2hTY29wZS5leGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJl
dHVybiByZWplY3QoKTsKKyAgICB9CisKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3Rh
bmNlID0gV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpjcmVhdGVJbnN0YW5jZShleGVj
LCBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KG1vZHVsZSksIGltcG9ydE9iamVjdCwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUluc3RhbmNlU3RydWN0dXJlKCkp
OworICAgIGlmIChjYXRjaFNjb3BlLmV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gcmVqZWN0
KCk7CisKKyAgICBpZiAoZmlyc3RBcmd1bWVudElzTW9kdWxlKQorICAgICAgICBwcm9taXNlLT5y
ZXNvbHZlKGV4ZWMsIGluc3RhbmNlKTsKKyAgICBlbHNlIHsKKyAgICAgICAgSlNPYmplY3QqIHJl
c3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOworICAgICAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgibW9kdWxl
IikpLCBtb2R1bGUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgiaW5zdGFuY2UiKSksIGluc3RhbmNlKTsKKyAg
ICAgICAgcHJvbWlzZS0+cmVzb2x2ZShleGVjLCByZXN1bHQpOworICAgIH0KKworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocHJvbWlzZS0+cHJvbWlzZSgpKTsKK30KKwogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyhFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKQEAgLTk5LDYgKzE1NSw3IEBAIHZvaWQgSlNX
ZWJBc3NlbWJseTo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICBBU1NFUlQoaW5oZXJpdHModm0s
IGluZm8oKSkpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKCJ2
YWxpZGF0ZSIsIHdlYkFzc2VtYmx5VmFsaWRhdGVGdW5jLCBEb250RW51bSwgMSk7CiAgICAgSlND
X05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04oImNvbXBpbGUiLCB3ZWJBc3NlbWJs
eUNvbXBpbGVGdW5jLCBEb250RW51bSwgMSk7CisgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRI
T1VUX1RSQU5TSVRJT04oImluc3RhbnRpYXRlIiwgd2ViQXNzZW1ibHlJbnN0YW50aWF0ZUZ1bmMs
IERvbnRFbnVtLCAxKTsKIH0KIAogSlNXZWJBc3NlbWJseTo6SlNXZWJBc3NlbWJseShWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiAyMTM0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nywz
MyArNTcsNDYgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogewog
ICAgIGF1dG8mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCk7CiAKICAgICAvLyBJZiBtb2R1bGVPYmplY3QgaXMgbm90IGEgV2ViQXNz
ZW1ibHkuTW9kdWxlIGluc3RhbmNlLCBhIFR5cGVFcnJvciBpcyB0aHJvd24uCiAgICAgSlNXZWJB
c3NlbWJseU1vZHVsZSoganNNb2R1bGUgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1
bGUqPih2bSwgZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmICghanNNb2R1bGUpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiZmlyc3QgYXJndW1lbnQgdG8gV2Vi
QXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSBhIFdlYkFzc2VtYmx5Lk1vZHVsZSIpLCBkZWZhdWx0
U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoZXhlYy0+YXJndW1lbnQoMCkpKSkp
OwotICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9
IGpzTW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpOwogCiAgICAgLy8gSWYgdGhlIGltcG9ydE9i
amVjdCBwYXJhbWV0ZXIgaXMgbm90IHVuZGVmaW5lZCBhbmQgVHlwZShpbXBvcnRPYmplY3QpIGlz
IG5vdCBPYmplY3QsIGEgVHlwZUVycm9yIGlzIHRocm93bi4KICAgICBKU1ZhbHVlIGltcG9ydEFy
Z3VtZW50ID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAgSlNPYmplY3QqIGltcG9ydE9iamVjdCA9
IGltcG9ydEFyZ3VtZW50LmdldE9iamVjdCgpOwogICAgIGlmICghaW1wb3J0QXJndW1lbnQuaXNV
bmRlZmluZWQoKSAmJiAhaW1wb3J0T2JqZWN0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVj
LCBBU0NJSUxpdGVyYWwoInNlY29uZCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBt
dXN0IGJlIHVuZGVmaW5lZCBvciBhbiBPYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBy
dW50aW1lVHlwZUZvclZhbHVlKGltcG9ydEFyZ3VtZW50KSkpKTsKKyAgICAKKyAgICBTdHJ1Y3R1
cmUqIGluc3RhbmNlU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NT
dHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+V2ViQXNzZW1ibHlJbnN0YW5jZVN0cnVjdHVyZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHt9KTsKKworICAgIHRocm93U2NvcGUucmVsZWFzZSgpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpj
cmVhdGVJbnN0YW5jZShleGVjLCBqc01vZHVsZSwgaW1wb3J0T2JqZWN0LCBpbnN0YW5jZVN0cnVj
dHVyZSkpOworfQorCitKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIFdlYkFzc2VtYmx5SW5zdGFuY2VD
b25zdHJ1Y3Rvcjo6Y3JlYXRlSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5
TW9kdWxlKiBqc01vZHVsZSwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgU3RydWN0dXJlKiBpbnN0
YW5jZVN0cnVjdHVyZSkKK3sKKyAgICBhdXRvJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogZ2xvYmFsT2Jq
ZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworCisgICAgY29uc3QgV2FzbTo6TW9k
dWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0ganNNb2R1bGUtPm1vZHVsZUluZm9y
bWF0aW9uKCk7CiAKICAgICAvLyBJZiB0aGUgbGlzdCBvZiBtb2R1bGUuaW1wb3J0cyBpcyBub3Qg
ZW1wdHkgYW5kIFR5cGUoaW1wb3J0T2JqZWN0KSBpcyBub3QgT2JqZWN0LCBhIFR5cGVFcnJvciBp
cyB0aHJvd24uCi0gICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydHMuc2l6ZSgpICYmICFp
bXBvcnRPYmplY3QpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRp
b24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgi
c2Vjb25kIGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgT2JqZWN0IGJl
Y2F1c2UgdGhlIFdlYkFzc2VtYmx5Lk1vZHVsZSBoYXMgaW1wb3J0cyIpLCBkZWZhdWx0U291cmNl
QXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0QXJndW1lbnQpKSkpOworICAgIGlm
IChtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRzLnNpemUoKSAmJiAhaW1wb3J0T2JqZWN0KSB7Cisg
ICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCBBU0NJSUxpdGVyYWwoImNhbid0IG1ha2UgV2ViQXNzZW1ibHkuSW5zdGFuY2UgYmVjYXVz
ZSB0aGVyZSBpcyBubyBpbXBvcnRzIE9iamVjdCBhbmQgdGhlIFdlYkFzc2VtYmx5Lk1vZHVsZSBy
ZXF1aXJlcyBpbXBvcnRzIikpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQogCiAg
ICAgSWRlbnRpZmllciBtb2R1bGVLZXkgPSBJZGVudGlmaWVyOjpmcm9tVWlkKFByaXZhdGVOYW1l
KFByaXZhdGVOYW1lOjpEZXNjcmlwdGlvbiwgIldlYkFzc2VtYmx5SW5zdGFuY2UiKSk7CiAgICAg
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCA9IFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpjcmVhdGUoZXhlYywgdm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmRTdHJ1Y3R1cmUoKSwgbW9kdWxlS2V5LCBtb2R1bGVJbmZvcm1hdGlvbik7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogCi0gICAgU3RydWN0dXJlKiBp
bnN0YW5jZVN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0
dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPldlYkFzc2VtYmx5SW5z
dGFuY2VTdHJ1Y3R1cmUoKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2Ug
PSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSh2bSwgaW5zdGFuY2VTdHJ1Y3R1cmUsIGpz
TW9kdWxlLCBtb2R1bGVSZWNvcmQtPmdldE1vZHVsZU5hbWVzcGFjZShleGVjKSk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogCiAKICAgICAvLyBMZXQgZnVu
Y3MsIG1lbW9yaWVzIGFuZCB0YWJsZXMgYmUgaW5pdGlhbGx5LWVtcHR5IGxpc3RzIG9mIGNhbGxh
YmxlIEphdmFTY3JpcHQgb2JqZWN0cywgV2ViQXNzZW1ibHkuTWVtb3J5IG9iamVjdHMgYW5kIFdl
YkFzc2VtYmx5LlRhYmxlIG9iamVjdHMsIHJlc3BlY3RpdmVseS4KQEAgLTk3LDMwICsxMTAsMzYg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgIGZvciAoYXV0
byYgaW1wb3J0IDogbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0cykgewogICAgICAgICAvLyAxLiBM
ZXQgbyBiZSB0aGUgcmVzdWx0YW50IHZhbHVlIG9mIHBlcmZvcm1pbmcgR2V0KGltcG9ydE9iamVj
dCwgaS5tb2R1bGVfbmFtZSkuCiAgICAgICAgIEpTVmFsdWUgaW1wb3J0TW9kdWxlVmFsdWUgPSBp
bXBvcnRPYmplY3QtPmdldChleGVjLCBpbXBvcnQubW9kdWxlKTsKLSAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKICAgICAgICAgLy8gMi4gSWYgVHlw
ZShvKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgaWYgKCFpbXBv
cnRNb2R1bGVWYWx1ZS5pc09iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhl
YywgQVNDSUlMaXRlcmFsKCJpbXBvcnQgbXVzdCBiZSBhbiBvYmplY3QiKSwgZGVmYXVsdFNvdXJj
ZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydE1vZHVsZVZhbHVlKSkpKTsKKyAg
ICAgICAgaWYgKCFpbXBvcnRNb2R1bGVWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVND
SUlMaXRlcmFsKCJpbXBvcnQgbXVzdCBiZSBhbiBvYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVu
ZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydE1vZHVsZVZhbHVlKSkpOworICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KIAogICAgICAgICAvLyAzLiBMZXQgdiBiZSB0
aGUgdmFsdWUgb2YgcGVyZm9ybWluZyBHZXQobywgaS5pdGVtX25hbWUpCiAgICAgICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihpbXBvcnRNb2R1bGVWYWx1ZSk7CiAgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBpbXBvcnQuZmllbGQpOwotICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogCiAgICAg
ICAgIHN3aXRjaCAoaW1wb3J0LmtpbmQpIHsKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtp
bmQ6OkZ1bmN0aW9uOiB7CiAgICAgICAgICAgICAvLyA0LiBJZiBpIGlzIGEgZnVuY3Rpb24gaW1w
b3J0OgogICAgICAgICAgICAgLy8gaS4gSWYgSXNDYWxsYWJsZSh2KSBpcyBmYWxzZSwgdGhyb3cg
YSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCi0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rp
b24oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywg
dm0sIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0IGZ1bmN0aW9uIG11c3QgYmUgY2FsbGFibGUiKSkpKTsK
KyAgICAgICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7CisgICAgICAgICAgICAgICAg
dGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtF
cnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnQgZnVuY3Rpb24gbXVzdCBiZSBjYWxs
YWJsZSIpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9
CiAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKICAgICAgICAgICAg
IC8vIGlpLiBJZiB2IGlzIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3Q6CiAgICAg
ICAgICAgICBpZiAoV2ViQXNzZW1ibHlGdW5jdGlvbiogaW1wb3J0ZWRFeHBvcnQgPSBqc0R5bmFt
aWNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPih2bSwgY2VsbCkpIHsKICAgICAgICAgICAgICAg
ICAvLyBhLiBJZiB0aGUgc2lnbmF0dXJlIG9mIHYgZG9lcyBub3QgbWF0Y2ggdGhlIHNpZ25hdHVy
ZSBvZiBpLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KICAgICAgICAgICAgICAgICBX
YXNtOjpTaWduYXR1cmVJbmRleCBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0gaW1wb3J0ZWRFeHBv
cnQtPnNpZ25hdHVyZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5k
ZXggZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0
aW9uU2lnbmF0dXJlSW5kaWNlc1tpbXBvcnQua2luZEluZGV4XTsKLSAgICAgICAgICAgICAgICBp
ZiAoaW1wb3J0ZWRTaWduYXR1cmVJbmRleCAhPSBleHBlY3RlZFNpZ25hdHVyZUluZGV4KQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4
ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFT
Q0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZnVuY3Rpb24ncyBzaWduYXR1cmUgZG9lc24ndCBtYXRjaCB0
aGUgcHJvdmlkZWQgV2ViQXNzZW1ibHkgZnVuY3Rpb24ncyBzaWduYXR1cmUiKSkpKTsKKyAgICAg
ICAgICAgICAgICBpZiAoaW1wb3J0ZWRTaWduYXR1cmVJbmRleCAhPSBleHBlY3RlZFNpZ25hdHVy
ZUluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93
U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJh
bCgiaW1wb3J0ZWQgZnVuY3Rpb24ncyBzaWduYXR1cmUgZG9lc24ndCBtYXRjaCB0aGUgcHJvdmlk
ZWQgV2ViQXNzZW1ibHkgZnVuY3Rpb24ncyBzaWduYXR1cmUiKSkpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
Ly8gYi4gTGV0IGNsb3N1cmUgYmUgdi5bW0Nsb3N1cmVdXS4KICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIC8vIGlpaS4gT3RoZXJ3aXNlOgpAQCAtMTM4LDIzICsxNTcsMjcgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICAgICAgaGFzVGFibGVJbXBv
cnQgPSB0cnVlOwogICAgICAgICAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IGpzRHlu
YW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4odm0sIHZhbHVlKTsKICAgICAgICAgICAgIC8v
IGkuIElmIHYgaXMgbm90IGEgV2ViQXNzZW1ibHkuVGFibGUgb2JqZWN0LCB0aHJvdyBhIFdlYkFz
c2VtYmx5LkxpbmtFcnJvci4KLSAgICAgICAgICAgIGlmICghdGFibGUpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3Bl
LCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIlRh
YmxlIGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFibGUiKSkpKTsK
KyAgICAgICAgICAgIGlmICghdGFibGUpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZt
LCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNz
ZW1ibHkuVGFibGUiKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICB1aW50MzJfdCBleHBlY3RlZEluaXRpYWwgPSBtb2R1bGVJ
bmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmluaXRpYWwoKTsKICAgICAgICAgICAgIHVpbnQz
Ml90IGFjdHVhbEluaXRpYWwgPSB0YWJsZS0+c2l6ZSgpOwotICAgICAgICAgICAgaWYgKGFjdHVh
bEluaXRpYWwgPCBleHBlY3RlZEluaXRpYWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFz
c2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBwcm92
aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0b28gc21hbGwiKSkpKTsKKyAgICAgICAgICAgIGlm
IChhY3R1YWxJbml0aWFsIDwgZXhwZWN0ZWRJbml0aWFsKSB7CisgICAgICAgICAgICAgICAgdGhy
b3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJv
cihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJUYWJsZSBpbXBvcnQgcHJvdmlkZWQgYW4gJ2luaXRp
YWwnIHRoYXQgaXMgdG9vIHNtYWxsIikpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMy
X3Q+IGV4cGVjdGVkTWF4aW11bSA9IG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24u
bWF4aW11bSgpKSB7CiAgICAgICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gYWN0
dWFsTWF4aW11bSA9IHRhYmxlLT5tYXhpbXVtKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFhY3R1
YWxNYXhpbXVtKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3Bl
LCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIlRh
YmxlIGltcG9ydCBkb2VzIG5vdCBoYXZlIGEgJ21heGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJlcXVp
cmVzIHRoYXQgaXQgZG9lcyIpKSkpOworICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZt
LCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBkb2VzIG5vdCBoYXZlIGEgJ21heGltdW0nIGJ1
dCB0aGUgbW9kdWxlIHJlcXVpcmVzIHRoYXQgaXQgZG9lcyIpKSk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBp
ZiAoKmFjdHVhbE1heGltdW0gPiAqZXhwZWN0ZWRNYXhpbXVtKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJv
d0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9y
KGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIkltcG9ydGVkIFRhYmxlJ3MgJ21heGltdW0nIGlzIGxh
cmdlciB0aGFuIHRoZSBtb2R1bGUncyBleHBlY3RlZCAnbWF4aW11bSciKSkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJB
c3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJJbXBvcnRlZCBUYWJsZSdz
ICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGltdW0n
IikpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogCkBAIC0xNzAsMzEgKzE5MywzNSBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgICAgICBoYXNNZW1vcnlJbXBvcnQg
PSB0cnVlOwogICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5ID0ganNEeW5h
bWljQ2FzdDxKU1dlYkFzc2VtYmx5TWVtb3J5Kj4odm0sIHZhbHVlKTsKICAgICAgICAgICAgIC8v
IGkuIElmIHYgaXMgbm90IGEgV2ViQXNzZW1ibHkuTWVtb3J5IG9iamVjdCwgdGhyb3cgYSBXZWJB
c3NlbWJseS5MaW5rRXJyb3IuCi0gICAgICAgICAgICBpZiAoIW1lbW9yeSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2Nv
cGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgi
TWVtb3J5IGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuTWVtb3J5Iikp
KSk7CisgICAgICAgICAgICBpZiAoIW1lbW9yeSkgeworICAgICAgICAgICAgICAgIHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhl
Yywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2Yg
V2ViQXNzZW1ibHkuTWVtb3J5IikpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGV4cGVjdGVkSW5p
dGlhbCA9IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCk7CiAgICAgICAgICAgICBX
YXNtOjpQYWdlQ291bnQgYWN0dWFsSW5pdGlhbCA9IG1lbW9yeS0+bWVtb3J5KCkuaW5pdGlhbCgp
OwotICAgICAgICAgICAgaWYgKGFjdHVhbEluaXRpYWwgPCBleHBlY3RlZEluaXRpYWwpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0
aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxp
dGVyYWwoIk1lbW9yeSBpbXBvcnQgcHJvdmlkZWQgYW4gJ2luaXRpYWwnIHRoYXQgaXMgdG9vIHNt
YWxsIikpKSk7CisgICAgICAgICAgICBpZiAoYWN0dWFsSW5pdGlhbCA8IGV4cGVjdGVkSW5pdGlh
bCkgeworICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNy
ZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5
IGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0b28gc21hbGwiKSkpOworICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBpZiAoV2FzbTo6UGFnZUNvdW50IGV4cGVjdGVkTWF4aW11bSA9IG1vZHVsZUluZm9ybWF0aW9u
Lm1lbW9yeS5tYXhpbXVtKCkpIHsKICAgICAgICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgYWN0
dWFsTWF4aW11bSA9IG1lbW9yeS0+bWVtb3J5KCkubWF4aW11bSgpOwogICAgICAgICAgICAgICAg
IGlmICghYWN0dWFsTWF4aW11bSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywg
dGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlM
aXRlcmFsKCJNZW1vcnkgaW1wb3J0IGRpZCBub3QgaGF2ZSBhICdtYXhpbXVtJyBidXQgdGhlIG1v
ZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRvZXMiKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgdGhy
b3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJv
cihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IGRpZCBub3QgaGF2ZSBhICdt
YXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRvZXMiKSkpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgICAgICBpZiAoYWN0dWFsTWF4aW11bSA+IGV4cGVjdGVkTWF4aW11bSkgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKAotICAgICAgICAgICAgICAgICAg
ICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJs
eUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0cyAnbWF4aW11
bScgaXMgbGFyZ2VyIHRoYW4gdGhlIG1vZHVsZSdzIGV4cGVjdGVkICdtYXhpbXVtJyIpKSkpOwor
ICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVh
dGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBp
bXBvcnRzICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21h
eGltdW0nIikpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBpaS4gQXBwZW5kIHYg
dG8gbWVtb3JpZXMuCiAgICAgICAgICAgICAvLyBpaWkuIEFwcGVuZCB2LltbTWVtb3J5XV0gdG8g
aW1wb3J0cy4KICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnkodm0sIGV4ZWMsIG1lbW9y
eSk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBu
dWxscHRyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2Fz
bTo6RXh0ZXJuYWxLaW5kOjpHbG9iYWw6IHsKQEAgLTIwMiwxMCArMjI5LDE0IEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgICAgIC8vIGkuIElmIGkg
aXMgbm90IGFuIGltbXV0YWJsZSBnbG9iYWwsIHRocm93IGEgVHlwZUVycm9yLgogICAgICAgICAg
ICAgQVNTRVJUKG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0ubXV0
YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWw6OkltbXV0YWJsZSk7CiAgICAgICAgICAgICAvLyBpaS4g
SWYgdGhlIGdsb2JhbF90eXBlIG9mIGkgaXMgaTY0IG9yIFR5cGUodikgaXMgbm90IE51bWJlciwg
dGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCi0gICAgICAgICAgICBpZiAobW9kdWxlSW5m
b3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQua2luZEluZGV4XS50eXBlID09IFdhc206Okk2NCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMs
IHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJ
TGl0ZXJhbCgiaW1wb3J0ZWQgZ2xvYmFsIGNhbm5vdCBiZSBhbiBpNjQiKSkpKTsKLSAgICAgICAg
ICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNz
ZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZ2xvYmFsIG11
c3QgYmUgYSBudW1iZXIiKSkpKTsKKyAgICAgICAgICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5n
bG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLnR5cGUgPT0gV2FzbTo6STY0KSB7CisgICAgICAgICAg
ICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJs
eUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBnbG9iYWwgY2Fubm90
IGJlIGFuIGk2NCIpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAg
ICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5
TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydGVkIGdsb2JhbCBtdXN0IGJl
IGEgbnVtYmVyIikpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIFRvV2ViQXNzZW1ibHlWYWx1ZSh2KSB0
byBpbXBvcnRzLgogICAgICAgICAgICAgc3dpdGNoIChtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxz
W2ltcG9ydC5raW5kSW5kZXhdLnR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgV2FzbTo6STMyOgpA
QCAtMjQwLDEyICsyNzEsMTQgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29ucwogICAgICAgICAgICAgICAgIG1lbW9yeSA9IGpzTW9kdWxlLT50YWtlUmVzZXJ2ZWRNZW1v
cnkoKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIG1lbW9yeSA9IFdhc206
Ok1lbW9yeTo6Y3JlYXRlKHZtLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBt
b2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpKTsKLSAgICAgICAgICAgICAgICBpZiAo
IW1lbW9yeSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMp
KSk7CisgICAgICAgICAgICAgICAgaWYgKCFtZW1vcnkpIHsKKyAgICAgICAgICAgICAgICAgICAg
dGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihl
eGVjKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnkodm0s
IGV4ZWMsCiAgICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKHZtLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCks
IG1lbW9yeS5yZWxlYXNlTm9uTnVsbCgpKSk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAt
Mjg4LDE1ICszMjEsMTUgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
cwogICAgIH0KIAogICAgIG1vZHVsZVJlY29yZC0+bGluayhleGVjLCBpbnN0YW5jZSk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogCiAgICAgaWYgKHZlcmJv
c2UpCiAgICAgICAgIG1vZHVsZVJlY29yZC0+ZHVtcCgpOwogICAgIEpTVmFsdWUgc3RhcnRSZXN1
bHQgPSBtb2R1bGVSZWNvcmQtPmV2YWx1YXRlKGV4ZWMpOwogICAgIFVOVVNFRF9QQVJBTShzdGFy
dFJlc3VsdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwog
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShpbnN0YW5jZSk7CisgICAgcmV0dXJuIGluc3Rh
bmNlOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJB
c3NlbWJseUluc3RhbmNlKEV4ZWNTdGF0ZSogc3RhdGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29u
c3RydWN0b3IuaAkocmV2aXNpb24gMjEzNDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDYgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEpTV2ViQXNzZW1ibHlN
b2R1bGU7CiBjbGFzcyBXZWJBc3NlbWJseUluc3RhbmNlUHJvdG90eXBlOwogCiBjbGFzcyBXZWJB
c3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CkBA
IC00NCw2ICs0NSw4IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKIAorICAgIHN0YXRp
YyBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGNyZWF0ZUluc3RhbmNlKEV4ZWNTdGF0ZSosIEpTV2Vi
QXNzZW1ibHlNb2R1bGUqLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBTdHJ1Y3R1cmUqKTsKKwog
cHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBXZWJBc3NlbWJseUluc3Rh
bmNlUHJvdG90eXBlKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCShyZXZp
c2lvbiAyMTM0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgYXV0byogc3RydWN0
dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhl
Yy0+bmV3VGFyZ2V0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlN
b2R1bGVTdHJ1Y3R1cmUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVs
ZShleGVjLCBzdHJ1Y3R1cmUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFdlYkFzc2Vt
Ymx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShleGVjLCBleGVjLT5hcmd1bWVudCgw
KSwgc3RydWN0dXJlKSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNhbGxKU1dlYkFzc2VtYmx5TW9kdWxlKEV4ZWNTdGF0ZSogc3RhdGUpCkBAIC03MCwxNCArNzAs
MTQgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlv
blR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJXZWJBc3NlbWJseS5Nb2R1bGUiKSk7CiB9CiAKLUpT
VmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKEV4ZWNTdGF0
ZSogc3RhdGUsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVs
ZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSBtYXli
ZUJ1ZmZlciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgc2l6
ZV90IGJ5dGVPZmZzZXQ7CiAgICAgc2l6ZV90IGJ5dGVTaXplOwotICAgIHVpbnQ4X3QqIGJhc2Ug
PSBnZXRXYXNtQnVmZmVyRnJvbVZhbHVlKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIGJ5dGVP
ZmZzZXQsIGJ5dGVTaXplKTsKKyAgICB1aW50OF90KiBiYXNlID0gZ2V0V2FzbUJ1ZmZlckZyb21W
YWx1ZShzdGF0ZSwgbWF5YmVCdWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgc2NvcGUucmVsZWFzZSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1
Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMjEzNDM1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsK
IAotICAgIHN0YXRpYyBKU1ZhbHVlIGNyZWF0ZU1vZHVsZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUq
KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBjcmVhdGVNb2R1bGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSwg
U3RydWN0dXJlKik7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwg
V2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUqKTsK
</data>
<flag name="review"
          id="325103"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>