<?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>227757</bug_id>
          
          <creation_ts>2021-07-07 11:22:00 -0700</creation_ts>
          <short_desc>Fix uses of Dependency::fence with respect to the compiler outsmarting us</short_desc>
          <delta_ts>2021-07-22 13:05:19 -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>InRadar</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>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1775348</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-07-07 11:22:00 -0700</bug_when>
    <thetext>stress/compare-number-and-other.js.ftl-eager: GC Verifier: ERROR cell 0x102e49ba0 was not marked
stress/compare-number-and-other.js.ftl-eager: test_script_33113: line 2: 39217 Trace/BPT trap: 5       ( &quot;$@&quot; ../../.vm/JavaScriptCore.framework/Helpers/jsc --useFTLJIT\=false --useFunctionDotArguments\=true --validateExceptionChecks\=true --useDollarVM\=true --maxPerThreadStackUsage\=1572864 --airForceBriggsAllocator\=true --useRandomizingExecutableIslandAllocation\=true --forcePolyProto\=true --useDataIC\=true --useFTLJIT\=true --thresholdForJITAfterWarmUp\=10 --thresholdForJITSoon\=10 --thresholdForOptimizeAfterWarmUp\=20 --thresholdForOptimizeAfterLongWarmUp\=20 --thresholdForOptimizeSoon\=20 --thresholdForFTLOptimizeAfterWarmUp\=20 --thresholdForFTLOptimizeSoon\=20 --thresholdForOMGOptimizeAfterWarmUp\=20 --thresholdForOMGOptimizeSoon\=20 --maximumEvalCacheableSourceLength\=150000 --useEagerCodeBlockJettisonTiming\=true --repatchBufferingCountdown\=0 --collectContinuously\=true --useGenerationalGC\=false --verifyGC\=true compare-number-and-other.js )

Running on an M1 Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1775357</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-07-07 11:34:29 -0700</bug_when>
    <thetext>&lt;rdar://problem/80280931&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776722</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-07-13 12:37:37 -0700</bug_when>
    <thetext>Been looking into this since yesterday. Adding more logging. Current status is that I&apos;m pretty confused, and not sure what&apos;s going on. My logging is indicating something different than what the verifier is saying. Some of my logging is saying an object is marked or that we&apos;re marking it, but the verifier is disagreeing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1777101</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-07-14 17:24:32 -0700</bug_when>
    <thetext>Still getting some weird data. We&apos;re seeing a cell that is marked, but then somehow the verifier sees it as unmarked when it look at the normal mark bits.

Need to spend some more time verifying that this is actually what&apos;s happening, because it&apos;s very peculiar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1777375</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-07-15 16:59:29 -0700</bug_when>
    <thetext>Issue seems to go away if I turn off parallel marking constraint solver</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1777646</commentid>
    <comment_count>5</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-07-16 16:35:40 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #4)
&gt; Issue seems to go away if I turn off parallel marking constraint solver

This is wrong. It doesn&apos;t go away. But it becomes less common.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778345</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-07-20 19:17:39 -0700</bug_when>
    <thetext>What I&apos;m seeing is truly bizarre at this point. Starting to look into the low level details. We&apos;re seeing an isMarked check return true then return false for the same object, inside the same function.

Like:

if (visitor.isMarked(this)) {
   // do some things
   RELEASE_ASSERT(visitor.isMarked(this)); // &lt;---- crashes!!!!
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778346</commentid>
    <comment_count>7</comment_count>
      <attachid>433916</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-07-20 19:29:29 -0700</bug_when>
    <thetext>Created attachment 433916
patch I&apos;m using to test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778365</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-07-20 22:56:33 -0700</bug_when>
    <thetext>The only change needed to apply to ToT to get things to crash is:

Index: Source/JavaScriptCore/bytecode/CodeBlock.cpp
===================================================================
--- Source/JavaScriptCore/bytecode/CodeBlock.cpp	(revision 280124)
+++ Source/JavaScriptCore/bytecode/CodeBlock.cpp	(working copy)
@@ -1214,8 +1214,16 @@ void CodeBlock::determineLiveness(const 
     
 #if ENABLE(DFG_JIT)
     VM&amp; vm = *m_vm;
-    if (visitor.isMarked(this))
+    if (visitor.isMarked(this)) {
+        WTF::compilerFence();
+        if (!visitor.isMarked(this)) {
+            dataLogLn(&quot;bit flip, crashing&quot;);
+            dataLogLn();
+            RELEASE_ASSERT_NOT_REACHED();
+        }
+
         return;
+    }
     
     // In rare and weird cases, this could be called on a baseline CodeBlock. One that I found was
     // that we might decide that the CodeBlock should be jettisoned due to old age, so the</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778623</commentid>
    <comment_count>9</comment_count>
      <attachid>433981</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-07-21 17:59:27 -0700</bug_when>
    <thetext>Created attachment 433981
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778624</commentid>
    <comment_count>10</comment_count>
      <attachid>433981</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-07-21 18:01:01 -0700</bug_when>
    <thetext>Comment on attachment 433981
patch

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

&gt; Source/WTF/wtf/Atomics.h:439
&gt; +    static Dependency loadAndFence(T* pointer, T&amp; output)

I could also change the API to be pair based instead of using an out parameter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778732</commentid>
    <comment_count>11</comment_count>
      <attachid>433981</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-07-22 10:01:56 -0700</bug_when>
    <thetext>Comment on attachment 433981
patch

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

r=me

&gt; Source/JavaScriptCore/runtime/SparseArrayValueMap.cpp:-170
&gt; -JSValue SparseArrayEntry::getConcurrently() const

I&apos;m a bit surprised that you had to remove const here.
Could this be fixed by also having a version of loadAndFence that takes a const T* ?

&gt;&gt; Source/WTF/wtf/Atomics.h:439
&gt;&gt; +    static Dependency loadAndFence(T* pointer, T&amp; output)
&gt; 
&gt; I could also change the API to be pair based instead of using an out parameter.

It would be cleaner, but considering that this is going to be on very hot paths, and my lack of trust in LLVM&apos;s abilitiy to optimize a struct return type, I&apos;m in favor of sticking with the out param.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778771</commentid>
    <comment_count>12</comment_count>
      <attachid>433981</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-07-22 11:21:34 -0700</bug_when>
    <thetext>Comment on attachment 433981
patch

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

&gt;&gt; Source/JavaScriptCore/runtime/SparseArrayValueMap.cpp:-170
&gt;&gt; -JSValue SparseArrayEntry::getConcurrently() const
&gt; 
&gt; I&apos;m a bit surprised that you had to remove const here.
&gt; Could this be fixed by also having a version of loadAndFence that takes a const T* ?

Good point. I think it&apos;ll be as easy as taking &apos;const T*&apos; in that function.

&gt;&gt;&gt; Source/WTF/wtf/Atomics.h:439
&gt;&gt;&gt; +    static Dependency loadAndFence(T* pointer, T&amp; output)
&gt;&gt; 
&gt;&gt; I could also change the API to be pair based instead of using an out parameter.
&gt; 
&gt; It would be cleaner, but considering that this is going to be on very hot paths, and my lack of trust in LLVM&apos;s abilitiy to optimize a struct return type, I&apos;m in favor of sticking with the out param.

ok, I&apos;ll leave it as is for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778781</commentid>
    <comment_count>13</comment_count>
      <attachid>434025</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-07-22 12:02:58 -0700</bug_when>
    <thetext>Created attachment 434025
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778803</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-07-22 13:05:16 -0700</bug_when>
    <thetext>Committed r280195 (239883@main): &lt;https://commits.webkit.org/239883@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 434025.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433916</attachid>
            <date>2021-07-20 19:29:29 -0700</date>
            <delta_ts>2021-07-21 17:59:27 -0700</delta_ts>
            <desc>patch I&apos;m using to test</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>17454</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAyODAxMjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwOCwzOCArMTIwOCw2OSBAQCB0ZW1wbGF0ZSB2
b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpCiB0ZW1wbGF0ZSB2b2lkIENvZGVCbG9jazo6
cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0
b3ImKTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KLXZvaWQgQ29kZUJsb2NrOjpkZXRl
cm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9y
KQordm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqJiByZWFzb24pCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHZpc2l0b3IpOwogICAgIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIFZNJiB2
bSA9ICptX3ZtOwotICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKHRoaXMpKQotICAgICAgICByZXR1
cm47CisKKyAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFZpc2l0b3IsIFNsb3RWaXNp
dG9yPikgeworICAgICAgICBib29sIHN0YWxlVmVyc2lvbiA9IGZhbHNlOworICAgICAgICBpZiAo
dmlzaXRvci5pc01hcmtlZCh0aGlzLCBzdGFsZVZlcnNpb24pKSB7CisgICAgICAgICAgICByZWFz
b24gPSAiYWxyZWFkeSBtYXJrZWQiOworICAgICAgICAgICAgaWYgKCF2bS5oZWFwLmlzTWFya2Vk
VmVyaWZ5KHRoaXMpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJHb2luZyB0byBjcmFz
aCBiZWNhdXNlIHZpc2l0b3IgdGhpbmtzIHdlJ3JlIG1hcmtlZCwgYnV0IHRoZSB2ZXJpZnkgYml0
cyBzYXkgd2UncmUgbm90Iik7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJ1c2luZyBTbG90
VmlzaXRvciIpOworICAgICAgICAgICAgICAgIGJvb2wgc3RhbGVWZXJzaW9uU2Vjb25kVGltZSA9
IGZhbHNlOworICAgICAgICAgICAgICAgIGJvb2wgaXNNYXJrZWRTZWNvbmRUaW1lID0gdmlzaXRv
ci5pc01hcmtlZCh0aGlzLCBzdGFsZVZlcnNpb25TZWNvbmRUaW1lKTsKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nTG4oImFza2luZyBpc01hcmtlZCBhZ2FpbjogIiwgaXNNYXJrZWRTZWNvbmRUaW1l
KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oInN0YWxlIHZlcnNpb24gZmlyc3QgdGltZTog
Iiwgc3RhbGVWZXJzaW9uKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oInN0YWxlIHZlcnNp
b24gc2Vjb25kIHRpbWU6ICIsIHN0YWxlVmVyc2lvblNlY29uZFRpbWUpOworICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbigiaXMgcHJlY2lzZSBhbGxvY2F0aW9uOiAiLCB0aGlzLT5pc1ByZWNpc2VB
bGxvY2F0aW9uKCkpOworICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiaXMgbWFya2VkIHZlcmlm
eSBhdCBlbmQ6ICIsIHZtLmhlYXAuaXNNYXJrZWRWZXJpZnkodGhpcykpOworICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbigpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZCh0aGlzKSkgeworICAgICAg
ICAgICAgcmVhc29uID0gImFscmVhZHkgbWFya2VkIjsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KICAgICAKICAgICAvLyBJbiByYXJlIGFuZCB3ZWlyZCBjYXNlcywgdGhp
cyBjb3VsZCBiZSBjYWxsZWQgb24gYSBiYXNlbGluZSBDb2RlQmxvY2suIE9uZSB0aGF0IEkgZm91
bmQgd2FzCiAgICAgLy8gdGhhdCB3ZSBtaWdodCBkZWNpZGUgdGhhdCB0aGUgQ29kZUJsb2NrIHNo
b3VsZCBiZSBqZXR0aXNvbmVkIGR1ZSB0byBvbGQgYWdlLCBzbyB0aGUKICAgICAvLyBpc01hcmtl
ZCBjaGVjayBkb2Vzbid0IHByb3RlY3QgdXMuCi0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXpp
bmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRU
eXBlKCkpKSB7CisgICAgICAgIHJlYXNvbiA9ICJub3Qgb3B0aW1pemluZyBKSVQgdHlwZSI7CiAg
ICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgCiAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21t
b24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgIC8vIE5vdyBjaGVjayBhbGwgb2Ygb3Vy
IHdlYWsgcmVmZXJlbmNlcy4gSWYgYWxsIG9mIHRoZW0gYXJlIGxpdmUsIHRoZW4gd2UKICAgICAv
LyBoYXZlIHByb3ZlZCBsaXZlbmVzcyBhbmQgc28gd2Ugc2NhbiBvdXIgc3Ryb25nIHJlZmVyZW5j
ZXMuIElmIGF0IGVuZCBvZgogICAgIC8vIEdDIHdlIHN0aWxsIGhhdmUgbm90IHByb3ZlZCBsaXZl
bmVzcywgdGhlbiB0aGlzIGNvZGUgYmxvY2sgaXMgdG9hc3QuCiAgICAgYm9vbCBhbGxBcmVMaXZl
U29GYXIgPSB0cnVlOworICAgIGJvb2wgYWxsQXJlTGl2ZVNvRmFyUmVhbEhlYXAgPSB0cnVlOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPm1fd2Vha1JlZmVyZW5jZXMu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgSlNDZWxsKiByZWZlcmVuY2UgPSBkZmdDb21tb24tPm1f
d2Vha1JlZmVyZW5jZXNbaV0uZ2V0KCk7CiAgICAgICAgIEFTU0VSVCghanNEeW5hbWljQ2FzdDxD
b2RlQmxvY2sqPih2bSwgcmVmZXJlbmNlKSk7CisgICAgICAgIGFsbEFyZUxpdmVTb0ZhclJlYWxI
ZWFwICY9IHZtLmhlYXAuaXNNYXJrZWQocmVmZXJlbmNlKTsKICAgICAgICAgaWYgKCF2aXNpdG9y
LmlzTWFya2VkKHJlZmVyZW5jZSkpIHsKICAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZh
bHNlOworICAgICAgICAgICAgcmVhc29uID0gIm5vdCBhbGwgYXJlIGxpdmUgc28gZmFyIHdlYWsg
cmVmZXJlbmNlIjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogICAgIGlm
IChhbGxBcmVMaXZlU29GYXIpIHsKICAgICAgICAgZm9yIChTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJ
RCA6IGRmZ0NvbW1vbi0+bV93ZWFrU3RydWN0dXJlUmVmZXJlbmNlcykgewogICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSUQpOworICAg
ICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyUmVhbEhlYXAgJj0gdm0uaGVhcC5pc01hcmtlZChzdHJ1
Y3R1cmUpOwogICAgICAgICAgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKHN0cnVjdHVyZSkpIHsK
KyAgICAgICAgICAgICAgICByZWFzb24gPSAibm90IGFsbCBhcmUgbGl2ZSBzbyBmYXIgd2VhayBz
dHJ1Y3R1cmUiOwogICAgICAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTI0OCwxNyArMTI3OSwzMiBA
QCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgCiAgICAgLy8g
SWYgc29tZSB3ZWFrIHJlZmVyZW5jZXMgYXJlIGRlYWQsIHRoZW4gdGhpcyBmaXhwb2ludCBpdGVy
YXRpb24gd2FzCiAgICAgLy8gdW5zdWNjZXNzZnVsLgotICAgIGlmICghYWxsQXJlTGl2ZVNvRmFy
KQorICAgIGlmICghYWxsQXJlTGl2ZVNvRmFyKSB7CisgICAgICAgIGlmICghdmlzaXRvci5pc1Ns
b3RWaXNpdG9yKCkpIHsKKyAgICAgICAgICAgIGlmIChhbGxBcmVMaXZlU29GYXJSZWFsSGVhcCkK
KyAgICAgICAgICAgICAgICByZWFzb24gPSAibm90IGFsbCBhbGl2ZSBzbyBmYXIsIGJ1dCBhbGwg
YXJlIGFsaXZlIGluIHJlYWwgaGVhcCI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgcmVhc29uID0gIm5vdCBhbGwgYWxpdmUgc28gZmFyLCBhbmQgbm90IGFsbCBhbGl2ZSBpbiBy
ZWFsIGhlYXAiOworICAgICAgICB9CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgCisgICAg
cmVhc29uID0gImFwcGVuZCB1bmJhcnJpZXJlZCBiZWNhdXNlIGV2ZXJ5dGhpbmcgaXMgYWxpdmUi
OworICAgIGlmICghdmlzaXRvci5pc1Nsb3RWaXNpdG9yKCkpIHsKKyAgICAgICAgaWYgKGFsbEFy
ZUxpdmVTb0ZhclJlYWxIZWFwKQorICAgICAgICAgICAgcmVhc29uID0gImFwcGVuZCB1bmJhcnJp
ZXJlZCwgZXZlcnl0aGluZyBpcyBhbGl2ZSwgYW5kIGV2ZXJ5dGhpbmcgaXMgYWxpdmUgaW4gdGhl
IHJlYWwgaGVhcCI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlYXNvbiA9ICJhcHBlbmQg
dW5iYXJyaWVyZWQsIGV2ZXJ5dGhpbmcgaXMgYWxpdmUsIGFuZCBOT1QgZXZlcnl0aGluZyBpcyBh
bGl2ZSBpbiB0aGUgcmVhbCBoZWFwIjsKKyAgICB9CisKICAgICAvLyBBbGwgd2VhayByZWZlcmVu
Y2VzIGFyZSBsaXZlLiBSZWNvcmQgdGhpcyBpbmZvcm1hdGlvbiBzbyB3ZSBkb24ndAogICAgIC8v
IGNvbWUgYmFjayBoZXJlIGFnYWluLCBhbmQgc2NhbiB0aGUgc3Ryb25nIHJlZmVyZW5jZXMuCiAg
ICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0aGlzKTsKICNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKIH0KIAotdGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKLXRlbXBsYXRl
IHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxp
dmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFic3RyYWN0U2xvdFZpc2l0b3ImLCBj
b25zdCBjaGFyKiYpOwordGVtcGxhdGUgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNz
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJiwgY29uc3QgY2hhciomKTsK
IAogdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjgw
MTIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05NTcsOCArOTU3LDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBzaG91bGRK
ZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZShWTSYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IGJvb2wgc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBWaXNpdG9yJik7CiAgICAgCitwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gdm9pZCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBWaXNpdG9yJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBkZXRl
cm1pbmVMaXZlbmVzcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJik7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiwgY29uc3QgY2hhciomKTsKK3ByaXZhdGU6CiAg
ICAgICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgc3Ryb25nbHlWaXNp
dFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYpOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZl
cmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZpc2l0b3ImKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZS5jcHAJKHJldmlzaW9uIDI4MDEyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6Zmlu
YWxpemUKICAgICAgICAgICAgIGNvZGVCbG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29u
RHVlVG9PbGRBZ2UpOwogICAgICAgICBtX2NvZGVCbG9jay5jbGVhcigpOwogICAgIH0KLSAgICAK
KwogICAgIHZtLmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aEZpbmFsaXplcnMucmVtb3Zl
KHRoaXMpOwogICAgIHZtLmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aENvbnN0cmFpbnRz
LnJlbW92ZSh0aGlzKTsKIH0KQEAgLTE5MywxMyArMTkzLDE0IEBAIEV4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2U6OkV4ZWN1dGFibGVUb0MKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
LXZvaWQgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6cnVuQ29uc3RyYWludChjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBf
X2F0dHJpYnV0ZV9fKChvcHRub25lKSkgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OnJ1bkNv
bnN0cmFpbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgVmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrLmdl
dCgpOwogICAgIAogICAgIGNvZGVCbG9jay0+cHJvcGFnYXRlVHJhbnNpdGlvbnMobG9ja2VyLCB2
aXNpdG9yKTsKLSAgICBjb2RlQmxvY2stPmRldGVybWluZUxpdmVuZXNzKGxvY2tlciwgdmlzaXRv
cik7CiAKKyAgICBjb25zdCBjaGFyKiYgcmVhc29uID0gdmlzaXRvci5pc1Nsb3RWaXNpdG9yKCkg
PyBtX3JlYWxSZWFzb24gOiBtX3ZlcmlmaWVyUmVhc29uOworICAgIGNvZGVCbG9jay0+ZGV0ZXJt
aW5lTGl2ZW5lc3MobG9ja2VyLCB2aXNpdG9yLCByZWFzb24pOwogICAgIGlmICh2aXNpdG9yLmlz
TWFya2VkKGNvZGVCbG9jaykpCiAgICAgICAgIHZtLmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Vz
V2l0aENvbnN0cmFpbnRzLnJlbW92ZSh0aGlzKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Uu
aAkocmV2aXNpb24gMjgwMTIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUsMTAg
QEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHJ1bkNvbnN0
cmFpbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBWaXNpdG9yJik7CiAKICAgICBX
cml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKKyAgICAKK3B1YmxpYzoKKyAgICBj
b25zdCBjaGFyKiBtX3JlYWxSZWFzb24geyAiIiB9OworICAgIGNvbnN0IGNoYXIqIG1fdmVyaWZp
ZXJSZWFzb24geyAiIiB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvci5oCShyZXZpc2lv
biAyODAxMjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNp
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw2ICsxMjYsOCBAQCBwdWJsaWM6CiAgICAgICAg
IERlZmF1bHRNYXJraW5nVmlvbGF0aW9uQXNzZXJ0aW9uU2NvcGUoQWJzdHJhY3RTbG90VmlzaXRv
ciYpIHsgfQogICAgIH07CiAKKyAgICBib29sIGlzU2xvdFZpc2l0b3IoKSBjb25zdCB7IHJldHVy
biAhbV9uZWVkc0V4dHJhT3BhcXVlUm9vdEhhbmRsaW5nOyB9CisKICAgICB2aXJ0dWFsIH5BYnN0
cmFjdFNsb3RWaXNpdG9yKCkgPSBkZWZhdWx0OwogCiAgICAgTWFya1N0YWNrQXJyYXkmIGNvbGxl
Y3Rvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyODAxMjEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsOCBA
QAogI2luY2x1ZGUgPHd0Zi9TaW1wbGVTdGF0cy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KIAorI2luY2x1ZGUgIkV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaCIKKwogI2lmIFVTRShC
TUFMTE9DX01FTU9SWV9GT09UUFJJTlRfQVBJKQogI2luY2x1ZGUgPGJtYWxsb2MvYm1hbGxvYy5o
PgogI2VuZGlmCkBAIC01OTcsNyArNTk5LDE1IEBAIHZvaWQgSGVhcDo6ZmluYWxpemVVbmNvbmRp
dGlvbmFsRmluYWxpemUKICAgICB2bSgpLmJ1aWx0aW5FeGVjdXRhYmxlcygpLT5maW5hbGl6ZVVu
Y29uZGl0aW9uYWxseSgpOwogICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXpl
cnM8RnVuY3Rpb25FeGVjdXRhYmxlPih2bSgpLmZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlLnNwYWNl
KTsKICAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPFN5bWJvbFRhYmxl
Pih2bSgpLnN5bWJvbFRhYmxlU3BhY2UpOworCiAgICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlv
bmFsRmluYWxpemVyczxFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlPih2bSgpLmV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2VzV2l0aEZpbmFsaXplcnMpOyAvLyBXZSBydW4gdGhpcyBiZWZvcmUgQ29k
ZUJsb2NrJ3MgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXIgc2luY2UgQ29kZUJsb2NrIGxvb2tzIGF0
IHRoZSBvd25lciBleGVjdXRhYmxlJ3MgaW5zdGFsbGVkIENvZGVCbG9jayBpbiBpdHMgZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkuCisKKyAgICB2bSgpLmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VT
cGFjZS5mb3JFYWNoTWFya2VkQ2VsbCgKKyAgICAgICAgW10gKEhlYXBDZWxsKiBjZWxsLCBIZWFw
Q2VsbDo6S2luZCkgeworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZSo+KGNlbGwpLT5tX3JlYWxSZWFzb24gPSAiIjsKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqPihjZWxsKS0+bV92ZXJpZmllclJlYXNvbiA9
ICIiOworICAgICAgICB9KTsKKwogICAgIHZtKCkuZm9yRWFjaENvZGVCbG9ja1NwYWNlKAogICAg
ICAgICBbJl0gKGF1dG8mIHNwYWNlKSB7CiAgICAgICAgICAgICB0aGlzLT5maW5hbGl6ZU1hcmtl
ZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPENvZGVCbG9jaz4oc3BhY2Uuc2V0KTsKQEAgLTE1NjQs
NiArMTU3NCw4IEBAIE5FVkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkVuZFBoYXNlKEdDQ28KICAg
ICBtX2xhc3RHQ1N0YXJ0VGltZSA9IG1fY3VycmVudEdDU3RhcnRUaW1lOwogICAgIG1fbGFzdEdD
RW5kVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogICAgIG1fdG90YWxHQ1RpbWUgKz0gbV9s
YXN0R0NFbmRUaW1lIC0gbV9sYXN0R0NTdGFydFRpbWU7CisKKyAgICBtX3ZlcmlmeU1hcmtlZENl
bGxzLmNsZWFyKCk7CiAgICAgICAgIAogICAgIHJldHVybiBjaGFuZ2VQaGFzZShjb25uLCBDb2xs
ZWN0b3JQaGFzZTo6Tm90UnVubmluZyk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5oCShyZXZpc2lvbiAyODAxMjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw2ICsxMjksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBzX3RpbWVDaGVja1Jlc29sdXRpb24gPSAxNjsKIAogICAgIGJv
b2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOworICAgIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCos
IGJvb2wmIGZsaXApOwogICAgIHN0YXRpYyBib29sIHRlc3RBbmRTZXRNYXJrZWQoSGVhcFZlcnNp
b24sIGNvbnN0IHZvaWQqKTsKICAgICAKICAgICBzdGF0aWMgc2l6ZV90IGNlbGxTaXplKGNvbnN0
IHZvaWQqKTsKQEAgLTc2MSw2ICs3NjIsMTEgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcGFyYWxs
ZWxNYXJrZXJzU2hvdWxkRXhpdCB7IGZhbHNlIH07CiAgICAgTG9jayBtX2NvbGxlY3RDb250aW51
b3VzbHlMb2NrOwogICAgIENvbmRpdGlvbiBtX2NvbGxlY3RDb250aW51b3VzbHlDb25kaXRpb247
CitwdWJsaWM6CisgICAgdm9pZCBzZXRJc01hcmtlZFZlcmlmeShIZWFwQ2VsbCopOworICAgIGJv
b2wgaXNNYXJrZWRWZXJpZnkoSGVhcENlbGwqKTsKKyAgICBMb2NrIG1fdmVyaWZ5TWFya2VkQ2Vs
bHNMb2NrOworICAgIEhhc2hTZXQ8dm9pZCo+IG1fdmVyaWZ5TWFya2VkQ2VsbHM7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElu
bGluZXMuaAkocmV2aXNpb24gMjgwMTIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTkgKzY3LDQxIEBAIGlubGluZSBi
b29sIEhlYXA6OndvcmxkSXNTdG9wcGVkKCkgY29uc3QKICAgICByZXR1cm4gbV93b3JsZElzU3Rv
cHBlZDsKIH0KIAorQUxXQVlTX0lOTElORSBib29sIEhlYXA6OmlzTWFya2VkVmVyaWZ5KEhlYXBD
ZWxsKiBjZWxsKQoreworICAgIExvY2tlciBsb2NrZXIgeyBtX3ZlcmlmeU1hcmtlZENlbGxzTG9j
ayB9OworICAgIHJldHVybiBtX3ZlcmlmeU1hcmtlZENlbGxzLmNvbnRhaW5zKGNlbGwpOworfQor
CiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcmF3Q2VsbCkK
IHsKKyAgICBib29sIGlnbm9yZWQ7CisgICAgcmV0dXJuIGlzTWFya2VkKHJhd0NlbGwsIGlnbm9y
ZWQpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWQoY29uc3Qgdm9pZCog
cmF3Q2VsbCwgYm9vbCYgZmxpcCkKK3sKICAgICBBU1NFUlQoIW1faXNNYXJraW5nRm9yR0NWZXJp
Zmllcik7CisgICAgZmxpcCA9IGZhbHNlOwogICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9j
YXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7CiAgICAgaWYgKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRp
b24oKSkKICAgICAgICAgcmV0dXJuIGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQo
KTsKICAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIHJl
dHVybiBibG9jay5pc01hcmtlZChtX29iamVjdFNwYWNlLm1hcmtpbmdWZXJzaW9uKCksIGNlbGwp
OworICAgIHJldHVybiBibG9jay5pc01hcmtlZChtX29iamVjdFNwYWNlLm1hcmtpbmdWZXJzaW9u
KCksIGNlbGwsIGZsaXApOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSGVhcDo6c2V0SXNNYXJr
ZWRWZXJpZnkoSGVhcENlbGwqIGNlbGwpCit7CisgICAgTG9ja2VyIGxvY2tlciB7IG1fdmVyaWZ5
TWFya2VkQ2VsbHNMb2NrIH07CisgICAgbV92ZXJpZnlNYXJrZWRDZWxscy5hZGQoY2VsbCk7CiB9
CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjp0ZXN0QW5kU2V0TWFya2VkKEhlYXBWZXJzaW9u
IG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiByYXdDZWxsKQogewogICAgIEhlYXBDZWxsKiBj
ZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7CisKKyAgICBjZWxsLT5oZWFw
KCktPnNldElzTWFya2VkVmVyaWZ5KGNlbGwpOworCiAgICAgaWYgKGNlbGwtPmlzUHJlY2lzZUFs
bG9jYXRpb24oKSkKICAgICAgICAgcmV0dXJuIGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCkudGVz
dEFuZFNldE1hcmtlZCgpOwogICAgIE1hcmtlZEJsb2NrJiBibG9jayA9IGNlbGwtPm1hcmtlZEJs
b2NrKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJl
dmlzaW9uIDI4MDEyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyOCw2ICszMjgsNyBAQCBwdWJsaWM6CiAKICAgICBib29s
IGlzTWFya2VkKGNvbnN0IHZvaWQqKTsKICAgICBib29sIGlzTWFya2VkKEhlYXBWZXJzaW9uIG1h
cmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKik7CisgICAgYm9vbCBpc01hcmtlZChIZWFwVmVyc2lv
biBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9pZCosIGJvb2wmIGZsaXApOwogICAgIGJvb2wgaXNN
YXJrZWQoY29uc3Qgdm9pZCosIERlcGVuZGVuY3kpOwogICAgIGJvb2wgdGVzdEFuZFNldE1hcmtl
ZChjb25zdCB2b2lkKiwgRGVwZW5kZW5jeSk7CiAgICAgICAgIApAQCAtNTg1LDkgKzU4NiwxNyBA
QCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWRSYXcoY29uCiAKIGlubGluZSBib29s
IE1hcmtlZEJsb2NrOjppc01hcmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qg
dm9pZCogcCkKIHsKKyAgICBib29sIGlnbm9yZWQ7CisgICAgcmV0dXJuIGlzTWFya2VkKG1hcmtp
bmdWZXJzaW9uLCBwLCBpZ25vcmVkKTsKK30KKworaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6Omlz
TWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiBwLCBib29sJiBm
bGlwKQorewogICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBmb290ZXIoKS5tX21hcmtpbmdWZXJz
aW9uOwotICAgIGlmIChVTkxJS0VMWSh2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKSkKKyAgICBp
ZiAoVU5MSUtFTFkodmVyc2lvbiAhPSBtYXJraW5nVmVyc2lvbikpIHsKKyAgICAgICAgZmxpcCA9
IHRydWU7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgcmV0dXJuIGZvb3Rlcigp
Lm1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCksIERlcGVuZGVuY3k6OmZlbmNlKHZlcnNpb24pKTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAko
cmV2aXNpb24gMjgwMTIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsNiArMjUyLDcgQEAgQUxXQVlTX0lOTElORSB2
b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaQogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlw
ZT4KIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6c2V0TWFya2VkQW5kQXBwZW5kVG9N
YXJrU3RhY2soQ29udGFpbmVyVHlwZSYgY29udGFpbmVyLCBKU0NlbGwqIGNlbGwsIERlcGVuZGVu
Y3kgZGVwZW5kZW5jeSkKIHsKKyAgICBtX2hlYXAuc2V0SXNNYXJrZWRWZXJpZnkoY2VsbCk7CiAg
ICAgaWYgKGNvbnRhaW5lci50ZXN0QW5kU2V0TWFya2VkKGNlbGwsIGRlcGVuZGVuY3kpKQogICAg
ICAgICByZXR1cm47CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmgJKHJldmlzaW9uIDI4MDEyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsNyBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc0ZpcnN0VmlzaXQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lzRmlyc3RW
aXNpdDsgfQogCiAgICAgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKikgY29uc3QgZmluYWw7Cisg
ICAgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKiwgYm9vbCYgaXNGbGlwKSBjb25zdDsKICAgICBi
b29sIGlzTWFya2VkKE1hcmtlZEJsb2NrJiwgSGVhcENlbGwqKSBjb25zdCBmaW5hbDsKICAgICBi
b29sIGlzTWFya2VkKFByZWNpc2VBbGxvY2F0aW9uJiwgSGVhcENlbGwqKSBjb25zdCBmaW5hbDsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxp
bmVzLmgJKHJldmlzaW9uIDI4MDEyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNiArMTQwLDExIEBAIEFM
V0FZU19JTkxJTkUgYm9vbCBTbG90VmlzaXRvcjo6aXNNYXJrZWQKICAgICByZXR1cm4gaGVhcCgp
LT5pc01hcmtlZChwKTsKIH0KIAorQUxXQVlTX0lOTElORSBib29sIFNsb3RWaXNpdG9yOjppc01h
cmtlZChjb25zdCB2b2lkKiBwLCBib29sJiBmbGlwKSBjb25zdAoreworICAgIHJldHVybiBoZWFw
KCktPmlzTWFya2VkKHAsIGZsaXApOworfQorCiBBTFdBWVNfSU5MSU5FIGJvb2wgU2xvdFZpc2l0
b3I6OmlzTWFya2VkKE1hcmtlZEJsb2NrJiBjb250YWluZXIsIEhlYXBDZWxsKiBjZWxsKSBjb25z
dAogewogICAgIHJldHVybiBjb250YWluZXIuaXNNYXJrZWQobWFya2luZ1ZlcnNpb24oKSwgY2Vs
bCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNs
b3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjgwMTIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1
LDggQEAKICNpbmNsdWRlICJWZXJpZmllclNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUg
PHd0Zi9TdGFja1RyYWNlLmg+CiAKKyNpbmNsdWRlICJFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
LmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiB1c2luZyBNYXJrZXJEYXRhID0gVmVyaWZpZXJTbG90
VmlzaXRvcjo6TWFya2VyRGF0YTsKQEAgLTI1MCw4ICsyNTIsMTUgQEAgdm9pZCBWZXJpZmllclNs
b3RWaXNpdG9yOjpkdW1wTWFya2VyRGF0YQogICAgICAgICBjb25zdCBNYXJrZXJEYXRhKiBtYXJr
ZXJEYXRhID0gbnVsbHB0cjsKIAogICAgICAgICBpZiAoY2VsbCkgewotICAgICAgICAgICAgaWYg
KGlzSlNDZWxsS2luZChjZWxsLT5jZWxsS2luZCgpKSkKKyAgICAgICAgICAgIGlmIChpc0pTQ2Vs
bEtpbmQoY2VsbC0+Y2VsbEtpbmQoKSkpIHsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oSlNW
YWx1ZShzdGF0aWNfY2FzdDxKU0NlbGwqPihjZWxsKSkpOworICAgICAgICAgICAgICAgIGlmIChh
dXRvKiByID0ganNEeW5hbWljQ2FzdDxFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKj4odm0oKSwg
c3RhdGljX2Nhc3Q8SlNDZWxsKj4oY2VsbCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2dMbigiTG9va2luZyBhdCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlIG92ZXIgIiwgUmF3UG9p
bnRlcihyLT5jb2RlQmxvY2soKSkpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkVk
Z2UgcmVhbCBHQyByZWFzb246ICIsIHItPm1fcmVhbFJlYXNvbik7CisgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbigiRWRnZSB2ZXJpZmllciBHQyByZWFzb246ICIsIHItPm1fdmVyaWZpZXJS
ZWFzb24pOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGJvb2wgaXNNYXJrZWQgPSBoZWFwKCkt
PmlzTWFya2VkKGNlbGwpOwogICAgICAgICAgICAgY29uc3QgY2hhciogd2FzT3JXYXNOb3QgPSBp
c01hcmtlZCA/ICJ3YXMiIDogIndhcyBOT1QiOwpAQCAtMzU2LDYgKzM2NSw5IEBAIGJvb2wgVmVy
aWZpZXJTbG90VmlzaXRvcjo6bXV0YXRvcklzU3RvcHAKIGJvb2wgVmVyaWZpZXJTbG90VmlzaXRv
cjo6dGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKiByYXdDZWxsKQogewogICAgIEhlYXBDZWxs
KiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7CisKKyAgICBtX2hlYXAu
c2V0SXNNYXJrZWRWZXJpZnkoY2VsbCk7CisKICAgICBpZiAoY2VsbC0+aXNQcmVjaXNlQWxsb2Nh
dGlvbigpKQogICAgICAgICByZXR1cm4gdGVzdEFuZFNldE1hcmtlZChjZWxsLT5wcmVjaXNlQWxs
b2NhdGlvbigpKTsKICAgICByZXR1cm4gdGVzdEFuZFNldE1hcmtlZChjZWxsLT5tYXJrZWRCbG9j
aygpLCBjZWxsKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433981</attachid>
            <date>2021-07-21 17:59:27 -0700</date>
            <delta_ts>2021-07-22 12:02:58 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>13261</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjgwMTY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBA
CisyMDIxLTA3LTIxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEZpeCB1c2VzIG9mIERlcGVuZGVuY3k6OmZlbmNlIHdpdGggcmVzcGVjdCB0byB0aGUgY29tcGls
ZXIgb3V0c21hcnRpbmcgdXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyNzc1NworICAgICAgICA8cmRhcjovL3Byb2JsZW0vODAyODA5MzE+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Ugd2VyZSBydW5u
aW5nIGludG8gaXNzdWVzIG9uIGFybTY0IHdpdGggcmVzcGVjdCB0byB0aGUgbWVtb3J5IG1vZGVs
CisgICAgICAgIG9yZGVyaW5nIG9mIGxvYWRzLCBhbmQgaG93IHRoZSBjb21waWxlciBvcHRpbWl6
ZWQgY29kZSBhcm91bmQgRGVwZW5kZW5jeTo6ZmVuY2UuCisgICAgICAgIFRoZSBpc3N1ZSBtYW5p
ZmVzdGVkIGFzIGNhbGxzIHRvIGlzTWFya2VkIGluY29ycmVjdGx5IHJldHVybmluZyB0cnVlLgor
ICAgICAgICAKKyAgICAgICAgVG8gc2VlIHRoZSBpc3N1ZSwgbGV0J3MgY29uc2lkZXIgYSBwcm9n
cmFtIGxpa2UgdGhpczoKKyAgICAgICAgYSA9IGxvYWQocDEpCisgICAgICAgIGIgPSBsb2FkKHAy
KQorICAgICAgICBpZiAoYSAhPSBiKSByZXR1cm47CisgICAgICAgIGQgPSBEZXBlbmRlbmN5Ojpm
ZW5jZShiKQorICAgICAgICAKKyAgICAgICAgQXQgdGhlIHBvaW50IG9mIGRlZmluaW5nIHRoZSBk
ZXBlbmRlbmN5LCB0aGUgY29tcGlsZXIgaGFzIHByb3ZlbgorICAgICAgICBhID09IGIuIFNvLCBp
bnN0ZWFkIG9mIGJ1aWxkaW5nIHRoZSBkZXBlbmRlbmN5IG9uIHRoZSByZWdpc3RlciB1c2VkCisg
ICAgICAgIGZvciBiLCB3ZSBlbmQgdXAgdXNpbmcgdGhlIHJlZ2lzdGVyIGZvciBhLiBTbyB0aGUg
YWN0dWFsIGNvbXBpbGVkCisgICAgICAgIGNvZGUgZW5kcyB1cCB3aXRoIGEgZGVwZW5kZW5jeSBv
biBsb2FkKHAxKSwgbm90IGxvYWQocDIpLgorICAgICAgICAKKyAgICAgICAgVG8gZml4IHRoaXMs
IHdlIGVuZCB1cCBhZGRpbmcgYSBuZXcgQVBJLCBEZXBlbmRlbmN5Ojpsb2FkRW5kRmVuY2UocG9p
bnRlciwKKyAgICAgICAgcmVzdWx0KSwgd2hpY2ggaXMgZGVmaW5lZCBhczoKKyAgICAgICAgCisg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgICAgIHN0YXRpYyBEZXBlbmRlbmN5IGxv
YWRBbmRGZW5jZShUKiBwb2ludGVyLCBUJiBvdXRwdXQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IFQgdmFsdWUgPSAqb3BhcXVlKHBvaW50ZXIpOworICAgICAgICAgICAgRGVwZW5kZW5jeSBkZXBl
bmRlbmN5ID0gRGVwZW5kZW5jeTo6ZmVuY2UodmFsdWUpOworICAgICAgICAgICAgb3V0cHV0ID0g
b3BhcXVlKHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBkZXBlbmRlbmN5OworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgaXQgc3BsaXQg
ImIiIGluIHRoZSBhYm92ZSBwcm9ncmFtIGludG8gdHdvIHZhbHVlcywKKyAgICAgICAgYW5kIHRo
ZSAiYiIgdGhlIHByb2dyYW0gY29tcGFyZXMgYWdhaW5zdCBpcyBub3Qga25vd24gdG8gdGhlIGNv
bXBpbGVyIHRvIGJlCisgICAgICAgIHRoZSBzYW1lIHZhbHVlIHRoYXQgd2UgYnVpbGQgYSBkZXBl
bmRlbmN5IG9uLgorCisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAoSlND
OjpNYXJrZWRCbG9jazo6YWJvdXRUb01hcmspOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
aXNNYXJrZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHlJbXBsKToKKyAgICAgICAgKiBydW50aW1lL0pTT2Jq
ZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpmZW5jZWRCdXR0ZXJmbHkpOgorICAgICAg
ICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHA6CisgICAgICAgIChKU0M6OlNwYXJz
ZUFycmF5RW50cnk6OmdldENvbmN1cnJlbnRseSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5
RW50cnk6OmdldENvbmN1cnJlbnRseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGlt
ZS9TcGFyc2VBcnJheVZhbHVlTWFwLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmZW5jZWRJbmRleGluZ01vZGUpOgorICAgICAgICAq
IHJ1bnRpbWUvU3RydWN0dXJlSURCbG9iLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEQmxv
Yjo6ZmVuY2VkSW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeSk6CisKIDIwMjEtMDctMjEgIFlp
amlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0eXBlIGNo
ZWNrIGVycm9yIGluIHRlc3RiMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRCbG9jay5oCShyZXZpc2lvbiAyODAxMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjcsMTAgKzU2NywxMSBAQCBpbmxp
bmUgYm9vbCBNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZShICiAKIGlubGluZSBEZXBlbmRlbmN5
IE1hcmtlZEJsb2NrOjphYm91dFRvTWFyayhIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbikKIHsK
LSAgICBIZWFwVmVyc2lvbiB2ZXJzaW9uID0gZm9vdGVyKCkubV9tYXJraW5nVmVyc2lvbjsKKyAg
ICBIZWFwVmVyc2lvbiB2ZXJzaW9uOworICAgIERlcGVuZGVuY3kgZGVwZW5kZW5jeSA9IERlcGVu
ZGVuY3k6OmxvYWRBbmRGZW5jZSgmZm9vdGVyKCkubV9tYXJraW5nVmVyc2lvbiwgdmVyc2lvbik7
CiAgICAgaWYgKFVOTElLRUxZKHZlcnNpb24gIT0gbWFya2luZ1ZlcnNpb24pKQogICAgICAgICBh
Ym91dFRvTWFya1Nsb3cobWFya2luZ1ZlcnNpb24pOwotICAgIHJldHVybiBEZXBlbmRlbmN5Ojpm
ZW5jZSh2ZXJzaW9uKTsKKyAgICByZXR1cm4gZGVwZW5kZW5jeTsKIH0KIAogaW5saW5lIHZvaWQg
TWFya2VkQmxvY2s6OkhhbmRsZTo6YXNzZXJ0TWFya3NOb3RTdGFsZSgpCkBAIC01ODUsMTAgKzU4
NiwxMSBAQCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWRSYXcoY29uCiAKIGlubGlu
ZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwg
Y29uc3Qgdm9pZCogcCkKIHsKLSAgICBIZWFwVmVyc2lvbiB2ZXJzaW9uID0gZm9vdGVyKCkubV9t
YXJraW5nVmVyc2lvbjsKKyAgICBIZWFwVmVyc2lvbiB2ZXJzaW9uOworICAgIERlcGVuZGVuY3kg
ZGVwZW5kZW5jeSA9IERlcGVuZGVuY3k6OmxvYWRBbmRGZW5jZSgmZm9vdGVyKCkubV9tYXJraW5n
VmVyc2lvbiwgdmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHZlcnNpb24gIT0gbWFya2luZ1Zl
cnNpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGZvb3RlcigpLm1fbWFy
a3MuZ2V0KGF0b21OdW1iZXIocCksIERlcGVuZGVuY3k6OmZlbmNlKHZlcnNpb24pKTsKKyAgICBy
ZXR1cm4gZm9vdGVyKCkubV9tYXJrcy5nZXQoYXRvbU51bWJlcihwKSwgZGVwZW5kZW5jeSk7CiB9
CiAKIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZChjb25zdCB2b2lkKiBwLCBEZXBl
bmRlbmN5IGRlcGVuZGVuY3kpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuY3BwCShyZXZpc2lvbiAyODAxMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Myw4ICszNzMsOCBAQCBB
TFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIHN0cnVjdHVyZSA9IHZtLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCk7CiAg
ICAgbWF4T2Zmc2V0ID0gc3RydWN0dXJlLT5tYXhPZmZzZXQoKTsKLSAgICBJbmRleGluZ1R5cGUg
aW5kZXhpbmdNb2RlID0gc3RydWN0dXJlLT5pbmRleGluZ01vZGUoKTsKLSAgICBEZXBlbmRlbmN5
IGluZGV4aW5nTW9kZURlcGVuZGVuY3kgPSBEZXBlbmRlbmN5OjpmZW5jZShpbmRleGluZ01vZGUp
OworICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ01vZGU7CisgICAgRGVwZW5kZW5jeSBpbmRleGlu
Z01vZGVEZXBlbmRlbmN5ID0gc3RydWN0dXJlLT5mZW5jZWRJbmRleGluZ01vZGUoaW5kZXhpbmdN
b2RlKTsKICAgICBMb2NrZXI8SlNDZWxsTG9jaz4gbG9ja2VyKE5vTG9ja2luZ05lY2Vzc2FyeSk7
CiAgICAgc3dpdGNoIChpbmRleGluZ01vZGUpIHsKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOgpAQCAtMzg5LDggKzM4OSw3IEBAIEFMV0FZU19JTkxJTkUgU3RydWN0
dXJlKiBKU09iamVjdDo6dmlzaXQKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9
Ci0gICAgYnV0dGVyZmx5ID0gaW5kZXhpbmdNb2RlRGVwZW5kZW5jeS5jb25zdW1lKHRoaXMpLT5i
dXR0ZXJmbHkoKTsKLSAgICBEZXBlbmRlbmN5IGJ1dHRlcmZseURlcGVuZGVuY3kgPSBEZXBlbmRl
bmN5OjpmZW5jZShidXR0ZXJmbHkpOworICAgIERlcGVuZGVuY3kgYnV0dGVyZmx5RGVwZW5kZW5j
eSA9IGluZGV4aW5nTW9kZURlcGVuZGVuY3kuY29uc3VtZSh0aGlzKS0+ZmVuY2VkQnV0dGVyZmx5
KGJ1dHRlcmZseSk7CiAgICAgaWYgKCFidXR0ZXJmbHkpCiAgICAgICAgIHJldHVybiBzdHJ1Y3R1
cmU7CiAgICAgaWYgKGJ1dHRlcmZseURlcGVuZGVuY3kuY29uc3VtZSh0aGlzKS0+c3RydWN0dXJl
SUQoKSAhPSBzdHJ1Y3R1cmVJRCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuaAkocmV2aXNpb24gMjgwMTI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzQ4LDYgKzc0OCwxMCBAQCBwdWJs
aWM6CiAgICAgICAgIAogICAgIGNvbnN0IEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgY29uc3QgeyBy
ZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCk7IH0KICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsg
cmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpOyB9CisgICAgRGVwZW5kZW5jeSBmZW5jZWRCdXR0ZXJm
bHkoQnV0dGVyZmx5KiYgYnV0dGVyZmx5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIERlcGVuZGVu
Y3k6OmxvYWRBbmRGZW5jZShzdGF0aWNfY2FzdDxCdXR0ZXJmbHkqKj4oYnV0dGVyZmx5QWRkcmVz
cygpKSwgYnV0dGVyZmx5KTsKKyAgICB9CiAgICAgCiAgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ug
b3V0T2ZMaW5lU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0
b3JhZ2UoKTsgfQogICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1
cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcAkocmV2
aXNpb24gMjgwMTI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJy
YXlWYWx1ZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NywxNSArMTY3LDE1IEBAIHZvaWQg
U3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5RGVzY3IKICAgICBkZXNjcmlwdG9yLnNldERl
c2NyaXB0b3IoQmFzZTo6Z2V0KCksIG1fYXR0cmlidXRlcyk7CiB9CiAKLUpTVmFsdWUgU3BhcnNl
QXJyYXlFbnRyeTo6Z2V0Q29uY3VycmVudGx5KCkgY29uc3QKK0pTVmFsdWUgU3BhcnNlQXJyYXlF
bnRyeTo6Z2V0Q29uY3VycmVudGx5KCkKIHsKICAgICAvLyBUaGVzZSBhdHRyaWJ1dGVzIGFuZCB2
YWx1ZSBjYW4gYmUgdXBkYXRlZCB3aGlsZSBleGVjdXRpbmcgZ2V0Q29uY3VycmVudGx5LgogICAg
IC8vIEJ1dCB0aGlzIGlzIE9LIHNpbmNlIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIG5ldmVyIHdlYWtl
biBvbmNlIGl0IGdldHMgRG9udERlbGV0ZSBhbmQgUmVhZE9ubHkuCiAgICAgLy8gQnkgZW1pdHRp
bmcgc3RvcmUtc3RvcmUtZmVuY2UgYW5kIGxvYWQtbG9hZC1mZW5jZSBiZXR3ZWVuIHZhbHVlIHNl
dHRpbmcgYW5kIGF0dHJpYnV0ZXMgc2V0dGluZywKICAgICAvLyB3ZSBjYW4gZW5zdXJlIHRoYXQg
dGhlIHZhbHVlIGlzIHdoYXQgd2Ugd2FudCBvbmNlIHRoZSBhdHRyaWJ1dGVzIGdldCBSZWFkT25s
eSAmIERvbnREZWxldGU6CiAgICAgLy8gb25jZSBhdHRyaWJ1dGVzIGdldCB0aGlzIHN0YXRlLCB0
aGUgdmFsdWUgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLgotICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMg
PSBtX2F0dHJpYnV0ZXM7Ci0gICAgRGVwZW5kZW5jeSBhdHRyaWJ1dGVzRGVwZW5kZW5jeSA9IERl
cGVuZGVuY3k6OmZlbmNlKGF0dHJpYnV0ZXMpOworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Cisg
ICAgRGVwZW5kZW5jeSBhdHRyaWJ1dGVzRGVwZW5kZW5jeSA9IERlcGVuZGVuY3k6OmxvYWRBbmRG
ZW5jZSgmbV9hdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzKTsKICAgICBpZiAoYXR0cmlidXRlcyAmIFBy
b3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5
VmFsdWVNYXAuaAkocmV2aXNpb24gMjgwMTI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGdldChQcm9wZXJ0eURlc2NyaXB0b3ImKSBjb25zdDsKICAg
ICBib29sIHB1dChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBTcGFyc2VBcnJh
eVZhbHVlTWFwKiwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgSlNWYWx1ZSBnZXRO
b25TcGFyc2VNb2RlKCkgY29uc3Q7Ci0gICAgSlNWYWx1ZSBnZXRDb25jdXJyZW50bHkoKSBjb25z
dDsKKyAgICBKU1ZhbHVlIGdldENvbmN1cnJlbnRseSgpOwogCiAgICAgdW5zaWduZWQgYXR0cmli
dXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjgwMTI0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI2Nyw2ICsyNjcsMTIgQEAgcHVibGljOgogCiAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5pbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KCkg
JiBBbGxXcml0YWJsZUFycmF5VHlwZXM7IH0KICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdNb2Rl
KCkgY29uc3QgIHsgcmV0dXJuIG1fYmxvYi5pbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KCkg
JiBBbGxBcnJheVR5cGVzOyB9CisgICAgRGVwZW5kZW5jeSBmZW5jZWRJbmRleGluZ01vZGUoSW5k
ZXhpbmdUeXBlJiBpbmRleGluZ1R5cGUpCisgICAgeworICAgICAgICBEZXBlbmRlbmN5IGRlcGVu
ZGVuY3kgPSBtX2Jsb2IuZmVuY2VkSW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeShpbmRleGlu
Z1R5cGUpOworICAgICAgICBpbmRleGluZ1R5cGUgJj0gQWxsQXJyYXlUeXBlczsKKyAgICAgICAg
cmV0dXJuIGRlcGVuZGVuY3k7CisgICAgfQogICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ01vZGVJ
bmNsdWRpbmdIaXN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLmluZGV4aW5nTW9kZUluY2x1
ZGluZ0hpc3RvcnkoKTsgfQogICAgICAgICAKICAgICBpbmxpbmUgYm9vbCBtYXlJbnRlcmNlcHRJ
bmRleGVkQWNjZXNzZXMoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZUlEQmxvYi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oCShyZXZpc2lvbiAyODAxMjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJREJsb2IuaAkod29ya2luZyBjb3B5KQpA
QCAtNTMsNiArNTMsMTAgQEAgcHVibGljOgogICAgIAogICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVy
ZUlEKCkgY29uc3QgeyByZXR1cm4gdS5maWVsZHMuc3RydWN0dXJlSUQ7IH0KICAgICBJbmRleGlu
Z1R5cGUgaW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeSgpIGNvbnN0IHsgcmV0dXJuIHUuZmll
bGRzLmluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3Rvcnk7IH0KKyAgICBEZXBlbmRlbmN5IGZlbmNl
ZEluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnkoSW5kZXhpbmdUeXBlJiBpbmRleGluZ1R5cGUp
CisgICAgeworICAgICAgICByZXR1cm4gRGVwZW5kZW5jeTo6bG9hZEFuZEZlbmNlKCZ1LmZpZWxk
cy5pbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5LCBpbmRleGluZ1R5cGUpOworICAgIH0KICAg
ICB2b2lkIHNldEluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnkoSW5kZXhpbmdUeXBlIGluZGV4
aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnkpIHsgdS5maWVsZHMuaW5kZXhpbmdNb2RlSW5jbHVkaW5n
SGlzdG9yeSA9IGluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3Rvcnk7IH0KICAgICBKU1R5cGUgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRzLnR5cGU7IH0KICAgICBUeXBlSW5mbzo6SW5saW5l
VHlwZUZsYWdzIGlubGluZVR5cGVGbGFncygpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRzLmlubGlu
ZVR5cGVGbGFnczsgfQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4MDEyNCkKKysrIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMDctMjEgIFNhYW0g
QmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgRml4IHVzZXMgb2YgRGVwZW5k
ZW5jeTo6ZmVuY2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBjb21waWxlciBvdXRzbWFydGluZyB1cwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3NzU3Cisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS84MDI4MDkzMT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9BdG9taWNzLmg6CisgICAgICAgIChXVEY6
Om9wYXF1ZSk6CisgICAgICAgIChXVEY6OkRlcGVuZGVuY3k6OmxvYWRBbmRGZW5jZSk6CisKIDIw
MjEtMDctMjAgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAg
ICAgICByMjgwMTAzIGlzIG5vdCBuZWNlc3Nhcnkgb24gYWxsIG9wZXJhdGluZyBzeXN0ZW1zCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvQXRvbWljcy5oCShyZXZpc2lvbiAyODAxMjQpCisrKyBTb3VyY2UvV1RGL3d0Zi9BdG9taWNz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyOSw2ICszMjksMTUgQEAgaW5saW5lIHZvaWQgZGVwZW5k
ZW50TG9hZExvYWRGZW5jZSgpIHsgYwogaW5saW5lIHZvaWQgZGVwZW5kZW50TG9hZExvYWRGZW5j
ZSgpIHsgbG9hZExvYWRGZW5jZSgpOyB9CiAjZW5kaWYKIAordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K1Qgb3BhcXVlKFQgcG9pbnRlcikKK3sKKyNpZiAhT1MoV0lORE9XUykKKyAgICBhc20gdm9sYXRp
bGUoIiIgOiAiK3IiKHBvaW50ZXIpIDo6KTsKKyNlbmRpZgorICAgIHJldHVybiBwb2ludGVyOwor
fQorCiB0eXBlZGVmIHVuc2lnbmVkIEludGVybmFsRGVwZW5kZW5jeVR5cGU7CiAKIGlubGluZSBJ
bnRlcm5hbERlcGVuZGVuY3lUeXBlIG9wYXF1ZU1peHR1cmUoKQpAQCAtMzkyLDYgKzQwMSw1NSBA
QCBwdWJsaWM6CiAgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gb3V0cHV0OwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KKworICAgIC8vIFRoaXMgZnVuY3Rpb24gZXhpc3RzIGFzIGEgaGVs
cGVyIHRvIGFpZCBpbiBub3QgbWFraW5nIG1pc3Rha2VzIHdoZW4gZG9pbmcgYSBsb2FkCisgICAg
Ly8gYW5kIGZlbmNpbmcgb24gdGhlIHJlc3VsdCBvZiB0aGUgbG9hZC4gQSBjb3VwbGUgZXhhbXBs
ZXMgb2Ygd2hlcmUgdGhpbmdzIGNhbiBnbworICAgIC8vIHdyb25nLCBhbmQgaG93IHRoaXMgZnVu
Y3Rpb24gaGVscHM6CisgICAgLy8gCisgICAgLy8gQ29uc2lkZXIgdGhpcyBwcm9ncmFtOgorICAg
IC8vIGBgYAorICAgIC8vIGEgPSBsb2FkKHAxKQorICAgIC8vIGIgPSBsb2FkKHAyKQorICAgIC8v
IGlmIChhICE9IGIpIHJldHVybjsKKyAgICAvLyBkID0gRGVwZW5kZW5jeTo6ZmVuY2UoYikKKyAg
ICAvLyBgYGAKKyAgICAvLyBXaGVuIGNvbnN1bWluZyB0aGUgZCBkZXBlbmRlbmN5LCB0aGUgY29t
cGlsZXIgY2FuIHByb3ZlIHRoYXQgYSBhbmQgYiBhcmUgdGhlIHNhbWUKKyAgICAvLyB2YWx1ZSwg
YW5kIGVuZCB1cCByZXBsYWNpbmcgdGhlIGRlcGVuZGVuY3kgb24gd2hhdGV2ZXIgcmVnaXN0ZXIg
aXMgYWxsb2NhdGVkIGZvciBgYWAKKyAgICAvLyBpbnN0ZWFkIG9mIGJlaW5nIG92ZXIgYGJgLCBs
ZWFkaW5nIHRvIHRoZSBkZXBlbmRlbmN5IGJlaW5nIG9uIGxvYWQocDEpIGluc3RlYWQgb2YKKyAg
ICAvLyBsb2FkKHAyKS4gV2UgZml4IHRoaXMgYnkgc3BsaXR0aW5nIHRoZSB2YWx1ZSBmZWVkaW5n
IGludG8gdGhlIGZlbmNlIGFuZCB0aGUgdmFsdWUKKyAgICAvLyBiZWluZyB1c2VkOgorICAgIC8v
IGInID0gbG9hZChwMikKKyAgICAvLyBEZXBlbmRlbmN5OjpmZW5jZShiJykKKyAgICAvLyBiID0g
b3BhcXVlKGInKQorICAgIC8vIGInIGZlZWRzIGludG8gdGhlIGZlbmNlLCBhbmQgYiB3aWxsIGJl
IHRoZSB2YWx1ZSBjb21wYXJlZC4gQ3J1Y2lhbGx5LCB0aGUgY29tcGlsZXIgY2FuJ3QKKyAgICAv
LyBwcm92ZSB0aGF0IGIgPT0gYicuCisgICAgLy8KKyAgICAvLyBMZXQncyBjb25zaWRlciBhbm90
aGVyIHVzZSBjYXNlLiBJbWFnaW5lIHlvdSBlbmQgdXAgd2l0aCBhIHByb2dyYW0gbGlrZSB0aGlz
IChwZXJoYXBzCisgICAgLy8gYWZ0ZXIgc29tZSBpbmxpbmluZyBvciB2YXJpb3VzIG9wdGltaXph
dGlvbnMpOgorICAgIC8vIGEgPSBsb2FkKHAxKQorICAgIC8vIGIgPSBsb2FkKHAyKQorICAgIC8v
IGlmIChhICE9IGIpIHJldHVybjsKKyAgICAvLyBjID0gbG9hZChwMikKKyAgICAvLyBkID0gRGVw
ZW5kZW5jeTo6ZmVuY2UoYykKKyAgICAvLyBTaW1pbGFyIHRvIHRoZSBmaXJzdCB0ZXN0LCB0aGUg
Y29tcGlsZXIgY2FuIHByb3ZlIGEgYW5kIGIgYXJlIHRoZSBzYW1lLCBhbGxvd2luZyBpdCB0bwor
ICAgIC8vIHByb3ZlIHRoYXQgYyA9PSBhID09IGIsIGFsbG93aW5nIGl0IHRvIHBvdGVudGlhbGx5
IGhhdmUgdGhlIGRlcGVuZGVuY3kgYmUgb24gdGhlIHdyb25nCisgICAgLy8gdmFsdWUsIHNpbWls
YXIgdG8gYWJvdmUuIFRoZSBmaXggaGVyZSBpcyB0byBvYnNjdXJlIHRoZSBwb2ludGVyIHdlJ3Jl
IGxvYWRpbmcgZnJvbSBmcm9tCisgICAgLy8gdGhlIGNvbXBpbGVyLgorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgc3RhdGljIERlcGVuZGVuY3kgbG9hZEFuZEZlbmNlKFQqIHBvaW50ZXIs
IFQmIG91dHB1dCkKKyAgICB7CisjaWYgQ1BVKEFSTTY0KSB8fCBDUFUoQVJNKQorICAgICAgICBU
IHZhbHVlID0gKm9wYXF1ZShwb2ludGVyKTsKKyAgICAgICAgRGVwZW5kZW5jeSBkZXBlbmRlbmN5
ID0gRGVwZW5kZW5jeTo6ZmVuY2UodmFsdWUpOworICAgICAgICBvdXRwdXQgPSBvcGFxdWUodmFs
dWUpOworICAgICAgICByZXR1cm4gZGVwZW5kZW5jeTsKKyNlbHNlCisgICAgICAgIFQgdmFsdWUg
PSAqcG9pbnRlcjsKKyAgICAgICAgRGVwZW5kZW5jeSBkZXBlbmRlbmN5ID0gRGVwZW5kZW5jeTo6
ZmVuY2UodmFsdWUpOworICAgICAgICBvdXRwdXQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIGRl
cGVuZGVuY3k7CisjZW5kaWYKKyAgICB9CiAgICAgCiAgICAgLy8gT24gVFNPIGFyY2hpdGVjdHVy
ZXMsIHRoaXMganVzdCByZXR1cm5zIHRoZSBwb2ludGVyIHlvdSBwYXNzIGl0LiBPbiBBUk0sIHRo
aXMgcHJvZHVjZXMgYSBuZXcKICAgICAvLyBwb2ludGVyIHRoYXQgaXMgZGVwZW5kZW50IG9uIHRo
aXMgZGVwZW5kZW5jeSBhbmQgdGhlIGlucHV0IHBvaW50ZXIuCg==
</data>
<flag name="review"
          id="456358"
          type_id="1"
          status="+"
          setter="rmorisset"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434025</attachid>
            <date>2021-07-22 12:02:58 -0700</date>
            <delta_ts>2021-07-22 13:05:18 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>12308</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjgwMTY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBA
CisyMDIxLTA3LTIxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEZpeCB1c2VzIG9mIERlcGVuZGVuY3k6OmZlbmNlIHdpdGggcmVzcGVjdCB0byB0aGUgY29tcGls
ZXIgb3V0c21hcnRpbmcgdXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyNzc1NworICAgICAgICA8cmRhcjovL3Byb2JsZW0vODAyODA5MzE+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgUm9iaW4gTW9yaXNzZXQuCisKKyAgICAgICAgV2Ugd2VyZSBydW5u
aW5nIGludG8gaXNzdWVzIG9uIGFybTY0IHdpdGggcmVzcGVjdCB0byB0aGUgbWVtb3J5IG1vZGVs
CisgICAgICAgIG9yZGVyaW5nIG9mIGxvYWRzLCBhbmQgaG93IHRoZSBjb21waWxlciBvcHRpbWl6
ZWQgY29kZSBhcm91bmQgRGVwZW5kZW5jeTo6ZmVuY2UuCisgICAgICAgIFRoZSBpc3N1ZSBtYW5p
ZmVzdGVkIGFzIGNhbGxzIHRvIGlzTWFya2VkIGluY29ycmVjdGx5IHJldHVybmluZyB0cnVlLgor
ICAgICAgICAKKyAgICAgICAgVG8gc2VlIHRoZSBpc3N1ZSwgbGV0J3MgY29uc2lkZXIgYSBwcm9n
cmFtIGxpa2UgdGhpczoKKyAgICAgICAgYSA9IGxvYWQocDEpCisgICAgICAgIGIgPSBsb2FkKHAy
KQorICAgICAgICBpZiAoYSAhPSBiKSByZXR1cm47CisgICAgICAgIGQgPSBEZXBlbmRlbmN5Ojpm
ZW5jZShiKQorICAgICAgICAKKyAgICAgICAgQXQgdGhlIHBvaW50IG9mIGRlZmluaW5nIHRoZSBk
ZXBlbmRlbmN5LCB0aGUgY29tcGlsZXIgaGFzIHByb3ZlbgorICAgICAgICBhID09IGIuIFNvLCBp
bnN0ZWFkIG9mIGJ1aWxkaW5nIHRoZSBkZXBlbmRlbmN5IG9uIHRoZSByZWdpc3RlciB1c2VkCisg
ICAgICAgIGZvciBiLCB3ZSBlbmQgdXAgdXNpbmcgdGhlIHJlZ2lzdGVyIGZvciBhLiBTbyB0aGUg
YWN0dWFsIGNvbXBpbGVkCisgICAgICAgIGNvZGUgZW5kcyB1cCB3aXRoIGEgZGVwZW5kZW5jeSBv
biBsb2FkKHAxKSwgbm90IGxvYWQocDIpLgorICAgICAgICAKKyAgICAgICAgVG8gZml4IHRoaXMs
IHdlIGVuZCB1cCBhZGRpbmcgYSBuZXcgQVBJLCBEZXBlbmRlbmN5Ojpsb2FkRW5kRmVuY2UocG9p
bnRlciwKKyAgICAgICAgcmVzdWx0KSwgd2hpY2ggaXMgZGVmaW5lZCBhczoKKyAgICAgICAgCisg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgICAgIHN0YXRpYyBEZXBlbmRlbmN5IGxv
YWRBbmRGZW5jZShUKiBwb2ludGVyLCBUJiBvdXRwdXQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IFQgdmFsdWUgPSAqb3BhcXVlKHBvaW50ZXIpOworICAgICAgICAgICAgRGVwZW5kZW5jeSBkZXBl
bmRlbmN5ID0gRGVwZW5kZW5jeTo6ZmVuY2UodmFsdWUpOworICAgICAgICAgICAgb3V0cHV0ID0g
b3BhcXVlKHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBkZXBlbmRlbmN5OworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgaXQgc3BsaXQg
ImIiIGluIHRoZSBhYm92ZSBwcm9ncmFtIGludG8gdHdvIHZhbHVlcywKKyAgICAgICAgYW5kIHRo
ZSAiYiIgdGhlIHByb2dyYW0gY29tcGFyZXMgYWdhaW5zdCBpcyBub3Qga25vd24gdG8gdGhlIGNv
bXBpbGVyIHRvIGJlCisgICAgICAgIHRoZSBzYW1lIHZhbHVlIHRoYXQgd2UgYnVpbGQgYSBkZXBl
bmRlbmN5IG9uLgorCisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAoSlND
OjpNYXJrZWRCbG9jazo6YWJvdXRUb01hcmspOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
aXNNYXJrZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHlJbXBsKToKKyAgICAgICAgKiBydW50aW1lL0pTT2Jq
ZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpmZW5jZWRCdXR0ZXJmbHkpOgorICAgICAg
ICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHA6CisgICAgICAgIChKU0M6OlNwYXJz
ZUFycmF5RW50cnk6OmdldENvbmN1cnJlbnRseSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5
RW50cnk6OmdldENvbmN1cnJlbnRseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGlt
ZS9TcGFyc2VBcnJheVZhbHVlTWFwLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmZW5jZWRJbmRleGluZ01vZGUpOgorICAgICAgICAq
IHJ1bnRpbWUvU3RydWN0dXJlSURCbG9iLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEQmxv
Yjo6ZmVuY2VkSW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeSk6CisKIDIwMjEtMDctMjEgIFlp
amlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0eXBlIGNo
ZWNrIGVycm9yIGluIHRlc3RiMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRCbG9jay5oCShyZXZpc2lvbiAyODAxMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjcsMTAgKzU2NywxMSBAQCBpbmxp
bmUgYm9vbCBNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZShICiAKIGlubGluZSBEZXBlbmRlbmN5
IE1hcmtlZEJsb2NrOjphYm91dFRvTWFyayhIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbikKIHsK
LSAgICBIZWFwVmVyc2lvbiB2ZXJzaW9uID0gZm9vdGVyKCkubV9tYXJraW5nVmVyc2lvbjsKKyAg
ICBIZWFwVmVyc2lvbiB2ZXJzaW9uOworICAgIERlcGVuZGVuY3kgZGVwZW5kZW5jeSA9IERlcGVu
ZGVuY3k6OmxvYWRBbmRGZW5jZSgmZm9vdGVyKCkubV9tYXJraW5nVmVyc2lvbiwgdmVyc2lvbik7
CiAgICAgaWYgKFVOTElLRUxZKHZlcnNpb24gIT0gbWFya2luZ1ZlcnNpb24pKQogICAgICAgICBh
Ym91dFRvTWFya1Nsb3cobWFya2luZ1ZlcnNpb24pOwotICAgIHJldHVybiBEZXBlbmRlbmN5Ojpm
ZW5jZSh2ZXJzaW9uKTsKKyAgICByZXR1cm4gZGVwZW5kZW5jeTsKIH0KIAogaW5saW5lIHZvaWQg
TWFya2VkQmxvY2s6OkhhbmRsZTo6YXNzZXJ0TWFya3NOb3RTdGFsZSgpCkBAIC01ODUsMTAgKzU4
NiwxMSBAQCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWRSYXcoY29uCiAKIGlubGlu
ZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwg
Y29uc3Qgdm9pZCogcCkKIHsKLSAgICBIZWFwVmVyc2lvbiB2ZXJzaW9uID0gZm9vdGVyKCkubV9t
YXJraW5nVmVyc2lvbjsKKyAgICBIZWFwVmVyc2lvbiB2ZXJzaW9uOworICAgIERlcGVuZGVuY3kg
ZGVwZW5kZW5jeSA9IERlcGVuZGVuY3k6OmxvYWRBbmRGZW5jZSgmZm9vdGVyKCkubV9tYXJraW5n
VmVyc2lvbiwgdmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHZlcnNpb24gIT0gbWFya2luZ1Zl
cnNpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGZvb3RlcigpLm1fbWFy
a3MuZ2V0KGF0b21OdW1iZXIocCksIERlcGVuZGVuY3k6OmZlbmNlKHZlcnNpb24pKTsKKyAgICBy
ZXR1cm4gZm9vdGVyKCkubV9tYXJrcy5nZXQoYXRvbU51bWJlcihwKSwgZGVwZW5kZW5jeSk7CiB9
CiAKIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZChjb25zdCB2b2lkKiBwLCBEZXBl
bmRlbmN5IGRlcGVuZGVuY3kpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuY3BwCShyZXZpc2lvbiAyODAxMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Myw4ICszNzMsOCBAQCBB
TFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIHN0cnVjdHVyZSA9IHZtLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCk7CiAg
ICAgbWF4T2Zmc2V0ID0gc3RydWN0dXJlLT5tYXhPZmZzZXQoKTsKLSAgICBJbmRleGluZ1R5cGUg
aW5kZXhpbmdNb2RlID0gc3RydWN0dXJlLT5pbmRleGluZ01vZGUoKTsKLSAgICBEZXBlbmRlbmN5
IGluZGV4aW5nTW9kZURlcGVuZGVuY3kgPSBEZXBlbmRlbmN5OjpmZW5jZShpbmRleGluZ01vZGUp
OworICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ01vZGU7CisgICAgRGVwZW5kZW5jeSBpbmRleGlu
Z01vZGVEZXBlbmRlbmN5ID0gc3RydWN0dXJlLT5mZW5jZWRJbmRleGluZ01vZGUoaW5kZXhpbmdN
b2RlKTsKICAgICBMb2NrZXI8SlNDZWxsTG9jaz4gbG9ja2VyKE5vTG9ja2luZ05lY2Vzc2FyeSk7
CiAgICAgc3dpdGNoIChpbmRleGluZ01vZGUpIHsKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOgpAQCAtMzg5LDggKzM4OSw3IEBAIEFMV0FZU19JTkxJTkUgU3RydWN0
dXJlKiBKU09iamVjdDo6dmlzaXQKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9
Ci0gICAgYnV0dGVyZmx5ID0gaW5kZXhpbmdNb2RlRGVwZW5kZW5jeS5jb25zdW1lKHRoaXMpLT5i
dXR0ZXJmbHkoKTsKLSAgICBEZXBlbmRlbmN5IGJ1dHRlcmZseURlcGVuZGVuY3kgPSBEZXBlbmRl
bmN5OjpmZW5jZShidXR0ZXJmbHkpOworICAgIERlcGVuZGVuY3kgYnV0dGVyZmx5RGVwZW5kZW5j
eSA9IGluZGV4aW5nTW9kZURlcGVuZGVuY3kuY29uc3VtZSh0aGlzKS0+ZmVuY2VkQnV0dGVyZmx5
KGJ1dHRlcmZseSk7CiAgICAgaWYgKCFidXR0ZXJmbHkpCiAgICAgICAgIHJldHVybiBzdHJ1Y3R1
cmU7CiAgICAgaWYgKGJ1dHRlcmZseURlcGVuZGVuY3kuY29uc3VtZSh0aGlzKS0+c3RydWN0dXJl
SUQoKSAhPSBzdHJ1Y3R1cmVJRCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuaAkocmV2aXNpb24gMjgwMTI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzQ4LDYgKzc0OCwxMCBAQCBwdWJs
aWM6CiAgICAgICAgIAogICAgIGNvbnN0IEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgY29uc3QgeyBy
ZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCk7IH0KICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsg
cmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpOyB9CisgICAgRGVwZW5kZW5jeSBmZW5jZWRCdXR0ZXJm
bHkoQnV0dGVyZmx5KiYgYnV0dGVyZmx5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIERlcGVuZGVu
Y3k6OmxvYWRBbmRGZW5jZShzdGF0aWNfY2FzdDxCdXR0ZXJmbHkqKj4oYnV0dGVyZmx5QWRkcmVz
cygpKSwgYnV0dGVyZmx5KTsKKyAgICB9CiAgICAgCiAgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ug
b3V0T2ZMaW5lU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0
b3JhZ2UoKTsgfQogICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1
cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcAkocmV2
aXNpb24gMjgwMTI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJy
YXlWYWx1ZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NCw4ICsxNzQsOCBAQCBKU1ZhbHVl
IFNwYXJzZUFycmF5RW50cnk6OmdldENvbmN1cnJlbnRsCiAgICAgLy8gQnkgZW1pdHRpbmcgc3Rv
cmUtc3RvcmUtZmVuY2UgYW5kIGxvYWQtbG9hZC1mZW5jZSBiZXR3ZWVuIHZhbHVlIHNldHRpbmcg
YW5kIGF0dHJpYnV0ZXMgc2V0dGluZywKICAgICAvLyB3ZSBjYW4gZW5zdXJlIHRoYXQgdGhlIHZh
bHVlIGlzIHdoYXQgd2Ugd2FudCBvbmNlIHRoZSBhdHRyaWJ1dGVzIGdldCBSZWFkT25seSAmIERv
bnREZWxldGU6CiAgICAgLy8gb25jZSBhdHRyaWJ1dGVzIGdldCB0aGlzIHN0YXRlLCB0aGUgdmFs
dWUgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLgotICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSBtX2F0
dHJpYnV0ZXM7Ci0gICAgRGVwZW5kZW5jeSBhdHRyaWJ1dGVzRGVwZW5kZW5jeSA9IERlcGVuZGVu
Y3k6OmZlbmNlKGF0dHJpYnV0ZXMpOworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgRGVw
ZW5kZW5jeSBhdHRyaWJ1dGVzRGVwZW5kZW5jeSA9IERlcGVuZGVuY3k6OmxvYWRBbmRGZW5jZSgm
bV9hdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzKTsKICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5
QXR0cmlidXRlOjpBY2Nlc3NvcikKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDI4MDEy
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNjcsNiArMjY3LDEyIEBAIHB1YmxpYzoKIAogICAgIEluZGV4aW5nVHlwZSBp
bmRleGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuaW5kZXhpbmdNb2RlSW5jbHVkaW5n
SGlzdG9yeSgpICYgQWxsV3JpdGFibGVBcnJheVR5cGVzOyB9CiAgICAgSW5kZXhpbmdUeXBlIGlu
ZGV4aW5nTW9kZSgpIGNvbnN0ICB7IHJldHVybiBtX2Jsb2IuaW5kZXhpbmdNb2RlSW5jbHVkaW5n
SGlzdG9yeSgpICYgQWxsQXJyYXlUeXBlczsgfQorICAgIERlcGVuZGVuY3kgZmVuY2VkSW5kZXhp
bmdNb2RlKEluZGV4aW5nVHlwZSYgaW5kZXhpbmdUeXBlKQorICAgIHsKKyAgICAgICAgRGVwZW5k
ZW5jeSBkZXBlbmRlbmN5ID0gbV9ibG9iLmZlbmNlZEluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3Rv
cnkoaW5kZXhpbmdUeXBlKTsKKyAgICAgICAgaW5kZXhpbmdUeXBlICY9IEFsbEFycmF5VHlwZXM7
CisgICAgICAgIHJldHVybiBkZXBlbmRlbmN5OworICAgIH0KICAgICBJbmRleGluZ1R5cGUgaW5k
ZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5pbmRleGlu
Z01vZGVJbmNsdWRpbmdIaXN0b3J5KCk7IH0KICAgICAgICAgCiAgICAgaW5saW5lIGJvb2wgbWF5
SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJREJsb2IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJREJsb2IuaAkocmV2aXNpb24gMjgwMTI0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSURCbG9iLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUzLDYgKzUzLDEwIEBAIHB1YmxpYzoKICAgICAKICAgICBTdHJ1Y3R1cmVJ
RCBzdHJ1Y3R1cmVJRCgpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRzLnN0cnVjdHVyZUlEOyB9CiAg
ICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnkoKSBjb25zdCB7IHJl
dHVybiB1LmZpZWxkcy5pbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5OyB9CisgICAgRGVwZW5k
ZW5jeSBmZW5jZWRJbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KEluZGV4aW5nVHlwZSYgaW5k
ZXhpbmdUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERlcGVuZGVuY3k6OmxvYWRBbmRGZW5j
ZSgmdS5maWVsZHMuaW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeSwgaW5kZXhpbmdUeXBlKTsK
KyAgICB9CiAgICAgdm9pZCBzZXRJbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KEluZGV4aW5n
VHlwZSBpbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KSB7IHUuZmllbGRzLmluZGV4aW5nTW9k
ZUluY2x1ZGluZ0hpc3RvcnkgPSBpbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5OyB9CiAgICAg
SlNUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiB1LmZpZWxkcy50eXBlOyB9CiAgICAgVHlwZUlu
Zm86OklubGluZVR5cGVGbGFncyBpbmxpbmVUeXBlRmxhZ3MoKSBjb25zdCB7IHJldHVybiB1LmZp
ZWxkcy5pbmxpbmVUeXBlRmxhZ3M7IH0KSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODAxMjQpCisrKyBTb3Vy
Y2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDIxLTA3
LTIxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIEZpeCB1c2Vz
IG9mIERlcGVuZGVuY3k6OmZlbmNlIHdpdGggcmVzcGVjdCB0byB0aGUgY29tcGlsZXIgb3V0c21h
cnRpbmcgdXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyNzc1NworICAgICAgICA8cmRhcjovL3Byb2JsZW0vODAyODA5MzE+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgUm9iaW4gTW9yaXNzZXQuCisKKyAgICAgICAgKiB3dGYvQXRvbWljcy5oOgorICAg
ICAgICAoV1RGOjpvcGFxdWUpOgorICAgICAgICAoV1RGOjpEZXBlbmRlbmN5Ojpsb2FkQW5kRmVu
Y2UpOgorCiAyMDIxLTA3LTIwICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5j
b20+CiAKICAgICAgICAgcjI4MDEwMyBpcyBub3QgbmVjZXNzYXJ5IG9uIGFsbCBvcGVyYXRpbmcg
c3lzdGVtcwpJbmRleDogU291cmNlL1dURi93dGYvQXRvbWljcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0F0b21pY3MuaAkocmV2aXNpb24gMjgwMTI0KQorKysgU291cmNlL1dURi93
dGYvQXRvbWljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjksNiArMzI5LDE1IEBAIGlubGluZSB2
b2lkIGRlcGVuZGVudExvYWRMb2FkRmVuY2UoKSB7IGMKIGlubGluZSB2b2lkIGRlcGVuZGVudExv
YWRMb2FkRmVuY2UoKSB7IGxvYWRMb2FkRmVuY2UoKTsgfQogI2VuZGlmCiAKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitUIG9wYXF1ZShUIHBvaW50ZXIpCit7CisjaWYgIU9TKFdJTkRPV1MpCisgICAg
YXNtIHZvbGF0aWxlKCIiIDogIityIihwb2ludGVyKSA6Oik7CisjZW5kaWYKKyAgICByZXR1cm4g
cG9pbnRlcjsKK30KKwogdHlwZWRlZiB1bnNpZ25lZCBJbnRlcm5hbERlcGVuZGVuY3lUeXBlOwog
CiBpbmxpbmUgSW50ZXJuYWxEZXBlbmRlbmN5VHlwZSBvcGFxdWVNaXh0dXJlKCkKQEAgLTM5Miw2
ICs0MDEsNTUgQEAgcHVibGljOgogICAgICAgICByZXN1bHQubV92YWx1ZSA9IG91dHB1dDsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGV4aXN0
cyBhcyBhIGhlbHBlciB0byBhaWQgaW4gbm90IG1ha2luZyBtaXN0YWtlcyB3aGVuIGRvaW5nIGEg
bG9hZAorICAgIC8vIGFuZCBmZW5jaW5nIG9uIHRoZSByZXN1bHQgb2YgdGhlIGxvYWQuIEEgY291
cGxlIGV4YW1wbGVzIG9mIHdoZXJlIHRoaW5ncyBjYW4gZ28KKyAgICAvLyB3cm9uZywgYW5kIGhv
dyB0aGlzIGZ1bmN0aW9uIGhlbHBzOgorICAgIC8vIAorICAgIC8vIENvbnNpZGVyIHRoaXMgcHJv
Z3JhbToKKyAgICAvLyBgYGAKKyAgICAvLyBhID0gbG9hZChwMSkKKyAgICAvLyBiID0gbG9hZChw
MikKKyAgICAvLyBpZiAoYSAhPSBiKSByZXR1cm47CisgICAgLy8gZCA9IERlcGVuZGVuY3k6OmZl
bmNlKGIpCisgICAgLy8gYGBgCisgICAgLy8gV2hlbiBjb25zdW1pbmcgdGhlIGQgZGVwZW5kZW5j
eSwgdGhlIGNvbXBpbGVyIGNhbiBwcm92ZSB0aGF0IGEgYW5kIGIgYXJlIHRoZSBzYW1lCisgICAg
Ly8gdmFsdWUsIGFuZCBlbmQgdXAgcmVwbGFjaW5nIHRoZSBkZXBlbmRlbmN5IG9uIHdoYXRldmVy
IHJlZ2lzdGVyIGlzIGFsbG9jYXRlZCBmb3IgYGFgCisgICAgLy8gaW5zdGVhZCBvZiBiZWluZyBv
dmVyIGBiYCwgbGVhZGluZyB0byB0aGUgZGVwZW5kZW5jeSBiZWluZyBvbiBsb2FkKHAxKSBpbnN0
ZWFkIG9mCisgICAgLy8gbG9hZChwMikuIFdlIGZpeCB0aGlzIGJ5IHNwbGl0dGluZyB0aGUgdmFs
dWUgZmVlZGluZyBpbnRvIHRoZSBmZW5jZSBhbmQgdGhlIHZhbHVlCisgICAgLy8gYmVpbmcgdXNl
ZDoKKyAgICAvLyBiJyA9IGxvYWQocDIpCisgICAgLy8gRGVwZW5kZW5jeTo6ZmVuY2UoYicpCisg
ICAgLy8gYiA9IG9wYXF1ZShiJykKKyAgICAvLyBiJyBmZWVkcyBpbnRvIHRoZSBmZW5jZSwgYW5k
IGIgd2lsbCBiZSB0aGUgdmFsdWUgY29tcGFyZWQuIENydWNpYWxseSwgdGhlIGNvbXBpbGVyIGNh
bid0CisgICAgLy8gcHJvdmUgdGhhdCBiID09IGInLgorICAgIC8vCisgICAgLy8gTGV0J3MgY29u
c2lkZXIgYW5vdGhlciB1c2UgY2FzZS4gSW1hZ2luZSB5b3UgZW5kIHVwIHdpdGggYSBwcm9ncmFt
IGxpa2UgdGhpcyAocGVyaGFwcworICAgIC8vIGFmdGVyIHNvbWUgaW5saW5pbmcgb3IgdmFyaW91
cyBvcHRpbWl6YXRpb25zKToKKyAgICAvLyBhID0gbG9hZChwMSkKKyAgICAvLyBiID0gbG9hZChw
MikKKyAgICAvLyBpZiAoYSAhPSBiKSByZXR1cm47CisgICAgLy8gYyA9IGxvYWQocDIpCisgICAg
Ly8gZCA9IERlcGVuZGVuY3k6OmZlbmNlKGMpCisgICAgLy8gU2ltaWxhciB0byB0aGUgZmlyc3Qg
dGVzdCwgdGhlIGNvbXBpbGVyIGNhbiBwcm92ZSBhIGFuZCBiIGFyZSB0aGUgc2FtZSwgYWxsb3dp
bmcgaXQgdG8KKyAgICAvLyBwcm92ZSB0aGF0IGMgPT0gYSA9PSBiLCBhbGxvd2luZyBpdCB0byBw
b3RlbnRpYWxseSBoYXZlIHRoZSBkZXBlbmRlbmN5IGJlIG9uIHRoZSB3cm9uZworICAgIC8vIHZh
bHVlLCBzaW1pbGFyIHRvIGFib3ZlLiBUaGUgZml4IGhlcmUgaXMgdG8gb2JzY3VyZSB0aGUgcG9p
bnRlciB3ZSdyZSBsb2FkaW5nIGZyb20gZnJvbQorICAgIC8vIHRoZSBjb21waWxlci4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBEZXBlbmRlbmN5IGxvYWRBbmRGZW5jZShj
b25zdCBUKiBwb2ludGVyLCBUJiBvdXRwdXQpCisgICAgeworI2lmIENQVShBUk02NCkgfHwgQ1BV
KEFSTSkKKyAgICAgICAgVCB2YWx1ZSA9ICpvcGFxdWUocG9pbnRlcik7CisgICAgICAgIERlcGVu
ZGVuY3kgZGVwZW5kZW5jeSA9IERlcGVuZGVuY3k6OmZlbmNlKHZhbHVlKTsKKyAgICAgICAgb3V0
cHV0ID0gb3BhcXVlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGRlcGVuZGVuY3k7CisjZWxzZQor
ICAgICAgICBUIHZhbHVlID0gKnBvaW50ZXI7CisgICAgICAgIERlcGVuZGVuY3kgZGVwZW5kZW5j
eSA9IERlcGVuZGVuY3k6OmZlbmNlKHZhbHVlKTsKKyAgICAgICAgb3V0cHV0ID0gdmFsdWU7Cisg
ICAgICAgIHJldHVybiBkZXBlbmRlbmN5OworI2VuZGlmCisgICAgfQogICAgIAogICAgIC8vIE9u
IFRTTyBhcmNoaXRlY3R1cmVzLCB0aGlzIGp1c3QgcmV0dXJucyB0aGUgcG9pbnRlciB5b3UgcGFz
cyBpdC4gT24gQVJNLCB0aGlzIHByb2R1Y2VzIGEgbmV3CiAgICAgLy8gcG9pbnRlciB0aGF0IGlz
IGRlcGVuZGVudCBvbiB0aGlzIGRlcGVuZGVuY3kgYW5kIHRoZSBpbnB1dCBwb2ludGVyLgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>