<?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>186218</bug_id>
          
          <creation_ts>2018-06-01 18:29:54 -0700</creation_ts>
          <short_desc>Make DFG to FTL OSR entry code more sane by removing bad RELEASE_ASSERTS and making it trigger compiles in outer loops before inner ones</short_desc>
          <delta_ts>2018-06-07 01:45:06 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1429461</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-06-01 18:29:54 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429464</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-06-01 18:36:39 -0700</bug_when>
    <thetext>The code is pretty much spaghetti. I&apos;m not sure I can succeed at making the code not be spaghetti, but I think I have the code paged in enough now to at least call BS on some stuff we&apos;re doing in it.

A few things:
- We don&apos;t attempt an OSR entry if the worklist tells us code is compiled. I have no idea why this line of code was added, but it looks wrong and makes no sense. We should obviously attempt to do OSR entry if we have compiled code.
- JF accidentally reverted the thing where we wanted to compile the outer most loop. Ben originally checked in code that walked each entry in a loop vector (from inner to outer loop) while updating some state. So after this loop, the state was set for the outermost loop. JF changed this to always use the inner-most loop meeting the condition that it has executed. I don&apos;t know which heuristic is better, but let&apos;s try going back to Ben&apos;s to see what happens. We should also pick our heuristic based on actually understanding what it&apos;s doing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429466</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-06-01 18:49:07 -0700</bug_when>
    <thetext>There are also some asserts in this code that make no sense and are causing some crashes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429467</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-06-01 18:49:35 -0700</bug_when>
    <thetext>&lt;rdar://problem/38449540&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429846</commentid>
    <comment_count>4</comment_count>
      <attachid>341907</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-06-04 09:56:59 -0700</bug_when>
    <thetext>Created attachment 341907
WIP

Was neutral when running benchmarks yesterday.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429903</commentid>
    <comment_count>5</comment_count>
      <attachid>341918</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-06-04 14:30:10 -0700</bug_when>
    <thetext>Created attachment 341918
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429920</commentid>
    <comment_count>6</comment_count>
      <attachid>341918</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-06-04 15:11:46 -0700</bug_when>
    <thetext>Comment on attachment 341918
patch

Nice. My own test is crashing. Will investigate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429941</commentid>
    <comment_count>7</comment_count>
      <attachid>341929</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-06-04 15:51:34 -0700</bug_when>
    <thetext>Created attachment 341929
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1430740</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-06-07 00:03:41 -0700</bug_when>
    <thetext>Seems neutral

Sunspider:
                                      og                      change                                      

3d-cube                         4.5335+-0.1077     ?      4.6629+-0.0807        ? might be 1.0285x slower
3d-morph                        5.2291+-0.1263            5.1328+-0.0658          might be 1.0188x faster
3d-raytrace                     4.7025+-0.1467            4.6687+-0.1229        
access-binary-trees             2.2823+-0.2093            2.1710+-0.1428          might be 1.0512x faster
access-fannkuch                 5.5396+-0.1272     ?      5.5463+-0.0916        ?
access-nbody                    2.7476+-0.1233            2.7282+-0.0779        
access-nsieve                   3.1159+-0.1296     ?      3.1821+-0.1498        ? might be 1.0212x slower
bitops-3bit-bits-in-byte        1.4203+-0.1298            1.3092+-0.0808          might be 1.0849x faster
bitops-bits-in-byte             2.9642+-0.0848     ?      3.0125+-0.1396        ? might be 1.0163x slower
bitops-bitwise-and              2.1775+-0.0766     ?      2.2126+-0.0845        ? might be 1.0161x slower
bitops-nsieve-bits              3.3507+-0.0700     ?      3.3660+-0.0982        ?
controlflow-recursive           2.3530+-0.1136            2.2644+-0.0733          might be 1.0391x faster
crypto-aes                      4.0562+-0.0772            4.0416+-0.0827        
crypto-md5                      2.7751+-0.1757            2.6402+-0.1053          might be 1.0511x faster
crypto-sha1                     2.8923+-0.1846            2.8741+-0.1434        
date-format-tofte               7.0804+-0.1632            7.0679+-0.1263        
date-format-xparb               5.4023+-0.0999            5.3899+-0.0985        
math-cordic                     2.9918+-0.1129            2.9692+-0.0900        
math-partial-sums               4.2851+-0.1162            4.2399+-0.1400          might be 1.0107x faster
math-spectral-norm              2.0139+-0.0494     ?      2.0525+-0.0791        ? might be 1.0192x slower
regexp-dna                      6.5818+-0.1474            6.5427+-0.1504        
string-base64                   3.9331+-0.1251     ?      3.9738+-0.0988        ? might be 1.0103x slower
string-fasta                    5.8509+-0.1165            5.8083+-0.1007        
string-tagcloud                 8.4712+-0.1865            8.4419+-0.1233        
string-unpack-code             18.1376+-0.2609     ?     18.2486+-0.2149        ?
string-validate-input           4.1932+-0.1413            4.0808+-0.1479          might be 1.0276x faster

&lt;arithmetic&gt;                    4.5800+-0.0283            4.5626+-0.0240          might be 1.0038x faster


Kraken:
                                              og                      change                                      

ai-astar                                86.353+-1.122             86.272+-0.970         
audio-beat-detection                    38.702+-0.824             37.905+-0.207           might be 1.0210x faster
audio-dft                               96.943+-0.911             96.321+-0.860         
audio-fft                               28.677+-0.319             28.555+-0.089         
audio-oscillator                        45.035+-0.874      ?      45.211+-0.740         ?
imaging-darkroom                        59.196+-0.420      ?      59.769+-0.621         ?
imaging-desaturate                      46.241+-1.354      ?      46.323+-1.287         ?
imaging-gaussian-blur                   61.823+-1.908      ?      61.889+-1.298         ?
json-parse-financial                    29.924+-0.602             29.341+-0.801           might be 1.0199x faster
json-stringify-tinderbox                19.285+-0.580      ?      19.461+-0.596         ?
stanford-crypto-aes                     45.266+-0.595             44.823+-0.694         
stanford-crypto-ccm                     40.188+-1.709      ?      42.222+-1.663         ? might be 1.0506x slower
stanford-crypto-pbkdf2                  59.240+-1.337             58.292+-0.998           might be 1.0163x faster
stanford-crypto-sha256-iterative        18.484+-0.198      ?      18.674+-0.319         ? might be 1.0103x slower

&lt;arithmetic&gt;                            48.240+-0.227             48.218+-0.196           might be 1.0004x faster

Octane:
                               og                      change                                      

encrypt                 0.14226+-0.00107    ?     0.14250+-0.00157       ?
decrypt                 2.52060+-0.05236          2.50127+-0.01857       
deltablue      x2       0.13210+-0.00695    ?     0.13668+-0.00739       ? might be 1.0347x slower
earley                  0.27072+-0.00190          0.27002+-0.00160       
boyer                   4.08958+-0.03067          4.06981+-0.03893       
navier-stokes  x2       4.71916+-0.03640    ?     4.72684+-0.02003       ?
raytrace       x2       0.69958+-0.00671          0.69796+-0.00355       
richards       x2       0.07551+-0.00057    ?     0.07637+-0.00087       ? might be 1.0114x slower
splay          x2       0.23196+-0.00337          0.22936+-0.00304         might be 1.0113x faster
regexp         x2      17.02444+-0.26960    ?    17.05077+-0.24658       ?
pdfjs          x2      32.98554+-0.27433         32.85914+-0.15934       
mandreel       x2      42.67114+-0.50024         42.62337+-0.48825       
gbemu          x2      30.25326+-0.37371         30.21056+-0.37130       
closure                 0.51465+-0.00412          0.51294+-0.00347       
jquery                  6.89535+-0.05234    ?     6.93038+-0.03677       ?
box2d          x2       8.17766+-0.04043          8.16934+-0.03734       
zlib           x2     290.31449+-1.30404    ?   291.47037+-1.64223       ?
typescript     x2     616.77960+-11.47325       616.16953+-6.53855       
splay-latency           2.29834+-0.15146          2.25637+-0.15124         might be 1.0186x faster

&lt;geometric&gt;             4.52523+-0.02523    ?     4.52979+-0.02359       ? might be 1.0010x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1430749</commentid>
    <comment_count>9</comment_count>
      <attachid>342131</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-06-07 00:12:00 -0700</bug_when>
    <thetext>Created attachment 342131
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1430776</commentid>
    <comment_count>10</comment_count>
      <attachid>342131</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-06-07 01:45:05 -0700</bug_when>
    <thetext>Comment on attachment 342131
patch for landing

Clearing flags on attachment: 342131

Committed r232578: &lt;https://trac.webkit.org/changeset/232578&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1430777</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-06-07 01:45:06 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341907</attachid>
            <date>2018-06-04 09:56:59 -0700</date>
            <delta_ts>2018-06-04 14:30:10 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>12708</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMjMyNDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAxOCw3ICszMDE4LDcgQEAgdm9pZCBKSVRfT1BFUkFU
SU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlYwogICAgIH0KIH0KIAotc3RhdGljIGNoYXIqIHRpZXJV
cENvbW1vbihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG9yaWdpbkJ5dGVjb2RlSW5kZXgsIHVu
c2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKK3N0YXRpYyBjaGFyKiB0aWVyVXBDb21tb24o
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBvcmlnaW5CeXRlY29kZUluZGV4KQogewogICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29k
ZUJsb2NrKCk7CkBAIC0zMDMyLDEwICszMDMyLDYgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1v
bihFeGVjU3RhdGUqIGV4ZQogICAgICAgICB3b3JrbGlzdFN0YXRlID0gV29ya2xpc3Q6Ok5vdEtu
b3duOwogCiAgICAgSklUQ29kZSogaml0Q29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmco
KTsKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgb25seSB0cnVlIGZvciB0cmlnZ2VyVGllclVw
Tm93SW5Mb29wLCB3aGljaCBjYW4gbmV2ZXIKLSAgICAvLyBiZSBhbiBPU1IgZW50cnkuCi0gICAg
Ym9vbCBjYW5PU1JGcm9tSGVyZSA9IG9yaWdpbkJ5dGVjb2RlSW5kZXggPT0gb3NyRW50cnlCeXRl
Y29kZUluZGV4OwogICAgIAogICAgIGJvb2wgdHJpZ2dlcmVkU2xvd1BhdGhUb1N0YXJ0Q29tcGls
YXRpb24gPSBmYWxzZTsKICAgICBhdXRvIHRpZXJVcEVudHJ5VHJpZ2dlcnMgPSBqaXRDb2RlLT50
aWVyVXBFbnRyeVRyaWdnZXJzLmZpbmQob3JpZ2luQnl0ZWNvZGVJbmRleCk7CkBAIC0zMDQ5LDE0
ICszMDQ1LDEyIEBAIHN0YXRpYyBjaGFyKiB0aWVyVXBDb21tb24oRXhlY1N0YXRlKiBleGUKICAg
ICAgICAgY2FzZSBKSVRDb2RlOjpUcmlnZ2VyUmVhc29uOjpDb21waWxhdGlvbkRvbmU6CiAgICAg
ICAgICAgICAvLyBUaGUgdHJpZ2dlciB3YXMgc2V0IGJlY2F1c2UgY29tcGlsYXRpb24gY29tcGxl
dGVkLiBEb24ndCB1bnNldCBpdAogICAgICAgICAgICAgLy8gc28gdGhhdCBmdXJ0aGVyIERGRyBl
eGVjdXRpb25zIE9TUiBlbnRlcnMgYXMgd2VsbC4KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGNhbk9TUkZyb21IZXJlKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgSklU
Q29kZTo6VHJpZ2dlclJlYXNvbjo6U3RhcnRDb21waWxhdGlvbjoKICAgICAgICAgICAgIC8vIFdl
IHdlcmUgYXNrZWQgdG8gZW50ZXIgYXMgc29vbiBhcyBwb3NzaWJsZSBhbmQgc3RhcnQgY29tcGls
aW5nIGFuCiAgICAgICAgICAgICAvLyBlbnRyeSBmb3IgdGhlIGN1cnJlbnQgYnl0ZWNvZGUgbG9j
YXRpb24uIFVuc2V0IHRoaXMgdHJpZ2dlciBzbyB3ZQogICAgICAgICAgICAgLy8gZG9uJ3QgY29u
dGludWFsbHkgZW50ZXIuCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYW5PU1JGcm9tSGVy
ZSk7CiAgICAgICAgICAgICB0aWVyVXBFbnRyeVRyaWdnZXJzLT52YWx1ZSA9IEpJVENvZGU6OlRy
aWdnZXJSZWFzb246OkRvbnRUcmlnZ2VyOwogICAgICAgICAgICAgdHJpZ2dlcmVkU2xvd1BhdGhU
b1N0YXJ0Q29tcGlsYXRpb24gPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0zMDY1LDEx
ICszMDU5LDMwIEBAIHN0YXRpYyBjaGFyKiB0aWVyVXBDb21tb24oRXhlY1N0YXRlKiBleGUKIAog
ICAgIGlmICh3b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0OjpDb21waWxpbmcpIHsKICAgICAgICAg
Q09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJkZWxheUZUTENvbXBpbGUiLCAoInN0aWxs
IGNvbXBpbGluZyIpKTsKLSAgICAgICAgaml0Q29kZS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xk
QmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KAotICAgICAgICAgICAgY29kZUJsb2NrLCBDb21waWxh
dGlvbkRlZmVycmVkKTsKKyAgICAgICAgaml0Q29kZS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xk
QmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KGNvZGVCbG9jaywgQ29tcGlsYXRpb25EZWZlcnJlZCk7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAorICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBkb1ByaW50ID0gZmFsc2U7CisKKyAgICAvLyBJZiB3ZSBjYW4gT1NSIEVudGVyLCBkbyBp
dCByaWdodCBhd2F5LgorICAgIHsKKyAgICAgICAgYXV0byBpdGVyID0gaml0Q29kZS0+Ynl0ZWNv
ZGVJbmRleFRvU3RyZWFtSW5kZXguZmluZChvcmlnaW5CeXRlY29kZUluZGV4KTsKKyAgICAgICAg
aWYgKGl0ZXIgIT0gaml0Q29kZS0+Ynl0ZWNvZGVJbmRleFRvU3RyZWFtSW5kZXguZW5kKCkpIHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIHN0cmVhbUluZGV4ID0gaXRlci0+dmFsdWU7CisgICAgICAg
ICAgICBpZiAoQ29kZUJsb2NrKiBlbnRyeUJsb2NrID0gaml0Q29kZS0+b3NyRW50cnlCbG9jaygp
KSB7CisgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiT1NSIGVudHJ5OiBGcm9tICIsIFJhd1BvaW50ZXIoaml0Q29k
ZSksICIgZ290IGVudHJ5IGJsb2NrICIsIFJhd1BvaW50ZXIoZW50cnlCbG9jayksICJcbiIpOwor
ICAgICAgICAgICAgICAgIGlmICh2b2lkKiBhZGRyZXNzID0gRlRMOjpwcmVwYXJlT1NSRW50cnko
ZXhlYywgY29kZUJsb2NrLCBlbnRyeUJsb2NrLCBvcmlnaW5CeXRlY29kZUluZGV4LCBzdHJlYW1J
bmRleCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRvUHJpbnQpCisgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nTG4oIm9zciBlbnRlcmluZyBhdCBiYyMiLCBvcmlnaW5CeXRlY29k
ZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChlbnRyeUJs
b2NrLCAib3NyRW50cnkiLCAoImF0IGJjIyIsIG9yaWdpbkJ5dGVjb2RlSW5kZXgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJldGFnQ29kZVB0cjxjaGFyKj4oYWRkcmVzcywgSlNFbnRy
eVB0clRhZywgYml0d2lzZV9jYXN0PFB0clRhZz4oZXhlYykpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmICh3b3JrbGlzdFN0YXRl
ID09IFdvcmtsaXN0OjpDb21waWxlZCkgewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNv
ZGVCbG9jaywgImRlbGF5RlRMQ29tcGlsZSIsICgiY29tcGlsZWQgYW5kIGZhaWxlZCIpKTsKICAg
ICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGNvbXBpbGF0aW9uIGZhaWxlZCBhbmQgd2UgYWxyZWFk
eSBzZXQgdGhlIHRocmVzaG9sZHMuCkBAIC0zMDc4LDE5ICszMDkxLDYgQEAgc3RhdGljIGNoYXIq
IHRpZXJVcENvbW1vbihFeGVjU3RhdGUqIGV4ZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAKLSAgICAvLyBJZiB3ZSBjYW4gT1NSIEVudGVyLCBkbyBpdCByaWdodCBhd2F5LgotICAg
IGlmIChjYW5PU1JGcm9tSGVyZSkgewotICAgICAgICB1bnNpZ25lZCBzdHJlYW1JbmRleCA9IGpp
dENvZGUtPmJ5dGVjb2RlSW5kZXhUb1N0cmVhbUluZGV4LmdldChvcmlnaW5CeXRlY29kZUluZGV4
KTsKLSAgICAgICAgaWYgKENvZGVCbG9jayogZW50cnlCbG9jayA9IGppdENvZGUtPm9zckVudHJ5
QmxvY2soKSkgewotICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJPU1IgZW50cnk6IEZyb20gIiwgUmF3UG9pbnRlcihqaXRDb2Rl
KSwgIiBnb3QgZW50cnkgYmxvY2sgIiwgUmF3UG9pbnRlcihlbnRyeUJsb2NrKSwgIlxuIik7Ci0g
ICAgICAgICAgICBpZiAodm9pZCogYWRkcmVzcyA9IEZUTDo6cHJlcGFyZU9TUkVudHJ5KGV4ZWMs
IGNvZGVCbG9jaywgZW50cnlCbG9jaywgb3JpZ2luQnl0ZWNvZGVJbmRleCwgc3RyZWFtSW5kZXgp
KSB7Ci0gICAgICAgICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChlbnRyeUJsb2NrLCAib3Ny
RW50cnkiLCAoImF0IGJjIyIsIG9yaWdpbkJ5dGVjb2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gcmV0YWdDb2RlUHRyPGNoYXIqPihhZGRyZXNzLCBKU0VudHJ5UHRyVGFnLCBiaXR3
aXNlX2Nhc3Q8UHRyVGFnPihleGVjKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0KICAgICAvLyAtIElmIHdlIGRvbid0IGhhdmUgYW4gRlRMIGNvZGUgYmxvY2ssIHRoZW4gdHJ5
IHRvIGNvbXBpbGUgb25lLgogICAgIC8vIC0gSWYgd2UgZG8gaGF2ZSBhbiBGVEwgY29kZSBibG9j
aywgdGhlbiB0cnkgdG8gZW50ZXIgZm9yIGEgd2hpbGUuCiAgICAgLy8gLSBJZiB3ZSBjb3VsZG4n
dCBlbnRlciBmb3IgYSB3aGlsZSwgdGhlbiB0cmlnZ2VyIE9TUiBlbnRyeS4KQEAgLTMxMTIsNyAr
MzExMiw2IEBAIHN0YXRpYyBjaGFyKiB0aWVyVXBDb21tb24oRXhlY1N0YXRlKiBleGUKICAgICB9
IGVsc2UKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJkZWxheUZUTENv
bXBpbGUiLCAoImF2b2lkaW5nIHJlcGxhY2VtZW50IGNvbXBpbGUiKSk7CiAKLSAgICAvLyBJdCdz
IHRpbWUgdG8gdHJ5IHRvIGNvbXBpbGUgY29kZSBmb3IgT1NSIGVudHJ5LgogICAgIGlmIChDb2Rl
QmxvY2sqIGVudHJ5QmxvY2sgPSBqaXRDb2RlLT5vc3JFbnRyeUJsb2NrKCkpIHsKICAgICAgICAg
aWYgKGppdENvZGUtPm9zckVudHJ5UmV0cnkgPCBPcHRpb25zOjpmdGxPU1JFbnRyeVJldHJ5VGhy
ZXNob2xkKCkpIHsKICAgICAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAi
ZGVsYXlGVExDb21waWxlIiwgKCJPU1IgZW50cnkgZmFpbGVkLCBPU1IgZW50cnkgdGhyZXNob2xk
IG5vdCBtZXQiKSk7CkBAIC0zMTQ0LDQ4ICszMTQzLDg3IEBAIHN0YXRpYyBjaGFyKiB0aWVyVXBD
b21tb24oRXhlY1N0YXRlKiBleGUKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0g
ICAgaWYgKCFjYW5PU1JGcm9tSGVyZSkgewotICAgICAgICAvLyBXZSBjYW4ndCBPU1IgZnJvbSBo
ZXJlLCBvciBldmVuIHN0YXJ0IGEgY29tcGlsYXRpb24gYmVjYXVzZSBkb2luZyBzbwotICAgICAg
ICAvLyBjYWxscyBqaXRDb2RlLT5yZWNvbnN0cnVjdCB3aGljaCB3b3VsZCBnZXQgdGhlIHdyb25n
IHN0YXRlLgotICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQotICAgICAgICAgICAg
ZGF0YUxvZygiTm9uLU9TUi1hYmxlIGJjIyIsIG9yaWdpbkJ5dGVjb2RlSW5kZXgsICIgaW4gIiwg
KmNvZGVCbG9jaywgIiBzZXR0aW5nIHBhcmVudCBsb29wIGJjIyIsIG9zckVudHJ5Qnl0ZWNvZGVJ
bmRleCwgIidzIHRyaWdnZXIgYW5kIGJhY2tpbmcgb2ZmLlxuIik7Ci0gICAgICAgIGppdENvZGUt
PnRpZXJVcEVudHJ5VHJpZ2dlcnMuc2V0KG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgSklUQ29kZTo6
VHJpZ2dlclJlYXNvbjo6U3RhcnRDb21waWxhdGlvbik7Ci0gICAgICAgIGppdENvZGUtPnNldE9w
dGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChjb2RlQmxvY2ssIENv
bXBpbGF0aW9uRGVmZXJyZWQpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAg
ICB1bnNpZ25lZCBzdHJlYW1JbmRleCA9IGppdENvZGUtPmJ5dGVjb2RlSW5kZXhUb1N0cmVhbUlu
ZGV4LmdldChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgIC8vIEl0J3MgdGltZSB0byB0cnkg
dG8gY29tcGlsZSBjb2RlIGZvciBPU1IgZW50cnkuCiAKICAgICBpZiAoIXRyaWdnZXJlZFNsb3dQ
YXRoVG9TdGFydENvbXBpbGF0aW9uKSB7Ci0gICAgICAgIGF1dG8gdGllclVwSGllcmFyY2h5RW50
cnkgPSBqaXRDb2RlLT50aWVyVXBJbkxvb3BIaWVyYXJjaHkuZmluZChvc3JFbnRyeUJ5dGVjb2Rl
SW5kZXgpOwotICAgICAgICBpZiAodGllclVwSGllcmFyY2h5RW50cnkgIT0gaml0Q29kZS0+dGll
clVwSW5Mb29wSGllcmFyY2h5LmVuZCgpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG9z
ckVudHJ5Q2FuZGlkYXRlIDogdGllclVwSGllcmFyY2h5RW50cnktPnZhbHVlKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGppdENvZGUtPnRpZXJVcEVudHJ5U2Vlbi5jb250YWlucyhvc3JFbnRyeUNh
bmRpZGF0ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQXNrIGFuIGVuY2xvc2luZyBsb29w
IHRvIGNvbXBpbGUsIGluc3RlYWQgb2YgZG9pbmcgc28gaGVyZS4KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIklubmVyLWxvb3AgYmMjIiwgb3JpZ2luQnl0ZWNvZGVJbmRleCwgIiBpbiAiLCAqY29k
ZUJsb2NrLCAiIHNldHRpbmcgcGFyZW50IGxvb3AgYmMjIiwgb3NyRW50cnlDYW5kaWRhdGUsICIn
cyB0cmlnZ2VyIGFuZCBiYWNraW5nIG9mZi5cbiIpOwotICAgICAgICAgICAgICAgICAgICBqaXRD
b2RlLT50aWVyVXBFbnRyeVRyaWdnZXJzLnNldChvc3JFbnRyeUNhbmRpZGF0ZSwgSklUQ29kZTo6
VHJpZ2dlclJlYXNvbjo6U3RhcnRDb21waWxhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIGpp
dENvZGUtPnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChj
b2RlQmxvY2ssIENvbXBpbGF0aW9uRGVmZXJyZWQpOwotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgICAgICAvLyBBbiBpbm5lciBsb29wIGRpZG4ndCBzcGVjaWZpY2Fs
bHkgYXNrIGZvciB1cyB0byBraWNrIG9mZiBhIGNvbXBpbGF0aW9uLiBUaGlzIG1lYW5zCisgICAg
ICAgIC8vIHdlIHJlYWNoZWQgb3VyIHRyaWdnZXIgY291bnQuIFdlIGVpdGhlciBmYWxsIHRocm91
Z2ggYW5kIGtpY2sgb2ZmIGEgY29tcGlsZSBmb3Igb3JpZ2luQnl0ZWNvZGVJbmRleCwKKyAgICAg
ICAgLy8gb3Igd2UgZmxhZyBhbiBvdXRlciBsb29wIHRvIGltbWVkaWF0ZWx5IHRyeSB0byBjb21w
aWxlIGl0c2VsZi4gSWYgdGhlcmUgYXJlIG91dGVyIGxvb3BzLAorICAgICAgICAvLyB3ZSBmaXJz
dCB0cnkgdG8gbWFrZSB0aGVtIGNvbXBpbGUgdGhlbXNlbHZlcy4gQnV0IHdlIHdpbGwgZXZlbnR1
YWxseSBmYWxsIGJhY2sgdG8gY29tcGlsaW5nCisgICAgICAgIC8vIGFueSBsb29wIHdlIGNhbiBp
ZiB3ZSB0YWtlIHRvbyBsb25nIHRvIHJlYWNoIGFuIG91dGVyIGxvb3AuCisKKyAgICAgICAgYXV0
byB0cmlnZ2VyT3V0ZXJMb29wVG9Db21waWxlID0gWyZdIHsKKyAgICAgICAgICAgIGF1dG8gdGll
clVwSGllcmFyY2h5RW50cnkgPSBqaXRDb2RlLT50aWVyVXBJbkxvb3BIaWVyYXJjaHkuZmluZChv
cmlnaW5CeXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIGlmICh0aWVyVXBIaWVyYXJjaHlFbnRy
eSA9PSBqaXRDb2RlLT50aWVyVXBJbkxvb3BIaWVyYXJjaHkuZW5kKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoZG9QcmludCkgeworICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgYmMgOiB0aWVyVXBIaWVyYXJjaHlFbnRyeS0+dmFsdWUpIHsK
KyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiXHQiLCBiYyk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBUaGlzIHZlY3RvciBpcyBvcmRlcmVkIGZyb20gaW5uZXJtb3N0IHRvIG91dGVybW9z
dCBsb29wLiBFdmVyeSBieXRlY29kZSBlbnRyeSBpbiB0aGlzIHZlY3RvciBpcworICAgICAgICAg
ICAgLy8gYWxsb3dlZCB0byBkbyBPU1IgZW50cnkuIFdlIHN0YXJ0IHdpdGggdGhlIG91dGVybW9z
dCBsb29wIGFuZCBtYWtlIG91ciB3YXkgaW53YXJkcy4gT3VyIHBvbGljeQorICAgICAgICAgICAg
Ly8gaXMgdGhhdCB3ZSB3aWxsIHRyaWdnZXIgYW4gb3V0ZXIgbG9vcCB0byBjb21waWxlIGltbWVk
aWF0ZWx5IHdoZW4gcHJvZ3JhbSBjb250cm9sIHJlYWNoZXMgaXQuIElmCisgICAgICAgICAgICAv
LyBwcm9ncmFtIGNvbnRyb2wgaXMgdGFraW5nIHRvbyBsb25nIHRvIHJlYWNoIHRoYXQgb3V0ZXIg
bG9vcCwgd2UgcHJvZ3Jlc3NpdmVseSBtb3ZlIGlud2FyZHMsCisgICAgICAgICAgICAvLyBtZWFu
aW5nIHdlJ2xsIGV2ZW50dWFsbHkgdHJpZ2dlciBzb21lIGxvb3AgdGhhdCBpcyBleGVjdXRpbmcg
dG8gY29tcGlsZS4gV2Ugc3RhcnQgd2l0aCB0cnlpbmcKKyAgICAgICAgICAgIC8vIHRvIGNvbXBp
bGUgb3V0ZXIgbG9vcHMgc2luY2Ugd2UgYmVsaWV2ZSBvdXRlciBsb29wIGNvbXBpbGF0aW9ucyBo
YXZlIHRoZSBiZXN0IG9wcG9ydHVuaXR5CisgICAgICAgICAgICAvLyBvcHRpbWl6aW5nIGNvZGUu
CisgICAgICAgICAgICBmb3IgKGF1dG8gaXRlciA9IHRpZXJVcEhpZXJhcmNoeUVudHJ5LT52YWx1
ZS5yYmVnaW4oKSwgZW5kID0gdGllclVwSGllcmFyY2h5RW50cnktPnZhbHVlLnJlbmQoKTsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9zckVudHJ5Q2Fu
ZGlkYXRlID0gKml0ZXI7CisKKyAgICAgICAgICAgICAgICBpZiAoaml0Q29kZS0+dGllclVwRW50
cnlUcmlnZ2Vycy5nZXQob3NyRW50cnlDYW5kaWRhdGUpID09IEpJVENvZGU6OlRyaWdnZXJSZWFz
b246OlN0YXJ0Q29tcGlsYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFu
cyB0aGF0IHdlIGFscmVhZHkgYXNrZWQgdGhpcyBsb29wIHRvIGNvbXBpbGUuIElmIHdlJ3ZlIHJl
YWNoZWQgaGVyZSwgaXQKKyAgICAgICAgICAgICAgICAgICAgLy8gbWVhbnMgcHJvZ3JhbSBjb250
cm9sIGhhcyBub3QgeWV0IHJlYWNoZWQgdGhhdCBsb29wLiBTbyBpdCdzIHRha2luZyB0b28gbG9u
ZyB0byBjb21waWxlLgorICAgICAgICAgICAgICAgICAgICAvLyBTbyB3ZSBtb3ZlIG9uIHRvIGFz
a2luZyB0aGUgaW5uZXIgbG9vcCBvZiB0aGlzIGxvb3AgdG8gY29tcGlsZSBpdHNlbGYuCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIC8vIFRoaXMgaXMgd2hlcmUgd2UgYXNrIHRoZSBvdXRlciB0byBsb29wIHRvIGltbWVk
aWF0ZWx5IGNvbXBpbGUgaXRzZWxmIGlmIHByb2dyYW0KKyAgICAgICAgICAgICAgICAvLyBjb250
cm9sIHJlYWNoZXMgaXQuCisgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiSW5uZXItbG9vcCBiYyMiLCBvcmlnaW5C
eXRlY29kZUluZGV4LCAiIGluICIsICpjb2RlQmxvY2ssICIgc2V0dGluZyBwYXJlbnQgbG9vcCBi
YyMiLCBvc3JFbnRyeUNhbmRpZGF0ZSwgIidzIHRyaWdnZXIgYW5kIGJhY2tpbmcgb2ZmLlxuIik7
CisgICAgICAgICAgICAgICAgaWYgKGRvUHJpbnQpCisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2dMbigic2V0dGluZyB0cmlnZ2VyIHRvIFN0YXJ0Q29tcGlsYXRpb24gZm9yIGJjIyIsIG9zckVu
dHJ5Q2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICBqaXRDb2RlLT50aWVyVXBFbnRyeVRyaWdn
ZXJzLnNldChvc3JFbnRyeUNhbmRpZGF0ZSwgSklUQ29kZTo6VHJpZ2dlclJlYXNvbjo6U3RhcnRD
b21waWxhdGlvbik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAo
dHJpZ2dlck91dGVyTG9vcFRvQ29tcGlsZSgpKSB7CisgICAgICAgICAgICBqaXRDb2RlLT5zZXRP
cHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoY29kZUJsb2NrLCBD
b21waWxhdGlvbkRlZmVycmVkKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICB9CiAgICAgfQogCiAgICAgLy8gV2UgYXJlbid0IGNvbXBpbGluZyBhbmQgaGF2ZW4ndCBjb21w
aWxlZCBhbnl0aGluZyBmb3IgT1NSIGVudHJ5LiBTbywgdHJ5IHRvIGNvbXBpbGUKICAgICAvLyBz
b21ldGhpbmcuCi0gICAgYXV0byB0cmlnZ2VySXRlcmF0b3IgPSBqaXRDb2RlLT50aWVyVXBFbnRy
eVRyaWdnZXJzLmZpbmQob3NyRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICBpZiAoZG9QcmludCkK
KyAgICAgICAgZGF0YUxvZ0xuKCJLaWNraW5nIG9mZiBjb21waWxlIGZvciBiYyMiLCBvcmlnaW5C
eXRlY29kZUluZGV4KTsKKworICAgIGlmICghaml0Q29kZS0+dGllclVwRW50cnlUcmlnZ2Vycy5j
b250YWlucyhvcmlnaW5CeXRlY29kZUluZGV4KSkgeworICAgICAgICBqaXRDb2RlLT5zZXRPcHRp
bWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoY29kZUJsb2NrLCBDb21w
aWxhdGlvbkRlZmVycmVkKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAg
YXV0byB0cmlnZ2VySXRlcmF0b3IgPSBqaXRDb2RlLT50aWVyVXBFbnRyeVRyaWdnZXJzLmZpbmQo
b3JpZ2luQnl0ZWNvZGVJbmRleCk7CiAgICAgUkVMRUFTRV9BU1NFUlQodHJpZ2dlckl0ZXJhdG9y
ICE9IGppdENvZGUtPnRpZXJVcEVudHJ5VHJpZ2dlcnMuZW5kKCkpOwogICAgIEpJVENvZGU6OlRy
aWdnZXJSZWFzb24qIHRyaWdnZXJBZGRyZXNzID0gJih0cmlnZ2VySXRlcmF0b3ItPnZhbHVlKTsK
IAogICAgIE9wZXJhbmRzPEpTVmFsdWU+IG11c3RIYW5kbGVWYWx1ZXM7CisgICAgdW5zaWduZWQg
c3RyZWFtSW5kZXggPSBqaXRDb2RlLT5ieXRlY29kZUluZGV4VG9TdHJlYW1JbmRleC5nZXQob3Jp
Z2luQnl0ZWNvZGVJbmRleCk7CiAgICAgaml0Q29kZS0+cmVjb25zdHJ1Y3QoCi0gICAgICAgIGV4
ZWMsIGNvZGVCbG9jaywgQ29kZU9yaWdpbihvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpLCBzdHJlYW1J
bmRleCwgbXVzdEhhbmRsZVZhbHVlcyk7CisgICAgICAgIGV4ZWMsIGNvZGVCbG9jaywgQ29kZU9y
aWdpbihvcmlnaW5CeXRlY29kZUluZGV4KSwgc3RyZWFtSW5kZXgsIG11c3RIYW5kbGVWYWx1ZXMp
OwogICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1Jl
cGxhY2VtZW50KCk7CiAKICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgInRyaWdn
ZXJGVExPU1IiLCAoKSk7CiAgICAgQ29tcGlsYXRpb25SZXN1bHQgZm9yRW50cnlSZXN1bHQgPSBj
b21waWxlKAotICAgICAgICAqdm0sIHJlcGxhY2VtZW50Q29kZUJsb2NrLCBjb2RlQmxvY2ssIEZU
TEZvck9TUkVudHJ5TW9kZSwgb3NyRW50cnlCeXRlY29kZUluZGV4LAorICAgICAgICAqdm0sIHJl
cGxhY2VtZW50Q29kZUJsb2NrLCBjb2RlQmxvY2ssIEZUTEZvck9TUkVudHJ5TW9kZSwgb3JpZ2lu
Qnl0ZWNvZGVJbmRleCwKICAgICAgICAgbXVzdEhhbmRsZVZhbHVlcywgVG9GVExGb3JPU1JFbnRy
eURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKHRyaWdnZXJBZGRyZXNzKSk7CiAK
ICAgICBpZiAoaml0Q29kZS0+bmV2ZXJFeGVjdXRlZEVudHJ5KQpAQCAtMzIzMywxMSArMzI3MSw5
IEBAIHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93SW5Mb28KICAgICAgICAgICAg
IGppdENvZGUtPnRpZXJVcENvdW50ZXIsICJcbiIpOwogICAgIH0KIAotICAgIGF1dG8gdGllclVw
SGllcmFyY2h5RW50cnkgPSBqaXRDb2RlLT50aWVyVXBJbkxvb3BIaWVyYXJjaHkuZmluZChieXRl
Y29kZUluZGV4KTsKLSAgICBpZiAodGllclVwSGllcmFyY2h5RW50cnkgIT0gaml0Q29kZS0+dGll
clVwSW5Mb29wSGllcmFyY2h5LmVuZCgpCi0gICAgICAgICYmICF0aWVyVXBIaWVyYXJjaHlFbnRy
eS0+dmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHRpZXJVcENvbW1vbihleGVjLCBieXRlY29k
ZUluZGV4LCB0aWVyVXBIaWVyYXJjaHlFbnRyeS0+dmFsdWUuZmlyc3QoKSk7Ci0gICAgfSBlbHNl
IGlmIChzaG91bGRUcmlnZ2VyRlRMQ29tcGlsZShjb2RlQmxvY2ssIGppdENvZGUpKQorICAgIGlm
IChqaXRDb2RlLT50aWVyVXBJbkxvb3BIaWVyYXJjaHkuY29udGFpbnMoYnl0ZWNvZGVJbmRleCkp
CisgICAgICAgIHRpZXJVcENvbW1vbihleGVjLCBieXRlY29kZUluZGV4KTsKKyAgICBlbHNlIGlm
IChzaG91bGRUcmlnZ2VyRlRMQ29tcGlsZShjb2RlQmxvY2ssIGppdENvZGUpKQogICAgICAgICB0
cmlnZ2VyRlRMUmVwbGFjZW1lbnRDb21waWxlKHZtLCBjb2RlQmxvY2ssIGppdENvZGUpOwogCiAg
ICAgLy8gU2luY2Ugd2UgY2Fubm90IE9TUiBFbnRlciBoZXJlLCB0aGUgZGVmYXVsdCAib3B0aW1p
emVTb29uKCkiIGlzIG5vdCB1c2VmdWwuCkBAIC0zMjcwLDcgKzMzMDYsNyBAQCBjaGFyKiBKSVRf
T1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdyhFCiAgICAgICAgICAgICBqaXRDb2RlLT50aWVy
VXBDb3VudGVyLCAiXG4iKTsKICAgICB9CiAKLSAgICByZXR1cm4gdGllclVwQ29tbW9uKGV4ZWMs
IGJ5dGVjb2RlSW5kZXgsIGJ5dGVjb2RlSW5kZXgpOworICAgIHJldHVybiB0aWVyVXBDb21tb24o
ZXhlYywgYnl0ZWNvZGVJbmRleCk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341918</attachid>
            <date>2018-06-04 14:30:10 -0700</date>
            <delta_ts>2018-06-04 15:51:34 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>15660</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzI0NzkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDE4LTA2LTA0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIE1ha2UgREZHIHRvIEZUTCBPU1IgZW50cnkgY29kZSBtb3JlIHNhbmUg
YnkgcmVtb3ZpbmcgYmFkIFJFTEVBU0VfQVNTRVJUUyBhbmQgbWFraW5nIGl0IHRyaWdnZXIgY29t
cGlsZXMgaW4gb3V0ZXIgbG9vcHMgYmVmb3JlIGlubmVyIG9uZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NjIxOAorICAgICAgICA8cmRhcjovL3By
b2JsZW0vMzg0NDk1NDA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBzdHJlc3MvZG9udC1jcmFzaC1mdGwtb3NyLWVudHJ5LmpzOiBBZGRlZC4KKyAg
ICAgICAgKGZfMCk6CisgICAgICAgIChmXzEpOgorCiAyMDE4LTA2LTAyICBDYWlvIExpbWEgIDx0
aWNhaW9saW1hQGdtYWlsLmNvbT4KIAogICAgICAgICBbRVNOZXh0XVtCaWdJbnRdIEltcGxlbWVu
dCBzdXBwb3J0IGZvciBhZGRpdGlvbiBvcGVyYXRpb25zCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9k
b250LWNyYXNoLWZ0bC1vc3ItZW50cnkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
ZG9udC1jcmFzaC1mdGwtb3NyLWVudHJ5LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3Ry
ZXNzL2RvbnQtY3Jhc2gtZnRsLW9zci1lbnRyeS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI2IEBACisvL0AgcnVuRGVmYXVsdCgiLS1qaXRQb2xpY3lTY2FsZT0wIikKKworLy8gVGhpcyB0
ZXN0IHNob3VsZCBub3QgY3Jhc2guCisKK2Z1bmN0aW9uIGZfMCgpIHsKKyAgICB2YXIgdl80ID0g
MTsKKyAgICB2YXIgdl81ID0gJ2EnOworICAgIHdoaWxlICh2XzQgPCAyNTYpIHsKKyAgICAgICAg
dl80IDw8PSAxOworICAgIH0KKyAgICByZXR1cm4gdl80OworfQorZnVuY3Rpb24gZl8xKHZfMSkg
eworICAgIHZhciBzdW0gPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7
CisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKSB7CisgICAgICAgICAgICBzdW0g
Kz0gdl8xKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN1bTsKK30KKworbGV0IGhl
bGxvOworZm9yICh2YXIgaT0wOyBpPDEwMDA7IGkrKykgeworICAgIGhlbGxvID0gZl8xKGZfMCk7
Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMjQ3OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
MSBAQAorMjAxOC0wNi0wNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAg
ICAgICBNYWtlIERGRyB0byBGVEwgT1NSIGVudHJ5IGNvZGUgbW9yZSBzYW5lIGJ5IHJlbW92aW5n
IGJhZCBSRUxFQVNFX0FTU0VSVFMgYW5kIG1ha2luZyBpdCB0cmlnZ2VyIGNvbXBpbGVzIGluIG91
dGVyIGxvb3BzIGJlZm9yZSBpbm5lciBvbmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xODYyMTgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM4NDQ5
NTQwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggbWFrZXMgdGllclVwQ29tbW9uIGp1c3QgYSBiaXQgbW9yZSBzYW5lLiBUaGVyZSBh
cmUgYSBmZXcgdGhpbmdzCisgICAgICAgIHRoYXQgSSBkaWQ6CisgICAgICAgIC0gVGhlcmUgd2Vy
ZSBhIGZldyByZWxlYXNlIGFzc2VydHMgdGhhdCB3ZXJlIGNyYXNoaW5nLiBUaG9zZSByZWxlYXNl
IGFzc2VydHMKKyAgICAgICAgd2VyZSBpbmNvcnJlY3QuIFRoZXkgd2VyZSBtYWtpbmcgYXNzdW1w
dGlvbnMgYWJvdXQgaG93IHRoZSBjb2RlIGFuZCBkYXRhCisgICAgICAgIHN0cnVjdHVyZXMgd2Vy
ZSBvcmRlcmVkIHRoYXQgd2VyZSB3cm9uZy4gVGhpcyBwYXRjaCByZW1vdmVzIHRoZW0uIFRoZSBj
b2RlCisgICAgICAgIHdhcyB1c2luZyB0aGUgbG9vcCBoaWVyYXJjaHkgdmVjdG9yIHRvIG1ha2Ug
YXNzdW1wdGlvbnMgYWJvdXQgd2hpY2ggbG9vcCB3ZQorICAgICAgICB3ZXJlIGN1cnJlbnRseSBl
eGVjdXRpbmcgaW4sIHdoaWNoIGlzIGluY29ycmVjdC4gVGhlIG9ubHkgaW5mb3JtYXRpb24gdGhh
dAorICAgICAgICBjYW4gYmUgdXNlZCBhYm91dCB3aGVyZSB3ZSdyZSBjdXJyZW50bHkgZXhlY3V0
aW5nIGlzIHRoZSBieXRlY29kZSBpbmRleCB3ZSdyZQorICAgICAgICBhdC4KKyAgICAgICAgLSBU
aGlzIG1ha2VzIGl0IHNvIHRoYXQgd2UgZ28gYmFjayB0byB0cnlpbmcgdG8gY29tcGlsZSBvdXRl
ciBsb29wcyBiZWZvcmUKKyAgICAgICAgaW5uZXIgbG9vcHMuIEpGIGFjY2lkZW50YWxseSByZXZl
cnRlZCB0aGlzIGJlaGF2aW9yIHRoYXQgQmVuIGltcGxlbWVudGVkLgorICAgICAgICBKRiBtYWRl
IGl0IHNvIHRoYXQgd2UganVzdCBjb21waWxlZCB0aGUgaW5uZXIgbW9zdCBsb29wLiBJIG1ha2Ug
dGhpcworICAgICAgICBmdW5jdGlvbmFsaXR5IHdvcmsgYnkgZmlyc3QgdHJpZ2dlcmluZyBhIGNv
bXBpbGUgZm9yIHRoZSBvdXRlciBtb3N0IGxvb3AKKyAgICAgICAgdGhhdCB0aGUgY29kZSBpcyBj
dXJyZW50bHkgZXhlY3V0aW5nIGluIGFuZCB0aGF0IGNhbiBwZXJmb3JtIE9TUiBlbnRyeS4KKyAg
ICAgICAgSG93ZXZlciwgc29tZSBwcm9ncmFtcyBjYW4gZ2V0IHN0dWNrIGluIGlubmVyIGxvb3Bz
LiBUaGUgY29kZSB3b3JrcyBieQorICAgICAgICBwcm9ncmVzc2l2ZWx5IGFza2luZyBpbm5lciBs
b29wcyB0byBjb21waWxlIGlmIHByb2dyYW0gZXhlY3V0aW9uIGhhcyBub3QKKyAgICAgICAgeWV0
IHJlYWNoZWQgYW4gb3V0ZXIgbG9vcC4KKworICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNw
cDoKKwogMjAxOC0wNi0wNCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4K
IAogICAgICAgICBHZXQgcmlkIG9mIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzIGFuZCBXZWFrUmVm
ZXJlbmNlSGFydmVzdGVycwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMzI0NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDE4LDcgKzMwMTgsNyBA
QCB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vdyhFeGVjCiAgICAgfQogfQogCi1z
dGF0aWMgY2hhciogdGllclVwQ29tbW9uKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgb3JpZ2lu
Qnl0ZWNvZGVJbmRleCwgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4KQorc3RhdGljIGNo
YXIqIHRpZXJVcENvbW1vbihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG9yaWdpbkJ5dGVjb2Rl
SW5kZXgpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKQEAgLTMwMzIsMTAgKzMwMzIsNiBAQCBzdGF0aWMg
Y2hhciogdGllclVwQ29tbW9uKEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgIHdvcmtsaXN0U3RhdGUg
PSBXb3JrbGlzdDo6Tm90S25vd247CiAKICAgICBKSVRDb2RlKiBqaXRDb2RlID0gY29kZUJsb2Nr
LT5qaXRDb2RlKCktPmRmZygpOwotCi0gICAgLy8gVGhlIGZvbGxvd2luZyBpcyBvbmx5IHRydWUg
Zm9yIHRyaWdnZXJUaWVyVXBOb3dJbkxvb3AsIHdoaWNoIGNhbiBuZXZlcgotICAgIC8vIGJlIGFu
IE9TUiBlbnRyeS4KLSAgICBib29sIGNhbk9TUkZyb21IZXJlID0gb3JpZ2luQnl0ZWNvZGVJbmRl
eCA9PSBvc3JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAgICAgCiAgICAgYm9vbCB0cmlnZ2VyZWRTbG93
UGF0aFRvU3RhcnRDb21waWxhdGlvbiA9IGZhbHNlOwogICAgIGF1dG8gdGllclVwRW50cnlUcmln
Z2VycyA9IGppdENvZGUtPnRpZXJVcEVudHJ5VHJpZ2dlcnMuZmluZChvcmlnaW5CeXRlY29kZUlu
ZGV4KTsKQEAgLTMwNDgsMTUgKzMwNDQsMTMgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihF
eGVjU3RhdGUqIGV4ZQogCiAgICAgICAgIGNhc2UgSklUQ29kZTo6VHJpZ2dlclJlYXNvbjo6Q29t
cGlsYXRpb25Eb25lOgogICAgICAgICAgICAgLy8gVGhlIHRyaWdnZXIgd2FzIHNldCBiZWNhdXNl
IGNvbXBpbGF0aW9uIGNvbXBsZXRlZC4gRG9uJ3QgdW5zZXQgaXQKLSAgICAgICAgICAgIC8vIHNv
IHRoYXQgZnVydGhlciBERkcgZXhlY3V0aW9ucyBPU1IgZW50ZXJzIGFzIHdlbGwuCi0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjYW5PU1JGcm9tSGVyZSk7CisgICAgICAgICAgICAvLyBzbyB0
aGF0IGZ1cnRoZXIgREZHIGV4ZWN1dGlvbnMgT1NSIGVudGVyIGFzIHdlbGwuCiAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICBjYXNlIEpJVENvZGU6OlRyaWdnZXJSZWFzb246OlN0YXJ0Q29t
cGlsYXRpb246CiAgICAgICAgICAgICAvLyBXZSB3ZXJlIGFza2VkIHRvIGVudGVyIGFzIHNvb24g
YXMgcG9zc2libGUgYW5kIHN0YXJ0IGNvbXBpbGluZyBhbgogICAgICAgICAgICAgLy8gZW50cnkg
Zm9yIHRoZSBjdXJyZW50IGJ5dGVjb2RlIGxvY2F0aW9uLiBVbnNldCB0aGlzIHRyaWdnZXIgc28g
d2UKICAgICAgICAgICAgIC8vIGRvbid0IGNvbnRpbnVhbGx5IGVudGVyLgotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY2FuT1NSRnJvbUhlcmUpOwogICAgICAgICAgICAgdGllclVwRW50cnlU
cmlnZ2Vycy0+dmFsdWUgPSBKSVRDb2RlOjpUcmlnZ2VyUmVhc29uOjpEb250VHJpZ2dlcjsKICAg
ICAgICAgICAgIHRyaWdnZXJlZFNsb3dQYXRoVG9TdGFydENvbXBpbGF0aW9uID0gdHJ1ZTsKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMzA2NSwxMSArMzA1OSwyNiBAQCBzdGF0aWMgY2hhciogdGll
clVwQ29tbW9uKEV4ZWNTdGF0ZSogZXhlCiAKICAgICBpZiAod29ya2xpc3RTdGF0ZSA9PSBXb3Jr
bGlzdDo6Q29tcGlsaW5nKSB7CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2Nr
LCAiZGVsYXlGVExDb21waWxlIiwgKCJzdGlsbCBjb21waWxpbmciKSk7Ci0gICAgICAgIGppdENv
ZGUtPnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCgKLSAg
ICAgICAgICAgIGNvZGVCbG9jaywgQ29tcGlsYXRpb25EZWZlcnJlZCk7CisgICAgICAgIGppdENv
ZGUtPnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChjb2Rl
QmxvY2ssIENvbXBpbGF0aW9uRGVmZXJyZWQpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAKKyAgICAvLyBJZiB3ZSBjYW4gT1NSIEVudGVyLCBkbyBpdCByaWdodCBhd2F5LgorICAg
IHsKKyAgICAgICAgYXV0byBpdGVyID0gaml0Q29kZS0+Ynl0ZWNvZGVJbmRleFRvU3RyZWFtSW5k
ZXguZmluZChvcmlnaW5CeXRlY29kZUluZGV4KTsKKyAgICAgICAgaWYgKGl0ZXIgIT0gaml0Q29k
ZS0+Ynl0ZWNvZGVJbmRleFRvU3RyZWFtSW5kZXguZW5kKCkpIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIHN0cmVhbUluZGV4ID0gaXRlci0+dmFsdWU7CisgICAgICAgICAgICBpZiAoQ29kZUJsb2Nr
KiBlbnRyeUJsb2NrID0gaml0Q29kZS0+b3NyRW50cnlCbG9jaygpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiT1NSIGVudHJ5OiBGcm9tICIsIFJhd1BvaW50ZXIoaml0Q29kZSksICIgZ290IGVudHJ5IGJs
b2NrICIsIFJhd1BvaW50ZXIoZW50cnlCbG9jayksICJcbiIpOworICAgICAgICAgICAgICAgIGlm
ICh2b2lkKiBhZGRyZXNzID0gRlRMOjpwcmVwYXJlT1NSRW50cnkoZXhlYywgY29kZUJsb2NrLCBl
bnRyeUJsb2NrLCBvcmlnaW5CeXRlY29kZUluZGV4LCBzdHJlYW1JbmRleCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChlbnRyeUJsb2NrLCAib3NyRW50cnkiLCAo
ImF0IGJjIyIsIG9yaWdpbkJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJldGFnQ29kZVB0cjxjaGFyKj4oYWRkcmVzcywgSlNFbnRyeVB0clRhZywgYml0d2lzZV9j
YXN0PFB0clRhZz4oZXhlYykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKwogICAgIGlmICh3b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0OjpDb21w
aWxlZCkgewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5RlRM
Q29tcGlsZSIsICgiY29tcGlsZWQgYW5kIGZhaWxlZCIpKTsKICAgICAgICAgLy8gVGhpcyBtZWFu
cyB0aGF0IGNvbXBpbGF0aW9uIGZhaWxlZCBhbmQgd2UgYWxyZWFkeSBzZXQgdGhlIHRocmVzaG9s
ZHMuCkBAIC0zMDc4LDE5ICszMDg3LDYgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihFeGVj
U3RhdGUqIGV4ZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICAvLyBJZiB3
ZSBjYW4gT1NSIEVudGVyLCBkbyBpdCByaWdodCBhd2F5LgotICAgIGlmIChjYW5PU1JGcm9tSGVy
ZSkgewotICAgICAgICB1bnNpZ25lZCBzdHJlYW1JbmRleCA9IGppdENvZGUtPmJ5dGVjb2RlSW5k
ZXhUb1N0cmVhbUluZGV4LmdldChvcmlnaW5CeXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKENv
ZGVCbG9jayogZW50cnlCbG9jayA9IGppdENvZGUtPm9zckVudHJ5QmxvY2soKSkgewotICAgICAg
ICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAgICAgICBkYXRhTG9n
KCJPU1IgZW50cnk6IEZyb20gIiwgUmF3UG9pbnRlcihqaXRDb2RlKSwgIiBnb3QgZW50cnkgYmxv
Y2sgIiwgUmF3UG9pbnRlcihlbnRyeUJsb2NrKSwgIlxuIik7Ci0gICAgICAgICAgICBpZiAodm9p
ZCogYWRkcmVzcyA9IEZUTDo6cHJlcGFyZU9TUkVudHJ5KGV4ZWMsIGNvZGVCbG9jaywgZW50cnlC
bG9jaywgb3JpZ2luQnl0ZWNvZGVJbmRleCwgc3RyZWFtSW5kZXgpKSB7Ci0gICAgICAgICAgICAg
ICAgQ09ERUJMT0NLX0xPR19FVkVOVChlbnRyeUJsb2NrLCAib3NyRW50cnkiLCAoImF0IGJjIyIs
IG9yaWdpbkJ5dGVjb2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0YWdDb2Rl
UHRyPGNoYXIqPihhZGRyZXNzLCBKU0VudHJ5UHRyVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihl
eGVjKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICAvLyAtIElmIHdl
IGRvbid0IGhhdmUgYW4gRlRMIGNvZGUgYmxvY2ssIHRoZW4gdHJ5IHRvIGNvbXBpbGUgb25lLgog
ICAgIC8vIC0gSWYgd2UgZG8gaGF2ZSBhbiBGVEwgY29kZSBibG9jaywgdGhlbiB0cnkgdG8gZW50
ZXIgZm9yIGEgd2hpbGUuCiAgICAgLy8gLSBJZiB3ZSBjb3VsZG4ndCBlbnRlciBmb3IgYSB3aGls
ZSwgdGhlbiB0cmlnZ2VyIE9TUiBlbnRyeS4KQEAgLTMxMTIsNyArMzEwOCw2IEBAIHN0YXRpYyBj
aGFyKiB0aWVyVXBDb21tb24oRXhlY1N0YXRlKiBleGUKICAgICB9IGVsc2UKICAgICAgICAgQ09E
RUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJkZWxheUZUTENvbXBpbGUiLCAoImF2b2lkaW5n
IHJlcGxhY2VtZW50IGNvbXBpbGUiKSk7CiAKLSAgICAvLyBJdCdzIHRpbWUgdG8gdHJ5IHRvIGNv
bXBpbGUgY29kZSBmb3IgT1NSIGVudHJ5LgogICAgIGlmIChDb2RlQmxvY2sqIGVudHJ5QmxvY2sg
PSBqaXRDb2RlLT5vc3JFbnRyeUJsb2NrKCkpIHsKICAgICAgICAgaWYgKGppdENvZGUtPm9zckVu
dHJ5UmV0cnkgPCBPcHRpb25zOjpmdGxPU1JFbnRyeVJldHJ5VGhyZXNob2xkKCkpIHsKICAgICAg
ICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGVsYXlGVExDb21waWxlIiwg
KCJPU1IgZW50cnkgZmFpbGVkLCBPU1IgZW50cnkgdGhyZXNob2xkIG5vdCBtZXQiKSk7CkBAIC0z
MTQ0LDQ4ICszMTM5LDc1IEBAIHN0YXRpYyBjaGFyKiB0aWVyVXBDb21tb24oRXhlY1N0YXRlKiBl
eGUKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYgKCFjYW5PU1JGcm9t
SGVyZSkgewotICAgICAgICAvLyBXZSBjYW4ndCBPU1IgZnJvbSBoZXJlLCBvciBldmVuIHN0YXJ0
IGEgY29tcGlsYXRpb24gYmVjYXVzZSBkb2luZyBzbwotICAgICAgICAvLyBjYWxscyBqaXRDb2Rl
LT5yZWNvbnN0cnVjdCB3aGljaCB3b3VsZCBnZXQgdGhlIHdyb25nIHN0YXRlLgotICAgICAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQotICAgICAgICAgICAgZGF0YUxvZygiTm9uLU9TUi1h
YmxlIGJjIyIsIG9yaWdpbkJ5dGVjb2RlSW5kZXgsICIgaW4gIiwgKmNvZGVCbG9jaywgIiBzZXR0
aW5nIHBhcmVudCBsb29wIGJjIyIsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgIidzIHRyaWdnZXIg
YW5kIGJhY2tpbmcgb2ZmLlxuIik7Ci0gICAgICAgIGppdENvZGUtPnRpZXJVcEVudHJ5VHJpZ2dl
cnMuc2V0KG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgSklUQ29kZTo6VHJpZ2dlclJlYXNvbjo6U3Rh
cnRDb21waWxhdGlvbik7Ci0gICAgICAgIGppdENvZGUtPnNldE9wdGltaXphdGlvblRocmVzaG9s
ZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChjb2RlQmxvY2ssIENvbXBpbGF0aW9uRGVmZXJyZWQp
OwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBzdHJlYW1J
bmRleCA9IGppdENvZGUtPmJ5dGVjb2RlSW5kZXhUb1N0cmVhbUluZGV4LmdldChvc3JFbnRyeUJ5
dGVjb2RlSW5kZXgpOworICAgIC8vIEl0J3MgdGltZSB0byB0cnkgdG8gY29tcGlsZSBjb2RlIGZv
ciBPU1IgZW50cnkuCiAKICAgICBpZiAoIXRyaWdnZXJlZFNsb3dQYXRoVG9TdGFydENvbXBpbGF0
aW9uKSB7Ci0gICAgICAgIGF1dG8gdGllclVwSGllcmFyY2h5RW50cnkgPSBqaXRDb2RlLT50aWVy
VXBJbkxvb3BIaWVyYXJjaHkuZmluZChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBp
ZiAodGllclVwSGllcmFyY2h5RW50cnkgIT0gaml0Q29kZS0+dGllclVwSW5Mb29wSGllcmFyY2h5
LmVuZCgpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG9zckVudHJ5Q2FuZGlkYXRlIDog
dGllclVwSGllcmFyY2h5RW50cnktPnZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGppdENv
ZGUtPnRpZXJVcEVudHJ5U2Vlbi5jb250YWlucyhvc3JFbnRyeUNhbmRpZGF0ZSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gQXNrIGFuIGVuY2xvc2luZyBsb29wIHRvIGNvbXBpbGUsIGluc3Rl
YWQgb2YgZG9pbmcgc28gaGVyZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIklubmVyLWxvb3Ag
YmMjIiwgb3JpZ2luQnl0ZWNvZGVJbmRleCwgIiBpbiAiLCAqY29kZUJsb2NrLCAiIHNldHRpbmcg
cGFyZW50IGxvb3AgYmMjIiwgb3NyRW50cnlDYW5kaWRhdGUsICIncyB0cmlnZ2VyIGFuZCBiYWNr
aW5nIG9mZi5cbiIpOwotICAgICAgICAgICAgICAgICAgICBqaXRDb2RlLT50aWVyVXBFbnRyeVRy
aWdnZXJzLnNldChvc3JFbnRyeUNhbmRpZGF0ZSwgSklUQ29kZTo6VHJpZ2dlclJlYXNvbjo6U3Rh
cnRDb21waWxhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIGppdENvZGUtPnNldE9wdGltaXph
dGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChjb2RlQmxvY2ssIENvbXBpbGF0
aW9uRGVmZXJyZWQpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
ICAgICAvLyBBbiBpbm5lciBsb29wIGRpZG4ndCBzcGVjaWZpY2FsbHkgYXNrIGZvciB1cyB0byBr
aWNrIG9mZiBhIGNvbXBpbGF0aW9uLiBUaGlzIG1lYW5zIHRoZSBjb3VudGVyCisgICAgICAgIC8v
IGNyb3NzZWQgaXRzIHRocmVzaG9sZC4gV2UgZWl0aGVyIGZhbGwgdGhyb3VnaCBhbmQga2ljayBv
ZmYgYSBjb21waWxlIGZvciBvcmlnaW5CeXRlY29kZUluZGV4LAorICAgICAgICAvLyBvciB3ZSBm
bGFnIGFuIG91dGVyIGxvb3AgdG8gaW1tZWRpYXRlbHkgdHJ5IHRvIGNvbXBpbGUgaXRzZWxmLiBJ
ZiB0aGVyZSBhcmUgb3V0ZXIgbG9vcHMsCisgICAgICAgIC8vIHdlIGZpcnN0IHRyeSB0byBtYWtl
IHRoZW0gY29tcGlsZSB0aGVtc2VsdmVzLiBCdXQgd2Ugd2lsbCBldmVudHVhbGx5IGZhbGwgYmFj
ayB0byBjb21waWxpbmcKKyAgICAgICAgLy8gYSBwcm9ncmVzc2l2ZWx5IGlubmVyIGxvb3AgaWYg
aXQgdGFrZXMgdG9vIGxvbmcgZm9yIGNvbnRyb2wgdG8gcmVhY2ggYW4gb3V0ZXIgbG9vcC4KKwor
ICAgICAgICBhdXRvIHRyeVRyaWdnZXJPdXRlckxvb3BUb0NvbXBpbGUgPSBbJl0geworICAgICAg
ICAgICAgYXV0byB0aWVyVXBIaWVyYXJjaHlFbnRyeSA9IGppdENvZGUtPnRpZXJVcEluTG9vcEhp
ZXJhcmNoeS5maW5kKG9yaWdpbkJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgaWYgKHRpZXJV
cEhpZXJhcmNoeUVudHJ5ID09IGppdENvZGUtPnRpZXJVcEluTG9vcEhpZXJhcmNoeS5lbmQoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIC8vIFRoaXMgdmVj
dG9yIGlzIG9yZGVyZWQgZnJvbSBpbm5lcm1vc3QgdG8gb3V0ZXJtb3N0IGxvb3AuIEV2ZXJ5IGJ5
dGVjb2RlIGVudHJ5IGluIHRoaXMgdmVjdG9yIGlzCisgICAgICAgICAgICAvLyBhbGxvd2VkIHRv
IGRvIE9TUiBlbnRyeS4gV2Ugc3RhcnQgd2l0aCB0aGUgb3V0ZXJtb3N0IGxvb3AgYW5kIG1ha2Ug
b3VyIHdheSBpbndhcmRzIChoZW5jZSB3aHkgd2UKKyAgICAgICAgICAgIC8vIGl0ZXJhdGUgdGhl
IHZlY3RvciBpbiByZXZlcnNlKS4gT3VyIHBvbGljeSBpcyB0aGF0IHdlIHdpbGwgdHJpZ2dlciBh
biBvdXRlciBsb29wIHRvIGNvbXBpbGUKKyAgICAgICAgICAgIC8vIGltbWVkaWF0ZWx5IHdoZW4g
cHJvZ3JhbSBjb250cm9sIHJlYWNoZXMgaXQuIElmIHByb2dyYW0gY29udHJvbCBpcyB0YWtpbmcg
dG9vIGxvbmcgdG8gcmVhY2ggdGhhdAorICAgICAgICAgICAgLy8gb3V0ZXIgbG9vcCwgd2UgcHJv
Z3Jlc3NpdmVseSBtb3ZlIGlud2FyZHMsIG1lYW5pbmcsIHdlJ2xsIGV2ZW50dWFsbHkgdHJpZ2dl
ciBzb21lIGxvb3AgdGhhdCBpcworICAgICAgICAgICAgLy8gZXhlY3V0aW5nIHRvIGNvbXBpbGUu
IFdlIHN0YXJ0IHdpdGggdHJ5aW5nIHRvIGNvbXBpbGUgb3V0ZXIgbG9vcHMgc2luY2Ugd2UgYmVs
aWV2ZSBvdXRlciBsb29wCisgICAgICAgICAgICAvLyBjb21waWxhdGlvbnMgcmV2ZWFsIHRoZSBi
ZXN0IG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXppbmcgY29kZS4KKyAgICAgICAgICAgIGZvciAo
YXV0byBpdGVyID0gdGllclVwSGllcmFyY2h5RW50cnktPnZhbHVlLnJiZWdpbigpLCBlbmQgPSB0
aWVyVXBIaWVyYXJjaHlFbnRyeS0+dmFsdWUucmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgb3NyRW50cnlDYW5kaWRhdGUgPSAqaXRlcjsKKwor
ICAgICAgICAgICAgICAgIGlmIChqaXRDb2RlLT50aWVyVXBFbnRyeVRyaWdnZXJzLmdldChvc3JF
bnRyeUNhbmRpZGF0ZSkgPT0gSklUQ29kZTo6VHJpZ2dlclJlYXNvbjo6U3RhcnRDb21waWxhdGlv
bikgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgYWxyZWFkeSBh
c2tlZCB0aGlzIGxvb3AgdG8gY29tcGlsZS4gSWYgd2UndmUgcmVhY2hlZCBoZXJlLCBpdAorICAg
ICAgICAgICAgICAgICAgICAvLyBtZWFucyBwcm9ncmFtIGNvbnRyb2wgaGFzIG5vdCB5ZXQgcmVh
Y2hlZCB0aGF0IGxvb3AuIFNvIGl0J3MgdGFraW5nIHRvbyBsb25nIHRvIGNvbXBpbGUuCisgICAg
ICAgICAgICAgICAgICAgIC8vIFNvIHdlIG1vdmUgb24gdG8gYXNraW5nIHRoZSBpbm5lciBsb29w
IG9mIHRoaXMgbG9vcCB0byBjb21waWxlIGl0c2VsZi4KKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB3
aGVyZSB3ZSBhc2sgdGhlIG91dGVyIHRvIGxvb3AgdG8gaW1tZWRpYXRlbHkgY29tcGlsZSBpdHNl
bGYgaWYgcHJvZ3JhbQorICAgICAgICAgICAgICAgIC8vIGNvbnRyb2wgcmVhY2hlcyBpdC4KKyAg
ICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJJbm5lci1sb29wIGJjIyIsIG9yaWdpbkJ5dGVjb2RlSW5kZXgsICIgaW4g
IiwgKmNvZGVCbG9jaywgIiBzZXR0aW5nIHBhcmVudCBsb29wIGJjIyIsIG9zckVudHJ5Q2FuZGlk
YXRlLCAiJ3MgdHJpZ2dlciBhbmQgYmFja2luZyBvZmYuXG4iKTsKKyAgICAgICAgICAgICAgICBq
aXRDb2RlLT50aWVyVXBFbnRyeVRyaWdnZXJzLnNldChvc3JFbnRyeUNhbmRpZGF0ZSwgSklUQ29k
ZTo6VHJpZ2dlclJlYXNvbjo6U3RhcnRDb21waWxhdGlvbik7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfTsKKworICAgICAgICBpZiAodHJ5VHJpZ2dlck91dGVyTG9vcFRvQ29tcGlsZSgpKSB7
CisgICAgICAgICAgICBqaXRDb2RlLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29t
cGlsYXRpb25SZXN1bHQoY29kZUJsb2NrLCBDb21waWxhdGlvbkRlZmVycmVkKTsKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gV2UgYXJlbid0
IGNvbXBpbGluZyBhbmQgaGF2ZW4ndCBjb21waWxlZCBhbnl0aGluZyBmb3IgT1NSIGVudHJ5LiBT
bywgdHJ5IHRvIGNvbXBpbGUKICAgICAvLyBzb21ldGhpbmcuCi0gICAgYXV0byB0cmlnZ2VySXRl
cmF0b3IgPSBqaXRDb2RlLT50aWVyVXBFbnRyeVRyaWdnZXJzLmZpbmQob3NyRW50cnlCeXRlY29k
ZUluZGV4KTsKLSAgICBSRUxFQVNFX0FTU0VSVCh0cmlnZ2VySXRlcmF0b3IgIT0gaml0Q29kZS0+
dGllclVwRW50cnlUcmlnZ2Vycy5lbmQoKSk7CisKKyAgICBhdXRvIHRyaWdnZXJJdGVyYXRvciA9
IGppdENvZGUtPnRpZXJVcEVudHJ5VHJpZ2dlcnMuZmluZChvcmlnaW5CeXRlY29kZUluZGV4KTsK
KyAgICBpZiAodHJpZ2dlckl0ZXJhdG9yID09IGppdENvZGUtPnRpZXJVcEVudHJ5VHJpZ2dlcnMu
ZW5kKCkpIHsKKyAgICAgICAgaml0Q29kZS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRP
bkNvbXBpbGF0aW9uUmVzdWx0KGNvZGVCbG9jaywgQ29tcGlsYXRpb25EZWZlcnJlZCk7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwogICAgIEpJVENvZGU6OlRyaWdnZXJSZWFzb24q
IHRyaWdnZXJBZGRyZXNzID0gJih0cmlnZ2VySXRlcmF0b3ItPnZhbHVlKTsKIAogICAgIE9wZXJh
bmRzPEpTVmFsdWU+IG11c3RIYW5kbGVWYWx1ZXM7CisgICAgdW5zaWduZWQgc3RyZWFtSW5kZXgg
PSBqaXRDb2RlLT5ieXRlY29kZUluZGV4VG9TdHJlYW1JbmRleC5nZXQob3JpZ2luQnl0ZWNvZGVJ
bmRleCk7CiAgICAgaml0Q29kZS0+cmVjb25zdHJ1Y3QoCi0gICAgICAgIGV4ZWMsIGNvZGVCbG9j
aywgQ29kZU9yaWdpbihvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpLCBzdHJlYW1JbmRleCwgbXVzdEhh
bmRsZVZhbHVlcyk7CisgICAgICAgIGV4ZWMsIGNvZGVCbG9jaywgQ29kZU9yaWdpbihvcmlnaW5C
eXRlY29kZUluZGV4KSwgc3RyZWFtSW5kZXgsIG11c3RIYW5kbGVWYWx1ZXMpOwogICAgIENvZGVC
bG9jayogcmVwbGFjZW1lbnRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7
CiAKICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgInRyaWdnZXJGVExPU1IiLCAo
KSk7CiAgICAgQ29tcGlsYXRpb25SZXN1bHQgZm9yRW50cnlSZXN1bHQgPSBjb21waWxlKAotICAg
ICAgICAqdm0sIHJlcGxhY2VtZW50Q29kZUJsb2NrLCBjb2RlQmxvY2ssIEZUTEZvck9TUkVudHJ5
TW9kZSwgb3NyRW50cnlCeXRlY29kZUluZGV4LAorICAgICAgICAqdm0sIHJlcGxhY2VtZW50Q29k
ZUJsb2NrLCBjb2RlQmxvY2ssIEZUTEZvck9TUkVudHJ5TW9kZSwgb3JpZ2luQnl0ZWNvZGVJbmRl
eCwKICAgICAgICAgbXVzdEhhbmRsZVZhbHVlcywgVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKHRyaWdnZXJBZGRyZXNzKSk7CiAKICAgICBpZiAoaml0
Q29kZS0+bmV2ZXJFeGVjdXRlZEVudHJ5KQpAQCAtMzIzMywxMSArMzI1NSw5IEBAIHZvaWQgSklU
X09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93SW5Mb28KICAgICAgICAgICAgIGppdENvZGUtPnRp
ZXJVcENvdW50ZXIsICJcbiIpOwogICAgIH0KIAotICAgIGF1dG8gdGllclVwSGllcmFyY2h5RW50
cnkgPSBqaXRDb2RlLT50aWVyVXBJbkxvb3BIaWVyYXJjaHkuZmluZChieXRlY29kZUluZGV4KTsK
LSAgICBpZiAodGllclVwSGllcmFyY2h5RW50cnkgIT0gaml0Q29kZS0+dGllclVwSW5Mb29wSGll
cmFyY2h5LmVuZCgpCi0gICAgICAgICYmICF0aWVyVXBIaWVyYXJjaHlFbnRyeS0+dmFsdWUuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIHRpZXJVcENvbW1vbihleGVjLCBieXRlY29kZUluZGV4LCB0aWVy
VXBIaWVyYXJjaHlFbnRyeS0+dmFsdWUuZmlyc3QoKSk7Ci0gICAgfSBlbHNlIGlmIChzaG91bGRU
cmlnZ2VyRlRMQ29tcGlsZShjb2RlQmxvY2ssIGppdENvZGUpKQorICAgIGlmIChqaXRDb2RlLT50
aWVyVXBJbkxvb3BIaWVyYXJjaHkuY29udGFpbnMoYnl0ZWNvZGVJbmRleCkpCisgICAgICAgIHRp
ZXJVcENvbW1vbihleGVjLCBieXRlY29kZUluZGV4KTsKKyAgICBlbHNlIGlmIChzaG91bGRUcmln
Z2VyRlRMQ29tcGlsZShjb2RlQmxvY2ssIGppdENvZGUpKQogICAgICAgICB0cmlnZ2VyRlRMUmVw
bGFjZW1lbnRDb21waWxlKHZtLCBjb2RlQmxvY2ssIGppdENvZGUpOwogCiAgICAgLy8gU2luY2Ug
d2UgY2Fubm90IE9TUiBFbnRlciBoZXJlLCB0aGUgZGVmYXVsdCAib3B0aW1pemVTb29uKCkiIGlz
IG5vdCB1c2VmdWwuCkBAIC0zMjcwLDcgKzMyOTAsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIHRy
aWdnZXJPU1JFbnRyeU5vdyhFCiAgICAgICAgICAgICBqaXRDb2RlLT50aWVyVXBDb3VudGVyLCAi
XG4iKTsKICAgICB9CiAKLSAgICByZXR1cm4gdGllclVwQ29tbW9uKGV4ZWMsIGJ5dGVjb2RlSW5k
ZXgsIGJ5dGVjb2RlSW5kZXgpOworICAgIHJldHVybiB0aWVyVXBDb21tb24oZXhlYywgYnl0ZWNv
ZGVJbmRleCk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
</data>
<flag name="review"
          id="360070"
          type_id="1"
          status="-"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341929</attachid>
            <date>2018-06-04 15:51:34 -0700</date>
            <delta_ts>2018-06-07 00:12:00 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>16611</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzI0NzkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDE4LTA2LTA0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIE1ha2UgREZHIHRvIEZUTCBPU1IgZW50cnkgY29kZSBtb3JlIHNhbmUg
YnkgcmVtb3ZpbmcgYmFkIFJFTEVBU0VfQVNTRVJUUyBhbmQgbWFraW5nIGl0IHRyaWdnZXIgY29t
cGlsZXMgaW4gb3V0ZXIgbG9vcHMgYmVmb3JlIGlubmVyIG9uZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NjIxOAorICAgICAgICA8cmRhcjovL3By
b2JsZW0vMzg0NDk1NDA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBzdHJlc3MvZG9udC1jcmFzaC1mdGwtb3NyLWVudHJ5LmpzOiBBZGRlZC4KKyAg
ICAgICAgKGZfMCk6CisgICAgICAgIChmXzEpOgorCiAyMDE4LTA2LTAyICBDYWlvIExpbWEgIDx0
aWNhaW9saW1hQGdtYWlsLmNvbT4KIAogICAgICAgICBbRVNOZXh0XVtCaWdJbnRdIEltcGxlbWVu
dCBzdXBwb3J0IGZvciBhZGRpdGlvbiBvcGVyYXRpb25zCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9k
b250LWNyYXNoLWZ0bC1vc3ItZW50cnkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
ZG9udC1jcmFzaC1mdGwtb3NyLWVudHJ5LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3Ry
ZXNzL2RvbnQtY3Jhc2gtZnRsLW9zci1lbnRyeS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI2IEBACisvL0AgcnVuRGVmYXVsdCgiLS1qaXRQb2xpY3lTY2FsZT0wLS1qaXRQb2xpY3lTY2Fs
ZT0wIikKKworLy8gVGhpcyB0ZXN0IHNob3VsZCBub3QgY3Jhc2guCisKK2Z1bmN0aW9uIGZfMCgp
IHsKKyAgICB2YXIgdl80ID0gMTsKKyAgICB2YXIgdl81ID0gJ2EnOworICAgIHdoaWxlICh2XzQg
PCAyNTYpIHsKKyAgICAgICAgdl80IDw8PSAxOworICAgIH0KKyAgICByZXR1cm4gdl80OworfQor
ZnVuY3Rpb24gZl8xKHZfMSkgeworICAgIHZhciBzdW0gPSAwOworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgMTAwMDsgaSsrKSB7CisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKSB7
CisgICAgICAgICAgICBzdW0gKz0gdl8xKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IHN1bTsKK30KKworbGV0IGhlbGxvOworZm9yICh2YXIgaT0wOyBpPDEwMDA7IGkrKykgeworICAg
IGhlbGxvID0gZl8xKGZfMCk7Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlz
aW9uIDIzMjQ3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwzMSBAQAorMjAxOC0wNi0wNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRp
QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIERGRyB0byBGVEwgT1NSIGVudHJ5IGNvZGUgbW9y
ZSBzYW5lIGJ5IHJlbW92aW5nIGJhZCBSRUxFQVNFX0FTU0VSVFMgYW5kIG1ha2luZyBpdCB0cmln
Z2VyIGNvbXBpbGVzIGluIG91dGVyIGxvb3BzIGJlZm9yZSBpbm5lciBvbmVzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODYyMTgKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzM4NDQ5NTQwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgdGllclVwQ29tbW9uIGp1c3QgYSBiaXQg
bW9yZSBzYW5lLiBUaGVyZSBhcmUgYSBmZXcgdGhpbmdzCisgICAgICAgIHRoYXQgSSBkaWQ6Cisg
ICAgICAgIC0gVGhlcmUgd2VyZSBhIGZldyByZWxlYXNlIGFzc2VydHMgdGhhdCB3ZXJlIGNyYXNo
aW5nLiBUaG9zZSByZWxlYXNlIGFzc2VydHMKKyAgICAgICAgd2VyZSBpbmNvcnJlY3QuIFRoZXkg
d2VyZSBtYWtpbmcgYXNzdW1wdGlvbnMgYWJvdXQgaG93IHRoZSBjb2RlIGFuZCBkYXRhCisgICAg
ICAgIHN0cnVjdHVyZXMgd2VyZSBvcmRlcmVkIHRoYXQgd2VyZSB3cm9uZy4gVGhpcyBwYXRjaCBy
ZW1vdmVzIHRoZW0uIFRoZSBjb2RlCisgICAgICAgIHdhcyB1c2luZyB0aGUgbG9vcCBoaWVyYXJj
aHkgdmVjdG9yIHRvIG1ha2UgYXNzdW1wdGlvbnMgYWJvdXQgd2hpY2ggbG9vcCB3ZQorICAgICAg
ICB3ZXJlIGN1cnJlbnRseSBleGVjdXRpbmcgaW4sIHdoaWNoIGlzIGluY29ycmVjdC4gVGhlIG9u
bHkgaW5mb3JtYXRpb24gdGhhdAorICAgICAgICBjYW4gYmUgdXNlZCBhYm91dCB3aGVyZSB3ZSdy
ZSBjdXJyZW50bHkgZXhlY3V0aW5nIGlzIHRoZSBieXRlY29kZSBpbmRleCB3ZSdyZQorICAgICAg
ICBhdC4KKyAgICAgICAgLSBUaGlzIG1ha2VzIGl0IHNvIHRoYXQgd2UgZ28gYmFjayB0byB0cnlp
bmcgdG8gY29tcGlsZSBvdXRlciBsb29wcyBiZWZvcmUKKyAgICAgICAgaW5uZXIgbG9vcHMuIEpG
IGFjY2lkZW50YWxseSByZXZlcnRlZCB0aGlzIGJlaGF2aW9yIHRoYXQgQmVuIGltcGxlbWVudGVk
LgorICAgICAgICBKRiBtYWRlIGl0IHNvIHRoYXQgd2UganVzdCBjb21waWxlZCB0aGUgaW5uZXIg
bW9zdCBsb29wLiBJIG1ha2UgdGhpcworICAgICAgICBmdW5jdGlvbmFsaXR5IHdvcmsgYnkgZmly
c3QgdHJpZ2dlcmluZyBhIGNvbXBpbGUgZm9yIHRoZSBvdXRlciBtb3N0IGxvb3AKKyAgICAgICAg
dGhhdCB0aGUgY29kZSBpcyBjdXJyZW50bHkgZXhlY3V0aW5nIGluIGFuZCB0aGF0IGNhbiBwZXJm
b3JtIE9TUiBlbnRyeS4KKyAgICAgICAgSG93ZXZlciwgc29tZSBwcm9ncmFtcyBjYW4gZ2V0IHN0
dWNrIGluIGlubmVyIGxvb3BzLiBUaGUgY29kZSB3b3JrcyBieQorICAgICAgICBwcm9ncmVzc2l2
ZWx5IGFza2luZyBpbm5lciBsb29wcyB0byBjb21waWxlIGlmIHByb2dyYW0gZXhlY3V0aW9uIGhh
cyBub3QKKyAgICAgICAgeWV0IHJlYWNoZWQgYW4gb3V0ZXIgbG9vcC4KKworICAgICAgICAqIGRm
Zy9ERkdPcGVyYXRpb25zLmNwcDoKKwogMjAxOC0wNi0wNCAgWXVzdWtlIFN1enVraSAgPHV0YXRh
bmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBHZXQgcmlkIG9mIFVuY29uZGl0aW9uYWxGaW5h
bGl6ZXJzIGFuZCBXZWFrUmVmZXJlbmNlSGFydmVzdGVycwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMzI0NTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDE4LDcgKzMwMTgsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vdyhF
eGVjCiAgICAgfQogfQogCi1zdGF0aWMgY2hhciogdGllclVwQ29tbW9uKEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgb3JpZ2luQnl0ZWNvZGVJbmRleCwgdW5zaWduZWQgb3NyRW50cnlCeXRlY29k
ZUluZGV4KQorc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIG9yaWdpbkJ5dGVjb2RlSW5kZXgsIGJvb2wgY2FuT1NSRW50ZXJIZXJlKQogewogICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29k
ZUJsb2NrKCk7CkBAIC0zMDMyLDEwICszMDMyLDYgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1v
bihFeGVjU3RhdGUqIGV4ZQogICAgICAgICB3b3JrbGlzdFN0YXRlID0gV29ya2xpc3Q6Ok5vdEtu
b3duOwogCiAgICAgSklUQ29kZSogaml0Q29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmco
KTsKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgb25seSB0cnVlIGZvciB0cmlnZ2VyVGllclVw
Tm93SW5Mb29wLCB3aGljaCBjYW4gbmV2ZXIKLSAgICAvLyBiZSBhbiBPU1IgZW50cnkuCi0gICAg
Ym9vbCBjYW5PU1JGcm9tSGVyZSA9IG9yaWdpbkJ5dGVjb2RlSW5kZXggPT0gb3NyRW50cnlCeXRl
Y29kZUluZGV4OwogICAgIAogICAgIGJvb2wgdHJpZ2dlcmVkU2xvd1BhdGhUb1N0YXJ0Q29tcGls
YXRpb24gPSBmYWxzZTsKICAgICBhdXRvIHRpZXJVcEVudHJ5VHJpZ2dlcnMgPSBqaXRDb2RlLT50
aWVyVXBFbnRyeVRyaWdnZXJzLmZpbmQob3JpZ2luQnl0ZWNvZGVJbmRleCk7CkBAIC0zMDQ4LDE1
ICszMDQ0LDEzIEBAIHN0YXRpYyBjaGFyKiB0aWVyVXBDb21tb24oRXhlY1N0YXRlKiBleGUKIAog
ICAgICAgICBjYXNlIEpJVENvZGU6OlRyaWdnZXJSZWFzb246OkNvbXBpbGF0aW9uRG9uZToKICAg
ICAgICAgICAgIC8vIFRoZSB0cmlnZ2VyIHdhcyBzZXQgYmVjYXVzZSBjb21waWxhdGlvbiBjb21w
bGV0ZWQuIERvbid0IHVuc2V0IGl0Ci0gICAgICAgICAgICAvLyBzbyB0aGF0IGZ1cnRoZXIgREZH
IGV4ZWN1dGlvbnMgT1NSIGVudGVycyBhcyB3ZWxsLgotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY2FuT1NSRnJvbUhlcmUpOworICAgICAgICAgICAgLy8gc28gdGhhdCBmdXJ0aGVyIERGRyBl
eGVjdXRpb25zIE9TUiBlbnRlciBhcyB3ZWxsLgogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAg
ICAgY2FzZSBKSVRDb2RlOjpUcmlnZ2VyUmVhc29uOjpTdGFydENvbXBpbGF0aW9uOgogICAgICAg
ICAgICAgLy8gV2Ugd2VyZSBhc2tlZCB0byBlbnRlciBhcyBzb29uIGFzIHBvc3NpYmxlIGFuZCBz
dGFydCBjb21waWxpbmcgYW4KICAgICAgICAgICAgIC8vIGVudHJ5IGZvciB0aGUgY3VycmVudCBi
eXRlY29kZSBsb2NhdGlvbi4gVW5zZXQgdGhpcyB0cmlnZ2VyIHNvIHdlCiAgICAgICAgICAgICAv
LyBkb24ndCBjb250aW51YWxseSBlbnRlci4KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNh
bk9TUkZyb21IZXJlKTsKICAgICAgICAgICAgIHRpZXJVcEVudHJ5VHJpZ2dlcnMtPnZhbHVlID0g
SklUQ29kZTo6VHJpZ2dlclJlYXNvbjo6RG9udFRyaWdnZXI7CiAgICAgICAgICAgICB0cmlnZ2Vy
ZWRTbG93UGF0aFRvU3RhcnRDb21waWxhdGlvbiA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsK
QEAgLTMwNjUsMTEgKzMwNTksMjYgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihFeGVjU3Rh
dGUqIGV4ZQogCiAgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gV29ya2xpc3Q6OkNvbXBpbGluZykg
ewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5RlRMQ29tcGls
ZSIsICgic3RpbGwgY29tcGlsaW5nIikpOwotICAgICAgICBqaXRDb2RlLT5zZXRPcHRpbWl6YXRp
b25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoCi0gICAgICAgICAgICBjb2RlQmxv
Y2ssIENvbXBpbGF0aW9uRGVmZXJyZWQpOworICAgICAgICBqaXRDb2RlLT5zZXRPcHRpbWl6YXRp
b25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoY29kZUJsb2NrLCBDb21waWxhdGlv
bkRlZmVycmVkKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCisgICAgLy8gSWYg
d2UgY2FuIE9TUiBFbnRlciwgZG8gaXQgcmlnaHQgYXdheS4KKyAgICBpZiAoY2FuT1NSRW50ZXJI
ZXJlKSB7CisgICAgICAgIGF1dG8gaXRlciA9IGppdENvZGUtPmJ5dGVjb2RlSW5kZXhUb1N0cmVh
bUluZGV4LmZpbmQob3JpZ2luQnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGlmIChpdGVyICE9IGpp
dENvZGUtPmJ5dGVjb2RlSW5kZXhUb1N0cmVhbUluZGV4LmVuZCgpKSB7CisgICAgICAgICAgICB1
bnNpZ25lZCBzdHJlYW1JbmRleCA9IGl0ZXItPnZhbHVlOworICAgICAgICAgICAgaWYgKENvZGVC
bG9jayogZW50cnlCbG9jayA9IGppdENvZGUtPm9zckVudHJ5QmxvY2soKSkgeworICAgICAgICAg
ICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIk9TUiBlbnRyeTogRnJvbSAiLCBSYXdQb2ludGVyKGppdENvZGUpLCAiIGdvdCBlbnRy
eSBibG9jayAiLCBSYXdQb2ludGVyKGVudHJ5QmxvY2spLCAiXG4iKTsKKyAgICAgICAgICAgICAg
ICBpZiAodm9pZCogYWRkcmVzcyA9IEZUTDo6cHJlcGFyZU9TUkVudHJ5KGV4ZWMsIGNvZGVCbG9j
aywgZW50cnlCbG9jaywgb3JpZ2luQnl0ZWNvZGVJbmRleCwgc3RyZWFtSW5kZXgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoZW50cnlCbG9jaywgIm9zckVudHJ5
IiwgKCJhdCBiYyMiLCBvcmlnaW5CeXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXRhZ0NvZGVQdHI8Y2hhcio+KGFkZHJlc3MsIEpTRW50cnlQdHJUYWcsIGJpdHdp
c2VfY2FzdDxQdHJUYWc+KGV4ZWMpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAod29ya2xpc3RTdGF0ZSA9PSBXb3JrbGlzdDo6
Q29tcGlsZWQpIHsKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJkZWxh
eUZUTENvbXBpbGUiLCAoImNvbXBpbGVkIGFuZCBmYWlsZWQiKSk7CiAgICAgICAgIC8vIFRoaXMg
bWVhbnMgdGhhdCBjb21waWxhdGlvbiBmYWlsZWQgYW5kIHdlIGFscmVhZHkgc2V0IHRoZSB0aHJl
c2hvbGRzLgpAQCAtMzA3OCwxOSArMzA4Nyw2IEBAIHN0YXRpYyBjaGFyKiB0aWVyVXBDb21tb24o
RXhlY1N0YXRlKiBleGUKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgLy8g
SWYgd2UgY2FuIE9TUiBFbnRlciwgZG8gaXQgcmlnaHQgYXdheS4KLSAgICBpZiAoY2FuT1NSRnJv
bUhlcmUpIHsKLSAgICAgICAgdW5zaWduZWQgc3RyZWFtSW5kZXggPSBqaXRDb2RlLT5ieXRlY29k
ZUluZGV4VG9TdHJlYW1JbmRleC5nZXQob3JpZ2luQnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlm
IChDb2RlQmxvY2sqIGVudHJ5QmxvY2sgPSBqaXRDb2RlLT5vc3JFbnRyeUJsb2NrKCkpIHsKLSAg
ICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgICAgICAgICAgZGF0
YUxvZygiT1NSIGVudHJ5OiBGcm9tICIsIFJhd1BvaW50ZXIoaml0Q29kZSksICIgZ290IGVudHJ5
IGJsb2NrICIsIFJhd1BvaW50ZXIoZW50cnlCbG9jayksICJcbiIpOwotICAgICAgICAgICAgaWYg
KHZvaWQqIGFkZHJlc3MgPSBGVEw6OnByZXBhcmVPU1JFbnRyeShleGVjLCBjb2RlQmxvY2ssIGVu
dHJ5QmxvY2ssIG9yaWdpbkJ5dGVjb2RlSW5kZXgsIHN0cmVhbUluZGV4KSkgewotICAgICAgICAg
ICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoZW50cnlCbG9jaywgIm9zckVudHJ5IiwgKCJhdCBi
YyMiLCBvcmlnaW5CeXRlY29kZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJldGFn
Q29kZVB0cjxjaGFyKj4oYWRkcmVzcywgSlNFbnRyeVB0clRhZywgYml0d2lzZV9jYXN0PFB0clRh
Zz4oZXhlYykpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCiAgICAgLy8gLSBJ
ZiB3ZSBkb24ndCBoYXZlIGFuIEZUTCBjb2RlIGJsb2NrLCB0aGVuIHRyeSB0byBjb21waWxlIG9u
ZS4KICAgICAvLyAtIElmIHdlIGRvIGhhdmUgYW4gRlRMIGNvZGUgYmxvY2ssIHRoZW4gdHJ5IHRv
IGVudGVyIGZvciBhIHdoaWxlLgogICAgIC8vIC0gSWYgd2UgY291bGRuJ3QgZW50ZXIgZm9yIGEg
d2hpbGUsIHRoZW4gdHJpZ2dlciBPU1IgZW50cnkuCkBAIC0zMTEyLDcgKzMxMDgsNiBAQCBzdGF0
aWMgY2hhciogdGllclVwQ29tbW9uKEV4ZWNTdGF0ZSogZXhlCiAgICAgfSBlbHNlCiAgICAgICAg
IENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGVsYXlGVExDb21waWxlIiwgKCJhdm9p
ZGluZyByZXBsYWNlbWVudCBjb21waWxlIikpOwogCi0gICAgLy8gSXQncyB0aW1lIHRvIHRyeSB0
byBjb21waWxlIGNvZGUgZm9yIE9TUiBlbnRyeS4KICAgICBpZiAoQ29kZUJsb2NrKiBlbnRyeUJs
b2NrID0gaml0Q29kZS0+b3NyRW50cnlCbG9jaygpKSB7CiAgICAgICAgIGlmIChqaXRDb2RlLT5v
c3JFbnRyeVJldHJ5IDwgT3B0aW9uczo6ZnRsT1NSRW50cnlSZXRyeVRocmVzaG9sZCgpKSB7CiAg
ICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5RlRMQ29tcGls
ZSIsICgiT1NSIGVudHJ5IGZhaWxlZCwgT1NSIGVudHJ5IHRocmVzaG9sZCBub3QgbWV0IikpOwpA
QCAtMzE0NCw0OCArMzEzOSw3NSBAQCBzdGF0aWMgY2hhciogdGllclVwQ29tbW9uKEV4ZWNTdGF0
ZSogZXhlCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGlmICghY2FuT1NS
RnJvbUhlcmUpIHsKLSAgICAgICAgLy8gV2UgY2FuJ3QgT1NSIGZyb20gaGVyZSwgb3IgZXZlbiBz
dGFydCBhIGNvbXBpbGF0aW9uIGJlY2F1c2UgZG9pbmcgc28KLSAgICAgICAgLy8gY2FsbHMgaml0
Q29kZS0+cmVjb25zdHJ1Y3Qgd2hpY2ggd291bGQgZ2V0IHRoZSB3cm9uZyBzdGF0ZS4KLSAgICAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAgIGRhdGFMb2coIk5vbi1P
U1ItYWJsZSBiYyMiLCBvcmlnaW5CeXRlY29kZUluZGV4LCAiIGluICIsICpjb2RlQmxvY2ssICIg
c2V0dGluZyBwYXJlbnQgbG9vcCBiYyMiLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsICIncyB0cmln
Z2VyIGFuZCBiYWNraW5nIG9mZi5cbiIpOwotICAgICAgICBqaXRDb2RlLT50aWVyVXBFbnRyeVRy
aWdnZXJzLnNldChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIEpJVENvZGU6OlRyaWdnZXJSZWFzb246
OlN0YXJ0Q29tcGlsYXRpb24pOwotICAgICAgICBqaXRDb2RlLT5zZXRPcHRpbWl6YXRpb25UaHJl
c2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoY29kZUJsb2NrLCBDb21waWxhdGlvbkRlZmVy
cmVkKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgc3Ry
ZWFtSW5kZXggPSBqaXRDb2RlLT5ieXRlY29kZUluZGV4VG9TdHJlYW1JbmRleC5nZXQob3NyRW50
cnlCeXRlY29kZUluZGV4KTsKKyAgICAvLyBJdCdzIHRpbWUgdG8gdHJ5IHRvIGNvbXBpbGUgY29k
ZSBmb3IgT1NSIGVudHJ5LgogCiAgICAgaWYgKCF0cmlnZ2VyZWRTbG93UGF0aFRvU3RhcnRDb21w
aWxhdGlvbikgewotICAgICAgICBhdXRvIHRpZXJVcEhpZXJhcmNoeUVudHJ5ID0gaml0Q29kZS0+
dGllclVwSW5Mb29wSGllcmFyY2h5LmZpbmQob3NyRW50cnlCeXRlY29kZUluZGV4KTsKLSAgICAg
ICAgaWYgKHRpZXJVcEhpZXJhcmNoeUVudHJ5ICE9IGppdENvZGUtPnRpZXJVcEluTG9vcEhpZXJh
cmNoeS5lbmQoKSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvc3JFbnRyeUNhbmRpZGF0
ZSA6IHRpZXJVcEhpZXJhcmNoeUVudHJ5LT52YWx1ZSkgewotICAgICAgICAgICAgICAgIGlmIChq
aXRDb2RlLT50aWVyVXBFbnRyeVNlZW4uY29udGFpbnMob3NyRW50cnlDYW5kaWRhdGUpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIEFzayBhbiBlbmNsb3NpbmcgbG9vcCB0byBjb21waWxlLCBp
bnN0ZWFkIG9mIGRvaW5nIHNvIGhlcmUuCi0gICAgICAgICAgICAgICAgICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbm5lci1s
b29wIGJjIyIsIG9yaWdpbkJ5dGVjb2RlSW5kZXgsICIgaW4gIiwgKmNvZGVCbG9jaywgIiBzZXR0
aW5nIHBhcmVudCBsb29wIGJjIyIsIG9zckVudHJ5Q2FuZGlkYXRlLCAiJ3MgdHJpZ2dlciBhbmQg
YmFja2luZyBvZmYuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgaml0Q29kZS0+dGllclVwRW50
cnlUcmlnZ2Vycy5zZXQob3NyRW50cnlDYW5kaWRhdGUsIEpJVENvZGU6OlRyaWdnZXJSZWFzb246
OlN0YXJ0Q29tcGlsYXRpb24pOwotICAgICAgICAgICAgICAgICAgICBqaXRDb2RlLT5zZXRPcHRp
bWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoY29kZUJsb2NrLCBDb21w
aWxhdGlvbkRlZmVycmVkKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICAgICAgLy8gQW4gaW5uZXIgbG9vcCBkaWRuJ3Qgc3BlY2lmaWNhbGx5IGFzayBmb3IgdXMg
dG8ga2ljayBvZmYgYSBjb21waWxhdGlvbi4gVGhpcyBtZWFucyB0aGUgY291bnRlcgorICAgICAg
ICAvLyBjcm9zc2VkIGl0cyB0aHJlc2hvbGQuIFdlIGVpdGhlciBmYWxsIHRocm91Z2ggYW5kIGtp
Y2sgb2ZmIGEgY29tcGlsZSBmb3Igb3JpZ2luQnl0ZWNvZGVJbmRleCwKKyAgICAgICAgLy8gb3Ig
d2UgZmxhZyBhbiBvdXRlciBsb29wIHRvIGltbWVkaWF0ZWx5IHRyeSB0byBjb21waWxlIGl0c2Vs
Zi4gSWYgdGhlcmUgYXJlIG91dGVyIGxvb3BzLAorICAgICAgICAvLyB3ZSBmaXJzdCB0cnkgdG8g
bWFrZSB0aGVtIGNvbXBpbGUgdGhlbXNlbHZlcy4gQnV0IHdlIHdpbGwgZXZlbnR1YWxseSBmYWxs
IGJhY2sgdG8gY29tcGlsaW5nCisgICAgICAgIC8vIGEgcHJvZ3Jlc3NpdmVseSBpbm5lciBsb29w
IGlmIGl0IHRha2VzIHRvbyBsb25nIGZvciBjb250cm9sIHRvIHJlYWNoIGFuIG91dGVyIGxvb3Au
CisKKyAgICAgICAgYXV0byB0cnlUcmlnZ2VyT3V0ZXJMb29wVG9Db21waWxlID0gWyZdIHsKKyAg
ICAgICAgICAgIGF1dG8gdGllclVwSGllcmFyY2h5RW50cnkgPSBqaXRDb2RlLT50aWVyVXBJbkxv
b3BIaWVyYXJjaHkuZmluZChvcmlnaW5CeXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIGlmICh0
aWVyVXBIaWVyYXJjaHlFbnRyeSA9PSBqaXRDb2RlLT50aWVyVXBJbkxvb3BIaWVyYXJjaHkuZW5k
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAvLyBUaGlz
IHZlY3RvciBpcyBvcmRlcmVkIGZyb20gaW5uZXJtb3N0IHRvIG91dGVybW9zdCBsb29wLiBFdmVy
eSBieXRlY29kZSBlbnRyeSBpbiB0aGlzIHZlY3RvciBpcworICAgICAgICAgICAgLy8gYWxsb3dl
ZCB0byBkbyBPU1IgZW50cnkuIFdlIHN0YXJ0IHdpdGggdGhlIG91dGVybW9zdCBsb29wIGFuZCBt
YWtlIG91ciB3YXkgaW53YXJkcyAoaGVuY2Ugd2h5IHdlCisgICAgICAgICAgICAvLyBpdGVyYXRl
IHRoZSB2ZWN0b3IgaW4gcmV2ZXJzZSkuIE91ciBwb2xpY3kgaXMgdGhhdCB3ZSB3aWxsIHRyaWdn
ZXIgYW4gb3V0ZXIgbG9vcCB0byBjb21waWxlCisgICAgICAgICAgICAvLyBpbW1lZGlhdGVseSB3
aGVuIHByb2dyYW0gY29udHJvbCByZWFjaGVzIGl0LiBJZiBwcm9ncmFtIGNvbnRyb2wgaXMgdGFr
aW5nIHRvbyBsb25nIHRvIHJlYWNoIHRoYXQKKyAgICAgICAgICAgIC8vIG91dGVyIGxvb3AsIHdl
IHByb2dyZXNzaXZlbHkgbW92ZSBpbndhcmRzLCBtZWFuaW5nLCB3ZSdsbCBldmVudHVhbGx5IHRy
aWdnZXIgc29tZSBsb29wIHRoYXQgaXMKKyAgICAgICAgICAgIC8vIGV4ZWN1dGluZyB0byBjb21w
aWxlLiBXZSBzdGFydCB3aXRoIHRyeWluZyB0byBjb21waWxlIG91dGVyIGxvb3BzIHNpbmNlIHdl
IGJlbGlldmUgb3V0ZXIgbG9vcAorICAgICAgICAgICAgLy8gY29tcGlsYXRpb25zIHJldmVhbCB0
aGUgYmVzdCBvcHBvcnR1bml0aWVzIGZvciBvcHRpbWl6aW5nIGNvZGUuCisgICAgICAgICAgICBm
b3IgKGF1dG8gaXRlciA9IHRpZXJVcEhpZXJhcmNoeUVudHJ5LT52YWx1ZS5yYmVnaW4oKSwgZW5k
ID0gdGllclVwSGllcmFyY2h5RW50cnktPnZhbHVlLnJlbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRl
cikgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9zckVudHJ5Q2FuZGlkYXRlID0gKml0ZXI7
CisKKyAgICAgICAgICAgICAgICBpZiAoaml0Q29kZS0+dGllclVwRW50cnlUcmlnZ2Vycy5nZXQo
b3NyRW50cnlDYW5kaWRhdGUpID09IEpJVENvZGU6OlRyaWdnZXJSZWFzb246OlN0YXJ0Q29tcGls
YXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIGFscmVh
ZHkgYXNrZWQgdGhpcyBsb29wIHRvIGNvbXBpbGUuIElmIHdlJ3ZlIHJlYWNoZWQgaGVyZSwgaXQK
KyAgICAgICAgICAgICAgICAgICAgLy8gbWVhbnMgcHJvZ3JhbSBjb250cm9sIGhhcyBub3QgeWV0
IHJlYWNoZWQgdGhhdCBsb29wLiBTbyBpdCdzIHRha2luZyB0b28gbG9uZyB0byBjb21waWxlLgor
ICAgICAgICAgICAgICAgICAgICAvLyBTbyB3ZSBtb3ZlIG9uIHRvIGFza2luZyB0aGUgaW5uZXIg
bG9vcCBvZiB0aGlzIGxvb3AgdG8gY29tcGlsZSBpdHNlbGYuCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFRoaXMg
aXMgd2hlcmUgd2UgYXNrIHRoZSBvdXRlciB0byBsb29wIHRvIGltbWVkaWF0ZWx5IGNvbXBpbGUg
aXRzZWxmIGlmIHByb2dyYW0KKyAgICAgICAgICAgICAgICAvLyBjb250cm9sIHJlYWNoZXMgaXQu
CisgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiSW5uZXItbG9vcCBiYyMiLCBvcmlnaW5CeXRlY29kZUluZGV4LCAi
IGluICIsICpjb2RlQmxvY2ssICIgc2V0dGluZyBwYXJlbnQgbG9vcCBiYyMiLCBvc3JFbnRyeUNh
bmRpZGF0ZSwgIidzIHRyaWdnZXIgYW5kIGJhY2tpbmcgb2ZmLlxuIik7CisgICAgICAgICAgICAg
ICAgaml0Q29kZS0+dGllclVwRW50cnlUcmlnZ2Vycy5zZXQob3NyRW50cnlDYW5kaWRhdGUsIEpJ
VENvZGU6OlRyaWdnZXJSZWFzb246OlN0YXJ0Q29tcGlsYXRpb24pOworICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKHRyeVRyaWdnZXJPdXRlckxvb3BUb0NvbXBpbGUo
KSkgeworICAgICAgICAgICAgaml0Q29kZS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRP
bkNvbXBpbGF0aW9uUmVzdWx0KGNvZGVCbG9jaywgQ29tcGlsYXRpb25EZWZlcnJlZCk7CisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIFdlIGFy
ZW4ndCBjb21waWxpbmcgYW5kIGhhdmVuJ3QgY29tcGlsZWQgYW55dGhpbmcgZm9yIE9TUiBlbnRy
eS4gU28sIHRyeSB0byBjb21waWxlCiAgICAgLy8gc29tZXRoaW5nLgotICAgIGF1dG8gdHJpZ2dl
ckl0ZXJhdG9yID0gaml0Q29kZS0+dGllclVwRW50cnlUcmlnZ2Vycy5maW5kKG9zckVudHJ5Qnl0
ZWNvZGVJbmRleCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQodHJpZ2dlckl0ZXJhdG9yICE9IGppdENv
ZGUtPnRpZXJVcEVudHJ5VHJpZ2dlcnMuZW5kKCkpOworCisgICAgYXV0byB0cmlnZ2VySXRlcmF0
b3IgPSBqaXRDb2RlLT50aWVyVXBFbnRyeVRyaWdnZXJzLmZpbmQob3JpZ2luQnl0ZWNvZGVJbmRl
eCk7CisgICAgaWYgKHRyaWdnZXJJdGVyYXRvciA9PSBqaXRDb2RlLT50aWVyVXBFbnRyeVRyaWdn
ZXJzLmVuZCgpKSB7CisgICAgICAgIGppdENvZGUtPnNldE9wdGltaXphdGlvblRocmVzaG9sZEJh
c2VkT25Db21waWxhdGlvblJlc3VsdChjb2RlQmxvY2ssIENvbXBpbGF0aW9uRGVmZXJyZWQpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKICAgICBKSVRDb2RlOjpUcmlnZ2VyUmVh
c29uKiB0cmlnZ2VyQWRkcmVzcyA9ICYodHJpZ2dlckl0ZXJhdG9yLT52YWx1ZSk7CiAKICAgICBP
cGVyYW5kczxKU1ZhbHVlPiBtdXN0SGFuZGxlVmFsdWVzOworICAgIHVuc2lnbmVkIHN0cmVhbUlu
ZGV4ID0gaml0Q29kZS0+Ynl0ZWNvZGVJbmRleFRvU3RyZWFtSW5kZXguZ2V0KG9yaWdpbkJ5dGVj
b2RlSW5kZXgpOwogICAgIGppdENvZGUtPnJlY29uc3RydWN0KAotICAgICAgICBleGVjLCBjb2Rl
QmxvY2ssIENvZGVPcmlnaW4ob3NyRW50cnlCeXRlY29kZUluZGV4KSwgc3RyZWFtSW5kZXgsIG11
c3RIYW5kbGVWYWx1ZXMpOworICAgICAgICBleGVjLCBjb2RlQmxvY2ssIENvZGVPcmlnaW4ob3Jp
Z2luQnl0ZWNvZGVJbmRleCksIHN0cmVhbUluZGV4LCBtdXN0SGFuZGxlVmFsdWVzKTsKICAgICBD
b2RlQmxvY2sqIHJlcGxhY2VtZW50Q29kZUJsb2NrID0gY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVu
dCgpOwogCiAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJ0cmlnZ2VyRlRMT1NS
IiwgKCkpOwogICAgIENvbXBpbGF0aW9uUmVzdWx0IGZvckVudHJ5UmVzdWx0ID0gY29tcGlsZSgK
LSAgICAgICAgKnZtLCByZXBsYWNlbWVudENvZGVCbG9jaywgY29kZUJsb2NrLCBGVExGb3JPU1JF
bnRyeU1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKKyAgICAgICAgKnZtLCByZXBsYWNlbWVu
dENvZGVCbG9jaywgY29kZUJsb2NrLCBGVExGb3JPU1JFbnRyeU1vZGUsIG9yaWdpbkJ5dGVjb2Rl
SW5kZXgsCiAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXMsIFRvRlRMRm9yT1NSRW50cnlEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSh0cmlnZ2VyQWRkcmVzcykpOwogCiAgICAgaWYg
KGppdENvZGUtPm5ldmVyRXhlY3V0ZWRFbnRyeSkKQEAgLTMyMDQsNiArMzIyNiwxMCBAQCBzdGF0
aWMgY2hhciogdGllclVwQ29tbW9uKEV4ZWNTdGF0ZSogZXhlCiAgICAgLy8gV2Ugc2lnbmFsIHRv
IHRyeSBhZ2FpbiBhZnRlciBhIHdoaWxlIGlmIHRoYXQgaGFwcGVucy4KICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZU9TUigpKQogICAgICAgICBkYXRhTG9nKCJJbW1lZGlhdGUgT1NSIGVudHJ5OiBG
cm9tICIsIFJhd1BvaW50ZXIoaml0Q29kZSksICIgZ290IGVudHJ5IGJsb2NrICIsIFJhd1BvaW50
ZXIoaml0Q29kZS0+b3NyRW50cnlCbG9jaygpKSwgIlxuIik7CisKKyAgICBpZiAoIWNhbk9TUkVu
dGVySGVyZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKICAgICB2b2lkKiBhZGRyZXNzID0g
RlRMOjpwcmVwYXJlT1NSRW50cnkoCiAgICAgICAgIGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZS0+
b3NyRW50cnlCbG9jaygpLCBvcmlnaW5CeXRlY29kZUluZGV4LCBzdHJlYW1JbmRleCk7CiAgICAg
aWYgKCFhZGRyZXNzKQpAQCAtMzIyMSw3ICszMjQ3LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIHRy
aWdnZXJUaWVyVXBOb3dJbkxvbwogICAgIHNhbml0aXplU3RhY2tGb3JWTSh2bSk7CiAKICAgICBp
ZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUQ29kZTo6REZHSklUKSB7Ci0gICAgICAgIGRh
dGFMb2coIlVuZXhwZWN0ZWQgY29kZSBibG9jayBpbiBERkctPkZUTCB0aWVyLXVwOiAiLCAqY29k
ZUJsb2NrLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiVW5leHBlY3RlZCBjb2RlIGJsb2NrIGlu
IERGRy0+RlRMIHRyaWdnZXIgdGllciB1cCBub3cgaW4gbG9vcDogIiwgKmNvZGVCbG9jaywgIlxu
Iik7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCkBAIC0z
MjMzLDExICszMjU5LDkgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3dJbkxv
bwogICAgICAgICAgICAgaml0Q29kZS0+dGllclVwQ291bnRlciwgIlxuIik7CiAgICAgfQogCi0g
ICAgYXV0byB0aWVyVXBIaWVyYXJjaHlFbnRyeSA9IGppdENvZGUtPnRpZXJVcEluTG9vcEhpZXJh
cmNoeS5maW5kKGJ5dGVjb2RlSW5kZXgpOwotICAgIGlmICh0aWVyVXBIaWVyYXJjaHlFbnRyeSAh
PSBqaXRDb2RlLT50aWVyVXBJbkxvb3BIaWVyYXJjaHkuZW5kKCkKLSAgICAgICAgJiYgIXRpZXJV
cEhpZXJhcmNoeUVudHJ5LT52YWx1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgdGllclVwQ29tbW9u
KGV4ZWMsIGJ5dGVjb2RlSW5kZXgsIHRpZXJVcEhpZXJhcmNoeUVudHJ5LT52YWx1ZS5maXJzdCgp
KTsKLSAgICB9IGVsc2UgaWYgKHNob3VsZFRyaWdnZXJGVExDb21waWxlKGNvZGVCbG9jaywgaml0
Q29kZSkpCisgICAgaWYgKGppdENvZGUtPnRpZXJVcEluTG9vcEhpZXJhcmNoeS5jb250YWlucyhi
eXRlY29kZUluZGV4KSkKKyAgICAgICAgdGllclVwQ29tbW9uKGV4ZWMsIGJ5dGVjb2RlSW5kZXgs
IGZhbHNlKTsKKyAgICBlbHNlIGlmIChzaG91bGRUcmlnZ2VyRlRMQ29tcGlsZShjb2RlQmxvY2ss
IGppdENvZGUpKQogICAgICAgICB0cmlnZ2VyRlRMUmVwbGFjZW1lbnRDb21waWxlKHZtLCBjb2Rl
QmxvY2ssIGppdENvZGUpOwogCiAgICAgLy8gU2luY2Ugd2UgY2Fubm90IE9TUiBFbnRlciBoZXJl
LCB0aGUgZGVmYXVsdCAib3B0aW1pemVTb29uKCkiIGlzIG5vdCB1c2VmdWwuCkBAIC0zMjcwLDcg
KzMyOTQsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdyhFCiAgICAg
ICAgICAgICBqaXRDb2RlLT50aWVyVXBDb3VudGVyLCAiXG4iKTsKICAgICB9CiAKLSAgICByZXR1
cm4gdGllclVwQ29tbW9uKGV4ZWMsIGJ5dGVjb2RlSW5kZXgsIGJ5dGVjb2RlSW5kZXgpOworICAg
IHJldHVybiB0aWVyVXBDb21tb24oZXhlYywgYnl0ZWNvZGVJbmRleCwgdHJ1ZSk7CiB9CiAKICNl
bmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
</data>
<flag name="review"
          id="360081"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>342131</attachid>
            <date>2018-06-07 00:12:00 -0700</date>
            <delta_ts>2018-06-07 01:45:05 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>16677</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzI1NzYpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDE4LTA2LTA3ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIE1ha2UgREZHIHRvIEZUTCBPU1IgZW50cnkgY29kZSBtb3JlIHNhbmUg
YnkgcmVtb3ZpbmcgYmFkIFJFTEVBU0VfQVNTRVJUUyBhbmQgbWFraW5nIGl0IHRyaWdnZXIgY29t
cGlsZXMgaW4gb3V0ZXIgbG9vcHMgYmVmb3JlIGlubmVyIG9uZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NjIxOAorICAgICAgICA8cmRhcjovL3By
b2JsZW0vMzg0NDk1NDA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAg
ICAgICAgKiBzdHJlc3MvZG9udC1jcmFzaC1mdGwtb3NyLWVudHJ5LmpzOiBBZGRlZC4KKwogMjAx
OC0wNi0wNiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAg
ICBbREZHXSBDb21wYXJlIG9wZXJhdGlvbnMgZG8gbm90IHJlc3BlY3QgbmVnYXRpdmUgemVyb3MK
SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2RvbnQtY3Jhc2gtZnRsLW9zci1lbnRyeS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9kb250LWNyYXNoLWZ0bC1vc3ItZW50cnkuanMJKG5vbmV4
aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvZG9udC1jcmFzaC1mdGwtb3NyLWVudHJ5LmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYgQEAKKy8vQCBydW5EZWZhdWx0KCItLWppdFBvbGlj
eVNjYWxlPTAtLWppdFBvbGljeVNjYWxlPTAiKQorCisvLyBUaGlzIHRlc3Qgc2hvdWxkIG5vdCBj
cmFzaC4KKworZnVuY3Rpb24gZl8wKCkgeworICAgIHZhciB2XzQgPSAxOworICAgIHZhciB2XzUg
PSAnYSc7CisgICAgd2hpbGUgKHZfNCA8IDI1NikgeworICAgICAgICB2XzQgPDw9IDE7CisgICAg
fQorICAgIHJldHVybiB2XzQ7Cit9CitmdW5jdGlvbiBmXzEodl8xKSB7CisgICAgdmFyIHN1bSA9
IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKyAgICAgICAgZm9yICh2
YXIgaiA9IDA7IGogPCA0OyBqKyspIHsKKyAgICAgICAgICAgIHN1bSArPSB2XzEoKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gc3VtOworfQorCitsZXQgaGVsbG87Citmb3IgKHZhciBp
PTA7IGk8MTAwMDsgaSsrKSB7CisgICAgaGVsbG8gPSBmXzEoZl8wKTsKK30KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMyNTczKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDE4LTA2LTA3
ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgREZHIHRv
IEZUTCBPU1IgZW50cnkgY29kZSBtb3JlIHNhbmUgYnkgcmVtb3ZpbmcgYmFkIFJFTEVBU0VfQVNT
RVJUUyBhbmQgbWFraW5nIGl0IHRyaWdnZXIgY29tcGlsZXMgaW4gb3V0ZXIgbG9vcHMgYmVmb3Jl
IGlubmVyIG9uZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4NjIxOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzg0NDk1NDA+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyB0aWVy
VXBDb21tb24gYSB0YWQgYml0IG1vcmUgc2FuZS4gVGhlcmUgYXJlIGEgZmV3IHRoaW5ncworICAg
ICAgICB0aGF0IEkgZGlkOgorICAgICAgICAtIFRoZXJlIHdlcmUgYSBmZXcgcmVsZWFzZSBhc3Nl
cnRzIHRoYXQgd2VyZSBjcmFzaGluZy4gVGhvc2UgcmVsZWFzZSBhc3NlcnRzCisgICAgICAgIHdl
cmUgaW5jb3JyZWN0LiBUaGV5IHdlcmUgbWFraW5nIGFzc3VtcHRpb25zIGFib3V0IGhvdyB0aGUg
Y29kZSBhbmQgZGF0YQorICAgICAgICBzdHJ1Y3R1cmVzIHdlcmUgb3JkZXJlZCB0aGF0IHdlcmUg
d3JvbmcuIFRoaXMgcGF0Y2ggcmVtb3ZlcyB0aGVtLiBUaGUgY29kZQorICAgICAgICB3YXMgdXNp
bmcgdGhlIGxvb3AgaGllcmFyY2h5IHZlY3RvciB0byBtYWtlIGFzc3VtcHRpb25zIGFib3V0IHdo
aWNoIGxvb3Agd2UKKyAgICAgICAgd2VyZSBjdXJyZW50bHkgZXhlY3V0aW5nIGluLCB3aGljaCBp
cyBpbmNvcnJlY3QuIFRoZSBvbmx5IGluZm9ybWF0aW9uIHRoYXQKKyAgICAgICAgY2FuIGJlIHVz
ZWQgYWJvdXQgd2hlcmUgd2UncmUgY3VycmVudGx5IGV4ZWN1dGluZyBpcyB0aGUgYnl0ZWNvZGUg
aW5kZXggd2UncmUKKyAgICAgICAgYXQuCisgICAgICAgIC0gVGhpcyBtYWtlcyBpdCBzbyB0aGF0
IHdlIGdvIGJhY2sgdG8gdHJ5aW5nIHRvIGNvbXBpbGUgb3V0ZXIgbG9vcHMgYmVmb3JlCisgICAg
ICAgIGlubmVyIGxvb3BzLiBKRiBhY2NpZGVudGFsbHkgcmV2ZXJ0ZWQgdGhpcyBiZWhhdmlvciB0
aGF0IEJlbiBpbXBsZW1lbnRlZC4KKyAgICAgICAgSkYgbWFkZSBpdCBzbyB0aGF0IHdlIGp1c3Qg
Y29tcGlsZWQgdGhlIGlubmVyIG1vc3QgbG9vcC4gSSBtYWtlIHRoaXMKKyAgICAgICAgZnVuY3Rp
b25hbGl0eSB3b3JrIGJ5IGZpcnN0IHRyaWdnZXJpbmcgYSBjb21waWxlIGZvciB0aGUgb3V0ZXIg
bW9zdCBsb29wCisgICAgICAgIHRoYXQgdGhlIGNvZGUgaXMgY3VycmVudGx5IGV4ZWN1dGluZyBp
biBhbmQgdGhhdCBjYW4gcGVyZm9ybSBPU1IgZW50cnkuCisgICAgICAgIEhvd2V2ZXIsIHNvbWUg
cHJvZ3JhbXMgY2FuIGdldCBzdHVjayBpbiBpbm5lciBsb29wcy4gVGhlIGNvZGUgd29ya3MgYnkK
KyAgICAgICAgcHJvZ3Jlc3NpdmVseSBhc2tpbmcgaW5uZXIgbG9vcHMgdG8gY29tcGlsZSBpZiBw
cm9ncmFtIGV4ZWN1dGlvbiBoYXMgbm90CisgICAgICAgIHlldCByZWFjaGVkIGFuIG91dGVyIGxv
b3AuCisKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisKIDIwMTgtMDYtMDYgIEd1
aWxsYXVtZSBFbW9udCAgPGd1aWplbW9udEBpZ2FsaWEuY29tPgogCiAgICAgICAgIEFyaXR5Rml4
dXAgc2hvdWxkIGFkanVzdCBTUCBmaXJzdCBvbiAzMi1iaXQgcGxhdGZvcm1zIHRvbwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAy
MzI1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDE4LDcgKzMwMTgsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gdHJp
Z2dlclRpZXJVcE5vdyhFeGVjCiAgICAgfQogfQogCi1zdGF0aWMgY2hhciogdGllclVwQ29tbW9u
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgb3JpZ2luQnl0ZWNvZGVJbmRleCwgdW5zaWduZWQg
b3NyRW50cnlCeXRlY29kZUluZGV4KQorc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIG9yaWdpbkJ5dGVjb2RlSW5kZXgsIGJvb2wgY2FuT1NSRW50ZXJI
ZXJlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CkBAIC0zMDMyLDEwICszMDMyLDYgQEAgc3RhdGljIGNo
YXIqIHRpZXJVcENvbW1vbihFeGVjU3RhdGUqIGV4ZQogICAgICAgICB3b3JrbGlzdFN0YXRlID0g
V29ya2xpc3Q6Ok5vdEtub3duOwogCiAgICAgSklUQ29kZSogaml0Q29kZSA9IGNvZGVCbG9jay0+
aml0Q29kZSgpLT5kZmcoKTsKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgb25seSB0cnVlIGZv
ciB0cmlnZ2VyVGllclVwTm93SW5Mb29wLCB3aGljaCBjYW4gbmV2ZXIKLSAgICAvLyBiZSBhbiBP
U1IgZW50cnkuCi0gICAgYm9vbCBjYW5PU1JGcm9tSGVyZSA9IG9yaWdpbkJ5dGVjb2RlSW5kZXgg
PT0gb3NyRW50cnlCeXRlY29kZUluZGV4OwogICAgIAogICAgIGJvb2wgdHJpZ2dlcmVkU2xvd1Bh
dGhUb1N0YXJ0Q29tcGlsYXRpb24gPSBmYWxzZTsKICAgICBhdXRvIHRpZXJVcEVudHJ5VHJpZ2dl
cnMgPSBqaXRDb2RlLT50aWVyVXBFbnRyeVRyaWdnZXJzLmZpbmQob3JpZ2luQnl0ZWNvZGVJbmRl
eCk7CkBAIC0zMDQ4LDE1ICszMDQ0LDEzIEBAIHN0YXRpYyBjaGFyKiB0aWVyVXBDb21tb24oRXhl
Y1N0YXRlKiBleGUKIAogICAgICAgICBjYXNlIEpJVENvZGU6OlRyaWdnZXJSZWFzb246OkNvbXBp
bGF0aW9uRG9uZToKICAgICAgICAgICAgIC8vIFRoZSB0cmlnZ2VyIHdhcyBzZXQgYmVjYXVzZSBj
b21waWxhdGlvbiBjb21wbGV0ZWQuIERvbid0IHVuc2V0IGl0Ci0gICAgICAgICAgICAvLyBzbyB0
aGF0IGZ1cnRoZXIgREZHIGV4ZWN1dGlvbnMgT1NSIGVudGVycyBhcyB3ZWxsLgotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2FuT1NSRnJvbUhlcmUpOworICAgICAgICAgICAgLy8gc28gdGhh
dCBmdXJ0aGVyIERGRyBleGVjdXRpb25zIE9TUiBlbnRlciBhcyB3ZWxsLgogICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgY2FzZSBKSVRDb2RlOjpUcmlnZ2VyUmVhc29uOjpTdGFydENvbXBp
bGF0aW9uOgogICAgICAgICAgICAgLy8gV2Ugd2VyZSBhc2tlZCB0byBlbnRlciBhcyBzb29uIGFz
IHBvc3NpYmxlIGFuZCBzdGFydCBjb21waWxpbmcgYW4KICAgICAgICAgICAgIC8vIGVudHJ5IGZv
ciB0aGUgY3VycmVudCBieXRlY29kZSBsb2NhdGlvbi4gVW5zZXQgdGhpcyB0cmlnZ2VyIHNvIHdl
CiAgICAgICAgICAgICAvLyBkb24ndCBjb250aW51YWxseSBlbnRlci4KLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNhbk9TUkZyb21IZXJlKTsKICAgICAgICAgICAgIHRpZXJVcEVudHJ5VHJp
Z2dlcnMtPnZhbHVlID0gSklUQ29kZTo6VHJpZ2dlclJlYXNvbjo6RG9udFRyaWdnZXI7CiAgICAg
ICAgICAgICB0cmlnZ2VyZWRTbG93UGF0aFRvU3RhcnRDb21waWxhdGlvbiA9IHRydWU7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTMwNjUsMTEgKzMwNTksMjYgQEAgc3RhdGljIGNoYXIqIHRpZXJV
cENvbW1vbihFeGVjU3RhdGUqIGV4ZQogCiAgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gV29ya2xp
c3Q6OkNvbXBpbGluZykgewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywg
ImRlbGF5RlRMQ29tcGlsZSIsICgic3RpbGwgY29tcGlsaW5nIikpOwotICAgICAgICBqaXRDb2Rl
LT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoCi0gICAg
ICAgICAgICBjb2RlQmxvY2ssIENvbXBpbGF0aW9uRGVmZXJyZWQpOworICAgICAgICBqaXRDb2Rl
LT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoY29kZUJs
b2NrLCBDb21waWxhdGlvbkRlZmVycmVkKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogCisgICAgLy8gSWYgd2UgY2FuIE9TUiBFbnRlciwgZG8gaXQgcmlnaHQgYXdheS4KKyAgICBp
ZiAoY2FuT1NSRW50ZXJIZXJlKSB7CisgICAgICAgIGF1dG8gaXRlciA9IGppdENvZGUtPmJ5dGVj
b2RlSW5kZXhUb1N0cmVhbUluZGV4LmZpbmQob3JpZ2luQnl0ZWNvZGVJbmRleCk7CisgICAgICAg
IGlmIChpdGVyICE9IGppdENvZGUtPmJ5dGVjb2RlSW5kZXhUb1N0cmVhbUluZGV4LmVuZCgpKSB7
CisgICAgICAgICAgICB1bnNpZ25lZCBzdHJlYW1JbmRleCA9IGl0ZXItPnZhbHVlOworICAgICAg
ICAgICAgaWYgKENvZGVCbG9jayogZW50cnlCbG9jayA9IGppdENvZGUtPm9zckVudHJ5QmxvY2so
KSkgeworICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIk9TUiBlbnRyeTogRnJvbSAiLCBSYXdQb2ludGVyKGppdENv
ZGUpLCAiIGdvdCBlbnRyeSBibG9jayAiLCBSYXdQb2ludGVyKGVudHJ5QmxvY2spLCAiXG4iKTsK
KyAgICAgICAgICAgICAgICBpZiAodm9pZCogYWRkcmVzcyA9IEZUTDo6cHJlcGFyZU9TUkVudHJ5
KGV4ZWMsIGNvZGVCbG9jaywgZW50cnlCbG9jaywgb3JpZ2luQnl0ZWNvZGVJbmRleCwgc3RyZWFt
SW5kZXgpKSB7CisgICAgICAgICAgICAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoZW50cnlC
bG9jaywgIm9zckVudHJ5IiwgKCJhdCBiYyMiLCBvcmlnaW5CeXRlY29kZUluZGV4KSk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXRhZ0NvZGVQdHI8Y2hhcio+KGFkZHJlc3MsIEpTRW50
cnlQdHJUYWcsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KGV4ZWMpKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAod29ya2xpc3RTdGF0
ZSA9PSBXb3JrbGlzdDo6Q29tcGlsZWQpIHsKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChj
b2RlQmxvY2ssICJkZWxheUZUTENvbXBpbGUiLCAoImNvbXBpbGVkIGFuZCBmYWlsZWQiKSk7CiAg
ICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBjb21waWxhdGlvbiBmYWlsZWQgYW5kIHdlIGFscmVh
ZHkgc2V0IHRoZSB0aHJlc2hvbGRzLgpAQCAtMzA3OCwxOSArMzA4Nyw2IEBAIHN0YXRpYyBjaGFy
KiB0aWVyVXBDb21tb24oRXhlY1N0YXRlKiBleGUKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCi0gICAgLy8gSWYgd2UgY2FuIE9TUiBFbnRlciwgZG8gaXQgcmlnaHQgYXdheS4KLSAg
ICBpZiAoY2FuT1NSRnJvbUhlcmUpIHsKLSAgICAgICAgdW5zaWduZWQgc3RyZWFtSW5kZXggPSBq
aXRDb2RlLT5ieXRlY29kZUluZGV4VG9TdHJlYW1JbmRleC5nZXQob3JpZ2luQnl0ZWNvZGVJbmRl
eCk7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sqIGVudHJ5QmxvY2sgPSBqaXRDb2RlLT5vc3JFbnRy
eUJsb2NrKCkpIHsKLSAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAg
ICAgICAgICAgICAgZGF0YUxvZygiT1NSIGVudHJ5OiBGcm9tICIsIFJhd1BvaW50ZXIoaml0Q29k
ZSksICIgZ290IGVudHJ5IGJsb2NrICIsIFJhd1BvaW50ZXIoZW50cnlCbG9jayksICJcbiIpOwot
ICAgICAgICAgICAgaWYgKHZvaWQqIGFkZHJlc3MgPSBGVEw6OnByZXBhcmVPU1JFbnRyeShleGVj
LCBjb2RlQmxvY2ssIGVudHJ5QmxvY2ssIG9yaWdpbkJ5dGVjb2RlSW5kZXgsIHN0cmVhbUluZGV4
KSkgewotICAgICAgICAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoZW50cnlCbG9jaywgIm9z
ckVudHJ5IiwgKCJhdCBiYyMiLCBvcmlnaW5CeXRlY29kZUluZGV4KSk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHJldGFnQ29kZVB0cjxjaGFyKj4oYWRkcmVzcywgSlNFbnRyeVB0clRhZywgYml0
d2lzZV9jYXN0PFB0clRhZz4oZXhlYykpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCiAgICAgLy8gLSBJZiB3ZSBkb24ndCBoYXZlIGFuIEZUTCBjb2RlIGJsb2NrLCB0aGVuIHRy
eSB0byBjb21waWxlIG9uZS4KICAgICAvLyAtIElmIHdlIGRvIGhhdmUgYW4gRlRMIGNvZGUgYmxv
Y2ssIHRoZW4gdHJ5IHRvIGVudGVyIGZvciBhIHdoaWxlLgogICAgIC8vIC0gSWYgd2UgY291bGRu
J3QgZW50ZXIgZm9yIGEgd2hpbGUsIHRoZW4gdHJpZ2dlciBPU1IgZW50cnkuCkBAIC0zMTEyLDcg
KzMxMDgsNiBAQCBzdGF0aWMgY2hhciogdGllclVwQ29tbW9uKEV4ZWNTdGF0ZSogZXhlCiAgICAg
fSBlbHNlCiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGVsYXlGVExD
b21waWxlIiwgKCJhdm9pZGluZyByZXBsYWNlbWVudCBjb21waWxlIikpOwogCi0gICAgLy8gSXQn
cyB0aW1lIHRvIHRyeSB0byBjb21waWxlIGNvZGUgZm9yIE9TUiBlbnRyeS4KICAgICBpZiAoQ29k
ZUJsb2NrKiBlbnRyeUJsb2NrID0gaml0Q29kZS0+b3NyRW50cnlCbG9jaygpKSB7CiAgICAgICAg
IGlmIChqaXRDb2RlLT5vc3JFbnRyeVJldHJ5IDwgT3B0aW9uczo6ZnRsT1NSRW50cnlSZXRyeVRo
cmVzaG9sZCgpKSB7CiAgICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywg
ImRlbGF5RlRMQ29tcGlsZSIsICgiT1NSIGVudHJ5IGZhaWxlZCwgT1NSIGVudHJ5IHRocmVzaG9s
ZCBub3QgbWV0IikpOwpAQCAtMzE0NCw0OCArMzEzOSw4MCBAQCBzdGF0aWMgY2hhciogdGllclVw
Q29tbW9uKEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAot
ICAgIGlmICghY2FuT1NSRnJvbUhlcmUpIHsKLSAgICAgICAgLy8gV2UgY2FuJ3QgT1NSIGZyb20g
aGVyZSwgb3IgZXZlbiBzdGFydCBhIGNvbXBpbGF0aW9uIGJlY2F1c2UgZG9pbmcgc28KLSAgICAg
ICAgLy8gY2FsbHMgaml0Q29kZS0+cmVjb25zdHJ1Y3Qgd2hpY2ggd291bGQgZ2V0IHRoZSB3cm9u
ZyBzdGF0ZS4KLSAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAg
IGRhdGFMb2coIk5vbi1PU1ItYWJsZSBiYyMiLCBvcmlnaW5CeXRlY29kZUluZGV4LCAiIGluICIs
ICpjb2RlQmxvY2ssICIgc2V0dGluZyBwYXJlbnQgbG9vcCBiYyMiLCBvc3JFbnRyeUJ5dGVjb2Rl
SW5kZXgsICIncyB0cmlnZ2VyIGFuZCBiYWNraW5nIG9mZi5cbiIpOwotICAgICAgICBqaXRDb2Rl
LT50aWVyVXBFbnRyeVRyaWdnZXJzLnNldChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIEpJVENvZGU6
OlRyaWdnZXJSZWFzb246OlN0YXJ0Q29tcGlsYXRpb24pOwotICAgICAgICBqaXRDb2RlLT5zZXRP
cHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoY29kZUJsb2NrLCBD
b21waWxhdGlvbkRlZmVycmVkKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0g
ICAgdW5zaWduZWQgc3RyZWFtSW5kZXggPSBqaXRDb2RlLT5ieXRlY29kZUluZGV4VG9TdHJlYW1J
bmRleC5nZXQob3NyRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICAvLyBJdCdzIHRpbWUgdG8gdHJ5
IHRvIGNvbXBpbGUgY29kZSBmb3IgT1NSIGVudHJ5LgogCiAgICAgaWYgKCF0cmlnZ2VyZWRTbG93
UGF0aFRvU3RhcnRDb21waWxhdGlvbikgewotICAgICAgICBhdXRvIHRpZXJVcEhpZXJhcmNoeUVu
dHJ5ID0gaml0Q29kZS0+dGllclVwSW5Mb29wSGllcmFyY2h5LmZpbmQob3NyRW50cnlCeXRlY29k
ZUluZGV4KTsKLSAgICAgICAgaWYgKHRpZXJVcEhpZXJhcmNoeUVudHJ5ICE9IGppdENvZGUtPnRp
ZXJVcEluTG9vcEhpZXJhcmNoeS5lbmQoKSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBv
c3JFbnRyeUNhbmRpZGF0ZSA6IHRpZXJVcEhpZXJhcmNoeUVudHJ5LT52YWx1ZSkgewotICAgICAg
ICAgICAgICAgIGlmIChqaXRDb2RlLT50aWVyVXBFbnRyeVNlZW4uY29udGFpbnMob3NyRW50cnlD
YW5kaWRhdGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFzayBhbiBlbmNsb3NpbmcgbG9v
cCB0byBjb21waWxlLCBpbnN0ZWFkIG9mIGRvaW5nIHNvIGhlcmUuCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJJbm5lci1sb29wIGJjIyIsIG9yaWdpbkJ5dGVjb2RlSW5kZXgsICIgaW4gIiwgKmNv
ZGVCbG9jaywgIiBzZXR0aW5nIHBhcmVudCBsb29wIGJjIyIsIG9zckVudHJ5Q2FuZGlkYXRlLCAi
J3MgdHJpZ2dlciBhbmQgYmFja2luZyBvZmYuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgaml0
Q29kZS0+dGllclVwRW50cnlUcmlnZ2Vycy5zZXQob3NyRW50cnlDYW5kaWRhdGUsIEpJVENvZGU6
OlRyaWdnZXJSZWFzb246OlN0YXJ0Q29tcGlsYXRpb24pOwotICAgICAgICAgICAgICAgICAgICBq
aXRDb2RlLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQo
Y29kZUJsb2NrLCBDb21waWxhdGlvbkRlZmVycmVkKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICAgICAgLy8gQW4gaW5uZXIgbG9vcCBkaWRuJ3Qgc3BlY2lmaWNh
bGx5IGFzayBmb3IgdXMgdG8ga2ljayBvZmYgYSBjb21waWxhdGlvbi4gVGhpcyBtZWFucyB0aGUg
Y291bnRlcgorICAgICAgICAvLyBjcm9zc2VkIGl0cyB0aHJlc2hvbGQuIFdlIGVpdGhlciBmYWxs
IHRocm91Z2ggYW5kIGtpY2sgb2ZmIGEgY29tcGlsZSBmb3Igb3JpZ2luQnl0ZWNvZGVJbmRleCwK
KyAgICAgICAgLy8gb3Igd2UgZmxhZyBhbiBvdXRlciBsb29wIHRvIGltbWVkaWF0ZWx5IHRyeSB0
byBjb21waWxlIGl0c2VsZi4gSWYgdGhlcmUgYXJlIG91dGVyIGxvb3BzLAorICAgICAgICAvLyB3
ZSBmaXJzdCB0cnkgdG8gbWFrZSB0aGVtIGNvbXBpbGUgdGhlbXNlbHZlcy4gQnV0IHdlIHdpbGwg
ZXZlbnR1YWxseSBmYWxsIGJhY2sgdG8gY29tcGlsaW5nCisgICAgICAgIC8vIGEgcHJvZ3Jlc3Np
dmVseSBpbm5lciBsb29wIGlmIGl0IHRha2VzIHRvbyBsb25nIGZvciBjb250cm9sIHRvIHJlYWNo
IGFuIG91dGVyIGxvb3AuCisKKyAgICAgICAgYXV0byB0cnlUcmlnZ2VyT3V0ZXJMb29wVG9Db21w
aWxlID0gWyZdIHsKKyAgICAgICAgICAgIGF1dG8gdGllclVwSGllcmFyY2h5RW50cnkgPSBqaXRD
b2RlLT50aWVyVXBJbkxvb3BIaWVyYXJjaHkuZmluZChvcmlnaW5CeXRlY29kZUluZGV4KTsKKyAg
ICAgICAgICAgIGlmICh0aWVyVXBIaWVyYXJjaHlFbnRyeSA9PSBqaXRDb2RlLT50aWVyVXBJbkxv
b3BIaWVyYXJjaHkuZW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgICAgICAvLyBUaGlzIHZlY3RvciBpcyBvcmRlcmVkIGZyb20gaW5uZXJtb3N0IHRvIG91dGVy
bW9zdCBsb29wLiBFdmVyeSBieXRlY29kZSBlbnRyeSBpbiB0aGlzIHZlY3RvciBpcworICAgICAg
ICAgICAgLy8gYWxsb3dlZCB0byBkbyBPU1IgZW50cnkuIFdlIHN0YXJ0IHdpdGggdGhlIG91dGVy
bW9zdCBsb29wIGFuZCBtYWtlIG91ciB3YXkgaW53YXJkcyAoaGVuY2Ugd2h5IHdlCisgICAgICAg
ICAgICAvLyBpdGVyYXRlIHRoZSB2ZWN0b3IgaW4gcmV2ZXJzZSkuIE91ciBwb2xpY3kgaXMgdGhh
dCB3ZSB3aWxsIHRyaWdnZXIgYW4gb3V0ZXIgbG9vcCB0byBjb21waWxlCisgICAgICAgICAgICAv
LyBpbW1lZGlhdGVseSB3aGVuIHByb2dyYW0gY29udHJvbCByZWFjaGVzIGl0LiBJZiBwcm9ncmFt
IGNvbnRyb2wgaXMgdGFraW5nIHRvbyBsb25nIHRvIHJlYWNoIHRoYXQKKyAgICAgICAgICAgIC8v
IG91dGVyIGxvb3AsIHdlIHByb2dyZXNzaXZlbHkgbW92ZSBpbndhcmRzLCBtZWFuaW5nLCB3ZSds
bCBldmVudHVhbGx5IHRyaWdnZXIgc29tZSBsb29wIHRoYXQgaXMKKyAgICAgICAgICAgIC8vIGV4
ZWN1dGluZyB0byBjb21waWxlLiBXZSBzdGFydCB3aXRoIHRyeWluZyB0byBjb21waWxlIG91dGVy
IGxvb3BzIHNpbmNlIHdlIGJlbGlldmUgb3V0ZXIgbG9vcAorICAgICAgICAgICAgLy8gY29tcGls
YXRpb25zIHJldmVhbCB0aGUgYmVzdCBvcHBvcnR1bml0aWVzIGZvciBvcHRpbWl6aW5nIGNvZGUu
CisgICAgICAgICAgICBmb3IgKGF1dG8gaXRlciA9IHRpZXJVcEhpZXJhcmNoeUVudHJ5LT52YWx1
ZS5yYmVnaW4oKSwgZW5kID0gdGllclVwSGllcmFyY2h5RW50cnktPnZhbHVlLnJlbmQoKTsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9zckVudHJ5Q2Fu
ZGlkYXRlID0gKml0ZXI7CisKKyAgICAgICAgICAgICAgICBpZiAoaml0Q29kZS0+dGllclVwRW50
cnlUcmlnZ2Vycy5nZXQob3NyRW50cnlDYW5kaWRhdGUpID09IEpJVENvZGU6OlRyaWdnZXJSZWFz
b246OlN0YXJ0Q29tcGlsYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFu
cyB0aGF0IHdlIGFscmVhZHkgYXNrZWQgdGhpcyBsb29wIHRvIGNvbXBpbGUuIElmIHdlJ3ZlIHJl
YWNoZWQgaGVyZSwgaXQKKyAgICAgICAgICAgICAgICAgICAgLy8gbWVhbnMgcHJvZ3JhbSBjb250
cm9sIGhhcyBub3QgeWV0IHJlYWNoZWQgdGhhdCBsb29wLiBTbyBpdCdzIHRha2luZyB0b28gbG9u
ZyB0byBjb21waWxlLgorICAgICAgICAgICAgICAgICAgICAvLyBTbyB3ZSBtb3ZlIG9uIHRvIGFz
a2luZyB0aGUgaW5uZXIgbG9vcCBvZiB0aGlzIGxvb3AgdG8gY29tcGlsZSBpdHNlbGYuCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIC8vIFRoaXMgaXMgd2hlcmUgd2UgYXNrIHRoZSBvdXRlciB0byBsb29wIHRvIGltbWVk
aWF0ZWx5IGNvbXBpbGUgaXRzZWxmIGlmIHByb2dyYW0KKyAgICAgICAgICAgICAgICAvLyBjb250
cm9sIHJlYWNoZXMgaXQuCisgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiSW5uZXItbG9vcCBiYyMiLCBvcmlnaW5C
eXRlY29kZUluZGV4LCAiIGluICIsICpjb2RlQmxvY2ssICIgc2V0dGluZyBwYXJlbnQgbG9vcCBi
YyMiLCBvc3JFbnRyeUNhbmRpZGF0ZSwgIidzIHRyaWdnZXIgYW5kIGJhY2tpbmcgb2ZmLlxuIik7
CisgICAgICAgICAgICAgICAgaml0Q29kZS0+dGllclVwRW50cnlUcmlnZ2Vycy5zZXQob3NyRW50
cnlDYW5kaWRhdGUsIEpJVENvZGU6OlRyaWdnZXJSZWFzb246OlN0YXJ0Q29tcGlsYXRpb24pOwor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKHRyeVRyaWdnZXJPdXRl
ckxvb3BUb0NvbXBpbGUoKSkgeworICAgICAgICAgICAgaml0Q29kZS0+c2V0T3B0aW1pemF0aW9u
VGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KGNvZGVCbG9jaywgQ29tcGlsYXRpb25E
ZWZlcnJlZCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgIH0K
IAorICAgIGlmICghY2FuT1NSRW50ZXJIZXJlKSB7CisgICAgICAgIGppdENvZGUtPnNldE9wdGlt
aXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChjb2RlQmxvY2ssIENvbXBp
bGF0aW9uRGVmZXJyZWQpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKICAgICAv
LyBXZSBhcmVuJ3QgY29tcGlsaW5nIGFuZCBoYXZlbid0IGNvbXBpbGVkIGFueXRoaW5nIGZvciBP
U1IgZW50cnkuIFNvLCB0cnkgdG8gY29tcGlsZQogICAgIC8vIHNvbWV0aGluZy4KLSAgICBhdXRv
IHRyaWdnZXJJdGVyYXRvciA9IGppdENvZGUtPnRpZXJVcEVudHJ5VHJpZ2dlcnMuZmluZChvc3JF
bnRyeUJ5dGVjb2RlSW5kZXgpOwotICAgIFJFTEVBU0VfQVNTRVJUKHRyaWdnZXJJdGVyYXRvciAh
PSBqaXRDb2RlLT50aWVyVXBFbnRyeVRyaWdnZXJzLmVuZCgpKTsKKworICAgIGF1dG8gdHJpZ2dl
ckl0ZXJhdG9yID0gaml0Q29kZS0+dGllclVwRW50cnlUcmlnZ2Vycy5maW5kKG9yaWdpbkJ5dGVj
b2RlSW5kZXgpOworICAgIGlmICh0cmlnZ2VySXRlcmF0b3IgPT0gaml0Q29kZS0+dGllclVwRW50
cnlUcmlnZ2Vycy5lbmQoKSkgeworICAgICAgICBqaXRDb2RlLT5zZXRPcHRpbWl6YXRpb25UaHJl
c2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoY29kZUJsb2NrLCBDb21waWxhdGlvbkRlZmVy
cmVkKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCiAgICAgSklUQ29kZTo6VHJp
Z2dlclJlYXNvbiogdHJpZ2dlckFkZHJlc3MgPSAmKHRyaWdnZXJJdGVyYXRvci0+dmFsdWUpOwog
CiAgICAgT3BlcmFuZHM8SlNWYWx1ZT4gbXVzdEhhbmRsZVZhbHVlczsKKyAgICB1bnNpZ25lZCBz
dHJlYW1JbmRleCA9IGppdENvZGUtPmJ5dGVjb2RlSW5kZXhUb1N0cmVhbUluZGV4LmdldChvcmln
aW5CeXRlY29kZUluZGV4KTsKICAgICBqaXRDb2RlLT5yZWNvbnN0cnVjdCgKLSAgICAgICAgZXhl
YywgY29kZUJsb2NrLCBDb2RlT3JpZ2luKG9zckVudHJ5Qnl0ZWNvZGVJbmRleCksIHN0cmVhbUlu
ZGV4LCBtdXN0SGFuZGxlVmFsdWVzKTsKKyAgICAgICAgZXhlYywgY29kZUJsb2NrLCBDb2RlT3Jp
Z2luKG9yaWdpbkJ5dGVjb2RlSW5kZXgpLCBzdHJlYW1JbmRleCwgbXVzdEhhbmRsZVZhbHVlcyk7
CiAgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudENvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVw
bGFjZW1lbnQoKTsKIAogICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAidHJpZ2dl
ckZUTE9TUiIsICgpKTsKICAgICBDb21waWxhdGlvblJlc3VsdCBmb3JFbnRyeVJlc3VsdCA9IGNv
bXBpbGUoCi0gICAgICAgICp2bSwgcmVwbGFjZW1lbnRDb2RlQmxvY2ssIGNvZGVCbG9jaywgRlRM
Rm9yT1NSRW50cnlNb2RlLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCisgICAgICAgICp2bSwgcmVw
bGFjZW1lbnRDb2RlQmxvY2ssIGNvZGVCbG9jaywgRlRMRm9yT1NSRW50cnlNb2RlLCBvcmlnaW5C
eXRlY29kZUluZGV4LAogICAgICAgICBtdXN0SGFuZGxlVmFsdWVzLCBUb0ZUTEZvck9TUkVudHJ5
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUodHJpZ2dlckFkZHJlc3MpKTsKIAog
ICAgIGlmIChqaXRDb2RlLT5uZXZlckV4ZWN1dGVkRW50cnkpCkBAIC0zMjA0LDYgKzMyMzEsNyBA
QCBzdGF0aWMgY2hhciogdGllclVwQ29tbW9uKEV4ZWNTdGF0ZSogZXhlCiAgICAgLy8gV2Ugc2ln
bmFsIHRvIHRyeSBhZ2FpbiBhZnRlciBhIHdoaWxlIGlmIHRoYXQgaGFwcGVucy4KICAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAgICBkYXRhTG9nKCJJbW1lZGlhdGUgT1NSIGVu
dHJ5OiBGcm9tICIsIFJhd1BvaW50ZXIoaml0Q29kZSksICIgZ290IGVudHJ5IGJsb2NrICIsIFJh
d1BvaW50ZXIoaml0Q29kZS0+b3NyRW50cnlCbG9jaygpKSwgIlxuIik7CisKICAgICB2b2lkKiBh
ZGRyZXNzID0gRlRMOjpwcmVwYXJlT1NSRW50cnkoCiAgICAgICAgIGV4ZWMsIGNvZGVCbG9jaywg
aml0Q29kZS0+b3NyRW50cnlCbG9jaygpLCBvcmlnaW5CeXRlY29kZUluZGV4LCBzdHJlYW1JbmRl
eCk7CiAgICAgaWYgKCFhZGRyZXNzKQpAQCAtMzIyMSw3ICszMjQ5LDcgQEAgdm9pZCBKSVRfT1BF
UkFUSU9OIHRyaWdnZXJUaWVyVXBOb3dJbkxvbwogICAgIHNhbml0aXplU3RhY2tGb3JWTSh2bSk7
CiAKICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUQ29kZTo6REZHSklUKSB7Ci0g
ICAgICAgIGRhdGFMb2coIlVuZXhwZWN0ZWQgY29kZSBibG9jayBpbiBERkctPkZUTCB0aWVyLXVw
OiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiVW5leHBlY3RlZCBjb2Rl
IGJsb2NrIGluIERGRy0+RlRMIHRyaWdnZXIgdGllciB1cCBub3cgaW4gbG9vcDogIiwgKmNvZGVC
bG9jaywgIlxuIik7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
fQogCkBAIC0zMjMzLDExICszMjYxLDkgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJUaWVy
VXBOb3dJbkxvbwogICAgICAgICAgICAgaml0Q29kZS0+dGllclVwQ291bnRlciwgIlxuIik7CiAg
ICAgfQogCi0gICAgYXV0byB0aWVyVXBIaWVyYXJjaHlFbnRyeSA9IGppdENvZGUtPnRpZXJVcElu
TG9vcEhpZXJhcmNoeS5maW5kKGJ5dGVjb2RlSW5kZXgpOwotICAgIGlmICh0aWVyVXBIaWVyYXJj
aHlFbnRyeSAhPSBqaXRDb2RlLT50aWVyVXBJbkxvb3BIaWVyYXJjaHkuZW5kKCkKLSAgICAgICAg
JiYgIXRpZXJVcEhpZXJhcmNoeUVudHJ5LT52YWx1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgdGll
clVwQ29tbW9uKGV4ZWMsIGJ5dGVjb2RlSW5kZXgsIHRpZXJVcEhpZXJhcmNoeUVudHJ5LT52YWx1
ZS5maXJzdCgpKTsKLSAgICB9IGVsc2UgaWYgKHNob3VsZFRyaWdnZXJGVExDb21waWxlKGNvZGVC
bG9jaywgaml0Q29kZSkpCisgICAgaWYgKGppdENvZGUtPnRpZXJVcEluTG9vcEhpZXJhcmNoeS5j
b250YWlucyhieXRlY29kZUluZGV4KSkKKyAgICAgICAgdGllclVwQ29tbW9uKGV4ZWMsIGJ5dGVj
b2RlSW5kZXgsIGZhbHNlKTsKKyAgICBlbHNlIGlmIChzaG91bGRUcmlnZ2VyRlRMQ29tcGlsZShj
b2RlQmxvY2ssIGppdENvZGUpKQogICAgICAgICB0cmlnZ2VyRlRMUmVwbGFjZW1lbnRDb21waWxl
KHZtLCBjb2RlQmxvY2ssIGppdENvZGUpOwogCiAgICAgLy8gU2luY2Ugd2UgY2Fubm90IE9TUiBF
bnRlciBoZXJlLCB0aGUgZGVmYXVsdCAib3B0aW1pemVTb29uKCkiIGlzIG5vdCB1c2VmdWwuCkBA
IC0zMjcwLDcgKzMyOTYsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5v
dyhFCiAgICAgICAgICAgICBqaXRDb2RlLT50aWVyVXBDb3VudGVyLCAiXG4iKTsKICAgICB9CiAK
LSAgICByZXR1cm4gdGllclVwQ29tbW9uKGV4ZWMsIGJ5dGVjb2RlSW5kZXgsIGJ5dGVjb2RlSW5k
ZXgpOworICAgIHJldHVybiB0aWVyVXBDb21tb24oZXhlYywgYnl0ZWNvZGVJbmRleCwgdHJ1ZSk7
CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>