<?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>207138</bug_id>
          
          <creation_ts>2020-02-03 12:10:45 -0800</creation_ts>
          <short_desc>Reduce size of HashMap and HashSet</short_desc>
          <delta_ts>2020-02-04 09:03:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>hi</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1614077</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-02-03 12:10:45 -0800</bug_when>
    <thetext>Reduce size of HashMap and HashSet</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614080</commentid>
    <comment_count>1</comment_count>
      <attachid>389545</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-02-03 12:16:43 -0800</bug_when>
    <thetext>Created attachment 389545
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614129</commentid>
    <comment_count>2</comment_count>
      <attachid>389560</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-02-03 13:43:52 -0800</bug_when>
    <thetext>Created attachment 389560
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614145</commentid>
    <comment_count>3</comment_count>
      <attachid>389560</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-03 14:01:47 -0800</bug_when>
    <thetext>Comment on attachment 389560
patch

r=me, looks nice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614193</commentid>
    <comment_count>4</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-02-03 14:54:39 -0800</bug_when>
    <thetext>Here are my JetStream2 results without the change:

JetStream2.0:Score:Geometric: 164.7pt stdev=0.7%
            3d-cube-SP:Score: 335pt stdev=8.4%
                      :Time:Geometric: 15.0ms stdev=9.3%
                      Average:Time: 11.6ms stdev=1.9%
                      First:Time: 23ms stdev=26.8%
                      Worst:Time: 12.8ms stdev=3.9%
            3d-raytrace-SP:Score: 352pt stdev=2.5%
                          :Time:Geometric: 14.2ms stdev=2.6%
                          Average:Time: 10.4ms stdev=1.9%
                          First:Time: 19.8ms stdev=4.2%
                          Worst:Time: 14.0ms stdev=8.4%
            Air:Score: 299pt stdev=2.8%
               :Time:Geometric: 16.7ms stdev=2.9%
               Average:Time: 4.99ms stdev=4.1%
               First:Time: 51.6ms stdev=2.9%
               Worst:Time: 18.2ms stdev=3.6%
            Babylon:Score: 412pt stdev=7.1%
                   :Time:Geometric: 12.2ms stdev=7.2%
                   Average:Time: 4.95ms stdev=5.9%
                   First:Time: 27.0ms stdev=2.6%
                   Worst:Time: 14ms stdev=14.4%
            Basic:Score: 521pt stdev=3.0%
                 :Time:Geometric: 9.61ms stdev=3.1%
                 Average:Time: 4.77ms stdev=4.8%
                 First:Time: 20.0ms stdev=3.5%
                 Worst:Time: 9.30ms stdev=2.2%
            Box2D:Score: 352pt stdev=1.2%
                 :Time:Geometric: 14.2ms stdev=1.2%
                 Average:Time: 6.50ms stdev=1.3%
                 First:Time: 43.2ms stdev=1.0%
                 Worst:Time: 10.2ms stdev=2.1%
            FlightPlanner:Score: 608.4pt stdev=0.6%
                         :Time:Geometric: 8.218ms stdev=0.6%
                         Average:Time: 5.13ms stdev=1.3%
                         First:Time: 13.8ms stdev=3.2%
                         Worst:Time: 7.85ms stdev=4.8%
            HashSet-wasm:Score: 37pt stdev=15.3%
                        :Time:Geometric: 138ms stdev=13.0%
                        Runtime:Time: 727.8ms stdev=0.9%
                        Startup:Time: 27ms stdev=23.3%
            ML:Score: 92.8pt stdev=2.2%
              :Time:Geometric: 53.9ms stdev=2.2%
              Average:Time: 44.21ms stdev=0.8%
              First:Time: 74.0ms stdev=5.7%
              Worst:Time: 47.9ms stdev=1.4%
            OfflineAssembler:Score: 114pt stdev=13.4%
                            :Time:Geometric: 45ms stdev=16.1%
                            Average:Time: 32.3ms stdev=2.6%
                            First:Time: 76ms stdev=54.7%
                            Worst:Time: 39.0ms stdev=4.7%
            UniPoker:Score: 300pt stdev=10.2%
                    :Time:Geometric: 17ms stdev=10.6%
                    Average:Time: 11.5ms stdev=1.9%
                    First:Time: 29ms stdev=31.6%
                    Worst:Time: 14.7ms stdev=1.5%
            WSL:Score: 1.06pt stdev=1.4%
               :Time:Geometric: 4.70s stdev=1.4%
               MainRun:Time: 7.57s stdev=1.7%
               Stdlib:Time: 2.92s stdev=1.3%
            acorn-wtb:Score: 42.7pt stdev=4.3%
                     :Time:Geometric: 117ms stdev=4.5%
                     Average:Time: 92.0ms stdev=5.3%
                     First:Time: 173.0ms stdev=0.8%
                     Worst:Time: 102ms stdev=9.0%
            ai-astar:Score: 415pt stdev=7.2%
                    :Time:Geometric: 12.1ms stdev=7.7%
                    Average:Time: 9.1ms stdev=10.0%
                    First:Time: 17ms stdev=46.1%
                    Worst:Time: 12ms stdev=16.0%
            async-fs:Score: 221pt stdev=3.1%
                    :Time:Geometric: 22.7ms stdev=3.1%
                    Average:Time: 18.3ms stdev=2.6%
                    First:Time: 30.0ms stdev=2.4%
                    Worst:Time: 21.2ms stdev=5.9%
            babylon-wtb:Score: 53.4pt stdev=2.0%
                       :Time:Geometric: 93.6ms stdev=2.0%
                       Average:Time: 73.2ms stdev=2.2%
                       First:Time: 139ms stdev=2.8%
                       Worst:Time: 81.0ms stdev=2.5%
            base64-SP:Score: 481pt stdev=8.6%
                     :Time:Geometric: 10.5ms stdev=8.9%
                     Average:Time: 8.14ms stdev=5.1%
                     First:Time: 14ms stdev=14.4%
                     Worst:Time: 9.80ms stdev=9.1%
            bomb-workers:Score: 103pt stdev=13.2%
                        :Time:Geometric: 49ms stdev=15.8%
                        Average:Time: 44.6ms stdev=3.6%
                        First:Time: 43.8ms stdev=3.0%
                        Worst:Time: 65ms stdev=49.2%
            cdjs:Score: 94.38pt stdev=0.7%
                :Time:Geometric: 52.98ms stdev=0.7%
                Average:Time: 47.59ms stdev=0.9%
                First:Time: 61.60ms stdev=0.9%
                Worst:Time: 50.7ms stdev=1.1%
            chai-wtb:Score: 65.8pt stdev=1.7%
                    :Time:Geometric: 76.0ms stdev=1.7%
                    Average:Time: 59.5ms stdev=1.4%
                    First:Time: 115ms stdev=2.4%
                    Worst:Time: 64.4ms stdev=5.9%
            coffeescript-wtb:Score: 27.2pt stdev=2.7%
                            :Time:Geometric: 184ms stdev=2.7%
                            Average:Time: 154ms stdev=3.3%
                            First:Time: 241ms stdev=3.8%
                            Worst:Time: 168ms stdev=3.8%
            crypto:Score: 1.03Kpt stdev=2.4%
                  :Time:Geometric: 4.88ms stdev=2.4%
                  Average:Time: 3.180ms stdev=0.9%
                  First:Time: 8.40ms stdev=6.5%
                  Worst:Time: 4.35ms stdev=3.1%
            crypto-aes-SP:Score: 533pt stdev=1.5%
                         :Time:Geometric: 9.39ms stdev=1.5%
                         Average:Time: 7.234ms stdev=0.8%
                         First:Time: 13.4ms stdev=4.1%
                         Worst:Time: 8.55ms stdev=2.4%
            crypto-md5-SP:Score: 546pt stdev=1.8%
                         :Time:Geometric: 9.15ms stdev=1.8%
                         Average:Time: 7.16ms stdev=1.4%
                         First:Time: 13.0ms stdev=0.0%
                         Worst:Time: 8.25ms stdev=4.3%
            crypto-sha1-SP:Score: 589pt stdev=2.8%
                          :Time:Geometric: 8.50ms stdev=2.8%
                          Average:Time: 5.99ms stdev=3.1%
                          First:Time: 12.0ms stdev=0.0%
                          Worst:Time: 8.55ms stdev=5.6%
            date-format-tofte-SP:Score: 271pt stdev=2.1%
                                :Time:Geometric: 18.5ms stdev=2.1%
                                Average:Time: 15.4ms stdev=1.2%
                                First:Time: 25.2ms stdev=7.1%
                                Worst:Time: 16.2ms stdev=1.3%
            date-format-xparb-SP:Score: 284pt stdev=7.5%
                                :Time:Geometric: 17.7ms stdev=7.8%
                                Average:Time: 12.6ms stdev=1.0%
                                First:Time: 31ms stdev=28.6%
                                Worst:Time: 14.3ms stdev=8.5%
            delta-blue:Score: 731pt stdev=8.5%
                      :Time:Geometric: 6.88ms stdev=9.3%
                      Average:Time: 3.13ms stdev=2.2%
                      First:Time: 17ms stdev=29.7%
                      Worst:Time: 6.25ms stdev=2.8%
            earley-boyer:Score: 623pt stdev=7.8%
                        :Time:Geometric: 8.07ms stdev=8.0%
                        Average:Time: 4.84ms stdev=3.0%
                        First:Time: 13ms stdev=15.5%
                        Worst:Time: 8.2ms stdev=17.6%
            espree-wtb:Score: 45.6pt stdev=5.1%
                      :Time:Geometric: 110ms stdev=5.1%
                      Average:Time: 90.3ms stdev=3.6%
                      First:Time: 155ms stdev=9.9%
                      Worst:Time: 95.0ms stdev=3.7%
            first-inspector-code-load:Score: 206.5pt stdev=0.9%
                                     :Time:Geometric: 24.22ms stdev=0.9%
                                     Average:Time: 23.43ms stdev=0.9%
                                     First:Time: 25.0ms stdev=0.0%
                                     Worst:Time: 24.2ms stdev=1.8%
            float-mm.c:Score: 8.45pt stdev=6.3%
                      :Time:Geometric: 594ms stdev=6.2%
                      Average:Time: 574ms stdev=11.4%
                      First:Time: 618ms stdev=5.7%
                      Worst:Time: 594ms stdev=9.4%
            gaussian-blur:Score: 327.1pt stdev=0.9%
                         :Time:Geometric: 15.29ms stdev=0.9%
                         Average:Time: 12.14ms stdev=1.0%
                         First:Time: 21.4ms stdev=2.6%
                         Worst:Time: 13.8ms stdev=1.8%
            gbemu:Score: 126pt stdev=5.1%
                 :Time:Geometric: 39.7ms stdev=5.2%
                 Average:Time: 21.0ms stdev=1.9%
                 First:Time: 73.0ms stdev=3.2%
                 Worst:Time: 41ms stdev=17.1%
            gcc-loops-wasm:Score: 34.40pt stdev=0.4%
                          :Time:Geometric: 145.3ms stdev=0.4%
                          Runtime:Time: 2.641s stdev=0.8%
                          Startup:Time: 8.00ms stdev=0.0%
            hash-map:Score: 368pt stdev=2.1%
                    :Time:Geometric: 13.6ms stdev=2.1%
                    Average:Time: 10.00ms stdev=1.0%
                    First:Time: 19.0ms stdev=0.0%
                    Worst:Time: 13.2ms stdev=5.5%
            jshint-wtb:Score: 33.1pt stdev=1.5%
                      :Time:Geometric: 151ms stdev=1.5%
                      Average:Time: 126ms stdev=2.3%
                      First:Time: 206ms stdev=1.5%
                      Worst:Time: 133ms stdev=3.2%
            json-parse-inspector:Score: 164pt stdev=1.2%
                                :Time:Geometric: 30.4ms stdev=1.2%
                                Average:Time: 28.86ms stdev=0.7%
                                First:Time: 29.6ms stdev=1.9%
                                Worst:Time: 33.0ms stdev=2.4%
            json-stringify-inspector:Score: 143pt stdev=2.5%
                                    :Time:Geometric: 34.9ms stdev=2.6%
                                    Average:Time: 31.5ms stdev=2.0%
                                    First:Time: 30.8ms stdev=2.7%
                                    Worst:Time: 43.9ms stdev=4.2%
            lebab-wtb:Score: 38pt stdev=12.7%
                     :Time:Geometric: 133ms stdev=15.0%
                     Average:Time: 102ms stdev=12.3%
                     First:Time: 185ms stdev=4.0%
                     Worst:Time: 127ms stdev=32.8%
            mandreel:Score: 100.0pt stdev=6.1%
                    :Time:Geometric: 50.2ms stdev=6.5%
                    Average:Time: 31.8ms stdev=1.6%
                    First:Time: 94.6ms stdev=1.6%
                    Worst:Time: 42ms stdev=18.4%
            multi-inspector-code-load:Score: 323pt stdev=4.5%
                                     :Time:Geometric: 15.5ms stdev=4.7%
                                     Average:Time: 6.5ms stdev=15.6%
                                     First:Time: 24.2ms stdev=1.8%
                                     Worst:Time: 24.0ms stdev=0.0%
            n-body-SP:Score: 719pt stdev=2.1%
                     :Time:Geometric: 6.96ms stdev=2.2%
                     Average:Time: 5.903ms stdev=0.7%
                     First:Time: 9.00ms stdev=0.0%
                     Worst:Time: 6.35ms stdev=6.0%
            navier-stokes:Score: 761pt stdev=2.8%
                         :Time:Geometric: 6.57ms stdev=2.7%
                         Average:Time: 4.54ms stdev=1.3%
                         First:Time: 11.0ms stdev=6.4%
                         Worst:Time: 5.70ms stdev=3.7%
            octane-code-load:Score: 737pt stdev=7.9%
                            :Time:Geometric: 6.82ms stdev=7.6%
                            Average:Time: 5.52ms stdev=2.1%
                            First:Time: 8.8ms stdev=14.8%
                            Worst:Time: 6.55ms stdev=6.3%
            octane-zlib:Score: 18pt stdev=18.1%
                       :Time:Geometric: 290ms stdev=17.0%
                       Average:Time: 169.1ms stdev=0.7%
                       First:Time: 897ms stdev=44.7%
                       Worst:Time: 171ms stdev=1.2%
            pdfjs:Score: 136pt stdev=9.4%
                 :Time:Geometric: 37ms stdev=10.7%
                 Average:Time: 24.8ms stdev=4.1%
                 First:Time: 53.4ms stdev=1.7%
                 Worst:Time: 40ms stdev=29.7%
            prepack-wtb:Score: 40.2pt stdev=1.8%
                       :Time:Geometric: 124ms stdev=1.8%
                       Average:Time: 87.1ms stdev=1.9%
                       First:Time: 216ms stdev=1.2%
                       Worst:Time: 103ms stdev=2.5%
            quicksort-wasm:Score: 325pt stdev=2.6%
                          :Time:Geometric: 15.4ms stdev=2.7%
                          Runtime:Time: 29.0ms stdev=0.0%
                          Startup:Time: 8.20ms stdev=5.5%
            raytrace:Score: 539pt stdev=2.0%
                    :Time:Geometric: 9.28ms stdev=2.0%
                    Average:Time: 4.59ms stdev=1.5%
                    First:Time: 14.4ms stdev=3.8%
                    Worst:Time: 12.1ms stdev=2.4%
            regex-dna-SP:Score: 398pt stdev=3.0%
                        :Time:Geometric: 12.6ms stdev=3.1%
                        Average:Time: 11.4ms stdev=3.2%
                        First:Time: 12.2ms stdev=3.7%
                        Worst:Time: 14.3ms stdev=3.1%
            regexp:Score: 289pt stdev=1.3%
                  :Time:Geometric: 17.3ms stdev=1.3%
                  Average:Time: 15.6ms stdev=1.1%
                  First:Time: 17.8ms stdev=2.5%
                  Worst:Time: 18.6ms stdev=1.2%
            richards:Score: 689pt stdev=1.4%
                    :Time:Geometric: 7.26ms stdev=1.4%
                    Average:Time: 5.06ms stdev=1.4%
                    First:Time: 12.6ms stdev=4.3%
                    Worst:Time: 6.00ms stdev=0.0%
            richards-wasm:Score: 92.5pt stdev=3.6%
                         :Time:Geometric: 54.1ms stdev=3.7%
                         Runtime:Time: 565ms stdev=2.0%
                         Startup:Time: 5.20ms stdev=8.6%
            segmentation:Score: 29.6pt stdev=1.5%
                        :Time:Geometric: 169ms stdev=1.5%
                        Average:Time: 113ms stdev=2.8%
                        First:Time: 228ms stdev=1.0%
                        Worst:Time: 189ms stdev=1.6%
            splay:Score: 376pt stdev=2.3%
                 :Time:Geometric: 13.3ms stdev=2.2%
                 Average:Time: 10.7ms stdev=1.5%
                 First:Time: 12.8ms stdev=6.5%
                 Worst:Time: 17.1ms stdev=1.7%
            stanford-crypto-aes:Score: 334pt stdev=2.8%
                               :Time:Geometric: 15.0ms stdev=2.7%
                               Average:Time: 11.5ms stdev=2.3%
                               First:Time: 20.4ms stdev=2.7%
                               Worst:Time: 14.3ms stdev=5.9%
            stanford-crypto-pbkdf2:Score: 452pt stdev=1.5%
                                  :Time:Geometric: 11.1ms stdev=1.5%
                                  Average:Time: 9.46ms stdev=2.5%
                                  First:Time: 11.2ms stdev=4.0%
                                  Worst:Time: 12.8ms stdev=2.0%
            stanford-crypto-sha256:Score: 562pt stdev=3.7%
                                  :Time:Geometric: 8.90ms stdev=3.6%
                                  Average:Time: 7.43ms stdev=4.0%
                                  First:Time: 11.0ms stdev=0.0%
                                  Worst:Time: 8.65ms stdev=7.0%
            string-unpack-code-SP:Score: 309pt stdev=2.7%
                                 :Time:Geometric: 16.2ms stdev=2.7%
                                 Average:Time: 14.65ms stdev=0.9%
                                 First:Time: 17.8ms stdev=7.3%
                                 Worst:Time: 16.3ms stdev=1.7%
            tagcloud-SP:Score: 226pt stdev=4.9%
                       :Time:Geometric: 22.2ms stdev=4.6%
                       Average:Time: 17.6ms stdev=1.8%
                       First:Time: 26.2ms stdev=3.2%
                       Worst:Time: 23.6ms stdev=9.1%
            tsf-wasm:Score: 85pt stdev=11.2%
                    :Time:Geometric: 59ms stdev=11.7%
                    Runtime:Time: 307ms stdev=1.5%
                    Startup:Time: 12ms stdev=23.3%
            typescript:Score: 15.7pt stdev=3.3%
                      :Time:Geometric: 318ms stdev=3.4%
                      Average:Time: 237ms stdev=4.0%
                      First:Time: 466ms stdev=2.6%
                      Worst:Time: 292ms stdev=3.8%
            uglify-js-wtb:Score: 21.3pt stdev=1.9%
                         :Time:Geometric: 235ms stdev=2.0%
                         Average:Time: 180ms stdev=1.9%
                         First:Time: 355ms stdev=2.0%
                         Worst:Time: 204ms stdev=2.9%

And here are my JetStream2 results with the change:

JetStream2.0:Score:Geometric: 163pt stdev=2.1%
            3d-cube-SP:Score: 343pt stdev=2.4%
                      :Time:Geometric: 14.6ms stdev=2.3%
                      Average:Time: 11.7ms stdev=2.3%
                      First:Time: 19.6ms stdev=2.8%
                      Worst:Time: 13.6ms stdev=6.3%
            3d-raytrace-SP:Score: 367pt stdev=3.1%
                          :Time:Geometric: 13.6ms stdev=3.2%
                          Average:Time: 10.3ms stdev=4.1%
                          First:Time: 18.8ms stdev=2.4%
                          Worst:Time: 13.1ms stdev=4.8%
            Air:Score: 285pt stdev=9.7%
               :Time:Geometric: 18ms stdev=10.8%
               Average:Time: 5.09ms stdev=7.8%
               First:Time: 52.4ms stdev=2.6%
               Worst:Time: 21ms stdev=23.9%
            Babylon:Score: 415pt stdev=10.0%
                   :Time:Geometric: 12ms stdev=10.4%
                   Average:Time: 4.91ms stdev=5.4%
                   First:Time: 30ms stdev=21.9%
                   Worst:Time: 12ms stdev=13.1%
            Basic:Score: 514pt stdev=4.3%
                 :Time:Geometric: 9.74ms stdev=4.5%
                 Average:Time: 4.77ms stdev=4.8%
                 First:Time: 20.2ms stdev=5.4%
                 Worst:Time: 9.60ms stdev=5.1%
            Box2D:Score: 347pt stdev=2.6%
                 :Time:Geometric: 14.4ms stdev=2.7%
                 Average:Time: 6.59ms stdev=2.9%
                 First:Time: 43.6ms stdev=3.5%
                 Worst:Time: 10.4ms stdev=2.0%
            FlightPlanner:Score: 592pt stdev=2.8%
                         :Time:Geometric: 8.46ms stdev=2.9%
                         Average:Time: 5.18ms stdev=2.2%
                         First:Time: 14.6ms stdev=3.8%
                         Worst:Time: 8.00ms stdev=6.2%
            HashSet-wasm:Score: 35.2pt stdev=2.7%
                        :Time:Geometric: 142ms stdev=2.7%
                        Runtime:Time: 735ms stdev=2.3%
                        Startup:Time: 27.6ms stdev=6.6%
            ML:Score: 87.3pt stdev=7.1%
              :Time:Geometric: 57.5ms stdev=7.0%
              Average:Time: 44.0ms stdev=4.3%
              First:Time: 91ms stdev=17.5%
              Worst:Time: 48.1ms stdev=5.0%
            OfflineAssembler:Score: 120pt stdev=1.7%
                            :Time:Geometric: 41.6ms stdev=1.7%
                            Average:Time: 32.6ms stdev=1.7%
                            First:Time: 58.6ms stdev=2.3%
                            Worst:Time: 37.5ms stdev=2.6%
            UniPoker:Score: 310pt stdev=4.0%
                    :Time:Geometric: 16.2ms stdev=4.1%
                    Average:Time: 11.9ms stdev=1.2%
                    First:Time: 22.6ms stdev=4.0%
                    Worst:Time: 16ms stdev=12.7%
            WSL:Score: 1.05pt stdev=2.6%
               :Time:Geometric: 4.76s stdev=2.7%
               MainRun:Time: 7.69s stdev=3.6%
               Stdlib:Time: 2.94s stdev=1.7%
            acorn-wtb:Score: 43.3pt stdev=2.3%
                     :Time:Geometric: 115ms stdev=2.3%
                     Average:Time: 91.3ms stdev=2.6%
                     First:Time: 173ms stdev=2.8%
                     Worst:Time: 97.4ms stdev=3.0%
            ai-astar:Score: 422pt stdev=7.7%
                    :Time:Geometric: 11.9ms stdev=7.9%
                    Average:Time: 8.4ms stdev=14.8%
                    First:Time: 17ms stdev=40.8%
                    Worst:Time: 12.2ms stdev=8.5%
            async-fs:Score: 218pt stdev=5.9%
                    :Time:Geometric: 23.0ms stdev=6.1%
                    Average:Time: 18.6ms stdev=5.3%
                    First:Time: 30.8ms stdev=6.7%
                    Worst:Time: 21.3ms stdev=6.8%
            babylon-wtb:Score: 53.8pt stdev=2.4%
                       :Time:Geometric: 93.1ms stdev=2.4%
                       Average:Time: 71.3ms stdev=2.2%
                       First:Time: 145ms stdev=5.0%
                       Worst:Time: 78.0ms stdev=4.3%
            base64-SP:Score: 482pt stdev=4.0%
                     :Time:Geometric: 10.4ms stdev=3.9%
                     Average:Time: 8.03ms stdev=5.3%
                     First:Time: 14ms stdev=11.6%
                     Worst:Time: 9.75ms stdev=6.0%
            bomb-workers:Score: 103pt stdev=5.0%
                        :Time:Geometric: 48.6ms stdev=5.2%
                        Average:Time: 43.4ms stdev=2.2%
                        First:Time: 53ms stdev=12.7%
                        Worst:Time: 50.1ms stdev=3.6%
            cdjs:Score: 93.6pt stdev=2.3%
                :Time:Geometric: 53.5ms stdev=2.4%
                Average:Time: 48.0ms stdev=3.4%
                First:Time: 62.0ms stdev=1.6%
                Worst:Time: 51.3ms stdev=2.6%
            chai-wtb:Score: 63.4pt stdev=6.4%
                    :Time:Geometric: 79.2ms stdev=6.9%
                    Average:Time: 61.8ms stdev=7.5%
                    First:Time: 119ms stdev=2.3%
                    Worst:Time: 68ms stdev=13.0%
            coffeescript-wtb:Score: 26.7pt stdev=3.5%
                            :Time:Geometric: 187ms stdev=3.6%
                            Average:Time: 152ms stdev=3.5%
                            First:Time: 264ms stdev=17.3%
                            Worst:Time: 165ms stdev=2.8%
            crypto:Score: 1.05Kpt stdev=2.0%
                  :Time:Geometric: 4.78ms stdev=2.0%
                  Average:Time: 3.22ms stdev=2.7%
                  First:Time: 8.00ms stdev=0.0%
                  Worst:Time: 4.25ms stdev=4.2%
            crypto-aes-SP:Score: 523pt stdev=2.9%
                         :Time:Geometric: 9.57ms stdev=2.9%
                         Average:Time: 7.37ms stdev=3.1%
                         First:Time: 14.0000000ms stdev=0.0%
                         Worst:Time: 8.50ms stdev=5.9%
            crypto-md5-SP:Score: 508pt stdev=7.0%
                         :Time:Geometric: 9.88ms stdev=7.0%
                         Average:Time: 7.29ms stdev=2.2%
                         First:Time: 15ms stdev=13.4%
                         Worst:Time: 9.2ms stdev=15.2%
            crypto-sha1-SP:Score: 580pt stdev=2.9%
                          :Time:Geometric: 8.63ms stdev=2.9%
                          Average:Time: 6.03ms stdev=2.7%
                          First:Time: 12.2ms stdev=3.7%
                          Worst:Time: 8.75ms stdev=4.5%
            date-format-tofte-SP:Score: 272pt stdev=3.2%
                                :Time:Geometric: 18.4ms stdev=3.2%
                                Average:Time: 15.6ms stdev=3.3%
                                First:Time: 24.0ms stdev=5.9%
                                Worst:Time: 16.6ms stdev=2.5%
            date-format-xparb-SP:Score: 273pt stdev=5.8%
                                :Time:Geometric: 18.3ms stdev=5.7%
                                Average:Time: 12.9ms stdev=1.8%
                                First:Time: 31ms stdev=15.5%
                                Worst:Time: 15.4ms stdev=9.8%
            delta-blue:Score: 728pt stdev=8.5%
                      :Time:Geometric: 6.91ms stdev=9.2%
                      Average:Time: 3.11ms stdev=3.6%
                      First:Time: 17ms stdev=33.0%
                      Worst:Time: 6.40ms stdev=4.5%
            earley-boyer:Score: 624pt stdev=7.9%
                        :Time:Geometric: 8.05ms stdev=8.3%
                        Average:Time: 4.79ms stdev=7.1%
                        First:Time: 12.4ms stdev=4.4%
                        Worst:Time: 8.8ms stdev=17.3%
            espree-wtb:Score: 44.5pt stdev=9.9%
                      :Time:Geometric: 113ms stdev=11.0%
                      Average:Time: 90.2ms stdev=4.2%
                      First:Time: 179ms stdev=35.6%
                      Worst:Time: 93.0ms stdev=4.9%
            first-inspector-code-load:Score: 203pt stdev=3.0%
                                     :Time:Geometric: 24.7ms stdev=3.0%
                                     Average:Time: 23.8ms stdev=2.8%
                                     First:Time: 25.4ms stdev=2.2%
                                     Worst:Time: 24.9ms stdev=4.3%
            float-mm.c:Score: 8.19pt stdev=8.1%
                      :Time:Geometric: 613ms stdev=7.5%
                      Average:Time: 611ms stdev=11.2%
                      First:Time: 610ms stdev=9.9%
                      Worst:Time: 624ms stdev=11.8%
            gaussian-blur:Score: 326pt stdev=2.0%
                         :Time:Geometric: 15.3ms stdev=2.0%
                         Average:Time: 12.2ms stdev=2.2%
                         First:Time: 21.4ms stdev=2.6%
                         Worst:Time: 13.8ms stdev=3.0%
            gbemu:Score: 130pt stdev=1.9%
                 :Time:Geometric: 38.6ms stdev=1.9%
                 Average:Time: 21.1ms stdev=2.8%
                 First:Time: 73.6ms stdev=2.8%
                 Worst:Time: 36.9ms stdev=2.7%
            gcc-loops-wasm:Score: 34.7pt stdev=3.6%
                          :Time:Geometric: 144ms stdev=3.5%
                          Runtime:Time: 2.66s stdev=2.3%
                          Startup:Time: 7.80ms stdev=5.7%
            hash-map:Score: 354pt stdev=2.7%
                    :Time:Geometric: 14.1ms stdev=2.8%
                    Average:Time: 10.2ms stdev=2.9%
                    First:Time: 19.8ms stdev=2.3%
                    Worst:Time: 14.1ms stdev=4.4%
            jshint-wtb:Score: 32.2pt stdev=2.4%
                      :Time:Geometric: 155ms stdev=2.4%
                      Average:Time: 130ms stdev=1.7%
                      First:Time: 211ms stdev=4.2%
                      Worst:Time: 136ms stdev=2.0%
            json-parse-inspector:Score: 162pt stdev=3.8%
                                :Time:Geometric: 30.9ms stdev=3.8%
                                Average:Time: 29.3ms stdev=3.9%
                                First:Time: 30.2ms stdev=2.8%
                                Worst:Time: 33.3ms stdev=7.6%
            json-stringify-inspector:Score: 139pt stdev=6.9%
                                    :Time:Geometric: 36.1ms stdev=7.1%
                                    Average:Time: 32.4ms stdev=4.8%
                                    First:Time: 30.6ms stdev=1.8%
                                    Worst:Time: 48ms stdev=16.4%
            lebab-wtb:Score: 38.0pt stdev=7.8%
                     :Time:Geometric: 132ms stdev=8.1%
                     Average:Time: 101ms stdev=5.5%
                     First:Time: 199ms stdev=10.5%
                     Worst:Time: 115ms stdev=8.4%
            mandreel:Score: 101pt stdev=1.9%
                    :Time:Geometric: 49.3ms stdev=1.9%
                    Average:Time: 32.0ms stdev=2.3%
                    First:Time: 96.2ms stdev=1.9%
                    Worst:Time: 39.0ms stdev=1.7%
            multi-inspector-code-load:Score: 318pt stdev=5.9%
                                     :Time:Geometric: 15.8ms stdev=6.1%
                                     Average:Time: 6.6ms stdev=19.6%
                                     First:Time: 24.6ms stdev=3.6%
                                     Worst:Time: 24.4ms stdev=3.1%
            n-body-SP:Score: 705pt stdev=4.4%
                     :Time:Geometric: 7.11ms stdev=4.5%
                     Average:Time: 5.97ms stdev=2.4%
                     First:Time: 9.40ms stdev=5.8%
                     Worst:Time: 6.40ms stdev=5.9%
            navier-stokes:Score: 738pt stdev=2.3%
                         :Time:Geometric: 6.78ms stdev=2.3%
                         Average:Time: 4.60ms stdev=2.3%
                         First:Time: 11.8ms stdev=3.8%
                         Worst:Time: 5.75ms stdev=3.1%
            octane-code-load:Score: 708pt stdev=13.6%
                            :Time:Geometric: 7.2ms stdev=13.9%
                            Average:Time: 5.71ms stdev=6.5%
                            First:Time: 9.4ms stdev=22.1%
                            Worst:Time: 6.9ms stdev=13.2%
            octane-zlib:Score: 17pt stdev=20.9%
                       :Time:Geometric: 296ms stdev=19.5%
                       Average:Time: 172ms stdev=2.5%
                       First:Time: 926ms stdev=48.2%
                       Worst:Time: 175ms stdev=2.8%
            pdfjs:Score: 139.7pt stdev=0.5%
                 :Time:Geometric: 35.78ms stdev=0.5%
                 Average:Time: 24.33ms stdev=0.6%
                 First:Time: 53.8ms stdev=2.0%
                 Worst:Time: 35.00ms stdev=0.9%
            prepack-wtb:Score: 39.68pt stdev=0.9%
                       :Time:Geometric: 126.0ms stdev=0.9%
                       Average:Time: 88.40ms stdev=0.9%
                       First:Time: 218ms stdev=1.4%
                       Worst:Time: 104.0ms stdev=0.7%
            quicksort-wasm:Score: 321pt stdev=3.1%
                          :Time:Geometric: 15.6ms stdev=3.2%
                          Runtime:Time: 29.6ms stdev=1.9%
                          Startup:Time: 8.20ms stdev=5.5%
            raytrace:Score: 532.1pt stdev=0.9%
                    :Time:Geometric: 9.397ms stdev=0.9%
                    Average:Time: 4.62ms stdev=1.2%
                    First:Time: 14.8ms stdev=3.0%
                    Worst:Time: 12.2ms stdev=2.3%
            regex-dna-SP:Score: 401pt stdev=2.8%
                        :Time:Geometric: 12.5ms stdev=2.8%
                        Average:Time: 11.3ms stdev=2.4%
                        First:Time: 12.4ms stdev=4.4%
                        Worst:Time: 13.9ms stdev=6.0%
            regexp:Score: 282pt stdev=2.7%
                  :Time:Geometric: 17.8ms stdev=2.8%
                  Average:Time: 15.65ms stdev=0.6%
                  First:Time: 18.4ms stdev=4.9%
                  Worst:Time: 19.5ms stdev=3.1%
            richards:Score: 689pt stdev=1.1%
                    :Time:Geometric: 7.25ms stdev=1.1%
                    Average:Time: 5.10ms stdev=3.1%
                    First:Time: 12.6ms stdev=4.3%
                    Worst:Time: 5.95ms stdev=1.9%
            richards-wasm:Score: 93.5pt stdev=4.3%
                         :Time:Geometric: 53.5ms stdev=4.5%
                         Runtime:Time: 552ms stdev=2.1%
                         Startup:Time: 5.20ms stdev=8.6%
            segmentation:Score: 28.9pt stdev=2.7%
                        :Time:Geometric: 173ms stdev=2.6%
                        Average:Time: 115ms stdev=5.0%
                        First:Time: 234ms stdev=1.7%
                        Worst:Time: 192ms stdev=3.1%
            splay:Score: 373pt stdev=2.1%
                 :Time:Geometric: 13.4ms stdev=2.1%
                 Average:Time: 10.9ms stdev=1.3%
                 First:Time: 12.8ms stdev=3.5%
                 Worst:Time: 17.4ms stdev=3.5%
            stanford-crypto-aes:Score: 330pt stdev=1.7%
                               :Time:Geometric: 15.2ms stdev=1.7%
                               Average:Time: 11.4ms stdev=1.5%
                               First:Time: 20.6ms stdev=2.7%
                               Worst:Time: 14.8ms stdev=7.2%
            stanford-crypto-pbkdf2:Score: 453pt stdev=2.5%
                                  :Time:Geometric: 11.0ms stdev=2.5%
                                  Average:Time: 9.32ms stdev=1.6%
                                  First:Time: 11.4ms stdev=7.8%
                                  Worst:Time: 12.7ms stdev=2.6%
            stanford-crypto-sha256:Score: 552pt stdev=4.8%
                                  :Time:Geometric: 9.08ms stdev=4.8%
                                  Average:Time: 7.38ms stdev=4.6%
                                  First:Time: 11.6ms stdev=7.7%
                                  Worst:Time: 8.75ms stdev=4.0%
            string-unpack-code-SP:Score: 303pt stdev=1.6%
                                 :Time:Geometric: 16.5ms stdev=1.6%
                                 Average:Time: 14.80ms stdev=0.8%
                                 First:Time: 18.2ms stdev=2.5%
                                 Worst:Time: 16.7ms stdev=2.7%
            tagcloud-SP:Score: 241pt stdev=3.8%
                       :Time:Geometric: 20.8ms stdev=3.9%
                       Average:Time: 17.0ms stdev=1.5%
                       First:Time: 25.8ms stdev=1.7%
                       Worst:Time: 21ms stdev=10.2%
            tsf-wasm:Score: 80pt stdev=19.4%
                    :Time:Geometric: 64ms stdev=21.5%
                    Runtime:Time: 299ms stdev=4.3%
                    Startup:Time: 15ms stdev=49.1%
            typescript:Score: 15.6pt stdev=2.6%
                      :Time:Geometric: 320ms stdev=2.6%
                      Average:Time: 238ms stdev=3.1%
                      First:Time: 470ms stdev=2.7%
                      Worst:Time: 295ms stdev=2.3%
            uglify-js-wtb:Score: 21.0pt stdev=2.5%
                         :Time:Geometric: 238ms stdev=2.5%
                         Average:Time: 183ms stdev=2.5%
                         First:Time: 356ms stdev=2.2%
                         Worst:Time: 207ms stdev=3.1%

There are some small increases and some small decreases, but everything seems to be within noise.  I&apos;m planning to commit this and see if our bots agree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614197</commentid>
    <comment_count>5</comment_count>
      <attachid>389560</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-02-03 15:02:32 -0800</bug_when>
    <thetext>Comment on attachment 389560
patch

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

+1, this is awesome =D

&gt; Source/WTF/wtf/HashTable.h:663
&gt; +            return nullptr;
&gt; +        unsigned sizeMask = tableSizeMask();

Style: I&apos;d add a newline between these

&gt; Source/WTF/wtf/HashTable.h:1293
&gt;          m_table = allocateTable(newTableSize);
&gt; +        setTableSize(newTableSize);
&gt; +        setTableSizeMask(newTableSize - 1);
&gt; +        setDeletedCount(0);
&gt; +        setKeyCount(oldKeyCount);

Should we move all of this inside `allocateTable`, similar to how the table&apos;s size is pulled out of the `ValueType* table` inside `deallocateTable`?

&gt; Source/WTF/wtf/HashTable.h:1362
&gt; +        setKeyCount(otherKeyCount);
&gt; +        setDeletedCount(0);

I would guess no, but does the order of these matter?  Above, you `setKeyCount` after `setDeletedCount`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614210</commentid>
    <comment_count>6</comment_count>
      <attachid>389560</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-02-03 15:16:07 -0800</bug_when>
    <thetext>Comment on attachment 389560
patch

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

&gt;&gt; Source/WTF/wtf/HashTable.h:1293
&gt;&gt; +        setKeyCount(oldKeyCount);
&gt; 
&gt; Should we move all of this inside `allocateTable`, similar to how the table&apos;s size is pulled out of the `ValueType* table` inside `deallocateTable`?

We could, and all 4 do need to be initialized, but there are two reasons not to:
1. We would have to pass the keyCount into the call to allocateTable, which would be strange.
2. Then the memory allocator would be responsible for initializing some memory but not all.  I prefer to keep the existing model where the caller is responsible for initializing all the memory.

&gt;&gt; Source/WTF/wtf/HashTable.h:1362
&gt;&gt; +        setDeletedCount(0);
&gt; 
&gt; I would guess no, but does the order of these matter?  Above, you `setKeyCount` after `setDeletedCount`.

Order doesn&apos;t matter here.  It&apos;s just writing 4 integers.  All metadata must be initialized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614216</commentid>
    <comment_count>7</comment_count>
      <attachid>389560</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-03 15:25:02 -0800</bug_when>
    <thetext>Comment on attachment 389560
patch

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

&gt; Source/WTF/wtf/HashTable.h:1196
&gt; +            return reinterpret_cast&lt;ValueType*&gt;(static_cast&lt;char*&gt;(HashTableMalloc::zeroedMalloc(metadataSize + size * sizeof(ValueType))) + metadataSize);

One good addition is, `static_assert(metadataSize % alignof(ValueType) == 0)` to ensure that offsetted vector is still meeting alignment requirement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614239</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-02-03 15:48:44 -0800</bug_when>
    <thetext>http://trac.webkit.org/r255611</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614240</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-02-03 15:49:18 -0800</bug_when>
    <thetext>&lt;rdar://problem/59129599&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614241</commentid>
    <comment_count>10</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-02-03 15:49:56 -0800</bug_when>
    <thetext>Note: this was intended to help with &lt;rdar://problem/58066381&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614578</commentid>
    <comment_count>11</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2020-02-04 09:03:40 -0800</bug_when>
    <thetext>It looks like these changes broke 3 lldb tests.

Tracking in https://bugs.webkit.org/show_bug.cgi?id=207204</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389545</attachid>
            <date>2020-02-03 12:16:43 -0800</date>
            <delta_ts>2020-02-03 13:43:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207138-20200203121643.patch</filename>
            <type>text/plain</type>
            <size>25426</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNTUxMTMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDIwLTAyLTAzICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVkdWNlIHNpemUgb2YgSGFzaE1h
cCBhbmQgSGFzaFNldAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjA3MTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyByZWR1Y2VzIHNpemVvZihIYXNoTWFwKSBhbmQgc2l6ZW9mKEhhc2hTZXQpIGZy
b20gMjQgdG8gOCBvbiA2NC1iaXQgc3lzdGVtcy4KKyAgICAgICAgSSBtZWFzdXJlZCB0aGF0IHRo
ZSBvdmVyd2hlbG1pbmcgbWFqb3JpdHkgb2YgSGFzaE1hcHMgYW5kIEhhc2hTZXRzIG5ldmVyIHNl
ZSBtb3JlIHRoYW4gMCBlbGVtZW50cywKKyAgICAgICAgc28gSSBtb3ZlZCB0aGUgdGFibGUgbWV0
YWRhdGEgKHRhYmxlU2l6ZSwgdGFibGVTaXplTWFzaywga2V5Q291bnQsIGRlbGV0ZWRDb3VudCkg
dG8gaW5zaWRlIHRoZQorICAgICAgICBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5LiAgVGhp
cyBtYWtlcyBhbm90aGVyIGJyYW5jaCBpbiBzaXplKCkgZm9yIG5vbi1lbXB0eSB0YWJsZXMKKyAg
ICAgICAgYW5kIGFuIGFkZGl0aW9uYWwgcmVhZCBhbmQgd3JpdGUgd2hlbiByZWhhc2hpbmcgaW4g
ZXhjaGFuZ2UgZm9yIGZld2VyIHdyaXRlcyBpbiB0aGUgY29uc3RydWN0b3IKKyAgICAgICAgYW5k
IGluY3JlYXNlZCBjYWNoZSBsb2NhbGl0eSBvZiBldmVyeXRoaW5nIHRoYXQgdXNlcyBIYXNoTWFw
IGFuZCBIYXNoU2V0LCB3aGljaCBpcyBiYXNpY2FsbHkgZXZlcnl0aGluZy4KKworICAgICAgICAq
IHd0Zi9IYXNoVGFibGUuaDoKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjp+SGFzaFRhYmxlKToK
KyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjplbmQpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6
OmVuZCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6cmFuZG9tKToKKyAgICAgICAg
KFdURjo6SGFzaFRhYmxlOjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpj
YXBhY2l0eSBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6aXNFbXB0eSBjb25zdCk6
CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSk6CisgICAg
ICAgIChXVEY6Okhhc2hUYWJsZTo6c2hvdWxkRXhwYW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6
SGFzaFRhYmxlOjptdXN0UmVoYXNoSW5QbGFjZSBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hU
YWJsZTo6c2hvdWxkU2hyaW5rIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpzaHJp
bmspOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6Om1ha2VJdGVyYXRvcik6CisgICAgICAgIChX
VEY6Okhhc2hUYWJsZTo6bWFrZUNvbnN0SXRlcmF0b3IgY29uc3QpOgorICAgICAgICAoV1RGOjpI
YXNoVGFibGU6Om1ha2VLbm93bkdvb2RJdGVyYXRvcik6CisgICAgICAgIChXVEY6Okhhc2hUYWJs
ZTo6bWFrZUtub3duR29vZENvbnN0SXRlcmF0b3IgY29uc3QpOgorICAgICAgICAoV1RGOjpIYXNo
VGFibGU6OnRhYmxlU2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6c2V0VGFi
bGVTaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjp0YWJsZVNpemVNYXNrIGNv
bnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpzZXRUYWJsZVNpemVNYXNrKToKKyAgICAg
ICAgKFdURjo6SGFzaFRhYmxlOjprZXlDb3VudCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hU
YWJsZTo6c2V0S2V5Q291bnQgY29uc3QpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmRlbGV0
ZWRDb3VudCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6c2V0RGVsZXRlZENvdW50
IGNvbnN0KToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6SGFzaFRhYmxlKToKKyAgICAgICAg
KFdURjo6S2V5VHJhaXRzPjo6aW5saW5lTG9va3VwKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRz
Pjo6bG9va3VwRm9yV3JpdGluZyk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmZ1bGxMb29r
dXBGb3JXcml0aW5nKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6YWRkVW5pcXVlRm9ySW5p
dGlhbGl6YXRpb24pOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjphZGQpOgorICAgICAgICAo
V1RGOjpLZXlUcmFpdHM+OjphZGRQYXNzaW5nSGFzaENvZGUpOgorICAgICAgICAoV1RGOjpLZXlU
cmFpdHM+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpyZW1vdmVJZik6Cisg
ICAgICAgIChXVEY6OktleVRyYWl0cz46OmFsbG9jYXRlVGFibGUpOgorICAgICAgICAoV1RGOjpL
ZXlUcmFpdHM+OjpkZWFsbG9jYXRlVGFibGUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+Ojpl
eHBhbmQpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpzaHJpbmtUb0Jlc3RTaXplKToKKyAg
ICAgICAgKFdURjo6S2V5VHJhaXRzPjo6ZGVsZXRlUmVsZWFzZWRXZWFrQnVja2V0cyk6CisgICAg
ICAgIChXVEY6OktleVRyYWl0cz46OnJlaGFzaCk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46
OmNsZWFyKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6c3dhcCk6CisgICAgICAgIChXVEY6
OktleVRyYWl0cz46OmNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUgY29uc3QpOgorCiAy
MDIwLTAxLTI0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBJbnRs
T2JqZWN0J3MgY2FjaGVkIHN0cmluZ3Mgc2hvdWxkIGJlIGltbW9ydGFsIGFuZCBzYWZlIGZvciBj
b25jdXJyZW50IGFjY2Vzcy4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCShyZXZpc2lvbiAyNTUxMTMpCisr
KyBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzY2LDcgKzM2
Niw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEgKICAgICAgICAg
ewogICAgICAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOyAKICAgICAgICAgICAgIGlmICht
X3RhYmxlKQotICAgICAgICAgICAgICAgIGRlYWxsb2NhdGVUYWJsZShtX3RhYmxlLCBtX3RhYmxl
U2l6ZSk7CisgICAgICAgICAgICAgICAgZGVhbGxvY2F0ZVRhYmxlKG1fdGFibGUpOwogI2lmIENI
RUNLX0hBU0hUQUJMRV9VU0VfQUZURVJfREVTVFJVQ1RJT04KICAgICAgICAgICAgIG1fdGFibGUg
PSAoVmFsdWVUeXBlKikodWludHB0cl90KTB4YmJhZGJlZWY7CiAjZW5kaWYKQEAgLTM4Myw5ICsz
ODMsOSBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihICiAgICAgICAg
IC8vIFRoaXMgaXMgbW9yZSBlZmZpY2llbnQgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRvIHNraXAg
YWxsIHRoZSBlbXB0eSBhbmQgZGVsZXRlZAogICAgICAgICAvLyBidWNrZXRzLCBhbmQgaXRlcmF0
aW5nIGFuIGVtcHR5IHRhYmxlIGlzIGEgY29tbW9uIGNhc2UgdGhhdCdzIHdvcnRoIG9wdGltaXpp
bmcuCiAgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gaXNFbXB0eSgpID8gZW5kKCkg
OiBtYWtlSXRlcmF0b3IobV90YWJsZSk7IH0KLSAgICAgICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1
cm4gbWFrZUtub3duR29vZEl0ZXJhdG9yKG1fdGFibGUgKyBtX3RhYmxlU2l6ZSk7IH0KKyAgICAg
ICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbWFrZUtub3duR29vZEl0ZXJhdG9yKG1fdGFibGUg
KyB0YWJsZVNpemUoKSk7IH0KICAgICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7
IHJldHVybiBpc0VtcHR5KCkgPyBlbmQoKSA6IG1ha2VDb25zdEl0ZXJhdG9yKG1fdGFibGUpOyB9
Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1ha2VLbm93bkdv
b2RDb25zdEl0ZXJhdG9yKG1fdGFibGUgKyBtX3RhYmxlU2l6ZSk7IH0KKyAgICAgICAgY29uc3Rf
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbWFrZUtub3duR29vZENvbnN0SXRlcmF0b3Io
bV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQogCiAgICAgICAgIGl0ZXJhdG9yIHJhbmRvbSgpCiAg
ICAgICAgIHsKQEAgLTM5Myw3ICszOTMsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBf
SURFTlRJRklFUihICiAgICAgICAgICAgICAgICAgcmV0dXJuIGVuZCgpOwogCiAgICAgICAgICAg
ICB3aGlsZSAoMSkgewotICAgICAgICAgICAgICAgIGF1dG8mIGJ1Y2tldCA9IG1fdGFibGVbd2Vh
a1JhbmRvbVVpbnQzMigpICYgbV90YWJsZVNpemVNYXNrXTsKKyAgICAgICAgICAgICAgICBhdXRv
JiBidWNrZXQgPSBtX3RhYmxlW3dlYWtSYW5kb21VaW50MzIoKSAmIHRhYmxlU2l6ZU1hc2soKV07
CiAgICAgICAgICAgICAgICAgaWYgKCFpc0VtcHR5T3JEZWxldGVkQnVja2V0KGJ1Y2tldCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlS25vd25Hb29kSXRlcmF0b3IoJmJ1Y2tldCk7
CiAgICAgICAgICAgICB9OwpAQCAtNDAxLDIyICs0MDEsMjMgQEAgREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoSAogCiAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIHJhbmRvbSgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0X2l0ZXJhdG9yPihjb25zdF9jYXN0PEhh
c2hUYWJsZSo+KHRoaXMpLT5yYW5kb20oKSk7IH0KIAotICAgICAgICB1bnNpZ25lZCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9rZXlDb3VudDsgfQotICAgICAgICB1bnNpZ25lZCBjYXBhY2l0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fdGFibGVTaXplOyB9Ci0gICAgICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0IHsgcmV0dXJuICFtX2tleUNvdW50OyB9CisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25z
dCB7IHJldHVybiBrZXlDb3VudCgpOyB9CisgICAgICAgIHVuc2lnbmVkIGNhcGFjaXR5KCkgY29u
c3QgeyByZXR1cm4gdGFibGVTaXplKCk7IH0KKyAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qg
eyByZXR1cm4gIWtleUNvdW50KCk7IH0KIAogICAgICAgICB2b2lkIHJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkodW5zaWduZWQga2V5Q291bnQpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCgh
bV90YWJsZSk7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fdGFibGVTaXplKTsKLSAgICAgICAgICAg
IEFTU0VSVCghbV9kZWxldGVkQ291bnQpOworICAgICAgICAgICAgQVNTRVJUKCF0YWJsZVNpemUo
KSk7CiAKICAgICAgICAgICAgIHVuc2lnbmVkIG1pbmltdW1UYWJsZVNpemUgPSBLZXlUcmFpdHM6
Om1pbmltdW1UYWJsZVNpemU7CiAgICAgICAgICAgICB1bnNpZ25lZCBuZXdUYWJsZVNpemUgPSBz
dGQ6Om1heChtaW5pbXVtVGFibGVTaXplLCBjb21wdXRlQmVzdFRhYmxlU2l6ZShrZXlDb3VudCkp
OwogCi0gICAgICAgICAgICBtX3RhYmxlU2l6ZSA9IG5ld1RhYmxlU2l6ZTsKLSAgICAgICAgICAg
IG1fdGFibGVTaXplTWFzayA9IG5ld1RhYmxlU2l6ZSAtIDE7CiAgICAgICAgICAgICBtX3RhYmxl
ID0gYWxsb2NhdGVUYWJsZShuZXdUYWJsZVNpemUpOworICAgICAgICAgICAgc2V0VGFibGVTaXpl
KG5ld1RhYmxlU2l6ZSk7CisgICAgICAgICAgICBzZXRUYWJsZVNpemVNYXNrKG5ld1RhYmxlU2l6
ZSAtIDEpOworICAgICAgICAgICAgc2V0RGVsZXRlZENvdW50KDApOworICAgICAgICAgICAgc2V0
S2V5Q291bnQoMCk7CiAgICAgICAgIH0KIAogICAgICAgICBBZGRSZXN1bHQgYWRkKGNvbnN0IFZh
bHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIGFkZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihFeHRy
YWN0b3I6OmV4dHJhY3QodmFsdWUpLCB2YWx1ZSk7IH0KQEAgLTQ2OCw3ICs0NjksNyBAQCBERUNM
QVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihICiAKICAgICBwcml2YXRlOgogICAg
ICAgICBzdGF0aWMgVmFsdWVUeXBlKiBhbGxvY2F0ZVRhYmxlKHVuc2lnbmVkIHNpemUpOwotICAg
ICAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlVGFibGUoVmFsdWVUeXBlKiB0YWJsZSwgdW5zaWdu
ZWQgc2l6ZSk7CisgICAgICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGVUYWJsZShWYWx1ZVR5cGUq
IHRhYmxlKTsKIAogICAgICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxWYWx1ZVR5cGUqLCBib29sPiBM
b29rdXBUeXBlOwogICAgICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxMb29rdXBUeXBlLCB1bnNpZ25l
ZD4gRnVsbExvb2t1cFR5cGU7CkBAIC00ODYsMTEgKzQ4NywxMSBAQCBERUNMQVJFX0FMTE9DQVRP
Ul9XSVRIX0hFQVBfSURFTlRJRklFUihICiAgICAgICAgIHZvaWQgcmVtb3ZlKFZhbHVlVHlwZSop
OwogCiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY29tcHV0ZUJlc3RUYWJsZVNp
emUodW5zaWduZWQga2V5Q291bnQpOwotICAgICAgICBib29sIHNob3VsZEV4cGFuZCgpIGNvbnN0
IHsgcmV0dXJuIChtX2tleUNvdW50ICsgbV9kZWxldGVkQ291bnQpICogbV9tYXhMb2FkID49IG1f
dGFibGVTaXplOyB9Ci0gICAgICAgIGJvb2wgbXVzdFJlaGFzaEluUGxhY2UoKSBjb25zdCB7IHJl
dHVybiBtX2tleUNvdW50ICogbV9taW5Mb2FkIDwgbV90YWJsZVNpemUgKiAyOyB9Ci0gICAgICAg
IGJvb2wgc2hvdWxkU2hyaW5rKCkgY29uc3QgeyByZXR1cm4gbV9rZXlDb3VudCAqIG1fbWluTG9h
ZCA8IG1fdGFibGVTaXplICYmIG1fdGFibGVTaXplID4gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVT
aXplOyB9CisgICAgICAgIGJvb2wgc2hvdWxkRXhwYW5kKCkgY29uc3QgeyByZXR1cm4gKGtleUNv
dW50KCkgKyBkZWxldGVkQ291bnQoKSkgKiBtYXhMb2FkID49IHRhYmxlU2l6ZSgpOyB9CisgICAg
ICAgIGJvb2wgbXVzdFJlaGFzaEluUGxhY2UoKSBjb25zdCB7IHJldHVybiBrZXlDb3VudCgpICog
bWluTG9hZCA8IHRhYmxlU2l6ZSgpICogMjsgfQorICAgICAgICBib29sIHNob3VsZFNocmluaygp
IGNvbnN0IHsgcmV0dXJuIGtleUNvdW50KCkgKiBtaW5Mb2FkIDwgdGFibGVTaXplKCkgJiYgdGFi
bGVTaXplKCkgPiBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7IH0KICAgICAgICAgVmFsdWVU
eXBlKiBleHBhbmQoVmFsdWVUeXBlKiBlbnRyeSA9IG51bGxwdHIpOwotICAgICAgICB2b2lkIHNo
cmluaygpIHsgcmVoYXNoKG1fdGFibGVTaXplIC8gMiwgbnVsbHB0cik7IH0KKyAgICAgICAgdm9p
ZCBzaHJpbmsoKSB7IHJlaGFzaCh0YWJsZVNpemUoKSAvIDIsIG51bGxwdHIpOyB9CiAgICAgICAg
IHZvaWQgc2hyaW5rVG9CZXN0U2l6ZSgpOwogICAgIAogICAgICAgICB2b2lkIGRlbGV0ZVJlbGVh
c2VkV2Vha0J1Y2tldHMoKTsKQEAgLTUwNCwxMCArNTA1LDEwIEBAIERFQ0xBUkVfQUxMT0NBVE9S
X1dJVEhfSEVBUF9JREVOVElGSUVSKEgKICAgICAgICAgRnVsbExvb2t1cFR5cGUgbWFrZUxvb2t1
cFJlc3VsdChWYWx1ZVR5cGUqIHBvc2l0aW9uLCBib29sIGZvdW5kLCB1bnNpZ25lZCBoYXNoKQog
ICAgICAgICAgICAgeyByZXR1cm4gRnVsbExvb2t1cFR5cGUoTG9va3VwVHlwZShwb3NpdGlvbiwg
Zm91bmQpLCBoYXNoKTsgfQogCi0gICAgICAgIGl0ZXJhdG9yIG1ha2VJdGVyYXRvcihWYWx1ZVR5
cGUqIHBvcykgeyByZXR1cm4gaXRlcmF0b3IodGhpcywgcG9zLCBtX3RhYmxlICsgbV90YWJsZVNp
emUpOyB9Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9yIG1ha2VDb25zdEl0ZXJhdG9yKFZhbHVlVHlw
ZSogcG9zKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUg
KyBtX3RhYmxlU2l6ZSk7IH0KLSAgICAgICAgaXRlcmF0b3IgbWFrZUtub3duR29vZEl0ZXJhdG9y
KFZhbHVlVHlwZSogcG9zKSB7IHJldHVybiBpdGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyBt
X3RhYmxlU2l6ZSwgSGFzaEl0ZW1Lbm93bkdvb2QpOyB9Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9y
IG1ha2VLbm93bkdvb2RDb25zdEl0ZXJhdG9yKFZhbHVlVHlwZSogcG9zKSBjb25zdCB7IHJldHVy
biBjb25zdF9pdGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyBtX3RhYmxlU2l6ZSwgSGFzaEl0
ZW1Lbm93bkdvb2QpOyB9CisgICAgICAgIGl0ZXJhdG9yIG1ha2VJdGVyYXRvcihWYWx1ZVR5cGUq
IHBvcykgeyByZXR1cm4gaXRlcmF0b3IodGhpcywgcG9zLCBtX3RhYmxlICsgdGFibGVTaXplKCkp
OyB9CisgICAgICAgIGNvbnN0X2l0ZXJhdG9yIG1ha2VDb25zdEl0ZXJhdG9yKFZhbHVlVHlwZSog
cG9zKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyB0
YWJsZVNpemUoKSk7IH0KKyAgICAgICAgaXRlcmF0b3IgbWFrZUtub3duR29vZEl0ZXJhdG9yKFZh
bHVlVHlwZSogcG9zKSB7IHJldHVybiBpdGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyB0YWJs
ZVNpemUoKSwgSGFzaEl0ZW1Lbm93bkdvb2QpOyB9CisgICAgICAgIGNvbnN0X2l0ZXJhdG9yIG1h
a2VLbm93bkdvb2RDb25zdEl0ZXJhdG9yKFZhbHVlVHlwZSogcG9zKSBjb25zdCB7IHJldHVybiBj
b25zdF9pdGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyB0YWJsZVNpemUoKSwgSGFzaEl0ZW1L
bm93bkdvb2QpOyB9CiAKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgICAgICB2b2lkIGNoZWNrVGFi
bGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSBjb25zdDsKQEAgLTUyMSwxNCArNTIyLDI1IEBAIERF
Q0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEgKICAgICAgICAgc3RhdGljIHZv
aWQgaW52YWxpZGF0ZUl0ZXJhdG9ycygpIHsgfQogI2VuZGlmCiAKLSAgICAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBtX21heExvYWQgPSAyOwotICAgICAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIG1fbWluTG9hZCA9IDY7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgbWF4TG9hZCA9IDI7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWluTG9h
ZCA9IDY7CiAKLSAgICAgICAgVmFsdWVUeXBlKiBtX3RhYmxlOwotICAgICAgICB1bnNpZ25lZCBt
X3RhYmxlU2l6ZTsKLSAgICAgICAgdW5zaWduZWQgbV90YWJsZVNpemVNYXNrOwotICAgICAgICB1
bnNpZ25lZCBtX2tleUNvdW50OwotICAgICAgICB1bnNpZ25lZCBtX2RlbGV0ZWRDb3VudDsKKyAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgdGFibGVTaXplT2Zmc2V0ID0gLTE7CisgICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgaW50IHRhYmxlU2l6ZU1hc2tPZmZzZXQgPSAtMjsKKyAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQga2V5Q291bnRPZmZzZXQgPSAtMzsKKyAgICAgICAgc3RhdGlj
IGNvbnN0ZXhwciBpbnQgZGVsZXRlZENvdW50T2Zmc2V0ID0gLTQ7CisgICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgbWV0YWRhdGFTaXplID0gNCAqIHNpemVvZih1bnNpZ25lZCk7CisK
KyAgICAgICAgdW5zaWduZWQgdGFibGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZSA/IHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihtX3RhYmxlKVt0YWJsZVNpemVPZmZzZXRdIDogMDsg
fQorICAgICAgICB2b2lkIHNldFRhYmxlU2l6ZSh1bnNpZ25lZCBzaXplKSBjb25zdCB7IEFTU0VS
VChtX3RhYmxlKTsgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG1fdGFibGUpW3RhYmxlU2l6
ZU9mZnNldF0gPSBzaXplOyB9CisgICAgICAgIHVuc2lnbmVkIHRhYmxlU2l6ZU1hc2soKSBjb25z
dCB7IEFTU0VSVChtX3RhYmxlKTsgcmV0dXJuIG1fdGFibGUgPyByZWludGVycHJldF9jYXN0PHVu
c2lnbmVkKj4obV90YWJsZSlbdGFibGVTaXplTWFza09mZnNldF0gOiAwOyB9CisgICAgICAgIHZv
aWQgc2V0VGFibGVTaXplTWFzayh1bnNpZ25lZCBtYXNrKSB7IEFTU0VSVChtX3RhYmxlKTsgcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG1fdGFibGUpW3RhYmxlU2l6ZU1hc2tPZmZzZXRdID0g
bWFzazsgfQorICAgICAgICB1bnNpZ25lZCBrZXlDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFi
bGUgPyByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4obV90YWJsZSlba2V5Q291bnRPZmZzZXRd
IDogMDsgfQorICAgICAgICB2b2lkIHNldEtleUNvdW50KHVuc2lnbmVkIGNvdW50KSBjb25zdCB7
IEFTU0VSVChtX3RhYmxlKTsgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG1fdGFibGUpW2tl
eUNvdW50T2Zmc2V0XSA9IGNvdW50OyB9CisgICAgICAgIHVuc2lnbmVkIGRlbGV0ZWRDb3VudCgp
IGNvbnN0IHsgQVNTRVJUKG1fdGFibGUpOyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCo+KG1fdGFibGUpW2RlbGV0ZWRDb3VudE9mZnNldF07IH0KKyAgICAgICAgdm9pZCBzZXREZWxl
dGVkQ291bnQodW5zaWduZWQgY291bnQpIGNvbnN0IHsgQVNTRVJUKG1fdGFibGUpOyByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkKj4obV90YWJsZSlbZGVsZXRlZENvdW50T2Zmc2V0XSA9IGNvdW50
OyB9CisKKyAgICAgICAgVmFsdWVUeXBlKiBtX3RhYmxlIHsgbnVsbHB0ciB9OwogCiAjaWYgQ0hF
Q0tfSEFTSFRBQkxFX0lURVJBVE9SUwogICAgIHB1YmxpYzoKQEAgLTU4NCwxMSArNTk2LDcgQEAg
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSAogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFt
ZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAg
ICBpbmxpbmUgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHM+OjpIYXNoVGFibGUoKQotICAgICAgICA6IG1fdGFibGUoMCkKLSAg
ICAgICAgLCBtX3RhYmxlU2l6ZSgwKQotICAgICAgICAsIG1fdGFibGVTaXplTWFzaygwKQotICAg
ICAgICAsIG1fa2V5Q291bnQoMCkKLSAgICAgICAgLCBtX2RlbGV0ZWRDb3VudCgwKQorICAgICAg
ICA6IG1fdGFibGUobnVsbHB0cikKICNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCiAgICAg
ICAgICwgbV9pdGVyYXRvcnMoMCkKICAgICAgICAgLCBtX211dGV4KG1ha2VVbmlxdWU8TG9jaz4o
KSkKQEAgLTY0OSwxNCArNjU3LDEzIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKEgKICAgICAgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CiAKICAgICAg
ICAgdW5zaWduZWQgayA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gbV90YWJsZVNp
emVNYXNrOwogICAgICAgICBWYWx1ZVR5cGUqIHRhYmxlID0gbV90YWJsZTsKKyAgICAgICAgaWYg
KCF0YWJsZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB1bnNpZ25lZCBz
aXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKICAgICAgICAgdW5zaWduZWQgaCA9IEhhc2hUcmFu
c2xhdG9yOjpoYXNoKGtleSk7CiAgICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAK
LSAgICAgICAgaWYgKCF0YWJsZSkKLSAgICAgICAgICAgIHJldHVybiAwOwotCiAjaWYgRFVNUF9I
QVNIVEFCTEVfU1RBVFMKICAgICAgICAgKytIYXNoVGFibGVTdGF0czo6bnVtQWNjZXNzZXM7CiAg
ICAgICAgIHVuc2lnbmVkIHByb2JlQ291bnQgPSAwOwpAQCAtNzA3LDcgKzcxNCw3IEBAIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEgKIAogICAgICAgICB1bnNpZ25lZCBr
ID0gMDsKICAgICAgICAgVmFsdWVUeXBlKiB0YWJsZSA9IG1fdGFibGU7Ci0gICAgICAgIHVuc2ln
bmVkIHNpemVNYXNrID0gbV90YWJsZVNpemVNYXNrOworICAgICAgICB1bnNpZ25lZCBzaXplTWFz
ayA9IHRhYmxlU2l6ZU1hc2soKTsKICAgICAgICAgdW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9y
OjpoYXNoKGtleSk7CiAgICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAKQEAgLTc2
OCw3ICs3NzUsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihICiAK
ICAgICAgICAgdW5zaWduZWQgayA9IDA7CiAgICAgICAgIFZhbHVlVHlwZSogdGFibGUgPSBtX3Rh
YmxlOwotICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IG1fdGFibGVTaXplTWFzazsKKyAgICAg
ICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CiAgICAgICAgIHVuc2lnbmVk
IGggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOwogICAgICAgICB1bnNpZ25lZCBpID0gaCAm
IHNpemVNYXNrOwogCkBAIC04MzQsNyArODQxLDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoSAogCiAgICAgICAgIHVuc2lnbmVkIGsgPSAwOwogICAgICAgICBWYWx1
ZVR5cGUqIHRhYmxlID0gbV90YWJsZTsKLSAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSBtX3Rh
YmxlU2l6ZU1hc2s7CisgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygp
OwogICAgICAgICB1bnNpZ25lZCBoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsKICAgICAg
ICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsKIApAQCAtOTE1LDcgKzkyMiw3IEBAIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEgKIAogICAgICAgICB1bnNpZ25lZCBr
ID0gMDsKICAgICAgICAgVmFsdWVUeXBlKiB0YWJsZSA9IG1fdGFibGU7Ci0gICAgICAgIHVuc2ln
bmVkIHNpemVNYXNrID0gbV90YWJsZVNpemVNYXNrOworICAgICAgICB1bnNpZ25lZCBzaXplTWFz
ayA9IHRhYmxlU2l6ZU1hc2soKTsKICAgICAgICAgdW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9y
OjpoYXNoKGtleSk7CiAgICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAKQEAgLTk2
OSwxMSArOTc2LDExIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEgK
ICAgICAgICAgaWYgKGRlbGV0ZWRFbnRyeSkgewogICAgICAgICAgICAgaW5pdGlhbGl6ZUJ1Y2tl
dCgqZGVsZXRlZEVudHJ5KTsKICAgICAgICAgICAgIGVudHJ5ID0gZGVsZXRlZEVudHJ5OwotICAg
ICAgICAgICAgLS1tX2RlbGV0ZWRDb3VudDsgCisgICAgICAgICAgICBzZXREZWxldGVkQ291bnQo
ZGVsZXRlZENvdW50KCkgLSAxKTsKICAgICAgICAgfQogCiAgICAgICAgIEhhc2hUcmFuc2xhdG9y
Ojp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4
dHJhPihleHRyYSkpOwotICAgICAgICArK21fa2V5Q291bnQ7CisgICAgICAgIHNldEtleUNvdW50
KGtleUNvdW50KCkgKyAxKTsKICAgICAgICAgCiAgICAgICAgIGlmIChzaG91bGRFeHBhbmQoKSkK
ICAgICAgICAgICAgIGVudHJ5ID0gZXhwYW5kKGVudHJ5KTsKQEAgLTEwMDcsMTEgKzEwMTQsMTEg
QEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSAogICAgICAgICAKICAg
ICAgICAgaWYgKGlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKSB7CiAgICAgICAgICAgICBpbml0aWFs
aXplQnVja2V0KCplbnRyeSk7Ci0gICAgICAgICAgICAtLW1fZGVsZXRlZENvdW50OworICAgICAg
ICAgICAgc2V0RGVsZXRlZENvdW50KGRlbGV0ZWRDb3VudCgpIC0gMSk7CiAgICAgICAgIH0KIAog
ICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJkPFQ+
KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpLCBoKTsKLSAgICAgICAgKyttX2tleUNv
dW50OworICAgICAgICBzZXRLZXlDb3VudChrZXlDb3VudCgpICsgMSk7CiAKICAgICAgICAgaWYg
KHNob3VsZEV4cGFuZCgpKQogICAgICAgICAgICAgZW50cnkgPSBleHBhbmQoZW50cnkpOwpAQCAt
MTEwNSw4ICsxMTEyLDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIo
SAogI2VuZGlmCiAKICAgICAgICAgZGVsZXRlQnVja2V0KCpwb3MpOwotICAgICAgICArK21fZGVs
ZXRlZENvdW50OwotICAgICAgICAtLW1fa2V5Q291bnQ7CisgICAgICAgIHNldERlbGV0ZWRDb3Vu
dChkZWxldGVkQ291bnQoKSArIDEpOworICAgICAgICBzZXRLZXlDb3VudChrZXlDb3VudCgpIC0g
MSk7CiAKICAgICAgICAgaWYgKHNob3VsZFNocmluaygpKQogICAgICAgICAgICAgc2hyaW5rKCk7
CkBAIC0xMTU3LDcgKzExNjQsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJ
RklFUihICiAgICAgICAgIHVuc2lnbmVkIHJlbW92ZWRCdWNrZXRDb3VudCA9IDA7CiAgICAgICAg
IFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOwogCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG1fdGFibGVTaXplOyBpLS07KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHRhYmxlU2l6
ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBWYWx1ZVR5cGUmIGJ1Y2tldCA9IHRhYmxlW2ldOwog
ICAgICAgICAgICAgaWYgKGlzRW1wdHlPckRlbGV0ZWRCdWNrZXQoYnVja2V0KSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKQEAgLTExNjgsOCArMTE3NSw4IEBAIERFQ0xBUkVfQUxMT0NBVE9S
X1dJVEhfSEVBUF9JREVOVElGSUVSKEgKICAgICAgICAgICAgIGRlbGV0ZUJ1Y2tldChidWNrZXQp
OwogICAgICAgICAgICAgKytyZW1vdmVkQnVja2V0Q291bnQ7CiAgICAgICAgIH0KLSAgICAgICAg
bV9kZWxldGVkQ291bnQgKz0gcmVtb3ZlZEJ1Y2tldENvdW50OwotICAgICAgICBtX2tleUNvdW50
IC09IHJlbW92ZWRCdWNrZXRDb3VudDsKKyAgICAgICAgc2V0RGVsZXRlZENvdW50KGRlbGV0ZWRD
b3VudCgpICsgcmVtb3ZlZEJ1Y2tldENvdW50KTsKKyAgICAgICAgc2V0S2V5Q291bnQoa2V5Q291
bnQoKSAtIHJlbW92ZWRCdWNrZXRDb3VudCk7CiAKICAgICAgICAgaWYgKHNob3VsZFNocmluaygp
KQogICAgICAgICAgICAgc2hyaW5rVG9CZXN0U2l6ZSgpOwpAQCAtMTE4NCwyMiArMTE5MSwyMyBA
QCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihICiAgICAgICAgIC8vIHdv
dWxkIHVzZSBhIHRlbXBsYXRlIG1lbWJlciBmdW5jdGlvbiB3aXRoIGV4cGxpY2l0IHNwZWNpYWxp
emF0aW9ucyBoZXJlLCBidXQKICAgICAgICAgLy8gZ2NjIGRvZXNuJ3QgYXBwZWFyIHRvIHN1cHBv
cnQgdGhhdAogICAgICAgICBpZiAoVHJhaXRzOjplbXB0eVZhbHVlSXNaZXJvKQotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlVHlwZSo+KEhhc2hUYWJsZU1hbGxvYzo6emVyb2Vk
TWFsbG9jKHNpemUgKiBzaXplb2YoVmFsdWVUeXBlKSkpOworICAgICAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhhc2hUYWJsZU1h
bGxvYzo6emVyb2VkTWFsbG9jKG1ldGFkYXRhU2l6ZSArIHNpemUgKiBzaXplb2YoVmFsdWVUeXBl
KSkpICsgbWV0YWRhdGFTaXplKTsKIAotICAgICAgICBWYWx1ZVR5cGUqIHJlc3VsdCA9IHN0YXRp
Y19jYXN0PFZhbHVlVHlwZSo+KEhhc2hUYWJsZU1hbGxvYzo6bWFsbG9jKHNpemUgKiBzaXplb2Yo
VmFsdWVUeXBlKSkpOworICAgICAgICBWYWx1ZVR5cGUqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6bWFsbG9j
KG1ldGFkYXRhU2l6ZSArIHNpemUgKiBzaXplb2YoVmFsdWVUeXBlKSkpICsgbWV0YWRhdGFTaXpl
KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykKICAgICAgICAg
ICAgIGluaXRpYWxpemVCdWNrZXQocmVzdWx0W2ldKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBl
bmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywg
dHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpkZWFsbG9jYXRlVGFibGUo
VmFsdWVUeXBlKiB0YWJsZSwgdW5zaWduZWQgc2l6ZSkKKyAgICB2b2lkIEhhc2hUYWJsZTxLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6ZGVh
bGxvY2F0ZVRhYmxlKFZhbHVlVHlwZSogdGFibGUpCiAgICAgeworICAgICAgICB1bnNpZ25lZCBz
aXplID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KHRhYmxlKVt0YWJsZVNpemVPZmZzZXRd
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAg
ICAgICBpZiAoIWlzRGVsZXRlZEJ1Y2tldCh0YWJsZVtpXSkpCiAgICAgICAgICAgICAgICAgdGFi
bGVbaV0uflZhbHVlVHlwZSgpOwogICAgICAgICB9Ci0gICAgICAgIEhhc2hUYWJsZU1hbGxvYzo6
ZnJlZSh0YWJsZSk7CisgICAgICAgIEhhc2hUYWJsZU1hbGxvYzo6ZnJlZShyZWludGVycHJldF9j
YXN0PGNoYXIqPih0YWJsZSkgLSBtZXRhZGF0YVNpemUpOwogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CkBA
IC0xMjA5LDEyICsxMjE3LDEzIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElG
SUVSKEgKICAgICAgICAgICAgIGRlbGV0ZVJlbGVhc2VkV2Vha0J1Y2tldHMoKTsKIAogICAgICAg
ICB1bnNpZ25lZCBuZXdTaXplOwotICAgICAgICBpZiAobV90YWJsZVNpemUgPT0gMCkKKyAgICAg
ICAgdW5zaWduZWQgb2xkU2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgICAgICBpZiAoIW9sZFNpemUp
CiAgICAgICAgICAgICBuZXdTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOwogICAg
ICAgICBlbHNlIGlmIChtdXN0UmVoYXNoSW5QbGFjZSgpKQotICAgICAgICAgICAgbmV3U2l6ZSA9
IG1fdGFibGVTaXplOworICAgICAgICAgICAgbmV3U2l6ZSA9IG9sZFNpemU7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG5ld1NpemUgPSBtX3RhYmxlU2l6ZSAqIDI7CisgICAgICAgICAgICBu
ZXdTaXplID0gb2xkU2l6ZSAqIDI7CiAKICAgICAgICAgcmV0dXJuIHJlaGFzaChuZXdTaXplLCBl
bnRyeSk7CiAgICAgfQpAQCAtMTIzOSwxOCArMTI0OCwxOSBAQCBERUNMQVJFX0FMTE9DQVRPUl9X
SVRIX0hFQVBfSURFTlRJRklFUihICiAgICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnNocmlua1RvQmVzdFNp
emUoKQogICAgIHsKICAgICAgICAgdW5zaWduZWQgbWluaW11bVRhYmxlU2l6ZSA9IEtleVRyYWl0
czo6bWluaW11bVRhYmxlU2l6ZTsKLSAgICAgICAgcmVoYXNoKHN0ZDo6bWF4KG1pbmltdW1UYWJs
ZVNpemUsIGNvbXB1dGVCZXN0VGFibGVTaXplKG1fa2V5Q291bnQpKSwgbnVsbHB0cik7CisgICAg
ICAgIHJlaGFzaChzdGQ6Om1heChtaW5pbXVtVGFibGVTaXplLCBjb21wdXRlQmVzdFRhYmxlU2l6
ZShrZXlDb3VudCgpKSksIG51bGxwdHIpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgdm9pZCBI
YXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cz46OmRlbGV0ZVJlbGVhc2VkV2Vha0J1Y2tldHMoKQogICAgIHsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdGFibGVTaXplOyArK2kpIHsKKyAgICAgICAgdW5zaWdu
ZWQgdGFibGVTaXplID0gdGhpcy0+dGFibGVTaXplKCk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB0YWJsZVNpemU7ICsraSkgewogICAgICAgICAgICAgYXV0byYgZW50cnkgPSBt
X3RhYmxlW2ldOwogICAgICAgICAgICAgaWYgKGlzUmVsZWFzZWRXZWFrQnVja2V0KGVudHJ5KSkg
ewogICAgICAgICAgICAgICAgIGRlbGV0ZUJ1Y2tldChlbnRyeSk7Ci0gICAgICAgICAgICAgICAg
KyttX2RlbGV0ZWRDb3VudDsKLSAgICAgICAgICAgICAgICAtLW1fa2V5Q291bnQ7CisgICAgICAg
ICAgICAgICAgc2V0RGVsZXRlZENvdW50KGRlbGV0ZWRDb3VudCgpICsgMSk7CisgICAgICAgICAg
ICAgICAgc2V0S2V5Q291bnQoa2V5Q291bnQoKSAtIDEpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQpAQCAtMTI2MCw3ICsxMjcwLDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoSAogICAgIHsKICAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lz
dGVuY3lFeGNlcHRTaXplKCk7CiAKLSAgICAgICAgdW5zaWduZWQgb2xkVGFibGVTaXplID0gbV90
YWJsZVNpemU7CisgICAgICAgIHVuc2lnbmVkIG9sZFRhYmxlU2l6ZSA9IHRhYmxlU2l6ZSgpOwog
ICAgICAgICBWYWx1ZVR5cGUqIG9sZFRhYmxlID0gbV90YWJsZTsKIAogI2lmIERVTVBfSEFTSFRB
QkxFX1NUQVRTCkBAIC0xMjczLDkgKzEyODMsMTIgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoSAogICAgICAgICAgICAgKyttX3N0YXRzLT5udW1SZWhhc2hlczsKICNl
bmRpZgogCi0gICAgICAgIG1fdGFibGVTaXplID0gbmV3VGFibGVTaXplOwotICAgICAgICBtX3Rh
YmxlU2l6ZU1hc2sgPSBuZXdUYWJsZVNpemUgLSAxOworICAgICAgICB1bnNpZ25lZCBvbGRLZXlD
b3VudCA9IGtleUNvdW50KCk7CiAgICAgICAgIG1fdGFibGUgPSBhbGxvY2F0ZVRhYmxlKG5ld1Rh
YmxlU2l6ZSk7CisgICAgICAgIHNldFRhYmxlU2l6ZShuZXdUYWJsZVNpemUpOworICAgICAgICBz
ZXRUYWJsZVNpemVNYXNrKG5ld1RhYmxlU2l6ZSAtIDEpOworICAgICAgICBzZXREZWxldGVkQ291
bnQoMCk7CisgICAgICAgIHNldEtleUNvdW50KG9sZEtleUNvdW50KTsKIAogICAgICAgICBWYWx1
ZSogbmV3RW50cnkgPSBudWxscHRyOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9
IG9sZFRhYmxlU2l6ZTsgKytpKSB7CkBAIC0xMjk0LDcgKzEzMDcsNyBAQCBERUNMQVJFX0FMTE9D
QVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihICiAgICAgICAgICAgICBpZiAoaXNSZWxlYXNlZFdl
YWtCdWNrZXQob2xkRW50cnkpKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHN0ZDo6YWRkcmVz
c29mKG9sZEVudHJ5KSAhPSBlbnRyeSk7CiAgICAgICAgICAgICAgICAgb2xkRW50cnkuflZhbHVl
VHlwZSgpOwotICAgICAgICAgICAgICAgIC0tbV9rZXlDb3VudDsKKyAgICAgICAgICAgICAgICBz
ZXRLZXlDb3VudChrZXlDb3VudCgpIC0gMSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CiAKQEAgLTEzMDYsOSArMTMxOSw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJ
VEhfSEVBUF9JREVOVElGSUVSKEgKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAg
IG1fZGVsZXRlZENvdW50ID0gMDsKLQotICAgICAgICBIYXNoVGFibGVNYWxsb2M6OmZyZWUob2xk
VGFibGUpOworICAgICAgICBIYXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4ob2xkVGFibGUpIC0gbWV0YWRhdGFTaXplKTsKIAogICAgICAgICBpbnRlcm5hbENoZWNr
VGFibGVDb25zaXN0ZW5jeSgpOwogICAgICAgICByZXR1cm4gbmV3RW50cnk7CkBAIC0xMzIxLDIx
ICsxMzMyLDEzIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEgKICAg
ICAgICAgaWYgKCFtX3RhYmxlKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGRlYWxs
b2NhdGVUYWJsZShtX3RhYmxlLCBtX3RhYmxlU2l6ZSk7Ci0gICAgICAgIG1fdGFibGUgPSAwOwot
ICAgICAgICBtX3RhYmxlU2l6ZSA9IDA7Ci0gICAgICAgIG1fdGFibGVTaXplTWFzayA9IDA7Ci0g
ICAgICAgIG1fa2V5Q291bnQgPSAwOwotICAgICAgICBtX2RlbGV0ZWRDb3VudCA9IDA7CisgICAg
ICAgIGRlYWxsb2NhdGVUYWJsZShtX3RhYmxlKTsKKyAgICAgICAgbV90YWJsZSA9IG51bGxwdHI7
CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46Okhhc2hUYWJsZShjb25zdCBIYXNo
VGFibGUmIG90aGVyKQogICAgICAgICA6IG1fdGFibGUobnVsbHB0cikKLSAgICAgICAgLCBtX3Rh
YmxlU2l6ZSgwKQotICAgICAgICAsIG1fdGFibGVTaXplTWFzaygwKQotICAgICAgICAsIG1fa2V5
Q291bnQoMCkKLSAgICAgICAgLCBtX2RlbGV0ZWRDb3VudCgwKQogI2lmIENIRUNLX0hBU0hUQUJM
RV9JVEVSQVRPUlMKICAgICAgICAgLCBtX2l0ZXJhdG9ycyhudWxscHRyKQogICAgICAgICAsIG1f
bXV0ZXgobWFrZVVuaXF1ZTxMb2NrPigpKQpAQCAtMTM0OCwxMCArMTM1MSwxMiBAQCBERUNMQVJF
X0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihICiAgICAgICAgIGlmICghb3RoZXJLZXlD
b3VudCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBtX3RhYmxlU2l6ZSA9IGNvbXB1
dGVCZXN0VGFibGVTaXplKG90aGVyS2V5Q291bnQpOwotICAgICAgICBtX3RhYmxlU2l6ZU1hc2sg
PSBtX3RhYmxlU2l6ZSAtIDE7Ci0gICAgICAgIG1fa2V5Q291bnQgPSBvdGhlcktleUNvdW50Owot
ICAgICAgICBtX3RhYmxlID0gYWxsb2NhdGVUYWJsZShtX3RhYmxlU2l6ZSk7CisgICAgICAgIHVu
c2lnbmVkIGJlc3RUYWJsZVNpemUgPSBjb21wdXRlQmVzdFRhYmxlU2l6ZShvdGhlcktleUNvdW50
KTsKKyAgICAgICAgbV90YWJsZSA9IGFsbG9jYXRlVGFibGUoYmVzdFRhYmxlU2l6ZSk7CisgICAg
ICAgIHNldFRhYmxlU2l6ZShiZXN0VGFibGVTaXplKTsKKyAgICAgICAgc2V0VGFibGVTaXplTWFz
ayhiZXN0VGFibGVTaXplIC0gMSk7CisgICAgICAgIHNldEtleUNvdW50KG90aGVyS2V5Q291bnQp
OworICAgICAgICBzZXREZWxldGVkQ291bnQoMCk7CiAKICAgICAgICAgZm9yIChjb25zdCBhdXRv
JiBvdGhlclZhbHVlIDogb3RoZXIpCiAgICAgICAgICAgICBhZGRVbmlxdWVGb3JJbml0aWFsaXph
dGlvbjxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihFeHRyYWN0b3I6OmV4dHJhY3Qob3RoZXJWYWx1
ZSksIG90aGVyVmFsdWUpOwpAQCAtMTM2NCwxMCArMTM2OSw2IEBAIERFQ0xBUkVfQUxMT0NBVE9S
X1dJVEhfSEVBUF9JREVOVElGSUVSKEgKICAgICAgICAgb3RoZXIuaW52YWxpZGF0ZUl0ZXJhdG9y
cygpOwogCiAgICAgICAgIHN0ZDo6c3dhcChtX3RhYmxlLCBvdGhlci5tX3RhYmxlKTsKLSAgICAg
ICAgc3RkOjpzd2FwKG1fdGFibGVTaXplLCBvdGhlci5tX3RhYmxlU2l6ZSk7Ci0gICAgICAgIHN0
ZDo6c3dhcChtX3RhYmxlU2l6ZU1hc2ssIG90aGVyLm1fdGFibGVTaXplTWFzayk7Ci0gICAgICAg
IHN0ZDo6c3dhcChtX2tleUNvdW50LCBvdGhlci5tX2tleUNvdW50KTsKLSAgICAgICAgc3RkOjpz
d2FwKG1fZGVsZXRlZENvdW50LCBvdGhlci5tX2RlbGV0ZWRDb3VudCk7CiAKICNpZiBEVU1QX0hB
U0hUQUJMRV9TVEFUU19QRVJfVEFCTEUKICAgICAgICAgbV9zdGF0cy5zd2FwKG90aGVyLm1fc3Rh
dHMpOwpAQCAtMTM5MSwxNyArMTM5Miw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9J
REVOVElGSUVSKEgKICAgICB7CiAgICAgICAgIG90aGVyLmludmFsaWRhdGVJdGVyYXRvcnMoKTsK
IAotICAgICAgICBtX3RhYmxlID0gb3RoZXIubV90YWJsZTsKLSAgICAgICAgbV90YWJsZVNpemUg
PSBvdGhlci5tX3RhYmxlU2l6ZTsKLSAgICAgICAgbV90YWJsZVNpemVNYXNrID0gb3RoZXIubV90
YWJsZVNpemVNYXNrOwotICAgICAgICBtX2tleUNvdW50ID0gb3RoZXIubV9rZXlDb3VudDsKLSAg
ICAgICAgbV9kZWxldGVkQ291bnQgPSBvdGhlci5tX2RlbGV0ZWRDb3VudDsKLQotICAgICAgICBv
dGhlci5tX3RhYmxlID0gbnVsbHB0cjsKLSAgICAgICAgb3RoZXIubV90YWJsZVNpemUgPSAwOwot
ICAgICAgICBvdGhlci5tX3RhYmxlU2l6ZU1hc2sgPSAwOwotICAgICAgICBvdGhlci5tX2tleUNv
dW50ID0gMDsKLSAgICAgICAgb3RoZXIubV9kZWxldGVkQ291bnQgPSAwOworICAgICAgICBtX3Rh
YmxlID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3RhYmxlLCBudWxscHRyKTsKIAogI2lmIERVTVBf
SEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQogICAgICAgICBtX3N0YXRzID0gV1RGTW92ZShvdGhl
ci5tX3N0YXRzKTsKQEAgLTE0MzUsNyArMTQyNiw4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKEgKIAogICAgICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CiAgICAgICAg
IHVuc2lnbmVkIGRlbGV0ZWRDb3VudCA9IDA7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7
IGogPCBtX3RhYmxlU2l6ZTsgKytqKSB7CisgICAgICAgIHVuc2lnbmVkIHRhYmxlU2l6ZSA9IHRo
aXMtPnRhYmxlU2l6ZSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdGFibGVT
aXplOyArK2opIHsKICAgICAgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSBtX3RhYmxlICsgajsK
ICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CkBAIC0xNDUzLDExICsxNDQ1LDExIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKEgKICAgICAgICAgICAgIFZhbHVlQ2hlY2s8S2V5Pjo6Y2hlY2tDb25z
aXN0ZW5jeShrZXkpOwogICAgICAgICB9CiAKLSAgICAgICAgQVNTRVJUKGNvdW50ID09IG1fa2V5
Q291bnQpOwotICAgICAgICBBU1NFUlQoZGVsZXRlZENvdW50ID09IG1fZGVsZXRlZENvdW50KTsK
LSAgICAgICAgQVNTRVJUKG1fdGFibGVTaXplID49IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6
ZSk7Ci0gICAgICAgIEFTU0VSVChtX3RhYmxlU2l6ZU1hc2spOwotICAgICAgICBBU1NFUlQobV90
YWJsZVNpemUgPT0gbV90YWJsZVNpemVNYXNrICsgMSk7CisgICAgICAgIEFTU0VSVChjb3VudCA9
PSBrZXlDb3VudCgpKTsKKyAgICAgICAgQVNTRVJUKGRlbGV0ZWRDb3VudCA9PSB0aGlzLT5kZWxl
dGVkQ291bnQoKSk7CisgICAgICAgIEFTU0VSVCh0aGlzLT50YWJsZVNpemUoKSA+PSBLZXlUcmFp
dHM6Om1pbmltdW1UYWJsZVNpemUpOworICAgICAgICBBU1NFUlQodGFibGVTaXplTWFzaygpKTsK
KyAgICAgICAgQVNTRVJUKHRoaXMtPnRhYmxlU2l6ZSgpID09IHRhYmxlU2l6ZU1hc2soKSArIDEp
OwogICAgIH0KIAogI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECkluZGV4OiBUb29scy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTU1ODApCisrKyBU
b29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAyMC0wMi0w
MyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAg
IFJlZHVjZSBzaXplIG9mIEhhc2hNYXAgYW5kIEhhc2hTZXQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzEzOAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFz
aE1hcC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoU2V0LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OlRFU1QpOgorCiAyMDIwLTAyLTAzICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNv
bT4KIAogICAgICAgICBbZXdzXSBTZXQgY3VzdG9tIGJ1aWxkIHN1bW1hcnkgZm9yIHdlYmtpdHB5
IHRlc3RzCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoTWFwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoTWFwLmNwcAko
cmV2aXNpb24gMjU1MTEzKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaE1h
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4LDcgQEAgVEVTVChXVEZfSGFzaE1hcCwg
RG91YmxlSGFzaENvbGxpc2lvbnMpCiAgICAgY29uc3QgZG91YmxlIG5lZ2F0aXZlWmVyb0tleSA9
IC16ZXJvS2V5OwogCiAgICAgRG91YmxlSGFzaE1hcCBtYXA7CisgICAgc3RhdGljX2Fzc2VydChz
aXplb2YobWFwKSA9PSBzaXplb2Yodm9pZCopKTsKIAogICAgIG1hcC5hZGQoY2xvYmJlcktleSwg
MSk7CiAgICAgbWFwLmFkZCh6ZXJvS2V5LCAyKTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0hhc2hTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0hhc2hTZXQuY3BwCShyZXZpc2lvbiAyNTUxMTMpCisrKyBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9IYXNoU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDYgKzE3
MCw3IEBAIFRFU1QoV1RGX0hhc2hTZXQsIFVuaXF1ZVB0cktleV9SZW1vdmVVc2kKICAgICBDb25z
dHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpUZXN0aW5nU2NvcGUgc2NvcGU7CiAKICAgICBIYXNo
U2V0PHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPj4gc2V0Owor
ICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHNldCkgPT0gc2l6ZW9mKHZvaWQqKSk7CiAKICAgICBh
dXRvIHVuaXF1ZVB0ciA9IG1ha2VVbmlxdWU8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4o
KTsKICAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyKiBwdHIgPSB1bmlxdWVQdHIuZ2V0
KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389560</attachid>
            <date>2020-02-03 13:43:52 -0800</date>
            <delta_ts>2020-02-03 14:01:47 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>24442</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNTU0ODIpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDIwLTAyLTAzICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVkdWNlIHNpemUgb2YgSGFzaE1h
cCBhbmQgSGFzaFNldAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjA3MTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyByZWR1Y2VzIHNpemVvZihIYXNoTWFwKSBhbmQgc2l6ZW9mKEhhc2hTZXQpIGZy
b20gMjQgdG8gOCBvbiA2NC1iaXQgc3lzdGVtcy4KKyAgICAgICAgSSBtZWFzdXJlZCB0aGF0IHRo
ZSBvdmVyd2hlbG1pbmcgbWFqb3JpdHkgb2YgSGFzaE1hcHMgYW5kIEhhc2hTZXRzIG5ldmVyIHNl
ZSBtb3JlIHRoYW4gMCBlbGVtZW50cywKKyAgICAgICAgc28gSSBtb3ZlZCB0aGUgdGFibGUgbWV0
YWRhdGEgKHRhYmxlU2l6ZSwgdGFibGVTaXplTWFzaywga2V5Q291bnQsIGRlbGV0ZWRDb3VudCkg
dG8gaW5zaWRlIHRoZQorICAgICAgICBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5LiAgVGhp
cyBtYWtlcyBhbm90aGVyIGJyYW5jaCBpbiBzaXplKCkgZm9yIG5vbi1lbXB0eSB0YWJsZXMKKyAg
ICAgICAgYW5kIGFuIGFkZGl0aW9uYWwgcmVhZCBhbmQgd3JpdGUgd2hlbiByZWhhc2hpbmcgaW4g
ZXhjaGFuZ2UgZm9yIGZld2VyIHdyaXRlcyBpbiB0aGUgY29uc3RydWN0b3IKKyAgICAgICAgYW5k
IGluY3JlYXNlZCBjYWNoZSBsb2NhbGl0eSBvZiBldmVyeXRoaW5nIHRoYXQgdXNlcyBIYXNoTWFw
IGFuZCBIYXNoU2V0LCB3aGljaCBpcyBiYXNpY2FsbHkgZXZlcnl0aGluZy4KKworICAgICAgICAq
IHd0Zi9IYXNoVGFibGUuaDoKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjp+SGFzaFRhYmxlKToK
KyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjplbmQpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6
OmVuZCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6cmFuZG9tKToKKyAgICAgICAg
KFdURjo6SGFzaFRhYmxlOjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpj
YXBhY2l0eSBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6aXNFbXB0eSBjb25zdCk6
CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSk6CisgICAg
ICAgIChXVEY6Okhhc2hUYWJsZTo6c2hvdWxkRXhwYW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6
SGFzaFRhYmxlOjptdXN0UmVoYXNoSW5QbGFjZSBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hU
YWJsZTo6c2hvdWxkU2hyaW5rIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpzaHJp
bmspOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6Om1ha2VJdGVyYXRvcik6CisgICAgICAgIChX
VEY6Okhhc2hUYWJsZTo6bWFrZUNvbnN0SXRlcmF0b3IgY29uc3QpOgorICAgICAgICAoV1RGOjpI
YXNoVGFibGU6Om1ha2VLbm93bkdvb2RJdGVyYXRvcik6CisgICAgICAgIChXVEY6Okhhc2hUYWJs
ZTo6bWFrZUtub3duR29vZENvbnN0SXRlcmF0b3IgY29uc3QpOgorICAgICAgICAoV1RGOjpIYXNo
VGFibGU6OnRhYmxlU2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6c2V0VGFi
bGVTaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjp0YWJsZVNpemVNYXNrIGNv
bnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpzZXRUYWJsZVNpemVNYXNrKToKKyAgICAg
ICAgKFdURjo6SGFzaFRhYmxlOjprZXlDb3VudCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hU
YWJsZTo6c2V0S2V5Q291bnQgY29uc3QpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmRlbGV0
ZWRDb3VudCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6c2V0RGVsZXRlZENvdW50
IGNvbnN0KToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6SGFzaFRhYmxlKToKKyAgICAgICAg
KFdURjo6S2V5VHJhaXRzPjo6aW5saW5lTG9va3VwKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRz
Pjo6bG9va3VwRm9yV3JpdGluZyk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmZ1bGxMb29r
dXBGb3JXcml0aW5nKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6YWRkVW5pcXVlRm9ySW5p
dGlhbGl6YXRpb24pOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjphZGQpOgorICAgICAgICAo
V1RGOjpLZXlUcmFpdHM+OjphZGRQYXNzaW5nSGFzaENvZGUpOgorICAgICAgICAoV1RGOjpLZXlU
cmFpdHM+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpyZW1vdmVJZik6Cisg
ICAgICAgIChXVEY6OktleVRyYWl0cz46OmFsbG9jYXRlVGFibGUpOgorICAgICAgICAoV1RGOjpL
ZXlUcmFpdHM+OjpkZWFsbG9jYXRlVGFibGUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+Ojpl
eHBhbmQpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpzaHJpbmtUb0Jlc3RTaXplKToKKyAg
ICAgICAgKFdURjo6S2V5VHJhaXRzPjo6ZGVsZXRlUmVsZWFzZWRXZWFrQnVja2V0cyk6CisgICAg
ICAgIChXVEY6OktleVRyYWl0cz46OnJlaGFzaCk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46
OmNsZWFyKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6c3dhcCk6CisgICAgICAgIChXVEY6
OktleVRyYWl0cz46OmNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUgY29uc3QpOgorCiAy
MDIwLTAxLTMwICBDb25yYWQgU2h1bHR6ICA8Y29ucmFkX3NodWx0ekBhcHBsZS5jb20+CiAKICAg
ICAgICAgYEZBTExUSFJPVUdIYCBtYWNybyBpc24ndCBwcm9wZXJseSBkZWZpbmVkIHdoZW4gYnVp
bGRpbmcgT2JqZWN0aXZlLUMgZmlsZXMgdXNpbmcgQ2xhbmcKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0hhc2hUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCShy
ZXZpc2lvbiAyNTU0ODIpCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzY2LDcgKzM2Niw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIGludmFsaWRh
dGVJdGVyYXRvcnMoKTsgCiAgICAgICAgICAgICBpZiAobV90YWJsZSkKLSAgICAgICAgICAgICAg
ICBkZWFsbG9jYXRlVGFibGUobV90YWJsZSwgbV90YWJsZVNpemUpOworICAgICAgICAgICAgICAg
IGRlYWxsb2NhdGVUYWJsZShtX3RhYmxlKTsKICNpZiBDSEVDS19IQVNIVEFCTEVfVVNFX0FGVEVS
X0RFU1RSVUNUSU9OCiAgICAgICAgICAgICBtX3RhYmxlID0gKFZhbHVlVHlwZSopKHVpbnRwdHJf
dCkweGJiYWRiZWVmOwogI2VuZGlmCkBAIC0zODMsOSArMzgzLDkgQEAKICAgICAgICAgLy8gVGhp
cyBpcyBtb3JlIGVmZmljaWVudCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdG8gc2tpcCBhbGwgdGhl
IGVtcHR5IGFuZCBkZWxldGVkCiAgICAgICAgIC8vIGJ1Y2tldHMsIGFuZCBpdGVyYXRpbmcgYW4g
ZW1wdHkgdGFibGUgaXMgYSBjb21tb24gY2FzZSB0aGF0J3Mgd29ydGggb3B0aW1pemluZy4KICAg
ICAgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBpc0VtcHR5KCkgPyBlbmQoKSA6IG1ha2VJ
dGVyYXRvcihtX3RhYmxlKTsgfQotICAgICAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtYWtl
S25vd25Hb29kSXRlcmF0b3IobV90YWJsZSArIG1fdGFibGVTaXplKTsgfQorICAgICAgICBpdGVy
YXRvciBlbmQoKSB7IHJldHVybiBtYWtlS25vd25Hb29kSXRlcmF0b3IobV90YWJsZSArIHRhYmxl
U2l6ZSgpKTsgfQogICAgICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IGlzRW1wdHkoKSA/IGVuZCgpIDogbWFrZUNvbnN0SXRlcmF0b3IobV90YWJsZSk7IH0KLSAgICAg
ICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbWFrZUtub3duR29vZENvbnN0
SXRlcmF0b3IobV90YWJsZSArIG1fdGFibGVTaXplKTsgfQorICAgICAgICBjb25zdF9pdGVyYXRv
ciBlbmQoKSBjb25zdCB7IHJldHVybiBtYWtlS25vd25Hb29kQ29uc3RJdGVyYXRvcihtX3RhYmxl
ICsgdGFibGVTaXplKCkpOyB9CiAKICAgICAgICAgaXRlcmF0b3IgcmFuZG9tKCkKICAgICAgICAg
ewpAQCAtMzkzLDcgKzM5Myw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIGVuZCgpOwogCiAg
ICAgICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgICAgIGF1dG8mIGJ1Y2tldCA9IG1f
dGFibGVbd2Vha1JhbmRvbVVpbnQzMigpICYgbV90YWJsZVNpemVNYXNrXTsKKyAgICAgICAgICAg
ICAgICBhdXRvJiBidWNrZXQgPSBtX3RhYmxlW3dlYWtSYW5kb21VaW50MzIoKSAmIHRhYmxlU2l6
ZU1hc2soKV07CiAgICAgICAgICAgICAgICAgaWYgKCFpc0VtcHR5T3JEZWxldGVkQnVja2V0KGJ1
Y2tldCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlS25vd25Hb29kSXRlcmF0b3Io
JmJ1Y2tldCk7CiAgICAgICAgICAgICB9OwpAQCAtNDAxLDIyICs0MDEsMjMgQEAKIAogICAgICAg
ICBjb25zdF9pdGVyYXRvciByYW5kb20oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25z
dF9pdGVyYXRvcj4oY29uc3RfY2FzdDxIYXNoVGFibGUqPih0aGlzKS0+cmFuZG9tKCkpOyB9CiAK
LSAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5Q291bnQ7IH0KLSAg
ICAgICAgdW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3RhYmxlU2l6ZTsgfQot
ICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9rZXlDb3VudDsgfQorICAg
ICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4ga2V5Q291bnQoKTsgfQorICAgICAg
ICB1bnNpZ25lZCBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIHRhYmxlU2l6ZSgpOyB9CisgICAg
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFrZXlDb3VudCgpOyB9CiAKICAgICAg
ICAgdm9pZCByZXNlcnZlSW5pdGlhbENhcGFjaXR5KHVuc2lnbmVkIGtleUNvdW50KQogICAgICAg
ICB7CiAgICAgICAgICAgICBBU1NFUlQoIW1fdGFibGUpOwotICAgICAgICAgICAgQVNTRVJUKCFt
X3RhYmxlU2l6ZSk7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fZGVsZXRlZENvdW50KTsKKyAgICAg
ICAgICAgIEFTU0VSVCghdGFibGVTaXplKCkpOwogCiAgICAgICAgICAgICB1bnNpZ25lZCBtaW5p
bXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOwogICAgICAgICAgICAg
dW5zaWduZWQgbmV3VGFibGVTaXplID0gc3RkOjptYXgobWluaW11bVRhYmxlU2l6ZSwgY29tcHV0
ZUJlc3RUYWJsZVNpemUoa2V5Q291bnQpKTsKIAotICAgICAgICAgICAgbV90YWJsZVNpemUgPSBu
ZXdUYWJsZVNpemU7Ci0gICAgICAgICAgICBtX3RhYmxlU2l6ZU1hc2sgPSBuZXdUYWJsZVNpemUg
LSAxOwogICAgICAgICAgICAgbV90YWJsZSA9IGFsbG9jYXRlVGFibGUobmV3VGFibGVTaXplKTsK
KyAgICAgICAgICAgIHNldFRhYmxlU2l6ZShuZXdUYWJsZVNpemUpOworICAgICAgICAgICAgc2V0
VGFibGVTaXplTWFzayhuZXdUYWJsZVNpemUgLSAxKTsKKyAgICAgICAgICAgIHNldERlbGV0ZWRD
b3VudCgwKTsKKyAgICAgICAgICAgIHNldEtleUNvdW50KDApOwogICAgICAgICB9CiAKICAgICAg
ICAgQWRkUmVzdWx0IGFkZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSB7IHJldHVybiBhZGQ8SWRl
bnRpdHlUcmFuc2xhdG9yVHlwZT4oRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSwgdmFsdWUpOyB9
CkBAIC00NjgsNyArNDY5LDcgQEAKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBWYWx1
ZVR5cGUqIGFsbG9jYXRlVGFibGUodW5zaWduZWQgc2l6ZSk7Ci0gICAgICAgIHN0YXRpYyB2b2lk
IGRlYWxsb2NhdGVUYWJsZShWYWx1ZVR5cGUqIHRhYmxlLCB1bnNpZ25lZCBzaXplKTsKKyAgICAg
ICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZVRhYmxlKFZhbHVlVHlwZSogdGFibGUpOwogCiAgICAg
ICAgIHR5cGVkZWYgc3RkOjpwYWlyPFZhbHVlVHlwZSosIGJvb2w+IExvb2t1cFR5cGU7CiAgICAg
ICAgIHR5cGVkZWYgc3RkOjpwYWlyPExvb2t1cFR5cGUsIHVuc2lnbmVkPiBGdWxsTG9va3VwVHlw
ZTsKQEAgLTQ4NiwxMSArNDg3LDExIEBACiAgICAgICAgIHZvaWQgcmVtb3ZlKFZhbHVlVHlwZSop
OwogCiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY29tcHV0ZUJlc3RUYWJsZVNp
emUodW5zaWduZWQga2V5Q291bnQpOwotICAgICAgICBib29sIHNob3VsZEV4cGFuZCgpIGNvbnN0
IHsgcmV0dXJuIChtX2tleUNvdW50ICsgbV9kZWxldGVkQ291bnQpICogbV9tYXhMb2FkID49IG1f
dGFibGVTaXplOyB9Ci0gICAgICAgIGJvb2wgbXVzdFJlaGFzaEluUGxhY2UoKSBjb25zdCB7IHJl
dHVybiBtX2tleUNvdW50ICogbV9taW5Mb2FkIDwgbV90YWJsZVNpemUgKiAyOyB9Ci0gICAgICAg
IGJvb2wgc2hvdWxkU2hyaW5rKCkgY29uc3QgeyByZXR1cm4gbV9rZXlDb3VudCAqIG1fbWluTG9h
ZCA8IG1fdGFibGVTaXplICYmIG1fdGFibGVTaXplID4gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVT
aXplOyB9CisgICAgICAgIGJvb2wgc2hvdWxkRXhwYW5kKCkgY29uc3QgeyByZXR1cm4gKGtleUNv
dW50KCkgKyBkZWxldGVkQ291bnQoKSkgKiBtYXhMb2FkID49IHRhYmxlU2l6ZSgpOyB9CisgICAg
ICAgIGJvb2wgbXVzdFJlaGFzaEluUGxhY2UoKSBjb25zdCB7IHJldHVybiBrZXlDb3VudCgpICog
bWluTG9hZCA8IHRhYmxlU2l6ZSgpICogMjsgfQorICAgICAgICBib29sIHNob3VsZFNocmluaygp
IGNvbnN0IHsgcmV0dXJuIGtleUNvdW50KCkgKiBtaW5Mb2FkIDwgdGFibGVTaXplKCkgJiYgdGFi
bGVTaXplKCkgPiBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7IH0KICAgICAgICAgVmFsdWVU
eXBlKiBleHBhbmQoVmFsdWVUeXBlKiBlbnRyeSA9IG51bGxwdHIpOwotICAgICAgICB2b2lkIHNo
cmluaygpIHsgcmVoYXNoKG1fdGFibGVTaXplIC8gMiwgbnVsbHB0cik7IH0KKyAgICAgICAgdm9p
ZCBzaHJpbmsoKSB7IHJlaGFzaCh0YWJsZVNpemUoKSAvIDIsIG51bGxwdHIpOyB9CiAgICAgICAg
IHZvaWQgc2hyaW5rVG9CZXN0U2l6ZSgpOwogICAgIAogICAgICAgICB2b2lkIGRlbGV0ZVJlbGVh
c2VkV2Vha0J1Y2tldHMoKTsKQEAgLTUwNCwxMCArNTA1LDEwIEBACiAgICAgICAgIEZ1bGxMb29r
dXBUeXBlIG1ha2VMb29rdXBSZXN1bHQoVmFsdWVUeXBlKiBwb3NpdGlvbiwgYm9vbCBmb3VuZCwg
dW5zaWduZWQgaGFzaCkKICAgICAgICAgICAgIHsgcmV0dXJuIEZ1bGxMb29rdXBUeXBlKExvb2t1
cFR5cGUocG9zaXRpb24sIGZvdW5kKSwgaGFzaCk7IH0KIAotICAgICAgICBpdGVyYXRvciBtYWtl
SXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHBvcywgbV90
YWJsZSArIG1fdGFibGVTaXplKTsgfQotICAgICAgICBjb25zdF9pdGVyYXRvciBtYWtlQ29uc3RJ
dGVyYXRvcihWYWx1ZVR5cGUqIHBvcykgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhp
cywgcG9zLCBtX3RhYmxlICsgbV90YWJsZVNpemUpOyB9Ci0gICAgICAgIGl0ZXJhdG9yIG1ha2VL
bm93bkdvb2RJdGVyYXRvcihWYWx1ZVR5cGUqIHBvcykgeyByZXR1cm4gaXRlcmF0b3IodGhpcywg
cG9zLCBtX3RhYmxlICsgbV90YWJsZVNpemUsIEhhc2hJdGVtS25vd25Hb29kKTsgfQotICAgICAg
ICBjb25zdF9pdGVyYXRvciBtYWtlS25vd25Hb29kQ29uc3RJdGVyYXRvcihWYWx1ZVR5cGUqIHBv
cykgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcywgcG9zLCBtX3RhYmxlICsgbV90
YWJsZVNpemUsIEhhc2hJdGVtS25vd25Hb29kKTsgfQorICAgICAgICBpdGVyYXRvciBtYWtlSXRl
cmF0b3IoVmFsdWVUeXBlKiBwb3MpIHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHBvcywgbV90YWJs
ZSArIHRhYmxlU2l6ZSgpKTsgfQorICAgICAgICBjb25zdF9pdGVyYXRvciBtYWtlQ29uc3RJdGVy
YXRvcihWYWx1ZVR5cGUqIHBvcykgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcywg
cG9zLCBtX3RhYmxlICsgdGFibGVTaXplKCkpOyB9CisgICAgICAgIGl0ZXJhdG9yIG1ha2VLbm93
bkdvb2RJdGVyYXRvcihWYWx1ZVR5cGUqIHBvcykgeyByZXR1cm4gaXRlcmF0b3IodGhpcywgcG9z
LCBtX3RhYmxlICsgdGFibGVTaXplKCksIEhhc2hJdGVtS25vd25Hb29kKTsgfQorICAgICAgICBj
b25zdF9pdGVyYXRvciBtYWtlS25vd25Hb29kQ29uc3RJdGVyYXRvcihWYWx1ZVR5cGUqIHBvcykg
Y29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcywgcG9zLCBtX3RhYmxlICsgdGFibGVT
aXplKCksIEhhc2hJdGVtS25vd25Hb29kKTsgfQogCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICAg
ICAgdm9pZCBjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCkgY29uc3Q7CkBAIC01MjEs
MTUgKzUyMiwyNiBAQAogICAgICAgICBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKCkg
eyB9CiAjZW5kaWYKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1fbWF4TG9h
ZCA9IDI7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbV9taW5Mb2FkID0gNjsK
KyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkID0gMjsKKyAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gNjsKIAotICAgICAgICBWYWx1ZVR5
cGUqIG1fdGFibGU7Ci0gICAgICAgIHVuc2lnbmVkIG1fdGFibGVTaXplOwotICAgICAgICB1bnNp
Z25lZCBtX3RhYmxlU2l6ZU1hc2s7Ci0gICAgICAgIHVuc2lnbmVkIG1fa2V5Q291bnQ7Ci0gICAg
ICAgIHVuc2lnbmVkIG1fZGVsZXRlZENvdW50OworICAgICAgICBzdGF0aWMgY29uc3RleHByIGlu
dCB0YWJsZVNpemVPZmZzZXQgPSAtMTsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgdGFi
bGVTaXplTWFza09mZnNldCA9IC0yOworICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBrZXlD
b3VudE9mZnNldCA9IC0zOworICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBkZWxldGVkQ291
bnRPZmZzZXQgPSAtNDsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtZXRhZGF0
YVNpemUgPSA0ICogc2l6ZW9mKHVuc2lnbmVkKTsKIAorICAgICAgICB1bnNpZ25lZCB0YWJsZVNp
emUoKSBjb25zdCB7IHJldHVybiBtX3RhYmxlID8gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+
KG1fdGFibGUpW3RhYmxlU2l6ZU9mZnNldF0gOiAwOyB9CisgICAgICAgIHZvaWQgc2V0VGFibGVT
aXplKHVuc2lnbmVkIHNpemUpIGNvbnN0IHsgQVNTRVJUKG1fdGFibGUpOyByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkKj4obV90YWJsZSlbdGFibGVTaXplT2Zmc2V0XSA9IHNpemU7IH0KKyAgICAg
ICAgdW5zaWduZWQgdGFibGVTaXplTWFzaygpIGNvbnN0IHsgQVNTRVJUKG1fdGFibGUpOyByZXR1
cm4gbV90YWJsZSA/IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihtX3RhYmxlKVt0YWJsZVNp
emVNYXNrT2Zmc2V0XSA6IDA7IH0KKyAgICAgICAgdm9pZCBzZXRUYWJsZVNpemVNYXNrKHVuc2ln
bmVkIG1hc2spIHsgQVNTRVJUKG1fdGFibGUpOyByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4o
bV90YWJsZSlbdGFibGVTaXplTWFza09mZnNldF0gPSBtYXNrOyB9CisgICAgICAgIHVuc2lnbmVk
IGtleUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV90YWJsZSA/IHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQqPihtX3RhYmxlKVtrZXlDb3VudE9mZnNldF0gOiAwOyB9CisgICAgICAgIHZvaWQgc2V0
S2V5Q291bnQodW5zaWduZWQgY291bnQpIGNvbnN0IHsgQVNTRVJUKG1fdGFibGUpOyByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkKj4obV90YWJsZSlba2V5Q291bnRPZmZzZXRdID0gY291bnQ7IH0K
KyAgICAgICAgdW5zaWduZWQgZGVsZXRlZENvdW50KCkgY29uc3QgeyBBU1NFUlQobV90YWJsZSk7
IHJldHVybiByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4obV90YWJsZSlbZGVsZXRlZENvdW50
T2Zmc2V0XTsgfQorICAgICAgICB2b2lkIHNldERlbGV0ZWRDb3VudCh1bnNpZ25lZCBjb3VudCkg
Y29uc3QgeyBBU1NFUlQobV90YWJsZSk7IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihtX3Rh
YmxlKVtkZWxldGVkQ291bnRPZmZzZXRdID0gY291bnQ7IH0KKworICAgICAgICBWYWx1ZVR5cGUq
IG1fdGFibGUgeyBudWxscHRyIH07CisKICNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCiAg
ICAgcHVibGljOgogICAgICAgICAvLyBBbGwgYWNjZXNzIHRvIG1faXRlcmF0b3JzIHNob3VsZCBi
ZSBndWFyZGVkIHdpdGggbV9tdXRleC4KQEAgLTU4NCwxMSArNTk2LDcgQEAKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+
CiAgICAgaW5saW5lIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6SGFzaFRhYmxlKCkKLSAgICAgICAgOiBtX3RhYmxlKDAp
Ci0gICAgICAgICwgbV90YWJsZVNpemUoMCkKLSAgICAgICAgLCBtX3RhYmxlU2l6ZU1hc2soMCkK
LSAgICAgICAgLCBtX2tleUNvdW50KDApCi0gICAgICAgICwgbV9kZWxldGVkQ291bnQoMCkKKyAg
ICAgICAgOiBtX3RhYmxlKG51bGxwdHIpCiAjaWYgQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUwog
ICAgICAgICAsIG1faXRlcmF0b3JzKDApCiAgICAgICAgICwgbV9tdXRleChtYWtlVW5pcXVlPExv
Y2s+KCkpCkBAIC02NDksMTQgKzY1NywxMyBAQAogICAgICAgICBjaGVja0tleTxIYXNoVHJhbnNs
YXRvcj4oa2V5KTsKIAogICAgICAgICB1bnNpZ25lZCBrID0gMDsKLSAgICAgICAgdW5zaWduZWQg
c2l6ZU1hc2sgPSBtX3RhYmxlU2l6ZU1hc2s7CiAgICAgICAgIFZhbHVlVHlwZSogdGFibGUgPSBt
X3RhYmxlOworICAgICAgICBpZiAoIXRhYmxlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOwogICAgICAgICB1
bnNpZ25lZCBoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsKICAgICAgICAgdW5zaWduZWQg
aSA9IGggJiBzaXplTWFzazsKIAotICAgICAgICBpZiAoIXRhYmxlKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0KICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwogICAgICAgICArK0hhc2hUYWJsZVN0
YXRzOjpudW1BY2Nlc3NlczsKICAgICAgICAgdW5zaWduZWQgcHJvYmVDb3VudCA9IDA7CkBAIC03
MDcsNyArNzE0LDcgQEAKIAogICAgICAgICB1bnNpZ25lZCBrID0gMDsKICAgICAgICAgVmFsdWVU
eXBlKiB0YWJsZSA9IG1fdGFibGU7Ci0gICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gbV90YWJs
ZVNpemVNYXNrOworICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsK
ICAgICAgICAgdW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7CiAgICAgICAg
IHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAKQEAgLTc2OCw3ICs3NzUsNyBAQAogCiAgICAg
ICAgIHVuc2lnbmVkIGsgPSAwOwogICAgICAgICBWYWx1ZVR5cGUqIHRhYmxlID0gbV90YWJsZTsK
LSAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSBtX3RhYmxlU2l6ZU1hc2s7CisgICAgICAgIHVu
c2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOwogICAgICAgICB1bnNpZ25lZCBoID0g
SGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsKICAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXpl
TWFzazsKIApAQCAtODM0LDcgKzg0MSw3IEBACiAKICAgICAgICAgdW5zaWduZWQgayA9IDA7CiAg
ICAgICAgIFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOwotICAgICAgICB1bnNpZ25lZCBzaXpl
TWFzayA9IG1fdGFibGVTaXplTWFzazsKKyAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJs
ZVNpemVNYXNrKCk7CiAgICAgICAgIHVuc2lnbmVkIGggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChr
ZXkpOwogICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwogCkBAIC05MTUsNyArOTIy
LDcgQEAKIAogICAgICAgICB1bnNpZ25lZCBrID0gMDsKICAgICAgICAgVmFsdWVUeXBlKiB0YWJs
ZSA9IG1fdGFibGU7Ci0gICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gbV90YWJsZVNpemVNYXNr
OworICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKICAgICAgICAg
dW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7CiAgICAgICAgIHVuc2lnbmVk
IGkgPSBoICYgc2l6ZU1hc2s7CiAKQEAgLTk2OSwxMSArOTc2LDExIEBACiAgICAgICAgIGlmIChk
ZWxldGVkRW50cnkpIHsKICAgICAgICAgICAgIGluaXRpYWxpemVCdWNrZXQoKmRlbGV0ZWRFbnRy
eSk7CiAgICAgICAgICAgICBlbnRyeSA9IGRlbGV0ZWRFbnRyeTsKLSAgICAgICAgICAgIC0tbV9k
ZWxldGVkQ291bnQ7IAorICAgICAgICAgICAgc2V0RGVsZXRlZENvdW50KGRlbGV0ZWRDb3VudCgp
IC0gMSk7CiAgICAgICAgIH0KIAogICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCpl
bnRyeSwgc3RkOjpmb3J3YXJkPFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpKTsK
LSAgICAgICAgKyttX2tleUNvdW50OworICAgICAgICBzZXRLZXlDb3VudChrZXlDb3VudCgpICsg
MSk7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRXhwYW5kKCkpCiAgICAgICAgICAgICBl
bnRyeSA9IGV4cGFuZChlbnRyeSk7CkBAIC0xMDA3LDExICsxMDE0LDExIEBACiAgICAgICAgIAog
ICAgICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRyeSkpIHsKICAgICAgICAgICAgIGluaXRp
YWxpemVCdWNrZXQoKmVudHJ5KTsKLSAgICAgICAgICAgIC0tbV9kZWxldGVkQ291bnQ7CisgICAg
ICAgICAgICBzZXREZWxldGVkQ291bnQoZGVsZXRlZENvdW50KCkgLSAxKTsKICAgICAgICAgfQog
CiAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndhcmQ8
VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSksIGgpOwotICAgICAgICArK21fa2V5
Q291bnQ7CisgICAgICAgIHNldEtleUNvdW50KGtleUNvdW50KCkgKyAxKTsKIAogICAgICAgICBp
ZiAoc2hvdWxkRXhwYW5kKCkpCiAgICAgICAgICAgICBlbnRyeSA9IGV4cGFuZChlbnRyeSk7CkBA
IC0xMTA1LDggKzExMTIsOCBAQAogI2VuZGlmCiAKICAgICAgICAgZGVsZXRlQnVja2V0KCpwb3Mp
OwotICAgICAgICArK21fZGVsZXRlZENvdW50OwotICAgICAgICAtLW1fa2V5Q291bnQ7CisgICAg
ICAgIHNldERlbGV0ZWRDb3VudChkZWxldGVkQ291bnQoKSArIDEpOworICAgICAgICBzZXRLZXlD
b3VudChrZXlDb3VudCgpIC0gMSk7CiAKICAgICAgICAgaWYgKHNob3VsZFNocmluaygpKQogICAg
ICAgICAgICAgc2hyaW5rKCk7CkBAIC0xMTU3LDcgKzExNjQsNyBAQAogICAgICAgICB1bnNpZ25l
ZCByZW1vdmVkQnVja2V0Q291bnQgPSAwOwogICAgICAgICBWYWx1ZVR5cGUqIHRhYmxlID0gbV90
YWJsZTsKIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3RhYmxlU2l6ZTsgaS0tOykgewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB0YWJsZVNpemUoKTsgaS0tOykgewogICAgICAgICAg
ICAgVmFsdWVUeXBlJiBidWNrZXQgPSB0YWJsZVtpXTsKICAgICAgICAgICAgIGlmIChpc0VtcHR5
T3JEZWxldGVkQnVja2V0KGJ1Y2tldCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0x
MTY4LDggKzExNzUsMTAgQEAKICAgICAgICAgICAgIGRlbGV0ZUJ1Y2tldChidWNrZXQpOwogICAg
ICAgICAgICAgKytyZW1vdmVkQnVja2V0Q291bnQ7CiAgICAgICAgIH0KLSAgICAgICAgbV9kZWxl
dGVkQ291bnQgKz0gcmVtb3ZlZEJ1Y2tldENvdW50OwotICAgICAgICBtX2tleUNvdW50IC09IHJl
bW92ZWRCdWNrZXRDb3VudDsKKyAgICAgICAgaWYgKHJlbW92ZWRCdWNrZXRDb3VudCkgeworICAg
ICAgICAgICAgc2V0RGVsZXRlZENvdW50KGRlbGV0ZWRDb3VudCgpICsgcmVtb3ZlZEJ1Y2tldENv
dW50KTsKKyAgICAgICAgICAgIHNldEtleUNvdW50KGtleUNvdW50KCkgLSByZW1vdmVkQnVja2V0
Q291bnQpOworICAgICAgICB9CiAKICAgICAgICAgaWYgKHNob3VsZFNocmluaygpKQogICAgICAg
ICAgICAgc2hyaW5rVG9CZXN0U2l6ZSgpOwpAQCAtMTE4NCw5ICsxMTkzLDkgQEAKICAgICAgICAg
Ly8gd291bGQgdXNlIGEgdGVtcGxhdGUgbWVtYmVyIGZ1bmN0aW9uIHdpdGggZXhwbGljaXQgc3Bl
Y2lhbGl6YXRpb25zIGhlcmUsIGJ1dAogICAgICAgICAvLyBnY2MgZG9lc24ndCBhcHBlYXIgdG8g
c3VwcG9ydCB0aGF0CiAgICAgICAgIGlmIChUcmFpdHM6OmVtcHR5VmFsdWVJc1plcm8pCi0gICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmFsdWVUeXBlKj4oSGFzaFRhYmxlTWFsbG9jOjp6
ZXJvZWRNYWxsb2Moc2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUpKSk7CisgICAgICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxWYWx1ZVR5cGUqPihzdGF0aWNfY2FzdDxjaGFyKj4oSGFzaFRh
YmxlTWFsbG9jOjp6ZXJvZWRNYWxsb2MobWV0YWRhdGFTaXplICsgc2l6ZSAqIHNpemVvZihWYWx1
ZVR5cGUpKSkgKyBtZXRhZGF0YVNpemUpOwogCi0gICAgICAgIFZhbHVlVHlwZSogcmVzdWx0ID0g
c3RhdGljX2Nhc3Q8VmFsdWVUeXBlKj4oSGFzaFRhYmxlTWFsbG9jOjptYWxsb2Moc2l6ZSAqIHNp
emVvZihWYWx1ZVR5cGUpKSk7CisgICAgICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxWYWx1ZVR5cGUqPihzdGF0aWNfY2FzdDxjaGFyKj4oSGFzaFRhYmxlTWFsbG9jOjpt
YWxsb2MobWV0YWRhdGFTaXplICsgc2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUpKSkgKyBtZXRhZGF0
YVNpemUpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQogICAg
ICAgICAgICAgaW5pdGlhbGl6ZUJ1Y2tldChyZXN1bHRbaV0pOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwpAQCAtMTE5MywxMyArMTIwMiwxNCBAQAogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9p
ZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cz46OmRlYWxsb2NhdGVUYWJsZShWYWx1ZVR5cGUqIHRhYmxlLCB1bnNpZ25lZCBz
aXplKQorICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpkZWFsbG9jYXRlVGFibGUoVmFsdWVUeXBlKiB0YWJs
ZSkKICAgICB7CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSByZWludGVycHJldF9jYXN0PHVuc2ln
bmVkKj4odGFibGUpW3RhYmxlU2l6ZU9mZnNldF07CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgICAgIGlmICghaXNEZWxldGVkQnVja2V0KHRh
YmxlW2ldKSkKICAgICAgICAgICAgICAgICB0YWJsZVtpXS5+VmFsdWVUeXBlKCk7CiAgICAgICAg
IH0KLSAgICAgICAgSGFzaFRhYmxlTWFsbG9jOjpmcmVlKHRhYmxlKTsKKyAgICAgICAgSGFzaFRh
YmxlTWFsbG9jOjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRhYmxlKSAtIG1ldGFkYXRh
U2l6ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KQEAgLTEyMDksMTIgKzEyMTksMTMgQEAKICAgICAg
ICAgICAgIGRlbGV0ZVJlbGVhc2VkV2Vha0J1Y2tldHMoKTsKIAogICAgICAgICB1bnNpZ25lZCBu
ZXdTaXplOwotICAgICAgICBpZiAobV90YWJsZVNpemUgPT0gMCkKKyAgICAgICAgdW5zaWduZWQg
b2xkU2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgICAgICBpZiAoIW9sZFNpemUpCiAgICAgICAgICAg
ICBuZXdTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOwogICAgICAgICBlbHNlIGlm
IChtdXN0UmVoYXNoSW5QbGFjZSgpKQotICAgICAgICAgICAgbmV3U2l6ZSA9IG1fdGFibGVTaXpl
OworICAgICAgICAgICAgbmV3U2l6ZSA9IG9sZFNpemU7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG5ld1NpemUgPSBtX3RhYmxlU2l6ZSAqIDI7CisgICAgICAgICAgICBuZXdTaXplID0gb2xk
U2l6ZSAqIDI7CiAKICAgICAgICAgcmV0dXJuIHJlaGFzaChuZXdTaXplLCBlbnRyeSk7CiAgICAg
fQpAQCAtMTIzOSwxOCArMTI1MCwxOSBAQAogICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpzaHJpbmtUb0Jl
c3RTaXplKCkKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIG1pbmltdW1UYWJsZVNpemUgPSBLZXlU
cmFpdHM6Om1pbmltdW1UYWJsZVNpemU7Ci0gICAgICAgIHJlaGFzaChzdGQ6Om1heChtaW5pbXVt
VGFibGVTaXplLCBjb21wdXRlQmVzdFRhYmxlU2l6ZShtX2tleUNvdW50KSksIG51bGxwdHIpOwor
ICAgICAgICByZWhhc2goc3RkOjptYXgobWluaW11bVRhYmxlU2l6ZSwgY29tcHV0ZUJlc3RUYWJs
ZVNpemUoa2V5Q291bnQoKSkpLCBudWxscHRyKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIHZv
aWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHM+OjpkZWxldGVSZWxlYXNlZFdlYWtCdWNrZXRzKCkKICAgICB7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RhYmxlU2l6ZTsgKytpKSB7CisgICAgICAgIHVu
c2lnbmVkIHRhYmxlU2l6ZSA9IHRoaXMtPnRhYmxlU2l6ZSgpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdGFibGVTaXplOyArK2kpIHsKICAgICAgICAgICAgIGF1dG8mIGVudHJ5
ID0gbV90YWJsZVtpXTsKICAgICAgICAgICAgIGlmIChpc1JlbGVhc2VkV2Vha0J1Y2tldChlbnRy
eSkpIHsKICAgICAgICAgICAgICAgICBkZWxldGVCdWNrZXQoZW50cnkpOwotICAgICAgICAgICAg
ICAgICsrbV9kZWxldGVkQ291bnQ7Ci0gICAgICAgICAgICAgICAgLS1tX2tleUNvdW50OworICAg
ICAgICAgICAgICAgIHNldERlbGV0ZWRDb3VudChkZWxldGVkQ291bnQoKSArIDEpOworICAgICAg
ICAgICAgICAgIHNldEtleUNvdW50KGtleUNvdW50KCkgLSAxKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KQEAgLTEyNjAsNyArMTI3Miw3IEBACiAgICAgewogICAgICAgICBpbnRl
cm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKTsKIAotICAgICAgICB1bnNpZ25l
ZCBvbGRUYWJsZVNpemUgPSBtX3RhYmxlU2l6ZTsKKyAgICAgICAgdW5zaWduZWQgb2xkVGFibGVT
aXplID0gdGFibGVTaXplKCk7CiAgICAgICAgIFZhbHVlVHlwZSogb2xkVGFibGUgPSBtX3RhYmxl
OwogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKQEAgLTEyNzMsOSArMTI4NSwxMiBAQAogICAg
ICAgICAgICAgKyttX3N0YXRzLT5udW1SZWhhc2hlczsKICNlbmRpZgogCi0gICAgICAgIG1fdGFi
bGVTaXplID0gbmV3VGFibGVTaXplOwotICAgICAgICBtX3RhYmxlU2l6ZU1hc2sgPSBuZXdUYWJs
ZVNpemUgLSAxOworICAgICAgICB1bnNpZ25lZCBvbGRLZXlDb3VudCA9IGtleUNvdW50KCk7CiAg
ICAgICAgIG1fdGFibGUgPSBhbGxvY2F0ZVRhYmxlKG5ld1RhYmxlU2l6ZSk7CisgICAgICAgIHNl
dFRhYmxlU2l6ZShuZXdUYWJsZVNpemUpOworICAgICAgICBzZXRUYWJsZVNpemVNYXNrKG5ld1Rh
YmxlU2l6ZSAtIDEpOworICAgICAgICBzZXREZWxldGVkQ291bnQoMCk7CisgICAgICAgIHNldEtl
eUNvdW50KG9sZEtleUNvdW50KTsKIAogICAgICAgICBWYWx1ZSogbmV3RW50cnkgPSBudWxscHRy
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IG9sZFRhYmxlU2l6ZTsgKytpKSB7
CkBAIC0xMjk0LDcgKzEzMDksNyBAQAogICAgICAgICAgICAgaWYgKGlzUmVsZWFzZWRXZWFrQnVj
a2V0KG9sZEVudHJ5KSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChzdGQ6OmFkZHJlc3NvZihv
bGRFbnRyeSkgIT0gZW50cnkpOwogICAgICAgICAgICAgICAgIG9sZEVudHJ5Ln5WYWx1ZVR5cGUo
KTsKLSAgICAgICAgICAgICAgICAtLW1fa2V5Q291bnQ7CisgICAgICAgICAgICAgICAgc2V0S2V5
Q291bnQoa2V5Q291bnQoKSAtIDEpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgfQogCkBAIC0xMzA2LDEwICsxMzIxLDkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogCi0gICAgICAgIG1fZGVsZXRlZENvdW50ID0gMDsKKyAgICAgICAgaWYgKG9sZFRhYmxlKQor
ICAgICAgICAgICAgSGFzaFRhYmxlTWFsbG9jOjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KG9sZFRhYmxlKSAtIG1ldGFkYXRhU2l6ZSk7CiAKLSAgICAgICAgSGFzaFRhYmxlTWFsbG9jOjpm
cmVlKG9sZFRhYmxlKTsKLQogICAgICAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgp
OwogICAgICAgICByZXR1cm4gbmV3RW50cnk7CiAgICAgfQpAQCAtMTMyMSwyMSArMTMzNSwxMyBA
QAogICAgICAgICBpZiAoIW1fdGFibGUpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAg
ZGVhbGxvY2F0ZVRhYmxlKG1fdGFibGUsIG1fdGFibGVTaXplKTsKLSAgICAgICAgbV90YWJsZSA9
IDA7Ci0gICAgICAgIG1fdGFibGVTaXplID0gMDsKLSAgICAgICAgbV90YWJsZVNpemVNYXNrID0g
MDsKLSAgICAgICAgbV9rZXlDb3VudCA9IDA7Ci0gICAgICAgIG1fZGVsZXRlZENvdW50ID0gMDsK
KyAgICAgICAgZGVhbGxvY2F0ZVRhYmxlKG1fdGFibGUpOworICAgICAgICBtX3RhYmxlID0gbnVs
bHB0cjsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6SGFzaFRhYmxlKGNvbnN0
IEhhc2hUYWJsZSYgb3RoZXIpCiAgICAgICAgIDogbV90YWJsZShudWxscHRyKQotICAgICAgICAs
IG1fdGFibGVTaXplKDApCi0gICAgICAgICwgbV90YWJsZVNpemVNYXNrKDApCi0gICAgICAgICwg
bV9rZXlDb3VudCgwKQotICAgICAgICAsIG1fZGVsZXRlZENvdW50KDApCiAjaWYgQ0hFQ0tfSEFT
SFRBQkxFX0lURVJBVE9SUwogICAgICAgICAsIG1faXRlcmF0b3JzKG51bGxwdHIpCiAgICAgICAg
ICwgbV9tdXRleChtYWtlVW5pcXVlPExvY2s+KCkpCkBAIC0xMzQ4LDEwICsxMzU0LDEyIEBACiAg
ICAgICAgIGlmICghb3RoZXJLZXlDb3VudCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAg
ICBtX3RhYmxlU2l6ZSA9IGNvbXB1dGVCZXN0VGFibGVTaXplKG90aGVyS2V5Q291bnQpOwotICAg
ICAgICBtX3RhYmxlU2l6ZU1hc2sgPSBtX3RhYmxlU2l6ZSAtIDE7Ci0gICAgICAgIG1fa2V5Q291
bnQgPSBvdGhlcktleUNvdW50OwotICAgICAgICBtX3RhYmxlID0gYWxsb2NhdGVUYWJsZShtX3Rh
YmxlU2l6ZSk7CisgICAgICAgIHVuc2lnbmVkIGJlc3RUYWJsZVNpemUgPSBjb21wdXRlQmVzdFRh
YmxlU2l6ZShvdGhlcktleUNvdW50KTsKKyAgICAgICAgbV90YWJsZSA9IGFsbG9jYXRlVGFibGUo
YmVzdFRhYmxlU2l6ZSk7CisgICAgICAgIHNldFRhYmxlU2l6ZShiZXN0VGFibGVTaXplKTsKKyAg
ICAgICAgc2V0VGFibGVTaXplTWFzayhiZXN0VGFibGVTaXplIC0gMSk7CisgICAgICAgIHNldEtl
eUNvdW50KG90aGVyS2V5Q291bnQpOworICAgICAgICBzZXREZWxldGVkQ291bnQoMCk7CiAKICAg
ICAgICAgZm9yIChjb25zdCBhdXRvJiBvdGhlclZhbHVlIDogb3RoZXIpCiAgICAgICAgICAgICBh
ZGRVbmlxdWVGb3JJbml0aWFsaXphdGlvbjxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihFeHRyYWN0
b3I6OmV4dHJhY3Qob3RoZXJWYWx1ZSksIG90aGVyVmFsdWUpOwpAQCAtMTM2NCwxMCArMTM3Miw2
IEBACiAgICAgICAgIG90aGVyLmludmFsaWRhdGVJdGVyYXRvcnMoKTsKIAogICAgICAgICBzdGQ6
OnN3YXAobV90YWJsZSwgb3RoZXIubV90YWJsZSk7Ci0gICAgICAgIHN0ZDo6c3dhcChtX3RhYmxl
U2l6ZSwgb3RoZXIubV90YWJsZVNpemUpOwotICAgICAgICBzdGQ6OnN3YXAobV90YWJsZVNpemVN
YXNrLCBvdGhlci5tX3RhYmxlU2l6ZU1hc2spOwotICAgICAgICBzdGQ6OnN3YXAobV9rZXlDb3Vu
dCwgb3RoZXIubV9rZXlDb3VudCk7Ci0gICAgICAgIHN0ZDo6c3dhcChtX2RlbGV0ZWRDb3VudCwg
b3RoZXIubV9kZWxldGVkQ291bnQpOwogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RB
QkxFCiAgICAgICAgIG1fc3RhdHMuc3dhcChvdGhlci5tX3N0YXRzKTsKQEAgLTEzOTEsMTggKzEz
OTUsOCBAQAogICAgIHsKICAgICAgICAgb3RoZXIuaW52YWxpZGF0ZUl0ZXJhdG9ycygpOwogCi0g
ICAgICAgIG1fdGFibGUgPSBvdGhlci5tX3RhYmxlOwotICAgICAgICBtX3RhYmxlU2l6ZSA9IG90
aGVyLm1fdGFibGVTaXplOwotICAgICAgICBtX3RhYmxlU2l6ZU1hc2sgPSBvdGhlci5tX3RhYmxl
U2l6ZU1hc2s7Ci0gICAgICAgIG1fa2V5Q291bnQgPSBvdGhlci5tX2tleUNvdW50OwotICAgICAg
ICBtX2RlbGV0ZWRDb3VudCA9IG90aGVyLm1fZGVsZXRlZENvdW50OworICAgICAgICBtX3RhYmxl
ID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3RhYmxlLCBudWxscHRyKTsKIAotICAgICAgICBvdGhl
ci5tX3RhYmxlID0gbnVsbHB0cjsKLSAgICAgICAgb3RoZXIubV90YWJsZVNpemUgPSAwOwotICAg
ICAgICBvdGhlci5tX3RhYmxlU2l6ZU1hc2sgPSAwOwotICAgICAgICBvdGhlci5tX2tleUNvdW50
ID0gMDsKLSAgICAgICAgb3RoZXIubV9kZWxldGVkQ291bnQgPSAwOwotCiAjaWYgRFVNUF9IQVNI
VEFCTEVfU1RBVFNfUEVSX1RBQkxFCiAgICAgICAgIG1fc3RhdHMgPSBXVEZNb3ZlKG90aGVyLm1f
c3RhdHMpOwogICAgICAgICBvdGhlci5tX3N0YXRzID0gbnVsbHB0cjsKQEAgLTE0MzUsNyArMTQy
OSw4IEBACiAKICAgICAgICAgdW5zaWduZWQgY291bnQgPSAwOwogICAgICAgICB1bnNpZ25lZCBk
ZWxldGVkQ291bnQgPSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV90YWJs
ZVNpemU7ICsraikgeworICAgICAgICB1bnNpZ25lZCB0YWJsZVNpemUgPSB0aGlzLT50YWJsZVNp
emUoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHRhYmxlU2l6ZTsgKytqKSB7
CiAgICAgICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbV90YWJsZSArIGo7CiAgICAgICAgICAg
ICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpA
QCAtMTQ1MywxMSArMTQ0OCwxMSBAQAogICAgICAgICAgICAgVmFsdWVDaGVjazxLZXk+OjpjaGVj
a0NvbnNpc3RlbmN5KGtleSk7CiAgICAgICAgIH0KIAotICAgICAgICBBU1NFUlQoY291bnQgPT0g
bV9rZXlDb3VudCk7Ci0gICAgICAgIEFTU0VSVChkZWxldGVkQ291bnQgPT0gbV9kZWxldGVkQ291
bnQpOwotICAgICAgICBBU1NFUlQobV90YWJsZVNpemUgPj0gS2V5VHJhaXRzOjptaW5pbXVtVGFi
bGVTaXplKTsKLSAgICAgICAgQVNTRVJUKG1fdGFibGVTaXplTWFzayk7Ci0gICAgICAgIEFTU0VS
VChtX3RhYmxlU2l6ZSA9PSBtX3RhYmxlU2l6ZU1hc2sgKyAxKTsKKyAgICAgICAgQVNTRVJUKGNv
dW50ID09IGtleUNvdW50KCkpOworICAgICAgICBBU1NFUlQoZGVsZXRlZENvdW50ID09IHRoaXMt
PmRlbGV0ZWRDb3VudCgpKTsKKyAgICAgICAgQVNTRVJUKHRoaXMtPnRhYmxlU2l6ZSgpID49IEtl
eVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZSk7CisgICAgICAgIEFTU0VSVCh0YWJsZVNpemVNYXNr
KCkpOworICAgICAgICBBU1NFUlQodGhpcy0+dGFibGVTaXplKCkgPT0gdGFibGVTaXplTWFzaygp
ICsgMSk7CiAgICAgfQogCiAjZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKSW5kZXg6IFRvb2xzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NTUyMCkK
KysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDIw
LTAyLTAzICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAg
ICAgICAgUmVkdWNlIHNpemUgb2YgSGFzaE1hcCBhbmQgSGFzaFNldAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3MTM4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9IYXNoTWFwLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6VEVTVCk6CisKIDIwMjAtMDEtMzEgIEFha2FzaCBKYWluICA8YWFrYXNoX2phaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFtld3NdIERpc3BsYXkgZmxha3kgdGVzdCBuYW1lcyBpbiBidWls
ZCBzdW1tYXJ5IHdoZW4gUmVSdW5XZWJLaXRUZXN0cyBwYXNzZXMKSW5kZXg6IFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hNYXAuY3BwCShyZXZpc2lvbiAyNTU0ODIpCisrKyBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODgsNiArODgsOSBAQAogICAgIGNvbnN0IGRvdWJsZSBuZWdhdGl2ZVplcm9LZXkgPSAtemVyb0tl
eTsKIAogICAgIERvdWJsZUhhc2hNYXAgbWFwOworI2lmICFDSEVDS19IQVNIVEFCTEVfSVRFUkFU
T1JTICYmIURVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQorICAgIHN0YXRpY19hc3NlcnQo
c2l6ZW9mKG1hcCkgPT0gc2l6ZW9mKHZvaWQqKSk7CisjZW5kaWYKIAogICAgIG1hcC5hZGQoY2xv
YmJlcktleSwgMSk7CiAgICAgbWFwLmFkZCh6ZXJvS2V5LCAyKTsKSW5kZXg6IFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwCShyZXZpc2lvbiAyNTU0ODIpCisrKyBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTcwLDYgKzE3MCw5IEBACiAgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGlu
Z1Njb3BlIHNjb3BlOwogCiAgICAgSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JE
ZXN0cnVjdG9yQ291bnRlcj4+IHNldDsKKyNpZiAhQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUyAm
JiFEVU1QX0hBU0hUQUJMRV9TVEFUU19QRVJfVEFCTEUKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVv
ZihzZXQpID09IHNpemVvZih2b2lkKikpOworI2VuZGlmCiAKICAgICBhdXRvIHVuaXF1ZVB0ciA9
IG1ha2VVbmlxdWU8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4oKTsKICAgICBDb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyKiBwdHIgPSB1bmlxdWVQdHIuZ2V0KCk7Cg==
</data>
<flag name="review"
          id="405214"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
      

    </bug>

</bugzilla>