<?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>74727</bug_id>
          
          <creation_ts>2011-12-16 10:12:53 -0800</creation_ts>
          <short_desc>[Qt] Mobile theme refinements</short_desc>
          <delta_ts>2011-12-21 05:48:57 -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>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pierre Rossi">pierre.rossi</reporter>
          <assigned_to name="Pierre Rossi">pierre.rossi</assigned_to>
          <cc>kenneth</cc>
    
    <cc>menard</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>522816</commentid>
    <comment_count>0</comment_count>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2011-12-16 10:12:53 -0800</bug_when>
    <thetext>[Qt] Mobile theme refinements</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522822</commentid>
    <comment_count>1</comment_count>
      <attachid>119629</attachid>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2011-12-16 10:18:42 -0800</bug_when>
    <thetext>Created attachment 119629
Patch

As Kenneth rightfully pointed out, we should probably try to use the squircle shape for most of the controls in the mobile theme.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522832</commentid>
    <comment_count>2</comment_count>
      <attachid>119629</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-12-16 10:32:59 -0800</bug_when>
    <thetext>Comment on attachment 119629
Patch

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

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:326
&gt; +                      + (focused ? QLatin1String(&quot;-focused&quot;) : QString());

Usually string manipulation in the painting routine is a bad idea. It was one of the bottleneck in QGraphicsView back then.

I recommend to try using the Key API of QPixmapCache (that is way faster). http://developer.qt.nokia.com/doc/qt-4.8/qpixmapcache.html

This benchmark shows the improvements and implement a complicated use case such as pixmaps caching for our styles (and it is way faster). I&apos;m sure we can use it here in a way.

http://qt.gitorious.org/qt/qt/blobs/4.7/tests/benchmarks/gui/image/qpixmapcache/tst_qpixmapcache.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522888</commentid>
    <comment_count>3</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-12-16 11:53:37 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 119629 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=119629&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:326
&gt; &gt; +                      + (focused ? QLatin1String(&quot;-focused&quot;) : QString());
&gt; 
&gt; Usually string manipulation in the painting routine is a bad idea. It was one of the bottleneck in QGraphicsView back then.
&gt; 
&gt; I recommend to try using the Key API of QPixmapCache (that is way faster). http://developer.qt.nokia.com/doc/qt-4.8/qpixmapcache.html
&gt; 
&gt; This benchmark shows the improvements and implement a complicated use case such as pixmaps caching for our styles (and it is way faster). I&apos;m sure we can use it here in a way.
&gt; 
&gt; http://qt.gitorious.org/qt/qt/blobs/4.7/tests/benchmarks/gui/image/qpixmapcache/tst_qpixmapcache.cpp

I agree, but that is a separate patch - this is the way it was done by Luiz way back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522891</commentid>
    <comment_count>4</comment_count>
      <attachid>119629</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-12-16 12:00:39 -0800</bug_when>
    <thetext>Comment on attachment 119629
Patch

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

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:99
&gt; +    // Translating the painter has a tendency to mess with gradients.

The comment is not clear. So you do thing differently here because of that, or something that should be fixed later? I think the comment could make that more clear

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:129
&gt; +        return 0;

Can&apos;t a 0 mess things up? or is that considered invalid?

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:271
&gt; +    QPolygon upArrow, downArrow;
&gt; +    upArrow &lt;&lt; QPoint(0, arrowHeight) &lt;&lt; QPoint(arrowHeight, 0) &lt;&lt; QPoint(right, arrowHeight);
&gt; +    downArrow &lt;&lt; QPoint(0, bottomBaseline) &lt;&lt; QPoint(arrowHeight, bottomBaseline + arrowHeight)
&gt; +              &lt;&lt; QPoint(right, bottomBaseline);

Is this more effective? I think you can mention such changes in the changelog

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:680
&gt; +        }
&gt; +
&gt; +    } else

unneeded newline

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.h:113
&gt; +    QPixmap findLineEdit(const QSize&amp;, bool focused) const;

Maybe we should keep the names closer to the html form counterparts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524590</commentid>
    <comment_count>5</comment_count>
      <attachid>120024</attachid>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2011-12-20 06:48:19 -0800</bug_when>
    <thetext>Created attachment 120024
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525231</commentid>
    <comment_count>6</comment_count>
      <attachid>120024</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-21 05:48:52 -0800</bug_when>
    <thetext>Comment on attachment 120024
Patch

Clearing flags on attachment: 120024

Committed r103404: &lt;http://trac.webkit.org/changeset/103404&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525232</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-21 05:48:57 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119629</attachid>
            <date>2011-12-16 10:18:42 -0800</date>
            <delta_ts>2011-12-20 06:48:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74727-20111216192043.patch</filename>
            <type>text/plain</type>
            <size>22595</size>
            <attacher name="Pierre Rossi">pierre.rossi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMDY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDhkOTc0MGRiZTRhNjE3
MzY3ZTljZjRmMmRiNjk3ZjJhNzAxZGM5NC4uNDJiYzNkYTRkMDJmMmFmMzEzZmJhZDEwMjBhMjJl
ZWJjMTQ5Y2ViZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDExLTEyLTE2ICBQaWVy
cmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgorCisgICAgICAgIFtRdF0gTW9iaWxl
IHRoZW1lIHJlZmluZW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03NDcyNworCisgICAgICAgIE1vc3RseSB0byByZXBsYWNlIG1vc3Qgb2YgdGhl
IHJvdW5kZWQtcmVjdC1zaGFwZWQKKyAgICAgICAgY29udHJvbHMgd2l0aCBzcXVpcmNsZS1zaGFw
ZWQgb25lcy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMgbmVlZGVkLgorCisgICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVyVGhl
bWVRdE1vYmlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkcmF3Q29udHJvbEJhY2tncm91bmQp
OgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRlclNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmJv
cmRlclBlbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdDaGVj
a2FibGVCYWNrZ3JvdW5kKTogVG9uZWQgZG93biB0aGUgZ3JhZGllbnQgYSBiaXQuCisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRDaGVja0JveCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdSYWRpbyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVBhaW50ZXJNb2JpbGU6OmRyYXdNdWx0aXBsZUNvbWJvQnV0dG9uKTogaW5jcmVhc2Ugc3BhY2lu
ZyBiZXR3ZWVuIHRoZSBkb3RzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyTW9iaWxl
OjpkcmF3U2ltcGxlQ29tYm9CdXR0b24pOiBhdHRlbXB0IHRvIGltcHJvdmUgcmVhZGFiaWxpdHku
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmdldEJ1dHRvbkltYWdlU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRDb21ib0J1dHRv
bik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdMaW5lRWRpdCk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRMaW5lRWRpdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdQdXNoQnV0dG9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZFB1c2hCdXR0b24pOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3Q29tYm9Cb3gpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3UHJvZ3Jlc3MpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3U2xpZGVyVGh1bWIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6Y29tcHV0ZVNpemVCYXNlZE9uU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRUZXh0RmllbGQpOgor
ICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuaDoKKwogMjAxMS0xMi0x
NiAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEwMzA2Mi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAKaW5kZXggZWQ2ZTliYThhZWE1MTZm
ZDNhYTdiNmZmMDc0ZDQ4ZmMxMTY5Yzg2ZS4uZmQ5Zjc2ZDI4ODI4NDIwMTdmMmNjNWZiMDE5ZmYx
OGZlMmIwY2NmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVy
VGhlbWVRdE1vYmlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVy
VGhlbWVRdE1vYmlsZS5jcHAKQEAgLTYwLDggKzYwLDggQEAgc3RhdGljIGNvbnN0IGludCBhcnJv
d0JveFdpZHRoID0gMjY7CiBzdGF0aWMgY29uc3QgaW50IGZyYW1lV2lkdGggPSAyOwogc3RhdGlj
IGNvbnN0IGludCBjaGVja0JveFdpZHRoID0gMjE7CiBzdGF0aWMgY29uc3QgaW50IHJhZGlvV2lk
dGggPSAyMTsKLXN0YXRpYyBjb25zdCBpbnQgYnV0dG9uSWNvblNpemUgPSAxNjsKLXN0YXRpYyBj
b25zdCBpbnQgc2xpZGVyU2l6ZSA9IDE4Oworc3RhdGljIGNvbnN0IGludCBzbGlkZXJTaXplID0g
MTk7CitzdGF0aWMgY29uc3QgaW50IGJ1dHRvbkhlaWdodFJhdGlvID0gMS41OwogCiBzdGF0aWMg
Y29uc3QgZmxvYXQgYnV0dG9uUGFkZGluZ0xlZnQgPSAxODsKIHN0YXRpYyBjb25zdCBmbG9hdCBi
dXR0b25QYWRkaW5nUmlnaHQgPSAxODsKQEAgLTc5LDkgKzc5LDggQEAgc3RhdGljIGNvbnN0IFFD
b2xvciBkYXJrQ29sb3IoNDAsIDQwLCA0MCk7CiBzdGF0aWMgY29uc3QgUUNvbG9yIGhpZ2hsaWdo
dENvbG9yKDE2LCAxMjgsIDIyMSk7CiBzdGF0aWMgY29uc3QgUUNvbG9yIGJ1dHRvbkdyYWRpZW50
Qm90dG9tKDI0NSwgMjQ1LCAyNDUpOwogc3RhdGljIGNvbnN0IFFDb2xvciBzaGFkb3dDb2xvcig4
MCwgODAsIDgwLCAxNjApOwotc3RhdGljIGNvbnN0IFFQZW4gYm9yZGVyUGVuKGRhcmtDb2xvciwg
MC40LCBRdDo6U29saWRMaW5lLCBRdDo6Um91bmRDYXAsIFF0OjpSb3VuZEpvaW4pOwogCi1zdGF0
aWMgaW5saW5lIHZvaWQgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQoUVBhaW50ZXIq
IHBhaW50ZXIsIGNvbnN0IFFQZW4mIHBlbiwgY29uc3QgUVJlY3QmIHJlY3QsIGNvbnN0IFFCcnVz
aCYgYnJ1c2gpCitzdGF0aWMgdm9pZCBkcmF3Q29udHJvbEJhY2tncm91bmQoUVBhaW50ZXIqIHBh
aW50ZXIsIGNvbnN0IFFQZW4mIHBlbiwgY29uc3QgUVJlY3QmIHJlY3QsIGNvbnN0IFFCcnVzaCYg
YnJ1c2gpCiB7CiAgICAgUVBlbiBvbGRQZW4gPSBwYWludGVyLT5wZW4oKTsKICAgICBRQnJ1c2gg
b2xkQnJ1c2ggPSBwYWludGVyLT5icnVzaCgpOwpAQCAtOTAsOCArODksMzAgQEAgc3RhdGljIGlu
bGluZSB2b2lkIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKFFQYWludGVyKiBwYWlu
dGVyLCBjb25zdCBRUGUKICAgICBwYWludGVyLT5zZXRCcnVzaChicnVzaCk7CiAKICAgICBjb25z
dCBpbnQgbGluZSA9IDE7Ci0gICAgY29uc3QgZG91YmxlIHJhZGl1cyA9IHJhZGl1c0ZhY3RvciAq
IHJlY3QuaGVpZ2h0KCk7Ci0gICAgcGFpbnRlci0+ZHJhd1JvdW5kZWRSZWN0KHJlY3QuYWRqdXN0
ZWQobGluZSwgbGluZSwgLWxpbmUsIC1saW5lKSwgcmFkaXVzLCByYWRpdXMpOworICAgIGNvbnN0
IFFSZWN0IHBhZGRlZFJlY3QgPSByZWN0LmFkanVzdGVkKGxpbmUsIGxpbmUsIC1saW5lLCAtbGlu
ZSk7CisKKyAgICBjb25zdCBpbnQgbiA9IDM7CisgICAgY29uc3QgcXJlYWwgaW52UG93ID0gMSAv
IGRvdWJsZShuKTsKKyAgICBRX0FTU0VSVChwYWRkZWRSZWN0LndpZHRoKCkgPj0gcGFkZGVkUmVj
dC5oZWlnaHQoKSk7CisgICAgY29uc3QgaW50IHJhZGl1cyA9IHBhZGRlZFJlY3QuaGVpZ2h0KCkg
LyAyOworICAgIGNvbnN0IGludCB4RGVsdGEgPSBwYWRkZWRSZWN0LndpZHRoKCkgLyAyIC0gcmFk
aXVzOworICAgIC8vIFRyYW5zbGF0aW5nIHRoZSBwYWludGVyIGhhcyBhIHRlbmRlbmN5IHRvIG1l
c3Mgd2l0aCBncmFkaWVudHMuCisgICAgY29uc3QgcXJlYWwgeDAgID0gcGFkZGVkUmVjdC5sZWZ0
KCkgKyB4RGVsdGEgKyByYWRpdXM7CisgICAgY29uc3QgcXJlYWwgeTAgPSBwYWRkZWRSZWN0LnRv
cCgpICsgcmFkaXVzOworICAgIHFyZWFsIHgsIHk7CisgICAgUVBhaW50ZXJQYXRoIHBhdGg7Cisg
ICAgcGF0aC5tb3ZlVG8oeDAgLSB4RGVsdGEsIHkwIC0gcmFkaXVzKTsKKyAgICBmb3IgKHkgPSB5
MCAtIHJhZGl1cyA7IHkgPD0geTAgKyByYWRpdXM7ICsreSkgeworICAgICAgICB4ID0gIHgwIC0g
eERlbHRhIC0gcmFkaXVzICogcG93KDEgLSBwb3cocUFicyh5IC0geTApIC8gcmFkaXVzICwgbiks
IGludlBvdyk7CisgICAgICAgIHBhdGgubGluZVRvKHgsIHkpOworICAgIH0KKyAgICBmb3IgKHkg
PSB5MCArIHJhZGl1cyA7IHkgPj0geTAgLSByYWRpdXM7IC0teSkgeworICAgICAgICB4ID0gIHgw
ICsgeERlbHRhICsgcmFkaXVzICogcG93KDEgLSBwb3cocUFicyh5IC0geTApIC8gcmFkaXVzICwg
biksIGludlBvdyk7CisgICAgICAgIHBhdGgubGluZVRvKHgsIHkpOworICAgIH0KKyAgICBwYXRo
LmNsb3NlU3VicGF0aCgpOworCisgICAgcGFpbnRlci0+ZHJhd1BhdGgocGF0aCk7CiAgICAgcGFp
bnRlci0+c2V0UGVuKG9sZFBlbik7CiAgICAgcGFpbnRlci0+c2V0QnJ1c2gob2xkQnJ1c2gpOwog
fQpAQCAtMTAyLDYgKzEyMywxOSBAQCBzdGF0aWMgaW5saW5lIFFSZWN0IHNocmlua1JlY3RUb1Nx
dWFyZShjb25zdCBRUmVjdCYgcmVjdCkKICAgICByZXR1cm4gUVJlY3QocmVjdC50b3BMZWZ0KCks
IFFTaXplKHNpZGUsIHNpZGUpKTsKIH0KIAorc3RhdGljIGlubGluZSBxcmVhbCBwYWludGVyU2Nh
bGUoUVBhaW50ZXIqIHBhaW50ZXIpCit7CisgICAgaWYgKCFwYWludGVyKQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gcGFpbnRlci0+dHJhbnNmb3JtKCkubTExKCk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgUVBlbiBib3JkZXJQZW4oUVBhaW50ZXIqIHBhaW50ZXIgPSAwKQoreworICAgIGNv
bnN0IHFyZWFsIHNjYWxlID0gcGFpbnRlciA/IHBhaW50ZXJTY2FsZShwYWludGVyKSA6IDE7Cisg
ICAgcmV0dXJuIFFQZW4oZGFya0NvbG9yLCAwLjQgKiBzY2FsZSwgUXQ6OlNvbGlkTGluZSwgUXQ6
OlJvdW5kQ2FwLCBRdDo6Um91bmRKb2luKTsKK30KKwogUVNoYXJlZFBvaW50ZXI8U3R5bGVQYWlu
dGVyPiBSZW5kZXJUaGVtZVF0TW9iaWxlOjpnZXRTdHlsZVBhaW50ZXIoY29uc3QgUGFpbnRJbmZv
JiBwaSkKIHsKICAgICByZXR1cm4gUVNoYXJlZFBvaW50ZXI8U3R5bGVQYWludGVyPihuZXcgU3R5
bGVQYWludGVyTW9iaWxlKHRoaXMsIHBpKSk7CkBAIC0xMzEsMTAgKzE2NSwxMCBAQCB2b2lkIFN0
eWxlUGFpbnRlck1vYmlsZTo6ZHJhd0NoZWNrYWJsZUJhY2tncm91bmQoUVBhaW50ZXIqIHBhaW50
ZXIsIGNvbnN0IFFSZWN0JgogICAgIGdyYWRpZW50LnNldFN0YXJ0KHJlY3QudG9wTGVmdCgpKTsK
ICAgICBncmFkaWVudC5zZXRGaW5hbFN0b3AocmVjdC5ib3R0b21MZWZ0KCkpOwogICAgIGdyYWRp
ZW50LnNldENvbG9yQXQoMC4wLCBjb2xvcik7Ci0gICAgZ3JhZGllbnQuc2V0Q29sb3JBdCgxLjAs
IGNvbG9yLmxpZ2h0ZXIoKSk7CisgICAgZ3JhZGllbnQuc2V0Q29sb3JBdCgxLjAsIGNvbG9yLmxp
Z2h0ZXIoMTMwKSk7CiAgICAgYnJ1c2ggPSBncmFkaWVudDsKIAotICAgIGRyYXdSZWN0YW5ndWxh
ckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIsIGJvcmRlclBlbiwgcmVjdCwgYnJ1c2gpOworICAg
IGRyYXdDb250cm9sQmFja2dyb3VuZChwYWludGVyLCBib3JkZXJQZW4ocGFpbnRlciksIHJlY3Qs
IGJydXNoKTsKIH0KIAogUVNpemUgU3R5bGVQYWludGVyTW9iaWxlOjpzaXplRm9yUGFpbnRlclNj
YWxlKGNvbnN0IFFSZWN0JiByZWN0KSBjb25zdApAQCAtMTcyLDExICsyMDYsMTEgQEAgUVBpeG1h
cCBTdHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRDaGVja0JveChjb25zdCBRU2l6ZSYgc2l6ZSwgYm9v
bCBjaGVja2VkLCBib29sIGUKICAgICBpZiAoIVFQaXhtYXBDYWNoZTo6ZmluZChrZXksIHJlc3Vs
dCkpIHsKICAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChzaXplKTsKICAgICAgICAgcmVzdWx0LmZp
bGwoUXQ6OnRyYW5zcGFyZW50KTsKLSAgICAgICAgUVBhaW50ZXIgcGFpbnRlcigmcmVzdWx0KTsK
KyAgICAgICAgUVBhaW50ZXIgY2FjaGVQYWludGVyKCZyZXN1bHQpOwogICAgICAgICBRUmVjdCBy
ZWN0KFFQb2ludCgwLCAwKSwgc2l6ZSk7Ci0gICAgICAgIGRyYXdDaGVja2FibGVCYWNrZ3JvdW5k
KCZwYWludGVyLCByZWN0LCBjaGVja2VkLCBlbmFibGVkKTsKKyAgICAgICAgZHJhd0NoZWNrYWJs
ZUJhY2tncm91bmQoJmNhY2hlUGFpbnRlciwgcmVjdCwgY2hlY2tlZCwgZW5hYmxlZCk7CiAgICAg
ICAgIGlmIChjaGVja2VkIHx8ICFlbmFibGVkKQotICAgICAgICAgICAgZHJhd0NoZWNrZXIoJnBh
aW50ZXIsIHJlY3QsIGVuYWJsZWQgPyBRdDo6d2hpdGUgOiBRdDo6Z3JheSk7CisgICAgICAgICAg
ICBkcmF3Q2hlY2tlcigmY2FjaGVQYWludGVyLCByZWN0LCBlbmFibGVkID8gUXQ6OndoaXRlIDog
UXQ6OmdyYXkpOwogICAgICAgICBRUGl4bWFwQ2FjaGU6Omluc2VydChrZXksIHJlc3VsdCk7CiAg
ICAgfQogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xOTAsNyArMjI0LDcgQEAgdm9pZCBTdHlsZVBh
aW50ZXJNb2JpbGU6OmRyYXdSYWRpbyhRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVNpemUmIHNp
emUsIGJvb2wgY2gKICAgICBkcmF3Q2hlY2thYmxlQmFja2dyb3VuZChwYWludGVyLCByZWN0LCBj
aGVja2VkLCBlbmFibGVkKTsKICAgICBjb25zdCBpbnQgYm9yZGVyID0gc2l6ZS53aWR0aCgpIC8g
NDsKICAgICByZWN0LmFkanVzdChib3JkZXIsIGJvcmRlciwgLWJvcmRlciwgLWJvcmRlcik7Ci0g
ICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwgYm9yZGVyUGVuLCBy
ZWN0LCBlbmFibGVkID8gUXQ6OndoaXRlIDogUXQ6OmdyYXkpOworICAgIGRyYXdDb250cm9sQmFj
a2dyb3VuZChwYWludGVyLCBib3JkZXJQZW4oKSwgcmVjdCwgZW5hYmxlZCA/IFF0Ojp3aGl0ZSA6
IFF0OjpncmF5KTsKIH0KIAogUVBpeG1hcCBTdHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRSYWRpbyhj
b25zdCBRU2l6ZSYgc2l6ZSwgYm9vbCBjaGVja2VkLCBib29sIGVuYWJsZWQpIGNvbnN0CkBAIC0y
MDIsOCArMjM2LDggQEAgUVBpeG1hcCBTdHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRSYWRpbyhjb25z
dCBRU2l6ZSYgc2l6ZSwgYm9vbCBjaGVja2VkLCBib29sIGVuYWIKICAgICBpZiAoIVFQaXhtYXBD
YWNoZTo6ZmluZChrZXksIHJlc3VsdCkpIHsKICAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChzaXpl
KTsKICAgICAgICAgcmVzdWx0LmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKLSAgICAgICAgUVBhaW50
ZXIgcGFpbnRlcigmcmVzdWx0KTsKLSAgICAgICAgZHJhd1JhZGlvKCZwYWludGVyLCBzaXplLCBj
aGVja2VkLCBlbmFibGVkKTsKKyAgICAgICAgUVBhaW50ZXIgY2FjaGVQYWludGVyKCZyZXN1bHQp
OworICAgICAgICBkcmF3UmFkaW8oJmNhY2hlUGFpbnRlciwgc2l6ZSwgY2hlY2tlZCwgZW5hYmxl
ZCk7CiAgICAgICAgIFFQaXhtYXBDYWNoZTo6aW5zZXJ0KGtleSwgcmVzdWx0KTsKICAgICB9CiAg
ICAgcmV0dXJuIHJlc3VsdDsKQEAgLTIxOCw3ICsyNTIsNyBAQCB2b2lkIFN0eWxlUGFpbnRlck1v
YmlsZTo6ZHJhd011bHRpcGxlQ29tYm9CdXR0b24oUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFT
aXplJgogICAgIHBhaW50ZXItPnNldFBlbihjb2xvcik7CiAgICAgcGFpbnRlci0+c2V0QnJ1c2go
Y29sb3IpOwogCi0gICAgY29uc3QgcXJlYWwgb2Zmc2V0RmFjdG9yID0gMS42OworICAgIGNvbnN0
IHFyZWFsIG9mZnNldEZhY3RvciA9IDEuODsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsr
aSkgewogICAgICAgICBRUG9pbnRGIGNlbnRlcihvZmZzZXRGYWN0b3IgKiBkb3RSYWRpaSArIGkg
KiBvZmZzZXRGYWN0b3IgKiBkb3REaWFtZXRlciwgZG90UmFkaWkpOwogICAgICAgICBwYWludGVy
LT5kcmF3RWxsaXBzZShjZW50ZXIsIGRvdFJhZGlpLCBkb3RSYWRpaSk7CkBAIC0yMjcsMzcgKzI2
MSwyOCBAQCB2b2lkIFN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd011bHRpcGxlQ29tYm9CdXR0b24o
UVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTaXplJgogCiB2b2lkIFN0eWxlUGFpbnRlck1vYmls
ZTo6ZHJhd1NpbXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6ZSYg
c2l6ZSwgY29uc3QgUUNvbG9yJiBjb2xvcikgY29uc3QKIHsKLSAgICBjb25zdCBpbnQgd2lkdGgg
PSBzaXplLndpZHRoKCk7Ci0gICAgY29uc3QgaW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7Ci0g
ICAgY29uc3QgaW50IGhvcml6b250YWxDZW50ZXIgPSB3aWR0aCAvIDI7Ci0gICAgY29uc3QgaW50
IHZlcnRpY2FsQ2VudGVyID0gaGVpZ2h0IC8gMjsKLSAgICBjb25zdCBpbnQgc3BhY2luZyA9IDEg
KyBoZWlnaHQgLyAxNTsKLQotICAgIFFWZWN0b3I8UUxpbmU+IGxpbmVzKDIgKiB3aWR0aCk7Ci0g
ICAgaW50IGxlbmd0aCA9IDA7Ci0gICAgZm9yIChpbnQgeCA9IDA7IHggPCBob3Jpem9udGFsQ2Vu
dGVyIDsgeCsrKSB7Ci0gICAgICAgIGxlbmd0aCsrOwotICAgICAgICBsaW5lc1t4XSA9IFFMaW5l
KHgsIHZlcnRpY2FsQ2VudGVyICsgc3BhY2luZywgeCwgdmVydGljYWxDZW50ZXIgKyBzcGFjaW5n
ICsgbGVuZ3RoKTsKLSAgICAgICAgbGluZXNbMiAqIHdpZHRoIC0geCAtIDFdID0gUUxpbmUoeCwg
dmVydGljYWxDZW50ZXIgLSBzcGFjaW5nLCB4LCB2ZXJ0aWNhbENlbnRlciAtIHNwYWNpbmcgLSBs
ZW5ndGgpOwotICAgIH0KLSAgICBmb3IgKGludCB4ID0gaG9yaXpvbnRhbENlbnRlcjsgeCA8IHdp
ZHRoOyB4KyspIHsKLSAgICAgICAgbGluZXNbeF0gPSBRTGluZSh4LCB2ZXJ0aWNhbENlbnRlciAr
IHNwYWNpbmcsIHgsIHZlcnRpY2FsQ2VudGVyICsgc3BhY2luZyArIGxlbmd0aCk7Ci0gICAgICAg
IGxpbmVzWzIgKiB3aWR0aCAtIHggLSAxXSA9IFFMaW5lKHgsIHZlcnRpY2FsQ2VudGVyIC0gc3Bh
Y2luZywgeCwgdmVydGljYWxDZW50ZXIgLSBzcGFjaW5nIC0gbGVuZ3RoKTsKLSAgICAgICAgbGVu
Z3RoLS07Ci0gICAgfQorICAgIGNvbnN0IGludCBnYXAgPSAoc2l6ZS5oZWlnaHQoKSAtIDEpIC8g
NTsKKyAgICBjb25zdCBpbnQgYXJyb3dIZWlnaHQgPSAyICogZ2FwOworICAgIGNvbnN0IGludCBy
aWdodCA9IGFycm93SGVpZ2h0ICogMjsKKyAgICBjb25zdCBpbnQgYm90dG9tQmFzZWxpbmUgPSBh
cnJvd0hlaWdodCArIGdhcCArIDE7CisgICAgUVBvbHlnb24gdXBBcnJvdywgZG93bkFycm93Owor
ICAgIHVwQXJyb3cgPDwgUVBvaW50KDAsIGFycm93SGVpZ2h0KSA8PCBRUG9pbnQoYXJyb3dIZWln
aHQsIDApIDw8IFFQb2ludChyaWdodCwgYXJyb3dIZWlnaHQpOworICAgIGRvd25BcnJvdyA8PCBR
UG9pbnQoMCwgYm90dG9tQmFzZWxpbmUpIDw8IFFQb2ludChhcnJvd0hlaWdodCwgYm90dG9tQmFz
ZWxpbmUgKyBhcnJvd0hlaWdodCkKKyAgICAgICAgICAgICAgPDwgUVBvaW50KHJpZ2h0LCBib3R0
b21CYXNlbGluZSk7CiAKICAgICBwYWludGVyLT5zZXRQZW4oY29sb3IpOwogICAgIHBhaW50ZXIt
PnNldEJydXNoKGNvbG9yKTsKLSAgICBwYWludGVyLT5kcmF3TGluZXMobGluZXMpOworICAgIHBh
aW50ZXItPmRyYXdQb2x5Z29uKHVwQXJyb3cpOworICAgIHBhaW50ZXItPmRyYXdQb2x5Z29uKGRv
d25BcnJvdyk7CiB9CiAKLVFTaXplIFN0eWxlUGFpbnRlck1vYmlsZTo6Z2V0QnV0dG9uSW1hZ2VT
aXplKGNvbnN0IFFTaXplJiBidXR0b25TaXplLCBib29sIG11bHRpcGxlKSBjb25zdAorUVNpemUg
U3R5bGVQYWludGVyTW9iaWxlOjpnZXRCdXR0b25JbWFnZVNpemUoaW50IGJ1dHRvbkhlaWdodCwg
Ym9vbCBtdWx0aXBsZSkgY29uc3QKIHsKICAgICBpZiAobXVsdGlwbGUpCi0gICAgICAgIHJldHVy
biBRU2l6ZShidXR0b25TaXplLndpZHRoKCksIGJ1dHRvblNpemUud2lkdGgoKSAvIDUpOworICAg
ICAgICByZXR1cm4gUVNpemUoYnV0dG9uSGVpZ2h0IC8gMiwgYnV0dG9uSGVpZ2h0IC8gMTApOwog
Ci0gICAgY29uc3QgaW50IGhlaWdodCA9IGJ1dHRvblNpemUuaGVpZ2h0KCkgLyAyICsgZnJhbWVX
aWR0aDsKLSAgICBjb25zdCBpbnQgd2lkdGggPSBoZWlnaHQgLSAoMiAqICgxICsgaGVpZ2h0IC8g
MTUpKSAtIDE7CisgICAgY29uc3QgaW50IGhlaWdodCA9IGJ1dHRvbkhlaWdodCAvIDIuNTsKKyAg
ICBjb25zdCBpbnQgd2lkdGggPSA0ICogaGVpZ2h0IC8gNTsKICAgICByZXR1cm4gUVNpemUod2lk
dGgsIGhlaWdodCk7CiB9CiAKQEAgLTI3NCwxMSArMjk5LDExIEBAIFFQaXhtYXAgU3R5bGVQYWlu
dGVyTW9iaWxlOjpmaW5kQ29tYm9CdXR0b24oY29uc3QgUVNpemUmIHNpemUsIGJvb2wgbXVsdGlw
bGUsIGJvCiAgICAgaWYgKCFRUGl4bWFwQ2FjaGU6OmZpbmQoa2V5LCByZXN1bHQpKSB7CiAgICAg
ICAgIHJlc3VsdCA9IFFQaXhtYXAoc2l6ZSk7CiAgICAgICAgIHJlc3VsdC5maWxsKFF0Ojp0cmFu
c3BhcmVudCk7Ci0gICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnJlc3VsdCk7CisgICAgICAgIFFQ
YWludGVyIGNhY2hlUGFpbnRlcigmcmVzdWx0KTsKICAgICAgICAgaWYgKG11bHRpcGxlKQotICAg
ICAgICAgICAgZHJhd011bHRpcGxlQ29tYm9CdXR0b24oJnBhaW50ZXIsIHNpemUsIGVuYWJsZWQg
PyBkYXJrQ29sb3IgOiBRdDo6bGlnaHRHcmF5KTsKKyAgICAgICAgICAgIGRyYXdNdWx0aXBsZUNv
bWJvQnV0dG9uKCZjYWNoZVBhaW50ZXIsIHNpemUsIGVuYWJsZWQgPyBkYXJrQ29sb3IgOiBRdDo6
bGlnaHRHcmF5KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZHJhd1NpbXBsZUNvbWJvQnV0
dG9uKCZwYWludGVyLCBzaXplLCBlbmFibGVkID8gZGFya0NvbG9yIDogUXQ6OmxpZ2h0R3JheSk7
CisgICAgICAgICAgICBkcmF3U2ltcGxlQ29tYm9CdXR0b24oJmNhY2hlUGFpbnRlciwgc2l6ZSwg
ZW5hYmxlZCA/IGRhcmtDb2xvciA6IFF0OjpsaWdodEdyYXkpOwogICAgICAgICBRUGl4bWFwQ2Fj
aGU6Omluc2VydChrZXksIHJlc3VsdCk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkBAIC0y
ODYsMTIgKzMxMSwzNCBAQCBRUGl4bWFwIFN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZENvbWJvQnV0
dG9uKGNvbnN0IFFTaXplJiBzaXplLCBib29sIG11bHRpcGxlLCBibwogCiB2b2lkIFN0eWxlUGFp
bnRlck1vYmlsZTo6ZHJhd0xpbmVFZGl0KGNvbnN0IFFSZWN0JiByZWN0LCBib29sIGZvY3VzZWQs
IGJvb2wgZW5hYmxlZCkKIHsKLSAgICBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChw
YWludGVyLCBib3JkZXJQZW4sIHJlY3QsIFF0Ojp3aGl0ZSk7CisgICAgUV9VTlVTRUQoZW5hYmxl
ZCk7CisgICAgUVBpeG1hcCBsaW5lRWRpdCA9IGZpbmRMaW5lRWRpdChzaXplRm9yUGFpbnRlclNj
YWxlKHJlY3QpLCBmb2N1c2VkKTsKKyAgICBpZiAobGluZUVkaXQuaXNOdWxsKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBwYWludGVyLT5kcmF3UGl4bWFwKHJlY3QsIGxpbmVFZGl0KTsKK30KKwor
UVBpeG1hcCBTdHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRMaW5lRWRpdChjb25zdCBRU2l6ZSAmIHNp
emUsIGJvb2wgZm9jdXNlZCkgY29uc3QKK3sKKyAgICBRUGl4bWFwIHJlc3VsdDsKKyAgICBzdGF0
aWMgY29uc3QgUVN0cmluZyBwcmVmaXggPSBRTGF0aW4xU3RyaW5nKCIkcXQtd2Via2l0LW1vYmls
ZS10aGVtZS1saW5lRWRpdC0iKTsKKyAgICBRU3RyaW5nIGtleSA9IHByZWZpeCArIFFTdHJpbmc6
Om51bWJlcihzaXplLndpZHRoKCkpICsgUUxhdGluMVN0cmluZygieCIpICsgUVN0cmluZzo6bnVt
YmVyKHNpemUuaGVpZ2h0KCkpCisgICAgICAgICAgICAgICAgICAgICAgKyAoZm9jdXNlZCA/IFFM
YXRpbjFTdHJpbmcoIi1mb2N1c2VkIikgOiBRU3RyaW5nKCkpOworICAgIGlmICghUVBpeG1hcENh
Y2hlOjpmaW5kKGtleSwgcmVzdWx0KSkgeworICAgICAgICBjb25zdCBpbnQgZm9jdXNGcmFtZSA9
IHBhaW50ZXJTY2FsZShwYWludGVyKTsKKyAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChzaXplICsg
UVNpemUoMiAqIGZvY3VzRnJhbWUsIDIgKiBmb2N1c0ZyYW1lKSk7CisgICAgICAgIHJlc3VsdC5m
aWxsKFF0Ojp0cmFuc3BhcmVudCk7CisgICAgICAgIGNvbnN0IFFSZWN0IHJlY3QgPSByZXN1bHQu
cmVjdCgpLmFkanVzdGVkKGZvY3VzRnJhbWUsIGZvY3VzRnJhbWUsIC1mb2N1c0ZyYW1lLCAtZm9j
dXNGcmFtZSk7CisgICAgICAgIFFQYWludGVyIGNhY2hlUGFpbnRlcigmcmVzdWx0KTsKKyAgICAg
ICAgZHJhd0NvbnRyb2xCYWNrZ3JvdW5kKCZjYWNoZVBhaW50ZXIsIGJvcmRlclBlbihwYWludGVy
KSwgcmVjdCwgUXQ6OndoaXRlKTsKIAotICAgIGlmIChmb2N1c2VkKSB7Ci0gICAgICAgIFFQZW4g
Zm9jdXNQZW4oaGlnaGxpZ2h0Q29sb3IsIGZsb2F0KHJlY3QuaGVpZ2h0KCkgLyAyNi4wKSwgUXQ6
OlNvbGlkTGluZSwgUXQ6OlJvdW5kQ2FwLCBRdDo6Um91bmRKb2luKTsKLSAgICAgICAgZHJhd1Jl
Y3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwgZm9jdXNQZW4sIHJlY3QsIFF0OjpO
b0JydXNoKTsKKyAgICAgICAgaWYgKGZvY3VzZWQpIHsKKyAgICAgICAgICAgIFFQZW4gZm9jdXNQ
ZW4oaGlnaGxpZ2h0Q29sb3IsIGZvY3VzRnJhbWUsIFF0OjpTb2xpZExpbmUsIFF0OjpSb3VuZENh
cCwgUXQ6OlJvdW5kSm9pbik7CisgICAgICAgICAgICBkcmF3Q29udHJvbEJhY2tncm91bmQoJmNh
Y2hlUGFpbnRlciwgZm9jdXNQZW4sIHJlY3QsIFF0OjpOb0JydXNoKTsKKyAgICAgICAgfQorICAg
ICAgICBRUGl4bWFwQ2FjaGU6Omluc2VydChrZXksIHJlc3VsdCk7CiAgICAgfQorICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIHZvaWQgU3R5bGVQYWludGVyTW9iaWxlOjpkcmF3Q2hlY2tCb3goY29u
c3QgUVJlY3QmIHJlY3QsIGJvb2wgY2hlY2tlZCwgYm9vbCBlbmFibGVkKQpAQCAtMzE0LDQ2ICsz
NjEsNTkgQEAgdm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdSYWRpb0J1dHRvbihjb25zdCBR
UmVjdCYgcmVjdCwgYm9vbCBjaGVja2VkLCBib29sIGUKIAogdm9pZCBTdHlsZVBhaW50ZXJNb2Jp
bGU6OmRyYXdQdXNoQnV0dG9uKGNvbnN0IFFSZWN0JiByZWN0LCBib29sIHN1bmtlbiwgYm9vbCBl
bmFibGVkKQogewotICAgIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIs
IFF0OjpOb1BlbiwgcmVjdC5hZGp1c3RlZCgwLCAxLCAwLCAxKSwgc2hhZG93Q29sb3IpOworICAg
IFFQaXhtYXAgcHVzaEJ1dHRvbiA9IGZpbmRQdXNoQnV0dG9uKHNpemVGb3JQYWludGVyU2NhbGUo
cmVjdCksIHN1bmtlbiwgZW5hYmxlZCk7CisgICAgaWYgKHB1c2hCdXR0b24uaXNOdWxsKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBwYWludGVyLT5kcmF3UGl4bWFwKHJlY3QsIHB1c2hCdXR0b24p
OworfQogCi0gICAgUUJydXNoIGJydXNoOwotICAgIGlmIChlbmFibGVkICYmICFzdW5rZW4pIHsK
LSAgICAgICAgUUxpbmVhckdyYWRpZW50IGxpbmVhckdyYWRpZW50OwotICAgICAgICBsaW5lYXJH
cmFkaWVudC5zZXRTdGFydChyZWN0LmJvdHRvbUxlZnQoKSk7Ci0gICAgICAgIGxpbmVhckdyYWRp
ZW50LnNldEZpbmFsU3RvcChyZWN0LnRvcExlZnQoKSk7Ci0gICAgICAgIGxpbmVhckdyYWRpZW50
LnNldENvbG9yQXQoMC4wLCBidXR0b25HcmFkaWVudEJvdHRvbSk7Ci0gICAgICAgIGxpbmVhckdy
YWRpZW50LnNldENvbG9yQXQoMS4wLCBRdDo6d2hpdGUpOwotICAgICAgICBicnVzaCA9IGxpbmVh
ckdyYWRpZW50OwotICAgIH0gZWxzZSBpZiAoIWVuYWJsZWQpCi0gICAgICAgIGJydXNoID0gUUNv
bG9yKDI0MSwgMjQyLCAyNDMpOwotICAgIGVsc2UgeyAvLyBzdW5rZW4KLSAgICAgICAgUUxpbmVh
ckdyYWRpZW50IGxpbmVhckdyYWRpZW50OwotICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRTdGFy
dChyZWN0LmJvdHRvbUxlZnQoKSk7Ci0gICAgICAgIGxpbmVhckdyYWRpZW50LnNldEZpbmFsU3Rv
cChyZWN0LnRvcExlZnQoKSk7Ci0gICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4w
LCBoaWdobGlnaHRDb2xvcik7Ci0gICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMS4w
LCBoaWdobGlnaHRDb2xvci5saWdodGVyKCkpOwotICAgICAgICBicnVzaCA9IGxpbmVhckdyYWRp
ZW50OworUVBpeG1hcCBTdHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRQdXNoQnV0dG9uKGNvbnN0IFFT
aXplJiBzaXplLCBib29sIHN1bmtlbiwgYm9vbCBlbmFibGVkKSBjb25zdAoreworICAgIFFQaXht
YXAgcmVzdWx0OworICAgIHN0YXRpYyBjb25zdCBRU3RyaW5nIHByZWZpeCA9IFFMYXRpbjFTdHJp
bmcoIiRxdC13ZWJraXQtbW9iaWxlLXRoZW1lLXB1c2hCdXR0b24tIik7CisgICAgUVN0cmluZyBr
ZXkgPSBwcmVmaXggKyBRU3RyaW5nOjpudW1iZXIoc2l6ZS53aWR0aCgpKSArIFFMYXRpbjFTdHJp
bmcoIngiKSArIFFTdHJpbmc6Om51bWJlcihzaXplLmhlaWdodCgpKQorICAgICAgICAgICAgICAg
ICAgICAgICsgKHN1bmtlbiA/IFFMYXRpbjFTdHJpbmcoIi1zdW5rZW4iKSA6IFFTdHJpbmcoKSkg
KyAoZW5hYmxlZCA/IFFMYXRpbjFTdHJpbmcoIi1vbiIpIDogUVN0cmluZygpKTsKKyAgICBpZiAo
IVFQaXhtYXBDYWNoZTo6ZmluZChrZXksIHJlc3VsdCkpIHsKKyAgICAgICAgY29uc3QgcXJlYWwg
ZHJvcFNoYWRvd1NpemUgPSBwYWludGVyU2NhbGUocGFpbnRlcik7CisgICAgICAgIHJlc3VsdCA9
IFFQaXhtYXAoc2l6ZSk7CisgICAgICAgIHJlc3VsdC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7Cisg
ICAgICAgIGNvbnN0IFFSZWN0IHJlY3QgPSBRUmVjdCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCkgLSBkcm9wU2hhZG93U2l6ZSk7CisgICAgICAgIFFQYWludGVyIGNhY2hlUGFpbnRl
cigmcmVzdWx0KTsKKyAgICAgICAgZHJhd0NvbnRyb2xCYWNrZ3JvdW5kKCZjYWNoZVBhaW50ZXIs
IFF0OjpOb1BlbiwgcmVjdC5hZGp1c3RlZCgwLCBkcm9wU2hhZG93U2l6ZSwgMCwgZHJvcFNoYWRv
d1NpemUpLCBzaGFkb3dDb2xvcik7CisKKyAgICAgICAgUUJydXNoIGJydXNoOworICAgICAgICBp
ZiAoZW5hYmxlZCAmJiAhc3Vua2VuKSB7CisgICAgICAgICAgICBRTGluZWFyR3JhZGllbnQgbGlu
ZWFyR3JhZGllbnQ7CisgICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRTdGFydChyZWN0LmJv
dHRvbUxlZnQoKSk7CisgICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0b3AocmVj
dC50b3BMZWZ0KCkpOworICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjAs
IGJ1dHRvbkdyYWRpZW50Qm90dG9tKTsKKyAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENv
bG9yQXQoMS4wLCBRdDo6d2hpdGUpOworICAgICAgICAgICAgYnJ1c2ggPSBsaW5lYXJHcmFkaWVu
dDsKKyAgICAgICAgfSBlbHNlIGlmICghZW5hYmxlZCkKKyAgICAgICAgICAgIGJydXNoID0gUUNv
bG9yKDI0MSwgMjQyLCAyNDMpOworICAgICAgICBlbHNlIHsgLy8gc3Vua2VuCisgICAgICAgICAg
ICBRTGluZWFyR3JhZGllbnQgbGluZWFyR3JhZGllbnQ7CisgICAgICAgICAgICBsaW5lYXJHcmFk
aWVudC5zZXRTdGFydChyZWN0LmJvdHRvbUxlZnQoKSk7CisgICAgICAgICAgICBsaW5lYXJHcmFk
aWVudC5zZXRGaW5hbFN0b3AocmVjdC50b3BMZWZ0KCkpOworICAgICAgICAgICAgbGluZWFyR3Jh
ZGllbnQuc2V0Q29sb3JBdCgwLjAsIGhpZ2hsaWdodENvbG9yKTsKKyAgICAgICAgICAgIGxpbmVh
ckdyYWRpZW50LnNldENvbG9yQXQoMS4wLCBoaWdobGlnaHRDb2xvci5saWdodGVyKCkpOworICAg
ICAgICAgICAgYnJ1c2ggPSBsaW5lYXJHcmFkaWVudDsKKyAgICAgICAgfQorICAgICAgICBkcmF3
Q29udHJvbEJhY2tncm91bmQoJmNhY2hlUGFpbnRlciwgYm9yZGVyUGVuKHBhaW50ZXIpLCByZWN0
LCBicnVzaCk7CisgICAgICAgIFFQaXhtYXBDYWNoZTo6aW5zZXJ0KGtleSwgcmVzdWx0KTsKICAg
ICB9Ci0KLSAgICBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChwYWludGVyLCBib3Jk
ZXJQZW4sIHJlY3QsIGJydXNoKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIFN0eWxl
UGFpbnRlck1vYmlsZTo6ZHJhd0NvbWJvQm94KGNvbnN0IFFSZWN0JiByZWN0LCBib29sIG11bHRp
cGxlLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91
bmQocGFpbnRlciwgUXQ6Ok5vUGVuLCByZWN0LmFkanVzdGVkKDAsIDEsIDAsIDIpLCBzaGFkb3dD
b2xvcik7Ci0KLSAgICBRTGluZWFyR3JhZGllbnQgbGluZWFyR3JhZGllbnQ7Ci0gICAgbGluZWFy
R3JhZGllbnQuc2V0U3RhcnQocmVjdC5ib3R0b21MZWZ0KCkpOwotICAgIGxpbmVhckdyYWRpZW50
LnNldEZpbmFsU3RvcChyZWN0LnRvcExlZnQoKSk7Ci0gICAgbGluZWFyR3JhZGllbnQuc2V0Q29s
b3JBdCgwLjAsIGJ1dHRvbkdyYWRpZW50Qm90dG9tKTsKLSAgICBsaW5lYXJHcmFkaWVudC5zZXRD
b2xvckF0KDEuMCwgUXQ6OndoaXRlKTsKLQotICAgIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNr
Z3JvdW5kKHBhaW50ZXIsIGJvcmRlclBlbiwgcmVjdCwgbGluZWFyR3JhZGllbnQpOwotCi0gICAg
Y29uc3QgUVJlY3QgYnV0dG9uUmVjdChyZWN0LngoKSArIHJlY3Qud2lkdGgoKSAtIGZyYW1lV2lk
dGggLSBhcnJvd0JveFdpZHRoLCByZWN0LnkoKSArIGZyYW1lV2lkdGgKLSAgICAgICAgICAgICAg
ICAgICAsIHJlY3QuaGVpZ2h0KCksIHJlY3QuaGVpZ2h0KCkgLSAyICogZnJhbWVXaWR0aCk7Ci0g
ICAgUVJlY3QgdGFyZ2V0UmVjdChRUG9pbnQoMCwgMCksIGdldEJ1dHRvbkltYWdlU2l6ZShidXR0
b25SZWN0LnNpemUoKSwgbXVsdGlwbGUpKTsKLSAgICB0YXJnZXRSZWN0Lm1vdmVDZW50ZXIoYnV0
dG9uUmVjdC5jZW50ZXIoKSk7CisgICAgUVBpeG1hcCBwdXNoQnV0dG9uID0gZmluZFB1c2hCdXR0
b24oc2l6ZUZvclBhaW50ZXJTY2FsZShyZWN0KSwgLypzdW5rZW4gPSAqL2ZhbHNlLCBlbmFibGVk
KTsKKyAgICBpZiAocHVzaEJ1dHRvbi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHBh
aW50ZXItPmRyYXdQaXhtYXAocmVjdCwgcHVzaEJ1dHRvbik7CisgICAgUVJlY3QgdGFyZ2V0UmVj
dChRUG9pbnQoMCwgMCksIGdldEJ1dHRvbkltYWdlU2l6ZShyZWN0LmhlaWdodCgpIC0gMSwgbXVs
dGlwbGUpKTsKKyAgICBjb25zdCBRUG9pbnQgYnV0dG9uQ2VudGVyKHJlY3QucmlnaHQoKSAtIGFy
cm93Qm94V2lkdGggLyAyLCByZWN0LmhlaWdodCgpIC8gMiAtIDEpOworICAgIHRhcmdldFJlY3Qu
bW92ZUNlbnRlcihidXR0b25DZW50ZXIpOwogICAgIFFQaXhtYXAgcGljID0gZmluZENvbWJvQnV0
dG9uKHNpemVGb3JQYWludGVyU2NhbGUodGFyZ2V0UmVjdCksIG11bHRpcGxlLCBlbmFibGVkKTsK
ICAgICBpZiAocGljLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CkBAIC0zNzgsOCArNDM4LDEz
IEBAIHZvaWQgU3R5bGVQYWludGVyTW9iaWxlOjpkcmF3UHJvZ3Jlc3MoY29uc3QgUVJlY3QmIHJl
Y3QsIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBsCiAgICAgICAgIHJlc3VsdCA9IFFQaXhtYXAoaW1h
Z2VTaXplKTsKICAgICAgICAgcmVzdWx0LmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKICAgICAgICAg
UVBhaW50ZXIgcGFpbnRlcigmcmVzdWx0KTsKKyAgICAgICAgcGFpbnRlci5zZXRSZW5kZXJIaW50
KFFQYWludGVyOjpBbnRpYWxpYXNpbmcpOwogICAgICAgICBRUmVjdCBwcm9ncmVzc1JlY3QoUVBv
aW50KDAsIDApLCBpbWFnZVNpemUpOwotICAgICAgICBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFj
a2dyb3VuZCgmcGFpbnRlciwgYm9yZGVyUGVuLCBwcm9ncmVzc1JlY3QsIFF0Ojp3aGl0ZSk7Cisg
ICAgICAgIHFyZWFsIHJhZGl1cyA9IHJhZGl1c0ZhY3RvciAqIHByb2dyZXNzUmVjdC5oZWlnaHQo
KTsKKyAgICAgICAgcGFpbnRlci5zZXRCcnVzaChRdDo6Tm9CcnVzaCk7CisgICAgICAgIHBhaW50
ZXIuc2V0UGVuKGJvcmRlclBlbigpKTsKKyAgICAgICAgcHJvZ3Jlc3NSZWN0LmFkanVzdCgxLCAx
LCAtMSwgLTEpOworICAgICAgICBwYWludGVyLmRyYXdSb3VuZGVkUmVjdChwcm9ncmVzc1JlY3Qs
IHJhZGl1cywgcmFkaXVzKTsKICAgICAgICAgcHJvZ3Jlc3NSZWN0LmFkanVzdCgxLCAxLCAtMSwg
LTEpOwogICAgICAgICBpZiAoYW5pbWF0ZWQpIHsKICAgICAgICAgICAgIGNvbnN0IGludCByaWdo
dCA9IHByb2dyZXNzUmVjdC5yaWdodCgpOwpAQCAtMzk3LDcgKzQ2MiwxMCBAQCB2b2lkIFN0eWxl
UGFpbnRlck1vYmlsZTo6ZHJhd1Byb2dyZXNzKGNvbnN0IFFSZWN0JiByZWN0LCBkb3VibGUgcHJv
Z3Jlc3MsIGJvb2wgbAogICAgICAgICAgICAgZ3JhZGllbnQuc2V0RmluYWxTdG9wKHByb2dyZXNz
UmVjdC50b3BMZWZ0KCkpOwogICAgICAgICAgICAgZ3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIGhp
Z2hsaWdodENvbG9yKTsKICAgICAgICAgICAgIGdyYWRpZW50LnNldENvbG9yQXQoMS4wLCBoaWdo
bGlnaHRDb2xvci5saWdodGVyKCkpOwotICAgICAgICAgICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJv
bEJhY2tncm91bmQoJnBhaW50ZXIsIFF0OjpOb1BlbiwgcHJvZ3Jlc3NSZWN0LCBncmFkaWVudCk7
CisgICAgICAgICAgICBwYWludGVyLnNldEJydXNoKGdyYWRpZW50KTsKKyAgICAgICAgICAgIHBh
aW50ZXIuc2V0UGVuKFF0OjpOb1Blbik7CisgICAgICAgICAgICByYWRpdXMgPSByYWRpdXNGYWN0
b3IgKiBwcm9ncmVzc1JlY3QuaGVpZ2h0KCk7CisgICAgICAgICAgICBwYWludGVyLmRyYXdSb3Vu
ZGVkUmVjdChwcm9ncmVzc1JlY3QsIHJhZGl1cywgcmFkaXVzKTsKICAgICAgICAgfQogICAgICAg
ICBRUGl4bWFwQ2FjaGU6Omluc2VydChrZXksIHJlc3VsdCk7CiAgICAgfQpAQCAtNDA2LDcgKzQ3
NCwyMCBAQCB2b2lkIFN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1Byb2dyZXNzKGNvbnN0IFFSZWN0
JiByZWN0LCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgbAogCiB2b2lkIFN0eWxlUGFpbnRlck1vYmls
ZTo6ZHJhd1NsaWRlclRodW1iKGNvbnN0IFFSZWN0ICYgcmVjdCwgYm9vbCBwcmVzc2VkKSBjb25z
dAogewotICAgIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIsIGJvcmRl
clBlbiwgcmVjdCwgcHJlc3NlZD8gUXQ6OmxpZ2h0R3JheSA6IGJ1dHRvbkdyYWRpZW50Qm90dG9t
KTsKKyAgICBzdGF0aWMgY29uc3QgUVN0cmluZyBwcmVmaXggPSBRTGF0aW4xU3RyaW5nKCIkcXQt
d2Via2l0LW1vYmlsZS10aGVtZS1zbGlkZXItdGh1bWItIik7CisgICAgUVBpeG1hcCByZXN1bHQ7
CisgICAgY29uc3QgUVNpemUgc2l6ZSA9IHNpemVGb3JQYWludGVyU2NhbGUocmVjdCk7CisgICAg
Y29uc3QgUVN0cmluZyBrZXkgPSBwcmVmaXggKyBRU3RyaW5nOjpudW1iZXIoc2l6ZS53aWR0aCgp
KTsKKyAgICBpZiAoIVFQaXhtYXBDYWNoZTo6ZmluZChrZXksICZyZXN1bHQpKSB7CisgICAgICAg
IGlmIChzaXplLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICByZXN1bHQg
PSBRUGl4bWFwKHNpemUpOworICAgICAgICByZXN1bHQuZmlsbChRdDo6dHJhbnNwYXJlbnQpOwor
ICAgICAgICBRUGFpbnRlciBjYWNoZVBhaW50ZXIoJnJlc3VsdCk7CisgICAgICAgIGRyYXdDb250
cm9sQmFja2dyb3VuZCgmY2FjaGVQYWludGVyLCBib3JkZXJQZW4ocGFpbnRlciksIFFSZWN0KFFQ
b2ludCgwLCAwKSwgc2l6ZSksIHByZXNzZWQ/IFF0OjpsaWdodEdyYXkgOiBidXR0b25HcmFkaWVu
dEJvdHRvbSk7CisgICAgICAgIFFQaXhtYXBDYWNoZTo6aW5zZXJ0KGtleSwgcmVzdWx0KTsKKyAg
ICB9CisgICAgcGFpbnRlci0+ZHJhd1BpeG1hcChyZWN0LCByZXN1bHQpOwogfQogCiAKQEAgLTQ5
MSw2ICs1NzIsMTYgQEAgdm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpjb21wdXRlU2l6ZUJhc2Vk
T25TdHlsZShSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUpIGNvbnMKICAgICAgICAgc2l6ZSA9IFFT
aXplKHcsIHcpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgY2FzZSBQdXNoQnV0dG9uUGFy
dDoKKyAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6CisgICAgY2FzZSBMaXN0QnV0dG9uUGFydDoK
KyAgICBjYXNlIERlZmF1bHRCdXR0b25QYXJ0OgorICAgIGNhc2UgQnV0dG9uUGFydDoKKyAgICBj
YXNlIE1lbnVsaXN0UGFydDogeworICAgICAgICBjb25zdCBpbnQgaGVpZ2h0ID0gZm0uaGVpZ2h0
KCkgKiBidXR0b25IZWlnaHRSYXRpbyAqIHJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCk7Cisg
ICAgICAgIHNpemUgPSBRU2l6ZShyZW5kZXJTdHlsZS0+d2lkdGgoKS52YWx1ZSgpLCBoZWlnaHQp
OworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpAQCAtNTY5LDEyICs2NjAsMjUgQEAgYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWlu
dFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY28KICAgICBD
b250cm9sUGFydCBhcHBlYXJhbmNlID0gby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOwogICAgIGlm
IChhcHBlYXJhbmNlICE9IFRleHRGaWVsZFBhcnQKICAgICAgICAgJiYgYXBwZWFyYW5jZSAhPSBT
ZWFyY2hGaWVsZFBhcnQKLSAgICAgICAgJiYgYXBwZWFyYW5jZSAhPSBUZXh0QXJlYVBhcnQKLSAg
ICAgICAgJiYgYXBwZWFyYW5jZSAhPSBMaXN0Ym94UGFydCkKKyAgICAgICAgJiYgYXBwZWFyYW5j
ZSAhPSBUZXh0QXJlYVBhcnQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gTm93IHBh
aW50IHRoZSB0ZXh0IGZpZWxkLgotICAgIHAuZHJhd0xpbmVFZGl0KHIsIGlzRm9jdXNlZChvKSwg
aXNFbmFibGVkKG8pKTsKKyAgICBpZiAoYXBwZWFyYW5jZSA9PSBUZXh0QXJlYVBhcnQpIHsKKyAg
ICAgICAgcC5wYWludGVyLT5zZXRQZW4oYm9yZGVyUGVuKCkpOworICAgICAgICBwLnBhaW50ZXIt
PnNldEJydXNoKFF0Ojp3aGl0ZSk7CisgICAgICAgIGNvbnN0IGludCByYWRpdXMgPSBjaGVja0Jv
eFdpZHRoICogcmFkaXVzRmFjdG9yOworICAgICAgICBwLnBhaW50ZXItPmRyYXdSb3VuZGVkUmVj
dChyLCByYWRpdXMsIHJhZGl1cyk7CisKKyAgICAgICAgaWYgKGlzRm9jdXNlZChvKSkgeworICAg
ICAgICAgICAgUVBlbiBmb2N1c1BlbihoaWdobGlnaHRDb2xvciwgMS4wLCBRdDo6U29saWRMaW5l
LCBRdDo6Um91bmRDYXAsIFF0OjpSb3VuZEpvaW4pOworICAgICAgICAgICAgcC5wYWludGVyLT5z
ZXRQZW4oZm9jdXNQZW4pOworICAgICAgICAgICAgcC5wYWludGVyLT5zZXRCcnVzaChRdDo6Tm9C
cnVzaCk7CisgICAgICAgICAgICBwLnBhaW50ZXItPmRyYXdSb3VuZGVkUmVjdChyLCByYWRpdXMs
IHJhZGl1cyk7CisgICAgICAgIH0KKworICAgIH0gZWxzZQorICAgICAgICBwLmRyYXdMaW5lRWRp
dChyLCBpc0ZvY3VzZWQobyksIGlzRW5hYmxlZChvKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9i
aWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmgK
aW5kZXggMzIxMjk1ODQ0N2ZkMjlmODQzMGRlZDJkMTczOWZiY2ZiY2E5MzgwNS4uOWU5YjgxNDNl
Y2ZlYjBmNjY5OGVkZDBiMTIxZTFmYTMyY2ZmNDExMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuaApAQCAtMTA1LDExICsxMDUsMTQgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGRyYXdSYWRpbyhRUGFpbnRlciosIGNvbnN0IFFTaXplJiwgYm9v
bCBjaGVja2VkLCBib29sIGVuYWJsZWQpIGNvbnN0OwogICAgIFFQaXhtYXAgZmluZFJhZGlvKGNv
bnN0IFFTaXplJiwgYm9vbCBjaGVja2VkLCBib29sIGVuYWJsZWQpIGNvbnN0OwogCi0gICAgUVNp
emUgZ2V0QnV0dG9uSW1hZ2VTaXplKGNvbnN0IFFTaXplJiwgYm9vbCBtdWx0aXBsZSkgY29uc3Q7
CisgICAgUVNpemUgZ2V0QnV0dG9uSW1hZ2VTaXplKGludCAsIGJvb2wgbXVsdGlwbGUpIGNvbnN0
OwogICAgIHZvaWQgZHJhd1NpbXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiwgY29uc3QgUVNpemUm
LCBjb25zdCBRQ29sb3ImKSBjb25zdDsKICAgICB2b2lkIGRyYXdNdWx0aXBsZUNvbWJvQnV0dG9u
KFFQYWludGVyKiwgY29uc3QgUVNpemUmLCBjb25zdCBRQ29sb3ImKSBjb25zdDsKICAgICBRUGl4
bWFwIGZpbmRDb21ib0J1dHRvbihjb25zdCBRU2l6ZSYsIGJvb2wgbXVsdGlwbGUsIGJvb2wgZW5h
YmxlZCkgY29uc3Q7CiAKKyAgICBRUGl4bWFwIGZpbmRMaW5lRWRpdChjb25zdCBRU2l6ZSYsIGJv
b2wgZm9jdXNlZCkgY29uc3Q7CisgICAgUVBpeG1hcCBmaW5kUHVzaEJ1dHRvbihjb25zdCBRU2l6
ZSYsIGJvb2wgc3Vua2VuLCBib29sIGVuYWJsZWQpIGNvbnN0OworCiAgICAgUVNpemUgc2l6ZUZv
clBhaW50ZXJTY2FsZShjb25zdCBRUmVjdCYpIGNvbnN0OwogCiAgICAgYm9vbCBtX3ByZXZpb3Vz
U21vb3RoUGl4bWFwVHJhbnNmb3JtOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120024</attachid>
            <date>2011-12-20 06:48:19 -0800</date>
            <delta_ts>2011-12-21 05:48:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74727-20111220154816.patch</filename>
            <type>text/plain</type>
            <size>22437</size>
            <attacher name="Pierre Rossi">pierre.rossi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMjI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGJmMWNlZGNjNmRiYjE1
ZWJkYzRlNDU5N2RjNTZiY2M2MTdhZTg1OC4uODMyNTQ3MzkzZjdjZjQ4ZjYyNmQ4NDc3ZDYyNGVh
ZjkzZTI2ZTAxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDExLTEyLTE5ICBQaWVy
cmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgorCisgICAgICAgIFtRdF0gTW9iaWxl
IHRoZW1lIHJlZmluZW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03NDcyNworCisgICAgICAgIE1vc3RseSB0byByZXBsYWNlIG1vc3Qgb2YgdGhl
IHJvdW5kZWQtcmVjdC1zaGFwZWQKKyAgICAgICAgY29udHJvbHMgd2l0aCBzcXVpcmNsZS1zaGFw
ZWQgb25lcy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMgbmVlZGVkLgorCisgICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVyVGhl
bWVRdE1vYmlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkcmF3Q29udHJvbEJhY2tncm91bmQp
OgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRlclNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmJv
cmRlclBlbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdDaGVj
a2FibGVCYWNrZ3JvdW5kKTogVG9uZWQgZG93biB0aGUgZ3JhZGllbnQgYSBiaXQuCisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRDaGVja0JveCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdSYWRpbyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVBhaW50ZXJNb2JpbGU6OmRyYXdNdWx0aXBsZUNvbWJvQnV0dG9uKTogaW5jcmVhc2Ugc3BhY2lu
ZyBiZXR3ZWVuIHRoZSBkb3RzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyTW9iaWxl
OjpkcmF3U2ltcGxlQ29tYm9CdXR0b24pOiBhdHRlbXB0IHRvIGltcHJvdmUgcmVhZGFiaWxpdHku
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmdldEJ1dHRvbkltYWdlU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRDb21ib0J1dHRv
bik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdMaW5lRWRpdCk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRMaW5lRWRpdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdQdXNoQnV0dG9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZFB1c2hCdXR0b24pOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3Q29tYm9Cb3gpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3UHJvZ3Jlc3MpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3U2xpZGVyVGh1bWIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6Y29tcHV0ZVNpemVCYXNlZE9uU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRUZXh0RmllbGQpOgor
ICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuaDoKKwogMjAxMS0xMi0x
OSAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2Vi
IEluc3BlY3RvcjogRmVhdHVyZSBSZXF1ZXN0OiBBYmxlIHRvIHJlbW92ZSBhbGwgYnJlYWtwb2lu
dHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0
TW9iaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2Jp
bGUuY3BwCmluZGV4IGVkNmU5YmE4YWVhNTE2ZmQzYWE3YjZmZjA3NGQ0OGZjMTE2OWM4NmUuLmNh
NDdjZjkzZGEwNGMzOTU4ZGMxYjRjOTI0MzdjNzY0M2NiZDBkYWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuY3BwCkBAIC02MCw4ICs2
MCw4IEBAIHN0YXRpYyBjb25zdCBpbnQgYXJyb3dCb3hXaWR0aCA9IDI2Owogc3RhdGljIGNvbnN0
IGludCBmcmFtZVdpZHRoID0gMjsKIHN0YXRpYyBjb25zdCBpbnQgY2hlY2tCb3hXaWR0aCA9IDIx
Owogc3RhdGljIGNvbnN0IGludCByYWRpb1dpZHRoID0gMjE7Ci1zdGF0aWMgY29uc3QgaW50IGJ1
dHRvbkljb25TaXplID0gMTY7Ci1zdGF0aWMgY29uc3QgaW50IHNsaWRlclNpemUgPSAxODsKK3N0
YXRpYyBjb25zdCBpbnQgc2xpZGVyU2l6ZSA9IDE5Oworc3RhdGljIGNvbnN0IGludCBidXR0b25I
ZWlnaHRSYXRpbyA9IDEuNTsKIAogc3RhdGljIGNvbnN0IGZsb2F0IGJ1dHRvblBhZGRpbmdMZWZ0
ID0gMTg7CiBzdGF0aWMgY29uc3QgZmxvYXQgYnV0dG9uUGFkZGluZ1JpZ2h0ID0gMTg7CkBAIC03
OSw5ICs3OSw4IEBAIHN0YXRpYyBjb25zdCBRQ29sb3IgZGFya0NvbG9yKDQwLCA0MCwgNDApOwog
c3RhdGljIGNvbnN0IFFDb2xvciBoaWdobGlnaHRDb2xvcigxNiwgMTI4LCAyMjEpOwogc3RhdGlj
IGNvbnN0IFFDb2xvciBidXR0b25HcmFkaWVudEJvdHRvbSgyNDUsIDI0NSwgMjQ1KTsKIHN0YXRp
YyBjb25zdCBRQ29sb3Igc2hhZG93Q29sb3IoODAsIDgwLCA4MCwgMTYwKTsKLXN0YXRpYyBjb25z
dCBRUGVuIGJvcmRlclBlbihkYXJrQ29sb3IsIDAuNCwgUXQ6OlNvbGlkTGluZSwgUXQ6OlJvdW5k
Q2FwLCBRdDo6Um91bmRKb2luKTsKIAotc3RhdGljIGlubGluZSB2b2lkIGRyYXdSZWN0YW5ndWxh
ckNvbnRyb2xCYWNrZ3JvdW5kKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRUGVuJiBwZW4sIGNv
bnN0IFFSZWN0JiByZWN0LCBjb25zdCBRQnJ1c2gmIGJydXNoKQorc3RhdGljIHZvaWQgZHJhd0Nv
bnRyb2xCYWNrZ3JvdW5kKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRUGVuJiBwZW4sIGNvbnN0
IFFSZWN0JiByZWN0LCBjb25zdCBRQnJ1c2gmIGJydXNoKQogewogICAgIFFQZW4gb2xkUGVuID0g
cGFpbnRlci0+cGVuKCk7CiAgICAgUUJydXNoIG9sZEJydXNoID0gcGFpbnRlci0+YnJ1c2goKTsK
QEAgLTkwLDggKzg5LDI5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkcmF3UmVjdGFuZ3VsYXJDb250
cm9sQmFja2dyb3VuZChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVBlCiAgICAgcGFpbnRlci0+
c2V0QnJ1c2goYnJ1c2gpOwogCiAgICAgY29uc3QgaW50IGxpbmUgPSAxOwotICAgIGNvbnN0IGRv
dWJsZSByYWRpdXMgPSByYWRpdXNGYWN0b3IgKiByZWN0LmhlaWdodCgpOwotICAgIHBhaW50ZXIt
PmRyYXdSb3VuZGVkUmVjdChyZWN0LmFkanVzdGVkKGxpbmUsIGxpbmUsIC1saW5lLCAtbGluZSks
IHJhZGl1cywgcmFkaXVzKTsKKyAgICBjb25zdCBRUmVjdCBwYWRkZWRSZWN0ID0gcmVjdC5hZGp1
c3RlZChsaW5lLCBsaW5lLCAtbGluZSwgLWxpbmUpOworCisgICAgY29uc3QgaW50IG4gPSAzOwor
ICAgIGNvbnN0IHFyZWFsIGludlBvdyA9IDEgLyBkb3VibGUobik7CisgICAgQVNTRVJUKHBhZGRl
ZFJlY3Qud2lkdGgoKSA+PSBwYWRkZWRSZWN0LmhlaWdodCgpKTsKKyAgICBjb25zdCBpbnQgcmFk
aXVzID0gcGFkZGVkUmVjdC5oZWlnaHQoKSAvIDI7CisgICAgY29uc3QgaW50IHhEZWx0YSA9IHBh
ZGRlZFJlY3Qud2lkdGgoKSAvIDIgLSByYWRpdXM7CisgICAgY29uc3QgUVBvaW50IGNlbnRlciA9
IHBhZGRlZFJlY3QudG9wTGVmdCgpICsgUVBvaW50KHhEZWx0YSArIHJhZGl1cywgcmFkaXVzKTsK
KyAgICBxcmVhbCB4LCB5OworICAgIFFQYWludGVyUGF0aCBwYXRoOworICAgIHBhdGgubW92ZVRv
KC14RGVsdGEsIC1yYWRpdXMpOworICAgIGZvciAoeSA9IC1yYWRpdXMgOyB5IDw9IHJhZGl1czsg
Kyt5KSB7CisgICAgICAgIHggPSAteERlbHRhIC0gcmFkaXVzICogcG93KDEgLSBwb3cocUFicyh5
KSAvIHJhZGl1cyAsIG4pLCBpbnZQb3cpOworICAgICAgICBwYXRoLmxpbmVUbyh4LCB5KTsKKyAg
ICB9CisgICAgZm9yICh5ID0gcmFkaXVzIDsgeSA+PSAtcmFkaXVzOyAtLXkpIHsKKyAgICAgICAg
eCA9ICB4RGVsdGEgKyByYWRpdXMgKiBwb3coMSAtIHBvdyhxQWJzKHkpIC8gcmFkaXVzICwgbiks
IGludlBvdyk7CisgICAgICAgIHBhdGgubGluZVRvKHgsIHkpOworICAgIH0KKyAgICBwYXRoLmNs
b3NlU3VicGF0aCgpOworICAgIHBhdGgudHJhbnNsYXRlKGNlbnRlcik7CisKKyAgICBwYWludGVy
LT5kcmF3UGF0aChwYXRoKTsKICAgICBwYWludGVyLT5zZXRQZW4ob2xkUGVuKTsKICAgICBwYWlu
dGVyLT5zZXRCcnVzaChvbGRCcnVzaCk7CiB9CkBAIC0xMDIsNiArMTIyLDE2IEBAIHN0YXRpYyBp
bmxpbmUgUVJlY3Qgc2hyaW5rUmVjdFRvU3F1YXJlKGNvbnN0IFFSZWN0JiByZWN0KQogICAgIHJl
dHVybiBRUmVjdChyZWN0LnRvcExlZnQoKSwgUVNpemUoc2lkZSwgc2lkZSkpOwogfQogCitzdGF0
aWMgaW5saW5lIHFyZWFsIHBhaW50ZXJTY2FsZShRUGFpbnRlciogcGFpbnRlcikKK3sKKyAgICBy
ZXR1cm4gcGFpbnRlciA/IHBhaW50ZXItPnRyYW5zZm9ybSgpLm0xMSgpIDogMTsKK30KKworc3Rh
dGljIGlubGluZSBRUGVuIGJvcmRlclBlbihRUGFpbnRlciogcGFpbnRlciA9IDApCit7CisgICAg
cmV0dXJuIFFQZW4oZGFya0NvbG9yLCAwLjQgKiBwYWludGVyU2NhbGUocGFpbnRlciksIFF0OjpT
b2xpZExpbmUsIFF0OjpSb3VuZENhcCwgUXQ6OlJvdW5kSm9pbik7Cit9CisKIFFTaGFyZWRQb2lu
dGVyPFN0eWxlUGFpbnRlcj4gUmVuZGVyVGhlbWVRdE1vYmlsZTo6Z2V0U3R5bGVQYWludGVyKGNv
bnN0IFBhaW50SW5mbyYgcGkpCiB7CiAgICAgcmV0dXJuIFFTaGFyZWRQb2ludGVyPFN0eWxlUGFp
bnRlcj4obmV3IFN0eWxlUGFpbnRlck1vYmlsZSh0aGlzLCBwaSkpOwpAQCAtMTMxLDEwICsxNjEs
MTAgQEAgdm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdDaGVja2FibGVCYWNrZ3JvdW5kKFFQ
YWludGVyKiBwYWludGVyLCBjb25zdCBRUmVjdCYKICAgICBncmFkaWVudC5zZXRTdGFydChyZWN0
LnRvcExlZnQoKSk7CiAgICAgZ3JhZGllbnQuc2V0RmluYWxTdG9wKHJlY3QuYm90dG9tTGVmdCgp
KTsKICAgICBncmFkaWVudC5zZXRDb2xvckF0KDAuMCwgY29sb3IpOwotICAgIGdyYWRpZW50LnNl
dENvbG9yQXQoMS4wLCBjb2xvci5saWdodGVyKCkpOworICAgIGdyYWRpZW50LnNldENvbG9yQXQo
MS4wLCBjb2xvci5saWdodGVyKDEzMCkpOwogICAgIGJydXNoID0gZ3JhZGllbnQ7CiAKLSAgICBk
cmF3UmVjdGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChwYWludGVyLCBib3JkZXJQZW4sIHJlY3Qs
IGJydXNoKTsKKyAgICBkcmF3Q29udHJvbEJhY2tncm91bmQocGFpbnRlciwgYm9yZGVyUGVuKHBh
aW50ZXIpLCByZWN0LCBicnVzaCk7CiB9CiAKIFFTaXplIFN0eWxlUGFpbnRlck1vYmlsZTo6c2l6
ZUZvclBhaW50ZXJTY2FsZShjb25zdCBRUmVjdCYgcmVjdCkgY29uc3QKQEAgLTE3MiwxMSArMjAy
LDExIEBAIFFQaXhtYXAgU3R5bGVQYWludGVyTW9iaWxlOjpmaW5kQ2hlY2tCb3goY29uc3QgUVNp
emUmIHNpemUsIGJvb2wgY2hlY2tlZCwgYm9vbCBlCiAgICAgaWYgKCFRUGl4bWFwQ2FjaGU6OmZp
bmQoa2V5LCByZXN1bHQpKSB7CiAgICAgICAgIHJlc3VsdCA9IFFQaXhtYXAoc2l6ZSk7CiAgICAg
ICAgIHJlc3VsdC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7Ci0gICAgICAgIFFQYWludGVyIHBhaW50
ZXIoJnJlc3VsdCk7CisgICAgICAgIFFQYWludGVyIGNhY2hlUGFpbnRlcigmcmVzdWx0KTsKICAg
ICAgICAgUVJlY3QgcmVjdChRUG9pbnQoMCwgMCksIHNpemUpOwotICAgICAgICBkcmF3Q2hlY2th
YmxlQmFja2dyb3VuZCgmcGFpbnRlciwgcmVjdCwgY2hlY2tlZCwgZW5hYmxlZCk7CisgICAgICAg
IGRyYXdDaGVja2FibGVCYWNrZ3JvdW5kKCZjYWNoZVBhaW50ZXIsIHJlY3QsIGNoZWNrZWQsIGVu
YWJsZWQpOwogICAgICAgICBpZiAoY2hlY2tlZCB8fCAhZW5hYmxlZCkKLSAgICAgICAgICAgIGRy
YXdDaGVja2VyKCZwYWludGVyLCByZWN0LCBlbmFibGVkID8gUXQ6OndoaXRlIDogUXQ6OmdyYXkp
OworICAgICAgICAgICAgZHJhd0NoZWNrZXIoJmNhY2hlUGFpbnRlciwgcmVjdCwgZW5hYmxlZCA/
IFF0Ojp3aGl0ZSA6IFF0OjpncmF5KTsKICAgICAgICAgUVBpeG1hcENhY2hlOjppbnNlcnQoa2V5
LCByZXN1bHQpOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTkwLDcgKzIyMCw3IEBA
IHZvaWQgU3R5bGVQYWludGVyTW9iaWxlOjpkcmF3UmFkaW8oUVBhaW50ZXIqIHBhaW50ZXIsIGNv
bnN0IFFTaXplJiBzaXplLCBib29sIGNoCiAgICAgZHJhd0NoZWNrYWJsZUJhY2tncm91bmQocGFp
bnRlciwgcmVjdCwgY2hlY2tlZCwgZW5hYmxlZCk7CiAgICAgY29uc3QgaW50IGJvcmRlciA9IHNp
emUud2lkdGgoKSAvIDQ7CiAgICAgcmVjdC5hZGp1c3QoYm9yZGVyLCBib3JkZXIsIC1ib3JkZXIs
IC1ib3JkZXIpOwotICAgIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIs
IGJvcmRlclBlbiwgcmVjdCwgZW5hYmxlZCA/IFF0Ojp3aGl0ZSA6IFF0OjpncmF5KTsKKyAgICBk
cmF3Q29udHJvbEJhY2tncm91bmQocGFpbnRlciwgYm9yZGVyUGVuKCksIHJlY3QsIGVuYWJsZWQg
PyBRdDo6d2hpdGUgOiBRdDo6Z3JheSk7CiB9CiAKIFFQaXhtYXAgU3R5bGVQYWludGVyTW9iaWxl
OjpmaW5kUmFkaW8oY29uc3QgUVNpemUmIHNpemUsIGJvb2wgY2hlY2tlZCwgYm9vbCBlbmFibGVk
KSBjb25zdApAQCAtMjAyLDggKzIzMiw4IEBAIFFQaXhtYXAgU3R5bGVQYWludGVyTW9iaWxlOjpm
aW5kUmFkaW8oY29uc3QgUVNpemUmIHNpemUsIGJvb2wgY2hlY2tlZCwgYm9vbCBlbmFiCiAgICAg
aWYgKCFRUGl4bWFwQ2FjaGU6OmZpbmQoa2V5LCByZXN1bHQpKSB7CiAgICAgICAgIHJlc3VsdCA9
IFFQaXhtYXAoc2l6ZSk7CiAgICAgICAgIHJlc3VsdC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7Ci0g
ICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnJlc3VsdCk7Ci0gICAgICAgIGRyYXdSYWRpbygmcGFp
bnRlciwgc2l6ZSwgY2hlY2tlZCwgZW5hYmxlZCk7CisgICAgICAgIFFQYWludGVyIGNhY2hlUGFp
bnRlcigmcmVzdWx0KTsKKyAgICAgICAgZHJhd1JhZGlvKCZjYWNoZVBhaW50ZXIsIHNpemUsIGNo
ZWNrZWQsIGVuYWJsZWQpOwogICAgICAgICBRUGl4bWFwQ2FjaGU6Omluc2VydChrZXksIHJlc3Vs
dCk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkBAIC0yMTgsNyArMjQ4LDcgQEAgdm9pZCBT
dHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdNdWx0aXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWlu
dGVyLCBjb25zdCBRU2l6ZSYKICAgICBwYWludGVyLT5zZXRQZW4oY29sb3IpOwogICAgIHBhaW50
ZXItPnNldEJydXNoKGNvbG9yKTsKIAotICAgIGNvbnN0IHFyZWFsIG9mZnNldEZhY3RvciA9IDEu
NjsKKyAgICBjb25zdCBxcmVhbCBvZmZzZXRGYWN0b3IgPSAxLjg7CiAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCAzOyArK2kpIHsKICAgICAgICAgUVBvaW50RiBjZW50ZXIob2Zmc2V0RmFjdG9yICog
ZG90UmFkaWkgKyBpICogb2Zmc2V0RmFjdG9yICogZG90RGlhbWV0ZXIsIGRvdFJhZGlpKTsKICAg
ICAgICAgcGFpbnRlci0+ZHJhd0VsbGlwc2UoY2VudGVyLCBkb3RSYWRpaSwgZG90UmFkaWkpOwpA
QCAtMjI3LDM3ICsyNTcsMjggQEAgdm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdNdWx0aXBs
ZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6ZSYKIAogdm9pZCBTdHls
ZVBhaW50ZXJNb2JpbGU6OmRyYXdTaW1wbGVDb21ib0J1dHRvbihRUGFpbnRlciogcGFpbnRlciwg
Y29uc3QgUVNpemUmIHNpemUsIGNvbnN0IFFDb2xvciYgY29sb3IpIGNvbnN0CiB7Ci0gICAgY29u
c3QgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwotICAgIGNvbnN0IGludCBoZWlnaHQgPSBzaXpl
LmhlaWdodCgpOwotICAgIGNvbnN0IGludCBob3Jpem9udGFsQ2VudGVyID0gd2lkdGggLyAyOwot
ICAgIGNvbnN0IGludCB2ZXJ0aWNhbENlbnRlciA9IGhlaWdodCAvIDI7Ci0gICAgY29uc3QgaW50
IHNwYWNpbmcgPSAxICsgaGVpZ2h0IC8gMTU7Ci0KLSAgICBRVmVjdG9yPFFMaW5lPiBsaW5lcygy
ICogd2lkdGgpOwotICAgIGludCBsZW5ndGggPSAwOwotICAgIGZvciAoaW50IHggPSAwOyB4IDwg
aG9yaXpvbnRhbENlbnRlciA7IHgrKykgewotICAgICAgICBsZW5ndGgrKzsKLSAgICAgICAgbGlu
ZXNbeF0gPSBRTGluZSh4LCB2ZXJ0aWNhbENlbnRlciArIHNwYWNpbmcsIHgsIHZlcnRpY2FsQ2Vu
dGVyICsgc3BhY2luZyArIGxlbmd0aCk7Ci0gICAgICAgIGxpbmVzWzIgKiB3aWR0aCAtIHggLSAx
XSA9IFFMaW5lKHgsIHZlcnRpY2FsQ2VudGVyIC0gc3BhY2luZywgeCwgdmVydGljYWxDZW50ZXIg
LSBzcGFjaW5nIC0gbGVuZ3RoKTsKLSAgICB9Ci0gICAgZm9yIChpbnQgeCA9IGhvcml6b250YWxD
ZW50ZXI7IHggPCB3aWR0aDsgeCsrKSB7Ci0gICAgICAgIGxpbmVzW3hdID0gUUxpbmUoeCwgdmVy
dGljYWxDZW50ZXIgKyBzcGFjaW5nLCB4LCB2ZXJ0aWNhbENlbnRlciArIHNwYWNpbmcgKyBsZW5n
dGgpOwotICAgICAgICBsaW5lc1syICogd2lkdGggLSB4IC0gMV0gPSBRTGluZSh4LCB2ZXJ0aWNh
bENlbnRlciAtIHNwYWNpbmcsIHgsIHZlcnRpY2FsQ2VudGVyIC0gc3BhY2luZyAtIGxlbmd0aCk7
Ci0gICAgICAgIGxlbmd0aC0tOwotICAgIH0KKyAgICBjb25zdCBpbnQgZ2FwID0gKHNpemUuaGVp
Z2h0KCkgLSAxKSAvIDU7CisgICAgY29uc3QgaW50IGFycm93SGVpZ2h0ID0gMiAqIGdhcDsKKyAg
ICBjb25zdCBpbnQgcmlnaHQgPSBhcnJvd0hlaWdodCAqIDI7CisgICAgY29uc3QgaW50IGJvdHRv
bUJhc2VsaW5lID0gYXJyb3dIZWlnaHQgKyBnYXAgKyAxOworICAgIFFQb2x5Z29uIHVwQXJyb3cs
IGRvd25BcnJvdzsKKyAgICB1cEFycm93IDw8IFFQb2ludCgwLCBhcnJvd0hlaWdodCkgPDwgUVBv
aW50KGFycm93SGVpZ2h0LCAwKSA8PCBRUG9pbnQocmlnaHQsIGFycm93SGVpZ2h0KTsKKyAgICBk
b3duQXJyb3cgPDwgUVBvaW50KDAsIGJvdHRvbUJhc2VsaW5lKSA8PCBRUG9pbnQoYXJyb3dIZWln
aHQsIGJvdHRvbUJhc2VsaW5lICsgYXJyb3dIZWlnaHQpCisgICAgICAgICAgICAgIDw8IFFQb2lu
dChyaWdodCwgYm90dG9tQmFzZWxpbmUpOwogCiAgICAgcGFpbnRlci0+c2V0UGVuKGNvbG9yKTsK
ICAgICBwYWludGVyLT5zZXRCcnVzaChjb2xvcik7Ci0gICAgcGFpbnRlci0+ZHJhd0xpbmVzKGxp
bmVzKTsKKyAgICBwYWludGVyLT5kcmF3UG9seWdvbih1cEFycm93KTsKKyAgICBwYWludGVyLT5k
cmF3UG9seWdvbihkb3duQXJyb3cpOwogfQogCi1RU2l6ZSBTdHlsZVBhaW50ZXJNb2JpbGU6Omdl
dEJ1dHRvbkltYWdlU2l6ZShjb25zdCBRU2l6ZSYgYnV0dG9uU2l6ZSwgYm9vbCBtdWx0aXBsZSkg
Y29uc3QKK1FTaXplIFN0eWxlUGFpbnRlck1vYmlsZTo6Z2V0QnV0dG9uSW1hZ2VTaXplKGludCBi
dXR0b25IZWlnaHQsIGJvb2wgbXVsdGlwbGUpIGNvbnN0CiB7CiAgICAgaWYgKG11bHRpcGxlKQot
ICAgICAgICByZXR1cm4gUVNpemUoYnV0dG9uU2l6ZS53aWR0aCgpLCBidXR0b25TaXplLndpZHRo
KCkgLyA1KTsKKyAgICAgICAgcmV0dXJuIFFTaXplKGJ1dHRvbkhlaWdodCAvIDIsIGJ1dHRvbkhl
aWdodCAvIDEwKTsKIAotICAgIGNvbnN0IGludCBoZWlnaHQgPSBidXR0b25TaXplLmhlaWdodCgp
IC8gMiArIGZyYW1lV2lkdGg7Ci0gICAgY29uc3QgaW50IHdpZHRoID0gaGVpZ2h0IC0gKDIgKiAo
MSArIGhlaWdodCAvIDE1KSkgLSAxOworICAgIGNvbnN0IGludCBoZWlnaHQgPSBidXR0b25IZWln
aHQgLyAyLjU7CisgICAgY29uc3QgaW50IHdpZHRoID0gNCAqIGhlaWdodCAvIDU7CiAgICAgcmV0
dXJuIFFTaXplKHdpZHRoLCBoZWlnaHQpOwogfQogCkBAIC0yNzQsMTEgKzI5NSwxMSBAQCBRUGl4
bWFwIFN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZENvbWJvQnV0dG9uKGNvbnN0IFFTaXplJiBzaXpl
LCBib29sIG11bHRpcGxlLCBibwogICAgIGlmICghUVBpeG1hcENhY2hlOjpmaW5kKGtleSwgcmVz
dWx0KSkgewogICAgICAgICByZXN1bHQgPSBRUGl4bWFwKHNpemUpOwogICAgICAgICByZXN1bHQu
ZmlsbChRdDo6dHJhbnNwYXJlbnQpOwotICAgICAgICBRUGFpbnRlciBwYWludGVyKCZyZXN1bHQp
OworICAgICAgICBRUGFpbnRlciBjYWNoZVBhaW50ZXIoJnJlc3VsdCk7CiAgICAgICAgIGlmICht
dWx0aXBsZSkKLSAgICAgICAgICAgIGRyYXdNdWx0aXBsZUNvbWJvQnV0dG9uKCZwYWludGVyLCBz
aXplLCBlbmFibGVkID8gZGFya0NvbG9yIDogUXQ6OmxpZ2h0R3JheSk7CisgICAgICAgICAgICBk
cmF3TXVsdGlwbGVDb21ib0J1dHRvbigmY2FjaGVQYWludGVyLCBzaXplLCBlbmFibGVkID8gZGFy
a0NvbG9yIDogUXQ6OmxpZ2h0R3JheSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRyYXdT
aW1wbGVDb21ib0J1dHRvbigmcGFpbnRlciwgc2l6ZSwgZW5hYmxlZCA/IGRhcmtDb2xvciA6IFF0
OjpsaWdodEdyYXkpOworICAgICAgICAgICAgZHJhd1NpbXBsZUNvbWJvQnV0dG9uKCZjYWNoZVBh
aW50ZXIsIHNpemUsIGVuYWJsZWQgPyBkYXJrQ29sb3IgOiBRdDo6bGlnaHRHcmF5KTsKICAgICAg
ICAgUVBpeG1hcENhY2hlOjppbnNlcnQoa2V5LCByZXN1bHQpOwogICAgIH0KICAgICByZXR1cm4g
cmVzdWx0OwpAQCAtMjg2LDEyICszMDcsMzQgQEAgUVBpeG1hcCBTdHlsZVBhaW50ZXJNb2JpbGU6
OmZpbmRDb21ib0J1dHRvbihjb25zdCBRU2l6ZSYgc2l6ZSwgYm9vbCBtdWx0aXBsZSwgYm8KIAog
dm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdMaW5lRWRpdChjb25zdCBRUmVjdCYgcmVjdCwg
Ym9vbCBmb2N1c2VkLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJv
bEJhY2tncm91bmQocGFpbnRlciwgYm9yZGVyUGVuLCByZWN0LCBRdDo6d2hpdGUpOworICAgIFFf
VU5VU0VEKGVuYWJsZWQpOworICAgIFFQaXhtYXAgbGluZUVkaXQgPSBmaW5kTGluZUVkaXQoc2l6
ZUZvclBhaW50ZXJTY2FsZShyZWN0KSwgZm9jdXNlZCk7CisgICAgaWYgKGxpbmVFZGl0LmlzTnVs
bCgpKQorICAgICAgICByZXR1cm47CisgICAgcGFpbnRlci0+ZHJhd1BpeG1hcChyZWN0LCBsaW5l
RWRpdCk7Cit9CisKK1FQaXhtYXAgU3R5bGVQYWludGVyTW9iaWxlOjpmaW5kTGluZUVkaXQoY29u
c3QgUVNpemUgJiBzaXplLCBib29sIGZvY3VzZWQpIGNvbnN0Cit7CisgICAgUVBpeG1hcCByZXN1
bHQ7CisgICAgc3RhdGljIGNvbnN0IFFTdHJpbmcgcHJlZml4ID0gUUxhdGluMVN0cmluZygiJHF0
LXdlYmtpdC1tb2JpbGUtdGhlbWUtbGluZUVkaXQtIik7CisgICAgUVN0cmluZyBrZXkgPSBwcmVm
aXggKyBRU3RyaW5nOjpudW1iZXIoc2l6ZS53aWR0aCgpKSArIFFMYXRpbjFTdHJpbmcoIngiKSAr
IFFTdHJpbmc6Om51bWJlcihzaXplLmhlaWdodCgpKQorICAgICAgICAgICAgICAgICAgICAgICsg
KGZvY3VzZWQgPyBRTGF0aW4xU3RyaW5nKCItZm9jdXNlZCIpIDogUVN0cmluZygpKTsKKyAgICBp
ZiAoIVFQaXhtYXBDYWNoZTo6ZmluZChrZXksIHJlc3VsdCkpIHsKKyAgICAgICAgY29uc3QgaW50
IGZvY3VzRnJhbWUgPSBwYWludGVyU2NhbGUocGFpbnRlcik7CisgICAgICAgIHJlc3VsdCA9IFFQ
aXhtYXAoc2l6ZSArIFFTaXplKDIgKiBmb2N1c0ZyYW1lLCAyICogZm9jdXNGcmFtZSkpOworICAg
ICAgICByZXN1bHQuZmlsbChRdDo6dHJhbnNwYXJlbnQpOworICAgICAgICBjb25zdCBRUmVjdCBy
ZWN0ID0gcmVzdWx0LnJlY3QoKS5hZGp1c3RlZChmb2N1c0ZyYW1lLCBmb2N1c0ZyYW1lLCAtZm9j
dXNGcmFtZSwgLWZvY3VzRnJhbWUpOworICAgICAgICBRUGFpbnRlciBjYWNoZVBhaW50ZXIoJnJl
c3VsdCk7CisgICAgICAgIGRyYXdDb250cm9sQmFja2dyb3VuZCgmY2FjaGVQYWludGVyLCBib3Jk
ZXJQZW4ocGFpbnRlciksIHJlY3QsIFF0Ojp3aGl0ZSk7CiAKLSAgICBpZiAoZm9jdXNlZCkgewot
ICAgICAgICBRUGVuIGZvY3VzUGVuKGhpZ2hsaWdodENvbG9yLCBmbG9hdChyZWN0LmhlaWdodCgp
IC8gMjYuMCksIFF0OjpTb2xpZExpbmUsIFF0OjpSb3VuZENhcCwgUXQ6OlJvdW5kSm9pbik7Ci0g
ICAgICAgIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIsIGZvY3VzUGVu
LCByZWN0LCBRdDo6Tm9CcnVzaCk7CisgICAgICAgIGlmIChmb2N1c2VkKSB7CisgICAgICAgICAg
ICBRUGVuIGZvY3VzUGVuKGhpZ2hsaWdodENvbG9yLCBmb2N1c0ZyYW1lLCBRdDo6U29saWRMaW5l
LCBRdDo6Um91bmRDYXAsIFF0OjpSb3VuZEpvaW4pOworICAgICAgICAgICAgZHJhd0NvbnRyb2xC
YWNrZ3JvdW5kKCZjYWNoZVBhaW50ZXIsIGZvY3VzUGVuLCByZWN0LCBRdDo6Tm9CcnVzaCk7Cisg
ICAgICAgIH0KKyAgICAgICAgUVBpeG1hcENhY2hlOjppbnNlcnQoa2V5LCByZXN1bHQpOwogICAg
IH0KKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIFN0eWxlUGFpbnRlck1vYmlsZTo6ZHJh
d0NoZWNrQm94KGNvbnN0IFFSZWN0JiByZWN0LCBib29sIGNoZWNrZWQsIGJvb2wgZW5hYmxlZCkK
QEAgLTMxNCw0NiArMzU3LDU5IEBAIHZvaWQgU3R5bGVQYWludGVyTW9iaWxlOjpkcmF3UmFkaW9C
dXR0b24oY29uc3QgUVJlY3QmIHJlY3QsIGJvb2wgY2hlY2tlZCwgYm9vbCBlCiAKIHZvaWQgU3R5
bGVQYWludGVyTW9iaWxlOjpkcmF3UHVzaEJ1dHRvbihjb25zdCBRUmVjdCYgcmVjdCwgYm9vbCBz
dW5rZW4sIGJvb2wgZW5hYmxlZCkKIHsKLSAgICBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFja2dy
b3VuZChwYWludGVyLCBRdDo6Tm9QZW4sIHJlY3QuYWRqdXN0ZWQoMCwgMSwgMCwgMSksIHNoYWRv
d0NvbG9yKTsKKyAgICBRUGl4bWFwIHB1c2hCdXR0b24gPSBmaW5kUHVzaEJ1dHRvbihzaXplRm9y
UGFpbnRlclNjYWxlKHJlY3QpLCBzdW5rZW4sIGVuYWJsZWQpOworICAgIGlmIChwdXNoQnV0dG9u
LmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisgICAgcGFpbnRlci0+ZHJhd1BpeG1hcChyZWN0
LCBwdXNoQnV0dG9uKTsKK30KIAotICAgIFFCcnVzaCBicnVzaDsKLSAgICBpZiAoZW5hYmxlZCAm
JiAhc3Vua2VuKSB7Ci0gICAgICAgIFFMaW5lYXJHcmFkaWVudCBsaW5lYXJHcmFkaWVudDsKLSAg
ICAgICAgbGluZWFyR3JhZGllbnQuc2V0U3RhcnQocmVjdC5ib3R0b21MZWZ0KCkpOwotICAgICAg
ICBsaW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0b3AocmVjdC50b3BMZWZ0KCkpOwotICAgICAgICBs
aW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwgYnV0dG9uR3JhZGllbnRCb3R0b20pOwotICAg
ICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDEuMCwgUXQ6OndoaXRlKTsKLSAgICAgICAg
YnJ1c2ggPSBsaW5lYXJHcmFkaWVudDsKLSAgICB9IGVsc2UgaWYgKCFlbmFibGVkKQotICAgICAg
ICBicnVzaCA9IFFDb2xvcigyNDEsIDI0MiwgMjQzKTsKLSAgICBlbHNlIHsgLy8gc3Vua2VuCi0g
ICAgICAgIFFMaW5lYXJHcmFkaWVudCBsaW5lYXJHcmFkaWVudDsKLSAgICAgICAgbGluZWFyR3Jh
ZGllbnQuc2V0U3RhcnQocmVjdC5ib3R0b21MZWZ0KCkpOwotICAgICAgICBsaW5lYXJHcmFkaWVu
dC5zZXRGaW5hbFN0b3AocmVjdC50b3BMZWZ0KCkpOwotICAgICAgICBsaW5lYXJHcmFkaWVudC5z
ZXRDb2xvckF0KDAuMCwgaGlnaGxpZ2h0Q29sb3IpOwotICAgICAgICBsaW5lYXJHcmFkaWVudC5z
ZXRDb2xvckF0KDEuMCwgaGlnaGxpZ2h0Q29sb3IubGlnaHRlcigpKTsKLSAgICAgICAgYnJ1c2gg
PSBsaW5lYXJHcmFkaWVudDsKK1FQaXhtYXAgU3R5bGVQYWludGVyTW9iaWxlOjpmaW5kUHVzaEJ1
dHRvbihjb25zdCBRU2l6ZSYgc2l6ZSwgYm9vbCBzdW5rZW4sIGJvb2wgZW5hYmxlZCkgY29uc3QK
K3sKKyAgICBRUGl4bWFwIHJlc3VsdDsKKyAgICBzdGF0aWMgY29uc3QgUVN0cmluZyBwcmVmaXgg
PSBRTGF0aW4xU3RyaW5nKCIkcXQtd2Via2l0LW1vYmlsZS10aGVtZS1wdXNoQnV0dG9uLSIpOwor
ICAgIFFTdHJpbmcga2V5ID0gcHJlZml4ICsgUVN0cmluZzo6bnVtYmVyKHNpemUud2lkdGgoKSkg
KyBRTGF0aW4xU3RyaW5nKCJ4IikgKyBRU3RyaW5nOjpudW1iZXIoc2l6ZS5oZWlnaHQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICArIChzdW5rZW4gPyBRTGF0aW4xU3RyaW5nKCItc3Vua2VuIikg
OiBRU3RyaW5nKCkpICsgKGVuYWJsZWQgPyBRTGF0aW4xU3RyaW5nKCItb24iKSA6IFFTdHJpbmco
KSk7CisgICAgaWYgKCFRUGl4bWFwQ2FjaGU6OmZpbmQoa2V5LCByZXN1bHQpKSB7CisgICAgICAg
IGNvbnN0IHFyZWFsIGRyb3BTaGFkb3dTaXplID0gcGFpbnRlclNjYWxlKHBhaW50ZXIpOworICAg
ICAgICByZXN1bHQgPSBRUGl4bWFwKHNpemUpOworICAgICAgICByZXN1bHQuZmlsbChRdDo6dHJh
bnNwYXJlbnQpOworICAgICAgICBjb25zdCBRUmVjdCByZWN0ID0gUVJlY3QoMCwgMCwgc2l6ZS53
aWR0aCgpLCBzaXplLmhlaWdodCgpIC0gZHJvcFNoYWRvd1NpemUpOworICAgICAgICBRUGFpbnRl
ciBjYWNoZVBhaW50ZXIoJnJlc3VsdCk7CisgICAgICAgIGRyYXdDb250cm9sQmFja2dyb3VuZCgm
Y2FjaGVQYWludGVyLCBRdDo6Tm9QZW4sIHJlY3QuYWRqdXN0ZWQoMCwgZHJvcFNoYWRvd1NpemUs
IDAsIGRyb3BTaGFkb3dTaXplKSwgc2hhZG93Q29sb3IpOworCisgICAgICAgIFFCcnVzaCBicnVz
aDsKKyAgICAgICAgaWYgKGVuYWJsZWQgJiYgIXN1bmtlbikgeworICAgICAgICAgICAgUUxpbmVh
ckdyYWRpZW50IGxpbmVhckdyYWRpZW50OworICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0
U3RhcnQocmVjdC5ib3R0b21MZWZ0KCkpOworICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0
RmluYWxTdG9wKHJlY3QudG9wTGVmdCgpKTsKKyAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNl
dENvbG9yQXQoMC4wLCBidXR0b25HcmFkaWVudEJvdHRvbSk7CisgICAgICAgICAgICBsaW5lYXJH
cmFkaWVudC5zZXRDb2xvckF0KDEuMCwgUXQ6OndoaXRlKTsKKyAgICAgICAgICAgIGJydXNoID0g
bGluZWFyR3JhZGllbnQ7CisgICAgICAgIH0gZWxzZSBpZiAoIWVuYWJsZWQpCisgICAgICAgICAg
ICBicnVzaCA9IFFDb2xvcigyNDEsIDI0MiwgMjQzKTsKKyAgICAgICAgZWxzZSB7IC8vIHN1bmtl
bgorICAgICAgICAgICAgUUxpbmVhckdyYWRpZW50IGxpbmVhckdyYWRpZW50OworICAgICAgICAg
ICAgbGluZWFyR3JhZGllbnQuc2V0U3RhcnQocmVjdC5ib3R0b21MZWZ0KCkpOworICAgICAgICAg
ICAgbGluZWFyR3JhZGllbnQuc2V0RmluYWxTdG9wKHJlY3QudG9wTGVmdCgpKTsKKyAgICAgICAg
ICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBoaWdobGlnaHRDb2xvcik7CisgICAg
ICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDEuMCwgaGlnaGxpZ2h0Q29sb3IubGln
aHRlcigpKTsKKyAgICAgICAgICAgIGJydXNoID0gbGluZWFyR3JhZGllbnQ7CisgICAgICAgIH0K
KyAgICAgICAgZHJhd0NvbnRyb2xCYWNrZ3JvdW5kKCZjYWNoZVBhaW50ZXIsIGJvcmRlclBlbihw
YWludGVyKSwgcmVjdCwgYnJ1c2gpOworICAgICAgICBRUGl4bWFwQ2FjaGU6Omluc2VydChrZXks
IHJlc3VsdCk7CiAgICAgfQotCi0gICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQo
cGFpbnRlciwgYm9yZGVyUGVuLCByZWN0LCBicnVzaCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogdm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdDb21ib0JveChjb25zdCBRUmVjdCYgcmVj
dCwgYm9vbCBtdWx0aXBsZSwgYm9vbCBlbmFibGVkKQogewotICAgIGRyYXdSZWN0YW5ndWxhckNv
bnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIsIFF0OjpOb1BlbiwgcmVjdC5hZGp1c3RlZCgwLCAxLCAw
LCAyKSwgc2hhZG93Q29sb3IpOwotCi0gICAgUUxpbmVhckdyYWRpZW50IGxpbmVhckdyYWRpZW50
OwotICAgIGxpbmVhckdyYWRpZW50LnNldFN0YXJ0KHJlY3QuYm90dG9tTGVmdCgpKTsKLSAgICBs
aW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0b3AocmVjdC50b3BMZWZ0KCkpOwotICAgIGxpbmVhckdy
YWRpZW50LnNldENvbG9yQXQoMC4wLCBidXR0b25HcmFkaWVudEJvdHRvbSk7Ci0gICAgbGluZWFy
R3JhZGllbnQuc2V0Q29sb3JBdCgxLjAsIFF0Ojp3aGl0ZSk7Ci0KLSAgICBkcmF3UmVjdGFuZ3Vs
YXJDb250cm9sQmFja2dyb3VuZChwYWludGVyLCBib3JkZXJQZW4sIHJlY3QsIGxpbmVhckdyYWRp
ZW50KTsKLQotICAgIGNvbnN0IFFSZWN0IGJ1dHRvblJlY3QocmVjdC54KCkgKyByZWN0LndpZHRo
KCkgLSBmcmFtZVdpZHRoIC0gYXJyb3dCb3hXaWR0aCwgcmVjdC55KCkgKyBmcmFtZVdpZHRoCi0g
ICAgICAgICAgICAgICAgICAgLCByZWN0LmhlaWdodCgpLCByZWN0LmhlaWdodCgpIC0gMiAqIGZy
YW1lV2lkdGgpOwotICAgIFFSZWN0IHRhcmdldFJlY3QoUVBvaW50KDAsIDApLCBnZXRCdXR0b25J
bWFnZVNpemUoYnV0dG9uUmVjdC5zaXplKCksIG11bHRpcGxlKSk7Ci0gICAgdGFyZ2V0UmVjdC5t
b3ZlQ2VudGVyKGJ1dHRvblJlY3QuY2VudGVyKCkpOworICAgIFFQaXhtYXAgcHVzaEJ1dHRvbiA9
IGZpbmRQdXNoQnV0dG9uKHNpemVGb3JQYWludGVyU2NhbGUocmVjdCksIC8qc3Vua2VuID0gKi9m
YWxzZSwgZW5hYmxlZCk7CisgICAgaWYgKHB1c2hCdXR0b24uaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBwYWludGVyLT5kcmF3UGl4bWFwKHJlY3QsIHB1c2hCdXR0b24pOworICAgIFFS
ZWN0IHRhcmdldFJlY3QoUVBvaW50KDAsIDApLCBnZXRCdXR0b25JbWFnZVNpemUocmVjdC5oZWln
aHQoKSAtIDEsIG11bHRpcGxlKSk7CisgICAgY29uc3QgUVBvaW50IGJ1dHRvbkNlbnRlcihyZWN0
LnJpZ2h0KCkgLSBhcnJvd0JveFdpZHRoIC8gMiwgcmVjdC5oZWlnaHQoKSAvIDIgLSAxKTsKKyAg
ICB0YXJnZXRSZWN0Lm1vdmVDZW50ZXIoYnV0dG9uQ2VudGVyKTsKICAgICBRUGl4bWFwIHBpYyA9
IGZpbmRDb21ib0J1dHRvbihzaXplRm9yUGFpbnRlclNjYWxlKHRhcmdldFJlY3QpLCBtdWx0aXBs
ZSwgZW5hYmxlZCk7CiAgICAgaWYgKHBpYy5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
Mzc4LDggKzQzNCwxMyBAQCB2b2lkIFN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1Byb2dyZXNzKGNv
bnN0IFFSZWN0JiByZWN0LCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgbAogICAgICAgICByZXN1bHQg
PSBRUGl4bWFwKGltYWdlU2l6ZSk7CiAgICAgICAgIHJlc3VsdC5maWxsKFF0Ojp0cmFuc3BhcmVu
dCk7CiAgICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnJlc3VsdCk7CisgICAgICAgIHBhaW50ZXIu
c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nKTsKICAgICAgICAgUVJlY3QgcHJv
Z3Jlc3NSZWN0KFFQb2ludCgwLCAwKSwgaW1hZ2VTaXplKTsKLSAgICAgICAgZHJhd1JlY3Rhbmd1
bGFyQ29udHJvbEJhY2tncm91bmQoJnBhaW50ZXIsIGJvcmRlclBlbiwgcHJvZ3Jlc3NSZWN0LCBR
dDo6d2hpdGUpOworICAgICAgICBxcmVhbCByYWRpdXMgPSByYWRpdXNGYWN0b3IgKiBwcm9ncmVz
c1JlY3QuaGVpZ2h0KCk7CisgICAgICAgIHBhaW50ZXIuc2V0QnJ1c2goUXQ6Ok5vQnJ1c2gpOwor
ICAgICAgICBwYWludGVyLnNldFBlbihib3JkZXJQZW4oKSk7CisgICAgICAgIHByb2dyZXNzUmVj
dC5hZGp1c3QoMSwgMSwgLTEsIC0xKTsKKyAgICAgICAgcGFpbnRlci5kcmF3Um91bmRlZFJlY3Qo
cHJvZ3Jlc3NSZWN0LCByYWRpdXMsIHJhZGl1cyk7CiAgICAgICAgIHByb2dyZXNzUmVjdC5hZGp1
c3QoMSwgMSwgLTEsIC0xKTsKICAgICAgICAgaWYgKGFuaW1hdGVkKSB7CiAgICAgICAgICAgICBj
b25zdCBpbnQgcmlnaHQgPSBwcm9ncmVzc1JlY3QucmlnaHQoKTsKQEAgLTM5Nyw3ICs0NTgsMTAg
QEAgdm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdQcm9ncmVzcyhjb25zdCBRUmVjdCYgcmVj
dCwgZG91YmxlIHByb2dyZXNzLCBib29sIGwKICAgICAgICAgICAgIGdyYWRpZW50LnNldEZpbmFs
U3RvcChwcm9ncmVzc1JlY3QudG9wTGVmdCgpKTsKICAgICAgICAgICAgIGdyYWRpZW50LnNldENv
bG9yQXQoMC4wLCBoaWdobGlnaHRDb2xvcik7CiAgICAgICAgICAgICBncmFkaWVudC5zZXRDb2xv
ckF0KDEuMCwgaGlnaGxpZ2h0Q29sb3IubGlnaHRlcigpKTsKLSAgICAgICAgICAgIGRyYXdSZWN0
YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKCZwYWludGVyLCBRdDo6Tm9QZW4sIHByb2dyZXNzUmVj
dCwgZ3JhZGllbnQpOworICAgICAgICAgICAgcGFpbnRlci5zZXRCcnVzaChncmFkaWVudCk7Cisg
ICAgICAgICAgICBwYWludGVyLnNldFBlbihRdDo6Tm9QZW4pOworICAgICAgICAgICAgcmFkaXVz
ID0gcmFkaXVzRmFjdG9yICogcHJvZ3Jlc3NSZWN0LmhlaWdodCgpOworICAgICAgICAgICAgcGFp
bnRlci5kcmF3Um91bmRlZFJlY3QocHJvZ3Jlc3NSZWN0LCByYWRpdXMsIHJhZGl1cyk7CiAgICAg
ICAgIH0KICAgICAgICAgUVBpeG1hcENhY2hlOjppbnNlcnQoa2V5LCByZXN1bHQpOwogICAgIH0K
QEAgLTQwNiw3ICs0NzAsMjAgQEAgdm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdQcm9ncmVz
cyhjb25zdCBRUmVjdCYgcmVjdCwgZG91YmxlIHByb2dyZXNzLCBib29sIGwKIAogdm9pZCBTdHls
ZVBhaW50ZXJNb2JpbGU6OmRyYXdTbGlkZXJUaHVtYihjb25zdCBRUmVjdCAmIHJlY3QsIGJvb2wg
cHJlc3NlZCkgY29uc3QKIHsKLSAgICBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChw
YWludGVyLCBib3JkZXJQZW4sIHJlY3QsIHByZXNzZWQ/IFF0OjpsaWdodEdyYXkgOiBidXR0b25H
cmFkaWVudEJvdHRvbSk7CisgICAgc3RhdGljIGNvbnN0IFFTdHJpbmcgcHJlZml4ID0gUUxhdGlu
MVN0cmluZygiJHF0LXdlYmtpdC1tb2JpbGUtdGhlbWUtc2xpZGVyLXRodW1iLSIpOworICAgIFFQ
aXhtYXAgcmVzdWx0OworICAgIGNvbnN0IFFTaXplIHNpemUgPSBzaXplRm9yUGFpbnRlclNjYWxl
KHJlY3QpOworICAgIGNvbnN0IFFTdHJpbmcga2V5ID0gcHJlZml4ICsgUVN0cmluZzo6bnVtYmVy
KHNpemUud2lkdGgoKSk7CisgICAgaWYgKCFRUGl4bWFwQ2FjaGU6OmZpbmQoa2V5LCAmcmVzdWx0
KSkgeworICAgICAgICBpZiAoc2l6ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmVzdWx0ID0gUVBpeG1hcChzaXplKTsKKyAgICAgICAgcmVzdWx0LmZpbGwoUXQ6OnRy
YW5zcGFyZW50KTsKKyAgICAgICAgUVBhaW50ZXIgY2FjaGVQYWludGVyKCZyZXN1bHQpOworICAg
ICAgICBkcmF3Q29udHJvbEJhY2tncm91bmQoJmNhY2hlUGFpbnRlciwgYm9yZGVyUGVuKHBhaW50
ZXIpLCBRUmVjdChRUG9pbnQoMCwgMCksIHNpemUpLCBwcmVzc2VkPyBRdDo6bGlnaHRHcmF5IDog
YnV0dG9uR3JhZGllbnRCb3R0b20pOworICAgICAgICBRUGl4bWFwQ2FjaGU6Omluc2VydChrZXks
IHJlc3VsdCk7CisgICAgfQorICAgIHBhaW50ZXItPmRyYXdQaXhtYXAocmVjdCwgcmVzdWx0KTsK
IH0KIAogCkBAIC00OTEsNiArNTY4LDE2IEBAIHZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6Y29t
cHV0ZVNpemVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlKSBjb25zCiAgICAg
ICAgIHNpemUgPSBRU2l6ZSh3LCB3KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIGNhc2Ug
UHVzaEJ1dHRvblBhcnQ6CisgICAgY2FzZSBTcXVhcmVCdXR0b25QYXJ0OgorICAgIGNhc2UgTGlz
dEJ1dHRvblBhcnQ6CisgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKKyAgICBjYXNlIEJ1dHRv
blBhcnQ6CisgICAgY2FzZSBNZW51bGlzdFBhcnQ6IHsKKyAgICAgICAgY29uc3QgaW50IGhlaWdo
dCA9IGZtLmhlaWdodCgpICogYnV0dG9uSGVpZ2h0UmF0aW8gKiByZW5kZXJTdHlsZS0+ZWZmZWN0
aXZlWm9vbSgpOworICAgICAgICBzaXplID0gUVNpemUocmVuZGVyU3R5bGUtPndpZHRoKCkudmFs
dWUoKSwgaGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KQEAgLTU2OSwxMiArNjU2LDI1IEBAIGJvb2wgUmVuZGVyVGhlbWVR
dE1vYmlsZTo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8m
IGksIGNvCiAgICAgQ29udHJvbFBhcnQgYXBwZWFyYW5jZSA9IG8tPnN0eWxlKCktPmFwcGVhcmFu
Y2UoKTsKICAgICBpZiAoYXBwZWFyYW5jZSAhPSBUZXh0RmllbGRQYXJ0CiAgICAgICAgICYmIGFw
cGVhcmFuY2UgIT0gU2VhcmNoRmllbGRQYXJ0Ci0gICAgICAgICYmIGFwcGVhcmFuY2UgIT0gVGV4
dEFyZWFQYXJ0Ci0gICAgICAgICYmIGFwcGVhcmFuY2UgIT0gTGlzdGJveFBhcnQpCisgICAgICAg
ICYmIGFwcGVhcmFuY2UgIT0gVGV4dEFyZWFQYXJ0KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAog
ICAgIC8vIE5vdyBwYWludCB0aGUgdGV4dCBmaWVsZC4KLSAgICBwLmRyYXdMaW5lRWRpdChyLCBp
c0ZvY3VzZWQobyksIGlzRW5hYmxlZChvKSk7CisgICAgaWYgKGFwcGVhcmFuY2UgPT0gVGV4dEFy
ZWFQYXJ0KSB7CisgICAgICAgIHAucGFpbnRlci0+c2V0UGVuKGJvcmRlclBlbigpKTsKKyAgICAg
ICAgcC5wYWludGVyLT5zZXRCcnVzaChRdDo6d2hpdGUpOworICAgICAgICBjb25zdCBpbnQgcmFk
aXVzID0gY2hlY2tCb3hXaWR0aCAqIHJhZGl1c0ZhY3RvcjsKKyAgICAgICAgcC5wYWludGVyLT5k
cmF3Um91bmRlZFJlY3QociwgcmFkaXVzLCByYWRpdXMpOworCisgICAgICAgIGlmIChpc0ZvY3Vz
ZWQobykpIHsKKyAgICAgICAgICAgIFFQZW4gZm9jdXNQZW4oaGlnaGxpZ2h0Q29sb3IsIDEuMCwg
UXQ6OlNvbGlkTGluZSwgUXQ6OlJvdW5kQ2FwLCBRdDo6Um91bmRKb2luKTsKKyAgICAgICAgICAg
IHAucGFpbnRlci0+c2V0UGVuKGZvY3VzUGVuKTsKKyAgICAgICAgICAgIHAucGFpbnRlci0+c2V0
QnJ1c2goUXQ6Ok5vQnJ1c2gpOworICAgICAgICAgICAgcC5wYWludGVyLT5kcmF3Um91bmRlZFJl
Y3QociwgcmFkaXVzLCByYWRpdXMpOworICAgICAgICB9CisKKyAgICB9IGVsc2UKKyAgICAgICAg
cC5kcmF3TGluZUVkaXQociwgaXNGb2N1c2VkKG8pLCBpc0VuYWJsZWQobykpOwogICAgIHJldHVy
biBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVu
ZGVyVGhlbWVRdE1vYmlsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhl
bWVRdE1vYmlsZS5oCmluZGV4IDMyMTI5NTg0NDdmZDI5Zjg0MzBkZWQyZDE3MzlmYmNmYmNhOTM4
MDUuLjllOWI4MTQzZWNmZWIwZjY2OThlZGQwYjEyMWUxZmEzMmNmZjQxMTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmgKQEAgLTEwNSwx
MSArMTA1LDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3UmFkaW8oUVBhaW50ZXIqLCBjb25z
dCBRU2l6ZSYsIGJvb2wgY2hlY2tlZCwgYm9vbCBlbmFibGVkKSBjb25zdDsKICAgICBRUGl4bWFw
IGZpbmRSYWRpbyhjb25zdCBRU2l6ZSYsIGJvb2wgY2hlY2tlZCwgYm9vbCBlbmFibGVkKSBjb25z
dDsKIAotICAgIFFTaXplIGdldEJ1dHRvbkltYWdlU2l6ZShjb25zdCBRU2l6ZSYsIGJvb2wgbXVs
dGlwbGUpIGNvbnN0OworICAgIFFTaXplIGdldEJ1dHRvbkltYWdlU2l6ZShpbnQgLCBib29sIG11
bHRpcGxlKSBjb25zdDsKICAgICB2b2lkIGRyYXdTaW1wbGVDb21ib0J1dHRvbihRUGFpbnRlcios
IGNvbnN0IFFTaXplJiwgY29uc3QgUUNvbG9yJikgY29uc3Q7CiAgICAgdm9pZCBkcmF3TXVsdGlw
bGVDb21ib0J1dHRvbihRUGFpbnRlciosIGNvbnN0IFFTaXplJiwgY29uc3QgUUNvbG9yJikgY29u
c3Q7CiAgICAgUVBpeG1hcCBmaW5kQ29tYm9CdXR0b24oY29uc3QgUVNpemUmLCBib29sIG11bHRp
cGxlLCBib29sIGVuYWJsZWQpIGNvbnN0OwogCisgICAgUVBpeG1hcCBmaW5kTGluZUVkaXQoY29u
c3QgUVNpemUmLCBib29sIGZvY3VzZWQpIGNvbnN0OworICAgIFFQaXhtYXAgZmluZFB1c2hCdXR0
b24oY29uc3QgUVNpemUmLCBib29sIHN1bmtlbiwgYm9vbCBlbmFibGVkKSBjb25zdDsKKwogICAg
IFFTaXplIHNpemVGb3JQYWludGVyU2NhbGUoY29uc3QgUVJlY3QmKSBjb25zdDsKIAogICAgIGJv
b2wgbV9wcmV2aW91c1Ntb290aFBpeG1hcFRyYW5zZm9ybTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>