<?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>174811</bug_id>
          
          <creation_ts>2017-07-24 21:01:00 -0700</creation_ts>
          <short_desc>GC should be fine with trading blocks between destructor and non-destructor blocks</short_desc>
          <delta_ts>2017-07-25 18:20:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>174727</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>buildbot</cc>
    
    <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1331864</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-24 21:01:00 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331865</commentid>
    <comment_count>1</comment_count>
      <attachid>316350</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-24 21:09:05 -0700</bug_when>
    <thetext>Created attachment 316350
might be done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331875</commentid>
    <comment_count>2</comment_count>
      <attachid>316351</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-24 21:48:11 -0700</bug_when>
    <thetext>Created attachment 316351
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331876</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-07-24 21:51:37 -0700</bug_when>
    <thetext>Attachment 316351 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:28:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 5 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>1331877</commentid>
    <comment_count>4</comment_count>
      <attachid>316351</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-24 21:53:25 -0700</bug_when>
    <thetext>Comment on attachment 316351
the patch

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

&gt; Source/JavaScriptCore/heap/MarkedBlock.cpp:46
&gt; +
&gt; +#include &lt;wtf/Assertions.h&gt;
&gt; +
&gt; +namespace {
&gt; +
&gt; +NO_RETURN_DUE_TO_CRASH NEVER_INLINE void crash()
&gt; +{
&gt; +    CRASH();
&gt; +}
&gt; +
&gt; +#undef RELEASE_ASSERT
&gt; +#define RELEASE_ASSERT(assertion) do { \
&gt; +    if (!(assertion)) { \
&gt; +        WTFReportAssertionFailure(__FILE__, __LINE__, WTF_PRETTY_FUNCTION, #assertion); \
&gt; +        crash(); \
&gt; +    } \
&gt; +} while (0)
&gt; +
&gt; +} // anonymous namespace
&gt; +

I&apos;ll remove this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331952</commentid>
    <comment_count>5</comment_count>
      <attachid>316351</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-07-25 09:44:34 -0700</bug_when>
    <thetext>Comment on attachment 316351
the patch

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

r=me

&gt; Source/JavaScriptCore/heap/MarkedBlockInlines.h:330
&gt; +                    specializedSweep&lt;true, NotEmpty, SweepOnly, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksNotStale&gt;(freeList, IsEmpty, SweepOnly, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksNotStale, destroyFunc);
&gt; +                    return true;
&gt; +                case MarksStale:
&gt; +                    specializedSweep&lt;true, NotEmpty, SweepOnly, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksStale&gt;(freeList, IsEmpty, SweepOnly, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksStale, destroyFunc);
&gt; +                    return true;
&gt; +                }
&gt; +            case SweepToFreeList:
&gt; +                switch (marksMode) {
&gt; +                case MarksNotStale:
&gt; +                    specializedSweep&lt;true, NotEmpty, SweepToFreeList, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksNotStale&gt;(freeList, IsEmpty, SweepToFreeList, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksNotStale, destroyFunc);
&gt; +                    return true;
&gt; +                case MarksStale:
&gt; +                    specializedSweep&lt;true, NotEmpty, SweepToFreeList, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksStale&gt;(freeList, IsEmpty, SweepToFreeList, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksStale, destroyFunc);

Behavior-wise, it doesn&apos;t matter that you pass &quot;IsEmpty&quot; for the emptyMode (2nd argument) because it will get overridden to NotEmpty in specializedSweep() because the specialize flag is true.  However, for consistency, I think we should pass NotEmpty given that we know that the block&apos;s emptyMode is NotEmpty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332205</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-25 18:15:44 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #5)
&gt; Comment on attachment 316351 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=316351&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/MarkedBlockInlines.h:330
&gt; &gt; +                    specializedSweep&lt;true, NotEmpty, SweepOnly, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksNotStale&gt;(freeList, IsEmpty, SweepOnly, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksNotStale, destroyFunc);
&gt; &gt; +                    return true;
&gt; &gt; +                case MarksStale:
&gt; &gt; +                    specializedSweep&lt;true, NotEmpty, SweepOnly, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksStale&gt;(freeList, IsEmpty, SweepOnly, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksStale, destroyFunc);
&gt; &gt; +                    return true;
&gt; &gt; +                }
&gt; &gt; +            case SweepToFreeList:
&gt; &gt; +                switch (marksMode) {
&gt; &gt; +                case MarksNotStale:
&gt; &gt; +                    specializedSweep&lt;true, NotEmpty, SweepToFreeList, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksNotStale&gt;(freeList, IsEmpty, SweepToFreeList, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksNotStale, destroyFunc);
&gt; &gt; +                    return true;
&gt; &gt; +                case MarksStale:
&gt; &gt; +                    specializedSweep&lt;true, NotEmpty, SweepToFreeList, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksStale&gt;(freeList, IsEmpty, SweepToFreeList, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksStale, destroyFunc);
&gt; 
&gt; Behavior-wise, it doesn&apos;t matter that you pass &quot;IsEmpty&quot; for the emptyMode
&gt; (2nd argument) because it will get overridden to NotEmpty in
&gt; specializedSweep() because the specialize flag is true.  However, for
&gt; consistency, I think we should pass NotEmpty given that we know that the
&gt; block&apos;s emptyMode is NotEmpty.

Fixed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332208</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-25 18:20:47 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/219897/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316350</attachid>
            <date>2017-07-24 21:09:05 -0700</date>
            <delta_ts>2017-07-24 21:48:11 -0700</delta_ts>
            <desc>might be done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>16945</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNw
cAkocmV2aXNpb24gMjE5Nzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTcgKzY3LDggQEAgYm9vbCBNYXJr
ZWRBbGxvY2F0b3I6OmlzUGFnZWRPdXQoZG91YmxlIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
Ym9vbCBNYXJrZWRBbGxvY2F0b3I6OnNob3VsZFN0ZWFsRW1wdHlCbG9ja3NGcm9tT3RoZXJBbGxv
Y2F0b3JzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIW5lZWRzRGVzdHJ1Y3Rpb24oKTsKLX0KLQog
TWFya2VkQmxvY2s6OkhhbmRsZSogTWFya2VkQWxsb2NhdG9yOjpmaW5kRW1wdHlCbG9ja1RvU3Rl
YWwoKQogewotICAgIC8vIERvbid0IGFsbG93IG90aGVycyB0byBzdGVhbCBmcm9tIHVzLCBpZiB3
ZSB3b3VsZG4ndCBzdGVhbCBmcm9tIG90aGVycy4KLSAgICBpZiAoIXNob3VsZFN0ZWFsRW1wdHlC
bG9ja3NGcm9tT3RoZXJBbGxvY2F0b3JzKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IAogICAgIG1fZW1wdHlDdXJzb3IgPSBtX2VtcHR5LmZpbmRCaXQobV9lbXB0eUN1cnNvciwgdHJ1
ZSk7CiAgICAgaWYgKG1fZW1wdHlDdXJzb3IgPj0gbV9ibG9ja3Muc2l6ZSgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTExMSw4ICsxMDIsNyBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6
OnRyeUFsbG9jYXRlV2l0aG91CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAg
ICAKLSAgICBpZiAoT3B0aW9uczo6c3RlYWxFbXB0eUJsb2Nrc0Zyb21PdGhlckFsbG9jYXRvcnMo
KQotICAgICAgICAmJiBzaG91bGRTdGVhbEVtcHR5QmxvY2tzRnJvbU90aGVyQWxsb2NhdG9ycygp
KSB7CisgICAgaWYgKE9wdGlvbnM6OnN0ZWFsRW1wdHlCbG9ja3NGcm9tT3RoZXJBbGxvY2F0b3Jz
KCkpIHsKICAgICAgICAgaWYgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbWFya2VkU3Bh
Y2UoKS5maW5kRW1wdHlCbG9ja1RvU3RlYWwoKSkgewogICAgICAgICAgICAgYmxvY2stPnN3ZWVw
KG51bGxwdHIpOwogICAgICAgICAgICAgCkBAIC0zODksMTggKzM3OSwxNiBAQCB2b2lkIE1hcmtl
ZEFsbG9jYXRvcjo6ZW5kTWFya2luZygpCiAgICAgLy8ga25vdyB3aGF0IGtpbmQgb2YgY29sbGVj
dGlvbiBpdCBpcy4gVGhhdCBrbm93bGVkZ2UgaXMgYWxyZWFkeSBlbmNvZGVkIGluIHRoZSBtX21h
cmtpbmdYWVoKICAgICAvLyB2ZWN0b3JzLgogICAgIAotICAgIGlmIChuZWVkc0Rlc3RydWN0aW9u
KCkpIHsKLSAgICAgICAgLy8gSWYgYmxvY2tzIG5lZWQgZGVzdHJ1Y3Rpb24gdGhlbiBub3RoaW5n
IGlzIGVtcHR5ISBUaGlzIGlzIGEgY29ycmVjdCBhc3NlcnRpb24gYnV0IG1heQotICAgICAgICAv
LyBiZWNvbWUgd3Jvbmcgb25jZSB3ZSBnbyBmdWxsIGNvbmN1cnJlbnQ6IHdoZW4gd2UgY3JlYXRl
IGEgbmV3IGJsb2NrLCBpdCB3aWxsIGZsaWNrZXIKLSAgICAgICAgLy8gaW50byB0aGUgZW1wdHkg
c2V0IGZvciBhIHRpbnkgbW9tZW50LiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhpcyBjb2RlIGlzIGxp
a2VseSB0byBiZSBydW4KLSAgICAgICAgLy8gaW4gc3RvcFRoZVdvcmxkLgotICAgICAgICBBU1NF
UlQobV9lbXB0eS5pc0VtcHR5KCkpOwotICAgICAgICBtX2NhbkFsbG9jYXRlQnV0Tm90RW1wdHkg
PSBtX2xpdmUgJiB+bV9tYXJraW5nUmV0aXJlZDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAKICAgICBtX2VtcHR5ID0gbV9saXZlICYgfm1fbWFya2luZ05vdEVtcHR5OwogICAgIG1fY2Fu
QWxsb2NhdGVCdXROb3RFbXB0eSA9IG1fbGl2ZSAmIG1fbWFya2luZ05vdEVtcHR5ICYgfm1fbWFy
a2luZ1JldGlyZWQ7CisgICAgaWYgKG5lZWRzRGVzdHJ1Y3Rpb24oKSkgeworICAgICAgICAvLyBU
aGVyZSBhcmUgc29tZSBibG9ja3MgdGhhdCB3ZSBkaWRuJ3QgYWxsb2NhdGUgb3V0IG9mIGluIHRo
ZSBsYXN0IGN5Y2xlLCBidXQgd2Ugc3dlcHQgdGhlbS4gVGhpcworICAgICAgICAvLyB3aWxsIGZv
cmdldCB0aGF0IHdlIGRpZCB0aGF0IGFuZCB3ZSB3aWxsIGVuZCB1cCBzd2VlcGluZyB0aGVtIGFn
YWluIGFuZCBhdHRlbXB0aW5nIHRvIGNhbGwgdGhlaXIKKyAgICAgICAgLy8gZGVzdHJ1Y3RvcnMg
YWdhaW4uIFRoYXQncyBmaW5lIGJlY2F1c2Ugb2YgemFwcGluZy4gVGhlIG9ubHkgdGltZSB3aGVu
IHdlIGNhbm5vdCBmb3JnZXQgaXMgd2hlbgorICAgICAgICAvLyB3ZSBqdXN0IGFsbG9jYXRlIGEg
YmxvY2sgb3Igd2hlbiB3ZSBtb3ZlIGEgYmxvY2sgZnJvbSBvbmUgc2l6ZSBjbGFzcyB0byBhbm90
aGVyLiBUaGF0IGRvZXNuJ3QKKyAgICAgICAgLy8gaGFwcGVuIGhlcmUuCisgICAgICAgIG1fZGVz
dHJ1Y3RpYmxlID0gbV9saXZlICYgfm1fbWFya2luZ1JldGlyZWQ7CisgICAgfQogICAgIAogICAg
IGlmIChmYWxzZSkgewogICAgICAgICBkYXRhTG9nKCJCaXRzIGZvciAiLCBtX2NlbGxTaXplLCAi
LCAiLCBtX2F0dHJpYnV0ZXMsICIgYWZ0ZXIgZW5kTWFya2luZzpcbiIpOwpAQCAtNDM3LDcgKzQy
NSw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpzd2VlcCgpCiAKIHZvaWQgTWFya2VkQWxsb2Nh
dG9yOjpzaHJpbmsoKQogewotICAgIG1fZW1wdHkuZm9yRWFjaFNldEJpdCgKKyAgICAobV9lbXB0
eSAmIH5tX2Rlc3RydWN0aWJsZSkuZm9yRWFjaFNldEJpdCgKICAgICAgICAgWyZdIChzaXplX3Qg
aW5kZXgpIHsKICAgICAgICAgICAgIG1hcmtlZFNwYWNlKCkuZnJlZUJsb2NrKG1fYmxvY2tzW2lu
ZGV4XSk7CiAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIxOTc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw5ICs0MSwx
MCBAQCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKICNkZWZpbmUgRk9SX0VBQ0hfTUFS
S0VEX0FMTE9DQVRPUl9CSVQobWFjcm8pIFwKICAgICBtYWNybyhsaXZlLCBMaXZlKSAvKiBUaGUg
c2V0IG9mIGJsb2NrIGluZGljZXMgdGhhdCBoYXZlIGFjdHVhbCBibG9ja3MuICovXAotICAgIG1h
Y3JvKGVtcHR5LCBFbXB0eSkgLyogVGhlIHNldCBvZiBhbGwgYmxvY2tzIHRoYXQgaGF2ZSBubyBs
aXZlIG9iamVjdHMgYW5kIG5vdGhpbmcgdG8gZGVzdHJveS4gKi8gXAorICAgIG1hY3JvKGVtcHR5
LCBFbXB0eSkgLyogVGhlIHNldCBvZiBhbGwgYmxvY2tzIHRoYXQgaGF2ZSBubyBsaXZlIG9iamVj
dHMuICovIFwKICAgICBtYWNybyhhbGxvY2F0ZWQsIEFsbG9jYXRlZCkgLyogVGhlIHNldCBvZiBh
bGwgYmxvY2tzIHRoYXQgYXJlIGZ1bGwgb2YgbGl2ZSBvYmplY3RzLiAqL1wKICAgICBtYWNybyhj
YW5BbGxvY2F0ZUJ1dE5vdEVtcHR5LCBDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KSAvKiBUaGUgc2V0
IG9mIGFsbCBibG9ja3MgYXJlIG5laXRoZXIgZW1wdHkgbm9yIHJldGlyZWQgKGkuZS4gYXJlIG1v
cmUgdGhhbiBtaW5NYXJrZWRCbG9ja1V0aWxpemF0aW9uIGZ1bGwpLiAqLyBcCisgICAgbWFjcm8o
ZGVzdHJ1Y3RpYmxlLCBEZXN0cnVjdGlibGUpIC8qIFRoZSBzZXQgb2YgYWxsIGJsb2NrcyB0aGF0
IG1heSBoYXZlIGRlc3RydWN0b3JzIHRvIHJ1bi4gKi9cCiAgICAgbWFjcm8oZWRlbiwgRWRlbikg
LyogVGhlIHNldCBvZiBhbGwgYmxvY2tzIHRoYXQgaGF2ZSBuZXcgb2JqZWN0cyBzaW5jZSB0aGUg
bGFzdCBHQy4gKi9cCiAgICAgbWFjcm8odW5zd2VwdCwgVW5zd2VwdCkgLyogVGhlIHNldCBvZiBh
bGwgYmxvY2tzIHRoYXQgY291bGQgYmUgc3dlcHQgYnkgdGhlIGluY3JlbWVudGFsIHN3ZWVwZXIu
ICovXAogICAgIFwKQEAgLTY1LDY5ICs2Niw2IEBAIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKIC8vIGhhcyB0byBsb29rIGF0IGJvdGggYml0dmVjdG9ycy4KIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIxMjEKIAotLy8gTm90ZSB0aGF0IHRoaXMgY29s
bGVjdG9yIHN1cHBvcnRzIG92ZXJsYXBwaW5nIGFsbG9jYXRvciBzdGF0ZSB3aXRoIG1hcmtpbmcg
c3RhdGUsIHNpbmNlIGluIGEKLS8vIGNvbmN1cnJlbnQgY29sbGVjdG9yIHlvdSBhbGxvdyBhbGxv
Y2F0aW9uIHdoaWxlIG1hcmtpbmcgaXMgcnVubmluZy4gU28gaXQncyBiZXN0IHRvIHZpc3VhbGl6
ZSBhCi0vLyBmdWxsIG11dGFibGUtPmVkZW4gY29sbGVjdC0+bXV0YXRlLT5mdWxsIGNvbGxlY3Qg
Y3ljbGUgYW5kIHNlZSBob3cgdGhlIGJpdHMgYWJvdmUgZ2V0IGFmZmVjdGVkLgotLy8gVGhlIGV4
YW1wbGUgYmVsb3cgdHJpZXMgdG8gYmUgZXhoYXVzdGl2ZSBhYm91dCB3aGF0IGhhcHBlbnMgdG8g
dGhlIGJpdHMsIGJ1dCBvbWl0cyBhIGxvdCBvZgotLy8gdGhpbmdzIHRoYXQgaGFwcGVuIHRvIG90
aGVyIHN0YXRlLgotLy8KLS8vIENyZWF0ZSBhbGxvY2F0b3IKLS8vIC0gYWxsIGJpdHMgYXJlIGVt
cHR5Ci0vLyBTdGFydCBhbGxvY2F0aW5nIGluIHNvbWUgYmxvY2sKLS8vIC0gYWxsb2NhdGUgdGhl
IGJsb2NrIGFuZCBzZXQgdGhlIGxpdmUgYml0LgotLy8gLSB0aGUgZW1wdHkgYml0IGZvciB0aGUg
YmxvY2sgZmxpY2tlcnMgb24gYW5kIHRoZW4gZ2V0cyBpbW1lZGlhdGVseSBjbGVhcmVkIGJ5IHN3
ZWVwaW5nLgotLy8gLSBzZXQgdGhlIGVkZW4gYml0LgotLy8gRmluaXNoIGFsbG9jYXRpbmcgaW4g
dGhhdCBibG9jawotLy8gLSBzZXQgdGhlIGFsbG9jYXRlZCBiaXQuCi0vLyBEbyB0aGF0IHRvIGEg
bG90IG9mIGJsb2NrcyBhbmQgdGhlbiBzdGFydCBhbiBlZGVuIGNvbGxlY3Rpb24uCi0vLyAtIGJl
Z2luTWFya2luZygpIGhhcyBub3RoaW5nIHRvIGRvLgotLy8gLSBieSBkZWZhdWx0IHdlIGhhdmUg
Y2xlYXJlZCBtYXJraW5nTm90RW1wdHkvbWFya2luZ1JldGlyZWQgYml0cy4KLS8vIC0gbWFya2lu
ZyBidWlsZHMgdXAgbWFya2luZ05vdEVtcHR5L21hcmtpbmdSZXRpcmVkIGJpdHMuCi0vLyBXZSBk
byBlbmRNYXJraW5nKCkKLS8vIC0gY2xlYXIgYWxsIGFsbG9jYXRlZCBiaXRzLgotLy8gLSBmb3Ig
ZGVzdHJ1Y3RvciBibG9ja3M6IGZyYWdtZW50ZWQgPSBsaXZlICYgfm1hcmtpbmdSZXRpcmVkCi0v
LyAtIGZvciBub24tZGVzdHJ1Y3RvciBibG9ja3M6Ci0vLyAgICAgICBlbXB0eSA9IGxpdmUgJiB+
bWFya2luZ05vdEVtcHR5Ci0vLyAgICAgICBmcmFnbWVudGVkID0gbGl2ZSAmIG1hcmtpbmdOb3RF
bXB0eSAmIH5tYXJraW5nUmV0aXJlZAotLy8gU25hcHNob3R0aW5nLgotLy8gLSB1bnN3ZXB0IHw9
IGVkZW4KLS8vIFByZXBhcmUgZm9yIGFsbG9jYXRpb24uCi0vLyAtIGNsZWFyIGVkZW4KLS8vIEZp
bmlzaCBjb2xsZWN0aW9uLgotLy8gQWxsb2NhdGUgaW4gc29tZSBibG9jayB0aGF0IGhhZCBzb21l
IGZyZWUgYW5kIHNvbWUgbGl2ZSBvYmplY3RzLgotLy8gLSBjbGVhciB0aGUgY2FuQWxsb2NhdGVC
dXROb3RFbXB0eSBiaXQKLS8vIC0gY2xlYXIgdGhlIHVuc3dlcHQgYml0Ci0vLyAtIHNldCB0aGUg
ZWRlbiBiaXQKLS8vIEZpbmlzaCBhbGxvY2F0aW5nIChzZXQgdGhlIGFsbG9jYXRlZCBiaXQpLgot
Ly8gQWxsb2NhdGUgaW4gc29tZSBibG9jayB0aGF0IHdhcyBjb21wbGV0ZWx5IGVtcHR5LgotLy8g
LSBjbGVhciB0aGUgZW1wdHkgYml0Ci0vLyAtIGNsZWFyIHRoZSB1bnN3ZXB0IGJpdAotLy8gLSBz
ZXQgdGhlIGVkZW4gYml0LgotLy8gRmluaXNoIGFsbG9jYXRpbmcgKHNldCB0aGUgYWxsb2NhdGVk
IGJpdCkuCi0vLyBBbGxvY2F0ZSBpbiBzb21lIGJsb2NrIHRoYXQgd2FzIGNvbXBsZXRlbHkgZW1w
dHkgaW4gYW5vdGhlciBhbGxvY2F0b3IuCi0vLyAtIGNsZWFyIHRoZSBlbXB0eSBiaXQKLS8vIC0g
Y2xlYXIgYWxsIGJpdHMgaW4gdGhhdCBhbGxvY2F0b3IKLS8vIC0gc2V0IHRoZSBsaXZlIGJpdCBp
biBhbm90aGVyIGFsbG9jYXRvciBhbmQgdGhlIGVtcHR5IGJpdC4KLS8vIC0gY2xlYXIgdGhlIGVt
cHR5LCB1bnN3ZXB0IGJpdHMuCi0vLyAtIHNldCB0aGUgZWRlbiBiaXQuCi0vLyBGaW5pc2ggYWxs
b2NhdGluZyAoc2V0IHRoZSBhbGxvY2F0ZWQgYml0KS4KLS8vIFN0YXJ0IGEgZnVsbCBjb2xsZWN0
aW9uLgotLy8gLSBiZWdpbk1hcmtpbmcoKSBjbGVhcnMgbWFya2luZ05vdEVtcHR5LCBtYXJraW5n
UmV0aXJlZAotLy8gLSB0aGUgaGVhcCB2ZXJzaW9uIGlzIGluY3JlbWVudGVkCi0vLyAtIG1hcmtp
bmcgcmVidWlsZHMgbWFya2luZ05vdEVtcHR5L21hcmtpbmdyZXRpcmVkIGJpdHMuCi0vLyBXZSBk
byBlbmRNYXJraW5nKCkKLS8vIC0gY2xlYXIgYWxsIGFsbG9jYXRlZCBiaXRzLgotLy8gLSBzZXQg
Y2FuQWxsb2NhdGVCdXROb3RFbXB0eS9lbXB0eSB0aGUgc2FtZSB3YXkgYXMgaW4gZWRlbiBjb2xs
ZWN0aW9uLgotLy8gU25hcHNob3R0aW5nLgotLy8gLSB1bnN3ZXB0ID0gbGl2ZQotLy8gcHJlcGFy
ZSBmb3IgYWxsb2NhdGlvbi4KLS8vIC0gY2xlYXIgZWRlbi4KLS8vIEZpbmlzaCBjb2xsZWN0aW9u
LgotLy8KLS8vIE5vdGljZSBob3cgaW4gdGhpcyBzY2hlbWUsIHRoZSBlbXB0eS9jYW5BbGxvY2F0
ZUJ1dE5vdEVtcHR5IHN0YXRlIHN0YXlzIHNlcGFyYXRlIGZyb20gdGhlCi0vLyBtYXJraW5nTm90
RW1wdHkvbWFya2luZ1JldGlyZWQgc3RhdGUuIFRoaXMgaXMgb25lIHN0ZXAgdG93YXJkcyBoYXZp
bmcgc2VwYXJhdGVkIGFsbG9jYXRpb24gYW5kCi0vLyBtYXJraW5nIHN0YXRlLgotCiBjbGFzcyBN
YXJrZWRBbGxvY2F0b3IgewogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7
CiAKQEAgLTIxNyw4ICsxNTUsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBNYXJrZWRCbG9jazsKICAgICAKLSAgICBib29sIHNob3VsZFN0ZWFsRW1wdHlCbG9ja3NGcm9t
T3RoZXJBbGxvY2F0b3JzKCkgY29uc3Q7Ci0gICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCogYWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCopOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqKTsKICAg
ICB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlSW1wbChHQ0RlZmVycmFsQ29udGV4dCosIGJvb2wgY3Jh
c2hPbkZhaWx1cmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJs
b2NrLmNwcAkocmV2aXNpb24gMjE5Nzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCwyNiBAQAogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25h
bWVzcGFjZSB7CisKK05PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggTkVWRVJfSU5MSU5FIHZvaWQgY3Jh
c2goKQoreworICAgIENSQVNIKCk7Cit9CisKKyN1bmRlZiBSRUxFQVNFX0FTU0VSVAorI2RlZmlu
ZSBSRUxFQVNFX0FTU0VSVChhc3NlcnRpb24pIGRvIHsgXAorICAgIGlmICghKGFzc2VydGlvbikp
IHsgXAorICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKF9fRklMRV9fLCBfX0xJTkVf
XywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2Fzc2VydGlvbik7IFwKKyAgICAgICAgY3Jhc2goKTsg
XAorICAgIH0gXAorfSB3aGlsZSAoMCkKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKICNp
bmNsdWRlICJNYXJrZWRCbG9jay5oIgogCiAjaW5jbHVkZSAiRnJlZUxpc3RJbmxpbmVzLmgiCkBA
IC0xNTIsNiArMTcyLDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzdG9wQWxsb2NhdGlu
Zwogdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpCiB7CiAg
ICAgYWxsb2NhdG9yKCktPnNldElzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcywg
ZmFsc2UpOworICAgIGFsbG9jYXRvcigpLT5zZXRJc0Rlc3RydWN0aWJsZShOb0xvY2tpbmdOZWNl
c3NhcnksIHRoaXMsIHRydWUpOwogICAgIG1fYmxvY2stPm1fbWFya3MuY2xlYXJBbGwoKTsKICAg
ICBtX2Jsb2NrLT5jbGVhckhhc0FueU1hcmtlZCgpOwogICAgIG1fYmxvY2stPm1fbWFya2luZ1Zl
cnNpb24gPSBoZWFwKCktPm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKTsKQEAgLTQwMyw4
ICs0MjQsMTEgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChGcmVlTGlzdAogICAg
IG1fYWxsb2NhdG9yLT5zZXRJc1Vuc3dlcHQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzLCBmYWxz
ZSk7CiAgICAgCiAgICAgbV93ZWFrU2V0LnN3ZWVwKCk7CisgICAgCisgICAgYm9vbCBuZWVkc0Rl
c3RydWN0aW9uID0gbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb24K
KyAgICAgICAgJiYgbV9hbGxvY2F0b3ItPmlzRGVzdHJ1Y3RpYmxlKE5vTG9ja2luZ05lY2Vzc2Fy
eSwgdGhpcyk7CiAKLSAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwT25seSAmJiBtX2F0dHJpYnV0
ZXMuZGVzdHJ1Y3Rpb24gPT0gRG9lc05vdE5lZWREZXN0cnVjdGlvbikKKyAgICBpZiAoc3dlZXBN
b2RlID09IFN3ZWVwT25seSAmJiAhbmVlZHNEZXN0cnVjdGlvbikKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKFVOTElLRUxZKG1faXNGcmVlTGlzdGVkKSkgewpAQCAtNDE3LDcgKzQ0MSw3IEBA
IHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXAoRnJlZUxpc3QKICAgICBpZiAoc3BhY2Uo
KS0+aXNNYXJraW5nKCkpCiAgICAgICAgIGJsb2NrKCkubV9sb2NrLmxvY2soKTsKICAgICAKLSAg
ICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb24pIHsKKyAg
ICBpZiAobmVlZHNEZXN0cnVjdGlvbikgewogICAgICAgICBzdWJzcGFjZSgpLT5maW5pc2hTd2Vl
cCgqdGhpcywgZnJlZUxpc3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9u
IDIxOTc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNiArMTYxLDE3IEBAIHZvaWQgTWFya2VkQmxvY2s6
OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2UKICAgICAKICAgICB1bnNpZ25lZCBjZWxsU2l6ZSA9IHRo
aXMtPmNlbGxTaXplKCk7CiAgICAgCisgICAgVk0mIHZtID0gKnRoaXMtPnZtKCk7CisgICAgYXV0
byBkZXN0cm95ID0gWyZdICh2b2lkKiBjZWxsKSB7CisgICAgICAgIEpTQ2VsbCoganNDZWxsID0g
c3RhdGljX2Nhc3Q8SlNDZWxsKj4oY2VsbCk7CisgICAgICAgIGlmICghanNDZWxsLT5pc1phcHBl
ZCgpKSB7CisgICAgICAgICAgICBkZXN0cm95RnVuYyh2bSwganNDZWxsKTsKKyAgICAgICAgICAg
IGpzQ2VsbC0+emFwKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAgIG1fYWxsb2NhdG9y
LT5zZXRJc0Rlc3RydWN0aWJsZShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMsIGZhbHNlKTsKKyAg
ICAKICAgICBpZiAoT3B0aW9uczo6dXNlQnVtcEFsbG9jYXRvcigpCiAgICAgICAgICYmIGVtcHR5
TW9kZSA9PSBJc0VtcHR5CiAgICAgICAgICYmIG5ld2x5QWxsb2NhdGVkTW9kZSA9PSBEb2VzTm90
SGF2ZU5ld2x5QWxsb2NhdGVkKSB7CkBAIC0xODEsMTQgKzE5MiwxNyBAQCB2b2lkIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlCiAgICAgICAgIGNoYXIqIHBheWxvYWRFbmQgPSBz
dGFydE9mTGFzdENlbGwgKyBjZWxsU2l6ZTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocGF5bG9h
ZEVuZCAtIE1hcmtlZEJsb2NrOjpibG9ja1NpemUgPD0gYml0d2lzZV9jYXN0PGNoYXIqPigmYmxv
Y2spKTsKICAgICAgICAgY2hhciogcGF5bG9hZEJlZ2luID0gYml0d2lzZV9jYXN0PGNoYXIqPihi
bG9jay5hdG9tcygpICsgZmlyc3RBdG9tKCkpOwotICAgICAgICBpZiAoc2NyaWJibGVNb2RlID09
IFNjcmliYmxlKQotICAgICAgICAgICAgc2NyaWJibGUocGF5bG9hZEJlZ2luLCBwYXlsb2FkRW5k
IC0gcGF5bG9hZEJlZ2luKTsKKyAgICAgICAgCiAgICAgICAgIGlmIChzd2VlcE1vZGUgPT0gU3dl
ZXBUb0ZyZWVMaXN0KQogICAgICAgICAgICAgc2V0SXNGcmVlTGlzdGVkKCk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG1fYWxsb2NhdG9yLT5zZXRJc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2Fy
eSwgdGhpcywgdHJ1ZSk7CiAgICAgICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKICAgICAg
ICAgICAgIGJsb2NrLm1fbG9jay51bmxvY2soKTsKKyAgICAgICAgaWYgKGRlc3RydWN0aW9uTW9k
ZSAhPSBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMpIHsKKyAgICAgICAgICAgIGZvciAoY2hhciogY2Vs
bCA9IHBheWxvYWRCZWdpbjsgY2VsbCA8IHBheWxvYWRFbmQ7IGNlbGwgKz0gY2VsbFNpemUpCisg
ICAgICAgICAgICAgICAgZGVzdHJveShjZWxsKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2Ny
aWJibGVNb2RlID09IFNjcmliYmxlKQorICAgICAgICAgICAgc2NyaWJibGUocGF5bG9hZEJlZ2lu
LCBwYXlsb2FkRW5kIC0gcGF5bG9hZEJlZ2luKTsKICAgICAgICAgaWYgKHN3ZWVwTW9kZSA9PSBT
d2VlcFRvRnJlZUxpc3QpCiAgICAgICAgICAgICBmcmVlTGlzdC0+aW5pdGlhbGl6ZUJ1bXAocGF5
bG9hZEVuZCwgcGF5bG9hZEVuZCAtIHBheWxvYWRCZWdpbik7CiAgICAgICAgIGlmIChmYWxzZSkK
QEAgLTIwNSwxNyArMjE5LDExIEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6
ZWRTd2UKICAgICBjcnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVlcygmc2VjcmV0LCBzaXplb2Yo
dWludHB0cl90KSk7CiAgICAgYm9vbCBpc0VtcHR5ID0gdHJ1ZTsKICAgICBWZWN0b3I8c2l6ZV90
PiBkZWFkQ2VsbHM7Ci0gICAgVk0mIHZtID0gKnRoaXMtPnZtKCk7CiAgICAgYXV0byBoYW5kbGVE
ZWFkQ2VsbCA9IFsmXSAoc2l6ZV90IGkpIHsKICAgICAgICAgSGVhcENlbGwqIGNlbGwgPSByZWlu
dGVycHJldF9jYXN0X3B0cjxIZWFwQ2VsbCo+KCZibG9jay5hdG9tcygpW2ldKTsKIAotICAgICAg
ICBpZiAoZGVzdHJ1Y3Rpb25Nb2RlICE9IEJsb2NrSGFzTm9EZXN0cnVjdG9ycyAmJiBlbXB0eU1v
ZGUgPT0gTm90RW1wdHkpIHsKLSAgICAgICAgICAgIEpTQ2VsbCoganNDZWxsID0gc3RhdGljX2Nh
c3Q8SlNDZWxsKj4oY2VsbCk7Ci0gICAgICAgICAgICBpZiAoIWpzQ2VsbC0+aXNaYXBwZWQoKSkg
ewotICAgICAgICAgICAgICAgIGRlc3Ryb3lGdW5jKHZtLCBqc0NlbGwpOwotICAgICAgICAgICAg
ICAgIGpzQ2VsbC0+emFwKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgaWYg
KGRlc3RydWN0aW9uTW9kZSAhPSBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMgJiYgZW1wdHlNb2RlID09
IE5vdEVtcHR5KQorICAgICAgICAgICAgZGVzdHJveShjZWxsKTsKIAogICAgICAgICBpZiAoc3dl
ZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkgewogICAgICAgICAgICAgRnJlZUNlbGwqIGZyZWVD
ZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8RnJlZUNlbGwqPihjZWxsKTsKQEAgLTI3MywyNCAr
MjgxLDU2IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6ZmluaXNoU3dlZXBLbm8KICAgICBN
YXJrc01vZGUgbWFya3NNb2RlID0gdGhpcy0+bWFya3NNb2RlKCk7CiAKICAgICBhdXRvIHRyeVNw
ZWNpYWxpemVkID0gWyZdICgpIC0+IGJvb2wgewotICAgICAgICBpZiAoc3dlZXBNb2RlICE9IFN3
ZWVwVG9GcmVlTGlzdCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKHNj
cmliYmxlTW9kZSAhPSBEb250U2NyaWJibGUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIGlmIChuZXdseUFsbG9jYXRlZE1vZGUgIT0gRG9lc05vdEhhdmVOZXdseUFsbG9jYXRl
ZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKGRlc3RydWN0aW9uTW9k
ZSAhPSBCbG9ja0hhc0Rlc3RydWN0b3JzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBpZiAoZW1wdHlNb2RlID09IElzRW1wdHkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIAotICAgICAgICBzd2l0Y2ggKG1hcmtzTW9kZSkgewotICAgICAgICBjYXNlIE1h
cmtzTm90U3RhbGU6Ci0gICAgICAgICAgICBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIE5vdEVtcHR5
LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9l
c05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZT4oZnJlZUxpc3QsIElzRW1wdHks
IFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2Vz
Tm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlLCBkZXN0cm95RnVuYyk7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBNYXJrc1N0YWxlOgotICAgICAgICAg
ICAgc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBOb3RFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9j
a0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQs
IE1hcmtzU3RhbGU+KGZyZWVMaXN0LCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFz
RGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFy
a3NTdGFsZSwgZGVzdHJveUZ1bmMpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IHN3aXRjaCAoZW1wdHlNb2RlKSB7CisgICAgICAgIGNhc2UgSXNFbXB0eToKKyAgICAgICAgICAg
IHN3aXRjaCAoc3dlZXBNb2RlKSB7CisgICAgICAgICAgICBjYXNlIFN3ZWVwT25seToKKyAgICAg
ICAgICAgICAgICBzd2l0Y2ggKG1hcmtzTW9kZSkgeworICAgICAgICAgICAgICAgIGNhc2UgTWFy
a3NOb3RTdGFsZToKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBJ
c0VtcHR5LCBTd2VlcE9ubHksIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9l
c05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZT4oZnJlZUxpc3QsIElzRW1wdHks
IFN3ZWVwT25seSwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2
ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlLCBkZXN0cm95RnVuYyk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGNhc2UgTWFya3NTdGFsZToK
KyAgICAgICAgICAgICAgICAgICAgc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBJc0VtcHR5LCBTd2Vl
cE9ubHksIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXds
eUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZnJlZUxpc3QsIElzRW1wdHksIFN3ZWVwT25seSwgQmxv
Y2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVk
LCBNYXJrc1N0YWxlLCBkZXN0cm95RnVuYyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgU3dlZXBUb0ZyZWVMaXN0
OgorICAgICAgICAgICAgICAgIHN3aXRjaCAobWFya3NNb2RlKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSBNYXJrc05vdFN0YWxlOgorICAgICAgICAgICAgICAgICAgICBzcGVjaWFsaXplZFN3ZWVw
PHRydWUsIElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9u
dFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlPihmcmVl
TGlzdCwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250
U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGUsIGRlc3Ry
b3lGdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAg
ICAgY2FzZSBNYXJrc1N0YWxlOgorICAgICAgICAgICAgICAgICAgICBzcGVjaWFsaXplZFN3ZWVw
PHRydWUsIElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9u
dFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihmcmVlTGlz
dCwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2Ny
aWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGUsIGRlc3Ryb3lGdW5j
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICBjYXNlIE5vdEVtcHR5OgorICAgICAgICAgICAgc3dpdGNo
IChzd2VlcE1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgU3dlZXBPbmx5OgorICAgICAgICAgICAg
ICAgIHN3aXRjaCAobWFya3NNb2RlKSB7CisgICAgICAgICAgICAgICAgY2FzZSBNYXJrc05vdFN0
YWxlOgorICAgICAgICAgICAgICAgICAgICBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIE5vdEVtcHR5
LCBTd2VlcE9ubHksIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhh
dmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZT4oZnJlZUxpc3QsIElzRW1wdHksIFN3ZWVw
T25seSwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5
QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlLCBkZXN0cm95RnVuYyk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGNhc2UgTWFya3NTdGFsZToKKyAgICAg
ICAgICAgICAgICAgICAgc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBOb3RFbXB0eSwgU3dlZXBPbmx5
LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxv
Y2F0ZWQsIE1hcmtzU3RhbGU+KGZyZWVMaXN0LCBJc0VtcHR5LCBTd2VlcE9ubHksIEJsb2NrSGFz
RGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFy
a3NTdGFsZSwgZGVzdHJveUZ1bmMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFN3ZWVwVG9GcmVlTGlzdDoKKyAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG1hcmtzTW9kZSkgeworICAgICAgICAgICAgICAgIGNhc2Ug
TWFya3NOb3RTdGFsZToKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lhbGl6ZWRTd2VlcDx0cnVl
LCBOb3RFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2Ny
aWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGU+KGZyZWVMaXN0
LCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRTY3Jp
YmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZSwgZGVzdHJveUZ1
bmMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBj
YXNlIE1hcmtzU3RhbGU6CisgICAgICAgICAgICAgICAgICAgIHNwZWNpYWxpemVkU3dlZXA8dHJ1
ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNj
cmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihmcmVlTGlzdCwg
SXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJi
bGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGUsIGRlc3Ryb3lGdW5jKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0zMjAsOCArMzYwLDYgQEAgaW5saW5lIE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBN
YQogICAgIC8vIC0gSXQncyB0cnVlIHdoZW4gdGhlIGJsb2NrIGlzIGZyZXNobHkgYWxsb2NhdGVk
LgogICAgIC8vIC0gSXQncyB0cnVlIGlmIHRoZSBibG9jayBoYWQgYmVlbiBzd2VwdCBpbiB0aGUg
cGFzdCwgYWxsIGRlc3RydWN0b3JzIHdlcmUgY2FsbGVkLCBhbmQgdGhhdAogICAgIC8vICAgc3dl
ZXAgcHJvdmVkIHRoYXQgdGhlIGJsb2NrIGlzIGVtcHR5LgotICAgIC8vIC0gSXQncyBmYWxzZSBp
ZiB0aGVyZSBhcmUgYW55IGRlc3RydWN0b3JzIHRoYXQgbmVlZCB0byBiZSBjYWxsZWQsIGV2ZW4g
aWYgdGhlIGJsb2NrIGhhcyBubwotICAgIC8vICAgbGl2ZSBvYmplY3RzLgogICAgIHJldHVybiBt
X2FsbG9jYXRvci0+aXNFbXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpID8gSXNFbXB0eSA6
IE5vdEVtcHR5OwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316351</attachid>
            <date>2017-07-24 21:48:11 -0700</date>
            <delta_ts>2017-07-25 09:44:34 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>21006</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE5ODU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBA
CisyMDE3LTA3LTI0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R0Mgc2hvdWxkIGJlIGZpbmUgd2l0aCB0cmFkaW5nIGJsb2NrcyBiZXR3ZWVuIGRlc3RydWN0b3Ig
YW5kIG5vbi1kZXN0cnVjdG9yIGJsb2NrcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc0ODExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBPdXIgR0MgaGFzIHRoZSBhYmlsaXR5IHRvIHRyYWRl
IGJsb2NrcyBiZXR3ZWVuIE1hcmtlZEFsbG9jYXRvcnMuIEEgTWFya2VkQWxsb2NhdG9yIGlzIGEK
KyAgICAgICAgc2l6ZS1jbGFzcy13aXRoaW4tYS1TdWJzcGFjZS4gVGhlIGFiaWxpdHkgdG8gdHJh
ZGUgaGVscHMgcmVkdWNlIG1lbW9yeSB3YXN0YWdlIGR1ZSB0bworICAgICAgICBmcmFnbWVudGF0
aW9uLiBQcmlvciB0byB0aGlzIGNoYW5nZSwgdGhpcyBvbmx5IHdvcmtlZCBiZXR3ZWVuIGJsb2Nr
cyB0aGF0IGRpZCBub3QgaGF2ZSBkZXN0cnVjdG9ycy4KKyAgICAgICAgVGhpcyB3YXMgcGFydGx5
IGEgcG9saWN5IGRlY2lzaW9uLiBCdXQgbW9zdGx5LCBpdCB3YXMgZmFsbG91dCBmcm9tIHRoZSB3
YXkgd2UgdXNlIHRoZSBgZW1wdHlgIGJsb2NrCisgICAgICAgIHNldC4KKyAgICAgICAgCisgICAg
ICAgIEhlcmUncyBob3cgYGVtcHR5YCB1c2VkIHRvIHdvcmsuIElmIGEgYmxvY2sgaXMgZW1wdHks
IHdlIGRvbid0IHJ1biBkZXN0cnVjdG9ycy4gV2Ugc2F5IHRoYXQgYSBibG9jaworICAgICAgICBp
cyBlbXB0eSBpZjoKKyAgICAgICAgCisgICAgICAgIEEpIEl0IGhhcyBubyBsaXZlIG9iamVjdHMg
YW5kIGl0cyBhIG5vbi1kZXN0cnVjdG9yIGJsb2NrLCBvcgorICAgICAgICBCKSBXZSBqdXN0IGFs
bG9jYXRlZCBpdCAoc28gaXQgaGFzIG5vIGRlc3RydWN0b3JzIGV2ZW4gaWYgaXQncyBhIGRlc3Ry
dWN0b3IgYmxvY2spLCBvcgorICAgICAgICBDKSBXZSBqdXN0IHN0b2xlIGl0IGZyb20gYW5vdGhl
ciBhbGxvY2F0b3IgKHNvIGl0IGFsc28gaGFzIG5vIGRlc3RydWN0b3JzKSwgb3IKKyAgICAgICAg
RCkgV2UganVzdCBzd2VwdCB0aGUgYmxvY2sgYW5kIHJhbiBhbGwgZGVzdHJ1Y3RvcnMuCisgICAg
ICAgIAorICAgICAgICBDYXNlIChBKSBpcyBmb3IgdHJhZGluZyBibG9ja3MuIFRoYXQncyBob3cg
YSBkaWZmZXJlbnQgTWFya2VkQWxsb2NhdG9yIHdvdWxkIGtub3cgdGhhdCB0aGlzIGlzIGEKKyAg
ICAgICAgYmxvY2sgdGhhdCBjb3VsZCBiZSBzdG9sZW4uCisKKyAgICAgICAgQ2FzZXMgKEIpIGFu
ZCAoQykgbmVlZCB0byBiZSBkZXRlY3RlZCBmb3IgY29ycmVjdG5lc3MsIHNpbmNlIG90aGVyd2lz
ZSB3ZSBtaWdodCB0cnkgdG8gcnVuCisgICAgICAgIGRlc3RydWN0b3JzIGluIGJsb2NrcyB0aGF0
IGhhdmUgZ2FyYmFnZSBiaXRzLiBJbiB0aGF0IGNhc2UsIHRoZSBpc1phcHBlZCBjaGVjayB3b24n
dCBkZXRlY3QgdGhhdAorICAgICAgICBjZWxscyBkb24ndCBuZWVkIGRlc3RydWN0aW9uLCBzbyB3
aXRob3V0IGhhdmluZyB0aGUgYGVtcHR5YCBiaXQgd2Ugd291bGQgdHJ5IHRvIGRlc3RydWN0IGdh
cmJhZ2UKKyAgICAgICAgYW5kIGNyYXNoLiBDdXJyZW50bHksIHdlIGtub3cgdGhhdCB3ZSBoYXZl
IGNhc2VzIChCKSBhbmQgKEMpIHdoZW4gdGhlIGJsb2NrIGlzIGVtcHR5LgorICAgICAgICAKKyAg
ICAgICAgQ2FzZSAoRCkgaXMgbmVjZXNzYXJ5IGZvciBkZXRlY3Rpbmcgd2hpY2ggYmxvY2tzIGNh
biBiZSByZW1vdmVkIHdoZW4gd2UgYHNocmlua2AgdGhlIGhlYXAuCisgICAgICAgIAorICAgICAg
ICBJZiB3ZSB0cmllZCB0byBlbmFibGUgdHJhZGluZyBvZiBibG9ja3MgYmV0d2VlbiBhbGxvY2F0
b3JzIHdpdGhvdXQgbWFraW5nIGFueSBjaGFuZ2VzIHRvIGhvdworICAgICAgICBgZW1wdHlgIHdv
cmtzLCB0aGVuIGl0IGp1c3Qgd291bGQgbm90IHdvcmsuIFdlIGhhdmUgdG8gc2V0IHRoZSBgZW1w
dHlgIGJpdHMgb2YgYmxvY2tzIHRoYXQgaGF2ZSBubworICAgICAgICBsaXZlIG9iamVjdHMgaW4g
b3JkZXIgZm9yIHRob3NlIGJpdHMgdG8gYmUgY2FuZGlkYXRlcyBmb3IgdHJhZGluZy4gQnV0IGlm
IHdlIGRvIHRoYXQsIHRoZW4gb3VyCisgICAgICAgIGxvZ2ljIGZvciBjYXNlcyAoQi1EKSB3aWxs
IHRoaW5rIHRoYXQgdGhlIGJsb2NrIGhhcyBubyBkZXN0cnVjdGlibGUgb2JqZWN0cy4gVGhhdCdz
IGJhZCwgc2luY2UgdGhlbgorICAgICAgICBvdXIgZGVzdHJ1Y3RvcnMgd29uJ3QgcnVuIGFuZCB3
ZSdsbCBsZWFrIG1lbW9yeS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgY2hhbmdlIGZpeGVzIHRo
aXMgaXNzdWUgYnkgZGVjb3VwbGluZyB0aGUgImRvIEkgaGF2ZSBkZXN0cnVjdG9ycyIgcXVlc3Rp
b24gZnJvbSB0aGUgImRvIEkgaGF2ZQorICAgICAgICBsaXZlIG9iamVjdHMiIHF1ZXN0aW9uIGJ5
IGludHJvZHVjaW5nIGEgbmV3IGBkZXN0cnVjdGlibGVgIGJpdHZlY3Rvci4gVGhlIEdDIGZsYWdz
IGFsbCBsaXZlIGJsb2NrcworICAgICAgICBhcyBiZWluZyBkZXN0cnVjdGlibGUgYXQgdGhlIGVu
ZC4gV2UgY2xlYXIgdGhlIGRlc3RydWN0aWJsZSBiaXQgaW4gY2FzZXMgKEItRCkuCisgICAgICAg
IAorICAgICAgICBUaGVuIHdlIGNhbiBzaW1wbHkgcmVtb3ZlIGFsbCBkZXN0cnVjdG9yLW9yaWVu
dGVkIHNwZWNpYWwtY2FzaW5nIG9mIHRoZSBgZW1wdHlgIGJpdC4gQW5kIHdlIGNhbgorICAgICAg
ICByZW1vdmUgZGVzdHJ1Y3Rvci1vcmllbnRlZCBzcGVjaWFsLWNhc2luZyBvZiBibG9jayB0cmFk
aW5nLgorCisgICAgICAgIFRoaXMgaXMgYSBwZXJmLW5ldXRyYWwgY2hhbmdlLiBXZSBleHBlY3Qg
bW9zdCBmcmVlIG1lbW9yeSB0byBiZSBpbiBub24tZGVzdHJ1Y3RvciBibG9ja3MgYW55d2F5LAor
ICAgICAgICBzbyB0aGlzIGNoYW5nZSBpcyBtb3JlIGFib3V0IGNsZWFuLXVwIHRoYW4gcGVyZi4g
QnV0LCB0aGlzIGNvdWxkIHJlZHVjZSBtZW1vcnkgdXNhZ2UgaW4gc29tZQorICAgICAgICBwYXRo
b2xvZ2ljYWwgY2FzZXMuCisgICAgICAgIAorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpmaW5kRW1wdHlCbG9ja1RvU3Rl
YWwpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dENv
bGxlY3RpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmVuZE1hcmtpbmcpOgor
ICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnNocmluayk6CisgICAgICAgIChKU0M6Ok1h
cmtlZEFsbG9jYXRvcjo6c2hvdWxkU3RlYWxFbXB0eUJsb2Nrc0Zyb21PdGhlckFsbG9jYXRvcnMp
OiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmg6CisgICAgICAgICog
aGVhcC9NYXJrZWRCbG9jay5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6
Omxhc3RDaGFuY2VUb0ZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRs
ZTo6c3dlZXApOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXApOgorICAgICAgICAo
SlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZSk6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmVtcHR5TW9kZSk6CisKIDIwMTctMDct
MjQgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEdhcmRlbmluZzog
Zml4ZWQgQyBMb29wIGJ1aWxkIGFmdGVyIHIyMTk3OTAuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIxOTc4OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY3LDE3ICs2Nyw4IEBAIGJvb2wgTWFya2VkQWxsb2NhdG9yOjppc1BhZ2VkT3V0
KGRvdWJsZSAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgTWFya2VkQWxsb2NhdG9yOjpz
aG91bGRTdGVhbEVtcHR5QmxvY2tzRnJvbU90aGVyQWxsb2NhdG9ycygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuICFuZWVkc0Rlc3RydWN0aW9uKCk7Ci19Ci0KIE1hcmtlZEJsb2NrOjpIYW5kbGUqIE1h
cmtlZEFsbG9jYXRvcjo6ZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCkKIHsKLSAgICAvLyBEb24ndCBh
bGxvdyBvdGhlcnMgdG8gc3RlYWwgZnJvbSB1cywgaWYgd2Ugd291bGRuJ3Qgc3RlYWwgZnJvbSBv
dGhlcnMuCi0gICAgaWYgKCFzaG91bGRTdGVhbEVtcHR5QmxvY2tzRnJvbU90aGVyQWxsb2NhdG9y
cygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKICAgICBtX2VtcHR5Q3Vyc29yID0g
bV9lbXB0eS5maW5kQml0KG1fZW1wdHlDdXJzb3IsIHRydWUpOwogICAgIGlmIChtX2VtcHR5Q3Vy
c29yID49IG1fYmxvY2tzLnNpemUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMTEs
OCArMTAyLDcgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdQogICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCi0gICAgaWYgKE9wdGlvbnM6OnN0
ZWFsRW1wdHlCbG9ja3NGcm9tT3RoZXJBbGxvY2F0b3JzKCkKLSAgICAgICAgJiYgc2hvdWxkU3Rl
YWxFbXB0eUJsb2Nrc0Zyb21PdGhlckFsbG9jYXRvcnMoKSkgeworICAgIGlmIChPcHRpb25zOjpz
dGVhbEVtcHR5QmxvY2tzRnJvbU90aGVyQWxsb2NhdG9ycygpKSB7CiAgICAgICAgIGlmIChNYXJr
ZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IG1hcmtlZFNwYWNlKCkuZmluZEVtcHR5QmxvY2tUb1N0
ZWFsKCkpIHsKICAgICAgICAgICAgIGJsb2NrLT5zd2VlcChudWxscHRyKTsKICAgICAgICAgICAg
IApAQCAtMzg5LDE4ICszNzksMTYgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmVuZE1hcmtpbmco
KQogICAgIC8vIGtub3cgd2hhdCBraW5kIG9mIGNvbGxlY3Rpb24gaXQgaXMuIFRoYXQga25vd2xl
ZGdlIGlzIGFscmVhZHkgZW5jb2RlZCBpbiB0aGUgbV9tYXJraW5nWFlaCiAgICAgLy8gdmVjdG9y
cy4KICAgICAKLSAgICBpZiAobmVlZHNEZXN0cnVjdGlvbigpKSB7Ci0gICAgICAgIC8vIElmIGJs
b2NrcyBuZWVkIGRlc3RydWN0aW9uIHRoZW4gbm90aGluZyBpcyBlbXB0eSEgVGhpcyBpcyBhIGNv
cnJlY3QgYXNzZXJ0aW9uIGJ1dCBtYXkKLSAgICAgICAgLy8gYmVjb21lIHdyb25nIG9uY2Ugd2Ug
Z28gZnVsbCBjb25jdXJyZW50OiB3aGVuIHdlIGNyZWF0ZSBhIG5ldyBibG9jaywgaXQgd2lsbCBm
bGlja2VyCi0gICAgICAgIC8vIGludG8gdGhlIGVtcHR5IHNldCBmb3IgYSB0aW55IG1vbWVudC4g
T24gdGhlIG90aGVyIGhhbmQsIHRoaXMgY29kZSBpcyBsaWtlbHkgdG8gYmUgcnVuCi0gICAgICAg
IC8vIGluIHN0b3BUaGVXb3JsZC4KLSAgICAgICAgQVNTRVJUKG1fZW1wdHkuaXNFbXB0eSgpKTsK
LSAgICAgICAgbV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5ID0gbV9saXZlICYgfm1fbWFya2luZ1Jl
dGlyZWQ7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCiAgICAgbV9lbXB0eSA9IG1fbGl2
ZSAmIH5tX21hcmtpbmdOb3RFbXB0eTsKICAgICBtX2NhbkFsbG9jYXRlQnV0Tm90RW1wdHkgPSBt
X2xpdmUgJiBtX21hcmtpbmdOb3RFbXB0eSAmIH5tX21hcmtpbmdSZXRpcmVkOworICAgIGlmIChu
ZWVkc0Rlc3RydWN0aW9uKCkpIHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIHNvbWUgYmxvY2tzIHRo
YXQgd2UgZGlkbid0IGFsbG9jYXRlIG91dCBvZiBpbiB0aGUgbGFzdCBjeWNsZSwgYnV0IHdlIHN3
ZXB0IHRoZW0uIFRoaXMKKyAgICAgICAgLy8gd2lsbCBmb3JnZXQgdGhhdCB3ZSBkaWQgdGhhdCBh
bmQgd2Ugd2lsbCBlbmQgdXAgc3dlZXBpbmcgdGhlbSBhZ2FpbiBhbmQgYXR0ZW1wdGluZyB0byBj
YWxsIHRoZWlyCisgICAgICAgIC8vIGRlc3RydWN0b3JzIGFnYWluLiBUaGF0J3MgZmluZSBiZWNh
dXNlIG9mIHphcHBpbmcuIFRoZSBvbmx5IHRpbWUgd2hlbiB3ZSBjYW5ub3QgZm9yZ2V0IGlzIHdo
ZW4KKyAgICAgICAgLy8gd2UganVzdCBhbGxvY2F0ZSBhIGJsb2NrIG9yIHdoZW4gd2UgbW92ZSBh
IGJsb2NrIGZyb20gb25lIHNpemUgY2xhc3MgdG8gYW5vdGhlci4gVGhhdCBkb2Vzbid0CisgICAg
ICAgIC8vIGhhcHBlbiBoZXJlLgorICAgICAgICBtX2Rlc3RydWN0aWJsZSA9IG1fbGl2ZTsKKyAg
ICB9CiAgICAgCiAgICAgaWYgKGZhbHNlKSB7CiAgICAgICAgIGRhdGFMb2coIkJpdHMgZm9yICIs
IG1fY2VsbFNpemUsICIsICIsIG1fYXR0cmlidXRlcywgIiBhZnRlciBlbmRNYXJraW5nOlxuIik7
CkBAIC00MzcsNyArNDI1LDcgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnN3ZWVwKCkKIAogdm9p
ZCBNYXJrZWRBbGxvY2F0b3I6OnNocmluaygpCiB7Ci0gICAgbV9lbXB0eS5mb3JFYWNoU2V0Qml0
KAorICAgIChtX2VtcHR5ICYgfm1fZGVzdHJ1Y3RpYmxlKS5mb3JFYWNoU2V0Qml0KAogICAgICAg
ICBbJl0gKHNpemVfdCBpbmRleCkgewogICAgICAgICAgICAgbWFya2VkU3BhY2UoKS5mcmVlQmxv
Y2sobV9ibG9ja3NbaW5kZXhdKTsKICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkocmV2aXNpb24gMjE5Nzg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDkgKzQxLDEwIEBAIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogI2RlZmlu
ZSBGT1JfRUFDSF9NQVJLRURfQUxMT0NBVE9SX0JJVChtYWNybykgXAogICAgIG1hY3JvKGxpdmUs
IExpdmUpIC8qIFRoZSBzZXQgb2YgYmxvY2sgaW5kaWNlcyB0aGF0IGhhdmUgYWN0dWFsIGJsb2Nr
cy4gKi9cCi0gICAgbWFjcm8oZW1wdHksIEVtcHR5KSAvKiBUaGUgc2V0IG9mIGFsbCBibG9ja3Mg
dGhhdCBoYXZlIG5vIGxpdmUgb2JqZWN0cyBhbmQgbm90aGluZyB0byBkZXN0cm95LiAqLyBcCisg
ICAgbWFjcm8oZW1wdHksIEVtcHR5KSAvKiBUaGUgc2V0IG9mIGFsbCBibG9ja3MgdGhhdCBoYXZl
IG5vIGxpdmUgb2JqZWN0cy4gKi8gXAogICAgIG1hY3JvKGFsbG9jYXRlZCwgQWxsb2NhdGVkKSAv
KiBUaGUgc2V0IG9mIGFsbCBibG9ja3MgdGhhdCBhcmUgZnVsbCBvZiBsaXZlIG9iamVjdHMuICov
XAogICAgIG1hY3JvKGNhbkFsbG9jYXRlQnV0Tm90RW1wdHksIENhbkFsbG9jYXRlQnV0Tm90RW1w
dHkpIC8qIFRoZSBzZXQgb2YgYWxsIGJsb2NrcyBhcmUgbmVpdGhlciBlbXB0eSBub3IgcmV0aXJl
ZCAoaS5lLiBhcmUgbW9yZSB0aGFuIG1pbk1hcmtlZEJsb2NrVXRpbGl6YXRpb24gZnVsbCkuICov
IFwKKyAgICBtYWNybyhkZXN0cnVjdGlibGUsIERlc3RydWN0aWJsZSkgLyogVGhlIHNldCBvZiBh
bGwgYmxvY2tzIHRoYXQgbWF5IGhhdmUgZGVzdHJ1Y3RvcnMgdG8gcnVuLiAqL1wKICAgICBtYWNy
byhlZGVuLCBFZGVuKSAvKiBUaGUgc2V0IG9mIGFsbCBibG9ja3MgdGhhdCBoYXZlIG5ldyBvYmpl
Y3RzIHNpbmNlIHRoZSBsYXN0IEdDLiAqL1wKICAgICBtYWNybyh1bnN3ZXB0LCBVbnN3ZXB0KSAv
KiBUaGUgc2V0IG9mIGFsbCBibG9ja3MgdGhhdCBjb3VsZCBiZSBzd2VwdCBieSB0aGUgaW5jcmVt
ZW50YWwgc3dlZXBlci4gKi9cCiAgICAgXApAQCAtNjUsNjkgKzY2LDYgQEAgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwogLy8gaGFzIHRvIGxvb2sgYXQgYm90aCBiaXR2ZWN0b3JzLgogLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjEyMQogCi0vLyBOb3Rl
IHRoYXQgdGhpcyBjb2xsZWN0b3Igc3VwcG9ydHMgb3ZlcmxhcHBpbmcgYWxsb2NhdG9yIHN0YXRl
IHdpdGggbWFya2luZyBzdGF0ZSwgc2luY2UgaW4gYQotLy8gY29uY3VycmVudCBjb2xsZWN0b3Ig
eW91IGFsbG93IGFsbG9jYXRpb24gd2hpbGUgbWFya2luZyBpcyBydW5uaW5nLiBTbyBpdCdzIGJl
c3QgdG8gdmlzdWFsaXplIGEKLS8vIGZ1bGwgbXV0YWJsZS0+ZWRlbiBjb2xsZWN0LT5tdXRhdGUt
PmZ1bGwgY29sbGVjdCBjeWNsZSBhbmQgc2VlIGhvdyB0aGUgYml0cyBhYm92ZSBnZXQgYWZmZWN0
ZWQuCi0vLyBUaGUgZXhhbXBsZSBiZWxvdyB0cmllcyB0byBiZSBleGhhdXN0aXZlIGFib3V0IHdo
YXQgaGFwcGVucyB0byB0aGUgYml0cywgYnV0IG9taXRzIGEgbG90IG9mCi0vLyB0aGluZ3MgdGhh
dCBoYXBwZW4gdG8gb3RoZXIgc3RhdGUuCi0vLwotLy8gQ3JlYXRlIGFsbG9jYXRvcgotLy8gLSBh
bGwgYml0cyBhcmUgZW1wdHkKLS8vIFN0YXJ0IGFsbG9jYXRpbmcgaW4gc29tZSBibG9jawotLy8g
LSBhbGxvY2F0ZSB0aGUgYmxvY2sgYW5kIHNldCB0aGUgbGl2ZSBiaXQuCi0vLyAtIHRoZSBlbXB0
eSBiaXQgZm9yIHRoZSBibG9jayBmbGlja2VycyBvbiBhbmQgdGhlbiBnZXRzIGltbWVkaWF0ZWx5
IGNsZWFyZWQgYnkgc3dlZXBpbmcuCi0vLyAtIHNldCB0aGUgZWRlbiBiaXQuCi0vLyBGaW5pc2gg
YWxsb2NhdGluZyBpbiB0aGF0IGJsb2NrCi0vLyAtIHNldCB0aGUgYWxsb2NhdGVkIGJpdC4KLS8v
IERvIHRoYXQgdG8gYSBsb3Qgb2YgYmxvY2tzIGFuZCB0aGVuIHN0YXJ0IGFuIGVkZW4gY29sbGVj
dGlvbi4KLS8vIC0gYmVnaW5NYXJraW5nKCkgaGFzIG5vdGhpbmcgdG8gZG8uCi0vLyAtIGJ5IGRl
ZmF1bHQgd2UgaGF2ZSBjbGVhcmVkIG1hcmtpbmdOb3RFbXB0eS9tYXJraW5nUmV0aXJlZCBiaXRz
LgotLy8gLSBtYXJraW5nIGJ1aWxkcyB1cCBtYXJraW5nTm90RW1wdHkvbWFya2luZ1JldGlyZWQg
Yml0cy4KLS8vIFdlIGRvIGVuZE1hcmtpbmcoKQotLy8gLSBjbGVhciBhbGwgYWxsb2NhdGVkIGJp
dHMuCi0vLyAtIGZvciBkZXN0cnVjdG9yIGJsb2NrczogZnJhZ21lbnRlZCA9IGxpdmUgJiB+bWFy
a2luZ1JldGlyZWQKLS8vIC0gZm9yIG5vbi1kZXN0cnVjdG9yIGJsb2NrczoKLS8vICAgICAgIGVt
cHR5ID0gbGl2ZSAmIH5tYXJraW5nTm90RW1wdHkKLS8vICAgICAgIGZyYWdtZW50ZWQgPSBsaXZl
ICYgbWFya2luZ05vdEVtcHR5ICYgfm1hcmtpbmdSZXRpcmVkCi0vLyBTbmFwc2hvdHRpbmcuCi0v
LyAtIHVuc3dlcHQgfD0gZWRlbgotLy8gUHJlcGFyZSBmb3IgYWxsb2NhdGlvbi4KLS8vIC0gY2xl
YXIgZWRlbgotLy8gRmluaXNoIGNvbGxlY3Rpb24uCi0vLyBBbGxvY2F0ZSBpbiBzb21lIGJsb2Nr
IHRoYXQgaGFkIHNvbWUgZnJlZSBhbmQgc29tZSBsaXZlIG9iamVjdHMuCi0vLyAtIGNsZWFyIHRo
ZSBjYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IGJpdAotLy8gLSBjbGVhciB0aGUgdW5zd2VwdCBiaXQK
LS8vIC0gc2V0IHRoZSBlZGVuIGJpdAotLy8gRmluaXNoIGFsbG9jYXRpbmcgKHNldCB0aGUgYWxs
b2NhdGVkIGJpdCkuCi0vLyBBbGxvY2F0ZSBpbiBzb21lIGJsb2NrIHRoYXQgd2FzIGNvbXBsZXRl
bHkgZW1wdHkuCi0vLyAtIGNsZWFyIHRoZSBlbXB0eSBiaXQKLS8vIC0gY2xlYXIgdGhlIHVuc3dl
cHQgYml0Ci0vLyAtIHNldCB0aGUgZWRlbiBiaXQuCi0vLyBGaW5pc2ggYWxsb2NhdGluZyAoc2V0
IHRoZSBhbGxvY2F0ZWQgYml0KS4KLS8vIEFsbG9jYXRlIGluIHNvbWUgYmxvY2sgdGhhdCB3YXMg
Y29tcGxldGVseSBlbXB0eSBpbiBhbm90aGVyIGFsbG9jYXRvci4KLS8vIC0gY2xlYXIgdGhlIGVt
cHR5IGJpdAotLy8gLSBjbGVhciBhbGwgYml0cyBpbiB0aGF0IGFsbG9jYXRvcgotLy8gLSBzZXQg
dGhlIGxpdmUgYml0IGluIGFub3RoZXIgYWxsb2NhdG9yIGFuZCB0aGUgZW1wdHkgYml0LgotLy8g
LSBjbGVhciB0aGUgZW1wdHksIHVuc3dlcHQgYml0cy4KLS8vIC0gc2V0IHRoZSBlZGVuIGJpdC4K
LS8vIEZpbmlzaCBhbGxvY2F0aW5nIChzZXQgdGhlIGFsbG9jYXRlZCBiaXQpLgotLy8gU3RhcnQg
YSBmdWxsIGNvbGxlY3Rpb24uCi0vLyAtIGJlZ2luTWFya2luZygpIGNsZWFycyBtYXJraW5nTm90
RW1wdHksIG1hcmtpbmdSZXRpcmVkCi0vLyAtIHRoZSBoZWFwIHZlcnNpb24gaXMgaW5jcmVtZW50
ZWQKLS8vIC0gbWFya2luZyByZWJ1aWxkcyBtYXJraW5nTm90RW1wdHkvbWFya2luZ3JldGlyZWQg
Yml0cy4KLS8vIFdlIGRvIGVuZE1hcmtpbmcoKQotLy8gLSBjbGVhciBhbGwgYWxsb2NhdGVkIGJp
dHMuCi0vLyAtIHNldCBjYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5L2VtcHR5IHRoZSBzYW1lIHdheSBh
cyBpbiBlZGVuIGNvbGxlY3Rpb24uCi0vLyBTbmFwc2hvdHRpbmcuCi0vLyAtIHVuc3dlcHQgPSBs
aXZlCi0vLyBwcmVwYXJlIGZvciBhbGxvY2F0aW9uLgotLy8gLSBjbGVhciBlZGVuLgotLy8gRmlu
aXNoIGNvbGxlY3Rpb24uCi0vLwotLy8gTm90aWNlIGhvdyBpbiB0aGlzIHNjaGVtZSwgdGhlIGVt
cHR5L2NhbkFsbG9jYXRlQnV0Tm90RW1wdHkgc3RhdGUgc3RheXMgc2VwYXJhdGUgZnJvbSB0aGUK
LS8vIG1hcmtpbmdOb3RFbXB0eS9tYXJraW5nUmV0aXJlZCBzdGF0ZS4gVGhpcyBpcyBvbmUgc3Rl
cCB0b3dhcmRzIGhhdmluZyBzZXBhcmF0ZWQgYWxsb2NhdGlvbiBhbmQKLS8vIG1hcmtpbmcgc3Rh
dGUuCi0KIGNsYXNzIE1hcmtlZEFsbG9jYXRvciB7CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zm
c2V0c0V4dHJhY3RvcjsKIApAQCAtMjE3LDggKzE1NSw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2NrOwogICAgIAotICAgIGJvb2wgc2hvdWxkU3RlYWxF
bXB0eUJsb2Nrc0Zyb21PdGhlckFsbG9jYXRvcnMoKSBjb25zdDsKLSAgICAKICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0Kik7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFs
Q29udGV4dCopOwogICAgIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKEdDRGVmZXJyYWxDb250
ZXh0KiwgYm9vbCBjcmFzaE9uRmFpbHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAyMTk3ODkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0
LDI2IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKworbmFtZXNwYWNlIHsKKworTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBORVZFUl9J
TkxJTkUgdm9pZCBjcmFzaCgpCit7CisgICAgQ1JBU0goKTsKK30KKworI3VuZGVmIFJFTEVBU0Vf
QVNTRVJUCisjZGVmaW5lIFJFTEVBU0VfQVNTRVJUKGFzc2VydGlvbikgZG8geyBcCisgICAgaWYg
KCEoYXNzZXJ0aW9uKSkgeyBcCisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoX19G
SUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjYXNzZXJ0aW9uKTsgXAorICAg
ICAgICBjcmFzaCgpOyBcCisgICAgfSBcCit9IHdoaWxlICgwKQorCit9IC8vIGFub255bW91cyBu
YW1lc3BhY2UKKwogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAKICNpbmNsdWRlICJGcmVlTGlz
dElubGluZXMuaCIKQEAgLTE1Miw2ICsxNzIsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OnN0b3BBbGxvY2F0aW5nCiB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6Omxhc3RDaGFuY2VUb0Zp
bmFsaXplKCkKIHsKICAgICBhbGxvY2F0b3IoKS0+c2V0SXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVj
ZXNzYXJ5LCB0aGlzLCBmYWxzZSk7CisgICAgYWxsb2NhdG9yKCktPnNldElzRGVzdHJ1Y3RpYmxl
KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgdHJ1ZSk7CiAgICAgbV9ibG9jay0+bV9tYXJrcy5j
bGVhckFsbCgpOwogICAgIG1fYmxvY2stPmNsZWFySGFzQW55TWFya2VkKCk7CiAgICAgbV9ibG9j
ay0+bV9tYXJraW5nVmVyc2lvbiA9IGhlYXAoKS0+b2JqZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lv
bigpOwpAQCAtNDAzLDggKzQyNCwxMSBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVw
KEZyZWVMaXN0CiAgICAgbV9hbGxvY2F0b3ItPnNldElzVW5zd2VwdChOb0xvY2tpbmdOZWNlc3Nh
cnksIHRoaXMsIGZhbHNlKTsKICAgICAKICAgICBtX3dlYWtTZXQuc3dlZXAoKTsKKyAgICAKKyAg
ICBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVl
ZHNEZXN0cnVjdGlvbgorICAgICAgICAmJiBtX2FsbG9jYXRvci0+aXNEZXN0cnVjdGlibGUoTm9M
b2NraW5nTmVjZXNzYXJ5LCB0aGlzKTsKIAotICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBPbmx5
ICYmIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBEb2VzTm90TmVlZERlc3RydWN0aW9uKQor
ICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBPbmx5ICYmICFuZWVkc0Rlc3RydWN0aW9uKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoVU5MSUtFTFkobV9pc0ZyZWVMaXN0ZWQpKSB7CkBAIC00
MTcsNyArNDQxLDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChGcmVlTGlzdAog
ICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKICAgICAgICAgYmxvY2soKS5tX2xvY2subG9j
aygpOwogICAgIAotICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0
cnVjdGlvbikgeworICAgIGlmIChuZWVkc0Rlc3RydWN0aW9uKSB7CiAgICAgICAgIHN1YnNwYWNl
KCktPmZpbmlzaFN3ZWVwKCp0aGlzLCBmcmVlTGlzdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGlu
ZXMuaAkocmV2aXNpb24gMjE5Nzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw2ICsxNjEsMTcgQEAgdm9p
ZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZQogICAgIAogICAgIHVuc2lnbmVk
IGNlbGxTaXplID0gdGhpcy0+Y2VsbFNpemUoKTsKICAgICAKKyAgICBWTSYgdm0gPSAqdGhpcy0+
dm0oKTsKKyAgICBhdXRvIGRlc3Ryb3kgPSBbJl0gKHZvaWQqIGNlbGwpIHsKKyAgICAgICAgSlND
ZWxsKiBqc0NlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihjZWxsKTsKKyAgICAgICAgaWYgKCFq
c0NlbGwtPmlzWmFwcGVkKCkpIHsKKyAgICAgICAgICAgIGRlc3Ryb3lGdW5jKHZtLCBqc0NlbGwp
OworICAgICAgICAgICAganNDZWxsLT56YXAoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgCisg
ICAgbV9hbGxvY2F0b3ItPnNldElzRGVzdHJ1Y3RpYmxlKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhp
cywgZmFsc2UpOworICAgIAogICAgIGlmIChPcHRpb25zOjp1c2VCdW1wQWxsb2NhdG9yKCkKICAg
ICAgICAgJiYgZW1wdHlNb2RlID09IElzRW1wdHkKICAgICAgICAgJiYgbmV3bHlBbGxvY2F0ZWRN
b2RlID09IERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQpIHsKQEAgLTE4MSwxNCArMTkyLDE3IEBA
IHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2UKICAgICAgICAgY2hhciog
cGF5bG9hZEVuZCA9IHN0YXJ0T2ZMYXN0Q2VsbCArIGNlbGxTaXplOwogICAgICAgICBSRUxFQVNF
X0FTU0VSVChwYXlsb2FkRW5kIC0gTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSA8PSBiaXR3aXNlX2Nh
c3Q8Y2hhcio+KCZibG9jaykpOwogICAgICAgICBjaGFyKiBwYXlsb2FkQmVnaW4gPSBiaXR3aXNl
X2Nhc3Q8Y2hhcio+KGJsb2NrLmF0b21zKCkgKyBmaXJzdEF0b20oKSk7Ci0gICAgICAgIGlmIChz
Y3JpYmJsZU1vZGUgPT0gU2NyaWJibGUpCi0gICAgICAgICAgICBzY3JpYmJsZShwYXlsb2FkQmVn
aW4sIHBheWxvYWRFbmQgLSBwYXlsb2FkQmVnaW4pOworICAgICAgICAKICAgICAgICAgaWYgKHN3
ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpCiAgICAgICAgICAgICBzZXRJc0ZyZWVMaXN0ZWQo
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9hbGxvY2F0b3ItPnNldElzRW1wdHkoTm9M
b2NraW5nTmVjZXNzYXJ5LCB0aGlzLCB0cnVlKTsKICAgICAgICAgaWYgKHNwYWNlKCktPmlzTWFy
a2luZygpKQogICAgICAgICAgICAgYmxvY2subV9sb2NrLnVubG9jaygpOworICAgICAgICBpZiAo
ZGVzdHJ1Y3Rpb25Nb2RlICE9IEJsb2NrSGFzTm9EZXN0cnVjdG9ycykgeworICAgICAgICAgICAg
Zm9yIChjaGFyKiBjZWxsID0gcGF5bG9hZEJlZ2luOyBjZWxsIDwgcGF5bG9hZEVuZDsgY2VsbCAr
PSBjZWxsU2l6ZSkKKyAgICAgICAgICAgICAgICBkZXN0cm95KGNlbGwpOworICAgICAgICB9Cisg
ICAgICAgIGlmIChzY3JpYmJsZU1vZGUgPT0gU2NyaWJibGUpCisgICAgICAgICAgICBzY3JpYmJs
ZShwYXlsb2FkQmVnaW4sIHBheWxvYWRFbmQgLSBwYXlsb2FkQmVnaW4pOwogICAgICAgICBpZiAo
c3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkKICAgICAgICAgICAgIGZyZWVMaXN0LT5pbml0
aWFsaXplQnVtcChwYXlsb2FkRW5kLCBwYXlsb2FkRW5kIC0gcGF5bG9hZEJlZ2luKTsKICAgICAg
ICAgaWYgKGZhbHNlKQpAQCAtMjA1LDE3ICsyMTksMTEgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpzcGVjaWFsaXplZFN3ZQogICAgIGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzKCZz
ZWNyZXQsIHNpemVvZih1aW50cHRyX3QpKTsKICAgICBib29sIGlzRW1wdHkgPSB0cnVlOwogICAg
IFZlY3RvcjxzaXplX3Q+IGRlYWRDZWxsczsKLSAgICBWTSYgdm0gPSAqdGhpcy0+dm0oKTsKICAg
ICBhdXRvIGhhbmRsZURlYWRDZWxsID0gWyZdIChzaXplX3QgaSkgewogICAgICAgICBIZWFwQ2Vs
bCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEhlYXBDZWxsKj4oJmJsb2NrLmF0b21zKClb
aV0pOwogCi0gICAgICAgIGlmIChkZXN0cnVjdGlvbk1vZGUgIT0gQmxvY2tIYXNOb0Rlc3RydWN0
b3JzICYmIGVtcHR5TW9kZSA9PSBOb3RFbXB0eSkgewotICAgICAgICAgICAgSlNDZWxsKiBqc0Nl
bGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihjZWxsKTsKLSAgICAgICAgICAgIGlmICghanNDZWxs
LT5pc1phcHBlZCgpKSB7Ci0gICAgICAgICAgICAgICAgZGVzdHJveUZ1bmModm0sIGpzQ2VsbCk7
Ci0gICAgICAgICAgICAgICAganNDZWxsLT56YXAoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQorICAgICAgICBpZiAoZGVzdHJ1Y3Rpb25Nb2RlICE9IEJsb2NrSGFzTm9EZXN0cnVjdG9ycyAm
JiBlbXB0eU1vZGUgPT0gTm90RW1wdHkpCisgICAgICAgICAgICBkZXN0cm95KGNlbGwpOwogCiAg
ICAgICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KSB7CiAgICAgICAgICAgICBG
cmVlQ2VsbCogZnJlZUNlbGwgPSByZWludGVycHJldF9jYXN0X3B0cjxGcmVlQ2VsbCo+KGNlbGwp
OwpAQCAtMjczLDI0ICsyODEsNTYgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpmaW5pc2hT
d2VlcEtubwogICAgIE1hcmtzTW9kZSBtYXJrc01vZGUgPSB0aGlzLT5tYXJrc01vZGUoKTsKIAog
ICAgIGF1dG8gdHJ5U3BlY2lhbGl6ZWQgPSBbJl0gKCkgLT4gYm9vbCB7Ci0gICAgICAgIGlmIChz
d2VlcE1vZGUgIT0gU3dlZXBUb0ZyZWVMaXN0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBpZiAoc2NyaWJibGVNb2RlICE9IERvbnRTY3JpYmJsZSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgaWYgKG5ld2x5QWxsb2NhdGVkTW9kZSAhPSBEb2VzTm90SGF2
ZU5ld2x5QWxsb2NhdGVkKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAo
ZGVzdHJ1Y3Rpb25Nb2RlICE9IEJsb2NrSGFzRGVzdHJ1Y3RvcnMpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGlmIChlbXB0eU1vZGUgPT0gSXNFbXB0eSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIHN3aXRjaCAobWFya3NNb2RlKSB7Ci0g
ICAgICAgIGNhc2UgTWFya3NOb3RTdGFsZToKLSAgICAgICAgICAgIHNwZWNpYWxpemVkU3dlZXA8
dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9u
dFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlPihmcmVl
TGlzdCwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250
U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGUsIGRlc3Ry
b3lGdW5jKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBjYXNlIE1hcmtzU3Rh
bGU6Ci0gICAgICAgICAgICBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRv
RnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVO
ZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZnJlZUxpc3QsIElzRW1wdHksIFN3ZWVwVG9GcmVl
TGlzdCwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5
QWxsb2NhdGVkLCBNYXJrc1N0YWxlLCBkZXN0cm95RnVuYyk7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgc3dpdGNoIChlbXB0eU1vZGUpIHsKKyAgICAgICAgY2FzZSBJc0VtcHR5
OgorICAgICAgICAgICAgc3dpdGNoIChzd2VlcE1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgU3dl
ZXBPbmx5OgorICAgICAgICAgICAgICAgIHN3aXRjaCAobWFya3NNb2RlKSB7CisgICAgICAgICAg
ICAgICAgY2FzZSBNYXJrc05vdFN0YWxlOgorICAgICAgICAgICAgICAgICAgICBzcGVjaWFsaXpl
ZFN3ZWVwPHRydWUsIElzRW1wdHksIFN3ZWVwT25seSwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9u
dFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlPihmcmVl
TGlzdCwgSXNFbXB0eSwgU3dlZXBPbmx5LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJi
bGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGUsIGRlc3Ryb3lGdW5j
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgY2Fz
ZSBNYXJrc1N0YWxlOgorICAgICAgICAgICAgICAgICAgICBzcGVjaWFsaXplZFN3ZWVwPHRydWUs
IElzRW1wdHksIFN3ZWVwT25seSwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBE
b2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihmcmVlTGlzdCwgSXNFbXB0eSwg
U3dlZXBPbmx5LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZl
TmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGUsIGRlc3Ryb3lGdW5jKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBT
d2VlcFRvRnJlZUxpc3Q6CisgICAgICAgICAgICAgICAgc3dpdGNoIChtYXJrc01vZGUpIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIE1hcmtzTm90U3RhbGU6CisgICAgICAgICAgICAgICAgICAgIHNw
ZWNpYWxpemVkU3dlZXA8dHJ1ZSwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rl
c3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtz
Tm90U3RhbGU+KGZyZWVMaXN0LCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVz
dHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NO
b3RTdGFsZSwgZGVzdHJveUZ1bmMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBjYXNlIE1hcmtzU3RhbGU6CisgICAgICAgICAgICAgICAgICAgIHNw
ZWNpYWxpemVkU3dlZXA8dHJ1ZSwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rl
c3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtz
U3RhbGU+KGZyZWVMaXN0LCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1
Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFs
ZSwgZGVzdHJveUZ1bmMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgTm90RW1wdHk6CisgICAg
ICAgICAgICBzd2l0Y2ggKHN3ZWVwTW9kZSkgeworICAgICAgICAgICAgY2FzZSBTd2VlcE9ubHk6
CisgICAgICAgICAgICAgICAgc3dpdGNoIChtYXJrc01vZGUpIHsKKyAgICAgICAgICAgICAgICBj
YXNlIE1hcmtzTm90U3RhbGU6CisgICAgICAgICAgICAgICAgICAgIHNwZWNpYWxpemVkU3dlZXA8
dHJ1ZSwgTm90RW1wdHksIFN3ZWVwT25seSwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmli
YmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlPihmcmVlTGlzdCwg
SXNFbXB0eSwgU3dlZXBPbmx5LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERv
ZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGUsIGRlc3Ryb3lGdW5jKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgY2FzZSBNYXJr
c1N0YWxlOgorICAgICAgICAgICAgICAgICAgICBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIE5vdEVt
cHR5LCBTd2VlcE9ubHksIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05v
dEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZnJlZUxpc3QsIElzRW1wdHksIFN3ZWVw
T25seSwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5
QWxsb2NhdGVkLCBNYXJrc1N0YWxlLCBkZXN0cm95RnVuYyk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgU3dlZXBU
b0ZyZWVMaXN0OgorICAgICAgICAgICAgICAgIHN3aXRjaCAobWFya3NNb2RlKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSBNYXJrc05vdFN0YWxlOgorICAgICAgICAgICAgICAgICAgICBzcGVjaWFs
aXplZFN3ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1
Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RT
dGFsZT4oZnJlZUxpc3QsIElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNEZXN0cnVj
dG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0
YWxlLCBkZXN0cm95RnVuYyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgICAgIGNhc2UgTWFya3NTdGFsZToKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lh
bGl6ZWRTd2VlcDx0cnVlLCBOb3RFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3Ry
dWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3Rh
bGU+KGZyZWVMaXN0LCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3Rv
cnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZSwg
ZGVzdHJveUZ1bmMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTMyMCw4ICszNjAsNiBAQCBpbmxpbmUgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6RW1wdHlNb2RlIE1hCiAgICAgLy8gLSBJdCdzIHRydWUgd2hlbiB0aGUgYmxvY2sgaXMgZnJl
c2hseSBhbGxvY2F0ZWQuCiAgICAgLy8gLSBJdCdzIHRydWUgaWYgdGhlIGJsb2NrIGhhZCBiZWVu
IHN3ZXB0IGluIHRoZSBwYXN0LCBhbGwgZGVzdHJ1Y3RvcnMgd2VyZSBjYWxsZWQsIGFuZCB0aGF0
CiAgICAgLy8gICBzd2VlcCBwcm92ZWQgdGhhdCB0aGUgYmxvY2sgaXMgZW1wdHkuCi0gICAgLy8g
LSBJdCdzIGZhbHNlIGlmIHRoZXJlIGFyZSBhbnkgZGVzdHJ1Y3RvcnMgdGhhdCBuZWVkIHRvIGJl
IGNhbGxlZCwgZXZlbiBpZiB0aGUgYmxvY2sgaGFzIG5vCi0gICAgLy8gICBsaXZlIG9iamVjdHMu
CiAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLT5pc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhp
cykgPyBJc0VtcHR5IDogTm90RW1wdHk7CiB9CiAK
</data>
<flag name="review"
          id="337038"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>