<?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>74646</bug_id>
          
          <creation_ts>2011-12-15 13:21:19 -0800</creation_ts>
          <short_desc>sizeof(RenderObject) is 32 instead of 24 on Windows</short_desc>
          <delta_ts>2011-12-16 10:35:46 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>74645</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>aroben</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>hyatt</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>mitz</cc>
    
    <cc>ojan</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>522191</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-15 13:21:19 -0800</bug_when>
    <thetext>Unlike gcc and clang, MSVC pads each consecutive member variables of the same type
in bitfields. e.g. if you have:
sturct AB {
unsigned m_1 : 31;
bool m_2 : 1;
}
then MSVC pads m_1 and allocates sizeof(unsigned) * 2 for AB whereas gcc and clang
only allocate sizeof(unsigned) * 1 for AB.

As a result, RenderObject consumes 44 bytes instead of 32 bytes when compiled on Windows by cl.exe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522222</commentid>
    <comment_count>1</comment_count>
      <attachid>119498</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-15 13:58:55 -0800</bug_when>
    <thetext>Created attachment 119498
work in progress

This one wraps bitfields in new struct with accessors. This mitigates the implicit coercion problem Darin pointed out. I used macro because the idea of repeating the same code 31 times was just absurd.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522340</commentid>
    <comment_count>2</comment_count>
      <attachid>119520</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-15 16:53:57 -0800</bug_when>
    <thetext>Created attachment 119520
The patch that fixes all</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522345</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-15 16:56:54 -0800</bug_when>
    <thetext>On my second thought, none of the existing callers does dangerous assignment so we could just make them all unsigned. However, that doesn&apos;t prevent people from making the said coercion mistakes in the future. I&apos;m fine with either approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522361</commentid>
    <comment_count>4</comment_count>
      <attachid>119520</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-15 17:10:02 -0800</bug_when>
    <thetext>Comment on attachment 119520
The patch that fixes all

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

Looks OK.

&gt; Source/WebCore/rendering/RenderObject.h:899
&gt; +#define ADD_BOOLEAN_BITFIELD(name, Name) \

Should probably #undef ADD_BOOLEAN_BITFIELD after the code that uses it since it’s in a header.

&gt; Source/WebCore/rendering/RenderObject.h:904
&gt; +        ALWAYS_INLINE bool name() const { return m_##name; }\
&gt; +        ALWAYS_INLINE void set##Name(bool name) { m_##name = name; }\

I think ALWAYS_INLINE is overkill. Normal inlining should be OK.

&gt; Source/WebCore/rendering/RenderObject.h:973
&gt; +        // These bitfields are moved here from subclasses to pack them together
&gt; +        // from RenderBlock

This “from RenderBlock” looks like a continuation of the comment on the line before. A period would make it better. A blank line also would help.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522362</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-15 17:11:31 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; On my second thought, none of the existing callers does dangerous assignment so we could just make them all unsigned. However, that doesn&apos;t prevent people from making the said coercion mistakes in the future. I&apos;m fine with either approach.

I also am fine with either approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522380</commentid>
    <comment_count>6</comment_count>
      <attachid>119520</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-15 17:23:02 -0800</bug_when>
    <thetext>Comment on attachment 119520
The patch that fixes all

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

&gt;&gt; Source/WebCore/rendering/RenderObject.h:973
&gt;&gt; +        // from RenderBlock
&gt; 
&gt; This “from RenderBlock” looks like a continuation of the comment on the line before. A period would make it better. A blank line also would help.

As far as I understand it, &quot;from RenderBlock&quot; is part of the sentence.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522382</commentid>
    <comment_count>7</comment_count>
      <attachid>119520</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-15 17:25:10 -0800</bug_when>
    <thetext>Comment on attachment 119520
The patch that fixes all

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

&gt;&gt; Source/WebCore/rendering/RenderObject.h:899
&gt;&gt; +#define ADD_BOOLEAN_BITFIELD(name, Name) \
&gt; 
&gt; Should probably #undef ADD_BOOLEAN_BITFIELD after the code that uses it since it’s in a header.

Done.

&gt;&gt; Source/WebCore/rendering/RenderObject.h:904
&gt;&gt; +        ALWAYS_INLINE void set##Name(bool name) { m_##name = name; }\
&gt; 
&gt; I think ALWAYS_INLINE is overkill. Normal inlining should be OK.

Okay. Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522385</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-15 17:26:49 -0800</bug_when>
    <thetext>Yet another approach is to make setters/getters on RenderObject be friends of RenderObjectBitfields instead of having getters and setters on RenderObjectBitfields itself. This reduces the code redirections and will enforce that m_bitfields is never accessed directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522386</commentid>
    <comment_count>9</comment_count>
      <attachid>119520</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-15 17:28:27 -0800</bug_when>
    <thetext>Comment on attachment 119520
The patch that fixes all

Attachment 119520 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10895483

New failing tests:
animations/animation-controller-drt-api.html
animations/3d/transform-origin-vs-functions.html
accessibility/aria-checkbox-checked.html
http/tests/appcache/access-via-redirect.php
http/tests/appcache/auth.html
animations/animation-css-rule-types.html
animations/3d/matrix-transform-type-animation.html
animations/3d/state-at-end-event-transform.html
http/tests/appcache/credential-url.html
http/tests/appcache/crash-when-navigating-away-then-back.html
accessibility/anonymous-render-block-in-continuation-causes-crash.html
accessibility/adjacent-continuations-cause-assertion-failure.html
animations/additive-transform-animations.html
animations/3d/change-transform-in-end-event.html
animations/3d/replace-filling-transform.html
http/tests/appcache/cyrillic-uri.html
accessibility/anchor-linked-anonymous-block-crash.html
animations/animation-direction-normal.html
accessibility/aria-checkbox-sends-notification.html
animations/animation-add-events-in-handler.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522388</commentid>
    <comment_count>10</comment_count>
      <attachid>119520</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-15 17:30:45 -0800</bug_when>
    <thetext>Comment on attachment 119520
The patch that fixes all

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

&gt;&gt;&gt; Source/WebCore/rendering/RenderObject.h:973
&gt;&gt;&gt; +        // from RenderBlock
&gt;&gt; 
&gt;&gt; This “from RenderBlock” looks like a continuation of the comment on the line before. A period would make it better. A blank line also would help.
&gt; 
&gt; As far as I understand it, &quot;from RenderBlock&quot; is part of the sentence.

Here are the three reasons I did not think it was part of the sentence.

1) There is no period after RenderBlock.
2) This has a similar format to the “for RootInlineBox” comment in InlineBox.h.
3) The phrase “pack them together from RenderBlock” is nonsense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522407</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-15 18:02:11 -0800</bug_when>
    <thetext>Turns out that the comment is out-dated. They&apos;re moved from RenderBlock:
http://trac.webkit.org/changeset/40312/trunk/WebCore/rendering/RenderObject.h

and RenderFlowThread:
http://trac.webkit.org/changeset/96408/trunk/Source/WebCore/rendering/RenderObject.h

I&apos;ll update the comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522415</commentid>
    <comment_count>12</comment_count>
      <attachid>119520</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-15 18:10:12 -0800</bug_when>
    <thetext>Comment on attachment 119520
The patch that fixes all

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

&gt; Source/WebCore/rendering/RenderObject.cpp:666
&gt; +    setPreferredLogicalWidthsDirty(b);

Obviously, this would result in a recursive call :(

Will fix before l landing it.

&gt; Source/WebCore/rendering/RenderObject.cpp:683
&gt; -        o-&gt;m_preferredLogicalWidthsDirty = true;
&gt; +        o-&gt;setPreferredLogicalWidthsDirty(true);

Also this one is calling the wrong function.

&gt; Source/WebCore/rendering/RenderObject.h:1037
&gt; +    bool alreadyNeededLayout = needsLayout();
&gt; +    setNeedsLayout(b);

And this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522433</commentid>
    <comment_count>13</comment_count>
      <attachid>119520</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-15 18:36:32 -0800</bug_when>
    <thetext>Comment on attachment 119520
The patch that fixes all

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

&gt; Source/WebCore/rendering/RenderObject.h:488
&gt; +        return m_bitfields.needsLayout() || normalChildNeedsLayout() || posChildNeedsLayout()
&gt; +            || needsSimplifiedNormalFlowLayout() || needsPositionedMovementLayout();

These

&gt; Source/WebCore/rendering/RenderObject.h:496
&gt; +        return needsPositionedMovementLayout() &amp;&amp; !needsLayout() &amp;&amp; !normalChildNeedsLayout()
&gt; +            &amp;&amp; !posChildNeedsLayout() &amp;&amp; !needsSimplifiedNormalFlowLayout();

And these also need m_bitfilds. at the front :(  Don&apos;t know why I was so careless.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522495</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-15 21:09:57 -0800</bug_when>
    <thetext>Committed r103020: &lt;http://trac.webkit.org/changeset/103020&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522809</commentid>
    <comment_count>15</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-12-16 10:06:38 -0800</bug_when>
    <thetext>It looks like this reduced the memory by 1-5% on the various Chromium Win page cyclers:

http://build.chromium.org/f/chromium/perf/vista-release-webkit-latest/moz/report.html?history=150&amp;rev=114800&amp;graph=vm_peak_r

http://build.chromium.org/f/chromium/perf/vista-release-webkit-latest/intl1/report.html?history=150&amp;rev=114800&amp;graph=vm_peak_r

http://build.chromium.org/f/chromium/perf/vista-release-webkit-latest/intl2/report.html?history=150&amp;rev=114800&amp;graph=vm_peak_r</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522834</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-16 10:35:46 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; It looks like this reduced the memory by 1-5% on the various Chromium Win page cyclers:
&gt; 
&gt; http://build.chromium.org/f/chromium/perf/vista-release-webkit-latest/moz/report.html?history=150&amp;rev=114800&amp;graph=vm_peak_r
&gt; 
&gt; http://build.chromium.org/f/chromium/perf/vista-release-webkit-latest/intl1/report.html?history=150&amp;rev=114800&amp;graph=vm_peak_r
&gt; 
&gt; http://build.chromium.org/f/chromium/perf/vista-release-webkit-latest/intl2/report.html?history=150&amp;rev=114800&amp;graph=vm_peak_r

Very nice!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119498</attachid>
            <date>2011-12-15 13:58:55 -0800</date>
            <delta_ts>2011-12-15 16:53:49 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>wip74646</filename>
            <type>text/plain</type>
            <size>4958</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDEw
Mjk3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODg3LDUwICs4ODcsNjYgQEAKICAgICBSZW5kZXJPYmplY3QqIG1fbmV4dDsK
IAogI2lmbmRlZiBOREVCVUcKLSAgICBib29sIG1faGFzQVhPYmplY3Q7CisgICAgYm9vbCBtX2hh
c0FYT2JqZWN0ICAgICAgICAgICAgIDogMTsKICAgICBib29sIG1fc2V0TmVlZHNMYXlvdXRGb3Ji
aWRkZW4gOiAxOwogI2VuZGlmCiAKLSAgICAvLyAzMiBiaXRzIGhhdmUgYmVlbiB1c2VkIGhlcmUu
IFRIRVJFIEFSRSBOTyBGUkVFIEJJVFMgQVZBSUxBQkxFLgotICAgIGJvb2wgbV9uZWVkc0xheW91
dCAgICAgICAgICAgICAgIDogMTsKLSAgICBib29sIG1fbmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRM
YXlvdXQgOjE7Ci0gICAgYm9vbCBtX25vcm1hbENoaWxkTmVlZHNMYXlvdXQgICAgOiAxOwotICAg
IGJvb2wgbV9wb3NDaGlsZE5lZWRzTGF5b3V0ICAgICAgIDogMTsKLSAgICBib29sIG1fbmVlZHNT
aW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dCAgOiAxOwotICAgIGJvb2wgbV9wcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzRGlydHkgICAgICAgICAgIDogMTsKLSAgICBib29sIG1fZmxvYXRpbmcgICAgICAg
ICAgICAgICAgICA6IDE7CisjZGVmaW5lIEFERF9CT09MRUFOX0JJVEZJRUxEKG5hbWUsIE5hbWUp
IFwKKyAgICBwcml2YXRlOlwKKyAgICAgICAgYm9vbCBtXyMjbmFtZSA6IDE7XAorICAgIHB1Ymxp
YzpcCisgICAgICAgIEFMV0FZU19JTkxJTkUgYm9vbCBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV8j
I25hbWU7IH1cCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXQjI05hbWUoYm9vbCBuYW1l
KSB7IG1fIyNuYW1lID0gbmFtZTsgfVwKIAotICAgIGJvb2wgbV9wb3NpdGlvbmVkICAgICAgICAg
ICAgICAgIDogMTsKLSAgICBib29sIG1fcmVsUG9zaXRpb25lZCAgICAgICAgICAgICA6IDE7Ci0g
ICAgYm9vbCBtX3BhaW50QmFja2dyb3VuZCAgICAgICAgICAgOiAxOyAvLyBpZiB0aGUgYm94IGhh
cyBzb21ldGhpbmcgdG8gcGFpbnQgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBiYWNrZ3JvdW5kIHBhaW50aW5nIHBoYXNlIChiYWNrZ3JvdW5kLCBi
b3JkZXIsIGV0YykKKyAgICBzdHJ1Y3QgeworICAgICAgICAvLyAzMiBiaXRzIGhhdmUgYmVlbiB1
c2VkIGhlcmUuIFRIRVJFIEFSRSBOTyBGUkVFIEJJVFMgQVZBSUxBQkxFLgorICAgICAgICBBRERf
Qk9PTEVBTl9CSVRGSUVMRChuZWVkc0xheW91dCwgTmVlZHNMYXlvdXQpOworICAgICAgICBBRERf
Qk9PTEVBTl9CSVRGSUVMRChuZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExheW91dCwgTmVlZHNQb3Np
dGlvbmVkTW92ZW1lbnRMYXlvdXQpOworICAgICAgICBBRERfQk9PTEVBTl9CSVRGSUVMRChub3Jt
YWxDaGlsZE5lZWRzTGF5b3V0LCBOb3JtYWxDaGlsZE5lZWRzTGF5b3V0KTsKKyAgICAgICAgQURE
X0JPT0xFQU5fQklURklFTEQocG9zQ2hpbGROZWVkc0xheW91dCwgUG9zQ2hpbGROZWVkc0xheW91
dCk7CisgICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxEKG5lZWRzU2ltcGxpZmllZE5vcm1hbEZs
b3dMYXlvdXQsIE5lZWRzU2ltcGxpZmllZE5vcm1hbEZsb3dMYXlvdXQpOworICAgICAgICBBRERf
Qk9PTEVBTl9CSVRGSUVMRChwcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHksIFByZWZlcnJlZExv
Z2ljYWxXaWR0aHNEaXJ0eSk7CisgICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxEKGZsb2F0aW5n
LCBGbG9hdGluZyk7CiAKLSAgICBib29sIG1faXNBbm9ueW1vdXMgICAgICAgICAgICAgICA6IDE7
Ci0gICAgYm9vbCBtX2lzVGV4dCAgICAgICAgICAgICAgICAgICAgOiAxOwotICAgIGJvb2wgbV9p
c0JveCAgICAgICAgICAgICAgICAgICAgIDogMTsKLSAgICBib29sIG1faW5saW5lICAgICAgICAg
ICAgICAgICAgICA6IDE7Ci0gICAgYm9vbCBtX3JlcGxhY2VkICAgICAgICAgICAgICAgICAgOiAx
OwotICAgIGJvb2wgbV9ob3Jpem9udGFsV3JpdGluZ01vZGUgOiAxOwotICAgIGJvb2wgbV9pc0Ry
YWdnaW5nICAgICAgICAgICAgICAgIDogMTsKKyAgICAgICAgQUREX0JPT0xFQU5fQklURklFTEQo
cG9zaXRpb25lZCwgUG9zaXRpb25lZCk7CisgICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxEKHJl
bFBvc2l0aW9uZWQsIFJlbFBvc2l0aW9uZWQpOworICAgICAgICBBRERfQk9PTEVBTl9CSVRGSUVM
RChwYWludEJhY2tncm91bmQsIFBhaW50QmFja2dyb3VuZCk7IC8vIGlmIHRoZSBib3ggaGFzIHNv
bWV0aGluZyB0byBwYWludCBpbiB0aGUKKyAgICAgICAgLy8gYmFja2dyb3VuZCBwYWludGluZyBw
aGFzZSAoYmFja2dyb3VuZCwgYm9yZGVyLCBldGMpCiAKLSAgICBib29sIG1faGFzTGF5ZXIgICAg
ICAgICAgICAgICAgICA6IDE7Ci0gICAgYm9vbCBtX2hhc092ZXJmbG93Q2xpcCAgICAgICAgICAg
OiAxOyAvLyBTZXQgaW4gdGhlIGNhc2Ugb2Ygb3ZlcmZsb3c6YXV0by9zY3JvbGwvaGlkZGVuCi0g
ICAgYm9vbCBtX2hhc1RyYW5zZm9ybSAgICAgICAgICAgICAgOiAxOwotICAgIGJvb2wgbV9oYXNS
ZWZsZWN0aW9uICAgICAgICAgICAgIDogMTsKKyAgICAgICAgQUREX0JPT0xFQU5fQklURklFTEQo
aXNBbm9ueW1vdXMsIElzQW5vbnltb3VzKTsKKyAgICAgICAgQUREX0JPT0xFQU5fQklURklFTEQo
aXNUZXh0LCBJc1RleHQpOworICAgICAgICBBRERfQk9PTEVBTl9CSVRGSUVMRChpc0JveCwgSXNC
b3gpOworICAgICAgICBBRERfQk9PTEVBTl9CSVRGSUVMRChpc0lubGluZSwgSXNJbmxpbmUpOwor
ICAgICAgICBBRERfQk9PTEVBTl9CSVRGSUVMRChpc1JlcGxhY2VkLCBJc1JlcGxhY2VkKTsKKyAg
ICAgICAgQUREX0JPT0xFQU5fQklURklFTEQoaG9yaXpvbnRhbFdyaXRpbmdNb2RlLCBIb3Jpem9u
dGFsV3JpdGluZ01vZGUpOworICAgICAgICBBRERfQk9PTEVBTl9CSVRGSUVMRChpc0RyYWdnaW5n
LCBJc0RyYWdnaW5nKTsKIAotICAgIGJvb2wgbV9oYXNDb3VudGVyTm9kZU1hcCAgICAgICAgIDog
MTsKLSAgICBib29sIG1fZXZlckhhZExheW91dCAgICAgICAgICAgICA6IDE7CisgICAgICAgIEFE
RF9CT09MRUFOX0JJVEZJRUxEKGhhc0xheWVyLCBIYXNMYXllcik7CisgICAgICAgIEFERF9CT09M
RUFOX0JJVEZJRUxEKGhhc092ZXJmbG93Q2xpcCwgSGFzT3ZlcmZsb3dDbGlwKTsgLy8gU2V0IGlu
IHRoZSBjYXNlIG9mIG92ZXJmbG93OmF1dG8vc2Nyb2xsL2hpZGRlbgorICAgICAgICBBRERfQk9P
TEVBTl9CSVRGSUVMRChoYXNUcmFuc2Zvcm0sIEhhc1RyYW5zZm9ybSk7CisgICAgICAgIEFERF9C
T09MRUFOX0JJVEZJRUxEKGhhc1JlZmxlY3Rpb24sIEhhc1JlZmxlY3Rpb24pOwogCi0gICAgLy8g
VGhlc2UgYml0ZmllbGRzIGFyZSBtb3ZlZCBoZXJlIGZyb20gc3ViY2xhc3NlcyB0byBwYWNrIHRo
ZW0gdG9nZXRoZXIKLSAgICAvLyBmcm9tIFJlbmRlckJsb2NrCi0gICAgYm9vbCBtX2NoaWxkcmVu
SW5saW5lIDogMTsKLSAgICBib29sIG1fbWFyZ2luQmVmb3JlUXVpcmsgOiAxOwotICAgIGJvb2wg
bV9tYXJnaW5BZnRlclF1aXJrIDogMTsKLSAgICBib29sIG1faGFzTWFya3VwVHJ1bmNhdGlvbiA6
IDE7Ci0gICAgdW5zaWduZWQgbV9zZWxlY3Rpb25TdGF0ZSA6IDM7IC8vIFNlbGVjdGlvblN0YXRl
Ci0gICAgYm9vbCBtX2hhc0NvbHVtbnMgOiAxOwotICAgIGJvb2wgbV9pblJlbmRlckZsb3dUaHJl
YWQgOiAxOworICAgICAgICBBRERfQk9PTEVBTl9CSVRGSUVMRChoYXNDb3VudGVyTm9kZU1hcCwg
SGFzQ291bnRlck5vZGVNYXApOworICAgICAgICBBRERfQk9PTEVBTl9CSVRGSUVMRChldmVySGFk
TGF5b3V0LCBFdmVySGFkTGF5b3V0KTsKIAorICAgICAgICAvLyBUaGVzZSBiaXRmaWVsZHMgYXJl
IG1vdmVkIGhlcmUgZnJvbSBzdWJjbGFzc2VzIHRvIHBhY2sgdGhlbSB0b2dldGhlcgorICAgICAg
ICAvLyBmcm9tIFJlbmRlckJsb2NrCisgICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxEKGNoaWxk
cmVuSW5saW5lLCBDaGlsZHJlbklubGluZSk7CisgICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxE
KG1hcmdpbkJlZm9yZVF1aXJrLCBNYXJnaW5CZWZvcmVRdWlyayk7CisgICAgICAgIEFERF9CT09M
RUFOX0JJVEZJRUxEKG1hcmdpbkFmdGVyUXVpcmssIE1hcmdpbkFmdGVyUXVpcmspOworICAgICAg
ICBBRERfQk9PTEVBTl9CSVRGSUVMRChoYXNNYXJrdXBUcnVuY2F0aW9uLCBIYXNNYXJrdXBUcnVu
Y2F0aW9uKTsKKyAgICAgICAgQUREX0JPT0xFQU5fQklURklFTEQoaGFzQ29sdW1ucywgSGFzQ29s
dW1ucyk7CisgICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxEKGluUmVuZGVyRmxvd1RocmVhZCwg
SW5SZW5kZXJGbG93VGhyZWFkKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIG1f
c2VsZWN0aW9uU3RhdGUgOiAzOyAvLyBTZWxlY3Rpb25TdGF0ZQorCisgICAgcHVibGljOgorICAg
ICAgICBBTFdBWVNfSU5MSU5FIFNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0YXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9zZWxlY3Rpb25TdGF0ZTsgfQorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
c2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUpIGNvbnN0IHsgbV9z
ZWxlY3Rpb25TdGF0ZSA9IHNlbGVjdGlvblN0YXRlOyB9CisKKyAgICB9IG1fYml0ZmllbGRzOwor
CiBwcml2YXRlOgogICAgIC8vIFN0b3JlIHN0YXRlIGJldHdlZW4gc3R5bGVXaWxsQ2hhbmdlIGFu
ZCBzdHlsZURpZENoYW5nZQogICAgIHN0YXRpYyBib29sIHNfYWZmZWN0c1BhcmVudEJsb2NrOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119520</attachid>
            <date>2011-12-15 16:53:57 -0800</date>
            <delta_ts>2011-12-15 18:36:32 -0800</delta_ts>
            <desc>The patch that fixes all</desc>
            <filename>bug-74646-20111215165355.patch</filename>
            <type>text/plain</type>
            <size>39955</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjk5OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAxMS0xMi0xNSAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBzaXplb2YoUmVuZGVyT2JqZWN0
KSBpcyAzMiBpbnN0ZWFkIG9mIDI0IG9uIFdpbmRvd3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NjQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBhbGwgYml0ZmllbGRzIGluIFJlbmRlck9iamVj
dCB0byB1bnNpZ25lZCBhbmQgd3JhcCB0aGVtIGFyb3VuZCBieSBSZW5kZXJPYmplY3RCaXRmaWVs
ZHMuCisgICAgICAgIEFsc28gYWRkIGEgY29tcGlsYXRpb24gdGltZSBhc3NlcnRpb24gdG8gbWFr
ZSBzdXJlIHdlIHdvbid0IGdyb3cgUmVuZGVyT2JqZWN0J3Mgc2l6ZSB1bmludGVudGlvbmFsbHku
CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpsYXlvdXRCbG9ja0NoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpt
YXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpsYXlvdXRDb2x1bW5zKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdFdpdGhSZWN0OjpG
bG9hdFdpdGhSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNhbWVTaXplQXNSZW5kZXJPYmplY3Q6On5TYW1lU2l6ZUFzUmVuZGVy
T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6UmVuZGVyT2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6bWFya0NvbnRhaW5pbmdCbG9ja3NGb3JM
YXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZXRQcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzRGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjppbnZhbGlk
YXRlQ29udGFpbmVyUHJlZmVycmVkTG9naWNhbFdpZHRocyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6OnN0eWxlV2lsbENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJP
YmplY3Q6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6
d2lsbEJlRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6dXBkYXRl
RHJhZ1N0YXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Omhhc0NvdW50ZXJOb2RlTWFwKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6c2V0SGFzQ291bnRlck5vZGVNYXApOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyT2JqZWN0OjpjaGlsZHJlbklubGluZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6OnNldENoaWxkcmVuSW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck9iamVjdDo6aGFzQ29sdW1ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNl
dEhhc0NvbHVtbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjppblJlbmRlckZs
b3dUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZXRJblJlbmRlckZs
b3dUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppc0Fub255bW91cyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNldElzQW5vbnltb3VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aXNBbm9ueW1vdXNCbG9jayk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzRmxvYXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0Ojppc1Bvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0
Ojppc1JlbFBvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppc1Rl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppc0JveCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzSW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck9iamVjdDo6aXNEcmFnZ2luZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Omlz
UmVwbGFjZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppc0hvcml6b250YWxX
cml0aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Omhhc0xheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aGFzQm94RGVjb3JhdGlvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpuZWVkc0xheW91dCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJPYmplY3Q6OnNlbGZOZWVkc0xheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6Om5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6bmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXRPbmx5KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cG9zQ2hpbGROZWVkc0xheW91dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om5lZWRzU2ltcGxpZmllZE5vcm1hbEZsb3dM
YXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpub3JtYWxDaGlsZE5lZWRz
TGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cHJlZmVycmVkTG9naWNh
bFdpZHRoc0RpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aGFzT3ZlcmZs
b3dDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aGFzVHJhbnNmb3JtKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6bm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJPYmplY3Q6OnNldFBvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjpzZXRSZWxQb3NpdGlvbmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVj
dDo6c2V0RmxvYXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZXRJbmxp
bmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZXRIYXNCb3hEZWNvcmF0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNldElzVGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNldElzQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck9iamVjdDo6c2V0UmVwbGFjZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0
OjpzZXRIb3Jpem9udGFsV3JpdGluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2Jq
ZWN0OjpzZXRIYXNPdmVyZmxvd0NsaXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0
OjpzZXRIYXNMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNldEhhc1Ry
YW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNldEhhc1JlZmxlY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpoYXNSZWZsZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2V0SGFzTWFya3VwVHJ1bmNhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Omhhc01hcmt1cFRydW5jYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNldFNlbGVjdGlvblN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck9iamVjdDo6aGFzU2VsZWN0ZWRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJPYmplY3Q6OmlzTWFyZ2luQmVmb3JlUXVpcmspOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0Ojppc01hcmdpbkFmdGVyUXVpcmspOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0OjpzZXRNYXJnaW5CZWZvcmVRdWlyayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJPYmplY3Q6OnNldE1hcmdpbkFmdGVyUXVpcmspOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjpldmVySGFkTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6
UmVuZGVyT2JqZWN0Qml0ZmllbGRzOjpSZW5kZXJPYmplY3RCaXRmaWVsZHMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpSZW5kZXJPYmplY3RCaXRmaWVsZHM6OnNlbGVjdGlvblN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6UmVuZGVyT2JqZWN0Qml0Zmll
bGRzOjpzZXRTZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6
OnNldE5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck9iamVjdDo6c2V0Tm9ybWFsQ2hpbGROZWVkc0xheW91dCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJPYmplY3Q6OnNldFBvc0NoaWxkTmVlZHNMYXlvdXQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0OjpzZXROZWVkc1NpbXBsaWZpZWROb3JtYWxGbG93TGF5b3V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2V0UGFpbnRCYWNrZ3JvdW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2V0SXNEcmFnZ2luZyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJPYmplY3Q6OnNldEV2ZXJIYWRMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0OjpzZXROZWVkc0xheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJP
YmplY3Q6OnNldENoaWxkTmVlZHNMYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJP
YmplY3RDaGlsZExpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Q2hpbGRM
aXN0OjpyZW1vdmVDaGlsZE5vZGUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
Q29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6bGF5
b3V0KToKKwogMjAxMS0xMi0xNSAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2dsZS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEwMjk4OS4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTAyOTc3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE5OCw3ICsxMTk4LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxh
eQogICAgIGlmICghcmVsYXlvdXRDaGlsZHJlbiAmJiBzaW1wbGlmaWVkTGF5b3V0KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIG1fZXZl
ckhhZExheW91dCAmJiBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSk7CisgICAgTGF5b3V0
UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgZXZlckhhZExheW91dCgpICYmIGNoZWNrRm9yUmVw
YWludER1cmluZ0xheW91dCgpKTsKIAogICAgIExheW91dFVuaXQgb2xkV2lkdGggPSBsb2dpY2Fs
V2lkdGgoKTsKICAgICBMYXlvdXRVbml0IG9sZENvbHVtbldpZHRoID0gZGVzaXJlZENvbHVtbldp
ZHRoKCk7CkBAIC0xMjM1LDcgKzEyMzUsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9j
ayhib29sIHJlbGF5CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0
KDApOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjb2xJbmZvLT5jb2x1bW5IZWlnaHQoKSAhPSBw
YWdlTG9naWNhbEhlaWdodCAmJiBtX2V2ZXJIYWRMYXlvdXQpIHsKKyAgICAgICAgaWYgKGNvbElu
Zm8tPmNvbHVtbkhlaWdodCgpICE9IHBhZ2VMb2dpY2FsSGVpZ2h0ICYmIGV2ZXJIYWRMYXlvdXQo
KSkgewogICAgICAgICAgICAgY29sSW5mby0+c2V0Q29sdW1uSGVpZ2h0KHBhZ2VMb2dpY2FsSGVp
Z2h0KTsKICAgICAgICAgICAgIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCA9IHRydWU7CiAgICAg
ICAgIH0KQEAgLTIwNzAsNyArMjA3MCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2Nr
Q2hpbGQoUmVuZGUKICAgICBpZiAoIWNoaWxkLT5uZWVkc0xheW91dCgpKQogICAgICAgICBjaGls
ZC0+bWFya0ZvclBhZ2luYXRpb25SZWxheW91dElmTmVlZGVkKCk7CiAKLSAgICBib29sIGNoaWxk
SGFkTGF5b3V0ID0gY2hpbGQtPm1fZXZlckhhZExheW91dDsKKyAgICBib29sIGNoaWxkSGFkTGF5
b3V0ID0gY2hpbGQtPmV2ZXJIYWRMYXlvdXQoKTsKICAgICBib29sIGNoaWxkTmVlZGVkTGF5b3V0
ID0gY2hpbGQtPm5lZWRzTGF5b3V0KCk7CiAgICAgaWYgKGNoaWxkTmVlZGVkTGF5b3V0KQogICAg
ICAgICBjaGlsZC0+bGF5b3V0KCk7CkBAIC00MDI5LDcgKzQwMjksNyBAQCBib29sIFJlbmRlckJs
b2NrOjpjb250YWluc0Zsb2F0KFJlbmRlckJvCiAKIHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtBbGxE
ZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoUmVuZGVyQm94KiBmbG9hdFRvUmVtb3ZlLCBi
b29sIGluTGF5b3V0KQogewotICAgIGlmICghbV9ldmVySGFkTGF5b3V0KQorICAgIGlmICghZXZl
ckhhZExheW91dCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBzZXRDaGlsZE5lZWRzTGF5b3V0
KHRydWUsICFpbkxheW91dCk7CkBAIC00Njg4LDcgKzQ2ODgsNyBAQCBib29sIFJlbmRlckJsb2Nr
OjpsYXlvdXRDb2x1bW5zKGJvb2wgaGFzCiAgICAgICAgIAogICAgICAgICBpZiAoY29sdW1uSGVp
Z2h0ICYmIGNvbHVtbkhlaWdodCAhPSBwYWdlTG9naWNhbEhlaWdodCkgewogICAgICAgICAgICAg
c3RhdGVQdXNoZXIucG9wKCk7Ci0gICAgICAgICAgICBtX2V2ZXJIYWRMYXlvdXQgPSB0cnVlOwor
ICAgICAgICAgICAgc2V0RXZlckhhZExheW91dCh0cnVlKTsKICAgICAgICAgICAgIGxheW91dEJs
b2NrKGZhbHNlLCBjb2x1bW5IZWlnaHQpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lv
biAxMDI5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtNDgwLDcgKzQ4MCw3IEBAIHByaXZhdGU6CiAgICAgICAgIEZsb2F0V2l0
aFJlY3QoUmVuZGVyQm94KiBmKQogICAgICAgICAgICAgOiBvYmplY3QoZikKICAgICAgICAgICAg
ICwgcmVjdChMYXlvdXRSZWN0KGYtPngoKSAtIGYtPm1hcmdpbkxlZnQoKSwgZi0+eSgpIC0gZi0+
bWFyZ2luVG9wKCksIGYtPndpZHRoKCkgKyBmLT5tYXJnaW5MZWZ0KCkgKyBmLT5tYXJnaW5SaWdo
dCgpLCBmLT5oZWlnaHQoKSArIGYtPm1hcmdpblRvcCgpICsgZi0+bWFyZ2luQm90dG9tKCkpKQot
ICAgICAgICAgICAgLCBldmVySGFkTGF5b3V0KGYtPm1fZXZlckhhZExheW91dCkKKyAgICAgICAg
ICAgICwgZXZlckhhZExheW91dChmLT5ldmVySGFkTGF5b3V0KCkpCiAgICAgICAgIHsKICAgICAg
ICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAko
cmV2aXNpb24gMTAyOTc3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDE3IEBAIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CiBzdGF0aWMgdm9pZCogYmFzZU9mUmVuZGVyT2JqZWN0QmVpbmdEZWxldGVkOwog
I2VuZGlmCiAKK3N0cnVjdCBTYW1lU2l6ZUFzUmVuZGVyT2JqZWN0IHsKKyAgICB2aXJ0dWFsIH5T
YW1lU2l6ZUFzUmVuZGVyT2JqZWN0KCkgeyB9IC8vIEFsbG9jYXRlIHZ0YWJsZSBwb2ludGVyLgor
ICAgIHZvaWQqIHBvaW50ZXJzWzVdOworI2lmbmRlZiBOREVCVUcKKyAgICB1bnNpZ25lZCBtX2Rl
YnVnQml0ZmllbGRzIDogMjsKKyNlbmRpZgorICAgIHVuc2lnbmVkIG1fYml0ZmllbGRzOworfTsK
KworQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlbmRlck9iamVjdCkgPT0gc2l6ZW9mKFNhbWVTaXpl
QXNSZW5kZXJPYmplY3QpLCBSZW5kZXJPYmplY3Rfc2hvdWxkX3N0YXlfc21hbGwpOworCiBib29s
IFJlbmRlck9iamVjdDo6c19hZmZlY3RzUGFyZW50QmxvY2sgPSBmYWxzZTsKIAogdm9pZCogUmVu
ZGVyT2JqZWN0OjpvcGVyYXRvciBuZXcoc2l6ZV90IHN6LCBSZW5kZXJBcmVuYSogcmVuZGVyQXJl
bmEpIHRocm93KCkKQEAgLTE5MCwzNiArMjAxLDcgQEAgUmVuZGVyT2JqZWN0OjpSZW5kZXJPYmpl
Y3QoTm9kZSogbm9kZSkKICAgICAsIG1faGFzQVhPYmplY3QoZmFsc2UpCiAgICAgLCBtX3NldE5l
ZWRzTGF5b3V0Rm9yYmlkZGVuKGZhbHNlKQogI2VuZGlmCi0gICAgLCBtX25lZWRzTGF5b3V0KGZh
bHNlKQotICAgICwgbV9uZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExheW91dChmYWxzZSkKLSAgICAs
IG1fbm9ybWFsQ2hpbGROZWVkc0xheW91dChmYWxzZSkKLSAgICAsIG1fcG9zQ2hpbGROZWVkc0xh
eW91dChmYWxzZSkKLSAgICAsIG1fbmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dChmYWxz
ZSkKLSAgICAsIG1fcHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KGZhbHNlKQotICAgICwgbV9m
bG9hdGluZyhmYWxzZSkKLSAgICAsIG1fcG9zaXRpb25lZChmYWxzZSkKLSAgICAsIG1fcmVsUG9z
aXRpb25lZChmYWxzZSkKLSAgICAsIG1fcGFpbnRCYWNrZ3JvdW5kKGZhbHNlKQotICAgICwgbV9p
c0Fub255bW91cyhub2RlID09IG5vZGUtPmRvY3VtZW50KCkpCi0gICAgLCBtX2lzVGV4dChmYWxz
ZSkKLSAgICAsIG1faXNCb3goZmFsc2UpCi0gICAgLCBtX2lubGluZSh0cnVlKQotICAgICwgbV9y
ZXBsYWNlZChmYWxzZSkKLSAgICAsIG1faG9yaXpvbnRhbFdyaXRpbmdNb2RlKHRydWUpCi0gICAg
LCBtX2lzRHJhZ2dpbmcoZmFsc2UpCi0gICAgLCBtX2hhc0xheWVyKGZhbHNlKQotICAgICwgbV9o
YXNPdmVyZmxvd0NsaXAoZmFsc2UpCi0gICAgLCBtX2hhc1RyYW5zZm9ybShmYWxzZSkKLSAgICAs
IG1faGFzUmVmbGVjdGlvbihmYWxzZSkKLSAgICAsIG1faGFzQ291bnRlck5vZGVNYXAoZmFsc2Up
Ci0gICAgLCBtX2V2ZXJIYWRMYXlvdXQoZmFsc2UpCi0gICAgLCBtX2NoaWxkcmVuSW5saW5lKGZh
bHNlKQotICAgICwgbV9tYXJnaW5CZWZvcmVRdWlyayhmYWxzZSkgCi0gICAgLCBtX21hcmdpbkFm
dGVyUXVpcmsoZmFsc2UpCi0gICAgLCBtX2hhc01hcmt1cFRydW5jYXRpb24oZmFsc2UpCi0gICAg
LCBtX3NlbGVjdGlvblN0YXRlKFNlbGVjdGlvbk5vbmUpCi0gICAgLCBtX2hhc0NvbHVtbnMoZmFs
c2UpCi0gICAgLCBtX2luUmVuZGVyRmxvd1RocmVhZChmYWxzZSkKKyAgICAsIG1fYml0ZmllbGRz
KG5vZGUpCiB7CiAjaWZuZGVmIE5ERUJVRwogICAgIHJlbmRlck9iamVjdENvdW50ZXIuaW5jcmVt
ZW50KCk7CkBAIC02NDYsMjIgKzYyOCwyMiBAQCB2b2lkIFJlbmRlck9iamVjdDo6bWFya0NvbnRh
aW5pbmdCbG9ja3NGCiAgICAgICAgICAgICBib29sIHdpbGxTa2lwUmVsYXRpdmVseVBvc2l0aW9u
ZWRJbmxpbmVzID0gIW9iamVjdC0+aXNSZW5kZXJCbG9jaygpOwogICAgICAgICAgICAgd2hpbGUg
KG9iamVjdCAmJiAhb2JqZWN0LT5pc1JlbmRlckJsb2NrKCkpIC8vIFNraXAgcmVsYXRpdmVseSBw
b3NpdGlvbmVkIGlubGluZXMgYW5kIGdldCB0byB0aGUgZW5jbG9zaW5nIFJlbmRlckJsb2NrLgog
ICAgICAgICAgICAgICAgIG9iamVjdCA9IG9iamVjdC0+Y29udGFpbmVyKCk7Ci0gICAgICAgICAg
ICBpZiAoIW9iamVjdCB8fCBvYmplY3QtPm1fcG9zQ2hpbGROZWVkc0xheW91dCkKKyAgICAgICAg
ICAgIGlmICghb2JqZWN0IHx8IG9iamVjdC0+cG9zQ2hpbGROZWVkc0xheW91dCgpKQogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGlmICh3aWxsU2tpcFJlbGF0aXZlbHlQb3Np
dGlvbmVkSW5saW5lcykKICAgICAgICAgICAgICAgICBjb250YWluZXIgPSBvYmplY3QtPmNvbnRh
aW5lcigpOwotICAgICAgICAgICAgb2JqZWN0LT5tX3Bvc0NoaWxkTmVlZHNMYXlvdXQgPSB0cnVl
OworICAgICAgICAgICAgb2JqZWN0LT5zZXRQb3NDaGlsZE5lZWRzTGF5b3V0KHRydWUpOwogICAg
ICAgICAgICAgc2ltcGxpZmllZE5vcm1hbEZsb3dMYXlvdXQgPSB0cnVlOwogICAgICAgICAgICAg
QVNTRVJUKCFvYmplY3QtPmlzU2V0TmVlZHNMYXlvdXRGb3JiaWRkZW4oKSk7CiAgICAgICAgIH0g
ZWxzZSBpZiAoc2ltcGxpZmllZE5vcm1hbEZsb3dMYXlvdXQpIHsKLSAgICAgICAgICAgIGlmIChv
YmplY3QtPm1fbmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dCkKKyAgICAgICAgICAgIGlm
IChvYmplY3QtPm5lZWRzU2ltcGxpZmllZE5vcm1hbEZsb3dMYXlvdXQoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICBvYmplY3QtPm1fbmVlZHNTaW1wbGlmaWVkTm9ybWFs
Rmxvd0xheW91dCA9IHRydWU7CisgICAgICAgICAgICBvYmplY3QtPnNldE5lZWRzU2ltcGxpZmll
ZE5vcm1hbEZsb3dMYXlvdXQodHJ1ZSk7CiAgICAgICAgICAgICBBU1NFUlQoIW9iamVjdC0+aXNT
ZXROZWVkc0xheW91dEZvcmJpZGRlbigpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGlmIChvYmplY3QtPm1fbm9ybWFsQ2hpbGROZWVkc0xheW91dCkKKyAgICAgICAgICAgIGlmIChv
YmplY3QtPm5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKSkKICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICBvYmplY3QtPm1fbm9ybWFsQ2hpbGROZWVkc0xheW91dCA9IHRydWU7Cisg
ICAgICAgICAgICBvYmplY3QtPnNldE5vcm1hbENoaWxkTmVlZHNMYXlvdXQodHJ1ZSk7CiAgICAg
ICAgICAgICBBU1NFUlQoIW9iamVjdC0+aXNTZXROZWVkc0xheW91dEZvcmJpZGRlbigpKTsKICAg
ICAgICAgfQogCkBAIC02ODAsOCArNjYyLDggQEAgdm9pZCBSZW5kZXJPYmplY3Q6Om1hcmtDb250
YWluaW5nQmxvY2tzRgogCiB2b2lkIFJlbmRlck9iamVjdDo6c2V0UHJlZmVycmVkTG9naWNhbFdp
ZHRoc0RpcnR5KGJvb2wgYiwgYm9vbCBtYXJrUGFyZW50cykKIHsKLSAgICBib29sIGFscmVhZHlE
aXJ0eSA9IG1fcHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5OwotICAgIG1fcHJlZmVycmVkTG9n
aWNhbFdpZHRoc0RpcnR5ID0gYjsKKyAgICBib29sIGFscmVhZHlEaXJ0eSA9IHByZWZlcnJlZExv
Z2ljYWxXaWR0aHNEaXJ0eSgpOworICAgIHNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShi
KTsKICAgICBpZiAoYiAmJiAhYWxyZWFkeURpcnR5ICYmIG1hcmtQYXJlbnRzICYmIChpc1RleHQo
KSB8fCAoc3R5bGUoKS0+cG9zaXRpb24oKSAhPSBGaXhlZFBvc2l0aW9uICYmIHN0eWxlKCktPnBv
c2l0aW9uKCkgIT0gQWJzb2x1dGVQb3NpdGlvbikpKQogICAgICAgICBpbnZhbGlkYXRlQ29udGFp
bmVyUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogfQpAQCAtNjkxLDE0ICs2NzMsMTQgQEAgdm9p
ZCBSZW5kZXJPYmplY3Q6OmludmFsaWRhdGVDb250YWluZXJQcgogICAgIC8vIEluIG9yZGVyIHRv
IGF2b2lkIHBhdGhvbG9naWNhbCBiZWhhdmlvciB3aGVuIGlubGluZXMgYXJlIGRlZXBseSBuZXN0
ZWQsIHdlIGRvIGluY2x1ZGUgdGhlbQogICAgIC8vIGluIHRoZSBjaGFpbiB0aGF0IHdlIG1hcmsg
ZGlydHkgKGV2ZW4gdGhvdWdoIHRoZXkncmUga2luZCBvZiBpcnJlbGV2YW50KS4KICAgICBSZW5k
ZXJPYmplY3QqIG8gPSBpc1RhYmxlQ2VsbCgpID8gY29udGFpbmluZ0Jsb2NrKCkgOiBjb250YWlu
ZXIoKTsKLSAgICB3aGlsZSAobyAmJiAhby0+bV9wcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkp
IHsKKyAgICB3aGlsZSAobyAmJiAhby0+cHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KCkpIHsK
ICAgICAgICAgLy8gRG9uJ3QgaW52YWxpZGF0ZSB0aGUgb3V0ZXJtb3N0IG9iamVjdCBvZiBhbiB1
bnJvb3RlZCBzdWJ0cmVlLiBUaGF0IG9iamVjdCB3aWxsIGJlIAogICAgICAgICAvLyBpbnZhbGlk
YXRlZCB3aGVuIHRoZSBzdWJ0cmVlIGlzIGFkZGVkIHRvIHRoZSBkb2N1bWVudC4KICAgICAgICAg
UmVuZGVyT2JqZWN0KiBjb250YWluZXIgPSBvLT5pc1RhYmxlQ2VsbCgpID8gby0+Y29udGFpbmlu
Z0Jsb2NrKCkgOiBvLT5jb250YWluZXIoKTsKICAgICAgICAgaWYgKCFjb250YWluZXIgJiYgIW8t
PmlzUmVuZGVyVmlldygpKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgby0+bV9wcmVm
ZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkgPSB0cnVlOworICAgICAgICBvLT5zZXRQcmVmZXJyZWRM
b2dpY2FsV2lkdGhzRGlydHkodHJ1ZSk7CiAgICAgICAgIGlmIChvLT5zdHlsZSgpLT5wb3NpdGlv
bigpID09IEZpeGVkUG9zaXRpb24gfHwgby0+c3R5bGUoKS0+cG9zaXRpb24oKSA9PSBBYnNvbHV0
ZVBvc2l0aW9uKQogICAgICAgICAgICAgLy8gQSBwb3NpdGlvbmVkIG9iamVjdCBoYXMgbm8gZWZm
ZWN0IG9uIHRoZSBtaW4vbWF4IHdpZHRoIG9mIGl0cyBjb250YWluaW5nIGJsb2NrIGV2ZXIuCiAg
ICAgICAgICAgICAvLyBXZSBjYW4gb3B0aW1pemUgdGhpcyBjYXNlIGFuZCBub3QgZ28gdXAgYW55
IGZ1cnRoZXIuCkBAIC0xODUzLDE1ICsxODM1LDE1IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpzdHls
ZVdpbGxDaGFuZ2UoU3R5bGUKIAogICAgICAgICAvLyByZXNldCBzdHlsZSBmbGFncwogICAgICAg
ICBpZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VMYXlvdXQgfHwgZGlmZiA9PSBTdHlsZURpZmZl
cmVuY2VMYXlvdXRQb3NpdGlvbmVkTW92ZW1lbnRPbmx5KSB7Ci0gICAgICAgICAgICBtX2Zsb2F0
aW5nID0gZmFsc2U7Ci0gICAgICAgICAgICBtX3Bvc2l0aW9uZWQgPSBmYWxzZTsKLSAgICAgICAg
ICAgIG1fcmVsUG9zaXRpb25lZCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIG1faG9yaXpv
bnRhbFdyaXRpbmdNb2RlID0gdHJ1ZTsKLSAgICAgICAgbV9wYWludEJhY2tncm91bmQgPSBmYWxz
ZTsKLSAgICAgICAgbV9oYXNPdmVyZmxvd0NsaXAgPSBmYWxzZTsKLSAgICAgICAgbV9oYXNUcmFu
c2Zvcm0gPSBmYWxzZTsKLSAgICAgICAgbV9oYXNSZWZsZWN0aW9uID0gZmFsc2U7CisgICAgICAg
ICAgICBzZXRGbG9hdGluZyhmYWxzZSk7CisgICAgICAgICAgICBzZXRQb3NpdGlvbmVkKGZhbHNl
KTsKKyAgICAgICAgICAgIHNldFJlbFBvc2l0aW9uZWQoZmFsc2UpOworICAgICAgICB9CisgICAg
ICAgIHNldEhvcml6b250YWxXcml0aW5nTW9kZSh0cnVlKTsKKyAgICAgICAgc2V0UGFpbnRCYWNr
Z3JvdW5kKGZhbHNlKTsKKyAgICAgICAgc2V0SGFzT3ZlcmZsb3dDbGlwKGZhbHNlKTsKKyAgICAg
ICAgc2V0SGFzVHJhbnNmb3JtKGZhbHNlKTsKKyAgICAgICAgc2V0SGFzUmVmbGVjdGlvbihmYWxz
ZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHNfYWZmZWN0c1BhcmVudEJsb2NrID0gZmFsc2U7CiAK
QEAgLTE5MTMsNyArMTg5NSw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpzdHlsZURpZENoYW5nZShT
dHlsZUQKICAgICAgICAgLy8gdG8gbWFyayB0aGUgbmV3IGNvbnRhaW5pbmcgYmxvY2tzIGZvciBs
YXlvdXQuIFRoZSBjaGFuZ2UgdGhhdCBjYW4KICAgICAgICAgLy8gZGlyZWN0bHkgYWZmZWN0IHRo
ZSBjb250YWluaW5nIGJsb2NrIG9mIHRoaXMgb2JqZWN0IGlzIGEgY2hhbmdlIHRvCiAgICAgICAg
IC8vIHRoZSBwb3NpdGlvbiBzdHlsZS4KLSAgICAgICAgaWYgKG1fbmVlZHNMYXlvdXQgJiYgb2xk
U3R5bGUtPnBvc2l0aW9uKCkgIT0gbV9zdHlsZS0+cG9zaXRpb24oKSkKKyAgICAgICAgaWYgKG5l
ZWRzTGF5b3V0KCkgJiYgb2xkU3R5bGUtPnBvc2l0aW9uKCkgIT0gbV9zdHlsZS0+cG9zaXRpb24o
KSkKICAgICAgICAgICAgIG1hcmtDb250YWluaW5nQmxvY2tzRm9yTGF5b3V0KCk7CiAKICAgICAg
ICAgaWYgKGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNlTGF5b3V0KQpAQCAtMjI0NSw3ICsyMjI3LDcg
QEAgdm9pZCBSZW5kZXJPYmplY3Q6OndpbGxCZURlc3Ryb3llZCgpCiAgICAgLy8gcmVldmFsdWF0
aW9uLiBUaGlzIGFwcGFyZW50bHkgcmVkdW5kYW50IGNoZWNrIGlzIGhlcmUgZm9yIHRoZSBjYXNl
IHdoZW4KICAgICAvLyB0aGlzIHJlbmRlcmVyIGhhZCBubyBwYXJlbnQgYXQgdGhlIHRpbWUgcmVt
b3ZlKCkgd2FzIGNhbGxlZC4KIAotICAgIGlmIChtX2hhc0NvdW50ZXJOb2RlTWFwKQorICAgIGlm
IChoYXNDb3VudGVyTm9kZU1hcCgpKQogICAgICAgICBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291
bnRlck5vZGVzKHRoaXMpOwogCiAgICAgLy8gRklYTUU6IFdvdWxkIGxpa2UgdG8gZG8gdGhpcyBp
biBSZW5kZXJCb3hNb2RlbE9iamVjdCwgYnV0IHRoZSB0aW1pbmcgaXMgc28gY29tcGxpY2F0ZWQg
dGhhdCB0aGlzIGNhbid0IGVhc2lseQpAQCAtMjMwMiw4ICsyMjg0LDggQEAgVmlzaWJsZVBvc2l0
aW9uIFJlbmRlck9iamVjdDo6cG9zaXRpb25GbwogCiB2b2lkIFJlbmRlck9iamVjdDo6dXBkYXRl
RHJhZ1N0YXRlKGJvb2wgZHJhZ09uKQogewotICAgIGJvb2wgdmFsdWVDaGFuZ2VkID0gKGRyYWdP
biAhPSBtX2lzRHJhZ2dpbmcpOwotICAgIG1faXNEcmFnZ2luZyA9IGRyYWdPbjsKKyAgICBib29s
IHZhbHVlQ2hhbmdlZCA9IChkcmFnT24gIT0gaXNEcmFnZ2luZygpKTsKKyAgICBzZXRJc0RyYWdn
aW5nKGRyYWdPbik7CiAgICAgaWYgKHZhbHVlQ2hhbmdlZCAmJiBzdHlsZSgpLT5hZmZlY3RlZEJ5
RHJhZ1J1bGVzKCkgJiYgbm9kZSgpKQogICAgICAgICBub2RlKCktPnNldE5lZWRzU3R5bGVSZWNh
bGMoKTsKICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3Vycjsg
Y3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiAxMDI5NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2OSwxNiArMzY5LDE2IEBA
IHB1YmxpYzoKICAgICAgICAgIHJldHVybiBjb250YWluZXI7CiAgICAgfQogCi0gICAgYm9vbCBo
YXNDb3VudGVyTm9kZU1hcCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ291bnRlck5vZGVNYXA7IH0K
LSAgICB2b2lkIHNldEhhc0NvdW50ZXJOb2RlTWFwKGJvb2wgaGFzQ291bnRlck5vZGVNYXApIHsg
bV9oYXNDb3VudGVyTm9kZU1hcCA9IGhhc0NvdW50ZXJOb2RlTWFwOyB9CisgICAgYm9vbCBoYXND
b3VudGVyTm9kZU1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLmhhc0NvdW50ZXJOb2Rl
TWFwKCk7IH0KKyAgICB2b2lkIHNldEhhc0NvdW50ZXJOb2RlTWFwKGJvb2wgaGFzQ291bnRlck5v
ZGVNYXApIHsgbV9iaXRmaWVsZHMuc2V0SGFzQ291bnRlck5vZGVNYXAoaGFzQ291bnRlck5vZGVN
YXApOyB9CiAKLSAgICBib29sIGNoaWxkcmVuSW5saW5lKCkgY29uc3QgeyByZXR1cm4gbV9jaGls
ZHJlbklubGluZTsgfQotICAgIHZvaWQgc2V0Q2hpbGRyZW5JbmxpbmUoYm9vbCBiKSB7IG1fY2hp
bGRyZW5JbmxpbmUgPSBiOyB9Ci0gICAgYm9vbCBoYXNDb2x1bW5zKCkgY29uc3QgeyByZXR1cm4g
bV9oYXNDb2x1bW5zOyB9Ci0gICAgdm9pZCBzZXRIYXNDb2x1bW5zKGJvb2wgYiA9IHRydWUpIHsg
bV9oYXNDb2x1bW5zID0gYjsgfQorICAgIGJvb2wgY2hpbGRyZW5JbmxpbmUoKSBjb25zdCB7IHJl
dHVybiBtX2JpdGZpZWxkcy5jaGlsZHJlbklubGluZSgpOyB9CisgICAgdm9pZCBzZXRDaGlsZHJl
bklubGluZShib29sIGIpIHsgbV9iaXRmaWVsZHMuc2V0Q2hpbGRyZW5JbmxpbmUoYik7IH0KKyAg
ICBib29sIGhhc0NvbHVtbnMoKSBjb25zdCB7IHJldHVybiBtX2JpdGZpZWxkcy5oYXNDb2x1bW5z
KCk7IH0KKyAgICB2b2lkIHNldEhhc0NvbHVtbnMoYm9vbCBiID0gdHJ1ZSkgeyBtX2JpdGZpZWxk
cy5zZXRIYXNDb2x1bW5zKGIpOyB9CiAKLSAgICBib29sIGluUmVuZGVyRmxvd1RocmVhZCgpIGNv
bnN0IHsgcmV0dXJuIG1faW5SZW5kZXJGbG93VGhyZWFkOyB9Ci0gICAgdm9pZCBzZXRJblJlbmRl
ckZsb3dUaHJlYWQoYm9vbCBiID0gdHJ1ZSkgeyBtX2luUmVuZGVyRmxvd1RocmVhZCA9IGI7IH0K
KyAgICBib29sIGluUmVuZGVyRmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRz
LmluUmVuZGVyRmxvd1RocmVhZCgpOyB9CisgICAgdm9pZCBzZXRJblJlbmRlckZsb3dUaHJlYWQo
Ym9vbCBiID0gdHJ1ZSkgeyBtX2JpdGZpZWxkcy5zZXRJblJlbmRlckZsb3dUaHJlYWQoYik7IH0K
IAogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0ZvcmNlZFN0eWxlUmVjYWxjUHJvcGFnYXRpb24o
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCkBAIC00NDMsMTUgKzQ0MywxNSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVz
dEFjdGlvbik7CiAjZW5kaWYKIAotICAgIGJvb2wgaXNBbm9ueW1vdXMoKSBjb25zdCB7IHJldHVy
biBtX2lzQW5vbnltb3VzOyB9Ci0gICAgdm9pZCBzZXRJc0Fub255bW91cyhib29sIGIpIHsgbV9p
c0Fub255bW91cyA9IGI7IH0KKyAgICBib29sIGlzQW5vbnltb3VzKCkgY29uc3QgeyByZXR1cm4g
bV9iaXRmaWVsZHMuaXNBbm9ueW1vdXMoKTsgfQorICAgIHZvaWQgc2V0SXNBbm9ueW1vdXMoYm9v
bCBiKSB7IG1fYml0ZmllbGRzLnNldElzQW5vbnltb3VzKGIpOyB9CiAgICAgYm9vbCBpc0Fub255
bW91c0Jsb2NrKCkgY29uc3QKICAgICB7CiAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMga2Vw
dCBpbiBzeW5jIHdpdGggYW5vbnltb3VzIGJsb2NrIGNyZWF0aW9uIGNvbmRpdGlvbnMgaW4KICAg
ICAgICAgLy8gUmVuZGVyQmxvY2s6OmNyZWF0ZUFub255bW91c0Jsb2NrKCkuIFRoaXMgaW5jbHVk
ZXMgY3JlYXRpbmcgYW4gYW5vbnltb3VzCiAgICAgICAgIC8vIFJlbmRlckJsb2NrIGhhdmluZyBh
IEJMT0NLIG9yIEJPWCBkaXNwbGF5LiBPdGhlciBjbGFzc2VzIHN1Y2ggYXMgUmVuZGVyVGV4dEZy
YWdtZW50CiAgICAgICAgIC8vIGFyZSBub3QgUmVuZGVyQmxvY2tzIGFuZCB3aWxsIHJldHVybiBm
YWxzZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjcwOS4g
Ci0gICAgICAgIHJldHVybiBtX2lzQW5vbnltb3VzICYmIChzdHlsZSgpLT5kaXNwbGF5KCkgPT0g
QkxPQ0sgfHwgc3R5bGUoKS0+ZGlzcGxheSgpID09IEJPWCkgJiYgc3R5bGUoKS0+c3R5bGVUeXBl
KCkgPT0gTk9QU0VVRE8gJiYgaXNSZW5kZXJCbG9jaygpICYmICFpc0xpc3RNYXJrZXIoKQorICAg
ICAgICByZXR1cm4gaXNBbm9ueW1vdXMoKSAmJiAoc3R5bGUoKS0+ZGlzcGxheSgpID09IEJMT0NL
IHx8IHN0eWxlKCktPmRpc3BsYXkoKSA9PSBCT1gpICYmIHN0eWxlKCktPnN0eWxlVHlwZSgpID09
IE5PUFNFVURPICYmIGlzUmVuZGVyQmxvY2soKSAmJiAhaXNMaXN0TWFya2VyKCkKICNpZiBFTkFC
TEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgICAgICAgICAmJiAhaXNSZW5kZXJGdWxsU2NyZWVuKCkK
ICAgICAgICAgICAgICYmICFpc1JlbmRlckZ1bGxTY3JlZW5QbGFjZWhvbGRlcigpCkBAIC00NjUs
MzkgKzQ2NSw0OSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0Jsb2NrRWxlbWVudENvbnRpbnVhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIGlzRWxlbWVudENvbnRpbnVhdGlvbigpICYmICFpc0lubGluZSgp
OyB9CiAgICAgdmlydHVhbCBSZW5kZXJCb3hNb2RlbE9iamVjdCogdmlydHVhbENvbnRpbnVhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAotICAgIGJvb2wgaXNGbG9hdGluZygpIGNvbnN0IHsg
cmV0dXJuIG1fZmxvYXRpbmc7IH0KLSAgICBib29sIGlzUG9zaXRpb25lZCgpIGNvbnN0IHsgcmV0
dXJuIG1fcG9zaXRpb25lZDsgfSAvLyBhYnNvbHV0ZSBvciBmaXhlZCBwb3NpdGlvbmluZwotICAg
IGJvb2wgaXNSZWxQb3NpdGlvbmVkKCkgY29uc3QgeyByZXR1cm4gbV9yZWxQb3NpdGlvbmVkOyB9
IC8vIHJlbGF0aXZlIHBvc2l0aW9uaW5nCi0gICAgYm9vbCBpc1RleHQoKSBjb25zdCAgeyByZXR1
cm4gbV9pc1RleHQ7IH0KLSAgICBib29sIGlzQm94KCkgY29uc3QgeyByZXR1cm4gbV9pc0JveDsg
fQotICAgIGJvb2wgaXNJbmxpbmUoKSBjb25zdCB7IHJldHVybiBtX2lubGluZTsgfSAgLy8gaW5s
aW5lIG9iamVjdAorICAgIGJvb2wgaXNGbG9hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYml0Zmll
bGRzLmZsb2F0aW5nKCk7IH0KKyAgICBib29sIGlzUG9zaXRpb25lZCgpIGNvbnN0IHsgcmV0dXJu
IG1fYml0ZmllbGRzLnBvc2l0aW9uZWQoKTsgfSAvLyBhYnNvbHV0ZSBvciBmaXhlZCBwb3NpdGlv
bmluZworICAgIGJvb2wgaXNSZWxQb3NpdGlvbmVkKCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVs
ZHMucmVsUG9zaXRpb25lZCgpOyB9IC8vIHJlbGF0aXZlIHBvc2l0aW9uaW5nCisgICAgYm9vbCBp
c1RleHQoKSBjb25zdCAgeyByZXR1cm4gbV9iaXRmaWVsZHMuaXNUZXh0KCk7IH0KKyAgICBib29s
IGlzQm94KCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMuaXNCb3goKTsgfQorICAgIGJvb2wg
aXNJbmxpbmUoKSBjb25zdCB7IHJldHVybiBtX2JpdGZpZWxkcy5pc0lubGluZSgpOyB9IC8vIGlu
bGluZSBvYmplY3QKICAgICBib29sIGlzUnVuSW4oKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5k
aXNwbGF5KCkgPT0gUlVOX0lOOyB9IC8vIHJ1bi1pbiBvYmplY3QKLSAgICBib29sIGlzRHJhZ2dp
bmcoKSBjb25zdCB7IHJldHVybiBtX2lzRHJhZ2dpbmc7IH0KLSAgICBib29sIGlzUmVwbGFjZWQo
KSBjb25zdCB7IHJldHVybiBtX3JlcGxhY2VkOyB9IC8vIGEgInJlcGxhY2VkIiBlbGVtZW50IChz
ZWUgQ1NTKQotICAgIGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSBjb25zdCB7IHJldHVy
biBtX2hvcml6b250YWxXcml0aW5nTW9kZTsgfQorICAgIGJvb2wgaXNEcmFnZ2luZygpIGNvbnN0
IHsgcmV0dXJuIG1fYml0ZmllbGRzLmlzRHJhZ2dpbmcoKTsgfQorICAgIGJvb2wgaXNSZXBsYWNl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLmlzUmVwbGFjZWQoKTsgfSAvLyBhICJyZXBs
YWNlZCIgZWxlbWVudCAoc2VlIENTUykKKyAgICBib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMuaG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7IH0K
IAotICAgIGJvb2wgaGFzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2hhc0xheWVyOyB9CisgICAg
Ym9vbCBoYXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLmhhc0xheWVyKCk7IH0K
ICAgICAKLSAgICBib29sIGhhc0JveERlY29yYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9wYWlu
dEJhY2tncm91bmQ7IH0KKyAgICBib29sIGhhc0JveERlY29yYXRpb25zKCkgY29uc3QgeyByZXR1
cm4gbV9iaXRmaWVsZHMucGFpbnRCYWNrZ3JvdW5kKCk7IH0KICAgICBib29sIGJvcmRlckltYWdl
SXNMb2FkZWRBbmRDYW5CZVJlbmRlcmVkKCkgY29uc3Q7CiAgICAgYm9vbCBtdXN0UmVwYWludEJh
Y2tncm91bmRPckJvcmRlcigpIGNvbnN0OwogICAgIGJvb2wgaGFzQmFja2dyb3VuZCgpIGNvbnN0
IHsgcmV0dXJuIHN0eWxlKCktPmhhc0JhY2tncm91bmQoKTsgfQotICAgIGJvb2wgbmVlZHNMYXlv
dXQoKSBjb25zdCB7IHJldHVybiBtX25lZWRzTGF5b3V0IHx8IG1fbm9ybWFsQ2hpbGROZWVkc0xh
eW91dCB8fCBtX3Bvc0NoaWxkTmVlZHNMYXlvdXQgfHwgbV9uZWVkc1NpbXBsaWZpZWROb3JtYWxG
bG93TGF5b3V0IHx8IG1fbmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQ7IH0KLSAgICBib29s
IHNlbGZOZWVkc0xheW91dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNMYXlvdXQ7IH0KLSAgICBi
b29sIG5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0KCkgY29uc3QgeyByZXR1cm4gbV9uZWVk
c1Bvc2l0aW9uZWRNb3ZlbWVudExheW91dDsgfQotICAgIGJvb2wgbmVlZHNQb3NpdGlvbmVkTW92
ZW1lbnRMYXlvdXRPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc1Bvc2l0aW9uZWRNb3ZlbWVu
dExheW91dCAmJiAhbV9uZWVkc0xheW91dCAmJiAhbV9ub3JtYWxDaGlsZE5lZWRzTGF5b3V0ICYm
ICFtX3Bvc0NoaWxkTmVlZHNMYXlvdXQgJiYgIW1fbmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xh
eW91dDsgfQotICAgIGJvb2wgcG9zQ2hpbGROZWVkc0xheW91dCgpIGNvbnN0IHsgcmV0dXJuIG1f
cG9zQ2hpbGROZWVkc0xheW91dDsgfQotICAgIGJvb2wgbmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxv
d0xheW91dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91
dDsgfQotICAgIGJvb2wgbm9ybWFsQ2hpbGROZWVkc0xheW91dCgpIGNvbnN0IHsgcmV0dXJuIG1f
bm9ybWFsQ2hpbGROZWVkc0xheW91dDsgfQorICAgIGJvb2wgbmVlZHNMYXlvdXQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYml0ZmllbGRzLm5lZWRzTGF5b3V0KCkgfHwgbm9ybWFs
Q2hpbGROZWVkc0xheW91dCgpIHx8IHBvc0NoaWxkTmVlZHNMYXlvdXQoKQorICAgICAgICAgICAg
fHwgbmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dCgpIHx8IG5lZWRzUG9zaXRpb25lZE1v
dmVtZW50TGF5b3V0KCk7CisgICAgfQorCisgICAgYm9vbCBzZWxmTmVlZHNMYXlvdXQoKSBjb25z
dCB7IHJldHVybiBtX2JpdGZpZWxkcy5uZWVkc0xheW91dCgpOyB9CisgICAgYm9vbCBuZWVkc1Bv
c2l0aW9uZWRNb3ZlbWVudExheW91dCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLm5lZWRz
UG9zaXRpb25lZE1vdmVtZW50TGF5b3V0KCk7IH0KKyAgICBib29sIG5lZWRzUG9zaXRpb25lZE1v
dmVtZW50TGF5b3V0T25seSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbmVlZHNQb3Np
dGlvbmVkTW92ZW1lbnRMYXlvdXQoKSAmJiAhbmVlZHNMYXlvdXQoKSAmJiAhbm9ybWFsQ2hpbGRO
ZWVkc0xheW91dCgpCisgICAgICAgICAgICAmJiAhcG9zQ2hpbGROZWVkc0xheW91dCgpICYmICFu
ZWVkc1NpbXBsaWZpZWROb3JtYWxGbG93TGF5b3V0KCk7CisgICAgfQorCisgICAgYm9vbCBwb3ND
aGlsZE5lZWRzTGF5b3V0KCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMucG9zQ2hpbGROZWVk
c0xheW91dCgpOyB9CisgICAgYm9vbCBuZWVkc1NpbXBsaWZpZWROb3JtYWxGbG93TGF5b3V0KCkg
Y29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMubmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91
dCgpOyB9CisgICAgYm9vbCBub3JtYWxDaGlsZE5lZWRzTGF5b3V0KCkgY29uc3QgeyByZXR1cm4g
bV9iaXRmaWVsZHMubm9ybWFsQ2hpbGROZWVkc0xheW91dCgpOyB9CiAgICAgCi0gICAgYm9vbCBw
cmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSBjb25zdCB7IHJldHVybiBtX3ByZWZlcnJlZExv
Z2ljYWxXaWR0aHNEaXJ0eTsgfQorICAgIGJvb2wgcHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5
KCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMucHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5
KCk7IH0KIAogICAgIGJvb2wgaXNTZWxlY3Rpb25Cb3JkZXIoKSBjb25zdDsKIAogICAgIGJvb2wg
aGFzQ2xpcCgpIGNvbnN0IHsgcmV0dXJuIGlzUG9zaXRpb25lZCgpICYmIHN0eWxlKCktPmhhc0Ns
aXAoKTsgfQotICAgIGJvb2wgaGFzT3ZlcmZsb3dDbGlwKCkgY29uc3QgeyByZXR1cm4gbV9oYXNP
dmVyZmxvd0NsaXA7IH0KKyAgICBib29sIGhhc092ZXJmbG93Q2xpcCgpIGNvbnN0IHsgcmV0dXJu
IG1fYml0ZmllbGRzLmhhc092ZXJmbG93Q2xpcCgpOyB9CiAKLSAgICBib29sIGhhc1RyYW5zZm9y
bSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVHJhbnNmb3JtOyB9CisgICAgYm9vbCBoYXNUcmFuc2Zv
cm0oKSBjb25zdCB7IHJldHVybiBtX2JpdGZpZWxkcy5oYXNUcmFuc2Zvcm0oKTsgfQogICAgIGJv
b2wgaGFzTWFzaygpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCkgJiYgc3R5bGUoKS0+aGFzTWFzaygp
OyB9CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCkBAIC01MjgsNyArNTM4LDcgQEAgcHVibGlj
OgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHJlbmRlcmVyIGlzIHJvb3RlZCwgYW5kIG9w
dGlvbmFsbHkgcmV0dXJucyB0aGUgaG9zdGluZyB2aWV3ICh0aGUgcm9vdCBvZiB0aGUgaGllcmFy
Y2h5KS4KICAgICBib29sIGlzUm9vdGVkKFJlbmRlclZpZXcqKiA9IDApOwogCi0gICAgTm9kZSog
bm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNBbm9ueW1vdXMgPyAwIDogbV9ub2RlOyB9CisgICAg
Tm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIGlzQW5vbnltb3VzKCkgPyAwIDogbV9ub2RlOyB9
CiAKICAgICAvLyBSZXR1cm5zIHRoZSBzdHlsZWQgbm9kZSB0aGF0IGNhdXNlZCB0aGUgZ2VuZXJh
dGlvbiBvZiB0aGlzIHJlbmRlcmVyLgogICAgIC8vIFRoaXMgaXMgdGhlIHNhbWUgYXMgbm9kZSgp
IGV4Y2VwdCBmb3IgcmVuZGVyZXJzIG9mIDpiZWZvcmUgYW5kIDphZnRlcgpAQCAtNTY2LDE5ICs1
NzYsMTkgQEAgcHVibGljOgogICAgICAgICBzZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHko
dHJ1ZSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRQb3NpdGlvbmVkKGJvb2wgYiA9IHRydWUpICB7
IG1fcG9zaXRpb25lZCA9IGI7ICB9Ci0gICAgdm9pZCBzZXRSZWxQb3NpdGlvbmVkKGJvb2wgYiA9
IHRydWUpIHsgbV9yZWxQb3NpdGlvbmVkID0gYjsgfQotICAgIHZvaWQgc2V0RmxvYXRpbmcoYm9v
bCBiID0gdHJ1ZSkgeyBtX2Zsb2F0aW5nID0gYjsgfQotICAgIHZvaWQgc2V0SW5saW5lKGJvb2wg
YiA9IHRydWUpIHsgbV9pbmxpbmUgPSBiOyB9Ci0gICAgdm9pZCBzZXRIYXNCb3hEZWNvcmF0aW9u
cyhib29sIGIgPSB0cnVlKSB7IG1fcGFpbnRCYWNrZ3JvdW5kID0gYjsgfQotICAgIHZvaWQgc2V0
SXNUZXh0KCkgeyBtX2lzVGV4dCA9IHRydWU7IH0KLSAgICB2b2lkIHNldElzQm94KCkgeyBtX2lz
Qm94ID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0UmVwbGFjZWQoYm9vbCBiID0gdHJ1ZSkgeyBtX3Jl
cGxhY2VkID0gYjsgfQotICAgIHZvaWQgc2V0SG9yaXpvbnRhbFdyaXRpbmdNb2RlKGJvb2wgYiA9
IHRydWUpIHsgbV9ob3Jpem9udGFsV3JpdGluZ01vZGUgPSBiOyB9Ci0gICAgdm9pZCBzZXRIYXNP
dmVyZmxvd0NsaXAoYm9vbCBiID0gdHJ1ZSkgeyBtX2hhc092ZXJmbG93Q2xpcCA9IGI7IH0KLSAg
ICB2b2lkIHNldEhhc0xheWVyKGJvb2wgYiA9IHRydWUpIHsgbV9oYXNMYXllciA9IGI7IH0KLSAg
ICB2b2lkIHNldEhhc1RyYW5zZm9ybShib29sIGIgPSB0cnVlKSB7IG1faGFzVHJhbnNmb3JtID0g
YjsgfQotICAgIHZvaWQgc2V0SGFzUmVmbGVjdGlvbihib29sIGIgPSB0cnVlKSB7IG1faGFzUmVm
bGVjdGlvbiA9IGI7IH0KKyAgICB2b2lkIHNldFBvc2l0aW9uZWQoYm9vbCBiID0gdHJ1ZSkgIHsg
bV9iaXRmaWVsZHMuc2V0UG9zaXRpb25lZChiKTsgIH0KKyAgICB2b2lkIHNldFJlbFBvc2l0aW9u
ZWQoYm9vbCBiID0gdHJ1ZSkgeyBtX2JpdGZpZWxkcy5zZXRSZWxQb3NpdGlvbmVkKGIpOyB9Cisg
ICAgdm9pZCBzZXRGbG9hdGluZyhib29sIGIgPSB0cnVlKSB7IG1fYml0ZmllbGRzLnNldEZsb2F0
aW5nKGIpOyB9CisgICAgdm9pZCBzZXRJbmxpbmUoYm9vbCBiID0gdHJ1ZSkgeyBtX2JpdGZpZWxk
cy5zZXRJc0lubGluZShiKTsgfQorICAgIHZvaWQgc2V0SGFzQm94RGVjb3JhdGlvbnMoYm9vbCBi
ID0gdHJ1ZSkgeyBtX2JpdGZpZWxkcy5zZXRQYWludEJhY2tncm91bmQoYik7IH0KKyAgICB2b2lk
IHNldElzVGV4dCgpIHsgbV9iaXRmaWVsZHMuc2V0SXNUZXh0KHRydWUpOyB9CisgICAgdm9pZCBz
ZXRJc0JveCgpIHsgbV9iaXRmaWVsZHMuc2V0SXNCb3godHJ1ZSk7IH0KKyAgICB2b2lkIHNldFJl
cGxhY2VkKGJvb2wgYiA9IHRydWUpIHsgbV9iaXRmaWVsZHMuc2V0SXNSZXBsYWNlZChiKTsgfQor
ICAgIHZvaWQgc2V0SG9yaXpvbnRhbFdyaXRpbmdNb2RlKGJvb2wgYiA9IHRydWUpIHsgbV9iaXRm
aWVsZHMuc2V0SG9yaXpvbnRhbFdyaXRpbmdNb2RlKGIpOyB9CisgICAgdm9pZCBzZXRIYXNPdmVy
Zmxvd0NsaXAoYm9vbCBiID0gdHJ1ZSkgeyBtX2JpdGZpZWxkcy5zZXRIYXNPdmVyZmxvd0NsaXAo
Yik7IH0KKyAgICB2b2lkIHNldEhhc0xheWVyKGJvb2wgYiA9IHRydWUpIHsgbV9iaXRmaWVsZHMu
c2V0SGFzTGF5ZXIoYik7IH0KKyAgICB2b2lkIHNldEhhc1RyYW5zZm9ybShib29sIGIgPSB0cnVl
KSB7IG1fYml0ZmllbGRzLnNldEhhc1RyYW5zZm9ybShiKTsgfQorICAgIHZvaWQgc2V0SGFzUmVm
bGVjdGlvbihib29sIGIgPSB0cnVlKSB7IG1fYml0ZmllbGRzLnNldEhhc1JlZmxlY3Rpb24oYik7
IH0KIAogICAgIHZvaWQgc2NoZWR1bGVSZWxheW91dCgpOwogCkBAIC03MzYsMTMgKzc0NiwxMyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpc1RyYW5zcGFyZW50KCkgY29uc3QgeyByZXR1cm4gc3R5bGUo
KS0+b3BhY2l0eSgpIDwgMS4wZjsgfQogICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVy
biBzdHlsZSgpLT5vcGFjaXR5KCk7IH0KIAotICAgIGJvb2wgaGFzUmVmbGVjdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1faGFzUmVmbGVjdGlvbjsgfQorICAgIGJvb2wgaGFzUmVmbGVjdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLmhhc1JlZmxlY3Rpb24oKTsgfQogCiAgICAgLy8gQXBw
bGllZCBhcyBhICJzbG9wIiB0byBkaXJ0eSByZWN0IGNoZWNrcyBkdXJpbmcgdGhlIG91dGxpbmUg
cGFpbnRpbmcgcGhhc2UncyBkaXJ0eS1yZWN0IGNoZWNrcy4KICAgICBMYXlvdXRVbml0IG1heGlt
YWxPdXRsaW5lU2l6ZShQYWludFBoYXNlKSBjb25zdDsKIAotICAgIHZvaWQgc2V0SGFzTWFya3Vw
VHJ1bmNhdGlvbihib29sIGIgPSB0cnVlKSB7IG1faGFzTWFya3VwVHJ1bmNhdGlvbiA9IGI7IH0K
LSAgICBib29sIGhhc01hcmt1cFRydW5jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2hhc01hcmt1
cFRydW5jYXRpb247IH0KKyAgICB2b2lkIHNldEhhc01hcmt1cFRydW5jYXRpb24oYm9vbCBiID0g
dHJ1ZSkgeyBtX2JpdGZpZWxkcy5zZXRIYXNNYXJrdXBUcnVuY2F0aW9uKGIpOyB9CisgICAgYm9v
bCBoYXNNYXJrdXBUcnVuY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMuaGFzTWFy
a3VwVHJ1bmNhdGlvbigpOyB9CiAKICAgICBlbnVtIFNlbGVjdGlvblN0YXRlIHsKICAgICAgICAg
U2VsZWN0aW9uTm9uZSwgLy8gVGhlIG9iamVjdCBpcyBub3Qgc2VsZWN0ZWQuCkBAIC03NTQsMjEg
Kzc2NCwxNiBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGUgY3VycmVudCBzZWxlY3Rpb24gc3RhdGUg
Zm9yIGFuIG9iamVjdC4gIEZvciBibG9ja3MsIHRoZSBzdGF0ZSByZWZlcnMgdG8gdGhlIHN0YXRl
IG9mIHRoZSBsZWFmCiAgICAgLy8gZGVzY2VuZGFudHMgKGFzIGRlc2NyaWJlZCBhYm92ZSBpbiB0
aGUgU2VsZWN0aW9uU3RhdGUgZW51bSBkZWNsYXJhdGlvbikuCi0gICAgU2VsZWN0aW9uU3RhdGUg
c2VsZWN0aW9uU3RhdGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxTZWxlY3Rpb25TdGF0
ZT4obV9zZWxlY3Rpb25TdGF0ZSk7OyB9Ci0KLSAgICAvLyBTZXRzIHRoZSBzZWxlY3Rpb24gc3Rh
dGUgZm9yIGFuIG9iamVjdC4KLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoU2Vs
ZWN0aW9uU3RhdGUgc3RhdGUpIHsgbV9zZWxlY3Rpb25TdGF0ZSA9IHN0YXRlOyB9CisgICAgU2Vs
ZWN0aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2JpdGZpZWxkcy5z
ZWxlY3Rpb25TdGF0ZSgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFNl
bGVjdGlvblN0YXRlIHN0YXRlKSB7IG1fYml0ZmllbGRzLnNldFNlbGVjdGlvblN0YXRlKHN0YXRl
KTsgfQogCiAgICAgLy8gQSBzaW5nbGUgcmVjdGFuZ2xlIHRoYXQgZW5jb21wYXNzZXMgYWxsIG9m
IHRoZSBzZWxlY3RlZCBvYmplY3RzIHdpdGhpbiB0aGlzIG9iamVjdC4gIFVzZWQgdG8gZGV0ZXJt
aW5lIHRoZSB0aWdodGVzdAogICAgIC8vIHBvc3NpYmxlIGJvdW5kaW5nIGJveCBmb3IgdGhlIHNl
bGVjdGlvbi4KICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QoYm9vbCBjbGlwVG9WaXNpYmxl
Q29udGVudCA9IHRydWUpIHsgcmV0dXJuIHNlbGVjdGlvblJlY3RGb3JSZXBhaW50KDAsIGNsaXBU
b1Zpc2libGVDb250ZW50KTsgfQogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0
Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogLypyZXBhaW50Q29udGFpbmVyKi8sIGJv
b2wgLypjbGlwVG9WaXNpYmxlQ29udGVudCovID0gdHJ1ZSkgeyByZXR1cm4gTGF5b3V0UmVjdCgp
OyB9CiAKLSAgICAvLyBXaGV0aGVyIG9yIG5vdCBhbiBvYmplY3QgY2FuIGJlIHBhcnQgb2YgdGhl
IGxlYWYgZWxlbWVudHMgb2YgdGhlIHNlbGVjdGlvbi4KICAgICB2aXJ0dWFsIGJvb2wgY2FuQmVT
ZWxlY3Rpb25MZWFmKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIC8vIFdoZXRoZXIg
b3Igbm90IGEgYmxvY2sgaGFzIHNlbGVjdGVkIGNoaWxkcmVuLgotICAgIGJvb2wgaGFzU2VsZWN0
ZWRDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uU3RhdGUgIT0gU2VsZWN0aW9u
Tm9uZTsgfQorICAgIGJvb2wgaGFzU2VsZWN0ZWRDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIHNl
bGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uTm9uZTsgfQogCiAgICAgLy8gT2J0YWlucyB0aGUg
c2VsZWN0aW9uIGNvbG9ycyB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gcGFpbnRpbmcgYSBzZWxl
Y3Rpb24uCiAgICAgQ29sb3Igc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CkBAIC03
ODYsMTAgKzc5MSwxMCBAQCBwdWJsaWM6CiAgICAgICovCiAgICAgdmlydHVhbCBMYXlvdXRSZWN0
IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGludCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCog
ZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCk7CiAKLSAgICBib29sIGlzTWFyZ2luQmVmb3JlUXVp
cmsoKSBjb25zdCB7IHJldHVybiBtX21hcmdpbkJlZm9yZVF1aXJrOyB9Ci0gICAgYm9vbCBpc01h
cmdpbkFmdGVyUXVpcmsoKSBjb25zdCB7IHJldHVybiBtX21hcmdpbkFmdGVyUXVpcms7IH0KLSAg
ICB2b2lkIHNldE1hcmdpbkJlZm9yZVF1aXJrKGJvb2wgYiA9IHRydWUpIHsgbV9tYXJnaW5CZWZv
cmVRdWlyayA9IGI7IH0KLSAgICB2b2lkIHNldE1hcmdpbkFmdGVyUXVpcmsoYm9vbCBiID0gdHJ1
ZSkgeyBtX21hcmdpbkFmdGVyUXVpcmsgPSBiOyB9CisgICAgYm9vbCBpc01hcmdpbkJlZm9yZVF1
aXJrKCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMubWFyZ2luQmVmb3JlUXVpcmsoKTsgfQor
ICAgIGJvb2wgaXNNYXJnaW5BZnRlclF1aXJrKCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMu
bWFyZ2luQWZ0ZXJRdWlyaygpOyB9CisgICAgdm9pZCBzZXRNYXJnaW5CZWZvcmVRdWlyayhib29s
IGIgPSB0cnVlKSB7IG1fYml0ZmllbGRzLnNldE1hcmdpbkJlZm9yZVF1aXJrKGIpOyB9CisgICAg
dm9pZCBzZXRNYXJnaW5BZnRlclF1aXJrKGJvb2wgYiA9IHRydWUpIHsgbV9iaXRmaWVsZHMuc2V0
TWFyZ2luQWZ0ZXJRdWlyayhiKTsgfQogCiAgICAgLy8gV2hlbiBwZXJmb3JtaW5nIGEgZ2xvYmFs
IGRvY3VtZW50IHRlYXItZG93biwgdGhlIHJlbmRlcmVyIG9mIHRoZSBkb2N1bWVudCBpcyBjbGVh
cmVkLiAgV2UgdXNlIHRoaXMKICAgICAvLyBhcyBhIGhvb2sgdG8gZGV0ZWN0IHRoZSBjYXNlIG9m
IGRvY3VtZW50IGRlc3RydWN0aW9uIGFuZCBkb24ndCB3YXN0ZSB0aW1lIGRvaW5nIHVubmVjZXNz
YXJ5IHdvcmsuCkBAIC04NDcsNyArODUyLDcgQEAgcHVibGljOgogICAgIH0KIAogcHJvdGVjdGVk
OgotICAgIGJvb2wgZXZlckhhZExheW91dCgpIGNvbnN0IHsgcmV0dXJuIG1fZXZlckhhZExheW91
dDsgfQorICAgIGJvb2wgZXZlckhhZExheW91dCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRz
LmV2ZXJIYWRMYXlvdXQoKTsgfQogCiAgICAgLy8gT3ZlcnJpZGVzIHNob3VsZCBjYWxsIHRoZSBz
dXBlcmNsYXNzIGF0IHRoZSBlbmQKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVXaWxsQ2hhbmdlKFN0
eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKTsKQEAgLTg4Nyw0OSAr
ODkyLDEwOSBAQCBwcml2YXRlOgogICAgIFJlbmRlck9iamVjdCogbV9uZXh0OwogCiAjaWZuZGVm
IE5ERUJVRwotICAgIGJvb2wgbV9oYXNBWE9iamVjdDsKKyAgICBib29sIG1faGFzQVhPYmplY3Qg
ICAgICAgICAgICAgOiAxOwogICAgIGJvb2wgbV9zZXROZWVkc0xheW91dEZvcmJpZGRlbiA6IDE7
CiAjZW5kaWYKIAotICAgIC8vIDMyIGJpdHMgaGF2ZSBiZWVuIHVzZWQgaGVyZS4gVEhFUkUgQVJF
IE5PIEZSRUUgQklUUyBBVkFJTEFCTEUuCi0gICAgYm9vbCBtX25lZWRzTGF5b3V0ICAgICAgICAg
ICAgICAgOiAxOwotICAgIGJvb2wgbV9uZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExheW91dCA6MTsK
LSAgICBib29sIG1fbm9ybWFsQ2hpbGROZWVkc0xheW91dCAgICA6IDE7Ci0gICAgYm9vbCBtX3Bv
c0NoaWxkTmVlZHNMYXlvdXQgICAgICAgOiAxOwotICAgIGJvb2wgbV9uZWVkc1NpbXBsaWZpZWRO
b3JtYWxGbG93TGF5b3V0ICA6IDE7Ci0gICAgYm9vbCBtX3ByZWZlcnJlZExvZ2ljYWxXaWR0aHNE
aXJ0eSAgICAgICAgICAgOiAxOwotICAgIGJvb2wgbV9mbG9hdGluZyAgICAgICAgICAgICAgICAg
IDogMTsKLQotICAgIGJvb2wgbV9wb3NpdGlvbmVkICAgICAgICAgICAgICAgIDogMTsKLSAgICBi
b29sIG1fcmVsUG9zaXRpb25lZCAgICAgICAgICAgICA6IDE7Ci0gICAgYm9vbCBtX3BhaW50QmFj
a2dyb3VuZCAgICAgICAgICAgOiAxOyAvLyBpZiB0aGUgYm94IGhhcyBzb21ldGhpbmcgdG8gcGFp
bnQgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBi
YWNrZ3JvdW5kIHBhaW50aW5nIHBoYXNlIChiYWNrZ3JvdW5kLCBib3JkZXIsIGV0YykKLQotICAg
IGJvb2wgbV9pc0Fub255bW91cyAgICAgICAgICAgICAgIDogMTsKLSAgICBib29sIG1faXNUZXh0
ICAgICAgICAgICAgICAgICAgICA6IDE7Ci0gICAgYm9vbCBtX2lzQm94ICAgICAgICAgICAgICAg
ICAgICAgOiAxOwotICAgIGJvb2wgbV9pbmxpbmUgICAgICAgICAgICAgICAgICAgIDogMTsKLSAg
ICBib29sIG1fcmVwbGFjZWQgICAgICAgICAgICAgICAgICA6IDE7Ci0gICAgYm9vbCBtX2hvcml6
b250YWxXcml0aW5nTW9kZSA6IDE7Ci0gICAgYm9vbCBtX2lzRHJhZ2dpbmcgICAgICAgICAgICAg
ICAgOiAxOwotCi0gICAgYm9vbCBtX2hhc0xheWVyICAgICAgICAgICAgICAgICAgOiAxOwotICAg
IGJvb2wgbV9oYXNPdmVyZmxvd0NsaXAgICAgICAgICAgIDogMTsgLy8gU2V0IGluIHRoZSBjYXNl
IG9mIG92ZXJmbG93OmF1dG8vc2Nyb2xsL2hpZGRlbgotICAgIGJvb2wgbV9oYXNUcmFuc2Zvcm0g
ICAgICAgICAgICAgIDogMTsKLSAgICBib29sIG1faGFzUmVmbGVjdGlvbiAgICAgICAgICAgICA6
IDE7Ci0KLSAgICBib29sIG1faGFzQ291bnRlck5vZGVNYXAgICAgICAgICA6IDE7Ci0gICAgYm9v
bCBtX2V2ZXJIYWRMYXlvdXQgICAgICAgICAgICAgOiAxOwotCi0gICAgLy8gVGhlc2UgYml0Zmll
bGRzIGFyZSBtb3ZlZCBoZXJlIGZyb20gc3ViY2xhc3NlcyB0byBwYWNrIHRoZW0gdG9nZXRoZXIK
LSAgICAvLyBmcm9tIFJlbmRlckJsb2NrCi0gICAgYm9vbCBtX2NoaWxkcmVuSW5saW5lIDogMTsK
LSAgICBib29sIG1fbWFyZ2luQmVmb3JlUXVpcmsgOiAxOwotICAgIGJvb2wgbV9tYXJnaW5BZnRl
clF1aXJrIDogMTsKLSAgICBib29sIG1faGFzTWFya3VwVHJ1bmNhdGlvbiA6IDE7Ci0gICAgdW5z
aWduZWQgbV9zZWxlY3Rpb25TdGF0ZSA6IDM7IC8vIFNlbGVjdGlvblN0YXRlCi0gICAgYm9vbCBt
X2hhc0NvbHVtbnMgOiAxOwotICAgIGJvb2wgbV9pblJlbmRlckZsb3dUaHJlYWQgOiAxOworI2Rl
ZmluZSBBRERfQk9PTEVBTl9CSVRGSUVMRChuYW1lLCBOYW1lKSBcCisgICAgcHJpdmF0ZTpcCisg
ICAgICAgIHVuc2lnbmVkIG1fIyNuYW1lIDogMTtcCisgICAgcHVibGljOlwKKyAgICAgICAgQUxX
QVlTX0lOTElORSBib29sIG5hbWUoKSBjb25zdCB7IHJldHVybiBtXyMjbmFtZTsgfVwKKyAgICAg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHNldCMjTmFtZShib29sIG5hbWUpIHsgbV8jI25hbWUgPSBu
YW1lOyB9XAorCisgICAgY2xhc3MgUmVuZGVyT2JqZWN0Qml0ZmllbGRzIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIFJlbmRlck9iamVjdEJpdGZpZWxkcyhOb2RlKiBub2RlKQorICAgICAgICAgICAg
OiBtX25lZWRzTGF5b3V0KGZhbHNlKQorICAgICAgICAgICAgLCBtX25lZWRzUG9zaXRpb25lZE1v
dmVtZW50TGF5b3V0KGZhbHNlKQorICAgICAgICAgICAgLCBtX25vcm1hbENoaWxkTmVlZHNMYXlv
dXQoZmFsc2UpCisgICAgICAgICAgICAsIG1fcG9zQ2hpbGROZWVkc0xheW91dChmYWxzZSkKKyAg
ICAgICAgICAgICwgbV9uZWVkc1NpbXBsaWZpZWROb3JtYWxGbG93TGF5b3V0KGZhbHNlKQorICAg
ICAgICAgICAgLCBtX3ByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSkKKyAgICAgICAg
ICAgICwgbV9mbG9hdGluZyhmYWxzZSkKKyAgICAgICAgICAgICwgbV9wb3NpdGlvbmVkKGZhbHNl
KQorICAgICAgICAgICAgLCBtX3JlbFBvc2l0aW9uZWQoZmFsc2UpCisgICAgICAgICAgICAsIG1f
cGFpbnRCYWNrZ3JvdW5kKGZhbHNlKQorICAgICAgICAgICAgLCBtX2lzQW5vbnltb3VzKG5vZGUg
PT0gbm9kZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgICwgbV9pc1RleHQoZmFsc2UpCisgICAg
ICAgICAgICAsIG1faXNCb3goZmFsc2UpCisgICAgICAgICAgICAsIG1faXNJbmxpbmUodHJ1ZSkK
KyAgICAgICAgICAgICwgbV9pc1JlcGxhY2VkKGZhbHNlKQorICAgICAgICAgICAgLCBtX2hvcml6
b250YWxXcml0aW5nTW9kZSh0cnVlKQorICAgICAgICAgICAgLCBtX2lzRHJhZ2dpbmcoZmFsc2Up
CisgICAgICAgICAgICAsIG1faGFzTGF5ZXIoZmFsc2UpCisgICAgICAgICAgICAsIG1faGFzT3Zl
cmZsb3dDbGlwKGZhbHNlKQorICAgICAgICAgICAgLCBtX2hhc1RyYW5zZm9ybShmYWxzZSkKKyAg
ICAgICAgICAgICwgbV9oYXNSZWZsZWN0aW9uKGZhbHNlKQorICAgICAgICAgICAgLCBtX2hhc0Nv
dW50ZXJOb2RlTWFwKGZhbHNlKQorICAgICAgICAgICAgLCBtX2V2ZXJIYWRMYXlvdXQoZmFsc2Up
CisgICAgICAgICAgICAsIG1fY2hpbGRyZW5JbmxpbmUoZmFsc2UpCisgICAgICAgICAgICAsIG1f
bWFyZ2luQmVmb3JlUXVpcmsoZmFsc2UpIAorICAgICAgICAgICAgLCBtX21hcmdpbkFmdGVyUXVp
cmsoZmFsc2UpCisgICAgICAgICAgICAsIG1faGFzTWFya3VwVHJ1bmNhdGlvbihmYWxzZSkKKyAg
ICAgICAgICAgICwgbV9oYXNDb2x1bW5zKGZhbHNlKQorICAgICAgICAgICAgLCBtX2luUmVuZGVy
Rmxvd1RocmVhZChmYWxzZSkKKyAgICAgICAgICAgICwgbV9zZWxlY3Rpb25TdGF0ZShTZWxlY3Rp
b25Ob25lKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIDMyIGJp
dHMgaGF2ZSBiZWVuIHVzZWQgaGVyZS4gVEhFUkUgQVJFIE5PIEZSRUUgQklUUyBBVkFJTEFCTEUu
CisgICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxEKG5lZWRzTGF5b3V0LCBOZWVkc0xheW91dCk7
CisgICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxEKG5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5
b3V0LCBOZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExheW91dCk7CisgICAgICAgIEFERF9CT09MRUFO
X0JJVEZJRUxEKG5vcm1hbENoaWxkTmVlZHNMYXlvdXQsIE5vcm1hbENoaWxkTmVlZHNMYXlvdXQp
OworICAgICAgICBBRERfQk9PTEVBTl9CSVRGSUVMRChwb3NDaGlsZE5lZWRzTGF5b3V0LCBQb3ND
aGlsZE5lZWRzTGF5b3V0KTsKKyAgICAgICAgQUREX0JPT0xFQU5fQklURklFTEQobmVlZHNTaW1w
bGlmaWVkTm9ybWFsRmxvd0xheW91dCwgTmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dCk7
CisgICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxEKHByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0
eSwgUHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KTsKKyAgICAgICAgQUREX0JPT0xFQU5fQklU
RklFTEQoZmxvYXRpbmcsIEZsb2F0aW5nKTsKKworICAgICAgICBBRERfQk9PTEVBTl9CSVRGSUVM
RChwb3NpdGlvbmVkLCBQb3NpdGlvbmVkKTsKKyAgICAgICAgQUREX0JPT0xFQU5fQklURklFTEQo
cmVsUG9zaXRpb25lZCwgUmVsUG9zaXRpb25lZCk7CisgICAgICAgIEFERF9CT09MRUFOX0JJVEZJ
RUxEKHBhaW50QmFja2dyb3VuZCwgUGFpbnRCYWNrZ3JvdW5kKTsgLy8gaWYgdGhlIGJveCBoYXMg
c29tZXRoaW5nIHRvIHBhaW50IGluIHRoZQorICAgICAgICAvLyBiYWNrZ3JvdW5kIHBhaW50aW5n
IHBoYXNlIChiYWNrZ3JvdW5kLCBib3JkZXIsIGV0YykKKworICAgICAgICBBRERfQk9PTEVBTl9C
SVRGSUVMRChpc0Fub255bW91cywgSXNBbm9ueW1vdXMpOworICAgICAgICBBRERfQk9PTEVBTl9C
SVRGSUVMRChpc1RleHQsIElzVGV4dCk7CisgICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxEKGlz
Qm94LCBJc0JveCk7CisgICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxEKGlzSW5saW5lLCBJc0lu
bGluZSk7CisgICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxEKGlzUmVwbGFjZWQsIElzUmVwbGFj
ZWQpOworICAgICAgICBBRERfQk9PTEVBTl9CSVRGSUVMRChob3Jpem9udGFsV3JpdGluZ01vZGUs
IEhvcml6b250YWxXcml0aW5nTW9kZSk7CisgICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxEKGlz
RHJhZ2dpbmcsIElzRHJhZ2dpbmcpOworCisgICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxEKGhh
c0xheWVyLCBIYXNMYXllcik7CisgICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxEKGhhc092ZXJm
bG93Q2xpcCwgSGFzT3ZlcmZsb3dDbGlwKTsgLy8gU2V0IGluIHRoZSBjYXNlIG9mIG92ZXJmbG93
OmF1dG8vc2Nyb2xsL2hpZGRlbgorICAgICAgICBBRERfQk9PTEVBTl9CSVRGSUVMRChoYXNUcmFu
c2Zvcm0sIEhhc1RyYW5zZm9ybSk7CisgICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxEKGhhc1Jl
ZmxlY3Rpb24sIEhhc1JlZmxlY3Rpb24pOworCisgICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxE
KGhhc0NvdW50ZXJOb2RlTWFwLCBIYXNDb3VudGVyTm9kZU1hcCk7CisgICAgICAgIEFERF9CT09M
RUFOX0JJVEZJRUxEKGV2ZXJIYWRMYXlvdXQsIEV2ZXJIYWRMYXlvdXQpOworCisgICAgICAgIC8v
IFRoZXNlIGJpdGZpZWxkcyBhcmUgbW92ZWQgaGVyZSBmcm9tIHN1YmNsYXNzZXMgdG8gcGFjayB0
aGVtIHRvZ2V0aGVyCisgICAgICAgIC8vIGZyb20gUmVuZGVyQmxvY2sKKyAgICAgICAgQUREX0JP
T0xFQU5fQklURklFTEQoY2hpbGRyZW5JbmxpbmUsIENoaWxkcmVuSW5saW5lKTsKKyAgICAgICAg
QUREX0JPT0xFQU5fQklURklFTEQobWFyZ2luQmVmb3JlUXVpcmssIE1hcmdpbkJlZm9yZVF1aXJr
KTsKKyAgICAgICAgQUREX0JPT0xFQU5fQklURklFTEQobWFyZ2luQWZ0ZXJRdWlyaywgTWFyZ2lu
QWZ0ZXJRdWlyayk7CisgICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxEKGhhc01hcmt1cFRydW5j
YXRpb24sIEhhc01hcmt1cFRydW5jYXRpb24pOworICAgICAgICBBRERfQk9PTEVBTl9CSVRGSUVM
RChoYXNDb2x1bW5zLCBIYXNDb2x1bW5zKTsKKyAgICAgICAgQUREX0JPT0xFQU5fQklURklFTEQo
aW5SZW5kZXJGbG93VGhyZWFkLCBJblJlbmRlckZsb3dUaHJlYWQpOworCisgICAgcHJpdmF0ZToK
KyAgICAgICAgdW5zaWduZWQgbV9zZWxlY3Rpb25TdGF0ZSA6IDM7IC8vIFNlbGVjdGlvblN0YXRl
CisKKyAgICBwdWJsaWM6CisgICAgICAgIEFMV0FZU19JTkxJTkUgU2VsZWN0aW9uU3RhdGUgc2Vs
ZWN0aW9uU3RhdGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxTZWxlY3Rpb25TdGF0ZT4o
bV9zZWxlY3Rpb25TdGF0ZSk7IH0KKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldFNlbGVj
dGlvblN0YXRlKFNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0YXRlKSB7IG1fc2VsZWN0aW9uU3Rh
dGUgPSBzZWxlY3Rpb25TdGF0ZTsgfQorICAgIH07CisKKyAgICBSZW5kZXJPYmplY3RCaXRmaWVs
ZHMgbV9iaXRmaWVsZHM7CisKKyAgICB2b2lkIHNldE5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5
b3V0KGJvb2wgYikgeyBtX2JpdGZpZWxkcy5zZXROZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExheW91
dChiKTsgfQorICAgIHZvaWQgc2V0Tm9ybWFsQ2hpbGROZWVkc0xheW91dChib29sIGIpIHsgbV9i
aXRmaWVsZHMuc2V0Tm9ybWFsQ2hpbGROZWVkc0xheW91dChiKTsgfQorICAgIHZvaWQgc2V0UG9z
Q2hpbGROZWVkc0xheW91dChib29sIGIpIHsgbV9iaXRmaWVsZHMuc2V0UG9zQ2hpbGROZWVkc0xh
eW91dChiKTsgfQorICAgIHZvaWQgc2V0TmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dChi
b29sIGIpIHsgbV9iaXRmaWVsZHMuc2V0TmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dChi
KTsgfQorICAgIHZvaWQgc2V0UGFpbnRCYWNrZ3JvdW5kKGJvb2wgYikgeyBtX2JpdGZpZWxkcy5z
ZXRQYWludEJhY2tncm91bmQoYik7IH0KKyAgICB2b2lkIHNldElzRHJhZ2dpbmcoYm9vbCBiKSB7
IG1fYml0ZmllbGRzLnNldElzRHJhZ2dpbmcoYik7IH0KKyAgICB2b2lkIHNldEV2ZXJIYWRMYXlv
dXQoYm9vbCBiKSB7IG1fYml0ZmllbGRzLnNldEV2ZXJIYWRMYXlvdXQoYik7IH0KIAogcHJpdmF0
ZToKICAgICAvLyBTdG9yZSBzdGF0ZSBiZXR3ZWVuIHN0eWxlV2lsbENoYW5nZSBhbmQgc3R5bGVE
aWRDaGFuZ2UKQEAgLTk2OCw4ICsxMDMzLDggQEAgaW5saW5lIGJvb2wgUmVuZGVyT2JqZWN0Ojpp
c0JlZm9yZU9yQWZ0ZQogCiBpbmxpbmUgdm9pZCBSZW5kZXJPYmplY3Q6OnNldE5lZWRzTGF5b3V0
KGJvb2wgYiwgYm9vbCBtYXJrUGFyZW50cykKIHsKLSAgICBib29sIGFscmVhZHlOZWVkZWRMYXlv
dXQgPSBtX25lZWRzTGF5b3V0OwotICAgIG1fbmVlZHNMYXlvdXQgPSBiOworICAgIGJvb2wgYWxy
ZWFkeU5lZWRlZExheW91dCA9IG5lZWRzTGF5b3V0KCk7CisgICAgc2V0TmVlZHNMYXlvdXQoYik7
CiAgICAgaWYgKGIpIHsKICAgICAgICAgQVNTRVJUKCFpc1NldE5lZWRzTGF5b3V0Rm9yYmlkZGVu
KCkpOwogICAgICAgICBpZiAoIWFscmVhZHlOZWVkZWRMYXlvdXQpIHsKQEAgLTk3OSwzNCArMTA0
NCwzNCBAQCBpbmxpbmUgdm9pZCBSZW5kZXJPYmplY3Q6OnNldE5lZWRzTGF5b3V0CiAgICAgICAg
ICAgICAgICAgc2V0TGF5ZXJOZWVkc0Z1bGxSZXBhaW50KCk7CiAgICAgICAgIH0KICAgICB9IGVs
c2UgewotICAgICAgICBtX2V2ZXJIYWRMYXlvdXQgPSB0cnVlOwotICAgICAgICBtX3Bvc0NoaWxk
TmVlZHNMYXlvdXQgPSBmYWxzZTsKLSAgICAgICAgbV9uZWVkc1NpbXBsaWZpZWROb3JtYWxGbG93
TGF5b3V0ID0gZmFsc2U7Ci0gICAgICAgIG1fbm9ybWFsQ2hpbGROZWVkc0xheW91dCA9IGZhbHNl
OwotICAgICAgICBtX25lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0ID0gZmFsc2U7CisgICAg
ICAgIHNldEV2ZXJIYWRMYXlvdXQodHJ1ZSk7CisgICAgICAgIHNldFBvc0NoaWxkTmVlZHNMYXlv
dXQoZmFsc2UpOworICAgICAgICBzZXROZWVkc1NpbXBsaWZpZWROb3JtYWxGbG93TGF5b3V0KGZh
bHNlKTsKKyAgICAgICAgc2V0Tm9ybWFsQ2hpbGROZWVkc0xheW91dChmYWxzZSk7CisgICAgICAg
IHNldE5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0KGZhbHNlKTsKICAgICB9CiB9CiAKIGlu
bGluZSB2b2lkIFJlbmRlck9iamVjdDo6c2V0Q2hpbGROZWVkc0xheW91dChib29sIGIsIGJvb2wg
bWFya1BhcmVudHMpCiB7Ci0gICAgYm9vbCBhbHJlYWR5TmVlZGVkTGF5b3V0ID0gbV9ub3JtYWxD
aGlsZE5lZWRzTGF5b3V0OwotICAgIG1fbm9ybWFsQ2hpbGROZWVkc0xheW91dCA9IGI7CisgICAg
Ym9vbCBhbHJlYWR5TmVlZGVkTGF5b3V0ID0gbm9ybWFsQ2hpbGROZWVkc0xheW91dCgpOworICAg
IHNldE5vcm1hbENoaWxkTmVlZHNMYXlvdXQoYik7CiAgICAgaWYgKGIpIHsKICAgICAgICAgQVNT
RVJUKCFpc1NldE5lZWRzTGF5b3V0Rm9yYmlkZGVuKCkpOwogICAgICAgICBpZiAoIWFscmVhZHlO
ZWVkZWRMYXlvdXQgJiYgbWFya1BhcmVudHMpCiAgICAgICAgICAgICBtYXJrQ29udGFpbmluZ0Js
b2Nrc0ZvckxheW91dCgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fcG9zQ2hpbGROZWVkc0xh
eW91dCA9IGZhbHNlOwotICAgICAgICBtX25lZWRzU2ltcGxpZmllZE5vcm1hbEZsb3dMYXlvdXQg
PSBmYWxzZTsKLSAgICAgICAgbV9ub3JtYWxDaGlsZE5lZWRzTGF5b3V0ID0gZmFsc2U7Ci0gICAg
ICAgIG1fbmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQgPSBmYWxzZTsKKyAgICAgICAgc2V0
UG9zQ2hpbGROZWVkc0xheW91dChmYWxzZSk7CisgICAgICAgIHNldE5lZWRzU2ltcGxpZmllZE5v
cm1hbEZsb3dMYXlvdXQoZmFsc2UpOworICAgICAgICBzZXROb3JtYWxDaGlsZE5lZWRzTGF5b3V0
KGZhbHNlKTsKKyAgICAgICAgc2V0TmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQoZmFsc2Up
OwogICAgIH0KIH0KIAogaW5saW5lIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXROZWVkc1Bvc2l0aW9u
ZWRNb3ZlbWVudExheW91dCgpCiB7Ci0gICAgYm9vbCBhbHJlYWR5TmVlZGVkTGF5b3V0ID0gbV9u
ZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExheW91dDsKLSAgICBtX25lZWRzUG9zaXRpb25lZE1vdmVt
ZW50TGF5b3V0ID0gdHJ1ZTsKKyAgICBib29sIGFscmVhZHlOZWVkZWRMYXlvdXQgPSBuZWVkc1Bv
c2l0aW9uZWRNb3ZlbWVudExheW91dCgpOworICAgIHNldE5lZWRzUG9zaXRpb25lZE1vdmVtZW50
TGF5b3V0KHRydWUpOwogICAgIEFTU0VSVCghaXNTZXROZWVkc0xheW91dEZvcmJpZGRlbigpKTsK
ICAgICBpZiAoIWFscmVhZHlOZWVkZWRMYXlvdXQpIHsKICAgICAgICAgbWFya0NvbnRhaW5pbmdC
bG9ja3NGb3JMYXlvdXQoKTsKQEAgLTEwMTcsOCArMTA4Miw4IEBAIGlubGluZSB2b2lkIFJlbmRl
ck9iamVjdDo6c2V0TmVlZHNQb3NpdGkKIAogaW5saW5lIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRO
ZWVkc1NpbXBsaWZpZWROb3JtYWxGbG93TGF5b3V0KCkKIHsKLSAgICBib29sIGFscmVhZHlOZWVk
ZWRMYXlvdXQgPSBtX25lZWRzU2ltcGxpZmllZE5vcm1hbEZsb3dMYXlvdXQ7Ci0gICAgbV9uZWVk
c1NpbXBsaWZpZWROb3JtYWxGbG93TGF5b3V0ID0gdHJ1ZTsKKyAgICBib29sIGFscmVhZHlOZWVk
ZWRMYXlvdXQgPSBuZWVkc1NpbXBsaWZpZWROb3JtYWxGbG93TGF5b3V0KCk7CisgICAgc2V0TmVl
ZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dCh0cnVlKTsKICAgICBBU1NFUlQoIWlzU2V0TmVl
ZHNMYXlvdXRGb3JiaWRkZW4oKSk7CiAgICAgaWYgKCFhbHJlYWR5TmVlZGVkTGF5b3V0KSB7CiAg
ICAgICAgIG1hcmtDb250YWluaW5nQmxvY2tzRm9yTGF5b3V0KCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcAkocmV2aXNp
b24gMTAyOTc3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdENoaWxk
TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgUmVuZGVyT2JqZWN0KiBS
ZW5kZXJPYmplY3RDaGlsZExpc3Q6OnJlbQogICAgIC8vIFNvIHRoYXQgd2UnbGwgZ2V0IHRoZSBh
cHByb3ByaWF0ZSBkaXJ0eSBiaXQgc2V0IChlaXRoZXIgdGhhdCBhIG5vcm1hbCBmbG93IGNoaWxk
IGdvdCB5YW5rZWQgb3IKICAgICAvLyB0aGF0IGEgcG9zaXRpb25lZCBjaGlsZCBnb3QgeWFua2Vk
KS4gIFdlIGFsc28gcmVwYWludCwgc28gdGhhdCB0aGUgYXJlYSBleHBvc2VkIHdoZW4gdGhlIGNo
aWxkCiAgICAgLy8gZGlzYXBwZWFycyBnZXRzIHJlcGFpbnRlZCBwcm9wZXJseS4KLSAgICBpZiAo
IW93bmVyLT5kb2N1bWVudEJlaW5nRGVzdHJveWVkKCkgJiYgZnVsbFJlbW92ZSAmJiBvbGRDaGls
ZC0+bV9ldmVySGFkTGF5b3V0KSB7CisgICAgaWYgKCFvd25lci0+ZG9jdW1lbnRCZWluZ0Rlc3Ry
b3llZCgpICYmIGZ1bGxSZW1vdmUgJiYgb2xkQ2hpbGQtPmV2ZXJIYWRMYXlvdXQoKSkgewogICAg
ICAgICBvbGRDaGlsZC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAg
ICAgIGlmIChvbGRDaGlsZC0+aXNCb2R5KCkpCiAgICAgICAgICAgICBvd25lci0+dmlldygpLT5y
ZXBhaW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Nv
bnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdDb250YWluZXIuY3BwCShyZXZpc2lvbiAxMDI5NzcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDcgKzY2LDcgQEAgdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmxheW91dCgpCiAgICAgU1ZH
UmVuZGVyU3VwcG9ydDo6bGF5b3V0Q2hpbGRyZW4odGhpcywgc2VsZk5lZWRzTGF5b3V0KCkgfHwg
U1ZHUmVuZGVyU3VwcG9ydDo6ZmlsdGVyc0ZvcmNlQ29udGFpbmVyTGF5b3V0KHRoaXMpKTsKIAog
ICAgIC8vIEludmFsaWRhdGUgYWxsIHJlc291cmNlcyBvZiB0aGlzIGNsaWVudCBpZiBvdXIgbGF5
b3V0IGNoYW5nZWQuCi0gICAgaWYgKG1fZXZlckhhZExheW91dCAmJiBuZWVkc0xheW91dCgpKQor
ICAgIGlmIChldmVySGFkTGF5b3V0KCkgJiYgbmVlZHNMYXlvdXQoKSkKICAgICAgICAgU1ZHUmVz
b3VyY2VzQ2FjaGU6OmNsaWVudExheW91dENoYW5nZWQodGhpcyk7CiAKICAgICAvLyBBdCB0aGlz
IHBvaW50IExheW91dFJlcGFpbnRlciBhbHJlYWR5IGdyYWJiZWQgdGhlIG9sZCBib3VuZHMsCg==
</data>
<flag name="review"
          id="119571"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="119580"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>