<?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>138766</bug_id>
          
          <creation_ts>2014-11-15 16:06:47 -0800</creation_ts>
          <short_desc>Move more CSS properties to the new StyleBuilder</short_desc>
          <delta_ts>2014-11-21 21:28:39 -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>CSS</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>137910</dependson>
          <blocked>138882</blocked>
    
    <blocked>138909</blocked>
    
    <blocked>138938</blocked>
    
    <blocked>138983</blocked>
    
    <blocked>138999</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1049008</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-15 16:06:47 -0800</bug_when>
    <thetext>Move more CSS properties from DeprecatedStyleBuilder to the new StyleBuilder:
line-height
word-spacing
-webkit-marquee-repetition
-webkit-text-underline-position</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049009</commentid>
    <comment_count>1</comment_count>
      <attachid>241665</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-15 16:09:18 -0800</bug_when>
    <thetext>Created attachment 241665
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049105</commentid>
    <comment_count>2</comment_count>
      <attachid>241665</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-16 20:11:40 -0800</bug_when>
    <thetext>Comment on attachment 241665
Patch

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

&gt; Source/WebCore/css/StyleBuilderConverter.h:438
&gt; +    unsigned t = 0;

How about combinedPosition instead of t as a name for this variable?

&gt; Source/WebCore/css/StyleBuilderConverter.h:440
&gt; +        TextUnderlinePosition t2 = downcast&lt;CSSPrimitiveValue&gt;(currentValue.get());

How about position instead of t2 as a name for this variable?

&gt; Source/WebCore/css/StyleBuilderCustom.h:497
&gt; +static inline CSSToLengthConversionData csstoLengthConversionDataWithTextZoomFactor(StyleResolver&amp; styleResolver)

Should not be marked &quot;static&quot;.

&gt; Source/WebCore/css/StyleBuilderCustom.h:505
&gt; +static inline bool convertLineHeight(StyleResolver&amp; styleResolver, const CSSValue&amp; value, Length&amp; length, float multiplier = 1.f)

Should not be marked &quot;static&quot;.

&gt; Source/WebCore/css/StyleBuilderCustom.h:548
&gt; +#if ENABLE(IOS_TEXT_AUTOSIZING)
&gt; +inline void applyInheritLineHeight(StyleResolver&amp; styleResolver)

Should add a blank line here.

&gt; Source/WebCore/css/StyleBuilderCustom.h:580
&gt; +}
&gt; +#endif

Should add a blank line here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049113</commentid>
    <comment_count>3</comment_count>
      <attachid>241690</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-16 21:02:18 -0800</bug_when>
    <thetext>Created attachment 241690
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049123</commentid>
    <comment_count>4</comment_count>
      <attachid>241690</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-16 21:46:17 -0800</bug_when>
    <thetext>Comment on attachment 241690
Patch

Rejecting attachment 241690 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.appspot.com&apos;, &apos;--bot-id=webkit-cq-02&apos;, &apos;build&apos;, &apos;--no-clean&apos;, &apos;--no-update&apos;, &apos;--build-style=release&apos;, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
bCore/rendering/style/StyleGridItemData.cpp -o /Volumes/Data/EWS/WebKit/WebKitBuild/WebCore.build/Release/WebCore.build/Objects-normal/x86_64/StyleGridItemData.o

** BUILD FAILED **


The following build commands failed:
	CompileC /Volumes/Data/EWS/WebKit/WebKitBuild/WebCore.build/Release/WebCore.build/Objects-normal/x86_64/StyleBuilder.o /Volumes/Data/EWS/WebKit/WebKitBuild/Release/DerivedSources/WebCore/StyleBuilder.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler
(1 failure)

Full output: http://webkit-queues.appspot.com/results/6263404385796096</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049202</commentid>
    <comment_count>5</comment_count>
      <attachid>241714</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-17 08:05:59 -0800</bug_when>
    <thetext>Created attachment 241714
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049211</commentid>
    <comment_count>6</comment_count>
      <attachid>241714</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-17 08:43:53 -0800</bug_when>
    <thetext>Comment on attachment 241714
Patch

Clearing flags on attachment: 241714

Committed r176202: &lt;http://trac.webkit.org/changeset/176202&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049212</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-17 08:43:59 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241665</attachid>
            <date>2014-11-15 16:09:18 -0800</date>
            <delta_ts>2014-11-16 21:02:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138766-20141115160927.patch</filename>
            <type>text/plain</type>
            <size>25592</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2MTUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzZlYjU3YmQ5NTkyMTAy
ZDI0NDAyODc5ZjUxMTA1NDUxM2I4OTc0NC4uOTU1YjI1OGE4NzlkODI5NTZmMzNhY2MxYTIyZTVk
OGVjMGYwNzhjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE0LTExLTE1ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBtb3JlIENTUyBwcm9w
ZXJ0aWVzIHRvIHRoZSBuZXcgU3R5bGVCdWlsZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg3NjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIG1vcmUgQ1NTIHByb3BlcnRpZXMgZnJvbSBEZXBy
ZWNhdGVkU3R5bGVCdWlsZGVyIHRvIHRoZSBuZXcKKyAgICAgICAgU3R5bGVCdWlsZGVyOgorICAg
ICAgICBsaW5lLWhlaWdodAorICAgICAgICB3b3JkLXNwYWNpbmcKKyAgICAgICAgLXdlYmtpdC1t
YXJxdWVlLXJlcGV0aXRpb24KKyAgICAgICAgLXdlYmtpdC10ZXh0LXVuZGVybGluZS1wb3NpdGlv
bgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAg
ICogY3NzL0NTU1Byb3BlcnR5TmFtZXMuaW46CisgICAgICAgICogY3NzL0RlcHJlY2F0ZWRTdHls
ZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVwcmVjYXRlZFN0eWxlQnVpbGRlcjo6
RGVwcmVjYXRlZFN0eWxlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpjc3N0b0xlbmd0aENv
bnZlcnNpb25EYXRhV2l0aFRleHRab29tRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlNYXJxdWVlUmVwZXRpdGlvbjo6YXBwbHlWYWx1ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5TWFycXVlZVJlcGV0aXRpb246OmNyZWF0
ZUhhbmRsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRV
bmRlcmxpbmVQb3NpdGlvbjo6YXBwbHlWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVByb3BlcnR5VGV4dFVuZGVybGluZVBvc2l0aW9uOjpjcmVhdGVIYW5kbGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlMaW5lSGVpZ2h0OjphcHBseVZh
bHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlMaW5lSGVpZ2h0
OjpjcmVhdGVIYW5kbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlMaW5lSGVpZ2h0Rm9ySU9TVGV4dEF1dG9zaXppbmc6OmFwcGx5VmFsdWUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUxpbmVIZWlnaHRGb3JJT1NUZXh0QXV0b3Np
emluZzo6YXBwbHlJbml0aWFsVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eUxpbmVIZWlnaHRGb3JJT1NUZXh0QXV0b3NpemluZzo6YXBwbHlJbmhlcml0VmFs
dWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUxpbmVIZWlnaHRG
b3JJT1NUZXh0QXV0b3NpemluZzo6Y3JlYXRlSGFuZGxlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5V29yZFNwYWNpbmc6OmFwcGx5VmFsdWUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVdvcmRTcGFjaW5nOjpjcmVhdGVIYW5kbGVy
KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvU3R5bGVCdWlsZGVyQ29udmVydGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRNYXJxdWVlUmVwZXRp
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRU
ZXh0VW5kZXJsaW5lUG9zaXRpb24pOgorICAgICAgICAqIGNzcy9TdHlsZUJ1aWxkZXJDdXN0b20u
aDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckZ1bmN0aW9uczo6Y3NzdG9MZW5ndGhD
b252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZUJ1aWxkZXJGdW5jdGlvbnM6OmNvbnZlcnRMaW5lSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlQnVpbGRlckZ1bmN0aW9uczo6YXBwbHlWYWx1ZVdvcmRTcGFjaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlQnVpbGRlckZ1bmN0aW9uczo6YXBwbHlJbmhlcml0TGluZUhlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJGdW5jdGlvbnM6OmFwcGx5SW5pdGlhbExp
bmVIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyRnVuY3Rpb25zOjphcHBs
eVZhbHVlTGluZUhlaWdodCk6CisKIDIwMTQtMTEtMTQgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5q
YW1pbkB3ZWJraXQub3JnPgogCiAgICAgICAgIENvbXB1dGUgdGhlIHNlbGVjdG9yIHNwZWNpZmlj
aXR5IGFzIHdlIG1hdGNoIHNpbXBsZSBzZWxlY3RvcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQcm9wZXJ0eU5hbWVzLmluIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3Bl
cnR5TmFtZXMuaW4KaW5kZXggZDgzMTg2NGE2ZDg1Y2FkYjU1YzFjMzg0YTJjNGUwNzIxMjRkZGNk
Ny4uZDkwYjM3ZWMzMGI0MzQxZjI4NTk3OGVhNTY5OWU2NmU3MzRjNDBiYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5TmFtZXMuaW4KKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1Byb3BlcnR5TmFtZXMuaW4KQEAgLTgwLDcgKzgwLDExIEBAIHRleHQtcmVuZGVy
aW5nIFtJbmhlcml0ZWRdCiB6b29tIFtOZXdTdHlsZUJ1aWxkZXIsIEN1c3RvbT1BbGxdCiAKIC8v
IGxpbmUgaGVpZ2h0IG5lZWRzIHRvIGJlIHJpZ2h0IGFmdGVyIHRoZSBhYm92ZSBoaWdoLXByaW9y
aXR5IHByb3BlcnRpZXMKLWxpbmUtaGVpZ2h0IFtJbmhlcml0ZWRdCisjaWYgZGVmaW5lZChFTkFC
TEVfSU9TX1RFWFRfQVVUT1NJWklORykgJiYgRU5BQkxFX0lPU19URVhUX0FVVE9TSVpJTkcKK2xp
bmUtaGVpZ2h0IFtJbmhlcml0ZWQsIE5ld1N0eWxlQnVpbGRlciwgQ3VzdG9tPUFsbF0KKyNlbHNl
CitsaW5lLWhlaWdodCBbSW5oZXJpdGVkLCBOZXdTdHlsZUJ1aWxkZXIsIEdldHRlcj1zcGVjaWZp
ZWRMaW5lSGVpZ2h0LCBDdXN0b209VmFsdWVdCisjZW5kaWYKIAogLy8gS2VlcCB0aGlzIGluIGJl
dHdlZW4gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcHJvcHMgYW5kIHRoZSBsb3dlciBvbmVzLgogLXdl
YmtpdC1ydWJ5LXBvc2l0aW9uIFtJbmhlcml0ZWQsIE5ld1N0eWxlQnVpbGRlciwgVHlwZU5hbWU9
UnVieVBvc2l0aW9uXQpAQCAtMjYyLDcgKzI2Niw3IEBAIHdpZG93cyBbSW5oZXJpdGVkXQogd2lk
dGggW05ld1N0eWxlQnVpbGRlciwgSW5pdGlhbD1pbml0aWFsU2l6ZSwgQ29udmVydGVyPUxlbmd0
aFNpemluZ10KIHdvcmQtYnJlYWsgW0luaGVyaXRlZCwgTmV3U3R5bGVCdWlsZGVyXQogLWVwdWIt
d29yZC1icmVhayA9IHdvcmQtYnJlYWsKLXdvcmQtc3BhY2luZyBbSW5oZXJpdGVkXQord29yZC1z
cGFjaW5nIFtJbmhlcml0ZWQsIE5ld1N0eWxlQnVpbGRlciwgQ3VzdG9tPVZhbHVlXQogd29yZC13
cmFwIFtJbmhlcml0ZWQsIE5ld1N0eWxlQnVpbGRlcj1FT3ZlcmZsb3dXcmFwLCBOYW1lRm9yTWV0
aG9kcz1PdmVyZmxvd1dyYXBdCiB6LWluZGV4CiBhbHQKQEAgLTQyOSw3ICs0MzMsNyBAQCBqdXN0
aWZ5LWNvbnRlbnQgW05ld1N0eWxlQnVpbGRlcl0KIC13ZWJraXQtbWFycXVlZQogLXdlYmtpdC1t
YXJxdWVlLWRpcmVjdGlvbiBbTmV3U3R5bGVCdWlsZGVyXQogLXdlYmtpdC1tYXJxdWVlLWluY3Jl
bWVudCBbTmV3U3R5bGVCdWlsZGVyLCBDdXN0b209VmFsdWVdCi0td2Via2l0LW1hcnF1ZWUtcmVw
ZXRpdGlvbgorLXdlYmtpdC1tYXJxdWVlLXJlcGV0aXRpb24gW05ld1N0eWxlQnVpbGRlciwgTmFt
ZUZvck1ldGhvZHM9TWFycXVlZUxvb3BDb3VudCwgQ29udmVydGVyPU1hcnF1ZWVSZXBldGl0aW9u
XQogLXdlYmtpdC1tYXJxdWVlLXNwZWVkIFtOZXdTdHlsZUJ1aWxkZXIsIENvbnZlcnRlcj1NYXJx
dWVlU3BlZWRdCiAtd2Via2l0LW1hcnF1ZWUtc3R5bGUgW05ld1N0eWxlQnVpbGRlciwgVHlwZU5h
bWU9RU1hcnF1ZWVCZWhhdmlvciwgTmFtZUZvck1ldGhvZHM9TWFycXVlZUJlaGF2aW9yXQogLXdl
YmtpdC1tYXNrCkBAIC00ODYsNyArNDkwLDcgQEAgb3JkZXIgW05ld1N0eWxlQnVpbGRlciwgVHlw
ZU5hbWU9aW50XQogLXdlYmtpdC10ZXh0LWRlY29yYXRpb24tc3R5bGUgW05ld1N0eWxlQnVpbGRl
ciwgVHlwZU5hbWU9VGV4dERlY29yYXRpb25TdHlsZV0KIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9u
LWNvbG9yCiAtd2Via2l0LXRleHQtZGVjb3JhdGlvbi1za2lwIFtJbmhlcml0ZWRdCi0td2Via2l0
LXRleHQtdW5kZXJsaW5lLXBvc2l0aW9uIFtJbmhlcml0ZWRdCistd2Via2l0LXRleHQtdW5kZXJs
aW5lLXBvc2l0aW9uIFtJbmhlcml0ZWQsIE5ld1N0eWxlQnVpbGRlciwgQ29udmVydGVyPVRleHRV
bmRlcmxpbmVQb3NpdGlvbl0KIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QgW0lu
aGVyaXRlZF0KIC13ZWJraXQtdGV4dC1lbXBoYXNpcyBbSW5oZXJpdGVkXQogLWVwdWItdGV4dC1l
bXBoYXNpcyA9IC13ZWJraXQtdGV4dC1lbXBoYXNpcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0Rl
cHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwCmluZGV4IDM3MmVkYjFjYzVhZDg0Mjg2ZjhjN2U3YjQy
MjUyMmU2M2FkMmRkMTguLjVjZDFjY2FhYmUzYWUxMzdjYjc4ODRiZjlmYjAxN2Q4MmM0YWRkMTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAKQEAg
LTkyNSwxNCArOTI1LDYgQEAgc3RhdGljIFRleHREZWNvcmF0aW9uU2tpcCB2YWx1ZVRvRGVjb3Jh
dGlvblNraXAoQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHUKICAgICByZXR1cm4gVGV4
dERlY29yYXRpb25Ta2lwTm9uZTsKIH0KIAotc3RhdGljIGlubGluZSBDU1NUb0xlbmd0aENvbnZl
cnNpb25EYXRhIGNzc3RvTGVuZ3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3IoU3R5
bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKLXsKLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gc3R5
bGVSZXNvbHZlci5kb2N1bWVudCgpLmZyYW1lKCkpCi0gICAgICAgIHJldHVybiBzdHlsZVJlc29s
dmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRa
b29tKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpICogZnJhbWUtPnRleHRa
b29tRmFjdG9yKCkpOwotCi0gICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xl
bmd0aENvbnZlcnNpb25EYXRhKCk7Ci19Ci0KIGNsYXNzIEFwcGx5UHJvcGVydHlUZXh0RGVjb3Jh
dGlvblNraXAgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQpAQCAt
OTU2LDE2NSArOTQ4LDYgQEAgcHVibGljOgogICAgIH0KIH07CiAKLWNsYXNzIEFwcGx5UHJvcGVy
dHlNYXJxdWVlUmVwZXRpdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSog
dmFsdWUpCi0gICAgewotICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUp
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmlt
aXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwotICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlSW5maW5pdGUpCi0g
ICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRNYXJxdWVlTG9vcENvdW50KC0x
KTsgLy8gLTEgbWVhbnMgcmVwZWF0IGZvcmV2ZXIuCi0gICAgICAgIGVsc2UgaWYgKHByaW1pdGl2
ZVZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5z
ZXRNYXJxdWVlTG9vcENvdW50KHByaW1pdGl2ZVZhbHVlLmdldEludFZhbHVlKCkpOwotICAgIH0K
LSAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQotICAgIHsKLSAgICAg
ICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5RGVmYXVsdDxpbnQsICZS
ZW5kZXJTdHlsZTo6bWFycXVlZUxvb3BDb3VudCwgaW50LCAmUmVuZGVyU3R5bGU6OnNldE1hcnF1
ZWVMb29wQ291bnQsIGludCwgJlJlbmRlclN0eWxlOjppbml0aWFsTWFycXVlZUxvb3BDb3VudD46
OmNyZWF0ZUhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVy
LmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1
ZSk7Ci0gICAgfQotfTsKLQotY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHRVbmRlcmxpbmVQb3NpdGlv
biB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCi0gICAgewotICAg
ICAgICAvLyBUaGlzIGlzIHRydWUgaWYgdmFsdWUgaXMgJ2F1dG8nIG9yICdhbHBoYWJldGljJy4K
LSAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKSB7Ci0gICAgICAgICAg
ICBUZXh0VW5kZXJsaW5lUG9zaXRpb24gdCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dFVuZGVy
bGluZVBvc2l0aW9uKHQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdW5zaWduZWQgdCA9IDA7Ci0gICAgICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkp
IHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY3VycmVudFZhbHVlIDogZG93bmNhc3Q8Q1NTVmFs
dWVMaXN0PigqdmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgVGV4dFVuZGVybGluZVBvc2l0aW9u
IHQyID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGN1cnJlbnRWYWx1ZS5nZXQoKSk7Ci0g
ICAgICAgICAgICAgICAgdCB8PSB0MjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0VW5kZXJsaW5lUG9zaXRpb24oc3RhdGlj
X2Nhc3Q8VGV4dFVuZGVybGluZVBvc2l0aW9uPih0KSk7Ci0gICAgfQotICAgIHN0YXRpYyBQcm9w
ZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCi0gICAgewotICAgICAgICBQcm9wZXJ0eUhhbmRs
ZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxUZXh0VW5kZXJsaW5lUG9zaXRp
b24sICZSZW5kZXJTdHlsZTo6dGV4dFVuZGVybGluZVBvc2l0aW9uLCBUZXh0VW5kZXJsaW5lUG9z
aXRpb24sICZSZW5kZXJTdHlsZTo6c2V0VGV4dFVuZGVybGluZVBvc2l0aW9uLCBUZXh0VW5kZXJs
aW5lUG9zaXRpb24sICZSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRVbmRlcmxpbmVQb3NpdGlvbj46
OmNyZWF0ZUhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVy
LmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1
ZSk7Ci0gICAgfQotfTsKLQotY2xhc3MgQXBwbHlQcm9wZXJ0eUxpbmVIZWlnaHQgewotcHVibGlj
OgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKCFp
czxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnZhbHVlKTsKLSAgICAgICAgTGVuZ3RoIGxpbmVIZWlnaHQ7Ci0KLSAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkKLSAg
ICAgICAgICAgIGxpbmVIZWlnaHQgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKTsK
LSAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNMZW5ndGgoKSkKLSAgICAgICAgICAg
IGxpbmVIZWlnaHQgPSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY3NzdG9M
ZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3Rvcigqc3R5bGVSZXNvbHZlcikpOwot
ICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc1BlcmNlbnRhZ2UoKSkgewotICAgICAg
ICAgICAgLy8gRklYTUU6IHBlcmNlbnRhZ2Ugc2hvdWxkIG5vdCBiZSByZXN0cmljdGVkIHRvIGFu
IGludGVnZXIgaGVyZS4KLSAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgoKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPmNvbXB1dGVkRm9udFNpemUoKSAqIHByaW1pdGl2ZVZhbHVlLmdldElu
dFZhbHVlKCkpIC8gMTAwLCBGaXhlZCk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IG51bWJlciBhbmQgcGVyY2Vu
dGFnZSB2YWx1ZXMgc2hvdWxkIHByb2R1Y2UgdGhlIHNhbWUgdHlwZSBvZiBMZW5ndGggKGllLiBG
aXhlZCBvciBQZXJjZW50KS4KLSAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgocHJpbWl0
aXZlVmFsdWUuZ2V0RG91YmxlVmFsdWUoKSAqIDEwMC4wLCBQZXJjZW50KTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PnNldExpbmVIZWlnaHQobGluZUhlaWdodCk7Ci0gICAgfQotICAgIHN0YXRpYyBQcm9wZXJ0eUhh
bmRsZXIgY3JlYXRlSGFuZGxlcigpCi0gICAgewotICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFu
ZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxjb25zdCBMZW5ndGgmLCAmUmVuZGVyU3R5
bGU6OnNwZWNpZmllZExpbmVIZWlnaHQsIExlbmd0aCwgJlJlbmRlclN0eWxlOjpzZXRMaW5lSGVp
Z2h0LCBMZW5ndGgsICZSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQ+OjpjcmVhdGVIYW5k
bGVyKCk7Ci0gICAgICAgIHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoaGFuZGxlci5pbmhlcml0RnVu
Y3Rpb24oKSwgaGFuZGxlci5pbml0aWFsRnVuY3Rpb24oKSwgJmFwcGx5VmFsdWUpOwotICAgIH0K
LX07Ci0KLSNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKLS8vIEZJWE1FOiBTaGFyZSBt
b3JlIGNvZGUgd2l0aCBjbGFzcyBBcHBseVByb3BlcnR5TGluZUhlaWdodC4KLWNsYXNzIEFwcGx5
UHJvcGVydHlMaW5lSGVpZ2h0Rm9ySU9TVGV4dEF1dG9zaXppbmcgewotcHVibGljOgotICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKCFpczxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKTsKLSAgICAgICAgTGVuZ3RoIGxpbmVIZWlnaHQ7Ci0KLSAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkKLSAgICAgICAgICAg
IGxpbmVIZWlnaHQgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKTsKLSAgICAgICAg
ZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNMZW5ndGgoKSkgewotICAgICAgICAgICAgbGluZUhl
aWdodCA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjc3N0b0xlbmd0aENv
bnZlcnNpb25EYXRhV2l0aFRleHRab29tRmFjdG9yKCpzdHlsZVJlc29sdmVyKSk7Ci0gICAgICAg
ICAgICBpZiAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+dGV4dFNpemVBZGp1c3QoKS5pc1BlcmNl
bnRhZ2UoKSkKLSAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKGxpbmVIZWlnaHQu
dmFsdWUoKSAqIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnRleHRTaXplQWRqdXN0KCkubXVsdGlw
bGllcigpLCBGaXhlZCk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNQZXJj
ZW50YWdlKCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBwZXJjZW50YWdlIHNob3VsZCBub3Qg
YmUgcmVzdHJpY3RlZCB0byBhbiBpbnRlZ2VyIGhlcmUuCi0gICAgICAgICAgICBsaW5lSGVpZ2h0
ID0gTGVuZ3RoKChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250U2l6ZSgpICogcHJpbWl0aXZl
VmFsdWUuZ2V0SW50VmFsdWUoKSkgLyAxMDAsIEZpeGVkKTsKLSAgICAgICAgfSBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogbnVtYmVy
IGFuZCBwZXJjZW50YWdlIHZhbHVlcyBzaG91bGQgcHJvZHVjZSB0aGUgc2FtZSB0eXBlIG9mIExl
bmd0aCAoaWUuIEZpeGVkIG9yIFBlcmNlbnQpLgotICAgICAgICAgICAgaWYgKHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnRleHRTaXplQWRqdXN0KCkuaXNQZXJjZW50YWdlKCkpCi0gICAgICAgICAg
ICAgICAgbGluZUhlaWdodCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS5nZXREb3VibGVWYWx1ZSgp
ICogc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+dGV4dFNpemVBZGp1c3QoKS5tdWx0aXBsaWVyKCkg
KiAxMDAuMCwgUGVyY2VudCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGlu
ZUhlaWdodCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS5nZXREb3VibGVWYWx1ZSgpICogMTAwLjAs
IFBlcmNlbnQpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TGluZUhlaWdodChsaW5lSGVpZ2h0KTsKLSAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0U3BlY2lmaWVkTGluZUhlaWdodChsaW5lSGVp
Z2h0KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQotICAgIHsKLSAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExp
bmVIZWlnaHQoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFNwZWNpZmll
ZExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxTcGVjaWZpZWRMaW5lSGVpZ2h0KCkpOwot
ICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCi0gICAgewotICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkt
PmxpbmVIZWlnaHQoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFNwZWNp
ZmllZExpbmVIZWlnaHQoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+c3BlY2lmaWVkTGlu
ZUhlaWdodCgpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhh
bmRsZXIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhl
cml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOwotICAgIH0KLX07Ci0j
ZW5kaWYKLQotY2xhc3MgQXBwbHlQcm9wZXJ0eVdvcmRTcGFjaW5nIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICghaXM8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZSk7Ci0gICAgICAgIExlbmd0aCB3b3JkU3BhY2luZzsKLQotICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKQotICAgICAgICAg
ICAgd29yZFNwYWNpbmcgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbFdvcmRTcGFjaW5nKCk7Ci0gICAg
ICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIHdv
cmRTcGFjaW5nID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNzc3RvTGVu
Z3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3IoKnN0eWxlUmVzb2x2ZXIpKTsKLSAg
ICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAg
ICAgIHdvcmRTcGFjaW5nID0gTGVuZ3RoKGNsYW1wVG88ZmxvYXQ+KHByaW1pdGl2ZVZhbHVlLmdl
dERvdWJsZVZhbHVlKCksIG1pblZhbHVlRm9yQ3NzTGVuZ3RoLCBtYXhWYWx1ZUZvckNzc0xlbmd0
aCksIFBlcmNlbnQpOwotICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigp
KQotICAgICAgICAgICAgd29yZFNwYWNpbmcgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUuZ2V0RG91
YmxlVmFsdWUoKSwgRml4ZWQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFdvcmRTcGFjaW5nKHdvcmRTcGFjaW5n
KTsKLSAgICB9Ci0gICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKLSAg
ICB7Ci0gICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURlZmF1
bHRCYXNlPGNvbnN0IExlbmd0aCYsICZSZW5kZXJTdHlsZTo6d29yZFNwYWNpbmcsIExlbmd0aCwg
JlJlbmRlclN0eWxlOjpzZXRXb3JkU3BhY2luZywgTGVuZ3RoLCAmUmVuZGVyU3R5bGU6OmluaXRp
YWxXb3JkU3BhY2luZz46OmNyZWF0ZUhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5
SGFuZGxlcihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlv
bigpLCAmYXBwbHlWYWx1ZSk7Ci0gICAgfQotfTsKLQogY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHRF
bXBoYXNpc1N0eWxlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQpAQCAtMTQyNiwx
OCArMTI1OSwxMiBAQCBEZXByZWNhdGVkU3R5bGVCdWlsZGVyOjpEZXByZWNhdGVkU3R5bGVCdWls
ZGVyKCkKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlGb250U3R5bGUsIEFwcGx5
UHJvcGVydHlGb250PEZvbnRJdGFsaWMsICZGb250RGVzY3JpcHRpb246Oml0YWxpYywgJkZvbnRE
ZXNjcmlwdGlvbjo6c2V0SXRhbGljLCBGb250SXRhbGljT2ZmPjo6Y3JlYXRlSGFuZGxlcigpKTsK
ICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlGb250VmFyaWFudCwgQXBwbHlQcm9w
ZXJ0eUZvbnQ8Rm9udFNtYWxsQ2FwcywgJkZvbnREZXNjcmlwdGlvbjo6c21hbGxDYXBzLCAmRm9u
dERlc2NyaXB0aW9uOjpzZXRTbWFsbENhcHMsIEZvbnRTbWFsbENhcHNPZmY+OjpjcmVhdGVIYW5k
bGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIEFw
cGx5UHJvcGVydHlGb250V2VpZ2h0OjpjcmVhdGVIYW5kbGVyKCkpOwotI2lmIEVOQUJMRShJT1Nf
VEVYVF9BVVRPU0laSU5HKQotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUxpbmVI
ZWlnaHQsIEFwcGx5UHJvcGVydHlMaW5lSGVpZ2h0Rm9ySU9TVGV4dEF1dG9zaXppbmc6OmNyZWF0
ZUhhbmRsZXIoKSk7Ci0jZWxzZQotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUxp
bmVIZWlnaHQsIEFwcGx5UHJvcGVydHlMaW5lSGVpZ2h0OjpjcmVhdGVIYW5kbGVyKCkpOwotI2Vu
ZGlmCiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2UsIEFw
cGx5UHJvcGVydHlTdHlsZUltYWdlPCZSZW5kZXJTdHlsZTo6bGlzdFN0eWxlSW1hZ2UsICZSZW5k
ZXJTdHlsZTo6c2V0TGlzdFN0eWxlSW1hZ2UsICZSZW5kZXJTdHlsZTo6aW5pdGlhbExpc3RTdHls
ZUltYWdlLCBDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAg
ICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlPcnBoYW5zLCBBcHBseVByb3BlcnR5QXV0
bzxzaG9ydCwgJlJlbmRlclN0eWxlOjpvcnBoYW5zLCAmUmVuZGVyU3R5bGU6OnNldE9ycGhhbnMs
ICZSZW5kZXJTdHlsZTo6aGFzQXV0b09ycGhhbnMsICZSZW5kZXJTdHlsZTo6c2V0SGFzQXV0b09y
cGhhbnM+OjpjcmVhdGVIYW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eU91dGxpbmVDb2xvciwgQXBwbHlQcm9wZXJ0eUNvbG9yPE5vSW5oZXJpdEZyb21QYXJlbnQs
ICZSZW5kZXJTdHlsZTo6b3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVDb2xv
ciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua091dGxpbmVDb2xvciwgJlJlbmRlclN0eWxl
Ojpjb2xvcj46OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1By
b3BlcnR5T3V0bGluZVN0eWxlLCBBcHBseVByb3BlcnR5T3V0bGluZVN0eWxlOjpjcmVhdGVIYW5k
bGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNv
cmF0aW9uQ29sb3IsIEFwcGx5UHJvcGVydHlDb2xvcjxOb0luaGVyaXRGcm9tUGFyZW50LCAmUmVu
ZGVyU3R5bGU6OnRleHREZWNvcmF0aW9uQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VGV4dERlY29y
YXRpb25Db2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua1RleHREZWNvcmF0aW9uQ29s
b3IsICZSZW5kZXJTdHlsZTo6Y29sb3I+OjpjcmVhdGVIYW5kbGVyKCkpOwogICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uU2tpcCwgQXBwbHlQcm9w
ZXJ0eVRleHREZWNvcmF0aW9uU2tpcDo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0
eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRUZXh0VW5kZXJsaW5lUG9zaXRpb24sIEFwcGx5UHJv
cGVydHlUZXh0VW5kZXJsaW5lUG9zaXRpb246OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJv
cGVydHlIYW5kbGVyKENTU1Byb3BlcnR5VGV4dFJlbmRlcmluZywgQXBwbHlQcm9wZXJ0eUZvbnQ8
VGV4dFJlbmRlcmluZ01vZGUsICZGb250RGVzY3JpcHRpb246OnRleHRSZW5kZXJpbmdNb2RlLCAm
Rm9udERlc2NyaXB0aW9uOjpzZXRUZXh0UmVuZGVyaW5nTW9kZSwgQXV0b1RleHRSZW5kZXJpbmc+
OjpjcmVhdGVIYW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVZl
cnRpY2FsQWxpZ24sIEFwcGx5UHJvcGVydHlWZXJ0aWNhbEFsaWduOjpjcmVhdGVIYW5kbGVyKCkp
OwogCkBAIC0xNDcwLDcgKzEyOTcsNiBAQCBEZXByZWNhdGVkU3R5bGVCdWlsZGVyOjpEZXByZWNh
dGVkU3R5bGVCdWlsZGVyKCkKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJr
aXRGb250S2VybmluZywgQXBwbHlQcm9wZXJ0eUZvbnQ8Rm9udERlc2NyaXB0aW9uOjpLZXJuaW5n
LCAmRm9udERlc2NyaXB0aW9uOjprZXJuaW5nLCAmRm9udERlc2NyaXB0aW9uOjpzZXRLZXJuaW5n
LCBGb250RGVzY3JpcHRpb246OkF1dG9LZXJuaW5nPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRGb250U21vb3RoaW5nLCBBcHBseVBy
b3BlcnR5Rm9udDxGb250U21vb3RoaW5nTW9kZSwgJkZvbnREZXNjcmlwdGlvbjo6Zm9udFNtb290
aGluZywgJkZvbnREZXNjcmlwdGlvbjo6c2V0Rm9udFNtb290aGluZywgQXV0b1Ntb290aGluZz46
OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Vi
a2l0Rm9udFZhcmlhbnRMaWdhdHVyZXMsIEFwcGx5UHJvcGVydHlGb250VmFyaWFudExpZ2F0dXJl
czo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlX
ZWJraXRNYXJxdWVlUmVwZXRpdGlvbiwgQXBwbHlQcm9wZXJ0eU1hcnF1ZWVSZXBldGl0aW9uOjpj
cmVhdGVIYW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtp
dE1hc2tDbGlwLCBBcHBseVByb3BlcnR5RmlsbExheWVyPEVGaWxsQm94LCBDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tDbGlwLCBNYXNrRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc01hc2tMYXll
cnMsICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJkZpbGxMYXllcjo6aXNDbGlwU2V0LCAmRmls
bExheWVyOjpjbGlwLCAmRmlsbExheWVyOjpzZXRDbGlwLCAmRmlsbExheWVyOjpjbGVhckNsaXAs
ICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsQ2xpcCwgJkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxDbGlw
Pjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlX
ZWJraXRNYXNrQ29tcG9zaXRlLCBBcHBseVByb3BlcnR5RmlsbExheWVyPENvbXBvc2l0ZU9wZXJh
dG9yLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDb21wb3NpdGUsIE1hc2tGaWxsTGF5ZXIsICZSZW5k
ZXJTdHlsZTo6YWNjZXNzTWFza0xheWVycywgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmRmls
bExheWVyOjppc0NvbXBvc2l0ZVNldCwgJkZpbGxMYXllcjo6Y29tcG9zaXRlLCAmRmlsbExheWVy
OjpzZXRDb21wb3NpdGUsICZGaWxsTGF5ZXI6OmNsZWFyQ29tcG9zaXRlLCAmRmlsbExheWVyOjpp
bml0aWFsRmlsbENvbXBvc2l0ZSwgJkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxDb21wb3NpdGU+Ojpj
cmVhdGVIYW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtp
dE1hc2tJbWFnZSwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxTdHlsZUltYWdlKiwgQ1NTUHJvcGVy
dHlXZWJraXRNYXNrSW1hZ2UsIE1hc2tGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzTWFz
a0xheWVycywgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmRmlsbExheWVyOjppc0ltYWdlU2V0
LCAmRmlsbExheWVyOjppbWFnZSwgJkZpbGxMYXllcjo6c2V0SW1hZ2UsICZGaWxsTGF5ZXI6OmNs
ZWFySW1hZ2UsICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsSW1hZ2UsICZDU1NUb1N0eWxlTWFwOjpt
YXBGaWxsSW1hZ2U+OjpjcmVhdGVIYW5kbGVyKCkpOwpAQCAtMTQ5MSw3ICsxMzE3LDYgQEAgRGVw
cmVjYXRlZFN0eWxlQnVpbGRlcjo6RGVwcmVjYXRlZFN0eWxlQnVpbGRlcigpCiAgICAgc2V0UHJv
cGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblByb3BlcnR5LCBBcHBseVBy
b3BlcnR5QW5pbWF0aW9uPENTU1Byb3BlcnR5SUQsICZBbmltYXRpb246OnByb3BlcnR5LCAmQW5p
bWF0aW9uOjpzZXRQcm9wZXJ0eSwgJkFuaW1hdGlvbjo6aXNQcm9wZXJ0eVNldCwgJkFuaW1hdGlv
bjo6Y2xlYXJQcm9wZXJ0eSwgJkFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvblByb3BlcnR5LCAm
Q1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uUHJvcGVydHksICZSZW5kZXJTdHlsZTo6YWNjZXNz
VHJhbnNpdGlvbnMsICZSZW5kZXJTdHlsZTo6dHJhbnNpdGlvbnM+OjpjcmVhdGVIYW5kbGVyKCkp
OwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25UaW1p
bmdGdW5jdGlvbiwgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjxjb25zdCBQYXNzUmVmUHRyPFRpbWlu
Z0Z1bmN0aW9uPiwgJkFuaW1hdGlvbjo6dGltaW5nRnVuY3Rpb24sICZBbmltYXRpb246OnNldFRp
bWluZ0Z1bmN0aW9uLCAmQW5pbWF0aW9uOjppc1RpbWluZ0Z1bmN0aW9uU2V0LCAmQW5pbWF0aW9u
OjpjbGVhclRpbWluZ0Z1bmN0aW9uLCAmQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uVGltaW5n
RnVuY3Rpb24sICZDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25UaW1pbmdGdW5jdGlvbiwgJlJl
bmRlclN0eWxlOjphY2Nlc3NUcmFuc2l0aW9ucywgJlJlbmRlclN0eWxlOjp0cmFuc2l0aW9ucz46
OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2lk
b3dzLCBBcHBseVByb3BlcnR5QXV0bzxzaG9ydCwgJlJlbmRlclN0eWxlOjp3aWRvd3MsICZSZW5k
ZXJTdHlsZTo6c2V0V2lkb3dzLCAmUmVuZGVyU3R5bGU6Omhhc0F1dG9XaWRvd3MsICZSZW5kZXJT
dHlsZTo6c2V0SGFzQXV0b1dpZG93cz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5V29yZFNwYWNpbmcsIEFwcGx5UHJvcGVydHlXb3JkU3BhY2lu
Zzo6Y3JlYXRlSGFuZGxlcigpKTsKIAogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0
eVpJbmRleCwgQXBwbHlQcm9wZXJ0eUF1dG88aW50LCAmUmVuZGVyU3R5bGU6OnpJbmRleCwgJlJl
bmRlclN0eWxlOjpzZXRaSW5kZXgsICZSZW5kZXJTdHlsZTo6aGFzQXV0b1pJbmRleCwgJlJlbmRl
clN0eWxlOjpzZXRIYXNBdXRvWkluZGV4Pjo6Y3JlYXRlSGFuZGxlcigpKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaAppbmRleCA2M2UzZWIzN2QxYzIyZjJk
Zjc2OGEyN2JmZDMzNTE2MDk0MmY1ZmE5Li45YWUxNTE5MDZkMTRjNmQ4YzU1YjRkYjA3MjhmMTEw
NGUwY2VjZDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ29u
dmVydGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckNvbnZlcnRlci5o
CkBAIC02Myw3ICs2Myw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRVRleHRBbGlnbiBjb252ZXJ0
VGV4dEFsaWduKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOwogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENsaXBQYXRoT3BlcmF0aW9uPiBjb252ZXJ0Q2xpcFBhdGgoU3R5bGVSZXNvbHZlciYsIENT
U1ZhbHVlJik7CiAgICAgc3RhdGljIEVSZXNpemUgY29udmVydFJlc2l6ZShTdHlsZVJlc29sdmVy
JiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgaW50IGNvbnZlcnRNYXJxdWVlUmVwZXRpdGlvbihT
dHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKICAgICBzdGF0aWMgaW50IGNvbnZlcnRNYXJxdWVl
U3BlZWQoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7CisgICAgc3RhdGljIFRleHRVbmRlcmxp
bmVQb3NpdGlvbiBjb252ZXJ0VGV4dFVuZGVybGluZVBvc2l0aW9uKFN0eWxlUmVzb2x2ZXImLCBD
U1NWYWx1ZSYpOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvUmFkaXVz
TGVuZ3RoKENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBDU1NQcmltaXRpdmVWYWx1ZSYpOwpA
QCAtMzg4LDYgKzM5MCwxNiBAQCBpbmxpbmUgRVJlc2l6ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRSZXNpemUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcgogICAgIHJldHVybiBy
ZXNpemU7CiB9CiAKK2lubGluZSBpbnQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TWFy
cXVlZVJlcGV0aXRpb24oU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJiB2YWx1ZSkKK3sKKyAgICBh
dXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7
CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUluZmluaXRl
KQorICAgICAgICByZXR1cm4gLTE7IC8vIC0xIG1lYW5zIHJlcGVhdCBmb3JldmVyLgorCisgICAg
QVNTRVJUKHByaW1pdGl2ZVZhbHVlLmlzTnVtYmVyKCkpOworICAgIHJldHVybiBwcmltaXRpdmVW
YWx1ZS5nZXRJbnRWYWx1ZSgpOworfQorCiBpbmxpbmUgaW50IFN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y29udmVydE1hcnF1ZWVTcGVlZChTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmIHZhbHVlKQog
ewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KHZhbHVlKTsKQEAgLTQxNyw2ICs0MjksMjAgQEAgaW5saW5lIGludCBTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRNYXJxdWVlU3BlZWQoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJgogICAg
IHJldHVybiBzcGVlZDsKIH0KIAoraW5saW5lIFRleHRVbmRlcmxpbmVQb3NpdGlvbiBTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0VW5kZXJsaW5lUG9zaXRpb24oU3R5bGVSZXNvbHZl
ciYsIENTU1ZhbHVlJiB2YWx1ZSkKK3sKKyAgICAvLyBUaGlzIGlzIHRydWUgaWYgdmFsdWUgaXMg
J2F1dG8nIG9yICdhbHBoYWJldGljJy4KKyAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZh
bHVlKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7
CisKKyAgICB1bnNpZ25lZCB0ID0gMDsKKyAgICBmb3IgKGF1dG8mIGN1cnJlbnRWYWx1ZSA6IGRv
d25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7CisgICAgICAgIFRleHRVbmRlcmxpbmVQb3Np
dGlvbiB0MiA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihjdXJyZW50VmFsdWUuZ2V0KCkp
OworICAgICAgICB0IHw9IHQyOworICAgIH0KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dFVu
ZGVybGluZVBvc2l0aW9uPih0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gU3R5bGVCdWlsZGVyQ29udmVydGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZUJ1aWxkZXJDdXN0b20uaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxk
ZXJDdXN0b20uaAppbmRleCAyMTA4YzM2YWJiMTQwOTk4MmZmM2IyOTE1YWU3MmM1MTFkMzVlYzk1
Li5iYzdlYjFhNTZmYzFlNDk2NDg3ODhjMWZlZTA5ZmQwOTFiNTM0OWVkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAi
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0ltYWdlU2V0VmFsdWUuaCIK
ICNpbmNsdWRlICJDU1NJbWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJTdHlsZVJlc29sdmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ5Myw2ICs0OTQs
OTEgQEAgREVGSU5FX0JPUkRFUl9JTUFHRV9NT0RJRklFUl9IQU5ETEVSKFdlYmtpdE1hc2tCb3hJ
bWFnZSwgUmVwZWF0KQogREVGSU5FX0JPUkRFUl9JTUFHRV9NT0RJRklFUl9IQU5ETEVSKFdlYmtp
dE1hc2tCb3hJbWFnZSwgU2xpY2UpCiBERUZJTkVfQk9SREVSX0lNQUdFX01PRElGSUVSX0hBTkRM
RVIoV2Via2l0TWFza0JveEltYWdlLCBXaWR0aCkKIAorc3RhdGljIGlubGluZSBDU1NUb0xlbmd0
aENvbnZlcnNpb25EYXRhIGNzc3RvTGVuZ3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0
b3IoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK3sKKyAgICBpZiAoRnJhbWUqIGZyYW1l
ID0gc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpLmZyYW1lKCkpCisgICAgICAgIHJldHVybiBzdHls
ZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRq
dXN0ZWRab29tKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpICogZnJhbWUt
PnRleHRab29tRmFjdG9yKCkpOworCisgICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5j
c3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb252
ZXJ0TGluZUhlaWdodChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1
ZSYgdmFsdWUsIExlbmd0aCYgbGVuZ3RoLCBmbG9hdCBtdWx0aXBsaWVyID0gMS5mKQoreworICAg
IGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVl
KTsKKyAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFs
KSB7CisgICAgICAgIGxlbmd0aCA9IFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVu
Z3RoKCkpIHsKKyAgICAgICAgbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxM
ZW5ndGg+KGNzc3RvTGVuZ3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3Ioc3R5bGVS
ZXNvbHZlcikpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLmlzUGVyY2VudGFnZSgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBwZXJjZW50YWdlIHNo
b3VsZCBub3QgYmUgcmVzdHJpY3RlZCB0byBhbiBpbnRlZ2VyIGhlcmUuCisgICAgICAgIGxlbmd0
aCA9IExlbmd0aCgoc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5jb21wdXRlZEZvbnRTaXplKCkgKiBw
cmltaXRpdmVWYWx1ZS5nZXRJbnRWYWx1ZSgpKSAqIG11bHRpcGxpZXIgLyAxMDAsIEZpeGVkKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc051
bWJlcigpKSB7CisgICAgICAgIC8vIEZJWE1FOiBudW1iZXIgYW5kIHBlcmNlbnRhZ2UgdmFsdWVz
IHNob3VsZCBwcm9kdWNlIHRoZSBzYW1lIHR5cGUgb2YgTGVuZ3RoIChpZS4gRml4ZWQgb3IgUGVy
Y2VudCkuCisgICAgICAgIGxlbmd0aCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS5nZXREb3VibGVW
YWx1ZSgpICogbXVsdGlwbGllciAqIDEwMC4wLCBQZXJjZW50KTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIHZvaWQgYXBwbHlWYWx1
ZVdvcmRTcGFjaW5nKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1
ZSkKK3sKKyAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZSk7CisKKyAgICBMZW5ndGggd29yZFNwYWNpbmc7CisgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkKKyAgICAgICAgd29yZFNwYWNp
bmcgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbFdvcmRTcGFjaW5nKCk7CisgICAgZWxzZSBpZiAocHJp
bWl0aXZlVmFsdWUuaXNMZW5ndGgoKSkKKyAgICAgICAgd29yZFNwYWNpbmcgPSBwcmltaXRpdmVW
YWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhU
ZXh0Wm9vbUZhY3RvcihzdHlsZVJlc29sdmVyKSk7CisgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUuaXNQZXJjZW50YWdlKCkpCisgICAgICAgIHdvcmRTcGFjaW5nID0gTGVuZ3RoKGNsYW1wVG88
ZmxvYXQ+KHByaW1pdGl2ZVZhbHVlLmdldERvdWJsZVZhbHVlKCksIG1pblZhbHVlRm9yQ3NzTGVu
Z3RoLCBtYXhWYWx1ZUZvckNzc0xlbmd0aCksIFBlcmNlbnQpOworICAgIGVsc2UgaWYgKHByaW1p
dGl2ZVZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgIHdvcmRTcGFjaW5nID0gTGVuZ3RoKHByaW1p
dGl2ZVZhbHVlLmdldERvdWJsZVZhbHVlKCksIEZpeGVkKTsKKyAgICBlbHNlCisgICAgICAgIHJl
dHVybjsKKyAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFdvcmRTcGFjaW5nKHdvcmRTcGFj
aW5nKTsKK30KKworI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQoraW5saW5lIHZvaWQg
YXBwbHlJbmhlcml0TGluZUhlaWdodChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQorewor
ICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0TGluZUhlaWdodChzdHlsZVJlc29sdmVyLnBh
cmVudFN0eWxlKCktPmxpbmVIZWlnaHQoKSk7CisgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5z
ZXRTcGVjaWZpZWRMaW5lSGVpZ2h0KHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+c3BlY2lm
aWVkTGluZUhlaWdodCgpKTsKK30KKworaW5saW5lIHZvaWQgYXBwbHlJbml0aWFsTGluZUhlaWdo
dChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoreworICAgIHN0eWxlUmVzb2x2ZXIuc3R5
bGUoKS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Cisg
ICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRTcGVjaWZpZWRMaW5lSGVpZ2h0KFJlbmRlclN0
eWxlOjppbml0aWFsU3BlY2lmaWVkTGluZUhlaWdodCgpKTsKK30KKworaW5saW5lIHZvaWQgYXBw
bHlWYWx1ZUxpbmVIZWlnaHQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUm
IHZhbHVlKQoreworICAgIExlbmd0aCBsaW5lSGVpZ2h0OworICAgIGlmICghY29udmVydExpbmVI
ZWlnaHQoc3R5bGVSZXNvbHZlciwgdmFsdWUsIGxpbmVIZWlnaHQsIHN0eWxlUmVzb2x2ZXIuc3R5
bGUoKS0+dGV4dFNpemVBZGp1c3QoKS5tdWx0aXBsaWVyKCkpKQorICAgICAgICByZXR1cm47CisK
KyAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldExpbmVIZWlnaHQobGluZUhlaWdodCk7Cisg
ICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRTcGVjaWZpZWRMaW5lSGVpZ2h0KGxpbmVIZWln
aHQpOworfQorCisjZWxzZQorCitpbmxpbmUgdm9pZCBhcHBseVZhbHVlTGluZUhlaWdodChTdHls
ZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCit7CisgICAgTGVuZ3Ro
IGxpbmVIZWlnaHQ7CisgICAgaWYgKCFjb252ZXJ0TGluZUhlaWdodChzdHlsZVJlc29sdmVyLCB2
YWx1ZSwgbGluZUhlaWdodCkpCisgICAgICAgIHJldHVybjsKKworICAgIHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+c2V0TGluZUhlaWdodChsaW5lSGVpZ2h0KTsKK30KKyNlbmRpZgorCiB9IC8vIG5h
bWVzcGFjZSBTdHlsZUJ1aWxkZXJGdW5jdGlvbnMKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241690</attachid>
            <date>2014-11-16 21:02:18 -0800</date>
            <delta_ts>2014-11-17 08:05:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138766-20141116210229.patch</filename>
            <type>text/plain</type>
            <size>27436</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2MTY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzZhYzUwZTc4Njk5MzAw
MzZkZTI0OGY2MDdhOGI0MTZkZDM3YWJjMS4uYTczZjYyOWUwOWJlMzkzZDUxYWE2MDFiNjk1NTli
NzkyYjVmY2Y3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE0LTExLTE1ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBtb3JlIENTUyBwcm9w
ZXJ0aWVzIHRvIHRoZSBuZXcgU3R5bGVCdWlsZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg3NjYKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlci4KKworICAgICAgICBNb3ZlIG1vcmUgQ1NTIHByb3BlcnRpZXMgZnJvbSBEZXByZWNh
dGVkU3R5bGVCdWlsZGVyIHRvIHRoZSBuZXcKKyAgICAgICAgU3R5bGVCdWlsZGVyOgorICAgICAg
ICBsaW5lLWhlaWdodAorICAgICAgICB3b3JkLXNwYWNpbmcKKyAgICAgICAgLXdlYmtpdC1tYXJx
dWVlLXJlcGV0aXRpb24KKyAgICAgICAgLXdlYmtpdC10ZXh0LXVuZGVybGluZS1wb3NpdGlvbgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICog
Y3NzL0NTU1Byb3BlcnR5TmFtZXMuaW46CisgICAgICAgICogY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1
aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVwcmVjYXRlZFN0eWxlQnVpbGRlcjo6RGVw
cmVjYXRlZFN0eWxlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpjc3N0b0xlbmd0aENvbnZl
cnNpb25EYXRhV2l0aFRleHRab29tRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlNYXJxdWVlUmVwZXRpdGlvbjo6YXBwbHlWYWx1ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5TWFycXVlZVJlcGV0aXRpb246OmNyZWF0ZUhh
bmRsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRVbmRl
cmxpbmVQb3NpdGlvbjo6YXBwbHlWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5VGV4dFVuZGVybGluZVBvc2l0aW9uOjpjcmVhdGVIYW5kbGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlMaW5lSGVpZ2h0OjphcHBseVZhbHVl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlMaW5lSGVpZ2h0Ojpj
cmVhdGVIYW5kbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlM
aW5lSGVpZ2h0Rm9ySU9TVGV4dEF1dG9zaXppbmc6OmFwcGx5VmFsdWUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUxpbmVIZWlnaHRGb3JJT1NUZXh0QXV0b3Npemlu
Zzo6YXBwbHlJbml0aWFsVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUxpbmVIZWlnaHRGb3JJT1NUZXh0QXV0b3NpemluZzo6YXBwbHlJbmhlcml0VmFsdWUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUxpbmVIZWlnaHRGb3JJ
T1NUZXh0QXV0b3NpemluZzo6Y3JlYXRlSGFuZGxlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5V29yZFNwYWNpbmc6OmFwcGx5VmFsdWUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVdvcmRTcGFjaW5nOjpjcmVhdGVIYW5kbGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKiBjc3MvU3R5bGVCdWlsZGVyQ29udmVydGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRNYXJxdWVlUmVwZXRpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0
VW5kZXJsaW5lUG9zaXRpb24pOgorICAgICAgICAqIGNzcy9TdHlsZUJ1aWxkZXJDdXN0b20uaDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckZ1bmN0aW9uczo6Y3NzdG9MZW5ndGhDb252
ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1
aWxkZXJGdW5jdGlvbnM6OmNvbnZlcnRMaW5lSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlQnVpbGRlckZ1bmN0aW9uczo6YXBwbHlWYWx1ZVdvcmRTcGFjaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlQnVpbGRlckZ1bmN0aW9uczo6YXBwbHlJbmhlcml0TGluZUhlaWdodCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJGdW5jdGlvbnM6OmFwcGx5SW5pdGlhbExpbmVI
ZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyRnVuY3Rpb25zOjphcHBseVZh
bHVlTGluZUhlaWdodCk6CisKIDIwMTQtMTEtMTYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KIAogICAgICAgICBNb3ZlICd2ZXJ0aWNhbC1hbGlnbicgQ1NTIHByb3BlcnR5IHRvIHRo
ZSBuZXcgU3R5bGVCdWlsZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJv
cGVydHlOYW1lcy5pbiBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eU5hbWVzLmluCmlu
ZGV4IDI3M2ExYWIxMWUxMmQyZjM0Nzg3MGEwZTdjZDhjMjVhOTY3NTFiYmMuLjAyNGM3ZWZhZDBl
YWU2OWE4YzVhN2ZkOGQ0MTBmNDY3YTlmNGQ4MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQcm9wZXJ0eU5hbWVzLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9w
ZXJ0eU5hbWVzLmluCkBAIC04MCw3ICs4MCwxMSBAQCB0ZXh0LXJlbmRlcmluZyBbSW5oZXJpdGVk
XQogem9vbSBbTmV3U3R5bGVCdWlsZGVyLCBDdXN0b209QWxsXQogCiAvLyBsaW5lIGhlaWdodCBu
ZWVkcyB0byBiZSByaWdodCBhZnRlciB0aGUgYWJvdmUgaGlnaC1wcmlvcml0eSBwcm9wZXJ0aWVz
Ci1saW5lLWhlaWdodCBbSW5oZXJpdGVkXQorI2lmIGRlZmluZWQoRU5BQkxFX0lPU19URVhUX0FV
VE9TSVpJTkcpICYmIEVOQUJMRV9JT1NfVEVYVF9BVVRPU0laSU5HCitsaW5lLWhlaWdodCBbSW5o
ZXJpdGVkLCBOZXdTdHlsZUJ1aWxkZXIsIEN1c3RvbT1BbGxdCisjZWxzZQorbGluZS1oZWlnaHQg
W0luaGVyaXRlZCwgTmV3U3R5bGVCdWlsZGVyLCBHZXR0ZXI9c3BlY2lmaWVkTGluZUhlaWdodCwg
Q3VzdG9tPVZhbHVlXQorI2VuZGlmCiAKIC8vIEtlZXAgdGhpcyBpbiBiZXR3ZWVuIHRoZSBoaWdo
ZXN0IHByaW9yaXR5IHByb3BzIGFuZCB0aGUgbG93ZXIgb25lcy4KIC13ZWJraXQtcnVieS1wb3Np
dGlvbiBbSW5oZXJpdGVkLCBOZXdTdHlsZUJ1aWxkZXIsIFR5cGVOYW1lPVJ1YnlQb3NpdGlvbl0K
QEAgLTI2Miw3ICsyNjYsNyBAQCB3aWRvd3MgW0luaGVyaXRlZF0KIHdpZHRoIFtOZXdTdHlsZUJ1
aWxkZXIsIEluaXRpYWw9aW5pdGlhbFNpemUsIENvbnZlcnRlcj1MZW5ndGhTaXppbmddCiB3b3Jk
LWJyZWFrIFtJbmhlcml0ZWQsIE5ld1N0eWxlQnVpbGRlcl0KIC1lcHViLXdvcmQtYnJlYWsgPSB3
b3JkLWJyZWFrCi13b3JkLXNwYWNpbmcgW0luaGVyaXRlZF0KK3dvcmQtc3BhY2luZyBbSW5oZXJp
dGVkLCBOZXdTdHlsZUJ1aWxkZXIsIEN1c3RvbT1WYWx1ZV0KIHdvcmQtd3JhcCBbSW5oZXJpdGVk
LCBOZXdTdHlsZUJ1aWxkZXI9RU92ZXJmbG93V3JhcCwgTmFtZUZvck1ldGhvZHM9T3ZlcmZsb3dX
cmFwXQogei1pbmRleAogYWx0CkBAIC00MjksNyArNDMzLDcgQEAganVzdGlmeS1jb250ZW50IFtO
ZXdTdHlsZUJ1aWxkZXJdCiAtd2Via2l0LW1hcnF1ZWUKIC13ZWJraXQtbWFycXVlZS1kaXJlY3Rp
b24gW05ld1N0eWxlQnVpbGRlcl0KIC13ZWJraXQtbWFycXVlZS1pbmNyZW1lbnQgW05ld1N0eWxl
QnVpbGRlciwgQ3VzdG9tPVZhbHVlXQotLXdlYmtpdC1tYXJxdWVlLXJlcGV0aXRpb24KKy13ZWJr
aXQtbWFycXVlZS1yZXBldGl0aW9uIFtOZXdTdHlsZUJ1aWxkZXIsIE5hbWVGb3JNZXRob2RzPU1h
cnF1ZWVMb29wQ291bnQsIENvbnZlcnRlcj1NYXJxdWVlUmVwZXRpdGlvbl0KIC13ZWJraXQtbWFy
cXVlZS1zcGVlZCBbTmV3U3R5bGVCdWlsZGVyLCBDb252ZXJ0ZXI9TWFycXVlZVNwZWVkXQogLXdl
YmtpdC1tYXJxdWVlLXN0eWxlIFtOZXdTdHlsZUJ1aWxkZXIsIFR5cGVOYW1lPUVNYXJxdWVlQmVo
YXZpb3IsIE5hbWVGb3JNZXRob2RzPU1hcnF1ZWVCZWhhdmlvcl0KIC13ZWJraXQtbWFzawpAQCAt
NDg2LDcgKzQ5MCw3IEBAIG9yZGVyIFtOZXdTdHlsZUJ1aWxkZXIsIFR5cGVOYW1lPWludF0KIC13
ZWJraXQtdGV4dC1kZWNvcmF0aW9uLXN0eWxlIFtOZXdTdHlsZUJ1aWxkZXIsIFR5cGVOYW1lPVRl
eHREZWNvcmF0aW9uU3R5bGVdCiAtd2Via2l0LXRleHQtZGVjb3JhdGlvbi1jb2xvcgogLXdlYmtp
dC10ZXh0LWRlY29yYXRpb24tc2tpcCBbSW5oZXJpdGVkXQotLXdlYmtpdC10ZXh0LXVuZGVybGlu
ZS1wb3NpdGlvbiBbSW5oZXJpdGVkXQorLXdlYmtpdC10ZXh0LXVuZGVybGluZS1wb3NpdGlvbiBb
SW5oZXJpdGVkLCBOZXdTdHlsZUJ1aWxkZXIsIENvbnZlcnRlcj1UZXh0VW5kZXJsaW5lUG9zaXRp
b25dCiAtd2Via2l0LXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0IFtJbmhlcml0ZWRdCiAtd2Vi
a2l0LXRleHQtZW1waGFzaXMgW0luaGVyaXRlZF0KIC1lcHViLXRleHQtZW1waGFzaXMgPSAtd2Vi
a2l0LXRleHQtZW1waGFzaXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNh
dGVkU3R5bGVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVC
dWlsZGVyLmNwcAppbmRleCA0ZTM2MDAwZWYyYmViN2Q1Y2VkMDM4MzM2ZmE4ZTNmODhlM2FkZjJk
Li5hYjEzOWQ1ZGQ3MDNkZDczOTA3MzZkYzM4ZTVmZDE0Yzc0ODgyOTBjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwCkBAIC05MjUsMTQgKzkyNSw2
IEBAIHN0YXRpYyBUZXh0RGVjb3JhdGlvblNraXAgdmFsdWVUb0RlY29yYXRpb25Ta2lwKENTU1By
aW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1CiAgICAgcmV0dXJuIFRleHREZWNvcmF0aW9uU2tp
cE5vbmU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBjc3N0
b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29tRmFjdG9yKFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIpCi17Ci0gICAgaWYgKEZyYW1lKiBmcmFtZSA9IHN0eWxlUmVzb2x2ZXIuZG9j
dW1lbnQoKS5mcmFtZSgpKQotICAgICAgICByZXR1cm4gc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNz
c1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbShzdHlsZVJlc29s
dmVyLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSAqIGZyYW1lLT50ZXh0Wm9vbUZhY3RvcigpKTsK
LQotICAgIHJldHVybiBzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSgpOwotfQotCiBjbGFzcyBBcHBseVByb3BlcnR5VGV4dERlY29yYXRpb25Ta2lwIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKQEAgLTk1NiwxNjUgKzk0OCw2
IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCi1jbGFzcyBBcHBseVByb3BlcnR5TWFycXVlZVJlcGV0
aXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsK
LSAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKLSAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUluZmluaXRlKQotICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TWFycXVlZUxvb3BDb3VudCgtMSk7IC8vIC0xIG1lYW5z
IHJlcGVhdCBmb3JldmVyLgotICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJl
cigpKQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TWFycXVlZUxvb3BD
b3VudChwcmltaXRpdmVWYWx1ZS5nZXRJbnRWYWx1ZSgpKTsKLSAgICB9Ci0gICAgc3RhdGljIFBy
b3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKLSAgICB7Ci0gICAgICAgIFByb3BlcnR5SGFu
ZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURlZmF1bHQ8aW50LCAmUmVuZGVyU3R5bGU6Om1h
cnF1ZWVMb29wQ291bnQsIGludCwgJlJlbmRlclN0eWxlOjpzZXRNYXJxdWVlTG9vcENvdW50LCBp
bnQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbE1hcnF1ZWVMb29wQ291bnQ+OjpjcmVhdGVIYW5kbGVy
KCk7Ci0gICAgICAgIHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoaGFuZGxlci5pbmhlcml0RnVuY3Rp
b24oKSwgaGFuZGxlci5pbml0aWFsRnVuY3Rpb24oKSwgJmFwcGx5VmFsdWUpOwotICAgIH0KLX07
Ci0KLWNsYXNzIEFwcGx5UHJvcGVydHlUZXh0VW5kZXJsaW5lUG9zaXRpb24gewotcHVibGljOgot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBp
cyB0cnVlIGlmIHZhbHVlIGlzICdhdXRvJyBvciAnYWxwaGFiZXRpYycuCi0gICAgICAgIGlmIChp
czxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkgewotICAgICAgICAgICAgVGV4dFVuZGVybGlu
ZVBvc2l0aW9uIHQgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKLSAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRVbmRlcmxpbmVQb3NpdGlvbih0
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHVuc2lnbmVkIHQg
PSAwOwotICAgICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKSB7Ci0gICAgICAgICAg
ICBmb3IgKGF1dG8mIGN1cnJlbnRWYWx1ZSA6IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVl
KSkgewotICAgICAgICAgICAgICAgIFRleHRVbmRlcmxpbmVQb3NpdGlvbiB0MiA9IGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPihjdXJyZW50VmFsdWUuZ2V0KCkpOwotICAgICAgICAgICAgICAg
IHQgfD0gdDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0VGV4dFVuZGVybGluZVBvc2l0aW9uKHN0YXRpY19jYXN0PFRleHRVbmRl
cmxpbmVQb3NpdGlvbj4odCkpOwotICAgIH0KLSAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNy
ZWF0ZUhhbmRsZXIoKQotICAgIHsKLSAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBB
cHBseVByb3BlcnR5RGVmYXVsdEJhc2U8VGV4dFVuZGVybGluZVBvc2l0aW9uLCAmUmVuZGVyU3R5
bGU6OnRleHRVbmRlcmxpbmVQb3NpdGlvbiwgVGV4dFVuZGVybGluZVBvc2l0aW9uLCAmUmVuZGVy
U3R5bGU6OnNldFRleHRVbmRlcmxpbmVQb3NpdGlvbiwgVGV4dFVuZGVybGluZVBvc2l0aW9uLCAm
UmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0VW5kZXJsaW5lUG9zaXRpb24+OjpjcmVhdGVIYW5kbGVy
KCk7Ci0gICAgICAgIHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoaGFuZGxlci5pbmhlcml0RnVuY3Rp
b24oKSwgaGFuZGxlci5pbml0aWFsRnVuY3Rpb24oKSwgJmFwcGx5VmFsdWUpOwotICAgIH0KLX07
Ci0KLWNsYXNzIEFwcGx5UHJvcGVydHlMaW5lSGVpZ2h0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSk7Ci0gICAgICAgIExlbmd0aCBsaW5lSGVpZ2h0OwotCi0gICAgICAgIGlmIChwcmltaXRp
dmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpCi0gICAgICAgICAgICBsaW5l
SGVpZ2h0ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCk7Ci0gICAgICAgIGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpCi0gICAgICAgICAgICBsaW5lSGVpZ2h0ID0g
cHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNzc3RvTGVuZ3RoQ29udmVyc2lv
bkRhdGFXaXRoVGV4dFpvb21GYWN0b3IoKnN0eWxlUmVzb2x2ZXIpKTsKLSAgICAgICAgZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBwZXJjZW50YWdlIHNob3VsZCBub3QgYmUgcmVzdHJpY3RlZCB0byBhbiBpbnRlZ2VyIGhlcmUu
Ci0gICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKChzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5jb21wdXRlZEZvbnRTaXplKCkgKiBwcmltaXRpdmVWYWx1ZS5nZXRJbnRWYWx1ZSgpKSAvIDEw
MCwgRml4ZWQpOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTnVtYmVyKCkp
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBudW1iZXIgYW5kIHBlcmNlbnRhZ2UgdmFsdWVzIHNo
b3VsZCBwcm9kdWNlIHRoZSBzYW1lIHR5cGUgb2YgTGVuZ3RoIChpZS4gRml4ZWQgb3IgUGVyY2Vu
dCkuCi0gICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLmdldERv
dWJsZVZhbHVlKCkgKiAxMDAuMCwgUGVyY2VudCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0
KGxpbmVIZWlnaHQpOwotICAgIH0KLSAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhh
bmRsZXIoKQotICAgIHsKLSAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVBy
b3BlcnR5RGVmYXVsdEJhc2U8Y29uc3QgTGVuZ3RoJiwgJlJlbmRlclN0eWxlOjpzcGVjaWZpZWRM
aW5lSGVpZ2h0LCBMZW5ndGgsICZSZW5kZXJTdHlsZTo6c2V0TGluZUhlaWdodCwgTGVuZ3RoLCAm
UmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0Pjo6Y3JlYXRlSGFuZGxlcigpOwotICAgICAg
ICByZXR1cm4gUHJvcGVydHlIYW5kbGVyKGhhbmRsZXIuaW5oZXJpdEZ1bmN0aW9uKCksIGhhbmRs
ZXIuaW5pdGlhbEZ1bmN0aW9uKCksICZhcHBseVZhbHVlKTsKLSAgICB9Ci19OwotCi0jaWYgRU5B
QkxFKElPU19URVhUX0FVVE9TSVpJTkcpCi0vLyBGSVhNRTogU2hhcmUgbW9yZSBjb2RlIHdpdGgg
Y2xhc3MgQXBwbHlQcm9wZXJ0eUxpbmVIZWlnaHQuCi1jbGFzcyBBcHBseVByb3BlcnR5TGluZUhl
aWdodEZvcklPU1RleHRBdXRvc2l6aW5nIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUm
IHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7Ci0g
ICAgICAgIExlbmd0aCBsaW5lSGVpZ2h0OwotCi0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5n
ZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpCi0gICAgICAgICAgICBsaW5lSGVpZ2h0ID0g
UmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCk7Ci0gICAgICAgIGVsc2UgaWYgKHByaW1p
dGl2ZVZhbHVlLmlzTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBwcmltaXRp
dmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdp
dGhUZXh0Wm9vbUZhY3Rvcigqc3R5bGVSZXNvbHZlcikpOwotICAgICAgICAgICAgaWYgKHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnRleHRTaXplQWRqdXN0KCkuaXNQZXJjZW50YWdlKCkpCi0gICAg
ICAgICAgICAgICAgbGluZUhlaWdodCA9IExlbmd0aChsaW5lSGVpZ2h0LnZhbHVlKCkgKiBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT50ZXh0U2l6ZUFkanVzdCgpLm11bHRpcGxpZXIoKSwgRml4ZWQp
OwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgpKSB7Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogcGVyY2VudGFnZSBzaG91bGQgbm90IGJlIHJlc3RyaWN0ZWQg
dG8gYW4gaW50ZWdlciBoZXJlLgotICAgICAgICAgICAgbGluZUhlaWdodCA9IExlbmd0aCgoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udFNpemUoKSAqIHByaW1pdGl2ZVZhbHVlLmdldEludFZh
bHVlKCkpIC8gMTAwLCBGaXhlZCk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUu
aXNOdW1iZXIoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IG51bWJlciBhbmQgcGVyY2VudGFn
ZSB2YWx1ZXMgc2hvdWxkIHByb2R1Y2UgdGhlIHNhbWUgdHlwZSBvZiBMZW5ndGggKGllLiBGaXhl
ZCBvciBQZXJjZW50KS4KLSAgICAgICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT50
ZXh0U2l6ZUFkanVzdCgpLmlzUGVyY2VudGFnZSgpKQotICAgICAgICAgICAgICAgIGxpbmVIZWln
aHQgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUuZ2V0RG91YmxlVmFsdWUoKSAqIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnRleHRTaXplQWRqdXN0KCkubXVsdGlwbGllcigpICogMTAwLjAsIFBlcmNl
bnQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5n
dGgocHJpbWl0aXZlVmFsdWUuZ2V0RG91YmxlVmFsdWUoKSAqIDEwMC4wLCBQZXJjZW50KTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldExpbmVIZWlnaHQobGluZUhlaWdodCk7Ci0gICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldFNwZWNpZmllZExpbmVIZWlnaHQobGluZUhlaWdodCk7Ci0gICAgfQot
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlcikKLSAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwot
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRTcGVjaWZpZWRMaW5lSGVpZ2h0KFJl
bmRlclN0eWxlOjppbml0aWFsU3BlY2lmaWVkTGluZUhlaWdodCgpKTsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyKQotICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0TGluZUhlaWdodChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5saW5lSGVpZ2h0KCkp
OwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRTcGVjaWZpZWRMaW5lSGVpZ2h0
KHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPnNwZWNpZmllZExpbmVIZWlnaHQoKSk7Ci0g
ICAgfQotCi0gICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBw
bHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsKLSAgICB9Ci19OwotI2VuZGlmCi0KLWNsYXNz
IEFwcGx5UHJvcGVydHlXb3JkU3BhY2luZyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NW
YWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
JiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwot
ICAgICAgICBMZW5ndGggd29yZFNwYWNpbmc7Ci0KLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkKLSAgICAgICAgICAgIHdvcmRTcGFjaW5n
ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxXb3JkU3BhY2luZygpOwotICAgICAgICBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKSB7Ci0gICAgICAgICAgICB3b3JkU3BhY2luZyA9IHBy
aW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjc3N0b0xlbmd0aENvbnZlcnNpb25E
YXRhV2l0aFRleHRab29tRmFjdG9yKCpzdHlsZVJlc29sdmVyKSk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkpCi0gICAgICAgICAgICB3b3JkU3BhY2lu
ZyA9IExlbmd0aChjbGFtcFRvPGZsb2F0PihwcmltaXRpdmVWYWx1ZS5nZXREb3VibGVWYWx1ZSgp
LCBtaW5WYWx1ZUZvckNzc0xlbmd0aCwgbWF4VmFsdWVGb3JDc3NMZW5ndGgpLCBQZXJjZW50KTsK
LSAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAg
IHdvcmRTcGFjaW5nID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLmdldERvdWJsZVZhbHVlKCksIEZp
eGVkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRXb3JkU3BhY2luZyh3b3JkU3BhY2luZyk7Ci0gICAgfQotICAg
IHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCi0gICAgewotICAgICAgICBQ
cm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxjb25zdCBM
ZW5ndGgmLCAmUmVuZGVyU3R5bGU6OndvcmRTcGFjaW5nLCBMZW5ndGgsICZSZW5kZXJTdHlsZTo6
c2V0V29yZFNwYWNpbmcsIExlbmd0aCwgJlJlbmRlclN0eWxlOjppbml0aWFsV29yZFNwYWNpbmc+
OjpjcmVhdGVIYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoaGFuZGxl
ci5pbmhlcml0RnVuY3Rpb24oKSwgaGFuZGxlci5pbml0aWFsRnVuY3Rpb24oKSwgJmFwcGx5VmFs
dWUpOwotICAgIH0KLX07Ci0KIGNsYXNzIEFwcGx5UHJvcGVydHlUZXh0RW1waGFzaXNTdHlsZSB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKQEAgLTE0MDQsMTggKzEyMzcsMTIgQEAg
RGVwcmVjYXRlZFN0eWxlQnVpbGRlcjo6RGVwcmVjYXRlZFN0eWxlQnVpbGRlcigpCiAgICAgc2V0
UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Rm9udFN0eWxlLCBBcHBseVByb3BlcnR5Rm9udDxG
b250SXRhbGljLCAmRm9udERlc2NyaXB0aW9uOjppdGFsaWMsICZGb250RGVzY3JpcHRpb246OnNl
dEl0YWxpYywgRm9udEl0YWxpY09mZj46OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5Rm9udFZhcmlhbnQsIEFwcGx5UHJvcGVydHlGb250PEZvbnRT
bWFsbENhcHMsICZGb250RGVzY3JpcHRpb246OnNtYWxsQ2FwcywgJkZvbnREZXNjcmlwdGlvbjo6
c2V0U21hbGxDYXBzLCBGb250U21hbGxDYXBzT2ZmPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBBcHBseVByb3BlcnR5Rm9u
dFdlaWdodDo6Y3JlYXRlSGFuZGxlcigpKTsKLSNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklO
RykKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBBcHBseVBy
b3BlcnR5TGluZUhlaWdodEZvcklPU1RleHRBdXRvc2l6aW5nOjpjcmVhdGVIYW5kbGVyKCkpOwot
I2Vsc2UKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBBcHBs
eVByb3BlcnR5TGluZUhlaWdodDo6Y3JlYXRlSGFuZGxlcigpKTsKLSNlbmRpZgogICAgIHNldFBy
b3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlLCBBcHBseVByb3BlcnR5U3R5
bGVJbWFnZTwmUmVuZGVyU3R5bGU6Omxpc3RTdHlsZUltYWdlLCAmUmVuZGVyU3R5bGU6OnNldExp
c3RTdHlsZUltYWdlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxMaXN0U3R5bGVJbWFnZSwgQ1NTUHJv
cGVydHlMaXN0U3R5bGVJbWFnZT46OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJvcGVydHlI
YW5kbGVyKENTU1Byb3BlcnR5T3JwaGFucywgQXBwbHlQcm9wZXJ0eUF1dG88c2hvcnQsICZSZW5k
ZXJTdHlsZTo6b3JwaGFucywgJlJlbmRlclN0eWxlOjpzZXRPcnBoYW5zLCAmUmVuZGVyU3R5bGU6
Omhhc0F1dG9PcnBoYW5zLCAmUmVuZGVyU3R5bGU6OnNldEhhc0F1dG9PcnBoYW5zPjo6Y3JlYXRl
SGFuZGxlcigpKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlPdXRsaW5lQ29s
b3IsIEFwcGx5UHJvcGVydHlDb2xvcjxOb0luaGVyaXRGcm9tUGFyZW50LCAmUmVuZGVyU3R5bGU6
Om91dGxpbmVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lQ29sb3IsICZSZW5kZXJTdHls
ZTo6c2V0VmlzaXRlZExpbmtPdXRsaW5lQ29sb3IsICZSZW5kZXJTdHlsZTo6Y29sb3I+OjpjcmVh
dGVIYW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eU91dGxpbmVT
dHlsZSwgQXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZTo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbkNvbG9yLCBB
cHBseVByb3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJvbVBhcmVudCwgJlJlbmRlclN0eWxlOjp0ZXh0
RGVjb3JhdGlvbkNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFRleHREZWNvcmF0aW9uQ29sb3IsICZS
ZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtUZXh0RGVjb3JhdGlvbkNvbG9yLCAmUmVuZGVyU3R5
bGU6OmNvbG9yPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvblNraXAsIEFwcGx5UHJvcGVydHlUZXh0RGVjb3Jh
dGlvblNraXA6OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1By
b3BlcnR5V2Via2l0VGV4dFVuZGVybGluZVBvc2l0aW9uLCBBcHBseVByb3BlcnR5VGV4dFVuZGVy
bGluZVBvc2l0aW9uOjpjcmVhdGVIYW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eVRleHRSZW5kZXJpbmcsIEFwcGx5UHJvcGVydHlGb250PFRleHRSZW5kZXJpbmdN
b2RlLCAmRm9udERlc2NyaXB0aW9uOjp0ZXh0UmVuZGVyaW5nTW9kZSwgJkZvbnREZXNjcmlwdGlv
bjo6c2V0VGV4dFJlbmRlcmluZ01vZGUsIEF1dG9UZXh0UmVuZGVyaW5nPjo6Y3JlYXRlSGFuZGxl
cigpKTsKIAogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUFuaW1hdGlvbkRlbGF5
LCBBcHBseVByb3BlcnR5QW5pbWF0aW9uPGRvdWJsZSwgJkFuaW1hdGlvbjo6ZGVsYXksICZBbmlt
YXRpb246OnNldERlbGF5LCAmQW5pbWF0aW9uOjppc0RlbGF5U2V0LCAmQW5pbWF0aW9uOjpjbGVh
ckRlbGF5LCAmQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRGVsYXksICZDU1NUb1N0eWxlTWFw
OjptYXBBbmltYXRpb25EZWxheSwgJlJlbmRlclN0eWxlOjphY2Nlc3NBbmltYXRpb25zLCAmUmVu
ZGVyU3R5bGU6OmFuaW1hdGlvbnM+OjpjcmVhdGVIYW5kbGVyKCkpOwpAQCAtMTQ0Nyw3ICsxMjc0
LDYgQEAgRGVwcmVjYXRlZFN0eWxlQnVpbGRlcjo6RGVwcmVjYXRlZFN0eWxlQnVpbGRlcigpCiAg
ICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0Rm9udEtlcm5pbmcsIEFwcGx5
UHJvcGVydHlGb250PEZvbnREZXNjcmlwdGlvbjo6S2VybmluZywgJkZvbnREZXNjcmlwdGlvbjo6
a2VybmluZywgJkZvbnREZXNjcmlwdGlvbjo6c2V0S2VybmluZywgRm9udERlc2NyaXB0aW9uOjpB
dXRvS2VybmluZz46OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5V2Via2l0Rm9udFNtb290aGluZywgQXBwbHlQcm9wZXJ0eUZvbnQ8Rm9udFNtb290
aGluZ01vZGUsICZGb250RGVzY3JpcHRpb246OmZvbnRTbW9vdGhpbmcsICZGb250RGVzY3JpcHRp
b246OnNldEZvbnRTbW9vdGhpbmcsIEF1dG9TbW9vdGhpbmc+OjpjcmVhdGVIYW5kbGVyKCkpOwog
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEZvbnRWYXJpYW50TGlnYXR1
cmVzLCBBcHBseVByb3BlcnR5Rm9udFZhcmlhbnRMaWdhdHVyZXM6OmNyZWF0ZUhhbmRsZXIoKSk7
Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVJlcGV0aXRp
b24sIEFwcGx5UHJvcGVydHlNYXJxdWVlUmVwZXRpdGlvbjo6Y3JlYXRlSGFuZGxlcigpKTsKICAg
ICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrQ2xpcCwgQXBwbHlQcm9w
ZXJ0eUZpbGxMYXllcjxFRmlsbEJveCwgQ1NTUHJvcGVydHlXZWJraXRNYXNrQ2xpcCwgTWFza0Zp
bGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NNYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6Om1h
c2tMYXllcnMsICZGaWxsTGF5ZXI6OmlzQ2xpcFNldCwgJkZpbGxMYXllcjo6Y2xpcCwgJkZpbGxM
YXllcjo6c2V0Q2xpcCwgJkZpbGxMYXllcjo6Y2xlYXJDbGlwLCAmRmlsbExheWVyOjppbml0aWFs
RmlsbENsaXAsICZDU1NUb1N0eWxlTWFwOjptYXBGaWxsQ2xpcD46OmNyZWF0ZUhhbmRsZXIoKSk7
CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFza0NvbXBvc2l0ZSwg
QXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxDb21wb3NpdGVPcGVyYXRvciwgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrQ29tcG9zaXRlLCBNYXNrRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc01hc2tM
YXllcnMsICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJkZpbGxMYXllcjo6aXNDb21wb3NpdGVT
ZXQsICZGaWxsTGF5ZXI6OmNvbXBvc2l0ZSwgJkZpbGxMYXllcjo6c2V0Q29tcG9zaXRlLCAmRmls
bExheWVyOjpjbGVhckNvbXBvc2l0ZSwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxDb21wb3NpdGUs
ICZDU1NUb1N0eWxlTWFwOjptYXBGaWxsQ29tcG9zaXRlPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAg
ICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrSW1hZ2UsIEFwcGx5UHJv
cGVydHlGaWxsTGF5ZXI8U3R5bGVJbWFnZSosIENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlLCBN
YXNrRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc01hc2tMYXllcnMsICZSZW5kZXJTdHls
ZTo6bWFza0xheWVycywgJkZpbGxMYXllcjo6aXNJbWFnZVNldCwgJkZpbGxMYXllcjo6aW1hZ2Us
ICZGaWxsTGF5ZXI6OnNldEltYWdlLCAmRmlsbExheWVyOjpjbGVhckltYWdlLCAmRmlsbExheWVy
Ojppbml0aWFsRmlsbEltYWdlLCAmQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbEltYWdlPjo6Y3JlYXRl
SGFuZGxlcigpKTsKQEAgLTE0NjgsNyArMTI5NCw2IEBAIERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXI6
OkRlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIoKQogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eSwgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjxDU1NQ
cm9wZXJ0eUlELCAmQW5pbWF0aW9uOjpwcm9wZXJ0eSwgJkFuaW1hdGlvbjo6c2V0UHJvcGVydHks
ICZBbmltYXRpb246OmlzUHJvcGVydHlTZXQsICZBbmltYXRpb246OmNsZWFyUHJvcGVydHksICZB
bmltYXRpb246OmluaXRpYWxBbmltYXRpb25Qcm9wZXJ0eSwgJkNTU1RvU3R5bGVNYXA6Om1hcEFu
aW1hdGlvblByb3BlcnR5LCAmUmVuZGVyU3R5bGU6OmFjY2Vzc1RyYW5zaXRpb25zLCAmUmVuZGVy
U3R5bGU6OnRyYW5zaXRpb25zPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24sIEFwcGx5UHJv
cGVydHlBbmltYXRpb248Y29uc3QgUGFzc1JlZlB0cjxUaW1pbmdGdW5jdGlvbj4sICZBbmltYXRp
b246OnRpbWluZ0Z1bmN0aW9uLCAmQW5pbWF0aW9uOjpzZXRUaW1pbmdGdW5jdGlvbiwgJkFuaW1h
dGlvbjo6aXNUaW1pbmdGdW5jdGlvblNldCwgJkFuaW1hdGlvbjo6Y2xlYXJUaW1pbmdGdW5jdGlv
biwgJkFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uLCAmQ1NTVG9TdHls
ZU1hcDo6bWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24sICZSZW5kZXJTdHlsZTo6YWNjZXNzVHJh
bnNpdGlvbnMsICZSZW5kZXJTdHlsZTo6dHJhbnNpdGlvbnM+OjpjcmVhdGVIYW5kbGVyKCkpOwog
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdpZG93cywgQXBwbHlQcm9wZXJ0eUF1
dG88c2hvcnQsICZSZW5kZXJTdHlsZTo6d2lkb3dzLCAmUmVuZGVyU3R5bGU6OnNldFdpZG93cywg
JlJlbmRlclN0eWxlOjpoYXNBdXRvV2lkb3dzLCAmUmVuZGVyU3R5bGU6OnNldEhhc0F1dG9XaWRv
d3M+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0
eVdvcmRTcGFjaW5nLCBBcHBseVByb3BlcnR5V29yZFNwYWNpbmc6OmNyZWF0ZUhhbmRsZXIoKSk7
CiAKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlaSW5kZXgsIEFwcGx5UHJvcGVy
dHlBdXRvPGludCwgJlJlbmRlclN0eWxlOjp6SW5kZXgsICZSZW5kZXJTdHlsZTo6c2V0WkluZGV4
LCAmUmVuZGVyU3R5bGU6Omhhc0F1dG9aSW5kZXgsICZSZW5kZXJTdHlsZTo6c2V0SGFzQXV0b1pJ
bmRleD46OmNyZWF0ZUhhbmRsZXIoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVCdWlsZGVyQ29udmVydGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWls
ZGVyQ29udmVydGVyLmgKaW5kZXggNjNlM2ViMzdkMWMyMmYyZGY3NjhhMjdiZmQzMzUxNjA5NDJm
NWZhOS4uOWE4MzZjZDBmZmZlN2E0OWE4YzY4OTlhZmJkNzZmOGExNTk1MWMzNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaApAQCAtNjMsNyArNjMsOSBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIEVUZXh0QWxpZ24gY29udmVydFRleHRBbGlnbihTdHlsZVJlc29s
dmVyJiwgQ1NTVmFsdWUmKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGlwUGF0aE9wZXJhdGlv
bj4gY29udmVydENsaXBQYXRoKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOwogICAgIHN0YXRp
YyBFUmVzaXplIGNvbnZlcnRSZXNpemUoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7CisgICAg
c3RhdGljIGludCBjb252ZXJ0TWFycXVlZVJlcGV0aXRpb24oU3R5bGVSZXNvbHZlciYsIENTU1Zh
bHVlJik7CiAgICAgc3RhdGljIGludCBjb252ZXJ0TWFycXVlZVNwZWVkKFN0eWxlUmVzb2x2ZXIm
LCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBUZXh0VW5kZXJsaW5lUG9zaXRpb24gY29udmVydFRl
eHRVbmRlcmxpbmVQb3NpdGlvbihTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKIAogcHJpdmF0
ZToKICAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb1JhZGl1c0xlbmd0aChDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJiwgQ1NTUHJpbWl0aXZlVmFsdWUmKTsKQEAgLTM4OCw2ICszOTAsMTYgQEAg
aW5saW5lIEVSZXNpemUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UmVzaXplKFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIKICAgICByZXR1cm4gcmVzaXplOwogfQogCitpbmxpbmUg
aW50IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE1hcnF1ZWVSZXBldGl0aW9uKFN0eWxl
UmVzb2x2ZXImLCBDU1NWYWx1ZSYgdmFsdWUpCit7CisgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOworICAgIGlmIChwcmltaXRpdmVW
YWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKKyAgICAgICAgcmV0dXJuIC0x
OyAvLyAtMSBtZWFucyByZXBlYXQgZm9yZXZlci4KKworICAgIEFTU0VSVChwcmltaXRpdmVWYWx1
ZS5pc051bWJlcigpKTsKKyAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWUuZ2V0SW50VmFsdWUoKTsK
K30KKwogaW5saW5lIGludCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRNYXJxdWVlU3Bl
ZWQoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRp
dmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CkBAIC00MTcsNiAr
NDI5LDIwIEBAIGlubGluZSBpbnQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TWFycXVl
ZVNwZWVkKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYKICAgICByZXR1cm4gc3BlZWQ7CiB9CiAK
K2lubGluZSBUZXh0VW5kZXJsaW5lUG9zaXRpb24gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252
ZXJ0VGV4dFVuZGVybGluZVBvc2l0aW9uKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYgdmFsdWUp
Cit7CisgICAgLy8gVGhpcyBpcyB0cnVlIGlmIHZhbHVlIGlzICdhdXRvJyBvciAnYWxwaGFiZXRp
YycuCisgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCisgICAgICAgIHJldHVy
biBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOworCisgICAgdW5zaWduZWQgY29t
YmluZWRQb3NpdGlvbiA9IDA7CisgICAgZm9yIChhdXRvJiBjdXJyZW50VmFsdWUgOiBkb3duY2Fz
dDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgeworICAgICAgICBUZXh0VW5kZXJsaW5lUG9zaXRpb24g
cG9zaXRpb24gPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY3VycmVudFZhbHVlLmdldCgp
KTsKKyAgICAgICAgY29tYmluZWRQb3NpdGlvbiB8PSBwb3NpdGlvbjsKKyAgICB9CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFRleHRVbmRlcmxpbmVQb3NpdGlvbj4oY29tYmluZWRQb3NpdGlvbik7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFN0eWxlQnVpbGRlckNv
bnZlcnRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3Vz
dG9tLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKaW5kZXggM2Ex
NTgxODBmMTNkZDg0NmYxYmU3NzBjODgxNjMxMmQyYjc0ZDhkNC4uOGYxYzc3ODczNzdlMTZmZjdl
OGU5MmM3NmMzZmJmOTUwMjk4Nzc3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlQnVpbGRlckN1c3RvbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJD
dXN0b20uaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNTU0ltYWdlR2VuZXJhdG9yVmFs
dWUuaCIKICNpbmNsdWRlICJDU1NJbWFnZVNldFZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTSW1hZ2VW
YWx1ZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03MSw3ICs3Miw3IEBAIGlubGluZSB2b2lkIGFwcGx5
VmFsdWVEaXJlY3Rpb24oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZh
bHVlKQogICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgpLnNldERpcmVjdGlvblNldE9uRG9jdW1l
bnRFbGVtZW50KHRydWUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVzZXRFZmZlY3RpdmVa
b29tKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCByZXNldEVmZmVj
dGl2ZVpvb20oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKIHsKICAgICAvLyBSZXNldCB0
aGUgem9vbSBpbiBlZmZlY3QuIFRoaXMgYWxsb3dzIHRoZSBzZXRab29tIG1ldGhvZCB0byBhY2N1
cmF0ZWx5IGNvbXB1dGUgYSBuZXcgem9vbSBpbiBlZmZlY3QuCiAgICAgc3R5bGVSZXNvbHZlci5z
ZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSA/IHN0eWxlUmVzb2x2
ZXIucGFyZW50U3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpIDogUmVuZGVyU3R5bGU6OmluaXRpYWxa
b29tKCkpOwpAQCAtMTQ5LDE3ICsxNTAsMTcgQEAgaW5saW5lIHZvaWQgYXBwbHlWYWx1ZVdlYmtp
dFNoYXBlT3V0c2lkZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYKIH0K
ICNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NIQVBFUykKIAotc3RhdGljIGlubGluZSBMZW5ndGggbW1M
ZW5ndGgoZG91YmxlIG1tKQoraW5saW5lIExlbmd0aCBtbUxlbmd0aChkb3VibGUgbW0pCiB7CiAg
ICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KG1tLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX01NKSk7CiAgICAgcmV0dXJuIHZhbHVlLmdldCgp
LmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwogfQot
c3RhdGljIGlubGluZSBMZW5ndGggaW5jaExlbmd0aChkb3VibGUgaW5jaCkKK2lubGluZSBMZW5n
dGggaW5jaExlbmd0aChkb3VibGUgaW5jaCkKIHsKICAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+
IHZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoaW5jaCwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19JTikpOwogICAgIHJldHVybiB2YWx1ZS5nZXQoKS5jb21wdXRlTGVuZ3RoPExlbmd0aD4o
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKIH0KLXN0YXRpYyBib29sIGdldFBhZ2VTaXpl
RnJvbU5hbWUoQ1NTUHJpbWl0aXZlVmFsdWUqIHBhZ2VTaXplTmFtZSwgQ1NTUHJpbWl0aXZlVmFs
dWUqIHBhZ2VPcmllbnRhdGlvbiwgTGVuZ3RoJiB3aWR0aCwgTGVuZ3RoJiBoZWlnaHQpCitib29s
IGdldFBhZ2VTaXplRnJvbU5hbWUoQ1NTUHJpbWl0aXZlVmFsdWUqIHBhZ2VTaXplTmFtZSwgQ1NT
UHJpbWl0aXZlVmFsdWUqIHBhZ2VPcmllbnRhdGlvbiwgTGVuZ3RoJiB3aWR0aCwgTGVuZ3RoJiBo
ZWlnaHQpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPExlbmd0aD4gYTVXaWR0aChtbUxl
bmd0aCgxNDgpKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TGVuZ3RoPiBhNUhlaWdodCht
bUxlbmd0aCgyMTApKTsKQEAgLTUwMiw2ICs1MDMsOTMgQEAgREVGSU5FX0JPUkRFUl9JTUFHRV9N
T0RJRklFUl9IQU5ETEVSKFdlYmtpdE1hc2tCb3hJbWFnZSwgUmVwZWF0KQogREVGSU5FX0JPUkRF
Ul9JTUFHRV9NT0RJRklFUl9IQU5ETEVSKFdlYmtpdE1hc2tCb3hJbWFnZSwgU2xpY2UpCiBERUZJ
TkVfQk9SREVSX0lNQUdFX01PRElGSUVSX0hBTkRMRVIoV2Via2l0TWFza0JveEltYWdlLCBXaWR0
aCkKIAoraW5saW5lIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY3NzdG9MZW5ndGhDb252ZXJz
aW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3RvcihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQor
eworICAgIGlmIChGcmFtZSogZnJhbWUgPSBzdHlsZVJlc29sdmVyLmRvY3VtZW50KCkuZnJhbWUo
KSkKKyAgICAgICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5l
ZmZlY3RpdmVab29tKCkgKiBmcmFtZS0+dGV4dFpvb21GYWN0b3IoKSk7CisKKyAgICByZXR1cm4g
c3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKK30KKwor
aW5saW5lIGJvb2wgY29udmVydExpbmVIZWlnaHQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
ciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlLCBMZW5ndGgmIGxlbmd0aCwgZmxvYXQgbXVsdGlwbGll
ciA9IDEuZikKK3sKKyAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPih2YWx1ZSk7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9
PSBDU1NWYWx1ZU5vcm1hbCkgeworICAgICAgICBsZW5ndGggPSBSZW5kZXJTdHlsZTo6aW5pdGlh
bExpbmVIZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChwcmlt
aXRpdmVWYWx1ZS5pc0xlbmd0aCgpKSB7CisgICAgICAgIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVl
LmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRa
b29tRmFjdG9yKHN0eWxlUmVzb2x2ZXIpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1BlcmNlbnRhZ2UoKSkgeworICAgICAgICAvLyBGSVhN
RTogcGVyY2VudGFnZSBzaG91bGQgbm90IGJlIHJlc3RyaWN0ZWQgdG8gYW4gaW50ZWdlciBoZXJl
LgorICAgICAgICBsZW5ndGggPSBMZW5ndGgoKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Y29tcHV0
ZWRGb250U2l6ZSgpICogcHJpbWl0aXZlVmFsdWUuZ2V0SW50VmFsdWUoKSkgKiBtdWx0aXBsaWVy
IC8gMTAwLCBGaXhlZCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAocHJp
bWl0aXZlVmFsdWUuaXNOdW1iZXIoKSkgeworICAgICAgICAvLyBGSVhNRTogbnVtYmVyIGFuZCBw
ZXJjZW50YWdlIHZhbHVlcyBzaG91bGQgcHJvZHVjZSB0aGUgc2FtZSB0eXBlIG9mIExlbmd0aCAo
aWUuIEZpeGVkIG9yIFBlcmNlbnQpLgorICAgICAgICBsZW5ndGggPSBMZW5ndGgocHJpbWl0aXZl
VmFsdWUuZ2V0RG91YmxlVmFsdWUoKSAqIG11bHRpcGxpZXIgKiAxMDAuMCwgUGVyY2VudCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGlu
ZSB2b2lkIGFwcGx5VmFsdWVXb3JkU3BhY2luZyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSYgdmFsdWUpCit7CisgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOworCisgICAgTGVuZ3RoIHdvcmRTcGFjaW5nOwor
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpCisg
ICAgICAgIHdvcmRTcGFjaW5nID0gUmVuZGVyU3R5bGU6OmluaXRpYWxXb3JkU3BhY2luZygpOwor
ICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpCisgICAgICAgIHdvcmRTcGFj
aW5nID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNzc3RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3Ioc3R5bGVSZXNvbHZlcikpOworICAgIGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgpKQorICAgICAgICB3b3JkU3BhY2luZyA9
IExlbmd0aChjbGFtcFRvPGZsb2F0PihwcmltaXRpdmVWYWx1ZS5nZXREb3VibGVWYWx1ZSgpLCBt
aW5WYWx1ZUZvckNzc0xlbmd0aCwgbWF4VmFsdWVGb3JDc3NMZW5ndGgpLCBQZXJjZW50KTsKKyAg
ICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigpKQorICAgICAgICB3b3JkU3BhY2lu
ZyA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS5nZXREb3VibGVWYWx1ZSgpLCBGaXhlZCk7CisgICAg
ZWxzZQorICAgICAgICByZXR1cm47CisgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRXb3Jk
U3BhY2luZyh3b3JkU3BhY2luZyk7Cit9CisKKyNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklO
RykKKworaW5saW5lIHZvaWQgYXBwbHlJbmhlcml0TGluZUhlaWdodChTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyKQoreworICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0TGluZUhlaWdo
dChzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmxpbmVIZWlnaHQoKSk7CisgICAgc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLT5zZXRTcGVjaWZpZWRMaW5lSGVpZ2h0KHN0eWxlUmVzb2x2ZXIucGFy
ZW50U3R5bGUoKS0+c3BlY2lmaWVkTGluZUhlaWdodCgpKTsKK30KKworaW5saW5lIHZvaWQgYXBw
bHlJbml0aWFsTGluZUhlaWdodChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoreworICAg
IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlh
bExpbmVIZWlnaHQoKSk7CisgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRTcGVjaWZpZWRM
aW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsU3BlY2lmaWVkTGluZUhlaWdodCgpKTsKK30K
KworaW5saW5lIHZvaWQgYXBwbHlWYWx1ZUxpbmVIZWlnaHQoU3R5bGVSZXNvbHZlciYgc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoreworICAgIExlbmd0aCBsaW5lSGVpZ2h0OworICAg
IGlmICghY29udmVydExpbmVIZWlnaHQoc3R5bGVSZXNvbHZlciwgdmFsdWUsIGxpbmVIZWlnaHQs
IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+dGV4dFNpemVBZGp1c3QoKS5tdWx0aXBsaWVyKCkpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldExpbmVIZWln
aHQobGluZUhlaWdodCk7CisgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRTcGVjaWZpZWRM
aW5lSGVpZ2h0KGxpbmVIZWlnaHQpOworfQorCisjZWxzZQorCitpbmxpbmUgdm9pZCBhcHBseVZh
bHVlTGluZUhlaWdodChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFs
dWUpCit7CisgICAgTGVuZ3RoIGxpbmVIZWlnaHQ7CisgICAgaWYgKCFjb252ZXJ0TGluZUhlaWdo
dChzdHlsZVJlc29sdmVyLCB2YWx1ZSwgbGluZUhlaWdodCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0TGluZUhlaWdodChsaW5lSGVpZ2h0KTsKK30K
KworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFN0eWxlQnVpbGRlckZ1bmN0aW9ucwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241714</attachid>
            <date>2014-11-17 08:05:59 -0800</date>
            <delta_ts>2014-11-17 08:43:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138766-20141117080610.patch</filename>
            <type>text/plain</type>
            <size>27052</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2MTY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzZhYzUwZTc4Njk5MzAw
MzZkZTI0OGY2MDdhOGI0MTZkZDM3YWJjMS4uYTczZjYyOWUwOWJlMzkzZDUxYWE2MDFiNjk1NTli
NzkyYjVmY2Y3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE0LTExLTE1ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBtb3JlIENTUyBwcm9w
ZXJ0aWVzIHRvIHRoZSBuZXcgU3R5bGVCdWlsZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg3NjYKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlci4KKworICAgICAgICBNb3ZlIG1vcmUgQ1NTIHByb3BlcnRpZXMgZnJvbSBEZXByZWNh
dGVkU3R5bGVCdWlsZGVyIHRvIHRoZSBuZXcKKyAgICAgICAgU3R5bGVCdWlsZGVyOgorICAgICAg
ICBsaW5lLWhlaWdodAorICAgICAgICB3b3JkLXNwYWNpbmcKKyAgICAgICAgLXdlYmtpdC1tYXJx
dWVlLXJlcGV0aXRpb24KKyAgICAgICAgLXdlYmtpdC10ZXh0LXVuZGVybGluZS1wb3NpdGlvbgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICog
Y3NzL0NTU1Byb3BlcnR5TmFtZXMuaW46CisgICAgICAgICogY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1
aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVwcmVjYXRlZFN0eWxlQnVpbGRlcjo6RGVw
cmVjYXRlZFN0eWxlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpjc3N0b0xlbmd0aENvbnZl
cnNpb25EYXRhV2l0aFRleHRab29tRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlNYXJxdWVlUmVwZXRpdGlvbjo6YXBwbHlWYWx1ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5TWFycXVlZVJlcGV0aXRpb246OmNyZWF0ZUhh
bmRsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRVbmRl
cmxpbmVQb3NpdGlvbjo6YXBwbHlWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5VGV4dFVuZGVybGluZVBvc2l0aW9uOjpjcmVhdGVIYW5kbGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlMaW5lSGVpZ2h0OjphcHBseVZhbHVl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlMaW5lSGVpZ2h0Ojpj
cmVhdGVIYW5kbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlM
aW5lSGVpZ2h0Rm9ySU9TVGV4dEF1dG9zaXppbmc6OmFwcGx5VmFsdWUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUxpbmVIZWlnaHRGb3JJT1NUZXh0QXV0b3Npemlu
Zzo6YXBwbHlJbml0aWFsVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUxpbmVIZWlnaHRGb3JJT1NUZXh0QXV0b3NpemluZzo6YXBwbHlJbmhlcml0VmFsdWUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUxpbmVIZWlnaHRGb3JJ
T1NUZXh0QXV0b3NpemluZzo6Y3JlYXRlSGFuZGxlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5V29yZFNwYWNpbmc6OmFwcGx5VmFsdWUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVdvcmRTcGFjaW5nOjpjcmVhdGVIYW5kbGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKiBjc3MvU3R5bGVCdWlsZGVyQ29udmVydGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRNYXJxdWVlUmVwZXRpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0
VW5kZXJsaW5lUG9zaXRpb24pOgorICAgICAgICAqIGNzcy9TdHlsZUJ1aWxkZXJDdXN0b20uaDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckZ1bmN0aW9uczo6Y3NzdG9MZW5ndGhDb252
ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1
aWxkZXJGdW5jdGlvbnM6OmNvbnZlcnRMaW5lSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlQnVpbGRlckZ1bmN0aW9uczo6YXBwbHlWYWx1ZVdvcmRTcGFjaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlQnVpbGRlckZ1bmN0aW9uczo6YXBwbHlJbmhlcml0TGluZUhlaWdodCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJGdW5jdGlvbnM6OmFwcGx5SW5pdGlhbExpbmVI
ZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyRnVuY3Rpb25zOjphcHBseVZh
bHVlTGluZUhlaWdodCk6CisKIDIwMTQtMTEtMTYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KIAogICAgICAgICBNb3ZlICd2ZXJ0aWNhbC1hbGlnbicgQ1NTIHByb3BlcnR5IHRvIHRo
ZSBuZXcgU3R5bGVCdWlsZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJv
cGVydHlOYW1lcy5pbiBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eU5hbWVzLmluCmlu
ZGV4IDI3M2ExYWIxMWUxMmQyZjM0Nzg3MGEwZTdjZDhjMjVhOTY3NTFiYmMuLjAyNGM3ZWZhZDBl
YWU2OWE4YzVhN2ZkOGQ0MTBmNDY3YTlmNGQ4MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQcm9wZXJ0eU5hbWVzLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9w
ZXJ0eU5hbWVzLmluCkBAIC04MCw3ICs4MCwxMSBAQCB0ZXh0LXJlbmRlcmluZyBbSW5oZXJpdGVk
XQogem9vbSBbTmV3U3R5bGVCdWlsZGVyLCBDdXN0b209QWxsXQogCiAvLyBsaW5lIGhlaWdodCBu
ZWVkcyB0byBiZSByaWdodCBhZnRlciB0aGUgYWJvdmUgaGlnaC1wcmlvcml0eSBwcm9wZXJ0aWVz
Ci1saW5lLWhlaWdodCBbSW5oZXJpdGVkXQorI2lmIGRlZmluZWQoRU5BQkxFX0lPU19URVhUX0FV
VE9TSVpJTkcpICYmIEVOQUJMRV9JT1NfVEVYVF9BVVRPU0laSU5HCitsaW5lLWhlaWdodCBbSW5o
ZXJpdGVkLCBOZXdTdHlsZUJ1aWxkZXIsIEN1c3RvbT1BbGxdCisjZWxzZQorbGluZS1oZWlnaHQg
W0luaGVyaXRlZCwgTmV3U3R5bGVCdWlsZGVyLCBHZXR0ZXI9c3BlY2lmaWVkTGluZUhlaWdodCwg
Q3VzdG9tPVZhbHVlXQorI2VuZGlmCiAKIC8vIEtlZXAgdGhpcyBpbiBiZXR3ZWVuIHRoZSBoaWdo
ZXN0IHByaW9yaXR5IHByb3BzIGFuZCB0aGUgbG93ZXIgb25lcy4KIC13ZWJraXQtcnVieS1wb3Np
dGlvbiBbSW5oZXJpdGVkLCBOZXdTdHlsZUJ1aWxkZXIsIFR5cGVOYW1lPVJ1YnlQb3NpdGlvbl0K
QEAgLTI2Miw3ICsyNjYsNyBAQCB3aWRvd3MgW0luaGVyaXRlZF0KIHdpZHRoIFtOZXdTdHlsZUJ1
aWxkZXIsIEluaXRpYWw9aW5pdGlhbFNpemUsIENvbnZlcnRlcj1MZW5ndGhTaXppbmddCiB3b3Jk
LWJyZWFrIFtJbmhlcml0ZWQsIE5ld1N0eWxlQnVpbGRlcl0KIC1lcHViLXdvcmQtYnJlYWsgPSB3
b3JkLWJyZWFrCi13b3JkLXNwYWNpbmcgW0luaGVyaXRlZF0KK3dvcmQtc3BhY2luZyBbSW5oZXJp
dGVkLCBOZXdTdHlsZUJ1aWxkZXIsIEN1c3RvbT1WYWx1ZV0KIHdvcmQtd3JhcCBbSW5oZXJpdGVk
LCBOZXdTdHlsZUJ1aWxkZXI9RU92ZXJmbG93V3JhcCwgTmFtZUZvck1ldGhvZHM9T3ZlcmZsb3dX
cmFwXQogei1pbmRleAogYWx0CkBAIC00MjksNyArNDMzLDcgQEAganVzdGlmeS1jb250ZW50IFtO
ZXdTdHlsZUJ1aWxkZXJdCiAtd2Via2l0LW1hcnF1ZWUKIC13ZWJraXQtbWFycXVlZS1kaXJlY3Rp
b24gW05ld1N0eWxlQnVpbGRlcl0KIC13ZWJraXQtbWFycXVlZS1pbmNyZW1lbnQgW05ld1N0eWxl
QnVpbGRlciwgQ3VzdG9tPVZhbHVlXQotLXdlYmtpdC1tYXJxdWVlLXJlcGV0aXRpb24KKy13ZWJr
aXQtbWFycXVlZS1yZXBldGl0aW9uIFtOZXdTdHlsZUJ1aWxkZXIsIE5hbWVGb3JNZXRob2RzPU1h
cnF1ZWVMb29wQ291bnQsIENvbnZlcnRlcj1NYXJxdWVlUmVwZXRpdGlvbl0KIC13ZWJraXQtbWFy
cXVlZS1zcGVlZCBbTmV3U3R5bGVCdWlsZGVyLCBDb252ZXJ0ZXI9TWFycXVlZVNwZWVkXQogLXdl
YmtpdC1tYXJxdWVlLXN0eWxlIFtOZXdTdHlsZUJ1aWxkZXIsIFR5cGVOYW1lPUVNYXJxdWVlQmVo
YXZpb3IsIE5hbWVGb3JNZXRob2RzPU1hcnF1ZWVCZWhhdmlvcl0KIC13ZWJraXQtbWFzawpAQCAt
NDg2LDcgKzQ5MCw3IEBAIG9yZGVyIFtOZXdTdHlsZUJ1aWxkZXIsIFR5cGVOYW1lPWludF0KIC13
ZWJraXQtdGV4dC1kZWNvcmF0aW9uLXN0eWxlIFtOZXdTdHlsZUJ1aWxkZXIsIFR5cGVOYW1lPVRl
eHREZWNvcmF0aW9uU3R5bGVdCiAtd2Via2l0LXRleHQtZGVjb3JhdGlvbi1jb2xvcgogLXdlYmtp
dC10ZXh0LWRlY29yYXRpb24tc2tpcCBbSW5oZXJpdGVkXQotLXdlYmtpdC10ZXh0LXVuZGVybGlu
ZS1wb3NpdGlvbiBbSW5oZXJpdGVkXQorLXdlYmtpdC10ZXh0LXVuZGVybGluZS1wb3NpdGlvbiBb
SW5oZXJpdGVkLCBOZXdTdHlsZUJ1aWxkZXIsIENvbnZlcnRlcj1UZXh0VW5kZXJsaW5lUG9zaXRp
b25dCiAtd2Via2l0LXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0IFtJbmhlcml0ZWRdCiAtd2Vi
a2l0LXRleHQtZW1waGFzaXMgW0luaGVyaXRlZF0KIC1lcHViLXRleHQtZW1waGFzaXMgPSAtd2Vi
a2l0LXRleHQtZW1waGFzaXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNh
dGVkU3R5bGVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVC
dWlsZGVyLmNwcAppbmRleCA0ZTM2MDAwZWYyYmViN2Q1Y2VkMDM4MzM2ZmE4ZTNmODhlM2FkZjJk
Li5hYjEzOWQ1ZGQ3MDNkZDczOTA3MzZkYzM4ZTVmZDE0Yzc0ODgyOTBjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwCkBAIC05MjUsMTQgKzkyNSw2
IEBAIHN0YXRpYyBUZXh0RGVjb3JhdGlvblNraXAgdmFsdWVUb0RlY29yYXRpb25Ta2lwKENTU1By
aW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1CiAgICAgcmV0dXJuIFRleHREZWNvcmF0aW9uU2tp
cE5vbmU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBjc3N0
b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29tRmFjdG9yKFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIpCi17Ci0gICAgaWYgKEZyYW1lKiBmcmFtZSA9IHN0eWxlUmVzb2x2ZXIuZG9j
dW1lbnQoKS5mcmFtZSgpKQotICAgICAgICByZXR1cm4gc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNz
c1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbShzdHlsZVJlc29s
dmVyLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSAqIGZyYW1lLT50ZXh0Wm9vbUZhY3RvcigpKTsK
LQotICAgIHJldHVybiBzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSgpOwotfQotCiBjbGFzcyBBcHBseVByb3BlcnR5VGV4dERlY29yYXRpb25Ta2lwIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKQEAgLTk1NiwxNjUgKzk0OCw2
IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCi1jbGFzcyBBcHBseVByb3BlcnR5TWFycXVlZVJlcGV0
aXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsK
LSAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKLSAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUluZmluaXRlKQotICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TWFycXVlZUxvb3BDb3VudCgtMSk7IC8vIC0xIG1lYW5z
IHJlcGVhdCBmb3JldmVyLgotICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJl
cigpKQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TWFycXVlZUxvb3BD
b3VudChwcmltaXRpdmVWYWx1ZS5nZXRJbnRWYWx1ZSgpKTsKLSAgICB9Ci0gICAgc3RhdGljIFBy
b3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKLSAgICB7Ci0gICAgICAgIFByb3BlcnR5SGFu
ZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURlZmF1bHQ8aW50LCAmUmVuZGVyU3R5bGU6Om1h
cnF1ZWVMb29wQ291bnQsIGludCwgJlJlbmRlclN0eWxlOjpzZXRNYXJxdWVlTG9vcENvdW50LCBp
bnQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbE1hcnF1ZWVMb29wQ291bnQ+OjpjcmVhdGVIYW5kbGVy
KCk7Ci0gICAgICAgIHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoaGFuZGxlci5pbmhlcml0RnVuY3Rp
b24oKSwgaGFuZGxlci5pbml0aWFsRnVuY3Rpb24oKSwgJmFwcGx5VmFsdWUpOwotICAgIH0KLX07
Ci0KLWNsYXNzIEFwcGx5UHJvcGVydHlUZXh0VW5kZXJsaW5lUG9zaXRpb24gewotcHVibGljOgot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBp
cyB0cnVlIGlmIHZhbHVlIGlzICdhdXRvJyBvciAnYWxwaGFiZXRpYycuCi0gICAgICAgIGlmIChp
czxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkgewotICAgICAgICAgICAgVGV4dFVuZGVybGlu
ZVBvc2l0aW9uIHQgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKLSAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRVbmRlcmxpbmVQb3NpdGlvbih0
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHVuc2lnbmVkIHQg
PSAwOwotICAgICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKSB7Ci0gICAgICAgICAg
ICBmb3IgKGF1dG8mIGN1cnJlbnRWYWx1ZSA6IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVl
KSkgewotICAgICAgICAgICAgICAgIFRleHRVbmRlcmxpbmVQb3NpdGlvbiB0MiA9IGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPihjdXJyZW50VmFsdWUuZ2V0KCkpOwotICAgICAgICAgICAgICAg
IHQgfD0gdDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0VGV4dFVuZGVybGluZVBvc2l0aW9uKHN0YXRpY19jYXN0PFRleHRVbmRl
cmxpbmVQb3NpdGlvbj4odCkpOwotICAgIH0KLSAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNy
ZWF0ZUhhbmRsZXIoKQotICAgIHsKLSAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBB
cHBseVByb3BlcnR5RGVmYXVsdEJhc2U8VGV4dFVuZGVybGluZVBvc2l0aW9uLCAmUmVuZGVyU3R5
bGU6OnRleHRVbmRlcmxpbmVQb3NpdGlvbiwgVGV4dFVuZGVybGluZVBvc2l0aW9uLCAmUmVuZGVy
U3R5bGU6OnNldFRleHRVbmRlcmxpbmVQb3NpdGlvbiwgVGV4dFVuZGVybGluZVBvc2l0aW9uLCAm
UmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0VW5kZXJsaW5lUG9zaXRpb24+OjpjcmVhdGVIYW5kbGVy
KCk7Ci0gICAgICAgIHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoaGFuZGxlci5pbmhlcml0RnVuY3Rp
b24oKSwgaGFuZGxlci5pbml0aWFsRnVuY3Rpb24oKSwgJmFwcGx5VmFsdWUpOwotICAgIH0KLX07
Ci0KLWNsYXNzIEFwcGx5UHJvcGVydHlMaW5lSGVpZ2h0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSk7Ci0gICAgICAgIExlbmd0aCBsaW5lSGVpZ2h0OwotCi0gICAgICAgIGlmIChwcmltaXRp
dmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpCi0gICAgICAgICAgICBsaW5l
SGVpZ2h0ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCk7Ci0gICAgICAgIGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpCi0gICAgICAgICAgICBsaW5lSGVpZ2h0ID0g
cHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNzc3RvTGVuZ3RoQ29udmVyc2lv
bkRhdGFXaXRoVGV4dFpvb21GYWN0b3IoKnN0eWxlUmVzb2x2ZXIpKTsKLSAgICAgICAgZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBwZXJjZW50YWdlIHNob3VsZCBub3QgYmUgcmVzdHJpY3RlZCB0byBhbiBpbnRlZ2VyIGhlcmUu
Ci0gICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKChzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5jb21wdXRlZEZvbnRTaXplKCkgKiBwcmltaXRpdmVWYWx1ZS5nZXRJbnRWYWx1ZSgpKSAvIDEw
MCwgRml4ZWQpOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTnVtYmVyKCkp
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBudW1iZXIgYW5kIHBlcmNlbnRhZ2UgdmFsdWVzIHNo
b3VsZCBwcm9kdWNlIHRoZSBzYW1lIHR5cGUgb2YgTGVuZ3RoIChpZS4gRml4ZWQgb3IgUGVyY2Vu
dCkuCi0gICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLmdldERv
dWJsZVZhbHVlKCkgKiAxMDAuMCwgUGVyY2VudCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0
KGxpbmVIZWlnaHQpOwotICAgIH0KLSAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhh
bmRsZXIoKQotICAgIHsKLSAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVBy
b3BlcnR5RGVmYXVsdEJhc2U8Y29uc3QgTGVuZ3RoJiwgJlJlbmRlclN0eWxlOjpzcGVjaWZpZWRM
aW5lSGVpZ2h0LCBMZW5ndGgsICZSZW5kZXJTdHlsZTo6c2V0TGluZUhlaWdodCwgTGVuZ3RoLCAm
UmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0Pjo6Y3JlYXRlSGFuZGxlcigpOwotICAgICAg
ICByZXR1cm4gUHJvcGVydHlIYW5kbGVyKGhhbmRsZXIuaW5oZXJpdEZ1bmN0aW9uKCksIGhhbmRs
ZXIuaW5pdGlhbEZ1bmN0aW9uKCksICZhcHBseVZhbHVlKTsKLSAgICB9Ci19OwotCi0jaWYgRU5B
QkxFKElPU19URVhUX0FVVE9TSVpJTkcpCi0vLyBGSVhNRTogU2hhcmUgbW9yZSBjb2RlIHdpdGgg
Y2xhc3MgQXBwbHlQcm9wZXJ0eUxpbmVIZWlnaHQuCi1jbGFzcyBBcHBseVByb3BlcnR5TGluZUhl
aWdodEZvcklPU1RleHRBdXRvc2l6aW5nIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUm
IHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7Ci0g
ICAgICAgIExlbmd0aCBsaW5lSGVpZ2h0OwotCi0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5n
ZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpCi0gICAgICAgICAgICBsaW5lSGVpZ2h0ID0g
UmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCk7Ci0gICAgICAgIGVsc2UgaWYgKHByaW1p
dGl2ZVZhbHVlLmlzTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBwcmltaXRp
dmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdp
dGhUZXh0Wm9vbUZhY3Rvcigqc3R5bGVSZXNvbHZlcikpOwotICAgICAgICAgICAgaWYgKHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnRleHRTaXplQWRqdXN0KCkuaXNQZXJjZW50YWdlKCkpCi0gICAg
ICAgICAgICAgICAgbGluZUhlaWdodCA9IExlbmd0aChsaW5lSGVpZ2h0LnZhbHVlKCkgKiBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT50ZXh0U2l6ZUFkanVzdCgpLm11bHRpcGxpZXIoKSwgRml4ZWQp
OwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgpKSB7Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogcGVyY2VudGFnZSBzaG91bGQgbm90IGJlIHJlc3RyaWN0ZWQg
dG8gYW4gaW50ZWdlciBoZXJlLgotICAgICAgICAgICAgbGluZUhlaWdodCA9IExlbmd0aCgoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udFNpemUoKSAqIHByaW1pdGl2ZVZhbHVlLmdldEludFZh
bHVlKCkpIC8gMTAwLCBGaXhlZCk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUu
aXNOdW1iZXIoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IG51bWJlciBhbmQgcGVyY2VudGFn
ZSB2YWx1ZXMgc2hvdWxkIHByb2R1Y2UgdGhlIHNhbWUgdHlwZSBvZiBMZW5ndGggKGllLiBGaXhl
ZCBvciBQZXJjZW50KS4KLSAgICAgICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT50
ZXh0U2l6ZUFkanVzdCgpLmlzUGVyY2VudGFnZSgpKQotICAgICAgICAgICAgICAgIGxpbmVIZWln
aHQgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUuZ2V0RG91YmxlVmFsdWUoKSAqIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnRleHRTaXplQWRqdXN0KCkubXVsdGlwbGllcigpICogMTAwLjAsIFBlcmNl
bnQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5n
dGgocHJpbWl0aXZlVmFsdWUuZ2V0RG91YmxlVmFsdWUoKSAqIDEwMC4wLCBQZXJjZW50KTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldExpbmVIZWlnaHQobGluZUhlaWdodCk7Ci0gICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldFNwZWNpZmllZExpbmVIZWlnaHQobGluZUhlaWdodCk7Ci0gICAgfQot
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlcikKLSAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwot
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRTcGVjaWZpZWRMaW5lSGVpZ2h0KFJl
bmRlclN0eWxlOjppbml0aWFsU3BlY2lmaWVkTGluZUhlaWdodCgpKTsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyKQotICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0TGluZUhlaWdodChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5saW5lSGVpZ2h0KCkp
OwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRTcGVjaWZpZWRMaW5lSGVpZ2h0
KHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPnNwZWNpZmllZExpbmVIZWlnaHQoKSk7Ci0g
ICAgfQotCi0gICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBw
bHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsKLSAgICB9Ci19OwotI2VuZGlmCi0KLWNsYXNz
IEFwcGx5UHJvcGVydHlXb3JkU3BhY2luZyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NW
YWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
JiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwot
ICAgICAgICBMZW5ndGggd29yZFNwYWNpbmc7Ci0KLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkKLSAgICAgICAgICAgIHdvcmRTcGFjaW5n
ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxXb3JkU3BhY2luZygpOwotICAgICAgICBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKSB7Ci0gICAgICAgICAgICB3b3JkU3BhY2luZyA9IHBy
aW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjc3N0b0xlbmd0aENvbnZlcnNpb25E
YXRhV2l0aFRleHRab29tRmFjdG9yKCpzdHlsZVJlc29sdmVyKSk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkpCi0gICAgICAgICAgICB3b3JkU3BhY2lu
ZyA9IExlbmd0aChjbGFtcFRvPGZsb2F0PihwcmltaXRpdmVWYWx1ZS5nZXREb3VibGVWYWx1ZSgp
LCBtaW5WYWx1ZUZvckNzc0xlbmd0aCwgbWF4VmFsdWVGb3JDc3NMZW5ndGgpLCBQZXJjZW50KTsK
LSAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAg
IHdvcmRTcGFjaW5nID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLmdldERvdWJsZVZhbHVlKCksIEZp
eGVkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRXb3JkU3BhY2luZyh3b3JkU3BhY2luZyk7Ci0gICAgfQotICAg
IHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCi0gICAgewotICAgICAgICBQ
cm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxjb25zdCBM
ZW5ndGgmLCAmUmVuZGVyU3R5bGU6OndvcmRTcGFjaW5nLCBMZW5ndGgsICZSZW5kZXJTdHlsZTo6
c2V0V29yZFNwYWNpbmcsIExlbmd0aCwgJlJlbmRlclN0eWxlOjppbml0aWFsV29yZFNwYWNpbmc+
OjpjcmVhdGVIYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoaGFuZGxl
ci5pbmhlcml0RnVuY3Rpb24oKSwgaGFuZGxlci5pbml0aWFsRnVuY3Rpb24oKSwgJmFwcGx5VmFs
dWUpOwotICAgIH0KLX07Ci0KIGNsYXNzIEFwcGx5UHJvcGVydHlUZXh0RW1waGFzaXNTdHlsZSB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKQEAgLTE0MDQsMTggKzEyMzcsMTIgQEAg
RGVwcmVjYXRlZFN0eWxlQnVpbGRlcjo6RGVwcmVjYXRlZFN0eWxlQnVpbGRlcigpCiAgICAgc2V0
UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Rm9udFN0eWxlLCBBcHBseVByb3BlcnR5Rm9udDxG
b250SXRhbGljLCAmRm9udERlc2NyaXB0aW9uOjppdGFsaWMsICZGb250RGVzY3JpcHRpb246OnNl
dEl0YWxpYywgRm9udEl0YWxpY09mZj46OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5Rm9udFZhcmlhbnQsIEFwcGx5UHJvcGVydHlGb250PEZvbnRT
bWFsbENhcHMsICZGb250RGVzY3JpcHRpb246OnNtYWxsQ2FwcywgJkZvbnREZXNjcmlwdGlvbjo6
c2V0U21hbGxDYXBzLCBGb250U21hbGxDYXBzT2ZmPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBBcHBseVByb3BlcnR5Rm9u
dFdlaWdodDo6Y3JlYXRlSGFuZGxlcigpKTsKLSNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklO
RykKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBBcHBseVBy
b3BlcnR5TGluZUhlaWdodEZvcklPU1RleHRBdXRvc2l6aW5nOjpjcmVhdGVIYW5kbGVyKCkpOwot
I2Vsc2UKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBBcHBs
eVByb3BlcnR5TGluZUhlaWdodDo6Y3JlYXRlSGFuZGxlcigpKTsKLSNlbmRpZgogICAgIHNldFBy
b3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlLCBBcHBseVByb3BlcnR5U3R5
bGVJbWFnZTwmUmVuZGVyU3R5bGU6Omxpc3RTdHlsZUltYWdlLCAmUmVuZGVyU3R5bGU6OnNldExp
c3RTdHlsZUltYWdlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxMaXN0U3R5bGVJbWFnZSwgQ1NTUHJv
cGVydHlMaXN0U3R5bGVJbWFnZT46OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJvcGVydHlI
YW5kbGVyKENTU1Byb3BlcnR5T3JwaGFucywgQXBwbHlQcm9wZXJ0eUF1dG88c2hvcnQsICZSZW5k
ZXJTdHlsZTo6b3JwaGFucywgJlJlbmRlclN0eWxlOjpzZXRPcnBoYW5zLCAmUmVuZGVyU3R5bGU6
Omhhc0F1dG9PcnBoYW5zLCAmUmVuZGVyU3R5bGU6OnNldEhhc0F1dG9PcnBoYW5zPjo6Y3JlYXRl
SGFuZGxlcigpKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlPdXRsaW5lQ29s
b3IsIEFwcGx5UHJvcGVydHlDb2xvcjxOb0luaGVyaXRGcm9tUGFyZW50LCAmUmVuZGVyU3R5bGU6
Om91dGxpbmVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lQ29sb3IsICZSZW5kZXJTdHls
ZTo6c2V0VmlzaXRlZExpbmtPdXRsaW5lQ29sb3IsICZSZW5kZXJTdHlsZTo6Y29sb3I+OjpjcmVh
dGVIYW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eU91dGxpbmVT
dHlsZSwgQXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZTo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbkNvbG9yLCBB
cHBseVByb3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJvbVBhcmVudCwgJlJlbmRlclN0eWxlOjp0ZXh0
RGVjb3JhdGlvbkNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFRleHREZWNvcmF0aW9uQ29sb3IsICZS
ZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtUZXh0RGVjb3JhdGlvbkNvbG9yLCAmUmVuZGVyU3R5
bGU6OmNvbG9yPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvblNraXAsIEFwcGx5UHJvcGVydHlUZXh0RGVjb3Jh
dGlvblNraXA6OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1By
b3BlcnR5V2Via2l0VGV4dFVuZGVybGluZVBvc2l0aW9uLCBBcHBseVByb3BlcnR5VGV4dFVuZGVy
bGluZVBvc2l0aW9uOjpjcmVhdGVIYW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eVRleHRSZW5kZXJpbmcsIEFwcGx5UHJvcGVydHlGb250PFRleHRSZW5kZXJpbmdN
b2RlLCAmRm9udERlc2NyaXB0aW9uOjp0ZXh0UmVuZGVyaW5nTW9kZSwgJkZvbnREZXNjcmlwdGlv
bjo6c2V0VGV4dFJlbmRlcmluZ01vZGUsIEF1dG9UZXh0UmVuZGVyaW5nPjo6Y3JlYXRlSGFuZGxl
cigpKTsKIAogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUFuaW1hdGlvbkRlbGF5
LCBBcHBseVByb3BlcnR5QW5pbWF0aW9uPGRvdWJsZSwgJkFuaW1hdGlvbjo6ZGVsYXksICZBbmlt
YXRpb246OnNldERlbGF5LCAmQW5pbWF0aW9uOjppc0RlbGF5U2V0LCAmQW5pbWF0aW9uOjpjbGVh
ckRlbGF5LCAmQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRGVsYXksICZDU1NUb1N0eWxlTWFw
OjptYXBBbmltYXRpb25EZWxheSwgJlJlbmRlclN0eWxlOjphY2Nlc3NBbmltYXRpb25zLCAmUmVu
ZGVyU3R5bGU6OmFuaW1hdGlvbnM+OjpjcmVhdGVIYW5kbGVyKCkpOwpAQCAtMTQ0Nyw3ICsxMjc0
LDYgQEAgRGVwcmVjYXRlZFN0eWxlQnVpbGRlcjo6RGVwcmVjYXRlZFN0eWxlQnVpbGRlcigpCiAg
ICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0Rm9udEtlcm5pbmcsIEFwcGx5
UHJvcGVydHlGb250PEZvbnREZXNjcmlwdGlvbjo6S2VybmluZywgJkZvbnREZXNjcmlwdGlvbjo6
a2VybmluZywgJkZvbnREZXNjcmlwdGlvbjo6c2V0S2VybmluZywgRm9udERlc2NyaXB0aW9uOjpB
dXRvS2VybmluZz46OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5V2Via2l0Rm9udFNtb290aGluZywgQXBwbHlQcm9wZXJ0eUZvbnQ8Rm9udFNtb290
aGluZ01vZGUsICZGb250RGVzY3JpcHRpb246OmZvbnRTbW9vdGhpbmcsICZGb250RGVzY3JpcHRp
b246OnNldEZvbnRTbW9vdGhpbmcsIEF1dG9TbW9vdGhpbmc+OjpjcmVhdGVIYW5kbGVyKCkpOwog
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEZvbnRWYXJpYW50TGlnYXR1
cmVzLCBBcHBseVByb3BlcnR5Rm9udFZhcmlhbnRMaWdhdHVyZXM6OmNyZWF0ZUhhbmRsZXIoKSk7
Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVJlcGV0aXRp
b24sIEFwcGx5UHJvcGVydHlNYXJxdWVlUmVwZXRpdGlvbjo6Y3JlYXRlSGFuZGxlcigpKTsKICAg
ICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrQ2xpcCwgQXBwbHlQcm9w
ZXJ0eUZpbGxMYXllcjxFRmlsbEJveCwgQ1NTUHJvcGVydHlXZWJraXRNYXNrQ2xpcCwgTWFza0Zp
bGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NNYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6Om1h
c2tMYXllcnMsICZGaWxsTGF5ZXI6OmlzQ2xpcFNldCwgJkZpbGxMYXllcjo6Y2xpcCwgJkZpbGxM
YXllcjo6c2V0Q2xpcCwgJkZpbGxMYXllcjo6Y2xlYXJDbGlwLCAmRmlsbExheWVyOjppbml0aWFs
RmlsbENsaXAsICZDU1NUb1N0eWxlTWFwOjptYXBGaWxsQ2xpcD46OmNyZWF0ZUhhbmRsZXIoKSk7
CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFza0NvbXBvc2l0ZSwg
QXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxDb21wb3NpdGVPcGVyYXRvciwgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrQ29tcG9zaXRlLCBNYXNrRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc01hc2tM
YXllcnMsICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJkZpbGxMYXllcjo6aXNDb21wb3NpdGVT
ZXQsICZGaWxsTGF5ZXI6OmNvbXBvc2l0ZSwgJkZpbGxMYXllcjo6c2V0Q29tcG9zaXRlLCAmRmls
bExheWVyOjpjbGVhckNvbXBvc2l0ZSwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxDb21wb3NpdGUs
ICZDU1NUb1N0eWxlTWFwOjptYXBGaWxsQ29tcG9zaXRlPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAg
ICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrSW1hZ2UsIEFwcGx5UHJv
cGVydHlGaWxsTGF5ZXI8U3R5bGVJbWFnZSosIENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlLCBN
YXNrRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc01hc2tMYXllcnMsICZSZW5kZXJTdHls
ZTo6bWFza0xheWVycywgJkZpbGxMYXllcjo6aXNJbWFnZVNldCwgJkZpbGxMYXllcjo6aW1hZ2Us
ICZGaWxsTGF5ZXI6OnNldEltYWdlLCAmRmlsbExheWVyOjpjbGVhckltYWdlLCAmRmlsbExheWVy
Ojppbml0aWFsRmlsbEltYWdlLCAmQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbEltYWdlPjo6Y3JlYXRl
SGFuZGxlcigpKTsKQEAgLTE0NjgsNyArMTI5NCw2IEBAIERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXI6
OkRlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIoKQogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eSwgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjxDU1NQ
cm9wZXJ0eUlELCAmQW5pbWF0aW9uOjpwcm9wZXJ0eSwgJkFuaW1hdGlvbjo6c2V0UHJvcGVydHks
ICZBbmltYXRpb246OmlzUHJvcGVydHlTZXQsICZBbmltYXRpb246OmNsZWFyUHJvcGVydHksICZB
bmltYXRpb246OmluaXRpYWxBbmltYXRpb25Qcm9wZXJ0eSwgJkNTU1RvU3R5bGVNYXA6Om1hcEFu
aW1hdGlvblByb3BlcnR5LCAmUmVuZGVyU3R5bGU6OmFjY2Vzc1RyYW5zaXRpb25zLCAmUmVuZGVy
U3R5bGU6OnRyYW5zaXRpb25zPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24sIEFwcGx5UHJv
cGVydHlBbmltYXRpb248Y29uc3QgUGFzc1JlZlB0cjxUaW1pbmdGdW5jdGlvbj4sICZBbmltYXRp
b246OnRpbWluZ0Z1bmN0aW9uLCAmQW5pbWF0aW9uOjpzZXRUaW1pbmdGdW5jdGlvbiwgJkFuaW1h
dGlvbjo6aXNUaW1pbmdGdW5jdGlvblNldCwgJkFuaW1hdGlvbjo6Y2xlYXJUaW1pbmdGdW5jdGlv
biwgJkFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uLCAmQ1NTVG9TdHls
ZU1hcDo6bWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24sICZSZW5kZXJTdHlsZTo6YWNjZXNzVHJh
bnNpdGlvbnMsICZSZW5kZXJTdHlsZTo6dHJhbnNpdGlvbnM+OjpjcmVhdGVIYW5kbGVyKCkpOwog
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdpZG93cywgQXBwbHlQcm9wZXJ0eUF1
dG88c2hvcnQsICZSZW5kZXJTdHlsZTo6d2lkb3dzLCAmUmVuZGVyU3R5bGU6OnNldFdpZG93cywg
JlJlbmRlclN0eWxlOjpoYXNBdXRvV2lkb3dzLCAmUmVuZGVyU3R5bGU6OnNldEhhc0F1dG9XaWRv
d3M+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0
eVdvcmRTcGFjaW5nLCBBcHBseVByb3BlcnR5V29yZFNwYWNpbmc6OmNyZWF0ZUhhbmRsZXIoKSk7
CiAKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlaSW5kZXgsIEFwcGx5UHJvcGVy
dHlBdXRvPGludCwgJlJlbmRlclN0eWxlOjp6SW5kZXgsICZSZW5kZXJTdHlsZTo6c2V0WkluZGV4
LCAmUmVuZGVyU3R5bGU6Omhhc0F1dG9aSW5kZXgsICZSZW5kZXJTdHlsZTo6c2V0SGFzQXV0b1pJ
bmRleD46OmNyZWF0ZUhhbmRsZXIoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVCdWlsZGVyQ29udmVydGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWls
ZGVyQ29udmVydGVyLmgKaW5kZXggNjNlM2ViMzdkMWMyMmYyZGY3NjhhMjdiZmQzMzUxNjA5NDJm
NWZhOS4uOWE4MzZjZDBmZmZlN2E0OWE4YzY4OTlhZmJkNzZmOGExNTk1MWMzNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaApAQCAtNjMsNyArNjMsOSBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIEVUZXh0QWxpZ24gY29udmVydFRleHRBbGlnbihTdHlsZVJlc29s
dmVyJiwgQ1NTVmFsdWUmKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGlwUGF0aE9wZXJhdGlv
bj4gY29udmVydENsaXBQYXRoKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOwogICAgIHN0YXRp
YyBFUmVzaXplIGNvbnZlcnRSZXNpemUoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7CisgICAg
c3RhdGljIGludCBjb252ZXJ0TWFycXVlZVJlcGV0aXRpb24oU3R5bGVSZXNvbHZlciYsIENTU1Zh
bHVlJik7CiAgICAgc3RhdGljIGludCBjb252ZXJ0TWFycXVlZVNwZWVkKFN0eWxlUmVzb2x2ZXIm
LCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBUZXh0VW5kZXJsaW5lUG9zaXRpb24gY29udmVydFRl
eHRVbmRlcmxpbmVQb3NpdGlvbihTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKIAogcHJpdmF0
ZToKICAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb1JhZGl1c0xlbmd0aChDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJiwgQ1NTUHJpbWl0aXZlVmFsdWUmKTsKQEAgLTM4OCw2ICszOTAsMTYgQEAg
aW5saW5lIEVSZXNpemUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UmVzaXplKFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIKICAgICByZXR1cm4gcmVzaXplOwogfQogCitpbmxpbmUg
aW50IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE1hcnF1ZWVSZXBldGl0aW9uKFN0eWxl
UmVzb2x2ZXImLCBDU1NWYWx1ZSYgdmFsdWUpCit7CisgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOworICAgIGlmIChwcmltaXRpdmVW
YWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKKyAgICAgICAgcmV0dXJuIC0x
OyAvLyAtMSBtZWFucyByZXBlYXQgZm9yZXZlci4KKworICAgIEFTU0VSVChwcmltaXRpdmVWYWx1
ZS5pc051bWJlcigpKTsKKyAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWUuZ2V0SW50VmFsdWUoKTsK
K30KKwogaW5saW5lIGludCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRNYXJxdWVlU3Bl
ZWQoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRp
dmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CkBAIC00MTcsNiAr
NDI5LDIwIEBAIGlubGluZSBpbnQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TWFycXVl
ZVNwZWVkKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYKICAgICByZXR1cm4gc3BlZWQ7CiB9CiAK
K2lubGluZSBUZXh0VW5kZXJsaW5lUG9zaXRpb24gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252
ZXJ0VGV4dFVuZGVybGluZVBvc2l0aW9uKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYgdmFsdWUp
Cit7CisgICAgLy8gVGhpcyBpcyB0cnVlIGlmIHZhbHVlIGlzICdhdXRvJyBvciAnYWxwaGFiZXRp
YycuCisgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCisgICAgICAgIHJldHVy
biBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOworCisgICAgdW5zaWduZWQgY29t
YmluZWRQb3NpdGlvbiA9IDA7CisgICAgZm9yIChhdXRvJiBjdXJyZW50VmFsdWUgOiBkb3duY2Fz
dDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgeworICAgICAgICBUZXh0VW5kZXJsaW5lUG9zaXRpb24g
cG9zaXRpb24gPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY3VycmVudFZhbHVlLmdldCgp
KTsKKyAgICAgICAgY29tYmluZWRQb3NpdGlvbiB8PSBwb3NpdGlvbjsKKyAgICB9CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFRleHRVbmRlcmxpbmVQb3NpdGlvbj4oY29tYmluZWRQb3NpdGlvbik7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFN0eWxlQnVpbGRlckNv
bnZlcnRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3Vz
dG9tLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKaW5kZXggM2Ex
NTgxODBmMTNkZDg0NmYxYmU3NzBjODgxNjMxMmQyYjc0ZDhkNC4uNTgxNjFkZjI1ZmQ2MDkwNGU1
YWZjMGE1ODQyZTJjNDkwOGJmM2QzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlQnVpbGRlckN1c3RvbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJD
dXN0b20uaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNTU0ltYWdlR2VuZXJhdG9yVmFs
dWUuaCIKICNpbmNsdWRlICJDU1NJbWFnZVNldFZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTSW1hZ2VW
YWx1ZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03MSw3ICs3Miw3IEBAIGlubGluZSB2b2lkIGFwcGx5
VmFsdWVEaXJlY3Rpb24oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZh
bHVlKQogICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgpLnNldERpcmVjdGlvblNldE9uRG9jdW1l
bnRFbGVtZW50KHRydWUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVzZXRFZmZlY3RpdmVa
b29tKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCByZXNldEVmZmVj
dGl2ZVpvb20oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKIHsKICAgICAvLyBSZXNldCB0
aGUgem9vbSBpbiBlZmZlY3QuIFRoaXMgYWxsb3dzIHRoZSBzZXRab29tIG1ldGhvZCB0byBhY2N1
cmF0ZWx5IGNvbXB1dGUgYSBuZXcgem9vbSBpbiBlZmZlY3QuCiAgICAgc3R5bGVSZXNvbHZlci5z
ZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSA/IHN0eWxlUmVzb2x2
ZXIucGFyZW50U3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpIDogUmVuZGVyU3R5bGU6OmluaXRpYWxa
b29tKCkpOwpAQCAtMTQ5LDEyICsxNTAsMTIgQEAgaW5saW5lIHZvaWQgYXBwbHlWYWx1ZVdlYmtp
dFNoYXBlT3V0c2lkZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYKIH0K
ICNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NIQVBFUykKIAotc3RhdGljIGlubGluZSBMZW5ndGggbW1M
ZW5ndGgoZG91YmxlIG1tKQoraW5saW5lIExlbmd0aCBtbUxlbmd0aChkb3VibGUgbW0pCiB7CiAg
ICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KG1tLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX01NKSk7CiAgICAgcmV0dXJuIHZhbHVlLmdldCgp
LmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwogfQot
c3RhdGljIGlubGluZSBMZW5ndGggaW5jaExlbmd0aChkb3VibGUgaW5jaCkKK2lubGluZSBMZW5n
dGggaW5jaExlbmd0aChkb3VibGUgaW5jaCkKIHsKICAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+
IHZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoaW5jaCwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19JTikpOwogICAgIHJldHVybiB2YWx1ZS5nZXQoKS5jb21wdXRlTGVuZ3RoPExlbmd0aD4o
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKQEAgLTUwMiw2ICs1MDMsOTMgQEAgREVGSU5F
X0JPUkRFUl9JTUFHRV9NT0RJRklFUl9IQU5ETEVSKFdlYmtpdE1hc2tCb3hJbWFnZSwgUmVwZWF0
KQogREVGSU5FX0JPUkRFUl9JTUFHRV9NT0RJRklFUl9IQU5ETEVSKFdlYmtpdE1hc2tCb3hJbWFn
ZSwgU2xpY2UpCiBERUZJTkVfQk9SREVSX0lNQUdFX01PRElGSUVSX0hBTkRMRVIoV2Via2l0TWFz
a0JveEltYWdlLCBXaWR0aCkKIAoraW5saW5lIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY3Nz
dG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3RvcihTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyKQoreworICAgIGlmIChGcmFtZSogZnJhbWUgPSBzdHlsZVJlc29sdmVyLmRv
Y3VtZW50KCkuZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5j
c3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkgKiBmcmFtZS0+dGV4dFpvb21GYWN0b3IoKSk7
CisKKyAgICByZXR1cm4gc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEoKTsKK30KKworaW5saW5lIGJvb2wgY29udmVydExpbmVIZWlnaHQoU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlLCBMZW5ndGgmIGxlbmd0aCwg
ZmxvYXQgbXVsdGlwbGllciA9IDEuZikKK3sKKyAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkgeworICAgICAgICBsZW5ndGggPSBSZW5k
ZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKSB7CisgICAgICAgIGxlbmd0aCA9
IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjc3N0b0xlbmd0aENvbnZlcnNp
b25EYXRhV2l0aFRleHRab29tRmFjdG9yKHN0eWxlUmVzb2x2ZXIpKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1BlcmNlbnRhZ2UoKSkgewor
ICAgICAgICAvLyBGSVhNRTogcGVyY2VudGFnZSBzaG91bGQgbm90IGJlIHJlc3RyaWN0ZWQgdG8g
YW4gaW50ZWdlciBoZXJlLgorICAgICAgICBsZW5ndGggPSBMZW5ndGgoKHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+Y29tcHV0ZWRGb250U2l6ZSgpICogcHJpbWl0aXZlVmFsdWUuZ2V0SW50VmFsdWUo
KSkgKiBtdWx0aXBsaWVyIC8gMTAwLCBGaXhlZCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNOdW1iZXIoKSkgeworICAgICAgICAvLyBGSVhN
RTogbnVtYmVyIGFuZCBwZXJjZW50YWdlIHZhbHVlcyBzaG91bGQgcHJvZHVjZSB0aGUgc2FtZSB0
eXBlIG9mIExlbmd0aCAoaWUuIEZpeGVkIG9yIFBlcmNlbnQpLgorICAgICAgICBsZW5ndGggPSBM
ZW5ndGgocHJpbWl0aXZlVmFsdWUuZ2V0RG91YmxlVmFsdWUoKSAqIG11bHRpcGxpZXIgKiAxMDAu
MCwgUGVyY2VudCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2lubGluZSB2b2lkIGFwcGx5VmFsdWVXb3JkU3BhY2luZyhTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCit7CisgICAgYXV0byYgcHJpbWl0aXZl
VmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOworCisgICAgTGVuZ3Ro
IHdvcmRTcGFjaW5nOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NT
VmFsdWVOb3JtYWwpCisgICAgICAgIHdvcmRTcGFjaW5nID0gUmVuZGVyU3R5bGU6OmluaXRpYWxX
b3JkU3BhY2luZygpOworICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpCisg
ICAgICAgIHdvcmRTcGFjaW5nID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+
KGNzc3RvTGVuZ3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3Ioc3R5bGVSZXNvbHZl
cikpOworICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgpKQorICAgICAg
ICB3b3JkU3BhY2luZyA9IExlbmd0aChjbGFtcFRvPGZsb2F0PihwcmltaXRpdmVWYWx1ZS5nZXRE
b3VibGVWYWx1ZSgpLCBtaW5WYWx1ZUZvckNzc0xlbmd0aCwgbWF4VmFsdWVGb3JDc3NMZW5ndGgp
LCBQZXJjZW50KTsKKyAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigpKQorICAg
ICAgICB3b3JkU3BhY2luZyA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS5nZXREb3VibGVWYWx1ZSgp
LCBGaXhlZCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm47CisgICAgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5zZXRXb3JkU3BhY2luZyh3b3JkU3BhY2luZyk7Cit9CisKKyNpZiBFTkFCTEUoSU9T
X1RFWFRfQVVUT1NJWklORykKKworaW5saW5lIHZvaWQgYXBwbHlJbmhlcml0TGluZUhlaWdodChT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoreworICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUo
KS0+c2V0TGluZUhlaWdodChzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmxpbmVIZWlnaHQo
KSk7CisgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRTcGVjaWZpZWRMaW5lSGVpZ2h0KHN0
eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+c3BlY2lmaWVkTGluZUhlaWdodCgpKTsKK30KKwor
aW5saW5lIHZvaWQgYXBwbHlJbml0aWFsTGluZUhlaWdodChTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyKQoreworICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0TGluZUhlaWdodChSZW5k
ZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5zZXRTcGVjaWZpZWRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsU3BlY2lmaWVkTGlu
ZUhlaWdodCgpKTsKK30KKworaW5saW5lIHZvaWQgYXBwbHlWYWx1ZUxpbmVIZWlnaHQoU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoreworICAgIExlbmd0aCBs
aW5lSGVpZ2h0OworICAgIGlmICghY29udmVydExpbmVIZWlnaHQoc3R5bGVSZXNvbHZlciwgdmFs
dWUsIGxpbmVIZWlnaHQsIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+dGV4dFNpemVBZGp1c3QoKS5t
dWx0aXBsaWVyKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPnNldExpbmVIZWlnaHQobGluZUhlaWdodCk7CisgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5zZXRTcGVjaWZpZWRMaW5lSGVpZ2h0KGxpbmVIZWlnaHQpOworfQorCisjZWxzZQorCitpbmxp
bmUgdm9pZCBhcHBseVZhbHVlTGluZUhlaWdodChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSYgdmFsdWUpCit7CisgICAgTGVuZ3RoIGxpbmVIZWlnaHQ7CisgICAgaWYgKCFj
b252ZXJ0TGluZUhlaWdodChzdHlsZVJlc29sdmVyLCB2YWx1ZSwgbGluZUhlaWdodCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0TGluZUhlaWdodChs
aW5lSGVpZ2h0KTsKK30KKworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFN0eWxlQnVpbGRlckZ1
bmN0aW9ucwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>