<?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>160539</bug_id>
          
          <creation_ts>2016-08-04 00:09:26 -0700</creation_ts>
          <short_desc>[JSC] Speed up InPlaceAbstractState::endBasicBlock()</short_desc>
          <delta_ts>2016-08-04 12:34:47 -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>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>1217338</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-08-04 00:09:26 -0700</bug_when>
    <thetext>[JSC] Speed up InPlaceAbstractState::endBasicBlock()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217340</commentid>
    <comment_count>1</comment_count>
      <attachid>285305</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-08-04 00:23:39 -0700</bug_when>
    <thetext>Created attachment 285305
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217341</commentid>
    <comment_count>2</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-08-04 00:24:25 -0700</bug_when>
    <thetext>24 runs:

                                                  Conf#1                    Conf#2                                      
SunSpider:
   3d-cube                                    4.7019+-0.0445     ?      4.7260+-0.0561        ?
   3d-morph                                   5.0836+-0.0799     ^      4.9649+-0.0244        ^ definitely 1.0239x faster
   3d-raytrace                                4.9661+-0.1071            4.9161+-0.0559          might be 1.0102x faster
   access-binary-trees                        2.0023+-0.0263            1.9813+-0.0175          might be 1.0106x faster
   access-fannkuch                            5.7993+-0.1762            5.6978+-0.0431          might be 1.0178x faster
   access-nbody                               2.3969+-0.0276            2.3558+-0.0251          might be 1.0174x faster
   access-nsieve                              2.9599+-0.0235            2.9555+-0.0190        
   bitops-3bit-bits-in-byte                   1.0751+-0.0229     ?      1.0854+-0.0299        ?
   bitops-bits-in-byte                        2.5775+-0.0164     ?      2.5817+-0.0210        ?
   bitops-bitwise-and                         1.9970+-0.0298            1.9916+-0.0243        
   bitops-nsieve-bits                         3.0999+-0.0508     ?      3.1225+-0.1006        ?
   controlflow-recursive                      2.3036+-0.0123     ?      2.3185+-0.0339        ?
   crypto-aes                                 4.4593+-0.0247            4.4255+-0.0157        
   crypto-md5                                 2.6770+-0.0292            2.6587+-0.0351        
   crypto-sha1                                2.7302+-0.0260     ?      2.7562+-0.0388        ?
   date-format-tofte                          6.5233+-0.0668            6.4830+-0.0387        
   date-format-xparb                          4.7152+-0.0269     ?      4.7308+-0.0337        ?
   math-cordic                                2.7434+-0.0169     ?      2.7471+-0.0198        ?
   math-partial-sums                          3.9862+-0.0359            3.9834+-0.0454        
   math-spectral-norm                         2.0678+-0.0431            2.0581+-0.0369        
   regexp-dna                                 6.4471+-0.1295            6.4428+-0.0842        
   string-base64                              4.0172+-0.0486            3.9858+-0.0242        
   string-fasta                               5.5386+-0.0332            5.5166+-0.0451        
   string-tagcloud                            8.4564+-0.1596            8.4525+-0.1690        
   string-unpack-code                        18.2313+-0.2031           18.1489+-0.2162        
   string-validate-input                      4.0572+-0.0358     ?      4.0676+-0.0298        ?

   &lt;arithmetic&gt;                               4.4467+-0.0138            4.4290+-0.0144          might be 1.0040x faster

                                                  Conf#1                    Conf#2                                      
Octane:
   encrypt                                   0.15532+-0.00134    ?     0.15603+-0.00141       ?
   decrypt                                   2.76892+-0.02251          2.75079+-0.00556       
   deltablue                        x2       0.13315+-0.00364          0.13298+-0.00372       
   earley                                    0.28542+-0.00091    ?     0.28626+-0.00112       ?
   boyer                                     4.94042+-0.04671    ?     4.97826+-0.03856       ?
   navier-stokes                    x2       4.94975+-0.01413          4.94368+-0.00819       
   raytrace                         x2       0.79568+-0.00331          0.79556+-0.00277       
   richards                         x2       0.08226+-0.00068    ?     0.08235+-0.00046       ?
   splay                            x2       0.33844+-0.00093    ?     0.33932+-0.00111       ?
   regexp                           x2      16.62279+-0.26727    ?    16.70929+-0.29884       ?
   pdfjs                            x2      38.90697+-0.17084    ^    38.37963+-0.14737       ^ definitely 1.0137x faster
   mandreel                         x2      42.89519+-0.23220         42.77201+-0.13249       
   gbemu                            x2      29.87420+-0.47615         29.46608+-0.09044         might be 1.0139x faster
   closure                                   0.48411+-0.00113          0.48294+-0.00134       
   jquery                                    6.45182+-0.01299          6.44828+-0.01829       
   box2d                            x2       9.24477+-0.02668    ?     9.24608+-0.03331       ?
   zlib                             x2     365.30700+-4.35224        357.26474+-5.09561         might be 1.0225x faster
   typescript                       x2     604.52266+-3.40624        597.89421+-3.47951         might be 1.0111x faster

   &lt;geometric&gt;                               5.03481+-0.01501          5.01664+-0.01060         might be 1.0036x faster

                                                  Conf#1                    Conf#2                                      
Kraken:
   ai-astar                                   86.698+-0.545      ?      86.725+-0.791         ?
   audio-beat-detection                       38.933+-0.145             38.907+-0.161         
   audio-dft                                  98.381+-1.161             97.826+-0.890         
   audio-fft                                  30.242+-0.024      ?      30.326+-0.109         ?
   audio-oscillator                           49.023+-0.509             48.819+-0.436         
   imaging-darkroom                           61.247+-0.278      ?      61.384+-0.509         ?
   imaging-desaturate                         44.062+-0.566             43.958+-0.326         
   imaging-gaussian-blur                      59.879+-0.743      ?      60.623+-0.889         ? might be 1.0124x slower
   json-parse-financial                       34.682+-0.344             34.153+-0.319           might be 1.0155x faster
   json-stringify-tinderbox                   23.239+-0.199      ^      22.415+-0.249         ^ definitely 1.0367x faster
   stanford-crypto-aes                        37.081+-0.433      ?      37.185+-0.300         ?
   stanford-crypto-ccm                        33.517+-0.969      ?      34.784+-0.780         ? might be 1.0378x slower
   stanford-crypto-pbkdf2                     93.333+-0.490             92.594+-0.319         
   stanford-crypto-sha256-iterative           30.490+-0.119      ?      30.523+-0.121         ?

   &lt;arithmetic&gt;                               51.486+-0.145             51.445+-0.130           might be 1.0008x faster

                                                  Conf#1                    Conf#2                                      
AsmBench:
   bigfib.cpp                               425.7745+-0.8215          425.4747+-1.2422        
   cray.c                                   387.3546+-1.3674          384.7876+-1.4579        
   dry.c                                    466.1051+-33.8684    ^    428.9013+-3.2271        ^ definitely 1.0867x faster
   FloatMM.c                                735.3686+-14.8127         721.2791+-7.1189          might be 1.0195x faster
   gcc-loops.cpp                           3594.9277+-7.0192     ?   3600.2280+-9.0302        ?
   n-body.c                                 800.5333+-1.3423          799.7137+-1.3151        
   Quicksort.c                              398.6741+-2.8060          395.8523+-1.9722        
   stepanov_container.cpp                  3295.6699+-10.0760        3279.1960+-10.5901       
   Towers.c                                 264.8358+-0.5208     ?    265.1645+-0.8941        ?

   &lt;geometric&gt;                              725.8621+-6.1604     ^    717.1344+-1.2986        ^ definitely 1.0122x faster

                                                  Conf#1                    Conf#2                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                           30.2426+-0.0712     ^     30.0891+-0.0366        ^ definitely 1.0051x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217450</commentid>
    <comment_count>3</comment_count>
      <attachid>285305</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-08-04 10:15:56 -0700</bug_when>
    <thetext>Comment on attachment 285305
Patch

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

r=me.

&gt; Source/JavaScriptCore/ChangeLog:17
&gt; +        One key insight is that using HashMap to map Nodes
&gt; +        to Value in valuesAtTail is too inefficient at the scale
&gt; +        we use it.
&gt; +
&gt; +        We need some mapping from node to value, but HashMap
&gt; +        does not cut it. Instead, I reuse our existing mapping
&gt; +        from every Node to its value, abstracted by forNode().

The &quot;We need some mapping from node to value, but HashMap does not cut it.&quot; part is redundant with (and not as informative as) the previous sentence.  I suggest removing it

&gt; Source/JavaScriptCore/ChangeLog:19
&gt; +        Since we are not gonna use the mapping after endBasicBlock()

nit: /gonna/going to/.

&gt; Source/JavaScriptCore/ChangeLog:23
&gt; +        In endBasicBlock(), valuesAtTail is now a vector all values live

typo: /vector all/vector of all/?

Also, you capitalize Vector below (as in a reference to the type).  Do you want to capitalize it here?

&gt; Source/JavaScriptCore/dfg/DFGInPlaceAbstractState.cpp:179
&gt; -    bool changed = checkAndSet(block-&gt;cfaStructureClobberStateAtTail, m_structureClobberState);
&gt; +    checkAndSet(block-&gt;cfaStructureClobberStateAtTail, m_structureClobberState);

You&apos;re changing this to not use the &quot;check&quot; part (because the changed bool is unused).  Why not just change this to an assignment?
    block-&gt;cfaStructureClobberStateAtTail = m_structureClobberState;

&gt; Source/JavaScriptCore/dfg/DFGInPlaceAbstractState.cpp:295
&gt; +            changed |= entry.value.merge(forNode(node));

Above this line, can you add the following?
    ASSERT(from-&gt;ssa-&gt;valuesAtTail.find(node)-&gt;value == forNode(node));

If I read your patch correctly, this is the crux of the patch i.e. you also stash the from-&gt;ssa-&gt;valuesAtTail.find(node)-&gt;value in forNode(node) back in InPlaceAbstractState::endBasicBlock() when you computed from-&gt;ssa-&gt;valuesAtTail.find(node)-&gt;value.  This assertion documents this expectation of equivalence and ensures that nothing breaks it silently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217499</commentid>
    <comment_count>4</comment_count>
      <attachid>285342</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-08-04 11:46:40 -0700</bug_when>
    <thetext>Created attachment 285342
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217527</commentid>
    <comment_count>5</comment_count>
      <attachid>285342</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-04 12:34:43 -0700</bug_when>
    <thetext>Comment on attachment 285342
Patch for landing

Clearing flags on attachment: 285342

Committed r204130: &lt;http://trac.webkit.org/changeset/204130&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217528</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-04 12:34:47 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285305</attachid>
            <date>2016-08-04 00:23:39 -0700</date>
            <delta_ts>2016-08-04 11:46:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160539-20160804002214.patch</filename>
            <type>text/plain</type>
            <size>15541</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MDU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
OTgwNjQyMzNhM2Y1MTVmNGI2YTEyNzAzYzA1NDlhMDU3N2M3NWY3Li5mYmRmZWIxZWFmZWZjNzMx
MmUzNmQzNzM1Mzg4ZTIwNTUwZWUyMjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NiBAQAorMjAxNi0wOC0wNCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBTcGVlZCB1cCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6ZW5k
QmFzaWNCbG9jaygpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjA1MzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIHBhdGNoIGRvZXMgc21hbGwgaW1wcm92ZW1lbnRzIHRvIG91ciBoYW5kbGluZwor
ICAgICAgICBvZiB2YWx1ZSBwcm9wYWdhdGlvbiB0byB0aGUgc3VjY2Vzc29ycy4KKworICAgICAg
ICBPbmUga2V5IGluc2lnaHQgaXMgdGhhdCB1c2luZyBIYXNoTWFwIHRvIG1hcCBOb2RlcworICAg
ICAgICB0byBWYWx1ZSBpbiB2YWx1ZXNBdFRhaWwgaXMgdG9vIGluZWZmaWNpZW50IGF0IHRoZSBz
Y2FsZQorICAgICAgICB3ZSB1c2UgaXQuCisKKyAgICAgICAgV2UgbmVlZCBzb21lIG1hcHBpbmcg
ZnJvbSBub2RlIHRvIHZhbHVlLCBidXQgSGFzaE1hcAorICAgICAgICBkb2VzIG5vdCBjdXQgaXQu
IEluc3RlYWQsIEkgcmV1c2Ugb3VyIGV4aXN0aW5nIG1hcHBpbmcKKyAgICAgICAgZnJvbSBldmVy
eSBOb2RlIHRvIGl0cyB2YWx1ZSwgYWJzdHJhY3RlZCBieSBmb3JOb2RlKCkuCisKKyAgICAgICAg
U2luY2Ugd2UgYXJlIG5vdCBnb25uYSB1c2UgdGhlIG1hcHBpbmcgYWZ0ZXIgZW5kQmFzaWNCbG9j
aygpCisgICAgICAgIEkgY2FuIHJlcGxhY2Ugd2hhdGV2ZXIgd2UgaGFkIHRoZXJlLiBUaGUgbmV4
dCBiZWdpbkJhc2ljQmxvY2soKQorICAgICAgICB3aWxsIHNldHVwIHRoZSBuZXcgdmFsdWUgYXMg
bmVlZGVkLgorCisgICAgICAgIEluIGVuZEJhc2ljQmxvY2soKSwgdmFsdWVzQXRUYWlsIGlzIG5v
dyBhIHZlY3RvciBhbGwgdmFsdWVzIGxpdmUKKyAgICAgICAgYXQgdGFpbC4gRm9yIGVhY2ggbm9k
ZSwgSSBtZXJnZSB0aGUgcHJldmlvdXMgbGl2ZSBhdCB0YWlsIHdpdGgKKyAgICAgICAgdGhlIG5l
dyB2YWx1ZSwgdGhlbiByZXBsYWNlIHRoZSB2YWx1ZSBpbiB0aGUgbWFwcGluZy4KKyAgICAgICAg
TGl2ZW5lc3MgQW5hbHlzaXMgZ3VhcmFudGVlcyB3ZSB3b24ndCBoYXZlIGR1cGxpY2F0ZXMgdGhl
cmUgd2hpY2gKKyAgICAgICAgbWFrZSB0aGUgcmVwbGFjZW1lbnQgc291bmQuCisKKyAgICAgICAg
TmV4dCwgd2hlbiBwcm9wYWdhdGluZywgSSB0YWtlIHRoZSBWZWN0b3Igb2YgdmFsdWVzIGxpdmVz
IGF0IGhlYWQKKyAgICAgICAgYW5kIHVzZSB0aGUgZ2xvYmFsIG5vZGUtPnZhbHVlIG1hcHBpbmcg
dG8gZmluZCBpdHMgbmV3IGFic3RyYWN0IHZhbHVlLgorICAgICAgICBBZ2FpbiwgTGl2ZW5lc3Mg
QW5hbHlzaXMgZ3VhcmFudGVlcyBJIHdvbid0IGZpbmQgYSB2YWx1ZSBsaXZlIGF0IGhlYWQKKyAg
ICAgICAgdGhhdCB3YXMgbm90IHJlcGxhY2VkIGJ5IHRoZSBtZXJnaW5nIGF0IHRhaWwgb2YgdGhl
IHByZWRlY2Vzc29yLgorCisgICAgICAgIEFsbCBvdXIgbGl2ZSBsaXN0cyBoYXZlIGJlY29tZSBW
ZWN0b3JzIGluc3RlYWQgb2YgSGFzaFRhYmxlLgorICAgICAgICBUaGUgbWFwcGluZyBmcm9tIE5v
ZGUgdG8gVmFsdWUgaXMgYWx3YXlzIGRvbmUgYnkgYXJyYXkgaW5kZXhpbmcuCisgICAgICAgIFNh
bWUgYmlnLU8sIG11Y2ggc21hbGxlciBjb25zdGFudC4KKworICAgICAgICAqIGRmZy9ERkdBdFRh
aWxBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0
YXRlOjpBdFRhaWxBYnN0cmFjdFN0YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0
cmFjdFN0YXRlOjpjcmVhdGVWYWx1ZUZvck5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkF0VGFp
bEFic3RyYWN0U3RhdGU6OmZvck5vZGUpOgorICAgICAgICAqIGRmZy9ERkdBdFRhaWxBYnN0cmFj
dFN0YXRlLmg6CisgICAgICAgIEkgZGlkIG5vdCBsb29rIG11Y2ggaW50byB0aGlzIHN0YXRlLCBJ
IGp1c3QgbWFkZSBpdCBlcXVpdmFsZW50CisgICAgICAgIHRvIHRoZSBwcmV2aW91cyBtYXBwaW5n
LgorCisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKiBkZmcvREZHQ0ZB
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNGQVBoYXNlOjpwZXJmb3JtQmxvY2tDRkEp
OgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2spOgorCisg
ICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwp
OgorICAgICAgICBBYnN0cmFjdFZhbHVlIGlzIGJpZyBlbm91Z2ggdGhhdCB3ZSByZWFsbHkgZG9u
J3Qgd2FudCB0byBjb3B5IGl0IHR3aWNlLgorCisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFi
c3RyYWN0U3RhdGU6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6REZHOjpzZXRMaXZlVmFsdWVzKTog
RGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaDoKKworICAg
ICAgICAqIGRmZy9ERkdQaGlDaGlsZHJlbi5oOgorICAgICAgICBUaGlzIGlzIGhlYXAgYWxsb2Nh
dGVkIGJ5IEFic3RyYWN0SW50ZXJwcmV0ZXIuIEl0IHNob3VsZCB1c2UgZmFzdE1hbGxvYygpLgor
CiAyMDE2LTA4LTAyICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIFtKU0NdIEltcHJvdmUgdGhlIG1lbW9yeSBsb2NhbGl0eSBvZiBERkcgTm9kZSdzIEFi
c3RyYWN0VmFsdWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0
VGFpbEFic3RyYWN0U3RhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRh
aWxBYnN0cmFjdFN0YXRlLmNwcAppbmRleCA5ZDhjNzEwZGU2OWU5ODM3NjA4ZDA1NDIyNjcwMGEz
OTg1M2RhMmQ0Li4yMjA2MjkyNjMzMDU3MDM1MGFkMDg4ZWYyYTcxMjU0Y2FiNzcyNjlmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0
ZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRG
R0F0VGFpbEFic3RyYWN0U3RhdGUuaCIKKyNpbmNsdWRlICJERkdCbG9ja01hcElubGluZXMuaCIK
IAogI2lmIEVOQUJMRShERkdfSklUKQogCkBAIC0zNCwyMSArMzUsMjggQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCiBBdFRhaWxBYnN0cmFjdFN0YXRlOjpBdFRhaWxBYnN0cmFj
dFN0YXRlKEdyYXBoJiBncmFwaCkKICAgICA6IG1fZ3JhcGgoZ3JhcGgpCi0gICAgLCBtX2Jsb2Nr
KDApCisgICAgLCBtX3ZhbHVlc0F0VGFpbE1hcChtX2dyYXBoKQogeworICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgIGF1
dG8mIHZhbHVlc0F0VGFpbCA9IG1fdmFsdWVzQXRUYWlsTWFwLmF0KGJsb2NrKTsKKyAgICAgICAg
dmFsdWVzQXRUYWlsLmNsZWFyKCk7CisgICAgICAgIGZvciAoYXV0byYgdmFsdWVBdFRhaWxQYWly
IDogYmxvY2stPnNzYS0+dmFsdWVzQXRUYWlsKQorICAgICAgICAgICAgdmFsdWVzQXRUYWlsLmFk
ZCh2YWx1ZUF0VGFpbFBhaXIubm9kZSwgdmFsdWVBdFRhaWxQYWlyLnZhbHVlKTsKKyAgICB9CiB9
CiAKIEF0VGFpbEFic3RyYWN0U3RhdGU6On5BdFRhaWxBYnN0cmFjdFN0YXRlKCkgeyB9CiAKIHZv
aWQgQXRUYWlsQWJzdHJhY3RTdGF0ZTo6Y3JlYXRlVmFsdWVGb3JOb2RlKE5vZGUqIG5vZGUpCiB7
Ci0gICAgbV9ibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwuYWRkKG5vZGUsIEFic3RyYWN0VmFsdWUo
KSk7CisgICAgbV92YWx1ZXNBdFRhaWxNYXAuYXQobV9ibG9jaykuYWRkKG5vZGUsIEFic3RyYWN0
VmFsdWUoKSk7CiB9CiAKIEFic3RyYWN0VmFsdWUmIEF0VGFpbEFic3RyYWN0U3RhdGU6OmZvck5v
ZGUoTm9kZSogbm9kZSkKIHsKLSAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPjo6aXRl
cmF0b3IgaXRlciA9IG1fYmxvY2stPnNzYS0+dmFsdWVzQXRUYWlsLmZpbmQobm9kZSk7Ci0gICAg
REZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBpdGVyICE9IG1fYmxvY2stPnNzYS0+dmFsdWVzQXRU
YWlsLmVuZCgpKTsKKyAgICBhdXRvJiB2YWx1ZXNBdFRhaWwgPSBtX3ZhbHVlc0F0VGFpbE1hcC5h
dChtX2Jsb2NrKTsKKyAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPjo6aXRlcmF0b3Ig
aXRlciA9IHZhbHVlc0F0VGFpbC5maW5kKG5vZGUpOworICAgIERGR19BU1NFUlQobV9ncmFwaCwg
bm9kZSwgaXRlciAhPSB2YWx1ZXNBdFRhaWwuZW5kKCkpOwogICAgIHJldHVybiBpdGVyLT52YWx1
ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxB
YnN0cmFjdFN0YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3Ry
YWN0U3RhdGUuaAppbmRleCBkMGQ4YzQyZjZmNmQzMjNmMTJjZTBiYmZkZGVmODljMTg4ZDAzMTI5
Li4xYjU4N2ZiNWE3YzgwN2NmNzU4ODRkYTE2ZjYyNmJhNjFmMDU4Y2U0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaApAQCAtMzAs
NiArMzAsNyBAQAogCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgogI2luY2x1ZGUgIkRG
R0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJERkdCbG9ja01hcC5oIgogI2luY2x1ZGUgIkRGR0dy
YXBoLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsgCkBAIC02Niw3ICs2Nyw4
IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBHcmFwaCYgbV9ncmFwaDsKLSAgICBCYXNpY0Js
b2NrKiBtX2Jsb2NrOworICAgIEJsb2NrTWFwPEhhc2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+
PiBtX3ZhbHVlc0F0VGFpbE1hcDsKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9
OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jhc2ljQmxvY2suaAppbmRleCBmNDJkN2JiOTJiOTc4ZGU0NDBhMzJhYzdhYzA0Njg4
MDY5YmY0NjY2Li5hMzg4OTM1NGZkOGIwNjgxOGFiYzZiN2FmMmZiNGM3MGVlNDFmY2M0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaApAQCAtMjU3LDcgKzI1Nyw3
IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2NrPiB7CiAgICAgICAg
ICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlOwogICAgICAgICB9OwogICAgICAgICBWZWN0b3I8Tm9k
ZUFic3RyYWN0VmFsdWVQYWlyPiB2YWx1ZXNBdEhlYWQ7Ci0gICAgICAgIEhhc2hNYXA8Tm9kZSos
IEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0VGFpbDsKKyAgICAgICAgVmVjdG9yPE5vZGVBYnN0cmFj
dFZhbHVlUGFpcj4gdmFsdWVzQXRUYWlsOwogICAgICAgICAKICAgICAgICAgU1NBRGF0YShCYXNp
Y0Jsb2NrKik7CiAgICAgICAgIH5TU0FEYXRhKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZBUGhhc2UuY3BwCmluZGV4IDZiMWRkMzU2NDBlZTVlYTg3NTBmOGU1YzZiMzFmZGQxYjdl
ODFhNTQuLjgzYjA0N2NmZWJjYTQ0ZmViYTBmN2IxZmMzNmY5MjFlZjZkNTkwZmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTkw
LDcgKzE5MCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChtX3ZlcmJvc2UpIHsKICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICAgIHRhaWwgdmFyczogIiwgYmxvY2stPnZhbHVlc0F0VGFpbCwgIlxu
Iik7CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKQotICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICAgIGhlYWQgcmVnczogIiwgbWFwRHVtcChibG9jay0+c3NhLT52YWx1
ZXNBdFRhaWwpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICBoZWFkIHJl
Z3M6ICIsIG5vZGVWYWx1ZVBhaXJMaXN0RHVtcChibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwpLCAi
XG4iKTsKICAgICAgICAgfQogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAKaW5kZXggYTZmNWE4OGY1YjI5Y2JkMmUxODFhNGE1YjZmNmNmNWI4YjA4NGQyMC4u
NDRjMjhjNWNmNDJjMWNhOWVkZmZkOWUxMmE5ZjVmNWZkNjZjMmUwYSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NDcsNyArNTQ3LDcgQEAg
dm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJsb2NrLT5zc2EpOwogICAgICAgICAgICAgb3V0
LnByaW50KCIgIEF2YWlsYWJpbGl0eTogIiwgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWls
LCAiXG4iKTsKICAgICAgICAgICAgIG91dC5wcmludCgiICBMaXZlOiAiLCBub2RlTGlzdER1bXAo
YmxvY2stPnNzYS0+bGl2ZUF0VGFpbCksICJcbiIpOwotICAgICAgICAgICAgb3V0LnByaW50KCIg
IFZhbHVlczogIiwgbm9kZU1hcER1bXAoYmxvY2stPnNzYS0+dmFsdWVzQXRUYWlsLCBjb250ZXh0
KSwgIlxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgVmFsdWVzOiAiLCBub2RlVmFsdWVQ
YWlyTGlzdER1bXAoYmxvY2stPnNzYS0+dmFsdWVzQXRUYWlsLCBjb250ZXh0KSwgIlxuIik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfSB9CiAgICAgICAgIG91dC5wcmludCgiXG4iKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0
U3RhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RT
dGF0ZS5jcHAKaW5kZXggMjQ1YmU3ZTNhNWIzOGU5OGZiNzhhM2NmMzg0ZDVkNzRjZTY2ODk3YS4u
MTEwN2U2NjJiMzI0YjVlZGQ5ZDE1YTc5YTVjYTg5YTRhYTA3Y2JkMCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC03NywxMyArNzcsNiBAQCB2b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxv
Y2soQmFzaWNCbG9jayogYmFzaWNCbG9jaykKICAgICBtX3N0cnVjdHVyZUNsb2JiZXJTdGF0ZSA9
IGJhc2ljQmxvY2stPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0SGVhZDsKIH0KIAotc3RhdGlj
IHZvaWQgc2V0TGl2ZVZhbHVlcyhIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiYgdmFsdWVz
LCBjb25zdCBWZWN0b3I8Tm9kZSo+JiBsaXZlTm9kZXMpCi17Ci0gICAgdmFsdWVzLmNsZWFyKCk7
Ci0gICAgZm9yIChOb2RlKiBub2RlIDogbGl2ZU5vZGVzKQotICAgICAgICB2YWx1ZXMuYWRkKG5v
ZGUsIEFic3RyYWN0VmFsdWUoKSk7Ci19Ci0KIHN0YXRpYyB2b2lkIHNldExpdmVWYWx1ZXMoVmVj
dG9yPEJhc2ljQmxvY2s6OlNTQURhdGE6Ok5vZGVBYnN0cmFjdFZhbHVlUGFpcj4mIHZhbHVlcywg
Y29uc3QgVmVjdG9yPE5vZGUqPiYgbGl2ZSkKIHsKICAgICB2YWx1ZXMucmVzaXplKDApOwpAQCAt
MTgzLDI4ICsxNzYsMzAgQEAgYm9vbCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6ZW5kQmFzaWNCbG9j
aygpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBjaGFuZ2Vk
ID0gY2hlY2tBbmRTZXQoYmxvY2stPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0VGFpbCwgbV9z
dHJ1Y3R1cmVDbG9iYmVyU3RhdGUpOworICAgIGNoZWNrQW5kU2V0KGJsb2NrLT5jZmFTdHJ1Y3R1
cmVDbG9iYmVyU3RhdGVBdFRhaWwsIG1fc3RydWN0dXJlQ2xvYmJlclN0YXRlKTsKICAgICAKICAg
ICBzd2l0Y2ggKG1fZ3JhcGgubV9mb3JtKSB7CiAgICAgY2FzZSBUaHJlYWRlZENQUzogewogICAg
ICAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgYmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KSB7CiAgICAgICAgICAgICBB
YnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGJsb2NrLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQo
YXJndW1lbnQpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVN0YXRlQXRUYWlsKGRlc3Rp
bmF0aW9uLCBtX3ZhcmlhYmxlcy5hcmd1bWVudChhcmd1bWVudCksIGJsb2NrLT52YXJpYWJsZXNB
dFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAgICAgICAgIG1lcmdlU3RhdGVBdFRhaWwo
ZGVzdGluYXRpb24sIG1fdmFyaWFibGVzLmFyZ3VtZW50KGFyZ3VtZW50KSwgYmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkpOwogICAgICAgICB9CiAKICAgICAgICAgZm9y
IChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVy
T2ZMb2NhbHMoKTsgKytsb2NhbCkgewogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGlu
YXRpb24gPSBibG9jay0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKTsKLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VTdGF0ZUF0VGFpbChkZXN0aW5hdGlvbiwgbV92YXJpYWJsZXMubG9jYWwo
bG9jYWwpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7CisgICAgICAgICAg
ICBtZXJnZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9uLCBtX3ZhcmlhYmxlcy5sb2NhbChsb2NhbCks
IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpKTsKICAgICAgICAgfQogICAgICAg
ICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFNTQTogewogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGJsb2NrLT52YWx1ZXNBdFRhaWwuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBj
aGFuZ2VkIHw9IGJsb2NrLT52YWx1ZXNBdFRhaWxbaV0ubWVyZ2UobV92YXJpYWJsZXNbaV0pOwor
ICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0VGFpbFtpXS5tZXJnZShtX3ZhcmlhYmxlc1tpXSk7
CiAKLSAgICAgICAgZm9yIChOb2RlKiBub2RlIDogYmxvY2stPnNzYS0+bGl2ZUF0VGFpbCkgewot
ICAgICAgICAgICAgY2hhbmdlZCB8PSBibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwuZmluZChub2Rl
KS0+dmFsdWUubWVyZ2UoZm9yTm9kZShub2RlKSk7CisgICAgICAgIGZvciAoYXV0byYgdmFsdWVB
dFRhaWwgOiBibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwpIHsKKyAgICAgICAgICAgIEFic3RyYWN0
VmFsdWUmIHZhbHVlQXROb2RlID0gZm9yTm9kZSh2YWx1ZUF0VGFpbC5ub2RlKTsKKyAgICAgICAg
ICAgIHZhbHVlQXRUYWlsLnZhbHVlLm1lcmdlKHZhbHVlQXROb2RlKTsKKyAgICAgICAgICAgIHZh
bHVlQXROb2RlID0gdmFsdWVBdFRhaWwudmFsdWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CiAgICAgfQpAQCAtMjI2LDEyICsyMjEsMTIgQEAgdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6
cmVzZXQoKQogICAgIG1fc3RydWN0dXJlQ2xvYmJlclN0YXRlID0gU3RydWN0dXJlc0FyZVdhdGNo
ZWQ7CiB9CiAKLWJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwoQWJz
dHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIGluVmFyaWFibGUsIE5vZGUq
IG5vZGUpCit2b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKEFic3Ry
YWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlKiBu
b2RlKQogewogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAK
LSAgICBBYnN0cmFjdFZhbHVlIHNvdXJjZTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3Qg
QWJzdHJhY3RWYWx1ZSogc291cmNlID0gbnVsbHB0cjsKICAgICAKICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKICAgICBjYXNlIFBoaToKQEAgLTIzOSwzOCArMjM0LDI3IEBAIGJvb2wgSW5QbGFj
ZUFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRp
b24sIEFic3RyYWN0CiAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAgY2FzZSBGbHVzaDoKICAg
ICAgICAgLy8gVGhlIGJsb2NrIHRyYW5zZmVycyB0aGUgdmFsdWUgZnJvbSBoZWFkIHRvIHRhaWwu
Ci0gICAgICAgIHNvdXJjZSA9IGluVmFyaWFibGU7CisgICAgICAgIHNvdXJjZSA9ICZpblZhcmlh
YmxlOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWw6CiAg
ICAgICAgIC8vIFRoZSBibG9jayByZWZpbmVzIHRoZSB2YWx1ZSB3aXRoIGFkZGl0aW9uYWwgc3Bl
Y3VsYXRpb25zLgotICAgICAgICBzb3VyY2UgPSBmb3JOb2RlKG5vZGUpOworICAgICAgICBzb3Vy
Y2UgPSAmZm9yTm9kZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBj
YXNlIFNldExvY2FsOgogICAgICAgICAvLyBUaGUgYmxvY2sgc2V0cyB0aGUgdmFyaWFibGUsIGFu
ZCBwb3RlbnRpYWxseSByZWZpbmVzIGl0LCBib3RoCiAgICAgICAgIC8vIGJlZm9yZSBhbmQgYWZ0
ZXIgc2V0dGluZyBpdC4KLSAgICAgICAgc291cmNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIHNvdXJjZSA9ICZmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgaWYg
KG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5mbHVzaEZvcm1hdCgpID09IEZsdXNoZWREb3Vi
bGUpCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghKHNvdXJjZS5tX3R5cGUgJiB+U3BlY0Z1
bGxEb3VibGUpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEoc291cmNlLT5tX3R5cGUg
JiB+U3BlY0Z1bGxEb3VibGUpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGRlZmF1
bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KLSAgICAKLSAgICBpZiAoZGVzdGluYXRpb24gPT0gc291cmNlKSB7Ci0gICAgICAg
IC8vIEFic3RyYWN0IGV4ZWN1dGlvbiBkaWQgbm90IGNoYW5nZSB0aGUgb3V0cHV0IHZhbHVlIG9m
IHRoZSB2YXJpYWJsZSwgZm9yIHRoaXMKLSAgICAgICAgLy8gYmFzaWMgYmxvY2ssIG9uIHRoaXMg
aXRlcmF0aW9uLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIC8vIEFi
c3RyYWN0IGV4ZWN1dGlvbiByZWFjaGVkIGEgbmV3IGNvbmNsdXNpb24gYWJvdXQgdGhlIHNwZWN1
bGF0aW9ucyByZWFjaGVkIGFib3V0Ci0gICAgLy8gdGhpcyB2YXJpYWJsZSBhZnRlciBleGVjdXRp
b24gb2YgdGhpcyBiYXNpYyBibG9jay4gVXBkYXRlIHRoZSBzdGF0ZSwgYW5kIHJldHVybgotICAg
IC8vIHRydWUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZml4cG9pbnQgbXVzdCBnbyBvbiEKLSAgICBk
ZXN0aW5hdGlvbiA9IHNvdXJjZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZXN0aW5hdGlvbiA9
ICpzb3VyY2U7CiB9CiAKIGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlKEJhc2ljQmxv
Y2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQpAQCAtMzA3LDkgKzI5MSw4IEBAIGJvb2wgSW5QbGFj
ZUFic3RyYWN0U3RhdGU6Om1lcmdlKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQog
ICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogdG8tPnNzYS0+dmFsdWVzQXRIZWFkKSB7CiAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gZW50cnkubm9kZTsKICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgIE1lcmdpbmcgZm9yICIsIG5vZGUsICI6
IGZyb20gIiwgZnJvbS0+c3NhLT52YWx1ZXNBdFRhaWwuZmluZChub2RlKS0+dmFsdWUsICIgdG8g
IiwgZW50cnkudmFsdWUsICJcbiIpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBlbnRyeS52YWx1
ZS5tZXJnZSgKLSAgICAgICAgICAgICAgICBmcm9tLT5zc2EtPnZhbHVlc0F0VGFpbC5maW5kKG5v
ZGUpLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgTWVyZ2luZyBmb3Ig
Iiwgbm9kZSwgIjogZnJvbSAiLCBmb3JOb2RlKG5vZGUpLCAiIHRvICIsIGVudHJ5LnZhbHVlLCAi
XG4iKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gZW50cnkudmFsdWUubWVyZ2UoZm9yTm9kZShu
b2RlKSk7CiAKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgICAgICAgIFJlc3VsdDogIiwgZW50cnkudmFsdWUsICJcbiIpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCmluZGV4IDA2
MGFiNzk5ZmViYTM2NGViMzVhY2VkMzhlOWQzNzA5MzY2OTU4ODguLjk0NTljN2RhMmZjMjc3NWNl
YWEwZGZlM2ZlNDQ1NjkzODhlY2Q5YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgKQEAgLTEyNyw3ICsxMjcsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRGb3VuZENvbnN0YW50cyhib29sIGZvdW5kQ29uc3RhbnRzKSB7IG1f
Zm91bmRDb25zdGFudHMgPSBmb3VuZENvbnN0YW50czsgfQogCiBwcml2YXRlOgotICAgIGJvb2wg
bWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1
ZSYgaW5WYXJpYWJsZSwgTm9kZSopOworICAgIHZvaWQgbWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFj
dFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgaW5WYXJpYWJsZSwgTm9kZSopOwog
CiAgICAgc3RhdGljIGJvb2wgbWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3MoQWJzdHJhY3RWYWx1
ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIHNvdXJjZSwgTm9kZSogZGVzdGluYXRpb25O
b2RlLCBOb2RlKiBzb3VyY2VOb2RlKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGhpQ2hpbGRyZW4uaAppbmRleCA4MDg1MTJlZDEyNjRlNmVhMTk3ZGZmMmYwNDEwZWZmMzNm
M2IxM2YwLi5kZjQ4N2VhMGFiYWE5NTZjMGUyNjZiMTdkNzEzOGJjZmJlZDJjMGNkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5oCkBAIC0zNyw2ICszNyw3IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIEdyYXBoOwogCiBjbGFzcyBQ
aGlDaGlsZHJlbiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAg
dHlwZWRlZiBWZWN0b3I8Tm9kZSosIDM+IExpc3Q7CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285342</attachid>
            <date>2016-08-04 11:46:40 -0700</date>
            <delta_ts>2016-08-04 12:34:43 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-160539-20160804114516.patch</filename>
            <type>text/plain</type>
            <size>15253</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA0MTI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBA
CisyMDE2LTA4LTA0ICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisg
ICAgICAgIFtKU0NdIFNwZWVkIHVwIEluUGxhY2VBYnN0cmFjdFN0YXRlOjplbmRCYXNpY0Jsb2Nr
KCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDUz
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE1hcmsgTGFtLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
ZG9lcyBzbWFsbCBpbXByb3ZlbWVudHMgdG8gb3VyIGhhbmRsaW5nCisgICAgICAgIG9mIHZhbHVl
IHByb3BhZ2F0aW9uIHRvIHRoZSBzdWNjZXNzb3JzLgorCisgICAgICAgIE9uZSBrZXkgaW5zaWdo
dCBpcyB0aGF0IHVzaW5nIEhhc2hNYXAgdG8gbWFwIE5vZGVzCisgICAgICAgIHRvIFZhbHVlIGlu
IHZhbHVlc0F0VGFpbCBpcyB0b28gaW5lZmZpY2llbnQgYXQgdGhlIHNjYWxlCisgICAgICAgIHdl
IHVzZSBpdC4gSW5zdGVhZCwgSSByZXVzZSBvdXIgZXhpc3RpbmcgbWFwcGluZworICAgICAgICBm
cm9tIGV2ZXJ5IE5vZGUgdG8gaXRzIHZhbHVlLCBhYnN0cmFjdGVkIGJ5IGZvck5vZGUoKS4KKwor
ICAgICAgICBTaW5jZSB3ZSBhcmUgbm90IGdvaW5nIHRvIHVzZSB0aGUgbWFwcGluZyBhZnRlciBl
bmRCYXNpY0Jsb2NrKCkKKyAgICAgICAgSSBjYW4gcmVwbGFjZSB3aGF0ZXZlciB3ZSBoYWQgdGhl
cmUuIFRoZSBuZXh0IGJlZ2luQmFzaWNCbG9jaygpCisgICAgICAgIHdpbGwgc2V0dXAgdGhlIG5l
dyB2YWx1ZSBhcyBuZWVkZWQuCisKKyAgICAgICAgSW4gZW5kQmFzaWNCbG9jaygpLCB2YWx1ZXNB
dFRhaWwgaXMgbm93IGEgdmVjdG9yIG9mIGFsbCB2YWx1ZXMgbGl2ZQorICAgICAgICBhdCB0YWls
LiBGb3IgZWFjaCBub2RlLCBJIG1lcmdlIHRoZSBwcmV2aW91cyBsaXZlIGF0IHRhaWwgd2l0aAor
ICAgICAgICB0aGUgbmV3IHZhbHVlLCB0aGVuIHJlcGxhY2UgdGhlIHZhbHVlIGluIHRoZSBtYXBw
aW5nLgorICAgICAgICBMaXZlbmVzcyBBbmFseXNpcyBndWFyYW50ZWVzIHdlIHdvbid0IGhhdmUg
ZHVwbGljYXRlcyB0aGVyZSB3aGljaAorICAgICAgICBtYWtlIHRoZSByZXBsYWNlbWVudCBzb3Vu
ZC4KKworICAgICAgICBOZXh0LCB3aGVuIHByb3BhZ2F0aW5nLCBJIHRha2UgdGhlIHZlY3RvciBv
ZiB2YWx1ZXMgbGl2ZXMgYXQgaGVhZAorICAgICAgICBhbmQgdXNlIHRoZSBnbG9iYWwgbm9kZS0+
dmFsdWUgbWFwcGluZyB0byBmaW5kIGl0cyBuZXcgYWJzdHJhY3QgdmFsdWUuCisgICAgICAgIEFn
YWluLCBMaXZlbmVzcyBBbmFseXNpcyBndWFyYW50ZWVzIEkgd29uJ3QgZmluZCBhIHZhbHVlIGxp
dmUgYXQgaGVhZAorICAgICAgICB0aGF0IHdhcyBub3QgcmVwbGFjZWQgYnkgdGhlIG1lcmdpbmcg
YXQgdGFpbCBvZiB0aGUgcHJlZGVjZXNzb3IuCisKKyAgICAgICAgQWxsIG91ciBsaXZlIGxpc3Rz
IGhhdmUgYmVjb21lIHZlY3RvcnMgaW5zdGVhZCBvZiBIYXNoVGFibGUuCisgICAgICAgIFRoZSBt
YXBwaW5nIGZyb20gTm9kZSB0byBWYWx1ZSBpcyBhbHdheXMgZG9uZSBieSBhcnJheSBpbmRleGlu
Zy4KKyAgICAgICAgU2FtZSBiaWctTywgbXVjaCBzbWFsbGVyIGNvbnN0YW50LgorCisgICAgICAg
ICogZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkF0
VGFpbEFic3RyYWN0U3RhdGU6OkF0VGFpbEFic3RyYWN0U3RhdGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6OmNyZWF0ZVZhbHVlRm9yTm9kZSk6CisgICAgICAgIChK
U0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6Zm9yTm9kZSk6CisgICAgICAgICogZGZnL0RG
R0F0VGFpbEFic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgSSBkaWQgbm90IGxvb2sgbXVjaCBpbnRv
IHRoaXMgc3RhdGUsIEkganVzdCBtYWRlIGl0IGVxdWl2YWxlbnQKKyAgICAgICAgdG8gdGhlIHBy
ZXZpb3VzIG1hcHBpbmcuCisKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5oOgorICAgICAg
ICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhhc2U6OnBl
cmZvcm1CbG9ja0NGQSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0
YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6ZW5kQmFz
aWNCbG9jayk6CisKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6bWVy
Z2VTdGF0ZUF0VGFpbCk6CisgICAgICAgIEFic3RyYWN0VmFsdWUgaXMgYmlnIGVub3VnaCB0aGF0
IHdlIHJlYWxseSBkb24ndCB3YW50IHRvIGNvcHkgaXQgdHdpY2UuCisKKyAgICAgICAgKEpTQzo6
REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6bWVyZ2UpOgorICAgICAgICAoSlNDOjpERkc6OnNl
dExpdmVWYWx1ZXMpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RT
dGF0ZS5oOgorCisgICAgICAgICogZGZnL0RGR1BoaUNoaWxkcmVuLmg6CisgICAgICAgIFRoaXMg
aXMgaGVhcCBhbGxvY2F0ZWQgYnkgQWJzdHJhY3RJbnRlcnByZXRlci4gSXQgc2hvdWxkIHVzZSBm
YXN0TWFsbG9jKCkuCisKIDIwMTYtMDgtMDQgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBn
bWFpbC5jb20+CiAKICAgICAgICAgW0VTN10gVXBkYXRlIGZlYXR1cmVzLmpzb24gZm9yIGV4cG9u
ZW50aWF0aW9uIGV4cHJlc3Npb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMjA0MTI3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrTWFwSW5saW5l
cy5oIgogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKQEAgLTM0LDIxICszNSwyOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIEF0VGFpbEFic3RyYWN0U3RhdGU6OkF0VGFpbEFi
c3RyYWN0U3RhdGUoR3JhcGgmIGdyYXBoKQogICAgIDogbV9ncmFwaChncmFwaCkKLSAgICAsIG1f
YmxvY2soMCkKKyAgICAsIG1fdmFsdWVzQXRUYWlsTWFwKG1fZ3JhcGgpCiB7CisgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IGdyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAg
ICAgYXV0byYgdmFsdWVzQXRUYWlsID0gbV92YWx1ZXNBdFRhaWxNYXAuYXQoYmxvY2spOworICAg
ICAgICB2YWx1ZXNBdFRhaWwuY2xlYXIoKTsKKyAgICAgICAgZm9yIChhdXRvJiB2YWx1ZUF0VGFp
bFBhaXIgOiBibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwpCisgICAgICAgICAgICB2YWx1ZXNBdFRh
aWwuYWRkKHZhbHVlQXRUYWlsUGFpci5ub2RlLCB2YWx1ZUF0VGFpbFBhaXIudmFsdWUpOworICAg
IH0KIH0KIAogQXRUYWlsQWJzdHJhY3RTdGF0ZTo6fkF0VGFpbEFic3RyYWN0U3RhdGUoKSB7IH0K
IAogdm9pZCBBdFRhaWxBYnN0cmFjdFN0YXRlOjpjcmVhdGVWYWx1ZUZvck5vZGUoTm9kZSogbm9k
ZSkKIHsKLSAgICBtX2Jsb2NrLT5zc2EtPnZhbHVlc0F0VGFpbC5hZGQobm9kZSwgQWJzdHJhY3RW
YWx1ZSgpKTsKKyAgICBtX3ZhbHVlc0F0VGFpbE1hcC5hdChtX2Jsb2NrKS5hZGQobm9kZSwgQWJz
dHJhY3RWYWx1ZSgpKTsKIH0KIAogQWJzdHJhY3RWYWx1ZSYgQXRUYWlsQWJzdHJhY3RTdGF0ZTo6
Zm9yTm9kZShOb2RlKiBub2RlKQogewotICAgIEhhc2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+
OjppdGVyYXRvciBpdGVyID0gbV9ibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwuZmluZChub2RlKTsK
LSAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIGl0ZXIgIT0gbV9ibG9jay0+c3NhLT52YWx1
ZXNBdFRhaWwuZW5kKCkpOworICAgIGF1dG8mIHZhbHVlc0F0VGFpbCA9IG1fdmFsdWVzQXRUYWls
TWFwLmF0KG1fYmxvY2spOworICAgIEhhc2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+OjppdGVy
YXRvciBpdGVyID0gdmFsdWVzQXRUYWlsLmZpbmQobm9kZSk7CisgICAgREZHX0FTU0VSVChtX2dy
YXBoLCBub2RlLCBpdGVyICE9IHZhbHVlc0F0VGFpbC5lbmQoKSk7CiAgICAgcmV0dXJuIGl0ZXIt
PnZhbHVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFi
c3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0F0VGFpbEFic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMjA0MTI3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRGR0Fic3RyYWN0VmFsdWUuaCIKICNpbmNsdWRl
ICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiREZHQmxvY2tNYXAuaCIKICNpbmNsdWRlICJE
RkdHcmFwaC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7IApAQCAtNjYsNyAr
NjcsOCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgR3JhcGgmIG1fZ3JhcGg7Ci0gICAgQmFz
aWNCbG9jayogbV9ibG9jazsKKyAgICBCbG9ja01hcDxIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZh
bHVlPj4gbV92YWx1ZXNBdFRhaWxNYXA7CisgICAgQmFzaWNCbG9jayogbV9ibG9jayB7IG51bGxw
dHIgfTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAyMDQxMjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MjU3LDcgKzI1Nyw3IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MK
ICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWU7CiAgICAgICAgIH07CiAgICAgICAgIFZl
Y3RvcjxOb2RlQWJzdHJhY3RWYWx1ZVBhaXI+IHZhbHVlc0F0SGVhZDsKLSAgICAgICAgSGFzaE1h
cDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRUYWlsOworICAgICAgICBWZWN0b3I8Tm9k
ZUFic3RyYWN0VmFsdWVQYWlyPiB2YWx1ZXNBdFRhaWw7CiAgICAgICAgIAogICAgICAgICBTU0FE
YXRhKEJhc2ljQmxvY2sqKTsKICAgICAgICAgflNTQURhdGEoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAyMDQxMjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTE5MCw3ICsxOTAsNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAobV92ZXJi
b3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICB0YWlsIHZhcnM6ICIsIGJsb2NrLT52
YWx1ZXNBdFRhaWwsICJcbiIpOwogICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNT
QSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICBoZWFkIHJlZ3M6ICIsIG1hcER1bXAo
YmxvY2stPnNzYS0+dmFsdWVzQXRUYWlsKSwgIlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgICAgaGVhZCByZWdzOiAiLCBub2RlVmFsdWVQYWlyTGlzdER1bXAoYmxvY2stPnNzYS0+
dmFsdWVzQXRUYWlsKSwgIlxuIik7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMjA0MTI3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLTIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01NDcsNyArNTQ3LDcgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0LCBEdW1wQwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmxvY2stPnNzYSk7CiAgICAg
ICAgICAgICBvdXQucHJpbnQoIiAgQXZhaWxhYmlsaXR5OiAiLCBibG9jay0+c3NhLT5hdmFpbGFi
aWxpdHlBdFRhaWwsICJcbiIpOwogICAgICAgICAgICAgb3V0LnByaW50KCIgIExpdmU6ICIsIG5v
ZGVMaXN0RHVtcChibG9jay0+c3NhLT5saXZlQXRUYWlsKSwgIlxuIik7Ci0gICAgICAgICAgICBv
dXQucHJpbnQoIiAgVmFsdWVzOiAiLCBub2RlTWFwRHVtcChibG9jay0+c3NhLT52YWx1ZXNBdFRh
aWwsIGNvbnRleHQpLCAiXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICBWYWx1ZXM6ICIs
IG5vZGVWYWx1ZVBhaXJMaXN0RHVtcChibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwsIGNvbnRleHQp
LCAiXG4iKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9IH0KICAgICAgICAgb3V0LnBy
aW50KCJcbiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJz
dHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDIwNDEyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtODAsMTMgKzgwLDYgQEAgdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6YmVnaW5C
YXNpY0JsbwogICAgIG1fc3RydWN0dXJlQ2xvYmJlclN0YXRlID0gYmFzaWNCbG9jay0+Y2ZhU3Ry
dWN0dXJlQ2xvYmJlclN0YXRlQXRIZWFkOwogfQogCi1zdGF0aWMgdm9pZCBzZXRMaXZlVmFsdWVz
KEhhc2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+JiB2YWx1ZXMsIGNvbnN0IFZlY3RvcjxOb2Rl
Kj4mIGxpdmVOb2RlcykKLXsKLSAgICB2YWx1ZXMuY2xlYXIoKTsKLSAgICBmb3IgKE5vZGUqIG5v
ZGUgOiBsaXZlTm9kZXMpCi0gICAgICAgIHZhbHVlcy5hZGQobm9kZSwgQWJzdHJhY3RWYWx1ZSgp
KTsKLX0KLQogc3RhdGljIHZvaWQgc2V0TGl2ZVZhbHVlcyhWZWN0b3I8QmFzaWNCbG9jazo6U1NB
RGF0YTo6Tm9kZUFic3RyYWN0VmFsdWVQYWlyPiYgdmFsdWVzLCBjb25zdCBWZWN0b3I8Tm9kZSo+
JiBsaXZlKQogewogICAgIHZhbHVlcy5yZXNpemUoMCk7CkBAIC0xODUsMjkgKzE3OCwzMSBAQCBi
b29sIEluUGxhY2VBYnN0cmFjdFN0YXRlOjplbmRCYXNpY0Jsb2NrCiAgICAgICAgIHJlc2V0KCk7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCi0gICAgYm9vbCBjaGFuZ2VkID0g
Y2hlY2tBbmRTZXQoYmxvY2stPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0VGFpbCwgbV9zdHJ1
Y3R1cmVDbG9iYmVyU3RhdGUpOwotICAgIAorCisgICAgYmxvY2stPmNmYVN0cnVjdHVyZUNsb2Ji
ZXJTdGF0ZUF0VGFpbCA9IG1fc3RydWN0dXJlQ2xvYmJlclN0YXRlOworCiAgICAgc3dpdGNoICht
X2dyYXBoLm1fZm9ybSkgewogICAgIGNhc2UgVGhyZWFkZWRDUFM6IHsKICAgICAgICAgZm9yIChz
aXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVt
YmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsK
LSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTdGF0ZUF0VGFpbChkZXN0aW5hdGlvbiwgbV92
YXJpYWJsZXMuYXJndW1lbnQoYXJndW1lbnQpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3Vt
ZW50KGFyZ3VtZW50KSk7CisgICAgICAgICAgICBtZXJnZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9u
LCBtX3ZhcmlhYmxlcy5hcmd1bWVudChhcmd1bWVudCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
YXJndW1lbnQoYXJndW1lbnQpKTsKICAgICAgICAgfQogCiAgICAgICAgIGZvciAoc2l6ZV90IGxv
Y2FsID0gMDsgbG9jYWwgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7
ICsrbG9jYWwpIHsKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxv
Y2stPnZhbHVlc0F0VGFpbC5sb2NhbChsb2NhbCk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIG1fdmFyaWFibGVzLmxvY2FsKGxvY2FsKSwgYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOworICAgICAgICAgICAgbWVyZ2VTdGF0
ZUF0VGFpbChkZXN0aW5hdGlvbiwgbV92YXJpYWJsZXMubG9jYWwobG9jYWwpLCBibG9jay0+dmFy
aWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCiAgICAgY2FzZSBTU0E6IHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBi
bG9jay0+dmFsdWVzQXRUYWlsLnNpemUoKTsgKytpKQotICAgICAgICAgICAgY2hhbmdlZCB8PSBi
bG9jay0+dmFsdWVzQXRUYWlsW2ldLm1lcmdlKG1fdmFyaWFibGVzW2ldKTsKKyAgICAgICAgICAg
IGJsb2NrLT52YWx1ZXNBdFRhaWxbaV0ubWVyZ2UobV92YXJpYWJsZXNbaV0pOwogCi0gICAgICAg
IGZvciAoTm9kZSogbm9kZSA6IGJsb2NrLT5zc2EtPmxpdmVBdFRhaWwpIHsKLSAgICAgICAgICAg
IGNoYW5nZWQgfD0gYmxvY2stPnNzYS0+dmFsdWVzQXRUYWlsLmZpbmQobm9kZSktPnZhbHVlLm1l
cmdlKGZvck5vZGUobm9kZSkpOworICAgICAgICBmb3IgKGF1dG8mIHZhbHVlQXRUYWlsIDogYmxv
Y2stPnNzYS0+dmFsdWVzQXRUYWlsKSB7CisgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1
ZUF0Tm9kZSA9IGZvck5vZGUodmFsdWVBdFRhaWwubm9kZSk7CisgICAgICAgICAgICB2YWx1ZUF0
VGFpbC52YWx1ZS5tZXJnZSh2YWx1ZUF0Tm9kZSk7CisgICAgICAgICAgICB2YWx1ZUF0Tm9kZSA9
IHZhbHVlQXRUYWlsLnZhbHVlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAg
LTIyOSwxMiArMjI0LDEyIEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OnJlc2V0KCkKICAg
ICBtX3N0cnVjdHVyZUNsb2JiZXJTdGF0ZSA9IFN0cnVjdHVyZXNBcmVXYXRjaGVkOwogfQogCi1i
b29sIEluUGxhY2VBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUm
IGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlKiBub2RlKQordm9p
ZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBk
ZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgaW5WYXJpYWJsZSwgTm9kZSogbm9kZSkKIHsKICAg
ICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgQWJzdHJh
Y3RWYWx1ZSBzb3VyY2U7CisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEFic3RyYWN0VmFs
dWUqIHNvdXJjZSA9IG51bGxwdHI7CiAgICAgCiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAg
ICAgY2FzZSBQaGk6CkBAIC0yNDIsMzggKzIzNywyNyBAQCBib29sIEluUGxhY2VBYnN0cmFjdFN0
YXRlOjptZXJnZVN0YXRlQXRUCiAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAgY2FzZSBGbHVz
aDoKICAgICAgICAgLy8gVGhlIGJsb2NrIHRyYW5zZmVycyB0aGUgdmFsdWUgZnJvbSBoZWFkIHRv
IHRhaWwuCi0gICAgICAgIHNvdXJjZSA9IGluVmFyaWFibGU7CisgICAgICAgIHNvdXJjZSA9ICZp
blZhcmlhYmxlOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0TG9j
YWw6CiAgICAgICAgIC8vIFRoZSBibG9jayByZWZpbmVzIHRoZSB2YWx1ZSB3aXRoIGFkZGl0aW9u
YWwgc3BlY3VsYXRpb25zLgotICAgICAgICBzb3VyY2UgPSBmb3JOb2RlKG5vZGUpOworICAgICAg
ICBzb3VyY2UgPSAmZm9yTm9kZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAvLyBUaGUgYmxvY2sgc2V0cyB0aGUgdmFyaWFi
bGUsIGFuZCBwb3RlbnRpYWxseSByZWZpbmVzIGl0LCBib3RoCiAgICAgICAgIC8vIGJlZm9yZSBh
bmQgYWZ0ZXIgc2V0dGluZyBpdC4KLSAgICAgICAgc291cmNlID0gZm9yTm9kZShub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgIHNvdXJjZSA9ICZmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAg
ICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5mbHVzaEZvcm1hdCgpID09IEZsdXNo
ZWREb3VibGUpCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghKHNvdXJjZS5tX3R5cGUgJiB+
U3BlY0Z1bGxEb3VibGUpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEoc291cmNlLT5t
X3R5cGUgJiB+U3BlY0Z1bGxEb3VibGUpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAg
IGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KLSAgICAKLSAgICBpZiAoZGVzdGluYXRpb24gPT0gc291cmNlKSB7Ci0g
ICAgICAgIC8vIEFic3RyYWN0IGV4ZWN1dGlvbiBkaWQgbm90IGNoYW5nZSB0aGUgb3V0cHV0IHZh
bHVlIG9mIHRoZSB2YXJpYWJsZSwgZm9yIHRoaXMKLSAgICAgICAgLy8gYmFzaWMgYmxvY2ssIG9u
IHRoaXMgaXRlcmF0aW9uLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAg
IC8vIEFic3RyYWN0IGV4ZWN1dGlvbiByZWFjaGVkIGEgbmV3IGNvbmNsdXNpb24gYWJvdXQgdGhl
IHNwZWN1bGF0aW9ucyByZWFjaGVkIGFib3V0Ci0gICAgLy8gdGhpcyB2YXJpYWJsZSBhZnRlciBl
eGVjdXRpb24gb2YgdGhpcyBiYXNpYyBibG9jay4gVXBkYXRlIHRoZSBzdGF0ZSwgYW5kIHJldHVy
bgotICAgIC8vIHRydWUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZml4cG9pbnQgbXVzdCBnbyBvbiEK
LSAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZXN0aW5h
dGlvbiA9ICpzb3VyY2U7CiB9CiAKIGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlKEJh
c2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQpAQCAtMzEwLDkgKzI5NCwxOSBAQCBib29s
IEluUGxhY2VBYnN0cmFjdFN0YXRlOjptZXJnZShCYXNpY0JsCiAgICAgICAgIGZvciAoYXV0byYg
ZW50cnkgOiB0by0+c3NhLT52YWx1ZXNBdEhlYWQpIHsKICAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBlbnRyeS5ub2RlOwogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgICAgTWVyZ2luZyBmb3IgIiwgbm9kZSwgIjogZnJvbSAiLCBmcm9tLT5zc2Et
PnZhbHVlc0F0VGFpbC5maW5kKG5vZGUpLT52YWx1ZSwgIiB0byAiLCBlbnRyeS52YWx1ZSwgIlxu
Iik7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IGVudHJ5LnZhbHVlLm1lcmdlKAotICAgICAgICAg
ICAgICAgIGZyb20tPnNzYS0+dmFsdWVzQXRUYWlsLmZpbmQobm9kZSktPnZhbHVlKTsKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgICBNZXJnaW5nIGZvciAiLCBub2RlLCAiOiBmcm9tICIs
IGZvck5vZGUobm9kZSksICIgdG8gIiwgZW50cnkudmFsdWUsICJcbiIpOworI2lmbmRlZiBOREVC
VUcKKyAgICAgICAgICAgIHVuc2lnbmVkIHZhbHVlQ291bnRJbkZyb21CbG9jayA9IDA7CisgICAg
ICAgICAgICBmb3IgKGF1dG8mIGZyb21CbG9ja1ZhbHVlQXRUYWlsIDogZnJvbS0+c3NhLT52YWx1
ZXNBdFRhaWwpIHsKKyAgICAgICAgICAgICAgICBpZiAoZnJvbUJsb2NrVmFsdWVBdFRhaWwubm9k
ZSA9PSBub2RlKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChmcm9tQmxvY2tWYWx1ZUF0
VGFpbC52YWx1ZSA9PSBmb3JOb2RlKG5vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgKyt2YWx1
ZUNvdW50SW5Gcm9tQmxvY2s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgQVNTRVJUKHZhbHVlQ291bnRJbkZyb21CbG9jayA9PSAxKTsKKyNlbmRpZgorCisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IGVudHJ5LnZhbHVlLm1lcmdlKGZvck5vZGUobm9kZSkpOwog
CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
ICAgICBSZXN1bHQ6ICIsIGVudHJ5LnZhbHVlLCAiXG4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9u
IDIwNDEyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0
U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldEZvdW5kQ29uc3RhbnRzKGJvb2wgZm91bmRDb25zdGFudHMpIHsgbV9mb3VuZENvbnN0
YW50cyA9IGZvdW5kQ29uc3RhbnRzOyB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBtZXJnZVN0YXRl
QXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlh
YmxlLCBOb2RlKik7CisgICAgdm9pZCBtZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRl
c3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlKik7CiAKICAgICBzdGF0
aWMgYm9vbCBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0aW5h
dGlvbiwgQWJzdHJhY3RWYWx1ZSYgc291cmNlLCBOb2RlKiBkZXN0aW5hdGlvbk5vZGUsIE5vZGUq
IHNvdXJjZU5vZGUpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
aGlDaGlsZHJlbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGhpQ2hpbGRyZW4uaAkocmV2aXNpb24gMjA0MTI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQaGlDaGlsZHJlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIEdyYXBoOwogCiBjbGFzcyBQaGlD
aGlsZHJlbiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgdHlw
ZWRlZiBWZWN0b3I8Tm9kZSosIDM+IExpc3Q7CiAgICAgCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>