<?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>75632</bug_id>
          
          <creation_ts>2012-01-05 10:49:08 -0800</creation_ts>
          <short_desc>[Chromium] Avoid unnecessary TextureManager::reduceMemoryToLimit()</short_desc>
          <delta_ts>2012-01-09 12:17:04 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          
          <blocked>72078</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Xianzhu Wang">wangxianzhu</reporter>
          <assigned_to name="Xianzhu Wang">wangxianzhu</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>530427</commentid>
    <comment_count>0</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-01-05 10:49:08 -0800</bug_when>
    <thetext>(Split from bug 72078)

Unnecessary TextureManager::reduceMemoryToLimit() will cause some tile textures that are required soon to be unnecessarily removed/replaced, when required texture memory is higher than the reclaim limit but lower than the absolute limit. This will and degrade performance, sometimes significantly.

For example, CCLayerTreeHost::setViewport will be called during scrolling. The original code would call TextureManager::reduceMemoryToLimit(), causing some textures unnecessarily discarded and then recreated repeatedly during scrolling.

It&apos;s also unnecessary to call TextureManager::reduceMemoryToLimit() from TextureManager::setPreferredMemoryLimitBytes() because the limit is not a hard limit. The callers should call reduceMemoryToLimit() explicitly if it wants it when setting the preferred memory limit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530805</commentid>
    <comment_count>1</comment_count>
      <attachid>121372</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-01-05 17:13:48 -0800</bug_when>
    <thetext>Created attachment 121372
patch (updated based on the patch in bug 72078)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531338</commentid>
    <comment_count>2</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-01-06 13:33:14 -0800</bug_when>
    <thetext>Nice catch.  Calling reduceMemoryToLimit when setting limits really seems like the wrong thing to be doing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531549</commentid>
    <comment_count>3</comment_count>
      <attachid>121372</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-06 17:54:27 -0800</bug_when>
    <thetext>Comment on attachment 121372
patch (updated based on the patch in bug 72078)

R=me, great tests! Set cq? when you&apos;re ready for this to land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532248</commentid>
    <comment_count>4</comment_count>
      <attachid>121372</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-01-09 09:51:27 -0800</bug_when>
    <thetext>Comment on attachment 121372
patch (updated based on the patch in bug 72078)

Thanks for review. Try to cq+ by myself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532410</commentid>
    <comment_count>5</comment_count>
      <attachid>121372</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-09 12:16:59 -0800</bug_when>
    <thetext>Comment on attachment 121372
patch (updated based on the patch in bug 72078)

Clearing flags on attachment: 121372

Committed r104474: &lt;http://trac.webkit.org/changeset/104474&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532411</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-09 12:17:04 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121372</attachid>
            <date>2012-01-05 17:13:48 -0800</date>
            <delta_ts>2012-01-09 12:16:59 -0800</delta_ts>
            <desc>patch (updated based on the patch in bug 72078)</desc>
            <filename>75632</filename>
            <type>text/plain</type>
            <size>27517</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNDIzMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDEyLTAxLTA1ICBYaWFuemh1
IFdhbmcgIDx3YW5neGlhbnpodUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQXZvaWQgdW5uZWNl
c3NhcnkgVGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeVRvTGltaXQoKS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NjMyCisKKyAgICAgICAgVW5u
ZWNlc3NhcnkgVGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeVRvTGltaXQoKSB3aWxsIGNhdXNl
IHNvbWUgdGlsZQorICAgICAgICB0ZXh0dXJlcyB0aGF0IGFyZSByZXF1aXJlZCBzb29uIHRvIGJl
IHVubmVjZXNzYXJpbHkgcmVtb3ZlZC9yZXBsYWNlZCwKKyAgICAgICAgYW5kIGRlZ3JhZGUgcGVy
Zm9ybWFuY2UsIHNvbWV0aW1lcyBzaWduaWZpY2FudGx5LgorCisgICAgICAgIEZvciBleGFtcGxl
LCBDQ0xheWVyVHJlZUhvc3Q6OnNldFZpZXdwb3J0IHdpbGwgYmUgY2FsbGVkIGR1cmluZworICAg
ICAgICBzY3JvbGxpbmcuIFRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIGNhbGwgVGV4dHVyZU1hbmFn
ZXI6OnJlZHVjZU1lbW9yeVRvTGltaXQoKSwKKyAgICAgICAgY2F1c2luZyBzb21lIHRleHR1cmVz
IHVubmVjZXNzYXJpbHkgZGlzY2FyZGVkIGFuZCB0aGVuIHJlY3JlYXRlZAorICAgICAgICByZXBl
YXRlZGx5IGR1cmluZyBzY3JvbGxpbmcuCisKKyAgICAgICAgSXQncyBhbHNvIHVubmVjZXNzYXJ5
IHRvIGNhbGwgVGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeVRvTGltaXQoKQorICAgICAgICBm
cm9tIFRleHR1cmVNYW5hZ2VyOjpzZXRQcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKCkgYmVjYXVz
ZSB0aGUgbGltaXQKKyAgICAgICAgaXMgbm90IGEgaGFyZCBsaW1pdC4gVGhlIGNhbGxlcnMgc2hv
dWxkIGNhbGwgcmVkdWNlTWVtb3J5VG9MaW1pdCgpCisgICAgICAgIGV4cGxpY2l0bHkgaWYgaXQg
d2FudHMgaXQgd2hlbiBzZXR0aW5nIHRoZSBwcmVmZXJyZWQgbWVtb3J5IGxpbWl0LgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiB3ZWJraXRf
dW5pdF90ZXN0cyAtLWd0ZXN0X2ZpbHRlcj1UZXh0dXJlTWFuYWdlclRlc3QuKjpDQ0xheWVyVHJl
ZUhvc3RUZXN0U2V0Vmlld3BvcnRTaXplLioKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclJlbmRlcmVyQ2hyb21pdW06OmZpbmlzaERyYXdpbmdGcmFtZSk6IENhbGwgcmVkdWNlTWVt
b3J5VG9MaW1pdCgpIGV4cGxpY2l0bHkKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UZXh0dXJlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdl
cjo6c2V0UHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcyk6IFJlbW92ZWQgY2FsbCB0byByZWR1Y2VN
ZW1vcnlUb0xpbWl0KCkuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
ZmluaXNoQ29tbWl0T25JbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdDo6c2V0Vmlld3BvcnRTaXplKTogQ2hhbmdlZCBuYW1lIGZyb20gc2V0Vmlld3BvcnQoKS4g
Q2hlY2sgY2hhbmdlIG9mIHZpZXdwb3J0U2l6ZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFZpZXdwb3J0U2l6ZSk6IENoYW5nZWQgbmFtZSBm
cm9tIHNldFZpZXdwb3J0KCkKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisKIDIwMTItMDEtMDUgIEFkYW0gQmFydGggIDxhYmFy
dGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBJbnRyb2R1Y2UgUGxhdGZvcm0gbmFtZXNwYWNlIGZv
ciBXZWJDb3JlL3BsYXRmb3JtCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHAJKHJldmlzaW9uIDEwNDIzMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY3OSwxMSArNjc5LDkgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmZpbmlzaERyYXdp
bgogCiAgICAgc2l6ZV90IGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMgPSBtX2NvbnRlbnRzVGV4dHVy
ZUFsbG9jYXRvci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCk7CiAgICAgc2l6ZV90IHJlY2xhaW1M
aW1pdCA9IFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSk7
Ci0gICAgaWYgKHJlY2xhaW1MaW1pdCA+IGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMpCi0gICAgICAg
IG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRQcmVmZXJyZWRNZW1vcnlMaW1pdEJ5
dGVzKHJlY2xhaW1MaW1pdCAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnNldFByZWZlcnJlZE1lbW9yeUxp
bWl0Qnl0ZXMoMCk7Ci0KKyAgICBzaXplX3QgcHJlZmVycmVkTGltaXQgPSByZWNsYWltTGltaXQg
PiBjb250ZW50c01lbW9yeVVzZUJ5dGVzID8gcmVjbGFpbUxpbWl0IC0gY29udGVudHNNZW1vcnlV
c2VCeXRlcyA6IDA7CisgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnNldFByZWZl
cnJlZE1lbW9yeUxpbWl0Qnl0ZXMocHJlZmVycmVkTGltaXQpOworICAgIG1fcmVuZGVyU3VyZmFj
ZVRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KHByZWZlcnJlZExpbWl0KTsKICAg
ICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1f
cmVuZGVyU3VyZmFjZVRleHR1cmVBbGxvY2F0b3IuZ2V0KCkpOwogCiAgICAgaWYgKHNldHRpbmdz
KCkuY29tcG9zaXRlT2Zmc2NyZWVuKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcAkocmV2
aXNpb24gMTA0MjMyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGV4dHVyZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDYgQEAg
dm9pZCBUZXh0dXJlTWFuYWdlcjo6c2V0TWF4TWVtb3J5TGltaXRCeQogCiB2b2lkIFRleHR1cmVN
YW5hZ2VyOjpzZXRQcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKHNpemVfdCBtZW1vcnlMaW1pdEJ5
dGVzKQogewotICAgIHJlZHVjZU1lbW9yeVRvTGltaXQobWVtb3J5TGltaXRCeXRlcyk7CiAgICAg
bV9wcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzID0gbWVtb3J5TGltaXRCeXRlczsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFn
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UZXh0dXJlTWFuYWdlci5oCShyZXZpc2lvbiAxMDQyMzIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC02NCw3ICs2NCw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgc2l6ZV90IG1lbW9yeVVz
ZUJ5dGVzKGNvbnN0IEludFNpemUmLCBHQzNEZW51bSBmb3JtYXQpOwogCiAgICAgdm9pZCBzZXRN
YXhNZW1vcnlMaW1pdEJ5dGVzKHNpemVfdCk7CisgICAgc2l6ZV90IG1heE1lbW9yeUxpbWl0Qnl0
ZXMoKSB7IHJldHVybiBtX21heE1lbW9yeUxpbWl0Qnl0ZXM7IH0KICAgICB2b2lkIHNldFByZWZl
cnJlZE1lbW9yeUxpbWl0Qnl0ZXMoc2l6ZV90KTsKKyAgICBzaXplX3QgcHJlZmVycmVkTWVtb3J5
TGltaXRCeXRlcygpIHsgcmV0dXJuIG1fcHJlZmVycmVkTWVtb3J5TGltaXRCeXRlczsgfQogCiAg
ICAgVGV4dHVyZVRva2VuIGdldFRva2VuKCk7CiAgICAgdm9pZCByZWxlYXNlVG9rZW4oVGV4dHVy
ZVRva2VuKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAkocmV2aXNpb24g
MTA0MjMyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDcgKzE1MSw3IEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0OjpmaW5pc2hDb21taXRPbkltcGwKIAogICAgIGhvc3RJbXBsLT5z
ZXRTb3VyY2VGcmFtZU51bWJlcihmcmFtZU51bWJlcigpKTsKICAgICBob3N0SW1wbC0+c2V0SGF2
ZVdoZWVsRXZlbnRIYW5kbGVycyhtX2hhdmVXaGVlbEV2ZW50SGFuZGxlcnMpOwotICAgIGhvc3RJ
bXBsLT5zZXRWaWV3cG9ydCh2aWV3cG9ydFNpemUoKSk7CisgICAgaG9zdEltcGwtPnNldFZpZXdw
b3J0U2l6ZSh2aWV3cG9ydFNpemUoKSk7CiAgICAgaG9zdEltcGwtPnNldFBhZ2VTY2FsZUZhY3Rv
ckFuZExpbWl0cyhwYWdlU2NhbGUoKSwgbV9taW5QYWdlU2NhbGUsIG1fbWF4UGFnZVNjYWxlKTsK
IAogICAgIG1fZnJhbWVOdW1iZXIrKzsKQEAgLTI0Miw4ICsyNDIsMTEgQEAgdm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OnNldFJvb3RMYXllcihQYXNzUgogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAK
LXZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRWaWV3cG9ydChjb25zdCBJbnRTaXplJiB2aWV3cG9y
dFNpemUpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0Vmlld3BvcnRTaXplKGNvbnN0IEludFNp
emUmIHZpZXdwb3J0U2l6ZSkKIHsKKyAgICBpZiAodmlld3BvcnRTaXplID09IG1fdmlld3BvcnRT
aXplKQorICAgICAgICByZXR1cm47CisKICAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnNl
dE1heE1lbW9yeUxpbWl0Qnl0ZXMoVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKHZpZXdw
b3J0U2l6ZSkpOwogICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+c2V0UHJlZmVycmVkTWVt
b3J5TGltaXRCeXRlcyhUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXModmlld3BvcnRT
aXplKSk7CiAgICAgbV92aWV3cG9ydFNpemUgPSB2aWV3cG9ydFNpemU7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuaAkocmV2aXNpb24gMTA0MjMyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE3MSw3ICsxNzEsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBDQ1NldHRpbmdz
JiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fc2V0dGluZ3M7IH0KIAotICAgIHZvaWQgc2V0
Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKTsKKyAgICB2b2lkIHNldFZpZXdw
b3J0U2l6ZShjb25zdCBJbnRTaXplJik7CiAKICAgICBjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNp
emUoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0U2l6ZTsgfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAkocmV2aXNpb24gMTA0MjMyKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Myw3ICszNTMsNyBAQCBib29sIENDTGF5ZXJUcmVl
SG9zdEltcGw6OmluaXRpYWxpemVMYXllCiAgICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlcjsKIH0K
IAotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaWV3cG9ydChjb25zdCBJbnRTaXplJiB2
aWV3cG9ydFNpemUpCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFZpZXdwb3J0U2l6ZShj
b25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUpCiB7CiAgICAgaWYgKHZpZXdwb3J0U2l6ZSA9PSBt
X3ZpZXdwb3J0U2l6ZSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuaAkocmV2aXNpb24gMTA0MjMyKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgcHVibGljOgogICAgIGludCBzb3VyY2VGcmFtZU51
bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlRnJhbWVOdW1iZXI7IH0KICAgICB2b2lkIHNl
dFNvdXJjZUZyYW1lTnVtYmVyKGludCBmcmFtZU51bWJlcikgeyBtX3NvdXJjZUZyYW1lTnVtYmVy
ID0gZnJhbWVOdW1iZXI7IH0KIAotICAgIHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYg
dmlld3BvcnRTaXplKTsKKyAgICB2b2lkIHNldFZpZXdwb3J0U2l6ZShjb25zdCBJbnRTaXplJik7
CiAgICAgY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV92aWV3
cG9ydFNpemU7IH0KIAogICAgIHZvaWQgc2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKGZsb2F0
IHBhZ2VTY2FsZSwgZmxvYXQgbWluUGFnZVNjYWxlLCBmbG9hdCBtYXhQYWdlU2NhbGUpOwpJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNDI1MCkKKysrIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAK
KzIwMTItMDEtMDUgIFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1QGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBBdm9pZCB1bm5lY2Vzc2FyeSBUZXh0dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5VG9M
aW1pdCgpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzU2MzIKKworICAgICAgICBNYWluIHBhcnQgb2YgdGhlIGNoYW5nZSBpcyBpbiBTb3VyY2UvV2Vi
Q29yZS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
ZXN0czogd2Via2l0X3VuaXRfdGVzdHMgLS1ndGVzdF9maWx0ZXI9VGV4dHVyZU1hbmFnZXJUZXN0
Lio6Q0NMYXllclRyZWVIb3N0VGVzdFNldFZpZXdwb3J0U2l6ZS4qCisKKyAgICAgICAgKiBXZWJL
aXQuZ3lwaToKKyAgICAgICAgKiBzcmMvV2ViTGF5ZXJUcmVlVmlldy5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OnNldFZpZXdwb3J0U2l6ZSk6CisgICAgICAgICogc3Jj
L1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZUxh
eWVyVHJlZVZpZXdwb3J0KToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRFU1RfRik6CisgICAgICAgICogdGVzdHMvQ0NMYXll
clRyZWVIb3N0VGVzdC5jcHA6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0OjpjcmVh
dGUpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0T3BhY2l0eUNoYW5nZTo6YmVn
aW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldFZpZXdwb3J0U2l6
ZTo6Q0NMYXllclRyZWVIb3N0VGVzdFNldFZpZXdwb3J0U2l6ZSk6CisgICAgICAgIChXVEY6OkND
TGF5ZXJUcmVlSG9zdFRlc3RTZXRWaWV3cG9ydFNpemU6OmJlZ2luVGVzdCk6CisgICAgICAgIChX
VEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXRWaWV3cG9ydFNpemU6OmFmdGVyVGVzdCk6CisgICAg
ICAgIChXVEY6OlRFU1RfRik6CisgICAgICAgICogdGVzdHMvVGV4dHVyZU1hbmFnZXJUZXN0LmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6OkZha2VUZXh0dXJlQWxsb2NhdG9yOjpjcmVhdGVUZXh0
dXJlKToKKyAgICAgICAgKFdURjo6RmFrZVRleHR1cmVBbGxvY2F0b3I6OmRlbGV0ZVRleHR1cmUp
OgorICAgICAgICAoV1RGOjp0ZXh0dXJlc01lbW9yeVNpemUpOgorICAgICAgICAoV1RGOjpjcmVh
dGVUZXh0dXJlTWFuYWdlcik6CisgICAgICAgIChXVEY6OnJlcXVlc3RUZXh0dXJlKToKKyAgICAg
ICAgKFdURjo6VEVTVCk6CisKIDIwMTItMDEtMDQgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFJvdXRlIGFsbCBhbmltYXRlIGNhbGxz
IHRocm91Z2ggQ0NMYXllclRyZWVIb3N0IGluIGNvbXBvc2l0ZWQgbW9kZSB0byBzaW1wbGlmeSBy
YXRlIGxpbWl0aW5nIGxvZ2ljCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkJKHJl
dmlzaW9uIDEwNDIzMikKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkJKHdv
cmtpbmcgY29weSkKQEAgLTk1LDYgKzk1LDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9QT0RJbnRl
cnZhbFRyZWVUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvUE9EUmVkQmxhY2tUcmVlVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1JlbmRlclRhYmxlQ2VsbFRlc3QuY3BwJywKKyAg
ICAgICAgICAgICd0ZXN0cy9UZXh0dXJlTWFuYWdlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvVGls
aW5nRGF0YVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9UcmVlU3luY2hyb25pemVyVGVz
dC5jcHAnLApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJU
cmVlVmlldy5jcHAJKHJldmlzaW9uIDEwNDIzMikKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBA
IHZvaWQgV2ViTGF5ZXJUcmVlVmlldzo6Y29tcG9zaXRlKCkKIAogdm9pZCBXZWJMYXllclRyZWVW
aWV3OjpzZXRWaWV3cG9ydFNpemUoY29uc3QgV2ViU2l6ZSYgdmlld3BvcnRTaXplKQogewotICAg
IG1fcHJpdmF0ZS0+c2V0Vmlld3BvcnQodmlld3BvcnRTaXplKTsKKyAgICBtX3ByaXZhdGUtPnNl
dFZpZXdwb3J0U2l6ZSh2aWV3cG9ydFNpemUpOwogfQogCiBXZWJTaXplIFdlYkxheWVyVHJlZVZp
ZXc6OnZpZXdwb3J0U2l6ZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiAxMDQyMzIpCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwODYsNyArMzA4
Niw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyVHJlZVZpZXdwb3IKICAgICAgICAg
bGF5ZXJBZGp1c3RYID0gLXZpZXctPmNvbnRlbnRzU2l6ZSgpLndpZHRoKCkgKyB2aWV3LT52aXNp
YmxlQ29udGVudFJlY3QoZmFsc2UpLndpZHRoKCk7CiAgICAgfQogICAgIG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRIb3N0LT5zZXRWaWV3cG9ydCh2aXNpYmxlUmVjdC5zaXplKCksIHZpZXctPmNvbnRl
bnRzU2l6ZSgpLCBzY3JvbGwsIHBhZ2VTY2FsZUZhY3RvcigpLCBsYXllckFkanVzdFgpOwotICAg
IG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnQodmlzaWJsZVJlY3Quc2l6ZSgpKTsKKyAgICBt
X2xheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0U2l6ZSh2aXNpYmxlUmVjdC5zaXplKCkpOwogICAg
IG1fbGF5ZXJUcmVlSG9zdC0+c2V0UGFnZVNjYWxlKHBhZ2VTY2FsZUZhY3RvcigpKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdC5jcHAJKHJldmlzaW9uIDEwNDIzMikKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjIsNyArMjIyLDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBibGVu
ZGluZwogICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzOwogICAgIFJlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IEJsZW5kU3Rh
dGVUcmFja2VyQ29udGV4dCgpKSwgYXR0cnMsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJE
aXJlY3RseVRvSG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpGb3JVc2VPblRo
aXNUaHJlYWQpOwogICAgIG1faG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKGNvbnRl
eHQpOwotICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0KEludFNpemUoMTAsIDEwKSk7CisgICAg
bV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoMTAsIDEwKSk7CiAKICAgICBSZWZQ
dHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOwogICAgIHJvb3Qt
PnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOwpAQCAtMzIxLDcgKzMyMSw3IEBAIFRF
U1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgcmVzaGFwZU4KICAgICBSZXNoYXBlVHJhY2tl
ckNvbnRleHQqIHJlc2hhcGVUcmFja2VyID0gbmV3IFJlc2hhcGVUcmFja2VyQ29udGV4dCgpOwog
ICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIocmVz
aGFwZVRyYWNrZXIpLCBhdHRycywgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5
VG9Ib3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkZvclVzZU9uVGhpc1RocmVh
ZCk7CiAgICAgbV9ob3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoY29udGV4dCk7Ci0g
ICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnQoSW50U2l6ZSgxMCwgMTApKTsKKyAgICBtX2hvc3RJ
bXBsLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSgxMCwgMTApKTsKIAogICAgIFJlZlB0cjxDQ0xh
eWVySW1wbD4gcm9vdCA9IGFkb3B0UmVmKG5ldyBGYWtlRHJhd2FibGVDQ0xheWVySW1wbCgxKSk7
CiAgICAgcm9vdC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CkBAIC0zNzEsNyAr
MzcxLDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwYXJ0aWFsUwogICAgIHNl
dHRpbmdzLnBhcnRpYWxTd2FwRW5hYmxlZCA9IHRydWU7CiAgICAgT3duUHRyPENDTGF5ZXJUcmVl
SG9zdEltcGw+IGxheWVyVHJlZUhvc3RJbXBsID0gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRl
KHNldHRpbmdzLCB0aGlzKTsKICAgICBsYXllclRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVy
UmVuZGVyZXIoY29udGV4dCk7Ci0gICAgbGF5ZXJUcmVlSG9zdEltcGwtPnNldFZpZXdwb3J0KElu
dFNpemUoNTAwLCA1MDApKTsKKyAgICBsYXllclRyZWVIb3N0SW1wbC0+c2V0Vmlld3BvcnRTaXpl
KEludFNpemUoNTAwLCA1MDApKTsKIAogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGFk
b3B0UmVmKG5ldyBGYWtlRHJhd2FibGVDQ0xheWVySW1wbCgxKSk7CiAgICAgUmVmUHRyPENDTGF5
ZXJJbXBsPiBjaGlsZCA9IGFkb3B0UmVmKG5ldyBGYWtlRHJhd2FibGVDQ0xheWVySW1wbCgyKSk7
CkBAIC00MTIsNyArNDEyLDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwYXJ0
aWFsUwogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHBhcnRpYWwgc3dhcCBpcyBjb25zdHJhaW5lZCB0
byB0aGUgdmlld3BvcnQgZGltZW5zaW9ucwogICAgIC8vIGV4cGVjdGVkIGRhbWFnZSByZWN0OiBJ
bnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoNTAwLCA1MDApKTsKICAgICAvLyBleHBl
Y3RlZCBzd2FwIHJlY3Q6IGZsaXBwZWQgZGFtYWdlIHJlY3QsIGJ1dCBhbHNvIGNsYW1wZWQgdG8g
dmlld3BvcnQKLSAgICBsYXllclRyZWVIb3N0SW1wbC0+c2V0Vmlld3BvcnQoSW50U2l6ZSgxMCwg
MTApKTsKKyAgICBsYXllclRyZWVIb3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoMTAs
IDEwKSk7CiAgICAgcm9vdC0+c2V0T3BhY2l0eSgwLjcpOyAvLyB0aGlzIHdpbGwgZGFtYWdlIGV2
ZXJ5dGhpbmcKICAgICBsYXllclRyZWVIb3N0SW1wbC0+ZHJhd0xheWVycygpOwogICAgIGxheWVy
VHJlZUhvc3RJbXBsLT5zd2FwQnVmZmVycygpOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCShyZXZpc2lvbiAxMDQy
MzIpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgcHVibGljOgogICAgICAgICBs
YXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIocm9vdExheWVyKTsKIAogICAgICAgICAvLyBMYXll
clRyZWVIb3N0SW1wbCB3b24ndCBkcmF3IGlmIGl0IGhhcyAxeDEgdmlld3BvcnQuCi0gICAgICAg
IGxheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0KEludFNpemUoMSwgMSkpOworICAgICAgICBsYXll
clRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSgxLCAxKSk7CiAKICAgICAgICAgcmV0
dXJuIGxheWVyVHJlZUhvc3QucmVsZWFzZSgpOwogICAgIH0KQEAgLTk4Miw3ICs5ODIsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCiAgICAgewogICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihtX3VwZGF0ZUNoZWNrTGF5ZXIpOwotICAgICAgICBt
X2xheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0KEludFNpemUoMTAsIDEwKSk7CisgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoMTAsIDEwKSk7CiAKICAgICAg
ICAgcG9zdFNldE5lZWRzQ29tbWl0VG9NYWluVGhyZWFkKCk7CiAgICAgfQpAQCAtMTAxOSw0ICsx
MDE5LDQ3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0T3BhY2l0eUNoYW5nZSwKICAgICBy
dW5UZXN0KHRydWUpOwogfQogCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2V0Vmlld3BvcnRT
aXplIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3QgeworcHVibGljOgorCisgICAgQ0NMYXll
clRyZWVIb3N0VGVzdFNldFZpZXdwb3J0U2l6ZSgpCisgICAgICAgIDogbV9udW1Db21taXRzKDAp
CisgICAgICAgICwgbV9udW1EcmF3cygwKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIEludFNpemUgdmlld3BvcnRTaXplKDEwLCAx
MCk7CisgICAgICAgIGxheWVyVHJlZUhvc3QoKS0+c2V0Vmlld3BvcnRTaXplKHZpZXdwb3J0U2l6
ZSk7CisgICAgICAgIEVYUEVDVF9FUSh2aWV3cG9ydFNpemUsIGxheWVyVHJlZUhvc3QoKS0+dmll
d3BvcnRTaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1p
dEJ5dGVzKHZpZXdwb3J0U2l6ZSksIGxheWVyVHJlZUhvc3QoKS0+Y29udGVudHNUZXh0dXJlTWFu
YWdlcigpLT5tYXhNZW1vcnlMaW1pdEJ5dGVzKCkpOworICAgICAgICBFWFBFQ1RfRVEoVGV4dHVy
ZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSksIGxheWVyVHJlZUhvc3Qo
KS0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5wcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKCkp
OworCisgICAgICAgIC8vIHNldFZpZXdwb3J0U2l6ZSgpIHNob3VsZCBub3QgY2FsbCBUZXh0dXJl
TWFuYWdlcjo6c2V0TWF4TWVtb3J5TGltaXRCeXRlcygpIG9yIFRleHR1cmVNYW5hZ2VyOjpzZXRQ
cmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKCkKKyAgICAgICAgLy8gaWYgdGhlIHZpZXdwb3J0IHNp
emUgaXMgbm90IGNoYW5nZWQuCisgICAgICAgIEludFNpemUgZmFrZVNpemUoNSwgNSk7CisgICAg
ICAgIGxheWVyVHJlZUhvc3QoKS0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5zZXRNYXhNZW1v
cnlMaW1pdEJ5dGVzKFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcyhmYWtlU2l6ZSkpOwor
ICAgICAgICBsYXllclRyZWVIb3N0KCktPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+c2V0UHJl
ZmVycmVkTWVtb3J5TGltaXRCeXRlcyhUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMo
ZmFrZVNpemUpKTsKKyAgICAgICAgbGF5ZXJUcmVlSG9zdCgpLT5zZXRWaWV3cG9ydFNpemUodmll
d3BvcnRTaXplKTsKKyAgICAgICAgRVhQRUNUX0VRKFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRC
eXRlcyhmYWtlU2l6ZSksIGxheWVyVHJlZUhvc3QoKS0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigp
LT5tYXhNZW1vcnlMaW1pdEJ5dGVzKCkpOworICAgICAgICBFWFBFQ1RfRVEoVGV4dHVyZU1hbmFn
ZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKGZha2VTaXplKSwgbGF5ZXJUcmVlSG9zdCgpLT5jb250ZW50
c1RleHR1cmVNYW5hZ2VyKCktPnByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMoKSk7CisKKyAgICAg
ICAgZW5kVGVzdCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAg
IHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fbnVtQ29tbWl0czsKKyAgICBpbnQgbV9u
dW1EcmF3czsKK307CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2V0Vmlld3BvcnRTaXpl
LCBydW5TaW5nbGVUaHJlYWQpCit7CisgICAgcnVuVGVzdChmYWxzZSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RleHR1cmVNYW5hZ2Vy
VGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UZXh0
dXJlTWFuYWdlclRlc3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9UZXh0dXJlTWFuYWdlclRlc3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIz
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVGV4
dHVyZU1hbmFnZXIuaCIKKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIHsKKworY2xh
c3MgRmFrZVRleHR1cmVBbGxvY2F0b3IgOiBwdWJsaWMgVGV4dHVyZUFsbG9jYXRvciB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB1bnNpZ25lZCBjcmVhdGVUZXh0dXJlKGNvbnN0IEludFNpemUmLCBH
QzNEZW51bSkgeyByZXR1cm4gMTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlKHVu
c2lnbmVkLCBjb25zdCBJbnRTaXplJiwgR0MzRGVudW0pIHsgfQorfTsKKworRmFrZVRleHR1cmVB
bGxvY2F0b3IgZmFrZVRleHR1cmVBbGxvY2F0b3I7Citjb25zdCBJbnRTaXplIHRleHR1cmVTaXpl
KDI1NiwgMjU2KTsKK2NvbnN0IEdDM0RlbnVtIHRleHR1cmVGb3JtYXQgPSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQTsKKworc2l6ZV90IHRleHR1cmVzTWVtb3J5U2l6ZShzaXplX3QgdGV4dHVyZUNv
dW50KQoreworICAgIHJldHVybiBUZXh0dXJlTWFuYWdlcjo6bWVtb3J5VXNlQnl0ZXModGV4dHVy
ZVNpemUsIHRleHR1cmVGb3JtYXQpICogdGV4dHVyZUNvdW50OworfQorCitQYXNzT3duUHRyPFRl
eHR1cmVNYW5hZ2VyPiBjcmVhdGVUZXh0dXJlTWFuYWdlcihzaXplX3QgbWF4VGV4dHVyZXMsIHNp
emVfdCBwcmVmZXJyZWRUZXh0dXJlcykKK3sKKyAgICByZXR1cm4gVGV4dHVyZU1hbmFnZXI6OmNy
ZWF0ZSh0ZXh0dXJlc01lbW9yeVNpemUobWF4VGV4dHVyZXMpLCB0ZXh0dXJlc01lbW9yeVNpemUo
cHJlZmVycmVkVGV4dHVyZXMpLCAxMDI0KTsKK30KKworYm9vbCByZXF1ZXN0VGV4dHVyZShUZXh0
dXJlTWFuYWdlciogbWFuYWdlciwgVGV4dHVyZVRva2VuIHRva2VuKQoreworICAgIHVuc2lnbmVk
IHRleHR1cmVJZDsKKyAgICBib29sIHJlc3VsdCA9IG1hbmFnZXItPnJlcXVlc3RUZXh0dXJlKHRv
a2VuLCB0ZXh0dXJlU2l6ZSwgdGV4dHVyZUZvcm1hdCwgdGV4dHVyZUlkKTsKKyAgICBpZiAocmVz
dWx0KQorICAgICAgICBtYW5hZ2VyLT5hbGxvY2F0ZVRleHR1cmUoJmZha2VUZXh0dXJlQWxsb2Nh
dG9yLCB0b2tlbik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworVEVTVChUZXh0dXJlTWFuYWdl
clRlc3QsIHJlcXVlc3RUZXh0dXJlSW5QcmVmZXJyZWRMaW1pdCkKK3sKKyAgICBjb25zdCBzaXpl
X3QgcHJlZmVycmVkVGV4dHVyZXMgPSA4OworICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gdGV4
dHVyZU1hbmFnZXIgPSBjcmVhdGVUZXh0dXJlTWFuYWdlcihwcmVmZXJyZWRUZXh0dXJlcyAqIDIs
IHByZWZlcnJlZFRleHR1cmVzKTsKKyAgICBUZXh0dXJlVG9rZW4gdG9rZW5zW3ByZWZlcnJlZFRl
eHR1cmVzXTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWZlcnJlZFRleHR1cmVzOyAr
K2kpIHsKKyAgICAgICAgdG9rZW5zW2ldID0gdGV4dHVyZU1hbmFnZXItPmdldFRva2VuKCk7Cisg
ICAgICAgIGlmIChpKQorICAgICAgICAgICAgRVhQRUNUX0dUKHRva2Vuc1tpXSwgdG9rZW5zW2kg
LSAxXSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHJlcXVlc3RUZXh0dXJlKHRleHR1cmVNYW5hZ2Vy
LmdldCgpLCB0b2tlbnNbaV0pKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGV4dHVyZU1hbmFnZXIt
Pmhhc1RleHR1cmUodG9rZW5zW2ldKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHRleHR1cmVNYW5h
Z2VyLT5pc1Byb3RlY3RlZCh0b2tlbnNbaV0pKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHByZWZlcnJlZFRleHR1cmVzOyArK2kpCisgICAgICAgIEVYUEVDVF9UUlVFKHRl
eHR1cmVNYW5hZ2VyLT5oYXNUZXh0dXJlKHRva2Vuc1tpXSkpOworCisgICAgRVhQRUNUX0VRKHRl
eHR1cmVzTWVtb3J5U2l6ZShwcmVmZXJyZWRUZXh0dXJlcyksIHRleHR1cmVNYW5hZ2VyLT5jdXJy
ZW50TWVtb3J5VXNlQnl0ZXMoKSk7Cit9CisKK1RFU1QoVGV4dHVyZU1hbmFnZXJUZXN0LCByZXF1
ZXN0VGV4dHVyZUV4Y2VlZGluZ1ByZWZlcnJlZExpbWl0KQoreworICAgIGNvbnN0IHNpemVfdCBt
YXhUZXh0dXJlcyA9IDg7CisgICAgY29uc3Qgc2l6ZV90IHByZWZlcnJlZFRleHR1cmVzID0gNDsK
KyAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gY3JlYXRlVGV4dHVy
ZU1hbmFnZXIobWF4VGV4dHVyZXMsIHByZWZlcnJlZFRleHR1cmVzKTsKKyAgICBUZXh0dXJlVG9r
ZW4gdG9rZW5zW21heFRleHR1cmVzXTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWZl
cnJlZFRleHR1cmVzOyArK2kpIHsKKyAgICAgICAgdG9rZW5zW2ldID0gdGV4dHVyZU1hbmFnZXIt
PmdldFRva2VuKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHJlcXVlc3RUZXh0dXJlKHRleHR1cmVN
YW5hZ2VyLmdldCgpLCB0b2tlbnNbaV0pKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGV4dHVyZU1h
bmFnZXItPmhhc1RleHR1cmUodG9rZW5zW2ldKSk7CisgICAgfQorCisgICAgdGV4dHVyZU1hbmFn
ZXItPnVucHJvdGVjdFRleHR1cmUodG9rZW5zWzBdKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+dW5w
cm90ZWN0VGV4dHVyZSh0b2tlbnNbMl0pOworCisgICAgZm9yIChzaXplX3QgaSA9IHByZWZlcnJl
ZFRleHR1cmVzOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkgeworICAgICAgICB0b2tlbnNbaV0gPSB0
ZXh0dXJlTWFuYWdlci0+Z2V0VG9rZW4oKTsKKyAgICAgICAgRVhQRUNUX1RSVUUocmVxdWVzdFRl
eHR1cmUodGV4dHVyZU1hbmFnZXIuZ2V0KCksIHRva2Vuc1tpXSkpOworICAgICAgICBFWFBFQ1Rf
VFJVRSh0ZXh0dXJlTWFuYWdlci0+aGFzVGV4dHVyZSh0b2tlbnNbaV0pKTsKKyAgICAgICAgdGV4
dHVyZU1hbmFnZXItPnVucHJvdGVjdFRleHR1cmUodG9rZW5zW2ldKTsKKyAgICB9CisKKyAgICBF
WFBFQ1RfRkFMU0UodGV4dHVyZU1hbmFnZXItPmhhc1RleHR1cmUodG9rZW5zWzBdKSk7CisgICAg
RVhQRUNUX1RSVUUodGV4dHVyZU1hbmFnZXItPmhhc1RleHR1cmUodG9rZW5zWzFdKSk7CisgICAg
RVhQRUNUX1RSVUUodGV4dHVyZU1hbmFnZXItPmlzUHJvdGVjdGVkKHRva2Vuc1sxXSkpOworICAg
IEVYUEVDVF9GQUxTRSh0ZXh0dXJlTWFuYWdlci0+aGFzVGV4dHVyZSh0b2tlbnNbMl0pKTsKKyAg
ICBFWFBFQ1RfVFJVRSh0ZXh0dXJlTWFuYWdlci0+aGFzVGV4dHVyZSh0b2tlbnNbM10pKTsKKyAg
ICBFWFBFQ1RfVFJVRSh0ZXh0dXJlTWFuYWdlci0+aXNQcm90ZWN0ZWQodG9rZW5zWzNdKSk7CisK
KyAgICBFWFBFQ1RfRVEodGV4dHVyZXNNZW1vcnlTaXplKHByZWZlcnJlZFRleHR1cmVzKSwgdGV4
dHVyZU1hbmFnZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpKTsKK30KKworVEVTVChUZXh0dXJl
TWFuYWdlclRlc3QsIHJlcXVlc3RUZXh0dXJlRXhjZWVkaW5nTWF4TGltaXQpCit7CisgICAgY29u
c3Qgc2l6ZV90IG1heFRleHR1cmVzID0gODsKKyAgICBjb25zdCBzaXplX3QgcHJlZmVycmVkVGV4
dHVyZXMgPSA0OworICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBj
cmVhdGVUZXh0dXJlTWFuYWdlcihtYXhUZXh0dXJlcywgcHJlZmVycmVkVGV4dHVyZXMpOworICAg
IFRleHR1cmVUb2tlbiB0b2tlbnNbbWF4VGV4dHVyZXNdOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbWF4VGV4dHVyZXM7ICsraSkgeworICAgICAgICB0b2tlbnNbaV0gPSB0ZXh0dXJlTWFu
YWdlci0+Z2V0VG9rZW4oKTsKKyAgICAgICAgRVhQRUNUX1RSVUUocmVxdWVzdFRleHR1cmUodGV4
dHVyZU1hbmFnZXIuZ2V0KCksIHRva2Vuc1tpXSkpOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZXh0
dXJlTWFuYWdlci0+aGFzVGV4dHVyZSh0b2tlbnNbaV0pKTsKKyAgICB9CisKKyAgICBFWFBFQ1Rf
RVEodGV4dHVyZXNNZW1vcnlTaXplKG1heFRleHR1cmVzKSwgdGV4dHVyZU1hbmFnZXItPmN1cnJl
bnRNZW1vcnlVc2VCeXRlcygpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4
dHVyZXM7ICsraSkgeworICAgICAgICBUZXh0dXJlVG9rZW4gdG9rZW4gPSB0ZXh0dXJlTWFuYWdl
ci0+Z2V0VG9rZW4oKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHJlcXVlc3RUZXh0dXJlKHRleHR1
cmVNYW5hZ2VyLmdldCgpLCB0b2tlbikpOworICAgICAgICBFWFBFQ1RfRkFMU0UodGV4dHVyZU1h
bmFnZXItPmhhc1RleHR1cmUodG9rZW4pKTsKKyAgICB9CisKKyAgICBFWFBFQ1RfRVEodGV4dHVy
ZU1hbmFnZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpLCB0ZXh0dXJlc01lbW9yeVNpemUobWF4
VGV4dHVyZXMpKTsKKworICAgIHRleHR1cmVNYW5hZ2VyLT51bnByb3RlY3RUZXh0dXJlKHRva2Vu
c1sxXSk7CisgICAgdGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdFRleHR1cmUodG9rZW5zWzNdKTsK
KyAgICBFWFBFQ1RfVFJVRShyZXF1ZXN0VGV4dHVyZSh0ZXh0dXJlTWFuYWdlci5nZXQoKSwgdGV4
dHVyZU1hbmFnZXItPmdldFRva2VuKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXF1ZXN0VGV4dHVy
ZSh0ZXh0dXJlTWFuYWdlci5nZXQoKSwgdGV4dHVyZU1hbmFnZXItPmdldFRva2VuKCkpKTsKKyAg
ICBFWFBFQ1RfRkFMU0UocmVxdWVzdFRleHR1cmUodGV4dHVyZU1hbmFnZXIuZ2V0KCksIHRleHR1
cmVNYW5hZ2VyLT5nZXRUb2tlbigpKSk7CisgICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6
ZShtYXhUZXh0dXJlcyksIHRleHR1cmVNYW5hZ2VyLT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKSk7
CisgICAgRVhQRUNUX0ZBTFNFKHRleHR1cmVNYW5hZ2VyLT5oYXNUZXh0dXJlKHRva2Vuc1sxXSkp
OworICAgIEVYUEVDVF9GQUxTRSh0ZXh0dXJlTWFuYWdlci0+aGFzVGV4dHVyZSh0b2tlbnNbM10p
KTsKK30KKworVEVTVChUZXh0dXJlTWFuYWdlclRlc3QsIHJlZHVjZU1lbW9yeVRvTGltaXQpCit7
CisgICAgY29uc3Qgc2l6ZV90IG1heFRleHR1cmVzID0gODsKKyAgICBjb25zdCBzaXplX3QgcHJl
ZmVycmVkVGV4dHVyZXMgPSA0OworICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1h
bmFnZXIgPSBjcmVhdGVUZXh0dXJlTWFuYWdlcihtYXhUZXh0dXJlcywgcHJlZmVycmVkVGV4dHVy
ZXMpOworICAgIFRleHR1cmVUb2tlbiB0b2tlbnNbbWF4VGV4dHVyZXNdOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkgeworICAgICAgICB0b2tlbnNbaV0gPSB0
ZXh0dXJlTWFuYWdlci0+Z2V0VG9rZW4oKTsKKyAgICAgICAgRVhQRUNUX1RSVUUocmVxdWVzdFRl
eHR1cmUodGV4dHVyZU1hbmFnZXIuZ2V0KCksIHRva2Vuc1tpXSkpOworICAgIH0KKworICAgIEVY
UEVDVF9FUSh0ZXh0dXJlc01lbW9yeVNpemUobWF4VGV4dHVyZXMpLCB0ZXh0dXJlTWFuYWdlci0+
Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCkpOworICAgIHRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1v
cnlUb0xpbWl0KHRleHR1cmVzTWVtb3J5U2l6ZShtYXhUZXh0dXJlcykpOworICAgIEVYUEVDVF9F
USh0ZXh0dXJlc01lbW9yeVNpemUobWF4VGV4dHVyZXMpLCB0ZXh0dXJlTWFuYWdlci0+Y3VycmVu
dE1lbW9yeVVzZUJ5dGVzKCkpOworICAgIHRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xp
bWl0KHRleHR1cmVzTWVtb3J5U2l6ZShwcmVmZXJyZWRUZXh0dXJlcykpOworICAgIEVYUEVDVF9F
USh0ZXh0dXJlc01lbW9yeVNpemUobWF4VGV4dHVyZXMpLCB0ZXh0dXJlTWFuYWdlci0+Y3VycmVu
dE1lbW9yeVVzZUJ5dGVzKCkpOworCisgICAgY29uc3Qgc2l6ZV90IHVucHJvdGVjdGVkVGV4dHVy
ZXMgPSBwcmVmZXJyZWRUZXh0dXJlcyArIDE7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBw
cmVmZXJyZWRUZXh0dXJlcyArIDE7ICsraSkKKyAgICAgICAgdGV4dHVyZU1hbmFnZXItPnVucHJv
dGVjdFRleHR1cmUodG9rZW5zW2ldKTsKKworICAgIHRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1v
cnlUb0xpbWl0KHRleHR1cmVzTWVtb3J5U2l6ZShtYXhUZXh0dXJlcykpOworICAgIEVYUEVDVF9F
USh0ZXh0dXJlc01lbW9yeVNpemUobWF4VGV4dHVyZXMpLCB0ZXh0dXJlTWFuYWdlci0+Y3VycmVu
dE1lbW9yeVVzZUJ5dGVzKCkpOworICAgIHRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xp
bWl0KHRleHR1cmVzTWVtb3J5U2l6ZShwcmVmZXJyZWRUZXh0dXJlcykpOworICAgIEVYUEVDVF9F
USh0ZXh0dXJlc01lbW9yeVNpemUocHJlZmVycmVkVGV4dHVyZXMpLCB0ZXh0dXJlTWFuYWdlci0+
Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCkpOworICAgIHRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1v
cnlUb0xpbWl0KHRleHR1cmVzTWVtb3J5U2l6ZSgxKSk7CisgICAgRVhQRUNUX0VRKHRleHR1cmVz
TWVtb3J5U2l6ZShtYXhUZXh0dXJlcyAtIHVucHJvdGVjdGVkVGV4dHVyZXMpLCB0ZXh0dXJlTWFu
YWdlci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCkpOworCisgICAgLy8gcmVkdWNlTWVtb3J5VG9M
aW1pdCBkb2Vzbid0IGNoYW5nZSB0aGUgY3VycmVudCBtZW1vcnkgbGltaXRzLgorICAgIEVYUEVD
VF9FUSh0ZXh0dXJlc01lbW9yeVNpemUobWF4VGV4dHVyZXMpLCB0ZXh0dXJlTWFuYWdlci0+bWF4
TWVtb3J5TGltaXRCeXRlcygpKTsKKyAgICBFWFBFQ1RfRVEodGV4dHVyZXNNZW1vcnlTaXplKHBy
ZWZlcnJlZFRleHR1cmVzKSwgdGV4dHVyZU1hbmFnZXItPnByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0
ZXMoKSk7Cit9CisKK1RFU1QoVGV4dHVyZU1hbmFnZXJUZXN0LCBzZXRNYXhNZW1vcnlMaW1pdEJ5
dGVzKQoreworICAgIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlcyA9IDg7CisgICAgY29uc3Qgc2l6
ZV90IHByZWZlcnJlZFRleHR1cmVzID0gNDsKKyAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IHRl
eHR1cmVNYW5hZ2VyID0gY3JlYXRlVGV4dHVyZU1hbmFnZXIobWF4VGV4dHVyZXMsIHByZWZlcnJl
ZFRleHR1cmVzKTsKKyAgICBUZXh0dXJlVG9rZW4gdG9rZW5zW21heFRleHR1cmVzXTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpIHsKKyAgICAgICAgdG9rZW5z
W2ldID0gdGV4dHVyZU1hbmFnZXItPmdldFRva2VuKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHJl
cXVlc3RUZXh0dXJlKHRleHR1cmVNYW5hZ2VyLmdldCgpLCB0b2tlbnNbaV0pKTsKKyAgICB9CisK
KyAgICBFWFBFQ1RfRVEodGV4dHVyZXNNZW1vcnlTaXplKG1heFRleHR1cmVzKSwgdGV4dHVyZU1h
bmFnZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpKTsKKworICAgIGNvbnN0IHNpemVfdCB1bnBy
b3RlY3RlZFRleHR1cmVzID0gcHJlZmVycmVkVGV4dHVyZXMgKyAxOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdW5wcm90ZWN0ZWRUZXh0dXJlczsgKytpKQorICAgICAgICB0ZXh0dXJlTWFu
YWdlci0+dW5wcm90ZWN0VGV4dHVyZSh0b2tlbnNbaV0pOworCisgICAgdGV4dHVyZU1hbmFnZXIt
PnNldE1heE1lbW9yeUxpbWl0Qnl0ZXModGV4dHVyZXNNZW1vcnlTaXplKG1heFRleHR1cmVzKSk7
CisgICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6ZShtYXhUZXh0dXJlcyksIHRleHR1cmVN
YW5hZ2VyLT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKSk7CisgICAgdGV4dHVyZU1hbmFnZXItPnNl
dE1heE1lbW9yeUxpbWl0Qnl0ZXModGV4dHVyZXNNZW1vcnlTaXplKHByZWZlcnJlZFRleHR1cmVz
KSk7CisgICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6ZShwcmVmZXJyZWRUZXh0dXJlcyks
IHRleHR1cmVNYW5hZ2VyLT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKSk7CisgICAgRVhQRUNUX0VR
KHRleHR1cmVzTWVtb3J5U2l6ZShwcmVmZXJyZWRUZXh0dXJlcyksIHRleHR1cmVNYW5hZ2VyLT5t
YXhNZW1vcnlMaW1pdEJ5dGVzKCkpOworfQorCitURVNUKFRleHR1cmVNYW5hZ2VyVGVzdCwgc2V0
UHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcykKK3sKKyAgICBjb25zdCBzaXplX3QgbWF4VGV4dHVy
ZXMgPSA4OworICAgIGNvbnN0IHNpemVfdCBwcmVmZXJyZWRUZXh0dXJlcyA9IDQ7CisgICAgT3du
UHRyPFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IGNyZWF0ZVRleHR1cmVNYW5hZ2Vy
KG1heFRleHR1cmVzLCBwcmVmZXJyZWRUZXh0dXJlcyk7CisgICAgVGV4dHVyZVRva2VuIHRva2Vu
c1ttYXhUZXh0dXJlc107CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsg
KytpKSB7CisgICAgICAgIHRva2Vuc1tpXSA9IHRleHR1cmVNYW5hZ2VyLT5nZXRUb2tlbigpOwor
ICAgICAgICBFWFBFQ1RfVFJVRShyZXF1ZXN0VGV4dHVyZSh0ZXh0dXJlTWFuYWdlci5nZXQoKSwg
dG9rZW5zW2ldKSk7CisgICAgfQorCisgICAgY29uc3Qgc2l6ZV90IHVucHJvdGVjdGVkVGV4dHVy
ZXMgPSBwcmVmZXJyZWRUZXh0dXJlcyArIDE7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB1
bnByb3RlY3RlZFRleHR1cmVzOyArK2kpCisgICAgICAgIHRleHR1cmVNYW5hZ2VyLT51bnByb3Rl
Y3RUZXh0dXJlKHRva2Vuc1tpXSk7CisKKyAgICBFWFBFQ1RfRVEodGV4dHVyZXNNZW1vcnlTaXpl
KG1heFRleHR1cmVzKSwgdGV4dHVyZU1hbmFnZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpKTsK
KyAgICBFWFBFQ1RfRVEodGV4dHVyZXNNZW1vcnlTaXplKG1heFRleHR1cmVzKSwgdGV4dHVyZU1h
bmFnZXItPm1heE1lbW9yeUxpbWl0Qnl0ZXMoKSk7CisKKyAgICAvLyBTZXR0aW5nIHByZWZlcnJl
ZCBtZW1vcnkgbGltaXQgb25seSB3b24ndCBmb3JjZSByZWR1Y2VNZW1vcnlUb0xpbWl0LgorICAg
IHRleHR1cmVNYW5hZ2VyLT5zZXRQcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKHRleHR1cmVzTWVt
b3J5U2l6ZShwcmVmZXJyZWRUZXh0dXJlcykpOworICAgIEVYUEVDVF9FUSh0ZXh0dXJlc01lbW9y
eVNpemUobWF4VGV4dHVyZXMpLCB0ZXh0dXJlTWFuYWdlci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVz
KCkpOworICAgIEVYUEVDVF9FUSh0ZXh0dXJlc01lbW9yeVNpemUobWF4VGV4dHVyZXMpLCB0ZXh0
dXJlTWFuYWdlci0+bWF4TWVtb3J5TGltaXRCeXRlcygpKTsKKyAgICBFWFBFQ1RfRVEodGV4dHVy
ZXNNZW1vcnlTaXplKHByZWZlcnJlZFRleHR1cmVzKSwgdGV4dHVyZU1hbmFnZXItPnByZWZlcnJl
ZE1lbW9yeUxpbWl0Qnl0ZXMoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>