<?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>45787</bug_id>
          
          <creation_ts>2010-09-14 15:57:13 -0700</creation_ts>
          <short_desc>Yarr JIT code checks BOL (^) each time through loop when in subexpression</short_desc>
          <delta_ts>2010-09-18 14:04:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>joepeck</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>279225</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-09-14 15:57:13 -0700</bug_when>
    <thetext>The current Yarr JIT code will check for beginning of line every time through a loop for expression like (^|X)abc.  
This generates inefficient code.  For non-multiline regular expressions, the beginning of line check can be done once for the first iteration and after that only the remaining parenthetical subexpressions need to be checked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279228</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-09-14 16:01:20 -0700</bug_when>
    <thetext>This is related to &lt;rdar://problem/8401178&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279255</commentid>
    <comment_count>2</comment_count>
      <attachid>67619</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-09-14 16:39:31 -0700</bug_when>
    <thetext>Created attachment 67619
Patch to unroll regular expression containing leading (^|...) subexpressions.

The addition of this patch improves the v8-regexp execution time by ~15%.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279259</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-09-14 17:02:41 -0700</bug_when>
    <thetext>Actually this is related to &lt;rdar://problem/8383005&gt; v8 regexp codegen improvements</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279593</commentid>
    <comment_count>4</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-09-15 10:08:39 -0700</bug_when>
    <thetext>Was it deemed impractical to optimize ^ in a non-first alteration
of the first group. For example:

  &quot;aced\nabc&quot;.match( /(X|^)abc/m )

Or, multiple alterations: (here it looks like your patch would optimize
the first, but not the second)

  &quot;sire\nstring&quot;.match( /(^si|^st|X)r/m )

It could be that it is far less likely that developers take these approaches
compared to the one you are optimizing. The goal is probably to improve
the performance of real world JavaScript, not necessarily all edge cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279607</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-09-15 10:31:47 -0700</bug_when>
    <thetext>First of all, multiline regular expressions are excluded from this optimization as this optimization factors out the (^)blah from (^|...)blah and executes it once at the beginning of the line.

Looking for ^ in some location other than the first position could be done, but there are some troubling corner cases.  Consider 

   &quot;abab&quot;.match( /(ab|^)ab/ ).

This should match the first alternative including capturing.

The suggestion of handling expressions like

  &quot;sireblah&quot;.match( /(^si|^st|X)r/ ) 

could be done with more detection and unrolling logic.  It wasn&apos;t seen as the likely form for ^ anchored expression &quot;in the real world&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279611</commentid>
    <comment_count>6</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-09-15 10:37:24 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; First of all, multiline regular expressions are excluded from this optimization ...

Whoops, yes you&apos;re right.


&gt; Looking for ^ in some location other than the first position could be done, but there are some troubling corner cases.  Consider 
&gt; 
&gt;    &quot;abab&quot;.match( /(ab|^)ab/ ).
&gt; 
&gt; This should match the first alternative including capturing.

Very good point.


&gt; The suggestion of handling expressions like
&gt; 
&gt;   &quot;sireblah&quot;.match( /(^si|^st|X)r/ ) 
&gt; 
&gt; could be done with more detection and unrolling logic.  It wasn&apos;t seen as the likely form for ^ anchored expression &quot;in the real world&quot;.

Sounds good to me.

Thanks for the explanations!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280326</commentid>
    <comment_count>7</comment_count>
      <attachid>67619</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-09-16 13:43:05 -0700</bug_when>
    <thetext>Comment on attachment 67619
Patch to unroll regular expression containing leading (^|...) subexpressions.

Clearing review flag &amp; look forward to a new patch as per our discussion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280480</commentid>
    <comment_count>8</comment_count>
      <attachid>67868</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-09-16 17:51:48 -0700</bug_when>
    <thetext>Created attachment 67868
Patch that handles broader class of ^ anchored expressions.

This patch unrolls expressions with any alternative that contains ^ anchoring.
Compared to the prior patch, this patch uses the parse to record expressions 
that are BOL anchored.  The routine optimizeBOL() then re-factors the expression,
adding alternatives that don&apos;t contain BOL anchoring.  The original expression is
executed once and the alternatives without BOL anchoring are looped over.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280555</commentid>
    <comment_count>9</comment_count>
      <attachid>67868</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-09-16 23:51:33 -0700</bug_when>
    <thetext>Comment on attachment 67868
Patch that handles broader class of ^ anchored expressions.

This patch looks really great.  Two small issues.

&gt; +        // Bubble up BOL flags
&gt; +        for (unsigned i = 0; i &lt; numParenAlternatives; i++)
&gt; +            if (parenthesisDisjunction-&gt;m_alternatives[i]-&gt;m_startsWithBOL)
&gt; +                numBOLAnchoredAlts++;

(1) This for-loop needs braces.  (Our style guidelines require braces for any nested multiline statement, even just nesting a comment &amp; one line of code.)

&gt; +        if ((!m_pattern.m_containsBOL) || (m_pattern.m_multiline))

(2) Please lose the two nested sets of parentheses.

There is one other thing I&apos;d like to see, but not necessarily as a part of this patch.  Unless I&apos;m missing something this patch won&apos;t yet optimize /^a/ matched against a huge string of &apos;b&apos;s.  It looks to me like you&apos;ll fail the &apos;if (loopDisjunction) {&apos; test, and safely not modify the pattern - which means I think we&apos;ll still search all the way through the input looking for BOL.  In !&apos;if (loopDisjunction) {&apos; cases (cases where m_startsWithBOL is true for the topmost disjunction) we should be able to avoid looping at all – if testing the first position fails then we have a failed match.  (I don&apos;t think that you&apos;re optimizing this yet, apologies if I&apos;ve missed this).

I think it would be really great if we could add this optimization now since it is something that PCRE has but YARR does not, but I don&apos;t think you need to do so as a part of this patch, it should be a nice simple addition to follow up with building on this work.

Really awesome job, would be an r+ bar the two little style things.

G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280755</commentid>
    <comment_count>10</comment_count>
      <attachid>67924</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-09-17 11:18:19 -0700</bug_when>
    <thetext>Created attachment 67924
Patch with changes recommended by reviewer

Cleaned up both style issues pointed out.

Added code to properly handle expressions like /^a/ to only execute once and never loop.

Found and fixed issue for expressions like /(?!^)a/ which should not be marked as starting with a BOL, since they start with NOT BOL!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281176</commentid>
    <comment_count>11</comment_count>
      <attachid>67924</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-18 14:04:29 -0700</bug_when>
    <thetext>Comment on attachment 67924
Patch with changes recommended by reviewer

Clearing flags on attachment: 67924

Committed r67790: &lt;http://trac.webkit.org/changeset/67790&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281177</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-18 14:04:34 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67619</attachid>
            <date>2010-09-14 16:39:31 -0700</date>
            <delta_ts>2010-09-16 17:51:48 -0700</delta_ts>
            <desc>Patch to unroll regular expression containing leading (^|...) subexpressions.</desc>
            <filename>45787.patch</filename>
            <type>text/plain</type>
            <size>13422</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY3NTEyKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTAtMDktMTQgIE1pY2hhZWwg
U2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgY29kZSB0byB1bnJvbGwgcmVndWxhciBleHByZXNz
aW9ucyBjb250YWluaW5nIChefC4uLikuCisgICAgICAgIFRoZSBiZWdpbm5pbmcgb2YgbGluZSBp
cyBoYW5kbGUgb25jZSBhbmQgb25seSB0aGUgcmVtYWluaW5nIAorICAgICAgICBzdWJleHByZXNz
aW9uIGFsdGVybmF0aXZlcyBhcmUgaGFuZGxlIGV2ZXJ5IHRpbWUgdGhyb3VnaAorICAgICAgICB0
aGUgbG9vcC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ1Nzg3CisKKyAgICAgICAgKiB5YXJyL1JlZ2V4Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlND
OjpZYXJyOjpSZWdleFBhdHRlcm5Db25zdHJ1Y3Rvcjo6b3B0aW1pemVCT0wpOiBOZXcgbWV0aG9k
IHRvIGRldGVjdAorICAgICAgICBhbmQgZmFjdG9yIG91dCB0aGUgKF4pYmxhaCBwYXJ0IG9mIGEg
KF58Li4uKWJsYWggcmVndWxhciBleHByZXNzaW9uLgorICAgICAgICAoSlNDOjpZYXJyOjpjb21w
aWxlUmVnZXgpOgorICAgICAgICAqIHlhcnIvUmVnZXhKSVQuY3BwOgorICAgICAgICAoSlNDOjpZ
YXJyOjpSZWdleEdlbmVyYXRvcjo6Z2VuZXJhdGVEaXNqdW5jdGlvbik6IENoYW5nZWQgdG8gb25s
eQorICAgICAgICBsb29wIG92ZXIgcmVwZWF0aW5nIGFsdGVybmF0aXZlcy4KKyAgICAgICAgKiB5
YXJyL1JlZ2V4UGF0dGVybi5oOgorICAgICAgICAoSlNDOjpZYXJyOjpQYXR0ZXJuQWx0ZXJuYXRp
dmU6OlBhdHRlcm5BbHRlcm5hdGl2ZSk6ICBBZGRlZCAKKyAgICAgICAgbV9vbmNlVGhyb3VnaCB0
byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCBhbiBhbHRlcm5hdGl2ZSBzaG91bGQKKyAgICAgICAg
bG9vcC4gIEFsc28gYWRkZWQgY29ycmVzcG9uZGluZyBzZXR0ZXIgYW5kIGdldHRlci4KKyAgICAg
ICAgKEpTQzo6WWFycjo6UGF0dGVybkFsdGVybmF0aXZlOjpzZXRPbmNlVGhyb3VnaCk6CisgICAg
ICAgIChKU0M6OllhcnI6OlBhdHRlcm5BbHRlcm5hdGl2ZTo6b25jZVRocm91Z2gpOgorCiAyMDEw
LTA5LTE0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBHZW9mZnJleSBHYXJlbi4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhDb21w
aWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUveWFyci9SZWdleENvbXBpbGVy
LmNwcAkocmV2aXNpb24gNjc1MTEpCisrKyBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4Q29tcGls
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODksNiArNTg5LDgwIEBAIHB1YmxpYzoKICAgICAg
ICAgc2V0dXBEaXNqdW5jdGlvbk9mZnNldHMobV9wYXR0ZXJuLm1fYm9keSwgMCwgMCk7CiAgICAg
fQogCisgICAgdm9pZCBvcHRpbWl6ZUJPTCgpCisgICAgeworICAgICAgICAvLyBMb29rIGZvciBl
eHByZXNzaW9ucyBiZWdpbm5pbmcgd2l0aCAoXnwuLi4pYmxhaCBhbmQgdW5yb2xsIHRoZW0gdG8K
KyAgICAgICAgLy8gICAgKCheKWJsYWh8KC4uLilibGFoKQorICAgICAgICAvLyBUaGlzIGlzIG9u
bHkgdmFsaWQgZm9yIG5vbi1tdWx0aWxpbmUgZXhwcmVzc2lvbnMuCisgICAgICAgIFBhdHRlcm5E
aXNqdW5jdGlvbiogZGlzanVuY3Rpb24gPSBtX3BhdHRlcm4ubV9ib2R5OworICAgICAgICAKKyAg
ICAgICAgaWYgKG1fcGF0dGVybi5tX211bHRpbGluZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgICAgIGlmIChkaXNqdW5jdGlvbi0+bV9hbHRlcm5hdGl2ZXMuc2l6ZSgpID09
IDEpIHsgICAgICAgIAorICAgICAgICAgICAgUGF0dGVybkFsdGVybmF0aXZlKiBhbHRlcm5hdGl2
ZSA9IGRpc2p1bmN0aW9uLT5tX2FsdGVybmF0aXZlc1swXTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKGFsdGVybmF0aXZlLT5tX3Rlcm1zLnNpemUoKSA8PSAxKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUGF0dGVyblRlcm0mIGZpcnN0
VGVybSA9IGFsdGVybmF0aXZlLT5tX3Rlcm1zWzBdOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAoZmlyc3RUZXJtLnR5cGUgIT0gUGF0dGVyblRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBh
dHRlcm4pCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBQYXR0ZXJuRGlzanVuY3Rpb24qIHN1YlBhdHRlcm4gPSBmaXJzdFRlcm0ucGFyZW50aGVzZXMu
ZGlzanVuY3Rpb247CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgoc3ViUGF0dGVybi0+
bV9hbHRlcm5hdGl2ZXMuc2l6ZSgpIDwgMikgfHwgKHN1YlBhdHRlcm4tPm1fYWx0ZXJuYXRpdmVz
WzBdLT5tX3Rlcm1zLnNpemUoKSAhPSAxKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIFBhdHRlcm5UZXJtJiBmaXJzdFN1YlRlcm0gPSBzdWJQYXR0
ZXJuLT5tX2FsdGVybmF0aXZlc1swXS0+bV90ZXJtc1swXTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKGZpcnN0U3ViVGVybS50eXBlICE9IFBhdHRlcm5UZXJtOjpUeXBlQXNzZXJ0aW9u
Qk9MKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gRm91bmQgYSBwYXR0ZXJuIHRvIHVucm9sbC4KKyAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5l
dyBkaXNqdWN0aW9uIHdpdGggdGhlIF4gZmFjdG9yZWQgb3V0IGluIHRoZSBmaXJzdCBhbHRlcm5h
dGl2ZSBhbmQKKyAgICAgICAgICAgIC8vIHRoZSByZW1haW5pbmcgYWx0ZXJuYXRpdmVzIGZyb20g
dGhlIHN1YiBwYXR0ZXJuIGFzIHRoZSBzZWNvbmQgYWx0ZXJuYXRpdmUuCisgICAgICAgICAgICAv
LyBFYWNoIG9mIHRoZXNlIG5ldyBhbHRlcm5hdGl2ZSB3aWxsIGhhdmUgdGhlIG9yaWdpbmFsIHJl
bWlhbmluZyB0ZXJtcyBhZGRlZCBvbi4KKyAgICAgICAgICAgIC8vIFRoZSAib25jZSB0aHJvdWdo
IiBmbGFnIGlzIHNldCBvbiB0aGUgXiByb290ZWQgYWx0ZXJuYXRpdmUgdG8gdGVsbCB0aGUKKyAg
ICAgICAgICAgIC8vIGNvZGUgZ2VuZXJhdG9yIHRvIG5vdCBpbmNsdWRlIHRoYXQgYWx0ZXJuYXRp
dmUgaW4gdGhlIGxvb3AuCisgICAgICAgICAgICBQYXR0ZXJuRGlzanVuY3Rpb24qIHVucm9sbGVk
UGF0dGVybkRpc2p1bmN0aW9uID0gbmV3IFBhdHRlcm5EaXNqdW5jdGlvbigpOworICAgICAgICAg
ICAgUGF0dGVybkFsdGVybmF0aXZlKiBhbmNob3JlZEJPTEFsdCA9IHVucm9sbGVkUGF0dGVybkRp
c2p1bmN0aW9uLT5hZGROZXdBbHRlcm5hdGl2ZSgpOworICAgICAgICAgICAgYW5jaG9yZWRCT0xB
bHQtPnNldE9uY2VUaHJvdWdoKCk7ICAgICAgICAgICAgCisgICAgICAgICAgICBQYXR0ZXJuRGlz
anVuY3Rpb24qIEJPTEFsdHMgPSBuZXcgUGF0dGVybkRpc2p1bmN0aW9uKGFuY2hvcmVkQk9MQWx0
KTsKKyAgICAgICAgICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSogQk9MQWx0ID0gQk9MQWx0cy0+YWRk
TmV3QWx0ZXJuYXRpdmUoKTsKKyAgICAgICAgICAgIFBhdHRlcm5UZXJtIHRlcm0gPSBjb3B5VGVy
bShzdWJQYXR0ZXJuLT5tX2FsdGVybmF0aXZlc1swXS0+bV90ZXJtc1swXSk7CisgICAgICAgICAg
ICBCT0xBbHQtPm1fdGVybXMuYXBwZW5kKHRlcm0pOworICAgICAgICAgICAgYW5jaG9yZWRCT0xB
bHQtPm1fdGVybXMuYXBwZW5kKFBhdHRlcm5UZXJtKFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50aGVz
ZXNTdWJwYXR0ZXJuLCBmaXJzdFRlcm0ucGFyZW50aGVzZXMuc3VicGF0dGVybklkLCBCT0xBbHRz
LCBmaXJzdFRlcm0uaW52ZXJ0T3JDYXB0dXJlKSk7CisKKyAgICAgICAgICAgIFBhdHRlcm5BbHRl
cm5hdGl2ZSogcmVtYWluaW5nQWx0ID0gdW5yb2xsZWRQYXR0ZXJuRGlzanVuY3Rpb24tPmFkZE5l
d0FsdGVybmF0aXZlKCk7CisgICAgICAgICAgICBQYXR0ZXJuRGlzanVuY3Rpb24qIHJlbWFpbmlu
Z0FsdHMgPSBuZXcgUGF0dGVybkRpc2p1bmN0aW9uKHJlbWFpbmluZ0FsdCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzdWJQYXR0ZXJuLT5tX2Fs
dGVybmF0aXZlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSogYWx0ID0gcmVtYWluaW5nQWx0cy0+YWRkTmV3QWx0ZXJu
YXRpdmUoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHQgPSAwOyB0IDwgc3ViUGF0
dGVybi0+bV9hbHRlcm5hdGl2ZXNbaV0tPm1fdGVybXMuc2l6ZSgpOyB0KyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgUGF0dGVyblRlcm0gdGVybSA9IGNvcHlUZXJtKHN1YlBhdHRlcm4tPm1fYWx0
ZXJuYXRpdmVzW2ldLT5tX3Rlcm1zW3RdKTsKKyAgICAgICAgICAgICAgICAgICAgYWx0LT5tX3Rl
cm1zLmFwcGVuZCh0ZXJtKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHJlbWFpbmluZ0FsdC0+bV90ZXJtcy5hcHBlbmQoUGF0dGVy
blRlcm0oUGF0dGVyblRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm4sIGZpcnN0VGVybS5w
YXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQsIHJlbWFpbmluZ0FsdHMsIGZpcnN0VGVybS5pbnZlcnRP
ckNhcHR1cmUpKTsKKworICAgICAgICAgICAgLy8gQ29weSBhbGwgdGhlIHJlbWFpbmluZyB0ZXJt
cyB0byBib3RoIGFsdGVybmF0aXZlcy4KKyAgICAgICAgICAgIGFsdGVybmF0aXZlLT5tX3Rlcm1z
LnJlbW92ZSgwKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhbHRlcm5h
dGl2ZS0+bV90ZXJtcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIFBhdHRlcm5UZXJt
IHRlcm0gPSBjb3B5VGVybShhbHRlcm5hdGl2ZS0+bV90ZXJtc1tpXSk7CisgICAgICAgICAgICAg
ICAgYW5jaG9yZWRCT0xBbHQtPm1fdGVybXMuYXBwZW5kKHRlcm0pOworICAgICAgICAgICAgICAg
IHRlcm0gPSBjb3B5VGVybShhbHRlcm5hdGl2ZS0+bV90ZXJtc1tpXSk7CisgICAgICAgICAgICAg
ICAgcmVtYWluaW5nQWx0LT5tX3Rlcm1zLmFwcGVuZCh0ZXJtKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbV9wYXR0ZXJuLm1fYm9keSA9IHVucm9sbGVkUGF0dGVy
bkRpc2p1bmN0aW9uOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIAogcHJpdmF0ZToKICAg
ICBSZWdleFBhdHRlcm4mIG1fcGF0dGVybjsKICAgICBQYXR0ZXJuQWx0ZXJuYXRpdmUqIG1fYWx0
ZXJuYXRpdmU7CkBAIC02MjEsNiArNjk1LDggQEAgY29uc3QgY2hhciogY29tcGlsZVJlZ2V4KGNv
bnN0IFVTdHJpbmcmIAogICAgICAgICBBU1NFUlQobnVtU3VicGF0dGVybnMgPT0gcGF0dGVybi5t
X251bVN1YnBhdHRlcm5zKTsKICAgICB9CiAKKyAgICBjb25zdHJ1Y3Rvci5vcHRpbWl6ZUJPTCgp
OworICAgICAgICAKICAgICBjb25zdHJ1Y3Rvci5zZXR1cE9mZnNldHMoKTsKIAogICAgIHJldHVy
biAwOwpJbmRleDogSmF2YVNjcmlwdENvcmUveWFyci9SZWdleEpJVC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUveWFyci9SZWdleEpJVC5jcHAJKHJldmlzaW9uIDY3NTExKQorKysg
SmF2YVNjcmlwdENvcmUveWFyci9SZWdleEpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMDcs
MjEgKzEyMDcsMjYgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQog
ICAgICAgICBUZXJtR2VuZXJhdGlvblN0YXRlIHN0YXRlKGRpc2p1bmN0aW9uLCAwKTsKICAgICAg
ICAgc3RhdGUucmVzZXRBbHRlcm5hdGl2ZSgpOwogCi0gICAgICAgIC8vIFBsYW50IGEgY2hlY2sg
dG8gc2VlIGlmIHRoZXJlIGlzIHN1ZmZpY2llbnQgaW5wdXQgYXZhaWxhYmxlIHRvIHJ1biB0aGUg
Zmlyc3QgYWx0ZXJuYXRpdmUuCi0gICAgICAgIC8vIEp1bXBpbmcgYmFjayB0byB0aGUgbGFiZWwg
J2ZpcnN0QWx0ZXJuYXRpdmUnIHdpbGwgZ2V0IHRvIHRoaXMgY2hlY2ssIGp1bXBpbmcgdG8KLSAg
ICAgICAgLy8gJ2ZpcnN0QWx0ZXJuYXRpdmVJbnB1dENoZWNrZWQnIHdpbGwganVtcCBkaXJlY3Rs
eSB0byBtYXRjaGluZyB0aGUgYWx0ZXJuYXRpdmUgaGF2aW5nCi0gICAgICAgIC8vIHNraXBwZWQg
dGhpcyBjaGVjay4KLQotICAgICAgICBMYWJlbCBmaXJzdEFsdGVybmF0aXZlKHRoaXMpOwotCiAg
ICAgICAgIC8vIGNoZWNrIGF2YWlsYWJpbGl0eSBmb3IgdGhlIG5leHQgYWx0ZXJuYXRpdmUKICAg
ICAgICAgaW50IGNvdW50Q2hlY2tlZEZvckN1cnJlbnRBbHRlcm5hdGl2ZSA9IDA7CiAgICAgICAg
IGludCBjb3VudFRvQ2hlY2tGb3JGaXJzdEFsdGVybmF0aXZlID0gMDsKICAgICAgICAgYm9vbCBo
YXNTaG9ydGVyQWx0ZXJuYXRpdmVzID0gZmFsc2U7CisgICAgICAgIGJvb2wgc2V0UmVwZWF0QWx0
ZXJuYXRpdmVMYWJlbHMgPSBmYWxzZTsKICAgICAgICAgSnVtcExpc3Qgbm90RW5vdWdoSW5wdXRG
b3JQcmV2aW91c0FsdGVybmF0aXZlOworICAgICAgICBMYWJlbCBmaXJzdEFsdGVybmF0aXZlOwor
ICAgICAgICBMYWJlbCBmaXJzdEFsdGVybmF0aXZlSW5wdXRDaGVja2VkOwogCisgICAgICAgIC8v
IFRoZSBsYWJlbCAnZmlyc3RBbHRlcm5hdGl2ZScgaXMgdXNlZCB0byBwbGFudCBhIGNoZWNrIHRv
IHNlZSBpZiB0aGVyZSBpcyAKKyAgICAgICAgLy8gc3VmZmljaWVudCBpbnB1dCBhdmFpbGFibGUg
dG8gcnVuIHRoZSBmaXJzdCByZXBlYXRpbmcgYWx0ZXJuYXRpdmUuCisgICAgICAgIC8vIFRoZSBs
YWJlbCAnZmlyc3RBbHRlcm5hdGl2ZUlucHV0Q2hlY2tlZCcgd2lsbCBqdW1wIGRpcmVjdGx5IHRv
IG1hdGNoaW5nIAorICAgICAgICAvLyB0aGUgZmlyc3QgcmVwZWF0aW5nIGFsdGVybmF0aXZlIGhh
dmluZyBza2lwcGVkIHRoaXMgY2hlY2suCisgICAgICAgIAogICAgICAgICBpZiAoc3RhdGUuYWx0
ZXJuYXRpdmVWYWxpZCgpKSB7CiAgICAgICAgICAgICBQYXR0ZXJuQWx0ZXJuYXRpdmUqIGFsdGVy
bmF0aXZlID0gc3RhdGUuYWx0ZXJuYXRpdmUoKTsKKyAgICAgICAgICAgIGlmICghYWx0ZXJuYXRp
dmUtPm9uY2VUaHJvdWdoKCkpIHsKKyAgICAgICAgICAgICAgICBmaXJzdEFsdGVybmF0aXZlID0g
TGFiZWwodGhpcyk7CisgICAgICAgICAgICAgICAgc2V0UmVwZWF0QWx0ZXJuYXRpdmVMYWJlbHMg
PSB0cnVlOworICAgICAgICAgICAgfQogICAgICAgICAgICAgY291bnRUb0NoZWNrRm9yRmlyc3RB
bHRlcm5hdGl2ZSA9IGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplOwogICAgICAgICAgICAgc3Rh
dGUuY2hlY2tlZFRvdGFsICs9IGNvdW50VG9DaGVja0ZvckZpcnN0QWx0ZXJuYXRpdmU7CiAgICAg
ICAgICAgICBpZiAoY291bnRUb0NoZWNrRm9yRmlyc3RBbHRlcm5hdGl2ZSkKQEAgLTEyMjksNyAr
MTIzNCw4IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAg
ICAgICAgIGNvdW50Q2hlY2tlZEZvckN1cnJlbnRBbHRlcm5hdGl2ZSA9IGNvdW50VG9DaGVja0Zv
ckZpcnN0QWx0ZXJuYXRpdmU7CiAgICAgICAgIH0KIAotICAgICAgICBMYWJlbCBmaXJzdEFsdGVy
bmF0aXZlSW5wdXRDaGVja2VkKHRoaXMpOworICAgICAgICBpZiAoc2V0UmVwZWF0QWx0ZXJuYXRp
dmVMYWJlbHMpCisgICAgICAgICAgICBmaXJzdEFsdGVybmF0aXZlSW5wdXRDaGVja2VkID0gTGFi
ZWwodGhpcyk7CiAKICAgICAgICAgd2hpbGUgKHN0YXRlLmFsdGVybmF0aXZlVmFsaWQoKSkgewog
ICAgICAgICAgICAgLy8gVHJhY2sgd2hldGhlciBhbnkgYWx0ZXJuYXRpdmVzIGFyZSBzaG9ydGVy
IHRoYW4gdGhlIGZpcnN0IG9uZS4KQEAgLTEyNjQsNiArMTI3MCwxMyBAQCBjbGFzcyBSZWdleEdl
bmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgICAgICAvLyBpZiB0aGVyZSBhcmUg
YW55IG1vcmUgYWx0ZXJuYXRpdmVzLCBwbGFudCB0aGUgY2hlY2sgZm9yIGlucHV0IGJlZm9yZSBs
b29waW5nLgogICAgICAgICAgICAgaWYgKHN0YXRlLmFsdGVybmF0aXZlVmFsaWQoKSkgewogICAg
ICAgICAgICAgICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSogbmV4dEFsdGVybmF0aXZlID0gc3RhdGUu
YWx0ZXJuYXRpdmUoKTsKKyAgICAgICAgICAgICAgICBib29sIHNldEFsdGVybmF0aXZlTG9vcExh
YmVsID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCFzZXRSZXBlYXRBbHRlcm5hdGl2ZUxh
YmVscyAmJiAhbmV4dEFsdGVybmF0aXZlLT5vbmNlVGhyb3VnaCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGZpcnN0QWx0ZXJuYXRpdmUgPSBMYWJlbCh0aGlzKTsKKyAgICAgICAgICAgICAgICAg
ICAgc2V0UmVwZWF0QWx0ZXJuYXRpdmVMYWJlbHMgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICBzZXRBbHRlcm5hdGl2ZUxvb3BMYWJlbCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGludCBjb3VudFRvQ2hlY2tGb3JOZXh0QWx0
ZXJuYXRpdmUgPSBuZXh0QWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemU7CiAKICAgICAgICAgICAg
ICAgICBpZiAoY291bnRDaGVja2VkRm9yQ3VycmVudEFsdGVybmF0aXZlID4gY291bnRUb0NoZWNr
Rm9yTmV4dEFsdGVybmF0aXZlKSB7IC8vIENBU0UgMTogY3VycmVudCBhbHRlcm5hdGl2ZSB3YXMg
bG9uZ2VyIHRoYW4gdGhlIG5leHQgb25lLgpAQCAtMTMwMiw2ICsxMzE1LDEyIEBAIGNsYXNzIFJl
Z2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgICAgICAgICAgICAgc3Rh
dGUubGlua0FsdGVybmF0aXZlQmFja3RyYWNrcyh0aGlzKTsKICAgICAgICAgICAgICAgICB9CiAK
KyAgICAgICAgICAgICAgICBpZiAoc2V0QWx0ZXJuYXRpdmVMb29wTGFiZWwpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZmlyc3RBbHRlcm5hdGl2ZUlucHV0Q2hlY2tlZCA9IExhYmVsKHRoaXMpOwor
ICAgICAgICAgICAgICAgICAgICBjb3VudFRvQ2hlY2tGb3JGaXJzdEFsdGVybmF0aXZlID0gY291
bnRUb0NoZWNrRm9yTmV4dEFsdGVybmF0aXZlOworICAgICAgICAgICAgICAgICAgICBzZXRBbHRl
cm5hdGl2ZUxvb3BMYWJlbCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIHN0YXRlLmNoZWNrZWRUb3RhbCAtPSBjb3VudENoZWNrZWRG
b3JDdXJyZW50QWx0ZXJuYXRpdmU7CiAgICAgICAgICAgICAgICAgY291bnRDaGVja2VkRm9yQ3Vy
cmVudEFsdGVybmF0aXZlID0gY291bnRUb0NoZWNrRm9yTmV4dEFsdGVybmF0aXZlOwogICAgICAg
ICAgICAgICAgIHN0YXRlLmNoZWNrZWRUb3RhbCArPSBjb3VudENoZWNrZWRGb3JDdXJyZW50QWx0
ZXJuYXRpdmU7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4UGF0dGVybi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhQYXR0ZXJuLmgJKHJldmlzaW9uIDY3
NTExKQorKysgSmF2YVNjcmlwdENvcmUveWFyci9SZWdleFBhdHRlcm4uaAkod29ya2luZyBjb3B5
KQpAQCAtMjA3LDYgKzIwNyw3IEBAIHN0cnVjdCBQYXR0ZXJuVGVybSB7CiBzdHJ1Y3QgUGF0dGVy
bkFsdGVybmF0aXZlIDogRmFzdEFsbG9jQmFzZSB7CiAgICAgUGF0dGVybkFsdGVybmF0aXZlKFBh
dHRlcm5EaXNqdW5jdGlvbiogZGlzanVuY3Rpb24pCiAgICAgICAgIDogbV9wYXJlbnQoZGlzanVu
Y3Rpb24pCisgICAgICAgICwgbV9vbmNlVGhyb3VnaChmYWxzZSkKICAgICB7CiAgICAgfQogCkBA
IC0yMjEsMTEgKzIyMiwyMiBAQCBzdHJ1Y3QgUGF0dGVybkFsdGVybmF0aXZlIDogRmFzdEFsbG9j
QmFzCiAgICAgICAgIEFTU0VSVChtX3Rlcm1zLnNpemUoKSk7CiAgICAgICAgIG1fdGVybXMuc2hy
aW5rKG1fdGVybXMuc2l6ZSgpIC0gMSk7CiAgICAgfQorICAgIAorICAgIHZvaWQgc2V0T25jZVRo
cm91Z2goKQorICAgIHsKKyAgICAgICAgbV9vbmNlVGhyb3VnaCA9IHRydWU7CisgICAgfQorICAg
IAorICAgIGJvb2wgb25jZVRocm91Z2goKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb25jZVRo
cm91Z2g7CisgICAgfQogCiAgICAgVmVjdG9yPFBhdHRlcm5UZXJtPiBtX3Rlcm1zOwogICAgIFBh
dHRlcm5EaXNqdW5jdGlvbiogbV9wYXJlbnQ7CiAgICAgdW5zaWduZWQgbV9taW5pbXVtU2l6ZTsK
ICAgICBib29sIG1faGFzRml4ZWRTaXplOworICAgIGJvb2wgbV9vbmNlVGhyb3VnaDsKIH07CiAK
IHN0cnVjdCBQYXR0ZXJuRGlzanVuY3Rpb24gOiBGYXN0QWxsb2NCYXNlIHsKSW5kZXg6IExheW91
dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDY3NTEyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTAtMDktMTQgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkZWQgbmV3IHRlc3RzIHRvIGNoZWNrIGZvciBwcm9wZXIgaGFuZGxpbmcgb2YgXiBpbiBtdWx0
aWxpbmUKKyAgICAgICAgcmVndWxhciBleHByZXNzaW9ucy4gIEFkZGVkIGFzIHBhcnQgb2YgCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTc4NworCisg
ICAgICAgICogZmFzdC9qcy9yZWdleHAtYm9sLXdpdGgtbXVsdGlsaW5lLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdleHAtYm9sLXdpdGgtbXVsdGlsaW5lLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvc2NyaXB0LXRlc3RzL3JlZ2V4cC1ib2wtd2l0aC1t
dWx0aWxpbmUuanM6IEFkZGVkLgorCiAyMDEwLTA5LTE0ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2pzL3JlZ2V4cC1ib2wtd2l0aC1tdWx0aWxpbmUtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVnZXhwLWJvbC13aXRoLW11bHRpbGlu
ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ2V4
cC1ib2wtd2l0aC1tdWx0aWxpbmUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE0IEBACitUZXN0IGZvciBiZWdpbm5pbmcgb2YgbGluZSAoQk9MIG9yIF4pIG1hdGNoaW5nIGlu
IGEgbXVsdGlsaW5lIHN0cmluZworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFT
UyBzLm1hdGNoKC9eYWJjLykgaXMgbnVsbAorUEFTUyBzLm1hdGNoKC9eYWJjL20pIGlzIFsiYWJj
Il0KK1BBU1Mgcy5tYXRjaCgvKF58WClhYmMvKSBpcyBudWxsCitQQVNTIHMubWF0Y2goLyhefFgp
YWJjL20pIGlzIFsiYWJjIiwiIl0KK1BBU1Mgcy5tYXRjaCgvKF5hfFhhKWJjL20pIGlzIFsiYWJj
IiwiYSJdCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdleHAtYm9sLXdpdGgtbXVsdGlsaW5lLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdleHAtYm9sLXdpdGgtbXVs
dGlsaW5lLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ2V4cC1i
b2wtd2l0aC1tdWx0aWxpbmUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPCFE
T0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVh
ZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0icmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUu
Y3NzIj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9yZWdleHAtYm9sLXdpdGgtbXVs
dGlsaW5lLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
anMvc2NyaXB0LXRlc3RzL3JlZ2V4cC1ib2wtd2l0aC1tdWx0aWxpbmUuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvcmVnZXhwLWJvbC13aXRoLW11bHRp
bGluZS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3Rz
L3JlZ2V4cC1ib2wtd2l0aC1tdWx0aWxpbmUuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIg
QEAKK2Rlc2NyaXB0aW9uKAorJ1Rlc3QgZm9yIGJlZ2lubmluZyBvZiBsaW5lIChCT0wgb3IgXikg
bWF0Y2hpbmcgaW4gYSBtdWx0aWxpbmUgc3RyaW5nPC9hPicKKyk7CisKK3ZhciBzID0gImFjZWRc
bmFiYyI7CitzaG91bGRCZU51bGwoJ3MubWF0Y2goL15hYmMvKScpOworc2hvdWxkQmUoJ3MubWF0
Y2goL15hYmMvbSknLCAnWyJhYmMiXScpOworc2hvdWxkQmVOdWxsKCdzLm1hdGNoKC8oXnxYKWFi
Yy8pJyk7CitzaG91bGRCZSgncy5tYXRjaCgvKF58WClhYmMvbSknLCAnWyJhYmMiLCIiXScpOwor
c2hvdWxkQmUoJ3MubWF0Y2goLyheYXxYYSliYy9tKScsICdbImFiYyIsImEiXScpOworCit2YXIg
c3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67868</attachid>
            <date>2010-09-16 17:51:48 -0700</date>
            <delta_ts>2010-09-17 11:18:19 -0700</delta_ts>
            <desc>Patch that handles broader class of ^ anchored expressions.</desc>
            <filename>45787-2.patch</filename>
            <type>text/plain</type>
            <size>17169</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY3Njc5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMTAtMDktMTYgIE1pY2hhZWwg
U2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgY29kZSB0byB1bnJvbGwgcmVndWxhciBleHByZXNz
aW9ucyBjb250YWluaW5nIF4uCisgICAgICAgIEFsdGVybmF0aXZlcyB0aGF0IGJlZ2luIHdpdGgg
XiBhcmUgdGFnZ2VkIGR1cmluZyBwYXJzaW5nCisgICAgICAgIGFuZCByb2xsZWQgdXAgaW4gY29u
dGFpbmluZyBzdWIgZXhwcmVzc2lvbiBzdHJ1Y3RzLgorICAgICAgICBBZnRlciBwYXJzaW5nLCBh
IHJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFnZ2VkIGFzIGNvbnRhaW5pbmcKKyAgICAgICAgYSBeIChh
LmsuYS4gQk9MKSBpcyBwcm9jZXNzZWQgZnVydGhlciBpbiBvcHRpbWl6ZUJPTCgpLgorICAgICAg
ICBBIGNvcHkgb2YgdGhlIGRpc2p1bmN0aW9uIGlzIG1hZGUgZXhjbHVkaW5nIGFsdGVybmF0aXZl
cyB0aGF0CisgICAgICAgIGFyZSByb290ZWQgd2l0aCBCT0wuICBUaGUgb3JpZ2luYWwgYWx0ZXJu
YXRpdmVzIGFyZSBmbGFnZ2VkCisgICAgICAgIHRvIG9ubHkgYmUgZXhlY3V0ZWQgb25jZS4gIFRo
ZSBjb3B5IG9mIHRoZSBvdGhlciBhbHRlcm5hdGl2ZXMgYXJlCisgICAgICAgIGFkZGVkIHRvIHRo
ZSBvcmlnaW5hbCBleHByZXNzaW9uLgorICAgICAgICBUaGUgSklUIGdlbmVyYXRvciB3aWxsIGVt
aXQgY29kZSBhY2NvcmRpbmdseSwgZXhlY3V0aW5nIHRoZQorICAgICAgICBvcmlnaW5hbCBhbHRl
cm5hdGl2ZXMgb25jZSBhbmQgdGhlbiBsb29waW5nIG92ZXIgdGhlCisgICAgICAgIGFsdGVybmF0
aXZlcyB0aGF0IGFyZW4ndCBhbmNob3JlZCB3aXRoIGEgQk9MLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU3ODcKKworICAgICAgICAqIHlhcnIvUmVn
ZXhDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4UGF0dGVybkNvbnN0cnVj
dG9yOjphc3NlcnRpb25CT0wpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleFBhdHRlcm5Db25z
dHJ1Y3Rvcjo6YXRvbVBhcmVudGhlc2VzRW5kKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhQ
YXR0ZXJuQ29uc3RydWN0b3I6OmNvcHlEaXNqdW5jdGlvbik6CisgICAgICAgIChKU0M6OllhcnI6
OlJlZ2V4UGF0dGVybkNvbnN0cnVjdG9yOjpjb3B5VGVybSk6CisgICAgICAgIChKU0M6OllhcnI6
OlJlZ2V4UGF0dGVybkNvbnN0cnVjdG9yOjpvcHRpbWl6ZUJPTCk6CisgICAgICAgIChKU0M6Ollh
cnI6OmNvbXBpbGVSZWdleCk6CisgICAgICAgICogeWFyci9SZWdleEpJVC5jcHA6CisgICAgICAg
IChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpnZW5lcmF0ZURpc2p1bmN0aW9uKToKKyAgICAg
ICAgKiB5YXJyL1JlZ2V4UGF0dGVybi5oOgorICAgICAgICAoSlNDOjpZYXJyOjpQYXR0ZXJuQWx0
ZXJuYXRpdmU6OlBhdHRlcm5BbHRlcm5hdGl2ZSk6CisgICAgICAgIChKU0M6OllhcnI6OlBhdHRl
cm5BbHRlcm5hdGl2ZTo6c2V0T25jZVRocm91Z2gpOgorICAgICAgICAoSlNDOjpZYXJyOjpQYXR0
ZXJuQWx0ZXJuYXRpdmU6Om9uY2VUaHJvdWdoKToKKyAgICAgICAgKEpTQzo6WWFycjo6UGF0dGVy
bkRpc2p1bmN0aW9uOjpQYXR0ZXJuRGlzanVuY3Rpb24pOgorICAgICAgICAoSlNDOjpZYXJyOjpS
ZWdleFBhdHRlcm46OlJlZ2V4UGF0dGVybik6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4UGF0
dGVybjo6cmVzZXQpOgorCiAyMDEwLTA5LTE2ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25A
aWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXouCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS95YXJyL1JlZ2V4Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3lhcnIvUmVnZXhDb21waWxlci5jcHAJKHJldmlzaW9uIDY3Njc5KQorKysgSmF2YVNj
cmlwdENvcmUveWFyci9SZWdleENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU1LDYg
KzI1NSwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBhc3NlcnRpb25CT0woKQogICAgIHsK
KyAgICAgICAgaWYgKCFtX2FsdGVybmF0aXZlLT5tX3Rlcm1zLnNpemUoKSkgeworICAgICAgICAg
ICAgbV9hbHRlcm5hdGl2ZS0+bV9zdGFydHNXaXRoQk9MID0gdHJ1ZTsKKyAgICAgICAgICAgIG1f
YWx0ZXJuYXRpdmUtPm1fY29udGFpbnNCT0wgPSB0cnVlOworICAgICAgICAgICAgbV9wYXR0ZXJu
Lm1fY29udGFpbnNCT0wgPSB0cnVlOworICAgICAgICB9CiAgICAgICAgIG1fYWx0ZXJuYXRpdmUt
Pm1fdGVybXMuYXBwZW5kKFBhdHRlcm5UZXJtOjpCT0woKSk7CiAgICAgfQogICAgIHZvaWQgYXNz
ZXJ0aW9uRU9MKCkKQEAgLTM2NCw3ICszNjksMjMgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
QVNTRVJUKG1fYWx0ZXJuYXRpdmUtPm1fcGFyZW50KTsKICAgICAgICAgQVNTRVJUKG1fYWx0ZXJu
YXRpdmUtPm1fcGFyZW50LT5tX3BhcmVudCk7CisKKyAgICAgICAgUGF0dGVybkRpc2p1bmN0aW9u
KiBwYXJlbnRoZXNpc0Rpc2p1bmN0aW9uID0gbV9hbHRlcm5hdGl2ZS0+bV9wYXJlbnQ7CiAgICAg
ICAgIG1fYWx0ZXJuYXRpdmUgPSBtX2FsdGVybmF0aXZlLT5tX3BhcmVudC0+bV9wYXJlbnQ7CisK
KyAgICAgICAgdW5zaWduZWQgbnVtUGFyZW5BbHRlcm5hdGl2ZXMgPSBwYXJlbnRoZXNpc0Rpc2p1
bmN0aW9uLT5tX2FsdGVybmF0aXZlcy5zaXplKCk7CisgICAgICAgIHVuc2lnbmVkIG51bUJPTEFu
Y2hvcmVkQWx0cyA9IDA7CisgICAgICAgIC8vIEJ1YmJsZSB1cCBCT0wgZmxhZ3MKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhcmVuQWx0ZXJuYXRpdmVzOyBpKyspCisgICAg
ICAgICAgICBpZiAocGFyZW50aGVzaXNEaXNqdW5jdGlvbi0+bV9hbHRlcm5hdGl2ZXNbaV0tPm1f
c3RhcnRzV2l0aEJPTCkKKyAgICAgICAgICAgICAgICBudW1CT0xBbmNob3JlZEFsdHMrKzsKKyAg
ICAgICAgCisgICAgICAgIGlmIChudW1CT0xBbmNob3JlZEFsdHMpIHsKKyAgICAgICAgICAgIG1f
YWx0ZXJuYXRpdmUtPm1fY29udGFpbnNCT0wgPSB0cnVlOworICAgICAgICAgICAgLy8gSWYgYWxs
IHRoZSBhbHRlcm5hdGl2ZXMgaW4gcGFyZW5zIHN0YXJ0IHdpdGggQk9MLCB0aGVuIHNvIGRvZXMg
dGhpcyBvbmUKKyAgICAgICAgICAgIGlmIChudW1CT0xBbmNob3JlZEFsdHMgPT0gbnVtUGFyZW5B
bHRlcm5hdGl2ZXMpCisgICAgICAgICAgICAgICAgbV9hbHRlcm5hdGl2ZS0+bV9zdGFydHNXaXRo
Qk9MID0gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9hbHRlcm5hdGl2ZS0+
bGFzdFRlcm0oKS5wYXJlbnRoZXNlcy5sYXN0U3VicGF0dGVybklkID0gbV9wYXR0ZXJuLm1fbnVt
U3VicGF0dGVybnM7CiAgICAgfQpAQCAtMzk3LDMyICs0MTgsMzkgQEAgcHVibGljOgogICAgICAg
ICBtX2FsdGVybmF0aXZlLT5tX3Rlcm1zLmFwcGVuZChQYXR0ZXJuVGVybShzdWJwYXR0ZXJuSWQp
KTsKICAgICB9CiAKLSAgICBQYXR0ZXJuRGlzanVuY3Rpb24qIGNvcHlEaXNqdW5jdGlvbihQYXR0
ZXJuRGlzanVuY3Rpb24qIGRpc2p1bmN0aW9uKQorICAgIC8vIGRlZXAgY29weSB0aGUgYXJndW1l
bnQgZGlzanVuY3Rpb24uICBJZiBmaWx0ZXJTdGFydHNXaXRoQk9MIGlzIHRydWUsIAorICAgIC8v
IHNraXAgYWx0ZXJuYXRpdmVzIHdpdGggbV9zdGFydHNXaXRoQk9MIHNldCB0cnVlLgorICAgIFBh
dHRlcm5EaXNqdW5jdGlvbiogY29weURpc2p1bmN0aW9uKFBhdHRlcm5EaXNqdW5jdGlvbiogZGlz
anVuY3Rpb24sIGJvb2wgZmlsdGVyU3RhcnRzV2l0aEJPTCA9IGZhbHNlKQogICAgIHsKLSAgICAg
ICAgUGF0dGVybkRpc2p1bmN0aW9uKiBuZXdEaXNqdW5jdGlvbiA9IG5ldyBQYXR0ZXJuRGlzanVu
Y3Rpb24oKTsKLQotICAgICAgICBuZXdEaXNqdW5jdGlvbi0+bV9wYXJlbnQgPSBkaXNqdW5jdGlv
bi0+bV9wYXJlbnQ7CisgICAgICAgIFBhdHRlcm5EaXNqdW5jdGlvbiogbmV3RGlzanVuY3Rpb24g
PSAwOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGFsdCA9IDA7IGFsdCA8IGRpc2p1bmN0aW9uLT5t
X2FsdGVybmF0aXZlcy5zaXplKCk7ICsrYWx0KSB7CiAgICAgICAgICAgICBQYXR0ZXJuQWx0ZXJu
YXRpdmUqIGFsdGVybmF0aXZlID0gZGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRpdmVzW2FsdF07Ci0g
ICAgICAgICAgICBQYXR0ZXJuQWx0ZXJuYXRpdmUqIG5ld0FsdGVybmF0aXZlID0gbmV3RGlzanVu
Y3Rpb24tPmFkZE5ld0FsdGVybmF0aXZlKCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYWx0ZXJuYXRpdmUtPm1fdGVybXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAg
ICAgbmV3QWx0ZXJuYXRpdmUtPm1fdGVybXMuYXBwZW5kKGNvcHlUZXJtKGFsdGVybmF0aXZlLT5t
X3Rlcm1zW2ldKSk7CisgICAgICAgICAgICBpZiAoIWZpbHRlclN0YXJ0c1dpdGhCT0wgfHwgIWFs
dGVybmF0aXZlLT5tX3N0YXJ0c1dpdGhCT0wpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW5ld0Rp
c2p1bmN0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIG5ld0Rpc2p1bmN0aW9uID0gbmV3IFBh
dHRlcm5EaXNqdW5jdGlvbigpOworICAgICAgICAgICAgICAgICAgICBuZXdEaXNqdW5jdGlvbi0+
bV9wYXJlbnQgPSBkaXNqdW5jdGlvbi0+bV9wYXJlbnQ7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSogbmV3QWx0ZXJuYXRpdmUgPSBuZXdEaXNq
dW5jdGlvbi0+YWRkTmV3QWx0ZXJuYXRpdmUoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYWx0ZXJuYXRpdmUtPm1fdGVybXMuc2l6ZSgpOyArK2kpCisgICAgICAg
ICAgICAgICAgICAgIG5ld0FsdGVybmF0aXZlLT5tX3Rlcm1zLmFwcGVuZChjb3B5VGVybShhbHRl
cm5hdGl2ZS0+bV90ZXJtc1tpXSwgZmlsdGVyU3RhcnRzV2l0aEJPTCkpOworICAgICAgICAgICAg
fQogICAgICAgICB9Ci0KLSAgICAgICAgbV9wYXR0ZXJuLm1fZGlzanVuY3Rpb25zLmFwcGVuZChu
ZXdEaXNqdW5jdGlvbik7CisgICAgICAgIAorICAgICAgICBpZiAobmV3RGlzanVuY3Rpb24pCisg
ICAgICAgICAgICBtX3BhdHRlcm4ubV9kaXNqdW5jdGlvbnMuYXBwZW5kKG5ld0Rpc2p1bmN0aW9u
KTsKICAgICAgICAgcmV0dXJuIG5ld0Rpc2p1bmN0aW9uOwogICAgIH0KLQotICAgIFBhdHRlcm5U
ZXJtIGNvcHlUZXJtKFBhdHRlcm5UZXJtJiB0ZXJtKQorICAgIAorICAgIFBhdHRlcm5UZXJtIGNv
cHlUZXJtKFBhdHRlcm5UZXJtJiB0ZXJtLCBib29sIGZpbHRlclN0YXJ0c1dpdGhCT0wgPSBmYWxz
ZSkKICAgICB7CiAgICAgICAgIGlmICgodGVybS50eXBlICE9IFBhdHRlcm5UZXJtOjpUeXBlUGFy
ZW50aGVzZXNTdWJwYXR0ZXJuKSAmJiAodGVybS50eXBlICE9IFBhdHRlcm5UZXJtOjpUeXBlUGFy
ZW50aGV0aWNhbEFzc2VydGlvbikpCiAgICAgICAgICAgICByZXR1cm4gUGF0dGVyblRlcm0odGVy
bSk7Ci0KKyAgICAgICAgCiAgICAgICAgIFBhdHRlcm5UZXJtIHRlcm1Db3B5ID0gdGVybTsKLSAg
ICAgICAgdGVybUNvcHkucGFyZW50aGVzZXMuZGlzanVuY3Rpb24gPSBjb3B5RGlzanVuY3Rpb24o
dGVybUNvcHkucGFyZW50aGVzZXMuZGlzanVuY3Rpb24pOworICAgICAgICB0ZXJtQ29weS5wYXJl
bnRoZXNlcy5kaXNqdW5jdGlvbiA9IGNvcHlEaXNqdW5jdGlvbih0ZXJtQ29weS5wYXJlbnRoZXNl
cy5kaXNqdW5jdGlvbiwgZmlsdGVyU3RhcnRzV2l0aEJPTCk7CiAgICAgICAgIHJldHVybiB0ZXJt
Q29weTsKICAgICB9Ci0KKyAgICAKICAgICB2b2lkIHF1YW50aWZ5QXRvbSh1bnNpZ25lZCBtaW4s
IHVuc2lnbmVkIG1heCwgYm9vbCBncmVlZHkpCiAgICAgewogICAgICAgICBBU1NFUlQobWluIDw9
IG1heCk7CkBAIC01ODksNiArNjE3LDMzIEBAIHB1YmxpYzoKICAgICAgICAgc2V0dXBEaXNqdW5j
dGlvbk9mZnNldHMobV9wYXR0ZXJuLm1fYm9keSwgMCwgMCk7CiAgICAgfQogCisgICAgdm9pZCBv
cHRpbWl6ZUJPTCgpCisgICAgeworICAgICAgICAvLyBMb29rIGZvciBleHByZXNzaW9ucyBjb250
YWluaW5nIGJlZ2lubmluZyBvZiBsaW5lICheKSBhbmNob3JpbmcgYW5kIHVucm9sbCB0aGVtLgor
ICAgICAgICAvLyBlLmcuIC9eYXxeYnxjLyBiZWNvbWVzIC9eYXxeYnxjLyB3aGljaCBpcyBleGVj
dXRlZCBvbmNlIGZvbGxvd2VkIGJ5IC9jLyB3aGljaCBsb29wcworICAgICAgICAvLyBUaGlzIGNv
ZGUgcmVsaWVzIG9uIHRoZSBwYXJzaW5nIGNvZGUgdGFnZ2luZyBhbHRlcm5hdGl2ZXMgd2l0aCBt
X2NvbnRhaW5zQk9MIGFuZAorICAgICAgICAvLyBtX3N0YXJ0c1dpdGhCT0wgYW5kIHJvbGxpbmcg
dGhvc2UgdXAgdG8gY29udGFpbmluZyBhbHRlcm5hdGl2ZXMuCisgICAgICAgIC8vIEF0IHRoaXMg
cG9pbnQsIHRoaXMgaXMgb25seSB2YWxpZCBmb3Igbm9uLW11bHRpbGluZSBleHByZXNzaW9ucy4K
KyAgICAgICAgUGF0dGVybkRpc2p1bmN0aW9uKiBkaXNqdW5jdGlvbiA9IG1fcGF0dGVybi5tX2Jv
ZHk7CisgICAgICAgIAorICAgICAgICBpZiAoKCFtX3BhdHRlcm4ubV9jb250YWluc0JPTCkgfHwg
KG1fcGF0dGVybi5tX211bHRpbGluZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICBQYXR0ZXJuRGlzanVuY3Rpb24qIGxvb3BEaXNqdW5jdGlvbiA9IGNvcHlEaXNqdW5j
dGlvbihkaXNqdW5jdGlvbiwgdHJ1ZSk7CisgICAgICAgIGlmIChsb29wRGlzanVuY3Rpb24pIHsK
KyAgICAgICAgICAgIC8vIFNldCBhbHRlcm5hdGl2ZXMgaW4gZGlzanVuY3Rpb24gdG8gIm9uY2VU
aHJvdWdoIgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhbHQgPSAwOyBhbHQgPCBkaXNqdW5j
dGlvbi0+bV9hbHRlcm5hdGl2ZXMuc2l6ZSgpOyArK2FsdCkKKyAgICAgICAgICAgICAgICBkaXNq
dW5jdGlvbi0+bV9hbHRlcm5hdGl2ZXNbYWx0XS0+c2V0T25jZVRocm91Z2goKTsKKworICAgICAg
ICAgICAgLy8gTW92ZSBhbHRlcm5hdGl2ZXMgZnJvbSBsb29wRGlzanVuY3Rpb24gdG8gZGlzanVu
Y3Rpb24KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYWx0ID0gMDsgYWx0IDwgbG9vcERpc2p1
bmN0aW9uLT5tX2FsdGVybmF0aXZlcy5zaXplKCk7ICsrYWx0KQorICAgICAgICAgICAgICAgIGRp
c2p1bmN0aW9uLT5tX2FsdGVybmF0aXZlcy5hcHBlbmQobG9vcERpc2p1bmN0aW9uLT5tX2FsdGVy
bmF0aXZlc1thbHRdKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGxvb3BEaXNqdW5j
dGlvbi0+bV9hbHRlcm5hdGl2ZXMuY2xlYXIoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICAKIHByaXZhdGU6CiAgICAgUmVnZXhQYXR0ZXJuJiBtX3BhdHRlcm47CiAgICAgUGF0dGVybkFs
dGVybmF0aXZlKiBtX2FsdGVybmF0aXZlOwpAQCAtNjIxLDYgKzY3Niw4IEBAIGNvbnN0IGNoYXIq
IGNvbXBpbGVSZWdleChjb25zdCBVU3RyaW5nJiAKICAgICAgICAgQVNTRVJUKG51bVN1YnBhdHRl
cm5zID09IHBhdHRlcm4ubV9udW1TdWJwYXR0ZXJucyk7CiAgICAgfQogCisgICAgY29uc3RydWN0
b3Iub3B0aW1pemVCT0woKTsKKyAgICAgICAgCiAgICAgY29uc3RydWN0b3Iuc2V0dXBPZmZzZXRz
KCk7CiAKICAgICByZXR1cm4gMDsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3BwCShyZXZp
c2lvbiA2NzY3OSkKKysrIEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjA3LDIxICsxMjA3LDI2IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJp
dmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgVGVybUdlbmVyYXRpb25TdGF0ZSBzdGF0ZShkaXNqdW5j
dGlvbiwgMCk7CiAgICAgICAgIHN0YXRlLnJlc2V0QWx0ZXJuYXRpdmUoKTsKIAotICAgICAgICAv
LyBQbGFudCBhIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBzdWZmaWNpZW50IGlucHV0IGF2YWls
YWJsZSB0byBydW4gdGhlIGZpcnN0IGFsdGVybmF0aXZlLgotICAgICAgICAvLyBKdW1waW5nIGJh
Y2sgdG8gdGhlIGxhYmVsICdmaXJzdEFsdGVybmF0aXZlJyB3aWxsIGdldCB0byB0aGlzIGNoZWNr
LCBqdW1waW5nIHRvCi0gICAgICAgIC8vICdmaXJzdEFsdGVybmF0aXZlSW5wdXRDaGVja2VkJyB3
aWxsIGp1bXAgZGlyZWN0bHkgdG8gbWF0Y2hpbmcgdGhlIGFsdGVybmF0aXZlIGhhdmluZwotICAg
ICAgICAvLyBza2lwcGVkIHRoaXMgY2hlY2suCi0KLSAgICAgICAgTGFiZWwgZmlyc3RBbHRlcm5h
dGl2ZSh0aGlzKTsKLQogICAgICAgICAvLyBjaGVjayBhdmFpbGFiaWxpdHkgZm9yIHRoZSBuZXh0
IGFsdGVybmF0aXZlCiAgICAgICAgIGludCBjb3VudENoZWNrZWRGb3JDdXJyZW50QWx0ZXJuYXRp
dmUgPSAwOwogICAgICAgICBpbnQgY291bnRUb0NoZWNrRm9yRmlyc3RBbHRlcm5hdGl2ZSA9IDA7
CiAgICAgICAgIGJvb2wgaGFzU2hvcnRlckFsdGVybmF0aXZlcyA9IGZhbHNlOworICAgICAgICBi
b29sIHNldFJlcGVhdEFsdGVybmF0aXZlTGFiZWxzID0gZmFsc2U7CiAgICAgICAgIEp1bXBMaXN0
IG5vdEVub3VnaElucHV0Rm9yUHJldmlvdXNBbHRlcm5hdGl2ZTsKKyAgICAgICAgTGFiZWwgZmly
c3RBbHRlcm5hdGl2ZTsKKyAgICAgICAgTGFiZWwgZmlyc3RBbHRlcm5hdGl2ZUlucHV0Q2hlY2tl
ZDsKIAorICAgICAgICAvLyBUaGUgbGFiZWwgJ2ZpcnN0QWx0ZXJuYXRpdmUnIGlzIHVzZWQgdG8g
cGxhbnQgYSBjaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgCisgICAgICAgIC8vIHN1ZmZpY2llbnQg
aW5wdXQgYXZhaWxhYmxlIHRvIHJ1biB0aGUgZmlyc3QgcmVwZWF0aW5nIGFsdGVybmF0aXZlLgor
ICAgICAgICAvLyBUaGUgbGFiZWwgJ2ZpcnN0QWx0ZXJuYXRpdmVJbnB1dENoZWNrZWQnIHdpbGwg
anVtcCBkaXJlY3RseSB0byBtYXRjaGluZyAKKyAgICAgICAgLy8gdGhlIGZpcnN0IHJlcGVhdGlu
ZyBhbHRlcm5hdGl2ZSBoYXZpbmcgc2tpcHBlZCB0aGlzIGNoZWNrLgorICAgICAgICAKICAgICAg
ICAgaWYgKHN0YXRlLmFsdGVybmF0aXZlVmFsaWQoKSkgewogICAgICAgICAgICAgUGF0dGVybkFs
dGVybmF0aXZlKiBhbHRlcm5hdGl2ZSA9IHN0YXRlLmFsdGVybmF0aXZlKCk7CisgICAgICAgICAg
ICBpZiAoIWFsdGVybmF0aXZlLT5vbmNlVGhyb3VnaCgpKSB7CisgICAgICAgICAgICAgICAgZmly
c3RBbHRlcm5hdGl2ZSA9IExhYmVsKHRoaXMpOworICAgICAgICAgICAgICAgIHNldFJlcGVhdEFs
dGVybmF0aXZlTGFiZWxzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvdW50
VG9DaGVja0ZvckZpcnN0QWx0ZXJuYXRpdmUgPSBhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZTsK
ICAgICAgICAgICAgIHN0YXRlLmNoZWNrZWRUb3RhbCArPSBjb3VudFRvQ2hlY2tGb3JGaXJzdEFs
dGVybmF0aXZlOwogICAgICAgICAgICAgaWYgKGNvdW50VG9DaGVja0ZvckZpcnN0QWx0ZXJuYXRp
dmUpCkBAIC0xMjI5LDcgKzEyMzQsOCBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUg
TWFjcm9Bc3NlCiAgICAgICAgICAgICBjb3VudENoZWNrZWRGb3JDdXJyZW50QWx0ZXJuYXRpdmUg
PSBjb3VudFRvQ2hlY2tGb3JGaXJzdEFsdGVybmF0aXZlOwogICAgICAgICB9CiAKLSAgICAgICAg
TGFiZWwgZmlyc3RBbHRlcm5hdGl2ZUlucHV0Q2hlY2tlZCh0aGlzKTsKKyAgICAgICAgaWYgKHNl
dFJlcGVhdEFsdGVybmF0aXZlTGFiZWxzKQorICAgICAgICAgICAgZmlyc3RBbHRlcm5hdGl2ZUlu
cHV0Q2hlY2tlZCA9IExhYmVsKHRoaXMpOwogCiAgICAgICAgIHdoaWxlIChzdGF0ZS5hbHRlcm5h
dGl2ZVZhbGlkKCkpIHsKICAgICAgICAgICAgIC8vIFRyYWNrIHdoZXRoZXIgYW55IGFsdGVybmF0
aXZlcyBhcmUgc2hvcnRlciB0aGFuIHRoZSBmaXJzdCBvbmUuCkBAIC0xMjY0LDYgKzEyNzAsMTcg
QEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICAgICAg
Ly8gaWYgdGhlcmUgYXJlIGFueSBtb3JlIGFsdGVybmF0aXZlcywgcGxhbnQgdGhlIGNoZWNrIGZv
ciBpbnB1dCBiZWZvcmUgbG9vcGluZy4KICAgICAgICAgICAgIGlmIChzdGF0ZS5hbHRlcm5hdGl2
ZVZhbGlkKCkpIHsKICAgICAgICAgICAgICAgICBQYXR0ZXJuQWx0ZXJuYXRpdmUqIG5leHRBbHRl
cm5hdGl2ZSA9IHN0YXRlLmFsdGVybmF0aXZlKCk7CisgICAgICAgICAgICAgICAgYm9vbCBzZXRB
bHRlcm5hdGl2ZUxvb3BMYWJlbCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGlmICghc2V0UmVw
ZWF0QWx0ZXJuYXRpdmVMYWJlbHMgJiYgIW5leHRBbHRlcm5hdGl2ZS0+b25jZVRocm91Z2goKSkg
eworICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIGhhbmRsZWQgbm9uLXJlcGVhdGluZyBh
bHRlcm5hdGl2ZXMsIGp1bXAgdG8gbmV4dCBpdGVyYXRpb24gCisgICAgICAgICAgICAgICAgICAg
IC8vIGFuZCBsb29wIG92ZXIgcmVwZWF0aW5nIGFsdGVybmF0aXZlcy4KKyAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGp1bXAoKSwgdGhpcyk7CisKKyAgICAgICAgICAg
ICAgICAgICAgZmlyc3RBbHRlcm5hdGl2ZSA9IExhYmVsKHRoaXMpOworICAgICAgICAgICAgICAg
ICAgICBzZXRSZXBlYXRBbHRlcm5hdGl2ZUxhYmVscyA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIHNldEFsdGVybmF0aXZlTG9vcExhYmVsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaW50IGNvdW50VG9DaGVja0Zvck5leHRB
bHRlcm5hdGl2ZSA9IG5leHRBbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZTsKIAogICAgICAgICAg
ICAgICAgIGlmIChjb3VudENoZWNrZWRGb3JDdXJyZW50QWx0ZXJuYXRpdmUgPiBjb3VudFRvQ2hl
Y2tGb3JOZXh0QWx0ZXJuYXRpdmUpIHsgLy8gQ0FTRSAxOiBjdXJyZW50IGFsdGVybmF0aXZlIHdh
cyBsb25nZXIgdGhhbiB0aGUgbmV4dCBvbmUuCkBAIC0xMzAyLDYgKzEzMTksMTIgQEAgY2xhc3Mg
UmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICAgICAgICAgICAgICBz
dGF0ZS5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKHRoaXMpOwogICAgICAgICAgICAgICAgIH0K
IAorICAgICAgICAgICAgICAgIGlmIChzZXRBbHRlcm5hdGl2ZUxvb3BMYWJlbCkgeworICAgICAg
ICAgICAgICAgICAgICBmaXJzdEFsdGVybmF0aXZlSW5wdXRDaGVja2VkID0gTGFiZWwodGhpcyk7
CisgICAgICAgICAgICAgICAgICAgIGNvdW50VG9DaGVja0ZvckZpcnN0QWx0ZXJuYXRpdmUgPSBj
b3VudFRvQ2hlY2tGb3JOZXh0QWx0ZXJuYXRpdmU7CisgICAgICAgICAgICAgICAgICAgIHNldEFs
dGVybmF0aXZlTG9vcExhYmVsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2tlZFRvdGFsIC09IGNvdW50Q2hlY2tl
ZEZvckN1cnJlbnRBbHRlcm5hdGl2ZTsKICAgICAgICAgICAgICAgICBjb3VudENoZWNrZWRGb3JD
dXJyZW50QWx0ZXJuYXRpdmUgPSBjb3VudFRvQ2hlY2tGb3JOZXh0QWx0ZXJuYXRpdmU7CiAgICAg
ICAgICAgICAgICAgc3RhdGUuY2hlY2tlZFRvdGFsICs9IGNvdW50Q2hlY2tlZEZvckN1cnJlbnRB
bHRlcm5hdGl2ZTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhQYXR0ZXJuLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUveWFyci9SZWdleFBhdHRlcm4uaAkocmV2aXNpb24g
Njc2NzkpCisrKyBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4UGF0dGVybi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDcsNiArMjA3LDEwIEBAIHN0cnVjdCBQYXR0ZXJuVGVybSB7CiBzdHJ1Y3QgUGF0
dGVybkFsdGVybmF0aXZlIDogRmFzdEFsbG9jQmFzZSB7CiAgICAgUGF0dGVybkFsdGVybmF0aXZl
KFBhdHRlcm5EaXNqdW5jdGlvbiogZGlzanVuY3Rpb24pCiAgICAgICAgIDogbV9wYXJlbnQoZGlz
anVuY3Rpb24pCisgICAgICAgICwgbV9vbmNlVGhyb3VnaChmYWxzZSkKKyAgICAgICAgLCBtX2hh
c0ZpeGVkU2l6ZShmYWxzZSkKKyAgICAgICAgLCBtX3N0YXJ0c1dpdGhCT0woZmFsc2UpCisgICAg
ICAgICwgbV9jb250YWluc0JPTChmYWxzZSkKICAgICB7CiAgICAgfQogCkBAIC0yMjEsMTYgKzIy
NSwzMCBAQCBzdHJ1Y3QgUGF0dGVybkFsdGVybmF0aXZlIDogRmFzdEFsbG9jQmFzCiAgICAgICAg
IEFTU0VSVChtX3Rlcm1zLnNpemUoKSk7CiAgICAgICAgIG1fdGVybXMuc2hyaW5rKG1fdGVybXMu
c2l6ZSgpIC0gMSk7CiAgICAgfQorICAgIAorICAgIHZvaWQgc2V0T25jZVRocm91Z2goKQorICAg
IHsKKyAgICAgICAgbV9vbmNlVGhyb3VnaCA9IHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wg
b25jZVRocm91Z2goKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb25jZVRocm91Z2g7CisgICAg
fQogCiAgICAgVmVjdG9yPFBhdHRlcm5UZXJtPiBtX3Rlcm1zOwogICAgIFBhdHRlcm5EaXNqdW5j
dGlvbiogbV9wYXJlbnQ7CiAgICAgdW5zaWduZWQgbV9taW5pbXVtU2l6ZTsKLSAgICBib29sIG1f
aGFzRml4ZWRTaXplOworICAgIGJvb2wgbV9vbmNlVGhyb3VnaCA6IDE7CisgICAgYm9vbCBtX2hh
c0ZpeGVkU2l6ZSA6IDE7CisgICAgYm9vbCBtX3N0YXJ0c1dpdGhCT0wgOiAxOworICAgIGJvb2wg
bV9jb250YWluc0JPTCA6IDE7CiB9OwogCiBzdHJ1Y3QgUGF0dGVybkRpc2p1bmN0aW9uIDogRmFz
dEFsbG9jQmFzZSB7CiAgICAgUGF0dGVybkRpc2p1bmN0aW9uKFBhdHRlcm5BbHRlcm5hdGl2ZSog
cGFyZW50ID0gMCkKICAgICAgICAgOiBtX3BhcmVudChwYXJlbnQpCisgICAgICAgICwgbV9oYXNG
aXhlZFNpemUoZmFsc2UpCiAgICAgewogICAgIH0KICAgICAKQEAgLTI2OSw5ICsyODcsMTAgQEAg
c3RydWN0IFJlZ2V4UGF0dGVybiB7CiAgICAgUmVnZXhQYXR0ZXJuKGJvb2wgaWdub3JlQ2FzZSwg
Ym9vbCBtdWx0aWxpbmUpCiAgICAgICAgIDogbV9pZ25vcmVDYXNlKGlnbm9yZUNhc2UpCiAgICAg
ICAgICwgbV9tdWx0aWxpbmUobXVsdGlsaW5lKQorICAgICAgICAsIG1fY29udGFpbnNCYWNrcmVm
ZXJlbmNlcyhmYWxzZSkKKyAgICAgICAgLCBtX2NvbnRhaW5zQk9MKGZhbHNlKQogICAgICAgICAs
IG1fbnVtU3VicGF0dGVybnMoMCkKICAgICAgICAgLCBtX21heEJhY2tSZWZlcmVuY2UoMCkKLSAg
ICAgICAgLCBtX2NvbnRhaW5zQmFja3JlZmVyZW5jZXMoZmFsc2UpCiAgICAgICAgICwgbmV3bGlu
ZUNhY2hlZCgwKQogICAgICAgICAsIGRpZ2l0c0NhY2hlZCgwKQogICAgICAgICAsIHNwYWNlc0Nh
Y2hlZCgwKQpAQCAtMjk0LDYgKzMxMyw3IEBAIHN0cnVjdCBSZWdleFBhdHRlcm4gewogICAgICAg
ICBtX21heEJhY2tSZWZlcmVuY2UgPSAwOwogCiAgICAgICAgIG1fY29udGFpbnNCYWNrcmVmZXJl
bmNlcyA9IGZhbHNlOworICAgICAgICBtX2NvbnRhaW5zQk9MID0gZmFsc2U7CiAKICAgICAgICAg
bmV3bGluZUNhY2hlZCA9IDA7CiAgICAgICAgIGRpZ2l0c0NhY2hlZCA9IDA7CkBAIC0zNTcsMTEg
KzM3NywxMiBAQCBzdHJ1Y3QgUmVnZXhQYXR0ZXJuIHsKICAgICAgICAgcmV0dXJuIG5vbndvcmRj
aGFyQ2FjaGVkOwogICAgIH0KIAotICAgIGJvb2wgbV9pZ25vcmVDYXNlOwotICAgIGJvb2wgbV9t
dWx0aWxpbmU7CisgICAgYm9vbCBtX2lnbm9yZUNhc2UgOiAxOworICAgIGJvb2wgbV9tdWx0aWxp
bmUgOiAxOworICAgIGJvb2wgbV9jb250YWluc0JhY2tyZWZlcmVuY2VzIDogMTsKKyAgICBib29s
IG1fY29udGFpbnNCT0wgOiAxOwogICAgIHVuc2lnbmVkIG1fbnVtU3VicGF0dGVybnM7CiAgICAg
dW5zaWduZWQgbV9tYXhCYWNrUmVmZXJlbmNlOwotICAgIGJvb2wgbV9jb250YWluc0JhY2tyZWZl
cmVuY2VzOwogICAgIFBhdHRlcm5EaXNqdW5jdGlvbiogbV9ib2R5OwogICAgIFZlY3RvcjxQYXR0
ZXJuRGlzanVuY3Rpb24qLCA0PiBtX2Rpc2p1bmN0aW9uczsKICAgICBWZWN0b3I8Q2hhcmFjdGVy
Q2xhc3MqPiBtX3VzZXJDaGFyYWN0ZXJDbGFzc2VzOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjc2Nzkp
CisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBA
QAorMjAxMC0wOS0xNiAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBuZXcgdGVz
dHMgdG8gY2hlY2sgZm9yIHByb3BlciBoYW5kbGluZyBvZiBeIGluIG11bHRpbGluZQorICAgICAg
ICByZWd1bGFyIGV4cHJlc3Npb25zLiAgQWRkZWQgYXMgcGFydCBvZgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU3ODcKKworICAgICAgICAqIGZhc3Qv
anMvcmVnZXhwLWJvbC13aXRoLW11bHRpbGluZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvanMvcmVnZXhwLWJvbC13aXRoLW11bHRpbGluZS5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2pzL3NjcmlwdC10ZXN0cy9yZWdleHAtYm9sLXdpdGgtbXVsdGlsaW5lLmpzOiBB
ZGRlZC4KKwogMjAxMC0wOS0xNiAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IE9qYW4gVmFmYWkuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pz
L3JlZ2V4cC1ib2wtd2l0aC1tdWx0aWxpbmUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvanMvcmVnZXhwLWJvbC13aXRoLW11bHRpbGluZS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ2V4cC1ib2wtd2l0aC1tdWx0
aWxpbmUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBACitUZXN0IGZv
ciBiZWdpbm5pbmcgb2YgbGluZSAoQk9MIG9yIF4pIG1hdGNoaW5nIGluIGEgbXVsdGlsaW5lIHN0
cmluZworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBzLm1hdGNoKC9eYWJj
LykgaXMgbnVsbAorUEFTUyBzLm1hdGNoKC9eYWJjL20pIGlzIFsiYWJjIl0KK1BBU1Mgcy5tYXRj
aCgvKF58WClhYmMvKSBpcyBudWxsCitQQVNTIHMubWF0Y2goLyhefFgpYWJjL20pIGlzIFsiYWJj
IiwiIl0KK1BBU1Mgcy5tYXRjaCgvKF5hfFhhKWJjL20pIGlzIFsiYWJjIiwiYSJdCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9qcy9yZWdleHAtYm9sLXdpdGgtbXVsdGlsaW5lLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdleHAtYm9sLXdpdGgtbXVsdGlsaW5lLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ2V4cC1ib2wtd2l0aC1tdWx0aWxp
bmUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVC
TElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0icmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNj
cmlwdCBzcmM9InNjcmlwdC10ZXN0cy9yZWdleHAtYm9sLXdpdGgtbXVsdGlsaW5lLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3Rz
L3JlZ2V4cC1ib2wtd2l0aC1tdWx0aWxpbmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9qcy9zY3JpcHQtdGVzdHMvcmVnZXhwLWJvbC13aXRoLW11bHRpbGluZS5qcwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL3JlZ2V4cC1ib2wtd2l0
aC1tdWx0aWxpbmUuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKK2Rlc2NyaXB0aW9u
KAorJ1Rlc3QgZm9yIGJlZ2lubmluZyBvZiBsaW5lIChCT0wgb3IgXikgbWF0Y2hpbmcgaW4gYSBt
dWx0aWxpbmUgc3RyaW5nPC9hPicKKyk7CisKK3ZhciBzID0gImFjZWRcbmFiYyI7CitzaG91bGRC
ZU51bGwoJ3MubWF0Y2goL15hYmMvKScpOworc2hvdWxkQmUoJ3MubWF0Y2goL15hYmMvbSknLCAn
WyJhYmMiXScpOworc2hvdWxkQmVOdWxsKCdzLm1hdGNoKC8oXnxYKWFiYy8pJyk7CitzaG91bGRC
ZSgncy5tYXRjaCgvKF58WClhYmMvbSknLCAnWyJhYmMiLCIiXScpOworc2hvdWxkQmUoJ3MubWF0
Y2goLyheYXxYYSliYy9tKScsICdbImFiYyIsImEiXScpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFy
c2VkID0gdHJ1ZTsK
</data>
<flag name="review"
          id="57290"
          type_id="1"
          status="-"
          setter="barraclough"
    />
    <flag name="commit-queue"
          id="57291"
          type_id="3"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67924</attachid>
            <date>2010-09-17 11:18:19 -0700</date>
            <delta_ts>2010-09-18 14:04:29 -0700</delta_ts>
            <desc>Patch with changes recommended by reviewer</desc>
            <filename>45787-3.patch</filename>
            <type>text/plain</type>
            <size>22985</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY3Njc5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTAtMDktMTYgIE1pY2hhZWwg
U2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgY29kZSB0byB1bnJvbGwgcmVndWxhciBleHByZXNz
aW9ucyBjb250YWluaW5nIF4uCisgICAgICAgIEFsdGVybmF0aXZlcyB0aGF0IGJlZ2luIHdpdGgg
XiBhcmUgdGFnZ2VkIGR1cmluZyBwYXJzaW5nCisgICAgICAgIGFuZCByb2xsZWQgdXAgaW4gY29u
dGFpbmluZyBzdWIgZXhwcmVzc2lvbiBzdHJ1Y3RzLgorICAgICAgICBBZnRlciBwYXJzaW5nLCBh
IHJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFnZ2VkIGFzIGNvbnRhaW5pbmcKKyAgICAgICAgYSBeIChh
LmsuYS4gQk9MKSBpcyBwcm9jZXNzZWQgZnVydGhlciBpbiBvcHRpbWl6ZUJPTCgpLgorICAgICAg
ICBBIGNvcHkgb2YgdGhlIGRpc2p1bmN0aW9uIGlzIG1hZGUgZXhjbHVkaW5nIGFsdGVybmF0aXZl
cyB0aGF0CisgICAgICAgIGFyZSByb290ZWQgd2l0aCBCT0wuICBUaGUgb3JpZ2luYWwgYWx0ZXJu
YXRpdmVzIGFyZSBmbGFnZ2VkCisgICAgICAgIHRvIG9ubHkgYmUgZXhlY3V0ZWQgb25jZS4gIFRo
ZSBjb3B5IG9mIHRoZSBvdGhlciBhbHRlcm5hdGl2ZXMgYXJlCisgICAgICAgIGFkZGVkIHRvIHRo
ZSBvcmlnaW5hbCBleHByZXNzaW9uLgorICAgICAgICBJbiB0aGUgY2FzZSB0aGF0IGFsbCBvcmln
aW5hbCBhbHRlcm5hdGl2ZXMgYXJlIGZsYWdnZWQsIHRoZXJlCisgICAgICAgIHdvbid0IGJlIGFu
eSBsb29waW5nIGFsdGVybmF0aXZlcy4KKyAgICAgICAgVGhlIEpJVCBnZW5lcmF0b3Igd2lsbCBl
bWl0IGNvZGUgYWNjb3JkaW5nbHksIGV4ZWN1dGluZyB0aGUKKyAgICAgICAgb3JpZ2luYWwgYWx0
ZXJuYXRpdmVzIG9uY2UgYW5kIHRoZW4gbG9vcGluZyBvdmVyIHRoZQorICAgICAgICBhbHRlcm5h
dGl2ZXMgdGhhdCBhcmVuJ3QgYW5jaG9yZWQgd2l0aCBhIEJPTCAoaWYgYW55KS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1Nzg3CisKKyAgICAgICAg
KiB5YXJyL1JlZ2V4Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleFBhdHRl
cm5Db25zdHJ1Y3Rvcjo6YXNzZXJ0aW9uQk9MKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhQ
YXR0ZXJuQ29uc3RydWN0b3I6OmF0b21QYXJlbnRoZXNlc0VuZCk6CisgICAgICAgIChKU0M6Ollh
cnI6OlJlZ2V4UGF0dGVybkNvbnN0cnVjdG9yOjpjb3B5RGlzanVuY3Rpb24pOgorICAgICAgICAo
SlNDOjpZYXJyOjpSZWdleFBhdHRlcm5Db25zdHJ1Y3Rvcjo6Y29weVRlcm0pOgorICAgICAgICAo
SlNDOjpZYXJyOjpSZWdleFBhdHRlcm5Db25zdHJ1Y3Rvcjo6b3B0aW1pemVCT0wpOgorICAgICAg
ICAoSlNDOjpZYXJyOjpjb21waWxlUmVnZXgpOgorICAgICAgICAqIHlhcnIvUmVnZXhKSVQuY3Bw
OgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6Z2VuZXJhdGVEaXNqdW5jdGlv
bik6CisgICAgICAgICogeWFyci9SZWdleFBhdHRlcm4uaDoKKyAgICAgICAgKEpTQzo6WWFycjo6
UGF0dGVybkFsdGVybmF0aXZlOjpQYXR0ZXJuQWx0ZXJuYXRpdmUpOgorICAgICAgICAoSlNDOjpZ
YXJyOjpQYXR0ZXJuQWx0ZXJuYXRpdmU6OnNldE9uY2VUaHJvdWdoKToKKyAgICAgICAgKEpTQzo6
WWFycjo6UGF0dGVybkFsdGVybmF0aXZlOjpvbmNlVGhyb3VnaCk6CisgICAgICAgIChKU0M6Ollh
cnI6OlBhdHRlcm5EaXNqdW5jdGlvbjo6UGF0dGVybkRpc2p1bmN0aW9uKToKKyAgICAgICAgKEpT
Qzo6WWFycjo6UmVnZXhQYXR0ZXJuOjpSZWdleFBhdHRlcm4pOgorICAgICAgICAoSlNDOjpZYXJy
OjpSZWdleFBhdHRlcm46OnJlc2V0KToKKwogMjAxMC0wOS0xNiAgTWFydGluIFJvYmluc29uICA8
bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExvcGV6LgpJ
bmRleDogSmF2YVNjcmlwdENvcmUveWFyci9SZWdleENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4Q29tcGlsZXIuY3BwCShyZXZpc2lvbiA2NzY3OSkK
KysrIEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0MCw2ICsyNDAsNyBAQCBwdWJsaWM6CiAgICAgUmVnZXhQYXR0ZXJuQ29uc3RydWN0b3Io
UmVnZXhQYXR0ZXJuJiBwYXR0ZXJuKQogICAgICAgICA6IG1fcGF0dGVybihwYXR0ZXJuKQogICAg
ICAgICAsIG1fY2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3RvcihwYXR0ZXJuLm1faWdub3JlQ2FzZSkK
KyAgICAgICAgLCBtX2ludmVydFBhcmVudGhldGljYWxBc3NlcnRpb24oZmFsc2UpCiAgICAgewog
ICAgIH0KIApAQCAtMjU1LDYgKzI1NiwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBhc3Nl
cnRpb25CT0woKQogICAgIHsKKyAgICAgICAgaWYgKCFtX2FsdGVybmF0aXZlLT5tX3Rlcm1zLnNp
emUoKSAmICFtX2ludmVydFBhcmVudGhldGljYWxBc3NlcnRpb24pIHsKKyAgICAgICAgICAgIG1f
YWx0ZXJuYXRpdmUtPm1fc3RhcnRzV2l0aEJPTCA9IHRydWU7CisgICAgICAgICAgICBtX2FsdGVy
bmF0aXZlLT5tX2NvbnRhaW5zQk9MID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fcGF0dGVybi5tX2Nv
bnRhaW5zQk9MID0gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICBtX2FsdGVybmF0aXZlLT5tX3Rl
cm1zLmFwcGVuZChQYXR0ZXJuVGVybTo6Qk9MKCkpOwogICAgIH0KICAgICB2b2lkIGFzc2VydGlv
bkVPTCgpCkBAIC0zNTgsMTUgKzM2NCwzNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fcGF0dGVybi5t
X2Rpc2p1bmN0aW9ucy5hcHBlbmQocGFyZW50aGVzZXNEaXNqdW5jdGlvbik7CiAgICAgICAgIG1f
YWx0ZXJuYXRpdmUtPm1fdGVybXMuYXBwZW5kKFBhdHRlcm5UZXJtKFBhdHRlcm5UZXJtOjpUeXBl
UGFyZW50aGV0aWNhbEFzc2VydGlvbiwgbV9wYXR0ZXJuLm1fbnVtU3VicGF0dGVybnMgKyAxLCBw
YXJlbnRoZXNlc0Rpc2p1bmN0aW9uLCBpbnZlcnQpKTsKICAgICAgICAgbV9hbHRlcm5hdGl2ZSA9
IHBhcmVudGhlc2VzRGlzanVuY3Rpb24tPmFkZE5ld0FsdGVybmF0aXZlKCk7CisgICAgICAgIG1f
aW52ZXJ0UGFyZW50aGV0aWNhbEFzc2VydGlvbiA9IGludmVydDsKICAgICB9CiAKICAgICB2b2lk
IGF0b21QYXJlbnRoZXNlc0VuZCgpCiAgICAgewogICAgICAgICBBU1NFUlQobV9hbHRlcm5hdGl2
ZS0+bV9wYXJlbnQpOwogICAgICAgICBBU1NFUlQobV9hbHRlcm5hdGl2ZS0+bV9wYXJlbnQtPm1f
cGFyZW50KTsKKworICAgICAgICBQYXR0ZXJuRGlzanVuY3Rpb24qIHBhcmVudGhlc2lzRGlzanVu
Y3Rpb24gPSBtX2FsdGVybmF0aXZlLT5tX3BhcmVudDsKICAgICAgICAgbV9hbHRlcm5hdGl2ZSA9
IG1fYWx0ZXJuYXRpdmUtPm1fcGFyZW50LT5tX3BhcmVudDsKKworICAgICAgICBQYXR0ZXJuVGVy
bSBsYXN0VGVybSA9IG1fYWx0ZXJuYXRpdmUtPmxhc3RUZXJtKCk7CisgICAgICAgIAorICAgICAg
ICB1bnNpZ25lZCBudW1QYXJlbkFsdGVybmF0aXZlcyA9IHBhcmVudGhlc2lzRGlzanVuY3Rpb24t
Pm1fYWx0ZXJuYXRpdmVzLnNpemUoKTsKKyAgICAgICAgdW5zaWduZWQgbnVtQk9MQW5jaG9yZWRB
bHRzID0gMDsKKyAgICAgICAgLy8gQnViYmxlIHVwIEJPTCBmbGFncworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFyZW5BbHRlcm5hdGl2ZXM7IGkrKykgeworICAgICAgICAg
ICAgaWYgKHBhcmVudGhlc2lzRGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRpdmVzW2ldLT5tX3N0YXJ0
c1dpdGhCT0wpCisgICAgICAgICAgICAgICAgbnVtQk9MQW5jaG9yZWRBbHRzKys7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmIChudW1CT0xBbmNob3JlZEFsdHMpIHsKKyAgICAgICAg
ICAgIG1fYWx0ZXJuYXRpdmUtPm1fY29udGFpbnNCT0wgPSB0cnVlOworICAgICAgICAgICAgLy8g
SWYgYWxsIHRoZSBhbHRlcm5hdGl2ZXMgaW4gcGFyZW5zIHN0YXJ0IHdpdGggQk9MLCB0aGVuIHNv
IGRvZXMgdGhpcyBvbmUKKyAgICAgICAgICAgIGlmIChudW1CT0xBbmNob3JlZEFsdHMgPT0gbnVt
UGFyZW5BbHRlcm5hdGl2ZXMpCisgICAgICAgICAgICAgICAgbV9hbHRlcm5hdGl2ZS0+bV9zdGFy
dHNXaXRoQk9MID0gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgbV9hbHRlcm5h
dGl2ZS0+bGFzdFRlcm0oKS5wYXJlbnRoZXNlcy5sYXN0U3VicGF0dGVybklkID0gbV9wYXR0ZXJu
Lm1fbnVtU3VicGF0dGVybnM7CisgICAgICAgIGxhc3RUZXJtLnBhcmVudGhlc2VzLmxhc3RTdWJw
YXR0ZXJuSWQgPSBtX3BhdHRlcm4ubV9udW1TdWJwYXR0ZXJuczsKKyAgICAgICAgbV9pbnZlcnRQ
YXJlbnRoZXRpY2FsQXNzZXJ0aW9uID0gZmFsc2U7CiAgICAgfQogCiAgICAgdm9pZCBhdG9tQmFj
a1JlZmVyZW5jZSh1bnNpZ25lZCBzdWJwYXR0ZXJuSWQpCkBAIC0zOTcsMzIgKzQyNCwzOSBAQCBw
dWJsaWM6CiAgICAgICAgIG1fYWx0ZXJuYXRpdmUtPm1fdGVybXMuYXBwZW5kKFBhdHRlcm5UZXJt
KHN1YnBhdHRlcm5JZCkpOwogICAgIH0KIAotICAgIFBhdHRlcm5EaXNqdW5jdGlvbiogY29weURp
c2p1bmN0aW9uKFBhdHRlcm5EaXNqdW5jdGlvbiogZGlzanVuY3Rpb24pCisgICAgLy8gZGVlcCBj
b3B5IHRoZSBhcmd1bWVudCBkaXNqdW5jdGlvbi4gIElmIGZpbHRlclN0YXJ0c1dpdGhCT0wgaXMg
dHJ1ZSwgCisgICAgLy8gc2tpcCBhbHRlcm5hdGl2ZXMgd2l0aCBtX3N0YXJ0c1dpdGhCT0wgc2V0
IHRydWUuCisgICAgUGF0dGVybkRpc2p1bmN0aW9uKiBjb3B5RGlzanVuY3Rpb24oUGF0dGVybkRp
c2p1bmN0aW9uKiBkaXNqdW5jdGlvbiwgYm9vbCBmaWx0ZXJTdGFydHNXaXRoQk9MID0gZmFsc2Up
CiAgICAgewotICAgICAgICBQYXR0ZXJuRGlzanVuY3Rpb24qIG5ld0Rpc2p1bmN0aW9uID0gbmV3
IFBhdHRlcm5EaXNqdW5jdGlvbigpOwotCi0gICAgICAgIG5ld0Rpc2p1bmN0aW9uLT5tX3BhcmVu
dCA9IGRpc2p1bmN0aW9uLT5tX3BhcmVudDsKKyAgICAgICAgUGF0dGVybkRpc2p1bmN0aW9uKiBu
ZXdEaXNqdW5jdGlvbiA9IDA7CiAgICAgICAgIGZvciAodW5zaWduZWQgYWx0ID0gMDsgYWx0IDwg
ZGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRpdmVzLnNpemUoKTsgKythbHQpIHsKICAgICAgICAgICAg
IFBhdHRlcm5BbHRlcm5hdGl2ZSogYWx0ZXJuYXRpdmUgPSBkaXNqdW5jdGlvbi0+bV9hbHRlcm5h
dGl2ZXNbYWx0XTsKLSAgICAgICAgICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSogbmV3QWx0ZXJuYXRp
dmUgPSBuZXdEaXNqdW5jdGlvbi0+YWRkTmV3QWx0ZXJuYXRpdmUoKTsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBhbHRlcm5hdGl2ZS0+bV90ZXJtcy5zaXplKCk7ICsraSkK
LSAgICAgICAgICAgICAgICBuZXdBbHRlcm5hdGl2ZS0+bV90ZXJtcy5hcHBlbmQoY29weVRlcm0o
YWx0ZXJuYXRpdmUtPm1fdGVybXNbaV0pKTsKKyAgICAgICAgICAgIGlmICghZmlsdGVyU3RhcnRz
V2l0aEJPTCB8fCAhYWx0ZXJuYXRpdmUtPm1fc3RhcnRzV2l0aEJPTCkgeworICAgICAgICAgICAg
ICAgIGlmICghbmV3RGlzanVuY3Rpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3RGlzanVu
Y3Rpb24gPSBuZXcgUGF0dGVybkRpc2p1bmN0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIG5l
d0Rpc2p1bmN0aW9uLT5tX3BhcmVudCA9IGRpc2p1bmN0aW9uLT5tX3BhcmVudDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgUGF0dGVybkFsdGVybmF0aXZlKiBuZXdBbHRlcm5h
dGl2ZSA9IG5ld0Rpc2p1bmN0aW9uLT5hZGROZXdBbHRlcm5hdGl2ZSgpOworICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhbHRlcm5hdGl2ZS0+bV90ZXJtcy5zaXplKCk7
ICsraSkKKyAgICAgICAgICAgICAgICAgICAgbmV3QWx0ZXJuYXRpdmUtPm1fdGVybXMuYXBwZW5k
KGNvcHlUZXJtKGFsdGVybmF0aXZlLT5tX3Rlcm1zW2ldLCBmaWx0ZXJTdGFydHNXaXRoQk9MKSk7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICBtX3BhdHRlcm4ubV9kaXNqdW5j
dGlvbnMuYXBwZW5kKG5ld0Rpc2p1bmN0aW9uKTsKKyAgICAgICAgCisgICAgICAgIGlmIChuZXdE
aXNqdW5jdGlvbikKKyAgICAgICAgICAgIG1fcGF0dGVybi5tX2Rpc2p1bmN0aW9ucy5hcHBlbmQo
bmV3RGlzanVuY3Rpb24pOwogICAgICAgICByZXR1cm4gbmV3RGlzanVuY3Rpb247CiAgICAgfQot
Ci0gICAgUGF0dGVyblRlcm0gY29weVRlcm0oUGF0dGVyblRlcm0mIHRlcm0pCisgICAgCisgICAg
UGF0dGVyblRlcm0gY29weVRlcm0oUGF0dGVyblRlcm0mIHRlcm0sIGJvb2wgZmlsdGVyU3RhcnRz
V2l0aEJPTCA9IGZhbHNlKQogICAgIHsKICAgICAgICAgaWYgKCh0ZXJtLnR5cGUgIT0gUGF0dGVy
blRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm4pICYmICh0ZXJtLnR5cGUgIT0gUGF0dGVy
blRlcm06OlR5cGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uKSkKICAgICAgICAgICAgIHJldHVybiBQ
YXR0ZXJuVGVybSh0ZXJtKTsKLQorICAgICAgICAKICAgICAgICAgUGF0dGVyblRlcm0gdGVybUNv
cHkgPSB0ZXJtOwotICAgICAgICB0ZXJtQ29weS5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbiA9IGNv
cHlEaXNqdW5jdGlvbih0ZXJtQ29weS5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbik7CisgICAgICAg
IHRlcm1Db3B5LnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uID0gY29weURpc2p1bmN0aW9uKHRlcm1D
b3B5LnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLCBmaWx0ZXJTdGFydHNXaXRoQk9MKTsKICAgICAg
ICAgcmV0dXJuIHRlcm1Db3B5OwogICAgIH0KLQorICAgIAogICAgIHZvaWQgcXVhbnRpZnlBdG9t
KHVuc2lnbmVkIG1pbiwgdW5zaWduZWQgbWF4LCBib29sIGdyZWVkeSkKICAgICB7CiAgICAgICAg
IEFTU0VSVChtaW4gPD0gbWF4KTsKQEAgLTU4OSwxMSArNjIzLDQwIEBAIHB1YmxpYzoKICAgICAg
ICAgc2V0dXBEaXNqdW5jdGlvbk9mZnNldHMobV9wYXR0ZXJuLm1fYm9keSwgMCwgMCk7CiAgICAg
fQogCisgICAgdm9pZCBvcHRpbWl6ZUJPTCgpCisgICAgeworICAgICAgICAvLyBMb29rIGZvciBl
eHByZXNzaW9ucyBjb250YWluaW5nIGJlZ2lubmluZyBvZiBsaW5lICheKSBhbmNob3JpbmcgYW5k
IHVucm9sbCB0aGVtLgorICAgICAgICAvLyBlLmcuIC9eYXxeYnxjLyBiZWNvbWVzIC9eYXxeYnxj
LyB3aGljaCBpcyBleGVjdXRlZCBvbmNlIGZvbGxvd2VkIGJ5IC9jLyB3aGljaCBsb29wcworICAg
ICAgICAvLyBUaGlzIGNvZGUgcmVsaWVzIG9uIHRoZSBwYXJzaW5nIGNvZGUgdGFnZ2luZyBhbHRl
cm5hdGl2ZXMgd2l0aCBtX2NvbnRhaW5zQk9MIGFuZAorICAgICAgICAvLyBtX3N0YXJ0c1dpdGhC
T0wgYW5kIHJvbGxpbmcgdGhvc2UgdXAgdG8gY29udGFpbmluZyBhbHRlcm5hdGl2ZXMuCisgICAg
ICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoaXMgaXMgb25seSB2YWxpZCBmb3Igbm9uLW11bHRpbGlu
ZSBleHByZXNzaW9ucy4KKyAgICAgICAgUGF0dGVybkRpc2p1bmN0aW9uKiBkaXNqdW5jdGlvbiA9
IG1fcGF0dGVybi5tX2JvZHk7CisgICAgICAgIAorICAgICAgICBpZiAoIW1fcGF0dGVybi5tX2Nv
bnRhaW5zQk9MIHx8IG1fcGF0dGVybi5tX211bHRpbGluZSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIFBhdHRlcm5EaXNqdW5jdGlvbiogbG9vcERpc2p1bmN0aW9uID0g
Y29weURpc2p1bmN0aW9uKGRpc2p1bmN0aW9uLCB0cnVlKTsKKworICAgICAgICAvLyBTZXQgYWx0
ZXJuYXRpdmVzIGluIGRpc2p1bmN0aW9uIHRvICJvbmNlVGhyb3VnaCIKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBhbHQgPSAwOyBhbHQgPCBkaXNqdW5jdGlvbi0+bV9hbHRlcm5hdGl2ZXMuc2l6ZSgp
OyArK2FsdCkKKyAgICAgICAgICAgIGRpc2p1bmN0aW9uLT5tX2FsdGVybmF0aXZlc1thbHRdLT5z
ZXRPbmNlVGhyb3VnaCgpOworCisgICAgICAgIGlmIChsb29wRGlzanVuY3Rpb24pIHsKKyAgICAg
ICAgICAgIC8vIE1vdmUgYWx0ZXJuYXRpdmVzIGZyb20gbG9vcERpc2p1bmN0aW9uIHRvIGRpc2p1
bmN0aW9uCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFsdCA9IDA7IGFsdCA8IGxvb3BEaXNq
dW5jdGlvbi0+bV9hbHRlcm5hdGl2ZXMuc2l6ZSgpOyArK2FsdCkKKyAgICAgICAgICAgICAgICBk
aXNqdW5jdGlvbi0+bV9hbHRlcm5hdGl2ZXMuYXBwZW5kKGxvb3BEaXNqdW5jdGlvbi0+bV9hbHRl
cm5hdGl2ZXNbYWx0XSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBsb29wRGlzanVu
Y3Rpb24tPm1fYWx0ZXJuYXRpdmVzLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgCiBwcml2YXRlOgogICAgIFJlZ2V4UGF0dGVybiYgbV9wYXR0ZXJuOwogICAgIFBhdHRlcm5B
bHRlcm5hdGl2ZSogbV9hbHRlcm5hdGl2ZTsKICAgICBDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9y
IG1fY2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3RvcjsKICAgICBib29sIG1faW52ZXJ0Q2hhcmFjdGVy
Q2xhc3M7CisgICAgYm9vbCBtX2ludmVydFBhcmVudGhldGljYWxBc3NlcnRpb247CiB9OwogCiAK
QEAgLTYyMSw2ICs2ODQsOCBAQCBjb25zdCBjaGFyKiBjb21waWxlUmVnZXgoY29uc3QgVVN0cmlu
ZyYgCiAgICAgICAgIEFTU0VSVChudW1TdWJwYXR0ZXJucyA9PSBwYXR0ZXJuLm1fbnVtU3VicGF0
dGVybnMpOwogICAgIH0KIAorICAgIGNvbnN0cnVjdG9yLm9wdGltaXplQk9MKCk7CisgICAgICAg
IAogICAgIGNvbnN0cnVjdG9yLnNldHVwT2Zmc2V0cygpOwogCiAgICAgcmV0dXJuIDA7CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS95YXJyL1JlZ2V4SklULmNwcAkocmV2aXNpb24gNjc2NzkpCisrKyBKYXZhU2NyaXB0
Q29yZS95YXJyL1JlZ2V4SklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwNywyMSArMTIwNywy
NiBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgIFRl
cm1HZW5lcmF0aW9uU3RhdGUgc3RhdGUoZGlzanVuY3Rpb24sIDApOwogICAgICAgICBzdGF0ZS5y
ZXNldEFsdGVybmF0aXZlKCk7CiAKLSAgICAgICAgLy8gUGxhbnQgYSBjaGVjayB0byBzZWUgaWYg
dGhlcmUgaXMgc3VmZmljaWVudCBpbnB1dCBhdmFpbGFibGUgdG8gcnVuIHRoZSBmaXJzdCBhbHRl
cm5hdGl2ZS4KLSAgICAgICAgLy8gSnVtcGluZyBiYWNrIHRvIHRoZSBsYWJlbCAnZmlyc3RBbHRl
cm5hdGl2ZScgd2lsbCBnZXQgdG8gdGhpcyBjaGVjaywganVtcGluZyB0bwotICAgICAgICAvLyAn
Zmlyc3RBbHRlcm5hdGl2ZUlucHV0Q2hlY2tlZCcgd2lsbCBqdW1wIGRpcmVjdGx5IHRvIG1hdGNo
aW5nIHRoZSBhbHRlcm5hdGl2ZSBoYXZpbmcKLSAgICAgICAgLy8gc2tpcHBlZCB0aGlzIGNoZWNr
LgotCi0gICAgICAgIExhYmVsIGZpcnN0QWx0ZXJuYXRpdmUodGhpcyk7Ci0KICAgICAgICAgLy8g
Y2hlY2sgYXZhaWxhYmlsaXR5IGZvciB0aGUgbmV4dCBhbHRlcm5hdGl2ZQogICAgICAgICBpbnQg
Y291bnRDaGVja2VkRm9yQ3VycmVudEFsdGVybmF0aXZlID0gMDsKICAgICAgICAgaW50IGNvdW50
VG9DaGVja0ZvckZpcnN0QWx0ZXJuYXRpdmUgPSAwOwogICAgICAgICBib29sIGhhc1Nob3J0ZXJB
bHRlcm5hdGl2ZXMgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBzZXRSZXBlYXRBbHRlcm5hdGl2ZUxh
YmVscyA9IGZhbHNlOwogICAgICAgICBKdW1wTGlzdCBub3RFbm91Z2hJbnB1dEZvclByZXZpb3Vz
QWx0ZXJuYXRpdmU7CisgICAgICAgIExhYmVsIGZpcnN0QWx0ZXJuYXRpdmU7CisgICAgICAgIExh
YmVsIGZpcnN0QWx0ZXJuYXRpdmVJbnB1dENoZWNrZWQ7CiAKKyAgICAgICAgLy8gVGhlIGxhYmVs
ICdmaXJzdEFsdGVybmF0aXZlJyBpcyB1c2VkIHRvIHBsYW50IGEgY2hlY2sgdG8gc2VlIGlmIHRo
ZXJlIGlzIAorICAgICAgICAvLyBzdWZmaWNpZW50IGlucHV0IGF2YWlsYWJsZSB0byBydW4gdGhl
IGZpcnN0IHJlcGVhdGluZyBhbHRlcm5hdGl2ZS4KKyAgICAgICAgLy8gVGhlIGxhYmVsICdmaXJz
dEFsdGVybmF0aXZlSW5wdXRDaGVja2VkJyB3aWxsIGp1bXAgZGlyZWN0bHkgdG8gbWF0Y2hpbmcg
CisgICAgICAgIC8vIHRoZSBmaXJzdCByZXBlYXRpbmcgYWx0ZXJuYXRpdmUgaGF2aW5nIHNraXBw
ZWQgdGhpcyBjaGVjay4KKyAgICAgICAgCiAgICAgICAgIGlmIChzdGF0ZS5hbHRlcm5hdGl2ZVZh
bGlkKCkpIHsKICAgICAgICAgICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSogYWx0ZXJuYXRpdmUgPSBz
dGF0ZS5hbHRlcm5hdGl2ZSgpOworICAgICAgICAgICAgaWYgKCFhbHRlcm5hdGl2ZS0+b25jZVRo
cm91Z2goKSkgeworICAgICAgICAgICAgICAgIGZpcnN0QWx0ZXJuYXRpdmUgPSBMYWJlbCh0aGlz
KTsKKyAgICAgICAgICAgICAgICBzZXRSZXBlYXRBbHRlcm5hdGl2ZUxhYmVscyA9IHRydWU7Cisg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBjb3VudFRvQ2hlY2tGb3JGaXJzdEFsdGVybmF0aXZl
ID0gYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemU7CiAgICAgICAgICAgICBzdGF0ZS5jaGVja2Vk
VG90YWwgKz0gY291bnRUb0NoZWNrRm9yRmlyc3RBbHRlcm5hdGl2ZTsKICAgICAgICAgICAgIGlm
IChjb3VudFRvQ2hlY2tGb3JGaXJzdEFsdGVybmF0aXZlKQpAQCAtMTIyOSw3ICsxMjM0LDggQEAg
Y2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICAgICAgY291
bnRDaGVja2VkRm9yQ3VycmVudEFsdGVybmF0aXZlID0gY291bnRUb0NoZWNrRm9yRmlyc3RBbHRl
cm5hdGl2ZTsKICAgICAgICAgfQogCi0gICAgICAgIExhYmVsIGZpcnN0QWx0ZXJuYXRpdmVJbnB1
dENoZWNrZWQodGhpcyk7CisgICAgICAgIGlmIChzZXRSZXBlYXRBbHRlcm5hdGl2ZUxhYmVscykK
KyAgICAgICAgICAgIGZpcnN0QWx0ZXJuYXRpdmVJbnB1dENoZWNrZWQgPSBMYWJlbCh0aGlzKTsK
IAogICAgICAgICB3aGlsZSAoc3RhdGUuYWx0ZXJuYXRpdmVWYWxpZCgpKSB7CiAgICAgICAgICAg
ICAvLyBUcmFjayB3aGV0aGVyIGFueSBhbHRlcm5hdGl2ZXMgYXJlIHNob3J0ZXIgdGhhbiB0aGUg
Zmlyc3Qgb25lLgpAQCAtMTI2NCw2ICsxMjcwLDE3IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDog
cHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGFyZSBhbnkgbW9yZSBh
bHRlcm5hdGl2ZXMsIHBsYW50IHRoZSBjaGVjayBmb3IgaW5wdXQgYmVmb3JlIGxvb3BpbmcuCiAg
ICAgICAgICAgICBpZiAoc3RhdGUuYWx0ZXJuYXRpdmVWYWxpZCgpKSB7CiAgICAgICAgICAgICAg
ICAgUGF0dGVybkFsdGVybmF0aXZlKiBuZXh0QWx0ZXJuYXRpdmUgPSBzdGF0ZS5hbHRlcm5hdGl2
ZSgpOworICAgICAgICAgICAgICAgIGJvb2wgc2V0QWx0ZXJuYXRpdmVMb29wTGFiZWwgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBpZiAoIXNldFJlcGVhdEFsdGVybmF0aXZlTGFiZWxzICYmICFu
ZXh0QWx0ZXJuYXRpdmUtPm9uY2VUaHJvdWdoKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
V2UgaGF2ZSBoYW5kbGVkIG5vbi1yZXBlYXRpbmcgYWx0ZXJuYXRpdmVzLCBqdW1wIHRvIG5leHQg
aXRlcmF0aW9uIAorICAgICAgICAgICAgICAgICAgICAvLyBhbmQgbG9vcCBvdmVyIHJlcGVhdGlu
ZyBhbHRlcm5hdGl2ZXMuCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFj
ayhqdW1wKCksIHRoaXMpOworCisgICAgICAgICAgICAgICAgICAgIGZpcnN0QWx0ZXJuYXRpdmUg
PSBMYWJlbCh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0UmVwZWF0QWx0ZXJuYXRpdmVM
YWJlbHMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBzZXRBbHRlcm5hdGl2ZUxvb3BMYWJl
bCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGludCBjb3VudFRvQ2hlY2tGb3JOZXh0QWx0ZXJuYXRpdmUgPSBuZXh0QWx0ZXJuYXRp
dmUtPm1fbWluaW11bVNpemU7CiAKICAgICAgICAgICAgICAgICBpZiAoY291bnRDaGVja2VkRm9y
Q3VycmVudEFsdGVybmF0aXZlID4gY291bnRUb0NoZWNrRm9yTmV4dEFsdGVybmF0aXZlKSB7IC8v
IENBU0UgMTogY3VycmVudCBhbHRlcm5hdGl2ZSB3YXMgbG9uZ2VyIHRoYW4gdGhlIG5leHQgb25l
LgpAQCAtMTMwMiw2ICsxMzE5LDEyIEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBN
YWNyb0Fzc2UKICAgICAgICAgICAgICAgICAgICAgc3RhdGUubGlua0FsdGVybmF0aXZlQmFja3Ry
YWNrcyh0aGlzKTsKICAgICAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgICAgICBpZiAoc2V0
QWx0ZXJuYXRpdmVMb29wTGFiZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RBbHRlcm5h
dGl2ZUlucHV0Q2hlY2tlZCA9IExhYmVsKHRoaXMpOworICAgICAgICAgICAgICAgICAgICBjb3Vu
dFRvQ2hlY2tGb3JGaXJzdEFsdGVybmF0aXZlID0gY291bnRUb0NoZWNrRm9yTmV4dEFsdGVybmF0
aXZlOworICAgICAgICAgICAgICAgICAgICBzZXRBbHRlcm5hdGl2ZUxvb3BMYWJlbCA9IHRydWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN0
YXRlLmNoZWNrZWRUb3RhbCAtPSBjb3VudENoZWNrZWRGb3JDdXJyZW50QWx0ZXJuYXRpdmU7CiAg
ICAgICAgICAgICAgICAgY291bnRDaGVja2VkRm9yQ3VycmVudEFsdGVybmF0aXZlID0gY291bnRU
b0NoZWNrRm9yTmV4dEFsdGVybmF0aXZlOwogICAgICAgICAgICAgICAgIHN0YXRlLmNoZWNrZWRU
b3RhbCArPSBjb3VudENoZWNrZWRGb3JDdXJyZW50QWx0ZXJuYXRpdmU7CkBAIC0xMzU4LDI5ICsx
MzgxLDMzIEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHN0b3JlMzIoaW5kZXgsIEFkZHJlc3Mob3V0
cHV0KSk7CiAgICAgICAgIH0KLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgc3VmZmljZW50
IGlucHV0IHRvIHJ1biB0aGUgZmlyc3QgYWx0ZXJuYXRpdmUgYWdhaW4uCi0gICAgICAgIGp1bXBJ
ZkF2YWlsYWJsZUlucHV0KGluY3JlbWVudEZvck5leHRJdGVyKS5saW5rVG8oZmlyc3RBbHRlcm5h
dGl2ZUlucHV0Q2hlY2tlZCwgdGhpcyk7Ci0gICAgICAgIC8vIE5vIC0gaW5zdWZmaWNlbnQgaW5w
dXQgdG8gcnVuIHRoZSBmaXJzdCBhbHRlcmFuYXRpdmUsIGFyZSB0aGVyZSBhbnkgb3RoZXIgYWx0
ZXJuYXRpdmVzIHdlCi0gICAgICAgIC8vIG1pZ2h0IG5lZWQgdG8gY2hlY2s/ICBJZiBzbywgdGhl
IGxhc3QgY2hlY2sgd2lsbCBoYXZlIGxlZnQgdGhlIGluZGV4IGluY3JlbWVudGVkIGJ5Ci0gICAg
ICAgIC8vIChjb3VudFRvQ2hlY2tGb3JGaXJzdEFsdGVybmF0aXZlICsgMSksIHNvIHdlIG5lZWQg
dGVzdCB3aGV0aGVyIGNvdW50VG9DaGVja0ZvckZpcnN0QWx0ZXJuYXRpdmUKLSAgICAgICAgLy8g
TEVTUyBpbnB1dCBpcyBhdmFpbGFibGUsIHRvIGhhdmUgdGhlIGVmZmVjdCBvZiBqdXN0IHByb2dy
ZXNzaW5nIHRoZSBzdGFydCBwb3NpdGlvbiBieSAxCi0gICAgICAgIC8vIGZyb20gdGhlIGxhc3Qg
aXRlcmF0aW9uLiAgSWYgdGhpcyBjaGVjayBwYXNzZXMgd2UgY2FuIGp1c3QganVtcCB1cCB0byB0
aGUgY2hlY2sgYXNzb2NpYXRlZAotICAgICAgICAvLyB3aXRoIHRoZSBmaXJzdCBhbHRlcm5hdGl2
ZSBpbiB0aGUgbG9vcC4gIFRoaXMgaXMgYSBiaXQgc2FkLCBzaW5jZSB3ZSdsbCBlbmQgdXAgdHJ5
aW5nIHRoZQotICAgICAgICAvLyBmaXJzdCBhbHRlcm5hdGl2ZSBhZ2FpbiwgYW5kIHRoaXMgY2hl
Y2sgd2lsbCBmYWlsIChvdGhlcndpc2UgdGhlIGNoZWNrIHBsYW50ZWQganVzdCBhYm92ZQotICAg
ICAgICAvLyBoZXJlIHdvdWxkIGhhdmUgcGFzc2VkKS4gIFRoaXMgaXMgYSBiaXQgc2FkLCBob3dl
dmVyIGl0IHNhdmVzIHRyeWluZyB0byBkbyBzb21ldGhpbmcgbW9yZQotICAgICAgICAvLyBjb21w
bGV4IGhlcmUgaW4gY29tcGlsYXRpb24sIGFuZCBpbiB0aGUgY29tbW9uIGNhc2Ugd2Ugc2hvdWxk
IGVuZCB1cCBjb2FsbGVzY2luZyB0aGUgY2hlY2tzLgotICAgICAgICAvLwotICAgICAgICAvLyBG
SVhNRTogYSBuaWNlIGltcHJvdmVtZW50IGhlcmUgbWF5IGJlIHRvIHN0b3AgdHJ5aW5nIHRvIG1h
dGNoIHNvb25lciwgYmFzZWQgb24gdGhlIGxlYXN0Ci0gICAgICAgIC8vIG9mIHRoZSBtaW5pbXVt
LWFsdGVybmF0aXZlLWxlbmd0aHMuICBFLmcuIGlmIEkgaGF2ZSB0d28gYWx0ZXJuYXRpdmVzIG9m
IGxlbmd0aCAyMDAgYW5kIDE1MCwKLSAgICAgICAgLy8gYW5kIGEgc3RyaW5nIG9mIGxlbmd0aCAx
MDAsIHdlJ2xsIGVuZCB1cCBsb29waW5nIGluZGV4IGZyb20gMCB0byAxMDAsIGNoZWNraW5nIHdo
ZXRoZXIgdGhlcmUKLSAgICAgICAgLy8gaXMgc3VmZmljaWVudCBpbnB1dCB0byBydW4gZWl0aGVy
IGFsdGVybmF0aXZlIChjb25zdGFudGx5IGZhaWxpbmcpLiAgSWYgdGhlcmUgaGFkIGJlZW4gb25s
eQotICAgICAgICAvLyBvbmUgYWx0ZXJuYXRpdmUsIG9yIGlmIHRoZSBzaG9ydGVyIGFsdGVybmF0
aXZlIGhhZCBjb21lIGZpcnN0LCB3ZSB3b3VsZCBoYXZlIHRlcm1pbmF0ZWQKLSAgICAgICAgLy8g
aW1tZWRpYXRlbHkuIDotLwotICAgICAgICBpZiAoaGFzU2hvcnRlckFsdGVybmF0aXZlcykKLSAg
ICAgICAgICAgIGp1bXBJZkF2YWlsYWJsZUlucHV0KC1jb3VudFRvQ2hlY2tGb3JGaXJzdEFsdGVy
bmF0aXZlKS5saW5rVG8oZmlyc3RBbHRlcm5hdGl2ZSwgdGhpcyk7Ci0gICAgICAgIC8vIGluZGV4
IHdpbGwgbm93IGJlIGEgYml0IGdhcmJsZWQgKGRlcGVuZGluZyBvbiB3aGV0aGVyICdoYXNTaG9y
dGVyQWx0ZXJuYXRpdmVzJyBpcyB0cnVlLAotICAgICAgICAvLyBpdCBoYXMgZWl0aGVyIGJlZW4g
aW5jcmVtZW50ZWQgYnkgMSBvciBieSAoY291bnRUb0NoZWNrRm9yRmlyc3RBbHRlcm5hdGl2ZSAr
IDEpIC4uLiAKLSAgICAgICAgLy8gYnV0IHNpbmNlIHdlJ3JlIGFib3V0IHRvIHJldHVybiBhIGZh
aWx1cmUgdGhpcyBkb2Vzbid0IHJlYWxseSBtYXR0ZXIhKQorICAgICAgICAKKyAgICAgICAgLy8g
TG9vcCBpZiB0aGVyZSBhcmUgcmVwZWF0aW5nIGFsdGVybmF0aXZlcy4KKyAgICAgICAgaWYgKHNl
dFJlcGVhdEFsdGVybmF0aXZlTGFiZWxzKSB7CisgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGVy
ZSBpcyBzdWZmaWNlbnQgaW5wdXQgdG8gcnVuIHRoZSBmaXJzdCBhbHRlcm5hdGl2ZSBhZ2Fpbi4K
KyAgICAgICAgICAgIGp1bXBJZkF2YWlsYWJsZUlucHV0KGluY3JlbWVudEZvck5leHRJdGVyKS5s
aW5rVG8oZmlyc3RBbHRlcm5hdGl2ZUlucHV0Q2hlY2tlZCwgdGhpcyk7CisgICAgICAgICAgICAv
LyBObyAtIGluc3VmZmljZW50IGlucHV0IHRvIHJ1biB0aGUgZmlyc3QgYWx0ZXJhbmF0aXZlLCBh
cmUgdGhlcmUgYW55IG90aGVyIGFsdGVybmF0aXZlcyB3ZQorICAgICAgICAgICAgLy8gbWlnaHQg
bmVlZCB0byBjaGVjaz8gIElmIHNvLCB0aGUgbGFzdCBjaGVjayB3aWxsIGhhdmUgbGVmdCB0aGUg
aW5kZXggaW5jcmVtZW50ZWQgYnkKKyAgICAgICAgICAgIC8vIChjb3VudFRvQ2hlY2tGb3JGaXJz
dEFsdGVybmF0aXZlICsgMSksIHNvIHdlIG5lZWQgdGVzdCB3aGV0aGVyIGNvdW50VG9DaGVja0Zv
ckZpcnN0QWx0ZXJuYXRpdmUKKyAgICAgICAgICAgIC8vIExFU1MgaW5wdXQgaXMgYXZhaWxhYmxl
LCB0byBoYXZlIHRoZSBlZmZlY3Qgb2YganVzdCBwcm9ncmVzc2luZyB0aGUgc3RhcnQgcG9zaXRp
b24gYnkgMQorICAgICAgICAgICAgLy8gZnJvbSB0aGUgbGFzdCBpdGVyYXRpb24uICBJZiB0aGlz
IGNoZWNrIHBhc3NlcyB3ZSBjYW4ganVzdCBqdW1wIHVwIHRvIHRoZSBjaGVjayBhc3NvY2lhdGVk
CisgICAgICAgICAgICAvLyB3aXRoIHRoZSBmaXJzdCBhbHRlcm5hdGl2ZSBpbiB0aGUgbG9vcC4g
IFRoaXMgaXMgYSBiaXQgc2FkLCBzaW5jZSB3ZSdsbCBlbmQgdXAgdHJ5aW5nIHRoZQorICAgICAg
ICAgICAgLy8gZmlyc3QgYWx0ZXJuYXRpdmUgYWdhaW4sIGFuZCB0aGlzIGNoZWNrIHdpbGwgZmFp
bCAob3RoZXJ3aXNlIHRoZSBjaGVjayBwbGFudGVkIGp1c3QgYWJvdmUKKyAgICAgICAgICAgIC8v
IGhlcmUgd291bGQgaGF2ZSBwYXNzZWQpLiAgVGhpcyBpcyBhIGJpdCBzYWQsIGhvd2V2ZXIgaXQg
c2F2ZXMgdHJ5aW5nIHRvIGRvIHNvbWV0aGluZyBtb3JlCisgICAgICAgICAgICAvLyBjb21wbGV4
IGhlcmUgaW4gY29tcGlsYXRpb24sIGFuZCBpbiB0aGUgY29tbW9uIGNhc2Ugd2Ugc2hvdWxkIGVu
ZCB1cCBjb2FsbGVzY2luZyB0aGUgY2hlY2tzLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IC8vIEZJWE1FOiBhIG5pY2UgaW1wcm92ZW1lbnQgaGVyZSBtYXkgYmUgdG8gc3RvcCB0cnlpbmcg
dG8gbWF0Y2ggc29vbmVyLCBiYXNlZCBvbiB0aGUgbGVhc3QKKyAgICAgICAgICAgIC8vIG9mIHRo
ZSBtaW5pbXVtLWFsdGVybmF0aXZlLWxlbmd0aHMuICBFLmcuIGlmIEkgaGF2ZSB0d28gYWx0ZXJu
YXRpdmVzIG9mIGxlbmd0aCAyMDAgYW5kIDE1MCwKKyAgICAgICAgICAgIC8vIGFuZCBhIHN0cmlu
ZyBvZiBsZW5ndGggMTAwLCB3ZSdsbCBlbmQgdXAgbG9vcGluZyBpbmRleCBmcm9tIDAgdG8gMTAw
LCBjaGVja2luZyB3aGV0aGVyIHRoZXJlCisgICAgICAgICAgICAvLyBpcyBzdWZmaWNpZW50IGlu
cHV0IHRvIHJ1biBlaXRoZXIgYWx0ZXJuYXRpdmUgKGNvbnN0YW50bHkgZmFpbGluZykuICBJZiB0
aGVyZSBoYWQgYmVlbiBvbmx5CisgICAgICAgICAgICAvLyBvbmUgYWx0ZXJuYXRpdmUsIG9yIGlm
IHRoZSBzaG9ydGVyIGFsdGVybmF0aXZlIGhhZCBjb21lIGZpcnN0LCB3ZSB3b3VsZCBoYXZlIHRl
cm1pbmF0ZWQKKyAgICAgICAgICAgIC8vIGltbWVkaWF0ZWx5LiA6LS8KKyAgICAgICAgICAgIGlm
IChoYXNTaG9ydGVyQWx0ZXJuYXRpdmVzKQorICAgICAgICAgICAgICAgIGp1bXBJZkF2YWlsYWJs
ZUlucHV0KC1jb3VudFRvQ2hlY2tGb3JGaXJzdEFsdGVybmF0aXZlKS5saW5rVG8oZmlyc3RBbHRl
cm5hdGl2ZSwgdGhpcyk7CisgICAgICAgICAgICAvLyBpbmRleCB3aWxsIG5vdyBiZSBhIGJpdCBn
YXJibGVkIChkZXBlbmRpbmcgb24gd2hldGhlciAnaGFzU2hvcnRlckFsdGVybmF0aXZlcycgaXMg
dHJ1ZSwKKyAgICAgICAgICAgIC8vIGl0IGhhcyBlaXRoZXIgYmVlbiBpbmNyZW1lbnRlZCBieSAx
IG9yIGJ5IChjb3VudFRvQ2hlY2tGb3JGaXJzdEFsdGVybmF0aXZlICsgMSkgLi4uIAorICAgICAg
ICAgICAgLy8gYnV0IHNpbmNlIHdlJ3JlIGFib3V0IHRvIHJldHVybiBhIGZhaWx1cmUgdGhpcyBk
b2Vzbid0IHJlYWxseSBtYXR0ZXIhKQorICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fcGF0dGVy
bi5tX2JvZHktPm1fY2FsbEZyYW1lU2l6ZSkKICAgICAgICAgICAgIGFkZFB0cihJbW0zMihtX3Bh
dHRlcm4ubV9ib2R5LT5tX2NhbGxGcmFtZVNpemUgKiBzaXplb2Yodm9pZCopKSwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwpJbmRleDogSmF2YVNjcmlwdENvcmUveWFyci9SZWdleFBhdHRlcm4uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4UGF0dGVybi5oCShyZXZpc2lv
biA2NzY3OSkKKysrIEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhQYXR0ZXJuLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIwNyw2ICsyMDcsMTAgQEAgc3RydWN0IFBhdHRlcm5UZXJtIHsKIHN0cnVjdCBQ
YXR0ZXJuQWx0ZXJuYXRpdmUgOiBGYXN0QWxsb2NCYXNlIHsKICAgICBQYXR0ZXJuQWx0ZXJuYXRp
dmUoUGF0dGVybkRpc2p1bmN0aW9uKiBkaXNqdW5jdGlvbikKICAgICAgICAgOiBtX3BhcmVudChk
aXNqdW5jdGlvbikKKyAgICAgICAgLCBtX29uY2VUaHJvdWdoKGZhbHNlKQorICAgICAgICAsIG1f
aGFzRml4ZWRTaXplKGZhbHNlKQorICAgICAgICAsIG1fc3RhcnRzV2l0aEJPTChmYWxzZSkKKyAg
ICAgICAgLCBtX2NvbnRhaW5zQk9MKGZhbHNlKQogICAgIHsKICAgICB9CiAKQEAgLTIyMSwxNiAr
MjI1LDMwIEBAIHN0cnVjdCBQYXR0ZXJuQWx0ZXJuYXRpdmUgOiBGYXN0QWxsb2NCYXMKICAgICAg
ICAgQVNTRVJUKG1fdGVybXMuc2l6ZSgpKTsKICAgICAgICAgbV90ZXJtcy5zaHJpbmsobV90ZXJt
cy5zaXplKCkgLSAxKTsKICAgICB9CisgICAgCisgICAgdm9pZCBzZXRPbmNlVGhyb3VnaCgpCisg
ICAgeworICAgICAgICBtX29uY2VUaHJvdWdoID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBvbmNlVGhyb3VnaCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9vbmNlVGhyb3VnaDsKKyAg
ICB9CiAKICAgICBWZWN0b3I8UGF0dGVyblRlcm0+IG1fdGVybXM7CiAgICAgUGF0dGVybkRpc2p1
bmN0aW9uKiBtX3BhcmVudDsKICAgICB1bnNpZ25lZCBtX21pbmltdW1TaXplOwotICAgIGJvb2wg
bV9oYXNGaXhlZFNpemU7CisgICAgYm9vbCBtX29uY2VUaHJvdWdoIDogMTsKKyAgICBib29sIG1f
aGFzRml4ZWRTaXplIDogMTsKKyAgICBib29sIG1fc3RhcnRzV2l0aEJPTCA6IDE7CisgICAgYm9v
bCBtX2NvbnRhaW5zQk9MIDogMTsKIH07CiAKIHN0cnVjdCBQYXR0ZXJuRGlzanVuY3Rpb24gOiBG
YXN0QWxsb2NCYXNlIHsKICAgICBQYXR0ZXJuRGlzanVuY3Rpb24oUGF0dGVybkFsdGVybmF0aXZl
KiBwYXJlbnQgPSAwKQogICAgICAgICA6IG1fcGFyZW50KHBhcmVudCkKKyAgICAgICAgLCBtX2hh
c0ZpeGVkU2l6ZShmYWxzZSkKICAgICB7CiAgICAgfQogICAgIApAQCAtMjY5LDkgKzI4NywxMCBA
QCBzdHJ1Y3QgUmVnZXhQYXR0ZXJuIHsKICAgICBSZWdleFBhdHRlcm4oYm9vbCBpZ25vcmVDYXNl
LCBib29sIG11bHRpbGluZSkKICAgICAgICAgOiBtX2lnbm9yZUNhc2UoaWdub3JlQ2FzZSkKICAg
ICAgICAgLCBtX211bHRpbGluZShtdWx0aWxpbmUpCisgICAgICAgICwgbV9jb250YWluc0JhY2ty
ZWZlcmVuY2VzKGZhbHNlKQorICAgICAgICAsIG1fY29udGFpbnNCT0woZmFsc2UpCiAgICAgICAg
ICwgbV9udW1TdWJwYXR0ZXJucygwKQogICAgICAgICAsIG1fbWF4QmFja1JlZmVyZW5jZSgwKQot
ICAgICAgICAsIG1fY29udGFpbnNCYWNrcmVmZXJlbmNlcyhmYWxzZSkKICAgICAgICAgLCBuZXds
aW5lQ2FjaGVkKDApCiAgICAgICAgICwgZGlnaXRzQ2FjaGVkKDApCiAgICAgICAgICwgc3BhY2Vz
Q2FjaGVkKDApCkBAIC0yOTQsNiArMzEzLDcgQEAgc3RydWN0IFJlZ2V4UGF0dGVybiB7CiAgICAg
ICAgIG1fbWF4QmFja1JlZmVyZW5jZSA9IDA7CiAKICAgICAgICAgbV9jb250YWluc0JhY2tyZWZl
cmVuY2VzID0gZmFsc2U7CisgICAgICAgIG1fY29udGFpbnNCT0wgPSBmYWxzZTsKIAogICAgICAg
ICBuZXdsaW5lQ2FjaGVkID0gMDsKICAgICAgICAgZGlnaXRzQ2FjaGVkID0gMDsKQEAgLTM1Nywx
MSArMzc3LDEyIEBAIHN0cnVjdCBSZWdleFBhdHRlcm4gewogICAgICAgICByZXR1cm4gbm9ud29y
ZGNoYXJDYWNoZWQ7CiAgICAgfQogCi0gICAgYm9vbCBtX2lnbm9yZUNhc2U7Ci0gICAgYm9vbCBt
X211bHRpbGluZTsKKyAgICBib29sIG1faWdub3JlQ2FzZSA6IDE7CisgICAgYm9vbCBtX211bHRp
bGluZSA6IDE7CisgICAgYm9vbCBtX2NvbnRhaW5zQmFja3JlZmVyZW5jZXMgOiAxOworICAgIGJv
b2wgbV9jb250YWluc0JPTCA6IDE7CiAgICAgdW5zaWduZWQgbV9udW1TdWJwYXR0ZXJuczsKICAg
ICB1bnNpZ25lZCBtX21heEJhY2tSZWZlcmVuY2U7Ci0gICAgYm9vbCBtX2NvbnRhaW5zQmFja3Jl
ZmVyZW5jZXM7CiAgICAgUGF0dGVybkRpc2p1bmN0aW9uKiBtX2JvZHk7CiAgICAgVmVjdG9yPFBh
dHRlcm5EaXNqdW5jdGlvbiosIDQ+IG1fZGlzanVuY3Rpb25zOwogICAgIFZlY3RvcjxDaGFyYWN0
ZXJDbGFzcyo+IG1fdXNlckNoYXJhY3RlckNsYXNzZXM7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NzY3
OSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1
IEBACisyMDEwLTA5LTE2ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG5ldyB0
ZXN0cyB0byBjaGVjayBmb3IgcHJvcGVyIGhhbmRsaW5nIG9mIF4gaW4gbXVsdGlsaW5lCisgICAg
ICAgIHJlZ3VsYXIgZXhwcmVzc2lvbnMuICBBZGRlZCBhcyBwYXJ0IG9mCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTc4NworCisgICAgICAgICogZmFz
dC9qcy9yZWdleHAtYm9sLXdpdGgtbXVsdGlsaW5lLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9qcy9yZWdleHAtYm9sLXdpdGgtbXVsdGlsaW5lLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvanMvc2NyaXB0LXRlc3RzL3JlZ2V4cC1ib2wtd2l0aC1tdWx0aWxpbmUuanM6
IEFkZGVkLgorCiAyMDEwLTA5LTE2ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
anMvcmVnZXhwLWJvbC13aXRoLW11bHRpbGluZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdleHAtYm9sLXdpdGgtbXVsdGlsaW5lLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVnZXhwLWJvbC13aXRoLW11
bHRpbGluZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQgQEAKK1Rlc3Qg
Zm9yIGJlZ2lubmluZyBvZiBsaW5lIChCT0wgb3IgXikgbWF0Y2hpbmcgaW4gYSBtdWx0aWxpbmUg
c3RyaW5nCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHMubWF0Y2goL15h
YmMvKSBpcyBudWxsCitQQVNTIHMubWF0Y2goL15hYmMvbSkgaXMgWyJhYmMiXQorUEFTUyBzLm1h
dGNoKC8oXnxYKWFiYy8pIGlzIG51bGwKK1BBU1Mgcy5tYXRjaCgvKF58WClhYmMvbSkgaXMgWyJh
YmMiLCIiXQorUEFTUyBzLm1hdGNoKC8oXmF8WGEpYmMvbSkgaXMgWyJhYmMiLCJhIl0KK1BBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2pzL3JlZ2V4cC1ib2wtd2l0aC1tdWx0aWxpbmUuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ2V4cC1ib2wtd2l0aC1tdWx0aWxpbmUuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVnZXhwLWJvbC13aXRoLW11bHRp
bGluZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQ
VUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiBocmVmPSJyZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlw
dCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8
c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3JlZ2V4cC1ib2wtd2l0aC1tdWx0aWxpbmUuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVz
dHMvcmVnZXhwLWJvbC13aXRoLW11bHRpbGluZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9yZWdleHAtYm9sLXdpdGgtbXVsdGlsaW5lLmpzCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvcmVnZXhwLWJvbC13
aXRoLW11bHRpbGluZS5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorZGVzY3JpcHRp
b24oCisnVGVzdCBmb3IgYmVnaW5uaW5nIG9mIGxpbmUgKEJPTCBvciBeKSBtYXRjaGluZyBpbiBh
IG11bHRpbGluZSBzdHJpbmc8L2E+JworKTsKKwordmFyIHMgPSAiYWNlZFxuYWJjIjsKK3Nob3Vs
ZEJlTnVsbCgncy5tYXRjaCgvXmFiYy8pJyk7CitzaG91bGRCZSgncy5tYXRjaCgvXmFiYy9tKScs
ICdbImFiYyJdJyk7CitzaG91bGRCZU51bGwoJ3MubWF0Y2goLyhefFgpYWJjLyknKTsKK3Nob3Vs
ZEJlKCdzLm1hdGNoKC8oXnxYKWFiYy9tKScsICdbImFiYyIsIiJdJyk7CitzaG91bGRCZSgncy5t
YXRjaCgvKF5hfFhhKWJjL20pJywgJ1siYWJjIiwiYSJdJyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQ
YXJzZWQgPSB0cnVlOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>