<?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>128540</bug_id>
          
          <creation_ts>2014-02-10 09:49:22 -0800</creation_ts>
          <short_desc>Obj-C API: JSExport doesn&apos;t work for methods that contain protocols in their type signature</short_desc>
          <delta_ts>2014-02-11 09:39:39 -0800</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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>978931</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-02-10 09:49:22 -0800</bug_when>
    <thetext>The bug is in parseObjCType in ObjcRuntimeExtras.h. When we see an &apos;@&apos; in the type signature of a method, we assume that what follows the &apos;@&apos; is a class name, so we call objc_getClass, and if that returns nil then we give up on the method and don&apos;t export it.

This assumption doesn&apos;t work in the case of id&lt;Protocol&gt; because it&apos;s the name of the protocol that follows the &apos;@&apos;, not the name of a class. We should have another fallback case for protocol names.

There&apos;s another case that also doesn&apos;t work, and that&apos;s the case of a named class with a specified prototype in a method signature (e.g. NSObject&lt;MyProtocol&gt;). There the substring of the type signature that represents the class is &quot;NSObject&lt;MyProtocol&gt;&quot;, which will also cause objc_getClass to return nil.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978933</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-02-10 09:49:43 -0800</bug_when>
    <thetext>&lt;rdar://problem/15954242&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978971</commentid>
    <comment_count>2</comment_count>
      <attachid>223728</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-02-10 11:21:07 -0800</bug_when>
    <thetext>Created attachment 223728
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978973</commentid>
    <comment_count>3</comment_count>
      <attachid>223728</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-10 11:25:05 -0800</bug_when>
    <thetext>Comment on attachment 223728
Patch

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

&gt; Source/JavaScriptCore/API/ObjcRuntimeExtras.h:198
&gt; +                position = index(++position, &apos;&quot;&apos;) + 1;

This feels at first like something that would give you victory at the IOCCC.  I eventually figured it.  But maybe you an come up with a better idiom for this at some point?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978977</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-02-10 11:34:27 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 223728 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=223728&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/API/ObjcRuntimeExtras.h:198
&gt; &gt; +                position = index(++position, &apos;&quot;&apos;) + 1;
&gt; 
&gt; This feels at first like something that would give you victory at the IOCCC.  I eventually figured it.  But maybe you an come up with a better idiom for this at some point?

I guess at this point, begin == position and we don&apos;t need to increment anything because we already know we&apos;re not pointing at a &apos;&quot;&apos;, so i can just change it to:

position = index(begin, &apos;&quot;&apos;) + 1;

Copy, paste, modify...not even once.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978980</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-02-10 11:40:51 -0800</bug_when>
    <thetext>&gt; This feels at first like something that would give you victory at the IOCCC.

Probably only second place, if Gavin also entered.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978982</commentid>
    <comment_count>6</comment_count>
      <attachid>223729</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-02-10 11:43:25 -0800</bug_when>
    <thetext>Created attachment 223729
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978983</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-02-10 11:43:51 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created an attachment (id=223729) [details]
&gt; Patch

I decided to take Phil&apos;s advice to heart and actually write this code in a more understandable fashion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>979417</commentid>
    <comment_count>8</comment_count>
      <attachid>223729</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-11 08:22:42 -0800</bug_when>
    <thetext>Comment on attachment 223729
Patch

Clearing flags on attachment: 223729

Committed r163876: &lt;http://trac.webkit.org/changeset/163876&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>979418</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-11 08:22:44 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>979427</commentid>
    <comment_count>10</comment_count>
      <attachid>223729</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-02-11 08:40:44 -0800</bug_when>
    <thetext>Comment on attachment 223729
Patch

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

&gt; Source/JavaScriptCore/API/ObjcRuntimeExtras.h:197
&gt; +            const char* protocolPosition = index(begin, &apos;&lt;&apos;);
&gt; +            const char* endOfType = index(begin, &apos;&quot;&apos;);

It’s a little strange that we use index() here instead of strchr(). I think that index() is an archaic, pre-standardization, name for the same thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>979473</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-02-11 09:39:39 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 223729 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=223729&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/API/ObjcRuntimeExtras.h:197
&gt; &gt; +            const char* protocolPosition = index(begin, &apos;&lt;&apos;);
&gt; &gt; +            const char* endOfType = index(begin, &apos;&quot;&apos;);
&gt; 
&gt; It’s a little strange that we use index() here instead of strchr(). I think that index() is an archaic, pre-standardization, name for the same thing.

index() does look like it&apos;s been deprecated in favor of strchr(). I filed bug 128610 to get rid index() in ObjcRuntimeExtras.h</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223728</attachid>
            <date>2014-02-10 11:21:07 -0800</date>
            <delta_ts>2014-02-10 11:43:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-128540-20140210112106.patch</filename>
            <type>text/plain</type>
            <size>14937</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzODAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDE0LTAyLTEwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgT2JqLUMgQVBJOiBKU0V4cG9ydCBkb2Vzbid0IHdvcmsgZm9yIG1ldGhvZHMgdGhh
dCBjb250YWluIHByb3RvY29scyBpbiB0aGVpciB0eXBlIHNpZ25hdHVyZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI4NTQwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGJ1ZyBpcyBpbiBwYXJzZU9i
akNUeXBlIGluIE9iamNSdW50aW1lRXh0cmFzLmguIFdoZW4gd2Ugc2VlIGFuICdAJyBpbiB0aGUg
CisgICAgICAgIHR5cGUgc2lnbmF0dXJlIG9mIGEgbWV0aG9kLCB3ZSBhc3N1bWUgdGhhdCB3aGF0
IGZvbGxvd3MgdGhlICdAJyBpcyBhIGNsYXNzIG5hbWUsIAorICAgICAgICBzbyB3ZSBjYWxsIG9i
amNfZ2V0Q2xhc3MsIGFuZCBpZiB0aGF0IHJldHVybnMgbmlsIHRoZW4gd2UgZ2l2ZSB1cCBvbiB0
aGUgbWV0aG9kIAorICAgICAgICBhbmQgZG9uJ3QgZXhwb3J0IGl0LgorCisgICAgICAgIFRoaXMg
YXNzdW1wdGlvbiBkb2Vzbid0IHdvcmsgaW4gdGhlIGNhc2Ugb2YgaWQ8UHJvdG9jb2w+IGJlY2F1
c2UgaXQncyB0aGUgbmFtZSAKKyAgICAgICAgb2YgdGhlIHByb3RvY29sIHRoYXQgZm9sbG93cyB0
aGUgJ0AnLCBub3QgdGhlIG5hbWUgb2YgYSBjbGFzcy4gV2Ugc2hvdWxkIGhhdmUgCisgICAgICAg
IGFub3RoZXIgZmFsbGJhY2sgY2FzZSBmb3IgcHJvdG9jb2wgbmFtZXMuCisKKyAgICAgICAgVGhl
cmUncyBhbm90aGVyIGNhc2UgdGhhdCBhbHNvIGRvZXNuJ3Qgd29yaywgYW5kIHRoYXQncyB0aGUg
Y2FzZSBvZiBhIG5hbWVkIGNsYXNzIAorICAgICAgICB3aXRoIGEgc3BlY2lmaWVkIHByb3RvdHlw
ZSBpbiBhIG1ldGhvZCBzaWduYXR1cmUgKGUuZy4gTlNPYmplY3Q8TXlQcm90b2NvbD4pLiAKKyAg
ICAgICAgVGhlcmUgdGhlIHN1YnN0cmluZyBvZiB0aGUgdHlwZSBzaWduYXR1cmUgdGhhdCByZXBy
ZXNlbnRzIHRoZSBjbGFzcyBpcyAiTlNPYmplY3Q8TXlQcm90b2NvbD4iLCAKKyAgICAgICAgd2hp
Y2ggd2lsbCBhbHNvIGNhdXNlIG9iamNfZ2V0Q2xhc3MgdG8gcmV0dXJuIG5pbC4KKworICAgICAg
ICAqIEFQSS9PYmpjUnVudGltZUV4dHJhcy5oOgorICAgICAgICAocGFyc2VPYmpDVHlwZSk6Cisg
ICAgICAgICogQVBJL3Rlc3RzL0RhdGVUZXN0cy5tbTogQWxzbyBmaXhlZCBhbiBpc3N1ZSBJIG5v
dGljZWQgd2hlcmUgd2UgZG9uJ3QgdXNlIGFuIGF1dG9yZWxlYXNlIHBvb2wKKyAgICAgICAgZm9y
IHRoZSBEYXRlVGVzdHMuCisgICAgICAgICogQVBJL3Rlc3RzL0pTRXhwb3J0VGVzdHMuaDogQWRk
ZWQuCisgICAgICAgICogQVBJL3Rlc3RzL0pTRXhwb3J0VGVzdHMubW06IEFkZGVkLgorICAgICAg
ICAoLVtUcnV0aFRlbGxlciByZXR1cm5UcnVlXSk6CisgICAgICAgICgtW0V4cG9ydE1ldGhvZFdp
dGhJZFByb3RvY29sIG1ldGhvZFdpdGhJZFByb3RvY29sOl0pOgorICAgICAgICAoLVtFeHBvcnRN
ZXRob2RXaXRoQ2xhc3NQcm90b2NvbCBtZXRob2RXaXRoQ2xhc3NQcm90b2NvbDpdKToKKyAgICAg
ICAgKCtbSlNFeHBvcnRUZXN0cyBleHBvcnRJbnN0YW5jZU1ldGhvZFdpdGhJZFByb3RvY29sVGVz
dF0pOgorICAgICAgICAoK1tKU0V4cG9ydFRlc3RzIGV4cG9ydEluc3RhbmNlTWV0aG9kV2l0aENs
YXNzUHJvdG9jb2xUZXN0XSk6CisgICAgICAgIChydW5KU0V4cG9ydFRlc3RzKToKKyAgICAgICAg
KiBBUEkvdGVzdHMvdGVzdGFwaS5tbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE0LTAyLTEwICBQZXRlciBNb2xuYXIgIDxwbW9sbmFy
LnUtc3plZ2VkQHBhcnRuZXIuc2Ftc3VuZy5jb20+CiAKICAgICAgICAgUmVtb3ZlIGV4dHJhIGlu
Y2x1ZGVzIGZyb20gREZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iamNSdW50
aW1lRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpj
UnVudGltZUV4dHJhcy5oCShyZXZpc2lvbiAxNjM3OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL09iamNSdW50aW1lRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw4ICsxOTMs
MjIgQEAgdHlwZW5hbWUgRGVsZWdhdGVUeXBlOjpSZXN1bHRUeXBlIHBhcnNlTwogCiAgICAgICAg
IGlmICgqcG9zaXRpb24gPT0gJyInKSB7CiAgICAgICAgICAgICBjb25zdCBjaGFyKiBiZWdpbiA9
ICsrcG9zaXRpb247Ci0gICAgICAgICAgICBwb3NpdGlvbiA9IGluZGV4KHBvc2l0aW9uLCAnIicp
OwotICAgICAgICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dHlwZU9mQ2xhc3MoYmVnaW4sIHBv
c2l0aW9uKyspOworICAgICAgICAgICAgLy8gV2Ugc2tpcHBlZCB0aGUgY2xhc3MgbmFtZSBhbmQg
d2VudCBzdHJhaWdodCB0byB0aGUgcHJvdG9jb2wsIHNvIHRoaXMgaXMgYW4gaWQgdHlwZS4KKyAg
ICAgICAgICAgIGlmICgqYmVnaW4gPT0gJzwnKSB7CisgICAgICAgICAgICAgICAgcG9zaXRpb24g
PSBpbmRleCgrK3Bvc2l0aW9uLCAnIicpICsgMTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRGVs
ZWdhdGVUeXBlOjp0eXBlSWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN0IGNo
YXIqIHByb3RvY29sUG9zaXRpb24gPSBpbmRleChwb3NpdGlvbiwgJzwnKTsKKyAgICAgICAgICAg
IGNvbnN0IGNoYXIqIGVuZE9mVHlwZSA9IGluZGV4KHBvc2l0aW9uLCAnIicpOworICAgICAgICAg
ICAgLy8gVGhlcmUncyBubyBwcm90b2NvbCBpbnZvbHZlZCBpbiB0aGlzIHR5cGUsIHNvIGp1c3Qg
aGFuZGxlIHRoZSBjbGFzcyBuYW1lLgorICAgICAgICAgICAgaWYgKCFwcm90b2NvbFBvc2l0aW9u
IHx8IHByb3RvY29sUG9zaXRpb24gPiBlbmRPZlR5cGUpIHsKKyAgICAgICAgICAgICAgICBwb3Np
dGlvbiA9IGVuZE9mVHlwZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0
eXBlT2ZDbGFzcyhiZWdpbiwgcG9zaXRpb24rKyk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAvLyBXZSBoYXZlIGEgY2xhc3MgbmFtZSB3aXRoIGEgcHJvdG9jb2wuCisgICAgICAgICAgICB0
eXBlbmFtZSBEZWxlZ2F0ZVR5cGU6OlJlc3VsdFR5cGUgcmVzdWx0ID0gRGVsZWdhdGVUeXBlOjp0
eXBlT2ZDbGFzcyhiZWdpbiwgcHJvdG9jb2xQb3NpdGlvbik7CisgICAgICAgICAgICBwb3NpdGlv
biA9IGVuZE9mVHlwZSArIDE7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9
CiAKICAgICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dHlwZUlkKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0RhdGVUZXN0cy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0RhdGVUZXN0cy5tbQkocmV2aXNpb24gMTYzNzky
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9EYXRlVGVzdHMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTE0MiwxMCArMTQyLDEyIEBAICsgKHZvaWQpIHJvdW5kVHJpcFRocm91Z2hP
YmpDRGF0ZVRlc3QKIAogdm9pZCBydW5EYXRlVGVzdHMoKQogewotICAgIFtEYXRlVGVzdHMgTlNE
YXRlVG9KU0RhdGVUZXN0XTsKLSAgICBbRGF0ZVRlc3RzIEpTRGF0ZVRvTlNEYXRlVGVzdF07Ci0g
ICAgW0RhdGVUZXN0cyByb3VuZFRyaXBUaHJvdWdoSlNEYXRlVGVzdF07Ci0gICAgW0RhdGVUZXN0
cyByb3VuZFRyaXBUaHJvdWdoT2JqQ0RhdGVUZXN0XTsKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsK
KyAgICAgICAgW0RhdGVUZXN0cyBOU0RhdGVUb0pTRGF0ZVRlc3RdOworICAgICAgICBbRGF0ZVRl
c3RzIEpTRGF0ZVRvTlNEYXRlVGVzdF07CisgICAgICAgIFtEYXRlVGVzdHMgcm91bmRUcmlwVGhy
b3VnaEpTRGF0ZVRlc3RdOworICAgICAgICBbRGF0ZVRlc3RzIHJvdW5kVHJpcFRocm91Z2hPYmpD
RGF0ZVRlc3RdOworICAgIH0KIH0KIAogI2VuZGlmIC8vIEpTQ19PQkpDX0FQSV9FTkFCTEVECklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0pTRXhwb3J0VGVzdHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0pTRXhwb3J0VGVzdHMu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvSlNFeHBv
cnRUZXN0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLmg+CisKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAorCit2b2lkIHJ1
bkpTRXhwb3J0VGVzdHMoKTsKKworI2VuZGlmIC8vIEpTQ19PQkpDX0FQSV9FTkFCTEVECisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvSlNFeHBvcnRUZXN0cy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0pTRXhwb3J0VGVzdHMu
bW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0pTRXhw
b3J0VGVzdHMubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0ICJKU0V4cG9ydFRlc3RzLmgiCisKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAor
CitleHRlcm4gIkMiIHZvaWQgY2hlY2tSZXN1bHQoTlNTdHJpbmcgKmRlc2NyaXB0aW9uLCBib29s
IHBhc3NlZCk7CisKK0BpbnRlcmZhY2UgSlNFeHBvcnRUZXN0cyA6IE5TT2JqZWN0CisrICh2b2lk
KSBleHBvcnRJbnN0YW5jZU1ldGhvZFdpdGhJZFByb3RvY29sVGVzdDsKKysgKHZvaWQpIGV4cG9y
dEluc3RhbmNlTWV0aG9kV2l0aENsYXNzUHJvdG9jb2xUZXN0OworQGVuZAorCitAcHJvdG9jb2wg
VHJ1dGhUZWxsZXIKKy0gKEJPT0wpIHJldHVyblRydWU7CitAZW5kCisKK0BpbnRlcmZhY2UgVHJ1
dGhUZWxsZXIgOiBOU09iamVjdDxUcnV0aFRlbGxlcj4KK0BlbmQKKworQGltcGxlbWVudGF0aW9u
IFRydXRoVGVsbGVyCistIChCT09MKSByZXR1cm5UcnVlCit7CisgICAgcmV0dXJuIHRydWU7Cit9
CitAZW5kCisKK0Bwcm90b2NvbCBFeHBvcnRNZXRob2RXaXRoSWRQcm90b2NvbCA8SlNFeHBvcnQ+
CistICh2b2lkKSBtZXRob2RXaXRoSWRQcm90b2NvbDooaWQ8VHJ1dGhUZWxsZXI+KW9iamVjdDsK
K0BlbmQKKworQGludGVyZmFjZSBFeHBvcnRNZXRob2RXaXRoSWRQcm90b2NvbCA6IE5TT2JqZWN0
PEV4cG9ydE1ldGhvZFdpdGhJZFByb3RvY29sPgorQGVuZAorCitAaW1wbGVtZW50YXRpb24gRXhw
b3J0TWV0aG9kV2l0aElkUHJvdG9jb2wKKy0gKHZvaWQpIG1ldGhvZFdpdGhJZFByb3RvY29sOihp
ZDxUcnV0aFRlbGxlcj4pb2JqZWN0Cit7CisgICAgY2hlY2tSZXN1bHQoQCJFeHBvcnRpbmcgYSBt
ZXRob2Qgd2l0aCBpZDxwcm90b2NvbD4gaW4gdGhlIHR5cGUgc2lnbmF0dXJlIiwgW29iamVjdCBy
ZXR1cm5UcnVlXSk7Cit9CitAZW5kCisKK0Bwcm90b2NvbCBFeHBvcnRNZXRob2RXaXRoQ2xhc3NQ
cm90b2NvbCA8SlNFeHBvcnQ+CistICh2b2lkKSBtZXRob2RXaXRoQ2xhc3NQcm90b2NvbDooTlNP
YmplY3Q8VHJ1dGhUZWxsZXI+ICopb2JqZWN0OworQGVuZAorCitAaW50ZXJmYWNlIEV4cG9ydE1l
dGhvZFdpdGhDbGFzc1Byb3RvY29sIDogTlNPYmplY3Q8RXhwb3J0TWV0aG9kV2l0aENsYXNzUHJv
dG9jb2w+CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBFeHBvcnRNZXRob2RXaXRoQ2xhc3NQcm90
b2NvbAorLSAodm9pZCkgbWV0aG9kV2l0aENsYXNzUHJvdG9jb2w6KE5TT2JqZWN0PFRydXRoVGVs
bGVyPiAqKW9iamVjdAoreworICAgIGNoZWNrUmVzdWx0KEAiRXhwb3J0aW5nIGEgbWV0aG9kIHdp
dGggY2xhc3M8cHJvdG9jb2w+IGluIHRoZSB0eXBlIHNpZ25hdHVyZSIsIFtvYmplY3QgcmV0dXJu
VHJ1ZV0pOworfQorQGVuZAorCitAaW1wbGVtZW50YXRpb24gSlNFeHBvcnRUZXN0cworKyAodm9p
ZCkgZXhwb3J0SW5zdGFuY2VNZXRob2RXaXRoSWRQcm90b2NvbFRlc3QKK3sKKyAgICBKU0NvbnRl
eHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisgICAgY29udGV4dFtAIkV4
cG9ydE1ldGhvZFdpdGhJZFByb3RvY29sIl0gPSBbRXhwb3J0TWV0aG9kV2l0aElkUHJvdG9jb2wg
Y2xhc3NdOworICAgIGNvbnRleHRbQCJtYWtlVGVzdE9iamVjdCJdID0gXnsKKyAgICAgICAgcmV0
dXJuIFtbRXhwb3J0TWV0aG9kV2l0aElkUHJvdG9jb2wgYWxsb2NdIGluaXRdOworICAgIH07Cisg
ICAgY29udGV4dFtAIm9wYXF1ZU9iamVjdCJdID0gW1tUcnV0aFRlbGxlciBhbGxvY10gaW5pdF07
CisgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJtYWtlVGVzdE9iamVjdCgpLm1ldGhvZFdp
dGhJZFByb3RvY29sKG9wYXF1ZU9iamVjdCk7Il07CisgICAgY2hlY2tSZXN1bHQoQCJTdWNjZXNz
ZnVsbHkgZXhwb3J0ZWQgaW5zdGFuY2UgbWV0aG9kIiwgIWNvbnRleHQuZXhjZXB0aW9uKTsKK30K
KworKyAodm9pZCkgZXhwb3J0SW5zdGFuY2VNZXRob2RXaXRoQ2xhc3NQcm90b2NvbFRlc3QKK3sK
KyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisgICAg
Y29udGV4dFtAIkV4cG9ydE1ldGhvZFdpdGhDbGFzc1Byb3RvY29sIl0gPSBbRXhwb3J0TWV0aG9k
V2l0aENsYXNzUHJvdG9jb2wgY2xhc3NdOworICAgIGNvbnRleHRbQCJtYWtlVGVzdE9iamVjdCJd
ID0gXnsKKyAgICAgICAgcmV0dXJuIFtbRXhwb3J0TWV0aG9kV2l0aENsYXNzUHJvdG9jb2wgYWxs
b2NdIGluaXRdOworICAgIH07CisgICAgY29udGV4dFtAIm9wYXF1ZU9iamVjdCJdID0gW1tUcnV0
aFRlbGxlciBhbGxvY10gaW5pdF07CisgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJtYWtl
VGVzdE9iamVjdCgpLm1ldGhvZFdpdGhDbGFzc1Byb3RvY29sKG9wYXF1ZU9iamVjdCk7Il07Cisg
ICAgY2hlY2tSZXN1bHQoQCJTdWNjZXNzZnVsbHkgZXhwb3J0ZWQgaW5zdGFuY2UgbWV0aG9kIiwg
IWNvbnRleHQuZXhjZXB0aW9uKTsKK30KK0BlbmQKKwordm9pZCBydW5KU0V4cG9ydFRlc3RzKCkK
K3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgW0pTRXhwb3J0VGVzdHMgZXhwb3J0
SW5zdGFuY2VNZXRob2RXaXRoSWRQcm90b2NvbFRlc3RdOworICAgICAgICBbSlNFeHBvcnRUZXN0
cyBleHBvcnRJbnN0YW5jZU1ldGhvZFdpdGhDbGFzc1Byb3RvY29sVGVzdF07CisgICAgfQorfQor
CisjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0JKHJldmlzaW9uIDE2Mzc5MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogCiAjaW1wb3J0ICJDdXJyZW50VGhpc0luc2lkZUJsb2NrR2V0dGVyVGVzdC5o
IgogI2ltcG9ydCAiRGF0ZVRlc3RzLmgiCisjaW1wb3J0ICJKU0V4cG9ydFRlc3RzLmgiCiAKIGV4
dGVybiAiQyIgdm9pZCBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmcoSlND
b250ZXh0UmVmKTsKIApAQCAtMTI1OSw2ICsxMjYwLDcgQEAgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQ
SSgpCiAKICAgICBjdXJyZW50VGhpc0luc2lkZUJsb2NrR2V0dGVyVGVzdCgpOwogICAgIHJ1bkRh
dGVUZXN0cygpOworICAgIHJ1bkpTRXhwb3J0VGVzdHMoKTsKIH0KIAogI2Vsc2UKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjM3OTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMTMzNSw2ICsxMzM1LDcgQEAKIAkJQzIxMTIyRTExNUREOUFCMzAwNzkw
RTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDMjExMjJERTE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRT
aGFyZWREYXRhLmNwcCAqLzsgfTsKIAkJQzIxMTIyRTIxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhy
ZWFkU2hhcmVkRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzIxMTIyREYxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyMTYwRkU3
MTVGN0U5NUUwMDk0MkRGQyAvKiBTbG90VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAv
KiBTbG90VmlzaXRvcklubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlDMjE4MUZDMjE4QTk0OEZCMDAyNUEyMzUgLyogSlNFeHBvcnRUZXN0
cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTgx
RkMxMThBOTQ4RkIwMDI1QTIzNSAvKiBKU0V4cG9ydFRlc3RzLm1tICovOyB9OwogCQlDMjE4RDE0
MDE2NTVDRkQ1MDA2MkJCODEgLyogQ29weVdvcmtMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjE4RDEzRjE2NTVDRkQ1MDA2MkJCODEgLyogQ29w
eVdvcmtMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQzIyMzlEMTcxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjM5RDEyMTYyNjJCREQw
MDVBQzVGRCAvKiBDb3B5VmlzaXRvci5jcHAgKi87IH07CiAJCUMyMjM5RDE4MTYyNjJCREQwMDVB
QzVGRCAvKiBDb3B5VmlzaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzIyMzlEMTMxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI3OTQsNiAr
Mjc5NSw4IEBACiAJCUMyMTEyMkRFMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERh
dGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR0NUaHJlYWRTaGFy
ZWREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxMTIyREYxNUREOUFC
MzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBHQ1RocmVhZFNoYXJlZERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzIxMUI1NzQxNzZBMjI0RDAwMEUyQTIzIC8qIEFQSUNhbGxiYWNrRnVuY3Rpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJQ2FsbGJhY2tGdW5jdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjE4MUZDMDE4QTk0OEZCMDAyNUEyMzUgLyog
SlNFeHBvcnRUZXN0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU0V4cG9y
dFRlc3RzLmg7IHBhdGggPSBBUEkvdGVzdHMvSlNFeHBvcnRUZXN0cy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDMjE4MUZDMTE4QTk0OEZCMDAyNUEyMzUgLyogSlNFeHBvcnRUZXN0
cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEpTRXhwb3J0VGVz
dHMubW07IHBhdGggPSBBUEkvdGVzdHMvSlNFeHBvcnRUZXN0cy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQzIxOEQxM0YxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb3B5V29ya0xpc3QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIyMzlEMTIxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlW
aXNpdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvcHlWaXNp
dG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIyMzlEMTMxNjI2MkJERDAw
NUFDNUZEIC8qIENvcHlWaXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENvcHlWaXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMjQ3LDYgKzMy
NTAsOCBAQAogCQkJCTY1MTEyMkU1MTQwNDY5QkEwMDJCMTAxRCAvKiB0ZXN0UmVnRXhwLmNwcCAq
LywKIAkJCQlDMjg4QjJEQzE4QTU0RDNFMDA3QkU0MEIgLyogRGF0ZVRlc3RzLmggKi8sCiAJCQkJ
QzI4OEIyREQxOEE1NEQzRTAwN0JFNDBCIC8qIERhdGVUZXN0cy5tbSAqLywKKwkJCQlDMjE4MUZD
MDE4QTk0OEZCMDAyNUEyMzUgLyogSlNFeHBvcnRUZXN0cy5oICovLAorCQkJCUMyMTgxRkMxMThB
OTQ4RkIwMDI1QTIzNSAvKiBKU0V4cG9ydFRlc3RzLm1tICovLAogCQkJKTsKIAkJCW5hbWUgPSB0
ZXN0czsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC01ODc5LDYgKzU4ODQsNyBAQAog
CQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3
NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJQzIxODFGQzIxOEE5NDhGQjAwMjVBMjM1IC8qIEpT
RXhwb3J0VGVzdHMubW0gaW4gU291cmNlcyAqLywKIAkJCQlDMjlFQ0IwMzE4MDREMEVEMDBEMkNC
QjQgLyogQ3VycmVudFRoaXNJbnNpZGVCbG9ja0dldHRlclRlc3QubW0gaW4gU291cmNlcyAqLywK
IAkJCQkxNDQwRjYxMDBBNEY4NTY3MDAwNUYwNjEgLyogdGVzdGFwaS5jIGluIFNvdXJjZXMgKi8s
CiAJCQkJODZEMjIyMUExNjdFRjk0NDAwMjRDODA0IC8qIHRlc3RhcGkubW0gaW4gU291cmNlcyAq
LywK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223729</attachid>
            <date>2014-02-10 11:43:25 -0800</date>
            <delta_ts>2014-02-11 08:40:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-128540-20140210114325.patch</filename>
            <type>text/plain</type>
            <size>14839</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzODAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDE0LTAyLTEwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgT2JqLUMgQVBJOiBKU0V4cG9ydCBkb2Vzbid0IHdvcmsgZm9yIG1ldGhvZHMgdGhh
dCBjb250YWluIHByb3RvY29scyBpbiB0aGVpciB0eXBlIHNpZ25hdHVyZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI4NTQwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGJ1ZyBpcyBpbiBwYXJzZU9i
akNUeXBlIGluIE9iamNSdW50aW1lRXh0cmFzLmguIFdoZW4gd2Ugc2VlIGFuICdAJyBpbiB0aGUg
CisgICAgICAgIHR5cGUgc2lnbmF0dXJlIG9mIGEgbWV0aG9kLCB3ZSBhc3N1bWUgdGhhdCB3aGF0
IGZvbGxvd3MgdGhlICdAJyBpcyBhIGNsYXNzIG5hbWUsIAorICAgICAgICBzbyB3ZSBjYWxsIG9i
amNfZ2V0Q2xhc3MsIGFuZCBpZiB0aGF0IHJldHVybnMgbmlsIHRoZW4gd2UgZ2l2ZSB1cCBvbiB0
aGUgbWV0aG9kIAorICAgICAgICBhbmQgZG9uJ3QgZXhwb3J0IGl0LgorCisgICAgICAgIFRoaXMg
YXNzdW1wdGlvbiBkb2Vzbid0IHdvcmsgaW4gdGhlIGNhc2Ugb2YgaWQ8UHJvdG9jb2w+IGJlY2F1
c2UgaXQncyB0aGUgbmFtZSAKKyAgICAgICAgb2YgdGhlIHByb3RvY29sIHRoYXQgZm9sbG93cyB0
aGUgJ0AnLCBub3QgdGhlIG5hbWUgb2YgYSBjbGFzcy4gV2Ugc2hvdWxkIGhhdmUgCisgICAgICAg
IGFub3RoZXIgZmFsbGJhY2sgY2FzZSBmb3IgcHJvdG9jb2wgbmFtZXMuCisKKyAgICAgICAgVGhl
cmUncyBhbm90aGVyIGNhc2UgdGhhdCBhbHNvIGRvZXNuJ3Qgd29yaywgYW5kIHRoYXQncyB0aGUg
Y2FzZSBvZiBhIG5hbWVkIGNsYXNzIAorICAgICAgICB3aXRoIGEgc3BlY2lmaWVkIHByb3RvdHlw
ZSBpbiBhIG1ldGhvZCBzaWduYXR1cmUgKGUuZy4gTlNPYmplY3Q8TXlQcm90b2NvbD4pLiAKKyAg
ICAgICAgVGhlcmUgdGhlIHN1YnN0cmluZyBvZiB0aGUgdHlwZSBzaWduYXR1cmUgdGhhdCByZXBy
ZXNlbnRzIHRoZSBjbGFzcyBpcyAiTlNPYmplY3Q8TXlQcm90b2NvbD4iLCAKKyAgICAgICAgd2hp
Y2ggd2lsbCBhbHNvIGNhdXNlIG9iamNfZ2V0Q2xhc3MgdG8gcmV0dXJuIG5pbC4KKworICAgICAg
ICAqIEFQSS9PYmpjUnVudGltZUV4dHJhcy5oOgorICAgICAgICAocGFyc2VPYmpDVHlwZSk6Cisg
ICAgICAgICogQVBJL3Rlc3RzL0RhdGVUZXN0cy5tbTogQWxzbyBmaXhlZCBhbiBpc3N1ZSBJIG5v
dGljZWQgd2hlcmUgd2UgZG9uJ3QgdXNlIGFuIGF1dG9yZWxlYXNlIHBvb2wKKyAgICAgICAgZm9y
IHRoZSBEYXRlVGVzdHMuCisgICAgICAgICogQVBJL3Rlc3RzL0pTRXhwb3J0VGVzdHMuaDogQWRk
ZWQuCisgICAgICAgICogQVBJL3Rlc3RzL0pTRXhwb3J0VGVzdHMubW06IEFkZGVkLgorICAgICAg
ICAoLVtUcnV0aFRlbGxlciByZXR1cm5UcnVlXSk6CisgICAgICAgICgtW0V4cG9ydE1ldGhvZFdp
dGhJZFByb3RvY29sIG1ldGhvZFdpdGhJZFByb3RvY29sOl0pOgorICAgICAgICAoLVtFeHBvcnRN
ZXRob2RXaXRoQ2xhc3NQcm90b2NvbCBtZXRob2RXaXRoQ2xhc3NQcm90b2NvbDpdKToKKyAgICAg
ICAgKCtbSlNFeHBvcnRUZXN0cyBleHBvcnRJbnN0YW5jZU1ldGhvZFdpdGhJZFByb3RvY29sVGVz
dF0pOgorICAgICAgICAoK1tKU0V4cG9ydFRlc3RzIGV4cG9ydEluc3RhbmNlTWV0aG9kV2l0aENs
YXNzUHJvdG9jb2xUZXN0XSk6CisgICAgICAgIChydW5KU0V4cG9ydFRlc3RzKToKKyAgICAgICAg
KiBBUEkvdGVzdHMvdGVzdGFwaS5tbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE0LTAyLTEwICBQZXRlciBNb2xuYXIgIDxwbW9sbmFy
LnUtc3plZ2VkQHBhcnRuZXIuc2Ftc3VuZy5jb20+CiAKICAgICAgICAgUmVtb3ZlIGV4dHJhIGlu
Y2x1ZGVzIGZyb20gREZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iamNSdW50
aW1lRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpj
UnVudGltZUV4dHJhcy5oCShyZXZpc2lvbiAxNjM3OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL09iamNSdW50aW1lRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Miw5ICsxOTIs
MTkgQEAgdHlwZW5hbWUgRGVsZWdhdGVUeXBlOjpSZXN1bHRUeXBlIHBhcnNlTwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKCpwb3NpdGlvbiA9PSAnIicpIHsKLSAgICAgICAgICAgIGNvbnN0IGNo
YXIqIGJlZ2luID0gKytwb3NpdGlvbjsKLSAgICAgICAgICAgIHBvc2l0aW9uID0gaW5kZXgocG9z
aXRpb24sICciJyk7Ci0gICAgICAgICAgICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0eXBlT2ZDbGFz
cyhiZWdpbiwgcG9zaXRpb24rKyk7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBiZWdpbiA9IHBv
c2l0aW9uICsgMTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIHByb3RvY29sUG9zaXRpb24gPSBp
bmRleChiZWdpbiwgJzwnKTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVuZE9mVHlwZSA9IGlu
ZGV4KGJlZ2luLCAnIicpOworICAgICAgICAgICAgcG9zaXRpb24gPSBlbmRPZlR5cGUgKyAxOwor
CisgICAgICAgICAgICAvLyBUaGVyZSdzIG5vIHByb3RvY29sIGludm9sdmVkIGluIHRoaXMgdHlw
ZSwgc28ganVzdCBoYW5kbGUgdGhlIGNsYXNzIG5hbWUuCisgICAgICAgICAgICBpZiAoIXByb3Rv
Y29sUG9zaXRpb24gfHwgcHJvdG9jb2xQb3NpdGlvbiA+IGVuZE9mVHlwZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0eXBlT2ZDbGFzcyhiZWdpbiwgZW5kT2ZUeXBlKTsK
KyAgICAgICAgICAgIC8vIFdlIHNraXBwZWQgdGhlIGNsYXNzIG5hbWUgYW5kIHdlbnQgc3RyYWln
aHQgdG8gdGhlIHByb3RvY29sLCBzbyB0aGlzIGlzIGFuIGlkIHR5cGUuCisgICAgICAgICAgICBp
ZiAoYmVnaW4gPT0gcHJvdG9jb2xQb3NpdGlvbikKKyAgICAgICAgICAgICAgICByZXR1cm4gRGVs
ZWdhdGVUeXBlOjp0eXBlSWQoKTsKKyAgICAgICAgICAgIC8vIFdlIGhhdmUgYSBjbGFzcyBuYW1l
IHdpdGggYSBwcm90b2NvbC4gRm9yIG5vdywgaWdub3JlIHRoZSBwcm90b2NvbC4KKyAgICAgICAg
ICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnR5cGVPZkNsYXNzKGJlZ2luLCBwcm90b2NvbFBvc2l0
aW9uKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnR5cGVJZCgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9EYXRlVGVzdHMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9EYXRlVGVzdHMubW0J
KHJldmlzaW9uIDE2Mzc5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRGF0
ZVRlc3RzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsMTAgKzE0MiwxMiBAQCArICh2b2lkKSBy
b3VuZFRyaXBUaHJvdWdoT2JqQ0RhdGVUZXN0CiAKIHZvaWQgcnVuRGF0ZVRlc3RzKCkKIHsKLSAg
ICBbRGF0ZVRlc3RzIE5TRGF0ZVRvSlNEYXRlVGVzdF07Ci0gICAgW0RhdGVUZXN0cyBKU0RhdGVU
b05TRGF0ZVRlc3RdOwotICAgIFtEYXRlVGVzdHMgcm91bmRUcmlwVGhyb3VnaEpTRGF0ZVRlc3Rd
OwotICAgIFtEYXRlVGVzdHMgcm91bmRUcmlwVGhyb3VnaE9iakNEYXRlVGVzdF07CisgICAgQGF1
dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIFtEYXRlVGVzdHMgTlNEYXRlVG9KU0RhdGVUZXN0XTsK
KyAgICAgICAgW0RhdGVUZXN0cyBKU0RhdGVUb05TRGF0ZVRlc3RdOworICAgICAgICBbRGF0ZVRl
c3RzIHJvdW5kVHJpcFRocm91Z2hKU0RhdGVUZXN0XTsKKyAgICAgICAgW0RhdGVUZXN0cyByb3Vu
ZFRyaXBUaHJvdWdoT2JqQ0RhdGVUZXN0XTsKKyAgICB9CiB9CiAKICNlbmRpZiAvLyBKU0NfT0JK
Q19BUElfRU5BQkxFRApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9KU0V4
cG9ydFRlc3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0
cy9KU0V4cG9ydFRlc3RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL3Rlc3RzL0pTRXhwb3J0VGVzdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgorCisjaWYgSlNDX09CSkNfQVBJX0VO
QUJMRUQKKwordm9pZCBydW5KU0V4cG9ydFRlc3RzKCk7CisKKyNlbmRpZiAvLyBKU0NfT0JKQ19B
UElfRU5BQkxFRAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0pTRXhw
b3J0VGVzdHMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0
cy9KU0V4cG9ydFRlc3RzLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS90ZXN0cy9KU0V4cG9ydFRlc3RzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiSlNFeHBvcnRUZXN0cy5oIgorCisjaWYgSlNDX09C
SkNfQVBJX0VOQUJMRUQKKworZXh0ZXJuICJDIiB2b2lkIGNoZWNrUmVzdWx0KE5TU3RyaW5nICpk
ZXNjcmlwdGlvbiwgYm9vbCBwYXNzZWQpOworCitAaW50ZXJmYWNlIEpTRXhwb3J0VGVzdHMgOiBO
U09iamVjdAorKyAodm9pZCkgZXhwb3J0SW5zdGFuY2VNZXRob2RXaXRoSWRQcm90b2NvbFRlc3Q7
CisrICh2b2lkKSBleHBvcnRJbnN0YW5jZU1ldGhvZFdpdGhDbGFzc1Byb3RvY29sVGVzdDsKK0Bl
bmQKKworQHByb3RvY29sIFRydXRoVGVsbGVyCistIChCT09MKSByZXR1cm5UcnVlOworQGVuZAor
CitAaW50ZXJmYWNlIFRydXRoVGVsbGVyIDogTlNPYmplY3Q8VHJ1dGhUZWxsZXI+CitAZW5kCisK
K0BpbXBsZW1lbnRhdGlvbiBUcnV0aFRlbGxlcgorLSAoQk9PTCkgcmV0dXJuVHJ1ZQoreworICAg
IHJldHVybiB0cnVlOworfQorQGVuZAorCitAcHJvdG9jb2wgRXhwb3J0TWV0aG9kV2l0aElkUHJv
dG9jb2wgPEpTRXhwb3J0PgorLSAodm9pZCkgbWV0aG9kV2l0aElkUHJvdG9jb2w6KGlkPFRydXRo
VGVsbGVyPilvYmplY3Q7CitAZW5kCisKK0BpbnRlcmZhY2UgRXhwb3J0TWV0aG9kV2l0aElkUHJv
dG9jb2wgOiBOU09iamVjdDxFeHBvcnRNZXRob2RXaXRoSWRQcm90b2NvbD4KK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIEV4cG9ydE1ldGhvZFdpdGhJZFByb3RvY29sCistICh2b2lkKSBtZXRob2RX
aXRoSWRQcm90b2NvbDooaWQ8VHJ1dGhUZWxsZXI+KW9iamVjdAoreworICAgIGNoZWNrUmVzdWx0
KEAiRXhwb3J0aW5nIGEgbWV0aG9kIHdpdGggaWQ8cHJvdG9jb2w+IGluIHRoZSB0eXBlIHNpZ25h
dHVyZSIsIFtvYmplY3QgcmV0dXJuVHJ1ZV0pOworfQorQGVuZAorCitAcHJvdG9jb2wgRXhwb3J0
TWV0aG9kV2l0aENsYXNzUHJvdG9jb2wgPEpTRXhwb3J0PgorLSAodm9pZCkgbWV0aG9kV2l0aENs
YXNzUHJvdG9jb2w6KE5TT2JqZWN0PFRydXRoVGVsbGVyPiAqKW9iamVjdDsKK0BlbmQKKworQGlu
dGVyZmFjZSBFeHBvcnRNZXRob2RXaXRoQ2xhc3NQcm90b2NvbCA6IE5TT2JqZWN0PEV4cG9ydE1l
dGhvZFdpdGhDbGFzc1Byb3RvY29sPgorQGVuZAorCitAaW1wbGVtZW50YXRpb24gRXhwb3J0TWV0
aG9kV2l0aENsYXNzUHJvdG9jb2wKKy0gKHZvaWQpIG1ldGhvZFdpdGhDbGFzc1Byb3RvY29sOihO
U09iamVjdDxUcnV0aFRlbGxlcj4gKilvYmplY3QKK3sKKyAgICBjaGVja1Jlc3VsdChAIkV4cG9y
dGluZyBhIG1ldGhvZCB3aXRoIGNsYXNzPHByb3RvY29sPiBpbiB0aGUgdHlwZSBzaWduYXR1cmUi
LCBbb2JqZWN0IHJldHVyblRydWVdKTsKK30KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEpTRXhw
b3J0VGVzdHMKKysgKHZvaWQpIGV4cG9ydEluc3RhbmNlTWV0aG9kV2l0aElkUHJvdG9jb2xUZXN0
Cit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOwor
ICAgIGNvbnRleHRbQCJFeHBvcnRNZXRob2RXaXRoSWRQcm90b2NvbCJdID0gW0V4cG9ydE1ldGhv
ZFdpdGhJZFByb3RvY29sIGNsYXNzXTsKKyAgICBjb250ZXh0W0AibWFrZVRlc3RPYmplY3QiXSA9
IF57CisgICAgICAgIHJldHVybiBbW0V4cG9ydE1ldGhvZFdpdGhJZFByb3RvY29sIGFsbG9jXSBp
bml0XTsKKyAgICB9OworICAgIGNvbnRleHRbQCJvcGFxdWVPYmplY3QiXSA9IFtbVHJ1dGhUZWxs
ZXIgYWxsb2NdIGluaXRdOworICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAibWFrZVRlc3RP
YmplY3QoKS5tZXRob2RXaXRoSWRQcm90b2NvbChvcGFxdWVPYmplY3QpOyJdOworICAgIGNoZWNr
UmVzdWx0KEAiU3VjY2Vzc2Z1bGx5IGV4cG9ydGVkIGluc3RhbmNlIG1ldGhvZCIsICFjb250ZXh0
LmV4Y2VwdGlvbik7Cit9CisKKysgKHZvaWQpIGV4cG9ydEluc3RhbmNlTWV0aG9kV2l0aENsYXNz
UHJvdG9jb2xUZXN0Cit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxs
b2NdIGluaXRdOworICAgIGNvbnRleHRbQCJFeHBvcnRNZXRob2RXaXRoQ2xhc3NQcm90b2NvbCJd
ID0gW0V4cG9ydE1ldGhvZFdpdGhDbGFzc1Byb3RvY29sIGNsYXNzXTsKKyAgICBjb250ZXh0W0Ai
bWFrZVRlc3RPYmplY3QiXSA9IF57CisgICAgICAgIHJldHVybiBbW0V4cG9ydE1ldGhvZFdpdGhD
bGFzc1Byb3RvY29sIGFsbG9jXSBpbml0XTsKKyAgICB9OworICAgIGNvbnRleHRbQCJvcGFxdWVP
YmplY3QiXSA9IFtbVHJ1dGhUZWxsZXIgYWxsb2NdIGluaXRdOworICAgIFtjb250ZXh0IGV2YWx1
YXRlU2NyaXB0OkAibWFrZVRlc3RPYmplY3QoKS5tZXRob2RXaXRoQ2xhc3NQcm90b2NvbChvcGFx
dWVPYmplY3QpOyJdOworICAgIGNoZWNrUmVzdWx0KEAiU3VjY2Vzc2Z1bGx5IGV4cG9ydGVkIGlu
c3RhbmNlIG1ldGhvZCIsICFjb250ZXh0LmV4Y2VwdGlvbik7Cit9CitAZW5kCisKK3ZvaWQgcnVu
SlNFeHBvcnRUZXN0cygpCit7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIFtKU0V4
cG9ydFRlc3RzIGV4cG9ydEluc3RhbmNlTWV0aG9kV2l0aElkUHJvdG9jb2xUZXN0XTsKKyAgICAg
ICAgW0pTRXhwb3J0VGVzdHMgZXhwb3J0SW5zdGFuY2VNZXRob2RXaXRoQ2xhc3NQcm90b2NvbFRl
c3RdOworICAgIH0KK30KKworI2VuZGlmIC8vIEpTQ19PQkpDX0FQSV9FTkFCTEVECkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCShyZXZpc2lvbiAxNjM3
OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0JKHdvcmtp
bmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2ltcG9ydCAiQ3VycmVudFRoaXNJbnNpZGVC
bG9ja0dldHRlclRlc3QuaCIKICNpbXBvcnQgIkRhdGVUZXN0cy5oIgorI2ltcG9ydCAiSlNFeHBv
cnRUZXN0cy5oIgogCiBleHRlcm4gIkMiIHZvaWQgSlNTeW5jaHJvbm91c0dhcmJhZ2VDb2xsZWN0
Rm9yRGVidWdnaW5nKEpTQ29udGV4dFJlZik7CiAKQEAgLTEyNTksNiArMTI2MCw3IEBAIHZvaWQg
dGVzdE9iamVjdGl2ZUNBUEkoKQogCiAgICAgY3VycmVudFRoaXNJbnNpZGVCbG9ja0dldHRlclRl
c3QoKTsKICAgICBydW5EYXRlVGVzdHMoKTsKKyAgICBydW5KU0V4cG9ydFRlc3RzKCk7CiB9CiAK
ICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTYzNzky
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzMzUsNiArMTMzNSw3IEBACiAJCUMyMTEy
MkUxMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxMTIyREUxNUREOUFCMzAwNzkw
RTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgKi87IH07CiAJCUMyMTEyMkUyMTVERDlBQjMw
MDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTEyMkRGMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVh
ZFNoYXJlZERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlDMjE2MEZFNzE1RjdFOTVFMDA5NDJERkMgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNDA4NTE1
QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIxODFGQzIxOEE5NDhGQjAwMjVBMjM1
IC8qIEpTRXhwb3J0VGVzdHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDMjE4MUZDMTE4QTk0OEZCMDAyNUEyMzUgLyogSlNFeHBvcnRUZXN0cy5tbSAq
LzsgfTsKIAkJQzIxOEQxNDAxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxOEQxM0YxNjU1Q0ZE
NTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUMyMjM5RDE3MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5Vmlz
aXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
MjIzOUQxMjE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuY3BwICovOyB9OwogCQlDMjIz
OUQxODE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjM5RDEzMTYyNjJCREQwMDVBQzVGRCAvKiBD
b3B5VmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0yNzk0LDYgKzI3OTUsOCBAQAogCQlDMjExMjJERTE1REQ5QUIzMDA3OTBFM0EgLyog
R0NUaHJlYWRTaGFyZWREYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEdDVGhyZWFkU2hhcmVkRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUMyMTEyMkRGMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NUaHJlYWRTaGFyZWREYXRhLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMTFCNTc0MTc2QTIyNEQwMDBFMkEyMyAvKiBBUElDYWxs
YmFja0Z1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUNhbGxi
YWNrRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxODFGQzAxOEE5
NDhGQjAwMjVBMjM1IC8qIEpTRXhwb3J0VGVzdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gSlNFeHBvcnRUZXN0cy5oOyBwYXRoID0gQVBJL3Rlc3RzL0pTRXhwb3J0VGVzdHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxODFGQzExOEE5NDhGQjAwMjVBMjM1
IC8qIEpTRXhwb3J0VGVzdHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5h
bWUgPSBKU0V4cG9ydFRlc3RzLm1tOyBwYXRoID0gQVBJL3Rlc3RzL0pTRXhwb3J0VGVzdHMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMThEMTNGMTY1NUNGRDUwMDYyQkI4MSAv
KiBDb3B5V29ya0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29weVdv
cmtMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMjM5RDEyMTYyNjJCREQw
MDVBQzVGRCAvKiBDb3B5VmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDb3B5VmlzaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMy
MjM5RDEzMTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb3B5VmlzaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMzI0Nyw2ICszMjUwLDggQEAKIAkJCQk2NTExMjJFNTE0MDQ2OUJBMDAyQjEwMUQgLyog
dGVzdFJlZ0V4cC5jcHAgKi8sCiAJCQkJQzI4OEIyREMxOEE1NEQzRTAwN0JFNDBCIC8qIERhdGVU
ZXN0cy5oICovLAogCQkJCUMyODhCMkREMThBNTREM0UwMDdCRTQwQiAvKiBEYXRlVGVzdHMubW0g
Ki8sCisJCQkJQzIxODFGQzAxOEE5NDhGQjAwMjVBMjM1IC8qIEpTRXhwb3J0VGVzdHMuaCAqLywK
KwkJCQlDMjE4MUZDMTE4QTk0OEZCMDAyNUEyMzUgLyogSlNFeHBvcnRUZXN0cy5tbSAqLywKIAkJ
CSk7CiAJCQluYW1lID0gdGVzdHM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNTg3
OSw2ICs1ODg0LDcgQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRB
Y3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCUMyMTgxRkMyMThBOTQ4
RkIwMDI1QTIzNSAvKiBKU0V4cG9ydFRlc3RzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQzI5RUNC
MDMxODA0RDBFRDAwRDJDQkI0IC8qIEN1cnJlbnRUaGlzSW5zaWRlQmxvY2tHZXR0ZXJUZXN0Lm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MEY2MTAwQTRGODU2NzAwMDVGMDYxIC8qIHRlc3RhcGku
YyBpbiBTb3VyY2VzICovLAogCQkJCTg2RDIyMjFBMTY3RUY5NDQwMDI0QzgwNCAvKiB0ZXN0YXBp
Lm1tIGluIFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>