<?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>130756</bug_id>
          
          <creation_ts>2014-03-25 16:31:00 -0700</creation_ts>
          <short_desc>[ftlopt] DFG bytecode parser should turn PutById with nothing but a Setter stub as stuff+handleCall, and handleCall should be allowed to inline if it wants to</short_desc>
          <delta_ts>2014-07-01 15:40:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>133034</dependson>
    
    <dependson>133042</dependson>
    
    <dependson>133105</dependson>
          <blocked>129588</blocked>
    
    <blocked>133052</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>994431</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-25 16:31:00 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010051</commentid>
    <comment_count>1</comment_count>
      <attachid>231649</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-17 22:57:42 -0700</bug_when>
    <thetext>Created attachment 231649
it begins

Saving my work while I work on one of the required bits in a separate bug: https://bugs.webkit.org/show_bug.cgi?id=133042</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010093</commentid>
    <comment_count>2</comment_count>
      <attachid>231661</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-18 12:12:20 -0700</bug_when>
    <thetext>Created attachment 231661
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010095</commentid>
    <comment_count>3</comment_count>
      <attachid>231662</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-18 12:43:02 -0700</bug_when>
    <thetext>Created attachment 231662
done?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010131</commentid>
    <comment_count>4</comment_count>
      <attachid>231671</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-18 18:57:47 -0700</bug_when>
    <thetext>Created attachment 231671
more...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010133</commentid>
    <comment_count>5</comment_count>
      <attachid>231672</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-18 19:23:19 -0700</bug_when>
    <thetext>Created attachment 231672
omg it compiles</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010268</commentid>
    <comment_count>6</comment_count>
      <attachid>231713</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-19 12:58:20 -0700</bug_when>
    <thetext>Created attachment 231713
&quot;getting&quot; there</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010394</commentid>
    <comment_count>7</comment_count>
      <attachid>231748</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-19 19:13:44 -0700</bug_when>
    <thetext>Created attachment 231748
it&apos;s back to compiling</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010403</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-19 20:53:58 -0700</bug_when>
    <thetext>I&apos;ll go ahead and do just the getter part separately, in https://bugs.webkit.org/show_bug.cgi?id=133105</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010670</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-20 18:11:43 -0700</bug_when>
    <thetext>What is left is to extend this functionality to setters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019231</commentid>
    <comment_count>10</comment_count>
      <attachid>234056</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-28 17:44:36 -0700</bug_when>
    <thetext>Created attachment 234056
it begins (setter inlining)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019274</commentid>
    <comment_count>11</comment_count>
      <attachid>234065</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-29 20:46:43 -0700</bug_when>
    <thetext>Created attachment 234065
more!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019429</commentid>
    <comment_count>12</comment_count>
      <attachid>234105</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-30 15:31:28 -0700</bug_when>
    <thetext>Created attachment 234105
the code has been written</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019539</commentid>
    <comment_count>13</comment_count>
      <attachid>234139</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-30 19:16:03 -0700</bug_when>
    <thetext>Created attachment 234139
it compiles</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019740</commentid>
    <comment_count>14</comment_count>
      <attachid>234193</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-01 13:14:26 -0700</bug_when>
    <thetext>Created attachment 234193
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019767</commentid>
    <comment_count>15</comment_count>
      <attachid>234193</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-07-01 14:41:38 -0700</bug_when>
    <thetext>Comment on attachment 234193
the patch

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

&gt; Source/JavaScriptCore/tests/stress/weird-setter-counter.js:20
&gt; +    var o = {};
&gt; +    o.__defineSetter__(&quot;f&quot;, function(value) {

While it logically shouldn&apos;t matter could you also add tests using {set f(value) { ... }} just to make sure we&apos;re not doing anything substantially different?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019769</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-01 14:44:38 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 234193 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=234193&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/tests/stress/weird-setter-counter.js:20
&gt; &gt; +    var o = {};
&gt; &gt; +    o.__defineSetter__(&quot;f&quot;, function(value) {
&gt; 
&gt; While it logically shouldn&apos;t matter could you also add tests using {set f(value) { ... }} just to make sure we&apos;re not doing anything substantially different?

That makes sense.  How about I just replicate weird-setter-counter in this way, since if I replicate all of the tests in this way then we&apos;ll have too much overlapping coverage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019795</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-01 15:40:51 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/170672</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231649</attachid>
            <date>2014-05-17 22:57:42 -0700</date>
            <delta_ts>2014-05-18 12:12:20 -0700</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>14902</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJ
KHJldmlzaW9uIDE2OTAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
T3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDYgKzIwNiwxMiBAQCB2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDCiAgICAgY2FzZSBKU0M6OklubGluZUNhbGxG
cmFtZTo6Q29uc3RydWN0OgogICAgICAgICBvdXQucHJpbnQoIkNvbnN0cnVjdCIpOwogICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBKU0M6OklubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDoKKyAg
ICAgICAgb3V0LnByaW50KCJHZXR0ZXJDYWxsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpTZXR0ZXJDYWxsOgorICAgICAgICBvdXQucHJpbnQoIlNl
dHRlckNhbGwiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVPcmlnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZU9yaWdpbi5oCShyZXZpc2lvbiAxNjkwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZU9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDggQEAg
c3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgZW51bSBLaW5kIHsKICAgICAgICAgQ2FsbCwK
ICAgICAgICAgQ29uc3RydWN0LAorICAgICAgICBHZXR0ZXJDYWxsLAorICAgICAgICBTZXR0ZXJD
YWxsCiAgICAgfTsKICAgICAKICAgICBzdGF0aWMgS2luZCBraW5kRm9yKENvZGVTcGVjaWFsaXph
dGlvbktpbmQga2luZCkKQEAgLTEzOSw2ICsxNDEsOCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1l
IHsKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewogICAgICAgICBjYXNlIENhbGw6Cisg
ICAgICAgIGNhc2UgR2V0dGVyQ2FsbDoKKyAgICAgICAgY2FzZSBTZXR0ZXJDYWxsOgogICAgICAg
ICAgICAgcmV0dXJuIENvZGVGb3JDYWxsOwogICAgICAgICBjYXNlIENvbnN0cnVjdDoKICAgICAg
ICAgICAgIHJldHVybiBDb2RlRm9yQ29uc3RydWN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTY5MDA1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDgsNyArMTQ4LDcgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yKAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgcmVzdWx0ID0gY29tcHV0
ZUZvclN0dWJJbmZvKAotICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIG1hcC5nZXQoQ29k
ZU9yaWdpbihieXRlY29kZUluZGV4KSksIHVpZCk7CisgICAgICAgIGxvY2tlciwgcHJvZmlsZWRC
bG9jaywgcHJvZmlsZWRCbG9jaywgbWFwLmdldChDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKSwg
dWlkKTsKICAgICAKICAgICBpZiAoIXJlc3VsdC50YWtlc1Nsb3dQYXRoKCkKICAgICAgICAgJiYg
KGhhc0V4aXRTaXRlKGxvY2tlciwgcHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCkKQEAgLTE2
NiwyMiArMTY2LDIyIEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigK
IAogI2lmIEVOQUJMRShKSVQpCiBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3JTdHViSW5mbygKLSAgICBjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sCi0gICAgU3RyaW5nSW1w
bCogdWlkKQorICAgIGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDb2RlQmxvY2sqIGJhc2Vs
aW5lUHJvZmlsZWRCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLAorICAgIFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbywgU3RyaW5nSW1wbCogdWlkKQogewogICAgIGlmICghc3R1Yklu
Zm8gfHwgIXN0dWJJbmZvLT5zZWVuKQogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhOb0lu
Zm9ybWF0aW9uKTsKICAgICAKICAgICBpZiAoc3R1YkluZm8tPnJlc2V0QnlHQykKICAgICAgICAg
cmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7Ci0KKyAgICAKICAgICBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gMDsKKyAgICBTdGF0ZSB0YWtlc1Nsb3dQYXRo
ID0gVGFrZXNTbG93UGF0aDsKICAgICBpZiAoc3R1YkluZm8tPmFjY2Vzc1R5cGUgPT0gYWNjZXNz
X2dldF9ieV9pZF9saXN0KSB7CiAgICAgICAgIGxpc3QgPSBzdHViSW5mby0+dS5nZXRCeUlkTGlz
dC5saXN0OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgICAgIGlmIChsaXN0LT5hdChpKS5kb2VzQ2FsbHMoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhNYWtlc0NhbGxzLCB0cnVlKTsKLSAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUo
KTsgKytpKQorICAgICAgICAgICAgdGFrZXNTbG93UGF0aCA9IE1ha2VzQ2FsbHM7CiAgICAgfQog
ICAgIAogICAgIC8vIEZpbmFsbHkgZmlndXJlIG91dCBpZiB3ZSBjYW4gZGVyaXZlIGFuIGFjY2Vz
cyBzdHJhdGVneS4KQEAgLTIxNSw4ICsyMTUsNiBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgIAogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9saXN0
OiB7CiAgICAgICAgIGZvciAodW5zaWduZWQgbGlzdEluZGV4ID0gMDsgbGlzdEluZGV4IDwgbGlz
dC0+c2l6ZSgpOyArK2xpc3RJbmRleCkgewotICAgICAgICAgICAgQVNTRVJUKCFsaXN0LT5hdChs
aXN0SW5kZXgpLmRvZXNDYWxscygpKTsKLSAgICAgICAgICAgIAogICAgICAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBsaXN0LT5hdChsaXN0SW5kZXgpLnN0cnVjdHVyZSgpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFzc2VydCB0aGF0IHdlIG5l
dmVyIHNlZSBhIHN0cnVjdHVyZSB0aGF0CkBAIC0yMjYsMTQgKzIyNCwxNCBAQCBHZXRCeUlkU3Rh
dHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxODEwCiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwg
dHJ1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXModGFrZXNTbG93UGF0
aCwgdHJ1ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChsaXN0LT5hdChsaXN0SW5k
ZXgpLmNoYWluKCkpIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbj4gY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKICAgICAg
ICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgc3RydWN0dXJlLCBsaXN0LT5hdChsaXN0SW5k
ZXgpLmNoYWluKCksCiAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmF0KGxpc3RJbmRleCkuY2hh
aW5Db3VudCgpKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuY29tcHV0ZUZvckNoYWlu
KHByb2ZpbGVkQmxvY2ssIHVpZCwgY2hhaW4pKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEdldEJ5SWRTdGF0dXModGFrZXNTbG93UGF0aCwgdHJ1ZSk7CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTI0NSw3ICsyNDMs
NyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAg
ICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICgh
aXNWYWxpZE9mZnNldChteU9mZnNldCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRT
dGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5
SWRTdGF0dXModGFrZXNTbG93UGF0aCwgdHJ1ZSk7CiAKICAgICAgICAgICAgIGJvb2wgZm91bmQg
PSBmYWxzZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gMDsgdmFy
aWFudEluZGV4IDwgcmVzdWx0Lm1fdmFyaWFudHMuc2l6ZSgpOyArK3ZhcmlhbnRJbmRleCkgewpA
QCAtMjcwLDggKzI2OCwzMiBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3JTCiAgICAgICAgICAgICBpZiAoZm91bmQpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQoR2V0QnlJ
ZFZhcmlhbnQoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIG15T2Zmc2V0LCBzcGVjaWZpY1ZhbHVl
KSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwg
dHJ1ZSk7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxM
aW5rU3RhdHVzOworICAgICAgICAgICAgc3dpdGNoIChsaXN0LT5hdChsaXN0SW5kZXgpLnR5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBTaW1wbGVJbmxpbmU6CisgICAgICAgICAgICBjYXNlIFNp
bXBsZVN0dWI6IHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNhc2UgR2V0dGVyOiB7CisgICAgICAgICAgICAgICAgRXhpdGluZ0pJVFR5cGUgZXhp
dGluZ1R5cGU7CisgICAgICAgICAgICAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChw
cm9maWxlZEJsb2NrLT5qaXRUeXBlKCkpKQorICAgICAgICAgICAgICAgICAgICBleGl0aW5nVHlw
ZSA9IEV4aXRGcm9tRlRMOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgZXhpdGluZ1R5cGUgPSBFeGl0RnJvbUFueXRoaW5nOworICAgICAgICAgICAgICAgIGlmICgK
KyAgICAgICAgICAgICAgICBjYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExp
bmtTdGF0dXM+KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjYXNlIEN1c3RvbUdldHRlcjogeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJ
dCB3b3VsZCBiZSB0b3RhbGx5IHN3ZWV0IHRvIHN1cHBvcnQgdGhpcyBhdCBzb21lIHBvaW50IGlu
IHRoZSBmdXR1cmUuCisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXModGFrZXNT
bG93UGF0aCwgdHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQoR2V0
QnlJZFZhcmlhbnQoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIG15T2Zmc2V0LCBzcGVjaWZpY1Zh
bHVlLCBzdGQ6Om1vdmUoY2FsbExpbmtTdGF0dXMpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IEdldEJ5SWRTdGF0dXModGFrZXNTbG93UGF0aCwgdHJ1ZSk7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0zMDgsNyArMzMwLDcgQEAgR2V0QnlJZFN0YXR1
cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICBHZXRCeUlkU3RhdHVzIHJlc3Vs
dDsKICAgICAgICAgewogICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoZGZn
QmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8o
bG9ja2VyLCBkZmdCbG9jaywgZGZnTWFwLmdldChjb2RlT3JpZ2luKSwgdWlkKTsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbyhsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIGRm
Z0Jsb2NrLCBkZmdNYXAuZ2V0KGNvZGVPcmlnaW4pLCB1aWQpOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBpZiAocmVzdWx0LnRha2VzU2xvd1BhdGgoKSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMTY5MDA1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAkod29y
a2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIGhh
c0V4aXRTaXRlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDb2RlQmxvY2sqLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4LCBFeGl0aW5nSklUVHlwZSA9IEV4aXRGcm9tQW55dGhpbmcpOwogI2Vu
ZGlmCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBzdGF0aWMgR2V0QnlJZFN0YXR1cyBjb21wdXRlRm9y
U3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIENvZGVCbG9jayosIFN0cnVjdHVy
ZVN0dWJJbmZvKiwgU3RyaW5nSW1wbCogdWlkKTsKKyAgICBzdGF0aWMgR2V0QnlJZFN0YXR1cyBj
b21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIENvZGVCbG9jayog
YmFzZWxpbmVQcm9maWxlZEJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVy
ZVN0dWJJbmZvKiwgU3RyaW5nSW1wbCogdWlkKTsKICNlbmRpZgogICAgIGJvb2wgY29tcHV0ZUZv
ckNoYWluKENvZGVCbG9jayosIFN0cmluZ0ltcGwqIHVpZCwgUGFzc1JlZlB0cjxJbnRlbmRlZFN0
cnVjdHVyZUNoYWluPik7CiAgICAgc3RhdGljIEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZyb21MTElu
dChDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBTdHJpbmdJbXBsKiB1aWQpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlh
bnQuY3BwCShyZXZpc2lvbiAxNjkwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvR2V0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsMzAgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHZXRCeUlkVmFyaWFudC5oIgogCisjaW5j
bHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewogCitHZXRCeUlkVmFyaWFudDo6fkdldEJ5SWRWYXJpYW50KCkgeyB9CisKK0dl
dEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIp
Cit7CisgICAgKnRoaXMgPSBvdGhlcjsKK30KKworR2V0QnlJZFZhcmlhbnQmIEdldEJ5SWRWYXJp
YW50OjpvcGVyYXRvcj0oY29uc3QgR2V0QnlJZFZhcmlhbnQmIG90aGVyKQoreworICAgIG1fc3Ry
dWN0dXJlU2V0ID0gb3RoZXIubV9zdHJ1Y3R1cmVTZXQ7CisgICAgbV9jaGFpbiA9IG90aGVyLm1f
Y2hhaW47CisgICAgbV9zcGVjaWZpY1ZhbHVlID0gb3RoZXIubV9zcGVjaWZpY1ZhbHVlOworICAg
IG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7CisgICAgaWYgKG90aGVyLm1fY2FsbExpbmtTdGF0
dXMpCisgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5r
U3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CisgICAgZWxzZQorICAgICAgICBtX2Nh
bGxMaW5rU3RhdHVzID0gbnVsbHB0cjsKK30KKwogdm9pZCBHZXRCeUlkVmFyaWFudDo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsKQEAg
LTQ1LDcgKzY1LDEwIEBAIHZvaWQgR2V0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnQK
ICAgICBvdXQucHJpbnQoCiAgICAgICAgICI8IiwgaW5Db250ZXh0KHN0cnVjdHVyZVNldCgpLCBj
b250ZXh0KSwgIiwgIiwKICAgICAgICAgcG9pbnRlckR1bXBJbkNvbnRleHQoY2hhaW4oKSwgY29u
dGV4dCksICIsICIsCi0gICAgICAgIGluQ29udGV4dChzcGVjaWZpY1ZhbHVlKCksIGNvbnRleHQp
LCAiLCAiLCBvZmZzZXQoKSwgIj4iKTsKKyAgICAgICAgaW5Db250ZXh0KHNwZWNpZmljVmFsdWUo
KSwgY29udGV4dCksICIsICIsIG9mZnNldCgpKTsKKyAgICBpZiAobV9jYWxsTGlua1N0YXR1cykK
KyAgICAgICAgb3V0LnByaW50KCptX2NhbGxMaW5rU3RhdHVzKTsKKyAgICBvdXQucHJpbnQoIj4i
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTY5MDA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDYgKzMzLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIENhbGxMaW5r
U3RhdHVzOwogY2xhc3MgR2V0QnlJZFN0YXR1czsKIHN0cnVjdCBEdW1wQ29udGV4dDsKIApAQCAt
NDEsMTEgKzQyLDEzIEBAIHB1YmxpYzoKICAgICBHZXRCeUlkVmFyaWFudCgKICAgICAgICAgY29u
c3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQgPSBTdHJ1Y3R1cmVTZXQoKSwKICAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gaW52YWxpZE9mZnNldCwgSlNWYWx1ZSBzcGVjaWZpY1Zh
bHVlID0gSlNWYWx1ZSgpLAotICAgICAgICBQYXNzUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hh
aW4+IGNoYWluID0gbnVsbHB0cikKKyAgICAgICAgUGFzc1JlZlB0cjxJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluPiBjaGFpbiA9IG51bGxwdHIsCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlu
a1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPSBudWxscHRyKQogICAgICAgICA6IG1fc3RydWN0dXJl
U2V0KHN0cnVjdHVyZVNldCkKICAgICAgICAgLCBtX2NoYWluKGNoYWluKQogICAgICAgICAsIG1f
c3BlY2lmaWNWYWx1ZShzcGVjaWZpY1ZhbHVlKQogICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkK
KyAgICAgICAgLCBtX2NhbGxMaW5rU3RhdHVzKHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1cykpCiAg
ICAgewogICAgICAgICBpZiAoIXN0cnVjdHVyZVNldC5zaXplKCkpIHsKICAgICAgICAgICAgIEFT
U0VSVChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCk7CkBAIC01NCwxMiArNTcsMTggQEAgcHVibGlj
OgogICAgICAgICB9CiAgICAgfQogICAgIAorICAgIH5HZXRCeUlkVmFyaWFudCgpOworICAgIAor
ICAgIEdldEJ5SWRWYXJpYW50KGNvbnN0IEdldEJ5SWRWYXJpYW50Jik7CisgICAgR2V0QnlJZFZh
cmlhbnQmIG9wZXJhdG9yPShjb25zdCBHZXRCeUlkVmFyaWFudCYpOworICAgIAogICAgIGJvb2wg
aXNTZXQoKSBjb25zdCB7IHJldHVybiAhIW1fc3RydWN0dXJlU2V0LnNpemUoKTsgfQogICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICBjb25zdCBTdHJ1
Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9
CiAgICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdCB7IHJldHVybiBjb25z
dF9jYXN0PEludGVuZGVkU3RydWN0dXJlQ2hhaW4qPihtX2NoYWluLmdldCgpKTsgfQogICAgIEpT
VmFsdWUgc3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lmaWNWYWx1ZTsgfQog
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Cisg
ICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxs
TGlua1N0YXR1cy5nZXQoKTsgfQogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OwogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0Kikg
Y29uc3Q7CkBAIC03MSw2ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4+IG1fY2hhaW47CiAgICAgSlNWYWx1ZSBtX3NwZWNpZmljVmFsdWU7CiAgICAg
UHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3Rh
dHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lv
biAxNjkwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMCw3ICs0MzAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbmF0aXZlQ29uc3RydWN0R2VuCiAgICAgcmV0dXJuIG5hdGl2ZUZvckdlbmVyYXRvcih2bSwg
Q29kZUZvckNvbnN0cnVjdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVw
KFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVwR2VuZXJhdG9yKFZNKiB2
bSkKIHsKICAgICBKU0ludGVyZmFjZUpJVCBqaXQodm0pOwogCkBAIC01MzMsNiArNTMzLDc3IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVwKFZNKiB2bSkKICAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJmaXh1cCBhcml0eSIpKTsKIH0KIAorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGJhc2VsaW5lR2V0dGVyUmV0dXJuVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQor
eworICAgIEpTSW50ZXJmYWNlSklUIGppdCh2bSk7CisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICBqaXQuc2V0dXBSZXN1bHRzKHJlZ1QxLCByZWdUMCk7CisjZWxzZQorICAgIGppdC5zZXR1
cFJlc3VsdHMocmVnVDApOworI2VuZGlmCisgICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZQYXJh
bWV0ZXJzID0gMDsKKyAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsgLy8gVGhlICd0aGlzJyBhcmd1
bWVudC4KKyAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsgLy8gVGhlIHRydWUgcmV0dXJuIFBDLgor
ICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mUmVnc0ZvckNhbGwgPQorICAgICAgICBKU1N0YWNr
OjpDYWxsRnJhbWVIZWFkZXJTaXplICsgbnVtYmVyT2ZQYXJhbWV0ZXJzOworICAgIAorICAgIHVu
c2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0KKyAgICAgICAgbnVtYmVyT2ZSZWdzRm9yQ2Fs
bCAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisgICAgCisg
ICAgdW5zaWduZWQgYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsID0KKyAgICAgICAgV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0Zv
ckNhbGwpOworICAgICAgICAgICAgCisgICAgLy8gVGhlIHJlYWwgcmV0dXJuIGFkZHJlc3MgaXMg
c3RvcmVkIGFib3ZlIHRoZSBhcmd1bWVudHMuIFdlIHBhc3NlZCBvbmUgYXJndW1lbnQsIHdoaWNo
IGlzCisgICAgLy8gJ3RoaXMnLiBTbyBhcmd1bWVudCBhdCBpbmRleCAxIGlzIHRoZSByZXR1cm4g
YWRkcmVzcy4KKyAgICBqaXQubG9hZFB0cigKKyAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpBZGRy
ZXNzKAorICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwK
KyAgICAgICAgICAgICh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKSAtIEpTU3RhY2s6OkNh
bGxlckZyYW1lQW5kUENTaXplKSAqIHNpemVvZihSZWdpc3RlcikpLAorICAgICAgICBHUFJJbmZv
OjpyZWdUMik7CisgICAgCisgICAgaml0LmFkZFB0cigKKyAgICAgICAgQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKKyAgICAgICAgQXNz
ZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgCisgICAgaml0Lmp1bXAo
cmVnVDIpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYmFzZWxpbmVTZXR0ZXJSZXR1cm5U
aHVua0dlbmVyYXRvcihWTSogdm0pCit7CisgICAgSlNJbnRlcmZhY2VKSVQgaml0KHZtKTsKKyAg
ICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZlBhcmFtZXRlcnMgPSAwOworICAgIG51bWJlck9mUGFy
YW1ldGVycysrOyAvLyBUaGUgJ3RoaXMnIGFyZ3VtZW50LgorICAgIG51bWJlck9mUGFyYW1ldGVy
cysrOyAvLyBUaGUgdmFsdWUgdG8gc2V0LgorICAgIG51bWJlck9mUGFyYW1ldGVycysrOyAvLyBU
aGUgdHJ1ZSByZXR1cm4gUEMuCisgICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZSZWdzRm9yQ2Fs
bCA9CisgICAgICAgIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBudW1iZXJPZlBhcmFt
ZXRlcnM7CisgICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQorICAgICAg
ICBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKTsKKyAgICAKKyAgICB1bnNpZ25lZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNh
bGwgPQorICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRl
cygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7CisgICAgICAgICAgICAKKyAgICAvLyBUaGUgcmVh
bCByZXR1cm4gYWRkcmVzcyBpcyBzdG9yZWQgYWJvdmUgdGhlIGFyZ3VtZW50cy4gV2UgcGFzc2Vk
IHR3byBhcmd1bWVudHMsIHNvCisgICAgLy8gdGhlIGFyZ3VtZW50IGF0IGluZGV4IDIgaXMgdGhl
IHJldHVybiBhZGRyZXNzLgorICAgIGppdC5sb2FkUHRyKAorICAgICAgICBBc3NlbWJseUhlbHBl
cnM6OkFkZHJlc3MoCisgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyLAorICAgICAgICAgICAgKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDIpIC0gSlNT
dGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUpICogc2l6ZW9mKFJlZ2lzdGVyKSksCisgICAgICAg
IEdQUkluZm86OnJlZ1QyKTsKKyAgICAKKyAgICBqaXQuYWRkUHRyKAorICAgICAgICBBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAorICAg
ICAgICBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAKKyAgICBq
aXQuanVtcChyZWdUMik7Cit9CisKIHN0YXRpYyB2b2lkIHN0cmluZ0NoYXJMb2FkKFNwZWNpYWxp
emVkVGh1bmtKSVQmIGppdCwgVk0qIHZtKQogewogICAgIC8vIGxvYWQgc3RyaW5nCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHJldmlzaW9uIDE2
OTAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBpbmxpbmUgVGh1bmtHZW5lcmF0b3Igdmly
dHVhbFRodW5rR2VuZXJhCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ2FsbEdlbmVyYXRv
cihWTSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcihW
TSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZVRhaWxDYWxsR2VuZXJhdG9yKFZNKik7
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJpdHlGaXh1cChWTSopOworTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGFyaXR5Rml4dXBHZW5lcmF0b3IoVk0qKTsKIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihWTSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNo
YXJBdFRodW5rR2VuZXJhdG9yKFZNKik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231661</attachid>
            <date>2014-05-18 12:12:20 -0700</date>
            <delta_ts>2014-05-18 12:43:02 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>32116</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJ
KHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
T3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDYgKzIwNiwxMiBAQCB2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDCiAgICAgY2FzZSBKU0M6OklubGluZUNhbGxG
cmFtZTo6Q29uc3RydWN0OgogICAgICAgICBvdXQucHJpbnQoIkNvbnN0cnVjdCIpOwogICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBKU0M6OklubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDoKKyAg
ICAgICAgb3V0LnByaW50KCJHZXR0ZXJDYWxsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpTZXR0ZXJDYWxsOgorICAgICAgICBvdXQucHJpbnQoIlNl
dHRlckNhbGwiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVPcmlnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZU9yaWdpbi5oCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZU9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDExIEBA
IHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIGVudW0gS2luZCB7CiAgICAgICAgIENhbGws
CiAgICAgICAgIENvbnN0cnVjdCwKKyAgICAgICAgCisgICAgICAgIC8vIEZvciB0aGVzZSwgdGhl
IHN0YWNrT2Zmc2V0IGluY29ycG9yYXRlcyB0aGUgYXJndW1lbnQgY291bnQgcGx1cyB0aGUgdHJ1
ZSByZXR1cm4gUEMKKyAgICAgICAgLy8gc2xvdC4KKyAgICAgICAgR2V0dGVyQ2FsbCwKKyAgICAg
ICAgU2V0dGVyQ2FsbAogICAgIH07CiAgICAgCiAgICAgc3RhdGljIEtpbmQga2luZEZvcihDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCkBAIC0xMzksNiArMTQ0LDggQEAgc3RydWN0IElubGlu
ZUNhbGxGcmFtZSB7CiAgICAgewogICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICAgY2Fz
ZSBDYWxsOgorICAgICAgICBjYXNlIEdldHRlckNhbGw6CisgICAgICAgIGNhc2UgU2V0dGVyQ2Fs
bDoKICAgICAgICAgICAgIHJldHVybiBDb2RlRm9yQ2FsbDsKICAgICAgICAgY2FzZSBDb25zdHJ1
Y3Q6CiAgICAgICAgICAgICByZXR1cm4gQ29kZUZvckNvbnN0cnVjdDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9u
IDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDcgKzE0OCw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIHJlc3Vs
dCA9IGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCBt
YXAuZ2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpLCB1aWQpOworICAgICAgICBsb2NrZXIs
IHByb2ZpbGVkQmxvY2ssIHByb2ZpbGVkQmxvY2ssIG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29k
ZUluZGV4KSksIHVpZCk7CiAgICAgCiAgICAgaWYgKCFyZXN1bHQudGFrZXNTbG93UGF0aCgpCiAg
ICAgICAgICYmIChoYXNFeGl0U2l0ZShsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5k
ZXgpCkBAIC0xNjYsMjIgKzE2NiwyMiBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3IoCiAKICNpZiBFTkFCTEUoSklUKQogR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIENv
ZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLAotICAg
IFN0cmluZ0ltcGwqIHVpZCkKKyAgICBjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ29kZUJs
b2NrKiBiYXNlbGluZVByb2ZpbGVkQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywKKyAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cmluZ0ltcGwqIHVpZCwgQ2FsbExpbmtT
dGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQogewogICAgIGlmICghc3R1Yklu
Zm8gfHwgIXN0dWJJbmZvLT5zZWVuKQogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhOb0lu
Zm9ybWF0aW9uKTsKICAgICAKICAgICBpZiAoc3R1YkluZm8tPnJlc2V0QnlHQykKICAgICAgICAg
cmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7Ci0KKyAgICAKICAgICBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gMDsKKyAgICBTdGF0ZSB0YWtlc1Nsb3dQYXRo
ID0gVGFrZXNTbG93UGF0aDsKICAgICBpZiAoc3R1YkluZm8tPmFjY2Vzc1R5cGUgPT0gYWNjZXNz
X2dldF9ieV9pZF9saXN0KSB7CiAgICAgICAgIGxpc3QgPSBzdHViSW5mby0+dS5nZXRCeUlkTGlz
dC5saXN0OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgICAgIGlmIChsaXN0LT5hdChpKS5kb2VzQ2FsbHMoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhNYWtlc0NhbGxzLCB0cnVlKTsKLSAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUo
KTsgKytpKQorICAgICAgICAgICAgdGFrZXNTbG93UGF0aCA9IE1ha2VzQ2FsbHM7CiAgICAgfQog
ICAgIAogICAgIC8vIEZpbmFsbHkgZmlndXJlIG91dCBpZiB3ZSBjYW4gZGVyaXZlIGFuIGFjY2Vz
cyBzdHJhdGVneS4KQEAgLTIxNSw4ICsyMTUsNiBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgIAogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9saXN0
OiB7CiAgICAgICAgIGZvciAodW5zaWduZWQgbGlzdEluZGV4ID0gMDsgbGlzdEluZGV4IDwgbGlz
dC0+c2l6ZSgpOyArK2xpc3RJbmRleCkgewotICAgICAgICAgICAgQVNTRVJUKCFsaXN0LT5hdChs
aXN0SW5kZXgpLmRvZXNDYWxscygpKTsKLSAgICAgICAgICAgIAogICAgICAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBsaXN0LT5hdChsaXN0SW5kZXgpLnN0cnVjdHVyZSgpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFzc2VydCB0aGF0IHdlIG5l
dmVyIHNlZSBhIHN0cnVjdHVyZSB0aGF0CkBAIC0yMjYsMTQgKzIyNCwxNCBAQCBHZXRCeUlkU3Rh
dHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxODEwCiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwg
dHJ1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXModGFrZXNTbG93UGF0
aCwgdHJ1ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChsaXN0LT5hdChsaXN0SW5k
ZXgpLmNoYWluKCkpIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbj4gY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKICAgICAg
ICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgc3RydWN0dXJlLCBsaXN0LT5hdChsaXN0SW5k
ZXgpLmNoYWluKCksCiAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmF0KGxpc3RJbmRleCkuY2hh
aW5Db3VudCgpKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuY29tcHV0ZUZvckNoYWlu
KHByb2ZpbGVkQmxvY2ssIHVpZCwgY2hhaW4pKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEdldEJ5SWRTdGF0dXModGFrZXNTbG93UGF0aCwgdHJ1ZSk7CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTI0NSw3ICsyNDMs
NyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAg
ICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICgh
aXNWYWxpZE9mZnNldChteU9mZnNldCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRT
dGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5
SWRTdGF0dXModGFrZXNTbG93UGF0aCwgdHJ1ZSk7CiAKICAgICAgICAgICAgIGJvb2wgZm91bmQg
PSBmYWxzZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gMDsgdmFy
aWFudEluZGV4IDwgcmVzdWx0Lm1fdmFyaWFudHMuc2l6ZSgpOyArK3ZhcmlhbnRJbmRleCkgewpA
QCAtMjcwLDggKzI2OCwzMiBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3JTCiAgICAgICAgICAgICBpZiAoZm91bmQpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQoR2V0QnlJ
ZFZhcmlhbnQoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIG15T2Zmc2V0LCBzcGVjaWZpY1ZhbHVl
KSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwg
dHJ1ZSk7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxM
aW5rU3RhdHVzOworICAgICAgICAgICAgc3dpdGNoIChsaXN0LT5hdChsaXN0SW5kZXgpLnR5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBTaW1wbGVJbmxpbmU6CisgICAgICAgICAgICBjYXNlIFNp
bXBsZVN0dWI6IHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNhc2UgR2V0dGVyOiB7CisgICAgICAgICAgICAgICAgQWNjZXNzb3JDYWxsSklUU3R1
YlJvdXRpbmUqIHN0dWIgPSBzdGF0aWNfY2FzdDxBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSo+
KAorICAgICAgICAgICAgICAgICAgICBsaXN0LT5hdChsaXN0SW5kZXgpLnN0dWJSb3V0aW5lKCkp
OworICAgICAgICAgICAgICAgIGNhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxs
TGlua1N0YXR1cz4oCisgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRl
Rm9yKGxvY2tlciwgc3R1Yi0+bV9jYWxsTGlua0luZm8pKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ3VzdG9tR2V0dGVyOiB7CisgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIHRvdGFsbHkgc3dlZXQgdG8gc3VwcG9y
dCB0aGlzIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDUyCisgICAgICAgICAg
ICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXModGFrZXNTbG93UGF0aCwgdHJ1ZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIEdldEJ5SWRWYXJpYW50IHZhcmlhbnQoCisgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0
KHN0cnVjdHVyZSksIG15T2Zmc2V0LCBzcGVjaWZpY1ZhbHVlLCBzdGQ6Om1vdmUoY2FsbExpbmtT
dGF0dXMpKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXModGFrZXNTbG93UGF0aCwgdHJ1
ZSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0zMDgs
NyArMzMwLDcgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAg
ICAgICBHZXRCeUlkU3RhdHVzIHJlc3VsdDsKICAgICAgICAgewogICAgICAgICAgICAgQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIoZGZnQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICByZXN1
bHQgPSBjb21wdXRlRm9yU3R1YkluZm8obG9ja2VyLCBkZmdCbG9jaywgZGZnTWFwLmdldChjb2Rl
T3JpZ2luKSwgdWlkKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbyhs
b2NrZXIsIHByb2ZpbGVkQmxvY2ssIGRmZ0Jsb2NrLCBkZmdNYXAuZ2V0KGNvZGVPcmlnaW4pLCB1
aWQpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAocmVzdWx0LnRha2VzU2xvd1Bh
dGgoKSkKQEAgLTM2MSw2ICszODMsMjQgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yKAogICAgICAgICBTaW1wbGUsIGZhbHNlLCBHZXRCeUlkVmFyaWFudChTdHJ1Y3R1
cmVTZXQoc3RydWN0dXJlKSwgb2Zmc2V0LCBzcGVjaWZpY1ZhbHVlKSk7CiB9CiAKK2Jvb2wgR2V0
QnlJZFN0YXR1czo6bWFrZXNDYWxscygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7
CisgICAgY2FzZSBOb0luZm9ybWF0aW9uOgorICAgIGNhc2UgVGFrZXNTbG93UGF0aDoKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgU2ltcGxlOgorICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX3ZhcmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1fdmFyaWFu
dHNbaV0uY2FsbExpbmtTdGF0dXMoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBNYWtlc0NhbGxzOgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKwogdm9pZCBHZXRCeUlkU3RhdHVzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CiB7CiAgICAgb3V0LnByaW50KCIoIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgR2V0QnlJZFN0YXR1c19oCiAjZGVmaW5lIEdldEJ5SWRT
dGF0dXNfaAogCisjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKICNpbmNsdWRlICJDb2RlT3Jp
Z2luLmgiCiAjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKICNpbmNsdWRlICJFeGl0aW5n
SklUVHlwZS5oIgpAQCAtODMsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgR2V0QnlJZFZh
cmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7
IH0KIAogICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0g
VGFrZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE1ha2VzQ2FsbHM7IH0KLSAgICBib29sIG1ha2Vz
Q2FsbHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IE1ha2VzQ2FsbHM7IH0KKyAgICBib29s
IG1ha2VzQ2FsbHMoKSBjb25zdDsKICAgICAKICAgICBib29sIHdhc1NlZW5JbkpJVCgpIGNvbnN0
IHsgcmV0dXJuIG1fd2FzU2VlbkluSklUOyB9CiAgICAgCkBAIC05NCw3ICs5NSwxMCBAQCBwcml2
YXRlOgogICAgIHN0YXRpYyBib29sIGhhc0V4aXRTaXRlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2Nr
ZXImLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBFeGl0aW5nSklUVHlwZSA9
IEV4aXRGcm9tQW55dGhpbmcpOwogI2VuZGlmCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBzdGF0aWMg
R2V0QnlJZFN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpJVExvY2tl
ciYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RyaW5nSW1wbCogdWlkKTsKKyAg
ICBzdGF0aWMgR2V0QnlJZFN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oCisgICAgICAgIGNvbnN0
IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDb2RlQmxvY2sqIGJhc2VsaW5lUHJvZmlsZWRCbG9jaywK
KyAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyosIFN0
cmluZ0ltcGwqIHVpZCwKKyAgICAgICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CiAj
ZW5kaWYKICAgICBib29sIGNvbXB1dGVGb3JDaGFpbihDb2RlQmxvY2sqLCBTdHJpbmdJbXBsKiB1
aWQsIFBhc3NSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4pOwogICAgIHN0YXRpYyBHZXRC
eUlkU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCwgU3RyaW5nSW1wbCogdWlkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMTY5MDE0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsMTAgKzI2LDMwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
R2V0QnlJZFZhcmlhbnQuaCIKIAorI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAorR2V0QnlJZFZhcmlhbnQ6On5H
ZXRCeUlkVmFyaWFudCgpIHsgfQorCitHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoY29u
c3QgR2V0QnlJZFZhcmlhbnQmIG90aGVyKQoreworICAgICp0aGlzID0gb3RoZXI7Cit9CisKK0dl
dEJ5SWRWYXJpYW50JiBHZXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9KGNvbnN0IEdldEJ5SWRWYXJp
YW50JiBvdGhlcikKK3sKKyAgICBtX3N0cnVjdHVyZVNldCA9IG90aGVyLm1fc3RydWN0dXJlU2V0
OworICAgIG1fY2hhaW4gPSBvdGhlci5tX2NoYWluOworICAgIG1fc3BlY2lmaWNWYWx1ZSA9IG90
aGVyLm1fc3BlY2lmaWNWYWx1ZTsKKyAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OworICAg
IGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQorICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0g
c3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMp
OworICAgIGVsc2UKKyAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IG51bGxwdHI7Cit9CisKIHZv
aWQgR2V0QnlJZFZhcmlhbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBk
dW1wSW5Db250ZXh0KG91dCwgMCk7CkBAIC00NSw3ICs2NSwxMCBAQCB2b2lkIEdldEJ5SWRWYXJp
YW50OjpkdW1wSW5Db250ZXh0KFByaW50CiAgICAgb3V0LnByaW50KAogICAgICAgICAiPCIsIGlu
Q29udGV4dChzdHJ1Y3R1cmVTZXQoKSwgY29udGV4dCksICIsICIsCiAgICAgICAgIHBvaW50ZXJE
dW1wSW5Db250ZXh0KGNoYWluKCksIGNvbnRleHQpLCAiLCAiLAotICAgICAgICBpbkNvbnRleHQo
c3BlY2lmaWNWYWx1ZSgpLCBjb250ZXh0KSwgIiwgIiwgb2Zmc2V0KCksICI+Iik7CisgICAgICAg
IGluQ29udGV4dChzcGVjaWZpY1ZhbHVlKCksIGNvbnRleHQpLCAiLCAiLCBvZmZzZXQoKSk7Cisg
ICAgaWYgKG1fY2FsbExpbmtTdGF0dXMpCisgICAgICAgIG91dC5wcmludCgiY2FsbDogIiwgKm1f
Y2FsbExpbmtTdGF0dXMpOworICAgIG91dC5wcmludCgiPiIpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
VmFyaWFudC5oCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQ2FsbExpbmtTdGF0dXM7CiBjbGFzcyBHZXRCeUlk
U3RhdHVzOwogc3RydWN0IER1bXBDb250ZXh0OwogCkBAIC00MSwxMSArNDIsMTMgQEAgcHVibGlj
OgogICAgIEdldEJ5SWRWYXJpYW50KAogICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVj
dHVyZVNldCA9IFN0cnVjdHVyZVNldCgpLAogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBpbnZhbGlkT2Zmc2V0LCBKU1ZhbHVlIHNwZWNpZmljVmFsdWUgPSBKU1ZhbHVlKCksCi0gICAg
ICAgIFBhc3NSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gY2hhaW4gPSBudWxscHRyKQor
ICAgICAgICBQYXNzUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWluID0gbnVsbHB0
ciwKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1
cyA9IG51bGxwdHIpCiAgICAgICAgIDogbV9zdHJ1Y3R1cmVTZXQoc3RydWN0dXJlU2V0KQogICAg
ICAgICAsIG1fY2hhaW4oY2hhaW4pCiAgICAgICAgICwgbV9zcGVjaWZpY1ZhbHVlKHNwZWNpZmlj
VmFsdWUpCiAgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICAgICAsIG1fY2FsbExpbmtT
dGF0dXMoc3RkOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSkKICAgICB7CiAgICAgICAgIGlmICghc3Ry
dWN0dXJlU2V0LnNpemUoKSkgewogICAgICAgICAgICAgQVNTRVJUKG9mZnNldCA9PSBpbnZhbGlk
T2Zmc2V0KTsKQEAgLTU0LDEyICs1NywxOCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAg
ICAgCisgICAgfkdldEJ5SWRWYXJpYW50KCk7CisgICAgCisgICAgR2V0QnlJZFZhcmlhbnQoY29u
c3QgR2V0QnlJZFZhcmlhbnQmKTsKKyAgICBHZXRCeUlkVmFyaWFudCYgb3BlcmF0b3I9KGNvbnN0
IEdldEJ5SWRWYXJpYW50Jik7CisgICAgCiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV9zdHJ1Y3R1cmVTZXQuc2l6ZSgpOyB9CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiAhaXNTZXQoKTsgfQogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0KICAgICBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluKiBjaGFpbigpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8SW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbio+KG1fY2hhaW4uZ2V0KCkpOyB9CiAgICAgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gbV9zcGVjaWZpY1ZhbHVlOyB9CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICBDYWxsTGlua1N0YXR1cyogY2Fs
bExpbmtTdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX2NhbGxMaW5rU3RhdHVzLmdldCgpOyB9CiAg
ICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wSW5D
b250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKQEAgLTcxLDYgKzgwLDcg
QEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsK
ICAgICBKU1ZhbHVlIG1fc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNl
dDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTcxLDIxICsxNzEsMjEgQEAgcHJpdmF0ZToKICAgICBib29sIGhhbmRsZU1pbk1heChp
bnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICAKICAgICAvLyBIYW5kbGUgY2FsbHMuIFRo
aXMgcmVzb2x2ZXMgaXNzdWVzIHN1cnJvdW5kaW5nIGlubGluaW5nIGFuZCBpbnRyaW5zaWNzLgor
ICAgIHZvaWQgaGFuZGxlQ2FsbCgKKyAgICAgICAgaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIElu
bGluZUNhbGxGcmFtZTo6S2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLAorICAgICAgICBO
b2RlKiBjYWxsVGFyZ2V0LCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCwgQ2FsbExp
bmtTdGF0dXMpOwogICAgIHZvaWQgaGFuZGxlQ2FsbChpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLCBpbnQgY2Fs
bGVlLCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCk7CiAgICAgdm9pZCBoYW5kbGVD
YWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQp
OwogICAgIHZvaWQgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgTm9k
ZSogY2FsbFRhcmdldCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
KTsKICAgICB2b2lkIGVtaXRBcmd1bWVudFBoYW50b21zKGludCByZWdpc3Rlck9mZnNldCwgaW50
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAg
ICAvLyBIYW5kbGUgaW5saW5pbmcuIFJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwgZmFsc2Ug
aWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCi0gICAgYm9vbCBoYW5kbGVJbmxpbmluZyhOb2Rl
KiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVz
JiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVu
c2lnbmVkIG5leHRPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgIGJvb2wgaGFu
ZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25z
dCBDYWxsTGlua1N0YXR1cyYsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQp
OwogICAgIC8vIEhhbmRsZSBpbnRyaW5zaWMgZnVuY3Rpb25zLiBSZXR1cm4gdHJ1ZSBpZiBpdCBz
dWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgogICAgIGJvb2wgaGFu
ZGxlSW50cmluc2ljKGludCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMsIGludCByZWdpc3Rlck9m
ZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0aW9uKTsKICAgICBib29sIGhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihpbnQgcmVzdWx0
T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSk7CiAgICAgYm9vbCBoYW5kbGVD
b25zdGFudEludGVybmFsRnVuY3Rpb24oaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rp
b24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywg
U3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAg
Tm9kZSogaGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwg
UHJvcGVydHlPZmZzZXQsIE5vZGUqIHZhbHVlKTsKICAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNl
dChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwg
UHJvcGVydHlPZmZzZXQpOwotICAgIHZvaWQgaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAgIGlu
dCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyLAotICAgICAgICBQcm9wZXJ0eU9mZnNldCk7CiAgICAgdm9pZCBo
YW5kbGVHZXRCeUlkKAogICAgICAgICBpbnQgZGVzdGluYXRpb25PcGVyYW5kLCBTcGVjdWxhdGVk
VHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwKICAgICAgICAgY29u
c3QgR2V0QnlJZFN0YXR1cyYpOwpAQCAtODExLDExICs4MTEsMTEgQEAgcHJpdmF0ZToKICAgICAg
ICAgbV9udW1QYXNzZWRWYXJBcmdzKys7CiAgICAgfQogICAgIAotICAgIE5vZGUqIGFkZENhbGwo
aW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIGludCBjYWxsZWUsIGludCBhcmdDb3VudCwgaW50IHJl
Z2lzdGVyT2Zmc2V0KQorICAgIE5vZGUqIGFkZENhbGwoaW50IHJlc3VsdCwgTm9kZVR5cGUgb3As
IE5vZGUqIGNhbGxlZSwgaW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQpCiAgICAgewog
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOwogICAg
ICAgICAKLSAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KFZpcnR1YWxSZWdpc3RlcihjYWxsZWUp
KSk7CisgICAgICAgIGFkZFZhckFyZ0NoaWxkKGNhbGxlZSk7CiAgICAgICAgIHNpemVfdCBwYXJh
bWV0ZXJTbG90cyA9IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBKU1N0YWNrOjpDYWxs
ZXJGcmFtZUFuZFBDU2l6ZSArIGFyZ0NvdW50OwogICAgICAgICBpZiAocGFyYW1ldGVyU2xvdHMg
PiBtX3BhcmFtZXRlclNsb3RzKQogICAgICAgICAgICAgbV9wYXJhbWV0ZXJTbG90cyA9IHBhcmFt
ZXRlclNsb3RzOwpAQCAtMTEyMCw3ICsxMTIwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciByZXR1cm5WYWx1ZVZSLAogICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGlubGluZUNhbGxGcmFtZVN0YXJ0LAogICAgICAgICAgICAgaW50IGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzLAotICAgICAgICAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgICAg
ICAgICBJbmxpbmVDYWxsRnJhbWU6OktpbmQpOwogICAgICAgICAKICAgICAgICAgfklubGluZVN0
YWNrRW50cnkoKQogICAgICAgICB7CkBAIC0xMjAzLDI2ICsxMjAzLDM1IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLAogICAgIGlu
dCBjYWxsZWUsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgaW50IHJlZ2lzdGVyT2Zm
c2V0KQogewotICAgIEFTU0VSVChyZWdpc3Rlck9mZnNldCA8PSAwKTsKLSAgICAKICAgICBOb2Rl
KiBjYWxsVGFyZ2V0ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjYWxsZWUpKTsKICAgICAKLSAgICBD
YWxsTGlua1N0YXR1cyBjYWxsTGlua1N0YXR1czsKLQorICAgIENhbGxMaW5rU3RhdHVzIGNhbGxM
aW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgY3VycmVudENvZGVPcmlnaW4oKSwKKyAgICAgICAg
bV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsTGlua0luZm9zLCBtX2NhbGxDb250ZXh0TWFwKTsKKyAg
ICAKKyAgICBoYW5kbGVDYWxsKAorICAgICAgICByZXN1bHQsIG9wLCBJbmxpbmVDYWxsRnJhbWU6
OmtpbmRGb3Ioa2luZCksIGluc3RydWN0aW9uU2l6ZSwgY2FsbFRhcmdldCwKKyAgICAgICAgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHJlZ2lzdGVyT2Zmc2V0LCBjYWxsTGlua1N0YXR1cyk7
Cit9CisgICAgCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAorICAgIGludCByZXN1
bHQsIE5vZGVUeXBlIG9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgdW5zaWduZWQgaW5z
dHJ1Y3Rpb25TaXplLAorICAgIE5vZGUqIGNhbGxUYXJnZXQsIGludCBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcywgaW50IHJlZ2lzdGVyT2Zmc2V0LAorICAgIENhbGxMaW5rU3RhdHVzIGNhbGxM
aW5rU3RhdHVzKQoreworICAgIEFTU0VSVChyZWdpc3Rlck9mZnNldCA8PSAwKTsKKyAgICBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6
c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQpOworICAgIAogICAgIGlmIChtX2dyYXBoLmlzQ29u
c3RhbnQoY2FsbFRhcmdldCkpIHsKICAgICAgICAgY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0
YXR1cygKICAgICAgICAgICAgIG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQoY2FsbFRhcmdldCkp
LnNldElzUHJvdmVkKHRydWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNhbGxMaW5rU3RhdHVz
ID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICBtX2lubGluZVN0YWNr
VG9wLT5tX3Byb2ZpbGVkQmxvY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCksCi0gICAgICAgICAgICBt
X2lubGluZVN0YWNrVG9wLT5tX2NhbGxMaW5rSW5mb3MsIG1fY2FsbENvbnRleHRNYXApOwogICAg
IH0KICAgICAKICAgICBpZiAoIWNhbGxMaW5rU3RhdHVzLmNhbk9wdGltaXplKCkpIHsKICAgICAg
ICAgLy8gT2RkbHksIHRoaXMgY29uZmxhdGVzIGNhbGxzIHRoYXQgaGF2ZW4ndCBleGVjdXRlZCB3
aXRoIGNhbGxzIHRoYXQgYmVoYXZlZCBzdWZmaWNpZW50bHkgcG9seW1vcnBoaWNhbGx5CiAgICAg
ICAgIC8vIHRoYXQgd2UgY2Fubm90IG9wdGltaXplIHRoZW0uCiAgICAgICAgIAotICAgICAgICBh
ZGRDYWxsKHJlc3VsdCwgb3AsIGNhbGxlZSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHJl
Z2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgYWRkQ2FsbChyZXN1bHQsIG9wLCBjYWxsVGFyZ2V0LCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIApAQCAtMTIzMCwyOCArMTIzOSwyOCBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVDYWxsKAogICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVk
aWN0aW9uKCk7CiAKICAgICBpZiAoSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBjYWxsTGlu
a1N0YXR1cy5pbnRlcm5hbEZ1bmN0aW9uKCkpIHsKLSAgICAgICAgaWYgKGhhbmRsZUNvbnN0YW50
SW50ZXJuYWxGdW5jdGlvbihyZXN1bHQsIGZ1bmN0aW9uLCByZWdpc3Rlck9mZnNldCwgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsIHByZWRpY3Rpb24sIGtpbmQpKSB7CisgICAgICAgIGlmICho
YW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24ocmVzdWx0LCBmdW5jdGlvbiwgcmVnaXN0ZXJP
ZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBwcmVkaWN0aW9uLCBzcGVjaWFsaXph
dGlvbktpbmQpKSB7CiAgICAgICAgICAgICAvLyBUaGlzIHBoYW50b21pbmcgaGFzIHRvIGJlICph
ZnRlciogdGhlIGNvZGUgZm9yIHRoZSBpbnRyaW5zaWMsIHRvIHNpZ25pZnkgdGhhdAogICAgICAg
ICAgICAgLy8gdGhlIGlucHV0cyBtdXN0IGJlIGtlcHQgYWxpdmUgd2hhdGV2ZXIgZXhpdHMgdGhl
IGludHJpbnNpYyBtYXkgZG8uCiAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGNhbGxU
YXJnZXQpOwotICAgICAgICAgICAgZW1pdEFyZ3VtZW50UGhhbnRvbXMocmVnaXN0ZXJPZmZzZXQs
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBraW5kKTsKKyAgICAgICAgICAgIGVtaXRBcmd1
bWVudFBoYW50b21zKHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywg
c3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgLy8gQ2FuIG9ubHkgaGFuZGxlIHRoaXMgdXNpbmcgdGhlIGdlbmVyaWMg
Y2FsbCBoYW5kbGVyLgotICAgICAgICBhZGRDYWxsKHJlc3VsdCwgb3AsIGNhbGxlZSwgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgYWRkQ2FsbChy
ZXN1bHQsIG9wLCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0
ZXJPZmZzZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKLSAgICBJbnRyaW5z
aWMgaW50cmluc2ljID0gY2FsbExpbmtTdGF0dXMuaW50cmluc2ljRm9yKGtpbmQpOworICAgIElu
dHJpbnNpYyBpbnRyaW5zaWMgPSBjYWxsTGlua1N0YXR1cy5pbnRyaW5zaWNGb3Ioc3BlY2lhbGl6
YXRpb25LaW5kKTsKICAgICBpZiAoaW50cmluc2ljICE9IE5vSW50cmluc2ljKSB7Ci0gICAgICAg
IGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1cywgY2FsbFRhcmdldCwgcmVnaXN0ZXJP
ZmZzZXQsIGtpbmQpOworICAgICAgICBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbExpbmtTdGF0dXMs
IGNhbGxUYXJnZXQsIHJlZ2lzdGVyT2Zmc2V0LCBzcGVjaWFsaXphdGlvbktpbmQpOwogICAgICAg
ICAgICAgCiAgICAgICAgIGlmIChoYW5kbGVJbnRyaW5zaWMocmVzdWx0LCBpbnRyaW5zaWMsIHJl
Z2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcHJlZGljdGlvbikpIHsK
ICAgICAgICAgICAgIC8vIFRoaXMgcGhhbnRvbWluZyBoYXMgdG8gYmUgKmFmdGVyKiB0aGUgY29k
ZSBmb3IgdGhlIGludHJpbnNpYywgdG8gc2lnbmlmeSB0aGF0CiAgICAgICAgICAgICAvLyB0aGUg
aW5wdXRzIG11c3QgYmUga2VwdCBhbGl2ZSB3aGF0ZXZlciBleGl0cyB0aGUgaW50cmluc2ljIG1h
eSBkby4KICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgY2FsbFRhcmdldCk7Ci0gICAg
ICAgICAgICBlbWl0QXJndW1lbnRQaGFudG9tcyhyZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIGtpbmQpOworICAgICAgICAgICAgZW1pdEFyZ3VtZW50UGhhbnRvbXMo
cmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBzcGVjaWFsaXphdGlu
S2luZCk7CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQogICAgICAgICAg
ICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZENhbGwoKTsKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTEyNjIsNyArMTI3MSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUNhbGwoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgYWRkQ2FsbChy
ZXN1bHQsIG9wLCBjYWxsZWUsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCByZWdpc3Rlck9m
ZnNldCk7CisgICAgYWRkQ2FsbChyZXN1bHQsIG9wLCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQpOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjplbWl0RnVuY3Rpb25DaGVja3MoY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5rU3RhdHVz
LCBOb2RlKiBjYWxsVGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCkKQEAgLTEyOTcsMTAgKzEzMDYsMTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
ZW1pdEFyZ3VtZW50UGhhbnRvbQogICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpLCByZWdpc3Rlck9mZnNldCkpKTsKIH0KIAotYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCBy
ZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsIGludCBy
ZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBu
ZXh0T2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCitib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJh
bmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiBjYWxsTGlua1N0YXR1cywgaW50IHJlZ2lzdGVyT2Zm
c2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQs
IElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kKQogewogICAgIHN0YXRpYyBjb25zdCBib29sIHZl
cmJvc2UgPSBmYWxzZTsKICAgICAKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxp
emF0aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQp
OworICAgIAogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyBp
bmxpbmluZyAiLCBjYWxsTGlua1N0YXR1cywgIiBpbnRvICIsIGN1cnJlbnRDb2RlT3JpZ2luKCks
ICJcbiIpOwogICAgIApAQCAtMTMzMywxNCArMTM0NCwxNCBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgLy8gaWYgd2UgaGFkIGEgc3RhdGljIHByb29mIG9m
IHdoYXQgd2FzIGJlaW5nIGNhbGxlZDsgdGhpcyBtaWdodCBoYXBwZW4gZm9yIGV4YW1wbGUgaWYg
eW91IGNhbGwgYQogICAgIC8vIGdsb2JhbCBmdW5jdGlvbiwgd2hlcmUgd2F0Y2hwb2ludGluZyBn
aXZlcyB1cyBzdGF0aWMgaW5mb3JtYXRpb24uIE92ZXJhbGwsIGl0J3MgYSByYXJlIGNhc2UKICAg
ICAvLyBiZWNhdXNlIHdlIGV4cGVjdCB0aGF0IGFueSBob3QgY2FsbGVlcyB3b3VsZCBoYXZlIGFs
cmVhZHkgYmVlbiBjb21waWxlZC4KLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWN1dGFi
bGUtPmJhc2VsaW5lQ29kZUJsb2NrRm9yKGtpbmQpOworICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gZXhlY3V0YWJsZS0+YmFzZWxpbmVDb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKTsK
ICAgICBpZiAoIWNvZGVCbG9jaykgewogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAg
IGRhdGFMb2coIiAgICBGYWlsaW5nIGJlY2F1c2Ugbm8gY29kZSBibG9jayBhdmFpbGFibGUuXG4i
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBDYXBhYmlsaXR5TGV2ZWwgY2Fw
YWJpbGl0eUxldmVsID0gaW5saW5lRnVuY3Rpb25Gb3JDYXBhYmlsaXR5TGV2ZWwoCi0gICAgICAg
IGNvZGVCbG9jaywga2luZCwgY2FsbExpbmtTdGF0dXMuaXNDbG9zdXJlQ2FsbCgpKTsKKyAgICAg
ICAgY29kZUJsb2NrLCBzcGVjaWFsaXphdGlvbktpbmQsIGNhbGxMaW5rU3RhdHVzLmlzQ2xvc3Vy
ZUNhbGwoKSk7CiAgICAgaWYgKCFjYW5JbmxpbmUoY2FwYWJpbGl0eUxldmVsKSkgewogICAgICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBGYWlsaW5nIGJlY2F1c2Ug
dGhlIGZ1bmN0aW9uIGlzIG5vdCBpbmxpbmVhYmxlLlxuIik7CkBAIC0xMzkyLDcgKzE0MDMsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgLy8gTm93IHdl
IGtub3cgd2l0aG91dCBhIGRvdWJ0IHRoYXQgd2UgYXJlIGNvbW1pdHRlZCB0byBpbmxpbmluZy4g
U28gYmVnaW4gdGhlIHByb2Nlc3MKICAgICAvLyBieSBjaGVja2luZyB0aGUgY2FsbGVlIChpZiBu
ZWNlc3NhcnkpIGFuZCBtYWtpbmcgc3VyZSB0aGF0IGFyZ3VtZW50cyBhbmQgdGhlIGNhbGxlZQog
ICAgIC8vIGFyZSBmbHVzaGVkLgotICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1
cywgY2FsbFRhcmdldE5vZGUsIHJlZ2lzdGVyT2Zmc2V0LCBraW5kKTsKKyAgICBlbWl0RnVuY3Rp
b25DaGVja3MoY2FsbExpbmtTdGF0dXMsIGNhbGxUYXJnZXROb2RlLCByZWdpc3Rlck9mZnNldCwg
c3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICAKICAgICAvLyBGSVhNRTogRG9uJ3QgZmx1c2ggY29u
c3RhbnRzIQogICAgIApAQCAtMTg2NywxMyArMTg3OCw2IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVHZXRCeU9mZnNldCgKICAgICByZXR1cm4gZ2V0QnlPZmZzZXQ7CiB9CiAKLXZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAotICAgIGludCBkZXN0aW5hdGlvbk9w
ZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotewotICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwgaGFuZGxlR2V0QnlPZmZzZXQocHJl
ZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgb2Zmc2V0KSk7Ci19Ci0KIE5vZGUqIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVu
dGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGUqIHZhbHVlKQogewogICAgIE5vZGUq
IHByb3BlcnR5U3RvcmFnZTsKQEAgLTE5MTAsMTggKzE5MTQsMTkgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICBpbnQgZGVzdGluYXRpb25PcGVyYW5kLCBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LAogICAgIGNvbnN0IEdldEJ5SWRTdGF0dXMmIGdldEJ5SWRTdGF0dXMpCiB7CisgICAgTm9kZVR5
cGUgZ2V0QnlJZCA9IGdldEJ5SWRTdGF0dXMubWFrZXNDYWxscygpID8gR2V0QnlJZEZsdXNoIDog
R2V0QnlJZDsKKyAgICAKICAgICBpZiAoIWdldEJ5SWRTdGF0dXMuaXNTaW1wbGUoKSB8fCAhT3B0
aW9uczo6ZW5hYmxlQWNjZXNzSW5saW5pbmcoKSkgewogICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKGRlc3RpbmF0aW9uT3BlcmFuZCksCi0gICAgICAgICAgICBhZGRUb0dyYXBoKAotICAgICAg
ICAgICAgICAgIGdldEJ5SWRTdGF0dXMubWFrZXNDYWxscygpID8gR2V0QnlJZEZsdXNoIDogR2V0
QnlJZCwKLSAgICAgICAgICAgICAgICBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9wSW5mbyhw
cmVkaWN0aW9uKSwgYmFzZSkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChnZXRCeUlkLCBPcElu
Zm8oaWRlbnRpZmllck51bWJlciksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGlmIChnZXRCeUlkU3RhdHVzLm51bVZhcmlhbnRz
KCkgPiAxKSB7Ci0gICAgICAgIGlmICghaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkgfHwgIU9w
dGlvbnM6OmVuYWJsZVBvbHltb3JwaGljQWNjZXNzSW5saW5pbmcoKSkgeworICAgICAgICBpZiAo
Z2V0QnlJZFN0YXR1cy5tYWtlc0NhbGxzKCkgfHwgIWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUp
CisgICAgICAgICAgICB8fCAhT3B0aW9uczo6ZW5hYmxlUG9seW1vcnBoaWNBY2Nlc3NJbmxpbmlu
ZygpKSB7CiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uT3BlcmFu
ZCksCi0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChHZXRCeUlkLCBPcEluZm8oaWRlbnRpZmll
ck51bWJlciksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOworICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoZ2V0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8ocHJlZGlj
dGlvbiksIGJhc2UpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAK
QEAgLTE5NzgsOSArMTk4Myw0OCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlk
KAogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uT3BlcmFuZCksIGNlbGxD
b25zdGFudCh2YXJpYW50LnNwZWNpZmljVmFsdWUoKS5hc0NlbGwoKSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQorCisgICAgTm9kZSogbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldChw
cmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKICAg
ICAKLSAgICBoYW5kbGVHZXRCeU9mZnNldCgKLSAgICAgICAgZGVzdGluYXRpb25PcGVyYW5kLCBw
cmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKKyAg
ICBpZiAoIXZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSkgeworICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKGRlc3RpbmF0aW9uT3BlcmFuZCksIGxvYWRlZFZhbHVlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICAvLyBNYWtlIGEgY2FsbC4gV2UgZG9uJ3QgdHJ5IHRvIGdldCBm
YW5jeSB3aXRoIHVzaW5nIHRoZSBzbWFsbGVzdCBvcGVyYW5kIG51bWJlciBiZWNhdXNlCisgICAg
Ly8gdGhlIHN0YWNrIGxheW91dCBwaGFzZSBzaG91bGQgY29tcHJlc3MgdGhlIHN0YWNrIGFueXdh
eS4KKyAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZlBhcmFtZXRlcnMgPSAwOworICAgIHBhcmFt
ZXRlckNvdW50Kys7IC8vIFRoZSAndGhpcycgYXJndW1lbnQuCisgICAgcGFyYW1ldGVyQ291bnQr
KzsgLy8gVHJ1ZSByZXR1cm4gUEMuCisgICAgCisgICAgLy8gU3RhcnQgd2l0aCBhIHJlZ2lzdGVy
IG9mZnNldCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBsYXN0IGluLXVzZSByZWdpc3Rlci4KKyAg
ICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgKKyAgICAgICAg
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyAt
IDEpLm9mZnNldCgpOworICAgIHJlZ2lzdGVyT2Zmc2V0IC09IG51bWJlck9mUGFyYW1ldGVyczsK
KyAgICByZWdpc3Rlck9mZnNldCAtPSBKU1N0YWNrOjpDYWxsRnJhbWVSZWdpc3RlclNpemU7Cisg
ICAgCisgICAgLy8gR2V0IHRoZSBhbGlnbm1lbnQgcmlnaHQuCisgICAgcmVnaXN0ZXJPZmZzZXQg
PSAtV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKAorICAgICAgICBzdGFja0FsaWdubWVudFJlZ2lz
dGVycygpLAorICAgICAgICAtcmVnaXN0ZXJPZmZzZXQpOworICAgIAorICAgIGVuc3VyZUxvY2Fs
cygKKyAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKAorICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkudG9Mb2NhbCgpKTsKKyAgICAKKyAgICAv
LyBJc3N1ZSBTZXRMb2NhbHMuIFRoaXMgaGFzIHR3byBlZmZlY3RzOgorICAgIC8vIDEpIFRoYXQn
cyBob3cgaGFuZGxlQ2FsbCgpIHNlZXMgdGhlIGFyZ3VtZW50cy4KKyAgICAvLyAyKSBJZiB3ZSBp
bmxpbmUgdGhlbiB0aGlzIGVuc3VyZXMgdGhhdCB0aGUgYXJndW1lbnRzIGFyZSBmbHVzaGVkIHNv
IHRoYXQgaWYgeW91IHVzZQorICAgIC8vICAgIHRoZSBkcmVhZGVkIGFyZ3VtZW50cyBvYmplY3Qg
b24gdGhlIGdldHRlciwgdGhlIHJpZ2h0IHRoaW5ncyBoYXBwZW4uIFdlbGwsIHNvcnQgb2YgLQor
ICAgIC8vICAgIHNpbmNlIHdlIG9ubHkgcmVhbGx5IGNhcmUgYWJvdXQgJ3RoaXMnIGluIHRoaXMg
Y2FzZS4gQnV0IHdlJ3JlIG5vdCBnb2luZyB0byB0YWtlIHRoYXQKKyAgICAvLyAgICBzaG9ydGN1
dC4KKyAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpDYWxs
RnJhbWVIZWFkZXJTaXplOworICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKysp
LCBiYXNlLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgCisgICAgaGFuZGxlQ2FsbCgKKyAgICAg
ICAgZGVzdGluYXRpb25PcGVyYW5kLCBDYWxsLCBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGws
IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X2lkKSwKKyAgICAgICAgbG9hZGVkVmFsdWUsIG51bWJl
ck9mUGFyYW1ldGVycywgcmVnaXN0ZXJPZmZzZXQsICp2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkp
OwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCgKQEAgLTMzNzYsNyArMzQy
MCw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmV0dXJuVmFsdWVWUiwKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5saW5lQ2Fs
bEZyYW1lU3RhcnQsCiAgICAgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLAotICAgIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICBJbmxpbmVTdGFja0ZyYW1lOjpLaW5kIGtp
bmQpCiAgICAgOiBtX2J5dGVDb2RlUGFyc2VyKGJ5dGVDb2RlUGFyc2VyKQogICAgICwgbV9jb2Rl
QmxvY2soY29kZUJsb2NrKQogICAgICwgbV9wcm9maWxlZEJsb2NrKHByb2ZpbGVkQmxvY2spCkBA
IC0zNDM1LDcgKzM0NzksNyBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5s
aW5lCiAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCA9IHRydWU7
CiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIgPSBieXRlQ29kZVBhcnNlci0+Y3Vy
cmVudENvZGVPcmlnaW4oKTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5y
ZXNpemUoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOyAvLyBTZXQgdGhlIG51bWJlciBvZiBh
cmd1bWVudHMgaW5jbHVkaW5nIHRoaXMsIGJ1dCBkb24ndCBjb25maWd1cmUgdGhlIHZhbHVlIHJl
Y292ZXJpZXMsIHlldC4KLSAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmtpbmQgPSBJbmxpbmVD
YWxsRnJhbWU6OmtpbmRGb3Ioa2luZCk7CisgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5raW5k
ID0ga2luZDsKICAgICAgICAgCiAgICAgICAgIGlmIChtX2lubGluZUNhbGxGcmFtZS0+Y2FsbGVy
LmlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJl
ZFZhcnMgPSBtX2lubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZS0+Y2FwdHVy
ZWRWYXJzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRT
dHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNj
ZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw3ICs0Niw2IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgdmlz
aXRXZWFrKFJlcGF0Y2hCdWZmZXImKSBvdmVycmlkZTsKICAgICAKLXByaXZhdGU6CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm87CiB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lv
biAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMCw3ICs0MzAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbmF0aXZlQ29uc3RydWN0R2VuCiAgICAgcmV0dXJuIG5hdGl2ZUZvckdlbmVyYXRvcih2bSwg
Q29kZUZvckNvbnN0cnVjdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVw
KFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVwR2VuZXJhdG9yKFZNKiB2
bSkKIHsKICAgICBKU0ludGVyZmFjZUpJVCBqaXQodm0pOwogCkBAIC01MzMsNiArNTMzLDc3IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVwKFZNKiB2bSkKICAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJmaXh1cCBhcml0eSIpKTsKIH0KIAorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGJhc2VsaW5lR2V0dGVyUmV0dXJuVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQor
eworICAgIEpTSW50ZXJmYWNlSklUIGppdCh2bSk7CisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICBqaXQuc2V0dXBSZXN1bHRzKHJlZ1QxLCByZWdUMCk7CisjZWxzZQorICAgIGppdC5zZXR1
cFJlc3VsdHMocmVnVDApOworI2VuZGlmCisgICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZQYXJh
bWV0ZXJzID0gMDsKKyAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsgLy8gVGhlICd0aGlzJyBhcmd1
bWVudC4KKyAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsgLy8gVGhlIHRydWUgcmV0dXJuIFBDLgor
ICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mUmVnc0ZvckNhbGwgPQorICAgICAgICBKU1N0YWNr
OjpDYWxsRnJhbWVIZWFkZXJTaXplICsgbnVtYmVyT2ZQYXJhbWV0ZXJzOworICAgIAorICAgIHVu
c2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0KKyAgICAgICAgbnVtYmVyT2ZSZWdzRm9yQ2Fs
bCAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisgICAgCisg
ICAgdW5zaWduZWQgYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsID0KKyAgICAgICAgV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0Zv
ckNhbGwpOworICAgICAgICAgICAgCisgICAgLy8gVGhlIHJlYWwgcmV0dXJuIGFkZHJlc3MgaXMg
c3RvcmVkIGFib3ZlIHRoZSBhcmd1bWVudHMuIFdlIHBhc3NlZCBvbmUgYXJndW1lbnQsIHdoaWNo
IGlzCisgICAgLy8gJ3RoaXMnLiBTbyBhcmd1bWVudCBhdCBpbmRleCAxIGlzIHRoZSByZXR1cm4g
YWRkcmVzcy4KKyAgICBqaXQubG9hZFB0cigKKyAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpBZGRy
ZXNzKAorICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwK
KyAgICAgICAgICAgICh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKSAtIEpTU3RhY2s6OkNh
bGxlckZyYW1lQW5kUENTaXplKSAqIHNpemVvZihSZWdpc3RlcikpLAorICAgICAgICBHUFJJbmZv
OjpyZWdUMik7CisgICAgCisgICAgaml0LmFkZFB0cigKKyAgICAgICAgQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKKyAgICAgICAgQXNz
ZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgCisgICAgaml0Lmp1bXAo
cmVnVDIpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYmFzZWxpbmVTZXR0ZXJSZXR1cm5U
aHVua0dlbmVyYXRvcihWTSogdm0pCit7CisgICAgSlNJbnRlcmZhY2VKSVQgaml0KHZtKTsKKyAg
ICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZlBhcmFtZXRlcnMgPSAwOworICAgIG51bWJlck9mUGFy
YW1ldGVycysrOyAvLyBUaGUgJ3RoaXMnIGFyZ3VtZW50LgorICAgIG51bWJlck9mUGFyYW1ldGVy
cysrOyAvLyBUaGUgdmFsdWUgdG8gc2V0LgorICAgIG51bWJlck9mUGFyYW1ldGVycysrOyAvLyBU
aGUgdHJ1ZSByZXR1cm4gUEMuCisgICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZSZWdzRm9yQ2Fs
bCA9CisgICAgICAgIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBudW1iZXJPZlBhcmFt
ZXRlcnM7CisgICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQorICAgICAg
ICBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKTsKKyAgICAKKyAgICB1bnNpZ25lZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNh
bGwgPQorICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRl
cygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7CisgICAgICAgICAgICAKKyAgICAvLyBUaGUgcmVh
bCByZXR1cm4gYWRkcmVzcyBpcyBzdG9yZWQgYWJvdmUgdGhlIGFyZ3VtZW50cy4gV2UgcGFzc2Vk
IHR3byBhcmd1bWVudHMsIHNvCisgICAgLy8gdGhlIGFyZ3VtZW50IGF0IGluZGV4IDIgaXMgdGhl
IHJldHVybiBhZGRyZXNzLgorICAgIGppdC5sb2FkUHRyKAorICAgICAgICBBc3NlbWJseUhlbHBl
cnM6OkFkZHJlc3MoCisgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyLAorICAgICAgICAgICAgKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDIpIC0gSlNT
dGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUpICogc2l6ZW9mKFJlZ2lzdGVyKSksCisgICAgICAg
IEdQUkluZm86OnJlZ1QyKTsKKyAgICAKKyAgICBqaXQuYWRkUHRyKAorICAgICAgICBBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAorICAg
ICAgICBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAKKyAgICBq
aXQuanVtcChyZWdUMik7Cit9CisKIHN0YXRpYyB2b2lkIHN0cmluZ0NoYXJMb2FkKFNwZWNpYWxp
emVkVGh1bmtKSVQmIGppdCwgVk0qIHZtKQogewogICAgIC8vIGxvYWQgc3RyaW5nCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHJldmlzaW9uIDE2
OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBpbmxpbmUgVGh1bmtHZW5lcmF0b3Igdmly
dHVhbFRodW5rR2VuZXJhCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ2FsbEdlbmVyYXRv
cihWTSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcihW
TSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZVRhaWxDYWxsR2VuZXJhdG9yKFZNKik7
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJpdHlGaXh1cChWTSopOworTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGFyaXR5Rml4dXBHZW5lcmF0b3IoVk0qKTsKIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihWTSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNo
YXJBdFRodW5rR2VuZXJhdG9yKFZNKik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231662</attachid>
            <date>2014-05-18 12:43:02 -0700</date>
            <delta_ts>2014-05-18 18:57:47 -0700</delta_ts>
            <desc>done?</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>38718</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM0NCw2ICsyMzQ0LDE1IEBAIFN0cnVjdHVyZVN0
dWJJbmZvKiBDb2RlQmxvY2s6OmFkZFN0dWJJbmYKICAgICByZXR1cm4gbV9zdHViSW5mb3MuYWRk
KCk7CiB9CiAKK1N0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmZpbmRTdHViSW5mbyhDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4pCit7CisgICAgZm9yIChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gOiBtX3N0dWJJbmZvcykgeworICAgICAgICBpZiAoc3R1YkluZm8tPmNvZGVPcmlnaW4gPT0g
Y29kZU9yaWdpbikKKyAgICAgICAgICAgIHJldHVybiBzdHViSW5mbzsKKyAgICB9CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKIENhbGxMaW5rSW5mbyogQ29kZUJsb2NrOjphZGRDYWxsTGlua0lu
Zm8oKQogewogICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNjkw
MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIwMSw2ICsyMDEsMTAgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZVN0dWJJ
bmZvKiBhZGRTdHViSW5mbygpOwogICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9y
IHN0dWJJbmZvQmVnaW4oKSB7IHJldHVybiBtX3N0dWJJbmZvcy5iZWdpbigpOyB9CiAgICAgQmFn
PFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3Igc3R1YkluZm9FbmQoKSB7IHJldHVybiBtX3N0
dWJJbmZvcy5lbmQoKTsgfQorICAgIAorICAgIC8vIE8obikgb3BlcmF0aW9uLiBVc2UgZ2V0U3R1
YkluZm9NYXAoKSB1bmxlc3MgeW91IHJlYWxseSBvbmx5IGludGVuZCB0byBnZXQgb25lCisgICAg
Ly8gc3R1YiBpbmZvLgorICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBmaW5kU3R1YkluZm8oQ29kZU9y
aWdpbik7CiAKICAgICB2b2lkIHJlc2V0U3R1YihTdHJ1Y3R1cmVTdHViSW5mbyYpOwogICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAko
cmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVP
cmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsNiArMjA2LDEyIEBAIHZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0MKICAgICBjYXNlIEpTQzo6SW5saW5lQ2FsbEZy
YW1lOjpDb25zdHJ1Y3Q6CiAgICAgICAgIG91dC5wcmludCgiQ29uc3RydWN0Iik7CiAgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpHZXR0ZXJDYWxsOgorICAg
ICAgICBvdXQucHJpbnQoIkdldHRlckNhbGwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
SlNDOjpJbmxpbmVDYWxsRnJhbWU6OlNldHRlckNhbGw6CisgICAgICAgIG91dC5wcmludCgiU2V0
dGVyQ2FsbCIpOworICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlT3JpZ2luLmgJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw2ICsxMjEsMTEgQEAg
c3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgZW51bSBLaW5kIHsKICAgICAgICAgQ2FsbCwK
ICAgICAgICAgQ29uc3RydWN0LAorICAgICAgICAKKyAgICAgICAgLy8gRm9yIHRoZXNlLCB0aGUg
c3RhY2tPZmZzZXQgaW5jb3Jwb3JhdGVzIHRoZSBhcmd1bWVudCBjb3VudCBwbHVzIHRoZSB0cnVl
IHJldHVybiBQQworICAgICAgICAvLyBzbG90LgorICAgICAgICBHZXR0ZXJDYWxsLAorICAgICAg
ICBTZXR0ZXJDYWxsCiAgICAgfTsKICAgICAKICAgICBzdGF0aWMgS2luZCBraW5kRm9yKENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCkKQEAgLTEzOSw2ICsxNDQsOCBAQCBzdHJ1Y3QgSW5saW5l
Q2FsbEZyYW1lIHsKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewogICAgICAgICBjYXNl
IENhbGw6CisgICAgICAgIGNhc2UgR2V0dGVyQ2FsbDoKKyAgICAgICAgY2FzZSBTZXR0ZXJDYWxs
OgogICAgICAgICAgICAgcmV0dXJuIENvZGVGb3JDYWxsOwogICAgICAgICBjYXNlIENvbnN0cnVj
dDoKICAgICAgICAgICAgIHJldHVybiBDb2RlRm9yQ29uc3RydWN0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24g
MTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNyArMTQ4LDcgQEAgR2V0QnlJZFN0YXR1cyBHZXRC
eUlkU3RhdHVzOjpjb21wdXRlRm9yKAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgcmVzdWx0
ID0gY29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIG1h
cC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSksIHVpZCk7CisgICAgICAgIGxvY2tlciwg
cHJvZmlsZWRCbG9jaywgcHJvZmlsZWRCbG9jaywgbWFwLmdldChDb2RlT3JpZ2luKGJ5dGVjb2Rl
SW5kZXgpKSwgdWlkKTsKICAgICAKICAgICBpZiAoIXJlc3VsdC50YWtlc1Nsb3dQYXRoKCkKICAg
ICAgICAgJiYgKGhhc0V4aXRTaXRlKGxvY2tlciwgcHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRl
eCkKQEAgLTE2NiwyMiArMTY2LDIyIEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvcigKIAogI2lmIEVOQUJMRShKSVQpCiBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3JTdHViSW5mbygKLSAgICBjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ29k
ZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sCi0gICAg
U3RyaW5nSW1wbCogdWlkKQorICAgIGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDb2RlQmxv
Y2sqIGJhc2VsaW5lUHJvZmlsZWRCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLAorICAg
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RyaW5nSW1wbCogdWlkLCBDYWxsTGlua1N0
YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEpCiB7CiAgICAgaWYgKCFzdHViSW5m
byB8fCAhc3R1YkluZm8tPnNlZW4pCiAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKE5vSW5m
b3JtYXRpb24pOwogICAgIAogICAgIGlmIChzdHViSW5mby0+cmVzZXRCeUdDKQogICAgICAgICBy
ZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCB0cnVlKTsKLQorICAgIAogICAgIFBv
bHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3QgPSAwOworICAgIFN0YXRlIHRha2VzU2xvd1BhdGgg
PSBUYWtlc1Nsb3dQYXRoOwogICAgIGlmIChzdHViSW5mby0+YWNjZXNzVHlwZSA9PSBhY2Nlc3Nf
Z2V0X2J5X2lkX2xpc3QpIHsKICAgICAgICAgbGlzdCA9IHN0dWJJbmZvLT51LmdldEJ5SWRMaXN0
Lmxpc3Q7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgaWYgKGxpc3QtPmF0KGkpLmRvZXNDYWxscygpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMsIHRydWUpOwotICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgp
OyArK2kpCisgICAgICAgICAgICB0YWtlc1Nsb3dQYXRoID0gTWFrZXNDYWxsczsKICAgICB9CiAg
ICAgCiAgICAgLy8gRmluYWxseSBmaWd1cmUgb3V0IGlmIHdlIGNhbiBkZXJpdmUgYW4gYWNjZXNz
IHN0cmF0ZWd5LgpAQCAtMjE1LDggKzIxNSw2IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvclMKICAgICAgICAgCiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6
IHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBsaXN0SW5kZXggPSAwOyBsaXN0SW5kZXggPCBsaXN0
LT5zaXplKCk7ICsrbGlzdEluZGV4KSB7Ci0gICAgICAgICAgICBBU1NFUlQoIWxpc3QtPmF0KGxp
c3RJbmRleCkuZG9lc0NhbGxzKCkpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGxpc3QtPmF0KGxpc3RJbmRleCkuc3RydWN0dXJlKCk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXNzZXJ0IHRoYXQgd2UgbmV2
ZXIgc2VlIGEgc3RydWN0dXJlIHRoYXQKQEAgLTIyNiwxNCArMjI0LDE0IEBAIEdldEJ5SWRTdGF0
dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE4MTAKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHko
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCB0
cnVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyh0YWtlc1Nsb3dQYXRo
LCB0cnVlKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGxpc3QtPmF0KGxpc3RJbmRl
eCkuY2hhaW4oKSkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNo
YWluPiBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAogICAgICAg
ICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBzdHJ1Y3R1cmUsIGxpc3QtPmF0KGxpc3RJbmRl
eCkuY2hhaW4oKSwKICAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXQobGlzdEluZGV4KS5jaGFp
bkNvdW50KCkpKTsKICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5jb21wdXRlRm9yQ2hhaW4o
cHJvZmlsZWRCbG9jaywgdWlkLCBjaGFpbikpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBH
ZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgsIHRydWUpOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gR2V0QnlJZFN0YXR1cyh0YWtlc1Nsb3dQYXRoLCB0cnVlKTsKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjQ1LDcgKzI0Myw3
IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAg
ICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFp
c1ZhbGlkT2Zmc2V0KG15T2Zmc2V0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0
YXR1cyhUYWtlc1Nsb3dQYXRoLCB0cnVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJ
ZFN0YXR1cyh0YWtlc1Nsb3dQYXRoLCB0cnVlKTsKIAogICAgICAgICAgICAgYm9vbCBmb3VuZCA9
IGZhbHNlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSAwOyB2YXJp
YW50SW5kZXggPCByZXN1bHQubV92YXJpYW50cy5zaXplKCk7ICsrdmFyaWFudEluZGV4KSB7CkBA
IC0yNzAsOCArMjY4LDMyIEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
clMKICAgICAgICAgICAgIGlmIChmb3VuZCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudChHZXRCeUlk
VmFyaWFudChTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgbXlPZmZzZXQsIHNwZWNpZmljVmFsdWUp
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCB0
cnVlKTsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExp
bmtTdGF0dXM7CisgICAgICAgICAgICBzd2l0Y2ggKGxpc3QtPmF0KGxpc3RJbmRleCkudHlwZSgp
KSB7CisgICAgICAgICAgICBjYXNlIFNpbXBsZUlubGluZToKKyAgICAgICAgICAgIGNhc2UgU2lt
cGxlU3R1YjogeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgY2FzZSBHZXR0ZXI6IHsKKyAgICAgICAgICAgICAgICBBY2Nlc3NvckNhbGxKSVRTdHVi
Um91dGluZSogc3R1YiA9IHN0YXRpY19jYXN0PEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKj4o
CisgICAgICAgICAgICAgICAgICAgIGxpc3QtPmF0KGxpc3RJbmRleCkuc3R1YlJvdXRpbmUoKSk7
CisgICAgICAgICAgICAgICAgY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxM
aW5rU3RhdHVzPigKKyAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVG
b3IobG9ja2VyLCBzdHViLT5tX2NhbGxMaW5rSW5mbykpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBDdXN0b21HZXR0ZXI6IHsKKyAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgdG90YWxseSBzd2VldCB0byBzdXBwb3J0
IHRoaXMgYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLgorICAgICAgICAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwNTIKKyAgICAgICAgICAg
ICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyh0YWtlc1Nsb3dQYXRoLCB0cnVlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCgKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQo
c3RydWN0dXJlKSwgbXlPZmZzZXQsIHNwZWNpZmljVmFsdWUsIHN0ZDo6bW92ZShjYWxsTGlua1N0
YXR1cykpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyh0YWtlc1Nsb3dQYXRoLCB0cnVl
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTMwOCw3
ICszMzAsNyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAg
ICAgIEdldEJ5SWRTdGF0dXMgcmVzdWx0OwogICAgICAgICB7CiAgICAgICAgICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihkZmdCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgIHJlc3Vs
dCA9IGNvbXB1dGVGb3JTdHViSW5mbyhsb2NrZXIsIGRmZ0Jsb2NrLCBkZmdNYXAuZ2V0KGNvZGVP
cmlnaW4pLCB1aWQpOworICAgICAgICAgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKGxv
Y2tlciwgcHJvZmlsZWRCbG9jaywgZGZnQmxvY2ssIGRmZ01hcC5nZXQoY29kZU9yaWdpbiksIHVp
ZCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChyZXN1bHQudGFrZXNTbG93UGF0
aCgpKQpAQCAtMzYxLDYgKzM4MywyNCBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3IoCiAgICAgICAgIFNpbXBsZSwgZmFsc2UsIEdldEJ5SWRWYXJpYW50KFN0cnVjdHVy
ZVNldChzdHJ1Y3R1cmUpLCBvZmZzZXQsIHNwZWNpZmljVmFsdWUpKTsKIH0KIAorYm9vbCBHZXRC
eUlkU3RhdHVzOjptYWtlc0NhbGxzKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsK
KyAgICBjYXNlIE5vSW5mb3JtYXRpb246CisgICAgY2FzZSBUYWtlc1Nsb3dQYXRoOgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBTaW1wbGU6CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1fdmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBpZiAobV92YXJpYW50
c1tpXS5jYWxsTGlua1N0YXR1cygpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIE1ha2VzQ2FsbHM6CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCiB2b2lkIEdldEJ5SWRTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
IHsKICAgICBvdXQucHJpbnQoIigiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNiArMjYsNyBAQAogI2lmbmRlZiBHZXRCeUlkU3RhdHVzX2gKICNkZWZpbmUgR2V0QnlJZFN0
YXR1c19oCiAKKyNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgogI2luY2x1ZGUgIkNvZGVPcmln
aW4uaCIKICNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgogI2luY2x1ZGUgIkV4aXRpbmdK
SVRUeXBlLmgiCkBAIC04Myw3ICs4NCw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBHZXRCeUlkVmFy
aWFudCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsg
fQogCiAgICAgYm9vbCB0YWtlc1Nsb3dQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBU
YWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0gTWFrZXNDYWxsczsgfQotICAgIGJvb2wgbWFrZXND
YWxscygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gTWFrZXNDYWxsczsgfQorICAgIGJvb2wg
bWFrZXNDYWxscygpIGNvbnN0OwogICAgIAogICAgIGJvb2wgd2FzU2VlbkluSklUKCkgY29uc3Qg
eyByZXR1cm4gbV93YXNTZWVuSW5KSVQ7IH0KICAgICAKQEAgLTk0LDcgKzk1LDEwIEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIGJvb2wgaGFzRXhpdFNpdGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tl
ciYsIENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIEV4aXRpbmdKSVRUeXBlID0g
RXhpdEZyb21Bbnl0aGluZyk7CiAjZW5kaWYKICNpZiBFTkFCTEUoSklUKQotICAgIHN0YXRpYyBH
ZXRCeUlkU3RhdHVzIGNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SklUTG9ja2Vy
JiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8qLCBTdHJpbmdJbXBsKiB1aWQpOworICAg
IHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAgY29uc3Qg
Q29uY3VycmVudEpJVExvY2tlciYsIENvZGVCbG9jayogYmFzZWxpbmVQcm9maWxlZEJsb2NrLAor
ICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwgU3Ry
aW5nSW1wbCogdWlkLAorICAgICAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKICNl
bmRpZgogICAgIGJvb2wgY29tcHV0ZUZvckNoYWluKENvZGVCbG9jayosIFN0cmluZ0ltcGwqIHVp
ZCwgUGFzc1JlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPik7CiAgICAgc3RhdGljIEdldEJ5
SWRTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4LCBTdHJpbmdJbXBsKiB1aWQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiwxMCArMjYsMzAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJH
ZXRCeUlkVmFyaWFudC5oIgogCisjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKICNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCitHZXRCeUlkVmFyaWFudDo6fkdl
dEJ5SWRWYXJpYW50KCkgeyB9CisKK0dldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudChjb25z
dCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCit7CisgICAgKnRoaXMgPSBvdGhlcjsKK30KKworR2V0
QnlJZFZhcmlhbnQmIEdldEJ5SWRWYXJpYW50OjpvcGVyYXRvcj0oY29uc3QgR2V0QnlJZFZhcmlh
bnQmIG90aGVyKQoreworICAgIG1fc3RydWN0dXJlU2V0ID0gb3RoZXIubV9zdHJ1Y3R1cmVTZXQ7
CisgICAgbV9jaGFpbiA9IG90aGVyLm1fY2hhaW47CisgICAgbV9zcGVjaWZpY1ZhbHVlID0gb3Ro
ZXIubV9zcGVjaWZpY1ZhbHVlOworICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7CisgICAg
aWYgKG90aGVyLm1fY2FsbExpbmtTdGF0dXMpCisgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBz
dGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7
CisgICAgZWxzZQorICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gbnVsbHB0cjsKK30KKwogdm9p
ZCBHZXRCeUlkVmFyaWFudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIGR1
bXBJbkNvbnRleHQob3V0LCAwKTsKQEAgLTQ1LDcgKzY1LDEwIEBAIHZvaWQgR2V0QnlJZFZhcmlh
bnQ6OmR1bXBJbkNvbnRleHQoUHJpbnQKICAgICBvdXQucHJpbnQoCiAgICAgICAgICI8IiwgaW5D
b250ZXh0KHN0cnVjdHVyZVNldCgpLCBjb250ZXh0KSwgIiwgIiwKICAgICAgICAgcG9pbnRlckR1
bXBJbkNvbnRleHQoY2hhaW4oKSwgY29udGV4dCksICIsICIsCi0gICAgICAgIGluQ29udGV4dChz
cGVjaWZpY1ZhbHVlKCksIGNvbnRleHQpLCAiLCAiLCBvZmZzZXQoKSwgIj4iKTsKKyAgICAgICAg
aW5Db250ZXh0KHNwZWNpZmljVmFsdWUoKSwgY29udGV4dCksICIsICIsIG9mZnNldCgpKTsKKyAg
ICBpZiAobV9jYWxsTGlua1N0YXR1cykKKyAgICAgICAgb3V0LnByaW50KCJjYWxsOiAiLCAqbV9j
YWxsTGlua1N0YXR1cyk7CisgICAgb3V0LnByaW50KCI+Iik7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRW
YXJpYW50LmgJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBDYWxsTGlua1N0YXR1czsKIGNsYXNzIEdldEJ5SWRT
dGF0dXM7CiBzdHJ1Y3QgRHVtcENvbnRleHQ7CiAKQEAgLTQxLDExICs0MiwxMyBAQCBwdWJsaWM6
CiAgICAgR2V0QnlJZFZhcmlhbnQoCiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0
dXJlU2V0ID0gU3RydWN0dXJlU2V0KCksCiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
IGludmFsaWRPZmZzZXQsIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoKSwKLSAgICAg
ICAgUGFzc1JlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbiA9IG51bGxwdHIpCisg
ICAgICAgIFBhc3NSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gY2hhaW4gPSBudWxscHRy
LAorICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVz
ID0gbnVsbHB0cikKICAgICAgICAgOiBtX3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVTZXQpCiAgICAg
ICAgICwgbV9jaGFpbihjaGFpbikKICAgICAgICAgLCBtX3NwZWNpZmljVmFsdWUoc3BlY2lmaWNW
YWx1ZSkKICAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgICAgICwgbV9jYWxsTGlua1N0
YXR1cyhzdGQ6Om1vdmUoY2FsbExpbmtTdGF0dXMpKQogICAgIHsKICAgICAgICAgaWYgKCFzdHJ1
Y3R1cmVTZXQuc2l6ZSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQob2Zmc2V0ID09IGludmFsaWRP
ZmZzZXQpOwpAQCAtNTQsMTIgKzU3LDE4IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAg
ICAKKyAgICB+R2V0QnlJZFZhcmlhbnQoKTsKKyAgICAKKyAgICBHZXRCeUlkVmFyaWFudChjb25z
dCBHZXRCeUlkVmFyaWFudCYpOworICAgIEdldEJ5SWRWYXJpYW50JiBvcGVyYXRvcj0oY29uc3Qg
R2V0QnlJZFZhcmlhbnQmKTsKKyAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4g
ISFtX3N0cnVjdHVyZVNldC5zaXplKCk7IH0KICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsg
cmV0dXJuICFpc1NldCgpOyB9CiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQo
KSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsgfQogICAgIEludGVuZGVkU3RydWN0dXJl
Q2hhaW4qIGNoYWluKCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluKj4obV9jaGFpbi5nZXQoKSk7IH0KICAgICBKU1ZhbHVlIHNwZWNpZmljVmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX3NwZWNpZmljVmFsdWU7IH0KICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIENhbGxMaW5rU3RhdHVzKiBjYWxs
TGlua1N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbExpbmtTdGF0dXMuZ2V0KCk7IH0KICAg
ICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGR1bXBJbkNv
bnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwpAQCAtNzEsNiArODAsNyBA
QCBwcml2YXRlOgogICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBtX2NoYWluOwog
ICAgIEpTVmFsdWUgbV9zcGVjaWZpY1ZhbHVlOwogICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzEsMjEgKzE3MSwyMSBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFuZGxlTWluTWF4KGlu
dCByZXN1bHRPcGVyYW5kLCBOb2RlVHlwZSBvcCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgIAogICAgIC8vIEhhbmRsZSBjYWxscy4gVGhp
cyByZXNvbHZlcyBpc3N1ZXMgc3Vycm91bmRpbmcgaW5saW5pbmcgYW5kIGludHJpbnNpY3MuCisg
ICAgdm9pZCBoYW5kbGVDYWxsKAorICAgICAgICBpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgSW5s
aW5lQ2FsbEZyYW1lOjpLaW5kLCB1bnNpZ25lZCBpbnN0cnVjdGlvblNpemUsCisgICAgICAgIE5v
ZGUqIGNhbGxUYXJnZXQsIGludCBhcmdDb3VudCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBDYWxsTGlu
a1N0YXR1cyk7CiAgICAgdm9pZCBoYW5kbGVDYWxsKGludCByZXN1bHQsIE5vZGVUeXBlIG9wLCBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kLCB1bnNpZ25lZCBpbnN0cnVjdGlvblNpemUsIGludCBjYWxs
ZWUsIGludCBhcmdDb3VudCwgaW50IHJlZ2lzdGVyT2Zmc2V0KTsKICAgICB2b2lkIGhhbmRsZUNh
bGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7
CiAgICAgdm9pZCBlbWl0RnVuY3Rpb25DaGVja3MoY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBOb2Rl
KiBjYWxsVGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQp
OwogICAgIHZvaWQgZW1pdEFyZ3VtZW50UGhhbnRvbXMoaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAg
IC8vIEhhbmRsZSBpbmxpbmluZy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBp
ZiB3ZSBuZWVkIHRvIHBsYW50IGEgY2FsbC4KLSAgICBib29sIGhhbmRsZUlubGluaW5nKE5vZGUq
IGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMm
LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5z
aWduZWQgbmV4dE9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgYm9vbCBoYW5k
bGVJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0
IENhbGxMaW5rU3RhdHVzJiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCk7
CiAgICAgLy8gSGFuZGxlIGludHJpbnNpYyBmdW5jdGlvbnMuIFJldHVybiB0cnVlIGlmIGl0IHN1
Y2NlZWRlZCwgZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCiAgICAgYm9vbCBoYW5k
bGVJbnRyaW5zaWMoaW50IHJlc3VsdE9wZXJhbmQsIEludHJpbnNpYywgaW50IHJlZ2lzdGVyT2Zm
c2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb24pOwogICAgIGJvb2wgaGFuZGxlVHlwZWRBcnJheUNvbnN0cnVjdG9yKGludCByZXN1bHRP
cGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsIFR5cGVkQXJyYXlUeXBlKTsKICAgICBib29sIGhhbmRsZUNv
bnN0YW50SW50ZXJuYWxGdW5jdGlvbihpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlv
biosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICBO
b2RlKiBoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQ
cm9wZXJ0eU9mZnNldCwgTm9kZSogdmFsdWUpOwogICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0
KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQ
cm9wZXJ0eU9mZnNldCk7Ci0gICAgdm9pZCBoYW5kbGVHZXRCeU9mZnNldCgKLSAgICAgICAgaW50
IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIsCi0gICAgICAgIFByb3BlcnR5T2Zmc2V0KTsKICAgICB2b2lkIGhh
bmRsZUdldEJ5SWQoCiAgICAgICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRU
eXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLAogICAgICAgICBjb25z
dCBHZXRCeUlkU3RhdHVzJik7CkBAIC04MTEsMTEgKzgxMSwxMSBAQCBwcml2YXRlOgogICAgICAg
ICBtX251bVBhc3NlZFZhckFyZ3MrKzsKICAgICB9CiAgICAgCi0gICAgTm9kZSogYWRkQ2FsbChp
bnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgaW50IGNhbGxlZSwgaW50IGFyZ0NvdW50LCBpbnQgcmVn
aXN0ZXJPZmZzZXQpCisgICAgTm9kZSogYWRkQ2FsbChpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwg
Tm9kZSogY2FsbGVlLCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCkKICAgICB7CiAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAgICAg
ICAgIAotICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoVmlydHVhbFJlZ2lzdGVyKGNhbGxlZSkp
KTsKKyAgICAgICAgYWRkVmFyQXJnQ2hpbGQoY2FsbGVlKTsKICAgICAgICAgc2l6ZV90IHBhcmFt
ZXRlclNsb3RzID0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIEpTU3RhY2s6OkNhbGxl
ckZyYW1lQW5kUENTaXplICsgYXJnQ291bnQ7CiAgICAgICAgIGlmIChwYXJhbWV0ZXJTbG90cyA+
IG1fcGFyYW1ldGVyU2xvdHMpCiAgICAgICAgICAgICBtX3BhcmFtZXRlclNsb3RzID0gcGFyYW1l
dGVyU2xvdHM7CkBAIC0xMTIwLDcgKzExMjAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHJldHVyblZhbHVlVlIsCiAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
aW5saW5lQ2FsbEZyYW1lU3RhcnQsCiAgICAgICAgICAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsCi0gICAgICAgICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICAgICAg
ICAgIElubGluZUNhbGxGcmFtZTo6S2luZCk7CiAgICAgICAgIAogICAgICAgICB+SW5saW5lU3Rh
Y2tFbnRyeSgpCiAgICAgICAgIHsKQEAgLTEyMDMsMjYgKzEyMDMsMzUgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlQ2FsbCgKICAgICBpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kLCB1bnNpZ25lZCBpbnN0cnVjdGlvblNpemUsCiAgICAgaW50
IGNhbGxlZSwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBpbnQgcmVnaXN0ZXJPZmZz
ZXQpCiB7Ci0gICAgQVNTRVJUKHJlZ2lzdGVyT2Zmc2V0IDw9IDApOwotICAgIAogICAgIE5vZGUq
IGNhbGxUYXJnZXQgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGNhbGxlZSkpOwogICAgIAotICAgIENh
bGxMaW5rU3RhdHVzIGNhbGxMaW5rU3RhdHVzOwotCisgICAgQ2FsbExpbmtTdGF0dXMgY2FsbExp
bmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgbV9pbmxpbmVT
dGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBjdXJyZW50Q29kZU9yaWdpbigpLAorICAgICAgICBt
X2lubGluZVN0YWNrVG9wLT5tX2NhbGxMaW5rSW5mb3MsIG1fY2FsbENvbnRleHRNYXApOworICAg
IAorICAgIGhhbmRsZUNhbGwoCisgICAgICAgIHJlc3VsdCwgb3AsIElubGluZUNhbGxGcmFtZTo6
a2luZEZvcihraW5kKSwgaW5zdHJ1Y3Rpb25TaXplLCBjYWxsVGFyZ2V0LAorICAgICAgICBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQsIGNhbGxMaW5rU3RhdHVzKTsK
K30KKyAgICAKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCisgICAgaW50IHJlc3Vs
dCwgTm9kZVR5cGUgb3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCB1bnNpZ25lZCBpbnN0
cnVjdGlvblNpemUsCisgICAgTm9kZSogY2FsbFRhcmdldCwgaW50IGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzLCBpbnQgcmVnaXN0ZXJPZmZzZXQsCisgICAgQ2FsbExpbmtTdGF0dXMgY2FsbExp
bmtTdGF0dXMpCit7CisgICAgQVNTRVJUKHJlZ2lzdGVyT2Zmc2V0IDw9IDApOworICAgIENvZGVT
cGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kID0gSW5saW5lQ2FsbEZyYW1lOjpz
cGVjaWFsaXphdGlvbktpbmRGb3Ioa2luZCk7CisgICAgCiAgICAgaWYgKG1fZ3JhcGguaXNDb25z
dGFudChjYWxsVGFyZ2V0KSkgewogICAgICAgICBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3Rh
dHVzKAogICAgICAgICAgICAgbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChjYWxsVGFyZ2V0KSku
c2V0SXNQcm92ZWQodHJ1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2FsbExpbmtTdGF0dXMg
PSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAgIG1faW5saW5lU3RhY2tU
b3AtPm1fcHJvZmlsZWRCbG9jaywgY3VycmVudENvZGVPcmlnaW4oKSwKLSAgICAgICAgICAgIG1f
aW5saW5lU3RhY2tUb3AtPm1fY2FsbExpbmtJbmZvcywgbV9jYWxsQ29udGV4dE1hcCk7CiAgICAg
fQogICAgIAogICAgIGlmICghY2FsbExpbmtTdGF0dXMuY2FuT3B0aW1pemUoKSkgewogICAgICAg
ICAvLyBPZGRseSwgdGhpcyBjb25mbGF0ZXMgY2FsbHMgdGhhdCBoYXZlbid0IGV4ZWN1dGVkIHdp
dGggY2FsbHMgdGhhdCBiZWhhdmVkIHN1ZmZpY2llbnRseSBwb2x5bW9ycGhpY2FsbHkKICAgICAg
ICAgLy8gdGhhdCB3ZSBjYW5ub3Qgb3B0aW1pemUgdGhlbS4KICAgICAgICAgCi0gICAgICAgIGFk
ZENhbGwocmVzdWx0LCBvcCwgY2FsbGVlLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVn
aXN0ZXJPZmZzZXQpOworICAgICAgICBhZGRDYWxsKHJlc3VsdCwgb3AsIGNhbGxUYXJnZXQsIGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCkBAIC0xMjMwLDI4ICsxMjM5LDI4IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUNhbGwoCiAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRp
Y3Rpb24oKTsKIAogICAgIGlmIChJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiA9IGNhbGxMaW5r
U3RhdHVzLmludGVybmFsRnVuY3Rpb24oKSkgewotICAgICAgICBpZiAoaGFuZGxlQ29uc3RhbnRJ
bnRlcm5hbEZ1bmN0aW9uKHJlc3VsdCwgZnVuY3Rpb24sIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgcHJlZGljdGlvbiwga2luZCkpIHsKKyAgICAgICAgaWYgKGhh
bmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbihyZXN1bHQsIGZ1bmN0aW9uLCByZWdpc3Rlck9m
ZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHByZWRpY3Rpb24sIHNwZWNpYWxpemF0
aW9uS2luZCkpIHsKICAgICAgICAgICAgIC8vIFRoaXMgcGhhbnRvbWluZyBoYXMgdG8gYmUgKmFm
dGVyKiB0aGUgY29kZSBmb3IgdGhlIGludHJpbnNpYywgdG8gc2lnbmlmeSB0aGF0CiAgICAgICAg
ICAgICAvLyB0aGUgaW5wdXRzIG11c3QgYmUga2VwdCBhbGl2ZSB3aGF0ZXZlciBleGl0cyB0aGUg
aW50cmluc2ljIG1heSBkby4KICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgY2FsbFRh
cmdldCk7Ci0gICAgICAgICAgICBlbWl0QXJndW1lbnRQaGFudG9tcyhyZWdpc3Rlck9mZnNldCwg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGtpbmQpOworICAgICAgICAgICAgZW1pdEFyZ3Vt
ZW50UGhhbnRvbXMocmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBz
cGVjaWFsaXphdGlvbktpbmQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICAvLyBDYW4gb25seSBoYW5kbGUgdGhpcyB1c2luZyB0aGUgZ2VuZXJpYyBj
YWxsIGhhbmRsZXIuCi0gICAgICAgIGFkZENhbGwocmVzdWx0LCBvcCwgY2FsbGVlLCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICBhZGRDYWxsKHJl
c3VsdCwgb3AsIGNhbGxUYXJnZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCByZWdpc3Rl
ck9mZnNldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAotICAgIEludHJpbnNp
YyBpbnRyaW5zaWMgPSBjYWxsTGlua1N0YXR1cy5pbnRyaW5zaWNGb3Ioa2luZCk7CisgICAgSW50
cmluc2ljIGludHJpbnNpYyA9IGNhbGxMaW5rU3RhdHVzLmludHJpbnNpY0ZvcihzcGVjaWFsaXph
dGlvbktpbmQpOwogICAgIGlmIChpbnRyaW5zaWMgIT0gTm9JbnRyaW5zaWMpIHsKLSAgICAgICAg
ZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzLCBjYWxsVGFyZ2V0LCByZWdpc3Rlck9m
ZnNldCwga2luZCk7CisgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1cywg
Y2FsbFRhcmdldCwgcmVnaXN0ZXJPZmZzZXQsIHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgICAg
ICAgICAKICAgICAgICAgaWYgKGhhbmRsZUludHJpbnNpYyhyZXN1bHQsIGludHJpbnNpYywgcmVn
aXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBwcmVkaWN0aW9uKSkgewog
ICAgICAgICAgICAgLy8gVGhpcyBwaGFudG9taW5nIGhhcyB0byBiZSAqYWZ0ZXIqIHRoZSBjb2Rl
IGZvciB0aGUgaW50cmluc2ljLCB0byBzaWduaWZ5IHRoYXQKICAgICAgICAgICAgIC8vIHRoZSBp
bnB1dHMgbXVzdCBiZSBrZXB0IGFsaXZlIHdoYXRldmVyIGV4aXRzIHRoZSBpbnRyaW5zaWMgbWF5
IGRvLgogICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBjYWxsVGFyZ2V0KTsKLSAgICAg
ICAgICAgIGVtaXRBcmd1bWVudFBoYW50b21zKHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywga2luZCk7CisgICAgICAgICAgICBlbWl0QXJndW1lbnRQaGFudG9tcyhy
ZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHNwZWNpYWxpemF0aW5L
aW5kKTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCiAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkQ2FsbCgpOwogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtMTI2Miw3ICsxMjcxLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlQ2FsbCgKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBhZGRDYWxsKHJl
c3VsdCwgb3AsIGNhbGxlZSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHJlZ2lzdGVyT2Zm
c2V0KTsKKyAgICBhZGRDYWxsKHJlc3VsdCwgb3AsIGNhbGxUYXJnZXQsIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCByZWdpc3Rlck9mZnNldCk7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmVtaXRGdW5jdGlvbkNoZWNrcyhjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMs
IE5vZGUqIGNhbGxUYXJnZXQsIGludCByZWdpc3Rlck9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCBraW5kKQpAQCAtMTI5NywxMCArMTMwNiwxMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpl
bWl0QXJndW1lbnRQaGFudG9tCiAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGksIHJlZ2lzdGVyT2Zmc2V0KSkpOwogfQogCi1ib29sIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJl
c3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiBjYWxsTGlua1N0YXR1cywgaW50IHJl
Z2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5l
eHRPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK2Jvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUlubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFu
ZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5rU3RhdHVzLCBpbnQgcmVnaXN0ZXJPZmZz
ZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwg
SW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQpCiB7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVy
Ym9zZSA9IGZhbHNlOwogICAgIAorICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6
YXRpb25LaW5kID0gSW5saW5lQ2FsbEZyYW1lOjpzcGVjaWFsaXphdGlvbktpbmRGb3Ioa2luZCk7
CisgICAgCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIGlu
bGluaW5nICIsIGNhbGxMaW5rU3RhdHVzLCAiIGludG8gIiwgY3VycmVudENvZGVPcmlnaW4oKSwg
IlxuIik7CiAgICAgCkBAIC0xMzMzLDE0ICsxMzQ0LDE0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAvLyBpZiB3ZSBoYWQgYSBzdGF0aWMgcHJvb2Ygb2Yg
d2hhdCB3YXMgYmVpbmcgY2FsbGVkOyB0aGlzIG1pZ2h0IGhhcHBlbiBmb3IgZXhhbXBsZSBpZiB5
b3UgY2FsbCBhCiAgICAgLy8gZ2xvYmFsIGZ1bmN0aW9uLCB3aGVyZSB3YXRjaHBvaW50aW5nIGdp
dmVzIHVzIHN0YXRpYyBpbmZvcm1hdGlvbi4gT3ZlcmFsbCwgaXQncyBhIHJhcmUgY2FzZQogICAg
IC8vIGJlY2F1c2Ugd2UgZXhwZWN0IHRoYXQgYW55IGhvdCBjYWxsZWVzIHdvdWxkIGhhdmUgYWxy
ZWFkeSBiZWVuIGNvbXBpbGVkLgotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlY3V0YWJs
ZS0+YmFzZWxpbmVDb2RlQmxvY2tGb3Ioa2luZCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBleGVjdXRhYmxlLT5iYXNlbGluZUNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQpOwog
ICAgIGlmICghY29kZUJsb2NrKSB7CiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAg
ZGF0YUxvZygiICAgIEZhaWxpbmcgYmVjYXVzZSBubyBjb2RlIGJsb2NrIGF2YWlsYWJsZS5cbiIp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIENhcGFiaWxpdHlMZXZlbCBjYXBh
YmlsaXR5TGV2ZWwgPSBpbmxpbmVGdW5jdGlvbkZvckNhcGFiaWxpdHlMZXZlbCgKLSAgICAgICAg
Y29kZUJsb2NrLCBraW5kLCBjYWxsTGlua1N0YXR1cy5pc0Nsb3N1cmVDYWxsKCkpOworICAgICAg
ICBjb2RlQmxvY2ssIHNwZWNpYWxpemF0aW9uS2luZCwgY2FsbExpbmtTdGF0dXMuaXNDbG9zdXJl
Q2FsbCgpKTsKICAgICBpZiAoIWNhbklubGluZShjYXBhYmlsaXR5TGV2ZWwpKSB7CiAgICAgICAg
IGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygiICAgIEZhaWxpbmcgYmVjYXVzZSB0
aGUgZnVuY3Rpb24gaXMgbm90IGlubGluZWFibGUuXG4iKTsKQEAgLTEzOTIsNyArMTQwMyw3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAvLyBOb3cgd2Ug
a25vdyB3aXRob3V0IGEgZG91YnQgdGhhdCB3ZSBhcmUgY29tbWl0dGVkIHRvIGlubGluaW5nLiBT
byBiZWdpbiB0aGUgcHJvY2VzcwogICAgIC8vIGJ5IGNoZWNraW5nIHRoZSBjYWxsZWUgKGlmIG5l
Y2Vzc2FyeSkgYW5kIG1ha2luZyBzdXJlIHRoYXQgYXJndW1lbnRzIGFuZCB0aGUgY2FsbGVlCiAg
ICAgLy8gYXJlIGZsdXNoZWQuCi0gICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVz
LCBjYWxsVGFyZ2V0Tm9kZSwgcmVnaXN0ZXJPZmZzZXQsIGtpbmQpOworICAgIGVtaXRGdW5jdGlv
bkNoZWNrcyhjYWxsTGlua1N0YXR1cywgY2FsbFRhcmdldE5vZGUsIHJlZ2lzdGVyT2Zmc2V0LCBz
cGVjaWFsaXphdGlvbktpbmQpOwogICAgIAogICAgIC8vIEZJWE1FOiBEb24ndCBmbHVzaCBjb25z
dGFudHMhCiAgICAgCkBAIC0xODY3LDEzICsxODc4LDYgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUdldEJ5T2Zmc2V0KAogICAgIHJldHVybiBnZXRCeU9mZnNldDsKIH0KIAotdm9pZCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgaW50IGRlc3RpbmF0aW9uT3Bl
cmFuZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCi17Ci0gICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLCBoYW5kbGVHZXRCeU9mZnNldChwcmVk
aWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBvZmZzZXQpKTsKLX0KLQogTm9kZSogQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50
aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZSogdmFsdWUpCiB7CiAgICAgTm9kZSog
cHJvcGVydHlTdG9yYWdlOwpAQCAtMTkxMCwxOCArMTkxNCwxOSBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVHZXRCeUlkKAogICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
CiAgICAgY29uc3QgR2V0QnlJZFN0YXR1cyYgZ2V0QnlJZFN0YXR1cykKIHsKKyAgICBOb2RlVHlw
ZSBnZXRCeUlkID0gZ2V0QnlJZFN0YXR1cy5tYWtlc0NhbGxzKCkgPyBHZXRCeUlkRmx1c2ggOiBH
ZXRCeUlkOworICAgIAogICAgIGlmICghZ2V0QnlJZFN0YXR1cy5pc1NpbXBsZSgpIHx8ICFPcHRp
b25zOjplbmFibGVBY2Nlc3NJbmxpbmluZygpKSB7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoCi0gICAgICAg
ICAgICAgICAgZ2V0QnlJZFN0YXR1cy5tYWtlc0NhbGxzKCkgPyBHZXRCeUlkRmx1c2ggOiBHZXRC
eUlkLAotICAgICAgICAgICAgICAgIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZvKHBy
ZWRpY3Rpb24pLCBiYXNlKSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKGdldEJ5SWQsIE9wSW5m
byhpZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgCiAgICAgaWYgKGdldEJ5SWRTdGF0dXMubnVtVmFyaWFudHMo
KSA+IDEpIHsKLSAgICAgICAgaWYgKCFpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSB8fCAhT3B0
aW9uczo6ZW5hYmxlUG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZygpKSB7CisgICAgICAgIGlmIChn
ZXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKSB8fCAhaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkK
KyAgICAgICAgICAgIHx8ICFPcHRpb25zOjplbmFibGVQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5n
KCkpIHsKICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5k
KSwKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEdldEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVy
TnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlKSk7CisgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChnZXRCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9wSW5mbyhwcmVkaWN0
aW9uKSwgYmFzZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApA
QCAtMTk3OCw5ICsxOTgzLDQ4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQo
CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwgY2VsbENv
bnN0YW50KHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpLmFzQ2VsbCgpKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CisKKyAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KHBy
ZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCkpOwogICAg
IAotICAgIGhhbmRsZUdldEJ5T2Zmc2V0KAotICAgICAgICBkZXN0aW5hdGlvbk9wZXJhbmQsIHBy
ZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCkpOworICAg
IGlmICghdmFyaWFudC5jYWxsTGlua1N0YXR1cygpKSB7CisgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwgbG9hZGVkVmFsdWUpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIC8vIE1ha2UgYSBjYWxsLiBXZSBkb24ndCB0cnkgdG8gZ2V0IGZh
bmN5IHdpdGggdXNpbmcgdGhlIHNtYWxsZXN0IG9wZXJhbmQgbnVtYmVyIGJlY2F1c2UKKyAgICAv
LyB0aGUgc3RhY2sgbGF5b3V0IHBoYXNlIHNob3VsZCBjb21wcmVzcyB0aGUgc3RhY2sgYW55d2F5
LgorICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mUGFyYW1ldGVycyA9IDA7CisgICAgcGFyYW1l
dGVyQ291bnQrKzsgLy8gVGhlICd0aGlzJyBhcmd1bWVudC4KKyAgICBwYXJhbWV0ZXJDb3VudCsr
OyAvLyBUcnVlIHJldHVybiBQQy4KKyAgICAKKyAgICAvLyBTdGFydCB3aXRoIGEgcmVnaXN0ZXIg
b2Zmc2V0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGxhc3QgaW4tdXNlIHJlZ2lzdGVyLgorICAg
IGludCByZWdpc3Rlck9mZnNldCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKAorICAgICAgICBt
X2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzIC0g
MSkub2Zmc2V0KCk7CisgICAgcmVnaXN0ZXJPZmZzZXQgLT0gbnVtYmVyT2ZQYXJhbWV0ZXJzOwor
ICAgIHJlZ2lzdGVyT2Zmc2V0IC09IEpTU3RhY2s6OkNhbGxGcmFtZVJlZ2lzdGVyU2l6ZTsKKyAg
ICAKKyAgICAvLyBHZXQgdGhlIGFsaWdubWVudCByaWdodC4KKyAgICByZWdpc3Rlck9mZnNldCA9
IC1XVEY6OnJvdW5kVXBUb011bHRpcGxlT2YoCisgICAgICAgIHN0YWNrQWxpZ25tZW50UmVnaXN0
ZXJzKCksCisgICAgICAgIC1yZWdpc3Rlck9mZnNldCk7CisgICAgCisgICAgZW5zdXJlTG9jYWxz
KAorICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoCisgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS50b0xvY2FsKCkpOworICAgIAorICAgIC8v
IElzc3VlIFNldExvY2Fscy4gVGhpcyBoYXMgdHdvIGVmZmVjdHM6CisgICAgLy8gMSkgVGhhdCdz
IGhvdyBoYW5kbGVDYWxsKCkgc2VlcyB0aGUgYXJndW1lbnRzLgorICAgIC8vIDIpIElmIHdlIGlu
bGluZSB0aGVuIHRoaXMgZW5zdXJlcyB0aGF0IHRoZSBhcmd1bWVudHMgYXJlIGZsdXNoZWQgc28g
dGhhdCBpZiB5b3UgdXNlCisgICAgLy8gICAgdGhlIGRyZWFkZWQgYXJndW1lbnRzIG9iamVjdCBv
biB0aGUgZ2V0dGVyLCB0aGUgcmlnaHQgdGhpbmdzIGhhcHBlbi4gV2VsbCwgc29ydCBvZiAtCisg
ICAgLy8gICAgc2luY2Ugd2Ugb25seSByZWFsbHkgY2FyZSBhYm91dCAndGhpcycgaW4gdGhpcyBj
YXNlLiBCdXQgd2UncmUgbm90IGdvaW5nIHRvIHRha2UgdGhhdAorICAgIC8vICAgIHNob3J0Y3V0
LgorICAgIGludCBuZXh0UmVnaXN0ZXIgPSByZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkNhbGxG
cmFtZUhlYWRlclNpemU7CisgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyks
IGJhc2UsIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAgICAKKyAgICBoYW5kbGVDYWxsKAorICAgICAg
ICBkZXN0aW5hdGlvbk9wZXJhbmQsIENhbGwsIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbCwg
T1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfaWQpLAorICAgICAgICBsb2FkZWRWYWx1ZSwgbnVtYmVy
T2ZQYXJhbWV0ZXJzIC0gMSwgcmVnaXN0ZXJPZmZzZXQsICp2YXJpYW50LmNhbGxMaW5rU3RhdHVz
KCkpOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCgKQEAgLTMzNzYsNyAr
MzQyMCw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmV0dXJuVmFsdWVWUiwKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5saW5l
Q2FsbEZyYW1lU3RhcnQsCiAgICAgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLAotICAg
IENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICBJbmxpbmVTdGFja0ZyYW1lOjpLaW5k
IGtpbmQpCiAgICAgOiBtX2J5dGVDb2RlUGFyc2VyKGJ5dGVDb2RlUGFyc2VyKQogICAgICwgbV9j
b2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9wcm9maWxlZEJsb2NrKHByb2ZpbGVkQmxvY2sp
CkBAIC0zNDM1LDcgKzM0NzksNyBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6
SW5saW5lCiAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCA9IHRy
dWU7CiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIgPSBieXRlQ29kZVBhcnNlci0+
Y3VycmVudENvZGVPcmlnaW4oKTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
cy5yZXNpemUoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOyAvLyBTZXQgdGhlIG51bWJlciBv
ZiBhcmd1bWVudHMgaW5jbHVkaW5nIHRoaXMsIGJ1dCBkb24ndCBjb25maWd1cmUgdGhlIHZhbHVl
IHJlY292ZXJpZXMsIHlldC4KLSAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmtpbmQgPSBJbmxp
bmVDYWxsRnJhbWU6OmtpbmRGb3Ioa2luZCk7CisgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5r
aW5kID0ga2luZDsKICAgICAgICAgCiAgICAgICAgIGlmIChtX2lubGluZUNhbGxGcmFtZS0+Y2Fs
bGVyLmlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYXB0
dXJlZFZhcnMgPSBtX2lubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZS0+Y2Fw
dHVyZWRWYXJzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDgsMTIgKzEwOCw0NCBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMo
Q0NhbGxIZWxwZXJzCiAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0g
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVD
b2RlQmxvY2sgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29kZU9yaWdpbik7CiAgICAgICAg
IENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxpbmVDb2Rl
QmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpOworICAgICAgICB2b2lkKiBqdW1wVGFy
Z2V0OworICAgICAgICB2b2lkKiB0cnVlUmV0dXJuUEMgPSBudWxscHRyOworICAgICAgICAKICAg
ICAgICAgdW5zaWduZWQgY2FsbEJ5dGVjb2RlSW5kZXggPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxl
ci5ieXRlY29kZUluZGV4OwotICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9Ci0g
ICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0Q2FsbExpbmtJbmZvRm9y
Qnl0ZWNvZGVJbmRleChjYWxsQnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KGNhbGxMaW5rSW5mbyk7CiAgICAgICAgIAotICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gY2Fs
bExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAg
ICAgc3dpdGNoIChpbmxpbmVDYWxsRnJhbWUtPmtpbmQpIHsKKyAgICAgICAgY2FzZSBDYWxsOgor
ICAgICAgICBjYXNlIENvbnN0cnVjdDogeworICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxs
TGlua0luZm8gPQorICAgICAgICAgICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5n
ZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KGNhbGxCeXRlY29kZUluZGV4KTsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mbyk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGp1bXBUYXJnZXQgPSBjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVj
dXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEdldHRlckNhbGw6CisgICAgICAgIGNhc2UgU2V0dGVyQ2VsbDog
eworICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0KKyAgICAgICAgICAg
ICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+ZmluZFN0dWJJbmZvKENvZGVPcmlnaW4o
Y2FsbEJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZv
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChpbmxpbmVDYWxsRnJhbWUtPmtp
bmQpIHsKKyAgICAgICAgICAgIGNhc2UgR2V0dGVyQ2FsbDoKKyAgICAgICAgICAgICAgICBqdW1w
VGFyZ2V0ID0gaml0LnZtKCkuZ2V0Q1RJU3R1YihiYXNlbGluZUdldHRlclJldHVyblRodW5rR2Vu
ZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgU2V0dGVyQ2FsbDoKKyAgICAgICAgICAgICAgICBqdW1wVGFy
Z2V0ID0gaml0LnZtKCkuZ2V0Q1RJU3R1YihiYXNlbGluZVNldHRlclJldHVyblRodW5rR2VuZXJh
dG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgdHJ1ZVJldHVyblBDID0gc3R1YkluZm8tPmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRl
bHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9IH0KIAogICAgICAgICBHUFJSZWcgY2FsbGVyRnJhbWVHUFI7CiAgICAgICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpIHsKQEAgLTEyMiwxMiAr
MTU0LDE1IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICBjYWxsZXJGcmFtZUdQUiA9IEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyOwogICAgICAgICAKKyAgICAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbVB0cihqdW1wVGFyZ2V0KSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
Qnl0ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkpKTsKKyAgICAgICAg
aWYgKHRydWVSZXR1cm5QQykKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIodHJ1ZVJldHVyblBDKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNz
Rm9yQnl0ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIGppdC5z
dG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2sp
LCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNvZGVCbG9jaykpKTsKICAgICAgICAgaWYg
KCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAgICAgICBqaXQuc3RvcmU2
NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShp
bmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCktPnNjb3BlKCkpKSksIEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgSlNTdGFjazo6U2NvcGVDaGFpbikpKTsKICAgICAgICAgaml0LnN0b3JlNjQoY2Fs
bGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5l
Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNldCgpKSk7Ci0gICAgICAgIGppdC5zdG9yZVB0cihB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgp
KSk7CiAgICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxGcmFtZTo6TG9jYXRpb246
OmVuY29kZUFzQnl0ZWNvZGVPZmZzZXQoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKICAgICAg
ICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRz
KSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CiAgICAgICAgIGpp
dC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJl
Z2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRD
b3VudCkpKTsKQEAgLTE0Myw3ICsxNzgsNiBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMo
Q0NhbGxIZWxwZXJzCiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxs
KQogICAgICAgICAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0
cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCktPnNjb3BlKCkpLCBBc3NlbWJseUhl
bHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKSk7CiAgICAgICAgIGppdC5zdG9yZVB0cihj
YWxsZXJGcmFtZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxp
bmVDYWxsRnJhbWUtPmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKLSAgICAgICAgaml0LnN0b3JlUHRy
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihqdW1wVGFyZ2V0KSwgQXNzZW1ibHlIZWxw
ZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0
KCkpKTsKICAgICAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gYmFzZWxpbmVDb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXg7CiAg
ICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxGcmFtZTo6TG9jYXRpb246OmVuY29k
ZUFzQnl0ZWNvZGVJbnN0cnVjdGlvbihpbnN0cnVjdGlvbik7CiAgICAgICAgIGppdC5zdG9yZTMy
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVs
cGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaAkocmV2aXNp
b24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRT
dHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw2IEBAIHB1YmxpYzoKICAg
ICAKICAgICB2aXJ0dWFsIGJvb2wgdmlzaXRXZWFrKFJlcGF0Y2hCdWZmZXImKSBvdmVycmlkZTsK
ICAgICAKLXByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rSW5mbz4gbV9jYWxs
TGlua0luZm87CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVu
a0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMCw3ICs0MzAs
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ29uc3RydWN0R2VuCiAgICAgcmV0dXJu
IG5hdGl2ZUZvckdlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCk7CiB9CiAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVwKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBh
cml0eUZpeHVwR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBKU0ludGVyZmFjZUpJVCBqaXQodm0p
OwogCkBAIC01MzMsNiArNTMzLDc3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVw
KFZNKiB2bSkKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJmaXh1cCBh
cml0eSIpKTsKIH0KIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGJhc2VsaW5lR2V0dGVyUmV0dXJu
VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQoreworICAgIEpTSW50ZXJmYWNlSklUIGppdCh2bSk7Cisg
ICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBqaXQuc2V0dXBSZXN1bHRzKHJlZ1QxLCByZWdU
MCk7CisjZWxzZQorICAgIGppdC5zZXR1cFJlc3VsdHMocmVnVDApOworI2VuZGlmCisgICAgCisg
ICAgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0ZXJzID0gMDsKKyAgICBudW1iZXJPZlBhcmFtZXRl
cnMrKzsgLy8gVGhlICd0aGlzJyBhcmd1bWVudC4KKyAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsg
Ly8gVGhlIHRydWUgcmV0dXJuIFBDLgorICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mUmVnc0Zv
ckNhbGwgPQorICAgICAgICBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgbnVtYmVyT2ZQ
YXJhbWV0ZXJzOworICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0KKyAg
ICAgICAgbnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQyk7CisgICAgCisgICAgdW5zaWduZWQgYWxpZ25lZE51bWJlck9mQnl0ZXNG
b3JDYWxsID0KKyAgICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50
Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNhbGwpOworICAgICAgICAgICAgCisgICAgLy8gVGhl
IHJlYWwgcmV0dXJuIGFkZHJlc3MgaXMgc3RvcmVkIGFib3ZlIHRoZSBhcmd1bWVudHMuIFdlIHBh
c3NlZCBvbmUgYXJndW1lbnQsIHdoaWNoIGlzCisgICAgLy8gJ3RoaXMnLiBTbyBhcmd1bWVudCBh
dCBpbmRleCAxIGlzIHRoZSByZXR1cm4gYWRkcmVzcy4KKyAgICBqaXQubG9hZFB0cigKKyAgICAg
ICAgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJz
OjpzdGFja1BvaW50ZXJSZWdpc3RlciwKKyAgICAgICAgICAgICh2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudCgxKSAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplKSAqIHNpemVvZihSZWdp
c3RlcikpLAorICAgICAgICBHUFJJbmZvOjpyZWdUMik7CisgICAgCisgICAgaml0LmFkZFB0cigK
KyAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0
ZXNGb3JDYWxsKSwKKyAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgCisgICAgaml0Lmp1bXAocmVnVDIpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgYmFzZWxpbmVTZXR0ZXJSZXR1cm5UaHVua0dlbmVyYXRvcihWTSogdm0pCit7CisgICAgSlNJ
bnRlcmZhY2VKSVQgaml0KHZtKTsKKyAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZlBhcmFtZXRl
cnMgPSAwOworICAgIG51bWJlck9mUGFyYW1ldGVycysrOyAvLyBUaGUgJ3RoaXMnIGFyZ3VtZW50
LgorICAgIG51bWJlck9mUGFyYW1ldGVycysrOyAvLyBUaGUgdmFsdWUgdG8gc2V0LgorICAgIG51
bWJlck9mUGFyYW1ldGVycysrOyAvLyBUaGUgdHJ1ZSByZXR1cm4gUEMuCisgICAgCisgICAgdW5z
aWduZWQgbnVtYmVyT2ZSZWdzRm9yQ2FsbCA9CisgICAgICAgIEpTU3RhY2s6OkNhbGxGcmFtZUhl
YWRlclNpemUgKyBudW1iZXJPZlBhcmFtZXRlcnM7CisgICAgCisgICAgdW5zaWduZWQgbnVtYmVy
T2ZCeXRlc0ZvckNhbGwgPQorICAgICAgICBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJl
Z2lzdGVyKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKKyAgICAKKyAgICB1bnNpZ25lZCBh
bGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQorICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7CisgICAg
ICAgICAgICAKKyAgICAvLyBUaGUgcmVhbCByZXR1cm4gYWRkcmVzcyBpcyBzdG9yZWQgYWJvdmUg
dGhlIGFyZ3VtZW50cy4gV2UgcGFzc2VkIHR3byBhcmd1bWVudHMsIHNvCisgICAgLy8gdGhlIGFy
Z3VtZW50IGF0IGluZGV4IDIgaXMgdGhlIHJldHVybiBhZGRyZXNzLgorICAgIGppdC5sb2FkUHRy
KAorICAgICAgICBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBBc3NlbWJs
eUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLAorICAgICAgICAgICAgKHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KDIpIC0gSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUpICogc2l6
ZW9mKFJlZ2lzdGVyKSksCisgICAgICAgIEdQUkluZm86OnJlZ1QyKTsKKyAgICAKKyAgICBqaXQu
YWRkUHRyKAorICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVt
YmVyT2ZCeXRlc0ZvckNhbGwpLAorICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKyAgICAKKyAgICBqaXQuanVtcChyZWdUMik7Cit9CisKIHN0YXRpYyB2b2lk
IHN0cmluZ0NoYXJMb2FkKFNwZWNpYWxpemVkVGh1bmtKSVQmIGppdCwgVk0qIHZtKQogewogICAg
IC8vIGxvYWQgc3RyaW5nCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtH
ZW5lcmF0b3JzLmgJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvVGh1bmtHZW5lcmF0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsMTAgQEAg
aW5saW5lIFRodW5rR2VuZXJhdG9yIHZpcnR1YWxUaHVua0dlbmVyYQogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBu
YXRpdmVDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRp
dmVUYWlsQ2FsbEdlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFyaXR5Rml4
dXAoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVwR2VuZXJhdG9yKFZNKik7
CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBiYXNlbGluZUdldHRlclJldHVyblRodW5rR2VuZXJh
dG9yKFZNKiB2bSk7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYmFzZWxpbmVTZXR0ZXJSZXR1cm5U
aHVua0dlbmVyYXRvcihWTSogdm0pOwogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hhckNvZGVB
dFRodW5rR2VuZXJhdG9yKFZNKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hhckF0VGh1bmtH
ZW5lcmF0b3IoVk0qKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231671</attachid>
            <date>2014-05-18 18:57:47 -0700</date>
            <delta_ts>2014-05-18 19:23:19 -0700</delta_ts>
            <desc>more...</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>52656</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUyLDExICszNTIsNiBAQCB2b2lkIENvZGVCbG9j
azo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAgICAgb3V0LnByaW50Zigi
c2VsZiIpOwogICAgICAgICAgICAgICAgIGJhc2VTdHJ1Y3R1cmUgPSBzdHViSW5mby51LmdldEJ5
SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW46Ci0gICAgICAgICAgICAg
ICAgb3V0LnByaW50ZigiY2hhaW4iKTsKLSAgICAgICAgICAgICAgICBiYXNlU3RydWN0dXJlID0g
c3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKLSAgICAg
ICAgICAgICAgICBjaGFpbiA9IHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lk
X2xpc3Q6CiAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigibGlzdCIpOwogICAgICAgICAgICAg
ICAgIGxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7CkBAIC0yMzQ0LDYgKzIzMzks
MTUgQEAgU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6YWRkU3R1YkluZgogICAgIHJldHVy
biBtX3N0dWJJbmZvcy5hZGQoKTsKIH0KIAorU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6
ZmluZFN0dWJJbmZvKENvZGVPcmlnaW4gY29kZU9yaWdpbikKK3sKKyAgICBmb3IgKFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA6IG1fc3R1YkluZm9zKSB7CisgICAgICAgIGlmIChzdHViSW5m
by0+Y29kZU9yaWdpbiA9PSBjb2RlT3JpZ2luKQorICAgICAgICAgICAgcmV0dXJuIHN0dWJJbmZv
OworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogQ2FsbExpbmtJbmZvKiBDb2RlQmxv
Y2s6OmFkZENhbGxMaW5rSW5mbygpCiB7CiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
bV9sb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDYgKzIwMSwxMCBAQCBwdWJsaWM6CiAg
ICAgU3RydWN0dXJlU3R1YkluZm8qIGFkZFN0dWJJbmZvKCk7CiAgICAgQmFnPFN0cnVjdHVyZVN0
dWJJbmZvPjo6aXRlcmF0b3Igc3R1YkluZm9CZWdpbigpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmJl
Z2luKCk7IH0KICAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBzdHViSW5mb0Vu
ZCgpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmVuZCgpOyB9CisgICAgCisgICAgLy8gTyhuKSBvcGVy
YXRpb24uIFVzZSBnZXRTdHViSW5mb01hcCgpIHVubGVzcyB5b3UgcmVhbGx5IG9ubHkgaW50ZW5k
IHRvIGdldCBvbmUKKyAgICAvLyBzdHViIGluZm8uCisgICAgU3RydWN0dXJlU3R1YkluZm8qIGZp
bmRTdHViSW5mbyhDb2RlT3JpZ2luKTsKIAogICAgIHZvaWQgcmVzZXRTdHViKFN0cnVjdHVyZVN0
dWJJbmZvJik7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZU9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw2ICsyMDYs
MTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQwogICAgIGNhc2Ug
SlNDOjpJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKICAgICAgICAgb3V0LnByaW50KCJDb25z
dHJ1Y3QiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6
OkdldHRlckNhbGw6CisgICAgICAgIG91dC5wcmludCgiR2V0dGVyQ2FsbCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBKU0M6OklubGluZUNhbGxGcmFtZTo6U2V0dGVyQ2FsbDoKKyAgICAg
ICAgb3V0LnByaW50KCJTZXR0ZXJDYWxsIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAt
MTIxLDYgKzEyMSwxMSBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICBlbnVtIEtpbmQg
ewogICAgICAgICBDYWxsLAogICAgICAgICBDb25zdHJ1Y3QsCisgICAgICAgIAorICAgICAgICAv
LyBGb3IgdGhlc2UsIHRoZSBzdGFja09mZnNldCBpbmNvcnBvcmF0ZXMgdGhlIGFyZ3VtZW50IGNv
dW50IHBsdXMgdGhlIHRydWUgcmV0dXJuIFBDCisgICAgICAgIC8vIHNsb3QuCisgICAgICAgIEdl
dHRlckNhbGwsCisgICAgICAgIFNldHRlckNhbGwKICAgICB9OwogICAgIAogICAgIHN0YXRpYyBL
aW5kIGtpbmRGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQpAQCAtMTM5LDYgKzE0NCw4
IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5k
KSB7CiAgICAgICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgY2FzZSBHZXR0ZXJDYWxsOgorICAgICAg
ICBjYXNlIFNldHRlckNhbGw6CiAgICAgICAgICAgICByZXR1cm4gQ29kZUZvckNhbGw7CiAgICAg
ICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICAgICAgcmV0dXJuIENvZGVGb3JDb25zdHJ1Y3Q7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0
dXMuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHZXRCeUlkU3RhdHVzLmgiCiAKKyNpbmNsdWRl
ICJBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1Njb3BlLmgiCkBAIC04OSw1NyAr
OTAsNiBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAjZW5kaWYK
IH0KIAotYm9vbCBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yQ2hhaW4oQ29kZUJsb2NrKiBwcm9m
aWxlZEJsb2NrLCBTdHJpbmdJbXBsKiB1aWQsIFBhc3NSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbj4gcGFzc2VkQ2hhaW4pCi17Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBSZWZQdHI8SW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbj4gY2hhaW4gPSBwYXNzZWRDaGFpbjsKLSAgICAKLSAgICAvLyBWYWxp
ZGF0ZSB0aGUgY2hhaW4uIElmIHRoZSBjaGFpbiBpcyBpbnZhbGlkLCB0aGVuIGN1cnJlbnRseSB0
aGUgYmVzdCB0aGluZwotICAgIC8vIHdlIGNhbiBkbyBpcyB0byBhc3N1bWUgdGhhdCBUYWtlc1Ns
b3cgaXMgdHJ1ZS4gSW4gdGhlIGZ1dHVyZSwgaXQgbWlnaHQgYmUKLSAgICAvLyB3b3J0aCBleHBs
b3JpbmcgcmVpZnlpbmcgdGhlIHN0cnVjdHVyZSBjaGFpbiBmcm9tIHRoZSBzdHJ1Y3R1cmUgd2Un
dmUgZ290Ci0gICAgLy8gaW5zdGVhZCBvZiB1c2luZyB0aGUgb25lIGZyb20gdGhlIGNhY2hlLCBz
aW5jZSB0aGF0IHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5ncwotICAgIC8vIGlmIHRoZSBzdHJ1Y3R1
cmUgY2hhaW4gaGFzIGNoYW5nZWQuIEJ1dCB0aGF0IG1heSBiZSBoYXJkZXIsIGJlY2F1c2Ugd2Ug
bWF5Ci0gICAgLy8gdGhlbiBlbmQgdXAgaGF2aW5nIGEgZGlmZmVyZW50IHR5cGUgb2YgYWNjZXNz
IGFsdG9nZXRoZXIuIEFuZCBpdCBjdXJyZW50bHkKLSAgICAvLyBkb2VzIG5vdCBhcHBlYXIgdG8g
YmUgd29ydGggaXQgdG8gZG8gc28gLS0gZWZmZWN0aXZlbHksIHRoZSBoZXVyaXN0aWMgd2UKLSAg
ICAvLyBoYXZlIG5vdyBpcyB0aGF0IGlmIHRoZSBzdHJ1Y3R1cmUgY2hhaW4gaGFzIGNoYW5nZWQg
YmV0d2VlbiB3aGVuIGl0IHdhcwotICAgIC8vIGNhY2hlZCBvbiBpbiB0aGUgYmFzZWxpbmUgSklU
IGFuZCB3aGVuIHRoZSBERkcgdHJpZWQgdG8gaW5saW5lIHRoZSBhY2Nlc3MsCi0gICAgLy8gdGhl
biB3ZSBmYWxsIGJhY2sgb24gYSBwb2x5bW9ycGhpYyBhY2Nlc3MuCi0gICAgaWYgKCFjaGFpbi0+
aXNTdGlsbFZhbGlkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChjaGFpbi0+
aGVhZCgpLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgc2l6ZV90IGNoYWluU2l6ZSA9IGNoYWluLT5zaXplKCk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGFpblNpemU7IGkrKykgewotICAgICAgICBpZiAoY2hh
aW4tPmF0KGkpLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0
ID0gY2hhaW4tPnRlcm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgU3RydWN0dXJlKiBjdXJyZW50U3Ry
dWN0dXJlID0gY2hhaW4tPmxhc3QoKTsKLSAgICAKLSAgICBBU1NFUlRfVU5VU0VEKGN1cnJlbnRP
YmplY3QsIGN1cnJlbnRPYmplY3QpOwotICAgIAotICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25v
cmVkOwotICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAKLSAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBjdXJyZW50U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICpw
cm9maWxlZEJsb2NrLT52bSgpLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVl
KTsKLSAgICBpZiAoY3VycmVudFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgIHNw
ZWNpZmljVmFsdWUgPSAwOwotICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJuIGFwcGVuZFZhcmlhbnQoR2V0QnlJZFZh
cmlhbnQoU3RydWN0dXJlU2V0KGNoYWluLT5oZWFkKCkpLCBvZmZzZXQsIHNwZWNpZmljVmFsdWUs
IGNoYWluKSk7Ci0jZWxzZSAvLyBFTkFCTEUoSklUKQotICAgIFVOVVNFRF9QQVJBTShwcm9maWxl
ZEJsb2NrKTsKLSAgICBVTlVTRURfUEFSQU0odWlkKTsKLSAgICBVTlVTRURfUEFSQU0ocGFzc2Vk
Q2hhaW4pOwotICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwotICAgIHJldHVybiBmYWxz
ZTsKLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotfQotCiBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHViSW5mb01hcCYgbWFw
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKQEAgLTE0OCw3ICs5
OCw4IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKIAogI2lmIEVO
QUJMRShERkdfSklUKQogICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAg
bG9ja2VyLCBwcm9maWxlZEJsb2NrLCBtYXAuZ2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkp
LCB1aWQpOworICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIHByb2ZpbGVkQmxvY2ssIG1h
cC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSksIHVpZCwKKyAgICAgICAgQ2FsbExpbmtT
dGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEobG9ja2VyLCBwcm9maWxlZEJsb2NrLCBieXRlY29k
ZUluZGV4KSk7CiAgICAgCiAgICAgaWYgKCFyZXN1bHQudGFrZXNTbG93UGF0aCgpCiAgICAgICAg
ICYmIChoYXNFeGl0U2l0ZShsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpCkBA
IC0xNjYsMjIgKzExNywyMyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IoCiAKICNpZiBFTkFCTEUoSklUKQogR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yU3R1YkluZm8oCi0gICAgY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLAotICAgIFN0cmlu
Z0ltcGwqIHVpZCkKKyAgICBjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIENvZGVC
bG9jayogYmFzZWxpbmVQcm9maWxlZEJsb2NrLAorICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJpbmdJbXBsKiB1aWQsCisgICAgQ2Fs
bExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQogewogICAgIGlmICgh
c3R1YkluZm8gfHwgIXN0dWJJbmZvLT5zZWVuKQogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1
cyhOb0luZm9ybWF0aW9uKTsKICAgICAKICAgICBpZiAoc3R1YkluZm8tPnJlc2V0QnlHQykKICAg
ICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7Ci0KKyAgICAK
ICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gMDsKKyAgICBTdGF0ZSB0YWtlc1Ns
b3dQYXRoID0gVGFrZXNTbG93UGF0aDsKICAgICBpZiAoc3R1YkluZm8tPmFjY2Vzc1R5cGUgPT0g
YWNjZXNzX2dldF9ieV9pZF9saXN0KSB7CiAgICAgICAgIGxpc3QgPSBzdHViSW5mby0+dS5nZXRC
eUlkTGlzdC5saXN0OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChsaXN0LT5hdChpKS5kb2VzQ2FsbHMoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhNYWtlc0NhbGxzLCB0cnVlKTsKLSAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3Qt
PnNpemUoKTsgKytpKQorICAgICAgICAgICAgdGFrZXNTbG93UGF0aCA9IE1ha2VzQ2FsbHM7CiAg
ICAgfQogICAgIAogICAgIC8vIEZpbmFsbHkgZmlndXJlIG91dCBpZiB3ZSBjYW4gZGVyaXZlIGFu
IGFjY2VzcyBzdHJhdGVneS4KQEAgLTIxNSw4ICsxNjcsNiBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgIAogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9p
ZF9saXN0OiB7CiAgICAgICAgIGZvciAodW5zaWduZWQgbGlzdEluZGV4ID0gMDsgbGlzdEluZGV4
IDwgbGlzdC0+c2l6ZSgpOyArK2xpc3RJbmRleCkgewotICAgICAgICAgICAgQVNTRVJUKCFsaXN0
LT5hdChsaXN0SW5kZXgpLmRvZXNDYWxscygpKTsKLSAgICAgICAgICAgIAogICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBsaXN0LT5hdChsaXN0SW5kZXgpLnN0cnVjdHVyZSgpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFzc2VydCB0aGF0
IHdlIG5ldmVyIHNlZSBhIHN0cnVjdHVyZSB0aGF0CkBAIC0yMjYsNzAgKzE3NiwxMTAgQEAgR2V0
QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTgxMAogICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQ
cm9wZXJ0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRha2VzU2xv
d1BhdGgsIHRydWUpOworICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHRha2Vz
U2xvd1BhdGgsIHRydWUpOwogICAgICAgICAgICAgCisgICAgICAgICAgICB1bnNpZ25lZCBhdHRy
aWJ1dGVzSWdub3JlZDsKKyAgICAgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKKyAgICAg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG15T2Zmc2V0OworICAgICAgICAgICAgUmVmUHRyPEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWluOworCiAgICAgICAgICAgICBpZiAobGlzdC0+YXQobGlz
dEluZGV4KS5jaGFpbigpKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEludGVuZGVkU3RydWN0
dXJlQ2hhaW4+IGNoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oCisg
ICAgICAgICAgICAgICAgY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bigKICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgc3RydWN0dXJlLCBsaXN0LT5h
dChsaXN0SW5kZXgpLmNoYWluKCksCiAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmF0KGxpc3RJ
bmRleCkuY2hhaW5Db3VudCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuY29tcHV0
ZUZvckNoYWluKHByb2ZpbGVkQmxvY2ssIHVpZCwgY2hhaW4pKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCB0cnVlKTsKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWNo
YWluLT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRT
dGF0dXModGFrZXNTbG93UGF0aCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaWYgKGNoYWluLT5oZWFkKCktPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3Bl
cnR5KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHRha2VzU2xv
d1BhdGgsIHRydWUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNpemVfdCBj
aGFpblNpemUgPSBjaGFpbi0+c2l6ZSgpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY2hhaW5TaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoYWlu
LT5hdChpKS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHRha2VzU2xvd1BhdGgsIHRydWUp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBK
U09iamVjdCogY3VycmVudE9iamVjdCA9IGNoYWluLT50ZXJtaW5hbFByb3RvdHlwZSgpOworICAg
ICAgICAgICAgICAgIFN0cnVjdHVyZSogY3VycmVudFN0cnVjdHVyZSA9IGNoYWluLT5sYXN0KCk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjdXJyZW50
T2JqZWN0LCBjdXJyZW50T2JqZWN0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBvZmZzZXQgPSBjdXJyZW50U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCisgICAgICAgICAg
ICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBz
cGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudFN0cnVjdHVyZS0+aXNE
aWN0aW9uYXJ5KCkpCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBteU9mZnNldCA9IHN0cnVjdHVyZS0+
Z2V0Q29uY3VycmVudGx5KAorICAgICAgICAgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0o
KSwgdWlkLCBhdHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgICAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICAgICAgICAgIHNw
ZWNpZmljVmFsdWUgPSAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAg
ICB1bnNpZ25lZCBhdHRyaWJ1dGVzSWdub3JlZDsKLSAgICAgICAgICAgIEpTQ2VsbCogc3BlY2lm
aWNWYWx1ZTsKLSAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG15T2Zmc2V0ID0gc3RydWN0dXJl
LT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCks
IHVpZCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFsdWUpOwotICAgICAgICAgICAgaWYg
KHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICAgICAgc3BlY2lmaWNWYWx1
ZSA9IDA7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChteU9m
ZnNldCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXModGFrZXNTbG93
UGF0aCwgdHJ1ZSk7CiAKLSAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gMDsgdmFyaWFudEluZGV4IDwgcmVzdWx0
Lm1fdmFyaWFudHMuc2l6ZSgpOyArK3ZhcmlhbnRJbmRleCkgewotICAgICAgICAgICAgICAgIEdl
dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gcmVzdWx0Lm1fdmFyaWFudHNbdmFyaWFudEluZGV4XTsK
LSAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5tX2NoYWluKQotICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghY2hhaW4gJiYgIWxpc3QtPmF0KGxpc3RJbmRl
eCkuZG9lc0NhbGxzKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGb3Igbm9uLWNoYWluLCBub24t
Z2V0dGVyIGFjY2Vzc2VzLCB3ZSB0cnkgdG8gZG8gc29tZSBjb2FsZXNjaW5nLgorICAgICAgICAg
ICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IHZhcmlhbnRJbmRleCA9IDA7IHZhcmlhbnRJbmRleCA8IHJlc3VsdC5tX3ZhcmlhbnRzLnNpemUo
KTsgKyt2YXJpYW50SW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQm
IHZhcmlhbnQgPSByZXN1bHQubV92YXJpYW50c1t2YXJpYW50SW5kZXhdOworICAgICAgICAgICAg
ICAgICAgICBpZiAodmFyaWFudC5tX2NoYWluKQorICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQubV9v
ZmZzZXQgIT0gbXlPZmZzZXQpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lm1f
c3RydWN0dXJlU2V0LmNvbnRhaW5zKHN0cnVjdHVyZSkpCi0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5tX29mZnNldCAhPSBteU9mZnNl
dCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lm1fc3BlY2lmaWNWYWx1ZSAhPSBKU1ZhbHVlKHNw
ZWNpZmljVmFsdWUpKQotICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm1fc3BlY2lmaWNWYWx1
ZSA9IEpTVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuY2FsbExpbmtT
dGF0dXMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIHZhcmlhbnQubV9zdHJ1Y3R1cmVTZXQuYWRkKHN0cnVjdHVy
ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQubV9zdHJ1Y3R1cmVTZXQuY29u
dGFpbnMoc3RydWN0dXJlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5tX3NwZWNpZmljVmFs
dWUgIT0gSlNWYWx1ZShzcGVjaWZpY1ZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
cmlhbnQubV9zcGVjaWZpY1ZhbHVlID0gSlNWYWx1ZSgpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICB2YXJpYW50Lm1fc3RydWN0dXJlU2V0LmFkZChzdHJ1Y3R1cmUpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBpZiAoZm91bmQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZm91bmQp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzOworICAgICAgICAgICAgc3dpdGNoIChsaXN0
LT5hdChsaXN0SW5kZXgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRCeUlkQWNjZXNz
OjpTaW1wbGVJbmxpbmU6CisgICAgICAgICAgICBjYXNlIEdldEJ5SWRBY2Nlc3M6OlNpbXBsZVN0
dWI6IHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGNhc2UgR2V0QnlJZEFjY2Vzczo6R2V0dGVyOiB7CisgICAgICAgICAgICAgICAgQWNjZXNzb3JD
YWxsSklUU3R1YlJvdXRpbmUqIHN0dWIgPSBzdGF0aWNfY2FzdDxBY2Nlc3NvckNhbGxKSVRTdHVi
Um91dGluZSo+KAorICAgICAgICAgICAgICAgICAgICBsaXN0LT5hdChsaXN0SW5kZXgpLnN0dWJS
b3V0aW5lKCkpOworICAgICAgICAgICAgICAgIGNhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3Vu
aXF1ZTxDYWxsTGlua1N0YXR1cz4oCisgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rU3RhdHVz
Ojpjb21wdXRlRm9yKGxvY2tlciwgc3R1Yi0+bV9jYWxsTGlua0luZm8pKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vz
czo6Q3VzdG9tR2V0dGVyOiB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJl
IHRvdGFsbHkgc3dlZXQgdG8gc3VwcG9ydCB0aGlzIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVy
ZS4KKyAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTMzMDUyCisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXModGFrZXNT
bG93UGF0aCwgdHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQoR2V0
QnlJZFZhcmlhbnQoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIG15T2Zmc2V0LCBzcGVjaWZpY1Zh
bHVlKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCwgdHJ1ZSk7CisgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCB2YXJpYW50KAorICAgICAgICAg
ICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBteU9mZnNldCwgc3BlY2lmaWNWYWx1ZSwg
Y2hhaW4sCisgICAgICAgICAgICAgICAgc3RkOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CisgICAg
ICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHRha2VzU2xvd1BhdGgsIHRydWUpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAgICAgCi0gICAg
Y2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluOiB7Ci0gICAgICAgIGlmICghc3R1YkluZm8tPnUu
Z2V0QnlJZENoYWluLmlzRGlyZWN0KQotICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMo
TWFrZXNDYWxscywgdHJ1ZSk7Ci0gICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
PiBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAotICAgICAgICAg
ICAgcHJvZmlsZWRCbG9jaywKLSAgICAgICAgICAgIHN0dWJJbmZvLT51LmdldEJ5SWRDaGFpbi5i
YXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLAotICAgICAgICAgICAgc3R1YkluZm8tPnUuZ2V0QnlJ
ZENoYWluLmNoYWluLmdldCgpLAotICAgICAgICAgICAgc3R1YkluZm8tPnUuZ2V0QnlJZENoYWlu
LmNvdW50KSk7Ci0gICAgICAgIGlmIChyZXN1bHQuY29tcHV0ZUZvckNoYWluKHByb2ZpbGVkQmxv
Y2ssIHVpZCwgY2hhaW4pKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgcmV0
dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7Ci0gICAgfQotICAgICAgICAK
ICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRo
LCB0cnVlKTsKICAgICB9CkBAIC0zMDUsMTAgKzI5NSwxNyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgaWYgKGRm
Z0Jsb2NrKSB7CisgICAgICAgIEV4aXRTaXRlRGF0YSBleGl0U2l0ZURhdGE7CisgICAgICAgIHsK
KyAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1f
YmxvY2spOworICAgICAgICAgICAgZXhpdFNpdGVEYXRhID0gY29tcHV0ZUV4aXRTaXRlRGF0YShs
b2NrZXIsIHByb2ZpbGVkQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgRXhpdEZyb21G
VEwpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBHZXRCeUlkU3RhdHVzIHJlc3VsdDsK
ICAgICAgICAgewogICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoZGZnQmxv
Y2stPm1fbG9jayk7Ci0gICAgICAgICAgICByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8obG9j
a2VyLCBkZmdCbG9jaywgZGZnTWFwLmdldChjb2RlT3JpZ2luKSwgdWlkKTsKKyAgICAgICAgICAg
IHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAgICAgICAgICBsb2NrZXIsIHBy
b2ZpbGVkQmxvY2ssIGRmZ0Jsb2NrLCBkZmdNYXAuZ2V0KGNvZGVPcmlnaW4pLCB1aWQsIGV4aXRT
aXRlRGF0YSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChyZXN1bHQudGFrZXNT
bG93UGF0aCgpKQpAQCAtMzI4LDcgKzMyNSw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvcigKICAgICBVTlVTRURfUEFSQU0oZGZnTWFwKTsKICNlbmRpZgogCi0gICAg
cmV0dXJuIGNvbXB1dGVGb3IocHJvZmlsZWRCbG9jaywgYmFzZWxpbmVNYXAsIGNvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCwgdWlkKTsKKyAgICByZXR1cm4gY29tcHV0ZUZvcihwcm9maWxlZEJsb2Nr
LCBiYXNlbGluZU1hcCwgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCB1aWQsIGV4aXRTaXRlRGF0
YSk7CiB9CiAKIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJpbmdJbXBsKiB1aWQpCkBAIC0zNjEsNiArMzU4LDI0
IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgU2lt
cGxlLCBmYWxzZSwgR2V0QnlJZFZhcmlhbnQoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIG9mZnNl
dCwgc3BlY2lmaWNWYWx1ZSkpOwogfQogCitib29sIEdldEJ5SWRTdGF0dXM6Om1ha2VzQ2FsbHMo
KSBjb25zdAoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgTm9JbmZvcm1hdGlv
bjoKKyAgICBjYXNlIFRha2VzU2xvd1BhdGg6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBj
YXNlIFNpbXBsZToKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV92YXJpYW50cy5zaXplKCk7
IGktLTspIHsKKyAgICAgICAgICAgIGlmIChtX3ZhcmlhbnRzW2ldLmNhbGxMaW5rU3RhdHVzKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGNhc2UgTWFrZXNDYWxsczoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIHZvaWQgR2V0QnlJZFN0
YXR1czo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmludCgiKCIp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1
cy5oCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVm
IEdldEJ5SWRTdGF0dXNfaAogI2RlZmluZSBHZXRCeUlkU3RhdHVzX2gKIAorI2luY2x1ZGUgIkNh
bGxMaW5rU3RhdHVzLmgiCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkNvbmN1
cnJlbnRKSVRMb2NrLmgiCiAjaW5jbHVkZSAiRXhpdGluZ0pJVFR5cGUuaCIKQEAgLTgzLDcgKzg0
LDcgQEAgcHVibGljOgogICAgIGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvcGVyYXRvcltdKHNpemVf
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CiAKICAgICBib29sIHRha2VzU2xv
d1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFRha2VzU2xvd1BhdGggfHwgbV9zdGF0
ZSA9PSBNYWtlc0NhbGxzOyB9Ci0gICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZSA9PSBNYWtlc0NhbGxzOyB9CisgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7CiAg
ICAgCiAgICAgYm9vbCB3YXNTZWVuSW5KSVQoKSBjb25zdCB7IHJldHVybiBtX3dhc1NlZW5JbkpJ
VDsgfQogICAgIApAQCAtOTQsOSArOTUsMTEgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBo
YXNFeGl0U2l0ZShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ29kZUJsb2NrKiwgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCwgRXhpdGluZ0pJVFR5cGUgPSBFeGl0RnJvbUFueXRoaW5nKTsKICNl
bmRpZgogI2lmIEVOQUJMRShKSVQpCi0gICAgc3RhdGljIEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZv
clN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmVTdHViSW5mbyosIFN0cmluZ0ltcGwqIHVpZCk7CisgICAgc3RhdGljIEdldEJ5SWRTdGF0dXMg
Y29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAgICBjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwg
Q29kZUJsb2NrKiBiYXNlbGluZVByb2ZpbGVkQmxvY2ssCisgICAgICAgIENvZGVCbG9jayogcHJv
ZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBTdHJpbmdJbXBsKiB1aWQsCisgICAgICAg
IENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOwogI2VuZGlmCi0gICAgYm9vbCBjb21wdXRl
Rm9yQ2hhaW4oQ29kZUJsb2NrKiwgU3RyaW5nSW1wbCogdWlkLCBQYXNzUmVmUHRyPEludGVuZGVk
U3RydWN0dXJlQ2hhaW4+KTsKICAgICBzdGF0aWMgR2V0QnlJZFN0YXR1cyBjb21wdXRlRnJvbUxM
SW50KENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFN0cmluZ0ltcGwqIHVpZCk7
CiAgICAgCiAgICAgYm9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IEdldEJ5SWRWYXJpYW50Jik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFu
dC5jcHAJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiwzMCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdldEJ5SWRWYXJpYW50LmgiCiAKKyNpbmNs
dWRlICJDYWxsTGlua1N0YXR1cy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CiAKK0dldEJ5SWRWYXJpYW50Ojp+R2V0QnlJZFZhcmlhbnQoKSB7IH0KKworR2V0
QnlJZFZhcmlhbnQ6OkdldEJ5SWRWYXJpYW50KGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcikK
K3sKKyAgICAqdGhpcyA9IG90aGVyOworfQorCitHZXRCeUlkVmFyaWFudCYgR2V0QnlJZFZhcmlh
bnQ6Om9wZXJhdG9yPShjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCit7CisgICAgbV9zdHJ1
Y3R1cmVTZXQgPSBvdGhlci5tX3N0cnVjdHVyZVNldDsKKyAgICBtX2NoYWluID0gb3RoZXIubV9j
aGFpbjsKKyAgICBtX3NwZWNpZmljVmFsdWUgPSBvdGhlci5tX3NwZWNpZmljVmFsdWU7CisgICAg
bV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKKyAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1
cykKKyAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtT
dGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKKyAgICBlbHNlCisgICAgICAgIG1fY2Fs
bExpbmtTdGF0dXMgPSBudWxscHRyOworfQorCiB2b2lkIEdldEJ5SWRWYXJpYW50OjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgZHVtcEluQ29udGV4dChvdXQsIDApOwpAQCAt
NDUsNyArNjUsMTAgQEAgdm9pZCBHZXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludAog
ICAgIG91dC5wcmludCgKICAgICAgICAgIjwiLCBpbkNvbnRleHQoc3RydWN0dXJlU2V0KCksIGNv
bnRleHQpLCAiLCAiLAogICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChjaGFpbigpLCBjb250
ZXh0KSwgIiwgIiwKLSAgICAgICAgaW5Db250ZXh0KHNwZWNpZmljVmFsdWUoKSwgY29udGV4dCks
ICIsICIsIG9mZnNldCgpLCAiPiIpOworICAgICAgICBpbkNvbnRleHQoc3BlY2lmaWNWYWx1ZSgp
LCBjb250ZXh0KSwgIiwgIiwgb2Zmc2V0KCkpOworICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzKQor
ICAgICAgICBvdXQucHJpbnQoImNhbGw6ICIsICptX2NhbGxMaW5rU3RhdHVzKTsKKyAgICBvdXQu
cHJpbnQoIj4iKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTY5MDE0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgR2V0QnlJZFZhcmlhbnRfaAog
I2RlZmluZSBHZXRCeUlkVmFyaWFudF9oCiAKKyNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgog
I2luY2x1ZGUgIkludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVl
LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKQEAgLTMzLDYgKzM0LDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK2NsYXNzIENhbGxMaW5rU3RhdHVzOwogY2xhc3MgR2V0QnlJZFN0YXR1
czsKIHN0cnVjdCBEdW1wQ29udGV4dDsKIApAQCAtNDEsMTEgKzQzLDEzIEBAIHB1YmxpYzoKICAg
ICBHZXRCeUlkVmFyaWFudCgKICAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVT
ZXQgPSBTdHJ1Y3R1cmVTZXQoKSwKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gaW52
YWxpZE9mZnNldCwgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlID0gSlNWYWx1ZSgpLAotICAgICAgICBQ
YXNzUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWluID0gbnVsbHB0cikKKyAgICAg
ICAgUGFzc1JlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbiA9IG51bGxwdHIsCisg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPSBu
dWxscHRyKQogICAgICAgICA6IG1fc3RydWN0dXJlU2V0KHN0cnVjdHVyZVNldCkKICAgICAgICAg
LCBtX2NoYWluKGNoYWluKQogICAgICAgICAsIG1fc3BlY2lmaWNWYWx1ZShzcGVjaWZpY1ZhbHVl
KQogICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgLCBtX2NhbGxMaW5rU3RhdHVz
KHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1cykpCiAgICAgewogICAgICAgICBpZiAoIXN0cnVjdHVy
ZVNldC5zaXplKCkpIHsKICAgICAgICAgICAgIEFTU0VSVChvZmZzZXQgPT0gaW52YWxpZE9mZnNl
dCk7CkBAIC01NCwxMiArNTgsMTggQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAor
ICAgIH5HZXRCeUlkVmFyaWFudCgpOworICAgIAorICAgIEdldEJ5SWRWYXJpYW50KGNvbnN0IEdl
dEJ5SWRWYXJpYW50Jik7CisgICAgR2V0QnlJZFZhcmlhbnQmIG9wZXJhdG9yPShjb25zdCBHZXRC
eUlkVmFyaWFudCYpOworICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAhIW1f
c3RydWN0dXJlU2V0LnNpemUoKTsgfQogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1
cm4gIWlzU2V0KCk7IH0KICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9CiAgICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
biogY2hhaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEludGVuZGVkU3RydWN0dXJlQ2hh
aW4qPihtX2NoYWluLmdldCgpKTsgfQogICAgIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3BlY2lmaWNWYWx1ZTsgfQogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgp
IGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5r
U3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5nZXQoKTsgfQogICAgIAog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcEluQ29udGV4
dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CkBAIC03MSw2ICs4MSw3IEBAIHBy
aXZhdGU6CiAgICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IG1fY2hhaW47CiAgICAg
SlNWYWx1ZSBtX3NwZWNpZmljVmFsdWU7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDE2OTAxNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDYgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVy
ZWYoKQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9z
ZWxmOgotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKICAgICBjYXNlIGFjY2Vzc19w
dXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3Ry
YW5zaXRpb25fZGlyZWN0OgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgpAQCAt
NjgsMTEgKzY3LDYgQEAgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgog
ICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKLSAgICAgICAgaWYgKCFIZWFwOjppc01h
cmtlZCh1LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKQotICAgICAgICAg
ICAgfHwgIUhlYXA6OmlzTWFya2VkKHUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfZ2V0
X2J5X2lkX2xpc3Q6IHsKICAgICAgICAgaWYgKCF1LmdldEJ5SWRMaXN0Lmxpc3QtPnZpc2l0V2Vh
ayhyZXBhdGNoQnVmZmVyKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShy
ZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNiBAQCBjbGFzcyBQb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0OwogCiBlbnVtIEFjY2Vzc1R5cGUgewogICAgIGFjY2Vzc19nZXRf
YnlfaWRfc2VsZiwKLSAgICBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluLAogICAgIGFjY2Vzc19nZXRf
YnlfaWRfbGlzdCwKICAgICBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsLAogICAg
IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3QsCkBAIC02MSw3ICs2MCw2IEBAIGlu
bGluZSBib29sIGlzR2V0QnlJZEFjY2VzcyhBY2Nlc3NUeXBlIGEKIHsKICAgICBzd2l0Y2ggKGFj
Y2Vzc1R5cGUpIHsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKLSAgICBjYXNlIGFj
Y2Vzc19nZXRfYnlfaWRfY2hhaW46CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CkBAIC0xMDcsMTYgKzEwNSw2IEBAIHN0
cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgIHUuZ2V0QnlJZFNlbGYuYmFzZU9iamVj
dFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBiYXNlT2JqZWN0U3RydWN0dXJlKTsKICAgICB9CiAK
LSAgICB2b2lkIGluaXRHZXRCeUlkQ2hhaW4oVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1
cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgdW5zaWduZWQg
Y291bnQsIGJvb2wgaXNEaXJlY3QpCi0gICAgewotICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNz
X2dldF9ieV9pZF9jaGFpbjsKLQotICAgICAgICB1LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3Ry
dWN0dXJlLnNldCh2bSwgb3duZXIsIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOwotICAgICAgICB1Lmdl
dEJ5SWRDaGFpbi5jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7Ci0gICAgICAgIHUuZ2V0QnlJ
ZENoYWluLmNvdW50ID0gY291bnQ7Ci0gICAgICAgIHUuZ2V0QnlJZENoYWluLmlzRGlyZWN0ID0g
aXNEaXJlY3Q7Ci0gICAgfQotCiAgICAgdm9pZCBpbml0R2V0QnlJZExpc3QoUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdCogbGlzdCkKICAgICB7CiAgICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0
X2J5X2lkX2xpc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MSwyMSAr
MTcxLDIxIEBAIHByaXZhdGU6CiAgICAgYm9vbCBoYW5kbGVNaW5NYXgoaW50IHJlc3VsdE9wZXJh
bmQsIE5vZGVUeXBlIG9wLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyk7CiAgICAgCiAgICAgLy8gSGFuZGxlIGNhbGxzLiBUaGlzIHJlc29sdmVzIGlz
c3VlcyBzdXJyb3VuZGluZyBpbmxpbmluZyBhbmQgaW50cmluc2ljcy4KKyAgICB2b2lkIGhhbmRs
ZUNhbGwoCisgICAgICAgIGludCByZXN1bHQsIE5vZGVUeXBlIG9wLCBJbmxpbmVDYWxsRnJhbWU6
OktpbmQsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6ZSwKKyAgICAgICAgTm9kZSogY2FsbFRhcmdl
dCwgaW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENhbGxMaW5rU3RhdHVzKTsKICAg
ICB2b2lkIGhhbmRsZUNhbGwoaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6ZSwgaW50IGNhbGxlZSwgaW50IGFyZ0Nv
dW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQpOwogICAgIHZvaWQgaGFuZGxlQ2FsbChJbnN0cnVjdGlv
biogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICB2b2lkIGVt
aXRGdW5jdGlvbkNoZWNrcyhjb25zdCBDYWxsTGlua1N0YXR1cyYsIE5vZGUqIGNhbGxUYXJnZXQs
IGludCByZWdpc3Rlck9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgdm9pZCBl
bWl0QXJndW1lbnRQaGFudG9tcyhpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgLy8gSGFuZGxlIGlu
bGluaW5nLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8g
cGxhbnQgYSBjYWxsLgotICAgIGJvb2wgaGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5v
ZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYsIGludCByZWdpc3Rl
ck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zm
c2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICBib29sIGhhbmRsZUlubGluaW5nKE5v
ZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0
dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywg
dW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kKTsKICAgICAvLyBIYW5k
bGUgaW50cmluc2ljIGZ1bmN0aW9ucy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxz
ZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEgY2FsbC4KICAgICBib29sIGhhbmRsZUludHJpbnNpYyhp
bnQgcmVzdWx0T3BlcmFuZCwgSW50cmluc2ljLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbik7CiAgICAg
Ym9vbCBoYW5kbGVUeXBlZEFycmF5Q29uc3RydWN0b3IoaW50IHJlc3VsdE9wZXJhbmQsIEludGVy
bmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgVHlwZWRBcnJheVR5cGUpOwogICAgIGJvb2wgaGFuZGxlQ29uc3RhbnRJbnRlcm5h
bEZ1bmN0aW9uKGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lz
dGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24sIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIE5vZGUqIGhhbmRsZVB1
dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0
LCBOb2RlKiB2YWx1ZSk7CiAgICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5
cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0
KTsKLSAgICB2b2lkIGhhbmRsZUdldEJ5T2Zmc2V0KAotICAgICAgICBpbnQgZGVzdGluYXRpb25P
cGVyYW5kLCBTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciwKLSAgICAgICAgUHJvcGVydHlPZmZzZXQpOwogICAgIHZvaWQgaGFuZGxlR2V0QnlJZCgK
ICAgICAgICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJh
c2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAgICAgIGNvbnN0IEdldEJ5SWRTdGF0
dXMmKTsKQEAgLTgxMSwxMSArODExLDExIEBAIHByaXZhdGU6CiAgICAgICAgIG1fbnVtUGFzc2Vk
VmFyQXJncysrOwogICAgIH0KICAgICAKLSAgICBOb2RlKiBhZGRDYWxsKGludCByZXN1bHQsIE5v
ZGVUeXBlIG9wLCBpbnQgY2FsbGVlLCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCkK
KyAgICBOb2RlKiBhZGRDYWxsKGludCByZXN1bHQsIE5vZGVUeXBlIG9wLCBOb2RlKiBjYWxsZWUs
IGludCBhcmdDb3VudCwgaW50IHJlZ2lzdGVyT2Zmc2V0KQogICAgIHsKICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKICAgICAgICAgCi0gICAgICAg
IGFkZFZhckFyZ0NoaWxkKGdldChWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlKSkpOworICAgICAgICBh
ZGRWYXJBcmdDaGlsZChjYWxsZWUpOwogICAgICAgICBzaXplX3QgcGFyYW1ldGVyU2xvdHMgPSBK
U1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1Np
emUgKyBhcmdDb3VudDsKICAgICAgICAgaWYgKHBhcmFtZXRlclNsb3RzID4gbV9wYXJhbWV0ZXJT
bG90cykKICAgICAgICAgICAgIG1fcGFyYW1ldGVyU2xvdHMgPSBwYXJhbWV0ZXJTbG90czsKQEAg
LTExMjAsNyArMTEyMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmV0dXJuVmFsdWVWUiwKICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBpbmxpbmVDYWxsRnJh
bWVTdGFydCwKICAgICAgICAgICAgIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywKLSAg
ICAgICAgICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgICAgICAgICAgSW5saW5lQ2Fs
bEZyYW1lOjpLaW5kKTsKICAgICAgICAgCiAgICAgICAgIH5JbmxpbmVTdGFja0VudHJ5KCkKICAg
ICAgICAgewpAQCAtMTIwMywyNiArMTIwMywzNSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVDYWxsKAogICAgIGludCByZXN1bHQsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6ZSwKICAgICBpbnQgY2FsbGVlLCBpbnQg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGludCByZWdpc3Rlck9mZnNldCkKIHsKLSAgICBB
U1NFUlQocmVnaXN0ZXJPZmZzZXQgPD0gMCk7Ci0gICAgCiAgICAgTm9kZSogY2FsbFRhcmdldCA9
IGdldChWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlKSk7CiAgICAgCi0gICAgQ2FsbExpbmtTdGF0dXMg
Y2FsbExpbmtTdGF0dXM7Ci0KKyAgICBDYWxsTGlua1N0YXR1cyBjYWxsTGlua1N0YXR1cyA9IENh
bGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3By
b2ZpbGVkQmxvY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCksCisgICAgICAgIG1faW5saW5lU3RhY2tU
b3AtPm1fY2FsbExpbmtJbmZvcywgbV9jYWxsQ29udGV4dE1hcCk7CisgICAgCisgICAgaGFuZGxl
Q2FsbCgKKyAgICAgICAgcmVzdWx0LCBvcCwgSW5saW5lQ2FsbEZyYW1lOjpraW5kRm9yKGtpbmQp
LCBpbnN0cnVjdGlvblNpemUsIGNhbGxUYXJnZXQsCisgICAgICAgIGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzLCByZWdpc3Rlck9mZnNldCwgY2FsbExpbmtTdGF0dXMpOworfQorICAgIAordm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKKyAgICBpbnQgcmVzdWx0LCBOb2RlVHlwZSBv
cCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6ZSwK
KyAgICBOb2RlKiBjYWxsVGFyZ2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGlu
dCByZWdpc3Rlck9mZnNldCwKKyAgICBDYWxsTGlua1N0YXR1cyBjYWxsTGlua1N0YXR1cykKK3sK
KyAgICBBU1NFUlQocmVnaXN0ZXJPZmZzZXQgPD0gMCk7CisgICAgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCBzcGVjaWFsaXphdGlvbktpbmQgPSBJbmxpbmVDYWxsRnJhbWU6OnNwZWNpYWxpemF0aW9u
S2luZEZvcihraW5kKTsKKyAgICAKICAgICBpZiAobV9ncmFwaC5pc0NvbnN0YW50KGNhbGxUYXJn
ZXQpKSB7CiAgICAgICAgIGNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXMoCiAgICAgICAg
ICAgICBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KGNhbGxUYXJnZXQpKS5zZXRJc1Byb3ZlZCh0
cnVlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3Rh
dHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxl
ZEJsb2NrLCBjdXJyZW50Q29kZU9yaWdpbigpLAotICAgICAgICAgICAgbV9pbmxpbmVTdGFja1Rv
cC0+bV9jYWxsTGlua0luZm9zLCBtX2NhbGxDb250ZXh0TWFwKTsKICAgICB9CiAgICAgCiAgICAg
aWYgKCFjYWxsTGlua1N0YXR1cy5jYW5PcHRpbWl6ZSgpKSB7CiAgICAgICAgIC8vIE9kZGx5LCB0
aGlzIGNvbmZsYXRlcyBjYWxscyB0aGF0IGhhdmVuJ3QgZXhlY3V0ZWQgd2l0aCBjYWxscyB0aGF0
IGJlaGF2ZWQgc3VmZmljaWVudGx5IHBvbHltb3JwaGljYWxseQogICAgICAgICAvLyB0aGF0IHdl
IGNhbm5vdCBvcHRpbWl6ZSB0aGVtLgogICAgICAgICAKLSAgICAgICAgYWRkQ2FsbChyZXN1bHQs
IG9wLCBjYWxsZWUsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCByZWdpc3Rlck9mZnNldCk7
CisgICAgICAgIGFkZENhbGwocmVzdWx0LCBvcCwgY2FsbFRhcmdldCwgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKQEAgLTEyMzAsMjggKzEyMzksMjggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2Fs
bCgKICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOwogCiAg
ICAgaWYgKEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gY2FsbExpbmtTdGF0dXMuaW50ZXJu
YWxGdW5jdGlvbigpKSB7Ci0gICAgICAgIGlmIChoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rp
b24ocmVzdWx0LCBmdW5jdGlvbiwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCBwcmVkaWN0aW9uLCBraW5kKSkgeworICAgICAgICBpZiAoaGFuZGxlQ29uc3RhbnRJ
bnRlcm5hbEZ1bmN0aW9uKHJlc3VsdCwgZnVuY3Rpb24sIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgcHJlZGljdGlvbiwgc3BlY2lhbGl6YXRpb25LaW5kKSkgewog
ICAgICAgICAgICAgLy8gVGhpcyBwaGFudG9taW5nIGhhcyB0byBiZSAqYWZ0ZXIqIHRoZSBjb2Rl
IGZvciB0aGUgaW50cmluc2ljLCB0byBzaWduaWZ5IHRoYXQKICAgICAgICAgICAgIC8vIHRoZSBp
bnB1dHMgbXVzdCBiZSBrZXB0IGFsaXZlIHdoYXRldmVyIGV4aXRzIHRoZSBpbnRyaW5zaWMgbWF5
IGRvLgogICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBjYWxsVGFyZ2V0KTsKLSAgICAg
ICAgICAgIGVtaXRBcmd1bWVudFBoYW50b21zKHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywga2luZCk7CisgICAgICAgICAgICBlbWl0QXJndW1lbnRQaGFudG9tcyhy
ZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHNwZWNpYWxpemF0aW9u
S2luZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IC8vIENhbiBvbmx5IGhhbmRsZSB0aGlzIHVzaW5nIHRoZSBnZW5lcmljIGNhbGwgaGFuZGxlci4K
LSAgICAgICAgYWRkQ2FsbChyZXN1bHQsIG9wLCBjYWxsZWUsIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCByZWdpc3Rlck9mZnNldCk7CisgICAgICAgIGFkZENhbGwocmVzdWx0LCBvcCwgY2Fs
bFRhcmdldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHJlZ2lzdGVyT2Zmc2V0KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCi0gICAgSW50cmluc2ljIGludHJpbnNpYyA9
IGNhbGxMaW5rU3RhdHVzLmludHJpbnNpY0ZvcihraW5kKTsKKyAgICBJbnRyaW5zaWMgaW50cmlu
c2ljID0gY2FsbExpbmtTdGF0dXMuaW50cmluc2ljRm9yKHNwZWNpYWxpemF0aW9uS2luZCk7CiAg
ICAgaWYgKGludHJpbnNpYyAhPSBOb0ludHJpbnNpYykgewotICAgICAgICBlbWl0RnVuY3Rpb25D
aGVja3MoY2FsbExpbmtTdGF0dXMsIGNhbGxUYXJnZXQsIHJlZ2lzdGVyT2Zmc2V0LCBraW5kKTsK
KyAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzLCBjYWxsVGFyZ2V0LCBy
ZWdpc3Rlck9mZnNldCwgc3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICAgICAgICAgIAogICAgICAg
ICBpZiAoaGFuZGxlSW50cmluc2ljKHJlc3VsdCwgaW50cmluc2ljLCByZWdpc3Rlck9mZnNldCwg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHByZWRpY3Rpb24pKSB7CiAgICAgICAgICAgICAv
LyBUaGlzIHBoYW50b21pbmcgaGFzIHRvIGJlICphZnRlciogdGhlIGNvZGUgZm9yIHRoZSBpbnRy
aW5zaWMsIHRvIHNpZ25pZnkgdGhhdAogICAgICAgICAgICAgLy8gdGhlIGlucHV0cyBtdXN0IGJl
IGtlcHQgYWxpdmUgd2hhdGV2ZXIgZXhpdHMgdGhlIGludHJpbnNpYyBtYXkgZG8uCiAgICAgICAg
ICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGNhbGxUYXJnZXQpOwotICAgICAgICAgICAgZW1pdEFy
Z3VtZW50UGhhbnRvbXMocmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBraW5kKTsKKyAgICAgICAgICAgIGVtaXRBcmd1bWVudFBoYW50b21zKHJlZ2lzdGVyT2Zmc2V0
LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgc3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCiAgICAgICAgICAgICAgICAgbV9ncmFw
aC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkQ2FsbCgpOwogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMTI2Miw3ICsxMjcxLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBhZGRDYWxsKHJlc3VsdCwgb3AsIGNh
bGxlZSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICBh
ZGRDYWxsKHJlc3VsdCwgb3AsIGNhbGxUYXJnZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCByZWdpc3Rlck9mZnNldCk7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlv
bkNoZWNrcyhjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsIE5vZGUqIGNhbGxU
YXJnZXQsIGludCByZWdpc3Rlck9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQpA
QCAtMTI5NywxMCArMTMwNiwxMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0QXJndW1lbnRQ
aGFudG9tCiAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGksIHJlZ2lzdGVyT2Zmc2V0KSkpOwogfQogCi1ib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQs
IGNvbnN0IENhbGxMaW5rU3RhdHVzJiBjYWxsTGlua1N0YXR1cywgaW50IHJlZ2lzdGVyT2Zmc2V0
LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlu
bGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2Fs
bExpbmtTdGF0dXMmIGNhbGxMaW5rU3RhdHVzLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZy
YW1lOjpLaW5kIGtpbmQpCiB7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNl
OwogICAgIAorICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kID0g
SW5saW5lQ2FsbEZyYW1lOjpzcGVjaWFsaXphdGlvbktpbmRGb3Ioa2luZCk7CisgICAgCiAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIGlubGluaW5nICIsIGNh
bGxMaW5rU3RhdHVzLCAiIGludG8gIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxuIik7CiAgICAg
CkBAIC0xMzMzLDE0ICsxMzQ0LDE0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGlu
aW5nKE5vZGUKICAgICAvLyBpZiB3ZSBoYWQgYSBzdGF0aWMgcHJvb2Ygb2Ygd2hhdCB3YXMgYmVp
bmcgY2FsbGVkOyB0aGlzIG1pZ2h0IGhhcHBlbiBmb3IgZXhhbXBsZSBpZiB5b3UgY2FsbCBhCiAg
ICAgLy8gZ2xvYmFsIGZ1bmN0aW9uLCB3aGVyZSB3YXRjaHBvaW50aW5nIGdpdmVzIHVzIHN0YXRp
YyBpbmZvcm1hdGlvbi4gT3ZlcmFsbCwgaXQncyBhIHJhcmUgY2FzZQogICAgIC8vIGJlY2F1c2Ug
d2UgZXhwZWN0IHRoYXQgYW55IGhvdCBjYWxsZWVzIHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGNv
bXBpbGVkLgotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlY3V0YWJsZS0+YmFzZWxpbmVD
b2RlQmxvY2tGb3Ioa2luZCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjdXRhYmxl
LT5iYXNlbGluZUNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQpOwogICAgIGlmICghY29k
ZUJsb2NrKSB7CiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygiICAg
IEZhaWxpbmcgYmVjYXVzZSBubyBjb2RlIGJsb2NrIGF2YWlsYWJsZS5cbiIpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwg
PSBpbmxpbmVGdW5jdGlvbkZvckNhcGFiaWxpdHlMZXZlbCgKLSAgICAgICAgY29kZUJsb2NrLCBr
aW5kLCBjYWxsTGlua1N0YXR1cy5pc0Nsb3N1cmVDYWxsKCkpOworICAgICAgICBjb2RlQmxvY2ss
IHNwZWNpYWxpemF0aW9uS2luZCwgY2FsbExpbmtTdGF0dXMuaXNDbG9zdXJlQ2FsbCgpKTsKICAg
ICBpZiAoIWNhbklubGluZShjYXBhYmlsaXR5TGV2ZWwpKSB7CiAgICAgICAgIGlmICh2ZXJib3Nl
KQogICAgICAgICAgICAgZGF0YUxvZygiICAgIEZhaWxpbmcgYmVjYXVzZSB0aGUgZnVuY3Rpb24g
aXMgbm90IGlubGluZWFibGUuXG4iKTsKQEAgLTEzOTIsNyArMTQwMyw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAvLyBOb3cgd2Uga25vdyB3aXRob3V0
IGEgZG91YnQgdGhhdCB3ZSBhcmUgY29tbWl0dGVkIHRvIGlubGluaW5nLiBTbyBiZWdpbiB0aGUg
cHJvY2VzcwogICAgIC8vIGJ5IGNoZWNraW5nIHRoZSBjYWxsZWUgKGlmIG5lY2Vzc2FyeSkgYW5k
IG1ha2luZyBzdXJlIHRoYXQgYXJndW1lbnRzIGFuZCB0aGUgY2FsbGVlCiAgICAgLy8gYXJlIGZs
dXNoZWQuCi0gICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzLCBjYWxsVGFyZ2V0
Tm9kZSwgcmVnaXN0ZXJPZmZzZXQsIGtpbmQpOworICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxs
TGlua1N0YXR1cywgY2FsbFRhcmdldE5vZGUsIHJlZ2lzdGVyT2Zmc2V0LCBzcGVjaWFsaXphdGlv
bktpbmQpOwogICAgIAogICAgIC8vIEZJWE1FOiBEb24ndCBmbHVzaCBjb25zdGFudHMhCiAgICAg
CkBAIC0xODY3LDEzICsxODc4LDYgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5
T2Zmc2V0KAogICAgIHJldHVybiBnZXRCeU9mZnNldDsKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciwKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCi17Ci0gICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihkZXN0aW5hdGlvbk9wZXJhbmQpLCBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNl
LCBpZGVudGlmaWVyTnVtYmVyLCBvZmZzZXQpKTsKLX0KLQogTm9kZSogQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwgTm9kZSogdmFsdWUpCiB7CiAgICAgTm9kZSogcHJvcGVydHlTdG9y
YWdlOwpAQCAtMTkxMCwxOCArMTkxNCwxOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVH
ZXRCeUlkKAogICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAgY29uc3Qg
R2V0QnlJZFN0YXR1cyYgZ2V0QnlJZFN0YXR1cykKIHsKKyAgICBOb2RlVHlwZSBnZXRCeUlkID0g
Z2V0QnlJZFN0YXR1cy5tYWtlc0NhbGxzKCkgPyBHZXRCeUlkRmx1c2ggOiBHZXRCeUlkOworICAg
IAogICAgIGlmICghZ2V0QnlJZFN0YXR1cy5pc1NpbXBsZSgpIHx8ICFPcHRpb25zOjplbmFibGVB
Y2Nlc3NJbmxpbmluZygpKSB7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRp
b25PcGVyYW5kKSwKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoCi0gICAgICAgICAgICAgICAgZ2V0
QnlJZFN0YXR1cy5tYWtlc0NhbGxzKCkgPyBHZXRCeUlkRmx1c2ggOiBHZXRCeUlkLAotICAgICAg
ICAgICAgICAgIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBi
YXNlKSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKGdldEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVy
TnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCiAgICAgaWYgKGdldEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA+IDEpIHsKLSAg
ICAgICAgaWYgKCFpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSB8fCAhT3B0aW9uczo6ZW5hYmxl
UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZygpKSB7CisgICAgICAgIGlmIChnZXRCeUlkU3RhdHVz
Lm1ha2VzQ2FsbHMoKSB8fCAhaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkKKyAgICAgICAgICAg
IHx8ICFPcHRpb25zOjplbmFibGVQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nKCkpIHsKICAgICAg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwKLSAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKEdldEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgT3BJ
bmZvKHByZWRpY3Rpb24pLCBiYXNlKSk7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChnZXRC
eUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTk3MiwxNSAr
MTk3Nyw1MSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgIGlmICh2
YXJpYW50LnNwZWNpZmljVmFsdWUoKSB8fCBvcmlnaW5hbEJhc2VGb3JCYXNlbGluZUpJVCAhPSBi
YXNlKQogICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIG9yaWdpbmFsQmFzZUZvckJhc2VsaW5l
SklUKTsKICAgICAKLSAgICBpZiAodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpIHsKLSAgICAgICAg
QVNTRVJUKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpLmlzQ2VsbCgpKTsKLSAgICAgICAgCi0gICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwgY2VsbENvbnN0YW50
KHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpLmFzQ2VsbCgpKSk7CisgICAgTm9kZSogbG9hZGVkVmFs
dWU7CisgICAgaWYgKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKQorICAgICAgICBsb2FkZWRWYWx1
ZSA9IGNlbGxDb25zdGFudCh2YXJpYW50LnNwZWNpZmljVmFsdWUoKS5hc0NlbGwoKSk7CisgICAg
ZWxzZQorICAgICAgICBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24s
IGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCkpOworICAgIAorICAgIGlm
ICghdmFyaWFudC5jYWxsTGlua1N0YXR1cygpKSB7CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwgbG9hZGVkVmFsdWUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAotICAgIGhhbmRsZUdldEJ5T2Zmc2V0KAotICAgICAgICBkZXN0aW5hdGlvbk9w
ZXJhbmQsIHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0
KCkpOworICAgIC8vIE1ha2UgYSBjYWxsLiBXZSBkb24ndCB0cnkgdG8gZ2V0IGZhbmN5IHdpdGgg
dXNpbmcgdGhlIHNtYWxsZXN0IG9wZXJhbmQgbnVtYmVyIGJlY2F1c2UKKyAgICAvLyB0aGUgc3Rh
Y2sgbGF5b3V0IHBoYXNlIHNob3VsZCBjb21wcmVzcyB0aGUgc3RhY2sgYW55d2F5LgorICAgIAor
ICAgIHVuc2lnbmVkIG51bWJlck9mUGFyYW1ldGVycyA9IDA7CisgICAgbnVtYmVyT2ZQYXJhbWV0
ZXJzKys7IC8vIFRoZSAndGhpcycgYXJndW1lbnQuCisgICAgbnVtYmVyT2ZQYXJhbWV0ZXJzKys7
IC8vIFRydWUgcmV0dXJuIFBDLgorICAgIAorICAgIC8vIFN0YXJ0IHdpdGggYSByZWdpc3RlciBv
ZmZzZXQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgbGFzdCBpbi11c2UgcmVnaXN0ZXIuCisgICAg
aW50IHJlZ2lzdGVyT2Zmc2V0ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoCisgICAgICAgIG1f
aW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMgLSAx
KS5vZmZzZXQoKTsKKyAgICByZWdpc3Rlck9mZnNldCAtPSBudW1iZXJPZlBhcmFtZXRlcnM7Cisg
ICAgcmVnaXN0ZXJPZmZzZXQgLT0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAK
KyAgICAvLyBHZXQgdGhlIGFsaWdubWVudCByaWdodC4KKyAgICByZWdpc3Rlck9mZnNldCA9IC1X
VEY6OnJvdW5kVXBUb011bHRpcGxlT2YoCisgICAgICAgIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJz
KCksCisgICAgICAgIC1yZWdpc3Rlck9mZnNldCk7CisgICAgCisgICAgZW5zdXJlTG9jYWxzKAor
ICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoCisgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS50b0xvY2FsKCkpOworICAgIAorICAgIC8vIElz
c3VlIFNldExvY2Fscy4gVGhpcyBoYXMgdHdvIGVmZmVjdHM6CisgICAgLy8gMSkgVGhhdCdzIGhv
dyBoYW5kbGVDYWxsKCkgc2VlcyB0aGUgYXJndW1lbnRzLgorICAgIC8vIDIpIElmIHdlIGlubGlu
ZSB0aGVuIHRoaXMgZW5zdXJlcyB0aGF0IHRoZSBhcmd1bWVudHMgYXJlIGZsdXNoZWQgc28gdGhh
dCBpZiB5b3UgdXNlCisgICAgLy8gICAgdGhlIGRyZWFkZWQgYXJndW1lbnRzIG9iamVjdCBvbiB0
aGUgZ2V0dGVyLCB0aGUgcmlnaHQgdGhpbmdzIGhhcHBlbi4gV2VsbCwgc29ydCBvZiAtCisgICAg
Ly8gICAgc2luY2Ugd2Ugb25seSByZWFsbHkgY2FyZSBhYm91dCAndGhpcycgaW4gdGhpcyBjYXNl
LiBCdXQgd2UncmUgbm90IGdvaW5nIHRvIHRha2UgdGhhdAorICAgIC8vICAgIHNob3J0Y3V0Lgor
ICAgIGludCBuZXh0UmVnaXN0ZXIgPSByZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkNhbGxGcmFt
ZUhlYWRlclNpemU7CisgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGJh
c2UsIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAgICAKKyAgICBoYW5kbGVDYWxsKAorICAgICAgICBk
ZXN0aW5hdGlvbk9wZXJhbmQsIENhbGwsIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbCwgT1BD
T0RFX0xFTkdUSChvcF9nZXRfYnlfaWQpLAorICAgICAgICBsb2FkZWRWYWx1ZSwgbnVtYmVyT2ZQ
YXJhbWV0ZXJzIC0gMSwgcmVnaXN0ZXJPZmZzZXQsICp2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkp
OwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCgKQEAgLTMzNzYsNyArMzQx
Nyw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmV0dXJuVmFsdWVWUiwKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5saW5lQ2Fs
bEZyYW1lU3RhcnQsCiAgICAgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLAotICAgIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2lu
ZCkKICAgICA6IG1fYnl0ZUNvZGVQYXJzZXIoYnl0ZUNvZGVQYXJzZXIpCiAgICAgLCBtX2NvZGVC
bG9jayhjb2RlQmxvY2spCiAgICAgLCBtX3Byb2ZpbGVkQmxvY2socHJvZmlsZWRCbG9jaykKQEAg
LTM0MzUsNyArMzQ3Niw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxp
bmUKICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsID0gdHJ1ZTsK
ICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhbGxlciA9IGJ5dGVDb2RlUGFyc2VyLT5jdXJy
ZW50Q29kZU9yaWdpbigpOwogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnJl
c2l6ZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7IC8vIFNldCB0aGUgbnVtYmVyIG9mIGFy
Z3VtZW50cyBpbmNsdWRpbmcgdGhpcywgYnV0IGRvbid0IGNvbmZpZ3VyZSB0aGUgdmFsdWUgcmVj
b3ZlcmllcywgeWV0LgotICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+a2luZCA9IElubGluZUNh
bGxGcmFtZTo6a2luZEZvcihraW5kKTsKKyAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmtpbmQg
PSBraW5kOwogICAgICAgICAKICAgICAgICAgaWYgKG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIu
aW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVk
VmFycyA9IG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJl
ZFZhcnM7CkBAIC0zNjc0LDcgKzM3MTUsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgp
CiAgICAgCiAgICAgSW5saW5lU3RhY2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KAogICAgICAgICB0
aGlzLCBtX2NvZGVCbG9jaywgbV9wcm9maWxlZEJsb2NrLCAwLCAwLCBWaXJ0dWFsUmVnaXN0ZXIo
KSwgVmlydHVhbFJlZ2lzdGVyKCksCi0gICAgICAgIG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCksIENvZGVGb3JDYWxsKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwg
SW5saW5lQ2FsbEZyYW1lOjpDYWxsKTsKICAgICAKICAgICBwYXJzZUNvZGVCbG9jaygpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2
aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxNyw3ICs0MTcsNyBAQCB2b2lkIEpJVENvbXBpbGVy
OjpsaW5rRnVuY3Rpb24oKQogICAgIG1faml0Q29kZS0+c2hyaW5rVG9GaXQoKTsKICAgICBjb2Rl
QmxvY2soKS0+c2hyaW5rVG9GaXQoQ29kZUJsb2NrOjpMYXRlU2hyaW5rKTsKICAgICAKLSAgICBs
aW5rQnVmZmVyLT5saW5rKG1fY2FsbEFyaXR5Rml4dXAsIEZ1bmN0aW9uUHRyKChtX3ZtLT5nZXRD
VElTdHViKGFyaXR5Rml4dXApKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIGxp
bmtCdWZmZXItPmxpbmsobV9jYWxsQXJpdHlGaXh1cCwgRnVuY3Rpb25QdHIoKG1fdm0tPmdldENU
SVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7
CiAgICAgCiAgICAgZGlzYXNzZW1ibGUoKmxpbmtCdWZmZXIpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3Bw
CShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCwxMiArMTA4LDQ0IEBA
IHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsK
ICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGppdC5iYXNlbGluZUNvZGVC
bG9ja0Zvcihjb2RlT3JpZ2luKTsKICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
a0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUtPmNh
bGxlcik7CisgICAgICAgIHZvaWQqIGp1bXBUYXJnZXQ7CisgICAgICAgIHZvaWQqIHRydWVSZXR1
cm5QQyA9IG51bGxwdHI7CisgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBjYWxsQnl0ZWNvZGVJ
bmRleCA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgIENh
bGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0KLSAgICAgICAgICAgIGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yQ2FsbGVyLT5nZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KGNhbGxCeXRlY29kZUlu
ZGV4KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvKTsKICAgICAgICAgCi0g
ICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlv
bi5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICBzd2l0Y2ggKGlubGluZUNhbGxGcmFtZS0+
a2luZCkgeworICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbDoKKyAgICAgICAgY2Fz
ZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDogeworICAgICAgICAgICAgQ2FsbExpbmtJbmZv
KiBjYWxsTGlua0luZm8gPQorICAgICAgICAgICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2Fs
bGVyLT5nZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KGNhbGxCeXRlY29kZUluZGV4KTsK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mbyk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlv
bi5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDoKKyAg
ICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OlNldHRlckNhbGw6IHsKKyAgICAgICAgICAgIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9CisgICAgICAgICAgICAgICAgYmFzZWxpbmVDb2Rl
QmxvY2tGb3JDYWxsZXItPmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luKGNhbGxCeXRlY29kZUluZGV4
KSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mbyk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHN3aXRjaCAoaW5saW5lQ2FsbEZyYW1lLT5raW5kKSB7CisgICAgICAgICAg
ICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDoKKyAgICAgICAgICAgICAgICBqdW1w
VGFyZ2V0ID0gaml0LnZtKCktPmdldENUSVN0dWIoYmFzZWxpbmVHZXR0ZXJSZXR1cm5UaHVua0dl
bmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6U2V0dGVyQ2FsbDoKKyAgICAg
ICAgICAgICAgICBqdW1wVGFyZ2V0ID0gaml0LnZtKCktPmdldENUSVN0dWIoYmFzZWxpbmVTZXR0
ZXJSZXR1cm5UaHVua0dlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHRydWVSZXR1cm5QQyA9IHN0
dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKKyAgICAgICAgICAgICAg
ICBzdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gfQogCiAgICAgICAgIEdQUlJlZyBjYWxsZXJG
cmFtZUdQUjsKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxG
cmFtZSkgewpAQCAtMTIyLDEyICsxNTQsMTUgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVz
KENDYWxsSGVscGVycwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGxlckZyYW1lR1BS
ID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXI7CiAgICAgICAgIAorICAgICAgICBqaXQuc3Rv
cmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBBc3NlbWJs
eUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENP
ZmZzZXQoKSkpOworICAgICAgICBpZiAodHJ1ZVJldHVyblBDKQorICAgICAgICAgICAgaml0LnN0
b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cih0cnVlUmV0dXJuUEMpLCBBc3Nl
bWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50cy5zaXplKCkpLm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgCiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9jayksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zv
cigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFj
azo6Q29kZUJsb2NrKSkpOwogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJl
Q2FsbCkKICAgICAgICAgICAgIGppdC5zdG9yZTY0KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3Rh
bnQoKS0+c2NvcGUoKSkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpTY29wZUNoYWlu
KSkpOwogICAgICAgICBqaXQuc3RvcmU2NChjYWxsZXJGcmFtZUdQUiwgQXNzZW1ibHlIZWxwZXJz
OjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUtPmNhbGxlckZyYW1lT2Zmc2V0
KCkpKTsKLSAgICAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0
cihqdW1wVGFyZ2V0KSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxp
bmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkpKTsKICAgICAgICAgdWludDMyX3QgbG9jYXRp
b25CaXRzID0gQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNCeXRlY29kZU9mZnNldChjb2Rl
T3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwogICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0Zvcigo
VmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6
QXJndW1lbnRDb3VudCkpKTsKICAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKSwgQXNzZW1ibHlI
ZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwpAQCAtMTQzLDcgKzE3OCw2IEBA
IHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgaWYgKCFp
bmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29u
c3RhbnQoKS0+c2NvcGUoKSksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJl
Z2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6U2NvcGVDaGFp
bikpKTsKICAgICAgICAgaml0LnN0b3JlUHRyKGNhbGxlckZyYW1lR1BSLCBBc3NlbWJseUhlbHBl
cnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZz
ZXQoKSkpOwotICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGp1bXBUYXJnZXQpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlu
bGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSkpOwogICAgICAgICBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24gPSBiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSAr
IGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsKICAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRz
ID0gQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNCeXRlY29kZUluc3RydWN0aW9uKGluc3Ry
dWN0aW9uKTsKICAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
MzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3Rl
cikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQp
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHJldmlzaW9uIDE2
OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE3OCw3ICsxNzgsNyBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogCiAgICAg
ICAgIGxpbmtCdWZmZXIgPSBhZG9wdFB0cihuZXcgTGlua0J1ZmZlcih2bSwgJmppdCwgY29kZUJs
b2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKSk7CiAgICAgICAgIGxpbmtCdWZmZXItPmxp
bmsoY2FsbEFyaXR5Q2hlY2ssIGNvZGVCbG9jay0+bV9pc0NvbnN0cnVjdG9yID8gb3BlcmF0aW9u
Q29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrKTsKLSAgICAgICAg
bGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1cCwgRnVuY3Rpb25QdHIoKHZtLmdldENUSVN0
dWIoYXJpdHlGaXh1cCkpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgICAgIGxp
bmtCdWZmZXItPmxpbmsoY2FsbEFyaXR5Rml4dXAsIEZ1bmN0aW9uUHRyKCh2bS5nZXRDVElTdHVi
KGFyaXR5Rml4dXBHZW5lcmF0b3IpKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogICAg
ICAgICBsaW5rQnVmZmVyLT5saW5rKG1haW5QYXRoSnVtcHMsIENvZGVMb2NhdGlvbkxhYmVsKGJp
dHdpc2VfY2FzdDx2b2lkKj4oc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24pKSk7CiAKICAgICAgICAg
c3RhdGUuaml0Q29kZS0+aW5pdGlhbGl6ZUFkZHJlc3NGb3JDYWxsKE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uKSkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNzb3JDYWxsSklU
U3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3
ICs0Niw2IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgdmlzaXRXZWFrKFJlcGF0
Y2hCdWZmZXImKSBvdmVycmlkZTsKICAgICAKLXByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRy
PENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm87CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQzMCw3ICs0MzAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ29u
c3RydWN0R2VuCiAgICAgcmV0dXJuIG5hdGl2ZUZvckdlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0
cnVjdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVwKFZNKiB2bSkKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVwR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBK
U0ludGVyZmFjZUpJVCBqaXQodm0pOwogCkBAIC01MzMsNiArNTMzLDc3IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBhcml0eUZpeHVwKFZNKiB2bSkKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwgKCJmaXh1cCBhcml0eSIpKTsKIH0KIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGJhc2VsaW5lR2V0dGVyUmV0dXJuVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQoreworICAgIEpTSW50
ZXJmYWNlSklUIGppdCh2bSk7CisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBqaXQuc2V0
dXBSZXN1bHRzKHJlZ1QxLCByZWdUMCk7CisjZWxzZQorICAgIGppdC5zZXR1cFJlc3VsdHMocmVn
VDApOworI2VuZGlmCisgICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0ZXJzID0gMDsK
KyAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsgLy8gVGhlICd0aGlzJyBhcmd1bWVudC4KKyAgICBu
dW1iZXJPZlBhcmFtZXRlcnMrKzsgLy8gVGhlIHRydWUgcmV0dXJuIFBDLgorICAgIAorICAgIHVu
c2lnbmVkIG51bWJlck9mUmVnc0ZvckNhbGwgPQorICAgICAgICBKU1N0YWNrOjpDYWxsRnJhbWVI
ZWFkZXJTaXplICsgbnVtYmVyT2ZQYXJhbWV0ZXJzOworICAgIAorICAgIHVuc2lnbmVkIG51bWJl
ck9mQnl0ZXNGb3JDYWxsID0KKyAgICAgICAgbnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihS
ZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisgICAgCisgICAgdW5zaWduZWQg
YWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsID0KKyAgICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0
aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNhbGwpOworICAg
ICAgICAgICAgCisgICAgLy8gVGhlIHJlYWwgcmV0dXJuIGFkZHJlc3MgaXMgc3RvcmVkIGFib3Zl
IHRoZSBhcmd1bWVudHMuIFdlIHBhc3NlZCBvbmUgYXJndW1lbnQsIHdoaWNoIGlzCisgICAgLy8g
J3RoaXMnLiBTbyBhcmd1bWVudCBhdCBpbmRleCAxIGlzIHRoZSByZXR1cm4gYWRkcmVzcy4KKyAg
ICBqaXQubG9hZFB0cigKKyAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKAorICAgICAg
ICAgICAgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwKKyAgICAgICAgICAg
ICh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKSAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5k
UENTaXplKSAqIHNpemVvZihSZWdpc3RlcikpLAorICAgICAgICBHUFJJbmZvOjpyZWdUMik7Cisg
ICAgCisgICAgaml0LmFkZFB0cigKKyAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKKyAgICAgICAgQXNzZW1ibHlIZWxwZXJz
OjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgCisgICAgaml0Lmp1bXAocmVnVDIpOworfQor
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYmFzZWxpbmVTZXR0ZXJSZXR1cm5UaHVua0dlbmVyYXRv
cihWTSogdm0pCit7CisgICAgSlNJbnRlcmZhY2VKSVQgaml0KHZtKTsKKyAgICAKKyAgICB1bnNp
Z25lZCBudW1iZXJPZlBhcmFtZXRlcnMgPSAwOworICAgIG51bWJlck9mUGFyYW1ldGVycysrOyAv
LyBUaGUgJ3RoaXMnIGFyZ3VtZW50LgorICAgIG51bWJlck9mUGFyYW1ldGVycysrOyAvLyBUaGUg
dmFsdWUgdG8gc2V0LgorICAgIG51bWJlck9mUGFyYW1ldGVycysrOyAvLyBUaGUgdHJ1ZSByZXR1
cm4gUEMuCisgICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZSZWdzRm9yQ2FsbCA9CisgICAgICAg
IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBudW1iZXJPZlBhcmFtZXRlcnM7CisgICAg
CisgICAgdW5zaWduZWQgbnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQorICAgICAgICBudW1iZXJPZlJl
Z3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsK
KyAgICAKKyAgICB1bnNpZ25lZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQorICAgICAg
ICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJP
ZkJ5dGVzRm9yQ2FsbCk7CisgICAgICAgICAgICAKKyAgICAvLyBUaGUgcmVhbCByZXR1cm4gYWRk
cmVzcyBpcyBzdG9yZWQgYWJvdmUgdGhlIGFyZ3VtZW50cy4gV2UgcGFzc2VkIHR3byBhcmd1bWVu
dHMsIHNvCisgICAgLy8gdGhlIGFyZ3VtZW50IGF0IGluZGV4IDIgaXMgdGhlIHJldHVybiBhZGRy
ZXNzLgorICAgIGppdC5sb2FkUHRyKAorICAgICAgICBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3Mo
CisgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLAorICAg
ICAgICAgICAgKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDIpIC0gSlNTdGFjazo6Q2FsbGVy
RnJhbWVBbmRQQ1NpemUpICogc2l6ZW9mKFJlZ2lzdGVyKSksCisgICAgICAgIEdQUkluZm86OnJl
Z1QyKTsKKyAgICAKKyAgICBqaXQuYWRkUHRyKAorICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAorICAgICAgICBBc3NlbWJs
eUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAKKyAgICBqaXQuanVtcChyZWdU
Mik7Cit9CisKIHN0YXRpYyB2b2lkIHN0cmluZ0NoYXJMb2FkKFNwZWNpYWxpemVkVGh1bmtKSVQm
IGppdCwgVk0qIHZtKQogewogICAgIC8vIGxvYWQgc3RyaW5nCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTExMyw3ICsxMTMsMTAgQEAgaW5saW5lIFRodW5rR2VuZXJhdG9yIHZpcnR1YWxUaHVua0dl
bmVyYQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0qKTsKIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qKTsKIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVUYWlsQ2FsbEdlbmVyYXRvcihWTSopOwotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGFyaXR5Rml4dXAoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0
eUZpeHVwR2VuZXJhdG9yKFZNKik7CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBiYXNlbGluZUdl
dHRlclJldHVyblRodW5rR2VuZXJhdG9yKFZNKiB2bSk7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
YmFzZWxpbmVTZXR0ZXJSZXR1cm5UaHVua0dlbmVyYXRvcihWTSogdm0pOwogCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKFZNKik7CiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgY2hhckF0VGh1bmtHZW5lcmF0b3IoVk0qKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTY5
MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDcgKzE3MCw3IEBAIHN0YXRpYyBDb21tb25TbG93UGF0
aHM6OkFyaXR5Q2hlY2tEYXRhKiAKICAgICByZXN1bHQtPnBhZGRlZFN0YWNrU3BhY2UgPSBzbG90
c1RvQWRkOwogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKHZtLmNhblVzZUpJVCgpKSB7Ci0gICAg
ICAgIHJlc3VsdC0+dGh1bmtUb0NhbGwgPSB2bS5nZXRDVElTdHViKGFyaXR5Rml4dXApLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICByZXN1bHQtPnRodW5rVG9DYWxsID0gdm0u
Z2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKICAgICAgICAgcmVzdWx0LT5yZXR1cm5QQyA9IHZtLmFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1
bmtzLT5yZXR1cm5QQ0Zvcih2bSwgc2xvdHNUb0FkZCAqIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJz
KCkpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBlbHNlCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231672</attachid>
            <date>2014-05-18 19:23:19 -0700</date>
            <delta_ts>2014-05-19 12:58:20 -0700</delta_ts>
            <desc>omg it compiles</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>55168</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUyLDExICszNTIsNiBAQCB2b2lkIENvZGVCbG9j
azo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAgICAgb3V0LnByaW50Zigi
c2VsZiIpOwogICAgICAgICAgICAgICAgIGJhc2VTdHJ1Y3R1cmUgPSBzdHViSW5mby51LmdldEJ5
SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW46Ci0gICAgICAgICAgICAg
ICAgb3V0LnByaW50ZigiY2hhaW4iKTsKLSAgICAgICAgICAgICAgICBiYXNlU3RydWN0dXJlID0g
c3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKLSAgICAg
ICAgICAgICAgICBjaGFpbiA9IHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lk
X2xpc3Q6CiAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigibGlzdCIpOwogICAgICAgICAgICAg
ICAgIGxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7CkBAIC0yMzQ0LDYgKzIzMzks
MTUgQEAgU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6YWRkU3R1YkluZgogICAgIHJldHVy
biBtX3N0dWJJbmZvcy5hZGQoKTsKIH0KIAorU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6
ZmluZFN0dWJJbmZvKENvZGVPcmlnaW4gY29kZU9yaWdpbikKK3sKKyAgICBmb3IgKFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA6IG1fc3R1YkluZm9zKSB7CisgICAgICAgIGlmIChzdHViSW5m
by0+Y29kZU9yaWdpbiA9PSBjb2RlT3JpZ2luKQorICAgICAgICAgICAgcmV0dXJuIHN0dWJJbmZv
OworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogQ2FsbExpbmtJbmZvKiBDb2RlQmxv
Y2s6OmFkZENhbGxMaW5rSW5mbygpCiB7CiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
bV9sb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDYgKzIwMSwxMCBAQCBwdWJsaWM6CiAg
ICAgU3RydWN0dXJlU3R1YkluZm8qIGFkZFN0dWJJbmZvKCk7CiAgICAgQmFnPFN0cnVjdHVyZVN0
dWJJbmZvPjo6aXRlcmF0b3Igc3R1YkluZm9CZWdpbigpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmJl
Z2luKCk7IH0KICAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBzdHViSW5mb0Vu
ZCgpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmVuZCgpOyB9CisgICAgCisgICAgLy8gTyhuKSBvcGVy
YXRpb24uIFVzZSBnZXRTdHViSW5mb01hcCgpIHVubGVzcyB5b3UgcmVhbGx5IG9ubHkgaW50ZW5k
IHRvIGdldCBvbmUKKyAgICAvLyBzdHViIGluZm8uCisgICAgU3RydWN0dXJlU3R1YkluZm8qIGZp
bmRTdHViSW5mbyhDb2RlT3JpZ2luKTsKIAogICAgIHZvaWQgcmVzZXRTdHViKFN0cnVjdHVyZVN0
dWJJbmZvJik7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZU9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw2ICsyMDYs
MTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQwogICAgIGNhc2Ug
SlNDOjpJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKICAgICAgICAgb3V0LnByaW50KCJDb25z
dHJ1Y3QiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6
OkdldHRlckNhbGw6CisgICAgICAgIG91dC5wcmludCgiR2V0dGVyQ2FsbCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBKU0M6OklubGluZUNhbGxGcmFtZTo6U2V0dGVyQ2FsbDoKKyAgICAg
ICAgb3V0LnByaW50KCJTZXR0ZXJDYWxsIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAt
MTIxLDYgKzEyMSwxMSBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICBlbnVtIEtpbmQg
ewogICAgICAgICBDYWxsLAogICAgICAgICBDb25zdHJ1Y3QsCisgICAgICAgIAorICAgICAgICAv
LyBGb3IgdGhlc2UsIHRoZSBzdGFja09mZnNldCBpbmNvcnBvcmF0ZXMgdGhlIGFyZ3VtZW50IGNv
dW50IHBsdXMgdGhlIHRydWUgcmV0dXJuIFBDCisgICAgICAgIC8vIHNsb3QuCisgICAgICAgIEdl
dHRlckNhbGwsCisgICAgICAgIFNldHRlckNhbGwKICAgICB9OwogICAgIAogICAgIHN0YXRpYyBL
aW5kIGtpbmRGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQpAQCAtMTM5LDYgKzE0NCw4
IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5k
KSB7CiAgICAgICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgY2FzZSBHZXR0ZXJDYWxsOgorICAgICAg
ICBjYXNlIFNldHRlckNhbGw6CiAgICAgICAgICAgICByZXR1cm4gQ29kZUZvckNhbGw7CiAgICAg
ICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICAgICAgcmV0dXJuIENvZGVGb3JDb25zdHJ1Y3Q7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0
dXMuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHZXRCeUlkU3RhdHVzLmgiCiAKKyNpbmNsdWRl
ICJBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1Njb3BlLmgiCkBAIC04OSw1NyAr
OTAsNiBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAjZW5kaWYK
IH0KIAotYm9vbCBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yQ2hhaW4oQ29kZUJsb2NrKiBwcm9m
aWxlZEJsb2NrLCBTdHJpbmdJbXBsKiB1aWQsIFBhc3NSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbj4gcGFzc2VkQ2hhaW4pCi17Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBSZWZQdHI8SW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbj4gY2hhaW4gPSBwYXNzZWRDaGFpbjsKLSAgICAKLSAgICAvLyBWYWxp
ZGF0ZSB0aGUgY2hhaW4uIElmIHRoZSBjaGFpbiBpcyBpbnZhbGlkLCB0aGVuIGN1cnJlbnRseSB0
aGUgYmVzdCB0aGluZwotICAgIC8vIHdlIGNhbiBkbyBpcyB0byBhc3N1bWUgdGhhdCBUYWtlc1Ns
b3cgaXMgdHJ1ZS4gSW4gdGhlIGZ1dHVyZSwgaXQgbWlnaHQgYmUKLSAgICAvLyB3b3J0aCBleHBs
b3JpbmcgcmVpZnlpbmcgdGhlIHN0cnVjdHVyZSBjaGFpbiBmcm9tIHRoZSBzdHJ1Y3R1cmUgd2Un
dmUgZ290Ci0gICAgLy8gaW5zdGVhZCBvZiB1c2luZyB0aGUgb25lIGZyb20gdGhlIGNhY2hlLCBz
aW5jZSB0aGF0IHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5ncwotICAgIC8vIGlmIHRoZSBzdHJ1Y3R1
cmUgY2hhaW4gaGFzIGNoYW5nZWQuIEJ1dCB0aGF0IG1heSBiZSBoYXJkZXIsIGJlY2F1c2Ugd2Ug
bWF5Ci0gICAgLy8gdGhlbiBlbmQgdXAgaGF2aW5nIGEgZGlmZmVyZW50IHR5cGUgb2YgYWNjZXNz
IGFsdG9nZXRoZXIuIEFuZCBpdCBjdXJyZW50bHkKLSAgICAvLyBkb2VzIG5vdCBhcHBlYXIgdG8g
YmUgd29ydGggaXQgdG8gZG8gc28gLS0gZWZmZWN0aXZlbHksIHRoZSBoZXVyaXN0aWMgd2UKLSAg
ICAvLyBoYXZlIG5vdyBpcyB0aGF0IGlmIHRoZSBzdHJ1Y3R1cmUgY2hhaW4gaGFzIGNoYW5nZWQg
YmV0d2VlbiB3aGVuIGl0IHdhcwotICAgIC8vIGNhY2hlZCBvbiBpbiB0aGUgYmFzZWxpbmUgSklU
IGFuZCB3aGVuIHRoZSBERkcgdHJpZWQgdG8gaW5saW5lIHRoZSBhY2Nlc3MsCi0gICAgLy8gdGhl
biB3ZSBmYWxsIGJhY2sgb24gYSBwb2x5bW9ycGhpYyBhY2Nlc3MuCi0gICAgaWYgKCFjaGFpbi0+
aXNTdGlsbFZhbGlkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChjaGFpbi0+
aGVhZCgpLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgc2l6ZV90IGNoYWluU2l6ZSA9IGNoYWluLT5zaXplKCk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGFpblNpemU7IGkrKykgewotICAgICAgICBpZiAoY2hh
aW4tPmF0KGkpLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0
ID0gY2hhaW4tPnRlcm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgU3RydWN0dXJlKiBjdXJyZW50U3Ry
dWN0dXJlID0gY2hhaW4tPmxhc3QoKTsKLSAgICAKLSAgICBBU1NFUlRfVU5VU0VEKGN1cnJlbnRP
YmplY3QsIGN1cnJlbnRPYmplY3QpOwotICAgIAotICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25v
cmVkOwotICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAKLSAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBjdXJyZW50U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICpw
cm9maWxlZEJsb2NrLT52bSgpLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVl
KTsKLSAgICBpZiAoY3VycmVudFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgIHNw
ZWNpZmljVmFsdWUgPSAwOwotICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJuIGFwcGVuZFZhcmlhbnQoR2V0QnlJZFZh
cmlhbnQoU3RydWN0dXJlU2V0KGNoYWluLT5oZWFkKCkpLCBvZmZzZXQsIHNwZWNpZmljVmFsdWUs
IGNoYWluKSk7Ci0jZWxzZSAvLyBFTkFCTEUoSklUKQotICAgIFVOVVNFRF9QQVJBTShwcm9maWxl
ZEJsb2NrKTsKLSAgICBVTlVTRURfUEFSQU0odWlkKTsKLSAgICBVTlVTRURfUEFSQU0ocGFzc2Vk
Q2hhaW4pOwotICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwotICAgIHJldHVybiBmYWxz
ZTsKLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotfQotCiBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHViSW5mb01hcCYgbWFw
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKQEAgLTE0OCw3ICs5
OCw4IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKIAogI2lmIEVO
QUJMRShERkdfSklUKQogICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAg
bG9ja2VyLCBwcm9maWxlZEJsb2NrLCBtYXAuZ2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkp
LCB1aWQpOworICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIG1hcC5nZXQoQ29kZU9yaWdp
bihieXRlY29kZUluZGV4KSksIHVpZCwKKyAgICAgICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVF
eGl0U2l0ZURhdGEobG9ja2VyLCBwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KSk7CiAgICAg
CiAgICAgaWYgKCFyZXN1bHQudGFrZXNTbG93UGF0aCgpCiAgICAgICAgICYmIChoYXNFeGl0U2l0
ZShsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpCkBAIC0xNjYsMjIgKzExNywy
MiBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAKICNpZiBFTkFC
TEUoSklUKQogR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8o
Ci0gICAgY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIENvZGVCbG9jayogcHJvZmlsZWRCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLAotICAgIFN0cmluZ0ltcGwqIHVpZCkKKyAg
ICBjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLAorICAgIFN0cmluZ0ltcGwqIHVpZCwg
Q2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQogewogICAgIGlm
ICghc3R1YkluZm8gfHwgIXN0dWJJbmZvLT5zZWVuKQogICAgICAgICByZXR1cm4gR2V0QnlJZFN0
YXR1cyhOb0luZm9ybWF0aW9uKTsKICAgICAKICAgICBpZiAoc3R1YkluZm8tPnJlc2V0QnlHQykK
ICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7Ci0KKyAg
ICAKICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gMDsKKyAgICBTdGF0ZSB0YWtl
c1Nsb3dQYXRoID0gVGFrZXNTbG93UGF0aDsKICAgICBpZiAoc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PT0gYWNjZXNzX2dldF9ieV9pZF9saXN0KSB7CiAgICAgICAgIGxpc3QgPSBzdHViSW5mby0+dS5n
ZXRCeUlkTGlzdC5saXN0OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChsaXN0LT5hdChpKS5kb2VzQ2FsbHMoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhNYWtlc0NhbGxzLCB0cnVlKTsK
LSAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxp
c3QtPnNpemUoKTsgKytpKQorICAgICAgICAgICAgdGFrZXNTbG93UGF0aCA9IE1ha2VzQ2FsbHM7
CiAgICAgfQogICAgIAogICAgIC8vIEZpbmFsbHkgZmlndXJlIG91dCBpZiB3ZSBjYW4gZGVyaXZl
IGFuIGFjY2VzcyBzdHJhdGVneS4KQEAgLTIxNSw4ICsxNjYsNiBAQCBHZXRCeUlkU3RhdHVzIEdl
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgIAogICAgIGNhc2UgYWNjZXNzX2dldF9i
eV9pZF9saXN0OiB7CiAgICAgICAgIGZvciAodW5zaWduZWQgbGlzdEluZGV4ID0gMDsgbGlzdElu
ZGV4IDwgbGlzdC0+c2l6ZSgpOyArK2xpc3RJbmRleCkgewotICAgICAgICAgICAgQVNTRVJUKCFs
aXN0LT5hdChsaXN0SW5kZXgpLmRvZXNDYWxscygpKTsKLSAgICAgICAgICAgIAogICAgICAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBsaXN0LT5hdChsaXN0SW5kZXgpLnN0cnVjdHVyZSgp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFzc2VydCB0
aGF0IHdlIG5ldmVyIHNlZSBhIHN0cnVjdHVyZSB0aGF0CkBAIC0yMjYsNzAgKzE3NSwxMTAgQEAg
R2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTgxMAogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1
cmVQcm9wZXJ0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRha2Vz
U2xvd1BhdGgsIHRydWUpOworICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHRh
a2VzU2xvd1BhdGgsIHRydWUpOwogICAgICAgICAgICAgCisgICAgICAgICAgICB1bnNpZ25lZCBh
dHRyaWJ1dGVzSWdub3JlZDsKKyAgICAgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKKyAg
ICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG15T2Zmc2V0OworICAgICAgICAgICAgUmVmUHRyPElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWluOworCiAgICAgICAgICAgICBpZiAobGlzdC0+YXQo
bGlzdEluZGV4KS5jaGFpbigpKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4+IGNoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4o
CisgICAgICAgICAgICAgICAgY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbigKICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgc3RydWN0dXJlLCBsaXN0
LT5hdChsaXN0SW5kZXgpLmNoYWluKCksCiAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmF0KGxp
c3RJbmRleCkuY2hhaW5Db3VudCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuY29t
cHV0ZUZvckNoYWluKHByb2ZpbGVkQmxvY2ssIHVpZCwgY2hhaW4pKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCB0cnVlKTsKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAo
IWNoYWluLT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5
SWRTdGF0dXModGFrZXNTbG93UGF0aCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKGNoYWluLT5oZWFkKCktPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVBy
b3BlcnR5KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHRha2Vz
U2xvd1BhdGgsIHRydWUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNpemVf
dCBjaGFpblNpemUgPSBjaGFpbi0+c2l6ZSgpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY2hhaW5TaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNo
YWluLT5hdChpKS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHRha2VzU2xvd1BhdGgsIHRy
dWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBKU09iamVjdCogY3VycmVudE9iamVjdCA9IGNoYWluLT50ZXJtaW5hbFByb3RvdHlwZSgpOwor
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogY3VycmVudFN0cnVjdHVyZSA9IGNoYWluLT5sYXN0
KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjdXJy
ZW50T2JqZWN0LCBjdXJyZW50T2JqZWN0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBteU9mZnNldCA9IGN1cnJlbnRTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgKKyAgICAg
ICAgICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9y
ZWQsIHNwZWNpZmljVmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U3RydWN0dXJl
LT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG15T2Zmc2V0ID0gc3RydWN0
dXJlLT5nZXRDb25jdXJyZW50bHkoCisgICAgICAgICAgICAgICAgICAgICpwcm9maWxlZEJsb2Nr
LT52bSgpLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgICAgICAg
ICAgc3BlY2lmaWNWYWx1ZSA9IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25vcmVkOwotICAgICAgICAgICAgSlNDZWxsKiBz
cGVjaWZpY1ZhbHVlOwotICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgbXlPZmZzZXQgPSBzdHJ1
Y3R1cmUtPmdldENvbmN1cnJlbnRseSgKLSAgICAgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+
dm0oKSwgdWlkLCBhdHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1ZSk7Ci0gICAgICAgICAg
ICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgICAgICBzcGVjaWZp
Y1ZhbHVlID0gMDsKLSAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0
KG15T2Zmc2V0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Ns
b3dQYXRoLCB0cnVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyh0YWtl
c1Nsb3dQYXRoLCB0cnVlKTsKIAotICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSAwOyB2YXJpYW50SW5kZXggPCBy
ZXN1bHQubV92YXJpYW50cy5zaXplKCk7ICsrdmFyaWFudEluZGV4KSB7Ci0gICAgICAgICAgICAg
ICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSByZXN1bHQubV92YXJpYW50c1t2YXJpYW50SW5k
ZXhdOwotICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lm1fY2hhaW4pCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFjaGFpbiAmJiAhbGlzdC0+YXQobGlz
dEluZGV4KS5kb2VzQ2FsbHMoKSkgeworICAgICAgICAgICAgICAgIC8vIEZvciBub24tY2hhaW4s
IG5vbi1nZXR0ZXIgYWNjZXNzZXMsIHdlIHRyeSB0byBkbyBzb21lIGNvYWxlc2NpbmcuCisgICAg
ICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgdmFyaWFudEluZGV4ID0gMDsgdmFyaWFudEluZGV4IDwgcmVzdWx0Lm1fdmFyaWFudHMu
c2l6ZSgpOyArK3ZhcmlhbnRJbmRleCkgeworICAgICAgICAgICAgICAgICAgICBHZXRCeUlkVmFy
aWFudCYgdmFyaWFudCA9IHJlc3VsdC5tX3ZhcmlhbnRzW3ZhcmlhbnRJbmRleF07CisgICAgICAg
ICAgICAgICAgICAgIGlmICh2YXJpYW50Lm1fY2hhaW4pCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAodmFyaWFu
dC5tX29mZnNldCAhPSBteU9mZnNldCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKHZhcmlh
bnQubV9zdHJ1Y3R1cmVTZXQuY29udGFpbnMoc3RydWN0dXJlKSkKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lm1fb2Zmc2V0ICE9IG15
T2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQubV9zcGVjaWZpY1ZhbHVlICE9IEpTVmFs
dWUoc3BlY2lmaWNWYWx1ZSkpCi0gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQubV9zcGVjaWZp
Y1ZhbHVlID0gSlNWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5jYWxs
TGlua1N0YXR1cygpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgdmFyaWFudC5tX3N0cnVjdHVyZVNldC5hZGQoc3Ry
dWN0dXJlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZm91
bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5tX3N0cnVjdHVyZVNl
dC5jb250YWlucyhzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lm1fc3BlY2lm
aWNWYWx1ZSAhPSBKU1ZhbHVlKHNwZWNpZmljVmFsdWUpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyaWFudC5tX3NwZWNpZmljVmFsdWUgPSBKU1ZhbHVlKCk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQubV9zdHJ1Y3R1cmVTZXQuYWRkKHN0cnVjdHVy
ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChmb3VuZCkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChm
b3VuZCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXM7CisgICAgICAgICAgICBzd2l0Y2gg
KGxpc3QtPmF0KGxpc3RJbmRleCkudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEdldEJ5SWRB
Y2Nlc3M6OlNpbXBsZUlubGluZToKKyAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6U2lt
cGxlU3R1YjogeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgY2FzZSBHZXRCeUlkQWNjZXNzOjpHZXR0ZXI6IHsKKyAgICAgICAgICAgICAgICBBY2Nl
c3NvckNhbGxKSVRTdHViUm91dGluZSogc3R1YiA9IHN0YXRpY19jYXN0PEFjY2Vzc29yQ2FsbEpJ
VFN0dWJSb3V0aW5lKj4oCisgICAgICAgICAgICAgICAgICAgIGxpc3QtPmF0KGxpc3RJbmRleCku
c3R1YlJvdXRpbmUoKSk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1h
a2VfdW5pcXVlPENhbGxMaW5rU3RhdHVzPigKKyAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtT
dGF0dXM6OmNvbXB1dGVGb3IobG9ja2VyLCAqc3R1Yi0+bV9jYWxsTGlua0luZm8sIGNhbGxFeGl0
U2l0ZURhdGEpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6Q3VzdG9tR2V0dGVyOiB7CisgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIHRvdGFsbHkgc3dlZXQgdG8gc3VwcG9ydCB0aGlzIGF0
IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDUyCisgICAgICAgICAgICAgICAgcmV0
dXJuIEdldEJ5SWRTdGF0dXModGFrZXNTbG93UGF0aCwgdHJ1ZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICgh
cmVzdWx0LmFwcGVuZFZhcmlhbnQoR2V0QnlJZFZhcmlhbnQoU3RydWN0dXJlU2V0KHN0cnVjdHVy
ZSksIG15T2Zmc2V0LCBzcGVjaWZpY1ZhbHVlKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdl
dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7CisgICAgICAgICAgICBHZXRCeUlkVmFy
aWFudCB2YXJpYW50KAorICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBt
eU9mZnNldCwgc3BlY2lmaWNWYWx1ZSwgY2hhaW4sCisgICAgICAgICAgICAgICAgc3RkOjptb3Zl
KGNhbGxMaW5rU3RhdHVzKSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50
KHZhcmlhbnQpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHRha2VzU2xv
d1BhdGgsIHRydWUpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluOiB7Ci0g
ICAgICAgIGlmICghc3R1YkluZm8tPnUuZ2V0QnlJZENoYWluLmlzRGlyZWN0KQotICAgICAgICAg
ICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoTWFrZXNDYWxscywgdHJ1ZSk7Ci0gICAgICAgIFJlZlB0
cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluKAotICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywKLSAgICAgICAgICAgIHN0
dWJJbmZvLT51LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLAotICAgICAg
ICAgICAgc3R1YkluZm8tPnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpLAotICAgICAgICAgICAg
c3R1YkluZm8tPnUuZ2V0QnlJZENoYWluLmNvdW50KSk7Ci0gICAgICAgIGlmIChyZXN1bHQuY29t
cHV0ZUZvckNoYWluKHByb2ZpbGVkQmxvY2ssIHVpZCwgY2hhaW4pKQotICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwg
dHJ1ZSk7Ci0gICAgfQotICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gR2V0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCB0cnVlKTsKICAgICB9CkBAIC0zMDUsMTAgKzI5NCwx
OCBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiB7CiAjaWYgRU5B
QkxFKERGR19KSVQpCiAgICAgaWYgKGRmZ0Jsb2NrKSB7CisgICAgICAgIENhbGxMaW5rU3RhdHVz
OjpFeGl0U2l0ZURhdGEgZXhpdFNpdGVEYXRhOworICAgICAgICB7CisgICAgICAgICAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xvY2spOworICAgICAgICAg
ICAgZXhpdFNpdGVEYXRhID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoCisg
ICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgsIEV4aXRGcm9tRlRMKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgR2V0QnlJ
ZFN0YXR1cyByZXN1bHQ7CiAgICAgICAgIHsKICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2Nr
ZXIgbG9ja2VyKGRmZ0Jsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgcmVzdWx0ID0gY29tcHV0
ZUZvclN0dWJJbmZvKGxvY2tlciwgZGZnQmxvY2ssIGRmZ01hcC5nZXQoY29kZU9yaWdpbiksIHVp
ZCk7CisgICAgICAgICAgICByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCisgICAgICAgICAg
ICAgICAgbG9ja2VyLCBkZmdCbG9jaywgZGZnTWFwLmdldChjb2RlT3JpZ2luKSwgdWlkLCBleGl0
U2l0ZURhdGEpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAocmVzdWx0LnRha2Vz
U2xvd1BhdGgoKSkKQEAgLTM2MSw2ICszNTgsMjQgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yKAogICAgICAgICBTaW1wbGUsIGZhbHNlLCBHZXRCeUlkVmFyaWFudChT
dHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgb2Zmc2V0LCBzcGVjaWZpY1ZhbHVlKSk7CiB9CiAKK2Jv
b2wgR2V0QnlJZFN0YXR1czo6bWFrZXNDYWxscygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3N0
YXRlKSB7CisgICAgY2FzZSBOb0luZm9ybWF0aW9uOgorICAgIGNhc2UgVGFrZXNTbG93UGF0aDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgU2ltcGxlOgorICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX3ZhcmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1f
dmFyaWFudHNbaV0uY2FsbExpbmtTdGF0dXMoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBNYWtlc0NhbGxz
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKwogdm9pZCBHZXRCeUlkU3RhdHVzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CiB7CiAgICAgb3V0LnByaW50KCIoIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgR2V0QnlJZFN0YXR1c19oCiAjZGVmaW5lIEdl
dEJ5SWRTdGF0dXNfaAogCisjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKICNpbmNsdWRlICJD
b2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKICNpbmNsdWRlICJF
eGl0aW5nSklUVHlwZS5oIgpAQCAtODMsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgR2V0
QnlJZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChp
bmRleCk7IH0KIAogICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUgPT0gVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE1ha2VzQ2FsbHM7IH0KLSAgICBib29s
IG1ha2VzQ2FsbHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IE1ha2VzQ2FsbHM7IH0KKyAg
ICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKICAgICAKICAgICBib29sIHdhc1NlZW5JbkpJVCgp
IGNvbnN0IHsgcmV0dXJuIG1fd2FzU2VlbkluSklUOyB9CiAgICAgCkBAIC05NCw5ICs5NSwxMCBA
QCBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIGhhc0V4aXRTaXRlKGNvbnN0IENvbmN1cnJlbnRK
SVRMb2NrZXImLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBFeGl0aW5nSklU
VHlwZSA9IEV4aXRGcm9tQW55dGhpbmcpOwogI2VuZGlmCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBz
dGF0aWMgR2V0QnlJZFN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpJ
VExvY2tlciYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RyaW5nSW1wbCogdWlk
KTsKKyAgICBzdGF0aWMgR2V0QnlJZFN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oCisgICAgICAg
IGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvKiwKKyAgICAgICAgU3RyaW5nSW1wbCogdWlkLCBDYWxsTGlua1N0YXR1
czo6RXhpdFNpdGVEYXRhKTsKICNlbmRpZgotICAgIGJvb2wgY29tcHV0ZUZvckNoYWluKENvZGVC
bG9jayosIFN0cmluZ0ltcGwqIHVpZCwgUGFzc1JlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
Pik7CiAgICAgc3RhdGljIEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sq
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBTdHJpbmdJbXBsKiB1aWQpOwogICAgIAogICAgIGJv
b2wgYXBwZW5kVmFyaWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lv
biAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlh
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsMzEgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJHZXRCeUlkVmFyaWFudC5oIgogCisjaW5jbHVkZSAiQ2FsbExpbmtT
dGF0dXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCitH
ZXRCeUlkVmFyaWFudDo6fkdldEJ5SWRWYXJpYW50KCkgeyB9CisKK0dldEJ5SWRWYXJpYW50OjpH
ZXRCeUlkVmFyaWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCit7CisgICAgKnRoaXMg
PSBvdGhlcjsKK30KKworR2V0QnlJZFZhcmlhbnQmIEdldEJ5SWRWYXJpYW50OjpvcGVyYXRvcj0o
Y29uc3QgR2V0QnlJZFZhcmlhbnQmIG90aGVyKQoreworICAgIG1fc3RydWN0dXJlU2V0ID0gb3Ro
ZXIubV9zdHJ1Y3R1cmVTZXQ7CisgICAgbV9jaGFpbiA9IG90aGVyLm1fY2hhaW47CisgICAgbV9z
cGVjaWZpY1ZhbHVlID0gb3RoZXIubV9zcGVjaWZpY1ZhbHVlOworICAgIG1fb2Zmc2V0ID0gb3Ro
ZXIubV9vZmZzZXQ7CisgICAgaWYgKG90aGVyLm1fY2FsbExpbmtTdGF0dXMpCisgICAgICAgIG1f
Y2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIu
bV9jYWxsTGlua1N0YXR1cyk7CisgICAgZWxzZQorICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0g
bnVsbHB0cjsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKIHZvaWQgR2V0QnlJZFZhcmlhbnQ6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBkdW1wSW5Db250ZXh0KG91dCwgMCk7
CkBAIC00NSw3ICs2NiwxMCBAQCB2b2lkIEdldEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFBy
aW50CiAgICAgb3V0LnByaW50KAogICAgICAgICAiPCIsIGluQ29udGV4dChzdHJ1Y3R1cmVTZXQo
KSwgY29udGV4dCksICIsICIsCiAgICAgICAgIHBvaW50ZXJEdW1wSW5Db250ZXh0KGNoYWluKCks
IGNvbnRleHQpLCAiLCAiLAotICAgICAgICBpbkNvbnRleHQoc3BlY2lmaWNWYWx1ZSgpLCBjb250
ZXh0KSwgIiwgIiwgb2Zmc2V0KCksICI+Iik7CisgICAgICAgIGluQ29udGV4dChzcGVjaWZpY1Zh
bHVlKCksIGNvbnRleHQpLCAiLCAiLCBvZmZzZXQoKSk7CisgICAgaWYgKG1fY2FsbExpbmtTdGF0
dXMpCisgICAgICAgIG91dC5wcmludCgiY2FsbDogIiwgKm1fY2FsbExpbmtTdGF0dXMpOworICAg
IG91dC5wcmludCgiPiIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAx
NjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBHZXRCeUlkVmFyaWFu
dF9oCiAjZGVmaW5lIEdldEJ5SWRWYXJpYW50X2gKIAorI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVz
LmgiCiAjaW5jbHVkZSAiSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgIkpTQ0pT
VmFsdWUuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgpAQCAtMzMsNiArMzQsNyBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQ2FsbExpbmtTdGF0dXM7CiBjbGFzcyBHZXRCeUlk
U3RhdHVzOwogc3RydWN0IER1bXBDb250ZXh0OwogCkBAIC00MSwxMSArNDMsMTMgQEAgcHVibGlj
OgogICAgIEdldEJ5SWRWYXJpYW50KAogICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVj
dHVyZVNldCA9IFN0cnVjdHVyZVNldCgpLAogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBpbnZhbGlkT2Zmc2V0LCBKU1ZhbHVlIHNwZWNpZmljVmFsdWUgPSBKU1ZhbHVlKCksCi0gICAg
ICAgIFBhc3NSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gY2hhaW4gPSBudWxscHRyKQor
ICAgICAgICBQYXNzUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWluID0gbnVsbHB0
ciwKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1
cyA9IG51bGxwdHIpCiAgICAgICAgIDogbV9zdHJ1Y3R1cmVTZXQoc3RydWN0dXJlU2V0KQogICAg
ICAgICAsIG1fY2hhaW4oY2hhaW4pCiAgICAgICAgICwgbV9zcGVjaWZpY1ZhbHVlKHNwZWNpZmlj
VmFsdWUpCiAgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICAgICAsIG1fY2FsbExpbmtT
dGF0dXMoc3RkOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSkKICAgICB7CiAgICAgICAgIGlmICghc3Ry
dWN0dXJlU2V0LnNpemUoKSkgewogICAgICAgICAgICAgQVNTRVJUKG9mZnNldCA9PSBpbnZhbGlk
T2Zmc2V0KTsKQEAgLTU0LDEyICs1OCwxOCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAg
ICAgCisgICAgfkdldEJ5SWRWYXJpYW50KCk7CisgICAgCisgICAgR2V0QnlJZFZhcmlhbnQoY29u
c3QgR2V0QnlJZFZhcmlhbnQmKTsKKyAgICBHZXRCeUlkVmFyaWFudCYgb3BlcmF0b3I9KGNvbnN0
IEdldEJ5SWRWYXJpYW50Jik7CisgICAgCiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV9zdHJ1Y3R1cmVTZXQuc2l6ZSgpOyB9CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiAhaXNTZXQoKTsgfQogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0KICAgICBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluKiBjaGFpbigpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8SW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbio+KG1fY2hhaW4uZ2V0KCkpOyB9CiAgICAgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gbV9zcGVjaWZpY1ZhbHVlOyB9CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICBDYWxsTGlua1N0YXR1cyogY2Fs
bExpbmtTdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX2NhbGxMaW5rU3RhdHVzLmdldCgpOyB9CiAg
ICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wSW5D
b250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKQEAgLTcxLDYgKzgxLDcg
QEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsK
ICAgICBKU1ZhbHVlIG1fc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNl
dDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJKHJldmlz
aW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsMjcgKzU4LDExIEBAIEdldEJ5
SWRBY2Nlc3MgR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHUKICAgICAKICAgICBHZXRCeUlkQWNj
ZXNzIHJlc3VsdDsKICAgICAKLSAgICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsKLSAg
ICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKLSAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFNp
bXBsZUlubGluZTsKLSAgICAgICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZv
LnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX3N0
dWJSb3V0aW5lID0gSklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZShpbml0
aWFsU2xvd1BhdGgpOwotICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgY2FzZSBhY2Nlc3Nf
Z2V0X2J5X2lkX2NoYWluOgotICAgICAgICByZXN1bHQubV9zdHJ1Y3R1cmUuY29weUZyb20oc3R1
YkluZm8udS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3Vs
dC5tX2NoYWluLmNvcHlGcm9tKHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNoYWluKTsKLSAgICAg
ICAgcmVzdWx0Lm1fY2hhaW5Db3VudCA9IHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNvdW50Owot
ICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwotICAg
ICAgICBpZiAoc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uaXNEaXJlY3QpCi0gICAgICAgICAgICBy
ZXN1bHQubV90eXBlID0gU2ltcGxlU3R1YjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVz
dWx0Lm1fdHlwZSA9IEdldHRlcjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQorICAgIFJF
TEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxm
KTsKKyAgICAKKyAgICByZXN1bHQubV90eXBlID0gU2ltcGxlSW5saW5lOworICAgIHJlc3VsdC5t
X3N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1
Y3R1cmUpOworICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gSklUU3R1YlJvdXRpbmU6OmNyZWF0
ZVNlbGZNYW5hZ2VkUm91dGluZShpbml0aWFsU2xvd1BhdGgpOwogICAgIAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CkBAIC0xMDksNyArOTMsNiBAQCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBQb2x5
bW9ycGhpY0dldEJ5CiAgICAgCiAgICAgQVNTRVJUKAogICAgICAgICBzdHViSW5mby5hY2Nlc3NU
eXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZgotICAgICAgICB8fCBzdHViSW5mby5hY2Nlc3NU
eXBlID09IGFjY2Vzc19nZXRfYnlfaWRfY2hhaW4KICAgICAgICAgfHwgc3R1YkluZm8uYWNjZXNz
VHlwZSA9PSBhY2Nlc3NfdW5zZXQpOwogICAgIAogICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3Qq
IHJlc3VsdCA9IG5ldyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KHN0dWJJbmZvKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmNwcAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNiBAQCB2
b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZigpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lk
X2NoYWluOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAg
ICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CiAgICAgY2FzZSBhY2Nl
c3NfcHV0X2J5X2lkX3JlcGxhY2U6CkBAIC02OCwxMSArNjcsNiBAQCBib29sIFN0cnVjdHVyZVN0
dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodS5n
ZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWlu
OgotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RT
dHJ1Y3R1cmUuZ2V0KCkpCi0gICAgICAgICAgICB8fCAhSGVhcDo6aXNNYXJrZWQodS5nZXRCeUlk
Q2hhaW4uY2hhaW4uZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBi
cmVhazsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDogewogICAgICAgICBpZiAoIXUu
Z2V0QnlJZExpc3QubGlzdC0+dmlzaXRXZWFrKHJlcGF0Y2hCdWZmZXIpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Nyw3ICs0Nyw2IEBAIGNsYXNzIFBvbHltb3JwaGljUHV0QnlJZExpc3Q7CiAKIGVudW0gQWNj
ZXNzVHlwZSB7CiAgICAgYWNjZXNzX2dldF9ieV9pZF9zZWxmLAotICAgIGFjY2Vzc19nZXRfYnlf
aWRfY2hhaW4sCiAgICAgYWNjZXNzX2dldF9ieV9pZF9saXN0LAogICAgIGFjY2Vzc19wdXRfYnlf
aWRfdHJhbnNpdGlvbl9ub3JtYWwsCiAgICAgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2Rp
cmVjdCwKQEAgLTYxLDcgKzYwLDYgQEAgaW5saW5lIGJvb2wgaXNHZXRCeUlkQWNjZXNzKEFjY2Vz
c1R5cGUgYQogewogICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgewogICAgIGNhc2UgYWNjZXNzX2dl
dF9ieV9pZF9zZWxmOgotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKICAgICBjYXNl
IGFjY2Vzc19nZXRfYnlfaWRfbGlzdDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVs
dDoKQEAgLTEwNywxNiArMTA1LDYgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAg
ICAgdS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIGJhc2VP
YmplY3RTdHJ1Y3R1cmUpOwogICAgIH0KIAotICAgIHZvaWQgaW5pdEdldEJ5SWRDaGFpbihWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgU3RydWN0
dXJlQ2hhaW4qIGNoYWluLCB1bnNpZ25lZCBjb3VudCwgYm9vbCBpc0RpcmVjdCkKLSAgICB7Ci0g
ICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluOwotCi0gICAgICAgIHUu
Z2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgYmFzZU9iamVj
dFN0cnVjdHVyZSk7Ci0gICAgICAgIHUuZ2V0QnlJZENoYWluLmNoYWluLnNldCh2bSwgb3duZXIs
IGNoYWluKTsKLSAgICAgICAgdS5nZXRCeUlkQ2hhaW4uY291bnQgPSBjb3VudDsKLSAgICAgICAg
dS5nZXRCeUlkQ2hhaW4uaXNEaXJlY3QgPSBpc0RpcmVjdDsKLSAgICB9Ci0KICAgICB2b2lkIGlu
aXRHZXRCeUlkTGlzdChQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0KQogICAgIHsKICAgICAg
ICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19nZXRfYnlfaWRfbGlzdDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNjkw
MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTcxLDIxICsxNzEsMjEgQEAgcHJpdmF0ZToKICAgICBib29sIGhh
bmRsZU1pbk1heChpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9m
ZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICAKICAgICAvLyBIYW5k
bGUgY2FsbHMuIFRoaXMgcmVzb2x2ZXMgaXNzdWVzIHN1cnJvdW5kaW5nIGlubGluaW5nIGFuZCBp
bnRyaW5zaWNzLgorICAgIHZvaWQgaGFuZGxlQ2FsbCgKKyAgICAgICAgaW50IHJlc3VsdCwgTm9k
ZVR5cGUgb3AsIElubGluZUNhbGxGcmFtZTo6S2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXpl
LAorICAgICAgICBOb2RlKiBjYWxsVGFyZ2V0LCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9m
ZnNldCwgQ2FsbExpbmtTdGF0dXMpOwogICAgIHZvaWQgaGFuZGxlQ2FsbChpbnQgcmVzdWx0LCBO
b2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25T
aXplLCBpbnQgY2FsbGVlLCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCk7CiAgICAg
dm9pZCBoYW5kbGVDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQpOwogICAgIHZvaWQgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNvbnN0IENhbGxMaW5r
U3RhdHVzJiwgTm9kZSogY2FsbFRhcmdldCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kKTsKICAgICB2b2lkIGVtaXRBcmd1bWVudFBoYW50b21zKGludCByZWdpc3Rl
ck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kKTsKICAgICAvLyBIYW5kbGUgaW5saW5pbmcuIFJldHVybiB0cnVlIGlmIGl0IHN1Y2Nl
ZWRlZCwgZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCi0gICAgYm9vbCBoYW5kbGVJ
bmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENh
bGxMaW5rU3RhdHVzJiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwor
ICAgIGJvb2wgaGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRP
cGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxs
RnJhbWU6OktpbmQpOwogICAgIC8vIEhhbmRsZSBpbnRyaW5zaWMgZnVuY3Rpb25zLiBSZXR1cm4g
dHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgog
ICAgIGJvb2wgaGFuZGxlSW50cmluc2ljKGludCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMsIGlu
dCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uKTsKICAgICBib29sIGhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1Y3Rv
cihpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNl
dCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSk7CiAgICAg
Ym9vbCBoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24oaW50IHJlc3VsdE9wZXJhbmQsIElu
dGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCk7CiAgICAgTm9kZSogaGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQg
aWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIE5vZGUqIHZhbHVlKTsKICAgICBOb2RlKiBoYW5k
bGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciwgUHJvcGVydHlPZmZzZXQpOwotICAgIHZvaWQgaGFuZGxlR2V0QnlPZmZzZXQo
Ci0gICAgICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBi
YXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLAotICAgICAgICBQcm9wZXJ0eU9mZnNldCk7
CiAgICAgdm9pZCBoYW5kbGVHZXRCeUlkKAogICAgICAgICBpbnQgZGVzdGluYXRpb25PcGVyYW5k
LCBTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwK
ICAgICAgICAgY29uc3QgR2V0QnlJZFN0YXR1cyYpOwpAQCAtODExLDExICs4MTEsMTEgQEAgcHJp
dmF0ZToKICAgICAgICAgbV9udW1QYXNzZWRWYXJBcmdzKys7CiAgICAgfQogICAgIAotICAgIE5v
ZGUqIGFkZENhbGwoaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIGludCBjYWxsZWUsIGludCBhcmdD
b3VudCwgaW50IHJlZ2lzdGVyT2Zmc2V0KQorICAgIE5vZGUqIGFkZENhbGwoaW50IHJlc3VsdCwg
Tm9kZVR5cGUgb3AsIE5vZGUqIGNhbGxlZSwgaW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZz
ZXQpCiAgICAgewogICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGlj
dGlvbigpOwogICAgICAgICAKLSAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KFZpcnR1YWxSZWdp
c3RlcihjYWxsZWUpKSk7CisgICAgICAgIGFkZFZhckFyZ0NoaWxkKGNhbGxlZSk7CiAgICAgICAg
IHNpemVfdCBwYXJhbWV0ZXJTbG90cyA9IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBK
U1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSArIGFyZ0NvdW50OwogICAgICAgICBpZiAocGFy
YW1ldGVyU2xvdHMgPiBtX3BhcmFtZXRlclNsb3RzKQogICAgICAgICAgICAgbV9wYXJhbWV0ZXJT
bG90cyA9IHBhcmFtZXRlclNsb3RzOwpAQCAtMTEyMCw3ICsxMTIwLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZXR1cm5WYWx1ZVZSLAogICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGlubGluZUNhbGxGcmFtZVN0YXJ0LAogICAgICAgICAgICAgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLAotICAgICAgICAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCk7CisgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWU6OktpbmQpOwogICAgICAgICAKICAgICAg
ICAgfklubGluZVN0YWNrRW50cnkoKQogICAgICAgICB7CkBAIC0xMjAzLDI2ICsxMjAzLDM1IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgaW50IHJlc3VsdCwgTm9kZVR5
cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25T
aXplLAogICAgIGludCBjYWxsZWUsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgaW50
IHJlZ2lzdGVyT2Zmc2V0KQogewotICAgIEFTU0VSVChyZWdpc3Rlck9mZnNldCA8PSAwKTsKLSAg
ICAKICAgICBOb2RlKiBjYWxsVGFyZ2V0ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjYWxsZWUpKTsK
ICAgICAKLSAgICBDYWxsTGlua1N0YXR1cyBjYWxsTGlua1N0YXR1czsKLQorICAgIENhbGxMaW5r
U3RhdHVzIGNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAg
ICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgY3VycmVudENvZGVPcmlnaW4o
KSwKKyAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsTGlua0luZm9zLCBtX2NhbGxDb250
ZXh0TWFwKTsKKyAgICAKKyAgICBoYW5kbGVDYWxsKAorICAgICAgICByZXN1bHQsIG9wLCBJbmxp
bmVDYWxsRnJhbWU6OmtpbmRGb3Ioa2luZCksIGluc3RydWN0aW9uU2l6ZSwgY2FsbFRhcmdldCwK
KyAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHJlZ2lzdGVyT2Zmc2V0LCBjYWxs
TGlua1N0YXR1cyk7Cit9CisgICAgCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAor
ICAgIGludCByZXN1bHQsIE5vZGVUeXBlIG9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwg
dW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLAorICAgIE5vZGUqIGNhbGxUYXJnZXQsIGludCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcywgaW50IHJlZ2lzdGVyT2Zmc2V0LAorICAgIENhbGxMaW5r
U3RhdHVzIGNhbGxMaW5rU3RhdHVzKQoreworICAgIEFTU0VSVChyZWdpc3Rlck9mZnNldCA8PSAw
KTsKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCA9IElubGlu
ZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQpOworICAgIAogICAgIGlmICht
X2dyYXBoLmlzQ29uc3RhbnQoY2FsbFRhcmdldCkpIHsKICAgICAgICAgY2FsbExpbmtTdGF0dXMg
PSBDYWxsTGlua1N0YXR1cygKICAgICAgICAgICAgIG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQo
Y2FsbFRhcmdldCkpLnNldElzUHJvdmVkKHRydWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNh
bGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICBt
X2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCksCi0g
ICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxMaW5rSW5mb3MsIG1fY2FsbENvbnRl
eHRNYXApOwogICAgIH0KICAgICAKICAgICBpZiAoIWNhbGxMaW5rU3RhdHVzLmNhbk9wdGltaXpl
KCkpIHsKICAgICAgICAgLy8gT2RkbHksIHRoaXMgY29uZmxhdGVzIGNhbGxzIHRoYXQgaGF2ZW4n
dCBleGVjdXRlZCB3aXRoIGNhbGxzIHRoYXQgYmVoYXZlZCBzdWZmaWNpZW50bHkgcG9seW1vcnBo
aWNhbGx5CiAgICAgICAgIC8vIHRoYXQgd2UgY2Fubm90IG9wdGltaXplIHRoZW0uCiAgICAgICAg
IAotICAgICAgICBhZGRDYWxsKHJlc3VsdCwgb3AsIGNhbGxlZSwgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgYWRkQ2FsbChyZXN1bHQsIG9wLCBj
YWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMTIzMCwyOCArMTIzOSwyOCBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b24gPSBnZXRQcmVkaWN0aW9uKCk7CiAKICAgICBpZiAoSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rp
b24gPSBjYWxsTGlua1N0YXR1cy5pbnRlcm5hbEZ1bmN0aW9uKCkpIHsKLSAgICAgICAgaWYgKGhh
bmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbihyZXN1bHQsIGZ1bmN0aW9uLCByZWdpc3Rlck9m
ZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHByZWRpY3Rpb24sIGtpbmQpKSB7Cisg
ICAgICAgIGlmIChoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24ocmVzdWx0LCBmdW5jdGlv
biwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBwcmVkaWN0aW9u
LCBzcGVjaWFsaXphdGlvbktpbmQpKSB7CiAgICAgICAgICAgICAvLyBUaGlzIHBoYW50b21pbmcg
aGFzIHRvIGJlICphZnRlciogdGhlIGNvZGUgZm9yIHRoZSBpbnRyaW5zaWMsIHRvIHNpZ25pZnkg
dGhhdAogICAgICAgICAgICAgLy8gdGhlIGlucHV0cyBtdXN0IGJlIGtlcHQgYWxpdmUgd2hhdGV2
ZXIgZXhpdHMgdGhlIGludHJpbnNpYyBtYXkgZG8uCiAgICAgICAgICAgICBhZGRUb0dyYXBoKFBo
YW50b20sIGNhbGxUYXJnZXQpOwotICAgICAgICAgICAgZW1pdEFyZ3VtZW50UGhhbnRvbXMocmVn
aXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBraW5kKTsKKyAgICAgICAg
ICAgIGVtaXRBcmd1bWVudFBoYW50b21zKHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcywgc3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gQ2FuIG9ubHkgaGFuZGxlIHRoaXMgdXNpbmcg
dGhlIGdlbmVyaWMgY2FsbCBoYW5kbGVyLgotICAgICAgICBhZGRDYWxsKHJlc3VsdCwgb3AsIGNh
bGxlZSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAg
ICAgYWRkQ2FsbChyZXN1bHQsIG9wLCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAK
LSAgICBJbnRyaW5zaWMgaW50cmluc2ljID0gY2FsbExpbmtTdGF0dXMuaW50cmluc2ljRm9yKGtp
bmQpOworICAgIEludHJpbnNpYyBpbnRyaW5zaWMgPSBjYWxsTGlua1N0YXR1cy5pbnRyaW5zaWNG
b3Ioc3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICBpZiAoaW50cmluc2ljICE9IE5vSW50cmluc2lj
KSB7Ci0gICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1cywgY2FsbFRhcmdl
dCwgcmVnaXN0ZXJPZmZzZXQsIGtpbmQpOworICAgICAgICBlbWl0RnVuY3Rpb25DaGVja3MoY2Fs
bExpbmtTdGF0dXMsIGNhbGxUYXJnZXQsIHJlZ2lzdGVyT2Zmc2V0LCBzcGVjaWFsaXphdGlvbktp
bmQpOwogICAgICAgICAgICAgCiAgICAgICAgIGlmIChoYW5kbGVJbnRyaW5zaWMocmVzdWx0LCBp
bnRyaW5zaWMsIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcHJl
ZGljdGlvbikpIHsKICAgICAgICAgICAgIC8vIFRoaXMgcGhhbnRvbWluZyBoYXMgdG8gYmUgKmFm
dGVyKiB0aGUgY29kZSBmb3IgdGhlIGludHJpbnNpYywgdG8gc2lnbmlmeSB0aGF0CiAgICAgICAg
ICAgICAvLyB0aGUgaW5wdXRzIG11c3QgYmUga2VwdCBhbGl2ZSB3aGF0ZXZlciBleGl0cyB0aGUg
aW50cmluc2ljIG1heSBkby4KICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgY2FsbFRh
cmdldCk7Ci0gICAgICAgICAgICBlbWl0QXJndW1lbnRQaGFudG9tcyhyZWdpc3Rlck9mZnNldCwg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGtpbmQpOworICAgICAgICAgICAgZW1pdEFyZ3Vt
ZW50UGhhbnRvbXMocmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBz
cGVjaWFsaXphdGlvbktpbmQpOwogICAgICAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24o
KSkKICAgICAgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRD
YWxsKCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMjYyLDcgKzEyNzEsNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAot
ICAgIGFkZENhbGwocmVzdWx0LCBvcCwgY2FsbGVlLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgcmVnaXN0ZXJPZmZzZXQpOworICAgIGFkZENhbGwocmVzdWx0LCBvcCwgY2FsbFRhcmdldCwg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHJlZ2lzdGVyT2Zmc2V0KTsKIH0KIAogdm9pZCBC
eXRlQ29kZVBhcnNlcjo6ZW1pdEZ1bmN0aW9uQ2hlY2tzKGNvbnN0IENhbGxMaW5rU3RhdHVzJiBj
YWxsTGlua1N0YXR1cywgTm9kZSogY2FsbFRhcmdldCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCkBAIC0xMjk3LDEwICsxMzA2LDEyIEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmVtaXRBcmd1bWVudFBoYW50b20KICAgICAgICAgYWRkVG9HcmFwaChQaGFu
dG9tLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSwgcmVnaXN0ZXJPZmZzZXQpKSk7
CiB9CiAKLWJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUqIGNhbGxUYXJn
ZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5r
U3RhdHVzLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgdW5zaWduZWQgbmV4dE9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorYm9v
bCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIGlu
dCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsIGlu
dCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25l
ZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCkKIHsKICAgICBzdGF0aWMg
Y29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAgICAgCisgICAgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCBzcGVjaWFsaXphdGlvbktpbmQgPSBJbmxpbmVDYWxsRnJhbWU6OnNwZWNpYWxpemF0aW9u
S2luZEZvcihraW5kKTsKKyAgICAKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygi
Q29uc2lkZXJpbmcgaW5saW5pbmcgIiwgY2FsbExpbmtTdGF0dXMsICIgaW50byAiLCBjdXJyZW50
Q29kZU9yaWdpbigpLCAiXG4iKTsKICAgICAKQEAgLTEzMzMsMTQgKzEzNDQsMTQgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIC8vIGlmIHdlIGhhZCBhIHN0
YXRpYyBwcm9vZiBvZiB3aGF0IHdhcyBiZWluZyBjYWxsZWQ7IHRoaXMgbWlnaHQgaGFwcGVuIGZv
ciBleGFtcGxlIGlmIHlvdSBjYWxsIGEKICAgICAvLyBnbG9iYWwgZnVuY3Rpb24sIHdoZXJlIHdh
dGNocG9pbnRpbmcgZ2l2ZXMgdXMgc3RhdGljIGluZm9ybWF0aW9uLiBPdmVyYWxsLCBpdCdzIGEg
cmFyZSBjYXNlCiAgICAgLy8gYmVjYXVzZSB3ZSBleHBlY3QgdGhhdCBhbnkgaG90IGNhbGxlZXMg
d291bGQgaGF2ZSBhbHJlYWR5IGJlZW4gY29tcGlsZWQuCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBleGVjdXRhYmxlLT5iYXNlbGluZUNvZGVCbG9ja0ZvcihraW5kKTsKKyAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGV4ZWN1dGFibGUtPmJhc2VsaW5lQ29kZUJsb2NrRm9yKHNwZWNpYWxp
emF0aW9uS2luZCk7CiAgICAgaWYgKCFjb2RlQmxvY2spIHsKICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRmFpbGluZyBiZWNhdXNlIG5vIGNvZGUgYmxvY2sg
YXZhaWxhYmxlLlxuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgQ2FwYWJp
bGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbCA9IGlubGluZUZ1bmN0aW9uRm9yQ2FwYWJpbGl0eUxl
dmVsKAotICAgICAgICBjb2RlQmxvY2ssIGtpbmQsIGNhbGxMaW5rU3RhdHVzLmlzQ2xvc3VyZUNh
bGwoKSk7CisgICAgICAgIGNvZGVCbG9jaywgc3BlY2lhbGl6YXRpb25LaW5kLCBjYWxsTGlua1N0
YXR1cy5pc0Nsb3N1cmVDYWxsKCkpOwogICAgIGlmICghY2FuSW5saW5lKGNhcGFiaWxpdHlMZXZl
bCkpIHsKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRmFp
bGluZyBiZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyBub3QgaW5saW5lYWJsZS5cbiIpOwpAQCAtMTM5
Miw3ICsxNDAzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQog
ICAgIC8vIE5vdyB3ZSBrbm93IHdpdGhvdXQgYSBkb3VidCB0aGF0IHdlIGFyZSBjb21taXR0ZWQg
dG8gaW5saW5pbmcuIFNvIGJlZ2luIHRoZSBwcm9jZXNzCiAgICAgLy8gYnkgY2hlY2tpbmcgdGhl
IGNhbGxlZSAoaWYgbmVjZXNzYXJ5KSBhbmQgbWFraW5nIHN1cmUgdGhhdCBhcmd1bWVudHMgYW5k
IHRoZSBjYWxsZWUKICAgICAvLyBhcmUgZmx1c2hlZC4KLSAgICBlbWl0RnVuY3Rpb25DaGVja3Mo
Y2FsbExpbmtTdGF0dXMsIGNhbGxUYXJnZXROb2RlLCByZWdpc3Rlck9mZnNldCwga2luZCk7Cisg
ICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzLCBjYWxsVGFyZ2V0Tm9kZSwgcmVn
aXN0ZXJPZmZzZXQsIHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgCiAgICAgLy8gRklYTUU6IERv
bid0IGZsdXNoIGNvbnN0YW50cyEKICAgICAKQEAgLTE4NjcsMTMgKzE4NzgsNiBAQCBOb2RlKiBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoCiAgICAgcmV0dXJuIGdldEJ5T2Zmc2V0
OwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCgKLSAgICBpbnQg
ZGVzdGluYXRpb25PcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNl
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLAotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkK
LXsKLSAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uT3BlcmFuZCksIGhhbmRsZUdl
dEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIG9mZnNldCkpOwot
fQotCiBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwg
dW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlKiB2YWx1ZSkK
IHsKICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CkBAIC0xOTEwLDE4ICsxOTE0LDE5IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgaW50IGRlc3RpbmF0aW9uT3Bl
cmFuZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwKICAgICBjb25zdCBHZXRCeUlkU3RhdHVzJiBnZXRCeUlkU3RhdHVzKQog
eworICAgIE5vZGVUeXBlIGdldEJ5SWQgPSBnZXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKSA/IEdl
dEJ5SWRGbHVzaCA6IEdldEJ5SWQ7CisgICAgCiAgICAgaWYgKCFnZXRCeUlkU3RhdHVzLmlzU2lt
cGxlKCkgfHwgIU9wdGlvbnM6OmVuYWJsZUFjY2Vzc0lubGluaW5nKCkpIHsKICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLAotICAgICAgICAgICAgYWRkVG9H
cmFwaCgKLSAgICAgICAgICAgICAgICBnZXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKSA/IEdldEJ5
SWRGbHVzaCA6IEdldEJ5SWQsCi0gICAgICAgICAgICAgICAgT3BJbmZvKGlkZW50aWZpZXJOdW1i
ZXIpLCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2UpKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgo
Z2V0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8ocHJlZGljdGlvbiksIGJh
c2UpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAoZ2V0QnlJZFN0YXR1
cy5udW1WYXJpYW50cygpID4gMSkgewotICAgICAgICBpZiAoIWlzRlRMKG1fZ3JhcGgubV9wbGFu
Lm1vZGUpIHx8ICFPcHRpb25zOjplbmFibGVQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nKCkpIHsK
KyAgICAgICAgaWYgKGdldEJ5SWRTdGF0dXMubWFrZXNDYWxscygpIHx8ICFpc0ZUTChtX2dyYXBo
Lm1fcGxhbi5tb2RlKQorICAgICAgICAgICAgfHwgIU9wdGlvbnM6OmVuYWJsZVBvbHltb3JwaGlj
QWNjZXNzSW5saW5pbmcoKSkgewogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0
aW5hdGlvbk9wZXJhbmQpLAotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoR2V0QnlJZCwgT3BJ
bmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2UpKTsKKyAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKGdldEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwg
T3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgCkBAIC0xOTcyLDE1ICsxOTc3LDUxIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUdldEJ5SWQoCiAgICAgaWYgKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpIHx8IG9yaWdp
bmFsQmFzZUZvckJhc2VsaW5lSklUICE9IGJhc2UpCiAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRv
bSwgb3JpZ2luYWxCYXNlRm9yQmFzZWxpbmVKSVQpOwogICAgIAotICAgIGlmICh2YXJpYW50LnNw
ZWNpZmljVmFsdWUoKSkgewotICAgICAgICBBU1NFUlQodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCku
aXNDZWxsKCkpOwotICAgICAgICAKLSAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5h
dGlvbk9wZXJhbmQpLCBjZWxsQ29uc3RhbnQodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkuYXNDZWxs
KCkpKTsKKyAgICBOb2RlKiBsb2FkZWRWYWx1ZTsKKyAgICBpZiAodmFyaWFudC5zcGVjaWZpY1Zh
bHVlKCkpCisgICAgICAgIGxvYWRlZFZhbHVlID0gY2VsbENvbnN0YW50KHZhcmlhbnQuc3BlY2lm
aWNWYWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICBlbHNlCisgICAgICAgIGxvYWRlZFZhbHVlID0gaGFu
ZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFu
dC5vZmZzZXQoKSk7CisgICAgCisgICAgaWYgKCF2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkpIHsK
KyAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLCBsb2FkZWRW
YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaGFuZGxlR2V0QnlPZmZz
ZXQoCi0gICAgICAgIGRlc3RpbmF0aW9uT3BlcmFuZCwgcHJlZGljdGlvbiwgYmFzZSwgaWRlbnRp
Zmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CisgICAgLy8gTWFrZSBhIGNhbGwuIFdlIGRv
bid0IHRyeSB0byBnZXQgZmFuY3kgd2l0aCB1c2luZyB0aGUgc21hbGxlc3Qgb3BlcmFuZCBudW1i
ZXIgYmVjYXVzZQorICAgIC8vIHRoZSBzdGFjayBsYXlvdXQgcGhhc2Ugc2hvdWxkIGNvbXByZXNz
IHRoZSBzdGFjayBhbnl3YXkuCisgICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0ZXJz
ID0gMDsKKyAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsgLy8gVGhlICd0aGlzJyBhcmd1bWVudC4K
KyAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsgLy8gVHJ1ZSByZXR1cm4gUEMuCisgICAgCisgICAg
Ly8gU3RhcnQgd2l0aCBhIHJlZ2lzdGVyIG9mZnNldCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBs
YXN0IGluLXVzZSByZWdpc3Rlci4KKyAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSB2aXJ0dWFsUmVn
aXN0ZXJGb3JMb2NhbCgKKyAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2Nr
LT5tX251bUNhbGxlZVJlZ2lzdGVycyAtIDEpLm9mZnNldCgpOworICAgIHJlZ2lzdGVyT2Zmc2V0
IC09IG51bWJlck9mUGFyYW1ldGVyczsKKyAgICByZWdpc3Rlck9mZnNldCAtPSBKU1N0YWNrOjpD
YWxsRnJhbWVIZWFkZXJTaXplOworICAgIAorICAgIC8vIEdldCB0aGUgYWxpZ25tZW50IHJpZ2h0
LgorICAgIHJlZ2lzdGVyT2Zmc2V0ID0gLVdURjo6cm91bmRVcFRvTXVsdGlwbGVPZigKKyAgICAg
ICAgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwKKyAgICAgICAgLXJlZ2lzdGVyT2Zmc2V0KTsK
KyAgICAKKyAgICBlbnN1cmVMb2NhbHMoCisgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFw
T3BlcmFuZCgKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLnRv
TG9jYWwoKSk7CisgICAgCisgICAgLy8gSXNzdWUgU2V0TG9jYWxzLiBUaGlzIGhhcyB0d28gZWZm
ZWN0czoKKyAgICAvLyAxKSBUaGF0J3MgaG93IGhhbmRsZUNhbGwoKSBzZWVzIHRoZSBhcmd1bWVu
dHMuCisgICAgLy8gMikgSWYgd2UgaW5saW5lIHRoZW4gdGhpcyBlbnN1cmVzIHRoYXQgdGhlIGFy
Z3VtZW50cyBhcmUgZmx1c2hlZCBzbyB0aGF0IGlmIHlvdSB1c2UKKyAgICAvLyAgICB0aGUgZHJl
YWRlZCBhcmd1bWVudHMgb2JqZWN0IG9uIHRoZSBnZXR0ZXIsIHRoZSByaWdodCB0aGluZ3MgaGFw
cGVuLiBXZWxsLCBzb3J0IG9mIC0KKyAgICAvLyAgICBzaW5jZSB3ZSBvbmx5IHJlYWxseSBjYXJl
IGFib3V0ICd0aGlzJyBpbiB0aGlzIGNhc2UuIEJ1dCB3ZSdyZSBub3QgZ29pbmcgdG8gdGFrZSB0
aGF0CisgICAgLy8gICAgc2hvcnRjdXQuCisgICAgaW50IG5leHRSZWdpc3RlciA9IHJlZ2lzdGVy
T2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKG5leHRSZWdpc3RlcisrKSwgYmFzZSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgIAor
ICAgIGhhbmRsZUNhbGwoCisgICAgICAgIGRlc3RpbmF0aW9uT3BlcmFuZCwgQ2FsbCwgSW5saW5l
Q2FsbEZyYW1lOjpHZXR0ZXJDYWxsLCBPUENPREVfTEVOR1RIKG9wX2dldF9ieV9pZCksCisgICAg
ICAgIGxvYWRlZFZhbHVlLCBudW1iZXJPZlBhcmFtZXRlcnMgLSAxLCByZWdpc3Rlck9mZnNldCwg
KnZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSk7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVt
aXRQdXRCeUlkKApAQCAtMzM3Niw3ICszNDE3LDcgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0
YWNrRW50cnk6OklubGluZQogICAgIFZpcnR1YWxSZWdpc3RlciByZXR1cm5WYWx1ZVZSLAogICAg
IFZpcnR1YWxSZWdpc3RlciBpbmxpbmVDYWxsRnJhbWVTdGFydCwKICAgICBpbnQgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsCi0gICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAg
IElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kKQogICAgIDogbV9ieXRlQ29kZVBhcnNlcihieXRl
Q29kZVBhcnNlcikKICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAsIG1fcHJvZmls
ZWRCbG9jayhwcm9maWxlZEJsb2NrKQpAQCAtMzQzNSw3ICszNDc2LDcgQEAgQnl0ZUNvZGVQYXJz
ZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJh
bWUtPmlzQ2xvc3VyZUNhbGwgPSB0cnVlOwogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+Y2Fs
bGVyID0gYnl0ZUNvZGVQYXJzZXItPmN1cnJlbnRDb2RlT3JpZ2luKCk7CiAgICAgICAgIG1faW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMucmVzaXplKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KTsgLy8gU2V0IHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGluY2x1ZGluZyB0aGlzLCBidXQgZG9u
J3QgY29uZmlndXJlIHRoZSB2YWx1ZSByZWNvdmVyaWVzLCB5ZXQuCi0gICAgICAgIG1faW5saW5l
Q2FsbEZyYW1lLT5raW5kID0gSW5saW5lQ2FsbEZyYW1lOjpraW5kRm9yKGtpbmQpOworICAgICAg
ICBtX2lubGluZUNhbGxGcmFtZS0+a2luZCA9IGtpbmQ7CiAgICAgICAgIAogICAgICAgICBpZiAo
bV9pbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICBt
X2lubGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJzID0gbV9pbmxpbmVDYWxsRnJhbWUtPmNhbGxl
ci5pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFyczsKQEAgLTM2NzQsNyArMzcxNSw3IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICAKICAgICBJbmxpbmVTdGFja0VudHJ5IGlu
bGluZVN0YWNrRW50cnkoCiAgICAgICAgIHRoaXMsIG1fY29kZUJsb2NrLCBtX3Byb2ZpbGVkQmxv
Y2ssIDAsIDAsIFZpcnR1YWxSZWdpc3RlcigpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwKLSAgICAgICAg
bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgQ29kZUZvckNhbGwpOworICAgICAgICBtX2Nv
ZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBJbmxpbmVDYWxsRnJhbWU6OkNhbGwpOwogICAgIAog
ICAgIHBhcnNlQ29kZUJsb2NrKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE3LDcg
KzQxNyw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmtGdW5jdGlvbigpCiAgICAgbV9qaXRDb2Rl
LT5zaHJpbmtUb0ZpdCgpOwogICAgIGNvZGVCbG9jaygpLT5zaHJpbmtUb0ZpdChDb2RlQmxvY2s6
OkxhdGVTaHJpbmspOwogICAgIAotICAgIGxpbmtCdWZmZXItPmxpbmsobV9jYWxsQXJpdHlGaXh1
cCwgRnVuY3Rpb25QdHIoKG1fdm0tPmdldENUSVN0dWIoYXJpdHlGaXh1cCkpLmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpKSk7CisgICAgbGlua0J1ZmZlci0+bGluayhtX2NhbGxBcml0eUZpeHVw
LCBGdW5jdGlvblB0cigobV92bS0+Z2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKSkuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICAKICAgICBkaXNhc3NlbWJsZSgqbGlua0J1
ZmZlcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA4LDEyICsxMDgsNDQgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKEND
YWxsSGVscGVycwogICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pOwogICAgICAgICBD
b2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJs
b2NrRm9yKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKTsKKyAgICAgICAgdm9pZCoganVtcFRhcmdl
dDsKKyAgICAgICAgdm9pZCogdHJ1ZVJldHVyblBDID0gbnVsbHB0cjsKKyAgICAgICAgCiAgICAg
ICAgIHVuc2lnbmVkIGNhbGxCeXRlY29kZUluZGV4ID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIu
Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPQotICAg
ICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5mb0ZvckJ5
dGVjb2RlSW5kZXgoY2FsbEJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsTGlua0luZm8pOwogICAgICAgICAKLSAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IGNhbGxM
aW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAg
IHN3aXRjaCAoaW5saW5lQ2FsbEZyYW1lLT5raW5kKSB7CisgICAgICAgIGNhc2UgSW5saW5lQ2Fs
bEZyYW1lOjpDYWxsOgorICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0OiB7
CisgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9CisgICAgICAgICAgICAg
ICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2Rl
SW5kZXgoY2FsbEJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2Fs
bExpbmtJbmZvKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAganVtcFRhcmdldCA9IGNhbGxM
aW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgSW5saW5l
Q2FsbEZyYW1lOjpHZXR0ZXJDYWxsOgorICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6U2V0
dGVyQ2FsbDogeworICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0KKyAg
ICAgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+ZmluZFN0dWJJbmZvKENv
ZGVPcmlnaW4oY2FsbEJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHN0dWJJbmZvKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChpbmxpbmVDYWxs
RnJhbWUtPmtpbmQpIHsKKyAgICAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpHZXR0ZXJD
YWxsOgorICAgICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBqaXQudm0oKS0+Z2V0Q1RJU3R1Yihi
YXNlbGluZUdldHRlclJldHVyblRodW5rR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW5saW5lQ2Fs
bEZyYW1lOjpTZXR0ZXJDYWxsOgorICAgICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBqaXQudm0o
KS0+Z2V0Q1RJU3R1YihiYXNlbGluZVNldHRlclJldHVyblRodW5rR2VuZXJhdG9yKS5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgdHJ1ZVJldHVyblBDID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJl
bEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0Rv
bmUpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSB9
CiAKICAgICAgICAgR1BSUmVnIGNhbGxlckZyYW1lR1BSOwogICAgICAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lKSB7CkBAIC0xMjIsMTIgKzE1NCwxNSBAQCB2
b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgY2FsbGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcjsK
ICAgICAgICAgCisgICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoanVtcFRhcmdldCksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQo
aW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpKSk7CisgICAgICAgIGlmICh0cnVlUmV0
dXJuUEMpCisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHRydWVSZXR1cm5QQyksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZz
ZXQoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkub2Zmc2V0KCkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBqaXQuc3Rv
cmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrKSwg
QXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDb2RlQmxvY2spKSk7CiAgICAgICAgIGlmICgh
aW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQogICAgICAgICAgICAgaml0LnN0b3JlNjQo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoaW5s
aW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpLT5zY29wZSgpKSkpLCBBc3NlbWJseUhlbHBl
cnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKSk7CiAgICAgICAgIGppdC5zdG9yZTY0KGNhbGxl
ckZyYW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNh
bGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwotICAgICAgICBqaXQuc3RvcmVQdHIoQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBBc3NlbWJseUhlbHBlcnM6
OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSkp
OwogICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsRnJhbWU6OkxvY2F0aW9uOjpl
bmNvZGVBc0J5dGVjb2RlT2Zmc2V0KGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgICAg
IGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyks
IEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwogICAgICAgICBqaXQu
c3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50cy5zaXplKCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdp
c3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291
bnQpKSk7CkBAIC0xNDMsNyArMTc4LDYgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKEND
YWxsSGVscGVycwogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkK
ICAgICAgICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpLT5zY29wZSgpKSwgQXNzZW1ibHlIZWxw
ZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgKyBKU1N0YWNrOjpTY29wZUNoYWluKSkpOwogICAgICAgICBqaXQuc3RvcmVQdHIoY2Fs
bGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5l
Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNldCgpKSk7Ci0gICAgICAgIGppdC5zdG9yZVB0cihB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgp
KSk7CiAgICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGJhc2VsaW5lQ29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4OwogICAg
ICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVB
c0J5dGVjb2RlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pOwogICAgICAgICBqaXQuc3RvcmUzMihB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBl
cnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQg
bGluayhTdGF0ZSYgc3RhdGUpCiAKICAgICAgICAgbGlua0J1ZmZlciA9IGFkb3B0UHRyKG5ldyBM
aW5rQnVmZmVyKHZtLCAmaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQp
KTsKICAgICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlDaGVjaywgY29kZUJsb2NrLT5t
X2lzQ29uc3RydWN0b3IgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9u
Q2FsbEFyaXR5Q2hlY2spOwotICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxBcml0eUZpeHVw
LCBGdW5jdGlvblB0cigodm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwKSkuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKKyAgICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1cCwg
RnVuY3Rpb25QdHIoKHZtLmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikpLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsobWFpblBhdGhK
dW1wcywgQ29kZUxvY2F0aW9uTGFiZWwoYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0ZS5nZW5lcmF0
ZWRGdW5jdGlvbikpKTsKIAogICAgICAgICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFsaXplQWRkcmVz
c0ZvckNhbGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGUu
Z2VuZXJhdGVkRnVuY3Rpb24pKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fj
Y2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAxNjkwMTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0FjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5l
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDYgQEAgcHVibGljOgogICAgIAogICAgIHZp
cnR1YWwgYm9vbCB2aXNpdFdlYWsoUmVwYXRjaEJ1ZmZlciYpIG92ZXJyaWRlOwogICAgIAotcHJp
dmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mbzsK
IH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE2OTAxNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTcwLDcgKzU3MCw3IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkK
ICNlbmRpZgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bS0+YXJpdHlDaGVja0ZhaWxS
ZXR1cm5UaHVua3MtPnJldHVyblBDc0ZvcigqbV92bSwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSkpLCB0aHVua1JlZyk7CiAgICAgICAgIGxvYWRQdHIoQmFzZUluZGV4KHRodW5rUmVnLCBy
ZWdUMCwgdGltZXNQdHIoKSksIHRodW5rUmVnKTsKLSAgICAgICAgZW1pdE5ha2VkQ2FsbChtX3Zt
LT5nZXRDVElTdHViKGFyaXR5Rml4dXApLmNvZGUoKSk7CisgICAgICAgIGVtaXROYWtlZENhbGwo
bV92bS0+Z2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKS5jb2RlKCkpOwogCiAjaWYgIUFT
U0VSVF9ESVNBQkxFRAogICAgICAgICBtX2J5dGVjb2RlT2Zmc2V0ID0gKHVuc2lnbmVkKS0xOyAv
LyBSZXNldCB0aGlzLCBpbiBvcmRlciB0byBndWFyZCBpdHMgdXNlIHdpdGggQVNTRVJUcy4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJl
dmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0
b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMwLDcgKzQzMCw3IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBuYXRpdmVDb25zdHJ1Y3RHZW4KICAgICByZXR1cm4gbmF0aXZlRm9yR2VuZXJhdG9y
KHZtLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFyaXR5
Rml4dXAoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFyaXR5Rml4dXBHZW5lcmF0b3Io
Vk0qIHZtKQogewogICAgIEpTSW50ZXJmYWNlSklUIGppdCh2bSk7CiAKQEAgLTUzMyw2ICs1MzMs
ODMgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFyaXR5Rml4dXAoVk0qIHZtKQogICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoImZpeHVwIGFyaXR5IikpOwogfQogCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgYmFzZWxpbmVHZXR0ZXJSZXR1cm5UaHVua0dlbmVyYXRvcihWTSog
dm0pCit7CisgICAgSlNJbnRlcmZhY2VKSVQgaml0KHZtKTsKKyAgICAKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgIGppdC5zZXR1cFJlc3VsdHMoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1Qw
KTsKKyNlbHNlCisgICAgaml0LnNldHVwUmVzdWx0cyhHUFJJbmZvOjpyZWdUMCk7CisjZW5kaWYK
KyAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZlBhcmFtZXRlcnMgPSAwOworICAgIG51bWJlck9m
UGFyYW1ldGVycysrOyAvLyBUaGUgJ3RoaXMnIGFyZ3VtZW50LgorICAgIG51bWJlck9mUGFyYW1l
dGVycysrOyAvLyBUaGUgdHJ1ZSByZXR1cm4gUEMuCisgICAgCisgICAgdW5zaWduZWQgbnVtYmVy
T2ZSZWdzRm9yQ2FsbCA9CisgICAgICAgIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBu
dW1iZXJPZlBhcmFtZXRlcnM7CisgICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZCeXRlc0ZvckNh
bGwgPQorICAgICAgICBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKTsKKyAgICAKKyAgICB1bnNpZ25lZCBhbGlnbmVkTnVtYmVy
T2ZCeXRlc0ZvckNhbGwgPQorICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tB
bGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7CisgICAgICAgICAgICAKKyAg
ICAvLyBUaGUgcmVhbCByZXR1cm4gYWRkcmVzcyBpcyBzdG9yZWQgYWJvdmUgdGhlIGFyZ3VtZW50
cy4gV2UgcGFzc2VkIG9uZSBhcmd1bWVudCwgd2hpY2ggaXMKKyAgICAvLyAndGhpcycuIFNvIGFy
Z3VtZW50IGF0IGluZGV4IDEgaXMgdGhlIHJldHVybiBhZGRyZXNzLgorICAgIGppdC5sb2FkUHRy
KAorICAgICAgICBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBBc3NlbWJs
eUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLAorICAgICAgICAgICAgKHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KDEpLm9mZnNldCgpIC0gSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1Np
emUpICogc2l6ZW9mKFJlZ2lzdGVyKSksCisgICAgICAgIEdQUkluZm86OnJlZ1QyKTsKKyAgICAK
KyAgICBqaXQuYWRkUHRyKAorICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihh
bGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAorICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAKKyAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMik7
CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lE
KTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJiYXNlbGluZSBnZXR0
ZXIgcmV0dXJuIHRodW5rIikpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYmFzZWxpbmVT
ZXR0ZXJSZXR1cm5UaHVua0dlbmVyYXRvcihWTSogdm0pCit7CisgICAgSlNJbnRlcmZhY2VKSVQg
aml0KHZtKTsKKyAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZlBhcmFtZXRlcnMgPSAwOworICAg
IG51bWJlck9mUGFyYW1ldGVycysrOyAvLyBUaGUgJ3RoaXMnIGFyZ3VtZW50LgorICAgIG51bWJl
ck9mUGFyYW1ldGVycysrOyAvLyBUaGUgdmFsdWUgdG8gc2V0LgorICAgIG51bWJlck9mUGFyYW1l
dGVycysrOyAvLyBUaGUgdHJ1ZSByZXR1cm4gUEMuCisgICAgCisgICAgdW5zaWduZWQgbnVtYmVy
T2ZSZWdzRm9yQ2FsbCA9CisgICAgICAgIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBu
dW1iZXJPZlBhcmFtZXRlcnM7CisgICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZCeXRlc0ZvckNh
bGwgPQorICAgICAgICBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKTsKKyAgICAKKyAgICB1bnNpZ25lZCBhbGlnbmVkTnVtYmVy
T2ZCeXRlc0ZvckNhbGwgPQorICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tB
bGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7CisgICAgICAgICAgICAKKyAg
ICAvLyBUaGUgcmVhbCByZXR1cm4gYWRkcmVzcyBpcyBzdG9yZWQgYWJvdmUgdGhlIGFyZ3VtZW50
cy4gV2UgcGFzc2VkIHR3byBhcmd1bWVudHMsIHNvCisgICAgLy8gdGhlIGFyZ3VtZW50IGF0IGlu
ZGV4IDIgaXMgdGhlIHJldHVybiBhZGRyZXNzLgorICAgIGppdC5sb2FkUHRyKAorICAgICAgICBB
c3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyLAorICAgICAgICAgICAgKHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KDIpLm9mZnNldCgpIC0gSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUpICogc2l6ZW9m
KFJlZ2lzdGVyKSksCisgICAgICAgIEdQUkluZm86OnJlZ1QyKTsKKyAgICAKKyAgICBqaXQuYWRk
UHRyKAorICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVy
T2ZCeXRlc0ZvckNhbGwpLAorICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICAKKyAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMik7CisKKyAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJiYXNlbGluZSBzZXR0ZXIgcmV0dXJuIHRo
dW5rIikpOworfQorCiBzdGF0aWMgdm9pZCBzdHJpbmdDaGFyTG9hZChTcGVjaWFsaXplZFRodW5r
SklUJiBqaXQsIFZNKiB2bSkKIHsKICAgICAvLyBsb2FkIHN0cmluZwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lvbiAxNjkwMTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTMsNyArMTEzLDEwIEBAIGlubGluZSBUaHVua0dlbmVyYXRvciB2aXJ0dWFsVGh1
bmtHZW5lcmEKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDYWxsR2VuZXJhdG9yKFZNKik7
CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7CiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlVGFpbENhbGxHZW5lcmF0b3IoVk0qKTsKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVwKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
YXJpdHlGaXh1cEdlbmVyYXRvcihWTSopOworCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYmFzZWxp
bmVHZXR0ZXJSZXR1cm5UaHVua0dlbmVyYXRvcihWTSogdm0pOworTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGJhc2VsaW5lU2V0dGVyUmV0dXJuVGh1bmtHZW5lcmF0b3IoVk0qIHZtKTsKIAogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihWTSopOwogTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGNoYXJBdFRodW5rR2VuZXJhdG9yKFZNKik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9u
IDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw3ICsxNzAsNyBAQCBzdGF0aWMgQ29tbW9uU2xv
d1BhdGhzOjpBcml0eUNoZWNrRGF0YSogCiAgICAgcmVzdWx0LT5wYWRkZWRTdGFja1NwYWNlID0g
c2xvdHNUb0FkZDsKICNpZiBFTkFCTEUoSklUKQogICAgIGlmICh2bS5jYW5Vc2VKSVQoKSkgewot
ICAgICAgICByZXN1bHQtPnRodW5rVG9DYWxsID0gdm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwKS5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgcmVzdWx0LT50aHVua1RvQ2FsbCA9
IHZtLmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CiAgICAgICAgIHJlc3VsdC0+cmV0dXJuUEMgPSB2bS5hcml0eUNoZWNrRmFpbFJldHVy
blRodW5rcy0+cmV0dXJuUENGb3Iodm0sIHNsb3RzVG9BZGQgKiBzdGFja0FsaWdubWVudFJlZ2lz
dGVycygpKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0gZWxzZQogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231713</attachid>
            <date>2014-05-19 12:58:20 -0700</date>
            <delta_ts>2014-05-19 19:13:44 -0700</delta_ts>
            <desc>&quot;getting&quot; there</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>74578</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUyLDExICszNTIsNiBAQCB2b2lkIENvZGVCbG9j
azo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAgICAgb3V0LnByaW50Zigi
c2VsZiIpOwogICAgICAgICAgICAgICAgIGJhc2VTdHJ1Y3R1cmUgPSBzdHViSW5mby51LmdldEJ5
SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW46Ci0gICAgICAgICAgICAg
ICAgb3V0LnByaW50ZigiY2hhaW4iKTsKLSAgICAgICAgICAgICAgICBiYXNlU3RydWN0dXJlID0g
c3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKLSAgICAg
ICAgICAgICAgICBjaGFpbiA9IHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lk
X2xpc3Q6CiAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigibGlzdCIpOwogICAgICAgICAgICAg
ICAgIGxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7CkBAIC0yMzQ0LDYgKzIzMzks
MTUgQEAgU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6YWRkU3R1YkluZgogICAgIHJldHVy
biBtX3N0dWJJbmZvcy5hZGQoKTsKIH0KIAorU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6
ZmluZFN0dWJJbmZvKENvZGVPcmlnaW4gY29kZU9yaWdpbikKK3sKKyAgICBmb3IgKFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA6IG1fc3R1YkluZm9zKSB7CisgICAgICAgIGlmIChzdHViSW5m
by0+Y29kZU9yaWdpbiA9PSBjb2RlT3JpZ2luKQorICAgICAgICAgICAgcmV0dXJuIHN0dWJJbmZv
OworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogQ2FsbExpbmtJbmZvKiBDb2RlQmxv
Y2s6OmFkZENhbGxMaW5rSW5mbygpCiB7CiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
bV9sb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDYgKzIwMSwxMCBAQCBwdWJsaWM6CiAg
ICAgU3RydWN0dXJlU3R1YkluZm8qIGFkZFN0dWJJbmZvKCk7CiAgICAgQmFnPFN0cnVjdHVyZVN0
dWJJbmZvPjo6aXRlcmF0b3Igc3R1YkluZm9CZWdpbigpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmJl
Z2luKCk7IH0KICAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBzdHViSW5mb0Vu
ZCgpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmVuZCgpOyB9CisgICAgCisgICAgLy8gTyhuKSBvcGVy
YXRpb24uIFVzZSBnZXRTdHViSW5mb01hcCgpIHVubGVzcyB5b3UgcmVhbGx5IG9ubHkgaW50ZW5k
IHRvIGdldCBvbmUKKyAgICAvLyBzdHViIGluZm8uCisgICAgU3RydWN0dXJlU3R1YkluZm8qIGZp
bmRTdHViSW5mbyhDb2RlT3JpZ2luKTsKIAogICAgIHZvaWQgcmVzZXRTdHViKFN0cnVjdHVyZVN0
dWJJbmZvJik7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZU9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw2ICsyMDYs
MTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQwogICAgIGNhc2Ug
SlNDOjpJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKICAgICAgICAgb3V0LnByaW50KCJDb25z
dHJ1Y3QiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6
OkdldHRlckNhbGw6CisgICAgICAgIG91dC5wcmludCgiR2V0dGVyQ2FsbCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBKU0M6OklubGluZUNhbGxGcmFtZTo6U2V0dGVyQ2FsbDoKKyAgICAg
ICAgb3V0LnByaW50KCJTZXR0ZXJDYWxsIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAt
MTIxLDYgKzEyMSwxMSBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICBlbnVtIEtpbmQg
ewogICAgICAgICBDYWxsLAogICAgICAgICBDb25zdHJ1Y3QsCisgICAgICAgIAorICAgICAgICAv
LyBGb3IgdGhlc2UsIHRoZSBzdGFja09mZnNldCBpbmNvcnBvcmF0ZXMgdGhlIGFyZ3VtZW50IGNv
dW50IHBsdXMgdGhlIHRydWUgcmV0dXJuIFBDCisgICAgICAgIC8vIHNsb3QuCisgICAgICAgIEdl
dHRlckNhbGwsCisgICAgICAgIFNldHRlckNhbGwKICAgICB9OwogICAgIAogICAgIHN0YXRpYyBL
aW5kIGtpbmRGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQpAQCAtMTM5LDYgKzE0NCw4
IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5k
KSB7CiAgICAgICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgY2FzZSBHZXR0ZXJDYWxsOgorICAgICAg
ICBjYXNlIFNldHRlckNhbGw6CiAgICAgICAgICAgICByZXR1cm4gQ29kZUZvckNhbGw7CiAgICAg
ICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICAgICAgcmV0dXJuIENvZGVGb3JDb25zdHJ1Y3Q7
CkBAIC0xNTMsNyArMTYwLDcgQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgQ29kZU9y
aWdpbiBjYWxsZXI7CiAgICAgQml0VmVjdG9yIGNhcHR1cmVkVmFyczsgLy8gSW5kZXhlZCBieSB0
aGUgbWFjaGluZSBjYWxsIGZyYW1lJ3MgdmFyaWFibGUgbnVtYmVyaW5nLgogICAgIHNpZ25lZCBz
dGFja09mZnNldCA6IDMwOwotICAgIEtpbmQga2luZCA6IDE7CisgICAgS2luZCBraW5kIDogMjsK
ICAgICBib29sIGlzQ2xvc3VyZUNhbGwgOiAxOyAvLyBJZiBmYWxzZSB0aGVuIHdlIGtub3cgdGhh
dCBjYWxsZWUvc2NvcGUgYXJlIGNvbnN0YW50cyBhbmQgdGhlIERGRyB3b24ndCB0cmVhdCB0aGVt
IGFzIHZhcmlhYmxlcywgaS5lLiB0aGV5IGhhdmUgdG8gYmUgcmVjb3ZlcmVkIG1hbnVhbGx5Lgog
ICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNSZWdpc3RlcjsgLy8gVGhpcyBpcyBvbmx5IHNl
dCBpZiB0aGUgY29kZSB1c2VzIGFyZ3VtZW50cy4gVGhlIHVubW9kaWZpZWQgYXJndW1lbnRzIHJl
Z2lzdGVyIGZvbGxvd3MgdGhlIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcigpIGNvbnZlbnRp
b24gKHNlZSBDb2RlQmxvY2suaCkuCiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJH
ZXRCeUlkU3RhdHVzLmgiCiAKKyNpbmNsdWRlICJBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5o
IgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNs
dWRlICJKU1Njb3BlLmgiCkBAIC04OSw1NyArOTAsNiBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRT
dGF0dXM6OmNvbXB1dGVGcm9tCiAjZW5kaWYKIH0KIAotYm9vbCBHZXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yQ2hhaW4oQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJpbmdJbXBsKiB1aWQsIFBh
c3NSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gcGFzc2VkQ2hhaW4pCi17Ci0jaWYgRU5B
QkxFKEpJVCkKLSAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gY2hhaW4gPSBwYXNz
ZWRDaGFpbjsKLSAgICAKLSAgICAvLyBWYWxpZGF0ZSB0aGUgY2hhaW4uIElmIHRoZSBjaGFpbiBp
cyBpbnZhbGlkLCB0aGVuIGN1cnJlbnRseSB0aGUgYmVzdCB0aGluZwotICAgIC8vIHdlIGNhbiBk
byBpcyB0byBhc3N1bWUgdGhhdCBUYWtlc1Nsb3cgaXMgdHJ1ZS4gSW4gdGhlIGZ1dHVyZSwgaXQg
bWlnaHQgYmUKLSAgICAvLyB3b3J0aCBleHBsb3JpbmcgcmVpZnlpbmcgdGhlIHN0cnVjdHVyZSBj
aGFpbiBmcm9tIHRoZSBzdHJ1Y3R1cmUgd2UndmUgZ290Ci0gICAgLy8gaW5zdGVhZCBvZiB1c2lu
ZyB0aGUgb25lIGZyb20gdGhlIGNhY2hlLCBzaW5jZSB0aGF0IHdpbGwgZG8gdGhlIHJpZ2h0IHRo
aW5ncwotICAgIC8vIGlmIHRoZSBzdHJ1Y3R1cmUgY2hhaW4gaGFzIGNoYW5nZWQuIEJ1dCB0aGF0
IG1heSBiZSBoYXJkZXIsIGJlY2F1c2Ugd2UgbWF5Ci0gICAgLy8gdGhlbiBlbmQgdXAgaGF2aW5n
IGEgZGlmZmVyZW50IHR5cGUgb2YgYWNjZXNzIGFsdG9nZXRoZXIuIEFuZCBpdCBjdXJyZW50bHkK
LSAgICAvLyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd29ydGggaXQgdG8gZG8gc28gLS0gZWZmZWN0
aXZlbHksIHRoZSBoZXVyaXN0aWMgd2UKLSAgICAvLyBoYXZlIG5vdyBpcyB0aGF0IGlmIHRoZSBz
dHJ1Y3R1cmUgY2hhaW4gaGFzIGNoYW5nZWQgYmV0d2VlbiB3aGVuIGl0IHdhcwotICAgIC8vIGNh
Y2hlZCBvbiBpbiB0aGUgYmFzZWxpbmUgSklUIGFuZCB3aGVuIHRoZSBERkcgdHJpZWQgdG8gaW5s
aW5lIHRoZSBhY2Nlc3MsCi0gICAgLy8gdGhlbiB3ZSBmYWxsIGJhY2sgb24gYSBwb2x5bW9ycGhp
YyBhY2Nlc3MuCi0gICAgaWYgKCFjaGFpbi0+aXNTdGlsbFZhbGlkKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmIChjaGFpbi0+aGVhZCgpLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJ
bXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgc2l6ZV90IGNoYWlu
U2l6ZSA9IGNoYWluLT5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGFpblNp
emU7IGkrKykgewotICAgICAgICBpZiAoY2hhaW4tPmF0KGkpLT50YWtlc1Nsb3dQYXRoSW5ERkdG
b3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0gY2hhaW4tPnRlcm1pbmFsUHJvdG90eXBlKCk7
Ci0gICAgU3RydWN0dXJlKiBjdXJyZW50U3RydWN0dXJlID0gY2hhaW4tPmxhc3QoKTsKLSAgICAK
LSAgICBBU1NFUlRfVU5VU0VEKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRPYmplY3QpOwotICAgIAot
ICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25vcmVkOwotICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1
ZTsKLSAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBjdXJyZW50U3RydWN0dXJlLT5n
ZXRDb25jdXJyZW50bHkoCi0gICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQsIGF0dHJp
YnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKLSAgICBpZiAoY3VycmVudFN0cnVjdHVyZS0+
aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwotICAgIGlmICghaXNW
YWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0
dXJuIGFwcGVuZFZhcmlhbnQoR2V0QnlJZFZhcmlhbnQoU3RydWN0dXJlU2V0KGNoYWluLT5oZWFk
KCkpLCBvZmZzZXQsIHNwZWNpZmljVmFsdWUsIGNoYWluKSk7Ci0jZWxzZSAvLyBFTkFCTEUoSklU
KQotICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKLSAgICBVTlVTRURfUEFSQU0odWlk
KTsKLSAgICBVTlVTRURfUEFSQU0ocGFzc2VkQ2hhaW4pOwotICAgIFVOUkVBQ0hBQkxFX0ZPUl9Q
TEFURk9STSgpOwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotfQot
CiBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9m
aWxlZEJsb2NrLCBTdHViSW5mb01hcCYgbWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBTdHJp
bmdJbXBsKiB1aWQpCiB7CiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIocHJvZmlsZWRC
bG9jay0+bV9sb2NrKTsKQEAgLTE0OCwxMiArOTgsMTMgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgcmVzdWx0ID0g
Y29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIG1hcC5n
ZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSksIHVpZCk7CisgICAgICAgIGxvY2tlciwgcHJv
ZmlsZWRCbG9jaywgbWFwLmdldChDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKSwgdWlkLAorICAg
ICAgICBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShsb2NrZXIsIHByb2ZpbGVk
QmxvY2ssIGJ5dGVjb2RlSW5kZXgpKTsKICAgICAKICAgICBpZiAoIXJlc3VsdC50YWtlc1Nsb3dQ
YXRoKCkKICAgICAgICAgJiYgKGhhc0V4aXRTaXRlKGxvY2tlciwgcHJvZmlsZWRCbG9jaywgYnl0
ZWNvZGVJbmRleCkKICAgICAgICAgICAgIHx8IHByb2ZpbGVkQmxvY2stPmxpa2VseVRvVGFrZVNs
b3dDYXNlKGJ5dGVjb2RlSW5kZXgpKSkKLSAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCwgdHJ1ZSk7CisgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHJlc3VsdC5t
YWtlc0NhbGxzKCkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCwgdHJ1ZSk7CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShtYXApOwogI2VuZGlmCkBAIC0xNjYsMjQgKzExNywyNCBAQCBHZXRC
eUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAKICNpZiBFTkFCTEUoSklUKQog
R2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgY29u
c3QgQ29uY3VycmVudEpJVExvY2tlciYsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvLAotICAgIFN0cmluZ0ltcGwqIHVpZCkKKyAgICBjb25zdCBD
b25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLAorICAgIFN0cmluZ0ltcGwqIHVpZCwgQ2FsbExpbmtT
dGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQogewogICAgIGlmICghc3R1Yklu
Zm8gfHwgIXN0dWJJbmZvLT5zZWVuKQogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhOb0lu
Zm9ybWF0aW9uKTsKICAgICAKLSAgICBpZiAoc3R1YkluZm8tPnJlc2V0QnlHQykKLSAgICAgICAg
cmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7Ci0KICAgICBQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gMDsKKyAgICBTdGF0ZSB0YWtlc1Nsb3dQYXRoID0gVGFr
ZXNTbG93UGF0aDsKICAgICBpZiAoc3R1YkluZm8tPmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9i
eV9pZF9saXN0KSB7CiAgICAgICAgIGxpc3QgPSBzdHViSW5mby0+dS5nZXRCeUlkTGlzdC5saXN0
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgIGlmIChsaXN0LT5hdChpKS5kb2VzQ2FsbHMoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gR2V0QnlJZFN0YXR1cyhNYWtlc0NhbGxzLCB0cnVlKTsKLSAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytp
KQorICAgICAgICAgICAgdGFrZXNTbG93UGF0aCA9IE1ha2VzQ2FsbHM7CiAgICAgfQogICAgIAor
ICAgIGlmIChzdHViSW5mby0+cmVzZXRCeUdDKQorICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1
cyh0YWtlc1Nsb3dQYXRoLCB0cnVlKTsKKyAgICAKICAgICAvLyBGaW5hbGx5IGZpZ3VyZSBvdXQg
aWYgd2UgY2FuIGRlcml2ZSBhbiBhY2Nlc3Mgc3RyYXRlZ3kuCiAgICAgR2V0QnlJZFN0YXR1cyBy
ZXN1bHQ7CiAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7CkBAIC0yMTUsOCArMTY2LDYgQEAg
R2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAKICAgICBj
YXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDogewogICAgICAgICBmb3IgKHVuc2lnbmVkIGxpc3RJ
bmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3QtPnNpemUoKTsgKytsaXN0SW5kZXgpIHsKLSAgICAg
ICAgICAgIEFTU0VSVCghbGlzdC0+YXQobGlzdEluZGV4KS5kb2VzQ2FsbHMoKSk7Ci0gICAgICAg
ICAgICAKICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbGlzdC0+YXQobGlzdElu
ZGV4KS5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBhc3NlcnQgdGhhdCB3ZSBuZXZlciBzZWUgYSBzdHJ1Y3R1cmUgdGhhdApAQCAtMjI2
LDcwICsxNzUsMTEwIEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMK
ICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzE4MTAKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNTbG93
UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2V0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCB0cnVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
R2V0QnlJZFN0YXR1cyh0YWtlc1Nsb3dQYXRoLCB0cnVlKTsKICAgICAgICAgICAgIAorICAgICAg
ICAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7CisgICAgICAgICAgICBKU0NlbGwqIHNw
ZWNpZmljVmFsdWU7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBteU9mZnNldDsKKyAgICAg
ICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKKwogICAgICAgICAg
ICAgaWYgKGxpc3QtPmF0KGxpc3RJbmRleCkuY2hhaW4oKSkgewotICAgICAgICAgICAgICAgIFJl
ZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluKAorICAgICAgICAgICAgICAgIGNoYWluID0gYWRvcHRSZWYobmV3IElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4oCiAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ss
IHN0cnVjdHVyZSwgbGlzdC0+YXQobGlzdEluZGV4KS5jaGFpbigpLAogICAgICAgICAgICAgICAg
ICAgICBsaXN0LT5hdChsaXN0SW5kZXgpLmNoYWluQ291bnQoKSkpOwotICAgICAgICAgICAgICAg
IGlmICghcmVzdWx0LmNvbXB1dGVGb3JDaGFpbihwcm9maWxlZEJsb2NrLCB1aWQsIGNoYWluKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwg
dHJ1ZSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaWYgKCFjaGFpbi0+aXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHRha2VzU2xvd1BhdGgsIHRydWUpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChjaGFpbi0+aGVhZCgpLT50YWtlc1Nsb3dQYXRo
SW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2V0
QnlJZFN0YXR1cyh0YWtlc1Nsb3dQYXRoLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBzaXplX3QgY2hhaW5TaXplID0gY2hhaW4tPnNpemUoKTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoYWluU2l6ZTsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChjaGFpbi0+YXQoaSktPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVBy
b3BlcnR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyh0
YWtlc1Nsb3dQYXRoLCB0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgSlNPYmplY3QqIGN1cnJlbnRPYmplY3QgPSBjaGFpbi0+dGVybWlu
YWxQcm90b3R5cGUoKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJlbnRTdHJ1Y3R1
cmUgPSBjaGFpbi0+bGFzdCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEFT
U0VSVF9VTlVTRUQoY3VycmVudE9iamVjdCwgY3VycmVudE9iamVjdCk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgbXlPZmZzZXQgPSBjdXJyZW50U3RydWN0dXJlLT5nZXRDb25j
dXJyZW50bHkoCisgICAgICAgICAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQs
IGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAo
Y3VycmVudFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICAgICAgICAgIHNw
ZWNpZmljVmFsdWUgPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBt
eU9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KAorICAgICAgICAgICAgICAgICAg
ICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCBhdHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNW
YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisg
ICAgICAgICAgICAgICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgCi0gICAgICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzSWdub3JlZDsKLSAgICAg
ICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0
IG15T2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAgICAg
KnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFs
dWUpOwotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAg
ICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIGlm
ICghaXNWYWxpZE9mZnNldChteU9mZnNldCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5
SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdl
dEJ5SWRTdGF0dXModGFrZXNTbG93UGF0aCwgdHJ1ZSk7CiAKLSAgICAgICAgICAgIGJvb2wgZm91
bmQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gMDsg
dmFyaWFudEluZGV4IDwgcmVzdWx0Lm1fdmFyaWFudHMuc2l6ZSgpOyArK3ZhcmlhbnRJbmRleCkg
ewotICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gcmVzdWx0Lm1fdmFy
aWFudHNbdmFyaWFudEluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5tX2NoYWlu
KQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghY2hhaW4g
JiYgIWxpc3QtPmF0KGxpc3RJbmRleCkuZG9lc0NhbGxzKCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBGb3Igbm9uLWNoYWluLCBub24tZ2V0dGVyIGFjY2Vzc2VzLCB3ZSB0cnkgdG8gZG8gc29tZSBj
b2FsZXNjaW5nLgorICAgICAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IDA7IHZhcmlhbnRJbmRleCA8IHJl
c3VsdC5tX3ZhcmlhbnRzLnNpemUoKTsgKyt2YXJpYW50SW5kZXgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSByZXN1bHQubV92YXJpYW50c1t2YXJpYW50
SW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5tX2NoYWluKQorICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgaWYgKHZhcmlhbnQubV9vZmZzZXQgIT0gbXlPZmZzZXQpCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIGlmICh2YXJpYW50Lm1fc3RydWN0dXJlU2V0LmNvbnRhaW5zKHN0cnVjdHVyZSkpCi0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFu
dC5tX29mZnNldCAhPSBteU9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lm1fc3BlY2lm
aWNWYWx1ZSAhPSBKU1ZhbHVlKHNwZWNpZmljVmFsdWUpKQotICAgICAgICAgICAgICAgICAgICB2
YXJpYW50Lm1fc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHZhcmlhbnQubV9zdHJ1
Y3R1cmVTZXQuYWRkKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlh
bnQubV9zdHJ1Y3R1cmVTZXQuY29udGFpbnMoc3RydWN0dXJlKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAo
dmFyaWFudC5tX3NwZWNpZmljVmFsdWUgIT0gSlNWYWx1ZShzcGVjaWZpY1ZhbHVlKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhcmlhbnQubV9zcGVjaWZpY1ZhbHVlID0gSlNWYWx1ZSgpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm1fc3RydWN0dXJl
U2V0LmFkZChzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoZm91bmQpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoZm91bmQpCi0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzOworICAg
ICAgICAgICAgc3dpdGNoIChsaXN0LT5hdChsaXN0SW5kZXgpLnR5cGUoKSkgeworICAgICAgICAg
ICAgY2FzZSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVJbmxpbmU6CisgICAgICAgICAgICBjYXNlIEdl
dEJ5SWRBY2Nlc3M6OlNpbXBsZVN0dWI6IHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6R2V0dGVyOiB7CisgICAg
ICAgICAgICAgICAgQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUqIHN0dWIgPSBzdGF0aWNfY2Fz
dDxBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSo+KAorICAgICAgICAgICAgICAgICAgICBsaXN0
LT5hdChsaXN0SW5kZXgpLnN0dWJSb3V0aW5lKCkpOworICAgICAgICAgICAgICAgIGNhbGxMaW5r
U3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oCisgICAgICAgICAgICAg
ICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKGxvY2tlciwgKnN0dWItPm1fY2FsbExp
bmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEdldEJ5SWRBY2Nlc3M6OkN1c3RvbUdldHRlcjog
eworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSB0b3RhbGx5IHN3ZWV0IHRv
IHN1cHBvcnQgdGhpcyBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUuCisgICAgICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzA1MgorICAg
ICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHRha2VzU2xvd1BhdGgsIHRydWUpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KEdldEJ5SWRWYXJpYW50KFN0cnVj
dHVyZVNldChzdHJ1Y3R1cmUpLCBteU9mZnNldCwgc3BlY2lmaWNWYWx1ZSkpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgsIHRydWUpOworICAgICAg
ICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCgKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVT
ZXQoc3RydWN0dXJlKSwgbXlPZmZzZXQsIHNwZWNpZmljVmFsdWUsIGNoYWluLAorICAgICAgICAg
ICAgICAgIHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1cykpOworICAgICAgICAgICAgaWYgKCFyZXN1
bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJ
ZFN0YXR1cyh0YWtlc1Nsb3dQYXRoLCB0cnVlKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgYWNjZXNzX2dldF9i
eV9pZF9jaGFpbjogewotICAgICAgICBpZiAoIXN0dWJJbmZvLT51LmdldEJ5SWRDaGFpbi5pc0Rp
cmVjdCkKLSAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMsIHRydWUp
OwotICAgICAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gY2hhaW4gPSBhZG9wdFJl
ZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKLSAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ss
Ci0gICAgICAgICAgICBzdHViSW5mby0+dS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVy
ZS5nZXQoKSwKLSAgICAgICAgICAgIHN0dWJJbmZvLT51LmdldEJ5SWRDaGFpbi5jaGFpbi5nZXQo
KSwKLSAgICAgICAgICAgIHN0dWJJbmZvLT51LmdldEJ5SWRDaGFpbi5jb3VudCkpOwotICAgICAg
ICBpZiAocmVzdWx0LmNvbXB1dGVGb3JDaGFpbihwcm9maWxlZEJsb2NrLCB1aWQsIGNoYWluKSkK
LSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVz
KFRha2VzU2xvd1BhdGgsIHRydWUpOwotICAgIH0KLSAgICAgICAgCiAgICAgZGVmYXVsdDoKICAg
ICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7CiAgICAgfQpA
QCAtMzA1LDEwICsyOTQsMTggQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKAogewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIGlmIChkZmdCbG9jaykgeworICAgICAg
ICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGV4aXRTaXRlRGF0YTsKKyAgICAgICAgewor
ICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9s
b2NrKTsKKyAgICAgICAgICAgIGV4aXRTaXRlRGF0YSA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRl
RXhpdFNpdGVEYXRhKAorICAgICAgICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4LCBFeGl0RnJvbUZUTCk7CisgICAgICAgIH0KKyAgICAgICAg
CiAgICAgICAgIEdldEJ5SWRTdGF0dXMgcmVzdWx0OwogICAgICAgICB7CiAgICAgICAgICAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihkZmdCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAg
IHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbyhsb2NrZXIsIGRmZ0Jsb2NrLCBkZmdNYXAuZ2V0
KGNvZGVPcmlnaW4pLCB1aWQpOworICAgICAgICAgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJ
bmZvKAorICAgICAgICAgICAgICAgIGxvY2tlciwgZGZnQmxvY2ssIGRmZ01hcC5nZXQoY29kZU9y
aWdpbiksIHVpZCwgZXhpdFNpdGVEYXRhKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
aWYgKHJlc3VsdC50YWtlc1Nsb3dQYXRoKCkpCkBAIC0zNjEsNiArMzU4LDI0IEBAIEdldEJ5SWRT
dGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgU2ltcGxlLCBmYWxzZSwg
R2V0QnlJZFZhcmlhbnQoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIG9mZnNldCwgc3BlY2lmaWNW
YWx1ZSkpOwogfQogCitib29sIEdldEJ5SWRTdGF0dXM6Om1ha2VzQ2FsbHMoKSBjb25zdAorewor
ICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgTm9JbmZvcm1hdGlvbjoKKyAgICBjYXNl
IFRha2VzU2xvd1BhdGg6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIFNpbXBsZToK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV92YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAg
ICAgICAgICAgIGlmIChtX3ZhcmlhbnRzW2ldLmNhbGxMaW5rU3RhdHVzKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGNhc2UgTWFrZXNDYWxsczoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIHZvaWQgR2V0QnlJZFN0YXR1czo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmludCgiKCIpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCShyZXZpc2lv
biAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIEdldEJ5SWRTdGF0
dXNfaAogI2RlZmluZSBHZXRCeUlkU3RhdHVzX2gKIAorI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVz
LmgiCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2Nr
LmgiCiAjaW5jbHVkZSAiRXhpdGluZ0pJVFR5cGUuaCIKQEAgLTgzLDcgKzg0LDcgQEAgcHVibGlj
OgogICAgIGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29u
c3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CiAKICAgICBib29sIHRha2VzU2xvd1BhdGgoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlID09IFRha2VzU2xvd1BhdGggfHwgbV9zdGF0ZSA9PSBNYWtlc0Nh
bGxzOyB9Ci0gICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBN
YWtlc0NhbGxzOyB9CisgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7CiAgICAgCiAgICAgYm9v
bCB3YXNTZWVuSW5KSVQoKSBjb25zdCB7IHJldHVybiBtX3dhc1NlZW5JbkpJVDsgfQogICAgIApA
QCAtOTQsOSArOTUsMTAgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBoYXNFeGl0U2l0ZShj
b25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCwgRXhpdGluZ0pJVFR5cGUgPSBFeGl0RnJvbUFueXRoaW5nKTsKICNlbmRpZgogI2lmIEVO
QUJMRShKSVQpCi0gICAgc3RhdGljIEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKGNv
bnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyos
IFN0cmluZ0ltcGwqIHVpZCk7CisgICAgc3RhdGljIEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0
dWJJbmZvKAorICAgICAgICBjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyosCisgICAgICAgIFN0cmluZ0ltcGwqIHVp
ZCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CiAjZW5kaWYKLSAgICBib29sIGNvbXB1
dGVGb3JDaGFpbihDb2RlQmxvY2sqLCBTdHJpbmdJbXBsKiB1aWQsIFBhc3NSZWZQdHI8SW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbj4pOwogICAgIHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGcm9t
TExJbnQoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgU3RyaW5nSW1wbCogdWlk
KTsKICAgICAKICAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgR2V0QnlJZFZhcmlhbnQmKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJp
YW50LmNwcAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDMxIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR2V0QnlJZFZhcmlhbnQuaCIKIAorI2lu
Y2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKIAorR2V0QnlJZFZhcmlhbnQ6On5HZXRCeUlkVmFyaWFudCgpIHsgfQorCitH
ZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoY29uc3QgR2V0QnlJZFZhcmlhbnQmIG90aGVy
KQoreworICAgICp0aGlzID0gb3RoZXI7Cit9CisKK0dldEJ5SWRWYXJpYW50JiBHZXRCeUlkVmFy
aWFudDo6b3BlcmF0b3I9KGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcikKK3sKKyAgICBtX3N0
cnVjdHVyZVNldCA9IG90aGVyLm1fc3RydWN0dXJlU2V0OworICAgIG1fY2hhaW4gPSBvdGhlci5t
X2NoYWluOworICAgIG1fc3BlY2lmaWNWYWx1ZSA9IG90aGVyLm1fc3BlY2lmaWNWYWx1ZTsKKyAg
ICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OworICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3Rh
dHVzKQorICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlu
a1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOworICAgIGVsc2UKKyAgICAgICAgbV9j
YWxsTGlua1N0YXR1cyA9IG51bGxwdHI7CisgICAgcmV0dXJuICp0aGlzOworfQorCiB2b2lkIEdl
dEJ5SWRWYXJpYW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgZHVtcElu
Q29udGV4dChvdXQsIDApOwpAQCAtNDUsNyArNjYsMTAgQEAgdm9pZCBHZXRCeUlkVmFyaWFudDo6
ZHVtcEluQ29udGV4dChQcmludAogICAgIG91dC5wcmludCgKICAgICAgICAgIjwiLCBpbkNvbnRl
eHQoc3RydWN0dXJlU2V0KCksIGNvbnRleHQpLCAiLCAiLAogICAgICAgICBwb2ludGVyRHVtcElu
Q29udGV4dChjaGFpbigpLCBjb250ZXh0KSwgIiwgIiwKLSAgICAgICAgaW5Db250ZXh0KHNwZWNp
ZmljVmFsdWUoKSwgY29udGV4dCksICIsICIsIG9mZnNldCgpLCAiPiIpOworICAgICAgICBpbkNv
bnRleHQoc3BlY2lmaWNWYWx1ZSgpLCBjb250ZXh0KSwgIiwgIiwgb2Zmc2V0KCkpOworICAgIGlm
IChtX2NhbGxMaW5rU3RhdHVzKQorICAgICAgICBvdXQucHJpbnQoImNhbGw6ICIsICptX2NhbGxM
aW5rU3RhdHVzKTsKKyAgICBvdXQucHJpbnQoIj4iKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlh
bnQuaAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5k
ZWYgR2V0QnlJZFZhcmlhbnRfaAogI2RlZmluZSBHZXRCeUlkVmFyaWFudF9oCiAKKyNpbmNsdWRl
ICJDYWxsTGlua1N0YXR1cy5oIgogI2luY2x1ZGUgIkludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCIK
ICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKQEAg
LTMzLDYgKzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIENhbGxMaW5rU3RhdHVz
OwogY2xhc3MgR2V0QnlJZFN0YXR1czsKIHN0cnVjdCBEdW1wQ29udGV4dDsKIApAQCAtNDEsMTEg
KzQzLDEzIEBAIHB1YmxpYzoKICAgICBHZXRCeUlkVmFyaWFudCgKICAgICAgICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQgPSBTdHJ1Y3R1cmVTZXQoKSwKICAgICAgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gaW52YWxpZE9mZnNldCwgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlID0g
SlNWYWx1ZSgpLAotICAgICAgICBQYXNzUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNo
YWluID0gbnVsbHB0cikKKyAgICAgICAgUGFzc1JlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
PiBjaGFpbiA9IG51bGxwdHIsCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1
cz4gY2FsbExpbmtTdGF0dXMgPSBudWxscHRyKQogICAgICAgICA6IG1fc3RydWN0dXJlU2V0KHN0
cnVjdHVyZVNldCkKICAgICAgICAgLCBtX2NoYWluKGNoYWluKQogICAgICAgICAsIG1fc3BlY2lm
aWNWYWx1ZShzcGVjaWZpY1ZhbHVlKQogICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAg
ICAgLCBtX2NhbGxMaW5rU3RhdHVzKHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1cykpCiAgICAgewog
ICAgICAgICBpZiAoIXN0cnVjdHVyZVNldC5zaXplKCkpIHsKICAgICAgICAgICAgIEFTU0VSVChv
ZmZzZXQgPT0gaW52YWxpZE9mZnNldCk7CkBAIC01NCwxMiArNTgsMTggQEAgcHVibGljOgogICAg
ICAgICB9CiAgICAgfQogICAgIAorICAgIH5HZXRCeUlkVmFyaWFudCgpOworICAgIAorICAgIEdl
dEJ5SWRWYXJpYW50KGNvbnN0IEdldEJ5SWRWYXJpYW50Jik7CisgICAgR2V0QnlJZFZhcmlhbnQm
IG9wZXJhdG9yPShjb25zdCBHZXRCeUlkVmFyaWFudCYpOworICAgIAogICAgIGJvb2wgaXNTZXQo
KSBjb25zdCB7IHJldHVybiAhIW1fc3RydWN0dXJlU2V0LnNpemUoKTsgfQogICAgIGJvb2wgb3Bl
cmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9CiAgICAg
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0
PEludGVuZGVkU3RydWN0dXJlQ2hhaW4qPihtX2NoYWluLmdldCgpKTsgfQogICAgIEpTVmFsdWUg
c3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lmaWNWYWx1ZTsgfQogICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgQ2Fs
bExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsTGlua1N0
YXR1cy5nZXQoKTsgfQogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owog
ICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7
CkBAIC03MSw2ICs4MSw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJl
Q2hhaW4+IG1fY2hhaW47CiAgICAgSlNWYWx1ZSBtX3NwZWNpZmljVmFsdWU7CiAgICAgUHJvcGVy
dHlPZmZzZXQgbV9vZmZzZXQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBt
X2NhbGxMaW5rU3RhdHVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJ
ZExpc3QuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDI3
ICs1OCwxMSBAQCBHZXRCeUlkQWNjZXNzIEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1CiAgICAg
CiAgICAgR2V0QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAgCi0gICAgc3dpdGNoIChzdHViSW5mby5h
Y2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6Ci0gICAgICAgIHJl
c3VsdC5tX3R5cGUgPSBTaW1wbGVJbmxpbmU7Ci0gICAgICAgIHJlc3VsdC5tX3N0cnVjdHVyZS5j
b3B5RnJvbShzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUpOwotICAg
ICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFu
YWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAot
ICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKLSAgICAgICAgcmVzdWx0Lm1fc3RydWN0
dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUp
OwotICAgICAgICByZXN1bHQubV9jaGFpbi5jb3B5RnJvbShzdHViSW5mby51LmdldEJ5SWRDaGFp
bi5jaGFpbik7Ci0gICAgICAgIHJlc3VsdC5tX2NoYWluQ291bnQgPSBzdHViSW5mby51LmdldEJ5
SWRDaGFpbi5jb3VudDsKLSAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViSW5mby5z
dHViUm91dGluZTsKLSAgICAgICAgaWYgKHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmlzRGlyZWN0
KQotICAgICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFNpbXBsZVN0dWI7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBHZXR0ZXI7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vz
c19nZXRfYnlfaWRfc2VsZik7CisgICAgCisgICAgcmVzdWx0Lm1fdHlwZSA9IFNpbXBsZUlubGlu
ZTsKKyAgICByZXN1bHQubV9zdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5nZXRCeUlkU2Vs
Zi5iYXNlT2JqZWN0U3RydWN0dXJlKTsKKyAgICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJVFN0
dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsKICAg
ICAKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTA5LDcgKzkzLDYgQEAgUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdCogUG9seW1vcnBoaWNHZXRCeQogICAgIAogICAgIEFTU0VSVCgKICAgICAgICAg
c3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYKLSAgICAgICAgfHwg
c3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluCiAgICAgICAgIHx8
IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsKICAgICAKICAgICBQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0KiByZXN1bHQgPSBuZXcgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChzdHVi
SW5mbyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3Vs
YXRlZFR5cGUuaAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAg
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNPYmplY3QgIAogc3RhdGljIGNvbnN0IFNw
ZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdJZGVudCAgICAgICAgPSAweDAwMDEwMDAwOyAvLyBJdCdz
IGRlZmluaXRlbHkgYSBKU1N0cmluZywgYW5kIGl0J3MgYW4gaWRlbnRpZmllci4KIHN0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU3RyaW5nVmFyICAgICAgICAgID0gMHgwMDAyMDAwMDsg
Ly8gSXQncyBkZWZpbml0ZWx5IGEgSlNTdHJpbmcsIGFuZCBpdCdzIG5vdCBhbiBpZGVudGlmaWVy
Lgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmcgICAgICAgICAgICAgPSAw
eDAwMDMwMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU1N0cmluZy4KLXN0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjQ2VsbE90aGVyICAgICAgICAgID0gMHgwMDA0MDAwMDsgLy8gSXQn
cyBkZWZpbml0ZWx5IGEgSlNDZWxsIGJ1dCBub3QgYSBzdWJjbGFzcyBvZiBKU09iamVjdCBhbmQg
ZGVmaW5pdGVseSBub3QgYSBKU1N0cmluZy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBT
cGVjQ2VsbE90aGVyICAgICAgICAgID0gMHgwMDA0MDAwMDsgLy8gSXQncyBkZWZpbml0ZWx5IGEg
SlNDZWxsIGJ1dCBub3QgYSBzdWJjbGFzcyBvZiBKU09iamVjdCBhbmQgZGVmaW5pdGVseSBub3Qg
YSBKU1N0cmluZy4gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIHBhcnQgb2YgaGVhcC10b3Agb3Ig
Ynl0ZWNvZGUtdG9wLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMz
MDc4CiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0NlbGwgICAgICAgICAgICAgICA9
IDB4MDAwN2ZmZmY7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTQ2VsbC4KIHN0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjSW50MzIgICAgICAgICAgICAgID0gMHgwMDIwMDAwMDsgLy8gSXQn
cyBkZWZpbml0ZWx5IGFuIEludDMyLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJ
bnQ1MiAgICAgICAgICAgICAgPSAweDAwNDAwMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50
NTIgYW5kIHdlIGludGVuZCBpdCB0byB1bmJveCBpdC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24g
MTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNiBAQCB2b2lkIFN0cnVjdHVyZVN0
dWJJbmZvOjpkZXJlZigpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBhY2Nlc3Nf
Z2V0X2J5X2lkX3NlbGY6Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluOgogICAgIGNh
c2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICBjYXNlIGFjY2Vzc19w
dXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3Jl
cGxhY2U6CkBAIC02OCwxMSArNjcsNiBAQCBib29sIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdl
YWtSZWZlcmVuCiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodS5nZXRCeUlkU2VsZi5iYXNl
T2JqZWN0U3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluOgotICAgICAgICBpZiAo
IUhlYXA6OmlzTWFya2VkKHUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkp
Ci0gICAgICAgICAgICB8fCAhSGVhcDo6aXNNYXJrZWQodS5nZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0
KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBicmVhazsKICAgICBjYXNl
IGFjY2Vzc19nZXRfYnlfaWRfbGlzdDogewogICAgICAgICBpZiAoIXUuZ2V0QnlJZExpc3QubGlz
dC0+dmlzaXRXZWFrKHJlcGF0Y2hCdWZmZXIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmgJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw2IEBA
IGNsYXNzIFBvbHltb3JwaGljUHV0QnlJZExpc3Q7CiAKIGVudW0gQWNjZXNzVHlwZSB7CiAgICAg
YWNjZXNzX2dldF9ieV9pZF9zZWxmLAotICAgIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW4sCiAgICAg
YWNjZXNzX2dldF9ieV9pZF9saXN0LAogICAgIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9u
b3JtYWwsCiAgICAgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdCwKQEAgLTYxLDcg
KzYwLDYgQEAgaW5saW5lIGJvb2wgaXNHZXRCeUlkQWNjZXNzKEFjY2Vzc1R5cGUgYQogewogICAg
IHN3aXRjaCAoYWNjZXNzVHlwZSkgewogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgot
ICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlf
aWRfbGlzdDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKQEAgLTEwNywxNiAr
MTA1LDYgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgdS5nZXRCeUlkU2Vs
Zi5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIGJhc2VPYmplY3RTdHJ1Y3R1cmUp
OwogICAgIH0KIAotICAgIHZvaWQgaW5pdEdldEJ5SWRDaGFpbihWTSYgdm0sIEpTQ2VsbCogb3du
ZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWlu
LCB1bnNpZ25lZCBjb3VudCwgYm9vbCBpc0RpcmVjdCkKLSAgICB7Ci0gICAgICAgIGFjY2Vzc1R5
cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluOwotCi0gICAgICAgIHUuZ2V0QnlJZENoYWluLmJh
c2VPYmplY3RTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0g
ICAgICAgIHUuZ2V0QnlJZENoYWluLmNoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKLSAgICAg
ICAgdS5nZXRCeUlkQ2hhaW4uY291bnQgPSBjb3VudDsKLSAgICAgICAgdS5nZXRCeUlkQ2hhaW4u
aXNEaXJlY3QgPSBpc0RpcmVjdDsKLSAgICB9Ci0KICAgICB2b2lkIGluaXRHZXRCeUlkTGlzdChQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0KQogICAgIHsKICAgICAgICAgYWNjZXNzVHlwZSA9
IGFjY2Vzc19nZXRfYnlfaWRfbGlzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEhlYXAuaAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAs
OCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oQnV0dGVyZmx5
X2FycmF5QnVmZmVyKSBcCiAgICAgbWFjcm8oQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCkgXAogICAg
IG1hY3JvKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpIFwKKyAgICBtYWNybyhHZXR0ZXJTZXR0ZXJf
Z2V0dGVyKSBcCisgICAgbWFjcm8oR2V0dGVyU2V0dGVyX3NldHRlcikgXAogICAgIG1hY3JvKEpT
QXJyYXlCdWZmZXJWaWV3X2xlbmd0aCkgXAogICAgIG1hY3JvKEpTQXJyYXlCdWZmZXJWaWV3X21v
ZGUpIFwKICAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld192ZWN0b3IpIFwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTY0
MCw2ICsxNjQwLDExIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIEdldEdldHRlclNldHRl
ckJ5T2Zmc2V0OiB7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgubV92bS5nZXR0
ZXJTZXR0ZXJTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAg
IAogICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDogewogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2
YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBBU1NFUlQoISh2YWx1ZS5t
X3R5cGUgJiB+U3BlY0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFk
eSBlbnN1cmVkIHRoaXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MSwy
MSArMTcxLDIxIEBAIHByaXZhdGU6CiAgICAgYm9vbCBoYW5kbGVNaW5NYXgoaW50IHJlc3VsdE9w
ZXJhbmQsIE5vZGVUeXBlIG9wLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyk7CiAgICAgCiAgICAgLy8gSGFuZGxlIGNhbGxzLiBUaGlzIHJlc29sdmVz
IGlzc3VlcyBzdXJyb3VuZGluZyBpbmxpbmluZyBhbmQgaW50cmluc2ljcy4KKyAgICB2b2lkIGhh
bmRsZUNhbGwoCisgICAgICAgIGludCByZXN1bHQsIE5vZGVUeXBlIG9wLCBJbmxpbmVDYWxsRnJh
bWU6OktpbmQsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6ZSwKKyAgICAgICAgTm9kZSogY2FsbFRh
cmdldCwgaW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENhbGxMaW5rU3RhdHVzKTsK
ICAgICB2b2lkIGhhbmRsZUNhbGwoaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6ZSwgaW50IGNhbGxlZSwgaW50IGFy
Z0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQpOwogICAgIHZvaWQgaGFuZGxlQ2FsbChJbnN0cnVj
dGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICB2b2lk
IGVtaXRGdW5jdGlvbkNoZWNrcyhjb25zdCBDYWxsTGlua1N0YXR1cyYsIE5vZGUqIGNhbGxUYXJn
ZXQsIGludCByZWdpc3Rlck9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgdm9p
ZCBlbWl0QXJndW1lbnRQaGFudG9tcyhpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgLy8gSGFuZGxl
IGlubGluaW5nLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQg
dG8gcGxhbnQgYSBjYWxsLgotICAgIGJvb2wgaGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdl
dE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYsIGludCByZWdp
c3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0
T2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICBib29sIGhhbmRsZUlubGluaW5n
KE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtT
dGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kKTsKICAgICAvLyBI
YW5kbGUgaW50cmluc2ljIGZ1bmN0aW9ucy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBm
YWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEgY2FsbC4KICAgICBib29sIGhhbmRsZUludHJpbnNp
YyhpbnQgcmVzdWx0T3BlcmFuZCwgSW50cmluc2ljLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbik7CiAg
ICAgYm9vbCBoYW5kbGVUeXBlZEFycmF5Q29uc3RydWN0b3IoaW50IHJlc3VsdE9wZXJhbmQsIElu
dGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcywgVHlwZWRBcnJheVR5cGUpOwogICAgIGJvb2wgaGFuZGxlQ29uc3RhbnRJbnRl
cm5hbEZ1bmN0aW9uKGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJl
Z2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFNwZWN1bGF0ZWRU
eXBlIHByZWRpY3Rpb24sIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIE5vZGUqIGhhbmRs
ZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zm
c2V0LCBOb2RlKiB2YWx1ZSk7Ci0gICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRl
ZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zm
c2V0KTsKLSAgICB2b2lkIGhhbmRsZUdldEJ5T2Zmc2V0KAotICAgICAgICBpbnQgZGVzdGluYXRp
b25PcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciwKLSAgICAgICAgUHJvcGVydHlPZmZzZXQpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5
T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgb3AgPSBHZXRCeU9mZnNldCk7CiAgICAgdm9p
ZCBoYW5kbGVHZXRCeUlkKAogICAgICAgICBpbnQgZGVzdGluYXRpb25PcGVyYW5kLCBTcGVjdWxh
dGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwKICAgICAgICAg
Y29uc3QgR2V0QnlJZFN0YXR1cyYpOwpAQCAtODExLDExICs4MTEsMTEgQEAgcHJpdmF0ZToKICAg
ICAgICAgbV9udW1QYXNzZWRWYXJBcmdzKys7CiAgICAgfQogICAgIAotICAgIE5vZGUqIGFkZENh
bGwoaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIGludCBjYWxsZWUsIGludCBhcmdDb3VudCwgaW50
IHJlZ2lzdGVyT2Zmc2V0KQorICAgIE5vZGUqIGFkZENhbGwoaW50IHJlc3VsdCwgTm9kZVR5cGUg
b3AsIE5vZGUqIGNhbGxlZSwgaW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQpCiAgICAg
ewogICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOwog
ICAgICAgICAKLSAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KFZpcnR1YWxSZWdpc3RlcihjYWxs
ZWUpKSk7CisgICAgICAgIGFkZFZhckFyZ0NoaWxkKGNhbGxlZSk7CiAgICAgICAgIHNpemVfdCBw
YXJhbWV0ZXJTbG90cyA9IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBKU1N0YWNrOjpD
YWxsZXJGcmFtZUFuZFBDU2l6ZSArIGFyZ0NvdW50OwogICAgICAgICBpZiAocGFyYW1ldGVyU2xv
dHMgPiBtX3BhcmFtZXRlclNsb3RzKQogICAgICAgICAgICAgbV9wYXJhbWV0ZXJTbG90cyA9IHBh
cmFtZXRlclNsb3RzOwpAQCAtMTEyMCw3ICsxMTIwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciByZXR1cm5WYWx1ZVZSLAogICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIGlubGluZUNhbGxGcmFtZVN0YXJ0LAogICAgICAgICAgICAgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLAotICAgICAgICAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisgICAg
ICAgICAgICBJbmxpbmVDYWxsRnJhbWU6OktpbmQpOwogICAgICAgICAKICAgICAgICAgfklubGlu
ZVN0YWNrRW50cnkoKQogICAgICAgICB7CkBAIC0xMjAzLDI2ICsxMjAzLDM1IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLAogICAg
IGludCBjYWxsZWUsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgaW50IHJlZ2lzdGVy
T2Zmc2V0KQogewotICAgIEFTU0VSVChyZWdpc3Rlck9mZnNldCA8PSAwKTsKLSAgICAKICAgICBO
b2RlKiBjYWxsVGFyZ2V0ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjYWxsZWUpKTsKICAgICAKLSAg
ICBDYWxsTGlua1N0YXR1cyBjYWxsTGlua1N0YXR1czsKLQorICAgIENhbGxMaW5rU3RhdHVzIGNh
bGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAgICAgIG1faW5s
aW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgY3VycmVudENvZGVPcmlnaW4oKSwKKyAgICAg
ICAgbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsTGlua0luZm9zLCBtX2NhbGxDb250ZXh0TWFwKTsK
KyAgICAKKyAgICBoYW5kbGVDYWxsKAorICAgICAgICByZXN1bHQsIG9wLCBJbmxpbmVDYWxsRnJh
bWU6OmtpbmRGb3Ioa2luZCksIGluc3RydWN0aW9uU2l6ZSwgY2FsbFRhcmdldCwKKyAgICAgICAg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHJlZ2lzdGVyT2Zmc2V0LCBjYWxsTGlua1N0YXR1
cyk7Cit9CisgICAgCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAorICAgIGludCBy
ZXN1bHQsIE5vZGVUeXBlIG9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgdW5zaWduZWQg
aW5zdHJ1Y3Rpb25TaXplLAorICAgIE5vZGUqIGNhbGxUYXJnZXQsIGludCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgaW50IHJlZ2lzdGVyT2Zmc2V0LAorICAgIENhbGxMaW5rU3RhdHVzIGNh
bGxMaW5rU3RhdHVzKQoreworICAgIEFTU0VSVChyZWdpc3Rlck9mZnNldCA8PSAwKTsKKyAgICBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCA9IElubGluZUNhbGxGcmFt
ZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQpOworICAgIAogICAgIGlmIChtX2dyYXBoLmlz
Q29uc3RhbnQoY2FsbFRhcmdldCkpIHsKICAgICAgICAgY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlu
a1N0YXR1cygKICAgICAgICAgICAgIG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQoY2FsbFRhcmdl
dCkpLnNldElzUHJvdmVkKHRydWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNhbGxMaW5rU3Rh
dHVzID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICBtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCksCi0gICAgICAgICAg
ICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxMaW5rSW5mb3MsIG1fY2FsbENvbnRleHRNYXApOwog
ICAgIH0KICAgICAKICAgICBpZiAoIWNhbGxMaW5rU3RhdHVzLmNhbk9wdGltaXplKCkpIHsKICAg
ICAgICAgLy8gT2RkbHksIHRoaXMgY29uZmxhdGVzIGNhbGxzIHRoYXQgaGF2ZW4ndCBleGVjdXRl
ZCB3aXRoIGNhbGxzIHRoYXQgYmVoYXZlZCBzdWZmaWNpZW50bHkgcG9seW1vcnBoaWNhbGx5CiAg
ICAgICAgIC8vIHRoYXQgd2UgY2Fubm90IG9wdGltaXplIHRoZW0uCiAgICAgICAgIAotICAgICAg
ICBhZGRDYWxsKHJlc3VsdCwgb3AsIGNhbGxlZSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgYWRkQ2FsbChyZXN1bHQsIG9wLCBjYWxsVGFyZ2V0
LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIApAQCAtMTIzMCwyOCArMTIzOSwyOCBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVDYWxsKAogICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQ
cmVkaWN0aW9uKCk7CiAKICAgICBpZiAoSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBjYWxs
TGlua1N0YXR1cy5pbnRlcm5hbEZ1bmN0aW9uKCkpIHsKLSAgICAgICAgaWYgKGhhbmRsZUNvbnN0
YW50SW50ZXJuYWxGdW5jdGlvbihyZXN1bHQsIGZ1bmN0aW9uLCByZWdpc3Rlck9mZnNldCwgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHByZWRpY3Rpb24sIGtpbmQpKSB7CisgICAgICAgIGlm
IChoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24ocmVzdWx0LCBmdW5jdGlvbiwgcmVnaXN0
ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBwcmVkaWN0aW9uLCBzcGVjaWFs
aXphdGlvbktpbmQpKSB7CiAgICAgICAgICAgICAvLyBUaGlzIHBoYW50b21pbmcgaGFzIHRvIGJl
ICphZnRlciogdGhlIGNvZGUgZm9yIHRoZSBpbnRyaW5zaWMsIHRvIHNpZ25pZnkgdGhhdAogICAg
ICAgICAgICAgLy8gdGhlIGlucHV0cyBtdXN0IGJlIGtlcHQgYWxpdmUgd2hhdGV2ZXIgZXhpdHMg
dGhlIGludHJpbnNpYyBtYXkgZG8uCiAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGNh
bGxUYXJnZXQpOwotICAgICAgICAgICAgZW1pdEFyZ3VtZW50UGhhbnRvbXMocmVnaXN0ZXJPZmZz
ZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBraW5kKTsKKyAgICAgICAgICAgIGVtaXRB
cmd1bWVudFBoYW50b21zKHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgc3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgLy8gQ2FuIG9ubHkgaGFuZGxlIHRoaXMgdXNpbmcgdGhlIGdlbmVy
aWMgY2FsbCBoYW5kbGVyLgotICAgICAgICBhZGRDYWxsKHJlc3VsdCwgb3AsIGNhbGxlZSwgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgYWRkQ2Fs
bChyZXN1bHQsIG9wLCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVn
aXN0ZXJPZmZzZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKLSAgICBJbnRy
aW5zaWMgaW50cmluc2ljID0gY2FsbExpbmtTdGF0dXMuaW50cmluc2ljRm9yKGtpbmQpOworICAg
IEludHJpbnNpYyBpbnRyaW5zaWMgPSBjYWxsTGlua1N0YXR1cy5pbnRyaW5zaWNGb3Ioc3BlY2lh
bGl6YXRpb25LaW5kKTsKICAgICBpZiAoaW50cmluc2ljICE9IE5vSW50cmluc2ljKSB7Ci0gICAg
ICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1cywgY2FsbFRhcmdldCwgcmVnaXN0
ZXJPZmZzZXQsIGtpbmQpOworICAgICAgICBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbExpbmtTdGF0
dXMsIGNhbGxUYXJnZXQsIHJlZ2lzdGVyT2Zmc2V0LCBzcGVjaWFsaXphdGlvbktpbmQpOwogICAg
ICAgICAgICAgCiAgICAgICAgIGlmIChoYW5kbGVJbnRyaW5zaWMocmVzdWx0LCBpbnRyaW5zaWMs
IHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcHJlZGljdGlvbikp
IHsKICAgICAgICAgICAgIC8vIFRoaXMgcGhhbnRvbWluZyBoYXMgdG8gYmUgKmFmdGVyKiB0aGUg
Y29kZSBmb3IgdGhlIGludHJpbnNpYywgdG8gc2lnbmlmeSB0aGF0CiAgICAgICAgICAgICAvLyB0
aGUgaW5wdXRzIG11c3QgYmUga2VwdCBhbGl2ZSB3aGF0ZXZlciBleGl0cyB0aGUgaW50cmluc2lj
IG1heSBkby4KICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgY2FsbFRhcmdldCk7Ci0g
ICAgICAgICAgICBlbWl0QXJndW1lbnRQaGFudG9tcyhyZWdpc3Rlck9mZnNldCwgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsIGtpbmQpOworICAgICAgICAgICAgZW1pdEFyZ3VtZW50UGhhbnRv
bXMocmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBzcGVjaWFsaXph
dGlvbktpbmQpOwogICAgICAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKICAgICAg
ICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRDYWxsKCk7CiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0xMjYyLDcgKzEyNzEsNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVDYWxsKAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGFkZENh
bGwocmVzdWx0LCBvcCwgY2FsbGVlLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0
ZXJPZmZzZXQpOworICAgIGFkZENhbGwocmVzdWx0LCBvcCwgY2FsbFRhcmdldCwgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsIHJlZ2lzdGVyT2Zmc2V0KTsKIH0KIAogdm9pZCBCeXRlQ29kZVBh
cnNlcjo6ZW1pdEZ1bmN0aW9uQ2hlY2tzKGNvbnN0IENhbGxMaW5rU3RhdHVzJiBjYWxsTGlua1N0
YXR1cywgTm9kZSogY2FsbFRhcmdldCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCkBAIC0xMjk3LDEwICsxMzA2LDEyIEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmVtaXRBcmd1bWVudFBoYW50b20KICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSwgcmVnaXN0ZXJPZmZzZXQpKSk7CiB9CiAKLWJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBp
bnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5rU3RhdHVzLCBp
bnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWdu
ZWQgbmV4dE9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRP
cGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsIGludCByZWdpc3Rl
ck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zm
c2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCkKIHsKICAgICBzdGF0aWMgY29uc3QgYm9v
bCB2ZXJib3NlID0gZmFsc2U7CiAgICAgCisgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVj
aWFsaXphdGlvbktpbmQgPSBJbmxpbmVDYWxsRnJhbWU6OnNwZWNpYWxpemF0aW9uS2luZEZvcihr
aW5kKTsKKyAgICAKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJp
bmcgaW5saW5pbmcgIiwgY2FsbExpbmtTdGF0dXMsICIgaW50byAiLCBjdXJyZW50Q29kZU9yaWdp
bigpLCAiXG4iKTsKICAgICAKQEAgLTEzMzMsMTQgKzEzNDQsMTQgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIC8vIGlmIHdlIGhhZCBhIHN0YXRpYyBwcm9v
ZiBvZiB3aGF0IHdhcyBiZWluZyBjYWxsZWQ7IHRoaXMgbWlnaHQgaGFwcGVuIGZvciBleGFtcGxl
IGlmIHlvdSBjYWxsIGEKICAgICAvLyBnbG9iYWwgZnVuY3Rpb24sIHdoZXJlIHdhdGNocG9pbnRp
bmcgZ2l2ZXMgdXMgc3RhdGljIGluZm9ybWF0aW9uLiBPdmVyYWxsLCBpdCdzIGEgcmFyZSBjYXNl
CiAgICAgLy8gYmVjYXVzZSB3ZSBleHBlY3QgdGhhdCBhbnkgaG90IGNhbGxlZXMgd291bGQgaGF2
ZSBhbHJlYWR5IGJlZW4gY29tcGlsZWQuCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVj
dXRhYmxlLT5iYXNlbGluZUNvZGVCbG9ja0ZvcihraW5kKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGV4ZWN1dGFibGUtPmJhc2VsaW5lQ29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2lu
ZCk7CiAgICAgaWYgKCFjb2RlQmxvY2spIHsKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgRmFpbGluZyBiZWNhdXNlIG5vIGNvZGUgYmxvY2sgYXZhaWxhYmxl
LlxuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgQ2FwYWJpbGl0eUxldmVs
IGNhcGFiaWxpdHlMZXZlbCA9IGlubGluZUZ1bmN0aW9uRm9yQ2FwYWJpbGl0eUxldmVsKAotICAg
ICAgICBjb2RlQmxvY2ssIGtpbmQsIGNhbGxMaW5rU3RhdHVzLmlzQ2xvc3VyZUNhbGwoKSk7Cisg
ICAgICAgIGNvZGVCbG9jaywgc3BlY2lhbGl6YXRpb25LaW5kLCBjYWxsTGlua1N0YXR1cy5pc0Ns
b3N1cmVDYWxsKCkpOwogICAgIGlmICghY2FuSW5saW5lKGNhcGFiaWxpdHlMZXZlbCkpIHsKICAg
ICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRmFpbGluZyBiZWNh
dXNlIHRoZSBmdW5jdGlvbiBpcyBub3QgaW5saW5lYWJsZS5cbiIpOwpAQCAtMTM5Miw3ICsxNDAz
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIC8vIE5v
dyB3ZSBrbm93IHdpdGhvdXQgYSBkb3VidCB0aGF0IHdlIGFyZSBjb21taXR0ZWQgdG8gaW5saW5p
bmcuIFNvIGJlZ2luIHRoZSBwcm9jZXNzCiAgICAgLy8gYnkgY2hlY2tpbmcgdGhlIGNhbGxlZSAo
aWYgbmVjZXNzYXJ5KSBhbmQgbWFraW5nIHN1cmUgdGhhdCBhcmd1bWVudHMgYW5kIHRoZSBjYWxs
ZWUKICAgICAvLyBhcmUgZmx1c2hlZC4KLSAgICBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbExpbmtT
dGF0dXMsIGNhbGxUYXJnZXROb2RlLCByZWdpc3Rlck9mZnNldCwga2luZCk7CisgICAgZW1pdEZ1
bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzLCBjYWxsVGFyZ2V0Tm9kZSwgcmVnaXN0ZXJPZmZz
ZXQsIHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgCiAgICAgLy8gRklYTUU6IERvbid0IGZsdXNo
IGNvbnN0YW50cyEKICAgICAKQEAgLTE0MDQsNiArMTQxNSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAKICAgICBzaXplX3QgYXJndW1lbnRQb3NpdGlv
blN0YXJ0ID0gbV9ncmFwaC5tX2FyZ3VtZW50UG9zaXRpb25zLnNpemUoKTsKIAorICAgIGRhdGFM
b2coImtpbmQgPSAiLCBraW5kLCAiXG4iKTsKICAgICBJbmxpbmVTdGFja0VudHJ5IGlubGluZVN0
YWNrRW50cnkoCiAgICAgICAgIHRoaXMsIGNvZGVCbG9jaywgY29kZUJsb2NrLCBtX2dyYXBoLmxh
c3RCbG9jaygpLCBjYWxsTGlua1N0YXR1cy5mdW5jdGlvbigpLAogICAgICAgICBtX2lubGluZVN0
YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpKSwKQEAg
LTE4NjcsMTMgKzE4NzksNiBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZz
ZXQoCiAgICAgcmV0dXJuIGdldEJ5T2Zmc2V0OwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVHZXRCeU9mZnNldCgKLSAgICBpbnQgZGVzdGluYXRpb25PcGVyYW5kLCBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLAot
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKLXsKLSAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRl
c3RpbmF0aW9uT3BlcmFuZCksIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2UsIGlk
ZW50aWZpZXJOdW1iZXIsIG9mZnNldCkpOwotfQotCiBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0LCBOb2RlKiB2YWx1ZSkKIHsKICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7
CkBAIC0xOTEwLDE4ICsxOTE1LDE5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5
SWQoCiAgICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
biwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwKICAgICBjb25zdCBHZXRC
eUlkU3RhdHVzJiBnZXRCeUlkU3RhdHVzKQogeworICAgIE5vZGVUeXBlIGdldEJ5SWQgPSBnZXRC
eUlkU3RhdHVzLm1ha2VzQ2FsbHMoKSA/IEdldEJ5SWRGbHVzaCA6IEdldEJ5SWQ7CisgICAgCiAg
ICAgaWYgKCFnZXRCeUlkU3RhdHVzLmlzU2ltcGxlKCkgfHwgIU9wdGlvbnM6OmVuYWJsZUFjY2Vz
c0lubGluaW5nKCkpIHsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9w
ZXJhbmQpLAotICAgICAgICAgICAgYWRkVG9HcmFwaCgKLSAgICAgICAgICAgICAgICBnZXRCeUlk
U3RhdHVzLm1ha2VzQ2FsbHMoKSA/IEdldEJ5SWRGbHVzaCA6IEdldEJ5SWQsCi0gICAgICAgICAg
ICAgICAgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2Up
KTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoZ2V0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1i
ZXIpLCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2UpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKICAgICBpZiAoZ2V0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID4gMSkgewotICAgICAg
ICBpZiAoIWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpIHx8ICFPcHRpb25zOjplbmFibGVQb2x5
bW9ycGhpY0FjY2Vzc0lubGluaW5nKCkpIHsKKyAgICAgICAgaWYgKGdldEJ5SWRTdGF0dXMubWFr
ZXNDYWxscygpIHx8ICFpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKQorICAgICAgICAgICAgfHwg
IU9wdGlvbnM6OmVuYWJsZVBvbHltb3JwaGljQWNjZXNzSW5saW5pbmcoKSkgewogICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLAotICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoR2V0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8o
cHJlZGljdGlvbiksIGJhc2UpKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKGdldEJ5SWQs
IE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xOTcyLDE1ICsxOTc4
LDU2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgaWYgKHZhcmlh
bnQuc3BlY2lmaWNWYWx1ZSgpIHx8IG9yaWdpbmFsQmFzZUZvckJhc2VsaW5lSklUICE9IGJhc2Up
CiAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgb3JpZ2luYWxCYXNlRm9yQmFzZWxpbmVKSVQp
OwogICAgIAotICAgIGlmICh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSkgewotICAgICAgICBBU1NF
UlQodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkuaXNDZWxsKCkpOwotICAgICAgICAKLSAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLCBjZWxsQ29uc3RhbnQodmFy
aWFudC5zcGVjaWZpY1ZhbHVlKCkuYXNDZWxsKCkpKTsKKyAgICBOb2RlKiBsb2FkZWRWYWx1ZTsK
KyAgICBpZiAodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpCisgICAgICAgIGxvYWRlZFZhbHVlID0g
Y2VsbENvbnN0YW50KHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKKyAgICAgICAgICAg
IHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCisg
ICAgICAgICAgICB2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkgPyBHZXRHZXR0ZXJTZXR0ZXJCeU9m
ZnNldCA6IEdldEJ5T2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgaWYgKCF2YXJpYW50LmNhbGxM
aW5rU3RhdHVzKCkpIHsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9w
ZXJhbmQpLCBsb2FkZWRWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAg
aGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAgIGRlc3RpbmF0aW9uT3BlcmFuZCwgcHJlZGljdGlv
biwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CisgICAgTm9kZSog
Z2V0dGVyID0gYWRkVG9HcmFwaChHZXRHZXR0ZXIsIGxvYWRlZFZhbHVlKTsKKyAgICAKKyAgICAv
LyBNYWtlIGEgY2FsbC4gV2UgZG9uJ3QgdHJ5IHRvIGdldCBmYW5jeSB3aXRoIHVzaW5nIHRoZSBz
bWFsbGVzdCBvcGVyYW5kIG51bWJlciBiZWNhdXNlCisgICAgLy8gdGhlIHN0YWNrIGxheW91dCBw
aGFzZSBzaG91bGQgY29tcHJlc3MgdGhlIHN0YWNrIGFueXdheS4KKyAgICAKKyAgICB1bnNpZ25l
ZCBudW1iZXJPZlBhcmFtZXRlcnMgPSAwOworICAgIG51bWJlck9mUGFyYW1ldGVycysrOyAvLyBU
aGUgJ3RoaXMnIGFyZ3VtZW50LgorICAgIG51bWJlck9mUGFyYW1ldGVycysrOyAvLyBUcnVlIHJl
dHVybiBQQy4KKyAgICAKKyAgICAvLyBTdGFydCB3aXRoIGEgcmVnaXN0ZXIgb2Zmc2V0IHRoYXQg
Y29ycmVzcG9uZHMgdG8gdGhlIGxhc3QgaW4tdXNlIHJlZ2lzdGVyLgorICAgIGludCByZWdpc3Rl
ck9mZnNldCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKAorICAgICAgICBtX2lubGluZVN0YWNr
VG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzIC0gMSkub2Zmc2V0KCk7
CisgICAgcmVnaXN0ZXJPZmZzZXQgLT0gbnVtYmVyT2ZQYXJhbWV0ZXJzOworICAgIHJlZ2lzdGVy
T2Zmc2V0IC09IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgCisgICAgLy8gR2V0
IHRoZSBhbGlnbm1lbnQgcmlnaHQuCisgICAgcmVnaXN0ZXJPZmZzZXQgPSAtV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKAorICAgICAgICBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLAorICAgICAg
ICAtcmVnaXN0ZXJPZmZzZXQpOworICAgIAorICAgIGVuc3VyZUxvY2FscygKKyAgICAgICAgbV9p
bmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKAorICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
KHJlZ2lzdGVyT2Zmc2V0KSkudG9Mb2NhbCgpKTsKKyAgICAKKyAgICAvLyBJc3N1ZSBTZXRMb2Nh
bHMuIFRoaXMgaGFzIHR3byBlZmZlY3RzOgorICAgIC8vIDEpIFRoYXQncyBob3cgaGFuZGxlQ2Fs
bCgpIHNlZXMgdGhlIGFyZ3VtZW50cy4KKyAgICAvLyAyKSBJZiB3ZSBpbmxpbmUgdGhlbiB0aGlz
IGVuc3VyZXMgdGhhdCB0aGUgYXJndW1lbnRzIGFyZSBmbHVzaGVkIHNvIHRoYXQgaWYgeW91IHVz
ZQorICAgIC8vICAgIHRoZSBkcmVhZGVkIGFyZ3VtZW50cyBvYmplY3Qgb24gdGhlIGdldHRlciwg
dGhlIHJpZ2h0IHRoaW5ncyBoYXBwZW4uIFdlbGwsIHNvcnQgb2YgLQorICAgIC8vICAgIHNpbmNl
IHdlIG9ubHkgcmVhbGx5IGNhcmUgYWJvdXQgJ3RoaXMnIGluIHRoaXMgY2FzZS4gQnV0IHdlJ3Jl
IG5vdCBnb2luZyB0byB0YWtlIHRoYXQKKyAgICAvLyAgICBzaG9ydGN1dC4KKyAgICBpbnQgbmV4
dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXpl
OworICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBiYXNlLCBJbW1lZGlh
dGVOYWtlZFNldCk7CisgICAgCisgICAgaGFuZGxlQ2FsbCgKKyAgICAgICAgZGVzdGluYXRpb25P
cGVyYW5kLCBDYWxsLCBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGwsIE9QQ09ERV9MRU5HVEgo
b3BfZ2V0X2J5X2lkKSwKKyAgICAgICAgbG9hZGVkVmFsdWUsIG51bWJlck9mUGFyYW1ldGVycyAt
IDEsIHJlZ2lzdGVyT2Zmc2V0LCAqdmFyaWFudC5jYWxsTGlua1N0YXR1cygpKTsKIH0KIAogdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdFB1dEJ5SWQoCkBAIC0zMzc2LDcgKzM0MjMsNyBAQCBCeXRl
Q29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgVmlydHVhbFJlZ2lzdGVy
IHJldHVyblZhbHVlVlIsCiAgICAgVmlydHVhbFJlZ2lzdGVyIGlubGluZUNhbGxGcmFtZVN0YXJ0
LAogICAgIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywKLSAgICBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCisgICAgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQpCiAgICAgOiBt
X2J5dGVDb2RlUGFyc2VyKGJ5dGVDb2RlUGFyc2VyKQogICAgICwgbV9jb2RlQmxvY2soY29kZUJs
b2NrKQogICAgICwgbV9wcm9maWxlZEJsb2NrKHByb2ZpbGVkQmxvY2spCkBAIC0zNDM1LDcgKzM0
ODIsNyBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgICAg
ICAgICBtX2lubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCA9IHRydWU7CiAgICAgICAgIG1f
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIgPSBieXRlQ29kZVBhcnNlci0+Y3VycmVudENvZGVPcmln
aW4oKTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5yZXNpemUoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpOyAvLyBTZXQgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgaW5j
bHVkaW5nIHRoaXMsIGJ1dCBkb24ndCBjb25maWd1cmUgdGhlIHZhbHVlIHJlY292ZXJpZXMsIHll
dC4KLSAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmtpbmQgPSBJbmxpbmVDYWxsRnJhbWU6Omtp
bmRGb3Ioa2luZCk7CisgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5raW5kID0ga2luZDsKICAg
ICAgICAgCiAgICAgICAgIGlmIChtX2lubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxG
cmFtZSkKICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnMgPSBtX2lu
bGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJzOwpAQCAt
MzY3NCw3ICszNzIxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgIAogICAg
IElubGluZVN0YWNrRW50cnkgaW5saW5lU3RhY2tFbnRyeSgKICAgICAgICAgdGhpcywgbV9jb2Rl
QmxvY2ssIG1fcHJvZmlsZWRCbG9jaywgMCwgMCwgVmlydHVhbFJlZ2lzdGVyKCksIFZpcnR1YWxS
ZWdpc3RlcigpLAotICAgICAgICBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBDb2RlRm9y
Q2FsbCk7CisgICAgICAgIG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIElubGluZUNhbGxG
cmFtZTo6Q2FsbCk7CiAgICAgCiAgICAgcGFyc2VDb2RlQmxvY2soKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE2OTAxNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OTAsNiArNjkwLDQwIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
ICAgICAKKyAgICBOb2RlKiBnZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldExvYWRFbGltaW5hdGlvbih1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiBiYXNlKQorICAgIHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKKyAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAobm9kZSA9PSBi
YXNlKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6CisgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpID09IGJhc2UKKyAgICAgICAgICAgICAgICAg
ICAgJiYgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRh
SW5kZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgorICAgICAgICAg
ICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKKyAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxhdGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4g
YXJyYXkgd2l0aCBhbgorICAgICAgICAgICAgICAgICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVu
IGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1c2UgYSBzdHJ1Y3R1cmUKKyAgICAgICAgICAg
ICAgICAgICAgLy8gY2hhbmdlLgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJz
V29ybGQobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICAKICAgICBOb2RlKiBwdXRCeU9mZnNldFN0b3JlRWxpbWluYXRpb24odW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogY2hpbGQxKQogICAgIHsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKQEAgLTg0NSwyNSArODc5LDE4IEBA
IHByaXZhdGU6CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlKiBnZXRU
eXBlZEFycmF5Qnl0ZU9mZnNldExvYWRFbGltaW5hdGlvbihOb2RlKiBjaGlsZDEpCisgICAgTm9k
ZSogZ2V0SW50ZXJuYWxGaWVsZExvYWRFbGltaW5hdGlvbihOb2RlVHlwZSBvcCwgTm9kZSogY2hp
bGQxKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGkt
LTspIHsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CiAg
ICAgICAgICAgICBpZiAobm9kZSA9PSBjaGlsZDEpIAogICAgICAgICAgICAgICAgIGJyZWFrOwog
Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0
VHlwZWRBcnJheUJ5dGVPZmZzZXQ6IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCkgPT0gY2hpbGQxKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgp
ID09IG9wKCkgJiYgbm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxKQorICAgICAgICAgICAgICAgIHJl
dHVybiBub2RlOwogCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0xNDAxLDEwICsxNDI4LDEy
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQ6IHsKKyAgICAgICAgY2FzZSBH
ZXRUeXBlZEFycmF5Qnl0ZU9mZnNldDoKKyAgICAgICAgY2FzZSBHZXRHZXR0ZXI6CisgICAgICAg
IGNhc2UgR2V0U2V0dGVyOiB7CiAgICAgICAgICAgICBpZiAoY3NlTW9kZSA9PSBTdG9yZUVsaW1p
bmF0aW9uKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgc2V0UmVwbGFjZW1l
bnQoZ2V0VHlwZWRBcnJheUJ5dGVPZmZzZXRMb2FkRWxpbWluYXRpb24obm9kZS0+Y2hpbGQxKCku
bm9kZSgpKSk7CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRJbnRlcm5hbEZpZWxkTG9h
ZEVsaW1pbmF0aW9uKG5vZGUtPm9wKCksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTQyMCw2ICsxNDQ5LDEyIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRCeU9mZnNldExvYWRFbGltaW5hdGlvbiht
X2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgp
XS5pZGVudGlmaWVyTnVtYmVyLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZz
ZXQ6CisgICAgICAgICAgICBpZiAoY3NlTW9kZSA9PSBTdG9yZUVsaW1pbmF0aW9uKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0R2V0dGVyU2V0
dGVyQnlPZmZzZXRMb2FkRWxpbWluYXRpb24obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25v
ZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciwgbm9kZS0+Y2hp
bGQyKCkubm9kZSgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CiAgICAgICAgICAgICBpZiAoY3NlTW9kZSA9PSBTdG9y
ZUVsaW1pbmF0aW9uKQogICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTMsNiArMjEzLDE0IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUK
ICAgICAgICAgd3JpdGUoV29ybGQpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGNh
c2UgR2V0R2V0dGVyOgorICAgICAgICByZWFkKEdldHRlclNldHRlcl9nZXR0ZXIpOworICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgR2V0U2V0dGVyOgorICAgICAgICByZWFkKEdl
dHRlclNldHRlcl9zZXR0ZXIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAogICAgIGNhc2Ug
R2V0Q2FsbGVlOgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6
OkNhbGxlZSkpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4NSw3
ICs4ODUsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldENsb3N1cmVSZWdpc3RlcnM6CiAg
ICAgICAgIGNhc2UgU2tpcFRvcFNjb3BlOgogICAgICAgICBjYXNlIFNraXBTY29wZToKLSAgICAg
ICAgY2FzZSBHZXRTY29wZTogeworICAgICAgICBjYXNlIEdldFNjb3BlOgorICAgICAgICBjYXNl
IEdldEdldHRlcjoKKyAgICAgICAgY2FzZSBHZXRTZXR0ZXI6IHsKICAgICAgICAgICAgIGZpeEVk
Z2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQpAQCAtOTQ1LDcgKzk0Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKKyAg
ICAgICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9m
ZnNldDogewogICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3Vs
dCgpKQogICAgICAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQyKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJl
dmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTcsNyArNDE3LDcgQEAgdm9pZCBKSVRDb21waWxl
cjo6bGlua0Z1bmN0aW9uKCkKICAgICBtX2ppdENvZGUtPnNocmlua1RvRml0KCk7CiAgICAgY29k
ZUJsb2NrKCktPnNocmlua1RvRml0KENvZGVCbG9jazo6TGF0ZVNocmluayk7CiAgICAgCi0gICAg
bGlua0J1ZmZlci0+bGluayhtX2NhbGxBcml0eUZpeHVwLCBGdW5jdGlvblB0cigobV92bS0+Z2V0
Q1RJU3R1Yihhcml0eUZpeHVwKSkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICBs
aW5rQnVmZmVyLT5saW5rKG1fY2FsbEFyaXR5Rml4dXAsIEZ1bmN0aW9uUHRyKChtX3ZtLT5nZXRD
VElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkp
OwogICAgIAogICAgIGRpc2Fzc2VtYmxlKCpsaW5rQnVmZmVyKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYs
NyArMTc2LDEwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhH
ZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBOb2RlUmVzdWx0U3RvcmFnZSkgXAogICAgIG1hY3Jv
KENvbnN0YW50U3RvcmFnZVBvaW50ZXIsIE5vZGVSZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFjcm8o
VHlwZWRBcnJheVdhdGNocG9pbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhHZXRH
ZXR0ZXIsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEdldFNldHRlciwgTm9kZVJlc3VsdEpT
KSBcCiAgICAgbWFjcm8oR2V0QnlPZmZzZXQsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEdl
dEdldHRlclNldHRlckJ5T2Zmc2V0LCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhNdWx0aUdl
dEJ5T2Zmc2V0LCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhQdXRCeU9mZnNldCwgTm9kZU11
c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKE11bHRpUHV0QnlPZmZzZXQsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA4LDEyICsxMDgsNDQgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxs
SGVscGVycwogICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJs
b2NrID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pOwogICAgICAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKTsKKyAgICAgICAgdm9pZCoganVtcFRhcmdldDsK
KyAgICAgICAgdm9pZCogdHJ1ZVJldHVyblBDID0gbnVsbHB0cjsKKyAgICAgICAgCiAgICAgICAg
IHVuc2lnbmVkIGNhbGxCeXRlY29kZUluZGV4ID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuYnl0
ZWNvZGVJbmRleDsKLSAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPQotICAgICAg
ICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5mb0ZvckJ5dGVj
b2RlSW5kZXgoY2FsbEJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxs
TGlua0luZm8pOwogICAgICAgICAKLSAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IGNhbGxMaW5r
SW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIHN3
aXRjaCAoaW5saW5lQ2FsbEZyYW1lLT5raW5kKSB7CisgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZy
YW1lOjpDYWxsOgorICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0OiB7Cisg
ICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9CisgICAgICAgICAgICAgICAg
YmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5k
ZXgoY2FsbEJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExp
bmtJbmZvKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAganVtcFRhcmdldCA9IGNhbGxMaW5r
SW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgSW5saW5lQ2Fs
bEZyYW1lOjpHZXR0ZXJDYWxsOgorICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6U2V0dGVy
Q2FsbDogeworICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0KKyAgICAg
ICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+ZmluZFN0dWJJbmZvKENvZGVP
cmlnaW4oY2FsbEJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0
dWJJbmZvKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChpbmxpbmVDYWxsRnJh
bWUtPmtpbmQpIHsKKyAgICAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpHZXR0ZXJDYWxs
OgorICAgICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBqaXQudm0oKS0+Z2V0Q1RJU3R1YihiYXNl
bGluZUdldHRlclJldHVyblRodW5rR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZy
YW1lOjpTZXR0ZXJDYWxsOgorICAgICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBqaXQudm0oKS0+
Z2V0Q1RJU3R1YihiYXNlbGluZVNldHRlclJldHVyblRodW5rR2VuZXJhdG9yKS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgdHJ1ZVJldHVyblBDID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KAorICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0RvbmUp
LmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSB9CiAK
ICAgICAgICAgR1BSUmVnIGNhbGxlckZyYW1lR1BSOwogICAgICAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lKSB7CkBAIC0xMjIsMTIgKzE1NCwxNSBAQCB2b2lk
IHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgY2FsbGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcjsKICAg
ICAgICAgCisgICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoanVtcFRhcmdldCksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5s
aW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpKSk7CisgICAgICAgIGlmICh0cnVlUmV0dXJu
UEMpCisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKHRydWVSZXR1cm5QQyksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQo
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkub2Zmc2V0KCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBqaXQuc3RvcmVQ
dHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrKSwgQXNz
ZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDb2RlQmxvY2spKSk7CiAgICAgICAgIGlmICghaW5s
aW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQogICAgICAgICAgICAgaml0LnN0b3JlNjQoQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoaW5saW5l
Q2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpLT5zY29wZSgpKSkpLCBBc3NlbWJseUhlbHBlcnM6
OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKSk7CiAgICAgICAgIGppdC5zdG9yZTY0KGNhbGxlckZy
YW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxG
cmFtZS0+Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwotICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1i
bHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBBc3NlbWJseUhlbHBlcnM6OmFk
ZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSkpOwog
ICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNv
ZGVBc0J5dGVjb2RlT2Zmc2V0KGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIGpp
dC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFz
c2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwogICAgICAgICBqaXQuc3Rv
cmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50cy5zaXplKCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3Rl
cikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQp
KSk7CkBAIC0xNDMsNyArMTc4LDYgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxs
SGVscGVycwogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKICAg
ICAgICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaW5s
aW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpLT5zY29wZSgpKSwgQXNzZW1ibHlIZWxwZXJz
OjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBKU1N0YWNrOjpTY29wZUNoYWluKSkpOwogICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVy
RnJhbWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2Fs
bEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNldCgpKSk7Ci0gICAgICAgIGppdC5zdG9yZVB0cihBc3Nl
bWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpKSk7
CiAgICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGJhc2VsaW5lQ29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKS5iZWdpbigpICsgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4OwogICAgICAg
ICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5
dGVjb2RlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pOwogICAgICAgICBqaXQuc3RvcmUzMihBc3Nl
bWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6
OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
SlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDYgKzE4OCwyMCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG5vZGUtPmdl
dEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OiB7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0NlbGxPdGhlcik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgR2V0R2V0dGVyOgorICAgICAgICBj
YXNlIEdldFNldHRlcjoKKyAgICAgICAgY2FzZSBHZXRDYWxsZWU6CisgICAgICAgIGNhc2UgTmV3
RnVuY3Rpb25Ob0NoZWNrOgorICAgICAgICBjYXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjogewor
ICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNGdW5jdGlvbik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQogCiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVB
dDogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMik7CkBA
IC00MjMsMTEgKzQzNyw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0Q2FsbGVlOiB7Ci0gICAgICAgICAgICBj
aGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0Z1bmN0aW9uKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAgICAgY2FzZSBDcmVhdGVUaGlzOgogICAg
ICAgICBjYXNlIE5ld09iamVjdDogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0
aW9uKFNwZWNGaW5hbE9iamVjdCk7CkBAIC00OTAsMTIgKzQ5OSw2IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTmV3
RnVuY3Rpb25Ob0NoZWNrOgotICAgICAgICBjYXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjogewot
ICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNGdW5jdGlvbik7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgUHV0
QnlWYWxBbGlhczoKICAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKICAgICAgICAgY2FzZSBH
ZXRUeXBlZEFycmF5Qnl0ZU9mZnNldDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDYg
KzI1Myw4IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBj
YXNlIFZhbHVlUmVwOgogICAgIGNhc2UgRG91YmxlUmVwOgogICAgIGNhc2UgSW50NTJSZXA6Cisg
ICAgY2FzZSBHZXRHZXR0ZXI6CisgICAgY2FzZSBHZXRTZXR0ZXI6CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAKICAgICBjYXNlIEdldEJ5VmFsOgpAQCAtMjg1LDYgKzI4Nyw3IEBAIGJv
b2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICAgICAgICAgIFN0cnVj
dHVyZVNldChub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJl
KSk7CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgY2FzZSBHZXRHZXR0ZXJT
ZXR0ZXJCeU9mZnNldDoKICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgogICAgICAgICByZXR1cm4gc3Rh
dGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNWYWxp
ZE9mZnNldCgKICAgICAgICAgICAgIGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3Rv
cmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5vZmZzZXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAx
NjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzkyLDYgKzM3OTIsNDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIAorICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6IHsKKyAgICAgICAgU3RvcmFn
ZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIHN0b3Jh
Z2VHUFIgPSBzdG9yYWdlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9
IHJlc3VsdFBheWxvYWQuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBTdG9yYWdlQWNjZXNzRGF0
YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBtX2ppdC5ncmFwaCgpLm1fc3RvcmFnZUFjY2Vzc0RhdGFb
bm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsKKyAgICAgICAgCisgICAgICAgIG1faml0
LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRv
QmFzZShzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWRHUFIpOworICAg
ICAgICAKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRQYXlsb2FkR1BSLCBub2RlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEdldEdldHRlcjogeworICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBvcDEpOworICAgICAgICAKKyAgICAg
ICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OkFkZHJlc3Mob3AxR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mR2V0dGVyKCkpLCByZXN1
bHRHUFIpOworICAgICAgICAKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgR2V0U2V0dGVyOiB7Cisg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIG9wMSk7CisgICAgICAgIAor
ICAgICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRD
b21waWxlcjo6QWRkcmVzcyhvcDFHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZTZXR0ZXIoKSks
IHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9k
ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBQdXRCeU9mZnNl
dDogewogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODUzLDcgKzM4NTMsOCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBHZXRCeU9mZnNldDogeworICAgIGNhc2UgR2V0
QnlPZmZzZXQ6CisgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDogewogICAgICAgICBT
dG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgc3RvcmFnZSk7CiAgICAgICAgIApAQCAtMzg2
OCw2ICszODY5LDMyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIEdldEdldHRlcjogewor
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBvcDEpOworICAgICAgICAK
KyAgICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmxvYWRQdHIoSklU
Q29tcGlsZXI6OkFkZHJlc3Mob3AxR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mR2V0dGVyKCkp
LCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5v
ZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgR2V0U2V0dGVy
OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIG9wMSk7CisgICAg
ICAgIAorICAgICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZFB0
cihKSVRDb21waWxlcjo6QWRkcmVzcyhvcDFHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZTZXR0
ZXIoKSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBQdXRC
eU9mZnNldDogewogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQz
KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBv
c2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Niw2ICs0Niw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNy
byhCdXR0ZXJmbHlfcHVibGljTGVuZ3RoLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3Ro
KCkpIFwKICAgICBtYWNybyhCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mVmVjdG9yTGVuZ3RoKCkpIFwKICAgICBtYWNybyhDYWxsRnJhbWVfY2FsbGVyRnJhbWUsIENh
bGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkgXAorICAgIG1hY3JvKEdldHRlclNldHRlcl9n
ZXR0ZXIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZHZXR0ZXIoKSkgXAorICAgIG1hY3JvKEdldHRl
clNldHRlcl9zZXR0ZXIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZTZXR0ZXIoKSkgXAogICAgIG1h
Y3JvKEpTQXJyYXlCdWZmZXJWaWV3X2xlbmd0aCwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9m
TGVuZ3RoKCkpIFwKICAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld19tb2RlLCBKU0FycmF5QnVm
ZmVyVmlldzo6b2Zmc2V0T2ZNb2RlKCkpIFwKICAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld192
ZWN0b3IsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAx
NjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDkgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBj
YW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgTmV3QXJyYXk6CiAgICAgY2FzZSBOZXdBcnJheUJ1
ZmZlcjoKICAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlP
ZmZzZXQ6CisgICAgY2FzZSBHZXRHZXR0ZXI6CisgICAgY2FzZSBHZXRTZXR0ZXI6CiAgICAgY2Fz
ZSBQdXRCeU9mZnNldDoKICAgICBjYXNlIEdldEdsb2JhbFZhcjoKICAgICBjYXNlIFB1dEdsb2Jh
bFZhcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkocmV2aXNpb24g
MTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAKICAg
ICAgICAgbGlua0J1ZmZlciA9IGFkb3B0UHRyKG5ldyBMaW5rQnVmZmVyKHZtLCAmaml0LCBjb2Rl
QmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpKTsKICAgICAgICAgbGlua0J1ZmZlci0+
bGluayhjYWxsQXJpdHlDaGVjaywgY29kZUJsb2NrLT5tX2lzQ29uc3RydWN0b3IgPyBvcGVyYXRp
b25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2spOwotICAgICAg
ICBsaW5rQnVmZmVyLT5saW5rKGNhbGxBcml0eUZpeHVwLCBGdW5jdGlvblB0cigodm0uZ2V0Q1RJ
U3R1Yihhcml0eUZpeHVwKSkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAg
bGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1cCwgRnVuY3Rpb25QdHIoKHZtLmdldENUSVN0
dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAg
ICAgICAgIGxpbmtCdWZmZXItPmxpbmsobWFpblBhdGhKdW1wcywgQ29kZUxvY2F0aW9uTGFiZWwo
Yml0d2lzZV9jYXN0PHZvaWQqPihzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbikpKTsKIAogICAgICAg
ICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFsaXplQWRkcmVzc0ZvckNhbGwoTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24pKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5Myw4ICs0OTMsMTUgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGNvbXBpbGVTdHJpbmdDaGFyQ29kZUF0KCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBHZXRHZXR0ZXJT
ZXR0ZXJCeU9mZnNldDoKICAgICAgICAgICAgIGNvbXBpbGVHZXRCeU9mZnNldCgpOwogICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0R2V0dGVyOgorICAgICAgICAgICAgY29tcGls
ZUdldEdldHRlcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0U2V0dGVy
OgorICAgICAgICAgICAgY29tcGlsZUdldFNldHRlcigpOworICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKICAgICAgICAgICAgIGNvbXBpbGVNdWx0aUdl
dEJ5T2Zmc2V0KCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTMxNDEsNiArMzE0OCwxNiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMSgpKSwgZGF0YS5p
ZGVudGlmaWVyTnVtYmVyLCBkYXRhLm9mZnNldCkpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGNv
bXBpbGVHZXRHZXR0ZXIoKQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRy
KGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1faGVhcHMuR2V0dGVyU2V0dGVyX2dldHRlcikp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRTZXR0ZXIoKQorICAgIHsKKyAgICAg
ICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1f
aGVhcHMuR2V0dGVyU2V0dGVyX3NldHRlcikpOworICAgIH0KKyAgICAKICAgICB2b2lkIGNvbXBp
bGVNdWx0aUdldEJ5T2Zmc2V0KCkKICAgICB7CiAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2Vs
bChtX25vZGUtPmNoaWxkMSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNj
ZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0FjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDE2OTAxNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUu
aAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmly
dHVhbCBib29sIHZpc2l0V2VhayhSZXBhdGNoQnVmZmVyJikgb3ZlcnJpZGU7CiAgICAgCi1wcml2
YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvOwog
fTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTY5MDE0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NzAsNyArNTcwLDcgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQog
I2VuZGlmCiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtLT5hcml0eUNoZWNrRmFpbFJl
dHVyblRodW5rcy0+cmV0dXJuUENzRm9yKCptX3ZtLCBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpKSksIHRodW5rUmVnKTsKICAgICAgICAgbG9hZFB0cihCYXNlSW5kZXgodGh1bmtSZWcsIHJl
Z1QwLCB0aW1lc1B0cigpKSwgdGh1bmtSZWcpOwotICAgICAgICBlbWl0TmFrZWRDYWxsKG1fdm0t
PmdldENUSVN0dWIoYXJpdHlGaXh1cCkuY29kZSgpKTsKKyAgICAgICAgZW1pdE5ha2VkQ2FsbCht
X3ZtLT5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpLmNvZGUoKSk7CiAKICNpZiAhQVNT
RVJUX0RJU0FCTEVECiAgICAgICAgIG1fYnl0ZWNvZGVPZmZzZXQgPSAodW5zaWduZWQpLTE7IC8v
IFJlc2V0IHRoaXMsIGluIG9yZGVyIHRvIGd1YXJkIGl0cyB1c2Ugd2l0aCBBU1NFUlRzLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2
aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzAsNyArNDMwLDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIG5hdGl2ZUNvbnN0cnVjdEdlbgogICAgIHJldHVybiBuYXRpdmVGb3JHZW5lcmF0b3Io
dm0sIENvZGVGb3JDb25zdHJ1Y3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJpdHlG
aXh1cChWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJpdHlGaXh1cEdlbmVyYXRvcihW
TSogdm0pCiB7CiAgICAgSlNJbnRlcmZhY2VKSVQgaml0KHZtKTsKIApAQCAtNTMzLDYgKzUzMyw4
MyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJpdHlGaXh1cChWTSogdm0pCiAgICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiZml4dXAgYXJpdHkiKSk7CiB9CiAKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBiYXNlbGluZUdldHRlclJldHVyblRodW5rR2VuZXJhdG9yKFZNKiB2
bSkKK3sKKyAgICBKU0ludGVyZmFjZUpJVCBqaXQodm0pOworICAgIAorI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgaml0LnNldHVwUmVzdWx0cyhHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDAp
OworI2Vsc2UKKyAgICBqaXQuc2V0dXBSZXN1bHRzKEdQUkluZm86OnJlZ1QwKTsKKyNlbmRpZgor
ICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mUGFyYW1ldGVycyA9IDA7CisgICAgbnVtYmVyT2ZQ
YXJhbWV0ZXJzKys7IC8vIFRoZSAndGhpcycgYXJndW1lbnQuCisgICAgbnVtYmVyT2ZQYXJhbWV0
ZXJzKys7IC8vIFRoZSB0cnVlIHJldHVybiBQQy4KKyAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJP
ZlJlZ3NGb3JDYWxsID0KKyAgICAgICAgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIG51
bWJlck9mUGFyYW1ldGVyczsKKyAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzRm9yQ2Fs
bCA9CisgICAgICAgIG51bWJlck9mUmVnc0ZvckNhbGwgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpOworICAgIAorICAgIHVuc2lnbmVkIGFsaWduZWROdW1iZXJP
ZkJ5dGVzRm9yQ2FsbCA9CisgICAgICAgIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0Fs
aWdubWVudEJ5dGVzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsKKyAgICAgICAgICAgIAorICAg
IC8vIFRoZSByZWFsIHJldHVybiBhZGRyZXNzIGlzIHN0b3JlZCBhYm92ZSB0aGUgYXJndW1lbnRz
LiBXZSBwYXNzZWQgb25lIGFyZ3VtZW50LCB3aGljaCBpcworICAgIC8vICd0aGlzJy4gU28gYXJn
dW1lbnQgYXQgaW5kZXggMSBpcyB0aGUgcmV0dXJuIGFkZHJlc3MuCisgICAgaml0LmxvYWRQdHIo
CisgICAgICAgIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEFzc2VtYmx5
SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsCisgICAgICAgICAgICAodmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoMSkub2Zmc2V0KCkgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6
ZSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwKKyAgICAgICAgR1BSSW5mbzo6cmVnVDIpOworICAgIAor
ICAgIGppdC5hZGRQdHIoCisgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGFs
aWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCksCisgICAgICAgIEFzc2VtYmx5SGVscGVyczo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOworICAgIAorICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QyKTsK
KworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQp
OworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoImJhc2VsaW5lIGdldHRl
ciByZXR1cm4gdGh1bmsiKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBiYXNlbGluZVNl
dHRlclJldHVyblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK3sKKyAgICBKU0ludGVyZmFjZUpJVCBq
aXQodm0pOworICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mUGFyYW1ldGVycyA9IDA7CisgICAg
bnVtYmVyT2ZQYXJhbWV0ZXJzKys7IC8vIFRoZSAndGhpcycgYXJndW1lbnQuCisgICAgbnVtYmVy
T2ZQYXJhbWV0ZXJzKys7IC8vIFRoZSB2YWx1ZSB0byBzZXQuCisgICAgbnVtYmVyT2ZQYXJhbWV0
ZXJzKys7IC8vIFRoZSB0cnVlIHJldHVybiBQQy4KKyAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJP
ZlJlZ3NGb3JDYWxsID0KKyAgICAgICAgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIG51
bWJlck9mUGFyYW1ldGVyczsKKyAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzRm9yQ2Fs
bCA9CisgICAgICAgIG51bWJlck9mUmVnc0ZvckNhbGwgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpOworICAgIAorICAgIHVuc2lnbmVkIGFsaWduZWROdW1iZXJP
ZkJ5dGVzRm9yQ2FsbCA9CisgICAgICAgIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0Fs
aWdubWVudEJ5dGVzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsKKyAgICAgICAgICAgIAorICAg
IC8vIFRoZSByZWFsIHJldHVybiBhZGRyZXNzIGlzIHN0b3JlZCBhYm92ZSB0aGUgYXJndW1lbnRz
LiBXZSBwYXNzZWQgdHdvIGFyZ3VtZW50cywgc28KKyAgICAvLyB0aGUgYXJndW1lbnQgYXQgaW5k
ZXggMiBpcyB0aGUgcmV0dXJuIGFkZHJlc3MuCisgICAgaml0LmxvYWRQdHIoCisgICAgICAgIEFz
c2VtYmx5SGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsCisgICAgICAgICAgICAodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoMikub2Zmc2V0KCkgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwKKyAgICAgICAgR1BSSW5mbzo6cmVnVDIpOworICAgIAorICAgIGppdC5hZGRQ
dHIoCisgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJP
ZkJ5dGVzRm9yQ2FsbCksCisgICAgICAgIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgIAorICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QyKTsKKworICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoImJhc2VsaW5lIHNldHRlciByZXR1cm4gdGh1
bmsiKSk7Cit9CisKIHN0YXRpYyB2b2lkIHN0cmluZ0NoYXJMb2FkKFNwZWNpYWxpemVkVGh1bmtK
SVQmIGppdCwgVk0qIHZtKQogewogICAgIC8vIGxvYWQgc3RyaW5nCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHJldmlzaW9uIDE2OTAxNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExMyw3ICsxMTMsMTAgQEAgaW5saW5lIFRodW5rR2VuZXJhdG9yIHZpcnR1YWxUaHVu
a0dlbmVyYQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0qKTsK
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qKTsKIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVUYWlsQ2FsbEdlbmVyYXRvcihWTSopOwotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGFyaXR5Rml4dXAoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBh
cml0eUZpeHVwR2VuZXJhdG9yKFZNKik7CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBiYXNlbGlu
ZUdldHRlclJldHVyblRodW5rR2VuZXJhdG9yKFZNKiB2bSk7CitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgYmFzZWxpbmVTZXR0ZXJSZXR1cm5UaHVua0dlbmVyYXRvcihWTSogdm0pOwogCiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKFZNKik7CiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgY2hhckF0VGh1bmtHZW5lcmF0b3IoVk0qKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24g
MTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDcgKzE3MCw3IEBAIHN0YXRpYyBDb21tb25TbG93
UGF0aHM6OkFyaXR5Q2hlY2tEYXRhKiAKICAgICByZXN1bHQtPnBhZGRlZFN0YWNrU3BhY2UgPSBz
bG90c1RvQWRkOwogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKHZtLmNhblVzZUpJVCgpKSB7Ci0g
ICAgICAgIHJlc3VsdC0+dGh1bmtUb0NhbGwgPSB2bS5nZXRDVElTdHViKGFyaXR5Rml4dXApLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICByZXN1bHQtPnRodW5rVG9DYWxsID0g
dm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKICAgICAgICAgcmVzdWx0LT5yZXR1cm5QQyA9IHZtLmFyaXR5Q2hlY2tGYWlsUmV0dXJu
VGh1bmtzLT5yZXR1cm5QQ0Zvcih2bSwgc2xvdHNUb0FkZCAqIHN0YWNrQWxpZ25tZW50UmVnaXN0
ZXJzKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBlbHNlCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL0JhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JhZy5oCShy
ZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkod29ya2luZyBjb3B5KQpA
QCAtODMsNiArODMsMTEgQEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4g
bV9ub2RlID09IG90aGVyLm1fbm9kZTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CiAgICAgcHJpdmF0
ZToKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gZnJpZW5kIGNsYXNzIFdURjo6QmFnOwog
ICAgICAgICBOb2RlKiBtX25vZGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231748</attachid>
            <date>2014-05-19 19:13:44 -0700</date>
            <delta_ts>2014-05-20 18:11:25 -0700</delta_ts>
            <desc>it&apos;s back to compiling</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>77404</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUyLDExICszNTIsNiBAQCB2b2lkIENvZGVCbG9j
azo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAgICAgb3V0LnByaW50Zigi
c2VsZiIpOwogICAgICAgICAgICAgICAgIGJhc2VTdHJ1Y3R1cmUgPSBzdHViSW5mby51LmdldEJ5
SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW46Ci0gICAgICAgICAgICAg
ICAgb3V0LnByaW50ZigiY2hhaW4iKTsKLSAgICAgICAgICAgICAgICBiYXNlU3RydWN0dXJlID0g
c3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKLSAgICAg
ICAgICAgICAgICBjaGFpbiA9IHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lk
X2xpc3Q6CiAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigibGlzdCIpOwogICAgICAgICAgICAg
ICAgIGxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7CkBAIC0yMzQ0LDYgKzIzMzks
MTUgQEAgU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6YWRkU3R1YkluZgogICAgIHJldHVy
biBtX3N0dWJJbmZvcy5hZGQoKTsKIH0KIAorU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6
ZmluZFN0dWJJbmZvKENvZGVPcmlnaW4gY29kZU9yaWdpbikKK3sKKyAgICBmb3IgKFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA6IG1fc3R1YkluZm9zKSB7CisgICAgICAgIGlmIChzdHViSW5m
by0+Y29kZU9yaWdpbiA9PSBjb2RlT3JpZ2luKQorICAgICAgICAgICAgcmV0dXJuIHN0dWJJbmZv
OworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogQ2FsbExpbmtJbmZvKiBDb2RlQmxv
Y2s6OmFkZENhbGxMaW5rSW5mbygpCiB7CiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
bV9sb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDYgKzIwMSwxMCBAQCBwdWJsaWM6CiAg
ICAgU3RydWN0dXJlU3R1YkluZm8qIGFkZFN0dWJJbmZvKCk7CiAgICAgQmFnPFN0cnVjdHVyZVN0
dWJJbmZvPjo6aXRlcmF0b3Igc3R1YkluZm9CZWdpbigpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmJl
Z2luKCk7IH0KICAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBzdHViSW5mb0Vu
ZCgpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmVuZCgpOyB9CisgICAgCisgICAgLy8gTyhuKSBvcGVy
YXRpb24uIFVzZSBnZXRTdHViSW5mb01hcCgpIHVubGVzcyB5b3UgcmVhbGx5IG9ubHkgaW50ZW5k
IHRvIGdldCBvbmUKKyAgICAvLyBzdHViIGluZm8uCisgICAgU3RydWN0dXJlU3R1YkluZm8qIGZp
bmRTdHViSW5mbyhDb2RlT3JpZ2luKTsKIAogICAgIHZvaWQgcmVzZXRTdHViKFN0cnVjdHVyZVN0
dWJJbmZvJik7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZU9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw2ICsyMDYs
MTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQwogICAgIGNhc2Ug
SlNDOjpJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKICAgICAgICAgb3V0LnByaW50KCJDb25z
dHJ1Y3QiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6
OkdldHRlckNhbGw6CisgICAgICAgIG91dC5wcmludCgiR2V0dGVyQ2FsbCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBKU0M6OklubGluZUNhbGxGcmFtZTo6U2V0dGVyQ2FsbDoKKyAgICAg
ICAgb3V0LnByaW50KCJTZXR0ZXJDYWxsIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAt
MTIxLDYgKzEyMSwxMSBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICBlbnVtIEtpbmQg
ewogICAgICAgICBDYWxsLAogICAgICAgICBDb25zdHJ1Y3QsCisgICAgICAgIAorICAgICAgICAv
LyBGb3IgdGhlc2UsIHRoZSBzdGFja09mZnNldCBpbmNvcnBvcmF0ZXMgdGhlIGFyZ3VtZW50IGNv
dW50IHBsdXMgdGhlIHRydWUgcmV0dXJuIFBDCisgICAgICAgIC8vIHNsb3QuCisgICAgICAgIEdl
dHRlckNhbGwsCisgICAgICAgIFNldHRlckNhbGwKICAgICB9OwogICAgIAogICAgIHN0YXRpYyBL
aW5kIGtpbmRGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQpAQCAtMTM5LDYgKzE0NCw4
IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5k
KSB7CiAgICAgICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgY2FzZSBHZXR0ZXJDYWxsOgorICAgICAg
ICBjYXNlIFNldHRlckNhbGw6CiAgICAgICAgICAgICByZXR1cm4gQ29kZUZvckNhbGw7CiAgICAg
ICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICAgICAgcmV0dXJuIENvZGVGb3JDb25zdHJ1Y3Q7
CkBAIC0xNTMsNyArMTYwLDcgQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgQ29kZU9y
aWdpbiBjYWxsZXI7CiAgICAgQml0VmVjdG9yIGNhcHR1cmVkVmFyczsgLy8gSW5kZXhlZCBieSB0
aGUgbWFjaGluZSBjYWxsIGZyYW1lJ3MgdmFyaWFibGUgbnVtYmVyaW5nLgogICAgIHNpZ25lZCBz
dGFja09mZnNldCA6IDMwOwotICAgIEtpbmQga2luZCA6IDE7CisgICAgS2luZCBraW5kIDogMjsK
ICAgICBib29sIGlzQ2xvc3VyZUNhbGwgOiAxOyAvLyBJZiBmYWxzZSB0aGVuIHdlIGtub3cgdGhh
dCBjYWxsZWUvc2NvcGUgYXJlIGNvbnN0YW50cyBhbmQgdGhlIERGRyB3b24ndCB0cmVhdCB0aGVt
IGFzIHZhcmlhYmxlcywgaS5lLiB0aGV5IGhhdmUgdG8gYmUgcmVjb3ZlcmVkIG1hbnVhbGx5Lgog
ICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNSZWdpc3RlcjsgLy8gVGhpcyBpcyBvbmx5IHNl
dCBpZiB0aGUgY29kZSB1c2VzIGFyZ3VtZW50cy4gVGhlIHVubW9kaWZpZWQgYXJndW1lbnRzIHJl
Z2lzdGVyIGZvbGxvd3MgdGhlIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcigpIGNvbnZlbnRp
b24gKHNlZSBDb2RlQmxvY2suaCkuCiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJH
ZXRCeUlkU3RhdHVzLmgiCiAKKyNpbmNsdWRlICJBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5o
IgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNs
dWRlICJKU1Njb3BlLmgiCkBAIC04OSw1NyArOTAsNiBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRT
dGF0dXM6OmNvbXB1dGVGcm9tCiAjZW5kaWYKIH0KIAotYm9vbCBHZXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yQ2hhaW4oQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJpbmdJbXBsKiB1aWQsIFBh
c3NSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gcGFzc2VkQ2hhaW4pCi17Ci0jaWYgRU5B
QkxFKEpJVCkKLSAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gY2hhaW4gPSBwYXNz
ZWRDaGFpbjsKLSAgICAKLSAgICAvLyBWYWxpZGF0ZSB0aGUgY2hhaW4uIElmIHRoZSBjaGFpbiBp
cyBpbnZhbGlkLCB0aGVuIGN1cnJlbnRseSB0aGUgYmVzdCB0aGluZwotICAgIC8vIHdlIGNhbiBk
byBpcyB0byBhc3N1bWUgdGhhdCBUYWtlc1Nsb3cgaXMgdHJ1ZS4gSW4gdGhlIGZ1dHVyZSwgaXQg
bWlnaHQgYmUKLSAgICAvLyB3b3J0aCBleHBsb3JpbmcgcmVpZnlpbmcgdGhlIHN0cnVjdHVyZSBj
aGFpbiBmcm9tIHRoZSBzdHJ1Y3R1cmUgd2UndmUgZ290Ci0gICAgLy8gaW5zdGVhZCBvZiB1c2lu
ZyB0aGUgb25lIGZyb20gdGhlIGNhY2hlLCBzaW5jZSB0aGF0IHdpbGwgZG8gdGhlIHJpZ2h0IHRo
aW5ncwotICAgIC8vIGlmIHRoZSBzdHJ1Y3R1cmUgY2hhaW4gaGFzIGNoYW5nZWQuIEJ1dCB0aGF0
IG1heSBiZSBoYXJkZXIsIGJlY2F1c2Ugd2UgbWF5Ci0gICAgLy8gdGhlbiBlbmQgdXAgaGF2aW5n
IGEgZGlmZmVyZW50IHR5cGUgb2YgYWNjZXNzIGFsdG9nZXRoZXIuIEFuZCBpdCBjdXJyZW50bHkK
LSAgICAvLyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd29ydGggaXQgdG8gZG8gc28gLS0gZWZmZWN0
aXZlbHksIHRoZSBoZXVyaXN0aWMgd2UKLSAgICAvLyBoYXZlIG5vdyBpcyB0aGF0IGlmIHRoZSBz
dHJ1Y3R1cmUgY2hhaW4gaGFzIGNoYW5nZWQgYmV0d2VlbiB3aGVuIGl0IHdhcwotICAgIC8vIGNh
Y2hlZCBvbiBpbiB0aGUgYmFzZWxpbmUgSklUIGFuZCB3aGVuIHRoZSBERkcgdHJpZWQgdG8gaW5s
aW5lIHRoZSBhY2Nlc3MsCi0gICAgLy8gdGhlbiB3ZSBmYWxsIGJhY2sgb24gYSBwb2x5bW9ycGhp
YyBhY2Nlc3MuCi0gICAgaWYgKCFjaGFpbi0+aXNTdGlsbFZhbGlkKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmIChjaGFpbi0+aGVhZCgpLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJ
bXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgc2l6ZV90IGNoYWlu
U2l6ZSA9IGNoYWluLT5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGFpblNp
emU7IGkrKykgewotICAgICAgICBpZiAoY2hhaW4tPmF0KGkpLT50YWtlc1Nsb3dQYXRoSW5ERkdG
b3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0gY2hhaW4tPnRlcm1pbmFsUHJvdG90eXBlKCk7
Ci0gICAgU3RydWN0dXJlKiBjdXJyZW50U3RydWN0dXJlID0gY2hhaW4tPmxhc3QoKTsKLSAgICAK
LSAgICBBU1NFUlRfVU5VU0VEKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRPYmplY3QpOwotICAgIAot
ICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25vcmVkOwotICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1
ZTsKLSAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBjdXJyZW50U3RydWN0dXJlLT5n
ZXRDb25jdXJyZW50bHkoCi0gICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQsIGF0dHJp
YnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKLSAgICBpZiAoY3VycmVudFN0cnVjdHVyZS0+
aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwotICAgIGlmICghaXNW
YWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0
dXJuIGFwcGVuZFZhcmlhbnQoR2V0QnlJZFZhcmlhbnQoU3RydWN0dXJlU2V0KGNoYWluLT5oZWFk
KCkpLCBvZmZzZXQsIHNwZWNpZmljVmFsdWUsIGNoYWluKSk7Ci0jZWxzZSAvLyBFTkFCTEUoSklU
KQotICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKLSAgICBVTlVTRURfUEFSQU0odWlk
KTsKLSAgICBVTlVTRURfUEFSQU0ocGFzc2VkQ2hhaW4pOwotICAgIFVOUkVBQ0hBQkxFX0ZPUl9Q
TEFURk9STSgpOwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotfQot
CiBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9m
aWxlZEJsb2NrLCBTdHViSW5mb01hcCYgbWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBTdHJp
bmdJbXBsKiB1aWQpCiB7CiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIocHJvZmlsZWRC
bG9jay0+bV9sb2NrKTsKQEAgLTE0OCwxMiArOTgsMTMgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgcmVzdWx0ID0g
Y29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIG1hcC5n
ZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSksIHVpZCk7CisgICAgICAgIGxvY2tlciwgcHJv
ZmlsZWRCbG9jaywgbWFwLmdldChDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKSwgdWlkLAorICAg
ICAgICBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShsb2NrZXIsIHByb2ZpbGVk
QmxvY2ssIGJ5dGVjb2RlSW5kZXgpKTsKICAgICAKICAgICBpZiAoIXJlc3VsdC50YWtlc1Nsb3dQ
YXRoKCkKICAgICAgICAgJiYgKGhhc0V4aXRTaXRlKGxvY2tlciwgcHJvZmlsZWRCbG9jaywgYnl0
ZWNvZGVJbmRleCkKICAgICAgICAgICAgIHx8IHByb2ZpbGVkQmxvY2stPmxpa2VseVRvVGFrZVNs
b3dDYXNlKGJ5dGVjb2RlSW5kZXgpKSkKLSAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCwgdHJ1ZSk7CisgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHJlc3VsdC5t
YWtlc0NhbGxzKCkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCwgdHJ1ZSk7CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShtYXApOwogI2VuZGlmCkBAIC0xNjYsMjQgKzExNywyNCBAQCBHZXRC
eUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAKICNpZiBFTkFCTEUoSklUKQog
R2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgY29u
c3QgQ29uY3VycmVudEpJVExvY2tlciYsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvLAotICAgIFN0cmluZ0ltcGwqIHVpZCkKKyAgICBjb25zdCBD
b25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLAorICAgIFN0cmluZ0ltcGwqIHVpZCwgQ2FsbExpbmtT
dGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQogewogICAgIGlmICghc3R1Yklu
Zm8gfHwgIXN0dWJJbmZvLT5zZWVuKQogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhOb0lu
Zm9ybWF0aW9uKTsKICAgICAKLSAgICBpZiAoc3R1YkluZm8tPnJlc2V0QnlHQykKLSAgICAgICAg
cmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7Ci0KICAgICBQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gMDsKKyAgICBTdGF0ZSB0YWtlc1Nsb3dQYXRoID0gVGFr
ZXNTbG93UGF0aDsKICAgICBpZiAoc3R1YkluZm8tPmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9i
eV9pZF9saXN0KSB7CiAgICAgICAgIGxpc3QgPSBzdHViSW5mby0+dS5nZXRCeUlkTGlzdC5saXN0
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgIGlmIChsaXN0LT5hdChpKS5kb2VzQ2FsbHMoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gR2V0QnlJZFN0YXR1cyhNYWtlc0NhbGxzLCB0cnVlKTsKLSAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytp
KQorICAgICAgICAgICAgdGFrZXNTbG93UGF0aCA9IE1ha2VzQ2FsbHM7CiAgICAgfQogICAgIAor
ICAgIGlmIChzdHViSW5mby0+cmVzZXRCeUdDKQorICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1
cyh0YWtlc1Nsb3dQYXRoLCB0cnVlKTsKKyAgICAKICAgICAvLyBGaW5hbGx5IGZpZ3VyZSBvdXQg
aWYgd2UgY2FuIGRlcml2ZSBhbiBhY2Nlc3Mgc3RyYXRlZ3kuCiAgICAgR2V0QnlJZFN0YXR1cyBy
ZXN1bHQ7CiAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7CkBAIC0yMTUsOCArMTY2LDYgQEAg
R2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAKICAgICBj
YXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDogewogICAgICAgICBmb3IgKHVuc2lnbmVkIGxpc3RJ
bmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3QtPnNpemUoKTsgKytsaXN0SW5kZXgpIHsKLSAgICAg
ICAgICAgIEFTU0VSVCghbGlzdC0+YXQobGlzdEluZGV4KS5kb2VzQ2FsbHMoKSk7Ci0gICAgICAg
ICAgICAKICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbGlzdC0+YXQobGlzdElu
ZGV4KS5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBhc3NlcnQgdGhhdCB3ZSBuZXZlciBzZWUgYSBzdHJ1Y3R1cmUgdGhhdApAQCAtMjI2
LDcwICsxNzUsMTEwIEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMK
ICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzE4MTAKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNTbG93
UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2V0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCB0cnVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
R2V0QnlJZFN0YXR1cyh0YWtlc1Nsb3dQYXRoLCB0cnVlKTsKICAgICAgICAgICAgIAorICAgICAg
ICAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7CisgICAgICAgICAgICBKU0NlbGwqIHNw
ZWNpZmljVmFsdWU7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBteU9mZnNldDsKKyAgICAg
ICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKKwogICAgICAgICAg
ICAgaWYgKGxpc3QtPmF0KGxpc3RJbmRleCkuY2hhaW4oKSkgewotICAgICAgICAgICAgICAgIFJl
ZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluKAorICAgICAgICAgICAgICAgIGNoYWluID0gYWRvcHRSZWYobmV3IElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4oCiAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ss
IHN0cnVjdHVyZSwgbGlzdC0+YXQobGlzdEluZGV4KS5jaGFpbigpLAogICAgICAgICAgICAgICAg
ICAgICBsaXN0LT5hdChsaXN0SW5kZXgpLmNoYWluQ291bnQoKSkpOwotICAgICAgICAgICAgICAg
IGlmICghcmVzdWx0LmNvbXB1dGVGb3JDaGFpbihwcm9maWxlZEJsb2NrLCB1aWQsIGNoYWluKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwg
dHJ1ZSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaWYgKCFjaGFpbi0+aXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHRha2VzU2xvd1BhdGgsIHRydWUpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChjaGFpbi0+aGVhZCgpLT50YWtlc1Nsb3dQYXRo
SW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2V0
QnlJZFN0YXR1cyh0YWtlc1Nsb3dQYXRoLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBzaXplX3QgY2hhaW5TaXplID0gY2hhaW4tPnNpemUoKTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoYWluU2l6ZTsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChjaGFpbi0+YXQoaSktPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVBy
b3BlcnR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyh0
YWtlc1Nsb3dQYXRoLCB0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgSlNPYmplY3QqIGN1cnJlbnRPYmplY3QgPSBjaGFpbi0+dGVybWlu
YWxQcm90b3R5cGUoKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJlbnRTdHJ1Y3R1
cmUgPSBjaGFpbi0+bGFzdCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEFT
U0VSVF9VTlVTRUQoY3VycmVudE9iamVjdCwgY3VycmVudE9iamVjdCk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgbXlPZmZzZXQgPSBjdXJyZW50U3RydWN0dXJlLT5nZXRDb25j
dXJyZW50bHkoCisgICAgICAgICAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQs
IGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAo
Y3VycmVudFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICAgICAgICAgIHNw
ZWNpZmljVmFsdWUgPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBt
eU9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KAorICAgICAgICAgICAgICAgICAg
ICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCBhdHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNW
YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisg
ICAgICAgICAgICAgICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgCi0gICAgICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzSWdub3JlZDsKLSAgICAg
ICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0
IG15T2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAgICAg
KnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFs
dWUpOwotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAg
ICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIGlm
ICghaXNWYWxpZE9mZnNldChteU9mZnNldCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5
SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdl
dEJ5SWRTdGF0dXModGFrZXNTbG93UGF0aCwgdHJ1ZSk7CiAKLSAgICAgICAgICAgIGJvb2wgZm91
bmQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gMDsg
dmFyaWFudEluZGV4IDwgcmVzdWx0Lm1fdmFyaWFudHMuc2l6ZSgpOyArK3ZhcmlhbnRJbmRleCkg
ewotICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gcmVzdWx0Lm1fdmFy
aWFudHNbdmFyaWFudEluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5tX2NoYWlu
KQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghY2hhaW4g
JiYgIWxpc3QtPmF0KGxpc3RJbmRleCkuZG9lc0NhbGxzKCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBGb3Igbm9uLWNoYWluLCBub24tZ2V0dGVyIGFjY2Vzc2VzLCB3ZSB0cnkgdG8gZG8gc29tZSBj
b2FsZXNjaW5nLgorICAgICAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IDA7IHZhcmlhbnRJbmRleCA8IHJl
c3VsdC5tX3ZhcmlhbnRzLnNpemUoKTsgKyt2YXJpYW50SW5kZXgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSByZXN1bHQubV92YXJpYW50c1t2YXJpYW50
SW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5tX2NoYWluKQorICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgaWYgKHZhcmlhbnQubV9vZmZzZXQgIT0gbXlPZmZzZXQpCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIGlmICh2YXJpYW50Lm1fc3RydWN0dXJlU2V0LmNvbnRhaW5zKHN0cnVjdHVyZSkpCi0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFu
dC5tX29mZnNldCAhPSBteU9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lm1fc3BlY2lm
aWNWYWx1ZSAhPSBKU1ZhbHVlKHNwZWNpZmljVmFsdWUpKQotICAgICAgICAgICAgICAgICAgICB2
YXJpYW50Lm1fc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHZhcmlhbnQubV9zdHJ1
Y3R1cmVTZXQuYWRkKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlh
bnQubV9zdHJ1Y3R1cmVTZXQuY29udGFpbnMoc3RydWN0dXJlKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAo
dmFyaWFudC5tX3NwZWNpZmljVmFsdWUgIT0gSlNWYWx1ZShzcGVjaWZpY1ZhbHVlKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhcmlhbnQubV9zcGVjaWZpY1ZhbHVlID0gSlNWYWx1ZSgpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm1fc3RydWN0dXJl
U2V0LmFkZChzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoZm91bmQpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoZm91bmQpCi0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzOworICAg
ICAgICAgICAgc3dpdGNoIChsaXN0LT5hdChsaXN0SW5kZXgpLnR5cGUoKSkgeworICAgICAgICAg
ICAgY2FzZSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVJbmxpbmU6CisgICAgICAgICAgICBjYXNlIEdl
dEJ5SWRBY2Nlc3M6OlNpbXBsZVN0dWI6IHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6R2V0dGVyOiB7CisgICAg
ICAgICAgICAgICAgQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUqIHN0dWIgPSBzdGF0aWNfY2Fz
dDxBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSo+KAorICAgICAgICAgICAgICAgICAgICBsaXN0
LT5hdChsaXN0SW5kZXgpLnN0dWJSb3V0aW5lKCkpOworICAgICAgICAgICAgICAgIGNhbGxMaW5r
U3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oCisgICAgICAgICAgICAg
ICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKGxvY2tlciwgKnN0dWItPm1fY2FsbExp
bmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEdldEJ5SWRBY2Nlc3M6OkN1c3RvbUdldHRlcjog
eworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSB0b3RhbGx5IHN3ZWV0IHRv
IHN1cHBvcnQgdGhpcyBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUuCisgICAgICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzA1MgorICAg
ICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHRha2VzU2xvd1BhdGgsIHRydWUpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KEdldEJ5SWRWYXJpYW50KFN0cnVj
dHVyZVNldChzdHJ1Y3R1cmUpLCBteU9mZnNldCwgc3BlY2lmaWNWYWx1ZSkpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgsIHRydWUpOworICAgICAg
ICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCgKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVT
ZXQoc3RydWN0dXJlKSwgbXlPZmZzZXQsIHNwZWNpZmljVmFsdWUsIGNoYWluLAorICAgICAgICAg
ICAgICAgIHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1cykpOworICAgICAgICAgICAgaWYgKCFyZXN1
bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJ
ZFN0YXR1cyh0YWtlc1Nsb3dQYXRoLCB0cnVlKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgYWNjZXNzX2dldF9i
eV9pZF9jaGFpbjogewotICAgICAgICBpZiAoIXN0dWJJbmZvLT51LmdldEJ5SWRDaGFpbi5pc0Rp
cmVjdCkKLSAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMsIHRydWUp
OwotICAgICAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gY2hhaW4gPSBhZG9wdFJl
ZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKLSAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ss
Ci0gICAgICAgICAgICBzdHViSW5mby0+dS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVy
ZS5nZXQoKSwKLSAgICAgICAgICAgIHN0dWJJbmZvLT51LmdldEJ5SWRDaGFpbi5jaGFpbi5nZXQo
KSwKLSAgICAgICAgICAgIHN0dWJJbmZvLT51LmdldEJ5SWRDaGFpbi5jb3VudCkpOwotICAgICAg
ICBpZiAocmVzdWx0LmNvbXB1dGVGb3JDaGFpbihwcm9maWxlZEJsb2NrLCB1aWQsIGNoYWluKSkK
LSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVz
KFRha2VzU2xvd1BhdGgsIHRydWUpOwotICAgIH0KLSAgICAgICAgCiAgICAgZGVmYXVsdDoKICAg
ICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7CiAgICAgfQpA
QCAtMzA1LDEwICsyOTQsMTggQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKAogewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIGlmIChkZmdCbG9jaykgeworICAgICAg
ICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGV4aXRTaXRlRGF0YTsKKyAgICAgICAgewor
ICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9s
b2NrKTsKKyAgICAgICAgICAgIGV4aXRTaXRlRGF0YSA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRl
RXhpdFNpdGVEYXRhKAorICAgICAgICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4LCBFeGl0RnJvbUZUTCk7CisgICAgICAgIH0KKyAgICAgICAg
CiAgICAgICAgIEdldEJ5SWRTdGF0dXMgcmVzdWx0OwogICAgICAgICB7CiAgICAgICAgICAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihkZmdCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAg
IHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbyhsb2NrZXIsIGRmZ0Jsb2NrLCBkZmdNYXAuZ2V0
KGNvZGVPcmlnaW4pLCB1aWQpOworICAgICAgICAgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJ
bmZvKAorICAgICAgICAgICAgICAgIGxvY2tlciwgZGZnQmxvY2ssIGRmZ01hcC5nZXQoY29kZU9y
aWdpbiksIHVpZCwgZXhpdFNpdGVEYXRhKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
aWYgKHJlc3VsdC50YWtlc1Nsb3dQYXRoKCkpCkBAIC0zNjEsNiArMzU4LDI0IEBAIEdldEJ5SWRT
dGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgU2ltcGxlLCBmYWxzZSwg
R2V0QnlJZFZhcmlhbnQoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIG9mZnNldCwgc3BlY2lmaWNW
YWx1ZSkpOwogfQogCitib29sIEdldEJ5SWRTdGF0dXM6Om1ha2VzQ2FsbHMoKSBjb25zdAorewor
ICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgTm9JbmZvcm1hdGlvbjoKKyAgICBjYXNl
IFRha2VzU2xvd1BhdGg6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIFNpbXBsZToK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV92YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAg
ICAgICAgICAgIGlmIChtX3ZhcmlhbnRzW2ldLmNhbGxMaW5rU3RhdHVzKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGNhc2UgTWFrZXNDYWxsczoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIHZvaWQgR2V0QnlJZFN0YXR1czo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmludCgiKCIpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCShyZXZpc2lv
biAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIEdldEJ5SWRTdGF0
dXNfaAogI2RlZmluZSBHZXRCeUlkU3RhdHVzX2gKIAorI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVz
LmgiCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2Nr
LmgiCiAjaW5jbHVkZSAiRXhpdGluZ0pJVFR5cGUuaCIKQEAgLTgzLDcgKzg0LDcgQEAgcHVibGlj
OgogICAgIGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29u
c3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CiAKICAgICBib29sIHRha2VzU2xvd1BhdGgoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlID09IFRha2VzU2xvd1BhdGggfHwgbV9zdGF0ZSA9PSBNYWtlc0Nh
bGxzOyB9Ci0gICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBN
YWtlc0NhbGxzOyB9CisgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7CiAgICAgCiAgICAgYm9v
bCB3YXNTZWVuSW5KSVQoKSBjb25zdCB7IHJldHVybiBtX3dhc1NlZW5JbkpJVDsgfQogICAgIApA
QCAtOTQsOSArOTUsMTAgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBoYXNFeGl0U2l0ZShj
b25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCwgRXhpdGluZ0pJVFR5cGUgPSBFeGl0RnJvbUFueXRoaW5nKTsKICNlbmRpZgogI2lmIEVO
QUJMRShKSVQpCi0gICAgc3RhdGljIEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKGNv
bnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyos
IFN0cmluZ0ltcGwqIHVpZCk7CisgICAgc3RhdGljIEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0
dWJJbmZvKAorICAgICAgICBjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyosCisgICAgICAgIFN0cmluZ0ltcGwqIHVp
ZCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CiAjZW5kaWYKLSAgICBib29sIGNvbXB1
dGVGb3JDaGFpbihDb2RlQmxvY2sqLCBTdHJpbmdJbXBsKiB1aWQsIFBhc3NSZWZQdHI8SW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbj4pOwogICAgIHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGcm9t
TExJbnQoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgU3RyaW5nSW1wbCogdWlk
KTsKICAgICAKICAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgR2V0QnlJZFZhcmlhbnQmKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJp
YW50LmNwcAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDMxIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR2V0QnlJZFZhcmlhbnQuaCIKIAorI2lu
Y2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKIAorR2V0QnlJZFZhcmlhbnQ6On5HZXRCeUlkVmFyaWFudCgpIHsgfQorCitH
ZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoY29uc3QgR2V0QnlJZFZhcmlhbnQmIG90aGVy
KQoreworICAgICp0aGlzID0gb3RoZXI7Cit9CisKK0dldEJ5SWRWYXJpYW50JiBHZXRCeUlkVmFy
aWFudDo6b3BlcmF0b3I9KGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcikKK3sKKyAgICBtX3N0
cnVjdHVyZVNldCA9IG90aGVyLm1fc3RydWN0dXJlU2V0OworICAgIG1fY2hhaW4gPSBvdGhlci5t
X2NoYWluOworICAgIG1fc3BlY2lmaWNWYWx1ZSA9IG90aGVyLm1fc3BlY2lmaWNWYWx1ZTsKKyAg
ICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OworICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3Rh
dHVzKQorICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlu
a1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOworICAgIGVsc2UKKyAgICAgICAgbV9j
YWxsTGlua1N0YXR1cyA9IG51bGxwdHI7CisgICAgcmV0dXJuICp0aGlzOworfQorCiB2b2lkIEdl
dEJ5SWRWYXJpYW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgZHVtcElu
Q29udGV4dChvdXQsIDApOwpAQCAtNDUsNyArNjYsMTAgQEAgdm9pZCBHZXRCeUlkVmFyaWFudDo6
ZHVtcEluQ29udGV4dChQcmludAogICAgIG91dC5wcmludCgKICAgICAgICAgIjwiLCBpbkNvbnRl
eHQoc3RydWN0dXJlU2V0KCksIGNvbnRleHQpLCAiLCAiLAogICAgICAgICBwb2ludGVyRHVtcElu
Q29udGV4dChjaGFpbigpLCBjb250ZXh0KSwgIiwgIiwKLSAgICAgICAgaW5Db250ZXh0KHNwZWNp
ZmljVmFsdWUoKSwgY29udGV4dCksICIsICIsIG9mZnNldCgpLCAiPiIpOworICAgICAgICBpbkNv
bnRleHQoc3BlY2lmaWNWYWx1ZSgpLCBjb250ZXh0KSwgIiwgIiwgb2Zmc2V0KCkpOworICAgIGlm
IChtX2NhbGxMaW5rU3RhdHVzKQorICAgICAgICBvdXQucHJpbnQoImNhbGw6ICIsICptX2NhbGxM
aW5rU3RhdHVzKTsKKyAgICBvdXQucHJpbnQoIj4iKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlh
bnQuaAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5k
ZWYgR2V0QnlJZFZhcmlhbnRfaAogI2RlZmluZSBHZXRCeUlkVmFyaWFudF9oCiAKKyNpbmNsdWRl
ICJDYWxsTGlua1N0YXR1cy5oIgogI2luY2x1ZGUgIkludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCIK
ICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKQEAg
LTMzLDYgKzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIENhbGxMaW5rU3RhdHVz
OwogY2xhc3MgR2V0QnlJZFN0YXR1czsKIHN0cnVjdCBEdW1wQ29udGV4dDsKIApAQCAtNDEsMTEg
KzQzLDEzIEBAIHB1YmxpYzoKICAgICBHZXRCeUlkVmFyaWFudCgKICAgICAgICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQgPSBTdHJ1Y3R1cmVTZXQoKSwKICAgICAgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gaW52YWxpZE9mZnNldCwgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlID0g
SlNWYWx1ZSgpLAotICAgICAgICBQYXNzUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNo
YWluID0gbnVsbHB0cikKKyAgICAgICAgUGFzc1JlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
PiBjaGFpbiA9IG51bGxwdHIsCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1
cz4gY2FsbExpbmtTdGF0dXMgPSBudWxscHRyKQogICAgICAgICA6IG1fc3RydWN0dXJlU2V0KHN0
cnVjdHVyZVNldCkKICAgICAgICAgLCBtX2NoYWluKGNoYWluKQogICAgICAgICAsIG1fc3BlY2lm
aWNWYWx1ZShzcGVjaWZpY1ZhbHVlKQogICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAg
ICAgLCBtX2NhbGxMaW5rU3RhdHVzKHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1cykpCiAgICAgewog
ICAgICAgICBpZiAoIXN0cnVjdHVyZVNldC5zaXplKCkpIHsKICAgICAgICAgICAgIEFTU0VSVChv
ZmZzZXQgPT0gaW52YWxpZE9mZnNldCk7CkBAIC01NCwxMiArNTgsMTggQEAgcHVibGljOgogICAg
ICAgICB9CiAgICAgfQogICAgIAorICAgIH5HZXRCeUlkVmFyaWFudCgpOworICAgIAorICAgIEdl
dEJ5SWRWYXJpYW50KGNvbnN0IEdldEJ5SWRWYXJpYW50Jik7CisgICAgR2V0QnlJZFZhcmlhbnQm
IG9wZXJhdG9yPShjb25zdCBHZXRCeUlkVmFyaWFudCYpOworICAgIAogICAgIGJvb2wgaXNTZXQo
KSBjb25zdCB7IHJldHVybiAhIW1fc3RydWN0dXJlU2V0LnNpemUoKTsgfQogICAgIGJvb2wgb3Bl
cmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9CiAgICAg
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0
PEludGVuZGVkU3RydWN0dXJlQ2hhaW4qPihtX2NoYWluLmdldCgpKTsgfQogICAgIEpTVmFsdWUg
c3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lmaWNWYWx1ZTsgfQogICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgQ2Fs
bExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsTGlua1N0
YXR1cy5nZXQoKTsgfQogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owog
ICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7
CkBAIC03MSw2ICs4MSw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJl
Q2hhaW4+IG1fY2hhaW47CiAgICAgSlNWYWx1ZSBtX3NwZWNpZmljVmFsdWU7CiAgICAgUHJvcGVy
dHlPZmZzZXQgbV9vZmZzZXQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBt
X2NhbGxMaW5rU3RhdHVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJ
ZExpc3QuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDI3
ICs1OCwxMSBAQCBHZXRCeUlkQWNjZXNzIEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1CiAgICAg
CiAgICAgR2V0QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAgCi0gICAgc3dpdGNoIChzdHViSW5mby5h
Y2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6Ci0gICAgICAgIHJl
c3VsdC5tX3R5cGUgPSBTaW1wbGVJbmxpbmU7Ci0gICAgICAgIHJlc3VsdC5tX3N0cnVjdHVyZS5j
b3B5RnJvbShzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUpOwotICAg
ICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFu
YWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAot
ICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKLSAgICAgICAgcmVzdWx0Lm1fc3RydWN0
dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUp
OwotICAgICAgICByZXN1bHQubV9jaGFpbi5jb3B5RnJvbShzdHViSW5mby51LmdldEJ5SWRDaGFp
bi5jaGFpbik7Ci0gICAgICAgIHJlc3VsdC5tX2NoYWluQ291bnQgPSBzdHViSW5mby51LmdldEJ5
SWRDaGFpbi5jb3VudDsKLSAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViSW5mby5z
dHViUm91dGluZTsKLSAgICAgICAgaWYgKHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmlzRGlyZWN0
KQotICAgICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFNpbXBsZVN0dWI7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBHZXR0ZXI7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vz
c19nZXRfYnlfaWRfc2VsZik7CisgICAgCisgICAgcmVzdWx0Lm1fdHlwZSA9IFNpbXBsZUlubGlu
ZTsKKyAgICByZXN1bHQubV9zdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5nZXRCeUlkU2Vs
Zi5iYXNlT2JqZWN0U3RydWN0dXJlKTsKKyAgICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJVFN0
dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsKICAg
ICAKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTA5LDcgKzkzLDYgQEAgUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdCogUG9seW1vcnBoaWNHZXRCeQogICAgIAogICAgIEFTU0VSVCgKICAgICAgICAg
c3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYKLSAgICAgICAgfHwg
c3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluCiAgICAgICAgIHx8
IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsKICAgICAKICAgICBQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0KiByZXN1bHQgPSBuZXcgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChzdHVi
SW5mbyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3Vs
YXRlZFR5cGUuaAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAg
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNPYmplY3QgIAogc3RhdGljIGNvbnN0IFNw
ZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdJZGVudCAgICAgICAgPSAweDAwMDEwMDAwOyAvLyBJdCdz
IGRlZmluaXRlbHkgYSBKU1N0cmluZywgYW5kIGl0J3MgYW4gaWRlbnRpZmllci4KIHN0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU3RyaW5nVmFyICAgICAgICAgID0gMHgwMDAyMDAwMDsg
Ly8gSXQncyBkZWZpbml0ZWx5IGEgSlNTdHJpbmcsIGFuZCBpdCdzIG5vdCBhbiBpZGVudGlmaWVy
Lgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmcgICAgICAgICAgICAgPSAw
eDAwMDMwMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU1N0cmluZy4KLXN0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjQ2VsbE90aGVyICAgICAgICAgID0gMHgwMDA0MDAwMDsgLy8gSXQn
cyBkZWZpbml0ZWx5IGEgSlNDZWxsIGJ1dCBub3QgYSBzdWJjbGFzcyBvZiBKU09iamVjdCBhbmQg
ZGVmaW5pdGVseSBub3QgYSBKU1N0cmluZy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBT
cGVjQ2VsbE90aGVyICAgICAgICAgID0gMHgwMDA0MDAwMDsgLy8gSXQncyBkZWZpbml0ZWx5IGEg
SlNDZWxsIGJ1dCBub3QgYSBzdWJjbGFzcyBvZiBKU09iamVjdCBhbmQgZGVmaW5pdGVseSBub3Qg
YSBKU1N0cmluZy4gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIHBhcnQgb2YgaGVhcC10b3Agb3Ig
Ynl0ZWNvZGUtdG9wLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMz
MDc4CiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0NlbGwgICAgICAgICAgICAgICA9
IDB4MDAwN2ZmZmY7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTQ2VsbC4KIHN0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjSW50MzIgICAgICAgICAgICAgID0gMHgwMDIwMDAwMDsgLy8gSXQn
cyBkZWZpbml0ZWx5IGFuIEludDMyLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJ
bnQ1MiAgICAgICAgICAgICAgPSAweDAwNDAwMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50
NTIgYW5kIHdlIGludGVuZCBpdCB0byB1bmJveCBpdC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24g
MTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNiBAQCB2b2lkIFN0cnVjdHVyZVN0
dWJJbmZvOjpkZXJlZigpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBhY2Nlc3Nf
Z2V0X2J5X2lkX3NlbGY6Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluOgogICAgIGNh
c2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICBjYXNlIGFjY2Vzc19w
dXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3Jl
cGxhY2U6CkBAIC02OCwxMSArNjcsNiBAQCBib29sIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdl
YWtSZWZlcmVuCiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodS5nZXRCeUlkU2VsZi5iYXNl
T2JqZWN0U3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluOgotICAgICAgICBpZiAo
IUhlYXA6OmlzTWFya2VkKHUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkp
Ci0gICAgICAgICAgICB8fCAhSGVhcDo6aXNNYXJrZWQodS5nZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0
KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBicmVhazsKICAgICBjYXNl
IGFjY2Vzc19nZXRfYnlfaWRfbGlzdDogewogICAgICAgICBpZiAoIXUuZ2V0QnlJZExpc3QubGlz
dC0+dmlzaXRXZWFrKHJlcGF0Y2hCdWZmZXIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmgJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw2IEBA
IGNsYXNzIFBvbHltb3JwaGljUHV0QnlJZExpc3Q7CiAKIGVudW0gQWNjZXNzVHlwZSB7CiAgICAg
YWNjZXNzX2dldF9ieV9pZF9zZWxmLAotICAgIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW4sCiAgICAg
YWNjZXNzX2dldF9ieV9pZF9saXN0LAogICAgIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9u
b3JtYWwsCiAgICAgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdCwKQEAgLTYxLDcg
KzYwLDYgQEAgaW5saW5lIGJvb2wgaXNHZXRCeUlkQWNjZXNzKEFjY2Vzc1R5cGUgYQogewogICAg
IHN3aXRjaCAoYWNjZXNzVHlwZSkgewogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgot
ICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlf
aWRfbGlzdDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKQEAgLTEwNywxNiAr
MTA1LDYgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgdS5nZXRCeUlkU2Vs
Zi5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIGJhc2VPYmplY3RTdHJ1Y3R1cmUp
OwogICAgIH0KIAotICAgIHZvaWQgaW5pdEdldEJ5SWRDaGFpbihWTSYgdm0sIEpTQ2VsbCogb3du
ZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWlu
LCB1bnNpZ25lZCBjb3VudCwgYm9vbCBpc0RpcmVjdCkKLSAgICB7Ci0gICAgICAgIGFjY2Vzc1R5
cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluOwotCi0gICAgICAgIHUuZ2V0QnlJZENoYWluLmJh
c2VPYmplY3RTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0g
ICAgICAgIHUuZ2V0QnlJZENoYWluLmNoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKLSAgICAg
ICAgdS5nZXRCeUlkQ2hhaW4uY291bnQgPSBjb3VudDsKLSAgICAgICAgdS5nZXRCeUlkQ2hhaW4u
aXNEaXJlY3QgPSBpc0RpcmVjdDsKLSAgICB9Ci0KICAgICB2b2lkIGluaXRHZXRCeUlkTGlzdChQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0KQogICAgIHsKICAgICAgICAgYWNjZXNzVHlwZSA9
IGFjY2Vzc19nZXRfYnlfaWRfbGlzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEhlYXAuaAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAs
OCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oQnV0dGVyZmx5
X2FycmF5QnVmZmVyKSBcCiAgICAgbWFjcm8oQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCkgXAogICAg
IG1hY3JvKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpIFwKKyAgICBtYWNybyhHZXR0ZXJTZXR0ZXJf
Z2V0dGVyKSBcCisgICAgbWFjcm8oR2V0dGVyU2V0dGVyX3NldHRlcikgXAogICAgIG1hY3JvKEpT
QXJyYXlCdWZmZXJWaWV3X2xlbmd0aCkgXAogICAgIG1hY3JvKEpTQXJyYXlCdWZmZXJWaWV3X21v
ZGUpIFwKICAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld192ZWN0b3IpIFwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQx
NSw2ICsxNDE1LDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRDYWxsZWU6CisgICAgY2FzZSBH
ZXRHZXR0ZXI6CisgICAgY2FzZSBHZXRTZXR0ZXI6CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
VHlwZShTcGVjRnVuY3Rpb24pOwogICAgICAgICBicmVhazsKICAgICAgICAgCkBAIC0xNjQwLDYg
KzE2NDIsMTEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlP
ZmZzZXQ6IHsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV9ncmFwaC5tX3Zt
LmdldHRlclNldHRlclN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAgICAgCiAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OiB7CiAgICAgICAgIEFic3RyYWN0VmFs
dWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEFTU0VSVCghKHZh
bHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2ZSBh
bHJlYWR5IGVuc3VyZWQgdGhpcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTcxLDIxICsxNzEsMjEgQEAgcHJpdmF0ZToKICAgICBib29sIGhhbmRsZU1pbk1heChpbnQgcmVz
dWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICAKICAgICAvLyBIYW5kbGUgY2FsbHMuIFRoaXMgcmVz
b2x2ZXMgaXNzdWVzIHN1cnJvdW5kaW5nIGlubGluaW5nIGFuZCBpbnRyaW5zaWNzLgorICAgIHZv
aWQgaGFuZGxlQ2FsbCgKKyAgICAgICAgaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIElubGluZUNh
bGxGcmFtZTo6S2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLAorICAgICAgICBOb2RlKiBj
YWxsVGFyZ2V0LCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCwgQ2FsbExpbmtTdGF0
dXMpOwogICAgIHZvaWQgaGFuZGxlQ2FsbChpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLCBpbnQgY2FsbGVlLCBp
bnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCk7CiAgICAgdm9pZCBoYW5kbGVDYWxsKElu
c3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAg
IHZvaWQgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgTm9kZSogY2Fs
bFRhcmdldCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAg
ICB2b2lkIGVtaXRBcmd1bWVudFBoYW50b21zKGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICAvLyBI
YW5kbGUgaW5saW5pbmcuIFJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwgZmFsc2UgaWYgd2Ug
bmVlZCB0byBwbGFudCBhIGNhbGwuCi0gICAgYm9vbCBoYW5kbGVJbmxpbmluZyhOb2RlKiBjYWxs
VGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgaW50
IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVk
IG5leHRPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgIGJvb2wgaGFuZGxlSW5s
aW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxs
TGlua1N0YXR1cyYsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQpOwogICAg
IC8vIEhhbmRsZSBpbnRyaW5zaWMgZnVuY3Rpb25zLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVk
ZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgogICAgIGJvb2wgaGFuZGxlSW50
cmluc2ljKGludCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMsIGludCByZWdpc3Rlck9mZnNldCwg
aW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9u
KTsKICAgICBib29sIGhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihpbnQgcmVzdWx0T3BlcmFu
ZCwgSW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSk7CiAgICAgYm9vbCBoYW5kbGVDb25zdGFu
dEludGVybmFsRnVuY3Rpb24oaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBp
bnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgTm9kZSog
aGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVy
dHlPZmZzZXQsIE5vZGUqIHZhbHVlKTsKLSAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVj
dWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVy
dHlPZmZzZXQpOwotICAgIHZvaWQgaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAgIGludCBkZXN0
aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLAotICAgICAgICBQcm9wZXJ0eU9mZnNldCk7CisgICAgTm9kZSogaGFuZGxl
R2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSBvcCA9IEdldEJ5T2Zmc2V0KTsKICAg
ICB2b2lkIGhhbmRsZUdldEJ5SWQoCiAgICAgICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNw
ZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLAogICAg
ICAgICBjb25zdCBHZXRCeUlkU3RhdHVzJik7CkBAIC04MTEsMTEgKzgxMSwxMSBAQCBwcml2YXRl
OgogICAgICAgICBtX251bVBhc3NlZFZhckFyZ3MrKzsKICAgICB9CiAgICAgCi0gICAgTm9kZSog
YWRkQ2FsbChpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgaW50IGNhbGxlZSwgaW50IGFyZ0NvdW50
LCBpbnQgcmVnaXN0ZXJPZmZzZXQpCisgICAgTm9kZSogYWRkQ2FsbChpbnQgcmVzdWx0LCBOb2Rl
VHlwZSBvcCwgTm9kZSogY2FsbGVlLCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCkK
ICAgICB7CiAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9u
KCk7CiAgICAgICAgIAotICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoVmlydHVhbFJlZ2lzdGVy
KGNhbGxlZSkpKTsKKyAgICAgICAgYWRkVmFyQXJnQ2hpbGQoY2FsbGVlKTsKICAgICAgICAgc2l6
ZV90IHBhcmFtZXRlclNsb3RzID0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIEpTU3Rh
Y2s6OkNhbGxlckZyYW1lQW5kUENTaXplICsgYXJnQ291bnQ7CiAgICAgICAgIGlmIChwYXJhbWV0
ZXJTbG90cyA+IG1fcGFyYW1ldGVyU2xvdHMpCiAgICAgICAgICAgICBtX3BhcmFtZXRlclNsb3Rz
ID0gcGFyYW1ldGVyU2xvdHM7CkBAIC0xMTIwLDcgKzExMjAsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHJldHVyblZhbHVlVlIsCiAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgaW5saW5lQ2FsbEZyYW1lU3RhcnQsCiAgICAgICAgICAgICBpbnQgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsCi0gICAgICAgICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsK
KyAgICAgICAgICAgIElubGluZUNhbGxGcmFtZTo6S2luZCk7CiAgICAgICAgIAogICAgICAgICB+
SW5saW5lU3RhY2tFbnRyeSgpCiAgICAgICAgIHsKQEAgLTEyMDMsMjYgKzEyMDMsMzUgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKICAgICBpbnQgcmVzdWx0LCBOb2RlVHlwZSBv
cCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCB1bnNpZ25lZCBpbnN0cnVjdGlvblNpemUs
CiAgICAgaW50IGNhbGxlZSwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBpbnQgcmVn
aXN0ZXJPZmZzZXQpCiB7Ci0gICAgQVNTRVJUKHJlZ2lzdGVyT2Zmc2V0IDw9IDApOwotICAgIAog
ICAgIE5vZGUqIGNhbGxUYXJnZXQgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGNhbGxlZSkpOwogICAg
IAotICAgIENhbGxMaW5rU3RhdHVzIGNhbGxMaW5rU3RhdHVzOwotCisgICAgQ2FsbExpbmtTdGF0
dXMgY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAg
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBjdXJyZW50Q29kZU9yaWdpbigpLAor
ICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxMaW5rSW5mb3MsIG1fY2FsbENvbnRleHRN
YXApOworICAgIAorICAgIGhhbmRsZUNhbGwoCisgICAgICAgIHJlc3VsdCwgb3AsIElubGluZUNh
bGxGcmFtZTo6a2luZEZvcihraW5kKSwgaW5zdHJ1Y3Rpb25TaXplLCBjYWxsVGFyZ2V0LAorICAg
ICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQsIGNhbGxMaW5r
U3RhdHVzKTsKK30KKyAgICAKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCisgICAg
aW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCB1bnNp
Z25lZCBpbnN0cnVjdGlvblNpemUsCisgICAgTm9kZSogY2FsbFRhcmdldCwgaW50IGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCBpbnQgcmVnaXN0ZXJPZmZzZXQsCisgICAgQ2FsbExpbmtTdGF0
dXMgY2FsbExpbmtTdGF0dXMpCit7CisgICAgQVNTRVJUKHJlZ2lzdGVyT2Zmc2V0IDw9IDApOwor
ICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kID0gSW5saW5lQ2Fs
bEZyYW1lOjpzcGVjaWFsaXphdGlvbktpbmRGb3Ioa2luZCk7CisgICAgCiAgICAgaWYgKG1fZ3Jh
cGguaXNDb25zdGFudChjYWxsVGFyZ2V0KSkgewogICAgICAgICBjYWxsTGlua1N0YXR1cyA9IENh
bGxMaW5rU3RhdHVzKAogICAgICAgICAgICAgbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChjYWxs
VGFyZ2V0KSkuc2V0SXNQcm92ZWQodHJ1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2FsbExp
bmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAgIG1faW5s
aW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgY3VycmVudENvZGVPcmlnaW4oKSwKLSAgICAg
ICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbExpbmtJbmZvcywgbV9jYWxsQ29udGV4dE1h
cCk7CiAgICAgfQogICAgIAogICAgIGlmICghY2FsbExpbmtTdGF0dXMuY2FuT3B0aW1pemUoKSkg
ewogICAgICAgICAvLyBPZGRseSwgdGhpcyBjb25mbGF0ZXMgY2FsbHMgdGhhdCBoYXZlbid0IGV4
ZWN1dGVkIHdpdGggY2FsbHMgdGhhdCBiZWhhdmVkIHN1ZmZpY2llbnRseSBwb2x5bW9ycGhpY2Fs
bHkKICAgICAgICAgLy8gdGhhdCB3ZSBjYW5ub3Qgb3B0aW1pemUgdGhlbS4KICAgICAgICAgCi0g
ICAgICAgIGFkZENhbGwocmVzdWx0LCBvcCwgY2FsbGVlLCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICBhZGRDYWxsKHJlc3VsdCwgb3AsIGNhbGxU
YXJnZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCByZWdpc3Rlck9mZnNldCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0xMjMwLDI4ICsxMjM5LDI4IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9
IGdldFByZWRpY3Rpb24oKTsKIAogICAgIGlmIChJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiA9
IGNhbGxMaW5rU3RhdHVzLmludGVybmFsRnVuY3Rpb24oKSkgewotICAgICAgICBpZiAoaGFuZGxl
Q29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKHJlc3VsdCwgZnVuY3Rpb24sIHJlZ2lzdGVyT2Zmc2V0
LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcHJlZGljdGlvbiwga2luZCkpIHsKKyAgICAg
ICAgaWYgKGhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbihyZXN1bHQsIGZ1bmN0aW9uLCBy
ZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHByZWRpY3Rpb24sIHNw
ZWNpYWxpemF0aW9uS2luZCkpIHsKICAgICAgICAgICAgIC8vIFRoaXMgcGhhbnRvbWluZyBoYXMg
dG8gYmUgKmFmdGVyKiB0aGUgY29kZSBmb3IgdGhlIGludHJpbnNpYywgdG8gc2lnbmlmeSB0aGF0
CiAgICAgICAgICAgICAvLyB0aGUgaW5wdXRzIG11c3QgYmUga2VwdCBhbGl2ZSB3aGF0ZXZlciBl
eGl0cyB0aGUgaW50cmluc2ljIG1heSBkby4KICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRv
bSwgY2FsbFRhcmdldCk7Ci0gICAgICAgICAgICBlbWl0QXJndW1lbnRQaGFudG9tcyhyZWdpc3Rl
ck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGtpbmQpOworICAgICAgICAgICAg
ZW1pdEFyZ3VtZW50UGhhbnRvbXMocmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCBzcGVjaWFsaXphdGlvbktpbmQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICAvLyBDYW4gb25seSBoYW5kbGUgdGhpcyB1c2luZyB0aGUg
Z2VuZXJpYyBjYWxsIGhhbmRsZXIuCi0gICAgICAgIGFkZENhbGwocmVzdWx0LCBvcCwgY2FsbGVl
LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICBh
ZGRDYWxsKHJlc3VsdCwgb3AsIGNhbGxUYXJnZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAotICAg
IEludHJpbnNpYyBpbnRyaW5zaWMgPSBjYWxsTGlua1N0YXR1cy5pbnRyaW5zaWNGb3Ioa2luZCk7
CisgICAgSW50cmluc2ljIGludHJpbnNpYyA9IGNhbGxMaW5rU3RhdHVzLmludHJpbnNpY0Zvcihz
cGVjaWFsaXphdGlvbktpbmQpOwogICAgIGlmIChpbnRyaW5zaWMgIT0gTm9JbnRyaW5zaWMpIHsK
LSAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzLCBjYWxsVGFyZ2V0LCBy
ZWdpc3Rlck9mZnNldCwga2luZCk7CisgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsTGlu
a1N0YXR1cywgY2FsbFRhcmdldCwgcmVnaXN0ZXJPZmZzZXQsIHNwZWNpYWxpemF0aW9uS2luZCk7
CiAgICAgICAgICAgICAKICAgICAgICAgaWYgKGhhbmRsZUludHJpbnNpYyhyZXN1bHQsIGludHJp
bnNpYywgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBwcmVkaWN0
aW9uKSkgewogICAgICAgICAgICAgLy8gVGhpcyBwaGFudG9taW5nIGhhcyB0byBiZSAqYWZ0ZXIq
IHRoZSBjb2RlIGZvciB0aGUgaW50cmluc2ljLCB0byBzaWduaWZ5IHRoYXQKICAgICAgICAgICAg
IC8vIHRoZSBpbnB1dHMgbXVzdCBiZSBrZXB0IGFsaXZlIHdoYXRldmVyIGV4aXRzIHRoZSBpbnRy
aW5zaWMgbWF5IGRvLgogICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBjYWxsVGFyZ2V0
KTsKLSAgICAgICAgICAgIGVtaXRBcmd1bWVudFBoYW50b21zKHJlZ2lzdGVyT2Zmc2V0LCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcywga2luZCk7CisgICAgICAgICAgICBlbWl0QXJndW1lbnRQ
aGFudG9tcyhyZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHNwZWNp
YWxpemF0aW9uS2luZCk7CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQog
ICAgICAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZENhbGwo
KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEyNjIsNyArMTI3MSw3IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAg
YWRkQ2FsbChyZXN1bHQsIG9wLCBjYWxsZWUsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBy
ZWdpc3Rlck9mZnNldCk7CisgICAgYWRkQ2FsbChyZXN1bHQsIG9wLCBjYWxsVGFyZ2V0LCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQpOwogfQogCiB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjplbWl0RnVuY3Rpb25DaGVja3MoY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxM
aW5rU3RhdHVzLCBOb2RlKiBjYWxsVGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCkKQEAgLTEyOTcsMTAgKzEzMDYsMTIgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6ZW1pdEFyZ3VtZW50UGhhbnRvbQogICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20s
IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpLCByZWdpc3Rlck9mZnNldCkpKTsKIH0K
IAotYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5v
ZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0
dXMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1
bnNpZ25lZCBuZXh0T2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCitib29sIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJl
c3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiBjYWxsTGlua1N0YXR1cywgaW50IHJl
Z2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5l
eHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kKQogewogICAgIHN0YXRpYyBjb25z
dCBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICAKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IHNwZWNpYWxpemF0aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5k
Rm9yKGtpbmQpOworICAgIAogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb25z
aWRlcmluZyBpbmxpbmluZyAiLCBjYWxsTGlua1N0YXR1cywgIiBpbnRvICIsIGN1cnJlbnRDb2Rl
T3JpZ2luKCksICJcbiIpOwogICAgIApAQCAtMTMzMywxNCArMTM0NCwxNCBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgLy8gaWYgd2UgaGFkIGEgc3RhdGlj
IHByb29mIG9mIHdoYXQgd2FzIGJlaW5nIGNhbGxlZDsgdGhpcyBtaWdodCBoYXBwZW4gZm9yIGV4
YW1wbGUgaWYgeW91IGNhbGwgYQogICAgIC8vIGdsb2JhbCBmdW5jdGlvbiwgd2hlcmUgd2F0Y2hw
b2ludGluZyBnaXZlcyB1cyBzdGF0aWMgaW5mb3JtYXRpb24uIE92ZXJhbGwsIGl0J3MgYSByYXJl
IGNhc2UKICAgICAvLyBiZWNhdXNlIHdlIGV4cGVjdCB0aGF0IGFueSBob3QgY2FsbGVlcyB3b3Vs
ZCBoYXZlIGFscmVhZHkgYmVlbiBjb21waWxlZC4KLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGV4ZWN1dGFibGUtPmJhc2VsaW5lQ29kZUJsb2NrRm9yKGtpbmQpOworICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gZXhlY3V0YWJsZS0+YmFzZWxpbmVDb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRp
b25LaW5kKTsKICAgICBpZiAoIWNvZGVCbG9jaykgewogICAgICAgICBpZiAodmVyYm9zZSkKICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICBGYWlsaW5nIGJlY2F1c2Ugbm8gY29kZSBibG9jayBhdmFp
bGFibGUuXG4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBDYXBhYmlsaXR5
TGV2ZWwgY2FwYWJpbGl0eUxldmVsID0gaW5saW5lRnVuY3Rpb25Gb3JDYXBhYmlsaXR5TGV2ZWwo
Ci0gICAgICAgIGNvZGVCbG9jaywga2luZCwgY2FsbExpbmtTdGF0dXMuaXNDbG9zdXJlQ2FsbCgp
KTsKKyAgICAgICAgY29kZUJsb2NrLCBzcGVjaWFsaXphdGlvbktpbmQsIGNhbGxMaW5rU3RhdHVz
LmlzQ2xvc3VyZUNhbGwoKSk7CiAgICAgaWYgKCFjYW5JbmxpbmUoY2FwYWJpbGl0eUxldmVsKSkg
ewogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBGYWlsaW5n
IGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzIG5vdCBpbmxpbmVhYmxlLlxuIik7CkBAIC0xMzkyLDcg
KzE0MDMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAg
Ly8gTm93IHdlIGtub3cgd2l0aG91dCBhIGRvdWJ0IHRoYXQgd2UgYXJlIGNvbW1pdHRlZCB0byBp
bmxpbmluZy4gU28gYmVnaW4gdGhlIHByb2Nlc3MKICAgICAvLyBieSBjaGVja2luZyB0aGUgY2Fs
bGVlIChpZiBuZWNlc3NhcnkpIGFuZCBtYWtpbmcgc3VyZSB0aGF0IGFyZ3VtZW50cyBhbmQgdGhl
IGNhbGxlZQogICAgIC8vIGFyZSBmbHVzaGVkLgotICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxs
TGlua1N0YXR1cywgY2FsbFRhcmdldE5vZGUsIHJlZ2lzdGVyT2Zmc2V0LCBraW5kKTsKKyAgICBl
bWl0RnVuY3Rpb25DaGVja3MoY2FsbExpbmtTdGF0dXMsIGNhbGxUYXJnZXROb2RlLCByZWdpc3Rl
ck9mZnNldCwgc3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICAKICAgICAvLyBGSVhNRTogRG9uJ3Qg
Zmx1c2ggY29uc3RhbnRzIQogICAgIApAQCAtMTQwNCw2ICsxNDE1LDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIAogICAgIHNpemVfdCBhcmd1bWVudFBv
c2l0aW9uU3RhcnQgPSBtX2dyYXBoLm1fYXJndW1lbnRQb3NpdGlvbnMuc2l6ZSgpOwogCisgICAg
ZGF0YUxvZygia2luZCA9ICIsIGtpbmQsICJcbiIpOwogICAgIElubGluZVN0YWNrRW50cnkgaW5s
aW5lU3RhY2tFbnRyeSgKICAgICAgICAgdGhpcywgY29kZUJsb2NrLCBjb2RlQmxvY2ssIG1fZ3Jh
cGgubGFzdEJsb2NrKCksIGNhbGxMaW5rU3RhdHVzLmZ1bmN0aW9uKCksCiAgICAgICAgIG1faW5s
aW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCkp
LApAQCAtMTg1MCwxNCArMTg2MiwxNCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25z
dGFudEludGVyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorTm9kZSog
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwgTm9kZVR5cGUgb3ApCiB7CiAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwogICAg
IGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQogICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBi
YXNlOwogICAgIGVsc2UKICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRC
dXR0ZXJmbHksIGJhc2UpOwotICAgIE5vZGUqIGdldEJ5T2Zmc2V0ID0gYWRkVG9HcmFwaChHZXRC
eU9mZnNldCwgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCkpLCBPcElu
Zm8ocHJlZGljdGlvbiksIHByb3BlcnR5U3RvcmFnZSwgYmFzZSk7CisgICAgTm9kZSogZ2V0QnlP
ZmZzZXQgPSBhZGRUb0dyYXBoKG9wLCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRh
LnNpemUoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgcHJvcGVydHlTdG9yYWdlLCBiYXNlKTsKIAog
ICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwogICAgIHN0b3JhZ2VBY2Nl
c3NEYXRhLm9mZnNldCA9IG9mZnNldDsKQEAgLTE4NjcsMTMgKzE4NzksNiBAQCBOb2RlKiBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoCiAgICAgcmV0dXJuIGdldEJ5T2Zmc2V0Owog
fQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCgKLSAgICBpbnQgZGVz
dGluYXRpb25PcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLAotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKLXsK
LSAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uT3BlcmFuZCksIGhhbmRsZUdldEJ5
T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIG9mZnNldCkpOwotfQot
CiBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5z
aWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlKiB2YWx1ZSkKIHsK
ICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CkBAIC0xOTEwLDE4ICsxOTE1LDE5IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgaW50IGRlc3RpbmF0aW9uT3BlcmFu
ZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciwKICAgICBjb25zdCBHZXRCeUlkU3RhdHVzJiBnZXRCeUlkU3RhdHVzKQogewor
ICAgIE5vZGVUeXBlIGdldEJ5SWQgPSBnZXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKSA/IEdldEJ5
SWRGbHVzaCA6IEdldEJ5SWQ7CisgICAgCiAgICAgaWYgKCFnZXRCeUlkU3RhdHVzLmlzU2ltcGxl
KCkgfHwgIU9wdGlvbnM6OmVuYWJsZUFjY2Vzc0lubGluaW5nKCkpIHsKICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLAotICAgICAgICAgICAgYWRkVG9HcmFw
aCgKLSAgICAgICAgICAgICAgICBnZXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKSA/IEdldEJ5SWRG
bHVzaCA6IEdldEJ5SWQsCi0gICAgICAgICAgICAgICAgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIp
LCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2UpKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoZ2V0
QnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2Up
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAoZ2V0QnlJZFN0YXR1cy5u
dW1WYXJpYW50cygpID4gMSkgewotICAgICAgICBpZiAoIWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1v
ZGUpIHx8ICFPcHRpb25zOjplbmFibGVQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nKCkpIHsKKyAg
ICAgICAgaWYgKGdldEJ5SWRTdGF0dXMubWFrZXNDYWxscygpIHx8ICFpc0ZUTChtX2dyYXBoLm1f
cGxhbi5tb2RlKQorICAgICAgICAgICAgfHwgIU9wdGlvbnM6OmVuYWJsZVBvbHltb3JwaGljQWNj
ZXNzSW5saW5pbmcoKSkgewogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5h
dGlvbk9wZXJhbmQpLAotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoR2V0QnlJZCwgT3BJbmZv
KGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2UpKTsKKyAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKGdldEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgT3BJ
bmZvKHByZWRpY3Rpb24pLCBiYXNlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgCkBAIC0xOTcyLDE1ICsxOTc4LDU2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUdldEJ5SWQoCiAgICAgaWYgKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpIHx8IG9yaWdpbmFs
QmFzZUZvckJhc2VsaW5lSklUICE9IGJhc2UpCiAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwg
b3JpZ2luYWxCYXNlRm9yQmFzZWxpbmVKSVQpOwogICAgIAotICAgIGlmICh2YXJpYW50LnNwZWNp
ZmljVmFsdWUoKSkgewotICAgICAgICBBU1NFUlQodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkuaXND
ZWxsKCkpOwotICAgICAgICAKLSAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlv
bk9wZXJhbmQpLCBjZWxsQ29uc3RhbnQodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkuYXNDZWxsKCkp
KTsKKyAgICBOb2RlKiBsb2FkZWRWYWx1ZTsKKyAgICBpZiAodmFyaWFudC5zcGVjaWZpY1ZhbHVl
KCkpCisgICAgICAgIGxvYWRlZFZhbHVlID0gY2VsbENvbnN0YW50KHZhcmlhbnQuc3BlY2lmaWNW
YWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbG9hZGVkVmFsdWUgPSBoYW5k
bGVHZXRCeU9mZnNldCgKKyAgICAgICAgICAgIHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJO
dW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCisgICAgICAgICAgICB2YXJpYW50LmNhbGxMaW5rU3Rh
dHVzKCkgPyBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCA6IEdldEJ5T2Zmc2V0KTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKCF2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkpIHsKKyAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLCBsb2FkZWRWYWx1ZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAgIGRl
c3RpbmF0aW9uT3BlcmFuZCwgcHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFy
aWFudC5vZmZzZXQoKSk7CisgICAgTm9kZSogZ2V0dGVyID0gYWRkVG9HcmFwaChHZXRHZXR0ZXIs
IGxvYWRlZFZhbHVlKTsKKyAgICAKKyAgICAvLyBNYWtlIGEgY2FsbC4gV2UgZG9uJ3QgdHJ5IHRv
IGdldCBmYW5jeSB3aXRoIHVzaW5nIHRoZSBzbWFsbGVzdCBvcGVyYW5kIG51bWJlciBiZWNhdXNl
CisgICAgLy8gdGhlIHN0YWNrIGxheW91dCBwaGFzZSBzaG91bGQgY29tcHJlc3MgdGhlIHN0YWNr
IGFueXdheS4KKyAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZlBhcmFtZXRlcnMgPSAwOworICAg
IG51bWJlck9mUGFyYW1ldGVycysrOyAvLyBUaGUgJ3RoaXMnIGFyZ3VtZW50LgorICAgIG51bWJl
ck9mUGFyYW1ldGVycysrOyAvLyBUcnVlIHJldHVybiBQQy4KKyAgICAKKyAgICAvLyBTdGFydCB3
aXRoIGEgcmVnaXN0ZXIgb2Zmc2V0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGxhc3QgaW4tdXNl
IHJlZ2lzdGVyLgorICAgIGludCByZWdpc3Rlck9mZnNldCA9IHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKAorICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbnVtQ2Fs
bGVlUmVnaXN0ZXJzIC0gMSkub2Zmc2V0KCk7CisgICAgcmVnaXN0ZXJPZmZzZXQgLT0gbnVtYmVy
T2ZQYXJhbWV0ZXJzOworICAgIHJlZ2lzdGVyT2Zmc2V0IC09IEpTU3RhY2s6OkNhbGxGcmFtZUhl
YWRlclNpemU7CisgICAgCisgICAgLy8gR2V0IHRoZSBhbGlnbm1lbnQgcmlnaHQuCisgICAgcmVn
aXN0ZXJPZmZzZXQgPSAtV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKAorICAgICAgICBzdGFja0Fs
aWdubWVudFJlZ2lzdGVycygpLAorICAgICAgICAtcmVnaXN0ZXJPZmZzZXQpOworICAgIAorICAg
IGVuc3VyZUxvY2FscygKKyAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKAor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkudG9Mb2NhbCgpKTsK
KyAgICAKKyAgICAvLyBJc3N1ZSBTZXRMb2NhbHMuIFRoaXMgaGFzIHR3byBlZmZlY3RzOgorICAg
IC8vIDEpIFRoYXQncyBob3cgaGFuZGxlQ2FsbCgpIHNlZXMgdGhlIGFyZ3VtZW50cy4KKyAgICAv
LyAyKSBJZiB3ZSBpbmxpbmUgdGhlbiB0aGlzIGVuc3VyZXMgdGhhdCB0aGUgYXJndW1lbnRzIGFy
ZSBmbHVzaGVkIHNvIHRoYXQgaWYgeW91IHVzZQorICAgIC8vICAgIHRoZSBkcmVhZGVkIGFyZ3Vt
ZW50cyBvYmplY3Qgb24gdGhlIGdldHRlciwgdGhlIHJpZ2h0IHRoaW5ncyBoYXBwZW4uIFdlbGws
IHNvcnQgb2YgLQorICAgIC8vICAgIHNpbmNlIHdlIG9ubHkgcmVhbGx5IGNhcmUgYWJvdXQgJ3Ro
aXMnIGluIHRoaXMgY2FzZS4gQnV0IHdlJ3JlIG5vdCBnb2luZyB0byB0YWtlIHRoYXQKKyAgICAv
LyAgICBzaG9ydGN1dC4KKyAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQgKyBK
U1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4
dFJlZ2lzdGVyKyspLCBiYXNlLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgCisgICAgaGFuZGxl
Q2FsbCgKKyAgICAgICAgZGVzdGluYXRpb25PcGVyYW5kLCBDYWxsLCBJbmxpbmVDYWxsRnJhbWU6
OkdldHRlckNhbGwsIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X2lkKSwKKyAgICAgICAgZ2V0dGVy
LCBudW1iZXJPZlBhcmFtZXRlcnMgLSAxLCByZWdpc3Rlck9mZnNldCwgKnZhcmlhbnQuY2FsbExp
bmtTdGF0dXMoKSk7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRQdXRCeUlkKApAQCAt
MzM3Niw3ICszNDIzLDcgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGlu
ZQogICAgIFZpcnR1YWxSZWdpc3RlciByZXR1cm5WYWx1ZVZSLAogICAgIFZpcnR1YWxSZWdpc3Rl
ciBpbmxpbmVDYWxsRnJhbWVTdGFydCwKICAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsCi0gICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgIElubGluZUNhbGxGcmFt
ZTo6S2luZCBraW5kKQogICAgIDogbV9ieXRlQ29kZVBhcnNlcihieXRlQ29kZVBhcnNlcikKICAg
ICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAsIG1fcHJvZmlsZWRCbG9jayhwcm9maWxl
ZEJsb2NrKQpAQCAtMzQzNSw3ICszNDgyLDcgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNr
RW50cnk6OklubGluZQogICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNh
bGwgPSB0cnVlOwogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+Y2FsbGVyID0gYnl0ZUNvZGVQ
YXJzZXItPmN1cnJlbnRDb2RlT3JpZ2luKCk7CiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudHMucmVzaXplKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsgLy8gU2V0IHRoZSBu
dW1iZXIgb2YgYXJndW1lbnRzIGluY2x1ZGluZyB0aGlzLCBidXQgZG9uJ3QgY29uZmlndXJlIHRo
ZSB2YWx1ZSByZWNvdmVyaWVzLCB5ZXQuCi0gICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5raW5k
ID0gSW5saW5lQ2FsbEZyYW1lOjpraW5kRm9yKGtpbmQpOworICAgICAgICBtX2lubGluZUNhbGxG
cmFtZS0+a2luZCA9IGtpbmQ7CiAgICAgICAgIAogICAgICAgICBpZiAobV9pbmxpbmVDYWxsRnJh
bWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFt
ZS0+Y2FwdHVyZWRWYXJzID0gbV9pbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJh
bWUtPmNhcHR1cmVkVmFyczsKQEAgLTM2NzQsNyArMzcyMSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlKCkKICAgICAKICAgICBJbmxpbmVTdGFja0VudHJ5IGlubGluZVN0YWNrRW50cnko
CiAgICAgICAgIHRoaXMsIG1fY29kZUJsb2NrLCBtX3Byb2ZpbGVkQmxvY2ssIDAsIDAsIFZpcnR1
YWxSZWdpc3RlcigpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwKLSAgICAgICAgbV9jb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSwgQ29kZUZvckNhbGwpOworICAgICAgICBtX2NvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpLCBJbmxpbmVDYWxsRnJhbWU6OkNhbGwpOwogICAgIAogICAgIHBhcnNlQ29kZUJs
b2NrKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjkwLDYgKzY5MCw0MCBAQCBwcml2YXRlOgogICAg
ICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCisgICAgTm9kZSogZ2V0R2V0dGVyU2V0dGVyQnlP
ZmZzZXRMb2FkRWxpbWluYXRpb24odW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogYmFz
ZSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07
KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAg
ICAgICAgICAgaWYgKG5vZGUgPT0gYmFzZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIEdldEdldHRl
clNldHRlckJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSA9PSBi
YXNlCisgICAgICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtu
b2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRp
Zmllck51bWJlcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQdXRC
eVZhbERpcmVjdDoKKyAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgICAgICBjYXNl
IFB1dEJ5VmFsQWxpYXM6CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUo
bm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0
aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KKyAgICAgICAgICAgICAgICAgICAg
Ly8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEg
c3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCiAgICAgTm9kZSogcHV0QnlPZmZzZXRT
dG9yZUVsaW1pbmF0aW9uKHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIGNoaWxkMSkK
ICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7
CkBAIC04NDUsMjUgKzg3OSwxOCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gMDsKICAgICB9
CiAgICAgCi0gICAgTm9kZSogZ2V0VHlwZWRBcnJheUJ5dGVPZmZzZXRMb2FkRWxpbWluYXRpb24o
Tm9kZSogY2hpbGQxKQorICAgIE5vZGUqIGdldEludGVybmFsRmllbGRMb2FkRWxpbWluYXRpb24o
Tm9kZVR5cGUgb3AsIE5vZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9j
dXJyZW50QmxvY2stPmF0KGkpOwogICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKICAg
ICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7
Ci0gICAgICAgICAgICBjYXNlIEdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0OiB7Ci0gICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBvcCAmJiBub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQorICAgICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
QEAgLTE0MDEsMTAgKzE0MjgsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRUeXBlZEFycmF5Qnl0ZU9mZnNl
dDogeworICAgICAgICBjYXNlIEdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0OgorICAgICAgICBjYXNl
IEdldEdldHRlcjoKKyAgICAgICAgY2FzZSBHZXRTZXR0ZXI6IHsKICAgICAgICAgICAgIGlmIChj
c2VNb2RlID09IFN0b3JlRWxpbWluYXRpb24pCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRUeXBlZEFycmF5Qnl0ZU9mZnNldExvYWRFbGltaW5h
dGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKKyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50
KGdldEludGVybmFsRmllbGRMb2FkRWxpbWluYXRpb24obm9kZS0+b3AoKSwgbm9kZS0+Y2hpbGQx
KCkubm9kZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xNDIwLDYg
KzE0NDksMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5T2Zm
c2V0TG9hZEVsaW1pbmF0aW9uKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9y
YWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIsIG5vZGUtPmNoaWxkMigpLm5v
ZGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBH
ZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKKyAgICAgICAgICAgIGlmIChjc2VNb2RlID09IFN0b3Jl
RWxpbWluYXRpb24pCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBzZXRSZXBs
YWNlbWVudChnZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldExvYWRFbGltaW5hdGlvbihtX2dyYXBoLm1f
c3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlm
aWVyTnVtYmVyLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKICAgICAgICAgICAg
IGlmIChjc2VNb2RlID09IFN0b3JlRWxpbWluYXRpb24pCiAgICAgICAgICAgICAgICAgYnJlYWs7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNp
b24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIxMyw2ICsyMTMsMTQgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICB3cml0ZShXb3JsZCk7CiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCisgICAgY2FzZSBHZXRHZXR0ZXI6CisgICAgICAgIHJlYWQoR2V0dGVyU2V0
dGVyX2dldHRlcik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBHZXRTZXR0
ZXI6CisgICAgICAgIHJlYWQoR2V0dGVyU2V0dGVyX3NldHRlcik7CisgICAgICAgIHJldHVybjsK
KyAgICAgICAgCiAgICAgY2FzZSBHZXRDYWxsZWU6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFw
KFZhcmlhYmxlcywgSlNTdGFjazo6Q2FsbGVlKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTQ4MSw2
ICs0ODksNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICBjYXNlIEdl
dEdldHRlclNldHRlckJ5T2Zmc2V0OgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChOYW1lZFBy
b3BlcnRpZXMsIGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0Rh
dGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJl
dmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4NSw3ICs4ODUsOSBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIEdldENsb3N1cmVSZWdpc3RlcnM6CiAgICAgICAgIGNhc2UgU2tpcFRvcFNjb3BlOgog
ICAgICAgICBjYXNlIFNraXBTY29wZToKLSAgICAgICAgY2FzZSBHZXRTY29wZTogeworICAgICAg
ICBjYXNlIEdldFNjb3BlOgorICAgICAgICBjYXNlIEdldEdldHRlcjoKKyAgICAgICAgY2FzZSBH
ZXRTZXR0ZXI6IHsKICAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtOTQ1LDcgKzk0Nyw4IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKKyAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKKyAg
ICAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDogewogICAgICAgICAgICAgaWYgKCFu
b2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKQogICAgICAgICAgICAgICAgIGZpeEVk
Z2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBmaXhFZGdlPEtu
b3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQyKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MTcsNyArNDE3LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua0Z1bmN0aW9uKCkKICAgICBtX2pp
dENvZGUtPnNocmlua1RvRml0KCk7CiAgICAgY29kZUJsb2NrKCktPnNocmlua1RvRml0KENvZGVC
bG9jazo6TGF0ZVNocmluayk7CiAgICAgCi0gICAgbGlua0J1ZmZlci0+bGluayhtX2NhbGxBcml0
eUZpeHVwLCBGdW5jdGlvblB0cigobV92bS0+Z2V0Q1RJU3R1Yihhcml0eUZpeHVwKSkuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICBsaW5rQnVmZmVyLT5saW5rKG1fY2FsbEFyaXR5
Rml4dXAsIEZ1bmN0aW9uUHRyKChtX3ZtLT5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3Ip
KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogICAgIAogICAgIGRpc2Fzc2VtYmxlKCps
aW5rQnVmZmVyKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsNyArMTc2LDEwIEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBO
b2RlUmVzdWx0U3RvcmFnZSkgXAogICAgIG1hY3JvKENvbnN0YW50U3RvcmFnZVBvaW50ZXIsIE5v
ZGVSZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFjcm8oVHlwZWRBcnJheVdhdGNocG9pbnQsIE5vZGVN
dXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhHZXRHZXR0ZXIsIE5vZGVSZXN1bHRKUykgXAorICAg
IG1hY3JvKEdldFNldHRlciwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oR2V0QnlPZmZzZXQs
IE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEdldEdldHRlclNldHRlckJ5T2Zmc2V0LCBOb2Rl
UmVzdWx0SlMpIFwKICAgICBtYWNybyhNdWx0aUdldEJ5T2Zmc2V0LCBOb2RlUmVzdWx0SlMpIFwK
ICAgICBtYWNybyhQdXRCeU9mZnNldCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKE11
bHRpUHV0QnlPZmZzZXQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJl
dmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDEyICsxMDgsNDQgQEAgdm9p
ZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAgICAgICBJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOwogICAg
ICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gaml0LmJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKGNvZGVPcmlnaW4pOwogICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9y
Q2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVy
KTsKKyAgICAgICAgdm9pZCoganVtcFRhcmdldDsKKyAgICAgICAgdm9pZCogdHJ1ZVJldHVyblBD
ID0gbnVsbHB0cjsKKyAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGNhbGxCeXRlY29kZUluZGV4
ID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgQ2FsbExp
bmtJbmZvKiBjYWxsTGlua0luZm8gPQotICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JD
YWxsZXItPmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoY2FsbEJ5dGVjb2RlSW5kZXgp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwogICAgICAgICAKLSAgICAg
ICAgdm9pZCoganVtcFRhcmdldCA9IGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmV4
ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIHN3aXRjaCAoaW5saW5lQ2FsbEZyYW1lLT5raW5k
KSB7CisgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDYWxsOgorICAgICAgICBjYXNlIElu
bGluZUNhbGxGcmFtZTo6Q29uc3RydWN0OiB7CisgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbyA9CisgICAgICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIt
PmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoY2FsbEJ5dGVjb2RlSW5kZXgpOworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAganVtcFRhcmdldCA9IGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmV4
ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpHZXR0ZXJDYWxsOgorICAgICAg
ICBjYXNlIElubGluZUNhbGxGcmFtZTo6U2V0dGVyQ2FsbDogeworICAgICAgICAgICAgU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvID0KKyAgICAgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9j
a0ZvckNhbGxlci0+ZmluZFN0dWJJbmZvKENvZGVPcmlnaW4oY2FsbEJ5dGVjb2RlSW5kZXgpKTsK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgc3dpdGNoIChpbmxpbmVDYWxsRnJhbWUtPmtpbmQpIHsKKyAgICAgICAgICAgIGNh
c2UgSW5saW5lQ2FsbEZyYW1lOjpHZXR0ZXJDYWxsOgorICAgICAgICAgICAgICAgIGp1bXBUYXJn
ZXQgPSBqaXQudm0oKS0+Z2V0Q1RJU3R1YihiYXNlbGluZUdldHRlclJldHVyblRodW5rR2VuZXJh
dG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpTZXR0ZXJDYWxsOgorICAgICAgICAg
ICAgICAgIGp1bXBUYXJnZXQgPSBqaXQudm0oKS0+Z2V0Q1RJU3R1YihiYXNlbGluZVNldHRlclJl
dHVyblRodW5rR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgdHJ1ZVJldHVyblBDID0gc3R1Yklu
Zm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgIHN0
dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfSB9CiAKICAgICAgICAgR1BSUmVnIGNhbGxlckZyYW1l
R1BSOwogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1l
KSB7CkBAIC0xMjIsMTIgKzE1NCwxNSBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0Nh
bGxIZWxwZXJzCiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgY2FsbGVyRnJhbWVHUFIgPSBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcjsKICAgICAgICAgCisgICAgICAgIGppdC5zdG9yZVB0
cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNl
dCgpKSk7CisgICAgICAgIGlmICh0cnVlUmV0dXJuUEMpCisgICAgICAgICAgICBqaXQuc3RvcmVQ
dHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRydWVSZXR1cm5QQyksIEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
LnNpemUoKSkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpD
b2RlQmxvY2spKSk7CiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxs
KQogICAgICAgICAgICAgaml0LnN0b3JlNjQoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgp
LT5zY29wZSgpKSkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rl
cikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKSk7
CiAgICAgICAgIGppdC5zdG9yZTY0KGNhbGxlckZyYW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFk
ZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZzZXQoKSkp
OwotICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1
bXBUYXJnZXQpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNh
bGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSkpOwogICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJp
dHMgPSBDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlT2Zmc2V0KGNvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1
bWVudENvdW50KSkpOwogICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW0zMihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpLCBBc3NlbWJseUhlbHBl
cnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CkBAIC0xNDMsNyArMTc4LDYgQEAgdm9p
ZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAgICAgICBpZiAoIWlubGlu
ZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihBc3Nl
bWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFu
dCgpLT5zY29wZSgpKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0
ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpTY29wZUNoYWluKSkp
OwogICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNldCgp
KSk7Ci0gICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
anVtcFRhcmdldCksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5l
Q2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpKSk7CiAgICAgICAgIEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiA9IGJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4OwogICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBD
YWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rp
b24pOwogICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihs
b2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTg4LDYgKzE4OCwyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2hh
bmdlZCB8PSBzZXRQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEdl
dHRlclNldHRlckJ5T2Zmc2V0OiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rp
b24oU3BlY0NlbGxPdGhlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2UgR2V0R2V0dGVyOgorICAgICAgICBjYXNlIEdldFNldHRlcjoKKyAgICAgICAgY2Fz
ZSBHZXRDYWxsZWU6CisgICAgICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgorICAgICAgICBj
YXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjogeworICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQ
cmVkaWN0aW9uKFNwZWNGdW5jdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQog
CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDogewogICAgICAgICAgICAgY2hhbmdlZCB8
PSBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMik7CkBAIC00MjMsMTEgKzQzNyw2IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgR2V0Q2FsbGVlOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3Bl
Y0Z1bmN0aW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBDcmVhdGVUaGlzOgogICAgICAgICBjYXNlIE5ld09iamVjdDogewogICAg
ICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNGaW5hbE9iamVjdCk7CkBAIC00
OTAsMTIgKzQ5OSw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgotICAgICAgICBj
YXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQ
cmVkaWN0aW9uKFNwZWNGdW5jdGlvbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKICAgICAgICAgY2FzZSBH
ZXRBcnJheUxlbmd0aDoKICAgICAgICAgY2FzZSBHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZp
c2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDYgKzI1Myw4IEBAIGJvb2wgc2FmZVRvRXhlY3V0
ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIFZhbHVlUmVwOgogICAgIGNhc2UgRG91
YmxlUmVwOgogICAgIGNhc2UgSW50NTJSZXA6CisgICAgY2FzZSBHZXRHZXR0ZXI6CisgICAgY2Fz
ZSBHZXRTZXR0ZXI6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKICAgICBjYXNlIEdl
dEJ5VmFsOgpAQCAtMjg1LDYgKzI4Nyw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0
YXRlVHlwZSYgc3QKICAgICAgICAgICAgIFN0cnVjdHVyZVNldChub2RlLT5zdHJ1Y3R1cmVUcmFu
c2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlKSk7CiAgICAgICAgIAogICAgIGNhc2UgR2V0
QnlPZmZzZXQ6CisgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKICAgICBjYXNlIFB1
dEJ5T2Zmc2V0OgogICAgICAgICByZXR1cm4gc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNWYWxpZE9mZnNldCgKICAgICAgICAgICAgIGdyYXBo
Lm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5vZmZz
ZXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw2ICszNSw3IEBACiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1Ns
b3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKKyNpbmNsdWRlICJHZXR0
ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKICNpbmNsdWRlICJPYmplY3RQ
cm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC0zNzkyLDYgKzM3OTMsNDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6IHsK
KyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOworICAgICAgICAKKyAgICAg
ICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVz
dWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBT
dG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBtX2ppdC5ncmFwaCgpLm1fc3Rv
cmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsKKyAgICAgICAg
CisgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBv
ZmZzZXRSZWxhdGl2ZVRvQmFzZShzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQpICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBh
eWxvYWRHUFIpOworICAgICAgICAKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRQYXlsb2FkR1BS
LCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEdldEdl
dHRlcjogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBvcDEpOwor
ICAgICAgICAKKyAgICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIG1faml0Lmxv
YWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mob3AxR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9m
R2V0dGVyKCkpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1
bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2Ug
R2V0U2V0dGVyOiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIG9w
MSk7CisgICAgICAgIAorICAgICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAKKyAgICAgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhvcDFHUFIsIEdldHRlclNldHRlcjo6b2Zm
c2V0T2ZTZXR0ZXIoKSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBjZWxsUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAg
Y2FzZSBQdXRCeU9mZnNldDogewogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZS0+Y2hpbGQzKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw2ICszNSw3IEBACiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1Ns
b3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKKyNpbmNsdWRlICJHZXR0
ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJv
dG90eXBlLmgiCiAjaW5jbHVkZSAiU3BpbGxSZWdpc3RlcnNNb2RlLmgiCkBAIC0zODUzLDcgKzM4
NTQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBHZXRCeU9mZnNldDogeworICAgIGNh
c2UgR2V0QnlPZmZzZXQ6CisgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDogewogICAg
ICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgc3RvcmFnZSk7CiAgICAgICAgIApA
QCAtMzg2OCw2ICszODcwLDMyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIEdldEdldHRl
cjogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBvcDEpOworICAg
ICAgICAKKyAgICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmxvYWRQ
dHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mob3AxR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mR2V0
dGVyKCkpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRH
UFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgR2V0
U2V0dGVyOiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIG9wMSk7
CisgICAgICAgIAorICAgICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAKKyAgICAgICAgbV9qaXQu
bG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhvcDFHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0
T2ZTZXR0ZXIoKSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBjZWxsUmVzdWx0KHJl
c3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2Fz
ZSBQdXRCeU9mZnNldDogewogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+
Y2hpbGQzKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhl
YXBSZXBvc2l0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAorI2luY2x1
ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkpTU2NvcGUuaCIKICNpbmNsdWRlICJKU1Zh
cmlhYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJ
KHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJh
Y3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Niw2ICs0Niw4IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhCdXR0ZXJmbHlfcHVibGljTGVuZ3Ro
LCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpIFwKICAgICBtYWNybyhCdXR0ZXJm
bHlfdmVjdG9yTGVuZ3RoLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpIFwKICAg
ICBtYWNybyhDYWxsRnJhbWVfY2FsbGVyRnJhbWUsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZz
ZXQoKSkgXAorICAgIG1hY3JvKEdldHRlclNldHRlcl9nZXR0ZXIsIEdldHRlclNldHRlcjo6b2Zm
c2V0T2ZHZXR0ZXIoKSkgXAorICAgIG1hY3JvKEdldHRlclNldHRlcl9zZXR0ZXIsIEdldHRlclNl
dHRlcjo6b2Zmc2V0T2ZTZXR0ZXIoKSkgXAogICAgIG1hY3JvKEpTQXJyYXlCdWZmZXJWaWV3X2xl
bmd0aCwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpIFwKICAgICBtYWNybyhK
U0FycmF5QnVmZmVyVmlld19tb2RlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZNb2RlKCkp
IFwKICAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld192ZWN0b3IsIEpTQXJyYXlCdWZmZXJWaWV3
OjpvZmZzZXRPZlZlY3RvcigpKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYg
KzcyLDkgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNh
c2UgTmV3QXJyYXk6CiAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKICAgICBjYXNlIEdldEJ5T2Zm
c2V0OgorICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6CisgICAgY2FzZSBHZXRHZXR0
ZXI6CisgICAgY2FzZSBHZXRTZXR0ZXI6CiAgICAgY2FzZSBQdXRCeU9mZnNldDoKICAgICBjYXNl
IEdldEdsb2JhbFZhcjoKICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDcgKzE3OCw3
IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAKICAgICAgICAgbGlua0J1ZmZlciA9IGFkb3B0
UHRyKG5ldyBMaW5rQnVmZmVyKHZtLCAmaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVz
dFN1Y2NlZWQpKTsKICAgICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlDaGVjaywgY29k
ZUJsb2NrLT5tX2lzQ29uc3RydWN0b3IgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDog
b3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2spOwotICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxB
cml0eUZpeHVwLCBGdW5jdGlvblB0cigodm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwKSkuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJp
dHlGaXh1cCwgRnVuY3Rpb25QdHIoKHZtLmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikp
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAgIGxpbmtCdWZmZXItPmxpbmso
bWFpblBhdGhKdW1wcywgQ29kZUxvY2F0aW9uTGFiZWwoYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0
ZS5nZW5lcmF0ZWRGdW5jdGlvbikpKTsKIAogICAgICAgICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFs
aXplQWRkcmVzc0ZvckNhbGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGJpdHdpc2VfY2FzdDx2b2lk
Kj4oc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24pKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTY5MDE0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5Myw4ICs0OTMsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNvbXBpbGVT
dHJpbmdDaGFyQ29kZUF0KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBHZXRC
eU9mZnNldDoKKyAgICAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKICAgICAgICAg
ICAgIGNvbXBpbGVHZXRCeU9mZnNldCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgR2V0R2V0dGVyOgorICAgICAgICAgICAgY29tcGlsZUdldEdldHRlcigpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0U2V0dGVyOgorICAgICAgICAgICAgY29tcGlsZUdl
dFNldHRlcigpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9m
ZnNldDoKICAgICAgICAgICAgIGNvbXBpbGVNdWx0aUdldEJ5T2Zmc2V0KCk7CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTMxNDEsNiArMzE0OCwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgbG93
U3RvcmFnZShtX25vZGUtPmNoaWxkMSgpKSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCBkYXRhLm9m
ZnNldCkpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRHZXR0ZXIoKQorICAgIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEo
KSksIG1faGVhcHMuR2V0dGVyU2V0dGVyX2dldHRlcikpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGNvbXBpbGVHZXRTZXR0ZXIoKQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2Fk
UHRyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1faGVhcHMuR2V0dGVyU2V0dGVyX3NldHRl
cikpOworICAgIH0KKyAgICAKICAgICB2b2lkIGNvbXBpbGVNdWx0aUdldEJ5T2Zmc2V0KCkKICAg
ICB7CiAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0FjY2Vzc29yQ2FsbEpJ
VFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYs
NyArNDYsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBib29sIHZpc2l0V2VhayhSZXBh
dGNoQnVmZmVyJikgb3ZlcnJpZGU7CiAgICAgCi1wcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0
cjxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvOwogfTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzAsNyArNTcwLDcgQEAgQ29tcGlsYXRp
b25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQogI2VuZGlmCiAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX3ZtLT5hcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy0+cmV0dXJuUENzRm9y
KCptX3ZtLCBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSksIHRodW5rUmVnKTsKICAgICAg
ICAgbG9hZFB0cihCYXNlSW5kZXgodGh1bmtSZWcsIHJlZ1QwLCB0aW1lc1B0cigpKSwgdGh1bmtS
ZWcpOwotICAgICAgICBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIoYXJpdHlGaXh1cCku
Y29kZSgpKTsKKyAgICAgICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKGFyaXR5Rml4
dXBHZW5lcmF0b3IpLmNvZGUoKSk7CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIG1f
Ynl0ZWNvZGVPZmZzZXQgPSAodW5zaWduZWQpLTE7IC8vIFJlc2V0IHRoaXMsIGluIG9yZGVyIHRv
IGd1YXJkIGl0cyB1c2Ugd2l0aCBBU1NFUlRzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MzAsNyArNDMwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNvbnN0cnVjdEdl
bgogICAgIHJldHVybiBuYXRpdmVGb3JHZW5lcmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1Y3QpOwog
fQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJpdHlGaXh1cChWTSogdm0pCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgYXJpdHlGaXh1cEdlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgSlNJbnRlcmZh
Y2VKSVQgaml0KHZtKTsKIApAQCAtNTMzLDYgKzUzMyw4MyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgYXJpdHlGaXh1cChWTSogdm0pCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsICgiZml4dXAgYXJpdHkiKSk7CiB9CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBiYXNlbGlu
ZUdldHRlclJldHVyblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK3sKKyAgICBKU0ludGVyZmFjZUpJ
VCBqaXQodm0pOworICAgIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaml0LnNldHVwUmVzdWx0
cyhHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworI2Vsc2UKKyAgICBqaXQuc2V0dXBS
ZXN1bHRzKEdQUkluZm86OnJlZ1QwKTsKKyNlbmRpZgorICAgIAorICAgIHVuc2lnbmVkIG51bWJl
ck9mUGFyYW1ldGVycyA9IDA7CisgICAgbnVtYmVyT2ZQYXJhbWV0ZXJzKys7IC8vIFRoZSAndGhp
cycgYXJndW1lbnQuCisgICAgbnVtYmVyT2ZQYXJhbWV0ZXJzKys7IC8vIFRoZSB0cnVlIHJldHVy
biBQQy4KKyAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZlJlZ3NGb3JDYWxsID0KKyAgICAgICAg
SlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIG51bWJlck9mUGFyYW1ldGVyczsKKyAgICAK
KyAgICB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCA9CisgICAgICAgIG51bWJlck9mUmVn
c0ZvckNhbGwgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwor
ICAgIAorICAgIHVuc2lnbmVkIGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCA9CisgICAgICAg
IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG51bWJlck9m
Qnl0ZXNGb3JDYWxsKTsKKyAgICAgICAgICAgIAorICAgIC8vIFRoZSByZWFsIHJldHVybiBhZGRy
ZXNzIGlzIHN0b3JlZCBhYm92ZSB0aGUgYXJndW1lbnRzLiBXZSBwYXNzZWQgb25lIGFyZ3VtZW50
LCB3aGljaCBpcworICAgIC8vICd0aGlzJy4gU28gYXJndW1lbnQgYXQgaW5kZXggMSBpcyB0aGUg
cmV0dXJuIGFkZHJlc3MuCisgICAgaml0LmxvYWRQdHIoCisgICAgICAgIEFzc2VtYmx5SGVscGVy
czo6QWRkcmVzcygKKyAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIsCisgICAgICAgICAgICAodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSkub2Zmc2V0
KCkgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwK
KyAgICAgICAgR1BSSW5mbzo6cmVnVDIpOworICAgIAorICAgIGppdC5hZGRQdHIoCisgICAgICAg
IEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2Fs
bCksCisgICAgICAgIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
IAorICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QyKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCAoImJhc2VsaW5lIGdldHRlciByZXR1cm4gdGh1bmsiKSk7Cit9CisK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZiBiYXNlbGluZVNldHRlclJldHVyblRodW5rR2VuZXJhdG9y
KFZNKiB2bSkKK3sKKyAgICBKU0ludGVyZmFjZUpJVCBqaXQodm0pOworICAgIAorICAgIHVuc2ln
bmVkIG51bWJlck9mUGFyYW1ldGVycyA9IDA7CisgICAgbnVtYmVyT2ZQYXJhbWV0ZXJzKys7IC8v
IFRoZSAndGhpcycgYXJndW1lbnQuCisgICAgbnVtYmVyT2ZQYXJhbWV0ZXJzKys7IC8vIFRoZSB2
YWx1ZSB0byBzZXQuCisgICAgbnVtYmVyT2ZQYXJhbWV0ZXJzKys7IC8vIFRoZSB0cnVlIHJldHVy
biBQQy4KKyAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZlJlZ3NGb3JDYWxsID0KKyAgICAgICAg
SlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIG51bWJlck9mUGFyYW1ldGVyczsKKyAgICAK
KyAgICB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCA9CisgICAgICAgIG51bWJlck9mUmVn
c0ZvckNhbGwgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwor
ICAgIAorICAgIHVuc2lnbmVkIGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCA9CisgICAgICAg
IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG51bWJlck9m
Qnl0ZXNGb3JDYWxsKTsKKyAgICAgICAgICAgIAorICAgIC8vIFRoZSByZWFsIHJldHVybiBhZGRy
ZXNzIGlzIHN0b3JlZCBhYm92ZSB0aGUgYXJndW1lbnRzLiBXZSBwYXNzZWQgdHdvIGFyZ3VtZW50
cywgc28KKyAgICAvLyB0aGUgYXJndW1lbnQgYXQgaW5kZXggMiBpcyB0aGUgcmV0dXJuIGFkZHJl
c3MuCisgICAgaml0LmxvYWRQdHIoCisgICAgICAgIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcygK
KyAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsCisgICAg
ICAgICAgICAodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMikub2Zmc2V0KCkgLSBKU1N0YWNr
OjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwKKyAgICAgICAgR1BS
SW5mbzo6cmVnVDIpOworICAgIAorICAgIGppdC5hZGRQdHIoCisgICAgICAgIEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCksCisgICAgICAg
IEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIAorICAgIGppdC5q
dW1wKEdQUkluZm86OnJlZ1QyKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAm
aml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCAoImJhc2VsaW5lIHNldHRlciByZXR1cm4gdGh1bmsiKSk7Cit9CisKIHN0YXRpYyB2b2lk
IHN0cmluZ0NoYXJMb2FkKFNwZWNpYWxpemVkVGh1bmtKSVQmIGppdCwgVk0qIHZtKQogewogICAg
IC8vIGxvYWQgc3RyaW5nCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtH
ZW5lcmF0b3JzLmgJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvVGh1bmtHZW5lcmF0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsMTAgQEAg
aW5saW5lIFRodW5rR2VuZXJhdG9yIHZpcnR1YWxUaHVua0dlbmVyYQogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBu
YXRpdmVDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRp
dmVUYWlsQ2FsbEdlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFyaXR5Rml4
dXAoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVwR2VuZXJhdG9yKFZNKik7
CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBiYXNlbGluZUdldHRlclJldHVyblRodW5rR2VuZXJh
dG9yKFZNKiB2bSk7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYmFzZWxpbmVTZXR0ZXJSZXR1cm5U
aHVua0dlbmVyYXRvcihWTSogdm0pOwogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hhckNvZGVB
dFRodW5rR2VuZXJhdG9yKFZNKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hhckF0VGh1bmtH
ZW5lcmF0b3IoVk0qKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
blNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTcwLDcgKzE3MCw3IEBAIHN0YXRpYyBDb21tb25TbG93UGF0aHM6OkFyaXR5Q2hlY2tEYXRhKiAK
ICAgICByZXN1bHQtPnBhZGRlZFN0YWNrU3BhY2UgPSBzbG90c1RvQWRkOwogI2lmIEVOQUJMRShK
SVQpCiAgICAgaWYgKHZtLmNhblVzZUpJVCgpKSB7Ci0gICAgICAgIHJlc3VsdC0+dGh1bmtUb0Nh
bGwgPSB2bS5nZXRDVElTdHViKGFyaXR5Rml4dXApLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
OworICAgICAgICByZXN1bHQtPnRodW5rVG9DYWxsID0gdm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVw
R2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICAgICAgcmVzdWx0LT5y
ZXR1cm5QQyA9IHZtLmFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLT5yZXR1cm5QQ0Zvcih2bSwg
c2xvdHNUb0FkZCAqIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkpLmV4ZWN1dGFibGVBZGRyZXNz
KCk7CiAgICAgfSBlbHNlCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JhZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JhZy5oCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9CYWcuaAkod29ya2luZyBjb3B5KQpAQCAtODMsNiArODMsMTEgQEAgcHVibGlj
OgogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9ub2RlID09IG90aGVyLm1fbm9kZTsK
ICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOworICAgICAgICB9CiAgICAgcHJpdmF0ZToKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4gZnJpZW5kIGNsYXNzIFdURjo6QmFnOwogICAgICAgICBOb2RlKiBtX25vZGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234056</attachid>
            <date>2014-06-28 17:44:36 -0700</date>
            <delta_ts>2014-06-29 20:46:43 -0700</delta_ts>
            <desc>it begins (setter inlining)</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>10551</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljUHV0QnlJZExpc3QuaAkocmV2aXNpb24gMTcwNTcxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNTMsNiArNTMsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgUHV0QnlJZEFjY2VzcygpCiAgICAg
ICAgIDogbV90eXBlKEludmFsaWQpCisgICAgICAgICwgbV9jaGFpbkNvdW50KFVJTlRfTUFYKQog
ICAgIHsKICAgICB9CiAgICAgCkBAIC05NSw2ICs5Niw3IEBAIHB1YmxpYzoKICAgICAgICAgQWNj
ZXNzVHlwZSBhY2Nlc3NUeXBlLAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKICAgICAg
ICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluLAorICAgICAgICB1bnNpZ25lZCBjaGFpbkNvdW50LAog
ICAgICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIsCiAgICAg
ICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQogICAgIHsKQEAgLTEw
Miw4ICsxMDQsMTAgQEAgcHVibGljOgogICAgICAgICBQdXRCeUlkQWNjZXNzIHJlc3VsdDsKICAg
ICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CiAg
ICAgICAgIHJlc3VsdC5tX3R5cGUgPSBhY2Nlc3NUeXBlOwotICAgICAgICBpZiAoY2hhaW4pCisg
ICAgICAgIGlmIChjaGFpbikgewogICAgICAgICAgICAgcmVzdWx0Lm1fY2hhaW4uc2V0KHZtLCBv
d25lciwgY2hhaW4pOworICAgICAgICAgICAgcmVzdWx0Lm1fY2hhaW5Db3VudCA9IGNoYWluQ291
bnQ7CisgICAgICAgIH0KICAgICAgICAgcmVzdWx0Lm1fY3VzdG9tU2V0dGVyID0gY3VzdG9tU2V0
dGVyOwogICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwpAQCAtMTQ4LDYgKzE1MiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX2NoYWluLmdldCgpOwogICAgIH0KICAgICAKKyAgICB1bnNpZ25lZCBjaGFpbkNvdW50
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1NldHRlcigpIHx8IGlzQ3VzdG9tKCkp
OworICAgICAgICByZXR1cm4gbV9jaGFpbkNvdW50OworICAgIH0KKyAgICAKICAgICBKSVRTdHVi
Um91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzVHJh
bnNpdGlvbigpIHx8IGlzUmVwbGFjZSgpIHx8IGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7CkBA
IC0xNjksNiArMTc5LDcgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBt
X29sZFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX25ld1N0cnVjdHVy
ZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlQ2hhaW4+IG1fY2hhaW47CisgICAgdW5zaWdu
ZWQgbV9jaGFpbkNvdW50OwogICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIG1fY3Vz
dG9tU2V0dGVyOwogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKIH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuY3BwCShyZXZpc2lvbiAxNzA1NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw2ICsxNzYsMjAgQEAg
UHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICBQdXRCeUlk
U3RhdHVzIHJlc3VsdDsKICAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7CiAgICAgICAg
IAorICAgICAgICBTdGF0ZSBzbG93UGF0aFN0YXRlID0gVGFrZXNTbG93UGF0aDsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICBjb25zdCBQdXRCeUlkQWNjZXNzJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNl
IFB1dEJ5SWRBY2Nlc3M6OlNldHRlcjoKKyAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6
Q3VzdG9tU2V0dGVyOgorICAgICAgICAgICAgICAgIHNsb3dQYXRoU3RhdGUgPSBNYWtlc0NhbGxz
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CiAgICAgICAg
ICAgICBjb25zdCBQdXRCeUlkQWNjZXNzJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKICAgICAgICAg
ICAgIApAQCAtMTg0LDkgKzE5OCw5IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvclMKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5z
dHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1
Y3R1cmUtPmdldENvbmN1cnJlbnRseSgqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkKTsKICAgICAg
ICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwogICAgICAgICAgICAgICAg
IGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQoUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0
dXJlLCBvZmZzZXQpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMo
VGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KHNsb3dQYXRoU3RhdGUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIApAQCAtMTk0LDcgKzIwOCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPQogICAgICAgICAgICAgICAgICAgICBhY2Nlc3MubmV3U3RydWN0dXJlKCktPmdldENvbmN1
cnJlbnRseSgqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkKTsKICAgICAgICAgICAgICAgICBpZiAo
IWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwogICAgICAgICAgICAgICAgIFJlZlB0cjxJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKICAgICAgICAgICAgICAgICBpZiAoYWNjZXNzLmNoYWlu
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbigKQEAgLTIwNSwxNSArMjE5LDI1IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICBib29sIG9rID0gcmVzdWx0LmFw
cGVuZFZhcmlhbnQoUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCiAgICAgICAgICAgICAgICAg
ICAgIGFjY2Vzcy5vbGRTdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjaGFpbi5n
ZXQoKSwgb2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgaWYgKCFvaykKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBQdXRCeUlkQWNjZXNz
OjpTZXR0ZXI6CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFB1dEJ5SWRBY2Nl
c3M6OlNldHRlcjogeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNj
ZXNzLnN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KCpwcm9maWxl
ZEJsb2NrLT52bSgpLCB1aWQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlm
IChhY2Nlc3MuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5SWRBY2Nl
c3M6OkN1c3RvbVNldHRlcjoKICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhN
YWtlc0NhbGxzKTsKIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1
cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFy
aWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMTcwNTcxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNDQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK1B1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJp
YW50OjpyZXBsYWNlKGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQpCit7CisgICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OworICAgIHJlc3VsdC5tX2tp
bmQgPSBSZXBsYWNlOworICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAg
ICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUHV0
QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCisgICAgY29uc3QgU3RydWN0
dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAorICAgIGNvbnN0
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCit7CisgICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OworICAgIHJlc3VsdC5tX2tpbmQg
PSBUcmFuc2l0aW9uOworICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IG9sZFN0cnVjdHVyZTsK
KyAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7CisgICAgaWYgKHN0cnVj
dHVyZUNoYWluKQorICAgICAgICBzdHJ1Y3R1cmVDaGFpbi0+Z2F0aGVyQ2hlY2tzKHJlc3VsdC5t
X2NvbnN0YW50Q2hlY2tzKTsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnNldHRlcigK
KyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LAorICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLAorICAgIHN0ZDo6dW5pcXVlX3B0
cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpCit7CisgICAgUHV0QnlJZFZhcmlhbnQg
cmVzdWx0OworICAgIHJlc3VsdC5tX2tpbmQgPSBTZXR0ZXI7CisgICAgcmVzdWx0Lm1fb2xkU3Ry
dWN0dXJlID0gc3RydWN0dXJlOworICAgIGlmIChjaGFpbikKKyAgICAgICAgY2hhaW4tPmdhdGhl
ckNoZWNrcyhyZXN1bHQubV9jb25zdGFudENoZWNrcyk7CisgICAgcmVzdWx0Lm1fb2Zmc2V0ID0g
b2Zmc2V0OworICAgIHJlc3VsdC5tX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptb3ZlKGNhbGxMaW5r
U3RhdHVzKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBTdHJ1Y3R1cmUqIFB1dEJ5SWRWYXJp
YW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkgY29uc3QKIHsKICAgICBBU1NFUlQoa2lu
ZCgpID09IFRyYW5zaXRpb24pOwpAQCAtNDQsMTggKzgyLDMwIEBAIFN0cnVjdHVyZSogUHV0QnlJ
ZFZhcmlhbnQ6Om9sZFN0cnVjdHVyZUYKIAogYm9vbCBQdXRCeUlkVmFyaWFudDo6d3JpdGVzU3Ry
dWN0dXJlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGtpbmQoKSA9PSBUcmFuc2l0aW9uOworICAg
IHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgIGNhc2UgU2V0dGVy
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQogfQogCiBib29sIFB1dEJ5SWRWYXJpYW50OjpyZWFsbG9jYXRlc1N0b3JhZ2Uo
KSBjb25zdAogewotICAgIGlmIChraW5kKCkgIT0gVHJhbnNpdGlvbikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAotICAgIGlmIChvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPm91dE9m
TGluZUNhcGFjaXR5KCkgPT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpCisg
ICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAgIHJldHVy
biBvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gbmV3
U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgY2FzZSBTZXR0ZXI6CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgUHV0QnlJZFZhcmlhbnQ6Om1h
a2VzQ2FsbHMoKSBjb25zdAoreworICAgIHJldHVybiBraW5kKCkgPT0gU2V0dGVyOwogfQogCiBi
b29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zdCBQdXRCeUlkVmFyaWFudCYg
b3RoZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlh
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFZhcmlhbnQuaAkocmV2aXNpb24gMTcwNTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDggQEAg
cHVibGljOgogICAgIGVudW0gS2luZCB7CiAgICAgICAgIE5vdFNldCwKICAgICAgICAgUmVwbGFj
ZSwKLSAgICAgICAgVHJhbnNpdGlvbgorICAgICAgICBUcmFuc2l0aW9uLAorICAgICAgICBTZXR0
ZXIKICAgICB9OwogICAgIAogICAgIFB1dEJ5SWRWYXJpYW50KCkKQEAgLTQ3LDI4ICs0OCwxNyBA
QCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQg
cmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KQotICAgIHsKLSAgICAgICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwotICAgICAgICByZXN1
bHQubV9raW5kID0gUmVwbGFjZTsKLSAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3Ry
dWN0dXJlOwotICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgfQorICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCByZXBsYWNlKAorICAg
ICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KTsKICAgICAKICAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgdHJhbnNpdGlvbigKICAgICAgICAg
Y29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
LAotICAgICAgICBQYXNzUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IHN0cnVjdHVyZUNo
YWluLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCi0gICAgewotICAgICAgICBQdXRCeUlkVmFyaWFu
dCByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX2tpbmQgPSBUcmFuc2l0aW9uOwotICAgICAgICBy
ZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmU7Ci0gICAgICAgIHJlc3VsdC5tX25l
d1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZUNoYWluKQot
ICAgICAgICAgICAgc3RydWN0dXJlQ2hhaW4tPmdhdGhlckNoZWNrcyhyZXN1bHQubV9jb25zdGFu
dENoZWNrcyk7Ci0gICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9CisgICAgICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4q
IHN0cnVjdHVyZUNoYWluLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpOworICAgIAorICAgIHN0YXRp
YyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIoCisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3Ry
dWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCisgICAgICAgIEludGVuZGVkU3RydWN0dXJl
Q2hhaW4qIGNoYWluLAorICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNh
bGxMaW5rU3RhdHVzKTsKICAgICAKICAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tp
bmQ7IH0KICAgICAKQEAgLTc3LDE5ICs2NywxOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3Qg
U3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKGtp
bmQoKSA9PSBSZXBsYWNlKTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtp
bmQoKSA9PSBTZXR0ZXIpOwogICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7CiAgICAgfQog
ICAgIAogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlKCkgY29uc3QKICAgICB7
Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVwbGFj
ZSk7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVw
bGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKICAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJl
OwogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpCiAgICAgewot
ICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2Up
OworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxh
Y2UgfHwga2luZCgpID09IFNldHRlcik7CiAgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsK
ICAgICB9CiAgICAgCkBAIC0xMDMsNiArOTMsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIHdyaXRl
c1N0cnVjdHVyZXMoKSBjb25zdDsKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0
OworICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwogICAgIAogICAgIGNvbnN0IENvbnN0YW50
U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkgY29uc3QKICAgICB7CkBAIC0x
MTUsNiArMTA2LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OwogICAgIH0K
ICAgICAKKyAgICBDYWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9jYWxs
TGlua1N0YXR1cy5nZXQoKTsKKyAgICB9CisKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0
IFB1dEJ5SWRWYXJpYW50JiBvdGhlcik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CkBAIC0xMjgsNiArMTI1LDcgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmUqIG1f
bmV3U3RydWN0dXJlOwogICAgIENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3IgbV9jb25zdGFu
dENoZWNrczsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234065</attachid>
            <date>2014-06-29 20:46:43 -0700</date>
            <delta_ts>2014-06-30 15:31:28 -0700</delta_ts>
            <desc>more!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>34236</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzA1NzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzM3LDYgKzMzNyw4IEBACiAJCTBGNkIxQ0M5MTg2NDFE
RjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNDNzE4NjQxREY4MDA4NDVE
OTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwICovOyB9OwogCQkwRjZCMUNDQTE4
NjQxREY4MDA4NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0M4MTg2NDFERjgwMDg0
NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNkU4NDVBMTkwMzBCRUYwMDU2Mjc0MSAv
KiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2RTg0NTkxOTAzMEJFRjAwNTYyNzQxIC8qIERGR1ZhcmlhYmxl
QWNjZXNzRGF0YS5jcHAgKi87IH07CisJCTBGNkZDNzUwMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21w
bGV4R2V0U3RhdHVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNkZDNzRFMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCAq
LzsgfTsKKwkJMEY2RkM3NTExOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkZDNzRGMTk2
MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3MDI1QTkxNzE0QjBGQTAwMzgyQzBFIC8q
IERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcwMjVBNzE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmNwcCAqLzsgfTsKIAkJMEY3MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8q
IERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3MDI1QTgxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRD
b21waWxlckNvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGNzE0Q0E0MTZFQTkyRjAwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdh
dGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBo
YXNlLmNwcCAqLzsgfTsKQEAgLTI1MTIsNiArMjUxNCw4IEBACiAJCTBGNkIxQ0M3MTg2NDFERjgw
MDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNkIxQ0M4MTg2NDFERjgwMDg0NUQ5NyAvKiBB
cml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjZFODQ1OTE5MDMwQkVGMDA1NjI3NDEgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRh
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5jcHA7IHBhdGggPSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2RkM3NEUxOTYxMTBBODAwRTFEMDJEIC8qIENvbXBs
ZXhHZXRTdGF0dXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29t
cGxleEdldFN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNkZDNzRG
MTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvbXBsZXhHZXRTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY3MDI1QTcxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNv
bW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzAyNUE4MTcxNEIwRjgwMDM4MkMw
RSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmg7IHBhdGggPSBkZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzE0Q0Ex
MTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9u
UGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTM3OSw2ICs1MzgzLDggQEAKIAkJCQkwRkJE
N0U2NzE0NDc5OThGMDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oICovLAogCQkJCTBGOEY5NDNGMTY2
NzYzMkQwMEQ2MTk3MSAvKiBDb2RlVHlwZS5jcHAgKi8sCiAJCQkJMEYwQjgzQTUxNEJDRjUwNDAw
ODg1QjRGIC8qIENvZGVUeXBlLmggKi8sCisJCQkJMEY2RkM3NEUxOTYxMTBBODAwRTFEMDJEIC8q
IENvbXBsZXhHZXRTdGF0dXMuY3BwICovLAorCQkJCTBGNkZDNzRGMTk2MTEwQTgwMEUxRDAyRCAv
KiBDb21wbGV4R2V0U3RhdHVzLmggKi8sCiAJCQkJMEYzRDBCQkExOTRBNDE0MzAwRkM5Q0Y5IC8q
IENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwICovLAogCQkJCTBGM0QwQkJCMTk0QTQxNDMwMEZD
OUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmggKi8sCiAJCQkJMEY0MjZBNEExNDYwQ0Q2
QjAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCAqLywKQEAgLTY1ODUsNiArNjU5MSw3IEBACiAJCQkJ
QTc4NUY2QkMxOEM1NTNGRTAwRjEwNjI2IC8qIFNwaWxsUmVnaXN0ZXJzTW9kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NTUwRTE2RjVDRDAwQjM0NDYwIC8qIFByb3BlcnR5U2xvdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5U3Rv
cmFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2RkM3NTExOTYxMTBBODAwRTFEMDJEIC8qIENv
bXBsZXhHZXRTdGF0dXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDU2MEUxNkY1Q0QwMEIz
NDQ2MCAvKiBQcm90ZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDc0QzMzQjE2QUEyRDk1MDA2
MkYwMUQgLyogUHJvdG90eXBlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNDE0Q0E3
REQ5MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCkBAIC04MTAyLDYg
KzgxMDksNyBAQAogCQkJCUZFRDk0RjMwMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZ01hYy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyNTE1ODUzQ0UwMDA0QTRFN0QgLyogV2F0Y2hw
b2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUNGNzM3NzE3MUNBNkZCMDBDOUJCMUUgLyog
V2Vhay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjZGQzc1MDE5NjExMEE4MDBFMUQwMkQgLyog
Q29tcGxleEdldFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEU4NEY5RTE0RUUxQUND
MDBENkQ1RDQgLyogV2Vha0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RjcyNTY1MTRF
RTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTdDQTNBRTMxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBDb25zdHJ1Y3Rvci5jcHAgaW4gU291
cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0
U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29tcGxleEdldFN0YXR1cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29tcGxleEdldFN0YXR1cy5oIgorCisjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworQ29tcGxleEdldFN0YXR1
cyBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKAorICAgIENvZGVCbG9jayogcHJvZmlsZWRC
bG9jaywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sCisg
ICAgdW5zaWduZWQgY2hhaW5Db3VudCwgU3RyaW5nSW1wbCogdWlkKQoreworICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgYXNzZXJ0IHRoYXQgd2UgbmV2ZXIgc2VlIGEgc3RydWN0dXJlIHRoYXQKKyAg
ICAvLyBoYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSBidXQgZm9yIHdoaWNoIHdlIGRvbid0
CisgICAgLy8gbmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkuIFdlJ3JlIG5vdCBh
dCBhIHBvaW50IHdoZXJlIHdlIGNhbiBkbworICAgIC8vIHRoYXQsIHlldC4KKyAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxODEwCisgICAgCisgICAgaWYg
KGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCisg
ICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CisgICAgCisgICAgQ29tcGxleEdldFN0YXR1
cyByZXN1bHQ7CisgICAgcmVzdWx0Lm1fa2luZCA9IElubGluZWFibGU7CisgICAgCisgICAgSlND
ZWxsKiBzcGVjaWZpY1ZhbHVlOworICAgIAorICAgIGlmIChjaGFpbikgeworICAgICAgICByZXN1
bHQubV9jaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAorICAgICAg
ICAgICAgcHJvZmlsZWRCbG9jaywgaGVhZFN0cnVjdHVyZSwgY2hhaW4sIGNoYWluQ291bnQpKTsK
KyAgICAgICAgCisgICAgICAgIGlmICghcmVzdWx0Lm1fY2hhaW4tPmlzU3RpbGxWYWxpZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIHNraXAoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChoZWFkU3Ry
dWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpCisgICAgICAgICAg
ICB8fCByZXN1bHQubV9jaGFpbi0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHko
KSkKKyAgICAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CisgICAgICAgIAorICAgICAg
ICBKU09iamVjdCogY3VycmVudE9iamVjdCA9IHJlc3VsdC5tX2NoYWluLT50ZXJtaW5hbFByb3Rv
dHlwZSgpOworICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJlbnRTdHJ1Y3R1cmUgPSByZXN1bHQubV9j
aGFpbi0+bGFzdCgpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUX1VOVVNFRChjdXJyZW50T2Jq
ZWN0LCBjdXJyZW50T2JqZWN0KTsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9
IGN1cnJlbnRTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICpwcm9maWxl
ZEJsb2NrLT52bSgpLCB1aWQsIHJlc3VsdC5tX2F0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOwor
ICAgICAgICBpZiAoY3VycmVudFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAg
ICBzcGVjaWZpY1ZhbHVlID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHQubV9vZmZz
ZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICpwcm9maWxlZEJs
b2NrLT52bSgpLCB1aWQsIHJlc3VsdC5tX2F0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAg
ICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgIHNwZWNpZmlj
VmFsdWUgPSAwOworICAgIH0KKyAgICAKKyAgICByZXN1bHQubV9zcGVjaWZpY1ZhbHVlID0gc3Bl
Y2lmaWNWYWx1ZTsKKyAgICAKKyAgICBpZiAoIWlzVmFsaWRPZmZzZXQocmVzdWx0Lm1fb2Zmc2V0
KSkKKyAgICAgICAgcmV0dXJuIHRha3N3U2xvd1BhdGgoKTsKKyAgICAKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDb21wbGV4R2V0U3RhdHVzX2gKKyNkZWZpbmUgQ29t
cGxleEdldFN0YXR1c19oCisKKyNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCisj
aW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBTdHJ1Y3R1cmVDaGFpbjsK
KworY2xhc3MgQ29tcGxleEdldFN0YXR1cyB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAg
ICAgICAgU2hvdWxkU2tpcCwKKyAgICAgICAgVGFrZXNTbG93UGF0aCwKKyAgICAgICAgSW5saW5l
YWJsZQorICAgIH07CisgICAgCisgICAgQ29tcGxleEdldFN0YXR1cygpCisgICAgICAgIDogbV9r
aW5kKFNob3VsZFNraXApCisgICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKKyAgICAg
ICAgLCBtX2F0dHJpYnV0ZXMoVUlOVF9NQVgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgQ29tcGxleEdldFN0YXR1cyBza2lwKCkKKyAgICB7CisgICAgICAgIHJldHVybiBDb21wbGV4
R2V0U3RhdHVzKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBDb21wbGV4R2V0U3RhdHVzIHRh
a2VzU2xvd1BhdGgoKQorICAgIHsKKyAgICAgICAgQ29tcGxleEdldFN0YXR1cyByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX2tpbmQgPSBUYWtlc1Nsb3dQYXRoOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgQ29tcGxleEdldFN0YXR1cyBjb21wdXRlRm9y
KAorICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZSogaGVhZFN0cnVj
dHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLAorICAgICAgICB1bnNpZ25lZCBjaGFpbkNvdW50
LCBTdHJpbmdJbXBsKiB1aWQpOworICAgIAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJu
IG1fa2luZDsgfQorICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0
dHJpYnV0ZXM7IH0KKyAgICBKU1ZhbHVlIHNwZWNpZmljVmFsdWUoKSBjb25zdCB7IHJldHVybiBt
X3NwZWNpZmljVmFsdWU7IH0KKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX29mZnNldDsgfQorICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4gY2hhaW4oKSBjb25z
dCB7IHJldHVybiBtX2NoYWluOyB9CisgICAgCitwcml2YXRlOgorICAgIEtpbmQgbV9raW5kOwor
ICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlczsK
KyAgICBKU1ZhbHVlIG1fc3BlY2lmaWNWYWx1ZTsKKyAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbj4gbV9jaGFpbjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
Q29tcGxleEdldFN0YXR1c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE3MDU3MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTc2LDg2ICsxNzYsNDkgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yUwogICAgICAgICBmb3IgKHVuc2lnbmVkIGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGxp
c3QtPnNpemUoKTsgKytsaXN0SW5kZXgpIHsKICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gbGlzdC0+YXQobGlzdEluZGV4KS5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc3NlcnQgdGhhdCB3ZSBuZXZlciBzZWUgYSBz
dHJ1Y3R1cmUgdGhhdAotICAgICAgICAgICAgLy8gaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90
KCkgYnV0IGZvciB3aGljaCB3ZSBkb24ndAotICAgICAgICAgICAgLy8gbmV3SW1wdXJlUHJvcGVy
dHlGaXJlc1dhdGNocG9pbnRzKCkuIFdlJ3JlIG5vdCBhdCBhIHBvaW50IHdoZXJlIHdlIGNhbiBk
bwotICAgICAgICAgICAgLy8gdGhhdCwgeWV0LgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTgxMAotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAoc3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgp
KQorICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21wbGV4R2V0U3RhdHVzID0gQ29tcGxl
eEdldFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBz
dHJ1Y3R1cmUsIGxpc3QtPmF0KGxpc3RJbmRleCkuY2hhaW4oKSwKKyAgICAgICAgICAgICAgICBs
aXN0LT5hdChsaXN0SW5kZXgpLmNoYWluQ291bnQoKSwgdWlkKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgc3dpdGNoIChjb21wbGV4R2V0U3RhdHVzLmtpbmQoKSkgeworICAgICAgICAgICAg
Y2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVz
OjpUYWtlc1Nsb3dQYXRoOgogICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNs
b3dQYXRoU3RhdGUsIHRydWUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB1bnNpZ25lZCBh
dHRyaWJ1dGVzSWdub3JlZDsKLSAgICAgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAg
ICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG15T2Zmc2V0OwotICAgICAgICAgICAgUmVmUHRyPElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWluOwotCi0gICAgICAgICAgICBpZiAobGlzdC0+YXQo
bGlzdEluZGV4KS5jaGFpbigpKSB7Ci0gICAgICAgICAgICAgICAgY2hhaW4gPSBhZG9wdFJlZihu
ZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKLSAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRC
bG9jaywgc3RydWN0dXJlLCBsaXN0LT5hdChsaXN0SW5kZXgpLmNoYWluKCksCi0gICAgICAgICAg
ICAgICAgICAgIGxpc3QtPmF0KGxpc3RJbmRleCkuY2hhaW5Db3VudCgpKSk7CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFjaGFpbi0+aXNTdGlsbFZhbGlkKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gVGhpcyB3b24ndCBldmVyIHJ1biBhZ2FpbiBzbyBza2lwIGl0
LgotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGNhc2UgQ29tcGxl
eEdldFN0YXR1czo6SW5saW5lYWJsZTogeworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXM7CisgICAgICAgICAgICAgICAgc3dpdGNo
IChsaXN0LT5hdChsaXN0SW5kZXgpLnR5cGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgR2V0
QnlJZEFjY2Vzczo6U2ltcGxlSW5saW5lOgorICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFj
Y2Vzczo6U2ltcGxlU3R1YjogeworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVy
ZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKKyAgICAgICAgICAgICAg
ICBjYXNlIEdldEJ5SWRBY2Nlc3M6OkdldHRlcjogeworICAgICAgICAgICAgICAgICAgICBBY2Nl
c3NvckNhbGxKSVRTdHViUm91dGluZSogc3R1YiA9IHN0YXRpY19jYXN0PEFjY2Vzc29yQ2FsbEpJ
VFN0dWJSb3V0aW5lKj4oCisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0LT5hdChsaXN0SW5k
ZXgpLnN0dWJSb3V0aW5lKCkpOworICAgICAgICAgICAgICAgICAgICBjYWxsTGlua1N0YXR1cyA9
IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtTdGF0dXM+KAorICAgICAgICAgICAgICAgICAgICAg
ICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IobG9ja2VyLCAqc3R1Yi0+bV9jYWxsTGlua0lu
Zm8sIGNhbGxFeGl0U2l0ZURhdGEpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6Q3VzdG9t
R2V0dGVyOiB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSB0b3Rh
bGx5IHN3ZWV0IHRvIHN1cHBvcnQgdGhpcyBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUuCisg
ICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzMwNTIKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xv
d1BhdGhTdGF0ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc2l6
ZV90IGNoYWluU2l6ZSA9IGNoYWluLT5zaXplKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjaGFpblNpemU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAo
Y2hhaW4tPmF0KGkpLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwg
dHJ1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBjdXJy
ZW50T2JqZWN0ID0gY2hhaW4tPnRlcm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgICAgICAgICAgICAg
U3RydWN0dXJlKiBjdXJyZW50U3RydWN0dXJlID0gY2hhaW4tPmxhc3QoKTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGN1cnJlbnRPYmplY3QsIGN1cnJl
bnRPYmplY3QpOworICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50IHZhcmlhbnQoCisgICAg
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21wbGV4R2V0U3RhdHVz
Lm9mZnNldCgpLAorICAgICAgICAgICAgICAgICAgICBjb21wbGV4R2V0U3RhdHVzLnNwZWNpZmlj
VmFsdWUoKSwgY29tcGxleEdldFN0YXR1cy5jaGFpbigpLAorICAgICAgICAgICAgICAgICAgICBz
dGQ6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBteU9mZnNldCA9IGN1cnJlbnRTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgKLSAgICAg
ICAgICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9y
ZWQsIHNwZWNpZmljVmFsdWUpOwotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U3RydWN0dXJl
LT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG15T2Zmc2V0ID0gc3RydWN0
dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAgICAgICAgICpwcm9maWxlZEJsb2Nr
LT52bSgpLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKLSAgICAgICAg
ICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgICAgICAg
ICAgc3BlY2lmaWNWYWx1ZSA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmICghaXNWYWxpZE9mZnNldChteU9mZnNldCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXM7
Ci0gICAgICAgICAgICBzd2l0Y2ggKGxpc3QtPmF0KGxpc3RJbmRleCkudHlwZSgpKSB7Ci0gICAg
ICAgICAgICBjYXNlIEdldEJ5SWRBY2Nlc3M6OlNpbXBsZUlubGluZToKLSAgICAgICAgICAgIGNh
c2UgR2V0QnlJZEFjY2Vzczo6U2ltcGxlU3R1YjogewotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBHZXRCeUlkQWNjZXNzOjpHZXR0ZXI6IHsK
LSAgICAgICAgICAgICAgICBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSogc3R1YiA9IHN0YXRp
Y19jYXN0PEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKj4oCi0gICAgICAgICAgICAgICAgICAg
IGxpc3QtPmF0KGxpc3RJbmRleCkuc3R1YlJvdXRpbmUoKSk7Ci0gICAgICAgICAgICAgICAgY2Fs
bExpbmtTdGF0dXMgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rU3RhdHVzPigKLSAgICAgICAg
ICAgICAgICAgICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IobG9ja2VyLCAqc3R1Yi0+bV9j
YWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJl
c3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R2V0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0cnVlKTsKICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6Q3VzdG9t
R2V0dGVyOiB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIHRvdGFsbHkg
c3dlZXQgdG8gc3VwcG9ydCB0aGlzIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZS4KLSAgICAg
ICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMz
MDUyCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwg
dHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50IHZhcmlhbnQoCi0gICAgICAgICAgICAg
ICAgU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIG15T2Zmc2V0LCBzcGVjaWZpY1ZhbHVlLCBjaGFp
bi5nZXQoKSwKLSAgICAgICAgICAgICAgICBzdGQ6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0
cnVlKTsKKyAgICAgICAgICAgIH0gfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1
cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljUHV0QnlJZExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCShyZXZpc2lvbiAxNzA1NzEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICAKICAgICBQdXRCeUlkQWNj
ZXNzKCkKICAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKKyAgICAgICAgLCBtX2NoYWluQ291bnQo
VUlOVF9NQVgpCiAgICAgewogICAgIH0KICAgICAKQEAgLTk1LDYgKzk2LDcgQEAgcHVibGljOgog
ICAgICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlLAogICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sCisgICAgICAgIHVuc2lnbmVkIGNo
YWluQ291bnQsCiAgICAgICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNl
dHRlciwKICAgICAgICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCiAg
ICAgewpAQCAtMTAyLDggKzEwNCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIFB1dEJ5SWRBY2Nlc3Mg
cmVzdWx0OwogICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3Ry
dWN0dXJlKTsKICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IGFjY2Vzc1R5cGU7Ci0gICAgICAgIGlm
IChjaGFpbikKKyAgICAgICAgaWYgKGNoYWluKSB7CiAgICAgICAgICAgICByZXN1bHQubV9jaGFp
bi5zZXQodm0sIG93bmVyLCBjaGFpbik7CisgICAgICAgICAgICByZXN1bHQubV9jaGFpbkNvdW50
ID0gY2hhaW5Db3VudDsKKyAgICAgICAgfQogICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIg
PSBjdXN0b21TZXR0ZXI7CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRp
bmU7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNDgsNiArMTUyLDEyIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1fY2hhaW4uZ2V0KCk7CiAgICAgfQogICAgIAorICAgIHVuc2lnbmVk
IGNoYWluQ291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2V0dGVyKCkgfHwg
aXNDdXN0b20oKSk7CisgICAgICAgIHJldHVybiBtX2NoYWluQ291bnQ7CisgICAgfQorICAgIAog
ICAgIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSgpIGNvbnN0CiAgICAgewogICAgICAgICBB
U1NFUlQoaXNUcmFuc2l0aW9uKCkgfHwgaXNSZXBsYWNlKCkgfHwgaXNTZXR0ZXIoKSB8fCBpc0N1
c3RvbSgpKTsKQEAgLTE2OSw2ICsxNzksNyBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+IG1fb2xkU3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1f
bmV3U3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsK
KyAgICB1bnNpZ25lZCBtX2NoYWluQ291bnQ7CiAgICAgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1
ZUZ1bmMgbV9jdXN0b21TZXR0ZXI7CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJS
b3V0aW5lOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE3MDU3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDcg
KzExOSw5IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgCiAgICAgU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbWFwLmdldChDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgp
KTsKLSAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbyhsb2NrZXIs
IHByb2ZpbGVkQmxvY2ssIHN0dWJJbmZvLCB1aWQpOworICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0
ID0gY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIHN0
dWJJbmZvLCB1aWQsCisgICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRh
KGxvY2tlciwgcHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCkpOwogICAgIGlmICghcmVzdWx0
KQogICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChwcm9maWxlZEJsb2NrLCBieXRlY29k
ZUluZGV4LCB1aWQpOwogICAgIApAQCAtMTMxLDcgKzEzMyw5IEBAIFB1dEJ5SWRTdGF0dXMgUHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKIH0KIAogI2lmIEVOQUJMRShKSVQpCi1QdXRCeUlkU3Rh
dHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SklU
TG9ja2VyJiwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sIFN0cmluZ0ltcGwqIHVpZCkKK1B1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvclN0dWJJbmZvKAorICAgIGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwg
Q29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sCisg
ICAgU3RyaW5nSW1wbCogdWlkLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGV4aXRTaXRl
RGF0YSkKIHsKICAgICBpZiAoIXN0dWJJbmZvIHx8ICFzdHViSW5mby0+c2VlbikKICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoKTsKQEAgLTE3NiwxNyArMTgwLDMyIEBAIFB1dEJ5SWRTdGF0
dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgUHV0QnlJZFN0YXR1cyByZXN1
bHQ7CiAgICAgICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOwogICAgICAgICAKKyAgICAgICAg
U3RhdGUgc2xvd1BhdGhTdGF0ZSA9IFRha2VzU2xvd1BhdGg7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgY29uc3QgUHV0
QnlJZEFjY2VzcyYgYWNjZXNzID0gbGlzdC0+YXQoaSk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBQdXRCeUlkQWNj
ZXNzOjpTZXR0ZXI6CisgICAgICAgICAgICBjYXNlIFB1dEJ5SWRBY2Nlc3M6OkN1c3RvbVNldHRl
cjoKKyAgICAgICAgICAgICAgICBzbG93UGF0aFN0YXRlID0gTWFrZXNDYWxsczsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgY29uc3Qg
UHV0QnlJZEFjY2VzcyYgYWNjZXNzID0gbGlzdC0+YXQoaSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBQdXRCeUlkQWNjZXNz
OjpSZXBsYWNlOiB7CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nl
c3Muc3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0g
c3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCk7CiAg
ICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAgICAg
ICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQoUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3Ry
dWN0dXJlLCBvZmZzZXQpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKHNsb3dQYXRoU3RhdGUpOworICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFy
aWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0xOTQsNyArMjEzLDcgQEAgUHV0
QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9CiAgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5uZXdTdHJ1
Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KCpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQpOwogICAg
ICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7CiAgICAgICAgICAgICAg
ICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWluOwogICAgICAgICAgICAgICAg
IGlmIChhY2Nlc3MuY2hhaW4oKSkgewogICAgICAgICAgICAgICAgICAgICBjaGFpbiA9IGFkb3B0
UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKApAQCAtMjAyLDE5ICsyMjEsNDggQEAgUHV0
QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgICAg
ICBpZiAoIWNoYWluLT5pc1N0aWxsVmFsaWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBib29sIG9rID0gcmVz
dWx0LmFwcGVuZFZhcmlhbnQoUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAg
ICAgICAgICAgIGFjY2Vzcy5vbGRTdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBj
aGFpbi5nZXQoKSwgb2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFvaykKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAg
ICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAorICAgICAgICAg
ICAgICAgICAgICBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwg
Y2hhaW4uZ2V0KCksIG9mZnNldCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5SWRBY2Nlc3M6OlNldHRlcjoKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6U2V0dGVyOiB7CisgICAgICAg
ICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21wbGV4R2V0
U3RhdHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgICAgICAg
ICAgcHJvZmlsZWRCbG9jaywgc3RydWN0dXJlLCBhY2Nlc3MuY2hhaW4oKSwgYWNjZXNzLmNoYWlu
Q291bnQoKSwgdWlkKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KGNvbXBsZXhHZXRTdGF0dXMua2luZCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4
R2V0U3RhdHVzOjpTaG91bGRTa2lwOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVz
OjpUYWtlc1Nsb3dQYXRoOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhzbG93UGF0aFN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Y2FzZSBDb21wbGV4R2V0U3RhdHVzOjpJbmxpbmVhYmxlOiB7CisgICAgICAgICAgICAgICAgICAg
IEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKiBzdHViID0gc3RhdGljX2Nhc3Q8QWNjZXNzb3JD
YWxsSklUU3R1YlJvdXRpbmUqPigKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5zdHVi
Um91dGluZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5r
U3RhdHVzPiBjYWxsTGlua1N0YXR1cyA9CisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1h
a2VfdW5pcXVlPENhbGxMaW5rU3RhdHVzPigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
YWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbG9ja2VyLCAqc3R1Yi0+bV9jYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpKTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlk
VmFyaWFudDo6c2V0dGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBjb21w
bGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLnNwZWNpZmljVmFsdWUoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXhHZXRTdGF0dXMuY2hhaW4oKSwgc3RkOjpt
b3ZlKGNhbGxMaW5rU3RhdHVzKSk7CisgICAgICAgICAgICAgICAgfSB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBj
YXNlIFB1dEJ5SWRBY2Nlc3M6OkN1c3RvbVNldHRlcjoKICAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhNYWtlc0NhbGxzKTsKIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlKTsKICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2
YXJpYW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzbG93UGF0aFN0
YXRlKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTIz
MCwxNiArMjc4LDIwIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigK
IHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAoZGZnQmxvY2spIHsKKyAgICAgICAgQ2Fs
bExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBleGl0U2l0ZURhdGE7CiAgICAgICAgIHsKICAgICAg
ICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGJhc2VsaW5lQmxvY2stPm1fbG9jayk7
CiAgICAgICAgICAgICBpZiAoaGFzRXhpdFNpdGUobG9ja2VyLCBiYXNlbGluZUJsb2NrLCBjb2Rl
T3JpZ2luLmJ5dGVjb2RlSW5kZXgsIEV4aXRGcm9tRlRMKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgIGV4aXRTaXRlRGF0
YSA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKAorICAgICAgICAgICAgICAg
IGxvY2tlciwgYmFzZWxpbmVCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBFeGl0RnJv
bUZUTCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBQdXRCeUlkU3RhdHVzIHJl
c3VsdDsKICAgICAgICAgewogICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
ZGZnQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICByZXN1bHQgPSBjb21wdXRlRm9yU3R1Yklu
Zm8obG9ja2VyLCBkZmdCbG9jaywgZGZnTWFwLmdldChjb2RlT3JpZ2luKSwgdWlkKTsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAgICAgICAgICBsb2Nr
ZXIsIGRmZ0Jsb2NrLCBkZmdNYXAuZ2V0KGNvZGVPcmlnaW4pLCB1aWQsIGV4aXRTaXRlRGF0YSk7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFdlIHVzZSBUYWtlc1Nsb3dQYXRoIGlu
IHNvbWUgY2FzZXMgd2hlcmUgdGhlIHN0dWIgd2FzIHVuc2V0LiBUaGF0J3Mgd2VpcmQgYW5kCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgJ
KHJldmlzaW9uIDE3MDU3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDkgQEAgcHJpdmF0ZToKICAg
ICBzdGF0aWMgYm9vbCBoYXNFeGl0U2l0ZShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ29k
ZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgRXhpdGluZ0pJVFR5cGUgPSBFeGl0RnJv
bUFueXRoaW5nKTsKICNlbmRpZgogI2lmIEVOQUJMRShKSVQpCi0gICAgc3RhdGljIFB1dEJ5SWRT
dGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDb2Rl
QmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cmluZ0ltcGwqIHVpZCk7CisgICAgc3RhdGlj
IFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAgICBjb25zdCBDb25jdXJy
ZW50SklUTG9ja2VyJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8qLCBTdHJpbmdJbXBs
KiB1aWQsCisgICAgICAgIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOwogI2VuZGlmCiAg
ICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCB1bnNp
Z25lZCBieXRlY29kZUluZGV4LCBTdHJpbmdJbXBsKiB1aWQpOwogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZp
c2lvbiAxNzA1NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZh
cmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw0NCBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAorUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBQdXRC
eUlkVmFyaWFudCByZXN1bHQ7CisgICAgcmVzdWx0Lm1fa2luZCA9IFJlcGxhY2U7CisgICAgcmVz
dWx0Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgIHJlc3VsdC5tX29mZnNldCA9IG9m
ZnNldDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFy
aWFudDo6dHJhbnNpdGlvbigKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCisgICAgY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
biogc3RydWN0dXJlQ2hhaW4sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBQdXRCeUlk
VmFyaWFudCByZXN1bHQ7CisgICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247CisgICAgcmVz
dWx0Lm1fb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlOworICAgIHJlc3VsdC5tX25ld1N0cnVj
dHVyZSA9IG5ld1N0cnVjdHVyZTsKKyAgICBpZiAoc3RydWN0dXJlQ2hhaW4pCisgICAgICAgIHN0
cnVjdHVyZUNoYWluLT5nYXRoZXJDaGVja3MocmVzdWx0Lm1fY29uc3RhbnRDaGVja3MpOworICAg
IHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQdXRC
eUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAorICAgIGNvbnN0IFN0cnVjdHVyZVNl
dCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEpTVmFsdWUgc3BlY2lmaWNWYWx1
ZSwKKyAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENh
bGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKK3sKKyAgICBQdXRCeUlkVmFyaWFudCByZXN1
bHQ7CisgICAgcmVzdWx0Lm1fa2luZCA9IFNldHRlcjsKKyAgICByZXN1bHQubV9vbGRTdHJ1Y3R1
cmUgPSBzdHJ1Y3R1cmU7CisgICAgaWYgKGNoYWluKQorICAgICAgICBjaGFpbi0+Z2F0aGVyQ2hl
Y2tzKHJlc3VsdC5tX2NvbnN0YW50Q2hlY2tzKTsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZz
ZXQ7CisgICAgcmVzdWx0Lm1fc3BlY2lmaWNWYWx1ZSA9IHNwZWNpZmljVmFsdWU7CisgICAgcmVz
dWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1vdmUoY2FsbExpbmtTdGF0dXMpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKIFN0cnVjdHVyZSogUHV0QnlJZFZhcmlhbnQ6Om9sZFN0cnVjdHVy
ZUZvclRyYW5zaXRpb24oKSBjb25zdAogewogICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlv
bik7CkBAIC00NCwxOCArODIsMzAgQEAgU3RydWN0dXJlKiBQdXRCeUlkVmFyaWFudDo6b2xkU3Ry
dWN0dXJlRgogCiBib29sIFB1dEJ5SWRWYXJpYW50Ojp3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3QK
IHsKLSAgICByZXR1cm4ga2luZCgpID09IFRyYW5zaXRpb247CisgICAgc3dpdGNoIChraW5kKCkp
IHsKKyAgICBjYXNlIFRyYW5zaXRpb246CisgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9CiAK
IGJvb2wgUHV0QnlJZFZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0CiB7Ci0gICAg
aWYgKGtpbmQoKSAhPSBUcmFuc2l0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0g
ICAgaWYgKG9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9
PSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKKyAgICBzd2l0Y2ggKGtpbmQo
KSkgeworICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZUZv
clRyYW5zaXRpb24oKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJldHVybiB0
cnVlOworICAgIH0KK30KKworYm9vbCBQdXRCeUlkVmFyaWFudDo6bWFrZXNDYWxscygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGtpbmQoKSA9PSBTZXR0ZXI7CiB9CiAKIGJvb2wgUHV0QnlJZFZhcmlh
bnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcikKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCShyZXZp
c2lvbiAxNzA1NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZh
cmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsOCBAQCBwdWJsaWM6CiAgICAgZW51
bSBLaW5kIHsKICAgICAgICAgTm90U2V0LAogICAgICAgICBSZXBsYWNlLAotICAgICAgICBUcmFu
c2l0aW9uCisgICAgICAgIFRyYW5zaXRpb24sCisgICAgICAgIFNldHRlcgogICAgIH07CiAgICAg
CiAgICAgUHV0QnlJZFZhcmlhbnQoKQpAQCAtNDcsMjggKzQ4LDE2IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCByZXBsYWNlKGNvbnN0IFN0
cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCi0gICAgewotICAg
ICAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX2tpbmQgPSBSZXBs
YWNlOwotICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgICAg
IHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
CisgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHJlcGxhY2UoCisgICAgICAgIGNvbnN0IFN0cnVj
dHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpOwogICAgIAogICAgIHN0
YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0aW9uKAogICAgICAgICBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgICAgIFBhc3NS
ZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gc3RydWN0dXJlQ2hhaW4sIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKLSAgICB7Ci0gICAgICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKLSAgICAg
ICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247Ci0gICAgICAgIHJlc3VsdC5tX29sZFN0cnVj
dHVyZSA9IG9sZFN0cnVjdHVyZTsKLSAgICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3
U3RydWN0dXJlOwotICAgICAgICBpZiAoc3RydWN0dXJlQ2hhaW4pCi0gICAgICAgICAgICBzdHJ1
Y3R1cmVDaGFpbi0+Z2F0aGVyQ2hlY2tzKHJlc3VsdC5tX2NvbnN0YW50Q2hlY2tzKTsKLSAgICAg
ICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IH0KKyAgICAgICAgY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4s
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCk7CisgICAgCisgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50
IHNldHRlcigKKyAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCwgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlLAorICAgICAgICBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxs
TGlua1N0YXR1cyk7CiAgICAgCiAgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
OyB9CiAgICAgCkBAIC03NywxOSArNjYsMTkgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IFN0
cnVjdHVyZVNldCYgc3RydWN0dXJlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChraW5k
KCkgPT0gUmVwbGFjZSk7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gUmVwbGFjZSB8fCBraW5k
KCkgPT0gU2V0dGVyKTsKICAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOwogICAgIH0KICAg
ICAKICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpIGNvbnN0CiAgICAgewot
ICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2Up
OworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxh
Y2UgfHwga2luZCgpID09IFNldHRlcik7CiAgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsK
ICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNlKTsK
KyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNl
IHx8IGtpbmQoKSA9PSBTZXR0ZXIpOwogICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7CiAg
ICAgfQogICAgIApAQCAtMTAzLDYgKzkyLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCB3cml0ZXNT
dHJ1Y3R1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsK
KyAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKICAgICAKICAgICBjb25zdCBDb25zdGFudFN0
cnVjdHVyZUNoZWNrVmVjdG9yJiBjb25zdGFudENoZWNrcygpIGNvbnN0CiAgICAgewpAQCAtMTE1
LDYgKzEwNSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX29mZnNldDsKICAgICB9CiAg
ICAgCisgICAgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9zcGVjaWZp
Y1ZhbHVlOyB9CisgICAgCisgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKKyAgICAgICAgcmV0
dXJuIG1fY2FsbExpbmtTdGF0dXMuZ2V0KCk7CisgICAgfQorCiAgICAgYm9vbCBhdHRlbXB0VG9N
ZXJnZShjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpOwogICAgIAogICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OwpAQCAtMTI3LDcgKzEyNSw5IEBAIHByaXZhdGU6CiAgICAgU3Ry
dWN0dXJlU2V0IG1fb2xkU3RydWN0dXJlOwogICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmU7
CiAgICAgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciBtX2NvbnN0YW50Q2hlY2tzOworICAg
IEpTVmFsdWUgbV9zcGVjaWZpY1ZhbHVlOwogICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0Owor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAJKHJldmlzaW9uIDE3
MDU3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJl
Q2hhaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNiArMTMwLDE1IEBAIGJvb2wgSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbjo6aXNOb3JtYWxpemUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9v
bCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjp0YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9w
ZXJ0eSgpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkg
eworICAgICAgICBpZiAoYXQoaSktPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5
KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCiBKU09iamVjdCogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6dGVybWluYWxQcm90b3R5cGUo
KSBjb25zdAogewogICAgIEFTU0VSVCghbV92ZWN0b3IuaXNFbXB0eSgpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNo
YWluLmgJKHJldmlzaW9uIDE3MDU3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsOCBA
QCBwdWJsaWM6CiAgICAgYm9vbCBtYXlJbnRlcmNlcHRTdG9yZVRvKFZNJiwgU3RyaW5nSW1wbCog
dWlkKTsKICAgICBib29sIGlzTm9ybWFsaXplZCgpOwogICAgIAorICAgIGJvb2wgdGFrZXNTbG93
UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKTsKKyAgICAKICAgICBKU1ZhbHVlIHByb3RvdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdG90eXBlOyB9CiAgICAgCiAgICAgc2l6ZV90IHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5zaXplKCk7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234105</attachid>
            <date>2014-06-30 15:31:28 -0700</date>
            <delta_ts>2014-06-30 19:16:03 -0700</delta_ts>
            <desc>the code has been written</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>48990</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE3MDU3MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjcsNiArNjcsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGJ5dGVjb2Rl
L0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAKICAgICBieXRlY29kZS9Db2RlT3Jp
Z2luLmNwcAogICAgIGJ5dGVjb2RlL0NvZGVUeXBlLmNwcAorICAgIGJ5dGVjb2RlL0NvbXBsZXJH
ZXRTdGF0dXMuY3BwCiAgICAgYnl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAKICAg
ICBieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAKICAgICBieXRlY29kZS9EZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2oJKHJldmlzaW9uIDE3MDU3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTMyMSw2ICszMjEsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ29k
ZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXENvZGVPcmlnaW4uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcQ29kZVR5cGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcQ29tcGxleEdldFN0YXR1cy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxDb25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxERkdFeGl0UHJvZmls
ZS5jcHAiIC8+CkBAIC04NTgsNiArODU5LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGJ5dGVjb2RlXENvZGVPcmlnaW4uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXENvZGVUeXBlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxDb21tZW50LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDb21w
bGV4R2V0U3RhdHVzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxD
b25zdGFudFN0cnVjdHVyZUNoZWNrLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxEYXRhRm9ybWF0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzA1NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMzM3LDYgKzMzNyw4IEBACiAJCTBGNkIxQ0M5MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0
eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNDNzE4NjQxREY4MDA4NDVEOTcgLyogQXJpdHlDaGVja0Zh
aWxSZXR1cm5UaHVua3MuY3BwICovOyB9OwogCQkwRjZCMUNDQTE4NjQxREY4MDA4NDVEOTcgLyog
QXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0M4MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNr
RmFpbFJldHVyblRodW5rcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNkU4NDVBMTkwMzBCRUYwMDU2Mjc0MSAvKiBERkdWYXJpYWJsZUFjY2Vz
c0RhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2RTg0NTkxOTAzMEJFRjAwNTYyNzQxIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgKi87
IH07CisJCTBGNkZDNzUwMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkZDNzRFMTk2
MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCAqLzsgfTsKKwkJMEY2RkM3NTEx
OTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkZDNzRGMTk2MTEwQTgwMEUxRDAyRCAvKiBD
b21wbGV4R2V0U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY3MDI1QTkxNzE0QjBGQTAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjcwMjVBNzE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNw
cCAqLzsgfTsKIAkJMEY3MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY3MDI1QTgxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzE0Q0E0
MTZFQTkyRjAwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzE0Q0ExMTZFQTky
RUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLzsgfTsKQEAg
LTI1MTIsNiArMjUxNCw4IEBACiAJCTBGNkIxQ0M3MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNo
ZWNrRmFpbFJldHVyblRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNkIxQ0M4MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVy
blRodW5rcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcml0eUNoZWNrRmFp
bFJldHVyblRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjZFODQ1OTE5
MDMwQkVGMDA1NjI3NDEgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHA7IHBhdGgg
PSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY2RkM3NEUxOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29tcGxleEdldFN0YXR1cy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNkZDNzRGMTk2MTEwQTgwMEUxRDAyRCAv
KiBDb21wbGV4R2V0U3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
bXBsZXhHZXRTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MDI1QTcx
NzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3Bw
OyBwYXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNzAyNUE4MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJFQiAv
KiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwOyBwYXRoID0g
ZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNTM3OSw2ICs1MzgzLDggQEAKIAkJCQkwRkJEN0U2NzE0NDc5OThGMDA0ODEz
MTUgLyogQ29kZU9yaWdpbi5oICovLAogCQkJCTBGOEY5NDNGMTY2NzYzMkQwMEQ2MTk3MSAvKiBD
b2RlVHlwZS5jcHAgKi8sCiAJCQkJMEYwQjgzQTUxNEJDRjUwNDAwODg1QjRGIC8qIENvZGVUeXBl
LmggKi8sCisJCQkJMEY2RkM3NEUxOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMu
Y3BwICovLAorCQkJCTBGNkZDNzRGMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVz
LmggKi8sCiAJCQkJMEYzRDBCQkExOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJl
Q2hlY2suY3BwICovLAogCQkJCTBGM0QwQkJCMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0
cnVjdHVyZUNoZWNrLmggKi8sCiAJCQkJMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFG
b3JtYXQuaCAqLywKQEAgLTY1ODUsNiArNjU5MSw3IEBACiAJCQkJQTc4NUY2QkMxOEM1NTNGRTAw
RjEwNjI2IC8qIFNwaWxsUmVnaXN0ZXJzTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0
NTUwRTE2RjVDRDAwQjM0NDYwIC8qIFByb3BlcnR5U2xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEY2RkM3NTExOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDU2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm90ZWN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDc0QzMzQjE2QUEyRDk1MDA2MkYwMUQgLyogUHJvdG90eXBl
TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0
QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCkBAIC04MTAyLDYgKzgxMDksNyBAQAogCQkJCUZF
RDk0RjMwMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZ01hYy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjkxOUQyNTE1ODUzQ0UwMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQUNGNzM3NzE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjZGQzc1MDE5NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEU4NEY5RTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Js
b2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RjcyNTY1MTRFRTI2NUUwMEIxNjUyQiAvKiBX
ZWFrSGFuZGxlT3duZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDQTNBRTMxN0RBNDFBRTAw
NjUzOEFGIC8qIFdlYWtNYXBDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxl
eEdldFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQ29tcGxleEdldFN0YXR1cy5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworQ29tcGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3RhdHVz
Ojpjb21wdXRlRm9yKAorICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlKiBo
ZWFkU3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sCisgICAgdW5zaWduZWQgY2hhaW5D
b3VudCwgU3RyaW5nSW1wbCogdWlkKQoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXNzZXJ0
IHRoYXQgd2UgbmV2ZXIgc2VlIGEgc3RydWN0dXJlIHRoYXQKKyAgICAvLyBoYXNJbXB1cmVHZXRP
d25Qcm9wZXJ0eVNsb3QoKSBidXQgZm9yIHdoaWNoIHdlIGRvbid0CisgICAgLy8gbmV3SW1wdXJl
UHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkuIFdlJ3JlIG5vdCBhdCBhIHBvaW50IHdoZXJlIHdl
IGNhbiBkbworICAgIC8vIHRoYXQsIHlldC4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMxODEwCisgICAgCisgICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRh
a2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCisgICAgICAgIHJldHVybiB0YWtl
c1Nsb3dQYXRoKCk7CisgICAgCisgICAgQ29tcGxleEdldFN0YXR1cyByZXN1bHQ7CisgICAgcmVz
dWx0Lm1fa2luZCA9IElubGluZWFibGU7CisgICAgCisgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVl
OworICAgIAorICAgIGlmIChjaGFpbikgeworICAgICAgICByZXN1bHQubV9jaGFpbiA9IGFkb3B0
UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAorICAgICAgICAgICAgcHJvZmlsZWRCbG9j
aywgaGVhZFN0cnVjdHVyZSwgY2hhaW4sIGNoYWluQ291bnQpKTsKKyAgICAgICAgCisgICAgICAg
IGlmICghcmVzdWx0Lm1fY2hhaW4tPmlzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJu
IHNraXAoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChoZWFkU3RydWN0dXJlLT50YWtlc1Nsb3dQ
YXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpCisgICAgICAgICAgICB8fCByZXN1bHQubV9jaGFp
bi0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0YWtlc1Nsb3dQYXRoKCk7CisgICAgICAgIAorICAgICAgICBKU09iamVjdCogY3VycmVu
dE9iamVjdCA9IHJlc3VsdC5tX2NoYWluLT50ZXJtaW5hbFByb3RvdHlwZSgpOworICAgICAgICBT
dHJ1Y3R1cmUqIGN1cnJlbnRTdHJ1Y3R1cmUgPSByZXN1bHQubV9jaGFpbi0+bGFzdCgpOworICAg
ICAgICAKKyAgICAgICAgQVNTRVJUX1VOVVNFRChjdXJyZW50T2JqZWN0LCBjdXJyZW50T2JqZWN0
KTsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGN1cnJlbnRTdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQs
IHJlc3VsdC5tX2F0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgICAgICBpZiAoY3VycmVu
dFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICBzcGVjaWZpY1ZhbHVlID0g
MDsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPmdl
dENvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQsIHJl
c3VsdC5tX2F0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgICAgICBpZiAoc3RydWN0dXJl
LT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOworICAgIH0K
KyAgICAKKyAgICByZXN1bHQubV9zcGVjaWZpY1ZhbHVlID0gc3BlY2lmaWNWYWx1ZTsKKyAgICAK
KyAgICBpZiAoIWlzVmFsaWRPZmZzZXQocmVzdWx0Lm1fb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJu
IHRha3N3U2xvd1BhdGgoKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29t
cGxleEdldFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db21wbGV4R2V0U3RhdHVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBDb21wbGV4R2V0U3RhdHVzX2gKKyNkZWZpbmUgQ29tcGxleEdldFN0YXR1c19oCisK
KyNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1
ZS5oIgorI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBDb2RlQmxvY2s7CitjbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKKworY2xhc3MgQ29tcGxleEdl
dFN0YXR1cyB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgU2hvdWxkU2tpcCwK
KyAgICAgICAgVGFrZXNTbG93UGF0aCwKKyAgICAgICAgSW5saW5lYWJsZQorICAgIH07CisgICAg
CisgICAgQ29tcGxleEdldFN0YXR1cygpCisgICAgICAgIDogbV9raW5kKFNob3VsZFNraXApCisg
ICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKKyAgICAgICAgLCBtX2F0dHJpYnV0ZXMo
VUlOVF9NQVgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgQ29tcGxleEdldFN0YXR1
cyBza2lwKCkKKyAgICB7CisgICAgICAgIHJldHVybiBDb21wbGV4R2V0U3RhdHVzKCk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBDb21wbGV4R2V0U3RhdHVzIHRha2VzU2xvd1BhdGgoKQorICAg
IHsKKyAgICAgICAgQ29tcGxleEdldFN0YXR1cyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBUYWtlc1Nsb3dQYXRoOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgQ29tcGxleEdldFN0YXR1cyBjb21wdXRlRm9yKAorICAgICAgICBDb2RlQmxv
Y2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgU3RydWN0dXJlQ2hh
aW4qIGNoYWluLAorICAgICAgICB1bnNpZ25lZCBjaGFpbkNvdW50LCBTdHJpbmdJbXBsKiB1aWQp
OworICAgIAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIHVu
c2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KKyAgICBK
U1ZhbHVlIHNwZWNpZmljVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3NwZWNpZmljVmFsdWU7IH0K
KyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQor
ICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4gY2hhaW4oKSBjb25zdCB7IHJldHVybiBtX2NoYWlu
OyB9CisgICAgCitwcml2YXRlOgorICAgIEtpbmQgbV9raW5kOworICAgIFByb3BlcnR5T2Zmc2V0
IG1fb2Zmc2V0OworICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlczsKKyAgICBKU1ZhbHVlIG1fc3Bl
Y2lmaWNWYWx1ZTsKKyAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQ29tcGxleEdldFN0YXR1c19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0
YXR1cy5jcHAJKHJldmlzaW9uIDE3MDU3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDg2ICsxNzYsNDkg
QEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3QtPnNpemUoKTsgKytsaXN0
SW5kZXgpIHsKICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbGlzdC0+YXQobGlz
dEluZGV4KS5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBhc3NlcnQgdGhhdCB3ZSBuZXZlciBzZWUgYSBzdHJ1Y3R1cmUgdGhhdAotICAg
ICAgICAgICAgLy8gaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkgYnV0IGZvciB3aGljaCB3
ZSBkb24ndAotICAgICAgICAgICAgLy8gbmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRz
KCkuIFdlJ3JlIG5vdCBhdCBhIHBvaW50IHdoZXJlIHdlIGNhbiBkbwotICAgICAgICAgICAgLy8g
dGhhdCwgeWV0LgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMTgxMAotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc3RydWN0dXJl
LT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQorICAgICAgICAgICAgQ29t
cGxleEdldFN0YXR1cyBjb21wbGV4R2V0U3RhdHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29tcHV0
ZUZvcigKKyAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBzdHJ1Y3R1cmUsIGxpc3QtPmF0
KGxpc3RJbmRleCkuY2hhaW4oKSwKKyAgICAgICAgICAgICAgICBsaXN0LT5hdChsaXN0SW5kZXgp
LmNoYWluQ291bnQoKSwgdWlkKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChj
b21wbGV4R2V0U3RhdHVzLmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3Rh
dHVzOjpTaG91bGRTa2lwOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpUYWtlc1Nsb3dQYXRoOgog
ICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUsIHRydWUp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzSWdub3JlZDsK
LSAgICAgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAgICAgICAgIFByb3BlcnR5
T2Zmc2V0IG15T2Zmc2V0OwotICAgICAgICAgICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hh
aW4+IGNoYWluOwotCi0gICAgICAgICAgICBpZiAobGlzdC0+YXQobGlzdEluZGV4KS5jaGFpbigp
KSB7Ci0gICAgICAgICAgICAgICAgY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbigKLSAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgc3RydWN0dXJlLCBs
aXN0LT5hdChsaXN0SW5kZXgpLmNoYWluKCksCi0gICAgICAgICAgICAgICAgICAgIGxpc3QtPmF0
KGxpc3RJbmRleCkuY2hhaW5Db3VudCgpKSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgaWYgKCFjaGFpbi0+aXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gVGhpcyB3b24ndCBldmVyIHJ1biBhZ2FpbiBzbyBza2lwIGl0LgotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5l
YWJsZTogeworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4g
Y2FsbExpbmtTdGF0dXM7CisgICAgICAgICAgICAgICAgc3dpdGNoIChsaXN0LT5hdChsaXN0SW5k
ZXgpLnR5cGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6U2ltcGxl
SW5saW5lOgorICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6U2ltcGxlU3R1Yjog
eworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aElu
REZHRm9ySW1wdXJlUHJvcGVydHkoKSkKKyAgICAgICAgICAgICAgICBjYXNlIEdldEJ5SWRBY2Nl
c3M6OkdldHRlcjogeworICAgICAgICAgICAgICAgICAgICBBY2Nlc3NvckNhbGxKSVRTdHViUm91
dGluZSogc3R1YiA9IHN0YXRpY19jYXN0PEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKj4oCisg
ICAgICAgICAgICAgICAgICAgICAgICBsaXN0LT5hdChsaXN0SW5kZXgpLnN0dWJSb3V0aW5lKCkp
OworICAgICAgICAgICAgICAgICAgICBjYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91bmlxdWU8
Q2FsbExpbmtTdGF0dXM+KAorICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtTdGF0dXM6
OmNvbXB1dGVGb3IobG9ja2VyLCAqc3R1Yi0+bV9jYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURh
dGEpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6Q3VzdG9tR2V0dGVyOiB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSB0b3RhbGx5IHN3ZWV0IHRvIHN1cHBv
cnQgdGhpcyBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUuCisgICAgICAgICAgICAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwNTIKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc2l6ZV90IGNoYWluU2l6ZSA9IGNo
YWluLT5zaXplKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGFp
blNpemU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoY2hhaW4tPmF0KGkpLT50YWtl
c1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0gY2hhaW4t
PnRlcm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBjdXJyZW50
U3RydWN0dXJlID0gY2hhaW4tPmxhc3QoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBBU1NFUlRfVU5VU0VEKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRPYmplY3QpOworICAgICAg
ICAgICAgICAgIEdldEJ5SWRWYXJpYW50IHZhcmlhbnQoCisgICAgICAgICAgICAgICAgICAgIFN0
cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLAorICAgICAg
ICAgICAgICAgICAgICBjb21wbGV4R2V0U3RhdHVzLnNwZWNpZmljVmFsdWUoKSwgY29tcGxleEdl
dFN0YXR1cy5jaGFpbigpLAorICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUoY2FsbExpbmtT
dGF0dXMpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBteU9mZnNldCA9IGN1
cnJlbnRTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgKLSAgICAgICAgICAgICAgICAgICAgKnBy
b2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFsdWUp
OwotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkK
LSAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIG15T2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50
bHkoCi0gICAgICAgICAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQsIGF0dHJp
YnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoc3RydWN0
dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9
IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghaXNWYWxp
ZE9mZnNldChteU9mZnNldCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMo
c2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXM7Ci0gICAgICAgICAgICBzd2l0
Y2ggKGxpc3QtPmF0KGxpc3RJbmRleCkudHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEdldEJ5
SWRBY2Nlc3M6OlNpbXBsZUlubGluZToKLSAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6
U2ltcGxlU3R1YjogewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgY2FzZSBHZXRCeUlkQWNjZXNzOjpHZXR0ZXI6IHsKLSAgICAgICAgICAgICAgICBB
Y2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSogc3R1YiA9IHN0YXRpY19jYXN0PEFjY2Vzc29yQ2Fs
bEpJVFN0dWJSb3V0aW5lKj4oCi0gICAgICAgICAgICAgICAgICAgIGxpc3QtPmF0KGxpc3RJbmRl
eCkuc3R1YlJvdXRpbmUoKSk7Ci0gICAgICAgICAgICAgICAgY2FsbExpbmtTdGF0dXMgPSBzdGQ6
Om1ha2VfdW5pcXVlPENhbGxMaW5rU3RhdHVzPigKLSAgICAgICAgICAgICAgICAgICAgQ2FsbExp
bmtTdGF0dXM6OmNvbXB1dGVGb3IobG9ja2VyLCAqc3R1Yi0+bV9jYWxsTGlua0luZm8sIGNhbGxF
eGl0U2l0ZURhdGEpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50
KHZhcmlhbnQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93
UGF0aFN0YXRlLCB0cnVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6Q3VzdG9tR2V0dGVyOiB7Ci0gICAgICAg
ICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIHRvdGFsbHkgc3dlZXQgdG8gc3VwcG9ydCB0
aGlzIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZS4KLSAgICAgICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDUyCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IEdldEJ5SWRWYXJpYW50IHZhcmlhbnQoCi0gICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0KHN0
cnVjdHVyZSksIG15T2Zmc2V0LCBzcGVjaWZpY1ZhbHVlLCBjaGFpbi5nZXQoKSwKLSAgICAgICAg
ICAgICAgICBzdGQ6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0cnVlKTsKKyAgICAgICAgICAg
IH0gfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdC5oCShyZXZpc2lvbiAxNzA1NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2
ICs1Myw3IEBAIHB1YmxpYzoKICAgICAKICAgICBQdXRCeUlkQWNjZXNzKCkKICAgICAgICAgOiBt
X3R5cGUoSW52YWxpZCkKKyAgICAgICAgLCBtX2NoYWluQ291bnQoVUlOVF9NQVgpCiAgICAgewog
ICAgIH0KICAgICAKQEAgLTk1LDYgKzk2LDcgQEAgcHVibGljOgogICAgICAgICBBY2Nlc3NUeXBl
IGFjY2Vzc1R5cGUsCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAogICAgICAgICBTdHJ1
Y3R1cmVDaGFpbiogY2hhaW4sCisgICAgICAgIHVuc2lnbmVkIGNoYWluQ291bnQsCiAgICAgICAg
IFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlciwKICAgICAgICAgUGFz
c1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCiAgICAgewpAQCAtMTAyLDggKzEw
NCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAgICAgICBy
ZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKICAgICAgICAg
cmVzdWx0Lm1fdHlwZSA9IGFjY2Vzc1R5cGU7Ci0gICAgICAgIGlmIChjaGFpbikKKyAgICAgICAg
aWYgKGNoYWluKSB7CiAgICAgICAgICAgICByZXN1bHQubV9jaGFpbi5zZXQodm0sIG93bmVyLCBj
aGFpbik7CisgICAgICAgICAgICByZXN1bHQubV9jaGFpbkNvdW50ID0gY2hhaW5Db3VudDsKKyAg
ICAgICAgfQogICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSBjdXN0b21TZXR0ZXI7CiAg
ICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CkBAIC0xNDgsNiArMTUyLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1f
Y2hhaW4uZ2V0KCk7CiAgICAgfQogICAgIAorICAgIHVuc2lnbmVkIGNoYWluQ291bnQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7CisgICAg
ICAgIHJldHVybiBtX2NoYWluQ291bnQ7CisgICAgfQorICAgIAogICAgIEpJVFN0dWJSb3V0aW5l
KiBzdHViUm91dGluZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNUcmFuc2l0aW9u
KCkgfHwgaXNSZXBsYWNlKCkgfHwgaXNTZXR0ZXIoKSB8fCBpc0N1c3RvbSgpKTsKQEAgLTE2OSw2
ICsxNzksNyBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2xkU3Ry
dWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbmV3U3RydWN0dXJlOwogICAg
IFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsKKyAgICB1bnNpZ25lZCBtX2No
YWluQ291bnQ7CiAgICAgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgbV9jdXN0b21TZXR0
ZXI7CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJ
KHJldmlzaW9uIDE3MDU3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDcgKzExOSw5IEBAIFB1dEJ5SWRT
dGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgCiAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbWFwLmdldChDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKTsKLSAgICBQdXRCeUlkU3Rh
dHVzIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbyhsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIHN0
dWJJbmZvLCB1aWQpOworICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJ
bmZvKAorICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIHN0dWJJbmZvLCB1aWQsCisgICAg
ICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGxvY2tlciwgcHJvZmlsZWRC
bG9jaywgYnl0ZWNvZGVJbmRleCkpOwogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4g
Y29tcHV0ZUZyb21MTEludChwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4LCB1aWQpOwogICAg
IApAQCAtMTMxLDcgKzEzMyw5IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvcigKIH0KIAogI2lmIEVOQUJMRShKSVQpCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ29kZUJsb2Nr
KiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cmluZ0ltcGwq
IHVpZCkKK1B1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKAor
ICAgIGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBwcm9maWxl
ZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sCisgICAgU3RyaW5nSW1wbCogdWlk
LCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGV4aXRTaXRlRGF0YSkKIHsKICAgICBpZiAo
IXN0dWJJbmZvIHx8ICFzdHViSW5mby0+c2VlbikKICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoKTsKQEAgLTE3NiwxNyArMTgwLDMyIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvclMKICAgICAgICAgUHV0QnlJZFN0YXR1cyByZXN1bHQ7CiAgICAgICAgIHJlc3Vs
dC5tX3N0YXRlID0gU2ltcGxlOwogICAgICAgICAKKyAgICAgICAgU3RhdGUgc2xvd1BhdGhTdGF0
ZSA9IFRha2VzU2xvd1BhdGg7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0
LT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgY29uc3QgUHV0QnlJZEFjY2VzcyYgYWNjZXNz
ID0gbGlzdC0+YXQoaSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAoYWNjZXNz
LnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBQdXRCeUlkQWNjZXNzOjpTZXR0ZXI6CisgICAg
ICAgICAgICBjYXNlIFB1dEJ5SWRBY2Nlc3M6OkN1c3RvbVNldHRlcjoKKyAgICAgICAgICAgICAg
ICBzbG93UGF0aFN0YXRlID0gTWFrZXNDYWxsczsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
aXN0LT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgY29uc3QgUHV0QnlJZEFjY2VzcyYgYWNj
ZXNzID0gbGlzdC0+YXQoaSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFB1dEJ5SWRWYXJp
YW50IHZhcmlhbnQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5
cGUoKSkgewogICAgICAgICAgICAgY2FzZSBQdXRCeUlkQWNjZXNzOjpSZXBsYWNlOiB7CiAgICAg
ICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CiAg
ICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25j
dXJyZW50bHkoKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCk7CiAgICAgICAgICAgICAgICAgaWYg
KCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFw
cGVuZFZhcmlhbnQoUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUp
OworICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1
Y3R1cmUsIG9mZnNldCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCkBAIC0xOTQsNyArMjEzLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9CiAgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3Vy
cmVudGx5KCpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQpOwogICAgICAgICAgICAgICAgIGlmICgh
aXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7CiAgICAgICAgICAgICAgICAgUmVmUHRyPEludGVuZGVk
U3RydWN0dXJlQ2hhaW4+IGNoYWluOwogICAgICAgICAgICAgICAgIGlmIChhY2Nlc3MuY2hhaW4o
KSkgewogICAgICAgICAgICAgICAgICAgICBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluKApAQCAtMjAyLDE5ICsyMjEsNDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgICAgICBpZiAoIWNoYWluLT5pc1N0
aWxsVmFsaWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBib29sIG9rID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQo
UHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5v
bGRTdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjaGFpbi5nZXQoKSwgb2Zmc2V0
KSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFvaykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICAgICAgdmFyaWFudCA9
IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAorICAgICAgICAgICAgICAgICAgICBhY2Nlc3Mu
b2xkU3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY2hhaW4uZ2V0KCksIG9mZnNl
dCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBj
YXNlIFB1dEJ5SWRBY2Nlc3M6OlNldHRlcjoKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGNhc2UgUHV0QnlJZEFjY2Vzczo6U2V0dGVyOiB7CisgICAgICAgICAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21wbGV4R2V0U3RhdHVzID0gQ29tcGxleEdl
dFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywg
c3RydWN0dXJlLCBhY2Nlc3MuY2hhaW4oKSwgYWNjZXNzLmNoYWluQ291bnQoKSwgdWlkKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMu
a2luZCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRT
a2lwOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpUYWtlc1Nsb3dQYXRoOgor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlKTsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3Rh
dHVzOjpJbmxpbmVhYmxlOiB7CisgICAgICAgICAgICAgICAgICAgIEFjY2Vzc29yQ2FsbEpJVFN0
dWJSb3V0aW5lKiBzdHViID0gc3RhdGljX2Nhc3Q8QWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUq
PigKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5zdHViUm91dGluZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0
YXR1cyA9CisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5r
U3RhdHVzPigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsTGlua1N0YXR1czo6Y29t
cHV0ZUZvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCAqc3R1Yi0+
bV9jYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpKTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAor
ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNl
dCgpLCBjb21wbGV4R2V0U3RhdHVzLnNwZWNpZmljVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbXBsZXhHZXRTdGF0dXMuY2hhaW4oKSwgc3RkOjptb3ZlKGNhbGxMaW5rU3RhdHVz
KSk7CisgICAgICAgICAgICAgICAgfSB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5SWRBY2Nlc3M6
OkN1c3RvbVNldHRlcjoKICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhNYWtl
c0NhbGxzKTsKIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTIzMCwxNiArMjc4LDIwIEBAIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKIHsKICNpZiBFTkFCTEUoREZH
X0pJVCkKICAgICBpZiAoZGZnQmxvY2spIHsKKyAgICAgICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRT
aXRlRGF0YSBleGl0U2l0ZURhdGE7CiAgICAgICAgIHsKICAgICAgICAgICAgIENvbmN1cnJlbnRK
SVRMb2NrZXIgbG9ja2VyKGJhc2VsaW5lQmxvY2stPm1fbG9jayk7CiAgICAgICAgICAgICBpZiAo
aGFzRXhpdFNpdGUobG9ja2VyLCBiYXNlbGluZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgsIEV4aXRGcm9tRlRMKSkKICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhU
YWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgIGV4aXRTaXRlRGF0YSA9IENhbGxMaW5rU3RhdHVz
Ojpjb21wdXRlRXhpdFNpdGVEYXRhKAorICAgICAgICAgICAgICAgIGxvY2tlciwgYmFzZWxpbmVC
bG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBFeGl0RnJvbUZUTCk7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKICAgICAgICAgewog
ICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoZGZnQmxvY2stPm1fbG9jayk7
Ci0gICAgICAgICAgICByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8obG9ja2VyLCBkZmdCbG9j
aywgZGZnTWFwLmdldChjb2RlT3JpZ2luKSwgdWlkKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGNv
bXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAgICAgICAgICBsb2NrZXIsIGRmZ0Jsb2NrLCBkZmdN
YXAuZ2V0KGNvZGVPcmlnaW4pLCB1aWQsIGV4aXRTaXRlRGF0YSk7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIC8vIFdlIHVzZSBUYWtlc1Nsb3dQYXRoIGluIHNvbWUgY2FzZXMgd2hlcmUg
dGhlIHN0dWIgd2FzIHVuc2V0LiBUaGF0J3Mgd2VpcmQgYW5kCkBAIC0zNTMsNiArNDA1LDIyIEBA
IFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCitib29sIFB1dEJ5SWRTdGF0dXM6Om1ha2VzQ2FsbHMoKSBjb25zdAoreworICAg
IGlmIChtX3N0YXRlID09IE1ha2VzQ2FsbHMpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAor
ICAgIGlmIChtX3N0YXRlICE9IFNpbXBsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
IGlmIChtX3ZhcmlhbnRzW2ldLm1ha2VzQ2FsbHMoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgUHV0QnlJZFN0YXR1
czo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIHN3aXRjaCAobV9zdGF0ZSkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1
cy5oCShyZXZpc2lvbiAxNzA1NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw5IEBAIHByaXZhdGU6
CiAgICAgc3RhdGljIGJvb2wgaGFzRXhpdFNpdGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYs
IENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIEV4aXRpbmdKSVRUeXBlID0gRXhp
dEZyb21Bbnl0aGluZyk7CiAjZW5kaWYKICNpZiBFTkFCTEUoSklUKQotICAgIHN0YXRpYyBQdXRC
eUlkU3RhdHVzIGNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwg
Q29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8qLCBTdHJpbmdJbXBsKiB1aWQpOworICAgIHN0
YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAgY29uc3QgQ29u
Y3VycmVudEpJVExvY2tlciYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RyaW5n
SW1wbCogdWlkLAorICAgICAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKICNlbmRp
ZgogICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgU3RyaW5nSW1wbCogdWlkKTsKICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAko
cmV2aXNpb24gMTcwNTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNDYgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKK1B1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGNvbnN0
IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAg
UHV0QnlJZFZhcmlhbnQgcmVzdWx0OworICAgIHJlc3VsdC5tX2tpbmQgPSBSZXBsYWNlOworICAg
IHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICByZXN1bHQubV9vZmZzZXQg
PSBvZmZzZXQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUHV0QnlJZFZhcmlhbnQgUHV0QnlJ
ZFZhcmlhbnQ6OnRyYW5zaXRpb24oCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1
cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAorICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJl
Q2hhaW4qIHN0cnVjdHVyZUNoYWluLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgUHV0
QnlJZFZhcmlhbnQgcmVzdWx0OworICAgIHJlc3VsdC5tX2tpbmQgPSBUcmFuc2l0aW9uOworICAg
IHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IG9sZFN0cnVjdHVyZTsKKyAgICByZXN1bHQubV9uZXdT
dHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7CisgICAgaWYgKHN0cnVjdHVyZUNoYWluKQorICAgICAg
ICBzdHJ1Y3R1cmVDaGFpbi0+Z2F0aGVyQ2hlY2tzKHJlc3VsdC5tX2NvbnN0YW50Q2hlY2tzKTsK
KyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
UHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnNldHRlcigKKyAgICBjb25zdCBTdHJ1Y3R1
cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBKU1ZhbHVlIHNwZWNpZmlj
VmFsdWUsCisgICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHN0ZDo6dW5pcXVlX3B0
cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpCit7CisgICAgUHV0QnlJZFZhcmlhbnQg
cmVzdWx0OworICAgIHJlc3VsdC5tX2tpbmQgPSBTZXR0ZXI7CisgICAgcmVzdWx0Lm1fb2xkU3Ry
dWN0dXJlID0gc3RydWN0dXJlOworICAgIGlmIChjaGFpbikgeworICAgICAgICBjaGFpbi0+Z2F0
aGVyQ2hlY2tzKHJlc3VsdC5tX2NvbnN0YW50Q2hlY2tzKTsKKyAgICAgICAgcmVzdWx0Lm1fYWx0
ZXJuYXRlQmFzZSA9IGNoYWluLT50ZXJtaW5hbFByb3RvdHlwZSgpOworICAgIH0KKyAgICByZXN1
bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0Lm1fc3BlY2lmaWNWYWx1ZSA9IHNwZWNp
ZmljVmFsdWU7CisgICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1vdmUoY2FsbExp
bmtTdGF0dXMpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIFN0cnVjdHVyZSogUHV0QnlJZFZh
cmlhbnQ6Om9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdAogewogICAgIEFTU0VSVChr
aW5kKCkgPT0gVHJhbnNpdGlvbik7CkBAIC00NCwxOCArODQsMzAgQEAgU3RydWN0dXJlKiBQdXRC
eUlkVmFyaWFudDo6b2xkU3RydWN0dXJlRgogCiBib29sIFB1dEJ5SWRWYXJpYW50Ojp3cml0ZXNT
dHJ1Y3R1cmVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4ga2luZCgpID09IFRyYW5zaXRpb247Cisg
ICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNlIFRyYW5zaXRpb246CisgICAgY2FzZSBTZXR0
ZXI6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CiB9CiAKIGJvb2wgUHV0QnlJZFZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFn
ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKGtpbmQoKSAhPSBUcmFuc2l0aW9uKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKG9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSA9PSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkK
KyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgcmV0
dXJuIG9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBu
ZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBjYXNlIFNldHRlcjoKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAotICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworYm9vbCBQdXRCeUlkVmFyaWFudDo6
bWFrZXNDYWxscygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGtpbmQoKSA9PSBTZXR0ZXI7CiB9CiAK
IGJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiBvdGhlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFy
aWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkVmFyaWFudC5oCShyZXZpc2lvbiAxNzA1NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsOCBA
QCBwdWJsaWM6CiAgICAgZW51bSBLaW5kIHsKICAgICAgICAgTm90U2V0LAogICAgICAgICBSZXBs
YWNlLAotICAgICAgICBUcmFuc2l0aW9uCisgICAgICAgIFRyYW5zaXRpb24sCisgICAgICAgIFNl
dHRlcgogICAgIH07CiAgICAgCiAgICAgUHV0QnlJZFZhcmlhbnQoKQpAQCAtNDcsMjggKzQ4LDE2
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFu
dCByZXBsYWNlKGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCi0gICAgewotICAgICAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7Ci0gICAgICAgIHJl
c3VsdC5tX2tpbmQgPSBSZXBsYWNlOwotICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmU7Ci0gICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9CisgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHJlcGxhY2UoCisg
ICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQpOwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0aW9uKAogICAgICAg
ICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUsCi0gICAgICAgIFBhc3NSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gc3RydWN0dXJl
Q2hhaW4sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKLSAgICB7Ci0gICAgICAgIFB1dEJ5SWRWYXJp
YW50IHJlc3VsdDsKLSAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247Ci0gICAgICAg
IHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IG9sZFN0cnVjdHVyZTsKLSAgICAgICAgcmVzdWx0Lm1f
bmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOwotICAgICAgICBpZiAoc3RydWN0dXJlQ2hhaW4p
Ci0gICAgICAgICAgICBzdHJ1Y3R1cmVDaGFpbi0+Z2F0aGVyQ2hlY2tzKHJlc3VsdC5tX2NvbnN0
YW50Q2hlY2tzKTsKLSAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICAgICAgY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
biogc3RydWN0dXJlQ2hhaW4sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCk7CisgICAgCisgICAgc3Rh
dGljIFB1dEJ5SWRWYXJpYW50IHNldHRlcigKKyAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBz
dHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlLAor
ICAgICAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENh
bGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cyk7CiAgICAgCiAgICAgS2luZCBraW5kKCkgY29u
c3QgeyByZXR1cm4gbV9raW5kOyB9CiAgICAgCkBAIC03NywxOSArNjYsMTkgQEAgcHVibGljOgog
ICAgIAogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlKCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChraW5kKCkgPT0gUmVwbGFjZSk7CisgICAgICAgIEFTU0VSVChraW5kKCkg
PT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKICAgICAgICAgcmV0dXJuIG1fb2xkU3Ry
dWN0dXJlOwogICAgIH0KICAgICAKICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVy
ZSgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwg
a2luZCgpID09IFJlcGxhY2UpOworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24g
fHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7CiAgICAgICAgIHJldHVy
biBtX29sZFN0cnVjdHVyZTsKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlU2V0JiBvbGRTdHJ1
Y3R1cmUoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtp
bmQoKSA9PSBSZXBsYWNlKTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8
IGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOwogICAgICAgICByZXR1cm4g
bV9vbGRTdHJ1Y3R1cmU7CiAgICAgfQogICAgIApAQCAtMTAzLDYgKzkyLDcgQEAgcHVibGljOgog
CiAgICAgYm9vbCB3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCByZWFsbG9jYXRl
c1N0b3JhZ2UoKSBjb25zdDsKKyAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKICAgICAKICAg
ICBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBjb25zdGFudENoZWNrcygpIGNv
bnN0CiAgICAgewpAQCAtMTE1LDYgKzEwNSwyNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBt
X29mZnNldDsKICAgICB9CiAgICAgCisgICAgSlNPYmplY3QqIGFsdGVybmF0ZUJhc2UoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1
cm4gbV9hbHRlcm5hdGVCYXNlOworICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIHNwZWNpZmljVmFs
dWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTZXR0ZXIpOworICAg
ICAgICByZXR1cm4gbV9zcGVjaWZpY1ZhbHVlOworICAgIH0KKyAgICAKKyAgICBDYWxsTGlua1N0
YXR1cyogY2FsbExpbmtTdGF0dXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5nZXQoKTsKKyAg
ICB9CisKICAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhl
cik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkBAIC0xMjcsNyAr
MTM1LDEwIEBAIHByaXZhdGU6CiAgICAgU3RydWN0dXJlU2V0IG1fb2xkU3RydWN0dXJlOwogICAg
IFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmU7CiAgICAgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1Zl
Y3RvciBtX2NvbnN0YW50Q2hlY2tzOworICAgIEpTT2JqZWN0KiBtX2FsdGVybmF0ZUJhc2U7Cisg
ICAgSlNWYWx1ZSBtX3NwZWNpZmljVmFsdWU7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7
CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTcwNTcxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE3MSw2ICsxNzEsMTAgQEAgcHJpdmF0ZToKICAgICAvLyBIYW5kbGUgY2FsbHMuIFRoaXMg
cmVzb2x2ZXMgaXNzdWVzIHN1cnJvdW5kaW5nIGlubGluaW5nIGFuZCBpbnRyaW5zaWNzLgogICAg
IHZvaWQgaGFuZGxlQ2FsbCgKICAgICAgICAgaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIElubGlu
ZUNhbGxGcmFtZTo6S2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLAorICAgICAgICBOb2Rl
KiBjYWxsVGFyZ2V0LCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCwgQ2FsbExpbmtT
dGF0dXMsCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pOworICAgIHZvaWQgaGFu
ZGxlQ2FsbCgKKyAgICAgICAgaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIElubGluZUNhbGxGcmFt
ZTo6S2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLAogICAgICAgICBOb2RlKiBjYWxsVGFy
Z2V0LCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCwgQ2FsbExpbmtTdGF0dXMpOwog
ICAgIHZvaWQgaGFuZGxlQ2FsbChpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLCBpbnQgY2FsbGVlLCBpbnQgYXJn
Q291bnQsIGludCByZWdpc3Rlck9mZnNldCk7CiAgICAgdm9pZCBoYW5kbGVDYWxsKEluc3RydWN0
aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwpAQCAtNjQwLDEw
ICs2NDQsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgbV9udW1QYXNzZWRWYXJBcmdzKys7CiAgICAg
fQogICAgIAotICAgIE5vZGUqIGFkZENhbGwoaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIE5vZGUq
IGNhbGxlZSwgaW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQpCisgICAgTm9kZSogYWRk
Q2FsbFdpdGhvdXRTZXR0aW5nUmVzdWx0KAorICAgICAgICBOb2RlVHlwZSBvcCwgTm9kZSogY2Fs
bGVlLCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCwKKyAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbikKICAgICB7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b24gPSBnZXRQcmVkaWN0aW9uKCk7Ci0gICAgICAgIAogICAgICAgICBhZGRWYXJBcmdDaGlsZChj
YWxsZWUpOwogICAgICAgICBzaXplX3QgcGFyYW1ldGVyU2xvdHMgPSBKU1N0YWNrOjpDYWxsRnJh
bWVIZWFkZXJTaXplIC0gSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUgKyBhcmdDb3VudDsK
ICAgICAgICAgaWYgKHBhcmFtZXRlclNsb3RzID4gbV9wYXJhbWV0ZXJTbG90cykKQEAgLTY1Myw4
ICs2NTcsMTggQEAgcHJpdmF0ZToKICAgICAgICAgZm9yIChpbnQgaSA9IDAgKyBkdW1teVRoaXNB
cmd1bWVudDsgaSA8IGFyZ0NvdW50OyArK2kpCiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChn
ZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSwgcmVnaXN0ZXJPZmZzZXQpKSk7CiAKLSAg
ICAgICAgTm9kZSogY2FsbCA9IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBvcCwgT3BJbmZvKDAp
LCBPcEluZm8ocHJlZGljdGlvbikpOwotICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dCksIGNhbGwpOworICAgICAgICByZXR1cm4gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIG9wLCBP
cEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSk7CisgICAgfQorICAgIAorICAgIE5vZGUqIGFk
ZENhbGwoCisgICAgICAgIGludCByZXN1bHQsIE5vZGVUeXBlIG9wLCBOb2RlKiBjYWxsZWUsIGlu
dCBhcmdDb3VudCwgaW50IHJlZ2lzdGVyT2Zmc2V0LAorICAgICAgICBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uKQorICAgIHsKKyAgICAgICAgTm9kZSogY2FsbCA9IGFkZENhbGxXaXRob3V0U2V0
dGluZ1Jlc3VsdCgKKyAgICAgICAgICAgIG9wLCBjYWxsZWUsIGFyZ0NvdW50LCByZWdpc3Rlck9m
ZnNldCwgcHJlZGljdGlvbik7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRSZWcocmVz
dWx0KTsKKyAgICAgICAgaWYgKHJlc3VsdFJlZy5pc1ZhbGlkKCkpCisgICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCksIGNhbGwpOwogICAgICAgICByZXR1cm4gY2FsbDsKICAg
ICB9CiAgICAgCkBAIC05OTIsNiArMTAwNiwxNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVDYWxsKAogICAgIE5vZGUqIGNhbGxUYXJnZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgaW50IHJlZ2lzdGVyT2Zmc2V0LAogICAgIENhbGxMaW5rU3RhdHVzIGNhbGxMaW5rU3Rh
dHVzKQogeworICAgIGhhbmRsZUNhbGwoCisgICAgICAgIHJlc3VsdCwgb3AsIGtpbmQsIGluc3Ry
dWN0aW9uU2l6LCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywKKyAgICAg
ICAgcmVnaXN0ZXJPZmZzZXQsIGNhbGxMaW5rU3RhdHVzLCBnZXRQcmVkaWN0aW9uKCkpOworfQor
Cit2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAorICAgIGludCByZXN1bHQsIE5vZGVU
eXBlIG9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25T
aXplLAorICAgIE5vZGUqIGNhbGxUYXJnZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgaW50IHJlZ2lzdGVyT2Zmc2V0LAorICAgIENhbGxMaW5rU3RhdHVzIGNhbGxMaW5rU3RhdHVz
LCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQorewogICAgIEFTU0VSVChyZWdpc3Rlck9mZnNl
dCA8PSAwKTsKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCA9
IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQpOwogICAgIApAQCAt
MTAwMiwxMiArMTAyNiwxMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAg
ICAgICAvLyBPZGRseSwgdGhpcyBjb25mbGF0ZXMgY2FsbHMgdGhhdCBoYXZlbid0IGV4ZWN1dGVk
IHdpdGggY2FsbHMgdGhhdCBiZWhhdmVkIHN1ZmZpY2llbnRseSBwb2x5bW9ycGhpY2FsbHkKICAg
ICAgICAgLy8gdGhhdCB3ZSBjYW5ub3Qgb3B0aW1pemUgdGhlbS4KICAgICAgICAgCi0gICAgICAg
IGFkZENhbGwocmVzdWx0LCBvcCwgY2FsbFRhcmdldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgYWRkQ2FsbChyZXN1bHQsIG9wLCBjYWxsVGFy
Z2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQsIHByZWRpY3Rp
b24pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIG5leHRPZmZz
ZXQgPSBtX2N1cnJlbnRJbmRleCArIGluc3RydWN0aW9uU2l6ZTsKLSAgICBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOwogCiAgICAgaWYgKEludGVybmFsRnVuY3Rp
b24qIGZ1bmN0aW9uID0gY2FsbExpbmtTdGF0dXMuaW50ZXJuYWxGdW5jdGlvbigpKSB7CiAgICAg
ICAgIGlmIChoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24ocmVzdWx0LCBmdW5jdGlvbiwg
cmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBwcmVkaWN0aW9uLCBz
cGVjaWFsaXphdGlvbktpbmQpKSB7CkBAIC0xMDE5LDcgKzEwNDIsNyBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVDYWxsKAogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBDYW4g
b25seSBoYW5kbGUgdGhpcyB1c2luZyB0aGUgZ2VuZXJpYyBjYWxsIGhhbmRsZXIuCi0gICAgICAg
IGFkZENhbGwocmVzdWx0LCBvcCwgY2FsbFRhcmdldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgYWRkQ2FsbChyZXN1bHQsIG9wLCBjYWxsVGFy
Z2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQsIHByZWRpY3Rp
b24pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTEwNTYsNyArMTA3OSw3
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9Ci0gICAgTm9kZSogY2FsbCA9IGFkZENhbGwocmVzdWx0LCBvcCwgY2FsbFRh
cmdldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICBO
b2RlKiBjYWxsID0gYWRkQ2FsbChyZXN1bHQsIG9wLCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQsIHByZWRpY3Rpb24pOwogCiAgICAgaWYgKGtu
b3duRnVuY3Rpb24pIAogICAgICAgICBjYWxsLT5naXZlS25vd25GdW5jdGlvbihrbm93bkZ1bmN0
aW9uKTsKQEAgLTE3NTcsNyArMTc4MCw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdl
dEJ5SWQoCiAgICAgICAgIGxvYWRlZFZhbHVlID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5zcGVj
aWZpY1ZhbHVlKCkpOwogICAgIGVsc2UgewogICAgICAgICBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdl
dEJ5T2Zmc2V0KAotICAgICAgICAgICAgcHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJl
ciwgdmFyaWFudC5vZmZzZXQoKSwKKyAgICAgICAgICAgIHZhcmlhbnQuY2FsbExpbmtTdGF0dXMo
KSA/IFNwZWNDZWxsT3RoZXIgOiBwcmVkaWN0aW9uLAorICAgICAgICAgICAgYmFzZSwgaWRlbnRp
Zmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwKICAgICAgICAgICAgIHZhcmlhbnQuY2FsbExp
bmtTdGF0dXMoKSA/IEdldEdldHRlclNldHRlckJ5T2Zmc2V0IDogR2V0QnlPZmZzZXQpOwogICAg
IH0KICAgICAKQEAgLTE4MDEsNyArMTgyNSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUdldEJ5SWQoCiAgICAgCiAgICAgaGFuZGxlQ2FsbCgKICAgICAgICAgZGVzdGluYXRpb25PcGVy
YW5kLCBDYWxsLCBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGwsIE9QQ09ERV9MRU5HVEgob3Bf
Z2V0X2J5X2lkKSwKLSAgICAgICAgZ2V0dGVyLCBudW1iZXJPZlBhcmFtZXRlcnMgLSAxLCByZWdp
c3Rlck9mZnNldCwgKnZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSk7CisgICAgICAgIGdldHRlciwg
bnVtYmVyT2ZQYXJhbWV0ZXJzIC0gMSwgcmVnaXN0ZXJPZmZzZXQsICp2YXJpYW50LmNhbGxMaW5r
U3RhdHVzKCksIHByZWRpY3Rpb24pOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0
QnlJZCgKQEAgLTE4NTIsNyArMTg3Niw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1
dEJ5SWQoCiAgICAgQVNTRVJUKHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxKTsKICAg
ICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IHB1dEJ5SWRTdGF0dXNbMF07CiAgICAg
Ci0gICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7Cisg
ICAgc3dpdGNoICh2YXJpYW50LmtpbmQoKSkgeworICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlJl
cGxhY2U6IHsKICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3Jh
cGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0dXJlKCkpKSwgYmFzZSk7CiAgICAgICAg
IGhhbmRsZVB1dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0
KCksIHZhbHVlKTsKICAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKQEAgLTE4NjAs
NTcgKzE4ODUsMTE2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKHZhcmlhbnQua2luZCgpICE9IFB1dEJ5
SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7Ci0gICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50
aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbjogeworICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1
cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKKyAgICAgICAgZW1pdENoZWNr
cyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOwogCi0gICAgYWRkVG9HcmFwaChDaGVja1N0cnVj
dHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJl
KCkpKSwgYmFzZSk7Ci0gICAgZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOwot
Ci0gICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50cmFuc2l0
aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKKyAgICAgICAgQVNTRVJUKHZh
cmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNl
dEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKICAgICAKLSAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7
Ci0gICAgVHJhbnNpdGlvbiogdHJhbnNpdGlvbiA9IG1fZ3JhcGgubV90cmFuc2l0aW9ucy5hZGQo
Ci0gICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLCB2YXJpYW50Lm5l
d1N0cnVjdHVyZSgpKTsKKyAgICAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOworICAgICAgICBU
cmFuc2l0aW9uKiB0cmFuc2l0aW9uID0gbV9ncmFwaC5tX3RyYW5zaXRpb25zLmFkZCgKKyAgICAg
ICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLCB2YXJpYW50Lm5ld1N0
cnVjdHVyZSgpKTsKIAotICAgIGlmICh2YXJpYW50LnJlYWxsb2NhdGVzU3RvcmFnZSgpKSB7Cisg
ICAgICAgIGlmICh2YXJpYW50LnJlYWxsb2NhdGVzU3RvcmFnZSgpKSB7CiAKLSAgICAgICAgLy8g
SWYgd2UncmUgZ3Jvd2luZyB0aGUgcHJvcGVydHkgc3RvcmFnZSB0aGVuIGl0IG11c3QgYmUgYmVj
YXVzZSB3ZSdyZQotICAgICAgICAvLyBzdG9yaW5nIGludG8gdGhlIG91dC1vZi1saW5lIHN0b3Jh
Z2UuCi0gICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpOwot
Ci0gICAgICAgIGlmICghdmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPm91dE9m
TGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3Jh
cGgoCi0gICAgICAgICAgICAgICAgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE9wSW5mbyh0cmFu
c2l0aW9uKSwgYmFzZSk7CisgICAgICAgICAgICAvLyBJZiB3ZSdyZSBncm93aW5nIHRoZSBwcm9w
ZXJ0eSBzdG9yYWdlIHRoZW4gaXQgbXVzdCBiZSBiZWNhdXNlIHdlJ3JlCisgICAgICAgICAgICAv
LyBzdG9yaW5nIGludG8gdGhlIG91dC1vZi1saW5lIHN0b3JhZ2UuCisgICAgICAgICAgICBBU1NF
UlQoIWlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKTsKKworICAgICAgICAgICAgaWYg
KCF2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSkgeworICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoCisgICAg
ICAgICAgICAgICAgICAgIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBPcEluZm8odHJhbnNpdGlv
biksIGJhc2UpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0
eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKAorICAgICAgICAgICAgICAgICAgICBSZWFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlLCBPcEluZm8odHJhbnNpdGlvbiksCisgICAgICAgICAgICAgICAgICAgIGJh
c2UsIGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKSk7CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKAot
ICAgICAgICAgICAgICAgIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE9wSW5mbyh0cmFuc2l0
aW9uKSwKLSAgICAgICAgICAgICAgICBiYXNlLCBhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgYmFz
ZSkpOworICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQor
ICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRCdXR0ZXJm
bHksIGJhc2UpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGlzSW5saW5l
T2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQotICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0g
YmFzZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9H
cmFwaChHZXRCdXR0ZXJmbHksIGJhc2UpOwotICAgIH0KLQotICAgIGFkZFRvR3JhcGgoUHV0U3Ry
dWN0dXJlLCBPcEluZm8odHJhbnNpdGlvbiksIGJhc2UpOwogCi0gICAgYWRkVG9HcmFwaCgKLSAg
ICAgICAgUHV0QnlPZmZzZXQsCi0gICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vz
c0RhdGEuc2l6ZSgpKSwKLSAgICAgICAgcHJvcGVydHlTdG9yYWdlLAotICAgICAgICBiYXNlLAot
ICAgICAgICB2YWx1ZSk7CisgICAgICAgIGFkZFRvR3JhcGgoUHV0U3RydWN0dXJlLCBPcEluZm8o
dHJhbnNpdGlvbiksIGJhc2UpOwogCi0gICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vz
c0RhdGE7Ci0gICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ID0gdmFyaWFudC5vZmZzZXQoKTsK
LSAgICBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJl
cjsKLSAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYXBwZW5kKHN0b3JhZ2VBY2Nlc3NE
YXRhKTsKKyAgICAgICAgYWRkVG9HcmFwaCgKKyAgICAgICAgICAgIFB1dEJ5T2Zmc2V0LAorICAg
ICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCkpLAorICAg
ICAgICAgICAgcHJvcGVydHlTdG9yYWdlLAorICAgICAgICAgICAgYmFzZSwKKyAgICAgICAgICAg
IHZhbHVlKTsKKworICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsK
KyAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ID0gdmFyaWFudC5vZmZzZXQoKTsKKyAg
ICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1i
ZXI7CisgICAgICAgIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hcHBlbmQoc3RvcmFnZUFj
Y2Vzc0RhdGEpOwogCi0gICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKLSAgICAgICAgbV9n
cmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOworICAgICAgICBpZiAo
bV9ncmFwaC5jb21waWxhdGlvbigpKQorICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigp
LT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAg
ICAKKyAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpTZXR0ZXI6IHsKKyAgICAgICAgTm9kZSogb3Jp
Z2luYWxCYXNlID0gYmFzZTsKKyAgICAgICAgCisgICAgICAgIGFkZFRvR3JhcGgoCisgICAgICAg
ICAgICBDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlh
bnQuc3RydWN0dXJlU2V0KCkpKSwgYmFzZSk7CisgICAgICAgIAorICAgICAgICBlbWl0Q2hlY2tz
KHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSk7CisgICAgICAgIAorICAgICAgICBpZiAodmFyaWFu
dC5hbHRlcm5hdGVCYXNlKCkpCisgICAgICAgICAgICBiYXNlID0gd2Vha0pTQ29uc3RhbnQodmFy
aWFudC5hbHRlcm5hdGVCYXNlKCkpOworICAgICAgICAKKyAgICAgICAgTm9kZSogbG9hZGVkVmFs
dWU7CisgICAgICAgIGlmICh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSkKKyAgICAgICAgICAgIGxv
YWRlZFZhbHVlID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQo
CisgICAgICAgICAgICAgICAgU3BlY0NlbGxPdGhlciwgYmFzZSwgaWRlbnRpZmllck51bWJlciwg
dmFyaWFudC5vZmZzZXQoKSwKKyAgICAgICAgICAgICAgICBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNl
dCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE5vZGUqIHNldHRlciA9IGFkZFRvR3Jh
cGgoR2V0U2V0dGVyLCBsb2FkZWRWYWx1ZSk7CisgICAgICAgIAorICAgICAgICAvLyBNYWtlIGEg
Y2FsbC4gV2UgZG9uJ3QgdHJ5IHRvIGdldCBmYW5jeSB3aXRoIHVzaW5nIHRoZSBzbWFsbGVzdCBv
cGVyYW5kIG51bWJlciBiZWNhdXNlCisgICAgICAgIC8vIHRoZSBzdGFjayBsYXlvdXQgcGhhc2Ug
c2hvdWxkIGNvbXByZXNzIHRoZSBzdGFjayBhbnl3YXkuCisgICAgCisgICAgICAgIHVuc2lnbmVk
IG51bWJlck9mUGFyYW1ldGVycyA9IDA7CisgICAgICAgIG51bWJlck9mUGFyYW1ldGVycysrOyAv
LyBUaGUgJ3RoaXMnIGFyZ3VtZW50LgorICAgICAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsgLy8g
VGhlIG5ldyB2YWx1ZS4KKyAgICAgICAgbnVtYmVyT2ZQYXJhbWV0ZXJzKys7IC8vIFRydWUgcmV0
dXJuIFBDLgorICAgIAorICAgICAgICAvLyBTdGFydCB3aXRoIGEgcmVnaXN0ZXIgb2Zmc2V0IHRo
YXQgY29ycmVzcG9uZHMgdG8gdGhlIGxhc3QgaW4tdXNlIHJlZ2lzdGVyLgorICAgICAgICBpbnQg
cmVnaXN0ZXJPZmZzZXQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgKKyAgICAgICAgICAgIG1f
aW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMgLSAx
KS5vZmZzZXQoKTsKKyAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0gbnVtYmVyT2ZQYXJhbWV0ZXJz
OworICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXpl
OworICAgIAorICAgICAgICAvLyBHZXQgdGhlIGFsaWdubWVudCByaWdodC4KKyAgICAgICAgcmVn
aXN0ZXJPZmZzZXQgPSAtV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKAorICAgICAgICAgICAgc3Rh
Y2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIC1yZWdpc3Rlck9mZnNldCk7Cisg
ICAgCisgICAgICAgIGVuc3VyZUxvY2FscygKKyAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3At
PnJlbWFwT3BlcmFuZCgKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJP
ZmZzZXQpKS50b0xvY2FsKCkpOworICAgIAorICAgICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVn
aXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgb3JpZ2luYWxCYXNlLCBJbW1lZGlhdGVO
YWtlZFNldCk7CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCB2
YWx1ZSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgIAorICAgICAgICBoYW5kbGVDYWxsKAorICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCksIENhbGwsIElubGluZUNhbGxGcmFt
ZTo6U2V0dGVyQ2FsbCwKKyAgICAgICAgICAgIE9QQ09ERV9MRU5HVEgob3BfcHV0X2J5X2lkKSwg
c2V0dGVyLCBudW1iZXJPZlBhcmFtZXRlcnMgLSAxLCByZWdpc3Rlck9mZnNldCwKKyAgICAgICAg
ICAgICp2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCksIFNwZWNPdGhlcik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgZGVmYXVsdDogeworICAgICAgICBlbWl0UHV0QnlJZChiYXNl
LCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QpOworICAg
ICAgICByZXR1cm47CisgICAgfSB9CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByZXBhcmVU
b1BhcnNlQmxvY2soKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAJKHJldmlzaW9uIDE3MDU3MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNiArMTMwLDE1IEBAIGJvb2wgSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbjo6aXNOb3JtYWxpemUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluOjp0YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpIGNv
bnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgeworICAgICAg
ICBpZiAoYXQoaSktPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBKU09i
amVjdCogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6dGVybWluYWxQcm90b3R5cGUoKSBjb25zdAog
ewogICAgIEFTU0VSVCghbV92ZWN0b3IuaXNFbXB0eSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgJKHJl
dmlzaW9uIDE3MDU3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVk
U3RydWN0dXJlQ2hhaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsOCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBtYXlJbnRlcmNlcHRTdG9yZVRvKFZNJiwgU3RyaW5nSW1wbCogdWlkKTsKICAg
ICBib29sIGlzTm9ybWFsaXplZCgpOwogICAgIAorICAgIGJvb2wgdGFrZXNTbG93UGF0aEluREZH
Rm9ySW1wdXJlUHJvcGVydHkoKTsKKyAgICAKICAgICBKU1ZhbHVlIHByb3RvdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcHJvdG90eXBlOyB9CiAgICAgCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7
IHJldHVybiBtX3ZlY3Rvci5zaXplKCk7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234139</attachid>
            <date>2014-06-30 19:16:03 -0700</date>
            <delta_ts>2014-07-01 13:14:26 -0700</delta_ts>
            <desc>it compiles</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>58437</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE3MDU3MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjcsNiArNjcsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGJ5dGVjb2Rl
L0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAKICAgICBieXRlY29kZS9Db2RlT3Jp
Z2luLmNwcAogICAgIGJ5dGVjb2RlL0NvZGVUeXBlLmNwcAorICAgIGJ5dGVjb2RlL0NvbXBsZXJH
ZXRTdGF0dXMuY3BwCiAgICAgYnl0ZWNvZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAKICAg
ICBieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAKICAgICBieXRlY29kZS9EZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2oJKHJldmlzaW9uIDE3MDU3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTMyMSw2ICszMjEsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ29k
ZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXENvZGVPcmlnaW4uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcQ29kZVR5cGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcQ29tcGxleEdldFN0YXR1cy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxDb25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxERkdFeGl0UHJvZmls
ZS5jcHAiIC8+CkBAIC04NTgsNiArODU5LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGJ5dGVjb2RlXENvZGVPcmlnaW4uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXENvZGVUeXBlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxDb21tZW50LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDb21w
bGV4R2V0U3RhdHVzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxD
b25zdGFudFN0cnVjdHVyZUNoZWNrLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxEYXRhRm9ybWF0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzA1NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMzM3LDYgKzMzNyw4IEBACiAJCTBGNkIxQ0M5MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0
eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNDNzE4NjQxREY4MDA4NDVEOTcgLyogQXJpdHlDaGVja0Zh
aWxSZXR1cm5UaHVua3MuY3BwICovOyB9OwogCQkwRjZCMUNDQTE4NjQxREY4MDA4NDVEOTcgLyog
QXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0M4MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNr
RmFpbFJldHVyblRodW5rcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNkU4NDVBMTkwMzBCRUYwMDU2Mjc0MSAvKiBERkdWYXJpYWJsZUFjY2Vz
c0RhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2RTg0NTkxOTAzMEJFRjAwNTYyNzQxIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgKi87
IH07CisJCTBGNkZDNzUwMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkZDNzRFMTk2
MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCAqLzsgfTsKKwkJMEY2RkM3NTEx
OTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkZDNzRGMTk2MTEwQTgwMEUxRDAyRCAvKiBD
b21wbGV4R2V0U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY3MDI1QTkxNzE0QjBGQTAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjcwMjVBNzE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNw
cCAqLzsgfTsKIAkJMEY3MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY3MDI1QTgxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzE0Q0E0
MTZFQTkyRjAwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzE0Q0ExMTZFQTky
RUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLzsgfTsKQEAg
LTI1MTIsNiArMjUxNCw4IEBACiAJCTBGNkIxQ0M3MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNo
ZWNrRmFpbFJldHVyblRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNkIxQ0M4MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVy
blRodW5rcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcml0eUNoZWNrRmFp
bFJldHVyblRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjZFODQ1OTE5
MDMwQkVGMDA1NjI3NDEgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHA7IHBhdGgg
PSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY2RkM3NEUxOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29tcGxleEdldFN0YXR1cy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNkZDNzRGMTk2MTEwQTgwMEUxRDAyRCAv
KiBDb21wbGV4R2V0U3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
bXBsZXhHZXRTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MDI1QTcx
NzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3Bw
OyBwYXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNzAyNUE4MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJFQiAv
KiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwOyBwYXRoID0g
ZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNTM3OSw2ICs1MzgzLDggQEAKIAkJCQkwRkJEN0U2NzE0NDc5OThGMDA0ODEz
MTUgLyogQ29kZU9yaWdpbi5oICovLAogCQkJCTBGOEY5NDNGMTY2NzYzMkQwMEQ2MTk3MSAvKiBD
b2RlVHlwZS5jcHAgKi8sCiAJCQkJMEYwQjgzQTUxNEJDRjUwNDAwODg1QjRGIC8qIENvZGVUeXBl
LmggKi8sCisJCQkJMEY2RkM3NEUxOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMu
Y3BwICovLAorCQkJCTBGNkZDNzRGMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVz
LmggKi8sCiAJCQkJMEYzRDBCQkExOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJl
Q2hlY2suY3BwICovLAogCQkJCTBGM0QwQkJCMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0
cnVjdHVyZUNoZWNrLmggKi8sCiAJCQkJMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFG
b3JtYXQuaCAqLywKQEAgLTY1ODUsNiArNjU5MSw3IEBACiAJCQkJQTc4NUY2QkMxOEM1NTNGRTAw
RjEwNjI2IC8qIFNwaWxsUmVnaXN0ZXJzTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0
NTUwRTE2RjVDRDAwQjM0NDYwIC8qIFByb3BlcnR5U2xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEY2RkM3NTExOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDU2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm90ZWN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDc0QzMzQjE2QUEyRDk1MDA2MkYwMUQgLyogUHJvdG90eXBl
TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0
QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCkBAIC04MTAyLDYgKzgxMDksNyBAQAogCQkJCUZF
RDk0RjMwMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZ01hYy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjkxOUQyNTE1ODUzQ0UwMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQUNGNzM3NzE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjZGQzc1MDE5NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEU4NEY5RTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Js
b2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RjcyNTY1MTRFRTI2NUUwMEIxNjUyQiAvKiBX
ZWFrSGFuZGxlT3duZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDQTNBRTMxN0RBNDFBRTAw
NjUzOEFGIC8qIFdlYWtNYXBDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxl
eEdldFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQ29tcGxleEdldFN0YXR1cy5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworQ29tcGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3RhdHVz
Ojpjb21wdXRlRm9yKAorICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlKiBo
ZWFkU3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sCisgICAgdW5zaWduZWQgY2hhaW5D
b3VudCwgU3RyaW5nSW1wbCogdWlkKQoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXNzZXJ0
IHRoYXQgd2UgbmV2ZXIgc2VlIGEgc3RydWN0dXJlIHRoYXQKKyAgICAvLyBoYXNJbXB1cmVHZXRP
d25Qcm9wZXJ0eVNsb3QoKSBidXQgZm9yIHdoaWNoIHdlIGRvbid0CisgICAgLy8gbmV3SW1wdXJl
UHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkuIFdlJ3JlIG5vdCBhdCBhIHBvaW50IHdoZXJlIHdl
IGNhbiBkbworICAgIC8vIHRoYXQsIHlldC4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMxODEwCisgICAgCisgICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRh
a2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCisgICAgICAgIHJldHVybiB0YWtl
c1Nsb3dQYXRoKCk7CisgICAgCisgICAgQ29tcGxleEdldFN0YXR1cyByZXN1bHQ7CisgICAgcmVz
dWx0Lm1fa2luZCA9IElubGluZWFibGU7CisgICAgCisgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVl
OworICAgIAorICAgIGlmIChjaGFpbikgeworICAgICAgICByZXN1bHQubV9jaGFpbiA9IGFkb3B0
UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAorICAgICAgICAgICAgcHJvZmlsZWRCbG9j
aywgaGVhZFN0cnVjdHVyZSwgY2hhaW4sIGNoYWluQ291bnQpKTsKKyAgICAgICAgCisgICAgICAg
IGlmICghcmVzdWx0Lm1fY2hhaW4tPmlzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJu
IHNraXAoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChoZWFkU3RydWN0dXJlLT50YWtlc1Nsb3dQ
YXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpCisgICAgICAgICAgICB8fCByZXN1bHQubV9jaGFp
bi0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0YWtlc1Nsb3dQYXRoKCk7CisgICAgICAgIAorICAgICAgICBKU09iamVjdCogY3VycmVu
dE9iamVjdCA9IHJlc3VsdC5tX2NoYWluLT50ZXJtaW5hbFByb3RvdHlwZSgpOworICAgICAgICBT
dHJ1Y3R1cmUqIGN1cnJlbnRTdHJ1Y3R1cmUgPSByZXN1bHQubV9jaGFpbi0+bGFzdCgpOworICAg
ICAgICAKKyAgICAgICAgQVNTRVJUX1VOVVNFRChjdXJyZW50T2JqZWN0LCBjdXJyZW50T2JqZWN0
KTsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGN1cnJlbnRTdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQs
IHJlc3VsdC5tX2F0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgICAgICBpZiAoY3VycmVu
dFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICBzcGVjaWZpY1ZhbHVlID0g
MDsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBoZWFkU3RydWN0dXJl
LT5nZXRDb25jdXJyZW50bHkoCisgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlk
LCByZXN1bHQubV9hdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgaWYgKGhlYWRT
dHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7
CisgICAgfQorICAgIAorICAgIHJlc3VsdC5tX3NwZWNpZmljVmFsdWUgPSBzcGVjaWZpY1ZhbHVl
OworICAgIAorICAgIGlmICghaXNWYWxpZE9mZnNldChyZXN1bHQubV9vZmZzZXQpKQorICAgICAg
ICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db21wbGV4R2V0U3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBDb21wbGV4R2V0U3RhdHVzX2gKKyNkZWZpbmUgQ29tcGxleEdldFN0
YXR1c19oCisKKyNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCisjaW5jbHVkZSAi
SlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKKworLy8gVGhp
cyBjbGFzcyBpcyB1c2VmdWwgZm9yIGZpZ3VyaW5nIG91dCBob3cgdG8gaW5saW5lIGEgY2FjaGVk
IGdldC1saWtlIGFjY2Vzcy4gV2UKKy8vIHNheSAiZ2V0LWxpa2UiIGJlY2F1c2UgdGhpcyBpcyBh
cHByb3ByaWF0ZSBmb3IgbG9hZGluZyB0aGUgR2V0dGVyU2V0dGVyIG9iamVjdCBpbgorLy8gYSBw
dXRfYnlfaWQgdGhhdCBoaXRzIGEgc2V0dGVyLiBOb3RhYmx5LCB0aGlzIGRvZXNuJ3QgZmlndXJl
IG91dCBob3cgdG8gY2FsbAorLy8gYWNjZXNzb3JzLCBvciBldmVuIHdoZXRoZXIgdGhleSBzaG91
bGQgYmUgY2FsbGVkLiBXaGF0IGl0IGdpdmVzIHVzLCBpcyBhIHdheSBvZgorLy8gZGV0ZXJtaW5p
bmcgaG93IHRvIGxvYWQgdGhlIHZhbHVlIGZyb20gdGhlIHJlcXVlc3RlZCBwcm9wZXJ0eSAoaWRl
bnRpZmllZCBieSBhCisvLyBTdHJpbmdJbXBsKiB1aWQpIGZyb20gYW4gb2JqZWN0IG9mIHRoZSBn
aXZlbiBzdHJ1Y3R1cmUgaW4gdGhlIGdpdmVuIENvZGVCbG9jaywKKy8vIGFzc3VtaW5nIHRoYXQg
c3VjaCBhbiBhY2Nlc3MgaGFkIGFscmVhZHkgYmVlbiBjYWNoZWQgYnkgUmVwYXRjaCAoYW5kIHNv
IFJlcGF0Y2ggaGFkCisvLyBhbHJlYWR5IGRvbmUgYSBidW5jaCBvZiBzYWZldHkgY2hlY2tzKS4g
VGhpcyBkb2Vzbid0IHJlZXhlY3V0ZSBhbnkgY2hlY2tzIHRoYXQKKy8vIFJlcGF0Y2ggd291bGQg
aGF2ZSBleGVjdXRlZCwgYW5kIGZvciBwcm90b3R5cGUgY2hhaW4gYWNjZXNzZXMsIGl0IGRvZXNu
J3QgYXNrIHRoZQorLy8gb2JqZWN0cyBpbiB0aGUgcHJvdG90eXBlIGNoYWluIHdoZXRoZXIgdGhl
aXIgZ2V0T3duUHJvcGVydHlTbG90IHdvdWxkIGF0dGVtcHQgdG8KKy8vIGludGVyY2VwdCB0aGUg
YWNjZXNzIC0gc28gdGhpcyByZWFsbHkgaXMgb25seSBhcHByb3ByaWF0ZSBpZiB5b3UgYWxyZWFk
eSBrbm93IHRoYXQKKy8vIG9uZSBvZiB0aGUgSklUT3BlcmF0aW9ucyBoYWQgT0snZCB0aGlzIGZv
ciBjYWNoaW5nIGFuZCB0aGF0IFJlcGF0Y2ggY29uY3VycmVkLgorLy8KKy8vIFRoZSB0eXBpY2Fs
IHVzZSBwYXR0ZXJuIGlzIHNvbWV0aGluZyBsaWtlOgorLy8KKy8vICAgICBDb21wbGV4R2V0U3Rh
dHVzIHN0YXR1cyA9IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3IoLi4uKTsKKy8vICAgICBz
d2l0Y2ggKHN0YXR1cy5raW5kKCkpIHsKKy8vICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlNo
b3VsZFNraXA6CisvLyAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGlzIGtpbmQg
b2YgYWNjZXNzIGlzIHBvc3NpYmx5IHNhZmUgYnV0IHdvdWxkbid0CisvLyAgICAgICAgIC8vIHBh
c3MgdGhlIHJlcXVpcmVkIHNhZmV0eSBjaGVja3MuIEZvciBleGFtcGxlLCBpZiBhbiBJQyBnaXZl
cyB1cyBhIGxpc3Qgb2YKKy8vICAgICAgICAgLy8gYWNjZXNzZXMgYW5kIG9uZSBvZiB0aGVtIGlz
IFNob3VsZFNraXAsIHRoZW4gd2Ugc2hvdWxkIHByZXRlbmQgYXMgaWYgaXQKKy8vICAgICAgICAg
Ly8gd2Fzbid0IGV2ZW4gdGhlcmUuCisvLyAgICAgICAgIGJyZWFrOworLy8gICAgIGNhc2UgQ29t
cGxleEdldFN0YXR1czo6VGFrZXNTbG93UGF0aDoKKy8vICAgICAgICAgLy8gVGhpcyBraW5kIG9m
IGFjY2VzcyBpcyBub3Qgc2FmZSB0byBpbmxpbmUuIEJhaWwgb3V0IG9mIGFueSBhdHRlbXBzdCB0
bworLy8gICAgICAgICAvLyBpbmxpbmUuCisvLyAgICAgICAgIGJyZWFrOworLy8gICAgIGNhc2Ug
Q29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZToKKy8vICAgICAgICAgLy8gVGhlIGdvb2Qgc3R1
ZmYgZ29lcyBoZXJlLiBJZiBpdCdzIElubGluZWFibGUgdGhlbiB0aGUgb3RoZXIgcHJvcGVydGll
cyBvZgorLy8gICAgICAgICAvLyB0aGUgJ3N0YXR1cycgb2JqZWN0IHdpbGwgdGVsbCB5b3UgZXZl
cnl0aGluZyB5b3UgbmVlZCB0byBrbm93IGFib3V0IGhvdworLy8gICAgICAgICAvLyB0byBleGVj
dXRlIHRoZSBnZXQtbGlrZSBvcGVyYXRpb24uCisvLyAgICAgICAgIGJyZWFrOworLy8gICAgIH0K
KworY2xhc3MgQ29tcGxleEdldFN0YXR1cyB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAg
ICAgICAgU2hvdWxkU2tpcCwKKyAgICAgICAgVGFrZXNTbG93UGF0aCwKKyAgICAgICAgSW5saW5l
YWJsZQorICAgIH07CisgICAgCisgICAgQ29tcGxleEdldFN0YXR1cygpCisgICAgICAgIDogbV9r
aW5kKFNob3VsZFNraXApCisgICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKKyAgICAg
ICAgLCBtX2F0dHJpYnV0ZXMoVUlOVF9NQVgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgQ29tcGxleEdldFN0YXR1cyBza2lwKCkKKyAgICB7CisgICAgICAgIHJldHVybiBDb21wbGV4
R2V0U3RhdHVzKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBDb21wbGV4R2V0U3RhdHVzIHRh
a2VzU2xvd1BhdGgoKQorICAgIHsKKyAgICAgICAgQ29tcGxleEdldFN0YXR1cyByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX2tpbmQgPSBUYWtlc1Nsb3dQYXRoOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgQ29tcGxleEdldFN0YXR1cyBjb21wdXRlRm9y
KAorICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZSogaGVhZFN0cnVj
dHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLAorICAgICAgICB1bnNpZ25lZCBjaGFpbkNvdW50
LCBTdHJpbmdJbXBsKiB1aWQpOworICAgIAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJu
IG1fa2luZDsgfQorICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0
dHJpYnV0ZXM7IH0KKyAgICBKU1ZhbHVlIHNwZWNpZmljVmFsdWUoKSBjb25zdCB7IHJldHVybiBt
X3NwZWNpZmljVmFsdWU7IH0KKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX29mZnNldDsgfQorICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluKCkgY29u
c3QgeyByZXR1cm4gbV9jaGFpbi5nZXQoKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBLaW5kIG1f
a2luZDsKKyAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKKyAgICB1bnNpZ25lZCBtX2F0dHJp
YnV0ZXM7CisgICAgSlNWYWx1ZSBtX3NwZWNpZmljVmFsdWU7CisgICAgUmVmUHRyPEludGVuZGVk
U3RydWN0dXJlQ2hhaW4+IG1fY2hhaW47Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIENvbXBsZXhHZXRTdGF0dXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAxNzA1NzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkFjY2Vzc29yQ2FsbEpJVFN0dWJS
b3V0aW5lLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29tcGxleEdldFN0
YXR1cy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1Njb3BlLmgiCiAj
aW5jbHVkZSAiTExJbnREYXRhLmgiCkBAIC0xNzYsODYgKzE3Nyw0OSBAQCBHZXRCeUlkU3RhdHVz
IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgIGZvciAodW5zaWduZWQgbGlzdElu
ZGV4ID0gMDsgbGlzdEluZGV4IDwgbGlzdC0+c2l6ZSgpOyArK2xpc3RJbmRleCkgewogICAgICAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBsaXN0LT5hdChsaXN0SW5kZXgpLnN0cnVjdHVy
ZSgpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFzc2Vy
dCB0aGF0IHdlIG5ldmVyIHNlZSBhIHN0cnVjdHVyZSB0aGF0Ci0gICAgICAgICAgICAvLyBoYXNJ
bXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSBidXQgZm9yIHdoaWNoIHdlIGRvbid0Ci0gICAgICAg
ICAgICAvLyBuZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKS4gV2UncmUgbm90IGF0
IGEgcG9pbnQgd2hlcmUgd2UgY2FuIGRvCi0gICAgICAgICAgICAvLyB0aGF0LCB5ZXQuCi0gICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxODEw
CisgICAgICAgICAgICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4
R2V0U3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIHN0
cnVjdHVyZSwgbGlzdC0+YXQobGlzdEluZGV4KS5jaGFpbigpLAorICAgICAgICAgICAgICAgIGxp
c3QtPmF0KGxpc3RJbmRleCkuY2hhaW5Db3VudCgpLCB1aWQpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAoc3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0
eSgpKQorICAgICAgICAgICAgc3dpdGNoIChjb21wbGV4R2V0U3RhdHVzLmtpbmQoKSkgeworICAg
ICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBDb21wbGV4
R2V0U3RhdHVzOjpUYWtlc1Nsb3dQYXRoOgogICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlk
U3RhdHVzKHNsb3dQYXRoU3RhdGUsIHRydWUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB1
bnNpZ25lZCBhdHRyaWJ1dGVzSWdub3JlZDsKLSAgICAgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNW
YWx1ZTsKLSAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG15T2Zmc2V0OwotICAgICAgICAgICAg
UmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWluOwotCi0gICAgICAgICAgICBpZiAo
bGlzdC0+YXQobGlzdEluZGV4KS5jaGFpbigpKSB7Ci0gICAgICAgICAgICAgICAgY2hhaW4gPSBh
ZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKLSAgICAgICAgICAgICAgICAgICAg
cHJvZmlsZWRCbG9jaywgc3RydWN0dXJlLCBsaXN0LT5hdChsaXN0SW5kZXgpLmNoYWluKCksCi0g
ICAgICAgICAgICAgICAgICAgIGxpc3QtPmF0KGxpc3RJbmRleCkuY2hhaW5Db3VudCgpKSk7CiAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFjaGFpbi0+aXNTdGlsbFZhbGlk
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB3b24ndCBldmVyIHJ1biBhZ2FpbiBz
byBza2lwIGl0LgotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGNh
c2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTogeworICAgICAgICAgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXM7CisgICAgICAgICAgICAg
ICAgc3dpdGNoIChsaXN0LT5hdChsaXN0SW5kZXgpLnR5cGUoKSkgeworICAgICAgICAgICAgICAg
IGNhc2UgR2V0QnlJZEFjY2Vzczo6U2ltcGxlSW5saW5lOgorICAgICAgICAgICAgICAgIGNhc2Ug
R2V0QnlJZEFjY2Vzczo6U2ltcGxlU3R1YjogeworICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYg
KHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKKyAgICAg
ICAgICAgICAgICBjYXNlIEdldEJ5SWRBY2Nlc3M6OkdldHRlcjogeworICAgICAgICAgICAgICAg
ICAgICBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSogc3R1YiA9IHN0YXRpY19jYXN0PEFjY2Vz
c29yQ2FsbEpJVFN0dWJSb3V0aW5lKj4oCisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0LT5h
dChsaXN0SW5kZXgpLnN0dWJSb3V0aW5lKCkpOworICAgICAgICAgICAgICAgICAgICBjYWxsTGlu
a1N0YXR1cyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtTdGF0dXM+KAorICAgICAgICAgICAg
ICAgICAgICAgICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IobG9ja2VyLCAqc3R1Yi0+bV9j
YWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vz
czo6Q3VzdG9tR2V0dGVyOiB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3Vs
ZCBiZSB0b3RhbGx5IHN3ZWV0IHRvIHN1cHBvcnQgdGhpcyBhdCBzb21lIHBvaW50IGluIHRoZSBm
dXR1cmUuCisgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzMwNTIKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRT
dGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgc2l6ZV90IGNoYWluU2l6ZSA9IGNoYWluLT5zaXplKCk7Ci0gICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGFpblNpemU7IGkrKykgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoY2hhaW4tPmF0KGkpLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0
eSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1Bh
dGhTdGF0ZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEpTT2Jq
ZWN0KiBjdXJyZW50T2JqZWN0ID0gY2hhaW4tPnRlcm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgICAg
ICAgICAgICAgU3RydWN0dXJlKiBjdXJyZW50U3RydWN0dXJlID0gY2hhaW4tPmxhc3QoKTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGN1cnJlbnRPYmpl
Y3QsIGN1cnJlbnRPYmplY3QpOworICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50IHZhcmlh
bnQoCisgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21wbGV4
R2V0U3RhdHVzLm9mZnNldCgpLAorICAgICAgICAgICAgICAgICAgICBjb21wbGV4R2V0U3RhdHVz
LnNwZWNpZmljVmFsdWUoKSwgY29tcGxleEdldFN0YXR1cy5jaGFpbigpLAorICAgICAgICAgICAg
ICAgICAgICBzdGQ6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBteU9mZnNldCA9IGN1cnJlbnRTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRs
eSgKLSAgICAgICAgICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmli
dXRlc0lnbm9yZWQsIHNwZWNpZmljVmFsdWUpOwotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50
U3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNW
YWx1ZSA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG15T2Zmc2V0
ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAgICAgICAgICpwcm9m
aWxlZEJsb2NrLT52bSgpLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsK
LSAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAg
ICAgICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChteU9mZnNldCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExp
bmtTdGF0dXM7Ci0gICAgICAgICAgICBzd2l0Y2ggKGxpc3QtPmF0KGxpc3RJbmRleCkudHlwZSgp
KSB7Ci0gICAgICAgICAgICBjYXNlIEdldEJ5SWRBY2Nlc3M6OlNpbXBsZUlubGluZToKLSAgICAg
ICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6U2ltcGxlU3R1YjogewotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBHZXRCeUlkQWNjZXNzOjpH
ZXR0ZXI6IHsKLSAgICAgICAgICAgICAgICBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSogc3R1
YiA9IHN0YXRpY19jYXN0PEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKj4oCi0gICAgICAgICAg
ICAgICAgICAgIGxpc3QtPmF0KGxpc3RJbmRleCkuc3R1YlJvdXRpbmUoKSk7Ci0gICAgICAgICAg
ICAgICAgY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rU3RhdHVzPigK
LSAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IobG9ja2VyLCAq
c3R1Yi0+bV9jYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0cnVlKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vz
czo6Q3VzdG9tR2V0dGVyOiB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJl
IHRvdGFsbHkgc3dlZXQgdG8gc3VwcG9ydCB0aGlzIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVy
ZS4KLSAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTMzMDUyCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1Bh
dGhTdGF0ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50IHZhcmlhbnQoCi0gICAg
ICAgICAgICAgICAgU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIG15T2Zmc2V0LCBzcGVjaWZpY1Zh
bHVlLCBjaGFpbi5nZXQoKSwKLSAgICAgICAgICAgICAgICBzdGQ6Om1vdmUoY2FsbExpbmtTdGF0
dXMpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFu
dCh2YXJpYW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0
aFN0YXRlLCB0cnVlKTsKKyAgICAgICAgICAgIH0gfQogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAxNzA1NzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Niw2ICs1Niw3IEBAIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCgKIEdldEJ5
SWRWYXJpYW50Ojp+R2V0QnlJZFZhcmlhbnQoKSB7IH0KIAogR2V0QnlJZFZhcmlhbnQ6OkdldEJ5
SWRWYXJpYW50KGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcikKKyAgICA6IEdldEJ5SWRWYXJp
YW50KCkKIHsKICAgICAqdGhpcyA9IG90aGVyOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCShyZXZp
c2lvbiAxNzA1NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNQdXRCeUlkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoK
ICAgICAKICAgICBQdXRCeUlkQWNjZXNzKCkKICAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKKyAg
ICAgICAgLCBtX2NoYWluQ291bnQoVUlOVF9NQVgpCiAgICAgewogICAgIH0KICAgICAKQEAgLTk1
LDYgKzk2LDcgQEAgcHVibGljOgogICAgICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAogICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4s
CisgICAgICAgIHVuc2lnbmVkIGNoYWluQ291bnQsCiAgICAgICAgIFB1dFByb3BlcnR5U2xvdDo6
UHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlciwKICAgICAgICAgUGFzc1JlZlB0cjxKSVRTdHViUm91
dGluZT4gc3R1YlJvdXRpbmUpCiAgICAgewpAQCAtMTAyLDggKzEwNCwxMCBAQCBwdWJsaWM6CiAg
ICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1
cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IGFj
Y2Vzc1R5cGU7Ci0gICAgICAgIGlmIChjaGFpbikKKyAgICAgICAgaWYgKGNoYWluKSB7CiAgICAg
ICAgICAgICByZXN1bHQubV9jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7CisgICAgICAgICAg
ICByZXN1bHQubV9jaGFpbkNvdW50ID0gY2hhaW5Db3VudDsKKyAgICAgICAgfQogICAgICAgICBy
ZXN1bHQubV9jdXN0b21TZXR0ZXIgPSBjdXN0b21TZXR0ZXI7CiAgICAgICAgIHJlc3VsdC5tX3N0
dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNDgs
NiArMTUyLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fY2hhaW4uZ2V0KCk7CiAgICAg
fQogICAgIAorICAgIHVuc2lnbmVkIGNoYWluQ291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7CisgICAgICAgIHJldHVybiBtX2NoYWlu
Q291bnQ7CisgICAgfQorICAgIAogICAgIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSgpIGNv
bnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNUcmFuc2l0aW9uKCkgfHwgaXNSZXBsYWNlKCkg
fHwgaXNTZXR0ZXIoKSB8fCBpc0N1c3RvbSgpKTsKQEAgLTE2OSw2ICsxNzksNyBAQCBwcml2YXRl
OgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2xkU3RydWN0dXJlOwogICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+IG1fbmV3U3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmVDaGFpbj4gbV9jaGFpbjsKKyAgICB1bnNpZ25lZCBtX2NoYWluQ291bnQ7CiAgICAgUHV0
UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgbV9jdXN0b21TZXR0ZXI7CiAgICAgUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE3MDU3MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNyArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKIAorI2luY2x1ZGUgIkFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0
aW5lLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29tcGxleEdldFN0YXR1
cy5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0
ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC05NywxMCArOTksMTEgQEAgUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogICAgIGlmICghaXNWYWxpZE9mZnNl
dChvZmZzZXQpKQogICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsK
ICAgICAKLSAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgIHN0
cnVjdHVyZSwgbmV3U3RydWN0dXJlLAotICAgICAgICBjaGFpbiA/IGFkb3B0UmVmKG5ldyBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluKHByb2ZpbGVkQmxvY2ssIHN0cnVjdHVyZSwgY2hhaW4pKSA6IDAs
Ci0gICAgICAgIG9mZnNldCk7CisgICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGlu
dGVuZGVkQ2hhaW47CisgICAgaWYgKGNoYWluKQorICAgICAgICBpbnRlbmRlZENoYWluID0gYWRv
cHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4ocHJvZmlsZWRCbG9jaywgc3RydWN0dXJl
LCBjaGFpbikpOworICAgIAorICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihz
dHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgaW50ZW5kZWRDaGFpbi5nZXQoKSwgb2Zmc2V0KTsKICNl
bHNlCiAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAjZW5kaWYKQEAg
LTExOSw3ICsxMjIsOSBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3Io
CiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIAogICAg
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29k
ZUluZGV4KSk7Ci0gICAgUHV0QnlJZFN0YXR1cyByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8o
bG9ja2VyLCBwcm9maWxlZEJsb2NrLCBzdHViSW5mbywgdWlkKTsKKyAgICBQdXRCeUlkU3RhdHVz
IHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJs
b2NrLCBzdHViSW5mbywgdWlkLAorICAgICAgICBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRT
aXRlRGF0YShsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKTsKICAgICBpZiAo
IXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywg
Ynl0ZWNvZGVJbmRleCwgdWlkKTsKICAgICAKQEAgLTEzMSw3ICsxMzYsOSBAQCBQdXRCeUlkU3Rh
dHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiB9CiAKICNpZiBFTkFCTEUoSklUKQotUHV0
QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3Vy
cmVudEpJVExvY2tlciYsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvLCBTdHJpbmdJbXBsKiB1aWQpCitQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3JTdHViSW5mbygKKyAgICBjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBs
b2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvLAorICAgIFN0cmluZ0ltcGwqIHVpZCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBj
YWxsRXhpdFNpdGVEYXRhKQogewogICAgIGlmICghc3R1YkluZm8gfHwgIXN0dWJJbmZvLT5zZWVu
KQogICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cygpOwpAQCAtMTU5LDEzICsxNjYsMTYgQEAg
UHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgc3R1
YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCiAg
ICAgICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCk7CiAgICAgICAgIGlmIChp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVj
dHVyZUNoYWluPiBjaGFpbjsKKyAgICAgICAgICAgIGlmIChzdHViSW5mby0+dS5wdXRCeUlkVHJh
bnNpdGlvbi5jaGFpbikgeworICAgICAgICAgICAgICAgIGNoYWluID0gYWRvcHRSZWYobmV3IElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4oCisgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ss
IHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLAor
ICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5n
ZXQoKSkpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50
Ojp0cmFuc2l0aW9uKAogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0
aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLAogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51
LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSwKLSAgICAgICAgICAgICAgICBzdHVi
SW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbiA/IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluKAotICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBzdHViSW5m
by0+dS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4uZ2V0KCkpKSA6
IDAsCi0gICAgICAgICAgICAgICAgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBjaGFpbi5nZXQo
KSwgb2Zmc2V0KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtl
c1Nsb3dQYXRoKTsKICAgICB9CkBAIC0xNzYsMTcgKzE4NiwzMiBAQCBQdXRCeUlkU3RhdHVzIFB1
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0Owog
ICAgICAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsKICAgICAgICAgCisgICAgICAgIFN0YXRl
IHNsb3dQYXRoU3RhdGUgPSBUYWtlc1Nsb3dQYXRoOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRB
Y2Nlc3MmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBz
d2l0Y2ggKGFjY2Vzcy50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6
U2V0dGVyOgorICAgICAgICAgICAgY2FzZSBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXI6Cisg
ICAgICAgICAgICAgICAgc2xvd1BhdGhTdGF0ZSA9IE1ha2VzQ2FsbHM7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IFB1dEJ5
SWRBY2Nlc3MmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOwogICAgICAgICAgICAgCisgICAgICAgICAg
ICBQdXRCeUlkVmFyaWFudCB2YXJpYW50OworICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0
Y2ggKGFjY2Vzcy50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6UmVw
bGFjZTogewogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0
cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KCpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQpOwogICAgICAg
ICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVy
ZSwgb2Zmc2V0KSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRh
a2VzU2xvd1BhdGgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhz
bG93UGF0aFN0YXRlKTsKKyAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6
OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMTk0LDcgKzIxOSw3IEBAIFB1dEJ5SWRT
dGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPQogICAgICAgICAgICAgICAgICAgICBhY2Nlc3MubmV3U3RydWN0dXJl
KCktPmdldENvbmN1cnJlbnRseSgqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkKTsKICAgICAgICAg
ICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwogICAgICAgICAgICAgICAgIFJl
ZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKICAgICAgICAgICAgICAgICBpZiAo
YWNjZXNzLmNoYWluKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2hhaW4gPSBhZG9wdFJlZihu
ZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKQEAgLTIwMiwxOSArMjI3LDQ4IEBAIFB1dEJ5SWRT
dGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICAgICAgaWYg
KCFjaGFpbi0+aXNTdGlsbFZhbGlkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYm9vbCBvayA9IHJlc3VsdC5h
cHBlbmRWYXJpYW50KFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAg
ICAgICBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY2hhaW4u
Z2V0KCksIG9mZnNldCkpOwotICAgICAgICAgICAgICAgIGlmICghb2spCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICAgICAg
ICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKKyAgICAgICAgICAgICAg
ICAgICAgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNoYWlu
LmdldCgpLCBvZmZzZXQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgY2FzZSBQdXRCeUlkQWNjZXNzOjpTZXR0ZXI6CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBjYXNlIFB1dEJ5SWRBY2Nlc3M6OlNldHRlcjogeworICAgICAgICAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIENvbXBsZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1
cyA9IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAgICAgICAgICAgICAgICAgIHBy
b2ZpbGVkQmxvY2ssIHN0cnVjdHVyZSwgYWNjZXNzLmNoYWluKCksIGFjY2Vzcy5jaGFpbkNvdW50
KCksIHVpZCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3dpdGNoIChjb21w
bGV4R2V0U3RhdHVzLmtpbmQoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0
YXR1czo6U2hvdWxkU2tpcDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6VGFr
ZXNTbG93UGF0aDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xv
d1BhdGhTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2Ug
Q29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTogeworICAgICAgICAgICAgICAgICAgICBBY2Nl
c3NvckNhbGxKSVRTdHViUm91dGluZSogc3R1YiA9IHN0YXRpY19jYXN0PEFjY2Vzc29yQ2FsbEpJ
VFN0dWJSb3V0aW5lKj4oCisgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3Muc3R1YlJvdXRp
bmUoKSk7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1
cz4gY2FsbExpbmtTdGF0dXMgPQorICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3Vu
aXF1ZTxDYWxsTGlua1N0YXR1cz4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbExp
bmtTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv
Y2tlciwgKnN0dWItPm1fY2FsbExpbmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKSk7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlh
bnQ6OnNldHRlcigKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdl
dFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0YXR1cy5zcGVjaWZpY1ZhbHVlKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb21wbGV4R2V0U3RhdHVzLmNoYWluKCksIHN0ZDo6bW92ZShj
YWxsTGlua1N0YXR1cykpOworICAgICAgICAgICAgICAgIH0gfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQ
dXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXI6CiAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoTWFrZXNDYWxscyk7CiAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7CiAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFu
dCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0yMzAsMTYg
KzI4NCwyMCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiB7CiAj
aWYgRU5BQkxFKERGR19KSVQpCiAgICAgaWYgKGRmZ0Jsb2NrKSB7CisgICAgICAgIENhbGxMaW5r
U3RhdHVzOjpFeGl0U2l0ZURhdGEgZXhpdFNpdGVEYXRhOwogICAgICAgICB7CiAgICAgICAgICAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihiYXNlbGluZUJsb2NrLT5tX2xvY2spOwogICAg
ICAgICAgICAgaWYgKGhhc0V4aXRTaXRlKGxvY2tlciwgYmFzZWxpbmVCbG9jaywgY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4LCBFeGl0RnJvbUZUTCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICBleGl0U2l0ZURhdGEgPSBD
YWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YSgKKyAgICAgICAgICAgICAgICBsb2Nr
ZXIsIGJhc2VsaW5lQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgRXhpdEZyb21GVEwp
OwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgUHV0QnlJZFN0YXR1cyByZXN1bHQ7
CiAgICAgICAgIHsKICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGRmZ0Js
b2NrLT5tX2xvY2spOwotICAgICAgICAgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKGxv
Y2tlciwgZGZnQmxvY2ssIGRmZ01hcC5nZXQoY29kZU9yaWdpbiksIHVpZCk7CisgICAgICAgICAg
ICByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCisgICAgICAgICAgICAgICAgbG9ja2VyLCBk
ZmdCbG9jaywgZGZnTWFwLmdldChjb2RlT3JpZ2luKSwgdWlkLCBleGl0U2l0ZURhdGEpOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBXZSB1c2UgVGFrZXNTbG93UGF0aCBpbiBzb21l
IGNhc2VzIHdoZXJlIHRoZSBzdHViIHdhcyB1bnNldC4gVGhhdCdzIHdlaXJkIGFuZApAQCAtMzQ1
LDcgKzQwMyw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAg
ICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgCiAgICAgICAgIGJvb2wg
ZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQoCi0gICAgICAgICAgICBQdXRCeUlkVmFy
aWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNoYWluLnJlbGVhc2UoKSwg
b2Zmc2V0KSk7CisgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1
cmUsIHRyYW5zaXRpb24sIGNoYWluLmdldCgpLCBvZmZzZXQpKTsKICAgICAgICAgaWYgKCFkaWRB
cHBlbmQpCiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsK
ICAgICB9CkBAIC0zNTMsNiArNDExLDIyIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvcigKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitib29sIFB1dEJ5SWRTdGF0dXM6
Om1ha2VzQ2FsbHMoKSBjb25zdAoreworICAgIGlmIChtX3N0YXRlID09IE1ha2VzQ2FsbHMpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmIChtX3N0YXRlICE9IFNpbXBsZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFyaWFu
dHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChtX3ZhcmlhbnRzW2ldLm1ha2VzQ2FsbHMo
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKIHZvaWQgUHV0QnlJZFN0YXR1czo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAogewogICAgIHN3aXRjaCAobV9zdGF0ZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCShyZXZpc2lvbiAxNzA1NzEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFB1dEJ5SWRTdGF0dXNfaAogI2RlZmluZSBQdXRC
eUlkU3RhdHVzX2gKIAorI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCiAjaW5jbHVkZSAiRXhp
dGluZ0pJVFR5cGUuaCIKICNpbmNsdWRlICJQdXRCeUlkVmFyaWFudC5oIgogI2luY2x1ZGUgIlN0
cnVjdHVyZVN0dWJJbmZvLmgiCkBAIC04MCw3ICs4MSw3IEBAIHB1YmxpYzoKICAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbjsgfQogICAg
IGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFNpbXBsZTsgfQogICAg
IGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gVGFrZXNTbG93
UGF0aCB8fCBtX3N0YXRlID09IE1ha2VzQ2FsbHM7IH0KLSAgICBib29sIG1ha2VzQ2FsbHMoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlID09IE1ha2VzQ2FsbHM7IH0KKyAgICBib29sIG1ha2VzQ2Fs
bHMoKSBjb25zdDsKICAgICAKICAgICBzaXplX3QgbnVtVmFyaWFudHMoKSBjb25zdCB7IHJldHVy
biBtX3ZhcmlhbnRzLnNpemUoKTsgfQogICAgIGNvbnN0IFZlY3RvcjxQdXRCeUlkVmFyaWFudCwg
MT4mIHZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50czsgfQpAQCAtOTQsNyArOTUs
OSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIGhhc0V4aXRTaXRlKGNvbnN0IENvbmN1cnJl
bnRKSVRMb2NrZXImLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBFeGl0aW5n
SklUVHlwZSA9IEV4aXRGcm9tQW55dGhpbmcpOwogI2VuZGlmCiAjaWYgRU5BQkxFKEpJVCkKLSAg
ICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVu
dEpJVExvY2tlciYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RyaW5nSW1wbCog
dWlkKTsKKyAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oCisgICAg
ICAgIGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHVi
SW5mbyosIFN0cmluZ0ltcGwqIHVpZCwKKyAgICAgICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRl
RGF0YSk7CiAjZW5kaWYKICAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRnJvbUxMSW50
KENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFN0cmluZ0ltcGwqIHVpZCk7CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
VmFyaWFudC5jcHAJKHJldmlzaW9uIDE3MDU3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiw3
NCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50LmgiCiAK
KyNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNp
bmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKK1B1dEJ5SWRWYXJp
YW50OjpQdXRCeUlkVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCisgICAgOiBQ
dXRCeUlkVmFyaWFudCgpCit7CisgICAgKnRoaXMgPSBvdGhlcjsKK30KKworUHV0QnlJZFZhcmlh
bnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcj0oY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVy
KQoreworICAgIG1fa2luZCA9IG90aGVyLm1fa2luZDsKKyAgICBtX29sZFN0cnVjdHVyZSA9IG90
aGVyLm1fb2xkU3RydWN0dXJlOworICAgIG1fbmV3U3RydWN0dXJlID0gb3RoZXIubV9uZXdTdHJ1
Y3R1cmU7CisgICAgbV9jb25zdGFudENoZWNrcyA9IG90aGVyLm1fY29uc3RhbnRDaGVja3M7Cisg
ICAgbV9hbHRlcm5hdGVCYXNlID0gb3RoZXIubV9hbHRlcm5hdGVCYXNlOworICAgIG1fc3BlY2lm
aWNWYWx1ZSA9IG90aGVyLm1fc3BlY2lmaWNWYWx1ZTsKKyAgICBtX29mZnNldCA9IG90aGVyLm1f
b2Zmc2V0OworICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQorICAgICAgICBtX2NhbGxM
aW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2Fs
bExpbmtTdGF0dXMpOworICAgIGVsc2UKKyAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IG51bGxw
dHI7CisgICAgcmV0dXJuICp0aGlzOworfQorCitQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFu
dDo6cmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQoreworICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKKyAgICByZXN1bHQubV9raW5k
ID0gUmVwbGFjZTsKKyAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAg
cmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1B1dEJ5
SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAorICAgIGNvbnN0IFN0cnVjdHVy
ZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKKyAgICBjb25zdCBJ
bnRlbmRlZFN0cnVjdHVyZUNoYWluKiBzdHJ1Y3R1cmVDaGFpbiwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KQoreworICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKKyAgICByZXN1bHQubV9raW5kID0g
VHJhbnNpdGlvbjsKKyAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmU7Cisg
ICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOworICAgIGlmIChzdHJ1Y3R1
cmVDaGFpbikKKyAgICAgICAgc3RydWN0dXJlQ2hhaW4tPmdhdGhlckNoZWNrcyhyZXN1bHQubV9j
b25zdGFudENoZWNrcyk7CisgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK1B1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCisg
ICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwg
SlNWYWx1ZSBzcGVjaWZpY1ZhbHVlLAorICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWlu
LCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQoreworICAg
IFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKKyAgICByZXN1bHQubV9raW5kID0gU2V0dGVyOworICAg
IHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBpZiAoY2hhaW4pIHsKKyAg
ICAgICAgY2hhaW4tPmdhdGhlckNoZWNrcyhyZXN1bHQubV9jb25zdGFudENoZWNrcyk7CisgICAg
ICAgIHJlc3VsdC5tX2FsdGVybmF0ZUJhc2UgPSBjaGFpbi0+dGVybWluYWxQcm90b3R5cGUoKTsK
KyAgICB9CisgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3VsdC5tX3NwZWNp
ZmljVmFsdWUgPSBzcGVjaWZpY1ZhbHVlOworICAgIHJlc3VsdC5tX2NhbGxMaW5rU3RhdHVzID0g
c3RkOjptb3ZlKGNhbGxMaW5rU3RhdHVzKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBTdHJ1
Y3R1cmUqIFB1dEJ5SWRWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkgY29uc3QK
IHsKICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOwpAQCAtNDQsMTggKzEwOCwzMCBA
QCBTdHJ1Y3R1cmUqIFB1dEJ5SWRWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGCiAKIGJvb2wgUHV0QnlJ
ZFZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMoKSBjb25zdAogewotICAgIHJldHVybiBraW5kKCkg
PT0gVHJhbnNpdGlvbjsKKyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgVHJhbnNpdGlv
bjoKKyAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIH0KIAogYm9vbCBQdXRCeUlkVmFyaWFudDo6
cmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3QKIHsKLSAgICBpZiAoa2luZCgpICE9IFRyYW5zaXRp
b24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAob2xkU3RydWN0dXJlRm9y
VHJhbnNpdGlvbigpLT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IG5ld1N0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKQorICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBUcmFuc2l0
aW9uOgorICAgICAgICByZXR1cm4gb2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpICE9IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAg
IGNhc2UgU2V0dGVyOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCitib29s
IFB1dEJ5SWRWYXJpYW50OjptYWtlc0NhbGxzKCkgY29uc3QKK3sKKyAgICByZXR1cm4ga2luZCgp
ID09IFNldHRlcjsKIH0KIAogYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29u
c3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQpAQCAtMTM3LDE0ICsyMTMsMjcgQEAgdm9pZCBQdXRC
eUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludAogICAgICAgICAKICAgICBjYXNlIFJlcGxh
Y2U6CiAgICAgICAgIG91dC5wcmludCgKLSAgICAgICAgICAgICI8UmVwbGFjZTogIiwgaW5Db250
ZXh0KHN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgIiwgb2Zmc2V0KCksICI+Iik7CisgICAgICAg
ICAgICAiPFJlcGxhY2U6ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIG9m
ZnNldCA9ICIsIG9mZnNldCgpLCAiPiIpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAg
IGNhc2UgVHJhbnNpdGlvbjoKICAgICAgICAgb3V0LnByaW50KAogICAgICAgICAgICAgIjxUcmFu
c2l0aW9uOiAiLCBpbkNvbnRleHQob2xkU3RydWN0dXJlKCksIGNvbnRleHQpLCAiIC0+ICIsCiAg
ICAgICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCks
ICIsIFsiLAotICAgICAgICAgICAgbGlzdER1bXBJbkNvbnRleHQoY29uc3RhbnRDaGVja3MoKSwg
Y29udGV4dCksICJdLCAiLCBvZmZzZXQoKSwgIj4iKTsKKyAgICAgICAgICAgIGxpc3REdW1wSW5D
b250ZXh0KGNvbnN0YW50Q2hlY2tzKCksIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0
KCksICI+Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTZXR0ZXI6Cisg
ICAgICAgIG91dC5wcmludCgKKyAgICAgICAgICAgICI8U2V0dGVyOiAiLCBpbkNvbnRleHQoc3Ry
dWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKKyAgICAgICAgICAgIGxpc3REdW1wSW5Db250ZXh0
KGNvbnN0YW50Q2hlY2tzKCksIGNvbnRleHQpLCAiXSIpOworICAgICAgICBpZiAobV9hbHRlcm5h
dGVCYXNlKQorICAgICAgICAgICAgb3V0LnByaW50KCIsIGFsdGVybmF0ZUJhc2UgPSAiLCBpbkNv
bnRleHQoSlNWYWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250ZXh0KSk7CisgICAgICAgIGlmICht
X3NwZWNpZmljVmFsdWUpCisgICAgICAgICAgICBvdXQucHJpbnQoIiwgc3BlY2lmaWNWYWx1ZSA9
ICIsIGluQ29udGV4dChtX3NwZWNpZmljVmFsdWUsIGNvbnRleHQpKTsKKyAgICAgICAgb3V0LnBy
aW50KCIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKKyAgICAgICAgb3V0LnByaW50KCIsIGNhbGwg
PSAiLCAqbV9jYWxsTGlua1N0YXR1cyk7CisgICAgICAgIG91dC5wcmludCgiPiIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDE3MDU3MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiwxMiArMzIsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIENhbGxMaW5rU3Rh
dHVzOworCiBjbGFzcyBQdXRCeUlkVmFyaWFudCB7CiBwdWJsaWM6CiAgICAgZW51bSBLaW5kIHsK
ICAgICAgICAgTm90U2V0LAogICAgICAgICBSZXBsYWNlLAotICAgICAgICBUcmFuc2l0aW9uCisg
ICAgICAgIFRyYW5zaXRpb24sCisgICAgICAgIFNldHRlcgogICAgIH07CiAgICAgCiAgICAgUHV0
QnlJZFZhcmlhbnQoKQpAQCAtNDcsMjggKzUwLDE5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQog
ICAgIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCByZXBsYWNlKGNvbnN0IFN0cnVjdHVyZVNl
dCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCi0gICAgewotICAgICAgICBQdXRC
eUlkVmFyaWFudCByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX2tpbmQgPSBSZXBsYWNlOwotICAg
ICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIHJlc3VsdC5t
X29mZnNldCA9IG9mZnNldDsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgUHV0
QnlJZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKKyAgICBQdXRCeUlkVmFyaWFudCYg
b3BlcmF0b3I9KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7CisKKyAgICBzdGF0aWMgUHV0QnlJZFZh
cmlhbnQgcmVwbGFjZSgKKyAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCk7CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHRy
YW5zaXRpb24oCiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgUGFzc1JlZlB0cjxJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluPiBzdHJ1Y3R1cmVDaGFpbiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotICAgIHsKLSAg
ICAgICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwotICAgICAgICByZXN1bHQubV9raW5kID0gVHJh
bnNpdGlvbjsKLSAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlOwot
ICAgICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7Ci0gICAgICAgIGlm
IChzdHJ1Y3R1cmVDaGFpbikKLSAgICAgICAgICAgIHN0cnVjdHVyZUNoYWluLT5nYXRoZXJDaGVj
a3MocmVzdWx0Lm1fY29uc3RhbnRDaGVja3MpOwotICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBv
ZmZzZXQ7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgICAgICBjb25zdCBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluKiBzdHJ1Y3R1cmVDaGFpbiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KTsKKyAgICAKKyAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgc2V0dGVyKAorICAgICAgICBjb25z
dCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBKU1ZhbHVl
IHNwZWNpZmljVmFsdWUsCisgICAgICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBz
dGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKTsKICAgICAKICAg
ICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KICAgICAKQEAgLTc3LDE5ICs3
MSwxOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUo
KSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBSZXBsYWNlKTsKKyAgICAg
ICAgQVNTRVJUKGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOwogICAgICAg
ICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7CiAgICAgfQogICAgIAogICAgIGNvbnN0IFN0cnVjdHVy
ZVNldCYgb2xkU3RydWN0dXJlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkg
PT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVwbGFjZSk7CisgICAgICAgIEFTU0VSVChraW5k
KCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVy
KTsKICAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOwogICAgIH0KICAgICAKICAgICBTdHJ1
Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpCiAgICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09
IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2UpOworICAgICAgICBBU1NFUlQoa2luZCgp
ID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7
CiAgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKICAgICB9CiAgICAgCkBAIC0xMDMsNiAr
OTcsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIHdyaXRlc1N0cnVjdHVyZXMoKSBjb25zdDsKICAg
ICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OworICAgIGJvb2wgbWFrZXNDYWxscygp
IGNvbnN0OwogICAgIAogICAgIGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGNv
bnN0YW50Q2hlY2tzKCkgY29uc3QKICAgICB7CkBAIC0xMTUsNiArMTEwLDI0IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OwogICAgIH0KICAgICAKKyAgICBKU09iamVjdCogYWx0
ZXJuYXRlQmFzZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFNldHRl
cik7CisgICAgICAgIHJldHVybiBtX2FsdGVybmF0ZUJhc2U7CisgICAgfQorICAgIAorICAgIEpT
VmFsdWUgc3BlY2lmaWNWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgp
ID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX3NwZWNpZmljVmFsdWU7CisgICAgfQorICAg
IAorICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX2NhbGxMaW5r
U3RhdHVzLmdldCgpOworICAgIH0KKwogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0
QnlJZFZhcmlhbnQmIG90aGVyKTsKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKQEAgLTEyNyw3ICsxNDAsMTAgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmVTZXQgbV9v
bGRTdHJ1Y3R1cmU7CiAgICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZTsKICAgICBDb25zdGFu
dFN0cnVjdHVyZUNoZWNrVmVjdG9yIG1fY29uc3RhbnRDaGVja3M7CisgICAgSlNPYmplY3QqIG1f
YWx0ZXJuYXRlQmFzZTsKKyAgICBKU1ZhbHVlIG1fc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0
eU9mZnNldCBtX29mZnNldDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1f
Y2FsbExpbmtTdGF0dXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAx
NzA1NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDYgKzE3MSwxMCBAQCBwcml2YXRlOgogICAgIC8vIEhh
bmRsZSBjYWxscy4gVGhpcyByZXNvbHZlcyBpc3N1ZXMgc3Vycm91bmRpbmcgaW5saW5pbmcgYW5k
IGludHJpbnNpY3MuCiAgICAgdm9pZCBoYW5kbGVDYWxsKAogICAgICAgICBpbnQgcmVzdWx0LCBO
b2RlVHlwZSBvcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCB1bnNpZ25lZCBpbnN0cnVjdGlvblNp
emUsCisgICAgICAgIE5vZGUqIGNhbGxUYXJnZXQsIGludCBhcmdDb3VudCwgaW50IHJlZ2lzdGVy
T2Zmc2V0LCBDYWxsTGlua1N0YXR1cywKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
bik7CisgICAgdm9pZCBoYW5kbGVDYWxsKAorICAgICAgICBpbnQgcmVzdWx0LCBOb2RlVHlwZSBv
cCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCB1bnNpZ25lZCBpbnN0cnVjdGlvblNpemUsCiAgICAg
ICAgIE5vZGUqIGNhbGxUYXJnZXQsIGludCBhcmdDb3VudCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBD
YWxsTGlua1N0YXR1cyk7CiAgICAgdm9pZCBoYW5kbGVDYWxsKGludCByZXN1bHQsIE5vZGVUeXBl
IG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCB1bnNpZ25lZCBpbnN0cnVjdGlvblNpemUsIGlu
dCBjYWxsZWUsIGludCBhcmdDb3VudCwgaW50IHJlZ2lzdGVyT2Zmc2V0KTsKICAgICB2b2lkIGhh
bmRsZUNhbGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCk7CkBAIC02NDAsMTAgKzY0NCwxMCBAQCBwcml2YXRlOgogICAgICAgICBtX251bVBhc3Nl
ZFZhckFyZ3MrKzsKICAgICB9CiAgICAgCi0gICAgTm9kZSogYWRkQ2FsbChpbnQgcmVzdWx0LCBO
b2RlVHlwZSBvcCwgTm9kZSogY2FsbGVlLCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNl
dCkKKyAgICBOb2RlKiBhZGRDYWxsV2l0aG91dFNldHRpbmdSZXN1bHQoCisgICAgICAgIE5vZGVU
eXBlIG9wLCBOb2RlKiBjYWxsZWUsIGludCBhcmdDb3VudCwgaW50IHJlZ2lzdGVyT2Zmc2V0LAor
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQogICAgIHsKLSAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKLSAgICAgICAgCiAgICAgICAg
IGFkZFZhckFyZ0NoaWxkKGNhbGxlZSk7CiAgICAgICAgIHNpemVfdCBwYXJhbWV0ZXJTbG90cyA9
IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBD
U2l6ZSArIGFyZ0NvdW50OwogICAgICAgICBpZiAocGFyYW1ldGVyU2xvdHMgPiBtX3BhcmFtZXRl
clNsb3RzKQpAQCAtNjUzLDggKzY1NywxOCBAQCBwcml2YXRlOgogICAgICAgICBmb3IgKGludCBp
ID0gMCArIGR1bW15VGhpc0FyZ3VtZW50OyBpIDwgYXJnQ291bnQ7ICsraSkKICAgICAgICAgICAg
IGFkZFZhckFyZ0NoaWxkKGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpLCByZWdpc3Rl
ck9mZnNldCkpKTsKIAotICAgICAgICBOb2RlKiBjYWxsID0gYWRkVG9HcmFwaChOb2RlOjpWYXJB
cmcsIG9wLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSk7Ci0gICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0KSwgY2FsbCk7CisgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKE5v
ZGU6OlZhckFyZywgb3AsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pKTsKKyAgICB9Cisg
ICAgCisgICAgTm9kZSogYWRkQ2FsbCgKKyAgICAgICAgaW50IHJlc3VsdCwgTm9kZVR5cGUgb3As
IE5vZGUqIGNhbGxlZSwgaW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsCisgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCisgICAgeworICAgICAgICBOb2RlKiBjYWxsID0g
YWRkQ2FsbFdpdGhvdXRTZXR0aW5nUmVzdWx0KAorICAgICAgICAgICAgb3AsIGNhbGxlZSwgYXJn
Q291bnQsIHJlZ2lzdGVyT2Zmc2V0LCBwcmVkaWN0aW9uKTsKKyAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFJlZyhyZXN1bHQpOworICAgICAgICBpZiAocmVzdWx0UmVnLmlzVmFsaWQoKSkK
KyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KSwgY2FsbCk7CiAgICAgICAg
IHJldHVybiBjYWxsOwogICAgIH0KICAgICAKQEAgLTk5Miw2ICsxMDA2LDE2IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgTm9kZSogY2FsbFRhcmdldCwgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBpbnQgcmVnaXN0ZXJPZmZzZXQsCiAgICAgQ2FsbExpbmtT
dGF0dXMgY2FsbExpbmtTdGF0dXMpCiB7CisgICAgaGFuZGxlQ2FsbCgKKyAgICAgICAgcmVzdWx0
LCBvcCwga2luZCwgaW5zdHJ1Y3Rpb25TaXplLCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcywKKyAgICAgICAgcmVnaXN0ZXJPZmZzZXQsIGNhbGxMaW5rU3RhdHVzLCBnZXRQ
cmVkaWN0aW9uKCkpOworfQorCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAorICAg
IGludCByZXN1bHQsIE5vZGVUeXBlIG9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgdW5z
aWduZWQgaW5zdHJ1Y3Rpb25TaXplLAorICAgIE5vZGUqIGNhbGxUYXJnZXQsIGludCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgaW50IHJlZ2lzdGVyT2Zmc2V0LAorICAgIENhbGxMaW5rU3Rh
dHVzIGNhbGxMaW5rU3RhdHVzLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQorewogICAgIEFT
U0VSVChyZWdpc3Rlck9mZnNldCA8PSAwKTsKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNw
ZWNpYWxpemF0aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9y
KGtpbmQpOwogICAgIApAQCAtMTAwMiwxMiArMTAyNiwxMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVDYWxsKAogICAgICAgICAvLyBPZGRseSwgdGhpcyBjb25mbGF0ZXMgY2FsbHMgdGhh
dCBoYXZlbid0IGV4ZWN1dGVkIHdpdGggY2FsbHMgdGhhdCBiZWhhdmVkIHN1ZmZpY2llbnRseSBw
b2x5bW9ycGhpY2FsbHkKICAgICAgICAgLy8gdGhhdCB3ZSBjYW5ub3Qgb3B0aW1pemUgdGhlbS4K
ICAgICAgICAgCi0gICAgICAgIGFkZENhbGwocmVzdWx0LCBvcCwgY2FsbFRhcmdldCwgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgYWRkQ2FsbChy
ZXN1bHQsIG9wLCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0
ZXJPZmZzZXQsIHByZWRpY3Rpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAg
IHVuc2lnbmVkIG5leHRPZmZzZXQgPSBtX2N1cnJlbnRJbmRleCArIGluc3RydWN0aW9uU2l6ZTsK
LSAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOwogCiAgICAg
aWYgKEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gY2FsbExpbmtTdGF0dXMuaW50ZXJuYWxG
dW5jdGlvbigpKSB7CiAgICAgICAgIGlmIChoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24o
cmVzdWx0LCBmdW5jdGlvbiwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzLCBwcmVkaWN0aW9uLCBzcGVjaWFsaXphdGlvbktpbmQpKSB7CkBAIC0xMDE5LDcgKzEwNDIs
NyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICAvLyBDYW4gb25seSBoYW5kbGUgdGhpcyB1c2luZyB0aGUgZ2VuZXJpYyBjYWxs
IGhhbmRsZXIuCi0gICAgICAgIGFkZENhbGwocmVzdWx0LCBvcCwgY2FsbFRhcmdldCwgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgYWRkQ2FsbChy
ZXN1bHQsIG9wLCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0
ZXJPZmZzZXQsIHByZWRpY3Rpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAK
QEAgLTEwNTYsNyArMTA3OSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgTm9kZSogY2FsbCA9IGFkZENhbGwo
cmVzdWx0LCBvcCwgY2FsbFRhcmdldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHJlZ2lz
dGVyT2Zmc2V0KTsKKyAgICBOb2RlKiBjYWxsID0gYWRkQ2FsbChyZXN1bHQsIG9wLCBjYWxsVGFy
Z2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQsIHByZWRpY3Rp
b24pOwogCiAgICAgaWYgKGtub3duRnVuY3Rpb24pIAogICAgICAgICBjYWxsLT5naXZlS25vd25G
dW5jdGlvbihrbm93bkZ1bmN0aW9uKTsKQEAgLTE3NTcsNyArMTc4MCw4IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgICAgIGxvYWRlZFZhbHVlID0gd2Vha0pTQ29u
c3RhbnQodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpOwogICAgIGVsc2UgewogICAgICAgICBsb2Fk
ZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAotICAgICAgICAgICAgcHJlZGljdGlvbiwgYmFz
ZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwKKyAgICAgICAgICAgIHZhcmlh
bnQuY2FsbExpbmtTdGF0dXMoKSA/IFNwZWNDZWxsT3RoZXIgOiBwcmVkaWN0aW9uLAorICAgICAg
ICAgICAgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwKICAgICAgICAg
ICAgIHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSA/IEdldEdldHRlclNldHRlckJ5T2Zmc2V0IDog
R2V0QnlPZmZzZXQpOwogICAgIH0KICAgICAKQEAgLTE4MDEsNyArMTgyNSw3IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgCiAgICAgaGFuZGxlQ2FsbCgKICAgICAg
ICAgZGVzdGluYXRpb25PcGVyYW5kLCBDYWxsLCBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGws
IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X2lkKSwKLSAgICAgICAgZ2V0dGVyLCBudW1iZXJPZlBh
cmFtZXRlcnMgLSAxLCByZWdpc3Rlck9mZnNldCwgKnZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSk7
CisgICAgICAgIGdldHRlciwgbnVtYmVyT2ZQYXJhbWV0ZXJzIC0gMSwgcmVnaXN0ZXJPZmZzZXQs
ICp2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCksIHByZWRpY3Rpb24pOwogfQogCiB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjplbWl0UHV0QnlJZCgKQEAgLTE4NTIsNyArMTg3Niw4IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgQVNTRVJUKHB1dEJ5SWRTdGF0dXMubnVtVmFy
aWFudHMoKSA9PSAxKTsKICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IHB1dEJ5
SWRTdGF0dXNbMF07CiAgICAgCi0gICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJp
YW50OjpSZXBsYWNlKSB7CisgICAgc3dpdGNoICh2YXJpYW50LmtpbmQoKSkgeworICAgIGNhc2Ug
UHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2U6IHsKICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVj
dHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0dXJlKCkp
KSwgYmFzZSk7CiAgICAgICAgIGhhbmRsZVB1dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXJOdW1i
ZXIsIHZhcmlhbnQub2Zmc2V0KCksIHZhbHVlKTsKICAgICAgICAgaWYgKG1fZ3JhcGguY29tcGls
YXRpb24oKSkKQEAgLTE4NjAsNTcgKzE4ODUsMTE2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZVB1dEJ5SWQoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKHZhcmlh
bnQua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7Ci0gICAgICAgIGVtaXRQ
dXRCeUlkKGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0Rp
cmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6
VHJhbnNpdGlvbjogeworICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8o
bV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsK
KyAgICAgICAgZW1pdENoZWNrcyh2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkpOwogCi0gICAgYWRk
VG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZh
cmlhbnQub2xkU3RydWN0dXJlKCkpKSwgYmFzZSk7Ci0gICAgZW1pdENoZWNrcyh2YXJpYW50LmNv
bnN0YW50Q2hlY2tzKCkpOwotCi0gICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJh
bnNpdGlvbigpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsK
KyAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50cmFu
c2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKICAgICAKLSAgICBOb2Rl
KiBwcm9wZXJ0eVN0b3JhZ2U7Ci0gICAgVHJhbnNpdGlvbiogdHJhbnNpdGlvbiA9IG1fZ3JhcGgu
bV90cmFuc2l0aW9ucy5hZGQoCi0gICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNp
dGlvbigpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKKyAgICAgICAgTm9kZSogcHJvcGVydHlT
dG9yYWdlOworICAgICAgICBUcmFuc2l0aW9uKiB0cmFuc2l0aW9uID0gbV9ncmFwaC5tX3RyYW5z
aXRpb25zLmFkZCgKKyAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlv
bigpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKIAotICAgIGlmICh2YXJpYW50LnJlYWxsb2Nh
dGVzU3RvcmFnZSgpKSB7CisgICAgICAgIGlmICh2YXJpYW50LnJlYWxsb2NhdGVzU3RvcmFnZSgp
KSB7CiAKLSAgICAgICAgLy8gSWYgd2UncmUgZ3Jvd2luZyB0aGUgcHJvcGVydHkgc3RvcmFnZSB0
aGVuIGl0IG11c3QgYmUgYmVjYXVzZSB3ZSdyZQotICAgICAgICAvLyBzdG9yaW5nIGludG8gdGhl
IG91dC1vZi1saW5lIHN0b3JhZ2UuCi0gICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQodmFy
aWFudC5vZmZzZXQoKSkpOwotCi0gICAgICAgIGlmICghdmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JU
cmFuc2l0aW9uKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgIHByb3BlcnR5
U3RvcmFnZSA9IGFkZFRvR3JhcGgoCi0gICAgICAgICAgICAgICAgQWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2UsIE9wSW5mbyh0cmFuc2l0aW9uKSwgYmFzZSk7CisgICAgICAgICAgICAvLyBJZiB3ZSdy
ZSBncm93aW5nIHRoZSBwcm9wZXJ0eSBzdG9yYWdlIHRoZW4gaXQgbXVzdCBiZSBiZWNhdXNlIHdl
J3JlCisgICAgICAgICAgICAvLyBzdG9yaW5nIGludG8gdGhlIG91dC1vZi1saW5lIHN0b3JhZ2Uu
CisgICAgICAgICAgICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKTsK
KworICAgICAgICAgICAgaWYgKCF2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9
IGFkZFRvR3JhcGgoCisgICAgICAgICAgICAgICAgICAgIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
LCBPcEluZm8odHJhbnNpdGlvbiksIGJhc2UpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKAorICAgICAgICAgICAgICAg
ICAgICBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBPcEluZm8odHJhbnNpdGlvbiksCisgICAg
ICAgICAgICAgICAgICAgIGJhc2UsIGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKSk7Cisg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwcm9wZXJ0eVN0b3Jh
Z2UgPSBhZGRUb0dyYXBoKAotICAgICAgICAgICAgICAgIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UsIE9wSW5mbyh0cmFuc2l0aW9uKSwKLSAgICAgICAgICAgICAgICBiYXNlLCBhZGRUb0dyYXBo
KEdldEJ1dHRlcmZseSwgYmFzZSkpOworICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHZh
cmlhbnQub2Zmc2V0KCkpKQorICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRk
VG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2UpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQotICAgICAgICAgICAg
cHJvcGVydHlTdG9yYWdlID0gYmFzZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcHJvcGVy
dHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2UpOwotICAgIH0KLQotICAg
IGFkZFRvR3JhcGgoUHV0U3RydWN0dXJlLCBPcEluZm8odHJhbnNpdGlvbiksIGJhc2UpOwogCi0g
ICAgYWRkVG9HcmFwaCgKLSAgICAgICAgUHV0QnlPZmZzZXQsCi0gICAgICAgIE9wSW5mbyhtX2dy
YXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpKSwKLSAgICAgICAgcHJvcGVydHlTdG9yYWdl
LAotICAgICAgICBiYXNlLAotICAgICAgICB2YWx1ZSk7CisgICAgICAgIGFkZFRvR3JhcGgoUHV0
U3RydWN0dXJlLCBPcEluZm8odHJhbnNpdGlvbiksIGJhc2UpOwogCi0gICAgU3RvcmFnZUFjY2Vz
c0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7Ci0gICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ID0g
dmFyaWFudC5vZmZzZXQoKTsKLSAgICBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVy
ID0gaWRlbnRpZmllck51bWJlcjsKLSAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYXBw
ZW5kKHN0b3JhZ2VBY2Nlc3NEYXRhKTsKKyAgICAgICAgYWRkVG9HcmFwaCgKKyAgICAgICAgICAg
IFB1dEJ5T2Zmc2V0LAorICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNz
RGF0YS5zaXplKCkpLAorICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlLAorICAgICAgICAgICAg
YmFzZSwKKyAgICAgICAgICAgIHZhbHVlKTsKKworICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBz
dG9yYWdlQWNjZXNzRGF0YTsKKyAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ID0gdmFy
aWFudC5vZmZzZXQoKTsKKyAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJl
ciA9IGlkZW50aWZpZXJOdW1iZXI7CisgICAgICAgIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0
YS5hcHBlbmQoc3RvcmFnZUFjY2Vzc0RhdGEpOwogCi0gICAgaWYgKG1fZ3JhcGguY29tcGlsYXRp
b24oKSkKLSAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJ
ZCgpOworICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQorICAgICAgICAgICAgbV9n
cmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpTZXR0ZXI6IHsK
KyAgICAgICAgTm9kZSogb3JpZ2luYWxCYXNlID0gYmFzZTsKKyAgICAgICAgCisgICAgICAgIGFk
ZFRvR3JhcGgoCisgICAgICAgICAgICBDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRk
U3RydWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0dXJlKCkpKSwgYmFzZSk7CisgICAgICAgIAorICAg
ICAgICBlbWl0Q2hlY2tzKHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSk7CisgICAgICAgIAorICAg
ICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCisgICAgICAgICAgICBiYXNlID0gd2Vh
a0pTQ29uc3RhbnQodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpOworICAgICAgICAKKyAgICAgICAg
Tm9kZSogbG9hZGVkVmFsdWU7CisgICAgICAgIGlmICh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSkK
KyAgICAgICAgICAgIGxvYWRlZFZhbHVlID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5zcGVjaWZp
Y1ZhbHVlKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGxvYWRlZFZhbHVlID0gaGFu
ZGxlR2V0QnlPZmZzZXQoCisgICAgICAgICAgICAgICAgU3BlY0NlbGxPdGhlciwgYmFzZSwgaWRl
bnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwKKyAgICAgICAgICAgICAgICBHZXRHZXR0
ZXJTZXR0ZXJCeU9mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE5vZGUqIHNl
dHRlciA9IGFkZFRvR3JhcGgoR2V0U2V0dGVyLCBsb2FkZWRWYWx1ZSk7CisgICAgICAgIAorICAg
ICAgICAvLyBNYWtlIGEgY2FsbC4gV2UgZG9uJ3QgdHJ5IHRvIGdldCBmYW5jeSB3aXRoIHVzaW5n
IHRoZSBzbWFsbGVzdCBvcGVyYW5kIG51bWJlciBiZWNhdXNlCisgICAgICAgIC8vIHRoZSBzdGFj
ayBsYXlvdXQgcGhhc2Ugc2hvdWxkIGNvbXByZXNzIHRoZSBzdGFjayBhbnl3YXkuCisgICAgCisg
ICAgICAgIHVuc2lnbmVkIG51bWJlck9mUGFyYW1ldGVycyA9IDA7CisgICAgICAgIG51bWJlck9m
UGFyYW1ldGVycysrOyAvLyBUaGUgJ3RoaXMnIGFyZ3VtZW50LgorICAgICAgICBudW1iZXJPZlBh
cmFtZXRlcnMrKzsgLy8gVGhlIG5ldyB2YWx1ZS4KKyAgICAgICAgbnVtYmVyT2ZQYXJhbWV0ZXJz
Kys7IC8vIFRydWUgcmV0dXJuIFBDLgorICAgIAorICAgICAgICAvLyBTdGFydCB3aXRoIGEgcmVn
aXN0ZXIgb2Zmc2V0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGxhc3QgaW4tdXNlIHJlZ2lzdGVy
LgorICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgK
KyAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9udW1DYWxs
ZWVSZWdpc3RlcnMgLSAxKS5vZmZzZXQoKTsKKyAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0gbnVt
YmVyT2ZQYXJhbWV0ZXJzOworICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBKU1N0YWNrOjpDYWxs
RnJhbWVIZWFkZXJTaXplOworICAgIAorICAgICAgICAvLyBHZXQgdGhlIGFsaWdubWVudCByaWdo
dC4KKyAgICAgICAgcmVnaXN0ZXJPZmZzZXQgPSAtV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKAor
ICAgICAgICAgICAgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIC1yZWdp
c3Rlck9mZnNldCk7CisgICAgCisgICAgICAgIGVuc3VyZUxvY2FscygKKyAgICAgICAgICAgIG1f
aW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS50b0xvY2FsKCkpOworICAgIAorICAgICAgICBpbnQgbmV4
dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXpl
OworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgb3JpZ2luYWxC
YXNlLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4
dFJlZ2lzdGVyKyspLCB2YWx1ZSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgIAorICAgICAgICBo
YW5kbGVDYWxsKAorICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCksIENhbGws
IElubGluZUNhbGxGcmFtZTo6U2V0dGVyQ2FsbCwKKyAgICAgICAgICAgIE9QQ09ERV9MRU5HVEgo
b3BfcHV0X2J5X2lkKSwgc2V0dGVyLCBudW1iZXJPZlBhcmFtZXRlcnMgLSAxLCByZWdpc3Rlck9m
ZnNldCwKKyAgICAgICAgICAgICp2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCksIFNwZWNPdGhlcik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgZGVmYXVsdDogeworICAgICAgICBl
bWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywg
aXNEaXJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfSB9CiB9CiAKIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OnByZXBhcmVUb1BhcnNlQmxvY2soKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxNzA1NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjA5LDcgKzEyMDksNyBAQCBzdGF0
aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgIGxpc3QtPmFkZEFj
Y2VzcyhQdXRCeUlkQWNjZXNzOjpzZXR0ZXIoCiAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkg
PyBQdXRCeUlkQWNjZXNzOjpTZXR0ZXIgOiBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXIsCi0g
ICAgICAgICAgICBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBzbG90LmN1c3RvbVNldHRlcigp
LCBzdHViUm91dGluZSkpOworICAgICAgICAgICAgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwg
Y291bnQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7CiAKICAgICAgICAgUmVw
YXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUt
PmNvZGUoKS5jb2RlKCkpKTsKQEAgLTEzNDEsNyArMTM0MSw3IEBAIHN0YXRpYyBib29sIHRyeUJ1
aWxkUHV0QnlJZExpc3QoRXhlY1N0YXQKICAgICAgICAgbGlzdC0+YWRkQWNjZXNzKFB1dEJ5SWRB
Y2Nlc3M6OnNldHRlcigKICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwKICAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSA/IFB1dEJ5SWRBY2Nl
c3M6OlNldHRlciA6IFB1dEJ5SWRBY2Nlc3M6OkN1c3RvbVNldHRlciwKLSAgICAgICAgICAgIHN0
cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5l
KSk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgc2xvdC5j
dXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsKIAogICAgICAgICBSZXBhdGNoQnVmZmVyIHJl
cGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAJKHJldmlzaW9uIDE3MDU3MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzAsNiArMTMwLDE1IEBAIGJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6
aXNOb3JtYWxpemUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluOjp0YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpCit7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgeworICAgICAgICBpZiAoYXQoaSktPnRh
a2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBKU09iamVjdCogSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbjo6dGVybWluYWxQcm90b3R5cGUoKSBjb25zdAogewogICAgIEFTU0VSVCgh
bV92ZWN0b3IuaXNFbXB0eSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgJKHJldmlzaW9uIDE3MDU3MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4u
aAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBtYXlJ
bnRlcmNlcHRTdG9yZVRvKFZNJiwgU3RyaW5nSW1wbCogdWlkKTsKICAgICBib29sIGlzTm9ybWFs
aXplZCgpOwogICAgIAorICAgIGJvb2wgdGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVy
dHkoKTsKKyAgICAKICAgICBKU1ZhbHVlIHByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJv
dG90eXBlOyB9CiAgICAgCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rv
ci5zaXplKCk7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234193</attachid>
            <date>2014-07-01 13:14:26 -0700</date>
            <delta_ts>2014-07-01 14:41:38 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>71688</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwNjU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNCBA
QAorMjAxNC0wNy0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFtmdGxvcHRdIERGRyBieXRlY29kZSBwYXJzZXIgc2hvdWxkIHR1cm4gUHV0QnlJZCB3aXRoIG5v
dGhpbmcgYnV0IGEgU2V0dGVyIHN0dWIgYXMgc3R1ZmYraGFuZGxlQ2FsbCwgYW5kIGhhbmRsZUNh
bGwgc2hvdWxkIGJlIGFsbG93ZWQgdG8gaW5saW5lIGlmIGl0IHdhbnRzIHRvCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzA3NTYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoZSBlbmFibGVz
IGV4cG9zaW5nIHRoZSBjYWxsIHRvIHNldHRlcnMgaW4gdGhlIERGRywgYW5kIHRoZW4gaW5saW5p
bmcgaXQuIFByZXZpb3VzbHkgd2UKKyAgICAgICAgYWxyZWFkeSBzdXBwcm90ZWQgaW5saW5lZC1j
YWNoZWQgY2FsbHMgdG8gc2V0dGVycyBmcm9tIHdpdGhpbiBpbmxpbmUgY2FjaGVzLCBhbmQgdGhl
IERGRworICAgICAgICBjb3VsZCBjZXJ0YWlubHkgZW1pdCBzdWNoIElDJ3MuIE5vdywgaWYgYW4g
SUMgaGFkIGEgc2V0dGVyIGNhbGwsIHRoZW4gdGhlIERGRyB3aWxsIGVpdGhlcgorICAgICAgICBl
bWl0IHRoZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldC9HZXRTZXR0ZXIvQ2FsbCBjb21ibywgb3Ig
aXQgd2lsbCBkbyBvbmUgYmV0dGVyIGFuZAorICAgICAgICBpbmxpbmUgdGhlIGNhbGwuCisgICAg
ICAgIAorICAgICAgICBBIGxvdCBvZiB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHdhcyBhbHJlYWR5
IGF2YWlsYWJsZSBmcm9tIHRoZSBwcmV2aW91cyB3b3JrIHRvIGlubGluZQorICAgICAgICBnZXR0
ZXJzLiBTbywgdGhlcmUgYXJlIHNvbWUgcmVmYWN0b3JpbmdzIGluIHRoaXMgcGF0Y2ggdGhhdCBt
b3ZlIHByZWV4aXN0aW5nCisgICAgICAgIGZ1bmN0aW9uYWxpdHkgYXJvdW5kLiBGb3IgZXhhbXBs
ZSwgdGhlIHdvcmsgdG8gZmlndXJlIG91dCBob3cgdGhlIERGRyBzaG91bGQgZ28gYWJvdXQKKyAg
ICAgICAgZ2V0dGluZyB0byB3aGF0IHdlIGNhbGwgdGhlICJsb2FkZWQgdmFsdWUiIC0gaS5lLiB0
aGUgR2V0dGVyU2V0dGVyIG9iamVjdCByZWZlcmVuY2UgaW4KKyAgICAgICAgdGhlIGNhc2Ugb2Yg
YWNjZXNzb3JzIC0gaXMgbm93IHNoYXJlZCBpbiBDb21wbGV4R2V0U3RhdHVzLCBhbmQgYm90aCBH
ZXRCeUlkU3RhdHVzIGFuZAorICAgICAgICBQdXRCeUlkU3RhdHVzIHVzZSBpdC4gVGhpcyBtZWFu
cyB0aGF0IHdlIGNhbiBrZWVwIHRoZSBzYWZldHkgY2hlY2tzIGNvbW1vbi4gIFRoaXMgcGF0Y2gK
KyAgICAgICAgYWxzbyBkb2VzIGFkZGl0aW9uYWwgcmVmYWN0b3JpbmdzIGluIERGRzo6Qnl0ZUNv
ZGVQYXJzZXIgc28gdGhhdCB3ZSBjYW4gY29udGludWUgdG8gcmV1c2UKKyAgICAgICAgaGFuZGxl
Q2FsbCgpIGZvciBhbGwgb2YgdGhlIHZhcmlvdXMga2luZHMgb2YgY2FsbHMgd2UgY2FuIG5vdyBl
bWl0LgorICAgICAgICAKKyAgICAgICAgODMlIHNwZWVkLXVwIG9uIGdldHRlci1yaWNoYXJkcywg
MiUgc3BlZWQtdXAgb24gYm94MmQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkNv
bXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvbXBsZXhH
ZXRTdGF0dXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRTdGF0dXM6OkNvbXBs
ZXhHZXRTdGF0dXMpOgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVzOjpza2lwKToKKyAg
ICAgICAgKEpTQzo6Q29tcGxleEdldFN0YXR1czo6dGFrZXNTbG93UGF0aCk6CisgICAgICAgIChK
U0M6OkNvbXBsZXhHZXRTdGF0dXM6OmtpbmQpOgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3Rh
dHVzOjphdHRyaWJ1dGVzKToKKyAgICAgICAgKEpTQzo6Q29tcGxleEdldFN0YXR1czo6c3BlY2lm
aWNWYWx1ZSk6CisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRTdGF0dXM6Om9mZnNldCk6CisgICAg
ICAgIChKU0M6OkNvbXBsZXhHZXRTdGF0dXM6OmNoYWluKToKKyAgICAgICAgKiBieXRlY29kZS9H
ZXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
clN0dWJJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHA6CisgICAg
ICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCk6CisgICAgICAgICogYnl0
ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNj
ZXNzOjpQdXRCeUlkQWNjZXNzKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6c2V0dGVy
KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6c3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6UHV0QnlJZEFjY2Vzczo6Y2hhaW5Db3VudCk6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJ
ZFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJ
bnQpOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAg
KEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6
UHV0QnlJZFN0YXR1czo6bWFrZXNDYWxscyk6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5oOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjptYWtlc0NhbGxzKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHA6CisgICAgICAgIChKU0M6
OlB1dEJ5SWRWYXJpYW50OjpQdXRCeUlkVmFyaWFudCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRW
YXJpYW50OjpvcGVyYXRvcj0pOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6cmVwbGFj
ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKToKKyAgICAgICAg
KEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnNldHRlcik6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJp
YW50Ojp3cml0ZXNTdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnJl
YWxsb2NhdGVzU3RvcmFnZSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjptYWtlc0Nh
bGxzKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQpOgorICAg
ICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50Lmg6CisgICAgICAgIChKU0M6OlB1dEJ5SWRW
YXJpYW50OjpQdXRCeUlkVmFyaWFudCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50Ojpz
dHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6b2xkU3RydWN0dXJlKToK
KyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmFsdGVybmF0ZUJhc2UpOgorICAgICAgICAo
SlNDOjpQdXRCeUlkVmFyaWFudDo6c3BlY2lmaWNWYWx1ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5
SWRWYXJpYW50OjpjYWxsTGlua1N0YXR1cyk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50
OjpyZXBsYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnRyYW5z
aXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFkZENhbGxXaXRob3V0U2V0dGluZ1Jl
c3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFkZENhbGwpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAg
ICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKEpTQzo6dHJ5QnVpbGRQdXRCeUlk
TGlzdCk6CisgICAgICAgICogcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcDoKKyAg
ICAgICAgKEpTQzo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6dGFrZXNTbG93UGF0aEluREZHRm9y
SW1wdXJlUHJvcGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bi5oOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9leGl0LWZyb20tc2V0dGVyLmpzOiBBZGRlZC4K
KyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvcG9seS1jaGFpbi1zZXR0ZXIuanM6IEFkZGVkLgorICAg
ICAgICAoQ29ucyk6CisgICAgICAgIChmb28pOgorICAgICAgICAodGVzdCk6CisgICAgICAgICog
dGVzdHMvc3RyZXNzL3BvbHktY2hhaW4tdGhlbi1zZXR0ZXIuanM6IEFkZGVkLgorICAgICAgICAo
Q29uczEpOgorICAgICAgICAoQ29uczIpOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKHRlc3Qp
OgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9wb2x5LXNldHRlci1jb21iby5qczogQWRkZWQuCisg
ICAgICAgIChDb25zMSk6CisgICAgICAgIChDb25zMik6CisgICAgICAgIChmb28pOgorICAgICAg
ICAodGVzdCk6CisgICAgICAgICgudGVzdCk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3BvbHkt
c2V0dGVyLXRoZW4tc2VsZi5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAodGVz
dCk6CisgICAgICAgICgudGVzdCk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3dlaXJkLXNldHRl
ci1jb3VudGVyLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgICh0ZXN0KToKKwog
MjAxNC0wNi0zMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAg
ICAgICAgIE1lcmdlIHIxNjkxMjEgZnJvbSB0cnVuay4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE3MDU3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsNyBAQCBzZXQoSmF2
YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGJ5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0
Y2hwb2ludC5jcHAKICAgICBieXRlY29kZS9Db2RlT3JpZ2luLmNwcAogICAgIGJ5dGVjb2RlL0Nv
ZGVUeXBlLmNwcAorICAgIGJ5dGVjb2RlL0NvbXBsZXJHZXRTdGF0dXMuY3BwCiAgICAgYnl0ZWNv
ZGUvQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAKICAgICBieXRlY29kZS9ERkdFeGl0UHJvZmls
ZS5jcHAKICAgICBieXRlY29kZS9EZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE3MDU3MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMyMSw2ICszMjEsNyBAQAogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBv
aW50LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvZGVPcmln
aW4uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ29kZVR5cGUu
Y3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ29tcGxleEdldFN0
YXR1cy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDb25zdGFu
dFN0cnVjdHVyZUNoZWNrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxERkdFeGl0UHJvZmlsZS5jcHAiIC8+CkBAIC04NTgsNiArODU5
LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvZGVPcmlnaW4uaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvZGVUeXBlLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDb21tZW50LmgiIC8+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDb21wbGV4R2V0U3RhdHVzLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDb25zdGFudFN0cnVjdHVyZUNoZWNrLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxEYXRhRm9ybWF0LmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxNzA1NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzM3LDYgKzMzNyw4IEBACiAJ
CTBGNkIxQ0M5MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUND
NzE4NjQxREY4MDA4NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwICovOyB9
OwogCQkwRjZCMUNDQTE4NjQxREY4MDA4NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVu
a3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIx
Q0M4MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNkU4NDVBMTkw
MzBCRUYwMDU2Mjc0MSAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2RTg0NTkxOTAzMEJFRjAwNTYyNzQx
IC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgKi87IH07CisJCTBGNkZDNzUwMTk2MTEwQTgw
MEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkZDNzRFMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4
R2V0U3RhdHVzLmNwcCAqLzsgfTsKKwkJMEY2RkM3NTExOTYxMTBBODAwRTFEMDJEIC8qIENvbXBs
ZXhHZXRTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNkZDNzRGMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3MDI1QTkxNzE0
QjBGQTAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcwMjVBNzE3MTRCMEY4MDAzODJD
MEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCAqLzsgfTsKIAkJMEY3MDI1QUExNzE0
QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MDI1QTgxNzE0QjBGODAwMzgyQzBF
IC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzE0Q0E0MTZFQTkyRjAwMEYzRUJFQiAvKiBERkdC
YWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2Fy
ZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLzsgfTsKQEAgLTI1MTIsNiArMjUxNCw4IEBACiAJCTBG
NkIxQ0M3MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcml0eUNoZWNrRmFpbFJldHVy
blRodW5rcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNkIxQ0M4MTg2NDFE
RjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjZFODQ1OTE5MDMwQkVGMDA1NjI3NDEgLyogREZHVmFy
aWFibGVBY2Nlc3NEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHA7IHBhdGggPSBkZmcvREZHVmFyaWFibGVBY2Nlc3NE
YXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2RkM3NEUxOTYxMTBBODAw
RTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ29tcGxleEdldFN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNkZDNzRGMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBsZXhHZXRTdGF0dXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MDI1QTcxNzE0QjBGODAwMzgyQzBFIC8qIERGR09T
UkV4aXRDb21waWxlckNvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzAyNUE4
MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmg7IHBhdGgg
PSBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlv
blBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0JhY2t3
YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0
aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTM3OSw2ICs1Mzgz
LDggQEAKIAkJCQkwRkJEN0U2NzE0NDc5OThGMDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oICovLAog
CQkJCTBGOEY5NDNGMTY2NzYzMkQwMEQ2MTk3MSAvKiBDb2RlVHlwZS5jcHAgKi8sCiAJCQkJMEYw
QjgzQTUxNEJDRjUwNDAwODg1QjRGIC8qIENvZGVUeXBlLmggKi8sCisJCQkJMEY2RkM3NEUxOTYx
MTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuY3BwICovLAorCQkJCTBGNkZDNzRGMTk2
MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmggKi8sCiAJCQkJMEYzRDBCQkExOTRB
NDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwICovLAogCQkJCTBGM0Qw
QkJCMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmggKi8sCiAJCQkJ
MEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCAqLywKQEAgLTY1ODUsNiAr
NjU5MSw3IEBACiAJCQkJQTc4NUY2QkMxOEM1NTNGRTAwRjEwNjI2IC8qIFNwaWxsUmVnaXN0ZXJz
TW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTUwRTE2RjVDRDAwQjM0NDYwIC8qIFBy
b3BlcnR5U2xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2N0Iy
IC8qIFByb3BlcnR5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2RkM3NTExOTYxMTBB
ODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDU2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm90ZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDc0
QzMzQjE2QUEyRDk1MDA2MkYwMUQgLyogUHJvdG90eXBlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC04MTAyLDYgKzgxMDksNyBAQAogCQkJCUZFRDk0RjMwMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZ01hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyNTE1ODUzQ0UwMDA0
QTRFN0QgLyogV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUNGNzM3NzE3MUNB
NkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjZGQzc1MDE5NjEx
MEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NEU4NEY5RTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0RjcyNTY1MTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTdDQTNBRTMxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBDb25zdHJ1
Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29tcGxleEdldFN0
YXR1cy5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Q29tcGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKAorICAgIENvZGVC
bG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBTdHJ1Y3R1cmVD
aGFpbiogY2hhaW4sCisgICAgdW5zaWduZWQgY2hhaW5Db3VudCwgU3RyaW5nSW1wbCogdWlkKQor
eworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXNzZXJ0IHRoYXQgd2UgbmV2ZXIgc2VlIGEgc3Ry
dWN0dXJlIHRoYXQKKyAgICAvLyBoYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSBidXQgZm9y
IHdoaWNoIHdlIGRvbid0CisgICAgLy8gbmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRz
KCkuIFdlJ3JlIG5vdCBhdCBhIHBvaW50IHdoZXJlIHdlIGNhbiBkbworICAgIC8vIHRoYXQsIHll
dC4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxODEw
CisgICAgCisgICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVy
ZVByb3BlcnR5KCkpCisgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CisgICAgCisgICAg
Q29tcGxleEdldFN0YXR1cyByZXN1bHQ7CisgICAgcmVzdWx0Lm1fa2luZCA9IElubGluZWFibGU7
CisgICAgCisgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOworICAgIAorICAgIGlmIChjaGFpbikg
eworICAgICAgICByZXN1bHQubV9jaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluKAorICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgaGVhZFN0cnVjdHVyZSwgY2hhaW4s
IGNoYWluQ291bnQpKTsKKyAgICAgICAgCisgICAgICAgIGlmICghcmVzdWx0Lm1fY2hhaW4tPmlz
U3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIHNraXAoKTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChoZWFkU3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0
eSgpCisgICAgICAgICAgICB8fCByZXN1bHQubV9jaGFpbi0+dGFrZXNTbG93UGF0aEluREZHRm9y
SW1wdXJlUHJvcGVydHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7Cisg
ICAgICAgIAorICAgICAgICBKU09iamVjdCogY3VycmVudE9iamVjdCA9IHJlc3VsdC5tX2NoYWlu
LT50ZXJtaW5hbFByb3RvdHlwZSgpOworICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJlbnRTdHJ1Y3R1
cmUgPSByZXN1bHQubV9jaGFpbi0+bGFzdCgpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChjdXJyZW50T2JqZWN0LCBjdXJyZW50T2JqZWN0KTsKKyAgICAgICAgCisgICAgICAgIHJl
c3VsdC5tX29mZnNldCA9IGN1cnJlbnRTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgKKyAgICAg
ICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQsIHJlc3VsdC5tX2F0dHJpYnV0ZXMsIHNw
ZWNpZmljVmFsdWUpOworICAgICAgICBpZiAoY3VycmVudFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5
KCkpCisgICAgICAgICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKKyAgICB9IGVsc2UgeworICAgICAg
ICByZXN1bHQubV9vZmZzZXQgPSBoZWFkU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCisgICAg
ICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCByZXN1bHQubV9hdHRyaWJ1dGVzLCBz
cGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgp
KQorICAgICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7CisgICAgfQorICAgIAorICAgIHJlc3Vs
dC5tX3NwZWNpZmljVmFsdWUgPSBzcGVjaWZpY1ZhbHVlOworICAgIAorICAgIGlmICghaXNWYWxp
ZE9mZnNldChyZXN1bHQubV9vZmZzZXQpKQorICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgp
OworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRT
dGF0dXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b21wbGV4R2V0U3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDb21wbGV4
R2V0U3RhdHVzX2gKKyNkZWZpbmUgQ29tcGxleEdldFN0YXR1c19oCisKKyNpbmNsdWRlICJJbnRl
bmRlZFN0cnVjdHVyZUNoYWluLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUg
IlByb3BlcnR5T2Zmc2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7
CitjbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKKworLy8gVGhpcyBjbGFzcyBpcyB1c2VmdWwgZm9yIGZp
Z3VyaW5nIG91dCBob3cgdG8gaW5saW5lIGEgY2FjaGVkIGdldC1saWtlIGFjY2Vzcy4gV2UKKy8v
IHNheSAiZ2V0LWxpa2UiIGJlY2F1c2UgdGhpcyBpcyBhcHByb3ByaWF0ZSBmb3IgbG9hZGluZyB0
aGUgR2V0dGVyU2V0dGVyIG9iamVjdCBpbgorLy8gYSBwdXRfYnlfaWQgdGhhdCBoaXRzIGEgc2V0
dGVyLiBOb3RhYmx5LCB0aGlzIGRvZXNuJ3QgZmlndXJlIG91dCBob3cgdG8gY2FsbAorLy8gYWNj
ZXNzb3JzLCBvciBldmVuIHdoZXRoZXIgdGhleSBzaG91bGQgYmUgY2FsbGVkLiBXaGF0IGl0IGdp
dmVzIHVzLCBpcyBhIHdheSBvZgorLy8gZGV0ZXJtaW5pbmcgaG93IHRvIGxvYWQgdGhlIHZhbHVl
IGZyb20gdGhlIHJlcXVlc3RlZCBwcm9wZXJ0eSAoaWRlbnRpZmllZCBieSBhCisvLyBTdHJpbmdJ
bXBsKiB1aWQpIGZyb20gYW4gb2JqZWN0IG9mIHRoZSBnaXZlbiBzdHJ1Y3R1cmUgaW4gdGhlIGdp
dmVuIENvZGVCbG9jaywKKy8vIGFzc3VtaW5nIHRoYXQgc3VjaCBhbiBhY2Nlc3MgaGFkIGFscmVh
ZHkgYmVlbiBjYWNoZWQgYnkgUmVwYXRjaCAoYW5kIHNvIFJlcGF0Y2ggaGFkCisvLyBhbHJlYWR5
IGRvbmUgYSBidW5jaCBvZiBzYWZldHkgY2hlY2tzKS4gVGhpcyBkb2Vzbid0IHJlZXhlY3V0ZSBh
bnkgY2hlY2tzIHRoYXQKKy8vIFJlcGF0Y2ggd291bGQgaGF2ZSBleGVjdXRlZCwgYW5kIGZvciBw
cm90b3R5cGUgY2hhaW4gYWNjZXNzZXMsIGl0IGRvZXNuJ3QgYXNrIHRoZQorLy8gb2JqZWN0cyBp
biB0aGUgcHJvdG90eXBlIGNoYWluIHdoZXRoZXIgdGhlaXIgZ2V0T3duUHJvcGVydHlTbG90IHdv
dWxkIGF0dGVtcHQgdG8KKy8vIGludGVyY2VwdCB0aGUgYWNjZXNzIC0gc28gdGhpcyByZWFsbHkg
aXMgb25seSBhcHByb3ByaWF0ZSBpZiB5b3UgYWxyZWFkeSBrbm93IHRoYXQKKy8vIG9uZSBvZiB0
aGUgSklUT3BlcmF0aW9ucyBoYWQgT0snZCB0aGlzIGZvciBjYWNoaW5nIGFuZCB0aGF0IFJlcGF0
Y2ggY29uY3VycmVkLgorLy8KKy8vIFRoZSB0eXBpY2FsIHVzZSBwYXR0ZXJuIGlzIHNvbWV0aGlu
ZyBsaWtlOgorLy8KKy8vICAgICBDb21wbGV4R2V0U3RhdHVzIHN0YXR1cyA9IENvbXBsZXhHZXRT
dGF0dXM6OmNvbXB1dGVGb3IoLi4uKTsKKy8vICAgICBzd2l0Y2ggKHN0YXR1cy5raW5kKCkpIHsK
Ky8vICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlNob3VsZFNraXA6CisvLyAgICAgICAgIC8v
IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGlzIGtpbmQgb2YgYWNjZXNzIGlzIHBvc3NpYmx5IHNh
ZmUgYnV0IHdvdWxkbid0CisvLyAgICAgICAgIC8vIHBhc3MgdGhlIHJlcXVpcmVkIHNhZmV0eSBj
aGVja3MuIEZvciBleGFtcGxlLCBpZiBhbiBJQyBnaXZlcyB1cyBhIGxpc3Qgb2YKKy8vICAgICAg
ICAgLy8gYWNjZXNzZXMgYW5kIG9uZSBvZiB0aGVtIGlzIFNob3VsZFNraXAsIHRoZW4gd2Ugc2hv
dWxkIHByZXRlbmQgYXMgaWYgaXQKKy8vICAgICAgICAgLy8gd2Fzbid0IGV2ZW4gdGhlcmUuCisv
LyAgICAgICAgIGJyZWFrOworLy8gICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6VGFrZXNTbG93
UGF0aDoKKy8vICAgICAgICAgLy8gVGhpcyBraW5kIG9mIGFjY2VzcyBpcyBub3Qgc2FmZSB0byBp
bmxpbmUuIEJhaWwgb3V0IG9mIGFueSBhdHRlbXBzdCB0bworLy8gICAgICAgICAvLyBpbmxpbmUu
CisvLyAgICAgICAgIGJyZWFrOworLy8gICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5l
YWJsZToKKy8vICAgICAgICAgLy8gVGhlIGdvb2Qgc3R1ZmYgZ29lcyBoZXJlLiBJZiBpdCdzIElu
bGluZWFibGUgdGhlbiB0aGUgb3RoZXIgcHJvcGVydGllcyBvZgorLy8gICAgICAgICAvLyB0aGUg
J3N0YXR1cycgb2JqZWN0IHdpbGwgdGVsbCB5b3UgZXZlcnl0aGluZyB5b3UgbmVlZCB0byBrbm93
IGFib3V0IGhvdworLy8gICAgICAgICAvLyB0byBleGVjdXRlIHRoZSBnZXQtbGlrZSBvcGVyYXRp
b24uCisvLyAgICAgICAgIGJyZWFrOworLy8gICAgIH0KKworY2xhc3MgQ29tcGxleEdldFN0YXR1
cyB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgU2hvdWxkU2tpcCwKKyAgICAg
ICAgVGFrZXNTbG93UGF0aCwKKyAgICAgICAgSW5saW5lYWJsZQorICAgIH07CisgICAgCisgICAg
Q29tcGxleEdldFN0YXR1cygpCisgICAgICAgIDogbV9raW5kKFNob3VsZFNraXApCisgICAgICAg
ICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKKyAgICAgICAgLCBtX2F0dHJpYnV0ZXMoVUlOVF9N
QVgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgQ29tcGxleEdldFN0YXR1cyBza2lw
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBDb21wbGV4R2V0U3RhdHVzKCk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBDb21wbGV4R2V0U3RhdHVzIHRha2VzU2xvd1BhdGgoKQorICAgIHsKKyAg
ICAgICAgQ29tcGxleEdldFN0YXR1cyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBU
YWtlc1Nsb3dQYXRoOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgQ29tcGxleEdldFN0YXR1cyBjb21wdXRlRm9yKAorICAgICAgICBDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2ssIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNo
YWluLAorICAgICAgICB1bnNpZ25lZCBjaGFpbkNvdW50LCBTdHJpbmdJbXBsKiB1aWQpOworICAg
IAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIHVuc2lnbmVk
IGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KKyAgICBKU1ZhbHVl
IHNwZWNpZmljVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3NwZWNpZmljVmFsdWU7IH0KKyAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluKCkgY29uc3QgeyByZXR1cm4gbV9jaGFpbi5nZXQo
KTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBLaW5kIG1fa2luZDsKKyAgICBQcm9wZXJ0eU9mZnNl
dCBtX29mZnNldDsKKyAgICB1bnNpZ25lZCBtX2F0dHJpYnV0ZXM7CisgICAgSlNWYWx1ZSBtX3Nw
ZWNpZmljVmFsdWU7CisgICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IG1fY2hhaW47
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIENvbXBsZXhHZXRTdGF0dXNf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRT
dGF0dXMuY3BwCShyZXZpc2lvbiAxNzA1NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAK
IAogI2luY2x1ZGUgIkFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29tcGxleEdldFN0YXR1cy5oIgogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKICNpbmNsdWRlICJKU1Njb3BlLmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCkBA
IC0xNzYsODYgKzE3Nyw0OSBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3JTCiAgICAgICAgIGZvciAodW5zaWduZWQgbGlzdEluZGV4ID0gMDsgbGlzdEluZGV4IDwgbGlz
dC0+c2l6ZSgpOyArK2xpc3RJbmRleCkgewogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBsaXN0LT5hdChsaXN0SW5kZXgpLnN0cnVjdHVyZSgpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFzc2VydCB0aGF0IHdlIG5ldmVyIHNlZSBhIHN0
cnVjdHVyZSB0aGF0Ci0gICAgICAgICAgICAvLyBoYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3Qo
KSBidXQgZm9yIHdoaWNoIHdlIGRvbid0Ci0gICAgICAgICAgICAvLyBuZXdJbXB1cmVQcm9wZXJ0
eUZpcmVzV2F0Y2hwb2ludHMoKS4gV2UncmUgbm90IGF0IGEgcG9pbnQgd2hlcmUgd2UgY2FuIGRv
Ci0gICAgICAgICAgICAvLyB0aGF0LCB5ZXQuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxODEwCisgICAgICAgICAgICBDb21wbGV4R2V0
U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKAor
ICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIHN0cnVjdHVyZSwgbGlzdC0+YXQobGlzdElu
ZGV4KS5jaGFpbigpLAorICAgICAgICAgICAgICAgIGxpc3QtPmF0KGxpc3RJbmRleCkuY2hhaW5D
b3VudCgpLCB1aWQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc3RydWN0dXJlLT50
YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQorICAgICAgICAgICAgc3dpdGNo
IChjb21wbGV4R2V0U3RhdHVzLmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0
U3RhdHVzOjpTaG91bGRTa2lwOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpUYWtlc1Nsb3dQYXRo
OgogICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUsIHRy
dWUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzSWdub3Jl
ZDsKLSAgICAgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG15T2Zmc2V0OwotICAgICAgICAgICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJl
Q2hhaW4+IGNoYWluOwotCi0gICAgICAgICAgICBpZiAobGlzdC0+YXQobGlzdEluZGV4KS5jaGFp
bigpKSB7Ci0gICAgICAgICAgICAgICAgY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbigKLSAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgc3RydWN0dXJl
LCBsaXN0LT5hdChsaXN0SW5kZXgpLmNoYWluKCksCi0gICAgICAgICAgICAgICAgICAgIGxpc3Qt
PmF0KGxpc3RJbmRleCkuY2hhaW5Db3VudCgpKSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaWYgKCFjaGFpbi0+aXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gVGhpcyB3b24ndCBldmVyIHJ1biBhZ2FpbiBzbyBza2lwIGl0LgotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5s
aW5lYWJsZTogeworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1
cz4gY2FsbExpbmtTdGF0dXM7CisgICAgICAgICAgICAgICAgc3dpdGNoIChsaXN0LT5hdChsaXN0
SW5kZXgpLnR5cGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6U2lt
cGxlSW5saW5lOgorICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6U2ltcGxlU3R1
YjogeworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0
aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKKyAgICAgICAgICAgICAgICBjYXNlIEdldEJ5SWRB
Y2Nlc3M6OkdldHRlcjogeworICAgICAgICAgICAgICAgICAgICBBY2Nlc3NvckNhbGxKSVRTdHVi
Um91dGluZSogc3R1YiA9IHN0YXRpY19jYXN0PEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKj4o
CisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0LT5hdChsaXN0SW5kZXgpLnN0dWJSb3V0aW5l
KCkpOworICAgICAgICAgICAgICAgICAgICBjYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91bmlx
dWU8Q2FsbExpbmtTdGF0dXM+KAorICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtTdGF0
dXM6OmNvbXB1dGVGb3IobG9ja2VyLCAqc3R1Yi0+bV9jYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0
ZURhdGEpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6Q3VzdG9tR2V0dGVyOiB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSB0b3RhbGx5IHN3ZWV0IHRvIHN1
cHBvcnQgdGhpcyBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUuCisgICAgICAgICAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwNTIKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1
ZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc2l6ZV90IGNoYWluU2l6ZSA9
IGNoYWluLT5zaXplKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
aGFpblNpemU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoY2hhaW4tPmF0KGkpLT50
YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0gY2hh
aW4tPnRlcm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBjdXJy
ZW50U3RydWN0dXJlID0gY2hhaW4tPmxhc3QoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBBU1NFUlRfVU5VU0VEKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRPYmplY3QpOworICAg
ICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50IHZhcmlhbnQoCisgICAgICAgICAgICAgICAgICAg
IFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLAorICAg
ICAgICAgICAgICAgICAgICBjb21wbGV4R2V0U3RhdHVzLnNwZWNpZmljVmFsdWUoKSwgY29tcGxl
eEdldFN0YXR1cy5jaGFpbigpLAorICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUoY2FsbExp
bmtTdGF0dXMpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBteU9mZnNldCA9
IGN1cnJlbnRTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgKLSAgICAgICAgICAgICAgICAgICAg
KnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFs
dWUpOwotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U3RydWN0dXJlLT5pc0RpY3Rpb25hcnko
KSkKLSAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIG15T2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJy
ZW50bHkoCi0gICAgICAgICAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQsIGF0
dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoc3Ry
dWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNWYWx1
ZSA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghaXNW
YWxpZE9mZnNldChteU9mZnNldCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0
dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXM7Ci0gICAgICAgICAgICBz
d2l0Y2ggKGxpc3QtPmF0KGxpc3RJbmRleCkudHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEdl
dEJ5SWRBY2Nlc3M6OlNpbXBsZUlubGluZToKLSAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vz
czo6U2ltcGxlU3R1YjogewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgY2FzZSBHZXRCeUlkQWNjZXNzOjpHZXR0ZXI6IHsKLSAgICAgICAgICAgICAg
ICBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSogc3R1YiA9IHN0YXRpY19jYXN0PEFjY2Vzc29y
Q2FsbEpJVFN0dWJSb3V0aW5lKj4oCi0gICAgICAgICAgICAgICAgICAgIGxpc3QtPmF0KGxpc3RJ
bmRleCkuc3R1YlJvdXRpbmUoKSk7Ci0gICAgICAgICAgICAgICAgY2FsbExpbmtTdGF0dXMgPSBz
dGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rU3RhdHVzPigKLSAgICAgICAgICAgICAgICAgICAgQ2Fs
bExpbmtTdGF0dXM6OmNvbXB1dGVGb3IobG9ja2VyLCAqc3R1Yi0+bV9jYWxsTGlua0luZm8sIGNh
bGxFeGl0U2l0ZURhdGEpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJp
YW50KHZhcmlhbnQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhz
bG93UGF0aFN0YXRlLCB0cnVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6Q3VzdG9tR2V0dGVyOiB7Ci0gICAg
ICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIHRvdGFsbHkgc3dlZXQgdG8gc3VwcG9y
dCB0aGlzIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZS4KLSAgICAgICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDUyCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIEdldEJ5SWRWYXJpYW50IHZhcmlhbnQoCi0gICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0
KHN0cnVjdHVyZSksIG15T2Zmc2V0LCBzcGVjaWZpY1ZhbHVlLCBjaGFpbi5nZXQoKSwKLSAgICAg
ICAgICAgICAgICBzdGQ6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0cnVlKTsKKyAgICAgICAg
ICAgIH0gfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gcmVzdWx0OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQu
Y3BwCShyZXZpc2lvbiAxNzA1NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBAIEdldEJ5
SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCgKIEdldEJ5SWRWYXJpYW50Ojp+R2V0QnlJZFZhcmlh
bnQoKSB7IH0KIAogR2V0QnlJZFZhcmlhbnQ6OkdldEJ5SWRWYXJpYW50KGNvbnN0IEdldEJ5SWRW
YXJpYW50JiBvdGhlcikKKyAgICA6IEdldEJ5SWRWYXJpYW50KCkKIHsKICAgICAqdGhpcyA9IG90
aGVyOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
UHV0QnlJZExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCShyZXZpc2lvbiAxNzA1NzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICAKICAgICBQdXRCeUlkQWNjZXNz
KCkKICAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKKyAgICAgICAgLCBtX2NoYWluQ291bnQoVUlO
VF9NQVgpCiAgICAgewogICAgIH0KICAgICAKQEAgLTk1LDYgKzk2LDcgQEAgcHVibGljOgogICAg
ICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
LAogICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sCisgICAgICAgIHVuc2lnbmVkIGNoYWlu
Q291bnQsCiAgICAgICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNldHRl
ciwKICAgICAgICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCiAgICAg
ewpAQCAtMTAyLDggKzEwNCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVz
dWx0OwogICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0
dXJlKTsKICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IGFjY2Vzc1R5cGU7Ci0gICAgICAgIGlmIChj
aGFpbikKKyAgICAgICAgaWYgKGNoYWluKSB7CiAgICAgICAgICAgICByZXN1bHQubV9jaGFpbi5z
ZXQodm0sIG93bmVyLCBjaGFpbik7CisgICAgICAgICAgICByZXN1bHQubV9jaGFpbkNvdW50ID0g
Y2hhaW5Db3VudDsKKyAgICAgICAgfQogICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSBj
dXN0b21TZXR0ZXI7CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMzIsNyArMTM2LDcgQEAgcHVibGljOgogICAg
IAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VS
VChpc1JlcGxhY2UoKSk7CisgICAgICAgIEFTU0VSVChpc1JlcGxhY2UoKSB8fCBpc1NldHRlcigp
IHx8IGlzQ3VzdG9tKCkpOwogICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmUuZ2V0KCk7CiAg
ICAgfQogICAgIApAQCAtMTQ4LDYgKzE1MiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBt
X2NoYWluLmdldCgpOwogICAgIH0KICAgICAKKyAgICB1bnNpZ25lZCBjaGFpbkNvdW50KCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1NldHRlcigpIHx8IGlzQ3VzdG9tKCkpOworICAg
ICAgICByZXR1cm4gbV9jaGFpbkNvdW50OworICAgIH0KKyAgICAKICAgICBKSVRTdHViUm91dGlu
ZSogc3R1YlJvdXRpbmUoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzVHJhbnNpdGlv
bigpIHx8IGlzUmVwbGFjZSgpIHx8IGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7CkBAIC0xNjks
NiArMTc5LDcgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX29sZFN0
cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX25ld1N0cnVjdHVyZTsKICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlQ2hhaW4+IG1fY2hhaW47CisgICAgdW5zaWduZWQgbV9j
aGFpbkNvdW50OwogICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIG1fY3VzdG9tU2V0
dGVyOwogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKIH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3Bw
CShyZXZpc2lvbiAxNzA1NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDkgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCiAKKyNpbmNsdWRlICJBY2Nl
c3NvckNhbGxKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1
ZGUgIkNvbXBsZXhHZXRTdGF0dXMuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRl
ICJMb3dMZXZlbEludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgpAQCAtOTcs
MTAgKzk5LDExIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb20KICAg
ICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgCi0gICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFu
c2l0aW9uKAotICAgICAgICBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgY2hhaW4g
PyBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihwcm9maWxlZEJsb2NrLCBzdHJ1
Y3R1cmUsIGNoYWluKSkgOiAwLAotICAgICAgICBvZmZzZXQpOworICAgIFJlZlB0cjxJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluPiBpbnRlbmRlZENoYWluOworICAgIGlmIChjaGFpbikKKyAgICAgICAg
aW50ZW5kZWRDaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKHByb2Zp
bGVkQmxvY2ssIHN0cnVjdHVyZSwgY2hhaW4pKTsKKyAgICAKKyAgICByZXR1cm4gUHV0QnlJZFZh
cmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGludGVuZGVkQ2hhaW4u
Z2V0KCksIG9mZnNldCk7CiAjZWxzZQogICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3Jt
YXRpb24pOwogI2VuZGlmCkBAIC0xMTksNyArMTIyLDkgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Ns
b3dQYXRoKTsKICAgICAKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtYXAuZ2V0
KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpOwotICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0ID0g
Y29tcHV0ZUZvclN0dWJJbmZvKGxvY2tlciwgcHJvZmlsZWRCbG9jaywgc3R1YkluZm8sIHVpZCk7
CisgICAgUHV0QnlJZFN0YXR1cyByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCisgICAgICAg
IGxvY2tlciwgcHJvZmlsZWRCbG9jaywgc3R1YkluZm8sIHVpZCwKKyAgICAgICAgQ2FsbExpbmtT
dGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEobG9ja2VyLCBwcm9maWxlZEJsb2NrLCBieXRlY29k
ZUluZGV4KSk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBjb21wdXRlRnJvbUxM
SW50KHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgsIHVpZCk7CiAgICAgCkBAIC0xMzEsNyAr
MTM2LDkgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogfQogCiAj
aWYgRU5BQkxFKEpJVCkKLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0
dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RyaW5nSW1wbCogdWlkKQorUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCisgICAgY29uc3QgQ29u
Y3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbywKKyAgICBTdHJpbmdJbXBsKiB1aWQsIENhbGxMaW5rU3Rh
dHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKIHsKICAgICBpZiAoIXN0dWJJbmZv
IHx8ICFzdHViSW5mby0+c2VlbikKICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoKTsKQEAg
LTE1OSwxMyArMTY2LDE2IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
clMKICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS0+
Z2V0Q29uY3VycmVudGx5KAogICAgICAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1
aWQpOwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CisgICAgICAgICAgICBS
ZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gY2hhaW47CisgICAgICAgICAgICBpZiAoc3R1
YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4pIHsKKyAgICAgICAgICAgICAgICBjaGFp
biA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAorICAgICAgICAgICAgICAg
ICAgICBwcm9maWxlZEJsb2NrLCBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91
c1N0cnVjdHVyZS5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJ
ZFRyYW5zaXRpb24uY2hhaW4uZ2V0KCkpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJl
dHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKICAgICAgICAgICAgICAgICBzdHViSW5m
by0+dS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSwKICAgICAgICAg
ICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCksCi0g
ICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4gPyBhZG9w
dFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKLSAgICAgICAgICAgICAgICAgICAgcHJv
ZmlsZWRCbG9jaywgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1
cmUuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0
aW9uLmNoYWluLmdldCgpKSkgOiAwLAotICAgICAgICAgICAgICAgIG9mZnNldCk7CisgICAgICAg
ICAgICAgICAgY2hhaW4uZ2V0KCksIG9mZnNldCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQpAQCAtMTc2LDE3ICsxODYsMzIg
QEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICBQdXRC
eUlkU3RhdHVzIHJlc3VsdDsKICAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7CiAgICAg
ICAgIAorICAgICAgICBTdGF0ZSBzbG93UGF0aFN0YXRlID0gVGFrZXNTbG93UGF0aDsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICBjb25zdCBQdXRCeUlkQWNjZXNzJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7CisgICAgICAgICAgICBj
YXNlIFB1dEJ5SWRBY2Nlc3M6OlNldHRlcjoKKyAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vz
czo6Q3VzdG9tU2V0dGVyOgorICAgICAgICAgICAgICAgIHNsb3dQYXRoU3RhdGUgPSBNYWtlc0Nh
bGxzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CiAgICAg
ICAgICAgICBjb25zdCBQdXRCeUlkQWNjZXNzJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKICAgICAg
ICAgICAgIAorICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudDsKKyAgICAgICAgICAg
IAogICAgICAgICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNl
IFB1dEJ5SWRBY2Nlc3M6OlJlcGxhY2U6IHsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgqcHJvZmlsZWRCbG9jay0+
dm0oKSwgdWlkKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudChQdXRCeUlkVmFyaWFu
dDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7CisgICAgICAgICAgICAgICAgdmFyaWFu
dCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTE5NCw3
ICsyMTksNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAg
ICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KICAgICAgICAgICAgICAgICAgICAg
YWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkoKnByb2ZpbGVkQmxvY2stPnZt
KCksIHVpZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlKTsK
ICAgICAgICAgICAgICAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gY2hhaW47CiAg
ICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy5jaGFpbigpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGNoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oCkBAIC0yMDIsMTkg
KzIyNyw0OCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAg
ICAgICAgICAgICAgICAgIGlmICghY2hhaW4tPmlzU3RpbGxWYWxpZCgpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJvb2wgb2sgPSByZXN1bHQuYXBwZW5kVmFyaWFudChQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlv
bigKLSAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3
U3RydWN0dXJlKCksIGNoYWluLmdldCgpLCBvZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBpZiAo
IW9rKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKKyAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRp
b24oCisgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5vbGRTdHJ1Y3R1cmUoKSwgYWNjZXNzLm5l
d1N0cnVjdHVyZSgpLCBjaGFpbi5nZXQoKSwgb2Zmc2V0KTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6U2V0dGVy
OgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQdXRCeUlkQWNjZXNzOjpTZXR0
ZXI6IHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1
Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDb21wbGV4R2V0U3Rh
dHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKAorICAg
ICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBzdHJ1Y3R1cmUsIGFjY2Vzcy5jaGFpbigp
LCBhY2Nlc3MuY2hhaW5Db3VudCgpLCB1aWQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIHN3aXRjaCAoY29tcGxleEdldFN0YXR1cy5raW5kKCkpIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlNob3VsZFNraXA6CisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIENv
bXBsZXhHZXRTdGF0dXM6OlRha2VzU2xvd1BhdGg6CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OklubGluZWFibGU6IHsKKyAgICAg
ICAgICAgICAgICAgICAgQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUqIHN0dWIgPSBzdGF0aWNf
Y2FzdDxBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSo+KAorICAgICAgICAgICAgICAgICAgICAg
ICAgYWNjZXNzLnN0dWJSb3V0aW5lKCkpOworICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzID0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtTdGF0dXM+KAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsb2NrZXIsICpzdHViLT5tX2NhbGxMaW5rSW5mbywgY2FsbEV4aXRT
aXRlRGF0YSkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgdmFy
aWFudCA9IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuc3Bl
Y2lmaWNWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxleEdldFN0YXR1cy5j
aGFpbigpLCBzdGQ6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKKyAgICAgICAgICAgICAgICB9IH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyOgogICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMpOwogCiAgICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1Bh
dGgpOworICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUp
OwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXJlc3VsdC5h
cHBlbmRWYXJpYW50KHZhcmlhbnQpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKHNsb3dQYXRoU3RhdGUpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4g
cmVzdWx0OwpAQCAtMjMwLDE2ICsyODQsMjAgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yKAogewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIGlmIChkZmdCbG9jaykg
eworICAgICAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGV4aXRTaXRlRGF0YTsKICAg
ICAgICAgewogICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoYmFzZWxpbmVC
bG9jay0+bV9sb2NrKTsKICAgICAgICAgICAgIGlmIChoYXNFeGl0U2l0ZShsb2NrZXIsIGJhc2Vs
aW5lQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgRXhpdEZyb21GVEwpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICAg
ICAgZXhpdFNpdGVEYXRhID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoCisg
ICAgICAgICAgICAgICAgbG9ja2VyLCBiYXNlbGluZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgsIEV4aXRGcm9tRlRMKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIFB1
dEJ5SWRTdGF0dXMgcmVzdWx0OwogICAgICAgICB7CiAgICAgICAgICAgICBDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcihkZmdCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IGNv
bXB1dGVGb3JTdHViSW5mbyhsb2NrZXIsIGRmZ0Jsb2NrLCBkZmdNYXAuZ2V0KGNvZGVPcmlnaW4p
LCB1aWQpOworICAgICAgICAgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAg
ICAgICAgICAgIGxvY2tlciwgZGZnQmxvY2ssIGRmZ01hcC5nZXQoY29kZU9yaWdpbiksIHVpZCwg
ZXhpdFNpdGVEYXRhKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gV2UgdXNlIFRh
a2VzU2xvd1BhdGggaW4gc29tZSBjYXNlcyB3aGVyZSB0aGUgc3R1YiB3YXMgdW5zZXQuIFRoYXQn
cyB3ZWlyZCBhbmQKQEAgLTM0NSw3ICs0MDMsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwog
ICAgIAogICAgICAgICBib29sIGRpZEFwcGVuZCA9IHJlc3VsdC5hcHBlbmRWYXJpYW50KAotICAg
ICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJlLCB0cmFuc2l0aW9u
LCBjaGFpbi5yZWxlYXNlKCksIG9mZnNldCkpOworICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6
OnRyYW5zaXRpb24oc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjaGFpbi5nZXQoKSwgb2Zmc2V0KSk7
CiAgICAgICAgIGlmICghZGlkQXBwZW5kKQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQpAQCAtMzUzLDYgKzQxMSwyMiBAQCBQdXRCeUlkU3Rh
dHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAor
Ym9vbCBQdXRCeUlkU3RhdHVzOjptYWtlc0NhbGxzKCkgY29uc3QKK3sKKyAgICBpZiAobV9zdGF0
ZSA9PSBNYWtlc0NhbGxzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAobV9z
dGF0ZSAhPSBTaW1wbGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX3ZhcmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICBpZiAobV92YXJp
YW50c1tpXS5tYWtlc0NhbGxzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIFB1dEJ5SWRTdGF0dXM6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkocmV2aXNp
b24gMTcwNTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBQdXRCeUlkU3Rh
dHVzX2gKICNkZWZpbmUgUHV0QnlJZFN0YXR1c19oCiAKKyNpbmNsdWRlICJDYWxsTGlua1N0YXR1
cy5oIgogI2luY2x1ZGUgIkV4aXRpbmdKSVRUeXBlLmgiCiAjaW5jbHVkZSAiUHV0QnlJZFZhcmlh
bnQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgpAQCAtODAsNyArODEsNyBAQCBw
dWJsaWM6CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IE5v
SW5mb3JtYXRpb247IH0KICAgICBib29sIGlzU2ltcGxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZSA9PSBTaW1wbGU7IH0KICAgICBib29sIHRha2VzU2xvd1BhdGgoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlID09IFRha2VzU2xvd1BhdGggfHwgbV9zdGF0ZSA9PSBNYWtlc0NhbGxzOyB9Ci0gICAg
Ym9vbCBtYWtlc0NhbGxzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBNYWtlc0NhbGxzOyB9
CisgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7CiAgICAgCiAgICAgc2l6ZV90IG51bVZhcmlh
bnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50cy5zaXplKCk7IH0KICAgICBjb25zdCBWZWN0
b3I8UHV0QnlJZFZhcmlhbnQsIDE+JiB2YXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFu
dHM7IH0KQEAgLTk0LDcgKzk1LDkgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBoYXNFeGl0
U2l0ZShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCwgRXhpdGluZ0pJVFR5cGUgPSBFeGl0RnJvbUFueXRoaW5nKTsKICNlbmRpZgog
I2lmIEVOQUJMRShKSVQpCi0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJ
bmZvKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHVi
SW5mbyosIFN0cmluZ0ltcGwqIHVpZCk7CisgICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0
ZUZvclN0dWJJbmZvKAorICAgICAgICBjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ29kZUJs
b2NrKiwgU3RydWN0dXJlU3R1YkluZm8qLCBTdHJpbmdJbXBsKiB1aWQsCisgICAgICAgIENhbGxM
aW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOwogI2VuZGlmCiAgICAgc3RhdGljIFB1dEJ5SWRTdGF0
dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBT
dHJpbmdJbXBsKiB1aWQpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAxNzA1NzEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiwxMCArMjYsNzQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQ
dXRCeUlkVmFyaWFudC5oIgogCisjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewogCitQdXRCeUlkVmFyaWFudDo6UHV0QnlJZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlh
bnQmIG90aGVyKQorICAgIDogUHV0QnlJZFZhcmlhbnQoKQoreworICAgICp0aGlzID0gb3RoZXI7
Cit9CisKK1B1dEJ5SWRWYXJpYW50JiBQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9KGNvbnN0IFB1
dEJ5SWRWYXJpYW50JiBvdGhlcikKK3sKKyAgICBtX2tpbmQgPSBvdGhlci5tX2tpbmQ7CisgICAg
bV9vbGRTdHJ1Y3R1cmUgPSBvdGhlci5tX29sZFN0cnVjdHVyZTsKKyAgICBtX25ld1N0cnVjdHVy
ZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOworICAgIG1fY29uc3RhbnRDaGVja3MgPSBvdGhlci5t
X2NvbnN0YW50Q2hlY2tzOworICAgIG1fYWx0ZXJuYXRlQmFzZSA9IG90aGVyLm1fYWx0ZXJuYXRl
QmFzZTsKKyAgICBtX3NwZWNpZmljVmFsdWUgPSBvdGhlci5tX3NwZWNpZmljVmFsdWU7CisgICAg
bV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKKyAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1
cykKKyAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtT
dGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKKyAgICBlbHNlCisgICAgICAgIG1fY2Fs
bExpbmtTdGF0dXMgPSBudWxscHRyOworICAgIHJldHVybiAqdGhpczsKK30KKworUHV0QnlJZFZh
cmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1
cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7
CisgICAgcmVzdWx0Lm1fa2luZCA9IFJlcGxhY2U7CisgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJl
ID0gc3RydWN0dXJlOworICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigK
KyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUsCisgICAgY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4s
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7Cisg
ICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247CisgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJl
ID0gb2xkU3RydWN0dXJlOworICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVy
ZTsKKyAgICBpZiAoc3RydWN0dXJlQ2hhaW4pCisgICAgICAgIHN0cnVjdHVyZUNoYWluLT5nYXRo
ZXJDaGVja3MocmVzdWx0Lm1fY29uc3RhbnRDaGVja3MpOworICAgIHJlc3VsdC5tX29mZnNldCA9
IG9mZnNldDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQdXRCeUlkVmFyaWFudCBQdXRCeUlk
VmFyaWFudDo6c2V0dGVyKAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQsIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSwKKyAgICBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxs
TGlua1N0YXR1cykKK3sKKyAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7CisgICAgcmVzdWx0Lm1f
a2luZCA9IFNldHRlcjsKKyAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Cisg
ICAgaWYgKGNoYWluKSB7CisgICAgICAgIGNoYWluLT5nYXRoZXJDaGVja3MocmVzdWx0Lm1fY29u
c3RhbnRDaGVja3MpOworICAgICAgICByZXN1bHQubV9hbHRlcm5hdGVCYXNlID0gY2hhaW4tPnRl
cm1pbmFsUHJvdG90eXBlKCk7CisgICAgfQorICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsK
KyAgICByZXN1bHQubV9zcGVjaWZpY1ZhbHVlID0gc3BlY2lmaWNWYWx1ZTsKKyAgICByZXN1bHQu
bV9jYWxsTGlua1N0YXR1cyA9IHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1cyk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwogU3RydWN0dXJlKiBQdXRCeUlkVmFyaWFudDo6b2xkU3RydWN0dXJlRm9y
VHJhbnNpdGlvbigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uKTsK
QEAgLTQ0LDE4ICsxMDgsMzAgQEAgU3RydWN0dXJlKiBQdXRCeUlkVmFyaWFudDo6b2xkU3RydWN0
dXJlRgogCiBib29sIFB1dEJ5SWRWYXJpYW50Ojp3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3QKIHsK
LSAgICByZXR1cm4ga2luZCgpID09IFRyYW5zaXRpb247CisgICAgc3dpdGNoIChraW5kKCkpIHsK
KyAgICBjYXNlIFRyYW5zaXRpb246CisgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9CiAKIGJv
b2wgUHV0QnlJZFZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0CiB7Ci0gICAgaWYg
KGtpbmQoKSAhPSBUcmFuc2l0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAg
aWYgKG9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBu
ZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKKyAgICBzd2l0Y2ggKGtpbmQoKSkg
eworICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZUZvclRy
YW5zaXRpb24oKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKTsKKyAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJldHVybiB0cnVl
OworICAgIH0KK30KKworYm9vbCBQdXRCeUlkVmFyaWFudDo6bWFrZXNDYWxscygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGtpbmQoKSA9PSBTZXR0ZXI7CiB9CiAKIGJvb2wgUHV0QnlJZFZhcmlhbnQ6
OmF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcikKQEAgLTEzNywxNCAr
MjEzLDI3IEBAIHZvaWQgUHV0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnQKICAgICAg
ICAgCiAgICAgY2FzZSBSZXBsYWNlOgogICAgICAgICBvdXQucHJpbnQoCi0gICAgICAgICAgICAi
PFJlcGxhY2U6ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsICIsIG9mZnNl
dCgpLCAiPiIpOworICAgICAgICAgICAgIjxSZXBsYWNlOiAiLCBpbkNvbnRleHQoc3RydWN0dXJl
KCksIGNvbnRleHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIj4iKTsKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKICAgICBjYXNlIFRyYW5zaXRpb246CiAgICAgICAgIG91dC5wcmludCgK
ICAgICAgICAgICAgICI8VHJhbnNpdGlvbjogIiwgaW5Db250ZXh0KG9sZFN0cnVjdHVyZSgpLCBj
b250ZXh0KSwgIiAtPiAiLAogICAgICAgICAgICAgcG9pbnRlckR1bXBJbkNvbnRleHQobmV3U3Ry
dWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAgICAgIGxpc3REdW1wSW5Db250ZXh0
KGNvbnN0YW50Q2hlY2tzKCksIGNvbnRleHQpLCAiXSwgIiwgb2Zmc2V0KCksICI+Iik7CisgICAg
ICAgICAgICBsaXN0RHVtcEluQ29udGV4dChjb25zdGFudENoZWNrcygpLCBjb250ZXh0KSwgIl0s
IG9mZnNldCA9ICIsIG9mZnNldCgpLCAiPiIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgIGNhc2UgU2V0dGVyOgorICAgICAgICBvdXQucHJpbnQoCisgICAgICAgICAgICAiPFNldHRl
cjogIiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCisgICAgICAgICAg
ICBsaXN0RHVtcEluQ29udGV4dChjb25zdGFudENoZWNrcygpLCBjb250ZXh0KSwgIl0iKTsKKyAg
ICAgICAgaWYgKG1fYWx0ZXJuYXRlQmFzZSkKKyAgICAgICAgICAgIG91dC5wcmludCgiLCBhbHRl
cm5hdGVCYXNlID0gIiwgaW5Db250ZXh0KEpTVmFsdWUobV9hbHRlcm5hdGVCYXNlKSwgY29udGV4
dCkpOworICAgICAgICBpZiAobV9zcGVjaWZpY1ZhbHVlKQorICAgICAgICAgICAgb3V0LnByaW50
KCIsIHNwZWNpZmljVmFsdWUgPSAiLCBpbkNvbnRleHQobV9zcGVjaWZpY1ZhbHVlLCBjb250ZXh0
KSk7CisgICAgICAgIG91dC5wcmludCgiLCBvZmZzZXQgPSAiLCBtX29mZnNldCk7CisgICAgICAg
IG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtTdGF0dXMpOworICAgICAgICBvdXQu
cHJpbnQoIj4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAx
NzA1NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNDMgKzMyLDM4IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
CitjbGFzcyBDYWxsTGlua1N0YXR1czsKKwogY2xhc3MgUHV0QnlJZFZhcmlhbnQgewogcHVibGlj
OgogICAgIGVudW0gS2luZCB7CiAgICAgICAgIE5vdFNldCwKICAgICAgICAgUmVwbGFjZSwKLSAg
ICAgICAgVHJhbnNpdGlvbgorICAgICAgICBUcmFuc2l0aW9uLAorICAgICAgICBTZXR0ZXIKICAg
ICB9OwogICAgIAogICAgIFB1dEJ5SWRWYXJpYW50KCkKICAgICAgICAgOiBtX2tpbmQoTm90U2V0
KQogICAgICAgICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIpCisgICAgICAgICwgbV9hbHRlcm5h
dGVCYXNlKG51bGxwdHIpCiAgICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKICAgICB7
CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCByZXBsYWNlKGNvbnN0IFN0
cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCi0gICAgewotICAg
ICAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX2tpbmQgPSBSZXBs
YWNlOwotICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgICAg
IHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
CisgICAgUHV0QnlJZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKKyAgICBQdXRCeUlk
VmFyaWFudCYgb3BlcmF0b3I9KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7CisKKyAgICBzdGF0aWMg
UHV0QnlJZFZhcmlhbnQgcmVwbGFjZSgKKyAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1
Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCk7CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5SWRW
YXJpYW50IHRyYW5zaXRpb24oCiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0
dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgUGFzc1JlZlB0cjxJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluPiBzdHJ1Y3R1cmVDaGFpbiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQot
ICAgIHsKLSAgICAgICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwotICAgICAgICByZXN1bHQubV9r
aW5kID0gVHJhbnNpdGlvbjsKLSAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gb2xkU3Ry
dWN0dXJlOwotICAgICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7Ci0g
ICAgICAgIGlmIChzdHJ1Y3R1cmVDaGFpbikKLSAgICAgICAgICAgIHN0cnVjdHVyZUNoYWluLT5n
YXRoZXJDaGVja3MocmVzdWx0Lm1fY29uc3RhbnRDaGVja3MpOwotICAgICAgICByZXN1bHQubV9v
ZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgICAgICBj
b25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBzdHJ1Y3R1cmVDaGFpbiwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KTsKKyAgICAKKyAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgc2V0dGVyKAorICAg
ICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LCBKU1ZhbHVlIHNwZWNpZmljVmFsdWUsCisgICAgICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4q
IGNoYWluLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKTsK
ICAgICAKICAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KICAgICAKQEAg
LTc3LDE5ICs3MiwxOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBz
dHJ1Y3R1cmUoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBSZXBsYWNl
KTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIp
OwogICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7CiAgICAgfQogICAgIAogICAgIGNvbnN0
IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VS
VChraW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVwbGFjZSk7CisgICAgICAgIEFT
U0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkg
PT0gU2V0dGVyKTsKICAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOwogICAgIH0KICAgICAK
ICAgICBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpCiAgICAgewotICAgICAgICBBU1NFUlQo
a2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2UpOworICAgICAgICBBU1NF
UlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09
IFNldHRlcik7CiAgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKICAgICB9CiAgICAgCkBA
IC0xMDMsNiArOTgsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIHdyaXRlc1N0cnVjdHVyZXMoKSBj
b25zdDsKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OworICAgIGJvb2wgbWFr
ZXNDYWxscygpIGNvbnN0OwogICAgIAogICAgIGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tW
ZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkgY29uc3QKICAgICB7CkBAIC0xMTUsNiArMTExLDI0IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OwogICAgIH0KICAgICAKKyAgICBKU09i
amVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgp
ID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX2FsdGVybmF0ZUJhc2U7CisgICAgfQorICAg
IAorICAgIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoa2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX3NwZWNpZmljVmFsdWU7Cisg
ICAgfQorICAgIAorICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBt
X2NhbGxMaW5rU3RhdHVzLmdldCgpOworICAgIH0KKwogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2Uo
Y29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKTsKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKQEAgLTEyNyw3ICsxNDEsMTAgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1
cmVTZXQgbV9vbGRTdHJ1Y3R1cmU7CiAgICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZTsKICAg
ICBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yIG1fY29uc3RhbnRDaGVja3M7CisgICAgSlNP
YmplY3QqIG1fYWx0ZXJuYXRlQmFzZTsKKyAgICBKU1ZhbHVlIG1fc3BlY2lmaWNWYWx1ZTsKICAg
ICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtT
dGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShy
ZXZpc2lvbiAxNzA1NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDYgKzE3MSwxMCBAQCBwcml2YXRlOgog
ICAgIC8vIEhhbmRsZSBjYWxscy4gVGhpcyByZXNvbHZlcyBpc3N1ZXMgc3Vycm91bmRpbmcgaW5s
aW5pbmcgYW5kIGludHJpbnNpY3MuCiAgICAgdm9pZCBoYW5kbGVDYWxsKAogICAgICAgICBpbnQg
cmVzdWx0LCBOb2RlVHlwZSBvcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCB1bnNpZ25lZCBpbnN0
cnVjdGlvblNpemUsCisgICAgICAgIE5vZGUqIGNhbGxUYXJnZXQsIGludCBhcmdDb3VudCwgaW50
IHJlZ2lzdGVyT2Zmc2V0LCBDYWxsTGlua1N0YXR1cywKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbik7CisgICAgdm9pZCBoYW5kbGVDYWxsKAorICAgICAgICBpbnQgcmVzdWx0LCBO
b2RlVHlwZSBvcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCB1bnNpZ25lZCBpbnN0cnVjdGlvblNp
emUsCiAgICAgICAgIE5vZGUqIGNhbGxUYXJnZXQsIGludCBhcmdDb3VudCwgaW50IHJlZ2lzdGVy
T2Zmc2V0LCBDYWxsTGlua1N0YXR1cyk7CiAgICAgdm9pZCBoYW5kbGVDYWxsKGludCByZXN1bHQs
IE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCB1bnNpZ25lZCBpbnN0cnVjdGlv
blNpemUsIGludCBjYWxsZWUsIGludCBhcmdDb3VudCwgaW50IHJlZ2lzdGVyT2Zmc2V0KTsKICAg
ICB2b2lkIGhhbmRsZUNhbGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCk7CkBAIC02NDAsMTAgKzY0NCwxMCBAQCBwcml2YXRlOgogICAgICAgICBt
X251bVBhc3NlZFZhckFyZ3MrKzsKICAgICB9CiAgICAgCi0gICAgTm9kZSogYWRkQ2FsbChpbnQg
cmVzdWx0LCBOb2RlVHlwZSBvcCwgTm9kZSogY2FsbGVlLCBpbnQgYXJnQ291bnQsIGludCByZWdp
c3Rlck9mZnNldCkKKyAgICBOb2RlKiBhZGRDYWxsV2l0aG91dFNldHRpbmdSZXN1bHQoCisgICAg
ICAgIE5vZGVUeXBlIG9wLCBOb2RlKiBjYWxsZWUsIGludCBhcmdDb3VudCwgaW50IHJlZ2lzdGVy
T2Zmc2V0LAorICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQogICAgIHsKLSAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKLSAgICAgICAg
CiAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGNhbGxlZSk7CiAgICAgICAgIHNpemVfdCBwYXJhbWV0
ZXJTbG90cyA9IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBKU1N0YWNrOjpDYWxsZXJG
cmFtZUFuZFBDU2l6ZSArIGFyZ0NvdW50OwogICAgICAgICBpZiAocGFyYW1ldGVyU2xvdHMgPiBt
X3BhcmFtZXRlclNsb3RzKQpAQCAtNjUzLDggKzY1NywxOCBAQCBwcml2YXRlOgogICAgICAgICBm
b3IgKGludCBpID0gMCArIGR1bW15VGhpc0FyZ3VtZW50OyBpIDwgYXJnQ291bnQ7ICsraSkKICAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChp
LCByZWdpc3Rlck9mZnNldCkpKTsKIAotICAgICAgICBOb2RlKiBjYWxsID0gYWRkVG9HcmFwaChO
b2RlOjpWYXJBcmcsIG9wLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSk7Ci0gICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KSwgY2FsbCk7CisgICAgICAgIHJldHVybiBhZGRU
b0dyYXBoKE5vZGU6OlZhckFyZywgb3AsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pKTsK
KyAgICB9CisgICAgCisgICAgTm9kZSogYWRkQ2FsbCgKKyAgICAgICAgaW50IHJlc3VsdCwgTm9k
ZVR5cGUgb3AsIE5vZGUqIGNhbGxlZSwgaW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQs
CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCisgICAgeworICAgICAgICBOb2Rl
KiBjYWxsID0gYWRkQ2FsbFdpdGhvdXRTZXR0aW5nUmVzdWx0KAorICAgICAgICAgICAgb3AsIGNh
bGxlZSwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0LCBwcmVkaWN0aW9uKTsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFJlZyhyZXN1bHQpOworICAgICAgICBpZiAocmVzdWx0UmVnLmlz
VmFsaWQoKSkKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KSwgY2FsbCk7
CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KICAgICAKQEAgLTk5Miw2ICsxMDA2LDE2IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgTm9kZSogY2FsbFRhcmdldCwg
aW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBpbnQgcmVnaXN0ZXJPZmZzZXQsCiAgICAg
Q2FsbExpbmtTdGF0dXMgY2FsbExpbmtTdGF0dXMpCiB7CisgICAgaGFuZGxlQ2FsbCgKKyAgICAg
ICAgcmVzdWx0LCBvcCwga2luZCwgaW5zdHJ1Y3Rpb25TaXplLCBjYWxsVGFyZ2V0LCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywKKyAgICAgICAgcmVnaXN0ZXJPZmZzZXQsIGNhbGxMaW5rU3Rh
dHVzLCBnZXRQcmVkaWN0aW9uKCkpOworfQorCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVD
YWxsKAorICAgIGludCByZXN1bHQsIE5vZGVUeXBlIG9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQg
a2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLAorICAgIE5vZGUqIGNhbGxUYXJnZXQsIGlu
dCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgaW50IHJlZ2lzdGVyT2Zmc2V0LAorICAgIENh
bGxMaW5rU3RhdHVzIGNhbGxMaW5rU3RhdHVzLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQor
ewogICAgIEFTU0VSVChyZWdpc3Rlck9mZnNldCA8PSAwKTsKICAgICBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRp
b25LaW5kRm9yKGtpbmQpOwogICAgIApAQCAtMTAwMiwxMiArMTAyNiwxMSBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAgICAgICAvLyBPZGRseSwgdGhpcyBjb25mbGF0ZXMg
Y2FsbHMgdGhhdCBoYXZlbid0IGV4ZWN1dGVkIHdpdGggY2FsbHMgdGhhdCBiZWhhdmVkIHN1ZmZp
Y2llbnRseSBwb2x5bW9ycGhpY2FsbHkKICAgICAgICAgLy8gdGhhdCB3ZSBjYW5ub3Qgb3B0aW1p
emUgdGhlbS4KICAgICAgICAgCi0gICAgICAgIGFkZENhbGwocmVzdWx0LCBvcCwgY2FsbFRhcmdl
dCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAg
YWRkQ2FsbChyZXN1bHQsIG9wLCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgcmVnaXN0ZXJPZmZzZXQsIHByZWRpY3Rpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIAogICAgIHVuc2lnbmVkIG5leHRPZmZzZXQgPSBtX2N1cnJlbnRJbmRleCArIGluc3RydWN0
aW9uU2l6ZTsKLSAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigp
OwogCiAgICAgaWYgKEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gY2FsbExpbmtTdGF0dXMu
aW50ZXJuYWxGdW5jdGlvbigpKSB7CiAgICAgICAgIGlmIChoYW5kbGVDb25zdGFudEludGVybmFs
RnVuY3Rpb24ocmVzdWx0LCBmdW5jdGlvbiwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBwcmVkaWN0aW9uLCBzcGVjaWFsaXphdGlvbktpbmQpKSB7CkBAIC0xMDE5
LDcgKzEwNDIsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICAvLyBDYW4gb25seSBoYW5kbGUgdGhpcyB1c2luZyB0aGUgZ2Vu
ZXJpYyBjYWxsIGhhbmRsZXIuCi0gICAgICAgIGFkZENhbGwocmVzdWx0LCBvcCwgY2FsbFRhcmdl
dCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAg
YWRkQ2FsbChyZXN1bHQsIG9wLCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgcmVnaXN0ZXJPZmZzZXQsIHByZWRpY3Rpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgICAgICAKQEAgLTEwNTYsNyArMTA3OSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUNhbGwoCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgTm9kZSogY2FsbCA9
IGFkZENhbGwocmVzdWx0LCBvcCwgY2FsbFRhcmdldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICBOb2RlKiBjYWxsID0gYWRkQ2FsbChyZXN1bHQsIG9w
LCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQs
IHByZWRpY3Rpb24pOwogCiAgICAgaWYgKGtub3duRnVuY3Rpb24pIAogICAgICAgICBjYWxsLT5n
aXZlS25vd25GdW5jdGlvbihrbm93bkZ1bmN0aW9uKTsKQEAgLTEyMDMsOSArMTIyNiwxMiBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgCiAgICAgc2l6ZV90
IGFyZ3VtZW50UG9zaXRpb25TdGFydCA9IG1fZ3JhcGgubV9hcmd1bWVudFBvc2l0aW9ucy5zaXpl
KCk7CiAKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0UmVnKHJlc3VsdE9wZXJhbmQpOworICAg
IGlmIChyZXN1bHRSZWcuaXNWYWxpZCgpKQorICAgICAgICByZXN1bHRSZWcgPSBtX2lubGluZVN0
YWNrVG9wLT5yZW1hcE9wZXJhbmQocmVzdWx0UmVnKTsKKyAgICAKICAgICBJbmxpbmVTdGFja0Vu
dHJ5IGlubGluZVN0YWNrRW50cnkoCi0gICAgICAgIHRoaXMsIGNvZGVCbG9jaywgY29kZUJsb2Nr
LCBtX2dyYXBoLmxhc3RCbG9jaygpLCBjYWxsTGlua1N0YXR1cy5mdW5jdGlvbigpLAotICAgICAg
ICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9w
ZXJhbmQpKSwKKyAgICAgICAgdGhpcywgY29kZUJsb2NrLCBjb2RlQmxvY2ssIG1fZ3JhcGgubGFz
dEJsb2NrKCksIGNhbGxMaW5rU3RhdHVzLmZ1bmN0aW9uKCksIHJlc3VsdFJlZywKICAgICAgICAg
KFZpcnR1YWxSZWdpc3RlcilpbmxpbmVDYWxsRnJhbWVTdGFydCwgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIGtpbmQpOwogICAgIAogICAgIC8vIFRoaXMgaXMgd2hlcmUgdGhlIGFjdHVhbCBp
bmxpbmluZyByZWFsbHkgaGFwcGVucy4KQEAgLTE3NTcsNyArMTc4Myw4IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgICAgIGxvYWRlZFZhbHVlID0gd2Vha0pTQ29u
c3RhbnQodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpOwogICAgIGVsc2UgewogICAgICAgICBsb2Fk
ZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAotICAgICAgICAgICAgcHJlZGljdGlvbiwgYmFz
ZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwKKyAgICAgICAgICAgIHZhcmlh
bnQuY2FsbExpbmtTdGF0dXMoKSA/IFNwZWNDZWxsT3RoZXIgOiBwcmVkaWN0aW9uLAorICAgICAg
ICAgICAgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwKICAgICAgICAg
ICAgIHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSA/IEdldEdldHRlclNldHRlckJ5T2Zmc2V0IDog
R2V0QnlPZmZzZXQpOwogICAgIH0KICAgICAKQEAgLTE4MDEsNyArMTgyOCw3IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgCiAgICAgaGFuZGxlQ2FsbCgKICAgICAg
ICAgZGVzdGluYXRpb25PcGVyYW5kLCBDYWxsLCBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGws
IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X2lkKSwKLSAgICAgICAgZ2V0dGVyLCBudW1iZXJPZlBh
cmFtZXRlcnMgLSAxLCByZWdpc3Rlck9mZnNldCwgKnZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSk7
CisgICAgICAgIGdldHRlciwgbnVtYmVyT2ZQYXJhbWV0ZXJzIC0gMSwgcmVnaXN0ZXJPZmZzZXQs
ICp2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCksIHByZWRpY3Rpb24pOwogfQogCiB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjplbWl0UHV0QnlJZCgKQEAgLTE4NTIsNyArMTg3OSw4IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgQVNTRVJUKHB1dEJ5SWRTdGF0dXMubnVtVmFy
aWFudHMoKSA9PSAxKTsKICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IHB1dEJ5
SWRTdGF0dXNbMF07CiAgICAgCi0gICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJp
YW50OjpSZXBsYWNlKSB7CisgICAgc3dpdGNoICh2YXJpYW50LmtpbmQoKSkgeworICAgIGNhc2Ug
UHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2U6IHsKICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVj
dHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0dXJlKCkp
KSwgYmFzZSk7CiAgICAgICAgIGhhbmRsZVB1dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXJOdW1i
ZXIsIHZhcmlhbnQub2Zmc2V0KCksIHZhbHVlKTsKICAgICAgICAgaWYgKG1fZ3JhcGguY29tcGls
YXRpb24oKSkKQEAgLTE4NjAsNTcgKzE4ODgsMTE2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZVB1dEJ5SWQoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKHZhcmlh
bnQua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7Ci0gICAgICAgIGVtaXRQ
dXRCeUlkKGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0Rp
cmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhZGRUb0dyYXBoKENoZWNrU3Ry
dWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1
cmUoKSkpLCBiYXNlKTsKLSAgICBlbWl0Q2hlY2tzKHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSk7
CisgICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbjogeworICAgICAgICBhZGRUb0dy
YXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFu
dC5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKKyAgICAgICAgZW1pdENoZWNrcyh2YXJpYW50LmNv
bnN0YW50Q2hlY2tzKCkpOwogCi0gICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJh
bnNpdGlvbigpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsK
KyAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50cmFu
c2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKICAgICAKLSAgICBOb2Rl
KiBwcm9wZXJ0eVN0b3JhZ2U7Ci0gICAgVHJhbnNpdGlvbiogdHJhbnNpdGlvbiA9IG1fZ3JhcGgu
bV90cmFuc2l0aW9ucy5hZGQoCi0gICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNp
dGlvbigpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKKyAgICAgICAgTm9kZSogcHJvcGVydHlT
dG9yYWdlOworICAgICAgICBUcmFuc2l0aW9uKiB0cmFuc2l0aW9uID0gbV9ncmFwaC5tX3RyYW5z
aXRpb25zLmFkZCgKKyAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlv
bigpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKKworICAgICAgICBpZiAodmFyaWFudC5yZWFs
bG9jYXRlc1N0b3JhZ2UoKSkgewogCi0gICAgaWYgKHZhcmlhbnQucmVhbGxvY2F0ZXNTdG9yYWdl
KCkpIHsKKyAgICAgICAgICAgIC8vIElmIHdlJ3JlIGdyb3dpbmcgdGhlIHByb3BlcnR5IHN0b3Jh
Z2UgdGhlbiBpdCBtdXN0IGJlIGJlY2F1c2Ugd2UncmUKKyAgICAgICAgICAgIC8vIHN0b3Jpbmcg
aW50byB0aGUgb3V0LW9mLWxpbmUgc3RvcmFnZS4KKyAgICAgICAgICAgIEFTU0VSVCghaXNJbmxp
bmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpOwogCi0gICAgICAgIC8vIElmIHdlJ3JlIGdyb3dp
bmcgdGhlIHByb3BlcnR5IHN0b3JhZ2UgdGhlbiBpdCBtdXN0IGJlIGJlY2F1c2Ugd2UncmUKLSAg
ICAgICAgLy8gc3RvcmluZyBpbnRvIHRoZSBvdXQtb2YtbGluZSBzdG9yYWdlLgotICAgICAgICBB
U1NFUlQoIWlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKTsKLQotICAgICAgICBpZiAo
IXZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KSB7Ci0gICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKAotICAgICAgICAg
ICAgICAgIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBPcEluZm8odHJhbnNpdGlvbiksIGJhc2Up
OworICAgICAgICAgICAgaWYgKCF2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9
IGFkZFRvR3JhcGgoCisgICAgICAgICAgICAgICAgICAgIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
LCBPcEluZm8odHJhbnNpdGlvbiksIGJhc2UpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKAorICAgICAgICAgICAgICAg
ICAgICBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBPcEluZm8odHJhbnNpdGlvbiksCisgICAg
ICAgICAgICAgICAgICAgIGJhc2UsIGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKSk7Cisg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwcm9wZXJ0eVN0b3Jh
Z2UgPSBhZGRUb0dyYXBoKAotICAgICAgICAgICAgICAgIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UsIE9wSW5mbyh0cmFuc2l0aW9uKSwKLSAgICAgICAgICAgICAgICBiYXNlLCBhZGRUb0dyYXBo
KEdldEJ1dHRlcmZseSwgYmFzZSkpOworICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHZh
cmlhbnQub2Zmc2V0KCkpKQorICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRk
VG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2UpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQotICAgICAgICAgICAg
cHJvcGVydHlTdG9yYWdlID0gYmFzZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcHJvcGVy
dHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2UpOwotICAgIH0KIAotICAg
IGFkZFRvR3JhcGgoUHV0U3RydWN0dXJlLCBPcEluZm8odHJhbnNpdGlvbiksIGJhc2UpOworICAg
ICAgICBhZGRUb0dyYXBoKFB1dFN0cnVjdHVyZSwgT3BJbmZvKHRyYW5zaXRpb24pLCBiYXNlKTsK
IAotICAgIGFkZFRvR3JhcGgoCi0gICAgICAgIFB1dEJ5T2Zmc2V0LAotICAgICAgICBPcEluZm8o
bV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSksCi0gICAgICAgIHByb3BlcnR5U3Rv
cmFnZSwKLSAgICAgICAgYmFzZSwKLSAgICAgICAgdmFsdWUpOwotCi0gICAgU3RvcmFnZUFjY2Vz
c0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7Ci0gICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ID0g
dmFyaWFudC5vZmZzZXQoKTsKLSAgICBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVy
ID0gaWRlbnRpZmllck51bWJlcjsKLSAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYXBw
ZW5kKHN0b3JhZ2VBY2Nlc3NEYXRhKTsKKyAgICAgICAgYWRkVG9HcmFwaCgKKyAgICAgICAgICAg
IFB1dEJ5T2Zmc2V0LAorICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNz
RGF0YS5zaXplKCkpLAorICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlLAorICAgICAgICAgICAg
YmFzZSwKKyAgICAgICAgICAgIHZhbHVlKTsKKworICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBz
dG9yYWdlQWNjZXNzRGF0YTsKKyAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ID0gdmFy
aWFudC5vZmZzZXQoKTsKKyAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJl
ciA9IGlkZW50aWZpZXJOdW1iZXI7CisgICAgICAgIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0
YS5hcHBlbmQoc3RvcmFnZUFjY2Vzc0RhdGEpOwogCi0gICAgaWYgKG1fZ3JhcGguY29tcGlsYXRp
b24oKSkKLSAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJ
ZCgpOworICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQorICAgICAgICAgICAgbV9n
cmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpTZXR0ZXI6IHsK
KyAgICAgICAgTm9kZSogb3JpZ2luYWxCYXNlID0gYmFzZTsKKyAgICAgICAgCisgICAgICAgIGFk
ZFRvR3JhcGgoCisgICAgICAgICAgICBDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRk
U3RydWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0dXJlKCkpKSwgYmFzZSk7CisgICAgICAgIAorICAg
ICAgICBlbWl0Q2hlY2tzKHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKSk7CisgICAgICAgIAorICAg
ICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCisgICAgICAgICAgICBiYXNlID0gd2Vh
a0pTQ29uc3RhbnQodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpOworICAgICAgICAKKyAgICAgICAg
Tm9kZSogbG9hZGVkVmFsdWU7CisgICAgICAgIGlmICh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSkK
KyAgICAgICAgICAgIGxvYWRlZFZhbHVlID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5zcGVjaWZp
Y1ZhbHVlKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGxvYWRlZFZhbHVlID0gaGFu
ZGxlR2V0QnlPZmZzZXQoCisgICAgICAgICAgICAgICAgU3BlY0NlbGxPdGhlciwgYmFzZSwgaWRl
bnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwKKyAgICAgICAgICAgICAgICBHZXRHZXR0
ZXJTZXR0ZXJCeU9mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE5vZGUqIHNl
dHRlciA9IGFkZFRvR3JhcGgoR2V0U2V0dGVyLCBsb2FkZWRWYWx1ZSk7CisgICAgICAgIAorICAg
ICAgICAvLyBNYWtlIGEgY2FsbC4gV2UgZG9uJ3QgdHJ5IHRvIGdldCBmYW5jeSB3aXRoIHVzaW5n
IHRoZSBzbWFsbGVzdCBvcGVyYW5kIG51bWJlciBiZWNhdXNlCisgICAgICAgIC8vIHRoZSBzdGFj
ayBsYXlvdXQgcGhhc2Ugc2hvdWxkIGNvbXByZXNzIHRoZSBzdGFjayBhbnl3YXkuCisgICAgCisg
ICAgICAgIHVuc2lnbmVkIG51bWJlck9mUGFyYW1ldGVycyA9IDA7CisgICAgICAgIG51bWJlck9m
UGFyYW1ldGVycysrOyAvLyBUaGUgJ3RoaXMnIGFyZ3VtZW50LgorICAgICAgICBudW1iZXJPZlBh
cmFtZXRlcnMrKzsgLy8gVGhlIG5ldyB2YWx1ZS4KKyAgICAgICAgbnVtYmVyT2ZQYXJhbWV0ZXJz
Kys7IC8vIFRydWUgcmV0dXJuIFBDLgorICAgIAorICAgICAgICAvLyBTdGFydCB3aXRoIGEgcmVn
aXN0ZXIgb2Zmc2V0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGxhc3QgaW4tdXNlIHJlZ2lzdGVy
LgorICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgK
KyAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9udW1DYWxs
ZWVSZWdpc3RlcnMgLSAxKS5vZmZzZXQoKTsKKyAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0gbnVt
YmVyT2ZQYXJhbWV0ZXJzOworICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBKU1N0YWNrOjpDYWxs
RnJhbWVIZWFkZXJTaXplOworICAgIAorICAgICAgICAvLyBHZXQgdGhlIGFsaWdubWVudCByaWdo
dC4KKyAgICAgICAgcmVnaXN0ZXJPZmZzZXQgPSAtV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKAor
ICAgICAgICAgICAgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIC1yZWdp
c3Rlck9mZnNldCk7CisgICAgCisgICAgICAgIGVuc3VyZUxvY2FscygKKyAgICAgICAgICAgIG1f
aW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS50b0xvY2FsKCkpOworICAgIAorICAgICAgICBpbnQgbmV4
dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXpl
OworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgb3JpZ2luYWxC
YXNlLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4
dFJlZ2lzdGVyKyspLCB2YWx1ZSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgIAorICAgICAgICBo
YW5kbGVDYWxsKAorICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCksIENhbGws
IElubGluZUNhbGxGcmFtZTo6U2V0dGVyQ2FsbCwKKyAgICAgICAgICAgIE9QQ09ERV9MRU5HVEgo
b3BfcHV0X2J5X2lkKSwgc2V0dGVyLCBudW1iZXJPZlBhcmFtZXRlcnMgLSAxLCByZWdpc3Rlck9m
ZnNldCwKKyAgICAgICAgICAgICp2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCksIFNwZWNPdGhlcik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgZGVmYXVsdDogeworICAgICAgICBl
bWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywg
aXNEaXJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfSB9CiB9CiAKIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OnByZXBhcmVUb1BhcnNlQmxvY2soKQpAQCAtMjY5Miw4ICsyNzc5LDggQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX3JldDoK
ICAgICAgICAgICAgIGZsdXNoRm9yUmV0dXJuKCk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lKCkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9y
ZXR1cm5WYWx1ZS5pc1ZhbGlkKCkpOwotICAgICAgICAgICAgICAgIHNldERpcmVjdChtX2lubGlu
ZVN0YWNrVG9wLT5tX3JldHVyblZhbHVlLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpKSwgSW1tZWRpYXRlU2V0V2l0aEZsdXNoKTsKKyAgICAgICAg
ICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9yZXR1cm5WYWx1ZS5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICAgICAgICAgIHNldERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZh
bHVlLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
KSwgSW1tZWRpYXRlU2V0V2l0aEZsdXNoKTsKICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNr
VG9wLT5tX2RpZFJldHVybiA9IHRydWU7CiAgICAgICAgICAgICAgICAgaWYgKG1faW5saW5lU3Rh
Y2tUb3AtPm1fdW5saW5rZWRCbG9ja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAg
IC8vIElmIHdlJ3JlIHJldHVybmluZyBmcm9tIHRoZSBmaXJzdCBibG9jaywgdGhlbiB3ZSdyZSBk
b25lIHBhcnNpbmcuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJl
dmlzaW9uIDE3MDU3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMDksNyArMTIwOSw3IEBAIHN0YXRpYyBib29sIHRyeUNhY2hl
UHV0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgbGlzdC0+YWRkQWNjZXNzKFB1dEJ5SWRBY2Nl
c3M6OnNldHRlcigKICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwKICAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSA/IFB1dEJ5SWRBY2Nlc3M6
OlNldHRlciA6IFB1dEJ5SWRBY2Nlc3M6OkN1c3RvbVNldHRlciwKLSAgICAgICAgICAgIHN0cnVj
dHVyZSwgcHJvdG90eXBlQ2hhaW4sIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7
CisgICAgICAgICAgICBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgc2xvdC5jdXN0
b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsKIAogICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0
Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNh
bGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkp
OwpAQCAtMTM0MSw3ICsxMzQxLDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRQdXRCeUlkTGlzdChF
eGVjU3RhdAogICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoUHV0QnlJZEFjY2Vzczo6c2V0dGVyKAog
ICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAg
ICAgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpID8gUHV0QnlJZEFjY2Vzczo6U2V0dGVyIDogUHV0
QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyLAotICAgICAgICAgICAgc3RydWN0dXJlLCBwcm90b3R5
cGVDaGFpbiwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsKKyAgICAgICAgICAg
IHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBzbG90LmN1c3RvbVNldHRlcigpLCBz
dHViUm91dGluZSkpOwogCiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2Rl
QmxvY2spOwogICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENv
ZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVy
ZUNoYWluLmNwcAkocmV2aXNpb24gMTcwNTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw2
ICsxMzAsMTUgQEAgYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjppc05vcm1hbGl6ZQogICAg
IHJldHVybiB0cnVlOwogfQogCitib29sIEludGVuZGVkU3RydWN0dXJlQ2hhaW46OnRha2VzU2xv
d1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChhdChpKS0+dGFrZXNTbG93UGF0aEluREZH
Rm9ySW1wdXJlUHJvcGVydHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKIEpTT2JqZWN0KiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjp0
ZXJtaW5hbFByb3RvdHlwZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFtX3ZlY3Rvci5pc0VtcHR5
KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGVuZGVkU3RydWN0dXJlQ2hhaW4uaAkocmV2aXNpb24gMTcwNTcxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Miw2ICs1Miw4IEBAIHB1YmxpYzoKICAgICBib29sIG1heUludGVyY2VwdFN0b3JlVG8o
Vk0mLCBTdHJpbmdJbXBsKiB1aWQpOwogICAgIGJvb2wgaXNOb3JtYWxpemVkKCk7CiAgICAgCisg
ICAgYm9vbCB0YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpOworICAgIAogICAg
IEpTVmFsdWUgcHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gbV9wcm90b3R5cGU7IH0KICAgICAK
ICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLnNpemUoKTsgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9leGl0LWZyb20tc2V0dGVyLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZXhpdC1m
cm9tLXNldHRlci5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvZXhpdC1mcm9tLXNldHRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIz
IEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIG8gPSB7X2Y6NDJ9OworICAgIG8uX19kZWZpbmVT
ZXR0ZXJfXygiZiIsIGZ1bmN0aW9uKHZhbHVlKSB7IHRoaXMuX2YgPSB2YWx1ZSAqIDEwMDsgfSk7
CisgICAgdmFyIG4gPSA1MDAwMDsKKyAgICBmdW5jdGlvbiBmb28ob18sIHZfKSB7CisgICAgICAg
IHZhciBvID0gb18uZjsKKyAgICAgICAgdmFyIHYgPSB2Xy5mOworICAgICAgICBvLmYgPSB2Owor
ICAgICAgICBvLmYgPSB2ICsgMTsKKyAgICB9CisgICAgbm9JbmxpbmUoZm9vKTsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICBmb28oe2Y6b30sIHtmOjExfSk7Cisg
ICAgfQorICAgIGlmIChvLl9mICE9ICgxMSArIDEpICogMTAwKQorICAgICAgICB0aHJvdyAiRXJy
b3I6IGJhZCBvLl9mOiAiICsgby5fZjsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkg
eworICAgICAgICBmb28oe2Y6b30sIHtmOjEwMDAwMDAwMDB9KTsKKyAgICB9CisgICAgaWYgKG8u
X2YgIT0gMTAwICogKDEwMDAwMDAwMDAgKyAxKSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQg
by5fZiAoMik6ICIgKyBvLl9mOworfSkoKTsKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9wb2x5LWNoYWluLXNldHRlci5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3BvbHktY2hhaW4tc2V0dGVyLmpzCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wb2x5LWNoYWluLXNl
dHRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACitmdW5jdGlvbiBDb25zKCkg
eworfQorQ29ucy5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXygiZiIsIGZ1bmN0aW9uKHZhbHVl
KSB7CisgICAgY291bnRlcisrOworICAgIHRoaXMuX2YgPSB2YWx1ZTsKK30pOworQ29ucy5wcm90
b3R5cGUuX19kZWZpbmVHZXR0ZXJfXygiZiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5fZjsg
fSk7CisKK2Z1bmN0aW9uIGZvbyhvLCB2KSB7CisgICAgby5mID0gdjsKKyAgICByZXR1cm4gby5m
OworfQorCitub0lubGluZShmb28pOworCit2YXIgY291bnRlciA9IDA7CisKK2Z1bmN0aW9uIHRl
c3QobywgdmFsdWUsIGV4cGVjdGVkQ291bnQpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKG8sIHZh
bHVlKTsKKyAgICBpZiAocmVzdWx0ICE9IHZhbHVlKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IkJhZCByZXN1bHQ6ICIgKyByZXN1bHQpOworICAgIGlmIChjb3VudGVyICE9IGV4cGVjdGVkQ291
bnQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGNvdW50ZXIgdmFsdWU6ICIgKyBjb3Vu
dGVyKTsKK30KKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgeworICAgIHRlc3Qo
bmV3IENvbnMoKSwgaSwgY291bnRlciArIDEpOworICAgIAorICAgIHZhciBvID0gbmV3IENvbnMo
KTsKKyAgICBvLmcgPSA1NDsKKyAgICB0ZXN0KG8sIGksIGNvdW50ZXIgKyAxKTsKK30KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcG9seS1jaGFpbi10aGVuLXNldHRl
ci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Bv
bHktY2hhaW4tdGhlbi1zZXR0ZXIuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL3BvbHktY2hhaW4tdGhlbi1zZXR0ZXIuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzMyBAQAorZnVuY3Rpb24gQ29uczEoKSB7Cit9CitDb25zMS5wcm90b3R5
cGUuZiA9IDQyOworCitmdW5jdGlvbiBDb25zMigpIHsKK30KK0NvbnMyLnByb3RvdHlwZS5fX2Rl
ZmluZVNldHRlcl9fKCJmIiwgZnVuY3Rpb24odmFsdWUpIHsKKyAgICBjb3VudGVyKys7CisgICAg
dGhpcy5fZiA9IHZhbHVlOworfSk7CitDb25zMi5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXygi
ZiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5fZjsgfSk7CisKK2Z1bmN0aW9uIGZvbyhvLCB2
YWx1ZSkgeworICAgIG8uZiA9IHZhbHVlOworICAgIHJldHVybiBvLmY7Cit9CisKK25vSW5saW5l
KGZvbyk7CisKK3ZhciBjb3VudGVyID0gMDsKKworZnVuY3Rpb24gdGVzdChvLCB2YWx1ZSwgZXhw
ZWN0ZWRDb3VudCkgeworICAgIHZhciByZXN1bHQgPSBmb28obywgdmFsdWUpOworICAgIGlmIChy
ZXN1bHQgIT0gdmFsdWUpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHJlc3VsdDogIiAr
IHJlc3VsdCk7CisgICAgaWYgKGNvdW50ZXIgIT0gZXhwZWN0ZWRDb3VudCkKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJCYWQgY291bnRlciB2YWx1ZTogIiArIGNvdW50ZXIpOworfQorCitmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAgdGVzdChuZXcgQ29uczEoKSwgaSwg
Y291bnRlcik7CisgICAgdGVzdChuZXcgQ29uczIoKSwgaSwgY291bnRlciArIDEpOworfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wb2x5LXNldHRlci1jb21iby5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3BvbHkt
c2V0dGVyLWNvbWJvLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9wb2x5LXNldHRlci1jb21iby5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQzIEBACitmdW5jdGlvbiBDb25zMSgpIHsKK30KK0NvbnMxLnByb3RvdHlwZS5mID0gNDI7CisK
K2Z1bmN0aW9uIENvbnMyKCkgeworfQorQ29uczIucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX18o
ImYiLCBmdW5jdGlvbih2YWx1ZSkgeworICAgIGNvdW50ZXIrKzsKKyAgICB0aGlzLl9mID0gdmFs
dWU7Cit9KTsKK0NvbnMyLnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9fKCJmIiwgZnVuY3Rpb24o
KSB7IHJldHVybiB0aGlzLl9mOyB9KTsKKworZnVuY3Rpb24gZm9vKG8sIHZhbHVlKSB7CisgICAg
by5mID0gdmFsdWU7CisgICAgcmV0dXJuIG8uZjsKK30KKworbm9JbmxpbmUoZm9vKTsKKwordmFy
IGNvdW50ZXIgPSAwOworCitmdW5jdGlvbiB0ZXN0KG8sIHZhbHVlLCBleHBlY3RlZENvdW50KSB7
CisgICAgdmFyIHJlc3VsdCA9IGZvbyhvLCB2YWx1ZSk7CisgICAgaWYgKHJlc3VsdCAhPSB2YWx1
ZSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgcmVzdWx0OiAiICsgcmVzdWx0KTsKKyAg
ICBpZiAoY291bnRlciAhPSBleHBlY3RlZENvdW50KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IkJhZCBjb3VudGVyIHZhbHVlOiAiICsgY291bnRlcik7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBp
IDwgMTAwMDAwOyArK2kpIHsKKyAgICB0ZXN0KG5ldyBDb25zMSgpLCBpLCBjb3VudGVyKTsKKyAg
ICB0ZXN0KG5ldyBDb25zMigpLCBpLCBjb3VudGVyICsgMSk7CisgICAgCisgICAgdmFyIG8gPSB7
fTsKKyAgICBvLl9fZGVmaW5lU2V0dGVyX18oImYiLCBmdW5jdGlvbih2YWx1ZSkgeworICAgICAg
ICB0aGlzLl9mID0gdmFsdWU7CisgICAgICAgIGNvdW50ZXIrKzsKKyAgICB9KTsKKyAgICBvLl9f
ZGVmaW5lR2V0dGVyX18oImYiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuX2Y7IH0pOworICAg
IHRlc3QobywgaSwgY291bnRlciArIDEpOworCisgICAgdGVzdCh7ZjogNDJ9LCBpLCBjb3VudGVy
KTsKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcG9seS1zZXR0
ZXItdGhlbi1zZWxmLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvcG9seS1zZXR0ZXItdGhlbi1zZWxmLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wb2x5LXNldHRlci10aGVuLXNlbGYuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyOCBAQAorZnVuY3Rpb24gZm9vKG8sIHZhbHVlKSB7Cisg
ICAgby5mID0gdmFsdWU7CisgICAgcmV0dXJuIG8uZjsKK30KKworbm9JbmxpbmUoZm9vKTsKKwor
dmFyIGNvdW50ZXIgPSAwOworCitmdW5jdGlvbiB0ZXN0KG8sIHZhbHVlLCBleHBlY3RlZENvdW50
KSB7CisgICAgdmFyIHJlc3VsdCA9IGZvbyhvLCB2YWx1ZSk7CisgICAgaWYgKHJlc3VsdCAhPSB2
YWx1ZSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgcmVzdWx0OiAiICsgcmVzdWx0KTsK
KyAgICBpZiAoY291bnRlciAhPSBleHBlY3RlZENvdW50KQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoIkJhZCBjb3VudGVyIHZhbHVlOiAiICsgY291bnRlcik7Cit9CisKK2ZvciAodmFyIGkgPSAw
OyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIgbyA9IHt9OworICAgIG8uX19kZWZpbmVTZXR0
ZXJfXygiZiIsIGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgIGNvdW50ZXIrKzsKKyAgICAgICAg
dGhpcy5fZiA9IHZhbHVlOworICAgIH0pOworICAgIG8uX19kZWZpbmVHZXR0ZXJfXygiZiIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5fZjsgfSk7CisgICAgdGVzdChvLCBpLCBjb3VudGVyICsg
MSk7CisKKyAgICB0ZXN0KHtmOiA0Mn0sIGksIGNvdW50ZXIpOworfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy93ZWlyZC1zZXR0ZXItY291bnRlci5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3dlaXJkLXNldHRlci1j
b3VudGVyLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy93ZWlyZC1zZXR0ZXItY291bnRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2
IEBACitmdW5jdGlvbiBmb28obywgdmFsdWUpIHsKKyAgICBvLmYgPSB2YWx1ZTsKKyAgICByZXR1
cm4gby5mOworfQorCitub0lubGluZShmb28pOworCit2YXIgY291bnRlciA9IDA7CisKK2Z1bmN0
aW9uIHRlc3QobywgdmFsdWUsIGV4cGVjdGVkQ291bnQpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9v
KG8sIHZhbHVlKTsKKyAgICBpZiAocmVzdWx0ICE9IHZhbHVlKQorICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIkJhZCByZXN1bHQ6ICIgKyByZXN1bHQpOworICAgIGlmIChjb3VudGVyICE9IGV4cGVj
dGVkQ291bnQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGNvdW50ZXIgdmFsdWU6ICIg
KyBjb3VudGVyKTsKK30KKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgeworICAg
IHZhciBvID0ge307CisgICAgby5fX2RlZmluZVNldHRlcl9fKCJmIiwgZnVuY3Rpb24odmFsdWUp
IHsKKyAgICAgICAgY291bnRlcisrOworICAgICAgICB0aGlzLl9mID0gdmFsdWU7CisgICAgfSk7
CisgICAgby5fX2RlZmluZUdldHRlcl9fKCJmIiwgZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLl9m
OyB9KTsKKyAgICB0ZXN0KG8sIGksIGNvdW50ZXIgKyAxKTsKK30K
</data>
<flag name="review"
          id="258732"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>