<?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>149371</bug_id>
          
          <creation_ts>2015-09-19 09:34:10 -0700</creation_ts>
          <short_desc>Cleanup code that finds and loads a media engine</short_desc>
          <delta_ts>2015-09-19 17:44:58 -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>Media</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="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1127390</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-09-19 09:34:10 -0700</bug_when>
    <thetext>Cleanup code that finds and loads a media engine</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127391</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-09-19 09:35:07 -0700</bug_when>
    <thetext>&lt;rdar://problem/22770847&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127392</commentid>
    <comment_count>2</comment_count>
      <attachid>261576</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-09-19 09:55:59 -0700</bug_when>
    <thetext>Created attachment 261576
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127393</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-19 09:58:03 -0700</bug_when>
    <thetext>Attachment 261576 did not pass style-queue:


ERROR: Source/WebCore/html/HTMLMediaElement.cpp:1312:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127417</commentid>
    <comment_count>4</comment_count>
      <attachid>261585</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-09-19 13:25:13 -0700</bug_when>
    <thetext>Created attachment 261585
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127420</commentid>
    <comment_count>5</comment_count>
      <attachid>261585</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-09-19 13:46:44 -0700</bug_when>
    <thetext>Comment on attachment 261585
Proposed patch.

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

&gt; Source/WebCore/Modules/mediastream/MediaStream.cpp:42
&gt; +URLRegistry* MediaStream::s_registry = 0;

nullptr, but also, why not use a value that is private to the cpp file instead of a static class member?

&gt; Source/WebCore/Modules/mediastream/MediaStream.cpp:50
&gt; +MediaStream* MediaStream::lookup(const String&amp; url)

Why does this take a String if it’s a URL?

&gt; Source/WebCore/Modules/mediastream/MediaStream.cpp:55
&gt; +    if (s_registry)
&gt; +        return static_cast&lt;MediaStream*&gt;(s_registry-&gt;lookup(url));
&gt; +
&gt; +    return nullptr;

Normally we’d do an early return for the failure case.

&gt; Source/WebCore/Modules/mediastream/MediaStream.h:55
&gt; +    static void setRegistry(URLRegistry*);

Would be better for this to take a reference instead of a pointer, unless we can use this to clear out the registry.

&gt; Source/WebCore/Modules/mediastream/MediaStream.h:56
&gt; +    static MediaStream* lookup(const String&amp;);

Since it&apos;s a verb, it should be two words, &quot;look up&quot;, not the noun &quot;lookup&quot;. So &quot;lookUp&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127425</commentid>
    <comment_count>6</comment_count>
      <attachid>261587</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-09-19 14:59:47 -0700</bug_when>
    <thetext>Created attachment 261587
Updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127426</commentid>
    <comment_count>7</comment_count>
      <attachid>261588</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-09-19 15:05:10 -0700</bug_when>
    <thetext>Created attachment 261588
Patch for the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127427</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-09-19 15:08:54 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 261585 [details]
&gt; Proposed patch.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=261585&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/mediastream/MediaStream.cpp:42
&gt; &gt; +URLRegistry* MediaStream::s_registry = 0;
&gt; 
&gt; nullptr, but also, why not use a value that is private to the cpp file
&gt; instead of a static class member?
&gt; 

Fix both issues.

&gt; &gt; Source/WebCore/Modules/mediastream/MediaStream.cpp:50
&gt; &gt; +MediaStream* MediaStream::lookup(const String&amp; url)
&gt; 
&gt; Why does this take a String if it’s a URL?
&gt; 

It calls a method in URLRegistry that takes a String, but that should be changed. Fixed this for now, will follow up with a patch for URLRegistry.

&gt; &gt; Source/WebCore/Modules/mediastream/MediaStream.cpp:55
&gt; &gt; +    if (s_registry)
&gt; &gt; +        return static_cast&lt;MediaStream*&gt;(s_registry-&gt;lookup(url));
&gt; &gt; +
&gt; &gt; +    return nullptr;
&gt; 
&gt; Normally we’d do an early return for the failure case.
&gt; 

Fixed.

&gt; &gt; Source/WebCore/Modules/mediastream/MediaStream.h:55
&gt; &gt; +    static void setRegistry(URLRegistry*);
&gt; 
&gt; Would be better for this to take a reference instead of a pointer, unless we
&gt; can use this to clear out the registry.
&gt; 

Fixed.

&gt; &gt; Source/WebCore/Modules/mediastream/MediaStream.h:56
&gt; &gt; +    static MediaStream* lookup(const String&amp;);
&gt; 
&gt; Since it&apos;s a verb, it should be two words, &quot;look up&quot;, not the noun &quot;lookup&quot;.
&gt; So &quot;lookUp&quot;.
&gt;

Fixed.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127434</commentid>
    <comment_count>9</comment_count>
      <attachid>261589</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-09-19 16:24:35 -0700</bug_when>
    <thetext>Created attachment 261589
APFTB</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127447</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-09-19 17:44:58 -0700</bug_when>
    <thetext>Committed r190020: https://trac.webkit.org/r190020</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261576</attachid>
            <date>2015-09-19 09:55:59 -0700</date>
            <delta_ts>2015-09-19 13:25:13 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>engine_cleanup_patch.txt</filename>
            <type>text/plain</type>
            <size>12256</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MDAxNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE1LTA5LTE5ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIENsZWFudXAgY29kZSB0
aGF0IGZpbmRzIGFuZCBsb2FkcyBhIG1lZGlhIGVuZ2luZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MzcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBmdW5jdGlvbmFsIGNo
YW5nZS4KKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OnNldFJlZ2lzdHJ5KTogTmV3LCBzZXQgdGhl
IHJlZ2lzdHJ5LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06Omxvb2t1cCk6IE5ldywg
bG9va3VwIGEgdXJsIGluIHRoZSByZWdpc3RyeS4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtLmg6CisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bG9hZFJlc291cmNlKTogUmVz
dHJ1Y3R1cmUgYW5kIHNpbXBsaWZ5IHRoZSBjb2RlIHRoYXQgdHJpZXMgdGhlIAorICAgICAgICAg
IGRpZmZlcmVudCB0eXBlcyBvZiBtZWRpYSBlbmdpbmUgc28gdGhlIGNvZGUgaXMgZWFzaWVyIHRv
IHVuZGVyc3RhbmQgYW5kIG1vZGlmeS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnQ6OmNyZWF0ZU1lZGlhUGxheWVyKTogQ2xlYXIgbV9tZWRpYVN0cmVhbVNyY09iamVjdC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmJ1aWxkTWVkaWFFbmdpbmVzVmVjdG9yKTogQWRkIHNvbWUgd2hpdGVzcGFjZSB0byBt
YWtlIGl0IGVhc2llciB0byByZWFkLgorICAgICAgICAoV2ViQ29yZTo6YmVzdE1lZGlhRW5naW5l
Rm9yU3VwcG9ydFBhcmFtZXRlcnMpOiBBbHNvIHByb2Nlc3MgbWVkaWFzdHJlYW0gYW5kIG1lZGlh
c291cmNlIHVybHMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6bG9hZCk6IEFTU0VS
VCBpZiBjYWxsZWQgd2hlbiB0aGUgcmVsb2FkIHRpbWVyIGlzIGFjdGl2ZS4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyOjpsb2FkV2l0aE5leHRNZWRpYUVuZ2luZSk6IEFsc28gcHJvY2Vz
cyBtZWRpYXN0cmVhbSBhbmQgbWVkaWFzb3VyY2UgdXJscy4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6c3VwcG9ydHNUeXBlKTogRG9uJ3QgdGVzdCBlbXB0eS9udWxsIHVybHMuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVBsYXllck1lZGlh
U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVBsYXllck1lZGlhU291cmNl
OjpzdXBwb3J0c1R5cGUpOiBEaXR0by4KKwogMjAxNS0wOS0xOCAgRGVhbiBKYWNrc29uICA8ZGlu
b0BhcHBsZS5jb20+CiAKICAgICAgICAgTnVsbCBkZXJlZmVyZW5jZSBsb2FkaW5nIEJsaW5rIGxh
eW91dCB0ZXN0IHN2Zy9maWx0ZXJzL2ZlSW1hZ2UtZmFpbGVkLWxvYWQtY3Jhc2guaHRtbApJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bS5jcHAJKHJldmlzaW9uIDE4OTk4MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDE1IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zOSw2ICszOSwy
MiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK1VSTFJlZ2lzdHJ5KiBNZWRpYVN0cmVhbTo6
c19yZWdpc3RyeSA9IDA7CisKK3ZvaWQgTWVkaWFTdHJlYW06OnNldFJlZ2lzdHJ5KFVSTFJlZ2lz
dHJ5KiByZWdpc3RyeSkKK3sKKyAgICBBU1NFUlQoIXNfcmVnaXN0cnkpOworICAgIHNfcmVnaXN0
cnkgPSByZWdpc3RyeTsKK30KKworTWVkaWFTdHJlYW0qIE1lZGlhU3RyZWFtOjpsb29rdXAoY29u
c3QgU3RyaW5nJiB1cmwpCit7CisgICAgaWYgKHNfcmVnaXN0cnkpCisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxNZWRpYVN0cmVhbSo+KHNfcmVnaXN0cnktPmxvb2t1cCh1cmwpKTsKKworICAg
IHJldHVybiBudWxscHRyOworfQorCiBSZWY8TWVkaWFTdHJlYW0+IE1lZGlhU3RyZWFtOjpjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkKIHsKICAgICByZXR1cm4gTWVkaWFT
dHJlYW06OmNyZWF0ZShjb250ZXh0LCBNZWRpYVN0cmVhbVByaXZhdGU6OmNyZWF0ZSgpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
LmgJKHJldmlzaW9uIDE4OTk4MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTIsNiArNTIsOSBAQCBwdWJsaWM6
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRPclJlbW92ZVRyYWNrKCkgPSAwOwogICAgIH07
CiAKKyAgICBzdGF0aWMgdm9pZCBzZXRSZWdpc3RyeShVUkxSZWdpc3RyeSopOworICAgIHN0YXRp
YyBNZWRpYVN0cmVhbSogbG9va3VwKGNvbnN0IFN0cmluZyYpOworCiAgICAgc3RhdGljIFJlZjxN
ZWRpYVN0cmVhbT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsKICAgICBzdGF0aWMg
UmVmPE1lZGlhU3RyZWFtPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIE1lZGlhU3Ry
ZWFtKik7CiAgICAgc3RhdGljIFJlZjxNZWRpYVN0cmVhbT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmLCBjb25zdCBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+PiYpOwpAQCAt
MTE1LDYgKzExOCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzY2hlZHVsZUFjdGl2ZVN0YXRlQ2hh
bmdlKCk7CiAgICAgdm9pZCBhY3Rpdml0eUV2ZW50VGltZXJGaXJlZCgpOwogCisgICAgc3RhdGlj
IFVSTFJlZ2lzdHJ5KiBzX3JlZ2lzdHJ5OworCiAgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVh
bVRyYWNrPj4gdHJhY2tWZWN0b3JGb3JUeXBlKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUpIGNv
bnN0OwogCiAgICAgUmVmUHRyPE1lZGlhU3RyZWFtUHJpdmF0ZT4gbV9wcml2YXRlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxODk5ODMp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjY3LDEyICsxMjY3LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpsb2FkUmVz
b3VyY2UoY29ucwogCiAgICAgTE9HKE1lZGlhLCAiSFRNTE1lZGlhRWxlbWVudDo6bG9hZFJlc291
cmNlKCVwKSAtIG1fY3VycmVudFNyYyAtPiAlcyIsIHRoaXMsIHVybEZvckxvZ2dpbmdNZWRpYSht
X2N1cnJlbnRTcmMpLnV0ZjgoKS5kYXRhKCkpOwogCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
LSAgICBpZiAoTWVkaWFTdHJlYW1SZWdpc3RyeTo6cmVnaXN0cnkoKS5sb29rdXAodXJsLnN0cmlu
ZygpKSkKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24o
TWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yUmF0ZUNoYW5nZSk7Ci0j
ZW5kaWYKLQotICAgIGlmIChtX3NlbmRQcm9ncmVzc0V2ZW50cykgCisgICAgaWYgKG1fc2VuZFBy
b2dyZXNzRXZlbnRzKQogICAgICAgICBzdGFydFByb2dyZXNzRXZlbnRUaW1lcigpOwogCiAgICAg
Ym9vbCBwcml2YXRlTW9kZSA9IGRvY3VtZW50KCkucGFnZSgpICYmIGRvY3VtZW50KCkucGFnZSgp
LT51c2VzRXBoZW1lcmFsU2Vzc2lvbigpOwpAQCAtMTI5Miw2ICsxMjg3LDcgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50Ojpsb2FkUmVzb3VyY2UoY29ucwogCiAgICAgdXBkYXRlVm9sdW1lKCk7CiAK
KyAgICBib29sIGxvYWRBdHRlbXB0ZWQgPSBmYWxzZTsKICNpZiBFTkFCTEUoTUVESUFfU09VUkNF
KQogICAgIEFTU0VSVCghbV9tZWRpYVNvdXJjZSk7CiAKQEAgLTEzMDcsMTQgKzEzMDMsMjUgQEAg
dm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpsb2FkUmVzb3VyY2UoY29ucwogICAgICAgICAgICAgbV9t
ZWRpYVNvdXJjZSA9IG51bGxwdHI7CiAgICAgICAgICAgICBtZWRpYUxvYWRpbmdGYWlsZWQoTWVk
aWFQbGF5ZXI6OkZvcm1hdEVycm9yKTsKICAgICAgICAgfQotICAgIH0gZWxzZQorICAgICAgICBs
b2FkQXR0ZW1wdGVkID0gdHJ1ZTsKKyAgICB9CiAjZW5kaWYKKwogI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pCi0gICAgICAgIGlmIChtX21lZGlhU3RyZWFtU3JjT2JqZWN0KQotICAgICAgICAgICAg
bV9wbGF5ZXItPmxvYWQobV9tZWRpYVN0cmVhbVNyY09iamVjdC0+cHJpdmF0ZVN0cmVhbSgpKTsK
LSAgICAgICAgZWxzZQorICAgIGlmICghbG9hZEF0dGVtcHRlZCkKKyAgICB7CisgICAgICAgIGlm
ICghbV9tZWRpYVN0cmVhbVNyY09iamVjdCAmJiB1cmwucHJvdG9jb2xJcyhtZWRpYVN0cmVhbUJs
b2JQcm90b2NvbCkpCisgICAgICAgICAgICBtX21lZGlhU3RyZWFtU3JjT2JqZWN0ID0gTWVkaWFT
dHJlYW06Omxvb2t1cCh1cmwuc3RyaW5nKCkpOworCisgICAgICAgIGlmIChtX21lZGlhU3RyZWFt
U3JjT2JqZWN0KSB7CisgICAgICAgICAgICBsb2FkQXR0ZW1wdGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGlmICghbV9wbGF5ZXItPmxvYWQobV9tZWRpYVN0cmVhbVNyY09iamVjdC0+cHJpdmF0ZVN0
cmVhbSgpKSkKKyAgICAgICAgICAgICAgICBtZWRpYUxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6
OkZvcm1hdEVycm9yKTsKKyAgICAgICAgfQorICAgIH0KICNlbmRpZgotICAgIGlmICghbV9wbGF5
ZXItPmxvYWQodXJsLCBjb250ZW50VHlwZSwga2V5U3lzdGVtKSkKKworICAgIGlmICghbG9hZEF0
dGVtcHRlZCAmJiAhbV9wbGF5ZXItPmxvYWQodXJsLCBjb250ZW50VHlwZSwga2V5U3lzdGVtKSkK
ICAgICAgICAgbWVkaWFMb2FkaW5nRmFpbGVkKE1lZGlhUGxheWVyOjpGb3JtYXRFcnJvcik7CiAK
ICAgICAvLyBJZiB0aGVyZSBpcyBubyBwb3N0ZXIgdG8gZGlzcGxheSwgYWxsb3cgdGhlIG1lZGlh
IGVuZ2luZSB0byByZW5kZXIgdmlkZW8gZnJhbWVzIGFzIHNvb24gYXMKQEAgLTU2NTAsNiArNTY1
NywxMCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0ZU1lZGlhUGxheWVyCiAgICAgICAg
IG1fbWVkaWFTb3VyY2UtPmNsb3NlKCk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pCisgICAgbV9tZWRpYVN0cmVhbVNyY09iamVjdCA9IG51bGxwdHI7CisjZW5kaWYKKwogI2lm
IEVOQUJMRShWSURFT19UUkFDSykKICAgICBmb3JnZXRSZXNvdXJjZVNwZWNpZmljVHJhY2tzKCk7
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5jcHAJKHJldmlzaW9uIDE4OTk4MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYzLDE2ICs2
MywxOSBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQuaCIKKwogI2lmIFVTRShBVkZPVU5EQVRJT04pCiAjaW5jbHVkZSAiTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oIgotI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCi0j
aW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgiCiAjZW5kaWYK
KworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIFVTRShBVkZPVU5EQVRJT04pCisjaW5jbHVk
ZSAiTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgiCiAjZW5kaWYKLSNlbGlm
IFBMQVRGT1JNKFdJTikgJiYgIVVTRShHU1RSRUFNRVIpCi0jaWYgVVNFKEFWRk9VTkRBVElPTikK
KworI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQorCisjaWYgUExBVEZPUk0oV0lOKSAmJiBVU0Uo
QVZGT1VOREFUSU9OKSAmJiAhVVNFKEdTVFJFQU1FUikKICNpbmNsdWRlICJNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25DRi5oIgotI2VuZGlmIC8vIFVTRShBVkZPVU5EQVRJT04pCiAjZW5k
aWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTc4LDE2ICsxODEsMjAgQEAgc3RhdGljIHZv
aWQgYnVpbGRNZWRpYUVuZ2luZXNWZWN0b3IoKQogewogI2lmIFVTRShBVkZPVU5EQVRJT04pCiAg
ICAgaWYgKFNldHRpbmdzOjppc0FWRm91bmRhdGlvbkVuYWJsZWQoKSkgeworCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnJl
Z2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOworI2VuZGlmCisKICNpZiBFTkFCTEUo
TUVESUFfU09VUkNFKQogICAgICAgICBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9i
akM6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOwogI2VuZGlmCi0jZWxpZiBQ
TEFURk9STShXSU4pCisKKyNpZiBQTEFURk9STShXSU4pCiAgICAgICAgIE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbkNGOjpyZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlhRW5naW5lKTsK
ICNlbmRpZgogICAgIH0KLSNlbmRpZgorI2VuZGlmIC8vIFVTRShBVkZPVU5EQVRJT04pCiAKICNp
ZiBQTEFURk9STShNQUMpCiAgICAgaWYgKFNldHRpbmdzOjppc1FUS2l0RW5hYmxlZCgpKQpAQCAt
MjM4LDcgKzI0NSw3IEBAIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGNvZGVjcygpCiAKIHN0
YXRpYyBjb25zdCBNZWRpYVBsYXllckZhY3RvcnkqIGJlc3RNZWRpYUVuZ2luZUZvclN1cHBvcnRQ
YXJhbWV0ZXJzKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMs
IGNvbnN0IE1lZGlhUGxheWVyRmFjdG9yeSogY3VycmVudCA9IG51bGxwdHIpCiB7Ci0gICAgaWYg
KHBhcmFtZXRlcnMudHlwZS5pc0VtcHR5KCkpCisgICAgaWYgKHBhcmFtZXRlcnMudHlwZS5pc0Vt
cHR5KCkgJiYgIXBhcmFtZXRlcnMuaXNNZWRpYVNvdXJjZSAmJiAhcGFyYW1ldGVycy5pc01lZGlh
U3RyZWFtKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIDQuOC4xMC4zIE1JTUUg
dHlwZXMgLSBJbiB0aGUgYWJzZW5jZSBvZiBhIHNwZWNpZmljYXRpb24gdG8gdGhlIGNvbnRyYXJ5
LCB0aGUgTUlNRSB0eXBlICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iCkBAIC0zMDcsNiArMzE0
LDggQEAgTWVkaWFQbGF5ZXI6On5NZWRpYVBsYXllcigpCiAKIGJvb2wgTWVkaWFQbGF5ZXI6Omxv
YWQoY29uc3QgVVJMJiB1cmwsIGNvbnN0IENvbnRlbnRUeXBlJiBjb250ZW50VHlwZSwgY29uc3Qg
U3RyaW5nJiBrZXlTeXN0ZW0pCiB7CisgICAgQVNTRVJUKCFtX3JlbG9hZFRpbWVyLmlzQWN0aXZl
KCkpOworCiAgICAgbV9jb250ZW50TUlNRVR5cGUgPSBjb250ZW50VHlwZS50eXBlKCkubG93ZXIo
KTsKICAgICBtX2NvbnRlbnRUeXBlQ29kZWNzID0gY29udGVudFR5cGUucGFyYW1ldGVyKGNvZGVj
cygpKTsKICAgICBtX3VybCA9IHVybDsKQEAgLTM0NSw3ICszNTQsOSBAQCBib29sIE1lZGlhUGxh
eWVyOjpsb2FkKGNvbnN0IFVSTCYgdXJsLCBjCiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKIGJv
b2wgTWVkaWFQbGF5ZXI6OmxvYWQoY29uc3QgVVJMJiB1cmwsIGNvbnN0IENvbnRlbnRUeXBlJiBj
b250ZW50VHlwZSwgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50KiBtZWRpYVNvdXJjZSkKIHsKKyAg
ICBBU1NFUlQoIW1fcmVsb2FkVGltZXIuaXNBY3RpdmUoKSk7CiAgICAgQVNTRVJUKG1lZGlhU291
cmNlKTsKKwogICAgIG1fbWVkaWFTb3VyY2UgPSBtZWRpYVNvdXJjZTsKICAgICBtX2NvbnRlbnRN
SU1FVHlwZSA9IGNvbnRlbnRUeXBlLnR5cGUoKS5sb3dlcigpOwogICAgIG1fY29udGVudFR5cGVD
b2RlY3MgPSBjb250ZW50VHlwZS5wYXJhbWV0ZXIoY29kZWNzKCkpOwpAQCAtMzYwLDcgKzM3MSw5
IEBAIGJvb2wgTWVkaWFQbGF5ZXI6OmxvYWQoY29uc3QgVVJMJiB1cmwsIGMKICNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKQogYm9vbCBNZWRpYVBsYXllcjo6bG9hZChNZWRpYVN0cmVhbVByaXZhdGUq
IG1lZGlhU3RyZWFtKQogeworICAgIEFTU0VSVCghbV9yZWxvYWRUaW1lci5pc0FjdGl2ZSgpKTsK
ICAgICBBU1NFUlQobWVkaWFTdHJlYW0pOworCiAgICAgbV9tZWRpYVN0cmVhbSA9IG1lZGlhU3Ry
ZWFtOwogICAgIG1fa2V5U3lzdGVtID0gIiI7CiAgICAgbV9jb250ZW50TUlNRVR5cGUgPSAiIjsK
QEAgLTM5Myw3ICs0MDYsNyBAQCB2b2lkIE1lZGlhUGxheWVyOjpsb2FkV2l0aE5leHRNZWRpYUVu
Z2luCiB7CiAgICAgY29uc3QgTWVkaWFQbGF5ZXJGYWN0b3J5KiBlbmdpbmUgPSBudWxscHRyOwog
Ci0gICAgaWYgKCFtX2NvbnRlbnRNSU1FVHlwZS5pc0VtcHR5KCkpCisgICAgaWYgKCFtX2NvbnRl
bnRNSU1FVHlwZS5pc0VtcHR5KCkgfHwgbV9tZWRpYVN0cmVhbSB8fCBtX21lZGlhU291cmNlKQog
ICAgICAgICBlbmdpbmUgPSBuZXh0QmVzdE1lZGlhRW5naW5lKGN1cnJlbnQpOwogCiAgICAgLy8g
SWYgbm8gTUlNRSB0eXBlIGlzIHNwZWNpZmllZCBvciB0aGUgdHlwZSB3YXMgaW5mZXJyZWQgZnJv
bSB0aGUgZmlsZSBleHRlbnNpb24sIGp1c3QgdXNlIHRoZSBuZXh0IGVuZ2luZS4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakMubW0JKHJldmlzaW9uIDE4OTk4MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhU291cmNlQVZGT2JqQy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQwLDcgKzI0MCw4IEBA
IE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcmkKICAgICBpZiAocGFyYW1l
dGVycy5pc01lZGlhU3RyZWFtKQogICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzTm90U3Vw
cG9ydGVkOwogI2VuZGlmCi0gICAgaWYgKCFtaW1lVHlwZUNhY2hlKCkuY29udGFpbnMocGFyYW1l
dGVycy50eXBlKSkKKworICAgIGlmIChwYXJhbWV0ZXJzLnR5cGUuaXNFbXB0eSgpIHx8ICFtaW1l
VHlwZUNhY2hlKCkuY29udGFpbnMocGFyYW1ldGVycy50eXBlKSkKICAgICAgICAgcmV0dXJuIE1l
ZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKIAogICAgIC8vIFRoZSBzcGVjIHNheXM6CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVBsYXll
ck1lZGlhU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
b2NrL21lZGlhc291cmNlL01vY2tNZWRpYVBsYXllck1lZGlhU291cmNlLmNwcAkocmV2aXNpb24g
MTg5OTgzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2Nr
TWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjksNyArNjksNyBAQCBN
ZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1vY2tNZWRpYVBsYXllCiAgICAgaWYgKCFwYXJhbWV0
ZXJzLmlzTWVkaWFTb3VyY2UpCiAgICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNOb3RTdXBw
b3J0ZWQ7CiAKLSAgICBpZiAoIW1pbWVUeXBlQ2FjaGUoKS5jb250YWlucyhwYXJhbWV0ZXJzLnR5
cGUpKQorICAgIGlmIChwYXJhbWV0ZXJzLnR5cGUuaXNFbXB0eSgpIHx8ICFtaW1lVHlwZUNhY2hl
KCkuY29udGFpbnMocGFyYW1ldGVycy50eXBlKSkKICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVy
OjpJc05vdFN1cHBvcnRlZDsKIAogICAgIGlmIChwYXJhbWV0ZXJzLmNvZGVjcy5pc0VtcHR5KCkp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261585</attachid>
            <date>2015-09-19 13:25:13 -0700</date>
            <delta_ts>2015-09-19 14:59:47 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>engine_cleanup_patch_2.txt</filename>
            <type>text/plain</type>
            <size>12543</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MDAxNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE1LTA5LTE5ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIENsZWFudXAgY29kZSB0
aGF0IGZpbmRzIGFuZCBsb2FkcyBhIG1lZGlhIGVuZ2luZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MzcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBmdW5jdGlvbmFsIGNo
YW5nZS4KKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OnNldFJlZ2lzdHJ5KTogTmV3LCBzZXQgdGhl
IHJlZ2lzdHJ5LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06Omxvb2t1cCk6IE5ldywg
bG9va3VwIGEgdXJsIGluIHRoZSByZWdpc3RyeS4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtLmg6CisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bG9hZFJlc291cmNlKTogUmVz
dHJ1Y3R1cmUgYW5kIHNpbXBsaWZ5IHRoZSBjb2RlIHRoYXQgdHJpZXMgdGhlIAorICAgICAgICAg
IGRpZmZlcmVudCB0eXBlcyBvZiBtZWRpYSBlbmdpbmUgc28gdGhlIGNvZGUgaXMgZWFzaWVyIHRv
IHVuZGVyc3RhbmQgYW5kIG1vZGlmeS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnQ6OmNyZWF0ZU1lZGlhUGxheWVyKTogQ2xlYXIgbV9tZWRpYVN0cmVhbVNyY09iamVjdC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmJ1aWxkTWVkaWFFbmdpbmVzVmVjdG9yKTogQWRkIHNvbWUgd2hpdGVzcGFjZSB0byBt
YWtlIGl0IGVhc2llciB0byByZWFkLgorICAgICAgICAoV2ViQ29yZTo6YmVzdE1lZGlhRW5naW5l
Rm9yU3VwcG9ydFBhcmFtZXRlcnMpOiBBbHNvIHByb2Nlc3MgbWVkaWFzdHJlYW0gYW5kIG1lZGlh
c291cmNlIHVybHMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6bG9hZCk6IEFTU0VS
VCBpZiBjYWxsZWQgd2hlbiB0aGUgcmVsb2FkIHRpbWVyIGlzIGFjdGl2ZS4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyOjpsb2FkV2l0aE5leHRNZWRpYUVuZ2luZSk6IEFsc28gcHJvY2Vz
cyBtZWRpYXN0cmVhbSBhbmQgbWVkaWFzb3VyY2UgdXJscy4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6c3VwcG9ydHNUeXBlKTogRG9uJ3QgdGVzdCBlbXB0eS9udWxsIHVybHMuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVBsYXllck1lZGlh
U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVBsYXllck1lZGlhU291cmNl
OjpzdXBwb3J0c1R5cGUpOiBEaXR0by4KKwogMjAxNS0wOS0xOCAgRGVhbiBKYWNrc29uICA8ZGlu
b0BhcHBsZS5jb20+CiAKICAgICAgICAgTnVsbCBkZXJlZmVyZW5jZSBsb2FkaW5nIEJsaW5rIGxh
eW91dCB0ZXN0IHN2Zy9maWx0ZXJzL2ZlSW1hZ2UtZmFpbGVkLWxvYWQtY3Jhc2guaHRtbApJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bS5jcHAJKHJldmlzaW9uIDE4OTk4MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDE1IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zOSw2ICszOSwy
MiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK1VSTFJlZ2lzdHJ5KiBNZWRpYVN0cmVhbTo6
c19yZWdpc3RyeSA9IDA7CisKK3ZvaWQgTWVkaWFTdHJlYW06OnNldFJlZ2lzdHJ5KFVSTFJlZ2lz
dHJ5KiByZWdpc3RyeSkKK3sKKyAgICBBU1NFUlQoIXNfcmVnaXN0cnkpOworICAgIHNfcmVnaXN0
cnkgPSByZWdpc3RyeTsKK30KKworTWVkaWFTdHJlYW0qIE1lZGlhU3RyZWFtOjpsb29rdXAoY29u
c3QgU3RyaW5nJiB1cmwpCit7CisgICAgaWYgKHNfcmVnaXN0cnkpCisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxNZWRpYVN0cmVhbSo+KHNfcmVnaXN0cnktPmxvb2t1cCh1cmwpKTsKKworICAg
IHJldHVybiBudWxscHRyOworfQorCiBSZWY8TWVkaWFTdHJlYW0+IE1lZGlhU3RyZWFtOjpjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkKIHsKICAgICByZXR1cm4gTWVkaWFT
dHJlYW06OmNyZWF0ZShjb250ZXh0LCBNZWRpYVN0cmVhbVByaXZhdGU6OmNyZWF0ZSgpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
LmgJKHJldmlzaW9uIDE4OTk4MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTIsNiArNTIsOSBAQCBwdWJsaWM6
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRPclJlbW92ZVRyYWNrKCkgPSAwOwogICAgIH07
CiAKKyAgICBzdGF0aWMgdm9pZCBzZXRSZWdpc3RyeShVUkxSZWdpc3RyeSopOworICAgIHN0YXRp
YyBNZWRpYVN0cmVhbSogbG9va3VwKGNvbnN0IFN0cmluZyYpOworCiAgICAgc3RhdGljIFJlZjxN
ZWRpYVN0cmVhbT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsKICAgICBzdGF0aWMg
UmVmPE1lZGlhU3RyZWFtPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIE1lZGlhU3Ry
ZWFtKik7CiAgICAgc3RhdGljIFJlZjxNZWRpYVN0cmVhbT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmLCBjb25zdCBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+PiYpOwpAQCAt
MTE1LDYgKzExOCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzY2hlZHVsZUFjdGl2ZVN0YXRlQ2hh
bmdlKCk7CiAgICAgdm9pZCBhY3Rpdml0eUV2ZW50VGltZXJGaXJlZCgpOwogCisgICAgc3RhdGlj
IFVSTFJlZ2lzdHJ5KiBzX3JlZ2lzdHJ5OworCiAgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVh
bVRyYWNrPj4gdHJhY2tWZWN0b3JGb3JUeXBlKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUpIGNv
bnN0OwogCiAgICAgUmVmUHRyPE1lZGlhU3RyZWFtUHJpdmF0ZT4gbV9wcml2YXRlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxODk5ODMp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjY3LDEyICsxMjY3LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpsb2FkUmVz
b3VyY2UoY29ucwogCiAgICAgTE9HKE1lZGlhLCAiSFRNTE1lZGlhRWxlbWVudDo6bG9hZFJlc291
cmNlKCVwKSAtIG1fY3VycmVudFNyYyAtPiAlcyIsIHRoaXMsIHVybEZvckxvZ2dpbmdNZWRpYSht
X2N1cnJlbnRTcmMpLnV0ZjgoKS5kYXRhKCkpOwogCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
LSAgICBpZiAoTWVkaWFTdHJlYW1SZWdpc3RyeTo6cmVnaXN0cnkoKS5sb29rdXAodXJsLnN0cmlu
ZygpKSkKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24o
TWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yUmF0ZUNoYW5nZSk7Ci0j
ZW5kaWYKLQotICAgIGlmIChtX3NlbmRQcm9ncmVzc0V2ZW50cykgCisgICAgaWYgKG1fc2VuZFBy
b2dyZXNzRXZlbnRzKQogICAgICAgICBzdGFydFByb2dyZXNzRXZlbnRUaW1lcigpOwogCiAgICAg
Ym9vbCBwcml2YXRlTW9kZSA9IGRvY3VtZW50KCkucGFnZSgpICYmIGRvY3VtZW50KCkucGFnZSgp
LT51c2VzRXBoZW1lcmFsU2Vzc2lvbigpOwpAQCAtMTI5Miw2ICsxMjg3LDcgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50Ojpsb2FkUmVzb3VyY2UoY29ucwogCiAgICAgdXBkYXRlVm9sdW1lKCk7CiAK
KyAgICBib29sIGxvYWRBdHRlbXB0ZWQgPSBmYWxzZTsKICNpZiBFTkFCTEUoTUVESUFfU09VUkNF
KQogICAgIEFTU0VSVCghbV9tZWRpYVNvdXJjZSk7CiAKQEAgLTEzMDcsMTQgKzEzMDMsMjQgQEAg
dm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpsb2FkUmVzb3VyY2UoY29ucwogICAgICAgICAgICAgbV9t
ZWRpYVNvdXJjZSA9IG51bGxwdHI7CiAgICAgICAgICAgICBtZWRpYUxvYWRpbmdGYWlsZWQoTWVk
aWFQbGF5ZXI6OkZvcm1hdEVycm9yKTsKICAgICAgICAgfQotICAgIH0gZWxzZQorICAgICAgICBs
b2FkQXR0ZW1wdGVkID0gdHJ1ZTsKKyAgICB9CiAjZW5kaWYKKwogI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pCi0gICAgICAgIGlmIChtX21lZGlhU3RyZWFtU3JjT2JqZWN0KQotICAgICAgICAgICAg
bV9wbGF5ZXItPmxvYWQobV9tZWRpYVN0cmVhbVNyY09iamVjdC0+cHJpdmF0ZVN0cmVhbSgpKTsK
LSAgICAgICAgZWxzZQorICAgIGlmICghbG9hZEF0dGVtcHRlZCkgeworICAgICAgICBpZiAoIW1f
bWVkaWFTdHJlYW1TcmNPYmplY3QgJiYgdXJsLnByb3RvY29sSXMobWVkaWFTdHJlYW1CbG9iUHJv
dG9jb2wpKQorICAgICAgICAgICAgbV9tZWRpYVN0cmVhbVNyY09iamVjdCA9IE1lZGlhU3RyZWFt
Ojpsb29rdXAodXJsLnN0cmluZygpKTsKKworICAgICAgICBpZiAobV9tZWRpYVN0cmVhbVNyY09i
amVjdCkgeworICAgICAgICAgICAgbG9hZEF0dGVtcHRlZCA9IHRydWU7CisgICAgICAgICAgICBp
ZiAoIW1fcGxheWVyLT5sb2FkKG1fbWVkaWFTdHJlYW1TcmNPYmplY3QtPnByaXZhdGVTdHJlYW0o
KSkpCisgICAgICAgICAgICAgICAgbWVkaWFMb2FkaW5nRmFpbGVkKE1lZGlhUGxheWVyOjpGb3Jt
YXRFcnJvcik7CisgICAgICAgIH0KKyAgICB9CiAjZW5kaWYKLSAgICBpZiAoIW1fcGxheWVyLT5s
b2FkKHVybCwgY29udGVudFR5cGUsIGtleVN5c3RlbSkpCisKKyAgICBpZiAoIWxvYWRBdHRlbXB0
ZWQgJiYgIW1fcGxheWVyLT5sb2FkKHVybCwgY29udGVudFR5cGUsIGtleVN5c3RlbSkpCiAgICAg
ICAgIG1lZGlhTG9hZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3IpOwogCiAgICAg
Ly8gSWYgdGhlcmUgaXMgbm8gcG9zdGVyIHRvIGRpc3BsYXksIGFsbG93IHRoZSBtZWRpYSBlbmdp
bmUgdG8gcmVuZGVyIHZpZGVvIGZyYW1lcyBhcyBzb29uIGFzCkBAIC01NjUwLDYgKzU2NTYsMTAg
QEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpjcmVhdGVNZWRpYVBsYXllcgogICAgICAgICBtX21l
ZGlhU291cmNlLT5jbG9zZSgpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQor
ICAgIG1fbWVkaWFTdHJlYW1TcmNPYmplY3QgPSBudWxscHRyOworI2VuZGlmCisKICNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCiAgICAgZm9yZ2V0UmVzb3VyY2VTcGVjaWZpY1RyYWNrcygpOwogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQ
bGF5ZXIuY3BwCShyZXZpc2lvbiAxODk5ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MywxNiArNjMsMTkg
QEAKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVFU
S2l0LmgiCisKICNpZiBVU0UoQVZGT1VOREFUSU9OKQogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakMuaCIKLSNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQotI2luY2x1
ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oIgogI2VuZGlmCisKKyNp
ZiBFTkFCTEUoTUVESUFfU09VUkNFKSAmJiBVU0UoQVZGT1VOREFUSU9OKQorI2luY2x1ZGUgIk1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oIgogI2VuZGlmCi0jZWxpZiBQTEFU
Rk9STShXSU4pICYmICFVU0UoR1NUUkVBTUVSKQotI2lmIFVTRShBVkZPVU5EQVRJT04pCisKKyNl
bmRpZiAvLyBQTEFURk9STShDT0NPQSkKKworI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKEFWRk9V
TkRBVElPTikgJiYgIVVTRShHU1RSRUFNRVIpCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uQ0YuaCIKLSNlbmRpZiAvLyBVU0UoQVZGT1VOREFUSU9OKQogI2VuZGlmCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE3OCwxNiArMTgxLDIwIEBAIHN0YXRpYyB2b2lkIGJ1
aWxkTWVkaWFFbmdpbmVzVmVjdG9yKCkKIHsKICNpZiBVU0UoQVZGT1VOREFUSU9OKQogICAgIGlm
IChTZXR0aW5nczo6aXNBVkZvdW5kYXRpb25FbmFibGVkKCkpIHsKKwogI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgICAgICBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpyZWdpc3Rl
ck1lZGlhRW5naW5lKGFkZE1lZGlhRW5naW5lKTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKE1FRElB
X1NPVVJDRSkKICAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpy
ZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlhRW5naW5lKTsKICNlbmRpZgotI2VsaWYgUExBVEZP
Uk0oV0lOKQorCisjaWYgUExBVEZPUk0oV0lOKQogICAgICAgICBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25DRjo6cmVnaXN0ZXJNZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7CiAjZW5k
aWYKICAgICB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBVU0UoQVZGT1VOREFUSU9OKQogCiAjaWYgUExB
VEZPUk0oTUFDKQogICAgIGlmIChTZXR0aW5nczo6aXNRVEtpdEVuYWJsZWQoKSkKQEAgLTIzOCw3
ICsyNDUsNyBAQCBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBjb2RlY3MoKQogCiBzdGF0aWMg
Y29uc3QgTWVkaWFQbGF5ZXJGYWN0b3J5KiBiZXN0TWVkaWFFbmdpbmVGb3JTdXBwb3J0UGFyYW1l
dGVycyhjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25z
dCBNZWRpYVBsYXllckZhY3RvcnkqIGN1cnJlbnQgPSBudWxscHRyKQogewotICAgIGlmIChwYXJh
bWV0ZXJzLnR5cGUuaXNFbXB0eSgpKQorICAgIGlmIChwYXJhbWV0ZXJzLnR5cGUuaXNFbXB0eSgp
ICYmICFwYXJhbWV0ZXJzLmlzTWVkaWFTb3VyY2UgJiYgIXBhcmFtZXRlcnMuaXNNZWRpYVN0cmVh
bSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyA0LjguMTAuMyBNSU1FIHR5cGVz
IC0gSW4gdGhlIGFic2VuY2Ugb2YgYSBzcGVjaWZpY2F0aW9uIHRvIHRoZSBjb250cmFyeSwgdGhl
IE1JTUUgdHlwZSAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIgpAQCAtMzA3LDYgKzMxNCw4IEBA
IE1lZGlhUGxheWVyOjp+TWVkaWFQbGF5ZXIoKQogCiBib29sIE1lZGlhUGxheWVyOjpsb2FkKGNv
bnN0IFVSTCYgdXJsLCBjb25zdCBDb250ZW50VHlwZSYgY29udGVudFR5cGUsIGNvbnN0IFN0cmlu
ZyYga2V5U3lzdGVtKQogeworICAgIEFTU0VSVCghbV9yZWxvYWRUaW1lci5pc0FjdGl2ZSgpKTsK
KwogICAgIG1fY29udGVudE1JTUVUeXBlID0gY29udGVudFR5cGUudHlwZSgpLmxvd2VyKCk7CiAg
ICAgbV9jb250ZW50VHlwZUNvZGVjcyA9IGNvbnRlbnRUeXBlLnBhcmFtZXRlcihjb2RlY3MoKSk7
CiAgICAgbV91cmwgPSB1cmw7CkBAIC0zNDUsNyArMzU0LDkgQEAgYm9vbCBNZWRpYVBsYXllcjo6
bG9hZChjb25zdCBVUkwmIHVybCwgYwogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiBib29sIE1l
ZGlhUGxheWVyOjpsb2FkKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBDb250ZW50VHlwZSYgY29udGVu
dFR5cGUsIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCogbWVkaWFTb3VyY2UpCiB7CisgICAgQVNT
RVJUKCFtX3JlbG9hZFRpbWVyLmlzQWN0aXZlKCkpOwogICAgIEFTU0VSVChtZWRpYVNvdXJjZSk7
CisKICAgICBtX21lZGlhU291cmNlID0gbWVkaWFTb3VyY2U7CiAgICAgbV9jb250ZW50TUlNRVR5
cGUgPSBjb250ZW50VHlwZS50eXBlKCkubG93ZXIoKTsKICAgICBtX2NvbnRlbnRUeXBlQ29kZWNz
ID0gY29udGVudFR5cGUucGFyYW1ldGVyKGNvZGVjcygpKTsKQEAgLTM2MCw3ICszNzEsOSBAQCBi
b29sIE1lZGlhUGxheWVyOjpsb2FkKGNvbnN0IFVSTCYgdXJsLCBjCiAjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKIGJvb2wgTWVkaWFQbGF5ZXI6OmxvYWQoTWVkaWFTdHJlYW1Qcml2YXRlKiBtZWRp
YVN0cmVhbSkKIHsKKyAgICBBU1NFUlQoIW1fcmVsb2FkVGltZXIuaXNBY3RpdmUoKSk7CiAgICAg
QVNTRVJUKG1lZGlhU3RyZWFtKTsKKwogICAgIG1fbWVkaWFTdHJlYW0gPSBtZWRpYVN0cmVhbTsK
ICAgICBtX2tleVN5c3RlbSA9ICIiOwogICAgIG1fY29udGVudE1JTUVUeXBlID0gIiI7CkBAIC0z
OTEsOSArNDA0LDIxIEBAIGNvbnN0IE1lZGlhUGxheWVyRmFjdG9yeSogTWVkaWFQbGF5ZXI6Om4K
IAogdm9pZCBNZWRpYVBsYXllcjo6bG9hZFdpdGhOZXh0TWVkaWFFbmdpbmUoY29uc3QgTWVkaWFQ
bGF5ZXJGYWN0b3J5KiBjdXJyZW50KQogeworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpIAorI2Rl
ZmluZSBNRURJQVNPVVJDRSBtX21lZGlhU291cmNlCisjZWxzZQorI2RlZmluZSBNRURJQVNPVVJD
RSBudWxscHRyCisjZW5kaWYKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisjZGVmaW5lIE1F
RElBU1RSRUFNIG1fbWVkaWFTdHJlYW0KKyNlbHNlCisjZGVmaW5lIE1FRElBU1RSRUFNIG51bGxw
dHIKKyNlbmRpZgorCiAgICAgY29uc3QgTWVkaWFQbGF5ZXJGYWN0b3J5KiBlbmdpbmUgPSBudWxs
cHRyOwogCi0gICAgaWYgKCFtX2NvbnRlbnRNSU1FVHlwZS5pc0VtcHR5KCkpCisgICAgaWYgKCFt
X2NvbnRlbnRNSU1FVHlwZS5pc0VtcHR5KCkgfHwgTUVESUFTVFJFQU0gfHwgTUVESUFTT1VSQ0Up
CiAgICAgICAgIGVuZ2luZSA9IG5leHRCZXN0TWVkaWFFbmdpbmUoY3VycmVudCk7CiAKICAgICAv
LyBJZiBubyBNSU1FIHR5cGUgaXMgc3BlY2lmaWVkIG9yIHRoZSB0eXBlIHdhcyBpbmZlcnJlZCBm
cm9tIHRoZSBmaWxlIGV4dGVuc2lvbiwganVzdCB1c2UgdGhlIG5leHQgZW5naW5lLgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbQkocmV2aXNpb24gMTg5OTgzKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsNyArMjQwLDgg
QEAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaQogICAgIGlmIChwYXJh
bWV0ZXJzLmlzTWVkaWFTdHJlYW0pCiAgICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNOb3RT
dXBwb3J0ZWQ7CiAjZW5kaWYKLSAgICBpZiAoIW1pbWVUeXBlQ2FjaGUoKS5jb250YWlucyhwYXJh
bWV0ZXJzLnR5cGUpKQorCisgICAgaWYgKHBhcmFtZXRlcnMudHlwZS5pc0VtcHR5KCkgfHwgIW1p
bWVUeXBlQ2FjaGUoKS5jb250YWlucyhwYXJhbWV0ZXJzLnR5cGUpKQogICAgICAgICByZXR1cm4g
TWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOwogCiAgICAgLy8gVGhlIHNwZWMgc2F5czoKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhUGxh
eWVyTWVkaWFTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UuY3BwCShyZXZpc2lv
biAxODk5ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01v
Y2tNZWRpYVBsYXllck1lZGlhU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OSw3ICs2OSw3IEBA
IE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTW9ja01lZGlhUGxheWUKICAgICBpZiAoIXBhcmFt
ZXRlcnMuaXNNZWRpYVNvdXJjZSkKICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1
cHBvcnRlZDsKIAotICAgIGlmICghbWltZVR5cGVDYWNoZSgpLmNvbnRhaW5zKHBhcmFtZXRlcnMu
dHlwZSkpCisgICAgaWYgKHBhcmFtZXRlcnMudHlwZS5pc0VtcHR5KCkgfHwgIW1pbWVUeXBlQ2Fj
aGUoKS5jb250YWlucyhwYXJhbWV0ZXJzLnR5cGUpKQogICAgICAgICByZXR1cm4gTWVkaWFQbGF5
ZXI6OklzTm90U3VwcG9ydGVkOwogCiAgICAgaWYgKHBhcmFtZXRlcnMuY29kZWNzLmlzRW1wdHko
KSkK
</data>
<flag name="review"
          id="286774"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261587</attachid>
            <date>2015-09-19 14:59:47 -0700</date>
            <delta_ts>2015-09-19 15:05:10 -0700</delta_ts>
            <desc>Updated patch.</desc>
            <filename>engine_cleanup_patch_3.txt</filename>
            <type>text/plain</type>
            <size>13178</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MDAxNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE1LTA5LTE5ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIENsZWFudXAgY29kZSB0
aGF0IGZpbmRzIGFuZCBsb2FkcyBhIG1lZGlhIGVuZ2luZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MzcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBmdW5jdGlvbmFsIGNo
YW5nZS4KKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OnNldFJlZ2lzdHJ5KTogTmV3LCBzZXQgdGhl
IHJlZ2lzdHJ5LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06Omxvb2t1cCk6IE5ldywg
bG9va3VwIGEgdXJsIGluIHRoZSByZWdpc3RyeS4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtLmg6CisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bG9hZFJlc291cmNlKTogUmVz
dHJ1Y3R1cmUgYW5kIHNpbXBsaWZ5IHRoZSBjb2RlIHRoYXQgdHJpZXMgdGhlIAorICAgICAgICAg
IGRpZmZlcmVudCB0eXBlcyBvZiBtZWRpYSBlbmdpbmUgc28gdGhlIGNvZGUgaXMgZWFzaWVyIHRv
IHVuZGVyc3RhbmQgYW5kIG1vZGlmeS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnQ6OmNyZWF0ZU1lZGlhUGxheWVyKTogQ2xlYXIgbV9tZWRpYVN0cmVhbVNyY09iamVjdC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmJ1aWxkTWVkaWFFbmdpbmVzVmVjdG9yKTogQWRkIHNvbWUgd2hpdGVzcGFjZSB0byBt
YWtlIGl0IGVhc2llciB0byByZWFkLgorICAgICAgICAoV2ViQ29yZTo6YmVzdE1lZGlhRW5naW5l
Rm9yU3VwcG9ydFBhcmFtZXRlcnMpOiBBbHNvIHByb2Nlc3MgbWVkaWFzdHJlYW0gYW5kIG1lZGlh
c291cmNlIHVybHMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6bG9hZCk6IEFTU0VS
VCBpZiBjYWxsZWQgd2hlbiB0aGUgcmVsb2FkIHRpbWVyIGlzIGFjdGl2ZS4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyOjpsb2FkV2l0aE5leHRNZWRpYUVuZ2luZSk6IEFsc28gcHJvY2Vz
cyBtZWRpYXN0cmVhbSBhbmQgbWVkaWFzb3VyY2UgdXJscy4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6c3VwcG9ydHNUeXBlKTogRG9uJ3QgdGVzdCBlbXB0eS9udWxsIHVybHMuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVBsYXllck1lZGlh
U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVBsYXllck1lZGlhU291cmNl
OjpzdXBwb3J0c1R5cGUpOiBEaXR0by4KKwogMjAxNS0wOS0xOCAgRGVhbiBKYWNrc29uICA8ZGlu
b0BhcHBsZS5jb20+CiAKICAgICAgICAgTnVsbCBkZXJlZmVyZW5jZSBsb2FkaW5nIEJsaW5rIGxh
eW91dCB0ZXN0IHN2Zy9maWx0ZXJzL2ZlSW1hZ2UtZmFpbGVkLWxvYWQtY3Jhc2guaHRtbApJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bS5jcHAJKHJldmlzaW9uIDE4OTk4MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDE1IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zOSw2ICszOSwy
MiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBVUkxSZWdpc3RyeSogc19yZWdp
c3RyeTsKKwordm9pZCBNZWRpYVN0cmVhbTo6c2V0UmVnaXN0cnkoVVJMUmVnaXN0cnkqIHJlZ2lz
dHJ5KQoreworICAgIEFTU0VSVCghc19yZWdpc3RyeSk7CisgICAgc19yZWdpc3RyeSA9IHJlZ2lz
dHJ5OworfQorCitNZWRpYVN0cmVhbSogTWVkaWFTdHJlYW06Omxvb2tVcChjb25zdCBTdHJpbmcm
IHVybCkKK3sKKyAgICBpZiAoIXNfcmVnaXN0cnkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1lZGlhU3RyZWFtKj4oc19yZWdpc3RyeS0+bG9va3Vw
KHVybCkpOworfQorCiBSZWY8TWVkaWFTdHJlYW0+IE1lZGlhU3RyZWFtOjpjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkKIHsKICAgICByZXR1cm4gTWVkaWFTdHJlYW06OmNy
ZWF0ZShjb250ZXh0LCBNZWRpYVN0cmVhbVByaXZhdGU6OmNyZWF0ZSgpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmgJKHJldmlz
aW9uIDE4OTk4MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFT
dHJlYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTIsNiArNTIsOSBAQCBwdWJsaWM6CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRBZGRPclJlbW92ZVRyYWNrKCkgPSAwOwogICAgIH07CiAKKyAgICBz
dGF0aWMgdm9pZCBzZXRSZWdpc3RyeShVUkxSZWdpc3RyeSopOworICAgIHN0YXRpYyBNZWRpYVN0
cmVhbSogbG9va1VwKGNvbnN0IFN0cmluZyYpOworCiAgICAgc3RhdGljIFJlZjxNZWRpYVN0cmVh
bT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsKICAgICBzdGF0aWMgUmVmPE1lZGlh
U3RyZWFtPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIE1lZGlhU3RyZWFtKik7CiAg
ICAgc3RhdGljIFJlZjxNZWRpYVN0cmVhbT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBjb25zdCBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+PiYpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxODk5ODMpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjY3LDEyICsxMjY3LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpsb2FkUmVzb3VyY2Uo
Y29ucwogCiAgICAgTE9HKE1lZGlhLCAiSFRNTE1lZGlhRWxlbWVudDo6bG9hZFJlc291cmNlKCVw
KSAtIG1fY3VycmVudFNyYyAtPiAlcyIsIHRoaXMsIHVybEZvckxvZ2dpbmdNZWRpYShtX2N1cnJl
bnRTcmMpLnV0ZjgoKS5kYXRhKCkpOwogCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBp
ZiAoTWVkaWFTdHJlYW1SZWdpc3RyeTo6cmVnaXN0cnkoKS5sb29rdXAodXJsLnN0cmluZygpKSkK
LSAgICAgICAgbV9tZWRpYVNlc3Npb24tPnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFF
bGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yUmF0ZUNoYW5nZSk7Ci0jZW5kaWYK
LQotICAgIGlmIChtX3NlbmRQcm9ncmVzc0V2ZW50cykgCisgICAgaWYgKG1fc2VuZFByb2dyZXNz
RXZlbnRzKQogICAgICAgICBzdGFydFByb2dyZXNzRXZlbnRUaW1lcigpOwogCiAgICAgYm9vbCBw
cml2YXRlTW9kZSA9IGRvY3VtZW50KCkucGFnZSgpICYmIGRvY3VtZW50KCkucGFnZSgpLT51c2Vz
RXBoZW1lcmFsU2Vzc2lvbigpOwpAQCAtMTI5Miw2ICsxMjg3LDcgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50Ojpsb2FkUmVzb3VyY2UoY29ucwogCiAgICAgdXBkYXRlVm9sdW1lKCk7CiAKKyAgICBi
b29sIGxvYWRBdHRlbXB0ZWQgPSBmYWxzZTsKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogICAg
IEFTU0VSVCghbV9tZWRpYVNvdXJjZSk7CiAKQEAgLTEzMDcsMTQgKzEzMDMsMjQgQEAgdm9pZCBI
VE1MTWVkaWFFbGVtZW50Ojpsb2FkUmVzb3VyY2UoY29ucwogICAgICAgICAgICAgbV9tZWRpYVNv
dXJjZSA9IG51bGxwdHI7CiAgICAgICAgICAgICBtZWRpYUxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5
ZXI6OkZvcm1hdEVycm9yKTsKICAgICAgICAgfQotICAgIH0gZWxzZQorICAgICAgICBsb2FkQXR0
ZW1wdGVkID0gdHJ1ZTsKKyAgICB9CiAjZW5kaWYKKwogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
Ci0gICAgICAgIGlmIChtX21lZGlhU3RyZWFtU3JjT2JqZWN0KQotICAgICAgICAgICAgbV9wbGF5
ZXItPmxvYWQobV9tZWRpYVN0cmVhbVNyY09iamVjdC0+cHJpdmF0ZVN0cmVhbSgpKTsKLSAgICAg
ICAgZWxzZQorICAgIGlmICghbG9hZEF0dGVtcHRlZCkgeworICAgICAgICBpZiAoIW1fbWVkaWFT
dHJlYW1TcmNPYmplY3QgJiYgdXJsLnByb3RvY29sSXMobWVkaWFTdHJlYW1CbG9iUHJvdG9jb2wp
KQorICAgICAgICAgICAgbV9tZWRpYVN0cmVhbVNyY09iamVjdCA9IE1lZGlhU3RyZWFtOjpsb29r
VXAodXJsLnN0cmluZygpKTsKKworICAgICAgICBpZiAobV9tZWRpYVN0cmVhbVNyY09iamVjdCkg
eworICAgICAgICAgICAgbG9hZEF0dGVtcHRlZCA9IHRydWU7CisgICAgICAgICAgICBpZiAoIW1f
cGxheWVyLT5sb2FkKG1fbWVkaWFTdHJlYW1TcmNPYmplY3QtPnByaXZhdGVTdHJlYW0oKSkpCisg
ICAgICAgICAgICAgICAgbWVkaWFMb2FkaW5nRmFpbGVkKE1lZGlhUGxheWVyOjpGb3JtYXRFcnJv
cik7CisgICAgICAgIH0KKyAgICB9CiAjZW5kaWYKLSAgICBpZiAoIW1fcGxheWVyLT5sb2FkKHVy
bCwgY29udGVudFR5cGUsIGtleVN5c3RlbSkpCisKKyAgICBpZiAoIWxvYWRBdHRlbXB0ZWQgJiYg
IW1fcGxheWVyLT5sb2FkKHVybCwgY29udGVudFR5cGUsIGtleVN5c3RlbSkpCiAgICAgICAgIG1l
ZGlhTG9hZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3IpOwogCiAgICAgLy8gSWYg
dGhlcmUgaXMgbm8gcG9zdGVyIHRvIGRpc3BsYXksIGFsbG93IHRoZSBtZWRpYSBlbmdpbmUgdG8g
cmVuZGVyIHZpZGVvIGZyYW1lcyBhcyBzb29uIGFzCkBAIC01NjUwLDYgKzU2NTYsMTAgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpjcmVhdGVNZWRpYVBsYXllcgogICAgICAgICBtX21lZGlhU291
cmNlLT5jbG9zZSgpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIG1f
bWVkaWFTdHJlYW1TcmNPYmplY3QgPSBudWxscHRyOworI2VuZGlmCisKICNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCiAgICAgZm9yZ2V0UmVzb3VyY2VTcGVjaWZpY1RyYWNrcygpOwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIu
Y3BwCShyZXZpc2lvbiAxODk5ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9NZWRpYVBsYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA3LTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MywxNiArNjMsMTkgQEAKIAog
I2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lmgi
CisKICNpZiBVU0UoQVZGT1VOREFUSU9OKQogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakMuaCIKLSNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQotI2luY2x1ZGUgIk1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oIgogI2VuZGlmCisKKyNpZiBFTkFC
TEUoTUVESUFfU09VUkNFKSAmJiBVU0UoQVZGT1VOREFUSU9OKQorI2luY2x1ZGUgIk1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oIgogI2VuZGlmCi0jZWxpZiBQTEFURk9STShX
SU4pICYmICFVU0UoR1NUUkVBTUVSKQotI2lmIFVTRShBVkZPVU5EQVRJT04pCisKKyNlbmRpZiAv
LyBQTEFURk9STShDT0NPQSkKKworI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKEFWRk9VTkRBVElP
TikgJiYgIVVTRShHU1RSRUFNRVIpCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uQ0YuaCIKLSNlbmRpZiAvLyBVU0UoQVZGT1VOREFUSU9OKQogI2VuZGlmCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTE3OCwxNiArMTgxLDIwIEBAIHN0YXRpYyB2b2lkIGJ1aWxkTWVk
aWFFbmdpbmVzVmVjdG9yKCkKIHsKICNpZiBVU0UoQVZGT1VOREFUSU9OKQogICAgIGlmIChTZXR0
aW5nczo6aXNBVkZvdW5kYXRpb25FbmFibGVkKCkpIHsKKwogI2lmIFBMQVRGT1JNKENPQ09BKQog
ICAgICAgICBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpyZWdpc3Rlck1lZGlh
RW5naW5lKGFkZE1lZGlhRW5naW5lKTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKE1FRElBX1NPVVJD
RSkKICAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpyZWdpc3Rl
ck1lZGlhRW5naW5lKGFkZE1lZGlhRW5naW5lKTsKICNlbmRpZgotI2VsaWYgUExBVEZPUk0oV0lO
KQorCisjaWYgUExBVEZPUk0oV0lOKQogICAgICAgICBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25DRjo6cmVnaXN0ZXJNZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7CiAjZW5kaWYKICAg
ICB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBVU0UoQVZGT1VOREFUSU9OKQogCiAjaWYgUExBVEZPUk0o
TUFDKQogICAgIGlmIChTZXR0aW5nczo6aXNRVEtpdEVuYWJsZWQoKSkKQEAgLTIzOCw3ICsyNDUs
NyBAQCBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBjb2RlY3MoKQogCiBzdGF0aWMgY29uc3Qg
TWVkaWFQbGF5ZXJGYWN0b3J5KiBiZXN0TWVkaWFFbmdpbmVGb3JTdXBwb3J0UGFyYW1ldGVycyhj
b25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBNZWRp
YVBsYXllckZhY3RvcnkqIGN1cnJlbnQgPSBudWxscHRyKQogewotICAgIGlmIChwYXJhbWV0ZXJz
LnR5cGUuaXNFbXB0eSgpKQorICAgIGlmIChwYXJhbWV0ZXJzLnR5cGUuaXNFbXB0eSgpICYmICFw
YXJhbWV0ZXJzLmlzTWVkaWFTb3VyY2UgJiYgIXBhcmFtZXRlcnMuaXNNZWRpYVN0cmVhbSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyA0LjguMTAuMyBNSU1FIHR5cGVzIC0gSW4g
dGhlIGFic2VuY2Ugb2YgYSBzcGVjaWZpY2F0aW9uIHRvIHRoZSBjb250cmFyeSwgdGhlIE1JTUUg
dHlwZSAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIgpAQCAtMzA3LDYgKzMxNCw4IEBAIE1lZGlh
UGxheWVyOjp+TWVkaWFQbGF5ZXIoKQogCiBib29sIE1lZGlhUGxheWVyOjpsb2FkKGNvbnN0IFVS
TCYgdXJsLCBjb25zdCBDb250ZW50VHlwZSYgY29udGVudFR5cGUsIGNvbnN0IFN0cmluZyYga2V5
U3lzdGVtKQogeworICAgIEFTU0VSVCghbV9yZWxvYWRUaW1lci5pc0FjdGl2ZSgpKTsKKwogICAg
IG1fY29udGVudE1JTUVUeXBlID0gY29udGVudFR5cGUudHlwZSgpLmxvd2VyKCk7CiAgICAgbV9j
b250ZW50VHlwZUNvZGVjcyA9IGNvbnRlbnRUeXBlLnBhcmFtZXRlcihjb2RlY3MoKSk7CiAgICAg
bV91cmwgPSB1cmw7CkBAIC0zNDUsNyArMzU0LDkgQEAgYm9vbCBNZWRpYVBsYXllcjo6bG9hZChj
b25zdCBVUkwmIHVybCwgYwogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiBib29sIE1lZGlhUGxh
eWVyOjpsb2FkKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBDb250ZW50VHlwZSYgY29udGVudFR5cGUs
IE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCogbWVkaWFTb3VyY2UpCiB7CisgICAgQVNTRVJUKCFt
X3JlbG9hZFRpbWVyLmlzQWN0aXZlKCkpOwogICAgIEFTU0VSVChtZWRpYVNvdXJjZSk7CisKICAg
ICBtX21lZGlhU291cmNlID0gbWVkaWFTb3VyY2U7CiAgICAgbV9jb250ZW50TUlNRVR5cGUgPSBj
b250ZW50VHlwZS50eXBlKCkubG93ZXIoKTsKICAgICBtX2NvbnRlbnRUeXBlQ29kZWNzID0gY29u
dGVudFR5cGUucGFyYW1ldGVyKGNvZGVjcygpKTsKQEAgLTM2MCw3ICszNzEsOSBAQCBib29sIE1l
ZGlhUGxheWVyOjpsb2FkKGNvbnN0IFVSTCYgdXJsLCBjCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKIGJvb2wgTWVkaWFQbGF5ZXI6OmxvYWQoTWVkaWFTdHJlYW1Qcml2YXRlKiBtZWRpYVN0cmVh
bSkKIHsKKyAgICBBU1NFUlQoIW1fcmVsb2FkVGltZXIuaXNBY3RpdmUoKSk7CiAgICAgQVNTRVJU
KG1lZGlhU3RyZWFtKTsKKwogICAgIG1fbWVkaWFTdHJlYW0gPSBtZWRpYVN0cmVhbTsKICAgICBt
X2tleVN5c3RlbSA9ICIiOwogICAgIG1fY29udGVudE1JTUVUeXBlID0gIiI7CkBAIC0zOTEsOSAr
NDA0LDIxIEBAIGNvbnN0IE1lZGlhUGxheWVyRmFjdG9yeSogTWVkaWFQbGF5ZXI6Om4KIAogdm9p
ZCBNZWRpYVBsYXllcjo6bG9hZFdpdGhOZXh0TWVkaWFFbmdpbmUoY29uc3QgTWVkaWFQbGF5ZXJG
YWN0b3J5KiBjdXJyZW50KQogeworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpIAorI2RlZmluZSBN
RURJQVNPVVJDRSBtX21lZGlhU291cmNlCisjZWxzZQorI2RlZmluZSBNRURJQVNPVVJDRSBudWxs
cHRyCisjZW5kaWYKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisjZGVmaW5lIE1FRElBU1RS
RUFNIG1fbWVkaWFTdHJlYW0KKyNlbHNlCisjZGVmaW5lIE1FRElBU1RSRUFNIG51bGxwdHIKKyNl
bmRpZgorCiAgICAgY29uc3QgTWVkaWFQbGF5ZXJGYWN0b3J5KiBlbmdpbmUgPSBudWxscHRyOwog
Ci0gICAgaWYgKCFtX2NvbnRlbnRNSU1FVHlwZS5pc0VtcHR5KCkpCisgICAgaWYgKCFtX2NvbnRl
bnRNSU1FVHlwZS5pc0VtcHR5KCkgfHwgTUVESUFTVFJFQU0gfHwgTUVESUFTT1VSQ0UpCiAgICAg
ICAgIGVuZ2luZSA9IG5leHRCZXN0TWVkaWFFbmdpbmUoY3VycmVudCk7CiAKICAgICAvLyBJZiBu
byBNSU1FIHR5cGUgaXMgc3BlY2lmaWVkIG9yIHRoZSB0eXBlIHdhcyBpbmZlcnJlZCBmcm9tIHRo
ZSBmaWxlIGV4dGVuc2lvbiwganVzdCB1c2UgdGhlIG5leHQgZW5naW5lLgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCShyZXZpc2lvbiAx
ODk5ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMjggKzEwMywxNSBAQCBzdHJ1Y3QgUGxhdGZvcm1NZWRp
YSB7CiB9OwogCiBzdHJ1Y3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyB7CisKKyAgICBN
ZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzKCkgeyB9CisKICAgICBTdHJpbmcgdHlwZTsKICAg
ICBTdHJpbmcgY29kZWNzOwogICAgIFVSTCB1cmw7Ci0jaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJ
QSkKICAgICBTdHJpbmcga2V5U3lzdGVtOwotI2VuZGlmCi0jaWYgRU5BQkxFKE1FRElBX1NPVVJD
RSkKLSAgICBib29sIGlzTWVkaWFTb3VyY2U7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKQotICAgIGJvb2wgaXNNZWRpYVN0cmVhbTsKLSNlbmRpZgotCi0gICAgTWVkaWFFbmdpbmVT
dXBwb3J0UGFyYW1ldGVycygpCi0jaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLSAgICAgICAgOiBp
c01lZGlhU291cmNlKGZhbHNlKQotI2VuZGlmCi0gICAgewotI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pCi0gICAgICAgIGlzTWVkaWFTdHJlYW0gPSBmYWxzZTsKLSNlbmRpZgotICAgIH0KKyAgICBi
b29sIGlzTWVkaWFTb3VyY2UgeyBmYWxzZSB9OworICAgIGJvb2wgaXNNZWRpYVN0cmVhbSB7IGZh
bHNlIH07CiB9OwogCiBleHRlcm4gY29uc3QgUGxhdGZvcm1NZWRpYSBOb1BsYXRmb3JtTWVkaWE7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tCShyZXZpc2lvbiAxODk5ODMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBs
YXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0MCw3
ICsyNDAsOCBAQCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpCiAgICAg
aWYgKHBhcmFtZXRlcnMuaXNNZWRpYVN0cmVhbSkKICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVy
OjpJc05vdFN1cHBvcnRlZDsKICNlbmRpZgotICAgIGlmICghbWltZVR5cGVDYWNoZSgpLmNvbnRh
aW5zKHBhcmFtZXRlcnMudHlwZSkpCisKKyAgICBpZiAocGFyYW1ldGVycy50eXBlLmlzRW1wdHko
KSB8fCAhbWltZVR5cGVDYWNoZSgpLmNvbnRhaW5zKHBhcmFtZXRlcnMudHlwZSkpCiAgICAgICAg
IHJldHVybiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CiAKICAgICAvLyBUaGUgc3BlYyBz
YXlzOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2Nr
TWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5jcHAJ
KHJldmlzaW9uIDE4OTk4MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFz
b3VyY2UvTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY5LDcg
KzY5LDcgQEAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNb2NrTWVkaWFQbGF5ZQogICAgIGlm
ICghcGFyYW1ldGVycy5pc01lZGlhU291cmNlKQogICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6
OklzTm90U3VwcG9ydGVkOwogCi0gICAgaWYgKCFtaW1lVHlwZUNhY2hlKCkuY29udGFpbnMocGFy
YW1ldGVycy50eXBlKSkKKyAgICBpZiAocGFyYW1ldGVycy50eXBlLmlzRW1wdHkoKSB8fCAhbWlt
ZVR5cGVDYWNoZSgpLmNvbnRhaW5zKHBhcmFtZXRlcnMudHlwZSkpCiAgICAgICAgIHJldHVybiBN
ZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CiAKICAgICBpZiAocGFyYW1ldGVycy5jb2RlY3Mu
aXNFbXB0eSgpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261588</attachid>
            <date>2015-09-19 15:05:10 -0700</date>
            <delta_ts>2015-09-19 16:24:35 -0700</delta_ts>
            <desc>Patch for the bots.</desc>
            <filename>engine_cleanup_patch_3.txt</filename>
            <type>text/plain</type>
            <size>13325</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MDAxNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE1LTA5LTE5ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIENsZWFudXAgY29kZSB0
aGF0IGZpbmRzIGFuZCBsb2FkcyBhIG1lZGlhIGVuZ2luZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MzcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBmdW5jdGlvbmFsIGNoYW5n
ZS4KKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OnNldFJlZ2lzdHJ5KTogTmV3LCBzZXQgdGhlIHJl
Z2lzdHJ5LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06Omxvb2t1cCk6IE5ldywgbG9v
a3VwIGEgdXJsIGluIHRoZSByZWdpc3RyeS4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtLmg6CisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bG9hZFJlc291cmNlKTogUmVzdHJ1
Y3R1cmUgYW5kIHNpbXBsaWZ5IHRoZSBjb2RlIHRoYXQgdHJpZXMgdGhlIAorICAgICAgICAgIGRp
ZmZlcmVudCB0eXBlcyBvZiBtZWRpYSBlbmdpbmUgc28gdGhlIGNvZGUgaXMgZWFzaWVyIHRvIHVu
ZGVyc3RhbmQgYW5kIG1vZGlmeS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
OmNyZWF0ZU1lZGlhUGxheWVyKTogQ2xlYXIgbV9tZWRpYVN0cmVhbVNyY09iamVjdC4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmJ1aWxkTWVkaWFFbmdpbmVzVmVjdG9yKTogQWRkIHNvbWUgd2hpdGVzcGFjZSB0byBtYWtl
IGl0IGVhc2llciB0byByZWFkLgorICAgICAgICAoV2ViQ29yZTo6YmVzdE1lZGlhRW5naW5lRm9y
U3VwcG9ydFBhcmFtZXRlcnMpOiBBbHNvIHByb2Nlc3MgbWVkaWFzdHJlYW0gYW5kIG1lZGlhc291
cmNlIHVybHMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6bG9hZCk6IEFTU0VSVCBp
ZiBjYWxsZWQgd2hlbiB0aGUgcmVsb2FkIHRpbWVyIGlzIGFjdGl2ZS4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyOjpsb2FkV2l0aE5leHRNZWRpYUVuZ2luZSk6IEFsc28gcHJvY2VzcyBt
ZWRpYXN0cmVhbSBhbmQgbWVkaWFzb3VyY2UgdXJscy4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQzo6c3VwcG9ydHNUeXBlKTogRG9uJ3QgdGVzdCBlbXB0eS9udWxsIHVybHMuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVBsYXllck1lZGlhU291
cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpz
dXBwb3J0c1R5cGUpOiBEaXR0by4KKwogMjAxNS0wOS0xOCAgRGVhbiBKYWNrc29uICA8ZGlub0Bh
cHBsZS5jb20+CiAKICAgICAgICAgTnVsbCBkZXJlZmVyZW5jZSBsb2FkaW5nIEJsaW5rIGxheW91
dCB0ZXN0IHN2Zy9maWx0ZXJzL2ZlSW1hZ2UtZmFpbGVkLWxvYWQtY3Jhc2guaHRtbApJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5j
cHAJKHJldmlzaW9uIDE4OTk4MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDE1IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zNSwxMCArMzUsMjcg
QEAKICNpbmNsdWRlICJNZWRpYVN0cmVhbVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJl
YW1UcmFja0V2ZW50LmgiCiAjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgorI2luY2x1
ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK3N0YXRpYyBVUkxSZWdpc3RyeSogc19yZWdpc3RyeTsKKwordm9pZCBNZWRp
YVN0cmVhbTo6c2V0UmVnaXN0cnkoVVJMUmVnaXN0cnkqIHJlZ2lzdHJ5KQoreworICAgIEFTU0VS
VCghc19yZWdpc3RyeSk7CisgICAgc19yZWdpc3RyeSA9IHJlZ2lzdHJ5OworfQorCitNZWRpYVN0
cmVhbSogTWVkaWFTdHJlYW06Omxvb2tVcChjb25zdCBVUkwmIHVybCkKK3sKKyAgICBpZiAoIXNf
cmVnaXN0cnkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PE1lZGlhU3RyZWFtKj4oc19yZWdpc3RyeS0+bG9va3VwKHVybC5zdHJpbmcoKSkpOworfQor
CiBSZWY8TWVkaWFTdHJlYW0+IE1lZGlhU3RyZWFtOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCkKIHsKICAgICByZXR1cm4gTWVkaWFTdHJlYW06OmNyZWF0ZShjb250ZXh0
LCBNZWRpYVN0cmVhbVByaXZhdGU6OmNyZWF0ZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmgJKHJldmlzaW9uIDE4OTk4MykK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uaAkod29y
a2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
NSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtNTIsNiArNTIsOSBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaWRBZGRPclJlbW92ZVRyYWNrKCkgPSAwOwogICAgIH07CiAKKyAgICBzdGF0aWMgdm9pZCBz
ZXRSZWdpc3RyeShVUkxSZWdpc3RyeSopOworICAgIHN0YXRpYyBNZWRpYVN0cmVhbSogbG9va1Vw
KGNvbnN0IFVSTCYpOworCiAgICAgc3RhdGljIFJlZjxNZWRpYVN0cmVhbT4gY3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmKTsKICAgICBzdGF0aWMgUmVmPE1lZGlhU3RyZWFtPiBjcmVhdGUo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIE1lZGlhU3RyZWFtKik7CiAgICAgc3RhdGljIFJlZjxN
ZWRpYVN0cmVhbT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBWZWN0b3I8
UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+PiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxODk5ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjY3LDEyICsxMjY3
LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpsb2FkUmVzb3VyY2UoY29ucwogCiAgICAgTE9H
KE1lZGlhLCAiSFRNTE1lZGlhRWxlbWVudDo6bG9hZFJlc291cmNlKCVwKSAtIG1fY3VycmVudFNy
YyAtPiAlcyIsIHRoaXMsIHVybEZvckxvZ2dpbmdNZWRpYShtX2N1cnJlbnRTcmMpLnV0ZjgoKS5k
YXRhKCkpOwogCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBpZiAoTWVkaWFTdHJlYW1S
ZWdpc3RyeTo6cmVnaXN0cnkoKS5sb29rdXAodXJsLnN0cmluZygpKSkKLSAgICAgICAgbV9tZWRp
YVNlc3Npb24tPnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6
UmVxdWlyZVVzZXJHZXN0dXJlRm9yUmF0ZUNoYW5nZSk7Ci0jZW5kaWYKLQotICAgIGlmIChtX3Nl
bmRQcm9ncmVzc0V2ZW50cykgCisgICAgaWYgKG1fc2VuZFByb2dyZXNzRXZlbnRzKQogICAgICAg
ICBzdGFydFByb2dyZXNzRXZlbnRUaW1lcigpOwogCiAgICAgYm9vbCBwcml2YXRlTW9kZSA9IGRv
Y3VtZW50KCkucGFnZSgpICYmIGRvY3VtZW50KCkucGFnZSgpLT51c2VzRXBoZW1lcmFsU2Vzc2lv
bigpOwpAQCAtMTI5Miw2ICsxMjg3LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpsb2FkUmVz
b3VyY2UoY29ucwogCiAgICAgdXBkYXRlVm9sdW1lKCk7CiAKKyAgICBib29sIGxvYWRBdHRlbXB0
ZWQgPSBmYWxzZTsKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogICAgIEFTU0VSVCghbV9tZWRp
YVNvdXJjZSk7CiAKQEAgLTEzMDcsMTQgKzEzMDMsMjQgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50
Ojpsb2FkUmVzb3VyY2UoY29ucwogICAgICAgICAgICAgbV9tZWRpYVNvdXJjZSA9IG51bGxwdHI7
CiAgICAgICAgICAgICBtZWRpYUxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6OkZvcm1hdEVycm9y
KTsKICAgICAgICAgfQotICAgIH0gZWxzZQorICAgICAgICBsb2FkQXR0ZW1wdGVkID0gdHJ1ZTsK
KyAgICB9CiAjZW5kaWYKKwogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgICAgIGlmICht
X21lZGlhU3RyZWFtU3JjT2JqZWN0KQotICAgICAgICAgICAgbV9wbGF5ZXItPmxvYWQobV9tZWRp
YVN0cmVhbVNyY09iamVjdC0+cHJpdmF0ZVN0cmVhbSgpKTsKLSAgICAgICAgZWxzZQorICAgIGlm
ICghbG9hZEF0dGVtcHRlZCkgeworICAgICAgICBpZiAoIW1fbWVkaWFTdHJlYW1TcmNPYmplY3Qg
JiYgdXJsLnByb3RvY29sSXMobWVkaWFTdHJlYW1CbG9iUHJvdG9jb2wpKQorICAgICAgICAgICAg
bV9tZWRpYVN0cmVhbVNyY09iamVjdCA9IE1lZGlhU3RyZWFtOjpsb29rVXAodXJsKTsKKworICAg
ICAgICBpZiAobV9tZWRpYVN0cmVhbVNyY09iamVjdCkgeworICAgICAgICAgICAgbG9hZEF0dGVt
cHRlZCA9IHRydWU7CisgICAgICAgICAgICBpZiAoIW1fcGxheWVyLT5sb2FkKG1fbWVkaWFTdHJl
YW1TcmNPYmplY3QtPnByaXZhdGVTdHJlYW0oKSkpCisgICAgICAgICAgICAgICAgbWVkaWFMb2Fk
aW5nRmFpbGVkKE1lZGlhUGxheWVyOjpGb3JtYXRFcnJvcik7CisgICAgICAgIH0KKyAgICB9CiAj
ZW5kaWYKLSAgICBpZiAoIW1fcGxheWVyLT5sb2FkKHVybCwgY29udGVudFR5cGUsIGtleVN5c3Rl
bSkpCisKKyAgICBpZiAoIWxvYWRBdHRlbXB0ZWQgJiYgIW1fcGxheWVyLT5sb2FkKHVybCwgY29u
dGVudFR5cGUsIGtleVN5c3RlbSkpCiAgICAgICAgIG1lZGlhTG9hZGluZ0ZhaWxlZChNZWRpYVBs
YXllcjo6Rm9ybWF0RXJyb3IpOwogCiAgICAgLy8gSWYgdGhlcmUgaXMgbm8gcG9zdGVyIHRvIGRp
c3BsYXksIGFsbG93IHRoZSBtZWRpYSBlbmdpbmUgdG8gcmVuZGVyIHZpZGVvIGZyYW1lcyBhcyBz
b29uIGFzCkBAIC01NjUwLDYgKzU2NTYsMTAgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpjcmVh
dGVNZWRpYVBsYXllcgogICAgICAgICBtX21lZGlhU291cmNlLT5jbG9zZSgpOwogI2VuZGlmCiAK
KyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIG1fbWVkaWFTdHJlYW1TcmNPYmplY3QgPSBu
dWxscHRyOworI2VuZGlmCisKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgZm9yZ2V0UmVz
b3VyY2VTcGVjaWZpY1RyYWNrcygpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCShyZXZpc2lvbiAxODk5ODMpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC02MywxNiArNjMsMTkgQEAKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2lu
Y2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgiCisKICNpZiBVU0UoQVZGT1VOREFUSU9O
KQogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaCIKLSNpZiBF
TkFCTEUoTUVESUFfU09VUkNFKQotI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQy5oIgogI2VuZGlmCisKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKSAmJiBVU0Uo
QVZGT1VOREFUSU9OKQorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQy5oIgogI2VuZGlmCi0jZWxpZiBQTEFURk9STShXSU4pICYmICFVU0UoR1NUUkVBTUVSKQot
I2lmIFVTRShBVkZPVU5EQVRJT04pCisKKyNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKKworI2lm
IFBMQVRGT1JNKFdJTikgJiYgVVNFKEFWRk9VTkRBVElPTikgJiYgIVVTRShHU1RSRUFNRVIpCiAj
aW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuaCIKLSNlbmRpZiAvLyBV
U0UoQVZGT1VOREFUSU9OKQogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE3OCwx
NiArMTgxLDIwIEBAIHN0YXRpYyB2b2lkIGJ1aWxkTWVkaWFFbmdpbmVzVmVjdG9yKCkKIHsKICNp
ZiBVU0UoQVZGT1VOREFUSU9OKQogICAgIGlmIChTZXR0aW5nczo6aXNBVkZvdW5kYXRpb25FbmFi
bGVkKCkpIHsKKwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICAgICBNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOjpyZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlhRW5naW5lKTsK
KyNlbmRpZgorCiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKICAgICAgICAgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpyZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlhRW5n
aW5lKTsKICNlbmRpZgotI2VsaWYgUExBVEZPUk0oV0lOKQorCisjaWYgUExBVEZPUk0oV0lOKQog
ICAgICAgICBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6cmVnaXN0ZXJNZWRpYUVu
Z2luZShhZGRNZWRpYUVuZ2luZSk7CiAjZW5kaWYKICAgICB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBV
U0UoQVZGT1VOREFUSU9OKQogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGlmIChTZXR0aW5nczo6
aXNRVEtpdEVuYWJsZWQoKSkKQEAgLTIzOCw3ICsyNDUsNyBAQCBzdGF0aWMgY29uc3QgQXRvbWlj
U3RyaW5nJiBjb2RlY3MoKQogCiBzdGF0aWMgY29uc3QgTWVkaWFQbGF5ZXJGYWN0b3J5KiBiZXN0
TWVkaWFFbmdpbmVGb3JTdXBwb3J0UGFyYW1ldGVycyhjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQ
YXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBNZWRpYVBsYXllckZhY3RvcnkqIGN1cnJlbnQg
PSBudWxscHRyKQogewotICAgIGlmIChwYXJhbWV0ZXJzLnR5cGUuaXNFbXB0eSgpKQorICAgIGlm
IChwYXJhbWV0ZXJzLnR5cGUuaXNFbXB0eSgpICYmICFwYXJhbWV0ZXJzLmlzTWVkaWFTb3VyY2Ug
JiYgIXBhcmFtZXRlcnMuaXNNZWRpYVN0cmVhbSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICAvLyA0LjguMTAuMyBNSU1FIHR5cGVzIC0gSW4gdGhlIGFic2VuY2Ugb2YgYSBzcGVjaWZp
Y2F0aW9uIHRvIHRoZSBjb250cmFyeSwgdGhlIE1JTUUgdHlwZSAiYXBwbGljYXRpb24vb2N0ZXQt
c3RyZWFtIgpAQCAtMzA3LDYgKzMxNCw4IEBAIE1lZGlhUGxheWVyOjp+TWVkaWFQbGF5ZXIoKQog
CiBib29sIE1lZGlhUGxheWVyOjpsb2FkKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBDb250ZW50VHlw
ZSYgY29udGVudFR5cGUsIGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKQogeworICAgIEFTU0VSVCgh
bV9yZWxvYWRUaW1lci5pc0FjdGl2ZSgpKTsKKwogICAgIG1fY29udGVudE1JTUVUeXBlID0gY29u
dGVudFR5cGUudHlwZSgpLmxvd2VyKCk7CiAgICAgbV9jb250ZW50VHlwZUNvZGVjcyA9IGNvbnRl
bnRUeXBlLnBhcmFtZXRlcihjb2RlY3MoKSk7CiAgICAgbV91cmwgPSB1cmw7CkBAIC0zNDUsNyAr
MzU0LDkgQEAgYm9vbCBNZWRpYVBsYXllcjo6bG9hZChjb25zdCBVUkwmIHVybCwgYwogI2lmIEVO
QUJMRShNRURJQV9TT1VSQ0UpCiBib29sIE1lZGlhUGxheWVyOjpsb2FkKGNvbnN0IFVSTCYgdXJs
LCBjb25zdCBDb250ZW50VHlwZSYgY29udGVudFR5cGUsIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVu
dCogbWVkaWFTb3VyY2UpCiB7CisgICAgQVNTRVJUKCFtX3JlbG9hZFRpbWVyLmlzQWN0aXZlKCkp
OwogICAgIEFTU0VSVChtZWRpYVNvdXJjZSk7CisKICAgICBtX21lZGlhU291cmNlID0gbWVkaWFT
b3VyY2U7CiAgICAgbV9jb250ZW50TUlNRVR5cGUgPSBjb250ZW50VHlwZS50eXBlKCkubG93ZXIo
KTsKICAgICBtX2NvbnRlbnRUeXBlQ29kZWNzID0gY29udGVudFR5cGUucGFyYW1ldGVyKGNvZGVj
cygpKTsKQEAgLTM2MCw3ICszNzEsOSBAQCBib29sIE1lZGlhUGxheWVyOjpsb2FkKGNvbnN0IFVS
TCYgdXJsLCBjCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIGJvb2wgTWVkaWFQbGF5ZXI6Omxv
YWQoTWVkaWFTdHJlYW1Qcml2YXRlKiBtZWRpYVN0cmVhbSkKIHsKKyAgICBBU1NFUlQoIW1fcmVs
b2FkVGltZXIuaXNBY3RpdmUoKSk7CiAgICAgQVNTRVJUKG1lZGlhU3RyZWFtKTsKKwogICAgIG1f
bWVkaWFTdHJlYW0gPSBtZWRpYVN0cmVhbTsKICAgICBtX2tleVN5c3RlbSA9ICIiOwogICAgIG1f
Y29udGVudE1JTUVUeXBlID0gIiI7CkBAIC0zOTEsOSArNDA0LDIxIEBAIGNvbnN0IE1lZGlhUGxh
eWVyRmFjdG9yeSogTWVkaWFQbGF5ZXI6Om4KIAogdm9pZCBNZWRpYVBsYXllcjo6bG9hZFdpdGhO
ZXh0TWVkaWFFbmdpbmUoY29uc3QgTWVkaWFQbGF5ZXJGYWN0b3J5KiBjdXJyZW50KQogeworI2lm
IEVOQUJMRShNRURJQV9TT1VSQ0UpIAorI2RlZmluZSBNRURJQVNPVVJDRSBtX21lZGlhU291cmNl
CisjZWxzZQorI2RlZmluZSBNRURJQVNPVVJDRSBudWxscHRyCisjZW5kaWYKKworI2lmIEVOQUJM
RShNRURJQV9TVFJFQU0pCisjZGVmaW5lIE1FRElBU1RSRUFNIG1fbWVkaWFTdHJlYW0KKyNlbHNl
CisjZGVmaW5lIE1FRElBU1RSRUFNIG51bGxwdHIKKyNlbmRpZgorCiAgICAgY29uc3QgTWVkaWFQ
bGF5ZXJGYWN0b3J5KiBlbmdpbmUgPSBudWxscHRyOwogCi0gICAgaWYgKCFtX2NvbnRlbnRNSU1F
VHlwZS5pc0VtcHR5KCkpCisgICAgaWYgKCFtX2NvbnRlbnRNSU1FVHlwZS5pc0VtcHR5KCkgfHwg
TUVESUFTVFJFQU0gfHwgTUVESUFTT1VSQ0UpCiAgICAgICAgIGVuZ2luZSA9IG5leHRCZXN0TWVk
aWFFbmdpbmUoY3VycmVudCk7CiAKICAgICAvLyBJZiBubyBNSU1FIHR5cGUgaXMgc3BlY2lmaWVk
IG9yIHRoZSB0eXBlIHdhcyBpbmZlcnJlZCBmcm9tIHRoZSBmaWxlIGV4dGVuc2lvbiwganVzdCB1
c2UgdGhlIG5leHQgZW5naW5lLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvTWVkaWFQbGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5oCShyZXZpc2lvbiAxODk5ODMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMs
MjggKzEwMywxNSBAQCBzdHJ1Y3QgUGxhdGZvcm1NZWRpYSB7CiB9OwogCiBzdHJ1Y3QgTWVkaWFF
bmdpbmVTdXBwb3J0UGFyYW1ldGVycyB7CisKKyAgICBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0
ZXJzKCkgeyB9CisKICAgICBTdHJpbmcgdHlwZTsKICAgICBTdHJpbmcgY29kZWNzOwogICAgIFVS
TCB1cmw7Ci0jaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKICAgICBTdHJpbmcga2V5U3lzdGVt
OwotI2VuZGlmCi0jaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLSAgICBib29sIGlzTWVkaWFTb3Vy
Y2U7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAgIGJvb2wgaXNNZWRpYVN0
cmVhbTsKLSNlbmRpZgotCi0gICAgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycygpCi0jaWYg
RU5BQkxFKE1FRElBX1NPVVJDRSkKLSAgICAgICAgOiBpc01lZGlhU291cmNlKGZhbHNlKQotI2Vu
ZGlmCi0gICAgewotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgICAgIGlzTWVkaWFTdHJl
YW0gPSBmYWxzZTsKLSNlbmRpZgotICAgIH0KKyAgICBib29sIGlzTWVkaWFTb3VyY2UgeyBmYWxz
ZSB9OworICAgIGJvb2wgaXNNZWRpYVN0cmVhbSB7IGZhbHNlIH07CiB9OwogCiBleHRlcm4gY29u
c3QgUGxhdGZvcm1NZWRpYSBOb1BsYXRmb3JtTWVkaWE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDLm1tCShyZXZpc2lvbiAxODk5ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0MCw3ICsyNDAsOCBAQCBNZWRpYVBsYXllcjo6
U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpCiAgICAgaWYgKHBhcmFtZXRlcnMuaXNNZWRpYVN0
cmVhbSkKICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKICNlbmRp
ZgotICAgIGlmICghbWltZVR5cGVDYWNoZSgpLmNvbnRhaW5zKHBhcmFtZXRlcnMudHlwZSkpCisK
KyAgICBpZiAocGFyYW1ldGVycy50eXBlLmlzRW1wdHkoKSB8fCAhbWltZVR5cGVDYWNoZSgpLmNv
bnRhaW5zKHBhcmFtZXRlcnMudHlwZSkpCiAgICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNO
b3RTdXBwb3J0ZWQ7CiAKICAgICAvLyBUaGUgc3BlYyBzYXlzOgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJj
ZS9Nb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5jcHAJKHJldmlzaW9uIDE4OTk4MykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhUGxheWVyTWVk
aWFTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY5LDcgKzY5LDcgQEAgTWVkaWFQbGF5ZXI6OlN1
cHBvcnRzVHlwZSBNb2NrTWVkaWFQbGF5ZQogICAgIGlmICghcGFyYW1ldGVycy5pc01lZGlhU291
cmNlKQogICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOwogCi0gICAg
aWYgKCFtaW1lVHlwZUNhY2hlKCkuY29udGFpbnMocGFyYW1ldGVycy50eXBlKSkKKyAgICBpZiAo
cGFyYW1ldGVycy50eXBlLmlzRW1wdHkoKSB8fCAhbWltZVR5cGVDYWNoZSgpLmNvbnRhaW5zKHBh
cmFtZXRlcnMudHlwZSkpCiAgICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0
ZWQ7CiAKICAgICBpZiAocGFyYW1ldGVycy5jb2RlY3MuaXNFbXB0eSgpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261589</attachid>
            <date>2015-09-19 16:24:35 -0700</date>
            <delta_ts>2015-09-19 16:24:35 -0700</delta_ts>
            <desc>APFTB</desc>
            <filename>engine_cleanup_patch_4.txt</filename>
            <type>text/plain</type>
            <size>13314</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MDAxNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE1LTA5LTE5ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIENsZWFudXAgY29kZSB0
aGF0IGZpbmRzIGFuZCBsb2FkcyBhIG1lZGlhIGVuZ2luZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MzcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBmdW5jdGlvbmFsIGNoYW5n
ZS4KKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OnNldFJlZ2lzdHJ5KTogTmV3LCBzZXQgdGhlIHJl
Z2lzdHJ5LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06Omxvb2t1cCk6IE5ldywgbG9v
a3VwIGEgdXJsIGluIHRoZSByZWdpc3RyeS4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtLmg6CisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bG9hZFJlc291cmNlKTogUmVzdHJ1
Y3R1cmUgYW5kIHNpbXBsaWZ5IHRoZSBjb2RlIHRoYXQgdHJpZXMgdGhlIAorICAgICAgICAgIGRp
ZmZlcmVudCB0eXBlcyBvZiBtZWRpYSBlbmdpbmUgc28gdGhlIGNvZGUgaXMgZWFzaWVyIHRvIHVu
ZGVyc3RhbmQgYW5kIG1vZGlmeS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
OmNyZWF0ZU1lZGlhUGxheWVyKTogQ2xlYXIgbV9tZWRpYVN0cmVhbVNyY09iamVjdC4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmJ1aWxkTWVkaWFFbmdpbmVzVmVjdG9yKTogQWRkIHNvbWUgd2hpdGVzcGFjZSB0byBtYWtl
IGl0IGVhc2llciB0byByZWFkLgorICAgICAgICAoV2ViQ29yZTo6YmVzdE1lZGlhRW5naW5lRm9y
U3VwcG9ydFBhcmFtZXRlcnMpOiBBbHNvIHByb2Nlc3MgbWVkaWFzdHJlYW0gYW5kIG1lZGlhc291
cmNlIHVybHMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6bG9hZCk6IEFTU0VSVCBp
ZiBjYWxsZWQgd2hlbiB0aGUgcmVsb2FkIHRpbWVyIGlzIGFjdGl2ZS4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyOjpsb2FkV2l0aE5leHRNZWRpYUVuZ2luZSk6IEFsc28gcHJvY2VzcyBt
ZWRpYXN0cmVhbSBhbmQgbWVkaWFzb3VyY2UgdXJscy4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQzo6c3VwcG9ydHNUeXBlKTogRG9uJ3QgdGVzdCBlbXB0eS9udWxsIHVybHMuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVBsYXllck1lZGlhU291
cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpz
dXBwb3J0c1R5cGUpOiBEaXR0by4KKwogMjAxNS0wOS0xOCAgRGVhbiBKYWNrc29uICA8ZGlub0Bh
cHBsZS5jb20+CiAKICAgICAgICAgTnVsbCBkZXJlZmVyZW5jZSBsb2FkaW5nIEJsaW5rIGxheW91
dCB0ZXN0IHN2Zy9maWx0ZXJzL2ZlSW1hZ2UtZmFpbGVkLWxvYWQtY3Jhc2guaHRtbApJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5j
cHAJKHJldmlzaW9uIDE4OTk4MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDE1IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zNSwxMCArMzUsMjcg
QEAKICNpbmNsdWRlICJNZWRpYVN0cmVhbVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJl
YW1UcmFja0V2ZW50LmgiCiAjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgorI2luY2x1
ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK3N0YXRpYyBVUkxSZWdpc3RyeSogc19yZWdpc3RyeTsKKwordm9pZCBNZWRp
YVN0cmVhbTo6c2V0UmVnaXN0cnkoVVJMUmVnaXN0cnkmIHJlZ2lzdHJ5KQoreworICAgIEFTU0VS
VCghc19yZWdpc3RyeSk7CisgICAgc19yZWdpc3RyeSA9ICZyZWdpc3RyeTsKK30KKworTWVkaWFT
dHJlYW0qIE1lZGlhU3RyZWFtOjpsb29rVXAoY29uc3QgVVJMJiB1cmwpCit7CisgICAgaWYgKCFz
X3JlZ2lzdHJ5KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxNZWRpYVN0cmVhbSo+KHNfcmVnaXN0cnktPmxvb2t1cCh1cmwuc3RyaW5nKCkpKTsKK30K
KwogUmVmPE1lZGlhU3RyZWFtPiBNZWRpYVN0cmVhbTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQpCiB7CiAgICAgcmV0dXJuIE1lZGlhU3RyZWFtOjpjcmVhdGUoY29udGV4
dCwgTWVkaWFTdHJlYW1Qcml2YXRlOjpjcmVhdGUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5oCShyZXZpc2lvbiAxODk5ODMp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIw
MTUgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKQEAgLTUyLDYgKzUyLDkgQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkQWRkT3JSZW1vdmVUcmFjaygpID0gMDsKICAgICB9OwogCisgICAgc3RhdGljIHZvaWQg
c2V0UmVnaXN0cnkoVVJMUmVnaXN0cnkmKTsKKyAgICBzdGF0aWMgTWVkaWFTdHJlYW0qIGxvb2tV
cChjb25zdCBVUkwmKTsKKwogICAgIHN0YXRpYyBSZWY8TWVkaWFTdHJlYW0+IGNyZWF0ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0Jik7CiAgICAgc3RhdGljIFJlZjxNZWRpYVN0cmVhbT4gY3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBNZWRpYVN0cmVhbSopOwogICAgIHN0YXRpYyBSZWY8
TWVkaWFTdHJlYW0+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgVmVjdG9y
PFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPj4mKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gMTg5OTgzKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2NywxMiArMTI2
Nyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZFJlc291cmNlKGNvbnMKIAogICAgIExP
RyhNZWRpYSwgIkhUTUxNZWRpYUVsZW1lbnQ6OmxvYWRSZXNvdXJjZSglcCkgLSBtX2N1cnJlbnRT
cmMgLT4gJXMiLCB0aGlzLCB1cmxGb3JMb2dnaW5nTWVkaWEobV9jdXJyZW50U3JjKS51dGY4KCku
ZGF0YSgpKTsKIAotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgaWYgKE1lZGlhU3RyZWFt
UmVnaXN0cnk6OnJlZ2lzdHJ5KCkubG9va3VwKHVybC5zdHJpbmcoKSkpCi0gICAgICAgIG1fbWVk
aWFTZXNzaW9uLT5yZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246
OlJlcXVpcmVVc2VyR2VzdHVyZUZvclJhdGVDaGFuZ2UpOwotI2VuZGlmCi0KLSAgICBpZiAobV9z
ZW5kUHJvZ3Jlc3NFdmVudHMpIAorICAgIGlmIChtX3NlbmRQcm9ncmVzc0V2ZW50cykKICAgICAg
ICAgc3RhcnRQcm9ncmVzc0V2ZW50VGltZXIoKTsKIAogICAgIGJvb2wgcHJpdmF0ZU1vZGUgPSBk
b2N1bWVudCgpLnBhZ2UoKSAmJiBkb2N1bWVudCgpLnBhZ2UoKS0+dXNlc0VwaGVtZXJhbFNlc3Np
b24oKTsKQEAgLTEyOTIsNiArMTI4Nyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZFJl
c291cmNlKGNvbnMKIAogICAgIHVwZGF0ZVZvbHVtZSgpOwogCisgICAgYm9vbCBsb2FkQXR0ZW1w
dGVkID0gZmFsc2U7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKICAgICBBU1NFUlQoIW1fbWVk
aWFTb3VyY2UpOwogCkBAIC0xMzA3LDE0ICsxMzAzLDI0IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6bG9hZFJlc291cmNlKGNvbnMKICAgICAgICAgICAgIG1fbWVkaWFTb3VyY2UgPSBudWxscHRy
OwogICAgICAgICAgICAgbWVkaWFMb2FkaW5nRmFpbGVkKE1lZGlhUGxheWVyOjpGb3JtYXRFcnJv
cik7CiAgICAgICAgIH0KLSAgICB9IGVsc2UKKyAgICAgICAgbG9hZEF0dGVtcHRlZCA9IHRydWU7
CisgICAgfQogI2VuZGlmCisKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAgICAgICBpZiAo
bV9tZWRpYVN0cmVhbVNyY09iamVjdCkKLSAgICAgICAgICAgIG1fcGxheWVyLT5sb2FkKG1fbWVk
aWFTdHJlYW1TcmNPYmplY3QtPnByaXZhdGVTdHJlYW0oKSk7Ci0gICAgICAgIGVsc2UKKyAgICBp
ZiAoIWxvYWRBdHRlbXB0ZWQpIHsKKyAgICAgICAgaWYgKCFtX21lZGlhU3RyZWFtU3JjT2JqZWN0
ICYmIHVybC5wcm90b2NvbElzKG1lZGlhU3RyZWFtQmxvYlByb3RvY29sKSkKKyAgICAgICAgICAg
IG1fbWVkaWFTdHJlYW1TcmNPYmplY3QgPSBNZWRpYVN0cmVhbTo6bG9va1VwKHVybCk7CisKKyAg
ICAgICAgaWYgKG1fbWVkaWFTdHJlYW1TcmNPYmplY3QpIHsKKyAgICAgICAgICAgIGxvYWRBdHRl
bXB0ZWQgPSB0cnVlOworICAgICAgICAgICAgaWYgKCFtX3BsYXllci0+bG9hZChtX21lZGlhU3Ry
ZWFtU3JjT2JqZWN0LT5wcml2YXRlU3RyZWFtKCkpKQorICAgICAgICAgICAgICAgIG1lZGlhTG9h
ZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3IpOworICAgICAgICB9CisgICAgfQog
I2VuZGlmCi0gICAgaWYgKCFtX3BsYXllci0+bG9hZCh1cmwsIGNvbnRlbnRUeXBlLCBrZXlTeXN0
ZW0pKQorCisgICAgaWYgKCFsb2FkQXR0ZW1wdGVkICYmICFtX3BsYXllci0+bG9hZCh1cmwsIGNv
bnRlbnRUeXBlLCBrZXlTeXN0ZW0pKQogICAgICAgICBtZWRpYUxvYWRpbmdGYWlsZWQoTWVkaWFQ
bGF5ZXI6OkZvcm1hdEVycm9yKTsKIAogICAgIC8vIElmIHRoZXJlIGlzIG5vIHBvc3RlciB0byBk
aXNwbGF5LCBhbGxvdyB0aGUgbWVkaWEgZW5naW5lIHRvIHJlbmRlciB2aWRlbyBmcmFtZXMgYXMg
c29vbiBhcwpAQCAtNTY1MCw2ICs1NjU2LDEwIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y3Jl
YXRlTWVkaWFQbGF5ZXIKICAgICAgICAgbV9tZWRpYVNvdXJjZS0+Y2xvc2UoKTsKICNlbmRpZgog
CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBtX21lZGlhU3RyZWFtU3JjT2JqZWN0ID0g
bnVsbHB0cjsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGZvcmdldFJl
c291cmNlU3BlY2lmaWNUcmFja3MoKTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAkocmV2aXNpb24gMTg5OTgzKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0y
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjMsMTYgKzYzLDE5IEBACiAKICNpZiBQTEFURk9STShDT0NPQSkKICNp
bmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVRVEtpdC5oIgorCiAjaWYgVVNFKEFWRk9VTkRBVElP
TikKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgiCi0jaWYg
RU5BQkxFKE1FRElBX1NPVVJDRSkKLSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVNZWRpYVNv
dXJjZUFWRk9iakMuaCIKICNlbmRpZgorCisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgVVNF
KEFWRk9VTkRBVElPTikKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakMuaCIKICNlbmRpZgotI2VsaWYgUExBVEZPUk0oV0lOKSAmJiAhVVNFKEdTVFJFQU1FUikK
LSNpZiBVU0UoQVZGT1VOREFUSU9OKQorCisjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCisKKyNp
ZiBQTEFURk9STShXSU4pICYmIFVTRShBVkZPVU5EQVRJT04pICYmICFVU0UoR1NUUkVBTUVSKQog
I2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmgiCi0jZW5kaWYgLy8g
VVNFKEFWRk9VTkRBVElPTikKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNzgs
MTYgKzE4MSwyMCBAQCBzdGF0aWMgdm9pZCBidWlsZE1lZGlhRW5naW5lc1ZlY3RvcigpCiB7CiAj
aWYgVVNFKEFWRk9VTkRBVElPTikKICAgICBpZiAoU2V0dGluZ3M6OmlzQVZGb3VuZGF0aW9uRW5h
YmxlZCgpKSB7CisKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzo6cmVnaXN0ZXJNZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7
CisjZW5kaWYKKwogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiAgICAgICAgIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6cmVnaXN0ZXJNZWRpYUVuZ2luZShhZGRNZWRpYUVu
Z2luZSk7CiAjZW5kaWYKLSNlbGlmIFBMQVRGT1JNKFdJTikKKworI2lmIFBMQVRGT1JNKFdJTikK
ICAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6OnJlZ2lzdGVyTWVkaWFF
bmdpbmUoYWRkTWVkaWFFbmdpbmUpOwogI2VuZGlmCiAgICAgfQotI2VuZGlmCisjZW5kaWYgLy8g
VVNFKEFWRk9VTkRBVElPTikKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAoU2V0dGluZ3M6
OmlzUVRLaXRFbmFibGVkKCkpCkBAIC0yMzgsNyArMjQ1LDcgQEAgc3RhdGljIGNvbnN0IEF0b21p
Y1N0cmluZyYgY29kZWNzKCkKIAogc3RhdGljIGNvbnN0IE1lZGlhUGxheWVyRmFjdG9yeSogYmVz
dE1lZGlhRW5naW5lRm9yU3VwcG9ydFBhcmFtZXRlcnMoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0
UGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgTWVkaWFQbGF5ZXJGYWN0b3J5KiBjdXJyZW50
ID0gbnVsbHB0cikKIHsKLSAgICBpZiAocGFyYW1ldGVycy50eXBlLmlzRW1wdHkoKSkKKyAgICBp
ZiAocGFyYW1ldGVycy50eXBlLmlzRW1wdHkoKSAmJiAhcGFyYW1ldGVycy5pc01lZGlhU291cmNl
ICYmICFwYXJhbWV0ZXJzLmlzTWVkaWFTdHJlYW0pCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
CiAgICAgLy8gNC44LjEwLjMgTUlNRSB0eXBlcyAtIEluIHRoZSBhYnNlbmNlIG9mIGEgc3BlY2lm
aWNhdGlvbiB0byB0aGUgY29udHJhcnksIHRoZSBNSU1FIHR5cGUgImFwcGxpY2F0aW9uL29jdGV0
LXN0cmVhbSIKQEAgLTMwNyw2ICszMTQsOCBAQCBNZWRpYVBsYXllcjo6fk1lZGlhUGxheWVyKCkK
IAogYm9vbCBNZWRpYVBsYXllcjo6bG9hZChjb25zdCBVUkwmIHVybCwgY29uc3QgQ29udGVudFR5
cGUmIGNvbnRlbnRUeXBlLCBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSkKIHsKKyAgICBBU1NFUlQo
IW1fcmVsb2FkVGltZXIuaXNBY3RpdmUoKSk7CisKICAgICBtX2NvbnRlbnRNSU1FVHlwZSA9IGNv
bnRlbnRUeXBlLnR5cGUoKS5sb3dlcigpOwogICAgIG1fY29udGVudFR5cGVDb2RlY3MgPSBjb250
ZW50VHlwZS5wYXJhbWV0ZXIoY29kZWNzKCkpOwogICAgIG1fdXJsID0gdXJsOwpAQCAtMzQ1LDcg
KzM1NCw5IEBAIGJvb2wgTWVkaWFQbGF5ZXI6OmxvYWQoY29uc3QgVVJMJiB1cmwsIGMKICNpZiBF
TkFCTEUoTUVESUFfU09VUkNFKQogYm9vbCBNZWRpYVBsYXllcjo6bG9hZChjb25zdCBVUkwmIHVy
bCwgY29uc3QgQ29udGVudFR5cGUmIGNvbnRlbnRUeXBlLCBNZWRpYVNvdXJjZVByaXZhdGVDbGll
bnQqIG1lZGlhU291cmNlKQogeworICAgIEFTU0VSVCghbV9yZWxvYWRUaW1lci5pc0FjdGl2ZSgp
KTsKICAgICBBU1NFUlQobWVkaWFTb3VyY2UpOworCiAgICAgbV9tZWRpYVNvdXJjZSA9IG1lZGlh
U291cmNlOwogICAgIG1fY29udGVudE1JTUVUeXBlID0gY29udGVudFR5cGUudHlwZSgpLmxvd2Vy
KCk7CiAgICAgbV9jb250ZW50VHlwZUNvZGVjcyA9IGNvbnRlbnRUeXBlLnBhcmFtZXRlcihjb2Rl
Y3MoKSk7CkBAIC0zNjAsNyArMzcxLDkgQEAgYm9vbCBNZWRpYVBsYXllcjo6bG9hZChjb25zdCBV
UkwmIHVybCwgYwogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiBib29sIE1lZGlhUGxheWVyOjps
b2FkKE1lZGlhU3RyZWFtUHJpdmF0ZSogbWVkaWFTdHJlYW0pCiB7CisgICAgQVNTRVJUKCFtX3Jl
bG9hZFRpbWVyLmlzQWN0aXZlKCkpOwogICAgIEFTU0VSVChtZWRpYVN0cmVhbSk7CisKICAgICBt
X21lZGlhU3RyZWFtID0gbWVkaWFTdHJlYW07CiAgICAgbV9rZXlTeXN0ZW0gPSAiIjsKICAgICBt
X2NvbnRlbnRNSU1FVHlwZSA9ICIiOwpAQCAtMzkxLDkgKzQwNCwyMSBAQCBjb25zdCBNZWRpYVBs
YXllckZhY3RvcnkqIE1lZGlhUGxheWVyOjpuCiAKIHZvaWQgTWVkaWFQbGF5ZXI6OmxvYWRXaXRo
TmV4dE1lZGlhRW5naW5lKGNvbnN0IE1lZGlhUGxheWVyRmFjdG9yeSogY3VycmVudCkKIHsKKyNp
ZiBFTkFCTEUoTUVESUFfU09VUkNFKSAKKyNkZWZpbmUgTUVESUFTT1VSQ0UgbV9tZWRpYVNvdXJj
ZQorI2Vsc2UKKyNkZWZpbmUgTUVESUFTT1VSQ0UgMAorI2VuZGlmCisKKyNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQorI2RlZmluZSBNRURJQVNUUkVBTSBtX21lZGlhU3RyZWFtCisjZWxzZQorI2Rl
ZmluZSBNRURJQVNUUkVBTSAwCisjZW5kaWYKKwogICAgIGNvbnN0IE1lZGlhUGxheWVyRmFjdG9y
eSogZW5naW5lID0gbnVsbHB0cjsKIAotICAgIGlmICghbV9jb250ZW50TUlNRVR5cGUuaXNFbXB0
eSgpKQorICAgIGlmICghbV9jb250ZW50TUlNRVR5cGUuaXNFbXB0eSgpIHx8IE1FRElBU1RSRUFN
IHx8IE1FRElBU09VUkNFKQogICAgICAgICBlbmdpbmUgPSBuZXh0QmVzdE1lZGlhRW5naW5lKGN1
cnJlbnQpOwogCiAgICAgLy8gSWYgbm8gTUlNRSB0eXBlIGlzIHNwZWNpZmllZCBvciB0aGUgdHlw
ZSB3YXMgaW5mZXJyZWQgZnJvbSB0aGUgZmlsZSBleHRlbnNpb24sIGp1c3QgdXNlIHRoZSBuZXh0
IGVuZ2luZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXIuaAkocmV2aXNpb24gMTg5OTgzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDI4ICsxMDMsMTUg
QEAgc3RydWN0IFBsYXRmb3JtTWVkaWEgewogfTsKIAogc3RydWN0IE1lZGlhRW5naW5lU3VwcG9y
dFBhcmFtZXRlcnMgeworCisgICAgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycygpIHsgfQor
CiAgICAgU3RyaW5nIHR5cGU7CiAgICAgU3RyaW5nIGNvZGVjczsKICAgICBVUkwgdXJsOwotI2lm
IEVOQUJMRShFTkNSWVBURURfTUVESUEpCiAgICAgU3RyaW5nIGtleVN5c3RlbTsKLSNlbmRpZgot
I2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCi0gICAgYm9vbCBpc01lZGlhU291cmNlOwotI2VuZGlm
Ci0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBib29sIGlzTWVkaWFTdHJlYW07Ci0jZW5k
aWYKLQotICAgIE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMoKQotI2lmIEVOQUJMRShNRURJ
QV9TT1VSQ0UpCi0gICAgICAgIDogaXNNZWRpYVNvdXJjZShmYWxzZSkKLSNlbmRpZgotICAgIHsK
LSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAgICAgICBpc01lZGlhU3RyZWFtID0gZmFsc2U7
Ci0jZW5kaWYKLSAgICB9CisgICAgYm9vbCBpc01lZGlhU291cmNlIHsgZmFsc2UgfTsKKyAgICBi
b29sIGlzTWVkaWFTdHJlYW0geyBmYWxzZSB9OwogfTsKIAogZXh0ZXJuIGNvbnN0IFBsYXRmb3Jt
TWVkaWEgTm9QbGF0Zm9ybU1lZGlhOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbQko
cmV2aXNpb24gMTg5OTgzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDAsNyArMjQwLDggQEAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlw
ZSBNZWRpYVBsYXllclByaQogICAgIGlmIChwYXJhbWV0ZXJzLmlzTWVkaWFTdHJlYW0pCiAgICAg
ICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CiAjZW5kaWYKLSAgICBpZiAo
IW1pbWVUeXBlQ2FjaGUoKS5jb250YWlucyhwYXJhbWV0ZXJzLnR5cGUpKQorCisgICAgaWYgKHBh
cmFtZXRlcnMudHlwZS5pc0VtcHR5KCkgfHwgIW1pbWVUeXBlQ2FjaGUoKS5jb250YWlucyhwYXJh
bWV0ZXJzLnR5cGUpKQogICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVk
OwogCiAgICAgLy8gVGhlIHNwZWMgc2F5czoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlh
UGxheWVyTWVkaWFTb3VyY2UuY3BwCShyZXZpc2lvbiAxODk5ODMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVBsYXllck1lZGlhU291cmNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02OSw3ICs2OSw3IEBAIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUg
TW9ja01lZGlhUGxheWUKICAgICBpZiAoIXBhcmFtZXRlcnMuaXNNZWRpYVNvdXJjZSkKICAgICAg
ICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKIAotICAgIGlmICghbWltZVR5
cGVDYWNoZSgpLmNvbnRhaW5zKHBhcmFtZXRlcnMudHlwZSkpCisgICAgaWYgKHBhcmFtZXRlcnMu
dHlwZS5pc0VtcHR5KCkgfHwgIW1pbWVUeXBlQ2FjaGUoKS5jb250YWlucyhwYXJhbWV0ZXJzLnR5
cGUpKQogICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOwogCiAgICAg
aWYgKHBhcmFtZXRlcnMuY29kZWNzLmlzRW1wdHkoKSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>