<?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>85725</bug_id>
          
          <creation_ts>2012-05-05 21:25:09 -0700</creation_ts>
          <short_desc>Eliminate duplicated code for culled line box in RenderInline</short_desc>
          <delta_ts>2012-06-24 01:12:25 -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>New Bugs</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>66687</blocked>
    
    <blocked>79150</blocked>
    
    <blocked>84936</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Tien-Ren Chen">trchen</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>mitz</cc>
    
    <cc>trchen</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>617077</commentid>
    <comment_count>0</comment_count>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-05-05 21:25:09 -0700</bug_when>
    <thetext>Eliminate duplicated code for culled line box in RenderInline</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617078</commentid>
    <comment_count>1</comment_count>
      <attachid>140417</attachid>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-05-05 21:34:11 -0700</bug_when>
    <thetext>Created attachment 140417
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618779</commentid>
    <comment_count>2</comment_count>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-05-08 14:04:34 -0700</bug_when>
    <thetext>Can someone take a look at this please?

I think it is a good refactor to have one single function to generate all the local rects of a RenderInline.

There is one concern with this patch is the use of template and generator pattern, neither of them is used in WebKit. I use such seemingly over-complicated construct to make sure the compiled code will be as efficient as it was. If performance is not that much a concern I can make a simpler implementation that returns just a Vector&lt;FloatRect&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>619951</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-05-09 16:00:13 -0700</bug_when>
    <thetext>@Eric: Would you be willing to look at this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620016</commentid>
    <comment_count>4</comment_count>
      <attachid>140417</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-05-09 16:39:02 -0700</bug_when>
    <thetext>Comment on attachment 140417
Patch

Are you around #webkit that we could discuss this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620044</commentid>
    <comment_count>5</comment_count>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-05-09 17:02:07 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 140417 [details])
&gt; Are you around #webkit that we could discuss this?

Sorry I&apos;ll need to go on an errand right now. I&apos;ll reach you tomorrow morning if it is convenient to you. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620935</commentid>
    <comment_count>6</comment_count>
      <attachid>140417</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-05-10 14:05:05 -0700</bug_when>
    <thetext>Comment on attachment 140417
Patch

This is fantastic.  Thank you!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620958</commentid>
    <comment_count>7</comment_count>
      <attachid>140417</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-10 14:15:00 -0700</bug_when>
    <thetext>Comment on attachment 140417
Patch

Rejecting attachment 140417 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 1

ERROR: /mnt/git/webkit-commit-queue/Source/WebCore/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: http://queues.webkit.org/results/12671094</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621014</commentid>
    <comment_count>8</comment_count>
      <attachid>141266</attachid>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-05-10 14:44:44 -0700</bug_when>
    <thetext>Created attachment 141266
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621019</commentid>
    <comment_count>9</comment_count>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-05-10 14:45:31 -0700</bug_when>
    <thetext>Nothing changed. Just rebase and add back &quot;Reviewed by&quot; line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621033</commentid>
    <comment_count>10</comment_count>
      <attachid>141271</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-05-10 14:58:35 -0700</bug_when>
    <thetext>Created attachment 141271
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621198</commentid>
    <comment_count>11</comment_count>
      <attachid>141271</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-10 19:07:22 -0700</bug_when>
    <thetext>Comment on attachment 141271
Patch for landing

Clearing flags on attachment: 141271

Committed r116718: &lt;http://trac.webkit.org/changeset/116718&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621199</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-10 19:07:28 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140417</attachid>
            <date>2012-05-05 21:34:11 -0700</date>
            <delta_ts>2012-05-10 14:44:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-85725-20120505213410.patch</filename>
            <type>text/plain</type>
            <size>23827</size>
            <attacher name="Tien-Ren Chen">trchen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2MjMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDkwM2Q1ZDQ1NmEzZTA4
NjFlYWYzMTM4NDFiZWIzMTc3ZmNmNjgwMC4uZmJjY2E3MmZkZDYxYWY5N2I0MjA1MjQyZjA4NWZi
YjVhY2Y5MWZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTA1LTA1ICBUaWVu
LVJlbiBDaGVuICA8dHJjaGVuQGNocm9taXVtLm9yZz4KKworICAgICAgICBFbGltaW5hdGUgZHVw
bGljYXRlZCBjb2RlIGZvciBjdWxsZWQgbGluZSBib3ggaW4gUmVuZGVySW5saW5lCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTcyNQorCisgICAgICAg
IFRoaXMgcGF0Y2ggZXh0cmFjdHMgdGhlIGNvbW1vbiBwYXJ0IG9mIGN1bGxlZElubGluZUJvdW5k
aW5nQm94KCkgLworICAgICAgICBjdWxsZWRJbmxpbmVBYnNvbHV0ZVJlY3RzKCkgLyBjdWxsZWRJ
bmxpbmVBYnNvbHV0ZVF1YWRzKCkgdG8gYmVjb21lIGEKKyAgICAgICAgdGVtcGxhdGUgZnVuY3Rp
b24gZ2VuZXJhdGVDdWxsZWRMaW5lQm94UmVjdHMoKS4gVGhlIHRlbXBsYXRlIGZ1bmN0aW9uCisg
ICAgICAgIGFjY2VwdHMgYSBuZXcgcGFyYW1ldGVyLCBHZW5lcmF0b3JDb250ZXh0IGZ1bmN0b3Is
IHdoaWNoIHdpbGwgYmUKKyAgICAgICAgaW52b2tlZCBldmVyeXRpbWUgYSBuZXcgbGluZSBib3gg
cmVjdCBoYXMgYmVlbiBnZW5lcmF0ZWQuIFRoZSBnZW5lcmF0ZWQKKyAgICAgICAgcmVjdCB3aWxs
IGJlIGluIGxvY2FsIGNvb3JkaW5hdGUuIFRoZSBmdW5jdG9yIHdpbGwgYmUgcmVzcG9uc2libGUg
Zm9yCisgICAgICAgIGFwcHJvcHJpYXRlIHRyYW5zZm9ybWF0aW9uLCB0aGVuIGFwcGVuZGluZyB0
byB2ZWN0b3Igb3IgdW5pb24gd2l0aAorICAgICAgICBleGlzdGluZyBib3VuZGluZyBib3guCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLiBObyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpnZW5lcmF0ZUxpbmVCb3hSZWN0cyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmdlbmVyYXRlQ3VsbGVkTGluZUJveFJlY3RzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6YWJzb2x1dGVSZWN0cyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmFic29sdXRlUXVhZHMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVySW5saW5lOjpsaW5lc0JvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
cklubGluZTo6Y3VsbGVkSW5saW5lVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmg6CisgICAgICAgIChSZW5kZXJJbmxpbmUpOgorCiAyMDEy
LTA1LTA1ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAg
ICBbR1RLXSBXZWJLaXQgc2hvdWxkIHByb3Blcmx5IHNldCB0aGUgaW5wdXQgbWV0aG9kIGNvbnRl
eHQgd2luZG93IGxvY2F0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW5saW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwCmluZGV4IDQ0NDlkNzJlM2VjY2ViMTg5YTg4YTYzY2M3ZTUxZTllNmQyMGExZGIuLjlmMWUz
MmNjNDdhN2IwOTVhMzAwZWFhYmQzMDZiODg5ZjAxYTk5OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCkBAIC01MDUsMzMgKzUwNSwyOCBAQCB2b2lkIFJlbmRl
cklubGluZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBw
YWludE9mZnNldCkKICAgICBtX2xpbmVCb3hlcy5wYWludCh0aGlzLCBwYWludEluZm8sIHBhaW50
T2Zmc2V0KTsKIH0KIAotdm9pZCBSZW5kZXJJbmxpbmU6OmFic29sdXRlUmVjdHMoVmVjdG9yPElu
dFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25z
dAordGVtcGxhdGU8dHlwZW5hbWUgR2VuZXJhdG9yQ29udGV4dD4KK3ZvaWQgUmVuZGVySW5saW5l
OjpnZW5lcmF0ZUxpbmVCb3hSZWN0cyhHZW5lcmF0b3JDb250ZXh0IHlpZWxkKSBjb25zdAogewog
ICAgIGlmICghYWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpCi0gICAgICAgIGN1bGxlZElubGluZUFi
c29sdXRlUmVjdHModGhpcywgcmVjdHMsIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkp
OworICAgICAgICBnZW5lcmF0ZUN1bGxlZExpbmVCb3hSZWN0cyh5aWVsZCwgdGhpcyk7CiAgICAg
ZWxzZSBpZiAoSW5saW5lRmxvd0JveCogY3VyciA9IGZpcnN0TGluZUJveCgpKSB7CiAgICAgICAg
IGZvciAoOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkKLSAgICAgICAgICAgIHJl
Y3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdChhY2N1bXVsYXRlZE9mZnNldCAr
IGN1cnItPnRvcExlZnQoKSwgY3Vyci0+c2l6ZSgpKSkpOworICAgICAgICAgICAgeWllbGQoRmxv
YXRSZWN0KGN1cnItPnRvcExlZnQoKSwgY3Vyci0+c2l6ZSgpKSk7CiAgICAgfSBlbHNlCi0gICAg
ICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KHJvdW5kZWRJbnRQb2ludChhY2N1bXVsYXRlZE9mZnNl
dCksIEludFNpemUoKSkpOwotCi0gICAgaWYgKGNvbnRpbnVhdGlvbigpKSB7Ci0gICAgICAgIGlm
IChjb250aW51YXRpb24oKS0+aXNCb3goKSkgewotICAgICAgICAgICAgUmVuZGVyQm94KiBib3gg
PSB0b1JlbmRlckJveChjb250aW51YXRpb24oKSk7Ci0gICAgICAgICAgICBjb250aW51YXRpb24o
KS0+YWJzb2x1dGVSZWN0cyhyZWN0cywgdG9MYXlvdXRQb2ludChhY2N1bXVsYXRlZE9mZnNldCAt
IGNvbnRhaW5pbmdCbG9jaygpLT5sb2NhdGlvbigpICsgYm94LT5zaXplKCkpKTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBjb250aW51YXRpb24oKS0+YWJzb2x1dGVSZWN0cyhyZWN0cywg
dG9MYXlvdXRQb2ludChhY2N1bXVsYXRlZE9mZnNldCAtIGNvbnRhaW5pbmdCbG9jaygpLT5sb2Nh
dGlvbigpKSk7Ci0gICAgfQorICAgICAgICB5aWVsZChGbG9hdFJlY3QoKSk7CiB9CiAKLXZvaWQg
UmVuZGVySW5saW5lOjpjdWxsZWRJbmxpbmVBYnNvbHV0ZVJlY3RzKGNvbnN0IFJlbmRlcklubGlu
ZSogY29udGFpbmVyLCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRTaXplJiBv
ZmZzZXQpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBHZW5lcmF0b3JDb250ZXh0Pgordm9pZCBS
ZW5kZXJJbmxpbmU6OmdlbmVyYXRlQ3VsbGVkTGluZUJveFJlY3RzKEdlbmVyYXRvckNvbnRleHQg
eWllbGQsIGNvbnN0IFJlbmRlcklubGluZSogY29udGFpbmVyKSBjb25zdAogewogICAgIGlmICgh
Y3VsbGVkSW5saW5lRmlyc3RMaW5lQm94KCkpIHsKLSAgICAgICAgcmVjdHMuYXBwZW5kKEludFJl
Y3Qob2Zmc2V0LndpZHRoKCksIG9mZnNldC5oZWlnaHQoKSwgMCwgMCkpOworICAgICAgICB5aWVs
ZChGbG9hdFJlY3QoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBib29sIGlzSG9y
aXpvbnRhbCA9IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CisKICAgICBmb3Ig
KFJlbmRlck9iamVjdCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5l
eHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKGN1cnItPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNTQ0LDM1ICs1MzksMzEgQEAgdm9pZCBSZW5k
ZXJJbmxpbmU6OmN1bGxlZElubGluZUFic29sdXRlUmVjdHMoY29uc3QgUmVuZGVySW5saW5lKiBj
b250YWluZXIsIFZlY3QKICAgICAgICAgICAgICAgICBSb290SW5saW5lQm94KiByb290Qm94ID0g
Y3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpLT5yb290KCk7CiAgICAgICAgICAgICAgICAgaW50
IGxvZ2ljYWxUb3AgPSByb290Qm94LT5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC0+cmVuZGVyZXIo
KS0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNz
KCkuYXNjZW50KCkgLSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUo
KSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKICAgICAgICAgICAgICAgICBpbnQg
bG9naWNhbEhlaWdodCA9IGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHls
ZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgRmxv
YXRSZWN0IHJlc3VsdDsKICAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQotICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBGbG9hdFJlY3Qob2Zmc2V0LndpZHRoKCkgKyBjdXJyQm94
LT5pbmxpbmVCb3hXcmFwcGVyKCktPngoKSAtIGN1cnJCb3gtPm1hcmdpbkxlZnQoKSwgb2Zmc2V0
LmhlaWdodCgpICsgbG9naWNhbFRvcCwgY3VyckJveC0+d2lkdGgoKSArIGN1cnJCb3gtPm1hcmdp
bldpZHRoKCksIGxvZ2ljYWxIZWlnaHQpOworICAgICAgICAgICAgICAgICAgICB5aWVsZChGbG9h
dFJlY3QoY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpLT54KCkgLSBjdXJyQm94LT5tYXJnaW5M
ZWZ0KCksIGxvZ2ljYWxUb3AsIGN1cnJCb3gtPndpZHRoKCkgKyBjdXJyQm94LT5tYXJnaW5XaWR0
aCgpLCBsb2dpY2FsSGVpZ2h0KSk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBGbG9hdFJlY3Qob2Zmc2V0LndpZHRoKCkgKyBsb2dpY2FsVG9wLCBv
ZmZzZXQuaGVpZ2h0KCkgKyBjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPnkoKSAtIGN1cnJC
b3gtPm1hcmdpblRvcCgpLCBsb2dpY2FsSGVpZ2h0LCBjdXJyQm94LT5oZWlnaHQoKSArIGN1cnJC
b3gtPm1hcmdpbkhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICByZWN0cy5hcHBlbmQoZW5jbG9z
aW5nSW50UmVjdChyZXN1bHQpKTsKKyAgICAgICAgICAgICAgICAgICAgeWllbGQoRmxvYXRSZWN0
KGxvZ2ljYWxUb3AsIGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKS0+eSgpIC0gY3VyckJveC0+
bWFyZ2luVG9wKCksIGxvZ2ljYWxIZWlnaHQsIGN1cnJCb3gtPmhlaWdodCgpICsgY3VyckJveC0+
bWFyZ2luSGVpZ2h0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChjdXJy
LT5pc1JlbmRlcklubGluZSgpKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgZG9lc24n
dCBuZWVkIGxpbmUgYm94ZXMgZWl0aGVyLCB0aGVuIHdlIGNhbiByZWN1ci4KICAgICAgICAgICAg
IFJlbmRlcklubGluZSogY3VycklubGluZSA9IHRvUmVuZGVySW5saW5lKGN1cnIpOwogICAgICAg
ICAgICAgaWYgKCFjdXJySW5saW5lLT5hbHdheXNDcmVhdGVMaW5lQm94ZXMoKSkKLSAgICAgICAg
ICAgICAgICBjdXJySW5saW5lLT5jdWxsZWRJbmxpbmVBYnNvbHV0ZVJlY3RzKGNvbnRhaW5lciwg
cmVjdHMsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgY3VycklubGluZS0+Z2VuZXJhdGVDdWxs
ZWRMaW5lQm94UmVjdHMoeWllbGQsIGNvbnRhaW5lcik7CiAgICAgICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgICAgICBmb3IgKElubGluZUZsb3dCb3gqIGNoaWxkTGluZSA9IGN1cnJJbmxpbmUt
PmZpcnN0TGluZUJveCgpOyBjaGlsZExpbmU7IGNoaWxkTGluZSA9IGNoaWxkTGluZS0+bmV4dExp
bmVCb3goKSkgewogICAgICAgICAgICAgICAgICAgICBSb290SW5saW5lQm94KiByb290Qm94ID0g
Y2hpbGRMaW5lLT5yb290KCk7CiAgICAgICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0g
cm9vdEJveC0+bG9naWNhbFRvcCgpICsgKHJvb3RCb3gtPnJlbmRlcmVyKCktPnN0eWxlKHJvb3RC
b3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0g
Y29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9u
dE1ldHJpY3MoKS5hc2NlbnQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVp
Z2h0ID0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250
KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKLSAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWN0
IHJlc3VsdDsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChvZmZzZXQud2lkdGgoKSArIGNoaWxk
TGluZS0+eCgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9mZnNldC5oZWlnaHQoKSArIGxvZ2ljYWxUb3AsCisgICAgICAgICAg
ICAgICAgICAgICAgICB5aWVsZChGbG9hdFJlY3QoY2hpbGRMaW5lLT54KCkgLSBjaGlsZExpbmUt
Pm1hcmdpbkxvZ2ljYWxMZWZ0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNh
bFRvcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZExpbmUtPmxvZ2ljYWxXaWR0
aCgpICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpICsgY2hpbGRMaW5lLT5tYXJnaW5M
b2dpY2FsUmlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2FsSGVpZ2h0
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2FsSGVpZ2h0KSk7CiAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0
UmVjdChvZmZzZXQud2lkdGgoKSArIGxvZ2ljYWxUb3AsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb2Zmc2V0LmhlaWdodCgpICsgY2hpbGRMaW5lLT55KCkgLSBjaGlsZExpbmUtPm1hcmdp
bkxvZ2ljYWxMZWZ0KCksCisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZChGbG9hdFJlY3Qo
bG9naWNhbFRvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZExpbmUtPnkoKSAt
IGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsb2dpY2FsSGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTGlu
ZS0+bG9naWNhbFdpZHRoKCkgKyBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0KCkgKyBjaGls
ZExpbmUtPm1hcmdpbkxvZ2ljYWxSaWdodCgpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVjdHMu
YXBwZW5kKGVuY2xvc2luZ0ludFJlY3QocmVzdWx0KSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hpbGRMaW5lLT5sb2dpY2FsV2lkdGgoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNh
bExlZnQoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbFJpZ2h0KCkpKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoY3Vyci0+aXNUZXh0KCkp
IHsKQEAgLTU4MSw5OSArNTcyLDc3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpjdWxsZWRJbmxpbmVB
YnNvbHV0ZVJlY3RzKGNvbnN0IFJlbmRlcklubGluZSogY29udGFpbmVyLCBWZWN0CiAgICAgICAg
ICAgICAgICAgUm9vdElubGluZUJveCogcm9vdEJveCA9IGNoaWxkVGV4dC0+cm9vdCgpOwogICAg
ICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC0+bG9naWNhbFRvcCgpICsgKHJv
b3RCb3gtPnJlbmRlcmVyKCktPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZv
bnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5p
c0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CiAgICAg
ICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gt
PmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdodCgpOwotICAg
ICAgICAgICAgICAgIEZsb2F0UmVjdCByZXN1bHQ7CiAgICAgICAgICAgICAgICAgaWYgKGlzSG9y
aXpvbnRhbCkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0KG9mZnNldC53
aWR0aCgpICsgY2hpbGRUZXh0LT54KCksIG9mZnNldC5oZWlnaHQoKSArIGxvZ2ljYWxUb3AsIGNo
aWxkVGV4dC0+bG9naWNhbFdpZHRoKCksIGxvZ2ljYWxIZWlnaHQpOworICAgICAgICAgICAgICAg
ICAgICB5aWVsZChGbG9hdFJlY3QoY2hpbGRUZXh0LT54KCksIGxvZ2ljYWxUb3AsIGNoaWxkVGV4
dC0+bG9naWNhbFdpZHRoKCksIGxvZ2ljYWxIZWlnaHQpKTsKICAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChvZmZzZXQud2lkdGgoKSAr
IGxvZ2ljYWxUb3AsIG9mZnNldC5oZWlnaHQoKSArIGNoaWxkVGV4dC0+eSgpLCBsb2dpY2FsSGVp
Z2h0LCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpKTsKLSAgICAgICAgICAgICAgICByZWN0cy5h
cHBlbmQoZW5jbG9zaW5nSW50UmVjdChyZXN1bHQpKTsKKyAgICAgICAgICAgICAgICAgICAgeWll
bGQoRmxvYXRSZWN0KGxvZ2ljYWxUb3AsIGNoaWxkVGV4dC0+eSgpLCBsb2dpY2FsSGVpZ2h0LCBj
aGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CiB9CiAKLXZvaWQgUmVuZGVySW5saW5lOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1
YWQ+JiBxdWFkcywgYm9vbCogd2FzRml4ZWQpIGNvbnN0Ci17Ci0gICAgaWYgKCFhbHdheXNDcmVh
dGVMaW5lQm94ZXMoKSkKLSAgICAgICAgY3VsbGVkSW5saW5lQWJzb2x1dGVRdWFkcyh0aGlzLCBx
dWFkcyk7Ci0gICAgZWxzZSBpZiAoSW5saW5lRmxvd0JveCogY3VyciA9IGZpcnN0TGluZUJveCgp
KSB7Ci0gICAgICAgIGZvciAoOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkgewot
ICAgICAgICAgICAgRmxvYXRSZWN0IGxvY2FsUmVjdChjdXJyLT54KCksIGN1cnItPnkoKSwgY3Vy
ci0+d2lkdGgoKSwgY3Vyci0+aGVpZ2h0KCkpOwotICAgICAgICAgICAgcXVhZHMuYXBwZW5kKGxv
Y2FsVG9BYnNvbHV0ZVF1YWQobG9jYWxSZWN0LCBmYWxzZSwgd2FzRml4ZWQpKTsKLSAgICAgICAg
fQotICAgIH0gZWxzZQotICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChG
bG9hdFJlY3QoKSwgZmFsc2UsIHdhc0ZpeGVkKSk7CituYW1lc3BhY2UgewogCi0gICAgaWYgKGNv
bnRpbnVhdGlvbigpKQotICAgICAgICBjb250aW51YXRpb24oKS0+YWJzb2x1dGVRdWFkcyhxdWFk
cywgd2FzRml4ZWQpOwotfQorY2xhc3MgQWJzb2x1dGVSZWN0c0dlbmVyYXRvckNvbnRleHQgewor
cHVibGljOgorICAgIEFic29sdXRlUmVjdHNHZW5lcmF0b3JDb250ZXh0KFZlY3RvcjxJbnRSZWN0
PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkKKyAgICAgICAg
OiBtX3JlY3RzKHJlY3RzKQorICAgICAgICAsIG1fYWNjdW11bGF0ZWRPZmZzZXQoYWNjdW11bGF0
ZWRPZmZzZXQpIHsgfQogCi12b2lkIFJlbmRlcklubGluZTo6Y3VsbGVkSW5saW5lQWJzb2x1dGVR
dWFkcyhjb25zdCBSZW5kZXJJbmxpbmUqIGNvbnRhaW5lciwgVmVjdG9yPEZsb2F0UXVhZD4mIHF1
YWRzKSBjb25zdAorICAgIHZvaWQgb3BlcmF0b3IoKShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisg
ICAgeworICAgICAgICBJbnRSZWN0IGludFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpOwor
ICAgICAgICBpbnRSZWN0Lm1vdmUobV9hY2N1bXVsYXRlZE9mZnNldC54KCksIG1fYWNjdW11bGF0
ZWRPZmZzZXQueSgpKTsKKyAgICAgICAgbV9yZWN0cy5hcHBlbmQoaW50UmVjdCk7CisgICAgfQor
cHJpdmF0ZToKKyAgICBWZWN0b3I8SW50UmVjdD4mIG1fcmVjdHM7CisgICAgY29uc3QgTGF5b3V0
UG9pbnQmIG1fYWNjdW11bGF0ZWRPZmZzZXQ7Cit9OworCit9IC8vIHVubmFtZWQgbmFtZXNwYWNl
CisKK3ZvaWQgUmVuZGVySW5saW5lOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVj
dHMsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkgY29uc3QKIHsKLSAgICBp
ZiAoIWN1bGxlZElubGluZUZpcnN0TGluZUJveCgpKSB7Ci0gICAgICAgIHF1YWRzLmFwcGVuZChs
b2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdCgpKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBn
ZW5lcmF0ZUxpbmVCb3hSZWN0cyhBYnNvbHV0ZVJlY3RzR2VuZXJhdG9yQ29udGV4dChyZWN0cywg
YWNjdW11bGF0ZWRPZmZzZXQpKTsKKworICAgIGlmIChjb250aW51YXRpb24oKSkgeworICAgICAg
ICBpZiAoY29udGludWF0aW9uKCktPmlzQm94KCkpIHsKKyAgICAgICAgICAgIFJlbmRlckJveCog
Ym94ID0gdG9SZW5kZXJCb3goY29udGludWF0aW9uKCkpOworICAgICAgICAgICAgY29udGludWF0
aW9uKCktPmFic29sdXRlUmVjdHMocmVjdHMsIHRvTGF5b3V0UG9pbnQoYWNjdW11bGF0ZWRPZmZz
ZXQgLSBjb250YWluaW5nQmxvY2soKS0+bG9jYXRpb24oKSArIGJveC0+c2l6ZSgpKSk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgY29udGludWF0aW9uKCktPmFic29sdXRlUmVjdHMocmVj
dHMsIHRvTGF5b3V0UG9pbnQoYWNjdW11bGF0ZWRPZmZzZXQgLSBjb250YWluaW5nQmxvY2soKS0+
bG9jYXRpb24oKSkpOwogICAgIH0KK30KIAotICAgIGJvb2wgaXNIb3Jpem9udGFsID0gc3R5bGUo
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY3Vy
ciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpIHsKLSAg
ICAgICAgaWYgKGN1cnItPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgIC8vIFdlIHdhbnQgdG8gZ2V0IHRoZSBtYXJn
aW4gYm94IGluIHRoZSBpbmxpbmUgZGlyZWN0aW9uLCBhbmQgdGhlbiB1c2Ugb3VyIGZvbnQgYXNj
ZW50L2Rlc2NlbnQgaW4gdGhlIGJsb2NrCi0gICAgICAgIC8vIGRpcmVjdGlvbiAoYWxpZ25lZCB0
byB0aGUgcm9vdCBib3gncyBiYXNlbGluZSkuCi0gICAgICAgIGlmIChjdXJyLT5pc0JveCgpKSB7
Ci0gICAgICAgICAgICBSZW5kZXJCb3gqIGN1cnJCb3ggPSB0b1JlbmRlckJveChjdXJyKTsKLSAg
ICAgICAgICAgIGlmIChjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCkpIHsKLSAgICAgICAgICAg
ICAgICBSb290SW5saW5lQm94KiByb290Qm94ID0gY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigp
LT5yb290KCk7Ci0gICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94LT5sb2dp
Y2FsVG9wKCkgKyAocm9vdEJveC0+cmVuZGVyZXIoKS0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExp
bmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXItPnN0
eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFz
Y2VudCgpKTsKLSAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNvbnRhaW5lci0+
c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCku
aGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgRmxvYXRSZWN0IHJlc3VsdDsKLSAgICAgICAgICAg
ICAgICBpZiAoaXNIb3Jpem9udGFsKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBGbG9h
dFJlY3QoY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpLT54KCkgLSBjdXJyQm94LT5tYXJnaW5M
ZWZ0KCksIGxvZ2ljYWxUb3AsIGN1cnJCb3gtPndpZHRoKCkgKyBjdXJyQm94LT5tYXJnaW5XaWR0
aCgpLCBsb2dpY2FsSGVpZ2h0KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChsb2dpY2FsVG9wLCBjdXJyQm94LT5pbmxpbmVCb3hX
cmFwcGVyKCktPnkoKSAtIGN1cnJCb3gtPm1hcmdpblRvcCgpLCBsb2dpY2FsSGVpZ2h0LCBjdXJy
Qm94LT5oZWlnaHQoKSArIGN1cnJCb3gtPm1hcmdpbkhlaWdodCgpKTsKLSAgICAgICAgICAgICAg
ICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChyZXN1bHQpKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIGlmIChjdXJyLT5pc1JlbmRlcklubGluZSgpKSB7Ci0gICAgICAg
ICAgICAvLyBJZiB0aGUgY2hpbGQgZG9lc24ndCBuZWVkIGxpbmUgYm94ZXMgZWl0aGVyLCB0aGVu
IHdlIGNhbiByZWN1ci4KLSAgICAgICAgICAgIFJlbmRlcklubGluZSogY3VycklubGluZSA9IHRv
UmVuZGVySW5saW5lKGN1cnIpOwotICAgICAgICAgICAgaWYgKCFjdXJySW5saW5lLT5hbHdheXND
cmVhdGVMaW5lQm94ZXMoKSkKLSAgICAgICAgICAgICAgICBjdXJySW5saW5lLT5jdWxsZWRJbmxp
bmVBYnNvbHV0ZVF1YWRzKGNvbnRhaW5lciwgcXVhZHMpOwotICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgZm9yIChJbmxpbmVGbG93Qm94KiBjaGlsZExpbmUgPSBjdXJySW5saW5l
LT5maXJzdExpbmVCb3goKTsgY2hpbGRMaW5lOyBjaGlsZExpbmUgPSBjaGlsZExpbmUtPm5leHRM
aW5lQm94KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgUm9vdElubGluZUJveCogcm9vdEJveCA9
IGNoaWxkTGluZS0+cm9vdCgpOwotICAgICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9
IHJvb3RCb3gtPmxvZ2ljYWxUb3AoKSArIChyb290Qm94LT5yZW5kZXJlcigpLT5zdHlsZShyb290
Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAt
IGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZv
bnRNZXRyaWNzKCkuYXNjZW50KCkpOwotICAgICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEhl
aWdodCA9IGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9u
dCgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgICAgIEZsb2F0UmVj
dCByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPSBGbG9hdFJlY3QoY2hpbGRMaW5lLT54KCkgLSBjaGls
ZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bG9naWNhbFRvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZExpbmUtPmxvZ2lj
YWxXaWR0aCgpICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpICsgY2hpbGRMaW5lLT5t
YXJnaW5Mb2dpY2FsUmlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2Fs
SGVpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gRmxvYXRSZWN0KGxvZ2ljYWxUb3AsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hpbGRMaW5lLT55KCkgLSBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0KCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbEhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGlsZExpbmUtPmxvZ2ljYWxXaWR0aCgpICsgY2hpbGRMaW5lLT5tYXJn
aW5Mb2dpY2FsTGVmdCgpICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsUmlnaHQoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKHJlc3VsdCkp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChj
dXJyLT5pc1RleHQoKSkgewotICAgICAgICAgICAgUmVuZGVyVGV4dCogY3VyclRleHQgPSB0b1Jl
bmRlclRleHQoY3Vycik7Ci0gICAgICAgICAgICBmb3IgKElubGluZVRleHRCb3gqIGNoaWxkVGV4
dCA9IGN1cnJUZXh0LT5maXJzdFRleHRCb3goKTsgY2hpbGRUZXh0OyBjaGlsZFRleHQgPSBjaGls
ZFRleHQtPm5leHRUZXh0Qm94KCkpIHsKLSAgICAgICAgICAgICAgICBSb290SW5saW5lQm94KiBy
b290Qm94ID0gY2hpbGRUZXh0LT5yb290KCk7Ci0gICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxU
b3AgPSByb290Qm94LT5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC0+cmVuZGVyZXIoKS0+c3R5bGUo
cm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50
KCkgLSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQo
KS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKLSAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEhl
aWdodCA9IGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9u
dCgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgRmxvYXRSZWN0IHJl
c3VsdDsKLSAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQotICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBGbG9hdFJlY3QoY2hpbGRUZXh0LT54KCksIGxvZ2ljYWxUb3AsIGNoaWxk
VGV4dC0+bG9naWNhbFdpZHRoKCksIGxvZ2ljYWxIZWlnaHQpOwotICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0KGxvZ2ljYWxUb3AsIGNo
aWxkVGV4dC0+eSgpLCBsb2dpY2FsSGVpZ2h0LCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpKTsK
LSAgICAgICAgICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChyZXN1bHQp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCituYW1lc3BhY2UgeworCitjbGFzcyBBYnNv
bHV0ZVF1YWRzR2VuZXJhdG9yQ29udGV4dCB7CitwdWJsaWM6CisgICAgQWJzb2x1dGVRdWFkc0dl
bmVyYXRvckNvbnRleHQoY29uc3QgUmVuZGVySW5saW5lKiByZW5kZXJlciwgVmVjdG9yPEZsb2F0
UXVhZD4mIHF1YWRzLCBib29sKiB3YXNGaXhlZCkKKyAgICAgICAgOiBtX3JlbmRlcmVyKHJlbmRl
cmVyKQorICAgICAgICAsIG1fcXVhZHMocXVhZHMpCisgICAgICAgICwgbV93YXNGaXhlZCh3YXNG
aXhlZCkgeyB9CisKKyAgICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgRmxvYXRSZWN0JiByZWN0KQor
ICAgIHsKKyAgICAgICAgbV9xdWFkcy5hcHBlbmQobV9yZW5kZXJlci0+bG9jYWxUb0Fic29sdXRl
UXVhZChyZWN0KSk7CiAgICAgfQorcHJpdmF0ZToKKyAgICBjb25zdCBSZW5kZXJJbmxpbmUqIG1f
cmVuZGVyZXI7CisgICAgVmVjdG9yPEZsb2F0UXVhZD4mIG1fcXVhZHM7CisgICAgYm9vbCogbV93
YXNGaXhlZDsKK307CisKK30gLy8gdW5uYW1lZCBuYW1lc3BhY2UKKwordm9pZCBSZW5kZXJJbmxp
bmU6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKiB3YXNGaXhl
ZCkgY29uc3QKK3sKKyAgICBnZW5lcmF0ZUxpbmVCb3hSZWN0cyhBYnNvbHV0ZVF1YWRzR2VuZXJh
dG9yQ29udGV4dCh0aGlzLCBxdWFkcywgd2FzRml4ZWQpKTsKKworICAgIGlmIChjb250aW51YXRp
b24oKSkKKyAgICAgICAgY29udGludWF0aW9uKCktPmFic29sdXRlUXVhZHMocXVhZHMsIHdhc0Zp
eGVkKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJJbmxpbmU6Om9mZnNldExlZnQoKSBjb25zdApA
QCAtNzg1LDExICs3NTQsMjggQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlcklubGluZTo6cG9zaXRp
b25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCiAgICAgcmV0dXJuIFJlbmRlckJv
eE1vZGVsT2JqZWN0Ojpwb3NpdGlvbkZvclBvaW50KHBvaW50KTsKIH0KIAorbmFtZXNwYWNlIHsK
KworY2xhc3MgTGluZXNCb3VuZGluZ0JveEdlbmVyYXRvckNvbnRleHQgeworcHVibGljOgorICAg
IExpbmVzQm91bmRpbmdCb3hHZW5lcmF0b3JDb250ZXh0KEZsb2F0UmVjdCYgcmVjdCkgOiBtX3Jl
Y3QocmVjdCkgeyB9CisgICAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
KyAgICB7CisgICAgICAgIG1fcmVjdC51bml0ZUlmTm9uWmVybyhyZWN0KTsKKyAgICB9Citwcml2
YXRlOgorICAgIEZsb2F0UmVjdCYgbV9yZWN0OworfTsKKworfSAvLyB1bm5hbWVkIG5hbWVzcGFj
ZQorCiBJbnRSZWN0IFJlbmRlcklubGluZTo6bGluZXNCb3VuZGluZ0JveCgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFhbHdheXNDcmVhdGVMaW5lQm94ZXMoKSkgewogICAgICAgICBBU1NFUlQoIWZpcnN0
TGluZUJveCgpKTsKLSAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoY3VsbGVkSW5saW5l
Qm91bmRpbmdCb3godGhpcykpOworICAgICAgICBGbG9hdFJlY3QgZmxvYXRSZXN1bHQ7CisgICAg
ICAgIGdlbmVyYXRlQ3VsbGVkTGluZUJveFJlY3RzKExpbmVzQm91bmRpbmdCb3hHZW5lcmF0b3JD
b250ZXh0KGZsb2F0UmVzdWx0KSwgdGhpcyk7CisgICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRS
ZWN0KGZsb2F0UmVzdWx0KTsKICAgICB9CiAKICAgICBJbnRSZWN0IHJlc3VsdDsKQEAgLTgyMSw2
NiArODA3LDYgQEAgSW50UmVjdCBSZW5kZXJJbmxpbmU6OmxpbmVzQm91bmRpbmdCb3goKSBjb25z
dAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJJbmxpbmU6OmN1bGxl
ZElubGluZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRlcklubGluZSogY29udGFpbmVyKSBjb25zdAot
ewotICAgIEZsb2F0UmVjdCByZXN1bHQ7Ci0gICAgYm9vbCBpc0hvcml6b250YWwgPSBzdHlsZSgp
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJy
ID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgewotICAg
ICAgICBpZiAoY3Vyci0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgLy8gV2Ugd2FudCB0byBnZXQgdGhlIG1hcmdp
biBib3ggaW4gdGhlIGlubGluZSBkaXJlY3Rpb24sIGFuZCB0aGVuIHVzZSBvdXIgZm9udCBhc2Nl
bnQvZGVzY2VudCBpbiB0aGUgYmxvY2sKLSAgICAgICAgLy8gZGlyZWN0aW9uIChhbGlnbmVkIHRv
IHRoZSByb290IGJveCdzIGJhc2VsaW5lKS4KLSAgICAgICAgaWYgKGN1cnItPmlzQm94KCkpIHsK
LSAgICAgICAgICAgIFJlbmRlckJveCogY3VyckJveCA9IHRvUmVuZGVyQm94KGN1cnIpOwotICAg
ICAgICAgICAgaWYgKGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKSkgewotICAgICAgICAgICAg
ICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCkt
PnJvb3QoKTsKLSAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2lj
YWxUb3AoKSArIChyb290Qm94LT5yZW5kZXJlcigpLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGlu
ZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5
bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNj
ZW50KCkpOwotICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyLT5z
dHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5o
ZWlnaHQoKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQotICAgICAgICAgICAg
ICAgICAgICByZXN1bHQudW5pdGVJZk5vblplcm8oRmxvYXRSZWN0KGN1cnJCb3gtPmlubGluZUJv
eFdyYXBwZXIoKS0+eCgpIC0gY3VyckJveC0+bWFyZ2luTGVmdCgpLCBsb2dpY2FsVG9wLCBjdXJy
Qm94LT53aWR0aCgpICsgY3VyckJveC0+bWFyZ2luV2lkdGgoKSwgbG9naWNhbEhlaWdodCkpOwot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZO
b25aZXJvKEZsb2F0UmVjdChsb2dpY2FsVG9wLCBjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCkt
PnkoKSAtIGN1cnJCb3gtPm1hcmdpblRvcCgpLCBsb2dpY2FsSGVpZ2h0LCBjdXJyQm94LT5oZWln
aHQoKSArIGN1cnJCb3gtPm1hcmdpbkhlaWdodCgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0gZWxzZSBpZiAoY3Vyci0+aXNSZW5kZXJJbmxpbmUoKSkgewotICAgICAgICAgICAgLy8gSWYg
dGhlIGNoaWxkIGRvZXNuJ3QgbmVlZCBsaW5lIGJveGVzIGVpdGhlciwgdGhlbiB3ZSBjYW4gcmVj
dXIuCi0gICAgICAgICAgICBSZW5kZXJJbmxpbmUqIGN1cnJJbmxpbmUgPSB0b1JlbmRlcklubGlu
ZShjdXJyKTsKLSAgICAgICAgICAgIGlmICghY3VycklubGluZS0+YWx3YXlzQ3JlYXRlTGluZUJv
eGVzKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKGN1cnJJbmxpbmUt
PmN1bGxlZElubGluZUJvdW5kaW5nQm94KGNvbnRhaW5lcikpOwotICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgZm9yIChJbmxpbmVGbG93Qm94KiBjaGlsZExpbmUgPSBjdXJySW5s
aW5lLT5maXJzdExpbmVCb3goKTsgY2hpbGRMaW5lOyBjaGlsZExpbmUgPSBjaGlsZExpbmUtPm5l
eHRMaW5lQm94KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgUm9vdElubGluZUJveCogcm9vdEJv
eCA9IGNoaWxkTGluZS0+cm9vdCgpOwotICAgICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRv
cCA9IHJvb3RCb3gtPmxvZ2ljYWxUb3AoKSArIChyb290Qm94LT5yZW5kZXJlcigpLT5zdHlsZShy
b290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQo
KSAtIGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgp
LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwotICAgICAgICAgICAgICAgICAgICBpbnQgbG9naWNh
bEhlaWdodCA9IGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+
Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChp
c0hvcml6b250YWwpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVJZk5vblpl
cm8oRmxvYXRSZWN0KGNoaWxkTGluZS0+eCgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVm
dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hpbGRMaW5lLT5sb2dpY2FsV2lkdGgoKSArIGNoaWxkTGluZS0+
bWFyZ2luTG9naWNhbExlZnQoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbFJpZ2h0KCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbEhlaWdodCkpOwotICAgICAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVJZk5vblpl
cm8oRmxvYXRSZWN0KGxvZ2ljYWxUb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hp
bGRMaW5lLT55KCkgLSBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0KCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbG9naWNhbEhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGlsZExpbmUtPmxvZ2ljYWxXaWR0aCgpICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2Fs
TGVmdCgpICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsUmlnaHQoKSkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIGlmIChjdXJyLT5pc1RleHQoKSkgewotICAgICAgICAgICAgUmVu
ZGVyVGV4dCogY3VyclRleHQgPSB0b1JlbmRlclRleHQoY3Vycik7Ci0gICAgICAgICAgICBmb3Ig
KElubGluZVRleHRCb3gqIGNoaWxkVGV4dCA9IGN1cnJUZXh0LT5maXJzdFRleHRCb3goKTsgY2hp
bGRUZXh0OyBjaGlsZFRleHQgPSBjaGlsZFRleHQtPm5leHRUZXh0Qm94KCkpIHsKLSAgICAgICAg
ICAgICAgICBSb290SW5saW5lQm94KiByb290Qm94ID0gY2hpbGRUZXh0LT5yb290KCk7Ci0gICAg
ICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94LT5sb2dpY2FsVG9wKCkgKyAocm9v
dEJveC0+cmVuZGVyZXIoKS0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9u
dCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlz
Rmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKLSAgICAg
ICAgICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+
aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuaXRlSWZOb25aZXJvKEZsb2F0UmVjdChjaGlsZFRleHQtPngoKSwgbG9naWNhbFRvcCwgY2hp
bGRUZXh0LT5sb2dpY2FsV2lkdGgoKSwgbG9naWNhbEhlaWdodCkpOwotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKEZsb2F0UmVj
dChsb2dpY2FsVG9wLCBjaGlsZFRleHQtPnkoKSwgbG9naWNhbEhlaWdodCwgY2hpbGRUZXh0LT5s
b2dpY2FsV2lkdGgoKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJl
dHVybiBlbmNsb3NpbmdMYXlvdXRSZWN0KHJlc3VsdCk7Ci19Ci0KIElubGluZUJveCogUmVuZGVy
SW5saW5lOjpjdWxsZWRJbmxpbmVGaXJzdExpbmVCb3goKSBjb25zdAogewogICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNp
YmxpbmcoKSkgewpAQCAtOTMxLDcgKzg1Nyw5IEBAIElubGluZUJveCogUmVuZGVySW5saW5lOjpj
dWxsZWRJbmxpbmVMYXN0TGluZUJveCgpIGNvbnN0CiAKIExheW91dFJlY3QgUmVuZGVySW5saW5l
OjpjdWxsZWRJbmxpbmVWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94KCkgY29uc3QKIHsKLSAgICBM
YXlvdXRSZWN0IHJlc3VsdChjdWxsZWRJbmxpbmVCb3VuZGluZ0JveCh0aGlzKSk7CisgICAgRmxv
YXRSZWN0IGZsb2F0UmVzdWx0OworICAgIGdlbmVyYXRlQ3VsbGVkTGluZUJveFJlY3RzKExpbmVz
Qm91bmRpbmdCb3hHZW5lcmF0b3JDb250ZXh0KGZsb2F0UmVzdWx0KSwgdGhpcyk7CisgICAgTGF5
b3V0UmVjdCByZXN1bHQoZW5jbG9zaW5nTGF5b3V0UmVjdChmbG9hdFJlc3VsdCkpOwogICAgIGJv
b2wgaXNIb3Jpem9udGFsID0gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKICAg
ICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1
cnItPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKGN1cnItPmlzRmxvYXRpbmdPclBvc2l0
aW9uZWQoKSkKQEAgLTEzNjYsMTIgKzEyOTQsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6aW1hZ2VD
aGFuZ2VkKFdyYXBwZWRJbWFnZVB0ciwgY29uc3QgSW50UmVjdCopCiAKIHZvaWQgUmVuZGVySW5s
aW5lOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlv
dXRQb2ludCYgYWRkaXRpb25hbE9mZnNldCkKIHsKLSAgICBpZiAoIWFsd2F5c0NyZWF0ZUxpbmVC
b3hlcygpKQotICAgICAgICBjdWxsZWRJbmxpbmVBYnNvbHV0ZVJlY3RzKHRoaXMsIHJlY3RzLCB0
b0xheW91dFNpemUoYWRkaXRpb25hbE9mZnNldCkpOwotICAgIGVsc2UgewotICAgICAgICBmb3Ig
KElubGluZUZsb3dCb3gqIGN1cnIgPSBmaXJzdExpbmVCb3goKTsgY3VycjsgY3VyciA9IGN1cnIt
Pm5leHRMaW5lQm94KCkpCi0gICAgICAgICAgICByZWN0cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVj
dChGbG9hdFJlY3QoYWRkaXRpb25hbE9mZnNldC54KCkgKyBjdXJyLT54KCksIGFkZGl0aW9uYWxP
ZmZzZXQueSgpICsgY3Vyci0+eSgpLCBjdXJyLT53aWR0aCgpLCBjdXJyLT5oZWlnaHQoKSkpKTsK
LSAgICB9CisgICAgZ2VuZXJhdGVMaW5lQm94UmVjdHMoQWJzb2x1dGVSZWN0c0dlbmVyYXRvckNv
bnRleHQocmVjdHMsIGFkZGl0aW9uYWxPZmZzZXQpKTsKIAogICAgIGZvciAoUmVuZGVyT2JqZWN0
KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkg
ewogICAgICAgICBpZiAoIWN1cnItPmlzVGV4dCgpICYmICFjdXJyLT5pc0xpc3RNYXJrZXIoKSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCmluZGV4IDE5MGNiZWM0MWNm
YTUzZTRlMjk4ZWEzMjc3OTg5NmEwMTU0ZTA5OWUuLmMxNTMyY2Y1NjhmYjQ1ZWJiNGYzMTQ3N2Q3
YWYyYmMyNWJmNWI2YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgK
QEAgLTk4LDEyICs5OCwxNCBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVy
SW5saW5lKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgRmxvYXRSZWN0IGN1bGxlZElu
bGluZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRlcklubGluZSogY29udGFpbmVyKSBjb25zdDsKICAg
ICBMYXlvdXRSZWN0IGN1bGxlZElubGluZVZpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3goKSBjb25z
dDsKICAgICBJbmxpbmVCb3gqIGN1bGxlZElubGluZUZpcnN0TGluZUJveCgpIGNvbnN0OwogICAg
IElubGluZUJveCogY3VsbGVkSW5saW5lTGFzdExpbmVCb3goKSBjb25zdDsKLSAgICB2b2lkIGN1
bGxlZElubGluZUFic29sdXRlUmVjdHMoY29uc3QgUmVuZGVySW5saW5lKiBjb250YWluZXIsIFZl
Y3RvcjxJbnRSZWN0PiYsIGNvbnN0IExheW91dFNpemUmKSBjb25zdDsKLSAgICB2b2lkIGN1bGxl
ZElubGluZUFic29sdXRlUXVhZHMoY29uc3QgUmVuZGVySW5saW5lKiBjb250YWluZXIsIFZlY3Rv
cjxGbG9hdFF1YWQ+JikgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBHZW5lcmF0b3JD
b250ZXh0PgorICAgIHZvaWQgZ2VuZXJhdGVMaW5lQm94UmVjdHMoR2VuZXJhdG9yQ29udGV4dCB5
aWVsZCkgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgR2VuZXJhdG9yQ29udGV4dD4KKyAg
ICB2b2lkIGdlbmVyYXRlQ3VsbGVkTGluZUJveFJlY3RzKEdlbmVyYXRvckNvbnRleHQgeWllbGQs
IGNvbnN0IFJlbmRlcklubGluZSogY29udGFpbmVyKSBjb25zdDsKIAogICAgIHZvaWQgYWRkQ2hp
bGRUb0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlv
bihSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141266</attachid>
            <date>2012-05-10 14:44:44 -0700</date>
            <delta_ts>2012-05-10 14:58:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-85725-20120510144443.patch</filename>
            <type>text/plain</type>
            <size>23837</size>
            <attacher name="Tien-Ren Chen">trchen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2Njg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTY2YjhiMmZmNWY2ODhi
NmJkOTUxOGE3ODI4MTU4YmNlODRhZDJmMS4uMDMyMjc1MzAxNzdjMWVlMjE3MWFiNTYxMTMwMDJj
MDgwOTJhZDUwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTA1LTA1ICBUaWVu
LVJlbiBDaGVuICA8dHJjaGVuQGNocm9taXVtLm9yZz4KKworICAgICAgICBFbGltaW5hdGUgZHVw
bGljYXRlZCBjb2RlIGZvciBjdWxsZWQgbGluZSBib3ggaW4gUmVuZGVySW5saW5lCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTcyNQorCisgICAgICAg
IFRoaXMgcGF0Y2ggZXh0cmFjdHMgdGhlIGNvbW1vbiBwYXJ0IG9mIGN1bGxlZElubGluZUJvdW5k
aW5nQm94KCkgLworICAgICAgICBjdWxsZWRJbmxpbmVBYnNvbHV0ZVJlY3RzKCkgLyBjdWxsZWRJ
bmxpbmVBYnNvbHV0ZVF1YWRzKCkgdG8gYmVjb21lIGEKKyAgICAgICAgdGVtcGxhdGUgZnVuY3Rp
b24gZ2VuZXJhdGVDdWxsZWRMaW5lQm94UmVjdHMoKS4gVGhlIHRlbXBsYXRlIGZ1bmN0aW9uCisg
ICAgICAgIGFjY2VwdHMgYSBuZXcgcGFyYW1ldGVyLCBHZW5lcmF0b3JDb250ZXh0IGZ1bmN0b3Is
IHdoaWNoIHdpbGwgYmUKKyAgICAgICAgaW52b2tlZCBldmVyeXRpbWUgYSBuZXcgbGluZSBib3gg
cmVjdCBoYXMgYmVlbiBnZW5lcmF0ZWQuIFRoZSBnZW5lcmF0ZWQKKyAgICAgICAgcmVjdCB3aWxs
IGJlIGluIGxvY2FsIGNvb3JkaW5hdGUuIFRoZSBmdW5jdG9yIHdpbGwgYmUgcmVzcG9uc2libGUg
Zm9yCisgICAgICAgIGFwcHJvcHJpYXRlIHRyYW5zZm9ybWF0aW9uLCB0aGVuIGFwcGVuZGluZyB0
byB2ZWN0b3Igb3IgdW5pb24gd2l0aAorICAgICAgICBleGlzdGluZyBib3VuZGluZyBib3guCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLiBObyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
SW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
SW5saW5lOjpnZW5lcmF0ZUxpbmVCb3hSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJ
bmxpbmU6OmdlbmVyYXRlQ3VsbGVkTGluZUJveFJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlcklubGluZTo6YWJzb2x1dGVSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxp
bmU6OmFic29sdXRlUXVhZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpsaW5l
c0JvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6Y3VsbGVkSW5s
aW5lVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJ
bmxpbmU6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5s
aW5lLmg6CisgICAgICAgIChSZW5kZXJJbmxpbmUpOgorCiAyMDEyLTA1LTEwICBBZGFtIEJhcnRo
ICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgU2Nyb2xsVmlldzo6Zml4ZWRWaXNpYmxl
Q29udGVudFJlY3Qgc2hvdWxkIGJlIHB1YmxpYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW5saW5lLmNwcAppbmRleCA1YzkzMzYxMDRhNzRkZTAwZTJkYjhkYzBlOTkyZjgyYzA1NTIy
M2M0Li42ODA0MzgzZWQ2MzY0NjcyZTc0YzVkY2Q3Njk2OTg3Y2M5ZWU2YjAwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcApAQCAtNTA1LDMzICs1MDUsMjggQEAg
dm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlv
dXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgbV9saW5lQm94ZXMucGFpbnQodGhpcywgcGFpbnRJ
bmZvLCBwYWludE9mZnNldCk7CiB9CiAKLXZvaWQgUmVuZGVySW5saW5lOjphYnNvbHV0ZVJlY3Rz
KFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIEdlbmVyYXRvckNvbnRleHQ+Cit2b2lkIFJl
bmRlcklubGluZTo6Z2VuZXJhdGVMaW5lQm94UmVjdHMoR2VuZXJhdG9yQ29udGV4dCB5aWVsZCkg
Y29uc3QKIHsKICAgICBpZiAoIWFsd2F5c0NyZWF0ZUxpbmVCb3hlcygpKQotICAgICAgICBjdWxs
ZWRJbmxpbmVBYnNvbHV0ZVJlY3RzKHRoaXMsIHJlY3RzLCB0b0xheW91dFNpemUoYWNjdW11bGF0
ZWRPZmZzZXQpKTsKKyAgICAgICAgZ2VuZXJhdGVDdWxsZWRMaW5lQm94UmVjdHMoeWllbGQsIHRo
aXMpOwogICAgIGVsc2UgaWYgKElubGluZUZsb3dCb3gqIGN1cnIgPSBmaXJzdExpbmVCb3goKSkg
ewogICAgICAgICBmb3IgKDsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpCi0gICAg
ICAgICAgICByZWN0cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QoYWNjdW11bGF0
ZWRPZmZzZXQgKyBjdXJyLT50b3BMZWZ0KCksIGN1cnItPnNpemUoKSkpKTsKKyAgICAgICAgICAg
IHlpZWxkKEZsb2F0UmVjdChjdXJyLT50b3BMZWZ0KCksIGN1cnItPnNpemUoKSkpOwogICAgIH0g
ZWxzZQotICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVjdChyb3VuZGVkSW50UG9pbnQoYWNjdW11
bGF0ZWRPZmZzZXQpLCBJbnRTaXplKCkpKTsKLQotICAgIGlmIChjb250aW51YXRpb24oKSkgewot
ICAgICAgICBpZiAoY29udGludWF0aW9uKCktPmlzQm94KCkpIHsKLSAgICAgICAgICAgIFJlbmRl
ckJveCogYm94ID0gdG9SZW5kZXJCb3goY29udGludWF0aW9uKCkpOwotICAgICAgICAgICAgY29u
dGludWF0aW9uKCktPmFic29sdXRlUmVjdHMocmVjdHMsIHRvTGF5b3V0UG9pbnQoYWNjdW11bGF0
ZWRPZmZzZXQgLSBjb250YWluaW5nQmxvY2soKS0+bG9jYXRpb24oKSArIGJveC0+c2l6ZSgpKSk7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY29udGludWF0aW9uKCktPmFic29sdXRlUmVj
dHMocmVjdHMsIHRvTGF5b3V0UG9pbnQoYWNjdW11bGF0ZWRPZmZzZXQgLSBjb250YWluaW5nQmxv
Y2soKS0+bG9jYXRpb24oKSkpOwotICAgIH0KKyAgICAgICAgeWllbGQoRmxvYXRSZWN0KCkpOwog
fQogCi12b2lkIFJlbmRlcklubGluZTo6Y3VsbGVkSW5saW5lQWJzb2x1dGVSZWN0cyhjb25zdCBS
ZW5kZXJJbmxpbmUqIGNvbnRhaW5lciwgVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgTGF5
b3V0U2l6ZSYgb2Zmc2V0KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgR2VuZXJhdG9yQ29udGV4
dD4KK3ZvaWQgUmVuZGVySW5saW5lOjpnZW5lcmF0ZUN1bGxlZExpbmVCb3hSZWN0cyhHZW5lcmF0
b3JDb250ZXh0IHlpZWxkLCBjb25zdCBSZW5kZXJJbmxpbmUqIGNvbnRhaW5lcikgY29uc3QKIHsK
ICAgICBpZiAoIWN1bGxlZElubGluZUZpcnN0TGluZUJveCgpKSB7Ci0gICAgICAgIHJlY3RzLmFw
cGVuZChJbnRSZWN0KG9mZnNldC53aWR0aCgpLCBvZmZzZXQuaGVpZ2h0KCksIDAsIDApKTsKKyAg
ICAgICAgeWllbGQoRmxvYXRSZWN0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAg
Ym9vbCBpc0hvcml6b250YWwgPSBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwor
CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIg
PSBjdXJyLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChjdXJyLT5pc0Zsb2F0aW5nT3JQ
b3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTU0NCwzNSArNTM5LDMxIEBA
IHZvaWQgUmVuZGVySW5saW5lOjpjdWxsZWRJbmxpbmVBYnNvbHV0ZVJlY3RzKGNvbnN0IFJlbmRl
cklubGluZSogY29udGFpbmVyLCBWZWN0CiAgICAgICAgICAgICAgICAgUm9vdElubGluZUJveCog
cm9vdEJveCA9IGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKS0+cm9vdCgpOwogICAgICAgICAg
ICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC0+bG9naWNhbFRvcCgpICsgKHJvb3RCb3gt
PnJlbmRlcmVyKCktPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5m
b250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0
TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CiAgICAgICAgICAg
ICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmly
c3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdodCgpOwotICAgICAgICAg
ICAgICAgIEZsb2F0UmVjdCByZXN1bHQ7CiAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRh
bCkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0KG9mZnNldC53aWR0aCgp
ICsgY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpLT54KCkgLSBjdXJyQm94LT5tYXJnaW5MZWZ0
KCksIG9mZnNldC5oZWlnaHQoKSArIGxvZ2ljYWxUb3AsIGN1cnJCb3gtPndpZHRoKCkgKyBjdXJy
Qm94LT5tYXJnaW5XaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAg
eWllbGQoRmxvYXRSZWN0KGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKS0+eCgpIC0gY3VyckJv
eC0+bWFyZ2luTGVmdCgpLCBsb2dpY2FsVG9wLCBjdXJyQm94LT53aWR0aCgpICsgY3VyckJveC0+
bWFyZ2luV2lkdGgoKSwgbG9naWNhbEhlaWdodCkpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0KG9mZnNldC53aWR0aCgpICsgbG9n
aWNhbFRvcCwgb2Zmc2V0LmhlaWdodCgpICsgY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpLT55
KCkgLSBjdXJyQm94LT5tYXJnaW5Ub3AoKSwgbG9naWNhbEhlaWdodCwgY3VyckJveC0+aGVpZ2h0
KCkgKyBjdXJyQm94LT5tYXJnaW5IZWlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgcmVjdHMuYXBw
ZW5kKGVuY2xvc2luZ0ludFJlY3QocmVzdWx0KSk7CisgICAgICAgICAgICAgICAgICAgIHlpZWxk
KEZsb2F0UmVjdChsb2dpY2FsVG9wLCBjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPnkoKSAt
IGN1cnJCb3gtPm1hcmdpblRvcCgpLCBsb2dpY2FsSGVpZ2h0LCBjdXJyQm94LT5oZWlnaHQoKSAr
IGN1cnJCb3gtPm1hcmdpbkhlaWdodCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxz
ZSBpZiAoY3Vyci0+aXNSZW5kZXJJbmxpbmUoKSkgewogICAgICAgICAgICAgLy8gSWYgdGhlIGNo
aWxkIGRvZXNuJ3QgbmVlZCBsaW5lIGJveGVzIGVpdGhlciwgdGhlbiB3ZSBjYW4gcmVjdXIuCiAg
ICAgICAgICAgICBSZW5kZXJJbmxpbmUqIGN1cnJJbmxpbmUgPSB0b1JlbmRlcklubGluZShjdXJy
KTsKICAgICAgICAgICAgIGlmICghY3VycklubGluZS0+YWx3YXlzQ3JlYXRlTGluZUJveGVzKCkp
Ci0gICAgICAgICAgICAgICAgY3VycklubGluZS0+Y3VsbGVkSW5saW5lQWJzb2x1dGVSZWN0cyhj
b250YWluZXIsIHJlY3RzLCBvZmZzZXQpOworICAgICAgICAgICAgICAgIGN1cnJJbmxpbmUtPmdl
bmVyYXRlQ3VsbGVkTGluZUJveFJlY3RzKHlpZWxkLCBjb250YWluZXIpOwogICAgICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICAgICAgZm9yIChJbmxpbmVGbG93Qm94KiBjaGlsZExpbmUgPSBj
dXJySW5saW5lLT5maXJzdExpbmVCb3goKTsgY2hpbGRMaW5lOyBjaGlsZExpbmUgPSBjaGlsZExp
bmUtPm5leHRMaW5lQm94KCkpIHsKICAgICAgICAgICAgICAgICAgICAgUm9vdElubGluZUJveCog
cm9vdEJveCA9IGNoaWxkTGluZS0+cm9vdCgpOwogICAgICAgICAgICAgICAgICAgICBpbnQgbG9n
aWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2ljYWxUb3AoKSArIChyb290Qm94LT5yZW5kZXJlcigpLT5z
dHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5h
c2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+
Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwogICAgICAgICAgICAgICAgICAgICBpbnQg
bG9naWNhbEhlaWdodCA9IGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHls
ZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgICAg
IEZsb2F0UmVjdCByZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBGbG9hdFJlY3Qob2Zmc2V0LndpZHRo
KCkgKyBjaGlsZExpbmUtPngoKSAtIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQuaGVpZ2h0KCkgKyBsb2dpY2FsVG9wLAor
ICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQoRmxvYXRSZWN0KGNoaWxkTGluZS0+eCgpIC0g
Y2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvZ2ljYWxUb3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRMaW5lLT5s
b2dpY2FsV2lkdGgoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSArIGNoaWxkTGlu
ZS0+bWFyZ2luTG9naWNhbFJpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9n
aWNhbEhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbEhlaWdodCkp
OwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBGbG9hdFJlY3Qob2Zmc2V0LndpZHRoKCkgKyBsb2dpY2FsVG9wLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9mZnNldC5oZWlnaHQoKSArIGNoaWxkTGluZS0+eSgpIC0gY2hpbGRM
aW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQo
RmxvYXRSZWN0KGxvZ2ljYWxUb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRM
aW5lLT55KCkgLSBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0KCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbG9naWNhbEhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGlsZExpbmUtPmxvZ2ljYWxXaWR0aCgpICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVm
dCgpICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsUmlnaHQoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KHJlc3VsdCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoaWxkTGluZS0+bG9naWNhbFdpZHRoKCkgKyBjaGlsZExpbmUtPm1h
cmdpbkxvZ2ljYWxMZWZ0KCkgKyBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxSaWdodCgpKSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGN1cnIt
PmlzVGV4dCgpKSB7CkBAIC01ODEsOTkgKzU3Miw3NyBAQCB2b2lkIFJlbmRlcklubGluZTo6Y3Vs
bGVkSW5saW5lQWJzb2x1dGVSZWN0cyhjb25zdCBSZW5kZXJJbmxpbmUqIGNvbnRhaW5lciwgVmVj
dAogICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBjaGlsZFRleHQtPnJv
b3QoKTsKICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2ljYWxU
b3AoKSArIChyb290Qm94LT5yZW5kZXJlcigpLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0
eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5bGUo
cm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50
KCkpOwogICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyLT5zdHls
ZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5oZWln
aHQoKTsKLSAgICAgICAgICAgICAgICBGbG9hdFJlY3QgcmVzdWx0OwogICAgICAgICAgICAgICAg
IGlmIChpc0hvcml6b250YWwpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVj
dChvZmZzZXQud2lkdGgoKSArIGNoaWxkVGV4dC0+eCgpLCBvZmZzZXQuaGVpZ2h0KCkgKyBsb2dp
Y2FsVG9wLCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KTsKKyAgICAg
ICAgICAgICAgICAgICAgeWllbGQoRmxvYXRSZWN0KGNoaWxkVGV4dC0+eCgpLCBsb2dpY2FsVG9w
LCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KSk7CiAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBGbG9hdFJlY3Qob2Zmc2V0
LndpZHRoKCkgKyBsb2dpY2FsVG9wLCBvZmZzZXQuaGVpZ2h0KCkgKyBjaGlsZFRleHQtPnkoKSwg
bG9naWNhbEhlaWdodCwgY2hpbGRUZXh0LT5sb2dpY2FsV2lkdGgoKSk7Ci0gICAgICAgICAgICAg
ICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3QocmVzdWx0KSk7CisgICAgICAgICAgICAg
ICAgICAgIHlpZWxkKEZsb2F0UmVjdChsb2dpY2FsVG9wLCBjaGlsZFRleHQtPnkoKSwgbG9naWNh
bEhlaWdodCwgY2hpbGRUZXh0LT5sb2dpY2FsV2lkdGgoKSkpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogfQogCi12b2lkIFJlbmRlcklubGluZTo6YWJzb2x1dGVRdWFkcyhWZWN0
b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdAotewotICAgIGlmICgh
YWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpCi0gICAgICAgIGN1bGxlZElubGluZUFic29sdXRlUXVh
ZHModGhpcywgcXVhZHMpOwotICAgIGVsc2UgaWYgKElubGluZUZsb3dCb3gqIGN1cnIgPSBmaXJz
dExpbmVCb3goKSkgewotICAgICAgICBmb3IgKDsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5l
Qm94KCkpIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBsb2NhbFJlY3QoY3Vyci0+eCgpLCBjdXJy
LT55KCksIGN1cnItPndpZHRoKCksIGN1cnItPmhlaWdodCgpKTsKLSAgICAgICAgICAgIHF1YWRz
LmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKGxvY2FsUmVjdCwgZmFsc2UsIHdhc0ZpeGVkKSk7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNv
bHV0ZVF1YWQoRmxvYXRSZWN0KCksIGZhbHNlLCB3YXNGaXhlZCkpOworbmFtZXNwYWNlIHsKIAot
ICAgIGlmIChjb250aW51YXRpb24oKSkKLSAgICAgICAgY29udGludWF0aW9uKCktPmFic29sdXRl
UXVhZHMocXVhZHMsIHdhc0ZpeGVkKTsKLX0KK2NsYXNzIEFic29sdXRlUmVjdHNHZW5lcmF0b3JD
b250ZXh0IHsKK3B1YmxpYzoKKyAgICBBYnNvbHV0ZVJlY3RzR2VuZXJhdG9yQ29udGV4dChWZWN0
b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQp
CisgICAgICAgIDogbV9yZWN0cyhyZWN0cykKKyAgICAgICAgLCBtX2FjY3VtdWxhdGVkT2Zmc2V0
KGFjY3VtdWxhdGVkT2Zmc2V0KSB7IH0KIAotdm9pZCBSZW5kZXJJbmxpbmU6OmN1bGxlZElubGlu
ZUFic29sdXRlUXVhZHMoY29uc3QgUmVuZGVySW5saW5lKiBjb250YWluZXIsIFZlY3RvcjxGbG9h
dFF1YWQ+JiBxdWFkcykgY29uc3QKKyAgICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQorICAgIHsKKyAgICAgICAgSW50UmVjdCBpbnRSZWN0ID0gZW5jbG9zaW5nSW50UmVj
dChyZWN0KTsKKyAgICAgICAgaW50UmVjdC5tb3ZlKG1fYWNjdW11bGF0ZWRPZmZzZXQueCgpLCBt
X2FjY3VtdWxhdGVkT2Zmc2V0LnkoKSk7CisgICAgICAgIG1fcmVjdHMuYXBwZW5kKGludFJlY3Qp
OworICAgIH0KK3ByaXZhdGU6CisgICAgVmVjdG9yPEludFJlY3Q+JiBtX3JlY3RzOworICAgIGNv
bnN0IExheW91dFBvaW50JiBtX2FjY3VtdWxhdGVkT2Zmc2V0OworfTsKKworfSAvLyB1bm5hbWVk
IG5hbWVzcGFjZQorCit2b2lkIFJlbmRlcklubGluZTo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50
UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0
CiB7Ci0gICAgaWYgKCFjdWxsZWRJbmxpbmVGaXJzdExpbmVCb3goKSkgewotICAgICAgICBxdWFk
cy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoKSkpOwotICAgICAgICByZXR1
cm47CisgICAgZ2VuZXJhdGVMaW5lQm94UmVjdHMoQWJzb2x1dGVSZWN0c0dlbmVyYXRvckNvbnRl
eHQocmVjdHMsIGFjY3VtdWxhdGVkT2Zmc2V0KSk7CisKKyAgICBpZiAoY29udGludWF0aW9uKCkp
IHsKKyAgICAgICAgaWYgKGNvbnRpbnVhdGlvbigpLT5pc0JveCgpKSB7CisgICAgICAgICAgICBS
ZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVyQm94KGNvbnRpbnVhdGlvbigpKTsKKyAgICAgICAgICAg
IGNvbnRpbnVhdGlvbigpLT5hYnNvbHV0ZVJlY3RzKHJlY3RzLCB0b0xheW91dFBvaW50KGFjY3Vt
dWxhdGVkT2Zmc2V0IC0gY29udGFpbmluZ0Jsb2NrKCktPmxvY2F0aW9uKCkgKyBib3gtPnNpemUo
KSkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNvbnRpbnVhdGlvbigpLT5hYnNvbHV0
ZVJlY3RzKHJlY3RzLCB0b0xheW91dFBvaW50KGFjY3VtdWxhdGVkT2Zmc2V0IC0gY29udGFpbmlu
Z0Jsb2NrKCktPmxvY2F0aW9uKCkpKTsKICAgICB9Cit9CiAKLSAgICBib29sIGlzSG9yaXpvbnRh
bCA9IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7Ci0gICAgZm9yIChSZW5kZXJP
YmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGlu
ZygpKSB7Ci0gICAgICAgIGlmIChjdXJyLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAvLyBXZSB3YW50IHRvIGdl
dCB0aGUgbWFyZ2luIGJveCBpbiB0aGUgaW5saW5lIGRpcmVjdGlvbiwgYW5kIHRoZW4gdXNlIG91
ciBmb250IGFzY2VudC9kZXNjZW50IGluIHRoZSBibG9jawotICAgICAgICAvLyBkaXJlY3Rpb24g
KGFsaWduZWQgdG8gdGhlIHJvb3QgYm94J3MgYmFzZWxpbmUpLgotICAgICAgICBpZiAoY3Vyci0+
aXNCb3goKSkgewotICAgICAgICAgICAgUmVuZGVyQm94KiBjdXJyQm94ID0gdG9SZW5kZXJCb3go
Y3Vycik7Ci0gICAgICAgICAgICBpZiAoY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpKSB7Ci0g
ICAgICAgICAgICAgICAgUm9vdElubGluZUJveCogcm9vdEJveCA9IGN1cnJCb3gtPmlubGluZUJv
eFdyYXBwZXIoKS0+cm9vdCgpOwotICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9v
dEJveC0+bG9naWNhbFRvcCgpICsgKHJvb3RCb3gtPnJlbmRlcmVyKCktPnN0eWxlKHJvb3RCb3gt
PmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29u
dGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1l
dHJpY3MoKS5hc2NlbnQoKSk7Ci0gICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBj
b250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250
TWV0cmljcygpLmhlaWdodCgpOwotICAgICAgICAgICAgICAgIEZsb2F0UmVjdCByZXN1bHQ7Ci0g
ICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gRmxvYXRSZWN0KGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKS0+eCgpIC0gY3VyckJv
eC0+bWFyZ2luTGVmdCgpLCBsb2dpY2FsVG9wLCBjdXJyQm94LT53aWR0aCgpICsgY3VyckJveC0+
bWFyZ2luV2lkdGgoKSwgbG9naWNhbEhlaWdodCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPSBGbG9hdFJlY3QobG9naWNhbFRvcCwgY3VyckJveC0+
aW5saW5lQm94V3JhcHBlcigpLT55KCkgLSBjdXJyQm94LT5tYXJnaW5Ub3AoKSwgbG9naWNhbEhl
aWdodCwgY3VyckJveC0+aGVpZ2h0KCkgKyBjdXJyQm94LT5tYXJnaW5IZWlnaHQoKSk7Ci0gICAg
ICAgICAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQocmVzdWx0KSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoY3Vyci0+aXNSZW5kZXJJbmxpbmUoKSkg
ewotICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGRvZXNuJ3QgbmVlZCBsaW5lIGJveGVzIGVp
dGhlciwgdGhlbiB3ZSBjYW4gcmVjdXIuCi0gICAgICAgICAgICBSZW5kZXJJbmxpbmUqIGN1cnJJ
bmxpbmUgPSB0b1JlbmRlcklubGluZShjdXJyKTsKLSAgICAgICAgICAgIGlmICghY3VycklubGlu
ZS0+YWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpCi0gICAgICAgICAgICAgICAgY3VycklubGluZS0+
Y3VsbGVkSW5saW5lQWJzb2x1dGVRdWFkcyhjb250YWluZXIsIHF1YWRzKTsKLSAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgIGZvciAoSW5saW5lRmxvd0JveCogY2hpbGRMaW5lID0g
Y3VycklubGluZS0+Zmlyc3RMaW5lQm94KCk7IGNoaWxkTGluZTsgY2hpbGRMaW5lID0gY2hpbGRM
aW5lLT5uZXh0TGluZUJveCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gq
IHJvb3RCb3ggPSBjaGlsZExpbmUtPnJvb3QoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGxv
Z2ljYWxUb3AgPSByb290Qm94LT5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC0+cmVuZGVyZXIoKS0+
c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCku
YXNjZW50KCkgLSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSkt
PmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaW50
IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5
bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdodCgpOwotICAgICAgICAgICAgICAgICAg
ICBGbG9hdFJlY3QgcmVzdWx0OwotICAgICAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFs
KQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0KGNoaWxkTGluZS0+
eCgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxvZ2ljYWxUb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRM
aW5lLT5sb2dpY2FsV2lkdGgoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSArIGNo
aWxkTGluZS0+bWFyZ2luTG9naWNhbFJpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbG9naWNhbEhlaWdodCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChsb2dpY2FsVG9wLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoaWxkTGluZS0+eSgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2Fs
TGVmdCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRMaW5lLT5sb2dpY2FsV2lkdGgoKSArIGNoaWxk
TGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbFJpZ2h0
KCkpOwotICAgICAgICAgICAgICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVh
ZChyZXN1bHQpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSBpZiAoY3Vyci0+aXNUZXh0KCkpIHsKLSAgICAgICAgICAgIFJlbmRlclRleHQqIGN1cnJU
ZXh0ID0gdG9SZW5kZXJUZXh0KGN1cnIpOwotICAgICAgICAgICAgZm9yIChJbmxpbmVUZXh0Qm94
KiBjaGlsZFRleHQgPSBjdXJyVGV4dC0+Zmlyc3RUZXh0Qm94KCk7IGNoaWxkVGV4dDsgY2hpbGRU
ZXh0ID0gY2hpbGRUZXh0LT5uZXh0VGV4dEJveCgpKSB7Ci0gICAgICAgICAgICAgICAgUm9vdElu
bGluZUJveCogcm9vdEJveCA9IGNoaWxkVGV4dC0+cm9vdCgpOwotICAgICAgICAgICAgICAgIGlu
dCBsb2dpY2FsVG9wID0gcm9vdEJveC0+bG9naWNhbFRvcCgpICsgKHJvb3RCb3gtPnJlbmRlcmVy
KCktPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmlj
cygpLmFzY2VudCgpIC0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxl
KCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7Ci0gICAgICAgICAgICAgICAgaW50
IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5
bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdodCgpOwotICAgICAgICAgICAgICAgIEZs
b2F0UmVjdCByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKLSAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0KGNoaWxkVGV4dC0+eCgpLCBsb2dpY2Fs
VG9wLCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KTsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChsb2dp
Y2FsVG9wLCBjaGlsZFRleHQtPnkoKSwgbG9naWNhbEhlaWdodCwgY2hpbGRUZXh0LT5sb2dpY2Fs
V2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1
YWQocmVzdWx0KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKworbmFtZXNwYWNlIHsKKwor
Y2xhc3MgQWJzb2x1dGVRdWFkc0dlbmVyYXRvckNvbnRleHQgeworcHVibGljOgorICAgIEFic29s
dXRlUXVhZHNHZW5lcmF0b3JDb250ZXh0KGNvbnN0IFJlbmRlcklubGluZSogcmVuZGVyZXIsIFZl
Y3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCogd2FzRml4ZWQpCisgICAgICAgIDogbV9yZW5k
ZXJlcihyZW5kZXJlcikKKyAgICAgICAgLCBtX3F1YWRzKHF1YWRzKQorICAgICAgICAsIG1fd2Fz
Rml4ZWQod2FzRml4ZWQpIHsgfQorCisgICAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKKyAgICB7CisgICAgICAgIG1fcXVhZHMuYXBwZW5kKG1fcmVuZGVyZXItPmxvY2Fs
VG9BYnNvbHV0ZVF1YWQocmVjdCkpOwogICAgIH0KK3ByaXZhdGU6CisgICAgY29uc3QgUmVuZGVy
SW5saW5lKiBtX3JlbmRlcmVyOworICAgIFZlY3RvcjxGbG9hdFF1YWQ+JiBtX3F1YWRzOworICAg
IGJvb2wqIG1fd2FzRml4ZWQ7Cit9OworCit9IC8vIHVubmFtZWQgbmFtZXNwYWNlCisKK3ZvaWQg
UmVuZGVySW5saW5lOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9v
bCogd2FzRml4ZWQpIGNvbnN0Cit7CisgICAgZ2VuZXJhdGVMaW5lQm94UmVjdHMoQWJzb2x1dGVR
dWFkc0dlbmVyYXRvckNvbnRleHQodGhpcywgcXVhZHMsIHdhc0ZpeGVkKSk7CisKKyAgICBpZiAo
Y29udGludWF0aW9uKCkpCisgICAgICAgIGNvbnRpbnVhdGlvbigpLT5hYnNvbHV0ZVF1YWRzKHF1
YWRzLCB3YXNGaXhlZCk7CiB9CiAKIExheW91dFVuaXQgUmVuZGVySW5saW5lOjpvZmZzZXRMZWZ0
KCkgY29uc3QKQEAgLTc4NSwxMSArNzU0LDI4IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJJbmxp
bmU6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQogICAgIHJldHVy
biBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cG9zaXRpb25Gb3JQb2ludChwb2ludCk7CiB9CiAKK25h
bWVzcGFjZSB7CisKK2NsYXNzIExpbmVzQm91bmRpbmdCb3hHZW5lcmF0b3JDb250ZXh0IHsKK3B1
YmxpYzoKKyAgICBMaW5lc0JvdW5kaW5nQm94R2VuZXJhdG9yQ29udGV4dChGbG9hdFJlY3QmIHJl
Y3QpIDogbV9yZWN0KHJlY3QpIHsgfQorICAgIHZvaWQgb3BlcmF0b3IoKShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCisgICAgeworICAgICAgICBtX3JlY3QudW5pdGVJZk5vblplcm8ocmVjdCk7Cisg
ICAgfQorcHJpdmF0ZToKKyAgICBGbG9hdFJlY3QmIG1fcmVjdDsKK307CisKK30gLy8gdW5uYW1l
ZCBuYW1lc3BhY2UKKwogSW50UmVjdCBSZW5kZXJJbmxpbmU6OmxpbmVzQm91bmRpbmdCb3goKSBj
b25zdAogewogICAgIGlmICghYWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpIHsKICAgICAgICAgQVNT
RVJUKCFmaXJzdExpbmVCb3goKSk7Ci0gICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGN1
bGxlZElubGluZUJvdW5kaW5nQm94KHRoaXMpKTsKKyAgICAgICAgRmxvYXRSZWN0IGZsb2F0UmVz
dWx0OworICAgICAgICBnZW5lcmF0ZUN1bGxlZExpbmVCb3hSZWN0cyhMaW5lc0JvdW5kaW5nQm94
R2VuZXJhdG9yQ29udGV4dChmbG9hdFJlc3VsdCksIHRoaXMpOworICAgICAgICByZXR1cm4gZW5j
bG9zaW5nSW50UmVjdChmbG9hdFJlc3VsdCk7CiAgICAgfQogCiAgICAgSW50UmVjdCByZXN1bHQ7
CkBAIC04MjEsNjYgKzgwNyw2IEBAIEludFJlY3QgUmVuZGVySW5saW5lOjpsaW5lc0JvdW5kaW5n
Qm94KCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1GbG9hdFJlY3QgUmVuZGVySW5s
aW5lOjpjdWxsZWRJbmxpbmVCb3VuZGluZ0JveChjb25zdCBSZW5kZXJJbmxpbmUqIGNvbnRhaW5l
cikgY29uc3QKLXsKLSAgICBGbG9hdFJlY3QgcmVzdWx0OwotICAgIGJvb2wgaXNIb3Jpem9udGFs
ID0gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKLSAgICBmb3IgKFJlbmRlck9i
amVjdCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5n
KCkpIHsKLSAgICAgICAgaWYgKGN1cnItPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgIC8vIFdlIHdhbnQgdG8gZ2V0
IHRoZSBtYXJnaW4gYm94IGluIHRoZSBpbmxpbmUgZGlyZWN0aW9uLCBhbmQgdGhlbiB1c2Ugb3Vy
IGZvbnQgYXNjZW50L2Rlc2NlbnQgaW4gdGhlIGJsb2NrCi0gICAgICAgIC8vIGRpcmVjdGlvbiAo
YWxpZ25lZCB0byB0aGUgcm9vdCBib3gncyBiYXNlbGluZSkuCi0gICAgICAgIGlmIChjdXJyLT5p
c0JveCgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJCb3gqIGN1cnJCb3ggPSB0b1JlbmRlckJveChj
dXJyKTsKLSAgICAgICAgICAgIGlmIChjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCkpIHsKLSAg
ICAgICAgICAgICAgICBSb290SW5saW5lQm94KiByb290Qm94ID0gY3VyckJveC0+aW5saW5lQm94
V3JhcHBlcigpLT5yb290KCk7Ci0gICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290
Qm94LT5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC0+cmVuZGVyZXIoKS0+c3R5bGUocm9vdEJveC0+
aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250
YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0
cmljcygpLmFzY2VudCgpKTsKLSAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNv
bnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRN
ZXRyaWNzKCkuaGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKLSAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKEZsb2F0UmVjdChjdXJyQm94
LT5pbmxpbmVCb3hXcmFwcGVyKCktPngoKSAtIGN1cnJCb3gtPm1hcmdpbkxlZnQoKSwgbG9naWNh
bFRvcCwgY3VyckJveC0+d2lkdGgoKSArIGN1cnJCb3gtPm1hcmdpbldpZHRoKCksIGxvZ2ljYWxI
ZWlnaHQpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC51bml0ZUlmTm9uWmVybyhGbG9hdFJlY3QobG9naWNhbFRvcCwgY3VyckJveC0+aW5saW5lQm94
V3JhcHBlcigpLT55KCkgLSBjdXJyQm94LT5tYXJnaW5Ub3AoKSwgbG9naWNhbEhlaWdodCwgY3Vy
ckJveC0+aGVpZ2h0KCkgKyBjdXJyQm94LT5tYXJnaW5IZWlnaHQoKSkpOwotICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgaWYgKGN1cnItPmlzUmVuZGVySW5saW5lKCkpIHsKLSAgICAgICAg
ICAgIC8vIElmIHRoZSBjaGlsZCBkb2Vzbid0IG5lZWQgbGluZSBib3hlcyBlaXRoZXIsIHRoZW4g
d2UgY2FuIHJlY3VyLgotICAgICAgICAgICAgUmVuZGVySW5saW5lKiBjdXJySW5saW5lID0gdG9S
ZW5kZXJJbmxpbmUoY3Vycik7Ci0gICAgICAgICAgICBpZiAoIWN1cnJJbmxpbmUtPmFsd2F5c0Ny
ZWF0ZUxpbmVCb3hlcygpKQotICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZUlmTm9uWmVybyhj
dXJySW5saW5lLT5jdWxsZWRJbmxpbmVCb3VuZGluZ0JveChjb250YWluZXIpKTsKLSAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGZvciAoSW5saW5lRmxvd0JveCogY2hpbGRMaW5l
ID0gY3VycklubGluZS0+Zmlyc3RMaW5lQm94KCk7IGNoaWxkTGluZTsgY2hpbGRMaW5lID0gY2hp
bGRMaW5lLT5uZXh0TGluZUJveCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVC
b3gqIHJvb3RCb3ggPSBjaGlsZExpbmUtPnJvb3QoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50
IGxvZ2ljYWxUb3AgPSByb290Qm94LT5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC0+cmVuZGVyZXIo
KS0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNz
KCkuYXNjZW50KCkgLSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUo
KSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
aW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5l
U3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdodCgpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoaXNIb3Jpem9udGFsKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVu
aXRlSWZOb25aZXJvKEZsb2F0UmVjdChjaGlsZExpbmUtPngoKSAtIGNoaWxkTGluZS0+bWFyZ2lu
TG9naWNhbExlZnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2FsVG9wLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTGluZS0+bG9naWNhbFdpZHRoKCkgKyBj
aGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0KCkgKyBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxS
aWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQpKTsKLSAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVu
aXRlSWZOb25aZXJvKEZsb2F0UmVjdChsb2dpY2FsVG9wLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoaWxkTGluZS0+eSgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hpbGRMaW5lLT5sb2dpY2FsV2lkdGgoKSArIGNoaWxkTGluZS0+bWFy
Z2luTG9naWNhbExlZnQoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbFJpZ2h0KCkpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoY3Vyci0+aXNUZXh0KCkpIHsKLSAgICAg
ICAgICAgIFJlbmRlclRleHQqIGN1cnJUZXh0ID0gdG9SZW5kZXJUZXh0KGN1cnIpOwotICAgICAg
ICAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBjaGlsZFRleHQgPSBjdXJyVGV4dC0+Zmlyc3RUZXh0
Qm94KCk7IGNoaWxkVGV4dDsgY2hpbGRUZXh0ID0gY2hpbGRUZXh0LT5uZXh0VGV4dEJveCgpKSB7
Ci0gICAgICAgICAgICAgICAgUm9vdElubGluZUJveCogcm9vdEJveCA9IGNoaWxkVGV4dC0+cm9v
dCgpOwotICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC0+bG9naWNhbFRv
cCgpICsgKHJvb3RCb3gtPnJlbmRlcmVyKCktPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5
bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyLT5zdHlsZShy
b290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQo
KSk7Ci0gICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXItPnN0eWxl
KHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdo
dCgpOwotICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpCi0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC51bml0ZUlmTm9uWmVybyhGbG9hdFJlY3QoY2hpbGRUZXh0LT54KCksIGxvZ2lj
YWxUb3AsIGNoaWxkVGV4dC0+bG9naWNhbFdpZHRoKCksIGxvZ2ljYWxIZWlnaHQpKTsKLSAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZUlmTm9uWmVy
byhGbG9hdFJlY3QobG9naWNhbFRvcCwgY2hpbGRUZXh0LT55KCksIGxvZ2ljYWxIZWlnaHQsIGNo
aWxkVGV4dC0+bG9naWNhbFdpZHRoKCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLSAgICByZXR1cm4gZW5jbG9zaW5nTGF5b3V0UmVjdChyZXN1bHQpOwotfQotCiBJbmxpbmVC
b3gqIFJlbmRlcklubGluZTo6Y3VsbGVkSW5saW5lRmlyc3RMaW5lQm94KCkgY29uc3QKIHsKICAg
ICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1
cnItPm5leHRTaWJsaW5nKCkpIHsKQEAgLTkzMSw3ICs4NTcsOSBAQCBJbmxpbmVCb3gqIFJlbmRl
cklubGluZTo6Y3VsbGVkSW5saW5lTGFzdExpbmVCb3goKSBjb25zdAogCiBMYXlvdXRSZWN0IFJl
bmRlcklubGluZTo6Y3VsbGVkSW5saW5lVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveCgpIGNvbnN0
CiB7Ci0gICAgTGF5b3V0UmVjdCByZXN1bHQoY3VsbGVkSW5saW5lQm91bmRpbmdCb3godGhpcykp
OworICAgIEZsb2F0UmVjdCBmbG9hdFJlc3VsdDsKKyAgICBnZW5lcmF0ZUN1bGxlZExpbmVCb3hS
ZWN0cyhMaW5lc0JvdW5kaW5nQm94R2VuZXJhdG9yQ29udGV4dChmbG9hdFJlc3VsdCksIHRoaXMp
OworICAgIExheW91dFJlY3QgcmVzdWx0KGVuY2xvc2luZ0xheW91dFJlY3QoZmxvYXRSZXN1bHQp
KTsKICAgICBib29sIGlzSG9yaXpvbnRhbCA9IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7
IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChjdXJyLT5pc0Zsb2F0
aW5nT3JQb3NpdGlvbmVkKCkpCkBAIC0xMzY2LDEyICsxMjk0LDcgQEAgdm9pZCBSZW5kZXJJbmxp
bmU6OmltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqKQogCiB2b2lk
IFJlbmRlcklubGluZTo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywg
Y29uc3QgTGF5b3V0UG9pbnQmIGFkZGl0aW9uYWxPZmZzZXQpCiB7Ci0gICAgaWYgKCFhbHdheXND
cmVhdGVMaW5lQm94ZXMoKSkKLSAgICAgICAgY3VsbGVkSW5saW5lQWJzb2x1dGVSZWN0cyh0aGlz
LCByZWN0cywgdG9MYXlvdXRTaXplKGFkZGl0aW9uYWxPZmZzZXQpKTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgZm9yIChJbmxpbmVGbG93Qm94KiBjdXJyID0gZmlyc3RMaW5lQm94KCk7IGN1cnI7IGN1
cnIgPSBjdXJyLT5uZXh0TGluZUJveCgpKQotICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGVuY2xv
c2luZ0ludFJlY3QoRmxvYXRSZWN0KGFkZGl0aW9uYWxPZmZzZXQueCgpICsgY3Vyci0+eCgpLCBh
ZGRpdGlvbmFsT2Zmc2V0LnkoKSArIGN1cnItPnkoKSwgY3Vyci0+d2lkdGgoKSwgY3Vyci0+aGVp
Z2h0KCkpKSk7Ci0gICAgfQorICAgIGdlbmVyYXRlTGluZUJveFJlY3RzKEFic29sdXRlUmVjdHNH
ZW5lcmF0b3JDb250ZXh0KHJlY3RzLCBhZGRpdGlvbmFsT2Zmc2V0KSk7CiAKICAgICBmb3IgKFJl
bmRlck9iamVjdCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRT
aWJsaW5nKCkpIHsKICAgICAgICAgaWYgKCFjdXJyLT5pc1RleHQoKSAmJiAhY3Vyci0+aXNMaXN0
TWFya2VyKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAppbmRleCAx
OTBjYmVjNDFjZmE1M2U0ZTI5OGVhMzI3Nzk4OTZhMDE1NGUwOTllLi5jMTUzMmNmNTY4ZmI0NWVi
YjRmMzE0NzdkN2FmMmJjMjViZjViNmI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW5saW5lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cklubGluZS5oCkBAIC05OCwxMiArOTgsMTQgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9v
bCBpc1JlbmRlcklubGluZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIEZsb2F0UmVj
dCBjdWxsZWRJbmxpbmVCb3VuZGluZ0JveChjb25zdCBSZW5kZXJJbmxpbmUqIGNvbnRhaW5lcikg
Y29uc3Q7CiAgICAgTGF5b3V0UmVjdCBjdWxsZWRJbmxpbmVWaXN1YWxPdmVyZmxvd0JvdW5kaW5n
Qm94KCkgY29uc3Q7CiAgICAgSW5saW5lQm94KiBjdWxsZWRJbmxpbmVGaXJzdExpbmVCb3goKSBj
b25zdDsKICAgICBJbmxpbmVCb3gqIGN1bGxlZElubGluZUxhc3RMaW5lQm94KCkgY29uc3Q7Ci0g
ICAgdm9pZCBjdWxsZWRJbmxpbmVBYnNvbHV0ZVJlY3RzKGNvbnN0IFJlbmRlcklubGluZSogY29u
dGFpbmVyLCBWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBMYXlvdXRTaXplJikgY29uc3Q7Ci0gICAg
dm9pZCBjdWxsZWRJbmxpbmVBYnNvbHV0ZVF1YWRzKGNvbnN0IFJlbmRlcklubGluZSogY29udGFp
bmVyLCBWZWN0b3I8RmxvYXRRdWFkPiYpIGNvbnN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
R2VuZXJhdG9yQ29udGV4dD4KKyAgICB2b2lkIGdlbmVyYXRlTGluZUJveFJlY3RzKEdlbmVyYXRv
ckNvbnRleHQgeWllbGQpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEdlbmVyYXRvckNv
bnRleHQ+CisgICAgdm9pZCBnZW5lcmF0ZUN1bGxlZExpbmVCb3hSZWN0cyhHZW5lcmF0b3JDb250
ZXh0IHlpZWxkLCBjb25zdCBSZW5kZXJJbmxpbmUqIGNvbnRhaW5lcikgY29uc3Q7CiAKICAgICB2
b2lkIGFkZENoaWxkVG9Db250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVy
T2JqZWN0KiBiZWZvcmVDaGlsZCk7CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkSWdub3JpbmdD
b250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVD
aGlsZCA9IDApOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141271</attachid>
            <date>2012-05-10 14:58:35 -0700</date>
            <delta_ts>2012-05-10 19:07:22 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-85725-20120510145834.patch</filename>
            <type>text/plain</type>
            <size>23536</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNjY5MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDEyLTA1LTEwICBUaWVuLVJl
biBDaGVuICA8dHJjaGVuQGNocm9taXVtLm9yZz4KKworICAgICAgICBFbGltaW5hdGUgZHVwbGlj
YXRlZCBjb2RlIGZvciBjdWxsZWQgbGluZSBib3ggaW4gUmVuZGVySW5saW5lCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTcyNQorCisgICAgICAgIFRo
aXMgcGF0Y2ggZXh0cmFjdHMgdGhlIGNvbW1vbiBwYXJ0IG9mIGN1bGxlZElubGluZUJvdW5kaW5n
Qm94KCkgLworICAgICAgICBjdWxsZWRJbmxpbmVBYnNvbHV0ZVJlY3RzKCkgLyBjdWxsZWRJbmxp
bmVBYnNvbHV0ZVF1YWRzKCkgdG8gYmVjb21lIGEKKyAgICAgICAgdGVtcGxhdGUgZnVuY3Rpb24g
Z2VuZXJhdGVDdWxsZWRMaW5lQm94UmVjdHMoKS4gVGhlIHRlbXBsYXRlIGZ1bmN0aW9uCisgICAg
ICAgIGFjY2VwdHMgYSBuZXcgcGFyYW1ldGVyLCBHZW5lcmF0b3JDb250ZXh0IGZ1bmN0b3IsIHdo
aWNoIHdpbGwgYmUKKyAgICAgICAgaW52b2tlZCBldmVyeXRpbWUgYSBuZXcgbGluZSBib3ggcmVj
dCBoYXMgYmVlbiBnZW5lcmF0ZWQuIFRoZSBnZW5lcmF0ZWQKKyAgICAgICAgcmVjdCB3aWxsIGJl
IGluIGxvY2FsIGNvb3JkaW5hdGUuIFRoZSBmdW5jdG9yIHdpbGwgYmUgcmVzcG9uc2libGUgZm9y
CisgICAgICAgIGFwcHJvcHJpYXRlIHRyYW5zZm9ybWF0aW9uLCB0aGVuIGFwcGVuZGluZyB0byB2
ZWN0b3Igb3IgdW5pb24gd2l0aAorICAgICAgICBleGlzdGluZyBib3VuZGluZyBib3guCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBO
byBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5l
OjpnZW5lcmF0ZUxpbmVCb3hSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6
OmdlbmVyYXRlQ3VsbGVkTGluZUJveFJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklu
bGluZTo6YWJzb2x1dGVSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmFi
c29sdXRlUXVhZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpsaW5lc0JvdW5k
aW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6Y3VsbGVkSW5saW5lVmlz
dWFsT3ZlcmZsb3dCb3VuZGluZ0JveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6
OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmg6
CisgICAgICAgIChSZW5kZXJJbmxpbmUpOgorCiAyMDEyLTA1LTEwICBBZGFtIEJhcnRoICA8YWJh
cnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQVNTRVJUIGluIEJpZGlSZXNvbHZlcjxJdGVyYXRv
ciwgUnVuPjo6Y29tbWl0RXhwbGljaXRFbWJlZGRpbmcgbWFrZXMgcnVubmluZyBkZWJ1ZyBidWls
ZHMgYW5ub3lpbmcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwCShyZXZpc2lvbiAxMTY2OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA1LDMzICs1MDUsMjggQEAgdm9pZCBSZW5k
ZXJJbmxpbmU6OnBhaW50KFBhaW50SW5mbyYgcGFpbgogICAgIG1fbGluZUJveGVzLnBhaW50KHRo
aXMsIHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwogfQogCi12b2lkIFJlbmRlcklubGluZTo6YWJz
b2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBHZW5lcmF0b3JDb250ZXh0
Pgordm9pZCBSZW5kZXJJbmxpbmU6OmdlbmVyYXRlTGluZUJveFJlY3RzKEdlbmVyYXRvckNvbnRl
eHQgeWllbGQpIGNvbnN0CiB7CiAgICAgaWYgKCFhbHdheXNDcmVhdGVMaW5lQm94ZXMoKSkKLSAg
ICAgICAgY3VsbGVkSW5saW5lQWJzb2x1dGVSZWN0cyh0aGlzLCByZWN0cywgdG9MYXlvdXRTaXpl
KGFjY3VtdWxhdGVkT2Zmc2V0KSk7CisgICAgICAgIGdlbmVyYXRlQ3VsbGVkTGluZUJveFJlY3Rz
KHlpZWxkLCB0aGlzKTsKICAgICBlbHNlIGlmIChJbmxpbmVGbG93Qm94KiBjdXJyID0gZmlyc3RM
aW5lQm94KCkpIHsKICAgICAgICAgZm9yICg7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0TGluZUJv
eCgpKQotICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0
KGFjY3VtdWxhdGVkT2Zmc2V0ICsgY3Vyci0+dG9wTGVmdCgpLCBjdXJyLT5zaXplKCkpKSk7Cisg
ICAgICAgICAgICB5aWVsZChGbG9hdFJlY3QoY3Vyci0+dG9wTGVmdCgpLCBjdXJyLT5zaXplKCkp
KTsKICAgICB9IGVsc2UKLSAgICAgICAgcmVjdHMuYXBwZW5kKEludFJlY3Qocm91bmRlZEludFBv
aW50KGFjY3VtdWxhdGVkT2Zmc2V0KSwgSW50U2l6ZSgpKSk7Ci0KLSAgICBpZiAoY29udGludWF0
aW9uKCkpIHsKLSAgICAgICAgaWYgKGNvbnRpbnVhdGlvbigpLT5pc0JveCgpKSB7Ci0gICAgICAg
ICAgICBSZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVyQm94KGNvbnRpbnVhdGlvbigpKTsKLSAgICAg
ICAgICAgIGNvbnRpbnVhdGlvbigpLT5hYnNvbHV0ZVJlY3RzKHJlY3RzLCB0b0xheW91dFBvaW50
KGFjY3VtdWxhdGVkT2Zmc2V0IC0gY29udGFpbmluZ0Jsb2NrKCktPmxvY2F0aW9uKCkgKyBib3gt
PnNpemUoKSkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVhdGlvbigpLT5h
YnNvbHV0ZVJlY3RzKHJlY3RzLCB0b0xheW91dFBvaW50KGFjY3VtdWxhdGVkT2Zmc2V0IC0gY29u
dGFpbmluZ0Jsb2NrKCktPmxvY2F0aW9uKCkpKTsKLSAgICB9CisgICAgICAgIHlpZWxkKEZsb2F0
UmVjdCgpKTsKIH0KIAotdm9pZCBSZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZUFic29sdXRlUmVj
dHMoY29uc3QgUmVuZGVySW5saW5lKiBjb250YWluZXIsIFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMs
IGNvbnN0IExheW91dFNpemUmIG9mZnNldCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIEdlbmVy
YXRvckNvbnRleHQ+Cit2b2lkIFJlbmRlcklubGluZTo6Z2VuZXJhdGVDdWxsZWRMaW5lQm94UmVj
dHMoR2VuZXJhdG9yQ29udGV4dCB5aWVsZCwgY29uc3QgUmVuZGVySW5saW5lKiBjb250YWluZXIp
IGNvbnN0CiB7CiAgICAgaWYgKCFjdWxsZWRJbmxpbmVGaXJzdExpbmVCb3goKSkgewotICAgICAg
ICByZWN0cy5hcHBlbmQoSW50UmVjdChvZmZzZXQud2lkdGgoKSwgb2Zmc2V0LmhlaWdodCgpLCAw
LCAwKSk7CisgICAgICAgIHlpZWxkKEZsb2F0UmVjdCgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIGJvb2wgaXNIb3Jpem9udGFsID0gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKTsKKwogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBj
dXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoY3Vyci0+aXNG
bG9hdGluZ09yUG9zaXRpb25lZCgpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC01NDQsMzUg
KzUzOSwzMSBAQCB2b2lkIFJlbmRlcklubGluZTo6Y3VsbGVkSW5saW5lQWJzb2x1dGVSCiAgICAg
ICAgICAgICAgICAgUm9vdElubGluZUJveCogcm9vdEJveCA9IGN1cnJCb3gtPmlubGluZUJveFdy
YXBwZXIoKS0+cm9vdCgpOwogICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJv
eC0+bG9naWNhbFRvcCgpICsgKHJvb3RCb3gtPnJlbmRlcmVyKCktPnN0eWxlKHJvb3RCb3gtPmlz
Rmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFp
bmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJp
Y3MoKS5hc2NlbnQoKSk7CiAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250
YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0
cmljcygpLmhlaWdodCgpOwotICAgICAgICAgICAgICAgIEZsb2F0UmVjdCByZXN1bHQ7CiAgICAg
ICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gRmxvYXRSZWN0KG9mZnNldC53aWR0aCgpICsgY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigp
LT54KCkgLSBjdXJyQm94LT5tYXJnaW5MZWZ0KCksIG9mZnNldC5oZWlnaHQoKSArIGxvZ2ljYWxU
b3AsIGN1cnJCb3gtPndpZHRoKCkgKyBjdXJyQm94LT5tYXJnaW5XaWR0aCgpLCBsb2dpY2FsSGVp
Z2h0KTsKKyAgICAgICAgICAgICAgICAgICAgeWllbGQoRmxvYXRSZWN0KGN1cnJCb3gtPmlubGlu
ZUJveFdyYXBwZXIoKS0+eCgpIC0gY3VyckJveC0+bWFyZ2luTGVmdCgpLCBsb2dpY2FsVG9wLCBj
dXJyQm94LT53aWR0aCgpICsgY3VyckJveC0+bWFyZ2luV2lkdGgoKSwgbG9naWNhbEhlaWdodCkp
OwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRmxv
YXRSZWN0KG9mZnNldC53aWR0aCgpICsgbG9naWNhbFRvcCwgb2Zmc2V0LmhlaWdodCgpICsgY3Vy
ckJveC0+aW5saW5lQm94V3JhcHBlcigpLT55KCkgLSBjdXJyQm94LT5tYXJnaW5Ub3AoKSwgbG9n
aWNhbEhlaWdodCwgY3VyckJveC0+aGVpZ2h0KCkgKyBjdXJyQm94LT5tYXJnaW5IZWlnaHQoKSk7
Ci0gICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3QocmVzdWx0KSk7
CisgICAgICAgICAgICAgICAgICAgIHlpZWxkKEZsb2F0UmVjdChsb2dpY2FsVG9wLCBjdXJyQm94
LT5pbmxpbmVCb3hXcmFwcGVyKCktPnkoKSAtIGN1cnJCb3gtPm1hcmdpblRvcCgpLCBsb2dpY2Fs
SGVpZ2h0LCBjdXJyQm94LT5oZWlnaHQoKSArIGN1cnJCb3gtPm1hcmdpbkhlaWdodCgpKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoY3Vyci0+aXNSZW5kZXJJbmxpbmUoKSkg
ewogICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGRvZXNuJ3QgbmVlZCBsaW5lIGJveGVzIGVp
dGhlciwgdGhlbiB3ZSBjYW4gcmVjdXIuCiAgICAgICAgICAgICBSZW5kZXJJbmxpbmUqIGN1cnJJ
bmxpbmUgPSB0b1JlbmRlcklubGluZShjdXJyKTsKICAgICAgICAgICAgIGlmICghY3VycklubGlu
ZS0+YWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpCi0gICAgICAgICAgICAgICAgY3VycklubGluZS0+
Y3VsbGVkSW5saW5lQWJzb2x1dGVSZWN0cyhjb250YWluZXIsIHJlY3RzLCBvZmZzZXQpOworICAg
ICAgICAgICAgICAgIGN1cnJJbmxpbmUtPmdlbmVyYXRlQ3VsbGVkTGluZUJveFJlY3RzKHlpZWxk
LCBjb250YWluZXIpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgZm9yIChJ
bmxpbmVGbG93Qm94KiBjaGlsZExpbmUgPSBjdXJySW5saW5lLT5maXJzdExpbmVCb3goKTsgY2hp
bGRMaW5lOyBjaGlsZExpbmUgPSBjaGlsZExpbmUtPm5leHRMaW5lQm94KCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgUm9vdElubGluZUJveCogcm9vdEJveCA9IGNoaWxkTGluZS0+cm9vdCgpOwog
ICAgICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2ljYWxUb3Ao
KSArIChyb290Qm94LT5yZW5kZXJlcigpLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxl
KCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5bGUocm9v
dEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkp
OwogICAgICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNvbnRhaW5lci0+c3R5
bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGVp
Z2h0KCk7Ci0gICAgICAgICAgICAgICAgICAgIEZsb2F0UmVjdCByZXN1bHQ7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChpc0hvcml6b250YWwpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBGbG9hdFJlY3Qob2Zmc2V0LndpZHRoKCkgKyBjaGlsZExpbmUtPngoKSAtIGNoaWxkTGlu
ZS0+bWFyZ2luTG9naWNhbExlZnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZz
ZXQuaGVpZ2h0KCkgKyBsb2dpY2FsVG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQo
RmxvYXRSZWN0KGNoaWxkTGluZS0+eCgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hpbGRMaW5lLT5sb2dpY2FsV2lkdGgoKSArIGNoaWxkTGluZS0+bWFy
Z2luTG9naWNhbExlZnQoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbFJpZ2h0KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbEhlaWdodCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbG9naWNhbEhlaWdodCkpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBGbG9hdFJlY3Qob2Zmc2V0LndpZHRoKCkg
KyBsb2dpY2FsVG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldC5oZWlnaHQo
KSArIGNoaWxkTGluZS0+eSgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgeWllbGQoRmxvYXRSZWN0KGxvZ2ljYWxUb3AsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hpbGRMaW5lLT55KCkgLSBjaGlsZExpbmUtPm1hcmdpbkxv
Z2ljYWxMZWZ0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbEhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZExpbmUtPmxvZ2ljYWxXaWR0aCgpICsg
Y2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2Fs
UmlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRS
ZWN0KHJlc3VsdCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTGluZS0+bG9n
aWNhbFdpZHRoKCkgKyBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0KCkgKyBjaGlsZExpbmUt
Pm1hcmdpbkxvZ2ljYWxSaWdodCgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgaWYgKGN1cnItPmlzVGV4dCgpKSB7CkBAIC01ODEsOTkgKzU3Miw3
NyBAQCB2b2lkIFJlbmRlcklubGluZTo6Y3VsbGVkSW5saW5lQWJzb2x1dGVSCiAgICAgICAgICAg
ICAgICAgUm9vdElubGluZUJveCogcm9vdEJveCA9IGNoaWxkVGV4dC0+cm9vdCgpOwogICAgICAg
ICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC0+bG9naWNhbFRvcCgpICsgKHJvb3RC
b3gtPnJlbmRlcmVyKCktPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQo
KS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0Zp
cnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CiAgICAgICAg
ICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlz
Rmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdodCgpOwotICAgICAg
ICAgICAgICAgIEZsb2F0UmVjdCByZXN1bHQ7CiAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpv
bnRhbCkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0KG9mZnNldC53aWR0
aCgpICsgY2hpbGRUZXh0LT54KCksIG9mZnNldC5oZWlnaHQoKSArIGxvZ2ljYWxUb3AsIGNoaWxk
VGV4dC0+bG9naWNhbFdpZHRoKCksIGxvZ2ljYWxIZWlnaHQpOworICAgICAgICAgICAgICAgICAg
ICB5aWVsZChGbG9hdFJlY3QoY2hpbGRUZXh0LT54KCksIGxvZ2ljYWxUb3AsIGNoaWxkVGV4dC0+
bG9naWNhbFdpZHRoKCksIGxvZ2ljYWxIZWlnaHQpKTsKICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChvZmZzZXQud2lkdGgoKSArIGxv
Z2ljYWxUb3AsIG9mZnNldC5oZWlnaHQoKSArIGNoaWxkVGV4dC0+eSgpLCBsb2dpY2FsSGVpZ2h0
LCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpKTsKLSAgICAgICAgICAgICAgICByZWN0cy5hcHBl
bmQoZW5jbG9zaW5nSW50UmVjdChyZXN1bHQpKTsKKyAgICAgICAgICAgICAgICAgICAgeWllbGQo
RmxvYXRSZWN0KGxvZ2ljYWxUb3AsIGNoaWxkVGV4dC0+eSgpLCBsb2dpY2FsSGVpZ2h0LCBjaGls
ZFRleHQtPmxvZ2ljYWxXaWR0aCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CiB9CiAKLXZvaWQgUmVuZGVySW5saW5lOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+
JiBxdWFkcywgYm9vbCogd2FzRml4ZWQpIGNvbnN0CituYW1lc3BhY2UgeworCitjbGFzcyBBYnNv
bHV0ZVJlY3RzR2VuZXJhdG9yQ29udGV4dCB7CitwdWJsaWM6CisgICAgQWJzb2x1dGVSZWN0c0dl
bmVyYXRvckNvbnRleHQoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQm
IGFjY3VtdWxhdGVkT2Zmc2V0KQorICAgICAgICA6IG1fcmVjdHMocmVjdHMpCisgICAgICAgICwg
bV9hY2N1bXVsYXRlZE9mZnNldChhY2N1bXVsYXRlZE9mZnNldCkgeyB9CisKKyAgICB2b2lkIG9w
ZXJhdG9yKCkoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgSW50UmVjdCBp
bnRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChyZWN0KTsKKyAgICAgICAgaW50UmVjdC5tb3ZlKG1f
YWNjdW11bGF0ZWRPZmZzZXQueCgpLCBtX2FjY3VtdWxhdGVkT2Zmc2V0LnkoKSk7CisgICAgICAg
IG1fcmVjdHMuYXBwZW5kKGludFJlY3QpOworICAgIH0KK3ByaXZhdGU6CisgICAgVmVjdG9yPElu
dFJlY3Q+JiBtX3JlY3RzOworICAgIGNvbnN0IExheW91dFBvaW50JiBtX2FjY3VtdWxhdGVkT2Zm
c2V0OworfTsKKworfSAvLyB1bm5hbWVkIG5hbWVzcGFjZQorCit2b2lkIFJlbmRlcklubGluZTo6
YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0CiB7Ci0gICAgaWYgKCFhbHdheXNDcmVhdGVMaW5lQm94
ZXMoKSkKLSAgICAgICAgY3VsbGVkSW5saW5lQWJzb2x1dGVRdWFkcyh0aGlzLCBxdWFkcyk7Ci0g
ICAgZWxzZSBpZiAoSW5saW5lRmxvd0JveCogY3VyciA9IGZpcnN0TGluZUJveCgpKSB7Ci0gICAg
ICAgIGZvciAoOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkgewotICAgICAgICAg
ICAgRmxvYXRSZWN0IGxvY2FsUmVjdChjdXJyLT54KCksIGN1cnItPnkoKSwgY3Vyci0+d2lkdGgo
KSwgY3Vyci0+aGVpZ2h0KCkpOwotICAgICAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNv
bHV0ZVF1YWQobG9jYWxSZWN0LCBmYWxzZSwgd2FzRml4ZWQpKTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZQotICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3Qo
KSwgZmFsc2UsIHdhc0ZpeGVkKSk7CisgICAgZ2VuZXJhdGVMaW5lQm94UmVjdHMoQWJzb2x1dGVS
ZWN0c0dlbmVyYXRvckNvbnRleHQocmVjdHMsIGFjY3VtdWxhdGVkT2Zmc2V0KSk7CiAKLSAgICBp
ZiAoY29udGludWF0aW9uKCkpCi0gICAgICAgIGNvbnRpbnVhdGlvbigpLT5hYnNvbHV0ZVF1YWRz
KHF1YWRzLCB3YXNGaXhlZCk7CisgICAgaWYgKGNvbnRpbnVhdGlvbigpKSB7CisgICAgICAgIGlm
IChjb250aW51YXRpb24oKS0+aXNCb3goKSkgeworICAgICAgICAgICAgUmVuZGVyQm94KiBib3gg
PSB0b1JlbmRlckJveChjb250aW51YXRpb24oKSk7CisgICAgICAgICAgICBjb250aW51YXRpb24o
KS0+YWJzb2x1dGVSZWN0cyhyZWN0cywgdG9MYXlvdXRQb2ludChhY2N1bXVsYXRlZE9mZnNldCAt
IGNvbnRhaW5pbmdCbG9jaygpLT5sb2NhdGlvbigpICsgYm94LT5zaXplKCkpKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBjb250aW51YXRpb24oKS0+YWJzb2x1dGVSZWN0cyhyZWN0cywg
dG9MYXlvdXRQb2ludChhY2N1bXVsYXRlZE9mZnNldCAtIGNvbnRhaW5pbmdCbG9jaygpLT5sb2Nh
dGlvbigpKSk7CisgICAgfQogfQogCi12b2lkIFJlbmRlcklubGluZTo6Y3VsbGVkSW5saW5lQWJz
b2x1dGVRdWFkcyhjb25zdCBSZW5kZXJJbmxpbmUqIGNvbnRhaW5lciwgVmVjdG9yPEZsb2F0UXVh
ZD4mIHF1YWRzKSBjb25zdAorCituYW1lc3BhY2UgeworCitjbGFzcyBBYnNvbHV0ZVF1YWRzR2Vu
ZXJhdG9yQ29udGV4dCB7CitwdWJsaWM6CisgICAgQWJzb2x1dGVRdWFkc0dlbmVyYXRvckNvbnRl
eHQoY29uc3QgUmVuZGVySW5saW5lKiByZW5kZXJlciwgVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRz
LCBib29sKiB3YXNGaXhlZCkKKyAgICAgICAgOiBtX3JlbmRlcmVyKHJlbmRlcmVyKQorICAgICAg
ICAsIG1fcXVhZHMocXVhZHMpCisgICAgICAgICwgbV93YXNGaXhlZCh3YXNGaXhlZCkgeyB9CisK
KyAgICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHsKKyAgICAg
ICAgbV9xdWFkcy5hcHBlbmQobV9yZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChyZWN0KSk7
CisgICAgfQorcHJpdmF0ZToKKyAgICBjb25zdCBSZW5kZXJJbmxpbmUqIG1fcmVuZGVyZXI7Cisg
ICAgVmVjdG9yPEZsb2F0UXVhZD4mIG1fcXVhZHM7CisgICAgYm9vbCogbV93YXNGaXhlZDsKK307
CisKK30gLy8gdW5uYW1lZCBuYW1lc3BhY2UKKwordm9pZCBSZW5kZXJJbmxpbmU6OmFic29sdXRl
UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKiB3YXNGaXhlZCkgY29uc3QKIHsK
LSAgICBpZiAoIWN1bGxlZElubGluZUZpcnN0TGluZUJveCgpKSB7Ci0gICAgICAgIHF1YWRzLmFw
cGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdCgpKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgZ2VuZXJhdGVMaW5lQm94UmVjdHMoQWJzb2x1dGVRdWFkc0dlbmVyYXRvckNv
bnRleHQodGhpcywgcXVhZHMsIHdhc0ZpeGVkKSk7CiAKLSAgICBib29sIGlzSG9yaXpvbnRhbCA9
IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7Ci0gICAgZm9yIChSZW5kZXJPYmpl
Y3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygp
KSB7Ci0gICAgICAgIGlmIChjdXJyLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAvLyBXZSB3YW50IHRvIGdldCB0
aGUgbWFyZ2luIGJveCBpbiB0aGUgaW5saW5lIGRpcmVjdGlvbiwgYW5kIHRoZW4gdXNlIG91ciBm
b250IGFzY2VudC9kZXNjZW50IGluIHRoZSBibG9jawotICAgICAgICAvLyBkaXJlY3Rpb24gKGFs
aWduZWQgdG8gdGhlIHJvb3QgYm94J3MgYmFzZWxpbmUpLgotICAgICAgICBpZiAoY3Vyci0+aXNC
b3goKSkgewotICAgICAgICAgICAgUmVuZGVyQm94KiBjdXJyQm94ID0gdG9SZW5kZXJCb3goY3Vy
cik7Ci0gICAgICAgICAgICBpZiAoY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpKSB7Ci0gICAg
ICAgICAgICAgICAgUm9vdElubGluZUJveCogcm9vdEJveCA9IGN1cnJCb3gtPmlubGluZUJveFdy
YXBwZXIoKS0+cm9vdCgpOwotICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJv
eC0+bG9naWNhbFRvcCgpICsgKHJvb3RCb3gtPnJlbmRlcmVyKCktPnN0eWxlKHJvb3RCb3gtPmlz
Rmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFp
bmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJp
Y3MoKS5hc2NlbnQoKSk7Ci0gICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250
YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0
cmljcygpLmhlaWdodCgpOwotICAgICAgICAgICAgICAgIEZsb2F0UmVjdCByZXN1bHQ7Ci0gICAg
ICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gRmxvYXRSZWN0KGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKS0+eCgpIC0gY3VyckJveC0+
bWFyZ2luTGVmdCgpLCBsb2dpY2FsVG9wLCBjdXJyQm94LT53aWR0aCgpICsgY3VyckJveC0+bWFy
Z2luV2lkdGgoKSwgbG9naWNhbEhlaWdodCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBGbG9hdFJlY3QobG9naWNhbFRvcCwgY3VyckJveC0+aW5s
aW5lQm94V3JhcHBlcigpLT55KCkgLSBjdXJyQm94LT5tYXJnaW5Ub3AoKSwgbG9naWNhbEhlaWdo
dCwgY3VyckJveC0+aGVpZ2h0KCkgKyBjdXJyQm94LT5tYXJnaW5IZWlnaHQoKSk7Ci0gICAgICAg
ICAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQocmVzdWx0KSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoY3Vyci0+aXNSZW5kZXJJbmxpbmUoKSkgewot
ICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGRvZXNuJ3QgbmVlZCBsaW5lIGJveGVzIGVpdGhl
ciwgdGhlbiB3ZSBjYW4gcmVjdXIuCi0gICAgICAgICAgICBSZW5kZXJJbmxpbmUqIGN1cnJJbmxp
bmUgPSB0b1JlbmRlcklubGluZShjdXJyKTsKLSAgICAgICAgICAgIGlmICghY3VycklubGluZS0+
YWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpCi0gICAgICAgICAgICAgICAgY3VycklubGluZS0+Y3Vs
bGVkSW5saW5lQWJzb2x1dGVRdWFkcyhjb250YWluZXIsIHF1YWRzKTsKLSAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgIGZvciAoSW5saW5lRmxvd0JveCogY2hpbGRMaW5lID0gY3Vy
cklubGluZS0+Zmlyc3RMaW5lQm94KCk7IGNoaWxkTGluZTsgY2hpbGRMaW5lID0gY2hpbGRMaW5l
LT5uZXh0TGluZUJveCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJv
b3RCb3ggPSBjaGlsZExpbmUtPnJvb3QoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2lj
YWxUb3AgPSByb290Qm94LT5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC0+cmVuZGVyZXIoKS0+c3R5
bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNj
ZW50KCkgLSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZv
bnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGxv
Z2ljYWxIZWlnaHQgPSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUo
KSktPmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdodCgpOwotICAgICAgICAgICAgICAgICAgICBG
bG9hdFJlY3QgcmVzdWx0OwotICAgICAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0KGNoaWxkTGluZS0+eCgp
IC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxvZ2ljYWxUb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRMaW5l
LT5sb2dpY2FsV2lkdGgoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSArIGNoaWxk
TGluZS0+bWFyZ2luTG9naWNhbFJpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bG9naWNhbEhlaWdodCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChsb2dpY2FsVG9wLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoaWxkTGluZS0+eSgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVm
dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hpbGRMaW5lLT5sb2dpY2FsV2lkdGgoKSArIGNoaWxkTGlu
ZS0+bWFyZ2luTG9naWNhbExlZnQoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbFJpZ2h0KCkp
OwotICAgICAgICAgICAgICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChy
ZXN1bHQpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSBpZiAoY3Vyci0+aXNUZXh0KCkpIHsKLSAgICAgICAgICAgIFJlbmRlclRleHQqIGN1cnJUZXh0
ID0gdG9SZW5kZXJUZXh0KGN1cnIpOwotICAgICAgICAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBj
aGlsZFRleHQgPSBjdXJyVGV4dC0+Zmlyc3RUZXh0Qm94KCk7IGNoaWxkVGV4dDsgY2hpbGRUZXh0
ID0gY2hpbGRUZXh0LT5uZXh0VGV4dEJveCgpKSB7Ci0gICAgICAgICAgICAgICAgUm9vdElubGlu
ZUJveCogcm9vdEJveCA9IGNoaWxkVGV4dC0+cm9vdCgpOwotICAgICAgICAgICAgICAgIGludCBs
b2dpY2FsVG9wID0gcm9vdEJveC0+bG9naWNhbFRvcCgpICsgKHJvb3RCb3gtPnJlbmRlcmVyKCkt
PnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygp
LmFzY2VudCgpIC0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkp
LT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7Ci0gICAgICAgICAgICAgICAgaW50IGxv
Z2ljYWxIZWlnaHQgPSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUo
KSktPmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdodCgpOwotICAgICAgICAgICAgICAgIEZsb2F0
UmVjdCByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0KGNoaWxkVGV4dC0+eCgpLCBsb2dpY2FsVG9w
LCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KTsKLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChsb2dpY2Fs
VG9wLCBjaGlsZFRleHQtPnkoKSwgbG9naWNhbEhlaWdodCwgY2hpbGRUZXh0LT5sb2dpY2FsV2lk
dGgoKSk7Ci0gICAgICAgICAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQo
cmVzdWx0KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKGNvbnRp
bnVhdGlvbigpKQorICAgICAgICBjb250aW51YXRpb24oKS0+YWJzb2x1dGVRdWFkcyhxdWFkcywg
d2FzRml4ZWQpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlcklubGluZTo6b2Zmc2V0TGVmdCgpIGNv
bnN0CkBAIC03ODUsMTEgKzc1NCwyOCBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVySW5saW5lOjpw
b3NpdGlvbkZvCiAgICAgcmV0dXJuIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpwb3NpdGlvbkZvclBv
aW50KHBvaW50KTsKIH0KIAorbmFtZXNwYWNlIHsKKworY2xhc3MgTGluZXNCb3VuZGluZ0JveEdl
bmVyYXRvckNvbnRleHQgeworcHVibGljOgorICAgIExpbmVzQm91bmRpbmdCb3hHZW5lcmF0b3JD
b250ZXh0KEZsb2F0UmVjdCYgcmVjdCkgOiBtX3JlY3QocmVjdCkgeyB9CisgICAgdm9pZCBvcGVy
YXRvcigpKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIG1fcmVjdC51bml0
ZUlmTm9uWmVybyhyZWN0KTsKKyAgICB9Citwcml2YXRlOgorICAgIEZsb2F0UmVjdCYgbV9yZWN0
OworfTsKKworfSAvLyB1bm5hbWVkIG5hbWVzcGFjZQorCiBJbnRSZWN0IFJlbmRlcklubGluZTo6
bGluZXNCb3VuZGluZ0JveCgpIGNvbnN0CiB7CiAgICAgaWYgKCFhbHdheXNDcmVhdGVMaW5lQm94
ZXMoKSkgewogICAgICAgICBBU1NFUlQoIWZpcnN0TGluZUJveCgpKTsKLSAgICAgICAgcmV0dXJu
IGVuY2xvc2luZ0ludFJlY3QoY3VsbGVkSW5saW5lQm91bmRpbmdCb3godGhpcykpOworICAgICAg
ICBGbG9hdFJlY3QgZmxvYXRSZXN1bHQ7CisgICAgICAgIGdlbmVyYXRlQ3VsbGVkTGluZUJveFJl
Y3RzKExpbmVzQm91bmRpbmdCb3hHZW5lcmF0b3JDb250ZXh0KGZsb2F0UmVzdWx0KSwgdGhpcyk7
CisgICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGZsb2F0UmVzdWx0KTsKICAgICB9CiAK
ICAgICBJbnRSZWN0IHJlc3VsdDsKQEAgLTgyMSw2NiArODA3LDYgQEAgSW50UmVjdCBSZW5kZXJJ
bmxpbmU6OmxpbmVzQm91bmRpbmdCb3goKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUZsb2F0
UmVjdCBSZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRlcklu
bGluZSogY29udGFpbmVyKSBjb25zdAotewotICAgIEZsb2F0UmVjdCByZXN1bHQ7Ci0gICAgYm9v
bCBpc0hvcml6b250YWwgPSBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwotICAg
IGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vy
ci0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoY3Vyci0+aXNGbG9hdGluZ09yUG9zaXRp
b25lZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgLy8g
V2Ugd2FudCB0byBnZXQgdGhlIG1hcmdpbiBib3ggaW4gdGhlIGlubGluZSBkaXJlY3Rpb24sIGFu
ZCB0aGVuIHVzZSBvdXIgZm9udCBhc2NlbnQvZGVzY2VudCBpbiB0aGUgYmxvY2sKLSAgICAgICAg
Ly8gZGlyZWN0aW9uIChhbGlnbmVkIHRvIHRoZSByb290IGJveCdzIGJhc2VsaW5lKS4KLSAgICAg
ICAgaWYgKGN1cnItPmlzQm94KCkpIHsKLSAgICAgICAgICAgIFJlbmRlckJveCogY3VyckJveCA9
IHRvUmVuZGVyQm94KGN1cnIpOwotICAgICAgICAgICAgaWYgKGN1cnJCb3gtPmlubGluZUJveFdy
YXBwZXIoKSkgewotICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBjdXJy
Qm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPnJvb3QoKTsKLSAgICAgICAgICAgICAgICBpbnQgbG9n
aWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2ljYWxUb3AoKSArIChyb290Qm94LT5yZW5kZXJlcigpLT5z
dHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5h
c2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+
Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwotICAgICAgICAgICAgICAgIGludCBsb2dp
Y2FsSGVpZ2h0ID0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkp
LT5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNI
b3Jpem9udGFsKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVJZk5vblplcm8oRmxv
YXRSZWN0KGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKS0+eCgpIC0gY3VyckJveC0+bWFyZ2lu
TGVmdCgpLCBsb2dpY2FsVG9wLCBjdXJyQm94LT53aWR0aCgpICsgY3VyckJveC0+bWFyZ2luV2lk
dGgoKSwgbG9naWNhbEhlaWdodCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKEZsb2F0UmVjdChsb2dpY2FsVG9wLCBjdXJy
Qm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPnkoKSAtIGN1cnJCb3gtPm1hcmdpblRvcCgpLCBsb2dp
Y2FsSGVpZ2h0LCBjdXJyQm94LT5oZWlnaHQoKSArIGN1cnJCb3gtPm1hcmdpbkhlaWdodCgpKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoY3Vyci0+aXNSZW5kZXJJbmxpbmUo
KSkgewotICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGRvZXNuJ3QgbmVlZCBsaW5lIGJveGVz
IGVpdGhlciwgdGhlbiB3ZSBjYW4gcmVjdXIuCi0gICAgICAgICAgICBSZW5kZXJJbmxpbmUqIGN1
cnJJbmxpbmUgPSB0b1JlbmRlcklubGluZShjdXJyKTsKLSAgICAgICAgICAgIGlmICghY3Vycklu
bGluZS0+YWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LnVu
aXRlSWZOb25aZXJvKGN1cnJJbmxpbmUtPmN1bGxlZElubGluZUJvdW5kaW5nQm94KGNvbnRhaW5l
cikpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgZm9yIChJbmxpbmVGbG93
Qm94KiBjaGlsZExpbmUgPSBjdXJySW5saW5lLT5maXJzdExpbmVCb3goKTsgY2hpbGRMaW5lOyBj
aGlsZExpbmUgPSBjaGlsZExpbmUtPm5leHRMaW5lQm94KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgUm9vdElubGluZUJveCogcm9vdEJveCA9IGNoaWxkTGluZS0+cm9vdCgpOwotICAgICAgICAg
ICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2ljYWxUb3AoKSArIChyb290
Qm94LT5yZW5kZXJlcigpLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250
KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNG
aXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwotICAgICAg
ICAgICAgICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNvbnRhaW5lci0+c3R5bGUocm9vdEJv
eC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQudW5pdGVJZk5vblplcm8oRmxvYXRSZWN0KGNoaWxkTGluZS0+eCgpIC0gY2hp
bGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxvZ2ljYWxUb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRMaW5lLT5sb2dp
Y2FsV2lkdGgoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSArIGNoaWxkTGluZS0+
bWFyZ2luTG9naWNhbFJpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNh
bEhlaWdodCkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQudW5pdGVJZk5vblplcm8oRmxvYXRSZWN0KGxvZ2ljYWxUb3AsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hpbGRMaW5lLT55KCkgLSBjaGlsZExpbmUtPm1hcmdpbkxv
Z2ljYWxMZWZ0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbEhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZExpbmUtPmxvZ2ljYWxXaWR0aCgpICsg
Y2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2Fs
UmlnaHQoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjdXJyLT5pc1Rl
eHQoKSkgewotICAgICAgICAgICAgUmVuZGVyVGV4dCogY3VyclRleHQgPSB0b1JlbmRlclRleHQo
Y3Vycik7Ci0gICAgICAgICAgICBmb3IgKElubGluZVRleHRCb3gqIGNoaWxkVGV4dCA9IGN1cnJU
ZXh0LT5maXJzdFRleHRCb3goKTsgY2hpbGRUZXh0OyBjaGlsZFRleHQgPSBjaGlsZFRleHQtPm5l
eHRUZXh0Qm94KCkpIHsKLSAgICAgICAgICAgICAgICBSb290SW5saW5lQm94KiByb290Qm94ID0g
Y2hpbGRUZXh0LT5yb290KCk7Ci0gICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290
Qm94LT5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC0+cmVuZGVyZXIoKS0+c3R5bGUocm9vdEJveC0+
aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250
YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0
cmljcygpLmFzY2VudCgpKTsKLSAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNv
bnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRN
ZXRyaWNzKCkuaGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKLSAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKEZsb2F0UmVjdChjaGlsZFRl
eHQtPngoKSwgbG9naWNhbFRvcCwgY2hpbGRUZXh0LT5sb2dpY2FsV2lkdGgoKSwgbG9naWNhbEhl
aWdodCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuaXRlSWZOb25aZXJvKEZsb2F0UmVjdChsb2dpY2FsVG9wLCBjaGlsZFRleHQtPnkoKSwgbG9n
aWNhbEhlaWdodCwgY2hpbGRUZXh0LT5sb2dpY2FsV2lkdGgoKSkpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBlbmNsb3NpbmdMYXlvdXRSZWN0KHJlc3VsdCk7
Ci19Ci0KIElubGluZUJveCogUmVuZGVySW5saW5lOjpjdWxsZWRJbmxpbmVGaXJzdExpbmVCb3go
KSBjb25zdAogewogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBj
dXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgewpAQCAtOTMxLDcgKzg1Nyw5IEBAIElu
bGluZUJveCogUmVuZGVySW5saW5lOjpjdWxsZWRJbmxpbmVMYXMKIAogTGF5b3V0UmVjdCBSZW5k
ZXJJbmxpbmU6OmN1bGxlZElubGluZVZpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3goKSBjb25zdAog
ewotICAgIExheW91dFJlY3QgcmVzdWx0KGN1bGxlZElubGluZUJvdW5kaW5nQm94KHRoaXMpKTsK
KyAgICBGbG9hdFJlY3QgZmxvYXRSZXN1bHQ7CisgICAgZ2VuZXJhdGVDdWxsZWRMaW5lQm94UmVj
dHMoTGluZXNCb3VuZGluZ0JveEdlbmVyYXRvckNvbnRleHQoZmxvYXRSZXN1bHQpLCB0aGlzKTsK
KyAgICBMYXlvdXRSZWN0IHJlc3VsdChlbmNsb3NpbmdMYXlvdXRSZWN0KGZsb2F0UmVzdWx0KSk7
CiAgICAgYm9vbCBpc0hvcml6b250YWwgPSBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBj
dXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoY3Vyci0+aXNGbG9hdGlu
Z09yUG9zaXRpb25lZCgpKQpAQCAtMTM2NiwxMiArMTI5NCw3IEBAIHZvaWQgUmVuZGVySW5saW5l
OjppbWFnZUNoYW5nZWQoV3JhcHBlZEkKIAogdm9pZCBSZW5kZXJJbmxpbmU6OmFkZEZvY3VzUmlu
Z1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JiBhZGRpdGlv
bmFsT2Zmc2V0KQogewotICAgIGlmICghYWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpCi0gICAgICAg
IGN1bGxlZElubGluZUFic29sdXRlUmVjdHModGhpcywgcmVjdHMsIHRvTGF5b3V0U2l6ZShhZGRp
dGlvbmFsT2Zmc2V0KSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGZvciAoSW5saW5lRmxvd0JveCog
Y3VyciA9IGZpcnN0TGluZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkK
LSAgICAgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdChhZGRp
dGlvbmFsT2Zmc2V0LngoKSArIGN1cnItPngoKSwgYWRkaXRpb25hbE9mZnNldC55KCkgKyBjdXJy
LT55KCksIGN1cnItPndpZHRoKCksIGN1cnItPmhlaWdodCgpKSkpOwotICAgIH0KKyAgICBnZW5l
cmF0ZUxpbmVCb3hSZWN0cyhBYnNvbHV0ZVJlY3RzR2VuZXJhdG9yQ29udGV4dChyZWN0cywgYWRk
aXRpb25hbE9mZnNldCkpOwogCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENo
aWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmICgh
Y3Vyci0+aXNUZXh0KCkgJiYgIWN1cnItPmlzTGlzdE1hcmtlcigpKSB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCShyZXZpc2lvbiAxMTY2OTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTk4
LDEyICs5OCwxNCBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVySW5saW5l
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgRmxvYXRSZWN0IGN1bGxlZElubGluZUJv
dW5kaW5nQm94KGNvbnN0IFJlbmRlcklubGluZSogY29udGFpbmVyKSBjb25zdDsKICAgICBMYXlv
dXRSZWN0IGN1bGxlZElubGluZVZpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3goKSBjb25zdDsKICAg
ICBJbmxpbmVCb3gqIGN1bGxlZElubGluZUZpcnN0TGluZUJveCgpIGNvbnN0OwogICAgIElubGlu
ZUJveCogY3VsbGVkSW5saW5lTGFzdExpbmVCb3goKSBjb25zdDsKLSAgICB2b2lkIGN1bGxlZElu
bGluZUFic29sdXRlUmVjdHMoY29uc3QgUmVuZGVySW5saW5lKiBjb250YWluZXIsIFZlY3RvcjxJ
bnRSZWN0PiYsIGNvbnN0IExheW91dFNpemUmKSBjb25zdDsKLSAgICB2b2lkIGN1bGxlZElubGlu
ZUFic29sdXRlUXVhZHMoY29uc3QgUmVuZGVySW5saW5lKiBjb250YWluZXIsIFZlY3RvcjxGbG9h
dFF1YWQ+JikgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBHZW5lcmF0b3JDb250ZXh0
PgorICAgIHZvaWQgZ2VuZXJhdGVMaW5lQm94UmVjdHMoR2VuZXJhdG9yQ29udGV4dCB5aWVsZCkg
Y29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgR2VuZXJhdG9yQ29udGV4dD4KKyAgICB2b2lk
IGdlbmVyYXRlQ3VsbGVkTGluZUJveFJlY3RzKEdlbmVyYXRvckNvbnRleHQgeWllbGQsIGNvbnN0
IFJlbmRlcklubGluZSogY29udGFpbmVyKSBjb25zdDsKIAogICAgIHZvaWQgYWRkQ2hpbGRUb0Nv
bnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNo
aWxkKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihSZW5k
ZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>