<?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>161729</bug_id>
          
          <creation_ts>2016-09-07 19:23:40 -0700</creation_ts>
          <short_desc>We should inline operationConvertJSValueToBoolean into JIT code</short_desc>
          <delta_ts>2016-09-08 16:21:45 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>kling</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>rniwa</cc>
    
    <cc>sukolsak</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1227483</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-07 19:23:40 -0700</bug_when>
    <thetext>Speedometer spends around 1% of its time in this function. Lets inline it to not pay for the overhead of the call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227484</commentid>
    <comment_count>1</comment_count>
      <attachid>288226</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-07 19:26:49 -0700</bug_when>
    <thetext>Created attachment 288226
WIP

This patch has some other stuff for HasOwnProperty that I was experimenting with.
The interesting bits related to this bug are the AssemblyHelpers function: convertValueToBoolean</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227485</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-07 19:27:09 -0700</bug_when>
    <thetext>I still need to make masqueradesAsUndefined work as expected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227832</commentid>
    <comment_count>3</comment_count>
      <attachid>288327</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-08 14:43:10 -0700</bug_when>
    <thetext>Created attachment 288327
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227835</commentid>
    <comment_count>4</comment_count>
      <attachid>288329</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-08 14:44:24 -0700</bug_when>
    <thetext>Created attachment 288329
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227838</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-08 14:46:04 -0700</bug_when>
    <thetext>Attachment 288329 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:1530:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227839</commentid>
    <comment_count>6</comment_count>
      <attachid>288329</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-08 14:47:20 -0700</bug_when>
    <thetext>Comment on attachment 288329
patch

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

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:1694
&gt; +        bool shouldCheckMasqueradesAsUndefined = !masqueradesAsUndefinedWatchpointIsStillValid();

Where do you register the MasqueradesAsUndefined watchpoint?

Hint: everyone else seems to do it in FixupPhase.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:1840
&gt; +        bool shouldCheckMasqueradesAsUndefined = !masqueradesAsUndefinedWatchpointIsStillValid();

Ditto.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:1843
&gt; +        bool shouldCheckMasqueradesAsUndefined = !masqueradesAsUndefinedWatchpointIsStillValid();

Ditto.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:2002
&gt; +            bool shouldCheckMasqueradesAsUndefined = !masqueradesAsUndefinedWatchpointIsStillValid();

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227854</commentid>
    <comment_count>7</comment_count>
      <attachid>288332</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-08 14:59:42 -0700</bug_when>
    <thetext>Created attachment 288332
patch

Nice catch. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227857</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-08 15:01:41 -0700</bug_when>
    <thetext>Attachment 288332 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:1530:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227908</commentid>
    <comment_count>9</comment_count>
      <attachid>288332</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-08 16:21:39 -0700</bug_when>
    <thetext>Comment on attachment 288332
patch

Clearing flags on attachment: 288332

Committed r205675: &lt;http://trac.webkit.org/changeset/205675&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227909</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-08 16:21:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288226</attachid>
            <date>2016-09-07 19:26:49 -0700</date>
            <delta_ts>2016-09-08 14:43:10 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>26830</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIwNTQ5NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjY3MCw2ICsyNjcwLDE0IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgY2FzZSBIYXNPd25Qcm9wZXJ0eTogeworICAg
ICAgICAvLyBGSVhNRTogV2UgY2FuIGRldGVybWluZSB3aGVuIHRoZSBwcm9wZXJ0eSBkZWZpbml0
ZWx5IGV4aXN0cyBiYXNlZCBvbiBhYnN0cmFjdAorICAgICAgICAvLyB2YWx1ZSBpbmZvcm1hdGlv
bi4KKyAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxp
bWl0KTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVu
Z3RoOiB7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CShyZXZpc2lvbiAyMDU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUzOCw2ICsyNTM4LDE3IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwKICAgICAgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGdldChvcGVyYW5kKSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KKworICAgIGNhc2UgSGFzT3duUHJvcGVydHlJbnRyaW5zaWM6IHsKKyAg
ICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGluc2VydENoZWNrcygpOworCisgICAgICAgIE5vZGUqIHRo
aXNWYWx1ZSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNl
dCkpOworICAgICAgICBOb2RlKiBrZXkgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MSwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRP
cGVyYW5kKSwgYWRkVG9HcmFwaChIYXNPd25Qcm9wZXJ0eSwgdGhpc1ZhbHVlLCBrZXkpKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAg
ICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2Ji
ZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2Ji
ZXJpemUuaAkocmV2aXNpb24gMjA1NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4Niw2ICs0ODYsNyBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3
YXJkVmFyYXJnczoKICAgICBjYXNlIFRvUHJpbWl0aXZlOgogICAgIGNhc2UgSW46CisgICAgY2Fz
ZSBIYXNPd25Qcm9wZXJ0eToKICAgICBjYXNlIFZhbHVlQWRkOgogICAgIGNhc2UgU2V0RnVuY3Rp
b25OYW1lOgogICAgIGNhc2UgR2V0RHluYW1pY1ZhcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDIwNTQ5NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDYgKzE3NCw3
IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIFRvU3Ry
aW5nOgogICAgIGNhc2UgQ2FsbFN0cmluZ0NvbnN0cnVjdG9yOgogICAgIGNhc2UgSW46CisgICAg
Y2FzZSBIYXNPd25Qcm9wZXJ0eToKICAgICBjYXNlIEp1bXA6CiAgICAgY2FzZSBCcmFuY2g6CiAg
ICAgY2FzZSBTd2l0Y2g6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAJKHJldmlzaW9uIDIwNTQ5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyODgsNiArMTI4OCwxOSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNl
IEhhc093blByb3BlcnR5OiB7CisgICAgICAgICAgICBmaXhFZGdlPE9iamVjdFVzZT4obm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxh
dGVJbnQzMigpKQorICAgICAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KG5vZGUtPmNoaWxk
MigpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmaXhFZGdlPFN0cmluZ1Vz
ZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgLy9lbHNlIGlmIChub2RlLT5jaGlsZDIo
KS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpCisgICAgICAgICAgICAvLyAgICBmaXhFZGdlPFN0
cmluZ1VzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgLy9lbHNlCisgICAgICAgICAg
ICAvLyAgICBmaXhFZGdlPFVudHlwZWRVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBDaGVjazogewogICAgICAgICAgICAg
bV9ncmFwaC5kb1RvQ2hpbGRyZW4oCiAgICAgICAgICAgICAgICAgbm9kZSwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDIwNTQ5NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzI5LDYgKzMyOSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNy
byhOZXdTdHJpbmdPYmplY3QsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKE1ha2VSb3BlLCBO
b2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhJbiwgTm9kZVJlc3VsdEJvb2xlYW4gfCBOb2RlTXVz
dEdlbmVyYXRlKSBcCisgICAgbWFjcm8oSGFzT3duUHJvcGVydHksIE5vZGVSZXN1bHRCb29sZWFu
IHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFByb2ZpbGVUeXBlLCBOb2RlTXVzdEdl
bmVyYXRlKSBcCiAgICAgbWFjcm8oUHJvZmlsZUNvbnRyb2xGbG93LCBOb2RlTXVzdEdlbmVyYXRl
KSBcCiAgICAgbWFjcm8oU2V0RnVuY3Rpb25OYW1lLCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9u
IDIwNTQ5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4NjYsNiArMTg2NiwzNyBAQCBleHRlcm4gIkMiIHZvaWQgSklU
X09QRVJBVElPTiB0cmlnZ2VyUmVvCiAgICAgb3B0aW1pemVkQ29kZUJsb2NrLT5qZXR0aXNvbihQ
cm9maWxlcjo6SmV0dGlzb25EdWVUb09TUkV4aXQsIENvdW50UmVvcHRpbWl6YXRpb24pOwogfQog
CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc093blByb3BlcnR5SW50
ZWdlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIGludDMyX3Qga2V5KQorewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG9iamVj
dC0+aGFzT3duUHJvcGVydHkoZXhlYywga2V5KSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkhhc093blByb3BlcnR5U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIG9iamVjdCwgSlNTdHJpbmcqIGtleSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lKGtleS0+dG9JZGVudGlmaWVyKGV4ZWMpKTsKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0LT5oYXNP
d25Qcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzT3duUHJvcGVydHlHZW5lcmljKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIG9iamVjdCwgRW5jb2RlZEpTVmFsdWUga2V5KQoreworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8g
cHJvcGVydHlOYW1lID0gSlNWYWx1ZTo6ZGVjb2RlKGtleSkudG9Qcm9wZXJ0eUtleShleGVjKTsK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4ob2JqZWN0LT5oYXNPd25Qcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKSk7Cit9CisK
ICNpZiBFTkFCTEUoRlRMX0pJVCkKIHN0YXRpYyBib29sIHNob3VsZFRyaWdnZXJGVExDb21waWxl
KENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlKiBqaXRDb2RlKQogewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDIwNTQ5NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xODYsNiArMTg2LDEwIEBAIHZvaWQgSklUX09QRVJBVElPTiBkZWJ1Z09wZXJhdGlvblBy
aW50U3AKIAogdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhDb2Rl
QmxvY2sqLCBPU1JFeGl0QmFzZSopIFdURl9JTlRFUk5BTDsKIAorRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25IYXNPd25Qcm9wZXJ0eUludGVnZXIoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBpbnQzMl90KTsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
SGFzT3duUHJvcGVydHlTdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1N0cmluZyopOwor
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNPd25Qcm9wZXJ0eUdlbmVy
aWMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSk7CisKICNpZiBVU0UoSlNW
QUxVRTMyXzY0KQogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmFuZG9tKEpTR2xvYmFs
T2JqZWN0Kik7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAy
MDU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODk4LDYgKzg5OCwxMCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjQm9vbGVhbik7CiAgICAgICAgICAgICBi
cmVhazsKIAorICAgICAgICBjYXNlIEhhc093blByb3BlcnR5OgorICAgICAgICAgICAgc2V0UHJl
ZGljdGlvbihTcGVjQm9vbGVhbik7CisgICAgICAgICAgICBicmVhazsKKwogICAgICAgICBjYXNl
IEdldEVudW1lcmFibGVMZW5ndGg6IHsKICAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0lu
dDMyT25seSk7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAyMDU0OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgwLDYgKzI4MCw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QK
ICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKICAgICBjYXNlIE1ha2VSb3BlOgogICAgIGNhc2Ug
SW46CisgICAgY2FzZSBIYXNPd25Qcm9wZXJ0eToKICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246
CiAgICAgY2FzZSBDcmVhdGVEaXJlY3RBcmd1bWVudHM6CiAgICAgY2FzZSBDcmVhdGVTY29wZWRB
cmd1bWVudHM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIwNTQ5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MzMs
MjEgKzE4MzMsMjggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgog
ICAgIGNhc2UgVW50eXBlZFVzZTogewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAg
ICAgICAgRlBSVGVtcG9yYXJ5IGZwclZhbHVlKHRoaXMpOworICAgICAgICBGUFJUZW1wb3Jhcnkg
ZnByVGVtcCh0aGlzKTsKICAgICAKICAgICAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigp
OwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBGUFJS
ZWcgdmFsdWVBc0ZQUiA9IGZwclZhbHVlLmZwcigpOworICAgICAgICBGUFJSZWcgdGVtcEZQUiA9
IGZwclRlbXAuZnByKCk7CisKKyAgICAgICAgYm9vbCBuZWdhdGVSZXN1bHQgPSB0cnVlOworICAg
ICAgICBtX2ppdC5jb252ZXJ0VmFsdWVUb0Jvb2xlYW4oYXJnMUdQUiwgcmVzdWx0R1BSLCB2YWx1
ZUFzRlBSLCB0ZW1wRlBSLCBuZWdhdGVSZXN1bHQpOworICAgICAgICBtX2ppdC5vcjMyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAgICAgCi0g
ICAgICAgIGFyZzEudXNlKCk7Ci0gICAgCi0gICAgICAgIG1faml0Lm1vdmUoYXJnMUdQUiwgcmVz
dWx0R1BSKTsKLSAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpOworICAgICAg
ICAvL21faml0Lm1vdmUoYXJnMUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgLy9tX2ppdC54b3I2
NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZXN1bHRH
UFIpOworCisgICAgICAgIC8vSklUQ29tcGlsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFu
Y2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpOwogICAgIAotICAgICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcigKLSAgICAgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93Q2FzZSwgdGhpcywgb3BlcmF0aW9u
Q29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlc3VsdEdQUiwgYXJnMUdQUiwgTmVlZFRvU3BpbGws
IEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNrTm90TmVlZGVkKSk7CisgICAgICAgIC8v
YWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgIC8vICAgIHNsb3dQYXRoQ2FsbChzbG93Q2Fz
ZSwgdGhpcywgb3BlcmF0aW9uQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlc3VsdEdQUiwgYXJn
MUdQUiwgTmVlZFRvU3BpbGwsIEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNrTm90TmVl
ZGVkKSk7CiAgICAgCi0gICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVk
RXhwbGljaXRseSk7CisgICAgICAgIC8vbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KFZhbHVlVHJ1ZSkpLCByZXN1bHRHUFIpOworICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgY2FzZSBTdHJpbmdVc2U6CkBAIC0yMDA0LDkgKzIwMTEsMTIgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBubwogICAgIAogICAgICAgICAgICAg
dmFsdWUudXNlKCk7CiAgICAgCi0gICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhy
ZXN1bHRHUFIpOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db252ZXJ0SlNW
YWx1ZVRvQm9vbGVhbiwgcmVzdWx0R1BSLCB2YWx1ZUdQUik7Ci0gICAgICAgICAgICBzaWxlbnRG
aWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAgICAgICAvL3NpbGVudFNwaWxsQWxs
UmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAgICAgICBGUFJUZW1wb3JhcnkgZnByVmFsdWUo
dGhpcyk7CisgICAgICAgICAgICBGUFJUZW1wb3JhcnkgZnByVGVtcCh0aGlzKTsKKyAgICAgICAg
ICAgIG1faml0LmNvbnZlcnRWYWx1ZVRvQm9vbGVhbih2YWx1ZUdQUiwgcmVzdWx0R1BSLCBmcHJW
YWx1ZS5mcHIoKSwgZnByVGVtcC5mcHIoKSk7CisgICAgICAgICAgICAvL2NhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlc3VsdEdQUiwgdmFsdWVHUFIpOwor
ICAgICAgICAgICAgLy9zaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CiAgICAgCiAg
ICAgICAgICAgICBicmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHJlc3VsdEdQ
UiwgdGFrZW4pOwogICAgICAgICAgICAganVtcChub3RUYWtlbik7CkBAIC00Nzc3LDYgKzQ3ODcs
NTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2Ug
SW46CiAgICAgICAgIGNvbXBpbGVJbihub2RlKTsKICAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IEhhc093blByb3BlcnR5OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHRoaXNWYWx1
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJl
c3VsdCh0aGlzKTsKKworICAgICAgICBHUFJSZWcgdGhpc1ZhbHVlR1BSID0gdGhpc1ZhbHVlLmdw
cigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAg
IERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwo
dGhpc1ZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaElm
Tm90T2JqZWN0KHRoaXNWYWx1ZUdQUikpOworCisgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKS51
c2VLaW5kKCkgPT0gSW50MzJVc2UpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFu
ZCBwcm9wS2V5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKworICAgICAgICAgICAgR1BSUmVnIHBy
b3BLZXlHUFIgPSBwcm9wS2V5LmdwcigpOworCisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygp
OworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYXNPd25Qcm9wZXJ0eUludGVn
ZXIsIHJlc3VsdEdQUiwgdGhpc1ZhbHVlR1BSLCBwcm9wS2V5R1BSKTsKKyAgICAgICAgICAgIG1f
aml0LmV4Y2VwdGlvbkNoZWNrKCk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+
Y2hpbGQyKCkudXNlS2luZCgpID09IFN0cmluZ1VzZSkgeworICAgICAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgcHJvcEtleSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgICAg
IEdQUlJlZyBwcm9wS2V5R1BSID0gcHJvcEtleS5ncHIoKTsKKworICAgICAgICAgICAgc3BlY3Vs
YXRlU3RyaW5nKG5vZGUtPmNoaWxkMigpLCBwcm9wS2V5R1BSKTsKKyAgICAgICAgICAgIGZsdXNo
UmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhc093blBy
b3BlcnR5U3RyaW5nLCByZXN1bHRHUFIsIHRoaXNWYWx1ZUdQUiwgcHJvcEtleUdQUik7CisgICAg
ICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcEtleSh0aGlzLCBub2RlLT5jaGlsZDIo
KSk7CisKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wS2V5R1BSID0gcHJvcEtleS5ncHIoKTsKKwor
ICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKG5vZGUtPmNoaWxkMigpLCBwcm9wS2V5R1BSKTsK
KyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkhhc093blByb3BlcnR5R2VuZXJpYywgcmVzdWx0R1BSLCB0aGlzVmFsdWVHUFIs
IHByb3BLZXlHUFIpOworICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKyAgICAg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFu
KTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBDb3VudEV4ZWN1dGlvbjoKICAgICAgICAgbV9qaXQuYWRkNjQoVHJ1c3RlZEltbTMyKDEpLCBN
YWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKG5vZGUtPmV4ZWN1dGlvbkNvdW50ZXIoKS0+
YWRkcmVzcygpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyMDU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MjQsNiArMTQyNCwy
MSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShh
cmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
SklUT3BlcmF0aW9uX0VPWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBH
UFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfSklUT3BlcmF0aW9uX0VPSnNzIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRU9KIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVNzaUNJIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBHUFJSZWcgYXJnMSwgY29uc3Qg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0dWJJbmZvKSwgYXJnMSwgVHJ1c3RlZElt
bVB0cih1aWQpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHAJKHJldmlzaW9uIDIwNTQ5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU4LDYgKzI1OCw3IEBA
IGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIENvbXBh
cmVHcmVhdGVyOgogICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKICAgICBjYXNlIENvbXBhcmVT
dHJpY3RFcToKKyAgICBjYXNlIEhhc093blByb3BlcnR5OgogICAgICAgICAvLyBUaGVzZSBhcmUg
T0suCiAgICAgICAgIGJyZWFrOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMDU0OTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyOCw2
ICs2MjgsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEluOgogICAgICAgICAgICAgY29tcGls
ZUluKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBIYXNPd25Qcm9wZXJ0eToK
KyAgICAgICAgICAgIGNvbXBpbGVIYXNPd25Qcm9wZXJ0eSgpOworICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgUHV0QnlJZDoKICAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgogICAg
ICAgICBjYXNlIFB1dEJ5SWRGbHVzaDoKQEAgLTY3MzksNiArNjc0MiwyMyBAQCBwcml2YXRlOgog
ICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlv
bkhhc0dlbmVyaWNQcm9wZXJ0eSksIG1fY2FsbEZyYW1lLCBiYXNlLCBwcm9wZXJ0eSkpOwogICAg
IH0KIAorICAgIHZvaWQgY29tcGlsZUhhc093blByb3BlcnR5KCkKKyAgICB7CisgICAgICAgIExW
YWx1ZSBiYXNlID0gbG93T2JqZWN0KG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUg
cHJvcGVydHk7CisgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBJbnQz
MlVzZSkKKyAgICAgICAgICAgIHByb3BlcnR5ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7
CisgICAgICAgIGVsc2UgaWYgKG1fbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IFN0cmluZ1Vz
ZSkKKyAgICAgICAgICAgIHByb3BlcnR5ID0gbG93U3RyaW5nKG1fbm9kZS0+Y2hpbGQyKCkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm9wZXJ0eSA9IGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDIoKSk7CisKKyAgICAgICAgYXV0byBvcGVyYXRpb24gPSBtX291dC5vcGVyYXRpb24oCisg
ICAgICAgICAgICBtX25vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBJbnQzMlVzZSA/IHN0YXRp
Y19jYXN0PEZ1bmN0aW9uUHRyPihvcGVyYXRpb25IYXNPd25Qcm9wZXJ0eUludGVnZXIpIDoKKyAg
ICAgICAgICAgICAgICBtX25vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UgPyBz
dGF0aWNfY2FzdDxGdW5jdGlvblB0cj4ob3BlcmF0aW9uSGFzT3duUHJvcGVydHlTdHJpbmcpIDog
c3RhdGljX2Nhc3Q8RnVuY3Rpb25QdHI+KG9wZXJhdGlvbkhhc093blByb3BlcnR5R2VuZXJpYykp
OworICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uLCBtX2NhbGxGcmFt
ZSwgYmFzZSwgcHJvcGVydHkpKTsKKyAgICB9CisKICAgICB2b2lkIGNvbXBpbGVIYXNTdHJ1Y3R1
cmVQcm9wZXJ0eSgpCiAgICAgewogICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0pTVmFsdWUobV9u
b2RlLT5jaGlsZDEoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyMDU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyNiw2ICs2MjYs
NjEgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXREdW1iVmlydHVhbENhbAogICAgICAgICB9
KTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCit2b2lkIEFzc2VtYmx5SGVscGVyczo6Y29udmVy
dFZhbHVlVG9Cb29sZWFuKEdQUlJlZyB2YWx1ZSwgR1BSUmVnIHJlc3VsdCwgRlBSUmVnIHZhbHVl
QXNGUFIsIEZQUlJlZyB0ZW1wRlBSLCBib29sIG5lZ2F0ZVJlc3VsdCkKK3sKKyAgICAvLyBJbXBs
ZW1lbnRzIHRoZSBmb2xsb3dpbmcgY29udHJvbCBmbG93IHN0cnVjdHVyZToKKyAgICAvLyBpZiAo
dmFsdWUgaXMgY2VsbCkgeworICAgIC8vICAgICBpZiAodmFsdWUgaXMgc3RyaW5nKQorICAgIC8v
ICAgICAgICAgcmVzdWx0ID0gISF2YWx1ZS0+bGVuZ3RoCisgICAgLy8gICAgIGVsc2UgeworICAg
IC8vICAgICAgICAgZG8gZXZpbCB0aGluZ3MgZm9yIG1hc3F1ZXJhZGVzLWFzLXVuZGVmaW5lZAor
ICAgIC8vICAgICAgICAgcmVzdWx0ID0gdHJ1ZQorICAgIC8vICAgICB9CisgICAgLy8gfSBlbHNl
IGlmICh2YWx1ZSBpcyBpbnQzMikgeworICAgIC8vICAgICByZXN1bHQgPSAhIXVuYm94SW50MzIo
dmFsdWUpCisgICAgLy8gfSBlbHNlIGlmICh2YWx1ZSBpcyBudW1iZXIpIHsKKyAgICAvLyAgICAg
cmVzdWx0ID0gISF1bmJveERvdWJsZSh2YWx1ZSkKKyAgICAvLyB9IGVsc2UgeworICAgIC8vICAg
ICByZXN1bHQgPSB2YWx1ZSA9PSBqc1RydWUKKyAgICAvLyB9CisKKyAgICBKdW1wTGlzdCBkb25l
OworICAgIGF1dG8gaXNOb3ROdW1iZXIgPSBicmFuY2hJZk5vdE51bWJlcih2YWx1ZSk7CisgICAg
YXV0byBpc0RvdWJsZSA9IGJyYW5jaElmTm90SW50MzIodmFsdWUpOyAKKyAgICAvLyBJdCdzIGFu
IGludDMyLgorICAgIGNvbXBhcmUzMihuZWdhdGVSZXN1bHQgPyBFcXVhbCA6IE5vdEVxdWFsLCB2
YWx1ZSwgVHJ1c3RlZEltbTMyKDApLCByZXN1bHQpOworICAgIGRvbmUuYXBwZW5kKGp1bXAoKSk7
CisKKyAgICBpc0RvdWJsZS5saW5rKHRoaXMpOworICAgIHVuYm94RG91YmxlKHZhbHVlLCByZXN1
bHQsIHZhbHVlQXNGUFIpOworICAgIGF1dG8gaXNaZXJvT3JOYU4gPSBicmFuY2hEb3VibGVaZXJv
T3JOYU4odmFsdWVBc0ZQUiwgdGVtcEZQUik7CisgICAgbW92ZShuZWdhdGVSZXN1bHQgPyBUcnVz
dGVkSW1tMzIoMCkgOiBUcnVzdGVkSW1tMzIoMSksIHJlc3VsdCk7CisgICAgZG9uZS5hcHBlbmQo
anVtcCgpKTsKKyAgICBpc1plcm9Pck5hTi5saW5rKHRoaXMpOworICAgIG1vdmUobmVnYXRlUmVz
dWx0ID8gVHJ1c3RlZEltbTMyKDEpIDogVHJ1c3RlZEltbTMyKDApLCByZXN1bHQpOworICAgIGRv
bmUuYXBwZW5kKGp1bXAoKSk7CisKKyAgICBpc05vdE51bWJlci5saW5rKHRoaXMpOworICAgIGF1
dG8gaXNOb3RDZWxsQW5kSXNOb3ROdW1iZXIgPSBicmFuY2hJZk5vdENlbGwodmFsdWUpOworICAg
IGF1dG8gaXNDZWxsQnV0Tm90U3RyaW5nID0gYnJhbmNoOChOb3RFcXVhbCwKKyAgICAgICAgQWRk
cmVzcyh2YWx1ZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihT
dHJpbmdUeXBlKSk7CisgICAgbG9hZDMyKEFkZHJlc3ModmFsdWUsIEpTU3RyaW5nOjpvZmZzZXRP
Zkxlbmd0aCgpKSwgcmVzdWx0KTsKKyAgICBjb21wYXJlMzIobmVnYXRlUmVzdWx0ID8gRXF1YWwg
OiBOb3RFcXVhbCwgcmVzdWx0LCBUcnVzdGVkSW1tMzIoMCksIHJlc3VsdCk7CisgICAgZG9uZS5h
cHBlbmQoanVtcCgpKTsKKworICAgIGlzQ2VsbEJ1dE5vdFN0cmluZy5saW5rKHRoaXMpOworICAg
IC8vIEZJWE1FOiBtYXNxdWVyYWRlcyBhcyB1bmRlZmluZWQgaGVyZS4KKyAgICBtb3ZlKG5lZ2F0
ZVJlc3VsdCA/IFRydXN0ZWRJbW0zMigwKSA6IFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0KTsKKyAg
ICBkb25lLmFwcGVuZChqdW1wKCkpOworCisgICAgaXNOb3RDZWxsQW5kSXNOb3ROdW1iZXIubGlu
ayh0aGlzKTsgCisgICAgY29tcGFyZTMyKG5lZ2F0ZVJlc3VsdCA/IE5vdEVxdWFsIDogRXF1YWws
IHZhbHVlLCBUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0KTsKKworICAgIGRvbmUubGlu
ayh0aGlzKTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVO
QUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmgJKHJldmlzaW9uIDIwNTQ5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MjgsNiArMTUyOCwxMCBAQCBwdWJs
aWM6CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PENsYXNzVHlwZT4ocmVzdWx0R1BSLCBU
cnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIFRydXN0ZWRJbW1QdHIoMCksIHNjcmF0Y2hHUFIxLCBz
Y3JhdGNoR1BSMiwgc2xvd1BhdGgpOwogICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKHN0
cnVjdHVyZS0+Y2xhc3NJbmZvKCkpLCBBZGRyZXNzKHJlc3VsdEdQUiwgSlNEZXN0cnVjdGlibGVP
YmplY3Q6OmNsYXNzSW5mb09mZnNldCgpKSk7CiAgICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICB2b2lkIGNvbnZlcnRWYWx1ZVRvQm9vbGVhbihHUFJSZWcgdmFsdWUsIEdQUlJlZyByZXN1
bHQsIEZQUlJlZywgRlBSUmVnLCBib29sIG5lZ2F0ZVJlc3VsdCA9IGZhbHNlKTsKKyNlbmRpZgog
ICAgIAogcHJvdGVjdGVkOgogICAgIFZNKiBtX3ZtOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyMDU0OTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDAsMTUgKzg0
MCwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfbm90KEluc3RydWN0aW9uKiBjCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfamZhbHNlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29udmVydEpTVmFsdWVUb0Jvb2xl
YW4sIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0
dXJuVmFsdWVHUFIpLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsgLy8gaW52ZXJ0
ZWQhCisKKyAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICBHUFJSZWcgcmVzdWx0ID0gcmVn
VDE7CisgICAgY29udmVydFZhbHVlVG9Cb29sZWFuKHZhbHVlLCByZXN1bHQsIGZwUmVnVDAsIGZw
UmVnVDEpOworICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXN1bHQp
LCBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsgLy8gaW52ZXJ0ZWQhCiB9CiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9qdHJ1ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbnZlcnRKU1ZhbHVlVG9C
b29sZWFuLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblpl
cm8sIHJldHVyblZhbHVlR1BSKSwgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Cisg
ICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgR1BSUmVnIHJlc3VsdCA9IHJlZ1QxOworICAg
IGNvbnZlcnRWYWx1ZVRvQm9vbGVhbih2YWx1ZSwgcmVzdWx0LCBmcFJlZ1QwLCBmcFJlZ1QxKTsK
KyAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVzdWx0KSwgY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9lcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmgJKHJldmlzaW9uIDIwNTQ5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsNiArMTcxLDkgQEAgdHlw
ZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSgogdHlwZWRlZiBFbmNvZGVkSlNW
YWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRVpTeW10YWJKKShFeGVjU3RhdGUq
LCBpbnQzMl90LCBTeW1ib2xUYWJsZSosIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgRW5jb2Rl
ZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VPSVVpKShFeGVjU3RhdGUq
LCBKU09iamVjdCosIFVuaXF1ZWRTdHJpbmdJbXBsKiwgdWludDMyX3QpOwogdHlwZWRlZiBFbmNv
ZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUpKSSkoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBVbmlxdWVkU3RyaW5nSW1wbCopOwor
dHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRU9K
c3MpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNTdHJpbmcqKTsKK3R5cGVkZWYgRW5jb2RlZEpT
VmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VPSikoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BF
UkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FT1opKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJf
dCk7CiB0eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0UpKEV4
ZWNTdGF0ZSopOwogdHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZXJhdGlv
bl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiB0eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJ
T04gKkNfSklUT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5oCShyZXZpc2lvbiAyMDU0OTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuaAkod29ya2luZyBjb3B5
KQpAQCAtNjIsNiArNjIsNyBAQCBlbnVtIEpTX0VYUE9SVF9QUklWQVRFIEludHJpbnNpYyB7CiAg
ICAgSXNSZWdFeHBPYmplY3RJbnRyaW5zaWMsCiAgICAgSXNUeXBlZEFycmF5Vmlld0ludHJpbnNp
YywKICAgICBCb3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGxJbnRyaW5zaWMsCisgICAgSGFzT3du
UHJvcGVydHlJbnRyaW5zaWMsCiAKICAgICAvLyBHZXR0ZXIgaW50cmluc2ljcy4KICAgICBUeXBl
ZEFycmF5TGVuZ3RoSW50cmluc2ljLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDczLDIwICsxNDcz
LDYgQEAgYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZQogICAgIHJldHVy
biB0cnVlOwogfQogCi0vLyBIYXNPd25Qcm9wZXJ0eShPLCBQKSBmcm9tIHNlY3Rpb24gNy4zLjEx
IGluIHRoZSBzcGVjLgotLy8gaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEt
MjYyLzYuMC9pbmRleC5odG1sI3NlYy1oYXNvd25wcm9wZXJ0eQotYm9vbCBKU09iamVjdDo6aGFz
T3duUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBj
b25zdAotewotICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXMsIFByb3BlcnR5U2xvdDo6SW50ZXJu
YWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7Ci0gICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNP
YmplY3QqPih0aGlzKS0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5U2xv
dChjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
Ci19Ci0KLWJvb2wgSlNPYmplY3Q6Omhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAotewotICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXMs
IFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7Ci0gICAg
cmV0dXJuIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+bWV0aG9kVGFibGUoZXhlYy0+dm0o
KSktPmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMp
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCiBib29sIEpTT2JqZWN0OjpkZWxldGVQ
cm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkp
CiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5l
cy5oCShyZXZpc2lvbiAyMDU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5MywyMyBAQCBBTFdB
WVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dElubGluZShKCiAgICAgcmV0dXJuIHRoaXNPYmpl
Y3QtPnB1dElubGluZVNsb3coZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAK
Ky8vIEhhc093blByb3BlcnR5KE8sIFApIGZyb20gc2VjdGlvbiA3LjMuMTEgaW4gdGhlIHNwZWMu
CisvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wL2luZGV4
Lmh0bWwjc2VjLWhhc293bnByb3BlcnR5CitBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6Omhh
c093blByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkg
Y29uc3QKK3sKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzLCBQcm9wZXJ0eVNsb3Q6OkludGVy
bmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOworICAgIGlmIChMSUtFTFkoY29uc3RfY2Fz
dDxKU09iamVjdCo+KHRoaXMpLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVy
dHlTbG90ID09IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpKQorICAgICAgICByZXR1cm4g
SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyks
IGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNPYmpl
Y3QqPih0aGlzKS0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5U2xvdChj
b25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9
CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6aGFzT3duUHJvcGVydHkoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0Cit7CisgICAgUHJvcGVydHlTbG90
IHNsb3QodGhpcywgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93blByb3Bl
cnR5KTsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLT5tZXRob2RUYWJs
ZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChjb25zdF9jYXN0PEpTT2Jq
ZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKICNlbmRpZiAvLyBKU09iamVjdElubGluZXNfaApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCShyZXZpc2lv
biAyMDU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw4IEBAIHZvaWQgT2JqZWN0UHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRf
VFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZywgb2JqZWN0UHJvdG9GdW5jVG9T
dHJpbmcsIERvbnRFbnVtLCAwKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJB
TlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT50b0xvY2FsZVN0cmluZywgb2JqZWN0UHJvdG9GdW5j
VG9Mb2NhbGVTdHJpbmcsIERvbnRFbnVtLCAwKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJ
VEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9mLCBvYmplY3RQcm90b0Z1
bmNWYWx1ZU9mLCBEb250RW51bSwgMCk7Ci0gICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VU
X1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+aGFzT3duUHJvcGVydHksIG9iamVjdFByb3Rv
RnVuY0hhc093blByb3BlcnR5LCBEb250RW51bSwgMSk7CisgICAgLy9KU0NfTkFUSVZFX0ZVTkNU
SU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5oYXNPd25Qcm9wZXJ0eSwg
b2JqZWN0UHJvdG9GdW5jSGFzT3duUHJvcGVydHksIERvbnRFbnVtLCAxKTsKKyAgICBKU0NfTkFU
SVZFX0lOVFJJTlNJQ19GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5oYXNPd25Qcm9wZXJ0eSwg
b2JqZWN0UHJvdG9GdW5jSGFzT3duUHJvcGVydHksIERvbnRFbnVtLCAxLCBIYXNPd25Qcm9wZXJ0
eUludHJpbnNpYyk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04o
dm0ucHJvcGVydHlOYW1lcy0+cHJvcGVydHlJc0VudW1lcmFibGUsIG9iamVjdFByb3RvRnVuY1By
b3BlcnR5SXNFbnVtZXJhYmxlLCBEb250RW51bSwgMSk7CiAgICAgSlNDX05BVElWRV9GVU5DVElP
Tl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+aXNQcm90b3R5cGVPZiwgb2Jq
ZWN0UHJvdG9GdW5jSXNQcm90b3R5cGVPZiwgRG9udEVudW0sIDEpOwogICAgIEpTQ19OQVRJVkVf
RlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPl9fZGVmaW5lR2V0
dGVyX18sIG9iamVjdFByb3RvRnVuY0RlZmluZUdldHRlciwgRG9udEVudW0sIDIpOwpAQCAtOTEs
MTAgKzkyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KIHsK
ICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBT
dHJpY3RNb2RlKTsKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
UHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSB0aGlz
VmFsdWUudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKCF0aGlzT2JqZWN0KQorICAgIGlmIChVTkxJ
S0VMWSghdGhpc09iamVjdCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0aGlzT2JqZWN0LT5o
YXNPd25Qcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288327</attachid>
            <date>2016-09-08 14:43:10 -0700</date>
            <delta_ts>2016-09-08 14:44:24 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>27089</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDU2NjMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2IEBACisyMDE2LTA5LTA4ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlIHNob3VsZCBpbmxpbmUgb3BlcmF0aW9uQ29udmVydEpTVmFsdWVU
b0Jvb2xlYW4gaW50byBKSVQgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYxNzI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBzdHJlc3MvdmFsdWUtdG8tYm9vbGVhbi5qczogQWRkZWQuCisgICAg
ICAgIChhc3NlcnQpOgorICAgICAgICAodGVzdDEpOgorICAgICAgICAodGVzdDIpOgorICAgICAg
ICAodGVzdDMpOgorCiAyMDE2LTA5LTA4ICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNv
bT4KIAogICAgICAgICBEZWxldGUgb2xkZXIgV2ViQXNzZW1ibHkgdGVzdHMKSW5kZXg6IEpTVGVz
dHMvc3RyZXNzL3ZhbHVlLXRvLWJvb2xlYW4uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJl
c3MvdmFsdWUtdG8tYm9vbGVhbi5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy92
YWx1ZS10by1ib29sZWFuLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKK2Z1bmN0
aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJh
ZCBhc3NlcnRpb24iKQorfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworbGV0IHRlc3RzID0gWworICAg
IFt0cnVlLCB0cnVlXSwKKyAgICBbZmFsc2UsIGZhbHNlXSwKKyAgICBbIiIsIGZhbHNlXSwKKyAg
ICBbIiIgKyAiIiArICIiLCBmYWxzZV0sCisgICAgWyJmb28iLCB0cnVlXSwKKyAgICBbImZvbyIg
KyAiYmFyIiwgdHJ1ZV0sCisgICAgW3t9LCB0cnVlXSwKKyAgICBbU3ltYm9sKCksIHRydWVdLAor
ICAgIFt1bmRlZmluZWQsIGZhbHNlXSwKKyAgICBbbnVsbCwgZmFsc2VdLAorICAgIFswLCBmYWxz
ZV0sCisgICAgWy0wLCBmYWxzZV0sCisgICAgWyswLCBmYWxzZV0sCisgICAgW05hTiwgZmFsc2Vd
LAorICAgIFsxMCwgdHJ1ZV0sCisgICAgWzEwLjIwMTIsIHRydWVdLAorICAgIFtmdW5jdGlvbigp
IHsgfSwgdHJ1ZV0sCisgICAgW25ldyBTdHJpbmcoImZvbyIpLCB0cnVlXSwKKyAgICBbbmV3IFN0
cmluZygiIiksIHRydWVdLAorICAgIFtuZXcgU3RyaW5nLCB0cnVlXQorXTsKKworZnVuY3Rpb24g
dGVzdDEoYykgeworICAgIHJldHVybiAhIWM7Cit9Citub0lubGluZSh0ZXN0MSk7CisKK2Z1bmN0
aW9uIHRlc3QyKGMpIHsKKyAgICBpZiAoYykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIGZhbHNlOworfQorbm9JbmxpbmUodGVzdDIpOworCitmdW5jdGlvbiB0ZXN0MyhjKSB7Cisg
ICAgaWYgKCFjKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9Citu
b0lubGluZSh0ZXN0Myk7CisKK2xldCB0ZXN0RnVuY3Rpb25zID0gW3Rlc3QxLCB0ZXN0MiwgdGVz
dDNdOworCitmb3IgKGxldCB0ZXN0RnVuY3Rpb24gb2YgdGVzdEZ1bmN0aW9ucykgeworICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgICAgICBsZXQgaXRlbSA9IHRlc3Rz
W2kgJSB0ZXN0cy5sZW5ndGhdOworICAgICAgICBhc3NlcnQodGVzdEZ1bmN0aW9uKGl0ZW1bMF0p
ID09PSBpdGVtWzFdKTsKKyAgICB9Cit9CisKK2xldCBtYXNxdWVyYWRlciA9IG1ha2VNYXNxdWVy
YWRlcigpOworZm9yIChsZXQgdGVzdEZ1bmN0aW9uIG9mIHRlc3RGdW5jdGlvbnMpIHsKKyAgICBm
b3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgICAgICAgICBhc3NlcnQodGVzdEZ1bmN0aW9uKG1hc3F1
ZXJhZGVyKSA9PT0gZmFsc2UpOworICAgICAgICB9CisgICAgfQorfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTYtMDktMDggIFNh
YW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgV2Ugc2hvdWxkIGlubGlu
ZSBvcGVyYXRpb25Db252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiBpbnRvIEpJVCBjb2RlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE3MjkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJv
ZHVjZXMgYW4gQXNzZW1ibHlIZWxwZXJzIGVtaXR0ZXIgZnVuY3Rpb24KKyAgICAgICAgdGhhdCBy
ZXBsYWNlcyBvcGVyYXRpb25Db252ZXJ0SlNWYWx1ZVRvQm9vbGVhbi4gVGhpcyBvcGVyYXRpb24K
KyAgICAgICAgd2FzIHNob3dpbmcgdXAgd2hlbiBJIHdhcyBkb2luZyBwZXJmb3JtYW5jZSBhbmFs
eXNpcyBmb3IgdGhlCisgICAgICAgIHNwZWVkb21ldGVyIGJlbmNobWFyay4gSSBzYXcgdGhhdCBp
dCB3YXMgc3BlbmRpbmcgYWJvdXQgMSUgb2YKKyAgICAgICAgaXRzIHRpbWUgaW4gdGhpcyBmdW5j
dGlvbi4gSG9wZWZ1bGx5IHRoaXMgcGF0Y2ggY2FuIGhlbHAgdXMgc3BlZWR1cAorICAgICAgICB1
cCBzcGVlZG9tZXRlciBieSBhIGxpdHRsZSBiaXQuCisKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEJyYW5jaCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2gpOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRD
b252ZXJ0VmFsdWVUb0Jvb2xlYW4pOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0QWxsb2NhdGVEZXN0cnVjdGlibGVP
YmplY3QpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAg
ICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamZh
bHNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2p0cnVlKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9qZmFsc2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2p0cnVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfamZh
bHNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qdHJ1ZSk6IERl
bGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9K
SVRPcGVyYXRpb25zLmg6CisKIDIwMTYtMDktMDYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KIAogICAgICAgICBUeXBlZCBhcnJheXMgc2hvdWxkIHVzZSBNYXJrZWRTcGFjZSBpbnN0
ZWFkIG9mIENvcGllZFNwYWNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDIwNTQ5NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2ODQsMjQgKzE2ODQsMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUxvZ2ljYWxOb3QoTgogCiAgICAgY2FzZSBVbnR5cGVkVXNlOiB7CiAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0UGF5bG9hZCh0aGlzLCBSZXVzZSwgYXJnMSwgUGF5bG9hZFdvcmQpOwotICAgICAg
ICBHUFJSZWcgYXJnMVRhZ0dQUiA9IGFyZzEudGFnR1BSKCk7Ci0gICAgICAgIEdQUlJlZyBhcmcx
UGF5bG9hZEdQUiA9IGFyZzEucGF5bG9hZEdQUigpOwotICAgICAgICBKU1ZhbHVlUmVncyBhcmcx
UmVncyA9IGFyZzEuanNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRH
UFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOwotICAgICAgICAKLSAgICAgICAgYXJnMS51c2UoKTsK
KyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5
IHRlbXAodGhpcyk7CisgICAgICAgIEZQUlRlbXBvcmFyeSB2YWx1ZUZQUih0aGlzKTsKKyAgICAg
ICAgRlBSVGVtcG9yYXJ5IHRlbXBGUFIodGhpcyk7CiAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIGFyZzFU
YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSk7Ci0gICAgCi0gICAgICAg
IG1faml0Lm1vdmUoYXJnMVBheWxvYWRHUFIsIHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogCi0gICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgIHNsb3dD
YXNlLCB0aGlzLCBvcGVyYXRpb25Db252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVzdWx0UGF5bG9h
ZEdQUiwgYXJnMVJlZ3MsIE5lZWRUb1NwaWxsLCBFeGNlcHRpb25DaGVja1JlcXVpcmVtZW50OjpD
aGVja05vdE5lZWRlZCkpOwotICAgIAotICAgICAgICBtX2ppdC54b3IzMihUcnVzdGVkSW1tMzIo
MSksIHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxv
YWRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIGJvb2wg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gIW1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOworICAgICAgICBib29sIG5lZ2F0ZVJlc3VsdCA9IHRydWU7CisgICAgICAgIG1faml0
LmVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oYXJnMS5qc1ZhbHVlUmVncygpLCByZXN1bHRHUFIs
IHRlbXAuZ3ByKCksIHZhbHVlRlBSLmZwcigpLCB0ZW1wRlBSLmZwcigpLCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdCwgbmVnYXRlUmVzdWx0KTsKKyAgICAg
ICAgYm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIGNhc2UgU3RyaW5nVXNlOgpAQCAtMTgzMywzMCArMTgyNywyMiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUqIG5vCiAgICAgCiAgICAgY2FzZSBVbnR5cGVkVXNl
OiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgdmFsdWUuZmlsbCgpOwotICAgICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1
ZS50YWdHUFIoKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxv
YWRHUFIoKTsKLQorICAgICAgICBGUFJUZW1wb3JhcnkgdmFsdWVGUFIodGhpcyk7CisgICAgICAg
IEZQUlRlbXBvcmFyeSB0ZW1wRlBSKHRoaXMpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOworICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKworICAgICAgICBKU1Zh
bHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVlUmVncygpOwogICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgIAogICAgICAgICB1c2Uobm9kZS0+Y2hpbGQx
KCkpOwotICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBmYXN0UGF0aCA9IG1faml0LmJy
YW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgdmFsdWVUYWdHUFIsIEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
c2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHZhbHVlVGFn
R1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKTsKIAot
ICAgICAgICBmYXN0UGF0aC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGJyYW5jaFRlc3QzMihKSVRD
b21waWxlcjo6WmVybywgdmFsdWVQYXlsb2FkR1BSLCBub3RUYWtlbik7CisgICAgICAgIGJvb2wg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gIW1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOworICAgICAgICBtX2ppdC5lbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKHZhbHVlUmVn
cywgcmVzdWx0R1BSLCB0ZW1wLmdwcigpLCB2YWx1ZUZQUi5mcHIoKSwgdGVtcEZQUi5mcHIoKSwg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3QpOworICAgICAg
ICBicmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdEdQUiwgbm90VGFrZW4pOwog
ICAgICAgICBqdW1wKHRha2VuLCBGb3JjZUp1bXApOwogCi0gICAgICAgIHNsb3dQYXRoLmxpbmso
Jm1faml0KTsKLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVz
dWx0R1BSLCB2YWx1ZS5qc1ZhbHVlUmVncygpKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lz
dGVycyhyZXN1bHRHUFIpOwotICAgIAotICAgICAgICBicmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6
Ok5vblplcm8sIHJlc3VsdEdQUiwgdGFrZW4pOwotICAgICAgICBqdW1wKG5vdFRha2VuKTsKLSAg
ICAKICAgICAgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjA1NDk0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTgzNiwxOCArMTgzNiwyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
TG9naWNhbE5vdChOCiAgICAgCiAgICAgICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsK
ICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAKLSAgICAgICAg
YXJnMS51c2UoKTsKLSAgICAKLSAgICAgICAgbV9qaXQubW92ZShhcmcxR1BSLCByZXN1bHRHUFIp
OwotICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
VmFsdWVGYWxzZSkpLCByZXN1bHRHUFIpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93
Q2FzZSA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSk7Ci0gICAgCi0gICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dDYXNl
LCB0aGlzLCBvcGVyYXRpb25Db252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVzdWx0R1BSLCBhcmcx
R1BSLCBOZWVkVG9TcGlsbCwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudDo6Q2hlY2tOb3ROZWVk
ZWQpKTsKLSAgICAKLSAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0
PGludDMyX3Q+KFZhbHVlVHJ1ZSkpLCByZXN1bHRHUFIpOwotICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxsZWRF
eHBsaWNpdGx5KTsKKworICAgICAgICBGUFJUZW1wb3JhcnkgdmFsdWVGUFIodGhpcyk7CisgICAg
ICAgIEZQUlRlbXBvcmFyeSB0ZW1wRlBSKHRoaXMpOworCisgICAgICAgIGJvb2wgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gIW1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50SXNTdGlsbFZhbGlkKCk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwor
ICAgICAgICBPcHRpb25hbDxHUFJUZW1wb3Jhcnk+IHNjcmF0Y2g7CisgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgaWYgKHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkgeworICAgICAgICAgICAgc2NyYXRjaCA9IEdQUlRlbXBvcmFyeSh0
aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLT5ncHIoKTsKKyAgICAgICAg
fQorICAgICAgICBib29sIG5lZ2F0ZVJlc3VsdCA9IHRydWU7CisgICAgICAgIG1faml0LmVtaXRD
b252ZXJ0VmFsdWVUb0Jvb2xlYW4oSlNWYWx1ZVJlZ3MoYXJnMUdQUiksIHJlc3VsdEdQUiwgc2Ny
YXRjaEdQUiwgdmFsdWVGUFIuZnByKCksIHRlbXBGUFIuZnByKCksIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0LCBuZWdhdGVSZXN1bHQpOworICAgICAgICBt
X2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgU3RyaW5nVXNlOgpAQCAtMTk5MCw3ICsxOTk0
LDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSogbm8KICAgICAgICAg
ICAgIHZhbHVlLnVzZSgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBmcHJWYWx1ZSh0aGlz
KTsKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBmcHJUZW1wKHRoaXMpOworICAgICAgICAgICAg
T3B0aW9uYWw8R1BSVGVtcG9yYXJ5PiBzY3JhdGNoOworCisgICAgICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICBib29sIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9ICFtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElz
U3RpbGxWYWxpZCgpOworICAgICAgICAgICAgaWYgKHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkgeworICAgICAgICAgICAgICAgIHNjcmF0Y2ggPSBHUFJUZW1wb3JhcnkodGhpcyk7
CisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2gtPmdwcigpOworICAgICAgICAg
ICAgfQorCiAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAg
ICAgICAgICAgRlBSUmVnIHZhbHVlRlBSID0gZnByVmFsdWUuZnByKCk7CisgICAgICAgICAgICBG
UFJSZWcgdGVtcEZQUiA9IGZwclRlbXAuZnByKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGlmIChub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY0ludDMyT25seSkgewogICAg
ICAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSks
IG5vdFRha2VuKTsKQEAgLTIwMDMsMTAgKzIwMjAsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0QnJhbmNoKE5vZGUqIG5vCiAgICAgICAgICAgICB9CiAgICAgCiAgICAgICAgICAgICB2YWx1
ZS51c2UoKTsKLSAgICAKLSAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dEdQUik7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbnZlcnRKU1ZhbHVl
VG9Cb29sZWFuLCByZXN1bHRHUFIsIHZhbHVlR1BSKTsKLSAgICAgICAgICAgIHNpbGVudEZpbGxB
bGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKworICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYyk7CisgICAgICAgICAgICBtX2ppdC5lbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKEpT
VmFsdWVSZWdzKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCB2YWx1ZUZQUiwgdGVt
cEZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3QpOwog
ICAgIAogICAgICAgICAgICAgYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBy
ZXN1bHRHUFIsIHRha2VuKTsKICAgICAgICAgICAgIGp1bXAobm90VGFrZW4pOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24g
MjA1NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MjYsNiArNjI2LDk0IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJz
OjplbWl0RHVtYlZpcnR1YWxDYWwKICAgICAgICAgfSk7CiB9CiAKK3ZvaWQgQXNzZW1ibHlIZWxw
ZXJzOjplbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcg
cmVzdWx0LCBHUFJSZWcgc2NyYXRjaCwgRlBSUmVnIHZhbHVlQXNGUFIsIEZQUlJlZyB0ZW1wRlBS
LCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgYm9vbCBuZWdhdGVSZXN1bHQpCit7CisgICAgLy8gSW1wbGVtZW50cyB0
aGUgZm9sbG93aW5nIGNvbnRyb2wgZmxvdyBzdHJ1Y3R1cmU6CisgICAgLy8gaWYgKHZhbHVlIGlz
IGJvb2xlYW4pIHsKKyAgICAvLyAgICAgcmVzdWx0ID0gdmFsdWUgPT09IHRydWUKKyAgICAvLyB9
IGVsc2UgaWYgKHZhbHVlIGlzIGludGVnZXIpIHsKKyAgICAvLyAgICAgcmVzdWx0ID0gdmFsdWUg
IT09IDAKKyAgICAvLyB9IGVsc2UgaWYgKHZhbHVlIGlzIGRvdWJsZSkgeworICAgIC8vICAgICBy
ZXN1bHQgPSB2YWx1ZSAhPT0gMC4wICYmICFpc05hTih2YWx1ZSk7CisgICAgLy8gfSBlbHNlIGlm
ICh2YWx1ZSBpcyBjZWxsKSB7CisgICAgLy8gICAgIGlmICh2YWx1ZSBpcyBzdHJpbmcpIHsKKyAg
ICAvLyAgICAgICAgICByZXN1bHQgPSB2YWx1ZS5sZW5ndGgoKSAhPT0gMDsKKyAgICAvLyAgICAg
fSBlbHNlIHsKKyAgICAvLyAgICAgICAgICBkbyBjcmF6eSB0aGluZ3MgZm9yIG1hc3F1ZXJhZGVz
IGFzIHVuZGVmaW5lZAorICAgIC8vICAgICB9CisgICAgLy8gfSBlbHNlIHsKKyAgICAvLyAgICAg
cmVzdWx0ID0gZmFsc2U7CisgICAgLy8gfQorICAgIC8vCisgICAgLy8gaWYgKG5lZ2F0ZVJlc3Vs
dCkKKyAgICAvLyAgICAgcmVzdWx0ID0gIXJlc3VsdDsKKworICAgIEp1bXBMaXN0IGRvbmU7Cisg
ICAgYXV0byBub3RCb29sZWFuID0gYnJhbmNoSWZOb3RCb29sZWFuKHZhbHVlLCByZXN1bHQpOwor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgY29tcGFyZTMyKG5lZ2F0ZVJlc3VsdCA/IE5vdEVxdWFs
IDogRXF1YWwsIHZhbHVlLmdwcigpLCBUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0KTsK
KyNlbHNlCisgICAgY29tcGFyZTMyKG5lZ2F0ZVJlc3VsdCA/IEVxdWFsIDogTm90RXF1YWwsIHZh
bHVlLnBheWxvYWRHUFIoKSwgVHJ1c3RlZEltbTMyKDApLCByZXN1bHQpOworI2VuZGlmCisgICAg
ZG9uZS5hcHBlbmQoanVtcCgpKTsKKworICAgIG5vdEJvb2xlYW4ubGluayh0aGlzKTsKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgIGF1dG8gaXNOb3ROdW1iZXIgPSBicmFuY2hJZk5vdE51bWJlcih2
YWx1ZS5ncHIoKSk7CisjZWxzZQorICAgIEFTU0VSVChzY3JhdGNoICE9IEludmFsaWRHUFJSZWcp
OworICAgIGF1dG8gaXNOb3ROdW1iZXIgPSBicmFuY2hJZk5vdE51bWJlcih2YWx1ZSwgc2NyYXRj
aCk7CisjZW5kaWYKKyAgICBhdXRvIGlzRG91YmxlID0gYnJhbmNoSWZOb3RJbnQzMih2YWx1ZSk7
CisKKyAgICAvLyBJdCdzIGFuIGludDMyLgorICAgIGNvbXBhcmUzMihuZWdhdGVSZXN1bHQgPyBF
cXVhbCA6IE5vdEVxdWFsLCB2YWx1ZS5wYXlsb2FkR1BSKCksIFRydXN0ZWRJbW0zMigwKSwgcmVz
dWx0KTsKKyAgICBkb25lLmFwcGVuZChqdW1wKCkpOworCisgICAgaXNEb3VibGUubGluayh0aGlz
KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHVuYm94RG91YmxlKHZhbHVlLmdwcigpLCByZXN1
bHQsIHZhbHVlQXNGUFIpOworI2Vsc2UKKyAgICB1bmJveERvdWJsZSh2YWx1ZSwgdmFsdWVBc0ZQ
UiwgdGVtcEZQUik7CisjZW5kaWYKKyAgICBhdXRvIGlzWmVyb09yTmFOID0gYnJhbmNoRG91Ymxl
WmVyb09yTmFOKHZhbHVlQXNGUFIsIHRlbXBGUFIpOworICAgIG1vdmUobmVnYXRlUmVzdWx0ID8g
VHJ1c3RlZEltbTMyKDApIDogVHJ1c3RlZEltbTMyKDEpLCByZXN1bHQpOworICAgIGRvbmUuYXBw
ZW5kKGp1bXAoKSk7CisgICAgaXNaZXJvT3JOYU4ubGluayh0aGlzKTsKKyAgICBtb3ZlKG5lZ2F0
ZVJlc3VsdCA/IFRydXN0ZWRJbW0zMigxKSA6IFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0KTsKKyAg
ICBkb25lLmFwcGVuZChqdW1wKCkpOworCisgICAgaXNOb3ROdW1iZXIubGluayh0aGlzKTsKKyAg
ICBhdXRvIGlzTm90Q2VsbEFuZElzTm90TnVtYmVyQW5kSXNOb3RCb29sZWFuID0gYnJhbmNoSWZO
b3RDZWxsKHZhbHVlKTsKKyAgICBhdXRvIGlzQ2VsbEJ1dE5vdFN0cmluZyA9IGJyYW5jaDgoTm90
RXF1YWwsCisgICAgICAgIEFkZHJlc3ModmFsdWUucGF5bG9hZEdQUigpLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKTsKKyAgICBsb2FkMzIo
QWRkcmVzcyh2YWx1ZS5wYXlsb2FkR1BSKCksIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSwg
cmVzdWx0KTsKKyAgICBjb21wYXJlMzIobmVnYXRlUmVzdWx0ID8gRXF1YWwgOiBOb3RFcXVhbCwg
cmVzdWx0LCBUcnVzdGVkSW1tMzIoMCksIHJlc3VsdCk7CisgICAgZG9uZS5hcHBlbmQoanVtcCgp
KTsKKworICAgIGlzQ2VsbEJ1dE5vdFN0cmluZy5saW5rKHRoaXMpOworICAgIGlmIChzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQpIHsKKyAgICAgICAgQVNTRVJUKHNjcmF0Y2ggIT0g
SW52YWxpZEdQUlJlZyk7CisgICAgICAgIEp1bXBMaXN0IGlzTm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZDsKKyAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmFwcGVuZChicmFuY2hU
ZXN0OChaZXJvLCBBZGRyZXNzKHZhbHVlLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpKTsKKyAg
ICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodmFsdWUucGF5bG9hZEdQUigpLCByZXN1bHQsIHNjcmF0
Y2gpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgc2NyYXRjaCk7
CisgICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5hcHBlbmQoYnJhbmNoUHRyKE5v
dEVxdWFsLCBBZGRyZXNzKHJlc3VsdCwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHNjcmF0Y2gpKTsKKyAgICAgICAgLy8gV2UgYWN0IGxpa2Ugd2UgYXJlICJ1bmRlZmluZWQiIGhl
cmUuCisgICAgICAgIG1vdmUobmVnYXRlUmVzdWx0ID8gVHJ1c3RlZEltbTMyKDEpIDogVHJ1c3Rl
ZEltbTMyKDApLCByZXN1bHQpOworICAgICAgICBkb25lLmFwcGVuZChqdW1wKCkpOworICAgICAg
ICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICB9CisgICAgbW92
ZShuZWdhdGVSZXN1bHQgPyBUcnVzdGVkSW1tMzIoMCkgOiBUcnVzdGVkSW1tMzIoMSksIHJlc3Vs
dCk7CisgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKKworICAgIC8vIG51bGwgb3IgdW5kZWZpbmVk
LgorICAgIGlzTm90Q2VsbEFuZElzTm90TnVtYmVyQW5kSXNOb3RCb29sZWFuLmxpbmsodGhpcyk7
IAorICAgIG1vdmUobmVnYXRlUmVzdWx0ID8gVHJ1c3RlZEltbTMyKDEpIDogVHJ1c3RlZEltbTMy
KDApLCByZXN1bHQpOworCisgICAgZG9uZS5saW5rKHRoaXMpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIwNTQ5NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1
MjgsNiArMTUyOCw4IEBAIHB1YmxpYzoKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Q8Q2xh
c3NUeXBlPihyZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0
cigwKSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7CiAgICAgICAgIHN0b3Jl
UHRyKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlLT5jbGFzc0luZm8oKSksIEFkZHJlc3MocmVzdWx0
R1BSLCBKU0Rlc3RydWN0aWJsZU9iamVjdDo6Y2xhc3NJbmZvT2Zmc2V0KCkpKTsKICAgICB9CisK
KyAgICB2b2lkIGVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBzY3JhdGNoSWZTaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIEZQUlJlZywgRlBSUmVnLCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgSlNHbG9iYWxPYmplY3QqLCBib29sIG5lZ2F0ZVJlc3VsdCA9IGZhbHNlKTsKICAgICAK
IHByb3RlY3RlZDoKICAgICBWTSogbV92bTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAJKHJldmlzaW9uIDIwNTQ5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDQ3LDcgKzQ0Nyw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfYnlfdmFs
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaW5zdGFuY2VvZikKICAgICAgICAgREVG
SU5FX1NMT1dDQVNFX09QKG9wX2luc3RhbmNlb2ZfY3VzdG9tKQotICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfamZhbHNlKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfamxlc3Mp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qbGVzc2VxKQogICAgICAgICBERUZJTkVf
U0xPV0NBU0VfT1Aob3BfamdyZWF0ZXIpCkBAIC00NTYsNyArNDU1LDYgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2pu
bGVzc2VxKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfam5ncmVhdGVyKQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfam5ncmVhdGVyZXEpCi0gICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9qdHJ1ZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2xvb3BfaGlu
dCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3dhdGNoZG9nKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3BfbHNoaWZ0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShy
ZXZpc2lvbiAyMDU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MjQsNyArNjI0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0
YW5jZW9mKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwog
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2pmYWxzZShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVz
c2VxKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjA1NDk0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzUs
MzEgKzQ3NSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoSW5zdHJ1Y3Rpb24qIGN1CiAK
ICAgICBlbWl0TG9hZChjb25kLCByZWdUMSwgcmVnVDApOwogCi0gICAgQVNTRVJUKChKU1ZhbHVl
OjpCb29sZWFuVGFnICsgMSA9PSBKU1ZhbHVlOjpJbnQzMlRhZykgJiYgIShKU1ZhbHVlOjpJbnQz
MlRhZyArIDEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVnVDEsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSkpOwotICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pmYWxz
ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGludCBjb25kID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kOworICAgIEpTVmFsdWVSZWdzIHZhbHVlKHJlZ1QxLCByZWdUMCk7CisgICAgR1BS
UmVnIHNjcmF0Y2ggPSByZWdUMjsKKyAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDM7CisgICAgYm9v
bCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOworICAgIGVtaXRDb252
ZXJ0VmFsdWVUb0Jvb2xlYW4odmFsdWUsIHJlc3VsdCwgc2NyYXRjaCwgZnBSZWdUMCwgZnBSZWdU
MSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpOwogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotCi0gICAgaWYgKHN1cHBvcnRz
RmxvYXRpbmdQb2ludCgpKSB7Ci0gICAgICAgIC8vIHJlZ1QxIGNvbnRhaW5zIHRoZSB0YWcgZnJv
bSB0aGUgaG90IHBhdGguCi0gICAgICAgIEp1bXAgbm90TnVtYmVyID0gYnJhbmNoMzIoQWJvdmUs
IHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSk7Ci0KLSAgICAgICAgZW1p
dExvYWREb3VibGUoY29uZCwgZnBSZWdUMCk7Ci0gICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaERvdWJsZVplcm9Pck5hTihmcFJlZ1QwLCBmcFJlZ1QxKSwgdGFyZ2V0KTsKLSAgICAgICAg
ZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2pmYWxzZSkpOwotCi0g
ICAgICAgIG5vdE51bWJlci5saW5rKHRoaXMpOwotICAgIH0KLQotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsgLy8gSW52ZXJ0ZWQuCisgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoWmVybywgcmVzdWx0KSwg
dGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTUwOCwzMiArNDkwLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2p0
cnVlKEluc3RydWN0aW9uKiBjdXIKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOwogCiAgICAgZW1pdExvYWQoY29uZCwgcmVnVDEsIHJlZ1QwKTsK
KyAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CisgICAg
SlNWYWx1ZVJlZ3MgdmFsdWUocmVnVDEsIHJlZ1QwKTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IHJl
Z1QyOworICAgIEdQUlJlZyByZXN1bHQgPSByZWdUMzsKKyAgICBlbWl0Q29udmVydFZhbHVlVG9C
b29sZWFuKHZhbHVlLCByZXN1bHQsIHNjcmF0Y2gsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsK
IAotICAgIEFTU0VSVCgoSlNWYWx1ZTo6Qm9vbGVhblRhZyArIDEgPT0gSlNWYWx1ZTo6SW50MzJU
YWcpICYmICEoSlNWYWx1ZTo6SW50MzJUYWcgKyAxKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoQmVsb3csIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpKTsKLSAg
ICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0U2xvd19vcF9qdHJ1ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGludCBjb25k
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotCi0gICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOwotCi0gICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7Ci0gICAgICAgIC8vIHJl
Z1QxIGNvbnRhaW5zIHRoZSB0YWcgZnJvbSB0aGUgaG90IHBhdGguCi0gICAgICAgIEp1bXAgbm90
TnVtYmVyID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93
ZXN0VGFnKSk7Ci0KLSAgICAgICAgZW1pdExvYWREb3VibGUoY29uZCwgZnBSZWdUMCk7Ci0gICAg
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaERvdWJsZU5vblplcm8oZnBSZWdUMCwgZnBSZWdU
MSksIHRhcmdldCk7Ci0gICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xF
TkdUSChvcF9qdHJ1ZSkpOwotCi0gICAgICAgIG5vdE51bWJlci5saW5rKHRoaXMpOwotICAgIH0K
LQotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJl
Z1QxLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25a
ZXJvLCByZXN1bHQpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyMDU0OTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjIsMTUgKzM2
MiwxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoSW5zdHJ1Y3Rpb24qIGN1cnJlCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qZmFsc2UoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwg
cmVnVDApOwogCi0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSksIHRhcmdldCk7Ci0gICAgSnVtcCBpc05v
blplcm8gPSBlbWl0SnVtcElmSW50KHJlZ1QwKTsKKyAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsK
KyAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDE7CisgICAgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsK
KyAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAKLSAg
ICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4oZmFsc2UpKSkpLCB0YXJnZXQpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4odHJ1ZSkpKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwgdmFsdWUpOworICAgIGVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4o
SlNWYWx1ZVJlZ3ModmFsdWUpLCByZXN1bHQsIHNjcmF0Y2gsIGZwUmVnVDAsIGZwUmVnVDEsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKTsKIAotICAgIGlzTm9uWmVyby5saW5rKHRoaXMpOworICAgIGFkZEp1bXAoYnJhbmNoVGVz
dDMyKFplcm8sIHJlc3VsdCksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2plcV9u
dWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NDQsMTUgKzQ0NSwxNCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9lcShJbnN0cnVjdGlvbiogY3VycmVuCiB2b2lkIEpJVDo6ZW1p
dF9vcF9qdHJ1ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMCk7
Ci0KLSAgICBKdW1wIGlzWmVybyA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpKTsKLSAgICBhZGRKdW1wKGVtaXRKdW1wSWZJ
bnQocmVnVDApLCB0YXJnZXQpOwogCi0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSkpLCB0YXJnZXQp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSkpKTsKLQotICAgIGlzWmVyby5saW5r
KHRoaXMpOworICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgIEdQUlJlZyByZXN1bHQgPSBy
ZWdUMTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOworICAgIGJvb2wgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHZhbHVlKTsKKyAgICBlbWl0Q29udmVy
dFZhbHVlVG9Cb29sZWFuKEpTVmFsdWVSZWdzKHZhbHVlKSwgcmVzdWx0LCBzY3JhdGNoLCBmcFJl
Z1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywg
cmVzdWx0KSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04MzcsMjAgKzgzNyw2IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9ub3QoSW5zdHJ1Y3Rpb24qIGMKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamZhbHNlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29udmVydEpTVmFs
dWVUb0Jvb2xlYW4sIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
WmVybywgcmV0dXJuVmFsdWVHUFIpLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsg
Ly8gaW52ZXJ0ZWQhCi19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qdHJ1ZShJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQotewotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA1NDk0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAzMiwxNCArMTAzMiw2IEBAIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBh
cmVHcmUKICAgICByZXR1cm4ganNMZXNzRXE8ZmFsc2U+KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkT3AyKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpKTsKIH0KIAotc2l6ZV90IEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3ApCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0g
ICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3ApLnRvQm9vbGVhbihleGVjKTsKLX0K
LQogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUVxKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikK
IHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMDU0OTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDYgKzE3
MSw5IEBAIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkoKIHR5cGVkZWYg
RW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VaU3ltdGFiSiko
RXhlY1N0YXRlKiwgaW50MzJfdCwgU3ltYm9sVGFibGUqLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBl
ZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FT0lVaSko
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBVbmlxdWVkU3RyaW5nSW1wbCosIHVpbnQzMl90KTsKIHR5
cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VKSkkp
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgVW5pcXVlZFN0cmlu
Z0ltcGwqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3Bl
cmF0aW9uX0VPSnNzKShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTU3RyaW5nKik7Cit0eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FT0opKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1
ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRU9aKShFeGVjU3RhdGUqLCBKU09iamVj
dCosIGludDMyX3QpOwogdHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZXJh
dGlvbl9FKShFeGVjU3RhdGUqKTsKIHR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19K
SVRPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOwogdHlwZWRlZiBKU0NlbGwqIChK
SVRfT1BFUkFUSU9OICpDX0pJVE9wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7CkBA
IC0zNDYsNyArMzQ5LDYgQEAgc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxl
cwogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3NFcShFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKIHNpemVfdCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogc2l6ZV90IEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLXNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkNvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBX
VEZfSU5URVJOQUw7CiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlRXEoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q29tcGFyZVN0cmluZ0VxKEV4ZWNTdGF0ZSosIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkg
V1RGX0lOVEVSTkFMOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288329</attachid>
            <date>2016-09-08 14:44:24 -0700</date>
            <delta_ts>2016-09-08 14:59:42 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>26166</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDU2NjMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2IEBACisyMDE2LTA5LTA4ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlIHNob3VsZCBpbmxpbmUgb3BlcmF0aW9uQ29udmVydEpTVmFsdWVU
b0Jvb2xlYW4gaW50byBKSVQgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYxNzI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBzdHJlc3MvdmFsdWUtdG8tYm9vbGVhbi5qczogQWRkZWQuCisgICAg
ICAgIChhc3NlcnQpOgorICAgICAgICAodGVzdDEpOgorICAgICAgICAodGVzdDIpOgorICAgICAg
ICAodGVzdDMpOgorCiAyMDE2LTA5LTA4ICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNv
bT4KIAogICAgICAgICBEZWxldGUgb2xkZXIgV2ViQXNzZW1ibHkgdGVzdHMKSW5kZXg6IEpTVGVz
dHMvc3RyZXNzL3ZhbHVlLXRvLWJvb2xlYW4uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJl
c3MvdmFsdWUtdG8tYm9vbGVhbi5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy92
YWx1ZS10by1ib29sZWFuLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKK2Z1bmN0
aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJh
ZCBhc3NlcnRpb24iKQorfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworbGV0IHRlc3RzID0gWworICAg
IFt0cnVlLCB0cnVlXSwKKyAgICBbZmFsc2UsIGZhbHNlXSwKKyAgICBbIiIsIGZhbHNlXSwKKyAg
ICBbIiIgKyAiIiArICIiLCBmYWxzZV0sCisgICAgWyJmb28iLCB0cnVlXSwKKyAgICBbImZvbyIg
KyAiYmFyIiwgdHJ1ZV0sCisgICAgW3t9LCB0cnVlXSwKKyAgICBbU3ltYm9sKCksIHRydWVdLAor
ICAgIFt1bmRlZmluZWQsIGZhbHNlXSwKKyAgICBbbnVsbCwgZmFsc2VdLAorICAgIFswLCBmYWxz
ZV0sCisgICAgWy0wLCBmYWxzZV0sCisgICAgWyswLCBmYWxzZV0sCisgICAgW05hTiwgZmFsc2Vd
LAorICAgIFsxMCwgdHJ1ZV0sCisgICAgWzEwLjIwMTIsIHRydWVdLAorICAgIFtmdW5jdGlvbigp
IHsgfSwgdHJ1ZV0sCisgICAgW25ldyBTdHJpbmcoImZvbyIpLCB0cnVlXSwKKyAgICBbbmV3IFN0
cmluZygiIiksIHRydWVdLAorICAgIFtuZXcgU3RyaW5nLCB0cnVlXQorXTsKKworZnVuY3Rpb24g
dGVzdDEoYykgeworICAgIHJldHVybiAhIWM7Cit9Citub0lubGluZSh0ZXN0MSk7CisKK2Z1bmN0
aW9uIHRlc3QyKGMpIHsKKyAgICBpZiAoYykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIGZhbHNlOworfQorbm9JbmxpbmUodGVzdDIpOworCitmdW5jdGlvbiB0ZXN0MyhjKSB7Cisg
ICAgaWYgKCFjKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9Citu
b0lubGluZSh0ZXN0Myk7CisKK2xldCB0ZXN0RnVuY3Rpb25zID0gW3Rlc3QxLCB0ZXN0MiwgdGVz
dDNdOworCitmb3IgKGxldCB0ZXN0RnVuY3Rpb24gb2YgdGVzdEZ1bmN0aW9ucykgeworICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgICAgICBsZXQgaXRlbSA9IHRlc3Rz
W2kgJSB0ZXN0cy5sZW5ndGhdOworICAgICAgICBhc3NlcnQodGVzdEZ1bmN0aW9uKGl0ZW1bMF0p
ID09PSBpdGVtWzFdKTsKKyAgICB9Cit9CisKK2xldCBtYXNxdWVyYWRlciA9IG1ha2VNYXNxdWVy
YWRlcigpOworZm9yIChsZXQgdGVzdEZ1bmN0aW9uIG9mIHRlc3RGdW5jdGlvbnMpIHsKKyAgICBm
b3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgICAgICAgICBhc3NlcnQodGVzdEZ1bmN0aW9uKG1hc3F1
ZXJhZGVyKSA9PT0gZmFsc2UpOworICAgICAgICB9CisgICAgfQorfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTYtMDktMDggIFNh
YW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgV2Ugc2hvdWxkIGlubGlu
ZSBvcGVyYXRpb25Db252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiBpbnRvIEpJVCBjb2RlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE3MjkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJv
ZHVjZXMgYW4gQXNzZW1ibHlIZWxwZXJzIGVtaXR0ZXIgZnVuY3Rpb24KKyAgICAgICAgdGhhdCBy
ZXBsYWNlcyBvcGVyYXRpb25Db252ZXJ0SlNWYWx1ZVRvQm9vbGVhbi4gVGhpcyBvcGVyYXRpb24K
KyAgICAgICAgd2FzIHNob3dpbmcgdXAgd2hlbiBJIHdhcyBkb2luZyBwZXJmb3JtYW5jZSBhbmFs
eXNpcyBmb3IgdGhlCisgICAgICAgIHNwZWVkb21ldGVyIGJlbmNobWFyay4gSSBzYXcgdGhhdCBp
dCB3YXMgc3BlbmRpbmcgYWJvdXQgMSUgb2YKKyAgICAgICAgaXRzIHRpbWUgaW4gdGhpcyBmdW5j
dGlvbi4gSG9wZWZ1bGx5IHRoaXMgcGF0Y2ggY2FuIGhlbHAgdXMgc3BlZWR1cAorICAgICAgICB1
cCBzcGVlZG9tZXRlciBieSBhIGxpdHRsZSBiaXQuCisKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEJyYW5jaCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2gpOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRD
b252ZXJ0VmFsdWVUb0Jvb2xlYW4pOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0QWxsb2NhdGVEZXN0cnVjdGlibGVP
YmplY3QpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAg
ICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamZh
bHNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2p0cnVlKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9qZmFsc2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2p0cnVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfamZh
bHNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qdHJ1ZSk6IERl
bGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9K
SVRPcGVyYXRpb25zLmg6CisKIDIwMTYtMDktMDYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KIAogICAgICAgICBUeXBlZCBhcnJheXMgc2hvdWxkIHVzZSBNYXJrZWRTcGFjZSBpbnN0
ZWFkIG9mIENvcGllZFNwYWNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDIwNTQ5NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2ODQsMjQgKzE2ODQsMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUxvZ2ljYWxOb3QoTgogCiAgICAgY2FzZSBVbnR5cGVkVXNlOiB7CiAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0UGF5bG9hZCh0aGlzLCBSZXVzZSwgYXJnMSwgUGF5bG9hZFdvcmQpOwotICAgICAg
ICBHUFJSZWcgYXJnMVRhZ0dQUiA9IGFyZzEudGFnR1BSKCk7Ci0gICAgICAgIEdQUlJlZyBhcmcx
UGF5bG9hZEdQUiA9IGFyZzEucGF5bG9hZEdQUigpOwotICAgICAgICBKU1ZhbHVlUmVncyBhcmcx
UmVncyA9IGFyZzEuanNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRH
UFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOwotICAgICAgICAKLSAgICAgICAgYXJnMS51c2UoKTsK
KyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5
IHRlbXAodGhpcyk7CisgICAgICAgIEZQUlRlbXBvcmFyeSB2YWx1ZUZQUih0aGlzKTsKKyAgICAg
ICAgRlBSVGVtcG9yYXJ5IHRlbXBGUFIodGhpcyk7CiAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIGFyZzFU
YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSk7Ci0gICAgCi0gICAgICAg
IG1faml0Lm1vdmUoYXJnMVBheWxvYWRHUFIsIHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogCi0gICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgIHNsb3dD
YXNlLCB0aGlzLCBvcGVyYXRpb25Db252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVzdWx0UGF5bG9h
ZEdQUiwgYXJnMVJlZ3MsIE5lZWRUb1NwaWxsLCBFeGNlcHRpb25DaGVja1JlcXVpcmVtZW50OjpD
aGVja05vdE5lZWRlZCkpOwotICAgIAotICAgICAgICBtX2ppdC54b3IzMihUcnVzdGVkSW1tMzIo
MSksIHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxv
YWRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIGJvb2wg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gIW1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOworICAgICAgICBib29sIG5lZ2F0ZVJlc3VsdCA9IHRydWU7CisgICAgICAgIG1faml0
LmVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oYXJnMS5qc1ZhbHVlUmVncygpLCByZXN1bHRHUFIs
IHRlbXAuZ3ByKCksIHZhbHVlRlBSLmZwcigpLCB0ZW1wRlBSLmZwcigpLCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdCwgbmVnYXRlUmVzdWx0KTsKKyAgICAg
ICAgYm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIGNhc2UgU3RyaW5nVXNlOgpAQCAtMTgzMywzMCArMTgyNywyMiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUqIG5vCiAgICAgCiAgICAgY2FzZSBVbnR5cGVkVXNl
OiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgdmFsdWUuZmlsbCgpOwotICAgICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1
ZS50YWdHUFIoKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxv
YWRHUFIoKTsKLQorICAgICAgICBGUFJUZW1wb3JhcnkgdmFsdWVGUFIodGhpcyk7CisgICAgICAg
IEZQUlRlbXBvcmFyeSB0ZW1wRlBSKHRoaXMpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOworICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKworICAgICAgICBKU1Zh
bHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVlUmVncygpOwogICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgIAogICAgICAgICB1c2Uobm9kZS0+Y2hpbGQx
KCkpOwotICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBmYXN0UGF0aCA9IG1faml0LmJy
YW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgdmFsdWVUYWdHUFIsIEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
c2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHZhbHVlVGFn
R1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKTsKIAot
ICAgICAgICBmYXN0UGF0aC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGJyYW5jaFRlc3QzMihKSVRD
b21waWxlcjo6WmVybywgdmFsdWVQYXlsb2FkR1BSLCBub3RUYWtlbik7CisgICAgICAgIGJvb2wg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gIW1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOworICAgICAgICBtX2ppdC5lbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKHZhbHVlUmVn
cywgcmVzdWx0R1BSLCB0ZW1wLmdwcigpLCB2YWx1ZUZQUi5mcHIoKSwgdGVtcEZQUi5mcHIoKSwg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3QpOworICAgICAg
ICBicmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdEdQUiwgbm90VGFrZW4pOwog
ICAgICAgICBqdW1wKHRha2VuLCBGb3JjZUp1bXApOwogCi0gICAgICAgIHNsb3dQYXRoLmxpbmso
Jm1faml0KTsKLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVz
dWx0R1BSLCB2YWx1ZS5qc1ZhbHVlUmVncygpKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lz
dGVycyhyZXN1bHRHUFIpOwotICAgIAotICAgICAgICBicmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6
Ok5vblplcm8sIHJlc3VsdEdQUiwgdGFrZW4pOwotICAgICAgICBqdW1wKG5vdFRha2VuKTsKLSAg
ICAKICAgICAgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjA1NDk0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTgzNiwxOCArMTgzNiwyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
TG9naWNhbE5vdChOCiAgICAgCiAgICAgICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsK
ICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAKLSAgICAgICAg
YXJnMS51c2UoKTsKLSAgICAKLSAgICAgICAgbV9qaXQubW92ZShhcmcxR1BSLCByZXN1bHRHUFIp
OwotICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
VmFsdWVGYWxzZSkpLCByZXN1bHRHUFIpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93
Q2FzZSA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSk7Ci0gICAgCi0gICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dDYXNl
LCB0aGlzLCBvcGVyYXRpb25Db252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVzdWx0R1BSLCBhcmcx
R1BSLCBOZWVkVG9TcGlsbCwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudDo6Q2hlY2tOb3ROZWVk
ZWQpKTsKLSAgICAKLSAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0
PGludDMyX3Q+KFZhbHVlVHJ1ZSkpLCByZXN1bHRHUFIpOwotICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxsZWRF
eHBsaWNpdGx5KTsKKworICAgICAgICBGUFJUZW1wb3JhcnkgdmFsdWVGUFIodGhpcyk7CisgICAg
ICAgIEZQUlRlbXBvcmFyeSB0ZW1wRlBSKHRoaXMpOworCisgICAgICAgIGJvb2wgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gIW1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50SXNTdGlsbFZhbGlkKCk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwor
ICAgICAgICBPcHRpb25hbDxHUFJUZW1wb3Jhcnk+IHNjcmF0Y2g7CisgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgaWYgKHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkgeworICAgICAgICAgICAgc2NyYXRjaCA9IEdQUlRlbXBvcmFyeSh0
aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLT5ncHIoKTsKKyAgICAgICAg
fQorICAgICAgICBib29sIG5lZ2F0ZVJlc3VsdCA9IHRydWU7CisgICAgICAgIG1faml0LmVtaXRD
b252ZXJ0VmFsdWVUb0Jvb2xlYW4oSlNWYWx1ZVJlZ3MoYXJnMUdQUiksIHJlc3VsdEdQUiwgc2Ny
YXRjaEdQUiwgdmFsdWVGUFIuZnByKCksIHRlbXBGUFIuZnByKCksIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0LCBuZWdhdGVSZXN1bHQpOworICAgICAgICBt
X2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgU3RyaW5nVXNlOgpAQCAtMTk5MCw3ICsxOTk0
LDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSogbm8KICAgICAgICAg
ICAgIHZhbHVlLnVzZSgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBmcHJWYWx1ZSh0aGlz
KTsKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBmcHJUZW1wKHRoaXMpOworICAgICAgICAgICAg
T3B0aW9uYWw8R1BSVGVtcG9yYXJ5PiBzY3JhdGNoOworCisgICAgICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICBib29sIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9ICFtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElz
U3RpbGxWYWxpZCgpOworICAgICAgICAgICAgaWYgKHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkgeworICAgICAgICAgICAgICAgIHNjcmF0Y2ggPSBHUFJUZW1wb3JhcnkodGhpcyk7
CisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2gtPmdwcigpOworICAgICAgICAg
ICAgfQorCiAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAg
ICAgICAgICAgRlBSUmVnIHZhbHVlRlBSID0gZnByVmFsdWUuZnByKCk7CisgICAgICAgICAgICBG
UFJSZWcgdGVtcEZQUiA9IGZwclRlbXAuZnByKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGlmIChub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY0ludDMyT25seSkgewogICAg
ICAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSks
IG5vdFRha2VuKTsKQEAgLTIwMDMsMTAgKzIwMjAsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0QnJhbmNoKE5vZGUqIG5vCiAgICAgICAgICAgICB9CiAgICAgCiAgICAgICAgICAgICB2YWx1
ZS51c2UoKTsKLSAgICAKLSAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dEdQUik7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbnZlcnRKU1ZhbHVl
VG9Cb29sZWFuLCByZXN1bHRHUFIsIHZhbHVlR1BSKTsKLSAgICAgICAgICAgIHNpbGVudEZpbGxB
bGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKworICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYyk7CisgICAgICAgICAgICBtX2ppdC5lbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKEpT
VmFsdWVSZWdzKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCB2YWx1ZUZQUiwgdGVt
cEZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3QpOwog
ICAgIAogICAgICAgICAgICAgYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBy
ZXN1bHRHUFIsIHRha2VuKTsKICAgICAgICAgICAgIGp1bXAobm90VGFrZW4pOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24g
MjA1NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MjYsNiArNjI2LDk0IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJz
OjplbWl0RHVtYlZpcnR1YWxDYWwKICAgICAgICAgfSk7CiB9CiAKK3ZvaWQgQXNzZW1ibHlIZWxw
ZXJzOjplbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcg
cmVzdWx0LCBHUFJSZWcgc2NyYXRjaCwgRlBSUmVnIHZhbHVlQXNGUFIsIEZQUlJlZyB0ZW1wRlBS
LCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgYm9vbCBuZWdhdGVSZXN1bHQpCit7CisgICAgLy8gSW1wbGVtZW50cyB0
aGUgZm9sbG93aW5nIGNvbnRyb2wgZmxvdyBzdHJ1Y3R1cmU6CisgICAgLy8gaWYgKHZhbHVlIGlz
IGJvb2xlYW4pIHsKKyAgICAvLyAgICAgcmVzdWx0ID0gdmFsdWUgPT09IHRydWUKKyAgICAvLyB9
IGVsc2UgaWYgKHZhbHVlIGlzIGludGVnZXIpIHsKKyAgICAvLyAgICAgcmVzdWx0ID0gdmFsdWUg
IT09IDAKKyAgICAvLyB9IGVsc2UgaWYgKHZhbHVlIGlzIGRvdWJsZSkgeworICAgIC8vICAgICBy
ZXN1bHQgPSB2YWx1ZSAhPT0gMC4wICYmICFpc05hTih2YWx1ZSk7CisgICAgLy8gfSBlbHNlIGlm
ICh2YWx1ZSBpcyBjZWxsKSB7CisgICAgLy8gICAgIGlmICh2YWx1ZSBpcyBzdHJpbmcpIHsKKyAg
ICAvLyAgICAgICAgICByZXN1bHQgPSB2YWx1ZS5sZW5ndGgoKSAhPT0gMDsKKyAgICAvLyAgICAg
fSBlbHNlIHsKKyAgICAvLyAgICAgICAgICBkbyBjcmF6eSB0aGluZ3MgZm9yIG1hc3F1ZXJhZGVz
IGFzIHVuZGVmaW5lZAorICAgIC8vICAgICB9CisgICAgLy8gfSBlbHNlIHsKKyAgICAvLyAgICAg
cmVzdWx0ID0gZmFsc2U7CisgICAgLy8gfQorICAgIC8vCisgICAgLy8gaWYgKG5lZ2F0ZVJlc3Vs
dCkKKyAgICAvLyAgICAgcmVzdWx0ID0gIXJlc3VsdDsKKworICAgIEp1bXBMaXN0IGRvbmU7Cisg
ICAgYXV0byBub3RCb29sZWFuID0gYnJhbmNoSWZOb3RCb29sZWFuKHZhbHVlLCByZXN1bHQpOwor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgY29tcGFyZTMyKG5lZ2F0ZVJlc3VsdCA/IE5vdEVxdWFs
IDogRXF1YWwsIHZhbHVlLmdwcigpLCBUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0KTsK
KyNlbHNlCisgICAgY29tcGFyZTMyKG5lZ2F0ZVJlc3VsdCA/IEVxdWFsIDogTm90RXF1YWwsIHZh
bHVlLnBheWxvYWRHUFIoKSwgVHJ1c3RlZEltbTMyKDApLCByZXN1bHQpOworI2VuZGlmCisgICAg
ZG9uZS5hcHBlbmQoanVtcCgpKTsKKworICAgIG5vdEJvb2xlYW4ubGluayh0aGlzKTsKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgIGF1dG8gaXNOb3ROdW1iZXIgPSBicmFuY2hJZk5vdE51bWJlcih2
YWx1ZS5ncHIoKSk7CisjZWxzZQorICAgIEFTU0VSVChzY3JhdGNoICE9IEludmFsaWRHUFJSZWcp
OworICAgIGF1dG8gaXNOb3ROdW1iZXIgPSBicmFuY2hJZk5vdE51bWJlcih2YWx1ZSwgc2NyYXRj
aCk7CisjZW5kaWYKKyAgICBhdXRvIGlzRG91YmxlID0gYnJhbmNoSWZOb3RJbnQzMih2YWx1ZSk7
CisKKyAgICAvLyBJdCdzIGFuIGludDMyLgorICAgIGNvbXBhcmUzMihuZWdhdGVSZXN1bHQgPyBF
cXVhbCA6IE5vdEVxdWFsLCB2YWx1ZS5wYXlsb2FkR1BSKCksIFRydXN0ZWRJbW0zMigwKSwgcmVz
dWx0KTsKKyAgICBkb25lLmFwcGVuZChqdW1wKCkpOworCisgICAgaXNEb3VibGUubGluayh0aGlz
KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHVuYm94RG91YmxlKHZhbHVlLmdwcigpLCByZXN1
bHQsIHZhbHVlQXNGUFIpOworI2Vsc2UKKyAgICB1bmJveERvdWJsZSh2YWx1ZSwgdmFsdWVBc0ZQ
UiwgdGVtcEZQUik7CisjZW5kaWYKKyAgICBhdXRvIGlzWmVyb09yTmFOID0gYnJhbmNoRG91Ymxl
WmVyb09yTmFOKHZhbHVlQXNGUFIsIHRlbXBGUFIpOworICAgIG1vdmUobmVnYXRlUmVzdWx0ID8g
VHJ1c3RlZEltbTMyKDApIDogVHJ1c3RlZEltbTMyKDEpLCByZXN1bHQpOworICAgIGRvbmUuYXBw
ZW5kKGp1bXAoKSk7CisgICAgaXNaZXJvT3JOYU4ubGluayh0aGlzKTsKKyAgICBtb3ZlKG5lZ2F0
ZVJlc3VsdCA/IFRydXN0ZWRJbW0zMigxKSA6IFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0KTsKKyAg
ICBkb25lLmFwcGVuZChqdW1wKCkpOworCisgICAgaXNOb3ROdW1iZXIubGluayh0aGlzKTsKKyAg
ICBhdXRvIGlzTm90Q2VsbEFuZElzTm90TnVtYmVyQW5kSXNOb3RCb29sZWFuID0gYnJhbmNoSWZO
b3RDZWxsKHZhbHVlKTsKKyAgICBhdXRvIGlzQ2VsbEJ1dE5vdFN0cmluZyA9IGJyYW5jaDgoTm90
RXF1YWwsCisgICAgICAgIEFkZHJlc3ModmFsdWUucGF5bG9hZEdQUigpLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKTsKKyAgICBsb2FkMzIo
QWRkcmVzcyh2YWx1ZS5wYXlsb2FkR1BSKCksIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSwg
cmVzdWx0KTsKKyAgICBjb21wYXJlMzIobmVnYXRlUmVzdWx0ID8gRXF1YWwgOiBOb3RFcXVhbCwg
cmVzdWx0LCBUcnVzdGVkSW1tMzIoMCksIHJlc3VsdCk7CisgICAgZG9uZS5hcHBlbmQoanVtcCgp
KTsKKworICAgIGlzQ2VsbEJ1dE5vdFN0cmluZy5saW5rKHRoaXMpOworICAgIGlmIChzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQpIHsKKyAgICAgICAgQVNTRVJUKHNjcmF0Y2ggIT0g
SW52YWxpZEdQUlJlZyk7CisgICAgICAgIEp1bXBMaXN0IGlzTm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZDsKKyAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmFwcGVuZChicmFuY2hU
ZXN0OChaZXJvLCBBZGRyZXNzKHZhbHVlLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpKTsKKyAg
ICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodmFsdWUucGF5bG9hZEdQUigpLCByZXN1bHQsIHNjcmF0
Y2gpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgc2NyYXRjaCk7
CisgICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5hcHBlbmQoYnJhbmNoUHRyKE5v
dEVxdWFsLCBBZGRyZXNzKHJlc3VsdCwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHNjcmF0Y2gpKTsKKyAgICAgICAgLy8gV2UgYWN0IGxpa2Ugd2UgYXJlICJ1bmRlZmluZWQiIGhl
cmUuCisgICAgICAgIG1vdmUobmVnYXRlUmVzdWx0ID8gVHJ1c3RlZEltbTMyKDEpIDogVHJ1c3Rl
ZEltbTMyKDApLCByZXN1bHQpOworICAgICAgICBkb25lLmFwcGVuZChqdW1wKCkpOworICAgICAg
ICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICB9CisgICAgbW92
ZShuZWdhdGVSZXN1bHQgPyBUcnVzdGVkSW1tMzIoMCkgOiBUcnVzdGVkSW1tMzIoMSksIHJlc3Vs
dCk7CisgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKKworICAgIC8vIG51bGwgb3IgdW5kZWZpbmVk
LgorICAgIGlzTm90Q2VsbEFuZElzTm90TnVtYmVyQW5kSXNOb3RCb29sZWFuLmxpbmsodGhpcyk7
IAorICAgIG1vdmUobmVnYXRlUmVzdWx0ID8gVHJ1c3RlZEltbTMyKDEpIDogVHJ1c3RlZEltbTMy
KDApLCByZXN1bHQpOworCisgICAgZG9uZS5saW5rKHRoaXMpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIwNTQ5NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1
MjgsNiArMTUyOCw4IEBAIHB1YmxpYzoKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Q8Q2xh
c3NUeXBlPihyZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0
cigwKSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7CiAgICAgICAgIHN0b3Jl
UHRyKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlLT5jbGFzc0luZm8oKSksIEFkZHJlc3MocmVzdWx0
R1BSLCBKU0Rlc3RydWN0aWJsZU9iamVjdDo6Y2xhc3NJbmZvT2Zmc2V0KCkpKTsKICAgICB9CisK
KyAgICB2b2lkIGVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBzY3JhdGNoSWZTaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIEZQUlJlZywgRlBSUmVnLCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgSlNHbG9iYWxPYmplY3QqLCBib29sIG5lZ2F0ZVJlc3VsdCA9IGZhbHNlKTsKICAgICAK
IHByb3RlY3RlZDoKICAgICBWTSogbV92bTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAJKHJldmlzaW9uIDIwNTQ5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDQ3LDcgKzQ0Nyw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfYnlfdmFs
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaW5zdGFuY2VvZikKICAgICAgICAgREVG
SU5FX1NMT1dDQVNFX09QKG9wX2luc3RhbmNlb2ZfY3VzdG9tKQotICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfamZhbHNlKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfamxlc3Mp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qbGVzc2VxKQogICAgICAgICBERUZJTkVf
U0xPV0NBU0VfT1Aob3BfamdyZWF0ZXIpCkBAIC00NTYsNyArNDU1LDYgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2pu
bGVzc2VxKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfam5ncmVhdGVyKQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfam5ncmVhdGVyZXEpCi0gICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9qdHJ1ZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2xvb3BfaGlu
dCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3dhdGNoZG9nKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3BfbHNoaWZ0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShy
ZXZpc2lvbiAyMDU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MjQsNyArNjI0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0
YW5jZW9mKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwog
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2pmYWxzZShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVz
c2VxKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjA1NDk0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzUs
MzEgKzQ3NSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoSW5zdHJ1Y3Rpb24qIGN1CiAK
ICAgICBlbWl0TG9hZChjb25kLCByZWdUMSwgcmVnVDApOwogCi0gICAgQVNTRVJUKChKU1ZhbHVl
OjpCb29sZWFuVGFnICsgMSA9PSBKU1ZhbHVlOjpJbnQzMlRhZykgJiYgIShKU1ZhbHVlOjpJbnQz
MlRhZyArIDEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVnVDEsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSkpOwotICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pmYWxz
ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGludCBjb25kID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kOworICAgIEpTVmFsdWVSZWdzIHZhbHVlKHJlZ1QxLCByZWdUMCk7CisgICAgR1BS
UmVnIHNjcmF0Y2ggPSByZWdUMjsKKyAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDM7CisgICAgYm9v
bCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOworICAgIGVtaXRDb252
ZXJ0VmFsdWVUb0Jvb2xlYW4odmFsdWUsIHJlc3VsdCwgc2NyYXRjaCwgZnBSZWdUMCwgZnBSZWdU
MSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpOwogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotCi0gICAgaWYgKHN1cHBvcnRz
RmxvYXRpbmdQb2ludCgpKSB7Ci0gICAgICAgIC8vIHJlZ1QxIGNvbnRhaW5zIHRoZSB0YWcgZnJv
bSB0aGUgaG90IHBhdGguCi0gICAgICAgIEp1bXAgbm90TnVtYmVyID0gYnJhbmNoMzIoQWJvdmUs
IHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSk7Ci0KLSAgICAgICAgZW1p
dExvYWREb3VibGUoY29uZCwgZnBSZWdUMCk7Ci0gICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaERvdWJsZVplcm9Pck5hTihmcFJlZ1QwLCBmcFJlZ1QxKSwgdGFyZ2V0KTsKLSAgICAgICAg
ZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2pmYWxzZSkpOwotCi0g
ICAgICAgIG5vdE51bWJlci5saW5rKHRoaXMpOwotICAgIH0KLQotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsgLy8gSW52ZXJ0ZWQuCisgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoWmVybywgcmVzdWx0KSwg
dGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTUwOCwzMiArNDkwLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2p0
cnVlKEluc3RydWN0aW9uKiBjdXIKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOwogCiAgICAgZW1pdExvYWQoY29uZCwgcmVnVDEsIHJlZ1QwKTsK
KyAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CisgICAg
SlNWYWx1ZVJlZ3MgdmFsdWUocmVnVDEsIHJlZ1QwKTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IHJl
Z1QyOworICAgIEdQUlJlZyByZXN1bHQgPSByZWdUMzsKKyAgICBlbWl0Q29udmVydFZhbHVlVG9C
b29sZWFuKHZhbHVlLCByZXN1bHQsIHNjcmF0Y2gsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsK
IAotICAgIEFTU0VSVCgoSlNWYWx1ZTo6Qm9vbGVhblRhZyArIDEgPT0gSlNWYWx1ZTo6SW50MzJU
YWcpICYmICEoSlNWYWx1ZTo6SW50MzJUYWcgKyAxKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoQmVsb3csIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpKTsKLSAg
ICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0U2xvd19vcF9qdHJ1ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGludCBjb25k
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotCi0gICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOwotCi0gICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7Ci0gICAgICAgIC8vIHJl
Z1QxIGNvbnRhaW5zIHRoZSB0YWcgZnJvbSB0aGUgaG90IHBhdGguCi0gICAgICAgIEp1bXAgbm90
TnVtYmVyID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93
ZXN0VGFnKSk7Ci0KLSAgICAgICAgZW1pdExvYWREb3VibGUoY29uZCwgZnBSZWdUMCk7Ci0gICAg
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaERvdWJsZU5vblplcm8oZnBSZWdUMCwgZnBSZWdU
MSksIHRhcmdldCk7Ci0gICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xF
TkdUSChvcF9qdHJ1ZSkpOwotCi0gICAgICAgIG5vdE51bWJlci5saW5rKHRoaXMpOwotICAgIH0K
LQotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJl
Z1QxLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25a
ZXJvLCByZXN1bHQpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyMDU0OTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjIsMTUgKzM2
MiwxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoSW5zdHJ1Y3Rpb24qIGN1cnJlCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qZmFsc2UoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwg
cmVnVDApOwogCi0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSksIHRhcmdldCk7Ci0gICAgSnVtcCBpc05v
blplcm8gPSBlbWl0SnVtcElmSW50KHJlZ1QwKTsKKyAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsK
KyAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDE7CisgICAgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsK
KyAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAKLSAg
ICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4oZmFsc2UpKSkpLCB0YXJnZXQpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4odHJ1ZSkpKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwgdmFsdWUpOworICAgIGVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4o
SlNWYWx1ZVJlZ3ModmFsdWUpLCByZXN1bHQsIHNjcmF0Y2gsIGZwUmVnVDAsIGZwUmVnVDEsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKTsKIAotICAgIGlzTm9uWmVyby5saW5rKHRoaXMpOworICAgIGFkZEp1bXAoYnJhbmNoVGVz
dDMyKFplcm8sIHJlc3VsdCksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2plcV9u
dWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NDQsMTUgKzQ0NSwxNCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9lcShJbnN0cnVjdGlvbiogY3VycmVuCiB2b2lkIEpJVDo6ZW1p
dF9vcF9qdHJ1ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMCk7
Ci0KLSAgICBKdW1wIGlzWmVybyA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpKTsKLSAgICBhZGRKdW1wKGVtaXRKdW1wSWZJ
bnQocmVnVDApLCB0YXJnZXQpOwogCi0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSkpLCB0YXJnZXQp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSkpKTsKLQotICAgIGlzWmVyby5saW5r
KHRoaXMpOworICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgIEdQUlJlZyByZXN1bHQgPSBy
ZWdUMTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOworICAgIGJvb2wgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHZhbHVlKTsKKyAgICBlbWl0Q29udmVy
dFZhbHVlVG9Cb29sZWFuKEpTVmFsdWVSZWdzKHZhbHVlKSwgcmVzdWx0LCBzY3JhdGNoLCBmcFJl
Z1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywg
cmVzdWx0KSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04MzcsMjAgKzgzNyw2IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9ub3QoSW5zdHJ1Y3Rpb24qIGMKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamZhbHNlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29udmVydEpTVmFs
dWVUb0Jvb2xlYW4sIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
WmVybywgcmV0dXJuVmFsdWVHUFIpLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsg
Ly8gaW52ZXJ0ZWQhCi19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qdHJ1ZShJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQotewotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA1NDk0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAzMiwxNCArMTAzMiw2IEBAIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBh
cmVHcmUKICAgICByZXR1cm4ganNMZXNzRXE8ZmFsc2U+KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkT3AyKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpKTsKIH0KIAotc2l6ZV90IEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3ApCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0g
ICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3ApLnRvQm9vbGVhbihleGVjKTsKLX0K
LQogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUVxKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikK
IHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMDU0OTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDcgKzM0
Niw2IEBAIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXMKIHNpemVfdCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CiBzaXplX3QgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Db21wYXJlR3JlYXRlcihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyRXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlKSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0
SlNWYWx1ZVRvQm9vbGVhbihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFM
Owogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUVxKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogI2lmIFVTRShKU1ZB
TFVFNjQpCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJp
bmdFcShFeGVjU3RhdGUqLCBKU0NlbGwqIGxlZnQsIEpTQ2VsbCogcmlnaHQpIFdURl9JTlRFUk5B
TDsK
</data>
<flag name="review"
          id="311681"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288332</attachid>
            <date>2016-09-08 14:59:42 -0700</date>
            <delta_ts>2016-09-08 16:21:39 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>27608</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDU2NjMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2IEBACisyMDE2LTA5LTA4ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlIHNob3VsZCBpbmxpbmUgb3BlcmF0aW9uQ29udmVydEpTVmFsdWVU
b0Jvb2xlYW4gaW50byBKSVQgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYxNzI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBzdHJlc3MvdmFsdWUtdG8tYm9vbGVhbi5qczogQWRkZWQuCisgICAg
ICAgIChhc3NlcnQpOgorICAgICAgICAodGVzdDEpOgorICAgICAgICAodGVzdDIpOgorICAgICAg
ICAodGVzdDMpOgorCiAyMDE2LTA5LTA4ICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNv
bT4KIAogICAgICAgICBEZWxldGUgb2xkZXIgV2ViQXNzZW1ibHkgdGVzdHMKSW5kZXg6IEpTVGVz
dHMvc3RyZXNzL3ZhbHVlLXRvLWJvb2xlYW4uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJl
c3MvdmFsdWUtdG8tYm9vbGVhbi5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy92
YWx1ZS10by1ib29sZWFuLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKK2Z1bmN0
aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJh
ZCBhc3NlcnRpb24iKQorfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworbGV0IHRlc3RzID0gWworICAg
IFt0cnVlLCB0cnVlXSwKKyAgICBbZmFsc2UsIGZhbHNlXSwKKyAgICBbIiIsIGZhbHNlXSwKKyAg
ICBbIiIgKyAiIiArICIiLCBmYWxzZV0sCisgICAgWyJmb28iLCB0cnVlXSwKKyAgICBbImZvbyIg
KyAiYmFyIiwgdHJ1ZV0sCisgICAgW3t9LCB0cnVlXSwKKyAgICBbU3ltYm9sKCksIHRydWVdLAor
ICAgIFt1bmRlZmluZWQsIGZhbHNlXSwKKyAgICBbbnVsbCwgZmFsc2VdLAorICAgIFswLCBmYWxz
ZV0sCisgICAgWy0wLCBmYWxzZV0sCisgICAgWyswLCBmYWxzZV0sCisgICAgW05hTiwgZmFsc2Vd
LAorICAgIFsxMCwgdHJ1ZV0sCisgICAgWzEwLjIwMTIsIHRydWVdLAorICAgIFtmdW5jdGlvbigp
IHsgfSwgdHJ1ZV0sCisgICAgW25ldyBTdHJpbmcoImZvbyIpLCB0cnVlXSwKKyAgICBbbmV3IFN0
cmluZygiIiksIHRydWVdLAorICAgIFtuZXcgU3RyaW5nLCB0cnVlXQorXTsKKworZnVuY3Rpb24g
dGVzdDEoYykgeworICAgIHJldHVybiAhIWM7Cit9Citub0lubGluZSh0ZXN0MSk7CisKK2Z1bmN0
aW9uIHRlc3QyKGMpIHsKKyAgICBpZiAoYykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIGZhbHNlOworfQorbm9JbmxpbmUodGVzdDIpOworCitmdW5jdGlvbiB0ZXN0MyhjKSB7Cisg
ICAgaWYgKCFjKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9Citu
b0lubGluZSh0ZXN0Myk7CisKK2xldCB0ZXN0RnVuY3Rpb25zID0gW3Rlc3QxLCB0ZXN0MiwgdGVz
dDNdOworCitmb3IgKGxldCB0ZXN0RnVuY3Rpb24gb2YgdGVzdEZ1bmN0aW9ucykgeworICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgICAgICBsZXQgaXRlbSA9IHRlc3Rz
W2kgJSB0ZXN0cy5sZW5ndGhdOworICAgICAgICBhc3NlcnQodGVzdEZ1bmN0aW9uKGl0ZW1bMF0p
ID09PSBpdGVtWzFdKTsKKyAgICB9Cit9CisKK2xldCBtYXNxdWVyYWRlciA9IG1ha2VNYXNxdWVy
YWRlcigpOworZm9yIChsZXQgdGVzdEZ1bmN0aW9uIG9mIHRlc3RGdW5jdGlvbnMpIHsKKyAgICBm
b3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgICAgICAgICBhc3NlcnQodGVzdEZ1bmN0aW9uKG1hc3F1
ZXJhZGVyKSA9PT0gZmFsc2UpOworICAgICAgICB9CisgICAgfQorfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTYtMDktMDggIFNh
YW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgV2Ugc2hvdWxkIGlubGlu
ZSBvcGVyYXRpb25Db252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiBpbnRvIEpJVCBjb2RlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE3MjkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJv
ZHVjZXMgYW4gQXNzZW1ibHlIZWxwZXJzIGVtaXR0ZXIgZnVuY3Rpb24KKyAgICAgICAgdGhhdCBy
ZXBsYWNlcyBvcGVyYXRpb25Db252ZXJ0SlNWYWx1ZVRvQm9vbGVhbi4gVGhpcyBvcGVyYXRpb24K
KyAgICAgICAgd2FzIHNob3dpbmcgdXAgd2hlbiBJIHdhcyBkb2luZyBwZXJmb3JtYW5jZSBhbmFs
eXNpcyBmb3IgdGhlCisgICAgICAgIHNwZWVkb21ldGVyIGJlbmNobWFyay4gSSBzYXcgdGhhdCBp
dCB3YXMgc3BlbmRpbmcgYWJvdXQgMSUgb2YKKyAgICAgICAgaXRzIHRpbWUgaW4gdGhpcyBmdW5j
dGlvbi4gSG9wZWZ1bGx5IHRoaXMgcGF0Y2ggY2FuIGhlbHAgdXMgc3BlZWR1cAorICAgICAgICB1
cCBzcGVlZG9tZXRlciBieSBhIGxpdHRsZSBiaXQuCisKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEJyYW5jaCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2gpOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRD
b252ZXJ0VmFsdWVUb0Jvb2xlYW4pOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0QWxsb2NhdGVEZXN0cnVjdGlibGVP
YmplY3QpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAg
ICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamZh
bHNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2p0cnVlKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9qZmFsc2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2p0cnVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfamZh
bHNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qdHJ1ZSk6IERl
bGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9K
SVRPcGVyYXRpb25zLmg6CisKIDIwMTYtMDktMDYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KIAogICAgICAgICBUeXBlZCBhcnJheXMgc2hvdWxkIHVzZSBNYXJrZWRTcGFjZSBpbnN0
ZWFkIG9mIENvcGllZFNwYWNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDIwNTQ5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMSw2ICs0MzEsMTEg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBmaXhFZGdlPFN0cmluZ1VzZT4obm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1
bGF0ZVN0cmluZ09yT3RoZXIoKSkKICAgICAgICAgICAgICAgICBmaXhFZGdlPFN0cmluZ09yT3Ro
ZXJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIFdhdGNocG9pbnRTZXQqIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50ID0gbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+bWFzcXVlcmFkZXNB
c1VuZGVmaW5lZFdhdGNocG9pbnQoKTsKKyAgICAgICAgICAgICAgICBpZiAobWFzcXVlcmFkZXNB
c1VuZGVmaW5lZFdhdGNocG9pbnQtPmlzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRX
YXRjaHBvaW50KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAKQEAgLTk3NSw2ICs5ODAsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBmaXhFZGdl
PFN0cmluZ1VzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZ09yT3RoZXIoKSkKICAgICAgICAgICAgICAg
ICBmaXhFZGdlPFN0cmluZ09yT3RoZXJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIFdhdGNocG9pbnRTZXQqIG1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWRXYXRjaHBvaW50ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKTsKKyAgICAgICAgICAg
ICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQtPmlzU3RpbGxWYWxpZCgp
KQorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KG1h
c3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNp
b24gMjA1NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4NCwyNCArMTY4NCwxOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAKICAgICBjYXNlIFVudHlwZWRVc2U6
IHsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMsIFJldXNlLCBhcmcxLCBQYXls
b2FkV29yZCk7Ci0gICAgICAgIEdQUlJlZyBhcmcxVGFnR1BSID0gYXJnMS50YWdHUFIoKTsKLSAg
ICAgICAgR1BSUmVnIGFyZzFQYXlsb2FkR1BSID0gYXJnMS5wYXlsb2FkR1BSKCk7Ci0gICAgICAg
IEpTVmFsdWVSZWdzIGFyZzFSZWdzID0gYXJnMS5qc1ZhbHVlUmVncygpOwotICAgICAgICBHUFJS
ZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7Ci0gICAgICAgIAotICAg
ICAgICBhcmcxLnVzZSgpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAg
ICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHZhbHVl
RlBSKHRoaXMpOworICAgICAgICBGUFJUZW1wb3JhcnkgdGVtcEZQUih0aGlzKTsKIAotICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVy
OjpOb3RFcXVhbCwgYXJnMVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcp
KTsKLSAgICAKLSAgICAgICAgbV9qaXQubW92ZShhcmcxUGF5bG9hZEdQUiwgcmVzdWx0UGF5bG9h
ZEdQUik7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAKLSAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAg
ICAgICAgICAgICAgc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkNvbnZlcnRKU1ZhbHVlVG9Cb29s
ZWFuLCByZXN1bHRQYXlsb2FkR1BSLCBhcmcxUmVncywgTmVlZFRvU3BpbGwsIEV4Y2VwdGlvbkNo
ZWNrUmVxdWlyZW1lbnQ6OkNoZWNrTm90TmVlZGVkKSk7Ci0gICAgCi0gICAgICAgIG1faml0Lnhv
cjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgICAgIGJvb2xlYW5S
ZXN1bHQocmVzdWx0UGF5bG9hZEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5
KTsKKyAgICAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSAhbWFz
cXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKTsKKyAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIGJvb2wgbmVnYXRlUmVzdWx0ID0gdHJ1
ZTsKKyAgICAgICAgbV9qaXQuZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbihhcmcxLmpzVmFsdWVS
ZWdzKCksIHJlc3VsdEdQUiwgdGVtcC5ncHIoKSwgdmFsdWVGUFIuZnByKCksIHRlbXBGUFIuZnBy
KCksIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0LCBuZWdh
dGVSZXN1bHQpOworICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBTdHJpbmdVc2U6CkBAIC0xODMzLDMwICsxODI3
LDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSogbm8KICAgICAKICAg
ICBjYXNlIFVudHlwZWRVc2U6IHsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICB2YWx1ZS5maWxsKCk7Ci0gICAgICAgIEdQUlJlZyB2
YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOwotICAgICAgICBHUFJSZWcgdmFsdWVQYXlsb2Fk
R1BSID0gdmFsdWUucGF5bG9hZEdQUigpOwotCisgICAgICAgIEZQUlRlbXBvcmFyeSB2YWx1ZUZQ
Uih0aGlzKTsKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHRlbXBGUFIodGhpcyk7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMp
OworCisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7
CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgCiAgICAgICAg
IHVzZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGZh
c3RQYXRoID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCB2YWx1ZVRhZ0dQUiwg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwotICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpO
b3RFcXVhbCwgdmFsdWVUYWdHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Qm9vbGVhblRhZykpOwogCi0gICAgICAgIGZhc3RQYXRoLmxpbmsoJm1faml0KTsKLSAgICAgICAg
YnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpaZXJvLCB2YWx1ZVBheWxvYWRHUFIsIG5vdFRha2Vu
KTsKKyAgICAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSAhbWFz
cXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKTsKKyAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIG1faml0LmVtaXRDb252ZXJ0VmFsdWVU
b0Jvb2xlYW4odmFsdWVSZWdzLCByZXN1bHRHUFIsIHRlbXAuZ3ByKCksIHZhbHVlRlBSLmZwcigp
LCB0ZW1wRlBSLmZwcigpLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2Jh
bE9iamVjdCk7CisgICAgICAgIGJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6WmVybywgcmVzdWx0
R1BSLCBub3RUYWtlbik7CiAgICAgICAgIGp1bXAodGFrZW4sIEZvcmNlSnVtcCk7CiAKLSAgICAg
ICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVy
cyhyZXN1bHRHUFIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbnZlcnRKU1Zh
bHVlVG9Cb29sZWFuLCByZXN1bHRHUFIsIHZhbHVlLmpzVmFsdWVSZWdzKCkpOwotICAgICAgICBz
aWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgCi0gICAgICAgIGJyYW5jaFRl
c3QzMihKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0R1BSLCB0YWtlbik7Ci0gICAgICAgIGp1
bXAobm90VGFrZW4pOwotICAgIAogICAgICAgICBub1Jlc3VsdChub2RlLCBVc2VDaGlsZHJlbkNh
bGxlZEV4cGxpY2l0bHkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lv
biAyMDU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODM2LDE4ICsxODM2LDIyIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAgICAKICAgICAgICAgR1BSUmVnIGFyZzFH
UFIgPSBhcmcxLmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OwotICAgIAotICAgICAgICBhcmcxLnVzZSgpOwotICAgIAotICAgICAgICBtX2ppdC5tb3ZlKGFy
ZzFHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpO
b25aZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkp
KTsKLSAgICAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93
UGF0aENhbGwoc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkNvbnZlcnRKU1ZhbHVlVG9Cb29sZWFu
LCByZXN1bHRHUFIsIGFyZzFHUFIsIE5lZWRUb1NwaWxsLCBFeGNlcHRpb25DaGVja1JlcXVpcmVt
ZW50OjpDaGVja05vdE5lZWRlZCkpOwotICAgIAotICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlc3VsdEdQUik7Ci0gICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuLCBV
c2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworCisgICAgICAgIEZQUlRlbXBvcmFyeSB2YWx1
ZUZQUih0aGlzKTsKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHRlbXBGUFIodGhpcyk7CisKKyAgICAg
ICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSAhbWFzcXVlcmFkZXNB
c1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKTsKKyAgICAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7CisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXBvcmFyeT4gc2NyYXRjaDsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBpZiAo
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSB7CisgICAgICAgICAgICBzY3JhdGNo
ID0gR1BSVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2gt
PmdwcigpOworICAgICAgICB9CisgICAgICAgIGJvb2wgbmVnYXRlUmVzdWx0ID0gdHJ1ZTsKKyAg
ICAgICAgbV9qaXQuZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbihKU1ZhbHVlUmVncyhhcmcxR1BS
KSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCB2YWx1ZUZQUi5mcHIoKSwgdGVtcEZQUi5mcHIoKSwg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3QsIG5lZ2F0ZVJl
c3VsdCk7CisgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1
bHRHUFIpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgRGF0YUZvcm1h
dEpTQm9vbGVhbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBTdHJpbmdVc2U6
CkBAIC0xOTkwLDcgKzE5OTQsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChO
b2RlKiBubwogICAgICAgICAgICAgdmFsdWUudXNlKCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgRlBSVGVtcG9y
YXJ5IGZwclZhbHVlKHRoaXMpOworICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IGZwclRlbXAodGhp
cyk7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wb3Jhcnk+IHNjcmF0Y2g7CisKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgIGJv
b2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gIW1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgc2NyYXRjaCA9IEdQ
UlRlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaC0+
Z3ByKCk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICBGUFJSZWcgdmFsdWVGUFIgPSBmcHJWYWx1ZS5mcHIo
KTsKKyAgICAgICAgICAgIEZQUlJlZyB0ZW1wRlBSID0gZnByVGVtcC5mcHIoKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiBTcGVj
SW50MzJPbmx5KSB7CiAgICAgICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNOdW1iZXIoMCkpKSwgbm90VGFrZW4pOwpAQCAtMjAwMywxMCArMjAyMCw5IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSogbm8KICAgICAgICAgICAgIH0KICAgICAK
ICAgICAgICAgICAgIHZhbHVlLnVzZSgpOwotICAgIAotICAgICAgICAgICAgc2lsZW50U3BpbGxB
bGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlc3VsdEdQUiwgdmFsdWVHUFIpOwotICAgICAg
ICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworCisgICAgICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgICAgIG1faml0LmVtaXRDb252ZXJ0
VmFsdWVUb0Jvb2xlYW4oSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCByZXN1bHRHUFIsIHNjcmF0Y2hH
UFIsIHZhbHVlRlBSLCB0ZW1wRlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IGdsb2JhbE9iamVjdCk7CiAgICAgCiAgICAgICAgICAgICBicmFuY2hUZXN0MzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiwgdGFrZW4pOwogICAgICAgICAgICAganVtcChub3RU
YWtlbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuY3BwCShyZXZpc2lvbiAyMDU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyNiw2ICs2MjYsOTQgQEAgdm9p
ZCBBc3NlbWJseUhlbHBlcnM6OmVtaXREdW1iVmlydHVhbENhbAogICAgICAgICB9KTsKIH0KIAor
dm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oSlNWYWx1ZVJl
Z3MgdmFsdWUsIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBzY3JhdGNoLCBGUFJSZWcgdmFsdWVBc0ZQ
UiwgRlBSUmVnIHRlbXBGUFIsIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBib29sIG5lZ2F0ZVJlc3VsdCkKK3sKKyAg
ICAvLyBJbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgY29udHJvbCBmbG93IHN0cnVjdHVyZToKKyAg
ICAvLyBpZiAodmFsdWUgaXMgYm9vbGVhbikgeworICAgIC8vICAgICByZXN1bHQgPSB2YWx1ZSA9
PT0gdHJ1ZQorICAgIC8vIH0gZWxzZSBpZiAodmFsdWUgaXMgaW50ZWdlcikgeworICAgIC8vICAg
ICByZXN1bHQgPSB2YWx1ZSAhPT0gMAorICAgIC8vIH0gZWxzZSBpZiAodmFsdWUgaXMgZG91Ymxl
KSB7CisgICAgLy8gICAgIHJlc3VsdCA9IHZhbHVlICE9PSAwLjAgJiYgIWlzTmFOKHZhbHVlKTsK
KyAgICAvLyB9IGVsc2UgaWYgKHZhbHVlIGlzIGNlbGwpIHsKKyAgICAvLyAgICAgaWYgKHZhbHVl
IGlzIHN0cmluZykgeworICAgIC8vICAgICAgICAgIHJlc3VsdCA9IHZhbHVlLmxlbmd0aCgpICE9
PSAwOworICAgIC8vICAgICB9IGVsc2UgeworICAgIC8vICAgICAgICAgIGRvIGNyYXp5IHRoaW5n
cyBmb3IgbWFzcXVlcmFkZXMgYXMgdW5kZWZpbmVkCisgICAgLy8gICAgIH0KKyAgICAvLyB9IGVs
c2UgeworICAgIC8vICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAvLyB9CisgICAgLy8KKyAgICAv
LyBpZiAobmVnYXRlUmVzdWx0KQorICAgIC8vICAgICByZXN1bHQgPSAhcmVzdWx0OworCisgICAg
SnVtcExpc3QgZG9uZTsKKyAgICBhdXRvIG5vdEJvb2xlYW4gPSBicmFuY2hJZk5vdEJvb2xlYW4o
dmFsdWUsIHJlc3VsdCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBjb21wYXJlMzIobmVnYXRl
UmVzdWx0ID8gTm90RXF1YWwgOiBFcXVhbCwgdmFsdWUuZ3ByKCksIFRydXN0ZWRJbW0zMihWYWx1
ZVRydWUpLCByZXN1bHQpOworI2Vsc2UKKyAgICBjb21wYXJlMzIobmVnYXRlUmVzdWx0ID8gRXF1
YWwgOiBOb3RFcXVhbCwgdmFsdWUucGF5bG9hZEdQUigpLCBUcnVzdGVkSW1tMzIoMCksIHJlc3Vs
dCk7CisjZW5kaWYKKyAgICBkb25lLmFwcGVuZChqdW1wKCkpOworCisgICAgbm90Qm9vbGVhbi5s
aW5rKHRoaXMpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgYXV0byBpc05vdE51bWJlciA9IGJy
YW5jaElmTm90TnVtYmVyKHZhbHVlLmdwcigpKTsKKyNlbHNlCisgICAgQVNTRVJUKHNjcmF0Y2gg
IT0gSW52YWxpZEdQUlJlZyk7CisgICAgYXV0byBpc05vdE51bWJlciA9IGJyYW5jaElmTm90TnVt
YmVyKHZhbHVlLCBzY3JhdGNoKTsKKyNlbmRpZgorICAgIGF1dG8gaXNEb3VibGUgPSBicmFuY2hJ
Zk5vdEludDMyKHZhbHVlKTsKKworICAgIC8vIEl0J3MgYW4gaW50MzIuCisgICAgY29tcGFyZTMy
KG5lZ2F0ZVJlc3VsdCA/IEVxdWFsIDogTm90RXF1YWwsIHZhbHVlLnBheWxvYWRHUFIoKSwgVHJ1
c3RlZEltbTMyKDApLCByZXN1bHQpOworICAgIGRvbmUuYXBwZW5kKGp1bXAoKSk7CisKKyAgICBp
c0RvdWJsZS5saW5rKHRoaXMpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgdW5ib3hEb3VibGUo
dmFsdWUuZ3ByKCksIHJlc3VsdCwgdmFsdWVBc0ZQUik7CisjZWxzZQorICAgIHVuYm94RG91Ymxl
KHZhbHVlLCB2YWx1ZUFzRlBSLCB0ZW1wRlBSKTsKKyNlbmRpZgorICAgIGF1dG8gaXNaZXJvT3JO
YU4gPSBicmFuY2hEb3VibGVaZXJvT3JOYU4odmFsdWVBc0ZQUiwgdGVtcEZQUik7CisgICAgbW92
ZShuZWdhdGVSZXN1bHQgPyBUcnVzdGVkSW1tMzIoMCkgOiBUcnVzdGVkSW1tMzIoMSksIHJlc3Vs
dCk7CisgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKKyAgICBpc1plcm9Pck5hTi5saW5rKHRoaXMp
OworICAgIG1vdmUobmVnYXRlUmVzdWx0ID8gVHJ1c3RlZEltbTMyKDEpIDogVHJ1c3RlZEltbTMy
KDApLCByZXN1bHQpOworICAgIGRvbmUuYXBwZW5kKGp1bXAoKSk7CisKKyAgICBpc05vdE51bWJl
ci5saW5rKHRoaXMpOworICAgIGF1dG8gaXNOb3RDZWxsQW5kSXNOb3ROdW1iZXJBbmRJc05vdEJv
b2xlYW4gPSBicmFuY2hJZk5vdENlbGwodmFsdWUpOworICAgIGF1dG8gaXNDZWxsQnV0Tm90U3Ry
aW5nID0gYnJhbmNoOChOb3RFcXVhbCwKKyAgICAgICAgQWRkcmVzcyh2YWx1ZS5wYXlsb2FkR1BS
KCksIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoU3RyaW5nVHlw
ZSkpOworICAgIGxvYWQzMihBZGRyZXNzKHZhbHVlLnBheWxvYWRHUFIoKSwgSlNTdHJpbmc6Om9m
ZnNldE9mTGVuZ3RoKCkpLCByZXN1bHQpOworICAgIGNvbXBhcmUzMihuZWdhdGVSZXN1bHQgPyBF
cXVhbCA6IE5vdEVxdWFsLCByZXN1bHQsIFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0KTsKKyAgICBk
b25lLmFwcGVuZChqdW1wKCkpOworCisgICAgaXNDZWxsQnV0Tm90U3RyaW5nLmxpbmsodGhpcyk7
CisgICAgaWYgKHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkgeworICAgICAgICBB
U1NFUlQoc2NyYXRjaCAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgSnVtcExpc3QgaXNOb3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkOworICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQuYXBwZW5kKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3ModmFsdWUucGF5bG9hZEdQUigpLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSkpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2YWx1ZS5wYXlsb2FkR1BS
KCksIHJlc3VsdCwgc2NyYXRjaCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxP
YmplY3QpLCBzY3JhdGNoKTsKKyAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmFw
cGVuZChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVzdWx0LCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaCkpOworICAgICAgICAvLyBXZSBhY3QgbGlrZSB3ZSBh
cmUgInVuZGVmaW5lZCIgaGVyZS4KKyAgICAgICAgbW92ZShuZWdhdGVSZXN1bHQgPyBUcnVzdGVk
SW1tMzIoMSkgOiBUcnVzdGVkSW1tMzIoMCksIHJlc3VsdCk7CisgICAgICAgIGRvbmUuYXBwZW5k
KGp1bXAoKSk7CisgICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OworICAgIH0KKyAgICBtb3ZlKG5lZ2F0ZVJlc3VsdCA/IFRydXN0ZWRJbW0zMigwKSA6IFRydXN0
ZWRJbW0zMigxKSwgcmVzdWx0KTsKKyAgICBkb25lLmFwcGVuZChqdW1wKCkpOworCisgICAgLy8g
bnVsbCBvciB1bmRlZmluZWQuCisgICAgaXNOb3RDZWxsQW5kSXNOb3ROdW1iZXJBbmRJc05vdEJv
b2xlYW4ubGluayh0aGlzKTsgCisgICAgbW92ZShuZWdhdGVSZXN1bHQgPyBUcnVzdGVkSW1tMzIo
MSkgOiBUcnVzdGVkSW1tMzIoMCksIHJlc3VsdCk7CisKKyAgICBkb25lLmxpbmsodGhpcyk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjA1
NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTUyOCw2ICsxNTI4LDggQEAgcHVibGljOgogICAgICAgICBlbWl0QWxs
b2NhdGVKU09iamVjdDxDbGFzc1R5cGU+KHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1
cmUpLCBUcnVzdGVkSW1tUHRyKDApLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRo
KTsKICAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUtPmNsYXNzSW5mbygp
KSwgQWRkcmVzcyhyZXN1bHRHUFIsIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0OjpjbGFzc0luZm9PZmZz
ZXQoKSkpOwogICAgIH0KKworICAgIHZvaWQgZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbihKU1Zh
bHVlUmVncyB2YWx1ZSwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIHNjcmF0Y2hJZlNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgRlBSUmVnLCBGUFJSZWcsIGJvb2wgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBKU0dsb2JhbE9iamVjdCosIGJvb2wgbmVnYXRlUmVzdWx0
ID0gZmFsc2UpOwogICAgIAogcHJvdGVjdGVkOgogICAgIFZNKiBtX3ZtOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjA1NDk0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDcsNyArNDQ3LDYgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNF
X09QKG9wX2dldF9ieV92YWwpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9pbnN0YW5j
ZW9mKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaW5zdGFuY2VvZl9jdXN0b20pCi0g
ICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qZmFsc2UpCiAgICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9qbGVzcykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2psZXNzZXEp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qZ3JlYXRlcikKQEAgLTQ1Niw3ICs0NTUs
NiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVf
U0xPV0NBU0VfT1Aob3Bfam5sZXNzZXEpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9q
bmdyZWF0ZXIpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qbmdyZWF0ZXJlcSkKLSAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2p0cnVlKQogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfT1Aob3BfbG9vcF9oaW50KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfd2F0Y2hk
b2cpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9sc2hpZnQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDIwNTQ5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTYyNCw3ICs2MjQsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2luc3RhbmNlb2YoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0
b20oSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfamZhbHNlKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzKEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2psZXNzZXEoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyMDU0OTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ3NSwzMSArNDc1LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShJ
bnN0cnVjdGlvbiogY3UKIAogICAgIGVtaXRMb2FkKGNvbmQsIHJlZ1QxLCByZWdUMCk7CiAKLSAg
ICBBU1NFUlQoKEpTVmFsdWU6OkJvb2xlYW5UYWcgKyAxID09IEpTVmFsdWU6OkludDMyVGFnKSAm
JiAhKEpTVmFsdWU6OkludDMyVGFnICsgMSkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEJl
bG93LCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKSk7Ci0gICAgYWRk
SnVtcChicmFuY2hUZXN0MzIoWmVybywgcmVnVDApLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfamZhbHNlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgaW50IGNvbmQgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgSlNWYWx1ZVJlZ3MgdmFsdWUocmVnVDEs
IHJlZ1QwKTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOworICAgIEdQUlJlZyByZXN1bHQg
PSByZWdUMzsKKyAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRy
dWU7CisgICAgZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbih2YWx1ZSwgcmVzdWx0LCBzY3JhdGNo
LCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0K
LSAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKLSAgICAgICAgLy8gcmVnVDEgY29u
dGFpbnMgdGhlIHRhZyBmcm9tIHRoZSBob3QgcGF0aC4KLSAgICAgICAgSnVtcCBub3ROdW1iZXIg
PSBicmFuY2gzMihBYm92ZSwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcp
KTsKLQotICAgICAgICBlbWl0TG9hZERvdWJsZShjb25kLCBmcFJlZ1QwKTsKLSAgICAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoRG91YmxlWmVyb09yTmFOKGZwUmVnVDAsIGZwUmVnVDEpLCB0
YXJnZXQpOwotICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgo
b3BfamZhbHNlKSk7Ci0KLSAgICAgICAgbm90TnVtYmVyLmxpbmsodGhpcyk7Ci0gICAgfQotCi0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVnVDEs
IHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOyAvLyBJbnZlcnRlZC4KKyAgICBhZGRKdW1wKGJyYW5jaFRlc3Qz
MihaZXJvLCByZXN1bHQpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTA4LDMyICs0OTAsMTMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfanRydWUoSW5zdHJ1Y3Rpb24qIGN1cgogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAKICAgICBlbWl0TG9hZChjb25k
LCByZWdUMSwgcmVnVDApOworICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gdHJ1ZTsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZShyZWdUMSwgcmVnVDApOworICAgIEdQ
UlJlZyBzY3JhdGNoID0gcmVnVDI7CisgICAgR1BSUmVnIHJlc3VsdCA9IHJlZ1QzOworICAgIGVt
aXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4odmFsdWUsIHJlc3VsdCwgc2NyYXRjaCwgZnBSZWdUMCwg
ZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpOwogCi0gICAgQVNTRVJUKChKU1ZhbHVlOjpCb29sZWFuVGFnICsgMSA9
PSBKU1ZhbHVlOjpJbnQzMlRhZykgJiYgIShKU1ZhbHVlOjpJbnQzMlRhZyArIDEpKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpC
b29sZWFuVGFnKSkpOwotICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwg
dGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2p0cnVlKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Ci17Ci0gICAgaW50IGNvbmQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAg
IHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0KLSAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0KLSAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkp
IHsKLSAgICAgICAgLy8gcmVnVDEgY29udGFpbnMgdGhlIHRhZyBmcm9tIHRoZSBob3QgcGF0aC4K
LSAgICAgICAgSnVtcCBub3ROdW1iZXIgPSBicmFuY2gzMihBYm92ZSwgcmVnVDEsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKTsKLQotICAgICAgICBlbWl0TG9hZERvdWJsZShjb25k
LCBmcFJlZ1QwKTsKLSAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoRG91YmxlTm9uWmVy
byhmcFJlZ1QwLCBmcFJlZ1QxKSwgdGFyZ2V0KTsKLSAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
anVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2p0cnVlKSk7Ci0KLSAgICAgICAgbm90TnVtYmVyLmxp
bmsodGhpcyk7Ci0gICAgfQotCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db252ZXJ0SlNW
YWx1ZVRvQm9vbGVhbiwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIGFkZEp1bXAo
YnJhbmNoVGVzdDMyKE5vblplcm8sIHJlc3VsdCksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2plcV9udWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDIwNTQ5NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2MiwxNSArMzYyLDE2IEBAIHZvaWQgSklUOjplbWl0X29wX25vdChJbnN0cnVjdGlv
biogY3VycmUKIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kLCByZWdUMCk7CiAKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpKSwgdGFyZ2V0
KTsKLSAgICBKdW1wIGlzTm9uWmVybyA9IGVtaXRKdW1wSWZJbnQocmVnVDApOworICAgIEdQUlJl
ZyB2YWx1ZSA9IHJlZ1QwOworICAgIEdQUlJlZyByZXN1bHQgPSByZWdUMTsKKyAgICBHUFJSZWcg
c2NyYXRjaCA9IHJlZ1QyOworICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gdHJ1ZTsKIAotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSksIHRhcmdldCk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCB2YWx1ZSk7CisgICAgZW1pdENvbnZl
cnRWYWx1ZVRvQm9vbGVhbihKU1ZhbHVlUmVncyh2YWx1ZSksIHJlc3VsdCwgc2NyYXRjaCwgZnBS
ZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpOwogCi0gICAgaXNOb25aZXJvLmxpbmsodGhpcyk7CisgICAg
YWRkSnVtcChicmFuY2hUZXN0MzIoWmVybywgcmVzdWx0KSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfamVxX251bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTQ0NCwxNSArNDQ1LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2VxKEluc3RydWN0aW9uKiBjdXJy
ZW4KIHZvaWQgSklUOjplbWl0X29wX2p0cnVlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQsIHJlZ1QwKTsKLQotICAgIEp1bXAgaXNaZXJvID0gYnJhbmNoNjQoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSkpOwotICAgIGFk
ZEp1bXAoZW1pdEp1bXBJZkludChyZWdUMCksIHRhcmdldCk7CiAKLSAgICBhZGRKdW1wKGJyYW5j
aDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
dHJ1ZSkpKSksIHRhcmdldCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSkpOwot
Ci0gICAgaXNaZXJvLmxpbmsodGhpcyk7CisgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAg
R1BSUmVnIHJlc3VsdCA9IHJlZ1QxOworICAgIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7CisgICAg
Ym9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgdmFsdWUp
OworICAgIGVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oSlNWYWx1ZVJlZ3ModmFsdWUpLCByZXN1
bHQsIHNjcmF0Y2gsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICBhZGRKdW1wKGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZXN1bHQpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTgzNywyMCArODM3LDYg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25vdChJbnN0cnVjdGlvbiogYwogICAgIHNsb3dQYXRo
Q2FsbC5jYWxsKCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZmFsc2UoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKLXsKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpOyAvLyBpbnZlcnRlZCEKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2p0cnVlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlZ1QwKTsKLSAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2VxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lv
biAyMDU0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDMyLDE0ICsxMDMyLDYgQEAgc2l6ZV90IEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQ29tcGFyZUdyZQogICAgIHJldHVybiBqc0xlc3NFcTxmYWxzZT4oZXhlYywg
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSkp
OwogfQogCi1zaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0SlNWYWx1ZVRvQm9v
bGVhbihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcCkKLXsKLSAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKLSAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcCkudG9C
b29sZWFuKGV4ZWMpOwotfQotCiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJl
RXEoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AyKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDIwNTQ5NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNDYsNyArMzQ2LDYgQEAgc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29t
cGFyZUxlcwogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3NFcShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKIHNp
emVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogc2l6ZV90IEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLXNpemVfdCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkNvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlKSBXVEZfSU5URVJOQUw7CiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJl
RXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJO
QUw7CiAjaWYgVVNFKEpTVkFMVUU2NCkKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQ29tcGFyZVN0cmluZ0VxKEV4ZWNTdGF0ZSosIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiBy
aWdodCkgV1RGX0lOVEVSTkFMOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>