<?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>96763</bug_id>
          
          <creation_ts>2012-09-14 06:18:26 -0700</creation_ts>
          <short_desc>Web Inspector: CSS property names autocomplete: Suggest most used rather than alphabetically first</short_desc>
          <delta_ts>2012-10-02 06:38:19 -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>Web Inspector (Deprecated)</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikita Vasilyev">me</reporter>
          <assigned_to name="Nikita Vasilyev">me</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>vsevik</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>720666</commentid>
    <comment_count>0</comment_count>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2012-09-14 06:18:26 -0700</bug_when>
    <thetext>f|
 fill
 fill-opacity
 fill-rule
 filter
 float
 flood-color
 flood-opacity
 font
 font-family
 font-size
 font-stretch
 font-style
 font-variant
 font-weight

The list is sorted alphabetically. It isn’t very convenient. I never use &quot;fill&quot; or &quot;flood&quot; (it’s for SVG, it doesn’t even work for HTML).

One solution would be to store a hash table with usage frequency of every property.

WebInspector.CSSCompletions.cssPropertiesUsage = {
    &quot;-webkit-align-content&quot;: 0,
    &quot;font&quot;: 42,
    ...remaining 382 properties...
}

We could store it in the localStorage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720717</commentid>
    <comment_count>1</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-09-14 07:07:15 -0700</bug_when>
    <thetext>Let&apos;s just put them in the order we like in the CSSKeywordCompletions.js and not sort it at runtime. I.e.

1) sort them alphabetically inside the source
2) move the ones we don&apos;t like to the end

...or if you want to have more fun

use page cycler data to calculate every value&apos;s weight and use it when generating the source.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720760</commentid>
    <comment_count>2</comment_count>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2012-09-14 07:38:36 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Let&apos;s just put them in the order we like in the CSSKeywordCompletions.js and not sort it at runtime. I.e.
&gt; 
&gt; 1) sort them alphabetically inside the source
&gt; 2) move the ones we don&apos;t like to the end

Not sure if get it right. Where exactly I can sort them the way I like? They are currently fetched from the backend via CSSAgent.getSupportedCSSProperties. I couldn’t trace them from there.

All properties are sorted alphabetically. _firstIndexOfPrefix uses binary search. Are use suggesting to do reordering after finding the suggested values in sorted array?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720765</commentid>
    <comment_count>3</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-09-14 07:45:25 -0700</bug_when>
    <thetext>Ah, I gave you a bad advice. I thought we were talking about the property values. But we could do the same for names - collect the stats and assign weight to every property name, then I would just hardcode it in the front-end and sort by weight at runtime.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720812</commentid>
    <comment_count>4</comment_count>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2012-09-14 08:51:45 -0700</bug_when>
    <thetext>How do I collect the stats?

(In reply to comment #3)
&gt; Ah, I gave you a bad advice. I thought we were talking about the property values. But we could do the same for names - collect the stats and assign weight to every property name, then I would just hardcode it in the front-end and sort by weight at runtime.

How do we collect stats? How does page cycler help here? We need to know most frequently used property names. Used by users in the wild. One way to get them would be to analise CSS files of several websites. Is there an easier way?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720821</commentid>
    <comment_count>5</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-09-14 09:15:15 -0700</bug_when>
    <thetext>&gt; How do we collect stats? How does page cycler help here? We need to know most frequently used property names. Used by users in the wild. One way to get them would be to analise CSS files of several websites. Is there an easier way?

Page cycler iterates over a lot of popular pages (http://www.chromium.org/developers/testing/page-cyclers). If you modify WebCore CSS parser to collect stats on property names in some static variable (count them?), you can run the cycler against such build and dump the property frequencies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722042</commentid>
    <comment_count>6</comment_count>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2012-09-17 10:44:22 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; How do we collect stats? How does page cycler help here? We need to know most frequently used property names. Used by users in the wild. One way to get them would be to analise CSS files of several websites. Is there an easier way?
&gt; 
&gt; Page cycler iterates over a lot of popular pages (http://www.chromium.org/developers/testing/page-cyclers).

I don’t see any mention of it running over popular pages neither on http://www.chromium.org/developers/testing/page-cyclers nor http://src.chromium.org/viewvc/chrome/trunk/src/tools/page_cycler/

&gt; If you modify WebCore CSS parser to collect stats on property names in some static variable (count them?), you can run the cycler against such build and dump the property frequencies.

I’m not really fluent with neither C++ nor WebCore CSS parser. I’d rather go for JS and DOM (document.styleSheets).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723736</commentid>
    <comment_count>7</comment_count>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2012-09-19 13:01:08 -0700</bug_when>
    <thetext>I made a simple script for PhantomJS (http://phantomjs.org/) to collect the stats. https://gist.github.com/3751436
Most used property is width, its weight is 255.

It isn’t terrible accurate, but it does give an idea that &quot;font&quot; is much frequently used than &quot;fill&quot;.

(In reply to comment #3)
&gt; ... then I would just hardcode it in the front-end and sort by weight at runtime.

If we hardcode them, how do we keep them up to date? If the answer is &quot;manually&quot; then I’d rather keep it on the backend as it now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723740</commentid>
    <comment_count>8</comment_count>
      <attachid>164763</attachid>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2012-09-19 13:04:47 -0700</bug_when>
    <thetext>Created attachment 164763
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>724238</commentid>
    <comment_count>9</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-09-20 00:40:06 -0700</bug_when>
    <thetext>I guess the list should always look the same way. It is just that the default selection should be based on the weight. I.e. when I type &quot;f&quot;, here is what I expect to see:

f|&lt;ont&gt;
 fill
 fill-opacity
 fill-rule
 filter
 float
 flood-color
 flood-opacity
&gt;font&lt;
 font-family
 font-size
 font-stretch
 font-style
 font-variant
 font-weight

&gt; If we hardcode them, how do we keep them up to date? If the answer is &quot;manually&quot; then I’d rather keep it on the backend as it now.

The reason the list of supported properties is on the backend is that it exposes the rendering engine capabilities. You ask backend: &quot;what do you support&quot;? And it responds.

But the &quot;weight&quot; of the property name is has purely IDE nature, it is not a feature of the instrumented device. Why would a mobile browser hold this information in its code? It would be as if gdb holded a list of C++ keywords.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>724383</commentid>
    <comment_count>10</comment_count>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2012-09-20 03:43:18 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; I guess the list should always look the same way. It is just that the default selection should be based on the weight. I.e. when I type &quot;f&quot;, here is what I expect to see:

I agree. &quot;font-&quot; properties spread through the list look messy:

font
font-size
float
font-weight
font-family
font-style
fill
filter
flood-color
flood-opacity
fill-opacity
fill-rule
font-stretch
font-variant

It requires some changes in TextPrompt.js though.

&gt; &gt; If we hardcode them, how do we keep them up to date? If the answer is &quot;manually&quot; then I’d rather keep it on the backend as it now.
&gt; 
&gt; The reason the list of supported properties is on the backend is that it exposes the rendering engine capabilities. You ask backend: &quot;what do you support&quot;? And it responds.
&gt; 
&gt; But the &quot;weight&quot; of the property name is has purely IDE nature, it is not a feature of the instrumented device. Why would a mobile browser hold this information in its code? It would be as if gdb holded a list of C++ keywords.

Sounds reasonable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>724924</commentid>
    <comment_count>11</comment_count>
      <attachid>164996</attachid>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2012-09-20 15:36:04 -0700</bug_when>
    <thetext>Created attachment 164996
Implement selection of non-first item in WebInspector.TextPrompt.SuggestBox</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>724926</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-20 15:38:27 -0700</bug_when>
    <thetext>Attachment 164996 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/ChangeLog:19:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 1 in 4 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>724928</commentid>
    <comment_count>13</comment_count>
      <attachid>164998</attachid>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2012-09-20 15:41:14 -0700</bug_when>
    <thetext>Created attachment 164998
Implement selection of non-first item in WebInspector.TextPrompt.SuggestBox</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>724934</commentid>
    <comment_count>14</comment_count>
      <attachid>165000</attachid>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2012-09-20 15:45:28 -0700</bug_when>
    <thetext>Created attachment 165000
After the patch #164998</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726654</commentid>
    <comment_count>15</comment_count>
      <attachid>164998</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-09-24 07:41:53 -0700</bug_when>
    <thetext>Comment on attachment 164998
Implement selection of non-first item in WebInspector.TextPrompt.SuggestBox

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

&gt; Source/WebCore/ChangeLog:21
&gt; +                replaced them with this method.

indent too big

&gt; Source/WebCore/inspector/front-end/CSSCompletions.js:93
&gt; +WebInspector.CSSCompletions.Weight = {

You should perhaps add a small comment saying how these weights were derived.

&gt; Source/WebCore/inspector/front-end/CSSCompletions.js:222
&gt; +

inadvertent change?

&gt; Source/WebCore/inspector/front-end/TextPrompt.js:436
&gt; +     * @param {number=0} selectedIndex

&quot;..=0&quot; is invalid JsDoc syntax. It should be
@param {number=} selectedIndex

&gt; Source/WebCore/inspector/front-end/TextPrompt.js:455
&gt; +        if (!selectedIndex)

As a shortcut, you may use
selectedIndex = selectedIndex || 0;

&gt; Source/WebCore/inspector/front-end/TextPrompt.js:1096
&gt; +            index = Math.max(index, 0);

In utilities.js, we have Number.constrain(), so you can write
index = Number.constrain(index, 0, this._length - 1);

&gt; Source/WebCore/inspector/front-end/TextPrompt.js:1146
&gt;       * @param {boolean=} canShowForSingleItem

This annotation seems to be invalid - please remove it.

&gt; Source/WebCore/inspector/front-end/TextPrompt.js:1151
&gt; +        var fragment = document.createDocumentFragment();

Is using DocumentFragment any faster than the direct modification of element&apos;s children in this case?

&gt; Source/WebCore/inspector/front-end/TextPrompt.js:1176
&gt; +        this._selectedElement = this.contentElement.childNodes[index];

Should this be .children instead? (to avoid considering TextNodes, should they somehow crawl into the children collection)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726670</commentid>
    <comment_count>16</comment_count>
      <attachid>164998</attachid>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2012-09-24 08:06:27 -0700</bug_when>
    <thetext>Comment on attachment 164998
Implement selection of non-first item in WebInspector.TextPrompt.SuggestBox

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

Thanks for the review, Alexander!

&gt;&gt; Source/WebCore/inspector/front-end/TextPrompt.js:1151
&gt;&gt; +        var fragment = document.createDocumentFragment();
&gt; 
&gt; Is using DocumentFragment any faster than the direct modification of element&apos;s children in this case?

I should guarantee a single repaint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726749</commentid>
    <comment_count>17</comment_count>
      <attachid>165397</attachid>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2012-09-24 09:34:08 -0700</bug_when>
    <thetext>Created attachment 165397
Fix nits

&gt; &gt;&gt; Source/WebCore/inspector/front-end/TextPrompt.js:1151
&gt; &gt;&gt; +        var fragment = document.createDocumentFragment();
&gt; &gt; 
&gt; &gt; Is using DocumentFragment any faster than the direct modification of element&apos;s children in this case?
&gt; 
&gt; I should guarantee a single repaint.

I did some profiling: it does a single repaint in both cases and there is no performance deviation between them (takes 1–4ms on my machine). Therefor I keep it as it was.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726809</commentid>
    <comment_count>18</comment_count>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2012-09-24 10:17:48 -0700</bug_when>
    <thetext>&gt; I should guarantee a single repaint.

I mean, &quot;It should&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730528</commentid>
    <comment_count>19</comment_count>
      <attachid>165397</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-09-28 05:15:09 -0700</bug_when>
    <thetext>Comment on attachment 165397
Fix nits

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

&gt; Source/WebCore/inspector/front-end/CSSCompletions.js:93
&gt; +WebInspector.CSSCompletions.Weight = {

A small comment on how the data were derived, and we are ready to land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731928</commentid>
    <comment_count>20</comment_count>
      <attachid>166530</attachid>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2012-10-01 13:11:02 -0700</bug_when>
    <thetext>Created attachment 166530
Add a comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732434</commentid>
    <comment_count>21</comment_count>
      <attachid>166530</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-02 01:59:26 -0700</bug_when>
    <thetext>Comment on attachment 166530
Add a comment

Clearing flags on attachment: 166530

Committed r130140: &lt;http://trac.webkit.org/changeset/130140&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732435</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-02 01:59:31 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732440</commentid>
    <comment_count>23</comment_count>
      <attachid>166530</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-10-02 02:16:56 -0700</bug_when>
    <thetext>Comment on attachment 166530
Add a comment

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

&gt; Source/WebCore/inspector/front-end/TextPrompt.js:1142
&gt; +     * @param {number} selectedIndex

Optional parameters should follow the required ones. This breaks front-end compilation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732459</commentid>
    <comment_count>24</comment_count>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2012-10-02 02:57:03 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 166530 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=166530&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/TextPrompt.js:1142
&gt; &gt; +     * @param {number} selectedIndex
&gt; 
&gt; Optional parameters should follow the required ones. This breaks front-end compilation.

How do I compile front-end? I mean, without compiling the whole WebKit.

I’ve found ./Source/WebCore/inspector/compile-front-end.py. I downloaded the latest Closure Compiler into ~/closure/compiler.jar to make it work. compile-front-end.py shows lots of warnings including the one you mentioned but no errors. I don’t know where the compilation result is so I can’t check is it actually work or not.

Should I create a new bug and land a fix in it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732463</commentid>
    <comment_count>25</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-10-02 03:12:45 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #23)
&gt; &gt; (From update of attachment 166530 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=166530&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/inspector/front-end/TextPrompt.js:1142
&gt; &gt; &gt; +     * @param {number} selectedIndex
&gt; &gt; 
&gt; &gt; Optional parameters should follow the required ones. This breaks front-end compilation.
&gt; 
&gt; How do I compile front-end? I mean, without compiling the whole WebKit.
&gt; 
&gt; I’ve found ./Source/WebCore/inspector/compile-front-end.py. I downloaded the latest Closure Compiler into ~/closure/compiler.jar to make it work. compile-front-end.py shows lots of warnings including the one you mentioned but no errors. I don’t know where the compilation result is so I can’t check is it actually work or not.
&gt; 
&gt; Should I create a new bug and land a fix in it?

We are currently migrating to the new compiler version. Right now it could be compiled with an older version only. 
You could try this one now: http://mvnrepository.com/artifact/com.google.javascript/closure-compiler/r1810</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732466</commentid>
    <comment_count>26</comment_count>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2012-10-02 03:18:04 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #24)
&gt; &gt; (In reply to comment #23)
&gt; &gt; &gt; (From update of attachment 166530 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=166530&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/inspector/front-end/TextPrompt.js:1142
&gt; &gt; &gt; &gt; +     * @param {number} selectedIndex
&gt; &gt; &gt; 
&gt; &gt; &gt; Optional parameters should follow the required ones. This breaks front-end compilation.
&gt; &gt; 
&gt; &gt; How do I compile front-end? I mean, without compiling the whole WebKit.
&gt; &gt; 
&gt; &gt; I’ve found ./Source/WebCore/inspector/compile-front-end.py. I downloaded the latest Closure Compiler into ~/closure/compiler.jar to make it work. compile-front-end.py shows lots of warnings including the one you mentioned but no errors. I don’t know where the compilation result is so I can’t check is it actually work or not.
&gt; &gt; 
&gt; &gt; Should I create a new bug and land a fix in it?
&gt; 
&gt; We are currently migrating to the new compiler version. Right now it could be compiled with an older version only. 
&gt; You could try this one now: http://mvnrepository.com/artifact/com.google.javascript/closure-compiler/r1810

I put http://repo1.maven.org/maven2/com/google/javascript/closure-compiler/r1810/closure-compiler-r1810.jar into ~/closure/compiler.jar. Now it doens’t even work:

WebKit ➤ ./Source/WebCore/inspector/compile-front-end.py 
Failed to load Main-Class manifest attribute from
/Users/nv/closure/compiler.jar</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732472</commentid>
    <comment_count>27</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-10-02 03:25:35 -0700</bug_when>
    <thetext>Try r1810 here http://code.google.com/p/closure-compiler/downloads/list</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732479</commentid>
    <comment_count>28</comment_count>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2012-10-02 03:31:04 -0700</bug_when>
    <thetext>It works. It doesn’t show any errors on the ToT:

➤ ./Source/WebCore/inspector/compile-front-end.py 
Module &apos;jsmodule_scripts&apos; depends on unknown module &apos;jsmodule_workers&apos;. Be sure to list modules in dependency order.
Compiling InjectedScriptSource.js...
0 error(s), 0 warning(s), 79.3% typed
Compiling InjectedScriptCanvasModuleSource.js...
0 error(s), 0 warning(s), 76.1% typed

It doesn’t seem to run compilation on TextPrompt.js at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732502</commentid>
    <comment_count>29</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-10-02 04:07:45 -0700</bug_when>
    <thetext>
&gt; Module &apos;jsmodule_scripts&apos; depends on unknown module &apos;jsmodule_workers&apos;. Be sure to list modules in dependency order.
This should be fixed now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732511</commentid>
    <comment_count>30</comment_count>
      <attachid>166530</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-10-02 04:18:46 -0700</bug_when>
    <thetext>Comment on attachment 166530
Add a comment

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

&gt; Source/WebCore/inspector/front-end/StylesSidebarPane.js:2668
&gt; +        completionsReadyCallback(results, selectedIndex);

You should also annotate that completionsReadyCallback now accepts two parameters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732581</commentid>
    <comment_count>31</comment_count>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2012-10-02 05:45:32 -0700</bug_when>
    <thetext>What should I do to see all these warnings/errors? This is what I just ran on ToT and didn’t see any of the warnings/errors above:

➤ ./Source/WebCore/inspector/compile-front-end.py
0 error(s), 0 warning(s), 79.3% typed
Compiling InjectedScriptSource.js...
0 error(s), 0 warning(s), 89.3% typed
Compiling InjectedScriptCanvasModuleSource.js...
Source/WebCore/inspector/InjectedScriptCanvasModuleSourceTmp.js:656: WARNING - inconsistent return type
found   : ReplayableResource
required: (Resource|null)
            return resource;
                   ^

Source/WebCore/inspector/InjectedScriptCanvasModuleSourceTmp.js:1592: WARNING - actual parameter 1 of Resource.prototype.setWrappedObject does not match formal parameter
found   : *
required: (Object|null)
        this.setWrappedObject(gl);
                              ^

Source/WebCore/inspector/InjectedScriptCanvasModuleSourceTmp.js:1900: WARNING - actual parameter 1 of Resource.prototype.setWrappedObject does not match formal parameter
found   : *
required: (Object|null)
        this.setWrappedObject(ctx);
                              ^

0 error(s), 3 warning(s), 84.2% typed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732600</commentid>
    <comment_count>32</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-10-02 06:13:10 -0700</bug_when>
    <thetext>What you see there now is correct.
These are compiler errors that are not fixed yet.

I believe compiler errors caused by this patch were batch-fixed in http://trac.webkit.org/changeset/130154</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732607</commentid>
    <comment_count>33</comment_count>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2012-10-02 06:25:45 -0700</bug_when>
    <thetext>How do I collect the stats?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732613</commentid>
    <comment_count>34</comment_count>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2012-10-02 06:38:19 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; How do I collect the stats?

Whoops, old browser session. Ignore that.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164763</attachid>
            <date>2012-09-19 13:04:47 -0700</date>
            <delta_ts>2012-09-20 15:36:04 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>sort.diff</filename>
            <type>text/plain</type>
            <size>4812</size>
            <attacher name="Nikita Vasilyev">me</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTQ29tcGxl
dGlvbnMuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU0NvbXBsZXRp
b25zLmpzCmluZGV4IDllMzc5ODUuLmVlMTdhNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTQ29tcGxldGlvbnMuanMKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NDb21wbGV0aW9ucy5qcwpAQCAtOTAsNiArOTAsMTI2
IEBAIFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5jc3NQcm9wZXJ0aWVzTWV0YWluZm9LZXlT
ZXQgPSBmdW5jdGlvbigpCiAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5f
Y3NzUHJvcGVydGllc01ldGFpbmZvS2V5U2V0OwogfQogCitXZWJJbnNwZWN0b3IuQ1NTQ29tcGxl
dGlvbnMuV2VpZ2h0ID0geworICAgICItd2Via2l0LWFuaW1hdGlvbiI6IDEsCisgICAgIi13ZWJr
aXQtYW5pbWF0aW9uLWR1cmF0aW9uIjogMSwKKyAgICAiLXdlYmtpdC1hbmltYXRpb24taXRlcmF0
aW9uLWNvdW50IjogMSwKKyAgICAiLXdlYmtpdC1hbmltYXRpb24tbmFtZSI6IDEsCisgICAgIi13
ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbiI6IDEsCisgICAgIi13ZWJraXQtYXBwZWFy
YW5jZSI6IDEsCisgICAgIi13ZWJraXQtYmFja2dyb3VuZC1jbGlwIjogMiwKKyAgICAiLXdlYmtp
dC1ib3JkZXItaG9yaXpvbnRhbC1zcGFjaW5nIjogMSwKKyAgICAiLXdlYmtpdC1ib3JkZXItdmVy
dGljYWwtc3BhY2luZyI6IDEsCisgICAgIi13ZWJraXQtYm94LXNoYWRvdyI6IDI0LAorICAgICIt
d2Via2l0LWZvbnQtc21vb3RoaW5nIjogMiwKKyAgICAiLXdlYmtpdC10cmFuc2Zvcm0iOiAxLAor
ICAgICItd2Via2l0LXRyYW5zaXRpb24iOiA4LAorICAgICItd2Via2l0LXRyYW5zaXRpb24tZGVs
YXkiOiA3LAorICAgICItd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb24iOiA3LAorICAgICItd2Vi
a2l0LXRyYW5zaXRpb24tcHJvcGVydHkiOiA3LAorICAgICItd2Via2l0LXRyYW5zaXRpb24tdGlt
aW5nLWZ1bmN0aW9uIjogNiwKKyAgICAiLXdlYmtpdC11c2VyLXNlbGVjdCI6IDEsCisgICAgImJh
Y2tncm91bmQiOiAyMjIsCisgICAgImJhY2tncm91bmQtYXR0YWNobWVudCI6IDE0NCwKKyAgICAi
YmFja2dyb3VuZC1jbGlwIjogMTQzLAorICAgICJiYWNrZ3JvdW5kLWNvbG9yIjogMjIyLAorICAg
ICJiYWNrZ3JvdW5kLWltYWdlIjogMjAxLAorICAgICJiYWNrZ3JvdW5kLW9yaWdpbiI6IDE0MiwK
KyAgICAiYmFja2dyb3VuZC1zaXplIjogMjUsCisgICAgImJvcmRlciI6IDEyMSwKKyAgICAiYm9y
ZGVyLWJvdHRvbSI6IDEyMSwKKyAgICAiYm9yZGVyLWJvdHRvbS1jb2xvciI6IDEyMSwKKyAgICAi
Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyI6IDUwLAorICAgICJib3JkZXItYm90dG9tLXJpZ2h0
LXJhZGl1cyI6IDUwLAorICAgICJib3JkZXItYm90dG9tLXN0eWxlIjogMTE0LAorICAgICJib3Jk
ZXItYm90dG9tLXdpZHRoIjogMTIwLAorICAgICJib3JkZXItY29sbGFwc2UiOiAzLAorICAgICJi
b3JkZXItbGVmdCI6IDk1LAorICAgICJib3JkZXItbGVmdC1jb2xvciI6IDk1LAorICAgICJib3Jk
ZXItbGVmdC1zdHlsZSI6IDg5LAorICAgICJib3JkZXItbGVmdC13aWR0aCI6IDk0LAorICAgICJi
b3JkZXItcmFkaXVzIjogNTAsCisgICAgImJvcmRlci1yaWdodCI6IDkzLAorICAgICJib3JkZXIt
cmlnaHQtY29sb3IiOiA5MywKKyAgICAiYm9yZGVyLXJpZ2h0LXN0eWxlIjogODgsCisgICAgImJv
cmRlci1yaWdodC13aWR0aCI6IDkzLAorICAgICJib3JkZXItdG9wIjogMTExLAorICAgICJib3Jk
ZXItdG9wLWNvbG9yIjogMTExLAorICAgICJib3JkZXItdG9wLWxlZnQtcmFkaXVzIjogNDksCisg
ICAgImJvcmRlci10b3AtcmlnaHQtcmFkaXVzIjogNDksCisgICAgImJvcmRlci10b3Atc3R5bGUi
OiAxMDQsCisgICAgImJvcmRlci10b3Atd2lkdGgiOiAxMDksCisgICAgImJvdHRvbSI6IDE2LAor
ICAgICJib3gtc2hhZG93IjogMjUsCisgICAgImJveC1zaXppbmciOiAyLAorICAgICJjbGVhciI6
IDIzLAorICAgICJjb2xvciI6IDIzNywKKyAgICAiY3Vyc29yIjogMzQsCisgICAgImRpcmVjdGlv
biI6IDQsCisgICAgImRpc3BsYXkiOiAyMTAsCisgICAgImZpbGwiOiAyLAorICAgICJmaWx0ZXIi
OiAxLAorICAgICJmbG9hdCI6IDEwNSwKKyAgICAiZm9udCI6IDE3NCwKKyAgICAiZm9udC1mYW1p
bHkiOiAyNSwKKyAgICAiZm9udC1zaXplIjogMTc0LAorICAgICJmb250LXN0eWxlIjogOSwKKyAg
ICAiZm9udC13ZWlnaHQiOiA4OSwKKyAgICAiaGVpZ2h0IjogMTYxLAorICAgICJsZWZ0IjogNTQs
CisgICAgImxldHRlci1zcGFjaW5nIjogMywKKyAgICAibGluZS1oZWlnaHQiOiA3NSwKKyAgICAi
bGlzdC1zdHlsZSI6IDE3LAorICAgICJsaXN0LXN0eWxlLWltYWdlIjogOCwKKyAgICAibGlzdC1z
dHlsZS1wb3NpdGlvbiI6IDgsCisgICAgImxpc3Qtc3R5bGUtdHlwZSI6IDE3LAorICAgICJtYXJn
aW4iOiAyNDEsCisgICAgIm1hcmdpbi1ib3R0b20iOiAyMjYsCisgICAgIm1hcmdpbi1sZWZ0Ijog
MjI1LAorICAgICJtYXJnaW4tcmlnaHQiOiAyMTMsCisgICAgIm1hcmdpbi10b3AiOiAyNDEsCisg
ICAgIm1heC1oZWlnaHQiOiA1LAorICAgICJtYXgtd2lkdGgiOiAxMSwKKyAgICAibWluLWhlaWdo
dCI6IDksCisgICAgIm1pbi13aWR0aCI6IDYsCisgICAgIm9wYWNpdHkiOiAyNCwKKyAgICAib3V0
bGluZSI6IDEwLAorICAgICJvdXRsaW5lLWNvbG9yIjogMTAsCisgICAgIm91dGxpbmUtc3R5bGUi
OiAxMCwKKyAgICAib3V0bGluZS13aWR0aCI6IDEwLAorICAgICJvdmVyZmxvdyI6IDU3LAorICAg
ICJvdmVyZmxvdy14IjogNTYsCisgICAgIm92ZXJmbG93LXkiOiA1NywKKyAgICAicGFkZGluZyI6
IDIxNiwKKyAgICAicGFkZGluZy1ib3R0b20iOiAyMDgsCisgICAgInBhZGRpbmctbGVmdCI6IDIx
NiwKKyAgICAicGFkZGluZy1yaWdodCI6IDIwNiwKKyAgICAicGFkZGluZy10b3AiOiAyMTYsCisg
ICAgInBvc2l0aW9uIjogMTM2LAorICAgICJyZXNpemUiOiAxLAorICAgICJyaWdodCI6IDI5LAor
ICAgICJzdHJva2UiOiAxLAorICAgICJzdHJva2Utd2lkdGgiOiAxLAorICAgICJ0YWJsZS1sYXlv
dXQiOiAxLAorICAgICJ0ZXh0LWFsaWduIjogNjYsCisgICAgInRleHQtZGVjb3JhdGlvbiI6IDUz
LAorICAgICJ0ZXh0LWluZGVudCI6IDksCisgICAgInRleHQtb3ZlcmZsb3ciOiA4LAorICAgICJ0
ZXh0LXNoYWRvdyI6IDE5LAorICAgICJ0ZXh0LXRyYW5zZm9ybSI6IDUsCisgICAgInRvcCI6IDcx
LAorICAgICJ1bmljb2RlLWJpZGkiOiAxLAorICAgICJ2ZXJ0aWNhbC1hbGlnbiI6IDM3LAorICAg
ICJ2aXNpYmlsaXR5IjogMTEsCisgICAgIndoaXRlLXNwYWNlIjogMjQsCisgICAgIndpZHRoIjog
MjU1LAorICAgICJ3b3JkLXdyYXAiOiA2LAorICAgICJ6LWluZGV4IjogMzIsCisgICAgInpvb20i
OiAxMAorfTsKKworV2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zLkRFRkFVTFRfV0VJR0hUID0g
MDsKKwogV2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zLnByb3RvdHlwZSA9IHsKICAgICBzdGFy
dHNXaXRoOiBmdW5jdGlvbihwcmVmaXgpCiAgICAgewpAQCAtMTAwLDEzICsyMjAsMjAgQEAgV2Vi
SW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zLnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIHJlc3Vs
dHMgPSBbXTsKICAgICAgICAgd2hpbGUgKGZpcnN0SW5kZXggPCB0aGlzLl92YWx1ZXMubGVuZ3Ro
ICYmIHRoaXMuX3ZhbHVlc1tmaXJzdEluZGV4XS5zdGFydHNXaXRoKHByZWZpeCkpCiAgICAgICAg
ICAgICByZXN1bHRzLnB1c2godGhpcy5fdmFsdWVzW2ZpcnN0SW5kZXgrK10pOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0czsKLSAgICB9LAogCi0gICAgZmlyc3RTdGFydHNXaXRoOiBmdW5jdGlvbihw
cmVmaXgpCi0gICAgewotICAgICAgICB2YXIgZm91bmRJbmRleCA9IHRoaXMuX2ZpcnN0SW5kZXhP
ZlByZWZpeChwcmVmaXgpOwotICAgICAgICByZXR1cm4gKGZvdW5kSW5kZXggPT09IC0xID8gIiIg
OiB0aGlzLl92YWx1ZXNbZm91bmRJbmRleF0pOworICAgICAgICBmdW5jdGlvbiBjb21wYXJhdG9y
KGEsIGIpIHsKKyAgICAgICAgICAgIHZhciB3ZWlnaHRBID0gV2ViSW5zcGVjdG9yLkNTU0NvbXBs
ZXRpb25zLldlaWdodC5oYXNPd25Qcm9wZXJ0eShhKSA/IFdlYkluc3BlY3Rvci5DU1NDb21wbGV0
aW9ucy5XZWlnaHRbYV0gOiBXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMuREVGQVVMVF9XRUlH
SFQ7CisgICAgICAgICAgICB2YXIgd2VpZ2h0QiA9IFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9u
cy5XZWlnaHQuaGFzT3duUHJvcGVydHkoYikgPyBXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMu
V2VpZ2h0W2JdIDogV2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zLkRFRkFVTFRfV0VJR0hUOwor
ICAgICAgICAgICAgaWYgKHdlaWdodEEgPiB3ZWlnaHRCKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIC0xOworICAgICAgICAgICAgfSBlbHNlIGlmICh3ZWlnaHRBIDwgd2VpZ2h0QikgeworICAg
ICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biByZXN1bHRzLnNvcnQoY29tcGFyYXRvcik7CiAgICAgfSwKIAogICAgIF9maXJzdEluZGV4T2ZQ
cmVmaXg6IGZ1bmN0aW9uKHByZWZpeCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164996</attachid>
            <date>2012-09-20 15:36:04 -0700</date>
            <delta_ts>2012-09-20 15:41:14 -0700</delta_ts>
            <desc>Implement selection of non-first item in WebInspector.TextPrompt.SuggestBox</desc>
            <filename>sort.diff</filename>
            <type>text/plain</type>
            <size>17915</size>
            <attacher name="Nikita Vasilyev">me</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwOTc1OTgzLi4xOGYxMDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMg
QEAKKzIwMTItMDktMjAgIE5pa2l0YSBWYXNpbHlldiAgPG1lQGVsdjFzLnJ1PgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IENTUyBwcm9wZXJ0eSBuYW1lcyBhdXRvY29tcGxldGU6IFN1Z2dlc3Qg
bW9zdCB1c2VkIHJhdGhlciB0aGFuIGFscGhhYmV0aWNhbHkgZmlyc3QKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NzYzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IHNlbGVjdGlvbiBvZiBu
b24tZmlyc3QgaXRlbSBpbiBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5TdWdnZXN0Qm94LgorCisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NDb21wbGV0aW9ucy5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5XZWlnaHQpOiBDb2xsZWN0IG1vc3QgdXNlZCBD
U1MgcHJvcGVydHkgbmFtZXMuIFJhcmVseSB1c2VkIHByb3BlcnRpZXMgYXJlIG5vdCBwcmVzZW50
ZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMucHJvdG90eXBlLmZpcnN0
U3RhcnRzV2l0aCk6IFJlbW92ZSB1bnVzZWQgZnVuY3Rpb24uCisgICAgICAgIChXZWJJbnNwZWN0
b3IuQ1NTQ29tcGxldGlvbnMucHJvdG90eXBlLm1vc3RVc2VkT2YpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanM6CisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC9UZXh0UHJvbXB0LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9t
cHQucHJvdG90eXBlLl9jb21wbGV0aW9uc1JlYWR5KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5U
ZXh0UHJvbXB0LnByb3RvdHlwZS5wYWdlRG93bktleVByZXNzZWQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJveCk6IEludHJvZHVjZSBfbGVuZ3RoIGFuZCBfc2Vs
ZWN0ZWRJbmRleCB0byByZW1vdmUgdW5uZWNlc3NhcnkgRE9NIHRyYXZlcnNhbHMuCisJICAgICAg
ICBTaW1wbGlmeSBjYW5TaG93Rm9yU2luZ2xlSXRlbSBsb2dpYy4KKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0UHJvbXB0LlN1Z2dlc3RCb3gucHJvdG90eXBlLl9zZWxlY3RDbG9zZXN0KTogX29u
UHJldmlvdXNJdGVtIGFuZCBfb25OZXh0SXRlbSBoYWQgc29tZSBsb2dpYyBkdXBsaWNhdGlvbiBz
byBJIAorICAgICAgICAgICAgICAgIHJlcGxhY2VkIHRoZW0gd2l0aCB0aGlzIG1ldGhvZC4KKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LlN1Z2dlc3RCb3gucHJvdG90eXBlLnVwZGF0
ZVN1Z2dlc3Rpb25zKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LlN1Z2dlc3RC
b3gucHJvdG90eXBlLl91cGRhdGVJdGVtcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFBy
b21wdC5TdWdnZXN0Qm94LnByb3RvdHlwZS5fc2VsZWN0SXRlbSk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVGV4dFByb21wdC5TdWdnZXN0Qm94LnByb3RvdHlwZS5fY29tcGxldGlvbnNSZWFkeSk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5TdWdnZXN0Qm94LnByb3RvdHlwZS51
cEtleVByZXNzZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJv
eC5wcm90b3R5cGUuZG93bktleVByZXNzZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQ
cm9tcHQuU3VnZ2VzdEJveC5wcm90b3R5cGUucGFnZVVwS2V5UHJlc3NlZCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuVGV4dFByb21wdC5TdWdnZXN0Qm94LnByb3RvdHlwZS5wYWdlRG93bktleVBy
ZXNzZWQpOgorCiAyMDEyLTA5LTE5ICBEb21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUu
Y29tPgogCiAgICAgICAgIEFYOiBBIGZldyBjb250cm9sIHR5cGVzIGFyZSByZXR1cm5pbmcgdGhl
IHdyb25nIGFuc3dlciBmb3IgaXNSZWFkT25seQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9DU1NDb21wbGV0aW9ucy5qcyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvQ1NTQ29tcGxldGlvbnMuanMKaW5kZXggOWUzNzk4NS4uM2EwYTRk
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NDb21w
bGV0aW9ucy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU0Nv
bXBsZXRpb25zLmpzCkBAIC05MCw2ICs5MCwxMjUgQEAgV2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRp
b25zLmNzc1Byb3BlcnRpZXNNZXRhaW5mb0tleVNldCA9IGZ1bmN0aW9uKCkKICAgICByZXR1cm4g
V2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zLl9jc3NQcm9wZXJ0aWVzTWV0YWluZm9LZXlTZXQ7
CiB9CiAKK1dlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5XZWlnaHQgPSB7CisgICAgIi13ZWJr
aXQtYW5pbWF0aW9uIjogMSwKKyAgICAiLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb24iOiAxLAor
ICAgICItd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQiOiAxLAorICAgICItd2Via2l0
LWFuaW1hdGlvbi1uYW1lIjogMSwKKyAgICAiLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0
aW9uIjogMSwKKyAgICAiLXdlYmtpdC1hcHBlYXJhbmNlIjogMSwKKyAgICAiLXdlYmtpdC1iYWNr
Z3JvdW5kLWNsaXAiOiAyLAorICAgICItd2Via2l0LWJvcmRlci1ob3Jpem9udGFsLXNwYWNpbmci
OiAxLAorICAgICItd2Via2l0LWJvcmRlci12ZXJ0aWNhbC1zcGFjaW5nIjogMSwKKyAgICAiLXdl
YmtpdC1ib3gtc2hhZG93IjogMjQsCisgICAgIi13ZWJraXQtZm9udC1zbW9vdGhpbmciOiAyLAor
ICAgICItd2Via2l0LXRyYW5zZm9ybSI6IDEsCisgICAgIi13ZWJraXQtdHJhbnNpdGlvbiI6IDgs
CisgICAgIi13ZWJraXQtdHJhbnNpdGlvbi1kZWxheSI6IDcsCisgICAgIi13ZWJraXQtdHJhbnNp
dGlvbi1kdXJhdGlvbiI6IDcsCisgICAgIi13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eSI6IDcs
CisgICAgIi13ZWJraXQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iOiA2LAorICAgICItd2Vi
a2l0LXVzZXItc2VsZWN0IjogMSwKKyAgICAiYmFja2dyb3VuZCI6IDIyMiwKKyAgICAiYmFja2dy
b3VuZC1hdHRhY2htZW50IjogMTQ0LAorICAgICJiYWNrZ3JvdW5kLWNsaXAiOiAxNDMsCisgICAg
ImJhY2tncm91bmQtY29sb3IiOiAyMjIsCisgICAgImJhY2tncm91bmQtaW1hZ2UiOiAyMDEsCisg
ICAgImJhY2tncm91bmQtb3JpZ2luIjogMTQyLAorICAgICJiYWNrZ3JvdW5kLXNpemUiOiAyNSwK
KyAgICAiYm9yZGVyIjogMTIxLAorICAgICJib3JkZXItYm90dG9tIjogMTIxLAorICAgICJib3Jk
ZXItYm90dG9tLWNvbG9yIjogMTIxLAorICAgICJib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzIjog
NTAsCisgICAgImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjogNTAsCisgICAgImJvcmRlci1i
b3R0b20tc3R5bGUiOiAxMTQsCisgICAgImJvcmRlci1ib3R0b20td2lkdGgiOiAxMjAsCisgICAg
ImJvcmRlci1jb2xsYXBzZSI6IDMsCisgICAgImJvcmRlci1sZWZ0IjogOTUsCisgICAgImJvcmRl
ci1sZWZ0LWNvbG9yIjogOTUsCisgICAgImJvcmRlci1sZWZ0LXN0eWxlIjogODksCisgICAgImJv
cmRlci1sZWZ0LXdpZHRoIjogOTQsCisgICAgImJvcmRlci1yYWRpdXMiOiA1MCwKKyAgICAiYm9y
ZGVyLXJpZ2h0IjogOTMsCisgICAgImJvcmRlci1yaWdodC1jb2xvciI6IDkzLAorICAgICJib3Jk
ZXItcmlnaHQtc3R5bGUiOiA4OCwKKyAgICAiYm9yZGVyLXJpZ2h0LXdpZHRoIjogOTMsCisgICAg
ImJvcmRlci10b3AiOiAxMTEsCisgICAgImJvcmRlci10b3AtY29sb3IiOiAxMTEsCisgICAgImJv
cmRlci10b3AtbGVmdC1yYWRpdXMiOiA0OSwKKyAgICAiYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMi
OiA0OSwKKyAgICAiYm9yZGVyLXRvcC1zdHlsZSI6IDEwNCwKKyAgICAiYm9yZGVyLXRvcC13aWR0
aCI6IDEwOSwKKyAgICAiYm90dG9tIjogMTYsCisgICAgImJveC1zaGFkb3ciOiAyNSwKKyAgICAi
Ym94LXNpemluZyI6IDIsCisgICAgImNsZWFyIjogMjMsCisgICAgImNvbG9yIjogMjM3LAorICAg
ICJjdXJzb3IiOiAzNCwKKyAgICAiZGlyZWN0aW9uIjogNCwKKyAgICAiZGlzcGxheSI6IDIxMCwK
KyAgICAiZmlsbCI6IDIsCisgICAgImZpbHRlciI6IDEsCisgICAgImZsb2F0IjogMTA1LAorICAg
ICJmb250IjogMTc0LAorICAgICJmb250LWZhbWlseSI6IDI1LAorICAgICJmb250LXNpemUiOiAx
NzQsCisgICAgImZvbnQtc3R5bGUiOiA5LAorICAgICJmb250LXdlaWdodCI6IDg5LAorICAgICJo
ZWlnaHQiOiAxNjEsCisgICAgImxlZnQiOiA1NCwKKyAgICAibGV0dGVyLXNwYWNpbmciOiAzLAor
ICAgICJsaW5lLWhlaWdodCI6IDc1LAorICAgICJsaXN0LXN0eWxlIjogMTcsCisgICAgImxpc3Qt
c3R5bGUtaW1hZ2UiOiA4LAorICAgICJsaXN0LXN0eWxlLXBvc2l0aW9uIjogOCwKKyAgICAibGlz
dC1zdHlsZS10eXBlIjogMTcsCisgICAgIm1hcmdpbiI6IDI0MSwKKyAgICAibWFyZ2luLWJvdHRv
bSI6IDIyNiwKKyAgICAibWFyZ2luLWxlZnQiOiAyMjUsCisgICAgIm1hcmdpbi1yaWdodCI6IDIx
MywKKyAgICAibWFyZ2luLXRvcCI6IDI0MSwKKyAgICAibWF4LWhlaWdodCI6IDUsCisgICAgIm1h
eC13aWR0aCI6IDExLAorICAgICJtaW4taGVpZ2h0IjogOSwKKyAgICAibWluLXdpZHRoIjogNiwK
KyAgICAib3BhY2l0eSI6IDI0LAorICAgICJvdXRsaW5lIjogMTAsCisgICAgIm91dGxpbmUtY29s
b3IiOiAxMCwKKyAgICAib3V0bGluZS1zdHlsZSI6IDEwLAorICAgICJvdXRsaW5lLXdpZHRoIjog
MTAsCisgICAgIm92ZXJmbG93IjogNTcsCisgICAgIm92ZXJmbG93LXgiOiA1NiwKKyAgICAib3Zl
cmZsb3cteSI6IDU3LAorICAgICJwYWRkaW5nIjogMjE2LAorICAgICJwYWRkaW5nLWJvdHRvbSI6
IDIwOCwKKyAgICAicGFkZGluZy1sZWZ0IjogMjE2LAorICAgICJwYWRkaW5nLXJpZ2h0IjogMjA2
LAorICAgICJwYWRkaW5nLXRvcCI6IDIxNiwKKyAgICAicG9zaXRpb24iOiAxMzYsCisgICAgInJl
c2l6ZSI6IDEsCisgICAgInJpZ2h0IjogMjksCisgICAgInN0cm9rZSI6IDEsCisgICAgInN0cm9r
ZS13aWR0aCI6IDEsCisgICAgInRhYmxlLWxheW91dCI6IDEsCisgICAgInRleHQtYWxpZ24iOiA2
NiwKKyAgICAidGV4dC1kZWNvcmF0aW9uIjogNTMsCisgICAgInRleHQtaW5kZW50IjogOSwKKyAg
ICAidGV4dC1vdmVyZmxvdyI6IDgsCisgICAgInRleHQtc2hhZG93IjogMTksCisgICAgInRleHQt
dHJhbnNmb3JtIjogNSwKKyAgICAidG9wIjogNzEsCisgICAgInVuaWNvZGUtYmlkaSI6IDEsCisg
ICAgInZlcnRpY2FsLWFsaWduIjogMzcsCisgICAgInZpc2liaWxpdHkiOiAxMSwKKyAgICAid2hp
dGUtc3BhY2UiOiAyNCwKKyAgICAid2lkdGgiOiAyNTUsCisgICAgIndvcmQtd3JhcCI6IDYsCisg
ICAgInotaW5kZXgiOiAzMiwKKyAgICAiem9vbSI6IDEwCit9OworCisKIFdlYkluc3BlY3Rvci5D
U1NDb21wbGV0aW9ucy5wcm90b3R5cGUgPSB7CiAgICAgc3RhcnRzV2l0aDogZnVuY3Rpb24ocHJl
Zml4KQogICAgIHsKQEAgLTEwMCwxMyArMjE5LDI2IEBAIFdlYkluc3BlY3Rvci5DU1NDb21wbGV0
aW9ucy5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciByZXN1bHRzID0gW107CiAgICAgICAgIHdo
aWxlIChmaXJzdEluZGV4IDwgdGhpcy5fdmFsdWVzLmxlbmd0aCAmJiB0aGlzLl92YWx1ZXNbZmly
c3RJbmRleF0uc3RhcnRzV2l0aChwcmVmaXgpKQogICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHRo
aXMuX3ZhbHVlc1tmaXJzdEluZGV4KytdKTsKKwogICAgICAgICByZXR1cm4gcmVzdWx0czsKICAg
ICB9LAogCi0gICAgZmlyc3RTdGFydHNXaXRoOiBmdW5jdGlvbihwcmVmaXgpCisgICAgLyoqCisg
ICAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gcHJvcGVydGllcworICAgICAqIEByZXR1cm4g
e251bWJlcn0KKyAgICAgKi8KKyAgICBtb3N0VXNlZE9mOiBmdW5jdGlvbihwcm9wZXJ0aWVzKQog
ICAgIHsKLSAgICAgICAgdmFyIGZvdW5kSW5kZXggPSB0aGlzLl9maXJzdEluZGV4T2ZQcmVmaXgo
cHJlZml4KTsKLSAgICAgICAgcmV0dXJuIChmb3VuZEluZGV4ID09PSAtMSA/ICIiIDogdGhpcy5f
dmFsdWVzW2ZvdW5kSW5kZXhdKTsKKyAgICAgICAgdmFyIG1heFdlaWdodCA9IDA7CisgICAgICAg
IHZhciBpbmRleCA9IDA7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5s
ZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIHdlaWdodCA9IFdlYkluc3BlY3Rvci5DU1ND
b21wbGV0aW9ucy5XZWlnaHRbcHJvcGVydGllc1tpXV07CisgICAgICAgICAgICBpZiAod2VpZ2h0
ID4gbWF4V2VpZ2h0KSB7CisgICAgICAgICAgICAgICAgbWF4V2VpZ2h0ID0gd2VpZ2h0OworICAg
ICAgICAgICAgICAgIGluZGV4ID0gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gaW5kZXg7CiAgICAgfSwKIAogICAgIF9maXJzdEluZGV4T2ZQcmVmaXg6IGZ1bmN0
aW9uKHByZWZpeCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU3R5bGVzU2lkZWJhclBhbmUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzCmluZGV4IDZjZTdiNzkuLmNhY2RlNmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUu
anMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFy
UGFuZS5qcwpAQCAtMjY2NCw3ICsyNjY0LDggQEAgV2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQ
YW5lLkNTU1Byb3BlcnR5UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybjsK
IAogICAgICAgICB2YXIgcmVzdWx0cyA9IHRoaXMuX2Nzc0NvbXBsZXRpb25zLnN0YXJ0c1dpdGgo
cHJlZml4KTsKLSAgICAgICAgY29tcGxldGlvbnNSZWFkeUNhbGxiYWNrKHJlc3VsdHMpOworICAg
ICAgICB2YXIgc2VsZWN0ZWRJbmRleCA9IHRoaXMuX2Nzc0NvbXBsZXRpb25zLm1vc3RVc2VkT2Yo
cmVzdWx0cyk7CisgICAgICAgIGNvbXBsZXRpb25zUmVhZHlDYWxsYmFjayhyZXN1bHRzLCBzZWxl
Y3RlZEluZGV4KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvVGV4dFByb21wdC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvVGV4dFByb21wdC5qcwppbmRleCBjNDBkZjRmLi5lODU3NWRiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRQcm9tcHQuanMKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0UHJvbXB0LmpzCkBAIC00MzMs
OCArNDMzLDkgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlID0gewogICAgICAq
IEBwYXJhbSB7UmFuZ2V9IG9yaWdpbmFsV29yZFByZWZpeFJhbmdlCiAgICAgICogQHBhcmFtIHti
b29sZWFufSByZXZlcnNlCiAgICAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPj19IGNvbXBsZXRp
b25zCisgICAgICogQHBhcmFtIHtudW1iZXI9MH0gc2VsZWN0ZWRJbmRleAogICAgICAqLwotICAg
IF9jb21wbGV0aW9uc1JlYWR5OiBmdW5jdGlvbihzZWxlY3Rpb24sIGF1dG8sIG9yaWdpbmFsV29y
ZFByZWZpeFJhbmdlLCByZXZlcnNlLCBjb21wbGV0aW9ucykKKyAgICBfY29tcGxldGlvbnNSZWFk
eTogZnVuY3Rpb24oc2VsZWN0aW9uLCBhdXRvLCBvcmlnaW5hbFdvcmRQcmVmaXhSYW5nZSwgcmV2
ZXJzZSwgY29tcGxldGlvbnMsIHNlbGVjdGVkSW5kZXgpCiAgICAgewogICAgICAgICBpZiAoIXRo
aXMuX3dhaXRpbmdGb3JDb21wbGV0aW9ucyB8fCAhY29tcGxldGlvbnMgfHwgIWNvbXBsZXRpb25z
Lmxlbmd0aCkgewogICAgICAgICAgICAgdGhpcy5oaWRlU3VnZ2VzdEJveCgpOwpAQCAtNDUxLDI5
ICs0NTIsMzIgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlID0gewogICAgICAg
ICBpZiAob3JpZ2luYWxXb3JkUHJlZml4UmFuZ2UudG9TdHJpbmcoKSArIHNlbGVjdGlvblJhbmdl
LnRvU3RyaW5nKCkgIT0gZnVsbFdvcmRSYW5nZS50b1N0cmluZygpKQogICAgICAgICAgICAgcmV0
dXJuOwogCisgICAgICAgIGlmICghc2VsZWN0ZWRJbmRleCkKKyAgICAgICAgICAgIHNlbGVjdGVk
SW5kZXggPSAwOworCiAgICAgICAgIHRoaXMuX3VzZXJFbnRlcmVkUmFuZ2UgPSBmdWxsV29yZFJh
bmdlOwogICAgICAgICB0aGlzLl91c2VyRW50ZXJlZFRleHQgPSBmdWxsV29yZFJhbmdlLnRvU3Ry
aW5nKCk7CiAKICAgICAgICAgaWYgKHRoaXMuX3N1Z2dlc3RCb3gpCi0gICAgICAgICAgICB0aGlz
Ll9zdWdnZXN0Qm94LnVwZGF0ZVN1Z2dlc3Rpb25zKHRoaXMuX2JveEZvckFuY2hvckF0U3RhcnQo
c2VsZWN0aW9uLCBmdWxsV29yZFJhbmdlKSwgY29tcGxldGlvbnMsICF0aGlzLmlzQ2FyZXRBdEVu
ZE9mUHJvbXB0KCkpOworICAgICAgICAgICAgdGhpcy5fc3VnZ2VzdEJveC51cGRhdGVTdWdnZXN0
aW9ucyh0aGlzLl9ib3hGb3JBbmNob3JBdFN0YXJ0KHNlbGVjdGlvbiwgZnVsbFdvcmRSYW5nZSks
IGNvbXBsZXRpb25zLCBzZWxlY3RlZEluZGV4LCAhdGhpcy5pc0NhcmV0QXRFbmRPZlByb21wdCgp
KTsKIAogICAgICAgICB2YXIgd29yZFByZWZpeExlbmd0aCA9IG9yaWdpbmFsV29yZFByZWZpeFJh
bmdlLnRvU3RyaW5nKCkubGVuZ3RoOwogCiAgICAgICAgIGlmIChhdXRvKSB7Ci0gICAgICAgICAg
ICB2YXIgY29tcGxldGlvblRleHQgPSBjb21wbGV0aW9uc1swXTsKKyAgICAgICAgICAgIHZhciBj
b21wbGV0aW9uVGV4dCA9IGNvbXBsZXRpb25zW3NlbGVjdGVkSW5kZXhdOwogICAgICAgICAgICAg
dmFyIGNvbW1vblByZWZpeCA9IHRoaXMuX2J1aWxkQ29tbW9uUHJlZml4KGNvbXBsZXRpb25zLCB3
b3JkUHJlZml4TGVuZ3RoKTsKIAogICAgICAgICAgICAgdGhpcy5fY29tbW9uUHJlZml4ID0gY29t
bW9uUHJlZml4OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGNvbXBsZXRpb25z
Lmxlbmd0aCA9PT0gMSkgewotICAgICAgICAgICAgICAgIHZhciBjb21wbGV0aW9uVGV4dCA9IGNv
bXBsZXRpb25zWzBdOworICAgICAgICAgICAgICAgIHZhciBjb21wbGV0aW9uVGV4dCA9IGNvbXBs
ZXRpb25zW3NlbGVjdGVkSW5kZXhdOwogICAgICAgICAgICAgICAgIHdvcmRQcmVmaXhMZW5ndGgg
PSBjb21wbGV0aW9uVGV4dC5sZW5ndGg7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgIHZhciBjb21tb25QcmVmaXggPSB0aGlzLl9idWlsZENvbW1vblByZWZpeChjb21wbGV0
aW9ucywgd29yZFByZWZpeExlbmd0aCk7CiAgICAgICAgICAgICAgICAgd29yZFByZWZpeExlbmd0
aCA9IGNvbW1vblByZWZpeC5sZW5ndGg7CiAKICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9u
LmlzQ29sbGFwc2VkKQotICAgICAgICAgICAgICAgICAgICB2YXIgY29tcGxldGlvblRleHQgPSBj
b21wbGV0aW9uc1swXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBsZXRpb25UZXh0ID0g
Y29tcGxldGlvbnNbc2VsZWN0ZWRJbmRleF07CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgIHZhciBjdXJyZW50VGV4dCA9IGZ1bGxXb3JkUmFuZ2UudG9TdHJpbmco
KTsKIApAQCAtNDg1LDcgKzQ4OSw3IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlw
ZSA9IHsKIAogICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEluZGV4ID0gZm91bmRJbmRleCAr
IChyZXZlcnNlID8gLTEgOiAxKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kSW5kZXgg
PT09IG51bGwgfHwgbmV4dEluZGV4ID49IGNvbXBsZXRpb25zLmxlbmd0aCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBjb21wbGV0aW9uVGV4dCA9IGNvbXBsZXRpb25zWzBdOworICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIGNvbXBsZXRpb25UZXh0ID0gY29tcGxldGlvbnNbc2VsZWN0
ZWRJbmRleF07CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5leHRJbmRleCA8IDApCiAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcGxldGlvblRleHQgPSBjb21wbGV0aW9uc1tj
b21wbGV0aW9ucy5sZW5ndGggLSAxXTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQpAQCAtNzQ5
LDcgKzc1Myw3IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9zdWdnZXN0Qm94LnBhZ2VEb3duS2V5UHJlc3NlZChldmVudCk7
CiAKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0sCisgICAgfQogfQogCiBXZWJJbnNwZWN0
b3IuVGV4dFByb21wdC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5w
cm90b3R5cGU7CkBAIC05MjksNiArOTMzLDggQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQuU3Vn
Z2VzdEJveCA9IGZ1bmN0aW9uKHRleHRQcm9tcHQsIGlucHV0RWxlbWVudCwgY2xhc3NOYW0KIHsK
ICAgICB0aGlzLl90ZXh0UHJvbXB0ID0gdGV4dFByb21wdDsKICAgICB0aGlzLl9pbnB1dEVsZW1l
bnQgPSBpbnB1dEVsZW1lbnQ7CisgICAgdGhpcy5fbGVuZ3RoID0gMDsKKyAgICB0aGlzLl9zZWxl
Y3RlZEluZGV4ID0gLTE7CiAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50ID0gbnVsbDsKICAgICB0
aGlzLl9ib3VuZE9uU2Nyb2xsID0gdGhpcy5fb25zY3JvbGxyZXNpemUuYmluZCh0aGlzLCB0cnVl
KTsKICAgICB0aGlzLl9ib3VuZE9uUmVzaXplID0gdGhpcy5fb25zY3JvbGxyZXNpemUuYmluZCh0
aGlzLCBmYWxzZSk7CkBAIC0xMDcyLDYwICsxMDc4LDI2IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJv
bXB0LlN1Z2dlc3RCb3gucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
LAogCi0gICAgX29uTmV4dEl0ZW06IGZ1bmN0aW9uKGV2ZW50LCBpc1BhZ2VTY3JvbGwpCisgICAg
LyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IHNoaWZ0CisgICAgICogQHBhcmFtIHtib29sZWFu
PX0gaXNDaXJjdWxhcgorICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGlzIGNoYW5nZWQKKyAgICAg
Ki8KKyAgICBfc2VsZWN0Q2xvc2VzdDogZnVuY3Rpb24oc2hpZnQsIGlzQ2lyY3VsYXIpCiAgICAg
ewotICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNvbnRlbnRFbGVtZW50LmNoaWxkTm9kZXM7
Ci0gICAgICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKQorICAgICAgICBpZiAoIXRoaXMuX2xlbmd0
aCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoIXRoaXMuX3NlbGVj
dGVkRWxlbWVudCkKLSAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVudCA9IHRoaXMuY29u
dGVudEVsZW1lbnQuZmlyc3RDaGlsZDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAo
IWlzUGFnZVNjcm9sbCkKLSAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEVsZW1lbnQgPSB0
aGlzLl9zZWxlY3RlZEVsZW1lbnQubmV4dFNpYmxpbmcgfHwgdGhpcy5jb250ZW50RWxlbWVudC5m
aXJzdENoaWxkOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNhbmRp
ZGF0ZSA9IHRoaXMuX3NlbGVjdGVkRWxlbWVudDsKLQotICAgICAgICAgICAgICAgIGZvciAodmFy
IGl0ZW1zTGVmdCA9IHRoaXMuX3Jvd0NvdW50UGVyVmlld3BvcnQ7IGl0ZW1zTGVmdDsgLS1pdGVt
c0xlZnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS5uZXh0U2libGluZykK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZS5uZXh0U2libGlu
ZzsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRF
bGVtZW50ID0gY2FuZGlkYXRlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHRo
aXMuX3VwZGF0ZVNlbGVjdGlvbigpOwotICAgICAgICB0aGlzLl9hcHBseVN1Z2dlc3Rpb24odW5k
ZWZpbmVkLCB0cnVlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKKyAgICAgICAgdmFy
IGluZGV4ID0gdGhpcy5fc2VsZWN0ZWRJbmRleCArIHNoaWZ0OwogCi0gICAgX29uUHJldmlvdXNJ
dGVtOiBmdW5jdGlvbihldmVudCwgaXNQYWdlU2Nyb2xsKQotICAgIHsKLSAgICAgICAgdmFyIGNo
aWxkcmVuID0gdGhpcy5jb250ZW50RWxlbWVudC5jaGlsZE5vZGVzOwotICAgICAgICBpZiAoIWNo
aWxkcmVuLmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAo
IXRoaXMuX3NlbGVjdGVkRWxlbWVudCkKLSAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVu
dCA9IHRoaXMuY29udGVudEVsZW1lbnQubGFzdENoaWxkOworICAgICAgICBpZiAoaXNDaXJjdWxh
cikKKyAgICAgICAgICAgIGluZGV4ID0gKHRoaXMuX2xlbmd0aCArIGluZGV4KSAlIHRoaXMuX2xl
bmd0aDsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIWlzUGFnZVNjcm9sbCkKLSAg
ICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEVsZW1lbnQgPSB0aGlzLl9zZWxlY3RlZEVsZW1l
bnQucHJldmlvdXNTaWJsaW5nIHx8IHRoaXMuY29udGVudEVsZW1lbnQubGFzdENoaWxkOwotICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNhbmRpZGF0ZSA9IHRoaXMuX3Nl
bGVjdGVkRWxlbWVudDsKLQotICAgICAgICAgICAgICAgIGZvciAodmFyIGl0ZW1zTGVmdCA9IHRo
aXMuX3Jvd0NvdW50UGVyVmlld3BvcnQ7IGl0ZW1zTGVmdDsgLS1pdGVtc0xlZnQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS5wcmV2aW91c1NpYmxpbmcpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBjYW5kaWRhdGUucHJldmlvdXNTaWJsaW5nOwotICAg
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEVsZW1lbnQg
PSBjYW5kaWRhdGU7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpbmRleCA9IE1hdGgubWF4
KGluZGV4LCAwKTsKKyAgICAgICAgICAgIGluZGV4ID0gTWF0aC5taW4oaW5kZXgsIHRoaXMuX2xl
bmd0aCAtIDEpOwogICAgICAgICB9Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGlvbigpOwor
CisgICAgICAgIHRoaXMuX3NlbGVjdEl0ZW0oaW5kZXgpOwogICAgICAgICB0aGlzLl9hcHBseVN1
Z2dlc3Rpb24odW5kZWZpbmVkLCB0cnVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSwK
QEAgLTExMzUsMTMgKzExMDcsMTMgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJv
eC5wcm90b3R5cGUgPSB7CiAgICAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPj19IGNvbXBsZXRp
b25zCiAgICAgICogQHBhcmFtIHtib29sZWFuPX0gY2FuU2hvd0ZvclNpbmdsZUl0ZW0KICAgICAg
Ki8KLSAgICB1cGRhdGVTdWdnZXN0aW9uczogZnVuY3Rpb24oYW5jaG9yQm94LCBjb21wbGV0aW9u
cywgY2FuU2hvd0ZvclNpbmdsZUl0ZW0pCisgICAgdXBkYXRlU3VnZ2VzdGlvbnM6IGZ1bmN0aW9u
KGFuY2hvckJveCwgY29tcGxldGlvbnMsIHNlbGVjdGVkSW5kZXgsIGNhblNob3dGb3JTaW5nbGVJ
dGVtKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX3N1Z2dlc3RUaW1lb3V0KSB7CiAgICAgICAg
ICAgICBjbGVhclRpbWVvdXQodGhpcy5fc3VnZ2VzdFRpbWVvdXQpOwogICAgICAgICAgICAgZGVs
ZXRlIHRoaXMuX3N1Z2dlc3RUaW1lb3V0OwogICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2NvbXBs
ZXRpb25zUmVhZHkoYW5jaG9yQm94LCBjb21wbGV0aW9ucywgY2FuU2hvd0ZvclNpbmdsZUl0ZW0p
OworICAgICAgICB0aGlzLl9jb21wbGV0aW9uc1JlYWR5KGFuY2hvckJveCwgY29tcGxldGlvbnMs
IHNlbGVjdGVkSW5kZXgsIGNhblNob3dGb3JTaW5nbGVJdGVtKTsKICAgICB9LAogCiAgICAgX29u
SXRlbU1vdXNlRG93bjogZnVuY3Rpb24odGV4dCwgZXZlbnQpCkBAIC0xMTY5LDM0ICsxMTQxLDQy
IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LlN1Z2dlc3RCb3gucHJvdG90eXBlID0gewogICAg
IH0sCiAKICAgICAvKioKKyAgICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+PX0gaXRlbXMKKyAg
ICAgKiBAcGFyYW0ge251bWJlcn0gc2VsZWN0ZWRJbmRleAogICAgICAqIEBwYXJhbSB7Ym9vbGVh
bj19IGNhblNob3dGb3JTaW5nbGVJdGVtCiAgICAgICovCi0gICAgX3VwZGF0ZUl0ZW1zOiBmdW5j
dGlvbihpdGVtcywgY2FuU2hvd0ZvclNpbmdsZUl0ZW0pCisgICAgX3VwZGF0ZUl0ZW1zOiBmdW5j
dGlvbihpdGVtcywgc2VsZWN0ZWRJbmRleCkKICAgICB7Ci0gICAgICAgIHRoaXMuY29udGVudEVs
ZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKKyAgICAgICAgdGhpcy5fbGVuZ3RoID0gaXRlbXMubGVu
Z3RoOworICAgICAgICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdt
ZW50KCk7CiAKICAgICAgICAgdmFyIHVzZXJFbnRlcmVkVGV4dCA9IHRoaXMuX3RleHRQcm9tcHQu
X3VzZXJFbnRlcmVkVGV4dDsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5n
dGg7ICsraSkgewogICAgICAgICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTsKICAgICAgICAgICAg
IHZhciBjdXJyZW50SXRlbUVsZW1lbnQgPSB0aGlzLl9jcmVhdGVJdGVtRWxlbWVudCh1c2VyRW50
ZXJlZFRleHQsIGl0ZW0pOwotICAgICAgICAgICAgdGhpcy5jb250ZW50RWxlbWVudC5hcHBlbmRD
aGlsZChjdXJyZW50SXRlbUVsZW1lbnQpOworICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hp
bGQoY3VycmVudEl0ZW1FbGVtZW50KTsKICAgICAgICAgfQogCi0gICAgICAgIHRoaXMuX3NlbGVj
dGVkRWxlbWVudCA9IGNhblNob3dGb3JTaW5nbGVJdGVtID8gdGhpcy5jb250ZW50RWxlbWVudC5m
aXJzdENoaWxkIDogbnVsbDsKLSAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0aW9uKCk7CisgICAg
ICAgIHRoaXMuY29udGVudEVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKKyAgICAgICAgdGhpcy5j
b250ZW50RWxlbWVudC5hcHBlbmRDaGlsZChmcmFnbWVudCk7CisKKyAgICAgICAgdGhpcy5fc2Vs
ZWN0ZWRFbGVtZW50ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fc2VsZWN0SXRlbShzZWxlY3RlZElu
ZGV4KTsKICAgICB9LAogCi0gICAgX3VwZGF0ZVNlbGVjdGlvbjogZnVuY3Rpb24oKQorICAgIC8q
KgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleAorICAgICAqLworICAgIF9zZWxlY3RJdGVt
OiBmdW5jdGlvbihpbmRleCkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBtaWdodCB3YW50IHNv
bWUgb3B0aW1pemF0aW9uIGlmIGJlY29tZXMgYSBib3R0bGVuZWNrLgotICAgICAgICBmb3IgKHZh
ciBjaGlsZCA9IHRoaXMuY29udGVudEVsZW1lbnQuZmlyc3RDaGlsZDsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQubmV4dFNpYmxpbmcpIHsKLSAgICAgICAgICAgIGlmIChjaGlsZCAhPT0gdGhpcy5fc2Vs
ZWN0ZWRFbGVtZW50KQotICAgICAgICAgICAgICAgIGNoaWxkLnJlbW92ZVN0eWxlQ2xhc3MoInNl
bGVjdGVkIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkRWxlbWVudCkg
ewotICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50LmFkZFN0eWxlQ2xhc3MoInNlbGVj
dGVkIik7Ci0gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEVsZW1lbnQuc2Nyb2xsSW50b1ZpZXdJ
Zk5lZWRlZChmYWxzZSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkRWxl
bWVudCkKKyAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVudC5jbGFzc0xpc3QucmVtb3Zl
KCJzZWxlY3RlZCIpOworCisgICAgICAgIHRoaXMuX3NlbGVjdGVkSW5kZXggPSBpbmRleDsKKyAg
ICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50ID0gdGhpcy5jb250ZW50RWxlbWVudC5jaGlsZE5v
ZGVzW2luZGV4XTsKKyAgICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50LmNsYXNzTGlzdC5hZGQo
InNlbGVjdGVkIik7CisKKyAgICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50LnNjcm9sbEludG9W
aWV3SWZOZWVkZWQoZmFsc2UpOwogICAgIH0sCiAKICAgICAvKioKQEAgLTEyMjgsMTAgKzEyMDgs
MTAgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJveC5wcm90b3R5cGUgPSB7CiAg
ICAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPj19IGNvbXBsZXRpb25zCiAgICAgICogQHBhcmFt
IHtib29sZWFuPX0gY2FuU2hvd0ZvclNpbmdsZUl0ZW0KICAgICAgKi8KLSAgICBfY29tcGxldGlv
bnNSZWFkeTogZnVuY3Rpb24oYW5jaG9yQm94LCBjb21wbGV0aW9ucywgY2FuU2hvd0ZvclNpbmds
ZUl0ZW0pCisgICAgX2NvbXBsZXRpb25zUmVhZHk6IGZ1bmN0aW9uKGFuY2hvckJveCwgY29tcGxl
dGlvbnMsIHNlbGVjdGVkSW5kZXgsIGNhblNob3dGb3JTaW5nbGVJdGVtKQogICAgIHsKICAgICAg
ICAgaWYgKHRoaXMuX2NhblNob3dCb3goY29tcGxldGlvbnMsIGNhblNob3dGb3JTaW5nbGVJdGVt
KSkgewotICAgICAgICAgICAgdGhpcy5fdXBkYXRlSXRlbXMoY29tcGxldGlvbnMsIGNhblNob3dG
b3JTaW5nbGVJdGVtKTsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUl0ZW1zKGNvbXBsZXRpb25z
LCBzZWxlY3RlZEluZGV4KTsKICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUJveFBvc2l0aW9uKGFu
Y2hvckJveCk7CiAgICAgICAgICAgICBpZiAoIXRoaXMudmlzaWJsZSkKICAgICAgICAgICAgICAg
ICB0aGlzLl9ib2R5RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KTsKQEAgLTEyNDIs
MjIgKzEyMjIsMjIgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJveC5wcm90b3R5
cGUgPSB7CiAKICAgICB1cEtleVByZXNzZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuX29uUHJldmlvdXNJdGVtKGV2ZW50LCBmYWxzZSk7CisgICAgICAgIHJl
dHVybiB0aGlzLl9zZWxlY3RDbG9zZXN0KC0xLCB0cnVlKTsKICAgICB9LAogCiAgICAgZG93bktl
eVByZXNzZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX29u
TmV4dEl0ZW0oZXZlbnQsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdENsb3Nl
c3QoMSwgdHJ1ZSk7CiAgICAgfSwKIAogICAgIHBhZ2VVcEtleVByZXNzZWQ6IGZ1bmN0aW9uKGV2
ZW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX29uUHJldmlvdXNJdGVtKGV2ZW50LCB0
cnVlKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdENsb3Nlc3QoLXRoaXMuX3Jvd0NvdW50
UGVyVmlld3BvcnQsIGZhbHNlKTsKICAgICB9LAogCiAgICAgcGFnZURvd25LZXlQcmVzc2VkOiBm
dW5jdGlvbihldmVudCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9vbk5leHRJdGVtKGV2
ZW50LCB0cnVlKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdENsb3Nlc3QodGhpcy5fcm93
Q291bnRQZXJWaWV3cG9ydCwgZmFsc2UpOwogICAgIH0sCiAKICAgICBlbnRlcktleVByZXNzZWQ6
IGZ1bmN0aW9uKGV2ZW50KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164998</attachid>
            <date>2012-09-20 15:41:14 -0700</date>
            <delta_ts>2012-09-24 09:34:08 -0700</delta_ts>
            <desc>Implement selection of non-first item in WebInspector.TextPrompt.SuggestBox</desc>
            <filename>sort.diff</filename>
            <type>text/plain</type>
            <size>17918</size>
            <attacher name="Nikita Vasilyev">me</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwOTc1OTgzLi4zNzI0YzkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMg
QEAKKzIwMTItMDktMjAgIE5pa2l0YSBWYXNpbHlldiAgPG1lQGVsdjFzLnJ1PgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IENTUyBwcm9wZXJ0eSBuYW1lcyBhdXRvY29tcGxldGU6IFN1Z2dlc3Qg
bW9zdCB1c2VkIHJhdGhlciB0aGFuIGFscGhhYmV0aWNhbHkgZmlyc3QKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NzYzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IHNlbGVjdGlvbiBvZiBu
b24tZmlyc3QgaXRlbSBpbiBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5TdWdnZXN0Qm94LgorCisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NDb21wbGV0aW9ucy5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5XZWlnaHQpOiBDb2xsZWN0IG1vc3QgdXNlZCBD
U1MgcHJvcGVydHkgbmFtZXMuIFJhcmVseSB1c2VkIHByb3BlcnRpZXMgYXJlIG5vdCBwcmVzZW50
ZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMucHJvdG90eXBlLmZpcnN0
U3RhcnRzV2l0aCk6IFJlbW92ZSB1bnVzZWQgZnVuY3Rpb24uCisgICAgICAgIChXZWJJbnNwZWN0
b3IuQ1NTQ29tcGxldGlvbnMucHJvdG90eXBlLm1vc3RVc2VkT2YpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanM6CisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC9UZXh0UHJvbXB0LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9t
cHQucHJvdG90eXBlLl9jb21wbGV0aW9uc1JlYWR5KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5U
ZXh0UHJvbXB0LnByb3RvdHlwZS5wYWdlRG93bktleVByZXNzZWQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJveCk6IEludHJvZHVjZSBfbGVuZ3RoIGFuZCBfc2Vs
ZWN0ZWRJbmRleCB0byByZW1vdmUgdW5uZWNlc3NhcnkgRE9NIHRyYXZlcnNhbHMuCisgICAgICAg
ICAgICBTaW1wbGlmeSBjYW5TaG93Rm9yU2luZ2xlSXRlbSBsb2dpYy4KKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0UHJvbXB0LlN1Z2dlc3RCb3gucHJvdG90eXBlLl9zZWxlY3RDbG9zZXN0KTog
X29uUHJldmlvdXNJdGVtIGFuZCBfb25OZXh0SXRlbSBoYWQgc29tZSBsb2dpYyBkdXBsaWNhdGlv
biBzbyBJIAorICAgICAgICAgICAgICAgIHJlcGxhY2VkIHRoZW0gd2l0aCB0aGlzIG1ldGhvZC4K
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LlN1Z2dlc3RCb3gucHJvdG90eXBlLnVw
ZGF0ZVN1Z2dlc3Rpb25zKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LlN1Z2dl
c3RCb3gucHJvdG90eXBlLl91cGRhdGVJdGVtcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4
dFByb21wdC5TdWdnZXN0Qm94LnByb3RvdHlwZS5fc2VsZWN0SXRlbSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuVGV4dFByb21wdC5TdWdnZXN0Qm94LnByb3RvdHlwZS5fY29tcGxldGlvbnNSZWFk
eSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5TdWdnZXN0Qm94LnByb3RvdHlw
ZS51cEtleVByZXNzZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQuU3VnZ2Vz
dEJveC5wcm90b3R5cGUuZG93bktleVByZXNzZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRl
eHRQcm9tcHQuU3VnZ2VzdEJveC5wcm90b3R5cGUucGFnZVVwS2V5UHJlc3NlZCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5TdWdnZXN0Qm94LnByb3RvdHlwZS5wYWdlRG93bktl
eVByZXNzZWQpOgorCiAyMDEyLTA5LTE5ICBEb21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29n
bGUuY29tPgogCiAgICAgICAgIEFYOiBBIGZldyBjb250cm9sIHR5cGVzIGFyZSByZXR1cm5pbmcg
dGhlIHdyb25nIGFuc3dlciBmb3IgaXNSZWFkT25seQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NDb21wbGV0aW9ucy5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTQ29tcGxldGlvbnMuanMKaW5kZXggOWUzNzk4NS4uM2Ew
YTRkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DU1ND
b21wbGV0aW9ucy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NT
U0NvbXBsZXRpb25zLmpzCkBAIC05MCw2ICs5MCwxMjUgQEAgV2ViSW5zcGVjdG9yLkNTU0NvbXBs
ZXRpb25zLmNzc1Byb3BlcnRpZXNNZXRhaW5mb0tleVNldCA9IGZ1bmN0aW9uKCkKICAgICByZXR1
cm4gV2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zLl9jc3NQcm9wZXJ0aWVzTWV0YWluZm9LZXlT
ZXQ7CiB9CiAKK1dlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5XZWlnaHQgPSB7CisgICAgIi13
ZWJraXQtYW5pbWF0aW9uIjogMSwKKyAgICAiLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb24iOiAx
LAorICAgICItd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQiOiAxLAorICAgICItd2Vi
a2l0LWFuaW1hdGlvbi1uYW1lIjogMSwKKyAgICAiLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1
bmN0aW9uIjogMSwKKyAgICAiLXdlYmtpdC1hcHBlYXJhbmNlIjogMSwKKyAgICAiLXdlYmtpdC1i
YWNrZ3JvdW5kLWNsaXAiOiAyLAorICAgICItd2Via2l0LWJvcmRlci1ob3Jpem9udGFsLXNwYWNp
bmciOiAxLAorICAgICItd2Via2l0LWJvcmRlci12ZXJ0aWNhbC1zcGFjaW5nIjogMSwKKyAgICAi
LXdlYmtpdC1ib3gtc2hhZG93IjogMjQsCisgICAgIi13ZWJraXQtZm9udC1zbW9vdGhpbmciOiAy
LAorICAgICItd2Via2l0LXRyYW5zZm9ybSI6IDEsCisgICAgIi13ZWJraXQtdHJhbnNpdGlvbiI6
IDgsCisgICAgIi13ZWJraXQtdHJhbnNpdGlvbi1kZWxheSI6IDcsCisgICAgIi13ZWJraXQtdHJh
bnNpdGlvbi1kdXJhdGlvbiI6IDcsCisgICAgIi13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eSI6
IDcsCisgICAgIi13ZWJraXQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iOiA2LAorICAgICIt
d2Via2l0LXVzZXItc2VsZWN0IjogMSwKKyAgICAiYmFja2dyb3VuZCI6IDIyMiwKKyAgICAiYmFj
a2dyb3VuZC1hdHRhY2htZW50IjogMTQ0LAorICAgICJiYWNrZ3JvdW5kLWNsaXAiOiAxNDMsCisg
ICAgImJhY2tncm91bmQtY29sb3IiOiAyMjIsCisgICAgImJhY2tncm91bmQtaW1hZ2UiOiAyMDEs
CisgICAgImJhY2tncm91bmQtb3JpZ2luIjogMTQyLAorICAgICJiYWNrZ3JvdW5kLXNpemUiOiAy
NSwKKyAgICAiYm9yZGVyIjogMTIxLAorICAgICJib3JkZXItYm90dG9tIjogMTIxLAorICAgICJi
b3JkZXItYm90dG9tLWNvbG9yIjogMTIxLAorICAgICJib3JkZXItYm90dG9tLWxlZnQtcmFkaXVz
IjogNTAsCisgICAgImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjogNTAsCisgICAgImJvcmRl
ci1ib3R0b20tc3R5bGUiOiAxMTQsCisgICAgImJvcmRlci1ib3R0b20td2lkdGgiOiAxMjAsCisg
ICAgImJvcmRlci1jb2xsYXBzZSI6IDMsCisgICAgImJvcmRlci1sZWZ0IjogOTUsCisgICAgImJv
cmRlci1sZWZ0LWNvbG9yIjogOTUsCisgICAgImJvcmRlci1sZWZ0LXN0eWxlIjogODksCisgICAg
ImJvcmRlci1sZWZ0LXdpZHRoIjogOTQsCisgICAgImJvcmRlci1yYWRpdXMiOiA1MCwKKyAgICAi
Ym9yZGVyLXJpZ2h0IjogOTMsCisgICAgImJvcmRlci1yaWdodC1jb2xvciI6IDkzLAorICAgICJi
b3JkZXItcmlnaHQtc3R5bGUiOiA4OCwKKyAgICAiYm9yZGVyLXJpZ2h0LXdpZHRoIjogOTMsCisg
ICAgImJvcmRlci10b3AiOiAxMTEsCisgICAgImJvcmRlci10b3AtY29sb3IiOiAxMTEsCisgICAg
ImJvcmRlci10b3AtbGVmdC1yYWRpdXMiOiA0OSwKKyAgICAiYm9yZGVyLXRvcC1yaWdodC1yYWRp
dXMiOiA0OSwKKyAgICAiYm9yZGVyLXRvcC1zdHlsZSI6IDEwNCwKKyAgICAiYm9yZGVyLXRvcC13
aWR0aCI6IDEwOSwKKyAgICAiYm90dG9tIjogMTYsCisgICAgImJveC1zaGFkb3ciOiAyNSwKKyAg
ICAiYm94LXNpemluZyI6IDIsCisgICAgImNsZWFyIjogMjMsCisgICAgImNvbG9yIjogMjM3LAor
ICAgICJjdXJzb3IiOiAzNCwKKyAgICAiZGlyZWN0aW9uIjogNCwKKyAgICAiZGlzcGxheSI6IDIx
MCwKKyAgICAiZmlsbCI6IDIsCisgICAgImZpbHRlciI6IDEsCisgICAgImZsb2F0IjogMTA1LAor
ICAgICJmb250IjogMTc0LAorICAgICJmb250LWZhbWlseSI6IDI1LAorICAgICJmb250LXNpemUi
OiAxNzQsCisgICAgImZvbnQtc3R5bGUiOiA5LAorICAgICJmb250LXdlaWdodCI6IDg5LAorICAg
ICJoZWlnaHQiOiAxNjEsCisgICAgImxlZnQiOiA1NCwKKyAgICAibGV0dGVyLXNwYWNpbmciOiAz
LAorICAgICJsaW5lLWhlaWdodCI6IDc1LAorICAgICJsaXN0LXN0eWxlIjogMTcsCisgICAgImxp
c3Qtc3R5bGUtaW1hZ2UiOiA4LAorICAgICJsaXN0LXN0eWxlLXBvc2l0aW9uIjogOCwKKyAgICAi
bGlzdC1zdHlsZS10eXBlIjogMTcsCisgICAgIm1hcmdpbiI6IDI0MSwKKyAgICAibWFyZ2luLWJv
dHRvbSI6IDIyNiwKKyAgICAibWFyZ2luLWxlZnQiOiAyMjUsCisgICAgIm1hcmdpbi1yaWdodCI6
IDIxMywKKyAgICAibWFyZ2luLXRvcCI6IDI0MSwKKyAgICAibWF4LWhlaWdodCI6IDUsCisgICAg
Im1heC13aWR0aCI6IDExLAorICAgICJtaW4taGVpZ2h0IjogOSwKKyAgICAibWluLXdpZHRoIjog
NiwKKyAgICAib3BhY2l0eSI6IDI0LAorICAgICJvdXRsaW5lIjogMTAsCisgICAgIm91dGxpbmUt
Y29sb3IiOiAxMCwKKyAgICAib3V0bGluZS1zdHlsZSI6IDEwLAorICAgICJvdXRsaW5lLXdpZHRo
IjogMTAsCisgICAgIm92ZXJmbG93IjogNTcsCisgICAgIm92ZXJmbG93LXgiOiA1NiwKKyAgICAi
b3ZlcmZsb3cteSI6IDU3LAorICAgICJwYWRkaW5nIjogMjE2LAorICAgICJwYWRkaW5nLWJvdHRv
bSI6IDIwOCwKKyAgICAicGFkZGluZy1sZWZ0IjogMjE2LAorICAgICJwYWRkaW5nLXJpZ2h0Ijog
MjA2LAorICAgICJwYWRkaW5nLXRvcCI6IDIxNiwKKyAgICAicG9zaXRpb24iOiAxMzYsCisgICAg
InJlc2l6ZSI6IDEsCisgICAgInJpZ2h0IjogMjksCisgICAgInN0cm9rZSI6IDEsCisgICAgInN0
cm9rZS13aWR0aCI6IDEsCisgICAgInRhYmxlLWxheW91dCI6IDEsCisgICAgInRleHQtYWxpZ24i
OiA2NiwKKyAgICAidGV4dC1kZWNvcmF0aW9uIjogNTMsCisgICAgInRleHQtaW5kZW50IjogOSwK
KyAgICAidGV4dC1vdmVyZmxvdyI6IDgsCisgICAgInRleHQtc2hhZG93IjogMTksCisgICAgInRl
eHQtdHJhbnNmb3JtIjogNSwKKyAgICAidG9wIjogNzEsCisgICAgInVuaWNvZGUtYmlkaSI6IDEs
CisgICAgInZlcnRpY2FsLWFsaWduIjogMzcsCisgICAgInZpc2liaWxpdHkiOiAxMSwKKyAgICAi
d2hpdGUtc3BhY2UiOiAyNCwKKyAgICAid2lkdGgiOiAyNTUsCisgICAgIndvcmQtd3JhcCI6IDYs
CisgICAgInotaW5kZXgiOiAzMiwKKyAgICAiem9vbSI6IDEwCit9OworCisKIFdlYkluc3BlY3Rv
ci5DU1NDb21wbGV0aW9ucy5wcm90b3R5cGUgPSB7CiAgICAgc3RhcnRzV2l0aDogZnVuY3Rpb24o
cHJlZml4KQogICAgIHsKQEAgLTEwMCwxMyArMjE5LDI2IEBAIFdlYkluc3BlY3Rvci5DU1NDb21w
bGV0aW9ucy5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciByZXN1bHRzID0gW107CiAgICAgICAg
IHdoaWxlIChmaXJzdEluZGV4IDwgdGhpcy5fdmFsdWVzLmxlbmd0aCAmJiB0aGlzLl92YWx1ZXNb
Zmlyc3RJbmRleF0uc3RhcnRzV2l0aChwcmVmaXgpKQogICAgICAgICAgICAgcmVzdWx0cy5wdXNo
KHRoaXMuX3ZhbHVlc1tmaXJzdEluZGV4KytdKTsKKwogICAgICAgICByZXR1cm4gcmVzdWx0czsK
ICAgICB9LAogCi0gICAgZmlyc3RTdGFydHNXaXRoOiBmdW5jdGlvbihwcmVmaXgpCisgICAgLyoq
CisgICAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gcHJvcGVydGllcworICAgICAqIEByZXR1
cm4ge251bWJlcn0KKyAgICAgKi8KKyAgICBtb3N0VXNlZE9mOiBmdW5jdGlvbihwcm9wZXJ0aWVz
KQogICAgIHsKLSAgICAgICAgdmFyIGZvdW5kSW5kZXggPSB0aGlzLl9maXJzdEluZGV4T2ZQcmVm
aXgocHJlZml4KTsKLSAgICAgICAgcmV0dXJuIChmb3VuZEluZGV4ID09PSAtMSA/ICIiIDogdGhp
cy5fdmFsdWVzW2ZvdW5kSW5kZXhdKTsKKyAgICAgICAgdmFyIG1heFdlaWdodCA9IDA7CisgICAg
ICAgIHZhciBpbmRleCA9IDA7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGll
cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIHdlaWdodCA9IFdlYkluc3BlY3Rvci5D
U1NDb21wbGV0aW9ucy5XZWlnaHRbcHJvcGVydGllc1tpXV07CisgICAgICAgICAgICBpZiAod2Vp
Z2h0ID4gbWF4V2VpZ2h0KSB7CisgICAgICAgICAgICAgICAgbWF4V2VpZ2h0ID0gd2VpZ2h0Owor
ICAgICAgICAgICAgICAgIGluZGV4ID0gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gaW5kZXg7CiAgICAgfSwKIAogICAgIF9maXJzdEluZGV4T2ZQcmVmaXg6IGZ1
bmN0aW9uKHByZWZpeCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzCmluZGV4IDZjZTdiNzkuLmNhY2RlNmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBh
bmUuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRl
YmFyUGFuZS5qcwpAQCAtMjY2NCw3ICsyNjY0LDggQEAgV2ViSW5zcGVjdG9yLlN0eWxlc1NpZGVi
YXJQYW5lLkNTU1Byb3BlcnR5UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVy
bjsKIAogICAgICAgICB2YXIgcmVzdWx0cyA9IHRoaXMuX2Nzc0NvbXBsZXRpb25zLnN0YXJ0c1dp
dGgocHJlZml4KTsKLSAgICAgICAgY29tcGxldGlvbnNSZWFkeUNhbGxiYWNrKHJlc3VsdHMpOwor
ICAgICAgICB2YXIgc2VsZWN0ZWRJbmRleCA9IHRoaXMuX2Nzc0NvbXBsZXRpb25zLm1vc3RVc2Vk
T2YocmVzdWx0cyk7CisgICAgICAgIGNvbXBsZXRpb25zUmVhZHlDYWxsYmFjayhyZXN1bHRzLCBz
ZWxlY3RlZEluZGV4KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvVGV4dFByb21wdC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvVGV4dFByb21wdC5qcwppbmRleCBjNDBkZjRmLi5lODU3NWRiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRQcm9tcHQuanMKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0UHJvbXB0LmpzCkBAIC00
MzMsOCArNDMzLDkgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlID0gewogICAg
ICAqIEBwYXJhbSB7UmFuZ2V9IG9yaWdpbmFsV29yZFByZWZpeFJhbmdlCiAgICAgICogQHBhcmFt
IHtib29sZWFufSByZXZlcnNlCiAgICAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPj19IGNvbXBs
ZXRpb25zCisgICAgICogQHBhcmFtIHtudW1iZXI9MH0gc2VsZWN0ZWRJbmRleAogICAgICAqLwot
ICAgIF9jb21wbGV0aW9uc1JlYWR5OiBmdW5jdGlvbihzZWxlY3Rpb24sIGF1dG8sIG9yaWdpbmFs
V29yZFByZWZpeFJhbmdlLCByZXZlcnNlLCBjb21wbGV0aW9ucykKKyAgICBfY29tcGxldGlvbnNS
ZWFkeTogZnVuY3Rpb24oc2VsZWN0aW9uLCBhdXRvLCBvcmlnaW5hbFdvcmRQcmVmaXhSYW5nZSwg
cmV2ZXJzZSwgY29tcGxldGlvbnMsIHNlbGVjdGVkSW5kZXgpCiAgICAgewogICAgICAgICBpZiAo
IXRoaXMuX3dhaXRpbmdGb3JDb21wbGV0aW9ucyB8fCAhY29tcGxldGlvbnMgfHwgIWNvbXBsZXRp
b25zLmxlbmd0aCkgewogICAgICAgICAgICAgdGhpcy5oaWRlU3VnZ2VzdEJveCgpOwpAQCAtNDUx
LDI5ICs0NTIsMzIgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlID0gewogICAg
ICAgICBpZiAob3JpZ2luYWxXb3JkUHJlZml4UmFuZ2UudG9TdHJpbmcoKSArIHNlbGVjdGlvblJh
bmdlLnRvU3RyaW5nKCkgIT0gZnVsbFdvcmRSYW5nZS50b1N0cmluZygpKQogICAgICAgICAgICAg
cmV0dXJuOwogCisgICAgICAgIGlmICghc2VsZWN0ZWRJbmRleCkKKyAgICAgICAgICAgIHNlbGVj
dGVkSW5kZXggPSAwOworCiAgICAgICAgIHRoaXMuX3VzZXJFbnRlcmVkUmFuZ2UgPSBmdWxsV29y
ZFJhbmdlOwogICAgICAgICB0aGlzLl91c2VyRW50ZXJlZFRleHQgPSBmdWxsV29yZFJhbmdlLnRv
U3RyaW5nKCk7CiAKICAgICAgICAgaWYgKHRoaXMuX3N1Z2dlc3RCb3gpCi0gICAgICAgICAgICB0
aGlzLl9zdWdnZXN0Qm94LnVwZGF0ZVN1Z2dlc3Rpb25zKHRoaXMuX2JveEZvckFuY2hvckF0U3Rh
cnQoc2VsZWN0aW9uLCBmdWxsV29yZFJhbmdlKSwgY29tcGxldGlvbnMsICF0aGlzLmlzQ2FyZXRB
dEVuZE9mUHJvbXB0KCkpOworICAgICAgICAgICAgdGhpcy5fc3VnZ2VzdEJveC51cGRhdGVTdWdn
ZXN0aW9ucyh0aGlzLl9ib3hGb3JBbmNob3JBdFN0YXJ0KHNlbGVjdGlvbiwgZnVsbFdvcmRSYW5n
ZSksIGNvbXBsZXRpb25zLCBzZWxlY3RlZEluZGV4LCAhdGhpcy5pc0NhcmV0QXRFbmRPZlByb21w
dCgpKTsKIAogICAgICAgICB2YXIgd29yZFByZWZpeExlbmd0aCA9IG9yaWdpbmFsV29yZFByZWZp
eFJhbmdlLnRvU3RyaW5nKCkubGVuZ3RoOwogCiAgICAgICAgIGlmIChhdXRvKSB7Ci0gICAgICAg
ICAgICB2YXIgY29tcGxldGlvblRleHQgPSBjb21wbGV0aW9uc1swXTsKKyAgICAgICAgICAgIHZh
ciBjb21wbGV0aW9uVGV4dCA9IGNvbXBsZXRpb25zW3NlbGVjdGVkSW5kZXhdOwogICAgICAgICAg
ICAgdmFyIGNvbW1vblByZWZpeCA9IHRoaXMuX2J1aWxkQ29tbW9uUHJlZml4KGNvbXBsZXRpb25z
LCB3b3JkUHJlZml4TGVuZ3RoKTsKIAogICAgICAgICAgICAgdGhpcy5fY29tbW9uUHJlZml4ID0g
Y29tbW9uUHJlZml4OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGNvbXBsZXRp
b25zLmxlbmd0aCA9PT0gMSkgewotICAgICAgICAgICAgICAgIHZhciBjb21wbGV0aW9uVGV4dCA9
IGNvbXBsZXRpb25zWzBdOworICAgICAgICAgICAgICAgIHZhciBjb21wbGV0aW9uVGV4dCA9IGNv
bXBsZXRpb25zW3NlbGVjdGVkSW5kZXhdOwogICAgICAgICAgICAgICAgIHdvcmRQcmVmaXhMZW5n
dGggPSBjb21wbGV0aW9uVGV4dC5sZW5ndGg7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgIHZhciBjb21tb25QcmVmaXggPSB0aGlzLl9idWlsZENvbW1vblByZWZpeChjb21w
bGV0aW9ucywgd29yZFByZWZpeExlbmd0aCk7CiAgICAgICAgICAgICAgICAgd29yZFByZWZpeExl
bmd0aCA9IGNvbW1vblByZWZpeC5sZW5ndGg7CiAKICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0
aW9uLmlzQ29sbGFwc2VkKQotICAgICAgICAgICAgICAgICAgICB2YXIgY29tcGxldGlvblRleHQg
PSBjb21wbGV0aW9uc1swXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBsZXRpb25UZXh0
ID0gY29tcGxldGlvbnNbc2VsZWN0ZWRJbmRleF07CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50VGV4dCA9IGZ1bGxXb3JkUmFuZ2UudG9TdHJp
bmcoKTsKIApAQCAtNDg1LDcgKzQ4OSw3IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3Rv
dHlwZSA9IHsKIAogICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEluZGV4ID0gZm91bmRJbmRl
eCArIChyZXZlcnNlID8gLTEgOiAxKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kSW5k
ZXggPT09IG51bGwgfHwgbmV4dEluZGV4ID49IGNvbXBsZXRpb25zLmxlbmd0aCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBjb21wbGV0aW9uVGV4dCA9IGNvbXBsZXRpb25zWzBdOworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBsZXRpb25UZXh0ID0gY29tcGxldGlvbnNbc2Vs
ZWN0ZWRJbmRleF07CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5leHRJbmRleCA8IDAp
CiAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcGxldGlvblRleHQgPSBjb21wbGV0aW9u
c1tjb21wbGV0aW9ucy5sZW5ndGggLSAxXTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQpAQCAt
NzQ5LDcgKzc1Myw3IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9zdWdnZXN0Qm94LnBhZ2VEb3duS2V5UHJlc3NlZChldmVu
dCk7CiAKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0sCisgICAgfQogfQogCiBXZWJJbnNw
ZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVj
dC5wcm90b3R5cGU7CkBAIC05MjksNiArOTMzLDggQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQu
U3VnZ2VzdEJveCA9IGZ1bmN0aW9uKHRleHRQcm9tcHQsIGlucHV0RWxlbWVudCwgY2xhc3NOYW0K
IHsKICAgICB0aGlzLl90ZXh0UHJvbXB0ID0gdGV4dFByb21wdDsKICAgICB0aGlzLl9pbnB1dEVs
ZW1lbnQgPSBpbnB1dEVsZW1lbnQ7CisgICAgdGhpcy5fbGVuZ3RoID0gMDsKKyAgICB0aGlzLl9z
ZWxlY3RlZEluZGV4ID0gLTE7CiAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50ID0gbnVsbDsKICAg
ICB0aGlzLl9ib3VuZE9uU2Nyb2xsID0gdGhpcy5fb25zY3JvbGxyZXNpemUuYmluZCh0aGlzLCB0
cnVlKTsKICAgICB0aGlzLl9ib3VuZE9uUmVzaXplID0gdGhpcy5fb25zY3JvbGxyZXNpemUuYmlu
ZCh0aGlzLCBmYWxzZSk7CkBAIC0xMDcyLDYwICsxMDc4LDI2IEBAIFdlYkluc3BlY3Rvci5UZXh0
UHJvbXB0LlN1Z2dlc3RCb3gucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9LAogCi0gICAgX29uTmV4dEl0ZW06IGZ1bmN0aW9uKGV2ZW50LCBpc1BhZ2VTY3JvbGwpCisg
ICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IHNoaWZ0CisgICAgICogQHBhcmFtIHtib29s
ZWFuPX0gaXNDaXJjdWxhcgorICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGlzIGNoYW5nZWQKKyAg
ICAgKi8KKyAgICBfc2VsZWN0Q2xvc2VzdDogZnVuY3Rpb24oc2hpZnQsIGlzQ2lyY3VsYXIpCiAg
ICAgewotICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNvbnRlbnRFbGVtZW50LmNoaWxkTm9k
ZXM7Ci0gICAgICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKQorICAgICAgICBpZiAoIXRoaXMuX2xl
bmd0aCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoIXRoaXMuX3Nl
bGVjdGVkRWxlbWVudCkKLSAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVudCA9IHRoaXMu
Y29udGVudEVsZW1lbnQuZmlyc3RDaGlsZDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBp
ZiAoIWlzUGFnZVNjcm9sbCkKLSAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEVsZW1lbnQg
PSB0aGlzLl9zZWxlY3RlZEVsZW1lbnQubmV4dFNpYmxpbmcgfHwgdGhpcy5jb250ZW50RWxlbWVu
dC5maXJzdENoaWxkOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNh
bmRpZGF0ZSA9IHRoaXMuX3NlbGVjdGVkRWxlbWVudDsKLQotICAgICAgICAgICAgICAgIGZvciAo
dmFyIGl0ZW1zTGVmdCA9IHRoaXMuX3Jvd0NvdW50UGVyVmlld3BvcnQ7IGl0ZW1zTGVmdDsgLS1p
dGVtc0xlZnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS5uZXh0U2libGlu
ZykKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZS5uZXh0U2li
bGluZzsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0
ZWRFbGVtZW50ID0gY2FuZGlkYXRlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IHRoaXMuX3VwZGF0ZVNlbGVjdGlvbigpOwotICAgICAgICB0aGlzLl9hcHBseVN1Z2dlc3Rpb24o
dW5kZWZpbmVkLCB0cnVlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKKyAgICAgICAg
dmFyIGluZGV4ID0gdGhpcy5fc2VsZWN0ZWRJbmRleCArIHNoaWZ0OwogCi0gICAgX29uUHJldmlv
dXNJdGVtOiBmdW5jdGlvbihldmVudCwgaXNQYWdlU2Nyb2xsKQotICAgIHsKLSAgICAgICAgdmFy
IGNoaWxkcmVuID0gdGhpcy5jb250ZW50RWxlbWVudC5jaGlsZE5vZGVzOwotICAgICAgICBpZiAo
IWNoaWxkcmVuLmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBp
ZiAoIXRoaXMuX3NlbGVjdGVkRWxlbWVudCkKLSAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRWxl
bWVudCA9IHRoaXMuY29udGVudEVsZW1lbnQubGFzdENoaWxkOworICAgICAgICBpZiAoaXNDaXJj
dWxhcikKKyAgICAgICAgICAgIGluZGV4ID0gKHRoaXMuX2xlbmd0aCArIGluZGV4KSAlIHRoaXMu
X2xlbmd0aDsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIWlzUGFnZVNjcm9sbCkK
LSAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEVsZW1lbnQgPSB0aGlzLl9zZWxlY3RlZEVs
ZW1lbnQucHJldmlvdXNTaWJsaW5nIHx8IHRoaXMuY29udGVudEVsZW1lbnQubGFzdENoaWxkOwot
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNhbmRpZGF0ZSA9IHRoaXMu
X3NlbGVjdGVkRWxlbWVudDsKLQotICAgICAgICAgICAgICAgIGZvciAodmFyIGl0ZW1zTGVmdCA9
IHRoaXMuX3Jvd0NvdW50UGVyVmlld3BvcnQ7IGl0ZW1zTGVmdDsgLS1pdGVtc0xlZnQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS5wcmV2aW91c1NpYmxpbmcpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBjYW5kaWRhdGUucHJldmlvdXNTaWJsaW5nOwot
ICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEVsZW1l
bnQgPSBjYW5kaWRhdGU7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpbmRleCA9IE1hdGgu
bWF4KGluZGV4LCAwKTsKKyAgICAgICAgICAgIGluZGV4ID0gTWF0aC5taW4oaW5kZXgsIHRoaXMu
X2xlbmd0aCAtIDEpOwogICAgICAgICB9Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGlvbigp
OworCisgICAgICAgIHRoaXMuX3NlbGVjdEl0ZW0oaW5kZXgpOwogICAgICAgICB0aGlzLl9hcHBs
eVN1Z2dlc3Rpb24odW5kZWZpbmVkLCB0cnVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fSwKQEAgLTExMzUsMTMgKzExMDcsMTMgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQuU3VnZ2Vz
dEJveC5wcm90b3R5cGUgPSB7CiAgICAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPj19IGNvbXBs
ZXRpb25zCiAgICAgICogQHBhcmFtIHtib29sZWFuPX0gY2FuU2hvd0ZvclNpbmdsZUl0ZW0KICAg
ICAgKi8KLSAgICB1cGRhdGVTdWdnZXN0aW9uczogZnVuY3Rpb24oYW5jaG9yQm94LCBjb21wbGV0
aW9ucywgY2FuU2hvd0ZvclNpbmdsZUl0ZW0pCisgICAgdXBkYXRlU3VnZ2VzdGlvbnM6IGZ1bmN0
aW9uKGFuY2hvckJveCwgY29tcGxldGlvbnMsIHNlbGVjdGVkSW5kZXgsIGNhblNob3dGb3JTaW5n
bGVJdGVtKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX3N1Z2dlc3RUaW1lb3V0KSB7CiAgICAg
ICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fc3VnZ2VzdFRpbWVvdXQpOwogICAgICAgICAgICAg
ZGVsZXRlIHRoaXMuX3N1Z2dlc3RUaW1lb3V0OwogICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2Nv
bXBsZXRpb25zUmVhZHkoYW5jaG9yQm94LCBjb21wbGV0aW9ucywgY2FuU2hvd0ZvclNpbmdsZUl0
ZW0pOworICAgICAgICB0aGlzLl9jb21wbGV0aW9uc1JlYWR5KGFuY2hvckJveCwgY29tcGxldGlv
bnMsIHNlbGVjdGVkSW5kZXgsIGNhblNob3dGb3JTaW5nbGVJdGVtKTsKICAgICB9LAogCiAgICAg
X29uSXRlbU1vdXNlRG93bjogZnVuY3Rpb24odGV4dCwgZXZlbnQpCkBAIC0xMTY5LDM0ICsxMTQx
LDQyIEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LlN1Z2dlc3RCb3gucHJvdG90eXBlID0gewog
ICAgIH0sCiAKICAgICAvKioKKyAgICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+PX0gaXRlbXMK
KyAgICAgKiBAcGFyYW0ge251bWJlcn0gc2VsZWN0ZWRJbmRleAogICAgICAqIEBwYXJhbSB7Ym9v
bGVhbj19IGNhblNob3dGb3JTaW5nbGVJdGVtCiAgICAgICovCi0gICAgX3VwZGF0ZUl0ZW1zOiBm
dW5jdGlvbihpdGVtcywgY2FuU2hvd0ZvclNpbmdsZUl0ZW0pCisgICAgX3VwZGF0ZUl0ZW1zOiBm
dW5jdGlvbihpdGVtcywgc2VsZWN0ZWRJbmRleCkKICAgICB7Ci0gICAgICAgIHRoaXMuY29udGVu
dEVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKKyAgICAgICAgdGhpcy5fbGVuZ3RoID0gaXRlbXMu
bGVuZ3RoOworICAgICAgICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZy
YWdtZW50KCk7CiAKICAgICAgICAgdmFyIHVzZXJFbnRlcmVkVGV4dCA9IHRoaXMuX3RleHRQcm9t
cHQuX3VzZXJFbnRlcmVkVGV4dDsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5s
ZW5ndGg7ICsraSkgewogICAgICAgICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTsKICAgICAgICAg
ICAgIHZhciBjdXJyZW50SXRlbUVsZW1lbnQgPSB0aGlzLl9jcmVhdGVJdGVtRWxlbWVudCh1c2Vy
RW50ZXJlZFRleHQsIGl0ZW0pOwotICAgICAgICAgICAgdGhpcy5jb250ZW50RWxlbWVudC5hcHBl
bmRDaGlsZChjdXJyZW50SXRlbUVsZW1lbnQpOworICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5k
Q2hpbGQoY3VycmVudEl0ZW1FbGVtZW50KTsKICAgICAgICAgfQogCi0gICAgICAgIHRoaXMuX3Nl
bGVjdGVkRWxlbWVudCA9IGNhblNob3dGb3JTaW5nbGVJdGVtID8gdGhpcy5jb250ZW50RWxlbWVu
dC5maXJzdENoaWxkIDogbnVsbDsKLSAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0aW9uKCk7Cisg
ICAgICAgIHRoaXMuY29udGVudEVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKKyAgICAgICAgdGhp
cy5jb250ZW50RWxlbWVudC5hcHBlbmRDaGlsZChmcmFnbWVudCk7CisKKyAgICAgICAgdGhpcy5f
c2VsZWN0ZWRFbGVtZW50ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fc2VsZWN0SXRlbShzZWxlY3Rl
ZEluZGV4KTsKICAgICB9LAogCi0gICAgX3VwZGF0ZVNlbGVjdGlvbjogZnVuY3Rpb24oKQorICAg
IC8qKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleAorICAgICAqLworICAgIF9zZWxlY3RJ
dGVtOiBmdW5jdGlvbihpbmRleCkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBtaWdodCB3YW50
IHNvbWUgb3B0aW1pemF0aW9uIGlmIGJlY29tZXMgYSBib3R0bGVuZWNrLgotICAgICAgICBmb3Ig
KHZhciBjaGlsZCA9IHRoaXMuY29udGVudEVsZW1lbnQuZmlyc3RDaGlsZDsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQubmV4dFNpYmxpbmcpIHsKLSAgICAgICAgICAgIGlmIChjaGlsZCAhPT0gdGhpcy5f
c2VsZWN0ZWRFbGVtZW50KQotICAgICAgICAgICAgICAgIGNoaWxkLnJlbW92ZVN0eWxlQ2xhc3Mo
InNlbGVjdGVkIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkRWxlbWVu
dCkgewotICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50LmFkZFN0eWxlQ2xhc3MoInNl
bGVjdGVkIik7Ci0gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEVsZW1lbnQuc2Nyb2xsSW50b1Zp
ZXdJZk5lZWRlZChmYWxzZSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVk
RWxlbWVudCkKKyAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVudC5jbGFzc0xpc3QucmVt
b3ZlKCJzZWxlY3RlZCIpOworCisgICAgICAgIHRoaXMuX3NlbGVjdGVkSW5kZXggPSBpbmRleDsK
KyAgICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50ID0gdGhpcy5jb250ZW50RWxlbWVudC5jaGls
ZE5vZGVzW2luZGV4XTsKKyAgICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50LmNsYXNzTGlzdC5h
ZGQoInNlbGVjdGVkIik7CisKKyAgICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50LnNjcm9sbElu
dG9WaWV3SWZOZWVkZWQoZmFsc2UpOwogICAgIH0sCiAKICAgICAvKioKQEAgLTEyMjgsMTAgKzEy
MDgsMTAgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJveC5wcm90b3R5cGUgPSB7
CiAgICAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPj19IGNvbXBsZXRpb25zCiAgICAgICogQHBh
cmFtIHtib29sZWFuPX0gY2FuU2hvd0ZvclNpbmdsZUl0ZW0KICAgICAgKi8KLSAgICBfY29tcGxl
dGlvbnNSZWFkeTogZnVuY3Rpb24oYW5jaG9yQm94LCBjb21wbGV0aW9ucywgY2FuU2hvd0ZvclNp
bmdsZUl0ZW0pCisgICAgX2NvbXBsZXRpb25zUmVhZHk6IGZ1bmN0aW9uKGFuY2hvckJveCwgY29t
cGxldGlvbnMsIHNlbGVjdGVkSW5kZXgsIGNhblNob3dGb3JTaW5nbGVJdGVtKQogICAgIHsKICAg
ICAgICAgaWYgKHRoaXMuX2NhblNob3dCb3goY29tcGxldGlvbnMsIGNhblNob3dGb3JTaW5nbGVJ
dGVtKSkgewotICAgICAgICAgICAgdGhpcy5fdXBkYXRlSXRlbXMoY29tcGxldGlvbnMsIGNhblNo
b3dGb3JTaW5nbGVJdGVtKTsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUl0ZW1zKGNvbXBsZXRp
b25zLCBzZWxlY3RlZEluZGV4KTsKICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUJveFBvc2l0aW9u
KGFuY2hvckJveCk7CiAgICAgICAgICAgICBpZiAoIXRoaXMudmlzaWJsZSkKICAgICAgICAgICAg
ICAgICB0aGlzLl9ib2R5RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KTsKQEAgLTEy
NDIsMjIgKzEyMjIsMjIgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJveC5wcm90
b3R5cGUgPSB7CiAKICAgICB1cEtleVByZXNzZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuX29uUHJldmlvdXNJdGVtKGV2ZW50LCBmYWxzZSk7CisgICAgICAg
IHJldHVybiB0aGlzLl9zZWxlY3RDbG9zZXN0KC0xLCB0cnVlKTsKICAgICB9LAogCiAgICAgZG93
bktleVByZXNzZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
X29uTmV4dEl0ZW0oZXZlbnQsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdENs
b3Nlc3QoMSwgdHJ1ZSk7CiAgICAgfSwKIAogICAgIHBhZ2VVcEtleVByZXNzZWQ6IGZ1bmN0aW9u
KGV2ZW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX29uUHJldmlvdXNJdGVtKGV2ZW50
LCB0cnVlKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdENsb3Nlc3QoLXRoaXMuX3Jvd0Nv
dW50UGVyVmlld3BvcnQsIGZhbHNlKTsKICAgICB9LAogCiAgICAgcGFnZURvd25LZXlQcmVzc2Vk
OiBmdW5jdGlvbihldmVudCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9vbk5leHRJdGVt
KGV2ZW50LCB0cnVlKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdENsb3Nlc3QodGhpcy5f
cm93Q291bnRQZXJWaWV3cG9ydCwgZmFsc2UpOwogICAgIH0sCiAKICAgICBlbnRlcktleVByZXNz
ZWQ6IGZ1bmN0aW9uKGV2ZW50KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>165000</attachid>
            <date>2012-09-20 15:45:28 -0700</date>
            <delta_ts>2012-09-20 15:45:28 -0700</delta_ts>
            <desc>After the patch #164998</desc>
            <filename>select-most-used.png</filename>
            <type>image/png</type>
            <size>7883</size>
            <attacher name="Nikita Vasilyev">me</attacher>
            
              <data encoding="base64">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
aIaYqkAAAAAASUVORK5CYII=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165397</attachid>
            <date>2012-09-24 09:34:08 -0700</date>
            <delta_ts>2012-10-01 13:11:02 -0700</delta_ts>
            <desc>Fix nits</desc>
            <filename>sort.diff</filename>
            <type>text/plain</type>
            <size>17384</size>
            <attacher name="Nikita Vasilyev">me</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwOTc1OTgzLi5jMTU0Zjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMg
QEAKKzIwMTItMDktMjAgIE5pa2l0YSBWYXNpbHlldiAgPG1lQGVsdjFzLnJ1PgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IENTUyBwcm9wZXJ0eSBuYW1lcyBhdXRvY29tcGxldGU6IFN1Z2dlc3Qg
bW9zdCB1c2VkIHJhdGhlciB0aGFuIGFscGhhYmV0aWNhbHkgZmlyc3QKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NzYzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IHNlbGVjdGlvbiBvZiBu
b24tZmlyc3QgaXRlbSBpbiBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5TdWdnZXN0Qm94LgorCisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NDb21wbGV0aW9ucy5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5XZWlnaHQpOiBDb2xsZWN0IG1vc3QgdXNlZCBD
U1MgcHJvcGVydHkgbmFtZXMuIFJhcmVseSB1c2VkIHByb3BlcnRpZXMgYXJlIG5vdCBwcmVzZW50
ZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMucHJvdG90eXBlLmZpcnN0
U3RhcnRzV2l0aCk6IFJlbW92ZSB1bnVzZWQgZnVuY3Rpb24uCisgICAgICAgIChXZWJJbnNwZWN0
b3IuQ1NTQ29tcGxldGlvbnMucHJvdG90eXBlLm1vc3RVc2VkT2YpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanM6CisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC9UZXh0UHJvbXB0LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9t
cHQucHJvdG90eXBlLl9jb21wbGV0aW9uc1JlYWR5KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5U
ZXh0UHJvbXB0LnByb3RvdHlwZS5wYWdlRG93bktleVByZXNzZWQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJveCk6IEludHJvZHVjZSBfbGVuZ3RoIGFuZCBfc2Vs
ZWN0ZWRJbmRleCB0byByZW1vdmUgdW5uZWNlc3NhcnkgRE9NIHRyYXZlcnNhbHMuCisgICAgICAg
ICAgICBTaW1wbGlmeSBjYW5TaG93Rm9yU2luZ2xlSXRlbSBsb2dpYy4KKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0UHJvbXB0LlN1Z2dlc3RCb3gucHJvdG90eXBlLl9zZWxlY3RDbG9zZXN0KTog
X29uUHJldmlvdXNJdGVtIGFuZCBfb25OZXh0SXRlbSBoYWQgc29tZSBsb2dpYyAKKyAgICAgICAg
ICAgIGR1cGxpY2F0aW9uIHNvIEkgcmVwbGFjZWQgdGhlbSB3aXRoIHRoaXMgbWV0aG9kLgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJveC5wcm90b3R5cGUudXBkYXRl
U3VnZ2VzdGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJv
eC5wcm90b3R5cGUuX3VwZGF0ZUl0ZW1zKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJv
bXB0LlN1Z2dlc3RCb3gucHJvdG90eXBlLl9zZWxlY3RJdGVtKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0UHJvbXB0LlN1Z2dlc3RCb3gucHJvdG90eXBlLl9jb21wbGV0aW9uc1JlYWR5KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LlN1Z2dlc3RCb3gucHJvdG90eXBlLnVw
S2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5TdWdnZXN0Qm94
LnByb3RvdHlwZS5kb3duS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFBy
b21wdC5TdWdnZXN0Qm94LnByb3RvdHlwZS5wYWdlVXBLZXlQcmVzc2VkKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0UHJvbXB0LlN1Z2dlc3RCb3gucHJvdG90eXBlLnBhZ2VEb3duS2V5UHJl
c3NlZCk6CisKIDIwMTItMDktMTkgIERvbWluaWMgTWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5j
b20+CiAKICAgICAgICAgQVg6IEEgZmV3IGNvbnRyb2wgdHlwZXMgYXJlIHJldHVybmluZyB0aGUg
d3JvbmcgYW5zd2VyIGZvciBpc1JlYWRPbmx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0NTU0NvbXBsZXRpb25zLmpzIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9DU1NDb21wbGV0aW9ucy5qcwppbmRleCA5ZTM3OTg1Li40NjNmOTVi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU0NvbXBs
ZXRpb25zLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTQ29t
cGxldGlvbnMuanMKQEAgLTkwLDYgKzkwLDEyNSBAQCBXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlv
bnMuY3NzUHJvcGVydGllc01ldGFpbmZvS2V5U2V0ID0gZnVuY3Rpb24oKQogICAgIHJldHVybiBX
ZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMuX2Nzc1Byb3BlcnRpZXNNZXRhaW5mb0tleVNldDsK
IH0KIAorV2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zLldlaWdodCA9IHsKKyAgICAiLXdlYmtp
dC1hbmltYXRpb24iOiAxLAorICAgICItd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbiI6IDEsCisg
ICAgIi13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCI6IDEsCisgICAgIi13ZWJraXQt
YW5pbWF0aW9uLW5hbWUiOiAxLAorICAgICItd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rp
b24iOiAxLAorICAgICItd2Via2l0LWFwcGVhcmFuY2UiOiAxLAorICAgICItd2Via2l0LWJhY2tn
cm91bmQtY2xpcCI6IDIsCisgICAgIi13ZWJraXQtYm9yZGVyLWhvcml6b250YWwtc3BhY2luZyI6
IDEsCisgICAgIi13ZWJraXQtYm9yZGVyLXZlcnRpY2FsLXNwYWNpbmciOiAxLAorICAgICItd2Vi
a2l0LWJveC1zaGFkb3ciOiAyNCwKKyAgICAiLXdlYmtpdC1mb250LXNtb290aGluZyI6IDIsCisg
ICAgIi13ZWJraXQtdHJhbnNmb3JtIjogMSwKKyAgICAiLXdlYmtpdC10cmFuc2l0aW9uIjogOCwK
KyAgICAiLXdlYmtpdC10cmFuc2l0aW9uLWRlbGF5IjogNywKKyAgICAiLXdlYmtpdC10cmFuc2l0
aW9uLWR1cmF0aW9uIjogNywKKyAgICAiLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5IjogNywK
KyAgICAiLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiI6IDYsCisgICAgIi13ZWJr
aXQtdXNlci1zZWxlY3QiOiAxLAorICAgICJiYWNrZ3JvdW5kIjogMjIyLAorICAgICJiYWNrZ3Jv
dW5kLWF0dGFjaG1lbnQiOiAxNDQsCisgICAgImJhY2tncm91bmQtY2xpcCI6IDE0MywKKyAgICAi
YmFja2dyb3VuZC1jb2xvciI6IDIyMiwKKyAgICAiYmFja2dyb3VuZC1pbWFnZSI6IDIwMSwKKyAg
ICAiYmFja2dyb3VuZC1vcmlnaW4iOiAxNDIsCisgICAgImJhY2tncm91bmQtc2l6ZSI6IDI1LAor
ICAgICJib3JkZXIiOiAxMjEsCisgICAgImJvcmRlci1ib3R0b20iOiAxMjEsCisgICAgImJvcmRl
ci1ib3R0b20tY29sb3IiOiAxMjEsCisgICAgImJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiOiA1
MCwKKyAgICAiYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMiOiA1MCwKKyAgICAiYm9yZGVyLWJv
dHRvbS1zdHlsZSI6IDExNCwKKyAgICAiYm9yZGVyLWJvdHRvbS13aWR0aCI6IDEyMCwKKyAgICAi
Ym9yZGVyLWNvbGxhcHNlIjogMywKKyAgICAiYm9yZGVyLWxlZnQiOiA5NSwKKyAgICAiYm9yZGVy
LWxlZnQtY29sb3IiOiA5NSwKKyAgICAiYm9yZGVyLWxlZnQtc3R5bGUiOiA4OSwKKyAgICAiYm9y
ZGVyLWxlZnQtd2lkdGgiOiA5NCwKKyAgICAiYm9yZGVyLXJhZGl1cyI6IDUwLAorICAgICJib3Jk
ZXItcmlnaHQiOiA5MywKKyAgICAiYm9yZGVyLXJpZ2h0LWNvbG9yIjogOTMsCisgICAgImJvcmRl
ci1yaWdodC1zdHlsZSI6IDg4LAorICAgICJib3JkZXItcmlnaHQtd2lkdGgiOiA5MywKKyAgICAi
Ym9yZGVyLXRvcCI6IDExMSwKKyAgICAiYm9yZGVyLXRvcC1jb2xvciI6IDExMSwKKyAgICAiYm9y
ZGVyLXRvcC1sZWZ0LXJhZGl1cyI6IDQ5LAorICAgICJib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyI6
IDQ5LAorICAgICJib3JkZXItdG9wLXN0eWxlIjogMTA0LAorICAgICJib3JkZXItdG9wLXdpZHRo
IjogMTA5LAorICAgICJib3R0b20iOiAxNiwKKyAgICAiYm94LXNoYWRvdyI6IDI1LAorICAgICJi
b3gtc2l6aW5nIjogMiwKKyAgICAiY2xlYXIiOiAyMywKKyAgICAiY29sb3IiOiAyMzcsCisgICAg
ImN1cnNvciI6IDM0LAorICAgICJkaXJlY3Rpb24iOiA0LAorICAgICJkaXNwbGF5IjogMjEwLAor
ICAgICJmaWxsIjogMiwKKyAgICAiZmlsdGVyIjogMSwKKyAgICAiZmxvYXQiOiAxMDUsCisgICAg
ImZvbnQiOiAxNzQsCisgICAgImZvbnQtZmFtaWx5IjogMjUsCisgICAgImZvbnQtc2l6ZSI6IDE3
NCwKKyAgICAiZm9udC1zdHlsZSI6IDksCisgICAgImZvbnQtd2VpZ2h0IjogODksCisgICAgImhl
aWdodCI6IDE2MSwKKyAgICAibGVmdCI6IDU0LAorICAgICJsZXR0ZXItc3BhY2luZyI6IDMsCisg
ICAgImxpbmUtaGVpZ2h0IjogNzUsCisgICAgImxpc3Qtc3R5bGUiOiAxNywKKyAgICAibGlzdC1z
dHlsZS1pbWFnZSI6IDgsCisgICAgImxpc3Qtc3R5bGUtcG9zaXRpb24iOiA4LAorICAgICJsaXN0
LXN0eWxlLXR5cGUiOiAxNywKKyAgICAibWFyZ2luIjogMjQxLAorICAgICJtYXJnaW4tYm90dG9t
IjogMjI2LAorICAgICJtYXJnaW4tbGVmdCI6IDIyNSwKKyAgICAibWFyZ2luLXJpZ2h0IjogMjEz
LAorICAgICJtYXJnaW4tdG9wIjogMjQxLAorICAgICJtYXgtaGVpZ2h0IjogNSwKKyAgICAibWF4
LXdpZHRoIjogMTEsCisgICAgIm1pbi1oZWlnaHQiOiA5LAorICAgICJtaW4td2lkdGgiOiA2LAor
ICAgICJvcGFjaXR5IjogMjQsCisgICAgIm91dGxpbmUiOiAxMCwKKyAgICAib3V0bGluZS1jb2xv
ciI6IDEwLAorICAgICJvdXRsaW5lLXN0eWxlIjogMTAsCisgICAgIm91dGxpbmUtd2lkdGgiOiAx
MCwKKyAgICAib3ZlcmZsb3ciOiA1NywKKyAgICAib3ZlcmZsb3cteCI6IDU2LAorICAgICJvdmVy
Zmxvdy15IjogNTcsCisgICAgInBhZGRpbmciOiAyMTYsCisgICAgInBhZGRpbmctYm90dG9tIjog
MjA4LAorICAgICJwYWRkaW5nLWxlZnQiOiAyMTYsCisgICAgInBhZGRpbmctcmlnaHQiOiAyMDYs
CisgICAgInBhZGRpbmctdG9wIjogMjE2LAorICAgICJwb3NpdGlvbiI6IDEzNiwKKyAgICAicmVz
aXplIjogMSwKKyAgICAicmlnaHQiOiAyOSwKKyAgICAic3Ryb2tlIjogMSwKKyAgICAic3Ryb2tl
LXdpZHRoIjogMSwKKyAgICAidGFibGUtbGF5b3V0IjogMSwKKyAgICAidGV4dC1hbGlnbiI6IDY2
LAorICAgICJ0ZXh0LWRlY29yYXRpb24iOiA1MywKKyAgICAidGV4dC1pbmRlbnQiOiA5LAorICAg
ICJ0ZXh0LW92ZXJmbG93IjogOCwKKyAgICAidGV4dC1zaGFkb3ciOiAxOSwKKyAgICAidGV4dC10
cmFuc2Zvcm0iOiA1LAorICAgICJ0b3AiOiA3MSwKKyAgICAidW5pY29kZS1iaWRpIjogMSwKKyAg
ICAidmVydGljYWwtYWxpZ24iOiAzNywKKyAgICAidmlzaWJpbGl0eSI6IDExLAorICAgICJ3aGl0
ZS1zcGFjZSI6IDI0LAorICAgICJ3aWR0aCI6IDI1NSwKKyAgICAid29yZC13cmFwIjogNiwKKyAg
ICAiei1pbmRleCI6IDMyLAorICAgICJ6b29tIjogMTAKK307CisKKwogV2ViSW5zcGVjdG9yLkNT
U0NvbXBsZXRpb25zLnByb3RvdHlwZSA9IHsKICAgICBzdGFydHNXaXRoOiBmdW5jdGlvbihwcmVm
aXgpCiAgICAgewpAQCAtMTAzLDEwICsyMjIsMjIgQEAgV2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRp
b25zLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICAgfSwKIAotICAg
IGZpcnN0U3RhcnRzV2l0aDogZnVuY3Rpb24ocHJlZml4KQorICAgIC8qKgorICAgICAqIEBwYXJh
bSB7QXJyYXkuPHN0cmluZz59IHByb3BlcnRpZXMKKyAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Cisg
ICAgICovCisgICAgbW9zdFVzZWRPZjogZnVuY3Rpb24ocHJvcGVydGllcykKICAgICB7Ci0gICAg
ICAgIHZhciBmb3VuZEluZGV4ID0gdGhpcy5fZmlyc3RJbmRleE9mUHJlZml4KHByZWZpeCk7Ci0g
ICAgICAgIHJldHVybiAoZm91bmRJbmRleCA9PT0gLTEgPyAiIiA6IHRoaXMuX3ZhbHVlc1tmb3Vu
ZEluZGV4XSk7CisgICAgICAgIHZhciBtYXhXZWlnaHQgPSAwOworICAgICAgICB2YXIgaW5kZXgg
PSAwOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgIHZhciB3ZWlnaHQgPSBXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMu
V2VpZ2h0W3Byb3BlcnRpZXNbaV1dOworICAgICAgICAgICAgaWYgKHdlaWdodCA+IG1heFdlaWdo
dCkgeworICAgICAgICAgICAgICAgIG1heFdlaWdodCA9IHdlaWdodDsKKyAgICAgICAgICAgICAg
ICBpbmRleCA9IGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGlu
ZGV4OwogICAgIH0sCiAKICAgICBfZmlyc3RJbmRleE9mUHJlZml4OiBmdW5jdGlvbihwcmVmaXgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1Np
ZGViYXJQYW5lLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNT
aWRlYmFyUGFuZS5qcwppbmRleCA2Y2U3Yjc5Li5jYWNkZTZjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMKQEAg
LTI2NjQsNyArMjY2NCw4IEBAIFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5DU1NQcm9w
ZXJ0eVByb21wdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAg
dmFyIHJlc3VsdHMgPSB0aGlzLl9jc3NDb21wbGV0aW9ucy5zdGFydHNXaXRoKHByZWZpeCk7Ci0g
ICAgICAgIGNvbXBsZXRpb25zUmVhZHlDYWxsYmFjayhyZXN1bHRzKTsKKyAgICAgICAgdmFyIHNl
bGVjdGVkSW5kZXggPSB0aGlzLl9jc3NDb21wbGV0aW9ucy5tb3N0VXNlZE9mKHJlc3VsdHMpOwor
ICAgICAgICBjb21wbGV0aW9uc1JlYWR5Q2FsbGJhY2socmVzdWx0cywgc2VsZWN0ZWRJbmRleCk7
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1RleHRQcm9tcHQuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Rl
eHRQcm9tcHQuanMKaW5kZXggYzQwZGY0Zi4uZWNkYmNlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0UHJvbXB0LmpzCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFByb21wdC5qcwpAQCAtNDMzLDggKzQzMyw5IEBA
IFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICAgKiBAcGFyYW0ge1Jh
bmdlfSBvcmlnaW5hbFdvcmRQcmVmaXhSYW5nZQogICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmV2
ZXJzZQogICAgICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz49fSBjb21wbGV0aW9ucworICAgICAq
IEBwYXJhbSB7bnVtYmVyPX0gc2VsZWN0ZWRJbmRleAogICAgICAqLwotICAgIF9jb21wbGV0aW9u
c1JlYWR5OiBmdW5jdGlvbihzZWxlY3Rpb24sIGF1dG8sIG9yaWdpbmFsV29yZFByZWZpeFJhbmdl
LCByZXZlcnNlLCBjb21wbGV0aW9ucykKKyAgICBfY29tcGxldGlvbnNSZWFkeTogZnVuY3Rpb24o
c2VsZWN0aW9uLCBhdXRvLCBvcmlnaW5hbFdvcmRQcmVmaXhSYW5nZSwgcmV2ZXJzZSwgY29tcGxl
dGlvbnMsIHNlbGVjdGVkSW5kZXgpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX3dhaXRpbmdG
b3JDb21wbGV0aW9ucyB8fCAhY29tcGxldGlvbnMgfHwgIWNvbXBsZXRpb25zLmxlbmd0aCkgewog
ICAgICAgICAgICAgdGhpcy5oaWRlU3VnZ2VzdEJveCgpOwpAQCAtNDUxLDI5ICs0NTIsMzEgQEAg
V2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlID0gewogICAgICAgICBpZiAob3JpZ2lu
YWxXb3JkUHJlZml4UmFuZ2UudG9TdHJpbmcoKSArIHNlbGVjdGlvblJhbmdlLnRvU3RyaW5nKCkg
IT0gZnVsbFdvcmRSYW5nZS50b1N0cmluZygpKQogICAgICAgICAgICAgcmV0dXJuOwogCisgICAg
ICAgIHNlbGVjdGVkSW5kZXggPSBzZWxlY3RlZEluZGV4IHx8IDA7CisKICAgICAgICAgdGhpcy5f
dXNlckVudGVyZWRSYW5nZSA9IGZ1bGxXb3JkUmFuZ2U7CiAgICAgICAgIHRoaXMuX3VzZXJFbnRl
cmVkVGV4dCA9IGZ1bGxXb3JkUmFuZ2UudG9TdHJpbmcoKTsKIAogICAgICAgICBpZiAodGhpcy5f
c3VnZ2VzdEJveCkKLSAgICAgICAgICAgIHRoaXMuX3N1Z2dlc3RCb3gudXBkYXRlU3VnZ2VzdGlv
bnModGhpcy5fYm94Rm9yQW5jaG9yQXRTdGFydChzZWxlY3Rpb24sIGZ1bGxXb3JkUmFuZ2UpLCBj
b21wbGV0aW9ucywgIXRoaXMuaXNDYXJldEF0RW5kT2ZQcm9tcHQoKSk7CisgICAgICAgICAgICB0
aGlzLl9zdWdnZXN0Qm94LnVwZGF0ZVN1Z2dlc3Rpb25zKHRoaXMuX2JveEZvckFuY2hvckF0U3Rh
cnQoc2VsZWN0aW9uLCBmdWxsV29yZFJhbmdlKSwgY29tcGxldGlvbnMsIHNlbGVjdGVkSW5kZXgs
ICF0aGlzLmlzQ2FyZXRBdEVuZE9mUHJvbXB0KCkpOwogCiAgICAgICAgIHZhciB3b3JkUHJlZml4
TGVuZ3RoID0gb3JpZ2luYWxXb3JkUHJlZml4UmFuZ2UudG9TdHJpbmcoKS5sZW5ndGg7CiAKICAg
ICAgICAgaWYgKGF1dG8pIHsKLSAgICAgICAgICAgIHZhciBjb21wbGV0aW9uVGV4dCA9IGNvbXBs
ZXRpb25zWzBdOworICAgICAgICAgICAgdmFyIGNvbXBsZXRpb25UZXh0ID0gY29tcGxldGlvbnNb
c2VsZWN0ZWRJbmRleF07CiAgICAgICAgICAgICB2YXIgY29tbW9uUHJlZml4ID0gdGhpcy5fYnVp
bGRDb21tb25QcmVmaXgoY29tcGxldGlvbnMsIHdvcmRQcmVmaXhMZW5ndGgpOwogCiAgICAgICAg
ICAgICB0aGlzLl9jb21tb25QcmVmaXggPSBjb21tb25QcmVmaXg7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBpZiAoY29tcGxldGlvbnMubGVuZ3RoID09PSAxKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIGNvbXBsZXRpb25UZXh0ID0gY29tcGxldGlvbnNbMF07CisgICAgICAgICAgICAg
ICAgdmFyIGNvbXBsZXRpb25UZXh0ID0gY29tcGxldGlvbnNbc2VsZWN0ZWRJbmRleF07CiAgICAg
ICAgICAgICAgICAgd29yZFByZWZpeExlbmd0aCA9IGNvbXBsZXRpb25UZXh0Lmxlbmd0aDsKICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgdmFyIGNvbW1vblByZWZpeCA9IHRo
aXMuX2J1aWxkQ29tbW9uUHJlZml4KGNvbXBsZXRpb25zLCB3b3JkUHJlZml4TGVuZ3RoKTsKICAg
ICAgICAgICAgICAgICB3b3JkUHJlZml4TGVuZ3RoID0gY29tbW9uUHJlZml4Lmxlbmd0aDsKIAog
ICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb24uaXNDb2xsYXBzZWQpCi0gICAgICAgICAgICAg
ICAgICAgIHZhciBjb21wbGV0aW9uVGV4dCA9IGNvbXBsZXRpb25zWzBdOworICAgICAgICAgICAg
ICAgICAgICB2YXIgY29tcGxldGlvblRleHQgPSBjb21wbGV0aW9uc1tzZWxlY3RlZEluZGV4XTsK
ICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRU
ZXh0ID0gZnVsbFdvcmRSYW5nZS50b1N0cmluZygpOwogCkBAIC00ODUsNyArNDg4LDcgQEAgV2Vi
SW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlID0gewogCiAgICAgICAgICAgICAgICAgICAg
IHZhciBuZXh0SW5kZXggPSBmb3VuZEluZGV4ICsgKHJldmVyc2UgPyAtMSA6IDEpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gbnVsbCB8fCBuZXh0SW5kZXggPj0gY29t
cGxldGlvbnMubGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBsZXRpb25U
ZXh0ID0gY29tcGxldGlvbnNbMF07CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcGxl
dGlvblRleHQgPSBjb21wbGV0aW9uc1tzZWxlY3RlZEluZGV4XTsKICAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAobmV4dEluZGV4IDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBj
b21wbGV0aW9uVGV4dCA9IGNvbXBsZXRpb25zW2NvbXBsZXRpb25zLmxlbmd0aCAtIDFdOwogICAg
ICAgICAgICAgICAgICAgICBlbHNlCkBAIC03NDksNyArNzUyLDcgQEAgV2ViSW5zcGVjdG9yLlRl
eHRQcm9tcHQucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1Z2dlc3RC
b3gucGFnZURvd25LZXlQcmVzc2VkKGV2ZW50KTsKIAogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfSwKKyAgICB9CiB9CiAKIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS5fX3By
b3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKQEAgLTkyOSw2ICs5MzIsOCBA
QCBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5TdWdnZXN0Qm94ID0gZnVuY3Rpb24odGV4dFByb21w
dCwgaW5wdXRFbGVtZW50LCBjbGFzc05hbQogewogICAgIHRoaXMuX3RleHRQcm9tcHQgPSB0ZXh0
UHJvbXB0OwogICAgIHRoaXMuX2lucHV0RWxlbWVudCA9IGlucHV0RWxlbWVudDsKKyAgICB0aGlz
Ll9sZW5ndGggPSAwOworICAgIHRoaXMuX3NlbGVjdGVkSW5kZXggPSAtMTsKICAgICB0aGlzLl9z
ZWxlY3RlZEVsZW1lbnQgPSBudWxsOwogICAgIHRoaXMuX2JvdW5kT25TY3JvbGwgPSB0aGlzLl9v
bnNjcm9sbHJlc2l6ZS5iaW5kKHRoaXMsIHRydWUpOwogICAgIHRoaXMuX2JvdW5kT25SZXNpemUg
PSB0aGlzLl9vbnNjcm9sbHJlc2l6ZS5iaW5kKHRoaXMsIGZhbHNlKTsKQEAgLTEwNzIsNjAgKzEw
NzcsMjQgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJveC5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0sCiAKLSAgICBfb25OZXh0SXRlbTogZnVuY3Rp
b24oZXZlbnQsIGlzUGFnZVNjcm9sbCkKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJlcn0g
c2hpZnQKKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBpc0NpcmN1bGFyCisgICAgICogQHJldHVy
biB7Ym9vbGVhbn0gaXMgY2hhbmdlZAorICAgICAqLworICAgIF9zZWxlY3RDbG9zZXN0OiBmdW5j
dGlvbihzaGlmdCwgaXNDaXJjdWxhcikKICAgICB7Ci0gICAgICAgIHZhciBjaGlsZHJlbiA9IHRo
aXMuY29udGVudEVsZW1lbnQuY2hpbGROb2RlczsKLSAgICAgICAgaWYgKCFjaGlsZHJlbi5sZW5n
dGgpCisgICAgICAgIGlmICghdGhpcy5fbGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgIGlmICghdGhpcy5fc2VsZWN0ZWRFbGVtZW50KQotICAgICAgICAgICAgdGhp
cy5fc2VsZWN0ZWRFbGVtZW50ID0gdGhpcy5jb250ZW50RWxlbWVudC5maXJzdENoaWxkOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmICghaXNQYWdlU2Nyb2xsKQotICAgICAgICAgICAg
ICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVudCA9IHRoaXMuX3NlbGVjdGVkRWxlbWVudC5uZXh0U2li
bGluZyB8fCB0aGlzLmNvbnRlbnRFbGVtZW50LmZpcnN0Q2hpbGQ7Ci0gICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICB2YXIgY2FuZGlkYXRlID0gdGhpcy5fc2VsZWN0ZWRFbGVtZW50
OwotCi0gICAgICAgICAgICAgICAgZm9yICh2YXIgaXRlbXNMZWZ0ID0gdGhpcy5fcm93Q291bnRQ
ZXJWaWV3cG9ydDsgaXRlbXNMZWZ0OyAtLWl0ZW1zTGVmdCkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoY2FuZGlkYXRlLm5leHRTaWJsaW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgY2Fu
ZGlkYXRlID0gY2FuZGlkYXRlLm5leHRTaWJsaW5nOwotICAgICAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEVsZW1lbnQgPSBjYW5kaWRhdGU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0aW9uKCk7Ci0gICAg
ICAgIHRoaXMuX2FwcGx5U3VnZ2VzdGlvbih1bmRlZmluZWQsIHRydWUpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgX29uUHJldmlvdXNJdGVtOiBmdW5jdGlvbihldmVudCwg
aXNQYWdlU2Nyb2xsKQotICAgIHsKLSAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jb250ZW50
RWxlbWVudC5jaGlsZE5vZGVzOwotICAgICAgICBpZiAoIWNoaWxkcmVuLmxlbmd0aCkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VsZWN0ZWRJ
bmRleCArIHNoaWZ0OwogCi0gICAgICAgIGlmICghdGhpcy5fc2VsZWN0ZWRFbGVtZW50KQotICAg
ICAgICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50ID0gdGhpcy5jb250ZW50RWxlbWVudC5sYXN0
Q2hpbGQ7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKCFpc1BhZ2VTY3JvbGwpCi0g
ICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50ID0gdGhpcy5fc2VsZWN0ZWRFbGVt
ZW50LnByZXZpb3VzU2libGluZyB8fCB0aGlzLmNvbnRlbnRFbGVtZW50Lmxhc3RDaGlsZDsKLSAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHZhciBjYW5kaWRhdGUgPSB0aGlzLl9z
ZWxlY3RlZEVsZW1lbnQ7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpdGVtc0xlZnQgPSB0
aGlzLl9yb3dDb3VudFBlclZpZXdwb3J0OyBpdGVtc0xlZnQ7IC0taXRlbXNMZWZ0KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUucHJldmlvdXNTaWJsaW5nKQotICAgICAgICAg
ICAgICAgICAgICAgICAgY2FuZGlkYXRlID0gY2FuZGlkYXRlLnByZXZpb3VzU2libGluZzsKLSAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQorICAgICAgICBpZiAoaXNDaXJjdWxhcikKKyAgICAgICAgICAgIGlu
ZGV4ID0gKHRoaXMuX2xlbmd0aCArIGluZGV4KSAlIHRoaXMuX2xlbmd0aDsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgaW5kZXggPSBOdW1iZXIuY29uc3RyYWluKGluZGV4LCAwLCB0aGlzLl9s
ZW5ndGggLSAxKTsKIAotICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVudCA9IGNh
bmRpZGF0ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB0aGlzLl91cGRhdGVT
ZWxlY3Rpb24oKTsKKyAgICAgICAgdGhpcy5fc2VsZWN0SXRlbShpbmRleCk7CiAgICAgICAgIHRo
aXMuX2FwcGx5U3VnZ2VzdGlvbih1bmRlZmluZWQsIHRydWUpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9LApAQCAtMTEzNSwxMyArMTEwNCwxMyBAQCBXZWJJbnNwZWN0b3IuVGV4dFByb21w
dC5TdWdnZXN0Qm94LnByb3RvdHlwZSA9IHsKICAgICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+
PX0gY29tcGxldGlvbnMKICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBjYW5TaG93Rm9yU2luZ2xl
SXRlbQogICAgICAqLwotICAgIHVwZGF0ZVN1Z2dlc3Rpb25zOiBmdW5jdGlvbihhbmNob3JCb3gs
IGNvbXBsZXRpb25zLCBjYW5TaG93Rm9yU2luZ2xlSXRlbSkKKyAgICB1cGRhdGVTdWdnZXN0aW9u
czogZnVuY3Rpb24oYW5jaG9yQm94LCBjb21wbGV0aW9ucywgc2VsZWN0ZWRJbmRleCwgY2FuU2hv
d0ZvclNpbmdsZUl0ZW0pCiAgICAgewogICAgICAgICBpZiAodGhpcy5fc3VnZ2VzdFRpbWVvdXQp
IHsKICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9zdWdnZXN0VGltZW91dCk7CiAgICAg
ICAgICAgICBkZWxldGUgdGhpcy5fc3VnZ2VzdFRpbWVvdXQ7CiAgICAgICAgIH0KLSAgICAgICAg
dGhpcy5fY29tcGxldGlvbnNSZWFkeShhbmNob3JCb3gsIGNvbXBsZXRpb25zLCBjYW5TaG93Rm9y
U2luZ2xlSXRlbSk7CisgICAgICAgIHRoaXMuX2NvbXBsZXRpb25zUmVhZHkoYW5jaG9yQm94LCBj
b21wbGV0aW9ucywgc2VsZWN0ZWRJbmRleCwgY2FuU2hvd0ZvclNpbmdsZUl0ZW0pOwogICAgIH0s
CiAKICAgICBfb25JdGVtTW91c2VEb3duOiBmdW5jdGlvbih0ZXh0LCBldmVudCkKQEAgLTExNjks
MTAgKzExMzgsMTIgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJveC5wcm90b3R5
cGUgPSB7CiAgICAgfSwKIAogICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGNhblNo
b3dGb3JTaW5nbGVJdGVtCisgICAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPj19IGl0ZW1zCisg
ICAgICogQHBhcmFtIHtudW1iZXJ9IHNlbGVjdGVkSW5kZXgKICAgICAgKi8KLSAgICBfdXBkYXRl
SXRlbXM6IGZ1bmN0aW9uKGl0ZW1zLCBjYW5TaG93Rm9yU2luZ2xlSXRlbSkKKyAgICBfdXBkYXRl
SXRlbXM6IGZ1bmN0aW9uKGl0ZW1zLCBzZWxlY3RlZEluZGV4KQogICAgIHsKKyAgICAgICAgdGhp
cy5fbGVuZ3RoID0gaXRlbXMubGVuZ3RoOwogICAgICAgICB0aGlzLmNvbnRlbnRFbGVtZW50LnJl
bW92ZUNoaWxkcmVuKCk7CiAKICAgICAgICAgdmFyIHVzZXJFbnRlcmVkVGV4dCA9IHRoaXMuX3Rl
eHRQcm9tcHQuX3VzZXJFbnRlcmVkVGV4dDsKQEAgLTExODIsMjEgKzExNTMsMjMgQEAgV2ViSW5z
cGVjdG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJveC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0
aGlzLmNvbnRlbnRFbGVtZW50LmFwcGVuZENoaWxkKGN1cnJlbnRJdGVtRWxlbWVudCk7CiAgICAg
ICAgIH0KIAotICAgICAgICB0aGlzLl9zZWxlY3RlZEVsZW1lbnQgPSBjYW5TaG93Rm9yU2luZ2xl
SXRlbSA/IHRoaXMuY29udGVudEVsZW1lbnQuZmlyc3RDaGlsZCA6IG51bGw7Ci0gICAgICAgIHRo
aXMuX3VwZGF0ZVNlbGVjdGlvbigpOworICAgICAgICB0aGlzLl9zZWxlY3RlZEVsZW1lbnQgPSBu
dWxsOworICAgICAgICB0aGlzLl9zZWxlY3RJdGVtKHNlbGVjdGVkSW5kZXgpOwogICAgIH0sCiAK
LSAgICBfdXBkYXRlU2VsZWN0aW9uOiBmdW5jdGlvbigpCisgICAgLyoqCisgICAgICogQHBhcmFt
IHtudW1iZXJ9IGluZGV4CisgICAgICovCisgICAgX3NlbGVjdEl0ZW06IGZ1bmN0aW9uKGluZGV4
KQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IG1pZ2h0IHdhbnQgc29tZSBvcHRpbWl6YXRpb24g
aWYgYmVjb21lcyBhIGJvdHRsZW5lY2suCi0gICAgICAgIGZvciAodmFyIGNoaWxkID0gdGhpcy5j
b250ZW50RWxlbWVudC5maXJzdENoaWxkOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC5uZXh0U2libGlu
ZykgewotICAgICAgICAgICAgaWYgKGNoaWxkICE9PSB0aGlzLl9zZWxlY3RlZEVsZW1lbnQpCi0g
ICAgICAgICAgICAgICAgY2hpbGQucmVtb3ZlU3R5bGVDbGFzcygic2VsZWN0ZWQiKTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWRFbGVtZW50KSB7Ci0gICAgICAgICAgICB0
aGlzLl9zZWxlY3RlZEVsZW1lbnQuYWRkU3R5bGVDbGFzcygic2VsZWN0ZWQiKTsKLSAgICAgICAg
ICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVudC5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKGZhbHNlKTsK
LSAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWRFbGVtZW50KQorICAgICAgICAg
ICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoInNlbGVjdGVkIik7CisK
KyAgICAgICAgdGhpcy5fc2VsZWN0ZWRJbmRleCA9IGluZGV4OworICAgICAgICB0aGlzLl9zZWxl
Y3RlZEVsZW1lbnQgPSB0aGlzLmNvbnRlbnRFbGVtZW50LmNoaWxkcmVuW2luZGV4XTsKKyAgICAg
ICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50LmNsYXNzTGlzdC5hZGQoInNlbGVjdGVkIik7CisKKyAg
ICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50LnNjcm9sbEludG9WaWV3SWZOZWVkZWQoZmFsc2Up
OwogICAgIH0sCiAKICAgICAvKioKQEAgLTEyMjgsMTAgKzEyMDEsMTAgQEAgV2ViSW5zcGVjdG9y
LlRleHRQcm9tcHQuU3VnZ2VzdEJveC5wcm90b3R5cGUgPSB7CiAgICAgICogQHBhcmFtIHtBcnJh
eS48c3RyaW5nPj19IGNvbXBsZXRpb25zCiAgICAgICogQHBhcmFtIHtib29sZWFuPX0gY2FuU2hv
d0ZvclNpbmdsZUl0ZW0KICAgICAgKi8KLSAgICBfY29tcGxldGlvbnNSZWFkeTogZnVuY3Rpb24o
YW5jaG9yQm94LCBjb21wbGV0aW9ucywgY2FuU2hvd0ZvclNpbmdsZUl0ZW0pCisgICAgX2NvbXBs
ZXRpb25zUmVhZHk6IGZ1bmN0aW9uKGFuY2hvckJveCwgY29tcGxldGlvbnMsIHNlbGVjdGVkSW5k
ZXgsIGNhblNob3dGb3JTaW5nbGVJdGVtKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX2NhblNo
b3dCb3goY29tcGxldGlvbnMsIGNhblNob3dGb3JTaW5nbGVJdGVtKSkgewotICAgICAgICAgICAg
dGhpcy5fdXBkYXRlSXRlbXMoY29tcGxldGlvbnMsIGNhblNob3dGb3JTaW5nbGVJdGVtKTsKKyAg
ICAgICAgICAgIHRoaXMuX3VwZGF0ZUl0ZW1zKGNvbXBsZXRpb25zLCBzZWxlY3RlZEluZGV4KTsK
ICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUJveFBvc2l0aW9uKGFuY2hvckJveCk7CiAgICAgICAg
ICAgICBpZiAoIXRoaXMudmlzaWJsZSkKICAgICAgICAgICAgICAgICB0aGlzLl9ib2R5RWxlbWVu
dC5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KTsKQEAgLTEyNDIsMjIgKzEyMTUsMjIgQEAgV2Vi
SW5zcGVjdG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJveC5wcm90b3R5cGUgPSB7CiAKICAgICB1cEtl
eVByZXNzZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX29u
UHJldmlvdXNJdGVtKGV2ZW50LCBmYWxzZSk7CisgICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RD
bG9zZXN0KC0xLCB0cnVlKTsKICAgICB9LAogCiAgICAgZG93bktleVByZXNzZWQ6IGZ1bmN0aW9u
KGV2ZW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX29uTmV4dEl0ZW0oZXZlbnQsIGZh
bHNlKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdENsb3Nlc3QoMSwgdHJ1ZSk7CiAgICAg
fSwKIAogICAgIHBhZ2VVcEtleVByZXNzZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuX29uUHJldmlvdXNJdGVtKGV2ZW50LCB0cnVlKTsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX3NlbGVjdENsb3Nlc3QoLXRoaXMuX3Jvd0NvdW50UGVyVmlld3BvcnQsIGZhbHNl
KTsKICAgICB9LAogCiAgICAgcGFnZURvd25LZXlQcmVzc2VkOiBmdW5jdGlvbihldmVudCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9vbk5leHRJdGVtKGV2ZW50LCB0cnVlKTsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX3NlbGVjdENsb3Nlc3QodGhpcy5fcm93Q291bnRQZXJWaWV3cG9ydCwg
ZmFsc2UpOwogICAgIH0sCiAKICAgICBlbnRlcktleVByZXNzZWQ6IGZ1bmN0aW9uKGV2ZW50KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166530</attachid>
            <date>2012-10-01 13:11:02 -0700</date>
            <delta_ts>2012-10-02 04:18:46 -0700</delta_ts>
            <desc>Add a comment</desc>
            <filename>sort.diff</filename>
            <type>text/plain</type>
            <size>17487</size>
            <attacher name="Nikita Vasilyev">me</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwOTc1OTgzLi5jMTU0Zjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMg
QEAKKzIwMTItMDktMjAgIE5pa2l0YSBWYXNpbHlldiAgPG1lQGVsdjFzLnJ1PgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IENTUyBwcm9wZXJ0eSBuYW1lcyBhdXRvY29tcGxldGU6IFN1Z2dlc3Qg
bW9zdCB1c2VkIHJhdGhlciB0aGFuIGFscGhhYmV0aWNhbHkgZmlyc3QKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NzYzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IHNlbGVjdGlvbiBvZiBu
b24tZmlyc3QgaXRlbSBpbiBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5TdWdnZXN0Qm94LgorCisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NDb21wbGV0aW9ucy5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5XZWlnaHQpOiBDb2xsZWN0IG1vc3QgdXNlZCBD
U1MgcHJvcGVydHkgbmFtZXMuIFJhcmVseSB1c2VkIHByb3BlcnRpZXMgYXJlIG5vdCBwcmVzZW50
ZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMucHJvdG90eXBlLmZpcnN0
U3RhcnRzV2l0aCk6IFJlbW92ZSB1bnVzZWQgZnVuY3Rpb24uCisgICAgICAgIChXZWJJbnNwZWN0
b3IuQ1NTQ29tcGxldGlvbnMucHJvdG90eXBlLm1vc3RVc2VkT2YpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanM6CisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC9UZXh0UHJvbXB0LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9t
cHQucHJvdG90eXBlLl9jb21wbGV0aW9uc1JlYWR5KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5U
ZXh0UHJvbXB0LnByb3RvdHlwZS5wYWdlRG93bktleVByZXNzZWQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJveCk6IEludHJvZHVjZSBfbGVuZ3RoIGFuZCBfc2Vs
ZWN0ZWRJbmRleCB0byByZW1vdmUgdW5uZWNlc3NhcnkgRE9NIHRyYXZlcnNhbHMuCisgICAgICAg
ICAgICBTaW1wbGlmeSBjYW5TaG93Rm9yU2luZ2xlSXRlbSBsb2dpYy4KKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0UHJvbXB0LlN1Z2dlc3RCb3gucHJvdG90eXBlLl9zZWxlY3RDbG9zZXN0KTog
X29uUHJldmlvdXNJdGVtIGFuZCBfb25OZXh0SXRlbSBoYWQgc29tZSBsb2dpYyAKKyAgICAgICAg
ICAgIGR1cGxpY2F0aW9uIHNvIEkgcmVwbGFjZWQgdGhlbSB3aXRoIHRoaXMgbWV0aG9kLgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJveC5wcm90b3R5cGUudXBkYXRl
U3VnZ2VzdGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJv
eC5wcm90b3R5cGUuX3VwZGF0ZUl0ZW1zKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJv
bXB0LlN1Z2dlc3RCb3gucHJvdG90eXBlLl9zZWxlY3RJdGVtKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0UHJvbXB0LlN1Z2dlc3RCb3gucHJvdG90eXBlLl9jb21wbGV0aW9uc1JlYWR5KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LlN1Z2dlc3RCb3gucHJvdG90eXBlLnVw
S2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5TdWdnZXN0Qm94
LnByb3RvdHlwZS5kb3duS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFBy
b21wdC5TdWdnZXN0Qm94LnByb3RvdHlwZS5wYWdlVXBLZXlQcmVzc2VkKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0UHJvbXB0LlN1Z2dlc3RCb3gucHJvdG90eXBlLnBhZ2VEb3duS2V5UHJl
c3NlZCk6CisKIDIwMTItMDktMTkgIERvbWluaWMgTWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5j
b20+CiAKICAgICAgICAgQVg6IEEgZmV3IGNvbnRyb2wgdHlwZXMgYXJlIHJldHVybmluZyB0aGUg
d3JvbmcgYW5zd2VyIGZvciBpc1JlYWRPbmx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0NTU0NvbXBsZXRpb25zLmpzIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9DU1NDb21wbGV0aW9ucy5qcwppbmRleCA5ZTM3OTg1Li44YzYwNmJl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU0NvbXBs
ZXRpb25zLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTQ29t
cGxldGlvbnMuanMKQEAgLTkwLDYgKzkwLDEyNiBAQCBXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlv
bnMuY3NzUHJvcGVydGllc01ldGFpbmZvS2V5U2V0ID0gZnVuY3Rpb24oKQogICAgIHJldHVybiBX
ZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMuX2Nzc1Byb3BlcnRpZXNNZXRhaW5mb0tleVNldDsK
IH0KIAorLy8gV2VpZ2h0IG9mIENTUyBwcm9wZXJ0aWVzIGJhc2VkIHRoZWlyIHVzYWdlIG9uIGZl
dyBwb3B1bGFyIHdlYnNpdGVzIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzM3NTE0MzYKK1dlYklu
c3BlY3Rvci5DU1NDb21wbGV0aW9ucy5XZWlnaHQgPSB7CisgICAgIi13ZWJraXQtYW5pbWF0aW9u
IjogMSwKKyAgICAiLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb24iOiAxLAorICAgICItd2Via2l0
LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQiOiAxLAorICAgICItd2Via2l0LWFuaW1hdGlvbi1u
YW1lIjogMSwKKyAgICAiLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uIjogMSwKKyAg
ICAiLXdlYmtpdC1hcHBlYXJhbmNlIjogMSwKKyAgICAiLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXAi
OiAyLAorICAgICItd2Via2l0LWJvcmRlci1ob3Jpem9udGFsLXNwYWNpbmciOiAxLAorICAgICIt
d2Via2l0LWJvcmRlci12ZXJ0aWNhbC1zcGFjaW5nIjogMSwKKyAgICAiLXdlYmtpdC1ib3gtc2hh
ZG93IjogMjQsCisgICAgIi13ZWJraXQtZm9udC1zbW9vdGhpbmciOiAyLAorICAgICItd2Via2l0
LXRyYW5zZm9ybSI6IDEsCisgICAgIi13ZWJraXQtdHJhbnNpdGlvbiI6IDgsCisgICAgIi13ZWJr
aXQtdHJhbnNpdGlvbi1kZWxheSI6IDcsCisgICAgIi13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlv
biI6IDcsCisgICAgIi13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eSI6IDcsCisgICAgIi13ZWJr
aXQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iOiA2LAorICAgICItd2Via2l0LXVzZXItc2Vs
ZWN0IjogMSwKKyAgICAiYmFja2dyb3VuZCI6IDIyMiwKKyAgICAiYmFja2dyb3VuZC1hdHRhY2ht
ZW50IjogMTQ0LAorICAgICJiYWNrZ3JvdW5kLWNsaXAiOiAxNDMsCisgICAgImJhY2tncm91bmQt
Y29sb3IiOiAyMjIsCisgICAgImJhY2tncm91bmQtaW1hZ2UiOiAyMDEsCisgICAgImJhY2tncm91
bmQtb3JpZ2luIjogMTQyLAorICAgICJiYWNrZ3JvdW5kLXNpemUiOiAyNSwKKyAgICAiYm9yZGVy
IjogMTIxLAorICAgICJib3JkZXItYm90dG9tIjogMTIxLAorICAgICJib3JkZXItYm90dG9tLWNv
bG9yIjogMTIxLAorICAgICJib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzIjogNTAsCisgICAgImJv
cmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjogNTAsCisgICAgImJvcmRlci1ib3R0b20tc3R5bGUi
OiAxMTQsCisgICAgImJvcmRlci1ib3R0b20td2lkdGgiOiAxMjAsCisgICAgImJvcmRlci1jb2xs
YXBzZSI6IDMsCisgICAgImJvcmRlci1sZWZ0IjogOTUsCisgICAgImJvcmRlci1sZWZ0LWNvbG9y
IjogOTUsCisgICAgImJvcmRlci1sZWZ0LXN0eWxlIjogODksCisgICAgImJvcmRlci1sZWZ0LXdp
ZHRoIjogOTQsCisgICAgImJvcmRlci1yYWRpdXMiOiA1MCwKKyAgICAiYm9yZGVyLXJpZ2h0Ijog
OTMsCisgICAgImJvcmRlci1yaWdodC1jb2xvciI6IDkzLAorICAgICJib3JkZXItcmlnaHQtc3R5
bGUiOiA4OCwKKyAgICAiYm9yZGVyLXJpZ2h0LXdpZHRoIjogOTMsCisgICAgImJvcmRlci10b3Ai
OiAxMTEsCisgICAgImJvcmRlci10b3AtY29sb3IiOiAxMTEsCisgICAgImJvcmRlci10b3AtbGVm
dC1yYWRpdXMiOiA0OSwKKyAgICAiYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMiOiA0OSwKKyAgICAi
Ym9yZGVyLXRvcC1zdHlsZSI6IDEwNCwKKyAgICAiYm9yZGVyLXRvcC13aWR0aCI6IDEwOSwKKyAg
ICAiYm90dG9tIjogMTYsCisgICAgImJveC1zaGFkb3ciOiAyNSwKKyAgICAiYm94LXNpemluZyI6
IDIsCisgICAgImNsZWFyIjogMjMsCisgICAgImNvbG9yIjogMjM3LAorICAgICJjdXJzb3IiOiAz
NCwKKyAgICAiZGlyZWN0aW9uIjogNCwKKyAgICAiZGlzcGxheSI6IDIxMCwKKyAgICAiZmlsbCI6
IDIsCisgICAgImZpbHRlciI6IDEsCisgICAgImZsb2F0IjogMTA1LAorICAgICJmb250IjogMTc0
LAorICAgICJmb250LWZhbWlseSI6IDI1LAorICAgICJmb250LXNpemUiOiAxNzQsCisgICAgImZv
bnQtc3R5bGUiOiA5LAorICAgICJmb250LXdlaWdodCI6IDg5LAorICAgICJoZWlnaHQiOiAxNjEs
CisgICAgImxlZnQiOiA1NCwKKyAgICAibGV0dGVyLXNwYWNpbmciOiAzLAorICAgICJsaW5lLWhl
aWdodCI6IDc1LAorICAgICJsaXN0LXN0eWxlIjogMTcsCisgICAgImxpc3Qtc3R5bGUtaW1hZ2Ui
OiA4LAorICAgICJsaXN0LXN0eWxlLXBvc2l0aW9uIjogOCwKKyAgICAibGlzdC1zdHlsZS10eXBl
IjogMTcsCisgICAgIm1hcmdpbiI6IDI0MSwKKyAgICAibWFyZ2luLWJvdHRvbSI6IDIyNiwKKyAg
ICAibWFyZ2luLWxlZnQiOiAyMjUsCisgICAgIm1hcmdpbi1yaWdodCI6IDIxMywKKyAgICAibWFy
Z2luLXRvcCI6IDI0MSwKKyAgICAibWF4LWhlaWdodCI6IDUsCisgICAgIm1heC13aWR0aCI6IDEx
LAorICAgICJtaW4taGVpZ2h0IjogOSwKKyAgICAibWluLXdpZHRoIjogNiwKKyAgICAib3BhY2l0
eSI6IDI0LAorICAgICJvdXRsaW5lIjogMTAsCisgICAgIm91dGxpbmUtY29sb3IiOiAxMCwKKyAg
ICAib3V0bGluZS1zdHlsZSI6IDEwLAorICAgICJvdXRsaW5lLXdpZHRoIjogMTAsCisgICAgIm92
ZXJmbG93IjogNTcsCisgICAgIm92ZXJmbG93LXgiOiA1NiwKKyAgICAib3ZlcmZsb3cteSI6IDU3
LAorICAgICJwYWRkaW5nIjogMjE2LAorICAgICJwYWRkaW5nLWJvdHRvbSI6IDIwOCwKKyAgICAi
cGFkZGluZy1sZWZ0IjogMjE2LAorICAgICJwYWRkaW5nLXJpZ2h0IjogMjA2LAorICAgICJwYWRk
aW5nLXRvcCI6IDIxNiwKKyAgICAicG9zaXRpb24iOiAxMzYsCisgICAgInJlc2l6ZSI6IDEsCisg
ICAgInJpZ2h0IjogMjksCisgICAgInN0cm9rZSI6IDEsCisgICAgInN0cm9rZS13aWR0aCI6IDEs
CisgICAgInRhYmxlLWxheW91dCI6IDEsCisgICAgInRleHQtYWxpZ24iOiA2NiwKKyAgICAidGV4
dC1kZWNvcmF0aW9uIjogNTMsCisgICAgInRleHQtaW5kZW50IjogOSwKKyAgICAidGV4dC1vdmVy
ZmxvdyI6IDgsCisgICAgInRleHQtc2hhZG93IjogMTksCisgICAgInRleHQtdHJhbnNmb3JtIjog
NSwKKyAgICAidG9wIjogNzEsCisgICAgInVuaWNvZGUtYmlkaSI6IDEsCisgICAgInZlcnRpY2Fs
LWFsaWduIjogMzcsCisgICAgInZpc2liaWxpdHkiOiAxMSwKKyAgICAid2hpdGUtc3BhY2UiOiAy
NCwKKyAgICAid2lkdGgiOiAyNTUsCisgICAgIndvcmQtd3JhcCI6IDYsCisgICAgInotaW5kZXgi
OiAzMiwKKyAgICAiem9vbSI6IDEwCit9OworCisKIFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9u
cy5wcm90b3R5cGUgPSB7CiAgICAgc3RhcnRzV2l0aDogZnVuY3Rpb24ocHJlZml4KQogICAgIHsK
QEAgLTEwMywxMCArMjIzLDIyIEBAIFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5wcm90b3R5
cGUgPSB7CiAgICAgICAgIHJldHVybiByZXN1bHRzOwogICAgIH0sCiAKLSAgICBmaXJzdFN0YXJ0
c1dpdGg6IGZ1bmN0aW9uKHByZWZpeCkKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge0FycmF5Ljxz
dHJpbmc+fSBwcm9wZXJ0aWVzCisgICAgICogQHJldHVybiB7bnVtYmVyfQorICAgICAqLworICAg
IG1vc3RVc2VkT2Y6IGZ1bmN0aW9uKHByb3BlcnRpZXMpCiAgICAgewotICAgICAgICB2YXIgZm91
bmRJbmRleCA9IHRoaXMuX2ZpcnN0SW5kZXhPZlByZWZpeChwcmVmaXgpOwotICAgICAgICByZXR1
cm4gKGZvdW5kSW5kZXggPT09IC0xID8gIiIgOiB0aGlzLl92YWx1ZXNbZm91bmRJbmRleF0pOwor
ICAgICAgICB2YXIgbWF4V2VpZ2h0ID0gMDsKKyAgICAgICAgdmFyIGluZGV4ID0gMDsKKyAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICB2YXIgd2VpZ2h0ID0gV2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zLldlaWdodFtwcm9w
ZXJ0aWVzW2ldXTsKKyAgICAgICAgICAgIGlmICh3ZWlnaHQgPiBtYXhXZWlnaHQpIHsKKyAgICAg
ICAgICAgICAgICBtYXhXZWlnaHQgPSB3ZWlnaHQ7CisgICAgICAgICAgICAgICAgaW5kZXggPSBp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBpbmRleDsKICAgICB9
LAogCiAgICAgX2ZpcnN0SW5kZXhPZlByZWZpeDogZnVuY3Rpb24ocHJlZml4KQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5q
cyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUu
anMKaW5kZXggNmNlN2I3OS4uY2FjZGU2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzCkBAIC0yNjY0LDcgKzI2
NjQsOCBAQCBXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUuQ1NTUHJvcGVydHlQcm9tcHQu
cHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHZhciByZXN1bHRz
ID0gdGhpcy5fY3NzQ29tcGxldGlvbnMuc3RhcnRzV2l0aChwcmVmaXgpOwotICAgICAgICBjb21w
bGV0aW9uc1JlYWR5Q2FsbGJhY2socmVzdWx0cyk7CisgICAgICAgIHZhciBzZWxlY3RlZEluZGV4
ID0gdGhpcy5fY3NzQ29tcGxldGlvbnMubW9zdFVzZWRPZihyZXN1bHRzKTsKKyAgICAgICAgY29t
cGxldGlvbnNSZWFkeUNhbGxiYWNrKHJlc3VsdHMsIHNlbGVjdGVkSW5kZXgpOwogICAgIH0KIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0UHJv
bXB0LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0UHJvbXB0Lmpz
CmluZGV4IGM0MGRmNGYuLmVjZGJjZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvVGV4dFByb21wdC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1RleHRQcm9tcHQuanMKQEAgLTQzMyw4ICs0MzMsOSBAQCBXZWJJbnNwZWN0
b3IuVGV4dFByb21wdC5wcm90b3R5cGUgPSB7CiAgICAgICogQHBhcmFtIHtSYW5nZX0gb3JpZ2lu
YWxXb3JkUHJlZml4UmFuZ2UKICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJldmVyc2UKICAgICAg
KiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+PX0gY29tcGxldGlvbnMKKyAgICAgKiBAcGFyYW0ge251
bWJlcj19IHNlbGVjdGVkSW5kZXgKICAgICAgKi8KLSAgICBfY29tcGxldGlvbnNSZWFkeTogZnVu
Y3Rpb24oc2VsZWN0aW9uLCBhdXRvLCBvcmlnaW5hbFdvcmRQcmVmaXhSYW5nZSwgcmV2ZXJzZSwg
Y29tcGxldGlvbnMpCisgICAgX2NvbXBsZXRpb25zUmVhZHk6IGZ1bmN0aW9uKHNlbGVjdGlvbiwg
YXV0bywgb3JpZ2luYWxXb3JkUHJlZml4UmFuZ2UsIHJldmVyc2UsIGNvbXBsZXRpb25zLCBzZWxl
Y3RlZEluZGV4KQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl93YWl0aW5nRm9yQ29tcGxldGlv
bnMgfHwgIWNvbXBsZXRpb25zIHx8ICFjb21wbGV0aW9ucy5sZW5ndGgpIHsKICAgICAgICAgICAg
IHRoaXMuaGlkZVN1Z2dlc3RCb3goKTsKQEAgLTQ1MSwyOSArNDUyLDMxIEBAIFdlYkluc3BlY3Rv
ci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKG9yaWdpbmFsV29yZFByZWZp
eFJhbmdlLnRvU3RyaW5nKCkgKyBzZWxlY3Rpb25SYW5nZS50b1N0cmluZygpICE9IGZ1bGxXb3Jk
UmFuZ2UudG9TdHJpbmcoKSkKICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICBzZWxlY3Rl
ZEluZGV4ID0gc2VsZWN0ZWRJbmRleCB8fCAwOworCiAgICAgICAgIHRoaXMuX3VzZXJFbnRlcmVk
UmFuZ2UgPSBmdWxsV29yZFJhbmdlOwogICAgICAgICB0aGlzLl91c2VyRW50ZXJlZFRleHQgPSBm
dWxsV29yZFJhbmdlLnRvU3RyaW5nKCk7CiAKICAgICAgICAgaWYgKHRoaXMuX3N1Z2dlc3RCb3gp
Ci0gICAgICAgICAgICB0aGlzLl9zdWdnZXN0Qm94LnVwZGF0ZVN1Z2dlc3Rpb25zKHRoaXMuX2Jv
eEZvckFuY2hvckF0U3RhcnQoc2VsZWN0aW9uLCBmdWxsV29yZFJhbmdlKSwgY29tcGxldGlvbnMs
ICF0aGlzLmlzQ2FyZXRBdEVuZE9mUHJvbXB0KCkpOworICAgICAgICAgICAgdGhpcy5fc3VnZ2Vz
dEJveC51cGRhdGVTdWdnZXN0aW9ucyh0aGlzLl9ib3hGb3JBbmNob3JBdFN0YXJ0KHNlbGVjdGlv
biwgZnVsbFdvcmRSYW5nZSksIGNvbXBsZXRpb25zLCBzZWxlY3RlZEluZGV4LCAhdGhpcy5pc0Nh
cmV0QXRFbmRPZlByb21wdCgpKTsKIAogICAgICAgICB2YXIgd29yZFByZWZpeExlbmd0aCA9IG9y
aWdpbmFsV29yZFByZWZpeFJhbmdlLnRvU3RyaW5nKCkubGVuZ3RoOwogCiAgICAgICAgIGlmIChh
dXRvKSB7Ci0gICAgICAgICAgICB2YXIgY29tcGxldGlvblRleHQgPSBjb21wbGV0aW9uc1swXTsK
KyAgICAgICAgICAgIHZhciBjb21wbGV0aW9uVGV4dCA9IGNvbXBsZXRpb25zW3NlbGVjdGVkSW5k
ZXhdOwogICAgICAgICAgICAgdmFyIGNvbW1vblByZWZpeCA9IHRoaXMuX2J1aWxkQ29tbW9uUHJl
Zml4KGNvbXBsZXRpb25zLCB3b3JkUHJlZml4TGVuZ3RoKTsKIAogICAgICAgICAgICAgdGhpcy5f
Y29tbW9uUHJlZml4ID0gY29tbW9uUHJlZml4OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgaWYgKGNvbXBsZXRpb25zLmxlbmd0aCA9PT0gMSkgewotICAgICAgICAgICAgICAgIHZhciBj
b21wbGV0aW9uVGV4dCA9IGNvbXBsZXRpb25zWzBdOworICAgICAgICAgICAgICAgIHZhciBjb21w
bGV0aW9uVGV4dCA9IGNvbXBsZXRpb25zW3NlbGVjdGVkSW5kZXhdOwogICAgICAgICAgICAgICAg
IHdvcmRQcmVmaXhMZW5ndGggPSBjb21wbGV0aW9uVGV4dC5sZW5ndGg7CiAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgIHZhciBjb21tb25QcmVmaXggPSB0aGlzLl9idWlsZENv
bW1vblByZWZpeChjb21wbGV0aW9ucywgd29yZFByZWZpeExlbmd0aCk7CiAgICAgICAgICAgICAg
ICAgd29yZFByZWZpeExlbmd0aCA9IGNvbW1vblByZWZpeC5sZW5ndGg7CiAKICAgICAgICAgICAg
ICAgICBpZiAoc2VsZWN0aW9uLmlzQ29sbGFwc2VkKQotICAgICAgICAgICAgICAgICAgICB2YXIg
Y29tcGxldGlvblRleHQgPSBjb21wbGV0aW9uc1swXTsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IGNvbXBsZXRpb25UZXh0ID0gY29tcGxldGlvbnNbc2VsZWN0ZWRJbmRleF07CiAgICAgICAgICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50VGV4dCA9IGZ1bGxX
b3JkUmFuZ2UudG9TdHJpbmcoKTsKIApAQCAtNDg1LDcgKzQ4OCw3IEBAIFdlYkluc3BlY3Rvci5U
ZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKIAogICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dElu
ZGV4ID0gZm91bmRJbmRleCArIChyZXZlcnNlID8gLTEgOiAxKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGZvdW5kSW5kZXggPT09IG51bGwgfHwgbmV4dEluZGV4ID49IGNvbXBsZXRpb25zLmxl
bmd0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wbGV0aW9uVGV4dCA9IGNvbXBs
ZXRpb25zWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBsZXRpb25UZXh0ID0g
Y29tcGxldGlvbnNbc2VsZWN0ZWRJbmRleF07CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG5leHRJbmRleCA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcGxldGlvblRl
eHQgPSBjb21wbGV0aW9uc1tjb21wbGV0aW9ucy5sZW5ndGggLSAxXTsKICAgICAgICAgICAgICAg
ICAgICAgZWxzZQpAQCAtNzQ5LDcgKzc1Miw3IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWdnZXN0Qm94LnBhZ2VEb3du
S2V5UHJlc3NlZChldmVudCk7CiAKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0sCisgICAg
fQogfQogCiBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuX19wcm90b19fID0gV2Vi
SW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CkBAIC05MjksNiArOTMyLDggQEAgV2ViSW5zcGVj
dG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJveCA9IGZ1bmN0aW9uKHRleHRQcm9tcHQsIGlucHV0RWxl
bWVudCwgY2xhc3NOYW0KIHsKICAgICB0aGlzLl90ZXh0UHJvbXB0ID0gdGV4dFByb21wdDsKICAg
ICB0aGlzLl9pbnB1dEVsZW1lbnQgPSBpbnB1dEVsZW1lbnQ7CisgICAgdGhpcy5fbGVuZ3RoID0g
MDsKKyAgICB0aGlzLl9zZWxlY3RlZEluZGV4ID0gLTE7CiAgICAgdGhpcy5fc2VsZWN0ZWRFbGVt
ZW50ID0gbnVsbDsKICAgICB0aGlzLl9ib3VuZE9uU2Nyb2xsID0gdGhpcy5fb25zY3JvbGxyZXNp
emUuYmluZCh0aGlzLCB0cnVlKTsKICAgICB0aGlzLl9ib3VuZE9uUmVzaXplID0gdGhpcy5fb25z
Y3JvbGxyZXNpemUuYmluZCh0aGlzLCBmYWxzZSk7CkBAIC0xMDcyLDYwICsxMDc3LDI0IEBAIFdl
Ykluc3BlY3Rvci5UZXh0UHJvbXB0LlN1Z2dlc3RCb3gucHJvdG90eXBlID0gewogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9LAogCi0gICAgX29uTmV4dEl0ZW06IGZ1bmN0aW9uKGV2ZW50LCBp
c1BhZ2VTY3JvbGwpCisgICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IHNoaWZ0CisgICAg
ICogQHBhcmFtIHtib29sZWFuPX0gaXNDaXJjdWxhcgorICAgICAqIEByZXR1cm4ge2Jvb2xlYW59
IGlzIGNoYW5nZWQKKyAgICAgKi8KKyAgICBfc2VsZWN0Q2xvc2VzdDogZnVuY3Rpb24oc2hpZnQs
IGlzQ2lyY3VsYXIpCiAgICAgewotICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNvbnRlbnRF
bGVtZW50LmNoaWxkTm9kZXM7Ci0gICAgICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKQorICAgICAg
ICBpZiAoIXRoaXMuX2xlbmd0aCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAg
ICBpZiAoIXRoaXMuX3NlbGVjdGVkRWxlbWVudCkKLSAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVk
RWxlbWVudCA9IHRoaXMuY29udGVudEVsZW1lbnQuZmlyc3RDaGlsZDsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBpZiAoIWlzUGFnZVNjcm9sbCkKLSAgICAgICAgICAgICAgICB0aGlzLl9z
ZWxlY3RlZEVsZW1lbnQgPSB0aGlzLl9zZWxlY3RlZEVsZW1lbnQubmV4dFNpYmxpbmcgfHwgdGhp
cy5jb250ZW50RWxlbWVudC5maXJzdENoaWxkOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIGNhbmRpZGF0ZSA9IHRoaXMuX3NlbGVjdGVkRWxlbWVudDsKLQotICAgICAg
ICAgICAgICAgIGZvciAodmFyIGl0ZW1zTGVmdCA9IHRoaXMuX3Jvd0NvdW50UGVyVmlld3BvcnQ7
IGl0ZW1zTGVmdDsgLS1pdGVtc0xlZnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRp
ZGF0ZS5uZXh0U2libGluZykKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IGNh
bmRpZGF0ZS5uZXh0U2libGluZzsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50ID0gY2FuZGlkYXRlOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGlvbigpOwotICAgICAgICB0aGlzLl9h
cHBseVN1Z2dlc3Rpb24odW5kZWZpbmVkLCB0cnVlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfSwKLQotICAgIF9vblByZXZpb3VzSXRlbTogZnVuY3Rpb24oZXZlbnQsIGlzUGFnZVNjcm9s
bCkKLSAgICB7Ci0gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY29udGVudEVsZW1lbnQuY2hp
bGROb2RlczsKLSAgICAgICAgaWYgKCFjaGlsZHJlbi5sZW5ndGgpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlbGVjdGVkSW5kZXggKyBzaGlm
dDsKIAotICAgICAgICBpZiAoIXRoaXMuX3NlbGVjdGVkRWxlbWVudCkKLSAgICAgICAgICAgIHRo
aXMuX3NlbGVjdGVkRWxlbWVudCA9IHRoaXMuY29udGVudEVsZW1lbnQubGFzdENoaWxkOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmICghaXNQYWdlU2Nyb2xsKQotICAgICAgICAgICAg
ICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVudCA9IHRoaXMuX3NlbGVjdGVkRWxlbWVudC5wcmV2aW91
c1NpYmxpbmcgfHwgdGhpcy5jb250ZW50RWxlbWVudC5sYXN0Q2hpbGQ7Ci0gICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICB2YXIgY2FuZGlkYXRlID0gdGhpcy5fc2VsZWN0ZWRFbGVt
ZW50OwotCi0gICAgICAgICAgICAgICAgZm9yICh2YXIgaXRlbXNMZWZ0ID0gdGhpcy5fcm93Q291
bnRQZXJWaWV3cG9ydDsgaXRlbXNMZWZ0OyAtLWl0ZW1zTGVmdCkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoY2FuZGlkYXRlLnByZXZpb3VzU2libGluZykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZS5wcmV2aW91c1NpYmxpbmc7Ci0gICAgICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgaWYgKGlzQ2lyY3VsYXIpCisgICAgICAgICAgICBpbmRleCA9ICh0aGlz
Ll9sZW5ndGggKyBpbmRleCkgJSB0aGlzLl9sZW5ndGg7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGluZGV4ID0gTnVtYmVyLmNvbnN0cmFpbihpbmRleCwgMCwgdGhpcy5fbGVuZ3RoIC0gMSk7
CiAKLSAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEVsZW1lbnQgPSBjYW5kaWRhdGU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0aW9uKCk7
CisgICAgICAgIHRoaXMuX3NlbGVjdEl0ZW0oaW5kZXgpOwogICAgICAgICB0aGlzLl9hcHBseVN1
Z2dlc3Rpb24odW5kZWZpbmVkLCB0cnVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSwK
QEAgLTExMzUsMTMgKzExMDQsMTMgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJv
eC5wcm90b3R5cGUgPSB7CiAgICAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPj19IGNvbXBsZXRp
b25zCiAgICAgICogQHBhcmFtIHtib29sZWFuPX0gY2FuU2hvd0ZvclNpbmdsZUl0ZW0KICAgICAg
Ki8KLSAgICB1cGRhdGVTdWdnZXN0aW9uczogZnVuY3Rpb24oYW5jaG9yQm94LCBjb21wbGV0aW9u
cywgY2FuU2hvd0ZvclNpbmdsZUl0ZW0pCisgICAgdXBkYXRlU3VnZ2VzdGlvbnM6IGZ1bmN0aW9u
KGFuY2hvckJveCwgY29tcGxldGlvbnMsIHNlbGVjdGVkSW5kZXgsIGNhblNob3dGb3JTaW5nbGVJ
dGVtKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX3N1Z2dlc3RUaW1lb3V0KSB7CiAgICAgICAg
ICAgICBjbGVhclRpbWVvdXQodGhpcy5fc3VnZ2VzdFRpbWVvdXQpOwogICAgICAgICAgICAgZGVs
ZXRlIHRoaXMuX3N1Z2dlc3RUaW1lb3V0OwogICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2NvbXBs
ZXRpb25zUmVhZHkoYW5jaG9yQm94LCBjb21wbGV0aW9ucywgY2FuU2hvd0ZvclNpbmdsZUl0ZW0p
OworICAgICAgICB0aGlzLl9jb21wbGV0aW9uc1JlYWR5KGFuY2hvckJveCwgY29tcGxldGlvbnMs
IHNlbGVjdGVkSW5kZXgsIGNhblNob3dGb3JTaW5nbGVJdGVtKTsKICAgICB9LAogCiAgICAgX29u
SXRlbU1vdXNlRG93bjogZnVuY3Rpb24odGV4dCwgZXZlbnQpCkBAIC0xMTY5LDEwICsxMTM4LDEy
IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LlN1Z2dlc3RCb3gucHJvdG90eXBlID0gewogICAg
IH0sCiAKICAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBjYW5TaG93Rm9yU2luZ2xl
SXRlbQorICAgICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz49fSBpdGVtcworICAgICAqIEBwYXJh
bSB7bnVtYmVyfSBzZWxlY3RlZEluZGV4CiAgICAgICovCi0gICAgX3VwZGF0ZUl0ZW1zOiBmdW5j
dGlvbihpdGVtcywgY2FuU2hvd0ZvclNpbmdsZUl0ZW0pCisgICAgX3VwZGF0ZUl0ZW1zOiBmdW5j
dGlvbihpdGVtcywgc2VsZWN0ZWRJbmRleCkKICAgICB7CisgICAgICAgIHRoaXMuX2xlbmd0aCA9
IGl0ZW1zLmxlbmd0aDsKICAgICAgICAgdGhpcy5jb250ZW50RWxlbWVudC5yZW1vdmVDaGlsZHJl
bigpOwogCiAgICAgICAgIHZhciB1c2VyRW50ZXJlZFRleHQgPSB0aGlzLl90ZXh0UHJvbXB0Ll91
c2VyRW50ZXJlZFRleHQ7CkBAIC0xMTgyLDIxICsxMTUzLDIzIEBAIFdlYkluc3BlY3Rvci5UZXh0
UHJvbXB0LlN1Z2dlc3RCb3gucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5jb250ZW50
RWxlbWVudC5hcHBlbmRDaGlsZChjdXJyZW50SXRlbUVsZW1lbnQpOwogICAgICAgICB9CiAKLSAg
ICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50ID0gY2FuU2hvd0ZvclNpbmdsZUl0ZW0gPyB0aGlz
LmNvbnRlbnRFbGVtZW50LmZpcnN0Q2hpbGQgOiBudWxsOwotICAgICAgICB0aGlzLl91cGRhdGVT
ZWxlY3Rpb24oKTsKKyAgICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50ID0gbnVsbDsKKyAgICAg
ICAgdGhpcy5fc2VsZWN0SXRlbShzZWxlY3RlZEluZGV4KTsKICAgICB9LAogCi0gICAgX3VwZGF0
ZVNlbGVjdGlvbjogZnVuY3Rpb24oKQorICAgIC8qKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBp
bmRleAorICAgICAqLworICAgIF9zZWxlY3RJdGVtOiBmdW5jdGlvbihpbmRleCkKICAgICB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBtaWdodCB3YW50IHNvbWUgb3B0aW1pemF0aW9uIGlmIGJlY29tZXMg
YSBib3R0bGVuZWNrLgotICAgICAgICBmb3IgKHZhciBjaGlsZCA9IHRoaXMuY29udGVudEVsZW1l
bnQuZmlyc3RDaGlsZDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQubmV4dFNpYmxpbmcpIHsKLSAgICAg
ICAgICAgIGlmIChjaGlsZCAhPT0gdGhpcy5fc2VsZWN0ZWRFbGVtZW50KQotICAgICAgICAgICAg
ICAgIGNoaWxkLnJlbW92ZVN0eWxlQ2xhc3MoInNlbGVjdGVkIik7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKHRoaXMuX3NlbGVjdGVkRWxlbWVudCkgewotICAgICAgICAgICAgdGhpcy5fc2VsZWN0
ZWRFbGVtZW50LmFkZFN0eWxlQ2xhc3MoInNlbGVjdGVkIik7Ci0gICAgICAgICAgICB0aGlzLl9z
ZWxlY3RlZEVsZW1lbnQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChmYWxzZSk7Ci0gICAgICAgIH0K
KyAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkRWxlbWVudCkKKyAgICAgICAgICAgIHRoaXMuX3Nl
bGVjdGVkRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJzZWxlY3RlZCIpOworCisgICAgICAgIHRo
aXMuX3NlbGVjdGVkSW5kZXggPSBpbmRleDsKKyAgICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50
ID0gdGhpcy5jb250ZW50RWxlbWVudC5jaGlsZHJlbltpbmRleF07CisgICAgICAgIHRoaXMuX3Nl
bGVjdGVkRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJzZWxlY3RlZCIpOworCisgICAgICAgIHRoaXMu
X3NlbGVjdGVkRWxlbWVudC5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKGZhbHNlKTsKICAgICB9LAog
CiAgICAgLyoqCkBAIC0xMjI4LDEwICsxMjAxLDEwIEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0
LlN1Z2dlc3RCb3gucHJvdG90eXBlID0gewogICAgICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz49
fSBjb21wbGV0aW9ucwogICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGNhblNob3dGb3JTaW5nbGVJ
dGVtCiAgICAgICovCi0gICAgX2NvbXBsZXRpb25zUmVhZHk6IGZ1bmN0aW9uKGFuY2hvckJveCwg
Y29tcGxldGlvbnMsIGNhblNob3dGb3JTaW5nbGVJdGVtKQorICAgIF9jb21wbGV0aW9uc1JlYWR5
OiBmdW5jdGlvbihhbmNob3JCb3gsIGNvbXBsZXRpb25zLCBzZWxlY3RlZEluZGV4LCBjYW5TaG93
Rm9yU2luZ2xlSXRlbSkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9jYW5TaG93Qm94KGNvbXBs
ZXRpb25zLCBjYW5TaG93Rm9yU2luZ2xlSXRlbSkpIHsKLSAgICAgICAgICAgIHRoaXMuX3VwZGF0
ZUl0ZW1zKGNvbXBsZXRpb25zLCBjYW5TaG93Rm9yU2luZ2xlSXRlbSk7CisgICAgICAgICAgICB0
aGlzLl91cGRhdGVJdGVtcyhjb21wbGV0aW9ucywgc2VsZWN0ZWRJbmRleCk7CiAgICAgICAgICAg
ICB0aGlzLl91cGRhdGVCb3hQb3NpdGlvbihhbmNob3JCb3gpOwogICAgICAgICAgICAgaWYgKCF0
aGlzLnZpc2libGUpCiAgICAgICAgICAgICAgICAgdGhpcy5fYm9keUVsZW1lbnQuYXBwZW5kQ2hp
bGQodGhpcy5fZWxlbWVudCk7CkBAIC0xMjQyLDIyICsxMjE1LDIyIEBAIFdlYkluc3BlY3Rvci5U
ZXh0UHJvbXB0LlN1Z2dlc3RCb3gucHJvdG90eXBlID0gewogCiAgICAgdXBLZXlQcmVzc2VkOiBm
dW5jdGlvbihldmVudCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9vblByZXZpb3VzSXRl
bShldmVudCwgZmFsc2UpOworICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0Q2xvc2VzdCgtMSwg
dHJ1ZSk7CiAgICAgfSwKIAogICAgIGRvd25LZXlQcmVzc2VkOiBmdW5jdGlvbihldmVudCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9vbk5leHRJdGVtKGV2ZW50LCBmYWxzZSk7CisgICAg
ICAgIHJldHVybiB0aGlzLl9zZWxlY3RDbG9zZXN0KDEsIHRydWUpOwogICAgIH0sCiAKICAgICBw
YWdlVXBLZXlQcmVzc2VkOiBmdW5jdGlvbihldmVudCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0
aGlzLl9vblByZXZpb3VzSXRlbShldmVudCwgdHJ1ZSk7CisgICAgICAgIHJldHVybiB0aGlzLl9z
ZWxlY3RDbG9zZXN0KC10aGlzLl9yb3dDb3VudFBlclZpZXdwb3J0LCBmYWxzZSk7CiAgICAgfSwK
IAogICAgIHBhZ2VEb3duS2V5UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5fb25OZXh0SXRlbShldmVudCwgdHJ1ZSk7CisgICAgICAgIHJldHVybiB0
aGlzLl9zZWxlY3RDbG9zZXN0KHRoaXMuX3Jvd0NvdW50UGVyVmlld3BvcnQsIGZhbHNlKTsKICAg
ICB9LAogCiAgICAgZW50ZXJLZXlQcmVzc2VkOiBmdW5jdGlvbihldmVudCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>