<?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>56395</bug_id>
          
          <creation_ts>2011-03-15 11:49:35 -0700</creation_ts>
          <short_desc>Web Inspector: [Chromium] Reduce memory consumption by detailed heap snapshots indexes</short_desc>
          <delta_ts>2011-03-17 10:49:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mikhail Naganov">mnaganov</reporter>
          <assigned_to name="Mikhail Naganov">mnaganov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>367829</commentid>
    <comment_count>0</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-03-15 11:49:35 -0700</bug_when>
    <thetext>I optimized index structures used in detailed heap profiles. Generally, changing hash maps to arrays of sorted values saves a lot. Also, reversed graph wasn&apos;t stored optimally, effectively consuming almost the same amount of memory as the original graph does.

Making this change frees 30% memory when working with 2 snapshots of GMail, making diffs, and tracing paths to GC root (from 382353KB down to 264946KB).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367831</commentid>
    <comment_count>1</comment_count>
      <attachid>85836</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-03-15 11:54:33 -0700</bug_when>
    <thetext>Created attachment 85836
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368397</commentid>
    <comment_count>2</comment_count>
      <attachid>85836</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-03-16 11:08:02 -0700</bug_when>
    <thetext>Comment on attachment 85836
patch

I hope this is covered with some test. Is it? Profiler is of scary size now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368962</commentid>
    <comment_count>3</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-03-17 03:25:15 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 85836 [details])
&gt; I hope this is covered with some test. Is it? Profiler is of scary size now.

I plan to add tests soon, because making such changes starts frightening myself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369153</commentid>
    <comment_count>4</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-03-17 10:49:51 -0700</bug_when>
    <thetext>Manually committed: http://trac.webkit.org/changeset/81343


2011-03-17  Mikhail Naganov  &lt;mnaganov@chromium.org&gt;

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Reduce memory consumption by detailed heap snapshots indexes.
        https://bugs.webkit.org/show_bug.cgi?id=56395

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider.createProvider):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotRetainerEdge): Added
        (WebInspector.HeapSnapshotRetainerEdgeIterator): Added
        (WebInspector.HeapSnapshotNode.prototype.get retainers):
        (WebInspector.HeapSnapshot.prototype.dispose):
        (WebInspector.HeapSnapshot.prototype.hasId):
        (WebInspector.HeapSnapshot.prototype.retainers):
        (WebInspector.HeapSnapshot.prototype._buildRetainers):
        (WebInspector.HeapSnapshot.prototype._buildIdsList):
        (WebInspector.HeapSnapshot.prototype._buildNodeIndex):
        (WebInspector.HeapSnapshot.prototype._findNodePositionInIndex):
        (WebInspector.HeapSnapshot.prototype._findNearestNodeIndex):
        (WebInspector.HeapSnapshot.prototype._getRetainerIndex):
        (WebInspector.HeapSnapshot.prototype._markInvisibleEdges):
        (WebInspector.HeapSnapshot.prototype._numbersComparator):
        (WebInspector.HeapSnapshotPathFinder.prototype.get _lastEdge):
        (WebInspector.HeapSnapshotPathFinder.prototype._nextEdgeIter):
        (WebInspector.HeapSnapshotPathFinder.prototype._buildNextPath):
        (WebInspector.HeapSnapshotPathFinder.prototype._pathToString):</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85836</attachid>
            <date>2011-03-15 11:54:33 -0700</date>
            <delta_ts>2011-03-16 11:08:02 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch-56395</filename>
            <type>text/plain</type>
            <size>16064</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkNjk3OGQ1Li4yZWNjYTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMg
QEAKKzIwMTEtMDMtMTUgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBbQ2hyb21pdW1dIFJlZHVjZSBtZW1vcnkgY29uc3VtcHRpb24gYnkgZGV0YWlsZWQg
aGVhcCBzbmFwc2hvdHMgaW5kZXhlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU2Mzk1CisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0Rl
dGFpbGVkSGVhcHNob3RHcmlkTm9kZXMuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90RGlmZk5vZGUucHJvdG90eXBlLl9jcmVhdGVOb2Rlc1Byb3ZpZGVyLmNyZWF0ZVByb3Zp
ZGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REaWZmTm9kZS5wcm90b3R5
cGUuX2NyZWF0ZU5vZGVzUHJvdmlkZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
SGVhcFNuYXBzaG90LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJldGFp
bmVyRWRnZSk6IEFkZGVkCisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmV0YWlu
ZXJFZGdlSXRlcmF0b3IpOiBBZGRlZAorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dE5vZGUucHJvdG90eXBlLmdldCByZXRhaW5lcnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdC5wcm90b3R5cGUuZGlzcG9zZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90LnByb3RvdHlwZS5oYXNJZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90LnByb3RvdHlwZS5yZXRhaW5lcnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdC5wcm90b3R5cGUuX2J1aWxkUmV0YWluZXJzKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9idWlsZElkc0xpc3QpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUuX2J1aWxkTm9kZUluZGV4KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9maW5kTm9kZVBvc2l0aW9uSW5J
bmRleCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZS5fZmlu
ZE5lYXJlc3ROb2RlSW5kZXgpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5w
cm90b3R5cGUuX2dldFJldGFpbmVySW5kZXgpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdC5wcm90b3R5cGUuX21hcmtJbnZpc2libGVFZGdlcyk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZS5fbnVtYmVyc0NvbXBhcmF0b3IpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFBhdGhGaW5kZXIucHJvdG90eXBlLmdldCBfbGFz
dEVkZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFBhdGhGaW5kZXIucHJv
dG90eXBlLl9uZXh0RWRnZUl0ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dFBhdGhGaW5kZXIucHJvdG90eXBlLl9idWlsZE5leHRQYXRoKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RQYXRoRmluZGVyLnByb3RvdHlwZS5fcGF0aFRvU3RyaW5nKToKKwog
MjAxMS0wMy0xMiAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZXRhaWxlZEhlYXBzaG90R3JpZE5vZGVzLmpz
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZXRhaWxlZEhlYXBzaG90R3Jp
ZE5vZGVzLmpzCmluZGV4IDE0YmExNDIuLmNkZDk2OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFwc2hvdEdyaWROb2Rlcy5qcworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RldGFpbGVkSGVhcHNob3RHcmlk
Tm9kZXMuanMKQEAgLTU3Miw3ICs1NzIsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGlm
Zk5vZGUucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChub2RlKSB7CiAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS50eXBlID09PSBub2RlVHlwZQogICAgICAg
ICAgICAgICAgICAgICAgICAgICYmIChub2RlTmFtZSA9PT0gbnVsbCB8fCBub2RlLm5hbWUgPT09
IG5vZGVOYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICYmICEobm9kZS5pZCBpbiBvdGhl
clNuYXBzaG90Lmlkc01hcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIW90aGVyU25h
cHNob3QuaGFzSWQobm9kZS5pZCk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KICAg
ICB9LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFw
U25hcHNob3QuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFw
c2hvdC5qcwppbmRleCAyMTVmMzFjLi5jNDU4ZTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdC5qcworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdC5qcwpAQCAtMTk3LDYgKzE5NywxMzQg
QEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VJdGVyYXRvci5wcm90b3R5cGUgPSB7CiAg
ICAgfQogfTsKIAorV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJldGFpbmVyRWRnZSA9IGZ1bmN0
aW9uKHNuYXBzaG90LCByZXRhaW5lcnMsIHJldGFpbmVySW5kZXgpCit7CisgICAgdGhpcy5fc25h
cHNob3QgPSBzbmFwc2hvdDsKKyAgICB0aGlzLl9yZXRhaW5lcnMgPSByZXRhaW5lcnM7CisgICAg
dGhpcy5yZXRhaW5lckluZGV4ID0gcmV0YWluZXJJbmRleCB8fCAwOworfQorCitXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90UmV0YWluZXJFZGdlLnByb3RvdHlwZSA9IHsKKyAgICBjbG9uZTogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90UmV0YWluZXJFZGdlKHRoaXMuX3NuYXBzaG90LCB0aGlzLl9yZXRhaW5lcnMsIHRoaXMucmV0
YWluZXJJbmRleCk7CisgICAgfSwKKworICAgIGdldCBoYXNTdHJpbmdOYW1lKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0aGlzLl9lZGdlLmhhc1N0cmluZ05hbWU7CisgICAgfSwKKworICAgIGdl
dCBpc0VsZW1lbnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VkZ2UuaXNFbGVtZW50
OworICAgIH0sCisKKyAgICBnZXQgaXNIaWRkZW4oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX2VkZ2UuaXNIaWRkZW47CisgICAgfSwKKworICAgIGdldCBpc0ludGVybmFsKCkKKyAgICB7
CisgICAgICAgIHJldHVybiB0aGlzLl9lZGdlLmlzSW50ZXJuYWw7CisgICAgfSwKKworICAgIGdl
dCBpc0ludmlzaWJsZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZWRnZS5pc0ludmlz
aWJsZTsKKyAgICB9LAorCisgICAgZ2V0IGlzU2hvcnRjdXQoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX2VkZ2UuaXNTaG9ydGN1dDsKKyAgICB9LAorCisgICAgZ2V0IG5hbWUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VkZ2UubmFtZTsKKyAgICB9LAorCisgICAgZ2V0IG5v
ZGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX25vZGU7CisgICAgfSwKKworICAgIGdl
dCBub2RlSW5kZXgoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVJbmRleDsKKyAg
ICB9LAorCisgICAgZ2V0IHJldGFpbmVySW5kZXgoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX3JldGFpbmVySW5kZXg7CisgICAgfSwKKworICAgIHNldCByZXRhaW5lckluZGV4KG5ld0lu
ZGV4KQorICAgIHsKKyAgICAgICAgaWYgKG5ld0luZGV4ICE9PSB0aGlzLl9yZXRhaW5lckluZGV4
KSB7CisgICAgICAgICAgICB0aGlzLl9yZXRhaW5lckluZGV4ID0gbmV3SW5kZXg7CisgICAgICAg
ICAgICB0aGlzLl9zZXR1cEVkZ2UoKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfc2V0dXBF
ZGdlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgZ2xvYmFsRWRnZUluZGV4ID0gdGhp
cy5fcmV0YWluZXJzLml0ZW0odGhpcy5fcmV0YWluZXJJbmRleCk7CisgICAgICAgIHRoaXMuX25v
ZGVJbmRleCA9IHRoaXMuX3NuYXBzaG90Ll9maW5kTmVhcmVzdE5vZGVJbmRleChnbG9iYWxFZGdl
SW5kZXgpOworICAgICAgICB0aGlzLl9ub2RlID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3ROb2RlKHRoaXMuX3NuYXBzaG90LCB0aGlzLl9ub2RlSW5kZXgpOworICAgICAgICB2YXIgZWRn
ZUluZGV4ID0gZ2xvYmFsRWRnZUluZGV4IC0gdGhpcy5fbm9kZUluZGV4IC0gdGhpcy5fc25hcHNo
b3QuX2ZpcnN0RWRnZU9mZnNldDsKKyAgICAgICAgdGhpcy5fZWRnZSA9IG5ldyBXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90RWRnZSh0aGlzLl9zbmFwc2hvdCwgdGhpcy5fbm9kZS5yYXdFZGdlcywg
ZWRnZUluZGV4KTsKKyAgICB9LAorCisgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0aGlzLl9lZGdlLnRvU3RyaW5nKCk7CisgICAgfSwKKworICAgIGdldCB0
eXBlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9lZGdlLnR5cGU7CisgICAgfQorfQor
CitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmV0YWluZXJFZGdlSXRlcmF0b3IgPSBmdW5jdGlv
bihyZXRhaW5lcikKK3sKKyAgICB0aGlzLnJldGFpbmVyID0gcmV0YWluZXI7Cit9CisKK1dlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RSZXRhaW5lckVkZ2VJdGVyYXRvci5wcm90b3R5cGUgPSB7Cisg
ICAgZmlyc3Q6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMucmV0YWluZXIucmV0YWlu
ZXJJbmRleCA9IDA7CisgICAgfSwKKworICAgIGhhc05leHQ6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0aGlzLnJldGFpbmVyLnJldGFpbmVySW5kZXggPCB0aGlzLnJldGFpbmVy
Ll9yZXRhaW5lcnMubGVuZ3RoOworICAgIH0sCisKKyAgICBnZXQgaW5kZXgoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMucmV0YWluZXIucmV0YWluZXJJbmRleDsKKyAgICB9LAorCisgICAg
c2V0IGluZGV4KG5ld0luZGV4KQorICAgIHsKKyAgICAgICAgdGhpcy5yZXRhaW5lci5yZXRhaW5l
ckluZGV4ID0gbmV3SW5kZXg7CisgICAgfSwKKworICAgIGdldCBpdGVtKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0aGlzLnJldGFpbmVyOworICAgIH0sCisKKyAgICBuZXh0OiBmdW5jdGlvbigp
CisgICAgeworICAgICAgICArK3RoaXMucmV0YWluZXIucmV0YWluZXJJbmRleDsKKyAgICB9Cit9
OworCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZSA9IGZ1bmN0aW9uKHNuYXBzaG90LCBu
b2RlSW5kZXgpCiB7CiAgICAgdGhpcy5fc25hcHNob3QgPSBzbmFwc2hvdDsKQEAgLTI3Miw3ICs0
MDAsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZS5wcm90b3R5cGUgPSB7CiAKICAg
ICBnZXQgcmV0YWluZXJzKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdEVkZ2VJdGVyYXRvcihuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVk
Z2UodGhpcy5fc25hcHNob3QsIHRoaXMuX3NuYXBzaG90LnJldGFpbmVycyh0aGlzKSkpOworICAg
ICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RSZXRhaW5lckVkZ2VJdGVy
YXRvcihuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJldGFpbmVyRWRnZSh0aGlzLl9zbmFw
c2hvdCwgdGhpcy5fc25hcHNob3QucmV0YWluZXJzKHRoaXMpKSk7CiAgICAgfSwKIAogICAgIGdl
dCBzZWxmU2l6ZSgpCkBAIC0zOTMsMTIgKzUyMSwxMCBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90LnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9ub2RlczsKICAg
ICAgICAgZGVsZXRlIHRoaXMuX3N0cmluZ3M7Ci0gICAgICAgIGlmICh0aGlzLl9pZHNNYXApCi0g
ICAgICAgICAgICBkZWxldGUgdGhpcy5faWRzTWFwOwotICAgICAgICBpZiAodGhpcy5fcmV0YWlu
ZXJzKSB7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fcmV0YWluZXJzOwotICAgICAgICAgICAg
ZGVsZXRlIHRoaXMuX25vZGVzVG9SZXRhaW5lcnM7Ci0gICAgICAgIH0KKyAgICAgICAgZGVsZXRl
IHRoaXMuX2lkc0xpc3Q7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9yZXRhaW5lcnM7CisgICAgICAg
IGRlbGV0ZSB0aGlzLl9yZXRhaW5lckluZGV4OworICAgICAgICBkZWxldGUgdGhpcy5fbm9kZUlu
ZGV4OwogICAgICAgICBpZiAodGhpcy5fYWdncmVnYXRlcykgewogICAgICAgICAgICAgZGVsZXRl
IHRoaXMuX2FnZ3JlZ2F0ZXM7CiAgICAgICAgICAgICB0aGlzLl9hZ2dyZWdhdGVzV2l0aEluZGV4
ZXMgPSBmYWxzZTsKQEAgLTQzNywxNiArNTYzLDExIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3QucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gdGhpcy5yb290Tm9kZS5yZXRhaW5lZFNp
emU7CiAgICAgfSwKIAotICAgIGdldCBpZHNNYXAoKQorICAgIGhhc0lkOiBmdW5jdGlvbihpZCkK
ICAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9pZHNNYXApCi0gICAgICAgICAgICByZXR1cm4gdGhp
cy5faWRzTWFwOwotCi0gICAgICAgIHRoaXMuX2lkc01hcCA9IFtdOwotICAgICAgICBmb3IgKHZh
ciBpdGVyID0gdGhpcy5hbGxOb2RlczsgaXRlci5oYXNOZXh0KCk7IGl0ZXIubmV4dCgpKSB7Ci0g
ICAgICAgICAgICB0aGlzLl9pZHNNYXBbaXRlci5ub2RlLmlkXSA9IHRydWU7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHRoaXMuX2lkc01hcDsKKyAgICAgICAgaWYgKCF0aGlzLl9pZHNMaXN0
KQorICAgICAgICAgICAgdGhpcy5fYnVpbGRJZHNMaXN0KCk7CisgICAgICAgIHJldHVybiB0aGlz
Ll9pZHNMaXN0LmJpbmFyeUluZGV4T2YoaWQsIHRoaXMuX251bWJlcnNDb21wYXJhdG9yKSA+PSAw
OwogICAgIH0sCiAKICAgICByZXRhaW5lcnM6IGZ1bmN0aW9uKG5vZGUpCkBAIC00NTQsOCArNTc1
LDggQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlm
ICghdGhpcy5fcmV0YWluZXJzKQogICAgICAgICAgICAgdGhpcy5fYnVpbGRSZXRhaW5lcnMoKTsK
IAotICAgICAgICB2YXIgcmV0SW5kZXhGcm9tID0gdGhpcy5fbm9kZXNUb1JldGFpbmVyc1tub2Rl
Lm5vZGVJbmRleF07Ci0gICAgICAgIHZhciByZXRJbmRleFRvID0gdGhpcy5fbm9kZXNUb1JldGFp
bmVyc1tub2RlLl9uZXh0Tm9kZUluZGV4XTsKKyAgICAgICAgdmFyIHJldEluZGV4RnJvbSA9IHRo
aXMuX2dldFJldGFpbmVySW5kZXgobm9kZS5ub2RlSW5kZXgpOworICAgICAgICB2YXIgcmV0SW5k
ZXhUbyA9IHRoaXMuX2dldFJldGFpbmVySW5kZXgobm9kZS5fbmV4dE5vZGVJbmRleCk7CiAgICAg
ICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEFycmF5U2xpY2UodGhpcywg
Il9yZXRhaW5lcnMiLCByZXRJbmRleEZyb20sIHJldEluZGV4VG8pOwogICAgIH0sCiAKQEAgLTQ3
MCw1MSArNTkxLDM5IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlID0gewog
CiAgICAgX2J1aWxkUmV0YWluZXJzOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB0aGlzLl9u
b2Rlc1RvUmV0YWluZXJzID0gW107CisgICAgICAgIGlmICghdGhpcy5fbm9kZUluZGV4KQorICAg
ICAgICAgICAgdGhpcy5fYnVpbGROb2RlSW5kZXgoKTsKKworICAgICAgICB0aGlzLl9yZXRhaW5l
ckluZGV4ID0gbmV3IEFycmF5KHRoaXMuX25vZGVJbmRleC5sZW5ndGgpOworICAgICAgICBmb3Ig
KHZhciBpID0gMCwgbCA9IHRoaXMuX3JldGFpbmVySW5kZXgubGVuZ3RoOyBpIDwgbDsgKytpKQor
ICAgICAgICAgICAgdGhpcy5fcmV0YWluZXJJbmRleFtpXSA9IDA7CiAgICAgICAgIGZvciAodmFy
IG5vZGVzSXRlciA9IHRoaXMuYWxsTm9kZXM7IG5vZGVzSXRlci5oYXNOZXh0KCk7IG5vZGVzSXRl
ci5uZXh0KCkpIHsKICAgICAgICAgICAgIHZhciBub2RlID0gbm9kZXNJdGVyLm5vZGU7Ci0gICAg
ICAgICAgICBpZiAoIShub2RlLm5vZGVJbmRleCBpbiB0aGlzLl9ub2Rlc1RvUmV0YWluZXJzKSkK
LSAgICAgICAgICAgICAgICB0aGlzLl9ub2Rlc1RvUmV0YWluZXJzW25vZGUubm9kZUluZGV4XSA9
IDA7CiAgICAgICAgICAgICBmb3IgKHZhciBlZGdlc0l0ZXIgPSBub2RlLmVkZ2VzOyBlZGdlc0l0
ZXIuaGFzTmV4dCgpOyBlZGdlc0l0ZXIubmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgdmFyIGVk
Z2UgPSBlZGdlc0l0ZXIuZWRnZTsKICAgICAgICAgICAgICAgICB2YXIgbm9kZUluZGV4ID0gZWRn
ZS5ub2RlSW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYgKCEobm9kZUluZGV4IGluIHRoaXMuX25v
ZGVzVG9SZXRhaW5lcnMpKQotICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub2Rlc1RvUmV0YWlu
ZXJzW25vZGVJbmRleF0gPSAwOwotICAgICAgICAgICAgICAgIHRoaXMuX25vZGVzVG9SZXRhaW5l
cnNbbm9kZUluZGV4XSArPSB0aGlzLl9lZGdlRmllbGRzQ291bnQ7CisgICAgICAgICAgICAgICAg
dmFyIHBvc2l0aW9uID0gdGhpcy5fZmluZE5vZGVQb3NpdGlvbkluSW5kZXgobm9kZUluZGV4KTsK
KyAgICAgICAgICAgICAgICArK3RoaXMuX3JldGFpbmVySW5kZXhbcG9zaXRpb25dOwogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIG5vZGVzSXRlciA9IHRoaXMuYWxsTm9kZXM7Ci0g
ICAgICAgIHZhciBub2RlID0gbm9kZXNJdGVyLm5vZGU7Ci0gICAgICAgIHZhciBwcmV2SW5kZXgg
PSB0aGlzLl9ub2Rlc1RvUmV0YWluZXJzW25vZGUubm9kZUluZGV4XSA9IDA7Ci0gICAgICAgIHZh
ciBwcmV2UmV0c0NvdW50ID0gdGhpcy5fbm9kZXNUb1JldGFpbmVyc1tub2RlLm5vZGVJbmRleF07
Ci0gICAgICAgIG5vZGVzSXRlci5uZXh0KCk7Ci0gICAgICAgIGZvciAoOyBub2Rlc0l0ZXIuaGFz
TmV4dCgpOyBub2Rlc0l0ZXIubmV4dCgpKSB7Ci0gICAgICAgICAgICBub2RlID0gbm9kZXNJdGVy
Lm5vZGU7Ci0gICAgICAgICAgICB2YXIgc2F2ZWRSZWZzQ291bnQgPSB0aGlzLl9ub2Rlc1RvUmV0
YWluZXJzW25vZGUubm9kZUluZGV4XTsKLSAgICAgICAgICAgIHRoaXMuX25vZGVzVG9SZXRhaW5l
cnNbbm9kZS5ub2RlSW5kZXhdID0gcHJldkluZGV4ICsgcHJldlJldHNDb3VudDsKLSAgICAgICAg
ICAgIHByZXZJbmRleCA9IHRoaXMuX25vZGVzVG9SZXRhaW5lcnNbbm9kZS5ub2RlSW5kZXhdOwot
ICAgICAgICAgICAgcHJldlJldHNDb3VudCA9IHNhdmVkUmVmc0NvdW50OworICAgICAgICB2YXIg
cmV0YWluZXJDb3VudCA9IDA7CisgICAgICAgIGZvciAoaSA9IDAsIGwgPSB0aGlzLl9yZXRhaW5l
ckluZGV4Lmxlbmd0aDsgaSA8IGw7ICsraSkKKyAgICAgICAgICAgIHJldGFpbmVyQ291bnQgKz0g
dGhpcy5fcmV0YWluZXJJbmRleFtpXTsKKyAgICAgICAgdGhpcy5fcmV0YWluZXJzID0gbmV3IEFy
cmF5KHJldGFpbmVyQ291bnQgKyAxKTsKKyAgICAgICAgdmFyIHJldGFpbmVyUG9zaXRpb24gPSAw
OworICAgICAgICBmb3IgKGkgPSAwLCBsID0gdGhpcy5fcmV0YWluZXJJbmRleC5sZW5ndGg7IGkg
PCBsOyArK2kpIHsKKyAgICAgICAgICAgIHJldGFpbmVyQ291bnQgPSB0aGlzLl9yZXRhaW5lcnNb
cmV0YWluZXJQb3NpdGlvbl0gPSB0aGlzLl9yZXRhaW5lckluZGV4W2ldOworICAgICAgICAgICAg
dGhpcy5fcmV0YWluZXJJbmRleFtpXSA9IHJldGFpbmVyUG9zaXRpb247CisgICAgICAgICAgICBy
ZXRhaW5lclBvc2l0aW9uICs9IHJldGFpbmVyQ291bnQ7CiAgICAgICAgIH0KLSAgICAgICAgdGhp
cy5fcmV0YWluZXJzID0gbmV3IEFycmF5KHByZXZJbmRleCArIHByZXZSZXRzQ291bnQpOwotICAg
ICAgICB0aGlzLl9ub2Rlc1RvUmV0YWluZXJzW3RoaXMuX25vZGVzLmxlbmd0aF0gPSB0aGlzLl9y
ZXRhaW5lcnMubGVuZ3RoOwogICAgICAgICBmb3IgKG5vZGVzSXRlciA9IHRoaXMuYWxsTm9kZXM7
IG5vZGVzSXRlci5oYXNOZXh0KCk7IG5vZGVzSXRlci5uZXh0KCkpIHsKLSAgICAgICAgICAgIG5v
ZGUgPSBub2Rlc0l0ZXIubm9kZTsKLSAgICAgICAgICAgIHZhciByZXRzQ291bnQgPSB0aGlzLl9u
b2Rlc1RvUmV0YWluZXJzW25vZGUuX25leHROb2RlSW5kZXhdIC0gdGhpcy5fbm9kZXNUb1JldGFp
bmVyc1tub2RlLm5vZGVJbmRleF07Ci0gICAgICAgICAgICBpZiAocmV0c0NvdW50ID4gMCkgewot
ICAgICAgICAgICAgICAgIHRoaXMuX3JldGFpbmVyc1t0aGlzLl9ub2Rlc1RvUmV0YWluZXJzW25v
ZGUubm9kZUluZGV4XV0gPSByZXRzQ291bnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgZm9yIChub2Rlc0l0ZXIgPSB0aGlzLmFsbE5vZGVzOyBub2Rlc0l0ZXIuaGFzTmV4dCgp
OyBub2Rlc0l0ZXIubmV4dCgpKSB7Ci0gICAgICAgICAgICBub2RlID0gbm9kZXNJdGVyLm5vZGU7
CisgICAgICAgICAgICB2YXIgbm9kZSA9IG5vZGVzSXRlci5ub2RlOwogICAgICAgICAgICAgZm9y
ICh2YXIgZWRnZXNJdGVyID0gbm9kZS5lZGdlczsgZWRnZXNJdGVyLmhhc05leHQoKTsgZWRnZXNJ
dGVyLm5leHQoKSkgewogICAgICAgICAgICAgICAgIHZhciBlZGdlID0gZWRnZXNJdGVyLmVkZ2U7
CiAgICAgICAgICAgICAgICAgdmFyIG5vZGVJbmRleCA9IGVkZ2Uubm9kZUluZGV4OwotICAgICAg
ICAgICAgICAgIHZhciByZXRJbmRleCA9IHRoaXMuX25vZGVzVG9SZXRhaW5lcnNbbm9kZUluZGV4
XTsKLSAgICAgICAgICAgICAgICB0aGlzLl9yZXRhaW5lcnNbcmV0SW5kZXhdIC09IHRoaXMuX2Vk
Z2VGaWVsZHNDb3VudDsKLSAgICAgICAgICAgICAgICB2YXIgaWR4ID0gcmV0SW5kZXggKyB0aGlz
Ll9yZXRhaW5lcnNbcmV0SW5kZXhdOwotICAgICAgICAgICAgICAgIHRoaXMuX3JldGFpbmVyc1tp
ZHggKyB0aGlzLl9lZGdlVHlwZU9mZnNldF0gPSBlZGdlLl90eXBlKCk7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5fcmV0YWluZXJzW2lkeCArIHRoaXMuX2VkZ2VOYW1lT2Zmc2V0XSA9IGVkZ2UuX25h
bWVPckluZGV4OwotICAgICAgICAgICAgICAgIHRoaXMuX3JldGFpbmVyc1tpZHggKyB0aGlzLl9l
ZGdlVG9Ob2RlT2Zmc2V0XSA9IG5vZGUubm9kZUluZGV4OworICAgICAgICAgICAgICAgIHZhciBy
ZXRJbmRleCA9IHRoaXMuX2dldFJldGFpbmVySW5kZXgobm9kZUluZGV4KTsKKyAgICAgICAgICAg
ICAgICB2YXIgaWR4ID0gcmV0SW5kZXggKyAoLS10aGlzLl9yZXRhaW5lcnNbcmV0SW5kZXhdKTsK
KyAgICAgICAgICAgICAgICB0aGlzLl9yZXRhaW5lcnNbaWR4XSA9IG5vZGUubm9kZUluZGV4ICsg
dGhpcy5fZmlyc3RFZGdlT2Zmc2V0ICsgZWRnZS5lZGdlSW5kZXg7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9LApAQCAtNTYxLDYgKzY3MCw1MyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fYWdncmVnYXRlc1dpdGhJbmRleGVz
ID0gdHJ1ZTsKICAgICB9LAogCisgICAgX2J1aWxkSWRzTGlzdDogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgdmFyIGNvdW50ID0gMDsKKyAgICAgICAgZm9yICh2YXIgbm9kZXNJdGVyID0gdGhp
cy5hbGxOb2Rlczsgbm9kZXNJdGVyLmhhc05leHQoKTsgbm9kZXNJdGVyLm5leHQoKSwgKytjb3Vu
dCk7CisgICAgICAgIHRoaXMuX2lkc0xpc3QgPSBuZXcgQXJyYXkoY291bnQpOworICAgICAgICBj
b3VudCA9IDA7CisgICAgICAgIGZvciAobm9kZXNJdGVyID0gdGhpcy5hbGxOb2Rlczsgbm9kZXNJ
dGVyLmhhc05leHQoKTsgbm9kZXNJdGVyLm5leHQoKSwgKytjb3VudCkKKyAgICAgICAgICAgIHRo
aXMuX2lkc0xpc3RbY291bnRdID0gbm9kZXNJdGVyLm5vZGUuaWQ7CisgICAgICAgIHRoaXMuX2lk
c0xpc3Quc29ydCh0aGlzLl9udW1iZXJzQ29tcGFyYXRvcik7CisgICAgfSwKKworICAgIF9idWls
ZE5vZGVJbmRleDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGNvdW50ID0gMDsKKyAg
ICAgICAgZm9yICh2YXIgbm9kZXNJdGVyID0gdGhpcy5hbGxOb2Rlczsgbm9kZXNJdGVyLmhhc05l
eHQoKTsgbm9kZXNJdGVyLm5leHQoKSwgKytjb3VudCk7CisgICAgICAgIHRoaXMuX25vZGVJbmRl
eCA9IG5ldyBBcnJheShjb3VudCArIDEpOworICAgICAgICBjb3VudCA9IDA7CisgICAgICAgIGZv
ciAobm9kZXNJdGVyID0gdGhpcy5hbGxOb2Rlczsgbm9kZXNJdGVyLmhhc05leHQoKTsgbm9kZXNJ
dGVyLm5leHQoKSwgKytjb3VudCkKKyAgICAgICAgICAgIHRoaXMuX25vZGVJbmRleFtjb3VudF0g
PSBub2Rlc0l0ZXIuaW5kZXg7CisgICAgICAgIHRoaXMuX25vZGVJbmRleFtjb3VudF0gPSB0aGlz
Ll9ub2Rlcy5sZW5ndGg7CisgICAgfSwKKworICAgIF9maW5kTm9kZVBvc2l0aW9uSW5JbmRleDog
ZnVuY3Rpb24oaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gYmluYXJ5U2VhcmNoKGluZGV4
LCB0aGlzLl9ub2RlSW5kZXgsIHRoaXMuX251bWJlcnNDb21wYXJhdG9yKTsKKyAgICB9LAorCisg
ICAgX2ZpbmROZWFyZXN0Tm9kZUluZGV4OiBmdW5jdGlvbihpbmRleCkKKyAgICB7CisgICAgICAg
IHZhciByZXN1bHQgPSB0aGlzLl9maW5kTm9kZVBvc2l0aW9uSW5JbmRleChpbmRleCk7CisgICAg
ICAgIGlmIChyZXN1bHQgPCAwKSB7CisgICAgICAgICAgICByZXN1bHQgPSAtcmVzdWx0IC0gMTsK
KyAgICAgICAgICAgIG5vZGVJbmRleCA9IHRoaXMuX25vZGVJbmRleFtyZXN1bHRdOworICAgICAg
ICAgICAgLy8gQmluYXJ5IHNlYXJjaCBjYW4gcmV0dXJuIGVpdGhlciBtYXhpbXVtIGxvd2VyIHZh
bHVlLCBvciBtaW5pbXVtIGhpZ2hlciB2YWx1ZS4KKyAgICAgICAgICAgIGlmIChub2RlSW5kZXgg
PiBpbmRleCkKKyAgICAgICAgICAgICAgICBub2RlSW5kZXggPSB0aGlzLl9ub2RlSW5kZXhbcmVz
dWx0IC0gMV07CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdmFyIG5vZGVJbmRleCA9IHRo
aXMuX25vZGVJbmRleFtyZXN1bHRdOworICAgICAgICByZXR1cm4gbm9kZUluZGV4OworICAgIH0s
CisKKyAgICBfZ2V0UmV0YWluZXJJbmRleDogZnVuY3Rpb24obm9kZUluZGV4KQorICAgIHsKKyAg
ICAgICAgdmFyIG5vZGVQb3NpdGlvbiA9IHRoaXMuX2ZpbmROb2RlUG9zaXRpb25JbkluZGV4KG5v
ZGVJbmRleCk7CisgICAgICAgIHJldHVybiB0aGlzLl9yZXRhaW5lckluZGV4W25vZGVQb3NpdGlv
bl07CisgICAgfSwKKyAgCiAgICAgX21hcmtJbnZpc2libGVFZGdlczogZnVuY3Rpb24oKQogICAg
IHsKICAgICAgICAgLy8gTWFyayBoaWRkZW4gZWRnZXMgb2YgZ2xvYmFsIG9iamVjdHMgYXMgaW52
aXNpYmxlLgpAQCAtNTg2LDYgKzc0MiwxMSBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm9kZXNbZ2xvYmFsT2JqRWRn
ZS5fZWRnZXMuX3N0YXJ0ICsgZ2xvYmFsT2JqRWRnZS5lZGdlSW5kZXggKyB0aGlzLl9lZGdlVHlw
ZU9mZnNldF0gPSB0aGlzLl9lZGdlSW52aXNpYmxlVHlwZTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQorICAgIH0sCisKKyAgICBfbnVtYmVyc0NvbXBhcmF0b3I6IGZ1bmN0aW9uKGEsIGIpCisg
ICAgeworICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IChhID4gYiA/IDEgOiAwKTsKICAgICB9
CiB9OwogCkBAIC04ODEsNyArMTA0Miw3IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQYXRo
RmluZGVyLnByb3RvdHlwZSA9IHsKIAogICAgIGdldCBfbGFzdEVkZ2UoKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuX2xhc3RFZGdlSXRlci5lZGdlOworICAgICAgICByZXR1cm4gdGhpcy5f
bGFzdEVkZ2VJdGVyLml0ZW07CiAgICAgfSwKIAogICAgIF9za2lwRWRnZTogZnVuY3Rpb24oZWRn
ZSkKQEAgLTg5NCw3ICsxMDU1LDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFBhdGhGaW5k
ZXIucHJvdG90eXBlID0gewogICAgIF9uZXh0RWRnZUl0ZXI6IGZ1bmN0aW9uKCkKICAgICB7CiAg
ICAgICAgIHZhciBpdGVyID0gdGhpcy5fbGFzdEVkZ2VJdGVyOwotICAgICAgICB3aGlsZSAodGhp
cy5fc2tpcEVkZ2UoaXRlci5lZGdlKSAmJiBpdGVyLmhhc05leHQoKSkKKyAgICAgICAgd2hpbGUg
KHRoaXMuX3NraXBFZGdlKGl0ZXIuaXRlbSkgJiYgaXRlci5oYXNOZXh0KCkpCiAgICAgICAgICAg
ICBpdGVyLm5leHQoKTsKICAgICAgICAgcmV0dXJuIGl0ZXI7CiAgICAgfSwKQEAgLTkxNyw3ICsx
MDc4LDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFBhdGhGaW5kZXIucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLl9jdXJyZW50UGF0aC5s
ZW5ndGggPCB0aGlzLl9tYXhMZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaXRlciA9IHRoaXMuX25leHRFZGdlSXRlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaXRlci5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLl9hcHBlbmRUb0N1cnJlbnRQYXRoKGl0ZXIuZWRnZS5ub2RlLnJldGFpbmVy
cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmRUb0N1
cnJlbnRQYXRoKGl0ZXIuaXRlbS5ub2RlLnJldGFpbmVycyk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTkzNCw3ICsxMDk1
LDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFBhdGhGaW5kZXIucHJvdG90eXBlID0gewog
ICAgICAgICAgICAgd2hpbGUgKHRoaXMuX2N1cnJlbnRQYXRoLmxlbmd0aCA8IHRoaXMuX21heExl
bmd0aCkgewogICAgICAgICAgICAgICAgIHZhciBpdGVyID0gdGhpcy5fbmV4dEVkZ2VJdGVyKCk7
CiAgICAgICAgICAgICAgICAgaWYgKGl0ZXIuaGFzTmV4dCgpKQotICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9hcHBlbmRUb0N1cnJlbnRQYXRoKGl0ZXIuZWRnZS5ub2RlLnJldGFpbmVycyk7Cisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZFRvQ3VycmVudFBhdGgoaXRlci5pdGVtLm5v
ZGUucmV0YWluZXJzKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtOTU2LDggKzExMTcsOCBAQCBXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90UGF0aEZpbmRlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm4g
IiI7CiAgICAgICAgIHZhciBzUGF0aCA9IFtdOwogICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8
IHBhdGgubGVuZ3RoOyArK2opCi0gICAgICAgICAgICBzUGF0aC5wdXNoKHBhdGhbal0uZWRnZS50
b1N0cmluZygpKTsKLSAgICAgICAgc1BhdGgucHVzaCh0aGlzLl9ub2RlVG9TdHJpbmcocGF0aFtw
YXRoLmxlbmd0aCAtIDFdLmVkZ2Uubm9kZSkpOworICAgICAgICAgICAgc1BhdGgucHVzaChwYXRo
W2pdLml0ZW0udG9TdHJpbmcoKSk7CisgICAgICAgIHNQYXRoLnB1c2godGhpcy5fbm9kZVRvU3Ry
aW5nKHBhdGhbcGF0aC5sZW5ndGggLSAxXS5pdGVtLm5vZGUpKTsKICAgICAgICAgc1BhdGgucmV2
ZXJzZSgpOwogICAgICAgICByZXR1cm4gc1BhdGguam9pbigiIik7CiAgICAgfQo=
</data>
<flag name="review"
          id="78022"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="78023"
          type_id="3"
          status="-"
          setter="mnaganov"
    />
          </attachment>
      

    </bug>

</bugzilla>