<?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>117823</bug_id>
          
          <creation_ts>2013-06-19 23:37:23 -0700</creation_ts>
          <short_desc>[Qt] Add interface API for origin whitelisting</short_desc>
          <delta_ts>2013-07-31 05:54:13 -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>WebKit Qt</component>
          <version>528+ (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>EasyFix</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Jose Lejin PJ">jose.lejin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>ararunprasad</cc>
    
    <cc>arurajku</cc>
    
    <cc>commit-queue</cc>
    
    <cc>deesaha</cc>
    
    <cc>hausmann</cc>
    
    <cc>jturcotte</cc>
    
    <cc>juhana.koski</cc>
    
    <cc>noam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>902034</commentid>
    <comment_count>0</comment_count>
    <who name="Jose Lejin PJ">jose.lejin</who>
    <bug_when>2013-06-19 23:37:23 -0700</bug_when>
    <thetext>The QtWebkit API set in Qt 4.8 does not contain any intefraces which could allow a QtWebkit based browser to add/remove specific domains to be whitelisted for cross origin requests.  I understand that previously these API’s were exposed through the interfaces in “QWebSecurityOrigin” which invoked the  API’s in WebCore’s SecurityOrigin class. But currently the API’s to add/remove a whitelist entry are exposed through WebCore’s SecurityPolicy class and there are no interfaces in QtWebkit API to invoke the same.

This bug is raised to introduce new API in QWebSecurityOrigin for whiteListing (add/remove).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>902035</commentid>
    <comment_count>1</comment_count>
    <who name="Deepjyoti Saha">deesaha</who>
    <bug_when>2013-06-19 23:44:34 -0700</bug_when>
    <thetext>I will be submitting a patch for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>902056</commentid>
    <comment_count>2</comment_count>
      <attachid>205064</attachid>
    <who name="Deepjyoti Saha">deesaha</who>
    <bug_when>2013-06-20 02:47:27 -0700</bug_when>
    <thetext>Created attachment 205064
Patch

proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>902906</commentid>
    <comment_count>3</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-06-24 03:39:04 -0700</bug_when>
    <thetext>Sounds like a duplicate of bug #31875 which also has some suggested patches with flexible API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>902956</commentid>
    <comment_count>4</comment_count>
    <who name="Deepjyoti Saha">deesaha</who>
    <bug_when>2013-06-24 07:59:10 -0700</bug_when>
    <thetext>Hi Allan,

To some extent yes - it is the same issue because currently a QtWebKit based browser has no API&apos;s exposed to specify &quot;origins&quot; which can be white-listed for cross origin XMLHttpRequest requests.

The last attached patch in bug #31875 has the following:

1) Support required from WebCore, i.e changes related to WebCore&apos;s SecurityOrigin.

2) The above functionality in WebCore exposed through QtWebkit API&apos;s in QWebSecurityOrigin.


But in current WebCore code: Point 1) is already addressed and implemented in WebCore&apos;s SecurityPolicy class. But the same functionality is not exposed through QtWebKit APIs for the browser to use. 

Considering the same, I have submitted this patch.

Also sometime back I raised the same query in the mailing list and Jocelyn had suggested the same as well.

Please correct me If my understanding is wrong.

Regards,
Deep</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>902989</commentid>
    <comment_count>5</comment_count>
      <attachid>205064</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-06-24 09:45:24 -0700</bug_when>
    <thetext>Comment on attachment 205064
Patch

I don&apos;t like creating new securityOrigins for the purpose of just calling the SecurityPolicy methods. Would it be possible to instead make the calls methods called on the QWebSecurityOrigin? In that case you already have a WebCore::SecurityOrigin in the private data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>902991</commentid>
    <comment_count>6</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-06-24 09:46:30 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 205064 [details])
&gt; I don&apos;t like creating new securityOrigins for the purpose of just calling the SecurityPolicy methods. Would it be possible to instead make the calls methods called on the QWebSecurityOrigin? In that case you already have a WebCore::SecurityOrigin in the private data.

Or to match the WebPolicy API. Just make the methods take QWebSecurityOrigin as arguments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903228</commentid>
    <comment_count>7</comment_count>
    <who name="Deepjyoti Saha">deesaha</who>
    <bug_when>2013-06-24 23:56:55 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (From update of attachment 205064 [details] [details])
&gt; &gt; I don&apos;t like creating new securityOrigins for the purpose of just calling the SecurityPolicy methods. Would it be possible to instead make the calls methods called on the QWebSecurityOrigin? In that case you already have a WebCore::SecurityOrigin in the private data.
&gt; 
&gt; Or to match the WebPolicy API. Just make the methods take QWebSecurityOrigin as arguments.

Hi Allen,

Currently a public constructor to create a QWebSecurityOrigin is not available. Such a constructor can be exposed. But if we are to use the existing WebCore::SecurityOrigin in QWebSecurityOriginPrivate then let us consider the following scenario: 

Suppose there are N origins that the browser wants to white-list, every time it wants to specify a new origin: the exiting WebCore::SecurityOrigin in QWebSecurityOriginPrivate needs to be deleted and replaced with a new SecurityOrigin and then call the SecurityPolicy API using that. (As we cannot modify an existing WebCore::SecurityOrigin once created)

I am not sure if this would be a nice way to do it.

Please suggest/correct I am missing something. 

Regards,
Deep



Please</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903242</commentid>
    <comment_count>8</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-06-25 02:22:04 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; (From update of attachment 205064 [details] [details] [details])
&gt; &gt; &gt; I don&apos;t like creating new securityOrigins for the purpose of just calling the SecurityPolicy methods. Would it be possible to instead make the calls methods called on the QWebSecurityOrigin? In that case you already have a WebCore::SecurityOrigin in the private data.
&gt; &gt; 
&gt; &gt; Or to match the WebPolicy API. Just make the methods take QWebSecurityOrigin as arguments.
&gt; 
&gt; Hi Allen,
&gt; 
&gt; Currently a public constructor to create a QWebSecurityOrigin is not available. Such a constructor can be exposed. But if we are to use the existing WebCore::SecurityOrigin in QWebSecurityOriginPrivate then let us consider the following scenario: 
&gt; 
&gt; Suppose there are N origins that the browser wants to white-list, every time it wants to specify a new origin: the exiting WebCore::SecurityOrigin in QWebSecurityOriginPrivate needs to be deleted and replaced with a new SecurityOrigin and then call the SecurityPolicy API using that. (As we cannot modify an existing WebCore::SecurityOrigin once created)
&gt; 
&gt; I am not sure if this would be a nice way to do it.
&gt; 
The end result is essentially the same, but I can see your point about the lack of QWebSecurityOrigin constructors.

I still don&apos;t like the temporary smart pointers though. I think it would be nicer to keep the SecurityOrigin objects in proper RefPtr variables. 

Also I know from a Qt API point of view we discourage the use of boolean arguments. While it does match the WebCore API. I know my colleagues would prefer if you used an enum.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903244</commentid>
    <comment_count>9</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-06-25 02:23:17 -0700</bug_when>
    <thetext>*** Bug 31875 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904521</commentid>
    <comment_count>10</comment_count>
      <attachid>205684</attachid>
    <who name="Deepjyoti Saha">deesaha</who>
    <bug_when>2013-06-28 02:44:20 -0700</bug_when>
    <thetext>Created attachment 205684
Patch

proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910621</commentid>
    <comment_count>11</comment_count>
      <attachid>207235</attachid>
    <who name="Deepjyoti Saha">deesaha</who>
    <bug_when>2013-07-22 03:34:14 -0700</bug_when>
    <thetext>Created attachment 207235
Modified the patch as per Allen&apos;s suggestion in IRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910622</commentid>
    <comment_count>12</comment_count>
      <attachid>207236</attachid>
    <who name="Deepjyoti Saha">deesaha</who>
    <bug_when>2013-07-22 03:37:14 -0700</bug_when>
    <thetext>Created attachment 207236
Modified the patch as per Allen&apos;s suggestion in IRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910624</commentid>
    <comment_count>13</comment_count>
      <attachid>205684</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2013-07-22 03:52:17 -0700</bug_when>
    <thetext>Comment on attachment 205684
Patch

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

&gt; Source/WebKit/qt/Api/qwebsecurityorigin.cpp:271
&gt; +    Allows application/platform to whilelist an origin to have access to specific desitnations beyond same-origin-policy.

- The documentation should explain a bit what each parameter is about, also using the &quot;\a&quot; switch.
- No need to say &quot;application/platform&quot;, who else would call this method?

&gt; Source/WebKit/qt/Api/qwebsecurityorigin.cpp:273
&gt; +void QWebSecurityOrigin::addOriginAccessWhitelistEntry(const QUrl&amp; sourceOrigin, const QString&amp; destinationProtocol, const QString&amp; destinationHost, SubdomainSetting subdomainSetting)

The rest of the class names is &quot;scheme&quot; rather than &quot;protocol&quot;, it would be nice to keep it consistent. It&apos;s also a bit clearer.

&gt; Source/WebKit/qt/Api/qwebsecurityorigin.h:30
&gt; +    class SecurityPolicy;

I think you don&apos;t need this here.

&gt; Source/WebKit/qt/Api/qwebsecurityorigin.h:52
&gt; +    static void addOriginAccessWhitelistEntry(const QUrl&amp;, const QString&amp;, const QString&amp;, SubdomainSetting);
&gt; +    static void removeOriginAccessWhitelistEntry(const QUrl&amp;, const QString&amp;, const QString&amp;, SubdomainSetting);
&gt; +    static void resetOriginAccessWhitelists();

The public header should always include parameter names.

I also think that having a QWebSecurityOrigin(const QUrl&amp;) public constructor and have add/remove as member methods would be a cleaner API.
QWebSecurityOrigin basically wraps WebCore::SecurityOrigin and I don&apos;t see much reason to prevent its construction if SecurityOrigin allows it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910951</commentid>
    <comment_count>14</comment_count>
      <attachid>205684</attachid>
    <who name="Deepjyoti Saha">deesaha</who>
    <bug_when>2013-07-23 02:22:58 -0700</bug_when>
    <thetext>Comment on attachment 205684
Patch

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

&gt;&gt; Source/WebKit/qt/Api/qwebsecurityorigin.cpp:271
&gt;&gt; +    Allows application/platform to whilelist an origin to have access to specific desitnations beyond same-origin-policy.
&gt; 
&gt; - The documentation should explain a bit what each parameter is about, also using the &quot;\a&quot; switch.
&gt; - No need to say &quot;application/platform&quot;, who else would call this method?

Sure, I will modify the documentation part to explain the parameters

&gt;&gt; Source/WebKit/qt/Api/qwebsecurityorigin.cpp:273
&gt;&gt; +void QWebSecurityOrigin::addOriginAccessWhitelistEntry(const QUrl&amp; sourceOrigin, const QString&amp; destinationProtocol, const QString&amp; destinationHost, SubdomainSetting subdomainSetting)
&gt; 
&gt; The rest of the class names is &quot;scheme&quot; rather than &quot;protocol&quot;, it would be nice to keep it consistent. It&apos;s also a bit clearer.

I will modify and use standard names like &quot;scheme&quot; and &quot;host&quot;.

&gt;&gt; Source/WebKit/qt/Api/qwebsecurityorigin.h:30
&gt;&gt; +    class SecurityPolicy;
&gt; 
&gt; I think you don&apos;t need this here.

Yes, we actually don&apos;t need it here :-). I will remove it.

&gt;&gt; Source/WebKit/qt/Api/qwebsecurityorigin.h:52
&gt;&gt; +    static void resetOriginAccessWhitelists();
&gt; 
&gt; The public header should always include parameter names.
&gt; 
&gt; I also think that having a QWebSecurityOrigin(const QUrl&amp;) public constructor and have add/remove as member methods would be a cleaner API.
&gt; QWebSecurityOrigin basically wraps WebCore::SecurityOrigin and I don&apos;t see much reason to prevent its construction if SecurityOrigin allows it.

I will modify the headers and include the constructor as suggested. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910964</commentid>
    <comment_count>15</comment_count>
      <attachid>207318</attachid>
    <who name="Deepjyoti Saha">deesaha</who>
    <bug_when>2013-07-23 03:45:40 -0700</bug_when>
    <thetext>Created attachment 207318
Patch

updated patch as per comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910965</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-23 03:47:44 -0700</bug_when>
    <thetext>Attachment 207318 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/qt/Api/qwebsecurityorigin.cpp&apos;, u&apos;Source/WebKit/qt/Api/qwebsecurityorigin.h&apos;, u&apos;Source/WebKit/qt/Api/qwebsecurityorigin_p.h&apos;, u&apos;Source/WebKit/qt/ChangeLog&apos;, u&apos;Source/WebKit/qt/tests/qwebsecurityorigin/qwebsecurityorigin.pro&apos;, u&apos;Source/WebKit/qt/tests/qwebsecurityorigin/resources/test.html&apos;, u&apos;Source/WebKit/qt/tests/qwebsecurityorigin/tst_qwebsecurityorigin.cpp&apos;, u&apos;Source/WebKit/qt/tests/qwebsecurityorigin/tst_qwebsecurityorigin.qrc&apos;, u&apos;Source/tests.pri&apos;]&quot; exit_code: 1
Source/WebKit/qt/Api/qwebsecurityorigin.h:49:  The parameter name &quot;subdomainSetting&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/Api/qwebsecurityorigin.h:50:  The parameter name &quot;subdomainSetting&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/Api/qwebsecurityorigin.h:53:  The parameter name &quot;url&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 3 in 9 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>912510</commentid>
    <comment_count>17</comment_count>
      <attachid>207318</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2013-07-29 09:03:17 -0700</bug_when>
    <thetext>Comment on attachment 207318
Patch

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

&gt; Source/WebKit/qt/Api/qwebsecurityorigin.cpp:278
&gt; +    if (origin)
&gt; +        d = new QWebSecurityOriginPrivate(origin);

It doesn&apos;t seem like SecurityOrigin::create can ever return null.
Plus most classes are always expecting to have a d-pointer.

&gt; Source/WebKit/qt/Api/qwebsecurityorigin.cpp:284
&gt; +    The subdomain access is based on the \a subdomainSetting.

This isn&apos;t telling much to the behavior a different value would trigger, could you instead explain here in one sentence what is the differentce between AllowSubdomains and DisallowSubdomains? I can&apos;t tell precisely myself just with this information.

&gt; Source/WebKit/qt/Api/qwebsecurityorigin.cpp:288
&gt; +void QWebSecurityOrigin::addOriginAccessWhitelistEntry(const QString&amp; scheme, const QString&amp; host, SubdomainSetting subdomainSetting)

Origin is already in the name of the class, addAccessWhitelistEntry would be more concise.

&gt; Source/WebKit/qt/Api/qwebsecurityorigin.cpp:291
&gt; +    if (!d)
&gt; +        return;

Not useful.

&gt; Source/WebKit/qt/Api/qwebsecurityorigin.cpp:303
&gt; +    if (!d)
&gt; +        return;

Ditto

&gt; Source/WebKit/qt/Api/qwebsecurityorigin.cpp:314
&gt; +void QWebSecurityOrigin::resetOriginAccessWhitelists()
&gt; +{
&gt; +    SecurityPolicy::resetOriginAccessWhitelists();
&gt; +}

This one isn&apos;t consistent with the two others, it should either:
- Be static and be named &quot;All&quot; something (e.g. resetAllAccessWhitelists).
- A proper per-origin resetAccessWhitelist should be implemented in SecurityPolicy
- Be removed

Since the API should last as long as possible, removing it would be the easiest and safest way. Most people will probably only add entries and can remove them through the remove method. Do you need it specifically in your case?

&gt; Source/WebKit/qt/Api/qwebsecurityorigin.h:53
&gt; +    QWebSecurityOrigin(const QUrl&amp; url);

Please mark the constructor explicit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912737</commentid>
    <comment_count>18</comment_count>
      <attachid>207318</attachid>
    <who name="Deepjyoti Saha">deesaha</who>
    <bug_when>2013-07-30 03:18:13 -0700</bug_when>
    <thetext>Comment on attachment 207318
Patch

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

&gt;&gt; Source/WebKit/qt/Api/qwebsecurityorigin.cpp:278
&gt;&gt; +        d = new QWebSecurityOriginPrivate(origin);
&gt; 
&gt; It doesn&apos;t seem like SecurityOrigin::create can ever return null.
&gt; Plus most classes are always expecting to have a d-pointer.

Ok, I will modify this.

&gt;&gt; Source/WebKit/qt/Api/qwebsecurityorigin.cpp:284
&gt;&gt; +    The subdomain access is based on the \a subdomainSetting.
&gt; 
&gt; This isn&apos;t telling much to the behavior a different value would trigger, could you instead explain here in one sentence what is the differentce between AllowSubdomains and DisallowSubdomains? I can&apos;t tell precisely myself just with this information.

Sorry, I will add an explanation for AllowSubdomains and DisallowSubdomains.

&gt;&gt; Source/WebKit/qt/Api/qwebsecurityorigin.cpp:288
&gt;&gt; +void QWebSecurityOrigin::addOriginAccessWhitelistEntry(const QString&amp; scheme, const QString&amp; host, SubdomainSetting subdomainSetting)
&gt; 
&gt; Origin is already in the name of the class, addAccessWhitelistEntry would be more concise.

Yes, it sounds more concise :)

&gt;&gt; Source/WebKit/qt/Api/qwebsecurityorigin.cpp:291
&gt;&gt; +        return;
&gt; 
&gt; Not useful.

OK, I will remove this.

&gt;&gt; Source/WebKit/qt/Api/qwebsecurityorigin.cpp:303
&gt;&gt; +        return;
&gt; 
&gt; Ditto

I will remove this as well.

&gt;&gt; Source/WebKit/qt/Api/qwebsecurityorigin.cpp:314
&gt;&gt; +}
&gt; 
&gt; This one isn&apos;t consistent with the two others, it should either:
&gt; - Be static and be named &quot;All&quot; something (e.g. resetAllAccessWhitelists).
&gt; - A proper per-origin resetAccessWhitelist should be implemented in SecurityPolicy
&gt; - Be removed
&gt; 
&gt; Since the API should last as long as possible, removing it would be the easiest and safest way. Most people will probably only add entries and can remove them through the remove method. Do you need it specifically in your case?

Yes, this API should not be attached with a particular origin considering the current implementation in SecurityPolicy. But I would suggest to retain this and be implemented as a static API. It will come handy in a case where application wants to flush an entire set in one go instead of iterating though a list of origins. Please let me know your opinion.

&gt;&gt;&gt; Source/WebKit/qt/Api/qwebsecurityorigin.h:53
&gt;&gt;&gt; +    QWebSecurityOrigin(const QUrl&amp; url);
&gt;&gt; 
&gt;&gt; The parameter name &quot;url&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; 
&gt; Please mark the constructor explicit.

Sure, I will do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912741</commentid>
    <comment_count>19</comment_count>
      <attachid>207709</attachid>
    <who name="Deepjyoti Saha">deesaha</who>
    <bug_when>2013-07-30 03:20:49 -0700</bug_when>
    <thetext>Created attachment 207709
Modified the patch as per suggestions.

Modified the patch as per suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912746</commentid>
    <comment_count>20</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2013-07-30 03:27:10 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; Yes, this API should not be attached with a particular origin considering the current implementation in SecurityPolicy. But I would suggest to retain this and be implemented as a static API. It will come handy in a case where application wants to flush an entire set in one go instead of iterating though a list of origins. Please let me know your opinion.

I would prefer that we do it either the ideal way (fix SecurityPolicy to support clearing for a specific security origin) or avoid it (not add the API).

If you need the functionality in your application now we can do a compromise and add the static API, but otherwise I think that the risk isn&apos;t worth it. If we add the static API and that the code changes underneat later (because it&apos;s not ideal), we&apos;ll have to suffer consequences that might not be worth the candle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912747</commentid>
    <comment_count>21</comment_count>
      <attachid>207709</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2013-07-30 03:33:07 -0700</bug_when>
    <thetext>Comment on attachment 207709
Modified the patch as per suggestions.

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

&gt; Source/WebKit/qt/Api/qwebsecurityorigin.cpp:295
&gt; +    Passing AllowSubdomains in \a subdomainSetting will allow the source origin to access
&gt; +    the \a host&apos;s subdomains as well, whereas passing DisallowSubdomains would prevent this.

In the case of removing, this documentation is misleading. Something like &quot;using the specified \a scheme *and \a subdomainSetting.*&quot; would be fine here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>913200</commentid>
    <comment_count>22</comment_count>
      <attachid>207810</attachid>
    <who name="Deepjyoti Saha">deesaha</who>
    <bug_when>2013-07-30 23:02:08 -0700</bug_when>
    <thetext>Created attachment 207810
Patch

updated the patch as per comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>913201</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-30 23:08:08 -0700</bug_when>
    <thetext>Attachment 207810 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/qt/Api/qwebsecurityorigin.cpp&apos;, u&apos;Source/WebKit/qt/Api/qwebsecurityorigin.h&apos;, u&apos;Source/WebKit/qt/Api/qwebsecurityorigin_p.h&apos;, u&apos;Source/WebKit/qt/ChangeLog&apos;, u&apos;Source/WebKit/qt/tests/qwebsecurityorigin/qwebsecurityorigin.pro&apos;, u&apos;Source/WebKit/qt/tests/qwebsecurityorigin/resources/test.html&apos;, u&apos;Source/WebKit/qt/tests/qwebsecurityorigin/tst_qwebsecurityorigin.cpp&apos;, u&apos;Source/WebKit/qt/tests/qwebsecurityorigin/tst_qwebsecurityorigin.qrc&apos;, u&apos;Source/tests.pri&apos;]&quot; exit_code: 1
Source/WebKit/qt/Api/qwebsecurityorigin.h:49:  The parameter name &quot;subdomainSetting&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/Api/qwebsecurityorigin.h:50:  The parameter name &quot;subdomainSetting&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/Api/qwebsecurityorigin.h:52:  The parameter name &quot;url&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 3 in 9 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>913208</commentid>
    <comment_count>24</comment_count>
    <who name="Deepjyoti Saha">deesaha</who>
    <bug_when>2013-07-30 23:45:29 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #18)
&gt; &gt; Yes, this API should not be attached with a particular origin considering the current implementation in SecurityPolicy. But I would suggest to retain this and be implemented as a static API. It will come handy in a case where application wants to flush an entire set in one go instead of iterating though a list of origins. Please let me know your opinion.
&gt; 
&gt; I would prefer that we do it either the ideal way (fix SecurityPolicy to support clearing for a specific security origin) or avoid it (not add the API).
&gt; 
&gt; If you need the functionality in your application now we can do a compromise and add the static API, but otherwise I think that the risk isn&apos;t worth it. If we add the static API and that the code changes underneat later (because it&apos;s not ideal), we&apos;ll have to suffer consequences that might not be worth the candle.

I understood the concern you explained. I will remove this API as of now and later if required I will take it up with proper fix in SecurityPolicy to support clearing entries for a specific origin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>913210</commentid>
    <comment_count>25</comment_count>
    <who name="Deepjyoti Saha">deesaha</who>
    <bug_when>2013-07-30 23:46:40 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 207709 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=207709&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/qt/Api/qwebsecurityorigin.cpp:295
&gt; &gt; +    Passing AllowSubdomains in \a subdomainSetting will allow the source origin to access
&gt; &gt; +    the \a host&apos;s subdomains as well, whereas passing DisallowSubdomains would prevent this.
&gt; 
&gt; In the case of removing, this documentation is misleading. Something like &quot;using the specified \a scheme *and \a subdomainSetting.*&quot; would be fine here.

Oops.. :(  Modified the comments in the updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>913288</commentid>
    <comment_count>26</comment_count>
      <attachid>207810</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2013-07-31 04:32:27 -0700</bug_when>
    <thetext>Comment on attachment 207810
Patch

lgtm, thanks :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>913295</commentid>
    <comment_count>27</comment_count>
      <attachid>207810</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-31 04:54:55 -0700</bug_when>
    <thetext>Comment on attachment 207810
Patch

Clearing flags on attachment: 207810

Committed r153516: &lt;http://trac.webkit.org/changeset/153516&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>913296</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-31 04:54:59 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>913327</commentid>
    <comment_count>29</comment_count>
    <who name="Deepjyoti Saha">deesaha</who>
    <bug_when>2013-07-31 05:54:13 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 207810 [details])
&gt; lgtm, thanks :)

Thanks !! :-)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>205064</attachid>
            <date>2013-06-20 02:47:27 -0700</date>
            <delta_ts>2013-06-28 02:44:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-117823-20130620151315.patch</filename>
            <type>text/plain</type>
            <size>3497</size>
            <attacher name="Deepjyoti Saha">deesaha</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTE3NzMpCisrKyBTb3VyY2UvV2ViS2l0L3F0
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDEzLTA2LTIwICBE
ZWVwanlvdGkgU2FoYSAgPGRlZXNhaGFAY2lzY28uY29tPgorCisgICAgICAgIFtRdF0gQWRkIGlu
dGVyZmFjZSBBUEkgZm9yIE9yaWdpbiB3aGl0ZUxpc3RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNzgyMworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBpbnRlcmZhY2UgQVBJcyBpbiBRV2Vi
U2VjdXJpdHlPcmlnaW4gZm9yIGFkZGluZy9yZW1vdmluZy9yZXNldHRpbmcgd2hpdGVMaXN0Lgor
CisgICAgICAgICogQXBpL3F3ZWJzZWN1cml0eW9yaWdpbi5jcHA6CisgICAgICAgIChRV2ViU2Vj
dXJpdHlPcmlnaW46OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KToKKyAgICAgICAgKFFX
ZWJTZWN1cml0eU9yaWdpbjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkpOgorICAg
ICAgICAoUVdlYlNlY3VyaXR5T3JpZ2luOjpyZXNldE9yaWdpbkFjY2Vzc1doaXRlbGlzdHMpOgor
ICAgICAgICAqIEFwaS9xd2Vic2VjdXJpdHlvcmlnaW4uaDoKKwogMjAxMy0wNi0xNyAgTWljaGFl
bCBCcsO8bmluZyAgPG1pY2hhZWwuYnJ1bmluZ0BkaWdpYS5jb20+CiAKICAgICAgICAgW1F0XSBS
ZW1vdmUgUXQgc3BlY2lmaWMgUVRLSVQgZmxhZ2dlZCBjb2RlLgpJbmRleDogU291cmNlL1dlYktp
dC9xdC9BcGkvcXdlYnNlY3VyaXR5b3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2Vic2VjdXJpdHlvcmlnaW4uY3BwCShyZXZpc2lvbiAxNTE3MjkpCisrKyBT
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2VjdXJpdHlvcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlNjaGVtZVJl
Z2lzdHJ5LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTZWN1cml0
eVBvbGljeS5oIgogI2luY2x1ZGUgInF3ZWJkYXRhYmFzZS5oIgogI2luY2x1ZGUgInF3ZWJkYXRh
YmFzZV9wLmgiCiAjaW5jbHVkZSAicXdlYnNlY3VyaXR5b3JpZ2luX3AuaCIKQEAgLTI2NSwzICsy
NjYsMzAgQEAgUVN0cmluZ0xpc3QgUVdlYlNlY3VyaXR5T3JpZ2luOjpsb2NhbFNjaAogICAgIH0K
ICAgICByZXR1cm4gbGlzdDsKIH0KKworLyohCisgICAgQWxsb3dzIGFwcGxpY2F0aW9uL3BsYXRm
b3JtIHRvIHdoaWxlbGlzdCBhbiBvcmlnaW4gdG8gaGF2ZSBhY2Nlc3MgdG8gc3BlY2lmaWMgZGVz
aXRuYXRpb25zIGJleW9uZCBzYW1lLW9yaWdpbi1wb2xpY3kuCisqLwordm9pZCBRV2ViU2VjdXJp
dHlPcmlnaW46OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IFFVcmwmIHNvdXJj
ZU9yaWdpbiwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRpb25Qcm90b2NvbCwgY29uc3QgUVN0cmlu
ZyYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKQorewor
ICAgIFNlY3VyaXR5UG9saWN5OjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSgqU2VjdXJp
dHlPcmlnaW46OmNyZWF0ZShLVVJMKHNvdXJjZU9yaWdpbikpLCBkZXN0aW5hdGlvblByb3RvY29s
LCBkZXN0aW5hdGlvbkhvc3QsIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKK30KKworLyoh
CisgICAgQWxsb3dzIGFwcGxpY2F0aW9uL3BsYXRmb3JtIHRvIHJlbW92ZSBhbiBvcmlnaW4gZnJv
bSB3aGl0ZWxpc3QgdG8gaGF2ZSBhY2Nlc3MgdG8gc3BlY2lmaWMgZGVzaXRuYXRpb25zIGJleW9u
ZCBzYW1lLW9yaWdpbi1wb2xpY3kuCisqLwordm9pZCBRV2ViU2VjdXJpdHlPcmlnaW46OnJlbW92
ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IFFVcmwmIHNvdXJjZU9yaWdpbiwgY29u
c3QgUVN0cmluZyYgZGVzdGluYXRpb25Qcm90b2NvbCwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRp
b25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKQoreworICAgIFNlY3VyaXR5
UG9saWN5OjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSgqU2VjdXJpdHlPcmlnaW46
OmNyZWF0ZShLVVJMKHNvdXJjZU9yaWdpbikpLCBkZXN0aW5hdGlvblByb3RvY29sLCBkZXN0aW5h
dGlvbkhvc3QsIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKK30KKworLyohCisgICAgQWxs
b3dzIGFwcGxpY2F0aW9uL3BsYXRmb3JtIHRvIGNsZWFyIHRoZSB3aGl0ZWxpc3QgdG8gaGF2ZSBh
Y2Nlc3MgdG8gc3BlY2lmaWMgZGVzaXRuYXRpb25zIGJleW9uZCBzYW1lLW9yaWdpbi1wb2xpY3ku
CisqLwordm9pZCBRV2ViU2VjdXJpdHlPcmlnaW46OnJlc2V0T3JpZ2luQWNjZXNzV2hpdGVsaXN0
cygpCit7CisgICAgU2VjdXJpdHlQb2xpY3k6OnJlc2V0T3JpZ2luQWNjZXNzV2hpdGVsaXN0cygp
OworfQorCisKKwpJbmRleDogU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNlY3VyaXR5b3JpZ2lu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNlY3VyaXR5b3JpZ2lu
LmgJKHJldmlzaW9uIDE1MTcyOSkKKysrIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZWN1cml0
eW9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBjbGFzcyBTZWN1cml0eU9yaWdpbjsKKyAgICBjbGFzcyBTZWN1cml0eVBv
bGljeTsKICAgICBjbGFzcyBDaHJvbWVDbGllbnRRdDsKIH0KIApAQCAtNDEsNiArNDIsMTAgQEAg
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIHJlbW92ZUxvY2FsU2NoZW1lKGNvbnN0IFFTdHJpbmcm
IHNjaGVtZSk7CiAgICAgc3RhdGljIFFTdHJpbmdMaXN0IGxvY2FsU2NoZW1lcygpOwogCisgICAg
c3RhdGljIHZvaWQgYWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgUVVybCYsIGNv
bnN0IFFTdHJpbmcmLCBjb25zdCBRU3RyaW5nJiwgYm9vbCk7CisgICAgc3RhdGljIHZvaWQgcmVt
b3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgUVVybCYsIGNvbnN0IFFTdHJpbmcm
LCBjb25zdCBRU3RyaW5nJiwgYm9vbCk7CisgICAgc3RhdGljIHZvaWQgcmVzZXRPcmlnaW5BY2Nl
c3NXaGl0ZWxpc3RzKCk7CisKICAgICB+UVdlYlNlY3VyaXR5T3JpZ2luKCk7CiAKICAgICBRU3Ry
aW5nIHNjaGVtZSgpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>205684</attachid>
            <date>2013-06-28 02:44:20 -0700</date>
            <delta_ts>2013-07-23 02:22:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-117823-20130628150940.patch</filename>
            <type>text/plain</type>
            <size>17113</size>
            <attacher name="Deepjyoti Saha">deesaha</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS90ZXN0cy5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL3Rlc3RzLnByaQko
cmV2aXNpb24gMTUxNzI5KQorKysgU291cmNlL3Rlc3RzLnByaQkod29ya2luZyBjb3B5KQpAQCAt
MjAsNiArMjAsNyBAQCBTVUJESVJTICs9IFwKICAgICAkJFdFQktJVF9URVNUU19ESVIvcXdlYnZp
ZXcgXAogICAgICQkV0VCS0lUX1RFU1RTX0RJUi9xd2ViaGlzdG9yeSBcCiAgICAgJCRXRUJLSVRf
VEVTVFNfRElSL3F3ZWJpbnNwZWN0b3IgXAorICAgICQkV0VCS0lUX1RFU1RTX0RJUi9xd2Vic2Vj
dXJpdHlvcmlnaW4gXAogICAgICQkV0VCS0lUX1RFU1RTX0RJUi9oeWJyaWRQaXhtYXAKIAogbGlu
dXgtKiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gMTUyMTU2KQorKysgU291cmNlL1dl
YktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMyBAQAorMjAxMy0w
Ni0yOCAgRGVlcGp5b3RpIFNhaGEgIDxkZWVzYWhhQGNpc2NvLmNvbT4KKworICAgICAgICBbUXRd
IEFkZCBpbnRlcmZhY2UgQVBJIGZvciBvcmlnaW4gd2hpdGVsaXN0aW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTc4MjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgaW50ZXJmYWNlIEFQSXMg
aW4gUVdlYlNlY3VyaXR5T3JpZ2luIGZvciBhZGRpbmcvcmVtb3ZpbmcvcmVzZXR0aW5nIHdoaXRl
TGlzdC4KKworICAgICAgICBSZS11c2VkIG1vc3Qgb2YgdGhlIHRlc3QgY2FzZXMgd3JpdHRlbiBi
eSBDYXJvbCBTemFibyAgPGNhcm9sLnN6YWJvQG5va2lhLmNvbT4gCisgICAgICAgIGZvciBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE4NzUgYW5kIGFkZGVkIHRoZSBz
YW1lLgorCisgICAgICAgICogQXBpL3F3ZWJzZWN1cml0eW9yaWdpbi5jcHA6CisgICAgICAgIChR
V2ViU2VjdXJpdHlPcmlnaW46OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KToKKyAgICAg
ICAgKFFXZWJTZWN1cml0eU9yaWdpbjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkp
OgorICAgICAgICAoUVdlYlNlY3VyaXR5T3JpZ2luOjpyZXNldE9yaWdpbkFjY2Vzc1doaXRlbGlz
dHMpOgorICAgICAgICAqIEFwaS9xd2Vic2VjdXJpdHlvcmlnaW4uaDoKKyAgICAgICAgKiB0ZXN0
cy9xd2Vic2VjdXJpdHlvcmlnaW46IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3F3ZWJzZWN1cml0
eW9yaWdpbi9xd2Vic2VjdXJpdHlvcmlnaW4ucHJvOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9x
d2Vic2VjdXJpdHlvcmlnaW4vcmVzb3VyY2VzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9xd2Vi
c2VjdXJpdHlvcmlnaW4vcmVzb3VyY2VzL3Rlc3QuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVz
dHMvcXdlYnNlY3VyaXR5b3JpZ2luL3RzdF9xd2Vic2VjdXJpdHlvcmlnaW4uY3BwOiBBZGRlZC4K
KyAgICAgICAgKHRzdF9RV2ViU2VjdXJpdHlPcmlnaW46OnRzdF9RV2ViU2VjdXJpdHlPcmlnaW4p
OgorICAgICAgICAodHN0X1FXZWJTZWN1cml0eU9yaWdpbjo6fnRzdF9RV2ViU2VjdXJpdHlPcmln
aW4pOgorICAgICAgICAodHN0X1FXZWJTZWN1cml0eU9yaWdpbjo6aW5pdCk6CisgICAgICAgICh0
c3RfUVdlYlNlY3VyaXR5T3JpZ2luOjpjbGVhbnVwKToKKyAgICAgICAgKHRzdF9RV2ViU2VjdXJp
dHlPcmlnaW46OndoaXRlTGlzdF9kYXRhKToKKyAgICAgICAgKHRzdF9RV2ViU2VjdXJpdHlPcmln
aW46OndoaXRlTGlzdCk6CisgICAgICAgICogdGVzdHMvcXdlYnNlY3VyaXR5b3JpZ2luL3RzdF9x
d2Vic2VjdXJpdHlvcmlnaW4ucXJjOiBBZGRlZC4KKwogMjAxMy0wNi0yNyAgS2FuZ2lsIEhhbiAg
PGthbmdpbC5oYW5Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgQWRvcHQgaXMvdG9IVE1MSW5wdXRF
bGVtZW50IGZvciBjb2RlIGNsZWFudXAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJz
ZWN1cml0eW9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9BcGkvcXdl
YnNlY3VyaXR5b3JpZ2luLmNwcAkocmV2aXNpb24gMTUxNzI5KQorKysgU291cmNlL1dlYktpdC9x
dC9BcGkvcXdlYnNlY3VyaXR5b3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUs
NyBAQAogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgogI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlQb2xpY3kuaCIKICNp
bmNsdWRlICJxd2ViZGF0YWJhc2UuaCIKICNpbmNsdWRlICJxd2ViZGF0YWJhc2VfcC5oIgogI2lu
Y2x1ZGUgInF3ZWJzZWN1cml0eW9yaWdpbl9wLmgiCkBAIC0yNjUsMyArMjY2LDMyIEBAIFFTdHJp
bmdMaXN0IFFXZWJTZWN1cml0eU9yaWdpbjo6bG9jYWxTY2gKICAgICB9CiAgICAgcmV0dXJuIGxp
c3Q7CiB9CisKKy8qIQorICAgIEFsbG93cyBhcHBsaWNhdGlvbi9wbGF0Zm9ybSB0byB3aGlsZWxp
c3QgYW4gb3JpZ2luIHRvIGhhdmUgYWNjZXNzIHRvIHNwZWNpZmljIGRlc2l0bmF0aW9ucyBiZXlv
bmQgc2FtZS1vcmlnaW4tcG9saWN5LgorKi8KK3ZvaWQgUVdlYlNlY3VyaXR5T3JpZ2luOjphZGRP
cmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBRVXJsJiBzb3VyY2VPcmlnaW4sIGNvbnN0
IFFTdHJpbmcmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9u
SG9zdCwgU3ViZG9tYWluU2V0dGluZyBzdWJkb21haW5TZXR0aW5nKQoreworICAgIFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gb3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShLVVJMKHNvdXJj
ZU9yaWdpbikpOworICAgIFNlY3VyaXR5UG9saWN5OjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RF
bnRyeSgqb3JpZ2luLCBkZXN0aW5hdGlvblByb3RvY29sLCBkZXN0aW5hdGlvbkhvc3QsIChzdWJk
b21haW5TZXR0aW5nID09IEFsbG93U3ViZG9tYWlucykgPyB0cnVlIDogZmFsc2UpOworfQorCisv
KiEKKyAgICBBbGxvd3MgYXBwbGljYXRpb24vcGxhdGZvcm0gdG8gcmVtb3ZlIGFuIG9yaWdpbiBm
cm9tIHdoaXRlbGlzdCB0byBoYXZlIGFjY2VzcyB0byBzcGVjaWZpYyBkZXNpdG5hdGlvbnMgYmV5
b25kIHNhbWUtb3JpZ2luLXBvbGljeS4KKyovCit2b2lkIFFXZWJTZWN1cml0eU9yaWdpbjo6cmVt
b3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgUVVybCYgc291cmNlT3JpZ2luLCBj
b25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvblByb3RvY29sLCBjb25zdCBRU3RyaW5nJiBkZXN0aW5h
dGlvbkhvc3QsIFN1YmRvbWFpblNldHRpbmcgc3ViZG9tYWluU2V0dGluZykKK3sKKyAgICBSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUoS1VSTChz
b3VyY2VPcmlnaW4pKTsKKyAgICBTZWN1cml0eVBvbGljeTo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hp
dGVsaXN0RW50cnkoKm9yaWdpbiwgZGVzdGluYXRpb25Qcm90b2NvbCwgZGVzdGluYXRpb25Ib3N0
LCAoc3ViZG9tYWluU2V0dGluZyA9PSBBbGxvd1N1YmRvbWFpbnMpID8gdHJ1ZSA6IGZhbHNlKTsK
K30KKworLyohCisgICAgQWxsb3dzIGFwcGxpY2F0aW9uL3BsYXRmb3JtIHRvIGNsZWFyIHRoZSB3
aGl0ZWxpc3QgdG8gaGF2ZSBhY2Nlc3MgdG8gc3BlY2lmaWMgZGVzaXRuYXRpb25zIGJleW9uZCBz
YW1lLW9yaWdpbi1wb2xpY3kuCisqLwordm9pZCBRV2ViU2VjdXJpdHlPcmlnaW46OnJlc2V0T3Jp
Z2luQWNjZXNzV2hpdGVsaXN0cygpCit7CisgICAgU2VjdXJpdHlQb2xpY3k6OnJlc2V0T3JpZ2lu
QWNjZXNzV2hpdGVsaXN0cygpOworfQorCisKKwpJbmRleDogU291cmNlL1dlYktpdC9xdC9BcGkv
cXdlYnNlY3VyaXR5b3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9BcGkv
cXdlYnNlY3VyaXR5b3JpZ2luLmgJKHJldmlzaW9uIDE1MTcyOSkKKysrIFNvdXJjZS9XZWJLaXQv
cXQvQXBpL3F3ZWJzZWN1cml0eW9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTZWN1cml0eU9yaWdpbjsKKyAg
ICBjbGFzcyBTZWN1cml0eVBvbGljeTsKICAgICBjbGFzcyBDaHJvbWVDbGllbnRRdDsKIH0KIApA
QCAtMzYsMTEgKzM3LDIwIEBAIGNsYXNzIFFXZWJGcmFtZTsKIAogY2xhc3MgUVdFQktJVF9FWFBP
UlQgUVdlYlNlY3VyaXR5T3JpZ2luIHsKIHB1YmxpYzoKKyAgICBlbnVtIFN1YmRvbWFpblNldHRp
bmcgeworICAgICAgICBBbGxvd1N1YmRvbWFpbnMsCisgICAgICAgIERpc2FsbG93U3ViZG9tYWlu
cworICAgIH07CisgICAgCiAgICAgc3RhdGljIFFMaXN0PFFXZWJTZWN1cml0eU9yaWdpbj4gYWxs
T3JpZ2lucygpOwogICAgIHN0YXRpYyB2b2lkIGFkZExvY2FsU2NoZW1lKGNvbnN0IFFTdHJpbmcm
IHNjaGVtZSk7CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlTG9jYWxTY2hlbWUoY29uc3QgUVN0cmlu
ZyYgc2NoZW1lKTsKICAgICBzdGF0aWMgUVN0cmluZ0xpc3QgbG9jYWxTY2hlbWVzKCk7CiAKKyAg
ICBzdGF0aWMgdm9pZCBhZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBRVXJsJiwg
Y29uc3QgUVN0cmluZyYsIGNvbnN0IFFTdHJpbmcmLCBTdWJkb21haW5TZXR0aW5nKTsKKyAgICBz
dGF0aWMgdm9pZCByZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBRVXJsJiwg
Y29uc3QgUVN0cmluZyYsIGNvbnN0IFFTdHJpbmcmLCBTdWJkb21haW5TZXR0aW5nKTsKKyAgICBz
dGF0aWMgdm9pZCByZXNldE9yaWdpbkFjY2Vzc1doaXRlbGlzdHMoKTsKKwogICAgIH5RV2ViU2Vj
dXJpdHlPcmlnaW4oKTsKIAogICAgIFFTdHJpbmcgc2NoZW1lKCkgY29uc3Q7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L3F0L3Rlc3RzL3F3ZWJzZWN1cml0eW9yaWdpbi9xd2Vic2VjdXJpdHlvcmlnaW4u
cHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcXdlYnNlY3VyaXR5b3Jp
Z2luL3F3ZWJzZWN1cml0eW9yaWdpbi5wcm8JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0
L3F0L3Rlc3RzL3F3ZWJzZWN1cml0eW9yaWdpbi9xd2Vic2VjdXJpdHlvcmlnaW4ucHJvCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKK2luY2x1ZGUoLi4vdGVzdHMucHJpKQorZXhpc3RzKCQk
e1RBUkdFVH0ucXJjKTpSRVNPVVJDRVMgKz0gJCR7VEFSR0VUfS5xcmMKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvcXQvdGVzdHMvcXdlYnNlY3VyaXR5b3JpZ2luL3RzdF9xd2Vic2VjdXJpdHlvcmlnaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcXdlYnNlY3VyaXR5b3Jp
Z2luL3RzdF9xd2Vic2VjdXJpdHlvcmlnaW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YktpdC9xdC90ZXN0cy9xd2Vic2VjdXJpdHlvcmlnaW4vdHN0X3F3ZWJzZWN1cml0eW9yaWdpbi5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICAgIENvcHlyaWdodCAoQykg
MjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMTMgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpbmNsdWRlIDxRRGVidWc+CisjaW5jbHVkZSA8UU5ldHdvcmtSZXBseT4KKyNpbmNs
dWRlIDxRdFRlc3Q+CisjaW5jbHVkZSA8cXdlYmZyYW1lLmg+CisjaW5jbHVkZSA8cXdlYnBhZ2Uu
aD4KKyNpbmNsdWRlIDxxd2Vic2VjdXJpdHlvcmlnaW4uaD4KKyNpbmNsdWRlIDxxd2Vidmlldy5o
PgorCitjbGFzcyB0c3RfUVdlYlNlY3VyaXR5T3JpZ2luIDogcHVibGljIFFPYmplY3QgeworICAg
IFFfT0JKRUNUCitwdWJsaWM6CisgICAgdHN0X1FXZWJTZWN1cml0eU9yaWdpbigpOworICAgIHZp
cnR1YWwgfnRzdF9RV2ViU2VjdXJpdHlPcmlnaW4oKTsKKworcHJpdmF0ZSBzbG90czoKKyAgICB2
b2lkIGluaXQoKTsKKyAgICB2b2lkIGNsZWFudXAoKTsKKyAgICB2b2lkIHdoaXRlTGlzdF9kYXRh
KCk7CisgICAgdm9pZCB3aGl0ZUxpc3QoKTsKK3ByaXZhdGU6CisgICAgUVdlYlZpZXcqIG1fdmll
dzsKKyAgICBRV2ViUGFnZSogbV9wYWdlOworfTsKKwordHN0X1FXZWJTZWN1cml0eU9yaWdpbjo6
dHN0X1FXZWJTZWN1cml0eU9yaWdpbigpCit7Cit9CisKK3RzdF9RV2ViU2VjdXJpdHlPcmlnaW46
On50c3RfUVdlYlNlY3VyaXR5T3JpZ2luKCkKK3sKK30KKwordm9pZCB0c3RfUVdlYlNlY3VyaXR5
T3JpZ2luOjppbml0KCkKK3sKKyAgICBtX3ZpZXcgPSBuZXcgUVdlYlZpZXcoKTsKKyAgICBtX3Bh
Z2UgPSBtX3ZpZXctPnBhZ2UoKTsKK30KKwordm9pZCB0c3RfUVdlYlNlY3VyaXR5T3JpZ2luOjpj
bGVhbnVwKCkKK3sKKyAgICBkZWxldGUgbV92aWV3OworfQorCit2b2lkIHRzdF9RV2ViU2VjdXJp
dHlPcmlnaW46OndoaXRlTGlzdF9kYXRhKCkKK3sKKyAgICBRVGVzdDo6YWRkQ29sdW1uPFFTdHJp
bmc+KCJzb3VyY2UiKTsKKyAgICBRVGVzdDo6YWRkQ29sdW1uPFFTdHJpbmc+KCJ0YXJnZXRQcm90
b2NvbCIpOworICAgIFFUZXN0OjphZGRDb2x1bW48UVN0cmluZz4oInRhcmdldEhvc3QiKTsKKyAg
ICBRVGVzdDo6YWRkQ29sdW1uPGJvb2w+KCJpbmNsdWRlU3ViRG9tYWlucyIpOworICAgIFFUZXN0
OjphZGRDb2x1bW48UVN0cmluZz4oInRlc3RVcmwiKTsKKyAgICBRVGVzdDo6YWRkQ29sdW1uPGJv
b2w+KCJzdWNjZXNzQmVmb3JlQWRkIik7CisgICAgUVRlc3Q6OmFkZENvbHVtbjxib29sPigic3Vj
Y2Vzc0FmdGVyQWRkMSIpOworICAgIFFUZXN0OjphZGRDb2x1bW48Ym9vbD4oInN1Y2Nlc3NBZnRl
clJlbW92ZSIpOworICAgIFFUZXN0OjphZGRDb2x1bW48Ym9vbD4oInN1Y2Nlc3NBZnRlckFkZDIi
KTsKKyAgICBRVGVzdDo6YWRkQ29sdW1uPGJvb2w+KCJzdWNjZXNzQWZ0ZXJDbGVhciIpOworCisg
ICAgUVRlc3Q6Om5ld1Jvdygic2NoZW1lIikgPDwgImh0dHA6Ly93d3cuc291cmNlLmNvbSIgPDwg
Imh0dHBzIiA8PCAid3d3LnRhcmdldC5jb20iIDw8IGZhbHNlIDw8ICJodHRwczovL3d3dy50YXJn
ZXQuY29tL290aGVyIiA8PCBmYWxzZSA8PCB0cnVlIDw8IGZhbHNlIDw8IHRydWUgPDwgZmFsc2U7
CisgICAgUVRlc3Q6Om5ld1Jvdygic2NoZW1lRmFpbCIpIDw8ICJodHRwOi8vd3d3LnNvdXJjZS5j
b20iIDw8ICJodHRwcyIgPDwgInd3dy50YXJnZXQuY29tIiA8PCBmYWxzZSA8PCAiaHR0cDovL3d3
dy50YXJnZXQuY29tL290aGVyIiA8PCBmYWxzZSA8PCBmYWxzZSA8PCBmYWxzZSA8PCBmYWxzZSA8
PCBmYWxzZTsKKyAgICBRVGVzdDo6bmV3Um93KCJzY2hlbWVTdWJEb20iKSA8PCAiaHR0cDovL3d3
dy5zb3VyY2UuY29tIiA8PCAiaHR0cHMiIDw8ICJ0YXJnZXQuY29tIiA8PCB0cnVlIDw8ICJodHRw
czovL3d3dy50YXJnZXQuY29tL290aGVyIiA8PCBmYWxzZSA8PCB0cnVlIDw8IGZhbHNlIDw8IHRy
dWUgPDwgZmFsc2U7CisgICAgUVRlc3Q6Om5ld1Jvdygic2NoZW1lU3ViRG9tRmFpbCIpIDw8ICJo
dHRwOi8vd3d3LnNvdXJjZS5jb20iIDw8ICJodHRwcyIgPDwgInRhcmdldC5jb20iIDw8IHRydWUg
PDwgImh0dHBzOi8vd3d3dGFyZ2V0LmNvbS9vdGhlciIgPDwgZmFsc2UgPDwgZmFsc2UgPDwgZmFs
c2UgPDwgZmFsc2UgPDwgZmFsc2U7CisgICAgUVRlc3Q6Om5ld1Jvdygic2NoZW1lU3ViRG9tRmFp
bCIpIDw8ICJodHRwOi8vd3d3LnNvdXJjZS5jb20iIDw8ICJodHRwcyIgPDwgInRhcmdldC5jb20i
IDw8IHRydWUgPDwgImh0dHA6Ly93d3cudGFyZ2V0LmNvbS9vdGhlciIgPDwgZmFsc2UgPDwgZmFs
c2UgPDwgZmFsc2UgPDwgZmFsc2UgPDwgZmFsc2U7CisgICAgUVRlc3Q6Om5ld1JvdygiaG9zdCIp
IDw8ICJodHRwOi8vd3d3LnNvdXJjZS5jb20iIDw8ICJodHRwIiA8PCAid3d3LnRhcmdldC5jb20i
IDw8IGZhbHNlIDw8ICJodHRwOi8vd3d3LnRhcmdldC5jb20vdGFyZ2V0IiA8PCBmYWxzZSA8PCB0
cnVlIDw8IGZhbHNlIDw8IHRydWUgPDwgZmFsc2U7CisgICAgUVRlc3Q6Om5ld1JvdygiaG9zdEZh
aWwiKSA8PCAiaHR0cDovL3d3dy5zb3VyY2UuY29tIiA8PCAiaHR0cCIgPDwgInd3dy50YXJnZXQu
Y29tIiA8PCBmYWxzZSA8PCAiaHR0cDovL3d3dy5uZXd0YXJnZXQuY29tIiA8PCBmYWxzZSA8PCBm
YWxzZSA8PCBmYWxzZSA8PCBmYWxzZSA8PCBmYWxzZTsKKyAgICBRVGVzdDo6bmV3Um93KCJob3N0
U3ViRG9tIikgPDwgImh0dHA6Ly93d3cuc291cmNlLmNvbSIgPDwgImh0dHAiIDw8ICJ0YXJnZXQu
Y29tIiA8PCB0cnVlIDw8ICJodHRwOi8vYWJjMi50YXJnZXQuY29tIiA8PCBmYWxzZSA8PCB0cnVl
IDw8IGZhbHNlIDw8IHRydWUgPDxmYWxzZTsKKyAgICBRVGVzdDo6bmV3Um93KCJob3N0U3ViRG9t
RmFpbCIpIDw8ICJodHRwOi8vd3d3LnNvdXJjZS5jb20iIDw8ICJodHRwIiA8PCJ0YXJnZXQuY29t
IiA8PCB0cnVlIDw8ICJodHRwOi8vYWJjMnRhcmdldC5jb20iIDw8IGZhbHNlIDw8IGZhbHNlIDw8
IGZhbHNlIDw8IGZhbHNlIDw8IGZhbHNlOworICAgIFFUZXN0OjpuZXdSb3coImhvc3RTdWJEb21G
YWlsQ291bnRyeSIpIDw8ICJodHRwOi8vd3d3LnNvdXJjZS5jb20iIDw8ICJodHRwIiA8PCAidGFy
Z2V0LmNvbSIgPDwgdHJ1ZSA8PCAiaHR0cDovL3d3dy50YXJnZXQuY29tLnR3IiA8PCBmYWxzZSA8
PCBmYWxzZSA8PCBmYWxzZSA8PCBmYWxzZSA8PCBmYWxzZTsKK30KKworY2xhc3MgQ2FubmVkUmVz
cG9uc2VOZXR3b3JrUmVwbHk6IHB1YmxpYyBRTmV0d29ya1JlcGx5IHsKKyAgICBRX09CSkVDVAor
cHVibGljOgorICAgIENhbm5lZFJlc3BvbnNlTmV0d29ya1JlcGx5KFFPYmplY3QqIHBhcmVudCwg
UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpPcGVyYXRpb24gb3AsIGNvbnN0IFFOZXR3b3JrUmVxdWVz
dCYgcmVxLCBjb25zdCBRQnVmZmVyJiBib2R5KTogUU5ldHdvcmtSZXBseShwYXJlbnQpCisgICAg
eworICAgICAgICBzZXRSZXF1ZXN0KHJlcSk7CisgICAgICAgIHNldFVybChyZXEudXJsKCkpOwor
ICAgICAgICBzZXRPcGVyYXRpb24ob3ApOworICAgICAgICBtX2J1ZmZlci5zZXREYXRhKGJvZHku
ZGF0YSgpKTsKKyAgICAgICAgY29ubmVjdCgmbV9idWZmZXIsIFNJR05BTChyZWFkeVJlYWQoKSks
IFNMT1QoZW1pdFJlYWR5UmVhZCgpKSk7CisgICAgICAgIGNvbm5lY3QoJm1fYnVmZmVyLCBTSUdO
QUwocmVhZENoYW5uZWxGaW5pc2hlZCgpKSwgU0xPVChlbWl0UmVhZENoYW5uZWxGaW5pc2hlZCgp
KSk7CisgICAgICAgIGNvbm5lY3QoJm1fYnVmZmVyLCBTSUdOQUwocmVhZENoYW5uZWxGaW5pc2hl
ZCgpKSwgU0xPVChlbWl0UmVhZENoYW5uZWxGaW5pc2hlZCgpKSk7CisgICAgICAgIG1fYnVmZmVy
Lm9wZW4oUUlPRGV2aWNlOjpSZWFkT25seSk7CisgICAgICAgIG9wZW4oUUlPRGV2aWNlOjpSZWFk
T25seSk7CisgICAgICAgIFFUaW1lcjo6c2luZ2xlU2hvdCgxMCwgdGhpcywgU0xPVCh1cGRhdGUo
KSkpOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBxaW50NjQgcmVhZERhdGEoY2hhciAqIGRhdGEs
IHFpbnQ2NCBtYXhTaXplKQorICAgIHsKKyAgICAgICAgcWludDY0IHJlc3VsdCA9IG1fYnVmZmVy
LnJlYWQoZGF0YSwgbWF4U2l6ZSk7CisgICAgICAgIGlmICghbV9idWZmZXIuYnl0ZXNBdmFpbGFi
bGUoKSkKKyAgICAgICAgICAgIFFUaW1lcjo6c2luZ2xlU2hvdCgxMCwgdGhpcywgU0xPVChlbWl0
UmVhZENoYW5uZWxGaW5pc2hlZCgpKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgdmlydHVhbCBxaW50NjQgYnl0ZXNBdmFpbGFibGUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fYnVmZmVyLmJ5dGVzQXZhaWxhYmxlKCk7CisgICAgfQorCitwcml2YXRlIHNs
b3RzOgorICAgIHZvaWQgZW1pdFJlYWR5UmVhZCgpCisgICAgeworICAgICAgICBlbWl0IHJlYWR5
UmVhZCgpOworICAgIH0KKworICAgIHZvaWQgZW1pdFJlYWRDaGFubmVsRmluaXNoZWQoKQorICAg
IHsKKyAgICAgICAgZW1pdCByZWFkQ2hhbm5lbEZpbmlzaGVkKCk7CisgICAgICAgIGVtaXQgZmlu
aXNoZWQoKTsKKyAgICB9CisKKyAgICB2b2lkIGFib3J0KCkKKyAgICB7CisgICAgfTsKKworICAg
IHZvaWQgdXBkYXRlKCkKKyAgICB7CisgICAgICAgIHNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6
OkNvbnRlbnRUeXBlSGVhZGVyLCAidGV4dC9wbGFpbiIpOworICAgICAgICBzZXRIZWFkZXIoUU5l
dHdvcmtSZXF1ZXN0OjpDb250ZW50TGVuZ3RoSGVhZGVyLCBtX2J1ZmZlci5zaXplKCkpOworICAg
ICAgICBzZXRFcnJvcihRTmV0d29ya1JlcGx5OjpOb0Vycm9yLCAiIik7CisgICAgICAgIHNldEF0
dHJpYnV0ZShRTmV0d29ya1JlcXVlc3Q6Okh0dHBTdGF0dXNDb2RlQXR0cmlidXRlLCAyMDApOwor
ICAgICAgICBzZXRBdHRyaWJ1dGUoUU5ldHdvcmtSZXF1ZXN0OjpIdHRwUmVhc29uUGhyYXNlQXR0
cmlidXRlLCBRU3RyaW5nKCJPayIpLnRvTGF0aW4xKCkpOworICAgICAgICBlbWl0IG1ldGFEYXRh
Q2hhbmdlZCgpOworICAgICAgICBlbWl0IHJlYWR5UmVhZCgpOworICAgIH0KK3B1YmxpYzoKKyAg
ICBRQnVmZmVyIG1fYnVmZmVyOworfTsKKworY2xhc3MgQ2FubmVkUmVzcG9uc2VOZXR3b3JrQWNj
ZXNzTWFuYWdlcjogcHVibGljIFFOZXR3b3JrQWNjZXNzTWFuYWdlciB7CisgICAgUV9PQkpFQ1QK
K3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIFFOZXR3b3JrUmVwbHkqIGNyZWF0ZVJlcXVlc3QoT3Bl
cmF0aW9uIG9wLCBjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJlcSwgUUlPRGV2aWNlKiBvdXRnb2lu
Z0RhdGEgPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDYW5uZWRSZXNwb25zZU5ldHdv
cmtSZXBseSh0aGlzLCBvcCwgcmVxLCAqbV9idWZmZXIpOworICAgIH07CitwdWJsaWM6CisgICAg
UUJ1ZmZlciogbV9idWZmZXI7Cit9OworCitzdGF0aWMgY29uc3QgY2hhciBjYW5uZWRSZXNwb25z
ZVtdID0gIlRlc3QiOworCit2b2lkIHRzdF9RV2ViU2VjdXJpdHlPcmlnaW46OndoaXRlTGlzdCgp
Cit7CisgICAgUUZFVENIKFFTdHJpbmcsIHNvdXJjZSk7CisgICAgUUZFVENIKFFTdHJpbmcsIHRh
cmdldFByb3RvY29sKTsKKyAgICBRRkVUQ0goUVN0cmluZywgdGFyZ2V0SG9zdCk7CisgICAgUUZF
VENIKGJvb2wsIGluY2x1ZGVTdWJEb21haW5zKTsKKyAgICBRRkVUQ0goUVN0cmluZywgdGVzdFVy
bCk7CisgICAgUUZFVENIKGJvb2wsIHN1Y2Nlc3NCZWZvcmVBZGQpOworICAgIFFGRVRDSChib29s
LCBzdWNjZXNzQWZ0ZXJBZGQxKTsKKyAgICBRRkVUQ0goYm9vbCwgc3VjY2Vzc0FmdGVyUmVtb3Zl
KTsKKyAgICBRRkVUQ0goYm9vbCwgc3VjY2Vzc0FmdGVyQWRkMik7CisgICAgUUZFVENIKGJvb2ws
IHN1Y2Nlc3NBZnRlckNsZWFyKTsKKworICAgIFFXZWJTZWN1cml0eU9yaWdpbjo6cmVzZXRPcmln
aW5BY2Nlc3NXaGl0ZWxpc3RzKCk7CisgICAgQ2FubmVkUmVzcG9uc2VOZXR3b3JrQWNjZXNzTWFu
YWdlciBtYW5hZ2VyOworICAgIFFCdWZmZXIgYnVmZmVyOworICAgIFFXZWJTZWN1cml0eU9yaWdp
bjo6U3ViZG9tYWluU2V0dGluZyBzdWJkb21haW5TZXR0aW5nID0gaW5jbHVkZVN1YkRvbWFpbnMg
PyBRV2ViU2VjdXJpdHlPcmlnaW46OkFsbG93U3ViZG9tYWlucyA6IFFXZWJTZWN1cml0eU9yaWdp
bjo6RGlzYWxsb3dTdWJkb21haW5zOworICAgIGJ1ZmZlci5zZXREYXRhKGNhbm5lZFJlc3BvbnNl
LCBzaXplb2YoY2FubmVkUmVzcG9uc2UpLTEpOworICAgIG1hbmFnZXIubV9idWZmZXIgPSAmYnVm
ZmVyOworICAgIFFGaWxlIHRlc3RQYWdlRmlsZSgiOi9yZXNvdXJjZXMvdGVzdC5odG1sIik7Cisg
ICAgUVZFUklGWSh0ZXN0UGFnZUZpbGUub3BlbihRSU9EZXZpY2U6OlJlYWRPbmx5KSk7CisgICAg
dWNoYXIqIHRlc3RQYWdlID0gdGVzdFBhZ2VGaWxlLm1hcCgwLCB0ZXN0UGFnZUZpbGUuc2l6ZSgp
KTsKKyAgICBRVkVSSUZZKHRlc3RQYWdlKTsKKyAgICBtX3ZpZXctPnNldEh0bWwoUVN0cmluZygo
Y29uc3QgY2hhciopdGVzdFBhZ2UpLCBRVXJsKHNvdXJjZSkpOworICAgIG1fdmlldy0+cGFnZSgp
LT5zZXROZXR3b3JrQWNjZXNzTWFuYWdlcigmbWFuYWdlcik7CisgICAgUVN0cmluZyB0ZXN0SlM9
InJ1blRlc3QoXCIiICsgdGVzdFVybCArICJcIikiOworICAgIFFDT01QQVJFKG1fdmlldy0+cGFn
ZSgpLT5tYWluRnJhbWUoKS0+ZXZhbHVhdGVKYXZhU2NyaXB0KHRlc3RKUyksIFFWYXJpYW50KHN1
Y2Nlc3NCZWZvcmVBZGQpKTsKKyAgICBRV2ViU2VjdXJpdHlPcmlnaW46OmFkZE9yaWdpbkFjY2Vz
c1doaXRlbGlzdEVudHJ5KHNvdXJjZSwgdGFyZ2V0UHJvdG9jb2wsIHRhcmdldEhvc3QsIHN1YmRv
bWFpblNldHRpbmcpOworICAgIFFDT01QQVJFKG1fdmlldy0+cGFnZSgpLT5tYWluRnJhbWUoKS0+
ZXZhbHVhdGVKYXZhU2NyaXB0KHRlc3RKUyksIFFWYXJpYW50KHN1Y2Nlc3NBZnRlckFkZDEpKTsK
KyAgICBRV2ViU2VjdXJpdHlPcmlnaW46OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5
KHNvdXJjZSwgdGFyZ2V0UHJvdG9jb2wsIHRhcmdldEhvc3QsIHN1YmRvbWFpblNldHRpbmcpOwor
ICAgIFFDT01QQVJFKG1fdmlldy0+cGFnZSgpLT5tYWluRnJhbWUoKS0+ZXZhbHVhdGVKYXZhU2Ny
aXB0KHRlc3RKUyksIFFWYXJpYW50KHN1Y2Nlc3NBZnRlclJlbW92ZSkpOworICAgIFFXZWJTZWN1
cml0eU9yaWdpbjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoc291cmNlLCB0YXJnZXRQ
cm90b2NvbCwgdGFyZ2V0SG9zdCwgc3ViZG9tYWluU2V0dGluZyk7CisgICAgUUNPTVBBUkUobV92
aWV3LT5wYWdlKCktPm1haW5GcmFtZSgpLT5ldmFsdWF0ZUphdmFTY3JpcHQodGVzdEpTKSwgUVZh
cmlhbnQoc3VjY2Vzc0FmdGVyQWRkMikpOworICAgIFFXZWJTZWN1cml0eU9yaWdpbjo6cmVzZXRP
cmlnaW5BY2Nlc3NXaGl0ZWxpc3RzKCk7CisgICAgUUNPTVBBUkUobV92aWV3LT5wYWdlKCktPm1h
aW5GcmFtZSgpLT5ldmFsdWF0ZUphdmFTY3JpcHQodGVzdEpTKSwgUVZhcmlhbnQoc3VjY2Vzc0Fm
dGVyQ2xlYXIpKTsKKyAgICBtX3ZpZXctPnBhZ2UoKS0+c2V0TmV0d29ya0FjY2Vzc01hbmFnZXIo
MCk7Cit9CisKK1FURVNUX01BSU4odHN0X1FXZWJTZWN1cml0eU9yaWdpbikKKyNpbmNsdWRlICJ0
c3RfcXdlYnNlY3VyaXR5b3JpZ2luLm1vYyIKKwpJbmRleDogU291cmNlL1dlYktpdC9xdC90ZXN0
cy9xd2Vic2VjdXJpdHlvcmlnaW4vdHN0X3F3ZWJzZWN1cml0eW9yaWdpbi5xcmMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9xdC90ZXN0cy9xd2Vic2VjdXJpdHlvcmlnaW4vdHN0X3F3ZWJz
ZWN1cml0eW9yaWdpbi5xcmMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3Rlc3Rz
L3F3ZWJzZWN1cml0eW9yaWdpbi90c3RfcXdlYnNlY3VyaXR5b3JpZ2luLnFyYwkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw2IEBACis8IURPQ1RZUEUgUkNDPjxSQ0MgdmVyc2lvbj0iMS4wIj4KKzxx
cmVzb3VyY2U+CisgICAgPGZpbGU+cmVzb3VyY2VzL3Rlc3QuaHRtbDwvZmlsZT4KKzwvcXJlc291
cmNlPgorPC9SQ0M+CisKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcXdlYnNlY3VyaXR5
b3JpZ2luL3Jlc291cmNlcy90ZXN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9x
dC90ZXN0cy9xd2Vic2VjdXJpdHlvcmlnaW4vcmVzb3VyY2VzL3Rlc3QuaHRtbAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcXdlYnNlY3VyaXR5b3JpZ2luL3Jlc291cmNl
cy90ZXN0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKzwhRE9DVFlQRSBIVE1M
IFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RS
L2h0bWw0L3N0cmljdC5kdGQiPgorPGh0bWw+CisgICA8aGVhZD4KKyAgICAgICA8bWV0YSBodHRw
LWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1
OS0xIj4KKyAgICAgICA8dGl0bGU+UVdlYlNlY3VyaXR5T3JpZ2luIHRlc3QgcGFnZTwvdGl0bGU+
CisgICAgICAgPHNjcmlwdCBMYW5ndWFnZT0iSmF2YVNjcmlwdCI+CisgICAgICAgICAgIGZ1bmN0
aW9uIHJ1blRlc3QodXJsKQorICAgICAgICAgICB7CisgICAgICAgICAgICAgICB2YXIgcmVzdWx0
ID0gIiI7CisgICAgICAgICAgICAgICAgZnVuY3Rpb24gdHJhY2UocG9pbnQpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJQIik7CisgICAgICAgICAgICAgICAgICAgICBlbC5pbm5lckhUTUwgPSBwb2ludCArICI6
IFJlc3VsdCBpczpcIiIgKyByZXN1bHQgKyAiXCIiCisgICAgICAgICAgICAgICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiQ29uc29sZSIpLmFwcGVuZENoaWxkKGVsKTsKKyAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAg
dmFyIHhtbGh0dHAgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgICAgICAgICAgICAg
IHhtbGh0dHAub3BlbignR0VUJyx1cmwsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgIHht
bGh0dHAub25yZWFkeXN0YXRlY2hhbmdlID0gZG9uZTsKKyAgICAgICAgICAgICAgICAgICAgIHht
bGh0dHAub25lcnJvciA9IGVycm9yOworICAgICAgICAgICAgICAgICAgICAgeG1saHR0cC5zZW5k
KG51bGwpOworICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0geG1saHR0cC5yZXNwb25zZVRl
eHQ7CisgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQgPT0gIiIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBl
OworICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlKCJDYXRjaDEiKTsKKyAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlKCJDYXRjaDIi
KTsKKyAgICAgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkb25l
KCkKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5s
ZW5ndGggPCA1KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gIiIgKyB4bWxo
dHRwLnJlYWR5U3RhdGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2UoIkRvbmUxIik7
CisgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICB0
cmFjZSgiRG9uZTIiKTsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICBmdW5j
dGlvbiBlcnJvcigpCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9ICJGQUlMRUQiOworICAgICAgICAgICAgICAgICAgICAgdHJhY2UoIkVycm9yIik7Cisg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgdHJhY2UoIkV4aXQiKTsKKyAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PSAiVGVzdCI7CisgICAgICAgICAgICAgfQorICAg
ICAgICAgPC9zY3JpcHQ+CisgICAgIDwvaGVhZD4KKyAgICAgPGJvZHk+CisgICAgICAgICA8aW5w
dXQgdHlwZT0iYnV0dG9uIiBvbmNsaWNrPSJqYXZhc2NyaXB0OmFsZXJ0KHJ1blRlc3QoJ2h0dHA6
Ly93d3cuZ29vZ2xlLmNvbScpKSIgdmFsdWU9IlJ1biBUZXN0Ii8+PGJyLz4KKyAgICAgICAgIDxk
aXYgaWQ9IkNvbnNvbGUiLz4KKyAgICAgPC9ib2R5PgorIDwvaHRtbD4KXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>207235</attachid>
            <date>2013-07-22 03:34:14 -0700</date>
            <delta_ts>2013-07-22 03:35:46 -0700</delta_ts>
            <desc>Modified the patch as per Allen&apos;s suggestion in IRC.</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>17096</size>
            <attacher name="Deepjyoti Saha">deesaha</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS90ZXN0cy5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL3Rlc3RzLnByaQko
cmV2aXNpb24gMTUxNzI5KQorKysgU291cmNlL3Rlc3RzLnByaQkod29ya2luZyBjb3B5KQpAQCAt
MjAsNiArMjAsNyBAQCBTVUJESVJTICs9IFwKICAgICAkJFdFQktJVF9URVNUU19ESVIvcXdlYnZp
ZXcgXAogICAgICQkV0VCS0lUX1RFU1RTX0RJUi9xd2ViaGlzdG9yeSBcCiAgICAgJCRXRUJLSVRf
VEVTVFNfRElSL3F3ZWJpbnNwZWN0b3IgXAorICAgICQkV0VCS0lUX1RFU1RTX0RJUi9xd2Vic2Vj
dXJpdHlvcmlnaW4gXAogICAgICQkV0VCS0lUX1RFU1RTX0RJUi9oeWJyaWRQaXhtYXAKIAogbGlu
dXgtKiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gMTUyMTU2KQorKysgU291cmNlL1dl
YktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMyBAQAorMjAxMy0w
Ni0yOCAgRGVlcGp5b3RpIFNhaGEgIDxkZWVzYWhhQGNpc2NvLmNvbT4KKworICAgICAgICBbUXRd
IEFkZCBpbnRlcmZhY2UgQVBJIGZvciBvcmlnaW4gd2hpdGVsaXN0aW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTc4MjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgaW50ZXJmYWNlIEFQSXMg
aW4gUVdlYlNlY3VyaXR5T3JpZ2luIGZvciBhZGRpbmcvcmVtb3ZpbmcvcmVzZXR0aW5nIHdoaXRl
TGlzdC4KKworICAgICAgICBSZS11c2VkIG1vc3Qgb2YgdGhlIHRlc3QgY2FzZXMgd3JpdHRlbiBi
eSBDYXJvbCBTemFibyAgPGNhcm9sLnN6YWJvQG5va2lhLmNvbT4gCisgICAgICAgIGZvciBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE4NzUgYW5kIGFkZGVkIHRoZSBz
YW1lLgorCisgICAgICAgICogQXBpL3F3ZWJzZWN1cml0eW9yaWdpbi5jcHA6CisgICAgICAgIChR
V2ViU2VjdXJpdHlPcmlnaW46OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KToKKyAgICAg
ICAgKFFXZWJTZWN1cml0eU9yaWdpbjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkp
OgorICAgICAgICAoUVdlYlNlY3VyaXR5T3JpZ2luOjpyZXNldE9yaWdpbkFjY2Vzc1doaXRlbGlz
dHMpOgorICAgICAgICAqIEFwaS9xd2Vic2VjdXJpdHlvcmlnaW4uaDoKKyAgICAgICAgKiB0ZXN0
cy9xd2Vic2VjdXJpdHlvcmlnaW46IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3F3ZWJzZWN1cml0
eW9yaWdpbi9xd2Vic2VjdXJpdHlvcmlnaW4ucHJvOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9x
d2Vic2VjdXJpdHlvcmlnaW4vcmVzb3VyY2VzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9xd2Vi
c2VjdXJpdHlvcmlnaW4vcmVzb3VyY2VzL3Rlc3QuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVz
dHMvcXdlYnNlY3VyaXR5b3JpZ2luL3RzdF9xd2Vic2VjdXJpdHlvcmlnaW4uY3BwOiBBZGRlZC4K
KyAgICAgICAgKHRzdF9RV2ViU2VjdXJpdHlPcmlnaW46OnRzdF9RV2ViU2VjdXJpdHlPcmlnaW4p
OgorICAgICAgICAodHN0X1FXZWJTZWN1cml0eU9yaWdpbjo6fnRzdF9RV2ViU2VjdXJpdHlPcmln
aW4pOgorICAgICAgICAodHN0X1FXZWJTZWN1cml0eU9yaWdpbjo6aW5pdCk6CisgICAgICAgICh0
c3RfUVdlYlNlY3VyaXR5T3JpZ2luOjpjbGVhbnVwKToKKyAgICAgICAgKHRzdF9RV2ViU2VjdXJp
dHlPcmlnaW46OndoaXRlTGlzdF9kYXRhKToKKyAgICAgICAgKHRzdF9RV2ViU2VjdXJpdHlPcmln
aW46OndoaXRlTGlzdCk6CisgICAgICAgICogdGVzdHMvcXdlYnNlY3VyaXR5b3JpZ2luL3RzdF9x
d2Vic2VjdXJpdHlvcmlnaW4ucXJjOiBBZGRlZC4KKwogMjAxMy0wNi0yNyAgS2FuZ2lsIEhhbiAg
PGthbmdpbC5oYW5Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgQWRvcHQgaXMvdG9IVE1MSW5wdXRF
bGVtZW50IGZvciBjb2RlIGNsZWFudXAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJz
ZWN1cml0eW9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9BcGkvcXdl
YnNlY3VyaXR5b3JpZ2luLmNwcAkocmV2aXNpb24gMTUxNzI5KQorKysgU291cmNlL1dlYktpdC9x
dC9BcGkvcXdlYnNlY3VyaXR5b3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUs
NyBAQAogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgogI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlQb2xpY3kuaCIKICNp
bmNsdWRlICJxd2ViZGF0YWJhc2UuaCIKICNpbmNsdWRlICJxd2ViZGF0YWJhc2VfcC5oIgogI2lu
Y2x1ZGUgInF3ZWJzZWN1cml0eW9yaWdpbl9wLmgiCkBAIC0yNjUsMyArMjY2LDMyIEBAIFFTdHJp
bmdMaXN0IFFXZWJTZWN1cml0eU9yaWdpbjo6bG9jYWxTY2gKICAgICB9CiAgICAgcmV0dXJuIGxp
c3Q7CiB9CisKKy8qIQorICAgIEFsbG93cyBhcHBsaWNhdGlvbi9wbGF0Zm9ybSB0byB3aGlsZWxp
c3QgYW4gb3JpZ2luIHRvIGhhdmUgYWNjZXNzIHRvIHNwZWNpZmljIGRlc2l0bmF0aW9ucyBiZXlv
bmQgc2FtZS1vcmlnaW4tcG9saWN5LgorKi8KK3ZvaWQgUVdlYlNlY3VyaXR5T3JpZ2luOjphZGRP
cmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBRVXJsJiBzb3VyY2VPcmlnaW4sIGNvbnN0
IFFTdHJpbmcmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9u
SG9zdCwgU3ViZG9tYWluU2V0dGluZyBzdWJkb21haW5TZXR0aW5nKQoreworICAgIFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gb3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShLVVJMKHNvdXJj
ZU9yaWdpbikpOworICAgIFNlY3VyaXR5UG9saWN5OjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RF
bnRyeSgqb3JpZ2luLCBkZXN0aW5hdGlvblByb3RvY29sLCBkZXN0aW5hdGlvbkhvc3QsIHN1YmRv
bWFpblNldHRpbmcgPT0gQWxsb3dTdWJkb21haW5zKTsKK30KKworLyohCisgICAgQWxsb3dzIGFw
cGxpY2F0aW9uL3BsYXRmb3JtIHRvIHJlbW92ZSBhbiBvcmlnaW4gZnJvbSB3aGl0ZWxpc3QgdG8g
aGF2ZSBhY2Nlc3MgdG8gc3BlY2lmaWMgZGVzaXRuYXRpb25zIGJleW9uZCBzYW1lLW9yaWdpbi1w
b2xpY3kuCisqLwordm9pZCBRV2ViU2VjdXJpdHlPcmlnaW46OnJlbW92ZU9yaWdpbkFjY2Vzc1do
aXRlbGlzdEVudHJ5KGNvbnN0IFFVcmwmIHNvdXJjZU9yaWdpbiwgY29uc3QgUVN0cmluZyYgZGVz
dGluYXRpb25Qcm90b2NvbCwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRpb25Ib3N0LCBTdWJkb21h
aW5TZXR0aW5nIHN1YmRvbWFpblNldHRpbmcpCit7CisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiBvcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKEtVUkwoc291cmNlT3JpZ2luKSk7Cisg
ICAgU2VjdXJpdHlQb2xpY3k6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KCpvcmln
aW4sIGRlc3RpbmF0aW9uUHJvdG9jb2wsIGRlc3RpbmF0aW9uSG9zdCwgKHN1YmRvbWFpblNldHRp
bmcgPT0gQWxsb3dTdWJkb21haW5zKSA/IHRydWUgOiBmYWxzZSk7Cit9CisKKy8qIQorICAgIEFs
bG93cyBhcHBsaWNhdGlvbi9wbGF0Zm9ybSB0byBjbGVhciB0aGUgd2hpdGVsaXN0IHRvIGhhdmUg
YWNjZXNzIHRvIHNwZWNpZmljIGRlc2l0bmF0aW9ucyBiZXlvbmQgc2FtZS1vcmlnaW4tcG9saWN5
LgorKi8KK3ZvaWQgUVdlYlNlY3VyaXR5T3JpZ2luOjpyZXNldE9yaWdpbkFjY2Vzc1doaXRlbGlz
dHMoKQoreworICAgIFNlY3VyaXR5UG9saWN5OjpyZXNldE9yaWdpbkFjY2Vzc1doaXRlbGlzdHMo
KTsKK30KKworCisKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZWN1cml0eW9yaWdp
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZWN1cml0eW9yaWdp
bi5oCShyZXZpc2lvbiAxNTE3MjkpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2VjdXJp
dHlvcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgY2xhc3MgU2VjdXJpdHlPcmlnaW47CisgICAgY2xhc3MgU2VjdXJpdHlQ
b2xpY3k7CiAgICAgY2xhc3MgQ2hyb21lQ2xpZW50UXQ7CiB9CiAKQEAgLTM2LDExICszNywyMCBA
QCBjbGFzcyBRV2ViRnJhbWU7CiAKIGNsYXNzIFFXRUJLSVRfRVhQT1JUIFFXZWJTZWN1cml0eU9y
aWdpbiB7CiBwdWJsaWM6CisgICAgZW51bSBTdWJkb21haW5TZXR0aW5nIHsKKyAgICAgICAgQWxs
b3dTdWJkb21haW5zLAorICAgICAgICBEaXNhbGxvd1N1YmRvbWFpbnMKKyAgICB9OworICAgIAog
ICAgIHN0YXRpYyBRTGlzdDxRV2ViU2VjdXJpdHlPcmlnaW4+IGFsbE9yaWdpbnMoKTsKICAgICBz
dGF0aWMgdm9pZCBhZGRMb2NhbFNjaGVtZShjb25zdCBRU3RyaW5nJiBzY2hlbWUpOwogICAgIHN0
YXRpYyB2b2lkIHJlbW92ZUxvY2FsU2NoZW1lKGNvbnN0IFFTdHJpbmcmIHNjaGVtZSk7CiAgICAg
c3RhdGljIFFTdHJpbmdMaXN0IGxvY2FsU2NoZW1lcygpOwogCisgICAgc3RhdGljIHZvaWQgYWRk
T3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgUVVybCYsIGNvbnN0IFFTdHJpbmcmLCBj
b25zdCBRU3RyaW5nJiwgU3ViZG9tYWluU2V0dGluZyk7CisgICAgc3RhdGljIHZvaWQgcmVtb3Zl
T3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgUVVybCYsIGNvbnN0IFFTdHJpbmcmLCBj
b25zdCBRU3RyaW5nJiwgU3ViZG9tYWluU2V0dGluZyk7CisgICAgc3RhdGljIHZvaWQgcmVzZXRP
cmlnaW5BY2Nlc3NXaGl0ZWxpc3RzKCk7CisKICAgICB+UVdlYlNlY3VyaXR5T3JpZ2luKCk7CiAK
ICAgICBRU3RyaW5nIHNjaGVtZSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYktpdC9xdC90ZXN0
cy9xd2Vic2VjdXJpdHlvcmlnaW4vcXdlYnNlY3VyaXR5b3JpZ2luLnBybwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3F3ZWJzZWN1cml0eW9yaWdpbi9xd2Vic2VjdXJpdHlv
cmlnaW4ucHJvCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC90ZXN0cy9xd2Vic2Vj
dXJpdHlvcmlnaW4vcXdlYnNlY3VyaXR5b3JpZ2luLnBybwkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyIEBACitpbmNsdWRlKC4uL3Rlc3RzLnByaSkKK2V4aXN0cygkJHtUQVJHRVR9LnFyYyk6UkVT
T1VSQ0VTICs9ICQke1RBUkdFVH0ucXJjCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3F3
ZWJzZWN1cml0eW9yaWdpbi90c3RfcXdlYnNlY3VyaXR5b3JpZ2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3F3ZWJzZWN1cml0eW9yaWdpbi90c3RfcXdlYnNlY3Vy
aXR5b3JpZ2luLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcXdl
YnNlY3VyaXR5b3JpZ2luL3RzdF9xd2Vic2VjdXJpdHlvcmlnaW4uY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDIwMiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgICAgQ29weXJpZ2h0IChDKSAyMDEz
IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSA8
UURlYnVnPgorI2luY2x1ZGUgPFFOZXR3b3JrUmVwbHk+CisjaW5jbHVkZSA8UXRUZXN0PgorI2lu
Y2x1ZGUgPHF3ZWJmcmFtZS5oPgorI2luY2x1ZGUgPHF3ZWJwYWdlLmg+CisjaW5jbHVkZSA8cXdl
YnNlY3VyaXR5b3JpZ2luLmg+CisjaW5jbHVkZSA8cXdlYnZpZXcuaD4KKworY2xhc3MgdHN0X1FX
ZWJTZWN1cml0eU9yaWdpbiA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGlj
OgorICAgIHRzdF9RV2ViU2VjdXJpdHlPcmlnaW4oKTsKKyAgICB2aXJ0dWFsIH50c3RfUVdlYlNl
Y3VyaXR5T3JpZ2luKCk7CisKK3ByaXZhdGUgc2xvdHM6CisgICAgdm9pZCBpbml0KCk7CisgICAg
dm9pZCBjbGVhbnVwKCk7CisgICAgdm9pZCB3aGl0ZUxpc3RfZGF0YSgpOworICAgIHZvaWQgd2hp
dGVMaXN0KCk7Citwcml2YXRlOgorICAgIFFXZWJWaWV3KiBtX3ZpZXc7CisgICAgUVdlYlBhZ2Uq
IG1fcGFnZTsKK307CisKK3RzdF9RV2ViU2VjdXJpdHlPcmlnaW46OnRzdF9RV2ViU2VjdXJpdHlP
cmlnaW4oKQoreworfQorCit0c3RfUVdlYlNlY3VyaXR5T3JpZ2luOjp+dHN0X1FXZWJTZWN1cml0
eU9yaWdpbigpCit7Cit9CisKK3ZvaWQgdHN0X1FXZWJTZWN1cml0eU9yaWdpbjo6aW5pdCgpCit7
CisgICAgbV92aWV3ID0gbmV3IFFXZWJWaWV3KCk7CisgICAgbV9wYWdlID0gbV92aWV3LT5wYWdl
KCk7Cit9CisKK3ZvaWQgdHN0X1FXZWJTZWN1cml0eU9yaWdpbjo6Y2xlYW51cCgpCit7CisgICAg
ZGVsZXRlIG1fdmlldzsKK30KKwordm9pZCB0c3RfUVdlYlNlY3VyaXR5T3JpZ2luOjp3aGl0ZUxp
c3RfZGF0YSgpCit7CisgICAgUVRlc3Q6OmFkZENvbHVtbjxRU3RyaW5nPigic291cmNlIik7Cisg
ICAgUVRlc3Q6OmFkZENvbHVtbjxRU3RyaW5nPigidGFyZ2V0UHJvdG9jb2wiKTsKKyAgICBRVGVz
dDo6YWRkQ29sdW1uPFFTdHJpbmc+KCJ0YXJnZXRIb3N0Iik7CisgICAgUVRlc3Q6OmFkZENvbHVt
bjxib29sPigiaW5jbHVkZVN1YkRvbWFpbnMiKTsKKyAgICBRVGVzdDo6YWRkQ29sdW1uPFFTdHJp
bmc+KCJ0ZXN0VXJsIik7CisgICAgUVRlc3Q6OmFkZENvbHVtbjxib29sPigic3VjY2Vzc0JlZm9y
ZUFkZCIpOworICAgIFFUZXN0OjphZGRDb2x1bW48Ym9vbD4oInN1Y2Nlc3NBZnRlckFkZDEiKTsK
KyAgICBRVGVzdDo6YWRkQ29sdW1uPGJvb2w+KCJzdWNjZXNzQWZ0ZXJSZW1vdmUiKTsKKyAgICBR
VGVzdDo6YWRkQ29sdW1uPGJvb2w+KCJzdWNjZXNzQWZ0ZXJBZGQyIik7CisgICAgUVRlc3Q6OmFk
ZENvbHVtbjxib29sPigic3VjY2Vzc0FmdGVyQ2xlYXIiKTsKKworICAgIFFUZXN0OjpuZXdSb3co
InNjaGVtZSIpIDw8ICJodHRwOi8vd3d3LnNvdXJjZS5jb20iIDw8ICJodHRwcyIgPDwgInd3dy50
YXJnZXQuY29tIiA8PCBmYWxzZSA8PCAiaHR0cHM6Ly93d3cudGFyZ2V0LmNvbS9vdGhlciIgPDwg
ZmFsc2UgPDwgdHJ1ZSA8PCBmYWxzZSA8PCB0cnVlIDw8IGZhbHNlOworICAgIFFUZXN0OjpuZXdS
b3coInNjaGVtZUZhaWwiKSA8PCAiaHR0cDovL3d3dy5zb3VyY2UuY29tIiA8PCAiaHR0cHMiIDw8
ICJ3d3cudGFyZ2V0LmNvbSIgPDwgZmFsc2UgPDwgImh0dHA6Ly93d3cudGFyZ2V0LmNvbS9vdGhl
ciIgPDwgZmFsc2UgPDwgZmFsc2UgPDwgZmFsc2UgPDwgZmFsc2UgPDwgZmFsc2U7CisgICAgUVRl
c3Q6Om5ld1Jvdygic2NoZW1lU3ViRG9tIikgPDwgImh0dHA6Ly93d3cuc291cmNlLmNvbSIgPDwg
Imh0dHBzIiA8PCAidGFyZ2V0LmNvbSIgPDwgdHJ1ZSA8PCAiaHR0cHM6Ly93d3cudGFyZ2V0LmNv
bS9vdGhlciIgPDwgZmFsc2UgPDwgdHJ1ZSA8PCBmYWxzZSA8PCB0cnVlIDw8IGZhbHNlOworICAg
IFFUZXN0OjpuZXdSb3coInNjaGVtZVN1YkRvbUZhaWwiKSA8PCAiaHR0cDovL3d3dy5zb3VyY2Uu
Y29tIiA8PCAiaHR0cHMiIDw8ICJ0YXJnZXQuY29tIiA8PCB0cnVlIDw8ICJodHRwczovL3d3d3Rh
cmdldC5jb20vb3RoZXIiIDw8IGZhbHNlIDw8IGZhbHNlIDw8IGZhbHNlIDw8IGZhbHNlIDw8IGZh
bHNlOworICAgIFFUZXN0OjpuZXdSb3coInNjaGVtZVN1YkRvbUZhaWwiKSA8PCAiaHR0cDovL3d3
dy5zb3VyY2UuY29tIiA8PCAiaHR0cHMiIDw8ICJ0YXJnZXQuY29tIiA8PCB0cnVlIDw8ICJodHRw
Oi8vd3d3LnRhcmdldC5jb20vb3RoZXIiIDw8IGZhbHNlIDw8IGZhbHNlIDw8IGZhbHNlIDw8IGZh
bHNlIDw8IGZhbHNlOworICAgIFFUZXN0OjpuZXdSb3coImhvc3QiKSA8PCAiaHR0cDovL3d3dy5z
b3VyY2UuY29tIiA8PCAiaHR0cCIgPDwgInd3dy50YXJnZXQuY29tIiA8PCBmYWxzZSA8PCAiaHR0
cDovL3d3dy50YXJnZXQuY29tL3RhcmdldCIgPDwgZmFsc2UgPDwgdHJ1ZSA8PCBmYWxzZSA8PCB0
cnVlIDw8IGZhbHNlOworICAgIFFUZXN0OjpuZXdSb3coImhvc3RGYWlsIikgPDwgImh0dHA6Ly93
d3cuc291cmNlLmNvbSIgPDwgImh0dHAiIDw8ICJ3d3cudGFyZ2V0LmNvbSIgPDwgZmFsc2UgPDwg
Imh0dHA6Ly93d3cubmV3dGFyZ2V0LmNvbSIgPDwgZmFsc2UgPDwgZmFsc2UgPDwgZmFsc2UgPDwg
ZmFsc2UgPDwgZmFsc2U7CisgICAgUVRlc3Q6Om5ld1JvdygiaG9zdFN1YkRvbSIpIDw8ICJodHRw
Oi8vd3d3LnNvdXJjZS5jb20iIDw8ICJodHRwIiA8PCAidGFyZ2V0LmNvbSIgPDwgdHJ1ZSA8PCAi
aHR0cDovL2FiYzIudGFyZ2V0LmNvbSIgPDwgZmFsc2UgPDwgdHJ1ZSA8PCBmYWxzZSA8PCB0cnVl
IDw8ZmFsc2U7CisgICAgUVRlc3Q6Om5ld1JvdygiaG9zdFN1YkRvbUZhaWwiKSA8PCAiaHR0cDov
L3d3dy5zb3VyY2UuY29tIiA8PCAiaHR0cCIgPDwidGFyZ2V0LmNvbSIgPDwgdHJ1ZSA8PCAiaHR0
cDovL2FiYzJ0YXJnZXQuY29tIiA8PCBmYWxzZSA8PCBmYWxzZSA8PCBmYWxzZSA8PCBmYWxzZSA8
PCBmYWxzZTsKKyAgICBRVGVzdDo6bmV3Um93KCJob3N0U3ViRG9tRmFpbENvdW50cnkiKSA8PCAi
aHR0cDovL3d3dy5zb3VyY2UuY29tIiA8PCAiaHR0cCIgPDwgInRhcmdldC5jb20iIDw8IHRydWUg
PDwgImh0dHA6Ly93d3cudGFyZ2V0LmNvbS50dyIgPDwgZmFsc2UgPDwgZmFsc2UgPDwgZmFsc2Ug
PDwgZmFsc2UgPDwgZmFsc2U7Cit9CisKK2NsYXNzIENhbm5lZFJlc3BvbnNlTmV0d29ya1JlcGx5
OiBwdWJsaWMgUU5ldHdvcmtSZXBseSB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBDYW5u
ZWRSZXNwb25zZU5ldHdvcmtSZXBseShRT2JqZWN0KiBwYXJlbnQsIFFOZXR3b3JrQWNjZXNzTWFu
YWdlcjo6T3BlcmF0aW9uIG9wLCBjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJlcSwgY29uc3QgUUJ1
ZmZlciYgYm9keSk6IFFOZXR3b3JrUmVwbHkocGFyZW50KQorICAgIHsKKyAgICAgICAgc2V0UmVx
dWVzdChyZXEpOworICAgICAgICBzZXRVcmwocmVxLnVybCgpKTsKKyAgICAgICAgc2V0T3BlcmF0
aW9uKG9wKTsKKyAgICAgICAgbV9idWZmZXIuc2V0RGF0YShib2R5LmRhdGEoKSk7CisgICAgICAg
IGNvbm5lY3QoJm1fYnVmZmVyLCBTSUdOQUwocmVhZHlSZWFkKCkpLCBTTE9UKGVtaXRSZWFkeVJl
YWQoKSkpOworICAgICAgICBjb25uZWN0KCZtX2J1ZmZlciwgU0lHTkFMKHJlYWRDaGFubmVsRmlu
aXNoZWQoKSksIFNMT1QoZW1pdFJlYWRDaGFubmVsRmluaXNoZWQoKSkpOworICAgICAgICBjb25u
ZWN0KCZtX2J1ZmZlciwgU0lHTkFMKHJlYWRDaGFubmVsRmluaXNoZWQoKSksIFNMT1QoZW1pdFJl
YWRDaGFubmVsRmluaXNoZWQoKSkpOworICAgICAgICBtX2J1ZmZlci5vcGVuKFFJT0RldmljZTo6
UmVhZE9ubHkpOworICAgICAgICBvcGVuKFFJT0RldmljZTo6UmVhZE9ubHkpOworICAgICAgICBR
VGltZXI6OnNpbmdsZVNob3QoMTAsIHRoaXMsIFNMT1QodXBkYXRlKCkpKTsKKyAgICB9Citwcm90
ZWN0ZWQ6CisgICAgcWludDY0IHJlYWREYXRhKGNoYXIgKiBkYXRhLCBxaW50NjQgbWF4U2l6ZSkK
KyAgICB7CisgICAgICAgIHFpbnQ2NCByZXN1bHQgPSBtX2J1ZmZlci5yZWFkKGRhdGEsIG1heFNp
emUpOworICAgICAgICBpZiAoIW1fYnVmZmVyLmJ5dGVzQXZhaWxhYmxlKCkpCisgICAgICAgICAg
ICBRVGltZXI6OnNpbmdsZVNob3QoMTAsIHRoaXMsIFNMT1QoZW1pdFJlYWRDaGFubmVsRmluaXNo
ZWQoKSkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHZpcnR1YWwgcWlu
dDY0IGJ5dGVzQXZhaWxhYmxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2J1ZmZl
ci5ieXRlc0F2YWlsYWJsZSgpOworICAgIH0KKworcHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIGVt
aXRSZWFkeVJlYWQoKQorICAgIHsKKyAgICAgICAgZW1pdCByZWFkeVJlYWQoKTsKKyAgICB9CisK
KyAgICB2b2lkIGVtaXRSZWFkQ2hhbm5lbEZpbmlzaGVkKCkKKyAgICB7CisgICAgICAgIGVtaXQg
cmVhZENoYW5uZWxGaW5pc2hlZCgpOworICAgICAgICBlbWl0IGZpbmlzaGVkKCk7CisgICAgfQor
CisgICAgdm9pZCBhYm9ydCgpCisgICAgeworICAgIH07CisKKyAgICB2b2lkIHVwZGF0ZSgpCisg
ICAgeworICAgICAgICBzZXRIZWFkZXIoUU5ldHdvcmtSZXF1ZXN0OjpDb250ZW50VHlwZUhlYWRl
ciwgInRleHQvcGxhaW4iKTsKKyAgICAgICAgc2V0SGVhZGVyKFFOZXR3b3JrUmVxdWVzdDo6Q29u
dGVudExlbmd0aEhlYWRlciwgbV9idWZmZXIuc2l6ZSgpKTsKKyAgICAgICAgc2V0RXJyb3IoUU5l
dHdvcmtSZXBseTo6Tm9FcnJvciwgIiIpOworICAgICAgICBzZXRBdHRyaWJ1dGUoUU5ldHdvcmtS
ZXF1ZXN0OjpIdHRwU3RhdHVzQ29kZUF0dHJpYnV0ZSwgMjAwKTsKKyAgICAgICAgc2V0QXR0cmli
dXRlKFFOZXR3b3JrUmVxdWVzdDo6SHR0cFJlYXNvblBocmFzZUF0dHJpYnV0ZSwgUVN0cmluZygi
T2siKS50b0xhdGluMSgpKTsKKyAgICAgICAgZW1pdCBtZXRhRGF0YUNoYW5nZWQoKTsKKyAgICAg
ICAgZW1pdCByZWFkeVJlYWQoKTsKKyAgICB9CitwdWJsaWM6CisgICAgUUJ1ZmZlciBtX2J1ZmZl
cjsKK307CisKK2NsYXNzIENhbm5lZFJlc3BvbnNlTmV0d29ya0FjY2Vzc01hbmFnZXI6IHB1Ymxp
YyBRTmV0d29ya0FjY2Vzc01hbmFnZXIgeworICAgIFFfT0JKRUNUCitwcm90ZWN0ZWQ6CisgICAg
dmlydHVhbCBRTmV0d29ya1JlcGx5KiBjcmVhdGVSZXF1ZXN0KE9wZXJhdGlvbiBvcCwgY29uc3Qg
UU5ldHdvcmtSZXF1ZXN0JiByZXEsIFFJT0RldmljZSogb3V0Z29pbmdEYXRhID0gMCkKKyAgICB7
CisgICAgICAgIHJldHVybiBuZXcgQ2FubmVkUmVzcG9uc2VOZXR3b3JrUmVwbHkodGhpcywgb3As
IHJlcSwgKm1fYnVmZmVyKTsKKyAgICB9OworcHVibGljOgorICAgIFFCdWZmZXIqIG1fYnVmZmVy
OworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgY2FubmVkUmVzcG9uc2VbXSA9ICJUZXN0IjsKKwor
dm9pZCB0c3RfUVdlYlNlY3VyaXR5T3JpZ2luOjp3aGl0ZUxpc3QoKQoreworICAgIFFGRVRDSChR
U3RyaW5nLCBzb3VyY2UpOworICAgIFFGRVRDSChRU3RyaW5nLCB0YXJnZXRQcm90b2NvbCk7Cisg
ICAgUUZFVENIKFFTdHJpbmcsIHRhcmdldEhvc3QpOworICAgIFFGRVRDSChib29sLCBpbmNsdWRl
U3ViRG9tYWlucyk7CisgICAgUUZFVENIKFFTdHJpbmcsIHRlc3RVcmwpOworICAgIFFGRVRDSChi
b29sLCBzdWNjZXNzQmVmb3JlQWRkKTsKKyAgICBRRkVUQ0goYm9vbCwgc3VjY2Vzc0FmdGVyQWRk
MSk7CisgICAgUUZFVENIKGJvb2wsIHN1Y2Nlc3NBZnRlclJlbW92ZSk7CisgICAgUUZFVENIKGJv
b2wsIHN1Y2Nlc3NBZnRlckFkZDIpOworICAgIFFGRVRDSChib29sLCBzdWNjZXNzQWZ0ZXJDbGVh
cik7CisKKyAgICBRV2ViU2VjdXJpdHlPcmlnaW46OnJlc2V0T3JpZ2luQWNjZXNzV2hpdGVsaXN0
cygpOworICAgIENhbm5lZFJlc3BvbnNlTmV0d29ya0FjY2Vzc01hbmFnZXIgbWFuYWdlcjsKKyAg
ICBRQnVmZmVyIGJ1ZmZlcjsKKyAgICBRV2ViU2VjdXJpdHlPcmlnaW46OlN1YmRvbWFpblNldHRp
bmcgc3ViZG9tYWluU2V0dGluZyA9IGluY2x1ZGVTdWJEb21haW5zID8gUVdlYlNlY3VyaXR5T3Jp
Z2luOjpBbGxvd1N1YmRvbWFpbnMgOiBRV2ViU2VjdXJpdHlPcmlnaW46OkRpc2FsbG93U3ViZG9t
YWluczsKKyAgICBidWZmZXIuc2V0RGF0YShjYW5uZWRSZXNwb25zZSwgc2l6ZW9mKGNhbm5lZFJl
c3BvbnNlKS0xKTsKKyAgICBtYW5hZ2VyLm1fYnVmZmVyID0gJmJ1ZmZlcjsKKyAgICBRRmlsZSB0
ZXN0UGFnZUZpbGUoIjovcmVzb3VyY2VzL3Rlc3QuaHRtbCIpOworICAgIFFWRVJJRlkodGVzdFBh
Z2VGaWxlLm9wZW4oUUlPRGV2aWNlOjpSZWFkT25seSkpOworICAgIHVjaGFyKiB0ZXN0UGFnZSA9
IHRlc3RQYWdlRmlsZS5tYXAoMCwgdGVzdFBhZ2VGaWxlLnNpemUoKSk7CisgICAgUVZFUklGWSh0
ZXN0UGFnZSk7CisgICAgbV92aWV3LT5zZXRIdG1sKFFTdHJpbmcoKGNvbnN0IGNoYXIqKXRlc3RQ
YWdlKSwgUVVybChzb3VyY2UpKTsKKyAgICBtX3ZpZXctPnBhZ2UoKS0+c2V0TmV0d29ya0FjY2Vz
c01hbmFnZXIoJm1hbmFnZXIpOworICAgIFFTdHJpbmcgdGVzdEpTPSJydW5UZXN0KFwiIiArIHRl
c3RVcmwgKyAiXCIpIjsKKyAgICBRQ09NUEFSRShtX3ZpZXctPnBhZ2UoKS0+bWFpbkZyYW1lKCkt
PmV2YWx1YXRlSmF2YVNjcmlwdCh0ZXN0SlMpLCBRVmFyaWFudChzdWNjZXNzQmVmb3JlQWRkKSk7
CisgICAgUVdlYlNlY3VyaXR5T3JpZ2luOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShz
b3VyY2UsIHRhcmdldFByb3RvY29sLCB0YXJnZXRIb3N0LCBzdWJkb21haW5TZXR0aW5nKTsKKyAg
ICBRQ09NUEFSRShtX3ZpZXctPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmV2YWx1YXRlSmF2YVNjcmlw
dCh0ZXN0SlMpLCBRVmFyaWFudChzdWNjZXNzQWZ0ZXJBZGQxKSk7CisgICAgUVdlYlNlY3VyaXR5
T3JpZ2luOjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShzb3VyY2UsIHRhcmdldFBy
b3RvY29sLCB0YXJnZXRIb3N0LCBzdWJkb21haW5TZXR0aW5nKTsKKyAgICBRQ09NUEFSRShtX3Zp
ZXctPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmV2YWx1YXRlSmF2YVNjcmlwdCh0ZXN0SlMpLCBRVmFy
aWFudChzdWNjZXNzQWZ0ZXJSZW1vdmUpKTsKKyAgICBRV2ViU2VjdXJpdHlPcmlnaW46OmFkZE9y
aWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KHNvdXJjZSwgdGFyZ2V0UHJvdG9jb2wsIHRhcmdldEhv
c3QsIHN1YmRvbWFpblNldHRpbmcpOworICAgIFFDT01QQVJFKG1fdmlldy0+cGFnZSgpLT5tYWlu
RnJhbWUoKS0+ZXZhbHVhdGVKYXZhU2NyaXB0KHRlc3RKUyksIFFWYXJpYW50KHN1Y2Nlc3NBZnRl
ckFkZDIpKTsKKyAgICBRV2ViU2VjdXJpdHlPcmlnaW46OnJlc2V0T3JpZ2luQWNjZXNzV2hpdGVs
aXN0cygpOworICAgIFFDT01QQVJFKG1fdmlldy0+cGFnZSgpLT5tYWluRnJhbWUoKS0+ZXZhbHVh
dGVKYXZhU2NyaXB0KHRlc3RKUyksIFFWYXJpYW50KHN1Y2Nlc3NBZnRlckNsZWFyKSk7CisgICAg
bV92aWV3LT5wYWdlKCktPnNldE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKDApOworfQorCitRVEVTVF9N
QUlOKHRzdF9RV2ViU2VjdXJpdHlPcmlnaW4pCisjaW5jbHVkZSAidHN0X3F3ZWJzZWN1cml0eW9y
aWdpbi5tb2MiCisKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcXdlYnNlY3VyaXR5b3Jp
Z2luL3RzdF9xd2Vic2VjdXJpdHlvcmlnaW4ucXJjCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvcXQvdGVzdHMvcXdlYnNlY3VyaXR5b3JpZ2luL3RzdF9xd2Vic2VjdXJpdHlvcmlnaW4ucXJj
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC90ZXN0cy9xd2Vic2VjdXJpdHlvcmln
aW4vdHN0X3F3ZWJzZWN1cml0eW9yaWdpbi5xcmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNiBA
QAorPCFET0NUWVBFIFJDQz48UkNDIHZlcnNpb249IjEuMCI+Cis8cXJlc291cmNlPgorICAgIDxm
aWxlPnJlc291cmNlcy90ZXN0Lmh0bWw8L2ZpbGU+Cis8L3FyZXNvdXJjZT4KKzwvUkNDPgorCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3F3ZWJzZWN1cml0eW9yaWdpbi9yZXNvdXJjZXMv
dGVzdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcXdlYnNlY3Vy
aXR5b3JpZ2luL3Jlc291cmNlcy90ZXN0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
S2l0L3F0L3Rlc3RzL3F3ZWJzZWN1cml0eW9yaWdpbi9yZXNvdXJjZXMvdGVzdC5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDUzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8v
RFREIEhUTUwgNC4wMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9zdHJpY3QuZHRk
Ij4KKzxodG1sPgorICAgPGhlYWQ+CisgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1U
eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+CisgICAgICAgPHRp
dGxlPlFXZWJTZWN1cml0eU9yaWdpbiB0ZXN0IHBhZ2U8L3RpdGxlPgorICAgICAgIDxzY3JpcHQg
TGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgorICAgICAgICAgICBmdW5jdGlvbiBydW5UZXN0KHVybCkK
KyAgICAgICAgICAgeworICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9ICIiOworICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uIHRyYWNlKHBvaW50KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOworICAgICAg
ICAgICAgICAgICAgICAgZWwuaW5uZXJIVE1MID0gcG9pbnQgKyAiOiBSZXN1bHQgaXM6XCIiICsg
cmVzdWx0ICsgIlwiIgorICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoIkNvbnNvbGUiKS5hcHBlbmRDaGlsZChlbCk7CisgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgIHZhciB4bWxodHRwID0gbmV3
IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgICAgICAgICAgICAgICAgICB4bWxodHRwLm9wZW4oJ0dF
VCcsdXJsLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICB4bWxodHRwLm9ucmVhZHlzdGF0
ZWNoYW5nZSA9IGRvbmU7CisgICAgICAgICAgICAgICAgICAgICB4bWxodHRwLm9uZXJyb3IgPSBl
cnJvcjsKKyAgICAgICAgICAgICAgICAgICAgIHhtbGh0dHAuc2VuZChudWxsKTsKKyAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHhtbGh0dHAucmVzcG9uc2VUZXh0OworICAgICAgICAgICAg
ICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09ICIi
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICB0cmFjZSgiQ2F0Y2gxIik7CisgICAgICAgICAgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZSgiQ2F0Y2gyIik7CisgICAgICAgICAgICAg
ICAgIH0KKyAKKyAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSgpCisgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoIDwgNSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICIiICsgeG1saHR0cC5yZWFkeVN0YXRlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlKCJEb25lMSIpOworICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2UoIkRvbmUyIik7Cisg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZXJyb3IoKQorICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAiRkFJTEVEIjsK
KyAgICAgICAgICAgICAgICAgICAgIHRyYWNlKCJFcnJvciIpOworICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgIHRyYWNlKCJFeGl0Iik7CisgICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQgPT0gIlRlc3QiOworICAgICAgICAgICAgIH0KKyAgICAgICAgIDwvc2NyaXB0Pgor
ICAgICA8L2hlYWQ+CisgICAgIDxib2R5PgorICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIg
b25jbGljaz0iamF2YXNjcmlwdDphbGVydChydW5UZXN0KCdodHRwOi8vd3d3Lmdvb2dsZS5jb20n
KSkiIHZhbHVlPSJSdW4gVGVzdCIvPjxici8+CisgICAgICAgICA8ZGl2IGlkPSJDb25zb2xlIi8+
CisgICAgIDwvYm9keT4KKyA8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207236</attachid>
            <date>2013-07-22 03:37:14 -0700</date>
            <delta_ts>2013-07-23 03:45:21 -0700</delta_ts>
            <desc>Modified the patch as per Allen&apos;s suggestion in IRC.</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>17079</size>
            <attacher name="Deepjyoti Saha">deesaha</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS90ZXN0cy5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL3Rlc3RzLnByaQko
cmV2aXNpb24gMTUxNzI5KQorKysgU291cmNlL3Rlc3RzLnByaQkod29ya2luZyBjb3B5KQpAQCAt
MjAsNiArMjAsNyBAQCBTVUJESVJTICs9IFwKICAgICAkJFdFQktJVF9URVNUU19ESVIvcXdlYnZp
ZXcgXAogICAgICQkV0VCS0lUX1RFU1RTX0RJUi9xd2ViaGlzdG9yeSBcCiAgICAgJCRXRUJLSVRf
VEVTVFNfRElSL3F3ZWJpbnNwZWN0b3IgXAorICAgICQkV0VCS0lUX1RFU1RTX0RJUi9xd2Vic2Vj
dXJpdHlvcmlnaW4gXAogICAgICQkV0VCS0lUX1RFU1RTX0RJUi9oeWJyaWRQaXhtYXAKIAogbGlu
dXgtKiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gMTUyMTU2KQorKysgU291cmNlL1dl
YktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMyBAQAorMjAxMy0w
Ni0yOCAgRGVlcGp5b3RpIFNhaGEgIDxkZWVzYWhhQGNpc2NvLmNvbT4KKworICAgICAgICBbUXRd
IEFkZCBpbnRlcmZhY2UgQVBJIGZvciBvcmlnaW4gd2hpdGVsaXN0aW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTc4MjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgaW50ZXJmYWNlIEFQSXMg
aW4gUVdlYlNlY3VyaXR5T3JpZ2luIGZvciBhZGRpbmcvcmVtb3ZpbmcvcmVzZXR0aW5nIHdoaXRl
TGlzdC4KKworICAgICAgICBSZS11c2VkIG1vc3Qgb2YgdGhlIHRlc3QgY2FzZXMgd3JpdHRlbiBi
eSBDYXJvbCBTemFibyAgPGNhcm9sLnN6YWJvQG5va2lhLmNvbT4gCisgICAgICAgIGZvciBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE4NzUgYW5kIGFkZGVkIHRoZSBz
YW1lLgorCisgICAgICAgICogQXBpL3F3ZWJzZWN1cml0eW9yaWdpbi5jcHA6CisgICAgICAgIChR
V2ViU2VjdXJpdHlPcmlnaW46OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KToKKyAgICAg
ICAgKFFXZWJTZWN1cml0eU9yaWdpbjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkp
OgorICAgICAgICAoUVdlYlNlY3VyaXR5T3JpZ2luOjpyZXNldE9yaWdpbkFjY2Vzc1doaXRlbGlz
dHMpOgorICAgICAgICAqIEFwaS9xd2Vic2VjdXJpdHlvcmlnaW4uaDoKKyAgICAgICAgKiB0ZXN0
cy9xd2Vic2VjdXJpdHlvcmlnaW46IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3F3ZWJzZWN1cml0
eW9yaWdpbi9xd2Vic2VjdXJpdHlvcmlnaW4ucHJvOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9x
d2Vic2VjdXJpdHlvcmlnaW4vcmVzb3VyY2VzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9xd2Vi
c2VjdXJpdHlvcmlnaW4vcmVzb3VyY2VzL3Rlc3QuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVz
dHMvcXdlYnNlY3VyaXR5b3JpZ2luL3RzdF9xd2Vic2VjdXJpdHlvcmlnaW4uY3BwOiBBZGRlZC4K
KyAgICAgICAgKHRzdF9RV2ViU2VjdXJpdHlPcmlnaW46OnRzdF9RV2ViU2VjdXJpdHlPcmlnaW4p
OgorICAgICAgICAodHN0X1FXZWJTZWN1cml0eU9yaWdpbjo6fnRzdF9RV2ViU2VjdXJpdHlPcmln
aW4pOgorICAgICAgICAodHN0X1FXZWJTZWN1cml0eU9yaWdpbjo6aW5pdCk6CisgICAgICAgICh0
c3RfUVdlYlNlY3VyaXR5T3JpZ2luOjpjbGVhbnVwKToKKyAgICAgICAgKHRzdF9RV2ViU2VjdXJp
dHlPcmlnaW46OndoaXRlTGlzdF9kYXRhKToKKyAgICAgICAgKHRzdF9RV2ViU2VjdXJpdHlPcmln
aW46OndoaXRlTGlzdCk6CisgICAgICAgICogdGVzdHMvcXdlYnNlY3VyaXR5b3JpZ2luL3RzdF9x
d2Vic2VjdXJpdHlvcmlnaW4ucXJjOiBBZGRlZC4KKwogMjAxMy0wNi0yNyAgS2FuZ2lsIEhhbiAg
PGthbmdpbC5oYW5Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgQWRvcHQgaXMvdG9IVE1MSW5wdXRF
bGVtZW50IGZvciBjb2RlIGNsZWFudXAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJz
ZWN1cml0eW9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9BcGkvcXdl
YnNlY3VyaXR5b3JpZ2luLmNwcAkocmV2aXNpb24gMTUxNzI5KQorKysgU291cmNlL1dlYktpdC9x
dC9BcGkvcXdlYnNlY3VyaXR5b3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUs
NyBAQAogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgogI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlQb2xpY3kuaCIKICNp
bmNsdWRlICJxd2ViZGF0YWJhc2UuaCIKICNpbmNsdWRlICJxd2ViZGF0YWJhc2VfcC5oIgogI2lu
Y2x1ZGUgInF3ZWJzZWN1cml0eW9yaWdpbl9wLmgiCkBAIC0yNjUsMyArMjY2LDMyIEBAIFFTdHJp
bmdMaXN0IFFXZWJTZWN1cml0eU9yaWdpbjo6bG9jYWxTY2gKICAgICB9CiAgICAgcmV0dXJuIGxp
c3Q7CiB9CisKKy8qIQorICAgIEFsbG93cyBhcHBsaWNhdGlvbi9wbGF0Zm9ybSB0byB3aGlsZWxp
c3QgYW4gb3JpZ2luIHRvIGhhdmUgYWNjZXNzIHRvIHNwZWNpZmljIGRlc2l0bmF0aW9ucyBiZXlv
bmQgc2FtZS1vcmlnaW4tcG9saWN5LgorKi8KK3ZvaWQgUVdlYlNlY3VyaXR5T3JpZ2luOjphZGRP
cmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBRVXJsJiBzb3VyY2VPcmlnaW4sIGNvbnN0
IFFTdHJpbmcmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9u
SG9zdCwgU3ViZG9tYWluU2V0dGluZyBzdWJkb21haW5TZXR0aW5nKQoreworICAgIFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gb3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShLVVJMKHNvdXJj
ZU9yaWdpbikpOworICAgIFNlY3VyaXR5UG9saWN5OjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RF
bnRyeSgqb3JpZ2luLCBkZXN0aW5hdGlvblByb3RvY29sLCBkZXN0aW5hdGlvbkhvc3QsIHN1YmRv
bWFpblNldHRpbmcgPT0gQWxsb3dTdWJkb21haW5zKTsKK30KKworLyohCisgICAgQWxsb3dzIGFw
cGxpY2F0aW9uL3BsYXRmb3JtIHRvIHJlbW92ZSBhbiBvcmlnaW4gZnJvbSB3aGl0ZWxpc3QgdG8g
aGF2ZSBhY2Nlc3MgdG8gc3BlY2lmaWMgZGVzaXRuYXRpb25zIGJleW9uZCBzYW1lLW9yaWdpbi1w
b2xpY3kuCisqLwordm9pZCBRV2ViU2VjdXJpdHlPcmlnaW46OnJlbW92ZU9yaWdpbkFjY2Vzc1do
aXRlbGlzdEVudHJ5KGNvbnN0IFFVcmwmIHNvdXJjZU9yaWdpbiwgY29uc3QgUVN0cmluZyYgZGVz
dGluYXRpb25Qcm90b2NvbCwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRpb25Ib3N0LCBTdWJkb21h
aW5TZXR0aW5nIHN1YmRvbWFpblNldHRpbmcpCit7CisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiBvcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKEtVUkwoc291cmNlT3JpZ2luKSk7Cisg
ICAgU2VjdXJpdHlQb2xpY3k6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KCpvcmln
aW4sIGRlc3RpbmF0aW9uUHJvdG9jb2wsIGRlc3RpbmF0aW9uSG9zdCwgc3ViZG9tYWluU2V0dGlu
ZyA9PSBBbGxvd1N1YmRvbWFpbnMpOworfQorCisvKiEKKyAgICBBbGxvd3MgYXBwbGljYXRpb24v
cGxhdGZvcm0gdG8gY2xlYXIgdGhlIHdoaXRlbGlzdCB0byBoYXZlIGFjY2VzcyB0byBzcGVjaWZp
YyBkZXNpdG5hdGlvbnMgYmV5b25kIHNhbWUtb3JpZ2luLXBvbGljeS4KKyovCit2b2lkIFFXZWJT
ZWN1cml0eU9yaWdpbjo6cmVzZXRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RzKCkKK3sKKyAgICBTZWN1
cml0eVBvbGljeTo6cmVzZXRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RzKCk7Cit9CisKKworCkluZGV4
OiBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2VjdXJpdHlvcmlnaW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2VjdXJpdHlvcmlnaW4uaAkocmV2aXNpb24gMTUx
NzI5KQorKysgU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNlY3VyaXR5b3JpZ2luLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNs
YXNzIFNlY3VyaXR5T3JpZ2luOworICAgIGNsYXNzIFNlY3VyaXR5UG9saWN5OwogICAgIGNsYXNz
IENocm9tZUNsaWVudFF0OwogfQogCkBAIC0zNiwxMSArMzcsMjAgQEAgY2xhc3MgUVdlYkZyYW1l
OwogCiBjbGFzcyBRV0VCS0lUX0VYUE9SVCBRV2ViU2VjdXJpdHlPcmlnaW4gewogcHVibGljOgor
ICAgIGVudW0gU3ViZG9tYWluU2V0dGluZyB7CisgICAgICAgIEFsbG93U3ViZG9tYWlucywKKyAg
ICAgICAgRGlzYWxsb3dTdWJkb21haW5zCisgICAgfTsKKyAgICAKICAgICBzdGF0aWMgUUxpc3Q8
UVdlYlNlY3VyaXR5T3JpZ2luPiBhbGxPcmlnaW5zKCk7CiAgICAgc3RhdGljIHZvaWQgYWRkTG9j
YWxTY2hlbWUoY29uc3QgUVN0cmluZyYgc2NoZW1lKTsKICAgICBzdGF0aWMgdm9pZCByZW1vdmVM
b2NhbFNjaGVtZShjb25zdCBRU3RyaW5nJiBzY2hlbWUpOwogICAgIHN0YXRpYyBRU3RyaW5nTGlz
dCBsb2NhbFNjaGVtZXMoKTsKIAorICAgIHN0YXRpYyB2b2lkIGFkZE9yaWdpbkFjY2Vzc1doaXRl
bGlzdEVudHJ5KGNvbnN0IFFVcmwmLCBjb25zdCBRU3RyaW5nJiwgY29uc3QgUVN0cmluZyYsIFN1
YmRvbWFpblNldHRpbmcpOworICAgIHN0YXRpYyB2b2lkIHJlbW92ZU9yaWdpbkFjY2Vzc1doaXRl
bGlzdEVudHJ5KGNvbnN0IFFVcmwmLCBjb25zdCBRU3RyaW5nJiwgY29uc3QgUVN0cmluZyYsIFN1
YmRvbWFpblNldHRpbmcpOworICAgIHN0YXRpYyB2b2lkIHJlc2V0T3JpZ2luQWNjZXNzV2hpdGVs
aXN0cygpOworCiAgICAgflFXZWJTZWN1cml0eU9yaWdpbigpOwogCiAgICAgUVN0cmluZyBzY2hl
bWUoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcXdlYnNlY3VyaXR5b3Jp
Z2luL3F3ZWJzZWN1cml0eW9yaWdpbi5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9x
dC90ZXN0cy9xd2Vic2VjdXJpdHlvcmlnaW4vcXdlYnNlY3VyaXR5b3JpZ2luLnBybwkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcXdlYnNlY3VyaXR5b3JpZ2luL3F3ZWJz
ZWN1cml0eW9yaWdpbi5wcm8JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMiBAQAoraW5jbHVkZSgu
Li90ZXN0cy5wcmkpCitleGlzdHMoJCR7VEFSR0VUfS5xcmMpOlJFU09VUkNFUyArPSAkJHtUQVJH
RVR9LnFyYwpJbmRleDogU291cmNlL1dlYktpdC9xdC90ZXN0cy9xd2Vic2VjdXJpdHlvcmlnaW4v
dHN0X3F3ZWJzZWN1cml0eW9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9x
dC90ZXN0cy9xd2Vic2VjdXJpdHlvcmlnaW4vdHN0X3F3ZWJzZWN1cml0eW9yaWdpbi5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3F3ZWJzZWN1cml0eW9yaWdpbi90
c3RfcXdlYnNlY3VyaXR5b3JpZ2luLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDIgQEAK
Ky8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorICAgIENvcHlyaWdodCAoQykgMjAxMyBDaXNjbyBTeXN0ZW1zLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgPFFEZWJ1Zz4KKyNpbmNsdWRl
IDxRTmV0d29ya1JlcGx5PgorI2luY2x1ZGUgPFF0VGVzdD4KKyNpbmNsdWRlIDxxd2ViZnJhbWUu
aD4KKyNpbmNsdWRlIDxxd2VicGFnZS5oPgorI2luY2x1ZGUgPHF3ZWJzZWN1cml0eW9yaWdpbi5o
PgorI2luY2x1ZGUgPHF3ZWJ2aWV3Lmg+CisKK2NsYXNzIHRzdF9RV2ViU2VjdXJpdHlPcmlnaW4g
OiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICB0c3RfUVdlYlNl
Y3VyaXR5T3JpZ2luKCk7CisgICAgdmlydHVhbCB+dHN0X1FXZWJTZWN1cml0eU9yaWdpbigpOwor
Citwcml2YXRlIHNsb3RzOgorICAgIHZvaWQgaW5pdCgpOworICAgIHZvaWQgY2xlYW51cCgpOwor
ICAgIHZvaWQgd2hpdGVMaXN0X2RhdGEoKTsKKyAgICB2b2lkIHdoaXRlTGlzdCgpOworcHJpdmF0
ZToKKyAgICBRV2ViVmlldyogbV92aWV3OworICAgIFFXZWJQYWdlKiBtX3BhZ2U7Cit9OworCit0
c3RfUVdlYlNlY3VyaXR5T3JpZ2luOjp0c3RfUVdlYlNlY3VyaXR5T3JpZ2luKCkKK3sKK30KKwor
dHN0X1FXZWJTZWN1cml0eU9yaWdpbjo6fnRzdF9RV2ViU2VjdXJpdHlPcmlnaW4oKQoreworfQor
Cit2b2lkIHRzdF9RV2ViU2VjdXJpdHlPcmlnaW46OmluaXQoKQoreworICAgIG1fdmlldyA9IG5l
dyBRV2ViVmlldygpOworICAgIG1fcGFnZSA9IG1fdmlldy0+cGFnZSgpOworfQorCit2b2lkIHRz
dF9RV2ViU2VjdXJpdHlPcmlnaW46OmNsZWFudXAoKQoreworICAgIGRlbGV0ZSBtX3ZpZXc7Cit9
CisKK3ZvaWQgdHN0X1FXZWJTZWN1cml0eU9yaWdpbjo6d2hpdGVMaXN0X2RhdGEoKQoreworICAg
IFFUZXN0OjphZGRDb2x1bW48UVN0cmluZz4oInNvdXJjZSIpOworICAgIFFUZXN0OjphZGRDb2x1
bW48UVN0cmluZz4oInRhcmdldFByb3RvY29sIik7CisgICAgUVRlc3Q6OmFkZENvbHVtbjxRU3Ry
aW5nPigidGFyZ2V0SG9zdCIpOworICAgIFFUZXN0OjphZGRDb2x1bW48Ym9vbD4oImluY2x1ZGVT
dWJEb21haW5zIik7CisgICAgUVRlc3Q6OmFkZENvbHVtbjxRU3RyaW5nPigidGVzdFVybCIpOwor
ICAgIFFUZXN0OjphZGRDb2x1bW48Ym9vbD4oInN1Y2Nlc3NCZWZvcmVBZGQiKTsKKyAgICBRVGVz
dDo6YWRkQ29sdW1uPGJvb2w+KCJzdWNjZXNzQWZ0ZXJBZGQxIik7CisgICAgUVRlc3Q6OmFkZENv
bHVtbjxib29sPigic3VjY2Vzc0FmdGVyUmVtb3ZlIik7CisgICAgUVRlc3Q6OmFkZENvbHVtbjxi
b29sPigic3VjY2Vzc0FmdGVyQWRkMiIpOworICAgIFFUZXN0OjphZGRDb2x1bW48Ym9vbD4oInN1
Y2Nlc3NBZnRlckNsZWFyIik7CisKKyAgICBRVGVzdDo6bmV3Um93KCJzY2hlbWUiKSA8PCAiaHR0
cDovL3d3dy5zb3VyY2UuY29tIiA8PCAiaHR0cHMiIDw8ICJ3d3cudGFyZ2V0LmNvbSIgPDwgZmFs
c2UgPDwgImh0dHBzOi8vd3d3LnRhcmdldC5jb20vb3RoZXIiIDw8IGZhbHNlIDw8IHRydWUgPDwg
ZmFsc2UgPDwgdHJ1ZSA8PCBmYWxzZTsKKyAgICBRVGVzdDo6bmV3Um93KCJzY2hlbWVGYWlsIikg
PDwgImh0dHA6Ly93d3cuc291cmNlLmNvbSIgPDwgImh0dHBzIiA8PCAid3d3LnRhcmdldC5jb20i
IDw8IGZhbHNlIDw8ICJodHRwOi8vd3d3LnRhcmdldC5jb20vb3RoZXIiIDw8IGZhbHNlIDw8IGZh
bHNlIDw8IGZhbHNlIDw8IGZhbHNlIDw8IGZhbHNlOworICAgIFFUZXN0OjpuZXdSb3coInNjaGVt
ZVN1YkRvbSIpIDw8ICJodHRwOi8vd3d3LnNvdXJjZS5jb20iIDw8ICJodHRwcyIgPDwgInRhcmdl
dC5jb20iIDw8IHRydWUgPDwgImh0dHBzOi8vd3d3LnRhcmdldC5jb20vb3RoZXIiIDw8IGZhbHNl
IDw8IHRydWUgPDwgZmFsc2UgPDwgdHJ1ZSA8PCBmYWxzZTsKKyAgICBRVGVzdDo6bmV3Um93KCJz
Y2hlbWVTdWJEb21GYWlsIikgPDwgImh0dHA6Ly93d3cuc291cmNlLmNvbSIgPDwgImh0dHBzIiA8
PCAidGFyZ2V0LmNvbSIgPDwgdHJ1ZSA8PCAiaHR0cHM6Ly93d3d0YXJnZXQuY29tL290aGVyIiA8
PCBmYWxzZSA8PCBmYWxzZSA8PCBmYWxzZSA8PCBmYWxzZSA8PCBmYWxzZTsKKyAgICBRVGVzdDo6
bmV3Um93KCJzY2hlbWVTdWJEb21GYWlsIikgPDwgImh0dHA6Ly93d3cuc291cmNlLmNvbSIgPDwg
Imh0dHBzIiA8PCAidGFyZ2V0LmNvbSIgPDwgdHJ1ZSA8PCAiaHR0cDovL3d3dy50YXJnZXQuY29t
L290aGVyIiA8PCBmYWxzZSA8PCBmYWxzZSA8PCBmYWxzZSA8PCBmYWxzZSA8PCBmYWxzZTsKKyAg
ICBRVGVzdDo6bmV3Um93KCJob3N0IikgPDwgImh0dHA6Ly93d3cuc291cmNlLmNvbSIgPDwgImh0
dHAiIDw8ICJ3d3cudGFyZ2V0LmNvbSIgPDwgZmFsc2UgPDwgImh0dHA6Ly93d3cudGFyZ2V0LmNv
bS90YXJnZXQiIDw8IGZhbHNlIDw8IHRydWUgPDwgZmFsc2UgPDwgdHJ1ZSA8PCBmYWxzZTsKKyAg
ICBRVGVzdDo6bmV3Um93KCJob3N0RmFpbCIpIDw8ICJodHRwOi8vd3d3LnNvdXJjZS5jb20iIDw8
ICJodHRwIiA8PCAid3d3LnRhcmdldC5jb20iIDw8IGZhbHNlIDw8ICJodHRwOi8vd3d3Lm5ld3Rh
cmdldC5jb20iIDw8IGZhbHNlIDw8IGZhbHNlIDw8IGZhbHNlIDw8IGZhbHNlIDw8IGZhbHNlOwor
ICAgIFFUZXN0OjpuZXdSb3coImhvc3RTdWJEb20iKSA8PCAiaHR0cDovL3d3dy5zb3VyY2UuY29t
IiA8PCAiaHR0cCIgPDwgInRhcmdldC5jb20iIDw8IHRydWUgPDwgImh0dHA6Ly9hYmMyLnRhcmdl
dC5jb20iIDw8IGZhbHNlIDw8IHRydWUgPDwgZmFsc2UgPDwgdHJ1ZSA8PGZhbHNlOworICAgIFFU
ZXN0OjpuZXdSb3coImhvc3RTdWJEb21GYWlsIikgPDwgImh0dHA6Ly93d3cuc291cmNlLmNvbSIg
PDwgImh0dHAiIDw8InRhcmdldC5jb20iIDw8IHRydWUgPDwgImh0dHA6Ly9hYmMydGFyZ2V0LmNv
bSIgPDwgZmFsc2UgPDwgZmFsc2UgPDwgZmFsc2UgPDwgZmFsc2UgPDwgZmFsc2U7CisgICAgUVRl
c3Q6Om5ld1JvdygiaG9zdFN1YkRvbUZhaWxDb3VudHJ5IikgPDwgImh0dHA6Ly93d3cuc291cmNl
LmNvbSIgPDwgImh0dHAiIDw8ICJ0YXJnZXQuY29tIiA8PCB0cnVlIDw8ICJodHRwOi8vd3d3LnRh
cmdldC5jb20udHciIDw8IGZhbHNlIDw8IGZhbHNlIDw8IGZhbHNlIDw8IGZhbHNlIDw8IGZhbHNl
OworfQorCitjbGFzcyBDYW5uZWRSZXNwb25zZU5ldHdvcmtSZXBseTogcHVibGljIFFOZXR3b3Jr
UmVwbHkgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgQ2FubmVkUmVzcG9uc2VOZXR3b3Jr
UmVwbHkoUU9iamVjdCogcGFyZW50LCBRTmV0d29ya0FjY2Vzc01hbmFnZXI6Ok9wZXJhdGlvbiBv
cCwgY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiByZXEsIGNvbnN0IFFCdWZmZXImIGJvZHkpOiBRTmV0
d29ya1JlcGx5KHBhcmVudCkKKyAgICB7CisgICAgICAgIHNldFJlcXVlc3QocmVxKTsKKyAgICAg
ICAgc2V0VXJsKHJlcS51cmwoKSk7CisgICAgICAgIHNldE9wZXJhdGlvbihvcCk7CisgICAgICAg
IG1fYnVmZmVyLnNldERhdGEoYm9keS5kYXRhKCkpOworICAgICAgICBjb25uZWN0KCZtX2J1ZmZl
ciwgU0lHTkFMKHJlYWR5UmVhZCgpKSwgU0xPVChlbWl0UmVhZHlSZWFkKCkpKTsKKyAgICAgICAg
Y29ubmVjdCgmbV9idWZmZXIsIFNJR05BTChyZWFkQ2hhbm5lbEZpbmlzaGVkKCkpLCBTTE9UKGVt
aXRSZWFkQ2hhbm5lbEZpbmlzaGVkKCkpKTsKKyAgICAgICAgY29ubmVjdCgmbV9idWZmZXIsIFNJ
R05BTChyZWFkQ2hhbm5lbEZpbmlzaGVkKCkpLCBTTE9UKGVtaXRSZWFkQ2hhbm5lbEZpbmlzaGVk
KCkpKTsKKyAgICAgICAgbV9idWZmZXIub3BlbihRSU9EZXZpY2U6OlJlYWRPbmx5KTsKKyAgICAg
ICAgb3BlbihRSU9EZXZpY2U6OlJlYWRPbmx5KTsKKyAgICAgICAgUVRpbWVyOjpzaW5nbGVTaG90
KDEwLCB0aGlzLCBTTE9UKHVwZGF0ZSgpKSk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIHFpbnQ2
NCByZWFkRGF0YShjaGFyICogZGF0YSwgcWludDY0IG1heFNpemUpCisgICAgeworICAgICAgICBx
aW50NjQgcmVzdWx0ID0gbV9idWZmZXIucmVhZChkYXRhLCBtYXhTaXplKTsKKyAgICAgICAgaWYg
KCFtX2J1ZmZlci5ieXRlc0F2YWlsYWJsZSgpKQorICAgICAgICAgICAgUVRpbWVyOjpzaW5nbGVT
aG90KDEwLCB0aGlzLCBTTE9UKGVtaXRSZWFkQ2hhbm5lbEZpbmlzaGVkKCkpKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHFpbnQ2NCBieXRlc0F2YWlsYWJs
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9idWZmZXIuYnl0ZXNBdmFpbGFibGUo
KTsKKyAgICB9CisKK3ByaXZhdGUgc2xvdHM6CisgICAgdm9pZCBlbWl0UmVhZHlSZWFkKCkKKyAg
ICB7CisgICAgICAgIGVtaXQgcmVhZHlSZWFkKCk7CisgICAgfQorCisgICAgdm9pZCBlbWl0UmVh
ZENoYW5uZWxGaW5pc2hlZCgpCisgICAgeworICAgICAgICBlbWl0IHJlYWRDaGFubmVsRmluaXNo
ZWQoKTsKKyAgICAgICAgZW1pdCBmaW5pc2hlZCgpOworICAgIH0KKworICAgIHZvaWQgYWJvcnQo
KQorICAgIHsKKyAgICB9OworCisgICAgdm9pZCB1cGRhdGUoKQorICAgIHsKKyAgICAgICAgc2V0
SGVhZGVyKFFOZXR3b3JrUmVxdWVzdDo6Q29udGVudFR5cGVIZWFkZXIsICJ0ZXh0L3BsYWluIik7
CisgICAgICAgIHNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6OkNvbnRlbnRMZW5ndGhIZWFkZXIs
IG1fYnVmZmVyLnNpemUoKSk7CisgICAgICAgIHNldEVycm9yKFFOZXR3b3JrUmVwbHk6Ok5vRXJy
b3IsICIiKTsKKyAgICAgICAgc2V0QXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6SHR0cFN0YXR1
c0NvZGVBdHRyaWJ1dGUsIDIwMCk7CisgICAgICAgIHNldEF0dHJpYnV0ZShRTmV0d29ya1JlcXVl
c3Q6Okh0dHBSZWFzb25QaHJhc2VBdHRyaWJ1dGUsIFFTdHJpbmcoIk9rIikudG9MYXRpbjEoKSk7
CisgICAgICAgIGVtaXQgbWV0YURhdGFDaGFuZ2VkKCk7CisgICAgICAgIGVtaXQgcmVhZHlSZWFk
KCk7CisgICAgfQorcHVibGljOgorICAgIFFCdWZmZXIgbV9idWZmZXI7Cit9OworCitjbGFzcyBD
YW5uZWRSZXNwb25zZU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOiBwdWJsaWMgUU5ldHdvcmtBY2Nlc3NN
YW5hZ2VyIHsKKyAgICBRX09CSkVDVAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgUU5ldHdvcmtS
ZXBseSogY3JlYXRlUmVxdWVzdChPcGVyYXRpb24gb3AsIGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYg
cmVxLCBRSU9EZXZpY2UqIG91dGdvaW5nRGF0YSA9IDApCisgICAgeworICAgICAgICByZXR1cm4g
bmV3IENhbm5lZFJlc3BvbnNlTmV0d29ya1JlcGx5KHRoaXMsIG9wLCByZXEsICptX2J1ZmZlcik7
CisgICAgfTsKK3B1YmxpYzoKKyAgICBRQnVmZmVyKiBtX2J1ZmZlcjsKK307CisKK3N0YXRpYyBj
b25zdCBjaGFyIGNhbm5lZFJlc3BvbnNlW10gPSAiVGVzdCI7CisKK3ZvaWQgdHN0X1FXZWJTZWN1
cml0eU9yaWdpbjo6d2hpdGVMaXN0KCkKK3sKKyAgICBRRkVUQ0goUVN0cmluZywgc291cmNlKTsK
KyAgICBRRkVUQ0goUVN0cmluZywgdGFyZ2V0UHJvdG9jb2wpOworICAgIFFGRVRDSChRU3RyaW5n
LCB0YXJnZXRIb3N0KTsKKyAgICBRRkVUQ0goYm9vbCwgaW5jbHVkZVN1YkRvbWFpbnMpOworICAg
IFFGRVRDSChRU3RyaW5nLCB0ZXN0VXJsKTsKKyAgICBRRkVUQ0goYm9vbCwgc3VjY2Vzc0JlZm9y
ZUFkZCk7CisgICAgUUZFVENIKGJvb2wsIHN1Y2Nlc3NBZnRlckFkZDEpOworICAgIFFGRVRDSChi
b29sLCBzdWNjZXNzQWZ0ZXJSZW1vdmUpOworICAgIFFGRVRDSChib29sLCBzdWNjZXNzQWZ0ZXJB
ZGQyKTsKKyAgICBRRkVUQ0goYm9vbCwgc3VjY2Vzc0FmdGVyQ2xlYXIpOworCisgICAgUVdlYlNl
Y3VyaXR5T3JpZ2luOjpyZXNldE9yaWdpbkFjY2Vzc1doaXRlbGlzdHMoKTsKKyAgICBDYW5uZWRS
ZXNwb25zZU5ldHdvcmtBY2Nlc3NNYW5hZ2VyIG1hbmFnZXI7CisgICAgUUJ1ZmZlciBidWZmZXI7
CisgICAgUVdlYlNlY3VyaXR5T3JpZ2luOjpTdWJkb21haW5TZXR0aW5nIHN1YmRvbWFpblNldHRp
bmcgPSBpbmNsdWRlU3ViRG9tYWlucyA/IFFXZWJTZWN1cml0eU9yaWdpbjo6QWxsb3dTdWJkb21h
aW5zIDogUVdlYlNlY3VyaXR5T3JpZ2luOjpEaXNhbGxvd1N1YmRvbWFpbnM7CisgICAgYnVmZmVy
LnNldERhdGEoY2FubmVkUmVzcG9uc2UsIHNpemVvZihjYW5uZWRSZXNwb25zZSktMSk7CisgICAg
bWFuYWdlci5tX2J1ZmZlciA9ICZidWZmZXI7CisgICAgUUZpbGUgdGVzdFBhZ2VGaWxlKCI6L3Jl
c291cmNlcy90ZXN0Lmh0bWwiKTsKKyAgICBRVkVSSUZZKHRlc3RQYWdlRmlsZS5vcGVuKFFJT0Rl
dmljZTo6UmVhZE9ubHkpKTsKKyAgICB1Y2hhciogdGVzdFBhZ2UgPSB0ZXN0UGFnZUZpbGUubWFw
KDAsIHRlc3RQYWdlRmlsZS5zaXplKCkpOworICAgIFFWRVJJRlkodGVzdFBhZ2UpOworICAgIG1f
dmlldy0+c2V0SHRtbChRU3RyaW5nKChjb25zdCBjaGFyKil0ZXN0UGFnZSksIFFVcmwoc291cmNl
KSk7CisgICAgbV92aWV3LT5wYWdlKCktPnNldE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCZtYW5hZ2Vy
KTsKKyAgICBRU3RyaW5nIHRlc3RKUz0icnVuVGVzdChcIiIgKyB0ZXN0VXJsICsgIlwiKSI7Cisg
ICAgUUNPTVBBUkUobV92aWV3LT5wYWdlKCktPm1haW5GcmFtZSgpLT5ldmFsdWF0ZUphdmFTY3Jp
cHQodGVzdEpTKSwgUVZhcmlhbnQoc3VjY2Vzc0JlZm9yZUFkZCkpOworICAgIFFXZWJTZWN1cml0
eU9yaWdpbjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoc291cmNlLCB0YXJnZXRQcm90
b2NvbCwgdGFyZ2V0SG9zdCwgc3ViZG9tYWluU2V0dGluZyk7CisgICAgUUNPTVBBUkUobV92aWV3
LT5wYWdlKCktPm1haW5GcmFtZSgpLT5ldmFsdWF0ZUphdmFTY3JpcHQodGVzdEpTKSwgUVZhcmlh
bnQoc3VjY2Vzc0FmdGVyQWRkMSkpOworICAgIFFXZWJTZWN1cml0eU9yaWdpbjo6cmVtb3ZlT3Jp
Z2luQWNjZXNzV2hpdGVsaXN0RW50cnkoc291cmNlLCB0YXJnZXRQcm90b2NvbCwgdGFyZ2V0SG9z
dCwgc3ViZG9tYWluU2V0dGluZyk7CisgICAgUUNPTVBBUkUobV92aWV3LT5wYWdlKCktPm1haW5G
cmFtZSgpLT5ldmFsdWF0ZUphdmFTY3JpcHQodGVzdEpTKSwgUVZhcmlhbnQoc3VjY2Vzc0FmdGVy
UmVtb3ZlKSk7CisgICAgUVdlYlNlY3VyaXR5T3JpZ2luOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxp
c3RFbnRyeShzb3VyY2UsIHRhcmdldFByb3RvY29sLCB0YXJnZXRIb3N0LCBzdWJkb21haW5TZXR0
aW5nKTsKKyAgICBRQ09NUEFSRShtX3ZpZXctPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmV2YWx1YXRl
SmF2YVNjcmlwdCh0ZXN0SlMpLCBRVmFyaWFudChzdWNjZXNzQWZ0ZXJBZGQyKSk7CisgICAgUVdl
YlNlY3VyaXR5T3JpZ2luOjpyZXNldE9yaWdpbkFjY2Vzc1doaXRlbGlzdHMoKTsKKyAgICBRQ09N
UEFSRShtX3ZpZXctPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmV2YWx1YXRlSmF2YVNjcmlwdCh0ZXN0
SlMpLCBRVmFyaWFudChzdWNjZXNzQWZ0ZXJDbGVhcikpOworICAgIG1fdmlldy0+cGFnZSgpLT5z
ZXROZXR3b3JrQWNjZXNzTWFuYWdlcigwKTsKK30KKworUVRFU1RfTUFJTih0c3RfUVdlYlNlY3Vy
aXR5T3JpZ2luKQorI2luY2x1ZGUgInRzdF9xd2Vic2VjdXJpdHlvcmlnaW4ubW9jIgorCkluZGV4
OiBTb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3F3ZWJzZWN1cml0eW9yaWdpbi90c3RfcXdlYnNlY3Vy
aXR5b3JpZ2luLnFyYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3F3ZWJz
ZWN1cml0eW9yaWdpbi90c3RfcXdlYnNlY3VyaXR5b3JpZ2luLnFyYwkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcXdlYnNlY3VyaXR5b3JpZ2luL3RzdF9xd2Vic2VjdXJp
dHlvcmlnaW4ucXJjCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKKzwhRE9DVFlQRSBSQ0M+
PFJDQyB2ZXJzaW9uPSIxLjAiPgorPHFyZXNvdXJjZT4KKyAgICA8ZmlsZT5yZXNvdXJjZXMvdGVz
dC5odG1sPC9maWxlPgorPC9xcmVzb3VyY2U+Cis8L1JDQz4KKwpJbmRleDogU291cmNlL1dlYktp
dC9xdC90ZXN0cy9xd2Vic2VjdXJpdHlvcmlnaW4vcmVzb3VyY2VzL3Rlc3QuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3F3ZWJzZWN1cml0eW9yaWdpbi9yZXNvdXJj
ZXMvdGVzdC5odG1sCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC90ZXN0cy9xd2Vi
c2VjdXJpdHlvcmlnaW4vcmVzb3VyY2VzL3Rlc3QuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1MyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VO
IiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZCI+Cis8aHRtbD4KKyAgIDxo
ZWFkPgorICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4
dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorICAgICAgIDx0aXRsZT5RV2ViU2VjdXJpdHlP
cmlnaW4gdGVzdCBwYWdlPC90aXRsZT4KKyAgICAgICA8c2NyaXB0IExhbmd1YWdlPSJKYXZhU2Ny
aXB0Ij4KKyAgICAgICAgICAgZnVuY3Rpb24gcnVuVGVzdCh1cmwpCisgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgIHZhciByZXN1bHQgPSAiIjsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiB0
cmFjZShwb2ludCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZhciBl
bCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKKyAgICAgICAgICAgICAgICAgICAgIGVs
LmlubmVySFRNTCA9IHBvaW50ICsgIjogUmVzdWx0IGlzOlwiIiArIHJlc3VsdCArICJcIiIKKyAg
ICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJDb25zb2xlIikuYXBw
ZW5kQ2hpbGQoZWwpOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIHRyeSB7
CisgICAgICAgICAgICAgICAgICAgICB2YXIgeG1saHR0cCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgp
OworICAgICAgICAgICAgICAgICAgICAgeG1saHR0cC5vcGVuKCdHRVQnLHVybCwgZmFsc2UpOwor
ICAgICAgICAgICAgICAgICAgICAgeG1saHR0cC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBkb25lOwor
ICAgICAgICAgICAgICAgICAgICAgeG1saHR0cC5vbmVycm9yID0gZXJyb3I7CisgICAgICAgICAg
ICAgICAgICAgICB4bWxodHRwLnNlbmQobnVsbCk7CisgICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSB4bWxodHRwLnJlc3BvbnNlVGV4dDsKKyAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkg
eworICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSAiIikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2Uo
IkNhdGNoMSIpOworICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgdHJhY2UoIkNhdGNoMiIpOworICAgICAgICAgICAgICAgICB9CisgCisgICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uIGRvbmUoKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA8IDUpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgPSAiIiArIHhtbGh0dHAucmVhZHlTdGF0ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICB0cmFjZSgiRG9uZTEiKTsKKyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgIHRyYWNlKCJEb25lMiIpOworICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGVycm9yKCkKKyAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gIkZBSUxFRCI7CisgICAgICAgICAgICAgICAg
ICAgICB0cmFjZSgiRXJyb3IiKTsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICB0cmFjZSgiRXhpdCIpOworICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ID09ICJUZXN0
IjsKKyAgICAgICAgICAgICB9CisgICAgICAgICA8L3NjcmlwdD4KKyAgICAgPC9oZWFkPgorICAg
ICA8Ym9keT4KKyAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIG9uY2xpY2s9ImphdmFzY3Jp
cHQ6YWxlcnQocnVuVGVzdCgnaHR0cDovL3d3dy5nb29nbGUuY29tJykpIiB2YWx1ZT0iUnVuIFRl
c3QiLz48YnIvPgorICAgICAgICAgPGRpdiBpZD0iQ29uc29sZSIvPgorICAgICA8L2JvZHk+Cisg
PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207318</attachid>
            <date>2013-07-23 03:45:40 -0700</date>
            <delta_ts>2013-07-30 03:20:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-117823-20130723161114.patch</filename>
            <type>text/plain</type>
            <size>17622</size>
            <attacher name="Deepjyoti Saha">deesaha</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS90ZXN0cy5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL3Rlc3RzLnByaQko
cmV2aXNpb24gMTUxNzI5KQorKysgU291cmNlL3Rlc3RzLnByaQkod29ya2luZyBjb3B5KQpAQCAt
MjAsNiArMjAsNyBAQCBTVUJESVJTICs9IFwKICAgICAkJFdFQktJVF9URVNUU19ESVIvcXdlYnZp
ZXcgXAogICAgICQkV0VCS0lUX1RFU1RTX0RJUi9xd2ViaGlzdG9yeSBcCiAgICAgJCRXRUJLSVRf
VEVTVFNfRElSL3F3ZWJpbnNwZWN0b3IgXAorICAgICQkV0VCS0lUX1RFU1RTX0RJUi9xd2Vic2Vj
dXJpdHlvcmlnaW4gXAogICAgICQkV0VCS0lUX1RFU1RTX0RJUi9oeWJyaWRQaXhtYXAKIAogbGlu
dXgtKiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gMTUyMTU2KQorKysgU291cmNlL1dl
YktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMyBAQAorMjAxMy0w
Ni0yOCAgRGVlcGp5b3RpIFNhaGEgIDxkZWVzYWhhQGNpc2NvLmNvbT4KKworICAgICAgICBbUXRd
IEFkZCBpbnRlcmZhY2UgQVBJIGZvciBvcmlnaW4gd2hpdGVsaXN0aW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTc4MjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgaW50ZXJmYWNlIEFQSXMg
aW4gUVdlYlNlY3VyaXR5T3JpZ2luIGZvciBhZGRpbmcvcmVtb3ZpbmcvcmVzZXR0aW5nIHdoaXRl
TGlzdC4KKworICAgICAgICBSZS11c2VkIG1vc3Qgb2YgdGhlIHRlc3QgY2FzZXMgd3JpdHRlbiBi
eSBDYXJvbCBTemFibyAgPGNhcm9sLnN6YWJvQG5va2lhLmNvbT4gCisgICAgICAgIGZvciBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE4NzUgYW5kIGFkZGVkIHRoZSBz
YW1lLgorCisgICAgICAgICogQXBpL3F3ZWJzZWN1cml0eW9yaWdpbi5jcHA6CisgICAgICAgIChR
V2ViU2VjdXJpdHlPcmlnaW46OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KToKKyAgICAg
ICAgKFFXZWJTZWN1cml0eU9yaWdpbjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkp
OgorICAgICAgICAoUVdlYlNlY3VyaXR5T3JpZ2luOjpyZXNldE9yaWdpbkFjY2Vzc1doaXRlbGlz
dHMpOgorICAgICAgICAqIEFwaS9xd2Vic2VjdXJpdHlvcmlnaW4uaDoKKyAgICAgICAgKiB0ZXN0
cy9xd2Vic2VjdXJpdHlvcmlnaW46IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3F3ZWJzZWN1cml0
eW9yaWdpbi9xd2Vic2VjdXJpdHlvcmlnaW4ucHJvOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9x
d2Vic2VjdXJpdHlvcmlnaW4vcmVzb3VyY2VzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9xd2Vi
c2VjdXJpdHlvcmlnaW4vcmVzb3VyY2VzL3Rlc3QuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVz
dHMvcXdlYnNlY3VyaXR5b3JpZ2luL3RzdF9xd2Vic2VjdXJpdHlvcmlnaW4uY3BwOiBBZGRlZC4K
KyAgICAgICAgKHRzdF9RV2ViU2VjdXJpdHlPcmlnaW46OnRzdF9RV2ViU2VjdXJpdHlPcmlnaW4p
OgorICAgICAgICAodHN0X1FXZWJTZWN1cml0eU9yaWdpbjo6fnRzdF9RV2ViU2VjdXJpdHlPcmln
aW4pOgorICAgICAgICAodHN0X1FXZWJTZWN1cml0eU9yaWdpbjo6aW5pdCk6CisgICAgICAgICh0
c3RfUVdlYlNlY3VyaXR5T3JpZ2luOjpjbGVhbnVwKToKKyAgICAgICAgKHRzdF9RV2ViU2VjdXJp
dHlPcmlnaW46OndoaXRlTGlzdF9kYXRhKToKKyAgICAgICAgKHRzdF9RV2ViU2VjdXJpdHlPcmln
aW46OndoaXRlTGlzdCk6CisgICAgICAgICogdGVzdHMvcXdlYnNlY3VyaXR5b3JpZ2luL3RzdF9x
d2Vic2VjdXJpdHlvcmlnaW4ucXJjOiBBZGRlZC4KKwogMjAxMy0wNi0yNyAgS2FuZ2lsIEhhbiAg
PGthbmdpbC5oYW5Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgQWRvcHQgaXMvdG9IVE1MSW5wdXRF
bGVtZW50IGZvciBjb2RlIGNsZWFudXAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJz
ZWN1cml0eW9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9BcGkvcXdl
YnNlY3VyaXR5b3JpZ2luLmNwcAkocmV2aXNpb24gMTUxNzI5KQorKysgU291cmNlL1dlYktpdC9x
dC9BcGkvcXdlYnNlY3VyaXR5b3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUs
NyBAQAogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgogI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlQb2xpY3kuaCIKICNp
bmNsdWRlICJxd2ViZGF0YWJhc2UuaCIKICNpbmNsdWRlICJxd2ViZGF0YWJhc2VfcC5oIgogI2lu
Y2x1ZGUgInF3ZWJzZWN1cml0eW9yaWdpbl9wLmgiCkBAIC0yNjUsMyArMjY2LDUyIEBAIFFTdHJp
bmdMaXN0IFFXZWJTZWN1cml0eU9yaWdpbjo6bG9jYWxTY2gKICAgICB9CiAgICAgcmV0dXJuIGxp
c3Q7CiB9CisKKworLyohCisgICAgQWxsb3dzIGNvbnRydWN0aW9uIG9mIFFXZWJTZWN1cml0eU9y
aWdpbigpIGFzIHBlciB0aGUgc3BlY2lmaWVkIFxhIHVybC4KKyovCitRV2ViU2VjdXJpdHlPcmln
aW46OlFXZWJTZWN1cml0eU9yaWdpbihjb25zdCBRVXJsJiB1cmwpCit7CisgICAgUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKEtVUkwodXJsKSk7
CisgICAgaWYgKG9yaWdpbikKKyAgICAgICAgZCA9IG5ldyBRV2ViU2VjdXJpdHlPcmlnaW5Qcml2
YXRlKG9yaWdpbik7Cit9CisKKworLyohCisgICAgQWxsb3dzIHRoZSBvcmlnaW4gdG8gYWNjZXNz
IHRoZSBzcGVjaWZpZWQgXGEgaG9zdCB1c2luZyB0aGUgc3BlY2lmaWVkIFxhIHNjaGVtZS4KKyAg
ICBUaGUgc3ViZG9tYWluIGFjY2VzcyBpcyBiYXNlZCBvbiB0aGUgXGEgc3ViZG9tYWluU2V0dGlu
Zy4KKyAgICAKKyAgICBTdWNoIGNyb3NzIG9yaWdpbiByZXF1ZXN0cyBhcmUgb3RoZXJ3aXNlIHJl
c3RyaWN0ZWQgYXMgcGVyIHRoZSBzYW1lLW9yaWdpbi1wb2xpY3kuCisqLwordm9pZCBRV2ViU2Vj
dXJpdHlPcmlnaW46OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IFFTdHJpbmcm
IHNjaGVtZSwgY29uc3QgUVN0cmluZyYgaG9zdCwgU3ViZG9tYWluU2V0dGluZyBzdWJkb21haW5T
ZXR0aW5nKQoreworICAgIGlmICghZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2VjdXJpdHlQ
b2xpY3k6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KCooZC0+b3JpZ2luKSwgc2NoZW1l
LCBob3N0LCBzdWJkb21haW5TZXR0aW5nID09IEFsbG93U3ViZG9tYWlucyk7Cit9CisKKy8qIQor
ICAgIFJlbW92ZXMgdGhlIHdoaXRlbGlzdGVkIGFjY2VzcyBmb3IgYW4gb3JpZ2luIHRvIHRoZSBz
cGVjaWZpZWQgXGEgaG9zdCB1c2luZyB0aGUgc3BlY2lmaWVkIFxhIHNjaGVtZS4KKyAgICBUaGUg
c3ViZG9tYWluIGFjY2VzcyBpcyBiYXNlZCBvbiB0aGUgXGEgc3ViZG9tYWluU2V0dGluZy4KKyov
Cit2b2lkIFFXZWJTZWN1cml0eU9yaWdpbjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50
cnkoY29uc3QgUVN0cmluZyYgc2NoZW1lLCBjb25zdCBRU3RyaW5nJiBob3N0LCBTdWJkb21haW5T
ZXR0aW5nIHN1YmRvbWFpblNldHRpbmcpCit7CisgICAgaWYgKCFkKQorICAgICAgICByZXR1cm47
CisKKyAgICBTZWN1cml0eVBvbGljeTo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnko
KihkLT5vcmlnaW4pLCBzY2hlbWUsIGhvc3QsIHN1YmRvbWFpblNldHRpbmcgPT0gQWxsb3dTdWJk
b21haW5zKTsKK30KKworLyohCisgICAgQWxsb3dzIHJlc2V0aW5nIHRoZSB3aGl0ZWxpc3Qgd2hp
Y2ggYWxsb3dzIGFjY2VzcyB0byBzcGVjaWZpZWQgaG9zdHMgYmV5b25kIHRoZSBzYW1lLW9yaWdp
bi1wb2xpY3kuCisqLwordm9pZCBRV2ViU2VjdXJpdHlPcmlnaW46OnJlc2V0T3JpZ2luQWNjZXNz
V2hpdGVsaXN0cygpCit7CisgICAgU2VjdXJpdHlQb2xpY3k6OnJlc2V0T3JpZ2luQWNjZXNzV2hp
dGVsaXN0cygpOworfQorCisKKwpJbmRleDogU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNlY3Vy
aXR5b3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNlY3Vy
aXR5b3JpZ2luLmgJKHJldmlzaW9uIDE1MTcyOSkKKysrIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3
ZWJzZWN1cml0eW9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMSArMzYsMjEgQEAgY2xh
c3MgUVdlYkZyYW1lOwogCiBjbGFzcyBRV0VCS0lUX0VYUE9SVCBRV2ViU2VjdXJpdHlPcmlnaW4g
ewogcHVibGljOgorICAgIGVudW0gU3ViZG9tYWluU2V0dGluZyB7CisgICAgICAgIEFsbG93U3Vi
ZG9tYWlucywKKyAgICAgICAgRGlzYWxsb3dTdWJkb21haW5zCisgICAgfTsKKyAgICAKICAgICBz
dGF0aWMgUUxpc3Q8UVdlYlNlY3VyaXR5T3JpZ2luPiBhbGxPcmlnaW5zKCk7CiAgICAgc3RhdGlj
IHZvaWQgYWRkTG9jYWxTY2hlbWUoY29uc3QgUVN0cmluZyYgc2NoZW1lKTsKICAgICBzdGF0aWMg
dm9pZCByZW1vdmVMb2NhbFNjaGVtZShjb25zdCBRU3RyaW5nJiBzY2hlbWUpOwogICAgIHN0YXRp
YyBRU3RyaW5nTGlzdCBsb2NhbFNjaGVtZXMoKTsKIAorICAgIHZvaWQgYWRkT3JpZ2luQWNjZXNz
V2hpdGVsaXN0RW50cnkoY29uc3QgUVN0cmluZyYgc2NoZW1lLCBjb25zdCBRU3RyaW5nJiBob3N0
LCBTdWJkb21haW5TZXR0aW5nIHN1YmRvbWFpblNldHRpbmcpOworICAgIHZvaWQgcmVtb3ZlT3Jp
Z2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgUVN0cmluZyYgc2NoZW1lLCBjb25zdCBRU3Ry
aW5nJiBob3N0LCBTdWJkb21haW5TZXR0aW5nIHN1YmRvbWFpblNldHRpbmcpOworICAgIHZvaWQg
cmVzZXRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RzKCk7CisKKyAgICBRV2ViU2VjdXJpdHlPcmlnaW4o
Y29uc3QgUVVybCYgdXJsKTsKICAgICB+UVdlYlNlY3VyaXR5T3JpZ2luKCk7CiAKICAgICBRU3Ry
aW5nIHNjaGVtZSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNlY3Vy
aXR5b3JpZ2luX3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2Vj
dXJpdHlvcmlnaW5fcC5oCShyZXZpc2lvbiAxNTE3MjkpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2Vic2VjdXJpdHlvcmlnaW5fcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBA
CiAKIGNsYXNzIFFXZWJTZWN1cml0eU9yaWdpblByaXZhdGUgOiBwdWJsaWMgUVNoYXJlZERhdGEg
ewogcHVibGljOgotICAgIFFXZWJTZWN1cml0eU9yaWdpblByaXZhdGUoV2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW4qIG8pCisgICAgUVdlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZShXVEY6OlBhc3NSZWZQ
dHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+IG8pCiAgICAgewogICAgICAgICBRX0FTU0VSVChv
KTsKICAgICAgICAgb3JpZ2luID0gbzsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcXdl
YnNlY3VyaXR5b3JpZ2luL3F3ZWJzZWN1cml0eW9yaWdpbi5wcm8KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9xdC90ZXN0cy9xd2Vic2VjdXJpdHlvcmlnaW4vcXdlYnNlY3VyaXR5b3JpZ2lu
LnBybwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcXdlYnNlY3VyaXR5
b3JpZ2luL3F3ZWJzZWN1cml0eW9yaWdpbi5wcm8JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMiBA
QAoraW5jbHVkZSguLi90ZXN0cy5wcmkpCitleGlzdHMoJCR7VEFSR0VUfS5xcmMpOlJFU09VUkNF
UyArPSAkJHtUQVJHRVR9LnFyYwpJbmRleDogU291cmNlL1dlYktpdC9xdC90ZXN0cy9xd2Vic2Vj
dXJpdHlvcmlnaW4vdHN0X3F3ZWJzZWN1cml0eW9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9xdC90ZXN0cy9xd2Vic2VjdXJpdHlvcmlnaW4vdHN0X3F3ZWJzZWN1cml0eW9y
aWdpbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3F3ZWJzZWN1
cml0eW9yaWdpbi90c3RfcXdlYnNlY3VyaXR5b3JpZ2luLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyMDIgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICAgIENvcHlyaWdodCAoQykgMjAxMyBDaXNj
byBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworCisjaW5jbHVkZSA8UURl
YnVnPgorI2luY2x1ZGUgPFFOZXR3b3JrUmVwbHk+CisjaW5jbHVkZSA8UXRUZXN0PgorI2luY2x1
ZGUgPHF3ZWJmcmFtZS5oPgorI2luY2x1ZGUgPHF3ZWJwYWdlLmg+CisjaW5jbHVkZSA8cXdlYnNl
Y3VyaXR5b3JpZ2luLmg+CisjaW5jbHVkZSA8cXdlYnZpZXcuaD4KKworY2xhc3MgdHN0X1FXZWJT
ZWN1cml0eU9yaWdpbiA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGljOgor
ICAgIHRzdF9RV2ViU2VjdXJpdHlPcmlnaW4oKTsKKyAgICB2aXJ0dWFsIH50c3RfUVdlYlNlY3Vy
aXR5T3JpZ2luKCk7CisKK3ByaXZhdGUgc2xvdHM6CisgICAgdm9pZCBpbml0KCk7CisgICAgdm9p
ZCBjbGVhbnVwKCk7CisgICAgdm9pZCB3aGl0ZUxpc3RfZGF0YSgpOworICAgIHZvaWQgd2hpdGVM
aXN0KCk7Citwcml2YXRlOgorICAgIFFXZWJWaWV3KiBtX3ZpZXc7CisgICAgUVdlYlBhZ2UqIG1f
cGFnZTsKK307CisKK3RzdF9RV2ViU2VjdXJpdHlPcmlnaW46OnRzdF9RV2ViU2VjdXJpdHlPcmln
aW4oKQoreworfQorCit0c3RfUVdlYlNlY3VyaXR5T3JpZ2luOjp+dHN0X1FXZWJTZWN1cml0eU9y
aWdpbigpCit7Cit9CisKK3ZvaWQgdHN0X1FXZWJTZWN1cml0eU9yaWdpbjo6aW5pdCgpCit7Cisg
ICAgbV92aWV3ID0gbmV3IFFXZWJWaWV3KCk7CisgICAgbV9wYWdlID0gbV92aWV3LT5wYWdlKCk7
Cit9CisKK3ZvaWQgdHN0X1FXZWJTZWN1cml0eU9yaWdpbjo6Y2xlYW51cCgpCit7CisgICAgZGVs
ZXRlIG1fdmlldzsKK30KKwordm9pZCB0c3RfUVdlYlNlY3VyaXR5T3JpZ2luOjp3aGl0ZUxpc3Rf
ZGF0YSgpCit7CisgICAgUVRlc3Q6OmFkZENvbHVtbjxRU3RyaW5nPigic291cmNlIik7CisgICAg
UVRlc3Q6OmFkZENvbHVtbjxRU3RyaW5nPigic2NoZW1lIik7CisgICAgUVRlc3Q6OmFkZENvbHVt
bjxRU3RyaW5nPigiaG9zdCIpOworICAgIFFUZXN0OjphZGRDb2x1bW48Ym9vbD4oImluY2x1ZGVT
dWJEb21haW5zIik7CisgICAgUVRlc3Q6OmFkZENvbHVtbjxRU3RyaW5nPigidGVzdFVybCIpOwor
ICAgIFFUZXN0OjphZGRDb2x1bW48Ym9vbD4oInN1Y2Nlc3NCZWZvcmVBZGQiKTsKKyAgICBRVGVz
dDo6YWRkQ29sdW1uPGJvb2w+KCJzdWNjZXNzQWZ0ZXJBZGQxIik7CisgICAgUVRlc3Q6OmFkZENv
bHVtbjxib29sPigic3VjY2Vzc0FmdGVyUmVtb3ZlIik7CisgICAgUVRlc3Q6OmFkZENvbHVtbjxi
b29sPigic3VjY2Vzc0FmdGVyQWRkMiIpOworICAgIFFUZXN0OjphZGRDb2x1bW48Ym9vbD4oInN1
Y2Nlc3NBZnRlckNsZWFyIik7CisKKyAgICBRVGVzdDo6bmV3Um93KCJzY2hlbWUiKSA8PCAiaHR0
cDovL3d3dy5zb3VyY2UuY29tIiA8PCAiaHR0cHMiIDw8ICJ3d3cudGFyZ2V0LmNvbSIgPDwgZmFs
c2UgPDwgImh0dHBzOi8vd3d3LnRhcmdldC5jb20vb3RoZXIiIDw8IGZhbHNlIDw8IHRydWUgPDwg
ZmFsc2UgPDwgdHJ1ZSA8PCBmYWxzZTsKKyAgICBRVGVzdDo6bmV3Um93KCJzY2hlbWVGYWlsIikg
PDwgImh0dHA6Ly93d3cuc291cmNlLmNvbSIgPDwgImh0dHBzIiA8PCAid3d3LnRhcmdldC5jb20i
IDw8IGZhbHNlIDw8ICJodHRwOi8vd3d3LnRhcmdldC5jb20vb3RoZXIiIDw8IGZhbHNlIDw8IGZh
bHNlIDw8IGZhbHNlIDw8IGZhbHNlIDw8IGZhbHNlOworICAgIFFUZXN0OjpuZXdSb3coInNjaGVt
ZVN1YkRvbSIpIDw8ICJodHRwOi8vd3d3LnNvdXJjZS5jb20iIDw8ICJodHRwcyIgPDwgInRhcmdl
dC5jb20iIDw8IHRydWUgPDwgImh0dHBzOi8vd3d3LnRhcmdldC5jb20vb3RoZXIiIDw8IGZhbHNl
IDw8IHRydWUgPDwgZmFsc2UgPDwgdHJ1ZSA8PCBmYWxzZTsKKyAgICBRVGVzdDo6bmV3Um93KCJz
Y2hlbWVTdWJEb21GYWlsIikgPDwgImh0dHA6Ly93d3cuc291cmNlLmNvbSIgPDwgImh0dHBzIiA8
PCAidGFyZ2V0LmNvbSIgPDwgdHJ1ZSA8PCAiaHR0cHM6Ly93d3d0YXJnZXQuY29tL290aGVyIiA8
PCBmYWxzZSA8PCBmYWxzZSA8PCBmYWxzZSA8PCBmYWxzZSA8PCBmYWxzZTsKKyAgICBRVGVzdDo6
bmV3Um93KCJzY2hlbWVTdWJEb21GYWlsIikgPDwgImh0dHA6Ly93d3cuc291cmNlLmNvbSIgPDwg
Imh0dHBzIiA8PCAidGFyZ2V0LmNvbSIgPDwgdHJ1ZSA8PCAiaHR0cDovL3d3dy50YXJnZXQuY29t
L290aGVyIiA8PCBmYWxzZSA8PCBmYWxzZSA8PCBmYWxzZSA8PCBmYWxzZSA8PCBmYWxzZTsKKyAg
ICBRVGVzdDo6bmV3Um93KCJob3N0IikgPDwgImh0dHA6Ly93d3cuc291cmNlLmNvbSIgPDwgImh0
dHAiIDw8ICJ3d3cudGFyZ2V0LmNvbSIgPDwgZmFsc2UgPDwgImh0dHA6Ly93d3cudGFyZ2V0LmNv
bS90YXJnZXQiIDw8IGZhbHNlIDw8IHRydWUgPDwgZmFsc2UgPDwgdHJ1ZSA8PCBmYWxzZTsKKyAg
ICBRVGVzdDo6bmV3Um93KCJob3N0RmFpbCIpIDw8ICJodHRwOi8vd3d3LnNvdXJjZS5jb20iIDw8
ICJodHRwIiA8PCAid3d3LnRhcmdldC5jb20iIDw8IGZhbHNlIDw8ICJodHRwOi8vd3d3Lm5ld3Rh
cmdldC5jb20iIDw8IGZhbHNlIDw8IGZhbHNlIDw8IGZhbHNlIDw8IGZhbHNlIDw8IGZhbHNlOwor
ICAgIFFUZXN0OjpuZXdSb3coImhvc3RTdWJEb20iKSA8PCAiaHR0cDovL3d3dy5zb3VyY2UuY29t
IiA8PCAiaHR0cCIgPDwgInRhcmdldC5jb20iIDw8IHRydWUgPDwgImh0dHA6Ly9hYmMyLnRhcmdl
dC5jb20iIDw8IGZhbHNlIDw8IHRydWUgPDwgZmFsc2UgPDwgdHJ1ZSA8PGZhbHNlOworICAgIFFU
ZXN0OjpuZXdSb3coImhvc3RTdWJEb21GYWlsIikgPDwgImh0dHA6Ly93d3cuc291cmNlLmNvbSIg
PDwgImh0dHAiIDw8InRhcmdldC5jb20iIDw8IHRydWUgPDwgImh0dHA6Ly9hYmMydGFyZ2V0LmNv
bSIgPDwgZmFsc2UgPDwgZmFsc2UgPDwgZmFsc2UgPDwgZmFsc2UgPDwgZmFsc2U7CisgICAgUVRl
c3Q6Om5ld1JvdygiaG9zdFN1YkRvbUZhaWxDb3VudHJ5IikgPDwgImh0dHA6Ly93d3cuc291cmNl
LmNvbSIgPDwgImh0dHAiIDw8ICJ0YXJnZXQuY29tIiA8PCB0cnVlIDw8ICJodHRwOi8vd3d3LnRh
cmdldC5jb20udHciIDw8IGZhbHNlIDw8IGZhbHNlIDw8IGZhbHNlIDw8IGZhbHNlIDw8IGZhbHNl
OworfQorCitjbGFzcyBDYW5uZWRSZXNwb25zZU5ldHdvcmtSZXBseTogcHVibGljIFFOZXR3b3Jr
UmVwbHkgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgQ2FubmVkUmVzcG9uc2VOZXR3b3Jr
UmVwbHkoUU9iamVjdCogcGFyZW50LCBRTmV0d29ya0FjY2Vzc01hbmFnZXI6Ok9wZXJhdGlvbiBv
cCwgY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiByZXEsIGNvbnN0IFFCdWZmZXImIGJvZHkpOiBRTmV0
d29ya1JlcGx5KHBhcmVudCkKKyAgICB7CisgICAgICAgIHNldFJlcXVlc3QocmVxKTsKKyAgICAg
ICAgc2V0VXJsKHJlcS51cmwoKSk7CisgICAgICAgIHNldE9wZXJhdGlvbihvcCk7CisgICAgICAg
IG1fYnVmZmVyLnNldERhdGEoYm9keS5kYXRhKCkpOworICAgICAgICBjb25uZWN0KCZtX2J1ZmZl
ciwgU0lHTkFMKHJlYWR5UmVhZCgpKSwgU0xPVChlbWl0UmVhZHlSZWFkKCkpKTsKKyAgICAgICAg
Y29ubmVjdCgmbV9idWZmZXIsIFNJR05BTChyZWFkQ2hhbm5lbEZpbmlzaGVkKCkpLCBTTE9UKGVt
aXRSZWFkQ2hhbm5lbEZpbmlzaGVkKCkpKTsKKyAgICAgICAgY29ubmVjdCgmbV9idWZmZXIsIFNJ
R05BTChyZWFkQ2hhbm5lbEZpbmlzaGVkKCkpLCBTTE9UKGVtaXRSZWFkQ2hhbm5lbEZpbmlzaGVk
KCkpKTsKKyAgICAgICAgbV9idWZmZXIub3BlbihRSU9EZXZpY2U6OlJlYWRPbmx5KTsKKyAgICAg
ICAgb3BlbihRSU9EZXZpY2U6OlJlYWRPbmx5KTsKKyAgICAgICAgUVRpbWVyOjpzaW5nbGVTaG90
KDEwLCB0aGlzLCBTTE9UKHVwZGF0ZSgpKSk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIHFpbnQ2
NCByZWFkRGF0YShjaGFyICogZGF0YSwgcWludDY0IG1heFNpemUpCisgICAgeworICAgICAgICBx
aW50NjQgcmVzdWx0ID0gbV9idWZmZXIucmVhZChkYXRhLCBtYXhTaXplKTsKKyAgICAgICAgaWYg
KCFtX2J1ZmZlci5ieXRlc0F2YWlsYWJsZSgpKQorICAgICAgICAgICAgUVRpbWVyOjpzaW5nbGVT
aG90KDEwLCB0aGlzLCBTTE9UKGVtaXRSZWFkQ2hhbm5lbEZpbmlzaGVkKCkpKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHFpbnQ2NCBieXRlc0F2YWlsYWJs
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9idWZmZXIuYnl0ZXNBdmFpbGFibGUo
KTsKKyAgICB9CisKK3ByaXZhdGUgc2xvdHM6CisgICAgdm9pZCBlbWl0UmVhZHlSZWFkKCkKKyAg
ICB7CisgICAgICAgIGVtaXQgcmVhZHlSZWFkKCk7CisgICAgfQorCisgICAgdm9pZCBlbWl0UmVh
ZENoYW5uZWxGaW5pc2hlZCgpCisgICAgeworICAgICAgICBlbWl0IHJlYWRDaGFubmVsRmluaXNo
ZWQoKTsKKyAgICAgICAgZW1pdCBmaW5pc2hlZCgpOworICAgIH0KKworICAgIHZvaWQgYWJvcnQo
KSB7IH07CisKKyAgICB2b2lkIHVwZGF0ZSgpCisgICAgeworICAgICAgICBzZXRIZWFkZXIoUU5l
dHdvcmtSZXF1ZXN0OjpDb250ZW50VHlwZUhlYWRlciwgInRleHQvcGxhaW4iKTsKKyAgICAgICAg
c2V0SGVhZGVyKFFOZXR3b3JrUmVxdWVzdDo6Q29udGVudExlbmd0aEhlYWRlciwgbV9idWZmZXIu
c2l6ZSgpKTsKKyAgICAgICAgc2V0RXJyb3IoUU5ldHdvcmtSZXBseTo6Tm9FcnJvciwgIiIpOwor
ICAgICAgICBzZXRBdHRyaWJ1dGUoUU5ldHdvcmtSZXF1ZXN0OjpIdHRwU3RhdHVzQ29kZUF0dHJp
YnV0ZSwgMjAwKTsKKyAgICAgICAgc2V0QXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6SHR0cFJl
YXNvblBocmFzZUF0dHJpYnV0ZSwgUVN0cmluZygiT2siKS50b0xhdGluMSgpKTsKKyAgICAgICAg
ZW1pdCBtZXRhRGF0YUNoYW5nZWQoKTsKKyAgICAgICAgZW1pdCByZWFkeVJlYWQoKTsKKyAgICB9
CitwdWJsaWM6CisgICAgUUJ1ZmZlciBtX2J1ZmZlcjsKK307CisKK2NsYXNzIENhbm5lZFJlc3Bv
bnNlTmV0d29ya0FjY2Vzc01hbmFnZXI6IHB1YmxpYyBRTmV0d29ya0FjY2Vzc01hbmFnZXIgewor
ICAgIFFfT0JKRUNUCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBRTmV0d29ya1JlcGx5KiBjcmVh
dGVSZXF1ZXN0KE9wZXJhdGlvbiBvcCwgY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiByZXEsIFFJT0Rl
dmljZSogb3V0Z29pbmdEYXRhID0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgQ2FubmVk
UmVzcG9uc2VOZXR3b3JrUmVwbHkodGhpcywgb3AsIHJlcSwgKm1fYnVmZmVyKTsKKyAgICB9Owor
cHVibGljOgorICAgIFFCdWZmZXIqIG1fYnVmZmVyOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIg
Y2FubmVkUmVzcG9uc2VbXSA9ICJUZXN0IjsKKwordm9pZCB0c3RfUVdlYlNlY3VyaXR5T3JpZ2lu
Ojp3aGl0ZUxpc3QoKQoreworICAgIFFGRVRDSChRU3RyaW5nLCBzb3VyY2UpOworICAgIFFGRVRD
SChRU3RyaW5nLCBzY2hlbWUpOworICAgIFFGRVRDSChRU3RyaW5nLCBob3N0KTsKKyAgICBRRkVU
Q0goYm9vbCwgaW5jbHVkZVN1YkRvbWFpbnMpOworICAgIFFGRVRDSChRU3RyaW5nLCB0ZXN0VXJs
KTsKKyAgICBRRkVUQ0goYm9vbCwgc3VjY2Vzc0JlZm9yZUFkZCk7CisgICAgUUZFVENIKGJvb2ws
IHN1Y2Nlc3NBZnRlckFkZDEpOworICAgIFFGRVRDSChib29sLCBzdWNjZXNzQWZ0ZXJSZW1vdmUp
OworICAgIFFGRVRDSChib29sLCBzdWNjZXNzQWZ0ZXJBZGQyKTsKKyAgICBRRkVUQ0goYm9vbCwg
c3VjY2Vzc0FmdGVyQ2xlYXIpOworCisgICAgUVdlYlNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBu
ZXcgUVdlYlNlY3VyaXR5T3JpZ2luKHNvdXJjZSk7CisgICAgb3JpZ2luLT5yZXNldE9yaWdpbkFj
Y2Vzc1doaXRlbGlzdHMoKTsKKyAgICBDYW5uZWRSZXNwb25zZU5ldHdvcmtBY2Nlc3NNYW5hZ2Vy
IG1hbmFnZXI7CisgICAgUUJ1ZmZlciBidWZmZXI7CisgICAgUVdlYlNlY3VyaXR5T3JpZ2luOjpT
dWJkb21haW5TZXR0aW5nIHN1YmRvbWFpblNldHRpbmcgPSBpbmNsdWRlU3ViRG9tYWlucyA/IFFX
ZWJTZWN1cml0eU9yaWdpbjo6QWxsb3dTdWJkb21haW5zIDogUVdlYlNlY3VyaXR5T3JpZ2luOjpE
aXNhbGxvd1N1YmRvbWFpbnM7CisgICAgYnVmZmVyLnNldERhdGEoY2FubmVkUmVzcG9uc2UsIHNp
emVvZihjYW5uZWRSZXNwb25zZSktMSk7CisgICAgbWFuYWdlci5tX2J1ZmZlciA9ICZidWZmZXI7
CisgICAgUUZpbGUgdGVzdFBhZ2VGaWxlKCI6L3Jlc291cmNlcy90ZXN0Lmh0bWwiKTsKKyAgICBR
VkVSSUZZKHRlc3RQYWdlRmlsZS5vcGVuKFFJT0RldmljZTo6UmVhZE9ubHkpKTsKKyAgICB1Y2hh
ciogdGVzdFBhZ2UgPSB0ZXN0UGFnZUZpbGUubWFwKDAsIHRlc3RQYWdlRmlsZS5zaXplKCkpOwor
ICAgIFFWRVJJRlkodGVzdFBhZ2UpOworICAgIG1fdmlldy0+c2V0SHRtbChRU3RyaW5nKChjb25z
dCBjaGFyKil0ZXN0UGFnZSksIFFVcmwoc291cmNlKSk7CisgICAgbV92aWV3LT5wYWdlKCktPnNl
dE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCZtYW5hZ2VyKTsKKyAgICBRU3RyaW5nIHRlc3RKUz0icnVu
VGVzdChcIiIgKyB0ZXN0VXJsICsgIlwiKSI7CisgICAgUUNPTVBBUkUobV92aWV3LT5wYWdlKCkt
Pm1haW5GcmFtZSgpLT5ldmFsdWF0ZUphdmFTY3JpcHQodGVzdEpTKSwgUVZhcmlhbnQoc3VjY2Vz
c0JlZm9yZUFkZCkpOworICAgIG9yaWdpbi0+YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnko
c2NoZW1lLCBob3N0LCBzdWJkb21haW5TZXR0aW5nKTsKKyAgICBRQ09NUEFSRShtX3ZpZXctPnBh
Z2UoKS0+bWFpbkZyYW1lKCktPmV2YWx1YXRlSmF2YVNjcmlwdCh0ZXN0SlMpLCBRVmFyaWFudChz
dWNjZXNzQWZ0ZXJBZGQxKSk7CisgICAgb3JpZ2luLT5yZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxp
c3RFbnRyeShzY2hlbWUsIGhvc3QsIHN1YmRvbWFpblNldHRpbmcpOworICAgIFFDT01QQVJFKG1f
dmlldy0+cGFnZSgpLT5tYWluRnJhbWUoKS0+ZXZhbHVhdGVKYXZhU2NyaXB0KHRlc3RKUyksIFFW
YXJpYW50KHN1Y2Nlc3NBZnRlclJlbW92ZSkpOworICAgIG9yaWdpbi0+YWRkT3JpZ2luQWNjZXNz
V2hpdGVsaXN0RW50cnkoc2NoZW1lLCBob3N0LCBzdWJkb21haW5TZXR0aW5nKTsKKyAgICBRQ09N
UEFSRShtX3ZpZXctPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmV2YWx1YXRlSmF2YVNjcmlwdCh0ZXN0
SlMpLCBRVmFyaWFudChzdWNjZXNzQWZ0ZXJBZGQyKSk7CisgICAgb3JpZ2luLT5yZXNldE9yaWdp
bkFjY2Vzc1doaXRlbGlzdHMoKTsKKyAgICBRQ09NUEFSRShtX3ZpZXctPnBhZ2UoKS0+bWFpbkZy
YW1lKCktPmV2YWx1YXRlSmF2YVNjcmlwdCh0ZXN0SlMpLCBRVmFyaWFudChzdWNjZXNzQWZ0ZXJD
bGVhcikpOworICAgIG1fdmlldy0+cGFnZSgpLT5zZXROZXR3b3JrQWNjZXNzTWFuYWdlcigwKTsK
K30KKworUVRFU1RfTUFJTih0c3RfUVdlYlNlY3VyaXR5T3JpZ2luKQorI2luY2x1ZGUgInRzdF9x
d2Vic2VjdXJpdHlvcmlnaW4ubW9jIgorCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3F3
ZWJzZWN1cml0eW9yaWdpbi90c3RfcXdlYnNlY3VyaXR5b3JpZ2luLnFyYwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3F3ZWJzZWN1cml0eW9yaWdpbi90c3RfcXdlYnNlY3Vy
aXR5b3JpZ2luLnFyYwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcXdl
YnNlY3VyaXR5b3JpZ2luL3RzdF9xd2Vic2VjdXJpdHlvcmlnaW4ucXJjCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDYgQEAKKzwhRE9DVFlQRSBSQ0M+PFJDQyB2ZXJzaW9uPSIxLjAiPgorPHFyZXNv
dXJjZT4KKyAgICA8ZmlsZT5yZXNvdXJjZXMvdGVzdC5odG1sPC9maWxlPgorPC9xcmVzb3VyY2U+
Cis8L1JDQz4KKwpJbmRleDogU291cmNlL1dlYktpdC9xdC90ZXN0cy9xd2Vic2VjdXJpdHlvcmln
aW4vcmVzb3VyY2VzL3Rlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3Rl
c3RzL3F3ZWJzZWN1cml0eW9yaWdpbi9yZXNvdXJjZXMvdGVzdC5odG1sCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYktpdC9xdC90ZXN0cy9xd2Vic2VjdXJpdHlvcmlnaW4vcmVzb3VyY2VzL3Rl
c3QuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorPCFET0NUWVBFIEhUTUwgUFVC
TElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRt
bDQvc3RyaWN0LmR0ZCI+Cis8aHRtbD4KKyAgIDxoZWFkPgorICAgICAgIDxtZXRhIGh0dHAtZXF1
aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEi
PgorICAgICAgIDx0aXRsZT5RV2ViU2VjdXJpdHlPcmlnaW4gdGVzdCBwYWdlPC90aXRsZT4KKyAg
ICAgICA8c2NyaXB0IExhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KKyAgICAgICAgICAgZnVuY3Rpb24g
cnVuVGVzdCh1cmwpCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSAi
IjsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiB0cmFjZShwb2ludCkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
IlAiKTsKKyAgICAgICAgICAgICAgICAgICAgIGVsLmlubmVySFRNTCA9IHBvaW50ICsgIjogUmVz
dWx0IGlzOlwiIiArIHJlc3VsdCArICJcIiIKKyAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJDb25zb2xlIikuYXBwZW5kQ2hpbGQoZWwpOworICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICB2YXIg
eG1saHR0cCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgICAgICAgICAgICAgICAgICAgeG1s
aHR0cC5vcGVuKCdHRVQnLHVybCwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgeG1saHR0
cC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBkb25lOworICAgICAgICAgICAgICAgICAgICAgeG1saHR0
cC5vbmVycm9yID0gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgICB4bWxodHRwLnNlbmQobnVs
bCk7CisgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB4bWxodHRwLnJlc3BvbnNlVGV4dDsK
KyAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgICAgICAgaWYg
KHJlc3VsdCA9PSAiIikgeworICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2UoIkNhdGNoMSIpOworICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2UoIkNhdGNoMiIpOwor
ICAgICAgICAgICAgICAgICB9CisgCisgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmUoKQor
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0
aCA8IDUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAiIiArIHhtbGh0dHAu
cmVhZHlTdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZSgiRG9uZTEiKTsKKyAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNl
KCJEb25lMiIpOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIGZ1bmN0aW9u
IGVycm9yKCkKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gIkZBSUxFRCI7CisgICAgICAgICAgICAgICAgICAgICB0cmFjZSgiRXJyb3IiKTsKKyAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICB0cmFjZSgiRXhpdCIpOworICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0ID09ICJUZXN0IjsKKyAgICAgICAgICAgICB9CisgICAgICAg
ICA8L3NjcmlwdD4KKyAgICAgPC9oZWFkPgorICAgICA8Ym9keT4KKyAgICAgICAgIDxpbnB1dCB0
eXBlPSJidXR0b24iIG9uY2xpY2s9ImphdmFzY3JpcHQ6YWxlcnQocnVuVGVzdCgnaHR0cDovL3d3
dy5nb29nbGUuY29tJykpIiB2YWx1ZT0iUnVuIFRlc3QiLz48YnIvPgorICAgICAgICAgPGRpdiBp
ZD0iQ29uc29sZSIvPgorICAgICA8L2JvZHk+CisgPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUK
</data>
<flag name="review"
          id="229099"
          type_id="1"
          status="-"
          setter="jturcotte"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207709</attachid>
            <date>2013-07-30 03:20:49 -0700</date>
            <delta_ts>2013-07-30 23:01:51 -0700</delta_ts>
            <desc>Modified the patch as per suggestions.</desc>
            <filename>modified_patch</filename>
            <type>text/plain</type>
            <size>17719</size>
            <attacher name="Deepjyoti Saha">deesaha</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS90ZXN0cy5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL3Rlc3RzLnByaQko
cmV2aXNpb24gMTUxNzI5KQorKysgU291cmNlL3Rlc3RzLnByaQkod29ya2luZyBjb3B5KQpAQCAt
MjAsNiArMjAsNyBAQCBTVUJESVJTICs9IFwKICAgICAkJFdFQktJVF9URVNUU19ESVIvcXdlYnZp
ZXcgXAogICAgICQkV0VCS0lUX1RFU1RTX0RJUi9xd2ViaGlzdG9yeSBcCiAgICAgJCRXRUJLSVRf
VEVTVFNfRElSL3F3ZWJpbnNwZWN0b3IgXAorICAgICQkV0VCS0lUX1RFU1RTX0RJUi9xd2Vic2Vj
dXJpdHlvcmlnaW4gXAogICAgICQkV0VCS0lUX1RFU1RTX0RJUi9oeWJyaWRQaXhtYXAKIAogbGlu
dXgtKiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gMTUyMTU2KQorKysgU291cmNlL1dl
YktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMyBAQAorMjAxMy0w
Ny0zMCAgRGVlcGp5b3RpIFNhaGEgIDxkZWVzYWhhQGNpc2NvLmNvbT4KKworICAgICAgICBbUXRd
IEFkZCBpbnRlcmZhY2UgQVBJIGZvciBvcmlnaW4gd2hpdGVsaXN0aW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTc4MjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgaW50ZXJmYWNlIEFQSXMg
aW4gUVdlYlNlY3VyaXR5T3JpZ2luIGZvciBhZGRpbmcvcmVtb3ZpbmcvcmVzZXR0aW5nIHdoaXRl
TGlzdC4KKworICAgICAgICBSZS11c2VkIG1vc3Qgb2YgdGhlIHRlc3QgY2FzZXMgd3JpdHRlbiBi
eSBDYXJvbCBTemFibyAgPGNhcm9sLnN6YWJvQG5va2lhLmNvbT4gCisgICAgICAgIGZvciBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE4NzUgYW5kIGFkZGVkIHRoZSBz
YW1lLgorCisgICAgICAgICogQXBpL3F3ZWJzZWN1cml0eW9yaWdpbi5jcHA6CisgICAgICAgIChR
V2ViU2VjdXJpdHlPcmlnaW46OmFkZEFjY2Vzc1doaXRlbGlzdEVudHJ5KToKKyAgICAgICAgKFFX
ZWJTZWN1cml0eU9yaWdpbjo6cmVtb3ZlQWNjZXNzV2hpdGVsaXN0RW50cnkpOgorICAgICAgICAo
UVdlYlNlY3VyaXR5T3JpZ2luOjpyZXNldEFsbEFjY2Vzc1doaXRlbGlzdHMpOgorICAgICAgICAq
IEFwaS9xd2Vic2VjdXJpdHlvcmlnaW4uaDoKKyAgICAgICAgKiB0ZXN0cy9xd2Vic2VjdXJpdHlv
cmlnaW46IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3F3ZWJzZWN1cml0eW9yaWdpbi9xd2Vic2Vj
dXJpdHlvcmlnaW4ucHJvOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9xd2Vic2VjdXJpdHlvcmln
aW4vcmVzb3VyY2VzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9xd2Vic2VjdXJpdHlvcmlnaW4v
cmVzb3VyY2VzL3Rlc3QuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvcXdlYnNlY3VyaXR5
b3JpZ2luL3RzdF9xd2Vic2VjdXJpdHlvcmlnaW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKHRzdF9R
V2ViU2VjdXJpdHlPcmlnaW46OnRzdF9RV2ViU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAodHN0
X1FXZWJTZWN1cml0eU9yaWdpbjo6fnRzdF9RV2ViU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAo
dHN0X1FXZWJTZWN1cml0eU9yaWdpbjo6aW5pdCk6CisgICAgICAgICh0c3RfUVdlYlNlY3VyaXR5
T3JpZ2luOjpjbGVhbnVwKToKKyAgICAgICAgKHRzdF9RV2ViU2VjdXJpdHlPcmlnaW46OndoaXRl
TGlzdF9kYXRhKToKKyAgICAgICAgKHRzdF9RV2ViU2VjdXJpdHlPcmlnaW46OndoaXRlTGlzdCk6
CisgICAgICAgICogdGVzdHMvcXdlYnNlY3VyaXR5b3JpZ2luL3RzdF9xd2Vic2VjdXJpdHlvcmln
aW4ucXJjOiBBZGRlZC4KKwogMjAxMy0wNi0yNyAgS2FuZ2lsIEhhbiAgPGthbmdpbC5oYW5Ac2Ft
c3VuZy5jb20+CiAKICAgICAgICAgQWRvcHQgaXMvdG9IVE1MSW5wdXRFbGVtZW50IGZvciBjb2Rl
IGNsZWFudXAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZWN1cml0eW9yaWdpbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNlY3VyaXR5b3JpZ2lu
LmNwcAkocmV2aXNpb24gMTUxNzI5KQorKysgU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNlY3Vy
aXR5b3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUg
IktVUkwuaCIKICNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlNlY3VyaXR5
T3JpZ2luLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRlICJxd2ViZGF0
YWJhc2UuaCIKICNpbmNsdWRlICJxd2ViZGF0YWJhc2VfcC5oIgogI2luY2x1ZGUgInF3ZWJzZWN1
cml0eW9yaWdpbl9wLmgiCkBAIC0yNjUsMyArMjY2LDUyIEBAIFFTdHJpbmdMaXN0IFFXZWJTZWN1
cml0eU9yaWdpbjo6bG9jYWxTY2gKICAgICB9CiAgICAgcmV0dXJuIGxpc3Q7CiB9CisKKworLyoh
CisgICAgQWxsb3dzIGNvbnRydWN0aW9uIG9mIFFXZWJTZWN1cml0eU9yaWdpbigpIGFzIHBlciB0
aGUgc3BlY2lmaWVkIFxhIHVybC4KKyovCitRV2ViU2VjdXJpdHlPcmlnaW46OlFXZWJTZWN1cml0
eU9yaWdpbihjb25zdCBRVXJsJiB1cmwpCit7CisgICAgZCA9IG5ldyBRV2ViU2VjdXJpdHlPcmln
aW5Qcml2YXRlKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUoS1VSTCh1cmwpKSk7Cit9CisKKworLyoh
CisgICAgQWxsb3dzIHRoZSBvcmlnaW4gdG8gYWNjZXNzIHRoZSBzcGVjaWZpZWQgXGEgaG9zdCB1
c2luZyB0aGUgc3BlY2lmaWVkIFxhIHNjaGVtZS4KKyAgICBTcGVjaWZ5aW5nIEFsbG93U3ViZG9t
YWlucyBpbiBcYSBzdWJkb21haW5TZXR0aW5nIHdpbGwgYWxsb3cgdGhlIHNvdXJjZSBvcmlnaW4g
dG8gYWNjZXNzCisgICAgdGhlIFxhIGhvc3QncyBzdWJkb21haW5zIGFzIHdlbGwsIHdoZXJlYXMg
cGFzc2luZyBEaXNhbGxvd1N1YmRvbWFpbnMgd291bGQgcHJldmVudCB0aGlzLgorICAgIAorICAg
IFN1Y2ggY3Jvc3Mgb3JpZ2luIHJlcXVlc3RzIGFyZSBvdGhlcndpc2UgcmVzdHJpY3RlZCBhcyBw
ZXIgdGhlIHNhbWUtb3JpZ2luLXBvbGljeS4KKyovCit2b2lkIFFXZWJTZWN1cml0eU9yaWdpbjo6
YWRkQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgUVN0cmluZyYgc2NoZW1lLCBjb25zdCBRU3Ry
aW5nJiBob3N0LCBTdWJkb21haW5TZXR0aW5nIHN1YmRvbWFpblNldHRpbmcpCit7CisgICAgU2Vj
dXJpdHlQb2xpY3k6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KCooZC0+b3JpZ2luKSwg
c2NoZW1lLCBob3N0LCBzdWJkb21haW5TZXR0aW5nID09IEFsbG93U3ViZG9tYWlucyk7Cit9CisK
Ky8qIQorICAgIFJlbW92ZXMgdGhlIHdoaXRlbGlzdGVkIGFjY2VzcyBmb3IgYW4gb3JpZ2luIHRv
IHRoZSBzcGVjaWZpZWQgXGEgaG9zdCB1c2luZyB0aGUgc3BlY2lmaWVkIFxhIHNjaGVtZS4KKyAg
ICBQYXNzaW5nIEFsbG93U3ViZG9tYWlucyBpbiBcYSBzdWJkb21haW5TZXR0aW5nIHdpbGwgYWxs
b3cgdGhlIHNvdXJjZSBvcmlnaW4gdG8gYWNjZXNzCisgICAgdGhlIFxhIGhvc3QncyBzdWJkb21h
aW5zIGFzIHdlbGwsIHdoZXJlYXMgcGFzc2luZyBEaXNhbGxvd1N1YmRvbWFpbnMgd291bGQgcHJl
dmVudCB0aGlzLgorKi8KK3ZvaWQgUVdlYlNlY3VyaXR5T3JpZ2luOjpyZW1vdmVBY2Nlc3NXaGl0
ZWxpc3RFbnRyeShjb25zdCBRU3RyaW5nJiBzY2hlbWUsIGNvbnN0IFFTdHJpbmcmIGhvc3QsIFN1
YmRvbWFpblNldHRpbmcgc3ViZG9tYWluU2V0dGluZykKK3sKKyAgICBTZWN1cml0eVBvbGljeTo6
cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoKihkLT5vcmlnaW4pLCBzY2hlbWUsIGhv
c3QsIHN1YmRvbWFpblNldHRpbmcgPT0gQWxsb3dTdWJkb21haW5zKTsKK30KKworLyohCisgICAg
QWxsb3dzIHJlc2V0aW5nIHRoZSB3aGl0ZWxpc3Qgd2hpY2ggYWxsb3dzIGFjY2VzcyB0byBzcGVj
aWZpZWQgaG9zdHMgYmV5b25kIHRoZSBzYW1lLW9yaWdpbi1wb2xpY3kuCisqLwordm9pZCBRV2Vi
U2VjdXJpdHlPcmlnaW46OnJlc2V0QWxsQWNjZXNzV2hpdGVsaXN0cygpCit7CisgICAgU2VjdXJp
dHlQb2xpY3k6OnJlc2V0T3JpZ2luQWNjZXNzV2hpdGVsaXN0cygpOworfQorCisKKwpJbmRleDog
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNlY3VyaXR5b3JpZ2luLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNlY3VyaXR5b3JpZ2luLmgJKHJldmlzaW9uIDE1MTcy
OSkKKysrIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZWN1cml0eW9yaWdpbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiwxMSArMzYsMjEgQEAgY2xhc3MgUVdlYkZyYW1lOwogCiBjbGFzcyBRV0VC
S0lUX0VYUE9SVCBRV2ViU2VjdXJpdHlPcmlnaW4gewogcHVibGljOgorICAgIGVudW0gU3ViZG9t
YWluU2V0dGluZyB7CisgICAgICAgIEFsbG93U3ViZG9tYWlucywKKyAgICAgICAgRGlzYWxsb3dT
dWJkb21haW5zCisgICAgfTsKKyAgICAKICAgICBzdGF0aWMgUUxpc3Q8UVdlYlNlY3VyaXR5T3Jp
Z2luPiBhbGxPcmlnaW5zKCk7CiAgICAgc3RhdGljIHZvaWQgYWRkTG9jYWxTY2hlbWUoY29uc3Qg
UVN0cmluZyYgc2NoZW1lKTsKICAgICBzdGF0aWMgdm9pZCByZW1vdmVMb2NhbFNjaGVtZShjb25z
dCBRU3RyaW5nJiBzY2hlbWUpOwogICAgIHN0YXRpYyBRU3RyaW5nTGlzdCBsb2NhbFNjaGVtZXMo
KTsKIAorICAgIHZvaWQgYWRkQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgUVN0cmluZyYgc2No
ZW1lLCBjb25zdCBRU3RyaW5nJiBob3N0LCBTdWJkb21haW5TZXR0aW5nIHN1YmRvbWFpblNldHRp
bmcpOworICAgIHZvaWQgcmVtb3ZlQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgUVN0cmluZyYg
c2NoZW1lLCBjb25zdCBRU3RyaW5nJiBob3N0LCBTdWJkb21haW5TZXR0aW5nIHN1YmRvbWFpblNl
dHRpbmcpOworICAgIHN0YXRpYyB2b2lkIHJlc2V0QWxsQWNjZXNzV2hpdGVsaXN0cygpOworCisg
ICAgZXhwbGljaXQgUVdlYlNlY3VyaXR5T3JpZ2luKGNvbnN0IFFVcmwmIHVybCk7CiAgICAgflFX
ZWJTZWN1cml0eU9yaWdpbigpOwogCiAgICAgUVN0cmluZyBzY2hlbWUoKSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZWN1cml0eW9yaWdpbl9wLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNlY3VyaXR5b3JpZ2luX3AuaAkocmV2aXNpb24g
MTUxNzI5KQorKysgU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNlY3VyaXR5b3JpZ2luX3AuaAko
d29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogCiBjbGFzcyBRV2ViU2VjdXJpdHlPcmln
aW5Qcml2YXRlIDogcHVibGljIFFTaGFyZWREYXRhIHsKIHB1YmxpYzoKLSAgICBRV2ViU2VjdXJp
dHlPcmlnaW5Qcml2YXRlKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiBvKQorICAgIFFXZWJTZWN1
cml0eU9yaWdpblByaXZhdGUoV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
PiBvKQogICAgIHsKICAgICAgICAgUV9BU1NFUlQobyk7CiAgICAgICAgIG9yaWdpbiA9IG87Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3F3ZWJzZWN1cml0eW9yaWdpbi9xd2Vic2VjdXJp
dHlvcmlnaW4ucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcXdlYnNl
Y3VyaXR5b3JpZ2luL3F3ZWJzZWN1cml0eW9yaWdpbi5wcm8JKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViS2l0L3F0L3Rlc3RzL3F3ZWJzZWN1cml0eW9yaWdpbi9xd2Vic2VjdXJpdHlvcmlnaW4u
cHJvCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKK2luY2x1ZGUoLi4vdGVzdHMucHJpKQor
ZXhpc3RzKCQke1RBUkdFVH0ucXJjKTpSRVNPVVJDRVMgKz0gJCR7VEFSR0VUfS5xcmMKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcXdlYnNlY3VyaXR5b3JpZ2luL3RzdF9xd2Vic2VjdXJp
dHlvcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcXdlYnNl
Y3VyaXR5b3JpZ2luL3RzdF9xd2Vic2VjdXJpdHlvcmlnaW4uY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYktpdC9xdC90ZXN0cy9xd2Vic2VjdXJpdHlvcmlnaW4vdHN0X3F3ZWJzZWN1cml0
eW9yaWdpbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICAgIENvcHly
aWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTMgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyovCisKKworI2luY2x1ZGUgPFFEZWJ1Zz4KKyNpbmNsdWRlIDxRTmV0d29ya1Jl
cGx5PgorI2luY2x1ZGUgPFF0VGVzdD4KKyNpbmNsdWRlIDxxd2ViZnJhbWUuaD4KKyNpbmNsdWRl
IDxxd2VicGFnZS5oPgorI2luY2x1ZGUgPHF3ZWJzZWN1cml0eW9yaWdpbi5oPgorI2luY2x1ZGUg
PHF3ZWJ2aWV3Lmg+CisKK2NsYXNzIHRzdF9RV2ViU2VjdXJpdHlPcmlnaW4gOiBwdWJsaWMgUU9i
amVjdCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICB0c3RfUVdlYlNlY3VyaXR5T3JpZ2lu
KCk7CisgICAgdmlydHVhbCB+dHN0X1FXZWJTZWN1cml0eU9yaWdpbigpOworCitwcml2YXRlIHNs
b3RzOgorICAgIHZvaWQgaW5pdCgpOworICAgIHZvaWQgY2xlYW51cCgpOworICAgIHZvaWQgd2hp
dGVMaXN0X2RhdGEoKTsKKyAgICB2b2lkIHdoaXRlTGlzdCgpOworcHJpdmF0ZToKKyAgICBRV2Vi
VmlldyogbV92aWV3OworICAgIFFXZWJQYWdlKiBtX3BhZ2U7Cit9OworCit0c3RfUVdlYlNlY3Vy
aXR5T3JpZ2luOjp0c3RfUVdlYlNlY3VyaXR5T3JpZ2luKCkKK3sKK30KKwordHN0X1FXZWJTZWN1
cml0eU9yaWdpbjo6fnRzdF9RV2ViU2VjdXJpdHlPcmlnaW4oKQoreworfQorCit2b2lkIHRzdF9R
V2ViU2VjdXJpdHlPcmlnaW46OmluaXQoKQoreworICAgIG1fdmlldyA9IG5ldyBRV2ViVmlldygp
OworICAgIG1fcGFnZSA9IG1fdmlldy0+cGFnZSgpOworfQorCit2b2lkIHRzdF9RV2ViU2VjdXJp
dHlPcmlnaW46OmNsZWFudXAoKQoreworICAgIGRlbGV0ZSBtX3ZpZXc7Cit9CisKK3ZvaWQgdHN0
X1FXZWJTZWN1cml0eU9yaWdpbjo6d2hpdGVMaXN0X2RhdGEoKQoreworICAgIFFUZXN0OjphZGRD
b2x1bW48UVN0cmluZz4oInNvdXJjZSIpOworICAgIFFUZXN0OjphZGRDb2x1bW48UVN0cmluZz4o
InNjaGVtZSIpOworICAgIFFUZXN0OjphZGRDb2x1bW48UVN0cmluZz4oImhvc3QiKTsKKyAgICBR
VGVzdDo6YWRkQ29sdW1uPGJvb2w+KCJpbmNsdWRlU3ViRG9tYWlucyIpOworICAgIFFUZXN0Ojph
ZGRDb2x1bW48UVN0cmluZz4oInRlc3RVcmwiKTsKKyAgICBRVGVzdDo6YWRkQ29sdW1uPGJvb2w+
KCJzdWNjZXNzQmVmb3JlQWRkIik7CisgICAgUVRlc3Q6OmFkZENvbHVtbjxib29sPigic3VjY2Vz
c0FmdGVyQWRkMSIpOworICAgIFFUZXN0OjphZGRDb2x1bW48Ym9vbD4oInN1Y2Nlc3NBZnRlclJl
bW92ZSIpOworICAgIFFUZXN0OjphZGRDb2x1bW48Ym9vbD4oInN1Y2Nlc3NBZnRlckFkZDIiKTsK
KyAgICBRVGVzdDo6YWRkQ29sdW1uPGJvb2w+KCJzdWNjZXNzQWZ0ZXJDbGVhciIpOworCisgICAg
UVRlc3Q6Om5ld1Jvdygic2NoZW1lIikgPDwgImh0dHA6Ly93d3cuc291cmNlLmNvbSIgPDwgImh0
dHBzIiA8PCAid3d3LnRhcmdldC5jb20iIDw8IGZhbHNlIDw8ICJodHRwczovL3d3dy50YXJnZXQu
Y29tL290aGVyIiA8PCBmYWxzZSA8PCB0cnVlIDw8IGZhbHNlIDw8IHRydWUgPDwgZmFsc2U7Cisg
ICAgUVRlc3Q6Om5ld1Jvdygic2NoZW1lRmFpbCIpIDw8ICJodHRwOi8vd3d3LnNvdXJjZS5jb20i
IDw8ICJodHRwcyIgPDwgInd3dy50YXJnZXQuY29tIiA8PCBmYWxzZSA8PCAiaHR0cDovL3d3dy50
YXJnZXQuY29tL290aGVyIiA8PCBmYWxzZSA8PCBmYWxzZSA8PCBmYWxzZSA8PCBmYWxzZSA8PCBm
YWxzZTsKKyAgICBRVGVzdDo6bmV3Um93KCJzY2hlbWVTdWJEb20iKSA8PCAiaHR0cDovL3d3dy5z
b3VyY2UuY29tIiA8PCAiaHR0cHMiIDw8ICJ0YXJnZXQuY29tIiA8PCB0cnVlIDw8ICJodHRwczov
L3d3dy50YXJnZXQuY29tL290aGVyIiA8PCBmYWxzZSA8PCB0cnVlIDw8IGZhbHNlIDw8IHRydWUg
PDwgZmFsc2U7CisgICAgUVRlc3Q6Om5ld1Jvdygic2NoZW1lU3ViRG9tRmFpbCIpIDw8ICJodHRw
Oi8vd3d3LnNvdXJjZS5jb20iIDw8ICJodHRwcyIgPDwgInRhcmdldC5jb20iIDw8IHRydWUgPDwg
Imh0dHBzOi8vd3d3dGFyZ2V0LmNvbS9vdGhlciIgPDwgZmFsc2UgPDwgZmFsc2UgPDwgZmFsc2Ug
PDwgZmFsc2UgPDwgZmFsc2U7CisgICAgUVRlc3Q6Om5ld1Jvdygic2NoZW1lU3ViRG9tRmFpbCIp
IDw8ICJodHRwOi8vd3d3LnNvdXJjZS5jb20iIDw8ICJodHRwcyIgPDwgInRhcmdldC5jb20iIDw8
IHRydWUgPDwgImh0dHA6Ly93d3cudGFyZ2V0LmNvbS9vdGhlciIgPDwgZmFsc2UgPDwgZmFsc2Ug
PDwgZmFsc2UgPDwgZmFsc2UgPDwgZmFsc2U7CisgICAgUVRlc3Q6Om5ld1JvdygiaG9zdCIpIDw8
ICJodHRwOi8vd3d3LnNvdXJjZS5jb20iIDw8ICJodHRwIiA8PCAid3d3LnRhcmdldC5jb20iIDw8
IGZhbHNlIDw8ICJodHRwOi8vd3d3LnRhcmdldC5jb20vdGFyZ2V0IiA8PCBmYWxzZSA8PCB0cnVl
IDw8IGZhbHNlIDw8IHRydWUgPDwgZmFsc2U7CisgICAgUVRlc3Q6Om5ld1JvdygiaG9zdEZhaWwi
KSA8PCAiaHR0cDovL3d3dy5zb3VyY2UuY29tIiA8PCAiaHR0cCIgPDwgInd3dy50YXJnZXQuY29t
IiA8PCBmYWxzZSA8PCAiaHR0cDovL3d3dy5uZXd0YXJnZXQuY29tIiA8PCBmYWxzZSA8PCBmYWxz
ZSA8PCBmYWxzZSA8PCBmYWxzZSA8PCBmYWxzZTsKKyAgICBRVGVzdDo6bmV3Um93KCJob3N0U3Vi
RG9tIikgPDwgImh0dHA6Ly93d3cuc291cmNlLmNvbSIgPDwgImh0dHAiIDw8ICJ0YXJnZXQuY29t
IiA8PCB0cnVlIDw8ICJodHRwOi8vd3d3Lm5ldy50YXJnZXQuY29tIiA8PCBmYWxzZSA8PCB0cnVl
IDw8IGZhbHNlIDw8IHRydWUgPDwgZmFsc2U7CisgICAgUVRlc3Q6Om5ld1JvdygiaG9zdFN1YkRv
bUZhaWwiKSA8PCAiaHR0cDovL3d3dy5zb3VyY2UuY29tIiA8PCAiaHR0cCIgPDwgInRhcmdldC5j
b20iIDw8IGZhbHNlIDw8ICJodHRwOi8vd3d3Lm5ldy50YXJnZXQuY29tIiA8PCBmYWxzZSA8PCBm
YWxzZSA8PCBmYWxzZSA8PCBmYWxzZSA8PCBmYWxzZTsKKyAgICBRVGVzdDo6bmV3Um93KCJob3N0
U3ViRG9tRmFpbENvdW50cnkiKSA8PCAiaHR0cDovL3d3dy5zb3VyY2UuY29tIiA8PCAiaHR0cCIg
PDwgInRhcmdldC5jb20iIDw8IHRydWUgPDwgImh0dHA6Ly93d3cudGFyZ2V0LmNvbS50dyIgPDwg
ZmFsc2UgPDwgZmFsc2UgPDwgZmFsc2UgPDwgZmFsc2UgPDwgZmFsc2U7Cit9CisKK2NsYXNzIENh
bm5lZFJlc3BvbnNlTmV0d29ya1JlcGx5OiBwdWJsaWMgUU5ldHdvcmtSZXBseSB7CisgICAgUV9P
QkpFQ1QKK3B1YmxpYzoKKyAgICBDYW5uZWRSZXNwb25zZU5ldHdvcmtSZXBseShRT2JqZWN0KiBw
YXJlbnQsIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6T3BlcmF0aW9uIG9wLCBjb25zdCBRTmV0d29y
a1JlcXVlc3QmIHJlcSwgY29uc3QgUUJ1ZmZlciYgYm9keSk6IFFOZXR3b3JrUmVwbHkocGFyZW50
KQorICAgIHsKKyAgICAgICAgc2V0UmVxdWVzdChyZXEpOworICAgICAgICBzZXRVcmwocmVxLnVy
bCgpKTsKKyAgICAgICAgc2V0T3BlcmF0aW9uKG9wKTsKKyAgICAgICAgbV9idWZmZXIuc2V0RGF0
YShib2R5LmRhdGEoKSk7CisgICAgICAgIGNvbm5lY3QoJm1fYnVmZmVyLCBTSUdOQUwocmVhZHlS
ZWFkKCkpLCBTTE9UKGVtaXRSZWFkeVJlYWQoKSkpOworICAgICAgICBjb25uZWN0KCZtX2J1ZmZl
ciwgU0lHTkFMKHJlYWRDaGFubmVsRmluaXNoZWQoKSksIFNMT1QoZW1pdFJlYWRDaGFubmVsRmlu
aXNoZWQoKSkpOworICAgICAgICBjb25uZWN0KCZtX2J1ZmZlciwgU0lHTkFMKHJlYWRDaGFubmVs
RmluaXNoZWQoKSksIFNMT1QoZW1pdFJlYWRDaGFubmVsRmluaXNoZWQoKSkpOworICAgICAgICBt
X2J1ZmZlci5vcGVuKFFJT0RldmljZTo6UmVhZE9ubHkpOworICAgICAgICBvcGVuKFFJT0Rldmlj
ZTo6UmVhZE9ubHkpOworICAgICAgICBRVGltZXI6OnNpbmdsZVNob3QoMTAsIHRoaXMsIFNMT1Qo
dXBkYXRlKCkpKTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgcWludDY0IHJlYWREYXRhKGNoYXIg
KiBkYXRhLCBxaW50NjQgbWF4U2l6ZSkKKyAgICB7CisgICAgICAgIHFpbnQ2NCByZXN1bHQgPSBt
X2J1ZmZlci5yZWFkKGRhdGEsIG1heFNpemUpOworICAgICAgICBpZiAoIW1fYnVmZmVyLmJ5dGVz
QXZhaWxhYmxlKCkpCisgICAgICAgICAgICBRVGltZXI6OnNpbmdsZVNob3QoMTAsIHRoaXMsIFNM
T1QoZW1pdFJlYWRDaGFubmVsRmluaXNoZWQoKSkpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICAgIHZpcnR1YWwgcWludDY0IGJ5dGVzQXZhaWxhYmxlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2J1ZmZlci5ieXRlc0F2YWlsYWJsZSgpOworICAgIH0KKworcHJp
dmF0ZSBzbG90czoKKyAgICB2b2lkIGVtaXRSZWFkeVJlYWQoKQorICAgIHsKKyAgICAgICAgZW1p
dCByZWFkeVJlYWQoKTsKKyAgICB9CisKKyAgICB2b2lkIGVtaXRSZWFkQ2hhbm5lbEZpbmlzaGVk
KCkKKyAgICB7CisgICAgICAgIGVtaXQgcmVhZENoYW5uZWxGaW5pc2hlZCgpOworICAgICAgICBl
bWl0IGZpbmlzaGVkKCk7CisgICAgfQorCisgICAgdm9pZCBhYm9ydCgpIHsgfTsKKworICAgIHZv
aWQgdXBkYXRlKCkKKyAgICB7CisgICAgICAgIHNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6OkNv
bnRlbnRUeXBlSGVhZGVyLCAidGV4dC9wbGFpbiIpOworICAgICAgICBzZXRIZWFkZXIoUU5ldHdv
cmtSZXF1ZXN0OjpDb250ZW50TGVuZ3RoSGVhZGVyLCBtX2J1ZmZlci5zaXplKCkpOworICAgICAg
ICBzZXRFcnJvcihRTmV0d29ya1JlcGx5OjpOb0Vycm9yLCAiIik7CisgICAgICAgIHNldEF0dHJp
YnV0ZShRTmV0d29ya1JlcXVlc3Q6Okh0dHBTdGF0dXNDb2RlQXR0cmlidXRlLCAyMDApOworICAg
ICAgICBzZXRBdHRyaWJ1dGUoUU5ldHdvcmtSZXF1ZXN0OjpIdHRwUmVhc29uUGhyYXNlQXR0cmli
dXRlLCBRU3RyaW5nKCJPayIpLnRvTGF0aW4xKCkpOworICAgICAgICBlbWl0IG1ldGFEYXRhQ2hh
bmdlZCgpOworICAgICAgICBlbWl0IHJlYWR5UmVhZCgpOworICAgIH0KK3B1YmxpYzoKKyAgICBR
QnVmZmVyIG1fYnVmZmVyOworfTsKKworY2xhc3MgQ2FubmVkUmVzcG9uc2VOZXR3b3JrQWNjZXNz
TWFuYWdlcjogcHVibGljIFFOZXR3b3JrQWNjZXNzTWFuYWdlciB7CisgICAgUV9PQkpFQ1QKK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIFFOZXR3b3JrUmVwbHkqIGNyZWF0ZVJlcXVlc3QoT3BlcmF0
aW9uIG9wLCBjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJlcSwgUUlPRGV2aWNlKiBvdXRnb2luZ0Rh
dGEgPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDYW5uZWRSZXNwb25zZU5ldHdvcmtS
ZXBseSh0aGlzLCBvcCwgcmVxLCAqbV9idWZmZXIpOworICAgIH07CitwdWJsaWM6CisgICAgUUJ1
ZmZlciogbV9idWZmZXI7Cit9OworCitzdGF0aWMgY29uc3QgY2hhciBjYW5uZWRSZXNwb25zZVtd
ID0gIlRlc3QiOworCit2b2lkIHRzdF9RV2ViU2VjdXJpdHlPcmlnaW46OndoaXRlTGlzdCgpCit7
CisgICAgUUZFVENIKFFTdHJpbmcsIHNvdXJjZSk7CisgICAgUUZFVENIKFFTdHJpbmcsIHNjaGVt
ZSk7CisgICAgUUZFVENIKFFTdHJpbmcsIGhvc3QpOworICAgIFFGRVRDSChib29sLCBpbmNsdWRl
U3ViRG9tYWlucyk7CisgICAgUUZFVENIKFFTdHJpbmcsIHRlc3RVcmwpOworICAgIFFGRVRDSChi
b29sLCBzdWNjZXNzQmVmb3JlQWRkKTsKKyAgICBRRkVUQ0goYm9vbCwgc3VjY2Vzc0FmdGVyQWRk
MSk7CisgICAgUUZFVENIKGJvb2wsIHN1Y2Nlc3NBZnRlclJlbW92ZSk7CisgICAgUUZFVENIKGJv
b2wsIHN1Y2Nlc3NBZnRlckFkZDIpOworICAgIFFGRVRDSChib29sLCBzdWNjZXNzQWZ0ZXJDbGVh
cik7CisKKyAgICBRV2ViU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IG5ldyBRV2ViU2VjdXJpdHlP
cmlnaW4oc291cmNlKTsKKyAgICBRV2ViU2VjdXJpdHlPcmlnaW46OnJlc2V0QWxsQWNjZXNzV2hp
dGVsaXN0cygpOworICAgIENhbm5lZFJlc3BvbnNlTmV0d29ya0FjY2Vzc01hbmFnZXIgbWFuYWdl
cjsKKyAgICBRQnVmZmVyIGJ1ZmZlcjsKKyAgICBRV2ViU2VjdXJpdHlPcmlnaW46OlN1YmRvbWFp
blNldHRpbmcgc3ViZG9tYWluU2V0dGluZyA9IGluY2x1ZGVTdWJEb21haW5zID8gUVdlYlNlY3Vy
aXR5T3JpZ2luOjpBbGxvd1N1YmRvbWFpbnMgOiBRV2ViU2VjdXJpdHlPcmlnaW46OkRpc2FsbG93
U3ViZG9tYWluczsKKyAgICBidWZmZXIuc2V0RGF0YShjYW5uZWRSZXNwb25zZSwgc2l6ZW9mKGNh
bm5lZFJlc3BvbnNlKS0xKTsKKyAgICBtYW5hZ2VyLm1fYnVmZmVyID0gJmJ1ZmZlcjsKKyAgICBR
RmlsZSB0ZXN0UGFnZUZpbGUoIjovcmVzb3VyY2VzL3Rlc3QuaHRtbCIpOworICAgIFFWRVJJRlko
dGVzdFBhZ2VGaWxlLm9wZW4oUUlPRGV2aWNlOjpSZWFkT25seSkpOworICAgIHVjaGFyKiB0ZXN0
UGFnZSA9IHRlc3RQYWdlRmlsZS5tYXAoMCwgdGVzdFBhZ2VGaWxlLnNpemUoKSk7CisgICAgUVZF
UklGWSh0ZXN0UGFnZSk7CisgICAgbV92aWV3LT5zZXRIdG1sKFFTdHJpbmcoKGNvbnN0IGNoYXIq
KXRlc3RQYWdlKSwgUVVybChzb3VyY2UpKTsKKyAgICBtX3ZpZXctPnBhZ2UoKS0+c2V0TmV0d29y
a0FjY2Vzc01hbmFnZXIoJm1hbmFnZXIpOworICAgIFFTdHJpbmcgdGVzdEpTPSJydW5UZXN0KFwi
IiArIHRlc3RVcmwgKyAiXCIpIjsKKyAgICBRQ09NUEFSRShtX3ZpZXctPnBhZ2UoKS0+bWFpbkZy
YW1lKCktPmV2YWx1YXRlSmF2YVNjcmlwdCh0ZXN0SlMpLCBRVmFyaWFudChzdWNjZXNzQmVmb3Jl
QWRkKSk7CisgICAgb3JpZ2luLT5hZGRBY2Nlc3NXaGl0ZWxpc3RFbnRyeShzY2hlbWUsIGhvc3Qs
IHN1YmRvbWFpblNldHRpbmcpOworICAgIFFDT01QQVJFKG1fdmlldy0+cGFnZSgpLT5tYWluRnJh
bWUoKS0+ZXZhbHVhdGVKYXZhU2NyaXB0KHRlc3RKUyksIFFWYXJpYW50KHN1Y2Nlc3NBZnRlckFk
ZDEpKTsKKyAgICBvcmlnaW4tPnJlbW92ZUFjY2Vzc1doaXRlbGlzdEVudHJ5KHNjaGVtZSwgaG9z
dCwgc3ViZG9tYWluU2V0dGluZyk7CisgICAgUUNPTVBBUkUobV92aWV3LT5wYWdlKCktPm1haW5G
cmFtZSgpLT5ldmFsdWF0ZUphdmFTY3JpcHQodGVzdEpTKSwgUVZhcmlhbnQoc3VjY2Vzc0FmdGVy
UmVtb3ZlKSk7CisgICAgb3JpZ2luLT5hZGRBY2Nlc3NXaGl0ZWxpc3RFbnRyeShzY2hlbWUsIGhv
c3QsIHN1YmRvbWFpblNldHRpbmcpOworICAgIFFDT01QQVJFKG1fdmlldy0+cGFnZSgpLT5tYWlu
RnJhbWUoKS0+ZXZhbHVhdGVKYXZhU2NyaXB0KHRlc3RKUyksIFFWYXJpYW50KHN1Y2Nlc3NBZnRl
ckFkZDIpKTsKKyAgICBRV2ViU2VjdXJpdHlPcmlnaW46OnJlc2V0QWxsQWNjZXNzV2hpdGVsaXN0
cygpOworICAgIFFDT01QQVJFKG1fdmlldy0+cGFnZSgpLT5tYWluRnJhbWUoKS0+ZXZhbHVhdGVK
YXZhU2NyaXB0KHRlc3RKUyksIFFWYXJpYW50KHN1Y2Nlc3NBZnRlckNsZWFyKSk7CisgICAgbV92
aWV3LT5wYWdlKCktPnNldE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKDApOworfQorCitRVEVTVF9NQUlO
KHRzdF9RV2ViU2VjdXJpdHlPcmlnaW4pCisjaW5jbHVkZSAidHN0X3F3ZWJzZWN1cml0eW9yaWdp
bi5tb2MiCisKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcXdlYnNlY3VyaXR5b3JpZ2lu
L3RzdF9xd2Vic2VjdXJpdHlvcmlnaW4ucXJjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
cXQvdGVzdHMvcXdlYnNlY3VyaXR5b3JpZ2luL3RzdF9xd2Vic2VjdXJpdHlvcmlnaW4ucXJjCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC90ZXN0cy9xd2Vic2VjdXJpdHlvcmlnaW4v
dHN0X3F3ZWJzZWN1cml0eW9yaWdpbi5xcmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNiBAQAor
PCFET0NUWVBFIFJDQz48UkNDIHZlcnNpb249IjEuMCI+Cis8cXJlc291cmNlPgorICAgIDxmaWxl
PnJlc291cmNlcy90ZXN0Lmh0bWw8L2ZpbGU+Cis8L3FyZXNvdXJjZT4KKzwvUkNDPgorCkluZGV4
OiBTb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3F3ZWJzZWN1cml0eW9yaWdpbi9yZXNvdXJjZXMvdGVz
dC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcXdlYnNlY3VyaXR5
b3JpZ2luL3Jlc291cmNlcy90ZXN0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0
L3F0L3Rlc3RzL3F3ZWJzZWN1cml0eW9yaWdpbi9yZXNvdXJjZXMvdGVzdC5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDUzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFRE
IEhUTUwgNC4wMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9zdHJpY3QuZHRkIj4K
KzxodG1sPgorICAgPGhlYWQ+CisgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBl
IiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+CisgICAgICAgPHRpdGxl
PlFXZWJTZWN1cml0eU9yaWdpbiB0ZXN0IHBhZ2U8L3RpdGxlPgorICAgICAgIDxzY3JpcHQgTGFu
Z3VhZ2U9IkphdmFTY3JpcHQiPgorICAgICAgICAgICBmdW5jdGlvbiBydW5UZXN0KHVybCkKKyAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9ICIiOworICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uIHRyYWNlKHBvaW50KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOworICAgICAgICAg
ICAgICAgICAgICAgZWwuaW5uZXJIVE1MID0gcG9pbnQgKyAiOiBSZXN1bHQgaXM6XCIiICsgcmVz
dWx0ICsgIlwiIgorICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
IkNvbnNvbGUiKS5hcHBlbmRDaGlsZChlbCk7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgIHZhciB4bWxodHRwID0gbmV3IFhN
TEh0dHBSZXF1ZXN0KCk7CisgICAgICAgICAgICAgICAgICAgICB4bWxodHRwLm9wZW4oJ0dFVCcs
dXJsLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICB4bWxodHRwLm9ucmVhZHlzdGF0ZWNo
YW5nZSA9IGRvbmU7CisgICAgICAgICAgICAgICAgICAgICB4bWxodHRwLm9uZXJyb3IgPSBlcnJv
cjsKKyAgICAgICAgICAgICAgICAgICAgIHhtbGh0dHAuc2VuZChudWxsKTsKKyAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IHhtbGh0dHAucmVzcG9uc2VUZXh0OworICAgICAgICAgICAgICAg
ICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09ICIiKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICB0cmFjZSgiQ2F0Y2gxIik7CisgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgICB0cmFjZSgiQ2F0Y2gyIik7CisgICAgICAgICAgICAgICAg
IH0KKyAKKyAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSgpCisgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoIDwgNSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICIiICsgeG1saHR0cC5yZWFkeVN0YXRlOworICAg
ICAgICAgICAgICAgICAgICAgICAgIHRyYWNlKCJEb25lMSIpOworICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2UoIkRvbmUyIik7CisgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZXJyb3IoKQorICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAiRkFJTEVEIjsKKyAg
ICAgICAgICAgICAgICAgICAgIHRyYWNlKCJFcnJvciIpOworICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgIHRyYWNlKCJFeGl0Iik7CisgICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQgPT0gIlRlc3QiOworICAgICAgICAgICAgIH0KKyAgICAgICAgIDwvc2NyaXB0PgorICAg
ICA8L2hlYWQ+CisgICAgIDxib2R5PgorICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgb25j
bGljaz0iamF2YXNjcmlwdDphbGVydChydW5UZXN0KCdodHRwOi8vd3d3Lmdvb2dsZS5jb20nKSki
IHZhbHVlPSJSdW4gVGVzdCIvPjxici8+CisgICAgICAgICA8ZGl2IGlkPSJDb25zb2xlIi8+Cisg
ICAgIDwvYm9keT4KKyA8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQ==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207810</attachid>
            <date>2013-07-30 23:02:08 -0700</date>
            <delta_ts>2013-07-31 04:54:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-117823-20130731112727.patch</filename>
            <type>text/plain</type>
            <size>16507</size>
            <attacher name="Deepjyoti Saha">deesaha</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS90ZXN0cy5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL3Rlc3RzLnByaQko
cmV2aXNpb24gMTUxNzI5KQorKysgU291cmNlL3Rlc3RzLnByaQkod29ya2luZyBjb3B5KQpAQCAt
MjAsNiArMjAsNyBAQCBTVUJESVJTICs9IFwKICAgICAkJFdFQktJVF9URVNUU19ESVIvcXdlYnZp
ZXcgXAogICAgICQkV0VCS0lUX1RFU1RTX0RJUi9xd2ViaGlzdG9yeSBcCiAgICAgJCRXRUJLSVRf
VEVTVFNfRElSL3F3ZWJpbnNwZWN0b3IgXAorICAgICQkV0VCS0lUX1RFU1RTX0RJUi9xd2Vic2Vj
dXJpdHlvcmlnaW4gXAogICAgICQkV0VCS0lUX1RFU1RTX0RJUi9oeWJyaWRQaXhtYXAKIAogbGlu
dXgtKiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gMTUyMTU2KQorKysgU291cmNlL1dl
YktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMiBAQAorMjAxMy0w
Ny0zMSAgRGVlcGp5b3RpIFNhaGEgIDxkZWVzYWhhQGNpc2NvLmNvbT4KKworICAgICAgICBbUXRd
IEFkZCBpbnRlcmZhY2UgQVBJIGZvciBvcmlnaW4gd2hpdGVsaXN0aW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTc4MjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgaW50ZXJmYWNlIEFQSXMg
aW4gUVdlYlNlY3VyaXR5T3JpZ2luIHRvIGFkZCBhbmQgcmVtb3ZlIHdoaXRlTGlzdCBlbnRpcmVz
LgorCisgICAgICAgIFJlLXVzZWQgbW9zdCBvZiB0aGUgdGVzdCBjYXNlcyB3cml0dGVuIGJ5IENh
cm9sIFN6YWJvICA8Y2Fyb2wuc3phYm9Abm9raWEuY29tPiAKKyAgICAgICAgZm9yIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTg3NSBhbmQgYWRkZWQgdGhlIHNhbWUu
CisKKyAgICAgICAgKiBBcGkvcXdlYnNlY3VyaXR5b3JpZ2luLmNwcDoKKyAgICAgICAgKFFXZWJT
ZWN1cml0eU9yaWdpbjo6YWRkQWNjZXNzV2hpdGVsaXN0RW50cnkpOgorICAgICAgICAoUVdlYlNl
Y3VyaXR5T3JpZ2luOjpyZW1vdmVBY2Nlc3NXaGl0ZWxpc3RFbnRyeSk6CisgICAgICAgICogQXBp
L3F3ZWJzZWN1cml0eW9yaWdpbi5oOgorICAgICAgICAqIHRlc3RzL3F3ZWJzZWN1cml0eW9yaWdp
bjogQWRkZWQuCisgICAgICAgICogdGVzdHMvcXdlYnNlY3VyaXR5b3JpZ2luL3F3ZWJzZWN1cml0
eW9yaWdpbi5wcm86IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3F3ZWJzZWN1cml0eW9yaWdpbi9y
ZXNvdXJjZXM6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3F3ZWJzZWN1cml0eW9yaWdpbi9yZXNv
dXJjZXMvdGVzdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9xd2Vic2VjdXJpdHlvcmln
aW4vdHN0X3F3ZWJzZWN1cml0eW9yaWdpbi5jcHA6IEFkZGVkLgorICAgICAgICAodHN0X1FXZWJT
ZWN1cml0eU9yaWdpbjo6dHN0X1FXZWJTZWN1cml0eU9yaWdpbik6CisgICAgICAgICh0c3RfUVdl
YlNlY3VyaXR5T3JpZ2luOjp+dHN0X1FXZWJTZWN1cml0eU9yaWdpbik6CisgICAgICAgICh0c3Rf
UVdlYlNlY3VyaXR5T3JpZ2luOjppbml0KToKKyAgICAgICAgKHRzdF9RV2ViU2VjdXJpdHlPcmln
aW46OmNsZWFudXApOgorICAgICAgICAodHN0X1FXZWJTZWN1cml0eU9yaWdpbjo6d2hpdGVMaXN0
X2RhdGEpOgorICAgICAgICAodHN0X1FXZWJTZWN1cml0eU9yaWdpbjo6d2hpdGVMaXN0KToKKyAg
ICAgICAgKiB0ZXN0cy9xd2Vic2VjdXJpdHlvcmlnaW4vdHN0X3F3ZWJzZWN1cml0eW9yaWdpbi5x
cmM6IEFkZGVkLgorCiAyMDEzLTA2LTI3ICBLYW5naWwgSGFuICA8a2FuZ2lsLmhhbkBzYW1zdW5n
LmNvbT4KIAogICAgICAgICBBZG9wdCBpcy90b0hUTUxJbnB1dEVsZW1lbnQgZm9yIGNvZGUgY2xl
YW51cApJbmRleDogU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNlY3VyaXR5b3JpZ2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2VjdXJpdHlvcmlnaW4uY3Bw
CShyZXZpc2lvbiAxNTE3MjkpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2VjdXJpdHlv
cmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiS1VS
TC5oIgogI2luY2x1ZGUgIlNjaGVtZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW4uaCIKKyNpbmNsdWRlICJTZWN1cml0eVBvbGljeS5oIgogI2luY2x1ZGUgInF3ZWJkYXRhYmFz
ZS5oIgogI2luY2x1ZGUgInF3ZWJkYXRhYmFzZV9wLmgiCiAjaW5jbHVkZSAicXdlYnNlY3VyaXR5
b3JpZ2luX3AuaCIKQEAgLTI2NSwzICsyNjYsMzUgQEAgUVN0cmluZ0xpc3QgUVdlYlNlY3VyaXR5
T3JpZ2luOjpsb2NhbFNjaAogICAgIH0KICAgICByZXR1cm4gbGlzdDsKIH0KKworCisvKiEKKyAg
ICBBbGxvd3MgY29udHJ1Y3Rpb24gb2YgUVdlYlNlY3VyaXR5T3JpZ2luKCkgYXMgcGVyIHRoZSBz
cGVjaWZpZWQgXGEgdXJsLgorKi8KK1FXZWJTZWN1cml0eU9yaWdpbjo6UVdlYlNlY3VyaXR5T3Jp
Z2luKGNvbnN0IFFVcmwmIHVybCkKK3sKKyAgICBkID0gbmV3IFFXZWJTZWN1cml0eU9yaWdpblBy
aXZhdGUoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShLVVJMKHVybCkpKTsKK30KKworLyohCisgICAg
QWxsb3dzIHRoZSBvcmlnaW4gdG8gYWNjZXNzIHRoZSBzcGVjaWZpZWQgXGEgaG9zdCB1c2luZyB0
aGUgc3BlY2lmaWVkIFxhIHNjaGVtZS4KKyAgICBTcGVjaWZ5aW5nIEFsbG93U3ViZG9tYWlucyBp
biBcYSBzdWJkb21haW5TZXR0aW5nIHdpbGwgYWxsb3cgdGhlIHNvdXJjZSBvcmlnaW4gdG8gYWNj
ZXNzCisgICAgdGhlIFxhIGhvc3QncyBzdWJkb21haW5zIGFzIHdlbGwsIHdoZXJlYXMgcGFzc2lu
ZyBEaXNhbGxvd1N1YmRvbWFpbnMgd291bGQgcHJldmVudCB0aGlzLgorICAgIAorICAgIFN1Y2gg
Y3Jvc3Mgb3JpZ2luIHJlcXVlc3RzIGFyZSBvdGhlcndpc2UgcmVzdHJpY3RlZCBhcyBwZXIgdGhl
IHNhbWUtb3JpZ2luLXBvbGljeS4KKyovCit2b2lkIFFXZWJTZWN1cml0eU9yaWdpbjo6YWRkQWNj
ZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgUVN0cmluZyYgc2NoZW1lLCBjb25zdCBRU3RyaW5nJiBo
b3N0LCBTdWJkb21haW5TZXR0aW5nIHN1YmRvbWFpblNldHRpbmcpCit7CisgICAgU2VjdXJpdHlQ
b2xpY3k6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KCooZC0+b3JpZ2luKSwgc2NoZW1l
LCBob3N0LCBzdWJkb21haW5TZXR0aW5nID09IEFsbG93U3ViZG9tYWlucyk7Cit9CisKKy8qIQor
ICAgIFJlbW92ZXMgdGhlIG9yaWdpbidzIHdoaXRlbGlzdGVkIGFjY2VzcyB0byB0aGUgc3BlY2lm
aWVkIFxhIGhvc3QgdXNpbmcgdGhlIHNwZWNpZmllZCBcYSBzY2hlbWUKKyAgICBhcyBwZXIgdGhl
IHNwZWNpZmllZCBcYSBzdWJkb21haW5TZXR0aW5nLgorKi8KK3ZvaWQgUVdlYlNlY3VyaXR5T3Jp
Z2luOjpyZW1vdmVBY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBRU3RyaW5nJiBzY2hlbWUsIGNv
bnN0IFFTdHJpbmcmIGhvc3QsIFN1YmRvbWFpblNldHRpbmcgc3ViZG9tYWluU2V0dGluZykKK3sK
KyAgICBTZWN1cml0eVBvbGljeTo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoKihk
LT5vcmlnaW4pLCBzY2hlbWUsIGhvc3QsIHN1YmRvbWFpblNldHRpbmcgPT0gQWxsb3dTdWJkb21h
aW5zKTsKK30KKworCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2VjdXJpdHlvcmln
aW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2VjdXJpdHlvcmln
aW4uaAkocmV2aXNpb24gMTUxNzI5KQorKysgU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNlY3Vy
aXR5b3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDExICszNiwyMCBAQCBjbGFzcyBRV2Vi
RnJhbWU7CiAKIGNsYXNzIFFXRUJLSVRfRVhQT1JUIFFXZWJTZWN1cml0eU9yaWdpbiB7CiBwdWJs
aWM6CisgICAgZW51bSBTdWJkb21haW5TZXR0aW5nIHsKKyAgICAgICAgQWxsb3dTdWJkb21haW5z
LAorICAgICAgICBEaXNhbGxvd1N1YmRvbWFpbnMKKyAgICB9OworICAgIAogICAgIHN0YXRpYyBR
TGlzdDxRV2ViU2VjdXJpdHlPcmlnaW4+IGFsbE9yaWdpbnMoKTsKICAgICBzdGF0aWMgdm9pZCBh
ZGRMb2NhbFNjaGVtZShjb25zdCBRU3RyaW5nJiBzY2hlbWUpOwogICAgIHN0YXRpYyB2b2lkIHJl
bW92ZUxvY2FsU2NoZW1lKGNvbnN0IFFTdHJpbmcmIHNjaGVtZSk7CiAgICAgc3RhdGljIFFTdHJp
bmdMaXN0IGxvY2FsU2NoZW1lcygpOwogCisgICAgdm9pZCBhZGRBY2Nlc3NXaGl0ZWxpc3RFbnRy
eShjb25zdCBRU3RyaW5nJiBzY2hlbWUsIGNvbnN0IFFTdHJpbmcmIGhvc3QsIFN1YmRvbWFpblNl
dHRpbmcgc3ViZG9tYWluU2V0dGluZyk7CisgICAgdm9pZCByZW1vdmVBY2Nlc3NXaGl0ZWxpc3RF
bnRyeShjb25zdCBRU3RyaW5nJiBzY2hlbWUsIGNvbnN0IFFTdHJpbmcmIGhvc3QsIFN1YmRvbWFp
blNldHRpbmcgc3ViZG9tYWluU2V0dGluZyk7CisKKyAgICBleHBsaWNpdCBRV2ViU2VjdXJpdHlP
cmlnaW4oY29uc3QgUVVybCYgdXJsKTsKICAgICB+UVdlYlNlY3VyaXR5T3JpZ2luKCk7CiAKICAg
ICBRU3RyaW5nIHNjaGVtZSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYktpdC9xdC9BcGkvcXdl
YnNlY3VyaXR5b3JpZ2luX3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0FwaS9x
d2Vic2VjdXJpdHlvcmlnaW5fcC5oCShyZXZpc2lvbiAxNTE3MjkpCisrKyBTb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2Vic2VjdXJpdHlvcmlnaW5fcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsy
NSw3IEBACiAKIGNsYXNzIFFXZWJTZWN1cml0eU9yaWdpblByaXZhdGUgOiBwdWJsaWMgUVNoYXJl
ZERhdGEgewogcHVibGljOgotICAgIFFXZWJTZWN1cml0eU9yaWdpblByaXZhdGUoV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW4qIG8pCisgICAgUVdlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZShXVEY6OlBh
c3NSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+IG8pCiAgICAgewogICAgICAgICBRX0FT
U0VSVChvKTsKICAgICAgICAgb3JpZ2luID0gbzsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvdGVz
dHMvcXdlYnNlY3VyaXR5b3JpZ2luL3F3ZWJzZWN1cml0eW9yaWdpbi5wcm8KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9xdC90ZXN0cy9xd2Vic2VjdXJpdHlvcmlnaW4vcXdlYnNlY3VyaXR5
b3JpZ2luLnBybwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcXdlYnNl
Y3VyaXR5b3JpZ2luL3F3ZWJzZWN1cml0eW9yaWdpbi5wcm8JKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMiBAQAoraW5jbHVkZSguLi90ZXN0cy5wcmkpCitleGlzdHMoJCR7VEFSR0VUfS5xcmMpOlJF
U09VUkNFUyArPSAkJHtUQVJHRVR9LnFyYwpJbmRleDogU291cmNlL1dlYktpdC9xdC90ZXN0cy9x
d2Vic2VjdXJpdHlvcmlnaW4vdHN0X3F3ZWJzZWN1cml0eW9yaWdpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9xdC90ZXN0cy9xd2Vic2VjdXJpdHlvcmlnaW4vdHN0X3F3ZWJzZWN1
cml0eW9yaWdpbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3F3
ZWJzZWN1cml0eW9yaWdpbi90c3RfcXdlYnNlY3VyaXR5b3JpZ2luLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxOTIgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICAgIENvcHlyaWdodCAoQykgMjAx
MyBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworCisjaW5jbHVk
ZSA8UURlYnVnPgorI2luY2x1ZGUgPFFOZXR3b3JrUmVwbHk+CisjaW5jbHVkZSA8UXRUZXN0Pgor
I2luY2x1ZGUgPHF3ZWJmcmFtZS5oPgorI2luY2x1ZGUgPHF3ZWJwYWdlLmg+CisjaW5jbHVkZSA8
cXdlYnNlY3VyaXR5b3JpZ2luLmg+CisjaW5jbHVkZSA8cXdlYnZpZXcuaD4KKworY2xhc3MgdHN0
X1FXZWJTZWN1cml0eU9yaWdpbiA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorcHVi
bGljOgorICAgIHRzdF9RV2ViU2VjdXJpdHlPcmlnaW4oKTsKKyAgICB2aXJ0dWFsIH50c3RfUVdl
YlNlY3VyaXR5T3JpZ2luKCk7CisKK3ByaXZhdGUgc2xvdHM6CisgICAgdm9pZCBpbml0KCk7Cisg
ICAgdm9pZCBjbGVhbnVwKCk7CisgICAgdm9pZCB3aGl0ZUxpc3RfZGF0YSgpOworICAgIHZvaWQg
d2hpdGVMaXN0KCk7Citwcml2YXRlOgorICAgIFFXZWJWaWV3KiBtX3ZpZXc7CisgICAgUVdlYlBh
Z2UqIG1fcGFnZTsKK307CisKK3RzdF9RV2ViU2VjdXJpdHlPcmlnaW46OnRzdF9RV2ViU2VjdXJp
dHlPcmlnaW4oKQoreworfQorCit0c3RfUVdlYlNlY3VyaXR5T3JpZ2luOjp+dHN0X1FXZWJTZWN1
cml0eU9yaWdpbigpCit7Cit9CisKK3ZvaWQgdHN0X1FXZWJTZWN1cml0eU9yaWdpbjo6aW5pdCgp
Cit7CisgICAgbV92aWV3ID0gbmV3IFFXZWJWaWV3KCk7CisgICAgbV9wYWdlID0gbV92aWV3LT5w
YWdlKCk7Cit9CisKK3ZvaWQgdHN0X1FXZWJTZWN1cml0eU9yaWdpbjo6Y2xlYW51cCgpCit7Cisg
ICAgZGVsZXRlIG1fdmlldzsKK30KKwordm9pZCB0c3RfUVdlYlNlY3VyaXR5T3JpZ2luOjp3aGl0
ZUxpc3RfZGF0YSgpCit7CisgICAgUVRlc3Q6OmFkZENvbHVtbjxRU3RyaW5nPigic291cmNlIik7
CisgICAgUVRlc3Q6OmFkZENvbHVtbjxRU3RyaW5nPigic2NoZW1lIik7CisgICAgUVRlc3Q6OmFk
ZENvbHVtbjxRU3RyaW5nPigiaG9zdCIpOworICAgIFFUZXN0OjphZGRDb2x1bW48Ym9vbD4oImlu
Y2x1ZGVTdWJEb21haW5zIik7CisgICAgUVRlc3Q6OmFkZENvbHVtbjxRU3RyaW5nPigidGVzdFVy
bCIpOworICAgIFFUZXN0OjphZGRDb2x1bW48Ym9vbD4oInN1Y2Nlc3NCZWZvcmVBZGQiKTsKKyAg
ICBRVGVzdDo6YWRkQ29sdW1uPGJvb2w+KCJzdWNjZXNzQWZ0ZXJBZGQiKTsKKyAgICBRVGVzdDo6
YWRkQ29sdW1uPGJvb2w+KCJzdWNjZXNzQWZ0ZXJSZW1vdmUiKTsKKworICAgIFFUZXN0OjpuZXdS
b3coInNjaGVtZSIpIDw8ICJodHRwOi8vd3d3LnNvdXJjZS5jb20iIDw8ICJodHRwcyIgPDwgInd3
dy50YXJnZXQuY29tIiA8PCBmYWxzZSA8PCAiaHR0cHM6Ly93d3cudGFyZ2V0LmNvbS9vdGhlciIg
PDwgZmFsc2UgPDwgdHJ1ZSA8PCBmYWxzZTsKKyAgICBRVGVzdDo6bmV3Um93KCJzY2hlbWVGYWls
IikgPDwgImh0dHA6Ly93d3cuc291cmNlLmNvbSIgPDwgImh0dHBzIiA8PCAid3d3LnRhcmdldC5j
b20iIDw8IGZhbHNlIDw8ICJodHRwOi8vd3d3LnRhcmdldC5jb20vb3RoZXIiIDw8IGZhbHNlIDw8
IGZhbHNlIDw8IGZhbHNlOworICAgIFFUZXN0OjpuZXdSb3coInNjaGVtZVN1YkRvbSIpIDw8ICJo
dHRwOi8vd3d3LnNvdXJjZS5jb20iIDw8ICJodHRwcyIgPDwgInRhcmdldC5jb20iIDw8IHRydWUg
PDwgImh0dHBzOi8vd3d3LnRhcmdldC5jb20vb3RoZXIiIDw8IGZhbHNlIDw8IHRydWUgPDwgZmFs
c2U7CisgICAgUVRlc3Q6Om5ld1Jvdygic2NoZW1lU3ViRG9tRmFpbCIpIDw8ICJodHRwOi8vd3d3
LnNvdXJjZS5jb20iIDw8ICJodHRwcyIgPDwgInRhcmdldC5jb20iIDw8IHRydWUgPDwgImh0dHBz
Oi8vd3d3dGFyZ2V0LmNvbS9vdGhlciIgPDwgZmFsc2UgPDwgZmFsc2UgPDwgZmFsc2U7CisgICAg
UVRlc3Q6Om5ld1Jvdygic2NoZW1lU3ViRG9tRmFpbCIpIDw8ICJodHRwOi8vd3d3LnNvdXJjZS5j
b20iIDw8ICJodHRwcyIgPDwgInRhcmdldC5jb20iIDw8IHRydWUgPDwgImh0dHA6Ly93d3cudGFy
Z2V0LmNvbS9vdGhlciIgPDwgZmFsc2UgPDwgZmFsc2UgPDwgZmFsc2U7CisgICAgUVRlc3Q6Om5l
d1JvdygiaG9zdCIpIDw8ICJodHRwOi8vd3d3LnNvdXJjZS5jb20iIDw8ICJodHRwIiA8PCAid3d3
LnRhcmdldC5jb20iIDw8IGZhbHNlIDw8ICJodHRwOi8vd3d3LnRhcmdldC5jb20vdGFyZ2V0IiA8
PCBmYWxzZSA8PCB0cnVlIDw8IGZhbHNlOworICAgIFFUZXN0OjpuZXdSb3coImhvc3RGYWlsIikg
PDwgImh0dHA6Ly93d3cuc291cmNlLmNvbSIgPDwgImh0dHAiIDw8ICJ3d3cudGFyZ2V0LmNvbSIg
PDwgZmFsc2UgPDwgImh0dHA6Ly93d3cubmV3dGFyZ2V0LmNvbSIgPDwgZmFsc2UgPDwgZmFsc2Ug
PDwgZmFsc2U7CisgICAgUVRlc3Q6Om5ld1JvdygiaG9zdFN1YkRvbSIpIDw8ICJodHRwOi8vd3d3
LnNvdXJjZS5jb20iIDw8ICJodHRwIiA8PCAidGFyZ2V0LmNvbSIgPDwgdHJ1ZSA8PCAiaHR0cDov
L3d3dy5uZXcudGFyZ2V0LmNvbSIgPDwgZmFsc2UgPDwgdHJ1ZSA8PCBmYWxzZTsKKyAgICBRVGVz
dDo6bmV3Um93KCJob3N0U3ViRG9tRmFpbCIpIDw8ICJodHRwOi8vd3d3LnNvdXJjZS5jb20iIDw8
ICJodHRwIiA8PCAidGFyZ2V0LmNvbSIgPDwgZmFsc2UgPDwgImh0dHA6Ly93d3cubmV3LnRhcmdl
dC5jb20iIDw8IGZhbHNlIDw8IGZhbHNlIDw8IGZhbHNlOworICAgIFFUZXN0OjpuZXdSb3coImhv
c3RTdWJEb21GYWlsQ291bnRyeSIpIDw8ICJodHRwOi8vd3d3LnNvdXJjZS5jb20iIDw8ICJodHRw
IiA8PCAidGFyZ2V0LmNvbSIgPDwgdHJ1ZSA8PCAiaHR0cDovL3d3dy50YXJnZXQuY29tLnR3IiA8
PCBmYWxzZSA8PCBmYWxzZSA8PCBmYWxzZTsKK30KKworY2xhc3MgQ2FubmVkUmVzcG9uc2VOZXR3
b3JrUmVwbHk6IHB1YmxpYyBRTmV0d29ya1JlcGx5IHsKKyAgICBRX09CSkVDVAorcHVibGljOgor
ICAgIENhbm5lZFJlc3BvbnNlTmV0d29ya1JlcGx5KFFPYmplY3QqIHBhcmVudCwgUU5ldHdvcmtB
Y2Nlc3NNYW5hZ2VyOjpPcGVyYXRpb24gb3AsIGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYgcmVxLCBj
b25zdCBRQnVmZmVyJiBib2R5KTogUU5ldHdvcmtSZXBseShwYXJlbnQpCisgICAgeworICAgICAg
ICBzZXRSZXF1ZXN0KHJlcSk7CisgICAgICAgIHNldFVybChyZXEudXJsKCkpOworICAgICAgICBz
ZXRPcGVyYXRpb24ob3ApOworICAgICAgICBtX2J1ZmZlci5zZXREYXRhKGJvZHkuZGF0YSgpKTsK
KyAgICAgICAgY29ubmVjdCgmbV9idWZmZXIsIFNJR05BTChyZWFkeVJlYWQoKSksIFNMT1QoZW1p
dFJlYWR5UmVhZCgpKSk7CisgICAgICAgIGNvbm5lY3QoJm1fYnVmZmVyLCBTSUdOQUwocmVhZENo
YW5uZWxGaW5pc2hlZCgpKSwgU0xPVChlbWl0UmVhZENoYW5uZWxGaW5pc2hlZCgpKSk7CisgICAg
ICAgIGNvbm5lY3QoJm1fYnVmZmVyLCBTSUdOQUwocmVhZENoYW5uZWxGaW5pc2hlZCgpKSwgU0xP
VChlbWl0UmVhZENoYW5uZWxGaW5pc2hlZCgpKSk7CisgICAgICAgIG1fYnVmZmVyLm9wZW4oUUlP
RGV2aWNlOjpSZWFkT25seSk7CisgICAgICAgIG9wZW4oUUlPRGV2aWNlOjpSZWFkT25seSk7Cisg
ICAgICAgIFFUaW1lcjo6c2luZ2xlU2hvdCgxMCwgdGhpcywgU0xPVCh1cGRhdGUoKSkpOworICAg
IH0KK3Byb3RlY3RlZDoKKyAgICBxaW50NjQgcmVhZERhdGEoY2hhciAqIGRhdGEsIHFpbnQ2NCBt
YXhTaXplKQorICAgIHsKKyAgICAgICAgcWludDY0IHJlc3VsdCA9IG1fYnVmZmVyLnJlYWQoZGF0
YSwgbWF4U2l6ZSk7CisgICAgICAgIGlmICghbV9idWZmZXIuYnl0ZXNBdmFpbGFibGUoKSkKKyAg
ICAgICAgICAgIFFUaW1lcjo6c2luZ2xlU2hvdCgxMCwgdGhpcywgU0xPVChlbWl0UmVhZENoYW5u
ZWxGaW5pc2hlZCgpKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdmly
dHVhbCBxaW50NjQgYnl0ZXNBdmFpbGFibGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fYnVmZmVyLmJ5dGVzQXZhaWxhYmxlKCk7CisgICAgfQorCitwcml2YXRlIHNsb3RzOgorICAg
IHZvaWQgZW1pdFJlYWR5UmVhZCgpCisgICAgeworICAgICAgICBlbWl0IHJlYWR5UmVhZCgpOwor
ICAgIH0KKworICAgIHZvaWQgZW1pdFJlYWRDaGFubmVsRmluaXNoZWQoKQorICAgIHsKKyAgICAg
ICAgZW1pdCByZWFkQ2hhbm5lbEZpbmlzaGVkKCk7CisgICAgICAgIGVtaXQgZmluaXNoZWQoKTsK
KyAgICB9CisgICAgdm9pZCBhYm9ydCgpIHsgfTsKKworICAgIHZvaWQgdXBkYXRlKCkKKyAgICB7
CisgICAgICAgIHNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6OkNvbnRlbnRUeXBlSGVhZGVyLCAi
dGV4dC9wbGFpbiIpOworICAgICAgICBzZXRIZWFkZXIoUU5ldHdvcmtSZXF1ZXN0OjpDb250ZW50
TGVuZ3RoSGVhZGVyLCBtX2J1ZmZlci5zaXplKCkpOworICAgICAgICBzZXRFcnJvcihRTmV0d29y
a1JlcGx5OjpOb0Vycm9yLCAiIik7CisgICAgICAgIHNldEF0dHJpYnV0ZShRTmV0d29ya1JlcXVl
c3Q6Okh0dHBTdGF0dXNDb2RlQXR0cmlidXRlLCAyMDApOworICAgICAgICBzZXRBdHRyaWJ1dGUo
UU5ldHdvcmtSZXF1ZXN0OjpIdHRwUmVhc29uUGhyYXNlQXR0cmlidXRlLCBRU3RyaW5nKCJPayIp
LnRvTGF0aW4xKCkpOworICAgICAgICBlbWl0IG1ldGFEYXRhQ2hhbmdlZCgpOworICAgICAgICBl
bWl0IHJlYWR5UmVhZCgpOworICAgIH0KK3B1YmxpYzoKKyAgICBRQnVmZmVyIG1fYnVmZmVyOwor
fTsKKworY2xhc3MgQ2FubmVkUmVzcG9uc2VOZXR3b3JrQWNjZXNzTWFuYWdlcjogcHVibGljIFFO
ZXR3b3JrQWNjZXNzTWFuYWdlciB7CisgICAgUV9PQkpFQ1QKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIFFOZXR3b3JrUmVwbHkqIGNyZWF0ZVJlcXVlc3QoT3BlcmF0aW9uIG9wLCBjb25zdCBRTmV0
d29ya1JlcXVlc3QmIHJlcSwgUUlPRGV2aWNlKiBvdXRnb2luZ0RhdGEgPSAwKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG5ldyBDYW5uZWRSZXNwb25zZU5ldHdvcmtSZXBseSh0aGlzLCBvcCwgcmVx
LCAqbV9idWZmZXIpOworICAgIH07CitwdWJsaWM6CisgICAgUUJ1ZmZlciogbV9idWZmZXI7Cit9
OworCitzdGF0aWMgY29uc3QgY2hhciBjYW5uZWRSZXNwb25zZVtdID0gIlRlc3QiOworCit2b2lk
IHRzdF9RV2ViU2VjdXJpdHlPcmlnaW46OndoaXRlTGlzdCgpCit7CisgICAgUUZFVENIKFFTdHJp
bmcsIHNvdXJjZSk7CisgICAgUUZFVENIKFFTdHJpbmcsIHNjaGVtZSk7CisgICAgUUZFVENIKFFT
dHJpbmcsIGhvc3QpOworICAgIFFGRVRDSChib29sLCBpbmNsdWRlU3ViRG9tYWlucyk7CisgICAg
UUZFVENIKFFTdHJpbmcsIHRlc3RVcmwpOworICAgIFFGRVRDSChib29sLCBzdWNjZXNzQmVmb3Jl
QWRkKTsKKyAgICBRRkVUQ0goYm9vbCwgc3VjY2Vzc0FmdGVyQWRkKTsKKyAgICBRRkVUQ0goYm9v
bCwgc3VjY2Vzc0FmdGVyUmVtb3ZlKTsKKworICAgIFFXZWJTZWN1cml0eU9yaWdpbiogb3JpZ2lu
ID0gbmV3IFFXZWJTZWN1cml0eU9yaWdpbihzb3VyY2UpOworICAgIENhbm5lZFJlc3BvbnNlTmV0
d29ya0FjY2Vzc01hbmFnZXIgbWFuYWdlcjsKKyAgICBRQnVmZmVyIGJ1ZmZlcjsKKyAgICBRV2Vi
U2VjdXJpdHlPcmlnaW46OlN1YmRvbWFpblNldHRpbmcgc3ViZG9tYWluU2V0dGluZyA9IGluY2x1
ZGVTdWJEb21haW5zID8gUVdlYlNlY3VyaXR5T3JpZ2luOjpBbGxvd1N1YmRvbWFpbnMgOiBRV2Vi
U2VjdXJpdHlPcmlnaW46OkRpc2FsbG93U3ViZG9tYWluczsKKyAgICBidWZmZXIuc2V0RGF0YShj
YW5uZWRSZXNwb25zZSwgc2l6ZW9mKGNhbm5lZFJlc3BvbnNlKS0xKTsKKyAgICBtYW5hZ2VyLm1f
YnVmZmVyID0gJmJ1ZmZlcjsKKyAgICBRRmlsZSB0ZXN0UGFnZUZpbGUoIjovcmVzb3VyY2VzL3Rl
c3QuaHRtbCIpOworICAgIFFWRVJJRlkodGVzdFBhZ2VGaWxlLm9wZW4oUUlPRGV2aWNlOjpSZWFk
T25seSkpOworICAgIHVjaGFyKiB0ZXN0UGFnZSA9IHRlc3RQYWdlRmlsZS5tYXAoMCwgdGVzdFBh
Z2VGaWxlLnNpemUoKSk7CisgICAgUVZFUklGWSh0ZXN0UGFnZSk7CisgICAgbV92aWV3LT5zZXRI
dG1sKFFTdHJpbmcoKGNvbnN0IGNoYXIqKXRlc3RQYWdlKSwgUVVybChzb3VyY2UpKTsKKyAgICBt
X3ZpZXctPnBhZ2UoKS0+c2V0TmV0d29ya0FjY2Vzc01hbmFnZXIoJm1hbmFnZXIpOworICAgIFFT
dHJpbmcgdGVzdEpTPSJydW5UZXN0KFwiIiArIHRlc3RVcmwgKyAiXCIpIjsKKyAgICBRQ09NUEFS
RShtX3ZpZXctPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmV2YWx1YXRlSmF2YVNjcmlwdCh0ZXN0SlMp
LCBRVmFyaWFudChzdWNjZXNzQmVmb3JlQWRkKSk7CisgICAgb3JpZ2luLT5hZGRBY2Nlc3NXaGl0
ZWxpc3RFbnRyeShzY2hlbWUsIGhvc3QsIHN1YmRvbWFpblNldHRpbmcpOworICAgIFFDT01QQVJF
KG1fdmlldy0+cGFnZSgpLT5tYWluRnJhbWUoKS0+ZXZhbHVhdGVKYXZhU2NyaXB0KHRlc3RKUyks
IFFWYXJpYW50KHN1Y2Nlc3NBZnRlckFkZCkpOworICAgIG9yaWdpbi0+cmVtb3ZlQWNjZXNzV2hp
dGVsaXN0RW50cnkoc2NoZW1lLCBob3N0LCBzdWJkb21haW5TZXR0aW5nKTsKKyAgICBRQ09NUEFS
RShtX3ZpZXctPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmV2YWx1YXRlSmF2YVNjcmlwdCh0ZXN0SlMp
LCBRVmFyaWFudChzdWNjZXNzQWZ0ZXJSZW1vdmUpKTsKKyAgICBtX3ZpZXctPnBhZ2UoKS0+c2V0
TmV0d29ya0FjY2Vzc01hbmFnZXIoMCk7Cit9CisKK1FURVNUX01BSU4odHN0X1FXZWJTZWN1cml0
eU9yaWdpbikKKyNpbmNsdWRlICJ0c3RfcXdlYnNlY3VyaXR5b3JpZ2luLm1vYyIKKwpJbmRleDog
U291cmNlL1dlYktpdC9xdC90ZXN0cy9xd2Vic2VjdXJpdHlvcmlnaW4vdHN0X3F3ZWJzZWN1cml0
eW9yaWdpbi5xcmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC90ZXN0cy9xd2Vic2Vj
dXJpdHlvcmlnaW4vdHN0X3F3ZWJzZWN1cml0eW9yaWdpbi5xcmMJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3F3ZWJzZWN1cml0eW9yaWdpbi90c3RfcXdlYnNlY3VyaXR5
b3JpZ2luLnFyYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2IEBACis8IURPQ1RZUEUgUkNDPjxS
Q0MgdmVyc2lvbj0iMS4wIj4KKzxxcmVzb3VyY2U+CisgICAgPGZpbGU+cmVzb3VyY2VzL3Rlc3Qu
aHRtbDwvZmlsZT4KKzwvcXJlc291cmNlPgorPC9SQ0M+CisKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
cXQvdGVzdHMvcXdlYnNlY3VyaXR5b3JpZ2luL3Jlc291cmNlcy90ZXN0Lmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9xdC90ZXN0cy9xd2Vic2VjdXJpdHlvcmlnaW4vcmVzb3VyY2Vz
L3Rlc3QuaHRtbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcXdlYnNl
Y3VyaXR5b3JpZ2luL3Jlc291cmNlcy90ZXN0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxLy9FTiIg
Imh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L3N0cmljdC5kdGQiPgorPGh0bWw+CisgICA8aGVh
ZD4KKyAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQv
aHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKyAgICAgICA8dGl0bGU+UVdlYlNlY3VyaXR5T3Jp
Z2luIHRlc3QgcGFnZTwvdGl0bGU+CisgICAgICAgPHNjcmlwdCBMYW5ndWFnZT0iSmF2YVNjcmlw
dCI+CisgICAgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3QodXJsKQorICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICB2YXIgcmVzdWx0ID0gIiI7CisgICAgICAgICAgICAgICAgZnVuY3Rpb24gdHJh
Y2UocG9pbnQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB2YXIgZWwg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7CisgICAgICAgICAgICAgICAgICAgICBlbC5p
bm5lckhUTUwgPSBwb2ludCArICI6IFJlc3VsdCBpczpcIiIgKyByZXN1bHQgKyAiXCIiCisgICAg
ICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQ29uc29sZSIpLmFwcGVu
ZENoaWxkKGVsKTsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICB0cnkgewor
ICAgICAgICAgICAgICAgICAgICAgdmFyIHhtbGh0dHAgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsK
KyAgICAgICAgICAgICAgICAgICAgIHhtbGh0dHAub3BlbignR0VUJyx1cmwsIGZhbHNlKTsKKyAg
ICAgICAgICAgICAgICAgICAgIHhtbGh0dHAub25yZWFkeXN0YXRlY2hhbmdlID0gZG9uZTsKKyAg
ICAgICAgICAgICAgICAgICAgIHhtbGh0dHAub25lcnJvciA9IGVycm9yOworICAgICAgICAgICAg
ICAgICAgICAgeG1saHR0cC5zZW5kKG51bGwpOworICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0geG1saHR0cC5yZXNwb25zZVRleHQ7CisgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gIiIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBlOworICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlKCJD
YXRjaDEiKTsKKyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgIHRyYWNlKCJDYXRjaDIiKTsKKyAgICAgICAgICAgICAgICAgfQorIAorICAgICAgICAg
ICAgICAgICBmdW5jdGlvbiBkb25lKCkKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPCA1KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gIiIgKyB4bWxodHRwLnJlYWR5U3RhdGU7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgdHJhY2UoIkRvbmUxIik7CisgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgICB0cmFjZSgiRG9uZTIiKTsKKyAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICBmdW5jdGlvbiBlcnJvcigpCisgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICJGQUlMRUQiOworICAgICAgICAgICAgICAgICAg
ICAgdHJhY2UoIkVycm9yIik7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
dHJhY2UoIkV4aXQiKTsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PSAiVGVzdCI7
CisgICAgICAgICAgICAgfQorICAgICAgICAgPC9zY3JpcHQ+CisgICAgIDwvaGVhZD4KKyAgICAg
PGJvZHk+CisgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBvbmNsaWNrPSJqYXZhc2NyaXB0
OmFsZXJ0KHJ1blRlc3QoJ2h0dHA6Ly93d3cuZ29vZ2xlLmNvbScpKSIgdmFsdWU9IlJ1biBUZXN0
Ii8+PGJyLz4KKyAgICAgICAgIDxkaXYgaWQ9IkNvbnNvbGUiLz4KKyAgICAgPC9ib2R5PgorIDwv
aHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>