<?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>156486</bug_id>
          
          <creation_ts>2016-04-11 18:53:30 -0700</creation_ts>
          <short_desc>[JSC] B3 can use undefined bits or not defined required bits when spilling</short_desc>
          <delta_ts>2016-04-11 23:26:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1182913</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-04-11 18:53:30 -0700</bug_when>
    <thetext>[JSC] B3 can use undefined bits or not defined required bits when spilling</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182916</commentid>
    <comment_count>1</comment_count>
      <attachid>276197</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-04-11 19:02:48 -0700</bug_when>
    <thetext>Created attachment 276197
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182917</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-11 19:04:22 -0700</bug_when>
    <thetext>Attachment 276197 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:11430:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:11440:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:11440:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:11481:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:11494:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:11494:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:11495:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:11498:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:11498:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:1465:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 10 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182918</commentid>
    <comment_count>3</comment_count>
      <attachid>276197</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-11 19:05:26 -0700</bug_when>
    <thetext>Comment on attachment 276197
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:17
&gt; +            Op64 %tmp1, %tmp2, %tmp3

I believe that the width analysis should report that we could read 64 bits from %tmp1, so then %tmp1&apos;s spill slot would be 64-bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182923</commentid>
    <comment_count>4</comment_count>
      <attachid>276200</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-04-11 19:29:10 -0700</bug_when>
    <thetext>Created attachment 276200
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182924</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-11 19:30:42 -0700</bug_when>
    <thetext>Attachment 276200 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:11430:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:11440:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:11440:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:11481:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:11494:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:11494:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:11495:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:11498:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:11498:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:1465:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 10 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182966</commentid>
    <comment_count>6</comment_count>
      <attachid>276200</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-11 21:20:02 -0700</bug_when>
    <thetext>Comment on attachment 276200
Patch

How does performance look with this change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182975</commentid>
    <comment_count>7</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-04-11 21:49:37 -0700</bug_when>
    <thetext>Looks like ASM.js is consistently ~1% slower.

                                                  Conf#1                    Conf#2                                      
SunSpider:
   3d-cube                                    8.4700+-0.2026     ?      8.7783+-0.3943        ? might be 1.0364x slower
   3d-morph                                   8.0162+-0.1140            7.8483+-0.1866          might be 1.0214x faster
   3d-raytrace                                8.9434+-0.0881     ?      8.9725+-0.4521        ?
   access-binary-trees                        3.1238+-0.1945     ?      3.1438+-0.1957        ?
   access-fannkuch                            9.1057+-0.1984     ?      9.2297+-0.2061        ? might be 1.0136x slower
   access-nbody                               4.2905+-0.2136     ?      4.3686+-0.1271        ? might be 1.0182x slower
   access-nsieve                              4.6182+-0.1408     ?      4.7003+-0.1357        ? might be 1.0178x slower
   bitops-3bit-bits-in-byte                   1.6906+-0.1234            1.6691+-0.1486          might be 1.0129x faster
   bitops-bits-in-byte                        5.0170+-0.1201     ?      5.0589+-0.1450        ?
   bitops-bitwise-and                         2.7761+-0.1008     ?      2.9255+-0.0535        ? might be 1.0538x slower
   bitops-nsieve-bits                         4.6110+-0.1628     ?      4.6262+-0.1005        ?
   controlflow-recursive                      3.4317+-0.1120     ?      3.5907+-0.1227        ? might be 1.0463x slower
   crypto-aes                                 6.1561+-0.4940     ?      6.1772+-0.3405        ?
   crypto-md5                                 3.8763+-0.1746     ?      3.9257+-0.1325        ? might be 1.0128x slower
   crypto-sha1                                3.5192+-0.1567     ?      3.5223+-0.2197        ?
   date-format-tofte                         11.9573+-0.3182           11.8615+-0.1484        
   date-format-xparb                          7.2903+-0.2723            7.2382+-0.2115        
   math-cordic                                4.4269+-0.1337            4.4053+-0.1568        
   math-partial-sums                          9.7850+-0.1278            9.4720+-0.3954          might be 1.0330x faster
   math-spectral-norm                         3.3010+-0.0402            3.2201+-0.1869          might be 1.0251x faster
   regexp-dna                                10.3401+-0.5237           10.0945+-0.3628          might be 1.0243x faster
   string-base64                              6.5437+-0.0766     ?      6.5683+-0.2092        ?
   string-fasta                               9.0342+-0.4598     ?      9.0490+-0.3726        ?
   string-tagcloud                           12.9733+-0.7505           12.6915+-0.3714          might be 1.0222x faster
   string-unpack-code                        26.7853+-1.0230     ?     27.3695+-1.8284        ? might be 1.0218x slower
   string-validate-input                      6.3016+-0.2336            6.2375+-0.1245          might be 1.0103x faster

   &lt;arithmetic&gt;                               7.1686+-0.0851     ?      7.1825+-0.1089        ? might be 1.0019x slower

                                                  Conf#1                    Conf#2                                      
Octane:
   encrypt                                   0.27507+-0.00936          0.27294+-0.00566       
   decrypt                                   4.92433+-0.01932    !     5.00699+-0.04442       ! definitely 1.0168x slower
   deltablue                        x2       0.24382+-0.00785          0.24216+-0.00365       
   earley                                    0.51026+-0.00446    ?     0.51219+-0.00350       ?
   boyer                                     8.59965+-0.01781    !     8.75121+-0.05111       ! definitely 1.0176x slower
   navier-stokes                    x2       6.45040+-0.01609          6.43984+-0.03206       
   raytrace                         x2       1.39355+-0.03777    ?     1.41191+-0.02327       ? might be 1.0132x slower
   richards                         x2       0.14166+-0.00191    ?     0.14179+-0.00215       ?
   splay                            x2       0.53410+-0.00409          0.53074+-0.01105       
   regexp                           x2      26.70413+-0.48799         26.62181+-0.37138       
   pdfjs                            x2      60.75209+-1.63618         60.37284+-0.46014       
   mandreel                         x2      67.10087+-0.27170    !    67.86370+-0.30657       ! definitely 1.0114x slower
   gbemu                            x2      44.55959+-2.38735         42.65322+-0.40096         might be 1.0447x faster
   closure                                   0.83894+-0.00408    !     0.84956+-0.00392       ! definitely 1.0127x slower
   jquery                                   10.92553+-0.25972    ?    10.99053+-0.10177       ?
   box2d                            x2      16.01959+-0.14411    ?    16.03096+-0.27536       ?
   zlib                             x2     550.03451+-13.48751       548.60665+-5.01457       
   typescript                       x2    1069.22711+-7.02785    ?  1072.60455+-11.38620      ?

   &lt;geometric&gt;                               8.25054+-0.05727          8.24164+-0.04554         might be 1.0011x faster

                                                  Conf#1                    Conf#2                                      
Kraken:
   ai-astar                                  132.773+-1.363            132.524+-0.396         
   audio-beat-detection                       68.271+-0.251      ?      68.936+-1.227         ?
   audio-dft                                 127.768+-1.648      ?     129.038+-1.590         ?
   audio-fft                                  54.887+-0.406      ?      54.990+-0.319         ?
   audio-oscillator                           78.777+-0.603             78.288+-0.740         
   imaging-darkroom                           96.976+-2.958             95.803+-0.294           might be 1.0122x faster
   imaging-desaturate                         92.572+-0.285      ?      92.892+-0.557         ?
   imaging-gaussian-blur                     121.156+-1.000            110.865+-15.946          might be 1.0928x faster
   json-parse-financial                       67.831+-0.424      ?      68.075+-0.309         ?
   json-stringify-tinderbox                   40.422+-0.764             40.129+-0.196         
   stanford-crypto-aes                        61.270+-0.715             61.013+-1.304         
   stanford-crypto-ccm                        59.892+-4.987             59.022+-5.200           might be 1.0147x faster
   stanford-crypto-pbkdf2                    149.264+-2.635      ?     149.866+-3.190         ?
   stanford-crypto-sha256-iterative           58.026+-0.545      ?      59.032+-0.555         ? might be 1.0173x slower

   &lt;arithmetic&gt;                               86.420+-0.555             85.748+-0.567           might be 1.0078x faster

                                                  Conf#1                    Conf#2                                      
AsmBench:
   bigfib.cpp                               656.9565+-9.9714     ?    658.5748+-14.1574       ?
   cray.c                                   565.3174+-5.8253     ?    566.1335+-10.5589       ?
   dry.c                                    651.1944+-27.5699    ?    674.1650+-0.6050        ? might be 1.0353x slower
   FloatMM.c                                889.3350+-2.3675     ?    891.9225+-3.2651        ?
   gcc-loops.cpp                           6420.1935+-30.6182    ?   6434.8116+-22.1752       ?
   n-body.c                                1522.2892+-79.2739    ?   1544.3279+-85.1951       ? might be 1.0145x slower
   Quicksort.c                              574.9522+-3.7392     !    590.7017+-2.7602        ! definitely 1.0274x slower
   stepanov_container.cpp                  4460.5098+-27.9670    ?   4487.1917+-49.2854       ?
   Towers.c                                 377.2852+-1.7200     !    385.9769+-0.6723        ! definitely 1.0230x slower

   &lt;geometric&gt;                             1081.9978+-5.5919     !   1095.7885+-2.4173        ! definitely 1.0127x slower

                                                  Conf#1                    Conf#2                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                           48.4940+-0.2464     ?     48.5633+-0.3385        ? might be 1.0014x slower

Second run of ASM.js:
                                  Conf#1                    Conf#2                                      

bigfib.cpp                  654.1125+-6.8197     ?    655.4327+-5.5464        ?
cray.c                      565.2639+-5.8350     ?    571.0610+-8.0384        ? might be 1.0103x slower
dry.c                       657.9476+-30.5735    ?    658.9620+-28.6640       ?
FloatMM.c                   890.0372+-1.6299     ?    891.0305+-3.7049        ?
gcc-loops.cpp              6419.4900+-21.4621        6414.3735+-32.6108       
n-body.c                   1548.6223+-91.1361        1542.5115+-81.2546       
Quicksort.c                 572.1219+-3.2370     !    589.4455+-8.9777        ! definitely 1.0303x slower
stepanov_container.cpp     4463.2445+-60.1400    ?   4490.3182+-59.7972       ?
Towers.c                    376.7356+-0.4260     !    385.5025+-0.7840        ! definitely 1.0233x slower

&lt;geometric&gt;                1084.1483+-11.3733    ?   1092.5004+-9.8962        ? might be 1.0077x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182989</commentid>
    <comment_count>8</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-04-11 22:14:06 -0700</bug_when>
    <thetext>                                 Baseline               SmallStackslot            LargeStackslot        LargeStackslot v. Baseline

bigfib.cpp                  655.0576+-11.3429         652.7036+-12.3709    ?    656.0836+-5.9068        ?
cray.c                      565.4435+-8.1634     ?    571.1257+-2.0889          565.9597+-5.1407        ?
dry.c                       650.7029+-25.8607    ?    674.8217+-2.0914          658.0632+-29.7491       ? might be 1.0113x slower
FloatMM.c                   889.3929+-1.2567          889.1890+-1.4387     ?    890.1675+-3.5484        ?
gcc-loops.cpp              6413.8161+-21.2019    ?   6414.8786+-38.3145        6408.4991+-19.4484       
n-body.c                   1574.0956+-69.2270        1550.5068+-42.5719    ?   1569.4171+-78.0803       
Quicksort.c                 574.8629+-6.2179     ?    575.6371+-4.8284     !    594.1012+-1.9979        ! definitely 1.0335x slower
stepanov_container.cpp     4437.3698+-20.8219    ?   4464.8043+-26.3570    ?   4476.6780+-44.9211       ?
Towers.c                    376.1720+-1.6275     ?    377.3234+-2.8622     !    386.1508+-1.9629        ! definitely 1.0265x slower

&lt;geometric&gt;                1084.5183+-8.1783     ?   1089.1745+-3.3137     ?   1094.0357+-9.8083        ? might be 1.0088x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182990</commentid>
    <comment_count>9</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-04-11 22:15:09 -0700</bug_when>
    <thetext>Baseline against first patch again:
                                  Conf#1                    Conf#2                                      

bigfib.cpp                  653.0945+-10.4978    ?    669.9697+-30.3487       ? might be 1.0258x slower
cray.c                      564.0093+-6.7668     ?    574.0212+-5.0392        ? might be 1.0178x slower
dry.c                       667.3754+-24.8306         650.4228+-25.3341         might be 1.0261x faster
FloatMM.c                   890.0898+-2.8910     ?    890.6833+-1.4781        ?
gcc-loops.cpp              6434.5238+-43.4264        6414.8804+-17.1803       
n-body.c                   1548.2090+-85.1345    ?   1551.4907+-41.5082       ?
Quicksort.c                 576.8409+-2.9926          575.0517+-2.3609        
stepanov_container.cpp     4438.1675+-30.6399    ?   4491.6426+-88.1739       ? might be 1.0120x slower
Towers.c                    376.4673+-0.9480     ?    377.4253+-2.2056        ?

&lt;geometric&gt;                1085.8985+-6.9108     ?   1089.3462+-5.8747        ? might be 1.0032x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182993</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-11 22:23:19 -0700</bug_when>
    <thetext>I think both approaches are sound, and they both appear to deliver good performance.  I like the second one a little better because I think it puts the burden of work on defs (extra store on some defs) instead of uses (extra zext on some uses).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183005</commentid>
    <comment_count>11</comment_count>
      <attachid>276200</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-11 23:16:16 -0700</bug_when>
    <thetext>Comment on attachment 276200
Patch

Clearing flags on attachment: 276200

Committed r199337: &lt;http://trac.webkit.org/changeset/199337&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276197</attachid>
            <date>2016-04-11 19:02:48 -0700</date>
            <delta_ts>2016-04-11 22:22:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156486-20160411190257.patch</filename>
            <type>text/plain</type>
            <size>11584</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5MzA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
OWUwOTRkMDQ0YzQ1NjllOTgyMTEyNDcwODM1M2ZlZDhkNWMzNmVlLi5hYWJmY2E5NWEzMzJkYzUz
MDI2M2IxOTY1NjliYjllNDUzNjg1MDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NiBAQAorMjAxNi0wNC0xMSAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBCMyBjYW4gdXNlIHVuZGVmaW5lZCBiaXRzIG9yIG5vdCBk
ZWZpbmVkIHJlcXVpcmVkIGJpdHMgd2hlbiBzcGlsbGluZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NDg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BpbGxpbmcgaGFkIGlzc3VlcyB3aGVuIHJlcGxh
Y2luZyBhcmd1bWVudHMgaW4gcGxhY2UuCisKKyAgICAgICAgVGhlIHByb2JsZW1zIGFyZToKKyAg
ICAgICAgMSkgSWYgd2UgaGF2ZSBhIDMyYml0IHN0YWNrc2xvdCwgYSB4ODYgaW5zdHJ1Y3Rpb24g
Y291bGQgc3RpbGwgdHJ5IHRvIGxvYWQgNjRiaXRzIGZyb20gaXQuCisgICAgICAgIDIpIElmIHdl
IGhhdmUgYSA2NGJpdCBzdGFja3Nsb3QsIE1vdmUzMiB3b3VsZCBvbmx5IHNldCBoYWxmIHRoZSBi
aXRzLgorICAgICAgICAzKSBXZSB3ZXJlIHJlZHVjaW5nIE1vdmUgdG8gTW92ZTMyIGV2ZW4gaWYg
dGhlIHRvcCBiaXRzIGFyZSByZWFkIGZyb20gdGhlIHN0YWNrIHNsb3QuCisKKyAgICAgICAgVGhl
IGNhc2UgMSBhcHBlYXIgd2l0aCBzb21ldGhpbmcgbGlrZSB0aGlzOgorICAgICAgICAgICAgTW92
ZTMyICV0bXAwLCAldG1wMQorICAgICAgICAgICAgT3A2NCAldG1wMSwgJXRtcDIsICV0bXAzCisg
ICAgICAgIFdoZW4gd2Ugc3BpbGwgJXRtcDEsIHRoZSBzdGFjayBzbG90IGlzIDMyYml0LCBNb3Zl
MzIgc2V0cyAzMmJpdHMKKyAgICAgICAgYnV0IE9wNjQgc3VwcG9ydHMgYWRkcmVzc2luZyBmb3Ig
JXRtcDEuIFdoZW4gd2Ugc3Vic3RpdHV0ZSAldG1wMSBpbiBPcDY0LAorICAgICAgICB3ZSBhcmUg
Y3JlYXRpbmcgYSA2NGJpdCByZWFkIGZvciBhIDMyYml0IHN0YWNrIHNsb3QuCisKKyAgICAgICAg
VGhlIGNhc2UgMiBpcyBhbiBvdGhlciBjb21tb24gb25lLiBJZiB3ZSBoYXZlOgorICAgICAgICAg
ICAgQkIjMQorICAgICAgICAgICAgICAgIE1vdmUzMiAldG1wMCwgJXRtcDEKKyAgICAgICAgICAg
ICAgICBKdW1wICMzCisgICAgICAgICAgICBCQiMyCisgICAgICAgICAgICAgICAgT3A2NCAldG1w
MCwgJXRtcDEKKyAgICAgICAgICAgICAgICBKdW1wICMzCisgICAgICAgICAgICBCQiMzCisgICAg
ICAgICAgICAgICAgVXNlNjQgJXRtcDEKKworICAgICAgICBXZSBoYXZlIGEgc3RhY2sgc2xvdCBv
ZiA2NGJpdHMuIFdoZW4gc3BpbGxpbmcgJXRtcDEgaW4gIzEsIHdlIGFyZQorICAgICAgICBlZmZl
Y3RpdmVseSBkb2luZyBhIDMyYml0IHN0b3JlIG9uIHRoZSBzdGFjayBzbG90LCBsZWF2aW5nIHRo
ZSB0b3AgYml0cyB1bmRlZmluZWQuCisKKyAgICAgICAgQ2FzZSAzIGlzIHByZXR0eSBtdWNoIHRo
ZSBzYW1lIGFzIDIgYnV0IHdlIGNyZWF0ZSB0aGUgTW92ZTMyIG91cnNlbGYKKyAgICAgICAgYmVj
YXVzZSB0aGUgc291cmNlIGlzIGEgMzJiaXQgd2l0aCBaRGVmLgorCisgICAgICAgICogYjMvYWly
L0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcDoKKyAgICAgICAgKiBiMy90ZXN0YjMu
Y3BwOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFNwaWxsRGVmU21hbGxlclRoYW5Vc2UpOgorICAg
ICAgICAoSlNDOjpCMzo6dGVzdFNwaWxsVXNlTGFyZ2VyVGhhbkRlZik6CisgICAgICAgIChKU0M6
OkIzOjpydW4pOgorCiAyMDE2LTA0LTExICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CiAKICAgICAgICAgSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGVkaXQgU3RydWN0dXJlU3R1Yklu
Zm8gd2l0aG91dCByZWNvbXBpbGluZyB0aGUgd29ybGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5j
cHAKaW5kZXggOWY5ZmU4MTQ1MDZiZDVhOTM3ZTQwMGFmZTA1MWUzYjM5OGI1YzNjMy4uY2VkMGY3
YzMwZmE0Y2FkZWVhNjU2MjJlMjQ1NzU1ZjljY2FkMWUyNCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVz
Y2luZy5jcHAKQEAgLTE0MTksNiArMTQxOSwxMSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAg
fQogCisgICAgc3RhdGljIHVuc2lnbmVkIHN0YWNrU2xvdE1pbmltdW1XaWR0aChBcmc6OldpZHRo
IHdpZHRoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHdpZHRoIDw9IEFyZzo6V2lkdGgzMiA/IDQg
OiA4OworICAgIH0KKwogICAgIHRlbXBsYXRlPEFyZzo6VHlwZSB0eXBlPgogICAgIHZvaWQgYWRk
U3BpbGxBbmRGaWxsKGNvbnN0IENvbG9yaW5nQWxsb2NhdG9yPHR5cGU+JiBhbGxvY2F0b3IsIEhh
c2hTZXQ8dW5zaWduZWQ+JiB1bnNwaWxsYWJsZVRtcHMpCiAgICAgewpAQCAtMTQyOSw3ICsxNDM0
LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgLy8gQWxsb2NhdGUgc3RhY2sgc2xvdCBmb3Ig
ZWFjaCBzcGlsbGVkIHZhbHVlLgogICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPSBt
X2NvZGUuYWRkU3RhY2tTbG90KAotICAgICAgICAgICAgICAgIG1fdG1wV2lkdGgud2lkdGgodG1w
KSA8PSBBcmc6OldpZHRoMzIgPyA0IDogOCwgU3RhY2tTbG90S2luZDo6U3BpbGwpOworICAgICAg
ICAgICAgICAgIHN0YWNrU2xvdE1pbmltdW1XaWR0aChtX3RtcFdpZHRoLndpZHRoKHRtcCkpLCBT
dGFja1Nsb3RLaW5kOjpTcGlsbCk7CiAgICAgICAgICAgICBib29sIGlzTmV3VG1wID0gc3RhY2tT
bG90cy5hZGQodG1wLCBzdGFja1Nsb3QpLmlzTmV3RW50cnk7CiAgICAgICAgICAgICBBU1NFUlRf
VU5VU0VEKGlzTmV3VG1wLCBpc05ld1RtcCk7CiAgICAgICAgIH0KQEAgLTE0NDcsMzAgKzE0NTIs
NDEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBvbmx5IGNsYWltIHRvIHJlYWQgMzIg
Yml0cyBmcm9tIHRoZSBzb3VyY2UgaWYgb25seSAzMiBiaXRzIG9mIHRoZSBkZXN0aW5hdGlvbiBh
cmUKICAgICAgICAgICAgICAgICAvLyByZWFkLiBOb3RlIHRoYXQgd2Ugb25seSBhcHBseSB0aGlz
IGxvZ2ljIGlmIHRoaXMgdHVybnMgaW50byBhIGxvYWQgb3Igc3RvcmUsIHNpbmNlCiAgICAgICAg
ICAgICAgICAgLy8gTW92ZSBpcyB0aGUgY2Fub25pY2FsIHdheSB0byBtb3ZlIGRhdGEgYmV0d2Vl
biBHUFJzLgotICAgICAgICAgICAgICAgIGJvb2wgZm9yY2VNb3ZlMzJJZkRpZFNwaWxsID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgYm9vbCBjYW5Vc2VNb3ZlMzJJZkRpZFNwaWxsID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgYm9vbCBkaWRTcGlsbCA9IGZhbHNlOwogICAgICAgICAgICAgICAg
IGlmICh0eXBlID09IEFyZzo6R1AgJiYgaW5zdC5vcGNvZGUgPT0gTW92ZSkgewogICAgICAgICAg
ICAgICAgICAgICBpZiAoKGluc3QuYXJnc1swXS5pc1RtcCgpICYmIG1fdG1wV2lkdGgud2lkdGgo
aW5zdC5hcmdzWzBdLnRtcCgpKSA8PSBBcmc6OldpZHRoMzIpCiAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCAoaW5zdC5hcmdzWzFdLmlzVG1wKCkgJiYgbV90bXBXaWR0aC53aWR0aChpbnN0LmFy
Z3NbMV0udG1wKCkpIDw9IEFyZzo6V2lkdGgzMikpCi0gICAgICAgICAgICAgICAgICAgICAgICBm
b3JjZU1vdmUzMklmRGlkU3BpbGwgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgY2Fu
VXNlTW92ZTMySWZEaWRTcGlsbCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICAgICAgLy8gVHJ5IHRvIHJlcGxhY2UgdGhlIHJlZ2lzdGVyIHVzZSBieSBtZW1vcnkgdXNl
IHdoZW4gcG9zc2libGUuCiAgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAotICAgICAg
ICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSBhcmdUeXBl
LCBBcmc6OldpZHRoIHdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcs
IEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZy5pc1RtcCgpICYmIGFyZ1R5cGUgPT0gdHlw
ZSAmJiAhYXJnLmlzUmVnKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHN0
YWNrU2xvdEVudHJ5ID0gc3RhY2tTbG90cy5maW5kKGFyZy50bXAoKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHN0YWNrU2xvdEVudHJ5ICE9IHN0YWNrU2xvdHMuZW5kKCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgaW5zdC5hZG1pdHNTdGFjayhhcmcpKSB7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCBzcGlsbFdpZHRo
ID0gbV90bXBXaWR0aC53aWR0aChhcmcudG1wKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoQXJnOjppc0FueURlZihyb2xlKSAmJiB3aWR0aCA8IHNwaWxsV2lkdGgpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkgJiYgd2lkdGggPiBz
cGlsbFdpZHRoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcGlsbFdpZHRoICE9IEFyZzo6
V2lkdGgzMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhblVzZU1vdmUz
MklmRGlkU3BpbGwgPSBmYWxzZTsKKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGFja1Nsb3RFbnRyeS0+dmFsdWUtPmVuc3VyZVNpemUoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3JjZU1vdmUzMklmRGlkU3BpbGwgPyA0IDogQXJnOjpieXRlcyh3aWR0
aCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuVXNlTW92ZTMySWZE
aWRTcGlsbCA/IDQgOiBBcmc6OmJ5dGVzKHdpZHRoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFyZyA9IEFyZzo6c3RhY2soc3RhY2tTbG90RW50cnktPnZhbHVlKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkU3BpbGwgPSB0cnVlOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgfSk7CiAKLSAgICAgICAgICAgICAgICBpZiAoZGlkU3BpbGwgJiYgZm9yY2VNb3Zl
MzJJZkRpZFNwaWxsKQorICAgICAgICAgICAgICAgIGlmIChkaWRTcGlsbCAmJiBjYW5Vc2VNb3Zl
MzJJZkRpZFNwaWxsKQogICAgICAgICAgICAgICAgICAgICBpbnN0Lm9wY29kZSA9IE1vdmUzMjsK
IAogICAgICAgICAgICAgICAgIC8vIEZvciBldmVyeSBvdGhlciBjYXNlLCBhZGQgTG9hZC9TdG9y
ZSBhcyBuZWVkZWQuCkBAIC0xNDg4LDkgKzE1MDQsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICAgICAgQXJnIGFyZyA9IEFyZzo6c3RhY2soc3RhY2tTbG90RW50cnktPnZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCBzcGlsbFdpZHRoID0gbV90bXBXaWR0aC53aWR0
aCh0bXApOwogICAgICAgICAgICAgICAgICAgICBPcGNvZGUgbW92ZSA9IE9vcHM7Ci0gICAgICAg
ICAgICAgICAgICAgIHN3aXRjaCAoc3RhY2tTbG90RW50cnktPnZhbHVlLT5ieXRlU2l6ZSgpKSB7
CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhY2tTbG90TWluaW11bVdpZHRoKHNwaWxs
V2lkdGgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgICAg
ICAgICAgIG1vdmUgPSB0eXBlID09IEFyZzo6R1AgPyBNb3ZlMzIgOiBNb3ZlRmxvYXQ7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE1MDUsNiArMTUyMSw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgIHRtcCA9IG1fY29kZS5uZXdUbXAodHlwZSk7CiAgICAgICAg
ICAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1wcy5hZGQoQWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46
OmFic29sdXRlSW5kZXgodG1wKSk7CiAKKyAgICAgICAgICAgICAgICAgICAgQXJnIGFyZyA9IEFy
Zzo6c3RhY2soc3RhY2tTbG90RW50cnktPnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KEFyZzo6aXNBbnlVc2Uocm9sZSkgJiYgcm9sZSAhPSBBcmc6OlNjcmF0Y2gpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KGluc3RJbmRleCwgbW92ZSwgaW5zdC5v
cmlnaW4sIGFyZywgdG1wKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlEZWYo
cm9sZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCmluZGV4IGM5MzEzY2IwMzBmNzcz
NWU0NTliZWZjYTc5ZDhlYmFjNTg2ZmU0MDEuLmQ2ZTEyYTRiYjU1NzIxZWE4NmY2OWRkNDVkYjY2
YmM4YzRlOTM4YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCkBAIC0xMTQwOCw2
ICsxMTQwOCw5NyBAQCB2b2lkIHRlc3RQYXRjaHBvaW50RG91YmxlUmVncygpCiAgICAgQ0hFQ0so
aW52b2tlPGRvdWJsZT4oKmNvZGUsIDQyLjUpID09IDQyLjUpOwogfQogCit2b2lkIHRlc3RTcGls
bERlZlNtYWxsZXJUaGFuVXNlKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Js
b2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgLy8gTW92ZTMyLgorICAgIFZhbHVl
KiBhcmczMiA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIFRydW5jLCBP
cmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICBWYWx1ZSogYXJnNjQgPSBy
b290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFpFeHQzMiwgT3JpZ2luKCksIGFyZzMyKTsKKwor
ICAgIC8vIE1ha2Ugc3VyZSBhcmc2NCBpcyBvbiB0aGUgc3RhY2suCisgICAgUGF0Y2hwb2ludFZh
bHVlKiBmb3JjZVNwaWxsID0gcm9vdC0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4ocHJvYywg
SW50NjQsIE9yaWdpbigpKTsKKyAgICBSZWdpc3RlclNldCBjbG9iYmVyU2V0ID0gUmVnaXN0ZXJT
ZXQ6OmFsbEdQUnMoKTsKKyAgICBjbG9iYmVyU2V0LmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnN0YWNr
UmVnaXN0ZXJzKCkpOworICAgIGNsb2JiZXJTZXQuZXhjbHVkZShSZWdpc3RlclNldDo6cmVzZXJ2
ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICBjbG9iYmVyU2V0LmNsZWFyKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsgLy8gRm9yY2UgdGhlIHJldHVybiB2YWx1ZSBmb3IgYWxpYXNpbmcgYmVs
b3cuCisgICAgZm9yY2VTcGlsbC0+Y2xvYmJlckxhdGUoY2xvYmJlclNldCk7CisgICAgZm9yY2VT
cGlsbC0+c2V0R2VuZXJhdG9yKAorICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAg
aml0LnhvcjY0KHBhcmFtc1swXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICAgICAgfSk7
CisKKyAgICAvLyBPbiB4ODYsIFN1YiBhZG1pdCBhbiBhZGRyZXNzIGZvciBhbnkgb3BlcmFuZC4g
SWYgaXQgdXNlcyB0aGUgc3RhY2ssIHRoZSB0b3AgYml0cyBtdXN0IGJlIHplcm8uCisgICAgVmFs
dWUqIHJlc3VsdCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU3ViLCBPcmlnaW4oKSwg
Zm9yY2VTcGlsbCwgYXJnNjQpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHBy
b2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxl
KHByb2MpOworICAgIENIRUNLKGludm9rZTxpbnQ2NF90PigqY29kZSwgMHhmZmZmZmZmZjAwMDAw
MDAwKSA9PSAwKTsKK30KKwordm9pZCB0ZXN0U3BpbGxVc2VMYXJnZXJUaGFuRGVmKCkKK3sKKyAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OworICAgIEJhc2ljQmxvY2sqIHRoZW5DYXNlID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2lj
QmxvY2sqIGVsc2VDYXNlID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIHRhaWwg
PSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBSZWdpc3RlclNldCBjbG9iYmVyU2V0ID0gUmVnaXN0
ZXJTZXQ6OmFsbEdQUnMoKTsKKyAgICBjbG9iYmVyU2V0LmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnN0
YWNrUmVnaXN0ZXJzKCkpOworICAgIGNsb2JiZXJTZXQuZXhjbHVkZShSZWdpc3RlclNldDo6cmVz
ZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKKworICAgIFZhbHVlKiBjb25kaXRpb24gPSByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CisgICAgVmFsdWUqIGFyZ3VtZW50ID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAg
IHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBCcmFuY2gsIE9y
aWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJv
YywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgY29uZGl0aW9uKSwKKyAgICAgICAgRnJl
cXVlbnRlZEJsb2NrKHRoZW5DYXNlKSwgRnJlcXVlbnRlZEJsb2NrKGVsc2VDYXNlKSk7CisKKyAg
ICBWYWx1ZSogdHJ1bmNhdGVkID0gdGhlbkNhc2UtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgWkV4
dDMyLCBPcmlnaW4oKSwKKyAgICAgICAgdGhlbkNhc2UtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
VHJ1bmMsIE9yaWdpbigpLCBhcmd1bWVudCkpOworICAgIFVwc2lsb25WYWx1ZSogdGhlblJlc3Vs
dCA9IHRoZW5DYXNlLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihwcm9jLCBPcmlnaW4oKSwgdHJ1
bmNhdGVkKTsKKyAgICB0aGVuQ2FzZS0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgSnVt
cCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayh0YWlsKSk7CisKKyAgICBVcHNpbG9uVmFsdWUq
IGVsc2VSZXN1bHQgPSBlbHNlQ2FzZS0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIGFyZ3VtZW50KTsKKyAgICBlbHNlQ2FzZS0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4o
cHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayh0YWlsKSk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVl
KiBwcmV2ZW50VGFpbER1cGxpY2F0aW9uID0gdGFpbC0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1
ZT4ocHJvYywgVm9pZCwgT3JpZ2luKCkpOworICAgICAgICBwcmV2ZW50VGFpbER1cGxpY2F0aW9u
LT5jbG9iYmVyTGF0ZShjbG9iYmVyU2V0KTsKKyAgICAgICAgcHJldmVudFRhaWxEdXBsaWNhdGlv
bi0+c2V0R2VuZXJhdG9yKFtdIChDQ2FsbEhlbHBlcnMmLCBjb25zdCBTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmKSB7IH0pOworICAgIH0KKworICAgIFBhdGNocG9pbnRWYWx1ZSogZm9yY2VTcGls
bCA9IHRhaWwtPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KHByb2MsIFZvaWQsIE9yaWdpbigp
KTsKKyAgICBmb3JjZVNwaWxsLT5jbG9iYmVyTGF0ZShjbG9iYmVyU2V0KTsKKyAgICBmb3JjZVNw
aWxsLT5zZXRHZW5lcmF0b3IoCisgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgIGNsb2JiZXJT
ZXQuZm9yRWFjaChbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW02NCgweGZmZmZmZmZmZmZmZmZmZmYpLCByZWcuZ3ByKCkpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgVmFsdWUqIHBoaSA9IHRhaWwtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgUGhpLCBJbnQ2NCwgT3JpZ2luKCkpOworICAgIHRoZW5SZXN1
bHQtPnNldFBoaShwaGkpOworICAgIGVsc2VSZXN1bHQtPnNldFBoaShwaGkpOworICAgIHRhaWwt
PmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHBoaSk7CisK
KyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIENIRUNLKGludm9rZTx1aW50NjRf
dD4oKmNvZGUsIDEsIDB4ZmZmZmZmZmYwMDAwMDAwMCkgPT0gMCk7CisgICAgQ0hFQ0soaW52b2tl
PHVpbnQ2NF90PigqY29kZSwgMCwgMHhmZmZmZmZmZjAwMDAwMDAwKSA9PSAweGZmZmZmZmZmMDAw
MDAwMDApOworCisgICAgLy8gQSBzZWNvbmQgdGltZSBzaW5jZSB0aGUgcHJldmlvdXMgcnVuIGlz
IHN0aWxsIG9uIHRoZSBzdGFjay4KKyAgICBDSEVDSyhpbnZva2U8dWludDY0X3Q+KCpjb2RlLCAx
LCAweGZmZmZmZmZmMDAwMDAwMDApID09IDApOworCit9CisKIC8vIE1ha2Ugc3VyZSB0aGUgY29t
cGlsZXIgZG9lcyBub3QgdHJ5IHRvIG9wdGltaXplIGFueXRoaW5nIG91dC4KIE5FVkVSX0lOTElO
RSBkb3VibGUgemVybygpCiB7CkBAIC0xMjc4NCw2ICsxMjg3NSw5IEBAIHZvaWQgcnVuKGNvbnN0
IGNoYXIqIGZpbHRlcikKIAogICAgIFJVTih0ZXN0UGF0Y2hwb2ludERvdWJsZVJlZ3MoKSk7CiAK
KyAgICBSVU4odGVzdFNwaWxsRGVmU21hbGxlclRoYW5Vc2UoKSk7CisgICAgUlVOKHRlc3RTcGls
bFVzZUxhcmdlclRoYW5EZWYoKSk7CisKICAgICBpZiAodGFza3MuaXNFbXB0eSgpKQogICAgICAg
ICB1c2FnZSgpOwogCg==
</data>
<flag name="review"
          id="300510"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276200</attachid>
            <date>2016-04-11 19:29:10 -0700</date>
            <delta_ts>2016-04-11 23:16:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156486-20160411192919.patch</filename>
            <type>text/plain</type>
            <size>12711</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5MzA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
OWUwOTRkMDQ0YzQ1NjllOTgyMTEyNDcwODM1M2ZlZDhkNWMzNmVlLi5iODY2OGJlMTRiNWIyMTZh
YTI3Yzk3YWIwYWQ1NGQyYzNiNTE1YjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MiBAQAorMjAxNi0wNC0xMSAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBCMyBjYW4gdXNlIHVuZGVmaW5lZCBiaXRzIG9yIG5vdCBk
ZWZpbmVkIHJlcXVpcmVkIGJpdHMgd2hlbiBzcGlsbGluZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NDg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BpbGxpbmcgaGFkIGlzc3VlcyB3aGVuIHJlcGxh
Y2luZyBhcmd1bWVudHMgaW4gcGxhY2UuCisKKyAgICAgICAgVGhlIHByb2JsZW1zIGFyZToKKyAg
ICAgICAgMSkgSWYgd2UgaGF2ZSBhIDMyYml0IHN0YWNrc2xvdCwgYSB4ODYgaW5zdHJ1Y3Rpb24g
Y291bGQgc3RpbGwgdHJ5IHRvIGxvYWQgNjRiaXRzIGZyb20gaXQuCisgICAgICAgIDIpIElmIHdl
IGhhdmUgYSA2NGJpdCBzdGFja3Nsb3QsIE1vdmUzMiB3b3VsZCBvbmx5IHNldCBoYWxmIHRoZSBi
aXRzLgorICAgICAgICAzKSBXZSB3ZXJlIHJlZHVjaW5nIE1vdmUgdG8gTW92ZTMyIGV2ZW4gaWYg
dGhlIHRvcCBiaXRzIGFyZSByZWFkIGZyb20gdGhlIHN0YWNrIHNsb3QuCisKKyAgICAgICAgVGhl
IGNhc2UgMSBhcHBlYXIgd2l0aCBzb21ldGhpbmcgbGlrZSB0aGlzOgorICAgICAgICAgICAgTW92
ZTMyICV0bXAwLCAldG1wMQorICAgICAgICAgICAgT3A2NCAldG1wMSwgJXRtcDIsICV0bXAzCisg
ICAgICAgIFdoZW4gd2Ugc3BpbGwgJXRtcDEsIHRoZSBzdGFjayBzbG90IGlzIDMyYml0LCBNb3Zl
MzIgc2V0cyAzMmJpdHMKKyAgICAgICAgYnV0IE9wNjQgc3VwcG9ydHMgYWRkcmVzc2luZyBmb3Ig
JXRtcDEuIFdoZW4gd2Ugc3Vic3RpdHV0ZSAldG1wMSBpbiBPcDY0LAorICAgICAgICB3ZSBhcmUg
Y3JlYXRpbmcgYSA2NGJpdCByZWFkIGZvciBhIDMyYml0IHN0YWNrIHNsb3QuCisKKyAgICAgICAg
VGhlIGNhc2UgMiBpcyBhbiBvdGhlciBjb21tb24gb25lLiBJZiB3ZSBoYXZlOgorICAgICAgICAg
ICAgQkIjMQorICAgICAgICAgICAgICAgIE1vdmUzMiAldG1wMCwgJXRtcDEKKyAgICAgICAgICAg
ICAgICBKdW1wICMzCisgICAgICAgICAgICBCQiMyCisgICAgICAgICAgICAgICAgT3A2NCAldG1w
MCwgJXRtcDEKKyAgICAgICAgICAgICAgICBKdW1wICMzCisgICAgICAgICAgICBCQiMzCisgICAg
ICAgICAgICAgICAgVXNlNjQgJXRtcDEKKworICAgICAgICBXZSBoYXZlIGEgc3RhY2sgc2xvdCBv
ZiA2NGJpdHMuIFdoZW4gc3BpbGxpbmcgJXRtcDEgaW4gIzEsIHdlIGFyZQorICAgICAgICBlZmZl
Y3RpdmVseSBkb2luZyBhIDMyYml0IHN0b3JlIG9uIHRoZSBzdGFjayBzbG90LCBsZWF2aW5nIHRo
ZSB0b3AgYml0cyB1bmRlZmluZWQuCisKKyAgICAgICAgQ2FzZSAzIGlzIHByZXR0eSBtdWNoIHRo
ZSBzYW1lIGFzIDIgYnV0IHdlIGNyZWF0ZSB0aGUgTW92ZTMyIG91cnNlbGYKKyAgICAgICAgYmVj
YXVzZSB0aGUgc291cmNlIGlzIGEgMzJiaXQgd2l0aCBaRGVmLgorCisgICAgICAgIENhc2UgKDEp
IGlzIHNvbHZlZCBieSByZXF1aXJpbmcgdGhhdCB0aGUgc3RhY2sgc2xvdCBpcyBhdCBsZWFzdCBh
cyBsYXJnZSBhcyB0aGUgbGFyZ2VzdAorICAgICAgICB1c2UvZGVmIG9mIHRoYXQgdG1wLgorCisg
ICAgICAgIENhc2UgKDIpIGFuZCAoMykgYXJlIHNvbHZlZCBieSBub3QgcmVwbGFjaW5nIGEgVG1w
IGJ5IGFuIEFkZHJlc3MgaWYgdGhlIERlZgorICAgICAgICBpcyBzbWFsbGVyIHRoYW4gdGhlIHN0
YWNrIHNsb3QuCisKKyAgICAgICAgKiBiMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2Np
bmcuY3BwOgorICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0
U3BpbGxEZWZTbWFsbGVyVGhhblVzZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U3BpbGxVc2VM
YXJnZXJUaGFuRGVmKToKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisKIDIwMTYtMDQtMTEgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBJdCBzaG91bGQgYmUgcG9z
c2libGUgdG8gZWRpdCBTdHJ1Y3R1cmVTdHViSW5mbyB3aXRob3V0IHJlY29tcGlsaW5nIHRoZSB3
b3JsZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRl
ZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAppbmRleCA5ZjlmZTgxNDUwNmJkNWE5Mzdl
NDAwYWZlMDUxZTNiMzk4YjVjM2MzLi40ZTdlNjQ3ODdlMjJlZjM2YmQxMGI4NjI4NGY2YmNmOTgx
M2ZhZWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJh
dGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcApAQCAtMTQxOSw2ICsxNDE5LDEx
IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBzdGF0aWMgdW5zaWduZWQgc3Rh
Y2tTbG90TWluaW11bVdpZHRoKEFyZzo6V2lkdGggd2lkdGgpCisgICAgeworICAgICAgICByZXR1
cm4gd2lkdGggPD0gQXJnOjpXaWR0aDMyID8gNCA6IDg7CisgICAgfQorCiAgICAgdGVtcGxhdGU8
QXJnOjpUeXBlIHR5cGU+CiAgICAgdm9pZCBhZGRTcGlsbEFuZEZpbGwoY29uc3QgQ29sb3JpbmdB
bGxvY2F0b3I8dHlwZT4mIGFsbG9jYXRvciwgSGFzaFNldDx1bnNpZ25lZD4mIHVuc3BpbGxhYmxl
VG1wcykKICAgICB7CkBAIC0xNDI5LDcgKzE0MzQsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAg
ICAvLyBBbGxvY2F0ZSBzdGFjayBzbG90IGZvciBlYWNoIHNwaWxsZWQgdmFsdWUuCiAgICAgICAg
ICAgICBTdGFja1Nsb3QqIHN0YWNrU2xvdCA9IG1fY29kZS5hZGRTdGFja1Nsb3QoCi0gICAgICAg
ICAgICAgICAgbV90bXBXaWR0aC53aWR0aCh0bXApIDw9IEFyZzo6V2lkdGgzMiA/IDQgOiA4LCBT
dGFja1Nsb3RLaW5kOjpTcGlsbCk7CisgICAgICAgICAgICAgICAgc3RhY2tTbG90TWluaW11bVdp
ZHRoKG1fdG1wV2lkdGgucmVxdWlyZWRXaWR0aCh0bXApKSwgU3RhY2tTbG90S2luZDo6U3BpbGwp
OwogICAgICAgICAgICAgYm9vbCBpc05ld1RtcCA9IHN0YWNrU2xvdHMuYWRkKHRtcCwgc3RhY2tT
bG90KS5pc05ld0VudHJ5OwogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChpc05ld1RtcCwgaXNO
ZXdUbXApOwogICAgICAgICB9CkBAIC0xNDQ3LDMwICsxNDUyLDM5IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgLy8gb25seSBjbGFpbSB0byByZWFkIDMyIGJpdHMgZnJvbSB0aGUgc291cmNl
IGlmIG9ubHkgMzIgYml0cyBvZiB0aGUgZGVzdGluYXRpb24gYXJlCiAgICAgICAgICAgICAgICAg
Ly8gcmVhZC4gTm90ZSB0aGF0IHdlIG9ubHkgYXBwbHkgdGhpcyBsb2dpYyBpZiB0aGlzIHR1cm5z
IGludG8gYSBsb2FkIG9yIHN0b3JlLCBzaW5jZQogICAgICAgICAgICAgICAgIC8vIE1vdmUgaXMg
dGhlIGNhbm9uaWNhbCB3YXkgdG8gbW92ZSBkYXRhIGJldHdlZW4gR1BScy4KLSAgICAgICAgICAg
ICAgICBib29sIGZvcmNlTW92ZTMySWZEaWRTcGlsbCA9IGZhbHNlOworICAgICAgICAgICAgICAg
IGJvb2wgY2FuVXNlTW92ZTMySWZEaWRTcGlsbCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJv
b2wgZGlkU3BpbGwgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBBcmc6OkdQ
ICYmIGluc3Qub3Bjb2RlID09IE1vdmUpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKChpbnN0
LmFyZ3NbMF0uaXNUbXAoKSAmJiBtX3RtcFdpZHRoLndpZHRoKGluc3QuYXJnc1swXS50bXAoKSkg
PD0gQXJnOjpXaWR0aDMyKQogICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGluc3QuYXJnc1sx
XS5pc1RtcCgpICYmIG1fdG1wV2lkdGgud2lkdGgoaW5zdC5hcmdzWzFdLnRtcCgpKSA8PSBBcmc6
OldpZHRoMzIpKQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VNb3ZlMzJJZkRpZFNwaWxs
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhblVzZU1vdmUzMklmRGlkU3BpbGwg
PSB0cnVlOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIFRyeSB0byBy
ZXBsYWNlIHRoZSByZWdpc3RlciB1c2UgYnkgbWVtb3J5IHVzZSB3aGVuIHBvc3NpYmxlLgogICAg
ICAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKLSAgICAgICAgICAgICAgICAgICAgWyZdIChB
cmcmIGFyZywgQXJnOjpSb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkg
eworICAgICAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJn
OjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGggd2lkdGgpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChhcmcuaXNUbXAoKSAmJiBhcmdUeXBlID09IHR5cGUgJiYgIWFyZy5pc1JlZygpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBzdGFja1Nsb3RFbnRyeSA9IHN0YWNr
U2xvdHMuZmluZChhcmcudG1wKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChz
dGFja1Nsb3RFbnRyeSAhPSBzdGFja1Nsb3RzLmVuZCgpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICYmIGluc3QuYWRtaXRzU3RhY2soYXJnKSkgeworCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggc3BpbGxXaWR0aCA9IG1fdG1wV2lkdGgucmVxdWly
ZWRXaWR0aChhcmcudG1wKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0FueURlZihyb2xlKSAmJiB3aWR0aCA8IHNwaWxsV2lkdGgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChpbnN0Lm9wY29kZSA9PSBNb3ZlIHx8ICEoQXJnOjppc0FueVVzZShyb2xl
KSAmJiB3aWR0aCA+IHNwaWxsV2lkdGgpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc3BpbGxXaWR0aCAhPSBBcmc6OldpZHRoMzIpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYW5Vc2VNb3ZlMzJJZkRpZFNwaWxsID0gZmFsc2U7CisKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tTbG90RW50cnktPnZhbHVlLT5lbnN1cmVT
aXplKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VNb3ZlMzJJZkRp
ZFNwaWxsID8gNCA6IEFyZzo6Ynl0ZXMod2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhblVzZU1vdmUzMklmRGlkU3BpbGwgPyA0IDogQXJnOjpieXRlcyh3aWR0
aCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OnN0YWNrKHN0
YWNrU2xvdEVudHJ5LT52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRp
ZFNwaWxsID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0pOwogCi0gICAgICAgICAgICAg
ICAgaWYgKGRpZFNwaWxsICYmIGZvcmNlTW92ZTMySWZEaWRTcGlsbCkKKyAgICAgICAgICAgICAg
ICBpZiAoZGlkU3BpbGwgJiYgY2FuVXNlTW92ZTMySWZEaWRTcGlsbCkKICAgICAgICAgICAgICAg
ICAgICAgaW5zdC5vcGNvZGUgPSBNb3ZlMzI7CiAKICAgICAgICAgICAgICAgICAvLyBGb3IgZXZl
cnkgb3RoZXIgY2FzZSwgYWRkIExvYWQvU3RvcmUgYXMgbmVlZGVkLgpAQCAtMTQ4OCw5ICsxNTAy
LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIEFyZyBhcmcgPSBBcmc6OnN0YWNr
KHN0YWNrU2xvdEVudHJ5LT52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIEFyZzo6V2lkdGgg
c3BpbGxXaWR0aCA9IG1fdG1wV2lkdGgucmVxdWlyZWRXaWR0aCh0bXApOwogICAgICAgICAgICAg
ICAgICAgICBPcGNvZGUgbW92ZSA9IE9vcHM7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
c3RhY2tTbG90RW50cnktPnZhbHVlLT5ieXRlU2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCAoc3RhY2tTbG90TWluaW11bVdpZHRoKHNwaWxsV2lkdGgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmUgPSB0eXBlID09
IEFyZzo6R1AgPyBNb3ZlMzIgOiBNb3ZlRmxvYXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTE1MDUsNiArMTUxOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IHRtcCA9IG1fY29kZS5uZXdUbXAodHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIHVuc3BpbGxh
YmxlVG1wcy5hZGQoQWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgodG1wKSk7
CiAKKyAgICAgICAgICAgICAgICAgICAgQXJnIGFyZyA9IEFyZzo6c3RhY2soc3RhY2tTbG90RW50
cnktPnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkg
JiYgcm9sZSAhPSBBcmc6OlNjcmF0Y2gpCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0KGluc3RJbmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIGFyZywgdG1wKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcFdpZHRoLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclRtcFdpZHRoLmgKaW5kZXggNWZmMDU1MmEzMjIwNWZhOGI1NjMx
YjViOGNiODYxMTlkYzIyYTEyNi4uYWQ1ZGQ5ZGQ5N2Q5YWIwMWIxYTBmOWJhNDllNDI5OTc5YzBl
NTQyNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBXaWR0
aC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wV2lkdGguaApAQCAt
NjAsNiArNjAsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RkOjptaW4oaXRlci0+dmFs
dWUudXNlLCBpdGVyLT52YWx1ZS5kZWYpOwogICAgIH0KIAorICAgIC8vIFJldHVybiB0aGUgbWlu
aW11bSByZXF1aXJlZCB3aWR0aCBmb3IgYWxsIGRlZnMvdXNlcyBvZiB0aGlzIFRtcC4KKyAgICBB
cmc6OldpZHRoIHJlcXVpcmVkV2lkdGgoVG1wIHRtcCkKKyAgICB7CisgICAgICAgIGF1dG8gaXRl
ciA9IG1fd2lkdGguZmluZCh0bXApOworICAgICAgICBpZiAoaXRlciA9PSBtX3dpZHRoLmVuZCgp
KQorICAgICAgICAgICAgcmV0dXJuIEFyZzo6bWluaW11bVdpZHRoKEFyZyh0bXApLnR5cGUoKSk7
CisgICAgICAgIHJldHVybiBzdGQ6Om1heChpdGVyLT52YWx1ZS51c2UsIGl0ZXItPnZhbHVlLmRl
Zik7CisgICAgfQorCiAgICAgLy8gVGhpcyBpbmRpcmVjdGx5IHRlbGxzIHlvdSBob3cgbXVjaCBv
ZiB0aGUgdG1wJ3MgaGlnaCBiaXRzIGFyZSBndWFyYW50ZWVkIHRvIGJlIHplcm8uIFRoZSBudW1i
ZXIgb2YKICAgICAvLyBoaWdoIGJpdHMgdGhhdCBhcmUgemVybyBhcmU6CiAgICAgLy8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKaW5kZXggYzkzMTNjYjAzMGY3NzM1ZTQ1OWJlZmNhNzlk
OGViYWM1ODZmZTQwMS4uZDZlMTJhNGJiNTU3MjFlYTg2ZjY5ZGQ0NWRiNjZiYzhjNGU5MzhjMCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKQEAgLTExNDA4LDYgKzExNDA4LDk3IEBA
IHZvaWQgdGVzdFBhdGNocG9pbnREb3VibGVSZWdzKCkKICAgICBDSEVDSyhpbnZva2U8ZG91Ymxl
PigqY29kZSwgNDIuNSkgPT0gNDIuNSk7CiB9CiAKK3ZvaWQgdGVzdFNwaWxsRGVmU21hbGxlclRo
YW5Vc2UoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBw
cm9jLmFkZEJsb2NrKCk7CisKKyAgICAvLyBNb3ZlMzIuCisgICAgVmFsdWUqIGFyZzMyID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAg
ICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgIFZhbHVlKiBhcmc2NCA9IHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgWkV4dDMyLCBPcmlnaW4oKSwgYXJnMzIpOworCisgICAgLy8gTWFrZSBz
dXJlIGFyZzY0IGlzIG9uIHRoZSBzdGFjay4KKyAgICBQYXRjaHBvaW50VmFsdWUqIGZvcmNlU3Bp
bGwgPSByb290LT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBJbnQ2NCwgT3JpZ2lu
KCkpOworICAgIFJlZ2lzdGVyU2V0IGNsb2JiZXJTZXQgPSBSZWdpc3RlclNldDo6YWxsR1BScygp
OworICAgIGNsb2JiZXJTZXQuZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7
CisgICAgY2xvYmJlclNldC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVn
aXN0ZXJzKCkpOworICAgIGNsb2JiZXJTZXQuY2xlYXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OyAvLyBGb3JjZSB0aGUgcmV0dXJuIHZhbHVlIGZvciBhbGlhc2luZyBiZWxvdy4KKyAgICBmb3Jj
ZVNwaWxsLT5jbG9iYmVyTGF0ZShjbG9iYmVyU2V0KTsKKyAgICBmb3JjZVNwaWxsLT5zZXRHZW5l
cmF0b3IoCisgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICBqaXQueG9yNjQocGFy
YW1zWzBdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICB9KTsKKworICAgIC8vIE9u
IHg4NiwgU3ViIGFkbWl0IGFuIGFkZHJlc3MgZm9yIGFueSBvcGVyYW5kLiBJZiBpdCB1c2VzIHRo
ZSBzdGFjaywgdGhlIHRvcCBiaXRzIG11c3QgYmUgemVyby4KKyAgICBWYWx1ZSogcmVzdWx0ID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCBmb3JjZVNwaWxsLCBh
cmc2NCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwgcmVzdWx0KTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAg
Q0hFQ0soaW52b2tlPGludDY0X3Q+KCpjb2RlLCAweGZmZmZmZmZmMDAwMDAwMDApID09IDApOwor
fQorCit2b2lkIHRlc3RTcGlsbFVzZUxhcmdlclRoYW5EZWYoKQoreworICAgIFByb2NlZHVyZSBw
cm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNC
bG9jayogdGhlbkNhc2UgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZWxzZUNh
c2UgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogdGFpbCA9IHByb2MuYWRkQmxv
Y2soKTsKKworICAgIFJlZ2lzdGVyU2V0IGNsb2JiZXJTZXQgPSBSZWdpc3RlclNldDo6YWxsR1BS
cygpOworICAgIGNsb2JiZXJTZXQuZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMo
KSk7CisgICAgY2xvYmJlclNldC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJl
UmVnaXN0ZXJzKCkpOworCisgICAgVmFsdWUqIGNvbmRpdGlvbiA9IHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
KyAgICBWYWx1ZSogYXJndW1lbnQgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgcm9vdC0+YXBwZW5k
TmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIEJyYW5jaCwgT3JpZ2luKCksCisgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3Jp
Z2luKCksCisgICAgICAgICAgICBjb25kaXRpb24pLAorICAgICAgICBGcmVxdWVudGVkQmxvY2so
dGhlbkNhc2UpLCBGcmVxdWVudGVkQmxvY2soZWxzZUNhc2UpKTsKKworICAgIFZhbHVlKiB0cnVu
Y2F0ZWQgPSB0aGVuQ2FzZS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBaRXh0MzIsIE9yaWdpbigp
LAorICAgICAgICB0aGVuQ2FzZS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2lu
KCksIGFyZ3VtZW50KSk7CisgICAgVXBzaWxvblZhbHVlKiB0aGVuUmVzdWx0ID0gdGhlbkNhc2Ut
PmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KHByb2MsIE9yaWdpbigpLCB0cnVuY2F0ZWQpOworICAg
IHRoZW5DYXNlLT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBKdW1wLCBPcmlnaW4oKSwg
RnJlcXVlbnRlZEJsb2NrKHRhaWwpKTsKKworICAgIFVwc2lsb25WYWx1ZSogZWxzZVJlc3VsdCA9
IGVsc2VDYXNlLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYXJndW1l
bnQpOworICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBKdW1wLCBP
cmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKHRhaWwpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCAxMDA7ICsraSkgeworICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHByZXZlbnRUYWls
RHVwbGljYXRpb24gPSB0YWlsLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBWb2lk
LCBPcmlnaW4oKSk7CisgICAgICAgIHByZXZlbnRUYWlsRHVwbGljYXRpb24tPmNsb2JiZXJMYXRl
KGNsb2JiZXJTZXQpOworICAgICAgICBwcmV2ZW50VGFpbER1cGxpY2F0aW9uLT5zZXRHZW5lcmF0
b3IoW10gKENDYWxsSGVscGVycyYsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsg
fSk7CisgICAgfQorCisgICAgUGF0Y2hwb2ludFZhbHVlKiBmb3JjZVNwaWxsID0gdGFpbC0+YXBw
ZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4ocHJvYywgVm9pZCwgT3JpZ2luKCkpOworICAgIGZvcmNl
U3BpbGwtPmNsb2JiZXJMYXRlKGNsb2JiZXJTZXQpOworICAgIGZvcmNlU3BpbGwtPnNldEdlbmVy
YXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgY2xvYmJlclNldC5mb3JFYWNoKFsm
XSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTY0KDB4ZmZmZmZmZmZmZmZmZmZmZiksIHJlZy5ncHIoKSk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfSk7CisKKyAgICBWYWx1ZSogcGhpID0gdGFpbC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBQaGksIEludDY0LCBPcmlnaW4oKSk7CisgICAgdGhlblJlc3VsdC0+c2V0UGhpKHBo
aSk7CisgICAgZWxzZVJlc3VsdC0+c2V0UGhpKHBoaSk7CisgICAgdGFpbC0+YXBwZW5kTmV3PENv
bnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcGhpKTsKKworICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGUocHJvYyk7CisgICAgQ0hFQ0soaW52b2tlPHVpbnQ2NF90PigqY29kZSwgMSwg
MHhmZmZmZmZmZjAwMDAwMDAwKSA9PSAwKTsKKyAgICBDSEVDSyhpbnZva2U8dWludDY0X3Q+KCpj
b2RlLCAwLCAweGZmZmZmZmZmMDAwMDAwMDApID09IDB4ZmZmZmZmZmYwMDAwMDAwMCk7CisKKyAg
ICAvLyBBIHNlY29uZCB0aW1lIHNpbmNlIHRoZSBwcmV2aW91cyBydW4gaXMgc3RpbGwgb24gdGhl
IHN0YWNrLgorICAgIENIRUNLKGludm9rZTx1aW50NjRfdD4oKmNvZGUsIDEsIDB4ZmZmZmZmZmYw
MDAwMDAwMCkgPT0gMCk7CisKK30KKwogLy8gTWFrZSBzdXJlIHRoZSBjb21waWxlciBkb2VzIG5v
dCB0cnkgdG8gb3B0aW1pemUgYW55dGhpbmcgb3V0LgogTkVWRVJfSU5MSU5FIGRvdWJsZSB6ZXJv
KCkKIHsKQEAgLTEyNzg0LDYgKzEyODc1LDkgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVy
KQogCiAgICAgUlVOKHRlc3RQYXRjaHBvaW50RG91YmxlUmVncygpKTsKIAorICAgIFJVTih0ZXN0
U3BpbGxEZWZTbWFsbGVyVGhhblVzZSgpKTsKKyAgICBSVU4odGVzdFNwaWxsVXNlTGFyZ2VyVGhh
bkRlZigpKTsKKwogICAgIGlmICh0YXNrcy5pc0VtcHR5KCkpCiAgICAgICAgIHVzYWdlKCk7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>