<?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>79336</bug_id>
          
          <creation_ts>2012-02-22 23:36:40 -0800</creation_ts>
          <short_desc>[Chromium] Add HarfBuzzShaperBase class</short_desc>
          <delta_ts>2012-02-24 07:17:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Text</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>69826</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenichi Ishibashi">bashi</reporter>
          <assigned_to name="Kenichi Ishibashi">bashi</assigned_to>
          <cc>efidler</cc>
    
    <cc>evan</cc>
    
    <cc>jdaggett</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>562884</commentid>
    <comment_count>0</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-02-22 23:36:40 -0800</bug_when>
    <thetext>I&apos;d like add a base class of HarfBuzz text shaper to share the code between old HarfBuzz and HarfBuzz-ng, to address Evan&apos;s comment on https://bugs.webkit.org/show_bug.cgi?id=69826#c18.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562902</commentid>
    <comment_count>1</comment_count>
      <attachid>128414</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-02-22 23:52:45 -0800</bug_when>
    <thetext>Created attachment 128414
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562903</commentid>
    <comment_count>2</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-02-22 23:53:51 -0800</bug_when>
    <thetext>Hi Evan,

Could you please review the patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563113</commentid>
    <comment_count>3</comment_count>
    <who name="Evan Martin">evan</who>
    <bug_when>2012-02-23 07:52:39 -0800</bug_when>
    <thetext>Looks great, thanks for refactoring!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563220</commentid>
    <comment_count>4</comment_count>
      <attachid>128414</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-02-23 10:29:38 -0800</bug_when>
    <thetext>Comment on attachment 128414
Patch

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

&gt; Source/WebCore/WebCore.gypi:3472
&gt; +            &apos;platform/graphics/harfbuzz/HarfBuzzShaperBase.cpp&apos;,
&gt; +            &apos;platform/graphics/harfbuzz/HarfBuzzShaperBase.h&apos;,

Can you also include the cpp file in PlatformBlackBerry.cmake?

&gt; Source/WebCore/platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp:303
&gt; +        if (static_cast&lt;unsigned&gt;(logClustersIndex) &lt; m_item.item.length &amp;&amp; isWordEnd(m_item.item.pos + logClustersIndex))

Should logClustersIndex be unsigned or size_t?  That might remove some of the casts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563607</commentid>
    <comment_count>5</comment_count>
      <attachid>128584</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-02-23 16:01:26 -0800</bug_when>
    <thetext>Created attachment 128584
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563609</commentid>
    <comment_count>6</comment_count>
      <attachid>128414</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-02-23 16:02:52 -0800</bug_when>
    <thetext>Comment on attachment 128414
Patch

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

Thank you for review Evan and Tony!

&gt;&gt; Source/WebCore/WebCore.gypi:3472
&gt;&gt; +            &apos;platform/graphics/harfbuzz/HarfBuzzShaperBase.h&apos;,
&gt; 
&gt; Can you also include the cpp file in PlatformBlackBerry.cmake?

Done.

&gt;&gt; Source/WebCore/platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp:303
&gt;&gt; +        if (static_cast&lt;unsigned&gt;(logClustersIndex) &lt; m_item.item.length &amp;&amp; isWordEnd(m_item.item.pos + logClustersIndex))
&gt; 
&gt; Should logClustersIndex be unsigned or size_t?  That might remove some of the casts.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563956</commentid>
    <comment_count>7</comment_count>
      <attachid>128584</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-23 22:59:46 -0800</bug_when>
    <thetext>Comment on attachment 128584
Patch for landing

Clearing flags on attachment: 128584

Committed r108733: &lt;http://trac.webkit.org/changeset/108733&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563957</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-23 22:59:51 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128414</attachid>
            <date>2012-02-22 23:52:45 -0800</date>
            <delta_ts>2012-02-23 16:02:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79336-20120223165243.patch</filename>
            <type>text/plain</type>
            <size>30340</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NjAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2M4MGM4MTY1OWJjMWFm
MTM3NDA4YmUwZWFlZTA1MDA4YTM1MmQ3OC4uMDJlNDhjMmFlZjYzMDE4ZTRlMDJjZDBkYTVhYTBk
MDA1ZDA2NzU4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTAyLTIyICBLZW5p
Y2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1d
IEFkZCBIYXJmQnV6elNoYXBlckJhc2UgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc5MzM2CisKKyAgICAgICAgRXh0cmFjdCBhIHBhcnQgb2Yg
Q29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enogY2xhc3MgYXMKKyAgICAgICAgSGFyZkJ1enpT
aGFwZXJCYXNlIGNsYXNzLiBUaGlzIHBhdGNoIGludGVuZHMgdG8gc2hhcmUgdGhlIGNvZGUgYmV0
d2VlbgorICAgICAgICBvbGQgSGFyZkJ1enogYW5kIEhhcmZCdXp6LW5nLgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gTm8gYmVo
YXZpb3IgY2hhbmdlLiBFeGlzdGluZyB0ZXN0cyBpbiBmYXN0L3RleHQgc2hvdWxkIHBhc3MuCisK
KyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDogQWRkZWQuIEhhcmZCdXp6U2hhcGVy
QmFzZS4oY3BwfGgpLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogRGl0dG8uCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enou
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4
dENvbnRyb2xsZXIpOiBSZW1vdmVkIHJlZHVuZGFudCBhcmd1bWVudHMuCisgICAgICAgIChXZWJD
b3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6Om5leHRTY3JpcHRSdW4pOiBVc2UgbV9ub3JtYWxp
emVkQnVmZmVyIGFuZCBtX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGggaW5zdGVhZCBvZiBtX3J1bi4K
KyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6c2V0dXBGb250Rm9yU2Ny
aXB0UnVuKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6
OnNldEdseXBoUG9zaXRpb25zKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enouaDoKKyAgICAgICAgKENvbXBs
ZXhUZXh0Q29udHJvbGxlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
Rm9udEhhcmZCdXp6LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4
dCk6IFJlbW92ZWQgcmVkdW5kYW50IGFyZ3VtZW50cyBvZiBDb21wbGV4VGV4dENvbnRyb2xsZXIg
Y29uc3RydWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxl
eFRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6Om9mZnNldEZvclBvc2l0aW9u
Rm9yQ29tcGxleFRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNlbGVjdGlv
blJlY3RGb3JDb21wbGV4VGV4dCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyQmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlckJhc2U6OkhhcmZCdXp6U2hhcGVy
QmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpub3JtYWxpemVTcGFjZXNBbmRNaXJyb3JDaGFycyk6
CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlckJhc2U6OnNldE5vcm1hbGl6ZWRCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXJCYXNlOjppc1dvcmRFbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXJCYXNlOjpkZXRlcm1pbmVXb3JkQnJlYWtT
cGFjaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyQmFzZTo6c2V0UGFkZGlu
Zyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXJC
YXNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChIYXJmQnV6elNoYXBl
ckJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXJCYXNlOjp+SGFyZkJ1enpT
aGFwZXJCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyQmFzZTo6aXNDb2Rl
cG9pbnRTcGFjZSk6CisKIDIwMTItMDItMjIgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFtTdXBwbGVtZW50YWxdIHNob3VsZCBzdXBwb3J0IGNvbnN0YW50
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCBkMzE5NDk2YzExZTUx
ZTNmOWRmMzZhMDIzZjgxN2E2MWU2NWU5MzlkLi4yNWM1NDEzMzZiYThlZTc2OTY0YTI5YzNmYjk2
MzhiYjg3YzJhMWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJD
b3JlLmd5cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAt
MTQ4NCw2ICsxNDg0LDcgQEAKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9Gb250SGFyZkJ1enpcXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2luY2x1
ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6
XFwuY3BwJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L0hhcmZCdXp6U2tpYVxcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdw
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlckJhc2VcXC4oY3BwfGgpJCdd
LAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2ltcGxl
Rm9udERhdGFTa2lhXFwuY3BwJCddLAogICAgICAgICAgIF0sCiAgICAgICAgIH0sIHsgIyB1c2Vf
eDExPT0wCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZmRjNjBlNDE2OTlkNTBmMGE3N2EwOWNiZmIzMjll
Y2YyNzNhMjViZS4uNDJkY2FkMGFiYmNiZDQ5MmMyODVmMzc5NzYxMDhmYjY0MmM5Y2VhMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtMzQ2OCw2ICszNDY4LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9Gb250UGxhdGZvcm1EYXRhSGFyZkJ1enouaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmgnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyQmFzZS5j
cHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hh
cGVyQmFzZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMu
bW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRy
b2xsZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRl
eHRDb250cm9sbGVyLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enouY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovQ29tcGxleFRleHRDb250cm9sbGVy
SGFyZkJ1enouY3BwCmluZGV4IDlhMzYzNjViNDA5YmIzNWY5MDRiYTUyZTU0MTUyMTZjOTVmNTIz
ODQuLjE2NzBhODk1ZjJkMDIzZjU0ZjEwMjRkY2Q0ZWU3NGQzZjI5MzY2YWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0NvbXBsZXhUZXh0Q29u
dHJvbGxlckhhcmZCdXp6LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9Db21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6ei5jcHAKQEAgLTUyLDM1ICs1
MiwzMyBAQCBzdGF0aWMgaW50IHRydW5jYXRlRml4ZWRQb2ludFRvSW50ZWdlcihIQl9GaXhlZCB2
YWx1ZSkKICAgICByZXR1cm4gdmFsdWUgPj4gNjsKIH0KIAotQ29tcGxleFRleHRDb250cm9sbGVy
OjpDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgc3RhcnRpbmdY
LCBpbnQgc3RhcnRpbmdZLCB1bnNpZ25lZCB3b3JkU3BhY2luZywgdW5zaWduZWQgbGV0dGVyU3Bh
Y2luZywgdW5zaWduZWQgcGFkZGluZywgY29uc3QgRm9udCogZm9udCkKLSAgICA6IG1fZm9udChm
b250KQotICAgICwgbV9ydW4oZ2V0Tm9ybWFsaXplZFRleHRSdW4ocnVuLCBtX25vcm1hbGl6ZWRS
dW4sIG1fbm9ybWFsaXplZEJ1ZmZlcikpCitDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhU
ZXh0Q29udHJvbGxlcihjb25zdCBGb250KiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGludCBz
dGFydGluZ1gsIGludCBzdGFydGluZ1kpCisgICAgOiBIYXJmQnV6elNoYXBlckJhc2UoZm9udCwg
cnVuKQogewotICAgIC8vIERvIG5vdCB1c2UgfHJ1bnwgaW5zaWRlIHRoaXMgY29uc3RydWN0b3Iu
IFVzZSB8bV9ydW58IGluc3RlYWQuCisgICAgTm9ybWFsaXplTW9kZSBtb2RlID0gbV9ydW4ucnRs
KCkgPyBOb3JtYWxpemVNaXJyb3JDaGFycyA6IERvTm90Tm9ybWFsaXplTWlycm9yQ2hhcnM7Cisg
ICAgc2V0Tm9ybWFsaXplZEJ1ZmZlcihtb2RlKTsKIAogICAgIG1lbXNldCgmbV9pdGVtLCAwLCBz
aXplb2YobV9pdGVtKSk7CiAgICAgLy8gV2UgY2Fubm90IGtub3csIGFoZWFkIG9mIHRpbWUsIGhv
dyBtYW55IGdseXBocyBhIGdpdmVuIHNjcmlwdCBydW4KICAgICAvLyB3aWxsIHByb2R1Y2UuIFdl
IHRha2UgYSBndWVzcyB0aGF0IHNjcmlwdCBydW5zIHdpbGwgbm90IHByb2R1Y2UgbW9yZQogICAg
IC8vIHRoYW4gdHdpY2UgYXMgbWFueSBnbHlwaHMgYXMgdGhlcmUgYXJlIGNvZGUgcG9pbnRzIHBs
dXMgYSBiaXQgb2YKICAgICAvLyBwYWRkaW5nIGFuZCBmYWxsYmFjayBpZiB3ZSBmaW5kIHRoYXQg
d2UgYXJlIHdyb25nLgotICAgIGNyZWF0ZUdseXBoQXJyYXlzKChtX3J1bi5sZW5ndGgoKSArIDIp
ICogMik7CisgICAgY3JlYXRlR2x5cGhBcnJheXMoKG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aCAr
IDIpICogMik7CiAKLSAgICBtX2l0ZW0ubG9nX2NsdXN0ZXJzID0gbmV3IHVuc2lnbmVkIHNob3J0
W21fcnVuLmxlbmd0aCgpXTsKKyAgICBtX2l0ZW0ubG9nX2NsdXN0ZXJzID0gbmV3IHVuc2lnbmVk
IHNob3J0W21fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aF07CiAKICAgICBtX2l0ZW0uZmFjZSA9IDA7
CiAgICAgbV9pdGVtLmZvbnQgPSBhbGxvY0hhcmZidXp6Rm9udCgpOwogCiAgICAgbV9pdGVtLml0
ZW0uYmlkaUxldmVsID0gbV9ydW4ucnRsKCk7CiAKLSAgICBtX2l0ZW0uc3RyaW5nID0gbV9ydW4u
Y2hhcmFjdGVycygpOwotICAgIG1faXRlbS5zdHJpbmdMZW5ndGggPSBtX3J1bi5sZW5ndGgoKTsK
KyAgICBtX2l0ZW0uc3RyaW5nID0gbV9ub3JtYWxpemVkQnVmZmVyLmdldCgpOworICAgIG1faXRl
bS5zdHJpbmdMZW5ndGggPSBtX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGg7CiAKICAgICByZXNldChz
dGFydGluZ1gpOwogICAgIG1fc3RhcnRpbmdZID0gc3RhcnRpbmdZOwogCi0gICAgc2V0V29yZFNw
YWNpbmdBZGp1c3RtZW50KHdvcmRTcGFjaW5nKTsKLSAgICBzZXRMZXR0ZXJTcGFjaW5nQWRqdXN0
bWVudChsZXR0ZXJTcGFjaW5nKTsKLSAgICBzZXRQYWRkaW5nKHBhZGRpbmcpOworICAgIHNldFBh
ZGRpbmcobV9ydW4uZXhwYW5zaW9uKCkpOwogfQogCiBDb21wbGV4VGV4dENvbnRyb2xsZXI6On5D
b21wbGV4VGV4dENvbnRyb2xsZXIoKQpAQCAtOTAsNTkgKzg4LDYgQEAgQ29tcGxleFRleHRDb250
cm9sbGVyOjp+Q29tcGxleFRleHRDb250cm9sbGVyKCkKICAgICBkZWxldGVbXSBtX2l0ZW0ubG9n
X2NsdXN0ZXJzOwogfQogCi1ib29sIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6aXNXb3JkQnJlYWso
dW5zaWduZWQgaW5kZXgpCi17Ci0gICAgcmV0dXJuIGluZGV4ICYmIGlzQ29kZXBvaW50U3BhY2Uo
bV9pdGVtLnN0cmluZ1tpbmRleF0pICYmICFpc0NvZGVwb2ludFNwYWNlKG1faXRlbS5zdHJpbmdb
aW5kZXggLSAxXSk7Ci19Ci0KLWludCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmRldGVybWluZVdv
cmRCcmVha1NwYWNpbmcodW5zaWduZWQgbG9nQ2x1c3RlcnNJbmRleCkKLXsKLSAgICBpbnQgd29y
ZEJyZWFrU3BhY2luZyA9IDA7Ci0gICAgLy8gVGhlIGZpcnN0IGhhbGYgb2YgdGhlIGNvbmp1bmN0
aW9uIHdvcmtzIGFyb3VuZCB0aGUgY2FzZSB3aGVyZQotICAgIC8vIG91dHB1dCBnbHlwaHMgYXJl
bid0IGFzc29jaWF0ZWQgd2l0aCBhbnkgY29kZXBvaW50cyBieSB0aGUKLSAgICAvLyBjbHVzdGVy
cyBsb2cuCi0gICAgaWYgKGxvZ0NsdXN0ZXJzSW5kZXggPCBtX2l0ZW0uaXRlbS5sZW5ndGgKLSAg
ICAgICAgJiYgaXNXb3JkQnJlYWsobV9pdGVtLml0ZW0ucG9zICsgbG9nQ2x1c3RlcnNJbmRleCkp
IHsKLSAgICAgICAgd29yZEJyZWFrU3BhY2luZyA9IG1fd29yZFNwYWNpbmdBZGp1c3RtZW50Owot
Ci0gICAgICAgIGlmIChtX3BhZGRpbmcgPiAwKSB7Ci0gICAgICAgICAgICBpbnQgdG9QYWQgPSBy
b3VuZGYobV9wYWRQZXJXb3JkQnJlYWsgKyBtX3BhZEVycm9yKTsKLSAgICAgICAgICAgIG1fcGFk
RXJyb3IgKz0gbV9wYWRQZXJXb3JkQnJlYWsgLSB0b1BhZDsKLQotICAgICAgICAgICAgaWYgKG1f
cGFkZGluZyA8IHRvUGFkKQotICAgICAgICAgICAgICAgIHRvUGFkID0gbV9wYWRkaW5nOwotICAg
ICAgICAgICAgbV9wYWRkaW5nIC09IHRvUGFkOwotICAgICAgICAgICAgd29yZEJyZWFrU3BhY2lu
ZyArPSB0b1BhZDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gd29yZEJyZWFrU3BhY2lu
ZzsKLX0KLQotLy8gc2V0UGFkZGluZyBzZXRzIGEgbnVtYmVyIG9mIHBpeGVscyB0byBiZSBkaXN0
cmlidXRlZCBhY3Jvc3MgdGhlIFRleHRSdW4uCi0vLyBXZWJLaXQgdXNlcyB0aGlzIHRvIGp1c3Rp
ZnkgdGV4dC4KLXZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpzZXRQYWRkaW5nKGludCBwYWRk
aW5nKQotewotICAgIG1fcGFkZGluZyA9IHBhZGRpbmc7Ci0gICAgbV9wYWRFcnJvciA9IDA7Ci0g
ICAgaWYgKCFtX3BhZGRpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHdlIGhhdmUg
cGFkZGluZyB0byBkaXN0cmlidXRlLCB0aGVuIHdlIHRyeSB0byBnaXZlIGFuIGVxdWFsCi0gICAg
Ly8gYW1vdW50IHRvIGVhY2ggc3BhY2UuIFRoZSBsYXN0IHNwYWNlIGdldHMgdGhlIHNtYWxsZXIg
YW1vdW50LCBpZgotICAgIC8vIGFueS4KLSAgICB1bnNpZ25lZCBudW1Xb3JkQnJlYWtzID0gMDsK
LQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2l0ZW0uc3RyaW5nTGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgaWYgKGlzV29yZEJyZWFrKGkpKQotICAgICAgICAgICAgbnVtV29yZEJyZWFr
cysrOwotICAgIH0KLQotICAgIGlmIChudW1Xb3JkQnJlYWtzKQotICAgICAgICBtX3BhZFBlcldv
cmRCcmVhayA9IG1fcGFkZGluZyAvIG51bVdvcmRCcmVha3M7Ci0gICAgZWxzZQotICAgICAgICBt
X3BhZFBlcldvcmRCcmVhayA9IDA7Ci19Ci0KIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpy
ZXNldChpbnQgb2Zmc2V0KQogewogICAgIG1faW5kZXhPZk5leHRTY3JpcHRSdW4gPSAwOwpAQCAt
MTY2LDkgKzExMSw5IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpzZXR1cEZvclJUTCgp
CiBib29sIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6bmV4dFNjcmlwdFJ1bigpCiB7CiAgICAgLy8g
RW5zdXJlIHdlJ3JlIG5vdCBwb2ludGluZyBhdCB0aGUgc21hbGwgY2FwcyBidWZmZXIuCi0gICAg
bV9pdGVtLnN0cmluZyA9IG1fcnVuLmNoYXJhY3RlcnMoKTsKKyAgICBtX2l0ZW0uc3RyaW5nID0g
bV9ub3JtYWxpemVkQnVmZmVyLmdldCgpOwogCi0gICAgaWYgKCFoYl91dGYxNl9zY3JpcHRfcnVu
X25leHQoMCwgJm1faXRlbS5pdGVtLCBtX3J1bi5jaGFyYWN0ZXJzKCksIG1fcnVuLmxlbmd0aCgp
LCAmbV9pbmRleE9mTmV4dFNjcmlwdFJ1bikpCisgICAgaWYgKCFoYl91dGYxNl9zY3JpcHRfcnVu
X25leHQoMCwgJm1faXRlbS5pdGVtLCBtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCksIG1fbm9ybWFs
aXplZEJ1ZmZlckxlbmd0aCwgJm1faW5kZXhPZk5leHRTY3JpcHRSdW4pKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICAvLyBJdCBpcyBhY3R1YWxseSB3cm9uZyB0byBjb25zaWRlciBzY3Jp
cHQgcnVucyBhdCBhbGwgaW4gdGhpcyBjb2RlLgpAQCAtMjU0LDcgKzE5OSw3IEBAIHZvaWQgQ29t
cGxleFRleHRDb250cm9sbGVyOjpzZXR1cEZvbnRGb3JTY3JpcHRSdW4oKQogICAgIC8vIGNhc2Ug
Y2hhbmdlIHdoaWxlIGluIHNtYWxsLWNhcHMgbW9kZSBhbHdheXMgcmVzdWx0cyBpbiBkaWZmZXJl
bnQKICAgICAvLyBGb250RGF0YSwgc28gd2Ugb25seSBuZWVkIHRvIGNoZWNrIHRoZSBmaXJzdCBj
aGFyYWN0ZXIncyBjYXNlLgogICAgIGlmIChtX2ZvbnQtPmlzU21hbGxDYXBzKCkgJiYgdV9pc2xv
d2VyKG1faXRlbS5zdHJpbmdbbV9pdGVtLml0ZW0ucG9zXSkpIHsKLSAgICAgICAgbV9zbWFsbENh
cHNTdHJpbmcgPSBTdHJpbmcobV9ydW4uZGF0YShtX2l0ZW0uaXRlbS5wb3MpLCBtX2l0ZW0uaXRl
bS5sZW5ndGgpOworICAgICAgICBtX3NtYWxsQ2Fwc1N0cmluZyA9IFN0cmluZyhtX25vcm1hbGl6
ZWRCdWZmZXIuZ2V0KCkgKyBtX2l0ZW0uaXRlbS5wb3MsIG1faXRlbS5pdGVtLmxlbmd0aCk7CiAg
ICAgICAgIG1fc21hbGxDYXBzU3RyaW5nLm1ha2VVcHBlcigpOwogICAgICAgICBtX2l0ZW0uc3Ry
aW5nID0gbV9zbWFsbENhcHNTdHJpbmcuY2hhcmFjdGVycygpOwogICAgICAgICBtX2l0ZW0uaXRl
bS5wb3MgPSAwOwpAQCAtMzU1LDcgKzMwMCw4IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVy
OjpzZXRHbHlwaFBvc2l0aW9ucyhib29sIGlzUlRMKQogICAgICAgICAgICAgbG9nQ2x1c3RlcnNJ
bmRleCsrOwogCiAgICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGdseXBoIGlzIGp1c3QgYWZ0ZXIg
YSBzcGFjZSwgYWRkIGluIHRoZSB3b3JkIHNwYWNpbmcuCi0gICAgICAgIHBvc2l0aW9uICs9IGRl
dGVybWluZVdvcmRCcmVha1NwYWNpbmcobG9nQ2x1c3RlcnNJbmRleCk7CisgICAgICAgIGlmIChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obG9nQ2x1c3RlcnNJbmRleCkgPCBtX2l0ZW0uaXRlbS5sZW5n
dGggJiYgaXNXb3JkRW5kKG1faXRlbS5pdGVtLnBvcyArIGxvZ0NsdXN0ZXJzSW5kZXgpKQorICAg
ICAgICAgICAgcG9zaXRpb24gKz0gZGV0ZXJtaW5lV29yZEJyZWFrU3BhY2luZygpOwogCiAgICAg
ICAgIG1fZ2x5cGhzMTZbaV0gPSBtX2l0ZW0uZ2x5cGhzW2ldOwogICAgICAgICBkb3VibGUgb2Zm
c2V0WCA9IHRydW5jYXRlRml4ZWRQb2ludFRvSW50ZWdlcihtX2l0ZW0ub2Zmc2V0c1tpXS54KTsK
QEAgLTM4MCw3OSArMzI2LDYgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OnNldEdseXBo
UG9zaXRpb25zKGJvb2wgaXNSVEwpCiAgICAgbV9vZmZzZXRYICs9IG1fcGl4ZWxXaWR0aCAqIHJ0
bEZsaXA7CiB9CiAKLXZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpub3JtYWxpemVTcGFjZXNB
bmRNaXJyb3JDaGFycyhjb25zdCBVQ2hhciogc291cmNlLCBib29sIHJ0bCwgVUNoYXIqIGRlc3Rp
bmF0aW9uLCBpbnQgbGVuZ3RoKQotewotICAgIGludCBwb3NpdGlvbiA9IDA7Ci0gICAgYm9vbCBl
cnJvciA9IGZhbHNlOwotICAgIC8vIEl0ZXJhdGUgY2hhcmFjdGVycyBpbiBzb3VyY2UgYW5kIG1p
cnJvciBjaGFyYWN0ZXIgaWYgbmVlZGVkLgotICAgIHdoaWxlIChwb3NpdGlvbiA8IGxlbmd0aCkg
ewotICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKLSAgICAgICAgaW50IG5leHRQb3NpdGlvbiA9
IHBvc2l0aW9uOwotICAgICAgICBVMTZfTkVYVChzb3VyY2UsIG5leHRQb3NpdGlvbiwgbGVuZ3Ro
LCBjaGFyYWN0ZXIpOwotICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKGNoYXJhY3Rlcikp
Ci0gICAgICAgICAgICBjaGFyYWN0ZXIgPSAnICc7Ci0gICAgICAgIGVsc2UgaWYgKEZvbnQ6OnRy
ZWF0QXNaZXJvV2lkdGhTcGFjZShjaGFyYWN0ZXIpKQotICAgICAgICAgICAgY2hhcmFjdGVyID0g
emVyb1dpZHRoU3BhY2U7Ci0gICAgICAgIGVsc2UgaWYgKHJ0bCkKLSAgICAgICAgICAgIGNoYXJh
Y3RlciA9IHVfY2hhck1pcnJvcihjaGFyYWN0ZXIpOwotICAgICAgICBVMTZfQVBQRU5EKGRlc3Rp
bmF0aW9uLCBwb3NpdGlvbiwgbGVuZ3RoLCBjaGFyYWN0ZXIsIGVycm9yKTsKLSAgICAgICAgQVNT
RVJUX1VOVVNFRChlcnJvciwgIWVycm9yKTsKLSAgICAgICAgcG9zaXRpb24gPSBuZXh0UG9zaXRp
b247Ci0gICAgfQotfQotCi1jb25zdCBUZXh0UnVuJiBDb21wbGV4VGV4dENvbnRyb2xsZXI6Omdl
dE5vcm1hbGl6ZWRUZXh0UnVuKGNvbnN0IFRleHRSdW4mIG9yaWdpbmFsUnVuLCBPd25QdHI8VGV4
dFJ1bj4mIG5vcm1hbGl6ZWRSdW4sIE93bkFycmF5UHRyPFVDaGFyPiYgbm9ybWFsaXplZEJ1ZmZl
cikKLXsKLSAgICAvLyBOb3JtYWxpemUgdGhlIHRleHQgcnVuIGluIHRocmVlIHdheXM6Ci0gICAg
Ly8gMSkgQ29udmVydCB0aGUgfG9yaWdpbmFsUnVufCB0byBORkMgbm9ybWFsaXplZCBmb3JtIGlm
IGNvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrcwotICAgIC8vIChVKzAzMDAuLikgYXJlIHVzZWQg
aW4gdGhlIHJ1bi4gVGhpcyBjb252ZXJzaW9uIGlzIG5lY2Vzc2FyeSBzaW5jZSBtb3N0IE9wZW5U
eXBlCi0gICAgLy8gZm9udHMgKGUuZy4sIEFyaWFsKSBkb24ndCBoYXZlIHN1YnN0aXR1dGlvbiBy
dWxlcyBmb3IgdGhlIGRpYWNyaXRpY2FsIG1hcmtzIGluCi0gICAgLy8gdGhlaXIgR1NVQiB0YWJs
ZXMuCi0gICAgLy8KLSAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgdXNlIHRoZSBpY3U6Ok5vcm1h
bGl6ZXI6OmlzTm9ybWFsaXplZChVTk9STV9ORkMpIEFQSSBoZXJlIHNpbmNlCi0gICAgLy8gdGhl
IEFQSSByZXR1cm5zIEZBTFNFICg9IG5vdCBub3JtYWxpemVkKSBmb3IgY29tcGxleCBydW5zIHRo
YXQgZG9uJ3QgcmVxdWlyZSBORkMKLSAgICAvLyBub3JtYWxpemF0aW9uIChlLmcuLCBBcmFiaWMg
dGV4dCkuIFVubGVzcyB0aGUgcnVuIGNvbnRhaW5zIHRoZSBkaWFjcml0aWNhbCBtYXJrcywKLSAg
ICAvLyBIYXJmYnV6eiB3aWxsIGRvIHRoZSBzYW1lIHRoaW5nIGZvciB1cyB1c2luZyB0aGUgR1NV
QiB0YWJsZS4KLSAgICAvLyAyKSBDb252ZXJ0IHNwYWNpbmcgY2hhcmFjdGVycyBpbnRvIHBsYWlu
IHNwYWNlcywgYXMgc29tZSBmb250cyB3aWxsIHByb3ZpZGUgZ2x5cGhzCi0gICAgLy8gZm9yIGNo
YXJhY3RlcnMgbGlrZSAnXG4nIG90aGVyd2lzZS4KLSAgICAvLyAzKSBDb252ZXJ0IG1pcnJvcmVk
IGNoYXJhY3RlcnMgc3VjaCBhcyBwYXJlbnRoZXNpcyBmb3IgcnRsIHRleHQuCi0KLSAgICAvLyBD
b252ZXJ0IHRvIE5GQyBmb3JtIGlmIHRoZSB0ZXh0IGhhcyBkaWFjcml0aWNhbCBtYXJrcy4KLSAg
ICBpY3U6OlVuaWNvZGVTdHJpbmcgbm9ybWFsaXplZFN0cmluZzsKLSAgICBVRXJyb3JDb2RlIGVy
cm9yID0gVV9aRVJPX0VSUk9SOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcmlnaW5hbFJ1
bi5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIFVDaGFyIGNoID0gb3JpZ2luYWxSdW5baV07Ci0g
ICAgICAgIGlmICg6OnVibG9ja19nZXRDb2RlKGNoKSA9PSBVQkxPQ0tfQ09NQklOSU5HX0RJQUNS
SVRJQ0FMX01BUktTKSB7Ci0gICAgICAgICAgICBpY3U6Ok5vcm1hbGl6ZXI6Om5vcm1hbGl6ZShp
Y3U6OlVuaWNvZGVTdHJpbmcob3JpZ2luYWxSdW4uY2hhcmFjdGVycygpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxSdW4ubGVuZ3RoKCkpLCBVTk9STV9O
RkMsIDAgLyogbm8gb3B0aW9ucyAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vcm1hbGl6ZWRTdHJpbmcsIGVycm9yKTsKLSAgICAgICAgICAgIGlmIChVX0ZBSUxV
UkUoZXJyb3IpKQotICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFJ1bjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTm9ybWFsaXplIHNwYWNlIGFu
ZCBtaXJyb3IgcGFyZW50aGVzaXMgZm9yIHJ0bCB0ZXh0LgotICAgIGludCBub3JtYWxpemVkQnVm
ZmVyTGVuZ3RoOwotICAgIGNvbnN0IFVDaGFyKiBzb3VyY2VUZXh0OwotICAgIGlmIChub3JtYWxp
emVkU3RyaW5nLmlzRW1wdHkoKSkgewotICAgICAgICBub3JtYWxpemVkQnVmZmVyTGVuZ3RoID0g
b3JpZ2luYWxSdW4ubGVuZ3RoKCk7Ci0gICAgICAgIHNvdXJjZVRleHQgPSBvcmlnaW5hbFJ1bi5j
aGFyYWN0ZXJzKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbm9ybWFsaXplZEJ1ZmZlckxlbmd0
aCA9IG5vcm1hbGl6ZWRTdHJpbmcubGVuZ3RoKCk7Ci0gICAgICAgIHNvdXJjZVRleHQgPSBub3Jt
YWxpemVkU3RyaW5nLmdldEJ1ZmZlcigpOwotICAgIH0KLQotICAgIG5vcm1hbGl6ZWRCdWZmZXIg
PSBhZG9wdEFycmF5UHRyKG5ldyBVQ2hhcltub3JtYWxpemVkQnVmZmVyTGVuZ3RoICsgMV0pOwot
Ci0gICAgbm9ybWFsaXplU3BhY2VzQW5kTWlycm9yQ2hhcnMoc291cmNlVGV4dCwgb3JpZ2luYWxS
dW4ucnRsKCksIG5vcm1hbGl6ZWRCdWZmZXIuZ2V0KCksIG5vcm1hbGl6ZWRCdWZmZXJMZW5ndGgp
OwotCi0gICAgbm9ybWFsaXplZFJ1biA9IGFkb3B0UHRyKG5ldyBUZXh0UnVuKG9yaWdpbmFsUnVu
KSk7Ci0gICAgbm9ybWFsaXplZFJ1bi0+c2V0VGV4dChub3JtYWxpemVkQnVmZmVyLmdldCgpLCBu
b3JtYWxpemVkQnVmZmVyTGVuZ3RoKTsKLSAgICByZXR1cm4gKm5vcm1hbGl6ZWRSdW47Ci19Ci0K
IGludCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmdseXBoSW5kZXhGb3JYUG9zaXRpb25JblNjcmlw
dFJ1bihpbnQgdGFyZ2V0WCkgY29uc3QKIHsKICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGds
eXBocyBpbiBsb2dpY2FsIG9yZGVyLCBzZWVpbmcgd2hldGhlciB0YXJnZXRYIGZhbGxzIGJldHdl
ZW4gdGhlIHByZXZpb3VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9Db21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6ei5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovQ29tcGxleFRleHRDb250cm9sbGVySGFy
ZkJ1enouaAppbmRleCBmZmYzNmViYWRiMTExMjU1ZmY0MDQ5YWVjNmUzYjFkYTg5NDdjZmRhLi42
Mjg4ZDQwOGEwMjA4M2M1MzhjNWRlNzEyYTZiMWM1MGNjYjQ4MmUzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Db21wbGV4VGV4dENvbnRyb2xs
ZXJIYXJmQnV6ei5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0NvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6LmgKQEAgLTMxLDYgKzMxLDcgQEAKICNp
Zm5kZWYgQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enpfaAogI2RlZmluZSBDb21wbGV4VGV4
dENvbnRyb2xsZXJIYXJmQnV6el9oCiAKKyNpbmNsdWRlICJIYXJmQnV6elNoYXBlckJhc2UuaCIK
ICNpbmNsdWRlICJIYXJmQnV6elNraWEuaCIKICNpbmNsdWRlICJTa1BvaW50LmgiCiAjaW5jbHVk
ZSAiU2tTY2FsYXIuaCIKQEAgLTYzLDMyICs2NCwxNyBAQCBjbGFzcyBTaW1wbGVGb250RGF0YTsK
IC8vIE9uY2UgeW91IGhhdmUgc2V0dXAgdGhlIG9iamVjdCwgY2FsbCB8bmV4dFNjcmlwdFJ1bnwg
dG8gZ2V0IHRoZSBmaXJzdCBzY3JpcHQKIC8vIHJ1bi4gVGhpcyB3aWxsIHJldHVybiBmYWxzZSB3
aGVuIHRoZSBpdGVyYXRpb24gaXMgY29tcGxldGUuIEF0IGFueSB0aW1lIHlvdQogLy8gY2FuIGNh
bGwgfHJlc2V0fCB0byBzdGFydCBvdmVyIGFnYWluLgotY2xhc3MgQ29tcGxleFRleHRDb250cm9s
bGVyIHsKK2NsYXNzIENvbXBsZXhUZXh0Q29udHJvbGxlciA6IHB1YmxpYyBIYXJmQnV6elNoYXBl
ckJhc2UgewogcHVibGljOgotICAgIENvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBUZXh0UnVu
JiwgaW50IHN0YXJ0aW5nWCwgaW50IHN0YXJ0aW5nWSwgdW5zaWduZWQgd29yZFNwYWNpbmcsIHVu
c2lnbmVkIGxldHRlclNwYWNpbmcsIHVuc2lnbmVkIHBhZGRpbmcsIGNvbnN0IEZvbnQqKTsKLSAg
ICB+Q29tcGxleFRleHRDb250cm9sbGVyKCk7Ci0KLSAgICBib29sIGlzV29yZEJyZWFrKHVuc2ln
bmVkKTsKLSAgICBpbnQgZGV0ZXJtaW5lV29yZEJyZWFrU3BhY2luZyh1bnNpZ25lZCk7Ci0gICAg
Ly8gc2V0UGFkZGluZyBzZXRzIGEgbnVtYmVyIG9mIHBpeGVscyB0byBiZSBkaXN0cmlidXRlZCBh
Y3Jvc3MgdGhlIFRleHRSdW4uCi0gICAgLy8gV2ViS2l0IHVzZXMgdGhpcyB0byBqdXN0aWZ5IHRl
eHQuCi0gICAgdm9pZCBzZXRQYWRkaW5nKGludCk7CisgICAgQ29tcGxleFRleHRDb250cm9sbGVy
KGNvbnN0IEZvbnQqLCBjb25zdCBUZXh0UnVuJiwgaW50IHN0YXJ0aW5nWCwgaW50IHN0YXJ0aW5n
WSk7CisgICAgdmlydHVhbCB+Q29tcGxleFRleHRDb250cm9sbGVyKCk7CisKICAgICB2b2lkIHJl
c2V0KGludCBvZmZzZXQpOwogICAgIC8vIEFkdmFuY2UgdG8gdGhlIG5leHQgc2NyaXB0IHJ1biwg
cmV0dXJuaW5nIGZhbHNlIHdoZW4gdGhlIGVuZCBvZiB0aGUKICAgICAvLyBUZXh0UnVuIGhhcyBi
ZWVuIHJlYWNoZWQuCiAgICAgYm9vbCBuZXh0U2NyaXB0UnVuKCk7CiAgICAgZmxvYXQgd2lkdGhP
ZkZ1bGxSdW4oKTsKIAotICAgIC8vIHNldFdvcmRTcGFjaW5nQWRqdXN0bWVudCBzZXRzIGEgZGVs
dGEgKGluIHBpeGVscykgd2hpY2ggaXMgYXBwbGllZCBhdAotICAgIC8vIGVhY2ggd29yZCBicmVh
ayBpbiB0aGUgVGV4dFJ1bi4KLSAgICB2b2lkIHNldFdvcmRTcGFjaW5nQWRqdXN0bWVudChpbnQg
d29yZFNwYWNpbmdBZGp1c3RtZW50KSB7IG1fd29yZFNwYWNpbmdBZGp1c3RtZW50ID0gd29yZFNw
YWNpbmdBZGp1c3RtZW50OyB9Ci0KLSAgICAvLyBzZXRMZXR0ZXJTcGFjaW5nQWRqdXN0bWVudCBz
ZXRzIGFuIGFkZGl0aW9uYWwgbnVtYmVyIG9mIHBpeGVscyB0aGF0IGlzCi0gICAgLy8gYWRkZWQg
dG8gdGhlIGFkdmFuY2UgYWZ0ZXIgZWFjaCBvdXRwdXQgY2x1c3Rlci4gVGhpcyBtYXRjaGVzIHRo
ZSBiZWhhdmlvdXIKLSAgICAvLyBvZiBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlLgotICAgIHZvaWQg
c2V0TGV0dGVyU3BhY2luZ0FkanVzdG1lbnQoaW50IGxldHRlclNwYWNpbmdBZGp1c3RtZW50KSB7
IG1fbGV0dGVyU3BhY2luZyA9IGxldHRlclNwYWNpbmdBZGp1c3RtZW50OyB9Ci0gICAgaW50IGxl
dHRlclNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX2xldHRlclNwYWNpbmc7IH0KLQogICAgIHZv
aWQgc2V0dXBGb3JSVEwoKTsKICAgICBib29sIHJ0bCgpIGNvbnN0IHsgcmV0dXJuIG1fcnVuLnJ0
bCgpOyB9CiAgICAgY29uc3QgdWludDE2X3QqIGdseXBocygpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5
cGhzMTY7IH0KQEAgLTEyNiwxNSArMTEyLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHNoYXBlR2x5
cGhzKCk7CiAgICAgdm9pZCBzZXRHbHlwaFBvc2l0aW9ucyhib29sKTsKIAotICAgIHN0YXRpYyB2
b2lkIG5vcm1hbGl6ZVNwYWNlc0FuZE1pcnJvckNoYXJzKGNvbnN0IFVDaGFyKiBzb3VyY2UsIGJv
b2wgcnRsLCBVQ2hhciogZGVzdGluYXRpb24sIGludCBsZW5ndGgpOwotICAgIHN0YXRpYyBjb25z
dCBUZXh0UnVuJiBnZXROb3JtYWxpemVkVGV4dFJ1bihjb25zdCBUZXh0UnVuJiBvcmlnaW5hbFJ1
biwgT3duUHRyPFRleHRSdW4+JiBub3JtYWxpemVkUnVuLCBPd25BcnJheVB0cjxVQ2hhcj4mIG5v
cm1hbGl6ZWRCdWZmZXIpOwotCi0gICAgLy8gVGhpcyBtYXRjaGVzIHRoZSBsb2dpYyBpbiBSZW5k
ZXJCbG9jazo6ZmluZE5leHRMaW5lQnJlYWsKLSAgICBzdGF0aWMgYm9vbCBpc0NvZGVwb2ludFNw
YWNlKEhCX1VDaGFyMTYgYykgeyByZXR1cm4gYyA9PSAnICcgfHwgYyA9PSAnXHQnOyB9Ci0KICAg
ICBpbnQgZ2x5cGhJbmRleEZvclhQb3NpdGlvbkluU2NyaXB0UnVuKGludCB0YXJnZXRYKSBjb25z
dDsKIAotICAgIGNvbnN0IEZvbnQqIGNvbnN0IG1fZm9udDsKICAgICBjb25zdCBTaW1wbGVGb250
RGF0YSogbV9jdXJyZW50Rm9udERhdGE7CiAgICAgSEJfU2hhcGVySXRlbSBtX2l0ZW07CiAgICAg
dWludDE2X3QqIG1fZ2x5cGhzMTY7IC8vIEEgdmVjdG9yIG9mIDE2LWJpdCBnbHlwaCBpZHMuCkBA
IC0xNDUsMTcgKzEyNCw2IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9waXhlbFdpZHRoOyAv
LyBXaWR0aCAoaW4gcHgpIG9mIHRoZSBjdXJyZW50IHNjcmlwdCBydW4uCiAgICAgdW5zaWduZWQg
bV9nbHlwaHNBcnJheUNhcGFjaXR5OyAvLyBDdXJyZW50IHNpemUgb2YgYWxsIHRoZSBIYXJmYnV6
eiBhcnJheXMuCiAKLSAgICBPd25QdHI8VGV4dFJ1bj4gbV9ub3JtYWxpemVkUnVuOwotICAgIE93
bkFycmF5UHRyPFVDaGFyPiBtX25vcm1hbGl6ZWRCdWZmZXI7IC8vIEEgYnVmZmVyIGZvciBub3Jt
YWxpemVkIHJ1bi4KLSAgICBjb25zdCBUZXh0UnVuJiBtX3J1bjsKLSAgICBpbnQgbV93b3JkU3Bh
Y2luZ0FkanVzdG1lbnQ7IC8vIGRlbHRhIGFkanVzdG1lbnQgKHBpeGVscykgZm9yIGVhY2ggd29y
ZCBicmVhay4KLSAgICBmbG9hdCBtX3BhZGRpbmc7IC8vIHBpeGVscyB0byBiZSBkaXN0cmlidXRl
ZCBvdmVyIHRoZSBsaW5lIGF0IHdvcmQgYnJlYWtzLgotICAgIGZsb2F0IG1fcGFkUGVyV29yZEJy
ZWFrOyAvLyBwaXhlbHMgdG8gYmUgYWRkZWQgdG8gZWFjaCB3b3JkIGJyZWFrLgotICAgIGZsb2F0
IG1fcGFkRXJyb3I7IC8vIHxtX3BhZFBlcldvcmRCcmVha3wgbWlnaHQgaGF2ZSBhIGZyYWN0aW9u
YWwgY29tcG9uZW50LgotICAgICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIHdlIG9ubHkgYWRk
IGEgd2hvbGUgbnVtYmVyIG9mIHBhZGRpbmcgcGl4ZWxzIGF0Ci0gICAgICAgICAgICAgICAgICAg
ICAgLy8gZWFjaCB3b3JkIGJyZWFrIHdlIGFjY3VtdWxhdGUgZXJyb3IuIFRoaXMgaXMgdGhlCi0g
ICAgICAgICAgICAgICAgICAgICAgLy8gbnVtYmVyIG9mIHBpeGVscyB0aGF0IHdlIGFyZSBiZWhp
bmQgc28gZmFyLgotICAgIGludCBtX2xldHRlclNwYWNpbmc7IC8vIHBpeGVscyB0byBiZSBhZGRl
ZCBhZnRlciBlYWNoIGdseXBoLgogICAgIFN0cmluZyBtX3NtYWxsQ2Fwc1N0cmluZzsgLy8gc3Vi
c3RyaW5nIG9mIG1fcnVuIGNvbnZlcnRlZCB0byBzbWFsbCBjYXBzLgogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRIYXJm
QnV6ei5jcHAKaW5kZXggYmE4YWEyZTdkZDRiZmVkYWNlMzhiMGVkZmY1NTdhNjczYWE0YjBmMS4u
MDNmNjgzNmMxYmE1ZDMxZDc4OTlhYWNhYmI3OTEzMDk0MGM0ZWVjNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250SGFyZkJ1
enouY3BwCkBAIC0xOTUsOCArMTk1LDcgQEAgdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3Jh
cGhpY3NDb250ZXh0KiBnYywgY29uc3QgVGV4dFJ1biYgcnVuLAogICAgICAgICBzZXR1cEZvclRl
eHRQYWludGluZygmc3Ryb2tlUGFpbnQsIGdjLT5zdHJva2VDb2xvcigpLnJnYigpKTsKICAgICB9
CiAKLSAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcihydW4sIHBvaW50LngoKSwg
cG9pbnQueSgpLCB3b3JkU3BhY2luZygpLCBsZXR0ZXJTcGFjaW5nKCksIHJ1bi5leHBhbnNpb24o
KSwgdGhpcyk7Ci0KKyAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBy
dW4sIHBvaW50LngoKSwgcG9pbnQueSgpKTsKICAgICBpZiAocnVuLnJ0bCgpKQogICAgICAgICBj
b250cm9sbGVyLnNldHVwRm9yUlRMKCk7CiAKQEAgLTIyOCw3ICsyMjcsNyBAQCB2b2lkIEZvbnQ6
OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250
ZXh0ICovLCBjb25zdAogCiBmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIC8qIGZhbGxi
YWNrRm9udHMgKi8sIEdseXBoT3ZlcmZsb3cqIC8qIGdseXBoT3ZlcmZsb3cgKi8pIGNvbnN0CiB7
Ci0gICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIocnVuLCAwLCAwLCB3b3JkU3Bh
Y2luZygpLCBsZXR0ZXJTcGFjaW5nKCksIHJ1bi5leHBhbnNpb24oKSwgdGhpcyk7CisgICAgQ29t
cGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuLCAwLCAwKTsKICAgICByZXR1
cm4gY29udHJvbGxlci53aWR0aE9mRnVsbFJ1bigpOwogfQogCkBAIC0yNDIsNyArMjQxLDcgQEAg
aW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYg
cnVuLCBmbG9hdCB4RmxvYXQsCiAKICAgICAvLyAoTWFjIGNvZGUgaWdub3JlcyBpbmNsdWRlUGFy
dGlhbEdseXBocywgYW5kIHRoZXkgZG9uJ3Qga25vdyB3aGF0IGl0J3MKICAgICAvLyBzdXBwb3Nl
ZCB0byBkbywgc28gd2UganVzdCBpZ25vcmUgaXQgYXMgd2VsbC4pCi0gICAgQ29tcGxleFRleHRD
b250cm9sbGVyIGNvbnRyb2xsZXIocnVuLCAwLCAwLCB3b3JkU3BhY2luZygpLCBsZXR0ZXJTcGFj
aW5nKCksIHJ1bi5leHBhbnNpb24oKSwgdGhpcyk7CisgICAgQ29tcGxleFRleHRDb250cm9sbGVy
IGNvbnRyb2xsZXIodGhpcywgcnVuLCAwLCAwKTsKICAgICBpZiAocnVuLnJ0bCgpKQogICAgICAg
ICBjb250cm9sbGVyLnNldHVwRm9yUlRMKCk7CiAgICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zmc2V0
Rm9yUG9zaXRpb24odGFyZ2V0WCk7CkBAIC0yNTMsNyArMjUyLDcgQEAgRmxvYXRSZWN0IEZvbnQ6
OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBpbnQgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewotICAgIENvbXBsZXhUZXh0Q29udHJvbGxl
ciBjb250cm9sbGVyKHJ1biwgMCwgMCwgd29yZFNwYWNpbmcoKSwgbGV0dGVyU3BhY2luZygpLCBy
dW4uZXhwYW5zaW9uKCksIHRoaXMpOworICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9s
bGVyKHRoaXMsIHJ1biwgMCwgMCk7CiAgICAgaWYgKHJ1bi5ydGwoKSkKICAgICAgICAgY29udHJv
bGxlci5zZXR1cEZvclJUTCgpOwogICAgIHJldHVybiBjb250cm9sbGVyLnNlbGVjdGlvblJlY3Qo
cG9pbnQsIGhlaWdodCwgZnJvbSwgdG8pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXJCYXNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyQmFzZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMjljMDYxMjM4YWQ1ZDhlYzY5Y2NlNTYyZTY2OGQ0OGI5NWJhNzBkOQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L0hhcmZCdXp6U2hhcGVyQmFzZS5jcHAKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJIYXJmQnV6elNoYXBlckJhc2UuaCIKKworI2luY2x1ZGUgIkZvbnQu
aCIKKyNpbmNsdWRlIDx1bmljb2RlL25vcm1senIuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3VjaGFy
Lmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9V
bmljb2RlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSGFyZkJ1enpTaGFwZXJCYXNlOjpI
YXJmQnV6elNoYXBlckJhc2UoY29uc3QgRm9udCogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuKQor
ICAgIDogbV9mb250KGZvbnQpCisgICAgLCBtX3J1bihydW4pCisgICAgLCBtX3dvcmRTcGFjaW5n
QWRqdXN0bWVudChmb250LT53b3JkU3BhY2luZygpKQorICAgICwgbV9sZXR0ZXJTcGFjaW5nKGZv
bnQtPmxldHRlclNwYWNpbmcoKSkKK3sKK30KKworc3RhdGljIHZvaWQgbm9ybWFsaXplU3BhY2Vz
QW5kTWlycm9yQ2hhcnMoY29uc3QgVUNoYXIqIHNvdXJjZSwgVUNoYXIqIGRlc3RpbmF0aW9uLCBp
bnQgbGVuZ3RoLCBIYXJmQnV6elNoYXBlckJhc2U6Ok5vcm1hbGl6ZU1vZGUgbm9ybWFsaXplTW9k
ZSkKK3sKKyAgICBpbnQgcG9zaXRpb24gPSAwOworICAgIGJvb2wgZXJyb3IgPSBmYWxzZTsKKyAg
ICAvLyBJdGVyYXRlIGNoYXJhY3RlcnMgaW4gc291cmNlIGFuZCBtaXJyb3IgY2hhcmFjdGVyIGlm
IG5lZWRlZC4KKyAgICB3aGlsZSAocG9zaXRpb24gPCBsZW5ndGgpIHsKKyAgICAgICAgVUNoYXIz
MiBjaGFyYWN0ZXI7CisgICAgICAgIGludCBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICAg
ICAgVTE2X05FWFQoc291cmNlLCBuZXh0UG9zaXRpb24sIGxlbmd0aCwgY2hhcmFjdGVyKTsKKyAg
ICAgICAgaWYgKEZvbnQ6OnRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKQorICAgICAgICAgICAgY2hh
cmFjdGVyID0gJyAnOworICAgICAgICBlbHNlIGlmIChGb250Ojp0cmVhdEFzWmVyb1dpZHRoU3Bh
Y2UoY2hhcmFjdGVyKSkKKyAgICAgICAgICAgIGNoYXJhY3RlciA9IHplcm9XaWR0aFNwYWNlOwor
ICAgICAgICBlbHNlIGlmIChub3JtYWxpemVNb2RlID09IEhhcmZCdXp6U2hhcGVyQmFzZTo6Tm9y
bWFsaXplTWlycm9yQ2hhcnMpCisgICAgICAgICAgICBjaGFyYWN0ZXIgPSB1X2NoYXJNaXJyb3Io
Y2hhcmFjdGVyKTsKKyAgICAgICAgVTE2X0FQUEVORChkZXN0aW5hdGlvbiwgcG9zaXRpb24sIGxl
bmd0aCwgY2hhcmFjdGVyLCBlcnJvcik7CisgICAgICAgIEFTU0VSVCghZXJyb3IpOworICAgICAg
ICBwb3NpdGlvbiA9IG5leHRQb3NpdGlvbjsKKyAgICB9Cit9CisKK3ZvaWQgSGFyZkJ1enpTaGFw
ZXJCYXNlOjpzZXROb3JtYWxpemVkQnVmZmVyKE5vcm1hbGl6ZU1vZGUgbm9ybWFsaXplTW9kZSkK
K3sKKyAgICAvLyBOb3JtYWxpemUgdGhlIHRleHQgcnVuIGluIHRocmVlIHdheXM6CisgICAgLy8g
MSkgQ29udmVydCB0aGUgfG9yaWdpbmFsUnVufCB0byBORkMgbm9ybWFsaXplZCBmb3JtIGlmIGNv
bWJpbmluZyBkaWFjcml0aWNhbCBtYXJrcworICAgIC8vIChVKzAzMDAuLikgYXJlIHVzZWQgaW4g
dGhlIHJ1bi4gVGhpcyBjb252ZXJzaW9uIGlzIG5lY2Vzc2FyeSBzaW5jZSBtb3N0IE9wZW5UeXBl
CisgICAgLy8gZm9udHMgKGUuZy4sIEFyaWFsKSBkb24ndCBoYXZlIHN1YnN0aXR1dGlvbiBydWxl
cyBmb3IgdGhlIGRpYWNyaXRpY2FsIG1hcmtzIGluCisgICAgLy8gdGhlaXIgR1NVQiB0YWJsZXMu
CisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgdXNlIHRoZSBpY3U6Ok5vcm1hbGl6
ZXI6OmlzTm9ybWFsaXplZChVTk9STV9ORkMpIEFQSSBoZXJlIHNpbmNlCisgICAgLy8gdGhlIEFQ
SSByZXR1cm5zIEZBTFNFICg9IG5vdCBub3JtYWxpemVkKSBmb3IgY29tcGxleCBydW5zIHRoYXQg
ZG9uJ3QgcmVxdWlyZSBORkMKKyAgICAvLyBub3JtYWxpemF0aW9uIChlLmcuLCBBcmFiaWMgdGV4
dCkuIFVubGVzcyB0aGUgcnVuIGNvbnRhaW5zIHRoZSBkaWFjcml0aWNhbCBtYXJrcywKKyAgICAv
LyBIYXJmQnV6eiB3aWxsIGRvIHRoZSBzYW1lIHRoaW5nIGZvciB1cyB1c2luZyB0aGUgR1NVQiB0
YWJsZS4KKyAgICAvLyAyKSBDb252ZXJ0IHNwYWNpbmcgY2hhcmFjdGVycyBpbnRvIHBsYWluIHNw
YWNlcywgYXMgc29tZSBmb250cyB3aWxsIHByb3ZpZGUgZ2x5cGhzCisgICAgLy8gZm9yIGNoYXJh
Y3RlcnMgbGlrZSAnXG4nIG90aGVyd2lzZS4KKyAgICAvLyAzKSBDb252ZXJ0IG1pcnJvcmVkIGNo
YXJhY3RlcnMgc3VjaCBhcyBwYXJlbnRoZXNpcyBmb3IgcnRsIHRleHQuCisKKyAgICAvLyBDb252
ZXJ0IHRvIE5GQyBmb3JtIGlmIHRoZSB0ZXh0IGhhcyBkaWFjcml0aWNhbCBtYXJrcy4KKyAgICBp
Y3U6OlVuaWNvZGVTdHJpbmcgbm9ybWFsaXplZFN0cmluZzsKKyAgICBVRXJyb3JDb2RlIGVycm9y
ID0gVV9aRVJPX0VSUk9SOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3J1bi5sZW5ndGgo
KTsgKytpKSB7CisgICAgICAgIFVDaGFyIGNoID0gbV9ydW5baV07CisgICAgICAgIGlmICg6OnVi
bG9ja19nZXRDb2RlKGNoKSA9PSBVQkxPQ0tfQ09NQklOSU5HX0RJQUNSSVRJQ0FMX01BUktTKSB7
CisgICAgICAgICAgICBpY3U6Ok5vcm1hbGl6ZXI6Om5vcm1hbGl6ZShpY3U6OlVuaWNvZGVTdHJp
bmcobV9ydW4uY2hhcmFjdGVycygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9ydW4ubGVuZ3RoKCkpLCBVTk9STV9ORkMsIDAgLyogbm8gb3B0aW9ucyAqLywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRTdHJpbmcsIGVy
cm9yKTsKKyAgICAgICAgICAgIGlmIChVX0ZBSUxVUkUoZXJyb3IpKQorICAgICAgICAgICAgICAg
IG5vcm1hbGl6ZWRTdHJpbmcucmVtb3ZlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGNvbnN0IFVDaGFyKiBzb3VyY2VUZXh0OworICAgIGlmIChub3JtYWxp
emVkU3RyaW5nLmlzRW1wdHkoKSkgeworICAgICAgICBtX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGgg
PSBtX3J1bi5sZW5ndGgoKTsKKyAgICAgICAgc291cmNlVGV4dCA9IG1fcnVuLmNoYXJhY3RlcnMo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGggPSBub3Jt
YWxpemVkU3RyaW5nLmxlbmd0aCgpOworICAgICAgICBzb3VyY2VUZXh0ID0gbm9ybWFsaXplZFN0
cmluZy5nZXRCdWZmZXIoKTsKKyAgICB9CisKKyAgICBtX25vcm1hbGl6ZWRCdWZmZXIgPSBhZG9w
dEFycmF5UHRyKG5ldyBVQ2hhclttX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGggKyAxXSk7CisgICAg
bm9ybWFsaXplU3BhY2VzQW5kTWlycm9yQ2hhcnMoc291cmNlVGV4dCwgbV9ub3JtYWxpemVkQnVm
ZmVyLmdldCgpLCBtX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGgsIG5vcm1hbGl6ZU1vZGUpOworfQor
Citib29sIEhhcmZCdXp6U2hhcGVyQmFzZTo6aXNXb3JkRW5kKHVuc2lnbmVkIGluZGV4KQorewor
ICAgIC8vIFRoaXMgY291bGQgcmVmZXIgYSBoaWdoLXN1cnJvZ2F0ZSwgYnV0IHNob3VsZCB3b3Jr
LgorICAgIHJldHVybiBpbmRleCAmJiBpc0NvZGVwb2ludFNwYWNlKG1fbm9ybWFsaXplZEJ1ZmZl
cltpbmRleF0pICYmICFpc0NvZGVwb2ludFNwYWNlKG1fbm9ybWFsaXplZEJ1ZmZlcltpbmRleCAt
IDFdKTsKK30KKworaW50IEhhcmZCdXp6U2hhcGVyQmFzZTo6ZGV0ZXJtaW5lV29yZEJyZWFrU3Bh
Y2luZygpCit7CisgICAgaW50IHdvcmRCcmVha1NwYWNpbmcgPSBtX3dvcmRTcGFjaW5nQWRqdXN0
bWVudDsKKworICAgIGlmIChtX3BhZGRpbmcgPiAwKSB7CisgICAgICAgIGludCB0b1BhZCA9IHJv
dW5kZihtX3BhZFBlcldvcmRCcmVhayArIG1fcGFkRXJyb3IpOworICAgICAgICBtX3BhZEVycm9y
ICs9IG1fcGFkUGVyV29yZEJyZWFrIC0gdG9QYWQ7CisKKyAgICAgICAgaWYgKG1fcGFkZGluZyA8
IHRvUGFkKQorICAgICAgICAgICAgdG9QYWQgPSBtX3BhZGRpbmc7CisgICAgICAgIG1fcGFkZGlu
ZyAtPSB0b1BhZDsKKyAgICAgICAgd29yZEJyZWFrU3BhY2luZyArPSB0b1BhZDsKKyAgICB9Cisg
ICAgcmV0dXJuIHdvcmRCcmVha1NwYWNpbmc7Cit9CisKKy8vIHNldFBhZGRpbmcgc2V0cyBhIG51
bWJlciBvZiBwaXhlbHMgdG8gYmUgZGlzdHJpYnV0ZWQgYWNyb3NzIHRoZSBUZXh0UnVuLgorLy8g
V2ViS2l0IHVzZXMgdGhpcyB0byBqdXN0aWZ5IHRleHQuCit2b2lkIEhhcmZCdXp6U2hhcGVyQmFz
ZTo6c2V0UGFkZGluZyhpbnQgcGFkZGluZykKK3sKKyAgICBtX3BhZGRpbmcgPSBwYWRkaW5nOwor
ICAgIG1fcGFkRXJyb3IgPSAwOworICAgIGlmICghbV9wYWRkaW5nKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBJZiB3ZSBoYXZlIHBhZGRpbmcgdG8gZGlzdHJpYnV0ZSwgdGhlbiB3ZSB0cnkg
dG8gZ2l2ZSBhbiBlcXVhbAorICAgIC8vIGFtb3VudCB0byBlYWNoIHNwYWNlLiBUaGUgbGFzdCBz
cGFjZSBnZXRzIHRoZSBzbWFsbGVyIGFtb3VudCwgaWYKKyAgICAvLyBhbnkuCisgICAgdW5zaWdu
ZWQgbnVtV29yZEVuZHMgPSAwOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbm9y
bWFsaXplZEJ1ZmZlckxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChpc1dvcmRFbmQoaSkpCisg
ICAgICAgICAgICBudW1Xb3JkRW5kcysrOworICAgIH0KKworICAgIGlmIChudW1Xb3JkRW5kcykK
KyAgICAgICAgbV9wYWRQZXJXb3JkQnJlYWsgPSBtX3BhZGRpbmcgLyBudW1Xb3JkRW5kczsKKyAg
ICBlbHNlCisgICAgICAgIG1fcGFkUGVyV29yZEJyZWFrID0gMDsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovSGFyZkJ1enpTaGFwZXJCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlckJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42N2JjYWRi
ZmY0MzljZjg5Yzg0YmJhYWU3OWVlNzM5OGEzN2NjYzU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXJCYXNl
LmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSGFyZkJ1enpTaGFwZXJCYXNlX2gKKyNkZWZpbmUg
SGFyZkJ1enpTaGFwZXJCYXNlX2gKKworI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlIDx3
dGYvT3duQXJyYXlQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGb250Owor
CitjbGFzcyBIYXJmQnV6elNoYXBlckJhc2UgeworcHVibGljOgorICAgIGVudW0gTm9ybWFsaXpl
TW9kZSB7CisgICAgICAgIERvTm90Tm9ybWFsaXplTWlycm9yQ2hhcnMsCisgICAgICAgIE5vcm1h
bGl6ZU1pcnJvckNoYXJzCisgICAgfTsKKworICAgIEhhcmZCdXp6U2hhcGVyQmFzZShjb25zdCBG
b250KiwgY29uc3QgVGV4dFJ1biYpOworICAgIHZpcnR1YWwgfkhhcmZCdXp6U2hhcGVyQmFzZSgp
IHsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBzZXROb3JtYWxpemVkQnVmZmVyKE5vcm1hbGl6
ZU1vZGUgPSBEb05vdE5vcm1hbGl6ZU1pcnJvckNoYXJzKTsKKworICAgIGJvb2wgaXNXb3JkRW5k
KHVuc2lnbmVkKTsKKyAgICBpbnQgZGV0ZXJtaW5lV29yZEJyZWFrU3BhY2luZygpOworICAgIC8v
IHNldFBhZGRpbmcgc2V0cyBhIG51bWJlciBvZiBwaXhlbHMgdG8gYmUgZGlzdHJpYnV0ZWQgYWNy
b3NzIHRoZSBUZXh0UnVuLgorICAgIC8vIFdlYktpdCB1c2VzIHRoaXMgdG8ganVzdGlmeSB0ZXh0
LgorICAgIHZvaWQgc2V0UGFkZGluZyhpbnQpOworCisgICAgLy8gVGhpcyBtYXRjaGVzIHRoZSBs
b2dpYyBpbiBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lQnJlYWsKKyAgICBzdGF0aWMgYm9vbCBp
c0NvZGVwb2ludFNwYWNlKFVDaGFyIGMpIHsgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1x0Jzsg
fQorCisgICAgY29uc3QgRm9udCogbV9mb250OworICAgIE93bkFycmF5UHRyPFVDaGFyPiBtX25v
cm1hbGl6ZWRCdWZmZXI7CisgICAgdW5zaWduZWQgbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoOwor
ICAgIGNvbnN0IFRleHRSdW4mIG1fcnVuOworCisgICAgaW50IG1fd29yZFNwYWNpbmdBZGp1c3Rt
ZW50OyAvLyBkZWx0YSBhZGp1c3RtZW50IChwaXhlbHMpIGZvciBlYWNoIHdvcmQgYnJlYWsuCisg
ICAgZmxvYXQgbV9wYWRkaW5nOyAvLyBwaXhlbHMgdG8gYmUgZGlzdHJpYnV0ZWQgb3ZlciB0aGUg
bGluZSBhdCB3b3JkIGJyZWFrcy4KKyAgICBmbG9hdCBtX3BhZFBlcldvcmRCcmVhazsgLy8gcGl4
ZWxzIHRvIGJlIGFkZGVkIHRvIGVhY2ggd29yZCBicmVhay4KKyAgICBmbG9hdCBtX3BhZEVycm9y
OyAvLyB8bV9wYWRQZXJXb3JkQnJlYWt8IG1pZ2h0IGhhdmUgYSBmcmFjdGlvbmFsIGNvbXBvbmVu
dC4KKyAgICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSB3ZSBvbmx5IGFkZCBhIHdob2xlIG51
bWJlciBvZiBwYWRkaW5nIHBpeGVscyBhdAorICAgICAgICAgICAgICAgICAgICAgIC8vIGVhY2gg
d29yZCBicmVhayB3ZSBhY2N1bXVsYXRlIGVycm9yLiBUaGlzIGlzIHRoZQorICAgICAgICAgICAg
ICAgICAgICAgIC8vIG51bWJlciBvZiBwaXhlbHMgdGhhdCB3ZSBhcmUgYmVoaW5kIHNvIGZhci4K
KyAgICBpbnQgbV9sZXR0ZXJTcGFjaW5nOyAvLyBwaXhlbHMgdG8gYmUgYWRkZWQgYWZ0ZXIgZWFj
aCBnbHlwaC4KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEhhcmZC
dXp6U2hhcGVyQmFzZV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128584</attachid>
            <date>2012-02-23 16:01:26 -0800</date>
            <delta_ts>2012-02-23 22:59:46 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-79336-20120224090125.patch</filename>
            <type>text/plain</type>
            <size>31850</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4Njg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDU5OWI0MGYxYzA4MTlk
YjA3MWI2NmI1MDdiZDY3ZDdlM2EzYzhhNC4uOGVjYmJlMDUwMTg3MDYwNzEwYjA4NWM3YWY5NTJl
YjA5YzhkNTAxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTAyLTIzICBLZW5p
Y2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1d
IEFkZCBIYXJmQnV6elNoYXBlckJhc2UgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc5MzM2CisKKyAgICAgICAgRXh0cmFjdCBhIHBhcnQgb2Yg
Q29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enogY2xhc3MgYXMKKyAgICAgICAgSGFyZkJ1enpT
aGFwZXJCYXNlIGNsYXNzLiBUaGlzIHBhdGNoIGludGVuZHMgdG8gc2hhcmUgdGhlIGNvZGUgYmV0
d2VlbgorICAgICAgICBvbGQgSGFyZkJ1enogYW5kIEhhcmZCdXp6LW5nLgorCisgICAgICAgIFJl
dmlld2VkIGJ5IFRvbnkgQ2hhbmcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBObyBiZWhhdmlv
ciBjaGFuZ2UuIEV4aXN0aW5nIHRlc3RzIGluIGZhc3QvdGV4dCBzaG91bGQgcGFzcy4KKworICAg
ICAgICAqIFBsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZTogQWRkZWQgSGFyZkJ1enpTaGFwZXJCYXNl
LmNwcC4KKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDogQWRkZWQgSGFyZkJ1enpT
aGFwZXJCYXNlLihjcHB8aCkuCisgICAgICAgICogV2ViQ29yZS5neXBpOiBEaXR0by4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Db21wbGV4VGV4dENvbnRyb2xsZXJIYXJm
QnV6ei5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBs
ZXhUZXh0Q29udHJvbGxlcik6IFJlbW92ZWQgcmVkdW5kYW50IGFyZ3VtZW50cy4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6bmV4dFNjcmlwdFJ1bik6IFVzZSBtX25v
cm1hbGl6ZWRCdWZmZXIgYW5kIG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aCBpbnN0ZWFkIG9mIG1f
cnVuLgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpzZXR1cEZvbnRG
b3JTY3JpcHRSdW4pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJv
bGxlcjo6c2V0R2x5cGhQb3NpdGlvbnMpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9Db21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6ei5oOgorICAgICAgICAo
Q29tcGxleFRleHRDb250cm9sbGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9Gb250SGFyZkJ1enouY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0NvbXBs
ZXhUZXh0KTogUmVtb3ZlZCByZWR1bmRhbnQgYXJndW1lbnRzIG9mIENvbXBsZXhUZXh0Q29udHJv
bGxlciBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZsb2F0V2lkdGhGb3JD
b21wbGV4VGV4dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6b2Zmc2V0Rm9yUG9z
aXRpb25Gb3JDb21wbGV4VGV4dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6c2Vs
ZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXJCYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyQmFzZTo6SGFyZkJ1enpT
aGFwZXJCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Om5vcm1hbGl6ZVNwYWNlc0FuZE1pcnJvckNo
YXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyQmFzZTo6c2V0Tm9ybWFsaXpl
ZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlckJhc2U6OmlzV29yZEVu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlckJhc2U6OmRldGVybWluZVdvcmRC
cmVha1NwYWNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXJCYXNlOjpzZXRQ
YWRkaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNo
YXBlckJhc2UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEhhcmZCdXp6
U2hhcGVyQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlckJhc2U6On5IYXJm
QnV6elNoYXBlckJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXJCYXNlOjpp
c0NvZGVwb2ludFNwYWNlKToKKwogMjAxMi0wMi0yMyAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFB1c2ggQ0NMYXllckl0ZXJhdG9yUG9z
aXRpb24gc3RydWN0IGludG8gQ0NMYXllckl0ZXJhdG9yIGNsYXNzLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1CbGFja0JlcnJ5LmNtYWtlCmluZGV4IGNlYzc4MWE0MmJjNzRlNjBmYTgxOTRlZTZhMTBk
YmM5NmFjZDc1ZWQuLjBjNDViZTRjNTZkMDI5ZjRlN2EzMzg5MmQwMjIzYmQwOWMxYTFiYWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQorKysgYi9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKQEAgLTQ1LDYgKzQ1LDcgQEAg
TElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enouY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovRm9udEhhcmZCdXp6LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6ei5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9IYXJmQnV6elNoYXBlci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9IYXJmQnV6elNraWEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q2FjaGVT
a2lhLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR2x5cGhQYWdlVHJlZU5vZGVTa2lh
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCBkMzE5NDk2YzEx
ZTUxZTNmOWRmMzZhMDIzZjgxN2E2MWU2NWU5MzlkLi4yNWM1NDEzMzZiYThlZTc2OTY0YTI5YzNm
Yjk2MzhiYjg3YzJhMWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9X
ZWJDb3JlLmd5cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApA
QCAtMTQ4NCw2ICsxNDg0LDcgQEAKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9Gb250SGFyZkJ1enpcXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2lu
Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZC
dXp6XFwuY3BwJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0hhcmZCdXp6U2tpYVxcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScs
ICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlckJhc2VcXC4oY3BwfGgp
JCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2lt
cGxlRm9udERhdGFTa2lhXFwuY3BwJCddLAogICAgICAgICAgIF0sCiAgICAgICAgIH0sIHsgIyB1
c2VfeDExPT0wCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggOWRkZjkxNWY0ZWFjMDA0ZWVlNjg1ODJhMjgy
MTczMzViYjNjYTU2Mi4uNTNjNmNkOTBkODY1YTZlMzdhZmNkMGU3MDQwMmJiNzA3OGI4ODM3MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzQ2OCw2ICszNDY4LDggQEAKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250UGxhdGZvcm1EYXRhSGFyZkJ1enouaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmgnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyQmFz
ZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6
U2hhcGVyQmFzZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JN
YWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENv
bnRyb2xsZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxl
eFRleHRDb250cm9sbGVyLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enouY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovQ29tcGxleFRleHRDb250cm9s
bGVySGFyZkJ1enouY3BwCmluZGV4IDlhMzYzNjViNDA5YmIzNWY5MDRiYTUyZTU0MTUyMTZjOTVm
NTIzODQuLmYyNDRhOTRjMmUwYmNhYjVmMzVjYzI5N2Y2MTdlY2ExM2YzZGUyY2QgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0NvbXBsZXhUZXh0
Q29udHJvbGxlckhhcmZCdXp6LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9Db21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6ei5jcHAKQEAgLTUyLDM1
ICs1MiwzMyBAQCBzdGF0aWMgaW50IHRydW5jYXRlRml4ZWRQb2ludFRvSW50ZWdlcihIQl9GaXhl
ZCB2YWx1ZSkKICAgICByZXR1cm4gdmFsdWUgPj4gNjsKIH0KIAotQ29tcGxleFRleHRDb250cm9s
bGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgc3RhcnRp
bmdYLCBpbnQgc3RhcnRpbmdZLCB1bnNpZ25lZCB3b3JkU3BhY2luZywgdW5zaWduZWQgbGV0dGVy
U3BhY2luZywgdW5zaWduZWQgcGFkZGluZywgY29uc3QgRm9udCogZm9udCkKLSAgICA6IG1fZm9u
dChmb250KQotICAgICwgbV9ydW4oZ2V0Tm9ybWFsaXplZFRleHRSdW4ocnVuLCBtX25vcm1hbGl6
ZWRSdW4sIG1fbm9ybWFsaXplZEJ1ZmZlcikpCitDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBs
ZXhUZXh0Q29udHJvbGxlcihjb25zdCBGb250KiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGlu
dCBzdGFydGluZ1gsIGludCBzdGFydGluZ1kpCisgICAgOiBIYXJmQnV6elNoYXBlckJhc2UoZm9u
dCwgcnVuKQogewotICAgIC8vIERvIG5vdCB1c2UgfHJ1bnwgaW5zaWRlIHRoaXMgY29uc3RydWN0
b3IuIFVzZSB8bV9ydW58IGluc3RlYWQuCisgICAgTm9ybWFsaXplTW9kZSBtb2RlID0gbV9ydW4u
cnRsKCkgPyBOb3JtYWxpemVNaXJyb3JDaGFycyA6IERvTm90Tm9ybWFsaXplTWlycm9yQ2hhcnM7
CisgICAgc2V0Tm9ybWFsaXplZEJ1ZmZlcihtb2RlKTsKIAogICAgIG1lbXNldCgmbV9pdGVtLCAw
LCBzaXplb2YobV9pdGVtKSk7CiAgICAgLy8gV2UgY2Fubm90IGtub3csIGFoZWFkIG9mIHRpbWUs
IGhvdyBtYW55IGdseXBocyBhIGdpdmVuIHNjcmlwdCBydW4KICAgICAvLyB3aWxsIHByb2R1Y2Uu
IFdlIHRha2UgYSBndWVzcyB0aGF0IHNjcmlwdCBydW5zIHdpbGwgbm90IHByb2R1Y2UgbW9yZQog
ICAgIC8vIHRoYW4gdHdpY2UgYXMgbWFueSBnbHlwaHMgYXMgdGhlcmUgYXJlIGNvZGUgcG9pbnRz
IHBsdXMgYSBiaXQgb2YKICAgICAvLyBwYWRkaW5nIGFuZCBmYWxsYmFjayBpZiB3ZSBmaW5kIHRo
YXQgd2UgYXJlIHdyb25nLgotICAgIGNyZWF0ZUdseXBoQXJyYXlzKChtX3J1bi5sZW5ndGgoKSAr
IDIpICogMik7CisgICAgY3JlYXRlR2x5cGhBcnJheXMoKG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0
aCArIDIpICogMik7CiAKLSAgICBtX2l0ZW0ubG9nX2NsdXN0ZXJzID0gbmV3IHVuc2lnbmVkIHNo
b3J0W21fcnVuLmxlbmd0aCgpXTsKKyAgICBtX2l0ZW0ubG9nX2NsdXN0ZXJzID0gbmV3IHVuc2ln
bmVkIHNob3J0W21fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aF07CiAKICAgICBtX2l0ZW0uZmFjZSA9
IDA7CiAgICAgbV9pdGVtLmZvbnQgPSBhbGxvY0hhcmZidXp6Rm9udCgpOwogCiAgICAgbV9pdGVt
Lml0ZW0uYmlkaUxldmVsID0gbV9ydW4ucnRsKCk7CiAKLSAgICBtX2l0ZW0uc3RyaW5nID0gbV9y
dW4uY2hhcmFjdGVycygpOwotICAgIG1faXRlbS5zdHJpbmdMZW5ndGggPSBtX3J1bi5sZW5ndGgo
KTsKKyAgICBtX2l0ZW0uc3RyaW5nID0gbV9ub3JtYWxpemVkQnVmZmVyLmdldCgpOworICAgIG1f
aXRlbS5zdHJpbmdMZW5ndGggPSBtX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGg7CiAKICAgICByZXNl
dChzdGFydGluZ1gpOwogICAgIG1fc3RhcnRpbmdZID0gc3RhcnRpbmdZOwogCi0gICAgc2V0V29y
ZFNwYWNpbmdBZGp1c3RtZW50KHdvcmRTcGFjaW5nKTsKLSAgICBzZXRMZXR0ZXJTcGFjaW5nQWRq
dXN0bWVudChsZXR0ZXJTcGFjaW5nKTsKLSAgICBzZXRQYWRkaW5nKHBhZGRpbmcpOworICAgIHNl
dFBhZGRpbmcobV9ydW4uZXhwYW5zaW9uKCkpOwogfQogCiBDb21wbGV4VGV4dENvbnRyb2xsZXI6
On5Db21wbGV4VGV4dENvbnRyb2xsZXIoKQpAQCAtOTAsNTkgKzg4LDYgQEAgQ29tcGxleFRleHRD
b250cm9sbGVyOjp+Q29tcGxleFRleHRDb250cm9sbGVyKCkKICAgICBkZWxldGVbXSBtX2l0ZW0u
bG9nX2NsdXN0ZXJzOwogfQogCi1ib29sIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6aXNXb3JkQnJl
YWsodW5zaWduZWQgaW5kZXgpCi17Ci0gICAgcmV0dXJuIGluZGV4ICYmIGlzQ29kZXBvaW50U3Bh
Y2UobV9pdGVtLnN0cmluZ1tpbmRleF0pICYmICFpc0NvZGVwb2ludFNwYWNlKG1faXRlbS5zdHJp
bmdbaW5kZXggLSAxXSk7Ci19Ci0KLWludCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmRldGVybWlu
ZVdvcmRCcmVha1NwYWNpbmcodW5zaWduZWQgbG9nQ2x1c3RlcnNJbmRleCkKLXsKLSAgICBpbnQg
d29yZEJyZWFrU3BhY2luZyA9IDA7Ci0gICAgLy8gVGhlIGZpcnN0IGhhbGYgb2YgdGhlIGNvbmp1
bmN0aW9uIHdvcmtzIGFyb3VuZCB0aGUgY2FzZSB3aGVyZQotICAgIC8vIG91dHB1dCBnbHlwaHMg
YXJlbid0IGFzc29jaWF0ZWQgd2l0aCBhbnkgY29kZXBvaW50cyBieSB0aGUKLSAgICAvLyBjbHVz
dGVycyBsb2cuCi0gICAgaWYgKGxvZ0NsdXN0ZXJzSW5kZXggPCBtX2l0ZW0uaXRlbS5sZW5ndGgK
LSAgICAgICAgJiYgaXNXb3JkQnJlYWsobV9pdGVtLml0ZW0ucG9zICsgbG9nQ2x1c3RlcnNJbmRl
eCkpIHsKLSAgICAgICAgd29yZEJyZWFrU3BhY2luZyA9IG1fd29yZFNwYWNpbmdBZGp1c3RtZW50
OwotCi0gICAgICAgIGlmIChtX3BhZGRpbmcgPiAwKSB7Ci0gICAgICAgICAgICBpbnQgdG9QYWQg
PSByb3VuZGYobV9wYWRQZXJXb3JkQnJlYWsgKyBtX3BhZEVycm9yKTsKLSAgICAgICAgICAgIG1f
cGFkRXJyb3IgKz0gbV9wYWRQZXJXb3JkQnJlYWsgLSB0b1BhZDsKLQotICAgICAgICAgICAgaWYg
KG1fcGFkZGluZyA8IHRvUGFkKQotICAgICAgICAgICAgICAgIHRvUGFkID0gbV9wYWRkaW5nOwot
ICAgICAgICAgICAgbV9wYWRkaW5nIC09IHRvUGFkOwotICAgICAgICAgICAgd29yZEJyZWFrU3Bh
Y2luZyArPSB0b1BhZDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gd29yZEJyZWFrU3Bh
Y2luZzsKLX0KLQotLy8gc2V0UGFkZGluZyBzZXRzIGEgbnVtYmVyIG9mIHBpeGVscyB0byBiZSBk
aXN0cmlidXRlZCBhY3Jvc3MgdGhlIFRleHRSdW4uCi0vLyBXZWJLaXQgdXNlcyB0aGlzIHRvIGp1
c3RpZnkgdGV4dC4KLXZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpzZXRQYWRkaW5nKGludCBw
YWRkaW5nKQotewotICAgIG1fcGFkZGluZyA9IHBhZGRpbmc7Ci0gICAgbV9wYWRFcnJvciA9IDA7
Ci0gICAgaWYgKCFtX3BhZGRpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHdlIGhh
dmUgcGFkZGluZyB0byBkaXN0cmlidXRlLCB0aGVuIHdlIHRyeSB0byBnaXZlIGFuIGVxdWFsCi0g
ICAgLy8gYW1vdW50IHRvIGVhY2ggc3BhY2UuIFRoZSBsYXN0IHNwYWNlIGdldHMgdGhlIHNtYWxs
ZXIgYW1vdW50LCBpZgotICAgIC8vIGFueS4KLSAgICB1bnNpZ25lZCBudW1Xb3JkQnJlYWtzID0g
MDsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2l0ZW0uc3RyaW5nTGVuZ3RoOyBp
KyspIHsKLSAgICAgICAgaWYgKGlzV29yZEJyZWFrKGkpKQotICAgICAgICAgICAgbnVtV29yZEJy
ZWFrcysrOwotICAgIH0KLQotICAgIGlmIChudW1Xb3JkQnJlYWtzKQotICAgICAgICBtX3BhZFBl
cldvcmRCcmVhayA9IG1fcGFkZGluZyAvIG51bVdvcmRCcmVha3M7Ci0gICAgZWxzZQotICAgICAg
ICBtX3BhZFBlcldvcmRCcmVhayA9IDA7Ci19Ci0KIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVy
OjpyZXNldChpbnQgb2Zmc2V0KQogewogICAgIG1faW5kZXhPZk5leHRTY3JpcHRSdW4gPSAwOwpA
QCAtMTY2LDkgKzExMSw5IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpzZXR1cEZvclJU
TCgpCiBib29sIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6bmV4dFNjcmlwdFJ1bigpCiB7CiAgICAg
Ly8gRW5zdXJlIHdlJ3JlIG5vdCBwb2ludGluZyBhdCB0aGUgc21hbGwgY2FwcyBidWZmZXIuCi0g
ICAgbV9pdGVtLnN0cmluZyA9IG1fcnVuLmNoYXJhY3RlcnMoKTsKKyAgICBtX2l0ZW0uc3RyaW5n
ID0gbV9ub3JtYWxpemVkQnVmZmVyLmdldCgpOwogCi0gICAgaWYgKCFoYl91dGYxNl9zY3JpcHRf
cnVuX25leHQoMCwgJm1faXRlbS5pdGVtLCBtX3J1bi5jaGFyYWN0ZXJzKCksIG1fcnVuLmxlbmd0
aCgpLCAmbV9pbmRleE9mTmV4dFNjcmlwdFJ1bikpCisgICAgaWYgKCFoYl91dGYxNl9zY3JpcHRf
cnVuX25leHQoMCwgJm1faXRlbS5pdGVtLCBtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCksIG1fbm9y
bWFsaXplZEJ1ZmZlckxlbmd0aCwgJm1faW5kZXhPZk5leHRTY3JpcHRSdW4pKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAvLyBJdCBpcyBhY3R1YWxseSB3cm9uZyB0byBjb25zaWRlciBz
Y3JpcHQgcnVucyBhdCBhbGwgaW4gdGhpcyBjb2RlLgpAQCAtMjU0LDcgKzE5OSw3IEBAIHZvaWQg
Q29tcGxleFRleHRDb250cm9sbGVyOjpzZXR1cEZvbnRGb3JTY3JpcHRSdW4oKQogICAgIC8vIGNh
c2UgY2hhbmdlIHdoaWxlIGluIHNtYWxsLWNhcHMgbW9kZSBhbHdheXMgcmVzdWx0cyBpbiBkaWZm
ZXJlbnQKICAgICAvLyBGb250RGF0YSwgc28gd2Ugb25seSBuZWVkIHRvIGNoZWNrIHRoZSBmaXJz
dCBjaGFyYWN0ZXIncyBjYXNlLgogICAgIGlmIChtX2ZvbnQtPmlzU21hbGxDYXBzKCkgJiYgdV9p
c2xvd2VyKG1faXRlbS5zdHJpbmdbbV9pdGVtLml0ZW0ucG9zXSkpIHsKLSAgICAgICAgbV9zbWFs
bENhcHNTdHJpbmcgPSBTdHJpbmcobV9ydW4uZGF0YShtX2l0ZW0uaXRlbS5wb3MpLCBtX2l0ZW0u
aXRlbS5sZW5ndGgpOworICAgICAgICBtX3NtYWxsQ2Fwc1N0cmluZyA9IFN0cmluZyhtX25vcm1h
bGl6ZWRCdWZmZXIuZ2V0KCkgKyBtX2l0ZW0uaXRlbS5wb3MsIG1faXRlbS5pdGVtLmxlbmd0aCk7
CiAgICAgICAgIG1fc21hbGxDYXBzU3RyaW5nLm1ha2VVcHBlcigpOwogICAgICAgICBtX2l0ZW0u
c3RyaW5nID0gbV9zbWFsbENhcHNTdHJpbmcuY2hhcmFjdGVycygpOwogICAgICAgICBtX2l0ZW0u
aXRlbS5wb3MgPSAwOwpAQCAtMzQ2LDE2ICsyOTEsMTcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRy
b2xsZXI6OnNldEdseXBoUG9zaXRpb25zKGJvb2wgaXNSVEwpCiAKICAgICAvLyBsb2dDbHVzdGVy
c0luZGV4IGluZGV4ZXMgbG9nQ2x1c3RlcnMgZm9yIHRoZSBmaXJzdCBjb2RlcG9pbnQgb2YgdGhl
IGN1cnJlbnQgZ2x5cGguCiAgICAgLy8gRWFjaCB0aW1lIHdlIGFkdmFuY2UgYSBnbHlwaCwgd2Ug
c2tpcCBvdmVyIGFsbCB0aGUgY29kZXBvaW50cyB0aGF0IGNvbnRyaWJ1dGVkIHRvIHRoZSBjdXJy
ZW50IGdseXBoLgotICAgIGludCBsb2dDbHVzdGVyc0luZGV4ID0gMDsKKyAgICBzaXplX3QgbG9n
Q2x1c3RlcnNJbmRleCA9IDA7CiAKICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGdseXBocyBp
biBsb2dpY2FsIG9yZGVyLCBmbGlwcGluZyBmb3IgUlRMIHdoZXJlIG5lY2Vzc2FyeS4KICAgICAv
LyBHbHlwaHMgYXJlIHBvc2l0aW9uZWQgc3RhcnRpbmcgZnJvbSBtX29mZnNldFg7IGluIFJUTCBt
b2RlIHRoZXkgZ28gbGVmdHdhcmRzIGZyb20gdGhlcmUuCiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2l0ZW0ubnVtX2dseXBoczsgKytpKSB7Ci0gICAgICAgIHdoaWxlIChzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obG9nQ2x1c3RlcnNJbmRleCkgPCBtX2l0ZW0uaXRlbS5sZW5ndGggJiYgbV9p
dGVtLmxvZ19jbHVzdGVyc1tsb2dDbHVzdGVyc0luZGV4XSA8IGkpCisgICAgICAgIHdoaWxlIChs
b2dDbHVzdGVyc0luZGV4IDwgbV9pdGVtLml0ZW0ubGVuZ3RoICYmIG1faXRlbS5sb2dfY2x1c3Rl
cnNbbG9nQ2x1c3RlcnNJbmRleF0gPCBpKQogICAgICAgICAgICAgbG9nQ2x1c3RlcnNJbmRleCsr
OwogCiAgICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGdseXBoIGlzIGp1c3QgYWZ0ZXIgYSBzcGFj
ZSwgYWRkIGluIHRoZSB3b3JkIHNwYWNpbmcuCi0gICAgICAgIHBvc2l0aW9uICs9IGRldGVybWlu
ZVdvcmRCcmVha1NwYWNpbmcobG9nQ2x1c3RlcnNJbmRleCk7CisgICAgICAgIGlmIChsb2dDbHVz
dGVyc0luZGV4IDwgbV9pdGVtLml0ZW0ubGVuZ3RoICYmIGlzV29yZEVuZChtX2l0ZW0uaXRlbS5w
b3MgKyBsb2dDbHVzdGVyc0luZGV4KSkKKyAgICAgICAgICAgIHBvc2l0aW9uICs9IGRldGVybWlu
ZVdvcmRCcmVha1NwYWNpbmcoKTsKIAogICAgICAgICBtX2dseXBoczE2W2ldID0gbV9pdGVtLmds
eXBoc1tpXTsKICAgICAgICAgZG91YmxlIG9mZnNldFggPSB0cnVuY2F0ZUZpeGVkUG9pbnRUb0lu
dGVnZXIobV9pdGVtLm9mZnNldHNbaV0ueCk7CkBAIC0zODAsNzkgKzMyNiw2IEBAIHZvaWQgQ29t
cGxleFRleHRDb250cm9sbGVyOjpzZXRHbHlwaFBvc2l0aW9ucyhib29sIGlzUlRMKQogICAgIG1f
b2Zmc2V0WCArPSBtX3BpeGVsV2lkdGggKiBydGxGbGlwOwogfQogCi12b2lkIENvbXBsZXhUZXh0
Q29udHJvbGxlcjo6bm9ybWFsaXplU3BhY2VzQW5kTWlycm9yQ2hhcnMoY29uc3QgVUNoYXIqIHNv
dXJjZSwgYm9vbCBydGwsIFVDaGFyKiBkZXN0aW5hdGlvbiwgaW50IGxlbmd0aCkKLXsKLSAgICBp
bnQgcG9zaXRpb24gPSAwOwotICAgIGJvb2wgZXJyb3IgPSBmYWxzZTsKLSAgICAvLyBJdGVyYXRl
IGNoYXJhY3RlcnMgaW4gc291cmNlIGFuZCBtaXJyb3IgY2hhcmFjdGVyIGlmIG5lZWRlZC4KLSAg
ICB3aGlsZSAocG9zaXRpb24gPCBsZW5ndGgpIHsKLSAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXI7
Ci0gICAgICAgIGludCBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICAgICAgVTE2X05FWFQo
c291cmNlLCBuZXh0UG9zaXRpb24sIGxlbmd0aCwgY2hhcmFjdGVyKTsKLSAgICAgICAgaWYgKEZv
bnQ6OnRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKQotICAgICAgICAgICAgY2hhcmFjdGVyID0gJyAn
OwotICAgICAgICBlbHNlIGlmIChGb250Ojp0cmVhdEFzWmVyb1dpZHRoU3BhY2UoY2hhcmFjdGVy
KSkKLSAgICAgICAgICAgIGNoYXJhY3RlciA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICBlbHNl
IGlmIChydGwpCi0gICAgICAgICAgICBjaGFyYWN0ZXIgPSB1X2NoYXJNaXJyb3IoY2hhcmFjdGVy
KTsKLSAgICAgICAgVTE2X0FQUEVORChkZXN0aW5hdGlvbiwgcG9zaXRpb24sIGxlbmd0aCwgY2hh
cmFjdGVyLCBlcnJvcik7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoZXJyb3IsICFlcnJvcik7Ci0g
ICAgICAgIHBvc2l0aW9uID0gbmV4dFBvc2l0aW9uOwotICAgIH0KLX0KLQotY29uc3QgVGV4dFJ1
biYgQ29tcGxleFRleHRDb250cm9sbGVyOjpnZXROb3JtYWxpemVkVGV4dFJ1bihjb25zdCBUZXh0
UnVuJiBvcmlnaW5hbFJ1biwgT3duUHRyPFRleHRSdW4+JiBub3JtYWxpemVkUnVuLCBPd25BcnJh
eVB0cjxVQ2hhcj4mIG5vcm1hbGl6ZWRCdWZmZXIpCi17Ci0gICAgLy8gTm9ybWFsaXplIHRoZSB0
ZXh0IHJ1biBpbiB0aHJlZSB3YXlzOgotICAgIC8vIDEpIENvbnZlcnQgdGhlIHxvcmlnaW5hbFJ1
bnwgdG8gTkZDIG5vcm1hbGl6ZWQgZm9ybSBpZiBjb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3MK
LSAgICAvLyAoVSswMzAwLi4pIGFyZSB1c2VkIGluIHRoZSBydW4uIFRoaXMgY29udmVyc2lvbiBp
cyBuZWNlc3Nhcnkgc2luY2UgbW9zdCBPcGVuVHlwZQotICAgIC8vIGZvbnRzIChlLmcuLCBBcmlh
bCkgZG9uJ3QgaGF2ZSBzdWJzdGl0dXRpb24gcnVsZXMgZm9yIHRoZSBkaWFjcml0aWNhbCBtYXJr
cyBpbgotICAgIC8vIHRoZWlyIEdTVUIgdGFibGVzLgotICAgIC8vCi0gICAgLy8gTm90ZSB0aGF0
IHdlIGRvbid0IHVzZSB0aGUgaWN1OjpOb3JtYWxpemVyOjppc05vcm1hbGl6ZWQoVU5PUk1fTkZD
KSBBUEkgaGVyZSBzaW5jZQotICAgIC8vIHRoZSBBUEkgcmV0dXJucyBGQUxTRSAoPSBub3Qgbm9y
bWFsaXplZCkgZm9yIGNvbXBsZXggcnVucyB0aGF0IGRvbid0IHJlcXVpcmUgTkZDCi0gICAgLy8g
bm9ybWFsaXphdGlvbiAoZS5nLiwgQXJhYmljIHRleHQpLiBVbmxlc3MgdGhlIHJ1biBjb250YWlu
cyB0aGUgZGlhY3JpdGljYWwgbWFya3MsCi0gICAgLy8gSGFyZmJ1enogd2lsbCBkbyB0aGUgc2Ft
ZSB0aGluZyBmb3IgdXMgdXNpbmcgdGhlIEdTVUIgdGFibGUuCi0gICAgLy8gMikgQ29udmVydCBz
cGFjaW5nIGNoYXJhY3RlcnMgaW50byBwbGFpbiBzcGFjZXMsIGFzIHNvbWUgZm9udHMgd2lsbCBw
cm92aWRlIGdseXBocwotICAgIC8vIGZvciBjaGFyYWN0ZXJzIGxpa2UgJ1xuJyBvdGhlcndpc2Uu
Ci0gICAgLy8gMykgQ29udmVydCBtaXJyb3JlZCBjaGFyYWN0ZXJzIHN1Y2ggYXMgcGFyZW50aGVz
aXMgZm9yIHJ0bCB0ZXh0LgotCi0gICAgLy8gQ29udmVydCB0byBORkMgZm9ybSBpZiB0aGUgdGV4
dCBoYXMgZGlhY3JpdGljYWwgbWFya3MuCi0gICAgaWN1OjpVbmljb2RlU3RyaW5nIG5vcm1hbGl6
ZWRTdHJpbmc7Ci0gICAgVUVycm9yQ29kZSBlcnJvciA9IFVfWkVST19FUlJPUjsKLQotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgb3JpZ2luYWxSdW4ubGVuZ3RoKCk7ICsraSkgewotICAgICAgICBV
Q2hhciBjaCA9IG9yaWdpbmFsUnVuW2ldOwotICAgICAgICBpZiAoOjp1YmxvY2tfZ2V0Q29kZShj
aCkgPT0gVUJMT0NLX0NPTUJJTklOR19ESUFDUklUSUNBTF9NQVJLUykgewotICAgICAgICAgICAg
aWN1OjpOb3JtYWxpemVyOjpub3JtYWxpemUoaWN1OjpVbmljb2RlU3RyaW5nKG9yaWdpbmFsUnVu
LmNoYXJhY3RlcnMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9y
aWdpbmFsUnVuLmxlbmd0aCgpKSwgVU5PUk1fTkZDLCAwIC8qIG5vIG9wdGlvbnMgKi8sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkU3RyaW5nLCBlcnJv
cik7Ci0gICAgICAgICAgICBpZiAoVV9GQUlMVVJFKGVycm9yKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gb3JpZ2luYWxSdW47Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vIE5vcm1hbGl6ZSBzcGFjZSBhbmQgbWlycm9yIHBhcmVudGhlc2lzIGZvciBydGwg
dGV4dC4KLSAgICBpbnQgbm9ybWFsaXplZEJ1ZmZlckxlbmd0aDsKLSAgICBjb25zdCBVQ2hhciog
c291cmNlVGV4dDsKLSAgICBpZiAobm9ybWFsaXplZFN0cmluZy5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgbm9ybWFsaXplZEJ1ZmZlckxlbmd0aCA9IG9yaWdpbmFsUnVuLmxlbmd0aCgpOwotICAgICAg
ICBzb3VyY2VUZXh0ID0gb3JpZ2luYWxSdW4uY2hhcmFjdGVycygpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIG5vcm1hbGl6ZWRCdWZmZXJMZW5ndGggPSBub3JtYWxpemVkU3RyaW5nLmxlbmd0aCgp
OwotICAgICAgICBzb3VyY2VUZXh0ID0gbm9ybWFsaXplZFN0cmluZy5nZXRCdWZmZXIoKTsKLSAg
ICB9Ci0KLSAgICBub3JtYWxpemVkQnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcgVUNoYXJbbm9y
bWFsaXplZEJ1ZmZlckxlbmd0aCArIDFdKTsKLQotICAgIG5vcm1hbGl6ZVNwYWNlc0FuZE1pcnJv
ckNoYXJzKHNvdXJjZVRleHQsIG9yaWdpbmFsUnVuLnJ0bCgpLCBub3JtYWxpemVkQnVmZmVyLmdl
dCgpLCBub3JtYWxpemVkQnVmZmVyTGVuZ3RoKTsKLQotICAgIG5vcm1hbGl6ZWRSdW4gPSBhZG9w
dFB0cihuZXcgVGV4dFJ1bihvcmlnaW5hbFJ1bikpOwotICAgIG5vcm1hbGl6ZWRSdW4tPnNldFRl
eHQobm9ybWFsaXplZEJ1ZmZlci5nZXQoKSwgbm9ybWFsaXplZEJ1ZmZlckxlbmd0aCk7Ci0gICAg
cmV0dXJuICpub3JtYWxpemVkUnVuOwotfQotCiBpbnQgQ29tcGxleFRleHRDb250cm9sbGVyOjpn
bHlwaEluZGV4Rm9yWFBvc2l0aW9uSW5TY3JpcHRSdW4oaW50IHRhcmdldFgpIGNvbnN0CiB7CiAg
ICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBnbHlwaHMgaW4gbG9naWNhbCBvcmRlciwgc2VlaW5n
IHdoZXRoZXIgdGFyZ2V0WCBmYWxscyBiZXR3ZWVuIHRoZSBwcmV2aW91cwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovQ29tcGxleFRleHRDb250
cm9sbGVySGFyZkJ1enouaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0NvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6LmgKaW5kZXggZmZmMzZlYmFkYjExMTI1
NWZmNDA0OWFlYzZlM2IxZGE4OTQ3Y2ZkYS4uNjI4OGQ0MDhhMDIwODNjNTM4YzVkZTcxMmE2YjFj
NTBjY2I0ODJlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enouaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Db21wbGV4VGV4dENvbnRyb2xsZXJIYXJm
QnV6ei5oCkBAIC0zMSw2ICszMSw3IEBACiAjaWZuZGVmIENvbXBsZXhUZXh0Q29udHJvbGxlckhh
cmZCdXp6X2gKICNkZWZpbmUgQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enpfaAogCisjaW5j
bHVkZSAiSGFyZkJ1enpTaGFwZXJCYXNlLmgiCiAjaW5jbHVkZSAiSGFyZkJ1enpTa2lhLmgiCiAj
aW5jbHVkZSAiU2tQb2ludC5oIgogI2luY2x1ZGUgIlNrU2NhbGFyLmgiCkBAIC02MywzMiArNjQs
MTcgQEAgY2xhc3MgU2ltcGxlRm9udERhdGE7CiAvLyBPbmNlIHlvdSBoYXZlIHNldHVwIHRoZSBv
YmplY3QsIGNhbGwgfG5leHRTY3JpcHRSdW58IHRvIGdldCB0aGUgZmlyc3Qgc2NyaXB0CiAvLyBy
dW4uIFRoaXMgd2lsbCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaXRlcmF0aW9uIGlzIGNvbXBsZXRl
LiBBdCBhbnkgdGltZSB5b3UKIC8vIGNhbiBjYWxsIHxyZXNldHwgdG8gc3RhcnQgb3ZlciBhZ2Fp
bi4KLWNsYXNzIENvbXBsZXhUZXh0Q29udHJvbGxlciB7CitjbGFzcyBDb21wbGV4VGV4dENvbnRy
b2xsZXIgOiBwdWJsaWMgSGFyZkJ1enpTaGFwZXJCYXNlIHsKIHB1YmxpYzoKLSAgICBDb21wbGV4
VGV4dENvbnRyb2xsZXIoY29uc3QgVGV4dFJ1biYsIGludCBzdGFydGluZ1gsIGludCBzdGFydGlu
Z1ksIHVuc2lnbmVkIHdvcmRTcGFjaW5nLCB1bnNpZ25lZCBsZXR0ZXJTcGFjaW5nLCB1bnNpZ25l
ZCBwYWRkaW5nLCBjb25zdCBGb250Kik7Ci0gICAgfkNvbXBsZXhUZXh0Q29udHJvbGxlcigpOwot
Ci0gICAgYm9vbCBpc1dvcmRCcmVhayh1bnNpZ25lZCk7Ci0gICAgaW50IGRldGVybWluZVdvcmRC
cmVha1NwYWNpbmcodW5zaWduZWQpOwotICAgIC8vIHNldFBhZGRpbmcgc2V0cyBhIG51bWJlciBv
ZiBwaXhlbHMgdG8gYmUgZGlzdHJpYnV0ZWQgYWNyb3NzIHRoZSBUZXh0UnVuLgotICAgIC8vIFdl
YktpdCB1c2VzIHRoaXMgdG8ganVzdGlmeSB0ZXh0LgotICAgIHZvaWQgc2V0UGFkZGluZyhpbnQp
OworICAgIENvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBGb250KiwgY29uc3QgVGV4dFJ1biYs
IGludCBzdGFydGluZ1gsIGludCBzdGFydGluZ1kpOworICAgIHZpcnR1YWwgfkNvbXBsZXhUZXh0
Q29udHJvbGxlcigpOworCiAgICAgdm9pZCByZXNldChpbnQgb2Zmc2V0KTsKICAgICAvLyBBZHZh
bmNlIHRvIHRoZSBuZXh0IHNjcmlwdCBydW4sIHJldHVybmluZyBmYWxzZSB3aGVuIHRoZSBlbmQg
b2YgdGhlCiAgICAgLy8gVGV4dFJ1biBoYXMgYmVlbiByZWFjaGVkLgogICAgIGJvb2wgbmV4dFNj
cmlwdFJ1bigpOwogICAgIGZsb2F0IHdpZHRoT2ZGdWxsUnVuKCk7CiAKLSAgICAvLyBzZXRXb3Jk
U3BhY2luZ0FkanVzdG1lbnQgc2V0cyBhIGRlbHRhIChpbiBwaXhlbHMpIHdoaWNoIGlzIGFwcGxp
ZWQgYXQKLSAgICAvLyBlYWNoIHdvcmQgYnJlYWsgaW4gdGhlIFRleHRSdW4uCi0gICAgdm9pZCBz
ZXRXb3JkU3BhY2luZ0FkanVzdG1lbnQoaW50IHdvcmRTcGFjaW5nQWRqdXN0bWVudCkgeyBtX3dv
cmRTcGFjaW5nQWRqdXN0bWVudCA9IHdvcmRTcGFjaW5nQWRqdXN0bWVudDsgfQotCi0gICAgLy8g
c2V0TGV0dGVyU3BhY2luZ0FkanVzdG1lbnQgc2V0cyBhbiBhZGRpdGlvbmFsIG51bWJlciBvZiBw
aXhlbHMgdGhhdCBpcwotICAgIC8vIGFkZGVkIHRvIHRoZSBhZHZhbmNlIGFmdGVyIGVhY2ggb3V0
cHV0IGNsdXN0ZXIuIFRoaXMgbWF0Y2hlcyB0aGUgYmVoYXZpb3VyCi0gICAgLy8gb2YgV2lkdGhJ
dGVyYXRvcjo6YWR2YW5jZS4KLSAgICB2b2lkIHNldExldHRlclNwYWNpbmdBZGp1c3RtZW50KGlu
dCBsZXR0ZXJTcGFjaW5nQWRqdXN0bWVudCkgeyBtX2xldHRlclNwYWNpbmcgPSBsZXR0ZXJTcGFj
aW5nQWRqdXN0bWVudDsgfQotICAgIGludCBsZXR0ZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4g
bV9sZXR0ZXJTcGFjaW5nOyB9Ci0KICAgICB2b2lkIHNldHVwRm9yUlRMKCk7CiAgICAgYm9vbCBy
dGwoKSBjb25zdCB7IHJldHVybiBtX3J1bi5ydGwoKTsgfQogICAgIGNvbnN0IHVpbnQxNl90KiBn
bHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2dseXBoczE2OyB9CkBAIC0xMjYsMTUgKzExMiw4IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBzaGFwZUdseXBocygpOwogICAgIHZvaWQgc2V0R2x5cGhQb3Np
dGlvbnMoYm9vbCk7CiAKLSAgICBzdGF0aWMgdm9pZCBub3JtYWxpemVTcGFjZXNBbmRNaXJyb3JD
aGFycyhjb25zdCBVQ2hhciogc291cmNlLCBib29sIHJ0bCwgVUNoYXIqIGRlc3RpbmF0aW9uLCBp
bnQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgY29uc3QgVGV4dFJ1biYgZ2V0Tm9ybWFsaXplZFRleHRS
dW4oY29uc3QgVGV4dFJ1biYgb3JpZ2luYWxSdW4sIE93blB0cjxUZXh0UnVuPiYgbm9ybWFsaXpl
ZFJ1biwgT3duQXJyYXlQdHI8VUNoYXI+JiBub3JtYWxpemVkQnVmZmVyKTsKLQotICAgIC8vIFRo
aXMgbWF0Y2hlcyB0aGUgbG9naWMgaW4gUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyZWFrCi0g
ICAgc3RhdGljIGJvb2wgaXNDb2RlcG9pbnRTcGFjZShIQl9VQ2hhcjE2IGMpIHsgcmV0dXJuIGMg
PT0gJyAnIHx8IGMgPT0gJ1x0JzsgfQotCiAgICAgaW50IGdseXBoSW5kZXhGb3JYUG9zaXRpb25J
blNjcmlwdFJ1bihpbnQgdGFyZ2V0WCkgY29uc3Q7CiAKLSAgICBjb25zdCBGb250KiBjb25zdCBt
X2ZvbnQ7CiAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fY3VycmVudEZvbnREYXRhOwogICAg
IEhCX1NoYXBlckl0ZW0gbV9pdGVtOwogICAgIHVpbnQxNl90KiBtX2dseXBoczE2OyAvLyBBIHZl
Y3RvciBvZiAxNi1iaXQgZ2x5cGggaWRzLgpAQCAtMTQ1LDE3ICsxMjQsNiBAQCBwcml2YXRlOgog
ICAgIHVuc2lnbmVkIG1fcGl4ZWxXaWR0aDsgLy8gV2lkdGggKGluIHB4KSBvZiB0aGUgY3VycmVu
dCBzY3JpcHQgcnVuLgogICAgIHVuc2lnbmVkIG1fZ2x5cGhzQXJyYXlDYXBhY2l0eTsgLy8gQ3Vy
cmVudCBzaXplIG9mIGFsbCB0aGUgSGFyZmJ1enogYXJyYXlzLgogCi0gICAgT3duUHRyPFRleHRS
dW4+IG1fbm9ybWFsaXplZFJ1bjsKLSAgICBPd25BcnJheVB0cjxVQ2hhcj4gbV9ub3JtYWxpemVk
QnVmZmVyOyAvLyBBIGJ1ZmZlciBmb3Igbm9ybWFsaXplZCBydW4uCi0gICAgY29uc3QgVGV4dFJ1
biYgbV9ydW47Ci0gICAgaW50IG1fd29yZFNwYWNpbmdBZGp1c3RtZW50OyAvLyBkZWx0YSBhZGp1
c3RtZW50IChwaXhlbHMpIGZvciBlYWNoIHdvcmQgYnJlYWsuCi0gICAgZmxvYXQgbV9wYWRkaW5n
OyAvLyBwaXhlbHMgdG8gYmUgZGlzdHJpYnV0ZWQgb3ZlciB0aGUgbGluZSBhdCB3b3JkIGJyZWFr
cy4KLSAgICBmbG9hdCBtX3BhZFBlcldvcmRCcmVhazsgLy8gcGl4ZWxzIHRvIGJlIGFkZGVkIHRv
IGVhY2ggd29yZCBicmVhay4KLSAgICBmbG9hdCBtX3BhZEVycm9yOyAvLyB8bV9wYWRQZXJXb3Jk
QnJlYWt8IG1pZ2h0IGhhdmUgYSBmcmFjdGlvbmFsIGNvbXBvbmVudC4KLSAgICAgICAgICAgICAg
ICAgICAgICAvLyBTaW5jZSB3ZSBvbmx5IGFkZCBhIHdob2xlIG51bWJlciBvZiBwYWRkaW5nIHBp
eGVscyBhdAotICAgICAgICAgICAgICAgICAgICAgIC8vIGVhY2ggd29yZCBicmVhayB3ZSBhY2N1
bXVsYXRlIGVycm9yLiBUaGlzIGlzIHRoZQotICAgICAgICAgICAgICAgICAgICAgIC8vIG51bWJl
ciBvZiBwaXhlbHMgdGhhdCB3ZSBhcmUgYmVoaW5kIHNvIGZhci4KLSAgICBpbnQgbV9sZXR0ZXJT
cGFjaW5nOyAvLyBwaXhlbHMgdG8gYmUgYWRkZWQgYWZ0ZXIgZWFjaCBnbHlwaC4KICAgICBTdHJp
bmcgbV9zbWFsbENhcHNTdHJpbmc7IC8vIHN1YnN0cmluZyBvZiBtX3J1biBjb252ZXJ0ZWQgdG8g
c21hbGwgY2Fwcy4KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L0ZvbnRIYXJmQnV6ei5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9Gb250SGFyZkJ1enouY3BwCmluZGV4IGJhOGFhMmU3ZGQ0YmZl
ZGFjZTM4YjBlZGZmNTU3YTY3M2FhNGIwZjEuLjAzZjY4MzZjMWJhNWQzMWQ3ODk5YWFjYWJiNzkx
MzA5NDBjNGVlYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0ZvbnRIYXJmQnV6ei5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6LmNwcApAQCAtMTk1LDggKzE5NSw3IEBAIHZv
aWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IFRleHRS
dW4mIHJ1biwKICAgICAgICAgc2V0dXBGb3JUZXh0UGFpbnRpbmcoJnN0cm9rZVBhaW50LCBnYy0+
c3Ryb2tlQ29sb3IoKS5yZ2IoKSk7CiAgICAgfQogCi0gICAgQ29tcGxleFRleHRDb250cm9sbGVy
IGNvbnRyb2xsZXIocnVuLCBwb2ludC54KCksIHBvaW50LnkoKSwgd29yZFNwYWNpbmcoKSwgbGV0
dGVyU3BhY2luZygpLCBydW4uZXhwYW5zaW9uKCksIHRoaXMpOwotCisgICAgQ29tcGxleFRleHRD
b250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuLCBwb2ludC54KCksIHBvaW50LnkoKSk7CiAg
ICAgaWYgKHJ1bi5ydGwoKSkKICAgICAgICAgY29udHJvbGxlci5zZXR1cEZvclJUTCgpOwogCkBA
IC0yMjgsNyArMjI3LDcgQEAgdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhU
ZXh0KEdyYXBoaWNzQ29udGV4dCogLyogY29udGV4dCAqLywgY29uc3QKIAogZmxvYXQgRm9udDo6
ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25z
dCBTaW1wbGVGb250RGF0YSo+KiAvKiBmYWxsYmFja0ZvbnRzICovLCBHbHlwaE92ZXJmbG93KiAv
KiBnbHlwaE92ZXJmbG93ICovKSBjb25zdAogewotICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBj
b250cm9sbGVyKHJ1biwgMCwgMCwgd29yZFNwYWNpbmcoKSwgbGV0dGVyU3BhY2luZygpLCBydW4u
ZXhwYW5zaW9uKCksIHRoaXMpOworICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVy
KHRoaXMsIHJ1biwgMCwgMCk7CiAgICAgcmV0dXJuIGNvbnRyb2xsZXIud2lkdGhPZkZ1bGxSdW4o
KTsKIH0KIApAQCAtMjQyLDcgKzI0MSw3IEBAIGludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZv
ckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeEZsb2F0LAogCiAgICAgLy8g
KE1hYyBjb2RlIGlnbm9yZXMgaW5jbHVkZVBhcnRpYWxHbHlwaHMsIGFuZCB0aGV5IGRvbid0IGtu
b3cgd2hhdCBpdCdzCiAgICAgLy8gc3VwcG9zZWQgdG8gZG8sIHNvIHdlIGp1c3QgaWdub3JlIGl0
IGFzIHdlbGwuKQotICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHJ1biwgMCwg
MCwgd29yZFNwYWNpbmcoKSwgbGV0dGVyU3BhY2luZygpLCBydW4uZXhwYW5zaW9uKCksIHRoaXMp
OworICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1biwgMCwgMCk7
CiAgICAgaWYgKHJ1bi5ydGwoKSkKICAgICAgICAgY29udHJvbGxlci5zZXR1cEZvclJUTCgpOwog
ICAgIHJldHVybiBjb250cm9sbGVyLm9mZnNldEZvclBvc2l0aW9uKHRhcmdldFgpOwpAQCAtMjUz
LDcgKzI1Miw3IEBAIEZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYgcnVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGhlaWdodCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCB0bykgY29uc3QK
IHsKLSAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcihydW4sIDAsIDAsIHdvcmRT
cGFjaW5nKCksIGxldHRlclNwYWNpbmcoKSwgcnVuLmV4cGFuc2lvbigpLCB0aGlzKTsKKyAgICBD
b21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4sIDAsIDApOwogICAgIGlm
IChydW4ucnRsKCkpCiAgICAgICAgIGNvbnRyb2xsZXIuc2V0dXBGb3JSVEwoKTsKICAgICByZXR1
cm4gY29udHJvbGxlci5zZWxlY3Rpb25SZWN0KHBvaW50LCBoZWlnaHQsIGZyb20sIHRvKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZC
dXp6U2hhcGVyQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9IYXJmQnV6elNoYXBlckJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI5YzA2MTIzOGFkNWQ4ZWM2
OWNjZTU2MmU2NjhkNDhiOTViYTcwZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlckJhc2UuY3BwCkBAIC0w
LDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiSGFyZkJ1enpTaGFw
ZXJCYXNlLmgiCisKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSA8dW5pY29kZS9ub3JtbHpy
Lmg+CisjaW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0hhcmZCdXp6U2hhcGVyQmFzZTo6SGFyZkJ1enpTaGFwZXJCYXNlKGNvbnN0IEZvbnQq
IGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1bikKKyAgICA6IG1fZm9udChmb250KQorICAgICwgbV9y
dW4ocnVuKQorICAgICwgbV93b3JkU3BhY2luZ0FkanVzdG1lbnQoZm9udC0+d29yZFNwYWNpbmco
KSkKKyAgICAsIG1fbGV0dGVyU3BhY2luZyhmb250LT5sZXR0ZXJTcGFjaW5nKCkpCit7Cit9CisK
K3N0YXRpYyB2b2lkIG5vcm1hbGl6ZVNwYWNlc0FuZE1pcnJvckNoYXJzKGNvbnN0IFVDaGFyKiBz
b3VyY2UsIFVDaGFyKiBkZXN0aW5hdGlvbiwgaW50IGxlbmd0aCwgSGFyZkJ1enpTaGFwZXJCYXNl
OjpOb3JtYWxpemVNb2RlIG5vcm1hbGl6ZU1vZGUpCit7CisgICAgaW50IHBvc2l0aW9uID0gMDsK
KyAgICBib29sIGVycm9yID0gZmFsc2U7CisgICAgLy8gSXRlcmF0ZSBjaGFyYWN0ZXJzIGluIHNv
dXJjZSBhbmQgbWlycm9yIGNoYXJhY3RlciBpZiBuZWVkZWQuCisgICAgd2hpbGUgKHBvc2l0aW9u
IDwgbGVuZ3RoKSB7CisgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyOworICAgICAgICBpbnQgbmV4
dFBvc2l0aW9uID0gcG9zaXRpb247CisgICAgICAgIFUxNl9ORVhUKHNvdXJjZSwgbmV4dFBvc2l0
aW9uLCBsZW5ndGgsIGNoYXJhY3Rlcik7CisgICAgICAgIGlmIChGb250Ojp0cmVhdEFzU3BhY2Uo
Y2hhcmFjdGVyKSkKKyAgICAgICAgICAgIGNoYXJhY3RlciA9ICcgJzsKKyAgICAgICAgZWxzZSBp
ZiAoRm9udDo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoYXJhY3RlcikpCisgICAgICAgICAgICBj
aGFyYWN0ZXIgPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgZWxzZSBpZiAobm9ybWFsaXplTW9k
ZSA9PSBIYXJmQnV6elNoYXBlckJhc2U6Ok5vcm1hbGl6ZU1pcnJvckNoYXJzKQorICAgICAgICAg
ICAgY2hhcmFjdGVyID0gdV9jaGFyTWlycm9yKGNoYXJhY3Rlcik7CisgICAgICAgIFUxNl9BUFBF
TkQoZGVzdGluYXRpb24sIHBvc2l0aW9uLCBsZW5ndGgsIGNoYXJhY3RlciwgZXJyb3IpOworICAg
ICAgICBBU1NFUlQoIWVycm9yKTsKKyAgICAgICAgcG9zaXRpb24gPSBuZXh0UG9zaXRpb247Cisg
ICAgfQorfQorCit2b2lkIEhhcmZCdXp6U2hhcGVyQmFzZTo6c2V0Tm9ybWFsaXplZEJ1ZmZlcihO
b3JtYWxpemVNb2RlIG5vcm1hbGl6ZU1vZGUpCit7CisgICAgLy8gTm9ybWFsaXplIHRoZSB0ZXh0
IHJ1biBpbiB0aHJlZSB3YXlzOgorICAgIC8vIDEpIENvbnZlcnQgdGhlIHxvcmlnaW5hbFJ1bnwg
dG8gTkZDIG5vcm1hbGl6ZWQgZm9ybSBpZiBjb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3MKKyAg
ICAvLyAoVSswMzAwLi4pIGFyZSB1c2VkIGluIHRoZSBydW4uIFRoaXMgY29udmVyc2lvbiBpcyBu
ZWNlc3Nhcnkgc2luY2UgbW9zdCBPcGVuVHlwZQorICAgIC8vIGZvbnRzIChlLmcuLCBBcmlhbCkg
ZG9uJ3QgaGF2ZSBzdWJzdGl0dXRpb24gcnVsZXMgZm9yIHRoZSBkaWFjcml0aWNhbCBtYXJrcyBp
bgorICAgIC8vIHRoZWlyIEdTVUIgdGFibGVzLgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IHdl
IGRvbid0IHVzZSB0aGUgaWN1OjpOb3JtYWxpemVyOjppc05vcm1hbGl6ZWQoVU5PUk1fTkZDKSBB
UEkgaGVyZSBzaW5jZQorICAgIC8vIHRoZSBBUEkgcmV0dXJucyBGQUxTRSAoPSBub3Qgbm9ybWFs
aXplZCkgZm9yIGNvbXBsZXggcnVucyB0aGF0IGRvbid0IHJlcXVpcmUgTkZDCisgICAgLy8gbm9y
bWFsaXphdGlvbiAoZS5nLiwgQXJhYmljIHRleHQpLiBVbmxlc3MgdGhlIHJ1biBjb250YWlucyB0
aGUgZGlhY3JpdGljYWwgbWFya3MsCisgICAgLy8gSGFyZkJ1enogd2lsbCBkbyB0aGUgc2FtZSB0
aGluZyBmb3IgdXMgdXNpbmcgdGhlIEdTVUIgdGFibGUuCisgICAgLy8gMikgQ29udmVydCBzcGFj
aW5nIGNoYXJhY3RlcnMgaW50byBwbGFpbiBzcGFjZXMsIGFzIHNvbWUgZm9udHMgd2lsbCBwcm92
aWRlIGdseXBocworICAgIC8vIGZvciBjaGFyYWN0ZXJzIGxpa2UgJ1xuJyBvdGhlcndpc2UuCisg
ICAgLy8gMykgQ29udmVydCBtaXJyb3JlZCBjaGFyYWN0ZXJzIHN1Y2ggYXMgcGFyZW50aGVzaXMg
Zm9yIHJ0bCB0ZXh0LgorCisgICAgLy8gQ29udmVydCB0byBORkMgZm9ybSBpZiB0aGUgdGV4dCBo
YXMgZGlhY3JpdGljYWwgbWFya3MuCisgICAgaWN1OjpVbmljb2RlU3RyaW5nIG5vcm1hbGl6ZWRT
dHJpbmc7CisgICAgVUVycm9yQ29kZSBlcnJvciA9IFVfWkVST19FUlJPUjsKKworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbV9ydW4ubGVuZ3RoKCk7ICsraSkgeworICAgICAgICBVQ2hhciBjaCA9
IG1fcnVuW2ldOworICAgICAgICBpZiAoOjp1YmxvY2tfZ2V0Q29kZShjaCkgPT0gVUJMT0NLX0NP
TUJJTklOR19ESUFDUklUSUNBTF9NQVJLUykgeworICAgICAgICAgICAgaWN1OjpOb3JtYWxpemVy
Ojpub3JtYWxpemUoaWN1OjpVbmljb2RlU3RyaW5nKG1fcnVuLmNoYXJhY3RlcnMoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcnVuLmxlbmd0aCgpKSwgVU5PUk1f
TkZDLCAwIC8qIG5vIG9wdGlvbnMgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub3JtYWxpemVkU3RyaW5nLCBlcnJvcik7CisgICAgICAgICAgICBpZiAoVV9GQUlM
VVJFKGVycm9yKSkKKyAgICAgICAgICAgICAgICBub3JtYWxpemVkU3RyaW5nLnJlbW92ZSgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBVQ2hhciog
c291cmNlVGV4dDsKKyAgICBpZiAobm9ybWFsaXplZFN0cmluZy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoID0gbV9ydW4ubGVuZ3RoKCk7CisgICAgICAgIHNv
dXJjZVRleHQgPSBtX3J1bi5jaGFyYWN0ZXJzKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9u
b3JtYWxpemVkQnVmZmVyTGVuZ3RoID0gbm9ybWFsaXplZFN0cmluZy5sZW5ndGgoKTsKKyAgICAg
ICAgc291cmNlVGV4dCA9IG5vcm1hbGl6ZWRTdHJpbmcuZ2V0QnVmZmVyKCk7CisgICAgfQorCisg
ICAgbV9ub3JtYWxpemVkQnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcgVUNoYXJbbV9ub3JtYWxp
emVkQnVmZmVyTGVuZ3RoICsgMV0pOworICAgIG5vcm1hbGl6ZVNwYWNlc0FuZE1pcnJvckNoYXJz
KHNvdXJjZVRleHQsIG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSwgbV9ub3JtYWxpemVkQnVmZmVy
TGVuZ3RoLCBub3JtYWxpemVNb2RlKTsKK30KKworYm9vbCBIYXJmQnV6elNoYXBlckJhc2U6Omlz
V29yZEVuZCh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICAvLyBUaGlzIGNvdWxkIHJlZmVyIGEgaGln
aC1zdXJyb2dhdGUsIGJ1dCBzaG91bGQgd29yay4KKyAgICByZXR1cm4gaW5kZXggJiYgaXNDb2Rl
cG9pbnRTcGFjZShtX25vcm1hbGl6ZWRCdWZmZXJbaW5kZXhdKSAmJiAhaXNDb2RlcG9pbnRTcGFj
ZShtX25vcm1hbGl6ZWRCdWZmZXJbaW5kZXggLSAxXSk7Cit9CisKK2ludCBIYXJmQnV6elNoYXBl
ckJhc2U6OmRldGVybWluZVdvcmRCcmVha1NwYWNpbmcoKQoreworICAgIGludCB3b3JkQnJlYWtT
cGFjaW5nID0gbV93b3JkU3BhY2luZ0FkanVzdG1lbnQ7CisKKyAgICBpZiAobV9wYWRkaW5nID4g
MCkgeworICAgICAgICBpbnQgdG9QYWQgPSByb3VuZGYobV9wYWRQZXJXb3JkQnJlYWsgKyBtX3Bh
ZEVycm9yKTsKKyAgICAgICAgbV9wYWRFcnJvciArPSBtX3BhZFBlcldvcmRCcmVhayAtIHRvUGFk
OworCisgICAgICAgIGlmIChtX3BhZGRpbmcgPCB0b1BhZCkKKyAgICAgICAgICAgIHRvUGFkID0g
bV9wYWRkaW5nOworICAgICAgICBtX3BhZGRpbmcgLT0gdG9QYWQ7CisgICAgICAgIHdvcmRCcmVh
a1NwYWNpbmcgKz0gdG9QYWQ7CisgICAgfQorICAgIHJldHVybiB3b3JkQnJlYWtTcGFjaW5nOwor
fQorCisvLyBzZXRQYWRkaW5nIHNldHMgYSBudW1iZXIgb2YgcGl4ZWxzIHRvIGJlIGRpc3RyaWJ1
dGVkIGFjcm9zcyB0aGUgVGV4dFJ1bi4KKy8vIFdlYktpdCB1c2VzIHRoaXMgdG8ganVzdGlmeSB0
ZXh0Lgordm9pZCBIYXJmQnV6elNoYXBlckJhc2U6OnNldFBhZGRpbmcoaW50IHBhZGRpbmcpCit7
CisgICAgbV9wYWRkaW5nID0gcGFkZGluZzsKKyAgICBtX3BhZEVycm9yID0gMDsKKyAgICBpZiAo
IW1fcGFkZGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgd2UgaGF2ZSBwYWRkaW5n
IHRvIGRpc3RyaWJ1dGUsIHRoZW4gd2UgdHJ5IHRvIGdpdmUgYW4gZXF1YWwKKyAgICAvLyBhbW91
bnQgdG8gZWFjaCBzcGFjZS4gVGhlIGxhc3Qgc3BhY2UgZ2V0cyB0aGUgc21hbGxlciBhbW91bnQs
IGlmCisgICAgLy8gYW55LgorICAgIHVuc2lnbmVkIG51bVdvcmRFbmRzID0gMDsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGg7IGkrKykgewor
ICAgICAgICBpZiAoaXNXb3JkRW5kKGkpKQorICAgICAgICAgICAgbnVtV29yZEVuZHMrKzsKKyAg
ICB9CisKKyAgICBpZiAobnVtV29yZEVuZHMpCisgICAgICAgIG1fcGFkUGVyV29yZEJyZWFrID0g
bV9wYWRkaW5nIC8gbnVtV29yZEVuZHM7CisgICAgZWxzZQorICAgICAgICBtX3BhZFBlcldvcmRC
cmVhayA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyQmFzZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFw
ZXJCYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNjdiY2FkYmZmNDM5Y2Y4OWM4NGJiYWFlNzllZTczOThhMzdj
Y2M1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyQmFzZS5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEhh
cmZCdXp6U2hhcGVyQmFzZV9oCisjZGVmaW5lIEhhcmZCdXp6U2hhcGVyQmFzZV9oCisKKyNpbmNs
dWRlICJUZXh0UnVuLmgiCisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgRm9udDsKKworY2xhc3MgSGFyZkJ1enpTaGFwZXJCYXNlIHsK
K3B1YmxpYzoKKyAgICBlbnVtIE5vcm1hbGl6ZU1vZGUgeworICAgICAgICBEb05vdE5vcm1hbGl6
ZU1pcnJvckNoYXJzLAorICAgICAgICBOb3JtYWxpemVNaXJyb3JDaGFycworICAgIH07CisKKyAg
ICBIYXJmQnV6elNoYXBlckJhc2UoY29uc3QgRm9udCosIGNvbnN0IFRleHRSdW4mKTsKKyAgICB2
aXJ0dWFsIH5IYXJmQnV6elNoYXBlckJhc2UoKSB7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQg
c2V0Tm9ybWFsaXplZEJ1ZmZlcihOb3JtYWxpemVNb2RlID0gRG9Ob3ROb3JtYWxpemVNaXJyb3JD
aGFycyk7CisKKyAgICBib29sIGlzV29yZEVuZCh1bnNpZ25lZCk7CisgICAgaW50IGRldGVybWlu
ZVdvcmRCcmVha1NwYWNpbmcoKTsKKyAgICAvLyBzZXRQYWRkaW5nIHNldHMgYSBudW1iZXIgb2Yg
cGl4ZWxzIHRvIGJlIGRpc3RyaWJ1dGVkIGFjcm9zcyB0aGUgVGV4dFJ1bi4KKyAgICAvLyBXZWJL
aXQgdXNlcyB0aGlzIHRvIGp1c3RpZnkgdGV4dC4KKyAgICB2b2lkIHNldFBhZGRpbmcoaW50KTsK
KworICAgIC8vIFRoaXMgbWF0Y2hlcyB0aGUgbG9naWMgaW4gUmVuZGVyQmxvY2s6OmZpbmROZXh0
TGluZUJyZWFrCisgICAgc3RhdGljIGJvb2wgaXNDb2RlcG9pbnRTcGFjZShVQ2hhciBjKSB7IHJl
dHVybiBjID09ICcgJyB8fCBjID09ICdcdCc7IH0KKworICAgIGNvbnN0IEZvbnQqIG1fZm9udDsK
KyAgICBPd25BcnJheVB0cjxVQ2hhcj4gbV9ub3JtYWxpemVkQnVmZmVyOworICAgIHVuc2lnbmVk
IG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aDsKKyAgICBjb25zdCBUZXh0UnVuJiBtX3J1bjsKKwor
ICAgIGludCBtX3dvcmRTcGFjaW5nQWRqdXN0bWVudDsgLy8gZGVsdGEgYWRqdXN0bWVudCAocGl4
ZWxzKSBmb3IgZWFjaCB3b3JkIGJyZWFrLgorICAgIGZsb2F0IG1fcGFkZGluZzsgLy8gcGl4ZWxz
IHRvIGJlIGRpc3RyaWJ1dGVkIG92ZXIgdGhlIGxpbmUgYXQgd29yZCBicmVha3MuCisgICAgZmxv
YXQgbV9wYWRQZXJXb3JkQnJlYWs7IC8vIHBpeGVscyB0byBiZSBhZGRlZCB0byBlYWNoIHdvcmQg
YnJlYWsuCisgICAgZmxvYXQgbV9wYWRFcnJvcjsgLy8gfG1fcGFkUGVyV29yZEJyZWFrfCBtaWdo
dCBoYXZlIGEgZnJhY3Rpb25hbCBjb21wb25lbnQuCisgICAgICAgICAgICAgICAgICAgICAgLy8g
U2luY2Ugd2Ugb25seSBhZGQgYSB3aG9sZSBudW1iZXIgb2YgcGFkZGluZyBwaXhlbHMgYXQKKyAg
ICAgICAgICAgICAgICAgICAgICAvLyBlYWNoIHdvcmQgYnJlYWsgd2UgYWNjdW11bGF0ZSBlcnJv
ci4gVGhpcyBpcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAvLyBudW1iZXIgb2YgcGl4ZWxz
IHRoYXQgd2UgYXJlIGJlaGluZCBzbyBmYXIuCisgICAgaW50IG1fbGV0dGVyU3BhY2luZzsgLy8g
cGl4ZWxzIHRvIGJlIGFkZGVkIGFmdGVyIGVhY2ggZ2x5cGguCit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBIYXJmQnV6elNoYXBlckJhc2VfaAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>