<?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>118609</bug_id>
          
          <creation_ts>2013-07-12 10:40:22 -0700</creation_ts>
          <short_desc>Web Inspector: Replace binarySearch with lowerBound and upperBound functions</short_desc>
          <delta_ts>2014-02-21 16:05:36 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</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>BlinkMergeCandidate, InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Timothy Hatcher">timothy</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>joepeck</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>907998</commentid>
    <comment_count>0</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-07-12 10:40:22 -0700</bug_when>
    <thetext>This allows to avoid index-mapping-to-negative-axis-trick in binarySearch and its usages.
It also makes insertionIndexForObjectInListSortedByFunction to work in O(log(n)) time instead of O(n).

https://chromium.googlesource.com/chromium/blink/+/9541aa09240296b72409baf107c38c5efe7004be%5E%21/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907999</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-07-12 10:40:40 -0700</bug_when>
    <thetext>&lt;rdar://problem/14428765&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983136</commentid>
    <comment_count>2</comment_count>
      <attachid>224837</attachid>
    <who name="Chi Wai Lau">clau</who>
    <bug_when>2014-02-21 00:20:02 -0800</bug_when>
    <thetext>Created attachment 224837
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983233</commentid>
    <comment_count>3</comment_count>
      <attachid>224837</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-02-21 09:30:22 -0800</bug_when>
    <thetext>Comment on attachment 224837
patch

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

Thanks for fixing this! Can you upload a new patch with these tweaks?

&gt; Source/WebInspectorUI/ChangeLog:5
&gt; +        Web Inspector: Replace binarySearch with lowerBound and upperBound functions
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=118609
&gt; +

Can you add the reasoning bellow the title? &quot;This makes insertionIndexForObjectInListSortedByFunction work in O(log(n)) time instead of O(n).&quot;

&gt; Source/WebInspectorUI/ChangeLog:13
&gt; +        (.):
&gt; +        (.value):
&gt; +        (object):

Our script gets confused by Object.defineProperty. Can you manually fix this?

&gt; Source/WebInspectorUI/UserInterface/Utilities.js:939
&gt; +
&gt; +

Double new line.

&gt; Source/WebInspectorUI/UserInterface/Utilities.js:946
&gt; +    /**
&gt; +     * Return index of the leftmost element that is equal or greater
&gt; +     * than the specimen object. If there&apos;s no such element (i.e. all
&gt; +     * elements are smaller than the specimen) returns array.length.
&gt; +     * The function works for sorted array.

Lets just use // for these comments.

&gt; Source/WebInspectorUI/UserInterface/Utilities.js:951
&gt; +     *
&gt; +     * @this {Array.&lt;*&gt;}
&gt; +     * @param {*} object
&gt; +     * @param {function(*,*):number=} comparator
&gt; +     * @return {number}

We don&apos;t use these JSDoc comments. We intend to remove them from our existing code. Lets not add more.

&gt; Source/WebInspectorUI/UserInterface/Utilities.js:979
&gt; +    /**
&gt; +     * Return index of the leftmost element that is greater
&gt; +     * than the specimen object. If there&apos;s no such element (i.e. all
&gt; +     * elements are smaller than the specimen) returns array.length.
&gt; +     * The function works for sorted array.

Ditto.

&gt; Source/WebInspectorUI/UserInterface/Utilities.js:984
&gt; +     *
&gt; +     * @this {Array.&lt;*&gt;}
&gt; +     * @param {*} object
&gt; +     * @param {function(*,*):number=} comparator
&gt; +     * @return {number}

Ditto.

&gt; Source/WebInspectorUI/UserInterface/Utilities.js:991
&gt; +        function defaultComparator(a, b)
&gt; +        {
&gt; +            return a - b;
&gt; +        }

Lets move this function out next to insertObjectIntoSortedArray, since it can be shared.

&gt; Source/WebInspectorUI/UserInterface/Utilities.js:1013
&gt; +    /**
&gt; +     * @this {Array.&lt;*&gt;}
&gt; +     * @param {*} value
&gt; +     * @param {function(*,*):number} comparator
&gt; +     * @return {number}
&gt; +     */

Ditto.

&gt; Source/WebInspectorUI/UserInterface/Utilities.js:1027
&gt; +/**
&gt; + * @param {*} object
&gt; + * @param {Array.&lt;*&gt;} list
&gt; + * @param {function(*,*):number=} comparator
&gt; + * @param {boolean=} insertionIndexAfter
&gt; + * @return {number}
&gt; + */

Ditto.

&gt; Source/WebInspectorUI/UserInterface/Utilities.js:1041
&gt; +/**
&gt; + * @param {*} object
&gt; + * @param {Array.&lt;*&gt;} array
&gt; + * @param {function(*,*):number=} comparator
&gt; + */

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983362</commentid>
    <comment_count>4</comment_count>
      <attachid>224909</attachid>
    <who name="Chi Wai Lau">clau</who>
    <bug_when>2014-02-21 14:27:40 -0800</bug_when>
    <thetext>Created attachment 224909
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983380</commentid>
    <comment_count>5</comment_count>
      <attachid>224909</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-02-21 15:02:35 -0800</bug_when>
    <thetext>Comment on attachment 224909
patch

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

&gt; LayoutTests/ChangeLog:9
&gt; +        * inspector/utilities-expected.txt:
&gt; +        * inspector/utilities.html:

These tests are not run anymore and are being removed in bug 129168.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983424</commentid>
    <comment_count>6</comment_count>
      <attachid>224909</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-21 16:05:33 -0800</bug_when>
    <thetext>Comment on attachment 224909
patch

Clearing flags on attachment: 224909

Committed r164512: &lt;http://trac.webkit.org/changeset/164512&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983425</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-21 16:05:36 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224837</attachid>
            <date>2014-02-21 00:20:02 -0800</date>
            <delta_ts>2014-02-21 14:27:38 -0800</delta_ts>
            <desc>patch</desc>
            <filename>bug-118609-20140221002000.patch</filename>
            <type>text/plain</type>
            <size>15663</size>
            <attacher name="Chi Wai Lau">clau</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY0NDM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCBh
MmMxOTZmODRjMDAwYTljNGMzZmFmZDg1ODc4YmU4NWYxZGFkOWEzLi41NGNkODNhZGE3ZTNlYzAy
NzE5YmM1Y2Q4NGU2NjRmOTc5MDk5MjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOSBAQAorMjAxNC0wMi0yMSAgQ2hpIFdhaSBMYXUgIDxjbGF1QGhpbWl0LnN1PgorCisg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IFJlcGxhY2UgYmluYXJ5U2VhcmNoIHdpdGggbG93ZXJCb3Vu
ZCBhbmQgdXBwZXJCb3VuZCBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExODYwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9CaW5hcnlTZWFyY2guanM6IFJlbW92
ZWQuCisgICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CisgICAgICAgICogVXNlcklu
dGVyZmFjZS9VdGlsaXRpZXMuanM6CisgICAgICAgICguKToKKyAgICAgICAgKC52YWx1ZSk6Cisg
ICAgICAgIChvYmplY3QpOgorICAgICAgICAqIFdlYkluc3BlY3RvclVJLnZjeHByb2ovV2ViSW5z
cGVjdG9yVUkudmN4cHJvajoKKyAgICAgICAgKiBXZWJJbnNwZWN0b3JVSS52Y3hwcm9qL1dlYklu
c3BlY3RvclVJLnZjeHByb2ouZmlsdGVyczoKKwogMjAxNC0wMi0yMCAgQW50b2luZSBRdWludCAg
PGdyYW91dHNAd2Via2l0Lm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBjcmVhdGUgYSBD
b2RlTWlycm9yRWRpdGluZ0NvbnRyb2xsZXIgc3VwZXJjbGFzcwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmluYXJ5U2VhcmNoLmpzIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmluYXJ5U2VhcmNoLmpzCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjNjUyZDZlZjgzZGNiMzE4NzJjYzI3ZGU1OTc5ZDgzMmJmMmU2NmE5
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0JpbmFyeVNlYXJjaC5qcworKysgL2Rldi9udWxs
CkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAcGFyYW0geyp9IG9iamVjdAotICogQHBhcmFt
IHtBcnJheS48Kj59IGFycmF5Ci0gKiBAcGFyYW0ge2Z1bmN0aW9uKCosICopfSBjb21wYXJhdG9y
Ci0gKi8KLWZ1bmN0aW9uIGJpbmFyeVNlYXJjaChvYmplY3QsIGFycmF5LCBjb21wYXJhdG9yKQot
ewotICAgIHZhciBmaXJzdCA9IDA7Ci0gICAgdmFyIGxhc3QgPSBhcnJheS5sZW5ndGggLSAxOwot
Ci0gICAgd2hpbGUgKGZpcnN0IDw9IGxhc3QpIHsKLSAgICAgICAgdmFyIG1pZCA9IChmaXJzdCAr
IGxhc3QpID4+IDE7Ci0gICAgICAgIHZhciBjID0gY29tcGFyYXRvcihvYmplY3QsIGFycmF5W21p
ZF0pOwotICAgICAgICBpZiAoYyA+IDApCi0gICAgICAgICAgICBmaXJzdCA9IG1pZCArIDE7Ci0g
ICAgICAgIGVsc2UgaWYgKGMgPCAwKQotICAgICAgICAgICAgbGFzdCA9IG1pZCAtIDE7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBtaWQ7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJu
IHRoZSBuZWFyZXN0IGxlc3NlciBpbmRleCwgIi0xIiBtZWFucyAiMCwgIi0yIiBtZWFucyAiMSIs
IGV0Yy4KLSAgICByZXR1cm4gLShmaXJzdCArIDEpOwotfQotCi1PYmplY3QuZGVmaW5lUHJvcGVy
dHkoQXJyYXkucHJvdG90eXBlLCAiYmluYXJ5SW5kZXhPZiIsIHsgdmFsdWU6IGZ1bmN0aW9uKHZh
bHVlLCBjb21wYXJhdG9yKQotewotICAgIHZhciByZXN1bHQgPSBiaW5hcnlTZWFyY2godmFsdWUs
IHRoaXMsIGNvbXBhcmF0b3IpOwotICAgIHJldHVybiByZXN1bHQgPj0gMCA/IHJlc3VsdCA6IC0x
OwotfX0pOwotCi0vKioKLSAqIEBwYXJhbSB7Kn0gYW5PYmplY3QKLSAqIEBwYXJhbSB7QXJyYXku
PCo+fSBhTGlzdAotICogQHBhcmFtIHtmdW5jdGlvbigqLCAqKX0gYUZ1bmN0aW9uCi0gKi8KLWZ1
bmN0aW9uIGluc2VydGlvbkluZGV4Rm9yT2JqZWN0SW5MaXN0U29ydGVkQnlGdW5jdGlvbihhbk9i
amVjdCwgYUxpc3QsIGFGdW5jdGlvbikKLXsKLSAgICB2YXIgaW5kZXggPSBiaW5hcnlTZWFyY2go
YW5PYmplY3QsIGFMaXN0LCBhRnVuY3Rpb24pOwotICAgIGlmIChpbmRleCA8IDApCi0gICAgICAg
IC8vIFNlZSBiaW5hcnlTZWFyY2ggaW1wbGVtZW50YXRpb24uCi0gICAgICAgIHJldHVybiAtaW5k
ZXggLSAxOwotICAgIGVsc2UgewotICAgICAgICAvLyBSZXR1cm4gdGhlIGZpcnN0IG9jY3VyYW5j
ZSBvZiBhbiBpdGVtIGluIHRoZSBsaXN0LgotICAgICAgICB3aGlsZSAoaW5kZXggPiAwICYmIGFG
dW5jdGlvbihhbk9iamVjdCwgYUxpc3RbaW5kZXggLSAxXSkgPT09IDApCi0gICAgICAgICAgICBp
bmRleC0tOwotICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgfQotfQotCi1mdW5jdGlvbiBpbnNl
cnRPYmplY3RJbnRvU29ydGVkQXJyYXkodmFsdWUsIGFycmF5LCBjb21wYXJlRnVuY3Rpb24pCi17
Ci0gICBhcnJheS5zcGxpY2UoaW5zZXJ0aW9uSW5kZXhGb3JPYmplY3RJbkxpc3RTb3J0ZWRCeUZ1
bmN0aW9uKHZhbHVlLCBhcnJheSwgY29tcGFyZUZ1bmN0aW9uKSwgMCwgdmFsdWUpOwotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCmluZGV4IDMwZDNm
NDI5Mjc0ZTQxZWMzNTEyMGQ0NDgxNzhhNjM2YzQwNzY3OTIuLjY1NGRmOGY4MzRmYjk2NDMwNTE1
MWI4MDQ1NjM5ZTA1NTA4OTliYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL01haW4uaHRtbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9NYWluLmh0bWwKQEAgLTIxNCw3ICsyMTQsNiBAQAogICAgIDxzY3JpcHQgc3JjPSJT
b3VyY2VDb2RlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iUmVzb3VyY2UuanMiPjwv
c2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJSZXNvdXJjZUNvbGxlY3Rpb24uanMiPjwvc2NyaXB0
PgotICAgIDxzY3JpcHQgc3JjPSJCaW5hcnlTZWFyY2guanMiPjwvc2NyaXB0PgogICAgIDxzY3Jp
cHQgc3JjPSJFZGl0aW5nU3VwcG9ydC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Iktl
eWJvYXJkU2hvcnRjdXQuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJOYXZpZ2F0aW9u
QmFyLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1V0aWxpdGllcy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1V0aWxpdGllcy5qcwppbmRleCA0YTE5ZDIzMTE5NDljYjk2MmFlYjFmODE0MWY4NGFiMzFl
Nzg0MDMyLi5iOWFkYTdkMzcyODUwMDI4ZTdkMTM5ZWM0NjUxMTdlODRkNTg4ZWJiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9VdGlsaXRpZXMuanMKKysr
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVXRpbGl0aWVzLmpzCkBAIC00
MjYsMjUgKzQyNiw2IEBAIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICJr
ZXlTZXQiLAogICAgIH0KIH0pOwogCi1PYmplY3QuZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90
eXBlLCAidXBwZXJCb3VuZCIsCi17Ci0gICAgdmFsdWU6IGZ1bmN0aW9uKHZhbHVlKQotICAgIHsK
LSAgICAgICAgdmFyIGZpcnN0ID0gMDsKLSAgICAgICAgdmFyIGNvdW50ID0gdGhpcy5sZW5ndGg7
Ci0gICAgICAgIHdoaWxlIChjb3VudCA+IDApIHsKLSAgICAgICAgICB2YXIgc3RlcCA9IGNvdW50
ID4+IDE7Ci0gICAgICAgICAgdmFyIG1pZGRsZSA9IGZpcnN0ICsgc3RlcDsKLSAgICAgICAgICBp
ZiAodmFsdWUgPj0gdGhpc1ttaWRkbGVdKSB7Ci0gICAgICAgICAgICAgIGZpcnN0ID0gbWlkZGxl
ICsgMTsKLSAgICAgICAgICAgICAgY291bnQgLT0gc3RlcCArIDE7Ci0gICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgIGNvdW50ID0gc3RlcDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
Zmlyc3Q7Ci0gICAgfQotfSk7Ci0KIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdHJpbmcucHJvdG90
eXBlLCAidHJpbU1pZGRsZSIsCiB7CiAgICAgdmFsdWU6IGZ1bmN0aW9uKG1heExlbmd0aCkKQEAg
LTk1NCwzICs5MzUsMTExIEBAIGZ1bmN0aW9uIHNpbXBsZUdsb2JTdHJpbmdUb1JlZ0V4cChnbG9i
U3RyaW5nLCByZWdFeHBGbGFncykKIAogICAgIHJldHVybiBuZXcgUmVnRXhwKHJlZ2V4U3RyaW5n
LCByZWdFeHBGbGFncyk7CiB9CisKKworT2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3Rv
dHlwZSwgImxvd2VyQm91bmQiLAoreworICAgIC8qKgorICAgICAqIFJldHVybiBpbmRleCBvZiB0
aGUgbGVmdG1vc3QgZWxlbWVudCB0aGF0IGlzIGVxdWFsIG9yIGdyZWF0ZXIKKyAgICAgKiB0aGFu
IHRoZSBzcGVjaW1lbiBvYmplY3QuIElmIHRoZXJlJ3Mgbm8gc3VjaCBlbGVtZW50IChpLmUuIGFs
bAorICAgICAqIGVsZW1lbnRzIGFyZSBzbWFsbGVyIHRoYW4gdGhlIHNwZWNpbWVuKSByZXR1cm5z
IGFycmF5Lmxlbmd0aC4KKyAgICAgKiBUaGUgZnVuY3Rpb24gd29ya3MgZm9yIHNvcnRlZCBhcnJh
eS4KKyAgICAgKgorICAgICAqIEB0aGlzIHtBcnJheS48Kj59CisgICAgICogQHBhcmFtIHsqfSBv
YmplY3QKKyAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCosKik6bnVtYmVyPX0gY29tcGFyYXRvcgor
ICAgICAqIEByZXR1cm4ge251bWJlcn0KKyAgICAgKi8KKyAgICB2YWx1ZTogZnVuY3Rpb24ob2Jq
ZWN0LCBjb21wYXJhdG9yKQorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gZGVmYXVsdENvbXBhcmF0
b3IoYSwgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgLSBiOworICAgICAgICB9
CisgICAgICAgIGNvbXBhcmF0b3IgPSBjb21wYXJhdG9yIHx8IGRlZmF1bHRDb21wYXJhdG9yOwor
ICAgICAgICB2YXIgbCA9IDA7CisgICAgICAgIHZhciByID0gdGhpcy5sZW5ndGg7CisgICAgICAg
IHdoaWxlIChsIDwgcikgeworICAgICAgICAgICAgdmFyIG0gPSAobCArIHIpID4+IDE7CisgICAg
ICAgICAgICBpZiAoY29tcGFyYXRvcihvYmplY3QsIHRoaXNbbV0pID4gMCkKKyAgICAgICAgICAg
ICAgICBsID0gbSArIDE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgciA9IG07
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHI7CisgICAgfQorfSk7CisKK09iamVjdC5kZWZp
bmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICJ1cHBlckJvdW5kIiwKK3sKKyAgICAvKioKKyAg
ICAgKiBSZXR1cm4gaW5kZXggb2YgdGhlIGxlZnRtb3N0IGVsZW1lbnQgdGhhdCBpcyBncmVhdGVy
CisgICAgICogdGhhbiB0aGUgc3BlY2ltZW4gb2JqZWN0LiBJZiB0aGVyZSdzIG5vIHN1Y2ggZWxl
bWVudCAoaS5lLiBhbGwKKyAgICAgKiBlbGVtZW50cyBhcmUgc21hbGxlciB0aGFuIHRoZSBzcGVj
aW1lbikgcmV0dXJucyBhcnJheS5sZW5ndGguCisgICAgICogVGhlIGZ1bmN0aW9uIHdvcmtzIGZv
ciBzb3J0ZWQgYXJyYXkuCisgICAgICoKKyAgICAgKiBAdGhpcyB7QXJyYXkuPCo+fQorICAgICAq
IEBwYXJhbSB7Kn0gb2JqZWN0CisgICAgICogQHBhcmFtIHtmdW5jdGlvbigqLCopOm51bWJlcj19
IGNvbXBhcmF0b3IKKyAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CisgICAgICovCisgICAgdmFsdWU6
IGZ1bmN0aW9uKG9iamVjdCwgY29tcGFyYXRvcikKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGRl
ZmF1bHRDb21wYXJhdG9yKGEsIGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhIC0g
YjsKKyAgICAgICAgfQorICAgICAgICBjb21wYXJhdG9yID0gY29tcGFyYXRvciB8fCBkZWZhdWx0
Q29tcGFyYXRvcjsKKyAgICAgICAgdmFyIGwgPSAwOworICAgICAgICB2YXIgciA9IHRoaXMubGVu
Z3RoOworICAgICAgICB3aGlsZSAobCA8IHIpIHsKKyAgICAgICAgICAgIHZhciBtID0gKGwgKyBy
KSA+PiAxOworICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3Iob2JqZWN0LCB0aGlzW21dKSA+PSAw
KQorICAgICAgICAgICAgICAgIGwgPSBtICsgMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICByID0gbTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcjsKKyAgICB9Cit9KTsK
KworT2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSwgImJpbmFyeUluZGV4T2Yi
LAoreworICAgIC8qKgorICAgICAqIEB0aGlzIHtBcnJheS48Kj59CisgICAgICogQHBhcmFtIHsq
fSB2YWx1ZQorICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwqKTpudW1iZXJ9IGNvbXBhcmF0b3IK
KyAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CisgICAgICovCisgICAgdmFsdWU6IGZ1bmN0aW9uKHZh
bHVlLCBjb21wYXJhdG9yKQorICAgIHsKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5sb3dlckJv
dW5kKHZhbHVlLCBjb21wYXJhdG9yKTsKKyAgICAgICAgcmV0dXJuIGluZGV4IDwgdGhpcy5sZW5n
dGggJiYgY29tcGFyYXRvcih2YWx1ZSwgdGhpc1tpbmRleF0pID09PSAwID8gaW5kZXggOiAtMTsK
KyAgICB9Cit9KTsKKworLyoqCisgKiBAcGFyYW0geyp9IG9iamVjdAorICogQHBhcmFtIHtBcnJh
eS48Kj59IGxpc3QKKyAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwqKTpudW1iZXI9fSBjb21wYXJhdG9y
CisgKiBAcGFyYW0ge2Jvb2xlYW49fSBpbnNlcnRpb25JbmRleEFmdGVyCisgKiBAcmV0dXJuIHtu
dW1iZXJ9CisgKi8KK2Z1bmN0aW9uIGluc2VydGlvbkluZGV4Rm9yT2JqZWN0SW5MaXN0U29ydGVk
QnlGdW5jdGlvbihvYmplY3QsIGxpc3QsIGNvbXBhcmF0b3IsIGluc2VydGlvbkluZGV4QWZ0ZXIp
Cit7CisgICAgaWYgKGluc2VydGlvbkluZGV4QWZ0ZXIpIHsKKyAgICAgICAgcmV0dXJuIGxpc3Qu
dXBwZXJCb3VuZChvYmplY3QsIGNvbXBhcmF0b3IpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJl
dHVybiBsaXN0Lmxvd2VyQm91bmQob2JqZWN0LCBjb21wYXJhdG9yKTsKKyAgICB9Cit9CisKKy8q
KgorICogQHBhcmFtIHsqfSBvYmplY3QKKyAqIEBwYXJhbSB7QXJyYXkuPCo+fSBhcnJheQorICog
QHBhcmFtIHtmdW5jdGlvbigqLCopOm51bWJlcj19IGNvbXBhcmF0b3IKKyAqLworZnVuY3Rpb24g
aW5zZXJ0T2JqZWN0SW50b1NvcnRlZEFycmF5KG9iamVjdCwgYXJyYXksIGNvbXBhcmF0b3IpCit7
CisgICAgYXJyYXkuc3BsaWNlKGluc2VydGlvbkluZGV4Rm9yT2JqZWN0SW5MaXN0U29ydGVkQnlG
dW5jdGlvbihvYmplY3QsIGFycmF5LCBjb21wYXJhdG9yKSwgMCwgb2JqZWN0KTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9XZWJJbnNwZWN0b3JVSS52Y3hwcm9qL1dlYklu
c3BlY3RvclVJLnZjeHByb2ogYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvV2ViSW5zcGVjdG9yVUku
dmN4cHJvai9XZWJJbnNwZWN0b3JVSS52Y3hwcm9qCmluZGV4IDQzZDZmMjQ1MzkwNzIwN2Q4OTI0
YjRjN2I2NWNkZmZmMzg3ZDEzOWMuLjE5OTg1NGI3MWU2OWQ5NGE4NWU1MTMwZmVkMjYwYzk4ODM3
MWFkNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9XZWJJbnNwZWN0b3JVSS52
Y3hwcm9qL1dlYkluc3BlY3RvclVJLnZjeHByb2oKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1dlYkluc3BlY3RvclVJLnZjeHByb2ovV2ViSW5zcGVjdG9yVUkudmN4cHJvagpAQCAtMjM2LDcg
KzIzNiw2IEBACiAgICAgPE5vbmUgSW5jbHVkZT0iLi5cVXNlckludGVyZmFjZVxBcHBsaWNhdGlv
bkNhY2hlTWFuaWZlc3QuanMiIC8+CiAgICAgPE5vbmUgSW5jbHVkZT0iLi5cVXNlckludGVyZmFj
ZVxBcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RUcmVlRWxlbWVudC5qcyIgLz4KICAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxVc2VySW50ZXJmYWNlXEFwcGxpY2F0aW9uQ2FjaGVPYnNlcnZlci5qcyIgLz4K
LSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxVc2VySW50ZXJmYWNlXEJpbmFyeVNlYXJjaC5qcyIgLz4K
ICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxVc2VySW50ZXJmYWNlXEJsYW5rU3R5bGVQcm9wZXJ0aWVz
U2VjdGlvbi5qcyIgLz4KICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxVc2VySW50ZXJmYWNlXEJvdHRv
bVVwUHJvZmlsZURhdGFHcmlkVHJlZS5qcyIgLz4KICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxVc2Vy
SW50ZXJmYWNlXEJveE1vZGVsRGV0YWlsc1NlY3Rpb25Sb3cuY3NzIiAvPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkluc3BlY3RvclVJL1dlYkluc3BlY3RvclVJLnZjeHByb2ovV2ViSW5zcGVjdG9y
VUkudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1dlYkluc3BlY3RvclVJ
LnZjeHByb2ovV2ViSW5zcGVjdG9yVUkudmN4cHJvai5maWx0ZXJzCmluZGV4IGI1MGE2MGNlMDYw
YWRjZmQ5YjA1ZDExNTE4NTJlN2Y2MzMwODgxNmEuLjkxN2Q2NzE4ZGI5YjJmN2RiNDM4YTY1YTNj
Njg1YWE2ODBmMzA1ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9XZWJJbnNw
ZWN0b3JVSS52Y3hwcm9qL1dlYkluc3BlY3RvclVJLnZjeHByb2ouZmlsdGVycworKysgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvV2ViSW5zcGVjdG9yVUkudmN4cHJvai9XZWJJbnNwZWN0b3JVSS52
Y3hwcm9qLmZpbHRlcnMKQEAgLTY5LDkgKzY5LDYgQEAKICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxV
c2VySW50ZXJmYWNlXEFwcGxpY2F0aW9uQ2FjaGVPYnNlcnZlci5qcyI+CiAgICAgICA8RmlsdGVy
PlVzZXJJbnRlcmZhY2U8L0ZpbHRlcj4KICAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5cVXNlckludGVyZmFjZVxCaW5hcnlTZWFyY2guanMiPgotICAgICAgPEZpbHRlcj5Vc2VySW50
ZXJmYWNlPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgogICAgIDxOb25lIEluY2x1ZGU9Ii4uXFVzZXJJ
bnRlcmZhY2VcQmxhbmtTdHlsZVByb3BlcnRpZXNTZWN0aW9uLmpzIj4KICAgICAgIDxGaWx0ZXI+
VXNlckludGVyZmFjZTwvRmlsdGVyPgogICAgIDwvTm9uZT4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3YjY3ZWFlZjYxMzlm
Y2FlNmQzZmM4MWZlYzdiNzU4ZDNkZDBlYjIyLi5jNjM5MDA3NTU4MmRlZjg5YzEzOWJjNmQ4YTgw
MjE5NWNhYzE3MGY2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTQtMDItMjEgIENoaSBXYWkg
TGF1ICA8Y2xhdUBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogUmVwbGFjZSBi
aW5hcnlTZWFyY2ggd2l0aCBsb3dlckJvdW5kIGFuZCB1cHBlckJvdW5kIGZ1bmN0aW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NjA5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
dXRpbGl0aWVzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvdXRpbGl0aWVzLmh0
bWw6CisKIDIwMTQtMDItMjAgIE1pY2hhxYIgUGFrdcWCYSB2ZWwgUnV0a2EgIDxtLnBha3VsYUBz
YW1zdW5nLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIEVGTCBnYXJkZW5pbmcKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci91dGlsaXRpZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL3V0aWxpdGllcy1leHBlY3RlZC50eHQKaW5kZXggNDVmMjZiOTM3YzVk
OTEwMzM5OTM0NjU3Njg4ZTRhOWZmOGU0MDZhYS4uM2I2NjRkOGYwMWM1MTkxMTdjYzM4N2I4MzAx
NmRlMTU1ODM3MzE4ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3V0aWxpdGll
cy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3V0aWxpdGllcy1leHBl
Y3RlZC50eHQKQEAgLTMsNiArMywxMSBAQCBUaGlzIHRlc3QgY2hlY2tzIFdlYiBJbnNwZWN0b3Ig
dXRpbGl0aWVzLgogCiBSdW5uaW5nOiBiaW5hcnlJbmRleE9mVGVzdAogCitSdW5uaW5nOiBsb3dl
ckJvdW5kVGVzdAorCitSdW5uaW5nOiB1cHBlckJvdW5kVGVzdAorCisKIFJ1bm5pbmc6IHFzZWxl
Y3RUZXN0CiBBcnJheTogW10KIFJlZmVyZW5jZToge30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2luc3BlY3Rvci91dGlsaXRpZXMuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci91dGlsaXRp
ZXMuaHRtbAppbmRleCAwMTNlYjBkM2MyNWU3MTQ1MDdjOWY1N2U4NjQyN2M1MWQ4NjNlN2I4Li45
NDcxZDU1MDNiYzljMGFlOTcxYmY4OWRlMWNkYTQ2OGU4YTgzOGM3IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvdXRpbGl0aWVzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL3V0aWxpdGllcy5odG1sCkBAIC0zNiw2ICszNiw2OCBAQCBmdW5jdGlvbiB0ZXN0KCkKICAg
ICAgICAgICAgICAgICB0ZXN0QXJyYXkodGVzdEFycmF5c1tpXSk7CiAgICAgICAgICAgICBuZXh0
KCk7CiAgICAgICAgIH0sCisgICAgICAgIAorICAgICAgICBmdW5jdGlvbiBsb3dlckJvdW5kVGVz
dChuZXh0KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgdGVzdEFycmF5cyA9IFsKKyAgICAg
ICAgICAgICAgICBbXSwKKyAgICAgICAgICAgICAgICBbMV0sCisgICAgICAgICAgICAgICAgWy0x
LCAtMSwgMCwgMCwgMCwgMCwgMiwgMywgNCwgNCwgNCwgNywgOSwgOSwgOV0KKyAgICAgICAgICAg
IF07CisgICAgICAgIAorICAgICAgICAgICAgZnVuY3Rpb24gdGVzdEFycmF5KGFycmF5LCB1c2VD
b21wYXJhdG9yKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBh
cmF0b3IoYSwgYikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBhIDwgYiA/IC0xIDogKGEgPiBiID8gMSA6IDApOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgICAgICAgICAgZm9yICh2YXIgdmFsdWUgPSAtMjsgdmFsdWUgPD0gMTI7ICsr
dmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gdXNlQ29tcGFyYXRvciA/
IGFycmF5Lmxvd2VyQm91bmQodmFsdWUsIGNvbXBhcmF0b3IpIDogYXJyYXkubG93ZXJCb3VuZCh2
YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0VHJ1ZSgwIDw9
IGluZGV4ICYmIGluZGV4IDw9IGFycmF5Lmxlbmd0aCwgImluZGV4IGlzIHdpdGhpbiBib3VuZHMi
KTsKKyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRUcnVlKGluZGV4ID09
PSAwIHx8IGFycmF5W2luZGV4IC0gMV0gPCB2YWx1ZSwgImFycmF5W2luZGV4IC0gMV0gPCB2YWx1
ZSIpOworICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydFRydWUoaW5kZXgg
PT09IGFycmF5Lmxlbmd0aCB8fCBhcnJheVtpbmRleF0gPj0gdmFsdWUsICJhcnJheVtpbmRleF0g
Pj0gdmFsdWUiKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGVz
dEFycmF5cy5sZW5ndGg7IGkgPCBsOyArK2kpIHsKKyAgICAgICAgICAgICAgICB0ZXN0QXJyYXko
dGVzdEFycmF5c1tpXSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHRlc3RBcnJheSh0ZXN0QXJy
YXlzW2ldLCB0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5leHQoKTsKKyAgICAg
ICAgfSwKKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9uIHVwcGVyQm91bmRUZXN0KG5leHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHZhciB0ZXN0QXJyYXlzID0gWworICAgICAgICAgICAgICAg
IFtdLAorICAgICAgICAgICAgICAgIFsxXSwKKyAgICAgICAgICAgICAgICBbLTEsIC0xLCAwLCAw
LCAwLCAwLCAyLCAzLCA0LCA0LCA0LCA3LCA5LCA5LCA5XQorICAgICAgICAgICAgXTsKKyAgICAg
ICAgCisgICAgICAgICAgICBmdW5jdGlvbiB0ZXN0QXJyYXkoYXJyYXksIHVzZUNvbXBhcmF0b3Ip
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZnVuY3Rpb24gY29tcGFyYXRvcihhLCBi
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8g
LTEgOiAoYSA+IGIgPyAxIDogMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgICAgICAgICBmb3IgKHZhciB2YWx1ZSA9IC0yOyB2YWx1ZSA8PSAxMjsgKyt2YWx1ZSkgewor
ICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB1c2VDb21wYXJhdG9yID8gYXJyYXkudXBw
ZXJCb3VuZCh2YWx1ZSwgY29tcGFyYXRvcikgOiBhcnJheS51cHBlckJvdW5kKHZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRUcnVlKDAgPD0gaW5kZXggJiYg
aW5kZXggPD0gYXJyYXkubGVuZ3RoLCAiaW5kZXggaXMgd2l0aGluIGJvdW5kcyIpOworICAgICAg
ICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydFRydWUoaW5kZXggPT09IDAgfHwgYXJy
YXlbaW5kZXggLSAxXSA8PSB2YWx1ZSwgImFycmF5W2luZGV4IC0gMV0gPD0gdmFsdWUiKTsKKyAg
ICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRUcnVlKGluZGV4ID09PSBhcnJh
eS5sZW5ndGggfHwgYXJyYXlbaW5kZXhdID4gdmFsdWUsICJhcnJheVtpbmRleF0gPiB2YWx1ZSIp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAg
ICBmb3IgKHZhciBpID0gMCwgbCA9IHRlc3RBcnJheXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgdGVzdEFycmF5KHRlc3RBcnJheXNbaV0sIGZhbHNlKTsKKyAgICAgICAg
ICAgICAgICB0ZXN0QXJyYXkodGVzdEFycmF5c1tpXSwgdHJ1ZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBuZXh0KCk7CisgICAgICAgIH0sCisgICAgICAgIAogCiAgICAgICAgIGZ1bmN0
aW9uIHFzZWxlY3RUZXN0KG5leHQpCiAgICAgICAgIHsKQEAgLTYwLDEzICsxMjIsMTMgQEAgZnVu
Y3Rpb24gdGVzdCgpCiAgICAgICAgICAgICAgICAgICAgIG1pbjogc29ydGVkWzBdLAogICAgICAg
ICAgICAgICAgICAgICBtZWRpYW46IHNvcnRlZFtNYXRoLmZsb29yKHNvcnRlZC5sZW5ndGggLyAy
KV0sCiAgICAgICAgICAgICAgICAgICAgIG1heDogc29ydGVkW3NvcnRlZC5sZW5ndGggLSAxXQot
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAgICAg
dmFyIGFjdHVhbCA9IHsKICAgICAgICAgICAgICAgICAgICAgbWluOiBhcnJheS5zbGljZSgwKS5x
c2VsZWN0KDApLAogICAgICAgICAgICAgICAgICAgICBtZWRpYW46IGFycmF5LnNsaWNlKDApLnFz
ZWxlY3QoTWF0aC5mbG9vcihhcnJheS5sZW5ndGggLyAyKSksCiAgICAgICAgICAgICAgICAgICAg
IG1heDogYXJyYXkuc2xpY2UoMCkucXNlbGVjdChhcnJheS5sZW5ndGggLSAxKQotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgIEluc3BlY3RvclRl
c3QuYWRkUmVzdWx0KCJBcnJheTogIiArIEpTT04uc3RyaW5naWZ5KGFycmF5KSk7CiAgICAgICAg
ICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlJlZmVyZW5jZTogIiArIEpTT04uc3Ry
aW5naWZ5KHJlZmVyZW5jZSkpOwogICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVz
dWx0KCJBY3R1YWw6ICAgICIgKyBKU09OLnN0cmluZ2lmeShhY3R1YWwpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224909</attachid>
            <date>2014-02-21 14:27:40 -0800</date>
            <delta_ts>2014-02-21 16:05:33 -0800</delta_ts>
            <desc>patch</desc>
            <filename>bug-118609-20140221142739.patch</filename>
            <type>text/plain</type>
            <size>14994</size>
            <attacher name="Chi Wai Lau">clau</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY0NDM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCBh
MmMxOTZmODRjMDAwYTljNGMzZmFmZDg1ODc4YmU4NWYxZGFkOWEzLi5iNzJlNTg5NWMyYjgyZmJl
YjhjMzk3NTNkZTA4YjJkZmIwNjIwYzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOCBAQAorMjAxNC0wMi0yMSAgQ2hpIFdhaSBMYXUgIDxjbGF1QGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBSZXBsYWNlIGJpbmFyeVNlYXJjaCB3aXRoIGxvd2VyQm91
bmQgYW5kIHVwcGVyQm91bmQgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg2MDkKKworICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5
IEhhdGNoZXIuCisKKyAgICAgICAgVGhpcyBtYWtlcyBpbnNlcnRpb25JbmRleEZvck9iamVjdElu
TGlzdFNvcnRlZEJ5RnVuY3Rpb24gd29yayBpbiBPKGxvZyhuKSkgdGltZSBpbnN0ZWFkIG9mIE8o
bikuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0JpbmFyeVNlYXJjaC5qczogUmVtb3ZlZC4K
KyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKKyAgICAgICAgKiBVc2VySW50ZXJm
YWNlL1V0aWxpdGllcy5qczoKKyAgICAgICAgKiBXZWJJbnNwZWN0b3JVSS52Y3hwcm9qL1dlYklu
c3BlY3RvclVJLnZjeHByb2o6CisgICAgICAgICogV2ViSW5zcGVjdG9yVUkudmN4cHJvai9XZWJJ
bnNwZWN0b3JVSS52Y3hwcm9qLmZpbHRlcnM6CisKIDIwMTQtMDItMjAgIEFudG9pbmUgUXVpbnQg
IDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogY3JlYXRlIGEg
Q29kZU1pcnJvckVkaXRpbmdDb250cm9sbGVyIHN1cGVyY2xhc3MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0JpbmFyeVNlYXJjaC5qcyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0JpbmFyeVNlYXJjaC5qcwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYzY1MmQ2ZWY4M2RjYjMxODcyY2MyN2RlNTk3OWQ4MzJiZjJlNjZh
OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CaW5hcnlTZWFyY2guanMKKysrIC9kZXYvbnVs
bApAQCAtMSw4NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQHBhcmFtIHsqfSBvYmplY3QKLSAqIEBwYXJh
bSB7QXJyYXkuPCo+fSBhcnJheQotICogQHBhcmFtIHtmdW5jdGlvbigqLCAqKX0gY29tcGFyYXRv
cgotICovCi1mdW5jdGlvbiBiaW5hcnlTZWFyY2gob2JqZWN0LCBhcnJheSwgY29tcGFyYXRvcikK
LXsKLSAgICB2YXIgZmlyc3QgPSAwOwotICAgIHZhciBsYXN0ID0gYXJyYXkubGVuZ3RoIC0gMTsK
LQotICAgIHdoaWxlIChmaXJzdCA8PSBsYXN0KSB7Ci0gICAgICAgIHZhciBtaWQgPSAoZmlyc3Qg
KyBsYXN0KSA+PiAxOwotICAgICAgICB2YXIgYyA9IGNvbXBhcmF0b3Iob2JqZWN0LCBhcnJheVtt
aWRdKTsKLSAgICAgICAgaWYgKGMgPiAwKQotICAgICAgICAgICAgZmlyc3QgPSBtaWQgKyAxOwot
ICAgICAgICBlbHNlIGlmIChjIDwgMCkKLSAgICAgICAgICAgIGxhc3QgPSBtaWQgLSAxOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gbWlkOwotICAgIH0KLQotICAgIC8vIFJldHVy
biB0aGUgbmVhcmVzdCBsZXNzZXIgaW5kZXgsICItMSIgbWVhbnMgIjAsICItMiIgbWVhbnMgIjEi
LCBldGMuCi0gICAgcmV0dXJuIC0oZmlyc3QgKyAxKTsKLX0KLQotT2JqZWN0LmRlZmluZVByb3Bl
cnR5KEFycmF5LnByb3RvdHlwZSwgImJpbmFyeUluZGV4T2YiLCB7IHZhbHVlOiBmdW5jdGlvbih2
YWx1ZSwgY29tcGFyYXRvcikKLXsKLSAgICB2YXIgcmVzdWx0ID0gYmluYXJ5U2VhcmNoKHZhbHVl
LCB0aGlzLCBjb21wYXJhdG9yKTsKLSAgICByZXR1cm4gcmVzdWx0ID49IDAgPyByZXN1bHQgOiAt
MTsKLX19KTsKLQotLyoqCi0gKiBAcGFyYW0geyp9IGFuT2JqZWN0Ci0gKiBAcGFyYW0ge0FycmF5
LjwqPn0gYUxpc3QKLSAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgKil9IGFGdW5jdGlvbgotICovCi1m
dW5jdGlvbiBpbnNlcnRpb25JbmRleEZvck9iamVjdEluTGlzdFNvcnRlZEJ5RnVuY3Rpb24oYW5P
YmplY3QsIGFMaXN0LCBhRnVuY3Rpb24pCi17Ci0gICAgdmFyIGluZGV4ID0gYmluYXJ5U2VhcmNo
KGFuT2JqZWN0LCBhTGlzdCwgYUZ1bmN0aW9uKTsKLSAgICBpZiAoaW5kZXggPCAwKQotICAgICAg
ICAvLyBTZWUgYmluYXJ5U2VhcmNoIGltcGxlbWVudGF0aW9uLgotICAgICAgICByZXR1cm4gLWlu
ZGV4IC0gMTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gUmV0dXJuIHRoZSBmaXJzdCBvY2N1cmFu
Y2Ugb2YgYW4gaXRlbSBpbiB0aGUgbGlzdC4KLSAgICAgICAgd2hpbGUgKGluZGV4ID4gMCAmJiBh
RnVuY3Rpb24oYW5PYmplY3QsIGFMaXN0W2luZGV4IC0gMV0pID09PSAwKQotICAgICAgICAgICAg
aW5kZXgtLTsKLSAgICAgICAgcmV0dXJuIGluZGV4OwotICAgIH0KLX0KLQotZnVuY3Rpb24gaW5z
ZXJ0T2JqZWN0SW50b1NvcnRlZEFycmF5KHZhbHVlLCBhcnJheSwgY29tcGFyZUZ1bmN0aW9uKQot
ewotICAgYXJyYXkuc3BsaWNlKGluc2VydGlvbkluZGV4Rm9yT2JqZWN0SW5MaXN0U29ydGVkQnlG
dW5jdGlvbih2YWx1ZSwgYXJyYXksIGNvbXBhcmVGdW5jdGlvbiksIDAsIHZhbHVlKTsKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbCBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAppbmRleCAzMGQz
ZjQyOTI3NGU0MWVjMzUxMjBkNDQ4MTc4YTYzNmM0MDc2NzkyLi42NTRkZjhmODM0ZmI5NjQzMDUx
NTFiODA0NTYzOWUwNTUwODk5YmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9NYWluLmh0bWwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvTWFpbi5odG1sCkBAIC0yMTQsNyArMjE0LDYgQEAKICAgICA8c2NyaXB0IHNyYz0i
U291cmNlQ29kZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlJlc291cmNlLmpzIj48
L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iUmVzb3VyY2VDb2xsZWN0aW9uLmpzIj48L3Njcmlw
dD4KLSAgICA8c2NyaXB0IHNyYz0iQmluYXJ5U2VhcmNoLmpzIj48L3NjcmlwdD4KICAgICA8c2Ny
aXB0IHNyYz0iRWRpdGluZ1N1cHBvcnQuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJL
ZXlib2FyZFNob3J0Y3V0LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTmF2aWdhdGlv
bkJhci5qcyI+PC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9VdGlsaXRpZXMuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9VdGlsaXRpZXMuanMKaW5kZXggNGExOWQyMzExOTQ5Y2I5NjJhZWIxZjgxNDFmODRhYjMx
ZTc4NDAzMi4uNmE0MDcxNzkxYTZiZjI5NzBiNGRkMDQ3NGMwYzRjNTFiYzYzM2VkZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVXRpbGl0aWVzLmpzCisr
KyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1V0aWxpdGllcy5qcwpAQCAt
NDI2LDI1ICs0MjYsNiBAQCBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBlLCAi
a2V5U2V0IiwKICAgICB9CiB9KTsKIAotT2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3Rv
dHlwZSwgInVwcGVyQm91bmQiLAotewotICAgIHZhbHVlOiBmdW5jdGlvbih2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHZhciBmaXJzdCA9IDA7Ci0gICAgICAgIHZhciBjb3VudCA9IHRoaXMubGVuZ3Ro
OwotICAgICAgICB3aGlsZSAoY291bnQgPiAwKSB7Ci0gICAgICAgICAgdmFyIHN0ZXAgPSBjb3Vu
dCA+PiAxOwotICAgICAgICAgIHZhciBtaWRkbGUgPSBmaXJzdCArIHN0ZXA7Ci0gICAgICAgICAg
aWYgKHZhbHVlID49IHRoaXNbbWlkZGxlXSkgewotICAgICAgICAgICAgICBmaXJzdCA9IG1pZGRs
ZSArIDE7Ci0gICAgICAgICAgICAgIGNvdW50IC09IHN0ZXAgKyAxOwotICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICBjb3VudCA9IHN0ZXA7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IGZpcnN0OwotICAgIH0KLX0pOwotCiBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RyaW5nLnByb3Rv
dHlwZSwgInRyaW1NaWRkbGUiLAogewogICAgIHZhbHVlOiBmdW5jdGlvbihtYXhMZW5ndGgpCkBA
IC05NTQsMyArOTM1LDc4IEBAIGZ1bmN0aW9uIHNpbXBsZUdsb2JTdHJpbmdUb1JlZ0V4cChnbG9i
U3RyaW5nLCByZWdFeHBGbGFncykKIAogICAgIHJldHVybiBuZXcgUmVnRXhwKHJlZ2V4U3RyaW5n
LCByZWdFeHBGbGFncyk7CiB9CisKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5
cGUsICJsb3dlckJvdW5kIiwKK3sKKyAgICAvLyBSZXR1cm4gaW5kZXggb2YgdGhlIGxlZnRtb3N0
IGVsZW1lbnQgdGhhdCBpcyBlcXVhbCBvciBncmVhdGVyCisgICAgLy8gdGhhbiB0aGUgc3BlY2lt
ZW4gb2JqZWN0LiBJZiB0aGVyZSdzIG5vIHN1Y2ggZWxlbWVudCAoaS5lLiBhbGwKKyAgICAvLyBl
bGVtZW50cyBhcmUgc21hbGxlciB0aGFuIHRoZSBzcGVjaW1lbikgcmV0dXJucyBhcnJheS5sZW5n
dGguCisgICAgLy8gVGhlIGZ1bmN0aW9uIHdvcmtzIGZvciBzb3J0ZWQgYXJyYXkuCisgICAgdmFs
dWU6IGZ1bmN0aW9uKG9iamVjdCwgY29tcGFyYXRvcikKKyAgICB7CisgICAgICAgIGZ1bmN0aW9u
IGRlZmF1bHRDb21wYXJhdG9yKGEsIGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBh
IC0gYjsKKyAgICAgICAgfQorICAgICAgICBjb21wYXJhdG9yID0gY29tcGFyYXRvciB8fCBkZWZh
dWx0Q29tcGFyYXRvcjsKKyAgICAgICAgdmFyIGwgPSAwOworICAgICAgICB2YXIgciA9IHRoaXMu
bGVuZ3RoOworICAgICAgICB3aGlsZSAobCA8IHIpIHsKKyAgICAgICAgICAgIHZhciBtID0gKGwg
KyByKSA+PiAxOworICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3Iob2JqZWN0LCB0aGlzW21dKSA+
IDApCisgICAgICAgICAgICAgICAgbCA9IG0gKyAxOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHIgPSBtOworICAgICAgICB9CisgICAgICAgIHJldHVybiByOworICAgIH0KK30p
OworCitPYmplY3QuZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBlLCAidXBwZXJCb3VuZCIs
Cit7CisgICAgLy8gUmV0dXJuIGluZGV4IG9mIHRoZSBsZWZ0bW9zdCBlbGVtZW50IHRoYXQgaXMg
Z3JlYXRlcgorICAgIC8vIHRoYW4gdGhlIHNwZWNpbWVuIG9iamVjdC4gSWYgdGhlcmUncyBubyBz
dWNoIGVsZW1lbnQgKGkuZS4gYWxsCisgICAgLy8gZWxlbWVudHMgYXJlIHNtYWxsZXIgdGhhbiB0
aGUgc3BlY2ltZW4pIHJldHVybnMgYXJyYXkubGVuZ3RoLgorICAgIC8vIFRoZSBmdW5jdGlvbiB3
b3JrcyBmb3Igc29ydGVkIGFycmF5LgorICAgIHZhbHVlOiBmdW5jdGlvbihvYmplY3QsIGNvbXBh
cmF0b3IpCisgICAgeworICAgICAgICBmdW5jdGlvbiBkZWZhdWx0Q29tcGFyYXRvcihhLCBiKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSAtIGI7CisgICAgICAgIH0KKyAgICAgICAg
Y29tcGFyYXRvciA9IGNvbXBhcmF0b3IgfHwgZGVmYXVsdENvbXBhcmF0b3I7CisgICAgICAgIHZh
ciBsID0gMDsKKyAgICAgICAgdmFyIHIgPSB0aGlzLmxlbmd0aDsKKyAgICAgICAgd2hpbGUgKGwg
PCByKSB7CisgICAgICAgICAgICB2YXIgbSA9IChsICsgcikgPj4gMTsKKyAgICAgICAgICAgIGlm
IChjb21wYXJhdG9yKG9iamVjdCwgdGhpc1ttXSkgPj0gMCkKKyAgICAgICAgICAgICAgICBsID0g
bSArIDE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgciA9IG07CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHI7CisgICAgfQorfSk7CisKK09iamVjdC5kZWZpbmVQcm9wZXJ0
eShBcnJheS5wcm90b3R5cGUsICJiaW5hcnlJbmRleE9mIiwKK3sKKyAgICB2YWx1ZTogZnVuY3Rp
b24odmFsdWUsIGNvbXBhcmF0b3IpCisgICAgeworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmxv
d2VyQm91bmQodmFsdWUsIGNvbXBhcmF0b3IpOworICAgICAgICByZXR1cm4gaW5kZXggPCB0aGlz
Lmxlbmd0aCAmJiBjb21wYXJhdG9yKHZhbHVlLCB0aGlzW2luZGV4XSkgPT09IDAgPyBpbmRleCA6
IC0xOworICAgIH0KK30pOworCitmdW5jdGlvbiBpbnNlcnRpb25JbmRleEZvck9iamVjdEluTGlz
dFNvcnRlZEJ5RnVuY3Rpb24ob2JqZWN0LCBsaXN0LCBjb21wYXJhdG9yLCBpbnNlcnRpb25JbmRl
eEFmdGVyKQoreworICAgIGlmIChpbnNlcnRpb25JbmRleEFmdGVyKSB7CisgICAgICAgIHJldHVy
biBsaXN0LnVwcGVyQm91bmQob2JqZWN0LCBjb21wYXJhdG9yKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICByZXR1cm4gbGlzdC5sb3dlckJvdW5kKG9iamVjdCwgY29tcGFyYXRvcik7CisgICAgfQor
fQorCitmdW5jdGlvbiBpbnNlcnRPYmplY3RJbnRvU29ydGVkQXJyYXkob2JqZWN0LCBhcnJheSwg
Y29tcGFyYXRvcikKK3sKKyAgICBhcnJheS5zcGxpY2UoaW5zZXJ0aW9uSW5kZXhGb3JPYmplY3RJ
bkxpc3RTb3J0ZWRCeUZ1bmN0aW9uKG9iamVjdCwgYXJyYXksIGNvbXBhcmF0b3IpLCAwLCBvYmpl
Y3QpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1dlYkluc3BlY3RvclVJ
LnZjeHByb2ovV2ViSW5zcGVjdG9yVUkudmN4cHJvaiBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9X
ZWJJbnNwZWN0b3JVSS52Y3hwcm9qL1dlYkluc3BlY3RvclVJLnZjeHByb2oKaW5kZXggNDNkNmYy
NDUzOTA3MjA3ZDg5MjRiNGM3YjY1Y2RmZmYzODdkMTM5Yy4uMTk5ODU0YjcxZTY5ZDk0YTg1ZTUx
MzBmZWQyNjBjOTg4MzcxYWQ1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1dl
Ykluc3BlY3RvclVJLnZjeHByb2ovV2ViSW5zcGVjdG9yVUkudmN4cHJvagorKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvV2ViSW5zcGVjdG9yVUkudmN4cHJvai9XZWJJbnNwZWN0b3JVSS52Y3hw
cm9qCkBAIC0yMzYsNyArMjM2LDYgQEAKICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxVc2VySW50ZXJm
YWNlXEFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdC5qcyIgLz4KICAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxVc2VySW50ZXJmYWNlXEFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFRyZWVFbGVtZW50LmpzIiAv
PgogICAgIDxOb25lIEluY2x1ZGU9Ii4uXFVzZXJJbnRlcmZhY2VcQXBwbGljYXRpb25DYWNoZU9i
c2VydmVyLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXFVzZXJJbnRlcmZhY2VcQmluYXJ5
U2VhcmNoLmpzIiAvPgogICAgIDxOb25lIEluY2x1ZGU9Ii4uXFVzZXJJbnRlcmZhY2VcQmxhbmtT
dHlsZVByb3BlcnRpZXNTZWN0aW9uLmpzIiAvPgogICAgIDxOb25lIEluY2x1ZGU9Ii4uXFVzZXJJ
bnRlcmZhY2VcQm90dG9tVXBQcm9maWxlRGF0YUdyaWRUcmVlLmpzIiAvPgogICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXFVzZXJJbnRlcmZhY2VcQm94TW9kZWxEZXRhaWxzU2VjdGlvblJvdy5jc3MiIC8+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvV2ViSW5zcGVjdG9yVUkudmN4cHJv
ai9XZWJJbnNwZWN0b3JVSS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
V2ViSW5zcGVjdG9yVUkudmN4cHJvai9XZWJJbnNwZWN0b3JVSS52Y3hwcm9qLmZpbHRlcnMKaW5k
ZXggYjUwYTYwY2UwNjBhZGNmZDliMDVkMTE1MTg1MmU3ZjYzMzA4ODE2YS4uOTE3ZDY3MThkYjli
MmY3ZGI0MzhhNjVhM2M2ODVhYTY4MGYzMDVmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1dlYkluc3BlY3RvclVJLnZjeHByb2ovV2ViSW5zcGVjdG9yVUkudmN4cHJvai5maWx0
ZXJzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9XZWJJbnNwZWN0b3JVSS52Y3hwcm9qL1dl
Ykluc3BlY3RvclVJLnZjeHByb2ouZmlsdGVycwpAQCAtNjksOSArNjksNiBAQAogICAgIDxOb25l
IEluY2x1ZGU9Ii4uXFVzZXJJbnRlcmZhY2VcQXBwbGljYXRpb25DYWNoZU9ic2VydmVyLmpzIj4K
ICAgICAgIDxGaWx0ZXI+VXNlckludGVyZmFjZTwvRmlsdGVyPgogICAgIDwvTm9uZT4KLSAgICA8
Tm9uZSBJbmNsdWRlPSIuLlxVc2VySW50ZXJmYWNlXEJpbmFyeVNlYXJjaC5qcyI+Ci0gICAgICA8
RmlsdGVyPlVzZXJJbnRlcmZhY2U8L0ZpbHRlcj4KLSAgICA8L05vbmU+CiAgICAgPE5vbmUgSW5j
bHVkZT0iLi5cVXNlckludGVyZmFjZVxCbGFua1N0eWxlUHJvcGVydGllc1NlY3Rpb24uanMiPgog
ICAgICAgPEZpbHRlcj5Vc2VySW50ZXJmYWNlPC9GaWx0ZXI+CiAgICAgPC9Ob25lPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4
IDdiNjdlYWVmNjEzOWZjYWU2ZDNmYzgxZmVjN2I3NThkM2RkMGViMjIuLmQyNDJmZDJhYjU5NmVi
NTc2OTNkMWQ0ZmNhNjAwMjdhMDIyYTgxZWEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxNC0w
Mi0yMSAgQ2hpIFdhaSBMYXUgIDxjbGF1QGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVj
dG9yOiBSZXBsYWNlIGJpbmFyeVNlYXJjaCB3aXRoIGxvd2VyQm91bmQgYW5kIHVwcGVyQm91bmQg
ZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTg2MDkKKworICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCisKKyAgICAg
ICAgKiBpbnNwZWN0b3IvdXRpbGl0aWVzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvdXRpbGl0aWVzLmh0bWw6CisKIDIwMTQtMDItMjAgIE1pY2hhxYIgUGFrdcWCYSB2ZWwgUnV0
a2EgIDxtLnBha3VsYUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIEVGTCBnYXJk
ZW5pbmcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci91dGlsaXRpZXMtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3V0aWxpdGllcy1leHBlY3RlZC50eHQKaW5k
ZXggNDVmMjZiOTM3YzVkOTEwMzM5OTM0NjU3Njg4ZTRhOWZmOGU0MDZhYS4uM2I2NjRkOGYwMWM1
MTkxMTdjYzM4N2I4MzAxNmRlMTU1ODM3MzE4ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL3V0aWxpdGllcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L3V0aWxpdGllcy1leHBlY3RlZC50eHQKQEAgLTMsNiArMywxMSBAQCBUaGlzIHRlc3QgY2hlY2tz
IFdlYiBJbnNwZWN0b3IgdXRpbGl0aWVzLgogCiBSdW5uaW5nOiBiaW5hcnlJbmRleE9mVGVzdAog
CitSdW5uaW5nOiBsb3dlckJvdW5kVGVzdAorCitSdW5uaW5nOiB1cHBlckJvdW5kVGVzdAorCisK
IFJ1bm5pbmc6IHFzZWxlY3RUZXN0CiBBcnJheTogW10KIFJlZmVyZW5jZToge30KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci91dGlsaXRpZXMuaHRtbCBiL0xheW91dFRlc3RzL2lu
c3BlY3Rvci91dGlsaXRpZXMuaHRtbAppbmRleCAwMTNlYjBkM2MyNWU3MTQ1MDdjOWY1N2U4NjQy
N2M1MWQ4NjNlN2I4Li45NDcxZDU1MDNiYzljMGFlOTcxYmY4OWRlMWNkYTQ2OGU4YTgzOGM3IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvdXRpbGl0aWVzLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3V0aWxpdGllcy5odG1sCkBAIC0zNiw2ICszNiw2OCBAQCBmdW5j
dGlvbiB0ZXN0KCkKICAgICAgICAgICAgICAgICB0ZXN0QXJyYXkodGVzdEFycmF5c1tpXSk7CiAg
ICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgIH0sCisgICAgICAgIAorICAgICAgICBmdW5jdGlv
biBsb3dlckJvdW5kVGVzdChuZXh0KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgdGVzdEFy
cmF5cyA9IFsKKyAgICAgICAgICAgICAgICBbXSwKKyAgICAgICAgICAgICAgICBbMV0sCisgICAg
ICAgICAgICAgICAgWy0xLCAtMSwgMCwgMCwgMCwgMCwgMiwgMywgNCwgNCwgNCwgNywgOSwgOSwg
OV0KKyAgICAgICAgICAgIF07CisgICAgICAgIAorICAgICAgICAgICAgZnVuY3Rpb24gdGVzdEFy
cmF5KGFycmF5LCB1c2VDb21wYXJhdG9yKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGZ1bmN0aW9uIGNvbXBhcmF0b3IoYSwgYikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogKGEgPiBiID8gMSA6IDApOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yICh2YXIgdmFsdWUgPSAtMjsg
dmFsdWUgPD0gMTI7ICsrdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0g
dXNlQ29tcGFyYXRvciA/IGFycmF5Lmxvd2VyQm91bmQodmFsdWUsIGNvbXBhcmF0b3IpIDogYXJy
YXkubG93ZXJCb3VuZCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3Qu
YXNzZXJ0VHJ1ZSgwIDw9IGluZGV4ICYmIGluZGV4IDw9IGFycmF5Lmxlbmd0aCwgImluZGV4IGlz
IHdpdGhpbiBib3VuZHMiKTsKKyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3Nl
cnRUcnVlKGluZGV4ID09PSAwIHx8IGFycmF5W2luZGV4IC0gMV0gPCB2YWx1ZSwgImFycmF5W2lu
ZGV4IC0gMV0gPCB2YWx1ZSIpOworICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFz
c2VydFRydWUoaW5kZXggPT09IGFycmF5Lmxlbmd0aCB8fCBhcnJheVtpbmRleF0gPj0gdmFsdWUs
ICJhcnJheVtpbmRleF0gPj0gdmFsdWUiKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwLCBsID0gdGVzdEFycmF5cy5sZW5ndGg7IGkgPCBsOyArK2kpIHsKKyAgICAgICAgICAg
ICAgICB0ZXN0QXJyYXkodGVzdEFycmF5c1tpXSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHRl
c3RBcnJheSh0ZXN0QXJyYXlzW2ldLCB0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IG5leHQoKTsKKyAgICAgICAgfSwKKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9uIHVwcGVyQm91
bmRUZXN0KG5leHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciB0ZXN0QXJyYXlzID0gWwor
ICAgICAgICAgICAgICAgIFtdLAorICAgICAgICAgICAgICAgIFsxXSwKKyAgICAgICAgICAgICAg
ICBbLTEsIC0xLCAwLCAwLCAwLCAwLCAyLCAzLCA0LCA0LCA0LCA3LCA5LCA5LCA5XQorICAgICAg
ICAgICAgXTsKKyAgICAgICAgCisgICAgICAgICAgICBmdW5jdGlvbiB0ZXN0QXJyYXkoYXJyYXks
IHVzZUNvbXBhcmF0b3IpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZnVuY3Rpb24g
Y29tcGFyYXRvcihhLCBiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGEgPCBiID8gLTEgOiAoYSA+IGIgPyAxIDogMCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHZhciB2YWx1ZSA9IC0yOyB2YWx1ZSA8PSAx
MjsgKyt2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB1c2VDb21wYXJh
dG9yID8gYXJyYXkudXBwZXJCb3VuZCh2YWx1ZSwgY29tcGFyYXRvcikgOiBhcnJheS51cHBlckJv
dW5kKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRUcnVl
KDAgPD0gaW5kZXggJiYgaW5kZXggPD0gYXJyYXkubGVuZ3RoLCAiaW5kZXggaXMgd2l0aGluIGJv
dW5kcyIpOworICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydFRydWUoaW5k
ZXggPT09IDAgfHwgYXJyYXlbaW5kZXggLSAxXSA8PSB2YWx1ZSwgImFycmF5W2luZGV4IC0gMV0g
PD0gdmFsdWUiKTsKKyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRUcnVl
KGluZGV4ID09PSBhcnJheS5sZW5ndGggfHwgYXJyYXlbaW5kZXhdID4gdmFsdWUsICJhcnJheVtp
bmRleF0gPiB2YWx1ZSIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRlc3RBcnJheXMubGVuZ3RoOyBp
IDwgbDsgKytpKSB7CisgICAgICAgICAgICAgICAgdGVzdEFycmF5KHRlc3RBcnJheXNbaV0sIGZh
bHNlKTsKKyAgICAgICAgICAgICAgICB0ZXN0QXJyYXkodGVzdEFycmF5c1tpXSwgdHJ1ZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgIH0sCisgICAgICAgIAog
CiAgICAgICAgIGZ1bmN0aW9uIHFzZWxlY3RUZXN0KG5leHQpCiAgICAgICAgIHsKQEAgLTYwLDEz
ICsxMjIsMTMgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgICAgICAgICAgICAgICAgIG1pbjogc29y
dGVkWzBdLAogICAgICAgICAgICAgICAgICAgICBtZWRpYW46IHNvcnRlZFtNYXRoLmZsb29yKHNv
cnRlZC5sZW5ndGggLyAyKV0sCiAgICAgICAgICAgICAgICAgICAgIG1heDogc29ydGVkW3NvcnRl
ZC5sZW5ndGggLSAxXQotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OwogCiAg
ICAgICAgICAgICAgICAgdmFyIGFjdHVhbCA9IHsKICAgICAgICAgICAgICAgICAgICAgbWluOiBh
cnJheS5zbGljZSgwKS5xc2VsZWN0KDApLAogICAgICAgICAgICAgICAgICAgICBtZWRpYW46IGFy
cmF5LnNsaWNlKDApLnFzZWxlY3QoTWF0aC5mbG9vcihhcnJheS5sZW5ndGggLyAyKSksCiAgICAg
ICAgICAgICAgICAgICAgIG1heDogYXJyYXkuc2xpY2UoMCkucXNlbGVjdChhcnJheS5sZW5ndGgg
LSAxKQotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAg
ICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJBcnJheTogIiArIEpTT04uc3RyaW5naWZ5KGFy
cmF5KSk7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlJlZmVyZW5j
ZTogIiArIEpTT04uc3RyaW5naWZ5KHJlZmVyZW5jZSkpOwogICAgICAgICAgICAgICAgIEluc3Bl
Y3RvclRlc3QuYWRkUmVzdWx0KCJBY3R1YWw6ICAgICIgKyBKU09OLnN0cmluZ2lmeShhY3R1YWwp
KTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>